pax_global_header00006660000000000000000000000064150447524200014515gustar00rootroot0000000000000052 comment=44d4445c1f95846a575dae634aa19d887dab9c5e libdfp-1.0.17/000077500000000000000000000000001504475242000130435ustar00rootroot00000000000000libdfp-1.0.17/.gitignore000066400000000000000000000003361504475242000150350ustar00rootroot00000000000000*~ *.a *.cache *.d *.jmprel *.log *.map *.o *.os *.out *.so *.so.* *.symlist *.tmp config.h config.status configure.scan /Makefile libdfp-test-ulps.h stamp-h* sysd-versions Versions.all Versions.sysdeps gen-auto-dfp-tests libdfp-1.0.17/.travis.yml000066400000000000000000000072001504475242000151530ustar00rootroot00000000000000dist: focal language: c matrix: include: - name: "linux-amd64-gcc-9" os: linux arch: amd64 compiler: gcc-9 env: - CXX="g++-9" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-9 g++-9" - name: "linux-ppc64le-gcc-9" os: linux arch: ppc64le compiler: gcc-9 env: - CXX="g++-9" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-9 g++-9" - name: "linux-ppc64le-gcc-9-sw" os: linux arch: ppc64le compiler: gcc-9 env: - CONFIGURE_OPTS="--with-cpu=no" - CXX="g++-9" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-9 g++-9" - name: "linux-s390x-gcc-9" os: linux arch: s390x compiler: gcc-9 env: - CXX="g++-9" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-9 g++-9" - name: "linux-s390x-gcc-9-sw" os: linux arch: s390x compiler: gcc-9 env: - CONFIGURE_OPTS="--with-cpu=no" - CXX="g++-9" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-9 g++-9" - name: "linux-amd64-gcc-10" os: linux arch: amd64 compiler: gcc-10 env: - CXX="g++-10" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-10 g++-10" - name: "linux-ppc64le-gcc-10" os: linux arch: ppc64le compiler: gcc-10 env: - CXX="g++-10" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-10 g++-10" - name: "linux-ppc64le-gcc-10-sw" os: linux arch: ppc64le compiler: gcc-10 env: - CONFIGURE_OPTS="--with-cpu=no" - CXX="g++-10" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-10 g++-10" - name: "linux-s390x-gcc-10" os: linux arch: s390x compiler: gcc-10 env: - CXX="g++-10" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-10 g++-10" - name: "linux-s390x-gcc-10-sw" os: linux arch: s390x compiler: gcc-10 env: - CONFIGURE_OPTS="--with-cpu=no" - CXX="g++-10" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-10 g++-10" - name: "linux-amd64-gcc-11" os: linux arch: amd64 compiler: gcc-11 env: - CXX="g++-11" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-11 g++-11" - name: "linux-ppc64le-gcc-11" os: linux arch: ppc64le compiler: gcc-11 env: - CXX="g++-11" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-11 g++-11" - name: "linux-ppc64le-gcc-11-sw" os: linux arch: ppc64le compiler: gcc-11 env: - CONFIGURE_OPTS="--with-cpu=no" - CXX="g++-11" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-11 g++-11" - name: "linux-s390x-gcc-11" os: linux arch: s390x compiler: gcc-11 env: - CXX="g++-11" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-11 g++-11" - name: "linux-s390x-gcc-11-sw" os: linux arch: s390x compiler: gcc-11 env: - CONFIGURE_OPTS="--with-cpu=no" - CXX="g++-11" - CFLAGS="-O2" - CXXFLAGS="-O2" - PKG_CC="gcc-11 g++-11" before_install: - sudo add-apt-repository universe - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-get update - sudo apt-get -y install ${PKG_CC} script: - mkdir $(pwd)/install - ./configure $CONFIGURE_OPTS --prefix=$(pwd)/install - make -j $(nproc) - make install - make -j $(nproc) check libdfp-1.0.17/CONTRIBUTING000066400000000000000000000037011504475242000146760ustar00rootroot00000000000000Contribution Statement: The maintainers of this library require that each individual change be accompanied by a DCO, or that the contributor has gone through the FSF copyright assignment process. The DCO is described below. Process For Accepting Third Party Code Contributions: To improve tracking of contributions to this project we will use a process modeled on the modified Developers Certificate of Origin (DCO 1.1) and use a "sign-off" procedure on patches that are being emailed around or contributed in any other way. The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: if you can certify the below: By making a contribution to this project, I certify that: (a)The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b)The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source License and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c)The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d)The contribution is made free of any other party's intellectual property claims or rights. (e)I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. Then you just add a line saying: Signed-off-by: Random J Developer random@developer.org> libdfp-1.0.17/CONTRIBUTORS000066400000000000000000000017331504475242000147270ustar00rootroot00000000000000Maintainers: Base: Paul E. Murphy Tulio Magno Quites Machado Filho PowerPC Paul E. Murphy Tulio Magno Quites Machado Filho s390: Paul E. Murphy x86(64): Paul E. Murphy Tulio Magno Quites Machado Filho Contributors: Ryan S. Arnold Peter Eberlein Joseph Kerian Andreas Krebbel Carlos Eduardo Seo Luis Machado Adhemerval Zanella Tulio Magno Quites Machado Filho Rajalakshmi Srinivasaraghavan Paul E. Murphy Gabriel F. T. Gomes Stefan Liebler libdfp-1.0.17/COPYING.RUNTIME000066400000000000000000000063741504475242000152320ustar00rootroot00000000000000GCC RUNTIME LIBRARY EXCEPTION Version 3.1, 31 March 2009 Copyright (C) 2009 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This GCC Runtime Library Exception ("Exception") is an additional permission under section 7 of the GNU General Public License, version 3 ("GPLv3"). It applies to a given file (the "Runtime Library") that bears a notice placed by the copyright holder of the file stating that the file is governed by GPLv3 along with this Exception. When you use GCC to compile a program, GCC may combine portions of certain GCC header files and runtime libraries with the compiled program. The purpose of this Exception is to allow compilation of non-GPL (including proprietary) programs to use, in this way, the header files and runtime libraries covered by this Exception. 0. Definitions. A file is an "Independent Module" if it either requires the Runtime Library for execution after a Compilation Process, or makes use of an interface provided by the Runtime Library, but is not otherwise based on the Runtime Library. "GCC" means a version of the GNU Compiler Collection, with or without modifications, governed by version 3 (or a specified later version) of the GNU General Public License (GPL) with the option of using any subsequent versions published by the FSF. "GPL-compatible Software" is software whose conditions of propagation, modification and use would permit combination with GCC in accord with the license of GCC. "Target Code" refers to output from any compiler for a real or virtual target processor architecture, in executable form or suitable for input to an assembler, loader, linker and/or execution phase. Notwithstanding that, Target Code does not include data in any format that is used as a compiler intermediate representation, or used for producing a compiler intermediate representation. The "Compilation Process" transforms code entirely represented in non-intermediate languages designed for human-written code, and/or in Java Virtual Machine byte code, into Target Code. Thus, for example, use of source code generators and preprocessors need not be considered part of the Compilation Process, since the Compilation Process can be understood as starting with the output of the generators or preprocessors. A Compilation Process is "Eligible" if it is done using GCC, alone or with other GPL-compatible software, or if it is done without using any work based on GCC. For example, using non-GPL-compatible Software to optimize any GCC intermediate representations would not qualify as an Eligible Compilation Process. 1. Grant of Additional Permission. You have permission to propagate a work of Target Code formed by combining the Runtime Library with Independent Modules, even if such propagation would otherwise violate the terms of GPLv3, provided that all Target Code was generated by Eligible Compilation Processes. You may then convey such a combination under terms of your choice, consistent with the licensing of the Independent Modules. 2. No Weakening of GCC Copyleft. The availability of this Exception does not imply any general presumption that third-party software is unaffected by the copyleft requirements of the license of GCC. libdfp-1.0.17/COPYING.libdecnumber.txt000066400000000000000000000015771504475242000173600ustar00rootroot00000000000000libdecnumber is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . libdfp-1.0.17/COPYING.libdfp.txt000066400000000000000000000577711504475242000161740ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991-2015 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. 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 libdfp-1.0.17/COPYING.txt000066400000000000000000000003271504475242000147160ustar00rootroot00000000000000Exclusive libdfp users should consult COPYING.libdfp.txt libdecnumber is used internally by libdfp, and ABI is exposed for user convenience. The license for these headers is contained in COPYING.libdecnumber.txt. libdfp-1.0.17/COPYING3000066400000000000000000001045131504475242000141650ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . libdfp-1.0.17/ChangeLog.old.md000066400000000000000000001533021504475242000157750ustar00rootroot00000000000000 - Miscellaneous changes - Makefile.in (distclean): Add as rule to remove files generated by configure. - Miscellaneous changes - README.user: Added new section on compliance With ISO/IEC TR 24732, the C++ DFP Draft Technical Report, including instructions on how to use (ios::fixed | ios::scientific) as ios\_base::fmtflags in order to get fully encoded precision in output string representation. - Miscellaneous changes - tests/test-printf.c: Add missing 'D' to a/A conv tests. - tests/scaffold.c: Correct comments for \_OSC and added a/A support. - tests/test-ostream.cpp: Modified expectations such that a/A ignores precision and always uses the num of significant digits in the mantissa when output. - tests/test-ostream-g-spec.cpp: Removed unnecessary define that used to be used to get g/G support. - dfp/decimal/decimal (FIND\_DEC\_MANT\_DIG): Remove ".*" from default string string. (LIBDFP\_META): Make g/G spec default. Enable a/A spec by checking flags for ios::fixed | ios::scientific. Condense uppercase/lowercase check. Don't call printf with a precision specifier if a/A is the desires spec conv. - Miscellaneous changes - tests/test-negate.c: New testcase. - Makefile.in (libdfp\_c\_tests): Add test-negate. - Miscellaneous changes - Makefile.in (test-printf.os, test-strtod.os): New rules to depend on printf\_dfp.os and strtod[32|64|128].os respectively. - strtod128.c (\_\_DEC\_MANT\_DIG\_\_, \_\_DEC\_MAX\_EXP\_\_, \_\_DEC\_MIN\_EXP\_\_): Define to \_Decimal128 values. - tests/test-strtod.c: Added tests near \_\_DEC*\_MAX\_EXP\_\_ and \_\_DEC*\_MIN\_EXP\_\_. - strtod64.c (\_\_DEC\_MANT\_DIG\_\_, \_\_DEC\_MAX\_EXP\_\_, \_\_DEC\_MIN\_EXP\_\_): Define to \_Decimal64 values. - sysdeps/powerpc/dfpu/numdigits.h (left\_justify): Fix VSX case by replacing xxlxor with xxlor insn. (getexp): Replace stfwix with stfd to prevent erroneous sign extend. - sysdeps/soft-dfp/dpd/numdigits.h (getexp): Make return value congruent with hardware-dfp for NaN. - strtod32.c (\_\_DEC\_MANT\_DIG\_\_, \_\_DEC\_MAX\_EXP\_\_, \_\_DEC\_MIN\_EXP\_\_): Define to \_Decimal32 values. (FUNCTION\_L\_INTERNAL): Add left\_justify call if proposed exponent is sufficiently close to \_\_DEC*\_MAX\_EXP\_\_. Add zero return if proposed exponent is smaller than \_\_DEC*\_MIN\_EXP\_\_. - Miscellaneous changes - Makefile.in (libdfp\_c\_tests): Added test-getexp. - tests/test-getexp.c: New test. - tests/test-decode.c (d64types): Added test for \_\_DEC64\_MAX\_\_ and \_\_DEC64\_MIN\_\_. - sysdeps/powerpc/dfpu/numdigits.h (getexpd[32|64|128]): Fixed in order to prevent erroneous sign extension due to using stfiwx. - Miscellaneous changes - sysdeps/powerpc/dfpu/numdigits.h: Cleaned up inline asm DEC\_TYPE declarations. Removed redundant macros. Merged macros under similar guards. - Miscellaneous changes - sysdeps/powerpc/dfpu/numdigits.h (numdigits*): Fix inline asm to place result of drrnd[q] into DEC\_TYPE instead of double. Update copyright years to range. - tests/test-decode.c: Update copyright years to range. - tests/test-param.c: Likewise. - tests/test-printf.c: Likewise. - tests/test-numdigits.c: Likewise. - tests/test-istream.cpp: Likewise. - tests/test-strtod.c: Likewise. - sysdeps/dpd/dpd-private.c: Likewise. - printf\_dfp.c: Fix erroneous test for \_Decimal64. Update copyright years to range. - Miscellaneous changes - Makefile.in (check): Add printf\_dfp.o dependency to check in order to have make check automatically rebuild libdfp is printf\_dfp.c has changed. - tests/test-decode.c: Add tests for decoding numbers with high exponents near \_\_DEC*\_MAX\_EXP\_\_. - tests/test-param.c (param\_test): Remove unnecessary assingments. - tests/test-printf.c: Add tests for \_\_DEC64\_MAX\_\_. - tests/test-numdigits.c: Add tests for \_\_DEC64\_MAX\_\_ and numbers approaching \_\_DEC*\_MAX\_EXP\_\_. - tests/test-GCC-PR52140.c (main): Remove unnecessary assignments. - tests/test-ostream.cpp: Formatting. - tests/debug-test.sh: Add ./ as a path prefix. - sysdeps/powerpc/dfpu/numdigits.h (numdigitsd*): Fix for numbers with exponent approaching \_\_DEC*\_MAX\_EXP\_\_ by biasing the exponent toward zero. - sysdeps/dpd/dpd-private.c: Formatting. - TODO: New items. - printf\_dfp.c (\_\_printf\_dfp): Fix for g/G specifier that converst to f/F form. Fix for a/A when the user supplied precision is 0, i.e. %.Ha. - Miscellaneous changes - Makefile.in (libdfp\_c\_tests): Add test-GCC-PR52140.c. - tests/test-istream.cpp: Comment out NaN tests. Two nans can't be compared. - tests/test-GCC-PR52140.c: New testcase for ICE. - TODO: Add item to upgrade libdecnumber version. - Miscellaneous changes - Makefile.in (install-readme): New target. (install): Consolidated by making install-headers and install-readme as dependent rules. - README.maintainer: Updated info on Versioning. - README.user: Added discussion on \_\_STDC\_DEC\_FP\_\_ - README.developer: Updated info on Versioning. - Miscellaneous changes - sysdeps/powerpc/powerpc32/power6x/Implies: Points to power6. - sysdeps/powerpc/powerpc32/power6x/fpu/Implies: Points to power6. - sysdeps/powerpc/powerpc64/power6x/Implies: Points to power6. - sysdeps/powerpc/powerpc64/power6x/fpu/Implies: Points to power6. - Miscellaneous changes - Makefile.in (libdfp\_cxx\_tests): Add test-ostream-g-spec test. - tests/test-ostream-g-spec.cpp: New file to test decimal/decimal's \_LIBDFP\_G\_CONV\_SPEC guard. - tests/test-printf.c: Add newly discovered %DDg failures. - tests/scaffold.c (\_OSC\_P): Add comment regarding \_LIBDFP\_G\_CONV\_SPEC. - tests/test-istream.cpp: Removed unused variable. - README.user: Update with information about NOT using #include . - dfp/float.h: Remove commented out decimal class predeclares. - dfp/decimal/decimal: Move #include to before #include\_next to prevent missing \_Decimal[32|64|128] definition errors. - Miscellaneous changes - Makefile.in (libdfp\_cxx\_tests): Added test-istream. - tests/scaffold.c (\_ISC \_ISC\_P): Added new istream compare macros conditional on #ifdef \_\_cplusplus. - tests/test-istream.cpp: New test for operator>>. - tests/test-strtod.c: Added a new value to test. - dfp/float.h: Correct \_Decimal[32|64|128] declarations. - dfp/decimal/decimal: Added operator>> support for decimal[32|64|128] C++ decimal floating point types. - README.user: Updated information on operator<< and operator>> support. - Miscellaneous changes - tests/test-log10d.c: Added missing #include "decode.h". - tests/scaffold.c (\_OSC \_OSC\_P): Added new ostream compare macros conditional on #ifdef \_\_cpluspluc. - tests/test-ostream.cpp: Added scaffold.c based tests. - Miscellaneous changes - dfp/decimal/decimal(operator<< decimal128): Removed now spurious call to ostream\_d128() (which has been removed from libdfp) in the decimal128 operator<< overload. Updated comments clarifying use of 'a/A' over 'g/G' for the default. - Miscellaneous changes - dfp/decimal/decimal: Added back in erroneously removed #include . - Miscellaneous changes - dfp/decimal/decimal: Removed ostreamd32, ostreamd64, and ostreamd128 prototypes. - Miscellaneous changes - decode.h: Added \_\_BEGIN\_DECLS and \_\_END\_DECLS around decoded[32|64|128] prototypes in order to allow them to be used in C++ compatibility testcases without warnings. - scaffold.c: Removed extra #include "decode.h". - test-strtod.c: Likewise. - Miscellaneous changes - Makefile.in: Copied contents of $(system\_header\_dirs) into $(header\_dirs) in order to have -I added automatically to the compiler invocation. This makes sure that dfp/decimal/decimal always comes before the system include/decimal/decimal header. - Miscellaneous changes - README.user: Add instructions for using to pick up operator<< and operator>> overloads for decimal[32|64|128] types. - README.developer: Removed necessity of including -isystem in CPPFLAGS in order to pick up decimal headers. - dfp/decimal: Created dfp/decimal/ header include directory. - dfp/decimal.tmp: Moved decimal.tmp to decimal/decimal. - dfp/decimal/decimal: Moved decimal.tmp to decimal/decimal. - Miscellaneous changes - Makefile.in: Install dfp/decimal/ directory. Add dfp/decimal/decimal path. - tests/test-ostream.cpp: Change to - TODO: Added directive to test decimal/ directory installs. - dfp/decimal: Moved file "decimal" to "decimal.tmp". - dfp/decimal.tmp: Moved file "decimal" to "decimal.tmp". - Miscellaneous changes - configure: Regenerated. - Makefile.in: (@CXX@, @LLD@, @OBDJUMP@, @GDB@, @CXXFLAGS@, and @CPPFLAGS@): New imports. (header\_dirs): Move dfp/ to $(system\_header\_dirs). (CXX\_DEFINES CXX\_WARNS): New variables. (.c.o): Add $(CPPFLAGS). Add -I$(system\_header\_dirs). (.c.os): Likewise (.S.o): Add -I$(system\_headers). (.cpp.os) Likewise. (GLIBC\_LIBS): Remove unnecessary libpthread.so linkage. (libdfp\_cxx\_tests): New variable. (libdfp\_tests): Renamed to (libdfp\_c\_tests) and replaced with $(libdfp\_c\_tests) $(libdp\_cxx\_tests). Added new rule for $(libdfp\_cxx\_tests).os dependencies on float.h. Added new rule for $(libdfp\_tests) to rely on tests/scaffold.c. Added new rule to link $(libdfp\_cxx\_tests) to their .os files. (.SUFFIXES): Added .cpp. - ieee754r/lgammad32.c: Changed to . - tests/test-printf.c: Discovered a bug in %.Ha. If there is a '.' with no precision specifier it prints a bogus value. This adds this failure to the test suite. - tests/test-ostream.cpp: New test to test operator<< header file additions in dfp/decimal. - configure.ac: Added AC\_PATH\_PROG for OBJDUMP, LDD, GDB. Added AC\_SUBST for CXXFLAGS, CPPFLAGS. - README.user: Added instructions for printf "a,A" Conversion Specifier usage. - README.developer: Added instructions for specifying PATH to pick up toolchain default programs. Added instructions for LDD, GDB, OBJDUMP, CXX, CXXFLAGS, and CPPLAGS. - Versions.def - Makefile.gdb: Use configure exported 'objdump' via $(OBJDUMP). Use configure exported 'ldd' via $(LDD). Use configure exported 'gdb' via $(GDB). - dfp/stdlib.h: Comment update. - dfp/float.h: New file adds \_Decimal[32|64|128] types #ifdef \_\_cplusplus and if they aren't added by the compiler. At the time of this writing the compiler hasn't added them to float.h yet. - dfp/decimal: New file adds operator<< for decimal[32|64|128] C++ types. This use C++ template metaprogramming to create functions that call printf. - printf\_dfp.c: Comment change for a/A spec char. - TODO: New item. - Miscellaneous changes - Makefile.in (libdfp\_tests): Add test-expd, testing expd[64|128]\(-1.0\) which was previously failing. (libdfp\_tests.so): New dummy rule to add $(top\_srcdir)/tests/scaffold.c as a dependency so that scaffold.c changes result in rebuilding the libdfp\_test .so files on make check. - tests/test-expd.c: New file testing expd[32|64|128]. - tests/scaffold.c (\_AVC \_AVC\_P): New macros which do a value compare but allow a +/- variation. - README.user: Added instructions for C++ types compatibility with ISO-C DFP types. - sysdeps/powerpc/dfpu/expd64.c: Existing code only accounts for positive 'n' in e^n. This fix allows for e^-n, which is just 1/(e^n). - Miscellaneous changes - README.user: Updated with instructions for using #include . - sysdeps/soft-dfp/dpd/Versions: Moved \_\_dpd\_extend* and \_\_dpd\_trunc* symbol definitions from here to... - sysdeps/dpd/Versions: here, since these are needed for all versions of libdfp, not just the soft-dfp version. - Miscellaneous changes - Makefile.in: Replace erroneous usage of $? with $^. Fix libdfp\_tests based rules to correct prerequisite usage so that a complete rebuild isn't required when only a few of the test case dependencies change. - Makefile.gdb: Correct prerequisite usage to not require a complete rebuild when only a few of the test case dependencies change. - Miscellaneous changes - dfp/stdlib.h: Added #include to correct include order problem. - dfp/wchar.h: Likewise. - tests/test-stdlib.c: New test to verify inclusion. - tests/test-wchar.c: New test to verify inclusion. - Makefile.in (libdfp\_tests): Added test-stdlib and test-wchar. - Miscellaneous changes - configure: Regenerated. - configure.ac: Incremented the version number to 1.0.8. - Versions.def: Incremented the version number to 1.0.8. - tests/test-bfp-conversions.c: Added tests for extendsddf extendsdtf extenddfdd extendddtf extenddftd and extendtftd. - Miscellaneous changes - base-math/Makefile: Moved 'classify' from sysdeps/soft-dfp/Makefile. - base-math/classify.c: Moved from sysdeps/soft-dfp/ because it's required for the power6 build as well. - base-math/extendsftd.c: Likewise. - base-math/extendsdtf.c: Likewise. - base-math/extenddfdd.c: Likewise. - base-math/trunctdsf.c: Likewise. - base-math/trunctfsd.c: Likewise. - base-math/extendddtf.c: Likewise. - base-math/extenddftd.c: Likewise. - base-math/extendsfsd.c: Likewise. - base-math/extendtftd.c: Likewise. - base-math/truncdddf.c: Likewise. - base-math/trunctfdd.c: Likewise. - base-math/trunctddf.c: Likewise. - base-math/truncsdsf.c: Likewise. - base-math/trunctdtf.c: Likewise. - base-math/extendsddf.c: Likewise. - base-math/extendsfdd.c: Likewise. - base-math/truncddsf.c: Likewise. - base-math/truncdfsd.c: Likewise. - tests/scaffold.c (\_VC\_P): Updated spacing in "Expected" and "Result" output. - tests/test-bfp-conversions.c: Added float -> \_Decimal128 tests. - sysdeps/soft-dfp/Makefile: Moved 'classify' to base-math/Makefile. - sysdeps/soft-dfp/classify.c: Moved to base-math/ because it's required for the power6 build as well. - sysdeps/soft-dfp/extendsftd.c: Likewise. - sysdeps/soft-dfp/extendsdtf.c: Likewise. - sysdeps/soft-dfp/extenddfdd.c: Likewise. - sysdeps/soft-dfp/trunctfsd.c: Likewise. - sysdeps/soft-dfp/trunctdsf.c: Likewise. - sysdeps/soft-dfp/extenddftd.c: Likewise. - sysdeps/soft-dfp/extendddtf.c: Likewise. - sysdeps/soft-dfp/extendsfsd.c: Likewise. - sysdeps/soft-dfp/extendtftd.c: Likewise. - sysdeps/soft-dfp/truncdddf.c: Likewise. - sysdeps/soft-dfp/trunctfdd.c: Likewise. - sysdeps/soft-dfp/trunctddf.c: Likewise. - sysdeps/soft-dfp/truncsdsf.c: Likewise. - sysdeps/soft-dfp/trunctdtf.c: Likewise. - sysdeps/soft-dfp/extendsfdd.c: Likewise. - sysdeps/soft-dfp/extendsddf.c: Likewise. - sysdeps/soft-dfp/truncddsf.c: Likewise. - sysdeps/soft-dfp/truncdfsd.c: Likewise. - Miscellaneous changes - Makefile.in (libdfp\_tests): Added test-bfp-conversions. - base-math/Makefile (libdfp\_files): Moved extendsfsd extendsddf extendsdtf extendsfdd extenddfdd extendddtf extendsftd extenddftd extendtftd truncsdsf truncdfsd trunctfsd truncddsf truncdddf trunctfdd trunctdsf trunctddf trunctdtf from sysdeps/soft-dfp/Makefile since they're required in all builds. - tests/test-bfp-conversions.c: New file to test bfp -> dfp and dfp -> bfp conversions. - include/convert.h: Moved from sysdeps/soft-dfp/ in preparation for moving extend and trunc bfp->dfp and dfp->bfp conversion functions. - sysdeps/soft-dfp/Makefile (libdfp\_files): Removed extendsfsd extendsddf extendsdtf extendsfdd extenddfdd extendddtf extendsftd extenddftd extendtftd truncsdsf truncdfsd trunctfsd truncddsf truncdddf trunctfdd trunctdsf trunctddf trunctdtf and moved to base-math/Makefile since they're required in all builds. - sysdeps/soft-dfp/extendsfsd.c: Replaced magic number '24' with \_\_FLT\_MANT\_DIG\_\_. - sysdeps/soft-dfp/convert.h: Moved to include/convert.h. - sysdeps/soft-dfp/truncdfsd.c: Replaced magic number '53' with \_\_DBL\_MANT\_DIG\_\_. - Miscellaneous changes - tests/gdb\_start\_address.py: New file which provides the start\_address() python convenience function to GDB. - Makefile.gdb (*.gdb): Break on \_dl\_start\_user for powerpc64 and \_dl\_main\_dispatch on powerpc32. Call new python convenience function start\_address() to get the start address of libc and libdfp for the scripts. - Miscellaneous changes - sysdeps/powerpc/powerpc32/power6/fpu/Makefile (ASFLAGS): Remove HAVE\_ASM\_PPC\_REL16 as it is no longer needed since we no longer support building the power[6|7] optimized libdfp with -mbss-plt. - sysdeps/powerpc/powerpc32/power6/fpu/floatunsdisd.S: Remove HAVE\_ASM\_PPC\_REL16 guard and remove the bss-plt form of GOT access. We no longer support building the power[6|7] optimized libdfp with -mbss-plt. - sysdeps/powerpc/powerpc32/power6/fpu/fixunssddi.S: Likewise. - sysdeps/powerpc/powerpc32/power6/fpu/fixunsdddi.S: Likewise. - sysdeps/powerpc/powerpc32/power6/fpu/fixunstddi.S: Likewise. - sysdeps/powerpc/powerpc32/power6/fpu/floatunsdidd.S: Likewise. - sysdeps/powerpc/powerpc32/power6/fpu/floatunsditd.S: Likewise. - Miscellaneous changes - configure: Regenerated. - Miscellaneous changes - Makefile.in: Added $(CFLAGS) to .S.o: rules. - configure.ac: Added -DSHARED to picflag in order to enforce PIC when compiling hand rolled asm functions. - sysdeps/powerpc/powerpc32/power6/fpu/Makefile: Added -DHAVE\_ASM\_PPC\_REL16 to ASFLAGS in order to enforce secure-plt style GOT access. - Miscellaneous changes - sysdeps/s390/dfpu/fe\_decround.c (\_\_init\_printf\_dfp\_getround): Added function definition for callback and added callback pointer. The printf\_dfp () function was graciously skipping over the rounding mode modifiers due to this missing definition. - README.developer: Updated compatibility matrix to put x86 and x86\_64 under TODO. Changed all instances of at05 to at4.0. - Miscellaneous changes - fe\_decround.c (\_\_init\_printf\_dfp\_getround): Remove unnecessary prototype and declare constructor 'static. Remove unnecessary hidden\_def(\_\_init\_printf\_dfp\_getround). - sysdeps/powerpc/dfpu/fe\_decround.c (\_\_init\_printf\_dfp\_getround): Remove unnecessary prototype and declare constructor 'static. Remove unnecessary hidden\_def(\_\_init\_printf\_dfp\_getround). - sysdeps/s390/dfpu/fe\_decround.c: Added - printf\_dfp.c: Add hidden\_def (\_\_register\_printf\_dfp). - include/libdfp-symbols.h (hidden\_def): Fix macro definition. - Miscellaneous changes - printf\_dfp.c (\_\_printf\_dfp): Finished cleaning up 'decimal'. - sysdeps/powerpc/sysdep.h: Updated copyright year. - Miscellaneous changes - README.maintainer: Updated. - sysdeps/powerpc/powerpc32/power6/fpu/fixunstdsi.S (END): Fix erroneous \_\_dpd\_fixunstssi to \_\_dpd\_fixunstdsi. - sysdeps/powerpc/powerpc32/sysdep.h (PROF): Removed PROF macros. (CALL\_MCOUNT): Removed CALL\_MCOUNT. (ENTRY): Removed CALL\_MCOUNT and C\_SYMBOL\_NAME from macro body. Replaced C\_LABEL with LABEL. (C\_TEXT): Removed macro as unnecessary. - sysdeps/powerpc/sysdep.h (C\_LABEL): Removed macro. - include/libdfp-symbols.h (LABEL): New macro which replaces C\_LABEL by removing preceding underscore. - printf\_dfp.c (\_\_dfp\_ais): Return -1 if info->user doesn't match any of the DFP mod\_[H|D|DD] identifiers. (\_\_printf\_dfp): Started cleaning up 'decimal' per Jakub Jelinek's suggestion. Fixed bug found by Jakub Jelinek where random garbage is printed if the modifier is not H/D/DD. The default was dropping into the \_Decimal32 case when it should have been returning -2. - Miscellaneous changes - README.maintainer: Added todo for "Commit Access" - Miscellaneous changes - README.maintainer: New file. - README.developer: Added several TODO items. - TODO: Added an item. - CONTRIBUTORS: Moved DCO from here to... - CONTRIBUTING: here. 2011-1-21 Ryan S. Arnold - configure: Regenerated. - configure.ac: Incremented the version number to 1.0.7. - Versions.def: Incremented the version number to 1.0.7. 2011-1-21 Andreas Krebbel - sysdeps/s390/dfpu/numdigits.h (setexp): Bias the exponent and return '1' for z zero mantissa, which is what is done for soft-dfp. - sysdeps/s390/dfpu/fe\_decround.c (\_\_fe\_dec\_setround): Enable extended rounding modes (5,6 and 7) which are not covered by the standard. 2011-1-18 Ryan S. Arnold - configure: Regenerated. - tests/test-isfinite.c: Changed expectation on isfinite() for negative numbers on Power5 to '1'. Power6 (hardware isfinite) returns '-1' on isfinite. The spec simply says that non-zero means finite. - tests/test-logd.c: Removed half completed 'quantize compare' functionality which was throwing a false error. - tests/test-decode.c: Removed dangling printf that wasn't useful. - tests/test-printf.c: Added a \_Decimal128 test for printing (1.0DL / 1.000000e-123DL) which has a sufficiently negative exponent that it forced the 'index' (rounding digit) position to be negative and caused a segv when \_\_printf\_dfp() tried to erroneously round the result on s390. We got lucky up until now on PowerPC due to the kernel reserving space on the top of the stack. - configure.ac: Incremented the version number to 1.0.6. - Versions.def: Incremented the version number to 1.0.6. 2011-1-18 Andreas Krebbel - printf\_dfp.c (\_\_printf\_dfp): Fixed segv where, if the exponent is sufficiently negative it pushes 'index' (the digit used to round values to the left) into a negative number. In that case we simply don't need to round at all. 2011-1-18 Ryan S. Arnold - tests/test-strtod.c: Adjusted assumptions of tests from truncation on too long of an input to rounding to nearest. 2011-1-18 Andreas Krebbel - strtod32.c (FUNCTION\_L\_INTERNAL): Check an extra digit on the input to see if we need to round rather than truncate. 2011-1-17 Ryan S. Arnold - configure: Regenerated. - tests/test-strtod.c: Removed unnecessary test cases. - configure.ac: Incremented the version number to 1.0.5. - Versions.def: Incremented the version number to 1.0.5. - Miscellaneous changes - Makefile.in (libdfp\_tests): Added test-log10d. - tests/test-decode.c: Added decode of log10d128(0.0000000011DL) to verify that it prints correctly in declets. - tests/test-logd.c (main): Added pbuf[CHAR\_MAX] so that tests work properly. - tests/test-log10d.c: New test-case which verifies that printf now works properly for the result of log10d128(0.0000000011DL). - sysdeps/dpd/dpd-private.c: Fixed dpd\_to\_char[0x3f4] from "974" to "774" since the previous was a typo which was making values print incorrectly. - Miscellaneous changes - configure: Regenerated. - configure.ac: Removed addition of -fPIC to CFLAGS and instead export it to Makefile.in who is now responsible for adding it to CFLAGS. Set (picflags): Default to -fpic since the GOT for libdfp should be small enough that -fPIC isn't needed. - Makefile.in: (BACKEND\_CFLAGS): New variable which passes -mcpu=foo and -fpic to the backend sub make invocation in -DEFS to get around the fact that libdecnumber/Makefile.in won't allow overridden CFLAGS. - sysdeps/dpd/dpd-private.c: Fixed 'used when uninitialized' warning by switching "else if" case to "else" for Decimal128. - Miscellaneous changes - strtod32.c: Fix precedence of arithmetic operation. - tests/test-strtod.c: Add new testcase and fix wrong tests. - Miscellaneous changes - configure: Regenerated. - configure.ac: Incremented the version number to 1.0.4 - README.user: Marked empty sections with (TODO). - Versions.def: Incremented the version number to 1.0.4 - Miscellaneous changes - README.user: Added clarification of how to include dfp/stdlib.h, dfp/fenv.h and dfp/wchar.h. - Miscellaneous changes - README.user: Added clarification of how to include dfp/math.h. - Miscellaneous changes - dfp/math.h: Move #include\_next so that if the compiler invocation has -I//include/dfp/ but doesn't define \_\_STDC\_WANT\_DEC\_FP\_\_ that they still get the system math.h. - Miscellaneous changes - CONTRIBUTORS: Added Luis Machado. Added DCO requirements. - Miscellaneous changes - strtod32.c (FUNCTION\_L\_INTERNAL): Fix comparison operator. - Miscellaneous changes - sysdeps/s390/dfpu/numdigits.h: Remove include guards. - sysdeps/powerpc/dfpu/numdigits.h: Likewise. - sysdeps/soft-dfp/dpd/numdigits.h: Likewise. - Miscellaneous changes - tests/test-printf.c (printf\_d128s): Added 0.9999999999DL which reported 0.100000 rather than 1.000000 and was fixed by Andreas' patch from 2010-10-04. - Miscellaneous changes - printf\_dfp.c (\_\_printf\_dfp): Fix up nd when rounding overflows beyond first digit. - Miscellaneous changes - sysdeps/soft-dfp/floatsisd.c: Don't generate additional decimal digit. - Miscellaneous changes - README.developer: Documentation update. - TODO: Mark some items as [DONE]. - Miscellaneous changes - init\_dfp.c: Changed #include to #include . - Miscellaneous changes - tests/test-amort.c: Added license and copyright. - tests/test-printf.c: Updated copyright year. - tests/test-strtod.c: Added license and copyright. Corrected incorrect expected values. - strtod32.c: Fixed several conversion bugs. - Miscellaneous changes - Makefile.in: Removed test-left\_justify from execution since it is a known failure case for non-power6 systems. No worries since left\_justify isn't used right now. - tests/test-amort.c: Removed spurious #include . - tests/test-get\_digits.c: Likewise. - tests/test-decode.c: Likewise. - tests/test-quantize.c: Likewise. - tests/test-printf.c: Likewise. - tests/test-fpclassify.c: Likewise. - tests/test-numdigits.c: Likewise. - tests/test-left\_justify.c: Likewise. - tests/test-isinf.c: Likewise. - tests/test-isnan.c: Likewise. - tests/test-isfinite.c: Likewise. - tests/test-strtod.c: Likewise. Also changed one value compare test to a decode test since the visual representation was 0.0. - README.user: Added further user notes. - dfp/dfp.h: Moved this to ... - include/dfp.h: here since the user no longer has to call the printf\_dfp registration hooks, and thus doens't need the prototype. configure: Regenerated. configure.ac: Added AC\_SUBST(mzarch) back. We shouldn't be editing CFLAGS. Makefile.in: Pass $(mzarch) along with CFLAGS if it is defined. - Miscellaneous changes - configure: Regenerated. - Makefile.in: Added special sed script which changes libdecnumber/Makefile:CFLAGS = foo into CFLAGS ?= foo. This allows libdfp/Makefile's sub make invocation of libdecnumber/Makefile to accept the updated CFLAGS. This was necessary to allow configure to update CFLAGS with -mzarch for s390 z9-ec and z10. GCC should fix this in their version of libdecnumber. - configure.ac: -mzarch added to CFLAGS when s390 system is z9-ec or z10. - README.developer: Added indication that configure.ac sets -mzarch in CFLAGS when appropriate. - Miscellaneous changes - Makefile.gdb (libdfp\_tests.gdb): Add LD\_LIBRARY\_PATH=./:$LD\_LIBRARY\_PATH to ldd invocations to make sure it reports ./libdfp.so.1 as a dependency and not the system or toolchain libdfp.so.1. - Miscellaneous changes - ieee754r/Versions: Added \_\_fabsd* and \_\_fpclassifyd* under the correct libdfp version number 1.0.3. - Miscellaneous changes - dfp/math.h: Restructure to cleanup presentation. - Miscellaneous changes - ieee754r/Versions: Moved some of the \_\_is* functions under LIBDFP\_1.0.2 and LIBDFP\_1.0.3. Removed unnecessary \_\_is* functions from export that don't have polymorphic versions in math.h - dfp/math.h: Removed accidental undef of isunordered. This was never implemented as a polymorphic function because it doesn't need to be (per the spec). Removed redundant polymoprhic isnan(). - Versions.def: Added Versions LIBDFP\_1.0.2 and LIBDFP\_1.0.3 for Libdfp. - Miscellaneous changes - configure: Regenerated. - configure.ac: Apparently AC\_CANONICAL\_SYSTEM is only for compilers. I removed it, and support for --target. Now you must use --build only. - README.developer: Removed directions for using --target. - Miscellaneous changes - sysdeps/powerpc/dfpu/fe\_decround.c (stdio.h): Removed unnecessary include. - Miscellaneous changes - sysdeps/powerpc/dfpu/fe\_decround.c (\_\_fe\_dec\_getround): The structure which defined the DRN was to small and the compiler started generating code that wasn't properly extracting the DRN field from the structure holding the FPSCR value. This is fixed. - tests/test-round.c: Testcase to prove fe\_dec\_getround() and fe\_dec\_setround(). - Makefile.in (libdfp\_tests): Added test-round. - Miscellaneous changes - configure: Regenerated. - config.log: Removed as unnecessary. - configure.ac: --target now works in lieu of --build. --host is no longer necessary. - README.developer: Removed directive to use --host and replaced with a diective to use --target. - Miscellaneous changes - configure: Regenerated file. - Makefile.in: Removed last comments dealing with -mzarch. - configure.ac: Removed last fragments dealing with -mzarch. - Miscellaneous changes - ieee754r/isinfd32.c: Removed unnecessary static char buffer used for testing. - Miscellaneous changes - ieee754r/isinfd32.c: Removed test-code that shouldn't have been checked in. - Miscellaneous changes - ieee754r/isinfd32.c (isinf): Changed Infinity check such that DEC\_NAN doesn't pass as inf. There was an incorrect mask check which was true for DEC\_NAN as well as Inf. - tests/test-isfinite.c: Added Conditional expectations for s390 for isfinite return values from negative number inputs. - Miscellaneous changes - tests/test-logd.c: Removed unnecessary comments. - tests/test-fpclassify.c: Removed unnecessary comments. - configure.ac: Removed unnecessary comments. - printf\_dfp.c: Removed unnecessary comments. - Miscellaneous changes - Makefile.in: Removed commented out code. - tests/test-logd.c: Corrected expected values for a \_Decimal64 NAN declet series. - tests/test-fpclassify.c: Added cases for + and - \_\_DEC[32|64|128]\_SUBNORMAL\_MIN\_\_. - tests/scaffold.c: Modified spacing in macro output for 'Success'. - tests/test-isfinite.c: Corrected expected values for negative numbers to return -1. Corrected expected value for DEC\_NAN to '0'. - tests/test-strtod.c: Cleaned up. Still failing. - sysdeps/powerpc/dfpu/fpclassifyd32.c (fpclassifyd32): Since \_Decimal32 is promoted to \_Decimal64 and \_\_DEC32\_SUBNORMAL\_MIN\_\_ falls within the bounds of \_Decimal64 a special case to range check for \_Decimal32 as required. - sysdeps/powerpc/dfpu/powd64.c: Whitespace correction. - strtod32.c: Started to cleanup the code. - Miscellaneous changes - Makefile.in: Added test-numdigits, test-get\_digits, and test-left\_justify. - base-math/Makefile: Fixed missing truncd* exports which was exposed by GCC 4.4. - base-math/lttd2.c (lttd3): Renamed lttd3 to lttd2. Typo. - tests/test-get\_digits.c: Added test-cases to show previously failing numdigits for soft-dfp when coefficient was zero. It was returning '0' intead of '1', which is what hardware DFP returns. - tests/test-printf.c: Added test-cases to show failing tests. - tests/test-fpclassify.c: (printf\_d32s): Changed DENORMAL to SUBNORMAL in constant usage. GCC changed usage. - tests/test-numdigits.c: New test. - tests/scaffold.c: Updated output formatting of macros to make output clearer (columns and test numbering). - tests/test-left\_justify.c: New test. - tests/test-strtod.c: Added test-cases to show failing tests. - sysdeps/powerpc/dfpu/numdigits.h (\_NUMDIGITS\_H): Removed guard to allow multiple #includes with different preconditions. (numdigits): New implementation which avoids clobbers and avoids modifying a parameter. (left\_justify): New implementation which avoids clobbers and avoids modifyinig a parameter. (getexp): New implementation which avoids modifying a parameter. - sysdeps/powerpc/dfpu/fe\_decround.c (\_\_fe\_dec\_setround): Fixed errorneous usage of mtfsfi instruction. Previous usage resulted in the set rounding mode not being permanent. - sysdeps/soft-dfp/dpd/numdigits.h (numdigits): Return '1' if coefficient is zero, which is what hardware DFP does. (\_\_dfp\_declet\_to\_dpd): Moved to ... - sysdeps/dpd/dpd-private.h: ... this file. - sysdeps/dpd/dpd-private.c: Formatting. - printf\_dfp.c (printf\_dfp): Major fixes to correct a variety of printing errors. It should now fully support %f, %e, %g, and %a in the myriad of bizarre combinations. - Miscellaneous changes - Makefile.in: Added test-strtod testcase. - tests/test-logd.c: Cleaned up some comments. - tests/scaffold.c: Cleaned up \_QC\_P macro. It is incomplete at this point. - tests/test-strtod.c: New testcase. - sysdeps/powerpc/dfpu/isfinited128.c: Removed spurious . - sysdeps/powerpc/dfpu/isfinited32.c: Likewise. - sysdeps/powerpc/dfpu/isfinited64.c: Likewise. - sysdeps/powerpc/dfpu/is\_template.h: Added and removed redundant macro definitions. - strtod32.c: Fixed bug when calling newlocale(LC\_ALL\_MASK,NULL,NULL); Changed it to newlocale(LC\_ALL\_MASK, setlocale (LC\_ALL, NULL),NULL); - Miscellaneous changes - tests/test-logd.c: Added more expressive output on failure. - sysdeps/powerpc/dfpu/isfinited128.c: Added #include . - sysdeps/powerpc/dfpu/isfinited32.c: Likewise. - sysdeps/powerpc/dfpu/isfinited64.c: Likewise. - Miscellaneous changes - configure: Regenerated. - ieee754r/Versions: Re-added \_\_isfinited* for backward compatability. - configure.ac: Increment library version to 1.0.3 due to interface changes. - README.user: Whitespace. - ieee754r/isfinited32.c: Use 'isfinite' instead of 'finite'. - sysdeps/powerpc/dfpu/isfinited128.c: Use 'isfinite' instead of - 'finite'. - sysdeps/powerpc/dfpu/isfinited32.c: Use 'isfinite' instead of - 'finite'. - sysdeps/powerpc/dfpu/isfinited64.c: Use 'isfinite' instead of - 'finite'. - dfp/math.h: Whitespace. - Miscellaneous changes - ieee754r/isfinited128.c: Change finite to isfinite. - ieee754r/isfinited32.c: Likewise. - ieee754r/isfinited64.c: Likewise. - Miscellaneous changes - Makefile.in: Added new test cases. Changed finited to isfinited. - ieee754r/scalbnd32.c: Changed usage of finited to isfinited. - ieee754r/scalblnd32.c: Likewise. - ieee754r/cbrtd32.c: Likewise. - ieee754r/expd32.c: Likewise. - ieee754r/nextafterd32.c: Likewise. - ieee754r/exp2d32.c: Likewise. - ieee754r/Makefile: Likewise. - ieee754r/expm1d32.c: Likewise. - ieee754r/hypotd32.c: Likewise. - ieee754r/powd32.c: Likewise. - ieee754r/ldexpd32.c: Likewise. - ieee754r/fdimd32.c: Likewise. - ieee754r/nearbyintd32.c: Likewise. - ieee754r/coshd32.c: Likewise. - ieee754r/lgammad32.c: Likewise. - ieee754r/sinhd32.c: Likewise. - ieee754r/tgammad32.c: Likewise. - ieee754r/nexttowardd32.c: Likewise. - ieee754r/Versions: Likewise. - ieee754r/tand32.c: Likewise. - ieee754r/frexpd32.c: Likewise. - ieee754r/isfinited64.c: Renamed to this from... - ieee754r/finited64.c: ...this. - ieee754r/isfinited32.c: Renamed to this from... - ieee754r/finited32.c: ...this. - ieee754r/isfinited128.c: Renamed to this from... - ieee754r/finited128.c: ...this. - tests/test-logd.c: New test. - tests/test-quantize.c: New test. - tests/test-fpclassify.c: New test. - tests/scaffold.c: Started adding \_QC and QC\_P. - tests/test-isfinite.c: Renamed this... - tests/test-finite.c: ...from this. - sysdeps/powerpc/dfpu/logd64.c: Added hard-dfp optimizations. - sysdeps/powerpc/dfpu/isinfd128.c: Likewise. - sysdeps/powerpc/dfpu/isfinited128.c: Likewise. - sysdeps/powerpc/dfpu/expd64.c: Likewise. - sysdeps/powerpc/dfpu/rintd128.c: Likewise. - sysdeps/powerpc/dfpu/isfinited32.c: Likewise. - sysdeps/powerpc/dfpu/powd64.c: Likewise. - sysdeps/powerpc/dfpu/rintd32.c: Likewise. - sysdeps/powerpc/dfpu/finited32.c: Likewise. - sysdeps/powerpc/dfpu/logd32.c: Likewise. - sysdeps/powerpc/dfpu/isnormald64.c: Likewise. - sysdeps/powerpc/dfpu/fpclassifyd128.c: Likewise. - sysdeps/powerpc/dfpu/expd32.c: Likewise. - sysdeps/powerpc/dfpu/isnand128.c: Likewise. - sysdeps/powerpc/dfpu/is\_template.h: Likewise. - sysdeps/powerpc/dfpu/powd32.c: Likewise. - sysdeps/powerpc/dfpu/ddlogtbls.h: Likewise. - sysdeps/powerpc/dfpu/isnormald128.c: Likewise. - sysdeps/powerpc/dfpu/isfinited64.c: Likewise. - sysdeps/powerpc/dfpu/rintd64.c: Likewise. - sysdeps/powerpc/dfpu/finited64.c: Likewise. - sysdeps/powerpc/dfpu/isnormald32.c: Likewise. - dfp/math.h: added islessgreaterd prototypes, etc. Added isnormald prototypes. - Miscellaneous changes - configure: Updated version to 1.0.2. - Makefile.in: Added test cases. - ieee754r/Versions: Exported \_\_isnand*, \_\_isinfd*, etc. - tests/test-printf.c: Define \_WANT\_PC. - tests/test-decode.c: Define \_WANT\_DC. - tests/scaffold.c: Added \_VC\_P and \_VC as well as \_WANT\_PC, \_WANT\_DC, and \_WANT\_VC. - tests/test-fpclassify.c: New classification function test. - tests/test-isnan.c: Likewise. - tests/test-isinf.c: Likewise. - tests/test-finite.c: Likewise. - tests/test-param.c: Likewise. - tests/test-quantize.c: Likewise. - sysdeps/powerpc/dfpu/quantized64.c: Hard-dfp implementation. - sysdeps/powerpc/dfpu/quantized128.c: Likewise. - sysdeps/powerpc/dfpu/fpclassifyd64.c: Likewise. - sysdeps/powerpc/dfpu/isnand32.c: Likewise. - sysdeps/powerpc/dfpu/isinfd32.c: Likewise. - sysdeps/powerpc/dfpu/isnand64.c: Likewise. - sysdeps/powerpc/dfpu/isinfd64.c: Likewise. - sysdeps/powerpc/dfpu/finited32.c: Likewise. - sysdeps/powerpc/dfpu/quantized32.c: Likewise. - sysdeps/powerpc/dfpu/finited64.c: Likewise. - sysdeps/powerpc/dfpu/fpclassifyd32.c: Likewise. - Miscellaneous changes - Makefile.in: Allow make check to work without --with-glibc-build. - tests/test-printf.c: Removed register\_printf\_dfp() invocation. - tests/test-amort.c: New file which is an amortiation benchmark. - tests/scaffold.c: Changed to "decode.h". - tests/decode.h (\_DFP\_DECODE\_H): Added \_DFP onto guard. - tests/debug-test.sh: Allow make check to work without --with-glibc-build by either debugging the app or the loader. - configure.ac: Incrememented the library version from 1.0.1 to 1.0.2 due to the addition of the libdfp constructor which no longer requires register\_printf\_dfp(). - README.user: More todos. - include/init\_dfp.h (\_\_libdfp\_init): New file to add constructor prototype. - Makefile.gdb: Allow make check to work without --with-glibc-build. - init\_dfp.c (\_\_libdfp\_init): New file. Add a constructor to call register\_printf\_dfp(). - Miscellaneous changes - configure: Regenerated. - Makefile.in: Remove appending of cc\_msize to CFLAGS. Remove -e from submake which builds libdecnumber. - configure.ac: Remove cc\_msize and cc\_mzarch and accompanying AC\_SUBST. The preferred method is to require the user to pass -m[31|32|64] in CFLAGS as an env variable when configure is invoked. - README.user: New file. - README.developer: Updated to direct user to pass -m[31|32|64] in CFLAGS and to always use --build and --host values that align with the -m values. - Miscellaneous changes - Makefile.in: Removed unneccesary rule -- backend: $(dfp\_backend)/$(dfp\_backend\_lib). - Miscellaneous changes - Makefile.in: Fixed rule $(top\_builddir)/$(dfp\_backend\_lib): to $(dfp\_backend)/$(dfp\_backend\_lib) to correct problem with make -j* - Miscellaneous changes - Makefile.in: Replaced libdfp.so.1 generation using `ln -s' to using `ldconfig -l' in both $(top\_builddir)/ and $(install\_root)$(libdir)/. Added creation of linkname symlink libdfp.so. Strip trailing / from any install\_root= paths. - Miscellaneous changes - Makefile.in: Fixed `ln -s' to not have the goofy '(cd..)', e.g. (cd $(libdir) ln -s ) when making the .so.1 -> -1.0.1.so symlinks. - Miscellaneous changes - Makefile.in: Fixed libdir=@prefix@/lib to libdir=@libdir@ and includedir=@prefix@/include to includedir=@includedir@. This will allow configure override with --libdir= and --includedir= respectively. This was preventing installation into //lib64. Fix header install so that dfp/README isn't installed with the header files. - Miscellaneous changes - Makefile.in: `install' doesn't handle symlinks so we've done another 'ln -s' in the install stage to set $(SHARED\_LIBRARY) -> ./$(SHARED\_VERSIONED\_LIBRARY) in the $(install\_root)/$(libdir)/ directory. - Miscellaneous changes - Makefile.in: Fixed erroneous attempt to install libdfp.a even if --enable-static=no was configured. - Miscellaneous changes - Makefile.in: Fixed missing libdecnumber.a rule dependency by changing the backend rule to be `libdecnumber.a' rather than `libdecnumber'. Fixed `ln -s' error when rebuilding without a make clean by adding `-f' to always force overwrite the previous versioned library symlink. - README: Renamed to README.developer - README.developer: New file. - Miscellaneous changes - configure: Regenerated. - configure.ac: Added additional help text when warning about the glibc headers lacking the printf-hooks support. - README: Clarified version number. - TODO: Updated. - Miscellaneous changes - configure: Regenerated. - configure.ac: Add check for glibc headers that support the printf-hooks. Add runtime check for printf-hooks in libc specified by --with-glibc-build. - TODO: Updated. - Miscellaneous changes - configure: Regenerated. - configure.ac: Updated libdfp to version 1.0.1 to indicate that power7 support has been added. - Miscellaneous changes - configure.ac: Added POWER 7 support. - README: Added notes on POWER 7 support. - sysdeps/powerpc/powerpc32/power7: New directory. - sysdeps/powerpc/powerpc32/power7/Implies: Imply Power6. - sysdeps/powerpc/powerpc32/power7/fpu: New directory. - sysdeps/powerpc/powerpc32/power7/fpu/Implies: Imply Power6. - sysdeps/powerpc/powerpc64/power7: New directory. - sysdeps/powerpc/powerpc64/power7/Implies: Imply Power6. - sysdeps/powerpc/powerpc64/power7/fpu: New directory. - sysdeps/powerpc/powerpc64/power7/fpu/Implies: Imply Power6. - Miscellaneous changes - configure: Regenerated. - configure.ac (AC\_CACHE\_CHECK): Re-added check for decimal-float-support in the compiler by checking whether the compiler can handle the \_Decimal64 data type rather than checking whether the compiler -v output had a particular flag set. - Miscellaneous changes - configure: Regenerated. - configure.ac (AC\_PROG\_CC): Re-added AC\_PROG\_CC and removed custom $(CC). Removed -m flags from CC and pushed this responsibility onto Makefile.in to put into CFLAGS. These changes allow a user to prepend some custom flags onto CFLAGS at configure time. (dfp\_opts): Changed to $(cc\_mzarch). No need to be obscure until we have to. - Makefile.in (cc\_mzarch): New variable used on s390 only, otherwise empty. (default\_cflags): Inherit defaults from configure. Add -m$(cc\_msize) and $(cc\_mzarch). (default\_asflags): Inherit defaults from configure. Add -m$(cc\_msize) and $(cc\_mzarch). (+cflags): Simplified CFLAGS override mechanism. (+asflags): Simplified ASFLAGS override mechanism. ($(top\_builddir)/$(dfp\_backend)): Manually pass overridden CFLAGS to backend 'make' since the -m flags aren't passed in the top level configure's CFLAGS. ($(top\_builddir)/$(SHARED\_VERSION\_LIBRARY)): Added $(CFLAGS) since it's no longer part of $(CC). ($(libdfp\_tests)): Added $(CFLAGS) since it's no longer part of $(CC). - Miscellaneous changes - configure: Regenerated. - Miscellaneous changes - configure.ac: Add -mzarch when building hw dfp on S/390. This is needed for 31 bit which would otherwise default to -mesa. - Miscellaneous changes - configure: Regenerated. - Makefile.in (.c.o, .c.os): Added -include $(top\_builddir)/config.h to pick up \_BACKEND\_DPD or \_BACKEND\_BID. ($(top\_builddir)/$(STATIC\_LIBRARY)): Add $(top\_builddir) to dfp\_backend path. - README: Added WARNING about making sure to link to a glibc that's the same bitness (32|64) and the same optimization as the libdfp that's being configure. Added --with-glibc-build= examples. - Versions (libdfp): LIBDFP\_1.0.0 tagged. - Versions.def (libdfp): LIBDFP\_1.0.0 tagged. - ieee754r/Versions.def (libdfp): LIBDFP\_1.0.0 tagged. - config.h.in: Regenerated. - configure.ac: (AC\_INIT): Tagged version 1.0.0. (\_DPD\_BACKEND): AC\_DEFINE\_UNQUOTED; Set based on backend. (\_BID\_BACKEND): AC\_DEFINE\_UNQUOTED; Set based on backend. (--with-cpu): Removed submachine\_opt="-mcpu=$withval". ($machine): On s390 cc\_msize=31 NOT 32. (AC\_SUBST): CFLAGS and ASFLAGS. (AC\_CACHE\_CHECK): Removed check for compiler feature decimal-float-support. - ieee754r/frexpd32.c (INTERNAL\_FUNCTION\_NAME): Initialize 'result' to DEC\_NAN because compiler can't see that it's set in a macro and generates warnings. - sysdeps/bid/Versions (libdfp): LIBDFP\_1.0.0 tagged - sysdeps/dpd/Versions (libdfp): LIBDFP\_1.0.0 tagged - sysdeps/dpd/dpd-private.c (\_\_get\_digits\_d32, \_\_get\_digits\_d64, \_\_get\_digits\_d128): initialize exp = 0; - sysdeps/powerpc/dfpu/numdigits.h (numdigits): Conditionally define 'f' based on \_Decimal size to prevent the compiler from messing up the register order requirements. - sysdeps/soft-dfp/Versions (libdfp): LIBDFP\_1.0.0 tagged - sysdeps/soft-dfp/bid/Versions (libdfp): LIBDFP\_1.0.0 tagged - sysdeps/soft-dfp/dpd/Versions (libdfp): LIBDFP\_1.0.0 tagged - tests/decode.h: New file providing non-exported decoded[32|64|128] prototypes used in tests and debugging. - tests/scaffold.c (\_DC, \_DC\_P): Added macros for testing against decoded[32|64|128] output. - tests/test-param.c (main): Updated to use scaffold.c and test the values against the decoded[32|64|128] values that're expected. - Miscellaneous changes - ieee754r/powd32.c (INTERNAL\_FUNCTION\_NAME): Set \_\_isnan -> FUNC\_D(\_\_isnan). Not strictly necessary since \_\_isnan is a polymorphic classification function, but this was we avoid the extra steps of detecting the type/size of the input parameter and call the appropriate \_\_isnand[32|64|128] directly. - Miscellaneous changes - ieee754r/powd32.c: Add dfp prefix to \_\_isnan invocation. - Miscellaneous changes - sysdeps/s390/dfpu/fenv\_libdfp.h: Move file to ... - sysdeps/s390/fpu/fenv\_libdfp.h: ... here. - Miscellaneous changes - configure.ac: Add a march vs mcpu gcc option check. - Miscellaneous changes - Makefile.in (prefix): Set based on @prefix@ to prevent missing --exec-prefix from setting @exec\_prefix@ to the string '$(prefix)', i.e. not the context of $prefix. ($(top\_builddir)/$(SHARED\_VERSION\_LIBRARY)): Added -W,no-whole-archive to close -W,whole-archive to SHARED\_VERSION\_LIBRARY rule. Removed -nodefaultlibs -nostdlib which prevented linking against libc and libm which libdfp relies upon. - tests/test-printf.c (printf\_d128s): Added correct "expected" strings. - sysdeps/soft-dfp/dpd/numdigits.h (left\_justify): Changed erroneous FUNC\_D (getexp(x)) to FUNC\_D (getexp) (x) to correct macro invocation. - Miscellaneous changes - README: Updated the S/390 availability section. - Miscellaneous changes - Makefile.in: Updated comment to reflect update from 0.0.1 to 0.0.9. - configure.ac (AC\_INIT): Updated version from 0.0.1 to 0.0.9. - README: Added two TODO chapters and clarified the intro paragraphs. - Versions.def: Update package versions for symbols. - Versions: Update package versions for symbols. - Miscellaneous changes - Makefile.in: Added test-param to libdfp\_tests. - tests/TODO: New file. - tests/README: N/A. - tests/test-param.c: New test to verify integrity of parameters that are spilled to the stack on being passed to a new function. - Miscellaneous changes - tests/test-printf.c: Added mechanism to easily add new printf test cases based upon GLIBC's stdio-common/tfformat.c testcase. - Miscellaneous changes - tests/scaffold.c: New file which holds \_C, \_C\_P, \_PC, and \_PC\_P macros used for printing debugging messages in the event of test case failures. - Miscellaneous changes - Makefile.in: For .out rules send stdout to /dev/null and stderr to the .out file. - tests/test-printf.c: Added framework for generically adding printf tests. - Makefile.gdb: Squelch echos of .conf and .gdb file creation. - Miscellaneous changes - Makefile.in: Change test-debug to > debug-test. - tests/debug-test.sh: Change test-debug.conf -> debug-test.conf. - Makefile.gdb: Change test-debug to debug-test. - Miscellaneous changes - tests/test-debug.sh: Removed and renamed to ... - tests/debug-test.sh: New. - Miscellaneous changes - CONTRIBUTORS: Added Carlos Eduardo Seo for contribution of Makefile.in make install and make install-headers feature. - README: Added section on Make Rules. - TODO: Added additional todo items. - Miscellaneous changes - Makefile.in: Added 'make install0headers' feature. - Miscellaneous changes - printf\_dfp.c: (padn, wpadn): Changed usage of size\_t to 'int' to avoid compiler warnings about unsigned to signed comparisons. - Miscellaneous changes - tests/test-printf.c: Added print statements for \_Decimal32 and \_Decimal128. - sysdeps/powerpc/dfpu/numdigits.h (numdigits getexp): Use FUNC\_D wrapper. (FUNC\_D PASTE): Conditionally define these macros. - Miscellaneous changes - include/printf\_dfp.h (\_\_d32\_ais, \_\_d64\_ais, \_\_d128\_ais): Removed - printf\_dfp.c (\_\_printf\_dfp): Changed width from unsigned into to int in order to prevent negative default. (\_\_register\_printf\_dfp): Replaced individual decimal sized specifier registrations with a unified registrations. (\_\_d32\_ais, \_\_d64\_ais, \_\_d128\_ais): Removed and replaced with unified \_\_dfp\_ais(). - Miscellaneous changes - ieee754r/ldexpd32.c (ldexpd32): Use FUNC\_D wrapper around getexp. - ieee754r/frexpd32.c (frexpd32): Use FUNC\_D wrapper around numdigits and getexp. - sysdeps/soft-dfp/dpd/numdigits.h (numdigits getexp): Use FUNC\_D wrapper. - Miscellaneous changes - Makefile.in: Added 'make install' feature. - Miscellaneous changes - include/printf\_dfp.h: Add #include . - sysdeps/s390/dfpu/numdigits.h: Wrap function definitions in FUNC\_D macro. Add PASTE and FUNC\_D macro definitions. - strtod32.c (setexp): Refer to 'getexp' using FUNC\_D() macro. Add PASTE and FUNC\_D macro definitions. Reposition dfp*\_private.h header inclusions. - General non-functiopnal maintenance. - Makefile.in: Cleanup comments. - README: Fix typo, spacings, and text. - This commit adds the port of libdfp from a GLIBC add-on to a standalone library. This library was written by Ryan S. Arnold , Joseph Kerian , Pete Eberlein , Steve Munroe , Andreas Krebbel , et al. - This commit adds the top-level sub-directories for the stand-alone libdfp project. It adds the top-level directory libdfp/ per Mark Mitchell's direction on patches@eglibc.org on Mon, 29 Jun 2009. libdfp-1.0.17/Makefile.in000066400000000000000000000450521504475242000151160ustar00rootroot00000000000000ifneq (,) This Makefile requires GNU Make. endif top_srcdir := @top_srcdir@ top_builddir = . prefix = @prefix@ exec_prefix = @exec_prefix@ libdir = @libdir@ includedir = @includedir@ docdir = @docdir@ datarootdir = @datarootdir@ # Where to install the library and object files. ifndef libdir libdir = $(exec_prefix)/lib endif inst_libdir = $(DESTDIR)$(libdir) # Where to install the header files. ifndef includedir includedir = $(prefix)/include endif inst_includedir = $(DESTDIR)$(includedir) # Where to install the README document ifndef docdir docdir = $(prefix)/share/doc/ endif inst_docdir = $(DESTDIR)$(docdir) dfp_name = @PACKAGE_NAME@ dfp_version = @PACKAGE_VERSION@ STATIC_LIB = @PACKAGE_NAME@.a # The real library code: e.g. libdfp-1.0.0.so. SHARED_REALNAME_LIB = @PACKAGE_NAME@-@PACKAGE_VERSION@.so # The soname that symlinks to the real library code: e.g. libdfp.so.1. # Traditionally the version number on the soname defined the 'interface' # version. Since this library intends to use symbol versioning there # probably isn't ever a reason to move to .so.2 or later but we'll follow the # precedent. SHARED_SONAME_LIB = @PACKAGE_NAME@.so.1 # The linkername that symlinks to the soname: e.g. libdfp.so. The linker looks for this name. SHARED_LINKERNAME_LIB = @PACKAGE_NAME@.so CC = @CC@ CXX = @CXX@ LDD = @LDD@ OBJDUMP = @OBJDUMP@ READELF = @READELF@ GDB = @GDB@ CXXFLAGS = @CXXFLAGS@ # This may be naive CPPFLAGS = @CPPFLAGS@ RANLIB = @RANLIB@ AWK = @AWK@ LDFLAGS = @LDFLAGS@ INSTALL := @INSTALL@ INSTALL_DATA := @INSTALL_DATA@ # e.g. powerpc base_machine = @base_machine@ # e.g. powerpc32 machine = @machine@ # e.g. -mcpu=power6 libdfp_cv_submachine_opt = @libdfp_cv_submachine_opt@ ifdef libdfp_cv_submachine_opt cflags-cpu = $(libdfp_cv_submachine_opt) asflags-cpu = $(libdfp_cv_submachine_opt) endif picflag = @picflag@ cxxdecimal = @cxxdecimal@ default_cflags := @CFLAGS@ default_asflags := @ASFLAGS@ ifndef +cflags # Remove -I stuff from CFLAGS. +cflags := $(filter-out -I%,$(default_cflags)) endif # Add -mcpu= targets and -f[pic|PIC]. +cflags += $(cflags-cpu) $(picflag) # Don't duplicate options. +cflags := $(sort $(+cflags)) override CFLAGS = $(gnu-inline-CFLAGS) $(+cflags) # These are the flags given to the compiler to tell it what sort of # optimization and/or debugging output to do for .S files. ifndef +asflags # Remove -I stuff from ASFLAGS. +asflags := $(filter-out -I%,$(default_asflags)) endif # This makes sure -mcpu=CPU gets used when gcc is invoked against .S files. # Also pull in CFLAGS so we get -m options set by the configuration. +asflags += $(asflags-cpu) $(filter -g%,$(CFLAGS)) $(filter -m%,$(CFLAGS)) # Don't duplicate options. +asflags := $(sort $(+asflags)) override ASFLAGS = $(+asflags) sysdep_dirs = @sysdep_dirs@ # This is the precedence ordered list of subdirectories that configure # selected for searching based upon machine, base_machine. # Add the ieee754r and decNumberMath convenience directories to the list. # Find each sysdep directory or convenience directory with a Makefile in it. makefile_dirs := $(foreach odir,$(sysdep_dirs), $(dir $(wildcard $(top_srcdir)/$(odir)/Makefile))) $(top_srcdir)/decNumberMath/ \ $(top_srcdir)/ieee754r/ $(top_srcdir)/base-math/ $(top_srcdir)/libdecnumber/ \ $(top_srcdir)/printf-hooks/ $(top_srcdir)/stdlib/ $(top_srcdir)/tests/ # Like $makefile_dirs but add the $(top_srcdir) reference and strip out the redundant spaces. # This has to be = assigned. all_srcdirs = $(strip $(foreach dir,$(sysdep_dirs), $(top_srcdir)/$(dir))) \ $(top_srcdir)/libdecnumber $(top_srcdir)/printf-hooks $(top_srcdir)/stdlib \ $(top_srcdir)/decNumberMath $(top_srcdir)/ieee754r $(top_srcdir)/base-math $(top_srcdir)/ $(top_srcdir)/tests backend_headers := libdecnumber # For header files we want to search every directory that is relevant. We # have to include $(top_builddir) in order to pick up the configure generated # config.h. system_header_dirs := dfp dfp/decimal header_dirs := $(strip include $(system_header_dirs) $(backend_headers) $(sysdep_dirs) decNumberMath/ ieee754/ base-math/) header_search_dirs := $(header_dirs:%=$(top_srcdir)/%) $(top_srcdir) $(top_builddir) # GNU Make hack to reference a ' ' (space) character as the `from' function parameter in $(subst from,to,...). sp := sp += # VPATH only needs to know the directory that source files are in. Headers # are searched based on -I precedence during the compilation invocation. VPATH := $(subst $(sp),:,$(all_srcdirs)) all: first libdfp libdecnumber/libdecnumber.a # The sysdeps subdirs aren't recursively invoked, they're included so that # they can add files to the libdfp_files list. include $(foreach dir,$(makefile_dirs), $(dir)/Makefile ) # Fake rule to output the VPATH before we build anything. Don't use .PHONY # because we want this printed each time. first: @echo VPATH=$(VPATH) @echo Processing Makefiles: $(makefile_dirs) # Yes this is a bit of a hack, but gcc/libdecnumber/Makefile won't allow # CFLAGS to be overridden on a submake invocation. BACKEND_CFLAGS=$(cflags-cpu) $(picflag) libdecnumber/libdecnumber.a: @echo "+Building DFP backend $@" DEFS="-D__STDC_DEC_FP__=200704L $(CFLAGS-sysdeps) $(BACKEND_CFLAGS)" $(MAKE) -C libdecnumber -f Makefile.libdecnumber libdfp: @enable_static@ @enable_shared@ static: $(top_builddir)/$(STATIC_LIB) # Create the actual file with the version, the .so linker symlink and its # SONAME symlink. shared: $(top_builddir)/$(SHARED_REALNAME_LIB) \ $(top_builddir)/$(SHARED_LINKERNAME_LIB) \ $(top_builddir)/$(SHARED_SONAME_LIB) @echo +Building shared lib and symlinks: $(notdir $^) WARNS := -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wmissing-format-attribute -Wno-long-long C_DEFINES := -D__STDC_WANT_DEC_FP__=1 -std=gnu11 -D__STDC_WANT_IEC_60559_DFP_EXT__=1 -D__STDC_WANT_IEC_60559_BFP_EXT__=1 ASM_DEFINES := -D__ELF__ -D__ASSEMBLER__ -DASSEMBLER -D__STDC_WANT_DEC_FP__=1 -D__STDC_WANT_IEC_60559_DFP_EXT__=1 CXX_DEFINES := -D__STDC_WANT_DEC_FP__=1 -D__STDC_WANT_IEC_60559_DFP_EXT__=1 CXX_WARNS := -W -Wall -Wwrite-strings -Wmissing-format-attribute -Wno-long-long -include *.d # Build the static object files. .c.o: $(CC) $(CFLAGS) $(sysdeps-CFLAGS) $(CPPFLAGS) -MT $@ -MD -MP -MF $*.d -c $< $(C_DEFINES) $(WARNS) -include $(top_builddir)/config.h -include $(top_srcdir)/include/libdfp-symbols.h $(foreach dir, $(header_search_dirs), -I$(dir)) -o $@ .S.o: $(CC) $(CFLAGS) $(sysdeps-CFLAGS) $(ASFLAGS) -MT $@ -MD -MP -MF $*.d -c $< $(ASM_DEFINES) $(WARNS) -include $(top_builddir)/config.h -include $(top_srcdir)/include/libdfp-symbols.h $(foreach dir, $(header_search_dirs), -I$(dir)) -o $@ # Build the shared object files. .c.os: $(CC) $(CFLAGS) $(sysdeps-CFLAGS) $(CPPFLAGS) -MT $@ -MD -MP -MF $*.d -c $< $(C_DEFINES) $(WARNS) -include $(top_builddir)/config.h -include $(top_srcdir)/include/libdfp-symbols.h $(foreach dir, $(header_search_dirs), -I$(dir)) -o $@ .S.os: $(CC) $(CFLAGS) $(sysdeps-CFLAGS) $(ASFLAGS) -MT $@ -MD -MP -MF $*.d -c $< $(ASM_DEFINES) $(WARNS) -include $(top_builddir)/config.h -include $(top_srcdir)/include/libdfp-symbols.h $(foreach dir, $(header_search_dirs), -I$(dir)) -o $@ # C++ compatibility test cases. .cpp.os: $(CXX) $(CXXFLAGS) $(CXXFLAGS-sysdeps) $(CPPFLAGS) -MT $@ -MD -MP -MF $*.d -c $< $(CXX_DEFINES) $(CXX_WARNS) -include $(top_srcdir)/include/libdfp-symbols.h -include $(top_builddir)/config.h $(foreach dir, $(header_search_dirs), -I$(dir)) -o $@ # Archive the static library and include all of the .o files from the backend # archive. IF the backend has more than the base directory the .o detection # mechanism will need to be more robust than this. $(top_builddir)/$(STATIC_LIB): $(addsuffix .o,$(libdfp_files)) @echo +Creating static library $@ $(AR) rc $@ $(wordlist 2,$(words $^),$^) @ranlibpath=`which $(RANLIB)`; \ if test -x "$$ranlibpath"; \ then $(RANLIB) $@; fi; # Create libdfp.so -> libdfp.so.1 symlink. $(top_builddir)/$(SHARED_LINKERNAME_LIB): $(top_builddir)/$(SHARED_REALNAME_LIB) @echo "+Creating linker .so symlink $(notdir $@) -> $(notdir $<)" ln -f -s $< $@ # Create libdfp.so.1 -> libdfp-1.0.1.so symlink. $(top_builddir)/$(SHARED_SONAME_LIB): $(top_builddir)/$(SHARED_REALNAME_LIB) @echo "+Create the library compat symlink $(notdir $@) -> $(notdir $<)" ln -f -s $(notdir $<) $@ # Build the version tagged 'realname' shared object. This requires that the # $(dfp_name).map file be composed out of individual Versions files. The # -bsymbolic switch makes the library avoid using the PLT for intra-library # calls. $(top_builddir)/$(SHARED_REALNAME_LIB): $(top_builddir)/$(dfp_name).map $(addsuffix .os,$(libdfp_files)) @echo +Linking shared object files into $@. $(CC) $(CFLAGS) $(sysdeps-CFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(SHARED_SONAME_LIB) -Bsymbolic -Wl,--whole-archive -Wl,--no-whole-archive -Wl,--version-script,$(dfp_name).map -Wl,-entry=__libdfp_version $(addsuffix .os,$(libdfp_files)) -o $@ -lm -shared-libgcc # The LIBDFP version script support is strongly based upon the GLIBC version # script Makefile foo. Thank you Roland McGrath and Ulrich Drepper! # Versions.def defines the package versions. $(top_builddir)/Versions.all: $(..)scripts/firstversions.awk \ $(top_srcdir)/Versions.def @echo +Creating $@ by running $(word 1,$^) against $(word 2,$^). { cat $(word 2,$^); } | LC_ALL=C $(AWK) -f $< > $@T mv -f $@T $@ # Versions.sysdeps is a concatenation of all of the sysdep directory Versions # files (that accompany a Makefile) and run through sed to strip comments. We # use the wildcard function to verify that there actually is a Versions file # accompanying a Makefile before we set it as a dependency. Some sysdeps dirs # only add internal interfaces. $(top_builddir)/Versions.sysdeps: $(top_srcdir)/Versions $(wildcard $(makefile_dirs:%=%Versions)) @echo +Scrubbing the following Versions files for comments and concatenating into a single $@ file. sed '/^[ ]*%/!s/#.*$$//;/^[ ]*$$/d;s/^[ ]*%/#/' $^ > $@T mv -f $@T $@ move-if-change = $(SHELL) $(top_srcdir)/scripts/move-if-change # This runs versions.awk and generates libdfp.map from the Versions.all and # Versions.sysdeps files. $(top_builddir)/sysd-versions: $(top_builddir)/Versions.all \ $(top_builddir)/Versions.sysdeps \ $(..)scripts/versions.awk @echo +The following invocation of $(word 3,$^) outputs $(dfp_name).map automagically. ( echo 'sysd-versions-subdirs = $(strip $(top_srcdir)/ $(makefile_dirs))'; \ cat $(top_builddir)/$(word 2,$^) \ | LC_ALL=C $(AWK) -v buildroot="$(top_builddir)/" -v defsfile=$< \ -v move_if_change='$(move-if-change)' \ -f $(word 3,$^) \ ) > $@T mv $@T $@ # This rule causes sysd-versions to be generated, which in turn invokes # versions.awk which generates libdfp.map implicitly. $(top_builddir)/libdfp.map: $(top_builddir)/sysd-versions GLIBC_LIBS := -lc -lm # Only enable C++ tests if compiler supports std::decimal (GCC 4.5+), # otherwise just skip them. ifeq ($(cxxdecimal), yes) libdfp_cxx_tests = test-ostream test-ostream-g-spec test-istream endif libdfp_tests = $(libdfp_c_tests) $(libdfp_cxx_tests) check-abi-libdfp check-localplt test-printf.os: $(top_builddir)/printf_dfp.os test-strtod.os: $(top_builddir)/strtod32.os $(top_builddir)/strtod64.os $(top_builddir)/strtod128.os # Empty rule which simply makes the libdfp_tests .so's dependent on # tests/libdfp-test.c so that when the libdfp-test file changes all of the test .so # files are rebuilt since almost all of them depend on the scaffold anyway. $(addsuffix .os, $(libdfp_tests)): $(top_srcdir)/tests/libdfp-test.c # The CPP test rely on the header. If that changes then they # need to be rebuilt. $(addsuffix .os, $(libdfp_cxx_tests)): $(top_srcdir)/dfp/decimal/decimal $(top_srcdir)/dfp/float.h # Explicitly link against the uninstalled GLIBC and the libdfp.so.1 we just # built. $(libdfp_c_tests): CFLAGS += -DNOT_IN_libdfp -I$(top_srcdir)/tests -Wl,--no-as-needed $(libdfp_c_tests): %:%.os $(top_builddir)/$(SHARED_SONAME_LIB) $(CC) $(CFLAGS) $(sysdeps-CFLAGS) $(top_builddir)/$(addsuffix .os,$@) -o $@ $(GLIBC_LIBS) -L$(top_builddir)/ -ldfp # Explicitly link against the uninstalled GLIBC and the Libdfp.so.1 we just # built. $(libdfp_cxx_tests): CXXFLAGS += -DNOT_IN_libdfp -I$(top_srcdir)/tests -Wl,--no-as-needed $(libdfp_cxx_tests): %:%.os $(top_builddir)/$(SHARED_SONAME_LIB) $(CXX) $(CXXFLAGS) $(CXXFLAGS-sysdeps) $(top_builddir)/$(addsuffix .os,$@) -o $@ $(GLIBC_LIBS) -L$(top_builddir)/ -ldfp # The name to give to a test in test results summaries. test-name = $(strip $(patsubst %.out, %, $@)) # Likewise, in XFAIL variable names. test-xfail-name = $(strip $(patsubst %.out, %, $@)) evaluate-test = $(top_srcdir)/scripts/evaluate-test.sh $(test-name) $$? \ $(if $(test-xfail-$(test-xfail-name)),true,false) \ false \ > $(top_builddir)/$(test-name).test-result # Make check main rule %.out: % LD_LIBRARY_PATH=$(top_builddir)/:$$LD_LIBRARY_PATH $(top_builddir)/$(test-name) \ $(test-extra-opts) 2> $(top_builddir)/$@ 1> /dev/null; \ $(evaluate-test) # Check ABI rules .PRECIOUS: %.symlist generated += $(extra-libs:=.symlist) vpath %.abilist $(+sysdeps_dirs) check-abi-libdfp.out: libdfp.abilist libdfp.symlist diff -p -U 0 $(filter %.abilist,$^) $(filter %.symlist,$^) > $@; \ $(evaluate-test) %.symlist: $(top_srcdir)/scripts/abilist.awk %.dynsym LC_ALL=C $(AWK) -f $^ > $@T mv -f $@T $@ %.dynsym: %.so LC_ALL=C $(OBJDUMP) --dynamic-syms $< > $@T mv -f $@T $@ # Check local PLT calls vpath localplt.data $(+sysdep_dirs) check-localplt.out: $(top_srcdir)/scripts/check-localplt.awk \ $(top_srcdir)/scripts/localplt.awk \ libdfp.so.jmprel \ localplt.data LC_ALL=C $(AWK) -f $(filter-out $< %localplt.data,$^) | \ LC_ALL=C $(AWK) -f $< $(filter %localplt.data,$^) - \ > $@; \ $(evaluate-test) libdfp.so.jmprel: libdfp.so @rm -f $@T LC_ALL=C $(READELF) -W -S -d -r $< > $@T test -s $@T mv -f $@T $@ define summarize-tests @egrep -v '^(PASS|XFAIL):' $(top_builddir)/$1 || true @echo "Summary of test results$2:" @sed 's/:.*//' < $(top_builddir)/$1 | sort | uniq -c @! egrep -q -v '^(X?PASS|XFAIL|UNSUPPORTED):' $(top_builddir)/$1 endef tests: $(libdfp_tests:%=%.out) $(top_srcdir)/scripts/merge-test-results.sh -s $(top_builddir)/ "" \ $(sort $(libdfp_tests)) \ > tests.sum @echo Details of failed tests: @awk -v builddir=$(top_builddir) \ '{ if ($$1 != "PASS:") printf "%s/%s.out ", builddir, $$2; }' \ tests.sum | xargs -n 1 -t cat $(call summarize-tests,tests.sum) # The .out files are predicated in another rule on the actual test executables, so # those are built from those rules. check: tests # Build all tests, but do not try running them (excepting ABI/PLT checks) cross-tests = check-localplt check-abi-libdfp cross-check: $(filter-out $(cross-tests),$(libdfp_tests)) $(cross-tests:%=%.out) $(top_srcdir)/scripts/merge-test-results.sh -s $(top_builddir)/ "" \ $(sort $(cross-tests)) > tests.sum @echo Details of failed tests: @awk -v builddir=$(top_builddir) \ '{ if ($$1 != "PASS:") printf "%s/%s.out ", builddir, $$2; }' \ tests.sum | xargs -n 1 -t cat $(call summarize-tests,tests.sum) .PHONY: check cross-check clean: rm -f *.o rm -f *.os rm -f *.d rm -f $(STATIC_LIB) rm -f $(SHARED_LINKERNAME_LIB) rm -f $(SHARED_SONAME_LIB) rm -f $(SHARED_REALNAME_LIB) rm -f Versions.all rm -f Versions.sysdeps rm -f libdfp.map $(SHARED_LINKERNAME_LIB).jmprel libdfp.symlist rm -f Versions.tmp rm -f sysd-versions rm -f $(addsuffix .out,$(libdfp_tests)) rm -f $(addsuffix .test-result,$(libdfp_tests)) rm -f $(addsuffix .conf,$(libdfp_tests)) rm -f $(libdfp_tests) rm -f libdfp-test-ulps.h rm -f *.ulp rm -f $(top_builddir)/libdecnumber/*.o rm -f $(top_builddir)/libdecnumber/*.a .PHONY: clean # distclean cleans up the files added by configure. distclean: rm -f $(top_builddir)/config.h rm -f $(top_builddir)/config.log rm -f $(top_builddir)/config.status rm -f $(top_builddir)/Makefile rm -f $(top_builddir)/libdecnumber/config.log rm -f $(top_builddir)/libdecnumber/config.status rm -f $(top_builddir)/libdecnumber/libdecnumberconfig/config.h rm -d $(top_builddir)/libdecnumber/libdecnumberconfig/ rm -f $(top_builddir)/libdecnumber/gstdint.h rm -f $(top_builddir)/libdecnumber/Makefile.libdecnumber rm -f $(top_builddir)/libdecnumber/stamp-h1 rm -f $(top_builddir)/libdecnumber.pc rm -f $(top_builddir)/libdfp.pc .PHONY: distclean install: all install-doc install-headers $(INSTALL) -d $(inst_libdir) ifeq ("@enable_static@","static") $(INSTALL_DATA) -t $(inst_libdir) $(top_builddir)/$(STATIC_LIB) endif $(INSTALL) -t $(inst_libdir) $(top_builddir)/$(SHARED_REALNAME_LIB) $(INSTALL_DATA) -t $(inst_libdir) $(top_builddir)/libdecnumber/libdecnumber.a ln -f -s $(SHARED_REALNAME_LIB) $(inst_libdir)/$(SHARED_LINKERNAME_LIB) ln -f -s $(SHARED_REALNAME_LIB) $(inst_libdir)/$(SHARED_SONAME_LIB) $(INSTALL_DATA) -D -t $(inst_libdir)/pkgconfig $(top_builddir)/libdfp.pc $(INSTALL_DATA) -D -t $(inst_libdir)/pkgconfig $(top_builddir)/libdecnumber.pc .PHONY: install install-headers: $(INSTALL) -d $(inst_includedir) $(INSTALL) -d $(inst_includedir)/dfp $(INSTALL) -d $(inst_includedir)/dfp/bits $(INSTALL) -d $(inst_includedir)/dfp/decimal $(INSTALL_DATA) -t $(inst_includedir)/dfp $(top_srcdir)/dfp/*.h $(INSTALL_DATA) -t $(inst_includedir)/dfp/bits $(top_srcdir)/dfp/bits/*.h $(INSTALL_DATA) -t $(inst_includedir)/dfp/decimal/ $(top_srcdir)/dfp/decimal/* $(INSTALL) -d $(inst_includedir)/decnumber/ $(INSTALL_DATA) -t $(inst_includedir)/decnumber/ $(top_srcdir)/libdecnumber/decContext.h $(INSTALL_DATA) -t $(inst_includedir)/decnumber/ $(top_srcdir)/libdecnumber/decConvert.h $(INSTALL_DATA) -t $(inst_includedir)/decnumber/ $(top_srcdir)/libdecnumber/decNumber.h .PHONY: install-headers install-doc: $(INSTALL) -d $(inst_docdir)dfp/ $(INSTALL_DATA) -t $(inst_docdir)dfp/ $(top_srcdir)/README.user mv $(inst_docdir)dfp/README.user $(inst_docdir)dfp/README $(INSTALL_DATA) -t $(inst_docdir)dfp/ $(top_srcdir)/COPYING.txt $(INSTALL_DATA) -t $(inst_docdir)dfp/ $(top_srcdir)/COPYING.libdfp.txt $(INSTALL_DATA) -t $(inst_docdir)dfp/ $(top_srcdir)/COPYING.libdecnumber.txt $(INSTALL_DATA) -t $(inst_docdir)dfp/ $(top_srcdir)/COPYING3 $(INSTALL_DATA) -t $(inst_docdir)dfp/ $(top_srcdir)/COPYING.RUNTIME if [ ! -e $(top_srcdir)/ChangeLog.md ]; then \ (cd $(top_srcdir) && ./generate-changelog.sh); \ else \ cat $(top_srcdir)/ChangeLog.md; \ fi > $(inst_docdir)dfp/ChangeLog.md .PHONY: install-doc # Clean out the existing .SUFFIXES setting. .SUFFIXES: # Prioritize .S over .c when searching for target files. The .os suffix # is used for shared object file and the .o suffix is for static object files. .SUFFIXES: .S .c .cpp .o .os libdfp-1.0.17/NEWS000066400000000000000000000051041504475242000135420ustar00rootroot00000000000000Decimal Floating Point C Library - history of user-visible changes. Copyright (C) 2014-2015 Free Software Foundation, Inc. See the end for copyright conditions. Version 1.0.10 * Added BID support for x86_64 and x86. * Fixes to avoid external PLT calls to internal supplied symbols. * Add optimized fabsd[32|64|128], and copysignd[32|64|128] for PowerPC with DFP hardware support. ---------------------------------------------------------------------- Version 1.0.9 * Support for powerpc64le has beed added. * Various fixes for LE build. * Support for configure with --with-cpu=power8 has been added. * Fix for isinfd[32|64|128]: it now follow GLIBC convention and returns 1 for plus infinity and -1 for minus infinity. * Fix finited result to return a positive argument for any normal number. * New macro named issignaling to check for a signaling NaN (sNaN). It is based on draft TS 18661. * New llogbd[32|64|128] implementation to return the logb result as long int. * New roundevend[32|64|128] implementation that rounds its argument to the nearest integer value in floating-point format, rounding halfway cases to even (that is, to the nearest value whose least significant bit 0), regardless of the current rounding direction. It is based on draft 18661-2. * Add optimized ceild[32|64|128], truncd[32|64|128], floord[32|64|128], nearbyintd[32|64|128], roundd[32|64|128], and roundevend[32|64|128] for PowerPC with DFP hardware support. * New quantumd[32|64|128] implementation that compute the quantum of a finite argument. It is based on draft 18661-2. * Add optimized quantumd[32|64|128] and samequantumd[32|64|128] implementation for PowerPC with DFP hardware support. ---------------------------------------------------------------------- Copyright information: Copyright (C) 2007-2014 Free Software Foundation, Inc. he Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. libdfp-1.0.17/README.developer000066400000000000000000000576271504475242000157300ustar00rootroot00000000000000=========================================================================== Libdfp The "Decimal Floating Point C Library" Developer's Guide for the GNU/Linux OS and GLIBC 2.10 Contributed by IBM Corporation Copyright (C) 2009-2014 Free Software Foundation =========================================================================== NOTE:Eight space tabs are the optimum editor setting for reading this file. =========================================================================== Author(s) : Ryan S. Arnold Andreas Krebbel Date Created: July 14, 2009 Last Changed: January 21, 2010 --------------------------------------------------------------------------- Table of Contents: 1. Introduction 1.1. ISO/IEC TR 24732 1.2. IEEE 754-2008 (DPD & BID Encodings) 1.3. Backends (libdecnumber & libbid) 2. Availability 3. Compliance With ISO/IEC TR 24732 3.1 __STDC_WANT_DEC_FP__ 3.2 scanf 4. Dependencies 4.1 GNU/Linux OS 4.2 GLIBC Minimum Version 4.3 GLIBC Headers 4.4 libdecnumber 4.5 GCC With --enable-decimal-float Support 4.6 Autoconf & GNU Make 5. Configuration 5.1 Configure Switches 6. Source Tree Layout 7. Make Rules 8. Adding New Functions (API changes) (TODO) 8. Precision (TODO) 9. Testing (make check) (TODO) 10. Contribution Checklist (TODO) 11. Coding Style (TODO) 12. DFP ABI (TODO) 13. Division of Responsibility With GCC (TODO) A. History B. Acknowledgements --------------------------------------------------------------------------- 1. Introduction The "Decimal Floating Point C Library" is an implementation of ISO/IEC Technical report "ISO/IEC TR 24732" which describes the C-Language library routines necessary to provide the C library runtime support for decimal floating point data types introduced in IEEE 754-2008, namely _Decimal32, _Decimal64, and _Decimal128. --------------------------------------------------------------------------- 1.1. ISO/IEC TR 24732 The latest description of ISO/IEC TR 24732 at the time of this writing can be found here: http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1312.pdf A rationale can be found here: http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1242.pdf And the last draft for new standard can be found at: http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1775.pdf --------------------------------------------------------------------------- 1.2. IEEE754-2008 (DPD & BID Encodings) IEEE 754-2008 defines two different encodings for the decimal floating point data types. These are DPD and BID. DPD (Densely Packed Decimal) - IBM sponsored encoding (implemented in hardware). BID (Binary Integer Decimal) - Intel sponsored encoding. A simple explanation of the general overview of Decimal Floaing Point can be found at http://speleotrove.com/decimal/decbits.pdf The BID format encoding general explanation can be found at BID - Binary-Integer Decimal Encoding for Decimal Floating Point | Ping Tak Peter Tang http://m1.archiveorange.com/m/att/KGyKy/ArchiveOrange_Ps0PWkD0ZgCLBVQYnJEcnXblPpEa.pdf Both encodings can be investigated in the draft IEEE754r: http://754r.ucbtest.org/drafts/archive/2006-10-04.pdf --------------------------------------------------------------------------- 1.3. Backends (libdecnumber & libbid) Libdfp use of "libdecnumber" backend library for software emulation. Libdecnumber was written by Mike Cowlishaw (IBM) and a form of the library was donated to the FSF where it was subsumed into GCC. The Free Software Foundation assigned GCC as the owner of libdecnumber and now any project that needs to include libdecnumber statically needs to pull it from the GCC source trees. All patches to libdecnumber should be sent to GCC. This library's copy of libdecnumber should be periodically synced with upstream GCC's version. This syncing is the responsibility of the Libdfp maintainer. --------------------------------------------------------------------------- 2. Availability Libdfp attempts to provide an encoding agnostic API to users based upon the _Decimal32, _Decimal64, and _Decimal128 data-types. Libdfp is available to be configured in the following combinations: Arch HW|SW Backend Encoding ------------------------------------------------- ppc970 SW libdecnumber DPD POWER4 SW libdecnumber DPD POWER SW libdecnumber DPD POWER6 HW libdecnumber DPD POWER7 HW libdecnumber DPD S/390 z9-109 SW libdecnumber DPD S/390 z9-ec HW libdecnumber DPD S/390 z10 HW libdecnumber DPD TODO: ------------------------------------------------- x86 SW libdecnumber DPD | BID x86_64 SW libdecnumber DPD | BID The selection of a backend and/or an encoding is made at configuration time by the distro maintainer or person building libdfp using configuration flags described in the section entitled "Configuration". A summary with information regarding "libdecnumber" and Decimal Floating Point in general can be found at: http://speleotrove.com/decimal/ --------------------------------------------------------------------------- 3. Compliance With ISO/IEC TR 24732 This section covers issues related to compliance with ISO/IEC TR 24732. --------------------------------------------------------------------------- 3.1 __STDC_WANT_DEC_FP__ The standard ISO/IEC TR 24732 indicates that programs that wish to use Decimal Floating Point should define the following macro: __STDC_WANT_DEC_FP__ There is no set value for this macro. Simply passing -D__STDC_WANT_DEC_FP__ on compilation, or defining it in your program should suffice: #define __STDC_WANT_DEC_FP__ This macro is REQUIRED when including dfp/math.h dfp/fenv.h, etc to pick up the DFP function prototypes and data types defined in these headers. --------------------------------------------------------------------------- 3.2 scanf Libdfp does not, and will not comply with the TR 24732 requirement for the addition of scanf in support of decimal floating point data types. The strtod[32|64|128] functions can be used for the same purpose without the implications of scanf. This is main due the fact GLIBC does not support scanf hooks as it does for printf. --------------------------------------------------------------------------- 3.3 printf Libdfp supports the addition of the printf format codes indicated by TR 24732. GLIBC proper owns the printf implementation. Libdfp utilizes the printf-hooks mechanism provided by GLIBC to register support of the DFP format codes. The fully functional printf-hooks mechanism was debuted in GLIBC 2.10. --------------------------------------------------------------------------- 4. Dependencies --------------------------------------------------------------------------- 4.1 GNU/Linux OS Libdfp is only enabled to work on the GNU/Linux OS. --------------------------------------------------------------------------- 4.2 GLIBC Minimum Version Libdfp version 1.0.0 relies upon a minimum GLIBC 2.10 for printf-hooks support. The libdfp configure stage will check the libc that it is linked against for the printf-hook support and will warn if it is not found. --------------------------------------------------------------------------- 4.4 libdecnumber The libdecnumber library has it's own configure and Makefile fragments. This is so that it can be built from within any source tree simply by passing the necessary configure flags. In reality it's a bit more complicated. The libdecnumber library requires the --enable-decimal-float flag when being configured. This pushes this requirement upon the top level Libdfp 'configure'. Sadly this is necessary because Autoconf doesn't allow passing flags to AC_CONFIG_SUBDIRS. It only passes the --with and --enable flags of the parent configure fragment to the child, therefore the parent needs to have all the flags used by the child. We used the --enable-decimal-float flag to indicate which encoding to use, DPD or BID. The following are valid: --enable-decimal-float=dpd --enable-decimal-float=bid --enable-decimal-float=yes {uses the host default encoding} Specifying --enable-decimal-float=no simply defaults to the host default encoding as well. Some of the files in the Libdfp top directory are symlinked to the actual files in the ./scripts directory. This is because libdecnumber lives in the GCC source tree and GCC doesn't use AC_CONFIG_AUX_DIR([scripts]) but Libdfp DOES. This is required so that libdecnumber/configure.ac -> configure works properly. --------------------------------------------------------------------------- 4.5 GCC With --enable-decimal-float Support There's a dependency on a version of GCC which supports Decimal Floating Point. Use the following to determine if your compiler supports it: gcc -v 2>&1 | grep "\-\-enable\-decimal\-float" If decimal floating point support is not available in your compiler the libdfp configure stage will fail with a warning. Between GCC 4.3 and GCC 4.5 the compiler exported constant __DEC32_DENORMAL_MIN__ was changed to __DEC32_SUBNORMAL_MIN__. Libdfp now uses __DEC32_SUBNORMAL_MIN__. If you see errors like the following then you need to upgrade your compiler: error: '__DEC32_SUBNORMAL_MIN__' undeclared (first use in this function) --------------------------------------------------------------------------- 4.6 Autoconf & GNU Make This Library uses Autoconf to generate GNU Makefiles from Makefile.in templates and NOT Automake because Automake is incapable of selecting .S or .c source files from an override directory. Automake is poorly suited for system libraries which require flexibility based on assembler code overrides and submachine architecture overrides. Automake demands that the target file list be statically defined. If you need to re-run autoreconf -i you need to use Autoconf version 2.59 because libdecnumber explicitly requires it. Here's a hint on how to use a particular autoconf version: PATH=/usr/local/autoconf-2.59/bin/:$PATH autoreconf -i This of course requires that you've installed Autoconf version 2.59 with --prefix=/usr/local/autoconf-2.59/ Some of the Makefile machinery was inspired by the GLIBC Makefiles, beautifully written by Roland McGrath since this library was originally a GLIBC add-on. --------------------------------------------------------------------------- 5. Configuration Standalone libdfp requires that your build directory be separate from the source directory. Invoke the source directory's 'configure' script from within the build directory, e.g. /home/$USER/stage_libdfp/build/$ ../libdfp/configure --------------------------------------------------------------------------- 5.1 Configure Switches Environment Variables PATH Set the PATH environment variable. If this is specified and paths to CC, CXX, OBJDUMP, LDD, and GDB aren't defined, libdfp configure will search in $PATH for these binaries. CC [OPTIONAL: Picked up from $PATH if not specified.] Specify the C compiler to use to build libdfp and test cases. CXX [OPTIONAL: Picked up from $PATH if not specified.] Specify the C++ compiler to use for the Libdfp C++ compatibility tests cases. CFLAGS="-m64 -O2 -g" Since the default bitness of the compiler's generated binaries varies between Linux distros, and on some architectures the Kernel has a different bitness than the default user env it is recommended that the -m[31|32|64] flags be passed. These should accompany sympathetic --build switch described below, e.g. powerpc-linux-gnu for -m32 powerpc64-linux-gnu for -m64 For System Z (s390), depending on the cpu, Libdfp's configure.ac will append a -mzarch flag onto CFLAGS automatically. This is a special flag required to enable hardware DFP on some System Z cpus. ASFLAGS Libdfp's Makefile.in will pull -g or -m[31|32|64] into ASFLAGS if it is specified in CFLAGS. If you need anything else, pass it in here and it'll be added. CXXFLAGS [Only needed for the C++ compatibility test suite.] This should generally match the CFLAGS (for the most part). CPPFLAGS Use this to pass specific flags to the C Preprocessor. OBJDUMP [OPTIONAL: Picked up from $PATH if not specified.] Specify the objdump binary to use to generate the debug scripts. LDD [OPTIONAL: Picked up from $PATH if not specified.] Specify the ldd to use to generate the debug scripts. GDB [OPTIONAL: Picked up from $PATH if not specified.] Specify the gdb to use to debug the test cases. Libdfp's default configure will be based on whatever bitness the user environment is. In order to build 32-bit libdfp you can pass the following switch: --build=powerpc-linux-gnu In order to build 64-bit libdfp you can pass the following switch: --build=powerpc64-linux-gnu --prefix=/opt/foo [OPTIONAL] Override the default system prefix, e.g. if you want to install into /opt/ for some reason specify: --prefix=/opt/libdfp/. --libdir=/usr/lib64 [REQUIRED if you want to install 64-bit libs into lib64/] [OPTIONAL] Override the default '/lib' library path on installation. If you've already used --prefix=/opt/foo and you need t install a 64-bit libdfp into lib64/ then you need: --prefix=/opt/foo --libdir=/opt/foo/lib64/ In otherwords, libdir REPLACES the path "/lib" on installation it doesn't concatenate onto "" --with-glibc-headers=/home/$USER/stage_libdfp/glibc-2.10-headers [REQUIRED if your toolchain has GLIBC version less than 2.10] --with-glibc-build=/home/$USER/stage_glibc/build/glibc64_power6/ [OPTIONAL] If you want to run make check but your system GLIBC isn't version 2.10 you need to pass the location of a temporary GLIBC build-dir (not install dir) where that GLIBC meets or exceeds version 2.10. Not passing this switch tells the make check system to simply use the system GLIBC. WARNING: Make sure you link to a GLIBC build that supports the same configure options as how you're configuring libdfp, e.g. if you're configuring for 'power6' 64-bit, make sure that the GLIBC build you link against is a 64-bit. It doesn't have to be tuned for power6 but it should be able to execute properly. --with-cpu={power5|power6|power7|} [OPTIONAL] Use this if you want the compiler to optimize the generated code for a particular processor. This also causes the libdfp build infrastructure to choose architecture specific overrides from the sysdeps tree. For most scenarios, running configure without any extra parameters will do the right thing, e.g: ../libdfp/configure | tee _configure Here are some more complicated configurations of libdfp linking an alternate GLIBC: 64-bit PowerPC (soft-dfp) using the libdecnumber backend and dpd encoding: CC=/opt/at4.0/bin/gcc CFLAGS="-m64 -O2 -g" \ CXX=/opt/at4.0/bin/gcc CXXFLAGS="-m64 -O2 -g" \ ~/eglibc/eglibc/libdfp/trunk/configure \ --libdir=/usr/lib64/ \ --with-glibc-headers=~/ppc64-tc-utils/trunk/libdfp/include-2.10/ \ --build=powerpc64-linux-gnu \ --with-glibc-build=~/glibc-2.11/build/glibc64_power5 \ 2>&1 | tee _configure64_power5 64-bit PowerPC POWER6 (hard-dfp) using libdecnumber backend and dpd encoding: We only need the --with-cpu=power6 flag for power6 support and hardware-dfp: CC=/opt/at4.0/bin/gcc CFLAGS="-m64 -O2 -g" \ CXX=/opt/at4.0/bin/gcc CXXFLAGS="-m64 -O2 -g" \ ~/eglibc/eglibc/libdfp/trunk/configure \ --libdir=/usr/lib64/ \ --with-glibc-headers=~/ppc64-tc-utils/trunk/libdfp/include-2.10/ \ --build=powerpc64-linux-gnu \ --with-glibc-build=~/glibc-2.11/build/glibc64_power6 \ --with-cpu=power6 2>&1 | tee _configure64_power6 64-bit PowerPC POWER7 (hard-dfp) using libdecnumber backend and dpd encoding: We only need the --with-cpu=power7 flag for power7 support and hardware-dfp: CC=/opt/at4.0/bin/gcc CFLAGS="-m64 -O2 -g" \ CXX=/opt/at4.0/bin/gcc CXXFLAGS="-m64 -O2 -g" \ ~/eglibc/eglibc/libdfp/trunk/configure \ --libdir=/usr/lib64/ \ --with-glibc-headers=~/ppc64-tc-utils/trunk/libdfp/include-2.10/ \ --build=powerpc64-linux-gnu \ --with-glibc-build=~/glibc-2.11/build/glibc64_power7 \ --with-cpu=power7 2>&1 | tee _configure64_power7 32-bit PowerPC (soft-dfp) using the libdecnumber backend and dpd encoding: CC=/opt/at4.0/bin/gcc CFLAGS="-m32 -O2 -g" \ CXX=/opt/at4.0/bin/gcc CXXFLAGS="-m32 -O2 -g" \ ~/eglibc/eglibc/libdfp/trunk/configure \ --with-glibc-headers=~/ppc64-tc-utils/trunk/libdfp/include-2.10/ \ --build=powerpc-linux-gnu \ --with-glibc-build=~/glibc-2.11/build/glibc32_power5 \ 2>&1 | tee _configure32_power5 Or 32-bit POWER6 (hard-dfp): CC=/opt/at4.0/bin/gcc CFLAGS="-m32 -O2 -g" \ CXX=/opt/at4.0/bin/gcc CXXFLAGS="-m32 -O2 -g" \ ~/eglibc/eglibc/libdfp/trunk/configure \ --with-glibc-headers=~/ppc64-tc-utils/trunk/libdfp/include-2.10/ \ --build=powerpc-linux-gnu \ --with-glibc-build=~/glibc-2.11/build/glibc32_power6 \ --with-cpu=power6 2>&1 | tee _configure32_power6 Or 32-bit POWER7 (hard-dfp): CC=/opt/at4.0/bin/gcc CFLAGS="-m32 -O2 -g" \ CXX=/opt/at4.0/bin/gcc CXXFLAGS="-m32 -O2 -g" \ ~/eglibc/eglibc/libdfp/trunk/configure \ --with-glibc-headers=~/ppc64-tc-utils/trunk/libdfp/include-2.10/ \ --build=powerpc-linux-gnu \ --with-glibc-build=~/glibc-2.11/build/glibc32_power7 \ --with-cpu=power7 2>&1 | tee _configure32_power7 --------------------------------------------------------------------------- 6. Source Tree Layout The Libdfp configure script is responsible for building the search order that is used by the Make system for selecting files out of the source tree. The configure script automatically knows how to search for base_machine (e.g. powerpc) machine (e.g. powerpc32) submachine (e.g. power6, power7) It also recognizes the following special directories when they show up following any of the previous *machine directories: fpu nofpu dfpu bits It hard-searches for the following sysdep directories based upon configuration settings: bid dpd soft-dfp And it knows how to find the common files stored in the convenience directories: ieee754r base-math The top of the search list is the commond libdfp internal header files: ${srcdir}/include. Anything in these directories should be ABSOLUTELY COMMON since you can't get a header earlier than in the ${srcdir}/include directory. If you need to override something in ${srcdir}/include then you may need to move the headers out of this directory and into the sysdeps tree. Header files that are used when building libdfp, but also provided by libdfp and installed in the prefix directory are in the following directory: ${srcdir}/dfp The sysdeps tree is searched and relevant directory depth takes precedence. ${srcdir}/include [internal libdfp headers] ${srcdir}/libdecnumber/dpd [libdecnumber headers] ${srcdir}/libdecnumber/bid [libdecnumber headers] ${srcdir}/libbid/? [libbid headers] [MACHINE/SUBMACHINE] ${srcdir}/sysdeps/powerpc/powerpc64/power7/fpu [platform directories] ${srcdir}/sysdeps/powerpc/powerpc64/power7/ ${srcdir}/sysdeps/powerpc/powerpc64/power6/fpu [platform directories] ${srcdir}/sysdeps/powerpc/powerpc64/power6/ ${srcdir}/sysdeps/powerpc/powerpc64/ ${srcdir}/sysdeps/powerpc/powerpc32/power6/fpu [platform directories] ${srcdir}/sysdeps/powerpc/powerpc32/power6/ ${srcdir}/sysdeps/powerpc/powerpc32/ [BASE_MACHINE/[FPU|NOFPU|BITS]] ${srcdir}/sysdeps/powerpc/fpu ${srcdir}/sysdeps/powerpc/fpu/bits ${srcdir}/sysdeps/powerpc/nofpu ${srcdir}/sysdeps/powerpc/nofpu/bits [BASE_MACHINE] ${srcdir}/sysdeps/powerpc/ ${srcdir}/sysdeps/i386/ [ENCODING] ${srcdir}/sysdeps/dpd [dpd specific implementations] ${srcdir}/sysdeps/bid [bid specific implementations] [SOFT-DFP ENCODING OVERRIDES[DPD|BID]] ${srcdir}/sysdeps/soft-dfp/dpd [soft-dfp dpd arithmetic, conversion, and comparison fns] ${srcdir}/sysdeps/soft-dfp/bid [soft-dfp bid arithmetic, conversion, and comparison fns] ${srcdir}/sysdeps/soft-dfp [soft-dfp arithmetic, conversion, and comparison fns] ${srcdir}/dfp [headers files that will be installed. These follow the sysdep overrides so that sysdeps override directories show up before the install headers in #include_next
. ${srcdir}/ieee754r [ISO C Draft TR functions] ${srcdir}/base-math [Arithmetic, Conversion, and Comparison Routines.] ${srcdir}/[common libdfp framework code & common headers for the backends.] Out of Tree Sources ${srcdir}/libdecnumber [third-party GCC sources] ${srcdir}/libbid [third-party libBID sources] --------------------------------------------------------------------------- 7. Make Rules make [all (default)] DEPENDENCIES: GLIBC headers: The location of the companion GLIBC 2.10 (or greater) headers as passed to configure using the --with-glibc-headers switch. make check DEPENDENCIES: GLIBC build: The location of a companion GLIBC 2.10 (or greater) build (prior to make install) that is to be linked against during the make check run. This is required because the printf-hooks feature that is necessary for printing _Decimal[32|64|128] numbers is only in GLIBC 2.10 and later. This isn't necessary if the system GLIBC is version 2.10 or later. The path to the build was passed to configure using the --with-glibc-build switch. make install [DESTDIR=] [DESTDIR] (Optional) : Install to /$prefix. This is used by libdfp developers and distro builders so that they can build libdfp and install it to an alternate location in preparation for packaging. make install-headers [DESTDIR=] [DESTDIR] (Optional) : Install libdfp headers into /$prefix/include/dfp. This is used by application or library developers whose projects depend on libdfp who don't want to install libdfp proper or may not have permission to do so. make clean [TODO] make distclean --------------------------------------------------------------------------- 8. Adding New Functions (API changes) (TODO) Libdfp versioning uses the following convention: major.minor.revision New functions must ALWAYS be added to the next revision number of the library. For instance, if the maintainer has designated the current release at 1.0.8 new function should be added to 1.0.9. Then, when the maintainer increments the library to 1.0.9 the new functions will become available. --------------------------------------------------------------------------- Appendices --------------------------------------------------------------------------- A. History Libdfp was designed by Ryan S. Arnold (IBM), Janis Johnson (IBM), and Steven J. Munroe (IBM) in 2006. Libdfp was originally written as a GLIBC add-on by Ryan S. Arnold and Joseph Kerian in 2006 and contributed to the Free Software Foundation by IBM in 2007. Janis Johnson provided the initial versions of the arithmetic, conversion, and comparison routines. The libdecnumber library was originaly contributed to GCC by IBM and written by Mike Cowlishaw. Its inclusion into GCC was negotiated in 2005/2006 and it was pulled into Libdfp as a utility library shortly thereafter. GLIBC proper declined to include Libdfp upstream on the grounds that ratification of the DFP technical report had not taken place so... Libdfp was ported to EGLIBC by Pete Eberlein in 2007. System 390 support was added by Andreas Krebbel starting in 2008. Ryan S. Arnold (with the help of Andreas Krebbel) ported Libdfp into a stand-alone library in 2009. --------------------------------------------------------------------------- B. Acknowledgements Thanks to Ulrich Drepper and the GLIBC folks since we used much of the GLIBC macro black magic, math routines, string-to-float conversions, and printf_fp code as a basis for the corresponding decimal floating point forms. Thanks to Roland McGrath for his wild Makefile foo in GLIBC. Ryan used a lot of that as inspiration for Libdfp's Makefiles. Thanks to everyone at IBM (past and present) who worked on Libdfp. Thanks to Jeff Bailey for helping Ryan grok Autoconf and GNU Make. His examples on SUFFIXES rules were invaluable in getting the stand-alone Libdfp make files into a functional form. Thanks to EGLIBC (eglibc.org) for hosting Libdfp when it was a GLIBC add-on and for hosting the stand alone version as well. Thanks to Michael Matz (SuSE) for help getting the initial packaging for Libdfp straightened out. libdfp-1.0.17/README.maintainer000066400000000000000000000036521504475242000160570ustar00rootroot00000000000000=========================================================================== Libdfp The "Decimal Floating Point C Library" Maintainer's Guide for the GNU/Linux OS and GLIBC 2.10+ Contributed by IBM Corporation Copyright (C) 2011-2014 Free Software Foundation =========================================================================== NOTE:Eight space tabs are the optimum editor setting for reading this file. =========================================================================== Author(s) : Ryan S. Arnold Date Created: February 9, 2011 --------------------------------------------------------------------------- Table of Contents: 1. Introduction 2. Libdfp API Changes 3. Libdfp ABI Changes 4. Versioning 5. Contributing --------------------------------------------------------------------------- 2. Libdfp API Changes When new functions or interfaces are added to Libdfp then the API has changed and the library version must change. For guidelines on adding new symbols to a particular version see README.developer. --------------------------------------------------------------------------- 3. Libdfp API Changes TODO --------------------------------------------------------------------------- 4. Versioning TODO --------------------------------------------------------------------------- 5. Contributing Libdfp is developed now using GIT SCM at github. Main site is: https://github.com/libdfp/libdfp General developement follows the simple guideline: 1. Make sure you have a GitHub account 2. Fork the repository to your account. 3. Make the changes and run the testcases. We only take pull requests with passing tests. 4. If it is applicable, improve or add the current testcases to cover for the new functionality. 5. Libdfp also uses the ChangeLog with the same format and rules as the GLIBC one. 6. Push to your fork and submit a pull request. libdfp-1.0.17/README.user000066400000000000000000000575661504475242000147230ustar00rootroot00000000000000=========================================================================== Libdfp The "Decimal Floating Point C Library" User's Guide for the GNU/Linux OS and GLIBC 2.10+ Contributed by IBM Corporation Copyright (C) 2010 - 2014 Free Software Foundation =========================================================================== NOTE:Eight space tabs are the optimum editor setting for reading this file. =========================================================================== Author(s) : Ryan S. Arnold Date Created: January 27, 2010 Last Changed: August 8, 2012 --------------------------------------------------------------------------- Table of Contents: 1. Introduction 1.1. ISO/IEC TR 24732 1.2. ISO/IEC DTR 24733 1.3. IEEE 754-2008 (DPD & BID Encodings) 1.4. Backends (libdecnumber & libbid) 2. Availability 3. Compliance With ISO/IEC TR 24732 3.1 __STDC_DEC_FP__ 3.2 __STDC_WANT_DEC_FP__ 3.3 GNU99 Compatibility 3.4 _Decimal[32|64|128] Data Types 3.4.1 _Decimal[32|64|128] Encoding 3.5 scanf Support 3.6 printf Support 3.5.1 printf "a,A" Conversion Specifier 4. Compliance With ISO/IEC DTR 24733 4.1 C++ decimal[32|64|128] Types Compatibility 4.2 C++ decimal[32|64|128] operator<< and operator>> Support 4.3 Printing decimal[32|64|128] Types and Precision 5. Dependencies 5.1 GNU/Linux OS 5.2 GLIBC Minimum Version 5.3 GCC With --enable-decimal-float Support 6. DFP Headers 7. Compile and Link 8. Unsupported/Non-Standard Additions 9. Known Limitations --------------------------------------------------------------------------- 1. Introduction The "Decimal Floating Point C Library" is an implementation of ISO/IEC Technical report "ISO/IEC TR 24732" which describes the C-Language library routines necessary to provide the C library runtime support for decimal floating point data types introduced in IEEE 754-2008, namely _Decimal32, _Decimal64, and _Decimal128. --------------------------------------------------------------------------- 1.1. ISO/IEC TR 24732 The decimal floating point extension to the C programming language is described in the ratified ISO/IEC Technical Report 24732. The latest description of ISO/IEC TR 24732 at the time of this writing can be found here: http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1312.pdf A rationale can be found here: http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1242.pdf And the last draft for new standard can be found at: http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1775.pdf --------------------------------------------------------------------------- 1.2. ISO/IEC DTR 24733 The decimal floating point extension to the C++ programming language is described in ISO/IEC DRAFT Technical Report 24733. The latest description of ISO/IEC DTR 24733 at the time of this writing can be found here: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf --------------------------------------------------------------------------- 1.3. IEEE754-2008 (DPD & BID Encodings) IEEE 754-2008 defines two different encodings for the decimal floating point data types. These are DPD and BID. DPD (Densely Packed Decimal) - IBM sponsored encoding (implemented in hardware). BID (Binary Integer Decimal) - Intel sponsored encoding. A simple explanation of the general overview of Decimal Floaing Point can be found at http://speleotrove.com/decimal/decbits.pdf The BID format encoding general explanation can be found at BID - Binary-Integer Decimal Encoding for Decimal Floating Point | Ping Tak Peter Tang http://m1.archiveorange.com/m/att/KGyKy/ArchiveOrange_Ps0PWkD0ZgCLBVQYnJEcnXblPpEa.pdf Both encodings can be investigated in the draft IEEE754r: http://754r.ucbtest.org/drafts/archive/2006-10-04.pdf --------------------------------------------------------------------------- 1.4. Backends (libdecnumber & libbid) Libdfp use of "libdecnumber" backend library for software emulation. And for the most part, a user of libdfp should not have to be concerned with the libdfp backend. The user's interface is that defined by ISO/IEC TR 24732, i.e. the Decimal Floating Point addition to the C Language specification. --------------------------------------------------------------------------- 2. Availability Libdfp attempts to provide an encoding agnostic API to users based upon the _Decimal32, _Decimal64, and _Decimal128 data-types and the proposed C-Language extension for Decimal Floating Point Types. --------------------------------------------------------------------------- 3. Compliance With ISO/IEC TR 24732 This section covers issues related to compliance with ISO/IEC TR 24732, the ratified ISO C DFP Technical Report. --------------------------------------------------------------------------- 3.1 __STDC_DEC_FP__ The draft standard ISO/IEC TR 24732 specifies the macro __STDC_DEC_FP__ as integer constant 200805L to indicate conformance to the technical report. This macro describes properties of the compiler and library that together satisfy the technical report. The intention is that user applications may check for conformance with the following: #ifdef __STDC_DEC_FP__ /* Select implementation conforming to the TR. */ #else /* Select non-conforming DFP emulation library. */ #endif Since __STDC_DEC_FP__ is a property fulfilled by both the compiler and library the compiler can't predefine this macro without know if the user is using libdfp. There is currently no mechanism for the compiler to determine this early in the translation unit. This will eventually be provided, once a mechanism is added into GLIBC and GCC for identifying stdc predefines as highlighted in this email: http://sourceware.org/ml/libc-alpha/2009-04/msg00005.html At that point libdfp will provide __STDC_DEC_FP__ for GLIBC versions greater than FOO and GCC versions greater than BAR. --------------------------------------------------------------------------- 3.2 __STDC_WANT_DEC_FP__ The standard ISO/IEC TR 24732 indicates that programs that wish to use Decimal Floating Point should define the following macro: __STDC_WANT_DEC_FP__ There is no set value for this macro. Simply passing -D__STDC_WANT_DEC_FP__ on compilation, or defining it in your program should suffice: #define __STDC_WANT_DEC_FP__ This macro is REQUIRED when including dfp/math.h dfp/fenv.h, etc to pick up the DFP function prototypes and data types defined in these headers. --------------------------------------------------------------------------- 3.3 GNU99 Compatibility GNU99 compatibility is required to pick up some DFP prototypes that are similar to the binary floating point prototypes guarded in by __USE_ISOC99 and others. It will define __USE_ISOC99. Use the following compilation flag: -std=gnu99 NOTE: -std=gnu99 IS NOT THE SAME AS __USE_ISOC99 though -std=gnu99 DOES DEFINE __USE_ISOC99! Additionally, simply using -std=c99 isn't enough! NOTE: If you forget to use -std=gnu99 you may notice that you will get very screwy results when you call dfp math functions. If the compiler can't find the prototypes (due to missing defines) it will attempt to create a default prototype which will have an incorrect return type. Compile with -Wall to pick up undefined prototype warnings. --------------------------------------------------------------------------- 3.4 _Decimal* Data Types The Decimal Floating Point data types are as follows: _Decimal32 _Decimal64 _Decimal128 The floating point suffix for DFP constants follows: 'DF' for _Decimal32, e.g. _Decimal32 d32 = 1.045DF; 'DD' for _Decimal64, e.g. _Decimal64 d64 = 1.4738273DD; 'DL' for _Decimal128, e.g. _Decimal128 d128 = 1.0823382394823945DL; NOTE: Assigning a naked constant to a DFP variable will actually be performing a binary to decimal conversion and, depending on the precision, can assign an incorrect number. Always use the decimal floating point suffix, e.g., _Decimal64 d64 = 1.0DD; The following will result in a binary float to decimal float conversion: _Decimal64 d64 = 1.0; --------------------------------------------------------------------------- 3.4.1 _Decimal[32|64|128] Encoding Consider the following _Decimal64 values and encodings (displayed in declet triples): /* Encoded as "+1,000,000,000,000,000e+285" */ _Decimal64 d64 = 1.000000000000000e300DD; /* Encoded as "+0,000,000,000,000,001e+300" */ _Decimal64 e64 = 1e300DD; These values are equivalent in comparison but there is inherently more precision in the first value and this should be preserved when the value is printed. As described in section 3.6.1, the a/A conversion specifier is used to direct printf to use the precision encoded in the actual value for the output string precision. --------------------------------------------------------------------------- 3.5 scanf Support Libdfp does not, and will not comply with the TR 24732 requirement for the addition of scanf in support of decimal floating point data types. The strtod[32|64|128] functions can be used for the same purpose without the implications of scanf. This is main due the fact GLIBC does not support scanf hooks as it does for printf. --------------------------------------------------------------------------- 3.6 printf Support Libdfp supports the addition of the printf format codes indicated by TR 24732. GLIBC proper owns the printf implementation. Libdfp utilizes the printf-hooks mechanism provided by GLIBC to register support of the DFP format codes. The fully functional printf-hooks mechanism was debuted in GLIBC 2.10. Libdfp has a library constructor which registers the Libdfp printf handlers with the libc. If the version of GLIBC that is loaded when your application is executed is too old (pre-2.10) and doesn't have the printf-hooks interface you will get an undefined reference error against GLIBC. When libdfp is loaded printf will recognize the following length modifiers: %H - for _Decimal32 %D - for _Decimal64 %DD - for _Decimal128 It will recognize the following conversion specifier 'spec' characters: e,E f,F g,G a,A (as debuted in ISO/IEC TR 24732) Therefore, any combination of DFP length modifiers and spec characters is supported. 3.6.1 printf "a,A" Conversion Specifier --------------------------------------------------------------------------- The ISO-C DFP specification adds "a/A" as a printf conversion specifier. This conversion specifier is unique in that when it is used the precision of the output string includes as many of the significant digits in the mantissa in the as possible unless there are fewer digits in the mantissa than in the specified precision. Following are some examples to demonstrate the use of the a/A conversion specifier. printf("Result: %.1HaDF\n", 6543.00DF); Result: 7E+3DF printf("Result: %.5HaDF\n", 6543.00DF); Result: 6543.0DF printf("Result: %.4HaDF\n", 6543.00DF); Result: 6543DF /* Example where the implicit number of digits is less than the * explicit precision. */ printf("Result: %.8HaDF\n", 6543.00DF); Result: 6543.00DF If your compiler is being pedantic you may get the following warning (due to -Wformat) when using the a/A conversion specifier with the H/D/DD length modifiers. warning: use of ‘H’ length modifier with ‘A’ type character [-Wformat] This is not a real problem. It simply hints at the issue described in section 3.1. When the compiler and library are able to define __STDC_DEC_FP__ then the compiler can detect that libdfp is available and that a/A conv specifier is a valid combination with the H/D?DD length modifiers. --------------------------------------------------------------------------- 4. Compliance With ISO/IEC DTR 24733 This section covers issues related to compliance with ISO/IEC DTR 24733, the ISO C++ DFP Draft Technical Report. 4.1 C++ decimal[32|64|128] Types Compatibility --------------------------------------------------------------------------- Your C++ compiler may not yet provide the ISO C DFP _Decimal[32|64|128] types. Per the C++ DFP specification: ISO/IEC JTC1 SC22 WG21 N2732 "Extension for the programming language C++ to support decimal floating point arithmetic", the header float.h shall include the following C-compatibility convenience typedefs: typedef std::decimal::decimal32 _Decimal32; typedef std::decimal::decimal64 _Decimal64; typedef std::decimal::decimal128 _Decimal128; This allows C++ programs, which use the native decimal32, decimal64, and decimal128 types to use the _Decimal32, _Decimal64, and_Decimal128 types. Your compiler may or may not yet have this defined in float.h. As a matter of convenience, libdfp has provided these headers in the libdfp headers directory include/dfp/float.h 4.2 C++ decimal[32|64|128] operator<< and operator>> Support --------------------------------------------------------------------------- Your C++ compiler may not provide operator<< and operator>> support for std::decimal::decimal[32|64|128] data types. Per the C++ DFP specification: ISO/IEC JTC1 SC22 WG21 N2732 "Extension for the programming language C++ to support decimal floating point arithmetic", the header shall provide the following operator overloads. namespace std { namespace decimal { template std::basic_istream & operator>>(std::basic_istream & is, decimal32 & d); template std::basic_istream & operator>>(std::basic_istream & is, decimal64 & d); template std::basic_istream & operator>>(std::basic_istream & is, decimal128 & d); template std::basic_ostream & operator<<(std::basic_ostream & os, decimal32 d); template std::basic_ostream & operator<<(std::basic_ostream & os, decimal64 d); template std::basic_ostream & operator<<(std::basic_ostream & os, decimal128 d); }} Per http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51486, since C++ decimal support is defined in a technical report and not ratified into the actual C++ standard the header shouldn't be located in the default headers include directory. As a result the header is located in the include/decimal directory. Therefore, in order to include the decimal header implicitly use the following in applications: #include 4.3 Printing decimal[32|64|128] Types and Precision --------------------------------------------------------------------------- Libdfp provides two mechanisms for printing decimal floating-point data types in string representation. These are via the C++ ostream operator "<<" for decimal[32|64|128] data types and the ISO C printf interface (described in section 3.6) for _Decimal[32|64|128] data types. The ISO C DFP Technical Report provides well described extensions to the printf interface for decimal floating-point types. Unfortunately, the DFP C++ Draft Technical Report simply describes the ostream operator that needs to be provided for string formatting but does not fully describe the procedure for printing full precision decimal types considering the fully encoded precision in decimal types. Please refer to section 3.4.1 for a discussion of the encoding. The base C++ specification describes ostream operator support for floating-point types as equivalent to corresponding ISO C printf conversion specifiers (as described in the following table): C++ ios_base::fmtflags | ISO C printf equivalent conv spec -----------------------------|----------------------------------------- | g ios::fixed | f ios::scientific | e ios::fixed | ios::scientific | a ios::upper | G/F/E/A ios::lower | g/f/e/a Since the DFP C++ Draft Technical Report makes no explicit provisions for format codes specific to decimal floating-point types the Libdfp implementation falls back on the equivalency to printf conversion specifiers described in this table. Under binary floating-point the a/A spec is used to print hexadecimal representation of floating point values, which is why no precision is allowed to convert (truncate and round) the output string representation. The C++ specification indicates that a/A is specified by passing ios::fixed | ios::scientific in the ios_base::fmtflags for the stream. When this combination of flags is specified the precision set in the ostream (whether the default or user specified) is not honored or used in the printing of the type. As described in section 3.5.1, the overridden a/A conversion specifier is the most desireable conversion specifier used with printf for decimal floating-point types since it preserves the encoded precision in the output string representation by default (when no explicit precision is specified). Since there is no interface specified in the DFP C or C++ specifications for querying the number of significant digits in a decimal floating-point value the user should most often use the a/A conversion specifier in order to preserve significant digits. The caveat, of course, is that since the C++ specification does not provide a way to programmatically determine whether the queried stream precision is the default of '6', or a value set by the user, nor does the C++ specification allow stream precision to be considered when printing the a/A style conversion, this ostream operator implementation can not pass the stream precision on to the printf function. Therefore, all use of (ios::fixed | ios::scientific) will result in full precision output and it will not honor the output precision specified in the stream. --------------------------------------------------------------------------- 5. Dependencies --------------------------------------------------------------------------- 5.1 GNU/Linux OS Libdfp is only enabled to work on the GNU/Linux OS. --------------------------------------------------------------------------- 5.2 GLIBC Minimum Version Libdfp version 1.0.0 relies upon a minimum GLIBC 2.10 for printf-hooks support. The libdfp configure stage will check the libc that it is linked against for the printf-hook support and will warn if it is not found. --------------------------------------------------------------------------- 5.3 GCC With --enable-decimal-float Support There's a dependency on a version of GCC which supports Decimal Floating Point. Use the following to determine if your compiler supports it: gcc -v 2>&1 | grep "\-\-enable\-decimal\-float" If decimal floating point support is not available in your compiler the libdfp configure stage will fail with a warning. --------------------------------------------------------------------------- 6. DFP Headers The following Libdfp headers extend the existing system headers. If the path to the Libdfp headers is included in the search path then these will be picked up prior to the system headers. dfp/fenv.h dfp/math.h dfp/stdlib.h dfp/wchar.h dfp/float.h dfp/decimal/decimal Each of these headers uses the GCC construct #include_next in order to pick up the system header as well, e.g., dfp/math.h will #include_next dfp/decimal/decimal will #include_next This mechanism allows Libdfp to add the Decimal interfaces required by the specification to the aforementioned headers. In order to pick up the Libdfp prototypes and classification macro overrides compile with the following: -I/pathto/include/dfp/ -D__STDC_WANT_DEC_FP__=1 Using -I instead of -isystem is suggested because -I indicates that the specified headers are picked up BEFORE the system headers, which is what we want. Then in the application source simply using the following include will pick up both /pathto/include/dfp/.h and /usr/include/.h: #include #include #include #include /* And for C++ programs */ #include #include Due to the use of #include_next in the DFP headers (in order to wrap the default system headers with DFP prototypes) the methodology of including "dfp/" in the include path, and then excluding -I/pathto/include/dfp/ is NOT supported. DO NOT DO THE FOLLOWING: #include #include #include #include #include #include --------------------------------------------------------------------------- 7. Compile and Link A compilation and link for a DFP program will look like the following: $(CC) -Wall test_dfp.c -o test_dfp -D__STDC_WANT_DEC_FP__ \ -std=gnu99 -ldfp --------------------------------------------------------------------------- 8. Unsupported/Non-Standard Additions Libdfp provides a non-standard method for output of the decoded Densely Packed Decimal representation using the decoded[32|64|128]() functions. The output format is: [sign][MSD],[decoded-declet-1], ...,[decoded-declet-n][E][+|-][decoded exponent] Examples: +0,000,000E+0 = decoded32(0DF) +0,000,000,000,001,000E-1 = decoded64(100.0DD) -0,000,000,000,000,000,000,000,000,039,654,003E-3 = decoded128(-39654.003DL) +9,876,543E+22 = decoded32(9.876543E+28DF) WARNING: Do NOT rely on these methods for user space code. They're only provided for toolchain development debug support. A header file providing the prototype for these functions is not provided by the Advance Toolchain to discourage you from using them. If you MUST use them define the following prototypes in your program: /* char * should ref a 14 byte char array, * +0,000,000E+0\0 */ extern char * decoded32 (_Decimal32, char*); /* char * should ref a 26 byte char array, * +0,000,000,000,000,000E+0\0 */ extern char * decoded64 (_Decimal64, char*); /* char * should ref a 50 byte char array, * +0,000,000,000,000,000,000,000,000,000,000,000E+0\0 */ extern char * decoded128 (_Decimal128, char*); --------------------------------------------------------------------------- 9. Known Limitations IEEE754r currently has an addendum awaiting vote whereby the default quantum for conversions involving zero will go to a zero exponent (e.g. 0 equals 0.0). The current IEEE754r specification dictates that the quantum shall go to the largest supported by the data type, e.g. _Decimal32 0.0E191; _Decimal64 0.0E767, _Decimal128 0.0E12287. Observation of the advance toolchain results will show that we don't follow any particular convention. This may change in the future. For the following examples notice the DPD encoding on both power6[x] and non-power6: _Decimal32 d32 = 0.0DF; _Decimal64 d64 = 0.0DD; _Decimal128 d128 = 0.0DL; (_Decimal128)0.0DF: [+0,000,000E+0] (_Decimal128)0.0DD: [+0,000,000,000,000,000E+0] (_Decimal128)0.0DL: [+0,000,000,000,000,000,000,000,000,000,000,000E+0] On power6[x] notice the representation of zero after an [int|long|long long] conversion to _Decimal[32|64|128] respectively: (_Decimal32)0DF = (int)0: [+0,000,000E+0] (_Decimal32)0.0DF = (float)0.000000: [+0,000,000E+0] (_Decimal64)0DD = (long)0: [+0,000,000,000,000,000E+0] (_Decimal64)0.0DD = (double)0.000000: [+0,000,000,000,000,000E+0] (_Decimal128)0DL = (long long)0: [+0,000,000,000,000,000,000,000,000,000,000,000E+0] (_Decimal128)0.0DL = (long double)0.000000: [+0,000,000,000,000,000,000,000,000,000,000,000E+0] Notice the difference with soft-dfp: (_Decimal32)0.0DF = (int)0: [+0,000,000E-1] (_Decimal32)0.0DF = (float)0.000000: [+0,000,000E+0] (_Decimal64)0.0DD = (long)0: [+0,000,000,000,000,000E-1] (_Decimal64)0.0DD = (double)0.000000: [+0,000,000,000,000,000E+0] (_Decimal128)0.0DL = (long long)0: [+0,000,000,000,000,000,000,000,000,000,000,000E-1] (_Decimal128)0.0DL = (long double)0.000000: [+0,000,000,000,000,000,000,000,000,000,000,000E+0] Namely the negative sign of the exponent with soft-dfp for int to _Decimal conversions. libdfp-1.0.17/TODO000066400000000000000000000031061504475242000135330ustar00rootroot00000000000000Add tests/test-getexp to determine whether the hardware dfp version stores the proper sign of the exponent with the stfiwx call. Make get_digits calls use getexp_d* rather than computing the exponent directly. Upgrade libdecnumber version. Upgrade autoconf version Add @docdir@ to Makefile (supported in autoconf 2.6.0). test make install headers with dfp/decimal/ headers. Add testcase to verify soft-dfp TLS version of rounding mode functions. Add printf_dfp test which change the rounding mode. Add --with-cross feature to prevent the make check suite from being executed on the build machine. Add --export-test feature to export the test-suite into stand-alone static test cases. Finish make check test suite. Clear up symbols and hidden symbol usage and export and make sure we aren't using the PLT from within libdfp. Optimize the math routines for hardware dfp support. Implement dpd backend for x86 and x86_64. Prototype versioned symbols support. Implement libbid backend for x86_64. Write Man Page Write User's guide in docbook format, .i.e. info file. [DONE] Configure runtime test for decimal floating point support in compiler. [DONE] Configure test for glibc 2.10 headers. [DONE] Configure runtime test for glibc 2.10 based on register_printf_type() function.. [DONE] Write User's guide [DONE] If system glibc is 2.10 then make check shouldn't need all the GLIBC build scaffolding for executing and debugging tests. [DONE] Clear up make clean [DONE] Work on make distclean. [DONE] Clear up dependency issue so that libdfp.so.1 is rebuilt when a .c file changes. libdfp-1.0.17/Versions000066400000000000000000000013341504475242000145770ustar00rootroot00000000000000libdfp { LIBDFP_1.0.16 { strfromd32; strfromd64; strfromd128; } LIBDFP_1.0.0 { decoded32; decoded64; decoded128; # These are the old callbacks. They don't work anymore. # fmt_d32; # fmt_d64; # fmt_d128; fe_dec_getround; fe_dec_setround; register_printf_dfp; printf_dfp; strtod32; strtod64; strtod128; wcstod32; wcstod64; wcstod128; } LIBDFP_PRIVATE { __decoded32; __decoded64; __decoded128; __fmt_d32; __fmt_d64; __fmt_d128; __host_to_ieee_32; __ieee_32_to_host; __host_to_ieee_64; __ieee_64_to_host; __host_to_ieee_128; __ieee_128_to_host; __fe_dec_getround; __fe_dec_setround; } } libdfp-1.0.17/Versions.def000066400000000000000000000003431504475242000153330ustar00rootroot00000000000000libdfp { LIBDFP_1.0.0 LIBDFP_1.0.2 LIBDFP_1.0.3 LIBDFP_1.0.4 LIBDFP_1.0.5 LIBDFP_1.0.6 LIBDFP_1.0.7 LIBDFP_1.0.8 LIBDFP_1.0.9 LIBDFP_1.0.10 LIBDFP_1.0.13 LIBDFP_1.0.15 LIBDFP_1.0.16 LIBDFP_PRIVATE } libdfp-1.0.17/base-math/000077500000000000000000000000001504475242000147045ustar00rootroot00000000000000libdfp-1.0.17/base-math/Makefile000066400000000000000000000020351504475242000163440ustar00rootroot00000000000000# Copyright (C) 2015 Free Software Foundation, Inc. # # This file is part of the Decimal Floating Point C Library. # # The Decimal Floating Point C Library is free software; you can # redistribute it and/or modify it under the terms of the GNU Lesser # General Public License version 2.1. # # The Decimal Floating Point C 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 version 2.1 for more details. # # You should have received a copy of the GNU Lesser General Public # License version 2.1 along with the Decimal Floating Point C Library; # if not, write to the Free Software Foundation, Inc., 51 Franklin # Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Please see libdfp/COPYING.txt for more information. */ # These are compat implementations for unfortunate users of binaries # which cannot be rebuilt to support native DFP # See sysdeps/dpd/Makefile for inclusion. libdfp-1.0.17/base-math/README000066400000000000000000000004411504475242000155630ustar00rootroot00000000000000These functions match what is implemented as part of libgcc for DFP. They are intended to be compiled with DFP hardware support in order to override the software DFP libgcc.a symbols. This set doesn't provide overrides for binary->decimal and decimal->binary trunc and extend functions. libdfp-1.0.17/base-math/Versions000066400000000000000000000003431504475242000164370ustar00rootroot00000000000000# Since the symbols in base-math are prefixed with either __dpd_ or __bid_ the # Versions files in sysdeps/dpd/ and sysdeps/bid are used for the functions # defined in this directory. So don't define any symbols in this file. libdfp-1.0.17/base-math/adddd3.c000066400000000000000000000022321504475242000161720ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(adddd3) (_Decimal64 x, _Decimal64 y) { return x + y; } hidden_def (__BACKEND_(adddd3)) libdfp-1.0.17/base-math/addsd3.c000066400000000000000000000022141504475242000162110ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(addsd3) (_Decimal32 x, _Decimal32 y) { return x + y; } hidden_def (__BACKEND_(addsd3)) libdfp-1.0.17/base-math/addtd3.c000066400000000000000000000022351504475242000162150ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(addtd3) (_Decimal128 x, _Decimal128 y) { return x + y; } hidden_def (__BACKEND_(addtd3)) libdfp-1.0.17/base-math/divdd3.c000066400000000000000000000022321504475242000162240ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(divdd3) (_Decimal64 x, _Decimal64 y) { return x / y; } hidden_def (__BACKEND_(divdd3)) libdfp-1.0.17/base-math/divsd3.c000066400000000000000000000022141504475242000162430ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(divsd3) (_Decimal32 x, _Decimal32 y) { return x / y; } hidden_def (__BACKEND_(divsd3)) libdfp-1.0.17/base-math/divtd3.c000066400000000000000000000022351504475242000162470ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(divtd3) (_Decimal128 x, _Decimal128 y) { return x / y; } hidden_def (__BACKEND_(divtd3)) libdfp-1.0.17/base-math/eqdd2.c000066400000000000000000000022351504475242000160510ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(eqdd2) (_Decimal64 x, _Decimal64 y) { return x == y ? 0 : 1; } hidden_def (__BACKEND_(eqdd2)) libdfp-1.0.17/base-math/eqsd2.c000066400000000000000000000022171504475242000160700ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(eqsd2) (_Decimal32 x, _Decimal32 y) { return x == y ? 0 : 1; } hidden_def (__BACKEND_(eqsd2)) libdfp-1.0.17/base-math/eqtd2.c000066400000000000000000000022371504475242000160730ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(eqtd2) (_Decimal128 x, _Decimal128 y) { return x == y ? 0 : 1; } hidden_def (__BACKEND_(eqtd2)) libdfp-1.0.17/base-math/extendddtd2.c000066400000000000000000000022401504475242000172570ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(extendddtd2) (_Decimal64 x) { return (_Decimal128)x; } hidden_def (__BACKEND_(extendddtd2)) libdfp-1.0.17/base-math/extendddtf.c000066400000000000000000000021061504475242000172000ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary long double (128) Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 64 #define DEST 128 #define NAME extend #include "decimal64.h" #include "extendsdtf.c" libdfp-1.0.17/base-math/extenddfdd.c000066400000000000000000000040161504475242000171620ustar00rootroot00000000000000/* Handle conversion from binary double (64) to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 64 #define DEST 64 #define NAME extend #include "dfpacc.h" #include "convert.h" #include /* To pick up __DBL_MANT_DIG__ */ CONVERT_WRAPPER( // truncdfsd, extenddfdd, extenddftd _Decimal128 temp; /* Needs to be big enough so that temp = mant doesn't round. */ double a_norm; long long mant; int exp, sexp; a_norm = FREXPDF (a, &exp); mant = a_norm * 9007199254740992.0; /* 53 bits of mantissa. */ //sexp = exp - 53; /* Exponent adjusted for mantissa. */ sexp = exp - __DBL_MANT_DIG__; /* Exponent adjusted for mantissa. */ temp = mant; /* DI -> TD. */ if (sexp > 0) temp *= DECPOWOF2[sexp]; else if (sexp < 0) temp /= DECPOWOF2[-sexp]; result = (DEST_TYPE)temp; /* Cast to the resultant type. */ /* Clear inexact exception raised by DFP arithmetic. */ if (DFP_EXCEPTIONS_ENABLED && DFP_TEST_EXCEPTIONS (FE_OVERFLOW|FE_UNDERFLOW) == 0) DFP_CLEAR_EXCEPTIONS (FE_INEXACT); ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/extenddftd.c000066400000000000000000000040171504475242000172030ustar00rootroot00000000000000/* Handle conversion from binary double (64) to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 64 #define DEST 128 #define NAME extend #include "dfpacc.h" #include "convert.h" #include /* To pick up __DBL_MANT_DIG__ */ CONVERT_WRAPPER( // truncdfsd, extenddfdd, extenddftd _Decimal128 temp; /* Needs to be big enough so that temp = mant doesn't round. */ double a_norm; long long mant; int exp, sexp; a_norm = FREXPDF (a, &exp); mant = a_norm * 9007199254740992.0; /* 53 bits of mantissa. */ //sexp = exp - 53; /* Exponent adjusted for mantissa. */ sexp = exp - __DBL_MANT_DIG__; /* Exponent adjusted for mantissa. */ temp = mant; /* DI -> TD. */ if (sexp > 0) temp *= DECPOWOF2[sexp]; else if (sexp < 0) temp /= DECPOWOF2[-sexp]; result = (DEST_TYPE)temp; /* Cast to the resultant type. */ /* Clear inexact exception raised by DFP arithmetic. */ if (DFP_EXCEPTIONS_ENABLED && DFP_TEST_EXCEPTIONS (FE_OVERFLOW|FE_UNDERFLOW) == 0) DFP_CLEAR_EXCEPTIONS (FE_INEXACT); ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/extendsddd2.c000066400000000000000000000022201504475242000172540ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(extendsddd2) (_Decimal32 x) { return (_Decimal64)x; } hidden_def (__BACKEND_(extendsddd2)) libdfp-1.0.17/base-math/extendsddf.c000066400000000000000000000031411504475242000171770ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary double (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 32 #define DEST 64 #define NAME extend #include "dfpacc.h" #include "convert.h" #include "convert_helpers.h" CONVERT_WRAPPER( // truncsdsf, extendsddf double temp; SRC_TYPE a_norm; long long mant; int exp, sexp; a_norm = getmantandexpd32 (a, &exp, 7, 1e7DF); mant = a_norm; /* 7 digits of mantissa. */ sexp = exp - 7; /* Exponent adjusted for mantissa. */ temp = mant; if (sexp > 0) temp *= BINPOWOF10[sexp]; else if (sexp < 0) temp /= BINPOWOF10[-sexp]; result = temp; ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/extendsdtd2.c000066400000000000000000000022221504475242000172760ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(extendsdtd2) (_Decimal32 x) { return (_Decimal128)x; } hidden_def (__BACKEND_(extendsdtd2)) libdfp-1.0.17/base-math/extendsdtf.c000066400000000000000000000033321504475242000172210ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary long double (128) Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef DECIMAL_TO_BINARY # define DECIMAL_TO_BINARY # define SRC 32 # define DEST 128 # define NAME extend # include "decimal32.h" #endif #include "dfpacc.h" #include "convert.h" #include #define CONTEXT_INIT PASTE(DEC_INIT_DECIMAL,DEST) #define BUFMAX 128 DEST_TYPE PREFIXED_FUNCTION_NAME (SRC_TYPE a) { /* decNumber's decimal* types have the same format as C's _Decimal* types, but they have different calling conventions. */ char buf[BUFMAX]; decNumber n; decContext context; decContextDefault (&context, CONTEXT_INIT); PASTE(decimal,PASTE(SRC,ToNumber))((IEEE_SRC_TYPE*)&a, &n); decNumberToString (&n, buf); /* Use a C library function to convert to the integral type. */ return strtold (buf, NULL); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/extendsfdd.c000066400000000000000000000022141504475242000171770ustar00rootroot00000000000000/* Handle conversion from binary float (32) to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 32 #define DEST 64 #define NAME extend #include "extendsfsd.c" libdfp-1.0.17/base-math/extendsfsd.c000066400000000000000000000037641504475242000172310ustar00rootroot00000000000000/* Handle conversion from binary float (32) to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef BINARY_TO_DECIMAL #define BINARY_TO_DECIMAL #define SRC 32 #define DEST 32 #define NAME extend #endif #include "dfpacc.h" #include "convert.h" #include /* To pick up __FLT_MANT_DIG__ */ #if DEST==32 #define TEMP_TYPE _Decimal64 #else #define TEMP_TYPE _Decimal128 #endif CONVERT_WRAPPER( // extendsfsd, extendsfdd, extendsftd TEMP_TYPE temp; float a_norm; long long mant; int exp, sexp; a_norm = FREXPSF (a, &exp); mant = a_norm * 16777216.0; /* 24 bits of mantissa. */ //sexp = exp - 24; /* Exponent adjusted for mantissa. */ sexp = exp - __FLT_MANT_DIG__; /* Exponent adjusted for mantissa. */ temp = mant; if (sexp > 0) result = temp * DECPOWOF2[sexp]; else if (sexp < 0) result = temp / DECPOWOF2[-sexp]; /* Clear inexact exception raised by DFP arithmetic. */ if (DFP_EXCEPTIONS_ENABLED && DFP_TEST_EXCEPTIONS (FE_OVERFLOW|FE_UNDERFLOW) == 0) DFP_CLEAR_EXCEPTIONS (FE_INEXACT); ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/extendsftd.c000066400000000000000000000022161504475242000172210ustar00rootroot00000000000000/* Handle conversion from binary float (32) to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 32 #define DEST 128 #define NAME extend #include "extendsfsd.c" libdfp-1.0.17/base-math/extendtftd.c000066400000000000000000000021171504475242000172220ustar00rootroot00000000000000/* Handle conversion from binary long double (dual 64bit) to Decimal128 Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 128 #define DEST 128 #define NAME extend #include "decimal128.h" #include "trunctfsd.c" libdfp-1.0.17/base-math/fixdddi.c000066400000000000000000000022241504475242000164630ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include long long __BACKEND_(fixdddi) (_Decimal64 x) { return (long long)x; } hidden_def (__BACKEND_(fixdddi)) libdfp-1.0.17/base-math/fixddsi.c000066400000000000000000000022101504475242000164750ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include int __BACKEND_(fixddsi) (_Decimal64 x) { return (int)x; } hidden_def (__BACKEND_(fixddsi)) libdfp-1.0.17/base-math/fixddti.c000066400000000000000000000021531504475242000165040ustar00rootroot00000000000000/* fixddti implementation. _Decimal64 -> INT128. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define SRC_SIZE 64 #define FUNC fixddti #define SHIFT_EXP 16 #define DSUFF DD #define SIGNED 1 #include libdfp-1.0.17/base-math/fixsddi.c000066400000000000000000000022101504475242000164750ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include long long __BACKEND_(fixsddi) (_Decimal32 x) { return (long long)(x); } hidden_def (__BACKEND_(fixsddi)) libdfp-1.0.17/base-math/fixsdsi.c000066400000000000000000000021741504475242000165250ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include int __BACKEND_(fixsdsi) (_Decimal32 x) { return (int)(x); } hidden_def (__BACKEND_(fixsdsi)) libdfp-1.0.17/base-math/fixsdti.c000066400000000000000000000073351504475242000165320ustar00rootroot00000000000000/* Common fix*ti and fixsdti implementation. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef SRC_SIZE # define SRC_SIZE 32 # define FUNC fixsdti # define SHIFT_EXP 7 # define DSUFF DF # define SIGNED 1 #endif #define _DECIMAL_SIZE SRC_SIZE #include #include #include #include #include #include "convert_helpers.h" #if SIGNED == 1 # if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ # define MAX_RET_VAL {.di = {0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL}} # define MIN_RET_VAL {.di = {0x8000000000000000LL, 0LL}} # else # define MAX_RET_VAL {.di = {0xFFFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL}} # define MIN_RET_VAL {.di = { 0LL, 0x8000000000000000LL}} # endif # if SRC_SIZE == 32 # define MIN_VAL (-170141100000000000000000000000000000000.DF) # define MAX_VAL ( 170141100000000000000000000000000000000.DF) # elif SRC_SIZE == 64 # define MIN_VAL (-170141183460469200000000000000000000000.DD) # define MAX_VAL ( 170141183460469200000000000000000000000.DD) # else # define MIN_VAL (-170141183460469231731687303715884100000.DL) # define MAX_VAL ( 170141183460469231731687303715884100000.DL) # endif # define RET_TYPE INT128 # define QUICK_CONVERT(_x) ({ long long int _a_di = _x; _a_di;}) #else # define MAX_RET_VAL {.di = {0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL}} # define MIN_RET_VAL {.di = {0LL, 0LL}} # define MIN_VAL PASTE(0., DSUFF) # if SRC_SIZE == 32 # define MAX_VAL (340282300000000000000000000000000000000.DF) # elif SRC_SIZE == 64 # define MAX_VAL (340282366920938400000000000000000000000.DD) # else # define MAX_VAL (340282366920938463463374607431768200000.DL) # endif # define RET_TYPE UINT128 # define QUICK_CONVERT(_x) ({ unsigned long long int _a_di = _x; _a_di;}) #endif #define TRUNC(_x) (PASTE(fast_truncd, SRC_SIZE)(_x)) #define CLASSIFY(_x) (PASTE(__fpclassifyd,SRC_SIZE)(_x)) #define SIGNBIT(_x) (PASTE(__signbitd,SRC_SIZE)(_x)) #define GETMANT(_x,_y) (PASTE(getmantd,SRC_SIZE)(_x,_y)) extern const INT128 exp10_ti[39]; RET_TYPE __BACKEND_(FUNC) (DEC_TYPE a) { union ret_type { RET_TYPE ti; uint64_t di[2]; }; union ret_type min = MIN_RET_VAL; union ret_type max = MAX_RET_VAL; switch (CLASSIFY (a)) { case FP_ZERO: return 0; case FP_INFINITE: DFP_EXCEPT (FE_INVALID); return SIGNBIT(a) ? min.ti : max.ti; case FP_NAN: DFP_EXCEPT (FE_INVALID); return min.ti; } if(a < MIN_VAL || a > MAX_VAL) { DFP_EXCEPT (FE_INVALID); return SIGNBIT(a) ? min.ti : max.ti; } long e; DEC_TYPE a_int = TRUNC (a); RET_TYPE mant = GETMANT (a_int, &e); if (e > 0) return mant * (RET_TYPE) exp10_ti[e]; else if (e < 0) return mant / (RET_TYPE) exp10_ti[-e]; else return mant; } hidden_def (__BACKEND_(FUNC)) libdfp-1.0.17/base-math/fixtddi.c000066400000000000000000000022251504475242000165040ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include long long __BACKEND_(fixtddi) (_Decimal128 x) { return (long long)x; } hidden_def (__BACKEND_(fixtddi)) libdfp-1.0.17/base-math/fixtdsi.c000066400000000000000000000022111504475242000165160ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include int __BACKEND_(fixtdsi) (_Decimal128 x) { return (int)x; } hidden_def (__BACKEND_(fixtdsi)) libdfp-1.0.17/base-math/fixtdti.c000066400000000000000000000021601504475242000165220ustar00rootroot00000000000000/* DPD encoded Decimal128 to uint128 conversion routine. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define SRC_SIZE 128 #define DSUFF DL #define SIGNED 1 #define FUNC fixtdti #define RTYPE INT128 #include libdfp-1.0.17/base-math/fixunsdddi.c000066400000000000000000000022541504475242000172140ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include unsigned long long __BACKEND_(fixunsdddi) (_Decimal64 x) { return (unsigned long long)x; } hidden_def (__BACKEND_(fixunsdddi)) libdfp-1.0.17/base-math/fixunsddsi.c000066400000000000000000000022401504475242000172260ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include unsigned int __BACKEND_(fixunsddsi) (_Decimal64 x) { return (unsigned int)x; } hidden_def (__BACKEND_(fixunsddsi)) libdfp-1.0.17/base-math/fixunsddti.c000066400000000000000000000021621504475242000172320ustar00rootroot00000000000000/* fixunsddti implementation. _Decimal64 -> UINT128. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define SRC_SIZE 64 #define FUNC fixunsddti #define SHIFT_EXP 16 #define DSUFF DD #define SIGNED 0 #include "fixsdti.c" libdfp-1.0.17/base-math/fixunssddi.c000066400000000000000000000022401504475242000172260ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include unsigned long long __BACKEND_(fixunssddi) (_Decimal32 x) { return (unsigned long long)(x); } hidden_def (__BACKEND_(fixunssddi)) libdfp-1.0.17/base-math/fixunssdsi.c000066400000000000000000000022241504475242000172470ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include unsigned int __BACKEND_(fixunssdsi) (_Decimal32 x) { return (unsigned int)(x); } hidden_def (__BACKEND_(fixunssdsi)) libdfp-1.0.17/base-math/fixunssdti.c000066400000000000000000000021601504475242000172470ustar00rootroot00000000000000/* fixunssdti implementation. _Decimal32 -> INT128. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define SRC_SIZE 32 #define FUNC fixunssdti #define SHIFT_EXP 7 #define DSUFF DF #define SIGNED 0 #include "fixsdti.c" libdfp-1.0.17/base-math/fixunstddi.c000066400000000000000000000022551504475242000172350ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include unsigned long long __BACKEND_(fixunstddi) (_Decimal128 x) { return (unsigned long long)x; } hidden_def (__BACKEND_(fixunstddi)) libdfp-1.0.17/base-math/fixunstdsi.c000066400000000000000000000022411504475242000172470ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include unsigned int __BACKEND_(fixunstdsi) (_Decimal128 x) { return (unsigned int)x; } hidden_def (__BACKEND_(fixunstdsi)) libdfp-1.0.17/base-math/fixunstdti.c000066400000000000000000000021641504475242000172540ustar00rootroot00000000000000/* DPD encoded Decimal128 to uint128 conversion routine. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define SRC_SIZE 128 #define DSUFF DL #define SIGNED 0 #define FUNC fixunstdti #define RTYPE UINT128 #include "fixsdti.c" libdfp-1.0.17/base-math/floatdidd.c000066400000000000000000000022311504475242000170000ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(floatdidd) (long long x) { return (_Decimal64)x; } hidden_def (__BACKEND_(floatdidd)) libdfp-1.0.17/base-math/floatdisd.c000066400000000000000000000022131504475242000170170ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(floatdisd) (long long x) { return (_Decimal32)x; } hidden_def (__BACKEND_(floatdisd)) libdfp-1.0.17/base-math/floatditd.c000066400000000000000000000022331504475242000170220ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(floatditd) (long long x) { return (_Decimal128)x; } hidden_def (__BACKEND_(floatditd)) libdfp-1.0.17/base-math/floatsidd.c000066400000000000000000000022231504475242000170200ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(floatsidd) (int x) { return (_Decimal64)x; } hidden_def (__BACKEND_(floatsidd)) libdfp-1.0.17/base-math/floatsisd.c000066400000000000000000000022051504475242000170370ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(floatsisd) (int x) { return (_Decimal32)x; } hidden_def (__BACKEND_(floatsisd)) libdfp-1.0.17/base-math/floatsitd.c000066400000000000000000000022251504475242000170420ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(floatsitd) (int x) { return (_Decimal128)x; } hidden_def (__BACKEND_(floatsitd)) libdfp-1.0.17/base-math/floattidd.c000066400000000000000000000022471504475242000170270ustar00rootroot00000000000000/* Convert a signed 128-bit binary integer into nearest representable IEEE754R 64-bit Densely Packed Decimal Floating-point (DFP). Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Contributed by Paul E. Murphy (murphyp@linux.vnet.ibm.com) The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define FUNC floattidd #define RET_TYPE _Decimal64 #define RET_SIZE 64 #include libdfp-1.0.17/base-math/floattisd.c000066400000000000000000000022471504475242000170460ustar00rootroot00000000000000/* Convert a signed 128-bit binary integer into nearest representable IEEE754R 32-bit Densely Packed Decimal Floating-point (DFP). Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Contributed by Paul E. Murphy (murphyp@linux.vnet.ibm.com) The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define FUNC floattisd #define RET_TYPE _Decimal32 #define RET_SIZE 32 #include libdfp-1.0.17/base-math/floattitd.c000066400000000000000000000132431504475242000170450ustar00rootroot00000000000000/* Convert a signed 128-bit binary integer into nearest representable IEEE754R 128-bit Densely Packed Decimal Floating-point (DFP). Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Contributed by Steven Munroe (munroesj@linux.vnet.ibm.com) The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include "symbol-hacks.h" #include "convert_helpers.h" /* * Convert a signed 128-bit binary integer into nearest representable * IEEE754R 128-bit Densely Packed Decimal Floating-point (DFP). * * Care must be taken, as the signed INT128 type has a maximum * value of ~1.701411835e+38 (or 39 decimal digits), while the * _Decimal128 type carries only 34 significant digits, so inexact * (truncated or rounded) results are possible. * * Also the PowerISA-2.05 and later provides hardware instructions to * convert between signed 64-bit integer values to and from 64-/128-bit * DFP, but does not provide for direct conversion of 128-bit * integers. So efficiency dictates that the conversion be broken into * chunks, that the hardware conversion can handle, then can be * combined into the final decimal result. * * However conversion and scaling of arbitrary binary values to decimal * can create large decimal ranges that can result in inexact * intermediate results after conversion or rounding during the * combine phase. * * We can avoid this by factoring (divide and modulo) the binary value * into power of 10 chunks that can be converted exactly to decimal * and combined without rounding in the decimal form. _Decimal128 * has 34-digits of significance and half of that is 17-digits. * 17-digits fit nicely with in signed 64-bit integer for conversion). * So we choose 10^17 as the chunk size for factoring and conversion. * * First we check if input value is less then 2^63, which we can handle * directly as a long to _Decimal conversion. Otherwise * the algorithm factors the 128-bit binary values into three chunks; * low 17-digits, middle 17-digits, and highest 5-digits. The middle * and low factors can be converted and combined for an exact result * of up to 34-digits via digit shift and add. Values greater than * 34-digits may become inexact after the final combine stage, while * preserving the most significant 34-digits in the result. */ /* These strictly control signed/unsigned behavior. */ #ifndef UNSIGNED # define INPUT_TYPE64 long long # define INPUT_TYPE INT128 #else # define INPUT_TYPE64 unsigned long long # define INPUT_TYPE UINT128 #endif /* Generic macros to overload for other conversions. */ #ifndef FUNC # define FUNC floattitd # define RET_TYPE _Decimal128 # define RET_SIZE 128 #endif #define FMULTRUNC(_x) (__fmultruncd ## RET_SIZE)(_x) RET_TYPE __BACKEND_ (FUNC) (INPUT_TYPE a) { #ifndef UNSIGNED INT128 zero = (INT128) 0L; int negative = 0; #endif UINT128 ten_17 = (UINT128) 100000000000000000UL; UINT128 two_63 = (UINT128) 0x8000000000000000UL; UINT128 u, x, y, z; unsigned long long t_low, t_mid, t_high; RET_TYPE result = 0.DL; _Decimal128 d_low, d_mid, d_high __attribute__((unused)); /* take the absolute value and record the sign. */ #ifndef UNSIGNED if (a < zero) { /* This is necessary because __builtin_abs() does not handle * the INT128 and we need to record the sign bit separately. * Can't just use copysign later because we are dealing with * different register sets and copysign instructions only * within a specific register set. */ u = (UINT128) -a; negative = 1; } else #endif { u = (UINT128) a; } if (u < two_63) { /* If abs(a) is less than 63-bits we can convert the signed * value directly. */ result = (INPUT_TYPE64) a; } else { /* Else convert the absolute (unsigned) value to Decimal and * correct the sign later if needed. */ y = u / ten_17; z = u % ten_17; t_low = (unsigned long long) z; if (y < ten_17) { t_mid = (unsigned long long) y; d_mid = t_mid; d_low = t_low; result = (d_mid * 100000000000000000.DL) + d_low; } else { x = y / ten_17; z = y % ten_17; t_mid = (unsigned long long) z; t_high = (unsigned long long) x; d_low = t_low; d_mid = t_mid; d_high = t_high; /* Call out to internal helpers to properly handle * conversion and trunctation into a smaller format. */ #if RET_SIZE == 64 result = combine_and_truncd64(d_high,d_mid,d_low); #elif RET_SIZE == 32 result = combine_and_truncd32(d_high,d_mid,d_low); #else result = (d_high * 100000000000000000.DL) + d_mid; result = (result * 100000000000000000.DL) + d_low; #endif } #ifndef UNSIGNED /* Converted the absolute 127-bit value of "a" to Decimal128. * Now correct the decimal sign if the original value * was negative. */ if (negative) result = -result; #endif } return (result); } hidden_def (__BACKEND_ (FUNC)) libdfp-1.0.17/base-math/floatunsdidd.c000066400000000000000000000022501504475242000175270ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(floatunsdidd) (unsigned long long x) { return (_Decimal64)x; } hidden_def (__BACKEND_(floatunsdidd)) libdfp-1.0.17/base-math/floatunsdisd.c000066400000000000000000000022321504475242000175460ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(floatunsdisd) (unsigned long long x) { return (_Decimal32)x; } hidden_def (__BACKEND_(floatunsdisd)) libdfp-1.0.17/base-math/floatunsditd.c000066400000000000000000000022521504475242000175510ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(floatunsditd) (unsigned long long x) { return (_Decimal128)x; } hidden_def (__BACKEND_(floatunsditd)) libdfp-1.0.17/base-math/floatunssidd.c000066400000000000000000000022421504475242000175470ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(floatunssidd) (unsigned int x) { return (_Decimal64)x; } hidden_def (__BACKEND_(floatunssidd)) libdfp-1.0.17/base-math/floatunssisd.c000066400000000000000000000022241504475242000175660ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(floatunssisd) (unsigned int x) { return (_Decimal32)x; } hidden_def (__BACKEND_(floatunssisd)) libdfp-1.0.17/base-math/floatunssitd.c000066400000000000000000000022441504475242000175710ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(floatunssitd) (unsigned int x) { return (_Decimal128)x; } hidden_def (__BACKEND_(floatunssitd)) libdfp-1.0.17/base-math/floatunstidd.c000066400000000000000000000022761504475242000175570ustar00rootroot00000000000000/* Convert an unsigned 128-bit binary integer into nearest representable IEEE754R 64-bit Densely Packed Decimal Floating-point (DFP). Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Contributed by Paul E. Murphy (murphyp@linux.vnet.ibm.com) The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define FUNC floatunstidd #define RET_TYPE _Decimal64 #define RET_SIZE 64 #define UNSIGNED #include "floattitd.c" libdfp-1.0.17/base-math/floatunstisd.c000066400000000000000000000022761504475242000175760ustar00rootroot00000000000000/* Convert an unsigned 128-bit binary integer into nearest representable IEEE754R 32-bit Densely Packed Decimal Floating-point (DFP). Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Contributed by Paul E. Murphy (murphyp@linux.vnet.ibm.com) The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define FUNC floatunstisd #define RET_TYPE _Decimal32 #define RET_SIZE 32 #define UNSIGNED #include "floattitd.c" libdfp-1.0.17/base-math/floatunstitd.c000066400000000000000000000023041504475242000175670ustar00rootroot00000000000000/* Convert a unsigned 128-bit binary integer into nearest representable IEEE754R 128-bit Densely Packed Decimal Floating-point (DFP). Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Contributed by Steven Munroe (munroesj@linux.vnet.ibm.com) The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define UNSIGNED 1 #define FUNC floatunstitd #define RET_TYPE _Decimal128 #define RET_SIZE 128 #include "floattitd.c" libdfp-1.0.17/base-math/gedd2.c000066400000000000000000000022361504475242000160400ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(gedd2) (_Decimal64 x, _Decimal64 y) { return x >= y ? 1 : -1; } hidden_def (__BACKEND_(gedd2)) libdfp-1.0.17/base-math/gesd2.c000066400000000000000000000022201504475242000160500ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(gesd2) (_Decimal32 x, _Decimal32 y) { return x >= y ? 1 : -1; } hidden_def (__BACKEND_(gesd2)) libdfp-1.0.17/base-math/getd2.c000066400000000000000000000022401504475242000160530ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(getd2) (_Decimal128 x, _Decimal128 y) { return x >= y ? 1 : -1; } hidden_def (__BACKEND_(getd2)) libdfp-1.0.17/base-math/gtdd2.c000066400000000000000000000022341504475242000160550ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(gtdd2) (_Decimal64 x, _Decimal64 y) { return x > y ? 1: -1; } hidden_def (__BACKEND_(gtdd2)) libdfp-1.0.17/base-math/gtsd2.c000066400000000000000000000022161504475242000160740ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(gtsd2) (_Decimal32 x, _Decimal32 y) { return x > y ? 1: -1; } hidden_def (__BACKEND_(gtsd2)) libdfp-1.0.17/base-math/gttd2.c000066400000000000000000000022371504475242000161000ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(gttd2) (_Decimal128 x, _Decimal128 y) { return x > y ? 1 : -1; } hidden_def (__BACKEND_(gttd2)) libdfp-1.0.17/base-math/ledd2.c000066400000000000000000000022351504475242000160440ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(ledd2) (_Decimal64 x, _Decimal64 y) { return x <= y ? 0 : 1; } hidden_def (__BACKEND_(ledd2)) libdfp-1.0.17/base-math/lesd2.c000066400000000000000000000022171504475242000160630ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(lesd2) (_Decimal32 x, _Decimal32 y) { return x <= y ? 0 : 1; } hidden_def (__BACKEND_(lesd2)) libdfp-1.0.17/base-math/letd2.c000066400000000000000000000022371504475242000160660ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(letd2) (_Decimal128 x, _Decimal128 y) { return x <= y ? 0 : 1; } hidden_def (__BACKEND_(letd2)) libdfp-1.0.17/base-math/ltdd2.c000066400000000000000000000022351504475242000160630ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(ltdd2) (_Decimal64 x, _Decimal64 y) { return x < y ? -1 : 1; } hidden_def (__BACKEND_(ltdd2)) libdfp-1.0.17/base-math/ltsd2.c000066400000000000000000000022171504475242000161020ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(ltsd2) (_Decimal32 x, _Decimal32 y) { return x < y ? -1 : 1; } hidden_def (__BACKEND_(ltsd2)) libdfp-1.0.17/base-math/lttd2.c000066400000000000000000000022371504475242000161050ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(lttd2) (_Decimal128 x, _Decimal128 y) { return x < y ? -1 : 1; } hidden_def (__BACKEND_(lttd2)) libdfp-1.0.17/base-math/muldd3.c000066400000000000000000000022321504475242000162370ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(muldd3) (_Decimal64 x, _Decimal64 y) { return x * y; } hidden_def (__BACKEND_(muldd3)) libdfp-1.0.17/base-math/mulsd3.c000066400000000000000000000022141504475242000162560ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(mulsd3) (_Decimal32 x, _Decimal32 y) { return x * y; } hidden_def (__BACKEND_(mulsd3)) libdfp-1.0.17/base-math/multd3.c000066400000000000000000000022351504475242000162620ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(multd3) (_Decimal128 x, _Decimal128 y) { return x * y; } hidden_def (__BACKEND_(multd3)) libdfp-1.0.17/base-math/nedd2.c000066400000000000000000000022251504475242000160450ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(nedd2) (_Decimal64 x, _Decimal64 y) { return x != y; } hidden_def (__BACKEND_(nedd2)) libdfp-1.0.17/base-math/nesd2.c000066400000000000000000000022071504475242000160640ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(nesd2) (_Decimal32 x, _Decimal32 y) { return x != y; } hidden_def (__BACKEND_(nesd2)) libdfp-1.0.17/base-math/netd2.c000066400000000000000000000022271504475242000160670ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include CMPINT __BACKEND_(netd2) (_Decimal128 x, _Decimal128 y) { return x != y; } hidden_def (__BACKEND_(netd2)) libdfp-1.0.17/base-math/subdd3.c000066400000000000000000000022321504475242000162330ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(subdd3) (_Decimal64 x, _Decimal64 y) { return x - y; } hidden_def (__BACKEND_(subdd3)) libdfp-1.0.17/base-math/subsd3.c000066400000000000000000000022141504475242000162520ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(subsd3) (_Decimal32 x, _Decimal32 y) { return x - y; } hidden_def (__BACKEND_(subsd3)) libdfp-1.0.17/base-math/subtd3.c000066400000000000000000000022351504475242000162560ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(subtd3) (_Decimal128 x, _Decimal128 y) { return x - y; } hidden_def (__BACKEND_(subtd3)) libdfp-1.0.17/base-math/truncdddf.c000066400000000000000000000067701504475242000170370ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary double (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 64 #define DEST 64 #define NAME trunc #include #include #include "dfpacc.h" #include "convert.h" #include "convert_helpers.h" CONVERT_WRAPPER( // truncdddf ldouble temp; SRC_TYPE a_norm; long long mant; int exp, sexp; a_norm = getmantandexpd64 (a, &exp, 16, 1e16DD); /* Avoid going beyond the bounds of the table, which would also mean an overflow or underflow. */ /* The +1 is necessary because of the one digit after the decimal point. */ if (exp > BINPOWOF10_LIMIT + 1) /* Obvious overflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_OVERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TOWARDZERO: return SIGNBIT(a) ? -DBL_MAX : DBL_MAX; case FE_DOWNWARD: return SIGNBIT(a) ? -INFINITY : DBL_MAX; case FE_UPWARD: return SIGNBIT(a) ? -DBL_MAX : INFINITY; case FE_TONEAREST: default: return SIGNBIT(a) ? -INFINITY : INFINITY; } } else if (exp <= -POWOF10_MIN_DENORM_DBL_EXP) /* Obvious underflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_UNDERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TONEAREST: mant = llabs ((long long)a_norm); if (exp < -POWOF10_MIN_DENORM_DBL_EXP || ((exp == -POWOF10_MIN_DENORM_DBL_EXP) && (mant >= (POWOF10_MIN_DENORM_DBL_MAN/2LL)))) return SIGNBIT(a) ? -0.0 : 0.0; else return SIGNBIT(a) ? -__DBL_DENORM_MIN__ : __DBL_DENORM_MIN__; case FE_DOWNWARD: return SIGNBIT(a) ? -__DBL_DENORM_MIN__ : 0.0; case FE_UPWARD: return SIGNBIT(a) ? -0.0 : __DBL_DENORM_MIN__; case FE_TOWARDZERO: default: return SIGNBIT(a) ? -0.0 : 0.0; } } mant = a_norm; /* 16 digits of mantissa. */ sexp = exp - 16; /* Exponent adjusted for mantissa. */ temp = TOIBM128(mant); /* mantissa as TF */ if (sexp > 0) result = temp * BINPOWOF10[sexp]; else if (sexp < 0) { /* Avoid going beyond the bounds of the exponent table for negative exponents. */ if (sexp < -BINPOWOF10_LIMIT) { temp /= BINPOWOF10[BINPOWOF10_LIMIT]; sexp += BINPOWOF10_LIMIT; } result = temp / BINPOWOF10[-sexp]; } else result = temp; ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/truncddsd2.c000066400000000000000000000022161504475242000171250ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(truncddsd2) (_Decimal64 x) { return (_Decimal32)x; } hidden_def (__BACKEND_(truncddsd2)) libdfp-1.0.17/base-math/truncddsf.c000066400000000000000000000062011504475242000170430ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary float (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 64 #define DEST 32 #define NAME trunc #include #include #include "dfpacc.h" #include "convert.h" #include "convert_helpers.h" CONVERT_WRAPPER( // truncddsf double temp; _Decimal64 a_norm; long long mant; int exp, sexp; a_norm = getmantandexpd64 (a, &exp, 16, 1e16DD); /* Check for values that would overflow the exponent table, which would be obvious overflow and underflow. */ if (exp > FLT_MAX_10_EXP) /* Obvious overflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_OVERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TOWARDZERO: return SIGNBIT(a) ? -FLT_MAX : FLT_MAX; case FE_DOWNWARD: return SIGNBIT(a) ? -INFINITY : FLT_MAX; case FE_UPWARD: return SIGNBIT(a) ? -FLT_MAX : INFINITY; case FE_TONEAREST: default: return SIGNBIT(a) ? -INFINITY : INFINITY; } } else if (exp < -POWOF10_MIN_DENORM_FLT_EXP) /* Obvious underflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_UNDERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TONEAREST: mant = llabs ((long long)a_norm); if (exp < -POWOF10_MIN_DENORM_FLT_EXP || ((exp == -POWOF10_MIN_DENORM_FLT_EXP) && (mant >= (POWOF10_MIN_DENORM_FLT_MAN/2LL)))) return SIGNBIT(a) ? -0.0 : 0.0; else return SIGNBIT(a) ? -__FLT_DENORM_MIN__ : __FLT_DENORM_MIN__; case FE_DOWNWARD: return SIGNBIT(a) ? -__FLT_DENORM_MIN__ : 0.0; case FE_UPWARD: return SIGNBIT(a) ? -0.0 : __FLT_DENORM_MIN__; case FE_TOWARDZERO: default: return SIGNBIT(a) ? -0.0 : 0.0; } } mant = a_norm; /* 16 digits of mantissa. */ sexp = exp - 16; /* Exponent adjusted for mantissa. */ temp = mant; if (sexp > 0) temp *= BINPOWOF10[sexp]; else if (sexp < 0) temp /= BINPOWOF10[-sexp]; result = temp; ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/truncdfsd.c000066400000000000000000000040551504475242000170500ustar00rootroot00000000000000/* Handle conversion from binary double (64) to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef BINARY_TO_DECIMAL #define BINARY_TO_DECIMAL #define SRC 64 #define DEST 32 #define NAME trunc #endif #include "dfpacc.h" #include "convert.h" #include /* To pick up __DBL_MANT_DIG__ */ CONVERT_WRAPPER( // truncdfsd, extenddfdd, extenddftd _Decimal128 temp; /* Needs to be big enough so that temp = mant doesn't round. */ double a_norm; long long mant; int exp, sexp; a_norm = FREXPDF (a, &exp); mant = a_norm * 9007199254740992.0; /* 53 bits of mantissa. */ //sexp = exp - 53; /* Exponent adjusted for mantissa. */ sexp = exp - __DBL_MANT_DIG__; /* Exponent adjusted for mantissa. */ temp = mant; /* DI -> TD. */ if (sexp > 0) temp *= DECPOWOF2[sexp]; else if (sexp < 0) temp /= DECPOWOF2[-sexp]; result = (DEST_TYPE)temp; /* Cast to the resultant type. */ /* Clear inexact exception raised by DFP arithmetic. */ if (DFP_EXCEPTIONS_ENABLED && DFP_TEST_EXCEPTIONS (FE_OVERFLOW|FE_UNDERFLOW) == 0) DFP_CLEAR_EXCEPTIONS (FE_INEXACT); ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/truncsdsf.c000066400000000000000000000032021504475242000170600ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary float (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef DECIMAL_TO_BINARY #define DECIMAL_TO_BINARY #define SRC 32 #define DEST 32 #define NAME trunc #endif #include "dfpacc.h" #include "convert.h" #include "convert_helpers.h" CONVERT_WRAPPER( // truncsdsf, extendsddf double temp; SRC_TYPE a_norm; long long mant; int exp, sexp; a_norm = getmantandexpd32 (a, &exp, 7, 1e7DF); mant = a_norm; /* 7 digits of mantissa. */ sexp = exp - 7; /* Exponent adjusted for mantissa. */ temp = mant; if (sexp > 0) temp *= BINPOWOF10[sexp]; else if (sexp < 0) temp /= BINPOWOF10[-sexp]; result = temp; ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/trunctddd2.c000066400000000000000000000022351504475242000171270ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __BACKEND_(trunctddd2) (_Decimal128 x) { return (_Decimal64)x; } hidden_def (__BACKEND_(trunctddd2)) libdfp-1.0.17/base-math/trunctddf.c000066400000000000000000000067351504475242000170600ustar00rootroot00000000000000/* Handle conversion from Decimal128 to binary double (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 128 #define DEST 64 #define NAME trunc #include #include #include "dfpacc.h" #include "convert.h" #include "convert_helpers.h" CONVERT_WRAPPER( // trunctddf ldouble temp; /* Need at least 16 decimal digits of accuracy. */ SRC_TYPE a_norm; long long mant; int exp, sexp; /* Get mantissa with 17 significant digits, and normalized exponent. */ a_norm = getmantandexpd128 (a, &exp, 17, 1e17DL); /* Avoid going beyond the bounds of the exponent table. */ if (exp > BINPOWOF10_LIMIT) /* Obvious overflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_OVERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TOWARDZERO: return SIGNBIT(a) ? -DBL_MAX : DBL_MAX; case FE_DOWNWARD: return SIGNBIT(a) ? -INFINITY : DBL_MAX; case FE_UPWARD: return SIGNBIT(a) ? -DBL_MAX : INFINITY; case FE_TONEAREST: default: return SIGNBIT(a) ? -INFINITY : INFINITY; } } else if (exp <= -POWOF10_MIN_DENORM_DBL_EXP) /* Obvious underflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_UNDERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TONEAREST: mant = llabs ((long long)a_norm); if (exp < -POWOF10_MIN_DENORM_DBL_EXP || ((exp == -POWOF10_MIN_DENORM_DBL_EXP) && (mant >= (POWOF10_MIN_DENORM_DBL_MAN/2LL)))) return SIGNBIT(a) ? -0.0 : 0.0; else return SIGNBIT(a) ? -__DBL_DENORM_MIN__ : __DBL_DENORM_MIN__; case FE_DOWNWARD: return SIGNBIT(a) ? -__DBL_DENORM_MIN__ : 0.0; case FE_UPWARD: return SIGNBIT(a) ? -0.0 : __DBL_DENORM_MIN__; case FE_TOWARDZERO: default: return SIGNBIT(a) ? -0.0 : 0.0; } } mant = a_norm; /* Convert 17 digit mantissa to DI integer. */ sexp = exp - 17; /* Exponent adjusted for mantissa. */ temp = TOIBM128(mant); if (sexp > 0) temp *= BINPOWOF10[sexp]; else if (sexp < 0) { /* Avoid going beyond the bounds of the exponent table for negative exponents. */ if (sexp < -BINPOWOF10_LIMIT) { temp /= BINPOWOF10[BINPOWOF10_LIMIT]; sexp += BINPOWOF10_LIMIT; } temp /= BINPOWOF10[-sexp]; } result = temp; ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/trunctdsd2.c000066400000000000000000000022441504475242000171460ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include _Decimal32 __BACKEND_(trunctdsd2) (_Decimal128 x) { return (_Decimal32)x; } hidden_def (__BACKEND_(trunctdsd2)) libdfp-1.0.17/base-math/trunctdsf.c000066400000000000000000000062001504475242000170620ustar00rootroot00000000000000/* Handle conversion from Decimal128 to binary float (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 128 #define DEST 32 #define NAME trunc #include #include #include "dfpacc.h" #include "convert.h" #include "convert_helpers.h" CONVERT_WRAPPER( // trunctdsf double temp; SRC_TYPE a_norm; long long mant; int exp, sexp; a_norm = getmantandexpd128 (a, &exp, 15, 1e15DL); /* Handle obvious overflow and underflow to avoid going beyond the bounds of the exponent table. */ if (exp > FLT_MAX_10_EXP) /* Obvious overflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_OVERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TOWARDZERO: return SIGNBIT(a) ? -FLT_MAX : FLT_MAX; case FE_DOWNWARD: return SIGNBIT(a) ? -INFINITY :FLT_MAX; case FE_UPWARD: return SIGNBIT(a) ? -FLT_MAX : INFINITY; case FE_TONEAREST: default: return SIGNBIT(a) ? -INFINITY : INFINITY; } } else if (exp <= -POWOF10_MIN_DENORM_FLT_EXP) /* Obvious underflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_UNDERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TONEAREST: mant = llabs ((long long)a_norm); if (exp < -POWOF10_MIN_DENORM_FLT_EXP || ((exp == -POWOF10_MIN_DENORM_FLT_EXP) && (mant >= (POWOF10_MIN_DENORM_FLT_MAN/2LL)))) return SIGNBIT(a) ? -0.0 : 0.0; else return SIGNBIT(a) ? -__FLT_DENORM_MIN__ : __FLT_DENORM_MIN__; case FE_DOWNWARD: return SIGNBIT(a) ? -__FLT_DENORM_MIN__ : 0.0; case FE_UPWARD: return SIGNBIT(a) ? -0.0 : __FLT_DENORM_MIN__; case FE_TOWARDZERO: default: return SIGNBIT(a) ? -0.0 : 0.0; } } mant = a_norm; /* 15 digits of mantissa. */ sexp = exp - 15; /* Exponent adjusted for mantissa. */ temp = mant; if (sexp > 0) temp *= BINPOWOF10[sexp]; else if (sexp < 0) temp /= BINPOWOF10[-sexp]; result = temp; ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/trunctdtf.c000066400000000000000000000021171504475242000170660ustar00rootroot00000000000000/* Handle conversion from Decimal128 to binary long double (dual 64bit) Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 128 #define DEST 128 #define NAME trunc #include "decimal128.h" #include "extendsdtf.c" libdfp-1.0.17/base-math/trunctfdd.c000066400000000000000000000021041504475242000170420ustar00rootroot00000000000000/* Handle conversion from binary long double (128) to Decimal64 Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 128 #define DEST 64 #define NAME trunc #include "decimal64.h" #include "trunctfsd.c" libdfp-1.0.17/base-math/trunctfsd.c000066400000000000000000000033461504475242000170720ustar00rootroot00000000000000/* Handle conversion from binary long double (128) to Decimal32 Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef BINARY_TO_DECIMAL # define BINARY_TO_DECIMAL # define SRC 128 # define DEST 32 # define NAME trunc # include "decimal32.h" #endif #include "dfpacc.h" #include "convert.h" #include #define CONTEXT_INIT PASTE(DEC_INIT_DECIMAL,DEST) #define BUFMAX 128 DEST_TYPE PREFIXED_FUNCTION_NAME (SRC_TYPE a) { DEST_TYPE f; char buf[BUFMAX]; decContext context; snprintf (buf, BUFMAX, "%.36Le", a); decContextDefault (&context, CONTEXT_INIT); PASTE(decimal,PASTE(DEST,FromString))((IEEE_DEST_TYPE*)&f, buf, &context); if (context.status != 0) { int dec_flags = context.status & (DEC_IEEE_854_Inexact|DEC_IEEE_854_Invalid_operation|DEC_IEEE_854_Overflow); DFP_HANDLE_EXCEPTIONS(DFP_IEEE_FLAGS(dec_flags)); } return f; } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/base-math/unorddd2.c000066400000000000000000000023411504475242000165710ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include CMPINT __BACKEND_(unorddd2) (_Decimal64 x, _Decimal64 y) { return __builtin_isunordered (x, y); } hidden_def (__BACKEND_(unorddd2)) libdfp-1.0.17/base-math/unordsd2.c000066400000000000000000000023231504475242000166100ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2009-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include CMPINT __BACKEND_(unordsd2) (_Decimal32 x, _Decimal32 y) { return __builtin_isunordered (x, y); } hidden_def (__BACKEND_(unordsd2)) libdfp-1.0.17/base-math/unordtd2.c000066400000000000000000000023431504475242000166130ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include CMPINT __BACKEND_(unordtd2) (_Decimal128 x, _Decimal128 y) { return __builtin_isunordered (x, y); } hidden_def (__BACKEND_(unordtd2)) libdfp-1.0.17/bootstrap000077500000000000000000000000531504475242000150040ustar00rootroot00000000000000#!/bin/sh set -e autoreconf -f -i autoscan libdfp-1.0.17/config.h.in000066400000000000000000000151201504475242000150650ustar00rootroot00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* "Define to the name of the assembler's directive for declaring a symbol global (default `.globl')." */ #undef ASM_GLOBAL_DIRECTIVE /* "Define to the prefix before `object' or `function' in the assembler's `.type' directive */ #undef ASM_TYPE_DIRECTIVE_PREFIX /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_FENV_H /* Define to 1 if you have the `fesetround' function. */ #undef HAVE_FESETROUND /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if mbrtowc and mbstate_t are properly declared. */ #undef HAVE_MBRTOWC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define to 1 if you have the header file. */ #undef HAVE_WCTYPE_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* The loader to use in direct DSO call */ #undef LIBDFP_RUNTIME_LOADER /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint64_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT64_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the type of a signed integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef int16_t /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef int64_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef uint64_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t libdfp-1.0.17/config/000077500000000000000000000000001504475242000143105ustar00rootroot00000000000000libdfp-1.0.17/config/README000066400000000000000000000002071504475242000151670ustar00rootroot00000000000000The contents of this directory are synced from the GCC source directory since libdecnumber comes from GCC and override.m4 is required. libdfp-1.0.17/config/dfp.m4000066400000000000000000000030421504475242000153220ustar00rootroot00000000000000dnl @synopsis GCC_AC_ENABLE_DECIMAL_FLOAT([target triplet]) dnl dnl Enable C extension for decimal float if target supports it. dnl dnl @author Andreas Krebbel AC_DEFUN([GCC_AC_ENABLE_DECIMAL_FLOAT], [ AC_ARG_ENABLE(decimal-float, [ --enable-decimal-float={no,yes,bid,dpd} enable decimal float extension to C. Selecting 'bid' or 'dpd' choses which decimal floating point format to use], [ case $enable_decimal_float in yes | no | bid | dpd) default_decimal_float=$enable_decimal_float ;; *) AC_MSG_ERROR(['$enable_decimal_float' is an invalid value for --enable-decimal-float. Valid choices are 'yes', 'bid', 'dpd', and 'no'.]) ;; esac ], [ case $1 in aarch64* | \ powerpc*-*-linux* | i?86*-*-linux* | x86_64*-*-linux* | s390*-*-linux* | \ i?86*-*-elfiamcu | i?86*-*-gnu* | x86_64*-*-gnu* | \ i?86*-*-mingw* | x86_64*-*-mingw* | \ i?86*-*-cygwin* | x86_64*-*-cygwin*) enable_decimal_float=yes ;; *) AC_MSG_WARN([decimal float is not supported for this target, ignored]) enable_decimal_float=no ;; esac ]) # x86's use BID format instead of DPD case x$enable_decimal_float in xyes) case $1 in aarch64* | i?86*-*-* | x86_64*-*-*) enable_decimal_float=bid ;; *) enable_decimal_float=dpd ;; esac default_decimal_float=$enable_decimal_float ;; xno) # ENABLE_DECIMAL_FLOAT is set to 0. But we have to have proper # dependency on libdecnumber. default_decimal_float=dpd ;; esac AC_SUBST(enable_decimal_float) ]) libdfp-1.0.17/config/override.m4000066400000000000000000000212101504475242000163650ustar00rootroot00000000000000dnl Fix Autoconf-2.59 bugs: by overriding broken internal dnl Autoconf macros with backports of the 2.60+ fix. dnl - AC_CONFIG_SUBDIRS whitespace mangling, dnl - more lenient precious variable checks dnl - better configure error message dnl - reliance on non-Posix m4wrap (M4 1.6 or newer implement FIFO) dnl dnl The override bits of this file should be a no-op for the newest dnl Autoconf version, which means they can be removed once the complete dnl tree has moved to a new enough Autoconf version. dnl dnl The _GCC_AUTOCONF_VERSION_TEST ensures that exactly the desired dnl Autoconf version is used. It should be kept for consistency. dnl m4_PACKAGE_VERSION is an undocumented Autoconf macro. dnl We use it because this fix is intended for 2.59 only. dnl A feature test for the broken AC_CONFIG_SUBDIRS instead dnl would be better but is tricky. dnl dnl Use ifdef/ifelse over m4_ifdef/m4_ifelse to be clean for 2.13. dnl Redefine AC_CONFIG_SUBDIRS so aclocal pulls in this file dnl when needed. ifdef([m4_PACKAGE_VERSION], [dnl AC_DEFUN a commonly used macro so this file is picked up. m4_copy_force([AC_PREREQ], [_AC_PREREQ]) AC_DEFUN([AC_PREREQ], [frob]) m4_copy_force([_AC_PREREQ], [AC_PREREQ]) dnl Ensure exactly this Autoconf version is used dnl m4_ifndef([_GCC_AUTOCONF_VERSION], dnl [m4_define([_GCC_AUTOCONF_VERSION], [2.59])]) dnl Test for the exact version when AC_INIT is expanded. dnl This allows to update the tree in steps (for testing) dnl by putting dnl m4_define([_GCC_AUTOCONF_VERSION], [X.Y]) dnl in configure.ac before AC_INIT, dnl without rewriting this file. dnl Or for updating the whole tree at once with the definition above. dnl AC_DEFUN([_GCC_AUTOCONF_VERSION_CHECK], dnl [m4_if(m4_defn([_GCC_AUTOCONF_VERSION]), dnl m4_defn([m4_PACKAGE_VERSION]), [], dnl [m4_fatal([Please use exactly Autoconf ]_GCC_AUTOCONF_VERSION[ instead of ]m4_defn([m4_PACKAGE_VERSION])[.])]) dnl ]) dnl m4_define([AC_INIT], m4_defn([AC_INIT])[ dnl _GCC_AUTOCONF_VERSION_CHECK dnl ]) m4_version_prereq([2.60],, [ dnl We use $ac_pwd in some of the overrides below; ensure its definition m4_divert_push([PARSE_ARGS])dnl ac_pwd=`pwd` m4_divert_pop([PARSE_ARGS])dnl ]) m4_version_prereq([2.60],, [ # _AC_OUTPUT_SUBDIRS # ------------------ # This is a subroutine of AC_OUTPUT, but it does not go into # config.status, rather, it is called after running config.status. m4_define([_AC_OUTPUT_SUBDIRS], [ # # CONFIG_SUBDIRS section, as fixed in confsubdir.m4. # if test "$no_recursion" != yes; then # Remove --cache-file and --srcdir arguments so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; *) case $ac_arg in *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="$ac_sub_configure_args '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="$ac_arg $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue AC_MSG_NOTICE([configuring in $ac_dir]) AS_MKDIR_P(["$ac_dir"]) _AC_SRCPATHS(["$ac_dir"]) cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else AC_MSG_WARN([no configuration information is in $ac_dir]) ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [[\\/]]* | ?:[[\\/]]* ) ac_sub_cache_file=$cache_file ;; *) # Relative path. ac_sub_cache_file=$ac_top_builddir$cache_file ;; esac AC_MSG_NOTICE([running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir]) # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || AC_MSG_ERROR([$ac_sub_configure failed for $ac_dir]) fi cd "$ac_popdir" done fi ])# _AC_OUTPUT_SUBDIRS ]) m4_version_prereq([2.63],, [ # _AC_ARG_VAR_VALIDATE # -------------------- # The code is the same as autoconf 2.59, but with a more lenient check # on precious variables and an output of pwd that have been added in # autoconf 2.62. m4_define([_AC_ARG_VAR_VALIDATE], [m4_divert_text([INIT_PREPARE], [# Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([[a-zA-Z_0-9]]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) AS_MESSAGE([error: `$ac_var' was set to `$ac_old_val' in the previous run], 2) ac_cache_corrupted=: ;; ,set) AS_MESSAGE([error: `$ac_var' was not set in the previous run], 2) ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then AS_MESSAGE([error: `$ac_var' has changed since the previous run:], 2) ac_cache_corrupted=: else AS_MESSAGE([warning: ignoring whitespace changes in `$ac_var' since the previous run:], 2) eval $ac_var=\$ac_old_val fi AS_MESSAGE([ former value: `$ac_old_val'], 2) AS_MESSAGE([ current value: `$ac_new_val'], 2) fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in dnl If you change this globbing pattern, test it on an old shell -- dnl it's sensitive. Putting any kind of quote in it causes syntax errors. [ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)] ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then AS_MESSAGE([error: in `$ac_pwd':], 2) AS_MESSAGE([error: changes in the environment can compromise the build], 2) AS_ERROR([run `make distclean' and/or `rm $cache_file' and start over]) fi])dnl ])# _AC_ARG_VAR_VALIDATE ]) m4_version_prereq([2.63],, [ # AC_MSG_FAILURE(ERROR, [EXIT-STATUS = 1]) # ---------------------------------------- # This is the same code as in 2.59 and 2.61, except it also outputs pwd. m4_define([AC_MSG_FAILURE], [{ AS_MESSAGE([error: in `$ac_pwd':], 2) AC_MSG_ERROR([$1 See `config.log' for more details.], [$2]); }]) ]) ]) m4_version_prereq([2.60],, [ dnl M4 1.6 and newer implement m4wrap using FIFO semantics, as required dnl by Posix; earlier versions used LIFO semantics. Unfortunately, dnl Autoconf versions before 2.60 require those LIFO semantics, so dnl make sure to give it to them. m4_define([m4_wrap], [m4_ifdef([_$0_text], [m4_define([_$0_text], [$1]m4_defn([_$0_text]))], [m4_define([_$0_text], [$1])m4_builtin([m4wrap], [m4_default(m4_defn([_$0_text])m4_undefine([_$0_text]))])])]) ]) libdfp-1.0.17/config/stdint.m4000066400000000000000000000363261504475242000160710ustar00rootroot00000000000000dnl @synopsis GCC_HEADER_STDINT [( HEADER-TO-GENERATE [, HEADERS-TO-CHECK])] dnl dnl the "ISO C9X: 7.18 Integer types " section requires the dnl existence of an include file that defines a set of dnl typedefs, especially uint8_t,int32_t,uintptr_t. dnl Many older installations will not provide this file, but some will dnl have the very same definitions in . In other enviroments dnl we can use the inet-types in which would define the dnl typedefs int8_t and u_int8_t respectivly. dnl dnl This macros will create a local "_stdint.h" or the headerfile given as dnl an argument. In many cases that file will pick the definition from a dnl "#include " or "#include " statement, while dnl in other environments it will provide the set of basic 'stdint's defined: dnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t dnl int_least32_t.. int_fast32_t.. intmax_t dnl which may or may not rely on the definitions of other files. dnl dnl Sometimes the stdint.h or inttypes.h headers conflict with sys/types.h, dnl so we test the headers together with sys/types.h and always include it dnl into the generated header (to match the tests with the generated file). dnl Hopefully this is not a big annoyance. dnl dnl If your installed header files require the stdint-types you will want to dnl create an installable file mylib-int.h that all your other installable dnl header may include. So, for a library package named "mylib", just use dnl GCC_HEADER_STDINT(mylib-int.h) dnl in configure.in and install that header file in Makefile.am along with dnl the other headers (mylib.h). The mylib-specific headers can simply dnl use "#include " to obtain the stdint-types. dnl dnl Remember, if the system already had a valid , the generated dnl file will include it directly. No need for fuzzy HAVE_STDINT_H things... dnl dnl @author Guido Draheim , Paolo Bonzini AC_DEFUN([GCC_HEADER_STDINT], [m4_define(_GCC_STDINT_H, m4_ifval($1, $1, _stdint.h)) inttype_headers=`echo inttypes.h sys/inttypes.h $2 | sed -e 's/,/ /g'` acx_cv_header_stdint=stddef.h acx_cv_header_stdint_kind="(already complete)" for i in stdint.h $inttype_headers; do unset ac_cv_type_uintptr_t unset ac_cv_type_uintmax_t unset ac_cv_type_int_least32_t unset ac_cv_type_int_fast32_t unset ac_cv_type_uint64_t _AS_ECHO_N([looking for a compliant stdint.h in $i, ]) AC_CHECK_TYPE(uintmax_t,[acx_cv_header_stdint=$i],continue,[#include #include <$i>]) AC_CHECK_TYPE(uintptr_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include #include <$i>]) AC_CHECK_TYPE(int_least32_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include #include <$i>]) AC_CHECK_TYPE(int_fast32_t,,[acx_cv_header_stdint_kind="(mostly complete)"], [#include #include <$i>]) AC_CHECK_TYPE(uint64_t,,[acx_cv_header_stdint_kind="(lacks uint64_t)"], [#include #include <$i>]) break done if test "$acx_cv_header_stdint" = stddef.h; then acx_cv_header_stdint_kind="(lacks uintmax_t)" for i in stdint.h $inttype_headers; do unset ac_cv_type_uintptr_t unset ac_cv_type_uint32_t unset ac_cv_type_uint64_t _AS_ECHO_N([looking for an incomplete stdint.h in $i, ]) AC_CHECK_TYPE(uint32_t,[acx_cv_header_stdint=$i],continue,[#include #include <$i>]) AC_CHECK_TYPE(uint64_t,,,[#include #include <$i>]) AC_CHECK_TYPE(uintptr_t,,,[#include #include <$i>]) break done fi if test "$acx_cv_header_stdint" = stddef.h; then acx_cv_header_stdint_kind="(u_intXX_t style)" for i in sys/types.h $inttype_headers; do unset ac_cv_type_u_int32_t unset ac_cv_type_u_int64_t _AS_ECHO_N([looking for u_intXX_t types in $i, ]) AC_CHECK_TYPE(u_int32_t,[acx_cv_header_stdint=$i],continue,[#include #include <$i>]) AC_CHECK_TYPE(u_int64_t,,,[#include #include <$i>]) break done fi if test "$acx_cv_header_stdint" = stddef.h; then acx_cv_header_stdint_kind="(using manual detection)" fi test -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no test -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no test -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no test -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no test -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no # ----------------- Summarize what we found so far AC_MSG_CHECKING([what to include in _GCC_STDINT_H]) case `AS_BASENAME(_GCC_STDINT_H)` in stdint.h) AC_MSG_WARN([are you sure you want it there?]) ;; inttypes.h) AC_MSG_WARN([are you sure you want it there?]) ;; *) ;; esac AC_MSG_RESULT($acx_cv_header_stdint $acx_cv_header_stdint_kind) # ----------------- done included file, check C basic types -------- # Lacking an uintptr_t? Test size of void * case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in stddef.h:* | *:no) AC_CHECK_SIZEOF(void *) ;; esac # Lacking an uint64_t? Test size of long case "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in stddef.h:*:* | *:no:no) AC_CHECK_SIZEOF(long) ;; esac if test $acx_cv_header_stdint = stddef.h; then # Lacking a good header? Test size of everything and deduce all types. AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(char) AC_MSG_CHECKING(for type equivalent to int8_t) case "$ac_cv_sizeof_char" in 1) acx_cv_type_int8_t=char ;; *) AC_MSG_ERROR(no 8-bit type, please report a bug) esac AC_MSG_RESULT($acx_cv_type_int8_t) AC_MSG_CHECKING(for type equivalent to int16_t) case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in 2:*) acx_cv_type_int16_t=int ;; *:2) acx_cv_type_int16_t=short ;; *) AC_MSG_ERROR(no 16-bit type, please report a bug) esac AC_MSG_RESULT($acx_cv_type_int16_t) AC_MSG_CHECKING(for type equivalent to int32_t) case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in 4:*) acx_cv_type_int32_t=int ;; *:4) acx_cv_type_int32_t=long ;; *) AC_MSG_ERROR(no 32-bit type, please report a bug) esac AC_MSG_RESULT($acx_cv_type_int32_t) fi # These tests are here to make the output prettier if test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then case "$ac_cv_sizeof_long" in 8) acx_cv_type_int64_t=long ;; esac AC_MSG_CHECKING(for type equivalent to int64_t) AC_MSG_RESULT(${acx_cv_type_int64_t-'using preprocessor symbols'}) fi # Now we can use the above types if test "$ac_cv_type_uintptr_t" != yes; then AC_MSG_CHECKING(for type equivalent to intptr_t) case $ac_cv_sizeof_void_p in 2) acx_cv_type_intptr_t=int16_t ;; 4) acx_cv_type_intptr_t=int32_t ;; 8) acx_cv_type_intptr_t=int64_t ;; *) AC_MSG_ERROR(no equivalent for intptr_t, please report a bug) esac AC_MSG_RESULT($acx_cv_type_intptr_t) fi # ----------------- done all checks, emit header ------------- AC_CONFIG_COMMANDS(_GCC_STDINT_H, [ if test "$GCC" = yes; then echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h else echo "/* generated for $CC */" > tmp-stdint.h fi sed 's/^ *//' >> tmp-stdint.h < EOF if test "$acx_cv_header_stdint" != stdint.h; then echo "#include " >> tmp-stdint.h fi if test "$acx_cv_header_stdint" != stddef.h; then echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h fi sed 's/^ *//' >> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <= 199901L #ifndef _INT64_T #define _INT64_T #ifndef __int64_t_defined typedef long long int64_t; #endif #endif #ifndef _UINT64_T #define _UINT64_T typedef unsigned long long uint64_t; #endif #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0 /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and does not implement __extension__. But that compiler doesn't define __GNUC_MINOR__. */ # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) # define __extension__ # endif # ifndef _INT64_T # define _INT64_T __extension__ typedef long long int64_t; # endif # ifndef _UINT64_T # define _UINT64_T __extension__ typedef unsigned long long uint64_t; # endif #elif !defined __STRICT_ANSI__ # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ # ifndef _INT64_T # define _INT64_T typedef __int64 int64_t; # endif # ifndef _UINT64_T # define _UINT64_T typedef unsigned __int64 uint64_t; # endif # endif /* compiler */ #endif /* ANSI version */ EOF fi # ------------- done int64_t types, emit intptr types ------------ if test "$ac_cv_type_uintptr_t" != yes; then sed 's/^ *//' >> tmp-stdint.h <> tmp-stdint.h < 1. dnl Fix when strange machines are reported. sed 's/^ *//' >> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <. # ACX_PROG_CC_WARNING_OPTS(WARNINGS, [VARIABLE = WARN_CFLAGS) # Sets @VARIABLE@ to the subset of the given options which the # compiler accepts. AC_DEFUN([ACX_PROG_CC_WARNING_OPTS], [AC_REQUIRE([AC_PROG_CC])dnl m4_pushdef([acx_Var], [m4_default([$2], [WARN_CFLAGS])])dnl AC_SUBST(acx_Var)dnl m4_expand_once([acx_Var= ],m4_quote(acx_Var=))dnl save_CFLAGS="$CFLAGS" for option in $1; do AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option]) AC_CACHE_CHECK([whether $CC supports $option], acx_Woption, [CFLAGS="$option" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], [AS_VAR_SET(acx_Woption, yes)], [AS_VAR_SET(acx_Woption, no)]) ]) AS_IF([test AS_VAR_GET(acx_Woption) = yes], [acx_Var="$acx_Var${acx_Var:+ }$option"]) AS_VAR_POPDEF([acx_Woption])dnl done CFLAGS="$save_CFLAGS" m4_popdef([acx_Var])dnl ])# ACX_PROG_CC_WARNING_OPTS # ACX_PROG_CC_WARNING_ALMOST_PEDANTIC(WARNINGS, [VARIABLE = WARN_PEDANTIC) # Append to VARIABLE "-pedantic" + the argument, if the compiler is GCC # and accepts all of those options simultaneously, otherwise to nothing. AC_DEFUN([ACX_PROG_CC_WARNING_ALMOST_PEDANTIC], [AC_REQUIRE([AC_PROG_CC])dnl m4_pushdef([acx_Var], [m4_default([$2], [WARN_PEDANTIC])])dnl AC_SUBST(acx_Var)dnl m4_expand_once([acx_Var= ],m4_quote(acx_Var=))dnl AS_VAR_PUSHDEF([acx_Pedantic], [acx_cv_prog_cc_pedantic_$1])dnl AS_IF([test "$GCC" = yes], [AC_CACHE_CHECK([whether $CC supports -pedantic $1], acx_Pedantic, [save_CFLAGS="$CFLAGS" CFLAGS="-pedantic $1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], [AS_VAR_SET(acx_Pedantic, yes)], [AS_VAR_SET(acx_Pedantic, no)]) CFLAGS="$save_CFLAGS"]) AS_IF([test AS_VAR_GET(acx_Pedantic) = yes], [acx_Var="$acx_Var${acx_Var:+ }-pedantic $1"]) ]) AS_VAR_POPDEF([acx_Pedantic])dnl m4_popdef([acx_Var])dnl ])# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC # ACX_PROG_CC_WARNINGS_ARE_ERRORS([x.y.z], [VARIABLE = WERROR]) # sets @VARIABLE@ to "-Werror" if the compiler is GCC >=x.y.z, or if # --enable-werror-always was given on the command line, otherwise # to nothing. # If the argument is the word "manual" instead of a version number, # then @VARIABLE@ will be set to -Werror only if --enable-werror-always # appeared on the configure command line. AC_DEFUN([ACX_PROG_CC_WARNINGS_ARE_ERRORS], [AC_REQUIRE([AC_PROG_CC])dnl m4_pushdef([acx_Var], [m4_default([$2], [WERROR])])dnl AC_SUBST(acx_Var)dnl m4_expand_once([acx_Var= ],m4_quote(acx_Var=))dnl AC_ARG_ENABLE(werror-always, AS_HELP_STRING([--enable-werror-always], [enable -Werror despite compiler version]), [], [enable_werror_always=no]) AS_IF([test $enable_werror_always = yes], [acx_Var="$acx_Var${acx_Var:+ }-Werror"]) m4_if($1, [manual],, [AS_VAR_PUSHDEF([acx_GCCvers], [acx_cv_prog_cc_gcc_$1_or_newer])dnl AC_CACHE_CHECK([whether $CC is GCC >=$1], acx_GCCvers, [set fnord `echo $1 | tr '.' ' '` shift AC_PREPROC_IFELSE( [#if __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ \ < [$]1 * 10000 + [$]2 * 100 + [$]3 #error insufficient #endif], [AS_VAR_SET(acx_GCCvers, yes)], [AS_VAR_SET(acx_GCCvers, no)])]) AS_IF([test AS_VAR_GET(acx_GCCvers) = yes], [acx_Var="$acx_Var${acx_Var:+ }-Werror"]) AS_VAR_POPDEF([acx_GCCvers])]) m4_popdef([acx_Var])dnl ])# ACX_PROG_CC_WARNINGS_ARE_ERRORS libdfp-1.0.17/configure000077500000000000000000006577031504475242000147740ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for libdfp 1.0.17. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/libdfp/libdfp/issues about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libdfp' PACKAGE_TARNAME='libdfp' PACKAGE_VERSION='1.0.17' PACKAGE_STRING='libdfp 1.0.17' PACKAGE_BUGREPORT='https://github.com/libdfp/libdfp/issues' PACKAGE_URL='' ac_unique_file="libdfp.pc.in" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" enable_option_checking=no ac_subst_vars='LTLIBOBJS subdirs LIBOBJS ALLOCA sysdep_dirs libdfp_cv_submachine_opt picflag enable_shared enable_static cxxdecimal libdfp_cv_cc_with_decimal_float machine base_machine ASFLAGS PYTHON PYTHON_PROG LDD GDB READELF OBJDUMP RANLIB AWK SET_MAKE LN_S INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM ac_ct_CXX CXXFLAGS CXX host_os host_vendor host_cpu host build_os build_vendor build_cpu build EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_cpu enable_static enable_shared ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC OBJDUMP READELF GDB LDD' ac_subdirs_all='libdecnumber' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libdfp 1.0.17 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libdfp] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libdfp 1.0.17:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-static build static library [default] --enable-shared build shared library [default] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-cpu=CPU Select the CPU to run on. Accepted values are similar to those accepted by gcc's -mcpu option. power6 and newer, and some z processors are supported. no is also accepted to indicate software only dfp should be used. If this option is not specified, configure will attempt to guess the latest powerpc processor supported by the toolchain, or use the soft dfp implementation. Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags OBJDUMP The path to the objdump used by the debug scripts. Defaults to that found in $$PATH READELF The path to the readelf used by test scripts. Defaults to that found in $$PATH GDB The path to the gdb used by the debug scripts. Defaults to that found in $$PATH LDD The path to the ldd used by the debug scripts. Defaults to that found in $$PATH Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF libdfp configure 1.0.17 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------------------------ ## ## Report this to https://github.com/libdfp/libdfp/issues ## ## ------------------------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libdfp $as_me 1.0.17, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # This is used for libdecnumber. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # We don't use Automake so this is necessary. ac_config_headers="$ac_config_headers config.h" # This indicates where config.guess and config.sub are located. Those scripts # are used by the AC_CANONICAL_* macros to determine platform specific data. ac_aux_dir= for ac_dir in scripts "$srcdir"/scripts; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in scripts \"$srcdir\"/scripts" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Defines host_cpu, host_vendor, and host_os variables. This is where the # code will run. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac config_os=$host_os machine=$host_cpu # The above does not guess ppc64le correctly. Help it. if test "$machine" == powerpc64 && test "$ac_cv_c_bigendian" == no; then machine=powerpc64le fi # machine is used and rewritten when computing sysdirs. host_machine=${machine} # Only allow a Linux host OS. We don't support building libdfp on non-Linux # systems. if test "$config_os" != linux-gnu; then as_fn_error $? "'linux-gnu' is the only allowed host OS" "$LINENO" 5 fi # Ensure basic toolchain tools are available. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else case $OBJDUMP in [\\/]* | ?:[\\/]*) ac_cv_path_OBJDUMP="$OBJDUMP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OBJDUMP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi OBJDUMP=$ac_cv_path_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "readelf", so it can be a program name with args. set dummy readelf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_READELF+:} false; then : $as_echo_n "(cached) " >&6 else case $READELF in [\\/]* | ?:[\\/]*) ac_cv_path_READELF="$READELF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi READELF=$ac_cv_path_READELF if test -n "$READELF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 $as_echo "$READELF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gdb", so it can be a program name with args. set dummy gdb; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GDB+:} false; then : $as_echo_n "(cached) " >&6 else case $GDB in [\\/]* | ?:[\\/]*) ac_cv_path_GDB="$GDB" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GDB="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GDB=$ac_cv_path_GDB if test -n "$GDB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDB" >&5 $as_echo "$GDB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ldd", so it can be a program name with args. set dummy ldd; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LDD+:} false; then : $as_echo_n "(cached) " >&6 else case $LDD in [\\/]* | ?:[\\/]*) ac_cv_path_LDD="$LDD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LDD=$ac_cv_path_LDD if test -n "$LDD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 $as_echo "$LDD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check for python3 if available, or else python. # Borrowed from glibc. for ac_prog in python3 python do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PYTHON_PROG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PYTHON_PROG"; then ac_cv_prog_PYTHON_PROG="$PYTHON_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PYTHON_PROG="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PYTHON_PROG=$ac_cv_prog_PYTHON_PROG if test -n "$PYTHON_PROG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_PROG" >&5 $as_echo "$PYTHON_PROG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON_PROG" && break done test -n "$PYTHON_PROG" || PYTHON_PROG="no-python" if test $PYTHON_PROG == no-python; then as_fn_error $? "python is required" "$LINENO" 5 fi PYTHON="$PYTHON_PROG -B" # This will invoke the sysdeps/$machine// machinery. submachine= with_dfp= # This tells us whether we know we have a hardware decimal floating point # unit. We know this based upon the submachine. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hardware decimal floating point unit" >&5 $as_echo_n "checking for hardware decimal floating point unit... " >&6; } # Check whether --with-cpu was given. if test "${with_cpu+set}" = set; then : withval=$with_cpu; case "$withval" in yes|'') as_fn_error $? "--with-cpu requires an argument" "$LINENO" 5 ;; no) with_dfp=no ;; *) submachine="$withval" ;; esac else case "$host_cpu" in s390|s390x) with_dfp=no # Check if the used compiler supports dfp instructions by converting # from dfp to bfp. If supported, the pfpo instruction is used. # Note: On s390 (31bit) we have to use -mzarch for this instruction. cat > conftest.c <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then if { ac_try='objdump -d conftest.o 2>&1 | grep pfpo > /dev/null' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then with_dfp=yes fi fi rm -f conftest* ;; esac fi if test -n "$submachine"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler option for CPU variant" >&5 $as_echo_n "checking for compiler option for CPU variant... " >&6; } if ${libdfp_cv_submachine_opt+:} false; then : $as_echo_n "(cached) " >&6 else libdfp_cv_submachine_opt=no for opt in "-march=$submachine" "-mcpu=$submachine"; do if { ac_try='${CC-cc} $opt -xc /dev/null -S -o /dev/null' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then libdfp_cv_submachine_opt="$opt" break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libdfp_cv_submachine_opt" >&5 $as_echo "$libdfp_cv_submachine_opt" >&6; } if test "x$libdfp_cv_submachine_opt" = xno; then as_fn_error $? "${CC-cc} does not support $submachine" "$LINENO" 5 fi fi # Test if the host as configured by the environment supports hard-dfp # by scanning assembler for soft-dfp if test -z "$with_dfp"; then gcc_intrin=`echo "_Decimal128 x(_Decimal64 y) { return y; }" \ | ${CC-cc} ${CFLAGS} ${libdfp_cv_submachine_opt} -S -c -xc - -o - \ | grep extendddtd -m1` case "$gcc_intrin" in *extendddtd*) with_dfp=no ;; *) with_dfp=yes ;; esac fi case "$machine" in powerpc|powerpcle) base_machine=powerpc machine=powerpc/powerpc32 ;; powerpc64) base_machine=powerpc machine=powerpc/powerpc64 ;; powerpc64le) base_machine=powerpc machine=powerpc/powerpc64/le ;; s390) base_machine=s390 machine=s390/s390-32 ;; s390x) base_machine=s390 machine=s390/s390-64 ;; i[34567]86) base_machine=i386 machine=i386/$machine ;; *) base_machine=$machine ;; esac # Don't even bother configuring if the compiler can't handle Decimal # Floating Point data types. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for decimal-float-support in compiler" >&5 $as_echo_n "checking for decimal-float-support in compiler... " >&6; } if ${libdfp_cv_cc_with_decimal_float+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.c <&1 >/dev/null | grep -q " '_Decimal64' undeclared "; then libdfp_cv_cc_with_decimal_float=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC is ${CC}" >&5 $as_echo "$as_me: WARNING: CC is ${CC}" >&2;} as_fn_error $? "${PACKAGE_NAME} requires a compiler configured and built with --enable-decimal-float." "$LINENO" 5 else libdfp_cv_cc_with_decimal_float=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libdfp_cv_cc_with_decimal_float" >&5 $as_echo "$libdfp_cv_cc_with_decimal_float" >&6; } # Check for GLIBC 2.10 headers have_glibc_2_10_headers=yes { $as_echo "$as_me:${as_lineno-$LINENO}: checking for printf-hook register_printf_type() in printf.h to verify GLIBC 2.10" >&5 $as_echo_n "checking for printf-hook register_printf_type() in printf.h to verify GLIBC 2.10... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "printf.h" int main () { void foo_va (void *mem, va_list *ap) { return; } register_printf_type (foo_va); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; }; have_glibc_2_10_headers=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test x$have_glibc_2_10_headers != xyes; then as_fn_error $? "Building Libdfp requires a GLIBC printf.h header that provides the register_printf_type() function which is available in GLIBC Version 2.10 or later." "$LINENO" 5 fi # Check for std::decimal compiler support { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::decimal" >&5 $as_echo_n "checking for std::decimal... " >&6; } if ${libdfp_cv_cxxdecimal+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { std::decimal::decimal64 x = 0.0000006E-90DD; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : libdfp_cv_cxxdecimal=yes else libdfp_cv_cxxdecimal=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libdfp_cv_cxxdecimal" >&5 $as_echo "$libdfp_cv_cxxdecimal" >&6; } cxxdecimal="$libdfp_cv_cxxdecimal" # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; case "$enableval" in yes) enable_static=static { $as_echo "$as_me:${as_lineno-$LINENO}: enabling support for a static library." >&5 $as_echo "$as_me: enabling support for a static library." >&6;};; no) enable_static= { $as_echo "$as_me:${as_lineno-$LINENO}: disabling support for a static library." >&5 $as_echo "$as_me: disabling support for a static library." >&6;};; *) enable_static=static { $as_echo "$as_me:${as_lineno-$LINENO}: enabling support for a static library." >&5 $as_echo "$as_me: enabling support for a static library." >&6;};; esac else enable_static=static fi # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; case "$enableval" in yes) enable_shared=shared { $as_echo "$as_me:${as_lineno-$LINENO}: enabling support for a shared library." >&5 $as_echo "$as_me: enabling support for a shared library." >&6;};; no) enable_shared= { $as_echo "$as_me:${as_lineno-$LINENO}: disabling support for a shared library." >&5 $as_echo "$as_me: disabling support for a shared library." >&6;};; *) enable_shared= { $as_echo "$as_me:${as_lineno-$LINENO}: enabling support for a shared library." >&5 $as_echo "$as_me: enabling support for a shared library." >&6;};; esac else enable_shared=shared fi # Should be ok if we build static with this turned on. If the linker # complains that the GOT is too big this may need to be upgraded to -fPIC so # we get full addressibility. picflag="-fpic -DSHARED" { $as_echo "$as_me:${as_lineno-$LINENO}: configuring with \"$picflag\"" >&5 $as_echo "$as_me: configuring with \"$picflag\"" >&6;} # Compute the list of sysdeps directories. { $as_echo "$as_me:${as_lineno-$LINENO}: checking sysdep dirs" >&5 $as_echo_n "checking sysdep dirs... " >&6; } # Build a search list based on this precedence: # ${srcdir}/include [internal libdfp headers] # ${srcdir}/libdecnumber/dpd [libdecnumber headers] # ${srcdir}/libdecnumber/bid [libdecnumber headers] # ${srcdir}/libbid/ [libbid headers] # [MACHINE/SUBMACHINE] # ${srcdir}/sysdeps/powerpc/powerpc64/le # ${srcdir}/sysdeps/powerpc/powerpc64/ # ${srcdir}/sysdeps/powerpc/powerpc32/ # [BASE_MACHINE/FPU] # ${srcdir}/sysdeps/powerpc/dfpu # ${srcdir}/sysdeps/powerpc/nodfpu # [BASE_MACHINE] # ${srcdir}/sysdeps/powerpc/ # [ENCODING] # ${srcdir}/sysdeps/dpd [dpd specific implementations] # ${srcdir}/sysdeps/bid [bid specific implementations] # ${srcdir}/sysdeps/soft-dfp/dpd [soft-dfp dpd arithmetic, conversion, and comparison fns] # ${srcdir}/sysdeps/soft-dfp/bid [soft-dfp bid arithmetic, conversion, and comparison fns] # ${srcdir}/sysdeps/soft-dfp [soft-dfp arithmetic, conversion, and comparison fns] # ${srcdir}/dfp [headers files that will be installed. These follow the # sysdep overrides so that sysdeps override directories show up # before the install headers in #include_next
. # ${srcdir}/ieee754r [ISO C Draft TR functions] # ${srcdir}/base-math [Arithmetic, Conversion, and Comparison Routines.] # ${srcdir}/[common libdfp framework code & common headers for the backends.] # Out of Tree Sources # ${srcdir}/libdecnumber [third-party GCC sources] # ${srcdir}/libbid [third-party GCC sources] # We only assume Linux support so we don't worry about all the os stuff that # GLIBC does. tail=$machine${submachine:+/$submachine} # Build the list of dfpu|nodfpu directories. while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do set $m # Only look for 'dfpu' directory if the system supports hardware dfp. if test "$with_dfp" = yes; then mach="$mach /$1/dfpu" else mach="$mach /$1/nodfpu" fi mach="$mach /$1" tail="$2" done # Thankfully we don't support add-ons or non-Linux operating systems so this # is relatively simple compared to what it could be. We also don't care if # the machine or submachine don't show up in the sysdeps directory. The base # configuration doesn't require it. sysnames= try_srcdir="${srcdir}/" for m in $mach ''; do # We don't want to add /src/sysdeps yet. if test -n "$m"; then try="sysdeps${m}" if test -d "${try_srcdir}${try}"; then sysnames="$sysnames $try" fi fi done # Close out the sysdeps directory. #sysnames="$sysnames sysdeps" # Add the default directories. default_sysnames="sysdeps/generic" sysnames="$sysnames $default_sysnames" set $sysnames names= while test $# -gt 0; do name=$1 shift case " $names " in *" $name "*) # Already in the list. continue esac case $name in /*) xsrcdir=;; *) xsrcdir=$srcdir/ ;; esac if test -f $xsrcdir$name/Implies; then implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/Implies`" implied= for x in $implied_candidate; do found=no if test -d $xsrcdir/$x; then implied="$implied $x"; found=yes fi if test $found = no; then echo "$name/Implies specifies nonexistent $x" fi done else implied= fi names="$names $name" parent="`echo $name | sed -n -e 's=/^/*$==' -e '/sysdeps$/q' -e p`" sysnames="`echo $implied $* $parent`" test -n "$sysnames" && set $sysnames done sysdep_dirs="$names" # Just the directories in the sysdeps tree. { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sysdep_dirs" >&5 $as_echo "$sysdep_dirs" >&6; } # Taken from GLIBC's configure.in { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler global-symbol directive" >&5 $as_echo_n "checking for assembler global-symbol directive... " >&6; } if ${libc_cv_asm_global_directive+:} false; then : $as_echo_n "(cached) " >&6 else libc_cv_asm_global_directive=UNKNOWN for ac_globl in .globl .global .EXPORT; do cat > conftest.s <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then libc_cv_asm_global_directive=${ac_globl} fi rm -f conftest* test $libc_cv_asm_global_directive != UNKNOWN && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_global_directive" >&5 $as_echo "$libc_cv_asm_global_directive" >&6; } if test $libc_cv_asm_global_directive = UNKNOWN; then as_fn_error $? "cannot determine asm global directive" "$LINENO" 5 else cat >>confdefs.h <<_ACEOF #define ASM_GLOBAL_DIRECTIVE ${libc_cv_asm_global_directive} _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler .type directive prefix" >&5 $as_echo_n "checking for assembler .type directive prefix... " >&6; } if ${libc_cv_asm_type_prefix+:} false; then : $as_echo_n "(cached) " >&6 else libc_cv_asm_type_prefix=no for ac_try_prefix in '@' '%' '#'; do cat > conftest.s <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then libc_cv_asm_type_prefix=${ac_try_prefix} fi rm -f conftest* test "x$libc_cv_asm_type_prefix" != xno && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_type_prefix" >&5 $as_echo "$libc_cv_asm_type_prefix" >&6; } if test "x$libc_cv_asm_type_prefix" != xno; then cat >>confdefs.h <<_ACEOF #define ASM_TYPE_DIRECTIVE_PREFIX ${libc_cv_asm_type_prefix} _ACEOF fi # Check which is the loader libdfp_cv_loader=` cat > conftest.c <>confdefs.h <<_ACEOF #define LIBDFP_RUNTIME_LOADER "$libdfp_cv_loader" _ACEOF # Checks for libraries. # Checks for header files. ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in fenv.h float.h langinfo.h limits.h locale.h stddef.h stdint.h stdlib.h string.h sys/time.h unistd.h wchar.h wctype.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" case $ac_cv_c_int32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int32_t $ac_cv_c_int32_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) $as_echo "#define _UINT32_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) $as_echo "#define _UINT64_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint64_t $ac_cv_c_uint64_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int64_t $ac_cv_c_int64_t _ACEOF ;; esac # Checks for library functions. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 $as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } if ${ac_cv_func_mbrtowc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_mbrtowc=yes else ac_cv_func_mbrtowc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 $as_echo "$ac_cv_func_mbrtowc" >&6; } if test $ac_cv_func_mbrtowc = yes; then $as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if ${ac_cv_lib_error_at_line+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_error_at_line=yes else ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then case " $LIBOBJS " in *" error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS error.$ac_objext" ;; esac fi # Do not enable these. They have never worked on cross builds # which require ugly workarounds. # AC_FUNC_MALLOC # AC_FUNC_REALLOC ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" case $ac_cv_c_int16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int16_t $ac_cv_c_int16_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac for ac_func in floor fesetround gettimeofday memset nl_langinfo setlocale \ sqrt strcasecmp strchr strdup strtol do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Use the existing libdecnumber machine to product libdecnumber.a subdirs="$subdirs libdecnumber" # For _Float128 targets, we require yet newer glibc (2.26) and gcc (6.2) gcc_min=4 gcc_min_minor=6 gcc_extra="" glibc_min=2 glibc_min_minor=10 if test "$host_machine" == powerpc64le || test "$base_machine" == i386 || test "$host_machine" == x86_64; then gcc_min=6 gcc_min_minor=2 glibc_min=2 glibc_min_minor=26 fi # Based on the glibc check for GCC minimum version. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC is sufficient to build libdfp" >&5 $as_echo_n "checking if $CC is sufficient to build libdfp... " >&6; } if ${libc_cv_compiler_ok+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if !defined __GNUC__ || __GNUC__ < ${gcc_min} || (__GNUC__ == ${gcc_min} && __GNUC_MINOR__ < ${gcc_min_minor}) #error insufficient compiler #endif #if !__GLIBC_PREREQ (${glibc_min}, ${glibc_min_minor}) # error insufficient glibc version #endif ${gcc_extra} ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libc_cv_compiler_ok=yes else libc_cv_compiler_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_compiler_ok" >&5 $as_echo "$libc_cv_compiler_ok" >&6; } if test $libc_cv_compiler_ok != yes; then : as_fn_error $? "\"Minimum gcc/glibc version not met (${gcc_min}.${gcc_min_minor}/${glibc_min}.${glibc_min_minor})\"" "$LINENO" 5 fi # This tells autoconf to generate Makefile from the Makefile.in. This is the # top level Makefile for the project. This Makefile will then recurse into # the fragment Makefiles in the sysdeps directories. ac_config_files="$ac_config_files Makefile libdfp.pc libdecnumber.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libdfp $as_me 1.0.17, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ libdfp config.status 1.0.17 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libdfp.pc") CONFIG_FILES="$CONFIG_FILES libdfp.pc" ;; "libdecnumber.pc") CONFIG_FILES="$CONFIG_FILES libdecnumber.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi libdfp-1.0.17/configure.ac000066400000000000000000000372231504475242000153400ustar00rootroot00000000000000# Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([libdfp],[1.0.17],[https://github.com/libdfp/libdfp/issues]) AC_CONFIG_SRCDIR([libdfp.pc.in]) # This is used for libdecnumber. AC_C_BIGENDIAN # We don't use Automake so this is necessary. AC_CONFIG_HEADER([config.h]) # This indicates where config.guess and config.sub are located. Those scripts # are used by the AC_CANONICAL_* macros to determine platform specific data. AC_CONFIG_AUX_DIR([scripts]) # Defines host_cpu, host_vendor, and host_os variables. This is where the # code will run. AC_CANONICAL_HOST config_os=$host_os machine=$host_cpu # The above does not guess ppc64le correctly. Help it. if test "$machine" == powerpc64 && test "$ac_cv_c_bigendian" == no; then machine=powerpc64le fi # machine is used and rewritten when computing sysdirs. host_machine=${machine} # Only allow a Linux host OS. We don't support building libdfp on non-Linux # systems. if test "$config_os" != linux-gnu; then AC_MSG_ERROR(['linux-gnu' is the only allowed host OS]) fi # Ensure basic toolchain tools are available. AC_PROG_CC AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_AWK AC_PROG_RANLIB AC_PATH_PROG([OBJDUMP], [objdump]) AC_ARG_VAR(OBJDUMP,The path to the objdump used by the debug scripts. Defaults to that found in $$PATH) AC_PATH_PROG([READELF], [readelf]) AC_ARG_VAR(READELF,The path to the readelf used by test scripts. Defaults to that found in $$PATH) AC_PATH_PROG([GDB], [gdb]) AC_ARG_VAR(GDB,The path to the gdb used by the debug scripts. Defaults to that found in $$PATH) AC_PATH_PROG([LDD], [ldd]) AC_ARG_VAR(LDD,The path to the ldd used by the debug scripts. Defaults to that found in $$PATH) # Check for python3 if available, or else python. # Borrowed from glibc. AC_CHECK_PROGS([PYTHON_PROG],python3 python, no-python) if test $PYTHON_PROG == no-python; then AC_MSG_ERROR([python is required]) fi PYTHON="$PYTHON_PROG -B" AC_SUBST(PYTHON) AC_SUBST(CFLAGS) AC_SUBST(CXXFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(ASFLAGS) # This will invoke the sysdeps/$machine// machinery. submachine= with_dfp= # This tells us whether we know we have a hardware decimal floating point # unit. We know this based upon the submachine. AC_MSG_CHECKING([for hardware decimal floating point unit]) AC_ARG_WITH([cpu], AS_HELP_STRING([--with-cpu=CPU], [Select the CPU to run on. Accepted values are similar to those accepted by gcc's -mcpu option. power6 and newer, and some z processors are supported. no is also accepted to indicate software only dfp should be used. If this option is not specified, configure will attempt to guess the latest powerpc processor supported by the toolchain, or use the soft dfp implementation.]), [dnl case "$withval" in yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;; no) with_dfp=no ;; *) submachine="$withval" ;; esac ],[ case "$host_cpu" in s390|s390x) with_dfp=no # Check if the used compiler supports dfp instructions by converting # from dfp to bfp. If supported, the pfpo instruction is used. # Note: On s390 (31bit) we have to use -mzarch for this instruction. cat > conftest.c <&1 | grep pfpo > /dev/null]); then with_dfp=yes fi fi rm -f conftest* ;; esac ]) if test -n "$submachine"; then AC_CACHE_CHECK([for compiler option for CPU variant], libdfp_cv_submachine_opt, [dnl libdfp_cv_submachine_opt=no for opt in "-march=$submachine" "-mcpu=$submachine"; do if AC_TRY_COMMAND([${CC-cc} $opt -xc /dev/null -S -o /dev/null]); then libdfp_cv_submachine_opt="$opt" break fi done]) if test "x$libdfp_cv_submachine_opt" = xno; then AC_MSG_ERROR([${CC-cc} does not support $submachine]) fi fi # Test if the host as configured by the environment supports hard-dfp # by scanning assembler for soft-dfp if test -z "$with_dfp"; then gcc_intrin=`echo "_Decimal128 x(_Decimal64 y) { return y; }" \ | ${CC-cc} ${CFLAGS} ${libdfp_cv_submachine_opt} -S -c -xc - -o - \ | grep extendddtd -m1` case "$gcc_intrin" in *extendddtd*) with_dfp=no ;; *) with_dfp=yes ;; esac fi dnl We need to use [ and ] for other purposes for a while now. changequote(,)dnl case "$machine" in powerpc|powerpcle) base_machine=powerpc machine=powerpc/powerpc32 ;; powerpc64) base_machine=powerpc machine=powerpc/powerpc64 ;; powerpc64le) base_machine=powerpc machine=powerpc/powerpc64/le ;; s390) base_machine=s390 machine=s390/s390-32 ;; s390x) base_machine=s390 machine=s390/s390-64 ;; i[34567]86) base_machine=i386 machine=i386/$machine ;; *) base_machine=$machine ;; esac changequote([,])dnl AC_SUBST(base_machine) AC_SUBST(machine) # Don't even bother configuring if the compiler can't handle Decimal # Floating Point data types. AC_CACHE_CHECK(for decimal-float-support in compiler, libdfp_cv_cc_with_decimal_float, [ cat > conftest.c <&1 >/dev/null | grep -q " '_Decimal64' undeclared "; then libdfp_cv_cc_with_decimal_float=no AC_MSG_WARN([CC is ${CC}]) AC_MSG_ERROR([${PACKAGE_NAME} requires a compiler configured and built with --enable-decimal-float.]) else libdfp_cv_cc_with_decimal_float=yes fi rm -f conftest*]) AC_SUBST(libdfp_cv_cc_with_decimal_float) # Check for GLIBC 2.10 headers have_glibc_2_10_headers=yes AC_MSG_CHECKING([for printf-hook register_printf_type() in printf.h to verify GLIBC 2.10]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "printf.h"]], [[ void foo_va (void *mem, va_list *ap) { return; } register_printf_type (foo_va); ]])],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no]); have_glibc_2_10_headers=no]) if test x$have_glibc_2_10_headers != xyes; then AC_MSG_ERROR([Building Libdfp requires a GLIBC printf.h header that provides the register_printf_type() function which is available in GLIBC Version 2.10 or later.]) fi # Check for std::decimal compiler support AC_CACHE_CHECK(for std::decimal, libdfp_cv_cxxdecimal, [AC_LANG_SAVE AC_LANG_CPLUSPLUS AC_TRY_COMPILE( [ #include ], [ std::decimal::decimal64 x = 0.0000006E-90DD; ], [ libdfp_cv_cxxdecimal=yes ], [ libdfp_cv_cxxdecimal=no ]) AC_LANG_RESTORE] ) cxxdecimal="$libdfp_cv_cxxdecimal" AC_SUBST(cxxdecimal) AC_ARG_ENABLE([static], AS_HELP_STRING([--enable-static], [build static library @<:@default@:>@]), [case "$enableval" in yes) enable_static=static AC_MSG_NOTICE(enabling support for a static library.);; no) enable_static= AC_MSG_NOTICE(disabling support for a static library.);; *) enable_static=static AC_MSG_NOTICE(enabling support for a static library.);; esac], enable_static=static) AC_SUBST(enable_static) AC_ARG_ENABLE([shared], AS_HELP_STRING([--enable-shared], [build shared library @<:@default@:>@]), [case "$enableval" in yes) enable_shared=shared AC_MSG_NOTICE(enabling support for a shared library.);; no) enable_shared= AC_MSG_NOTICE(disabling support for a shared library.);; *) enable_shared= AC_MSG_NOTICE(enabling support for a shared library.);; esac], enable_shared=shared ) AC_SUBST(enable_shared) # Should be ok if we build static with this turned on. If the linker # complains that the GOT is too big this may need to be upgraded to -fPIC so # we get full addressibility. picflag="-fpic -DSHARED" AC_MSG_NOTICE(configuring with "$picflag") AC_SUBST(picflag) # Compute the list of sysdeps directories. AC_MSG_CHECKING(sysdep dirs) # Build a search list based on this precedence: # ${srcdir}/include [internal libdfp headers] # ${srcdir}/libdecnumber/dpd [libdecnumber headers] # ${srcdir}/libdecnumber/bid [libdecnumber headers] # ${srcdir}/libbid/ [libbid headers] # [MACHINE/SUBMACHINE] # ${srcdir}/sysdeps/powerpc/powerpc64/le # ${srcdir}/sysdeps/powerpc/powerpc64/ # ${srcdir}/sysdeps/powerpc/powerpc32/ # [BASE_MACHINE/FPU] # ${srcdir}/sysdeps/powerpc/dfpu # ${srcdir}/sysdeps/powerpc/nodfpu # [BASE_MACHINE] # ${srcdir}/sysdeps/powerpc/ # [ENCODING] # ${srcdir}/sysdeps/dpd [dpd specific implementations] # ${srcdir}/sysdeps/bid [bid specific implementations] # ${srcdir}/sysdeps/soft-dfp/dpd [soft-dfp dpd arithmetic, conversion, and comparison fns] # ${srcdir}/sysdeps/soft-dfp/bid [soft-dfp bid arithmetic, conversion, and comparison fns] # ${srcdir}/sysdeps/soft-dfp [soft-dfp arithmetic, conversion, and comparison fns] # ${srcdir}/dfp [headers files that will be installed. These follow the # sysdep overrides so that sysdeps override directories show up # before the install headers in #include_next
. # ${srcdir}/ieee754r [ISO C Draft TR functions] # ${srcdir}/base-math [Arithmetic, Conversion, and Comparison Routines.] # ${srcdir}/[common libdfp framework code & common headers for the backends.] # Out of Tree Sources # ${srcdir}/libdecnumber [third-party GCC sources] # ${srcdir}/libbid [third-party GCC sources] # We only assume Linux support so we don't worry about all the os stuff that # GLIBC does. dnl We need to use [ and ] for other purposes for a while now. changequote(,)dnl tail=$machine${submachine:+/$submachine} # Build the list of dfpu|nodfpu directories. while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do set $m # Only look for 'dfpu' directory if the system supports hardware dfp. if test "$with_dfp" = yes; then mach="$mach /$1/dfpu" else mach="$mach /$1/nodfpu" fi mach="$mach /$1" tail="$2" done dnl We are done with glob and regexp uses of [ and ]; return to autoconf. changequote([,])dnl # Thankfully we don't support add-ons or non-Linux operating systems so this # is relatively simple compared to what it could be. We also don't care if # the machine or submachine don't show up in the sysdeps directory. The base # configuration doesn't require it. sysnames= try_srcdir="${srcdir}/" for m in $mach ''; do # We don't want to add /src/sysdeps yet. if test -n "$m"; then try="sysdeps${m}" if test -d "${try_srcdir}${try}"; then sysnames="$sysnames $try" fi fi done AC_SUBST(libdfp_cv_submachine_opt) # Close out the sysdeps directory. #sysnames="$sysnames sysdeps" # Add the default directories. default_sysnames="sysdeps/generic" sysnames="$sysnames $default_sysnames" set $sysnames names= while test $# -gt 0; do name=$1 shift case " $names " in *" $name "*) # Already in the list. continue esac case $name in /*) xsrcdir=;; *) xsrcdir=$srcdir/ ;; esac if test -f $xsrcdir$name/Implies; then implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/Implies`" implied= for x in $implied_candidate; do found=no if test -d $xsrcdir/$x; then implied="$implied $x"; found=yes fi if test $found = no; then echo "$name/Implies specifies nonexistent $x" fi done else implied= fi names="$names $name" parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`" sysnames="`echo $implied $* $parent`" test -n "$sysnames" && set $sysnames done sysdep_dirs="$names" # Just the directories in the sysdeps tree. AC_SUBST(sysdep_dirs) AC_MSG_RESULT($sysdep_dirs) # Taken from GLIBC's configure.in AC_CACHE_CHECK(for assembler global-symbol directive, libc_cv_asm_global_directive, [dnl libc_cv_asm_global_directive=UNKNOWN for ac_globl in .globl .global .EXPORT; do cat > conftest.s <&AS_MESSAGE_LOG_FD); then libc_cv_asm_global_directive=${ac_globl} fi rm -f conftest* test $libc_cv_asm_global_directive != UNKNOWN && break done]) if test $libc_cv_asm_global_directive = UNKNOWN; then AC_MSG_ERROR(cannot determine asm global directive) else AC_DEFINE_UNQUOTED(ASM_GLOBAL_DIRECTIVE, ${libc_cv_asm_global_directive},"Define to the name of the assembler's directive for declaring a symbol global (default `.globl').") fi AC_CACHE_CHECK(for assembler .type directive prefix, libc_cv_asm_type_prefix, [dnl libc_cv_asm_type_prefix=no for ac_try_prefix in '@' '%' '#'; do cat > conftest.s <&AS_MESSAGE_LOG_FD); then libc_cv_asm_type_prefix=${ac_try_prefix} fi rm -f conftest* test "x$libc_cv_asm_type_prefix" != xno && break done]) if test "x$libc_cv_asm_type_prefix" != xno; then AC_DEFINE_UNQUOTED(ASM_TYPE_DIRECTIVE_PREFIX, ${libc_cv_asm_type_prefix}, "Define to the prefix before `object' or `function' in the assembler's `.type' directive, if it has one.") fi # Check which is the loader libdfp_cv_loader=` cat > conftest.c < #include ], [ #if !defined __GNUC__ || __GNUC__ < ${gcc_min} || (__GNUC__ == ${gcc_min} && __GNUC_MINOR__ < ${gcc_min_minor}) #error insufficient compiler #endif #if !__GLIBC_PREREQ (${glibc_min}, ${glibc_min_minor}) # error insufficient glibc version #endif ${gcc_extra}], [libc_cv_compiler_ok=yes], [libc_cv_compiler_ok=no])]) AS_IF([test $libc_cv_compiler_ok != yes], [AC_MSG_ERROR("Minimum gcc/glibc version not met (${gcc_min}.${gcc_min_minor}/${glibc_min}.${glibc_min_minor})")]) # This tells autoconf to generate Makefile from the Makefile.in. This is the # top level Makefile for the project. This Makefile will then recurse into # the fragment Makefiles in the sysdeps directories. AC_CONFIG_FILES([Makefile libdfp.pc libdecnumber.pc]) AC_OUTPUT libdfp-1.0.17/decNumberMath/000077500000000000000000000000001504475242000155615ustar00rootroot00000000000000libdfp-1.0.17/decNumberMath/Makefile000066400000000000000000000016341504475242000172250ustar00rootroot00000000000000# Copyright (C) 2015 Free Software Foundation, Inc. # # This file is part of the Decimal Floating Point C Library. # # The Decimal Floating Point C Library is free software; you can # redistribute it and/or modify it under the terms of the GNU Lesser # General Public License version 2.1. # # The Decimal Floating Point C 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 version 2.1 for more details. # # You should have received a copy of the GNU Lesser General Public # License version 2.1 along with the Decimal Floating Point C Library; # if not, write to the Free Software Foundation, Inc., 51 Franklin # Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Please see libdfp/COPYING.txt for more information. */ libdfp_files += decNumberMath libdfp-1.0.17/decNumberMath/README000066400000000000000000000001501504475242000164350ustar00rootroot00000000000000# This is simply a convenience directory which uses libdecnumber internals to # perform its operations. libdfp-1.0.17/decNumberMath/Versions000066400000000000000000000002671504475242000173210ustar00rootroot00000000000000libdfp { LIBDFP_PRIVATE { decNumberPow; decNumberSinh; decNumberCosh; decNumberTanh; decNumberSin; decNumberCos; decNumberTan; decNumberAtan; } } libdfp-1.0.17/decNumberMath/decNumberMath.c000066400000000000000000000726061504475242000204560ustar00rootroot00000000000000/* Decimal Number Library - Math Functions Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Contributed by IBM Corporation. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* HACK: libdecnumber will try dragging in its config.h, prevent it. */ #define _DCONFIG_H #define DECNUMDIGITS 60 #include "decNumber.h" // base number library #include "decNumberMath.h" #include "decNumberLocal.h" #include "decContext.h" #include // for printf #include // for malloc/free #include // for tolower #include #define E "2.7182818284590452353602874713526624977572470936999595749669676277240766303535" #define PI "3.1415926535897932384626433832795028841971693993751058209749445923078164062862" //Flags #define DIVIDE 0x80 #define REMAINDER 0x40 #define DIVIDEINT 0x20 #define REMNEAR 0x10 #define COMPARE 0x01 #define COMPMAX 0x02 #define COMPMIN 0x03 #define COMPNAN 0x04 #define BADINT (Int)0x80000000 #define DIVIDE_BY_10(x) x.exponent-- // Callers will bring in context using the source precision, e.g // 7/16/34. The algos here require higher precision to converge to // a correct answer. Expand precision and exponent range. // // This abuses decNumberAdd to copy and round a final result into // the target precision. #define DEC_STASH_CONTEXT(ctxp, zerop) \ const int _emax_stashed = ctxp->emax; \ const int _emin_stashed = ctxp->emin; \ const int _digits_stashed = ctxp->digits; \ decNumberFromString (zerop, "0", ctxp); \ ctxp->emax = 6144; \ ctxp->emin = -6143; \ ctxp->digits = DECNUMDIGITS; #define DEC_RESTORE_ROUND(ctxp, resultoutp, resultinp, zerop) \ ctxp->emax = _emax_stashed; \ ctxp->emin = _emin_stashed; \ ctxp->digits = _digits_stashed; \ decNumberAdd (resultoutp, resultinp, zerop, ctxp); // ---------------------------------------------------------------------- // Basic Functions // ---------------------------------------------------------------------- // Return the largest integer less than or equal to x static decNumber* decNumberFloor (decNumber *result, decNumber *x, decContext *set) { int round = set->round; set->round = DEC_ROUND_DOWN; decNumberToIntegralValue (result, x, set); set->round = round; return result; } /* decNumberFloor */ static int decNumberIsEqual (decNumber *x, decNumber *y, decContext *set) { decNumber diff; decNumberSubtract (&diff, x, y, set); return decNumberIsZero (&diff); } /* decNumberIsEqual */ static int decNumberIsInteger (decNumber *x, decContext *set) { decNumber y; decNumberToIntegralValue (&y, x, set); return decNumberIsEqual (x, &y, set); } /* decNumberIsInteger */ // Modulo function static decNumber* decNumberMod (decNumber *result, decNumber *x, decNumber *y, decContext *set) { // x mod y = x - k*y where k = floor(x/y) decNumber k; decNumberDivide (&k, x, y, set); decNumberFloor (&k, &k, set); decNumberMultiply (&k, &k, y, set); decNumberSubtract (result, x, &k, set); return result; } /* decNumberMod */ // ---------------------------------------------------------------------- // Exponential Function // ---------------------------------------------------------------------- decNumber* decNumberPow (decNumber *result, decNumber *x, decNumber *y, decContext *set) { decNumber tmp; if (decNumberIsInteger (y, set)) { return decNumberPower (result, x, y, set); } // y is not an integer. if (decNumberIsNegative (x)) { // result would be a complex number. decNumberFromString (result, "NaN", set); return result; } // x^y = exp (y*ln(x)) decNumberLn(&tmp, x, set); decNumberMultiply (&tmp, &tmp, y, set); decNumberExp (result, &tmp, set); return result; } /* decNumberPow */ /* ------------------------------------------------------------------ */ /* decNumberSquareRoot -- square root operator */ /* */ /* This computes C = squareroot(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context; note that rounding mode has no effect */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ /* This uses the following varying-precision algorithm in: */ /* */ /* Properly Rounded Variable Precision Square Root, T. E. Hull and */ /* A. Abrham, ACM Transactions on Mathematical Software, Vol 11 #3, */ /* pp229-237, ACM, September 1985. */ /* */ /* % [Reformatted original Numerical Turing source code follows.] */ /* function sqrt(x : real) : real */ /* % sqrt(x) returns the properly rounded approximation to the square */ /* % root of x, in the precision of the calling environment, or it */ /* % fails if x < 0. */ /* % t e hull and a abrham, august, 1984 */ /* if x <= 0 then */ /* if x < 0 then */ /* assert false */ /* else */ /* result 0 */ /* end if */ /* end if */ /* var f := setexp(x, 0) % fraction part of x [0.1 <= x < 1] */ /* var e := getexp(x) % exponent part of x */ /* var approx : real */ /* if e mod 2 = 0 then */ /* approx := .259 + .819 * f % approx to root of f */ /* else */ /* f := f/l0 % adjustments */ /* e := e + 1 % for odd */ /* approx := .0819 + 2.59 * f % exponent */ /* end if */ /* */ /* var p:= 3 */ /* const maxp := currentprecision + 2 */ /* loop */ /* p := min(2*p - 2, maxp) % p = 4,6,10, . . . , maxp */ /* precision p */ /* approx := .5 * (approx + f/approx) */ /* exit when p = maxp */ /* end loop */ /* */ /* % approx is now within 1 ulp of the properly rounded square root */ /* % of f; to ensure proper rounding, compare squares of (approx - */ /* % l/2 ulp) and (approx + l/2 ulp) with f. */ /* p := currentprecision */ /* begin */ /* precision p + 2 */ /* const approxsubhalf := approx - setexp(.5, -p) */ /* if mulru(approxsubhalf, approxsubhalf) > f then */ /* approx := approx - setexp(.l, -p + 1) */ /* else */ /* const approxaddhalf := approx + setexp(.5, -p) */ /* if mulrd(approxaddhalf, approxaddhalf) < f then */ /* approx := approx + setexp(.l, -p + 1) */ /* end if */ /* end if */ /* end */ /* result setexp(approx, e div 2) % fix exponent */ /* end sqrt */ /* ------------------------------------------------------------------ */ /*decNumber * decNumberSquareRoot(decNumber *res, decNumber *rhs, decContext *set) { decContext workset, approxset; // work contexts decNumber dzero; // used for constant zero Int maxp=set->digits+2; // largest working precision Int residue=0; // rounding residue uInt status=0, ignore=0; // status accumulators Int exp; // working exponent Int ideal; // ideal (preferred) exponent Int needbytes; // work Int dropped; // .. decNumber *allocrhs=NULL; // non-NULL if rounded rhs allocated // buffer for f [needs +1 in case DECBUFFER 0] uByte buff[sizeof(decNumber)+(D2U(DECBUFFER+1)-1)*sizeof(Unit)]; // buffer for a [needs +2 to match maxp] uByte bufa[sizeof(decNumber)+(D2U(DECBUFFER+2)-1)*sizeof(Unit)]; // buffer for temporary, b [must be same size as a] uByte bufb[sizeof(decNumber)+(D2U(DECBUFFER+2)-1)*sizeof(Unit)]; decNumber *allocbuff=NULL; // -> allocated buff, iff allocated decNumber *allocbufa=NULL; // -> allocated bufa, iff allocated decNumber *allocbufb=NULL; // -> allocated bufb, iff allocated decNumber *f=(decNumber *)buff; // reduced fraction decNumber *a=(decNumber *)bufa; // approximation to result decNumber *b=(decNumber *)bufb; // intermediate result // buffer for temporary variable, up to 3 digits uByte buft[sizeof(decNumber)+(D2U(3)-1)*sizeof(Unit)]; decNumber *t=(decNumber *)buft; // up-to-3-digit constant or work #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif do { // protect allocated storage #if DECSUBSET if (!set->extended) { // reduce operand and set lostDigits status, as needed if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, &status); if (allocrhs==NULL) break; // [Note: 'f' allocation below could reuse this buffer if // used, but as this is rare we keep them separate for clarity.] rhs=allocrhs; } } #endif // [following code does not require input rounding] // handle infinities and NaNs if (rhs->bits & DECSPECIAL) { if (decNumberIsInfinite(rhs)) { // an infinity if (decNumberIsNegative(rhs)) status|=DEC_Invalid_operation; else decNumberCopy(res, rhs); // +Infinity } else decNaNs(res, rhs, NULL, &status); // a NaN break; } // calculate the ideal (preferred) exponent [floor(exp/2)] // [We would like to write: ideal=rhs->exponent>>1, but this // generates a compiler warning. Generated code is the same.] ideal=(rhs->exponent&~1)/2; // target // handle zeros if (ISZERO(rhs)) { decNumberCopy(res, rhs); // could be 0 or -0 res->exponent=ideal; // use the ideal [safe] break; } // any other -x is an oops if (decNumberIsNegative(rhs)) { status|=DEC_Invalid_operation; break; } // we need space for three working variables // f -- the same precision as the RHS, reduced to 0.01->0.99... // a -- Hull's approx -- precision, when assigned, is // currentprecision (we allow +2 for use as temporary) // b -- intermediate temporary result // if any is too long for local storage, then allocate needbytes=sizeof(decNumber)+(D2U(rhs->digits)-1)*sizeof(Unit); if (needbytes>sizeof(buff)) { allocbuff=(decNumber *)malloc(needbytes); if (allocbuff==NULL) { // hopeless -- abandon status|=DEC_Insufficient_storage; break;} f=allocbuff; // use the allocated space } // a and b both need to be able to hold a maxp-length number needbytes=sizeof(decNumber)+(D2U(maxp)-1)*sizeof(Unit); if (needbytes>sizeof(bufa)) { // [same applies to b] allocbufa=(decNumber *)malloc(needbytes); allocbufb=(decNumber *)malloc(needbytes); if (allocbufa==NULL || allocbufb==NULL) { // hopeless status|=DEC_Insufficient_storage; break;} a=allocbufa; // use the allocated space b=allocbufb; // .. } // copy rhs -> f, save exponent, and reduce so 0.1 <= f < 1 decNumberCopy(f, rhs); exp=f->exponent+f->digits; // adjusted to Hull rules f->exponent=-(f->digits); // to range // set up working contexts (the second is used for Numerical // Turing assignment) decContextDefault(&workset, DEC_INIT_DECIMAL64); decContextDefault(&approxset, DEC_INIT_DECIMAL64); approxset.digits=set->digits; // approx's length // [Until further notice, no error is possible and status bits // (Rounded, etc.) should be ignored, not accumulated.] // Calculate initial approximation, and allow for odd exponent workset.digits=set->digits; // p for initial calculation t->bits=0; t->digits=3; a->bits=0; a->digits=3; if ((exp & 1)==0) { // even exponent // Set t=0.259, a=0.819 t->exponent=-3; a->exponent=-3; #if DECDPUN>=3 t->lsu[0]=259; a->lsu[0]=819; #elif DECDPUN==2 t->lsu[0]=59; t->lsu[1]=2; a->lsu[0]=19; a->lsu[1]=8; #else t->lsu[0]=9; t->lsu[1]=5; t->lsu[2]=2; a->lsu[0]=9; a->lsu[1]=1; a->lsu[2]=8; #endif } else { // odd exponent // Set t=0.0819, a=2.59 f->exponent--; // f=f/10 exp++; // e=e+1 t->exponent=-4; a->exponent=-2; #if DECDPUN>=3 t->lsu[0]=819; a->lsu[0]=259; #elif DECDPUN==2 t->lsu[0]=19; t->lsu[1]=8; a->lsu[0]=59; a->lsu[1]=2; #else t->lsu[0]=9; t->lsu[1]=1; t->lsu[2]=8; a->lsu[0]=9; a->lsu[1]=5; a->lsu[2]=2; #endif } decMultiplyOp(a, a, f, &workset, &ignore); // a=a*f decAddOp(a, a, t, &workset, 0, &ignore); // ..+t // [a is now the initial approximation for sqrt(f), calculated with // currentprecision, which is also a's precision.] // the main calculation loop decNumberZero(&dzero); // make 0 decNumberZero(t); // set t = 0.5 t->lsu[0]=5; // .. t->exponent=-1; // .. workset.digits=3; // initial p for (;;) { // set p to min(2*p - 2, maxp) [hence 3; or: 4, 6, 10, ... , maxp] workset.digits=workset.digits*2-2; if (workset.digits>maxp) workset.digits=maxp; // a = 0.5 * (a + f/a) // [calculated at p then rounded to currentprecision] decDivideOp(b, f, a, &workset, DIVIDE, &ignore); // b=f/a decAddOp(b, b, a, &workset, 0, &ignore); // b=b+a decMultiplyOp(a, b, t, &workset, &ignore);// a=b*0.5 // assign to approx [round to length] decAddOp(a, &dzero, a, &approxset, 0, &ignore); if (workset.digits==maxp) break; // just did final } // loop // a is now at currentprecision and within 1 ulp of the properly // rounded square root of f; to ensure proper rounding, compare // squares of (a - l/2 ulp) and (a + l/2 ulp) with f. // Here workset.digits=maxp and t=0.5 workset.digits--; // maxp-1 is OK now t->exponent=-set->digits-1; // make 0.5 ulp decNumberCopy(b, a); decAddOp(b, b, t, &workset, DECNEG, &ignore); // b = a - 0.5 ulp workset.round=DEC_ROUND_UP; decMultiplyOp(b, b, b, &workset, &ignore); // b = mulru(b, b) decNumberCompare(b, f, b, &workset); // b ? f, reversed if (decNumberIsNegative(b)) { // f < b [i.e., b > f] // this is the more common adjustment, though both are rare t->exponent++; // make 1.0 ulp t->lsu[0]=1; // .. decAddOp(a, a, t, &workset, DECNEG, &ignore); // a = a - 1 ulp // assign to approx [round to length] decAddOp(a, &dzero, a, &approxset, 0, &ignore); } else { decNumberCopy(b, a); decAddOp(b, b, t, &workset, 0, &ignore); // b = a + 0.5 ulp workset.round=DEC_ROUND_DOWN; decMultiplyOp(b, b, b, &workset, &ignore);// b = mulrd(b, b) decNumberCompare(b, b, f, &workset); // b ? f if (decNumberIsNegative(b)) { // b < f t->exponent++; // make 1.0 ulp t->lsu[0]=1; // .. decAddOp(a, a, t, &workset, 0, &ignore);// a = a + 1 ulp // assign to approx [round to length] decAddOp(a, &dzero, a, &approxset, 0, &ignore); } } // [no errors are possible in the above, and rounding/inexact during // estimation are irrelevant, so status was not accumulated] // Here, 0.1 <= a < 1 [Hull] a->exponent+=exp/2; // set correct exponent // Process Subnormals decFinalize(a, set, &residue, &status); // count dropable zeros [after any subnormal rounding] decNumberCopy(b, a); decTrim(b, 1, &dropped); // [drops trailing zeros] // Finally set Inexact and Rounded. The answer can only be exact if // it is short enough so that squaring it could fit in set->digits, // so this is the only (relatively rare) time we have to check // carefully if (b->digits*2-1 > set->digits) { // cannot fit status|=DEC_Inexact|DEC_Rounded; } else { // could be exact/unrounded uInt mstatus=0; // local status decMultiplyOp(b, b, b, &workset, &mstatus); // try the multiply if (mstatus!=0) { // result won't fit status|=DEC_Inexact|DEC_Rounded; } else { // plausible decNumberCompare(t, b, rhs, &workset); // b ? rhs if (!ISZERO(t)) { status|=DEC_Inexact|DEC_Rounded; } else { // is Exact // here, dropped is the count of trailing zeros in 'a' // use closest exponent to ideal... Int todrop=ideal-a->exponent; // most we can drop if (todrop<0) { // ideally would add 0s status|=DEC_Rounded; } else { // unrounded if (dropped0) { // OK, some to drop decShiftToLeast(a->lsu, D2U(a->digits), todrop); a->exponent+=todrop; // maintain numerical value a->digits-=todrop; // new length } } } } } decNumberCopy(res, a); // assume this is the result } while(0); // end protected if (allocbuff!=NULL) free(allocbuff); // drop any storage we used if (allocbufa!=NULL) free(allocbufa); // .. if (allocbufb!=NULL) free(allocbufb); // .. if (allocrhs !=NULL) free(allocrhs); // .. if (status!=0) decStatus(res, status, set);// then report status return res; }*/ /* decNumberSquareRoot */ // ---------------------------------------------------------------------- // Hyperbolic Functions // ---------------------------------------------------------------------- decNumber* decNumberSinh (decNumber *result, decNumber *x, decContext *set) { // sinh x = (e^x - e^-x)/2 decNumber ex, emx, mx, two; decNumberExp (&ex, x, set); decNumberMinus (&mx, x, set); decNumberExp (&emx, &mx, set); decNumberSubtract (result, &ex, &emx, set); decNumberFromString (&two, "2", set); decNumberDivide (result, result, &two, set); return result; } decNumber* decNumberCosh (decNumber *result, decNumber *x, decContext *set) { // cosh x = (e^x + e^-x)/2 decNumber ex, emx, mx, two; decNumberExp (&ex, x, set); decNumberMinus (&mx, x, set); decNumberExp (&emx, &mx, set); decNumberAdd (result, &ex, &emx, set); decNumberFromString (&two, "2", set); decNumberDivide (result, result, &two, set); return result; } /* decNumberCosh */ decNumber* decNumberTanh (decNumber *result, decNumber *x, decContext *set) { // tanh x = sinh x / cosh x = (e^x - e^-x) / (e^x + e^-x) decNumber ex, emx, mx, denominator; decNumberExp (&ex, x, set); decNumberMinus (&mx, x, set); decNumberExp (&emx, &mx, set); decNumberSubtract (result, &ex, &emx, set); decNumberAdd (&denominator, &ex, &emx, set); decNumberDivide (result, result, &denominator, set); return result; } /* decNumberTanh */ // ---------------------------------------------------------------------- // Trigonometric Functions // ---------------------------------------------------------------------- decNumber* decNumberSin (decNumber *_result, decNumber *y, decContext *set) { decNumber pi, pi2, zero, one, two, x, fctl, term, cmp, result; int i; int negate = 0; DEC_STASH_CONTEXT (set, &zero); decNumberFromString (&one, "1", set); decNumberFromString (&two, "2", set); decNumberFromString (&pi, PI , set); // Copy the argument y, so we can modify it. decNumberCopy (&x, y); // sin -x = - sin x /* if (decCompare (&x, &zero) < 0) { */ if (decNumberIsNegative (&x)) { // x < 0 decNumberMinus (&x, &x, set); negate = 1; } // We now have x >= 0 decNumberMultiply (&pi2, &pi, &two, set); // pi2 = 2*pi decNumberMod (&x, &x, &pi2, set); // We now have 0 <= x < 2*pi /*if (decCompare (&x, &pi) >= 0) {*/ decNumberCompare (&cmp, &x, &pi, set); if (!decNumberIsNegative (&cmp)) { // x >= pi decNumberSubtract (&x, &x, &pi, set); negate = 1-negate; } // We now have 0 <= x < pi decNumberDivide (&pi2, &pi, &two, set); // pi2 = pi/2 /*if (decCompare (&x, &pi2) >= 0) {*/ decNumberCompare (&cmp, &x, &pi2, set); if (!decNumberIsNegative (&cmp)) { // x >= pi/2, so let x = pi-x decNumberSubtract (&x, &pi, &x, set); } // We now have 0 <= x <= pi/2. // x^3 x^5 x^7 // sin x = x - --- + --- - ---- + ... // 6 120 5040 // // term(0) = x // term(i) = - term(i-1) * x^2 / ((2*i)*(2*i+1)) decNumberCopy (&fctl, &one); decNumberCopy (&term, &x); decNumberCopy (&result, &x); // DECNUMDIGITS+3 terms are enough to achieve the required precision. for (i=0; i= 0 decNumberMultiply (&pi2, &pi, &two, set); // pi2 = 2*pi decNumberMod (&x, &x, &pi2, set); // We now have 0 <= x < 2*pi /*if (decCompare (&x, &pi) >= 0) {*/ decNumberCompare (&cmp, &x, &pi, set); if (!decNumberIsNegative (&cmp)) { // x >= pi decNumberSubtract (&x, &pi2, &x, set); } // We now have 0 <= x < pi decNumberDivide (&pi2, &pi, &two, set); // pi2 = pi/2 /*if (decCompare (&x, &pi2) >= 0) {*/ decNumberCompare (&cmp, &x, &pi2, set); if (!decNumberIsNegative (&cmp)) { // x >= pi/2, so let x = pi-x decNumberSubtract (&x, &pi, &x, set); negate = 1; } // We now have 0 <= x <= pi/2. // x^2 x^4 x^6 // cos x = 1 - --- + --- - --- + ... // 2 24 720 // // term(0) = 1 // term(i) = - term(i-1) * x^2 / ((2*i-1)*(2*i)) decNumberCopy (&term, &one); decNumberCopy (&result, &one); decNumberCopy (&fctl, &one); // DECNUMDIGITS+3 terms are enough to achieve the required precision. for (i=0; i/include/dfp/ libdfp-1.0.17/dfp/bits/000077500000000000000000000000001504475242000145555ustar00rootroot00000000000000libdfp-1.0.17/dfp/bits/dfp_dmathcalls.h000066400000000000000000000130101504475242000176660ustar00rootroot00000000000000/* Macros for declaring _DecimalN functions Copyright (C) 2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* No guarantees are made about the macros in this header. Use it directly at your own risk!. */ __DECL_D(acos, (__DECIMAL), __THROW) __DECL_D(acosh, (__DECIMAL), __THROW) __DECL_D(asin, (__DECIMAL), __THROW) __DECL_D(asinh, (__DECIMAL), __THROW) __DECL_D(atan, (__DECIMAL), __THROW) __DECL_D(atan2, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(atanh, (__DECIMAL), __THROW) __DECL_D(cbrt, (__DECIMAL), __THROW) __DECL_D(cos, (__DECIMAL), __THROW) __DECL_D(cosh, (__DECIMAL), __THROW) __DECL_D(drem, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(erf, (__DECIMAL), __THROW) __DECL_D(erfc, (__DECIMAL), __THROW) __DECL_D(exp, (__DECIMAL), __THROW) __DECL_D(exp2, (__DECIMAL), __THROW) __DECL_D(expm1, (__DECIMAL), __THROW) __DECL_D(fdim, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(fma, (__DECIMAL, __DECIMAL, __DECIMAL), __THROW) __DECL_D(fmax, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(fmin, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(fmod, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(frexp, (__DECIMAL, int*), __THROW) __DECL_D(gamma, (__DECIMAL), __THROW) __DECL_D(hypot, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(j0, (__DECIMAL), __THROW) __DECL_D(j1, (__DECIMAL), __THROW) __DECL_D(jn, (int, __DECIMAL), __THROW) __DECL_D(ldexp, (__DECIMAL, int), __THROW) __DECL_D(lgamma, (__DECIMAL), __THROW) __DECL_D_R(lgamma, (__DECIMAL, int*), __THROW, _r) __DECL_D(log, (__DECIMAL), __THROW) __DECL_D(log10, (__DECIMAL), __THROW) __DECL_D(log1p, (__DECIMAL), __THROW) __DECL_D(log2, (__DECIMAL), __THROW) __DECL_D(logb, (__DECIMAL), __THROW) __DECL_D(modf, (__DECIMAL, __DECIMAL*), __THROW) __DECL_D(nearbyint, (__DECIMAL), __THROW) __DECL_D(pow, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(quantize, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(quantum, (__DECIMAL), __THROW) __DECL_D(remainder, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(remquo, (__DECIMAL, __DECIMAL, int*), __THROW) __DECL_D(rint, (__DECIMAL), __THROW) __DECL_D(scalb, (__DECIMAL, __DECIMAL), __THROW) __DECL_D(scalbln, (__DECIMAL, long int), __THROW) __DECL_D(scalbn, (__DECIMAL, int), __THROW) __DECL_D(significand, (__DECIMAL), __THROW) __DECL_D(sin, (__DECIMAL), __THROW) __DECL_D(sinh, (__DECIMAL), __THROW) __DECL_D(sqrt, (__DECIMAL), __THROW) __DECL_D(tan, (__DECIMAL), __THROW) __DECL_D(tanh, (__DECIMAL), __THROW) __DECL_D(tgamma, (__DECIMAL), __THROW) __DECL_D(y0, (__DECIMAL), __THROW) __DECL_D(y1, (__DECIMAL), __THROW) __DECL_D(yn, (int, __DECIMAL), __THROW) #ifdef __STDC_WANT_IEC_60559_DFP_EXT__ __DECL_D(fmaxmag, (__DECIMAL, __DECIMAL), __THROW __attribute_const__) __DECL_D(fminmag, (__DECIMAL, __DECIMAL), __THROW __attribute_const__) __DECL_D(nextdown, (__DECIMAL), __THROW __attribute_const__) __DECL_D(nextup, (__DECIMAL), __THROW __attribute_const__) #endif __DECL_D(ceil, (__DECIMAL), __THROW __attribute_const__) __DECL_D(copysign, (__DECIMAL, __DECIMAL), __THROW __attribute_const__) __DECL_D(fabs, (__DECIMAL), __THROW __attribute_const__) __DECL_D(floor, (__DECIMAL), __THROW __attribute_const__) __DECL_D(nan, (__const char *), __THROW __attribute_const__) __DECL_D(nextafter, (__DECIMAL, __DECIMAL), __THROW __attribute_const__) __DECL_D(nexttoward, (__DECIMAL, _Decimal128), __THROW __attribute_const__) __DECL_D(round, (__DECIMAL), __THROW __attribute_const__) __DECL_D(roundeven, (__DECIMAL), __THROW __attribute_const__) __DECL_D(trunc, (__DECIMAL), __THROW __attribute_const__) __DECL_D_O(int, fpclassify, (__DECIMAL), __THROW __attribute_const__) __DECL_D_O(int, isfinite, (__DECIMAL), __THROW __attribute_const__) __DECL_D_O(int, isinf, (__DECIMAL), __THROW __attribute_const__) __DECL_D_O(int, isnan, (__DECIMAL), __THROW __attribute_const__) __DECL_D_O(int, issignaling, (__DECIMAL), __THROW __attribute_const__) /* Deprecated but older uses of math.h may have invocations of these if they * used the polymorphic finite(). */ __DECL_D_O(int, finite, (__DECIMAL), __THROW __attribute_const__) __DECL_D_O(int, ilogb, (__DECIMAL), __THROW) __DECL_D_O(long int, llogb, (__DECIMAL), __THROW) __DECL_D_O(long long int, llquantexp, (__DECIMAL), __THROW) __DECL_D_O(long int, lrint, (__DECIMAL), __THROW) __DECL_D_O(long int, lround, (__DECIMAL), __THROW) __DECL_D_O(long long int, llrint, (__DECIMAL), __THROW) __DECL_D_O(long long int, llround, (__DECIMAL), __THROW) __DECL_D_O(_Bool, samequantum, (__DECIMAL, __DECIMAL), __THROW) __DECL_D_CMP(__signbit, (__DECIMAL)) __DECL_D_CMP(isgreater, (__DECIMAL, __DECIMAL)) __DECL_D_CMP(isgreaterequal, (__DECIMAL, __DECIMAL)) __DECL_D_CMP(isless, (__DECIMAL, __DECIMAL)) __DECL_D_CMP(islessequal, (__DECIMAL, __DECIMAL)) __DECL_D_CMP(islessgreater, (__DECIMAL, __DECIMAL)) __DECL_D_CMP(isnormal, (__DECIMAL)) __DECL_D_CMP(isunordered, (__DECIMAL, __DECIMAL)) libdfp-1.0.17/dfp/decimal/000077500000000000000000000000001504475242000152125ustar00rootroot00000000000000libdfp-1.0.17/dfp/decimal/decimal000066400000000000000000000166151504475242000165440ustar00rootroot00000000000000/* for libdfp and redirect to system Copyright (C) 2011-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _LIBDFP_DECIMAL_H #define _LIBDFP_DECIMAL_H 1 #ifdef _GLIBCXX_DECIMAL_IMPL # error "dfp/ should be #included before the system header." #endif #ifdef __cplusplus /* This needs to be declared before #include_next so that * _Decimal types are declared when the system pulls in * other headers which are overloaded by libdfp, e.g., wchar.h. */ #include /* Pick up _Decimal[32|64|128] typedefs. */ /* Pick up the system . Since C++ DFP support is currently only a * technical report the decimal header is in the non-default search path so * must be used. */ #include_next using namespace std::decimal; #pragma GCC system_header #include using std::ostream; #include using std::istream; #include using std::string; #include using namespace std; #include /* Pick up the strtod[32|64|128] prototypes. */ #include /* Pick up the sprintf prototype. */ #include /* For CHAR_MAX. */ #include /* For memset. */ template struct FIND_DEC_MANT_DIG { enum {RESULT = 0}; static inline std::string get_fmt(char conv) { std::string spec = ""; return spec; } }; template <> struct FIND_DEC_MANT_DIG<4> { enum {RESULT = (__DEC32_MANT_DIG__) }; static inline std::string get_fmt(char conv) { std::string spec = "H"; return spec.append(1,conv); } }; template <> struct FIND_DEC_MANT_DIG<8> { enum {RESULT = (__DEC64_MANT_DIG__) }; static inline std::string get_fmt(char conv) { std::string spec = "D"; return spec.append(1,conv); } }; template <> struct FIND_DEC_MANT_DIG<16> { enum {RESULT = (__DEC128_MANT_DIG__) }; static inline std::string get_fmt(char conv) { std::string spec = "DD"; return spec.append(1,conv); } }; /* Template meta-programming so we only have to write this code once for use * with each of the _Decimal[32|64|128] types. */ template class LIBDFP_META { private: public: static inline ostream & decimal_to_string(std::ostream &os, decimal_type &d) { /* If strbuf is big enough for a _Decimal128, it is big enough for the * other types as well, so just use the same size for all of them. * 1 (leading zero) * + 1 (.) * + 34 (__DEC128_MANT_DIG__) * + 1 (e) * + 1 (+/-) * + 4 (digits in __DEC128_MAX_EXP__) * + 1 "\n" * = 43 -> round up to a power of 2 = 64. */ char strbuf[64]; ios_base::fmtflags flags = os.flags(); unsigned int precision = os.precision(); /* Anything over DEC_MANT_DIG can't be represented anyway. */ if (precision > DEC_MANT_DIG) precision = DEC_MANT_DIG; char conv = 'g'; std::string fmtstr = "%"; /* A strict reading of the draft DFP C++ spec indicates that a/A conv specifier can't be accompanied by a precision specifier. */ if (flags & ios::fixed && flags & ios::scientific) conv = flags & ios::uppercase ? 'A' : 'a'; else { if (flags & ios::fixed) /* Only used for "NAN" and "INF" rather than "nan" and "inf" for * "%.*Df". */ conv = flags & ios::uppercase ? 'F' : 'f'; else if (flags & ios::scientific) conv = flags & ios::uppercase ? 'E' : 'e'; else if (flags & ios::uppercase) conv = 'G'; fmtstr.append(".*"); } /* Get the conv spec and length modifier based on size of the type. */ fmtstr.append(FIND_DEC_MANT_DIG<(sizeof(decimal_type))>::get_fmt(conv)); /* Per the confusing reading of the draft DFP C++ Specification, a/A type are never passed with an accompanying precision. This causes the implicit precision in the type to be used for printing. */ if (flags & ios::fixed && flags & ios::scientific) sprintf (strbuf, fmtstr.c_str(), d.__getval()); else sprintf (strbuf, fmtstr.c_str(), precision, d.__getval()); os << strbuf; return os; } enum {DEC_MANT_DIG = FIND_DEC_MANT_DIG<(sizeof(decimal_type))>::RESULT}; }; /* Per ISO/IEC JTC1 SC22 WG21 N2732 - TR 24733: "Extension for the programming * language C++ to support decimal floating point arithmetic" define the * ostream and istream operators. These are included in libdfp and NOT * libstdc++ because the ostream and istream operators rely upon libdfp * printf and strtod[32|64|128] support provided by libdfp. */ namespace std { namespace decimal { //ISO/IEC TR 24733 - 3.2.11 Formatted output: template inline std::basic_ostream & operator<<(std::basic_ostream & os, decimal32 d) { LIBDFP_META::decimal_to_string(os, d); return os; } template inline std::basic_ostream & operator<<(std::basic_ostream & os, decimal64 d) { LIBDFP_META::decimal_to_string(os, d); return os; } template inline std::basic_ostream & operator<<(std::basic_ostream & os, decimal128 d) { LIBDFP_META::decimal_to_string(os, d); return os; } // ISO/IEC TR 27433 - 3.2.11 Formatted input: template inline std::basic_istream & operator>>(std::basic_istream & is, decimal32 & d) { char buf[CHAR_MAX]; memset(buf, '\0', CHAR_MAX); is.read(buf,CHAR_MAX); d.__setval(strtod32(buf, NULL)); return is; } template inline std::basic_istream & operator>>(std::basic_istream & is, decimal64 & d) { char buf[CHAR_MAX]; memset(buf, '\0', CHAR_MAX); is.read(buf,CHAR_MAX); d.__setval(strtod64(buf, NULL)); return is; } template inline std::basic_istream & operator>>(std::basic_istream & is, decimal128 & d) { char buf[CHAR_MAX]; memset(buf, '\0', CHAR_MAX); is.read(buf,CHAR_MAX); d.__setval(strtod128(buf, NULL)); return is; } } /* namespace decimal */ } /* namespace std */ #else # warning "dfp/ should only be #included by C++ programs." #endif /* __cplusplus */ #endif /* _LIBDFP_DECIMAL_H */ libdfp-1.0.17/dfp/fenv.h000066400000000000000000000047011504475242000147250ustar00rootroot00000000000000/* fenv.h for libdfp and redirect to system fenv.h. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DFP_FENV_H #define _DFP_FENV_H 1 /* #ifdef _FENV_H # error "dfp/ should be included before the system fenv.h." #endif */ #ifdef __STDC_WANT_DEC_FP__ #include /* Power6[x] chips support all five of the defined rounding modes [and then * some]. We use the bit pattern in the Power6[x] FPSCR as the values for the * appropriate macros. In order to map these to decNumber rounding modes a * conversion will have to take place. */ enum { /* Corresponds to DEC_ROUND_* */ FE_DEC_TONEAREST = /* DEC_ROUND_HALF_EVEN : 3 */ #define FE_DEC_TONEAREST 0 FE_DEC_TONEAREST, FE_DEC_TOWARDZERO = /* DEC_ROUND_DOWN : 5 */ #define FE_DEC_TOWARDZERO 1 FE_DEC_TOWARDZERO, FE_DEC_UPWARD = /* DEC_ROUND_CEILING : 0 */ #define FE_DEC_UPWARD 2 FE_DEC_UPWARD, FE_DEC_DOWNWARD = /* DEC_ROUND_FLOOR : 6 */ #define FE_DEC_DOWNWARD 3 FE_DEC_DOWNWARD, FE_DEC_TONEARESTFROMZERO = /* DEC_ROUND_HALF_UP : 2 */ #define FE_DEC_TONEARESTFROMZERO 4 FE_DEC_TONEARESTFROMZERO, }; __BEGIN_DECLS /* Establish the rounding direction for decimal floating point operations */ extern int fe_dec_setround(int __rounding_direction) __THROW; /* Get current decimal floating point rounding direction. */ extern int fe_dec_getround(void) __THROW; __END_DECLS #endif /* __STDC_WANT_DEC_FP__ */ #endif /* _DFP_FENV_H */ /* Pick up the system fenv.h. */ #include_next libdfp-1.0.17/dfp/float.h000066400000000000000000000042301504475242000150710ustar00rootroot00000000000000/* for libdfp and redirect to system Copyright (C) 2011-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* This uses a bit of circular including in order to get std::decimal defined. * without error such that we can typedef _Decimal types to decimal types. */ #include_next #ifndef _LIBDFP_FLOAT_H #define _LIBDFP_FLOAT_H 1 #pragma GCC system_header #ifdef __cplusplus /* If _Decimal64 is defined we don't need to do any of this. */ #ifndef _Decimal64 /* Per ISO/IEC TR 24733 the following typedefs SHOULD be defined in float.h * * typedef std::decimal::decimal32 _Decimal32; * typedef std::decimal::decimal64 _Decimal64; * typedef std::decimal::decimal128 _Decimal128; * * Depending on the compiler version they may NOT be, so we'll define them * as a service if they are not defined in the system float.h. */ /* Because of how these are declared in the system decimal/decimal header the * declarations specified by the TR don't work. We need to define these in * the same way decimal/decimal does for compatibility. */ typedef float _Decimal32 __attribute__((mode(SD))); typedef float _Decimal64 __attribute__((mode(DD))); typedef float _Decimal128 __attribute__((mode(TD))); #endif /* _Decimal64 */ #endif /* __cplusplus */ #endif /* _LIBDFP_FLOAT_H */ libdfp-1.0.17/dfp/math.h000066400000000000000000000150751504475242000147260ustar00rootroot00000000000000/* math.h for libdfp and redirect to system math.h. This also replaces the system math.h classification macros. Copyright (C) 2006 IBM Corporation. Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DFP_MATH_H #define _DFP_MATH_H 1 #ifdef _MATH_H # error "dfp/ should be included before the system math.h." #endif /* Include the system math.h first so that we can undef and redefine the * classification functions to select for _Decimal[32|64|128] types. */ #include_next /* Include this after the #include_next so that if the user has * -I//include/dfp/ on their compilation line but doesn't define * __STDC_WANT_DEC_FPP that they still get the system math.h. */ #ifdef __STDC_WANT_DEC_FP__ #include /* math.h provides prototypes for the classification macros below. */ #include #define DEC_INFINITY __builtin_infd32() #define DEC_NAN __builtin_nand32("") #define HUGE_VAL_D32 __builtin_infd32() #define HUGE_VAL_D64 __builtin_infd64() #define HUGE_VAL_D128 __builtin_infd128() /* Some useful constants for DFP support (with the DL specifier). Proper * truncation to DD and DF will be handled by GCC. */ #define M_Edl 2.71828182845904523536028747135266249DL /* e */ #define M_LOG2Edl 1.4426950408889634073599246810018921DL /* log_2 e */ #define M_LOG10Edl 0.4342944819032518276511289189166051DL /* log_10 e */ #define M_LN2dl 0.6931471805599453094172321214581766DL /* log_e 2 */ #define M_LN10dl 2.3025850929940456840179914546843642DL /* log_e 10 */ #define M_PIdl 3.1415926535897932384626433832795029DL /* pi */ #define M_PI_2dl 1.5707963267948966192313216916397514DL /* pi/2 */ #define M_PI_4dl 0.7853981633974483096156608458198757DL /* pi/4 */ #define M_1_PIdl 0.3183098861837906715377675267450287DL /* 1/pi */ #define M_2_PIdl 0.6366197723675813430755350534900574DL /* 2/pi */ #define M_2_SQRTPIdl 1.1283791670955125738961589031215452DL /* 2/sqrt(pi) */ #define M_SQRT2dl 1.4142135623730950488016887242096981DL /* sqrt(2) */ #define M_SQRT1_2dl 0.7071067811865475244008443621048490DL /* 1/sqrt(2) */ #define __DECL_D(f, a, attr) __DECL_D_X(__DECIMAL, f, a, attr, __DECIMALN, ) #define __DECL_D_R(f, a, attr, r) __DECL_D_X(__DECIMAL, f, a, attr, __DECIMALN, r) #define __DECL_D_O(rtn, f, a, attr) __DECL_D_X(rtn, f, a, attr, __DECIMALN, ) #define __DECL_D_X(rtn, f, a, attr, n, r) __DECL_D_X2(rtn, f, a, attr, n, r) #define __DECL_D_X2(rtn, f, a, attr, n, r) \ extern rtn f ## d ## n ## r a attr; \ extern rtn __ ## f ## d ## n ## r a attr; #define __DECL_D_CMP(f,a) __DECL_D_CMP_X(f,a,__DECIMALN) #define __DECL_D_CMP_X(f,a,n) __DECL_D_CMP_X2(f,a,n) #define __DECL_D_CMP_X2(f,a,n) extern int f ## d ## n a __THROW __attribute_const__; #ifndef __attribute_const__ #define __attribute__ ((__const__)) #endif __BEGIN_DECLS #define __DECIMAL _Decimal32 #define __DECIMALN 32 #include #undef __DECIMAL #undef __DECIMALN #define __DECIMAL _Decimal64 #define __DECIMALN 64 #include #undef __DECIMAL #undef __DECIMALN #define __DECIMAL _Decimal128 #define __DECIMALN 128 #include #undef __DECIMAL #undef __DECIMALN __END_DECLS #undef __DECL_D #undef __DECL_D_R #undef __DECL_D_O #undef __DECL_D_X #undef __DECL_D_X2 #undef __DECL_D_CMP #undef __DECL_D_CMP_X #undef __DECL_D_CMP_X2 /* This method works for both the GCC and the XLC compilers for detecting * whether a value is a Decimal Floating Point type. */ #define __dfp_compatible(X) ((_Decimal128)(__typeof__(X))1.E-50DL == 1.E-50DL) /* Override math.h classifications with our own. */ #undef fpclassify #undef signbit #undef isfinite #undef isnormal #undef isinf #undef fabs #undef isnan # ifdef __NO_LONG_DOUBLE_MATH # define __dfp_ldbl(f,x) f(x) # else # define __dfp_ldbl(f,x) (sizeof(x) == sizeof(double) ? f(x) : f ## l (x)) # endif # define __dfp_dN(f,x) (sizeof (x) == sizeof(_Decimal128) ? f ## d128 (x) : \ (sizeof (x) == sizeof(_Decimal64) ? f ## d64 (x) : f ## d32 (x))) /* Return number of classification appropriate for X. */ #define __dfp_fpclassify(x) \ (sizeof (x) == sizeof (float) \ ? __fpclassifyf (x) \ : __dfp_ldbl (__fpclassify, x)) #define __dfp_signbit(x) \ (sizeof (x) == sizeof (float) \ ? __signbitf (x) \ : __dfp_ldbl(__signbit, x)) #define __dfp_isfinite(x) \ (sizeof (x) == sizeof (float) \ ? __finitef (x) \ : __dfp_ldbl(__finite, x)) #define __dfp_isinf(x) \ (sizeof (x) == sizeof (float) \ ? __isinff (x) \ : __dfp_ldbl(__isinf, x)) #define __dfp_isnan(x) \ (sizeof (x) == sizeof (float) \ ? __isnanf (x) \ : __dfp_ldbl(__isnan, x)) /* A special case here. Older glibc may not support this. */ #ifdef issignaling #undef issignaling #define __dfp_issignaling(x) \ (sizeof (x) == sizeof (float) \ ? __issignalingf (x) \ : __dfp_ldbl(__issignaling, x)) #else #define __dfp_issignaling(x) x #endif #define fpclassify(x) \ (!__dfp_compatible(x) ? __dfp_fpclassify(x) : __dfp_dN(__fpclassify, x)) #define signbit(x) \ (!__dfp_compatible(x) ? __dfp_signbit(x) : __dfp_dN(__signbit, x)) #define isfinite(x) \ (!__dfp_compatible(x) ? __dfp_isfinite(x) : __dfp_dN(__isfinite, x)) #define isnormal(x) (fpclassify (x) == FP_NORMAL) #define isinf(x) \ (!__dfp_compatible(x)? __dfp_isinf(x) : __dfp_dN(__isinf, x)) #define isnan(x) \ (!__dfp_compatible(x) ? __dfp_isnan(x) : __dfp_dN(__isnan, x)) #define issignaling(x) \ (!__dfp_compatible(x) ? __dfp_issignaling(x) : __dfp_dN(__issignaling, x)) #endif /* __STDC_WANT_DEC_FP__ */ #endif /* _DFP_MATH_H */ libdfp-1.0.17/dfp/stdlib.h000066400000000000000000000047771504475242000152650ustar00rootroot00000000000000/* stdlib.h for libdfp and redirect to system stdlib.h Copyright (C) 2006 IBM Corporation. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DFP_STDLIB_H #define _DFP_STDLIB_H 1 #ifdef __STDC_WANT_DEC_FP__ #include #include __BEGIN_DECLS /* Convert a string to a _Decimal32 number. */ extern _Decimal32 strtod32 (__const char *__restrict __nptr, char **__restrict __endptr) __THROW __nonnull ((1)) __wur; /* Convert a string to a _Decimal64 number. */ extern _Decimal64 strtod64 (__const char *__restrict __nptr, char **__restrict __endptr) __THROW __nonnull ((1)) __wur; /* Convert a string to a _Decimal128 number. */ extern _Decimal128 strtod128 (__const char *__restrict __nptr, char **__restrict __endptr) __THROW __nonnull ((1)) __wur; __END_DECLS #endif /* __STDC_WANT_DEC_FP__ */ #if defined (__STDC_WANT_IEC_60559_DFP_EXT__) /* Convert a _Decimal32 to string. */ extern int strfromd32 (char * __restrict s, size_t n, const char * __restrict format, _Decimal32 fp) __THROW __nonnull ((3)) __wur; /* Convert a _Decimal64 to string. */ extern int strfromd64 (char * __restrict s, size_t n, const char * __restrict format, _Decimal64 fp) __THROW __nonnull ((3)) __wur; /* Convert a _Decimal128 to string. */ extern int strfromd128 (char * __restrict s, size_t n, const char * __restrict format, _Decimal128 fp) __THROW __nonnull ((3)) __wur; #endif #endif /* _DFP_STDLIB_H || __STDC_WANT_IEC_60559_DFP_EXT__ */ /* Pick up the system stdlib.h. */ #include_next libdfp-1.0.17/dfp/wchar.h000066400000000000000000000030701504475242000150710ustar00rootroot00000000000000/* wchar.h for libdfp and redirect to system wchar.h. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DFP_WCHAR_H #define _DFP_WCHAR_H 1 #ifdef __STDC_WANT_DEC_FP__ #include #include __BEGIN_DECLS extern _Decimal32 wcstod32 (__const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr) __THROW; extern _Decimal64 wcstod64 (__const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr) __THROW; extern _Decimal128 wcstod128 (__const wchar_t *__restrict __nptr, wchar_t **__restrict __endptr) __THROW; __END_DECLS #endif /* __STDC_WANT_DEC_FP__ */ #endif /* _DFP_WCHAR_H */ /* Pick up the system fenv.h. */ #include_next libdfp-1.0.17/generate-changelog.sh000077500000000000000000000016641504475242000171300ustar00rootroot00000000000000#!/bin/bash # # Generate markdown ChangeLog files based on git history. tmp=$(mktemp) touch ${tmp} # Commits prior to this one contain mangled commit history. # Reformatting these requires some extra handholding LASTCOMMIT="2d48e88ad67f600376926f073302b2617e49675c" prev_tag="$LASTCOMMIT" echo "# ChangeLog" for tag in $(git tag -l [0-9]*.*[0-9] | sort -V); do # Prepend tags to the output because we want the ChangeLog in the # reverse order, e.g. 2.0.0, 1.0.1 and 1.0.0. { date=$(git show --date=short --format='tformat:%cd' -s ${tag} | tail -n 1) echo -e "\n## ${tag} - ${date}\n" git --no-pager log --no-merges --format='format: - %s%n' \ ${prev_tag:+${prev_tag}..}${tag} | cat - ${tmp} } > ${tmp}.1 mv ${tmp}.1 ${tmp} prev_tag=${tag} done # Send the output to stdout. cat ${tmp} # Append a revised changelog for stuff prior to LASTCOMMIT in # consistent style with the generated comments cat ChangeLog.old.md rm ${tmp} libdfp-1.0.17/ieee754r/000077500000000000000000000000001504475242000143745ustar00rootroot00000000000000libdfp-1.0.17/ieee754r/Makefile000066400000000000000000000070451504475242000160420ustar00rootroot00000000000000# Copyright (C) 2015 Free Software Foundation, Inc. # # This file is part of the Decimal Floating Point C Library. # # The Decimal Floating Point C Library is free software; you can # redistribute it and/or modify it under the terms of the GNU Lesser # General Public License version 2.1. # # The Decimal Floating Point C 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 version 2.1 for more details. # # You should have received a copy of the GNU Lesser General Public # License version 2.1 along with the Decimal Floating Point C Library; # if not, write to the Free Software Foundation, Inc., 51 Franklin # Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Please see libdfp/COPYING.txt for more information. */ libdfp_files += acosd32 acosd64 acosd128 \ acoshd32 acoshd64 acoshd128 \ asind32 asind64 asind128 \ asinhd32 asinhd64 asinhd128 \ atan2d32 atan2d64 atan2d128 \ atand32 atand64 atand128 \ atanhd32 atanhd64 atanhd128 \ cbrtd32 cbrtd64 cbrtd128 \ ceild32 ceild64 ceild128 \ copysignd32 copysignd64 copysignd128 \ cosd32 cosd64 cosd128 \ coshd32 coshd64 coshd128 \ erfd32 erfd64 erfd128 \ exp2d32 exp2d64 exp2d128 \ expd32 expd64 expd128 \ expm1d32 expm1d64 expm1d128 \ fabsd32 fabsd64 fabsd128 \ fdimd32 fdimd64 fdimd128 \ isfinited32 isfinited64 isfinited128 \ issignalingd32 issignalingd64 issignalingd128 \ floord32 floord64 floord128 \ fmad32 fmad64 fmad128 \ fmaxd32 fmaxd64 fmaxd128 \ fmind32 fmind64 fmind128 \ fmodd32 fmodd64 fmodd128 \ fpclassifyd32 fpclassifyd64 fpclassifyd128 \ frexpd32 frexpd64 frexpd128 \ hypotd32 hypotd64 hypotd128 \ ilogbd32 ilogbd64 ilogbd128 \ llogbd32 llogbd64 llogbd128 \ isgreaterd32 isgreaterd64 isgreaterd128 \ isgreaterequald32 isgreaterequald64 isgreaterequald128 \ isinfd32 isinfd64 isinfd128 \ islessd32 islessd64 islessd128 \ islessequald32 islessequald64 islessequald128 \ islessgreaterd32 islessgreaterd64 islessgreaterd128 \ isnand32 isnand64 isnand128 \ isnormald32 isnormald64 isnormald128 \ isunorderedd32 isunorderedd64 isunorderedd128 \ ldexpd32 ldexpd64 ldexpd128 \ lgammad32 lgammad64 lgammad128 \ llquantexpd32 llquantexpd64 llquantexpd128 \ llrintd32 llrintd64 llrintd128 \ llroundd32 llroundd64 llroundd128 \ log10d32 log10d64 log10d128 \ log1pd32 log1pd64 log1pd128 \ log2d32 log2d64 log2d128 \ logbd32 logbd64 logbd128 \ logd32 logd64 logd128 \ lrintd32 lrintd64 lrintd128 \ lroundd32 lroundd64 lroundd128 \ modfd32 modfd64 modfd128 \ nand32 nand64 nand128 \ nearbyintd32 nearbyintd64 nearbyintd128 \ nextafterd32 nextafterd64 nextafterd128 \ nexttowardd32 nexttowardd64 nexttowardd128 \ powd32 powd64 powd128 \ quantized32 quantized64 quantized128 \ quantumd32 quantumd64 quantumd128 \ remainderd32 remainderd64 remainderd128 \ rintd32 rintd64 rintd128 \ roundd32 roundd64 roundd128 \ roundevend32 roundevend64 roundevend128 \ samequantumd32 samequantumd64 samequantumd128 \ scalblnd32 scalblnd64 scalblnd128 \ scalbnd32 scalbnd64 scalbnd128 \ signbitd32 signbitd64 signbitd128 \ sind32 sind64 sind128 \ sinhd32 sinhd64 sinhd128 \ sqrtd32 sqrtd64 sqrtd128 \ tand32 tand64 tand128 \ tanhd32 tanhd64 tanhd128 \ tgammad32 tgammad64 tgammad128 \ truncd32 truncd64 truncd128 \ fmaxmagd32 fmaxmagd64 fmaxmagd128 \ fminmagd32 fminmagd64 fminmagd128 \ nextupd32 nextupd64 nextupd128 \ nextdownd32 nextdownd64 nextdownd128 libdfp-1.0.17/ieee754r/Versions000066400000000000000000000105201504475242000161250ustar00rootroot00000000000000libdfp { LIBDFP_1.0.0 { acosd32; acosd64; acosd128; acoshd32; acoshd64; acoshd128; asind32; asind64; asind128; asinhd32; asinhd64; asinhd128; atan2d32; atan2d64; atan2d128; atand32; atand64; atand128; atanhd32; atanhd64; atanhd128; cbrtd32; cbrtd64; cbrtd128; ceild32; ceild64; ceild128; copysignd32; copysignd64; copysignd128; cosd32; cosd64; cosd128; coshd32; coshd64; coshd128; erfd32; erfd64; erfd128; erfcd32; erfcd64; erfcd128; exp2d32; exp2d64; exp2d128; expd32; expd64; expd128; expm1d32; expm1d64; expm1d128; fabsd32; fabsd64; fabsd128; fdimd32; fdimd64; fdimd128; finited32; finited64; finited128; floord32; floord64; floord128; fmad32; fmad64; fmad128; fmaxd32; fmaxd64; fmaxd128; fmind32; fmind64; fmind128; fmodd32; fmodd64; fmodd128; fpclassifyd32; fpclassifyd64; fpclassifyd128; frexpd32; frexpd64; frexpd128; hypotd32; hypotd64; hypotd128; ilogbd32; ilogbd64; ilogbd128; isgreaterd32; isgreaterd64; isgreaterd128; isgreaterequald32; isgreaterequald64; isgreaterequald128; isinfd32; isinfd64; isinfd128; islessd32; islessd64; islessd128; islessequald32; islessequald64; islessequald128; islessgreaterd32; islessgreaterd64; islessgreaterd128; isnand32; isnand64; isnand128; isnormald32; isnormald64; isnormald128; isunorderedd32; isunorderedd64; isunorderedd128; ldexpd32; ldexpd64; ldexpd128; lgammad32; lgammad64; lgammad128; llrintd32; llrintd64; llrintd128; llroundd32; llroundd64; llroundd128; log10d32; log10d64; log10d128; log1pd32; log1pd64; log1pd128; log2d32; log2d64; log2d128; logbd32; logbd64; logbd128; logd32; logd64; logd128; lrintd32; lrintd64; lrintd128; lroundd32; lroundd64; lroundd128; modfd32; modfd64; modfd128; nand32; nand64; nand128; nearbyintd32; nearbyintd64; nearbyintd128; nextafterd32; nextafterd64; nextafterd128; nexttowardd32; nexttowardd64; nexttowardd128; powd32; powd64; powd128; quantized32; quantized64; quantized128; remainderd32; remainderd64; remainderd128; rintd32; rintd64; rintd128; roundd32; roundd64; roundd128; samequantumd32; samequantumd64; samequantumd128; scalblnd32; scalblnd64; scalblnd128; scalbnd32; scalbnd64; scalbnd128; signbitd32; signbitd64; signbitd128; sind32; sind64; sind128; sinhd32; sinhd64; sinhd128; sqrtd32; sqrtd64; sqrtd128; tand32; tand64; tand128; tanhd32; tanhd64; tanhd128; tgammad32; tgammad64; tgammad128; truncd32; truncd64; truncd128; } LIBDFP_1.0.2 { __isnand32; __isnand64; __isnand128; __isinfd32; __isinfd64; __isinfd128; } LIBDFP_1.0.3 { # finited* and friends is deprecated but at some point we published math.h # with polymorphic isfinite() pointing to them so keep them around. They # are just aliases. __finited32; __finited64; __finited128; isfinited32; isfinited64; isfinited128; __isfinited32; __isfinited64; __isfinited128; # Polymorphic signbit support. __signbitd32; __signbitd64; __signbitd128; __fabsd32; __fabsd64; __fabsd128; __fpclassifyd32; __fpclassifyd64; __fpclassifyd128; } LIBDFP_1.0.9 { issignalingd32; __issignalingd32; issignalingd64; __issignalingd64; issignalingd128; __issignalingd128; llogbd32; llogbd64; llogbd128; llquantexpd32; llquantexpd64; llquantexpd128; roundevend32; roundevend64; roundevend128; quantumd32; quantumd64; quantumd128; } LIBDFP_1.0.15 { fmaxmagd32; fmaxmagd64; fmaxmagd128; fminmagd32; fminmagd64; fminmagd128; nextdownd128; nextdownd32; nextdownd64; nextupd128; nextupd32; nextupd64; } } libdfp-1.0.17/ieee754r/acosd128.c000066400000000000000000000021121504475242000160600ustar00rootroot00000000000000/* Calculates the arccos(x) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "acosd32.c" libdfp-1.0.17/ieee754r/acosd32.c000066400000000000000000000246651504475242000160130ustar00rootroot00000000000000/* Calculates the arccos(x) Copyright (C) 2001 Stephen L. Moshier Copyright (C) 2006 IBM Corporation. Copyright (C) 2001-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include /* Portions of this code are: * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== * * This was adapted for glibc in 2001. * This was adapted for Libdfp in 2006, and those changes donated to the FSF in * 2007. * * __ieee754_acosl(x) * Method : * acos(x) = pi/2 - asin(x) * acos(-x) = pi/2 + asin(x) * For |x| <= 0.375 * acos(x) = pi/2 - asin(x) * Between .375 and .5 the approximation is * acos(0.4375 + x) = acos(0.4375) + x P(x) / Q(x) * Between .5 and .625 the approximation is * acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) * For x > 0.625, * acos(x) = 2 asin(sqrt((1-x)/2)) * computed with an extended precision square root in the leading term. * For x < -0.625 * acos(x) = pi - 2 asin(sqrt((1-|x|)/2)) * * Special cases: * if x is NaN, return x itself; * if |x|>1, return NaN with invalid signal. * * Functions needed: __ieee754_sqrtl. */ #ifdef __STDC__ static const _Decimal128 #else static _Decimal128 #endif one = 1.0DL, pio2_hi = 1.5707963267948966192313216916397514420986DL, pio2_lo = 4.3359050650618905123985220130216759843812E-35DL, /* acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) -0.0625 <= x <= 0.0625 peak relative error 3.3e-35 */ rS0 = 5.619049346208901520945464704848780243887E0DL, rS1 = -4.460504162777731472539175700169871920352E1DL, rS2 = 1.317669505315409261479577040530751477488E2DL, rS3 = -1.626532582423661989632442410808596009227E2DL, rS4 = 3.144806644195158614904369445440583873264E1DL, rS5 = 9.806674443470740708765165604769099559553E1DL, rS6 = -5.708468492052010816555762842394927806920E1DL, rS7 = -1.396540499232262112248553357962639431922E1DL, rS8 = 1.126243289311910363001762058295832610344E1DL, rS9 = 4.956179821329901954211277873774472383512E-1DL, rS10 = -3.313227657082367169241333738391762525780E-1DL, sS0 = -4.645814742084009935700221277307007679325E0DL, sS1 = 3.879074822457694323970438316317961918430E1DL, sS2 = -1.221986588013474694623973554726201001066E2DL, sS3 = 1.658821150347718105012079876756201905822E2DL, sS4 = -4.804379630977558197953176474426239748977E1DL, sS5 = -1.004296417397316948114344573811562952793E2DL, sS6 = 7.530281592861320234941101403870010111138E1DL, sS7 = 1.270735595411673647119592092304357226607E1DL, sS8 = -1.815144839646376500705105967064792930282E1DL, sS9 = -7.821597334910963922204235247786840828217E-2DL, /* 1.000000000000000000000000000000000000000E0 */ acosr5625 = 9.7338991014954640492751132535550279812151E-1DL, pimacosr5625 = 2.1682027434402468335351320579240000860757E0DL, /* acos(0.4375 + x) = acos(0.4375) + x rS(x) / sS(x) -0.0625 <= x <= 0.0625 peak relative error 2.1e-35 */ P0 = 2.177690192235413635229046633751390484892E0DL, P1 = -2.848698225706605746657192566166142909573E1DL, P2 = 1.040076477655245590871244795403659880304E2DL, P3 = -1.400087608918906358323551402881238180553E2DL, P4 = 2.221047917671449176051896400503615543757E1DL, P5 = 9.643714856395587663736110523917499638702E1DL, P6 = -5.158406639829833829027457284942389079196E1DL, P7 = -1.578651828337585944715290382181219741813E1DL, P8 = 1.093632715903802870546857764647931045906E1DL, P9 = 5.448925479898460003048760932274085300103E-1DL, P10 = -3.315886001095605268470690485170092986337E-1DL, Q0 = -1.958219113487162405143608843774587557016E0DL, Q1 = 2.614577866876185080678907676023269360520E1DL, Q2 = -9.990858606464150981009763389881793660938E1DL, Q3 = 1.443958741356995763628660823395334281596E2DL, Q4 = -3.206441012484232867657763518369723873129E1DL, Q5 = -1.048560885341833443564920145642588991492E2DL, Q6 = 6.745883931909770880159915641984874746358E1DL, Q7 = 1.806809656342804436118449982647641392951E1DL, Q8 = -1.770150690652438294290020775359580915464E1DL, Q9 = -5.659156469628629327045433069052560211164E-1DL, /* 1.000000000000000000000000000000000000000E0 */ acosr4375 = 1.1179797320499710475919903296900511518755E0DL, pimacosr4375 = 2.0236129215398221908706530535894517323217E0DL, /* asin(x) = x + x^3 pS(x^2) / qS(x^2) 0 <= x <= 0.5 peak relative error 1.9e-35 */ pS0 = -8.358099012470680544198472400254596543711E2DL, pS1 = 3.674973957689619490312782828051860366493E3DL, pS2 = -6.730729094812979665807581609853656623219E3DL, pS3 = 6.643843795209060298375552684423454077633E3DL, pS4 = -3.817341990928606692235481812252049415993E3DL, pS5 = 1.284635388402653715636722822195716476156E3DL, pS6 = -2.410736125231549204856567737329112037867E2DL, pS7 = 2.219191969382402856557594215833622156220E1DL, pS8 = -7.249056260830627156600112195061001036533E-1DL, pS9 = 1.055923570937755300061509030361395604448E-3DL, qS0 = -5.014859407482408326519083440151745519205E3DL, qS1 = 2.430653047950480068881028451580393430537E4DL, qS2 = -4.997904737193653607449250593976069726962E4DL, qS3 = 5.675712336110456923807959930107347511086E4DL, qS4 = -3.881523118339661268482937768522572588022E4DL, qS5 = 1.634202194895541569749717032234510811216E4DL, qS6 = -4.151452662440709301601820849901296953752E3DL, qS7 = 5.956050864057192019085175976175695342168E2DL, qS8 = -4.175375777334867025769346564600396877176E1DL; /* 1.000000000000000000000000000000000000000E0 */ #include #define FUNCTION_NAME acos #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { _Decimal128 z, r, w, p, q, s, t, f2, ix; int32_t sign; if(isnan(x)) return x+x; sign = (x > 0.0DL)?0:1; ix = FUNC_D(__fabs) (x); if (ix >= 1.0DL) /* |x| >= 1 */ { if (ix == 1.0DL) { /* |x| == 1 */ if (sign == 0) return (DEC_TYPE)(0.0DL); /* acos(1) = 0 */ else return (DEC_TYPE)((2.0DL * pio2_hi) + (2.0DL * pio2_lo)); /* acos(-1)= pi */ } /* acos(|x| > 1) is NaN */ DFP_EXCEPT (FE_INVALID); return DFP_NAN; } else if (ix < 0.5DL) /* |x| < 0.5 */ { /* |x| < 2**-57 */ if (ix < 0.000000000000000000000000000000000000000000000000000000002DL) return (DEC_TYPE)(pio2_hi + pio2_lo); //Should raise INEXACT if (ix < 0.4375DL) /* |x| < .4375 */ { /* Arcsine of x. */ z = x * x; p = (((((((((pS9 * z + pS8) * z + pS7) * z + pS6) * z + pS5) * z + pS4) * z + pS3) * z + pS2) * z + pS1) * z + pS0) * z; q = (((((((( z + qS8) * z + qS7) * z + qS6) * z + qS5) * z + qS4) * z + qS3) * z + qS2) * z + qS1) * z + qS0; r = x + x * p / q; z = pio2_hi - (r - pio2_lo); return (DEC_TYPE)z; } /* .4375 <= |x| < .5 */ t = ix - 0.4375DL; p = ((((((((((P10 * t + P9) * t + P8) * t + P7) * t + P6) * t + P5) * t + P4) * t + P3) * t + P2) * t + P1) * t + P0) * t; q = (((((((((t + Q9) * t + Q8) * t + Q7) * t + Q6) * t + Q5) * t + Q4) * t + Q3) * t + Q2) * t + Q1) * t + Q0; r = p / q; if (sign) r = pimacosr4375 - r; else r = acosr4375 + r; return (DEC_TYPE)r; } else if (ix < 0.625DL) /* |x| < 0.625 */ { t = ix - 0.5625DL; p = ((((((((((rS10 * t + rS9) * t + rS8) * t + rS7) * t + rS6) * t + rS5) * t + rS4) * t + rS3) * t + rS2) * t + rS1) * t + rS0) * t; q = (((((((((t + sS9) * t + sS8) * t + sS7) * t + sS6) * t + sS5) * t + sS4) * t + sS3) * t + sS2) * t + sS1) * t + sS0; if (sign) r = pimacosr5625 - p / q; else r = acosr5625 + p / q; return (DEC_TYPE)r; } else { /* |x| >= .625 */ z = (one - ix) * 0.5DL; s = __sqrtd128 (z); /* Compute an extended precision square root from the Newton iteration s -> 0.5 * (s + z / s). The change w from s to the improved value is w = 0.5 * (s + z / s) - s = (s^2 + z)/2s - s = (z - s^2)/2s. Express s = f1 + f2 where f1 * f1 is exactly representable. w = (z - s^2)/2s = (z - f1^2 - 2 f1 f2 - f2^2)/2s . s + w has extended precision. */ p = s; /* u.value = s; u.parts32.w2 = 0; u.parts32.w3 = 0; */ f2 = s - p; w = z - p * p; w = w - 2.0DL * p * f2; w = w - f2 * f2; w = w / (2.0DL * s); /* Arcsine of s. */ p = (((((((((pS9 * z + pS8) * z + pS7) * z + pS6) * z + pS5) * z + pS4) * z + pS3) * z + pS2) * z + pS1) * z + pS0) * z; q = (((((((( z + qS8) * z + qS7) * z + qS6) * z + qS5) * z + qS4) * z + qS3) * z + qS2) * z + qS1) * z + qS0; r = s + (w + s * p / q); if (sign) w = pio2_hi + (pio2_lo - r); else w = r; return (DEC_TYPE)(2.0DL * w); } } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x > DFP_CONSTANT(1.0) || x < DFP_CONSTANT(-1.0)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/acosd64.c000066400000000000000000000021101504475242000157750ustar00rootroot00000000000000/* Calculates the arccos(x) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "acosd32.c" libdfp-1.0.17/ieee754r/acoshd128.c000066400000000000000000000021701504475242000162340ustar00rootroot00000000000000/* Calculates the arc that has the given tangent for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "acoshd32.c" libdfp-1.0.17/ieee754r/acoshd32.c000066400000000000000000000055421504475242000161540ustar00rootroot00000000000000/* Returns the hyperbolic arc cosine of a _Decimal32 type argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #define FUNCTION_NAME acosh #include #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result, one; decNumber dn_x, dn_one; one=DFP_CONSTANT(1.0); FUNC_CONVERT_TO_DN (&one, &dn_one); FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (x The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "acoshd32.c" libdfp-1.0.17/ieee754r/asind128.c000066400000000000000000000021121504475242000160650ustar00rootroot00000000000000/* Calculates the arccos(x) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "asind32.c" libdfp-1.0.17/ieee754r/asind32.c000066400000000000000000000202621504475242000160050ustar00rootroot00000000000000/* Calculates the arcsin(x) Copyright (C) 2001 Stephen L. Moshier Copyright (C) 2006 IBM Corporation. Copyright (C) 2001-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s) Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include /* Portions of this code are: * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== * * This was adapted for glibc in 2001. * This was adapted for Libdfp in 2006, and those changes donated to the FSF in * 2007. * * __ieee754_asin(x) * Method : * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... * we approximate asin(x) on [0,0.5] by * asin(x) = x + x*x^2*R(x^2) * Between .5 and .625 the approximation is * asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) * For x in [0.625,1] * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; * then for x>0.98 * asin(x) = pi/2 - 2*(s+s*z*R(z)) * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) * For x<=0.98, let pio4_hi = pio2_hi/2, then * f = hi part of s; * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) * and * asin(x) = pi/2 - 2*(s+s*z*R(z)) * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) * * Special cases: * if x is NaN, return x itself; * if |x|>1, return NaN with invalid signal. * */ #ifdef __STDC__ static const _Decimal128 #else static _Decimal128 #endif one = 1.0DL, huge = 1.0e+300DL, pio2_hi = 1.5707963267948966192313216916397514420986DL, pio2_lo = 4.3359050650618905123985220130216759843812E-35DL, pio4_hi = 7.8539816339744830961566084581987569936977E-1DL, /* coefficient for R(x^2) */ /* asin(x) = x + x^3 pS(x^2) / qS(x^2) 0 <= x <= 0.5 peak relative error 1.9e-35 */ pS0 = -8.358099012470680544198472400254596543711E2DL, pS1 = 3.674973957689619490312782828051860366493E3DL, pS2 = -6.730729094812979665807581609853656623219E3DL, pS3 = 6.643843795209060298375552684423454077633E3DL, pS4 = -3.817341990928606692235481812252049415993E3DL, pS5 = 1.284635388402653715636722822195716476156E3DL, pS6 = -2.410736125231549204856567737329112037867E2DL, pS7 = 2.219191969382402856557594215833622156220E1DL, pS8 = -7.249056260830627156600112195061001036533E-1DL, pS9 = 1.055923570937755300061509030361395604448E-3DL, qS0 = -5.014859407482408326519083440151745519205E3DL, qS1 = 2.430653047950480068881028451580393430537E4DL, qS2 = -4.997904737193653607449250593976069726962E4DL, qS3 = 5.675712336110456923807959930107347511086E4DL, qS4 = -3.881523118339661268482937768522572588022E4DL, qS5 = 1.634202194895541569749717032234510811216E4DL, qS6 = -4.151452662440709301601820849901296953752E3DL, qS7 = 5.956050864057192019085175976175695342168E2DL, qS8 = -4.175375777334867025769346564600396877176E1DL, /* 1.000000000000000000000000000000000000000E0 */ /* asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) -0.0625 <= x <= 0.0625 peak relative error 3.3e-35 */ rS0 = -5.619049346208901520945464704848780243887E0DL, rS1 = 4.460504162777731472539175700169871920352E1DL, rS2 = -1.317669505315409261479577040530751477488E2DL, rS3 = 1.626532582423661989632442410808596009227E2DL, rS4 = -3.144806644195158614904369445440583873264E1DL, rS5 = -9.806674443470740708765165604769099559553E1DL, rS6 = 5.708468492052010816555762842394927806920E1DL, rS7 = 1.396540499232262112248553357962639431922E1DL, rS8 = -1.126243289311910363001762058295832610344E1DL, rS9 = -4.956179821329901954211277873774472383512E-1DL, rS10 = 3.313227657082367169241333738391762525780E-1DL, sS0 = -4.645814742084009935700221277307007679325E0DL, sS1 = 3.879074822457694323970438316317961918430E1DL, sS2 = -1.221986588013474694623973554726201001066E2DL, sS3 = 1.658821150347718105012079876756201905822E2DL, sS4 = -4.804379630977558197953176474426239748977E1DL, sS5 = -1.004296417397316948114344573811562952793E2DL, sS6 = 7.530281592861320234941101403870010111138E1DL, sS7 = 1.270735595411673647119592092304357226607E1DL, sS8 = -1.815144839646376500705105967064792930282E1DL, sS9 = -7.821597334910963922204235247786840828217E-2DL, /* 1.000000000000000000000000000000000000000E0 */ asinr5625 = 5.9740641664535021430381036628424864397707E-1DL; #include #define FUNCTION_NAME asin #include //#include "math_private.h" //long double sqrtl (long double); static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { _Decimal128 t, w, p, q, c, r, s, ix; int32_t sign, flag; if(isnan(x)) return x+x; flag = 0; sign = (x < 0.0DL)?1:0; ix = FUNC_D(__fabs) (x); if (ix >= 1.0DL) /* |x|>= 1 */ { /* asin(1)=+-pi/2 with inexact */ if (ix == 1.0DL) return (DEC_TYPE)(x * pio2_hi + x * pio2_lo); /* asin(|x|>1) is NaN */ DFP_EXCEPT (FE_INVALID); return DFP_NAN; } else if (ix < 0.5DL) /* |x| < 0.5 */ { if (ix < 0.000000000000000000000000000000000000000000000000000000002DL) /* |x| < 2**-57 */ { if (huge + x > one) return x; /* return x with inexact if x!=0 */ t = 0.0DL; } else { t = x * x; /* Mark to use pS, qS later on. */ flag = 1; } } else if (ix < 0.625DL) /* 0.625 */ { t = ix - 0.5625DL; p = ((((((((((rS10 * t + rS9) * t + rS8) * t + rS7) * t + rS6) * t + rS5) * t + rS4) * t + rS3) * t + rS2) * t + rS1) * t + rS0) * t; q = ((((((((( t + sS9) * t + sS8) * t + sS7) * t + sS6) * t + sS5) * t + sS4) * t + sS3) * t + sS2) * t + sS1) * t + sS0; t = asinr5625 + p / q; if (sign == 0) return (DEC_TYPE)t; else return (DEC_TYPE)(-t); } else { /* 1 > |x| >= 0.625 */ w = one - ix; t = w * 0.5DL; } p = (((((((((pS9 * t + pS8) * t + pS7) * t + pS6) * t + pS5) * t + pS4) * t + pS3) * t + pS2) * t + pS1) * t + pS0) * t; q = (((((((( t + qS8) * t + qS7) * t + qS6) * t + qS5) * t + qS4) * t + qS3) * t + qS2) * t + qS1) * t + qS0; if (flag) /* 2^-57 < |x| < 0.5 */ { w = p / q; return (DEC_TYPE)(x + x * w); } s = __sqrtd128 (t); if (ix >= 0.975DL) /* |x| > 0.975 */ { w = p / q; t = pio2_hi - (2.0DL * (s + s * w) - pio2_lo); } else { w = s; /* Look into the reason this code was here u.value = s; u.parts32.w3 = 0; u.parts32.w2 = 0; w = u.value; */ c = (t - w * w) / (s + w); r = p / q; p = 2.0DL * s * r - (pio2_lo - 2.0DL * c); q = pio4_hi - 2.0DL * w; t = pio4_hi - (p - q); } if (sign == 0) return (DEC_TYPE)t; else return (DEC_TYPE)(-t); } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x > DFP_CONSTANT(1.0) || x < DFP_CONSTANT(-1.0)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/asind64.c000066400000000000000000000021101504475242000160020ustar00rootroot00000000000000/* Calculates the arccos(x) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "asind32.c" libdfp-1.0.17/ieee754r/asinhd128.c000066400000000000000000000021541504475242000162430ustar00rootroot00000000000000/* Calculates for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "asinhd32.c" libdfp-1.0.17/ieee754r/asinhd32.c000066400000000000000000000042131504475242000161530ustar00rootroot00000000000000/* Returns the hyperbolic arc sine of a _Decimal32 type argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #define FUNCTION_NAME asinh #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result, one; decNumber dn_x, dn_one; one = DFP_CONSTANT(1.0); FUNC_CONVERT_TO_DN (&one, &dn_one); FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x) || decNumberIsInfinite (&dn_x)) { return x + x; } decContextDefault (&context, DEFAULT_CONTEXT); /* using trig identity: acosh(x) = log(x+sqrt(x*x-1)) */ decNumberMultiply (&dn_result, &dn_x, &dn_x, &context); decNumberAdd (&dn_result, &dn_result, &dn_one, &context); decNumberSquareRoot (&dn_result, &dn_result, &context); decNumberAdd (&dn_result, &dn_result, &dn_x, &context); decNumberLn (&dn_result, &dn_result, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/asinhd64.c000066400000000000000000000021521504475242000161600ustar00rootroot00000000000000/* Calculates for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "asinhd32.c" libdfp-1.0.17/ieee754r/atan2d128.c000066400000000000000000000021701504475242000161440ustar00rootroot00000000000000/* Calculates the arc that has the given tangent for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "atan2d32.c" libdfp-1.0.17/ieee754r/atan2d32.c000066400000000000000000000066461504475242000160720ustar00rootroot00000000000000/* Calculates the arc that has the given tangent for a _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #define FUNCTION_NAME atan2 #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE y, DEC_TYPE x) { /* This needs to be kept in the range of _Decimal32, and only added * to fairly large numbers (sizeable fractions of pi) */ const DEC_TYPE generate_inexact = DFP_CONSTANT(1e-94); decContext context; decNumber dn_result, dn_temp; DEC_TYPE result; decNumber dn_x, dn_y; FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); /* If either argument is NaN, return NaN */ if (decNumberIsNaN (&dn_x) || decNumberIsNaN (&dn_y)) return x+y; /* If x,y are both non-inf, non-NaN, non-zero, calculate as normal */ if (!decNumberIsInfinite (&dn_x) && !decNumberIsZero (&dn_y) && !decNumberIsInfinite (&dn_y) && !decNumberIsZero (&dn_x)) { decContextDefault (&context, DEFAULT_CONTEXT); decNumberDivide (&dn_temp, &dn_y, &dn_x, &context); decNumberAtan (&dn_result, &dn_temp, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); /* decNumberAtan doesn't quite return the values in the ranges we * want for x < 0. So we need to do some correction */ if (decNumberIsNegative (&dn_x)) { if (decNumberIsNegative (&dn_y)) return result - M_PIdl; else return result + M_PIdl; } else return result; } /* If x and y are both inf, the result depends on the sign of x */ if (decNumberIsInfinite (&dn_y) && decNumberIsInfinite (&dn_x)) { if (decNumberIsNegative (&dn_x) ) result = (DEC_TYPE)(3.0DL * M_PI_4dl) + generate_inexact; else result = (DEC_TYPE) M_PI_4dl + generate_inexact; } /* If y is non-zero and x is non-inf, the result is +-pi/2 */ else if (!decNumberIsZero (&dn_y) && !decNumberIsInfinite (&dn_x) ) result = (DEC_TYPE)M_PI_2dl; else /* Otherwise it is +0 if x is positive, +pi if x is neg */ { if (decNumberIsNegative (&dn_x)) result = ((DEC_TYPE) M_PIdl) - generate_inexact; else result = DFP_CONSTANT (0.0); } /* Atan2 will be negative if y<0 */ if (decNumberIsNegative (&dn_y)) return -result; else return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/atan2d64.c000066400000000000000000000021651504475242000160670ustar00rootroot00000000000000/* Calculates the arc that has the given tangent for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "atan2d32.c" libdfp-1.0.17/ieee754r/atand128.c000066400000000000000000000021661504475242000160670ustar00rootroot00000000000000/* Calculates the arc that has the given tangent for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "atand32.c" libdfp-1.0.17/ieee754r/atand32.c000066400000000000000000000035211504475242000157750ustar00rootroot00000000000000/* Calculates the arc that has the given tangent for a _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #define FUNCTION_NAME atan #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); decContextDefault (&context, DEFAULT_CONTEXT); if (decNumberIsInfinite (&dn_x)) { if (decNumberIsNegative (&dn_x)) result = -M_PI_2dl; else result = M_PI_2dl; } else { decNumberAtan (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); } return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/atand64.c000066400000000000000000000021631504475242000160030ustar00rootroot00000000000000/* Calculates the arc that has the given tangent for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "atand32.c" libdfp-1.0.17/ieee754r/atanhd128.c000066400000000000000000000021701504475242000162320ustar00rootroot00000000000000/* Calculates the hyperbolic arc tangent (atanh) for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "atanhd32.c" libdfp-1.0.17/ieee754r/atanhd32.c000066400000000000000000000066601504475242000161540ustar00rootroot00000000000000/* Calculate the hyperbolic arc tangent (atanh) for _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #define FUNCTION_NAME atanh #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result, one, temp; decNumber dn_x, dn_temp, dn_one; /* int comp;*/ one=DFP_CONSTANT(1.0); FUNC_CONVERT_TO_DN (&one, &dn_one); FUNC_CONVERT_TO_DN (&x, &dn_x); /* Handle NaN and early exit for x==0 */ if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)) return x + x; decContextDefault (&context, DEFAULT_CONTEXT); decNumberAbs (&dn_temp, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_temp, &temp, &context); if(temp==one) { /* |x| == 1 -> Pole Error */ DFP_EXCEPT (FE_DIVBYZERO); return decNumberIsNegative(&dn_x) ? -DFP_HUGE_VAL:DFP_HUGE_VAL; } else if (temp>one) { /* |x| > 1 -> Domain Error (this handles +-Inf too) */ DFP_EXCEPT (FE_INVALID); return DFP_NAN; } // comp = decCompare (&dn_temp, &dn_one); // switch (comp) // { // case 0: /* |x| == 1 -> Pole Error */ // DFP_EXCEPT (FE_DIVBYZERO); // return decNumberIsNegative(&dn_x) ? -DFP_HUGE_VAL:DFP_HUGE_VAL; // case 1: /* |x| > 1 -> Domain Error (this handles +-Inf too) */ // DFP_EXCEPT (FE_INVALID); // return DFP_NAN; // } /* Using trig identity: atanh(x) = 1/2 * log((1+x)/(1-x)) */ decNumberAdd (&dn_result, &dn_one, &dn_x, &context); decNumberSubtract (&dn_temp, &dn_one, &dn_x, &context); decNumberDivide (&dn_result, &dn_result, &dn_temp, &context); decNumberLn (&dn_result, &dn_result, &context); decNumberAdd (&dn_temp, &dn_one, &dn_one, &context); /* 2 */ decNumberDivide (&dn_result, &dn_result, &dn_temp, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x < DFP_CONSTANT(-1.0) || x > DFP_CONSTANT(1.0)) DFP_ERRNO (EDOM); /* The normal glibc ieee754 k_standard.c file does not follow c99 or POSIX * with regard to atanh pole errors. atan(+-1.0) [the binary version] will * set errno to EDOM. Hopefully this will get worked out soon. */ if (x == DFP_CONSTANT(-1.0) || x == DFP_CONSTANT(1.0)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/atanhd64.c000066400000000000000000000021651504475242000161550ustar00rootroot00000000000000/* Calculates the hyperbolic arc tangent (atanh) for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "atanhd32.c" libdfp-1.0.17/ieee754r/cbrtd128.c000066400000000000000000000020701504475242000160700ustar00rootroot00000000000000/* Calculates the cube root function of _Decimal128 type x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "cbrtd32.c" libdfp-1.0.17/ieee754r/cbrtd32.c000066400000000000000000000107411504475242000160060ustar00rootroot00000000000000/* Calculates the cube root function of _Decimal32 type x Copyright (C) 1984, 1991 Stephen L. Moshier. Copyright (C) 2006 IBM Corporation. Copyright (C) 2001-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #define FUNCTION_NAME cbrt #include /* * Provided by the Cephes Math Library Release 2.2: January, 1991 * By Stephen L. Moshier * Adapted for glibc October, 2001. * Adapted for libdfp 2006, and donated to the FSF in 2007. * * DESCRIPTION: * Returns the cube root of the argument, which may be negative. * * Range reduction involves determining the power of 2 of * the argument. A polynomial of degree 2 applied to the * mantissa, and multiplication by the cube root of 1, 2, or 4 * approximates the root to within about 0.1%. Then Newton's * iteration is used three times to converge to an accurate * result. * * ACCURACY: * Relative error: * arithmetic domain # trials peak rms * IEEE -8,8 100000 1.3e-34 3.9e-35 * IEEE exp(+-707) 100000 1.3e-34 4.3e-35 */ /* Replace with: * cbrt(10) and cbrt(100) * and * cbrt(-10) and cbrt(-100) * * used 'bc' to get these and then trunced by hand. * echo 'scale=44;e(1/3*(l(10)))' | bc -l * echo 'scale=44;e(1/3*(l(100)))' | bc -l * echo 'scale=45;e(1/3*(l(1/10)))' | bc -l * echo 'scale=45;e(1/3*(l(1/100)))' | bc -l */ static const _Decimal128 CBRT10 = 2.154434690031883721759293566519350495259345DL, CBRT100 = 4.641588833612778892410076350919446576551349DL, CBRT10I = 0.4641588833612778892410076350919446576551349DL, CBRT100I = 0.2154434690031883721759293566519350495259345DL; // CBRT2 = 1.259921049894873164767210607278228350570251DL, // CBRT4 = 1.587401051968199474751705639272308260391493DL, // CBRT2I= 0.7937005259840997373758528196361541301957467DL, // CBRT4I= 0.6299605249474365823836053036391141752851257DL; DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int e, rem, sign; _Decimal128 z; if (! FUNC_D(__isfinite) (x)) /* cbrt(x:x=inf/nan/-inf) = x+x (for sNaN) */ return x + x; if (x == DFP_CONSTANT(0.0)) /* cbrt(0) = 0 */ return (x); if (x > DFP_CONSTANT(0.0)) sign = 1; else { sign = -1; x = -x; } z = x; /* extract power of 2, leaving mantissa between 0.5 and 1 */ x = FUNC_D(__frexp) (x, &e); /* Approximate cube root of number between .5 and 1, peak relative error = 1.2e-6 */ x = ((((1.3584464340920900529734e-1DL * x - 6.3986917220457538402318e-1DL) * x + 1.2875551670318751538055e0DL) * x - 1.4897083391357284957891e0DL) * x + 1.3304961236013647092521e0DL) * x + 3.7568280825958912391243e-1DL; /* exponent divided by 3 */ if (e >= 0) { rem = e; e /= 3; rem -= 3 * e; if (rem == 1) //x *= CBRT2; x *= CBRT10; else if (rem == 2) //x *= CBRT4; x *= CBRT100; } else { /* argument less than 1 */ e = -e; rem = e; e /= 3; rem -= 3 * e; if (rem == 1) //x *= CBRT2I; x *= CBRT10I; else if (rem == 2) //x *= CBRT4I; x *= CBRT100I; e = -e; } /* multiply by power of 2 */ x = FUNC_D(__ldexp) (x, e); /* Newton iteration */ x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333DL; x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333DL; x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333DL; if (sign < 0) x = -x; return (x); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/cbrtd64.c000066400000000000000000000021461504475242000160130ustar00rootroot00000000000000/* Calculates the cube root function of _Decimal64 type x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "cbrtd32.c" libdfp-1.0.17/ieee754r/ceild128.c000066400000000000000000000021301504475242000160470ustar00rootroot00000000000000/* Ceiling function for _Decimal128 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "ceild32.c" libdfp-1.0.17/ieee754r/ceild32.c000066400000000000000000000034001504475242000157620ustar00rootroot00000000000000/* Ceiling function for _Decimal32 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #define FUNCTION_NAME ceil #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsInfinite (&dn_x) || decNumberIsZero (&dn_x) ) return x+x; decContextDefault (&context, DEFAULT_CONTEXT); context.round = DEC_ROUND_CEILING; decNumberToIntegralValue (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/ceild64.c000066400000000000000000000021251504475242000157720ustar00rootroot00000000000000/* Ceiling function for _Decimal64 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "ceild32.c" libdfp-1.0.17/ieee754r/copysignd128.c000066400000000000000000000021531504475242000167730ustar00rootroot00000000000000/* Copies the sign from the second argument to the first Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "copysignd32.c" libdfp-1.0.17/ieee754r/copysignd32.c000066400000000000000000000034041504475242000167050ustar00rootroot00000000000000/* Copies the sign from the second argument to the first Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #define FUNCTION_NAME copysign #include #define decNumberNegate(dn) (((dn)->bits)^=DECNEG) DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; DEC_TYPE result; decNumber dn_x; decNumber dn_y; FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); if(decNumberIsNegative (&dn_x) != decNumberIsNegative (&dn_y)) decNumberNegate (&dn_x); decContextDefault (&context, DEFAULT_CONTEXT); FUNC_CONVERT_FROM_DN (&dn_x, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/copysignd64.c000066400000000000000000000021511504475242000167100ustar00rootroot00000000000000/* Copies the sign from the second argument to the first Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "copysignd32.c" libdfp-1.0.17/ieee754r/cosd128.c000066400000000000000000000021401504475242000157200ustar00rootroot00000000000000/* Calculate the cos(x) for a _Decimal128 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "cosd32.c" libdfp-1.0.17/ieee754r/cosd32.c000066400000000000000000000040301504475242000156320ustar00rootroot00000000000000/* Calculate the cos(x) for a _Decimal32 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #include #define FUNCTION_NAME cos #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsZero (&dn_x)) return DFP_CONSTANT(1.0); if (decNumberIsInfinite (&dn_x)) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } decContextDefault (&context, DEFAULT_CONTEXT); decNumberCos (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (isinf(x)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/cosd64.c000066400000000000000000000021351504475242000156430ustar00rootroot00000000000000/* Calculate the cos(x) for a _Decimal64 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "cosd32.c" libdfp-1.0.17/ieee754r/coshd128.c000066400000000000000000000021521504475242000160730ustar00rootroot00000000000000/* Calculate the hyperbolic cos (cosh) for _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "coshd32.c" libdfp-1.0.17/ieee754r/coshd32.c000066400000000000000000000042101504475242000160020ustar00rootroot00000000000000/* Calculate the hyperbolic cos (cosh) for _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #include #define FUNCTION_NAME cosh #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsZero (&dn_x)) return DFP_CONSTANT(1.0); decContextDefault (&context, DEFAULT_CONTEXT); if (decNumberIsInfinite (&dn_x)) decNumberAbs (&dn_result, &dn_x, &context); else decNumberCosh (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT(FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (FUNC_D(__isfinite)(x) && !FUNC_D(__isfinite)(z)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/coshd64.c000066400000000000000000000021471504475242000160160ustar00rootroot00000000000000/* Calculate the hyperbolic cos (cosh) for _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "coshd32.c" libdfp-1.0.17/ieee754r/ddlogtbls.h000066400000000000000000001764701504475242000165420ustar00rootroot00000000000000/* Generated lookup tables. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DDLOGTBLS_H #define _DDLOGTBLS_H 1 const _Decimal128 __LN_10 = 2.302585092994045684017991454684364e+00DL; const _Decimal128 __LN2digits [] = { HUGE_VAL_D128, /* ln(0.00DL) */ -4.605170185988091368035982909368728DL, /* ln(0.01DL) */ -3.912023005428146058618750787910552DL, /* ln(0.02DL) */ -3.506557897319981676640737672446203DL, /* ln(0.03DL) */ -3.218875824868200749201518666452375DL, /* ln(0.04DL) */ -2.995732273553990993435223576142541DL, /* ln(0.05DL) */ -2.813410716760036367223505550988026DL, /* ln(0.06DL) */ -2.659260036932778062930630165925549DL, /* ln(0.07DL) */ -2.525728644308255439784286544994199DL, /* ln(0.08DL) */ -2.407945608651871985245492435523677DL, /* ln(0.09DL) */ -2.302585092994045684017991454684364DL, /* ln(0.10DL) */ -2.207274913189720823974039331403599DL, /* ln(0.11DL) */ -2.120263536200091057806273429529850DL, /* ln(0.12DL) */ -2.040220828526554631982495467803410DL, /* ln(0.13DL) */ -1.966112856372832753513398044467372DL, /* ln(0.14DL) */ -1.897119984885881302039978339220015DL, /* ln(0.15DL) */ -1.832581463748310130367054423536022DL, /* ln(0.16DL) */ -1.771956841931875287786448291495602DL, /* ln(0.17DL) */ -1.714798428091926675828260314065500DL, /* ln(0.18DL) */ -1.660731206821650908026955477480875DL, /* ln(0.19DL) */ -1.609437912434100374600759333226188DL, /* ln(0.20DL) */ -1.560647748264668371535384929003023DL, /* ln(0.21DL) */ -1.514127732629775514556807209945423DL, /* ln(0.22DL) */ -1.469675970058941677229230077558532DL, /* ln(0.23DL) */ -1.427116355640145748389041308071673DL, /* ln(0.24DL) */ -1.386294361119890618834464242916353DL, /* ln(0.25DL) */ -1.347073647966609322565263346345233DL, /* ln(0.26DL) */ -1.309333319983762293850247198601151DL, /* ln(0.27DL) */ -1.272965675812887444096165923009196DL, /* ln(0.28DL) */ -1.237874356001617340852710877006817DL, /* ln(0.29DL) */ -1.203972804325935992622746217761839DL, /* ln(0.30DL) */ -1.171182981502945122106818584826371DL, /* ln(0.31DL) */ -1.139434283188364820949822302077846DL, /* ln(0.32DL) */ -1.108662624521611132578794094481073DL, /* ln(0.33DL) */ -1.078809661371929978369216170037425DL, /* ln(0.34DL) */ -1.049822124498677688329870832699361DL, /* ln(0.35DL) */ -1.021651247531981366411028192607324DL, /* ln(0.36DL) */ -0.9942522733438669236678872383372813DL, /* ln(0.37DL) */ -0.9675840262617055986097233560226983DL, /* ln(0.38DL) */ -0.9416085398584449405872502308808841DL, /* ln(0.39DL) */ -0.9162907318741550651835272117680111DL, /* ln(0.40DL) */ -0.8915981192837835641692195363313208DL, /* ln(0.41DL) */ -0.8675005677047230621181528075448464DL, /* ln(0.42DL) */ -0.8439700702945289445631403960228814DL, /* ln(0.43DL) */ -0.8209805520698302051395750884872460DL, /* ln(0.44DL) */ -0.7985076962177716106447331022974894DL, /* ln(0.45DL) */ -0.7765287894989963678119979561003557DL, /* ln(0.46DL) */ -0.7550225842780327812150322395965547DL, /* ln(0.47DL) */ -0.7339691750802004389718091866134964DL, /* ln(0.48DL) */ -0.7133498878974647578252974224823690DL, /* ln(0.49DL) */ -0.6931471805599453094172321214581766DL, /* ln(0.50DL) */ -0.6733445532637655963912030545730762DL, /* ln(0.51DL) */ -0.6539264674066640131480312248870567DL, /* ln(0.52DL) */ -0.6348782724359695338915137703396706DL, /* ln(0.53DL) */ -0.6161861394238169844330150771429747DL, /* ln(0.54DL) */ -0.5978370007556204493732799981974115DL, /* ln(0.55DL) */ -0.5798184952529421346789338015510190DL, /* ln(0.56DL) */ -0.5621189181535412166317102405583492DL, /* ln(0.57DL) */ -0.5447271754416720314354787555486402DL, /* ln(0.58DL) */ -0.5276327420823719174199325356490308DL, /* ln(0.59DL) */ -0.5108256237659906832055140963036619DL, /* ln(0.60DL) */ -0.4942963218147801192845938059431137DL, /* ln(0.61DL) */ -0.4780358009429998126895864633681946DL, /* ln(0.62DL) */ -0.4620354595965586801401396920804973DL, /* ln(0.63DL) */ -0.4462871026284195115325901806196690DL, /* ln(0.64DL) */ -0.4307829160924542573817361345772222DL, /* ln(0.65DL) */ -0.4155154439616658231615619730228968DL, /* ln(0.66DL) */ -0.4004775665971253083659109130050057DL, /* ln(0.67DL) */ -0.3856624808119846689519840485792487DL, /* ln(0.68DL) */ -0.3710636813908319858339848406360066DL, /* ln(0.69DL) */ -0.3566749439387323789126387112411845DL, /* ln(0.70DL) */ -0.3424903089467759467065283768556943DL, /* ln(0.71DL) */ -0.3285040669720360569937960711491473DL, /* ln(0.72DL) */ -0.3147107448397002389438740519301858DL, /* ln(0.73DL) */ -0.3011050927839216142506551168791047DL, /* ln(0.74DL) */ -0.2876820724517809274392190059938274DL, /* ln(0.75DL) */ -0.2744368457017602891924912345645217DL, /* ln(0.76DL) */ -0.2613647641344075188686865879604194DL, /* ln(0.77DL) */ -0.2484613592984996311700181094227075DL, /* ln(0.78DL) */ -0.2357223335210698738630373678873175DL, /* ln(0.79DL) */ -0.2231435513142097557662950903098345DL, /* ln(0.80DL) */ -0.2107210313156526024550019616786256DL, /* ln(0.81DL) */ -0.1984509387238382547519874148731443DL, /* ln(0.82DL) */ -0.1863295781914934445605106860773580DL, /* ln(0.83DL) */ -0.1743533871447777527009206860866698DL, /* ln(0.84DL) */ -0.1625189294977749131856889582694142DL, /* ln(0.85DL) */ -0.1508228897345836351459082745647048DL, /* ln(0.86DL) */ -0.1392620673335076494574656400842911DL, /* ln(0.87DL) */ -0.1278333715098848957223429670290694DL, /* ln(0.88DL) */ -0.1165338162559515297181673686988792DL, /* ln(0.89DL) */ -0.1053605156578263012275009808393128DL, /* ln(0.90DL) */ -0.09431067947124132687714272436023008DL, /* ln(0.91DL) */ -0.08338160893905105839476583464217916DL, /* ln(0.92DL) */ -0.07257069283483543071157334790384550DL, /* ln(0.93DL) */ -0.06187540371808747179780011813837814DL, /* ln(0.94DL) */ -0.05129329438755053342619614425468724DL, /* ln(0.95DL) */ -0.04082199452025512955457706515531987DL, /* ln(0.96DL) */ -0.03045920748470854591926128766476670DL, /* ln(0.97DL) */ -0.02020270731751944840804530102419239DL, /* ln(0.98DL) */ -0.01005033585350144118354885755854771DL, /* ln(0.99DL) */ 0.0DL}; /* ln(1.00DL) */ const _Decimal64 __factorialDD [] = { 1.0DD, /* 0.0! */ 1.0DD, /* 1.0! */ 2.0DD, /* 2.0DD! */ 6.0DD, /* 3.0DD! */ 24.0DD, /* 4.0DD! */ 120.0DD, /* 5.0DD! */ 720.0DD, /* 6.0DD! */ 5040.0DD, /* 7.0DD! */ 40320.0DD, /* 8.0DD! */ 362880.0DD, /* 9.0DD! */ 3628800.0DD, /* 10.0DD! */ 39916800.0DD, /* 11.0DD! */ 479001600.0DD, /* 12.0DD! */ 6227020800.0DD, /* 13.0DD! */ 87178291200.0DD, /* 14.0DD! */ 1307674368000.0DD, /* 15.0DD! */ 20922789888000.0DD, /* 16.0DD! */ 355687428096000.0DD, /* 17.0DD! */ 6402373705728000.0DD, /* 18.0DD! */ 1.216451004088320e+17DD, /* 19.0DD! */ 2.432902008176640e+18DD}; /* 20.0DD! */ const _Decimal64 __oneOverfactDD [] = { 1.0DD, /* 1.0/0.0! */ 1.0DD, /* 1.0/1.0! */ 0.5DD, /* 1.0DD/2.0DD! */ 0.1666666666666667DD, /* 1.0DD/3.0DD! */ 0.04166666666666667DD, /* 1.0DD/4.0DD! */ 0.008333333333333333DD, /* 1.0DD/5.0DD! */ 0.001388888888888889DD, /* 1.0DD/6.0DD! */ 0.0001984126984126984DD, /* 1.0DD/7.0DD! */ 2.48015873015873e-05DD, /* 1.0DD/8.0DD! */ 2.755731922398589e-06DD, /* 1.0DD/9.0DD! */ 2.755731922398589e-07DD, /* 1.0DD/10.0DD! */ 2.505210838544172e-08DD, /* 1.0DD/11.0DD! */ 2.08767569878681e-09DD, /* 1.0DD/12.0DD! */ 1.605904383682161e-10DD, /* 1.0DD/13.0DD! */ 1.147074559772972e-11DD, /* 1.0DD/14.0DD! */ 7.647163731819816e-13DD, /* 1.0DD/15.0DD! */ 4.779477332387385e-14DD, /* 1.0DD/16.0DD! */ 2.811457254345521e-15DD, /* 1.0DD/17.0DD! */ 1.561920696858623e-16DD, /* 1.0DD/18.0DD! */ 8.22063524662433e-18DD, /* 1.0DD/19.0DD! */ 4.110317623312165e-19DD}; /* 1.0DD/20.0DD! */ /* Note, this table starts at e^0. */ #define EXPINT_MAX (sizeof (__expIntXDL) / sizeof (__expIntXDL[0]) - 1) const _Decimal128 __expIntXDL [] = { 1.0DL, /* exp(0.0DL) */ 2.718281828459045235360287471352662DL, /* exp(1.0DL) */ 7.389056098930650227230427460575008DL, /* exp(2.0DL) */ 20.08553692318766974092852965458172DL, /* exp(3.0DL) */ 54.59815003314423907811026120286088DL, /* exp(4.0DL) */ 148.4131591025766034211155800405523DL, /* exp(5.0DL) */ 403.4287934927351226083871805433883DL, /* exp(6.0DL) */ 1096.633158428458599263720238288121DL, /* exp(7.0DL) */ 2980.957987041728274743592099452889DL, /* exp(8.0DL) */ 8103.083927575384007709996689432760DL, /* exp(9.0DL) */ 22026.46579480671651695790064528424DL, /* exp(10.0DL) */ 59874.14171519781845532648579225778DL, /* exp(11.0DL) */ 162754.7914190039208080052048984868DL, /* exp(12.0DL) */ 442413.3920089205033261027759490883DL, /* exp(13.0DL) */ 1202604.284164776777749236770767859DL, /* exp(14.0DL) */ 3269017.372472110639301855046091721DL, /* exp(15.0DL) */ 8886110.520507872636763023740781450DL, /* exp(16.0DL) */ 24154952.75357529821477543518038582DL, /* exp(17.0DL) */ 65659969.13733051113878650325906003DL, /* exp(18.0DL) */ 178482300.9631872608449100337887227DL, /* exp(19.0DL) */ 485165195.4097902779691068305415406DL, /* exp(20.0DL) */ 1318815734.483214697209998883745303DL, /* exp(21.0DL) */ 3584912846.131591561681159945978421DL, /* exp(22.0DL) */ 9744803446.248902600034632684822975DL, /* exp(23.0DL) */ 26489122129.84347229413916215281188DL, /* exp(24.0DL) */ 72004899337.38587252416135146612616DL, /* exp(25.0DL) */ 195729609428.8387642697763978760953DL, /* exp(26.0DL) */ 532048240601.7986166837473043411974DL, /* exp(27.0DL) */ 1446257064291.475173677047422996929DL, /* exp(28.0DL) */ 3931334297144.042074388620580843528DL, /* exp(29.0DL) */ 10686474581524.46214699046865074140DL, /* exp(30.0DL) */ 29048849665247.42523108568211167983DL, /* exp(31.0DL) */ 78962960182680.69516097802263510822DL, /* exp(32.0DL) */ 214643579785916.0646242977615312609DL, /* exp(33.0DL) */ 583461742527454.8814029027346103910DL, /* exp(34.0DL) */ 1586013452313430.728129644625974660DL, /* exp(35.0DL) */ 4311231547115195.227113422292856925DL, /* exp(36.0DL) */ 11719142372802611.30877293979119019DL, /* exp(37.0DL) */ 31855931757113756.22032867170129865DL, /* exp(38.0DL) */ 86593400423993746.95360693271926493DL, /* exp(39.0DL) */ 235385266837019985.4078999107490348DL, /* exp(40.0DL) */ 639843493530054949.2226634035155708DL, /* exp(41.0DL) */ 1739274941520501047.394681303611235DL, /* exp(42.0DL) */ 4727839468229346561.474457562744280DL, /* exp(43.0DL) */ 12851600114359308275.80929963214310DL, /* exp(44.0DL) */ 34934271057485095348.03479723340610DL, /* exp(45.0DL) */ 94961194206024488745.13364911711832DL, /* exp(46.0DL) */ 258131288619006739623.2858002152734DL, /* exp(47.0DL) */ 701673591209763173865.4715998861174DL, /* exp(48.0DL) */ 1907346572495099690525.099840953848DL, /* exp(49.0DL) */ 5184705528587072464087.453322933485DL, /* exp(50.0DL) */ 14093490824269387964492.14331237017DL, /* exp(51.0DL) */ 38310080007165768493035.69548786199DL, /* exp(52.0DL) */ 104137594330290877971834.7293349380DL, /* exp(53.0DL) */ 283075330327469390044206.3548014075DL, /* exp(54.0DL) */ 769478526514201713818274.5590129394DL, /* exp(55.0DL) */ 2091659496012996153907071.157214674DL, /* exp(56.0DL) */ 5685719999335932222640348.820633253DL, /* exp(57.0DL) */ 15455389355901039303530766.91117462DL, /* exp(58.0DL) */ 42012104037905142549565934.30719162DL, /* exp(59.0DL) */ 114200738981568428366295718.3144766DL, /* exp(60.0DL) */ 310429793570191990870734214.1107100DL, /* exp(61.0DL) */ 843835666874145448907332948.0373118DL, /* exp(62.0DL) */ 2293783159469609879099352840.268614DL, /* exp(63.0DL) */ 6235149080811616882909238708.928470DL, /* exp(64.0DL) */ 16948892444103337141417836114.37197DL, /* exp(65.0DL) */ 46071866343312915426773184428.06009DL, /* exp(66.0DL) */ 125236317084221378051352196074.4366DL, /* exp(67.0DL) */ 340427604993174052137690718700.4351DL, /* exp(68.0DL) */ 925378172558778760024239791668.7346DL, /* exp(69.0DL) */ 2515438670919167006265781174252.113DL, /* exp(70.0DL) */ 6837671229762743866755892826677.711DL, /* exp(71.0DL) */ 18586717452841279803403701812545.41DL, /* exp(72.0DL) */ 50523936302761041945570383321857.65DL, /* exp(73.0DL) */ 137338297954017618778418852980853.9DL, /* exp(74.0DL) */ 373324199679900164025490831726470.0DL, /* exp(75.0DL) */ 1014800388113888727832461784131717.0DL, /* exp(76.0DL) */ 2758513454523170206286469819902662.0DL, /* exp(77.0DL) */ 7498416996990120434675630591224060.0DL, /* exp(78.0DL) */ 2.038281066512668766832313753717263e+34DL, /* exp(79.0DL) */ 5.540622384393510052571173395831661e+34DL, /* exp(80.0DL) */ 1.506097314585030548352594130167675e+35DL, /* exp(81.0DL) */ 4.093996962127454696660914229327829e+35DL, /* exp(82.0DL) */ 1.112863754791759412087071478183941e+36DL, /* exp(83.0DL) */ 3.025077322201142338266566396443429e+36DL, /* exp(84.0DL) */ 8.223012714622913510304328016407775e+36DL, /* exp(85.0DL) */ 2.235246603734715047443065732332715e+37DL, /* exp(86.0DL) */ 6.076030225056872149522328938130276e+37DL, /* exp(87.0DL) */ 1.651636254994001855528329796264859e+38DL, /* exp(88.0DL) */ 4.489612819174345246284245579645316e+38DL, /* exp(89.0DL) */ 1.220403294317840802002710035136370e+39DL, /* exp(90.0DL) */ 3.317400098335742625755516107852592e+39DL, /* exp(91.0DL) */ 9.017628405034298931400995982170905e+39DL, /* exp(92.0DL) */ 2.451245542920085785552772943110915e+40DL, /* exp(93.0DL) */ 6.663176216410895834244814050240873e+40DL, /* exp(94.0DL) */ 1.811239082889023282193798758098816e+41DL, /* exp(95.0DL) */ 4.923458286012058399754862059113304e+41DL, /* exp(96.0DL) */ 1.338334719204269500461736408706115e+42DL, /* exp(97.0DL) */ 3.637970947608804579287743826760186e+42DL, /* exp(98.0DL) */ 9.889030319346946770560030967138037e+42DL, /* exp(99.0DL) */ 2.688117141816135448412625551580014e+43DL, /* exp(100.0DL) */ 7.307059979368067272647682634061514e+43DL, /* exp(101.0DL) */ 1.986264836137654325874046890613771e+44DL, /* exp(102.0DL) */ 5.399227610580168869761684237193682e+44DL, /* exp(103.0DL) */ 1.467662230155442328510702112087047e+45DL, /* exp(104.0DL) */ 3.989519570547215850763757278730095e+45DL, /* exp(105.0DL) */ 1.084463855290023081336100102856874e+46DL, /* exp(106.0DL) */ 2.947878391455509377387820248707928e+46DL, /* exp(107.0DL) */ 8.013164264000591141056105836293556e+46DL, /* exp(108.0DL) */ 2.178203880729020635553939331393682e+47DL, /* exp(109.0DL) */ 5.920972027664670298955228815588040e+47DL, /* exp(110.0DL) */ 1.609487066961518054926233299337351e+48DL, /* exp(111.0DL) */ 4.375039447261341073462574675087939e+48DL, /* exp(112.0DL) */ 1.189259022828200881968195409638927e+49DL, /* exp(113.0DL) */ 3.232741191084859311426235420582919e+49DL, /* exp(114.0DL) */ 8.787501635837023113106973803049638e+49DL, /* exp(115.0DL) */ 2.388690601424991425462639294944161e+50DL, /* exp(116.0DL) */ 6.493134255664462136224950708771209e+50DL, /* exp(117.0DL) */ 1.765016885691765583291178205644718e+51DL, /* exp(118.0DL) */ 4.797813327299302186003488289501133e+51DL, /* exp(119.0DL) */ 1.304180878393632279733879028098649e+52DL, /* exp(120.0DL) */ 3.545131182761166475189407421247819e+52DL, /* exp(121.0DL) */ 9.636665673603201271763873014194224e+52DL, /* exp(122.0DL) */ 2.619517318749062676188981025374639e+53DL, /* exp(123.0DL) */ 7.120586326889337708833068068270194e+53DL, /* exp(124.0DL) */ 1.935576042035722568720624490527487e+54DL, /* exp(125.0DL) */ 5.261441182666385745176776704161635e+54DL, /* exp(126.0DL) */ 1.430207995834810446358367107290526e+55DL, /* exp(127.0DL) */ 3.887708405994595092222673688357478e+55DL, /* exp(128.0DL) */ 1.056788711436258812564883496042735e+56DL, /* exp(129.0DL) */ 2.872649550817831933267333224962154e+56DL, /* exp(130.0DL) */ 7.808671073519151171721496316178984e+56DL, /* exp(131.0DL) */ 2.122616868356089389087011829556459e+57DL, /* exp(132.0DL) */ 5.769870862033003179413083148549333e+57DL, /* exp(133.0DL) */ 1.568413511681963940672521233331738e+58DL, /* exp(134.0DL) */ 4.263389948314721044893686688076599e+58DL, /* exp(135.0DL) */ 1.158909542413885428348049567600546e+59DL, /* exp(136.0DL) */ 3.150242749971451918411164291133698e+59DL, /* exp(137.0DL) */ 8.563247622482249193195490908623758e+59DL, /* exp(138.0DL) */ 2.327732040478862025474175038514098e+60DL, /* exp(139.0DL) */ 6.327431707155585364343024512351145e+60DL, /* exp(140.0DL) */ 1.719974263037662264183378392554783e+61DL, /* exp(141.0DL) */ 4.675374784632515402720773410063707e+61DL, /* exp(142.0DL) */ 1.270898631830218879555516649914609e+62DL, /* exp(143.0DL) */ 3.454660656717546323125851786688987e+62DL, /* exp(144.0DL) */ 9.390741286647697813154050401690990e+62DL, /* exp(145.0DL) */ 2.552668139525455104766875580865435e+63DL, /* exp(146.0DL) */ 6.938871417758403301622803744045249e+63DL, /* exp(147.0DL) */ 1.886180808490652005219614818181222e+64DL, /* exp(148.0DL) */ 5.127171016908329766825888768465816e+64DL, /* exp(149.0DL) */ 1.393709580666379697318341937141457e+65DL, /* exp(150.0DL) */ 3.788495427274695804249475044194939e+65DL, /* exp(151.0DL) */ 1.029819827716099194399387877391374e+66DL, /* exp(152.0DL) */ 2.799340524267497068373922891089509e+66DL, /* exp(153.0DL) */ 7.609396478785354221820071817478727e+66DL, /* exp(154.0DL) */ 2.068448417382247309127034796628242e+67DL, /* exp(155.0DL) */ 5.622625746075033580789765081966631e+67DL, /* exp(156.0DL) */ 1.528388139378174566610041404084110e+68DL, /* exp(157.0DL) */ 4.154589706104022437390577106831935e+68DL, /* exp(158.0DL) */ 1.129334570280556947872702202187131e+69DL, /* exp(159.0DL) */ 3.069849640644242466736457030165496e+69DL, /* exp(160.0DL) */ 8.344716494264974360965835809202325e+69DL, /* exp(161.0DL) */ 2.268329121000240471305839031261140e+70DL, /* exp(162.0DL) */ 6.165957830579432532004967054378165e+70DL, /* exp(163.0DL) */ 1.676081112590882772586107349772233e+71DL, /* exp(164.0DL) */ 4.556060831379215688011286441179669e+71DL, /* exp(165.0DL) */ 1.238465736729213219826985646784684e+72DL, /* exp(166.0DL) */ 3.366498907320164247795577890175299e+72DL, /* exp(167.0DL) */ 9.151092805295633936008943833619897e+72DL, /* exp(168.0DL) */ 2.487524928317742944660399447996433e+73DL, /* exp(169.0DL) */ 6.761793810485009722629773981761472e+73DL, /* exp(170.0DL) */ 1.838046124282824702661966133225901e+74DL, /* exp(171.0DL) */ 4.996327379507578237479999229144082e+74DL, /* exp(172.0DL) */ 1.358142592474784978909325501195412e+75DL, /* exp(173.0DL) */ 3.691814329580466442392001432233471e+75DL, /* exp(174.0DL) */ 1.003539180614329457194673346475574e+76DL, /* exp(175.0DL) */ 2.727902318810611519255759319952712e+76DL, /* exp(176.0DL) */ 7.415207303034178428338693757660901e+76DL, /* exp(177.0DL) */ 2.015662326609461206632931840914131e+77DL, /* exp(178.0DL) */ 5.479138274731979437986556445096614e+77DL, /* exp(179.0DL) */ 1.489384200781838359564441023032289e+78DL, /* exp(180.0DL) */ 4.048566008579269326227142668956968e+78DL, /* exp(181.0DL) */ 1.100514341243799484328097603121074e+79DL, /* exp(182.0DL) */ 2.991508135761596920718470160144712e+79DL, /* exp(183.0DL) */ 8.131762205128143406112671204492571e+79DL, /* exp(184.0DL) */ 2.210442143554988732756103709321049e+80DL, /* exp(185.0DL) */ 6.008604711685586125034163217853965e+80DL, /* exp(186.0DL) */ 1.633308100216832937727194388108838e+81DL, /* exp(187.0DL) */ 4.439791729094382135615588198841497e+81DL, /* exp(188.0DL) */ 1.206860517934002309536447331447343e+82DL, /* exp(189.0DL) */ 3.280587015384670151825008413705914e+82DL, /* exp(190.0DL) */ 8.917560070598843142077080332491209e+82DL, /* exp(191.0DL) */ 2.424044149410079585237809735246149e+83DL, /* exp(192.0DL) */ 6.589235162723882173675393093453464e+83DL, /* exp(193.0DL) */ 1.791139820627570890043182762414423e+84DL, /* exp(194.0DL) */ 4.868822826641319706709336201865967e+84DL, /* exp(195.0DL) */ 1.323483261564570355306938300562604e+85DL, /* exp(196.0DL) */ 3.597600500180681130758662848849109e+85DL, /* exp(197.0DL) */ 9.779292065696317602741493974881592e+85DL, /* exp(198.0DL) */ 2.658287191737601973400328347238974e+86DL, /* exp(199.0DL) */ 7.225973768125749258177477042189306e+86DL, /* exp(200.0DL) */ 1.964223318681795865648486413742023e+87DL, /* exp(201.0DL) */ 5.339312554208245971622259980208268e+87DL, /* exp(202.0DL) */ 1.451375629256752594052365491439013e+88DL, /* exp(203.0DL) */ 3.945247999276942790032757321114382e+88DL, /* exp(204.0DL) */ 1.072429594519891802192445120936997e+89DL, /* exp(205.0DL) */ 2.915165879085123966049615522455638e+89DL, /* exp(206.0DL) */ 7.924242436060930749118868880226406e+89DL, /* exp(207.0DL) */ 2.154032421824846569020981598875600e+90DL, /* exp(208.0DL) */ 5.855267190158109347508158747532035e+90DL, /* exp(209.0DL) */ 1.591626640377924159157186340777442e+91DL, /* exp(210.0DL) */ 4.326489974230630919937147247796921e+91DL, /* exp(211.0DL) */ 1.176061853430500122733564724127810e+92DL, /* exp(212.0DL) */ 3.196867565323993534884678511593018e+92DL, /* exp(213.0DL) */ 8.689987010810321382206327468404931e+92DL, /* exp(214.0DL) */ 2.362183378103083330074656746951513e+93DL, /* exp(215.0DL) */ 6.421080152185613551677154136222645e+93DL, /* exp(216.0DL) */ 1.745430549676519405028186247908160e+94DL, /* exp(217.0DL) */ 4.744572146022965554458784288916120e+94DL, /* exp(218.0DL) */ 1.289708424834716297481023414701692e+95DL, /* exp(219.0DL) */ 3.505790975238747722402506089127548e+95DL, /* exp(220.0DL) */ 9.529727902367202538635563498630489e+95DL, /* exp(221.0DL) */ 2.590448618716390103183017128713071e+96DL, /* exp(222.0DL) */ 7.041569407813596999108837294967126e+96DL, /* exp(223.0DL) */ 1.914097016509282082010847732006445e+97DL, /* exp(224.0DL) */ 5.203055137884854592302020535807898e+97DL, /* exp(225.0DL) */ 1.414337023378287226503983716837055e+98DL, /* exp(226.0DL) */ 3.844566629966054009345753170667500e+98DL, /* exp(227.0DL) */ 1.045061560853675486398217750709896e+99DL, /* exp(228.0DL) */ 2.840771850489592771853401334776990e+99DL, /* exp(229.0DL) */ 7.722018499983835717562125214027702e+99DL, /* exp(230.0DL) */ 2.099062256753063472456803931261947e+100DL, /* exp(231.0DL) */ 5.705842789336087248197014832689535e+100DL, /* exp(232.0DL) */ 1.551008877029635809755605451888125e+101DL, /* exp(233.0DL) */ 4.216079246208328874118691759609435e+101DL, /* exp(234.0DL) */ 1.146049160231140937063786504289561e+102DL, /* exp(235.0DL) */ 3.115284606777059095420146431240044e+102DL, /* exp(236.0DL) */ 8.468221537080261941894957767724472e+102DL, /* exp(237.0DL) */ 2.301901272361080096270511976626041e+103DL, /* exp(238.0DL) */ 6.257216399565879491491760484687697e+103DL, /* exp(239.0DL) */ 1.700887763567586268539890286071456e+104DL, /* exp(240.0DL) */ 4.623492299954114627342627486156878e+104DL, /* exp(241.0DL) */ 1.256795510298558713635336961328797e+105DL, /* exp(242.0DL) */ 3.416324397733484996690746761911685e+105DL, /* exp(243.0DL) */ 9.286532530480224090839757024909060e+105DL, /* exp(244.0DL) */ 2.524341262699818777063279323441880e+106DL, /* exp(245.0DL) */ 6.861870983226278429650018966343927e+106DL, /* exp(246.0DL) */ 1.865249920293439464789305714127697e+107DL, /* exp(247.0DL) */ 5.070274963868339013421674936745641e+107DL, /* exp(248.0DL) */ 1.378243629957414808885790181914938e+108DL, /* exp(249.0DL) */ 3.746454614502673260349954812202920e+108DL, /* exp(250.0DL) */ 1.018391949974915412131180980115459e+109DL, /* exp(251.0DL) */ 2.768276331865785592998577160396332e+109DL, /* exp(252.0DL) */ 7.524955249064026372695879140572184e+109DL, /* exp(253.0DL) */ 2.045494911349825175079419025332923e+110DL, /* exp(254.0DL) */ 5.560231647727675417404154047338170e+110DL, /* exp(255.0DL) */ 1.511427665004103542520089665707287e+111DL, /* exp(256.0DL) */ 4.108486356810939873274643501419966e+111DL, /* exp(257.0DL) */ 1.116802380619108297575989418836874e+112DL, /* exp(258.0DL) */ 3.035783617216724286527056406009668e+112DL, /* exp(259.0DL) */ 8.252115441813891570820918707846944e+112DL, /* exp(260.0DL) */ 2.243157545182898709013259885403898e+113DL, /* exp(261.0DL) */ 6.097534393441473280354092573194560e+113DL, /* exp(262.0DL) */ 1.657481694009600331028886805596982e+114DL, /* exp(263.0DL) */ 4.505502369829812111710612511284523e+114DL, /* exp(264.0DL) */ 1.224722521998754311169212305099962e+115DL, /* exp(265.0DL) */ 3.329140976453747121049890265064740e+115DL, /* exp(266.0DL) */ 9.049543420672622984741020586915559e+115DL, /* exp(267.0DL) */ 2.459920943626550038596244273961357e+116DL, /* exp(268.0DL) */ 6.686758400505878376783619550171546e+116DL, /* exp(269.0DL) */ 1.817649385139099978254665044531334e+117DL, /* exp(270.0DL) */ 4.940883294133372012968511104760232e+117DL, /* exp(271.0DL) */ 1.343071327497961308585925029761342e+118DL, /* exp(272.0DL) */ 3.650846383862075425813175768321853e+118DL, /* exp(273.0DL) */ 9.924029383747695725897538647368045e+118DL, /* exp(274.0DL) */ 2.697630873893497823276541791257137e+119DL, /* exp(275.0DL) */ 7.332920984394789339791797649312974e+119DL, /* exp(276.0DL) */ 1.993294586140636987940405781793673e+120DL, /* exp(277.0DL) */ 5.418336452271886559100375698876231e+120DL, /* exp(278.0DL) */ 1.472856551868792008087437247897063e+121DL, /* exp(279.0DL) */ 4.003639200871784538400260785305545e+121DL, /* exp(280.0DL) */ 1.088301968743606516792665866534688e+122DL, /* exp(281.0DL) */ 2.958311465511949419164853541312494e+122DL, /* exp(282.0DL) */ 8.041524299623179605925946091442732e+122DL, /* exp(283.0DL) */ 2.185912937677753978514469372345811e+123DL, /* exp(284.0DL) */ 5.941927417082968078603966504162533e+123DL, /* exp(285.0DL) */ 1.615183332387922236604183385718783e+124DL, /* exp(286.0DL) */ 4.390523502060015075404295319039588e+124DL, /* exp(287.0DL) */ 1.193468025307210843923555893375492e+125DL, /* exp(288.0DL) */ 3.244182446039491164974072332126533e+125DL, /* exp(289.0DL) */ 8.818602191274965898609482242773347e+125DL, /* exp(290.0DL) */ 2.397144608895185727195240960392316e+126DL, /* exp(291.0DL) */ 6.516114630548348330102723702830198e+126DL, /* exp(292.0DL) */ 1.771263599237570031534705841604641e+127DL, /* exp(293.0DL) */ 4.814793655218451387395298079782470e+127DL, /* exp(294.0DL) */ 1.308796610076022186332899984750243e+128DL, /* exp(295.0DL) */ 3.557678042318449655544645980637689e+128DL, /* exp(296.0DL) */ 9.670771573941991842072070104579637e+128DL, /* exp(297.0DL) */ 2.628788263662479636370453338953771e+129DL, /* exp(298.0DL) */ 7.145787367980123848171155588996861e+129DL, /* exp(299.0DL) */ 1.942426395241255936584208836017699e+130DL, /* exp(300.0DL) */ 5.280062373303513270087532378038526e+130DL, /* exp(301.0DL) */ 1.435269760248127992550590452903856e+131DL, /* exp(302.0DL) */ 3.901467708219256838066994684078047e+131DL, /* exp(303.0DL) */ 1.060528877557216226495232041821616e+132DL, /* exp(304.0DL) */ 2.882816376419848626953355204155918e+132DL, /* exp(305.0DL) */ 7.836307370806225343172196949344846e+132DL, /* exp(306.0DL) */ 2.130129192828223962100534606173057e+133DL, /* exp(307.0DL) */ 5.790291477135094778361695172898998e+133DL, /* exp(308.0DL) */ 1.573964410377761135100442978373886e+134DL, /* exp(309.0DL) */ 4.278478855371123572078762559314068e+134DL, /* exp(310.0DL) */ 1.163011132600158073507199921010664e+135DL, /* exp(311.0DL) */ 3.161392028042582800233183836456089e+135DL, /* exp(312.0DL) */ 8.593554502463441183638161736499838e+135DL, /* exp(313.0DL) */ 2.335970304591878365299521443432813e+136DL, /* exp(314.0DL) */ 6.349825630792043955046056134266398e+136DL, /* exp(315.0DL) */ 1.726061562606550753116266296636711e+137DL, /* exp(316.0DL) */ 4.691921780435011562208730704150653e+137DL, /* exp(317.0DL) */ 1.275396571630770220251373313489760e+138DL, /* exp(318.0DL) */ 3.466887324742887734754816324854361e+138DL, /* exp(319.0DL) */ 9.423976816163584609582297533804707e+138DL, /* exp(320.0DL) */ 2.561702493119680037517373932936033e+139DL, /* exp(321.0DL) */ 6.963429336965458599034994515731783e+139DL, /* exp(322.0DL) */ 1.892856343043182383234520340542839e+140DL, /* exp(323.0DL) */ 5.145317001177723577131599201722597e+140DL, /* exp(324.0DL) */ 1.398642170596279385193289912251344e+141DL, /* exp(325.0DL) */ 3.801903596848382201568124647481586e+141DL, /* exp(326.0DL) */ 1.033464546086604114115365543361185e+142DL, /* exp(327.0DL) */ 2.809247895983891453424674296054281e+142DL, /* exp(328.0DL) */ 7.636327507289818180166118335081688e+142DL, /* exp(329.0DL) */ 2.075769029922787004644168141919403e+143DL, /* exp(330.0DL) */ 5.642525234117172040733295233660915e+143DL, /* exp(331.0DL) */ 1.533797381052232870519667063383699e+144DL, /* exp(332.0DL) */ 4.169293549452358510538002660315104e+144DL, /* exp(333.0DL) */ 1.133331489298785982963108539898353e+145DL, /* exp(334.0DL) */ 3.080714392981316820196121871645118e+145DL, /* exp(335.0DL) */ 8.374249953113351519453795208709646e+145DL, /* exp(336.0DL) */ 2.276357147452203500020023477143653e+146DL, /* exp(337.0DL) */ 6.187780269002192175178696821538595e+146DL, /* exp(338.0DL) */ 1.682013066372608173189389845168449e+147DL, /* exp(339.0DL) */ 4.572185553551338758077087969419296e+147DL, /* exp(340.0DL) */ 1.242848890656156500469391700684018e+148DL, /* exp(341.0DL) */ 3.378413554991113073078548479226100e+148DL, /* exp(342.0DL) */ 9.183480175552066013537935348151565e+148DL, /* exp(343.0DL) */ 2.496328728321706373106940389410625e+149DL, /* exp(344.0DL) */ 6.785725020057171180597468784050053e+149DL, /* exp(345.0DL) */ 1.844551301494129868022574114528400e+150DL, /* exp(346.0DL) */ 5.014010284511974955246298929888265e+150DL, /* exp(347.0DL) */ 1.362949304409566890038982913575933e+151DL, /* exp(348.0DL) */ 3.704880327287421330770271193329711e+151DL, /* exp(349.0DL) */ 1.007090887028079759823375862957009e+152DL, /* exp(350.0DL) */ 2.737556857815130410127492651946378e+152DL, /* exp(351.0DL) */ 7.441451060972311209407666002648342e+152DL, /* exp(352.0DL) */ 2.022796119640831622539965665246037e+153DL, /* exp(353.0DL) */ 5.498529934697141407184545638353895e+153DL, /* exp(354.0DL) */ 1.494655400472534013870473442859227e+154DL, /* exp(355.0DL) */ 4.062894614912666263108447007703347e+154DL, /* exp(356.0DL) */ 1.104409260266121092478298771074541e+155DL, /* exp(357.0DL) */ 3.002095623363293218544209572921559e+155DL, /* exp(358.0DL) */ 8.160541980284869890205249363477304e+155DL, /* exp(359.0DL) */ 2.218265297538555399989665903558670e+156DL, /* exp(360.0DL) */ 6.029870249000352388763324493423036e+156DL, /* exp(361.0DL) */ 1.639088672582347627161609834531880e+157DL, /* exp(362.0DL) */ 4.455504953913653233974268168963676e+157DL, /* exp(363.0DL) */ 1.211131815283273938722390511523583e+158DL, /* exp(364.0DL) */ 3.292197605353140509174102360167548e+158DL, /* exp(365.0DL) */ 8.949120926327824993420536927303175e+158DL, /* exp(366.0DL) */ 2.432623279471950477227309535201063e+159DL, /* exp(367.0DL) */ 6.612555656075052543831039207709918e+159DL, /* exp(368.0DL) */ 1.797478987958289530151706000979968e+160DL, /* exp(369.0DL) */ 4.886054470003973416856524852609962e+160DL, /* exp(370.0DL) */ 1.328167307867289205100231902804380e+161DL, /* exp(371.0DL) */ 3.610333058129022556282304462831987e+161DL, /* exp(372.0DL) */ 9.813902746597095882542159047202632e+161DL, /* exp(373.0DL) */ 2.667695350233919987120260891628822e+162DL, /* exp(374.0DL) */ 7.251547794405553090112673549867557e+162DL, /* exp(375.0DL) */ 1.971175059773488349115179760489633e+163DL, /* exp(376.0DL) */ 5.358209345693945694819562705760926e+163DL, /* exp(377.0DL) */ 1.456512309747928310205062027767040e+164DL, /* exp(378.0DL) */ 3.959210944514705822310560742686318e+164DL, /* exp(379.0DL) */ 1.076225116551049803541837343424381e+165DL, /* exp(380.0DL) */ 2.925483177651936727218575960974259e+165DL, /* exp(381.0DL) */ 7.952287761273884428431842997922460e+165DL, /* exp(382.0DL) */ 2.161655931614806197980514918359209e+166DL, /* exp(383.0DL) */ 5.875990038289236239608284190826147e+166DL, /* exp(384.0DL) */ 1.597259694528800030822743979435256e+167DL, /* exp(385.0DL) */ 4.341802002967682598837778729247605e+167DL, /* exp(386.0DL) */ 1.180224148743413720203261526035075e+168DL, /* exp(387.0DL) */ 3.208181857037766822452217552625736e+168DL, /* exp(388.0DL) */ 8.720742444377756058815671175404579e+168DL, /* exp(389.0DL) */ 2.370543571722357032999137386012008e+169DL, /* exp(390.0DL) */ 6.443805514583284515942657384226011e+169DL, /* exp(391.0DL) */ 1.751607943641592951129850402000189e+170DL, /* exp(392.0DL) */ 4.761364043785457544777068604957221e+170DL, /* exp(393.0DL) */ 1.294272935890028705274850735971419e+171DL, /* exp(394.0DL) */ 3.518198602696203860423082985485178e+171DL, /* exp(395.0DL) */ 9.563455330619095063990428284178055e+171DL, /* exp(396.0DL) */ 2.599616684250167670535131669841815e+172DL, /* exp(397.0DL) */ 7.066490793756186237436887792483189e+172DL, /* exp(398.0DL) */ 1.920871351564057584139949852666935e+173DL, /* exp(399.0DL) */ 5.221469689764143950588763006649649e+173DL, /* exp(400.0DL) */ 1.419342617553556088952595304761593e+174DL, /* exp(401.0DL) */ 3.858173245653327799310350012971924e+174DL, /* exp(402.0DL) */ 1.048760222470629699020425144346453e+175DL, /* exp(403.0DL) */ 2.850825855152578357724868730105249e+175DL, /* exp(404.0DL) */ 7.749348118162471942799302224427976e+175DL, /* exp(405.0DL) */ 2.106491217200434556446189142703003e+176DL, /* exp(406.0DL) */ 5.726036797524517045075068123598170e+176DL, /* exp(407.0DL) */ 1.556498177579871997750512324010936e+177DL, /* exp(408.0DL) */ 4.231000712144986142316285393091558e+177DL, /* exp(409.0DL) */ 1.150105235202099544968631947814397e+178DL, /* exp(410.0DL) */ 3.126310161665483428917747618858063e+178DL, /* exp(411.0DL) */ 8.498192102582143603633233273858886e+178DL, /* exp(412.0DL) */ 2.310048116720320742890940914625761e+179DL, /* exp(413.0DL) */ 6.279361818546887415165373333420796e+179DL, /* exp(414.0DL) */ 1.706907512567554855051318463039938e+180DL, /* exp(415.0DL) */ 4.639855674272613745723989048870604e+180DL, /* exp(416.0DL) */ 1.261243536604783670309876943451105e+181DL, /* exp(417.0DL) */ 3.428415386814204104981865890924109e+181DL, /* exp(418.0DL) */ 9.319399246386439579008167656003250e+181DL, /* exp(419.0DL) */ 2.533275362360717919371182124925657e+182DL, /* exp(420.0DL) */ 6.886156383988142686207946843675239e+182DL, /* exp(421.0DL) */ 1.871851376652221570940575120188230e+183DL, /* exp(422.0DL) */ 5.088219582729781827872175380623096e+183DL, /* exp(423.0DL) */ 1.383121483094383153302857465179987e+184DL, /* exp(424.0DL) */ 3.759713994046786261231426611578472e+184DL, /* exp(425.0DL) */ 1.021996223022055807099002130897546e+185DL, /* exp(426.0DL) */ 2.778073761794632040373575342429542e+185DL, /* exp(427.0DL) */ 7.551587424805210467125308242295084e+185DL, /* exp(428.0DL) */ 2.052734287286784027926561180001698e+186DL, /* exp(429.0DL) */ 5.579910311786494341713109506348113e+186DL, /* exp(430.0DL) */ 1.516776880496047302726689430200619e+187DL, /* exp(431.0DL) */ 4.123027032079202208926725386245407e+187DL, /* exp(432.0DL) */ 1.120754945954632433560060190129295e+188DL, /* exp(433.0DL) */ 3.046527803744076674512679471700871e+188DL, /* exp(434.0DL) */ 8.281321168812768059667846719239344e+188DL, /* exp(435.0DL) */ 2.251096484881696877600571550111928e+189DL, /* exp(436.0DL) */ 6.119114668961948467907208237768858e+189DL, /* exp(437.0DL) */ 1.663347821089645057719483053444463e+190DL, /* exp(438.0DL) */ 4.521448156474929211386999357759814e+190DL, /* exp(439.0DL) */ 1.229057036206544984605802280424419e+191DL, /* exp(440.0DL) */ 3.340923407659982062775142884958155e+191DL, /* exp(441.0DL) */ 9.081571389315600216037596266916383e+191DL, /* exp(442.0DL) */ 2.468627048143016150001750467926167e+192DL, /* exp(443.0DL) */ 6.710424046209653429991863024228781e+192DL, /* exp(444.0DL) */ 1.824082374606632138258439437597837e+193DL, /* exp(445.0DL) */ 4.958369972505633112676552999612121e+193DL, /* exp(446.0DL) */ 1.347824699503903822885598093098193e+194DL, /* exp(447.0DL) */ 3.663767388609734883217830085985113e+194DL, /* exp(448.0DL) */ 9.959152316158691480158431249145986e+194DL, /* exp(449.0DL) */ 2.707178276786998323373310485814752e+195DL, /* exp(450.0DL) */ 7.358873516189169058322082659934047e+195DL, /* exp(451.0DL) */ 2.000349215698553788688243281159668e+196DL, /* exp(452.0DL) */ 5.437512923605681866194912742254270e+196DL, /* exp(453.0DL) */ 1.478069257224854165421793387461143e+197DL, /* exp(454.0DL) */ 4.017808803118279437877755383682614e+197DL, /* exp(455.0DL) */ 1.092153665973920471826922283630383e+198DL, /* exp(456.0DL) */ 2.968781464101837877130907914264117e+198DL, /* exp(457.0DL) */ 8.069984706534065228728930759424896e+198DL, /* exp(458.0DL) */ 2.193649278371395040318536641341395e+199DL, /* exp(459.0DL) */ 5.962956971409260822395127288810348e+199DL, /* exp(460.0DL) */ 1.620899757926497623081284104932651e+200DL, /* exp(461.0DL) */ 4.406062357725263759379850038557442e+200DL, /* exp(462.0DL) */ 1.197691924206200182564330974252429e+201DL, /* exp(463.0DL) */ 3.255664193661862052431253530725589e+201DL, /* exp(464.0DL) */ 8.849812817195809529800229688135934e+201DL, /* exp(465.0DL) */ 2.405628536624731937016932793996026e+202DL, /* exp(466.0DL) */ 6.539176337129533597548692943530939e+202DL, /* exp(467.0DL) */ 1.777532421030859060107212665651268e+203DL, /* exp(468.0DL) */ 4.831834079584996998891248221490661e+203DL, /* exp(469.0DL) */ 1.313428677666503353580556912107501e+204DL, /* exp(470.0DL) */ 3.570269307477848686807457768952824e+204DL, /* exp(471.0DL) */ 9.704998181222095712433155396791069e+204DL, /* exp(472.0DL) */ 2.638092020124410678145401874749836e+205DL, /* exp(473.0DL) */ 7.171077600106999417891908990001638e+205DL, /* exp(474.0DL) */ 1.949300993084055637799015726409861e+206DL, /* exp(475.0DL) */ 5.298749467697559449928326786096158e+206DL, /* exp(476.0DL) */ 1.440349439159931454920427073875767e+207DL, /* exp(477.0DL) */ 3.915275707099618806936026895522707e+207DL, /* exp(478.0DL) */ 1.064282280801603304708720273641843e+208DL, /* exp(479.0DL) */ 2.893019184253945246534816702118053e+208DL, /* exp(480.0DL) */ 7.864041477940909773300251372520698e+208DL, /* exp(481.0DL) */ 2.137668104773498866567412075545327e+209DL, /* exp(482.0DL) */ 5.810784364482288383246723426978378e+209DL, /* exp(483.0DL) */ 1.579534954706614601625671846157738e+210DL, /* exp(484.0DL) */ 4.293621164794871538041621948303868e+210DL, /* exp(485.0DL) */ 1.167127239054905898759412509410571e+211DL, /* exp(486.0DL) */ 3.172580765422526796995080546191440e+211DL, /* exp(487.0DL) */ 8.623968643966743418277677243565088e+211DL, /* exp(488.0DL) */ 2.344237725409539218615226602961952e+212DL, /* exp(489.0DL) */ 6.372298810568915474216176683121907e+212DL, /* exp(490.0DL) */ 1.732170406228067068251352333408775e+213DL, /* exp(491.0DL) */ 4.708527339044277307003974590883498e+213DL, /* exp(492.0DL) */ 1.279910430452668093157360961475030e+214DL, /* exp(493.0DL) */ 3.479157265154682276532297319760293e+214DL, /* exp(494.0DL) */ 9.457329972221241007049799869879439e+214DL, /* exp(495.0DL) */ 2.570768820923008648805009142884219e+215DL, /* exp(496.0DL) */ 6.988074171084099775590981488496373e+215DL, /* exp(497.0DL) */ 1.899555503518191363230828929983843e+216DL, /* exp(498.0DL) */ 5.163527207362871553289347179917635e+216DL, /* exp(499.0DL) */ 1.403592217852837410739770332840912e+217DL, /* exp(500.0DL) */ 3.815359220355897431846613368265267e+217DL, /* exp(501.0DL) */ 1.037122163773710615291283344833936e+218DL, /* exp(502.0DL) */ 2.819190331678203457443868041149361e+218DL, /* exp(503.0DL) */ 7.663353849568289091387105632648610e+218DL, /* exp(504.0DL) */ 2.083115551433315195369244084979054e+219DL, /* exp(505.0DL) */ 5.662495150041624317958867141543712e+219DL, /* exp(506.0DL) */ 1.539225767009562224598782635629893e+220DL, /* exp(507.0DL) */ 4.184049432358029151851648927429493e+220DL, /* exp(508.0DL) */ 1.137342554135321378980845851741469e+221DL, /* exp(509.0DL) */ 3.091617597639242037871853535963997e+221DL, /* exp(510.0DL) */ 8.403887936206959658993059652628077e+221DL, /* exp(511.0DL) */ 2.284413586539756640378751517122403e+222DL, /* exp(512.0DL) */ 6.209679940975975047577272304764810e+222DL, /* exp(513.0DL) */ 1.687966014410162954642810721076269e+223DL, /* exp(514.0DL) */ 4.588367344027584854489420260908572e+223DL, /* exp(515.0DL) */ 1.247247557356507640804521511751116e+224DL, /* exp(516.0DL) */ 3.390370370752125486061343822971314e+224DL, /* exp(517.0DL) */ 9.215982170561458765936672745568764e+224DL, /* exp(518.0DL) */ 2.505163686563976262517856075647746e+225DL, /* exp(519.0DL) */ 6.809740926502327887940451611871241e+225DL, /* exp(520.0DL) */ 1.851079501702514062383499313500584e+226DL, /* exp(521.0DL) */ 5.031755772510968263221158771737896e+226DL, /* exp(522.0DL) */ 1.367773028166047047346657916452796e+227DL, /* exp(523.0DL) */ 3.717992567920167547029412002398600e+227DL, /* exp(524.0DL) */ 1.010655163572317397121409894131465e+228DL, /* exp(525.0DL) */ 2.747245565976934381873532297306132e+228DL, /* exp(526.0DL) */ 7.467787700309785784821623443995710e+228DL, /* exp(527.0DL) */ 2.029955160454205303196270276480854e+229DL, /* exp(528.0DL) */ 5.517990225249331746261182601797754e+229DL, /* exp(529.0DL) */ 1.499945255890989237667062477851581e+230DL, /* exp(530.0DL) */ 4.077273932771828716711974820084340e+230DL, /* exp(531.0DL) */ 1.108317964110340884306433009332212e+231DL, /* exp(532.0DL) */ 3.012720581995863893384693306677705e+231DL, /* exp(533.0DL) */ 8.189423612263915821186014819241439e+231DL, /* exp(534.0DL) */ 2.226116139077043620640842633613762e+232DL, /* exp(535.0DL) */ 6.051211048892536372953284172187696e+232DL, /* exp(536.0DL) */ 1.644889703437518074758158943467301e+233DL, /* exp(537.0DL) */ 4.471273790673593297092837895112485e+233DL, /* exp(538.0DL) */ 1.215418229525322146855011085035967e+234DL, /* exp(539.0DL) */ 3.303849287296548204875559387097202e+234DL, /* exp(540.0DL) */ 8.980793481625574506121216074127441e+234DL, /* exp(541.0DL) */ 2.441232772624624153754432382496990e+235DL, /* exp(542.0DL) */ 6.635958684864207975159269263875368e+235DL, /* exp(543.0DL) */ 1.803840590747136040282275111336768e+236DL, /* exp(544.0DL) */ 4.903347099264769269875143479995337e+236DL, /* exp(545.0DL) */ 1.332867931855879259014960921483314e+237DL, /* exp(546.0DL) */ 3.623110678899625578225435150399782e+237DL, /* exp(547.0DL) */ 9.848635920948766939626042406624255e+237DL, /* exp(548.0DL) */ 2.677136805902404708530235246447660e+238DL, /* exp(549.0DL) */ 7.277212331783396755856532665739865e+238DL, /* exp(550.0DL) */ 1.978151404332488388116926108277413e+239DL, /* exp(551.0DL) */ 5.377173016337744632419341697026827e+239DL, /* exp(552.0DL) */ 1.461667169879120399766778310399173e+240DL, /* exp(553.0DL) */ 3.973223307137573289325695033361800e+240DL, /* exp(554.0DL) */ 1.080034071620201739655617026903353e+241DL, /* exp(555.0DL) */ 2.935836991001829401203875825325156e+241DL, /* exp(556.0DL) */ 7.980432343958154358562489927847075e+241DL, /* exp(557.0DL) */ 2.169306422382827602890853416049801e+242DL, /* exp(558.0DL) */ 5.896786228322742509426315390702816e+242DL, /* exp(559.0DL) */ 1.602912685075726150454638702193788e+243DL, /* exp(560.0DL) */ 4.357168424447842629467815384115014e+243DL, /* exp(561.0DL) */ 1.184401175171209895839117272848773e+244DL, /* exp(562.0DL) */ 3.219536192073438364850714410685088e+244DL, /* exp(563.0DL) */ 8.751606726979457897693046120404434e+244DL, /* exp(564.0DL) */ 2.378933353576820110235705073981676e+245DL, /* exp(565.0DL) */ 6.466611306143006928877783259904363e+245DL, /* exp(566.0DL) */ 1.757807200519634761305847926330476e+246DL, /* exp(567.0DL) */ 4.778215371106988348935347740794150e+246DL, /* exp(568.0DL) */ 1.298853601574381967235062972107544e+247DL, /* exp(569.0DL) */ 3.530650142988227249099232301413323e+247DL, /* exp(570.0DL) */ 9.597302126331227875023735925726759e+247DL, /* exp(571.0DL) */ 2.608817197223753285500958233820604e+248DL, /* exp(572.0DL) */ 7.091500380984785710244093969315418e+248DL, /* exp(573.0DL) */ 1.927669662214133920207732330925958e+249DL, /* exp(574.0DL) */ 5.239949414068466053847053734169716e+249DL, /* exp(575.0DL) */ 1.424365927430693263406437508712142e+250DL, /* exp(576.0DL) */ 3.871828017611068619756333191738026e+250DL, /* exp(577.0DL) */ 1.052471974319077600436351056214937e+251DL, /* exp(578.0DL) */ 2.860915442753963560149385355110176e+251DL, /* exp(579.0DL) */ 7.776974460795963023293133416439138e+251DL, /* exp(580.0DL) */ 2.113946470080605596467762082192512e+252DL, /* exp(581.0DL) */ 5.746302275955252943010619149104434e+252DL, /* exp(582.0DL) */ 1.562006905756201809684652029738012e+253DL, /* exp(583.0DL) */ 4.245974987844623805253754053684570e+253DL, /* exp(584.0DL) */ 1.154175665354965636494651964287860e+254DL, /* exp(585.0DL) */ 3.137374737984031099197852644697323e+254DL, /* exp(586.0DL) */ 8.528268739328450016147688013915050e+254DL, /* exp(587.0DL) */ 2.318223794233185573296137735139557e+255DL, /* exp(588.0DL) */ 6.301585614165449125684244573161119e+255DL, /* exp(589.0DL) */ 1.712948566546487259520355035835174e+256DL, /* exp(590.0DL) */ 4.656276961528285912678100380088271e+256DL, /* exp(591.0DL) */ 1.265707305279483645812871129507303e+257DL, /* exp(592.0DL) */ 3.440549168089085763485571675208101e+257DL, /* exp(593.0DL) */ 9.352382283536447018650431059979411e+257DL, /* exp(594.0DL) */ 2.542241081413943403300761495150903e+258DL, /* exp(595.0DL) */ 6.910527735169594554573190583467196e+258DL, /* exp(596.0DL) */ 1.878476196757375020647877911959506e+259DL, /* exp(597.0DL) */ 5.106227710838430591467438208104426e+259DL, /* exp(598.0DL) */ 1.388016599834613402215027842278337e+260DL, /* exp(599.0DL) */ 3.773020300929939823401431193483135e+260DL, /* exp(600.0DL) */ 1.025613252242493391514516645079104e+261DL, /* exp(601.0DL) */ 2.787905866597552912328285255652010e+261DL, /* exp(602.0DL) */ 7.578313856626495175545054862949550e+261DL, /* exp(603.0DL) */ 2.059999284682718808696302995082404e+262DL, /* exp(604.0DL) */ 5.599658622191666139792171291558017e+262DL, /* exp(605.0DL) */ 1.522145027827762021100120336211546e+263DL, /* exp(606.0DL) */ 4.137619169423493238416696018145167e+263DL, /* exp(607.0DL) */ 1.124721500132768927172822089404576e+264DL, /* exp(608.0DL) */ 3.057310015888103407800160209739006e+264DL, /* exp(609.0DL) */ 8.310630260154466370620767610925627e+264DL, /* exp(610.0DL) */ 2.259063521921975363206047978936929e+265DL, /* exp(611.0DL) */ 6.140771320975197609781213157045819e+265DL, /* exp(612.0DL) */ 1.669234709452932671770806976793472e+266DL, /* exp(613.0DL) */ 4.537450378139020943054455738228414e+266DL, /* exp(614.0DL) */ 1.233406891042992406398480210225887e+267DL, /* exp(615.0DL) */ 3.352747539018331781648810576495882e+267DL, /* exp(616.0DL) */ 9.113712710724315024083120382834683e+267DL, /* exp(617.0DL) */ 2.477363965135813264401301521582167e+268DL, /* exp(618.0DL) */ 6.734173448907928873072281631157755e+268DL, /* exp(619.0DL) */ 1.830538131585779973659984071493435e+269DL, /* exp(620.0DL) */ 4.975918539390998333056028597620767e+269DL, /* exp(621.0DL) */ 1.352594894551902465257285293765718e+270DL, /* exp(622.0DL) */ 3.676734123126914915853981239838730e+270DL, /* exp(623.0DL) */ 9.994399554971194634376021138137170e+270DL, /* exp(624.0DL) */ 2.716759469663736693407194678125877e+271DL, /* exp(625.0DL) */ 7.384917898680968214434664479009658e+271DL, /* exp(626.0DL) */ 2.007428812864643244165976038645452e+272DL, /* exp(627.0DL) */ 5.456757263935072986189812313850169e+272DL, /* exp(628.0DL) */ 1.483300411286660709274049565156564e+273DL, /* exp(629.0DL) */ 4.032028554146357891230336377029199e+273DL, /* exp(630.0DL) */ 1.096018995056404220473333839077488e+274DL, /* exp(631.0DL) */ 2.979288517907767725080181759267345e+274DL, /* exp(632.0DL) */ 8.098545839965365786039531189385352e+274DL, /* exp(633.0DL) */ 2.201412999372044884674717205317365e+275DL, /* exp(634.0DL) */ 5.984060953126553169633576189715827e+275DL, /* exp(635.0DL) */ 1.626636414927522393392903634887462e+276DL, /* exp(636.0DL) */ 4.421656208207251754959015960656940e+276DL, /* exp(637.0DL) */ 1.201930772246289711810497611562084e+277DL, /* exp(638.0DL) */ 3.267186577262836658270402974456316e+277DL, /* exp(639.0DL) */ 8.881133903158873299234272672967127e+277DL, /* exp(640.0DL) */ 2.414142490506831928910472323441926e+278DL, /* exp(641.0DL) */ 6.562319663255584349955503981011063e+278DL, /* exp(642.0DL) */ 1.783823429316713583233384122083389e+279DL, /* exp(643.0DL) */ 4.848934813091120635935959450934223e+279DL, /* exp(644.0DL) */ 1.318077138980805015534262735851842e+280DL, /* exp(645.0DL) */ 3.582905135398809745024502084539878e+280DL, /* exp(646.0DL) */ 9.739345922647179593882146700607238e+280DL, /* exp(647.0DL) */ 2.647428704260852228681909004375106e+281DL, /* exp(648.0DL) */ 7.196457338933150317666337445002583e+281DL, /* exp(649.0DL) */ 1.956199921370271886821566849827147e+282DL, /* exp(650.0DL) */ 5.317502699093823182683530149803012e+282DL, /* exp(651.0DL) */ 1.445447095972866590256825223241052e+283DL, /* exp(652.0DL) */ 3.929132574981940835735158434038403e+283DL, /* exp(653.0DL) */ 1.068048968017990678959437158369329e+284DL, /* exp(654.0DL) */ 2.903258101667740029588950654122071e+284DL, /* exp(655.0DL) */ 7.891873741089921014851556006624308e+284DL, /* exp(656.0DL) */ 2.145233698289783624753859799313684e+285DL, /* exp(657.0DL) */ 5.831349779859112813154641712075748e+285DL, /* exp(658.0DL) */ 1.585125214197968009236380889475074e+286DL, /* exp(659.0DL) */ 4.308817065586588211059622644869701e+286DL, /* exp(660.0DL) */ 1.171257913153824883863901946336209e+287DL, /* exp(661.0DL) */ 3.183809101764904714912751772693689e+287DL, /* exp(662.0DL) */ 8.654490426610055613160749879342242e+287DL, /* exp(663.0DL) */ 2.352534406122688441013083174382482e+288DL, /* exp(664.0DL) */ 6.394851526987995637863277529865170e+288DL, /* exp(665.0DL) */ 1.738300870150504624084731424404936e+289DL, /* exp(666.0DL) */ 4.725191667724663076744727468708714e+289DL, /* exp(667.0DL) */ 1.284440264636204247017089930798463e+290DL, /* exp(668.0DL) */ 3.491470631101721219149135067460521e+290DL, /* exp(669.0DL) */ 9.490801171122243367142720526726012e+290DL, /* exp(670.0DL) */ 2.579867236097941956885309166553365e+291DL, /* exp(671.0DL) */ 7.012806227721897012192969479137924e+291DL, /* exp(672.0DL) */ 1.906278373532085777127233131597929e+292DL, /* exp(673.0DL) */ 5.181801862756732947542478176037853e+292DL, /* exp(674.0DL) */ 1.408559784220685861163313619793030e+293DL, /* exp(675.0DL) */ 3.828862465745284175763386828853108e+293DL, /* exp(676.0DL) */ 1.040792726430429952342378704515152e+294DL, /* exp(677.0DL) */ 2.829167955448183987744726075009629e+294DL, /* exp(678.0DL) */ 7.690475842953428199469558510214363e+294DL, /* exp(679.0DL) */ 2.090488073610356201828202177433601e+295DL, /* exp(680.0DL) */ 5.682535743105386205805042279863698e+295DL, /* exp(681.0DL) */ 1.544673365005238856979877261448928e+296DL, /* exp(682.0DL) */ 4.198857538998426858121488429544030e+296DL, /* exp(683.0DL) */ 1.141367814854769059625262650135429e+297DL, /* exp(684.0DL) */ 3.102559390707726651118664429334005e+297DL, /* exp(685.0DL) */ 8.433630813475780520653859864366691e+297DL, /* exp(686.0DL) */ 2.292498538820348974912352830338758e+298DL, /* exp(687.0DL) */ 6.231657119844267706438578811036121e+298DL, /* exp(688.0DL) */ 1.693940031006010360564275039893585e+299DL, /* exp(689.0DL) */ 4.604606404782989622120963349708575e+299DL, /* exp(690.0DL) */ 1.251661791732773560414909608460945e+300DL, /* exp(691.0DL) */ 3.402369503843688383092159087116573e+300DL, /* exp(692.0DL) */ 9.248599196001515793928708938024616e+300DL, /* exp(693.0DL) */ 2.514029913319185603777288352959536e+301DL, /* exp(694.0DL) */ 6.833841829578010843769419754835242e+301DL, /* exp(695.0DL) */ 1.857630806390522231607897627268625e+302DL, /* exp(696.0DL) */ 5.049564064997079424341813227011041e+302DL, /* exp(697.0DL) */ 1.372613823952135019694448602262587e+303DL, /* exp(698.0DL) */ 3.731151215140771601712733760653182e+303DL, /* exp(699.0DL) */ 1.014232054735004509455329595231268e+304DL, /* exp(700.0DL) */ 2.756968564226842505826254726602022e+304DL, /* exp(701.0DL) */ 7.494217549770650136851917092620455e+304DL, /* exp(702.0DL) */ 2.037139538406042869372594433878036e+305DL, /* exp(703.0DL) */ 5.537519389284593616073850538300673e+305DL, /* exp(704.0DL) */ 1.505253833063194063830465824095254e+306DL, /* exp(705.0DL) */ 4.091704141634005599423296108553077e+306DL, /* exp(706.0DL) */ 1.112240501563433293848363821483406e+307DL, /* exp(707.0DL) */ 3.023383144276055014775621985096731e+307DL, /* exp(708.0DL) */ 8.218407461554972189241372386597816e+307DL, /* exp(709.0DL) */ 2.233994766161711031253644458116810e+308DL, /* exp(710.0DL) */ 6.072627377729993058870274802931239e+308DL, /* exp(711.0DL) */ 1.650711265188634268635859219882103e+309DL, /* exp(712.0DL) */ 4.487098436194904665811320991414945e+309DL, /* exp(713.0DL) */ 1.219719814161560797699519459504529e+310DL, /* exp(714.0DL) */ 3.315542206646814341669187723053315e+310DL, /* exp(715.0DL) */ 9.012578131817040091646289944365234e+310DL, /* exp(716.0DL) */ 2.449872736328562975159249769074200e+311DL, /* exp(717.0DL) */ 6.659444541199170579579700734839518e+311DL, /* exp(718.0DL) */ 1.810224708397248900192728326006270e+312DL, /* exp(719.0DL) */ 4.920700930263815717908101983834722e+312DL, /* exp(720.0DL) */ 1.337585192201764982860090659029994e+313DL, /* exp(721.0DL) */ 3.635933521977957171804010465462696e+313DL, /* exp(722.0DL) */ 9.883492022277777556027845935179594e+313DL, /* exp(723.0DL) */ 2.686611676587762382032477144990756e+314DL, /* exp(724.0DL) */ 7.302967700594403819661802237302293e+314DL, /* exp(725.0DL) */ 1.985152439434910522842840163468744e+315DL, /* exp(726.0DL) */ 5.396203802837062631836118637081575e+315DL, /* exp(727.0DL) */ 1.466840273991358384174339327079969e+316DL, /* exp(728.0DL) */ 3.987285262042596563546861047334350e+316DL, /* exp(729.0DL) */ 1.083856507269295270218762885555664e+317DL, /* exp(730.0DL) */ 2.946227448367214400878225512361948e+317DL, /* exp(731.0DL) */ 8.008676535403858849347854789488034e+317DL, /* exp(732.0DL) */ 2.176983989619465295637813934827586e+318DL, /* exp(733.0DL) */ 5.917656019828867276099362352692636e+318DL, /* exp(734.0DL) */ 1.608585682577208938684831976797157e+319DL, /* exp(735.0DL) */ 4.372589230469016858241988532693547e+319DL, /* exp(736.0DL) */ 1.188592984849964869521935757602547e+320DL, /* exp(737.0DL) */ 3.230930712151556757737907741524966e+320DL, /* exp(738.0DL) */ 8.782580243851818865661945584396214e+320DL, /* exp(739.0DL) */ 2.387352828384580956238600899756351e+321DL, /* exp(740.0DL) */ 6.489497811518111949732100007150520e+321DL, /* exp(741.0DL) */ 1.764028397687442585608481908129751e+322DL, /* exp(742.0DL) */ 4.795126338319501235251533562592617e+322DL, /* exp(743.0DL) */ 1.303450479061926016436398558519613e+323DL, /* exp(744.0DL) */ 3.543145751530270709100952804291556e+323DL, /* exp(745.0DL) */ 9.631268711966602235896809976117011e+323DL, /* exp(746.0DL) */ 2.618050272474496901344534952692922e+324DL, /* exp(747.0DL) */ 7.116598481659677023880278303144470e+324DL, /* exp(748.0DL) */ 1.934492033313473195934101346006087e+325DL, /* exp(749.0DL) */ 5.258494541454804166807735549286840e+325DL, /* exp(750.0DL) */ 1.429407015708767371435505583554978e+326DL, /* exp(751.0DL) */ 3.885531116273015366004138350574444e+326DL, /* exp(752.0DL) */ 1.056196862727712730194308509475448e+327DL, /* exp(753.0DL) */ 2.871040739228194163929095858500196e+327DL, /* exp(754.0DL) */ 7.804297870209624512932094469324608e+327DL, /* exp(755.0DL) */ 2.121428108447245061685883072308586e+328DL, /* exp(756.0DL) */ 5.766639477574391013185570062882344e+328DL, /* exp(757.0DL) */ 1.567535130316502898552990500196127e+329DL, /* exp(758.0DL) */ 4.261002260210531250477579537542399e+329DL, /* exp(759.0DL) */ 1.158260501495320733780838097543570e+330DL, /* exp(760.0DL) */ 3.148478473836591142185522040052992e+330DL, /* exp(761.0DL) */ 8.558451822724473185317785446579883e+330DL, /* exp(762.0DL) */ 2.326428406945412944180484968414935e+331DL, /* exp(763.0DL) */ 6.323888063810640869736906367024209e+331DL, /* exp(764.0DL) */ 1.719011000906552019388401599159601e+332DL, /* exp(765.0DL) */ 4.672756366685475689938267252485588e+332DL, /* exp(766.0DL) */ 1.270186872037743970562137024901372e+333DL, /* exp(767.0DL) */ 3.452725893007433996921737545743740e+333DL, /* exp(768.0DL) */ 9.385482053612137472931923385909968e+333DL, /* exp(769.0DL) */ 2.551238531766235587117882706264335e+334DL, /* exp(770.0DL) */ 6.934985340964692832704317313855231e+334DL, /* exp(771.0DL) */ 1.885124463297418049480527073185397e+335DL, /* exp(772.0DL) */ 5.124299572964981846159920452385392e+335DL, /* exp(773.0DL) */ 1.392929041277115553629473402158305e+336DL, /* exp(974.0DL) */ 3.786373701236462561280390085789673e+336DL, /* exp(775.0DL) */ 1.029243082782629411817691553637979e+337DL, /* exp(776.0DL) */ 2.797772768995190337381259359131943e+337DL, /* exp(777.0DL) */ 7.605134878117171972732666762336810e+337DL, /* exp(778.0DL) */ 2.067289994216600435830214794233100e+338DL, /* exp(779.0DL) */ 5.619476825434189682607279641036338e+338DL, /* exp(780.0DL) */ 1.527532174002448008606957458439105e+339DL, /* exp(781.0DL) */ 4.152262950977394815646445394711523e+339DL, /* exp(782.0DL) */ 1.128702092662558368976236259107382e+340DL, /* exp(783.0DL) */ 3.068130388228329868155355092030060e+340DL, /* exp(784.0DL) */ 8.340043081664064831576661484892520e+340DL, /* exp(785.0DL) */ 2.267058755745300447162613736782219e+341DL, /* exp(786.0DL) */ 6.162504619791423322029108992107036e+341DL, /* exp(787.0DL) */ 1.675142432577394355012813183678504e+342DL, /* exp(788.0DL) */ 4.553509234555812431045605262925491e+342DL, /* exp(789.0DL) */ 1.237772140801352130137968719139589e+343DL, /* exp(790.0DL) */ 3.364613518113166256879695073686605e+343DL, /* exp(791.0DL) */ 9.145967786074678487937518358486807e+343DL, /* exp(792.0DL) */ 2.486131803655860291965933147405355e+344DL, /* exp(793.0DL) */ 6.758006905031835956303670857496097e+344DL, /* exp(794.0DL) */ 1.837016736654879231178405757986544e+345DL, /* exp(795.0DL) */ 4.993529213824093501885397663400206e+345DL, /* exp(796.0DL) */ 1.357381972181741554798631247078373e+346DL, /* exp(797.0DL) */ 3.689746749259529308695564251354971e+346DL, /* exp(798.0DL) */ 1.002977154012801164059425092238661e+347DL, /* exp(799.0DL) */ 2.726374572112566567364779546367270e+347DL, /* exp(800.0DL) */ 7.411054456946394527643734255031975e+347DL, /* exp(801.0DL) */ 2.014533466003780185206947161220956e+348DL, /* exp(802.0DL) */ 5.476069713460693445797399842131595e+348DL, /* exp(803.0DL) */ 1.488550079347513369645468095661906e+349DL, /* exp(804.0DL) */ 4.046298631441615511213976592495992e+349DL, /* exp(805.0DL) */ 1.099898004236644699470400827438392e+350DL, /* exp(806.0DL) */ 2.989832758074841236490032825474100e+350DL, /* exp(807.0DL) */ 8.127208056406429679254269659776141e+350DL, /* exp(808.0DL) */ 2.209204197583555291455186381500514e+351DL, /* exp(809.0DL) */ 6.005239625646824521234554982136528e+351DL, /* exp(810.0DL) */ 1.632393374993796247932666212255357e+352DL, /* exp(811.0DL) */ 4.437305248142568354514550335867051e+352DL, /* exp(812.0DL) */ 1.206184622335189814332380803085358e+353DL, /* exp(813.0DL) */ 3.278749740660482701078221353658401e+353DL, /* exp(814.0DL) */ 8.912565840102197290438257902201843e+353DL, /* exp(815.0DL) */ 2.422686576809462744120292600053280e+354DL, /* exp(816.0DL) */ 6.585544897792811525640914217004867e+354DL, /* exp(817.0DL) */ 1.790136702617137988676169463619492e+355DL, /* exp(818.0DL) */ 4.866096069181759959966874278606174e+355DL, /* exp(819.0DL) */ 1.322742052039276714359927254015698e+356DL, /* exp(820.0DL) */ 3.595585683796994671507456303747256e+356DL, /* exp(821.0DL) */ 9.773815226932861133048219422303157e+356DL, /* exp(822.0DL) */ 2.656798432608791590522782184502560e+357DL, /* exp(823.0DL) */ 7.221926901238951475359041420051346e+357DL, /* exp(824.0DL) */ 1.963123266209738361537629812032583e+358DL, /* exp(825.0DL) */ 5.336322301563100606580738879236068e+358DL, /* exp(826.0DL) */ 1.450562794313972570108358416386998e+359DL, /* exp(827.0DL) */ 3.943038484822447303136740477606212e+359DL, /* exp(828.0DL) */ 1.071828986220754533990420066011544e+360DL, /* exp(829.0DL) */ 2.913533256459557435440451773626653e+360DL, /* exp(830.0DL) */ 7.919804507645122153121565572979161e+360DL, /* exp(831.0DL) */ 2.152826067807977114589000590698994e+361DL, /* exp(832.0DL) */ 5.851987979955364533013829044052101e+361DL, /* exp(833.0DL) */ 1.590735258627342286079138111639773e+362DL, /* exp(834.0DL) */ 4.324066747415804201377394599833634e+362DL, /* exp(835.0DL) */ 1.175403206454438875839130486743495e+363DL, /* exp(836.0DL) */ 3.195077177217596747680371113061627e+363DL, /* exp(837.0DL) */ 8.685120231354813795861588571062056e+363DL, /* exp(838.0DL) */ 2.360860450287380922234892268978168e+364DL, /* exp(839.0DL) */ 6.417484061543826679679953837133422e+364DL, /* exp(840.0DL) */ 1.744453030892013317040787485731125e+365DL, /* exp(841.0DL) */ 4.741914974474065282186766441410415e+365DL, /* exp(842.0DL) */ 1.288986130721068898936989817415551e+366DL, /* exp(843.0DL) */ 3.503827576274817066469387283511598e+366DL, /* exp(844.0DL) */ 9.524390830641534520220942573435094e+366DL, /* exp(845.0DL) */ 2.588997852207483509886649384554193e+367DL, /* exp(846.0DL) */ 7.037625815575099238948400387904897e+367DL, /* exp(847.0DL) */ 1.913025036997206022941837310382119e+368DL, /* exp(848.0DL) */ 5.200141195456697847293452548102919e+368DL, /* exp(849.0DL) */ 1.413544931703123795815965756251118e+369DL, /* exp(850.0DL) */ 3.842413501558983570866924089658815e+369DL, /* exp(851.0DL) */ 1.044476279871347632101279988319276e+370DL, /* exp(852.0DL) */ 2.839180891830788305933519109095650e+370DL, /* exp(853.0DL) */ 7.717693825971777963654884672708470e+370DL, /* exp(854.0DL) */ 2.097886688474964905823576978118637e+371DL, /* exp(855.0DL) */ 5.702647263447619025108165020564636e+371DL, /* exp(856.0DL) */ 1.550140243034136448104461225796107e+372DL, /* exp(857.0DL) */ 4.213718054202781183259880383059111e+372DL, /* exp(858.0DL) */ 1.145407321698922631344907889538815e+373DL, /* exp(859.0DL) */ 3.113539908758125249535484762623464e+373DL, /* exp(860.0DL) */ 8.463478956159245573379795255424772e+373DL, /* exp(861.0DL) */ 2.300612105207320560570469899879770e+374DL, /* exp(862.0DL) */ 6.253712079917968677677102550660032e+374DL, /* exp(863.0DL) */ 1.699935190725583472080427393935978e+375DL, /* exp(864.0DL) */ 4.620902938507414836577231776192770e+375DL, /* exp(865.0DL) */ 1.256091648881771067050965908374898e+376DL, /* exp(866.0DL) */ 3.414411104034477698615834349236418e+376DL, /* exp(867.0DL) */ 9.281331658985707362486969070681960e+376DL, /* exp(868.0DL) */ 2.522927519252249231103011832368825e+377DL, /* exp(869.0DL) */ 6.858028030102647089906384408884850e+377DL, /* exp(870.0DL) */ 1.864205297329080765037552524479372e+378DL, /* exp(871.0DL) */ 5.067435384246731739018239329665377e+378DL, /* exp(872.0DL) */ 1.377471752188827042319870828033714e+379DL, /* exp(873.0DL) */ 3.744356433190529618458759523623273e+379DL, /* exp(874.0DL) */ 1.017821605161554170369897256012423e+380DL, /* exp(875.0DL) */ 2.766725973923669863850278968760077e+380DL, /* exp(876.0DL) */ 7.520740939242366025852659043295359e+380DL, /* exp(877.0DL) */ 2.044349343169053595033812265286127e+381DL, /* exp(878.0DL) */ 5.557117670558623144732170233962540e+381DL, /* exp(879.0DL) */ 1.510581198248816429203206789026766e+382DL, /* exp(880.0DL) */ 4.106185421611648223691878540343077e+382DL, /* exp(881.0DL) */ 1.116176921585038669288681280743735e+383DL, /* exp(882.0DL) */ 3.034083443289967269077449220617243e+383DL, /* exp(883.0DL) */ 8.247493889923568110575810990828503e+383DL, /* exp(884.0DL) */ 2.241901277130624027773101880668667e+384DL, /* exp(885.0DL) */ 6.094119502823301376410746524099709e+384DL}; /* exp(886.0DL) */ #endif /*_DDLOGTBLS_H */ libdfp-1.0.17/ieee754r/decexptables.c000066400000000000000000000124721504475242000172110ustar00rootroot00000000000000/* A utility to generate the crazy looking double-decimal128 tables used by expd128. Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. This is adapted, derived, and in some spiritual form based on the version found in glibc's float128/ibm128 variant. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. In the non-zero, by hopefully approximating zero case, I have done this wrong, an educated observer can regenerate and fix this tables. We use a hypothetical _Decimal256 and use rounding tricks to approximate a 256 digit decimal value for select and small exp values. We use decNumber directly and live with <= 1ULP whereby it is usually correctly rounded except in cases whereby it cannot describe but claims exist. */ /* ensure room enough for full double-double precision */ #define DECNUMDIGITS 68 #include "decNumber.h" const decNumber *dzero; static char TBLHDRSTR[] = "static const struct { _Decimal128 hi; _Decimal128 lo; _Decimal128 out; } %s[] = {\n"; void gentable (const decNumber * start, int tmax, decContext * ctxp) { enum rounding rnd; char dstr[DECNUMDIGITS + 4 + 4 + 1]; char ddstr[sizeof (dstr)]; char dddstr[sizeof (dstr)]; char ddddstr[sizeof (dstr)]; for (int x = -tmax; x <= tmax; x++) { decNumber expv_rnd; decNumber expv; decNumber expv_fdg; decNumber expv_l; decNumber expv_h; decNumber tmp; decNumberFromInt32 (&tmp, x); decNumberMultiply (&tmp, &tmp, start, ctxp); /* Only compute the value to the target precision (34) */ ctxp->digits /= 2; decNumberExp (&expv, &tmp, ctxp); ctxp->digits *= 2; /* Truncate result to 17 digits. */ ctxp->digits /= 4; rnd = ctxp->round; ctxp->round = DEC_ROUND_DOWN; decNumberAdd (&expv_rnd, &expv, dzero, ctxp); ctxp->round = rnd; ctxp->digits *= 4; /* This is kind of crude. Does it stand that +/- 1ULP gives us a closer a closer fit (e.g better reduction of input? */ decNumberLn (&expv_fdg, &expv_rnd, ctxp); ctxp->digits /= 2; decNumberExp (&tmp, &expv_fdg, ctxp); ctxp->digits *= 2; /* Compute high and low D32 parts */ ctxp->digits /= 2; decNumberAdd (&expv_h, &expv_fdg, dzero, ctxp); ctxp->digits *= 2; decNumberSubtract (&expv_l, &expv_fdg, &expv_h, ctxp); decNumberToString (&expv_h, dstr); decNumberToString (&expv_l, ddstr); decNumberToString (&expv_l, ddstr); decNumberToString (&expv_rnd, dddstr); decNumberToString (&expv_fdg, ddddstr); if (x != 0) printf ("/*%5d*/ {%38sDL, %41sDL, %sDL}, /* %s */\n", x, dstr, ddstr, dddstr, ddddstr); else printf ("/* 0*/ {%38sDL, %41sDL, %sDL}, /* %s */\n", "0.0", "0.0", "1.0", ddddstr); } } int main (void) { enum rounding rnd; decContext ctx; decNumber ln10d2, ln10, ten, two, tp2, tmp, ln10dt1max; decNumber _17, _0, _1; int t1max; char dstr[DECNUMDIGITS + 4 + 4 + 1]; char ddstr[sizeof (dstr)]; char dddstr[sizeof (dstr)]; char ddddstr[sizeof (dstr)]; dzero = &_0; /* Table one, fit values for where x <= |ln(10)/2| in round-to-nearest-int(x*1000) steps, or -115 to 115. */ decContextDefault (&ctx, DEC_INIT_DECIMAL128); ctx.digits *= 2; /* The d128 exponent range is sufficient here */ decNumberFromInt32 (&ten, 10); decNumberFromInt32 (&tp2, 100); decNumberFromInt32 (&two, 2); decNumberFromInt32 (&_17, 17); decNumberFromInt32 (&_0, 0); decNumberFromInt32 (&_1, 1); decNumberLn (&ln10, &ten, &ctx); decNumberDivide (&ln10d2, &ln10, &two, &ctx); decNumberMultiply (&tmp, &ln10d2, &tp2, &ctx); decNumberToIntegralValue (&tmp, &tmp, &ctx); t1max = decNumberToInt32 (&tmp, &ctx); decNumberFromInt32 (&ln10dt1max, t1max * 2); decNumberDivide (&ln10dt1max, &ln10, &ln10dt1max, &ctx); printf (TBLHDRSTR, "exptbl1"); decNumberFromInt32 (&ln10dt1max, 100); decNumberDivide (&ln10dt1max, &_1, &ln10dt1max, &ctx); gentable (&ln10dt1max, t1max, &ctx); printf ("#define EXPTBL1OFF %d\n", t1max); printf ("};\n"); /* Second table. Not sure how to range reduce here. Values are between +/-0.01 100 + 1 for possible integer rounding. */ t1max = 101; decNumberFromInt32 (&ln10dt1max, 100 * 100); decNumberDivide (&ln10dt1max, &_1, &ln10dt1max, &ctx); printf (TBLHDRSTR, "exptbl2"); gentable (&ln10dt1max, t1max, &ctx); printf ("#define EXPTBL2OFF %d\n", t1max); printf ("};\n"); return 0; }; /* This is kind of slow, but it simplifies life greatly. */ #include "decNumber.c" #include "decContext.c" libdfp-1.0.17/ieee754r/declntables.c000066400000000000000000000103731504475242000170240ustar00rootroot00000000000000/* A utility to generate the ln(t) - t + 1 table used by logd128. Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. This is adapted, derived, and in some spiritual form based on the version found in glibc's float128/ibm128 variant. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. gcc declntables.c -O2 -ldecnumber -o declntables ./declntables > t_logd128.h */ #define DECNUMDIGITS 68 #include #include #include #include const decNumber *dzero; const char COPYRIGHT[] = "/* Generated table of ln(x) - (t - 1) table values.\n" "\n" " See declntables.c to understand how, or fix these\n" " values if such is neeeded.\n" "\n" " Copyright (C) 2019 Free Software Foundation, Inc.\n" "\n" " This file is part of the Decimal Floating Point C Library.\n" "\n" " This is adapted, derived, and in some spiritual form based on\n" " the version found in glibc's float128/ibm128 variant.\n" "\n" " The Decimal Floating Point C Library is free software; you can\n" " redistribute it and/or modify it under the terms of the GNU Lesser\n" " General Public License version 2.1.\n" "\n" " The Decimal Floating Point C Library is distributed in the hope that\n" " it will be useful, but WITHOUT ANY WARRANTY; without even the implied\n" " warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See\n" " the GNU Lesser General Public License version 2.1 for more details.\n" "\n" " You should have received a copy of the GNU Lesser General Public\n" " License version 2.1 along with the Decimal Floating Point C Library;\n" " if not, write to the Free Software Foundation, Inc., 51 Franklin\n" " Street, Fifth Floor, Boston, MA 02110-1301 USA.\n" "\n" " Please see libdfp/COPYING.txt for more information. */\n"; static char TBLHDRSTR[] = "static const struct { _Decimal128 t; _Decimal128 lnt; } %s[] = {\n"; static void p_lntptm1 (int ix, decNumber const *_1, decContext * ctx, decNumber const *_1000) { char dstr[DECNUMDIGITS + 4 + 4 + 1]; char ddstr[sizeof (dstr)]; decNumber x, tp1, lnt; /* Compute in a higher precision to avoid precision loss during final subtraction. */ ctx->digits *= 2; decNumberFromInt32 (&x, ix); decNumberDivide (&x, &x, _1000, ctx); decNumberLn (&lnt, &x, ctx); decNumberSubtract (&tp1, &x, _1, ctx); decNumberSubtract (&tp1, &lnt, &tp1, ctx); ctx->digits /= 2; decNumberAdd( &tp1, dzero, &tp1, ctx); decNumberToString (&tp1, dstr); decNumberToString (&x, ddstr); printf (" {%5sDL, %+36sDL},\n", ddstr, dstr); } int main (void) { enum rounding rnd; int prec = 100; /* 10 ^ n - 1 digits of precision, 3 digits suffices for float128 p(x) */ int ixs = 2 * prec; int decade_shift = prec * 10; int ixe = ixs * 10; decContext ctx; decNumber _1, _1000, _0; dzero = &_0; decContextDefault (&ctx, DEC_INIT_DECIMAL128); decNumberZero (&_0); decNumberFromInt32 (&_1, 1); decNumberFromInt32 (&_1000, decade_shift); puts (COPYRIGHT); printf (TBLHDRSTR, "lntvals"); printf (" {%5sDL, %+36sDL},\n", "1.0", "0.0"); for (int ix = decade_shift + prec / 10; ix < ixe; ix += 10) { p_lntptm1 (ix, &_1, &ctx, &_1000); } for (int ix = ixs; ix < decade_shift; ix += 1) { p_lntptm1 (ix, &_1, &ctx, &_1000); } /* And one final entry if the rounded value rounds up to 1.0. */ printf (" {%5sDL, %+36sDL},\n", "1.0", "0.0"); printf ("};\n"); printf ("#define LNTVALS_START %d\n", prec); return 0; }; libdfp-1.0.17/ieee754r/erfd128.c000066400000000000000000000021201504475242000157060ustar00rootroot00000000000000/* Returns the error function of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "erfd32.c" libdfp-1.0.17/ieee754r/erfd32.c000066400000000000000000000743561504475242000156440ustar00rootroot00000000000000/* erfd32 Copyright (C) 2001 Stephen L. Moshier Copyright (C) 2006 IBM Corporation. Copyright (C) 2001-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #define FUNCTION_NAME erf /* * Portions of this code are: * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== * * This was adapted for GLIBC in 2001. * This was adapted for libdfp in 2006 and dontated to the FSF in 2007. * * * double erf(double x) * double erfc(double x) * x * 2 |\ * erf(x) = --------- | exp(-t*t)dt * sqrt(pi) \| * 0 * * erfc(x) = 1-erf(x) * Note that * erf(-x) = -erf(x) * erfc(-x) = 2 - erfc(x) * * Method: * 1. erf(x) = x + x*R(x^2) for |x| in [0, 7/8] * Remark. The formula is derived by noting * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....) * and that * 2/sqrt(pi) = 1.128379167095512573896158903121545171688 * is close to one. * * 1a. erf(x) = 1 - erfc(x), for |x| > 1.0 * erfc(x) = 1 - erf(x) if |x| < 1/4 * * 2. For |x| in [7/8, 1], let s = |x| - 1, and * c = 0.84506291151 rounded to single (24 bits) * erf(s + c) = sign(x) * (c + P1(s)/Q1(s)) * Remark: here we use the taylor series expansion at x=1. * erf(1+s) = erf(1) + s*Poly(s) * = 0.845.. + P1(s)/Q1(s) * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25] * * 3. For x in [1/4, 5/4], * erfc(s + const) = erfc(const) + s P1(s)/Q1(s) * for const = 1/4, 3/8, ..., 9/8 * and 0 <= s <= 1/8 . * * 4. For x in [5/4, 107], * erfc(x) = (1/x)*exp(-x*x-0.5625 + R(z)) * z=1/x^2 * The interval is partitioned into several segments * of width 1/8 in 1/x. * * Note1: * To compute exp(-x*x-0.5625+R/S), let s be a single * precision number and s := x; then * -x*x = -s*s + (s-x)*(s+x) * exp(-x*x-0.5626+R/S) = * exp(-s*s-0.5625)*exp((s-x)*(s+x)+R/S); * Note2: * Here 4 and 5 make use of the asymptotic series * exp(-x*x) * erfc(x) ~ ---------- * ( 1 + Poly(1/x^2) ) * x*sqrt(pi) * * 5. For inf > x >= 107 * erf(x) = sign(x) *(1 - tiny) (raise inexact) * erfc(x) = tiny*tiny (raise underflow) if x > 0 * = 2 - tiny if x<0 * * 7. Special case: * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1, * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2, * erfc/erf(NaN) is NaN */ #include /* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ static _Decimal128 neval (_Decimal128 x, const _Decimal128 *p, int n) { _Decimal128 y; p += n; y = *p--; do { y = y * x + *p--; } while (--n > 0); return y; } /* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ static _Decimal128 deval (_Decimal128 x, const _Decimal128 *p, int n) { _Decimal128 y; p += n; y = x + *p--; do { y = y * x + *p--; } while (--n > 0); return y; } static const _Decimal128 tiny = 1e-4931DL, one = 1.0DL, two = 2.0DL, /* 2/sqrt(pi) - 1 */ efx = 1.2837916709551257389615890312154517168810E-1DL, /* 8 * (2/sqrt(pi) - 1) */ efx8 = 1.0270333367641005911692712249723613735048E0DL; /* erf(x) = x + x R(x^2) 0 <= x <= 7/8 Peak relative error 1.8e-35 */ #define NTN1 8 static const _Decimal128 TN1[NTN1 + 1] = { -3.858252324254637124543172907442106422373E10DL, 9.580319248590464682316366876952214879858E10DL, 1.302170519734879977595901236693040544854E10DL, 2.922956950426397417800321486727032845006E9DL, 1.764317520783319397868923218385468729799E8DL, 1.573436014601118630105796794840834145120E7DL, 4.028077380105721388745632295157816229289E5DL, 1.644056806467289066852135096352853491530E4DL, 3.390868480059991640235675479463287886081E1DL }; #define NTD1 8 static const _Decimal128 TD1[NTD1 + 1] = { -3.005357030696532927149885530689529032152E11DL, -1.342602283126282827411658673839982164042E11DL, -2.777153893355340961288511024443668743399E10DL, -3.483826391033531996955620074072768276974E9DL, -2.906321047071299585682722511260895227921E8DL, -1.653347985722154162439387878512427542691E7DL, -6.245520581562848778466500301865173123136E5DL, -1.402124304177498828590239373389110545142E4DL, -1.209368072473510674493129989468348633579E2DL /* 1.0E0 */ }; /* erf(z+1) = erf_const + P(z)/Q(z) -.125 <= z <= 0 Peak relative error 7.3e-36 */ static const _Decimal128 erf_const = 0.845062911510467529296875DL; #define NTN2 8 static const _Decimal128 TN2[NTN2 + 1] = { -4.088889697077485301010486931817357000235E1DL, 7.157046430681808553842307502826960051036E3DL, -2.191561912574409865550015485451373731780E3DL, 2.180174916555316874988981177654057337219E3DL, 2.848578658049670668231333682379720943455E2DL, 1.630362490952512836762810462174798925274E2DL, 6.317712353961866974143739396865293596895E0DL, 2.450441034183492434655586496522857578066E1DL, 5.127662277706787664956025545897050896203E-1DL }; #define NTD2 8 static const _Decimal128 TD2[NTD2 + 1] = { 1.731026445926834008273768924015161048885E4DL, 1.209682239007990370796112604286048173750E4DL, 1.160950290217993641320602282462976163857E4DL, 5.394294645127126577825507169061355698157E3DL, 2.791239340533632669442158497532521776093E3DL, 8.989365571337319032943005387378993827684E2DL, 2.974016493766349409725385710897298069677E2DL, 6.148192754590376378740261072533527271947E1DL, 1.178502892490738445655468927408440847480E1DL /* 1.0E0 */ }; /* erfc(x + 0.25) = erfc(0.25) + x R(x) 0 <= x < 0.125 Peak relative error 1.4e-35 */ #define NRNr13 8 static const _Decimal128 RNr13[NRNr13 + 1] = { -2.353707097641280550282633036456457014829E3DL, 3.871159656228743599994116143079870279866E2DL, -3.888105134258266192210485617504098426679E2DL, -2.129998539120061668038806696199343094971E1DL, -8.125462263594034672468446317145384108734E1DL, 8.151549093983505810118308635926270319660E0DL, -5.033362032729207310462422357772568553670E0DL, -4.253956621135136090295893547735851168471E-2DL, -8.098602878463854789780108161581050357814E-2DL }; #define NRDr13 7 static const _Decimal128 RDr13[NRDr13 + 1] = { 2.220448796306693503549505450626652881752E3DL, 1.899133258779578688791041599040951431383E2DL, 1.061906712284961110196427571557149268454E3DL, 7.497086072306967965180978101974566760042E1DL, 2.146796115662672795876463568170441327274E2DL, 1.120156008362573736664338015952284925592E1DL, 2.211014952075052616409845051695042741074E1DL, 6.469655675326150785692908453094054988938E-1DL /* 1.0E0 */ }; /* erfc(0.25) = C13a + C13b to extra precision. */ static const _Decimal128 C13a = 0.723663330078125DL; static const _Decimal128 C13b = 1.0279753638067014931732235184287934646022E-5DL; /* erfc(x + 0.375) = erfc(0.375) + x R(x) 0 <= x < 0.125 Peak relative error 1.2e-35 */ #define NRNr14 8 static const _Decimal128 RNr14[NRNr14 + 1] = { -2.446164016404426277577283038988918202456E3DL, 6.718753324496563913392217011618096698140E2DL, -4.581631138049836157425391886957389240794E2DL, -2.382844088987092233033215402335026078208E1DL, -7.119237852400600507927038680970936336458E1DL, 1.313609646108420136332418282286454287146E1DL, -6.188608702082264389155862490056401365834E0DL, -2.787116601106678287277373011101132659279E-2DL, -2.230395570574153963203348263549700967918E-2DL }; #define NRDr14 7 static const _Decimal128 RDr14[NRDr14 + 1] = { 2.495187439241869732696223349840963702875E3DL, 2.503549449872925580011284635695738412162E2DL, 1.159033560988895481698051531263861842461E3DL, 9.493751466542304491261487998684383688622E1DL, 2.276214929562354328261422263078480321204E2DL, 1.367697521219069280358984081407807931847E1DL, 2.276988395995528495055594829206582732682E1DL, 7.647745753648996559837591812375456641163E-1DL /* 1.0E0 */ }; /* erfc(0.375) = C14a + C14b to extra precision. */ static const _Decimal128 C14a = 0.5958709716796875DL; static const _Decimal128 C14b = 1.2118885490201676174914080878232469565953E-5DL; /* erfc(x + 0.5) = erfc(0.5) + x R(x) 0 <= x < 0.125 Peak relative error 4.7e-36 */ #define NRNr15 8 static const _Decimal128 RNr15[NRNr15 + 1] = { -2.624212418011181487924855581955853461925E3DL, 8.473828904647825181073831556439301342756E2DL, -5.286207458628380765099405359607331669027E2DL, -3.895781234155315729088407259045269652318E1DL, -6.200857908065163618041240848728398496256E1DL, 1.469324610346924001393137895116129204737E1DL, -6.961356525370658572800674953305625578903E0DL, 5.145724386641163809595512876629030548495E-3DL, 1.990253655948179713415957791776180406812E-2DL }; #define NRDr15 7 static const _Decimal128 RDr15[NRDr15 + 1] = { 2.986190760847974943034021764693341524962E3DL, 5.288262758961073066335410218650047725985E2DL, 1.363649178071006978355113026427856008978E3DL, 1.921707975649915894241864988942255320833E2DL, 2.588651100651029023069013885900085533226E2DL, 2.628752920321455606558942309396855629459E1DL, 2.455649035885114308978333741080991380610E1DL, 1.378826653595128464383127836412100939126E0DL /* 1.0E0 */ }; /* erfc(0.5) = C15a + C15b to extra precision. */ static const _Decimal128 C15a = 0.4794921875DL; static const _Decimal128 C15b = 7.9346869534623172533461080354712635484242E-6DL; /* erfc(x + 0.625) = erfc(0.625) + x R(x) 0 <= x < 0.125 Peak relative error 5.1e-36 */ #define NRNr16 8 static const _Decimal128 RNr16[NRNr16 + 1] = { -2.347887943200680563784690094002722906820E3DL, 8.008590660692105004780722726421020136482E2DL, -5.257363310384119728760181252132311447963E2DL, -4.471737717857801230450290232600243795637E1DL, -4.849540386452573306708795324759300320304E1DL, 1.140885264677134679275986782978655952843E1DL, -6.731591085460269447926746876983786152300E0DL, 1.370831653033047440345050025876085121231E-1DL, 2.022958279982138755020825717073966576670E-2DL, }; #define NRDr16 7 static const _Decimal128 RDr16[NRDr16 + 1] = { 3.075166170024837215399323264868308087281E3DL, 8.730468942160798031608053127270430036627E2DL, 1.458472799166340479742581949088453244767E3DL, 3.230423687568019709453130785873540386217E2DL, 2.804009872719893612081109617983169474655E2DL, 4.465334221323222943418085830026979293091E1DL, 2.612723259683205928103787842214809134746E1DL, 2.341526751185244109722204018543276124997E0DL, /* 1.0E0 */ }; /* erfc(0.625) = C16a + C16b to extra precision. */ static const _Decimal128 C16a = 0.3767547607421875DL; static const _Decimal128 C16b = 4.3570693945275513594941232097252997287766E-6DL; /* erfc(x + 0.75) = erfc(0.75) + x R(x) 0 <= x < 0.125 Peak relative error 1.7e-35 */ #define NRNr17 8 static const _Decimal128 RNr17[NRNr17 + 1] = { -1.767068734220277728233364375724380366826E3DL, 6.693746645665242832426891888805363898707E2DL, -4.746224241837275958126060307406616817753E2DL, -2.274160637728782675145666064841883803196E1DL, -3.541232266140939050094370552538987982637E1DL, 6.988950514747052676394491563585179503865E0DL, -5.807687216836540830881352383529281215100E0DL, 3.631915988567346438830283503729569443642E-1DL, -1.488945487149634820537348176770282391202E-2DL }; #define NRDr17 7 static const _Decimal128 RDr17[NRDr17 + 1] = { 2.748457523498150741964464942246913394647E3DL, 1.020213390713477686776037331757871252652E3DL, 1.388857635935432621972601695296561952738E3DL, 3.903363681143817750895999579637315491087E2DL, 2.784568344378139499217928969529219886578E2DL, 5.555800830216764702779238020065345401144E1DL, 2.646215470959050279430447295801291168941E1DL, 2.984905282103517497081766758550112011265E0DL, /* 1.0E0 */ }; /* erfc(0.75) = C17a + C17b to extra precision. */ static const _Decimal128 C17a = 0.2888336181640625DL; static const _Decimal128 C17b = 1.0748182422368401062165408589222625794046E-5DL; /* erfc(x + 0.875) = erfc(0.875) + x R(x) 0 <= x < 0.125 Peak relative error 2.2e-35 */ #define NRNr18 8 static const _Decimal128 RNr18[NRNr18 + 1] = { -1.342044899087593397419622771847219619588E3DL, 6.127221294229172997509252330961641850598E2DL, -4.519821356522291185621206350470820610727E2DL, 1.223275177825128732497510264197915160235E1DL, -2.730789571382971355625020710543532867692E1DL, 4.045181204921538886880171727755445395862E0DL, -4.925146477876592723401384464691452700539E0DL, 5.933878036611279244654299924101068088582E-1DL, -5.557645435858916025452563379795159124753E-2DL }; #define NRDr18 7 static const _Decimal128 RDr18[NRDr18 + 1] = { 2.557518000661700588758505116291983092951E3DL, 1.070171433382888994954602511991940418588E3DL, 1.344842834423493081054489613250688918709E3DL, 4.161144478449381901208660598266288188426E2DL, 2.763670252219855198052378138756906980422E2DL, 5.998153487868943708236273854747564557632E1DL, 2.657695108438628847733050476209037025318E1DL, 3.252140524394421868923289114410336976512E0DL, /* 1.0E0 */ }; /* erfc(0.875) = C18a + C18b to extra precision. */ static const _Decimal128 C18a = 0.215911865234375DL; static const _Decimal128 C18b = 1.3073705765341685464282101150637224028267E-5DL; /* erfc(x + 1.0) = erfc(1.0) + x R(x) 0 <= x < 0.125 Peak relative error 1.6e-35 */ #define NRNr19 8 static const _Decimal128 RNr19[NRNr19 + 1] = { -1.139180936454157193495882956565663294826E3DL, 6.134903129086899737514712477207945973616E2DL, -4.628909024715329562325555164720732868263E2DL, 4.165702387210732352564932347500364010833E1DL, -2.286979913515229747204101330405771801610E1DL, 1.870695256449872743066783202326943667722E0DL, -4.177486601273105752879868187237000032364E0DL, 7.533980372789646140112424811291782526263E-1DL, -8.629945436917752003058064731308767664446E-2DL }; #define NRDr19 7 static const _Decimal128 RDr19[NRDr19 + 1] = { 2.744303447981132701432716278363418643778E3DL, 1.266396359526187065222528050591302171471E3DL, 1.466739461422073351497972255511919814273E3DL, 4.868710570759693955597496520298058147162E2DL, 2.993694301559756046478189634131722579643E2DL, 6.868976819510254139741559102693828237440E1DL, 2.801505816247677193480190483913753613630E1DL, 3.604439909194350263552750347742663954481E0DL, /* 1.0E0 */ }; /* erfc(1.0) = C19a + C19b to extra precision. */ static const _Decimal128 C19a = 0.15728759765625DL; static const _Decimal128 C19b = 1.1609394035130658779364917390740703933002E-5DL; /* erfc(x + 1.125) = erfc(1.125) + x R(x) 0 <= x < 0.125 Peak relative error 3.6e-36 */ #define NRNr20 8 static const _Decimal128 RNr20[NRNr20 + 1] = { -9.652706916457973956366721379612508047640E2DL, 5.577066396050932776683469951773643880634E2DL, -4.406335508848496713572223098693575485978E2DL, 5.202893466490242733570232680736966655434E1DL, -1.931311847665757913322495948705563937159E1DL, -9.364318268748287664267341457164918090611E-2DL, -3.306390351286352764891355375882586201069E0DL, 7.573806045289044647727613003096916516475E-1DL, -9.611744011489092894027478899545635991213E-2DL }; #define NRDr20 7 static const _Decimal128 RDr20[NRDr20 + 1] = { 3.032829629520142564106649167182428189014E3DL, 1.659648470721967719961167083684972196891E3DL, 1.703545128657284619402511356932569292535E3DL, 6.393465677731598872500200253155257708763E2DL, 3.489131397281030947405287112726059221934E2DL, 8.848641738570783406484348434387611713070E1DL, 3.132269062552392974833215844236160958502E1DL, 4.430131663290563523933419966185230513168E0DL /* 1.0E0 */ }; /* erfc(1.125) = C20a + C20b to extra precision. */ static const _Decimal128 C20a = 0.111602783203125DL; static const _Decimal128 C20b = 8.9850951672359304215530728365232161564636E-6DL; /* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) 7/8 <= 1/x < 1 Peak relative error 1.4e-35 */ #define NRNr8 9 static const _Decimal128 RNr8[NRNr8 + 1] = { 3.587451489255356250759834295199296936784E1DL, 5.406249749087340431871378009874875889602E2DL, 2.931301290625250886238822286506381194157E3DL, 7.359254185241795584113047248898753470923E3DL, 9.201031849810636104112101947312492532314E3DL, 5.749697096193191467751650366613289284777E3DL, 1.710415234419860825710780802678697889231E3DL, 2.150753982543378580859546706243022719599E2DL, 8.740953582272147335100537849981160931197E0DL, 4.876422978828717219629814794707963640913E-2DL }; #define NRDr8 8 static const _Decimal128 RDr8[NRDr8 + 1] = { 6.358593134096908350929496535931630140282E1DL, 9.900253816552450073757174323424051765523E2DL, 5.642928777856801020545245437089490805186E3DL, 1.524195375199570868195152698617273739609E4DL, 2.113829644500006749947332935305800887345E4DL, 1.526438562626465706267943737310282977138E4DL, 5.561370922149241457131421914140039411782E3DL, 9.394035530179705051609070428036834496942E2DL, 6.147019596150394577984175188032707343615E1DL /* 1.0E0 */ }; /* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) 0.75 <= 1/x <= 0.875 Peak relative error 2.0e-36 */ #define NRNr7 9 static const _Decimal128 RNr7[NRNr7 + 1] = { 1.686222193385987690785945787708644476545E1DL, 1.178224543567604215602418571310612066594E3DL, 1.764550584290149466653899886088166091093E4DL, 1.073758321890334822002849369898232811561E5DL, 3.132840749205943137619839114451290324371E5DL, 4.607864939974100224615527007793867585915E5DL, 3.389781820105852303125270837910972384510E5DL, 1.174042187110565202875011358512564753399E5DL, 1.660013606011167144046604892622504338313E4DL, 6.700393957480661937695573729183733234400E2DL }; #define NRDr7 9 static const _Decimal128 RDr7[NRDr7 + 1] = { -1.709305024718358874701575813642933561169E3DL, -3.280033887481333199580464617020514788369E4DL, -2.345284228022521885093072363418750835214E5DL, -8.086758123097763971926711729242327554917E5DL, -1.456900414510108718402423999575992450138E6DL, -1.391654264881255068392389037292702041855E6DL, -6.842360801869939983674527468509852583855E5DL, -1.597430214446573566179675395199807533371E5DL, -1.488876130609876681421645314851760773480E4DL, -3.511762950935060301403599443436465645703E2DL /* 1.0E0 */ }; /* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) 5/8 <= 1/x < 3/4 Peak relative error 1.9e-35 */ #define NRNr6 9 static const _Decimal128 RNr6[NRNr6 + 1] = { 1.642076876176834390623842732352935761108E0DL, 1.207150003611117689000664385596211076662E2DL, 2.119260779316389904742873816462800103939E3DL, 1.562942227734663441801452930916044224174E4DL, 5.656779189549710079988084081145693580479E4DL, 1.052166241021481691922831746350942786299E5DL, 9.949798524786000595621602790068349165758E4DL, 4.491790734080265043407035220188849562856E4DL, 8.377074098301530326270432059434791287601E3DL, 4.506934806567986810091824791963991057083E2DL }; #define NRDr6 9 static const _Decimal128 RDr6[NRDr6 + 1] = { -1.664557643928263091879301304019826629067E2DL, -3.800035902507656624590531122291160668452E3DL, -3.277028191591734928360050685359277076056E4DL, -1.381359471502885446400589109566587443987E5DL, -3.082204287382581873532528989283748656546E5DL, -3.691071488256738343008271448234631037095E5DL, -2.300482443038349815750714219117566715043E5DL, -6.873955300927636236692803579555752171530E4DL, -8.262158817978334142081581542749986845399E3DL, -2.517122254384430859629423488157361983661E2DL /* 1.00 */ }; /* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) 1/2 <= 1/x < 5/8 Peak relative error 4.6e-36 */ #define NRNr5 10 static const _Decimal128 RNr5[NRNr5 + 1] = { -3.332258927455285458355550878136506961608E-3DL, -2.697100758900280402659586595884478660721E-1DL, -6.083328551139621521416618424949137195536E0DL, -6.119863528983308012970821226810162441263E1DL, -3.176535282475593173248810678636522589861E2DL, -8.933395175080560925809992467187963260693E2DL, -1.360019508488475978060917477620199499560E3DL, -1.075075579828188621541398761300910213280E3DL, -4.017346561586014822824459436695197089916E2DL, -5.857581368145266249509589726077645791341E1DL, -2.077715925587834606379119585995758954399E0DL }; #define NRDr5 9 static const _Decimal128 RDr5[NRDr5 + 1] = { 3.377879570417399341550710467744693125385E-1DL, 1.021963322742390735430008860602594456187E1DL, 1.200847646592942095192766255154827011939E2DL, 7.118915528142927104078182863387116942836E2DL, 2.318159380062066469386544552429625026238E3DL, 4.238729853534009221025582008928765281620E3DL, 4.279114907284825886266493994833515580782E3DL, 2.257277186663261531053293222591851737504E3DL, 5.570475501285054293371908382916063822957E2DL, 5.142189243856288981145786492585432443560E1DL /* 1.0E0 */ }; /* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) 3/8 <= 1/x < 1/2 Peak relative error 2.0e-36 */ #define NRNr4 10 static const _Decimal128 RNr4[NRNr4 + 1] = { 3.258530712024527835089319075288494524465E-3DL, 2.987056016877277929720231688689431056567E-1DL, 8.738729089340199750734409156830371528862E0DL, 1.207211160148647782396337792426311125923E2DL, 8.997558632489032902250523945248208224445E2DL, 3.798025197699757225978410230530640879762E3DL, 9.113203668683080975637043118209210146846E3DL, 1.203285891339933238608683715194034900149E4DL, 8.100647057919140328536743641735339740855E3DL, 2.383888249907144945837976899822927411769E3DL, 2.127493573166454249221983582495245662319E2DL }; #define NRDr4 10 static const _Decimal128 RDr4[NRDr4 + 1] = { -3.303141981514540274165450687270180479586E-1DL, -1.353768629363605300707949368917687066724E1DL, -2.206127630303621521950193783894598987033E2DL, -1.861800338758066696514480386180875607204E3DL, -8.889048775872605708249140016201753255599E3DL, -2.465888106627948210478692168261494857089E4DL, -3.934642211710774494879042116768390014289E4DL, -3.455077258242252974937480623730228841003E4DL, -1.524083977439690284820586063729912653196E4DL, -2.810541887397984804237552337349093953857E3DL, -1.343929553541159933824901621702567066156E2DL /* 1.0E0 */ }; /* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) 1/4 <= 1/x < 3/8 Peak relative error 8.4e-37 */ #define NRNr3 11 static const _Decimal128 RNr3[NRNr3 + 1] = { -1.952401126551202208698629992497306292987E-6DL, -2.130881743066372952515162564941682716125E-4DL, -8.376493958090190943737529486107282224387E-3DL, -1.650592646560987700661598877522831234791E-1DL, -1.839290818933317338111364667708678163199E0DL, -1.216278715570882422410442318517814388470E1DL, -4.818759344462360427612133632533779091386E1DL, -1.120994661297476876804405329172164436784E2DL, -1.452850765662319264191141091859300126931E2DL, -9.485207851128957108648038238656777241333E1DL, -2.563663855025796641216191848818620020073E1DL, -1.787995944187565676837847610706317833247E0DL }; #define NRDr3 10 static const _Decimal128 RDr3[NRDr3 + 1] = { 1.979130686770349481460559711878399476903E-4DL, 1.156941716128488266238105813374635099057E-2DL, 2.752657634309886336431266395637285974292E-1DL, 3.482245457248318787349778336603569327521E0DL, 2.569347069372696358578399521203959253162E1DL, 1.142279000180457419740314694631879921561E2DL, 3.056503977190564294341422623108332700840E2DL, 4.780844020923794821656358157128719184422E2DL, 4.105972727212554277496256802312730410518E2DL, 1.724072188063746970865027817017067646246E2DL, 2.815939183464818198705278118326590370435E1DL /* 1.0E0 */ }; /* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) 1/8 <= 1/x < 1/4 Peak relative error 1.5e-36 */ #define NRNr2 11 static const _Decimal128 RNr2[NRNr2 + 1] = { -2.638914383420287212401687401284326363787E-8DL, -3.479198370260633977258201271399116766619E-6DL, -1.783985295335697686382487087502222519983E-4DL, -4.777876933122576014266349277217559356276E-3DL, -7.450634738987325004070761301045014986520E-2DL, -7.068318854874733315971973707247467326619E-1DL, -4.113919921935944795764071670806867038732E0DL, -1.440447573226906222417767283691888875082E1DL, -2.883484031530718428417168042141288943905E1DL, -2.990886974328476387277797361464279931446E1DL, -1.325283914915104866248279787536128997331E1DL, -1.572436106228070195510230310658206154374E0DL }; #define NRDr2 10 static const _Decimal128 RDr2[NRDr2 + 1] = { 2.675042728136731923554119302571867799673E-6DL, 2.170997868451812708585443282998329996268E-4DL, 7.249969752687540289422684951196241427445E-3DL, 1.302040375859768674620410563307838448508E-1DL, 1.380202483082910888897654537144485285549E0DL, 8.926594113174165352623847870299170069350E0DL, 3.521089584782616472372909095331572607185E1DL, 8.233547427533181375185259050330809105570E1DL, 1.072971579885803033079469639073292840135E2DL, 6.943803113337964469736022094105143158033E1DL, 1.775695341031607738233608307835017282662E1DL /* 1.0E0 */ }; /* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) 1/128 <= 1/x < 1/8 Peak relative error 2.2e-36 */ #define NRNr1 9 static const _Decimal128 RNr1[NRNr1 + 1] = { -4.250780883202361946697751475473042685782E-8DL, -5.375777053288612282487696975623206383019E-6DL, -2.573645949220896816208565944117382460452E-4DL, -6.199032928113542080263152610799113086319E-3DL, -8.262721198693404060380104048479916247786E-2DL, -6.242615227257324746371284637695778043982E-1DL, -2.609874739199595400225113299437099626386E0DL, -5.581967563336676737146358534602770006970E0DL, -5.124398923356022609707490956634280573882E0DL, -1.290865243944292370661544030414667556649E0DL }; #define NRDr1 8 static const _Decimal128 RDr1[NRDr1 + 1] = { 4.308976661749509034845251315983612976224E-6DL, 3.265390126432780184125233455960049294580E-4DL, 9.811328839187040701901866531796570418691E-3DL, 1.511222515036021033410078631914783519649E-1DL, 1.289264341917429958858379585970225092274E0DL, 6.147640356182230769548007536914983522270E0DL, 1.573966871337739784518246317003956180750E1DL, 1.955534123435095067199574045529218238263E1DL, 9.472613121363135472247929109615785855865E0DL /* 1.0E0 */ }; DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { _Decimal128 a, y, z; int32_t sign; sign = (x < 0.0DL); a = FUNC_D(__fabs) (x); if (a >= 0x7fff0000) /* erf(nan)=nan */ return (DEC_TYPE) ((1 - (sign<<1)) + one / x); /* erf(+-inf)=+-1 */ if (a >= 1.0DL) /* |x| >= 1.0 */ { y = FUNC_D(__erfc) (x); return (one - y); /* return (one - __erfcl (x)); */ } z = x * x; if (a < 0.875DL) /* a < 0.875 */ { if (a < 2.0E-57DL) /* |x|<2**-57 */ { if (a < 0x00080000) //TODO:What is this number? return (DEC_TYPE)(0.125DL * (8.0DL * x + efx8 * x)); /*avoid underflow */ return (DEC_TYPE)(x + efx * x); } y = a + a * neval (z, TN1, NTN1) / deval (z, TD1, NTD1); } else { a = a - one; y = erf_const + neval (a, TN2, NTN2) / deval (a, TD2, NTD2); } if (sign) /* x < 0 */ y = -y; return( (DEC_TYPE)y ); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) /* This is a bit sloppy, but it works */ #undef FUNCTION_NAME #define FUNCTION_NAME erfc #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { _Decimal128 y=0.0DL, z, p, r, ix; int32_t i, sign; sign = (x < 0.0DL); ix = FUNC_D(__fabs) (x); if (ix >= 0x7fff0000) { /* erfc(nan)=nan */ /* erfc(+-inf)=0,2 */ return (DEC_TYPE) ((sign << 1) + one / x); } if (ix < 0.25DL) /* |x| <1/4 */ { if (ix < 2.0E-114DL) /* |x|<2**-114 */ return (DEC_TYPE)(one - x); return (DEC_TYPE)(one - FUNC_D(__erf) (x)); } x = ix; if (ix < 1.25DL) /* 1.25 */ { i = 8.0DF * x; switch (i) { case 2: z = x - 0.25DL; y = C13b + z * neval (z, RNr13, NRNr13) / deval (z, RDr13, NRDr13); y += C13a; break; case 3: z = x - 0.375DL; y = C14b + z * neval (z, RNr14, NRNr14) / deval (z, RDr14, NRDr14); y += C14a; break; case 4: z = x - 0.5DL; y = C15b + z * neval (z, RNr15, NRNr15) / deval (z, RDr15, NRDr15); y += C15a; break; case 5: z = x - 0.625DL; y = C16b + z * neval (z, RNr16, NRNr16) / deval (z, RDr16, NRDr16); y += C16a; break; case 6: z = x - 0.75DL; y = C17b + z * neval (z, RNr17, NRNr17) / deval (z, RDr17, NRDr17); y += C17a; break; case 7: z = x - 0.875DL; y = C18b + z * neval (z, RNr18, NRNr18) / deval (z, RDr18, NRDr18); y += C18a; break; case 8: z = x - 1.0DL; y = C19b + z * neval (z, RNr19, NRNr19) / deval (z, RDr19, NRDr19); y += C19a; break; case 9: z = x - 1.125DL; y = C20b + z * neval (z, RNr20, NRNr20) / deval (z, RDr20, NRDr20); y += C20a; break; } if (sign) y = 2.0DF - y; return y; } /* 1.25 < |x| < 107 */ if (ix < 107.0DF) { /* x < -9 */ if (x > 9.0DF && sign) return two - tiny; z = one / (x * x); i = 8.0DF / x; switch (i) { default: case 0: p = neval (z, RNr1, NRNr1) / deval (z, RDr1, NRDr1); break; case 1: p = neval (z, RNr2, NRNr2) / deval (z, RDr2, NRDr2); break; case 2: p = neval (z, RNr3, NRNr3) / deval (z, RDr3, NRDr3); break; case 3: p = neval (z, RNr4, NRNr4) / deval (z, RDr4, NRDr4); break; case 4: p = neval (z, RNr5, NRNr5) / deval (z, RDr5, NRDr5); break; case 5: p = neval (z, RNr6, NRNr6) / deval (z, RDr6, NRDr6); break; case 6: p = neval (z, RNr7, NRNr7) / deval (z, RDr7, NRDr7); break; case 7: p = neval (z, RNr8, NRNr8) / deval (z, RDr8, NRDr8); break; } /* Trim the value? u.value = x; u.parts32.w3 = 0; u.parts32.w2 &= 0xfe000000; z = u.value; */ z = ix; r = __expd128 (-z * z - 0.5625DF) * __expd128 ((z - x) * (z + x) + p); if (!sign) return (DEC_TYPE)(r / x); else return (DEC_TYPE)(two - r / x); } else { if (!sign) return (DEC_TYPE)(tiny * tiny); else return (DEC_TYPE)(two - tiny); } } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/erfd64.c000066400000000000000000000021161504475242000156320ustar00rootroot00000000000000/* Returns the error function of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "erfd32.c" libdfp-1.0.17/ieee754r/exp2d128.c000066400000000000000000000021411504475242000160130ustar00rootroot00000000000000/* Returns the value of 2 raised to the power of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "exp2d32.c" libdfp-1.0.17/ieee754r/exp2d32.c000066400000000000000000000043621504475242000157340ustar00rootroot00000000000000/* Returns the value of 2 raised to the power of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #include #define FUNCTION_NAME exp2 #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_two; DEC_TYPE two = DFP_CONSTANT(2.0); FUNC_CONVERT_TO_DN (&two, &dn_two); FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x) ) return decNumberIsNegative (&dn_x) ? DFP_CONSTANT(0.0) : x; decContextDefault (&context, DEFAULT_CONTEXT); /* decNumberPow (&dn_result, &dn_two, &dn_x, &context); */ decNumberPower (&dn_result, &dn_two, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if(context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/exp2d64.c000066400000000000000000000021371504475242000157370ustar00rootroot00000000000000/* Returns the value of 2 raised to the power of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "exp2d32.c" libdfp-1.0.17/ieee754r/expd128.c000066400000000000000000000104171504475242000157360ustar00rootroot00000000000000/* Returns the value of e raised to the power of x Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. This is adapted, derived, and in some spiritual form based on the version found in glibc's float128/ibm128 variant e_expl.c. Largely based on quad-precision code Contributed by Jakub Jelinek Partly based on double-precision code by Geoffrey Keating The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #include "dfp_inline.h" /* Generated lookup tables */ #include "t_expd128.h" static const _Decimal128 __1_LN_10 = 4.342944819032518276511289189166051e-1DL; static const _Decimal128 LN10_0 = 2.30258509299404568401799145468DL; static const _Decimal128 LN10_1 = 0.000000000000000000000000000004364207601101488628772976033327900DL; /* Round a fractional value to an integer when quantizing. Note we must choose a value with a uniquely representable value. */ const _Decimal128 QRNDTOI = 2.0e33DL - 0.01DL; const _Decimal128 QRNDTOID2 = 2.0e31DL - 0.0001DL; const _Decimal128 QRNDTOID4 = 2.0e29DL - 0.000001DL; /* Chebyshev polynomial coefficients for (exp(x)-1)/x. These are the glibc constants as of today. They are slightly more accurate than can fit in d128. */ static const _Decimal128 P1 = 0.5L; static const _Decimal128 P2 = 1.66666666666666666666666666666666683E-01DL; static const _Decimal128 P3 = 4.16666666666666666666654902320001674E-02DL; static const _Decimal128 P4 = 8.33333333333333333333314659767198461E-03DL; static const _Decimal128 P5 = 1.38888888889899438565058018857254025E-03DL; static const _Decimal128 P6 = 1.98412698413981650382436541785404286E-04DL; _Decimal128 __expd128 (_Decimal128 val) { _Decimal128 n, t, ex, x, xl, cp; int tval1, tval2; /* Computed by interval using mpfr in 512b precision */ const _Decimal128 max = 14149.38539644841072829055748903541DL; const _Decimal128 min = -14144.78022626242263692252150612604DL; if (!(val >= min && val <= max)) { /* should values below generate under/overflow? */ if (__builtin_isnan (val)) return val + val; else if (val > max) return DEC_INFINITY; else return 0.0DL; } SET_RESTORE_DROUND (FE_DEC_TONEAREST); /* First, reduce range via fitting an integer such that 10^(n*ln(10)). This value will be 6145 >= n >= 6143. Ideally a little smaller, but rounding mode increases this. Round the value against the smallest integral val. */ n = __quantized128 (val * __1_LN_10, QRNDTOI); /* xl is the remainder of val - n * ln(10). */ x = val - n * LN10_0; xl = n * -LN10_1; /* 10^n * e^(x), where x < |ln(10)|. */ /* Fit to a value x.yz value. */ t = __quantized128 (x, QRNDTOID2); tval1 = (int) (t * 1e2DL); /* |t| <= 115 when rounding to nearest (rtn). */ x -= exptbl1[tval1 + EXPTBL1OFF].hi; xl -= exptbl1[tval1 + EXPTBL1OFF].lo; ex = exptbl1[tval1 + EXPTBL1OFF].out; /* Now determine a suitable tval2. |t| <= .0101 with rtn */ t = __quantized128 (x, QRNDTOID4); tval2 = (int) (t * 1e4DL); x -= exptbl2[tval2 + EXPTBL2OFF].hi; xl -= exptbl2[tval2 + EXPTBL2OFF].lo; ex *= exptbl2[tval2 + EXPTBL2OFF].out; /* Now compute a polynomial approximation with sufficient accuracy */ x = x + xl; cp = x + x * x * (P1 + x * (P2 + x * (P3 + x * (P4 + x * (P5 + x * P6))))); ex = ex + ex * cp; /* Fit correct exponent and return */ ex = __ldexpd128 (ex, n); return ex; } weak_alias (__expd128, expd128) libdfp-1.0.17/ieee754r/expd32.c000066400000000000000000000044241504475242000156510ustar00rootroot00000000000000/* Calculate e^x, where x is the given _Decimal32 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #include #include #include #define FUNCTION_NAME exp #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN(&x, &dn_x); decContextDefault(&context, DEFAULT_CONTEXT); if (decNumberIsInfinite(&dn_x)) { if (decNumberIsNegative(&dn_x)) { decNumberZero(&dn_result); /* exp(-inf) = 0 */ } else { dn_result = dn_x; /* exp(inf) = inf */ } } else { decNumberExp(&dn_result, &dn_x, &context); } FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); if (context.status & DEC_Underflow) DFP_EXCEPT (FE_UNDERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/expd64.c000066400000000000000000000130601504475242000156520ustar00rootroot00000000000000/* Decimal Floating Point 64-bit e^x. POWER6 PowerPC64 version. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 64 # include #endif #define FUNCTION_NAME exp #include #include "ddlogtbls.h" /* Core implementation of expd64(x). Separate into integer and fractional parts, where e^(i+f) == (e^i)*(e^f). We use a table lookup (expIntXDL(i)) for e^i and taylor series for e^f. Effectively: e^x = e^i * (1 + (x-i) + (((x-i)^2)/2!) + (((x-i)^3)/3!) + ...) The real expd64 will need add checks for NAN, INF and handle negative values of x. */ static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE val) { DEC_TYPE result, top, fraction, a, x, tp; DEC_TYPE t1, t2, t3, t4, t5, t6, t7, t8; DEC_TYPE t9, t10, t11, t12, t13, t14, t15, t16; DEC_TYPE t17, t18, t19, t20; long exp; long tmp; int neg = 0; if (__isinfd64(val)) { if (val < DFP_CONSTANT(0.0)) return DFP_CONSTANT(0.0); /* exp(-inf) = 0 */ else return val; /* exp(inf) = inf */ } if (val < DFP_CONSTANT(0.0)) { neg = 1; val = FUNC_D(__fabs) (val); } tmp = val; top = tmp; fraction = val - top; exp = tmp; /* via 1024 bits of mpfr and rtn: log(9.999999999999999e+384). */ if (val >= 886.49526080270759DD) return neg ? DFP_CONSTANT(0.0) : DFP_INF; if (fraction != 0.0DD) { a = top; x = val; t1 = (x - a); tp = t1 * t1; /* tp == ((x-a))^2 */ t2 = tp * __oneOverfactDD[2]; /* t2 == (((x-a))^2)/2! */ tp = tp * t1; /* tp == ((x-a))^3 */ t3 = tp * __oneOverfactDD[3]; /* t3 == (((x-a))^3)/3! */ tp = tp * t1; /* tp == ((x-a)/a)^4 */ t4 = tp * __oneOverfactDD[4]; /* t4 == (((x-a))^4)/4! */ tp = tp * t1; /* tp == ((x-a))^5 */ t5 = tp * __oneOverfactDD[5]; /* t5 == (((x-a))^5)/5! */ tp = tp * t1; /* tp == ((x-a))^6 */ t6 = tp * __oneOverfactDD[6]; /* t6 == (((x-a))^6)/6! */ tp = tp * t1; /* tp == ((x-a))^7 */ t7 = tp * __oneOverfactDD[7]; /* t7 == (((x-a))^7)/7! */ tp = tp * t1; /* tp == ((x-a))^8 */ t8 = tp * __oneOverfactDD[8]; /* t8 == (((x-a))^8)/8! */ if ( t8 > 1.0E-16DD) { tp = tp * t1; /* tp == ((x-a))^9 */ t9 = tp * __oneOverfactDD[9]; /* t9 == (((x-a))^9)/9! */ tp = tp * t1; /* tp == ((x-a))^10 */ t10 = tp * __oneOverfactDD[10]; /* t10 == (((x-a))^10)/10! */ tp = tp * t1; /* tp == ((x-a))^11 */ t11 = tp * __oneOverfactDD[11]; /* t12 == (((x-a))^11)/11! */ tp = tp * t1; /* tp == ((x-a))^12 */ t12 = tp * __oneOverfactDD[12]; /* t12 == (((x-a))^11)/12! */ if (t12 > 1.0E-16DD) { tp = tp * t1; /* tp == ((x-a))^13 */ t13 = tp * __oneOverfactDD[13]; /* t13 == (((x-a))^13)/13! */ tp = tp * t1; /* tp == ((x-a))^14 */ t14 = tp * __oneOverfactDD[14]; /* t14 == (((x-a))^14)/14! */ tp = tp * t1; /* tp == ((x-a))^15 */ t15 = tp * __oneOverfactDD[15]; /* t15 == (((x-a))^15)/15! */ tp = tp * t1; /* tp == ((x-a))^16 */ t16 = tp * __oneOverfactDD[16]; /* t16 == (((x-a))^16)/16! */ if (t12 > 1.0E-16DD) { tp = tp * t1; /* tp == ((x-a))^17 */ t17 = tp * __oneOverfactDD[17]; /* t17 == (((x-a))^17)/17! */ tp = tp * t1; /* tp == ((x-a))^18 */ t18 = tp * __oneOverfactDD[18]; /* t18 == (((x-a))^18)/18! */ tp = tp * t1; /* tp == ((x-a))^19 */ t19 = tp * __oneOverfactDD[19]; /* t19 == (((x-a))^19)/19! */ tp = tp * t1; /* tp == ((x-a))^20 */ t20 = tp * __oneOverfactDD[20]; /* t20 == (((x-a))^20)/20! */ tp = t19 + t20; tp = tp + t18; tp = tp + t17; tp = tp + t16; tp = tp + t15; } else { tp = t15 + t16; } tp = tp + t14; tp = tp + t13; tp = tp + t12; tp = tp + t11; } else { tp = t11 + t12; } tp = tp + t10; tp = tp + t9; tp = tp + t8; tp = tp + t7; } else tp = t7 + t8; /* now sum the terms from smallest to largest to avoid lose of percision */ tp = tp + t6; tp = tp + t5; tp = tp + t4; tp = tp + t3; tp = tp + t2; tp = tp + t1; tp = tp + 1.DD; if (exp!=0) result = __expIntXDL[exp] * tp; else result = tp; } else { if (exp!=0) result = __expIntXDL[exp]; else result = 1.DD; } if (neg) result = 1/result; return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias(INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/expm1d128.c000066400000000000000000000021331504475242000161700ustar00rootroot00000000000000/* Returns a value equivelent to exp(x) - 1 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "expm1d32.c" libdfp-1.0.17/ieee754r/expm1d32.c000066400000000000000000000043721504475242000161110ustar00rootroot00000000000000/* Returns a value equivelent to exp(x) - 1 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #include #define FUNCTION_NAME expm1 #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_one; decNumber dn_exponent; DEC_TYPE one = DFP_CONSTANT(1.0); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&one, &dn_one); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x)) return decNumberIsNegative (&dn_x) ? DFP_CONSTANT(-1.0) : x; decContextDefault(&context, DEFAULT_CONTEXT); decNumberExp(&dn_exponent, &dn_x, &context); decNumberSubtract(&dn_result, &dn_exponent, &dn_one, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/expm1d64.c000066400000000000000000000021311504475242000161050ustar00rootroot00000000000000/* Returns a value equivelent to exp(x) - 1 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "expm1d32.c" libdfp-1.0.17/ieee754r/fabsd128.c000066400000000000000000000021451504475242000160540ustar00rootroot00000000000000/* Calculate the absolute value for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fabsd32.c" libdfp-1.0.17/ieee754r/fabsd32.c000066400000000000000000000030461504475242000157670ustar00rootroot00000000000000/* Calculate the absolute value for a _Decimal32 type Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian , Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #define FUNCTION_NAME fabs #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE result = x; unsigned char *p = (unsigned char*) &result; #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ p += sizeof(DEC_TYPE)-1; #endif *p = *p & 0x7Fu; return result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/fabsd64.c000066400000000000000000000021421504475242000157700ustar00rootroot00000000000000/* Calculate the absolute value for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fabsd32.c" libdfp-1.0.17/ieee754r/fdimd128.c000066400000000000000000000021701504475242000160560ustar00rootroot00000000000000/* Returns the positive difference between the _Decimal128 type arguments Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fdimd32.c" libdfp-1.0.17/ieee754r/fdimd32.c000066400000000000000000000044051504475242000157730ustar00rootroot00000000000000/* Returns the positive difference between the _Decimal32 type arguments Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #define FUNCTION_NAME fdim #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_y; FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); if (decNumberIsNaN (&dn_x) || decNumberIsNaN (&dn_y)) return x + y; decContextDefault (&context, DEFAULT_CONTEXT); decNumberCompare (&dn_result, &dn_x, &dn_y, &context); if (decNumberIsNegative(&dn_result) || decNumberIsZero(&dn_result)) return 0; decNumberSubtract (&dn_result, &dn_x, &dn_y, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x) && FUNC_D(__isfinite) (y)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/fdimd64.c000066400000000000000000000021651504475242000160010ustar00rootroot00000000000000/* Returns the positive difference between the _Decimal64 type arguments Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fdimd32.c" libdfp-1.0.17/ieee754r/floord128.c000066400000000000000000000021271504475242000162620ustar00rootroot00000000000000/* Floor function for _Decimal128 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "floord32.c" libdfp-1.0.17/ieee754r/floord32.c000066400000000000000000000033751504475242000162020ustar00rootroot00000000000000/* Floor function for _Decimal32 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #define FUNCTION_NAME floor #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsInfinite (&dn_x) || decNumberIsZero (&dn_x) ) return x+x; decContextDefault (&context, DEFAULT_CONTEXT); context.round = DEC_ROUND_FLOOR; decNumberToIntegralValue (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/floord64.c000066400000000000000000000021241504475242000161760ustar00rootroot00000000000000/* Floor function for _Decimal64 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "floord32.c" libdfp-1.0.17/ieee754r/fmad128.c000066400000000000000000000021341504475242000157020ustar00rootroot00000000000000/* Floating point multiply and add (x * y + z) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fmad32.c" libdfp-1.0.17/ieee754r/fmad32.c000066400000000000000000000061751504475242000156250ustar00rootroot00000000000000/* Floating point multiply and add (x * y + z) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #include #define FUNCTION_NAME fma #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y, DEC_TYPE z) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_y; decNumber dn_product; decNumber dn_z; FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); FUNC_CONVERT_TO_DN (&z, &dn_z); /* If x or y is NaN, return NaN */ if (decNumberIsNaN (&dn_x) || decNumberIsNaN (&dn_y)) return x+y; /* Domain error if x or y is Inf, the other is 0 */ if ( (decNumberIsInfinite (&dn_x) && decNumberIsZero (&dn_y)) || (decNumberIsInfinite (&dn_y) && decNumberIsZero (&dn_x)) ) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } /* If x and y are not 0,Inf or Inf,0, and z is NaN, return NaN */ if (decNumberIsNaN (&dn_z)) return z+z; decContextDefault (&context, DEFAULT_CONTEXT); decNumberMultiply (&dn_product, &dn_x, &dn_y, &context); /* Domain error if x*y = Inf and z=Inf (with opposite signs) */ if (decNumberIsInfinite (&dn_product) && decNumberIsInfinite (&dn_z) && (decNumberIsNegative (&dn_product) != decNumberIsNegative (&dn_z))) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } decNumberAdd (&dn_result, &dn_product, &dn_z, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y, DEC_TYPE z) { DEC_TYPE r = IEEE_FUNCTION_NAME (x, y, z); if ( (FUNC_D(__isinf) (x) && y == DFP_CONSTANT(0.0)) || (FUNC_D(__isinf) (y) && x == DFP_CONSTANT(0.0)) ) DFP_ERRNO(EDOM); else if (FUNC_D (__isinf) (z)) { int isneg = FUNC_D(__signbit) (x) ^ FUNC_D(__signbit) (y); int inf = FUNC_D(__isinf) (x) | FUNC_D(__isinf) (y); if ( inf && FUNC_D (__signbit) (z) != isneg) DFP_ERRNO (EDOM); } return r; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/fmad64.c000066400000000000000000000021321504475242000156170ustar00rootroot00000000000000/* Floating point multiply and add (x * y + z) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fmad32.c" libdfp-1.0.17/ieee754r/fmaxd128.c000066400000000000000000000021401504475242000160670ustar00rootroot00000000000000/* Determine the maximum of two _Decimal128 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fmaxd32.c" libdfp-1.0.17/ieee754r/fmaxd32.c000066400000000000000000000034201504475242000160030ustar00rootroot00000000000000/* Determine the maximum of two _Decimal32 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #include #define FUNCTION_NAME fmax #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_y; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); decContextDefault(&context, DEFAULT_CONTEXT); decNumberMax(&dn_result, &dn_x, &dn_y, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/fmaxd64.c000066400000000000000000000021351504475242000160120ustar00rootroot00000000000000/* Determine the maximum of two _Decimal64 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fmaxd32.c" libdfp-1.0.17/ieee754r/fmaxmagd128.c000066400000000000000000000023671504475242000165670ustar00rootroot00000000000000/* The fmaxmag functions determine the value of their argument whose magnitude is the maximum of the magnitudes of the arguments: the value of x if |x| > |y|, y if |x| < |y|, and fmax(x,y) otherwise. Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include #include "fmaxmagd32.c" libdfp-1.0.17/ieee754r/fmaxmagd32.c000066400000000000000000000032201504475242000164660ustar00rootroot00000000000000/* The fmaxmag functions determine the value of their argument whose magnitude is the maximum of the magnitudes of the arguments: the value of x if |x| > |y|, y if |x| < |y|, and fmax(x,y) otherwise. Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #define FUNCTION_NAME fmaxmag #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE ax, ay; ax = FUNC_D(__fabs) (x); ay = FUNC_D(__fabs) (y); if (FUNC_D(__isgreater) (ax, ay)) return x; if (FUNC_D(__isgreater) (ay, ax)) return y; return FUNC_D(__fmax) (x, y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/fmaxmagd64.c000066400000000000000000000023411504475242000164760ustar00rootroot00000000000000/* The fmaxmag functions determine the value of their argument whose magnitude is the maximum of the magnitudes of the arguments: the value of x if |x| > |y|, y if |x| < |y|, and fmax(x,y) otherwise. Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fmaxmagd32.c" libdfp-1.0.17/ieee754r/fmind128.c000066400000000000000000000021401504475242000160650ustar00rootroot00000000000000/* Determine the minimum of two _Decimal128 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fmind32.c" libdfp-1.0.17/ieee754r/fmind32.c000066400000000000000000000034201504475242000160010ustar00rootroot00000000000000/* Determine the minimum of two _Decimal32 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #include #define FUNCTION_NAME fmin #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_y; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); decContextDefault(&context, DEFAULT_CONTEXT); decNumberMin(&dn_result, &dn_x, &dn_y, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/fmind64.c000066400000000000000000000021351504475242000160100ustar00rootroot00000000000000/* Determine the minimum of two _Decimal64 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fmind32.c" libdfp-1.0.17/ieee754r/fminmagd128.c000066400000000000000000000023421504475242000165560ustar00rootroot00000000000000/* The fminmag functions determine the value of their argument whose magnitude is the minimum of the magnitudes of the arguments: the value of y if |x| > |y|, x if |x| < |y|, and fmin(x,y) otherwise. Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fminmagd32.c" libdfp-1.0.17/ieee754r/fminmagd32.c000066400000000000000000000032701504475242000164710ustar00rootroot00000000000000/* The fminmag functions determine the value of their argument whose magnitude is the minimum of the magnitudes of the arguments: the value of y if |x| > |y|, x if |x| < |y|, and fmin(x,y) otherwise. Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #define FUNCTION_NAME fminmag #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE ax, ay; ax = FUNC_D(__fabs) (x); ay = FUNC_D(__fabs) (y); if (FUNC_D(__isless) (ax, ay)) return x; if (FUNC_D(__isless) (ay, ax)) return y; return FUNC_D(__fmin) (x, y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/fminmagd64.c000066400000000000000000000023401504475242000164730ustar00rootroot00000000000000/* The fminmag functions determine the value of their argument whose magnitude is the minimum of the magnitudes of the arguments: the value of y if |x| > |y|, x if |x| < |y|, and fmin(x,y) otherwise. Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fminmagd32.c" libdfp-1.0.17/ieee754r/fmodd128.c000066400000000000000000000021441504475242000160650ustar00rootroot00000000000000/* Returns the remainder of a floating point division Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fmodd32.c" libdfp-1.0.17/ieee754r/fmodd64.c000066400000000000000000000021421504475242000160020ustar00rootroot00000000000000/* Returns the remainder of a floating point division Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fmodd32.c" libdfp-1.0.17/ieee754r/fpclassifyd128.c000066400000000000000000000040071504475242000173030ustar00rootroot00000000000000/* Returns the type of floating point number from a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #define _DECIMAL_SIZE 128 #include #include int __fpclassifyd128 (_Decimal128 x) { decNumber dn_x; decContext context; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return FP_NAN; else if (decNumberIsInfinite (&dn_x)) return FP_INFINITE; else if (decNumberIsZero (&dn_x)) return FP_ZERO; /* Since DFP value are not normalized, checking the exponent for normal/subnormal is not suffice. For instance, the value 10e-96 will result in a expoenent below the minimum, however it is still a FP_NORMAL number due implicit normalization. TO avoid such traps the check relies on runtime comparisons. */ decContextDefault (&context, DEC_INIT_DECIMAL128); if (decNumberIsSubnormal (&dn_x, &context)) return FP_SUBNORMAL; return FP_NORMAL; } hidden_def (__fpclassifyd128) weak_alias (__fpclassifyd128, fpclassifyd128) libdfp-1.0.17/ieee754r/fpclassifyd32.c000066400000000000000000000037141504475242000172210ustar00rootroot00000000000000/* Returns the type of floating point number from a _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #define _DECIMAL_SIZE 32 #include #include int __fpclassifyd32 (_Decimal32 x) { decNumber dn_x; decContext context; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return FP_NAN; else if (decNumberIsInfinite (&dn_x)) return FP_INFINITE; else if (decNumberIsZero (&dn_x)) return FP_ZERO; /* Since DFP value are not normalized, checking the exponent for normal/subnormal is not suffice. For instance, the value 10e-96 will result in a expoenent below the minimum, however it is still a FP_NORMAL number due implicit normalization. TO avoid such traps the check relies on runtime comparisons. */ decContextDefault (&context, DEC_INIT_DECIMAL32); if (decNumberIsSubnormal (&dn_x, &context)) return FP_SUBNORMAL; return FP_NORMAL; } hidden_def (__fpclassifyd32) weak_alias (__fpclassifyd32, fpclassifyd32) libdfp-1.0.17/ieee754r/fpclassifyd64.c000066400000000000000000000037761504475242000172360ustar00rootroot00000000000000/* Returns the type of floating point number from a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #define _DECIMAL_SIZE 64 #include #include int __fpclassifyd64 (_Decimal64 x) { decNumber dn_x; decContext context; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return FP_NAN; else if (decNumberIsInfinite (&dn_x)) return FP_INFINITE; else if (decNumberIsZero (&dn_x)) return FP_ZERO; /* Since DFP value are not normalized, checking the exponent for normal/subnormal is not suffice. For instance, the value 10e-96 will result in a expoenent below the minimum, however it is still a FP_NORMAL number due implicit normalization. TO avoid such traps the check relies on runtime comparisons. */ decContextDefault (&context, DEC_INIT_DECIMAL64); if (decNumberIsSubnormal (&dn_x, &context)) return FP_SUBNORMAL; return FP_NORMAL; } hidden_def (__fpclassifyd64) weak_alias (__fpclassifyd64, fpclassifyd64) libdfp-1.0.17/ieee754r/frexpd128.c000066400000000000000000000022011504475242000162560ustar00rootroot00000000000000/* Break floating point number into normalized fraction and integral power of two Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "frexpd32.c" libdfp-1.0.17/ieee754r/frexpd32.c000066400000000000000000000052331504475242000162000ustar00rootroot00000000000000/* Break dfp number into normalized fraction and integral power of two Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #define FUNCTION_NAME frexp #include #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, int *y) { /* GCC isn't smart enough to realize that the else block sets this in the * FUNC_CONVERT_FROM_DN macro so simply initialize it to NaN to silence the * warnings. */ DEC_TYPE result = DEC_NAN; #if NUMDIGITS_SUPPORT==1 int digits, exponent; if (FUNC_D (__isinf) (x) || FUNC_D (__isnan) (x)) return x+x; // Given 3.1e0 is encoded as 31e-1 and we want .31e1 // We have 2 'digits'. // Given 30.0e0 is encoded as 300e-1 and we want .300e2 // We have 3 'digits'. // Given .003e0 is encoded as 3e3 and we want .3e-2 // We have 1 'digits'. digits = FUNC_D (numdigits) (x); // We have -1 exponent. // We have -1 exponent. // We have -3 exponent. exponent = FUNC_D (getexp) (x); *y = digits + exponent; result = FUNC_D(setexp) (x, -digits); //2 + (-1) = 1 0 //3 + (-1) = 2 0 //1 + (-3) = -2 #else decNumber dn_x; decContext context; *y = 0; FUNC_CONVERT_TO_DN(&x, &dn_x); if (___decNumberIsNaN (&dn_x) || ___decNumberIsInfinite (&dn_x) || ___decNumberIsZero (&dn_x)) return x+x; *y = dn_x.digits + dn_x.exponent; dn_x.exponent = -dn_x.digits; decContextDefault(&context, DEFAULT_CONTEXT); FUNC_CONVERT_FROM_DN (&dn_x, &result, &context); #endif return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/frexpd64.c000066400000000000000000000021771504475242000162110ustar00rootroot00000000000000/* Break floating point number into normalized fraction and integral power of two Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "frexpd32.c" libdfp-1.0.17/ieee754r/hypotd128.c000066400000000000000000000021101504475242000162740ustar00rootroot00000000000000/* Returns sqrt(x*x+y*y) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "hypotd32.c" libdfp-1.0.17/ieee754r/hypotd32.c000066400000000000000000000046251504475242000162230ustar00rootroot00000000000000/* Returns sqrt(x*x+y*y) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #include #define FUNCTION_NAME hypot #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_xx; decNumber dn_y; decNumber dn_yy; decNumber dn_sum; FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); if (decNumberIsInfinite (&dn_x)) return x; if (decNumberIsInfinite (&dn_y)) return y; if (decNumberIsNaN (&dn_x) || decNumberIsNaN (&dn_y)) return x+y; decContextDefault (&context, DEFAULT_CONTEXT); decNumberMultiply (&dn_xx, &dn_x, &dn_x, &context); decNumberMultiply (&dn_yy, &dn_y, &dn_y, &context); decNumberAdd (&dn_sum, &dn_xx, &dn_yy, &context); decNumberSquareRoot (&dn_result, &dn_sum, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x) && FUNC_D(__isfinite) (y)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/hypotd64.c000066400000000000000000000021061504475242000162200ustar00rootroot00000000000000/* Returns sqrt(x*x+y*y) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "hypotd32.c" libdfp-1.0.17/ieee754r/ilogbd128.c000066400000000000000000000021721504475242000162350ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal128 value as an int Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "ilogbd32.c" libdfp-1.0.17/ieee754r/ilogbd32.c000066400000000000000000000045371504475242000161560ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal32 value as an int Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #ifndef _RETURN_TYPE # define _RETURN_TYPE int #endif #ifndef _MAX_VALUE # define _MAX_VALUE INT_MAX #endif #ifndef _MIN_VALUE # define _MIN_VALUE INT_MIN #endif #ifndef _FBLOG0 # define _FBLOG0 FP_ILOGB0 #endif #ifndef _FBLOGNAN # define _FBLOGNAN FP_ILOGBNAN #endif #ifndef FUNCTION_NAME # define FUNCTION_NAME ilogb #endif #include #include #include #include #include _RETURN_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { /* Assume an int can hold any decimal type exponent. */ int c = FUNC_D (__fpclassify) (x); int exp; if (c != FP_NORMAL) { if (x != x) { DFP_ERRNO (EDOM); return _FBLOGNAN; } else if (c == FP_ZERO) { DFP_ERRNO (EDOM); return _FBLOG0; } else if (c == FP_INFINITE) { DFP_ERRNO (EDOM); return FUNC_D (__signbit) (x) ? _MIN_VALUE : _MAX_VALUE; } /* And handle subnormals like any other finite value. */ } /* A simpler approach would be to truncate the value to 1 digit in the least significant digit and return the exponent, frexp essentially does that. */ FUNC_D (__frexp) (x, &exp); return exp - 1; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/ilogbd64.c000066400000000000000000000021671504475242000161600ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal64 value as an int Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "ilogbd32.c" libdfp-1.0.17/ieee754r/isfinited128.c000066400000000000000000000033241504475242000167530ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is non-infinite Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isfinited128 (_Decimal128 x) { uint64_t hx; GET_DEC128_HIGH_WORD64 (hx, x); if (((hx & DEC128_NAN_MASK64) == DEC128_NAN_MASK64) || ((hx & DEC128_INF_MASK64) == DEC128_INF_MASK64)) return 0; return 1; } hidden_def (__isfinited128) weak_alias (__isfinited128, isfinited128) /* We erroneously published a version of math.h which used 'finite' instead of * 'isfinite' and math.h contained a polymorphic 'isfinite()' function which * inlined calles to 'finited*' so we've created aliases for compatability. */ strong_alias (__isfinited128, finited128) strong_alias (__isfinited128, __finited128) libdfp-1.0.17/ieee754r/isfinited32.c000066400000000000000000000033441504475242000166670ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is non-infinite Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isfinited32 (_Decimal32 x) { uint32_t hx; GET_DEC32_WORD (hx, x); if (((hx & DEC32_NAN_MASK) == DEC32_NAN_MASK) || ((hx & DEC32_INF_MASK) == DEC32_INF_MASK)) return 0; return 1; } hidden_def (__isfinited32) weak_alias (__isfinited32, isfinited32) /* We erroneously published a version of math.h which used 'finite' instead of * 'isfinite' and math.h contained a polymorphic 'isfinite()' function which * inlined calles to 'finited*' so we've created aliases for compatability. */ strong_alias (__isfinited32, finited32) strong_alias (__isfinited32, __finited32) libdfp-1.0.17/ieee754r/isfinited64.c000066400000000000000000000033001504475242000166640ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is non-infinite Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isfinited64 (_Decimal64 x) { uint64_t hx; GET_DEC64_WORD64 (hx, x); if (((hx & DEC64_NAN_MASK64) == DEC64_NAN_MASK64) || ((hx & DEC64_INF_MASK64) == DEC64_INF_MASK64)) return 0; return 1; } hidden_def (__isfinited64) weak_alias (__isfinited64, isfinited64) /* We erroneously published a version of math.h which used 'finite' instead of * 'isfinite' and math.h contained a polymorphic 'isfinite()' function which * inlined calles to 'finited*' so we've created aliases for compatability. */ strong_alias (__isfinited64, finited64) strong_alias (__isfinited64, __finited64) libdfp-1.0.17/ieee754r/isgreaterd128.c000066400000000000000000000021201504475242000171170ustar00rootroot00000000000000/* Implements > for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "isgreaterd32.c" libdfp-1.0.17/ieee754r/isgreaterd32.c000066400000000000000000000034101504475242000170340ustar00rootroot00000000000000/* Implements > for _Decimal32 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #define FUNCTION_NAME isgreater #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x; decNumber dn_y; decNumber dn_result; decContext context; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 0; decNumberCompare (&dn_result, &dn_x, &dn_y, &context); return !decNumberIsNegative (&dn_result) && !decNumberIsZero(&dn_result); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/isgreaterd64.c000066400000000000000000000021161504475242000170430ustar00rootroot00000000000000/* Implements > for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "isgreaterd32.c" libdfp-1.0.17/ieee754r/isgreaterequald128.c000066400000000000000000000021261504475242000201550ustar00rootroot00000000000000/* Implements >= for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "isgreaterequald32.c" libdfp-1.0.17/ieee754r/isgreaterequald32.c000066400000000000000000000034261504475242000200730ustar00rootroot00000000000000/* Implements >= for _Decimal32 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #define FUNCTION_NAME isgreaterequal #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x; decNumber dn_y; decNumber result; decContext context; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if (decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 0; decContextDefault (&context, DEFAULT_CONTEXT); decNumberCompare (&result, &dn_x, &dn_y, &context); return !decNumberIsNegative(&result); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/isgreaterequald64.c000066400000000000000000000021241504475242000200720ustar00rootroot00000000000000/* Implements >= for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "isgreaterequald32.c" libdfp-1.0.17/ieee754r/isinfd128.c000066400000000000000000000026101504475242000162460ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is infinite Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isinfd128 (_Decimal128 x) { uint64_t hx; GET_DEC128_HIGH_WORD64 (hx, x); /* 0 1111000 ... == sINF */ return ((hx & DEC128_NAN_MASK64) == DEC128_INF_MASK64) ? ((hx & UINT64_C(0x8000000000000000)) ? -1 : 1) : 0; } hidden_def (__isinfd128) weak_alias (__isinfd128, isinfd128) libdfp-1.0.17/ieee754r/isinfd32.c000066400000000000000000000025421504475242000161640ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is infinite Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isinfd32 (_Decimal32 x) { uint32_t hx; GET_DEC32_WORD (hx, x); /* 0 1111000 ... == sINF */ return ((hx & DEC32_NAN_MASK) == DEC32_INF_MASK) ? ((hx & 0x80000000) ? -1 : 1) : 0; } hidden_def (__isinfd32) weak_alias (__isinfd32, isinfd32) libdfp-1.0.17/ieee754r/isinfd64.c000066400000000000000000000025721504475242000161740ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is infinite Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isinfd64 (_Decimal64 x) { uint64_t hx; GET_DEC64_WORD64 (hx, x); /* 0 1111000 ... == sINF */ return ((hx & DEC64_NAN_MASK64) == DEC64_INF_MASK64) ? ((hx & UINT64_C(0x8000000000000000)) ? -1 : 1) : 0; } hidden_def (__isinfd64) weak_alias (__isinfd64, isinfd64) libdfp-1.0.17/ieee754r/islessd128.c000066400000000000000000000021151504475242000164400ustar00rootroot00000000000000/* Implements < for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "islessd32.c" libdfp-1.0.17/ieee754r/islessd32.c000066400000000000000000000034251504475242000163570ustar00rootroot00000000000000/* Implements < for _Decimal32 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #define FUNCTION_NAME isless #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x; decNumber dn_y; decNumber dn_result; decContext context; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if (decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 0; decContextDefault (&context, DEFAULT_CONTEXT); decNumberCompare (&dn_result, &dn_x, &dn_y, &context); return decNumberIsNegative(&dn_result); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/islessd64.c000066400000000000000000000021131504475242000163550ustar00rootroot00000000000000/* Implements < for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "islessd32.c" libdfp-1.0.17/ieee754r/islessequald128.c000066400000000000000000000021231504475242000174670ustar00rootroot00000000000000/* Implements <= for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "islessequald32.c" libdfp-1.0.17/ieee754r/islessequald32.c000066400000000000000000000034531504475242000174100ustar00rootroot00000000000000/* Implements <= for _Decimal32 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #define FUNCTION_NAME islessequal #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x; decNumber dn_y; decNumber result; decContext context; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 0; decContextDefault(&context, DEFAULT_CONTEXT); decNumberCompare(&result, &dn_x, &dn_y, &context); return decNumberIsNegative(&result) || decNumberIsZero(&result); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/islessequald64.c000066400000000000000000000021211504475242000174040ustar00rootroot00000000000000/* Implements <= for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "islessequald32.c" libdfp-1.0.17/ieee754r/islessgreaterd128.c000066400000000000000000000021251504475242000200130ustar00rootroot00000000000000/* Implements <> for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "islessgreaterd32.c" libdfp-1.0.17/ieee754r/islessgreaterd32.c000066400000000000000000000034711504475242000177320ustar00rootroot00000000000000/* Implements <> for _Decimal32 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #define FUNCTION_NAME islessgreater #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x; decNumber dn_y; decNumber dn_result; decContext context; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 0; decNumberCompare (&dn_result, &dn_x, &dn_y, &context); return (-decNumberIsNegative (&dn_result)) || (!decNumberIsNegative (&dn_result) && !decNumberIsZero (&dn_result)); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/islessgreaterd64.c000066400000000000000000000021231504475242000177300ustar00rootroot00000000000000/* Implements <> for _Decimal Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "islessgreaterd32.c" libdfp-1.0.17/ieee754r/isnand128.c000066400000000000000000000025121504475242000162470ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is nan Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isnand128 (_Decimal128 x) { uint64_t hx; GET_DEC128_HIGH_WORD64 (hx, x); /* 0 11111 10 ... == sNaN */ return (hx & DEC128_NAN_MASK64) == DEC128_NAN_MASK64; } hidden_def (__isnand128) weak_alias (__isnand128, isnand128) libdfp-1.0.17/ieee754r/isnand32.c000066400000000000000000000024661504475242000161710ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is nan Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isnand32 (_Decimal32 x) { uint32_t hx; GET_DEC32_WORD (hx, x); /* 0 11111 10 ... == sNaN */ return (hx & DEC32_NAN_MASK) == DEC32_NAN_MASK; } hidden_def (__isnand32) weak_alias (__isnand32, isnand32) libdfp-1.0.17/ieee754r/isnand64.c000066400000000000000000000024741504475242000161750ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is nan Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include int __isnand64 (_Decimal64 x) { uint64_t hx; GET_DEC64_WORD64 (hx, x); /* 0 11111 10 ... == sNaN */ return (hx & DEC64_NAN_MASK64) == DEC64_NAN_MASK64; } hidden_def (__isnand64) weak_alias (__isnand64, isnand64) libdfp-1.0.17/ieee754r/isnormald128.c000066400000000000000000000021471504475242000167670ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is normalized Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "isnormald32.c" libdfp-1.0.17/ieee754r/isnormald32.c000066400000000000000000000037111504475242000166770ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is normalized Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include /* Includes definitions of DEC##_MIN */ #define FUNCTION_NAME isnormal #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE min = DFP_MIN; DEC_TYPE result; /*decNumber dn_min; */ decContext context; decNumber dn_x; decNumber dn_result; /* FUNC_CONVERT_TO_DN(&min, &dn_min); */ FUNC_CONVERT_TO_DN(&x, &dn_x); if(decNumberIsNaN(&dn_x) || decNumberIsInfinite(&dn_x) || decNumberIsZero(&dn_x)) return 0; decContextDefault(&context, DEFAULT_CONTEXT); decNumberAbs(&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if(result The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "isnormald32.c" libdfp-1.0.17/ieee754r/issignalingd128.c000066400000000000000000000023321504475242000174460ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is a signaling nan Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __issignalingd128 (_Decimal128 x) { uint64_t hx; GET_DEC128_HIGH_WORD64 (hx, x); /* 0 11111 10 ... == sNaN */ return (hx & DEC128_SNAN_MASK64) == DEC128_SNAN_MASK64; } weak_alias (__issignalingd128, issignalingd128) libdfp-1.0.17/ieee754r/issignalingd32.c000066400000000000000000000023071504475242000173620ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is a signaling nan Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __issignalingd32 (_Decimal32 x) { uint32_t hx; GET_DEC32_WORD (hx, x); /* 0 11111 10 ... == sNaN */ return (hx & DEC32_SNAN_MASK) == DEC32_SNAN_MASK; } weak_alias (__issignalingd32, issignalingd32) libdfp-1.0.17/ieee754r/issignalingd64.c000066400000000000000000000023151504475242000173660ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is a signaling nan Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __issignalingd64 (_Decimal64 x) { uint64_t hx; GET_DEC64_WORD64 (hx, x); /* 0 11111 10 ... == sNaN */ return (hx & DEC64_SNAN_MASK64) == DEC64_SNAN_MASK64; } weak_alias (__issignalingd64, issignalingd64) libdfp-1.0.17/ieee754r/isunorderedd128.c000066400000000000000000000021421504475242000174610ustar00rootroot00000000000000/* Returns true if either _Decimal128 is NaN Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "isunorderedd32.c" libdfp-1.0.17/ieee754r/isunorderedd32.c000066400000000000000000000026311504475242000173760ustar00rootroot00000000000000/* Returns true if either _Decimal32 is NaN Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #define FUNCTION_NAME isunordered #include #include /* This isn't used explicity externally. */ int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { return __builtin_isunordered (x, y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/isunorderedd64.c000066400000000000000000000021371504475242000174040ustar00rootroot00000000000000/* Returns true if either _Decimal64 is NaN Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "isunorderedd32.c" libdfp-1.0.17/ieee754r/ldexpd128.c000066400000000000000000000021501504475242000162510ustar00rootroot00000000000000/* Returns the _Decimal128 value * 2^ the integral value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "ldexpd32.c" libdfp-1.0.17/ieee754r/ldexpd32.c000066400000000000000000000061551504475242000161740ustar00rootroot00000000000000/* Returns the _Decimal32 value * 2^ the integral value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME ldexp #include #include #include #include "dfp_inline.h" static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, int y) { DEC_TYPE result, tiny; long newexp; int minexp = PASTE(DECIMAL,PASTE(_DECIMAL_SIZE,_Emin)); int p = PASTE(DECIMAL,PASTE(_DECIMAL_SIZE,_Pmax)); #if NUMDIGITS_SUPPORT==1 newexp = FUNC_D (getexp) (x) + y; if (newexp > PASTE(DECIMAL,PASTE(_DECIMAL_SIZE,_Emax))) { result = FUNC_D(__copysign)(DFP_HUGE_VAL, x); DFP_EXCEPT (FE_OVERFLOW); } else if (newexp < minexp) { /* Check if the result might be subnormal. */ if( newexp > (minexp - p)) { result = FUNC_D(setexp) (x, minexp); /* Use a multiply so we correctly round whatever may shifts out. */ tiny = FUNC_D(setexp) (1.DL, newexp - minexp); return result * tiny; } result = DFP_CONSTANT(0.0); DFP_EXCEPT (FE_UNDERFLOW); return result; } else result = FUNC_D(setexp) (x, newexp); #else decContext context; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (___decNumberIsNaN (&dn_x) || ___decNumberIsZero (&dn_x) || ___decNumberIsInfinite (&dn_x)) return x+x; if (y == 0) return x; /* ldexp(x,y) is just x*10**y, which is equivalent to increasing the exponent * by y. */ newexp = dn_x.exponent + y; if(newexp > INT_MAX) newexp = INT_MAX; if(newexp < -INT_MAX) newexp = -INT_MAX; dn_x.exponent = newexp; decContextDefault (&context, DEFAULT_CONTEXT); FUNC_CONVERT_FROM_DN (&dn_x, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); #endif return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, int y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/ldexpd64.c000066400000000000000000000021451504475242000161740ustar00rootroot00000000000000/* Returns the _Decimal64 value * 2^ the integral value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "ldexpd32.c" libdfp-1.0.17/ieee754r/lgammad128.c000066400000000000000000000022021504475242000163710ustar00rootroot00000000000000/* Returns the natural logarithm of the absolute value of the Gamma function of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "lgammad32.c" libdfp-1.0.17/ieee754r/lgammad32.c000066400000000000000000001020311504475242000163040ustar00rootroot00000000000000/* Natural logarithm of gamma function Copyright (C) 2001 Stephen L. Moshier Copyright (C) 2006 IBM Corporation. Copyright (C) 2001-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #include #define FUNCTION_NAME lgamma /* Adapted for libdfp from glibc in 2006 and donated to the FSF in 2007. * * lgammad32 * * Natural logarithm of gamma function * * * * SYNOPSIS: * * _Decimal128 x, y, lgamma32(); * extern int sgngam; * * y = lgammad32(x); * * * * DESCRIPTION: * * Returns the base e (2.718...) logarithm of the absolute * value of the gamma function of the argument. * The sign (+1 or -1) of the gamma function is returned in a * global (extern) variable named sgngam. * * The positive domain is partitioned into numerous segments for approximation. * For x > 10, * log gamma(x) = (x - 0.5) log(x) - x + log sqrt(2 pi) + 1/x R(1/x^2) * Near the minimum at x = x0 = 1.46... the approximation is * log gamma(x0 + z) = log gamma(x0) + z^2 P(z)/Q(z) * for small z. * Elsewhere between 0 and 10, * log gamma(n + z) = log gamma(n) + z P(z)/Q(z) * for various selected n and small z. * * The cosecant reflection formula is employed for negative arguments. * * * * ACCURACY: * * * arithmetic domain # trials peak rms * Relative error: * IEEE 10, 30 100000 3.9e-34 9.8e-35 * IEEE 0, 10 100000 3.8e-34 5.3e-35 * Absolute error: * IEEE -10, 0 100000 8.0e-34 8.0e-35 * IEEE -30, -10 100000 4.4e-34 1.0e-34 * IEEE -100, 100 100000 1.0e-34 * * The absolute error criterion is the same as relative error * when the function magnitude is greater than one but it is absolute * when the magnitude is less than one. * */ #include #include static const _Decimal128 huge = 1.0e4000DL; /* log gamma(x) = ( x - 0.5 ) * log(x) - x + DLS2PI + 1/x P(1/x^2) 1/x <= 0.0741 (x >= 13.495...) Peak relative error 1.5e-36 */ static const _Decimal128 ls2pi = 9.1893853320467274178032973640561763986140E-1DL; #define NRASY 12 static const _Decimal128 RASY[NRASY + 1] = { 8.333333333333333333333333333310437112111E-2DL, -2.777777777777777777777774789556228296902E-3DL, 7.936507936507936507795933938448586499183E-4DL, -5.952380952380952041799269756378148574045E-4DL, 8.417508417507928904209891117498524452523E-4DL, -1.917526917481263997778542329739806086290E-3DL, 6.410256381217852504446848671499409919280E-3DL, -2.955064066900961649768101034477363301626E-2DL, 1.796402955865634243663453415388336954675E-1DL, -1.391522089007758553455753477688592767741E0DL, 1.326130089598399157988112385013829305510E1DL, -1.420412699593782497803472576479997819149E2DL, 1.218058922427762808938869872528846787020E3DL }; /* log gamma(x+13) = log gamma(13) + x P(x)/Q(x) -0.5 <= x <= 0.5 12.5 <= x+13 <= 13.5 Peak relative error 1.1e-36 */ static const _Decimal128 lgam13a = 1.9987213134765625E1DL; static const _Decimal128 lgam13b = 1.3608962611495173623870550785125024484248E-6DL; #define NRN13 7 static const _Decimal128 RN13[NRN13 + 1] = { 8.591478354823578150238226576156275285700E11DL, 2.347931159756482741018258864137297157668E11DL, 2.555408396679352028680662433943000804616E10DL, 1.408581709264464345480765758902967123937E9DL, 4.126759849752613822953004114044451046321E7DL, 6.133298899622688505854211579222889943778E5DL, 3.929248056293651597987893340755876578072E3DL, 6.850783280018706668924952057996075215223E0DL }; #define NRD13 6 static const _Decimal128 RD13[NRD13 + 1] = { 3.401225382297342302296607039352935541669E11DL, 8.756765276918037910363513243563234551784E10DL, 8.873913342866613213078554180987647243903E9DL, 4.483797255342763263361893016049310017973E8DL, 1.178186288833066430952276702931512870676E7DL, 1.519928623743264797939103740132278337476E5DL, 7.989298844938119228411117593338850892311E2DL /* 1.0E0DL */ }; /* log gamma(x+12) = log gamma(12) + x P(x)/Q(x) -0.5 <= x <= 0.5 11.5 <= x+12 <= 12.5 Peak relative error 4.1e-36 */ static const _Decimal128 lgam12a = 1.75023040771484375E1DL; static const _Decimal128 lgam12b = 3.7687254483392876529072161996717039575982E-6DL; #define NRN12 7 static const _Decimal128 RN12[NRN12 + 1] = { 4.709859662695606986110997348630997559137E11DL, 1.398713878079497115037857470168777995230E11DL, 1.654654931821564315970930093932954900867E10DL, 9.916279414876676861193649489207282144036E8DL, 3.159604070526036074112008954113411389879E7DL, 5.109099197547205212294747623977502492861E5DL, 3.563054878276102790183396740969279826988E3DL, 6.769610657004672719224614163196946862747E0DL }; #define NRD12 6 static const _Decimal128 RD12[NRD12 + 1] = { 1.928167007860968063912467318985802726613E11DL, 5.383198282277806237247492369072266389233E10DL, 5.915693215338294477444809323037871058363E9DL, 3.241438287570196713148310560147925781342E8DL, 9.236680081763754597872713592701048455890E6DL, 1.292246897881650919242713651166596478850E5DL, 7.366532445427159272584194816076600211171E2DL /* 1.0E0DL */ }; /* log gamma(x+11) = log gamma(11) + x P(x)/Q(x) -0.5 <= x <= 0.5 10.5 <= x+11 <= 11.5 Peak relative error 1.8e-35 */ static const _Decimal128 lgam11a = 1.5104400634765625E1DL; static const _Decimal128 lgam11b = 1.1938309890295225709329251070371882250744E-5DL; #define NRN11 7 static const _Decimal128 RN11[NRN11 + 1] = { 2.446960438029415837384622675816736622795E11DL, 7.955444974446413315803799763901729640350E10DL, 1.030555327949159293591618473447420338444E10DL, 6.765022131195302709153994345470493334946E8DL, 2.361892792609204855279723576041468347494E7DL, 4.186623629779479136428005806072176490125E5DL, 3.202506022088912768601325534149383594049E3DL, 6.681356101133728289358838690666225691363E0DL }; #define NRD11 6 static const _Decimal128 RD11[NRD11 + 1] = { 1.040483786179428590683912396379079477432E11DL, 3.172251138489229497223696648369823779729E10DL, 3.806961885984850433709295832245848084614E9DL, 2.278070344022934913730015420611609620171E8DL, 7.089478198662651683977290023829391596481E6DL, 1.083246385105903533237139380509590158658E5DL, 6.744420991491385145885727942219463243597E2DL /* 1.0E0DL */ }; /* log gamma(x+10) = log gamma(10) + x P(x)/Q(x) -0.5 <= x <= 0.5 9.5 <= x+10 <= 10.5 Peak relative error 5.4e-37 */ static const _Decimal128 lgam10a = 1.280181884765625E1DL; static const _Decimal128 lgam10b = 8.6324252196112077178745667061642811492557E-6DL; #define NRN10 7 static const _Decimal128 RN10[NRN10 + 1] = { -1.239059737177249934158597996648808363783E14DL, -4.725899566371458992365624673357356908719E13DL, -7.283906268647083312042059082837754850808E12DL, -5.802855515464011422171165179767478794637E11DL, -2.532349691157548788382820303182745897298E10DL, -5.884260178023777312587193693477072061820E8DL, -6.437774864512125749845840472131829114906E6DL, -2.350975266781548931856017239843273049384E4DL }; #define NRD10 7 static const _Decimal128 RD10[NRD10 + 1] = { -5.502645997581822567468347817182347679552E13DL, -1.970266640239849804162284805400136473801E13DL, -2.819677689615038489384974042561531409392E12DL, -2.056105863694742752589691183194061265094E11DL, -8.053670086493258693186307810815819662078E9DL, -1.632090155573373286153427982504851867131E8DL, -1.483575879240631280658077826889223634921E6DL, -4.002806669713232271615885826373550502510E3DL /* 1.0E0DL */ }; /* log gamma(x+9) = log gamma(9) + x P(x)/Q(x) -0.5 <= x <= 0.5 8.5 <= x+9 <= 9.5 Peak relative error 3.6e-36 */ static const _Decimal128 lgam9a = 1.06045989990234375E1DL; static const _Decimal128 lgam9b = 3.9037218127284172274007216547549861681400E-6DL; #define NRN9 7 static const _Decimal128 RN9[NRN9 + 1] = { -4.936332264202687973364500998984608306189E13DL, -2.101372682623700967335206138517766274855E13DL, -3.615893404644823888655732817505129444195E12DL, -3.217104993800878891194322691860075472926E11DL, -1.568465330337375725685439173603032921399E10DL, -4.073317518162025744377629219101510217761E8DL, -4.983232096406156139324846656819246974500E6DL, -2.036280038903695980912289722995505277253E4DL }; #define NRD9 7 static const _Decimal128 RD9[NRD9 + 1] = { -2.306006080437656357167128541231915480393E13DL, -9.183606842453274924895648863832233799950E12DL, -1.461857965935942962087907301194381010380E12DL, -1.185728254682789754150068652663124298303E11DL, -5.166285094703468567389566085480783070037E9DL, -1.164573656694603024184768200787835094317E8DL, -1.177343939483908678474886454113163527909E6DL, -3.529391059783109732159524500029157638736E3DL /* 1.0E0DL */ }; /* log gamma(x+8) = log gamma(8) + x P(x)/Q(x) -0.5 <= x <= 0.5 7.5 <= x+8 <= 8.5 Peak relative error 2.4e-37 */ static const _Decimal128 lgam8a = 8.525146484375E0DL; static const _Decimal128 lgam8b = 1.4876690414300165531036347125050759667737E-5DL; #define NRN8 8 static const _Decimal128 RN8[NRN8 + 1] = { 6.600775438203423546565361176829139703289E11DL, 3.406361267593790705240802723914281025800E11DL, 7.222460928505293914746983300555538432830E10DL, 8.102984106025088123058747466840656458342E9DL, 5.157620015986282905232150979772409345927E8DL, 1.851445288272645829028129389609068641517E7DL, 3.489261702223124354745894067468953756656E5DL, 2.892095396706665774434217489775617756014E3DL, 6.596977510622195827183948478627058738034E0DL }; #define NRD8 7 static const _Decimal128 RD8[NRD8 + 1] = { 3.274776546520735414638114828622673016920E11DL, 1.581811207929065544043963828487733970107E11DL, 3.108725655667825188135393076860104546416E10DL, 3.193055010502912617128480163681842165730E9DL, 1.830871482669835106357529710116211541839E8DL, 5.790862854275238129848491555068073485086E6DL, 9.305213264307921522842678835618803553589E4DL, 6.216974105861848386918949336819572333622E2DL /* 1.0E0DL */ }; /* log gamma(x+7) = log gamma(7) + x P(x)/Q(x) -0.5 <= x <= 0.5 6.5 <= x+7 <= 7.5 Peak relative error 3.2e-36 */ static const _Decimal128 lgam7a = 6.5792388916015625E0DL; static const _Decimal128 lgam7b = 1.2320408538495060178292903945321122583007E-5DL; #define NRN7 8 static const _Decimal128 RN7[NRN7 + 1] = { 2.065019306969459407636744543358209942213E11DL, 1.226919919023736909889724951708796532847E11DL, 2.996157990374348596472241776917953749106E10DL, 3.873001919306801037344727168434909521030E9DL, 2.841575255593761593270885753992732145094E8DL, 1.176342515359431913664715324652399565551E7DL, 2.558097039684188723597519300356028511547E5DL, 2.448525238332609439023786244782810774702E3DL, 6.460280377802030953041566617300902020435E0DL }; #define NRD7 7 static const _Decimal128 RD7[NRD7 + 1] = { 1.102646614598516998880874785339049304483E11DL, 6.099297512712715445879759589407189290040E10DL, 1.372898136289611312713283201112060238351E10DL, 1.615306270420293159907951633566635172343E9DL, 1.061114435798489135996614242842561967459E8DL, 3.845638971184305248268608902030718674691E6DL, 7.081730675423444975703917836972720495507E4DL, 5.423122582741398226693137276201344096370E2DL /* 1.0E0DL */ }; /* log gamma(x+6) = log gamma(6) + x P(x)/Q(x) -0.5 <= x <= 0.5 5.5 <= x+6 <= 6.5 Peak relative error 6.2e-37 */ static const _Decimal128 lgam6a = 4.7874908447265625E0DL; static const _Decimal128 lgam6b = 8.9805548349424770093452324304839959231517E-7DL; #define NRN6 8 static const _Decimal128 RN6[NRN6 + 1] = { -3.538412754670746879119162116819571823643E13DL, -2.613432593406849155765698121483394257148E13DL, -8.020670732770461579558867891923784753062E12DL, -1.322227822931250045347591780332435433420E12DL, -1.262809382777272476572558806855377129513E11DL, -7.015006277027660872284922325741197022467E9DL, -2.149320689089020841076532186783055727299E8DL, -3.167210585700002703820077565539658995316E6DL, -1.576834867378554185210279285358586385266E4DL }; #define NRD6 8 static const _Decimal128 RD6[NRD6 + 1] = { -2.073955870771283609792355579558899389085E13DL, -1.421592856111673959642750863283919318175E13DL, -4.012134994918353924219048850264207074949E12DL, -6.013361045800992316498238470888523722431E11DL, -5.145382510136622274784240527039643430628E10DL, -2.510575820013409711678540476918249524123E9DL, -6.564058379709759600836745035871373240904E7DL, -7.861511116647120540275354855221373571536E5DL, -2.821943442729620524365661338459579270561E3DL /* 1.0E0DL */ }; /* log gamma(x+5) = log gamma(5) + x P(x)/Q(x) -0.5 <= x <= 0.5 4.5 <= x+5 <= 5.5 Peak relative error 3.4e-37 */ static const _Decimal128 lgam5a = 3.17803955078125E0DL; static const _Decimal128 lgam5b = 1.4279566695619646941601297055408873990961E-5DL; #define NRN5 9 static const _Decimal128 RN5[NRN5 + 1] = { 2.010952885441805899580403215533972172098E11DL, 1.916132681242540921354921906708215338584E11DL, 7.679102403710581712903937970163206882492E10DL, 1.680514903671382470108010973615268125169E10DL, 2.181011222911537259440775283277711588410E9DL, 1.705361119398837808244780667539728356096E8DL, 7.792391565652481864976147945997033946360E6DL, 1.910741381027985291688667214472560023819E5DL, 2.088138241893612679762260077783794329559E3DL, 6.330318119566998299106803922739066556550E0DL }; #define NRD5 8 static const _Decimal128 RD5[NRD5 + 1] = { 1.335189758138651840605141370223112376176E11DL, 1.174130445739492885895466097516530211283E11DL, 4.308006619274572338118732154886328519910E10DL, 8.547402888692578655814445003283720677468E9DL, 9.934628078575618309542580800421370730906E8DL, 6.847107420092173812998096295422311820672E7DL, 2.698552646016599923609773122139463150403E6DL, 5.526516251532464176412113632726150253215E4DL, 4.772343321713697385780533022595450486932E2DL /* 1.0E0DL */ }; /* log gamma(x+4) = log gamma(4) + x P(x)/Q(x) -0.5 <= x <= 0.5 3.5 <= x+4 <= 4.5 Peak relative error 6.7e-37 */ static const _Decimal128 lgam4a = 1.791748046875E0DL; static const _Decimal128 lgam4b = 1.1422353055000812477358380702272722990692E-5DL; #define NRN4 9 static const _Decimal128 RN4[NRN4 + 1] = { -1.026583408246155508572442242188887829208E13DL, -1.306476685384622809290193031208776258809E13DL, -7.051088602207062164232806511992978915508E12DL, -2.100849457735620004967624442027793656108E12DL, -3.767473790774546963588549871673843260569E11DL, -4.156387497364909963498394522336575984206E10DL, -2.764021460668011732047778992419118757746E9DL, -1.036617204107109779944986471142938641399E8DL, -1.895730886640349026257780896972598305443E6DL, -1.180509051468390914200720003907727988201E4DL }; #define NRD4 9 static const _Decimal128 RD4[NRD4 + 1] = { -8.172669122056002077809119378047536240889E12DL, -9.477592426087986751343695251801814226960E12DL, -4.629448850139318158743900253637212801682E12DL, -1.237965465892012573255370078308035272942E12DL, -1.971624313506929845158062177061297598956E11DL, -1.905434843346570533229942397763361493610E10DL, -1.089409357680461419743730978512856675984E9DL, -3.416703082301143192939774401370222822430E7DL, -4.981791914177103793218433195857635265295E5DL, -2.192507743896742751483055798411231453733E3DL /* 1.0E0DL */ }; /* log gamma(x+3) = log gamma(3) + x P(x)/Q(x) -0.25 <= x <= 0.5 2.75 <= x+3 <= 3.5 Peak relative error 6.0e-37 */ static const _Decimal128 lgam3a = 6.93145751953125E-1DL; static const _Decimal128 lgam3b = 1.4286068203094172321214581765680755001344E-6DL; #define NRN3 9 static const _Decimal128 RN3[NRN3 + 1] = { -4.813901815114776281494823863935820876670E11DL, -8.425592975288250400493910291066881992620E11DL, -6.228685507402467503655405482985516909157E11DL, -2.531972054436786351403749276956707260499E11DL, -6.170200796658926701311867484296426831687E10DL, -9.211477458528156048231908798456365081135E9DL, -8.251806236175037114064561038908691305583E8DL, -4.147886355917831049939930101151160447495E7DL, -1.010851868928346082547075956946476932162E6DL, -8.333374463411801009783402800801201603736E3DL }; #define NRD3 9 static const _Decimal128 RD3[NRD3 + 1] = { -5.216713843111675050627304523368029262450E11DL, -8.014292925418308759369583419234079164391E11DL, -5.180106858220030014546267824392678611990E11DL, -1.830406975497439003897734969120997840011E11DL, -3.845274631904879621945745960119924118925E10DL, -4.891033385370523863288908070309417710903E9DL, -3.670172254411328640353855768698287474282E8DL, -1.505316381525727713026364396635522516989E7DL, -2.856327162923716881454613540575964890347E5DL, -1.622140448015769906847567212766206894547E3DL /* 1.0E0DL */ }; /* log gamma(x+2.5) = log gamma(2.5) + x P(x)/Q(x) -0.125 <= x <= 0.25 2.375 <= x+2.5 <= 2.75 */ static const _Decimal128 lgam2r5a = 2.8466796875E-1DL; static const _Decimal128 lgam2r5b = 1.4901722919159632494669682701924320137696E-5DL; #define NRN2r5 8 static const _Decimal128 RN2r5[NRN2r5 + 1] = { -4.676454313888335499356699817678862233205E9DL, -9.361888347911187924389905984624216340639E9DL, -7.695353600835685037920815799526540237703E9DL, -3.364370100981509060441853085968900734521E9DL, -8.449902011848163568670361316804900559863E8DL, -1.225249050950801905108001246436783022179E8DL, -9.732972931077110161639900388121650470926E6DL, -3.695711763932153505623248207576425983573E5DL, -4.717341584067827676530426007495274711306E3DL }; #define NRD2r5 8 static const _Decimal128 RD2r5[NRD2r5 + 1] = { -6.650657966618993679456019224416926875619E9DL, -1.099511409330635807899718829033488771623E10DL, -7.482546968307837168164311101447116903148E9DL, -2.702967190056506495988922973755870557217E9DL, -5.570008176482922704972943389590409280950E8DL, -6.536934032192792470926310043166993233231E7DL, -4.101991193844953082400035444146067511725E6DL, -1.174082735875715802334430481065526664020E5DL, -9.932840389994157592102947657277692978511E2DL /* 1.0E0DL */ }; /* log gamma(x+2) = x P(x)/Q(x) -0.125 <= x <= +0.375 1.875 <= x+2 <= 2.375 Peak relative error 4.6e-36 */ #define NRN2 9 static const _Decimal128 RN2[NRN2 + 1] = { -3.716661929737318153526921358113793421524E9DL, -1.138816715030710406922819131397532331321E10DL, -1.421017419363526524544402598734013569950E10DL, -9.510432842542519665483662502132010331451E9DL, -3.747528562099410197957514973274474767329E9DL, -8.923565763363912474488712255317033616626E8DL, -1.261396653700237624185350402781338231697E8DL, -9.918402520255661797735331317081425749014E6DL, -3.753996255897143855113273724233104768831E5DL, -4.778761333044147141559311805999540765612E3DL }; #define NRD2 9 static const _Decimal128 RD2[NRD2 + 1] = { -8.790916836764308497770359421351673950111E9DL, -2.023108608053212516399197678553737477486E10DL, -1.958067901852022239294231785363504458367E10DL, -1.035515043621003101254252481625188704529E10DL, -3.253884432621336737640841276619272224476E9DL, -6.186383531162456814954947669274235815544E8DL, -6.932557847749518463038934953605969951466E7DL, -4.240731768287359608773351626528479703758E6DL, -1.197343995089189188078944689846348116630E5DL, -1.004622911670588064824904487064114090920E3DL /* 1.0E0 */ }; /* log gamma(x+1.75) = log gamma(1.75) + x P(x)/Q(x) -0.125 <= x <= +0.125 1.625 <= x+1.75 <= 1.875 Peak relative error 9.2e-37 */ static const _Decimal128 lgam1r75a = -8.441162109375E-2DL; static const _Decimal128 lgam1r75b = 1.0500073264444042213965868602268256157604E-5DL; #define NRN1r75 8 static const _Decimal128 RN1r75[NRN1r75 + 1] = { -5.221061693929833937710891646275798251513E7DL, -2.052466337474314812817883030472496436993E8DL, -2.952718275974940270675670705084125640069E8DL, -2.132294039648116684922965964126389017840E8DL, -8.554103077186505960591321962207519908489E7DL, -1.940250901348870867323943119132071960050E7DL, -2.379394147112756860769336400290402208435E6DL, -1.384060879999526222029386539622255797389E5DL, -2.698453601378319296159355612094598695530E3DL }; #define NRD1r75 8 static const _Decimal128 RD1r75[NRD1r75 + 1] = { -2.109754689501705828789976311354395393605E8DL, -5.036651829232895725959911504899241062286E8DL, -4.954234699418689764943486770327295098084E8DL, -2.589558042412676610775157783898195339410E8DL, -7.731476117252958268044969614034776883031E7DL, -1.316721702252481296030801191240867486965E7DL, -1.201296501404876774861190604303728810836E6DL, -5.007966406976106636109459072523610273928E4DL, -6.155817990560743422008969155276229018209E2DL /* 1.0E0DL */ }; /* log gamma(x+x0) = y0 + x^2 P(x)/Q(x) -0.0867 <= x <= +0.1634 1.374932... <= x+x0 <= 1.625032... Peak relative error 4.0e-36 */ static const _Decimal128 x0a = 1.4616241455078125DL; static const _Decimal128 x0b = 7.9994605498412626595423257213002588621246E-6DL; static const _Decimal128 y0a = -1.21490478515625E-1DL; static const _Decimal128 y0b = 4.1879797753919044854428223084178486438269E-6DL; #define NRN1r5 8 static const _Decimal128 RN1r5[NRN1r5 + 1] = { 6.827103657233705798067415468881313128066E5DL, 1.910041815932269464714909706705242148108E6DL, 2.194344176925978377083808566251427771951E6DL, 1.332921400100891472195055269688876427962E6DL, 4.589080973377307211815655093824787123508E5DL, 8.900334161263456942727083580232613796141E4DL, 9.053840838306019753209127312097612455236E3DL, 4.053367147553353374151852319743594873771E2DL, 5.040631576303952022968949605613514584950E0DL }; #define NRD1r5 8 static const _Decimal128 RD1r5[NRD1r5 + 1] = { 1.411036368843183477558773688484699813355E6DL, 4.378121767236251950226362443134306184849E6DL, 5.682322855631723455425929877581697918168E6DL, 3.999065731556977782435009349967042222375E6DL, 1.653651390456781293163585493620758410333E6DL, 4.067774359067489605179546964969435858311E5DL, 5.741463295366557346748361781768833633256E4DL, 4.226404539738182992856094681115746692030E3DL, 1.316980975410327975566999780608618774469E2DL, /* 1.0E0DL */ }; /* log gamma(x+1.25) = log gamma(1.25) + x P(x)/Q(x) -.125 <= x <= +.125 1.125 <= x+1.25 <= 1.375 Peak relative error = 4.9e-36 */ static const _Decimal128 lgam1r25a = -9.82818603515625E-2DL; static const _Decimal128 lgam1r25b = 1.0023929749338536146197303364159774377296E-5DL; #define NRN1r25 9 static const _Decimal128 RN1r25[NRN1r25 + 1] = { -9.054787275312026472896002240379580536760E4DL, -8.685076892989927640126560802094680794471E4DL, 2.797898965448019916967849727279076547109E5DL, 6.175520827134342734546868356396008898299E5DL, 5.179626599589134831538516906517372619641E5DL, 2.253076616239043944538380039205558242161E5DL, 5.312653119599957228630544772499197307195E4DL, 6.434329437514083776052669599834938898255E3DL, 3.385414416983114598582554037612347549220E2DL, 4.907821957946273805080625052510832015792E0DL }; #define NRD1r25 8 static const _Decimal128 RD1r25[NRD1r25 + 1] = { 3.980939377333448005389084785896660309000E5DL, 1.429634893085231519692365775184490465542E6DL, 2.145438946455476062850151428438668234336E6DL, 1.743786661358280837020848127465970357893E6DL, 8.316364251289743923178092656080441655273E5DL, 2.355732939106812496699621491135458324294E5DL, 3.822267399625696880571810137601310855419E4DL, 3.228463206479133236028576845538387620856E3DL, 1.152133170470059555646301189220117965514E2DL /* 1.0E0DL */ }; /* log gamma(x + 1) = x P(x)/Q(x) 0.0 <= x <= +0.125 1.0 <= x+1 <= 1.125 Peak relative error 1.1e-35 */ #define NRN1 8 static const _Decimal128 RN1[NRN1 + 1] = { -9.987560186094800756471055681088744738818E3DL, -2.506039379419574361949680225279376329742E4DL, -1.386770737662176516403363873617457652991E4DL, 1.439445846078103202928677244188837130744E4DL, 2.159612048879650471489449668295139990693E4DL, 1.047439813638144485276023138173676047079E4DL, 2.250316398054332592560412486630769139961E3DL, 1.958510425467720733041971651126443864041E2DL, 4.516830313569454663374271993200291219855E0DL }; #define NRD1 7 static const _Decimal128 RD1[NRD1 + 1] = { 1.730299573175751778863269333703788214547E4DL, 6.807080914851328611903744668028014678148E4DL, 1.090071629101496938655806063184092302439E5DL, 9.124354356415154289343303999616003884080E4DL, 4.262071638655772404431164427024003253954E4DL, 1.096981664067373953673982635805821283581E4DL, 1.431229503796575892151252708527595787588E3DL, 7.734110684303689320830401788262295992921E1DL /* 1.0E0 */ }; /* log gamma(x + 1) = x P(x)/Q(x) -0.125 <= x <= 0 0.875 <= x+1 <= 1.0 Peak relative error 7.0e-37 */ #define NRNr9 8 static const _Decimal128 RNr9[NRNr9 + 1] = { 4.441379198241760069548832023257571176884E5DL, 1.273072988367176540909122090089580368732E6DL, 9.732422305818501557502584486510048387724E5DL, -5.040539994443998275271644292272870348684E5DL, -1.208719055525609446357448132109723786736E6DL, -7.434275365370936547146540554419058907156E5DL, -2.075642969983377738209203358199008185741E5DL, -2.565534860781128618589288075109372218042E4DL, -1.032901669542994124131223797515913955938E3DL, }; #define NRDr9 8 static const _Decimal128 RDr9[NRDr9 + 1] = { -7.694488331323118759486182246005193998007E5DL, -3.301918855321234414232308938454112213751E6DL, -5.856830900232338906742924836032279404702E6DL, -5.540672519616151584486240871424021377540E6DL, -3.006530901041386626148342989181721176919E6DL, -9.350378280513062139466966374330795935163E5DL, -1.566179100031063346901755685375732739511E5DL, -1.205016539620260779274902967231510804992E4DL, -2.724583156305709733221564484006088794284E2DL /* 1.0E0 */ }; /* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ static _Decimal128 neval (_Decimal128 x, const _Decimal128 *p, int n) { _Decimal128 y; p += n; y = *p--; do { y = y * x + *p--; } while (--n > 0); return y; } /* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ static _Decimal128 deval (_Decimal128 x, const _Decimal128 *p, int n) { _Decimal128 y; p += n; y = x + *p--; do { y = y * x + *p--; } while (--n > 0); return y; } /* The 128bit version is used by all three sizes */ /* extern _Decimal128 __lgamma_rd128 (_Decimal128, int *); */ /* extern DEC_TYPE FUNC_D (__lgamma_r) (DEC_TYPE x, int *signgamp); */ DEC_TYPE FUNC_D (__lgamma_r) (DEC_TYPE x, int *signgamp) { _Decimal128 p, q, w, z, nx; int i, nn; *signgamp = 1; if (FUNC_D(__isinf) (x) || FUNC_D(__isnan) (x)) return x * x; if (x < 0.0DL) { q = -x; p = __floord128 (q); /* Argument is a negative Integer: Pole Error */ if (p == q) { DFP_EXCEPT (FE_DIVBYZERO); return DFP_HUGE_VAL; } i = p; if ((i & 1) == 0) *signgamp = -1; z = q - p; if (z > 0.5DL) { p += 1.0DL; z = p - q; } z = q * __sind128 (M_PIdl * z); if (z == 0.0DL) { DFP_EXCEPT (FE_OVERFLOW); return (DEC_TYPE)(*signgamp * huge * huge); } w = __lgamma_rd128 (q, &i); z = __logd128 (M_PIdl / z) - w; return (DEC_TYPE)(z); } if (x < 13.5DL) { p = 0.0DL; nx = (x + 0.5DL); nn = nx; switch (nn) { case 0: /* log gamma (x + 1) = log(x) + log gamma(x) */ if (x <= 0.125DL) { p = x * neval (x, RN1, NRN1) / deval (x, RD1, NRD1); } else if (x <= 0.375DL) { z = x - 0.25DL; p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); p += lgam1r25b; p += lgam1r25a; } else if (x <= 0.625DL) { z = x + (1.0DL - x0a); z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } else if (x <= 0.875DL) { z = x - 0.75DL; p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); p += lgam1r75b; p += lgam1r75a; } else { z = x - 1.0DL; p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); } p = p - FUNC_D(__log) (x); break; case 1: if (x < 0.875DL) { if (x <= 0.625DL) { z = x + (1.0DL - x0a); z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } else if (x <= 0.875DL) { z = x - 0.75DL; p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); p += lgam1r75b; p += lgam1r75a; } else { z = x - 1.0DL; p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); } p = p - FUNC_D(__log) (x); } else if (x < 1.0DL) { z = x - 1.0DL; p = z * neval (z, RNr9, NRNr9) / deval (z, RDr9, NRDr9); } else if (x == 1.0DL) p = 0.0DL; else if (x <= 1.125DL) { z = x - 1.0DL; p = z * neval (z, RN1, NRN1) / deval (z, RD1, NRD1); } else if (x <= 1.375DL) { z = x - 1.25DL; p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); p += lgam1r25b; p += lgam1r25a; } else { /* 1.375 <= x+x0 <= 1.625 */ z = x - x0a; z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } break; case 2: if (x < 1.625DL) { z = x - x0a; z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } else if (x < 1.875DL) { z = x - 1.75DL; p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); p += lgam1r75b; p += lgam1r75a; } else if (x == 2.0DL) p = 0.0DL; else if (x < 2.375DL) { z = x - 2.0DL; p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); } else { z = x - 2.5DL; p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); p += lgam2r5b; p += lgam2r5a; } break; case 3: if (x < 2.75DL) { z = x - 2.5DL; p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); p += lgam2r5b; p += lgam2r5a; } else { z = x - 3.0DL; p = z * neval (z, RN3, NRN3) / deval (z, RD3, NRD3); p += lgam3b; p += lgam3a; } break; case 4: z = x - 4.0DL; p = z * neval (z, RN4, NRN4) / deval (z, RD4, NRD4); p += lgam4b; p += lgam4a; break; case 5: z = x - 5.0DL; p = z * neval (z, RN5, NRN5) / deval (z, RD5, NRD5); p += lgam5b; p += lgam5a; break; case 6: z = x - 6.0DL; p = z * neval (z, RN6, NRN6) / deval (z, RD6, NRD6); p += lgam6b; p += lgam6a; break; case 7: z = x - 7.0DL; p = z * neval (z, RN7, NRN7) / deval (z, RD7, NRD7); p += lgam7b; p += lgam7a; break; case 8: z = x - 8.0DL; p = z * neval (z, RN8, NRN8) / deval (z, RD8, NRD8); p += lgam8b; p += lgam8a; break; case 9: z = x - 9.0DL; p = z * neval (z, RN9, NRN9) / deval (z, RD9, NRD9); p += lgam9b; p += lgam9a; break; case 10: z = x - 10.0DL; p = z * neval (z, RN10, NRN10) / deval (z, RD10, NRD10); p += lgam10b; p += lgam10a; break; case 11: z = x - 11.0DL; p = z * neval (z, RN11, NRN11) / deval (z, RD11, NRD11); p += lgam11b; p += lgam11a; break; case 12: z = x - 12.0DL; p = z * neval (z, RN12, NRN12) / deval (z, RD12, NRD12); p += lgam12b; p += lgam12a; break; case 13: z = x - 13.0DL; p = z * neval (z, RN13, NRN13) / deval (z, RD13, NRD13); p += lgam13b; p += lgam13a; break; } return (DEC_TYPE) p; } if (x >= (DEC_TYPE)DEC_INFINITY) { DFP_EXCEPT (FE_OVERFLOW); return (DEC_TYPE)(*signgamp * huge * huge); } q = ls2pi - x; q = (x - 0.5DL) * FUNC_D(__log) (x) + q; if (x <= 1.0e18DL) { p = 1.0DL / (x * x); q += neval (p, RASY, NRASY) / x; } return (DEC_TYPE)(q); } static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { int local_signgam; DEC_TYPE retval; retval = FUNC_D (__lgamma_r) (x,&local_signgam); return retval; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); /* For this particular case, both the Pole and Overflow error make the same * finite x -> infinite z result, and both generate an ERANGE errno */ if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/lgammad64.c000066400000000000000000000022001504475242000163060ustar00rootroot00000000000000/* Returns the natural logarithm of the absolute value of the Gamma function of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "lgammad32.c" libdfp-1.0.17/ieee754r/llogbd128.c000066400000000000000000000023551504475242000162430ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal128 value as an long int. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _RETURN_TYPE long int #define FUNCTION_NAME llogb #define _MAX_VALUE LONG_MAX #define _MIN_VALUE LONG_MIN #define _FBLOG0 FP_LLOGB0 #define _FBLOGNAN FP_LLOGBNAN #define _DECIMAL_SIZE 128 #include #include "ilogbd32.c" libdfp-1.0.17/ieee754r/llogbd32.c000066400000000000000000000022651504475242000161550ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal32 value as an long int. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _RETURN_TYPE long int #define FUNCTION_NAME llogb #define _MAX_VALUE LONG_MAX #define _MIN_VALUE LONG_MIN #define _FBLOG0 FP_LLOGB0 #define _FBLOGNAN FP_LLOGBNAN #include "ilogbd32.c" libdfp-1.0.17/ieee754r/llogbd64.c000066400000000000000000000023521504475242000161570ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal64 value as an long int. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _RETURN_TYPE long int #define FUNCTION_NAME llogb #define _MAX_VALUE LONG_MAX #define _MIN_VALUE LONG_MIN #define _FBLOG0 FP_LLOGB0 #define _FBLOGNAN FP_LLOGBNAN #define _DECIMAL_SIZE 64 #include #include "ilogbd32.c" libdfp-1.0.17/ieee754r/llquantexpd128.c000066400000000000000000000020211504475242000173270ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "llquantexpd32.c" libdfp-1.0.17/ieee754r/llquantexpd32.c000066400000000000000000000030601504475242000172450ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument as long long int. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #define FUNCTION_NAME llquantexp #include #include long long int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decNumber dn_x; FUNC_CONVERT_TO_DN(&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsInfinite (&dn_x)) { DFP_ERRNO (EDOM); return LLONG_MIN; } return (long long int)dn_x.exponent; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/llquantexpd64.c000066400000000000000000000020171504475242000172530ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "llquantexpd32.c" libdfp-1.0.17/ieee754r/llrintd128.c000066400000000000000000000021411504475242000164410ustar00rootroot00000000000000/* Rounds to the nearest (long long int) integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "llrintd32.c" libdfp-1.0.17/ieee754r/llrintd32.c000066400000000000000000000026531504475242000163630ustar00rootroot00000000000000/* Rounds to the nearest (long long int) integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #define FUNCTION_NAME llrint #include #define __ROUND_MODE __dn_getround() #define POSTFIX_CHECK \ do \ { \ if (x != result) \ { \ DFP_EXCEPT (FE_INEXACT); \ } \ } while (0) #include "llroundd32.c" libdfp-1.0.17/ieee754r/llrintd64.c000066400000000000000000000021371504475242000163650ustar00rootroot00000000000000/* Rounds to the nearest (long long int) integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "llrintd32.c" libdfp-1.0.17/ieee754r/llroundd128.c000066400000000000000000000021661504475242000166230ustar00rootroot00000000000000/* Rounds to the nearest long long int value, ignoring rounding mode Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "llroundd32.c" libdfp-1.0.17/ieee754r/llroundd32.c000066400000000000000000000051371504475242000165360ustar00rootroot00000000000000/* Rounds to the nearest long long int value, ignoring rounding mode Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME llround #endif #include #ifndef __ROUND_RETURN_TYPE # define __ROUND_RETURN_TYPE long long int # define __MIN_VALUE LLONG_MIN # define __MAX_VALUE LLONG_MAX #endif #ifndef __ROUND_MODE # define __ROUND_MODE DEC_ROUND_HALF_UP #endif static __ROUND_RETURN_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE result; decContext context; decNumber dn_result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsInfinite (&dn_x) || x > __MAX_VALUE || x < __MIN_VALUE) { DFP_EXCEPT (FE_INVALID); return (__ROUND_RETURN_TYPE) x; } decContextDefault (&context, DEFAULT_CONTEXT); context.round = __ROUND_MODE; decNumberToIntegralValue (&dn_result,&dn_x,&context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); #ifdef POSTFIX_CHECK POSTFIX_CHECK; #endif /* Use _Decimal* to __ROUND_RETURN_TYPE casting. */ return (__ROUND_RETURN_TYPE)result; /* return (__ROUND_RETURN_TYPE)decNumberToInteger (&dn_result); */ } __ROUND_RETURN_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { __ROUND_RETURN_TYPE z = IEEE_FUNCTION_NAME (x); if (FUNC_D(__isnan) (x) || FUNC_D(__isinf) (x) || x > __MAX_VALUE || x < __MIN_VALUE) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/llroundd64.c000066400000000000000000000021641504475242000165400ustar00rootroot00000000000000/* Rounds to the nearest long long int value, ignoring rounding mode Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "llroundd32.c" libdfp-1.0.17/ieee754r/log10d128.c000066400000000000000000000021531504475242000160620ustar00rootroot00000000000000/* Calculate the Log (base 10) of a given _Decimal128 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "log10d32.c" libdfp-1.0.17/ieee754r/log10d32.c000066400000000000000000000043401504475242000157740ustar00rootroot00000000000000/* Calculate the Log (base 10) of a given _Decimal32 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #define FUNCTION_NAME log10 #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsZero (&dn_x)) /* If x == 0: Pole Error */ { DFP_EXCEPT (FE_DIVBYZERO); return -DFP_HUGE_VAL; } if (decNumberIsNegative (&dn_x)) /* If x < 0: Domain Error */ { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } if (decNumberIsInfinite (&dn_x)) return x; decContextDefault (&context, DEFAULT_CONTEXT); decNumberLog10 (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x < DFP_CONSTANT(0.0)) DFP_ERRNO (EDOM); if (x == DFP_CONSTANT(0.0)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/log10d64.c000066400000000000000000000021501504475242000157760ustar00rootroot00000000000000/* Calculate the Log (base 10) of a given _Decimal64 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "log10d32.c" libdfp-1.0.17/ieee754r/log1pd128.c000066400000000000000000000021571504475242000161660ustar00rootroot00000000000000/* Calculate the Natural Log of a given a _Decimal128 value + 1 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "log1pd32.c" libdfp-1.0.17/ieee754r/log1pd32.c000066400000000000000000000047351504475242000161040ustar00rootroot00000000000000/* Calculate the Natural Log of (a _Decimal32 value + 1) Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #define FUNCTION_NAME log1p #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_sum; decNumber dn_one; DEC_TYPE one = DFP_CONSTANT(1.0); FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&one, &dn_one); /* For NaN, 0, or +Inf, just return x */ if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x) || (decNumberIsInfinite (&dn_x) && !decNumberIsNegative (&dn_x))) return x+x; decContextDefault(&context, DEFAULT_CONTEXT); decNumberAdd(&dn_sum, &dn_x, &dn_one, &context); if (decNumberIsZero(&dn_sum)) /* Pole Error if x was -1 */ { DFP_EXCEPT (FE_DIVBYZERO); return -DFP_HUGE_VAL; } if (decNumberIsNegative(&dn_sum)) /* Domain Error if x < -1 */ { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } decNumberLn(&dn_result, &dn_sum, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x == DFP_CONSTANT(-1.0)) DFP_ERRNO (ERANGE); if (x < DFP_CONSTANT(-1.0)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/log1pd64.c000066400000000000000000000021541504475242000161020ustar00rootroot00000000000000/* Calculate the Natural Log of a given a _Decimal64 value + 1 Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "log1pd32.c" libdfp-1.0.17/ieee754r/log2d128.c000066400000000000000000000021361504475242000160040ustar00rootroot00000000000000/* Returns the base 2 logarithmic function of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "log2d32.c" libdfp-1.0.17/ieee754r/log2d32.c000066400000000000000000000047701504475242000157240ustar00rootroot00000000000000/* Returns the base 2 logarithmic function of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME log2 #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_two; decNumber dn_logtwo; decNumber dn_logx; DEC_TYPE two = DFP_CONSTANT(2.0); FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&two, &dn_two); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsZero (&dn_x)) /* If x == 0: Pole Error */ { DFP_EXCEPT (FE_DIVBYZERO); return -DFP_HUGE_VAL; } if (decNumberIsNegative (&dn_x)) /* If x < 0,: Domain Error */ { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } if (decNumberIsInfinite (&dn_x)) return x; decContextDefault (&context, DEFAULT_CONTEXT); // log_2 (x) = log_10 (x) / log_10 (2) decNumberLog10 (&dn_logx, &dn_x, &context); decNumberLog10 (&dn_logtwo, &dn_two, &context); decNumberDivide (&dn_result, &dn_logx, &dn_logtwo, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x == DFP_CONSTANT(0.0)) DFP_ERRNO (ERANGE); if (x < DFP_CONSTANT(0.0)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/log2d64.c000066400000000000000000000021341504475242000157210ustar00rootroot00000000000000/* Returns the base 2 logarithmic function of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "log2d32.c" libdfp-1.0.17/ieee754r/logbd128.c000066400000000000000000000021571504475242000160670ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal128 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "logbd32.c" libdfp-1.0.17/ieee754r/logbd32.c000066400000000000000000000054551504475242000160050ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal32 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME logb #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_tmp; decNumber dn_log10; decNumber dn_one; decNumber dn_cmp; enum rounding round; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x)) /* +-Inf: Inf */ return DEC_INFINITY; if (decNumberIsZero (&dn_x)) /* Pole Error if x==0 */ { DFP_ERRNO (ERANGE); DFP_EXCEPT (FE_DIVBYZERO); return -DFP_HUGE_VAL; } if (decNumberIsInfinite (&dn_x) && decNumberIsNegative (&dn_x)) return -x; decContextDefault (&context, DEFAULT_CONTEXT); decNumberAbs (&dn_tmp, &dn_x, &context); /* For DFP, we use radix 10 instead of whatever FLT_RADIX happens to be */ decNumberLog10 (&dn_log10, &dn_tmp, &context); /* Capture the case where truncation will return the wrong result, by rounding up if -1.0 < x < 1.0 */ round = DEC_ROUND_DOWN; decNumberFromInt32 (&dn_one, 1); decNumberCompare (&dn_cmp, &dn_x, &dn_one, &context); if (-decNumberIsNegative(&dn_cmp)) { decNumberFromInt32 (&dn_one, -1); decNumberCompare (&dn_cmp, &dn_x, &dn_one, &context); if (!decNumberIsNegative(&dn_cmp) && !decNumberIsZero(&dn_cmp)) round = DEC_ROUND_UP; } context.round = round; decNumberToIntegralValue (&dn_result, &dn_log10, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/logbd64.c000066400000000000000000000021541504475242000160030ustar00rootroot00000000000000/* Returns the unbiased exponent of the passed _Decimal64 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "logbd32.c" libdfp-1.0.17/ieee754r/logd128.c000066400000000000000000000101211504475242000157130ustar00rootroot00000000000000/* Calculate the Natural Log of a given a _Decimal128 value This is fairly straightforward transformation of the glibc float128 logl as noted below. Copyright (C) 2019 Free Software Foundation, Inc. Copyright 2001 by Stephen L. Moshier This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #define _DECIMAL_SIZE 128 #include #include "dfp_inline.h" #include "t_logd128.h" /* log(1+x) = x - .5 x^2 + x^3 l(x) -.0078125 <= x <= +.0078125 peak relative error 1.2e-37 */ static const _Decimal128 l3 = 3.333333333333333333333333333333336096926E-1DL, l4 = -2.499999999999999999999999999486853077002E-1DL, l5 = 1.999999999999999999999999998515277861905E-1DL, l6 = -1.666666666666666666666798448356171665678E-1DL, l7 = 1.428571428571428571428808945895490721564E-1DL, l8 = -1.249999999999999987884655626377588149000E-1DL, l9 = 1.111111111111111093947834982832456459186E-1DL, l10 = -1.000000000000532974938900317952530453248E-1DL, l11 = 9.090909090915566247008015301349979892689E-2DL, l12 = -8.333333211818065121250921925397567745734E-2DL, l13 = 7.692307559897661630807048686258659316091E-2DL, l14 = -7.144242754190814657241902218399056829264E-2DL, l15 = 6.668057591071739754844678883223432347481E-2DL; /* 4 digits of precision (max exp has 4 digit) */ static _Decimal128 ln10a = 2.302DL; static _Decimal128 ln10b = 0.585092994045684017991454684364207601e-3DL; _Decimal128 __logd128 (_Decimal128 x) { _Decimal128 u, y, t, z, w; int e, m; if (__isnand128 (x)) return x + x; else if (x <= 0.0DL) { if (x == 0.0DL) { DFP_ERRNO (EDOM); return -DEC_INFINITY; } else { DFP_ERRNO (ERANGE); return DFP_NAN; } } else if (__isinfd128 (x)) return DEC_INFINITY; u = __frexpd128 (x, &e); /* u is .1 <= f < 1 */ /* Round to the nearest 3 digit number. RTN gives the closest. */ m = __quantized128 (u * 1000.0DL, 2.0e33DL - 0.01DL) - LNTVALS_START; /* Recenter the normalized value around .20 <= x < 1.20. This reduces the x s.t |x| < .0078125 to ensure the polynomial approx holds within sufficient error. It is about .005 for non-RTN, .0025 RTN against t = 0.20 */ if (m < LNTVALS_START) { e -= 1; u *= 10.0DL; /* TODO: incrementing the exponent could be faster. */ } /* Note, values can only be 100-999 after frexp */ t = lntvals[m].t; /* Avoid cancellation error when values close to 1. */ if (x >= 0.999DL && x <= 1.001DL) { if (x == 1.0DL) return 0.0DL; /* Avoid the table */ z = x - 1.0DL; m = 0; t = lntvals[m].t; } else { /* log(u) = log(u*t/u) = log(t) + log(u/t) where log(u/t) = log(1+z) where z = u/t - 1 = (u-t)/t. */ z = (u - t) / t; } w = z * z; y = ((((((((((((l15 * z + l14) * z + l13) * z + l12) * z + l11) * z + l10) * z + l9) * z + l8) * z + l7) * z + l6) * z + l5) * z + l4) * z + l3) * z * w; y -= 0.5DL * w; y += e * ln10b; y += z; y += lntvals[m].lnt; /* |e * ln10a| bounded to about 2.3 and 14000. Subtract from this to avoid error on small values e.g x < ln(10) */ if (e != 0) { y += t; y += e * ln10a - 1.0DL; } else { y += t - 1.0DL; } return y; } weak_alias (__logd128, logd128) libdfp-1.0.17/ieee754r/logd32.c000066400000000000000000000044361504475242000156410ustar00rootroot00000000000000/* Calculate the Natural Log of a given a _Decimal32 value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #include #include #define FUNCTION_NAME log #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN(&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsZero (&dn_x)) /* If x == 0: Pole Error */ { DFP_EXCEPT (FE_DIVBYZERO); return -DFP_HUGE_VAL; } if (decNumberIsNegative (&dn_x)) /* If x < 0,: Domain Error */ { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } if (decNumberIsInfinite (&dn_x)) return x; decContextDefault (&context, DEFAULT_CONTEXT); decNumberLn(&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x == DFP_CONSTANT(0.0)) DFP_ERRNO (ERANGE); if (x < DFP_CONSTANT(0.0)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/logd64.c000066400000000000000000000120671504475242000156450ustar00rootroot00000000000000/* Calculate the Natural Log of a given a _Decimal64 value Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 64 #endif #include #include #define FUNCTION_NAME log #include /* __LN2digits lookup table. */ extern _Decimal128 __LN_10; extern _Decimal128 __LN2digits []; /* Core implementation of logd64(x). Separate into exponent "e" and mantisa "x" , where log(10^e*x) == log(10^e) + log(x). Use frexpd64 to separate the exponent from the mantissa. Then separate the high order 2 digits "a" from the remaining digits of the mantisa. Use the high order digits for a table lookup (log(a) == __LN2digits[]) and then use the taylor series to compute: log(x) = log(a) + (((x -a)/a) - ((((x -a)/a)^2)/2) + ((((x -a)/a)^3)/3) - ((((x -a)/a)^4)/4) + ...) then final compute log (10*e * x) by the sum log(val) = (log(10) * exp ) + log(x); The real logd64 will need to add checks for NAN, INF, zero, one, and negative values of x. */ static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE val) { _Decimal64 result, top, fraction, a, x, tp; _Decimal64 t1, t2, t3, t4, t5, t6, t7, t8; _Decimal64 t9, t10, t11, t12, t13, t14, t15, t16; int exp; long tmp; if (__isnand64(val)) return val+val; if (val == DFP_CONSTANT(0.0)) { DFP_EXCEPT (FE_DIVBYZERO); return -DFP_HUGE_VAL; } if (val < DFP_CONSTANT(0.0)) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } if (__isinfd64(val)) return val; result = __frexpd64 (val, &exp); tmp = result * 100.0DD; top = tmp; top = top * 0.01DD; fraction = result - top; if (fraction != 0.00DD) { a = top; x = result; t1 = (x - a) / a; tp = t1 * t1; /* tp == ((x-a)/a)^2 */ t2 = tp / 2.0DD; /* t2 == (((x-a)/a)^2)/2 */ tp = tp * t1; /* tp == ((x-a)/a)^3 */ t3 = tp / 3.0DD; /* t3 == (((x-a)/a)^3)/3 */ tp = tp * t1; /* tp == ((x-a)/a)^4 */ t4 = tp / 4.0DD; /* t4 == (((x-a)/a)^4)/4 */ tp = tp * t1; /* tp == ((x-a)/a)^5 */ t5 = tp / 5.0DD; /* t5 == (((x-a)/a)^5)/5 */ tp = tp * t1; /* tp == ((x-a)/a)^6 */ t6 = tp / 6.0DD; /* t6 == (((x-a)/a)^6)/6 */ tp = tp * t1; /* tp == ((x-a)/a)^7 */ t7 = tp / 7.0DD; /* t7 == (((x-a)/a)^7)/7 */ tp = tp * t1; /* tp == ((x-a)/a)^8 */ t8 = tp / 8.0DD; /* t8 == (((x-a)/a)^8)/8 */ if ( t8 > 1.0E-16DD) { tp = tp * t1; /* tp == ((x-a)/a)^9 */ t9 = tp / 9.0DD; /* t9 == (((x-a)/a)^9)/9 */ tp = tp * t1; /* tp == ((x-a)/a)^10 */ t10 = tp / 10.0DD; /* t10 == (((x-a)/a)^10)/10 */ tp = tp * t1; /* tp == ((x-a)/a)^11 */ t11 = tp / 11.0DD; /* t12 == (((x-a)/a)^11)/11 */ tp = tp * t1; /* tp == ((x-a)/a)^12 */ t12 = tp / 12.0DD; /* t12 == (((x-a)/a)^11)/12 */ if (t12 > 1.0E-16DD) { tp = tp * t1; /* tp == ((x-a)/a)^13 */ t13 = tp / 13.0DD; /* t13 == (((x-a)/a)^13)/13 */ tp = tp * t1; /* tp == ((x-a)/a)^14 */ t14 = tp / 14.0DD; /* t14 == (((x-a)/a)^14)/14 */ tp = tp * t1; /* tp == ((x-a)/a)^15 */ t15 = tp / 15.0DD; /* t15 == (((x-a)/a)^15)/15 */ tp = tp * t1; /* tp == ((x-a)/a)^16 */ t16 = tp / 16.0DD; /* t16 == (((x-a)/a)^16)/16 */ tp = t15 - t16; tp = tp + (t13 - t14); tp = tp + (t11 - t12); } else { tp = t11 - t12; } tp = tp + (t9 - t10); tp = tp + (t7 - t8); } else tp = t7 - t8; /* now sum the terms from smallest to largest to avoid loss of percision */ tp = tp + (t5 - t6); tp = tp + (t3 - t4); tp = tp + (t1 - t2); if (exp!=0) result = (__LN_10 * exp) + __LN2digits[tmp] + tp; else result = __LN2digits[tmp] + tp; } else { if (exp!=0) result = (__LN_10 * exp) + __LN2digits[tmp]; else result = __LN2digits[tmp]; } return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x == DFP_CONSTANT(0.0)) DFP_ERRNO (ERANGE); if (x < DFP_CONSTANT(0.0)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/lrintd128.c000066400000000000000000000021331504475242000162660ustar00rootroot00000000000000/* Rounds to the nearest (long int) integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "lrintd32.c" libdfp-1.0.17/ieee754r/lrintd32.c000066400000000000000000000027611504475242000162070ustar00rootroot00000000000000/* Rounds to the nearest (long int) integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #define FUNCTION_NAME lrint #define __ROUND_RETURN_TYPE long int #define __MIN_VALUE LONG_MIN #define __MAX_VALUE LONG_MAX #include #define __ROUND_MODE __dn_getround() #define POSTFIX_CHECK \ do \ { \ if (x != result) \ { \ DFP_EXCEPT (FE_INEXACT); \ } \ } while (0) #include "llroundd32.c" libdfp-1.0.17/ieee754r/lrintd64.c000066400000000000000000000021311504475242000162030ustar00rootroot00000000000000/* Rounds to the nearest (long int) integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "lrintd32.c" libdfp-1.0.17/ieee754r/lroundd128.c000066400000000000000000000021611504475242000164420ustar00rootroot00000000000000/* Rounds to the nearest long int value, ignoring rounding mode. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "lroundd32.c" libdfp-1.0.17/ieee754r/lroundd32.c000066400000000000000000000025321504475242000163560ustar00rootroot00000000000000/* Rounds to the nearest long int value, ignoring rounding mode. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #define FUNCTION_NAME lround #define __ROUND_RETURN_TYPE long int #define __MIN_VALUE LONG_MIN #define __MAX_VALUE LONG_MAX //Implementation is done in llround #include "llroundd32.c" libdfp-1.0.17/ieee754r/lroundd64.c000066400000000000000000000021571504475242000163660ustar00rootroot00000000000000/* Rounds to the nearest long int value, ignoring rounding mode. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "lroundd32.c" libdfp-1.0.17/ieee754r/modfd128.c000066400000000000000000000021771504475242000160730ustar00rootroot00000000000000/* Breaks the argument into integral and fractional parts for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "modfd32.c" libdfp-1.0.17/ieee754r/modfd32.c000066400000000000000000000037461504475242000160100ustar00rootroot00000000000000/* Breaks the argument into integral and fractional parts for a _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #define FUNCTION_NAME modf #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE *y) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_y; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x)) { *y = x; return x+x; } if (decNumberIsInfinite (&dn_x)) return DFP_CONSTANT(0.0)/x; decContextDefault (&context, DEFAULT_CONTEXT); context.round = DEC_ROUND_DOWN; /* round towards zero */ decNumberToIntegralValue (&dn_result, &dn_x, &context); decNumberSubtract (&dn_y, &dn_x, &dn_result, &context); FUNC_CONVERT_FROM_DN (&dn_result, y, &context); FUNC_CONVERT_FROM_DN (&dn_y, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/modfd64.c000066400000000000000000000021741504475242000160070ustar00rootroot00000000000000/* Breaks the argument into integral and fractional parts for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "modfd32.c" libdfp-1.0.17/ieee754r/nand128.c000066400000000000000000000021521504475242000157130ustar00rootroot00000000000000/* Returns a representation of NaN in the _Decimal128 format Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "nand32.c" libdfp-1.0.17/ieee754r/nand32.c000066400000000000000000000034651504475242000156350ustar00rootroot00000000000000/* Returns a representation of NaN in the _Decimal32 format Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #define FUNCTION_NAME nan #include /* `unused' is a GCC extension to disable warnings on intentionally unused * parameters. */ DEC_TYPE INTERNAL_FUNCTION_NAME (const char *tagp __attribute__ ((unused))) { /* decContext context; decNumber dn_result; DEC_TYPE result; ___decContextDefault(&context, DEFAULT_CONTEXT); ___decNumberFromString(&dn_result, x, &context); dn_result.bits |= DECNAN; FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); */ return (DEC_TYPE)DEC_NAN; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/nand64.c000066400000000000000000000021471504475242000156360ustar00rootroot00000000000000/* Returns a representation of NaN in the _Decimal64 format Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "nand32.c" libdfp-1.0.17/ieee754r/nearbyintd128.c000066400000000000000000000021401504475242000171270ustar00rootroot00000000000000/* Round to nearest integer _Decimal128 form Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "nearbyintd32.c" libdfp-1.0.17/ieee754r/nearbyintd32.c000066400000000000000000000041021504475242000170410ustar00rootroot00000000000000/* Round to nearest integer _Decimal32 form Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #include #include #define FUNCTION_NAME nearbyint #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decNumber dn_x,dn_result; decContext context; DEC_TYPE result; FUNC_CONVERT_TO_DN (&x, &dn_x); decContextDefault (&context,DEFAULT_CONTEXT); if (decNumberIsNaN (&dn_x) || decNumberIsInfinite (&dn_x) || decNumberIsZero (&dn_x)) return x+x; context.round = __dn_getround(); decNumberToIntegralValue (&dn_result,&dn_x,&context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/nearbyintd64.c000066400000000000000000000021351504475242000170520ustar00rootroot00000000000000/* Round to nearest integer _Decimal64 form Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "nearbyintd32.c" libdfp-1.0.17/ieee754r/nextafterd128.c000066400000000000000000000022761504475242000171460ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #define SUBNORMAL_MIN DEC128_SUBNORMAL_MIN #define DEC_MAX DEC128_MAX #include "nextafterd32.c" libdfp-1.0.17/ieee754r/nextafterd32.c000066400000000000000000000054001504475242000170500ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define SUBNORMAL_MIN DEC32_SUBNORMAL_MIN # define DEC_MAX DEC32_MAX #endif #include #include #include #include #include #define FUNCTION_NAME nextafter #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE epsilon = SUBNORMAL_MIN; int nrm = FE_DEC_UPWARD; int orm; if (x == y) { /* Special case: (0,-0) = -0, (-0,0) = 0. */ if (x == 0) { int negx = FUNC_D(__signbit)(x); int negy = FUNC_D(__signbit)(y); if (!negx && negy) return -0.D; if (negx && !negy) return 0.D; } return x; } else if (x != x) return x; else if (y != y) return y; else if (x > y) { if (x == SUBNORMAL_MIN) /* Special case: this value always return 0. */ return 0.D; if (x == DEC_INFINITY) return DEC_MAX; epsilon = -epsilon; nrm = FE_DEC_DOWNWARD; } else { if (x == -SUBNORMAL_MIN) /* Special case: this value always return -0. */ return -0.D; if (x == -DEC_INFINITY) return -DEC_MAX; } /* Add or subtract the minimal amount, and round in direction of epsilon. */ orm = __fe_dec_getround (); __fe_dec_setround (nrm); epsilon += x; __fe_dec_setround (orm); return epsilon; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D (__isfinite) (z) && FUNC_D (__isfinite) (x)) DFP_ERRNO (ERANGE); /* TODO: Handle underflow here */ return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/nextafterd64.c000066400000000000000000000022731504475242000170620ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #define SUBNORMAL_MIN DEC64_SUBNORMAL_MIN #define DEC_MAX DEC64_MAX #include "nextafterd32.c" libdfp-1.0.17/ieee754r/nextdownd128.c000066400000000000000000000021511504475242000170040ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of negative infinity Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "nextdownd32.c" libdfp-1.0.17/ieee754r/nextdownd32.c000066400000000000000000000025661504475242000167300ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of negative infinity Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #define FUNCTION_NAME nextdown #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { return FUNC_D(__nextafter) (x, -1*DEC_INFINITY); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/nextdownd64.c000066400000000000000000000021471504475242000167300ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of negative infinity Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "nextdownd32.c" libdfp-1.0.17/ieee754r/nexttowardd128.c000066400000000000000000000022771504475242000173460ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define SUBNORMAL_MIN DEC128_SUBNORMAL_MIN #define DEC_MAX DEC128_MAX #include #include "nexttowardd32.c" libdfp-1.0.17/ieee754r/nexttowardd32.c000066400000000000000000000055101504475242000172510ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # include # define _DECIMAL_SIZE 32 # define SUBNORMAL_MIN DEC32_SUBNORMAL_MIN # define DEC_MAX DEC32_MAX #endif #include #include #include #include #include #define FUNCTION_NAME nexttoward #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, _Decimal128 y) { DEC_TYPE epsilon = SUBNORMAL_MIN; _Decimal128 x128 = x; int nrm = FE_DEC_UPWARD; int orm; if (x128 == y) { /* Special case: (0,-0) = -0, (-0,0) = 0. */ if (x128 == 0) { int negx = FUNC_D(__signbit)(x); int negy = FUNC_D(__signbit)(y); if (!negx && negy) return -0.D; if (negx && !negy) return 0.D; } return x; } else if (x != x) return x; else if (y != y) return y; else if (x128 > y) { if (x == SUBNORMAL_MIN) /* Special case: this value always return 0. */ return 0.D; if (x == DEC_INFINITY) return DEC_MAX; epsilon = -epsilon; nrm = FE_DEC_DOWNWARD; } else { if (x == -SUBNORMAL_MIN) /* Special case: this value always return -0. */ return -0.D; if (x == -DEC_INFINITY) return -DEC_MAX; } /* Add or subtract the minimal amount for type of x, and round in direction of epsilon. */ orm = __fe_dec_getround (); __fe_dec_setround (nrm); epsilon += x; __fe_dec_setround (orm); return epsilon; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, _Decimal128 y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); /* TODO: Handle underflow */ return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/nexttowardd64.c000066400000000000000000000023231504475242000172550ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define SUBNORMAL_MIN DEC64_SUBNORMAL_MIN #define DEC_MAX DEC64_MAX #include #include #include "nexttowardd32.c" libdfp-1.0.17/ieee754r/nextupd128.c000066400000000000000000000021431504475242000164620ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of plus infinity Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "nextupd32.c" libdfp-1.0.17/ieee754r/nextupd32.c000066400000000000000000000025551504475242000164030ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of plus infinity Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #define FUNCTION_NAME nextup #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { return FUNC_D(__nextafter) (x, DEC_INFINITY); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/nextupd64.c000066400000000000000000000021411504475242000163770ustar00rootroot00000000000000/* Returns the next representable neighbor of x in the direction of plus infinity Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pedro Caldeira The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "nextupd32.c" libdfp-1.0.17/ieee754r/powd128.c000066400000000000000000000115671504475242000157560ustar00rootroot00000000000000/* Calculate x^y, where x and y are _Decimal128 types Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 128 # include #endif #include #include #include #include #include #include #define FUNCTION_NAME pow #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; decNumber dn_result; DEC_TYPE result; DEC_TYPE absx; decNumber dn_x; decNumber dn_absx; decNumber dn_y; decNumber dn_one; decNumber dn_two; decNumber dn_temp; decNumber dn_temp2; decNumber dn_temp3; int y_is_int; int y_is_oddint=0; int abs_x_vs_1; DEC_TYPE one = DFP_CONSTANT(1.0); DEC_TYPE two = DFP_CONSTANT(2.0); FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); FUNC_CONVERT_TO_DN (&one, &dn_one); decContextDefault (&context, DEFAULT_CONTEXT); if (decNumberIsZero (&dn_y)) return one; if (decNumberIsNaN (&dn_x)) return x+x; decNumberAbs (&dn_absx, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_absx, &absx, &context); if(absx Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include extern _Decimal64 __powd64(_Decimal64, _Decimal64); _Decimal32 __powd32 (_Decimal32 x, _Decimal32 y) { return (_Decimal32) __powd64((_Decimal64) x, (_Decimal64) y); } weak_alias(__powd32, powd32) libdfp-1.0.17/ieee754r/powd64.c000066400000000000000000000117741504475242000156750ustar00rootroot00000000000000/* Decimal Floating Point 64-bit x^y. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #if defined(_DECIMAL_SIZE) && _DECIMAL_SIZE != 64 #error "This implementation only works for _Decimal64" #endif #define _DECIMAL_SIZE 64 #define FUNCTION_NAME pow #include #include #include #include #include #include /* The actual value is 9223372036854775807, this needs to round down for exact conversion. */ #define D64_INT64_MAX 9223372036854775000.DD /* Compute integer powers with higher precision to minimize rounding error. */ static _Decimal128 intpow (_Decimal128 val, uint64_t exp) { _Decimal128 result = 1; _Decimal128 p = val; for ( ; exp; exp >>= 1, p*=p) if (exp&1) result *= p; return result; } /* Only for _Decimal64 and smaller today. */ static bool isodd (_Decimal64 y) { unsigned long int y_abs_int = __fabsd64 (y); return __rintd64 (y) == y && __fabsd64 (y) <= 9999999999999999.DD && (y_abs_int & 1) == 1; } static _Decimal64 IEEE_FUNCTION_NAME (_Decimal64 x, _Decimal64 y) { _Decimal128 result = DEC_NAN; _Decimal64 y_int; _Decimal64 y_frac; /* For any y, including a NaN. */ if (x == 1.DD) return x; int x_class = __fpclassifyd64 (x); int y_class = __fpclassifyd64 (y); if (!(x_class == FP_NORMAL && y_class == FP_NORMAL)) { if (y_class == FP_SUBNORMAL && y_class == FP_SUBNORMAL) { /* Handle normally */ } else if (y_class == FP_NAN || x_class == FP_NAN) { return y_class == FP_ZERO ? 1.DD : x + y; } else if (y_class == FP_ZERO) { return x_class == FP_NAN ? x : 1.DD; } else if (x_class == FP_ZERO) { if (y_class == FP_INFINITE) return y < 0.DD ? DEC_INFINITY : 0.DD; if (isodd(y)) return y < 0.DD ? DEC_INFINITY : __copysignd64(0.DD, x); return y < 0.DD ? DEC_INFINITY : 0.DD; } else if (y_class == FP_INFINITE) { if (x == -1.DD) return 1.DD; else if (x < -1.DD || x > 1.DD) return y > 0.DD ? DEC_INFINITY : 0.DD; else return y > 0.DD ? 0.DD : DEC_INFINITY; } else if (x_class == FP_INFINITE) { if (x > 0.DD) return y < 0.DD ? 0.DD : DEC_INFINITY; /* If x is -INF, the result is determined by the sign of y and whether y is an odd integer. */ if (isodd(y)) return y < 0.DD ? -0.DD : x; return y < 0.DD ? 0.DD : -x; } else { /* This should be reachable. */ return DEC_NAN; } } /* x and y are non-zero, finite, and not one. Split y into integer and fraction and use the identity: x ^ (m+n) == ( x^m ) * (x^n) */ y_int = __rintd64 (y); result = 1.DL; /* Compute x^(int(y)) first, if abs(int(y)) fits inside a long int. */ if (__fabsd64 (y_int) <= D64_INT64_MAX) { int64_t int_y = y_int; /* convert to int */ if (int_y == 0) { /* Do nothing. result is already 1. */ } else if (int_y > 0) { result = intpow (x, int_y); } else { result = 1.DL / intpow (x, -int_y); } } else { /* TODO: the following will likely be inaccurate, but hopefully not blatantly wrong. Fixing this requires a better implementation. */ y_int = 0.DD; } y_frac = y - y_int; /* Compute exp(ln(x)*y_frac) and combine with integral power with the highest available precision. */ if (y_frac != 0.DD) { /* If x is negative, log_x should propogate a NaN upwards. */ _Decimal128 log_x = __logd128 (x); result = result * __expd128 ((_Decimal128)y_frac * log_x); } return result; } _Decimal64 INTERNAL_FUNCTION_NAME (_Decimal64 x, _Decimal64 y) { _Decimal64 z = IEEE_FUNCTION_NAME (x, y); /* Pole error: x = 0, y < 0 (non-inf). Set ERANGE in accordance with C99 */ if (x == 0.DD && __isfinited64 (y) && y < 0.DD) DFP_ERRNO (ERANGE); if (!__isfinited64 (z) && __isfinited64 (x) && __isfinited64 (y)) { if (__isnand64 (z)) /* Domain error was triggered, x < 0 and y was not an odd int */ DFP_ERRNO (EDOM); else /* Overflow */ DFP_ERRNO (ERANGE); } return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/quantized128.c000066400000000000000000000021761504475242000170050ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "quantized32.c" libdfp-1.0.17/ieee754r/quantized32.c000066400000000000000000000036451504475242000167210ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #include #include #include #define FUNCTION_NAME quantize #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_y; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); decContextDefault(&context, DEFAULT_CONTEXT); context.round = __dn_getround(); decNumberQuantize(&dn_result, &dn_x, &dn_y, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); return result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/quantized64.c000066400000000000000000000021741504475242000167220ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "quantized32.c" libdfp-1.0.17/ieee754r/quantumd128.c000066400000000000000000000034151504475242000166340ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #include #define _DECIMAL_SIZE 128 #include _Decimal128 __quantumd128 (_Decimal128 x) { decNumber dn_x; decNumber dn_result; decContext context; _Decimal128 result; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)) return x; if (decNumberIsInfinite (&dn_x)) return DEC_INFINITY; /* The quantum of a finite number is defined as 1 x 10^exponent, so first get input absolute value and then sets its coefficient to 1. */ decContextDefault (&context, DEFAULT_CONTEXT); decNumberAbs (&dn_result, &dn_x, &context); dn_result.digits = 1; dn_result.lsu[0] = 1; FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (__quantumd128, quantumd128) libdfp-1.0.17/ieee754r/quantumd32.c000066400000000000000000000034051504475242000165450ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #include #define _DECIMAL_SIZE 32 #include _Decimal32 __quantumd32 (_Decimal32 x) { decNumber dn_x; decNumber dn_result; decContext context; _Decimal32 result; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)) return x; if (decNumberIsInfinite (&dn_x)) return DEC_INFINITY; /* The quantum of a finite number is defined as 1 x 10^exponent, so first get input absolute value and then sets its coefficient to 1. */ decContextDefault (&context, DEFAULT_CONTEXT); decNumberAbs (&dn_result, &dn_x, &context); dn_result.digits = 1; dn_result.lsu[0] = 1; FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (__quantumd32, quantumd32) libdfp-1.0.17/ieee754r/quantumd64.c000066400000000000000000000034051504475242000165520ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #include #define _DECIMAL_SIZE 64 #include _Decimal64 __quantumd64 (_Decimal64 x) { decNumber dn_x; decNumber dn_result; decContext context; _Decimal64 result; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)) return x; if (decNumberIsInfinite (&dn_x)) return DEC_INFINITY; /* The quantum of a finite number is defined as 1 x 10^exponent, so first get input absolute value and then sets its coefficient to 1. */ decContextDefault (&context, DEFAULT_CONTEXT); decNumberAbs (&dn_result, &dn_x, &context); dn_result.digits = 1; dn_result.lsu[0] = 1; FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (__quantumd64, quantumd64) libdfp-1.0.17/ieee754r/remainderd128.c000066400000000000000000000021541504475242000171070ustar00rootroot00000000000000/* Returns the result of x - ((int-round_even)(x/y)) * y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "remainderd32.c" libdfp-1.0.17/ieee754r/remainderd32.c000066400000000000000000000047541504475242000170310ustar00rootroot00000000000000/* Returns the result of x - ((int-round_even)(x/y)) * y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME remainder #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; decNumber dn_y; decNumber dn_mult; decNumber dn_rounded; FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); if (decNumberIsNaN (&dn_x) || decNumberIsNaN (&dn_y)) return x+y; /* Domain Error: x = +-Inf, or y = +-0 and x is non-NaN */ if (decNumberIsInfinite (&dn_x) || decNumberIsZero (&dn_y)) { DFP_EXCEPT (FE_INVALID); return (x - x) / (x - x); } decContextDefault (&context, DEFAULT_CONTEXT); decNumberDivide (&dn_mult, &dn_x, &dn_y, &context); context.round = DEC_ROUND_HALF_EVEN; decNumberToIntegralValue (&dn_rounded, &dn_mult, &context); decNumberMultiply (&dn_mult, &dn_rounded, &dn_y, &context); decNumberSubtract (&dn_result, &dn_x, &dn_mult, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isinf) (x) || (!FUNC_D(__isnan) (x) && y == DFP_CONSTANT(0.0))) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/remainderd64.c000066400000000000000000000021521504475242000170240ustar00rootroot00000000000000/* Returns the result of x - ((int-round_even)(x/y)) * y Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "remainderd32.c" libdfp-1.0.17/ieee754r/rintd128.c000066400000000000000000000021171504475242000161140ustar00rootroot00000000000000/* Rounds to the nearest integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "rintd32.c" libdfp-1.0.17/ieee754r/rintd32.c000066400000000000000000000025331504475242000160300ustar00rootroot00000000000000/* Rounds to the nearest integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #define FUNCTION_NAME rint #include #define __ROUND_MODE __dn_getround() #define POSTFIX_CHECK() \ do { \ if (x != result) \ { \ DFP_EXCEPT (FE_INEXACT); \ } \ } while (0) #include "roundd32.c" libdfp-1.0.17/ieee754r/rintd64.c000066400000000000000000000021151504475242000160310ustar00rootroot00000000000000/* Rounds to the nearest integer Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "rintd32.c" libdfp-1.0.17/ieee754r/roundd128.c000066400000000000000000000021551504475242000162710ustar00rootroot00000000000000/* Rounds to the nearest integer value, ignores rounding mode Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "roundd32.c" libdfp-1.0.17/ieee754r/roundd32.c000066400000000000000000000042401504475242000162000ustar00rootroot00000000000000/* Rounds to the nearest integer value, ignores rounding mode Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME round # define __ROUND_MODE DEC_ROUND_HALF_UP #endif #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsInfinite (&dn_x) || decNumberIsZero (&dn_x)) return x+x; decContextDefault (&context, DEFAULT_CONTEXT); context.round = __ROUND_MODE; decNumberToIntegralValue (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); #ifdef POSTFIX_CHECK POSTFIX_CHECK (); #endif return result; } /* Regarding errno's: * Although they are specified in the relevent specs, Overflow errors cannot * actually occur with dfp types, therefore no errno wrappers are provided */ weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/roundd64.c000066400000000000000000000021531504475242000162060ustar00rootroot00000000000000/* Rounds to the nearest integer value, ignores rounding mode Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "roundd32.c" libdfp-1.0.17/ieee754r/roundevend128.c000066400000000000000000000020671504475242000171510ustar00rootroot00000000000000/* Round a _Decimal128 type to the nearest integer value, rounding halfway cases to even. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "roundevend32.c" libdfp-1.0.17/ieee754r/roundevend32.c000066400000000000000000000033371504475242000170640ustar00rootroot00000000000000/* Round a _Decimal32 type to the nearest integer value, rounding halfway cases to even. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #define FUNCTION_NAME roundeven #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); decContextDefault (&context, DEFAULT_CONTEXT); decContextDefault (&context, DEFAULT_CONTEXT); context.round = DEC_ROUND_HALF_EVEN; decNumberToIntegralValue (&dn_result, &dn_x, &context); decNumberToIntegralValue (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/roundevend64.c000066400000000000000000000020641504475242000170650ustar00rootroot00000000000000/* Round a _Decimal64 type to the nearest integer value, rounding halfway cases to even. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "roundevend32.c" libdfp-1.0.17/ieee754r/samequantumd128.c000066400000000000000000000021471504475242000175030ustar00rootroot00000000000000/* Returns true if x and y have the same exponent Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "samequantumd32.c" libdfp-1.0.17/ieee754r/samequantumd32.c000066400000000000000000000034371504475242000174200ustar00rootroot00000000000000/* Returns true if x and y have the same exponent Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #define FUNCTION_NAME samequantum #include _Bool INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x; decNumber dn_y; FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) && decNumberIsNaN(&dn_y)) return true; if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return false; if(decNumberIsInfinite(&dn_x) && decNumberIsInfinite(&dn_y)) return true; if(decNumberIsInfinite(&dn_x) || decNumberIsInfinite(&dn_y)) return false; return (dn_x.exponent == dn_y.exponent); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/samequantumd64.c000066400000000000000000000021451504475242000174200ustar00rootroot00000000000000/* Returns true if x and y have the same exponent Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "samequantumd32.c" libdfp-1.0.17/ieee754r/scalblnd128.c000066400000000000000000000021661504475242000165620ustar00rootroot00000000000000/* Returns x * FLT_RADIX^y without computing the right side directly Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "scalblnd32.c" libdfp-1.0.17/ieee754r/scalblnd32.c000066400000000000000000000051661504475242000164770ustar00rootroot00000000000000/* Returns x * FLT_RADIX^y without computing the right side directly Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME scalbln #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, long y) { decContext context; DEC_TYPE result; decNumber dn_x, dn_y; /* long long int sum=0LL; */ /* uint32_t temp2 = 0; */ /* Otherwise this may pass a bad residue to decFinalize which can result in * rounding error. */ /* int32_t temp = 0; */ FUNC_CONVERT_TO_DN(&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x) || decNumberIsZero (&dn_x) || y==0L) return x; decContextDefault(&context, DEFAULT_CONTEXT); // sum = dn_x.exponent + y; // if(sum >= 1000000000LL || sum <= -2000000000LL // || y >= 1000000000L || y <= -2000000000L) // ; /** definite overflow */ // else // dn_x.exponent = sum; // // decFinalize(&dn_x, &context, &temp, &temp2); if (y >= 1000000000L || y <= -2000000000L) context.status |= DEC_Overflow; else { decNumberFromInt32(&dn_y, (int)y); decNumberScaleB(&dn_x, &dn_x, &dn_y, &context); } FUNC_CONVERT_FROM_DN(&dn_x, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, long y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/scalblnd64.c000066400000000000000000000021641504475242000164770ustar00rootroot00000000000000/* Returns x * FLT_RADIX^y without computing the right side directly Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "scalblnd32.c" libdfp-1.0.17/ieee754r/scalbnd128.c000066400000000000000000000021651504475242000164050ustar00rootroot00000000000000/* Returns x * FLT_RADIX^y without computing the right side directly Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "scalbnd32.c" libdfp-1.0.17/ieee754r/scalbnd32.c000066400000000000000000000047401504475242000163200ustar00rootroot00000000000000/* Returns x * FLT_RADIX^y without computing the right side directly Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME scalbn #include #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, int y) { decContext context; DEC_TYPE result; decNumber dn_x, dn_y; /* long int sum = 0L; */ /* uint32_t temp2 = 0; */ /* Otherwise this may pass a bad residue to decFinalize which can result in * rounding error. */ /* int32_t temp =0; */ FUNC_CONVERT_TO_DN(&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x) || decNumberIsZero (&dn_x) || y==0L) return x; decContextDefault(&context, DEFAULT_CONTEXT); // sum = dn_x.exponent + y; // if(sum >= 1000000000L || sum <= -2000000000LL) // ; /** definite overflow */ // else // dn_x.exponent = sum; // // decFinalize(&dn_x, &context, &temp, &temp2); decNumberFromInt32(&dn_y, y); decNumberScaleB(&dn_x, &dn_x, &dn_y, &context); FUNC_CONVERT_FROM_DN(&dn_x, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, int y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/scalbnd64.c000066400000000000000000000021631504475242000163220ustar00rootroot00000000000000/* Returns x * FLT_RADIX^y without computing the right side directly Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "scalbnd32.c" libdfp-1.0.17/ieee754r/signbitd128.c000066400000000000000000000021401504475242000165730ustar00rootroot00000000000000/* Returns non-zero if _Decimal128 is negative Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "signbitd32.c" libdfp-1.0.17/ieee754r/signbitd32.c000066400000000000000000000030501504475242000165060ustar00rootroot00000000000000/* Returns non-zero if _Decimal32 is negative Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #include #define FUNCTION_NAME signbit #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decNumber dn_x; FUNC_CONVERT_TO_DN(&x, &dn_x); return decNumberIsNegative(&dn_x); } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/signbitd64.c000066400000000000000000000021351504475242000165160ustar00rootroot00000000000000/* Returns non-zero if _Decimal64 is negative Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "signbitd32.c" libdfp-1.0.17/ieee754r/sind128.c000066400000000000000000000021401504475242000157250ustar00rootroot00000000000000/* Calculate the sin(x) for a _Decimal128 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "sind32.c" libdfp-1.0.17/ieee754r/sind32.c000066400000000000000000000037751504475242000156560ustar00rootroot00000000000000/* Calculate the sin(x) for a _Decimal32 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #include #define FUNCTION_NAME sin #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x)) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } decContextDefault (&context, DEFAULT_CONTEXT); decNumberSin (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (FUNC_D(__isinf) (x)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/sind64.c000066400000000000000000000021351504475242000156500ustar00rootroot00000000000000/* Calculate the sin(x) for a _Decimal64 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "sind32.c" libdfp-1.0.17/ieee754r/sinhd128.c000066400000000000000000000021541504475242000161020ustar00rootroot00000000000000/* Calculate the hyperbolic sin (sinh) for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "sinhd32.c" libdfp-1.0.17/ieee754r/sinhd32.c000066400000000000000000000042001504475242000160060ustar00rootroot00000000000000/* Calculate the hyperbolic sin (sinh) for a _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #include #define FUNCTION_NAME sinh #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x) || decNumberIsInfinite (&dn_x) ) return x+x; decContextDefault (&context, DEFAULT_CONTEXT); decNumberSinh (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) { DFP_ERRNO (ERANGE); return (z > DFP_CONSTANT(0.0) ? DFP_HUGE_VAL : -DFP_HUGE_VAL ); } return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/sinhd64.c000066400000000000000000000021511504475242000160160ustar00rootroot00000000000000/* Calculate the hyperbolic sin (sinh) for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "sinhd32.c" libdfp-1.0.17/ieee754r/sqrtd128.c000066400000000000000000000021501504475242000161260ustar00rootroot00000000000000/* Returns the square root of a _Decimal128 type argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "sqrtd32.c" libdfp-1.0.17/ieee754r/sqrtd32.c000066400000000000000000000040611504475242000160430ustar00rootroot00000000000000/* Returns the square root of a _Decimal32 type argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #define FUNCTION_NAME sqrt #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN(&x, &dn_x); if (decNumberIsNaN (&dn_x)) return x+x; if (decNumberIsZero (&dn_x)) return x; if (decNumberIsNegative (&dn_x)) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } if (decNumberIsInfinite (&dn_x)) return x; decContextDefault(&context, DEFAULT_CONTEXT); decNumberSquareRoot(&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (x < DFP_CONSTANT(0.0)) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/sqrtd64.c000066400000000000000000000021451504475242000160510ustar00rootroot00000000000000/* Returns the square root of a _Decimal64 type argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "sqrtd32.c" libdfp-1.0.17/ieee754r/t_expd128.h000066400000000000000000002540521504475242000162730ustar00rootroot00000000000000/* Generated table of exp(x) table values. See decexptables.c to understand how, or fix these values if such is neeeded. Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. This is adapted, derived, and in some spiritual form based on the version found in glibc's float128/ibm128 variant. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ static const struct { _Decimal128 hi; _Decimal128 lo; _Decimal128 out; } exptbl1[] = { /* -115*/ { -1.150000000000000025929395276898197DL, -1.631178252788966923612452239613374E-34DL, 0.31663676937905321DL}, /* -1.1500000000000000259293952768981971631178252788966923612452239613374 */ /* -114*/ { -1.140000000000000003690091417863443DL, -4.005738324545395227346263894610616E-34DL, 0.31981902181630389DL}, /* -1.1400000000000000036900914178634434005738324545395227346263894610616 */ /* -113*/ { -1.130000000000000013746527716130344DL, -3.817213937620391020932490213163613E-34DL, 0.32303325642225293DL}, /* -1.1300000000000000137465277161303443817213937620391020932490213163613 */ /* -112*/ { -1.120000000000000002030572639375420DL, 1.004037183332575827294383822500818E-34DL, 0.32627979462303948DL}, /* -1.1200000000000000020305726393754198995962816667424172705616177499182 */ /* -111*/ { -1.110000000000000018265212586474885DL, 4.504544827816227830204569174087079E-34DL, 0.32955896107518906DL}, /* -1.1100000000000000182652125864748845495455172183772169795430825912921 */ /* -110*/ { -1.100000000000000009880242134262292DL, 6.52322169518478402408032789476881E-35DL, 0.33287108369807955DL}, /* -1.1000000000000000098802421342622919347677830481521597591967210523119 */ /* -109*/ { -1.090000000000000008641777560821863DL, 6.39590808108476942184950429716320E-35DL, 0.33621649370673334DL}, /* -1.0900000000000000086417775608218629360409191891523057815049570283680 */ /* -108*/ { -1.080000000000000003578110203130581DL, -6.07116735490600918432822745139808E-35DL, 0.33959552564493915DL}, /* -1.0800000000000000035781102031305810607116735490600918432822745139808 */ /* -107*/ { -1.070000000000000023711380552893507DL, 2.170347655948701655822647069424509E-34DL, 0.34300851741870666DL}, /* -1.0700000000000000237113805528935067829652344051298344177352930575491 */ /* -106*/ { -1.060000000000000028007924990046802DL, 1.896644568299061348494572871321041E-34DL, 0.34645581033005743DL}, /* -1.0600000000000000280079249900468018103355431700938651505427128678959 */ /* -105*/ { -1.050000000000000013350371274443016DL, -4.853068849051848747170167786680317E-34DL, 0.34993774911115535DL}, /* -1.0500000000000000133503712744430164853068849051848747170167786680317 */ /* -104*/ { -1.040000000000000023065356554704527DL, -3.782006658568085913334416267296502E-34DL, 0.35345468195878014DL}, /* -1.0400000000000000230653565547045273782006658568085913334416267296502 */ /* -103*/ { -1.030000000000000027359216190294787DL, 4.996476240271316359730670611824607E-34DL, 0.35700696056914736DL}, /* -1.0300000000000000273592161902947865003523759728683640269329388175393 */ /* -102*/ { -1.020000000000000022965773259822058DL, 2.057321693732806264971899487769904E-34DL, 0.36059494017307829DL}, /* -1.0200000000000000229657732598220577942678306267193735028100512230096 */ /* -101*/ { -1.010000000000000026788956212868941DL, -2.219823572624973992837661168526449E-34DL, 0.36421897957152331DL}, /* -1.0100000000000000267889562128689412219823572624973992837661168526449 */ /* -100*/ { -1.000000000000000004337083271304365DL, -2.959129118397923743514075830096060E-34DL, 0.36787944117144232DL}, /* -1.0000000000000000043370832713043652959129118397923743514075830096060 */ /* -99*/ { -0.9900000000000000014304560343820544DL, 2.015395147562517982584427471781273E-35DL, 0.37157669102204569DL}, /* -0.99000000000000000143045603438205437984604852437482017415572528218727 */ /* -98*/ { -0.9800000000000000232187837214156324DL, -2.788328666162741608693864188509849E-35DL, 0.37531109885139953DL}, /* -0.98000000000000002321878372141563242788328666162741608693864188509849 */ /* -97*/ { -0.9700000000000000222283924121181217DL, 2.60823025215148520947443726533572E-36DL, 0.37908303810339881DL}, /* -0.97000000000000002222839241211812169739176974784851479052556273466428 */ /* -96*/ { -0.9600000000000000072697625490367156DL, 1.190482751035209593392738058147621E-35DL, 0.38289288597511202DL}, /* -0.96000000000000000726976254903671558809517248964790406607261941852379 */ /* -95*/ { -0.9500000000000000178813763077542779DL, -2.929547446774495279380800045637966E-35DL, 0.38674102345450120DL}, /* -0.95000000000000001788137630775427792929547446774495279380800045637966 */ /* -94*/ { -0.9400000000000000042564763373701189DL, -7.3009526470411793935067954914541E-37DL, 0.39062783535852110DL}, /* -0.94000000000000000425647633737011890073009526470411793935067954914541 */ /* -93*/ { -0.9300000000000000246644740992793798DL, 5.84447942174861236678357091100829E-36DL, 0.39455371037160112DL}, /* -0.93000000000000002466447409927937979415552057825138763321642908899171 */ /* -92*/ { -0.9200000000000000063753074555491881DL, 1.029721621108536490992157379131912E-35DL, 0.39851904108451417DL}, /* -0.92000000000000000637530745554918808970278378891463509007842620868088 */ /* -91*/ { -0.9100000000000000116023627551977526DL, 4.607076398148452154063612933475211E-35DL, 0.40252422403363597DL}, /* -0.91000000000000001160236275519775255392923601851547845936387066524789 */ /* -90*/ { -0.9000000000000000046325499075541287DL, -3.764378830435444963767220204076549E-35DL, 0.40656965974059911DL}, /* -0.90000000000000000463254990755412873764378830435444963767220204076549 */ /* -89*/ { -0.8900000000000000198557549997541326DL, -3.558316132624823377206724155498325E-35DL, 0.41065575275234548DL}, /* -0.89000000000000001985575499975413263558316132624823377206724155498325 */ /* -88*/ { -0.8800000000000000168261601935447973DL, -3.07828266590652746410729156431687E-36DL, 0.41478291168158136DL}, /* -0.88000000000000001682616019354479730307828266590652746410729156431687 */ /* -87*/ { -0.8700000000000000060134764463451961DL, -1.062024505340556209395454238907581E-35DL, 0.41895154924763898DL}, /* -0.87000000000000000601347644634519611062024505340556209395454238907581 */ /* -86*/ { -0.8600000000000000159604080803129187DL, 1.906280774879003300804802968665121E-35DL, 0.42316208231774881DL}, /* -0.86000000000000001596040808031291868093719225120996699195197031334879 */ /* -85*/ { -0.8500000000000000232103515802448746DL, 3.401553151671943208704633818033125E-35DL, 0.42741493194872666DL}, /* -0.85000000000000002321035158024487456598446848328056791295366181966875 */ /* -84*/ { -0.8400000000000000068961636248668966DL, -4.996342543506936360879788793077432E-35DL, 0.43171052342907969DL}, /* -0.84000000000000000689616362486689664996342543506936360879788793077432 */ /* -83*/ { -0.8300000000000000062502398019297108DL, 1.902212443023736128055721626350174E-35DL, 0.43604928632153559DL}, /* -0.83000000000000000625023980192971078097787556976263871944278373649826 */ /* -82*/ { -0.8200000000000000057922225828700798DL, 4.402617377257060165575989788202151E-35DL, 0.44043165450599926DL}, /* -0.82000000000000000579222258287007975597382622742939834424010211797849 */ /* -81*/ { -0.8100000000000000100738769944207711DL, -2.896646684559549347884389302728737E-35DL, 0.44485806622294113DL}, /* -0.81000000000000001007387699442077112896646684559549347884389302728737 */ /* -80*/ { -0.8000000000000000031827513897868280DL, -2.022275827062475024777157768355787E-35DL, 0.44932896411722159DL}, /* -0.80000000000000000318275138978682802022275827062475024777157768355787 */ /* -79*/ { -0.7900000000000000046429101081142434DL, 3.109708904498090242282849092096451E-35DL, 0.45384479528235582DL}, /* -0.79000000000000000464291010811424336890291095501909757717150907903549 */ /* -78*/ { -0.7800000000000000111632425052370337DL, -4.423563806505859610180552563781712E-35DL, 0.45840601130522354DL}, /* -0.78000000000000001116324250523703374423563806505859610180552563781712 */ /* -77*/ { -0.7700000000000000070306243415634389DL, 1.468127806459499120392332341448067E-35DL, 0.46301306831122807DL}, /* -0.77000000000000000703062434156343888531872193540500879607667658551933 */ /* -76*/ { -0.7600000000000000084311561775911594DL, 3.763259426859501796493362394516058E-35DL, 0.46766642700990923DL}, /* -0.76000000000000000843115617759115936236740573140498203506637605483942 */ /* -75*/ { -0.7500000000000000151112446669289434DL, -5.68565219334019879575699707064207E-36DL, 0.47236655274101470DL}, /* -0.75000000000000001511124466692894340568565219334019879575699707064207 */ /* -74*/ { -0.7400000000000000165292602338424848DL, -6.56597357922996879238116554976345E-36DL, 0.47711391552103438DL}, /* -0.74000000000000001652926023384248480656597357922996879238116554976345 */ /* -73*/ { -0.7300000000000000145112106236453536DL, 2.839976916614712339325382080623104E-35DL, 0.48190899009020242DL}, /* -0.73000000000000001451121062364535357160023083385287660674617919376896 */ /* -72*/ { -0.7200000000000000001153926814059806DL, 4.182220124021585838899624235533900E-35DL, 0.48675225595997165DL}, /* -0.72000000000000000011539268140598055817779875978414161100375764466100 */ /* -71*/ { -0.7100000000000000047654695146388903DL, 1.241722530055559884779152447608094E-35DL, 0.49164419746096510DL}, /* -0.71000000000000000476546951463889028758277469944440115220847552391906 */ /* -70*/ { -0.7000000000000000094743039261866248DL, -1.51145605812277482325845205506660E-36DL, 0.49658530379140951DL}, /* -0.70000000000000000947430392618662480151145605812277482325845205506660 */ /* -69*/ { -0.6900000000000000078095459530132748DL, 4.205712885544979803865524341193840E-35DL, 0.50157606906605553DL}, /* -0.69000000000000000780954595301327475794287114455020196134475658806160 */ /* -68*/ { -0.6800000000000000187659459769299573DL, 2.654807970471794312188822946593776E-35DL, 0.50661699236558960DL}, /* -0.68000000000000001876594597692995727345192029528205687811177053406224 */ /* -67*/ { -0.6700000000000000162229535139215082DL, -4.844940576250191795973797110414045E-35DL, 0.51170857778654247DL}, /* -0.67000000000000001622295351392150824844940576250191795973797110414045 */ /* -66*/ { -0.6600000000000000146674769174142831DL, 2.800500623512289599069475065282629E-35DL, 0.51685133449169923DL}, /* -0.66000000000000001466747691741428307199499376487710400930524934717371 */ /* -65*/ { -0.6500000000000000151224442158888976DL, 9.31254000466666011358498673716800E-36DL, 0.52204577676101604DL}, /* -0.65000000000000001512244421588889759068745999533333988641501326283200 */ /* -64*/ { -0.6400000000000000137375283206703796DL, 1.202749340483432949005267457757852E-35DL, 0.52729242404304855DL}, /* -0.64000000000000001373752832067037958797250659516567050994732542242148 */ /* -63*/ { -0.6300000000000000178776804308684260DL, -4.46776391332198478139054511242677E-36DL, 0.53259180100689718DL}, /* -0.63000000000000001787768043086842600446776391332198478139054511242677 */ /* -62*/ { -0.6200000000000000033119811949766168DL, 3.133489251733464823466919699877129E-35DL, 0.53794443759467449DL}, /* -0.62000000000000000331198119497661676866510748266535176533080300122871 */ /* -61*/ { -0.6100000000000000130903703162041874DL, 2.282442893704041637074878132823554E-35DL, 0.54335086907449978DL}, /* -0.61000000000000001309037031620418737717557106295958362925121867176446 */ /* -60*/ { -0.6000000000000000047893644091435427DL, -6.65857653915735882573272028518870E-36DL, 0.54881163609402643DL}, /* -0.60000000000000000478936440914354270665857653915735882573272028518870 */ /* -59*/ { -0.5900000000000000096429696157587440DL, 3.079273971268332699701668518916040E-35DL, 0.55432728473450703DL}, /* -0.59000000000000000964296961575874396920726028731667300298331481083960 */ /* -58*/ { -0.5800000000000000044864986573941783DL, 9.94558061878269558266329709612164E-36DL, 0.55989836656540203DL}, /* -0.58000000000000000448649865739417829005441938121730441733670290387836 */ /* -57*/ { -0.5700000000000000129007624382764139DL, 4.586845971428207520030184076635003E-35DL, 0.56552543869953709DL}, /* -0.57000000000000001290076243827641385413154028571792479969815923364997 */ /* -56*/ { -0.5600000000000000098252073050379834DL, 1.043626666861934897796057249219387E-35DL, 0.57120906384881488DL}, /* -0.56000000000000000982520730503798338956373333138065102203942750780613 */ /* -55*/ { -0.5500000000000000092198140447841667DL, 4.11200437372352380013088762974227E-36DL, 0.57694981038048669DL}, /* -0.55000000000000000921981404478416669588799562627647619986911237025773 */ /* -54*/ { -0.5400000000000000085588484984024173DL, -3.446183477171773241239920036965358E-35DL, 0.58274825237398966DL}, /* -0.54000000000000000855884849840241733446183477171773241239920036965358 */ /* -53*/ { -0.5300000000000000102198666513110409DL, 9.77781100936281627469711630292088E-36DL, 0.58860496967835519DL}, /* -0.53000000000000001021986665131104089022218899063718372530288369707912 */ /* -52*/ { -0.5200000000000000151016307779306470DL, 3.481509025880925033445695881635641E-35DL, 0.59452054797019433DL}, /* -0.52000000000000001510163077793064696518490974119074966554304118364359 */ /* -51*/ { -0.5100000000000000046611012286479418DL, 4.219616588572582334170357681737600E-35DL, 0.60049557881226594DL}, /* -0.51000000000000000466110122864794175780383411427417665829642318262400 */ /* -50*/ { -0.5000000000000000059416609486791900DL, 1.630299283417957604033567034911433E-35DL, 0.60653065971263342DL}, /* -0.50000000000000000594166094867918998369700716582042395966432965088567 */ /* -49*/ { -0.4900000000000000146722048761634920DL, 2.108568826391117233833424751345792E-35DL, 0.61262639418441606DL}, /* -0.49000000000000001467220487616349197891431173608882766166575248654208 */ /* -48*/ { -0.4800000000000000046493846231282029DL, -2.301719248027444802075930304571102E-35DL, 0.61878339180614085DL}, /* -0.48000000000000000464938462312820292301719248027444802075930304571102 */ /* -47*/ { -0.4700000000000000099224815278975110DL, -4.362692408019101189863060142190428E-35DL, 0.62500226828270079DL}, /* -0.47000000000000000992248152789751104362692408019101189863060142190428 */ /* -46*/ { -0.4600000000000000147243392096711187DL, 2.964796216254485657704165676513443E-35DL, 0.63128364550692596DL}, /* -0.46000000000000001472433920967111867035203783745514342295834323486557 */ /* -45*/ { -0.4500000000000000049303711423598200DL, 2.014144374194723075102498568052000E-35DL, 0.63762815162177329DL}, /* -0.45000000000000000493037114235981997985855625805276924897501431948000 */ /* -44*/ { -0.4400000000000000132479837330620542DL, 9.09646530167314409242139492228246E-36DL, 0.64403642108314135DL}, /* -0.44000000000000001324798373306205419090353469832685590757860507771754 */ /* -43*/ { -0.4300000000000000071006163264366420DL, -4.751105355975183554395070818087605E-35DL, 0.65050909472331654DL}, /* -0.43000000000000000710061632643664204751105355975183554395070818087605 */ /* -42*/ { -0.4200000000000000024392076394054798DL, -7.87251489855629853146771247089974E-36DL, 0.65704681981505678DL}, /* -0.42000000000000000243920763940547980787251489855629853146771247089974 */ /* -41*/ { -0.4100000000000000089058258270839333DL, -3.389946313745578848876784237580113E-35DL, 0.66365025013631936DL}, /* -0.41000000000000000890582582708393333389946313745578848876784237580113 */ /* -40*/ { -0.4000000000000000011105634234728620DL, -4.910159372413460909659463763913372E-35DL, 0.67032004603563930DL}, /* -0.40000000000000000111056342347286204910159372413460909659463763913372 */ /* -39*/ { -0.3900000000000000145852922539363195DL, -1.136728400089548202462305173331512E-35DL, 0.67705687449816469DL}, /* -0.39000000000000001458529225393631951136728400089548202462305173331512 */ /* -38*/ { -0.3800000000000000120995304820839371DL, 2.835846229982982585197079034190416E-35DL, 0.68386140921235585DL}, /* -0.38000000000000001209953048208393707164153770017017414802920965809584 */ /* -37*/ { -0.3700000000000000138330173272594016DL, 4.439933587270775130420492650134835E-35DL, 0.69073433063735465DL}, /* -0.37000000000000001383301732725940155560066412729224869579507349865165 */ /* -36*/ { -0.3600000000000000103330570272269671DL, -4.038813821891508925598059913674907E-35DL, 0.69767632607103105DL}, /* -0.36000000000000001033305702722696714038813821891508925598059913674907 */ /* -35*/ { -0.3500000000000000061797847339369236DL, -4.784534107549280647193338986605337E-35DL, 0.70468808971871343DL}, /* -0.35000000000000000617978473393692364784534107549280647193338986605337 */ /* -34*/ { -0.3400000000000000071370684451130993DL, -6.54671601977071209072360941094523E-36DL, 0.71177032276260971DL}, /* -0.34000000000000000713706844511309930654671601977071209072360941094523 */ /* -33*/ { -0.3300000000000000132912825544035403DL, -2.636860460148353432403822564175908E-35DL, 0.71892373343192616DL}, /* -0.33000000000000001329128255440354032636860460148353432403822564175908 */ /* -32*/ { -0.3200000000000000066860207499399053DL, 4.05694078364900742628802132970359E-36DL, 0.72614903707369092DL}, /* -0.32000000000000000668602074993990529594305921635099257371197867029641 */ /* -31*/ { -0.3100000000000000053075844548532029DL, -1.591672143094653110259347299741918E-35DL, 0.73344695622428926DL}, /* -0.31000000000000000530758445485320291591672143094653110259347299741918 */ /* -30*/ { -0.3000000000000000081894230054640677DL, -1.882638203745795023883601216794926E-35DL, 0.74081822068171786DL}, /* -0.30000000000000000818942300546406771882638203745795023883601216794926 */ /* -29*/ { -0.2900000000000000068082333177873105DL, 2.841393194468598049930021575411088E-35DL, 0.74826356757856521DL}, /* -0.29000000000000000680823331778731047158606805531401950069978424588912 */ /* -28*/ { -0.2800000000000000028303080495938733DL, 3.108220470061523055592230557584679E-35DL, 0.75578374145572547DL}, /* -0.28000000000000000283030804959387326891779529938476944407769442415321 */ /* -27*/ { -0.2700000000000000074412939589012340DL, -3.621472324226468840384729934987745E-35DL, 0.76337949433685318DL}, /* -0.27000000000000000744129395890123403621472324226468840384729934987745 */ /* -26*/ { -0.2600000000000000047428162560905864DL, -2.501469089177051957349838773010467E-35DL, 0.77105158580356628DL}, /* -0.26000000000000000474281625609058642501469089177051957349838773010467 */ /* -25*/ { -0.2500000000000000105870081877182149DL, -2.401871002165074163022160614705544E-35DL, 0.77880078307140486DL}, /* -0.25000000000000001058700818771821492401871002165074163022160614705544 */ /* -24*/ { -0.2400000000000000117197536520202762DL, -4.565173334420911125114134994783830E-35DL, 0.78662786106655340DL}, /* -0.24000000000000001171975365202027624565173334420911125114134994783830 */ /* -23*/ { -0.2300000000000000102836130088398631DL, -4.258314734362222371652186012279340E-35DL, 0.79453360250333400DL}, /* -0.23000000000000001028361300883986314258314734362222371652186012279340 */ /* -22*/ { -0.2200000000000000037186111908782166DL, 1.994274823350710863543914384570978E-35DL, 0.80251879796247848DL}, /* -0.22000000000000000371861119087821658005725176649289136456085615429022 */ /* -21*/ { -0.2100000000000000121365906140649571DL, 2.750022839775115132477491327899369E-35DL, 0.81058424597018709DL}, /* -0.21000000000000001213659061406495707249977160224884867522508672100631 */ /* -20*/ { -0.2000000000000000105894831432980897DL, -1.081280876003986385238245236808560E-35DL, 0.81873075307798185DL}, /* -0.20000000000000001058948314329808971081280876003986385238245236808560 */ /* -19*/ { -0.1900000000000000090804327390410434DL, 4.918808002577730650614496821043885E-35DL, 0.82695913394336231DL}, /* -0.19000000000000000908043273904104335081191997422269349385503178956115 */ /* -18*/ { -0.1800000000000000015712100779954446DL, -2.957605310124555008128758477631307E-35DL, 0.83527021141127202DL}, /* -0.18000000000000000157121007799544462957605310124555008128758477631307 */ /* -17*/ { -0.1700000000000000024018100696556985DL, -3.976290694704978364409912515523093E-35DL, 0.84366481659638368DL}, /* -0.17000000000000000240181006965569853976290694704978364409912515523093 */ /* -16*/ { -0.1600000000000000099236151116321384DL, 1.915057335019646763517033528666509E-35DL, 0.85214378896621133DL}, /* -0.16000000000000000992361511163213838084942664980353236482966471333491 */ /* -15*/ { -0.1500000000000000083989389694853641DL, 1.588421722119487986319563194942631E-35DL, 0.86070797642505780DL}, /* -0.15000000000000000839893896948536408411578277880512013680436805057369 */ /* -14*/ { -0.1400000000000000111151928200672986DL, -1.240920337005073557908007830323297E-35DL, 0.86935823539880581DL}, /* -0.14000000000000001111519282006729861240920337005073557908007830323297 */ /* -13*/ { -0.1300000000000000042513288165544647DL, 4.422972273490793845434295217976185E-35DL, 0.87809543092056132DL}, /* -0.13000000000000000425132881655446465577027726509206154565704782023815 */ /* -12*/ { -0.1200000000000000062323123923376231DL, 4.603832635546452492681811574919340E-35DL, 0.88692043671715751DL}, /* -0.12000000000000000623231239233762305396167364453547507318188425080660 */ /* -11*/ { -0.1100000000000000007555579277546368DL, 4.456874883540724422425424031631504E-35DL, 0.89583413529652825DL}, /* -0.11000000000000000075555792775463675543125116459275577574575968368496 */ /* -10*/ { -0.1000000000000000034970360380484229DL, 3.575099528158402178959124067472918E-35DL, 0.90483741803595957DL}, /* -0.10000000000000000349703603804842286424900471841597821040875932527082 */ /* -9*/ {-0.09000000000000000738278073364692376DL, 4.492879073800548599038565212904E-39DL, 0.91393118527122818DL}, /* -0.090000000000000007382780733646923759995507120926199451400961434787096 */ /* -8*/ {-0.08000000000000000315318850214927654DL, -3.564724836098317820614500125400545E-36DL, 0.92311634638663578DL}, /* -0.080000000000000003153188502149276543564724836098317820614500125400545 */ /* -7*/ {-0.07000000000000000950024811766607704DL, -2.629629886621770491616415478708226E-36DL, 0.93239381990594822DL}, /* -0.070000000000000009500248117666077042629629886621770491616415478708226 */ /* -6*/ {-0.06000000000000001012689737526410228DL, 4.370619288189243024174263759109193E-36DL, 0.94176453358424870DL}, /* -0.060000000000000010126897375264102275629380711810756975825736240890807 */ /* -5*/ {-0.05000000000000000955755266354549993DL, 3.542008243301166158047037958269120E-36DL, 0.95122942450071400DL}, /* -0.050000000000000009557552663545499926457991756698833841952962041730880 */ /* -4*/ {-0.04000000000000000982443218740121569DL, 2.1358835750823519860946084420289E-38DL, 0.96078943915232320DL}, /* -0.040000000000000009824432187401215689978641164249176480139053915579711 */ /* -3*/ {-0.03000000000000000714365527203765389DL, -3.089448382802923640134265820839973E-36DL, 0.97044553354850817DL}, /* -0.030000000000000007143655272037653893089448382802923640134265820839973 */ /* -2*/ {-0.02000000000000000226567752508097945DL, -4.53117194934723103291999106185586E-37DL, 0.98019867330675530DL}, /* -0.020000000000000002265677525080979450453117194934723103291999106185586 */ /* -1*/ {-0.01000000000000000360982432939380284DL, -4.696787851801675436112248782012899E-36DL, 0.99004983374916805DL}, /* -0.010000000000000003609824329393802844696787851801675436112248782012899 */ /* 0*/ { 0.0DL, 0.0DL, 1.0DL}, /* 0 */ /* 1*/ {0.009999999999999943030388655826201010DL, -2.372254121557678227216506080856409E-37DL, 1.0100501670841680DL}, /* 0.0099999999999999430303886558262010097627745878442321772783493919143591 */ /* 2*/ { 0.01999999999999999004104040853671938DL, -4.267759120661057230567335693177808E-36DL, 1.0202013400267558DL}, /* 0.019999999999999990041040408536719375732240879338942769432664306822192 */ /* 3*/ { 0.02999999999999994603115603706990803DL, -4.279332989163700276757576401900886E-36DL, 1.0304545339535168DL}, /* 0.029999999999999946031156037069908025720667010836299723242423598099114 */ /* 4*/ { 0.03999999999999997429211397366745506DL, -1.294177656768788970325479972626057E-36DL, 1.0408107741923882DL}, /* 0.039999999999999974292113973667455058705822343231211029674520027373943 */ /* 5*/ { 0.04999999999999996223855314468149881DL, -3.085865976426933221102462905552351E-36DL, 1.0512710963760240DL}, /* 0.049999999999999962238553144681498806914134023573066778897537094447649 */ /* 6*/ { 0.05999999999999997906958001259662179DL, 3.350899829087289275297986159088195E-36DL, 1.0618365465453596DL}, /* 0.059999999999999979069580012596621793350899829087289275297986159088195 */ /* 7*/ { 0.06999999999999992629137443274088158DL, 7.71299929703528263519435699417020E-37DL, 1.0725081812542164DL}, /* 0.069999999999999926291374432740881580771299929703528263519435699417020 */ /* 8*/ { 0.07999999999999994974924986826440512DL, -2.425605969772230471459786579647189E-36DL, 1.0832870676749585DL}, /* 0.079999999999999949749249868264405117574394030227769528540213420352811 */ /* 9*/ { 0.08999999999999994710815407983317594DL, 3.480197992608898913009686394268578E-36DL, 1.0941742837052103DL}, /* 0.089999999999999947108154079833175943480197992608898913009686394268578 */ /* 10*/ { 0.09999999999999997754943835321595453DL, -2.389908088545654290055903876532337E-36DL, 1.1051709180756476DL}, /* 0.099999999999999977549438353215954527610091911454345709944096123467663 */ /* 11*/ { 0.1099999999999999180305157016660333DL, 3.371494551052161078876765408440227E-35DL, 1.1162780704588712DL}, /* 0.10999999999999991803051570166603333371494551052161078876765408440227 */ /* 12*/ { 0.1199999999999999366035785649883766DL, 2.988138644461091206818338151979926E-35DL, 1.1274968515793756DL}, /* 0.11999999999999993660357856498837662988138644461091206818338151979926 */ /* 13*/ { 0.1299999999999999731164826492632402DL, -2.891904566535245889950877146746917E-35DL, 1.1388283833246218DL}, /* 0.12999999999999997311648264926324017108095433464754110049122853253083 */ /* 14*/ { 0.1399999999999999407762183879173281DL, 3.862354128672716294708636650400208E-35DL, 1.1502737988572272DL}, /* 0.13999999999999994077621838791732813862354128672716294708636650400208 */ /* 15*/ { 0.1499999999999999805336945817485437DL, -4.12013961534405932938899554655501E-36DL, 1.1618342427282831DL}, /* 0.14999999999999998053369458174854369587986038465594067061100445344499 */ /* 16*/ { 0.1599999999999999701591080640817036DL, -9.75858371754055537048875548223021E-36DL, 1.1735108709918102DL}, /* 0.15999999999999997015910806408170359024141628245944462951124451776979 */ /* 17*/ { 0.1699999999999999881643505054907384DL, 3.841027952643363630440545617249817E-35DL, 1.1853048513203655DL}, /* 0.16999999999999998816435050549073843841027952643363630440545617249817 */ /* 18*/ { 0.1799999999999999458103215238788451DL, -2.506229307106022125234888001721075E-35DL, 1.1972173631218101DL}, /* 0.17999999999999994581032152387884507493770692893977874765111998278925 */ /* 19*/ { 0.1899999999999999517999842079957757DL, 1.028702801535974508348200278535293E-35DL, 1.2092495976572514DL}, /* 0.18999999999999995179998420799577571028702801535974508348200278535293 */ /* 20*/ { 0.1999999999999999722277751806162190DL, -2.499751014700494949585934087360922E-35DL, 1.2214027581601698DL}, /* 0.19999999999999997222777518061621897500248985299505050414065912639078 */ /* 21*/ { 0.2099999999999999585537528251502436DL, 3.693951884567556620314157525362059E-35DL, 1.2336780599567432DL}, /* 0.20999999999999995855375282515024363693951884567556620314157525362059 */ /* 22*/ { 0.2199999999999999843346205704434004DL, -7.81229442005957252873394375295673E-36DL, 1.2460767305873808DL}, /* 0.21999999999999998433462057044340039218770557994042747126605624704327 */ /* 23*/ { 0.2299999999999999500944923878250613DL, 3.121802677808763922784846365747500E-35DL, 1.2586000099294778DL}, /* 0.22999999999999995009449238782506133121802677808763922784846365747500 */ /* 24*/ { 0.2399999999999999279343148209259127DL, 3.565185328468159790462357279231514E-35DL, 1.2712491503214046DL}, /* 0.23999999999999992793431482092591273565185328468159790462357279231514 */ /* 25*/ { 0.2499999999999999345235542261014160DL, 3.119419573615166602805292389989429E-35DL, 1.2840254166877414DL}, /* 0.24999999999999993452355422610141603119419573615166602805292389989429 */ /* 26*/ { 0.2599999999999999244380525243888592DL, 5.8715188955204674378547573361543E-37DL, 1.2969300866657717DL}, /* 0.25999999999999992443805252438885920058715188955204674378547573361543 */ /* 27*/ { 0.2699999999999999512086078436326465DL, -4.484277062689557971297868182827159E-35DL, 1.3099644507332473DL}, /* 0.26999999999999995120860784363264645515722937310442028702131817172841 */ /* 28*/ { 0.2799999999999999730622411794417158DL, 2.584889270645954245045771490040830E-35DL, 1.3231298123374369DL}, /* 0.27999999999999997306224117944171582584889270645954245045771490040830 */ /* 29*/ { 0.2899999999999999974724437686729514DL, 2.800758480263757597193278857772072E-35DL, 1.3364274880254721DL}, /* 0.28999999999999999747244376867295142800758480263757597193278857772072 */ /* 30*/ { 0.2999999999999999970487696261494337DL, -4.323069682155933737786604130976586E-35DL, 1.3498588075760031DL}, /* 0.29999999999999999704876962614943365676930317844066262213395869023414 */ /* 31*/ { 0.3099999999999999309377873333747022DL, -4.951664051398934951063731904598217E-35DL, 1.3634251141321777DL}, /* 0.30999999999999993093778733337470215048335948601065048936268095401783 */ /* 32*/ { 0.3199999999999999386208896103503430DL, -2.048797930841130991339226049555905E-35DL, 1.3771277643359570DL}, /* 0.31999999999999993862088961035034297951202069158869008660773950444095 */ /* 33*/ { 0.3299999999999999523765164352735705DL, -2.893576107266867242304542209326239E-35DL, 1.3909681284637802DL}, /* 0.32999999999999995237651643527357047106423892733132757695457790673761 */ /* 34*/ { 0.3399999999999999310681407732279234DL, 1.330583744452166233268900766955833E-35DL, 1.4049475905635937DL}, /* 0.33999999999999993106814077322792341330583744452166233268900766955833 */ /* 35*/ { 0.3499999999999999659844270910211188DL, 4.001195305453781543210524178907096E-35DL, 1.4190675485932572DL}, /* 0.34999999999999996598442709102111884001195305453781543210524178907096 */ /* 36*/ { 0.3599999999999999596912684799901759DL, -4.190723541260660875041234331364515E-35DL, 1.4333294145603402DL}, /* 0.35999999999999995969126847999017585809276458739339124958765668635485 */ /* 37*/ { 0.3699999999999999574612973180578600DL, -3.328474427061444750747467496224030E-35DL, 1.4477346146633244DL}, /* 0.36999999999999995746129731805785996671525572938555249252532503775970 */ /* 38*/ { 0.3799999999999999784230567448722615DL, 4.58909601361632125434289145262621E-36DL, 1.4622845894342245DL}, /* 0.37999999999999997842305674487226150458909601361632125434289145262621 */ /* 39*/ { 0.3899999999999999478153377513296423DL, -1.774612813918731335026256537359798E-35DL, 1.4769807938826425DL}, /* 0.38999999999999994781533775132964228225387186081268664973743462640202 */ /* 40*/ { 0.3999999999999999880516437480756520DL, -3.616609782010357794242695677475119E-35DL, 1.4918246976412703DL}, /* 0.39999999999999998805164374807565196383390217989642205757304322524881 */ /* 41*/ { 0.4099999999999999484974025439776915DL, 9.31066136198967507432117539501195E-36DL, 1.5068177851128535DL}, /* 0.40999999999999994849740254397769150931066136198967507432117539501195 */ /* 42*/ { 0.4199999999999999369567224309269637DL, -3.610541964074748262280327786938250E-35DL, 1.5219615556186337DL}, /* 0.41999999999999993695672243092696366389458035925251737719672213061750 */ /* 43*/ { 0.4299999999999999988935793516309980DL, 1.383332560683834692548201536217032E-35DL, 1.5372575235482814DL}, /* 0.42999999999999999889357935163099801383332560683834692548201536217032 */ /* 44*/ { 0.4399999999999999729182171984056534DL, -2.234149967161881128887600647463492E-35DL, 1.5527072185113360DL}, /* 0.43999999999999997291821719840565337765850032838118871112399352536508 */ /* 45*/ { 0.4499999999999999928715724597911719DL, 7.15124342469308834938283257351181E-36DL, 1.5683121854901688DL}, /* 0.44999999999999999287157245979117190715124342469308834938283257351181 */ /* 46*/ { 0.4599999999999999527404889401460487DL, 4.935319072000364156867393126029238E-35DL, 1.5840739849944817DL}, /* 0.45999999999999995274048894014604874935319072000364156867393126029238 */ /* 47*/ { 0.4699999999999999743133754981520684DL, 9.62270796136439921050070481359484E-36DL, 1.5999941932173602DL}, /* 0.46999999999999997431337549815206840962270796136439921050070481359484 */ /* 48*/ { 0.4799999999999999491715857919495064DL, -1.587588909609169743812940949667233E-35DL, 1.6160744021928933DL}, /* 0.47999999999999994917158579194950638412411090390830256187059050332767 */ /* 49*/ { 0.4899999999999999570411558287086243DL, 1.824540458101455499718877238932613E-35DL, 1.6323162199553789DL}, /* 0.48999999999999995704115582870862431824540458101455499718877238932613 */ /* 50*/ { 0.4999999999999999715848569310202914DL, -6.49798398809088715638843848888831E-36DL, 1.6487212707001281DL}, /* 0.49999999999999997158485693102029139350201601190911284361156151111169 */ /* 51*/ { 0.5099999999999999949383262132505637DL, 1.053765711425643434943452867243354E-35DL, 1.6652911949458863DL}, /* 0.50999999999999999493832621325056371053765711425643434943452867243354 */ /* 52*/ { 0.5199999999999999721095225735053250DL, 4.102422581068322391627502699639732E-35DL, 1.6820276496988863DL}, /* 0.51999999999999997210952257350532504102422581068322391627502699639732 */ /* 53*/ { 0.5299999999999999679678735810986540DL, -2.39327021200058566807282127228416E-36DL, 1.6989323086185506DL}, /* 0.52999999999999996796787358109865399760672978799941433192717872771584 */ /* 54*/ { 0.5399999999999999649725473485665604DL, -1.542098919037352662290121943553334E-35DL, 1.7160068621848584DL}, /* 0.53999999999999996497254734856656038457901080962647337709878056446666 */ /* 55*/ { 0.5499999999999999787556021033540542DL, 3.185389102008994990862034835424083E-35DL, 1.7332530178673952DL}, /* 0.54999999999999997875560210335405423185389102008994990862034835424083 */ /* 56*/ { 0.5599999999999999528467052398208618DL, -3.371111546659521512001649280637822E-35DL, 1.7506725002961010DL}, /* 0.55999999999999995284670523982086176628888453340478487998350719362178 */ /* 57*/ { 0.5699999999999999708070716179612720DL, -3.180786315242368408069667359767309E-35DL, 1.7682670514337351DL}, /* 0.56999999999999997080707161796127196819213684757631591930332640232691 */ /* 58*/ { 0.5799999999999999539408323238629760DL, 1.262222683088251942516543707907527E-35DL, 1.7860384307500733DL}, /* 0.57999999999999995394083232386297601262222683088251942516543707907527 */ /* 59*/ { 0.5899999999999999775889153557427505DL, -4.452393696470805226490877426343796E-35DL, 1.8039884153978569DL}, /* 0.58999999999999997758891535574275045547606303529194773509122573656204 */ /* 60*/ { 0.5999999999999999589075269668937687DL, -4.591292699935926923564222012301036E-35DL, 1.8221188003905089DL}, /* 0.59999999999999995890752696689376865408707300064073076435777987698964 */ /* 61*/ { 0.6099999999999999699375951705439584DL, 4.609456967700400090228081136290545E-35DL, 1.8404313987816374DL}, /* 0.60999999999999996993759517054395844609456967700400090228081136290545 */ /* 62*/ { 0.6199999999999999762431072821921964DL, 2.30314002955488720763483668111097E-36DL, 1.8589280418463420DL}, /* 0.61999999999999997624310728219219640230314002955488720763483668111097 */ /* 63*/ { 0.6299999999999999827236939728108834DL, -1.343361803332455327050855534009085E-35DL, 1.8776105792643431DL}, /* 0.62999999999999998272369397281088338656638196667544672949144465990915 */ /* 64*/ { 0.6399999999999999718732826819559937DL, 1.166497514585744341028702135879508E-35DL, 1.8964808793049513DL}, /* 0.63999999999999997187328268195599371166497514585744341028702135879508 */ /* 65*/ { 0.6499999999999999633802124547807363DL, -4.794181381478172663713801448789315E-35DL, 1.9155408290138960DL}, /* 0.64999999999999996338021245478073625205818618521827336286198551210685 */ /* 66*/ { 0.6599999999999999887878793164000277DL, 3.711820776966570696735191442663657E-35DL, 1.9347923344020315DL}, /* 0.65999999999999998878787931640002773711820776966570696735191442663657 */ /* 67*/ { 0.6699999999999999507943610603678241DL, 7.99905053589091206408677043481874E-36DL, 1.9542373206359394DL}, /* 0.66999999999999995079436106036782410799905053589091206408677043481874 */ /* 68*/ { 0.6799999999999999526049023862759551DL, -1.518992420692740621518107309264089E-35DL, 1.9738777322304475DL}, /* 0.67999999999999995260490238627595508481007579307259378481892690735911 */ /* 69*/ { 0.6899999999999999855046290731733935DL, 9.18821263626717204827266987417614E-36DL, 1.9937155332430823DL}, /* 0.68999999999999998550462907317339350918821263626717204827266987417614 */ /* 70*/ { 0.6999999999999999892615665725181396DL, -2.76591960606986296355515010720995E-36DL, 2.0137527074704765DL}, /* 0.69999999999999998926156657251813959723408039393013703644484989279005 */ /* 71*/ { 0.7099999999999999941029629696429502DL, 3.073825178840377201221110222469081E-35DL, 2.0339912586467506DL}, /* 0.70999999999999999410296296964295023073825178840377201221110222469081 */ /* 72*/ { 0.7199999999999999790937666191896853DL, 3.722341760995845198335315765444945E-35DL, 2.0544332106438877DL}, /* 0.71999999999999997909376661918968533722341760995845198335315765444945 */ /* 73*/ { 0.7299999999999999783206610535420449DL, 1.672229174080049506150160484619879E-35DL, 2.0750806076741226DL}, /* 0.72999999999999997832066105354204491672229174080049506150160484619879 */ /* 74*/ { 0.7399999999999999698758299545939937DL, 1.829469516888001513409610709245729E-35DL, 2.0959355144943645DL}, /* 0.73999999999999996987582995459399371829469516888001513409610709245729 */ /* 75*/ { 0.7499999999999999676214599518455623DL, -2.195417394914335076719823214862160E-35DL, 2.1170000166126746DL}, /* 0.74999999999999996762145995184556227804582605085664923280176785137840 */ /* 76*/ { 0.7599999999999999988327320673668373DL, 1.630253303153719799707100603711402E-35DL, 2.1382762204968186DL}, /* 0.75999999999999999883273206736683731630253303153719799707100603711402 */ /* 77*/ { 0.7699999999999999961164536321274888DL, 2.575916079805019430153095529615091E-35DL, 2.1597662537849150DL}, /* 0.76999999999999999611645363212748882575916079805019430153095529615091 */ /* 78*/ { 0.7799999999999999923772354086109276DL, -3.222139325218461447518734977400488E-35DL, 2.1814722654982011DL}, /* 0.77999999999999999237723540861092756777860674781538552481265022599512 */ /* 79*/ { 0.7899999999999999731234716166752549DL, -2.783459045278374666563670216258951E-35DL, 2.2033964262559366DL}, /* 0.78999999999999997312347161667525487216540954721625333436329783741049 */ /* 80*/ { 0.7999999999999999979422811448823120DL, 6.49149407675995124816841146451568E-36DL, 2.2255409284924676DL}, /* 0.79999999999999999794228114488231200649149407675995124816841146451568 */ /* 81*/ { 0.8099999999999999914678668727494530DL, -4.412533947827227549132285252811140E-35DL, 2.2479079866764714DL}, /* 0.80999999999999999146786687274945295587466052172772450867714747188860 */ /* 82*/ { 0.8199999999999999644637678930898609DL, 1.95324270482112719265953655169763E-36DL, 2.2704998375324057DL}, /* 0.81999999999999996446376789308986090195324270482112719265953655169763 */ /* 83*/ { 0.8299999999999999617726213743955618DL, -8.15139492289999870215458162502752E-36DL, 2.2933187402641828DL}, /* 0.82999999999999996177262137439556179184860507710000129784541837497248 */ /* 84*/ { 0.8399999999999999855375907493644694DL, 2.186910779599535385445797596416920E-35DL, 2.3163669767810917DL}, /* 0.83999999999999998553759074936446942186910779599535385445797596416920 */ /* 85*/ { 0.8499999999999999842477393939922678DL, 6.94189429512050928487740695861545E-36DL, 2.3396468519259909DL}, /* 0.84999999999999998424773939399226780694189429512050928487740695861545 */ /* 86*/ { 0.8599999999999999795731806998919870DL, 1.892203403398260672430853796957485E-35DL, 2.3631606937057949DL}, /* 0.85999999999999997957318069989198701892203403398260672430853796957485 */ /* 87*/ { 0.8699999999999999658056111088070633DL, 2.28402755260533965213007821295732E-36DL, 2.3869108535242766DL}, /* 0.86999999999999996580561110880706330228402755260533965213007821295732 */ /* 88*/ { 0.8799999999999999788913305764341246DL, -1.644736637370199754049339088715547E-35DL, 2.4108997064172098DL}, /* 0.87999999999999997889133057643412458355263362629800245950660911284453 */ /* 89*/ { 0.8899999999999999890007922495963922DL, -4.043120183056261909373382856112196E-35DL, 2.4351296512898745DL}, /* 0.88999999999999998900079224959639215956879816943738090626617143887804 */ /* 90*/ { 0.8999999999999999740608042516289843DL, -2.967202792093451646194524675666312E-35DL, 2.4596031111569496DL}, /* 0.89999999999999997406080425162898427032797207906548353805475324333688 */ /* 91*/ { 0.9099999999999999648505144414472565DL, -3.893842435745205698747140897434906E-35DL, 2.4843225333848165DL}, /* 0.90999999999999996485051444144725646106157564254794301252859102565094 */ /* 92*/ { 0.9199999999999999716123516000861795DL, -1.452876611552029609029039919926118E-35DL, 2.5092903899362976DL}, /* 0.91999999999999997161235160008617948547123388447970390970960080073882 */ /* 93*/ { 0.9299999999999999683881138006365302DL, 1.064115634691885815654449860755124E-35DL, 2.5345091776178546DL}, /* 0.92999999999999996838811380063653021064115634691885815654449860755124 */ /* 94*/ { 0.9399999999999999624448658818966580DL, 2.662471082457531497554507653498685E-35DL, 2.5599814183292714DL}, /* 0.93999999999999996244486588189665802662471082457531497554507653498685 */ /* 95*/ { 0.9499999999999999617165798392195964DL, -4.794670670821793715083590578525826E-35DL, 2.5857096593158461DL}, /* 0.94999999999999996171657983921959635205329329178206284916409421474174 */ /* 96*/ { 0.9599999999999999929438196641814695DL, -1.452114728041942099011292482841868E-35DL, 2.6116964734231177DL}, /* 0.95999999999999999294381966418146948547885271958057900988707517158132 */ /* 97*/ { 0.9699999999999999877870001491766461DL, 4.28701924294605306998034837793072E-36DL, 2.6379444593541525DL}, /* 0.96999999999999998778700014917664610428701924294605306998034837793072 */ /* 98*/ { 0.9799999999999999856040315335295947DL, 2.044849558358869467854362177617495E-35DL, 2.6644562419294171DL}, /* 0.97999999999999998560403153352959472044849558358869467854362177617495 */ /* 99*/ { 0.9899999999999999668925616405719718DL, -1.658702605461413934937097899755699E-35DL, 2.6912344723492622DL}, /* 0.98999999999999996689256164057197178341297394538586065062902100244301 */ /* 100*/ { 0.9999999999999999869916772053772291DL, 4.548135604384143010146700548839538E-35DL, 2.7182818284590452DL}, /* 0.99999999999999998699167720537722914548135604384143010146700548839538 */ /* 101*/ { 1.009999999999999965767139579790223DL, 3.601513046619562018796377283735441E-34DL, 2.7456010150169164DL}, /* 1.0099999999999999657671395797902233601513046619562018796377283735441 */ /* 102*/ { 1.019999999999999993942293561404648DL, 3.730866437244956181140313691450094E-34DL, 2.7731947639642979DL}, /* 1.0199999999999999939422935614046483730866437244956181140313691450094 */ /* 103*/ { 1.029999999999999996654929454490962DL, 2.89757639956390316847801291723256E-35DL, 2.8010658346990791DL}, /* 1.0299999999999999966549294544909620289757639956390316847801291723256 */ /* 104*/ { 1.039999999999999993100746281332857DL, -7.07382685607169315994801568074103E-35DL, 2.8292170143515595DL}, /* 1.0399999999999999931007462813328569292617314392830684005198431925897 */ /* 105*/ { 1.049999999999999968553084857623810DL, 4.819084497499176212039105570262194E-34DL, 2.8576511180631637DL}, /* 1.0499999999999999685530848576238104819084497499176212039105570262194 */ /* 106*/ { 1.059999999999999983979406854886227DL, -1.589196614189879376828932377029492E-34DL, 2.8863709892679582DL}, /* 1.0599999999999999839794068548862268410803385810120623171067622970508 */ /* 107*/ { 1.069999999999999974659261076110862DL, -4.200899781771498092073508665925681E-34DL, 2.9153794999769966DL}, /* 1.0699999999999999746592610761108615799100218228501907926491334074319 */ /* 108*/ { 1.079999999999999994525685717007351DL, 1.97384790105783792285937353543025E-35DL, 2.9446795510655238DL}, /* 1.0799999999999999945256857170073510197384790105783792285937353543025 */ /* 109*/ { 1.089999999999999994515667960928965DL, -1.637325670249408405677290460066226E-34DL, 2.9742740725630653DL}, /* 1.0899999999999999945156679609289648362674329750591594322709539933774 */ /* 110*/ { 1.099999999999999995986104676815397DL, -1.617557447950622751183232606724166E-34DL, 3.0041660239464331DL}, /* 1.0999999999999999959861046768153968382442552049377248816767393275834 */ /* 111*/ { 1.109999999999999972759095757784914DL, -4.858578171948130606519668404570159E-34DL, 3.0343583944356755DL}, /* 1.1099999999999999727590957577849135141421828051869393480331595429841 */ /* 112*/ { 1.119999999999999985327646893094380DL, -2.398975825761466027924374849980706E-34DL, 3.0648542032930020DL}, /* 1.1199999999999999853276468930943797601024174238533972075625150019294 */ /* 113*/ { 1.129999999999999970800050870184745DL, 4.595214570223683960651314798457171E-34DL, 3.0956565001247114DL}, /* 1.1299999999999999708000508701847454595214570223683960651314798457171 */ /* 114*/ { 1.139999999999999982048060589919116DL, 1.663850832756932133460319975287214E-34DL, 3.1267683651861557DL}, /* 1.1399999999999999820480605899191161663850832756932133460319975287214 */ /* 115*/ { 1.149999999999999991371426189832193DL, -4.340087884324080923718640074357865E-34DL, 3.1581929096897676DL}, /* 1.1499999999999999913714261898321925659912115675919076281359925642135 */ #define EXPTBL1OFF 115 }; static const struct { _Decimal128 hi; _Decimal128 lo; _Decimal128 out; } exptbl2[] = { /* -101*/ {-0.01010000000000000134742967582185215DL, -3.555081502403364855476995732833092E-36DL, 0.98995083371587730DL}, /* -0.010100000000000001347429675821852153555081502403364855476995732833092 */ /* -100*/ {-0.01000000000000000360982432939380284DL, -4.696787851801675436112248782012899E-36DL, 0.99004983374916805DL}, /* -0.010000000000000003609824329393802844696787851801675436112248782012899 */ /* -99*/ {-0.009900000000000001571499732657582502DL, -4.599043484773712960974818825130425E-37DL, 0.99014884368295715DL}, /* -0.0099000000000000015714997326575825024599043484773712960974818825130425 */ /* -98*/ {-0.009800000000000004664431362691968088DL, 3.316095749479630121862265243008320E-37DL, 0.99024786351823469DL}, /* -0.0098000000000000046644313626919680876683904250520369878137734756991680 */ /* -97*/ {-0.009700000000000001127160821715787758DL, 3.235588210696139598694818153560089E-37DL, 0.99034689325599088DL}, /* -0.0097000000000000011271608217157877576764411789303860401305181846439911 */ /* -96*/ {-0.009600000000000008507699972008981421DL, 2.941143373013429470936868953075637E-37DL, 0.99044593289721600DL}, /* -0.0096000000000000085076999720089814207058856626986570529063131046924363 */ /* -95*/ {-0.009500000000000002990706833295158337DL, 1.556272883020559240262146604878836E-37DL, 0.99054498244290047DL}, /* -0.0095000000000000029907068332951583368443727116979440759737853395121164 */ /* -94*/ {-0.009400000000000000183707471914676834DL, 2.785442776568736151576387308710930E-37DL, 0.99064404189403477DL}, /* -0.0094000000000000001837074719146768337214557223431263848423612691289070 */ /* -93*/ {-0.009300000000000004640216465271936966DL, -3.522177994893014396091415602248900E-37DL, 0.99074311125160949DL}, /* -0.0093000000000000046402164652719369663522177994893014396091415602248900 */ /* -92*/ {-0.009200000000000009875259571104486746DL, -3.906321222669514821481239289833877E-37DL, 0.99084219051661533DL}, /* -0.0092000000000000098752595711044867463906321222669514821481239289833877 */ /* -91*/ {-0.009100000000000008472305049754282066DL, -1.071646616431443449107973406436655E-37DL, 0.99094127969004309DL}, /* -0.0091000000000000084723050497542820661071646616431443449107973406436655 */ /* -90*/ {-0.009000000000000002184133786060159243DL, -3.302739127433412391023781244630209E-37DL, 0.99104037877288366DL}, /* -0.0090000000000000021841337860601592433302739127433412391023781244630209 */ /* -89*/ {-0.008900000000000001938253104175289865DL, 1.271702177917797827301921135063354E-37DL, 0.99113948776612802DL}, /* -0.0089000000000000019382531041752898648728297822082202172698078864936646 */ /* -88*/ {-0.008800000000000007665530282267543782DL, 2.019947733681416497407129340198784E-37DL, 0.99123860667076726DL}, /* -0.0088000000000000076655302822675437817980052266318583502592870659801216 */ /* -87*/ {-0.008700000000000008315687005376328172DL, -4.313507799592932960419659425556302E-37DL, 0.99133773548779258DL}, /* -0.0087000000000000083156870053763281724313507799592932960419659425556302 */ /* -86*/ {-0.008600000000000002045528895628054736DL, 9.56630940563740876833886878551756E-38DL, 0.99143687421819527DL}, /* -0.0086000000000000020455288956280547359043369059436259123166113121448244 */ /* -85*/ {-0.008500000000000006309703081348332552DL, -5.79566058796097160457174028838082E-38DL, 0.99153602286296670DL}, /* -0.0085000000000000063097030813483325520579566058796097160457174028838082 */ /* -84*/ {-0.008400000000000007439278493834124562DL, 2.647364021588740616777990487552107E-37DL, 0.99163518142309837DL}, /* -0.0084000000000000074392784938341245617352635978411259383222009512447893 */ /* -83*/ {-0.008300000000000001000684253337262622DL, 4.553696177941104837528578598049854E-37DL, 0.99173434989958187DL}, /* -0.0083000000000000010006842533372626215446303822058895162471421401950146 */ /* -82*/ {-0.008200000000000001883428207664283194DL, -3.466062870728783993497138406519859E-37DL, 0.99183352829340887DL}, /* -0.0082000000000000018834282076642831943466062870728783993497138406519859 */ /* -81*/ {-0.008100000000000003975118069424820117DL, 4.634267190123983935582355629599509E-37DL, 0.99193271660557116DL}, /* -0.0081000000000000039751180694248201165365732809876016064417644370400491 */ /* -80*/ {-0.008000000000000000342599562761743009DL, -2.496705661725816359815997474589120E-37DL, 0.99203191483706063DL}, /* -0.0080000000000000003425995627617430092496705661725816359815997474589120 */ /* -79*/ {-0.007900000000000003400990641979544831DL, 3.976507546180633061659865833512732E-37DL, 0.99213112298886925DL}, /* -0.0079000000000000034009906419795448306023492453819366938340134166487268 */ /* -78*/ {-0.007800000000000004600786062828445219DL, 3.606375487801643409924705378641626E-37DL, 0.99223034106198911DL}, /* -0.0078000000000000046007860628284452186393624512198356590075294621358374 */ /* -77*/ {-0.007700000000000004680227066074346624DL, -2.416576471516799652223744605032261E-37DL, 0.99232956905741239DL}, /* -0.0077000000000000046802270660743466242416576471516799652223744605032261 */ /* -76*/ {-0.007600000000000003594366558554815242DL, -2.118478178282793564854880265470767E-37DL, 0.99242880697613137DL}, /* -0.0076000000000000035943665585548152422118478178282793564854880265470767 */ /* -75*/ {-0.007500000000000000525458114302131103DL, -6.45250005889263092359907346114433E-38DL, 0.99252805481913843DL}, /* -0.0075000000000000005254581143021311030645250005889263092359907346114433 */ /* -74*/ {-0.007400000000000003967614336353740065DL, -9.23095865657968380228125638480017E-38DL, 0.99262731258742604DL}, /* -0.0074000000000000039676143363537400650923095865657968380228125638480017 */ /* -73*/ {-0.007300000000000001512347443497917017DL, -3.339240178307202200280824176970328E-37DL, 0.99272658028198679DL}, /* -0.0073000000000000015123474434979170173339240178307202200280824176970328 */ /* -72*/ {-0.007200000000000000158055991750538824DL, -9.65661970048505532612879806637555E-38DL, 0.99282585790381335DL}, /* -0.0072000000000000001580559917505388240965661970048505532612879806637555 */ /* -71*/ {-0.007100000000000006167815362178042759DL, 5.50117340734335459244108577511099E-38DL, 0.99292514545389849DL}, /* -0.0071000000000000061678153621780427589449882659265664540755891422488901 */ /* -70*/ {-0.007000000000000004939251059387853498DL, 4.888986707625784510317462471123613E-37DL, 0.99302444293323510DL}, /* -0.0070000000000000049392510593878534975111013292374215489682537528876387 */ /* -69*/ {-0.006900000000000001301922182768210423DL, -2.408966811817165334332083487133350E-37DL, 0.99312375034281615DL}, /* -0.0069000000000000013019221827682104232408966811817165334332083487133350 */ /* -68*/ {-0.006800000000000009449373180878594813DL, -2.708629013349557162076651355358145E-37DL, 0.99322306768363470DL}, /* -0.0068000000000000094493731808785948132708629013349557162076651355358145 */ /* -67*/ {-0.006700000000000002608324349802913528DL, -2.527584425665719587725898000819480E-37DL, 0.99332239495668395DL}, /* -0.0067000000000000026083243498029135282527584425665719587725898000819480 */ /* -66*/ {-0.006600000000000003665114821799069502DL, 3.430537288878300313885251515524966E-37DL, 0.99342173216295715DL}, /* -0.0066000000000000036651148217990695016569462711121699686114748484475034 */ /* -65*/ {-0.006500000000000004629180506981071556DL, 2.041467032358122211300449277361391E-37DL, 0.99352107930344768DL}, /* -0.0065000000000000046291805069810715557958532967641877788699550722638609 */ /* -64*/ {-0.006400000000000006915307935537805770DL, -3.419174650022075949672367122922426E-37DL, 0.99362043637914901DL}, /* -0.0064000000000000069153079355378057703419174650022075949672367122922426 */ /* -63*/ {-0.006300000000000001222532381975370260DL, -4.407929897855470118539431882795278E-37DL, 0.99371980339105472DL}, /* -0.0063000000000000012225323819753702604407929897855470118539431882795278 */ /* -62*/ {-0.006200000000000007798263223048900559DL, 3.809384507790659269107044504684599E-37DL, 0.99381918034015846DL}, /* -0.0062000000000000077982632230489005586190615492209340730892955495315401 */ /* -61*/ {-0.006100000000000006005203917564756817DL, -3.187882667559020569621775878851110E-37DL, 0.99391856722745402DL}, /* -0.0061000000000000060052039175647568173187882667559020569621775878851110 */ /* -60*/ {-0.006000000000000004773051336915063464DL, 1.643441146863815157511289797625255E-37DL, 0.99401796405393526DL}, /* -0.0060000000000000047730513369150634638356558853136184842488710202374745 */ /* -59*/ {-0.005900000000000002357015000040265424DL, 2.333605233378441272819138400646741E-37DL, 0.99411737082059615DL}, /* -0.0059000000000000023570150000402654237666394766621558727180861599353259 */ /* -58*/ {-0.005800000000000006469487709106113847DL, 4.647226955981889396744954436187151E-37DL, 0.99421678752843075DL}, /* -0.0058000000000000064694877091061138465352773044018110603255045563812849 */ /* -57*/ {-0.005700000000000004113826591787044811DL, 1.586824479683037436583140792691021E-37DL, 0.99431621417843324DL}, /* -0.0057000000000000041138265917870448108413175520316962563416859207308979 */ /* -56*/ {-0.005600000000000001829332202992022861DL, -4.502308952457263758448128464854515E-37DL, 0.99441565077159788DL}, /* -0.0056000000000000018293322029920228614502308952457263758448128464854515 */ /* -55*/ {-0.005500000000000005581176785988861151DL, -3.202651472838700427757656776140268E-37DL, 0.99451509730891903DL}, /* -0.0055000000000000055811767859888611513202651472838700427757656776140268 */ /* -54*/ {-0.005400000000000000662396043151264013DL, -4.353377545139996005265791152331261E-37DL, 0.99461455379139117DL}, /* -0.0054000000000000006623960431512640134353377545139996005265791152331261 */ /* -53*/ {-0.005300000000000001979925083605363519DL, -1.934979571803929750721775566740304E-37DL, 0.99471402022000885DL}, /* -0.0053000000000000019799250836053635191934979571803929750721775566740304 */ /* -52*/ {-0.005200000000000003789114011413296010DL, -4.445120725471684497171562600760647E-37DL, 0.99481349659576674DL}, /* -0.0052000000000000037891140114132960104445120725471684497171562600760647 */ /* -51*/ {-0.005100000000000009867440025780374925DL, 4.903663403278888749486896811042088E-37DL, 0.99491298291965960DL}, /* -0.0051000000000000098674400257803749245096336596721111250513103188957912 */ /* -50*/ {-0.005000000000000003369369044449226821DL, -2.155011966990978975892575706082521E-37DL, 0.99501247919268231DL}, /* -0.0050000000000000033693690444492268212155011966990978975892575706082521 */ /* -49*/ {-0.004900000000000007141385294333478519DL, 4.026012993861446566380562864940198E-37DL, 0.99511198541582981DL}, /* -0.0049000000000000071413852943334785185973987006138553433619437135059802 */ /* -48*/ {-0.004800000000000003327222402974959821DL, 3.899020381881509427644281282888559E-37DL, 0.99521150159009718DL}, /* -0.0048000000000000033272224029749598206100979618118490572355718717111441 */ /* -47*/ {-0.004700000000000003727983335040528454DL, 2.739444226857369712742305578895760E-37DL, 0.99531102771647957DL}, /* -0.0047000000000000037279833350405284537260555773142630287257694421104240 */ /* -46*/ {-0.004600000000000009612887885088135376DL, -6.91125967452406622805376105988785E-38DL, 0.99541056379597224DL}, /* -0.0046000000000000096128878850881353760691125967452406622805376105988785 */ /* -45*/ {-0.004500000000000001689433274234421263DL, 1.838073319740191095309305758930394E-37DL, 0.99551010982957057DL}, /* -0.0045000000000000016894332742344212628161926680259808904690694241069606 */ /* -44*/ {-0.004400000000000000388253523575229817DL, -2.346728811675348625698808994796505E-37DL, 0.99560966581827000DL}, /* -0.0044000000000000003882535235752298172346728811675348625698808994796505 */ /* -43*/ {-0.004300000000000005594702812241332948DL, -3.516869642334560192207040762532618E-37DL, 0.99570923176306609DL}, /* -0.0043000000000000055947028122413329483516869642334560192207040762532618 */ /* -42*/ {-0.004200000000000006711211384926555374DL, -4.223786311520486141550636086970780E-37DL, 0.99580880766495451DL}, /* -0.0042000000000000067112113849265553744223786311520486141550636086970780 */ /* -41*/ {-0.004100000000000002754692593493499197DL, 2.334281303980764000680180358234847E-37DL, 0.99590839352493102DL}, /* -0.0041000000000000027546925934934991967665718696019235999319819641765153 */ /* -40*/ {-0.004000000000000002361734455693267594DL, 1.642746021385537603535809116010338E-37DL, 0.99600798934399147DL}, /* -0.0040000000000000023617344556932675938357253978614462396464190883989662 */ /* -39*/ {-0.003900000000000003715635359066460962DL, 4.347908714507960255970906877904578E-37DL, 0.99610759512313182DL}, /* -0.0039000000000000037156353590664609615652091285492039744029093122095422 */ /* -38*/ {-0.003800000000000004599699372786615660DL, 5.52274094534222917162226816015652E-38DL, 0.99620721086334813DL}, /* -0.0038000000000000045996993727866156599447725905465777082837773183984348 */ /* -37*/ {-0.003700000000000002407433916769531985DL, -2.55295887070950206044293585193564E-38DL, 0.99630683656563656DL}, /* -0.0037000000000000024074339167695319850255295887070950206044293585193564 */ /* -36*/ {-0.003600000000000004188807250046609816DL, 9.67722117691423431129345492179707E-38DL, 0.99640647223099336DL}, /* -0.0036000000000000041888072500466098159032277882308576568870654507820293 */ /* -35*/ {-0.003500000000000006585295599668152214DL, -4.980944685471986940482401227249038E-37DL, 0.99650611786041489DL}, /* -0.0035000000000000065852955996681522144980944685471986940482401227249038 */ /* -34*/ {-0.003400000000000005879141807515843924DL, 4.136336770562693906163305688160243E-37DL, 0.99660577345489761DL}, /* -0.0034000000000000058791418075158439235863663229437306093836694311839757 */ /* -33*/ {-0.003300000000000008036587284071613255DL, 6.46669862618729409504217997047804E-38DL, 0.99670543901543807DL}, /* -0.0033000000000000080365872840716132549353330137381270590495782002952196 */ /* -32*/ {-0.003200000000000008648925613976813681DL, 1.249793895367495690416828815787183E-37DL, 0.99680511454303293DL}, /* -0.0032000000000000086489256139768136808750206104632504309583171184212817 */ /* -31*/ {-0.003100000000000002978734774070105236DL, -3.84145025072161799018638115700510E-38DL, 0.99690480003867895DL}, /* -0.0031000000000000029787347740701052360384145025072161799018638115700510 */ /* -30*/ {-0.003000000000000006030129514172508008DL, -1.823837080845498074876832580894102E-37DL, 0.99700449550337297DL}, /* -0.0030000000000000060301295141725080081823837080845498074876832580894102 */ /* -29*/ {-0.002900000000000002403678602877357381DL, 1.817448439336241436396051750835610E-37DL, 0.99710420093811196DL}, /* -0.0029000000000000024036786028773573808182551560663758563603948249164390 */ /* -28*/ {-0.002800000000000006489837260286029452DL, -1.17237765749408536345292769161272E-38DL, 0.99720391634389296DL}, /* -0.0028000000000000064898372602860294520117237765749408536345292769161272 */ /* -27*/ {-0.002700000000000002301833102576831676DL, 6.14197845247687528573988640408833E-38DL, 0.99730364172171314DL}, /* -0.0027000000000000023018331025768316759385802154752312471426011359591167 */ /* -26*/ {-0.002600000000000003657053033774334866DL, 4.203060356383344980859749065434276E-37DL, 0.99740337707256974DL}, /* -0.0026000000000000036570530337743348655796939643616655019140250934565724 */ /* -25*/ {-0.002500000000000004046984629668410971DL, -1.980535257482684909727738395123121E-37DL, 0.99750312239746012DL}, /* -0.0025000000000000040469846296684109711980535257482684909727738395123121 */ /* -24*/ {-0.002400000000000006729461167324801757DL, 4.754010830651199185215514597921209E-37DL, 0.99760287769738173DL}, /* -0.0024000000000000067294611673248017565245989169348800814784485402078791 */ /* -23*/ {-0.002300000000000004687723906869028747DL, -8.56951993571693138303077513871429E-38DL, 0.99770264297333213DL}, /* -0.0023000000000000046877239068690287470856951993571693138303077513871429 */ /* -22*/ {-0.002200000000000000689604740743689812DL, -1.328956192829148494637881205555037E-37DL, 0.99780241822630897DL}, /* -0.0022000000000000006896047407436898121328956192829148494637881205555037 */ /* -21*/ {-0.002100000000000007292632344915003129DL, 3.836341566646717097877325059384435E-37DL, 0.99790220345730999DL}, /* -0.0021000000000000072926323449150031286163658433353282902122674940615565 */ /* -20*/ {-0.002000000000000006769054745480319557DL, 2.817554416523659062911838624391810E-37DL, 0.99800199866733306DL}, /* -0.0020000000000000067690547454803195567182445583476340937088161375608190 */ /* -19*/ {-0.001900000000000001226067753797336330DL, 9.01834546133313938677118632508016E-38DL, 0.99810180385737613DL}, /* -0.0019000000000000012260677537973363299098165453866686061322881367491984 */ /* -18*/ {-0.001800000000000002587881051549495909DL, -4.540678919010118293051296446603349E-37DL, 0.99820161902843724DL}, /* -0.0018000000000000025878810515494959094540678919010118293051296446603349 */ /* -17*/ {-0.001700000000000002549763844358589193DL, 4.408173476717596707018316200264471E-37DL, 0.99830144418151455DL}, /* -0.0017000000000000025497638443585891925591826523282403292981683799735529 */ /* -16*/ {-0.001600000000000002646193554886082075DL, 4.187540668818093380693372580663793E-37DL, 0.99840127931760631DL}, /* -0.0016000000000000026461935548860820745812459331181906619306627419336207 */ /* -15*/ {-0.001500000000000004240923539723796050DL, 2.419184011886686925722645779680781E-37DL, 0.99850112443771087DL}, /* -0.0015000000000000042409235397237960497580815988113313074277354220319219 */ /* -14*/ {-0.001400000000000008537065794073883881DL, -3.258660260945607234950158529065609E-37DL, 0.99860097954282668DL}, /* -0.0014000000000000085370657940738838813258660260945607234950158529065609 */ /* -13*/ {-0.001300000000000006574160178721025071DL, -2.004989991336931333353996951334403E-37DL, 0.99870084463395230DL}, /* -0.0013000000000000065741601787210250712004989991336931333353996951334403 */ /* -12*/ {-0.001200000000000009279274940680545694DL, 3.444629159379459039704134264056769E-37DL, 0.99880071971208637DL}, /* -0.0012000000000000092792749406805456936555370840620540960295865735943231 */ /* -11*/ {-0.001100000000000007423037633563871635DL, 2.905213767054785453575624034704746E-37DL, 0.99890060477822765DL}, /* -0.0011000000000000074230376335638716347094786232945214546424375965295254 */ /* -10*/ {-0.001000000000000001669724246830580958DL, -3.029715054035350603469646403255140E-37DL, 0.99900049983337499DL}, /* -0.0010000000000000016697242468305809583029715054035350603469646403255140 */ /* -9*/ {-0.0009000000000000025823110520350323009DL, -4.258889631209145537120359965960775E-38DL, 0.99910040487852733DL}, /* -0.00090000000000000258231105203503230094258889631209145537120359965960775 */ /* -8*/ {-0.0008000000000000006035133315420144957DL, -4.377683374444908323649878850236165E-38DL, 0.99920031991468373DL}, /* -0.00080000000000000060351333154201449574377683374444908323649878850236165 */ /* -7*/ {-0.0007000000000000061038512524989144887DL, 1.576308431004307143461105527586017E-38DL, 0.99930024494284333DL}, /* -0.00070000000000000610385125249891448868423691568995692856538894472413983 */ /* -6*/ {-0.0006000000000000093576777170311863918DL, 3.197119030147998531611274381335534E-38DL, 0.99940017996400539DL}, /* -0.00060000000000000935767771703118639176802880969852001468388725618664466 */ /* -5*/ {-0.0005000000000000005732249073180395231DL, -4.076204586887440057886727761656892E-38DL, 0.99950012497916927DL}, /* -0.00050000000000000057322490731803952314076204586887440057886727761656892 */ /* -4*/ {-0.0004000000000000099186390174521401899DL, -4.773833679735122723881185509823283E-38DL, 0.99960007998933439DL}, /* -0.00040000000000000991863901745214018994773833679735122723881185509823283 */ /* -3*/ {-0.0003000000000000074819952743828027453DL, -2.707205359164316312033616691535839E-38DL, 0.99970004499550033DL}, /* -0.00030000000000000748199527438280274532707205359164316312033616691535839 */ /* -2*/ {-0.0002000000000000033313329555219027674DL, 3.622826753336425543347874037070900E-38DL, 0.99980001999866673DL}, /* -0.00020000000000000333133295552190276736377173246663574456652125962929100 */ /* -1*/ {-0.0001000000000000075006666972231746539DL, 2.551982382600467977921054322527655E-38DL, 0.99990000499983333DL}, /* -0.00010000000000000750066669722317465387448017617399532022078945677472345 */ /* 0*/ { 0.0DL, 0.0DL, 1.0DL}, /* 0 */ /* 1*/ {0.00009999999999992917366631945594958631DL, 4.986086800566190361345750277687689E-39DL, 1.0001000050001666DL}, /* 0.000099999999999929173666319455949586314986086800566190361345750277687689 */ /* 2*/ {0.0001999999999999999973337777396847618DL, 5.99647374038289917292399793950373E-39DL, 1.0002000200013334DL}, /* 0.00019999999999999999733377773968476180599647374038289917292399793950373 */ /* 3*/ {0.0002999999999999624910033745179007332DL, 3.239598673704582104706175018403200E-38DL, 1.0003000450045003DL}, /* 0.00029999999999996249100337451790073323239598673704582104706175018403200 */ /* 4*/ {0.0003999999999999665946924399243422515DL, -3.443518944393337473570852353916333E-38DL, 1.0004000800106677DL}, /* 0.00039999999999996659469243992434225146556481055606662526429147646083667 */ /* 5*/ {0.0004999999999999622584371303108317891DL, 2.928084731842011157391696774115782E-38DL, 1.0005001250208359DL}, /* 0.00049999999999996225843713031083178912928084731842011157391696774115782 */ /* 6*/ {0.0005999999999999993523239167002923417DL, 1.447647480058814046294178721376742E-38DL, 1.0006001800360054DL}, /* 0.00059999999999999935232391670029234171447647480058814046294178721376742 */ /* 7*/ {0.0006999999999999278164660784409894242DL, 2.689822003772992761393417568099483E-38DL, 1.0007002450571766DL}, /* 0.00069999999999992781646607844098942422689822003772992761393417568099483 */ /* 8*/ {0.0007999999999999972711531537710064902DL, -8.53534345256294924401320875921668E-39DL, 1.0008003200853504DL}, /* 0.00079999999999999727115315377100649019146465654743705075598679124078332 */ /* 9*/ {0.0008999999999999576166739564261402900DL, -1.167081068713009919405702186032448E-38DL, 1.0009004051215273DL}, /* 0.00089999999999995761667395642614028998832918931286990080594297813967552 */ /* 10*/ {0.0009999999999999583735914746759970210DL, 2.541499338445992237858661838207142E-38DL, 1.0010005001667083DL}, /* 0.00099999999999995837359147467599702102541499338445992237858661838207142 */ /* 11*/ {0.001099999999999949132607363201264936DL, -1.776519287080824827178673684295364E-37DL, 1.0011006052218943DL}, /* 0.0010999999999999491326073632012649358223480712919175172821326315704636 */ /* 12*/ {0.001199999999999979284725339502913244DL, -1.809658046905763343065542014349768E-37DL, 1.0012007202880864DL}, /* 0.0011999999999999792847253395029132438190341953094236656934457985650232 */ /* 13*/ {0.001299999999999998221192140693135036DL, 3.144614769759439384872198383998619E-37DL, 1.0013008453662857DL}, /* 0.0012999999999999982211921406931350363144614769759439384872198383998619 */ /* 14*/ {0.001399999999999955233590417517794461DL, -3.043775834660834625681620343607209E-37DL, 1.0014009804574934DL}, /* 0.0013999999999999552335904175177944606956224165339165374318379656392791 */ /* 15*/ {0.001499999999999999204121011092366037DL, 7.33917425973476523798248711258932E-38DL, 1.0015011255627110DL}, /* 0.0014999999999999992041210110923660370733917425973476523798248711258932 */ /* 16*/ {0.001599999999999979295180544716219802DL, -5.36583674428934041891820401331438E-38DL, 1.0016012806829398DL}, /* 0.0015999999999999792951805447162198019463416325571065958108179598668562 */ /* 17*/ {0.001699999999999944239923537547957493DL, -4.595556505506184214972714695153706E-37DL, 1.0017014458191814DL}, /* 0.0016999999999999442399235375479574925404443494493815785027285304846294 */ /* 18*/ {0.001799999999999942592175790121994110DL, -2.882570161387632149037962797021028E-37DL, 1.0018016209724375DL}, /* 0.0017999999999999425921757901219941097117429838612367850962037202978972 */ /* 19*/ {0.001899999999999922906341285964407263DL, -7.99604526981790631673128105959663E-38DL, 1.0019018061437098DL}, /* 0.0018999999999999229063412859644072629200395473018209368326871894040337 */ /* 20*/ {0.001999999999999933377796780986928864DL, -4.201282470595763072969668134487256E-37DL, 1.0020020013340002DL}, /* 0.0019999999999999333777967809869288635798717529404236927030331865512744 */ /* 21*/ {0.002099999999999922202640759957893508DL, 4.630318792995669175471887102989199E-37DL, 1.0021022065443106DL}, /* 0.0020999999999999222026407599578935084630318792995669175471887102989199 */ /* 22*/ {0.002199999999999937178171901792294795DL, 2.818449909661297095678477010657704E-37DL, 1.0022024217756431DL}, /* 0.0021999999999999371781719017922947952818449909661297095678477010657704 */ /* 23*/ {0.002299999999999926102570053972599659DL, 2.724921576560134636451459399842551E-37DL, 1.0023026470289998DL}, /* 0.0022999999999999261025700539725996592724921576560134636451459399842551 */ /* 24*/ {0.002399999999999936335466552177389279DL, -1.326400217665140520231236684732746E-37DL, 1.0024028823053830DL}, /* 0.0023999999999999363354665521773892788673599782334859479768763315267254 */ /* 25*/ {0.002499999999999915237549223063807028DL, -3.598550941893420571118352652060420E-37DL, 1.0025031276057950DL}, /* 0.0024999999999999152375492230638070276401449058106579428881647347939580 */ /* 26*/ {0.002599999999999909691232535083372451DL, -2.080170317435304594148312432639319E-37DL, 1.0026033829312383DL}, /* 0.0025999999999999096912325350833724507919829682564695405851687567360681 */ /* 27*/ {0.002699999999999966310542813808501028DL, 2.520918902804661671534506914792743E-37DL, 1.0027036482827155DL}, /* 0.0026999999999999663105428138085010282520918902804661671534506914792743 */ /* 28*/ {0.002799999999999931990466972723162677DL, -6.63628451274417159591480854382229E-38DL, 1.0028039236612291DL}, /* 0.0027999999999999319904669727231626769336371548725582840408519145617771 */ /* 29*/ {0.002899999999999952548905347750076138DL, 6.90469959891714993025708526350103E-38DL, 1.0029042090677820DL}, /* 0.0028999999999999525489053477500761380690469959891714993025708526350103 */ /* 30*/ {0.002999999999999974064987769692197497DL, 2.972403357256809213010123789749420E-37DL, 1.0030045045033770DL}, /* 0.0029999999999999740649877696921974972972403357256809213010123789749420 */ /* 31*/ {0.003099999999999942349885884162253398DL, 1.097556448669742674451657930762603E-37DL, 1.0031048099690170DL}, /* 0.0030999999999999423498858841622533981097556448669742674451657930762603 */ /* 32*/ {0.003199999999999902617466468945751060DL, -4.601436017322314671216332781088332E-37DL, 1.0032051254657051DL}, /* 0.0031999999999999026174664689457510595398563982677685328783667218911668 */ /* 33*/ {0.003299999999999999424600489417535218DL, -1.478252619099834703167090640458590E-37DL, 1.0033054509944446DL}, /* 0.0032999999999999994246004894175352178521747380900165296832909359541410 */ /* 34*/ {0.003399999999999978308605331755828544DL, -4.808744576630104682240837577168280E-37DL, 1.0034057865562385DL}, /* 0.0033999999999999783086053317558285435191255423369895317759162422831720 */ /* 35*/ {0.003499999999999983181626938412718941DL, -3.677589343676413365467230018680207E-37DL, 1.0035061321520903DL}, /* 0.0034999999999999831816269384127189406322410656323586634532769981319793 */ /* 36*/ {0.003599999999999958277606956304032762DL, -1.59284178433729944590614332681327E-38DL, 1.0036064877830034DL}, /* 0.0035999999999999582776069563040327619840715821566270055409385667318673 */ /* 37*/ {0.003699999999999947134155927929514457DL, 4.578997729139367767703082105286181E-37DL, 1.0037068534499814DL}, /* 0.0036999999999999471341559279295144574578997729139367767703082105286181 */ /* 38*/ {0.003799999999999992912190928554255592DL, -3.541542264547828539539142035424877E-37DL, 1.0038072291540280DL}, /* 0.0037999999999999929121909285542555916458457735452171460460857964575123 */ /* 39*/ {0.003899999999999939164603025537634878DL, 1.473214664072677494464027465562023E-37DL, 1.0039076148961468DL}, /* 0.0038999999999999391646030255376348781473214664072677494464027465562023 */ /* 40*/ {0.003999999999999927930049157167710824DL, -2.021627915112355499890155508618673E-37DL, 1.0040080106773418DL}, /* 0.0039999999999999279300491571677108237978372084887644500109844491381327 */ /* 41*/ {0.004099999999999901619538091399732083DL, -3.931662115864895727124438443864117E-37DL, 1.0041084164986169DL}, /* 0.0040999999999999016195380913997320826068337884135104272875561556135883 */ /* 42*/ {0.004199999999999901848869857119211876DL, 3.670432838979653062998309741971700E-37DL, 1.0042088323609762DL}, /* 0.0041999999999999018488698571192118763670432838979653062998309741971700 */ /* 43*/ {0.004299999999999969808120909806883308DL, 1.19648344090272193377255220668829E-38DL, 1.0043092582654239DL}, /* 0.0042999999999999698081209098068833080119648344090272193377255220668829 */ /* 44*/ {0.004399999999999947129922157682228399DL, 9.7429415364129858639763359736956E-39DL, 1.0044096942129641DL}, /* 0.0043999999999999471299221576822283990097429415364129858639763359736956 */ /* 45*/ {0.004499999999999973734285991298161872DL, 7.10628626967216067076384345490594E-38DL, 1.0045101402046013DL}, /* 0.0044999999999999737342859912981618720710628626967216067076384345490594 */ /* 46*/ {0.004599999999999989964206485892511183DL, 3.37722331971858831701595101489364E-38DL, 1.0046105962413399DL}, /* 0.0045999999999999899642064858925111830337722331971858831701595101489364 */ /* 47*/ {0.004699999999999935737636974553234142DL, 3.824564678003816041153483280540874E-37DL, 1.0047110623241844DL}, /* 0.0046999999999999357376369745532341423824564678003816041153483280540874 */ /* 48*/ {0.004799999999999949580011340261286376DL, 2.287494518663337676284484025620175E-37DL, 1.0048115384541396DL}, /* 0.0047999999999999495800113402612863762287494518663337676284484025620175 */ /* 49*/ {0.004899999999999970470159581679539846DL, 2.080010664081774332653586333331270E-37DL, 1.0049120246322102DL}, /* 0.0048999999999999704701595816795398462080010664081774332653586333331270 */ /* 50*/ {0.004999999999999936932560614345534614DL, 2.907440075506350341189730768525575E-37DL, 1.0050125208594010DL}, /* 0.0049999999999999369325606143455346142907440075506350341189730768525575 */ /* 51*/ {0.005099999999999986010174619279534640DL, -7.49226784387386252880108003051140E-38DL, 1.0051130271367171DL}, /* 0.0050999999999999860101746192795346399250773215612613747119891996948860 */ /* 52*/ {0.005199999999999955748449113798610856DL, 4.917701700932931257093691038591343E-37DL, 1.0052135434651634DL}, /* 0.0051999999999999557484491137986108564917701700932931257093691038591343 */ /* 53*/ {0.005299999999999982163211162450383323DL, -1.575773592684010629384702816731650E-37DL, 1.0053140698457452DL}, /* 0.0052999999999999821632111624503833228424226407315989370615297183268350 */ /* 54*/ {0.005399999999999902312976054092351177DL, 1.311316623637348088371254996679697E-37DL, 1.0054146062794676DL}, /* 0.0053999999999999023129760540923511771311316623637348088371254996679697 */ /* 55*/ {0.005499999999999950598975500576745640DL, -2.009639475029458746852868056083049E-37DL, 1.0055151527673362DL}, /* 0.0054999999999999505989755005767456397990360524970541253147131943916951 */ /* 56*/ {0.005599999999999963023994386116666109DL, -4.768906456626033201950091385609253E-37DL, 1.0056157093103563DL}, /* 0.0055999999999999630239943861166661085231093543373966798049908614390747 */ /* 57*/ {0.005699999999999973971267601080584357DL, -4.456137020777351468970063010716326E-37DL, 1.0057162759095335DL}, /* 0.0056999999999999739712676010805843565543862979222648531029936989283674 */ /* 58*/ {0.005799999999999917830277414273159918DL, 8.04764585917654841704844265614868E-38DL, 1.0058168525658734DL}, /* 0.0057999999999999178302774142731599180804764585917654841704844265614868 */ /* 59*/ {0.005899999999999927271958157709947605DL, -1.162410313252122640892410490411705E-37DL, 1.0059174392803819DL}, /* 0.0058999999999999272719581577099476048837589686747877359107589509588295 */ /* 60*/ {0.005999999999999935532383895959909067DL, -2.993579491599309556770359727888619E-37DL, 1.0060180360540648DL}, /* 0.0059999999999999355323838959599090667006420508400690443229640272111381 */ /* 61*/ {0.006099999999999974678040273380718327DL, -3.768027279871761018366151194474413E-37DL, 1.0061186428879281DL}, /* 0.0060999999999999746780402733807183266231972720128238981633848805525587 */ /* 62*/ {0.006199999999999976782584885711088078DL, -3.670898133820869872542438418554496E-37DL, 1.0062192597829778DL}, /* 0.0061999999999999767825848857110880776329101866179130127457561581445504 */ /* 63*/ {0.006299999999999972710801165919241854DL, -1.86154785291864917468829784176158E-38DL, 1.0063198867402201DL}, /* 0.0062999999999999727108011659192418539813845214708135082531170215823842 */ /* 64*/ {0.006399999999999992697170944378118669DL, 2.642077153104879546815204274450841E-37DL, 1.0064205237606613DL}, /* 0.0063999999999999926971709443781186692642077153104879546815204274450841 */ /* 65*/ {0.006499999999999966984081067432206847DL, 2.190973900030727767704087850390990E-37DL, 1.0065211708453077DL}, /* 0.0064999999999999669840810674322068472190973900030727767704087850390990 */ /* 66*/ {0.006599999999999924546162854344536372DL, -2.473339430765169033832732431626390E-37DL, 1.0066218279951658DL}, /* 0.0065999999999999245461628543445363717526660569234830966167267568373610 */ /* 67*/ {0.006699999999999993030937917773998482DL, 3.895930083607962252580528551628354E-37DL, 1.0067224952112423DL}, /* 0.0066999999999999930309379177739984823895930083607962252580528551628354 */ /* 68*/ {0.006799999999999902087949946501509050DL, 3.32634458131883654657735259040860E-38DL, 1.0068231724945436DL}, /* 0.0067999999999999020879499465015090500332634458131883654657735259040860 */ /* 69*/ {0.006899999999999976681493823948530120DL, 1.581503952955507599271362135254605E-37DL, 1.0069238598460768DL}, /* 0.0068999999999999766814938239485301201581503952955507599271362135254605 */ /* 70*/ {0.006999999999999945153671145970201710DL, 3.533185374133590828736273337038321E-37DL, 1.0070245572668485DL}, /* 0.0069999999999999451536711459702017103533185374133590828736273337038321 */ /* 71*/ {0.007099999999999932437801864420682041DL, -1.124569238146672143802134408348873E-37DL, 1.0071252647578658DL}, /* 0.0070999999999999324378018644206820408875430761853327856197865591651127 */ /* 72*/ {0.007199999999999963437239301603468150DL, -1.126229986869745123558583235756226E-37DL, 1.0072259823201358DL}, /* 0.0071999999999999634372393016034681498873770013130254876441416764243774 */ /* 73*/ {0.007299999999999963065372641565340278DL, 2.489883076114805033559242606376250E-37DL, 1.0073267099546656DL}, /* 0.0072999999999999630653726415653402782489883076114805033559242606376250 */ /* 74*/ {0.007399999999999954811081939377238857DL, -9.00290609343470485174776816012945E-38DL, 1.0074274476624625DL}, /* 0.0073999999999999548110819393772388569099709390656529514825223183987055 */ /* 75*/ {0.007499999999999961426657365229907339DL, -2.935850072364068014186071018462989E-37DL, 1.0075281954445339DL}, /* 0.0074999999999999614266573652299073387064149927635931985813928981537011 */ /* 76*/ {0.007599999999999905675286934676274448DL, 1.387706240956188017787349912301427E-37DL, 1.0076289533018872DL}, /* 0.0075999999999999056752869346762744481387706240956188017787349912301427 */ /* 77*/ {0.007699999999999908069919502032280957DL, 4.658938377500461983441698675727273E-37DL, 1.0077297212355301DL}, /* 0.0076999999999999080699195020322809574658938377500461983441698675727273 */ /* 78*/ {0.007799999999999989095302727366878098DL, 4.293557180816538773055583101267744E-37DL, 1.0078304992464703DL}, /* 0.0077999999999999890953027273668780984293557180816538773055583101267744 */ /* 79*/ {0.007899999999999970034872827790994274DL, -4.65597497733265001555145825153202E-38DL, 1.0079312873357154DL}, /* 0.0078999999999999700348728277909942739534402502266734998444854174846798 */ /* 80*/ {0.007999999999999969076308122657984520DL, 4.591803574198067803007502074791379E-37DL, 1.0080320855042734DL}, /* 0.0079999999999999690763081226579845204591803574198067803007502074791379 */ /* 81*/ {0.008099999999999905186746400835367237DL, -3.46151846958789719526570277598104E-38DL, 1.0081328937531522DL}, /* 0.0080999999999999051867464008353672369653848153041210280473429722401896 */ /* 82*/ {0.008199999999999994119145040408370164DL, 2.045597364061223006795740022101201E-37DL, 1.0082337120833601DL}, /* 0.0081999999999999941191450404083701642045597364061223006795740022101201 */ /* 83*/ {0.008299999999999954866426200579611557DL, 3.597473429888188206089853956395207E-37DL, 1.0083345404959050DL}, /* 0.0082999999999999548664262005796115573597473429888188206089853956395207 */ /* 84*/ {0.008399999999999902371488628637780042DL, 1.150300193134754086327999066629848E-37DL, 1.0084353789917953DL}, /* 0.0083999999999999023714886286377800421150300193134754086327999066629848 */ /* 85*/ {0.008499999999999950704864020932981006DL, 1.088931385332407042225464572133042E-37DL, 1.0085362275720395DL}, /* 0.0084999999999999507048640209329810061088931385332407042225464572133042 */ /* 86*/ {0.008599999999999915624081926942944002DL, -4.289111746827240188121587535517167E-37DL, 1.0086370862376459DL}, /* 0.0085999999999999156240819269429440015710888253172759811878412464482833 */ /* 87*/ {0.008699999999999909515451179332179292DL, -3.119488610094169313212930121785059E-37DL, 1.0087379549896232DL}, /* 0.0086999999999999095154511793321792916880511389905830686787069878214941 */ /* 88*/ {0.008799999999999944740331172539067802DL, 7.6637271452068612966609666223824E-39DL, 1.0088388338289801DL}, /* 0.0087999999999999447403311725390678020076637271452068612966609666223824 */ /* 89*/ {0.008899999999999933675133099948193535DL, -5.39465735465107969917775791698656E-38DL, 1.0089397227567253DL}, /* 0.0088999999999999336751330999481935349460534264534892030082224208301344 */ /* 90*/ {0.008999999999999986063424823680307113DL, 3.916451878662975799280659238620603E-37DL, 1.0090406217738678DL}, /* 0.0089999999999999860634248236803071133916451878662975799280659238620603 */ /* 91*/ {0.009099999999999913436623645986953550DL, 2.167947224596748294285310260202282E-37DL, 1.0091415308814164DL}, /* 0.0090999999999999134366236459869535502167947224596748294285310260202282 */ /* 92*/ {0.009199999999999922842619817976014959DL, 5.04409233478720657084791419915129E-38DL, 1.0092424500803804DL}, /* 0.0091999999999999228426198179760149590504409233478720657084791419915129 */ /* 93*/ {0.009299999999999923117871658598794643DL, 4.058664104356623647643948269814280E-37DL, 1.0093433793717689DL}, /* 0.0092999999999999231178716585987946434058664104356623647643948269814280 */ /* 94*/ {0.009399999999999921284102371390697721DL, 1.476132130284581822628057078835741E-37DL, 1.0094443187565912DL}, /* 0.0093999999999999212841023713906977211476132130284581822628057078835741 */ /* 95*/ {0.009499999999999923434723236577804172DL, 2.671096911176662384377415042607315E-37DL, 1.0095452682358567DL}, /* 0.0094999999999999234347232365778041722671096911176662384377415042607315 */ /* 96*/ {0.009599999999999934725299541487378699DL, -2.154209822184693481095783378746521E-37DL, 1.0096462278105749DL}, /* 0.0095999999999999347252995414873786987845790177815306518904216621253479 */ /* 97*/ {0.009699999999999959364021370506538886DL, -4.034672316447823447641072105344248E-37DL, 1.0097471974817554DL}, /* 0.0096999999999999593640213705065388855965327683552176552358927894655752 */ /* 98*/ {0.009799999999999901577392901298544774DL, 1.996410546487510634818001085024846E-37DL, 1.0098481772504078DL}, /* 0.0097999999999999015773929012985447741996410546487510634818001085024846 */ /* 99*/ {0.009899999999999961709760300278596708DL, -1.92309389614924474910364590395838E-38DL, 1.0099491671175421DL}, /* 0.0098999999999999617097603002785967079807690610385075525089635409604162 */ /* 100*/ {0.009999999999999943030388655826201010DL, -2.372254121557678227216506080856409E-37DL, 1.0100501670841680DL}, /* 0.0099999999999999430303886558262010097627745878442321772783493919143591 */ /* 101*/ { 0.01009999999999994488755566145173056DL, -3.03605356869859805360283197008916E-37DL, 1.0101511771512956DL}, /* 0.010099999999999944887555661451730559696394643130140194639716802991084 */ #define EXPTBL2OFF 101 }; libdfp-1.0.17/ieee754r/t_logd128.h000066400000000000000000001426001504475242000162530ustar00rootroot00000000000000/* Generated table of ln(x) - (t - 1) table values. See declntables.c to understand how, or fix these values if such is neeeded. Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. This is adapted, derived, and in some spiritual form based on the version found in glibc's float128/ibm128 variant. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ static const struct { _Decimal128 t; _Decimal128 lnt; } lntvals[] = { { 1.0DL, 0.0DL}, { 1.01DL, -0.00004966914683191715178464245573925831DL}, { 1.02DL, -0.0001973727038202869739709331148996069DL}, { 1.03DL, -0.0004411977584555972673805943152875946DL}, { 1.04DL, -0.0007792868467187037307991034288801062DL}, { 1.05DL, -0.001209835830567996934625595776835341DL}, { 1.06DL, -0.001731091876024224474281648881494077DL}, { 1.07DL, -0.002341351526185194731584092345451414DL}, { 1.08DL, -0.003038958863871675015782955684798165DL}, { 1.09DL, -0.003822303758947667658666457159526764DL}, { 1.1DL, -0.004689820195675139956047876719234908DL}, { 1.11DL, -0.005639984675757232272642001414755547DL}, { 1.12DL, -0.006671314692996825261701680092842413DL}, { 1.13DL, -0.007782367275750799453851415752706743DL}, { 1.14DL, -0.008971737593595907214478119100172605DL}, { 1.15DL, -0.01023805762484130262847074433234466DL}, { 1.16DL, -0.01157999488172672201824663409046367DL}, { 1.17DL, -0.01299625119033524919200499395835840DL}, { 1.18DL, -0.01448556152242660800270041419085422DL}, { 1.19DL, -0.01604669287656198268109554805242215DL}, { 1.2DL, -0.01767844320604537378828197484548537DL}, { 1.21DL, -0.01937964039135027991209575343846982DL}, { 1.22DL, -0.02114914125483480986736168448493710DL}, { 1.23DL, -0.02298583061567387277397429940879512DL}, { 1.24DL, -0.02488862038305450327235434191001807DL}, { 1.25DL, -0.02685644868579024423370490969016550DL}, { 1.26DL, -0.02888827903661337072290757062232071DL}, { 1.27DL, -0.03098309952950009498854210165243602DL}, { 1.28DL, -0.03313992206847420211535805916149244DL}, { 1.29DL, -0.03535778162641925316789515910035567DL}, { 1.3DL, -0.03763573553250894796450401311904560DL}, { 1.31DL, -0.03997286278693982388655889819920252DL}, { 1.32DL, -0.04236826340172051374432985156472027DL}, { 1.33DL, -0.04482105776633760292160273403769515DL}, { 1.34DL, -0.04733038603717999894867879154682910DL}, { 1.35DL, -0.04989540754966191924948786537496366DL}, { 1.36DL, -0.05251530025203935953475192712107218DL}, { 1.37DL, -0.05518926015996645272079278138886302DL}, { 1.38DL, -0.05791650083088667641675271917783002DL}, { 1.39DL, -0.06069625285739961084719799049318463DL}, { 1.4DL, -0.06352776337878706949540658978300791DL}, { 1.41DL, -0.06641029560992308981978700267402900DL}, { 1.42DL, -0.06934312838683063728929625539751775DL}, { 1.43DL, -0.07232555572818408792055188983828051DL}, { 1.44DL, -0.07535688641209074757656394969097073DL}, { 1.45DL, -0.07843644356751696625195154378062917DL}, { 1.46DL, -0.08156356427975492952664193047200928DL}, { 1.47DL, -0.08473759920935506643003218555984325DL}, { 1.48DL, -0.08795791222397630483342299542092812DL}, { 1.49DL, -0.09122388004263222704355463426460793DL}, { 1.5DL, -0.09453489189183561802198688453565086DL}, { 1.51DL, -0.09789034917316703923974660988425212DL}, { 1.52DL, -0.1012896651418149797752591131063452DL}, { 1.53DL, -0.1047322645956559049959578176505505DL}, { 1.54DL, -0.1082175835744622094514544665022428DL}, { 1.55DL, -0.1117450690688447475060592516001836DL}, { 1.56DL, -0.1153141787385543217527859879645310DL}, { 1.57DL, -0.1189243806397833106115376729652532DL}, { 1.58DL, -0.1225751529611245644458052464291409DL}, { 1.59DL, -0.1262659837678598424962685334171449DL}, { 1.6DL, -0.1299963707542644463490629688516579DL}, { 1.61DL, -0.1337658210036283721238773341153526DL}, { 1.62DL, -0.1375738507557072930377698402204490DL}, { 1.63DL, -0.1414199851813290339710505432479785DL}, { 1.64DL, -0.1453037581638929453347552934149677DL}, { 1.65DL, -0.1492247120875107579780347612548858DL}, { 1.66DL, -0.1531823976315481351432785646191814DL}, { 1.67DL, -0.1571763735713362607762321326239490DL}, { 1.68DL, -0.1612062065848324432836885646284933DL}, { 1.69DL, -0.1652714710650178959290080262380912DL}, { 1.7DL, -0.1693717489378296037684568368112377DL}, { 1.71DL, -0.1735066294854315252364650036358235DL}, { 1.72DL, -0.1776757091746383257286761531065282DL}, { 1.73DL, -0.1818785914903124211024825209277369DL}, { 1.74DL, -0.1861148867735623400402335186261145DL}, { 1.75DL, -0.1903842120645773137291114994731734DL}, { 1.76DL, -0.1946861909499395863051108455708928DL}, { 1.77DL, -0.1990204534142622260246872987265051DL}, { 1.78DL, -0.2033866356960062203009352472407026DL}, { 1.79DL, -0.2077843801473363718581784793473262DL}, { 1.8DL, -0.2122133350978809918102688593811362DL}, { 1.81DL, -0.2166731547222656211968958707357195DL}, { 1.82DL, -0.2211634989112960174599106029020535DL}, { 1.83DL, -0.2256840331466704278893485690205880DL}, { 1.84DL, -0.2302344283791057489775337131840026DL}, { 1.85DL, -0.2348143609097665490671279051110936DL}, { 1.86DL, -0.2394235122748901212943412264456689DL}, { 1.87DL, -0.2440615691335047437245047135304726DL}, { 1.88DL, -0.2487282231581421623805679966802016DL}, { 1.89DL, -0.2534231709284489887448944551579716DL}, { 1.9DL, -0.2581461138276052240089640227965107DL}, { 1.91DL, -0.2628967579414614951860329571663613DL}, { 1.92DL, -0.2676748139603098201373449436971433DL}, { 1.93DL, -0.2724799970832058161810518559856697DL}, { 1.94DL, -0.2773120269247632365020291662065901DL}, { 1.95DL, -0.2821706274243445659864908976546965DL}, { 1.96DL, -0.2870555267575741389908131795660158DL}, { 1.97DL, -0.2919664572501028612561855802058974DL}, { 1.98DL, -0.2969031552935561317663167361003711DL}, { 1.99DL, -0.3018653612635989726258616175001912DL}, { 0.2DL, -0.8094379124341003746007593332261876DL}, {0.201DL, -0.8054503709230613009886571307668442DL}, {0.202DL, -0.8014875815809322917525439756819269DL}, {0.203DL, -0.7975492999403497197653495882480013DL}, {0.204DL, -0.7936352851379206615747302663410872DL}, {0.205DL, -0.7897452998437288735864516577894974DL}, {0.206DL, -0.7858791101925559718681399275414752DL}, {0.207DL, -0.7820364857167679784567310583978451DL}, {0.208DL, -0.7782171992808190783315584366550677DL}, {0.209DL, -0.7744210270173260479830033542001098DL}, { 0.21DL, -0.7706477482646683715353849290030230DL}, {0.211DL, -0.7668971455060705563120180985988125DL}, {0.212DL, -0.7631690043101245990750409821076817DL}, {0.213DL, -0.7594631132727119393292745946175328DL}, {0.214DL, -0.7557792639602855693323434255716391DL}, {0.215DL, -0.7521172508544742539803725174810579DL}, {0.216DL, -0.7484768712979720496165422889109858DL}, {0.217DL, -0.7448579254416775010194572960675557DL}, {0.218DL, -0.7412602161930480422594257903857144DL}, {0.219DL, -0.7376835491656362315666202696920243DL}, { 0.22DL, -0.7341277326297755145568072099454225DL}, {0.221DL, -0.7305925774643842357509523046146475DL}, {0.222DL, -0.7270778971098576068734013346409432DL}, {0.223DL, -0.7235835075220182934178691543299526DL}, {0.224DL, -0.7201092271270971998624610133190301DL}, {0.225DL, -0.7166548767777169200619652237556659DL}, {0.226DL, -0.7132202797098511740546107489788944DL}, {0.227DL, -0.7098052615007343770405927872195956DL}, {0.228DL, -0.7064096500276962818152374523263602DL}, {0.229DL, -0.7030332754278974036127387601204843DL}, { 0.23DL, -0.6996759700589416772292300775585323DL}, {0.231DL, -0.6963375684603435114914328057222579DL}, {0.232DL, -0.6930179073158270966190059673166513DL}, {0.233DL, -0.6897168254164364867517494893842051DL}, {0.234DL, -0.6864341636244356237927643271845460DL}, {0.235DL, -0.6831697648379780906322643610547313DL}, {0.236DL, -0.6799234739565269826034597474170419DL}, {0.237DL, -0.6766951378470058664857835856491560DL}, {0.238DL, -0.6734846053106623572818548812786098DL}, {0.239DL, -0.6702917270506263850908107697911835DL}, { 0.24DL, -0.6671163556401457483890413080716730DL}, {0.241DL, -0.6639583454914820565875630453422769DL}, {0.242DL, -0.6608175528254506545128550866646575DL}, {0.243DL, -0.6576938356415885950777481794404641DL}, {0.244DL, -0.6545870536889351844681210177111247DL}, {0.245DL, -0.6514970684374100672425095439405455DL}, {0.246DL, -0.6484237430497742473747336326349828DL}, {0.247DL, -0.6453669423541598559914594905999205DL}, {0.248DL, -0.6423265328171548778731136751362057DL}, {0.249DL, -0.6393023825174294371832569038391965DL}, { 0.25DL, -0.6362943611198906188344642429163531DL}, {0.251DL, -0.6333023398503531658353891250448394DL}, {0.252DL, -0.6303261914707137453236669038485083DL}, {0.253DL, -0.6273657902546168171852779542777672DL}, {0.254DL, -0.6244210119636004695893014348786237DL}, {0.255DL, -0.6214917338237109058084351760312527DL}, {0.256DL, -0.6185778345025745767161173923876801DL}, {0.257DL, -0.6156791940869172537021800492918372DL}, {0.258DL, -0.6127956940605196277686544923265433DL}, {0.259DL, -0.6099272172825993025805259495784657DL}, { 0.26DL, -0.6070736479666093225652633463452332DL}, {0.261DL, -0.6042348716594436420802118578461296DL}, {0.262DL, -0.6014107752210401984873182314253902DL}, {0.263DL, -0.5986012468043725009680480998480205DL}, {0.264DL, -0.5958061758358208883450891847909079DL}, {0.265DL, -0.5930254529959148433087458917978472DL}, {0.266DL, -0.5902589702004379775223620672638828DL}, {0.267DL, -0.5875066205818875223409135864607177DL}, {0.268DL, -0.5847682984712803735494381247730167DL}, {0.269DL, -0.5820438993802979458340211835578555DL}, { 0.27DL, -0.5793333199837622938502471986011513DL}, {0.271DL, -0.5766364581024361519571042908472306DL}, {0.272DL, -0.5739532126861397341355112603472598DL}, {0.273DL, -0.5712834837971773194998889421220686DL}, {0.274DL, -0.5686271725940668273215521146150507DL}, {0.275DL, -0.5659841813155657587905121196355880DL}, {0.276DL, -0.5633544132649870510175120524040177DL}, {0.277DL, -0.5607377727947985521845768145284818DL}, {0.278DL, -0.5581341652914999854479573237193723DL}, {0.279DL, -0.5555434971607714233343195656656840DL}, { 0.28DL, -0.5529656758128874440961659230091955DL}, {0.281DL, -0.5504006096483912869473360393599207DL}, {0.282DL, -0.5478482080440234644205463359002166DL}, {0.283DL, -0.5453083813388994274079872172579524DL}, {0.284DL, -0.5427810408209310118900555886237054DL}, {0.285DL, -0.5402660987134865260489423620165257DL}, {0.286DL, -0.5377634681622844625213112230644682DL}, {0.287DL, -0.5352730632225159430818582475725053DL}, {0.288DL, -0.5327947988461911221773232829171584DL}, {0.289DL, -0.5303285908697048915549051283068396DL}, { 0.29DL, -0.5278743560016173408527108770068168DL}, {0.291DL, -0.5254320118106445385420075054266052DL}, {0.292DL, -0.5230014767138553041274012636981969DL}, {0.293DL, -0.5205826699650697461141341012405944DL}, {0.294DL, -0.5181755116434554410307915187860309DL}, {0.295DL, -0.5157799226423172268371646571072074DL}, {0.296DL, -0.5133958246580766794341823286471158DL}, {0.297DL, -0.5110231401794374338062950753203862DL}, {0.298DL, -0.5086617924767326016443139674907956DL}, {0.299DL, -0.5063117055914506251937340906775779DL}, { 0.3DL, -0.5039728043259359926227462177618385DL}, {0.301DL, -0.5016450142332613234757791072640659DL}, {0.302DL, -0.4993282616072674138405059431104398DL}, {0.303DL, -0.4970224734727679097745308602175778DL}, {0.304DL, -0.4947275775759153543760184463325328DL}, {0.305DL, -0.4924435023747254287018259274012902DL}, {0.306DL, -0.4901701770297562795967171508767381DL}, {0.307DL, -0.4879075313949398984555117967706003DL}, {0.308DL, -0.4856554960085625840522137997284305DL}, {0.309DL, -0.4834140020843915898901268120771261DL}, { 0.31DL, -0.4811829815029451221068185848263712DL}, {0.311DL, -0.4789623668029029178579787986204103DL}, {0.312DL, -0.4767520911726546963535453211907186DL}, {0.313DL, -0.4745520884419838353752090547958823DL}, {0.314DL, -0.4723622930738836852122970061914408DL}, {0.315DL, -0.4701826401565039895573718135386738DL}, {0.316DL, -0.4680130653952249390465645796553286DL}, {0.317DL, -0.4658535051048564378542121947544813DL}, {0.318DL, -0.4637038962019602170970278666433326DL}, {0.319DL, -0.4615641761972924808087587537260517DL}, { 0.32DL, -0.4594342831883648209498223020778456DL}, {0.321DL, -0.4573141558521211873543303101072899DL}, {0.322DL, -0.4552037334377287467246366673415402DL}, {0.323DL, -0.4531029557594805117954123142921125DL}, {0.324DL, -0.4510117631898076676385291734466367DL}, {0.325DL, -0.4489300966523995667989682560353987DL}, {0.326DL, -0.4468578976154294085718098764741662DL}, {0.327DL, -0.4447951080848836602814126749213653DL}, {0.328DL, -0.4427416705979933199355146266411553DL}, {0.329DL, -0.4406975282167651601276709508377392DL}, { 0.33DL, -0.4386626245216111325787940944810734DL}, {0.331DL, -0.4366369036050741512693575244764558DL}, {0.332DL, -0.4346203100656485097440378978453690DL}, {0.333DL, -0.4326127890016932248953882191765940DL}, {0.334DL, -0.4306142860054366353769914658501367DL}, {0.335DL, -0.4286247471570706177831430344631822DL}, {0.336DL, -0.4266441190189328178844478978546809DL}, {0.337DL, -0.4246723486297753275491078094046614DL}, {0.338DL, -0.4227093834991182705297673594642788DL}, {0.339DL, -0.4207551716016867920765976335145452DL}, { 0.34DL, -0.4188096613719299783692161700374253DL}, {0.341DL, -0.4168728016986202620628664615456061DL}, {0.342DL, -0.4149445419195318998372243368620111DL}, {0.343DL, -0.4130248318161971367379161337235534DL}, {0.344DL, -0.4111136216087387003294354863327159DL}, {0.345DL, -0.4092108619507772952512169620941832DL}, {0.346DL, -0.4073165039244127957032418541539246DL}, {0.347DL, -0.4054304990352778597002975176672331DL}, {0.348DL, -0.4035527992076627146409928518523022DL}, {0.349DL, -0.4016833567797098888544928415544529DL}, { 0.35DL, -0.3998221244986776883298708326993610DL}, {0.351DL, -0.3979690555162712418147512117201969DL}, {0.352DL, -0.3961241033840399609058701787970805DL}, {0.353DL, -0.3942872220488402846582542468651226DL}, {0.354DL, -0.3924583658483626006254466319526927DL}, {0.355DL, -0.3906374895067212561237604983138709DL}, {0.356DL, -0.3888245481301065949016945804668903DL}, {0.357DL, -0.3870194972024979753038417658142607DL}, {0.358DL, -0.3852222925814367464589378125735139DL}, {0.359DL, -0.3834328904938581790058814784484126DL}, { 0.36DL, -0.3816512475319813664110281926073239DL}, {0.361DL, -0.3798773206492561320359195002773855DL}, {0.362DL, -0.3781110671563659957976552039619071DL}, {0.363DL, -0.3763524447172862725348419712003083DL}, {0.364DL, -0.3746014113453963920606699361282412DL}, {0.365DL, -0.3728579253996455483611061733883624DL}, {0.366DL, -0.3711219455807708024901079022467756DL}, {0.367DL, -0.3693934309275667804345424248946635DL}, {0.368DL, -0.3676723408132061235782930464101902DL}, {0.369DL, -0.3659586349416098653967205171706336DL}, { 0.37DL, -0.3642522733438669236678872383372813DL}, {0.371DL, -0.3625532163747019128041524815808551DL}, {0.372DL, -0.3608614247089904958951005596718566DL}, {0.373DL, -0.3591768593383215107182397589514285DL}, {0.374DL, -0.3574994815676051183252640467566602DL}, {0.375DL, -0.3558292530117262368564511274520040DL}, {0.376DL, -0.3541661355922425369813273299063892DL}, {0.377DL, -0.3525100915341262888172148901258624DL}, {0.378DL, -0.3508610833625493633456537883841592DL}, {0.379DL, -0.3492190738997107042367377803994647DL}, { 0.38DL, -0.3475840262617055986097233560226983DL}, {0.381DL, -0.3459559038554360876112883194142745DL}, {0.382DL, -0.3443346703755618697867922903925489DL}, {0.383DL, -0.3427202898014910620609198269006224DL}, {0.384DL, -0.3411127263944101947381042769233309DL}, {0.385DL, -0.3395119446943528282859187094185960DL}, {0.386DL, -0.3379179095173061907818111892118573DL}, {0.387DL, -0.3363305859523552457906413768621942DL}, {0.388DL, -0.3347499393588636111027884994327778DL}, {0.389DL, -0.3331759353636907592053541304209200DL}, { 0.39DL, -0.3316085398584449405872502308808841DL}, {0.391DL, -0.3300477189967712809976869143697700DL}, {0.392DL, -0.3284934391916745135915725127922035DL}, {0.393DL, -0.3269456671128758165093051159610410DL}, {0.394DL, -0.3254043696842032358569449134320851DL}, {0.395DL, -0.3238695140810151832802694893454941DL}, {0.396DL, -0.3223410677276565063670760693265588DL}, {0.397DL, -0.3208189982949466389705423338762333DL}, {0.398DL, -0.3193032736976993472266209507263789DL}, {0.399DL, -0.3177938620922735955443489517995337DL}, { 0.4DL, -0.3162907318741550651835272117680111DL}, {0.401DL, -0.3147938516755678662032952767037429DL}, {0.402DL, -0.3133031903631159915714250093086676DL}, {0.403DL, -0.3118187170354540700713225979454168DL}, {0.404DL, -0.3103404010209869823353118542237503DL}, {0.405DL, -0.3088682118755979118722340831368022DL}, {0.406DL, -0.3074021193804044103481174667898247DL}, {0.407DL, -0.3059420935395420636239351150565162DL}, {0.408DL, -0.3044881045779753521574981448829107DL}, {0.409DL, -0.3030401229393353063404521549247065DL}, { 0.41DL, -0.3015981192837835641692195363313208DL}, {0.411DL, -0.3001620644859024453435389991507015DL}, {0.412DL, -0.2987319296326106624509078060832987DL}, {0.413DL, -0.2973076860211042963325712468902153DL}, {0.414DL, -0.2958893051568226690394989369396685DL}, {0.415DL, -0.2944767587514387539777428075355345DL}, {0.416DL, -0.2930700187208737689143263151968912DL}, {0.417DL, -0.2916690571833356034699442082550231DL}, {0.418DL, -0.2902738464573807385657712327419332DL}, {0.419DL, -0.2888843590599993210210404423676022DL}, { 0.42DL, -0.2875005677047230621181528075448464DL}, {0.421DL, -0.2861224452997556344652581356559951DL}, {0.422DL, -0.2847499649461252468947859771406359DL}, {0.423DL, -0.2833830999358590824425332204358675DL}, {0.424DL, -0.2820218237501792896578088606495051DL}, {0.425DL, -0.2806661100577202226029210797275908DL}, {0.426DL, -0.2793159327127666299120424731593563DL}, {0.427DL, -0.2779712657535124981972325171842981DL}, {0.428DL, -0.2766320834003402599151113041134625DL}, {0.429DL, -0.2752983600541200805432981076001190DL}, { 0.43DL, -0.2739700702945289445631403960228814DL}, {0.431DL, -0.2726471888783892643063075577280424DL}, {0.432DL, -0.2713296907380267401993101674528092DL}, {0.433DL, -0.2700175509796472053336897900805487DL}, {0.434DL, -0.2687107448817321916022251746093791DL}, {0.435DL, -0.2674092478934529588746977615424677DL}, {0.436DL, -0.2661130356331027328421936689275378DL}, {0.437DL, -0.2648220838865469012381941003550430DL}, {0.438DL, -0.2635363686056909221493881482338478DL}, {0.439DL, -0.2622558659069657020607622343103389DL}, { 0.44DL, -0.2609805520698302051395750884872460DL}, {0.441DL, -0.2597104035352910590527784033216818DL}, {0.442DL, -0.2584453969044389263337201831564709DL}, {0.443DL, -0.2571855089370014139679671062078169DL}, {0.444DL, -0.2559307165499122974561692131827666DL}, {0.445DL, -0.2546809968158968391353994901570558DL}, {0.446DL, -0.2534363269620729840006370328717760DL}, {0.447DL, -0.2521966843685682196663008520264464DL}, {0.448DL, -0.2509620465671518904452288918608535DL}, {0.449DL, -0.2497323912398827588004525732269826DL}, { 0.45DL, -0.2485076962177716106447331022974894DL}, {0.451DL, -0.2472879394794587041252674130505557DL}, {0.452DL, -0.2460730991499058646373786275207178DL}, {0.453DL, -0.2448631534991030318624928276460906DL}, {0.454DL, -0.2436580809407890676233606657614190DL}, {0.455DL, -0.2424578600311866362943748458184066DL}, {0.456DL, -0.2412624694677509723980053308681837DL}, {0.457DL, -0.2400718880879323528608429828996091DL}, {0.458DL, -0.2388860948679520941955066386623077DL}, {0.459DL, -0.2377050689215918976187040354123890DL}, { 0.46DL, -0.2365287894989963678119979561003557DL}, {0.461DL, -0.2353572359854885336812491707785661DL}, {0.462DL, -0.2341903879003982020742006842640813DL}, {0.463DL, -0.2330282248959029779741271827943827DL}, {0.464DL, -0.2318707267558817872017738458584747DL}, {0.465DL, -0.2307178733947807401288054693620221DL}, {0.466DL, -0.2295696448564911773345173679260286DL}, {0.467DL, -0.2284260213132397405244430753188236DL}, {0.468DL, -0.2272869830644903143755322057263695DL}, {0.469DL, -0.2261525105358576872785496242461901DL}, { 0.47DL, -0.2250225842780327812150322395965547DL}, {0.471DL, -0.2238971849657193032342838907270917DL}, {0.472DL, -0.2227762933965816731862276259588653DL}, {0.473DL, -0.2216598904902040845191882727421163DL}, {0.474DL, -0.2205479572870605570685514641909794DL}, {0.475DL, -0.2194404749474958428434282657128638DL}, {0.476DL, -0.2183374247507170478646227598204332DL}, {0.477DL, -0.2172387880937958351190147511789834DL}, {0.478DL, -0.2161445464906810756735786483330070DL}, {0.479DL, -0.2150546815712218169372965326534760DL}, { 0.48DL, -0.2139691750802004389718091866134964DL}, {0.481DL, -0.2128880088763758716323912514563269DL}, {0.482DL, -0.2118111649315367471703309238841003DL}, {0.483DL, -0.2107386253295643647466235518771911DL}, {0.484DL, -0.2096703722655053450956229652064809DL}, {0.485DL, -0.2086063880446538553364934091229433DL}, {0.486DL, -0.2075466550816432856605160579822875DL}, {0.487DL, -0.2064911558995472613240635328025471DL}, {0.488DL, -0.2054398731289898750508888962529482DL}, {0.489DL, -0.2043927895072650265937967610098170DL}, { 0.49DL, -0.2033498878774647578252774224823690DL}, {0.491DL, -0.2023111511876164733197840390380080DL}, {0.492DL, -0.2012765624898289379575015111768062DL}, {0.493DL, -0.2002461049394469446211677138180545DL}, {0.494DL, -0.1992197617942145465742273691417439DL}, {0.495DL, -0.1981975164134467506007809790167243DL}, {0.496DL, -0.1971793522572095684558815536780291DL}, {0.497DL, -0.1961652528855083256191670880968788DL}, {0.498DL, -0.1951552019574841277660247823810199DL}, {0.499DL, -0.1941491832306183867688832260686996DL}, { 0.5DL, -0.1931471805599453094172321214581766DL}, {0.501DL, -0.1921491778972722533989783503857876DL}, {0.502DL, -0.1911551592904078564181570035866628DL}, {0.503DL, -0.1901651088823978456352132484174826DL}, {0.504DL, -0.1891790109107684359064347823903318DL}, {0.505DL, -0.1881968497067772265690167639139158DL}, {0.506DL, -0.1872186096946715077680458328195906DL}, {0.507DL, -0.1862442753909538885517542439999297DL}, {0.508DL, -0.1852738314036551601720693134204471DL}, {0.509DL, -0.1843072624316143092191105079933340DL}, { 0.51DL, -0.1833445532637655963912030545730762DL}, {0.511DL, -0.1823856887784326178565127631713703DL}, {0.512DL, -0.1814306539426292672988852709295035DL}, {0.513DL, -0.1804794338113675178592112213976620DL}, {0.514DL, -0.1795320135269719442849479278336606DL}, {0.515DL, -0.1785883783184009066846127157734642DL}, {0.516DL, -0.1776485135005743183514223708683667DL}, {0.517DL, -0.1767124044737079211710801163157896DL}, {0.518DL, -0.1757800367226539931632938281202892DL}, {0.519DL, -0.1748513958162484137252287386895754DL}, { 0.52DL, -0.1739264674066640131480312248870567DL}, {0.521DL, -0.1730052372287701339650786575352562DL}, {0.522DL, -0.1720876910994983326629797363879530DL}, {0.523DL, -0.1711738149172141512438311871399973DL}, {0.524DL, -0.1702635946610948890700861099672136DL}, {0.525DL, -0.1693570163905133063518577172350119DL}, {0.526DL, -0.1684540662444271915508159783898440DL}, {0.527DL, -0.1675547304407747258752754216376089DL}, {0.528DL, -0.1666589952758755789278570633327313DL}, {0.529DL, -0.1657668471238376704404687004327004DL}, { 0.53DL, -0.1648782724359695338915137703396706DL}, {0.531DL, -0.1639932577401982186474335164883436DL}, {0.532DL, -0.1631117896404926681051299458057062DL}, {0.533DL, -0.1622338548162925121337235494503664DL}, {0.534DL, -0.1613594400219422129236814650025411DL}, {0.535DL, -0.1604885320861305041488162138036280DL}, {0.536DL, -0.1596211179113350641322060033148402DL}, {0.537DL, -0.1587571844732723644809246971091647DL}, {0.538DL, -0.1578967188203526364167890620996789DL}, {0.539DL, -0.1570397080731398977813252992016039DL}, { 0.54DL, -0.1561861394238169844330150771429747DL}, {0.541DL, -0.1553360001356555304837887514684425DL}, {0.542DL, -0.1544892775424908425398721693890540DL}, {0.543DL, -0.1536459590482016138196420884975580DL}, {0.544DL, -0.1528060321261944247182791388890832DL}, {0.545DL, -0.1519694843188929770758985786177033DL}, {0.546DL, -0.1511363032372320100826568206638920DL}, {0.547DL, -0.1503064765601558464212417424554319DL}, {0.548DL, -0.1494799920341215179043199931568741DL}, {0.549DL, -0.1486568374726064205120947867824265DL}, { 0.55DL, -0.1478370007556204493732799981774115DL}, {0.551DL, -0.1470204698292225648616748998033275DL}, {0.552DL, -0.1462072327050417416002799309458411DL}, {0.553DL, -0.1453972774598022527756760791285020DL}, {0.554DL, -0.1445905922348532427673446930703052DL}, {0.555DL, -0.1437871652357025416898741228729321DL}, {0.556DL, -0.1429869847315546760307252022611957DL}, {0.557DL, -0.1421900390548530301425474272083109DL}, {0.558DL, -0.1413963166008261139170874442075074DL}, {0.559DL, -0.1406058058270378925276444091419270DL}, { 0.56DL, -0.1398184952529421346789338015510190DL}, {0.561DL, -0.1390343734594407363472509312923111DL}, {0.562DL, -0.1382534290884459775301039179017441DL}, {0.563DL, -0.1374756508424466700531373754353516DL}, {0.564DL, -0.1367010274840781550033142144420401DL}, {0.565DL, -0.1359295478356961088710835372108833DL}, {0.566DL, -0.1351612007789541179907550957997758DL}, {0.567DL, -0.1343959752543849813676406729198101DL}, {0.568DL, -0.1336338602609857024728234671655288DL}, {0.569DL, -0.1328748448558061310717895546689541DL}, { 0.57DL, -0.1321189181535412166317102405583492DL}, {0.571DL, -0.1313660693261268353240081681134635DL}, {0.572DL, -0.1306162876023391531040791016062916DL}, {0.573DL, -0.1298695622673974878087791749281998DL}, {0.574DL, -0.1291258826625706336646261261143287DL}, {0.575DL, -0.1283852381847866120457028657905212DL}, {0.576DL, -0.1276476182862458127600911614589818DL}, {0.577DL, -0.1269130124740374905773990567824042DL}, {0.578DL, -0.1261814103097595821376730068486630DL}, {0.579DL, -0.1254528014091418088037980737475082DL}, { 0.58DL, -0.1247271754416720314354787555486402DL}, {0.581DL, -0.1240045221302258234731493973185424DL}, {0.582DL, -0.1232848312506992291247753839684286DL}, {0.583DL, -0.1225680926316446738475616470589056DL}, {0.584DL, -0.1218542961539099947101691422400203DL}, {0.585DL, -0.1211434317502805586092371154165350DL}, {0.586DL, -0.1204354894051244366969019797824179DL}, {0.587DL, -0.1197304591540406037536738664834199DL}, {0.588DL, -0.1190283310835101316135593973278543DL}, {0.589DL, -0.1183290953305503461157826076228819DL}, { 0.59DL, -0.1176327420823719174199325356490308DL}, {0.591DL, -0.1169392615760388538789317979677359DL}, {0.592DL, -0.1162486440981313700169502071889392DL}, {0.593DL, -0.1155608799844115995073546204029440DL}, {0.594DL, -0.1148759596194921243890629538622096DL}, {0.595DL, -0.1141938734365072920983276695105987DL}, {0.596DL, -0.1135146119167872922270818460326190DL}, {0.597DL, -0.1128381655895349652486078352620297DL}, {0.598DL, -0.1121645250315053157765019692194013DL}, {0.599DL, -0.1114936808666877032437751911716359DL}, { 0.6DL, -0.1108256237659906832055140963036619DL}, {0.601DL, -0.1101603444469294727808938574739465DL}, {0.602DL, -0.1094978336733160140585469858058893DL}, {0.603DL, -0.1088380822549516095934118938443185DL}, {0.604DL, -0.1081810810473221044232738216522632DL}, {0.605DL, -0.1075268209512955893293278748966464DL}, {0.606DL, -0.1068752929128226003572987387594012DL}, {0.607DL, -0.1062264879226387899040021292064009DL}, {0.608DL, -0.1055803970159700449587863248743562DL}, {0.609DL, -0.1049370112722400283701043513254756DL}, { 0.61DL, -0.1042963218147801192845938059431137DL}, {0.611DL, -0.1036583198105417291795362527156003DL}, {0.612DL, -0.1030229964698109701794850294185615DL}, {0.613DL, -0.1023903430459256526142417704770417DL}, {0.614DL, -0.1017603508349945890382796753124238DL}, {0.615DL, -0.1011330111756191821912064208669717DL}, {0.616DL, -0.1005083154486172746349816782702539DL}, {0.617DL, -0.09988625507674923805640268544290180DL}, {0.618DL, -0.09926682152444628047289469061894953DL}, {0.619DL, -0.09865000629754094982593897390336889DL}, { 0.62DL, -0.09803580094299981268958646336819464DL}, {0.621DL, -0.09742419704865828706148582147531939DL}, {0.622DL, -0.09681518624295760844074667716223378DL}, {0.623DL, -0.09620876019468390863080607994006367DL}, {0.624DL, -0.09560491061270938693631319973254204DL}, {0.625DL, -0.09500362924573555365093703114834206DL}, {0.626DL, -0.09440490788203852595797693333770570DL}, {0.627DL, -0.09380873834921635658775811727758408DL}, {0.628DL, -0.09321511251393837579506488473326424DL}, {0.629DL, -0.09262402228169652743634407514851892DL}, { 0.63DL, -0.09203545959655868014013969208049728DL}, {0.631DL, -0.09144941644092389477523633038749854DL}, {0.632DL, -0.09086588483527962962933245819715200DL}, {0.633DL, -0.09028485683796086491677286167628680DL}, {0.634DL, -0.08970632454491112843698007329630475DL}, {0.635DL, -0.08913028008944540440577422311061259DL}, {0.636DL, -0.08855671564201490767979574518515601DL}, {0.637DL, -0.08798562340997370578978143560141456DL}, {0.638DL, -0.08741699563734717139152663226787515DL}, {0.639DL, -0.08685082460460224793402935769500712DL}, { 0.64DL, -0.08628710262841951153259018061966901DL}, {0.641DL, -0.08572582206146701222056782605149244DL}, {0.642DL, -0.08516697529217587793709818864911335DL}, {0.643DL, -0.08461055474451766478940586050505954DL}, {0.644DL, -0.08405655287778343730740454588336364DL}, {0.645DL, -0.08350496218636456258512728055853224DL}, {0.646DL, -0.08295577519953520237818019283393598DL}, {0.647DL, -0.08240898448123648739890514839555221DL}, {0.648DL, -0.08186458262986235822129705198846010DL}, {0.649DL, -0.08132256227804705737598041236826570DL}, { 0.65DL, -0.08078291609245425738173613457722217DL}, {0.651DL, -0.08024563677356780962421205914502998DL}, {0.652DL, -0.07971071705548409915457775501598961DL}, {0.653DL, -0.07917814970570599064102329285486754DL}, {0.654DL, -0.07864792752493835086418055346318870DL}, {0.655DL, -0.07812004334688513330379101965737909DL}, {0.656DL, -0.07759449003804801051828250518297876DL}, {0.657DL, -0.07707126049752654017137503276949864DL}, {0.658DL, -0.07655034765681985071043882937956262DL}, {0.659DL, -0.07603174447962983285010051323326852DL}, { 0.66DL, -0.07551544396166582316156197302289684DL}, {0.661DL, -0.07500143913045076621328477557438535DL}, {0.662DL, -0.07448972304512884185212540301827925DL}, {0.663DL, -0.07398028879627454435570706769212178DL}, {0.664DL, -0.07347312950570320032680577638719247DL}, {0.665DL, -0.07296823832628291233883485549587172DL}, {0.666DL, -0.07246560844174791547815609771841748DL}, {0.667DL, -0.07196523306651333406394949988098490DL}, {0.668DL, -0.07146710544549132595975934439196012DL}, {0.669DL, -0.07097121885390860202262391740742689DL}, { 0.67DL, -0.07047756659712530836591091300500566DL}, {0.671DL, -0.06998614201045525924064168266234858DL}, {0.672DL, -0.06949693845898750846721577639650435DL}, {0.673DL, -0.06900994933740924747506319969675442DL}, {0.674DL, -0.06852516806983001813187568794648484DL}, {0.675DL, -0.06804258810960722866671998683314023DL}, {0.676DL, -0.06756220293917296111253523800610228DL}, {0.677DL, -0.06708400606986205881328242873258060DL}, {0.678DL, -0.06660799104174148265936551205636868DL}, {0.679DL, -0.06613415142344092483189999890595118DL}, { 0.68DL, -0.06566248081198466895198404857924874DL}, {0.681DL, -0.06519297283262468564534755029706987DL}, {0.682DL, -0.06472562113867495264563434008742954DL}, {0.683DL, -0.06426041941134698867112921524303067DL}, {0.684DL, -0.06379736135958659041999221540383454DL}, {0.685DL, -0.06333644071991176213802490284703959DL}, {0.686DL, -0.06287765125625182732068401226537687DL}, {0.687DL, -0.06242098675978771221749352319795860DL}, {0.688DL, -0.06196644104879339091220336487453931DL}, {0.689DL, -0.06151400796847848185601778345871625DL}, { 0.69DL, -0.06106368139083198583398484063600659DL}, {0.691DL, -0.06061545521446715544621629423013745DL}, {0.692DL, -0.06016932336446748628600973269574802DL}, {0.693DL, -0.05972527979223382009618756879973218DL}, {0.694DL, -0.05928331847533255028306539620905652DL}, {0.695DL, -0.05884343341734492026443011195136120DL}, {0.696DL, -0.05840561864771740522376073039412561DL}, {0.697DL, -0.05796986822161316793767637314255850DL}, {0.698DL, -0.05753617621976457943726072009627635DL}, {0.699DL, -0.05710453674832679535650425246167944DL}, { 0.7DL, -0.05667494393873237891263871124118448DL}, {0.701DL, -0.05624739194754696155362594002509205DL}, {0.702DL, -0.05582187495632593239751909026202034DL}, {0.703DL, -0.05539838717147214767685126113379192DL}, {0.704DL, -0.05497692282409465148863805733890391DL}, {0.705DL, -0.05455747616986839923701912413220557DL}, {0.706DL, -0.05414004148889497524102212540694605DL}, {0.707DL, -0.05372461308556429606442335369692374DL}, {0.708DL, -0.05331118528841729120821451049451616DL}, {0.709DL, -0.05289975245000955288877730725386952DL}, { 0.71DL, -0.05249030894677594670652837685569432DL}, {0.711DL, -0.05208284917889617509053834872663029DL}, {0.712DL, -0.05167736757016128548446245900871370DL}, {0.713DL, -0.05127385856784111531805720770053929DL}, {0.714DL, -0.05087231664255266588660964435608408DL}, {0.715DL, -0.05047273628812939733778401129645708DL}, {0.716DL, -0.05007511202149143704170569111533731DL}, {0.717DL, -0.04967943838251669369556553286865782DL}, {0.718DL, -0.04928570993391286958864935699023608DL}, {0.719DL, -0.04889392126109036352748830216639912DL}, { 0.72DL, -0.04850406697203605699379607114914730DL}, {0.721DL, -0.04811614169718797618001930555647207DL}, {0.722DL, -0.04773014008931082261868737881920898DL}, {0.723DL, -0.04734605682337236519231780841975118DL}, {0.724DL, -0.04696388659642068638042308250373056DL}, {0.725DL, -0.04658362412746227566918366523880574DL}, {0.726DL, -0.04620526415734096311760984974213175DL}, {0.727DL, -0.04582880144861768614152139520982473DL}, {0.728DL, -0.04545423078545108264343781467006458DL}, {0.729DL, -0.04508154697347890368250294251793839DL}, { 0.73DL, -0.04471074483970023894387405193018584DL}, {0.731DL, -0.04434181923235854833159723283411905DL}, {0.732DL, -0.04397476502082549307287578078859904DL}, {0.733DL, -0.04360957709548555978482566526799432DL}, {0.734DL, -0.04324625036762147101731030343648689DL}, {0.735DL, -0.04288477976930037584726430701801982DL}, {0.736DL, -0.04252516025326081416106092495201366DL}, {0.737DL, -0.04216738679280044832195878972424057DL}, {0.738DL, -0.04181145438166455597948839571245706DL}, {0.739DL, -0.04145735803393527783681548897255429DL}, { 0.74DL, -0.04110509278392161425065511687910468DL}, {0.741DL, -0.04075465368605016459621425367739478DL}, {0.742DL, -0.04040603581475660338692036012267855DL}, {0.743DL, -0.04005923426437788719535552441857974DL}, {0.744DL, -0.03971424414904518647786843821368000DL}, {0.745DL, -0.03937106060257753646078675572278450DL}, {0.746DL, -0.03902967877837620130100763749325192DL}, {0.747DL, -0.03869009384931974578801166691667076DL}, {0.748DL, -0.03835230100765980890803192529848365DL}, {0.749DL, -0.03801629546491757364422280358663589DL}, { 0.75DL, -0.03768207245178092743921900599382743DL}, {0.751DL, -0.03734962721800230779846096118615869DL}, {0.752DL, -0.03701895503229722756409520844821264DL}, {0.753DL, -0.03669005118224347444014388812231368DL}, {0.754DL, -0.03636291097418097939998276866768584DL}, {0.755DL, -0.03603752973311234865697873134242869DL}, {0.756DL, -0.03571390280260405392842166692598264DL}, {0.757DL, -0.03539202554468827577164859216015107DL}, {0.758DL, -0.03507189333976539481950565894128815DL}, {0.759DL, -0.03475350158650712579003271735524150DL}, { 0.76DL, -0.03443684570176028919249123456452174DL}, {0.761DL, -0.03412192112045121569859561619632300DL}, {0.762DL, -0.03380872329549077819405619795609796DL}, {0.763DL, -0.03349724769768004657130516840071124DL}, {0.764DL, -0.03318748981561656036956016893437234DL}, {0.765DL, -0.03287944515560121441318993910872704DL}, {0.766DL, -0.03257310924154575264368770544244580DL}, {0.767DL, -0.03226847761488086538443654876807639DL}, {0.768DL, -0.03196554583446488532087215546515437DL}, {0.769DL, -0.03166430947649307752161751813201498DL}, { 0.77DL, -0.03136476413440751886868658796041939DL}, {0.771DL, -0.03106690541880756230693481236931147DL}, {0.772DL, -0.03077072895736088136457906775368072DL}, {0.773DL, -0.03047623039471509043782280226625013DL}, {0.774DL, -0.03018340539240993637340925540401761DL}, {0.775DL, -0.02989224962879005692329137305836013DL}, {0.776DL, -0.02960275879891830168555637797460120DL}, {0.777DL, -0.02931492861448961118528071265594002DL}, {0.778DL, -0.02902875480374544978812200896274340DL}, {0.779DL, -0.02874423311138878817818355912783150DL}, { 0.78DL, -0.02846135929849963117001810942270754DL}, {0.781DL, -0.02818012914245108666257625357492923DL}, {0.782DL, -0.02790053843682597158045479291159340DL}, {0.783DL, -0.02762258299133395068496662092360390DL}, {0.784DL, -0.02734625863172920417434039133402689DL}, {0.785DL, -0.02707156119972862002876979442342973DL}, {0.786DL, -0.02679848655293050709207299450286446DL}, {0.787DL, -0.02652703056473382491739691556867683DL}, {0.788DL, -0.02625718912425792643971279197390851DL}, {0.789DL, -0.02598895813626280957280286292549483DL}, { 0.79DL, -0.02572233352106987386303736788731749DL}, {0.791DL, -0.02545731121448317836649012699389122DL}, {0.792DL, -0.02519388716771119694984394786838221DL}, {0.793DL, -0.02493205734728906724909781906215927DL}, {0.794DL, -0.02467181773500132955331021241805677DL}, {0.795DL, -0.02441316432780515191350065487532151DL}, {0.796DL, -0.02415609313775403780938882926820228DL}, {0.797DL, -0.02390060019192201273888056069315405DL}, {0.798DL, -0.02364668153232828612711683034135708DL}, {0.799DL, -0.02339433321586238498348907640779238DL}, { 0.8DL, -0.02314355131420975576629509030983450DL}, {0.801DL, -0.02289433191377783094566834953819199DL}, {0.802DL, -0.02264667111562255678606315524556632DL}, {0.803DL, -0.02240056503537537889992192864942075DL}, {0.804DL, -0.02215600980317068215419288785049103DL}, {0.805DL, -0.02191300156357368154110945557352914DL}, {0.806DL, -0.02167153647550876065409047648724024DL}, {0.807DL, -0.02143161071218825443877594663532980DL}, {0.808DL, -0.02119322046104167291807973276557376DL}, {0.809DL, -0.02095636192364536261872190136650744DL}, { 0.81DL, -0.02072103131565260245500196167862560DL}, {0.811DL, -0.02048722486672413085359369032419214DL}, {0.812DL, -0.02025493882045910093088534533164815DL}, {0.813DL, -0.02002416943432646056185905392470488DL}, {0.814DL, -0.01979491297959675420670299359833959DL}, {0.815DL, -0.01956716574127434338828266470615511DL}, {0.816DL, -0.01934092401803004274026602342473411DL}, {0.817DL, -0.01911618412213416857210441881939205DL}, {0.818DL, -0.01889294237938999692322003346652997DL}, {0.819DL, -0.01867119512906762810464370519954288DL}, { 0.82DL, -0.01845093872383825475198741487314426DL}, {0.821DL, -0.01823216952970883043902613421133133DL}, {0.822DL, -0.01801488392595713592630687769252496DL}, {0.823DL, -0.01779907830506724014410139860771448DL}, {0.824DL, -0.01758474907266535303367568462512210DL}, {0.825DL, -0.01737189264745606739526688271306234DL}, {0.826DL, -0.01716050546115898691533912543203870DL}, {0.827DL, -0.01695058395844573756963651716975218DL}, {0.828DL, -0.01674212459687735962226681548149196DL}, {0.829DL, -0.01653512384684207746453562421051064DL}, { 0.83DL, -0.01632957819149344456051068607735796DL}, {0.831DL, -0.01612548412668886078933157760595608DL}, {0.832DL, -0.01592283816092845949709419373871461DL}, {0.833DL, -0.01572163681529436159373425929360663DL}, {0.834DL, -0.01552187662339029405271208679684657DL}, {0.835DL, -0.01532355413128157019346425408212562DL}, {0.836DL, -0.01512666589743542914853911128375665DL}, {0.837DL, -0.01493120849266173193907432874315830DL}, {0.838DL, -0.01473717850005401160380832090942566DL}, {0.839DL, -0.01454457251493087484814555565346759DL}, { 0.84DL, -0.01435338714477775270092068608666984DL}, {0.841DL, -0.01416361900918899768743029932926941DL}, {0.842DL, -0.01397526473981032504802601419781858DL}, {0.843DL, -0.01378832098028159555209080243739498DL}, {0.844DL, -0.01360278438617993747755385568245937DL}, {0.845DL, -0.01341865162496320534624014769626777DL}, {0.846DL, -0.01323591937591377302530109897769094DL}, {0.847DL, -0.01305458433008265882473446467965429DL}, {0.848DL, -0.01287464319023398024057673919132858DL}, {0.849DL, -0.01269609267078973601274198033542671DL}, { 0.85DL, -0.01251892949777491318568895826941424DL}, {0.851DL, -0.01234315040876291687912586121144934DL}, {0.852DL, -0.01216875215282132049481035170117969DL}, {0.853DL, -0.01199573149045793410417445051411850DL}, {0.854DL, -0.01182408519356718878000039572612158DL}, {0.855DL, -0.01165381004537683465369712509400004DL}, {0.856DL, -0.01148490284039495049787918265528592DL}, {0.857DL, -0.01131736038435726265193245576034404DL}, {0.858DL, -0.01115117949417477112606598614194245DL}, {0.859DL, -0.01098635699788168073699792688146305DL}, { 0.86DL, -0.01082288973458363514590827456470481DL}, {0.861DL, -0.01066077455440625168661301064997960DL}, {0.862DL, -0.01050000831844395488907543626986580DL}, {0.863DL, -0.01034058789870910662037245883951959DL}, {0.864DL, -0.01018251017808143078207804599463267DL}, {0.865DL, -0.01002577205025773051971464238591351DL}, {0.866DL, -0.009870370419701895916457668622372085DL}, {0.867DL, -0.009716302201595200159659891384313847DL}, {0.868DL, -0.009563564321786882184993053151202547DL}, {0.869DL, -0.009412153716745013819085244606552401DL}, { 0.87DL, -0.009262067333507649457465640084291105DL}, {0.871DL, -0.009113302129634256330414926124051267DL}, {0.872DL, -0.008965855073157423424961547469361268DL}, {0.873DL, -0.008819723142534847146762268504079500DL}, {0.874DL, -0.008674903326601591820961978896866399DL}, {0.875DL, -0.008531392624522623146343620931349975DL}, {0.876DL, -0.008389188045745612732156026775671211DL}, {0.877DL, -0.008248286609954011861946754447881889DL}, {0.878DL, -0.008108685347020392643530112852162354DL}, {0.879DL, -0.007970381296960054718888864318068728DL}, { 0.88DL, -0.007833371509884895722342967029069411DL}, {0.881DL, -0.007697653045957543689721533368774191DL}, {0.882DL, -0.007563222975345749635546281863505186DL}, {0.883DL, -0.007430078378177038529377483099785068DL}, {0.884DL, -0.007298216344493616916488061698294346DL}, {0.885DL, -0.007167633974207535441919420184681655DL}, {0.886DL, -0.007038328377056104550734984749640352DL}, {0.887DL, -0.006910296672557561650925711240363866DL}, {0.888DL, -0.006783535989966988038937091724590050DL}, {0.889DL, -0.006658043468232473901180812893620498DL}, { 0.89DL, -0.006533816255951529718167368698879196DL}, {0.891DL, -0.006410851511327742411049838397860504DL}, {0.892DL, -0.006289146402127674583404911413599460DL}, {0.893DL, -0.006168698105638005223996262393065377DL}, {0.894DL, -0.006049503808622910249068730568269862DL}, {0.895DL, -0.005931560707281681275410600805502808DL}, {0.896DL, -0.005814866007206581027996770402676917DL}, {0.897DL, -0.005699416923340933798488853755052195DL}, {0.898DL, -0.005585210679937449383220451768806053DL}, {0.899DL, -0.005472244510516778941538007148823807DL}, { 0.9DL, -0.005360515657826301227500980839312798DL}, {0.901DL, -0.005250021373799137659970607150908317DL}, {0.902DL, -0.005140758919513394708035291592379167DL}, {0.903DL, -0.005032725565151632080533870341540153DL}, {0.904DL, -0.004925918589960555220146506062541247DL}, {0.905DL, -0.004820335282210930614127992193896056DL}, {0.906DL, -0.004715972939157722445260706187914060DL}, {0.907DL, -0.004612828867000449118005409417477733DL}, {0.908DL, -0.004510900380843758206128544303242441DL}, {0.909DL, -0.004410184804658218379285623295052057DL}, { 0.91DL, -0.004310679471241326877142724360230081DL}, {0.911DL, -0.004212381722178731110622977468108821DL}, {0.912DL, -0.004115288907805662980773209410007109DL}, {0.913DL, -0.004019398387168584516558562796592870DL}, {0.914DL, -0.003924707527987043443610861441432520DL}, {0.915DL, -0.003831213706615737306580690478764532DL}, {0.916DL, -0.003738914308006784778274517204131169DL}, {0.917DL, -0.003647806725672202799197609440387000DL}, {0.918DL, -0.003557888361646588201471913954212405DL}, {0.919DL, -0.003469156626450002481356329997542269DL}, { 0.92DL, -0.003381608939051058394765834642179161DL}, {0.921DL, -0.003295242726830207060266559848074634DL}, {0.922DL, -0.003210055425543224264017049320389515DL}, {0.923DL, -0.003126044479284894671032389974739921DL}, {0.924DL, -0.003043207340452892656968562805904753DL}, {0.925DL, -0.002961541469711858484360026569270180DL}, {0.926DL, -0.002881044335957668556895061336206113DL}, {0.927DL, -0.002801713416281898494881575154600393DL}, {0.928DL, -0.002723546195936477784541724400298177DL}, {0.929DL, -0.002646540168298534763177616901192197DL}, { 0.93DL, -0.002570692834835430711573347903845500DL}, {0.931DL, -0.002496001705069981834241445278879626DL}, {0.932DL, -0.002422464296545867917285246467852008DL}, {0.933DL, -0.002350078134793226462733561697884642DL}, {0.934DL, -0.002278840753294431107210953860647069DL}, {0.935DL, -0.002208749693450053141736834988649148DL}, {0.936DL, -0.002139802504545004958300084268192904DL}, {0.937DL, -0.002071996743714864257633766887763881DL}, {0.938DL, -0.002005329975912377861317502788013575DL}, {0.939DL, -0.001939799773874143979963817873356565DL}, { 0.94DL, -0.001875403718087471797800118138378138DL}, {0.941DL, -0.001812139396757417242440462571182331DL}, {0.942DL, -0.001750004405773993817051769268915101DL}, {0.943DL, -0.001688996348679557380458159205488916DL}, {0.944DL, -0.001629112836636363768995504500688726DL}, {0.945DL, -0.001570351488394298162126576616148140DL}, {0.946DL, -0.001512709930258775101956151283939719DL}, {0.947DL, -0.001456185796058808084845680751330618DL}, {0.948DL, -0.001400776727115247651319342732802860DL}, {0.949DL, -0.001346480372209186908378065049231447DL}, { 0.95DL, -0.001293294387550533426196144254687238DL}, {0.951DL, -0.001241216436746746458966957831955609DL}, {0.952DL, -0.001190244190771738447390638362256653DL}, {0.953DL, -0.001140375327934939767958053458723949DL}, {0.954DL, -0.001091607533850525701782629720806875DL}, {0.955DL, -0.001043938501406804603265078624537837DL}, {0.956DL, -0.0009973659307357662563465268748303902DL}, {0.957DL, -0.0009518875291827894135135168035260128DL}, {0.958DL, -0.0009075010112765075200644111952994408DL}, {0.959DL, -0.0008642040986988316334314926300475026DL}, { 0.96DL, -0.0008219945202551295545770651553198702DL}, {0.961DL, -0.0007808700118445601956457149683782019DL}, {0.962DL, -0.0007408283164305622151591299981502860DL}, {0.963DL, -0.0007018671840114959590850731847642119DL}, {0.964DL, -0.0006639843715914377530988024259237516DL}, {0.965DL, -0.0006271776431511255982839774438462191DL}, {0.966DL, -0.0005914447696190553293914304190145020DL}, {0.967DL, -0.0005567835288427263015886377435869042DL}, {0.968DL, -0.0005231917055600356783908437483043189DL}, {0.969DL, -0.0004906670913708204001670773695868453DL}, { 0.97DL, -0.0004592074847085459192612876647667014DL}, {0.971DL, -0.0004288106908121407943610167299151956DL}, {0.972DL, -0.0003994745216979762432839365241109634DL}, {0.973DL, -0.0003711967961319897598367017343691107DL}, {0.974DL, -0.0003439753396019519068314113443705496DL}, {0.975DL, -0.0003178079842898754037230191128730343DL}, {0.976DL, -0.0002926925690445656336567747947716042DL}, {0.977DL, -0.0002686269393543117009886957318015146DL}, {0.978DL, -0.0002456089473197171765646395516404734DL}, {0.979DL, -0.0002236364516266696742152454181141036DL}, { 0.98DL, -0.0002027073175194484080453010241923879DL}, {0.981DL, -0.0001828194167739688861674379988395624DL}, {0.982DL, -0.0001639706276711639025519175798314017DL}, {0.983DL, -0.0001461588349704999946370945973781867DL}, {0.984DL, -0.0001293819298836285402693897186296256DL}, {0.985DL, -0.0001136378100481706734177016640740083DL}, {0.986DL, -0.00009892437950163520393559235987791365DL}, {0.987DL, -0.00008523954865546873242571391521347962DL}, {0.988DL, -0.00007258123426923715699524768356734461DL}, {0.989DL, -0.00006094735942493777437901889704946880DL}, { 0.99DL, -0.00005033585350144118354885755854770609DL}, {0.991DL, -0.00004074465214906220552411528238585077DL}, {0.992DL, -0.00003217169726425903864943221985257198DL}, {0.993DL, -0.00002461493696445987411228755393011146DL}, {0.994DL, -0.00001807232556301620193496663870222833DL}, {0.995DL, -0.00001254182354428204309373895836778139DL}, {0.996DL, -0.000008021397538818348792660922843328976DL}, {0.997DL, -0.000004509020298721813250889349620111032DL}, {0.998DL, -0.000002002670673077351651104610523031719DL}, {0.999DL, -5.003335835335001429822540683449608E-7DL}, { 1.0DL, 0.0DL}, }; #define LNTVALS_START 100 libdfp-1.0.17/ieee754r/tand128.c000066400000000000000000000021361504475242000157230ustar00rootroot00000000000000/* Calculate the tan(x) for _Decimal128 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "tand32.c" libdfp-1.0.17/ieee754r/tand32.c000066400000000000000000000042201504475242000156310ustar00rootroot00000000000000/* Calculate the tan(x) for _Decimal32 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #include #include #define FUNCTION_NAME tan #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x)) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } decContextDefault (&context, DEFAULT_CONTEXT); decNumberTan (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); if (context.status & DEC_Overflow) DFP_EXCEPT (FE_OVERFLOW); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (FUNC_D(__isinf) (x)) DFP_ERRNO (EDOM); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/tand64.c000066400000000000000000000021331504475242000156370ustar00rootroot00000000000000/* Calculate the tan(x) for _Decimal64 format x Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "tand32.c" libdfp-1.0.17/ieee754r/tanhd128.c000066400000000000000000000021541504475242000160730ustar00rootroot00000000000000/* Calculate the hyperbolic tan (tanh) for a _Decimal128 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "tanhd32.c" libdfp-1.0.17/ieee754r/tanhd32.c000066400000000000000000000035231504475242000160060ustar00rootroot00000000000000/* Calculate the hyperbolic tan (tanh) for a _Decimal32 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include #endif #include #include #include #include #define FUNCTION_NAME tanh #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN (&x, &dn_x); if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)) return x+x; if (decNumberIsInfinite (&dn_x)) return decNumberIsNegative (&dn_x) ? DFP_CONSTANT(-1.0) : DFP_CONSTANT(1.0); decContextDefault (&context, DEFAULT_CONTEXT); decNumberTanh (&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/tanhd64.c000066400000000000000000000021511504475242000160070ustar00rootroot00000000000000/* Calculate the hyperbolic tan (tanh) for a _Decimal64 type Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "tanhd32.c" libdfp-1.0.17/ieee754r/tgammad128.c000066400000000000000000000021611504475242000164050ustar00rootroot00000000000000/* Returns the result of integral[0->inf, t**(x-1) * e**(-t) dt] Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "tgammad32.c" libdfp-1.0.17/ieee754r/tgammad32.c000066400000000000000000000045071504475242000163250ustar00rootroot00000000000000/* Returns the result of integral[0->inf, t**(x-1) * e**(-t) dt] Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME tgamma #include extern DEC_TYPE FUNC_D (__lgamma_r) (DEC_TYPE, int *); //extern int //FUNC_D (__builtin_signbit) (DEC_TYPE); static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE result, gamma; int local_signgam; if (x == DFP_CONSTANT(0.0)) /* Pole error if x== +-0 */ { DFP_EXCEPT (FE_DIVBYZERO); // return FUNC_D (__builtin_signbit) (x) ? -DFP_HUGE_VAL : DFP_HUGE_VAL; return (x<0) ? -DFP_HUGE_VAL : DFP_HUGE_VAL; } if (x < DFP_CONSTANT(0.0) && (!FUNC_D (__isinf) (x) && FUNC_D (__rint) (x) == x) ) { DFP_EXCEPT (FE_INVALID); return DFP_NAN; } gamma = FUNC_D(__lgamma_r) (x,&local_signgam); result = local_signgam * FUNC_D(__exp) (gamma); return result; } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { DEC_TYPE z = IEEE_FUNCTION_NAME (x); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x)) DFP_ERRNO (ERANGE); if (x < DFP_CONSTANT(0.0) && (FUNC_D (__isinf) (x) && FUNC_D (__rint) (x) == x) ) DFP_ERRNO (EDOM); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/tgammad64.c000066400000000000000000000021571504475242000163310ustar00rootroot00000000000000/* Returns the result of integral[0->inf, t**(x-1) * e**(-t) dt] Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "tgammad32.c" libdfp-1.0.17/ieee754r/truncd128.c000066400000000000000000000021521504475242000162720ustar00rootroot00000000000000/* Round a _Decimal128 type to the nearest but <= argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "truncd32.c" libdfp-1.0.17/ieee754r/truncd32.c000066400000000000000000000033461504475242000162120ustar00rootroot00000000000000/* Round a _Decimal32 type to the nearest but <= argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #include #include #define FUNCTION_NAME trunc #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { decContext context; decNumber dn_result; DEC_TYPE result; decNumber dn_x; FUNC_CONVERT_TO_DN(&x, &dn_x); decContextDefault(&context, DEFAULT_CONTEXT); context.round = DEC_ROUND_DOWN; decNumberToIntegralValue(&dn_result, &dn_x, &context); FUNC_CONVERT_FROM_DN(&dn_result, &result, &context); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/ieee754r/truncd64.c000066400000000000000000000021471504475242000162150ustar00rootroot00000000000000/* Round a _Decimal64 type to the nearest but <= argument Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "truncd32.c" libdfp-1.0.17/include/000077500000000000000000000000001504475242000144665ustar00rootroot00000000000000libdfp-1.0.17/include/README000066400000000000000000000001101504475242000153360ustar00rootroot00000000000000# These are include files common to libdfp. These are not distributed. libdfp-1.0.17/include/convert.h000066400000000000000000000234551504475242000163300ustar00rootroot00000000000000/* Handle conversion from binary integers, floats and decimal types Copyright (C) 2007,2008 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include #include /* This is a horrible hack. When compiling C code, TFmode is long double on ppc64le, whatever this may be (ibm128 or ieee128). However, the intrinsic function calls generated by libgcc always use the "tf" name to represent ibm128, and "kf" for ieee128. We need to adjust the types to ensure we override the correct intrinsic conversion routines for the format, not the type. */ #if defined (__powerpc64__) && __LDBL_MANT_DIG__ == 113 typedef __ibm128 ldouble; #else typedef long double ldouble; #endif /* decimal source */ #if defined DECIMAL_TO_INTEGER || defined DECIMAL_TO_BINARY || defined DECIMAL_TO_DECIMAL #if SRC==32 # define SRC_TYPE _Decimal32 # define IEEE_SRC_TYPE decimal32 # define SRC_LITERAL(n) n##DF # define SRC_KIND sd # define SIGNBIT __signbitd32 # define CLASSIFY(x) __fpclassifyd32(x) #endif #if SRC==64 # define SRC_TYPE _Decimal64 # define IEEE_SRC_TYPE decimal64 # define SRC_LITERAL(n) n##DD # define SRC_KIND dd # define SIGNBIT __signbitd64 # define CLASSIFY(x) __fpclassifyd64(x) #endif #if SRC==128 # define SRC_TYPE _Decimal128 # define IEEE_SRC_TYPE decimal128 # define SRC_LITERAL(n) n##DL # define SRC_KIND td # define SIGNBIT __signbitd128 # define CLASSIFY(x) __fpclassifyd128(x) #endif extern int SIGNBIT (SRC_TYPE); #define DECIMAL_SIZE SRC #endif //DECIMAL_TO_INTEGER || DECIMAL_TO_BINARY || DECIMAL_TO_DECIMAL #define LDBL_FMT_IBM 1 #define LDBL_FMT_IEEE128 2 #define LDBL_FMT_INTEL 3 #define LDBL_FMT_IEEE64 4 /* Determine which long double we are using. */ #if __LDBL_MANT_DIG__ == 64 #define LDBL_FMT LDBL_FMT_INTEL #define LDBL_GCC_NAME xf #elif __LDBL_MANT_DIG__ == 113 #define LDBL_FMT LDBL_FMT_IEEE128 #define LDBL_GCC_NAME tf #elif __LDBL_MANT_DIG__ == 106 #define LDBL_FMT LDBL_FMT_IBM #define LDBL_GCC_NAME tf #else #error "Unsupported long double type" #endif /* float source */ #if defined BINARY_TO_DECIMAL /* Borrowed from glibc. We assume no snan and GCC > 4.4 */ #define CLASSIFY(x) __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x) #if SRC==32 #define SRC_TYPE float #define SRC_LITERAL(n) n##f #define SRC_KIND sf #define SIGNBIT __builtin_signbitf #endif #if SRC==64 #define SRC_TYPE double #define SRC_LITERAL(n) n##d #define SRC_KIND df #define SIGNBIT __builtin_signbit #endif #if SRC==128 #define SRC_TYPE ldouble #define SRC_LITERAL(n) n##l #define SRC_KIND LDBL_GCC_NAME #if defined (__powerpc64__) && __LDBL_MANT_DIG__ == 113 /* This is type-generic on any gcc which supports ldbl=ieee128. */ #define SIGNBIT __builtin_signbit #else #define SIGNBIT __builtin_signbitl #endif #endif extern int SIGNBIT (SRC_TYPE); #endif // BINARY_TO_DECIMAL /* integer source */ #if defined INTEGER_TO_DECIMAL #if SRC==32 #if defined UNSIGNED #define SRC_TYPE unsigned int #define INT_FMT "%u" #define CAST_FOR_FMT(A) (unsigned int)A #else #define SRC_TYPE int #define INT_FMT "%d" #define CAST_FOR_FMT(A) (int)A #endif #define SRC_LITERAL(n) n #define SRC_KIND si #endif #if SRC==64 #if defined UNSIGNED #define SRC_TYPE unsigned long long #define INT_FMT "%llu" #define CAST_FOR_FMT(A) (unsigned long long)A #else #define SRC_TYPE long long #define INT_FMT "%lld" #define CAST_FOR_FMT(A) (long long)A #endif #define SRC_LITERAL(n) n #define SRC_KIND di #endif #endif // INTEGER_TO_DECIMAL /* decimal dest */ #if defined DECIMAL_TO_DECIMAL || defined INTEGER_TO_DECIMAL || defined BINARY_TO_DECIMAL #if DEST==32 #define DEST_TYPE _Decimal32 #define IEEE_DEST_TYPE decimal32 #define DEST_LITERAL(n) n##DF #define DEST_KIND sd #endif #if DEST==64 #define DEST_TYPE _Decimal64 #define IEEE_DEST_TYPE decimal64 #define DEST_LITERAL(n) n##DD #define DEST_KIND dd #endif #if DEST==128 #define DEST_TYPE _Decimal128 #define IEEE_DEST_TYPE decimal128 #define DEST_LITERAL(n) n##DL #define DEST_KIND td #endif #define DEST_INFINITY DEC_INFINITY #define DEST_NAN DEC_NAN #if defined DECIMAL_SIZE #if DECIMAL_SIZE < DEST #undef DECIMAL_SIZE #define DECIMAL_SIZE DEST #endif #endif #define CONTEXT_INIT PASTE(DEC_INIT_DECIMAL,DEST) #endif //DECIMAL_TO_DECIMAL || INTEGER_TO_DECIMAL || BINARY_TO_DECIMAL /* float dest */ #if defined DECIMAL_TO_BINARY #if DEST==32 #define DEST_TYPE float #define DEST_LITERAL(n) n##F #define DEST_KIND sf #define DEST_INFINITY __builtin_inff () #define DEST_NAN __builtin_nanf ("") #endif #if DEST==64 #define DEST_TYPE double #define DEST_LITERAL(n) n #define DEST_KIND df #define DEST_INFINITY __builtin_inf () #define DEST_NAN __builtin_nan ("") #endif #if DEST==128 #define DEST_TYPE ldouble #define DEST_LITERAL(n) n##L #define DEST_KIND LDBL_GCC_NAME #define DEST_INFINITY __builtin_infl () #define DEST_NAN __builtin_nanl ("") #endif #endif //DECIMAL_TO_BINARY /* integer dest */ #if defined DECIMAL_TO_INTEGER #if DEST==32 #if defined UNSIGNED #define DEST_TYPE unsigned int #define STR_TO_INT strtoul #else #define DEST_TYPE int #define STR_TO_INT strtol #endif #define DEST_LITERAL(n) n #define DEST_KIND si #endif #if DEST==64 #if defined UNSIGNED #define DEST_TYPE unsigned long long #define STR_TO_INT strtoull #else #define DEST_TYPE long long #define STR_TO_INT strtoll #endif #define DEST_LITERAL(n) n #define DEST_KIND di #endif #endif //DECIMAL_TO_INTEGER extern ldouble binpowof10[]; extern const _Decimal128 decpowof2[]; #define BINPOWOF10 binpowof10 #define BINPOWOF10_LIMIT 308 #define POWOF10_MIN_DENORM_DBL_EXP 324 #define POWOF10_MIN_DENORM_FLT_EXP 45 #define POWOF10_MIN_DENORM_DBL_MAN 49406564584124654LL #define POWOF10_MIN_DENORM_FLT_MAN 1401298460000000LL #define DECPOWOF2 decpowof2 #define FREXPSF __builtin_frexpf #define FREXPDF __builtin_frexp #define FREXPTF __builtin_frexpl #ifndef PASTE # define PASTE(a,b) PASTE2(a,b) # define PASTE2(x,y) x##y #endif #define PASTE4(a,b,c,d) PASTE(PASTE(a,b),PASTE(c,d)) #define PASTE5(a,b,c,d,e) PASTE(PASTE4(a,b,c,d),e) #if defined DECIMAL_TO_DECIMAL #define FUNCTION_NAME PASTE4(NAME,SRC_KIND,DEST_KIND,2) #else #define FUNCTION_NAME PASTE4(NAME,SRC_KIND,DEST_KIND,) #endif /* Functions will need to be prefixed with __bid_ or __dpd_ depending on * how GCC was configured. --enable-decimal-float=[bid,dpd] */ #if __DECIMAL_BID_FORMAT__==1 #define PREFIXED_FUNCTION_NAME PASTE(__bid_,FUNCTION_NAME) #else /* #define PREFIXED_FUNCTION_NAME PASTE(__dfp_,FUNCTION_NAME) */ #define PREFIXED_FUNCTION_NAME PASTE(__dpd_,FUNCTION_NAME) #endif #if (SRC == 128 && (defined DECIMAL_TO_DECIMAL || defined DECIMAL_TO_INTEGER)) || \ (DEST == 128 && (defined DECIMAL_TO_DECIMAL || defined INTEGER_TO_DECIMAL)) #include "decimal128.h" #endif #if (SRC == 64 && (defined DECIMAL_TO_DECIMAL || defined DECIMAL_TO_INTEGER)) || \ (DEST == 64 && (defined DECIMAL_TO_DECIMAL || defined INTEGER_TO_DECIMAL)) #include "decimal64.h" #endif #if (SRC == 32 && (defined DECIMAL_TO_DECIMAL || defined DECIMAL_TO_INTEGER)) || \ (DEST == 32 && (defined DECIMAL_TO_DECIMAL || defined INTEGER_TO_DECIMAL)) #include "decimal32.h" #endif #define DFP_EXCEPTIONS_ENABLED 1 #define DFP_IEEE_FLAGS(status) ( \ (((status) & DEC_IEEE_854_Division_by_zero) ? FE_DIVBYZERO : 0) | \ (((status) & DEC_IEEE_854_Inexact) ? FE_INEXACT : 0) | \ (((status) & DEC_IEEE_854_Invalid_operation) ? FE_INVALID : 0) | \ (((status) & DEC_IEEE_854_Overflow) ? FE_OVERFLOW : 0) | \ (((status) & DEC_IEEE_854_Underflow) ? FE_UNDERFLOW : 0)) #include #ifdef fegetenv_register # define DFP_TEST_EXCEPTIONS(status) ({ \ fenv_union_t u; \ u.fenv = fegetenv_register(); \ u.l & (status); \ }) # define DFP_CLEAR_EXCEPTIONS(status) { \ fenv_union_t u; \ u.fenv = fegetenv_register(); \ u.l &= ~status; \ fesetenv_register(u.fenv); \ } #else # include /* Non-register targets might want to use the standard functions. * Note that it is necessary to include these symbols in libdfp * to avoid libm dependencies. */ # define DFP_TEST_EXCEPTIONS(status) fetestexcept (status) # define DFP_CLEAR_EXCEPTIONS(status) feclearexcept (status) #endif #define DFP_HANDLE_EXCEPTIONS(status) feraiseexcept(status) #define CONVERT_WRAPPER(...) \ DEST_TYPE \ PREFIXED_FUNCTION_NAME (SRC_TYPE a) \ { \ DEST_TYPE result = DEST_LITERAL(0.0); \ \ switch (CLASSIFY (a)) { \ case FP_ZERO: \ result = SIGNBIT(a) ? \ DEST_LITERAL(-0.0) : \ DEST_LITERAL(0.0); \ break; \ case FP_INFINITE: \ result = SIGNBIT(a) ? \ -DEST_INFINITY : \ DEST_INFINITY; \ break; \ case FP_NAN: \ result = DEST_NAN; \ break; \ default: { \ __VA_ARGS__ \ } \ } \ return result; \ } // A hack for GCC12 to ensure we call the "correct" libgcc function. // See GCC PR10423. #if defined (__powerpc64__) && __LDBL_MANT_DIG__ == 113 extern __ibm128 __floatditf(long long); #define TOIBM128(x) __floatditf(x) #else #define TOIBM128(x) (x) #endif libdfp-1.0.17/include/decode.h000066400000000000000000000031401504475242000160600ustar00rootroot00000000000000/* Prototype for converting a _Decimal* into a string showing the declets. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DECODE_DECIMAL_H #define _DECODE_DECIMAL_H 1 #include __BEGIN_DECLS /* char * should ref 14 bytes, +0,000,000E+0\0 */ extern char * __decoded32 (_Decimal32, char*); /* char * should ref 26 bytes, +0,000,000,000,000,000E+0\0 */ extern char * __decoded64 (_Decimal64, char*); /* char * should ref 50 bytes, * +0,000,000,000,000,000,000,000,000,000,000,000E+0\0 */ extern char * __decoded128 (_Decimal128, char*); hidden_proto(__decoded32) hidden_proto(__decoded64) hidden_proto(__decoded128) __END_DECLS #endif /* _DECODE_DECIMAL_H */ libdfp-1.0.17/include/dfp.h000066400000000000000000000025771504475242000154230ustar00rootroot00000000000000/* Prototypes for libdfp specific functions not defined by any standard. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DFP_H #define _DFP_H #include __BEGIN_DECLS /* In order to inform libc that a decimal floating point type needs to be * printed libdfp needs to inform libc, prior to the first invocation of printf, * that it has printf callbacks available for decimal floating point types. */ extern int register_printf_dfp (void); __END_DECLS #endif /* _DFP_H */ libdfp-1.0.17/include/dfpacc.h000066400000000000000000000251571504475242000160710ustar00rootroot00000000000000/* DFP Arithmetic, Conversion, and Comparison routines w/ exceptions. Copyright (C) 2009 IBM Corporation. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DFPACC_PRIVATE_H #define _DFPACC_PRIVATE_H 1 #ifndef PASTE # define PASTE(x,y) PASTE2(x,y) # define PASTE2(x,y) x##y #endif #ifdef __DECIMAL_BID_FORMAT__ # define __BACKEND_(x) PASTE(__bid_,x) # define hidden_proto_enc(name, attrs...) \ __hidden_proto (__bid_##name, __GI___bid_##name, ##attrs) #else # define __BACKEND_(x) PASTE(__dpd_,x) # define hidden_proto_enc(name, attrs...) \ __hidden_proto (__dpd_##name, __GI___dpd_##name, ##attrs) #endif /* This should be true for 64b platforms. */ #ifdef __SIZEOF_INT128__ # define INT128 __int128 # define UINT128 unsigned __int128 #endif #if __LDBL_MANT_DIG__ == 64 long double __BACKEND_(extendsdxf) (_Decimal32); hidden_proto_enc (extendsdxf) long double __BACKEND_(extendddxf) (_Decimal64); hidden_proto_enc (extendddxf) long double __BACKEND_(trunctdxf) (_Decimal128); hidden_proto_enc (trunctdxf) _Decimal128 __BACKEND_(extendxftd) (long double); hidden_proto_enc (extendxftd) _Decimal32 __BACKEND_(truncxfsd) (long double); hidden_proto_enc (truncxfsd) _Decimal64 __BACKEND_(truncxfdd) (long double); hidden_proto_enc (truncxfdd) #else # if __LDBL_MANT_DIG__ == 113 && defined(__powerpc64__) __ibm128 __BACKEND_(extendsdtf) (_Decimal32); hidden_proto_enc (extendsdtf) __ibm128 __BACKEND_(extendddtf) (_Decimal64); hidden_proto_enc (extendddtf) __ibm128 __BACKEND_(trunctdtf) (_Decimal128); hidden_proto_enc (trunctdtf) _Decimal128 __BACKEND_(extendtftd) (__ibm128); hidden_proto_enc (extendtftd) _Decimal32 __BACKEND_(trunctfsd) (__ibm128); hidden_proto_enc (trunctfsd) _Decimal64 __BACKEND_(trunctfdd) (__ibm128); hidden_proto_enc (trunctfdd) # else /* TODO: these are available on x86 as _Float128 */ long double __BACKEND_(extendsdtf) (_Decimal32); hidden_proto_enc (extendsdtf) long double __BACKEND_(extendddtf) (_Decimal64); hidden_proto_enc (extendddtf) long double __BACKEND_(trunctdtf) (_Decimal128); hidden_proto_enc (trunctdtf) _Decimal128 __BACKEND_(extendtftd) (long double); hidden_proto_enc (extendtftd) _Decimal32 __BACKEND_(trunctfsd) (long double); hidden_proto_enc (trunctfsd) _Decimal64 __BACKEND_(trunctfdd) (long double); hidden_proto_enc (trunctfdd) # endif #endif /* This file contains the prototypes for the DFP arithmetic, conversion, and * comparison routines. These also exist in libgcc, but these versions * support decimal floating point rounding control and exception support * whilst those in libgcc do not. GCC will place these in the code in * soft-dfp in place of arithmetic, conversion, or comparison functions, e.g. * _Decimal128 foo = bar + bat; * will be replaced with: * _Decima128 = __dpd_addtd3(bar,bat); */ _Decimal32 __BACKEND_(addsd3) (_Decimal32,_Decimal32); hidden_proto_enc (addsd3) _Decimal64 __BACKEND_(adddd3) (_Decimal64,_Decimal64); hidden_proto_enc (adddd3) _Decimal128 __BACKEND_(addtd3) (_Decimal128,_Decimal128); hidden_proto_enc (addtd3) _Decimal32 __BACKEND_(divsd3) (_Decimal32,_Decimal32); hidden_proto_enc (divsd3) _Decimal64 __BACKEND_(divdd3) (_Decimal64,_Decimal64); hidden_proto_enc (divdd3) _Decimal128 __BACKEND_(divtd3) (_Decimal128,_Decimal128); hidden_proto_enc (divtd3) /* The result of a comparison is a bit more complicated than an int type. */ typedef int CMPINT __attribute__ ((mode (__libgcc_cmp_return__))); CMPINT __BACKEND_(eqsd2) (_Decimal32,_Decimal32); hidden_proto_enc (eqsd2) CMPINT __BACKEND_(eqdd2) (_Decimal64,_Decimal64); hidden_proto_enc (eqdd2) CMPINT __BACKEND_(eqtd2) (_Decimal128,_Decimal128); hidden_proto_enc (eqtd2) _Decimal64 __BACKEND_(extendsddd2) (_Decimal32); hidden_proto_enc (extendsddd2) _Decimal128 __BACKEND_(extendsdtd2) (_Decimal32); hidden_proto_enc (extendsdtd2) _Decimal128 __BACKEND_(extendddtd2) (_Decimal64); hidden_proto_enc (extendddtd2) _Decimal32 __BACKEND_(extendsfsd) (float); hidden_proto_enc (extendsfsd) double __BACKEND_(extendsddf) (_Decimal32); hidden_proto_enc (extendsddf) _Decimal64 __BACKEND_(extendsfdd) (float); hidden_proto_enc (extendsfdd) _Decimal64 __BACKEND_(extenddfdd) (double); hidden_proto_enc (extenddfdd) _Decimal128 __BACKEND_(extendsftd) (float); hidden_proto_enc (extendsftd) _Decimal128 __BACKEND_(extenddftd) (double); hidden_proto_enc (extenddftd) int __BACKEND_(fixsdsi) (_Decimal32); hidden_proto_enc (fixsdsi) int __BACKEND_(fixddsi) (_Decimal64); hidden_proto_enc (fixddsi) int __BACKEND_(fixtdsi) (_Decimal128); hidden_proto_enc (fixtdsi) long long __BACKEND_(fixsddi) (_Decimal32); hidden_proto_enc (fixsddi) long long __BACKEND_(fixdddi) (_Decimal64); hidden_proto_enc (fixdddi) long long __BACKEND_(fixtddi) (_Decimal128); hidden_proto_enc (fixtddi) unsigned int __BACKEND_(fixunssdsi) (_Decimal32); hidden_proto_enc (fixunssdsi) unsigned int __BACKEND_(fixunsddsi) (_Decimal64); hidden_proto_enc (fixunsddsi) unsigned int __BACKEND_(fixunstdsi) (_Decimal128); hidden_proto_enc (fixunstdsi) unsigned long long __BACKEND_(fixunssddi) (_Decimal32); hidden_proto_enc (fixunssddi) unsigned long long __BACKEND_(fixunsdddi) (_Decimal64); hidden_proto_enc (fixunsdddi) unsigned long long __BACKEND_(fixunstddi) (_Decimal128); hidden_proto_enc (fixunstddi) #ifdef __SIZEOF_INT128__ UINT128 __BACKEND_(fixunssdti) (_Decimal32); hidden_proto_enc (fixunssdti) UINT128 __BACKEND_(fixunsddti) (_Decimal64); hidden_proto_enc (fixunsddti) UINT128 __BACKEND_(fixunstdti) (_Decimal128); hidden_proto_enc (fixunstdti) INT128 __BACKEND_(fixsdti) (_Decimal32); hidden_proto_enc (fixsdti) INT128 __BACKEND_(fixddti) (_Decimal64); hidden_proto_enc (fixddti) INT128 __BACKEND_(fixtdti) (_Decimal128); hidden_proto_enc (fixtdti) #endif _Decimal64 __BACKEND_(floatdidd) (long long); hidden_proto_enc (floatdidd) _Decimal32 __BACKEND_(floatdisd) (long long); hidden_proto_enc (floatdisd) _Decimal128 __BACKEND_(floatditd) (long long); hidden_proto_enc (floatditd) _Decimal64 __BACKEND_(floatsidd) (int); hidden_proto_enc (floatsidd) _Decimal32 __BACKEND_(floatsisd) (int); hidden_proto_enc (floatsisd) _Decimal128 __BACKEND_(floatsitd) (int); hidden_proto_enc (floatsitd) _Decimal64 __BACKEND_(floatunsdidd) (unsigned long long); hidden_proto_enc (floatunsdidd) _Decimal32 __BACKEND_(floatunsdisd) (unsigned long long); hidden_proto_enc (floatunsdisd) _Decimal128 __BACKEND_(floatunsditd) (unsigned long long); hidden_proto_enc (floatunsditd) _Decimal64 __BACKEND_(floatunssidd) (unsigned int); hidden_proto_enc (floatunssidd) _Decimal32 __BACKEND_(floatunssisd) (unsigned int); hidden_proto_enc (floatunssisd) _Decimal128 __BACKEND_(floatunssitd) (unsigned int); hidden_proto_enc (floatunssitd) #ifdef __SIZEOF_INT128__ _Decimal32 __BACKEND_(floatunstisd) (UINT128); hidden_proto_enc (floatunstisd) _Decimal64 __BACKEND_(floatunstidd) (UINT128); hidden_proto_enc (floatunstidd) _Decimal128 __BACKEND_(floatunstitd) (UINT128); hidden_proto_enc (floatunstitd) _Decimal32 __BACKEND_(floattisd) (INT128); hidden_proto_enc (floattisd) _Decimal64 __BACKEND_(floattidd) (INT128); hidden_proto_enc (floattidd) _Decimal128 __BACKEND_(floattitd) (INT128); hidden_proto_enc (floattitd) #endif CMPINT __BACKEND_(gesd2) (_Decimal32,_Decimal32); hidden_proto_enc (gesd2) CMPINT __BACKEND_(gedd2) (_Decimal64,_Decimal64); hidden_proto_enc (gedd2) CMPINT __BACKEND_(getd2) (_Decimal128,_Decimal128); hidden_proto_enc (getd2) CMPINT __BACKEND_(gtsd2) (_Decimal32,_Decimal32); hidden_proto_enc (gtsd2) CMPINT __BACKEND_(gtdd2) (_Decimal64,_Decimal64); hidden_proto_enc (gtdd2) CMPINT __BACKEND_(gttd2) (_Decimal128,_Decimal128); hidden_proto_enc (gttd2) CMPINT __BACKEND_(lesd2) (_Decimal32,_Decimal32); hidden_proto_enc (lesd2) CMPINT __BACKEND_(ledd2) (_Decimal64,_Decimal64); hidden_proto_enc (ledd2) CMPINT __BACKEND_(letd2) (_Decimal128,_Decimal128); hidden_proto_enc (letd2) CMPINT __BACKEND_(ltsd2) (_Decimal32,_Decimal32); hidden_proto_enc (ltsd2) CMPINT __BACKEND_(ltdd2) (_Decimal64,_Decimal64); hidden_proto_enc (ltdd2) CMPINT __BACKEND_(lttd2) (_Decimal128,_Decimal128); hidden_proto_enc (lttd2) _Decimal32 __BACKEND_(mulsd3) (_Decimal32,_Decimal32); hidden_proto_enc (mulsd3) _Decimal64 __BACKEND_(muldd3) (_Decimal64,_Decimal64); hidden_proto_enc (muldd3) _Decimal128 __BACKEND_(multd3) (_Decimal128,_Decimal128); hidden_proto_enc (multd3) CMPINT __BACKEND_(nesd2) (_Decimal32,_Decimal32); hidden_proto_enc (nesd2) CMPINT __BACKEND_(nedd2) (_Decimal64,_Decimal64); hidden_proto_enc (nedd2) CMPINT __BACKEND_(netd2) (_Decimal128,_Decimal128); hidden_proto_enc (netd2) CMPINT __BACKEND_(unordsd2) (_Decimal32,_Decimal32); hidden_proto_enc (unordsd2) CMPINT __BACKEND_(unorddd2) (_Decimal64,_Decimal64); hidden_proto_enc (unorddd2) CMPINT __BACKEND_(unordtd2) (_Decimal128,_Decimal128); hidden_proto_enc (unordtd2) _Decimal32 __BACKEND_(subsd3) (_Decimal32,_Decimal32); hidden_proto_enc (subsd3) _Decimal64 __BACKEND_(subdd3) (_Decimal64,_Decimal64); hidden_proto_enc (subdd3) _Decimal128 __BACKEND_(subtd3) (_Decimal128,_Decimal128); hidden_proto_enc (subtd3) _Decimal32 __BACKEND_(trunctdsd2) (_Decimal128); hidden_proto_enc (trunctdsd2) _Decimal32 __BACKEND_(truncddsd2) (_Decimal64); hidden_proto_enc (truncddsd2) _Decimal64 __BACKEND_(trunctddd2) (_Decimal128); hidden_proto_enc (trunctddd2) float __BACKEND_(truncsdsf) (_Decimal32); hidden_proto_enc (truncsdsf) _Decimal32 __BACKEND_(truncdfsd) (double); hidden_proto_enc (truncdfsd) float __BACKEND_(truncddsf) (_Decimal64); hidden_proto_enc (truncddsf) double __BACKEND_(truncdddf) (_Decimal64); hidden_proto_enc (truncdddf) float __BACKEND_(trunctdsf) (_Decimal128); hidden_proto_enc (trunctdsf) double __BACKEND_(trunctddf) (_Decimal128); hidden_proto_enc (trunctddf) CMPINT __BACKEND_(unordsd2) (_Decimal32,_Decimal32); CMPINT __BACKEND_(unorddd2) (_Decimal64,_Decimal64); CMPINT __BACKEND_(unordtd2) (_Decimal128,_Decimal128); #endif /* _DFPACC_PRIVATE_H */ libdfp-1.0.17/include/dfpfenv_private.h000066400000000000000000000024341504475242000200240ustar00rootroot00000000000000/* Internal prototypes for fetching/changing the decimal rounding mode Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DFPFENV_PRIVATE_H #define _DFPFENV_PRIVATE_H extern int __fe_dec_setround(int __rounding_direction); extern int __fe_dec_getround(void); hidden_proto(__fe_dec_setround) hidden_proto(__fe_dec_getround) #endif /* _DFPFENV_PRIVATE_H */ libdfp-1.0.17/include/dfpmacro.h000066400000000000000000000127101504475242000164330ustar00rootroot00000000000000/* Macros that are used as a set of wrappers for function utilities Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ /* Necessary to pull in inlined feraiseexcept */ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #include /* When this file is #include'd, _DECIMAL_SIZE and FUNCTION_NAME * _DECIMAL_SIZE : 32, 64, 128 - Used for type definition * FUNCTION_NAME : fabs, ceil - Does not include _DECIMAL_SIZE suffix * should already be #define'd */ /* There is a subtle bug that can occur if headers are not included in the * right order in d32's *.c files. The order needs to be: * #include * #include + decContext.h + decWhatever.h * #include "dfpmacro.h" * * The reason for this is that decNumber sets some type dependent sizes * according to values set in decimalX.h. */ #if !defined( _DECIMAL_SIZE ) #error Including dfpmacro without defining _DECIMAL_SIZE is invalid #endif /* Data type to use for the generic function implementations */ #define DEC_TYPE PASTE(_Decimal,_DECIMAL_SIZE) /* Use these "functions" for variable preperation */ /* They use functions provided in decimal32/64/128.c */ #if _DECIMAL_SIZE == 32 #define FUNC_CONVERT_TO_DN(dec,dn) decimal32ToNumber((decimal32*)dec, (dn)) #define FUNC_CONVERT_FROM_DN(dn,dec,context) decimal32FromNumber((decimal32*)dec, (dn), context) #define IEEE_DECIMAL_TO_STRING(host, str) decimal32ToString((decimal32*)host, str) #define IEEE_DECIMAL_TO_ENG_STRING(host, str) decimal32ToEngString((decimal32*)host, str) #elif _DECIMAL_SIZE == 64 #define FUNC_CONVERT_TO_DN(dec,dn) decimal64ToNumber((decimal64*)dec, (dn)) #define FUNC_CONVERT_FROM_DN(dn,dec,context) decimal64FromNumber((decimal64*)dec, (dn), context) #define IEEE_DECIMAL_TO_STRING(host, str) decimal64ToString((decimal64*)host, str) #define IEEE_DECIMAL_TO_ENG_STRING(host, str) decimal64ToEngString((decimal64*)host, str) #elif _DECIMAL_SIZE == 128 #define FUNC_CONVERT_TO_DN(dec,dn) decimal128ToNumber((decimal128*)dec, (dn)) #define FUNC_CONVERT_FROM_DN(dn,dec,context) decimal128FromNumber((decimal128*)dec, (dn), context) #define IEEE_DECIMAL_TO_STRING(host, str) decimal128ToString((decimal128*)host, str) #define IEEE_DECIMAL_TO_ENG_STRING(host, str) decimal128ToEngString((decimal128*)host, str) #endif #define DEFAULT_CONTEXT PASTE(DEC_INIT_DECIMAL,_DECIMAL_SIZE) /* Use this as function internal and external names */ #define EXTERNAL_FUNCTION_NAME FUNC_D(FUNCTION_NAME) #define INTERNAL_FUNCTION_NAME PASTE(__,EXTERNAL_FUNCTION_NAME) /* For functions that have both errno wrappers and exception throwing * implementations, this version is the exception throwing version, while * the INTERNAL_FUNCTION_NAME will be the errno wrapper */ #define IEEE_FUNCTION_NAME PASTE(__ieee743r_,EXTERNAL_FUNCTION_NAME) /* Functions will need to be prefixed with __bid_ or __dpd_ depending on * how GCC was configured. --enable-decimal-float=[bid,dpd] */ #if __DECIMAL_BID_FORMAT__==1 #define PREFIXED_FUNCTION_NAME PASTE(__bid_,ACTUAL_FUNCTION_NAME) #else /* #define PREFIXED_FUNCTION_NAME PASTE(__dfp_,ACTUAL_FUNCTION_NAME) */ #define PREFIXED_FUNCTION_NAME PASTE(__dpd_,ACTUAL_FUNCTION_NAME) #endif /* Use this if you need to refer to the type appropriate function * elswhere. For example FUNC_D (fabs) (x) may be needed in asin * FUNC_D(fabs) (x) will resolve to fabsd32 (x) in the 32 bit version */ #define FUNC_D(x) PASTE(x,PASTE(d,_DECIMAL_SIZE)) /* These can simply be called, and will check if it's appropriate * to throw the exception/errno before doing so */ /* If the compiler/glibc supports math_errhandling, we'll use it * in the future */ #define DFP_MATH_ERRHANDLING MATH_ERREXCEPT #include #define DFP_ERRNO(the_errno) *__errno_location() = the_errno #define DFP_EXCEPT(the_exception) \ do { \ if((DFP_MATH_ERRHANDLING & MATH_ERREXCEPT) > 0) \ feraiseexcept( (the_exception) ); \ } while(0) /* Useful for generating constants */ #if _DECIMAL_SIZE == 32 #define DEC_SUFFIX DF #elif _DECIMAL_SIZE == 64 #define DEC_SUFFIX DD #elif _DECIMAL_SIZE == 128 #define DEC_SUFFIX DL #endif #define DFP_CONSTANT(x) PASTE(x,DEC_SUFFIX) #define DFP_MIN PASTE(__DEC,PASTE(_DECIMAL_SIZE,_MIN__)) #define DFP_EPSILON PASTE(__DEC,PASTE(_DECIMAL_SIZE,_EPSILON__)) /* Some useful (falsely generic) constants */ #define DFP_HUGE_VAL PASTE(HUGE_VAL_D,_DECIMAL_SIZE) #define DFP_NAN (DEC_TYPE)DEC_NAN #define DFP_INF (DEC_TYPE)DEC_INFINITY #ifndef PASTE /* Ideally these shouldn't need to be used elsewhere outside of this file */ # define PASTE(x,y) PASTE2(x,y) # define PASTE2(x,y) x##y #endif libdfp-1.0.17/include/dfpstdlib_private.h000066400000000000000000000040631504475242000203470ustar00rootroot00000000000000/* Internal function prototypes for string-to-decimal conversions Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DFPSTDLIB_PRIVATE_H #define _DFPSTDLIB_PRIVATE_H 1 #include extern _Decimal32 __strtod32_internal (const char * __restrict nptr, char ** __restrict endptr, int group); extern _Decimal64 __strtod64_internal (const char * __restrict nptr, char ** __restrict endptr, int group); extern _Decimal128 __strtod128_internal (const char * __restrict nptr, char ** __restrict endptr, int group); hidden_proto (__strtod32_internal) hidden_proto (__strtod64_internal) hidden_proto (__strtod128_internal) extern _Decimal32 __strtod32_l_internal (const char * __restrict nptr, char ** __restrict endptr, int group, locale_t loc); extern _Decimal64 __strtod64_l_internal (const char * __restrict nptr, char ** __restrict endptr, int group, locale_t loc); extern _Decimal128 __strtod128_l_internal (const char * __restrict nptr, char ** __restrict endptr, int group, locale_t loc); hidden_proto (__strtod32_l_internal) hidden_proto (__strtod64_l_internal) hidden_proto (__strtod128_l_internal) #endif /* _DFPSTDLIB_PRIVATE_H */ libdfp-1.0.17/include/dfpwchar_private.h000066400000000000000000000040601504475242000201670ustar00rootroot00000000000000/* Internal interfaces for wcstod[32|64|128] functions. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DFPWCHAR_PRIVATE_H #define _DFPWCHAR_PRIVATE_H extern _Decimal32 __wcstod32_internal (const wchar_t * __restrict nptr, wchar_t ** __restrict endptr, int group); extern _Decimal64 __wcstod64_internal (const wchar_t * __restrict nptr, wchar_t ** __restrict endptr, int group); extern _Decimal128 __wcstod128_internal (const wchar_t * __restrict nptr, wchar_t ** __restrict endptr, int group); hidden_proto (__wcstod32_internal) hidden_proto (__wcstod64_internal) hidden_proto (__wcstod128_internal) extern _Decimal32 __wcstod32_l_internal (const wchar_t * __restrict nptr, wchar_t ** __restrict endptr, int group, locale_t loc); extern _Decimal64 __wcstod64_l_internal (const wchar_t * __restrict nptr, wchar_t ** __restrict endptr, int group, locale_t loc); extern _Decimal128 __wcstod128_l_internal (const wchar_t * __restrict nptr, wchar_t ** __restrict endptr, int group, locale_t loc); hidden_proto (__wcstod32_l_internal) hidden_proto (__wcstod64_l_internal) hidden_proto (__wcstod128_l_internal) #endif /* _DFPWCHAR_PRIVATE_H */ libdfp-1.0.17/include/fmt_dfp.h000066400000000000000000000031201504475242000162520ustar00rootroot00000000000000/* Prototype for converting a _Decimal* number into a string Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _FMT_DFP_H #define _FMT_DFP_H 1 #include #include __BEGIN_DECLS extern char * __fmt_d32 ( const struct printf_info *info, const void *const *args, char * str, int slen); extern char * __fmt_d64 ( const struct printf_info *info, const void *const *args, char * str, int slen); extern char * __fmt_d128 ( const struct printf_info *info, const void *const *args, char * str, int slen); hidden_proto(__fmt_d32) hidden_proto(__fmt_d64) hidden_proto(__fmt_d128) __END_DECLS #endif libdfp-1.0.17/include/get_digits.h000066400000000000000000000027271504475242000167710ustar00rootroot00000000000000/* Prototype for getting the number of digits in a _Decimal[32|64|128] Copyright (C) 2009 IBM Corporation. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _GET_DIGITS_H #define _GET_DIGITS_H 1 /* Define the number of digits necessary to store a DEC_TYPE in a string. */ #define NDIGITS_32 8 #define NDIGITS_64 17 #define NDIGITS_128 35 void __get_digits_d32 (_Decimal32, char*, int*, int*, int *, int *); void __get_digits_d64 (_Decimal64, char*, int*, int*, int *, int *); void __get_digits_d128 (_Decimal128, char*, int*, int*, int *, int *); #endif /* _GET_DIGITS_H */ libdfp-1.0.17/include/gstdint.h000066400000000000000000000021651504475242000163170ustar00rootroot00000000000000/* Internal function prototypes for string-to-decimal conversions Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ /* This header is necessary because libdecnumber in GCC makes a requirement of * it and it normally resides outside of the libdecnumber directory. */ #include libdfp-1.0.17/include/ieee754r_private.h000066400000000000000000000063631504475242000177320ustar00rootroot00000000000000/* Internal ieee754r function prototypes used by libdfp. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DFP_IEEE754R_PRIVATE_H #define _DFP_IEEE754R_PRIVATE_H 1 /* Maybe just have libdfp use the __builtin_ functions in the future? */ extern int __isgreaterd32(_Decimal32 x, _Decimal32 y); extern int __isgreaterequald32(_Decimal32 x, _Decimal32 y); extern int __islessd32(_Decimal32 x, _Decimal32 y); extern int __islessequald32(_Decimal32 x, _Decimal32 y); extern int __islessgreaterd32(_Decimal32 x, _Decimal32 y); extern int __isunorderedd32 (_Decimal32 x, _Decimal32 y); extern int __isgreaterd64(_Decimal64 x, _Decimal64 y); extern int __isgreaterequald64(_Decimal64 x, _Decimal64 y); extern int __islessd64(_Decimal64 x, _Decimal64 y); extern int __islessequald64(_Decimal64 x, _Decimal64 y); extern int __islessgreaterd64(_Decimal64 x, _Decimal64 y); extern int __isunorderedd64 (_Decimal64 x, _Decimal64 y); extern int __isgreaterd128(_Decimal128 x, _Decimal128 y); extern int __isgreaterequald128(_Decimal128 x, _Decimal128 y); extern int __islessd128(_Decimal128 x, _Decimal128 y); extern int __islessequald128(_Decimal128 x, _Decimal128 y); extern int __islessgreaterd128(_Decimal128 x, _Decimal128 y); extern int __isunorderedd128 (_Decimal128 x, _Decimal128 y); extern _Decimal32 __lgamma_rd32 (_Decimal32, int *); extern _Decimal64 __lgamma_rd64 (_Decimal64, int *); extern _Decimal128 __lgamma_rd128 (_Decimal128, int *); extern int __isnormald32 (_Decimal32 x); extern int __isnormald64 (_Decimal64 x); extern int __isnormald128 (_Decimal128 x); hidden_proto(__isnand32) hidden_proto(__isnand64) hidden_proto(__isnand128) hidden_proto(__isinfd32) hidden_proto(__isinfd64) hidden_proto(__isinfd128) hidden_proto(__isfinited32) hidden_proto(__isfinited64) hidden_proto(__isfinited128) hidden_proto(__fpclassifyd32) hidden_proto(__fpclassifyd64) hidden_proto(__fpclassifyd128) hidden_proto(__fabsd32) hidden_proto(__fabsd64) hidden_proto(__fabsd128) hidden_proto(__signbitd32) hidden_proto(__signbitd64) hidden_proto(__signbitd128) extern _Decimal32 __quantized32 (_Decimal32, _Decimal32); extern _Decimal64 __quantized64 (_Decimal64, _Decimal64); extern _Decimal128 __quantized128 (_Decimal128, _Decimal128); hidden_proto(__quantized32) hidden_proto(__quantized64) hidden_proto(__quantized128) #endif /* _IEEE754R_PRIVATE_H */ libdfp-1.0.17/include/init_dfp.h000066400000000000000000000020601504475242000164310ustar00rootroot00000000000000/* Libdfp constructor prototype. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _INIT_DFP_H #define _INIT_DFP_H 1 extern void __libdfp_init (void); #endif libdfp-1.0.17/include/libdfp-symbols.h000066400000000000000000000125471504475242000175760ustar00rootroot00000000000000/* Support macros for making weak and strong aliases for symbols. Copyright (C) 1995-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _LIBDFP_SYMBOLS_H #define _LIBDFP_SYMBOLS_H 1 /* Define a macro we can use to construct the asm name for a C symbol. */ #ifndef LABEL # define LABEL(name) name##: #endif /* LABEL */ #define MIN(a,b) (((a)<(b))?(a):(b)) /* Define ALIASNAME as a strong alias for NAME. */ #ifndef __ASSEMBLER__ # define strong_alias(name, aliasname) _strong_alias(name, aliasname) # define _strong_alias(name, aliasname) \ extern __typeof (name) aliasname __attribute__ ((alias (#name))); #else # define strong_alias(original, alias) \ .globl alias; \ .set alias, original # define strong_data_alias(original, alias) strong_alias(original, alias) #endif /* Define ALIASNAME as a weak alias for NAME. If weak aliases are not available, this defines a strong alias. */ #ifndef __ASSEMBLER__ # define weak_alias(name, aliasname) _weak_alias (name, aliasname) # define _weak_alias(name, aliasname) \ extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))); #else # define weak_alias(original, alias) \ .weak alias; \ alias = original #endif /* Same as WEAK_ALIAS, but mark symbol as hidden. */ #define weak_hidden_alias(name, aliasname) \ _weak_hidden_alias (name, aliasname) #define _weak_hidden_alias(name, aliasname) \ extern __typeof (name) aliasname \ __attribute__ ((weak, alias (#name), __visibility__ ("hidden"))); /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined). */ #define weak_extern(symbol) _weak_extern (weak symbol) #define _weak_extern(expr) _Pragma (#expr) /* We don't need hidden visibility with the static library libdfp.a */ #ifdef SHARED # define attribute_hidden __attribute__ ((visibility ("hidden"))) #else # define attribute_hidden #endif /* SHARED */ /* Use the copy in cdefs.h if available, if not, bring in the glibc definition. */ #ifndef __attribute_copy__ # if __GNUC__ >= 9 # define __attribute_copy__(name) __attribute__ ((__copy__ (name))) # else # define __attribute_copy__(name) # endif #endif /* Add versioned symbol macros when necessary. */ /* Macros to avoid PLT calls within libdfp. */ #ifdef SHARED # ifndef __ASSEMBLER__ # define __hidden_proto_hiddenattr(attrs...) \ __attribute__ ((visibility ("hidden"), ##attrs)) # define hidden_proto(name, attrs...) \ __hidden_proto (name, __GI_##name, ##attrs) # define __hidden_proto(name, internal, attrs...) \ extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \ __hidden_proto_hiddenattr (attrs); # define __hidden_asmname(name) \ __hidden_asmname1 (__USER_LABEL_PREFIX__, name) # define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name) # define __hidden_asmname2(prefix, name) #prefix name # define __hidden_ver1(local, internal, name) \ extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \ extern __typeof (name) __EI_##name \ __attribute__((alias (__hidden_asmname (#local)))) \ __attribute_copy__ (name) # define hidden_ver(local, name) __hidden_ver1(local, __GI_##name, name); # define hidden_data_ver(local, name) hidden_ver(local, name) # define hidden_def(name) _hidden_def(name) # define _hidden_def(name) __hidden_ver1(__GI_##name, name, name); # define hidden_data_def(name) hidden_def(name) # define hidden_weak(name) \ __hidden_ver1(__GI_##name, name, name) __attribute__((weak)); # define hidden_data_weak(name) hidden_weak(name) # else /* __ASSEMBLER__ */ # define hidden_def(name) strong_alias (name, __GI_##name) # define hidden_weak(name) hidden_def (name) # define hidden_ver(local, name) strong_alias (local, __GI_##name) # define hidden_data_def(name) strong_data_alias (name, __GI_##name) # define hidden_data_weak(name) hidden_data_def (name) # define hidden_data_ver(local, name) strong_data_alias (local, __GI_##name) # endif #else # define hidden_proto(name, attrs...) # define hidden_weak(name) # define hidden_def(name) # define hidden_ver(local, name) # define hidden_data_weak(name) # define hidden_data_def(name) # define hidden_data_ver(local, name) #endif /* SHARED */ /* Bring in PLT redirects for implicit GCC functions. */ #include /* C++ needs to know that types and declarations are C, not C++. */ #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECL } #else # define __BEGIN_DECLS # define __END_DECLS #endif #endif /* _LIBDFP_SYMBOLS_H */ libdfp-1.0.17/include/printf_dfp.h000066400000000000000000000036311504475242000167750ustar00rootroot00000000000000/* Function prototypes to convert DFP values to strings Copyright (C) 2006, 2009 IBM Corporation. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _PRINTF_DFP_H #define _PRINTF_DFP_H 1 #include #define DFP_FLAG_DECIMAL_32 (1<<16) #define DFP_FLAG_DECIMAL_64 (1<<17) #define DFP_FLAG_DECIMAL_128 (1<<18) #include /* Internal entry point for formatting DFP. */ extern int __printf_dfp (FILE *, const struct printf_info *, const void *const *); hidden_proto (__printf_dfp) extern void __d128_va (void *mem, va_list *ap); hidden_proto (__d128_va) extern void __d64_va (void *mem, va_list *ap); hidden_proto (__d64_va) extern void __d32_va (void *mem, va_list *ap); hidden_proto (__d32_va) extern int __dfp_ais (const struct printf_info *info, size_t n, int *argtype, int *size); hidden_proto (__dfp_ais) extern int __register_printf_dfp (void); hidden_proto(__register_printf_dfp) /* Modifiers for re-using printf hook as strfromdN */ extern int mod_H; extern int mod_D; extern int mod_DD; #endif libdfp-1.0.17/include/sysdep.h000066400000000000000000000034751504475242000161570ustar00rootroot00000000000000/* Some constructs used by asm files. Copyright (C) 2009 IBM Corporation. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define cfi_startproc .cfi_startproc #define cfi_endproc .cfi_endproc #define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off #define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg #define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off #define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off #define cfi_offset(reg, off) .cfi_offset reg, off #define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off #define cfi_register(r1, r2) .cfi_register r1, r2 #define cfi_return_column(reg) .cfi_return_column reg #define cfi_restore(reg) .cfi_restore reg #define cfi_same_value(reg) .cfi_same_value reg #define cfi_undefined(reg) .cfi_undefined reg #define cfi_remember_state .cfi_remember_state #define cfi_restore_state .cfi_restore_state #define cfi_window_save .cfi_window_save #include_next libdfp-1.0.17/install-sh000077500000000000000000000220211504475242000150440ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: libdfp-1.0.17/libbid/000077500000000000000000000000001504475242000142705ustar00rootroot00000000000000libdfp-1.0.17/libbid/ChangeLog000066400000000000000000000305551504475242000160520ustar00rootroot000000000000002022-05-20 Christophe Lyon * bid_binarydecimal.c (CLZ32_MASK16): Delete. (CLZ32_MASK8): Delete. (CLZ32_MASK4): Delete. (CLZ32_MASK2): Delete. (CLZ32_MASK1): Delete. (clz32_nz): Use __builtin_clz. (ctz32_1bit): Delete. (ctz32): Use __builtin_ctz. (CLZ64_MASK32): Delete. (CLZ64_MASK16): Delete. (CLZ64_MASK8): Delete. (CLZ64_MASK4): Delete. (CLZ64_MASK2): Delete. (CLZ64_MASK1): Delete. (clz64_nz): Use __builtin_clzl. (ctz64_1bit): Delete. (ctz64): Use __builtin_ctzl. 2022-05-20 Christophe Lyon * bid_gcc_intrinsics.h (LIBGCC2_HAS_HF_MODE): Define according to __LIBGCC_HAS_HF_MODE__. (BID_HAS_HF_MODE): Define. (HFtype): Define. (__bid_extendhfsd): New prototype. (__bid_extendhfdd): Likewise. (__bid_extendhftd): Likewise. (__bid_truncsdhf): Likewise. (__bid_truncddhf): Likewise. (__bid_trunctdhf): Likewise. * _dd_to_hf.c: New file. * _hf_to_dd.c: New file. * _hf_to_sd.c: New file. * _hf_to_td.c: New file. * _sd_to_hf.c: New file. * _td_to_hf.c: New file. 2022-05-20 Christophe Lyon * _dd_to_xf.c: Check __LIBGCC_HAS_XF_MODE__. * _sd_to_xf.c: Likewise. * _td_to_xf.c: Likewise. * _xf_to_dd.c: Likewise. * _xf_to_sd.c: Likewise. * _xf_to_td.c: Likewise. 2020-10-23 Jakub Jelinek PR tree-optimization/97164 * bid_functions.h (UINT192): Decrease alignment to 8 bytes. 2020-05-05 Martin Liska PR libgcc/92565 * bid_internal.h (handle_UF_128_rem): Remove unused variable. (handle_UF_128): Likewise. 2020-01-01 Jakub Jelinek Update copyright years. 2018-01-03 Jakub Jelinek Update copyright years. 2016-01-04 Jakub Jelinek Update copyright years. 2014-07-23 Marius Cornea PR libgcc/61685 * bid128_fma.c (rounding_correction): Remove redundant tests. 2014-06-10 Uros Bizjak * bid128_div.c (BID128_FUNCTION_ARG2): Remove unused variable 'Ql'. Call __mul_128x128_high instead of __mul_128x128_full. (TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2): Ditto. (BID128_FUNCTION_ARGTYPE1_ARG128): Ditto. (BID128_FUNCTION_ARG128_ARGTYPE2): Ditto. * bid64_div.c (TYPE0_FUNCTION_ARGTYPE1_ARG128): Ditto. (TYPE0_FUNCTION_ARG128_ARGTYPE2): Ditto. (TYPE0_FUNCTION_ARG128_ARG128): Ditto. 2014-01-02 Richard Sandiford Update copyright years 2012-11-04 Thomas Schwinge * bid_functions.h: Check for __GLIBC__ additionally to LINUX when defining format specifiers. 2007-09-27 H.J. Lu * bid128_fromstring.c: Removed. * bid_dpd.c: New from libbid 2007-09-26. * bid128_to_int16.c: Likewise. * bid128_to_int8.c: Likewise. * bid128_to_uint8.c: Likewise. * bid128_to_uint16.c: Likewise. * bid64_to_int16.c: Likewise. * bid64_to_int8.c: Likewise. * bid64_to_uint16.c: Likewise. * bid64_to_uint8.c: Likewise. * bid128_2_str.h: Updated from libbid 2007-09-26. * bid128_2_str_macros.h: Likewise. * bid128_2_str_tables.c: Likewise. * bid128_add.c: Likewise. * bid128.c: Likewise. * bid128_compare.c: Likewise. * bid128_div.c: Likewise. * bid128_fma.c: Likewise. * bid128_logb.c: Likewise. * bid128_minmax.c: Likewise. * bid128_mul.c: Likewise. * bid128_next.c: Likewise. * bid128_noncomp.c: Likewise. * bid128_quantize.c: Likewise. * bid128_rem.c: Likewise. * bid128_round_integral.c: Likewise. * bid128_scalb.c: Likewise. * bid128_sqrt.c: Likewise. * bid128_string.c: Likewise. * bid128_to_int32.c: Likewise. * bid128_to_int64.c: Likewise. * bid128_to_uint32.c: Likewise. * bid128_to_uint64.c: Likewise. * bid32_to_bid128.c: Likewise. * bid32_to_bid64.c: Likewise. * bid64_add.c: Likewise. * bid64_compare.c: Likewise. * bid64_div.c: Likewise. * bid64_fma.c: Likewise. * bid64_logb.c: Likewise. * bid64_minmax.c: Likewise. * bid64_mul.c: Likewise. * bid64_next.c: Likewise. * bid64_noncomp.c: Likewise. * bid64_quantize.c: Likewise. * bid64_rem.c: Likewise. * bid64_round_integral.c: Likewise. * bid64_scalb.c: Likewise. * bid64_sqrt.c: Likewise. * bid64_string.c: Likewise. * bid64_to_bid128.c: Likewise. * bid64_to_int32.c: Likewise. * bid64_to_int64.c: Likewise. * bid64_to_uint32.c: Likewise. * bid64_to_uint64.c: Likewise. * bid_b2d.h: Likewise. * bid_binarydecimal.c: Likewise. * bid_conf.h: Likewise. * bid_convert_data.c: Likewise. * bid_decimal_data.c: Likewise. * bid_decimal_globals.c: Likewise. * bid_div_macros.h: Likewise. * bid_flag_operations.c: Likewise. * bid_from_int.c: Likewise. * bid_functions.h: Likewise. * bid_gcc_intrinsics.h: Likewise. * bid_inline_add.h: Likewise. * bid_internal.h: Likewise. * bid_round.c: Likewise. * bid_sqrt_macros.h: Likewise. * _addsub_dd.c: Likewise. * _addsub_sd.c: Likewise. * _addsub_td.c: Likewise. * _dd_to_df.c: Likewise. * _dd_to_di.c: Likewise. * _dd_to_sd.c: Likewise. * _dd_to_sf.c: Likewise. * _dd_to_si.c: Likewise. * _dd_to_td.c: Likewise. * _dd_to_tf.c: Likewise. * _dd_to_udi.c: Likewise. * _dd_to_usi.c: Likewise. * _dd_to_xf.c: Likewise. * _df_to_dd.c: Likewise. * _df_to_sd.c: Likewise. * _df_to_td.c: Likewise. * _di_to_dd.c: Likewise. * _di_to_sd.c: Likewise. * _di_to_td.c: Likewise. * _div_dd.c: Likewise. * _div_sd.c: Likewise. * _div_td.c: Likewise. * _eq_dd.c: Likewise. * _eq_sd.c: Likewise. * _eq_td.c: Likewise. * _ge_dd.c: Likewise. * _ge_sd.c: Likewise. * _ge_td.c: Likewise. * _gt_dd.c: Likewise. * _gt_sd.c: Likewise. * _gt_td.c: Likewise. * _isinfd128.c: Likewise. * _isinfd32.c: Likewise. * _isinfd64.c: Likewise. * _le_dd.c: Likewise. * _le_sd.c: Likewise. * _le_td.c: Likewise. * _lt_dd.c: Likewise. * _lt_sd.c: Likewise. * _lt_td.c: Likewise. * _mul_dd.c: Likewise. * _mul_sd.c: Likewise. * _mul_td.c: Likewise. * _ne_dd.c: Likewise. * _ne_sd.c: Likewise. * _ne_td.c: Likewise. * _sd_to_dd.c: Likewise. * _sd_to_df.c: Likewise. * _sd_to_di.c: Likewise. * _sd_to_sf.c: Likewise. * _sd_to_si.c: Likewise. * _sd_to_td.c: Likewise. * _sd_to_tf.c: Likewise. * _sd_to_udi.c: Likewise. * _sd_to_usi.c: Likewise. * _sd_to_xf.c: Likewise. * _sf_to_dd.c: Likewise. * _sf_to_sd.c: Likewise. * _sf_to_td.c: Likewise. * _si_to_dd.c: Likewise. * _si_to_sd.c: Likewise. * _si_to_td.c: Likewise. * _td_to_dd.c: Likewise. * _td_to_df.c: Likewise. * _td_to_di.c: Likewise. * _td_to_sd.c: Likewise. * _td_to_sf.c: Likewise. * _td_to_si.c: Likewise. * _td_to_tf.c: Likewise. * _td_to_udi.c: Likewise. * _td_to_usi.c: Likewise. * _td_to_xf.c: Likewise. * _tf_to_dd.c: Likewise. * _tf_to_sd.c: Likewise. * _tf_to_td.c: Likewise. * _udi_to_dd.c: Likewise. * _udi_to_sd.c: Likewise. * _udi_to_td.c: Likewise. * _unord_dd.c: Likewise. * _unord_sd.c: Likewise. * _unord_td.c: Likewise. * _usi_to_dd.c: Likewise. * _usi_to_sd.c: Likewise. * _usi_to_td.c: Likewise. * _xf_to_dd.c: Likewise. * _xf_to_sd.c: Likewise. * _xf_to_td.c: Likewise. 2007-09-27 H.J. Lu * b2d.h: Renamed to ... * bid_b2d.h: This. * bid128_to_string.c: Renamed to ... * bid128_string.c: This. * bid_intrinsics.h: Renamed to ... * bid_gcc_intrinsics.h: This. * bid_string.c: Renamed to ... * bid64_string.c: This. * binarydecimal.c: Renamed to ... * bid_decimal_globals.c: This. * convert_data.c: Renamed to ... * bid_convert_data.c: This. * decimal_data.c: Renamed to ... * bid_decimal_data.c: This. * decimal_globals.c: Renamed to ... * bid_decimal_globals.c: This. * div_macros.h: Renamed to ... * bid_div_macros.h: This. * inline_bid_add.h: Renamed to ... * bid_inline_add.h: This. * sqrt_macros.h: Renamed to ... * bid_sqrt_macros.h: This. 2007-07-06 H.J. Lu Updated from Intel BID library: * bid_conf.h (BID_THREAD): Defined only if both HAVE_CC_TLS and USE_TLS are defined. 2007-07-05 H.J. Lu Updated from Intel BID library: * bid_conf.h (BID_THREAD): Defined. (__bid_IDEC_glbround): Add BID_THREAD in declaration. (__bid_IDEC_glbflags): Likewise. * decimal_globals.c (__bid_IDEC_glbround): Add BID_THREAD in declaration. (__bid_IDEC_glbflags): Likewise. 2007-07-04 Marius Cornea H.J. Lu * _addsub_dd.c: New file from Intel BID library. * _addsub_sd.c: Likewise. * _addsub_td.c: Likewise. * _dd_to_df.c: Likewise. * _dd_to_di.c: Likewise. * _dd_to_sd.c: Likewise. * _dd_to_sf.c: Likewise. * _dd_to_si.c: Likewise. * _dd_to_td.c: Likewise. * _dd_to_tf.c: Likewise. * _dd_to_udi.c: Likewise. * _dd_to_usi.c: Likewise. * _dd_to_xf.c: Likewise. * _df_to_dd.c: Likewise. * _df_to_sd.c: Likewise. * _df_to_td.c: Likewise. * _di_to_dd.c: Likewise. * _di_to_sd.c: Likewise. * _di_to_td.c: Likewise. * _div_dd.c: Likewise. * _div_sd.c: Likewise. * _div_td.c: Likewise. * _eq_dd.c: Likewise. * _eq_sd.c: Likewise. * _eq_td.c: Likewise. * _ge_dd.c: Likewise. * _ge_sd.c: Likewise. * _ge_td.c: Likewise. * _gt_dd.c: Likewise. * _gt_sd.c: Likewise. * _gt_td.c: Likewise. * _isinfd128.c: Likewise. * _isinfd32.c: Likewise. * _isinfd64.c: Likewise. * _le_dd.c: Likewise. * _le_sd.c: Likewise. * _le_td.c: Likewise. * _lt_dd.c: Likewise. * _lt_sd.c: Likewise. * _lt_td.c: Likewise. * _mul_dd.c: Likewise. * _mul_sd.c: Likewise. * _mul_td.c: Likewise. * _ne_dd.c: Likewise. * _ne_sd.c: Likewise. * _ne_td.c: Likewise. * _sd_to_dd.c: Likewise. * _sd_to_df.c: Likewise. * _sd_to_di.c: Likewise. * _sd_to_sf.c: Likewise. * _sd_to_si.c: Likewise. * _sd_to_td.c: Likewise. * _sd_to_tf.c: Likewise. * _sd_to_udi.c: Likewise. * _sd_to_usi.c: Likewise. * _sd_to_xf.c: Likewise. * _sf_to_dd.c: Likewise. * _sf_to_sd.c: Likewise. * _sf_to_td.c: Likewise. * _si_to_dd.c: Likewise. * _si_to_sd.c: Likewise. * _si_to_td.c: Likewise. * _td_to_dd.c: Likewise. * _td_to_df.c: Likewise. * _td_to_di.c: Likewise. * _td_to_sd.c: Likewise. * _td_to_sf.c: Likewise. * _td_to_si.c: Likewise. * _td_to_tf.c: Likewise. * _td_to_udi.c: Likewise. * _td_to_usi.c: Likewise. * _td_to_xf.c: Likewise. * _tf_to_dd.c: Likewise. * _tf_to_sd.c: Likewise. * _tf_to_td.c: Likewise. * _udi_to_dd.c: Likewise. * _udi_to_sd.c: Likewise. * _udi_to_td.c: Likewise. * _unord_dd.c: Likewise. * _unord_sd.c: Likewise. * _unord_td.c: Likewise. * _usi_to_dd.c: Likewise. * _usi_to_sd.c: Likewise. * _usi_to_td.c: Likewise. * _xf_to_dd.c: Likewise. * _xf_to_sd.c: Likewise. * _xf_to_td.c: Likewise. 2007-07-04 Marius Cornea * b2d.h: New file from Intel BID library. * bid128_2_str.h: Likewise. * bid128_2_str_macros.h: Likewise. * bid128_2_str_tables.c: Likewise. * bid128_add.c: Likewise. * bid128.c: Likewise. * bid128_compare.c: Likewise. * bid128_div.c: Likewise. * bid128_fma.c: Likewise. * bid128_fromstring.c: Likewise. * bid128_logb.c: Likewise. * bid128_minmax.c: Likewise. * bid128_mul.c: Likewise. * bid128_next.c: Likewise. * bid128_noncomp.c: Likewise. * bid128_quantize.c: Likewise. * bid128_rem.c: Likewise. * bid128_round_integral.c: Likewise. * bid128_scalb.c: Likewise. * bid128_sqrt.c: Likewise. * bid128_to_int32.c: Likewise. * bid128_to_int64.c: Likewise. * bid128_to_string.c: Likewise. * bid128_to_uint32.c: Likewise. * bid128_to_uint64.c: Likewise. * bid32_to_bid128.c: Likewise. * bid32_to_bid64.c: Likewise. * bid64_add.c: Likewise. * bid64_compare.c: Likewise. * bid64_div.c: Likewise. * bid64_fma.c: Likewise. * bid64_logb.c: Likewise. * bid64_minmax.c: Likewise. * bid64_mul.c: Likewise. * bid64_next.c: Likewise. * bid64_noncomp.c: Likewise. * bid64_quantize.c: Likewise. * bid64_rem.c: Likewise. * bid64_round_integral.c: Likewise. * bid64_scalb.c: Likewise. * bid64_sqrt.c: Likewise. * bid64_to_bid128.c: Likewise. * bid64_to_int32.c: Likewise. * bid64_to_int64.c: Likewise. * bid64_to_uint32.c: Likewise. * bid64_to_uint64.c: Likewise. * bid_conf.h: Likewise. * bid_flag_operations.c: Likewise. * bid_from_int.c: Likewise. * bid_functions.h: Likewise. * bid_internal.h: Likewise. * bid_round.c: Likewise. * bid_string.c: Likewise. * binarydecimal.c: Likewise. * convert_data.c: Likewise. * decimal_data.c: Likewise. * decimal_globals.c: Likewise. * div_macros.h: Likewise. * inline_bid_add.h: Likewise. * sqrt_macros.h: Likewise. Copyright (C) 2007-2022 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libdfp-1.0.17/libbid/Makefile000066400000000000000000000036521504475242000157360ustar00rootroot00000000000000libdfp_files += _addsub_dd _dd_to_sf _dd_to_xf _di_to_td _eq_td _gt_td \ _le_td _mul_td _sd_to_di _sd_to_usi _si_to_sd _td_to_sf \ _tf_to_dd _unord_dd _xf_to_dd _addsub_sd _dd_to_si \ _df_to_dd _div_dd _ge_dd _lt_dd _ne_dd _sd_to_sf _sd_to_xf \ _si_to_td _td_to_si _tf_to_sd _unord_sd _xf_to_sd _addsub_td \ _dd_to_td _df_to_sd _div_sd _ge_sd _lt_sd _ne_sd _sd_to_si \ _sf_to_dd _td_to_dd _td_to_tf _tf_to_td _unord_td _xf_to_td \ _dd_to_df _dd_to_tf _df_to_td _div_td _ge_td _lt_td _ne_td \ _sd_to_td _sf_to_sd _td_to_df _td_to_udi _udi_to_dd _usi_to_dd \ _dd_to_di _dd_to_udi _di_to_dd _eq_dd _gt_dd _le_dd _mul_dd \ _sd_to_dd _sd_to_tf _sf_to_td _td_to_di _td_to_usi _udi_to_sd \ _usi_to_sd _dd_to_sd _dd_to_usi _di_to_sd _eq_sd _gt_sd _le_sd \ _mul_sd _sd_to_df _sd_to_udi _si_to_dd _td_to_sd _td_to_xf \ _udi_to_td _usi_to_td _dd_to_hf _hf_to_dd _hf_to_sd _hf_to_sd \ _hf_to_td _sd_to_hf _td_to_hf libdfp_files += bid_decimal_globals bid_decimal_data \ bid_binarydecimal bid_convert_data \ _isinfd32 _isinfd64 _isinfd128 bid64_noncomp \ bid128_noncomp bid128_fma bid_round bid_from_int \ bid64_add bid128_add bid64_div bid128_div \ bid64_mul bid128_mul bid64_compare bid128_compare \ bid128 bid32_to_bid64 bid32_to_bid128 bid64_to_bid128 \ bid64_to_int32 bid64_to_int64 \ bid64_to_uint32 bid64_to_uint64 \ bid128_to_int32 bid128_to_int64 \ bid128_to_uint32 bid128_to_uint64 # Ensure rounding mode is per-thread. # TODO: Should this be via autoconf instead? sysdeps-CFLAGS += -DUSE_TLS -DHAVE_CC_TLS # TODO: TImode and TFmode support are missing from the above. # for now, use BID -> decnumber ifeq ($(libdfp-has-timode),yes) libdfp_files += fixsdti fixddti \ fixunssdti fixunsddti \ fixtdti fixunstdti \ floattitd floatunstitd \ floattidd floatunstidd \ floattisd floatunstisd endif libdfp-1.0.17/libbid/README.libdfp000066400000000000000000000013311504475242000164050ustar00rootroot00000000000000Some hints when syncing libbid: bid_gcc_intrinsics.h: Add PLT-bypassing hints: Add #include "libdfp_symbols.h" vim: %s/.*\(__bid_[^ (]*\).*/\0 hidden_proto(\1);/ Next, scan for these and append hidden_def when we find the implementations (with GNU grep): for i in $(grep -oP "(?<=hidden_proto\()[^)]*" bid_gcc_intrinsics.h); do echo "hidden_def($i);" >> $(grep -e $i -l *c); done for i in _*.c; do echo "$i"; vim -c "#endif\n\(hidden_def.*\)$/\1\r#endif/ge" -c "w" -c "qall" $i; done Likewise, ensure nothing is missing from the makefile, otherwise GCC will kindly, and quietly link in whatever was built inside libgcc. This may or may not get caught by tests. check Makefile for missing files libdfp-1.0.17/libbid/_addsub_dd.c000066400000000000000000000026211504475242000165050ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_adddd3 (_Decimal64 x, _Decimal64 y) { union decimal64 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid64_add (ux.i, uy.i); return (res.d); } _Decimal64 __bid_subdd3 (_Decimal64 x, _Decimal64 y) { union decimal64 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid64_sub (ux.i, uy.i); return (res.d); } hidden_def(__bid_adddd3); hidden_def(__bid_subdd3); libdfp-1.0.17/libbid/_addsub_sd.c000066400000000000000000000032151504475242000165240ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_addsd3 (_Decimal32 x, _Decimal32 y) { UINT64 x64, y64, res64; union decimal32 ux, uy, res; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res64 = __bid64_add (x64, y64); res.i = __bid64_to_bid32 (res64); return (res.d); } _Decimal32 __bid_subsd3 (_Decimal32 x, _Decimal32 y) { UINT64 x64, y64, res64; union decimal32 ux, uy, res; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res64 = __bid64_sub (x64, y64); res.i = __bid64_to_bid32 (res64); return (res.d); } hidden_def(__bid_addsd3); hidden_def(__bid_subsd3); libdfp-1.0.17/libbid/_addsub_td.c000066400000000000000000000026341504475242000165310ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_addtd3 (_Decimal128 x, _Decimal128 y) { union decimal128 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid128_add (ux.i, uy.i); return (res.d); } _Decimal128 __bid_subtd3 (_Decimal128 x, _Decimal128 y) { union decimal128 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid128_sub (ux.i, uy.i); return (res.d); } hidden_def(__bid_addtd3); hidden_def(__bid_subtd3); libdfp-1.0.17/libbid/_dd_to_df.c000066400000000000000000000022721504475242000163400ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" DFtype __bid_truncdddf (_Decimal64 x) { DFtype res; union decimal64 ux; ux.d = x; res = __bid64_to_binary64 (ux.i); return (res); } hidden_def(__bid_truncdddf); libdfp-1.0.17/libbid/_dd_to_di.c000066400000000000000000000023231504475242000163400ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" DItype __bid_fixdddi (_Decimal64 x) { DItype res = 0xbaddbaddbaddbaddull; union decimal64 ux; ux.d = x; res = __bid64_to_int64_xint (ux.i); return (res); } hidden_def(__bid_fixdddi); libdfp-1.0.17/libbid/_dd_to_hf.c000066400000000000000000000023471504475242000163470ustar00rootroot00000000000000/* Copyright (C) 2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_HF_MODE || BID_HAS_HF_MODE HFtype __bid_truncddhf (_Decimal64 x) { HFtype res; union decimal64 ux; ux.d = x; res = __bid64_to_binary32 (ux.i); return (res); } hidden_def(__bid_truncddhf); #endif libdfp-1.0.17/libbid/_dd_to_sd.c000066400000000000000000000023131504475242000163510ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_truncddsd2 (_Decimal64 x) { union decimal32 res; union decimal64 ux; ux.d = x; res.i = __bid64_to_bid32 (ux.i); return (res.d); } hidden_def(__bid_truncddsd2); libdfp-1.0.17/libbid/_dd_to_sf.c000066400000000000000000000022721504475242000163570ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" SFtype __bid_truncddsf (_Decimal64 x) { SFtype res; union decimal64 ux; ux.d = x; res = __bid64_to_binary32 (ux.i); return (res); } hidden_def(__bid_truncddsf); libdfp-1.0.17/libbid/_dd_to_si.c000066400000000000000000000023101504475242000163530ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" SItype __bid_fixddsi (_Decimal64 x) { SItype res = 0xbaddbadd; union decimal64 ux; ux.d = x; res = __bid64_to_int32_xint (ux.i); return (res); } hidden_def(__bid_fixddsi); libdfp-1.0.17/libbid/_dd_to_td.c000066400000000000000000000023201504475242000163500ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_extendddtd2 (_Decimal64 x) { union decimal128 res; union decimal64 ux; ux.d = x; res.i = __bid64_to_bid128 (ux.i); return (res.d); } hidden_def(__bid_extendddtd2); libdfp-1.0.17/libbid/_dd_to_tf.c000066400000000000000000000023731504475242000163620ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE TFtype __bid_extendddtf (_Decimal64 x) { union float128 res; union decimal64 ux; ux.d = x; res.i = __bid64_to_binary128 (ux.i); return (res.f); } hidden_def(__bid_extendddtf); #endif libdfp-1.0.17/libbid/_dd_to_udi.c000066400000000000000000000024301504475242000165240ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" UDItype __bid_fixunsdddi (_Decimal64 x) { UDItype res = 0xbaddbaddbaddbaddull; union decimal64 ux; ux.d = x; res = __bid64_to_uint64_xint (ux.i); if (res == 0x8000000000000000ull) res = 0; // for NaNs too return (res); } hidden_def(__bid_fixunsdddi); libdfp-1.0.17/libbid/_dd_to_usi.c000066400000000000000000000024021504475242000165420ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" USItype __bid_fixunsddsi (_Decimal64 x) { USItype res = 0xbaddbadd; union decimal64 ux; ux.d = x; res = __bid64_to_uint32_xint (ux.i); if (res == 0x80000000) res = 0; // for NaNs too return (res); } hidden_def(__bid_fixunsddsi); libdfp-1.0.17/libbid/_dd_to_xf.c000066400000000000000000000023411504475242000163610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #ifdef __LIBGCC_HAS_XF_MODE__ XFtype __bid_extendddxf (_Decimal64 x) { XFtype res; union decimal64 ux; ux.d = x; res = __bid64_to_binary80 (ux.i); return (res); } hidden_def(__bid_extendddxf); #endif libdfp-1.0.17/libbid/_df_to_dd.c000066400000000000000000000022431504475242000163360ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_extenddfdd (DFtype x) { union decimal64 res; res.i = __binary64_to_bid64 (x); return (res.d); } hidden_def(__bid_extenddfdd); libdfp-1.0.17/libbid/_df_to_sd.c000066400000000000000000000022421504475242000163540ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_truncdfsd (DFtype x) { union decimal32 res; res.i = __binary64_to_bid32 (x); return (res.d); } hidden_def(__bid_truncdfsd); libdfp-1.0.17/libbid/_df_to_td.c000066400000000000000000000022461504475242000163610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_extenddftd (DFtype x) { union decimal128 res; res.i = __binary64_to_bid128 (x); return (res.d); } hidden_def(__bid_extenddftd); libdfp-1.0.17/libbid/_di_to_dd.c000066400000000000000000000022421504475242000163400ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_floatdidd (DItype x) { union decimal64 res; res.i = __bid64_from_int64 (x); return (res.d); } hidden_def(__bid_floatdidd); libdfp-1.0.17/libbid/_di_to_sd.c000066400000000000000000000023251504475242000163610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_floatdisd (DItype x) { union decimal32 res; UINT64 res64; res64 = __bid64_from_int64 (x); res.i = __bid64_to_bid32 (res64); return (res.d); } hidden_def(__bid_floatdisd); libdfp-1.0.17/libbid/_di_to_td.c000066400000000000000000000022451504475242000163630ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_floatditd (DItype x) { union decimal128 res; res.i = __bid128_from_int64 (x); return (res.d); } hidden_def(__bid_floatditd); libdfp-1.0.17/libbid/_div_dd.c000066400000000000000000000023171504475242000160270ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_divdd3 (_Decimal64 x, _Decimal64 y) { union decimal64 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid64_div (ux.i, uy.i); return (res.d); } hidden_def(__bid_divdd3); libdfp-1.0.17/libbid/_div_sd.c000066400000000000000000000025151504475242000160460ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_divsd3 (_Decimal32 x, _Decimal32 y) { UINT64 x64, y64, res64; union decimal32 ux, uy, res; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res64 = __bid64_div (x64, y64); res.i = __bid64_to_bid32 (res64); return (res.d); } hidden_def(__bid_divsd3); libdfp-1.0.17/libbid/_div_td.c000066400000000000000000000023241504475242000160450ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_divtd3 (_Decimal128 x, _Decimal128 y) { union decimal128 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid128_div (ux.i, uy.i); return (res.d); } hidden_def(__bid_divtd3); libdfp-1.0.17/libbid/_eq_dd.c000066400000000000000000000024121504475242000156460ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_eqdd2 (_Decimal64 x, _Decimal64 y) { CMPtype res; union decimal64 ux, uy; ux.d = x; uy.d = y; res = __bid64_quiet_equal (ux.i, uy.i); if (res == 0) res = 1; else res = 0; return (res); } hidden_def(__bid_eqdd2); libdfp-1.0.17/libbid/_eq_sd.c000066400000000000000000000025341504475242000156720ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_eqsd2 (_Decimal32 x, _Decimal32 y) { CMPtype res; UINT64 x64, y64; union decimal32 ux, uy; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res = __bid64_quiet_equal (x64, y64); if (res == 0) res = 1; else res = 0; return (res); } hidden_def(__bid_eqsd2); libdfp-1.0.17/libbid/_eq_td.c000066400000000000000000000024161504475242000156720ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_eqtd2 (_Decimal128 x, _Decimal128 y) { CMPtype res; union decimal128 ux, uy; ux.d = x; uy.d = y; res = __bid128_quiet_equal (ux.i, uy.i); if (res == 0) res = 1; else res = 0; return (res); } hidden_def(__bid_eqtd2); libdfp-1.0.17/libbid/_ge_dd.c000066400000000000000000000023741504475242000156430ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_gedd2 (_Decimal64 x, _Decimal64 y) { CMPtype res; union decimal64 ux, uy; ux.d = x; uy.d = y; res = __bid64_quiet_greater_equal (ux.i, uy.i); if (res == 0) res = -1; return (res); } hidden_def(__bid_gedd2); libdfp-1.0.17/libbid/_ge_sd.c000066400000000000000000000025171504475242000156610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_gesd2 (_Decimal32 x, _Decimal32 y) { CMPtype res; UINT64 x64, y64; union decimal32 ux, uy; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res = __bid64_quiet_greater_equal (x64, y64); if (res == 0) res = -1; return (res); } hidden_def(__bid_gesd2); libdfp-1.0.17/libbid/_ge_td.c000066400000000000000000000024001504475242000156510ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_getd2 (_Decimal128 x, _Decimal128 y) { CMPtype res; union decimal128 ux, uy; ux.d = x; uy.d = y; res = __bid128_quiet_greater_equal (ux.i, uy.i); if (res == 0) res = -1; return (res); } hidden_def(__bid_getd2); libdfp-1.0.17/libbid/_gt_dd.c000066400000000000000000000023331504475242000156550ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_gtdd2 (_Decimal64 x, _Decimal64 y) { CMPtype res; union decimal64 ux, uy; ux.d = x; uy.d = y; res = __bid64_quiet_greater (ux.i, uy.i); return (res); } hidden_def(__bid_gtdd2); libdfp-1.0.17/libbid/_gt_sd.c000066400000000000000000000024561504475242000157020ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_gtsd2 (_Decimal32 x, _Decimal32 y) { CMPtype res; UINT64 x64, y64; union decimal32 ux, uy; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res = __bid64_quiet_greater (x64, y64); return (res); } hidden_def(__bid_gtsd2); libdfp-1.0.17/libbid/_gt_td.c000066400000000000000000000023371504475242000157010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_gttd2 (_Decimal128 x, _Decimal128 y) { CMPtype res; union decimal128 ux, uy; ux.d = x; uy.d = y; res = __bid128_quiet_greater (ux.i, uy.i); return (res); } hidden_def(__bid_gttd2); libdfp-1.0.17/libbid/_hf_to_dd.c000066400000000000000000000023441504475242000163440ustar00rootroot00000000000000/* Copyright (C) 2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_HF_MODE || BID_HAS_HF_MODE _Decimal64 __bid_extendhfdd (HFtype x) { union decimal64 res; SFtype xsf = x; res.i = __binary32_to_bid64 (xsf); return (res.d); } hidden_def(__bid_extendhfdd); #endif libdfp-1.0.17/libbid/_hf_to_sd.c000066400000000000000000000023441504475242000163630ustar00rootroot00000000000000/* Copyright (C) 2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_HF_MODE || BID_HAS_HF_MODE _Decimal32 __bid_extendhfsd (HFtype x) { union decimal32 res; SFtype xsf = x; res.i = __binary32_to_bid32 (xsf); return (res.d); } hidden_def(__bid_extendhfsd); #endif libdfp-1.0.17/libbid/_hf_to_td.c000066400000000000000000000023471504475242000163670ustar00rootroot00000000000000/* Copyright (C) 2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_HF_MODE || BID_HAS_HF_MODE _Decimal128 __bid_extendhftd (HFtype x) { union decimal128 res; SFtype xsf = x; res.i = __binary32_to_bid128 (xsf); return (res.d); } hidden_def(__bid_extendhftd); #endif libdfp-1.0.17/libbid/_isinfd128.c000066400000000000000000000022171504475242000163040ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" int isinfd128 (_Decimal128 x) { int res; union decimal128 ux; ux.d = x; res = __bid128_isInf (ux.i); return (res); } libdfp-1.0.17/libbid/_isinfd32.c000066400000000000000000000022711504475242000162160ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" int isinfd32 (_Decimal32 x) { int res; UINT64 x64; union decimal32 ux; ux.d = x; x64 = __bid32_to_bid64 (ux.i); res = __bid64_isInf (x64); return (res); } libdfp-1.0.17/libbid/_isinfd64.c000066400000000000000000000022131504475242000162170ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" int isinfd64 (_Decimal64 x) { int res; union decimal64 ux; ux.d = x; res = __bid64_isInf (ux.i); return (res); } libdfp-1.0.17/libbid/_le_dd.c000066400000000000000000000024201504475242000156400ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_ledd2 (_Decimal64 x, _Decimal64 y) { CMPtype res; union decimal64 ux, uy; ux.d = x; uy.d = y; res = __bid64_quiet_less_equal (ux.i, uy.i); if (res != 0) res = -1; else res = 1; return (res); } hidden_def(__bid_ledd2); libdfp-1.0.17/libbid/_le_sd.c000066400000000000000000000025431504475242000156650ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_lesd2 (_Decimal32 x, _Decimal32 y) { CMPtype res; UINT64 x64, y64; union decimal32 ux, uy; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res = __bid64_quiet_less_equal (x64, y64); if (res != 0) res = -1; else res = 1; return (res); } hidden_def(__bid_lesd2); libdfp-1.0.17/libbid/_le_td.c000066400000000000000000000024241504475242000156640ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_letd2 (_Decimal128 x, _Decimal128 y) { CMPtype res; union decimal128 ux, uy; ux.d = x; uy.d = y; res = __bid128_quiet_less_equal (ux.i, uy.i); if (res != 0) res = -1; else res = 1; return (res); } hidden_def(__bid_letd2); libdfp-1.0.17/libbid/_lt_dd.c000066400000000000000000000023311504475242000156600ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_ltdd2 (_Decimal64 x, _Decimal64 y) { CMPtype res; union decimal64 ux, uy; ux.d = x; uy.d = y; res = -__bid64_quiet_less (ux.i, uy.i); return (res); } hidden_def(__bid_ltdd2); libdfp-1.0.17/libbid/_lt_sd.c000066400000000000000000000024541504475242000157050ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_ltsd2 (_Decimal32 x, _Decimal32 y) { CMPtype res; UINT64 x64, y64; union decimal32 ux, uy; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res = -__bid64_quiet_less (x64, y64); return (res); } hidden_def(__bid_ltsd2); libdfp-1.0.17/libbid/_lt_td.c000066400000000000000000000023351504475242000157040ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_lttd2 (_Decimal128 x, _Decimal128 y) { CMPtype res; union decimal128 ux, uy; ux.d = x; uy.d = y; res = -__bid128_quiet_less (ux.i, uy.i); return (res); } hidden_def(__bid_lttd2); libdfp-1.0.17/libbid/_mul_dd.c000066400000000000000000000023201504475242000160340ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_muldd3 (_Decimal64 x, _Decimal64 y) { union decimal64 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid64_mul (ux.i, uy.i); return (res.d); } hidden_def(__bid_muldd3); libdfp-1.0.17/libbid/_mul_sd.c000066400000000000000000000025161504475242000160620ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_mulsd3 (_Decimal32 x, _Decimal32 y) { UINT64 x64, y64, res64; union decimal32 ux, uy, res; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res64 = __bid64_mul (x64, y64); res.i = __bid64_to_bid32 (res64); return (res.d); } hidden_def(__bid_mulsd3); libdfp-1.0.17/libbid/_mul_td.c000066400000000000000000000023241504475242000160600ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_multd3 (_Decimal128 x, _Decimal128 y) { union decimal128 ux, uy, res; ux.d = x; uy.d = y; res.i = __bid128_mul (ux.i, uy.i); return (res.d); } hidden_def(__bid_multd3); libdfp-1.0.17/libbid/_ne_dd.c000066400000000000000000000023351504475242000156470ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_nedd2 (_Decimal64 x, _Decimal64 y) { CMPtype res; union decimal64 ux, uy; ux.d = x; uy.d = y; res = __bid64_quiet_not_equal (ux.i, uy.i); return (res); } hidden_def(__bid_nedd2); libdfp-1.0.17/libbid/_ne_sd.c000066400000000000000000000024601504475242000156650ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_nesd2 (_Decimal32 x, _Decimal32 y) { CMPtype res; UINT64 x64, y64; union decimal32 ux, uy; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res = __bid64_quiet_not_equal (x64, y64); return (res); } hidden_def(__bid_nesd2); libdfp-1.0.17/libbid/_ne_td.c000066400000000000000000000023411504475242000156640ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_netd2 (_Decimal128 x, _Decimal128 y) { CMPtype res; union decimal128 ux, uy; ux.d = x; uy.d = y; res = __bid128_quiet_not_equal (ux.i, uy.i); return (res); } hidden_def(__bid_netd2); libdfp-1.0.17/libbid/_sd_to_dd.c000066400000000000000000000023151504475242000163530ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_extendsddd2 (_Decimal32 x) { union decimal64 res; union decimal32 ux; ux.d = x; res.i = __bid32_to_bid64 (ux.i); return (res.d); } hidden_def(__bid_extendsddd2); libdfp-1.0.17/libbid/_sd_to_df.c000066400000000000000000000022741504475242000163610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" DFtype __bid_extendsddf (_Decimal32 x) { DFtype res; union decimal32 ux; ux.d = x; res = __bid32_to_binary64 (ux.i); return (res); } hidden_def(__bid_extendsddf); libdfp-1.0.17/libbid/_sd_to_di.c000066400000000000000000000024011504475242000163540ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" DItype __bid_fixsddi (_Decimal32 x) { DItype res = 0xbaddbaddbaddbaddull; UINT64 x64; union decimal32 ux; ux.d = x; x64 = __bid32_to_bid64 (ux.i); res = __bid64_to_int64_xint (x64); return (res); } hidden_def(__bid_fixsddi); libdfp-1.0.17/libbid/_sd_to_hf.c000066400000000000000000000023471504475242000163660ustar00rootroot00000000000000/* Copyright (C) 2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_HF_MODE || BID_HAS_HF_MODE HFtype __bid_truncsdhf (_Decimal32 x) { HFtype res; union decimal32 ux; ux.d = x; res = __bid32_to_binary32 (ux.i); return (res); } hidden_def(__bid_truncsdhf); #endif libdfp-1.0.17/libbid/_sd_to_sf.c000066400000000000000000000022721504475242000163760ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" SFtype __bid_truncsdsf (_Decimal32 x) { SFtype res; union decimal32 ux; ux.d = x; res = __bid32_to_binary32 (ux.i); return (res); } hidden_def(__bid_truncsdsf); libdfp-1.0.17/libbid/_sd_to_si.c000066400000000000000000000023661504475242000164050ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" SItype __bid_fixsdsi (_Decimal32 x) { SItype res = 0xbaddbadd; UINT64 x64; union decimal32 ux; ux.d = x; x64 = __bid32_to_bid64 (ux.i); res = __bid64_to_int32_xint (x64); return (res); } hidden_def(__bid_fixsdsi); libdfp-1.0.17/libbid/_sd_to_td.c000066400000000000000000000023201504475242000163670ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_extendsdtd2 (_Decimal32 x) { union decimal128 res; union decimal32 ux; ux.d = x; res.i = __bid32_to_bid128 (ux.i); return (res.d); } hidden_def(__bid_extendsdtd2); libdfp-1.0.17/libbid/_sd_to_tf.c000066400000000000000000000023731504475242000164010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE TFtype __bid_extendsdtf (_Decimal32 x) { union float128 res; union decimal32 ux; ux.d = x; res.i = __bid32_to_binary128 (ux.i); return (res.f); } hidden_def(__bid_extendsdtf); #endif libdfp-1.0.17/libbid/_sd_to_udi.c000066400000000000000000000025061504475242000165470ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" UDItype __bid_fixunssddi (_Decimal32 x) { UDItype res = 0xbaddbaddbaddbaddull; UINT64 x64; union decimal32 ux; ux.d = x; x64 = __bid32_to_bid64 (ux.i); res = __bid64_to_uint64_xint (x64); if (res == 0x8000000000000000ull) res = 0; // for NaNs too return (res); } hidden_def(__bid_fixunssddi); libdfp-1.0.17/libbid/_sd_to_usi.c000066400000000000000000000024601504475242000165650ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" USItype __bid_fixunssdsi (_Decimal32 x) { USItype res = 0xbaddbadd; UINT64 x64; union decimal32 ux; ux.d = x; x64 = __bid32_to_bid64 (ux.i); res = __bid64_to_uint32_xint (x64); if (res == 0x80000000) res = 0; // for NaNs too return (res); } hidden_def(__bid_fixunssdsi); libdfp-1.0.17/libbid/_sd_to_xf.c000066400000000000000000000023411504475242000164000ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #ifdef __LIBGCC_HAS_XF_MODE__ XFtype __bid_extendsdxf (_Decimal32 x) { XFtype res; union decimal32 ux; ux.d = x; res = __bid32_to_binary80 (ux.i); return (res); } hidden_def(__bid_extendsdxf); #endif libdfp-1.0.17/libbid/_sf_to_dd.c000066400000000000000000000022431504475242000163550ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_extendsfdd (SFtype x) { union decimal64 res; res.i = __binary32_to_bid64 (x); return (res.d); } hidden_def(__bid_extendsfdd); libdfp-1.0.17/libbid/_sf_to_sd.c000066400000000000000000000022431504475242000163740ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_extendsfsd (SFtype x) { union decimal32 res; res.i = __binary32_to_bid32 (x); return (res.d); } hidden_def(__bid_extendsfsd); libdfp-1.0.17/libbid/_sf_to_td.c000066400000000000000000000022461504475242000164000ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_extendsftd (SFtype x) { union decimal128 res; res.i = __binary32_to_bid128 (x); return (res.d); } hidden_def(__bid_extendsftd); libdfp-1.0.17/libbid/_si_to_dd.c000066400000000000000000000022411504475242000163560ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_floatsidd (SItype x) { union decimal64 res; res.i = __bid64_from_int32 (x); return (res.d); } hidden_def(__bid_floatsidd); libdfp-1.0.17/libbid/_si_to_sd.c000066400000000000000000000023251504475242000164000ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_floatsisd (SItype x) { union decimal32 res; UINT64 res64; res64 = __bid64_from_int32 (x); res.i = __bid64_to_bid32 (res64); return (res.d); } hidden_def(__bid_floatsisd); libdfp-1.0.17/libbid/_si_to_td.c000066400000000000000000000022441504475242000164010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_floatsitd (SItype x) { union decimal128 res; res.i = __bid128_from_int32 (x); return (res.d); } hidden_def(__bid_floatsitd); libdfp-1.0.17/libbid/_td_to_dd.c000066400000000000000000000023161504475242000163550ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_trunctddd2 (_Decimal128 x) { union decimal128 ux; union decimal64 res; ux.d = x; res.i = __bid128_to_bid64 (ux.i); return (res.d); } hidden_def(__bid_trunctddd2); libdfp-1.0.17/libbid/_td_to_df.c000066400000000000000000000022751504475242000163630ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" DFtype __bid_trunctddf (_Decimal128 x) { DFtype res; union decimal128 ux; ux.d = x; res = __bid128_to_binary64 (ux.i); return (res); } hidden_def(__bid_trunctddf); libdfp-1.0.17/libbid/_td_to_di.c000066400000000000000000000023261504475242000163630ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" DItype __bid_fixtddi (_Decimal128 x) { DItype res = 0xbaddbaddbaddbaddull; union decimal128 ux; ux.d = x; res = __bid128_to_int64_xint (ux.i); return (res); } hidden_def(__bid_fixtddi); libdfp-1.0.17/libbid/_td_to_hf.c000066400000000000000000000023521504475242000163630ustar00rootroot00000000000000/* Copyright (C) 2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_HF_MODE || BID_HAS_HF_MODE HFtype __bid_trunctdhf (_Decimal128 x) { HFtype res; union decimal128 ux; ux.d = x; res = __bid128_to_binary32 (ux.i); return (res); } hidden_def(__bid_trunctdhf); #endif libdfp-1.0.17/libbid/_td_to_sd.c000066400000000000000000000023161504475242000163740ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_trunctdsd2 (_Decimal128 x) { union decimal128 ux; union decimal32 res; ux.d = x; res.i = __bid128_to_bid32 (ux.i); return (res.d); } hidden_def(__bid_trunctdsd2); libdfp-1.0.17/libbid/_td_to_sf.c000066400000000000000000000022751504475242000164020ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" SFtype __bid_trunctdsf (_Decimal128 x) { SFtype res; union decimal128 ux; ux.d = x; res = __bid128_to_binary32 (ux.i); return (res); } hidden_def(__bid_trunctdsf); libdfp-1.0.17/libbid/_td_to_si.c000066400000000000000000000023121504475242000163750ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" SItype __bid_fixtdsi (_Decimal128 x) { union decimal128 ux; SItype res = 0xbaddbadd; ux.d = x; res = __bid128_to_int32_xint (ux.i); return (res); } hidden_def(__bid_fixtdsi); libdfp-1.0.17/libbid/_td_to_tf.c000066400000000000000000000023741504475242000164030ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE TFtype __bid_trunctdtf (_Decimal128 x) { union float128 res; union decimal128 ux; ux.d = x; res.i = __bid128_to_binary128 (ux.i); return (res.f); } hidden_def(__bid_trunctdtf); #endif libdfp-1.0.17/libbid/_td_to_udi.c000066400000000000000000000024351504475242000165510ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" UDItype __bid_fixunstddi (_Decimal128 x) { UDItype res = 0xbaddbaddbaddbaddull; union decimal128 ux; ux.d = x; res = __bid128_to_uint64_xint (ux.i); if (res == 0x8000000000000000ull) res = 0; // for NaNs too return (res); } hidden_def(__bid_fixunstddi); libdfp-1.0.17/libbid/_td_to_usi.c000066400000000000000000000024061504475242000165660ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" USItype __bid_fixunstdsi (_Decimal128 x) { USItype res = 0xbaddbadd; union decimal128 ux; ux.d = x; res = __bid128_to_uint32_xint (ux.i); if (res == 0x80000000) res = 0; // for NaNs too return (res); } hidden_def(__bid_fixunstdsi); libdfp-1.0.17/libbid/_td_to_xf.c000066400000000000000000000023421504475242000164020ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #ifdef __LIBGCC_HAS_XF_MODE__ XFtype __bid_trunctdxf (_Decimal128 x) { XFtype res; union decimal128 ux; ux.d = x; res = __bid128_to_binary80 (ux.i); return (res); } hidden_def(__bid_trunctdxf); #endif libdfp-1.0.17/libbid/_tf_to_dd.c000066400000000000000000000023711504475242000163600ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE _Decimal64 __bid_trunctfdd (TFtype x) { union decimal64 res; union float128 ux; ux.f = x; res.i = __binary128_to_bid64 (ux.i); return (res.d); } hidden_def(__bid_trunctfdd); #endif libdfp-1.0.17/libbid/_tf_to_sd.c000066400000000000000000000023711504475242000163770ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE _Decimal32 __bid_trunctfsd (TFtype x) { union decimal32 res; union float128 ux; ux.f = x; res.i = __binary128_to_bid32 (ux.i); return (res.d); } hidden_def(__bid_trunctfsd); #endif libdfp-1.0.17/libbid/_tf_to_td.c000066400000000000000000000023761504475242000164050ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE _Decimal128 __bid_extendtftd (TFtype x) { union decimal128 res; union float128 ux; ux.f = x; res.i = __binary128_to_bid128 (ux.i); return (res.d); } hidden_def(__bid_extendtftd); #endif libdfp-1.0.17/libbid/_udi_to_dd.c000066400000000000000000000022521504475242000165260ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_floatunsdidd (UDItype x) { union decimal64 res; res.i = __bid64_from_uint64 (x); return (res.d); } hidden_def(__bid_floatunsdidd); libdfp-1.0.17/libbid/_udi_to_sd.c000066400000000000000000000023351504475242000165470ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_floatunsdisd (UDItype x) { union decimal32 res; UINT64 res64; res64 = __bid64_from_uint64 (x); res.i = __bid64_to_bid32 (res64); return (res.d); } hidden_def(__bid_floatunsdisd); libdfp-1.0.17/libbid/_udi_to_td.c000066400000000000000000000022551504475242000165510ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_floatunsditd (UDItype x) { union decimal128 res; res.i = __bid128_from_uint64 (x); return (res.d); } hidden_def(__bid_floatunsditd); libdfp-1.0.17/libbid/_unord_dd.c000066400000000000000000000023431504475242000163730ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_unorddd2 (_Decimal64 x, _Decimal64 y) { CMPtype res; union decimal64 ux, uy; ux.d = x; uy.d = y; res = __bid64_quiet_unordered (ux.i, uy.i); return (res); } hidden_def(__bid_unorddd2); libdfp-1.0.17/libbid/_unord_sd.c000066400000000000000000000024671504475242000164210ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_unordsd2 (_Decimal32 x, _Decimal32 y) { CMPtype res; UINT64 x64, y64; union decimal32 ux, uy; ux.d = x; uy.d = y; x64 = __bid32_to_bid64 (ux.i); y64 = __bid32_to_bid64 (uy.i); res = __bid64_quiet_unordered (x64, y64); return (res); } hidden_def(__bid_unordsd2); libdfp-1.0.17/libbid/_unord_td.c000066400000000000000000000023471504475242000164170ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" CMPtype __bid_unordtd2 (_Decimal128 x, _Decimal128 y) { CMPtype res; union decimal128 ux, uy; ux.d = x; uy.d = y; res = __bid128_quiet_unordered (ux.i, uy.i); return (res); } hidden_def(__bid_unordtd2); libdfp-1.0.17/libbid/_usi_to_dd.c000066400000000000000000000022521504475242000165450ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal64 __bid_floatunssidd (USItype x) { union decimal64 res; res.i = __bid64_from_uint32 (x); return (res.d); } hidden_def(__bid_floatunssidd); libdfp-1.0.17/libbid/_usi_to_sd.c000066400000000000000000000023351504475242000165660ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal32 __bid_floatunssisd (USItype x) { union decimal32 res; UINT64 res64; res64 = __bid64_from_uint32 (x); res.i = __bid64_to_bid32 (res64); return (res.d); } hidden_def(__bid_floatunssisd); libdfp-1.0.17/libbid/_usi_to_td.c000066400000000000000000000022551504475242000165700ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" _Decimal128 __bid_floatunssitd (USItype x) { union decimal128 res; res.i = __bid128_from_uint32 (x); return (res.d); } hidden_def(__bid_floatunssitd); libdfp-1.0.17/libbid/_xf_to_dd.c000066400000000000000000000023061504475242000163620ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #ifdef __LIBGCC_HAS_XF_MODE__ _Decimal64 __bid_truncxfdd (XFtype x) { union decimal64 res; res.i = __binary80_to_bid64 (x); return (res.d); } hidden_def(__bid_truncxfdd); #endif libdfp-1.0.17/libbid/_xf_to_sd.c000066400000000000000000000023061504475242000164010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #ifdef __LIBGCC_HAS_XF_MODE__ _Decimal32 __bid_truncxfsd (XFtype x) { union decimal32 res; res.i = __binary80_to_bid32 (x); return (res.d); } hidden_def(__bid_truncxfsd); #endif libdfp-1.0.17/libbid/_xf_to_td.c000066400000000000000000000023131504475242000164000ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" #ifdef __LIBGCC_HAS_XF_MODE__ _Decimal128 __bid_extendxftd (XFtype x) { union decimal128 res; res.i = __binary80_to_bid128 (x); return (res.d); } hidden_def(__bid_extendxftd); #endif libdfp-1.0.17/libbid/bid128.c000066400000000000000000004551241504475242000154400ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" // the first entry of nr_digits[i - 1] (where 1 <= i <= 113), indicates // the number of decimal digits needed to represent a binary number with i bits; // however, if a binary number of i bits may require either k or k + 1 decimal // digits, then the first entry of nr_digits[i - 1] is 0; in this case if the // number is less than the value represented by the second and third entries // concatenated, then the number of decimal digits k is the fourth entry, else // the number of decimal digits is the fourth entry plus 1 DEC_DIGITS nr_digits[] = { // only the first entry is used if it is not 0 {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1} , // 1-bit n < 10^1 {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1} , // 2-bit n < 10^1 {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1} , // 3-bit n < 10^1 {0, 0x0000000000000000ULL, 0x000000000000000aULL, 1} , // 4-bit n ? 10^1 {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2} , // 5-bit n < 10^2 {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2} , // 6-bit n < 10^2 {0, 0x0000000000000000ULL, 0x0000000000000064ULL, 2} , // 7-bit n ? 10^2 {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3} , // 8-bit n < 10^3 {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3} , // 9-bit n < 10^3 {0, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3} , // 10-bit n ? 10^3 {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} , // 11-bit n < 10^4 {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} , // 12-bit n < 10^4 {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} , // 13-bit n < 10^4 {0, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} , // 14-bit n ? 10^4 {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5} , // 15-bit n < 10^5 {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5} , // 16-bit n < 10^5 {0, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5} , // 17-bit n ? 10^5 {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6} , // 18-bit n < 10^6 {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6} , // 19-bit n < 10^6 {0, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6} , // 20-bit n ? 10^6 {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} , // 21-bit n < 10^7 {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} , // 22-bit n < 10^7 {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} , // 23-bit n < 10^7 {0, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} , // 24-bit n ? 10^7 {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8} , // 25-bit n < 10^8 {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8} , // 26-bit n < 10^8 {0, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8} , // 27-bit n ? 10^8 {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9} , // 28-bit n < 10^9 {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9} , // 29-bit n < 10^9 {0, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9} , // 30-bit n ? 10^9 {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} , // 31-bit n < 10^10 {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} , // 32-bit n < 10^10 {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} , // 33-bit n < 10^10 {0, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} , // 34-bit n ? 10^10 {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11} , // 35-bit n < 10^11 {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11} , // 36-bit n < 10^11 {0, 0x0000000000000000ULL, 0x000000174876e800ULL, 11} , // 37-bit n ? 10^11 {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12} , // 38-bit n < 10^12 {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12} , // 39-bit n < 10^12 {0, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12} , // 40-bit n ? 10^12 {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} , // 41-bit n < 10^13 {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} , // 42-bit n < 10^13 {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} , // 43-bit n < 10^13 {0, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} , // 44-bit n ? 10^13 {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14} , // 45-bit n < 10^14 {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14} , // 46-bit n < 10^14 {0, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14} , // 47-bit n ? 10^14 {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15} , // 48-bit n < 10^15 {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15} , // 49-bit n < 10^15 {0, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15} , // 50-bit n ? 10^15 {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} , // 51-bit n < 10^16 {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} , // 52-bit n < 10^16 {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} , // 53-bit n < 10^16 {0, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} , // 54-bit n ? 10^16 {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17} , // 55-bit n < 10^17 {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17} , // 56-bit n < 10^17 {0, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17} , // 57-bit n ? 10^17 {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18} , // 58-bit n < 10^18 {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18} , // 59-bit n < 10^18 {0, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18} , // 60-bit n ? 10^18 {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} , // 61-bit n < 10^19 {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} , // 62-bit n < 10^19 {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} , // 63-bit n < 10^19 {0, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} , // 64-bit n ? 10^19 {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20} , // 65-bit n < 10^20 {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20} , // 66-bit n < 10^20 {0, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20} , // 67-bit n ? 10^20 {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21} , // 68-bit n < 10^21 {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21} , // 69-bit n < 10^21 {0, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21} , // 70-bit n ? 10^21 {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} , // 71-bit n < 10^22 {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} , // 72-bit n < 10^22 {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} , // 73-bit n < 10^22 {0, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} , // 74-bit n ? 10^22 {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23} , // 75-bit n < 10^23 {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23} , // 76-bit n < 10^23 {0, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23} , // 77-bit n ? 10^23 {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24} , // 78-bit n < 10^24 {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24} , // 79-bit n < 10^24 {0, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24} , // 80-bit n ? 10^24 {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} , // 81-bit n < 10^25 {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} , // 82-bit n < 10^25 {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} , // 83-bit n < 10^25 {0, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} , // 84-bit n ? 10^25 {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26} , // 85-bit n < 10^26 {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26} , // 86-bit n < 10^26 {0, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26} , // 87-bit n ? 10^26 {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27} , // 88-bit n < 10^27 {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27} , // 89-bit n < 10^27 {0, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27} , // 90-bit n ? 10^27 {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} , // 91-bit n < 10^28 {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} , // 92-bit n < 10^28 {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} , // 93-bit n < 10^28 {0, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} , // 94-bit n ? 10^28 {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29} , // 95-bit n < 10^29 {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29} , // 96-bit n < 10^29 {0, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29} , // 97-bit n ? 10^29 {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30} , // 98-bit n < 10^30 {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30} , // 99-bit n < 10^30 {0, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30} , // 100-bit n ? 10^30 {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31} , // 101-bit n < 10^31 {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31} , // 102-bit n < 10^31 {0, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31} , // 103-bit n ? 10^31 {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} , // 104-bit n < 10^32 {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} , // 105-bit n < 10^32 {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} , // 106-bit n < 10^32 {0, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} , // 107-bit n ? 10^32 {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33} , // 108-bit n < 10^33 {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33} , // 109-bit n < 10^33 {0, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33} , // 100-bit n ? 10^33 {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} , // 111-bit n < 10^34 {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} , // 112-bit n < 10^34 {0, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} // 113-bit n ? 10^34 //{ 35, 0x0013426172c74d82ULL, 0x2b878fe800000000ULL, 35 } // 114-bit n < 10^35 }; // midpoint64[i - 1] = 1/2 * 10^i = 5 * 10^(i-1), 1 <= i <= 19 UINT64 midpoint64[] = { 0x0000000000000005ULL, // 1/2 * 10^1 = 5 * 10^0 0x0000000000000032ULL, // 1/2 * 10^2 = 5 * 10^1 0x00000000000001f4ULL, // 1/2 * 10^3 = 5 * 10^2 0x0000000000001388ULL, // 1/2 * 10^4 = 5 * 10^3 0x000000000000c350ULL, // 1/2 * 10^5 = 5 * 10^4 0x000000000007a120ULL, // 1/2 * 10^6 = 5 * 10^5 0x00000000004c4b40ULL, // 1/2 * 10^7 = 5 * 10^6 0x0000000002faf080ULL, // 1/2 * 10^8 = 5 * 10^7 0x000000001dcd6500ULL, // 1/2 * 10^9 = 5 * 10^8 0x000000012a05f200ULL, // 1/2 * 10^10 = 5 * 10^9 0x0000000ba43b7400ULL, // 1/2 * 10^11 = 5 * 10^10 0x000000746a528800ULL, // 1/2 * 10^12 = 5 * 10^11 0x0000048c27395000ULL, // 1/2 * 10^13 = 5 * 10^12 0x00002d79883d2000ULL, // 1/2 * 10^14 = 5 * 10^13 0x0001c6bf52634000ULL, // 1/2 * 10^15 = 5 * 10^14 0x0011c37937e08000ULL, // 1/2 * 10^16 = 5 * 10^15 0x00b1a2bc2ec50000ULL, // 1/2 * 10^17 = 5 * 10^16 0x06f05b59d3b20000ULL, // 1/2 * 10^18 = 5 * 10^17 0x4563918244f40000ULL // 1/2 * 10^19 = 5 * 10^18 }; // midpoint128[i - 20] = 1/2 * 10^i = 5 * 10^(i-1), 20 <= i <= 38 UINT128 midpoint128[] = { // the 64-bit word order is L, H {{0xb5e3af16b1880000ULL, 0x0000000000000002ULL} } , // 1/2 * 10^20 = 5 * 10^19 {{0x1ae4d6e2ef500000ULL, 0x000000000000001bULL} } , // 1/2 * 10^21 = 5 * 10^20 {{0x0cf064dd59200000ULL, 0x000000000000010fULL} } , // 1/2 * 10^22 = 5 * 10^21 {{0x8163f0a57b400000ULL, 0x0000000000000a96ULL} } , // 1/2 * 10^23 = 5 * 10^22 {{0x0de76676d0800000ULL, 0x00000000000069e1ULL} } , // 1/2 * 10^24 = 5 * 10^23 {{0x8b0a00a425000000ULL, 0x00000000000422caULL} } , // 1/2 * 10^25 = 5 * 10^24 {{0x6e64066972000000ULL, 0x0000000000295be9ULL} } , // 1/2 * 10^26 = 5 * 10^25 {{0x4fe8401e74000000ULL, 0x00000000019d971eULL} } , // 1/2 * 10^27 = 5 * 10^26 {{0x1f12813088000000ULL, 0x000000001027e72fULL} } , // 1/2 * 10^28 = 5 * 10^27 {{0x36b90be550000000ULL, 0x00000000a18f07d7ULL} } , // 1/2 * 10^29 = 5 * 10^28 {{0x233a76f520000000ULL, 0x000000064f964e68ULL} } , // 1/2 * 10^30 = 5 * 10^29 {{0x6048a59340000000ULL, 0x0000003f1bdf1011ULL} } , // 1/2 * 10^31 = 5 * 10^30 {{0xc2d677c080000000ULL, 0x0000027716b6a0adULL} } , // 1/2 * 10^32 = 5 * 10^31 {{0x9c60ad8500000000ULL, 0x000018a6e32246c9ULL} } , // 1/2 * 10^33 = 5 * 10^32 {{0x1bc6c73200000000ULL, 0x0000f684df56c3e0ULL} } , // 1/2 * 10^34 = 5 * 10^33 {{0x15c3c7f400000000ULL, 0x0009a130b963a6c1ULL} } , // 1/2 * 10^35 = 5 * 10^34 {{0xd9a5cf8800000000ULL, 0x00604be73de4838aULL} } , // 1/2 * 10^36 = 5 * 10^35 {{0x807a1b5000000000ULL, 0x03c2f7086aed236cULL} } , // 1/2 * 10^37 = 5 * 10^36 {{0x04c5112000000000ULL, 0x259da6542d43623dULL} } // 1/2 * 10^38 = 5 * 10^37 }; // midpoint192[i - 39] = 1/2 * 10^i = 5 * 10^(i-1), 39 <= i <= 58 UINT192 midpoint192[] = { // the 64-bit word order is L, M, H {{0x2fb2ab4000000000ULL, 0x78287f49c4a1d662ULL, 0x0000000000000001ULL} } , // 1/2 * 10^39 = 5 * 10^38 {{0xdcfab08000000000ULL, 0xb194f8e1ae525fd5ULL, 0x000000000000000eULL} } , // 1/2 * 10^40 = 5 * 10^39 {{0xa1cae50000000000ULL, 0xefd1b8d0cf37be5aULL, 0x0000000000000092ULL} } , // 1/2 * 10^41 = 5 * 10^40 {{0x51ecf20000000000ULL, 0x5e313828182d6f8aULL, 0x00000000000005bdULL} } , // 1/2 * 10^42 = 5 * 10^41 {{0x3341740000000000ULL, 0xadec3190f1c65b67ULL, 0x0000000000003965ULL} } , // 1/2 * 10^43 = 5 * 10^42 {{0x008e880000000000ULL, 0xcb39efa971bf9208ULL, 0x0000000000023df8ULL} } , // 1/2 * 10^44 = 5 * 10^43 {{0x0591500000000000ULL, 0xf0435c9e717bb450ULL, 0x0000000000166bb7ULL} } , // 1/2 * 10^45 = 5 * 10^44 {{0x37ad200000000000ULL, 0x62a19e306ed50b20ULL, 0x0000000000e0352fULL} } , // 1/2 * 10^46 = 5 * 10^45 {{0x2cc3400000000000ULL, 0xda502de454526f42ULL, 0x0000000008c213d9ULL} } , // 1/2 * 10^47 = 5 * 10^46 {{0xbfa0800000000000ULL, 0x8721caeb4b385895ULL, 0x000000005794c682ULL} } , // 1/2 * 10^48 = 5 * 10^47 {{0x7c45000000000000ULL, 0x4751ed30f03375d9ULL, 0x000000036bcfc119ULL} } , // 1/2 * 10^49 = 5 * 10^48 {{0xdab2000000000000ULL, 0xc93343e962029a7eULL, 0x00000022361d8afcULL} } , // 1/2 * 10^50 = 5 * 10^49 {{0x8af4000000000000ULL, 0xdc00a71dd41a08f4ULL, 0x000001561d276ddfULL} } , // 1/2 * 10^51 = 5 * 10^50 {{0x6d88000000000000ULL, 0x9806872a4904598dULL, 0x00000d5d238a4abeULL} } , // 1/2 * 10^52 = 5 * 10^51 {{0x4750000000000000ULL, 0xf04147a6da2b7f86ULL, 0x000085a36366eb71ULL} } , // 1/2 * 10^53 = 5 * 10^52 {{0xc920000000000000ULL, 0x628ccc8485b2fb3eULL, 0x00053861e2053273ULL} } , // 1/2 * 10^54 = 5 * 10^53 {{0xdb40000000000000ULL, 0xd97ffd2d38fdd073ULL, 0x003433d2d433f881ULL} } , // 1/2 * 10^55 = 5 * 10^54 {{0x9080000000000000ULL, 0x7effe3c439ea2486ULL, 0x020a063c4a07b512ULL} } , // 1/2 * 10^56 = 5 * 10^55 {{0xa500000000000000ULL, 0xf5fee5aa43256d41ULL, 0x14643e5ae44d12b8ULL} } , // 1/2 * 10^57 = 5 * 10^56 {{0x7200000000000000ULL, 0x9bf4f8a69f764490ULL, 0xcbea6f8ceb02bb39ULL} } // 1/2 * 10^58 = 5 * 10^57 }; // midpoint256[i - 59] = 1/2 * 10^i = 5 * 10^(i-1), 59 <= i <= 68 UINT256 midpoint256[] = { // the 64-bit word order is LL, LH, HL, HH {{0x7400000000000000ULL, 0x1791b6823a9eada4ULL, 0xf7285b812e1b5040ULL, 0x0000000000000007ULL} } , // 1/2 * 10^59 = 5 * 10^58 {{0x8800000000000000ULL, 0xebb121164a32c86cULL, 0xa793930bcd112280ULL, 0x000000000000004fULL} } , // 1/2 * 10^60 = 5 * 10^59 {{0x5000000000000000ULL, 0x34eb4adee5fbd43dULL, 0x8bc3be7602ab5909ULL, 0x000000000000031cULL} } , // 1/2 * 10^61 = 5 * 10^60 {{0x2000000000000000ULL, 0x1130ecb4fbd64a65ULL, 0x75a5709c1ab17a5cULL, 0x0000000000001f1dULL} } , // 1/2 * 10^62 = 5 * 10^61 {{0x4000000000000000ULL, 0xabe93f11d65ee7f3ULL, 0x987666190aeec798ULL, 0x0000000000013726ULL} } , // 1/2 * 10^63 = 5 * 10^62 {{0x8000000000000000ULL, 0xb71c76b25fb50f80ULL, 0xf49ffcfa6d53cbf6ULL, 0x00000000000c2781ULL} } , // 1/2 * 10^64 = 5 * 10^63 {{0x0000000000000000ULL, 0x271ca2f7bd129b05ULL, 0x8e3fe1c84545f7a3ULL, 0x0000000000798b13ULL} } , // 1/2 * 10^65 = 5 * 10^64 {{0x0000000000000000ULL, 0x871e5dad62ba0e32ULL, 0x8e7ed1d2b4bbac5fULL, 0x0000000004bf6ec3ULL} } , // 1/2 * 10^66 = 5 * 10^65 {{0x0000000000000000ULL, 0x472fa8c5db448df4ULL, 0x90f4323b0f54bbbbULL, 0x000000002f7a53a3ULL} } , // 1/2 * 10^67 = 5 * 10^66 {{0x0000000000000000ULL, 0xc7dc97ba90ad8b88ULL, 0xa989f64e994f5550ULL, 0x00000001dac74463ULL} } , // 1/2 * 10^68 = 5 * 10^67 {{0x0000000000000000ULL, 0xce9ded49a6c77350ULL, 0x9f639f11fd195527ULL, 0x000000128bc8abe4ULL} } , // 1/2 * 10^69 = 5 * 10^68 {{0x0000000000000000ULL, 0x122b44e083ca8120ULL, 0x39e436b3e2fd538eULL, 0x000000b975d6b6eeULL} } , // 1/2 * 10^70 = 5 * 10^69 {{0x0000000000000000ULL, 0xb5b0b0c525e90b40ULL, 0x42ea2306dde5438cULL, 0x0000073e9a63254eULL} } , // 1/2 * 10^71 = 5 * 10^70 {{0x0000000000000000ULL, 0x18e6e7b37b1a7080ULL, 0x9d255e44aaf4a37fULL, 0x0000487207df750eULL} } , // 1/2 * 10^72 = 5 * 10^71 {{0x0000000000000000ULL, 0xf9050d02cf086500ULL, 0x2375aeaead8e62f6ULL, 0x0002d4744eba9292ULL} } , // 1/2 * 10^73 = 5 * 10^72 {{0x0000000000000000ULL, 0xba32821c1653f200ULL, 0x6298d2d2c78fdda5ULL, 0x001c4c8b1349b9b5ULL} } , // 1/2 * 10^74 = 5 * 10^73 {{0x0000000000000000ULL, 0x45f91518df477400ULL, 0xd9f83c3bcb9ea879ULL, 0x011afd6ec0e14115ULL} } , // 1/2 * 10^75 = 5 * 10^74 {{0x0000000000000000ULL, 0xbbbad2f8b8ca8800ULL, 0x83b25a55f43294bcULL, 0x0b0de65388cc8adaULL} } , // 1/2 * 10^76 = 5 * 10^75 {{0x0000000000000000ULL, 0x554c3db737e95000ULL, 0x24f7875b89f9cf5fULL, 0x6e8aff4357fd6c89ULL} } // 1/2 * 10^77 = 5 * 10^76 }; // ten2k64[i] = 10^i, 0 <= i <= 19 UINT64 ten2k64[] = { 0x0000000000000001ULL, // 10^0 0x000000000000000aULL, // 10^1 0x0000000000000064ULL, // 10^2 0x00000000000003e8ULL, // 10^3 0x0000000000002710ULL, // 10^4 0x00000000000186a0ULL, // 10^5 0x00000000000f4240ULL, // 10^6 0x0000000000989680ULL, // 10^7 0x0000000005f5e100ULL, // 10^8 0x000000003b9aca00ULL, // 10^9 0x00000002540be400ULL, // 10^10 0x000000174876e800ULL, // 10^11 0x000000e8d4a51000ULL, // 10^12 0x000009184e72a000ULL, // 10^13 0x00005af3107a4000ULL, // 10^14 0x00038d7ea4c68000ULL, // 10^15 0x002386f26fc10000ULL, // 10^16 0x016345785d8a0000ULL, // 10^17 0x0de0b6b3a7640000ULL, // 10^18 0x8ac7230489e80000ULL // 10^19 (20 digits) }; // ten2k128[i - 20] = 10^i, 20 <= i <= 38 UINT128 ten2k128[] = { // the 64-bit word order is L, H {{0x6bc75e2d63100000ULL, 0x0000000000000005ULL} } , // 10^20 {{0x35c9adc5dea00000ULL, 0x0000000000000036ULL} } , // 10^21 {{0x19e0c9bab2400000ULL, 0x000000000000021eULL} } , // 10^22 {{0x02c7e14af6800000ULL, 0x000000000000152dULL} } , // 10^23 {{0x1bcecceda1000000ULL, 0x000000000000d3c2ULL} } , // 10^24 {{0x161401484a000000ULL, 0x0000000000084595ULL} } , // 10^25 {{0xdcc80cd2e4000000ULL, 0x000000000052b7d2ULL} } , // 10^26 {{0x9fd0803ce8000000ULL, 0x00000000033b2e3cULL} } , // 10^27 {{0x3e25026110000000ULL, 0x00000000204fce5eULL} } , // 10^28 {{0x6d7217caa0000000ULL, 0x00000001431e0faeULL} } , // 10^29 {{0x4674edea40000000ULL, 0x0000000c9f2c9cd0ULL} } , // 10^30 {{0xc0914b2680000000ULL, 0x0000007e37be2022ULL} } , // 10^31 {{0x85acef8100000000ULL, 0x000004ee2d6d415bULL} } , // 10^32 {{0x38c15b0a00000000ULL, 0x0000314dc6448d93ULL} } , // 10^33 {{0x378d8e6400000000ULL, 0x0001ed09bead87c0ULL} } , // 10^34 {{0x2b878fe800000000ULL, 0x0013426172c74d82ULL} } , // 10^35 {{0xb34b9f1000000000ULL, 0x00c097ce7bc90715ULL} } , // 10^36 {{0x00f436a000000000ULL, 0x0785ee10d5da46d9ULL} } , // 10^37 {{0x098a224000000000ULL, 0x4b3b4ca85a86c47aULL} } // 10^38 (39 digits) }; // might split into ten2k192[] and ten2k256[] // ten2k256[i - 39] = 10^i, 39 <= i <= 68 UINT256 ten2k256[] = { // the 64-bit word order is LL, LH, HL, HH {{0x5f65568000000000ULL, 0xf050fe938943acc4ULL, 0x0000000000000002ULL, 0x0000000000000000ULL} } , // 10^39 {{0xb9f5610000000000ULL, 0x6329f1c35ca4bfabULL, 0x000000000000001dULL, 0x0000000000000000ULL} } , // 10^40 {{0x4395ca0000000000ULL, 0xdfa371a19e6f7cb5ULL, 0x0000000000000125ULL, 0x0000000000000000ULL} } , // 10^41 {{0xa3d9e40000000000ULL, 0xbc627050305adf14ULL, 0x0000000000000b7aULL, 0x0000000000000000ULL} } , // 10^42 {{0x6682e80000000000ULL, 0x5bd86321e38cb6ceULL, 0x00000000000072cbULL, 0x0000000000000000ULL} } , // 10^43 {{0x011d100000000000ULL, 0x9673df52e37f2410ULL, 0x0000000000047bf1ULL, 0x0000000000000000ULL} } , // 10^44 {{0x0b22a00000000000ULL, 0xe086b93ce2f768a0ULL, 0x00000000002cd76fULL, 0x0000000000000000ULL} } , // 10^45 {{0x6f5a400000000000ULL, 0xc5433c60ddaa1640ULL, 0x0000000001c06a5eULL, 0x0000000000000000ULL} } , // 10^46 {{0x5986800000000000ULL, 0xb4a05bc8a8a4de84ULL, 0x00000000118427b3ULL, 0x0000000000000000ULL} } , // 10^47 {{0x7f41000000000000ULL, 0x0e4395d69670b12bULL, 0x00000000af298d05ULL, 0x0000000000000000ULL} } , // 10^48 {{0xf88a000000000000ULL, 0x8ea3da61e066ebb2ULL, 0x00000006d79f8232ULL, 0x0000000000000000ULL} } , // 10^49 {{0xb564000000000000ULL, 0x926687d2c40534fdULL, 0x000000446c3b15f9ULL, 0x0000000000000000ULL} } , // 10^50 {{0x15e8000000000000ULL, 0xb8014e3ba83411e9ULL, 0x000002ac3a4edbbfULL, 0x0000000000000000ULL} } , // 10^51 {{0xdb10000000000000ULL, 0x300d0e549208b31aULL, 0x00001aba4714957dULL, 0x0000000000000000ULL} } , // 10^52 {{0x8ea0000000000000ULL, 0xe0828f4db456ff0cULL, 0x00010b46c6cdd6e3ULL, 0x0000000000000000ULL} } , // 10^53 {{0x9240000000000000ULL, 0xc51999090b65f67dULL, 0x000a70c3c40a64e6ULL, 0x0000000000000000ULL} } , // 10^54 {{0xb680000000000000ULL, 0xb2fffa5a71fba0e7ULL, 0x006867a5a867f103ULL, 0x0000000000000000ULL} } , // 10^55 {{0x2100000000000000ULL, 0xfdffc78873d4490dULL, 0x04140c78940f6a24ULL, 0x0000000000000000ULL} } , // 10^56 {{0x4a00000000000000ULL, 0xebfdcb54864ada83ULL, 0x28c87cb5c89a2571ULL, 0x0000000000000000ULL} } , // 10^57 (58 digits) {{0xe400000000000000ULL, 0x37e9f14d3eec8920ULL, 0x97d4df19d6057673ULL, 0x0000000000000001ULL} } , // 10^58 {{0xe800000000000000ULL, 0x2f236d04753d5b48ULL, 0xee50b7025c36a080ULL, 0x000000000000000fULL} } , // 10^59 {{0x1000000000000000ULL, 0xd762422c946590d9ULL, 0x4f2726179a224501ULL, 0x000000000000009fULL} } , // 10^60 {{0xa000000000000000ULL, 0x69d695bdcbf7a87aULL, 0x17877cec0556b212ULL, 0x0000000000000639ULL} } , // 10^61 {{0x4000000000000000ULL, 0x2261d969f7ac94caULL, 0xeb4ae1383562f4b8ULL, 0x0000000000003e3aULL} } , // 10^62 {{0x8000000000000000ULL, 0x57d27e23acbdcfe6ULL, 0x30eccc3215dd8f31ULL, 0x0000000000026e4dULL} } , // 10^63 {{0x0000000000000000ULL, 0x6e38ed64bf6a1f01ULL, 0xe93ff9f4daa797edULL, 0x0000000000184f03ULL} } , // 10^64 {{0x0000000000000000ULL, 0x4e3945ef7a25360aULL, 0x1c7fc3908a8bef46ULL, 0x0000000000f31627ULL} } , // 10^65 {{0x0000000000000000ULL, 0x0e3cbb5ac5741c64ULL, 0x1cfda3a5697758bfULL, 0x00000000097edd87ULL} } , // 10^66 {{0x0000000000000000ULL, 0x8e5f518bb6891be8ULL, 0x21e864761ea97776ULL, 0x000000005ef4a747ULL} } , // 10^67 {{0x0000000000000000ULL, 0x8fb92f75215b1710ULL, 0x5313ec9d329eaaa1ULL, 0x00000003b58e88c7ULL} } , // 10^68 {{0x0000000000000000ULL, 0x9d3bda934d8ee6a0ULL, 0x3ec73e23fa32aa4fULL, 0x00000025179157c9ULL} } , // 10^69 {{0x0000000000000000ULL, 0x245689c107950240ULL, 0x73c86d67c5faa71cULL, 0x00000172ebad6ddcULL} } , // 10^70 {{0x0000000000000000ULL, 0x6b61618a4bd21680ULL, 0x85d4460dbbca8719ULL, 0x00000e7d34c64a9cULL} } , // 10^71 {{0x0000000000000000ULL, 0x31cdcf66f634e100ULL, 0x3a4abc8955e946feULL, 0x000090e40fbeea1dULL} } , // 10^72 {{0x0000000000000000ULL, 0xf20a1a059e10ca00ULL, 0x46eb5d5d5b1cc5edULL, 0x0005a8e89d752524ULL} } , // 10^73 {{0x0000000000000000ULL, 0x746504382ca7e400ULL, 0xc531a5a58f1fbb4bULL, 0x003899162693736aULL} } , // 10^74 {{0x0000000000000000ULL, 0x8bf22a31be8ee800ULL, 0xb3f07877973d50f2ULL, 0x0235fadd81c2822bULL} } , // 10^75 {{0x0000000000000000ULL, 0x7775a5f171951000ULL, 0x0764b4abe8652979ULL, 0x161bcca7119915b5ULL} } , // 10^76 {{0x0000000000000000ULL, 0xaa987b6e6fd2a000ULL, 0x49ef0eb713f39ebeULL, 0xdd15fe86affad912ULL} } // 10^77 }; // ten2mk128[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 34 and // exp (k) = shiftright128[k - 1] + 128 UINT128 ten2mk128[] = { {{0x999999999999999aULL, 0x1999999999999999ULL} } , // 10^(-1) * 2^128 {{0x28f5c28f5c28f5c3ULL, 0x028f5c28f5c28f5cULL} } , // 10^(-2) * 2^128 {{0x9db22d0e56041894ULL, 0x004189374bc6a7efULL} } , // 10^(-3) * 2^128 {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL} } , // 10^(-4) * 2^131 {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL} } , // 10^(-5) * 2^134 {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL} } , // 10^(-6) * 2^137 {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL} } , // 10^(-7) * 2^141 {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL} } , // 10^(-8) * 2^144 {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL} } , // 10^(-9) * 2^147 {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL} } , // 10^(-10) * 2^151 {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL} } , // 10^(-11) * 2^154 {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL} } , // 10^(-12) * 2^157 {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL} } , // 10^(-13) * 2^161 {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL} } , // 10^(-14) * 2^164 {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL} } , // 10^(-15) * 2^167 {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL} } , // 10^(-16) * 2^171 {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL} } , // 10^(-17) * 2^174 {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL} } , // 10^(-18) * 2^177 {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL} } , // 10^(-19) * 2^181 {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL} } , // 10^(-20) * 2^184 {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL} } , // 10^(-21) * 2^187 {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL} } , // 10^(-22) * 2^191 {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL} } , // 10^(-23) * 2^194 {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL} } , // 10^(-24) * 2^197 {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL} } , // 10^(-25) * 2^201 {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL} } , // 10^(-26) * 2^204 {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL} } , // 10^(-27) * 2^207 {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL} } , // 10^(-28) * 2^211 {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL} } , // 10^(-29) * 2^214 {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL} } , // 10^(-30) * 2^217 {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL} } , // 10^(-31) * 2^220 {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL} } , // 10^(-32) * 2^224 {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL} } , // 10^(-33) * 2^227 {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL} } , // 10^(-34) * 2^230 }; // shiftright128[] contains the right shift count to obtain C2* from the top // 128 bits of the 128x128-bit product C2 * Kx int shiftright128[] = { 0, // 128 - 128 0, // 128 - 128 0, // 128 - 128 3, // 131 - 128 6, // 134 - 128 9, // 137 - 128 13, // 141 - 128 16, // 144 - 128 19, // 147 - 128 23, // 151 - 128 26, // 154 - 128 29, // 157 - 128 33, // 161 - 128 36, // 164 - 128 39, // 167 - 128 43, // 171 - 128 46, // 174 - 128 49, // 177 - 128 53, // 181 - 128 56, // 184 - 128 59, // 187 - 128 63, // 191 - 128 66, // 194 - 128 69, // 197 - 128 73, // 201 - 128 76, // 204 - 128 79, // 207 - 128 83, // 211 - 128 86, // 214 - 128 89, // 217 - 128 92, // 220 - 128 96, // 224 - 128 99, // 227 - 128 102 // 230 - 128 }; // maskhigh128[] contains the mask to apply to the top 128 bits of the // 128x128-bit product in order to obtain the high bits of f2* // the 64-bit word order is L, H UINT64 maskhigh128[] = { 0x0000000000000000ULL, // 0 = 128 - 128 bits 0x0000000000000000ULL, // 0 = 128 - 128 bits 0x0000000000000000ULL, // 0 = 128 - 128 bits 0x0000000000000007ULL, // 3 = 131 - 128 bits 0x000000000000003fULL, // 6 = 134 - 128 bits 0x00000000000001ffULL, // 9 = 137 - 128 bits 0x0000000000001fffULL, // 13 = 141 - 128 bits 0x000000000000ffffULL, // 16 = 144 - 128 bits 0x000000000007ffffULL, // 19 = 147 - 128 bits 0x00000000007fffffULL, // 23 = 151 - 128 bits 0x0000000003ffffffULL, // 26 = 154 - 128 bits 0x000000001fffffffULL, // 29 = 157 - 128 bits 0x00000001ffffffffULL, // 33 = 161 - 128 bits 0x0000000fffffffffULL, // 36 = 164 - 128 bits 0x0000007fffffffffULL, // 39 = 167 - 128 bits 0x000007ffffffffffULL, // 43 = 171 - 128 bits 0x00003fffffffffffULL, // 46 = 174 - 128 bits 0x0001ffffffffffffULL, // 49 = 177 - 128 bits 0x001fffffffffffffULL, // 53 = 181 - 128 bits 0x00ffffffffffffffULL, // 56 = 184 - 128 bits 0x07ffffffffffffffULL, // 59 = 187 - 128 bits 0x7fffffffffffffffULL, // 63 = 191 - 128 bits 0x0000000000000003ULL, // 2 = 194 - 192 bits 0x000000000000001fULL, // 5 = 197 - 192 bits 0x00000000000001ffULL, // 9 = 201 - 192 bits 0x0000000000000fffULL, // 12 = 204 - 192 bits 0x0000000000007fffULL, // 15 = 207 - 192 bits 0x000000000007ffffULL, // 21 = 211 - 192 bits 0x00000000003fffffULL, // 22 = 214 - 192 bits 0x0000000001ffffffULL, // 25 = 217 - 192 bits 0x000000000fffffffULL, // 28 = 220 - 192 bits 0x00000000ffffffffULL, // 32 = 224 - 192 bits 0x00000007ffffffffULL, // 35 = 227 - 192 bits 0x0000003fffffffffULL // 38 = 230 - 192 bits }; // onehalf128[] contains the high bits of 1/2 positioned correctly for // comparison with the high bits of f2* // the 64-bit word order is L, H UINT64 onehalf128[] = { 0x0000000000000000ULL, // 0 bits 0x0000000000000000ULL, // 0 bits 0x0000000000000000ULL, // 0 bits 0x0000000000000004ULL, // 3 bits 0x0000000000000020ULL, // 6 bits 0x0000000000000100ULL, // 9 bits 0x0000000000001000ULL, // 13 bits 0x0000000000008000ULL, // 16 bits 0x0000000000040000ULL, // 19 bits 0x0000000000400000ULL, // 23 bits 0x0000000002000000ULL, // 26 bits 0x0000000010000000ULL, // 29 bits 0x0000000100000000ULL, // 33 bits 0x0000000800000000ULL, // 36 bits 0x0000004000000000ULL, // 39 bits 0x0000040000000000ULL, // 43 bits 0x0000200000000000ULL, // 46 bits 0x0001000000000000ULL, // 49 bits 0x0010000000000000ULL, // 53 bits 0x0080000000000000ULL, // 56 bits 0x0400000000000000ULL, // 59 bits 0x4000000000000000ULL, // 63 bits 0x0000000000000002ULL, // 66 bits 0x0000000000000010ULL, // 69 bits 0x0000000000000100ULL, // 73 bits 0x0000000000000800ULL, // 76 bits 0x0000000000004000ULL, // 79 bits 0x0000000000040000ULL, // 83 bits 0x0000000000200000ULL, // 86 bits 0x0000000001000000ULL, // 89 bits 0x0000000008000000ULL, // 92 bits 0x0000000080000000ULL, // 96 bits 0x0000000400000000ULL, // 99 bits 0x0000002000000000ULL // 102 bits }; UINT64 ten2mk64[] = { 0x199999999999999aULL, // 10^(-1) * 2^ 64 0x028f5c28f5c28f5dULL, // 10^(-2) * 2^ 64 0x004189374bc6a7f0ULL, // 10^(-3) * 2^ 64 0x00346dc5d638865aULL, // 10^(-4) * 2^ 67 0x0029f16b11c6d1e2ULL, // 10^(-5) * 2^ 70 0x00218def416bdb1bULL, // 10^(-6) * 2^ 73 0x0035afe535795e91ULL, // 10^(-7) * 2^ 77 0x002af31dc4611874ULL, // 10^(-8) * 2^ 80 0x00225c17d04dad2aULL, // 10^(-9) * 2^ 83 0x0036f9bfb3af7b76ULL, // 10^(-10) * 2^ 87 0x002bfaffc2f2c92bULL, // 10^(-11) * 2^ 90 0x00232f33025bd423ULL, // 10^(-12) * 2^ 93 0x00384b84d092ed04ULL, // 10^(-13) * 2^ 97 0x002d09370d425737ULL, // 10^(-14) * 2^100 0x0024075f3dceac2cULL, // 10^(-15) * 2^103 0x0039a5652fb11379ULL, // 10^(-16) * 2^107 }; // ten2mk128trunc[] contains T*, the top Ex >= 128 bits of 10^(-k), // for 1 <= k <= 34 // the 64-bit word order is L, H UINT128 ten2mk128trunc[] = { {{0x9999999999999999ULL, 0x1999999999999999ULL}}, // 10^(-1) * 2^128 {{0x28f5c28f5c28f5c2ULL, 0x028f5c28f5c28f5cULL}}, // 10^(-2) * 2^128 {{0x9db22d0e56041893ULL, 0x004189374bc6a7efULL}}, // 10^(-3) * 2^128 {{0x4af4f0d844d013a9ULL, 0x00346dc5d6388659ULL}}, // 10^(-4) * 2^131 {{0x08c3f3e0370cdc87ULL, 0x0029f16b11c6d1e1ULL}}, // 10^(-5) * 2^134 {{0x6d698fe69270b06cULL, 0x00218def416bdb1aULL}}, // 10^(-6) * 2^137 {{0xaf0f4ca41d811a46ULL, 0x0035afe535795e90ULL}}, // 10^(-7) * 2^141 {{0xbf3f70834acdae9fULL, 0x002af31dc4611873ULL}}, // 10^(-8) * 2^144 {{0x65cc5a02a23e254cULL, 0x00225c17d04dad29ULL}}, // 10^(-9) * 2^147 {{0x6fad5cd10396a213ULL, 0x0036f9bfb3af7b75ULL}}, // 10^(-10) * 2^151 {{0xbfbde3da69454e75ULL, 0x002bfaffc2f2c92aULL}}, // 10^(-11) * 2^154 {{0x32fe4fe1edd10b91ULL, 0x00232f33025bd422ULL}}, // 10^(-12) * 2^157 {{0x84ca19697c81ac1bULL, 0x00384b84d092ed03ULL}}, // 10^(-13) * 2^161 {{0x03d4e1213067bce3ULL, 0x002d09370d425736ULL}}, // 10^(-14) * 2^164 {{0x3643e74dc052fd82ULL, 0x0024075f3dceac2bULL}}, // 10^(-15) * 2^167 {{0x56d30baf9a1e626aULL, 0x0039a5652fb11378ULL}}, // 10^(-16) * 2^171 {{0x12426fbfae7eb521ULL, 0x002e1dea8c8da92dULL}}, // 10^(-17) * 2^174 {{0x41cebfcc8b9890e7ULL, 0x0024e4bba3a48757ULL}}, // 10^(-18) * 2^177 {{0x694acc7a78f41b0cULL, 0x003b07929f6da558ULL}}, // 10^(-19) * 2^181 {{0xbaa23d2ec729af3dULL, 0x002f394219248446ULL}}, // 10^(-20) * 2^184 {{0xfbb4fdbf05baf297ULL, 0x0025c768141d369eULL}}, // 10^(-21) * 2^187 {{0x2c54c931a2c4b758ULL, 0x003c7240202ebdcbULL}}, // 10^(-22) * 2^191 {{0x89dd6dc14f03c5e0ULL, 0x00305b66802564a2ULL}}, // 10^(-23) * 2^194 {{0xd4b1249aa59c9e4dULL, 0x0026af8533511d4eULL}}, // 10^(-24) * 2^197 {{0x544ea0f76f60fd48ULL, 0x003de5a1ebb4fbb1ULL}}, // 10^(-25) * 2^201 {{0x76a54d92bf80caa0ULL, 0x00318481895d9627ULL}}, // 10^(-26) * 2^204 {{0x921dd7a89933d54dULL, 0x00279d346de4781fULL}}, // 10^(-27) * 2^207 {{0x8362f2a75b862214ULL, 0x003f61ed7ca0c032ULL}}, // 10^(-28) * 2^211 {{0xcf825bb91604e810ULL, 0x0032b4bdfd4d668eULL}}, // 10^(-29) * 2^214 {{0x0c684960de6a5340ULL, 0x00289097fdd7853fULL}}, // 10^(-30) * 2^217 {{0x3d203ab3e521dc33ULL, 0x002073accb12d0ffULL}}, // 10^(-31) * 2^220 {{0x2e99f7863b696052ULL, 0x0033ec47ab514e65ULL}}, // 10^(-32) * 2^224 {{0x587b2c6b62bab375ULL, 0x002989d2ef743eb7ULL}}, // 10^(-33) * 2^227 {{0xad2f56bc4efbc2c4ULL, 0x00213b0f25f69892ULL}}, // 10^(-34) * 2^230 }; // ten2mk128M[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 4 and // exp (k) = shiftright128[k - 1] + 128 // the 64-bit word order is L, H UINT128 ten2mk128M[] = { {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}}, // 10^(-1) * 2^131 {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}}, // 10^(-2) * 2^134 {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}}, // 10^(-3) * 2^137 {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}} // 10^(-4) * 2^141 }; // ten2mk128truncM[] contains T*, the top Ex >= 128 bits of 10^(-k), // for 1 <= k <= 4; the top bits which are 0 are not represented // the 64-bit word order is L, H UINT128 ten2mk128truncM[] = { {{0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // 10^(-1) * 2^131 {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // 10^(-2) * 2^134 {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // 10^(-3) * 2^137 {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}} // 10^(-4) * 2^141 }; // shiftright128M[] contains the right shift count to obtain C2* from the top // 128 bits of the 128x128-bit product C2 * Kx int shiftright128M[] = { 3, // 131 - 128 6, // 134 - 128 9, // 137 - 128 13 // 141 - 128 }; // maskhigh128M[] contains the mask to apply to the top 128 bits of the // 128x128-bit product in order to obtain the high bits of f* // the high 64 bits of the mask are 0, so only the low 64 bits are represented UINT64 maskhigh128M[] = { 0x0000000000000007ULL, // 3 = 131 - 128 bits 0x000000000000003fULL, // 6 = 134 - 128 bits 0x00000000000001ffULL, // 9 = 137 - 128 bits 0x0000000000001fffULL // 13 = 141 - 128 bits }; // onehalf128M[] contains 1/2 positioned correctly for // comparison with the high bits of f* // the high 64 bits are 0, so only the low 64 bits are represented UINT64 onehalf128M[] = { 0x0000000000000004ULL, // 3 bits 0x0000000000000020ULL, // 6 bits 0x0000000000000100ULL, // 9 bits 0x0000000000001000ULL // 13 bits }; // ten2mk192M[k - 1] = 10^(-k-4) * 2^exp (k), where 1 <= k <= 19 and // exp (k) = shiftright128[k - 1] + 128 // the 64-bit word order is L, M, H UINT192 ten2mk192M[] = { {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}}, // 10^(-5) * 2^208 {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}}, // 10^(-6) * 2^211 {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}}, // 10^(-7) * 2^215 {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}}, // 10^(-8) * 2^218 {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}}, // 10^(-9) * 2^221 {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}}, // 10^(-10) * 2^225 {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}}, // 10^(-11) * 2^228 {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}}, // 10^(-12) * 2^231 {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}}, // 10^(-13) * 2^235 {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}}, // 10^(-14) * 2^238 {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}}, // 10^(-15) * 2^241 {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}}, // 10^(-16) * 2^245 {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}}, // 10^(-17) * 2^248 {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}}, // 10^(-18) * 2^251 {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}}, // 10^(-19) * 2^255 {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}}, // 10^(-20) * 2^258 {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}}, // 10^(-21) * 2^261 {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}}, // 10^(-22) * 2^265 {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}} // 10^(-23) * 2^268 }; // ten2mk192truncM[] contains T*, the top Ex >= 192 bits of 10^(-k), // for 5 <= k <= 23; the top bits which are 0 are not represented // the 64-bit word order is L, M, H UINT192 ten2mk192truncM[] = { {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}}, // 10^(-5) * 2^208 {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}}, // 10^(-6) * 2^211 {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}}, // 10^(-7) * 2^215 {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}}, // 10^(-8) * 2^218 {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}}, // 10^(-9) * 2^221 {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}}, // 10^(-10) * 2^225 {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}}, // 10^(-11) * 2^228 {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}}, // 10^(-12) * 2^231 {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}}, // 10^(-13) * 2^235 {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}}, // 10^(-14) * 2^238 {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}}, // 10^(-15) * 2^241 {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}}, // 10^(-16) * 2^245 {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}}, // 10^(-17) * 2^248 {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}}, // 10^(-18) * 2^251 {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}}, // 10^(-19) * 2^255 {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}}, // 10^(-20) * 2^258 {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}}, // 10^(-21) * 2^261 {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}}, // 10^(-22) * 2^265 {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}} // 10^(-23) * 2^268 }; // shiftright192M[] contains the right shift count to obtain C2* from the top // 192 bits of the 192x192-bit product C2 * Kx if 0 <= ind <= 14 where ind is // the index in the table, or from the top 128 bits if 15 <= ind <= 18 int shiftright192M[] = { 16, // 208 - 192 19, // 211 - 192 23, // 215 - 192 26, // 218 - 192 29, // 221 - 192 33, // 225 - 192 36, // 228 - 192 39, // 231 - 192 43, // 235 - 192 46, // 238 - 192 49, // 241 - 192 53, // 245 - 192 56, // 248 - 192 59, // 251 - 192 63, // 255 - 192 2, // 258 - 256 5, // 261 - 256 9, // 265 - 256 12 // 268 - 256 }; // maskhigh192M[] contains the mask to apply to the top 192 bits of the // 192x192-bit product in order to obtain the high bits of f* // if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits // of the 384-bit mask are 0; if 15 <= ind <= 18 then the high 64 bits are 0 UINT64 maskhigh192M[] = { 0x000000000000ffffULL, // 16 = 208 - 192 bits 0x000000000007ffffULL, // 19 = 211 - 192 bits 0x00000000007fffffULL, // 23 = 215 - 192 bits 0x0000000003ffffffULL, // 26 = 218 - 192 bits 0x000000001fffffffULL, // 29 = 221 - 192 bits 0x00000001ffffffffULL, // 33 = 225 - 192 bits 0x0000000fffffffffULL, // 36 = 228 - 192 bits 0x0000007fffffffffULL, // 39 = 231 - 192 bits 0x000007ffffffffffULL, // 43 = 235 - 192 bits 0x00003fffffffffffULL, // 46 = 238 - 192 bits 0x0001ffffffffffffULL, // 49 = 241 - 192 bits 0x001fffffffffffffULL, // 53 = 245 - 192 bits 0x00ffffffffffffffULL, // 56 = 248 - 192 bits 0x07ffffffffffffffULL, // 59 = 251 - 192 bits 0x7fffffffffffffffULL, // 63 = 255 - 192 bits 0x0000000000000003ULL, // 2 = 258 - 256 bits 0x000000000000001fULL, // 5 = 261 - 256 bits 0x00000000000001ffULL, // 9 = 265 - 256 bits 0x0000000000000fffULL // 12 = 268 - 256 bits }; // onehalf192M[] contains 1/2 positioned correctly for // comparison with the high bits of f* // if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits // of the 384-bit mask are 0; if 15 <= ind <= 18 then the high 648 bits are 0 UINT64 onehalf192M[] = { 0x0000000000008000ULL, // 16 = 208 - 192 bits 0x0000000000040000ULL, // 19 = 211 - 192 bits 0x0000000000400000ULL, // 23 = 215 - 192 bits 0x0000000002000000ULL, // 26 = 218 - 192 bits 0x0000000010000000ULL, // 29 = 221 - 192 bits 0x0000000100000000ULL, // 33 = 225 - 192 bits 0x0000000800000000ULL, // 36 = 228 - 192 bits 0x0000004000000000ULL, // 39 = 231 - 192 bits 0x0000040000000000ULL, // 43 = 235 - 192 bits 0x0000200000000000ULL, // 46 = 238 - 192 bits 0x0001000000000000ULL, // 49 = 241 - 192 bits 0x0010000000000000ULL, // 53 = 245 - 192 bits 0x0080000000000000ULL, // 56 = 248 - 192 bits 0x0400000000000000ULL, // 59 = 251 - 192 bits 0x4000000000000000ULL, // 63 = 255 - 192 bits 0x0000000000000002ULL, // 2 = 258 - 256 bits 0x0000000000000010ULL, // 5 = 261 - 256 bits 0x0000000000000100ULL, // 9 = 265 - 256 bits 0x0000000000000800ULL // 12 = 268 - 256 bits }; // ten2mk256M[k - 1] = 10^(-k-23) * 2^exp (k), where 1 <= k <= 11 and // exp (k) = shiftright128[k - 1] + 128 UINT256 ten2mk256M[] = { // the 64-bit word order is LL, LH, HL, HH {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^(-24) * 2^335 {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^(-25) * 2^339 {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^(-26) * 2^342 {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // 10^(-27) * 2^345 {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^(-28) * 2^349 {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^(-29) * 2^352 {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^(-30) * 2^355 {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL, 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^(-31) * 2^358 {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^(-32) * 2^362 {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^(-33) * 2^365 {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}} // 10^(-34) * 2^368 }; // ten2mk256truncM[] contains T*, the top Ex >= 256 bits of 10^(-k), // for 24 <= k <= 34; the top bits which are 0 are not represented UINT256 ten2mk256truncM[] = { // the 64-bit word order is LL, LH, HL, HH {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^(-24) * 2^335 {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^(-25) * 2^339 {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^(-26) * 2^342 {{0x775ea264cf55347cULL, 0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL, 0x9e74d1b791e07e48ULL}}, // 10^(-27) * 2^345 {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^(-28) * 2^349 {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^(-29) * 2^352 {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^(-30) * 2^355 {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL, 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^(-31) * 2^358 {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^(-32) * 2^362 {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^(-33) * 2^365 {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}} // 10^(-34) * 2^368 }; // shiftright256M[] contains the right shift count to obtain C2* from the top // 192 bits of the 256x256-bit product C2 * Kx int shiftright256M[] = { 15, // 335 - 320 19, // 339 - 320 22, // 342 - 320 25, // 345 - 320 29, // 349 - 320 32, // 352 - 320 // careful of 32-bit machines! 35, // 355 - 320 38, // 358 - 320 42, // 362 - 320 45, // 365 - 320 48 // 368 - 320 }; // maskhigh256M[] contains the mask to apply to the top 192 bits of the // 256x256-bit product in order to obtain the high bits of f* UINT64 maskhigh256M[] = { 0x0000000000007fffULL, // 15 = 335 - 320 bits 0x000000000007ffffULL, // 19 = 339 - 320 bits 0x00000000003fffffULL, // 22 = 342 - 320 bits 0x0000000001ffffffULL, // 25 = 345 - 320 bits 0x000000001fffffffULL, // 29 = 349 - 320 bits 0x00000000ffffffffULL, // 32 = 352 - 320 bits 0x00000007ffffffffULL, // 35 = 355 - 320 bits 0x0000003fffffffffULL, // 38 = 358 - 320 bits 0x000003ffffffffffULL, // 42 = 362 - 320 bits 0x00001fffffffffffULL, // 45 = 365 - 320 bits 0x0000ffffffffffffULL // 48 = 368 - 320 bits }; // onehalf256M[] contains 1/2 positioned correctly for comparison with the // high bits of f*; the high 128 bits of the 512-bit mask are 0 UINT64 onehalf256M[] = { 0x0000000000004000ULL, // 15 = 335 - 320 bits 0x0000000000040000ULL, // 19 = 339 - 320 bits 0x0000000000200000ULL, // 22 = 342 - 320 bits 0x0000000001000000ULL, // 25 = 345 - 320 bits 0x0000000010000000ULL, // 29 = 349 - 320 bits 0x0000000080000000ULL, // 32 = 352 - 320 bits 0x0000000400000000ULL, // 35 = 355 - 320 bits 0x0000002000000000ULL, // 38 = 358 - 320 bits 0x0000020000000000ULL, // 42 = 362 - 320 bits 0x0000100000000000ULL, // 45 = 365 - 320 bits 0x0000800000000000ULL // 48 = 368 - 320 bits }; // char_table2[] is used to convert n to string, where 10 <= n <= 99 unsigned char char_table2[180] = { '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9' }; // char_table3[] is used to convert n to string, where 000 <= n <= 999 unsigned char char_table3[3000] = { '0', '0', '0', '0', '0', '1', '0', '0', '2', '0', '0', '3', '0', '0', '4', '0', '0', '5', '0', '0', '6', '0', '0', '7', '0', '0', '8', '0', '0', '9', '0', '1', '0', '0', '1', '1', '0', '1', '2', '0', '1', '3', '0', '1', '4', '0', '1', '5', '0', '1', '6', '0', '1', '7', '0', '1', '8', '0', '1', '9', '0', '2', '0', '0', '2', '1', '0', '2', '2', '0', '2', '3', '0', '2', '4', '0', '2', '5', '0', '2', '6', '0', '2', '7', '0', '2', '8', '0', '2', '9', '0', '3', '0', '0', '3', '1', '0', '3', '2', '0', '3', '3', '0', '3', '4', '0', '3', '5', '0', '3', '6', '0', '3', '7', '0', '3', '8', '0', '3', '9', '0', '4', '0', '0', '4', '1', '0', '4', '2', '0', '4', '3', '0', '4', '4', '0', '4', '5', '0', '4', '6', '0', '4', '7', '0', '4', '8', '0', '4', '9', '0', '5', '0', '0', '5', '1', '0', '5', '2', '0', '5', '3', '0', '5', '4', '0', '5', '5', '0', '5', '6', '0', '5', '7', '0', '5', '8', '0', '5', '9', '0', '6', '0', '0', '6', '1', '0', '6', '2', '0', '6', '3', '0', '6', '4', '0', '6', '5', '0', '6', '6', '0', '6', '7', '0', '6', '8', '0', '6', '9', '0', '7', '0', '0', '7', '1', '0', '7', '2', '0', '7', '3', '0', '7', '4', '0', '7', '5', '0', '7', '6', '0', '7', '7', '0', '7', '8', '0', '7', '9', '0', '8', '0', '0', '8', '1', '0', '8', '2', '0', '8', '3', '0', '8', '4', '0', '8', '5', '0', '8', '6', '0', '8', '7', '0', '8', '8', '0', '8', '9', '0', '9', '0', '0', '9', '1', '0', '9', '2', '0', '9', '3', '0', '9', '4', '0', '9', '5', '0', '9', '6', '0', '9', '7', '0', '9', '8', '0', '9', '9', '1', '0', '0', '1', '0', '1', '1', '0', '2', '1', '0', '3', '1', '0', '4', '1', '0', '5', '1', '0', '6', '1', '0', '7', '1', '0', '8', '1', '0', '9', '1', '1', '0', '1', '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', '2', '0', '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', '3', '0', '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', '4', '0', '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', '5', '0', '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', '9', '1', '6', '0', '1', '6', '1', '1', '6', '2', '1', '6', '3', '1', '6', '4', '1', '6', '5', '1', '6', '6', '1', '6', '7', '1', '6', '8', '1', '6', '9', '1', '7', '0', '1', '7', '1', '1', '7', '2', '1', '7', '3', '1', '7', '4', '1', '7', '5', '1', '7', '6', '1', '7', '7', '1', '7', '8', '1', '7', '9', '1', '8', '0', '1', '8', '1', '1', '8', '2', '1', '8', '3', '1', '8', '4', '1', '8', '5', '1', '8', '6', '1', '8', '7', '1', '8', '8', '1', '8', '9', '1', '9', '0', '1', '9', '1', '1', '9', '2', '1', '9', '3', '1', '9', '4', '1', '9', '5', '1', '9', '6', '1', '9', '7', '1', '9', '8', '1', '9', '9', '2', '0', '0', '2', '0', '1', '2', '0', '2', '2', '0', '3', '2', '0', '4', '2', '0', '5', '2', '0', '6', '2', '0', '7', '2', '0', '8', '2', '0', '9', '2', '1', '0', '2', '1', '1', '2', '1', '2', '2', '1', '3', '2', '1', '4', '2', '1', '5', '2', '1', '6', '2', '1', '7', '2', '1', '8', '2', '1', '9', '2', '2', '0', '2', '2', '1', '2', '2', '2', '2', '2', '3', '2', '2', '4', '2', '2', '5', '2', '2', '6', '2', '2', '7', '2', '2', '8', '2', '2', '9', '2', '3', '0', '2', '3', '1', '2', '3', '2', '2', '3', '3', '2', '3', '4', '2', '3', '5', '2', '3', '6', '2', '3', '7', '2', '3', '8', '2', '3', '9', '2', '4', '0', '2', '4', '1', '2', '4', '2', '2', '4', '3', '2', '4', '4', '2', '4', '5', '2', '4', '6', '2', '4', '7', '2', '4', '8', '2', '4', '9', '2', '5', '0', '2', '5', '1', '2', '5', '2', '2', '5', '3', '2', '5', '4', '2', '5', '5', '2', '5', '6', '2', '5', '7', '2', '5', '8', '2', '5', '9', '2', '6', '0', '2', '6', '1', '2', '6', '2', '2', '6', '3', '2', '6', '4', '2', '6', '5', '2', '6', '6', '2', '6', '7', '2', '6', '8', '2', '6', '9', '2', '7', '0', '2', '7', '1', '2', '7', '2', '2', '7', '3', '2', '7', '4', '2', '7', '5', '2', '7', '6', '2', '7', '7', '2', '7', '8', '2', '7', '9', '2', '8', '0', '2', '8', '1', '2', '8', '2', '2', '8', '3', '2', '8', '4', '2', '8', '5', '2', '8', '6', '2', '8', '7', '2', '8', '8', '2', '8', '9', '2', '9', '0', '2', '9', '1', '2', '9', '2', '2', '9', '3', '2', '9', '4', '2', '9', '5', '2', '9', '6', '2', '9', '7', '2', '9', '8', '2', '9', '9', '3', '0', '0', '3', '0', '1', '3', '0', '2', '3', '0', '3', '3', '0', '4', '3', '0', '5', '3', '0', '6', '3', '0', '7', '3', '0', '8', '3', '0', '9', '3', '1', '0', '3', '1', '1', '3', '1', '2', '3', '1', '3', '3', '1', '4', '3', '1', '5', '3', '1', '6', '3', '1', '7', '3', '1', '8', '3', '1', '9', '3', '2', '0', '3', '2', '1', '3', '2', '2', '3', '2', '3', '3', '2', '4', '3', '2', '5', '3', '2', '6', '3', '2', '7', '3', '2', '8', '3', '2', '9', '3', '3', '0', '3', '3', '1', '3', '3', '2', '3', '3', '3', '3', '3', '4', '3', '3', '5', '3', '3', '6', '3', '3', '7', '3', '3', '8', '3', '3', '9', '3', '4', '0', '3', '4', '1', '3', '4', '2', '3', '4', '3', '3', '4', '4', '3', '4', '5', '3', '4', '6', '3', '4', '7', '3', '4', '8', '3', '4', '9', '3', '5', '0', '3', '5', '1', '3', '5', '2', '3', '5', '3', '3', '5', '4', '3', '5', '5', '3', '5', '6', '3', '5', '7', '3', '5', '8', '3', '5', '9', '3', '6', '0', '3', '6', '1', '3', '6', '2', '3', '6', '3', '3', '6', '4', '3', '6', '5', '3', '6', '6', '3', '6', '7', '3', '6', '8', '3', '6', '9', '3', '7', '0', '3', '7', '1', '3', '7', '2', '3', '7', '3', '3', '7', '4', '3', '7', '5', '3', '7', '6', '3', '7', '7', '3', '7', '8', '3', '7', '9', '3', '8', '0', '3', '8', '1', '3', '8', '2', '3', '8', '3', '3', '8', '4', '3', '8', '5', '3', '8', '6', '3', '8', '7', '3', '8', '8', '3', '8', '9', '3', '9', '0', '3', '9', '1', '3', '9', '2', '3', '9', '3', '3', '9', '4', '3', '9', '5', '3', '9', '6', '3', '9', '7', '3', '9', '8', '3', '9', '9', '4', '0', '0', '4', '0', '1', '4', '0', '2', '4', '0', '3', '4', '0', '4', '4', '0', '5', '4', '0', '6', '4', '0', '7', '4', '0', '8', '4', '0', '9', '4', '1', '0', '4', '1', '1', '4', '1', '2', '4', '1', '3', '4', '1', '4', '4', '1', '5', '4', '1', '6', '4', '1', '7', '4', '1', '8', '4', '1', '9', '4', '2', '0', '4', '2', '1', '4', '2', '2', '4', '2', '3', '4', '2', '4', '4', '2', '5', '4', '2', '6', '4', '2', '7', '4', '2', '8', '4', '2', '9', '4', '3', '0', '4', '3', '1', '4', '3', '2', '4', '3', '3', '4', '3', '4', '4', '3', '5', '4', '3', '6', '4', '3', '7', '4', '3', '8', '4', '3', '9', '4', '4', '0', '4', '4', '1', '4', '4', '2', '4', '4', '3', '4', '4', '4', '4', '4', '5', '4', '4', '6', '4', '4', '7', '4', '4', '8', '4', '4', '9', '4', '5', '0', '4', '5', '1', '4', '5', '2', '4', '5', '3', '4', '5', '4', '4', '5', '5', '4', '5', '6', '4', '5', '7', '4', '5', '8', '4', '5', '9', '4', '6', '0', '4', '6', '1', '4', '6', '2', '4', '6', '3', '4', '6', '4', '4', '6', '5', '4', '6', '6', '4', '6', '7', '4', '6', '8', '4', '6', '9', '4', '7', '0', '4', '7', '1', '4', '7', '2', '4', '7', '3', '4', '7', '4', '4', '7', '5', '4', '7', '6', '4', '7', '7', '4', '7', '8', '4', '7', '9', '4', '8', '0', '4', '8', '1', '4', '8', '2', '4', '8', '3', '4', '8', '4', '4', '8', '5', '4', '8', '6', '4', '8', '7', '4', '8', '8', '4', '8', '9', '4', '9', '0', '4', '9', '1', '4', '9', '2', '4', '9', '3', '4', '9', '4', '4', '9', '5', '4', '9', '6', '4', '9', '7', '4', '9', '8', '4', '9', '9', '5', '0', '0', '5', '0', '1', '5', '0', '2', '5', '0', '3', '5', '0', '4', '5', '0', '5', '5', '0', '6', '5', '0', '7', '5', '0', '8', '5', '0', '9', '5', '1', '0', '5', '1', '1', '5', '1', '2', '5', '1', '3', '5', '1', '4', '5', '1', '5', '5', '1', '6', '5', '1', '7', '5', '1', '8', '5', '1', '9', '5', '2', '0', '5', '2', '1', '5', '2', '2', '5', '2', '3', '5', '2', '4', '5', '2', '5', '5', '2', '6', '5', '2', '7', '5', '2', '8', '5', '2', '9', '5', '3', '0', '5', '3', '1', '5', '3', '2', '5', '3', '3', '5', '3', '4', '5', '3', '5', '5', '3', '6', '5', '3', '7', '5', '3', '8', '5', '3', '9', '5', '4', '0', '5', '4', '1', '5', '4', '2', '5', '4', '3', '5', '4', '4', '5', '4', '5', '5', '4', '6', '5', '4', '7', '5', '4', '8', '5', '4', '9', '5', '5', '0', '5', '5', '1', '5', '5', '2', '5', '5', '3', '5', '5', '4', '5', '5', '5', '5', '5', '6', '5', '5', '7', '5', '5', '8', '5', '5', '9', '5', '6', '0', '5', '6', '1', '5', '6', '2', '5', '6', '3', '5', '6', '4', '5', '6', '5', '5', '6', '6', '5', '6', '7', '5', '6', '8', '5', '6', '9', '5', '7', '0', '5', '7', '1', '5', '7', '2', '5', '7', '3', '5', '7', '4', '5', '7', '5', '5', '7', '6', '5', '7', '7', '5', '7', '8', '5', '7', '9', '5', '8', '0', '5', '8', '1', '5', '8', '2', '5', '8', '3', '5', '8', '4', '5', '8', '5', '5', '8', '6', '5', '8', '7', '5', '8', '8', '5', '8', '9', '5', '9', '0', '5', '9', '1', '5', '9', '2', '5', '9', '3', '5', '9', '4', '5', '9', '5', '5', '9', '6', '5', '9', '7', '5', '9', '8', '5', '9', '9', '6', '0', '0', '6', '0', '1', '6', '0', '2', '6', '0', '3', '6', '0', '4', '6', '0', '5', '6', '0', '6', '6', '0', '7', '6', '0', '8', '6', '0', '9', '6', '1', '0', '6', '1', '1', '6', '1', '2', '6', '1', '3', '6', '1', '4', '6', '1', '5', '6', '1', '6', '6', '1', '7', '6', '1', '8', '6', '1', '9', '6', '2', '0', '6', '2', '1', '6', '2', '2', '6', '2', '3', '6', '2', '4', '6', '2', '5', '6', '2', '6', '6', '2', '7', '6', '2', '8', '6', '2', '9', '6', '3', '0', '6', '3', '1', '6', '3', '2', '6', '3', '3', '6', '3', '4', '6', '3', '5', '6', '3', '6', '6', '3', '7', '6', '3', '8', '6', '3', '9', '6', '4', '0', '6', '4', '1', '6', '4', '2', '6', '4', '3', '6', '4', '4', '6', '4', '5', '6', '4', '6', '6', '4', '7', '6', '4', '8', '6', '4', '9', '6', '5', '0', '6', '5', '1', '6', '5', '2', '6', '5', '3', '6', '5', '4', '6', '5', '5', '6', '5', '6', '6', '5', '7', '6', '5', '8', '6', '5', '9', '6', '6', '0', '6', '6', '1', '6', '6', '2', '6', '6', '3', '6', '6', '4', '6', '6', '5', '6', '6', '6', '6', '6', '7', '6', '6', '8', '6', '6', '9', '6', '7', '0', '6', '7', '1', '6', '7', '2', '6', '7', '3', '6', '7', '4', '6', '7', '5', '6', '7', '6', '6', '7', '7', '6', '7', '8', '6', '7', '9', '6', '8', '0', '6', '8', '1', '6', '8', '2', '6', '8', '3', '6', '8', '4', '6', '8', '5', '6', '8', '6', '6', '8', '7', '6', '8', '8', '6', '8', '9', '6', '9', '0', '6', '9', '1', '6', '9', '2', '6', '9', '3', '6', '9', '4', '6', '9', '5', '6', '9', '6', '6', '9', '7', '6', '9', '8', '6', '9', '9', '7', '0', '0', '7', '0', '1', '7', '0', '2', '7', '0', '3', '7', '0', '4', '7', '0', '5', '7', '0', '6', '7', '0', '7', '7', '0', '8', '7', '0', '9', '7', '1', '0', '7', '1', '1', '7', '1', '2', '7', '1', '3', '7', '1', '4', '7', '1', '5', '7', '1', '6', '7', '1', '7', '7', '1', '8', '7', '1', '9', '7', '2', '0', '7', '2', '1', '7', '2', '2', '7', '2', '3', '7', '2', '4', '7', '2', '5', '7', '2', '6', '7', '2', '7', '7', '2', '8', '7', '2', '9', '7', '3', '0', '7', '3', '1', '7', '3', '2', '7', '3', '3', '7', '3', '4', '7', '3', '5', '7', '3', '6', '7', '3', '7', '7', '3', '8', '7', '3', '9', '7', '4', '0', '7', '4', '1', '7', '4', '2', '7', '4', '3', '7', '4', '4', '7', '4', '5', '7', '4', '6', '7', '4', '7', '7', '4', '8', '7', '4', '9', '7', '5', '0', '7', '5', '1', '7', '5', '2', '7', '5', '3', '7', '5', '4', '7', '5', '5', '7', '5', '6', '7', '5', '7', '7', '5', '8', '7', '5', '9', '7', '6', '0', '7', '6', '1', '7', '6', '2', '7', '6', '3', '7', '6', '4', '7', '6', '5', '7', '6', '6', '7', '6', '7', '7', '6', '8', '7', '6', '9', '7', '7', '0', '7', '7', '1', '7', '7', '2', '7', '7', '3', '7', '7', '4', '7', '7', '5', '7', '7', '6', '7', '7', '7', '7', '7', '8', '7', '7', '9', '7', '8', '0', '7', '8', '1', '7', '8', '2', '7', '8', '3', '7', '8', '4', '7', '8', '5', '7', '8', '6', '7', '8', '7', '7', '8', '8', '7', '8', '9', '7', '9', '0', '7', '9', '1', '7', '9', '2', '7', '9', '3', '7', '9', '4', '7', '9', '5', '7', '9', '6', '7', '9', '7', '7', '9', '8', '7', '9', '9', '8', '0', '0', '8', '0', '1', '8', '0', '2', '8', '0', '3', '8', '0', '4', '8', '0', '5', '8', '0', '6', '8', '0', '7', '8', '0', '8', '8', '0', '9', '8', '1', '0', '8', '1', '1', '8', '1', '2', '8', '1', '3', '8', '1', '4', '8', '1', '5', '8', '1', '6', '8', '1', '7', '8', '1', '8', '8', '1', '9', '8', '2', '0', '8', '2', '1', '8', '2', '2', '8', '2', '3', '8', '2', '4', '8', '2', '5', '8', '2', '6', '8', '2', '7', '8', '2', '8', '8', '2', '9', '8', '3', '0', '8', '3', '1', '8', '3', '2', '8', '3', '3', '8', '3', '4', '8', '3', '5', '8', '3', '6', '8', '3', '7', '8', '3', '8', '8', '3', '9', '8', '4', '0', '8', '4', '1', '8', '4', '2', '8', '4', '3', '8', '4', '4', '8', '4', '5', '8', '4', '6', '8', '4', '7', '8', '4', '8', '8', '4', '9', '8', '5', '0', '8', '5', '1', '8', '5', '2', '8', '5', '3', '8', '5', '4', '8', '5', '5', '8', '5', '6', '8', '5', '7', '8', '5', '8', '8', '5', '9', '8', '6', '0', '8', '6', '1', '8', '6', '2', '8', '6', '3', '8', '6', '4', '8', '6', '5', '8', '6', '6', '8', '6', '7', '8', '6', '8', '8', '6', '9', '8', '7', '0', '8', '7', '1', '8', '7', '2', '8', '7', '3', '8', '7', '4', '8', '7', '5', '8', '7', '6', '8', '7', '7', '8', '7', '8', '8', '7', '9', '8', '8', '0', '8', '8', '1', '8', '8', '2', '8', '8', '3', '8', '8', '4', '8', '8', '5', '8', '8', '6', '8', '8', '7', '8', '8', '8', '8', '8', '9', '8', '9', '0', '8', '9', '1', '8', '9', '2', '8', '9', '3', '8', '9', '4', '8', '9', '5', '8', '9', '6', '8', '9', '7', '8', '9', '8', '8', '9', '9', '9', '0', '0', '9', '0', '1', '9', '0', '2', '9', '0', '3', '9', '0', '4', '9', '0', '5', '9', '0', '6', '9', '0', '7', '9', '0', '8', '9', '0', '9', '9', '1', '0', '9', '1', '1', '9', '1', '2', '9', '1', '3', '9', '1', '4', '9', '1', '5', '9', '1', '6', '9', '1', '7', '9', '1', '8', '9', '1', '9', '9', '2', '0', '9', '2', '1', '9', '2', '2', '9', '2', '3', '9', '2', '4', '9', '2', '5', '9', '2', '6', '9', '2', '7', '9', '2', '8', '9', '2', '9', '9', '3', '0', '9', '3', '1', '9', '3', '2', '9', '3', '3', '9', '3', '4', '9', '3', '5', '9', '3', '6', '9', '3', '7', '9', '3', '8', '9', '3', '9', '9', '4', '0', '9', '4', '1', '9', '4', '2', '9', '4', '3', '9', '4', '4', '9', '4', '5', '9', '4', '6', '9', '4', '7', '9', '4', '8', '9', '4', '9', '9', '5', '0', '9', '5', '1', '9', '5', '2', '9', '5', '3', '9', '5', '4', '9', '5', '5', '9', '5', '6', '9', '5', '7', '9', '5', '8', '9', '5', '9', '9', '6', '0', '9', '6', '1', '9', '6', '2', '9', '6', '3', '9', '6', '4', '9', '6', '5', '9', '6', '6', '9', '6', '7', '9', '6', '8', '9', '6', '9', '9', '7', '0', '9', '7', '1', '9', '7', '2', '9', '7', '3', '9', '7', '4', '9', '7', '5', '9', '7', '6', '9', '7', '7', '9', '7', '8', '9', '7', '9', '9', '8', '0', '9', '8', '1', '9', '8', '2', '9', '8', '3', '9', '8', '4', '9', '8', '5', '9', '8', '6', '9', '8', '7', '9', '8', '8', '9', '8', '9', '9', '9', '0', '9', '9', '1', '9', '9', '2', '9', '9', '3', '9', '9', '4', '9', '9', '5', '9', '9', '6', '9', '9', '7', '9', '9', '8', '9', '9', '9' }; // ten2m3k64[], shift_ten2m3k64[] used for conversion from BID128 to string UINT64 ten2m3k64[] = { 0x4189374bc6a7ef9eull, // 4189374bc6a7ef9e * 2^-72 = (10^-3)RP,63 0x10c6f7a0b5ed8d37ull, // 10c6f7a0b5ed8d37 * 2^-80 = (10^-6)RP,61 0x44b82fa09b5a52ccull, // 44b82fa09b5a52cc * 2^-92 = (10^-9)RP,63 0x119799812dea111aull, // 119799812dea111a * 2^-100 = (10^-12)RP,61 0x480ebe7b9d58566dull // 480ebe7b9d58566d * 2^-112 = (10^-15)RP,63 }; unsigned int shift_ten2m3k64[] = { 8, // 72 - 64 16, // 80 - 64 28, // 92 - 64 36, // 100 - 64 48 // 112 - 64 }; UINT128 ten2m3k128[] = { {{0xb22d0e5604189375ull, 0x4189374bc6a7ef9dull}}, // 4189374bc6a7ef9d b22d0e5604189375 * 2^-136 = (10^-3)RP,127 {{0xb4c7f34938583622ull, 0x10c6f7a0b5ed8d36ull}}, // 10c6f7a0b5ed8d36 b4c7f34938583622 * 2^-144 = (10^-6)RP,125 {{0x98b405447c4a9819ull, 0x44b82fa09b5a52cbull}}, // 44b82fa09b5a52cb 98b405447c4a9819 * 2^-156 = (10^-9)RP,127 {{0x7f27f0f6e885c8bbull, 0x119799812dea1119ull}}, // 119799812dea1119 7f27f0f6e885c8bb * 2^-164 = (10^-12)RP,125 {{0x87ce9b80a5fb0509ull, 0x480ebe7b9d58566cull}}, // 480ebe7b9d58566c 87ce9b80a5fb0509 * 2^-176 = (10^-15)RP,127 {{0xe75fe645cc4873faull, 0x12725dd1d243aba0ull}}, // 12725dd1d243aba0 e75fe645cc4873fa * 2^-184 = (10^-18)RP,125 {{0x69fb7e0b75e52f02ull, 0x4b8ed0283a6d3df7ull}}, // 4b8ed0283a6d3df7 69fb7e0b75e52f02 * 2^-196 = (10^-21)RP,127 {{0x58924d52ce4f26a9ull, 0x1357c299a88ea76aull}}, // 1357c299a88ea76a 58924d52ce4f26a9 * 2^-204 = (10^-24)RP,125 {{0x3baf513267aa9a3full, 0x4f3a68dbc8f03f24ull}}, // 4f3a68dbc8f03f24 3baf513267aa9a3f * 2^-216 = (10^-27)RP,127 {{0x3424b06f3529a052ull, 0x14484bfeebc29f86ull}}, // 14484bfeebc29f86 3424b06f3529a052 * 2^-224 = (10^-30)RP,125 {{0xf658d6c57566eac8ull, 0x5313a5dee87d6eb0ull}} // 5313a5dee87d6eb0 f658d6c57566eac8 * 2^-236 = (10^-33)RP,127 }; unsigned int shift_ten2m3k128[] = { 8, // 136 - 128 16, // 144 - 128 28, // 156 - 128 36, // 164 - 128 48, // 176 - 128 56, // 184 - 128 4, // 196 - 192 12, // 204 - 192 24, // 216 - 192 32, // 224 - 192 44 // 236 - 192 }; /*************************************************************************** *************** TABLES FOR GENERAL ROUNDING FUNCTIONS ********************* ***************************************************************************/ // Note: not all entries in these tables will be used with IEEE 754R decimal // floating-point arithmetic // a) In round128_2_18() numbers with 2 <= q <= 18 will be rounded only // for 1 <= x <= 3: // x = 1 or x = 2 when q = 17 // x = 2 or x = 3 when q = 18 // b) In round128_19_38() numbers with 19 <= q <= 38 will be rounded only // for 1 <= x <= 23: // x = 3 or x = 4 when q = 19 // x = 4 or x = 5 when q = 20 // ... // x = 18 or x = 19 when q = 34 // x = 1 or x = 2 or x = 19 or x = 20 when q = 35 // x = 2 or x = 3 or x = 20 or x = 21 when q = 36 // x = 3 or x = 4 or x = 21 or x = 22 when q = 37 // x = 4 or x = 5 or x = 22 or x = 23 when q = 38 // c) ... // However, for generality and possible uses outside the frame of IEEE 754R // this implementation includes table values for all x in [1, q - 1] // Note: 64-bit tables generated with ten2mx64.ma; output in ten2mx64.out // Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17 UINT64 Kx64[] = { 0xcccccccccccccccdULL, // 10^-1 ~= cccccccccccccccd * 2^-67 0xa3d70a3d70a3d70bULL, // 10^-2 ~= a3d70a3d70a3d70b * 2^-70 0x83126e978d4fdf3cULL, // 10^-3 ~= 83126e978d4fdf3c * 2^-73 0xd1b71758e219652cULL, // 10^-4 ~= d1b71758e219652c * 2^-77 0xa7c5ac471b478424ULL, // 10^-5 ~= a7c5ac471b478424 * 2^-80 0x8637bd05af6c69b6ULL, // 10^-6 ~= 8637bd05af6c69b6 * 2^-83 0xd6bf94d5e57a42bdULL, // 10^-7 ~= d6bf94d5e57a42bd * 2^-87 0xabcc77118461cefdULL, // 10^-8 ~= abcc77118461cefd * 2^-90 0x89705f4136b4a598ULL, // 10^-9 ~= 89705f4136b4a598 * 2^-93 0xdbe6fecebdedd5bfULL, // 10^-10 ~= dbe6fecebdedd5bf * 2^-97 0xafebff0bcb24aaffULL, // 10^-11 ~= afebff0bcb24aaff * 2^-100 0x8cbccc096f5088ccULL, // 10^-12 ~= 8cbccc096f5088cc * 2^-103 0xe12e13424bb40e14ULL, // 10^-13 ~= e12e13424bb40e14 * 2^-107 0xb424dc35095cd810ULL, // 10^-14 ~= b424dc35095cd810 * 2^-110 0x901d7cf73ab0acdaULL, // 10^-15 ~= 901d7cf73ab0acda * 2^-113 0xe69594bec44de15cULL, // 10^-16 ~= e69594bec44de15c * 2^-117 0xb877aa3236a4b44aULL // 10^-17 ~= b877aa3236a4b44a * 2^-120 }; // Ex-64 from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17 unsigned int Ex64m64[] = { 3, // 67 - 64, Ex = 67 6, // 70 - 64, Ex = 70 9, // 73 - 64, Ex = 73 13, // 77 - 64, Ex = 77 16, // 80 - 64, Ex = 80 19, // 83 - 64, Ex = 83 23, // 87 - 64, Ex = 87 26, // 90 - 64, Ex = 90 29, // 93 - 64, Ex = 93 33, // 97 - 64, Ex = 97 36, // 100 - 64, Ex = 100 39, // 103 - 64, Ex = 103 43, // 107 - 64, Ex = 107 46, // 110 - 64, Ex = 110 49, // 113 - 64, Ex = 113 53, // 117 - 64, Ex = 117 56 // 120 - 64, Ex = 120 }; // Values of 1/2 in the right position to be compared with the fraction from // C * kx, 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx // (these values are aligned with the high 64 bits of the fraction) UINT64 half64[] = { 0x0000000000000004ULL, // half / 2^64 = 4 0x0000000000000020ULL, // half / 2^64 = 20 0x0000000000000100ULL, // half / 2^64 = 100 0x0000000000001000ULL, // half / 2^64 = 1000 0x0000000000008000ULL, // half / 2^64 = 8000 0x0000000000040000ULL, // half / 2^64 = 40000 0x0000000000400000ULL, // half / 2^64 = 400000 0x0000000002000000ULL, // half / 2^64 = 2000000 0x0000000010000000ULL, // half / 2^64 = 10000000 0x0000000100000000ULL, // half / 2^64 = 100000000 0x0000000800000000ULL, // half / 2^64 = 800000000 0x0000004000000000ULL, // half / 2^64 = 4000000000 0x0000040000000000ULL, // half / 2^64 = 40000000000 0x0000200000000000ULL, // half / 2^64 = 200000000000 0x0001000000000000ULL, // half / 2^64 = 1000000000000 0x0010000000000000ULL, // half / 2^64 = 10000000000000 0x0080000000000000ULL // half / 2^64 = 80000000000000 }; // Values of mask in the right position to obtain the high Ex - 64 bits // of the fraction from C * kx, 1 <= x <= 17; the fraction consists of // the low Ex bits in C * kx UINT64 mask64[] = { 0x0000000000000007ULL, // mask / 2^64 0x000000000000003fULL, // mask / 2^64 0x00000000000001ffULL, // mask / 2^64 0x0000000000001fffULL, // mask / 2^64 0x000000000000ffffULL, // mask / 2^64 0x000000000007ffffULL, // mask / 2^64 0x00000000007fffffULL, // mask / 2^64 0x0000000003ffffffULL, // mask / 2^64 0x000000001fffffffULL, // mask / 2^64 0x00000001ffffffffULL, // mask / 2^64 0x0000000fffffffffULL, // mask / 2^64 0x0000007fffffffffULL, // mask / 2^64 0x000007ffffffffffULL, // mask / 2^64 0x00003fffffffffffULL, // mask / 2^64 0x0001ffffffffffffULL, // mask / 2^64 0x001fffffffffffffULL, // mask / 2^64 0x00ffffffffffffffULL // mask / 2^64 }; // Values of 10^(-x) trancated to Ex bits beyond the binary point, and // in the right position to be compared with the fraction from C * kx, // 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx // (these values are aligned with the low 64 bits of the fraction) UINT64 ten2mxtrunc64[] = { 0xccccccccccccccccULL, // (ten2mx >> 64) = cccccccccccccccc 0xa3d70a3d70a3d70aULL, // (ten2mx >> 64) = a3d70a3d70a3d70a 0x83126e978d4fdf3bULL, // (ten2mx >> 64) = 83126e978d4fdf3b 0xd1b71758e219652bULL, // (ten2mx >> 64) = d1b71758e219652b 0xa7c5ac471b478423ULL, // (ten2mx >> 64) = a7c5ac471b478423 0x8637bd05af6c69b5ULL, // (ten2mx >> 64) = 8637bd05af6c69b5 0xd6bf94d5e57a42bcULL, // (ten2mx >> 64) = d6bf94d5e57a42bc 0xabcc77118461cefcULL, // (ten2mx >> 64) = abcc77118461cefc 0x89705f4136b4a597ULL, // (ten2mx >> 64) = 89705f4136b4a597 0xdbe6fecebdedd5beULL, // (ten2mx >> 64) = dbe6fecebdedd5be 0xafebff0bcb24aafeULL, // (ten2mx >> 64) = afebff0bcb24aafe 0x8cbccc096f5088cbULL, // (ten2mx >> 64) = 8cbccc096f5088cb 0xe12e13424bb40e13ULL, // (ten2mx >> 64) = e12e13424bb40e13 0xb424dc35095cd80fULL, // (ten2mx >> 64) = b424dc35095cd80f 0x901d7cf73ab0acd9ULL, // (ten2mx >> 64) = 901d7cf73ab0acd9 0xe69594bec44de15bULL, // (ten2mx >> 64) = e69594bec44de15b 0xb877aa3236a4b449ULL // (ten2mx >> 64) = b877aa3236a4b449 }; // Note: 128-bit tables generated with ten2mx128.ma; output in ten2mx128.out // The order of the 64-bit components is L, H // Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37 UINT128 Kx128[] = { {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}}, // 10^-1 ~= cccccccccccccccccccccccccccccccd * 2^-131 {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}}, // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a4 * 2^-134 {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}}, // 10^-3 ~= 83126e978d4fdf3b645a1cac083126ea * 2^-137 {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}}, // 10^-4 ~= d1b71758e219652bd3c36113404ea4a9 * 2^-141 {{0x0fcf80dc33721d54ULL, 0xa7c5ac471b478423ULL}}, // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d54 * 2^-144 {{0xa63f9a49c2c1b110ULL, 0x8637bd05af6c69b5ULL}}, // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b110 * 2^-147 {{0x3d32907604691b4dULL, 0xd6bf94d5e57a42bcULL}}, // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4d * 2^-151 {{0xfdc20d2b36ba7c3eULL, 0xabcc77118461cefcULL}}, // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3e * 2^-154 {{0x31680a88f8953031ULL, 0x89705f4136b4a597ULL}}, // 10^-9 ~= 89705f4136b4a59731680a88f8953031 * 2^-157 {{0xb573440e5a884d1cULL, 0xdbe6fecebdedd5beULL}}, // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1c * 2^-161 {{0xf78f69a51539d749ULL, 0xafebff0bcb24aafeULL}}, // 10^-11 ~= afebff0bcb24aafef78f69a51539d749 * 2^-164 {{0xf93f87b7442e45d4ULL, 0x8cbccc096f5088cbULL}}, // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d4 * 2^-167 {{0x2865a5f206b06fbaULL, 0xe12e13424bb40e13ULL}}, // 10^-13 ~= e12e13424bb40e132865a5f206b06fba * 2^-171 {{0x538484c19ef38c95ULL, 0xb424dc35095cd80fULL}}, // 10^-14 ~= b424dc35095cd80f538484c19ef38c95 * 2^-174 {{0x0f9d37014bf60a11ULL, 0x901d7cf73ab0acd9ULL}}, // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a11 * 2^-177 {{0x4c2ebe687989a9b4ULL, 0xe69594bec44de15bULL}}, // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b4 * 2^-181 {{0x09befeb9fad487c3ULL, 0xb877aa3236a4b449ULL}}, // 10^-17 ~= b877aa3236a4b44909befeb9fad487c3 * 2^-184 {{0x3aff322e62439fd0ULL, 0x9392ee8e921d5d07ULL}}, // 10^-18 ~= 9392ee8e921d5d073aff322e62439fd0 * 2^-187 {{0x2b31e9e3d06c32e6ULL, 0xec1e4a7db69561a5ULL}}, // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e6 * 2^-191 {{0x88f4bb1ca6bcf585ULL, 0xbce5086492111aeaULL}}, // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf585 * 2^-194 {{0xd3f6fc16ebca5e04ULL, 0x971da05074da7beeULL}}, // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e04 * 2^-197 {{0x5324c68b12dd6339ULL, 0xf1c90080baf72cb1ULL}}, // 10^-22 ~= f1c90080baf72cb15324c68b12dd6339 * 2^-201 {{0x75b7053c0f178294ULL, 0xc16d9a0095928a27ULL}}, // 10^-23 ~= c16d9a0095928a2775b7053c0f178294 * 2^-204 {{0xc4926a9672793543ULL, 0x9abe14cd44753b52ULL}}, // 10^-24 ~= 9abe14cd44753b52c4926a9672793543 * 2^-207 {{0x3a83ddbd83f52205ULL, 0xf79687aed3eec551ULL}}, // 10^-25 ~= f79687aed3eec5513a83ddbd83f52205 * 2^-211 {{0x95364afe032a819eULL, 0xc612062576589ddaULL}}, // 10^-26 ~= c612062576589dda95364afe032a819e * 2^-214 {{0x775ea264cf55347eULL, 0x9e74d1b791e07e48ULL}}, // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347e * 2^-217 {{0x8bca9d6e188853fdULL, 0xfd87b5f28300ca0dULL}}, // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fd * 2^-221 {{0x096ee45813a04331ULL, 0xcad2f7f5359a3b3eULL}}, // 10^-29 ~= cad2f7f5359a3b3e096ee45813a04331 * 2^-224 {{0xa1258379a94d028eULL, 0xa2425ff75e14fc31ULL}}, // 10^-30 ~= a2425ff75e14fc31a1258379a94d028e * 2^-227 {{0x80eacf948770ced8ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced8 * 2^-230 {{0x67de18eda5814af3ULL, 0xcfb11ead453994baULL}}, // 10^-32 ~= cfb11ead453994ba67de18eda5814af3 * 2^-234 {{0xecb1ad8aeacdd58fULL, 0xa6274bbdd0fadd61ULL}}, // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58f * 2^-237 {{0xbd5af13bef0b113fULL, 0x84ec3c97da624ab4ULL}}, // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113f * 2^-240 {{0x955e4ec64b44e865ULL, 0xd4ad2dbfc3d07787ULL}}, // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e865 * 2^-244 {{0xdde50bd1d5d0b9eaULL, 0xaa242499697392d2ULL}}, // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9ea * 2^-247 {{0x7e50d64177da2e55ULL, 0x881cea14545c7575ULL}} // 10^-37 ~= 881cea14545c75757e50d64177da2e55 * 2^-250 }; // Ex-128 from 10^(-x) ~= Kx*2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37 unsigned int Ex128m128[] = { 3, // 131 - 128, Ex = 131 6, // 134 - 128, Ex = 134 9, // 137 - 128, Ex = 137 13, // 141 - 128, Ex = 141 16, // 144 - 128, Ex = 144 19, // 147 - 128, Ex = 147 23, // 151 - 128, Ex = 151 26, // 154 - 128, Ex = 154 29, // 157 - 128, Ex = 157 33, // 161 - 128, Ex = 161 36, // 164 - 128, Ex = 164 39, // 167 - 128, Ex = 167 43, // 171 - 128, Ex = 171 46, // 174 - 128, Ex = 174 49, // 177 - 128, Ex = 177 53, // 181 - 128, Ex = 181 56, // 184 - 128, Ex = 184 59, // 187 - 128, Ex = 187 63, // 191 - 128, Ex = 191 2, // 194 - 192, Ex = 194 5, // 197 - 192, Ex = 197 9, // 201 - 192, Ex = 201 12, // 204 - 192, Ex = 204 15, // 207 - 192, Ex = 207 19, // 211 - 192, Ex = 211 22, // 214 - 192, Ex = 214 25, // 217 - 192, Ex = 217 29, // 221 - 192, Ex = 221 32, // 224 - 192, Ex = 224 35, // 227 - 192, Ex = 227 38, // 230 - 192, Ex = 230 42, // 234 - 192, Ex = 234 45, // 237 - 192, Ex = 237 48, // 240 - 192, Ex = 240 52, // 244 - 192, Ex = 244 55, // 247 - 192, Ex = 247 58 // 250 - 192, Ex = 250 }; // Values of 1/2 in the right position to be compared with the fraction from // C * kx, 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx // (these values are aligned with the high 128 bits of the fraction) UINT64 half128[] = { 0x0000000000000004ULL, // half / 2^128 = 4 0x0000000000000020ULL, // half / 2^128 = 20 0x0000000000000100ULL, // half / 2^128 = 100 0x0000000000001000ULL, // half / 2^128 = 1000 0x0000000000008000ULL, // half / 2^128 = 8000 0x0000000000040000ULL, // half / 2^128 = 40000 0x0000000000400000ULL, // half / 2^128 = 400000 0x0000000002000000ULL, // half / 2^128 = 2000000 0x0000000010000000ULL, // half / 2^128 = 10000000 0x0000000100000000ULL, // half / 2^128 = 100000000 0x0000000800000000ULL, // half / 2^128 = 800000000 0x0000004000000000ULL, // half / 2^128 = 4000000000 0x0000040000000000ULL, // half / 2^128 = 40000000000 0x0000200000000000ULL, // half / 2^128 = 200000000000 0x0001000000000000ULL, // half / 2^128 = 1000000000000 0x0010000000000000ULL, // half / 2^128 = 10000000000000 0x0080000000000000ULL, // half / 2^128 = 80000000000000 0x0400000000000000ULL, // half / 2^128 = 400000000000000 0x4000000000000000ULL, // half / 2^128 = 4000000000000000 0x0000000000000002ULL, // half / 2^192 = 2 0x0000000000000010ULL, // half / 2^192 = 10 0x0000000000000100ULL, // half / 2^192 = 100 0x0000000000000800ULL, // half / 2^192 = 800 0x0000000000004000ULL, // half / 2^192 = 4000 0x0000000000040000ULL, // half / 2^192 = 40000 0x0000000000200000ULL, // half / 2^192 = 200000 0x0000000001000000ULL, // half / 2^192 = 1000000 0x0000000010000000ULL, // half / 2^192 = 10000000 0x0000000080000000ULL, // half / 2^192 = 80000000 0x0000000400000000ULL, // half / 2^192 = 400000000 0x0000002000000000ULL, // half / 2^192 = 2000000000 0x0000020000000000ULL, // half / 2^192 = 20000000000 0x0000100000000000ULL, // half / 2^192 = 100000000000 0x0000800000000000ULL, // half / 2^192 = 800000000000 0x0008000000000000ULL, // half / 2^192 = 8000000000000 0x0040000000000000ULL, // half / 2^192 = 40000000000000 0x0200000000000000ULL // half / 2^192 = 200000000000000 }; // Values of mask in the right position to obtain the high Ex - 128 or Ex - 192 // bits of the fraction from C * kx, 1 <= x <= 37; the fraction consists of // the low Ex bits in C * kx UINT64 mask128[] = { 0x0000000000000007ULL, // mask / 2^128 0x000000000000003fULL, // mask / 2^128 0x00000000000001ffULL, // mask / 2^128 0x0000000000001fffULL, // mask / 2^128 0x000000000000ffffULL, // mask / 2^128 0x000000000007ffffULL, // mask / 2^128 0x00000000007fffffULL, // mask / 2^128 0x0000000003ffffffULL, // mask / 2^128 0x000000001fffffffULL, // mask / 2^128 0x00000001ffffffffULL, // mask / 2^128 0x0000000fffffffffULL, // mask / 2^128 0x0000007fffffffffULL, // mask / 2^128 0x000007ffffffffffULL, // mask / 2^128 0x00003fffffffffffULL, // mask / 2^128 0x0001ffffffffffffULL, // mask / 2^128 0x001fffffffffffffULL, // mask / 2^128 0x00ffffffffffffffULL, // mask / 2^128 0x07ffffffffffffffULL, // mask / 2^128 0x7fffffffffffffffULL, // mask / 2^128 0x0000000000000003ULL, // mask / 2^192 0x000000000000001fULL, // mask / 2^192 0x00000000000001ffULL, // mask / 2^192 0x0000000000000fffULL, // mask / 2^192 0x0000000000007fffULL, // mask / 2^192 0x000000000007ffffULL, // mask / 2^192 0x00000000003fffffULL, // mask / 2^192 0x0000000001ffffffULL, // mask / 2^192 0x000000001fffffffULL, // mask / 2^192 0x00000000ffffffffULL, // mask / 2^192 0x00000007ffffffffULL, // mask / 2^192 0x0000003fffffffffULL, // mask / 2^192 0x000003ffffffffffULL, // mask / 2^192 0x00001fffffffffffULL, // mask / 2^192 0x0000ffffffffffffULL, // mask / 2^192 0x000fffffffffffffULL, // mask / 2^192 0x007fffffffffffffULL, // mask / 2^192 0x03ffffffffffffffULL // mask / 2^192 }; // Values of 10^(-x) trancated to Ex bits beyond the binary point, and // in the right position to be compared with the fraction from C * kx, // 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx // (these values are aligned with the low 128 bits of the fraction) UINT128 ten2mxtrunc128[] = { {{0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // (ten2mx >> 128) = cccccccccccccccccccccccccccccccc {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // (ten2mx >> 128) = a3d70a3d70a3d70a3d70a3d70a3d70a3 {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // (ten2mx >> 128) = 83126e978d4fdf3b645a1cac083126e9 {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}}, // (ten2mx >> 128) = d1b71758e219652bd3c36113404ea4a8 {{0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}}, // (ten2mx >> 128) = a7c5ac471b4784230fcf80dc33721d53 {{0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}}, // (ten2mx >> 128) = 8637bd05af6c69b5a63f9a49c2c1b10f {{0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}}, // (ten2mx >> 128) = d6bf94d5e57a42bc3d32907604691b4c {{0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}}, // (ten2mx >> 128) = abcc77118461cefcfdc20d2b36ba7c3d {{0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}}, // (ten2mx >> 128) = 89705f4136b4a59731680a88f8953030 {{0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}}, // (ten2mx >> 128) = dbe6fecebdedd5beb573440e5a884d1b {{0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}}, // (ten2mx >> 128) = afebff0bcb24aafef78f69a51539d748 {{0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}}, // (ten2mx >> 128) = 8cbccc096f5088cbf93f87b7442e45d3 {{0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}}, // (ten2mx >> 128) = e12e13424bb40e132865a5f206b06fb9 {{0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}}, // (ten2mx >> 128) = b424dc35095cd80f538484c19ef38c94 {{0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}}, // (ten2mx >> 128) = 901d7cf73ab0acd90f9d37014bf60a10 {{0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}}, // (ten2mx >> 128) = e69594bec44de15b4c2ebe687989a9b3 {{0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}}, // (ten2mx >> 128) = b877aa3236a4b44909befeb9fad487c2 {{0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}}, // (ten2mx >> 128) = 9392ee8e921d5d073aff322e62439fcf {{0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}}, // (ten2mx >> 128) = ec1e4a7db69561a52b31e9e3d06c32e5 {{0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}}, // (ten2mx >> 128) = bce5086492111aea88f4bb1ca6bcf584 {{0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}}, // (ten2mx >> 128) = 971da05074da7beed3f6fc16ebca5e03 {{0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}}, // (ten2mx >> 128) = f1c90080baf72cb15324c68b12dd6338 {{0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}, // (ten2mx >> 128) = c16d9a0095928a2775b7053c0f178293 {{0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // (ten2mx >> 128) = 9abe14cd44753b52c4926a9672793542 {{0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // (ten2mx >> 128) = f79687aed3eec5513a83ddbd83f52204 {{0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // (ten2mx >> 128) = c612062576589dda95364afe032a819d {{0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // (ten2mx >> 128) = 9e74d1b791e07e48775ea264cf55347d {{0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // (ten2mx >> 128) = fd87b5f28300ca0d8bca9d6e188853fc {{0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // (ten2mx >> 128) = cad2f7f5359a3b3e096ee45813a04330 {{0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // (ten2mx >> 128) = a2425ff75e14fc31a1258379a94d028d {{0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // (ten2mx >> 128) = 81ceb32c4b43fcf480eacf948770ced7 {{0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // (ten2mx >> 128) = cfb11ead453994ba67de18eda5814af2 {{0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // (ten2mx >> 128) = a6274bbdd0fadd61ecb1ad8aeacdd58e {{0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}, // (ten2mx >> 128) = 84ec3c97da624ab4bd5af13bef0b113e {{0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}}, // (ten2mx >> 128) = d4ad2dbfc3d07787955e4ec64b44e864 {{0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}}, // (ten2mx >> 128) = aa242499697392d2dde50bd1d5d0b9e9 {{0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}} // (ten2mx >> 128) = 881cea14545c75757e50d64177da2e54 }; UINT192 Kx192[] = { {{0xcccccccccccccccdULL, 0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // 10^-1 ~= cccccccccccccccccccccccccccccccccccccccccccccccd * 2^-195 {{0xd70a3d70a3d70a3eULL, 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3e * 2^-198 {{0x78d4fdf3b645a1cbULL, 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // 10^-3 ~= 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1cb * 2^-201 {{0xc154c985f06f6945ULL, 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}}, // 10^-4 ~= d1b71758e219652bd3c36113404ea4a8c154c985f06f6945 * 2^-205 {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}}, // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592104 * 2^-208 {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}}, // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a6a * 2^-211 {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}}, // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3dc * 2^-215 {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}}, // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697d * 2^-218 {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}}, // 10^-9 ~= 89705f4136b4a59731680a88f8953030fdd7645e011abaca * 2^-221 {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}}, // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912add * 2^-225 {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}}, // 10^-11 ~= afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b1 * 2^-228 {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}}, // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08e * 2^-231 {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}}, // 10^-13 ~= e12e13424bb40e132865a5f206b06fb988f4c3923bf900e3 * 2^-235 {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}}, // 10^-14 ~= b424dc35095cd80f538484c19ef38c946d909c74fcc733e9 * 2^-238 {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}}, // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f654 * 2^-241 {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}}, // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b3bf716c1add27f086 * 2^-245 {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}}, // 10^-17 ~= b877aa3236a4b44909befeb9fad487c2ff8df0157db98d38 * 2^-248 {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}}, // 10^-18 ~= 9392ee8e921d5d073aff322e62439fcf32d7f344649470fa * 2^-251 {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}}, // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f5 * 2^-255 {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}}, // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf584181ea8059f76532b * 2^-258 {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}}, // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ef * 2^-261 {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}}, // 10^-22 ~= f1c90080baf72cb15324c68b12dd633870cb148213caa7e5 * 2^-265 {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}, // 10^-23 ~= c16d9a0095928a2775b7053c0f1782938d6f439b43088651 * 2^-268 {{0xd78c3615cf3a050dULL, 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^-24 ~= 9abe14cd44753b52c4926a9672793542d78c3615cf3a050d * 2^-271 {{0x8c1389bc7ec33b48ULL, 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^-25 ~= f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b48 * 2^-275 {{0x3cdc6e306568fc3aULL, 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^-26 ~= c612062576589dda95364afe032a819d3cdc6e306568fc3a * 2^-278 {{0xca49f1c05120c9c8ULL, 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c8 * 2^-281 {{0x76dcb60081ce0fa6ULL, 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa6 * 2^-285 {{0x5f16f80067d80c85ULL, 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^-29 ~= cad2f7f5359a3b3e096ee45813a043305f16f80067d80c85 * 2^-288 {{0x18df2ccd1fe00a04ULL, 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^-30 ~= a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a04 * 2^-291 {{0x4718f0a419800803ULL, 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced74718f0a419800803 * 2^-294 {{0x0b5b1aa028ccd99fULL, 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^-32 ~= cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99f * 2^-298 {{0x6f7c154ced70ae19ULL, 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae19 * 2^-301 {{0xbf967770bdf3be7aULL, 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}, // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be7a * 2^-304 {{0x65bd8be79652ca5dULL, 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}}, // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5d * 2^-308 {{0xeafe098611dbd517ULL, 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}}, // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd517 * 2^-311 {{0xbbfe6e04db164413ULL, 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}, // 10^-37 ~= 881cea14545c75757e50d64177da2e54bbfe6e04db164413 * 2^-314 {{0x2cca49a15e8a0684ULL, 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}}, // 10^-38 ~= d9c7dced53c7225596e7bd358c904a212cca49a15e8a0684 * 2^-318 {{0x8a3b6e1ab2080537ULL, 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}}, // 10^-39 ~= ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080537 * 2^-321 {{0x3b62be7bc1a0042cULL, 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}}, // 10^-40 ~= 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042c * 2^-324 {{0x5f0463f935ccd379ULL, 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}}, // 10^-41 ~= df01e85f912e37a36b6c46dec52f66885f0463f935ccd379 * 2^-328 {{0x7f36b660f7d70f94ULL, 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}}, // 10^-42 ~= b267ed1940f1c61c55f038b237591ed37f36b660f7d70f94 * 2^-331 {{0xcc2bc51a5fdf3faaULL, 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}}, // 10^-43 ~= 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3faa * 2^-334 {{0xe046082a32fecc42ULL, 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}}, // 10^-44 ~= e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc42 * 2^-338 {{0x4d04d354f598a368ULL, 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}}, // 10^-45 ~= b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a368 * 2^-341 {{0x3d9d75dd9146e920ULL, 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}}, // 10^-46 ~= 9226712162ab070dcab3961304ca70e83d9d75dd9146e920 * 2^-344 {{0xc8fbefc8e8717500ULL, 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}}, // 10^-47 ~= e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e8717500 * 2^-348 {{0x3a63263a538df734ULL, 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}}, // 10^-48 ~= bb127c53b17ec1595560c018580d5d523a63263a538df734 * 2^-351 {{0x2eb5b82ea93e5f5dULL, 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}}, // 10^-49 ~= 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5d * 2^-354 {{0x4abc59e441fd6561ULL, 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}}, // 10^-50 ~= ef73d256a5c0f77c963e66858f6d44404abc59e441fd6561 * 2^-358 {{0x6efd14b69b311de7ULL, 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}}, // 10^-51 ~= bf8fdb78849a5f96de98520472bdd0336efd14b69b311de7 * 2^-361 {{0x259743c548f417ecULL, 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}}, // 10^-52 ~= 993fe2c6d07b7fabe546a8038efe4029259743c548f417ec * 2^-364 {{0x3c25393ba7ecf313ULL, 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}}, // 10^-53 ~= f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf313 * 2^-368 {{0x96842dc95323f5a9ULL, 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}}, // 10^-54 ~= c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a9 * 2^-371 {{0xab9cf16ddc1cc487ULL, 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}}, // 10^-55 ~= 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc487 * 2^-374 {{0xac2e4f162cfad40bULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}} // 10^-56 ~= fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40b * 2^-378 }; unsigned int Ex192m192[] = { 3, // 195 - 192, Ex = 195 6, // 198 - 192, Ex = 198 9, // 201 - 192, Ex = 201 13, // 205 - 192, Ex = 205 16, // 208 - 192, Ex = 208 19, // 211 - 192, Ex = 211 23, // 215 - 192, Ex = 215 26, // 218 - 192, Ex = 218 29, // 221 - 192, Ex = 221 33, // 225 - 192, Ex = 225 36, // 228 - 192, Ex = 228 39, // 231 - 192, Ex = 231 43, // 235 - 192, Ex = 235 46, // 238 - 192, Ex = 238 49, // 241 - 192, Ex = 241 53, // 245 - 192, Ex = 245 56, // 248 - 192, Ex = 248 59, // 251 - 192, Ex = 251 63, // 255 - 192, Ex = 255 2, // 258 - 256, Ex = 258 5, // 261 - 256, Ex = 261 9, // 265 - 256, Ex = 265 12, // 268 - 256, Ex = 268 15, // 271 - 256, Ex = 271 19, // 275 - 256, Ex = 275 22, // 278 - 256, Ex = 278 25, // 281 - 256, Ex = 281 29, // 285 - 256, Ex = 285 32, // 288 - 256, Ex = 288 35, // 291 - 256, Ex = 291 38, // 294 - 256, Ex = 294 42, // 298 - 256, Ex = 298 45, // 301 - 256, Ex = 301 48, // 304 - 256, Ex = 304 52, // 308 - 256, Ex = 308 55, // 311 - 256, Ex = 311 58, // 314 - 256, Ex = 314 62, // 318 - 256, Ex = 318 1, // 321 - 320, Ex = 321 4, // 324 - 320, Ex = 324 8, // 328 - 320, Ex = 328 11, // 331 - 320, Ex = 331 14, // 334 - 320, Ex = 334 18, // 338 - 320, Ex = 338 21, // 341 - 320, Ex = 341 24, // 344 - 320, Ex = 344 28, // 348 - 320, Ex = 348 31, // 351 - 320, Ex = 351 34, // 354 - 320, Ex = 354 38, // 358 - 320, Ex = 358 41, // 361 - 320, Ex = 361 44, // 364 - 320, Ex = 364 48, // 368 - 320, Ex = 368 51, // 371 - 320, Ex = 371 54, // 374 - 320, Ex = 374 58 // 378 - 320, Ex = 378 }; UINT64 half192[] = { 0x0000000000000004ULL, // half / 2^192 = 4 0x0000000000000020ULL, // half / 2^192 = 20 0x0000000000000100ULL, // half / 2^192 = 100 0x0000000000001000ULL, // half / 2^192 = 1000 0x0000000000008000ULL, // half / 2^192 = 8000 0x0000000000040000ULL, // half / 2^192 = 40000 0x0000000000400000ULL, // half / 2^192 = 400000 0x0000000002000000ULL, // half / 2^192 = 2000000 0x0000000010000000ULL, // half / 2^192 = 10000000 0x0000000100000000ULL, // half / 2^192 = 100000000 0x0000000800000000ULL, // half / 2^192 = 800000000 0x0000004000000000ULL, // half / 2^192 = 4000000000 0x0000040000000000ULL, // half / 2^192 = 40000000000 0x0000200000000000ULL, // half / 2^192 = 200000000000 0x0001000000000000ULL, // half / 2^192 = 1000000000000 0x0010000000000000ULL, // half / 2^192 = 10000000000000 0x0080000000000000ULL, // half / 2^192 = 80000000000000 0x0400000000000000ULL, // half / 2^192 = 400000000000000 0x4000000000000000ULL, // half / 2^192 = 4000000000000000 0x0000000000000002ULL, // half / 2^256 = 2 0x0000000000000010ULL, // half / 2^256 = 10 0x0000000000000100ULL, // half / 2^256 = 100 0x0000000000000800ULL, // half / 2^256 = 800 0x0000000000004000ULL, // half / 2^256 = 4000 0x0000000000040000ULL, // half / 2^256 = 40000 0x0000000000200000ULL, // half / 2^256 = 200000 0x0000000001000000ULL, // half / 2^256 = 1000000 0x0000000010000000ULL, // half / 2^256 = 10000000 0x0000000080000000ULL, // half / 2^256 = 80000000 0x0000000400000000ULL, // half / 2^256 = 400000000 0x0000002000000000ULL, // half / 2^256 = 2000000000 0x0000020000000000ULL, // half / 2^256 = 20000000000 0x0000100000000000ULL, // half / 2^256 = 100000000000 0x0000800000000000ULL, // half / 2^256 = 800000000000 0x0008000000000000ULL, // half / 2^256 = 8000000000000 0x0040000000000000ULL, // half / 2^256 = 40000000000000 0x0200000000000000ULL, // half / 2^256 = 200000000000000 0x2000000000000000ULL, // half / 2^256 = 2000000000000000 0x0000000000000001ULL, // half / 2^320 = 1 0x0000000000000008ULL, // half / 2^320 = 8 0x0000000000000080ULL, // half / 2^320 = 80 0x0000000000000400ULL, // half / 2^320 = 400 0x0000000000002000ULL, // half / 2^320 = 2000 0x0000000000020000ULL, // half / 2^320 = 20000 0x0000000000100000ULL, // half / 2^320 = 100000 0x0000000000800000ULL, // half / 2^320 = 800000 0x0000000008000000ULL, // half / 2^320 = 8000000 0x0000000040000000ULL, // half / 2^320 = 40000000 0x0000000200000000ULL, // half / 2^320 = 200000000 0x0000002000000000ULL, // half / 2^320 = 2000000000 0x0000010000000000ULL, // half / 2^320 = 10000000000 0x0000080000000000ULL, // half / 2^320 = 80000000000 0x0000800000000000ULL, // half / 2^320 = 800000000000 0x0004000000000000ULL, // half / 2^320 = 4000000000000 0x0020000000000000ULL, // half / 2^320 = 20000000000000 0x0200000000000000ULL // half / 2^320 = 200000000000000 }; UINT64 mask192[] = { 0x0000000000000007ULL, // mask / 2^192 0x000000000000003fULL, // mask / 2^192 0x00000000000001ffULL, // mask / 2^192 0x0000000000001fffULL, // mask / 2^192 0x000000000000ffffULL, // mask / 2^192 0x000000000007ffffULL, // mask / 2^192 0x00000000007fffffULL, // mask / 2^192 0x0000000003ffffffULL, // mask / 2^192 0x000000001fffffffULL, // mask / 2^192 0x00000001ffffffffULL, // mask / 2^192 0x0000000fffffffffULL, // mask / 2^192 0x0000007fffffffffULL, // mask / 2^192 0x000007ffffffffffULL, // mask / 2^192 0x00003fffffffffffULL, // mask / 2^192 0x0001ffffffffffffULL, // mask / 2^192 0x001fffffffffffffULL, // mask / 2^192 0x00ffffffffffffffULL, // mask / 2^192 0x07ffffffffffffffULL, // mask / 2^192 0x7fffffffffffffffULL, // mask / 2^192 0x0000000000000003ULL, // mask / 2^256 0x000000000000001fULL, // mask / 2^256 0x00000000000001ffULL, // mask / 2^256 0x0000000000000fffULL, // mask / 2^256 0x0000000000007fffULL, // mask / 2^256 0x000000000007ffffULL, // mask / 2^256 0x00000000003fffffULL, // mask / 2^256 0x0000000001ffffffULL, // mask / 2^256 0x000000001fffffffULL, // mask / 2^256 0x00000000ffffffffULL, // mask / 2^256 0x00000007ffffffffULL, // mask / 2^256 0x0000003fffffffffULL, // mask / 2^256 0x000003ffffffffffULL, // mask / 2^256 0x00001fffffffffffULL, // mask / 2^256 0x0000ffffffffffffULL, // mask / 2^256 0x000fffffffffffffULL, // mask / 2^256 0x007fffffffffffffULL, // mask / 2^256 0x03ffffffffffffffULL, // mask / 2^256 0x3fffffffffffffffULL, // mask / 2^256 0x0000000000000001ULL, // mask / 2^320 0x000000000000000fULL, // mask / 2^320 0x00000000000000ffULL, // mask / 2^320 0x00000000000007ffULL, // mask / 2^320 0x0000000000003fffULL, // mask / 2^320 0x000000000003ffffULL, // mask / 2^320 0x00000000001fffffULL, // mask / 2^320 0x0000000000ffffffULL, // mask / 2^320 0x000000000fffffffULL, // mask / 2^320 0x000000007fffffffULL, // mask / 2^320 0x00000003ffffffffULL, // mask / 2^320 0x0000003fffffffffULL, // mask / 2^320 0x000001ffffffffffULL, // mask / 2^320 0x00000fffffffffffULL, // mask / 2^320 0x0000ffffffffffffULL, // mask / 2^320 0x0007ffffffffffffULL, // mask / 2^320 0x003fffffffffffffULL, // mask / 2^320 0x03ffffffffffffffULL // mask / 2^320 }; UINT192 ten2mxtrunc192[] = { {{0xccccccccccccccccULL, 0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // (ten2mx >> 192) = cccccccccccccccccccccccccccccccccccccccccccccccc {{0xd70a3d70a3d70a3dULL, 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // (ten2mx >> 192) = a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d {{0x78d4fdf3b645a1caULL, 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // (ten2mx >> 192) = 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1ca {{0xc154c985f06f6944ULL, 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}}, // (ten2mx >> 192) = d1b71758e219652bd3c36113404ea4a8c154c985f06f6944 {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}}, // (ten2mx >> 192) = a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592103 {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}}, // (ten2mx >> 192) = 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a69 {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}}, // (ten2mx >> 192) = d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3db {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}}, // (ten2mx >> 192) = abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697c {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}}, // (ten2mx >> 192) = 89705f4136b4a59731680a88f8953030fdd7645e011abac9 {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}}, // (ten2mx >> 192) = dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912adc {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}}, // (ten2mx >> 192) = afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b0 {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}}, // (ten2mx >> 192) = 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08d {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}}, // (ten2mx >> 192) = e12e13424bb40e132865a5f206b06fb988f4c3923bf900e2 {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}}, // (ten2mx >> 192) = b424dc35095cd80f538484c19ef38c946d909c74fcc733e8 {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}}, // (ten2mx >> 192) = 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f653 {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}}, // (ten2mx >> 192) = e69594bec44de15b4c2ebe687989a9b3bf716c1add27f085 {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}}, // (ten2mx >> 192) = b877aa3236a4b44909befeb9fad487c2ff8df0157db98d37 {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}}, // (ten2mx >> 192) = 9392ee8e921d5d073aff322e62439fcf32d7f344649470f9 {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}}, // (ten2mx >> 192) = ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f4 {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}}, // (ten2mx >> 192) = bce5086492111aea88f4bb1ca6bcf584181ea8059f76532a {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}}, // (ten2mx >> 192) = 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ee {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}}, // (ten2mx >> 192) = f1c90080baf72cb15324c68b12dd633870cb148213caa7e4 {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}, // (ten2mx >> 192) = c16d9a0095928a2775b7053c0f1782938d6f439b43088650 {{0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // (ten2mx >> 192) = 9abe14cd44753b52c4926a9672793542d78c3615cf3a050c {{0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // (ten2mx >> 192) = f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b47 {{0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // (ten2mx >> 192) = c612062576589dda95364afe032a819d3cdc6e306568fc39 {{0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // (ten2mx >> 192) = 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c7 {{0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // (ten2mx >> 192) = fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa5 {{0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // (ten2mx >> 192) = cad2f7f5359a3b3e096ee45813a043305f16f80067d80c84 {{0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // (ten2mx >> 192) = a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a03 {{0x4718f0a419800802ULL, 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // (ten2mx >> 192) = 81ceb32c4b43fcf480eacf948770ced74718f0a419800802 {{0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // (ten2mx >> 192) = cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99e {{0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // (ten2mx >> 192) = a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae18 {{0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}, // (ten2mx >> 192) = 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be79 {{0x65bd8be79652ca5cULL, 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}}, // (ten2mx >> 192) = d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5c {{0xeafe098611dbd516ULL, 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}}, // (ten2mx >> 192) = aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd516 {{0xbbfe6e04db164412ULL, 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}, // (ten2mx >> 192) = 881cea14545c75757e50d64177da2e54bbfe6e04db164412 {{0x2cca49a15e8a0683ULL, 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}}, // (ten2mx >> 192) = d9c7dced53c7225596e7bd358c904a212cca49a15e8a0683 {{0x8a3b6e1ab2080536ULL, 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}}, // (ten2mx >> 192) = ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080536 {{0x3b62be7bc1a0042bULL, 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}}, // (ten2mx >> 192) = 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042b {{0x5f0463f935ccd378ULL, 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}}, // (ten2mx >> 192) = df01e85f912e37a36b6c46dec52f66885f0463f935ccd378 {{0x7f36b660f7d70f93ULL, 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}}, // (ten2mx >> 192) = b267ed1940f1c61c55f038b237591ed37f36b660f7d70f93 {{0xcc2bc51a5fdf3fa9ULL, 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}}, // (ten2mx >> 192) = 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3fa9 {{0xe046082a32fecc41ULL, 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}}, // (ten2mx >> 192) = e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc41 {{0x4d04d354f598a367ULL, 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}}, // (ten2mx >> 192) = b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a367 {{0x3d9d75dd9146e91fULL, 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}}, // (ten2mx >> 192) = 9226712162ab070dcab3961304ca70e83d9d75dd9146e91f {{0xc8fbefc8e87174ffULL, 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}}, // (ten2mx >> 192) = e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e87174ff {{0x3a63263a538df733ULL, 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}}, // (ten2mx >> 192) = bb127c53b17ec1595560c018580d5d523a63263a538df733 {{0x2eb5b82ea93e5f5cULL, 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}}, // (ten2mx >> 192) = 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5c {{0x4abc59e441fd6560ULL, 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}}, // (ten2mx >> 192) = ef73d256a5c0f77c963e66858f6d44404abc59e441fd6560 {{0x6efd14b69b311de6ULL, 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}}, // (ten2mx >> 192) = bf8fdb78849a5f96de98520472bdd0336efd14b69b311de6 {{0x259743c548f417ebULL, 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}}, // (ten2mx >> 192) = 993fe2c6d07b7fabe546a8038efe4029259743c548f417eb {{0x3c25393ba7ecf312ULL, 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}}, // (ten2mx >> 192) = f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf312 {{0x96842dc95323f5a8ULL, 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}}, // (ten2mx >> 192) = c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a8 {{0xab9cf16ddc1cc486ULL, 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}}, // (ten2mx >> 192) = 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc486 {{0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}} // (ten2mx >> 192) = fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40a }; UINT256 Kx256[] = { {{0xcccccccccccccccdULL, 0xccccccccccccccccULL, 0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // 10^-1 ~= cccccccccccccccc cccccccccccccccc // cccccccccccccccccccccccccccccccd * 2^-259 {{0x70a3d70a3d70a3d8ULL, 0xd70a3d70a3d70a3dULL, 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // 10^-2 ~= a3d70a3d70a3d70a 3d70a3d70a3d70a3 // d70a3d70a3d70a3d70a3d70a3d70a3d8 * 2^-262 {{0xc083126e978d4fe0ULL, 0x78d4fdf3b645a1caULL, 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // 10^-3 ~= 83126e978d4fdf3b 645a1cac083126e9 // 78d4fdf3b645a1cac083126e978d4fe0 * 2^-265 {{0x67381d7dbf487fccULL, 0xc154c985f06f6944ULL, 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}}, // 10^-4 ~= d1b71758e219652b d3c36113404ea4a8 // c154c985f06f694467381d7dbf487fcc * 2^-269 {{0x85c67dfe32a0663dULL, 0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}}, // 10^-5 ~= a7c5ac471b478423 fcf80dc33721d53 // cddd6e04c059210385c67dfe32a0663d * 2^-272 {{0x37d1fe64f54d1e97ULL, 0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}}, // 10^-6 ~= 8637bd05af6c69b5 a63f9a49c2c1b10f // d7e45803cd141a6937d1fe64f54d1e97 * 2^-275 {{0x8c8330a1887b6425ULL, 0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}}, // 10^-7 ~= d6bf94d5e57a42bc 3d32907604691b4c // 8ca08cd2e1b9c3db8c8330a1887b6425 * 2^-279 {{0x7068f3b46d2f8351ULL, 0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}}, // 10^-8 ~= abcc77118461cefc fdc20d2b36ba7c3d // 3d4d3d758161697c7068f3b46d2f8351 * 2^-282 {{0xf387295d242602a7ULL, 0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}}, // 10^-9 ~= 89705f4136b4a597 31680a88f8953030 // fdd7645e011abac9f387295d242602a7 * 2^-285 {{0xb8d8422ea03cd10bULL, 0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}}, // 10^-10 ~= dbe6fecebdedd5be b573440e5a884d1b // 2fbf06fcce912adcb8d8422ea03cd10b * 2^-289 {{0x93e034f219ca40d6ULL, 0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}}, // 10^-11 ~= afebff0bcb24aafe f78f69a51539d748 // f2ff38ca3eda88b093e034f219ca40d6 * 2^-292 {{0x4319c3f4e16e9a45ULL, 0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}}, // 10^-12 ~= 8cbccc096f5088cb f93f87b7442e45d3 // f598fa3b657ba08d4319c3f4e16e9a45 * 2^-295 {{0x04f606549be42a07ULL, 0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}}, // 10^-13 ~= e12e13424bb40e13 2865a5f206b06fb9 // 88f4c3923bf900e204f606549be42a07 * 2^-299 {{0x03f805107cb68806ULL, 0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}}, // 10^-14 ~= b424dc35095cd80f 538484c19ef38c94 // 6d909c74fcc733e803f805107cb68806 * 2^-302 {{0x3660040d3092066bULL, 0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}}, // 10^-15 ~= 901d7cf73ab0acd9 f9d37014bf60a10 // 57a6e390ca38f6533660040d3092066b * 2^-305 {{0x23ccd3484db670abULL, 0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}}, // 10^-16 ~= e69594bec44de15b 4c2ebe687989a9b3 // bf716c1add27f08523ccd3484db670ab * 2^-309 {{0x4fd70f6d0af85a23ULL, 0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}}, // 10^-17 ~= b877aa3236a4b449 9befeb9fad487c2 // ff8df0157db98d374fd70f6d0af85a23 * 2^-312 {{0x0cac0c573bf9e1b6ULL, 0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}}, // 10^-18 ~= 9392ee8e921d5d07 3aff322e62439fcf // 32d7f344649470f90cac0c573bf9e1b6 * 2^-315 {{0xe11346f1f98fcf89ULL, 0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}}, // 10^-19 ~= ec1e4a7db69561a5 2b31e9e3d06c32e5 // 1e2652070753e7f4e11346f1f98fcf89 * 2^-319 {{0x4da9058e613fd93aULL, 0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}}, // 10^-20 ~= bce5086492111aea 88f4bb1ca6bcf584 // 181ea8059f76532a4da9058e613fd93a * 2^-322 {{0xa48737a51a997a95ULL, 0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}}, // 10^-21 ~= 971da05074da7bee d3f6fc16ebca5e03 // 467eecd14c5ea8eea48737a51a997a95 * 2^-325 {{0x3a71f2a1c428c421ULL, 0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}}, // 10^-22 ~= f1c90080baf72cb1 5324c68b12dd6338 // 70cb148213caa7e43a71f2a1c428c421 * 2^-329 {{0x2ec18ee7d0209ce8ULL, 0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}, // 10^-23 ~= c16d9a0095928a27 75b7053c0f178293 // 8d6f439b430886502ec18ee7d0209ce8 * 2^-332 {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^-24 ~= 9abe14cd44753b52 c4926a9672793542 // d78c3615cf3a050cf23472530ce6e3ed * 2^-335 {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^-25 ~= f79687aed3eec551 3a83ddbd83f52204 // 8c1389bc7ec33b47e9ed83b814a49fe1 * 2^-339 {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^-26 ~= c612062576589dda 95364afe032a819d // 3cdc6e306568fc3987f1362cdd507fe7 * 2^-342 {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // 10^-27 ~= 9e74d1b791e07e48 775ea264cf55347d // ca49f1c05120c9c79ff42b5717739986 * 2^-345 {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^-28 ~= fd87b5f28300ca0d 8bca9d6e188853fc // 76dcb60081ce0fa5ccb9def1bf1f5c09 * 2^-349 {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^-29 ~= cad2f7f5359a3b3e 96ee45813a04330 // 5f16f80067d80c84a3c7e58e327f7cd4 * 2^-352 {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^-30 ~= a2425ff75e14fc31 a1258379a94d028d // 18df2ccd1fe00a03b6398471c1ff9710 * 2^-355 {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL, 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^-31 ~= 81ceb32c4b43fcf4 80eacf948770ced7 // 4718f0a419800802f82e038e34cc78da * 2^-358 {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^-32 ~= cfb11ead453994ba 67de18eda5814af2 // b5b1aa028ccd99e59e338e387ad8e29 * 2^-362 {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^-33 ~= a6274bbdd0fadd61 ecb1ad8aeacdd58e // 6f7c154ced70ae1847e8fa4f9fbe0b54 * 2^-365 {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}, // 10^-34 ~= 84ec3c97da624ab4 bd5af13bef0b113e // bf967770bdf3be79d320c83fb2fe6f76 * 2^-368 {{0x85014065eb30b257ULL, 0x65bd8be79652ca5cULL, 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}}, // 10^-35 ~= d4ad2dbfc3d07787 955e4ec64b44e864 // 65bd8be79652ca5c85014065eb30b257 * 2^-372 {{0xd0cdcd1e55c08eacULL, 0xeafe098611dbd516ULL, 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}}, // 10^-36 ~= aa242499697392d2 dde50bd1d5d0b9e9 // eafe098611dbd516d0cdcd1e55c08eac * 2^-375 {{0x40a4a418449a0bbdULL, 0xbbfe6e04db164412ULL, 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}, // 10^-37 ~= 881cea14545c7575 7e50d64177da2e54 // bbfe6e04db16441240a4a418449a0bbd * 2^-378 {{0x9aa1068d3a9012c8ULL, 0x2cca49a15e8a0683ULL, 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}}, // 10^-38 ~= d9c7dced53c72255 96e7bd358c904a21 // 2cca49a15e8a06839aa1068d3a9012c8 * 2^-382 {{0x154d9ed7620cdbd3ULL, 0x8a3b6e1ab2080536ULL, 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}}, // 10^-39 ~= ae397d8aa96c1b77 abec975e0a0d081a // 8a3b6e1ab2080536154d9ed7620cdbd3 * 2^-385 {{0x443e18ac4e70afdcULL, 0x3b62be7bc1a0042bULL, 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}}, // 10^-40 ~= 8b61313bbabce2c6 2323ac4b3b3da015 // 3b62be7bc1a0042b443e18ac4e70afdc * 2^-388 {{0x6d30277a171ab2f9ULL, 0x5f0463f935ccd378ULL, 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}}, // 10^-41 ~= df01e85f912e37a3 6b6c46dec52f6688 // 5f0463f935ccd3786d30277a171ab2f9 * 2^-392 {{0x8a8cec61ac155bfbULL, 0x7f36b660f7d70f93ULL, 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}}, // 10^-42 ~= b267ed1940f1c61c 55f038b237591ed3 // 7f36b660f7d70f938a8cec61ac155bfb * 2^-395 {{0x3ba3f04e23444996ULL, 0xcc2bc51a5fdf3fa9ULL, 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}}, // 10^-43 ~= 8eb98a7a9a5b04e3 77f3608e92adb242 // cc2bc51a5fdf3fa93ba3f04e23444996 * 2^-398 {{0xf9064d49d206dc22ULL, 0xe046082a32fecc41ULL, 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}}, // 10^-44 ~= e45c10c42a2b3b05 8cb89a7db77c506a // e046082a32fecc41f9064d49d206dc22 * 2^-402 {{0xfa6b7107db38b01bULL, 0x4d04d354f598a367ULL, 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}}, // 10^-45 ~= b6b00d69bb55c8d1 3d607b97c5fd0d22 // 4d04d354f598a367fa6b7107db38b01b * 2^-405 {{0xfb8927397c2d59b0ULL, 0x3d9d75dd9146e91fULL, 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}}, // 10^-46 ~= 9226712162ab070d cab3961304ca70e8 // 3d9d75dd9146e91ffb8927397c2d59b0 * 2^-408 {{0xf8db71f5937bc2b2ULL, 0xc8fbefc8e87174ffULL, 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}}, // 10^-47 ~= e9d71b689dde71af aab8f01e6e10b4a6 // c8fbefc8e87174fff8db71f5937bc2b2 * 2^-412 {{0x2d7c5b2adc630228ULL, 0x3a63263a538df733ULL, 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}}, // 10^-48 ~= bb127c53b17ec159 5560c018580d5d52 // 3a63263a538df7332d7c5b2adc630228 * 2^-415 {{0x24637c2249e8ce87ULL, 0x2eb5b82ea93e5f5cULL, 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}}, // 10^-49 ~= 95a8637627989aad dde7001379a44aa8 // 2eb5b82ea93e5f5c24637c2249e8ce87 * 2^-418 {{0x3a38c69d430e173eULL, 0x4abc59e441fd6560ULL, 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}}, // 10^-50 ~= ef73d256a5c0f77c 963e66858f6d4440 // 4abc59e441fd65603a38c69d430e173e * 2^-422 {{0x94fa387dcf3e78feULL, 0x6efd14b69b311de6ULL, 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}}, // 10^-51 ~= bf8fdb78849a5f96 de98520472bdd033 // 6efd14b69b311de694fa387dcf3e78fe * 2^-425 {{0xaa61c6cb0c31fa65ULL, 0x259743c548f417ebULL, 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}}, // 10^-52 ~= 993fe2c6d07b7fab e546a8038efe4029 // 259743c548f417ebaa61c6cb0c31fa65 * 2^-428 {{0xaa360ade79e990a2ULL, 0x3c25393ba7ecf312ULL, 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}}, // 10^-53 ~= f53304714d9265df d53dd99f4b3066a8 // 3c25393ba7ecf312aa360ade79e990a2 * 2^-432 {{0x882b3be52e5473b5ULL, 0x96842dc95323f5a8ULL, 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}}, // 10^-54 ~= c428d05aa4751e4c aa97e14c3c26b886 // 96842dc95323f5a8882b3be52e5473b5 * 2^-435 {{0xd355c98425105c91ULL, 0xab9cf16ddc1cc486ULL, 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}}, // 10^-55 ~= 9ced737bb6c4183d 55464dd69685606b // ab9cf16ddc1cc486d355c98425105c91 * 2^-438 {{0xebbc75a03b4d60e7ULL, 0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}, // 10^-56 ~= fb158592be068d2e eed6e2f0f0d56712 // ac2e4f162cfad40aebbc75a03b4d60e7 * 2^-442 {{0x8963914cfc3de71fULL, 0x568b727823fbdcd5ULL, 0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}}, // 10^-57 ~= c8de047564d20a8b f245825a5a445275 // 568b727823fbdcd58963914cfc3de71f * 2^-445 {{0xd44fa770c9cb1f4cULL, 0x453c5b934ffcb0aaULL, 0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}}, // 10^-58 ~= a0b19d2ab70e6ed6 5b6aceaeae9d0ec4 // 453c5b934ffcb0aad44fa770c9cb1f4c * 2^-448 {{0xdd0c85f3d4a27f70ULL, 0x37637c75d996f3bbULL, 0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}}, // 10^-59 ~= 808e17555f3ebf11 e2bbd88bbee40bd0 // 37637c75d996f3bbdd0c85f3d4a27f70 * 2^-451 {{0x61ada31fba9d98b3ULL, 0x256bfa5628f185f9ULL, 0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}}, // 10^-60 ~= cdb02555653131b6 3792f412cb06794d // 256bfa5628f185f961ada31fba9d98b3 * 2^-455 {{0xe7be1c196217ad5cULL, 0x51232eab53f46b2dULL, 0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}}, // 10^-61 ~= a48ceaaab75a8e2b 5fa8c3423c052dd7 // 51232eab53f46b2de7be1c196217ad5c * 2^-458 {{0x52fe7ce11b46244aULL, 0x40e8f222a99055beULL, 0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}}, // 10^-62 ~= 83a3eeeef9153e89 1953cf68300424ac // 40e8f222a99055be52fe7ce11b46244a * 2^-461 {{0x51972e34f8703a10ULL, 0x34a7e9d10f4d55fdULL, 0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}}, // 10^-63 ~= d29fe4b18e88640e 8eec7f0d19a03aad // 34a7e9d10f4d55fd51972e34f8703a10 * 2^-465 {{0x0e128b5d938cfb40ULL, 0x2a1fee40d90aab31ULL, 0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}}, // 10^-64 ~= a87fea27a539e9a5 3f2398d747b36224 // 2a1fee40d90aab310e128b5d938cfb40 * 2^-468 {{0x3e753c4adc70c900ULL, 0xbb4cbe9a473bbc27ULL, 0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}}, // 10^-65 ~= 86ccbb52ea94baea 98e947129fc2b4e9 // bb4cbe9a473bbc273e753c4adc70c900 * 2^-471 {{0x30bb93aafa4e0e66ULL, 0x9214642a0b92c6a5ULL, 0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}}, // 10^-66 ~= d7adf884aa879177 5b0ed81dcc6abb0f // 9214642a0b92c6a530bb93aafa4e0e66 * 2^-475 {{0xc0960fbbfb71a51fULL, 0xa8105021a2dbd21dULL, 0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}}, // 10^-67 ~= ac8b2d36eed2dac5 e272467e3d222f3f // a8105021a2dbd21dc0960fbbfb71a51f * 2^-478 {{0x66de72fcc927b74cULL, 0xb9a6a6814f1641b1ULL, 0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}}, // 10^-68 ~= 8a08f0f8bf0f156b 1b8e9ecb641b58ff // b9a6a6814f1641b166de72fcc927b74c * 2^-481 {{0xd7ca5194750c5879ULL, 0xf5d770cee4f0691bULL, 0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}}, // 10^-69 ~= dcdb1b2798182244 f8e431456cf88e65 // f5d770cee4f0691bd7ca5194750c5879 * 2^-485 {{0xdfd50e105da379faULL, 0x9179270bea59edafULL, 0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}}, // 10^-70 ~= b0af48ec79ace837 2d835a9df0c6d851 // 9179270bea59edafdfd50e105da379fa * 2^-488 {{0x19773e737e1c6195ULL, 0x0dfa85a321e18af3ULL, 0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}}, // 10^-71 ~= 8d590723948a535f 579c487e5a38ad0e // dfa85a321e18af319773e737e1c6195 * 2^-491 {{0xf58b971f302d68efULL, 0x165da29e9c9c1184ULL, 0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}}, // 10^-72 ~= e2280b6c20dd5232 25c6da63c38de1b0 // 165da29e9c9c1184f58b971f302d68ef * 2^-495 {{0xc46fac18f3578725ULL, 0x4517b54bb07cdad0ULL, 0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}}, // 10^-73 ~= b4ecd5f01a4aa828 1e38aeb6360b1af3 // 4517b54bb07cdad0c46fac18f3578725 * 2^-498 {{0x36bfbce0c2ac6c1eULL, 0x9dac910959fd7bdaULL, 0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}}, // 10^-74 ~= 90bd77f3483bb9b9 b1c6f22b5e6f48c2 // 9dac910959fd7bda36bfbce0c2ac6c1e * 2^-501 {{0x2465fb01377a4696ULL, 0x2f7a81a88ffbf95dULL, 0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}} // 10^-75 ~= e7958cb87392c2c2 b60b1d1230b20e04 // 2f7a81a88ffbf95d2465fb01377a4696 * 2^-505 }; unsigned int Ex256m256[] = { 3, // 259 - 256, Ex = 259 6, // 262 - 256, Ex = 262 9, // 265 - 256, Ex = 265 13, // 269 - 256, Ex = 269 16, // 272 - 256, Ex = 272 19, // 275 - 256, Ex = 275 23, // 279 - 256, Ex = 279 26, // 282 - 256, Ex = 282 29, // 285 - 256, Ex = 285 33, // 289 - 256, Ex = 289 36, // 292 - 256, Ex = 292 39, // 295 - 256, Ex = 295 43, // 299 - 256, Ex = 299 46, // 302 - 256, Ex = 302 49, // 305 - 256, Ex = 305 53, // 309 - 256, Ex = 309 56, // 312 - 256, Ex = 312 59, // 315 - 256, Ex = 315 63, // 319 - 256, Ex = 319 2, // 322 - 320, Ex = 322 5, // 325 - 320, Ex = 325 9, // 329 - 320, Ex = 329 12, // 332 - 320, Ex = 332 15, // 335 - 320, Ex = 335 19, // 339 - 320, Ex = 339 22, // 342 - 320, Ex = 342 25, // 345 - 320, Ex = 345 29, // 349 - 320, Ex = 349 32, // 352 - 320, Ex = 352 35, // 355 - 320, Ex = 355 38, // 358 - 320, Ex = 358 42, // 362 - 320, Ex = 362 45, // 365 - 320, Ex = 365 48, // 368 - 320, Ex = 368 52, // 372 - 320, Ex = 372 55, // 375 - 320, Ex = 375 58, // 378 - 320, Ex = 378 62, // 382 - 320, Ex = 382 1, // 385 - 384, Ex = 385 4, // 388 - 384, Ex = 388 8, // 392 - 384, Ex = 392 11, // 395 - 384, Ex = 395 14, // 398 - 384, Ex = 398 18, // 402 - 384, Ex = 402 21, // 405 - 384, Ex = 405 24, // 408 - 384, Ex = 408 28, // 412 - 384, Ex = 412 31, // 415 - 384, Ex = 415 34, // 418 - 384, Ex = 418 38, // 422 - 384, Ex = 422 41, // 425 - 384, Ex = 425 44, // 428 - 384, Ex = 428 48, // 432 - 384, Ex = 432 51, // 435 - 384, Ex = 435 54, // 438 - 384, Ex = 438 58, // 442 - 384, Ex = 442 61, // 445 - 384, Ex = 445 0, // 448 - 448, Ex = 448 3, // 451 - 448, Ex = 451 7, // 455 - 448, Ex = 455 10, // 458 - 448, Ex = 458 13, // 461 - 448, Ex = 461 17, // 465 - 448, Ex = 465 20, // 468 - 448, Ex = 468 23, // 471 - 448, Ex = 471 27, // 475 - 448, Ex = 475 30, // 478 - 448, Ex = 478 33, // 481 - 448, Ex = 481 37, // 485 - 448, Ex = 485 40, // 488 - 448, Ex = 488 43, // 491 - 448, Ex = 491 47, // 495 - 448, Ex = 495 50, // 498 - 448, Ex = 498 53, // 501 - 448, Ex = 501 57 // 505 - 448, Ex = 505 }; UINT64 half256[] = { 0x0000000000000004ULL, // half / 2^256 = 4 0x0000000000000020ULL, // half / 2^256 = 20 0x0000000000000100ULL, // half / 2^256 = 100 0x0000000000001000ULL, // half / 2^256 = 1000 0x0000000000008000ULL, // half / 2^256 = 8000 0x0000000000040000ULL, // half / 2^256 = 40000 0x0000000000400000ULL, // half / 2^256 = 400000 0x0000000002000000ULL, // half / 2^256 = 2000000 0x0000000010000000ULL, // half / 2^256 = 10000000 0x0000000100000000ULL, // half / 2^256 = 100000000 0x0000000800000000ULL, // half / 2^256 = 800000000 0x0000004000000000ULL, // half / 2^256 = 4000000000 0x0000040000000000ULL, // half / 2^256 = 40000000000 0x0000200000000000ULL, // half / 2^256 = 200000000000 0x0001000000000000ULL, // half / 2^256 = 1000000000000 0x0010000000000000ULL, // half / 2^256 = 10000000000000 0x0080000000000000ULL, // half / 2^256 = 80000000000000 0x0400000000000000ULL, // half / 2^256 = 400000000000000 0x4000000000000000ULL, // half / 2^256 = 4000000000000000 0x0000000000000002ULL, // half / 2^320 = 2 0x0000000000000010ULL, // half / 2^320 = 10 0x0000000000000100ULL, // half / 2^320 = 100 0x0000000000000800ULL, // half / 2^320 = 800 0x0000000000004000ULL, // half / 2^320 = 4000 0x0000000000040000ULL, // half / 2^320 = 40000 0x0000000000200000ULL, // half / 2^320 = 200000 0x0000000001000000ULL, // half / 2^320 = 1000000 0x0000000010000000ULL, // half / 2^320 = 10000000 0x0000000080000000ULL, // half / 2^320 = 80000000 0x0000000400000000ULL, // half / 2^320 = 400000000 0x0000002000000000ULL, // half / 2^320 = 2000000000 0x0000020000000000ULL, // half / 2^320 = 20000000000 0x0000100000000000ULL, // half / 2^320 = 100000000000 0x0000800000000000ULL, // half / 2^320 = 800000000000 0x0008000000000000ULL, // half / 2^320 = 8000000000000 0x0040000000000000ULL, // half / 2^320 = 40000000000000 0x0200000000000000ULL, // half / 2^320 = 200000000000000 0x2000000000000000ULL, // half / 2^320 = 2000000000000000 0x0000000000000001ULL, // half / 2^384 = 1 0x0000000000000008ULL, // half / 2^384 = 8 0x0000000000000080ULL, // half / 2^384 = 80 0x0000000000000400ULL, // half / 2^384 = 400 0x0000000000002000ULL, // half / 2^384 = 2000 0x0000000000020000ULL, // half / 2^384 = 20000 0x0000000000100000ULL, // half / 2^384 = 100000 0x0000000000800000ULL, // half / 2^384 = 800000 0x0000000008000000ULL, // half / 2^384 = 8000000 0x0000000040000000ULL, // half / 2^384 = 40000000 0x0000000200000000ULL, // half / 2^384 = 200000000 0x0000002000000000ULL, // half / 2^384 = 2000000000 0x0000010000000000ULL, // half / 2^384 = 10000000000 0x0000080000000000ULL, // half / 2^384 = 80000000000 0x0000800000000000ULL, // half / 2^384 = 800000000000 0x0004000000000000ULL, // half / 2^384 = 4000000000000 0x0020000000000000ULL, // half / 2^384 = 20000000000000 0x0200000000000000ULL, // half / 2^384 = 200000000000000 0x1000000000000000ULL, // half / 2^384 = 1000000000000000 0x8000000000000000ULL, // half / 2^384 = 8000000000000000 0x0000000000000004ULL, // half / 2^448 = 4 0x0000000000000040ULL, // half / 2^448 = 40 0x0000000000000200ULL, // half / 2^448 = 200 0x0000000000001000ULL, // half / 2^448 = 1000 0x0000000000010000ULL, // half / 2^448 = 10000 0x0000000000080000ULL, // half / 2^448 = 80000 0x0000000000400000ULL, // half / 2^448 = 400000 0x0000000004000000ULL, // half / 2^448 = 4000000 0x0000000020000000ULL, // half / 2^448 = 20000000 0x0000000100000000ULL, // half / 2^448 = 100000000 0x0000001000000000ULL, // half / 2^448 = 1000000000 0x0000008000000000ULL, // half / 2^448 = 8000000000 0x0000040000000000ULL, // half / 2^448 = 40000000000 0x0000400000000000ULL, // half / 2^448 = 400000000000 0x0002000000000000ULL, // half / 2^448 = 2000000000000 0x0010000000000000ULL, // half / 2^448 = 10000000000000 0x0100000000000000ULL // half / 2^448 = 100000000000000 }; UINT64 mask256[] = { 0x0000000000000007ULL, // mask / 2^256 0x000000000000003fULL, // mask / 2^256 0x00000000000001ffULL, // mask / 2^256 0x0000000000001fffULL, // mask / 2^256 0x000000000000ffffULL, // mask / 2^256 0x000000000007ffffULL, // mask / 2^256 0x00000000007fffffULL, // mask / 2^256 0x0000000003ffffffULL, // mask / 2^256 0x000000001fffffffULL, // mask / 2^256 0x00000001ffffffffULL, // mask / 2^256 0x0000000fffffffffULL, // mask / 2^256 0x0000007fffffffffULL, // mask / 2^256 0x000007ffffffffffULL, // mask / 2^256 0x00003fffffffffffULL, // mask / 2^256 0x0001ffffffffffffULL, // mask / 2^256 0x001fffffffffffffULL, // mask / 2^256 0x00ffffffffffffffULL, // mask / 2^256 0x07ffffffffffffffULL, // mask / 2^256 0x7fffffffffffffffULL, // mask / 2^256 0x0000000000000003ULL, // mask / 2^320 0x000000000000001fULL, // mask / 2^320 0x00000000000001ffULL, // mask / 2^320 0x0000000000000fffULL, // mask / 2^320 0x0000000000007fffULL, // mask / 2^320 0x000000000007ffffULL, // mask / 2^320 0x00000000003fffffULL, // mask / 2^320 0x0000000001ffffffULL, // mask / 2^320 0x000000001fffffffULL, // mask / 2^320 0x00000000ffffffffULL, // mask / 2^320 0x00000007ffffffffULL, // mask / 2^320 0x0000003fffffffffULL, // mask / 2^320 0x000003ffffffffffULL, // mask / 2^320 0x00001fffffffffffULL, // mask / 2^320 0x0000ffffffffffffULL, // mask / 2^320 0x000fffffffffffffULL, // mask / 2^320 0x007fffffffffffffULL, // mask / 2^320 0x03ffffffffffffffULL, // mask / 2^320 0x3fffffffffffffffULL, // mask / 2^320 0x0000000000000001ULL, // mask / 2^384 0x000000000000000fULL, // mask / 2^384 0x00000000000000ffULL, // mask / 2^384 0x00000000000007ffULL, // mask / 2^384 0x0000000000003fffULL, // mask / 2^384 0x000000000003ffffULL, // mask / 2^384 0x00000000001fffffULL, // mask / 2^384 0x0000000000ffffffULL, // mask / 2^384 0x000000000fffffffULL, // mask / 2^384 0x000000007fffffffULL, // mask / 2^384 0x00000003ffffffffULL, // mask / 2^384 0x0000003fffffffffULL, // mask / 2^384 0x000001ffffffffffULL, // mask / 2^384 0x00000fffffffffffULL, // mask / 2^384 0x0000ffffffffffffULL, // mask / 2^384 0x0007ffffffffffffULL, // mask / 2^384 0x003fffffffffffffULL, // mask / 2^384 0x03ffffffffffffffULL, // mask / 2^384 0x1fffffffffffffffULL, // mask / 2^384 0xffffffffffffffffULL, // mask / 2^384 0x0000000000000007ULL, // mask / 2^448 0x000000000000007fULL, // mask / 2^448 0x00000000000003ffULL, // mask / 2^448 0x0000000000001fffULL, // mask / 2^448 0x000000000001ffffULL, // mask / 2^448 0x00000000000fffffULL, // mask / 2^448 0x00000000007fffffULL, // mask / 2^448 0x0000000007ffffffULL, // mask / 2^448 0x000000003fffffffULL, // mask / 2^448 0x00000001ffffffffULL, // mask / 2^448 0x0000001fffffffffULL, // mask / 2^448 0x000000ffffffffffULL, // mask / 2^448 0x000007ffffffffffULL, // mask / 2^448 0x00007fffffffffffULL, // mask / 2^448 0x0003ffffffffffffULL, // mask / 2^448 0x001fffffffffffffULL, // mask / 2^448 0x01ffffffffffffffULL // mask / 2^448 }; UINT256 ten2mxtrunc256[] = { {{0xccccccccccccccccULL, 0xccccccccccccccccULL, 0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // (ten2mx >> 256) = cccccccccccccccc cccccccccccccccc // cccccccccccccccccccccccccccccccc {{0x70a3d70a3d70a3d7ULL, 0xd70a3d70a3d70a3dULL, 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // (ten2mx >> 256) = a3d70a3d70a3d70a 3d70a3d70a3d70a3 // d70a3d70a3d70a3d70a3d70a3d70a3d7 {{0xc083126e978d4fdfULL, 0x78d4fdf3b645a1caULL, 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // (ten2mx >> 256) = 83126e978d4fdf3b 645a1cac083126e9 // 78d4fdf3b645a1cac083126e978d4fdf {{0x67381d7dbf487fcbULL, 0xc154c985f06f6944ULL, 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}}, // (ten2mx >> 256) = d1b71758e219652b d3c36113404ea4a8 // c154c985f06f694467381d7dbf487fcb {{0x85c67dfe32a0663cULL, 0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}}, // (ten2mx >> 256) = a7c5ac471b478423 fcf80dc33721d53 // cddd6e04c059210385c67dfe32a0663c {{0x37d1fe64f54d1e96ULL, 0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}}, // (ten2mx >> 256) = 8637bd05af6c69b5 a63f9a49c2c1b10f // d7e45803cd141a6937d1fe64f54d1e96 {{0x8c8330a1887b6424ULL, 0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}}, // (ten2mx >> 256) = d6bf94d5e57a42bc 3d32907604691b4c // 8ca08cd2e1b9c3db8c8330a1887b6424 {{0x7068f3b46d2f8350ULL, 0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}}, // (ten2mx >> 256) = abcc77118461cefc fdc20d2b36ba7c3d // 3d4d3d758161697c7068f3b46d2f8350 {{0xf387295d242602a6ULL, 0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}}, // (ten2mx >> 256) = 89705f4136b4a597 31680a88f8953030 // fdd7645e011abac9f387295d242602a6 {{0xb8d8422ea03cd10aULL, 0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}}, // (ten2mx >> 256) = dbe6fecebdedd5be b573440e5a884d1b // 2fbf06fcce912adcb8d8422ea03cd10a {{0x93e034f219ca40d5ULL, 0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}}, // (ten2mx >> 256) = afebff0bcb24aafe f78f69a51539d748 // f2ff38ca3eda88b093e034f219ca40d5 {{0x4319c3f4e16e9a44ULL, 0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}}, // (ten2mx >> 256) = 8cbccc096f5088cb f93f87b7442e45d3 // f598fa3b657ba08d4319c3f4e16e9a44 {{0x04f606549be42a06ULL, 0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}}, // (ten2mx >> 256) = e12e13424bb40e13 2865a5f206b06fb9 // 88f4c3923bf900e204f606549be42a06 {{0x03f805107cb68805ULL, 0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}}, // (ten2mx >> 256) = b424dc35095cd80f 538484c19ef38c94 // 6d909c74fcc733e803f805107cb68805 {{0x3660040d3092066aULL, 0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}}, // (ten2mx >> 256) = 901d7cf73ab0acd9 f9d37014bf60a10 // 57a6e390ca38f6533660040d3092066a {{0x23ccd3484db670aaULL, 0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}}, // (ten2mx >> 256) = e69594bec44de15b 4c2ebe687989a9b3 // bf716c1add27f08523ccd3484db670aa {{0x4fd70f6d0af85a22ULL, 0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}}, // (ten2mx >> 256) = b877aa3236a4b449 9befeb9fad487c2 // ff8df0157db98d374fd70f6d0af85a22 {{0x0cac0c573bf9e1b5ULL, 0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}}, // (ten2mx >> 256) = 9392ee8e921d5d07 3aff322e62439fcf // 32d7f344649470f90cac0c573bf9e1b5 {{0xe11346f1f98fcf88ULL, 0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}}, // (ten2mx >> 256) = ec1e4a7db69561a5 2b31e9e3d06c32e5 // 1e2652070753e7f4e11346f1f98fcf88 {{0x4da9058e613fd939ULL, 0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}}, // (ten2mx >> 256) = bce5086492111aea 88f4bb1ca6bcf584 // 181ea8059f76532a4da9058e613fd939 {{0xa48737a51a997a94ULL, 0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}}, // (ten2mx >> 256) = 971da05074da7bee d3f6fc16ebca5e03 // 467eecd14c5ea8eea48737a51a997a94 {{0x3a71f2a1c428c420ULL, 0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}}, // (ten2mx >> 256) = f1c90080baf72cb1 5324c68b12dd6338 // 70cb148213caa7e43a71f2a1c428c420 {{0x2ec18ee7d0209ce7ULL, 0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}, // (ten2mx >> 256) = c16d9a0095928a27 75b7053c0f178293 // 8d6f439b430886502ec18ee7d0209ce7 {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // (ten2mx >> 256) = 9abe14cd44753b52 c4926a9672793542 // d78c3615cf3a050cf23472530ce6e3ec {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // (ten2mx >> 256) = f79687aed3eec551 3a83ddbd83f52204 // 8c1389bc7ec33b47e9ed83b814a49fe0 {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // (ten2mx >> 256) = c612062576589dda 95364afe032a819d // 3cdc6e306568fc3987f1362cdd507fe6 {{0x9ff42b5717739985ULL, 0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // (ten2mx >> 256) = 9e74d1b791e07e48 775ea264cf55347d // ca49f1c05120c9c79ff42b5717739985 {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // (ten2mx >> 256) = fd87b5f28300ca0d 8bca9d6e188853fc // 76dcb60081ce0fa5ccb9def1bf1f5c08 {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // (ten2mx >> 256) = cad2f7f5359a3b3e 96ee45813a04330 // 5f16f80067d80c84a3c7e58e327f7cd3 {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // (ten2mx >> 256) = a2425ff75e14fc31 a1258379a94d028d // 18df2ccd1fe00a03b6398471c1ff970f {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL, 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // (ten2mx >> 256) = 81ceb32c4b43fcf4 80eacf948770ced7 // 4718f0a419800802f82e038e34cc78d9 {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // (ten2mx >> 256) = cfb11ead453994ba 67de18eda5814af2 // b5b1aa028ccd99e59e338e387ad8e28 {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // (ten2mx >> 256) = a6274bbdd0fadd61 ecb1ad8aeacdd58e // 6f7c154ced70ae1847e8fa4f9fbe0b53 {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}, // (ten2mx >> 256) = 84ec3c97da624ab4 bd5af13bef0b113e // bf967770bdf3be79d320c83fb2fe6f75 {{0x85014065eb30b256ULL, 0x65bd8be79652ca5cULL, 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}}, // (ten2mx >> 256) = d4ad2dbfc3d07787 955e4ec64b44e864 // 65bd8be79652ca5c85014065eb30b256 {{0xd0cdcd1e55c08eabULL, 0xeafe098611dbd516ULL, 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}}, // (ten2mx >> 256) = aa242499697392d2 dde50bd1d5d0b9e9 // eafe098611dbd516d0cdcd1e55c08eab {{0x40a4a418449a0bbcULL, 0xbbfe6e04db164412ULL, 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}, // (ten2mx >> 256) = 881cea14545c7575 7e50d64177da2e54 // bbfe6e04db16441240a4a418449a0bbc {{0x9aa1068d3a9012c7ULL, 0x2cca49a15e8a0683ULL, 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}}, // (ten2mx >> 256) = d9c7dced53c72255 96e7bd358c904a21 // 2cca49a15e8a06839aa1068d3a9012c7 {{0x154d9ed7620cdbd2ULL, 0x8a3b6e1ab2080536ULL, 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}}, // (ten2mx >> 256) = ae397d8aa96c1b77 abec975e0a0d081a // 8a3b6e1ab2080536154d9ed7620cdbd2 {{0x443e18ac4e70afdbULL, 0x3b62be7bc1a0042bULL, 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}}, // (ten2mx >> 256) = 8b61313bbabce2c6 2323ac4b3b3da015 // 3b62be7bc1a0042b443e18ac4e70afdb {{0x6d30277a171ab2f8ULL, 0x5f0463f935ccd378ULL, 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}}, // (ten2mx >> 256) = df01e85f912e37a3 6b6c46dec52f6688 // 5f0463f935ccd3786d30277a171ab2f8 {{0x8a8cec61ac155bfaULL, 0x7f36b660f7d70f93ULL, 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}}, // (ten2mx >> 256) = b267ed1940f1c61c 55f038b237591ed3 // 7f36b660f7d70f938a8cec61ac155bfa {{0x3ba3f04e23444995ULL, 0xcc2bc51a5fdf3fa9ULL, 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}}, // (ten2mx >> 256) = 8eb98a7a9a5b04e3 77f3608e92adb242 // cc2bc51a5fdf3fa93ba3f04e23444995 {{0xf9064d49d206dc21ULL, 0xe046082a32fecc41ULL, 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}}, // (ten2mx >> 256) = e45c10c42a2b3b05 8cb89a7db77c506a // e046082a32fecc41f9064d49d206dc21 {{0xfa6b7107db38b01aULL, 0x4d04d354f598a367ULL, 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}}, // (ten2mx >> 256) = b6b00d69bb55c8d1 3d607b97c5fd0d22 // 4d04d354f598a367fa6b7107db38b01a {{0xfb8927397c2d59afULL, 0x3d9d75dd9146e91fULL, 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}}, // (ten2mx >> 256) = 9226712162ab070d cab3961304ca70e8 // 3d9d75dd9146e91ffb8927397c2d59af {{0xf8db71f5937bc2b1ULL, 0xc8fbefc8e87174ffULL, 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}}, // (ten2mx >> 256) = e9d71b689dde71af aab8f01e6e10b4a6 // c8fbefc8e87174fff8db71f5937bc2b1 {{0x2d7c5b2adc630227ULL, 0x3a63263a538df733ULL, 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}}, // (ten2mx >> 256) = bb127c53b17ec159 5560c018580d5d52 // 3a63263a538df7332d7c5b2adc630227 {{0x24637c2249e8ce86ULL, 0x2eb5b82ea93e5f5cULL, 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}}, // (ten2mx >> 256) = 95a8637627989aad dde7001379a44aa8 // 2eb5b82ea93e5f5c24637c2249e8ce86 {{0x3a38c69d430e173dULL, 0x4abc59e441fd6560ULL, 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}}, // (ten2mx >> 256) = ef73d256a5c0f77c 963e66858f6d4440 // 4abc59e441fd65603a38c69d430e173d {{0x94fa387dcf3e78fdULL, 0x6efd14b69b311de6ULL, 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}}, // (ten2mx >> 256) = bf8fdb78849a5f96 de98520472bdd033 // 6efd14b69b311de694fa387dcf3e78fd {{0xaa61c6cb0c31fa64ULL, 0x259743c548f417ebULL, 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}}, // (ten2mx >> 256) = 993fe2c6d07b7fab e546a8038efe4029 // 259743c548f417ebaa61c6cb0c31fa64 {{0xaa360ade79e990a1ULL, 0x3c25393ba7ecf312ULL, 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}}, // (ten2mx >> 256) = f53304714d9265df d53dd99f4b3066a8 // 3c25393ba7ecf312aa360ade79e990a1 {{0x882b3be52e5473b4ULL, 0x96842dc95323f5a8ULL, 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}}, // (ten2mx >> 256) = c428d05aa4751e4c aa97e14c3c26b886 // 96842dc95323f5a8882b3be52e5473b4 {{0xd355c98425105c90ULL, 0xab9cf16ddc1cc486ULL, 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}}, // (ten2mx >> 256) = 9ced737bb6c4183d 55464dd69685606b // ab9cf16ddc1cc486d355c98425105c90 {{0xebbc75a03b4d60e6ULL, 0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}, // (ten2mx >> 256) = fb158592be068d2e eed6e2f0f0d56712 // ac2e4f162cfad40aebbc75a03b4d60e6 {{0x8963914cfc3de71eULL, 0x568b727823fbdcd5ULL, 0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}}, // (ten2mx >> 256) = c8de047564d20a8b f245825a5a445275 // 568b727823fbdcd58963914cfc3de71e {{0xd44fa770c9cb1f4bULL, 0x453c5b934ffcb0aaULL, 0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}}, // (ten2mx >> 256) = a0b19d2ab70e6ed6 5b6aceaeae9d0ec4 // 453c5b934ffcb0aad44fa770c9cb1f4b {{0xdd0c85f3d4a27f6fULL, 0x37637c75d996f3bbULL, 0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}}, // (ten2mx >> 256) = 808e17555f3ebf11 e2bbd88bbee40bd0 // 37637c75d996f3bbdd0c85f3d4a27f6f {{0x61ada31fba9d98b2ULL, 0x256bfa5628f185f9ULL, 0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}}, // (ten2mx >> 256) = cdb02555653131b6 3792f412cb06794d // 256bfa5628f185f961ada31fba9d98b2 {{0xe7be1c196217ad5bULL, 0x51232eab53f46b2dULL, 0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}}, // (ten2mx >> 256) = a48ceaaab75a8e2b 5fa8c3423c052dd7 // 51232eab53f46b2de7be1c196217ad5b {{0x52fe7ce11b462449ULL, 0x40e8f222a99055beULL, 0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}}, // (ten2mx >> 256) = 83a3eeeef9153e89 1953cf68300424ac // 40e8f222a99055be52fe7ce11b462449 {{0x51972e34f8703a0fULL, 0x34a7e9d10f4d55fdULL, 0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}}, // (ten2mx >> 256) = d29fe4b18e88640e 8eec7f0d19a03aad // 34a7e9d10f4d55fd51972e34f8703a0f {{0x0e128b5d938cfb3fULL, 0x2a1fee40d90aab31ULL, 0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}}, // (ten2mx >> 256) = a87fea27a539e9a5 3f2398d747b36224 // 2a1fee40d90aab310e128b5d938cfb3f {{0x3e753c4adc70c8ffULL, 0xbb4cbe9a473bbc27ULL, 0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}}, // (ten2mx >> 256) = 86ccbb52ea94baea 98e947129fc2b4e9 // bb4cbe9a473bbc273e753c4adc70c8ff {{0x30bb93aafa4e0e65ULL, 0x9214642a0b92c6a5ULL, 0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}}, // (ten2mx >> 256) = d7adf884aa879177 5b0ed81dcc6abb0f // 9214642a0b92c6a530bb93aafa4e0e65 {{0xc0960fbbfb71a51eULL, 0xa8105021a2dbd21dULL, 0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}}, // (ten2mx >> 256) = ac8b2d36eed2dac5 e272467e3d222f3f // a8105021a2dbd21dc0960fbbfb71a51e {{0x66de72fcc927b74bULL, 0xb9a6a6814f1641b1ULL, 0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}}, // (ten2mx >> 256) = 8a08f0f8bf0f156b 1b8e9ecb641b58ff // b9a6a6814f1641b166de72fcc927b74b {{0xd7ca5194750c5878ULL, 0xf5d770cee4f0691bULL, 0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}}, // (ten2mx >> 256) = dcdb1b2798182244 f8e431456cf88e65 // f5d770cee4f0691bd7ca5194750c5878 {{0xdfd50e105da379f9ULL, 0x9179270bea59edafULL, 0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}}, // (ten2mx >> 256) = b0af48ec79ace837 2d835a9df0c6d851 // 9179270bea59edafdfd50e105da379f9 {{0x19773e737e1c6194ULL, 0x0dfa85a321e18af3ULL, 0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}}, // (ten2mx >> 256) = 8d590723948a535f 579c487e5a38ad0e // dfa85a321e18af319773e737e1c6194 {{0xf58b971f302d68eeULL, 0x165da29e9c9c1184ULL, 0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}}, // (ten2mx >> 256) = e2280b6c20dd5232 25c6da63c38de1b0 // 165da29e9c9c1184f58b971f302d68ee {{0xc46fac18f3578724ULL, 0x4517b54bb07cdad0ULL, 0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}}, // (ten2mx >> 256) = b4ecd5f01a4aa828 1e38aeb6360b1af3 // 4517b54bb07cdad0c46fac18f3578724 {{0x36bfbce0c2ac6c1dULL, 0x9dac910959fd7bdaULL, 0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}}, // (ten2mx >> 256) = 90bd77f3483bb9b9 b1c6f22b5e6f48c2 // 9dac910959fd7bda36bfbce0c2ac6c1d {{0x2465fb01377a4695ULL, 0x2f7a81a88ffbf95dULL, 0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}} // (ten2mx >> 256) = e7958cb87392c2c2 b60b1d1230b20e04 // 2f7a81a88ffbf95d2465fb01377a4695 }; libdfp-1.0.17/libbid/bid128_2_str.h000066400000000000000000000022621504475242000165450ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ extern UINT64 Twoto60_m_10to18; extern UINT64 Twoto60; extern UINT64 Inv_Tento9; extern UINT32 Twoto30_m_10to9; extern UINT32 Tento9; extern UINT32 Tento6; extern UINT32 Tento3; extern char midi_tbl[1000][3]; extern UINT64 mod10_18_tbl[9][128]; libdfp-1.0.17/libbid/bid128_2_str_macros.h000066400000000000000000000153421504475242000201140ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define __L0_Normalize_10to18( X_hi, X_lo ) \ { \ UINT64 L0_tmp; \ L0_tmp = (X_lo) + Twoto60_m_10to18; \ if (L0_tmp & Twoto60) \ {(X_hi)=(X_hi)+1;(X_lo)=((L0_tmp<<4)>>4);} \ } #define __L0_Normalize_10to9( X_hi, X_lo ) \ { \ UINT32 L0_tmp; \ L0_tmp = (X_lo) + Twoto30_m_10to9; \ if (L0_tmp & 0x40000000) \ {(X_hi)=(X_hi)+1;(X_lo)=((L0_tmp<<2)>>2);} \ } #define __L0_Split_MiDi_2( X, ptr ) \ { \ UINT32 L0_head, L0_tail, L0_tmp; \ L0_head = (X) >> 10; \ L0_tail = ((X)&(0x03FF))+(L0_head<<5)-(L0_head<<3); \ L0_tmp = (L0_tail)>>10; L0_head += L0_tmp; \ L0_tail = (L0_tail&(0x03FF))+(L0_tmp<<5)-(L0_tmp<<3); \ if (L0_tail > 999){L0_tail -= 1000; L0_head += 1;} \ *((ptr)++) = L0_head; *((ptr)++) = L0_tail; \ } #define __L0_Split_MiDi_3( X, ptr ) \ { \ UINT32 L0_X, L0_head, L0_mid, L0_tail, L0_tmp; \ L0_X = (UINT32)((X)); \ L0_head = ((L0_X>>17)*34359)>>18; \ L0_X -= L0_head*1000000; \ if (L0_X >= 1000000){L0_X -= 1000000;L0_head+=1;} \ L0_mid = L0_X >> 10; \ L0_tail = (L0_X & (0x03FF))+(L0_mid<<5)-(L0_mid<<3); \ L0_tmp = (L0_tail)>>10; L0_mid += L0_tmp; \ L0_tail = (L0_tail&(0x3FF))+(L0_tmp<<5)-(L0_tmp<<3); \ if (L0_tail>999){L0_tail-=1000;L0_mid+=1;} \ *((ptr)++)=L0_head;*((ptr)++)=L0_mid; \ *((ptr)++)=L0_tail; \ } #define __L1_Split_MiDi_6( X, ptr ) \ { \ UINT32 L1_X_hi, L1_X_lo; \ UINT64 L1_Xhi_64, L1_Xlo_64; \ L1_Xhi_64 = ( ((X)>>28)*Inv_Tento9 ) >> 33; \ L1_Xlo_64 = (X) - L1_Xhi_64*(UINT64)Tento9; \ if (L1_Xlo_64 >= (UINT64)Tento9) \ {L1_Xlo_64-=(UINT64)Tento9;L1_Xhi_64+=1;} \ L1_X_hi=(UINT32)L1_Xhi_64; L1_X_lo=(UINT32)L1_Xlo_64; \ __L0_Split_MiDi_3(L1_X_hi,(ptr)); \ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \ } #define __L1_Split_MiDi_6_Lead( X, ptr ) \ { \ UINT32 L1_X_hi, L1_X_lo; \ UINT64 L1_Xhi_64, L1_Xlo_64; \ if ((X)>=(UINT64)Tento9){ \ L1_Xhi_64 = ( ((X)>>28)*Inv_Tento9 ) >> 33; \ L1_Xlo_64 = (X) - L1_Xhi_64*(UINT64)Tento9; \ if (L1_Xlo_64 >= (UINT64)Tento9) \ {L1_Xlo_64-=(UINT64)Tento9;L1_Xhi_64+=1;} \ L1_X_hi=(UINT32)L1_Xhi_64; \ L1_X_lo=(UINT32)L1_Xlo_64; \ if (L1_X_hi>=Tento6){ \ __L0_Split_MiDi_3(L1_X_hi,(ptr)); \ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \ } \ else if (L1_X_hi>=Tento3){ \ __L0_Split_MiDi_2(L1_X_hi,(ptr)); \ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \ } \ else { \ *((ptr)++) = L1_X_hi; \ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \ } \ } \ else { \ L1_X_lo = (UINT32)(X); \ if (L1_X_lo>=Tento6){ \ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \ } \ else if (L1_X_lo>=Tento3){ \ __L0_Split_MiDi_2(L1_X_lo,(ptr)); \ } \ else { \ *((ptr)++) = L1_X_lo; \ } \ } \ } #define __L0_MiDi2Str( X, c_ptr ) \ { \ char *L0_src; \ L0_src = midi_tbl[(X)]; \ *((c_ptr)++) = *(L0_src++); \ *((c_ptr)++) = *(L0_src++); \ *((c_ptr)++) = *(L0_src); \ } #define __L0_MiDi2Str_Lead( X, c_ptr ) \ { \ char *L0_src; \ L0_src = midi_tbl[(X)]; \ if ((X)>=100){ \ *((c_ptr)++) = *(L0_src++); \ *((c_ptr)++) = *(L0_src++); \ *((c_ptr)++) = *(L0_src); \ } \ else if ((X)>=10){ \ L0_src++; \ *((c_ptr)++) = *(L0_src++); \ *((c_ptr)++) = *(L0_src); \ } \ else { \ L0_src++;L0_src++; \ *((c_ptr)++) = *(L0_src); \ } \ } libdfp-1.0.17/libbid/bid128_2_str_tables.c000066400000000000000000000750041504475242000200760ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" UINT64 Twoto60_m_10to18 = 152921504606846976LL; UINT64 Twoto60 = 0x1000000000000000LL; UINT64 Inv_Tento9 = 2305843009LL; /* floor(2^61/10^9) */ UINT32 Twoto30_m_10to9 = 73741824; UINT32 Tento9 = 1000000000; UINT32 Tento6 = 1000000; UINT32 Tento3 = 1000; const char midi_tbl[1000][3] = { "000", "001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011", "012", "013", "014", "015", "016", "017", "018", "019", "020", "021", "022", "023", "024", "025", "026", "027", "028", "029", "030", "031", "032", "033", "034", "035", "036", "037", "038", "039", "040", "041", "042", "043", "044", "045", "046", "047", "048", "049", "050", "051", "052", "053", "054", "055", "056", "057", "058", "059", "060", "061", "062", "063", "064", "065", "066", "067", "068", "069", "070", "071", "072", "073", "074", "075", "076", "077", "078", "079", "080", "081", "082", "083", "084", "085", "086", "087", "088", "089", "090", "091", "092", "093", "094", "095", "096", "097", "098", "099", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", "300", "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "322", "323", "324", "325", "326", "327", "328", "329", "330", "331", "332", "333", "334", "335", "336", "337", "338", "339", "340", "341", "342", "343", "344", "345", "346", "347", "348", "349", "350", "351", "352", "353", "354", "355", "356", "357", "358", "359", "360", "361", "362", "363", "364", "365", "366", "367", "368", "369", "370", "371", "372", "373", "374", "375", "376", "377", "378", "379", "380", "381", "382", "383", "384", "385", "386", "387", "388", "389", "390", "391", "392", "393", "394", "395", "396", "397", "398", "399", "400", "401", "402", "403", "404", "405", "406", "407", "408", "409", "410", "411", "412", "413", "414", "415", "416", "417", "418", "419", "420", "421", "422", "423", "424", "425", "426", "427", "428", "429", "430", "431", "432", "433", "434", "435", "436", "437", "438", "439", "440", "441", "442", "443", "444", "445", "446", "447", "448", "449", "450", "451", "452", "453", "454", "455", "456", "457", "458", "459", "460", "461", "462", "463", "464", "465", "466", "467", "468", "469", "470", "471", "472", "473", "474", "475", "476", "477", "478", "479", "480", "481", "482", "483", "484", "485", "486", "487", "488", "489", "490", "491", "492", "493", "494", "495", "496", "497", "498", "499", "500", "501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "520", "521", "522", "523", "524", "525", "526", "527", "528", "529", "530", "531", "532", "533", "534", "535", "536", "537", "538", "539", "540", "541", "542", "543", "544", "545", "546", "547", "548", "549", "550", "551", "552", "553", "554", "555", "556", "557", "558", "559", "560", "561", "562", "563", "564", "565", "566", "567", "568", "569", "570", "571", "572", "573", "574", "575", "576", "577", "578", "579", "580", "581", "582", "583", "584", "585", "586", "587", "588", "589", "590", "591", "592", "593", "594", "595", "596", "597", "598", "599", "600", "601", "602", "603", "604", "605", "606", "607", "608", "609", "610", "611", "612", "613", "614", "615", "616", "617", "618", "619", "620", "621", "622", "623", "624", "625", "626", "627", "628", "629", "630", "631", "632", "633", "634", "635", "636", "637", "638", "639", "640", "641", "642", "643", "644", "645", "646", "647", "648", "649", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "660", "661", "662", "663", "664", "665", "666", "667", "668", "669", "670", "671", "672", "673", "674", "675", "676", "677", "678", "679", "680", "681", "682", "683", "684", "685", "686", "687", "688", "689", "690", "691", "692", "693", "694", "695", "696", "697", "698", "699", "700", "701", "702", "703", "704", "705", "706", "707", "708", "709", "710", "711", "712", "713", "714", "715", "716", "717", "718", "719", "720", "721", "722", "723", "724", "725", "726", "727", "728", "729", "730", "731", "732", "733", "734", "735", "736", "737", "738", "739", "740", "741", "742", "743", "744", "745", "746", "747", "748", "749", "750", "751", "752", "753", "754", "755", "756", "757", "758", "759", "760", "761", "762", "763", "764", "765", "766", "767", "768", "769", "770", "771", "772", "773", "774", "775", "776", "777", "778", "779", "780", "781", "782", "783", "784", "785", "786", "787", "788", "789", "790", "791", "792", "793", "794", "795", "796", "797", "798", "799", "800", "801", "802", "803", "804", "805", "806", "807", "808", "809", "810", "811", "812", "813", "814", "815", "816", "817", "818", "819", "820", "821", "822", "823", "824", "825", "826", "827", "828", "829", "830", "831", "832", "833", "834", "835", "836", "837", "838", "839", "840", "841", "842", "843", "844", "845", "846", "847", "848", "849", "850", "851", "852", "853", "854", "855", "856", "857", "858", "859", "860", "861", "862", "863", "864", "865", "866", "867", "868", "869", "870", "871", "872", "873", "874", "875", "876", "877", "878", "879", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889", "890", "891", "892", "893", "894", "895", "896", "897", "898", "899", "900", "901", "902", "903", "904", "905", "906", "907", "908", "909", "910", "911", "912", "913", "914", "915", "916", "917", "918", "919", "920", "921", "922", "923", "924", "925", "926", "927", "928", "929", "930", "931", "932", "933", "934", "935", "936", "937", "938", "939", "940", "941", "942", "943", "944", "945", "946", "947", "948", "949", "950", "951", "952", "953", "954", "955", "956", "957", "958", "959", "960", "961", "962", "963", "964", "965", "966", "967", "968", "969", "970", "971", "972", "973", "974", "975", "976", "977", "978", "979", "980", "981", "982", "983", "984", "985", "986", "987", "988", "989", "990", "991", "992", "993", "994", "995", "996", "997", "998", "999" }; const UINT64 mod10_18_tbl[9][128] = { // 2^59 = 576460752303423488, A and B breakdown, where data = A*10^18 + B { 0LL, 0LL, 0LL, 576460752303423488LL, // 0*2^59, 1*2^59 1LL, 152921504606846976LL, 1LL, 729382256910270464LL, // 2*2^59, 3*2^59 2LL, 305843009213693952LL, 2LL, 882303761517117440LL, // 4*2^59, 5*2^59 3LL, 458764513820540928LL, 4LL, 35225266123964416LL, // 6*2^59, 7*2^59 4LL, 611686018427387904LL, 5LL, 188146770730811392LL, // 8*2^59, 9*2^59 5LL, 764607523034234880LL, 6LL, 341068275337658368LL, // 10*2^59, 11*2^59 6LL, 917529027641081856LL, 7LL, 493989779944505344LL, // 12*2^59, 13*2^59 8LL, 70450532247928832LL, 8LL, 646911284551352320LL, // 14*2^59, 15*2^59 9LL, 223372036854775808LL, 9LL, 799832789158199296LL, // 16*2^59, 17*2^59 10LL, 376293541461622784LL, 10LL, 952754293765046272LL, // 18*2^59, 19*2^59 11LL, 529215046068469760LL, 12LL, 105675798371893248LL, // 20*2^59, 21*2^59 12LL, 682136550675316736LL, 13LL, 258597302978740224LL, // 22*2^59, 23*2^59 13LL, 835058055282163712LL, 14LL, 411518807585587200LL, // 24*2^59, 25*2^59 14LL, 987979559889010688LL, 15LL, 564440312192434176LL, // 26*2^59, 27*2^59 16LL, 140901064495857664LL, 16LL, 717361816799281152LL, // 28*2^59, 29*2^59 17LL, 293822569102704640LL, 17LL, 870283321406128128LL, // 30*2^59, 31*2^59 18LL, 446744073709551616LL, 19LL, 23204826012975104LL, // 32*2^59, 33*2^59 19LL, 599665578316398592LL, 20LL, 176126330619822080LL, // 34*2^59, 35*2^59 20LL, 752587082923245568LL, 21LL, 329047835226669056LL, // 36*2^59, 37*2^59 21LL, 905508587530092544LL, 22LL, 481969339833516032LL, // 38*2^59, 39*2^59 23LL, 58430092136939520LL, 23LL, 634890844440363008LL, // 40*2^59, 41*2^59 24LL, 211351596743786496LL, 24LL, 787812349047209984LL, // 42*2^59, 43*2^59 25LL, 364273101350633472LL, 25LL, 940733853654056960LL, // 44*2^59, 45*2^59 26LL, 517194605957480448LL, 27LL, 93655358260903936LL, // 46*2^59, 47*2^59 27LL, 670116110564327424LL, 28LL, 246576862867750912LL, // 48*2^59, 49*2^59 28LL, 823037615171174400LL, 29LL, 399498367474597888LL, // 50*2^59, 51*2^59 29LL, 975959119778021376LL, 30LL, 552419872081444864LL, // 52*2^59, 53*2^59 31LL, 128880624384868352LL, 31LL, 705341376688291840LL, // 54*2^59, 55*2^59 32LL, 281802128991715328LL, 32LL, 858262881295138816LL, // 56*2^59, 57*2^59 33LL, 434723633598562304LL, 34LL, 11184385901985792LL, // 58*2^59, 59*2^59 34LL, 587645138205409280LL, 35LL, 164105890508832768LL, // 60*2^59, 61*2^59 35LL, 740566642812256256LL, 36LL, 317027395115679744LL, // 62*2^59, 63*2^59 }, { // 2^65 = 36*10^18 + 893488147419103232 0LL, 0LL, 36LL, 893488147419103232LL, // 0*2^65, 1*2^65 73LL, 786976294838206464LL, 110LL, 680464442257309696LL, // 2*2^65, 3*2^65 147LL, 573952589676412928LL, 184LL, 467440737095516160LL, // 4*2^65, 5*2^65 221LL, 360928884514619392LL, 258LL, 254417031933722624LL, // 6*2^65, 7*2^65 295LL, 147905179352825856LL, 332LL, 41393326771929088LL, // 8*2^65, 9*2^65 368LL, 934881474191032320LL, 405LL, 828369621610135552LL, // 0*2^65, 1*2^65 442LL, 721857769029238784LL, 479LL, 615345916448342016LL, // 2*2^65, 3*2^65 516LL, 508834063867445248LL, 553LL, 402322211286548480LL, // 4*2^65, 5*2^65 590LL, 295810358705651712LL, 627LL, 189298506124754944LL, // 6*2^65, 7*2^65 664LL, 82786653543858176LL, 700LL, 976274800962961408LL, // 8*2^65, 9*2^65 737LL, 869762948382064640LL, 774LL, 763251095801167872LL, // 0*2^65, 1*2^65 811LL, 656739243220271104LL, 848LL, 550227390639374336LL, // 2*2^65, 3*2^65 885LL, 443715538058477568LL, 922LL, 337203685477580800LL, // 4*2^65, 5*2^65 959LL, 230691832896684032LL, 996LL, 124179980315787264LL, // 6*2^65, 7*2^65 1033LL, 17668127734890496LL, 1069LL, 911156275153993728LL, // 8*2^65, 9*2^65 1106LL, 804644422573096960LL, 1143LL, 698132569992200192LL, // 0*2^65, 1*2^65 1180LL, 591620717411303424LL, 1217LL, 485108864830406656LL, // 2*2^65, 3*2^65 1254LL, 378597012249509888LL, 1291LL, 272085159668613120LL, // 4*2^65, 5*2^65 1328LL, 165573307087716352LL, 1365LL, 59061454506819584LL, // 6*2^65, 7*2^65 1401LL, 952549601925922816LL, 1438LL, 846037749345026048LL, // 8*2^65, 9*2^65 1475LL, 739525896764129280LL, 1512LL, 633014044183232512LL, // 0*2^65, 1*2^65 1549LL, 526502191602335744LL, 1586LL, 419990339021438976LL, // 2*2^65, 3*2^65 1623LL, 313478486440542208LL, 1660LL, 206966633859645440LL, // 4*2^65, 5*2^65 1697LL, 100454781278748672LL, 1733LL, 993942928697851904LL, // 6*2^65, 7*2^65 1770LL, 887431076116955136LL, 1807LL, 780919223536058368LL, // 8*2^65, 9*2^65 1844LL, 674407370955161600LL, 1881LL, 567895518374264832LL, // 0*2^65, 1*2^65 1918LL, 461383665793368064LL, 1955LL, 354871813212471296LL, // 2*2^65, 3*2^65 1992LL, 248359960631574528LL, 2029LL, 141848108050677760LL, // 4*2^65, 5*2^65 2066LL, 35336255469780992LL, 2102LL, 928824402888884224LL, // 6*2^65, 7*2^65 2139LL, 822312550307987456LL, 2176LL, 715800697727090688LL, // 8*2^65, 9*2^65 2213LL, 609288845146193920LL, 2250LL, 502776992565297152LL, // 0*2^65, 1*2^65 2287LL, 396265139984400384LL, 2324LL, 289753287403503616LL, // 2*2^65, 3*2^65 }, { 0LL, 0LL, 2361LL, 183241434822606848LL, 4722LL, 366482869645213696LL, 7083LL, 549724304467820544LL, 9444LL, 732965739290427392LL, 11805LL, 916207174113034240LL, 14167LL, 99448608935641088LL, 16528LL, 282690043758247936LL, 18889LL, 465931478580854784LL, 21250LL, 649172913403461632LL, 23611LL, 832414348226068480LL, 25973LL, 15655783048675328LL, 28334LL, 198897217871282176LL, 30695LL, 382138652693889024LL, 33056LL, 565380087516495872LL, 35417LL, 748621522339102720LL, 37778LL, 931862957161709568LL, 40140LL, 115104391984316416LL, 42501LL, 298345826806923264LL, 44862LL, 481587261629530112LL, 47223LL, 664828696452136960LL, 49584LL, 848070131274743808LL, 51946LL, 31311566097350656LL, 54307LL, 214553000919957504LL, 56668LL, 397794435742564352LL, 59029LL, 581035870565171200LL, 61390LL, 764277305387778048LL, 63751LL, 947518740210384896LL, 66113LL, 130760175032991744LL, 68474LL, 314001609855598592LL, 70835LL, 497243044678205440LL, 73196LL, 680484479500812288LL, 75557LL, 863725914323419136LL, 77919LL, 46967349146025984LL, 80280LL, 230208783968632832LL, 82641LL, 413450218791239680LL, 85002LL, 596691653613846528LL, 87363LL, 779933088436453376LL, 89724LL, 963174523259060224LL, 92086LL, 146415958081667072LL, 94447LL, 329657392904273920LL, 96808LL, 512898827726880768LL, 99169LL, 696140262549487616LL, 101530LL, 879381697372094464LL, 103892LL, 62623132194701312LL, 106253LL, 245864567017308160LL, 108614LL, 429106001839915008LL, 110975LL, 612347436662521856LL, 113336LL, 795588871485128704LL, 115697LL, 978830306307735552LL, 118059LL, 162071741130342400LL, 120420LL, 345313175952949248LL, 122781LL, 528554610775556096LL, 125142LL, 711796045598162944LL, 127503LL, 895037480420769792LL, 129865LL, 78278915243376640LL, 132226LL, 261520350065983488LL, 134587LL, 444761784888590336LL, 136948LL, 628003219711197184LL, 139309LL, 811244654533804032LL, 141670LL, 994486089356410880LL, 144032LL, 177727524179017728LL, 146393LL, 360968959001624576LL, 148754LL, 544210393824231424LL, }, { 0LL, 0LL, 151115LL, 727451828646838272LL, 302231LL, 454903657293676544LL, 453347LL, 182355485940514816LL, 604462LL, 909807314587353088LL, 755578LL, 637259143234191360LL, 906694LL, 364710971881029632LL, 1057810LL, 92162800527867904LL, 1208925LL, 819614629174706176LL, 1360041LL, 547066457821544448LL, 1511157LL, 274518286468382720LL, 1662273LL, 1970115115220992LL, 1813388LL, 729421943762059264LL, 1964504LL, 456873772408897536LL, 2115620LL, 184325601055735808LL, 2266735LL, 911777429702574080LL, 2417851LL, 639229258349412352LL, 2568967LL, 366681086996250624LL, 2720083LL, 94132915643088896LL, 2871198LL, 821584744289927168LL, 3022314LL, 549036572936765440LL, 3173430LL, 276488401583603712LL, 3324546LL, 3940230230441984LL, 3475661LL, 731392058877280256LL, 3626777LL, 458843887524118528LL, 3777893LL, 186295716170956800LL, 3929008LL, 913747544817795072LL, 4080124LL, 641199373464633344LL, 4231240LL, 368651202111471616LL, 4382356LL, 96103030758309888LL, 4533471LL, 823554859405148160LL, 4684587LL, 551006688051986432LL, 4835703LL, 278458516698824704LL, 4986819LL, 5910345345662976LL, 5137934LL, 733362173992501248LL, 5289050LL, 460814002639339520LL, 5440166LL, 188265831286177792LL, 5591281LL, 915717659933016064LL, 5742397LL, 643169488579854336LL, 5893513LL, 370621317226692608LL, 6044629LL, 98073145873530880LL, 6195744LL, 825524974520369152LL, 6346860LL, 552976803167207424LL, 6497976LL, 280428631814045696LL, 6649092LL, 7880460460883968LL, 6800207LL, 735332289107722240LL, 6951323LL, 462784117754560512LL, 7102439LL, 190235946401398784LL, 7253554LL, 917687775048237056LL, 7404670LL, 645139603695075328LL, 7555786LL, 372591432341913600LL, 7706902LL, 100043260988751872LL, 7858017LL, 827495089635590144LL, 8009133LL, 554946918282428416LL, 8160249LL, 282398746929266688LL, 8311365LL, 9850575576104960LL, 8462480LL, 737302404222943232LL, 8613596LL, 464754232869781504LL, 8764712LL, 192206061516619776LL, 8915827LL, 919657890163458048LL, 9066943LL, 647109718810296320LL, 9218059LL, 374561547457134592LL, 9369175LL, 102013376103972864LL, 9520290LL, 829465204750811136LL, }, { 0LL, 0LL, 9671406LL, 556917033397649408LL, 19342813LL, 113834066795298816LL, 29014219LL, 670751100192948224LL, 38685626LL, 227668133590597632LL, 48357032LL, 784585166988247040LL, 58028439LL, 341502200385896448LL, 67699845LL, 898419233783545856LL, 77371252LL, 455336267181195264LL, 87042659LL, 12253300578844672LL, 96714065LL, 569170333976494080LL, 106385472LL, 126087367374143488LL, 116056878LL, 683004400771792896LL, 125728285LL, 239921434169442304LL, 135399691LL, 796838467567091712LL, 145071098LL, 353755500964741120LL, 154742504LL, 910672534362390528LL, 164413911LL, 467589567760039936LL, 174085318LL, 24506601157689344LL, 183756724LL, 581423634555338752LL, 193428131LL, 138340667952988160LL, 203099537LL, 695257701350637568LL, 212770944LL, 252174734748286976LL, 222442350LL, 809091768145936384LL, 232113757LL, 366008801543585792LL, 241785163LL, 922925834941235200LL, 251456570LL, 479842868338884608LL, 261127977LL, 36759901736534016LL, 270799383LL, 593676935134183424LL, 280470790LL, 150593968531832832LL, 290142196LL, 707511001929482240LL, 299813603LL, 264428035327131648LL, 309485009LL, 821345068724781056LL, 319156416LL, 378262102122430464LL, 328827822LL, 935179135520079872LL, 338499229LL, 492096168917729280LL, 348170636LL, 49013202315378688LL, 357842042LL, 605930235713028096LL, 367513449LL, 162847269110677504LL, 377184855LL, 719764302508326912LL, 386856262LL, 276681335905976320LL, 396527668LL, 833598369303625728LL, 406199075LL, 390515402701275136LL, 415870481LL, 947432436098924544LL, 425541888LL, 504349469496573952LL, 435213295LL, 61266502894223360LL, 444884701LL, 618183536291872768LL, 454556108LL, 175100569689522176LL, 464227514LL, 732017603087171584LL, 473898921LL, 288934636484820992LL, 483570327LL, 845851669882470400LL, 493241734LL, 402768703280119808LL, 502913140LL, 959685736677769216LL, 512584547LL, 516602770075418624LL, 522255954LL, 73519803473068032LL, 531927360LL, 630436836870717440LL, 541598767LL, 187353870268366848LL, 551270173LL, 744270903666016256LL, 560941580LL, 301187937063665664LL, 570612986LL, 858104970461315072LL, 580284393LL, 415022003858964480LL, 589955799LL, 971939037256613888LL, 599627206LL, 528856070654263296LL, 609298613LL, 85773104051912704LL, }, { 0LL, 0LL, 618970019LL, 642690137449562112LL, 1237940039LL, 285380274899124224LL, 1856910058LL, 928070412348686336LL, 2475880078LL, 570760549798248448LL, 3094850098LL, 213450687247810560LL, 3713820117LL, 856140824697372672LL, 4332790137LL, 498830962146934784LL, 4951760157LL, 141521099596496896LL, 5570730176LL, 784211237046059008LL, 6189700196LL, 426901374495621120LL, 6808670216LL, 69591511945183232LL, 7427640235LL, 712281649394745344LL, 8046610255LL, 354971786844307456LL, 8665580274LL, 997661924293869568LL, 9284550294LL, 640352061743431680LL, 9903520314LL, 283042199192993792LL, 10522490333LL, 925732336642555904LL, 11141460353LL, 568422474092118016LL, 11760430373LL, 211112611541680128LL, 12379400392LL, 853802748991242240LL, 12998370412LL, 496492886440804352LL, 13617340432LL, 139183023890366464LL, 14236310451LL, 781873161339928576LL, 14855280471LL, 424563298789490688LL, 15474250491LL, 67253436239052800LL, 16093220510LL, 709943573688614912LL, 16712190530LL, 352633711138177024LL, 17331160549LL, 995323848587739136LL, 17950130569LL, 638013986037301248LL, 18569100589LL, 280704123486863360LL, 19188070608LL, 923394260936425472LL, 19807040628LL, 566084398385987584LL, 20426010648LL, 208774535835549696LL, 21044980667LL, 851464673285111808LL, 21663950687LL, 494154810734673920LL, 22282920707LL, 136844948184236032LL, 22901890726LL, 779535085633798144LL, 23520860746LL, 422225223083360256LL, 24139830766LL, 64915360532922368LL, 24758800785LL, 707605497982484480LL, 25377770805LL, 350295635432046592LL, 25996740824LL, 992985772881608704LL, 26615710844LL, 635675910331170816LL, 27234680864LL, 278366047780732928LL, 27853650883LL, 921056185230295040LL, 28472620903LL, 563746322679857152LL, 29091590923LL, 206436460129419264LL, 29710560942LL, 849126597578981376LL, 30329530962LL, 491816735028543488LL, 30948500982LL, 134506872478105600LL, 31567471001LL, 777197009927667712LL, 32186441021LL, 419887147377229824LL, 32805411041LL, 62577284826791936LL, 33424381060LL, 705267422276354048LL, 34043351080LL, 347957559725916160LL, 34662321099LL, 990647697175478272LL, 35281291119LL, 633337834625040384LL, 35900261139LL, 276027972074602496LL, 36519231158LL, 918718109524164608LL, 37138201178LL, 561408246973726720LL, 37757171198LL, 204098384423288832LL, 38376141217LL, 846788521872850944LL, 38995111237LL, 489478659322413056LL, }, { 0LL, 0LL, 39614081257LL, 132168796771975168LL, 79228162514LL, 264337593543950336LL, 118842243771LL, 396506390315925504LL, 158456325028LL, 528675187087900672LL, 198070406285LL, 660843983859875840LL, 237684487542LL, 793012780631851008LL, 277298568799LL, 925181577403826176LL, 316912650057LL, 57350374175801344LL, 356526731314LL, 189519170947776512LL, 396140812571LL, 321687967719751680LL, 435754893828LL, 453856764491726848LL, 475368975085LL, 586025561263702016LL, 514983056342LL, 718194358035677184LL, 554597137599LL, 850363154807652352LL, 594211218856LL, 982531951579627520LL, 633825300114LL, 114700748351602688LL, 673439381371LL, 246869545123577856LL, 713053462628LL, 379038341895553024LL, 752667543885LL, 511207138667528192LL, 792281625142LL, 643375935439503360LL, 831895706399LL, 775544732211478528LL, 871509787656LL, 907713528983453696LL, 911123868914LL, 39882325755428864LL, 950737950171LL, 172051122527404032LL, 990352031428LL, 304219919299379200LL, 1029966112685LL, 436388716071354368LL, 1069580193942LL, 568557512843329536LL, 1109194275199LL, 700726309615304704LL, 1148808356456LL, 832895106387279872LL, 1188422437713LL, 965063903159255040LL, 1228036518971LL, 97232699931230208LL, 1267650600228LL, 229401496703205376LL, 1307264681485LL, 361570293475180544LL, 1346878762742LL, 493739090247155712LL, 1386492843999LL, 625907887019130880LL, 1426106925256LL, 758076683791106048LL, 1465721006513LL, 890245480563081216LL, 1505335087771LL, 22414277335056384LL, 1544949169028LL, 154583074107031552LL, 1584563250285LL, 286751870879006720LL, 1624177331542LL, 418920667650981888LL, 1663791412799LL, 551089464422957056LL, 1703405494056LL, 683258261194932224LL, 1743019575313LL, 815427057966907392LL, 1782633656570LL, 947595854738882560LL, 1822247737828LL, 79764651510857728LL, 1861861819085LL, 211933448282832896LL, 1901475900342LL, 344102245054808064LL, 1941089981599LL, 476271041826783232LL, 1980704062856LL, 608439838598758400LL, 2020318144113LL, 740608635370733568LL, 2059932225370LL, 872777432142708736LL, 2099546306628LL, 4946228914683904LL, 2139160387885LL, 137115025686659072LL, 2178774469142LL, 269283822458634240LL, 2218388550399LL, 401452619230609408LL, 2258002631656LL, 533621416002584576LL, 2297616712913LL, 665790212774559744LL, 2337230794170LL, 797959009546534912LL, 2376844875427LL, 930127806318510080LL, 2416458956685LL, 62296603090485248LL, 2456073037942LL, 194465399862460416LL, 2495687119199LL, 326634196634435584LL, }, { 0LL, 0LL, 2535301200456LL, 458802993406410752LL, 5070602400912LL, 917605986812821504LL, 7605903601369LL, 376408980219232256LL, 10141204801825LL, 835211973625643008LL, 12676506002282LL, 294014967032053760LL, 15211807202738LL, 752817960438464512LL, 17747108403195LL, 211620953844875264LL, 20282409603651LL, 670423947251286016LL, 22817710804108LL, 129226940657696768LL, 25353012004564LL, 588029934064107520LL, 27888313205021LL, 46832927470518272LL, 30423614405477LL, 505635920876929024LL, 32958915605933LL, 964438914283339776LL, 35494216806390LL, 423241907689750528LL, 38029518006846LL, 882044901096161280LL, 40564819207303LL, 340847894502572032LL, 43100120407759LL, 799650887908982784LL, 45635421608216LL, 258453881315393536LL, 48170722808672LL, 717256874721804288LL, 50706024009129LL, 176059868128215040LL, 53241325209585LL, 634862861534625792LL, 55776626410042LL, 93665854941036544LL, 58311927610498LL, 552468848347447296LL, 60847228810955LL, 11271841753858048LL, 63382530011411LL, 470074835160268800LL, 65917831211867LL, 928877828566679552LL, 68453132412324LL, 387680821973090304LL, 70988433612780LL, 846483815379501056LL, 73523734813237LL, 305286808785911808LL, 76059036013693LL, 764089802192322560LL, 78594337214150LL, 222892795598733312LL, 81129638414606LL, 681695789005144064LL, 83664939615063LL, 140498782411554816LL, 86200240815519LL, 599301775817965568LL, 88735542015976LL, 58104769224376320LL, 91270843216432LL, 516907762630787072LL, 93806144416888LL, 975710756037197824LL, 96341445617345LL, 434513749443608576LL, 98876746817801LL, 893316742850019328LL, 101412048018258LL, 352119736256430080LL, 103947349218714LL, 810922729662840832LL, 106482650419171LL, 269725723069251584LL, 109017951619627LL, 728528716475662336LL, 111553252820084LL, 187331709882073088LL, 114088554020540LL, 646134703288483840LL, 116623855220997LL, 104937696694894592LL, 119159156421453LL, 563740690101305344LL, 121694457621910LL, 22543683507716096LL, 124229758822366LL, 481346676914126848LL, 126765060022822LL, 940149670320537600LL, 129300361223279LL, 398952663726948352LL, 131835662423735LL, 857755657133359104LL, 134370963624192LL, 316558650539769856LL, 136906264824648LL, 775361643946180608LL, 139441566025105LL, 234164637352591360LL, 141976867225561LL, 692967630759002112LL, 144512168426018LL, 151770624165412864LL, 147047469626474LL, 610573617571823616LL, 149582770826931LL, 69376610978234368LL, 152118072027387LL, 528179604384645120LL, 154653373227843LL, 986982597791055872LL, 157188674428300LL, 445785591197466624LL, 159723975628756LL, 904588584603877376LL, }, { 0LL, 0LL, 162259276829213LL, 363391578010288128LL, 324518553658426LL, 726783156020576256LL, 486777830487640LL, 90174734030864384LL, 649037107316853LL, 453566312041152512LL, 811296384146066LL, 816957890051440640LL, 973555660975280LL, 180349468061728768LL, 1135814937804493LL, 543741046072016896LL, 1298074214633706LL, 907132624082305024LL, 1460333491462920LL, 270524202092593152LL, 1622592768292133LL, 633915780102881280LL, 1784852045121346LL, 997307358113169408LL, 1947111321950560LL, 360698936123457536LL, 2109370598779773LL, 724090514133745664LL, 2271629875608987LL, 87482092144033792LL, 2433889152438200LL, 450873670154321920LL, 2596148429267413LL, 814265248164610048LL, 2758407706096627LL, 177656826174898176LL, 2920666982925840LL, 541048404185186304LL, 3082926259755053LL, 904439982195474432LL, 3245185536584267LL, 267831560205762560LL, 3407444813413480LL, 631223138216050688LL, 3569704090242693LL, 994614716226338816LL, 3731963367071907LL, 358006294236626944LL, 3894222643901120LL, 721397872246915072LL, 4056481920730334LL, 84789450257203200LL, 4218741197559547LL, 448181028267491328LL, 4381000474388760LL, 811572606277779456LL, 4543259751217974LL, 174964184288067584LL, 4705519028047187LL, 538355762298355712LL, 4867778304876400LL, 901747340308643840LL, 5030037581705614LL, 265138918318931968LL, 5192296858534827LL, 628530496329220096LL, 5354556135364040LL, 991922074339508224LL, 5516815412193254LL, 355313652349796352LL, 5679074689022467LL, 718705230360084480LL, 5841333965851681LL, 82096808370372608LL, 6003593242680894LL, 445488386380660736LL, 6165852519510107LL, 808879964390948864LL, 6328111796339321LL, 172271542401236992LL, 6490371073168534LL, 535663120411525120LL, 6652630349997747LL, 899054698421813248LL, 6814889626826961LL, 262446276432101376LL, 6977148903656174LL, 625837854442389504LL, 7139408180485387LL, 989229432452677632LL, 7301667457314601LL, 352621010462965760LL, 7463926734143814LL, 716012588473253888LL, 7626186010973028LL, 79404166483542016LL, 7788445287802241LL, 442795744493830144LL, 7950704564631454LL, 806187322504118272LL, 8112963841460668LL, 169578900514406400LL, 8275223118289881LL, 532970478524694528LL, 8437482395119094LL, 896362056534982656LL, 8599741671948308LL, 259753634545270784LL, 8762000948777521LL, 623145212555558912LL, 8924260225606734LL, 986536790565847040LL, 9086519502435948LL, 349928368576135168LL, 9248778779265161LL, 713319946586423296LL, 9411038056094375LL, 76711524596711424LL, 9573297332923588LL, 440103102606999552LL, 9735556609752801LL, 803494680617287680LL, 9897815886582015LL, 166886258627575808LL, 10060075163411228LL, 530277836637863936LL, 10222334440240441LL, 893669414648152064LL} }; libdfp-1.0.17/libbid/bid128_add.c000066400000000000000000003110501504475242000162350ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #if DECIMAL_CALL_BY_REFERENCE void bid64dq_add (UINT64 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64dq_add (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qq_add (&res, &x1, py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid64qq_add (x1, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64qd_add (UINT64 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qd_add (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qq_add (&res, px, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid64qq_add (x, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64qq_add (UINT64 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qq_add (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 one = { {0x0000000000000001ull, 0x3040000000000000ull} }; UINT64 res = 0xbaddbaddbaddbaddull; BID_SWAP128 (one); #if DECIMAL_CALL_BY_REFERENCE bid64qqq_fma (&res, &one, &x, &y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid64qqq_fma (one, x, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dd_add (UINT128 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dd_add (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1, y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_add (&res, &x1, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_add (x1, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dq_add (UINT128 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dq_add (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_add (&res, &x1, py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_add (x1, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128qd_add (UINT128 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128qd_add (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_add (&res, px, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_add (x, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } // bid128_add stands for bid128qq_add /***************************************************************************** * BID64/BID128 sub ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64dq_sub (UINT64 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64dq_sub (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qq_sub (&res, &x1, py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid64qq_sub (x1, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64qd_sub (UINT64 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qd_sub (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qq_sub (&res, px, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid64qq_sub (x, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64qq_sub (UINT64 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qq_sub (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 one = { {0x0000000000000001ull, 0x3040000000000000ull} }; UINT64 res = 0xbaddbaddbaddbaddull; UINT64 y_sign; BID_SWAP128 (one); if ((y.w[HIGH_128W] & MASK_NAN) != MASK_NAN) { // y is not NAN // change its sign y_sign = y.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative if (y_sign) y.w[HIGH_128W] = y.w[HIGH_128W] & 0x7fffffffffffffffull; else y.w[HIGH_128W] = y.w[HIGH_128W] | 0x8000000000000000ull; } #if DECIMAL_CALL_BY_REFERENCE bid64qqq_fma (&res, &one, &x, &y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid64qqq_fma (one, x, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dd_sub (UINT128 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dd_sub (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1, y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_sub (&res, &x1, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_sub (x1, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dq_sub (UINT128 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dq_sub (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_sub (&res, &x1, py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_sub (x1, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128qd_sub (UINT128 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128qd_sub (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_sub (&res, px, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_sub (x, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_add (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128_add (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT64 x_sign, y_sign, tmp_sign; UINT64 x_exp, y_exp, tmp_exp; // e1 = x_exp, e2 = y_exp UINT64 C1_hi, C2_hi, tmp_signif_hi; UINT64 C1_lo, C2_lo, tmp_signif_lo; // Note: C1.w[1], C1.w[0] represent C1_hi, C1_lo (all UINT64) // Note: C2.w[1], C2.w[0] represent C2_hi, C2_lo (all UINT64) UINT64 tmp64, tmp64A, tmp64B; BID_UI64DOUBLE tmp1, tmp2; int x_nr_bits, y_nr_bits; int q1, q2, delta, scale, x1, ind, shift, tmp_inexact = 0; UINT64 halfulp64; UINT128 halfulp128; UINT128 C1, C2; UINT128 ten2m1; UINT128 highf2star; // top 128 bits in f2*; low 128 bits in R256[1], R256[0] UINT256 P256, Q256, R256; int is_inexact = 0, is_midpoint_lt_even = 0, is_midpoint_gt_even = 0; int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; int second_pass = 0; BID_SWAP128 (x); BID_SWAP128 (y); x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative y_sign = y.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // check for NaN or Infinity if (((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) || ((y.w[1] & MASK_SPECIAL) == MASK_SPECIAL)) { // x is special or y is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; // if y = SNaN signal invalid exception if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } BID_SWAP128 (res); BID_RETURN (res); } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN // check first for non-canonical NaN payload if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (y.w[0] > 0x38c15b09ffffffffull))) { y.w[1] = y.w[1] & 0xffffc00000000000ull; y.w[0] = 0x0ull; } if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (y) res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = y.w[0]; } else { // y is QNaN // return y res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = y.w[0]; } BID_SWAP128 (res); BID_RETURN (res); } else { // neither x not y is NaN; at least one is infinity if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x is infinity if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y is infinity // if same sign, return either of them if ((x.w[1] & MASK_SIGN) == (y.w[1] & MASK_SIGN)) { res.w[1] = x_sign | MASK_INF; res.w[0] = 0x0ull; } else { // x and y are infinities of opposite signs // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return QNaN Indefinite res.w[1] = 0x7c00000000000000ull; res.w[0] = 0x0000000000000000ull; } } else { // y is 0 or finite // return x res.w[1] = x_sign | MASK_INF; res.w[0] = 0x0ull; } } else { // x is not NaN or infinity, so y must be infinity res.w[1] = y_sign | MASK_INF; res.w[0] = 0x0ull; } BID_SWAP128 (res); BID_RETURN (res); } } // unpack the arguments // unpack x C1_hi = x.w[1] & MASK_COEFF; C1_lo = x.w[0]; // test for non-canonical values: // - values whose encoding begins with x00, x01, or x10 and whose // coefficient is larger than 10^34 -1, or // - values whose encoding begins with x1100, x1101, x1110 (if NaNs // and infinitis were eliminated already this test is reduced to // checking for x10x) // x is not infinity; check for non-canonical values - treated as zero if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11; non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1_hi = 0; // significand high C1_lo = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1_hi > 0x0001ed09bead87c0ull || (C1_hi == 0x0001ed09bead87c0ull && C1_lo > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1_hi = 0; C1_lo = 0; } else { // canonical ; } } // unpack y C2_hi = y.w[1] & MASK_COEFF; C2_lo = y.w[0]; // y is not infinity; check for non-canonical values - treated as zero if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11; non-canonical y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C2_hi = 0; // significand high C2_lo = 0; // significand low } else { // G0_G1 != 11 y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C2_hi > 0x0001ed09bead87c0ull || (C2_hi == 0x0001ed09bead87c0ull && C2_lo > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 C2_hi = 0; C2_lo = 0; } else { // canonical ; } } if ((C1_hi == 0x0ull) && (C1_lo == 0x0ull)) { // x is 0 and y is not special // if y is 0 return 0 with the smaller exponent if ((C2_hi == 0x0ull) && (C2_lo == 0x0ull)) { if (x_exp < y_exp) res.w[1] = x_exp; else res.w[1] = y_exp; if (x_sign && y_sign) res.w[1] = res.w[1] | x_sign; // both negative else if (rnd_mode == ROUNDING_DOWN && x_sign != y_sign) res.w[1] = res.w[1] | 0x8000000000000000ull; // -0 // else; // res = +0 res.w[0] = 0; } else { // for 0 + y return y, with the preferred exponent if (y_exp <= x_exp) { res.w[1] = y.w[1]; res.w[0] = y.w[0]; } else { // if y_exp > x_exp // return (C2 * 10^scale) * 10^(y_exp - scale) // where scale = min (P34-q2, y_exp-x_exp) // determine q2 = nr. of decimal digits in y // determine first the nr. of bits in y (y_nr_bits) if (C2_hi == 0) { // y_bits is the nr. of bits in C2_lo if (C2_lo >= 0x0020000000000000ull) { // y >= 2^53 // split the 64-bit value in two 32-bit halves to avoid // rounding errors if (C2_lo >= 0x0000000100000000ull) { // y >= 2^32 tmp2.d = (double) (C2_lo >> 32); // exact conversion y_nr_bits = 32 + ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // y < 2^32 tmp2.d = (double) (C2_lo); // exact conversion y_nr_bits = ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if y < 2^53 tmp2.d = (double) C2_lo; // exact conversion y_nr_bits = ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C2_hi != 0 => nr. bits = 64 + nr_bits (C2_hi) tmp2.d = (double) C2_hi; // exact conversion y_nr_bits = 64 + ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } q2 = nr_digits[y_nr_bits].digits; if (q2 == 0) { q2 = nr_digits[y_nr_bits].digits1; if (C2_hi > nr_digits[y_nr_bits].threshold_hi || (C2_hi == nr_digits[y_nr_bits].threshold_hi && C2_lo >= nr_digits[y_nr_bits].threshold_lo)) q2++; } // return (C2 * 10^scale) * 10^(y_exp - scale) // where scale = min (P34-q2, y_exp-x_exp) scale = P34 - q2; ind = (y_exp - x_exp) >> 49; if (ind < scale) scale = ind; if (scale == 0) { res.w[1] = y.w[1]; res.w[0] = y.w[0]; } else if (q2 <= 19) { // y fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C2_lo * ten2k64[scale] __mul_64x64_to_128MACH (res, C2_lo, ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C2_lo * ten2k128[scale - 20] __mul_128x64_to_128 (res, C2_lo, ten2k128[scale - 20]); } } else { // y fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C2 C2.w[1] = C2_hi; C2.w[0] = C2_lo; __mul_128x64_to_128 (res, ten2k64[scale], C2); } // subtract scale from the exponent y_exp = y_exp - ((UINT64) scale << 49); res.w[1] = res.w[1] | y_sign | y_exp; } } BID_SWAP128 (res); BID_RETURN (res); } else if ((C2_hi == 0x0ull) && (C2_lo == 0x0ull)) { // y is 0 and x is not special, and not zero // for x + 0 return x, with the preferred exponent if (x_exp <= y_exp) { res.w[1] = x.w[1]; res.w[0] = x.w[0]; } else { // if x_exp > y_exp // return (C1 * 10^scale) * 10^(x_exp - scale) // where scale = min (P34-q1, x_exp-y_exp) // determine q1 = nr. of decimal digits in x // determine first the nr. of bits in x if (C1_hi == 0) { // x_bits is the nr. of bits in C1_lo if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid // rounding errors if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1_lo >> 32); // exact conversion x_nr_bits = 32 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1_lo); // exact conversion x_nr_bits = ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1_lo; // exact conversion x_nr_bits = ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi) tmp1.d = (double) C1_hi; // exact conversion x_nr_bits = 64 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q1 = nr_digits[x_nr_bits].digits; if (q1 == 0) { q1 = nr_digits[x_nr_bits].digits1; if (C1_hi > nr_digits[x_nr_bits].threshold_hi || (C1_hi == nr_digits[x_nr_bits].threshold_hi && C1_lo >= nr_digits[x_nr_bits].threshold_lo)) q1++; } // return (C1 * 10^scale) * 10^(x_exp - scale) // where scale = min (P34-q1, x_exp-y_exp) scale = P34 - q1; ind = (x_exp - y_exp) >> 49; if (ind < scale) scale = ind; if (scale == 0) { res.w[1] = x.w[1]; res.w[0] = x.w[0]; } else if (q1 <= 19) { // x fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C1_lo * ten2k64[scale] __mul_64x64_to_128MACH (res, C1_lo, ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C1_lo * ten2k128[scale - 20] __mul_128x64_to_128 (res, C1_lo, ten2k128[scale - 20]); } } else { // x fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C1 C1.w[1] = C1_hi; C1.w[0] = C1_lo; __mul_128x64_to_128 (res, ten2k64[scale], C1); } // subtract scale from the exponent x_exp = x_exp - ((UINT64) scale << 49); res.w[1] = res.w[1] | x_sign | x_exp; } BID_SWAP128 (res); BID_RETURN (res); } else { // x and y are not canonical, not special, and are not zero // note that the result may still be zero, and then it has to have the // preferred exponent if (x_exp < y_exp) { // if exp_x < exp_y then swap x and y tmp_sign = x_sign; tmp_exp = x_exp; tmp_signif_hi = C1_hi; tmp_signif_lo = C1_lo; x_sign = y_sign; x_exp = y_exp; C1_hi = C2_hi; C1_lo = C2_lo; y_sign = tmp_sign; y_exp = tmp_exp; C2_hi = tmp_signif_hi; C2_lo = tmp_signif_lo; } // q1 = nr. of decimal digits in x // determine first the nr. of bits in x if (C1_hi == 0) { // x_bits is the nr. of bits in C1_lo if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53 //split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1_lo >> 32); // exact conversion x_nr_bits = 32 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1_lo); // exact conversion x_nr_bits = ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1_lo; // exact conversion x_nr_bits = ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi) tmp1.d = (double) C1_hi; // exact conversion x_nr_bits = 64 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q1 = nr_digits[x_nr_bits].digits; if (q1 == 0) { q1 = nr_digits[x_nr_bits].digits1; if (C1_hi > nr_digits[x_nr_bits].threshold_hi || (C1_hi == nr_digits[x_nr_bits].threshold_hi && C1_lo >= nr_digits[x_nr_bits].threshold_lo)) q1++; } // q2 = nr. of decimal digits in y // determine first the nr. of bits in y (y_nr_bits) if (C2_hi == 0) { // y_bits is the nr. of bits in C2_lo if (C2_lo >= 0x0020000000000000ull) { // y >= 2^53 //split the 64-bit value in two 32-bit halves to avoid rounding errors if (C2_lo >= 0x0000000100000000ull) { // y >= 2^32 tmp2.d = (double) (C2_lo >> 32); // exact conversion y_nr_bits = 32 + ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // y < 2^32 tmp2.d = (double) (C2_lo); // exact conversion y_nr_bits = ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if y < 2^53 tmp2.d = (double) C2_lo; // exact conversion y_nr_bits = ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C2_hi != 0 => nr. bits = 64 + nr_bits (C2_hi) tmp2.d = (double) C2_hi; // exact conversion y_nr_bits = 64 + ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff); } q2 = nr_digits[y_nr_bits].digits; if (q2 == 0) { q2 = nr_digits[y_nr_bits].digits1; if (C2_hi > nr_digits[y_nr_bits].threshold_hi || (C2_hi == nr_digits[y_nr_bits].threshold_hi && C2_lo >= nr_digits[y_nr_bits].threshold_lo)) q2++; } delta = q1 + (int) (x_exp >> 49) - q2 - (int) (y_exp >> 49); if (delta >= P34) { // round the result directly because 0 < C2 < ulp (C1 * 10^(x_exp-e2)) // n = C1 * 10^e1 or n = C1 +/- 10^(q1-P34)) * 10^e1 // the result is inexact; the preferred exponent is the least possible if (delta >= P34 + 1) { // for RN the result is the operand with the larger magnitude, // possibly scaled up by 10^(P34-q1) // an overflow cannot occur in this case (rounding to nearest) if (q1 < P34) { // scale C1 up by 10^(P34-q1) // Note: because delta >= P34+1 it is certain that // x_exp - ((UINT64)scale << 49) will stay above e_min scale = P34 - q1; if (q1 <= 19) { // C1 fits in 64 bits // 1 <= q1 <= 19 => 15 <= scale <= 33 if (scale <= 19) { // 10^scale fits in 64 bits __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo); } else { // if 20 <= scale <= 33 // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where // (C1 * 10^(scale-19)) fits in 64 bits C1_lo = C1_lo * ten2k64[scale - 19]; __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo); } } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C1 = ten2k64[P34 - q1] * C1 __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1); } x_exp = x_exp - ((UINT64) scale << 49); C1_hi = C1.w[1]; C1_lo = C1.w[0]; } // some special cases arise: if delta = P34 + 1 and C1 = 10^(P34-1) // (after scaling) and x_sign != y_sign and C2 > 5*10^(q2-1) => // subtract 1 ulp // Note: do this only for rounding to nearest; for other rounding // modes the correction will be applied next if ((rnd_mode == ROUNDING_TO_NEAREST || rnd_mode == ROUNDING_TIES_AWAY) && delta == (P34 + 1) && C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b0a00000000ull && x_sign != y_sign && ((q2 <= 19 && C2_lo > midpoint64[q2 - 1]) || (q2 >= 20 && (C2_hi > midpoint128 [q2 - 20]. w[1] || (C2_hi == midpoint128 [q2 - 20]. w[1] && C2_lo > midpoint128 [q2 - 20]. w [0]))))) { // C1 = 10^34 - 1 and decrement x_exp by 1 (no underflow possible) C1_hi = 0x0001ed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } if (rnd_mode != ROUNDING_TO_NEAREST) { if ((rnd_mode == ROUNDING_DOWN && x_sign && y_sign) || (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) { // add 1 ulp and then check for overflow C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; if (x_exp == EXP_MAX_P1) { // overflow C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; x_exp = 0; // x_sign is preserved // set overflow flag (the inexact flag was set too) *pfpsf |= OVERFLOW_EXCEPTION; } } } else if ((rnd_mode == ROUNDING_DOWN && !x_sign && y_sign) || (rnd_mode == ROUNDING_UP && x_sign && !y_sign) || (rnd_mode == ROUNDING_TO_ZERO && x_sign != y_sign)) { // subtract 1 ulp from C1 // Note: because delta >= P34 + 1 the result cannot be zero C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi = C1_hi - 1; // if the coefficient is 10^33 - 1 then make it 10^34 - 1 and // decrease the exponent by 1 (because delta >= P34 + 1 the // exponent will not become less than e_min) // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // make C1 = 10^34 - 1 C1_hi = 0x0001ed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } } else { ; // the result is already correct } } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // assemble the result res.w[1] = x_sign | x_exp | C1_hi; res.w[0] = C1_lo; } else { // delta = P34 // in most cases, the smaller operand may be < or = or > 1/2 ulp of the // larger operand // however, the case C1 = 10^(q1-1) and x_sign != y_sign is special due // to accuracy loss after subtraction, and will be treated separately if (x_sign == y_sign || (q1 <= 20 && (C1_hi != 0 || C1_lo != ten2k64[q1 - 1])) || (q1 >= 21 && (C1_hi != ten2k128[q1 - 21].w[1] || C1_lo != ten2k128[q1 - 21].w[0]))) { // if x_sign == y_sign or C1 != 10^(q1-1) // compare C2 with 1/2 ulp = 5 * 10^(q2-1), the latter read from table // Note: cases q1<=19 and q1>=20 can be coalesced at some latency cost if (q2 <= 19) { // C2 and 5*10^(q2-1) both fit in 64 bits halfulp64 = midpoint64[q2 - 1]; // 5 * 10^(q2-1) if (C2_lo < halfulp64) { // n2 < 1/2 ulp (n1) // for RN the result is the operand with the larger magnitude, // possibly scaled up by 10^(P34-q1) // an overflow cannot occur in this case (rounding to nearest) if (q1 < P34) { // scale C1 up by 10^(P34-q1) // Note: because delta = P34 it is certain that // x_exp - ((UINT64)scale << 49) will stay above e_min scale = P34 - q1; if (q1 <= 19) { // C1 fits in 64 bits // 1 <= q1 <= 19 => 15 <= scale <= 33 if (scale <= 19) { // 10^scale fits in 64 bits __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo); } else { // if 20 <= scale <= 33 // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where // (C1 * 10^(scale-19)) fits in 64 bits C1_lo = C1_lo * ten2k64[scale - 19]; __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo); } } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C1 = ten2k64[P34 - q1] * C1 __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1); } x_exp = x_exp - ((UINT64) scale << 49); C1_hi = C1.w[1]; C1_lo = C1.w[0]; } if (rnd_mode != ROUNDING_TO_NEAREST) { if ((rnd_mode == ROUNDING_DOWN && x_sign && y_sign) || (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) { // add 1 ulp and then check for overflow C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; if (x_exp == EXP_MAX_P1) { // overflow C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; x_exp = 0; // x_sign is preserved // set overflow flag (the inexact flag was set too) *pfpsf |= OVERFLOW_EXCEPTION; } } } else if ((rnd_mode == ROUNDING_DOWN && !x_sign && y_sign) || (rnd_mode == ROUNDING_UP && x_sign && !y_sign) || (rnd_mode == ROUNDING_TO_ZERO && x_sign != y_sign)) { // subtract 1 ulp from C1 // Note: because delta >= P34 + 1 the result cannot be zero C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi = C1_hi - 1; // if the coefficient is 10^33-1 then make it 10^34-1 and // decrease the exponent by 1 (because delta >= P34 + 1 the // exponent will not become less than e_min) // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // make C1 = 10^34 - 1 C1_hi = 0x0001ed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } } else { ; // the result is already correct } } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // assemble the result res.w[1] = x_sign | x_exp | C1_hi; res.w[0] = C1_lo; } else if ((C2_lo == halfulp64) && (q1 < P34 || ((C1_lo & 0x1) == 0))) { // n2 = 1/2 ulp (n1) and C1 is even // the result is the operand with the larger magnitude, // possibly scaled up by 10^(P34-q1) // an overflow cannot occur in this case (rounding to nearest) if (q1 < P34) { // scale C1 up by 10^(P34-q1) // Note: because delta = P34 it is certain that // x_exp - ((UINT64)scale << 49) will stay above e_min scale = P34 - q1; if (q1 <= 19) { // C1 fits in 64 bits // 1 <= q1 <= 19 => 15 <= scale <= 33 if (scale <= 19) { // 10^scale fits in 64 bits __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo); } else { // if 20 <= scale <= 33 // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where // (C1 * 10^(scale-19)) fits in 64 bits C1_lo = C1_lo * ten2k64[scale - 19]; __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo); } } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C1 = ten2k64[P34 - q1] * C1 __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1); } x_exp = x_exp - ((UINT64) scale << 49); C1_hi = C1.w[1]; C1_lo = C1.w[0]; } if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign == y_sign && (C1_lo & 0x01)) || (rnd_mode == ROUNDING_TIES_AWAY && x_sign == y_sign) || (rnd_mode == ROUNDING_UP && !x_sign && !y_sign) || (rnd_mode == ROUNDING_DOWN && x_sign && y_sign)) { // add 1 ulp and then check for overflow C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; if (x_exp == EXP_MAX_P1) { // overflow C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; x_exp = 0; // x_sign is preserved // set overflow flag (the inexact flag was set too) *pfpsf |= OVERFLOW_EXCEPTION; } } } else if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign != y_sign && (C1_lo & 0x01)) || (rnd_mode == ROUNDING_DOWN && !x_sign && y_sign) || (rnd_mode == ROUNDING_UP && x_sign && !y_sign) || (rnd_mode == ROUNDING_TO_ZERO && x_sign != y_sign)) { // subtract 1 ulp from C1 // Note: because delta >= P34 + 1 the result cannot be zero C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi = C1_hi - 1; // if the coefficient is 10^33 - 1 then make it 10^34 - 1 // and decrease the exponent by 1 (because delta >= P34 + 1 // the exponent will not become less than e_min) // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // make C1 = 10^34 - 1 C1_hi = 0x0001ed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } } else { ; // the result is already correct } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // assemble the result res.w[1] = x_sign | x_exp | C1_hi; res.w[0] = C1_lo; } else { // if C2_lo > halfulp64 || // (C2_lo == halfulp64 && q1 == P34 && ((C1_lo & 0x1) == 1)), i.e. // 1/2 ulp(n1) < n2 < 1 ulp(n1) or n2 = 1/2 ulp(n1) and C1 odd // res = x+1 ulp if n1*n2 > 0 and res = x-1 ulp if n1*n2 < 0 if (q1 < P34) { // then 1 ulp = 10^(e1+q1-P34) < 10^e1 // Note: if (q1 == P34) then 1 ulp = 10^(e1+q1-P34) = 10^e1 // because q1 < P34 we must first replace C1 by // C1 * 10^(P34-q1), and must decrease the exponent by // (P34-q1) (it will still be at least e_min) scale = P34 - q1; if (q1 <= 19) { // C1 fits in 64 bits // 1 <= q1 <= 19 => 15 <= scale <= 33 if (scale <= 19) { // 10^scale fits in 64 bits __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo); } else { // if 20 <= scale <= 33 // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where // (C1 * 10^(scale-19)) fits in 64 bits C1_lo = C1_lo * ten2k64[scale - 19]; __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo); } } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C1 = ten2k64[P34 - q1] * C1 __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1); } x_exp = x_exp - ((UINT64) scale << 49); C1_hi = C1.w[1]; C1_lo = C1.w[0]; // check for rounding overflow if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; } } if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign != y_sign) || (rnd_mode == ROUNDING_TIES_AWAY && x_sign != y_sign && C2_lo != halfulp64) || (rnd_mode == ROUNDING_DOWN && !x_sign && y_sign) || (rnd_mode == ROUNDING_UP && x_sign && !y_sign) || (rnd_mode == ROUNDING_TO_ZERO && x_sign != y_sign)) { // the result is x - 1 // for RN n1 * n2 < 0; underflow not possible C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi--; // check if we crossed into the lower decade if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1 C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1 C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; // no underflow, because n1 >> n2 } } else if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign == y_sign) || (rnd_mode == ROUNDING_TIES_AWAY && x_sign == y_sign) || (rnd_mode == ROUNDING_DOWN && x_sign && y_sign) || (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) { // the result is x + 1 // for RN x_sign = y_sign, i.e. n1*n2 > 0 C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; if (x_exp == EXP_MAX_P1) { // overflow C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; x_exp = 0; // x_sign is preserved // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; } } } else { ; // the result is x } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // assemble the result res.w[1] = x_sign | x_exp | C1_hi; res.w[0] = C1_lo; } } else { // if q2 >= 20 then 5*10^(q2-1) and C2 (the latter in // most cases) fit only in more than 64 bits halfulp128 = midpoint128[q2 - 20]; // 5 * 10^(q2-1) if ((C2_hi < halfulp128.w[1]) || (C2_hi == halfulp128.w[1] && C2_lo < halfulp128.w[0])) { // n2 < 1/2 ulp (n1) // the result is the operand with the larger magnitude, // possibly scaled up by 10^(P34-q1) // an overflow cannot occur in this case (rounding to nearest) if (q1 < P34) { // scale C1 up by 10^(P34-q1) // Note: because delta = P34 it is certain that // x_exp - ((UINT64)scale << 49) will stay above e_min scale = P34 - q1; if (q1 <= 19) { // C1 fits in 64 bits // 1 <= q1 <= 19 => 15 <= scale <= 33 if (scale <= 19) { // 10^scale fits in 64 bits __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo); } else { // if 20 <= scale <= 33 // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where // (C1 * 10^(scale-19)) fits in 64 bits C1_lo = C1_lo * ten2k64[scale - 19]; __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo); } } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C1 = ten2k64[P34 - q1] * C1 __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1); } C1_hi = C1.w[1]; C1_lo = C1.w[0]; x_exp = x_exp - ((UINT64) scale << 49); } if (rnd_mode != ROUNDING_TO_NEAREST) { if ((rnd_mode == ROUNDING_DOWN && x_sign && y_sign) || (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) { // add 1 ulp and then check for overflow C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; if (x_exp == EXP_MAX_P1) { // overflow C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; x_exp = 0; // x_sign is preserved // set overflow flag (the inexact flag was set too) *pfpsf |= OVERFLOW_EXCEPTION; } } } else if ((rnd_mode == ROUNDING_DOWN && !x_sign && y_sign) || (rnd_mode == ROUNDING_UP && x_sign && !y_sign) || (rnd_mode == ROUNDING_TO_ZERO && x_sign != y_sign)) { // subtract 1 ulp from C1 // Note: because delta >= P34 + 1 the result cannot be zero C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi = C1_hi - 1; // if the coefficient is 10^33-1 then make it 10^34-1 and // decrease the exponent by 1 (because delta >= P34 + 1 the // exponent will not become less than e_min) // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // make C1 = 10^34 - 1 C1_hi = 0x0001ed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } } else { ; // the result is already correct } } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // assemble the result res.w[1] = x_sign | x_exp | C1_hi; res.w[0] = C1_lo; } else if ((C2_hi == halfulp128.w[1] && C2_lo == halfulp128.w[0]) && (q1 < P34 || ((C1_lo & 0x1) == 0))) { // midpoint & lsb in C1 is 0 // n2 = 1/2 ulp (n1) and C1 is even // the result is the operand with the larger magnitude, // possibly scaled up by 10^(P34-q1) // an overflow cannot occur in this case (rounding to nearest) if (q1 < P34) { // scale C1 up by 10^(P34-q1) // Note: because delta = P34 it is certain that // x_exp - ((UINT64)scale << 49) will stay above e_min scale = P34 - q1; if (q1 <= 19) { // C1 fits in 64 bits // 1 <= q1 <= 19 => 15 <= scale <= 33 if (scale <= 19) { // 10^scale fits in 64 bits __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo); } else { // if 20 <= scale <= 33 // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where // (C1 * 10^(scale-19)) fits in 64 bits C1_lo = C1_lo * ten2k64[scale - 19]; __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo); } } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C1 = ten2k64[P34 - q1] * C1 __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1); } x_exp = x_exp - ((UINT64) scale << 49); C1_hi = C1.w[1]; C1_lo = C1.w[0]; } if (rnd_mode != ROUNDING_TO_NEAREST) { if ((rnd_mode == ROUNDING_TIES_AWAY && x_sign == y_sign) || (rnd_mode == ROUNDING_UP && !y_sign)) { // add 1 ulp and then check for overflow C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; if (x_exp == EXP_MAX_P1) { // overflow C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; x_exp = 0; // x_sign is preserved // set overflow flag (the inexact flag was set too) *pfpsf |= OVERFLOW_EXCEPTION; } } } else if ((rnd_mode == ROUNDING_DOWN && y_sign) || (rnd_mode == ROUNDING_TO_ZERO && x_sign != y_sign)) { // subtract 1 ulp from C1 // Note: because delta >= P34 + 1 the result cannot be zero C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi = C1_hi - 1; // if the coefficient is 10^33 - 1 then make it 10^34 - 1 // and decrease the exponent by 1 (because delta >= P34 + 1 // the exponent will not become less than e_min) // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // make C1 = 10^34 - 1 C1_hi = 0x0001ed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } } else { ; // the result is already correct } } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // assemble the result res.w[1] = x_sign | x_exp | C1_hi; res.w[0] = C1_lo; } else { // if C2 > halfulp128 || // (C2 == halfulp128 && q1 == P34 && ((C1 & 0x1) == 1)), i.e. // 1/2 ulp(n1) < n2 < 1 ulp(n1) or n2 = 1/2 ulp(n1) and C1 odd // res = x+1 ulp if n1*n2 > 0 and res = x-1 ulp if n1*n2 < 0 if (q1 < P34) { // then 1 ulp = 10^(e1+q1-P34) < 10^e1 // Note: if (q1 == P34) then 1 ulp = 10^(e1+q1-P34) = 10^e1 // because q1 < P34 we must first replace C1 by C1*10^(P34-q1), // and must decrease the exponent by (P34-q1) (it will still be // at least e_min) scale = P34 - q1; if (q1 <= 19) { // C1 fits in 64 bits // 1 <= q1 <= 19 => 15 <= scale <= 33 if (scale <= 19) { // 10^scale fits in 64 bits __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo); } else { // if 20 <= scale <= 33 // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where // (C1 * 10^(scale-19)) fits in 64 bits C1_lo = C1_lo * ten2k64[scale - 19]; __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo); } } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C1 = ten2k64[P34 - q1] * C1 __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1); } C1_hi = C1.w[1]; C1_lo = C1.w[0]; x_exp = x_exp - ((UINT64) scale << 49); } if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign != y_sign) || (rnd_mode == ROUNDING_TIES_AWAY && x_sign != y_sign && (C2_hi != halfulp128.w[1] || C2_lo != halfulp128.w[0])) || (rnd_mode == ROUNDING_DOWN && !x_sign && y_sign) || (rnd_mode == ROUNDING_UP && x_sign && !y_sign) || (rnd_mode == ROUNDING_TO_ZERO && x_sign != y_sign)) { // the result is x - 1 // for RN n1 * n2 < 0; underflow not possible C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi--; // check if we crossed into the lower decade if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1 C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1 C1_lo = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; // no underflow, because n1 >> n2 } } else if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign == y_sign) || (rnd_mode == ROUNDING_TIES_AWAY && x_sign == y_sign) || (rnd_mode == ROUNDING_DOWN && x_sign && y_sign) || (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) { // the result is x + 1 // for RN x_sign = y_sign, i.e. n1*n2 > 0 C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 x_exp = x_exp + EXP_P1; if (x_exp == EXP_MAX_P1) { // overflow C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; x_exp = 0; // x_sign is preserved // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; } } } else { ; // the result is x } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // assemble the result res.w[1] = x_sign | x_exp | C1_hi; res.w[0] = C1_lo; } } // end q1 >= 20 // end case where C1 != 10^(q1-1) } else { // C1 = 10^(q1-1) and x_sign != y_sign // instead of C' = (C1 * 10^(e1-e2) + C2)rnd,P34 // calculate C' = C1 * 10^(e1-e2-x1) + (C2 * 10^(-x1))rnd,P34 // where x1 = q2 - 1, 0 <= x1 <= P34 - 1 // Because C1 = 10^(q1-1) and x_sign != y_sign, C' will have P34 // digits and n = C' * 10^(e2+x1) // If the result has P34+1 digits, redo the steps above with x1+1 // If the result has P34-1 digits or less, redo the steps above with // x1-1 but only if initially x1 >= 1 // NOTE: these two steps can be improved, e.g we could guess if // P34+1 or P34-1 digits will be obtained by adding/subtracting // just the top 64 bits of the two operands // The result cannot be zero, and it cannot overflow x1 = q2 - 1; // 0 <= x1 <= P34-1 // Calculate C1 * 10^(e1-e2-x1) where 1 <= e1-e2-x1 <= P34 // scale = (int)(e1 >> 49) - (int)(e2 >> 49) - x1; 0 <= scale <= P34-1 scale = P34 - q1 + 1; // scale=e1-e2-x1 = P34+1-q1; 1<=scale<=P34 // either C1 or 10^(e1-e2-x1) may not fit is 64 bits, // but their product fits with certainty in 128 bits if (scale >= 20) { //10^(e1-e2-x1) doesn't fit in 64 bits, but C1 does __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]); } else { // if (scale >= 1 // if 1 <= scale <= 19 then 10^(e1-e2-x1) fits in 64 bits if (q1 <= 19) { // C1 fits in 64 bits __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]); } else { // q1 >= 20 C1.w[1] = C1_hi; C1.w[0] = C1_lo; __mul_128x64_to_128 (C1, ten2k64[scale], C1); } } tmp64 = C1.w[0]; // C1.w[1], C1.w[0] contains C1 * 10^(e1-e2-x1) // now round C2 to q2-x1 = 1 decimal digit // C2' = C2 + 1/2 * 10^x1 = C2 + 5 * 10^(x1-1) ind = x1 - 1; // -1 <= ind <= P34 - 2 if (ind >= 0) { // if (x1 >= 1) C2.w[0] = C2_lo; C2.w[1] = C2_hi; if (ind <= 18) { C2.w[0] = C2.w[0] + midpoint64[ind]; if (C2.w[0] < C2_lo) C2.w[1]++; } else { // 19 <= ind <= 32 C2.w[0] = C2.w[0] + midpoint128[ind - 19].w[0]; C2.w[1] = C2.w[1] + midpoint128[ind - 19].w[1]; if (C2.w[0] < C2_lo) C2.w[1]++; } // the approximation of 10^(-x1) was rounded up to 118 bits __mul_128x128_to_256 (R256, C2, ten2mk128[ind]); // R256 = C2*, f2* // calculate C2* and f2* // C2* is actually floor(C2*) in this case // C2* and f2* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // the top Ex bits of 10^(-x1) are T* = ten2mk128trunc[ind], e.g. // if x1=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f2* < 10^(-x1)) then // if floor(C1+C2*) is even then C2* = floor(C2*) - logical right // shift; C2* has p decimal digits, correct by Prop. 1) // else if floor(C1+C2*) is odd C2* = floor(C2*)-1 (logical right // shift; C2* has p decimal digits, correct by Pr. 1) // else // C2* = floor(C2*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C2* * 10^(e2+x1) if (ind <= 2) { highf2star.w[1] = 0x0; highf2star.w[0] = 0x0; // low f2* ok } else if (ind <= 21) { highf2star.w[1] = 0x0; highf2star.w[0] = R256.w[2] & maskhigh128[ind]; // low f2* ok } else { highf2star.w[1] = R256.w[3] & maskhigh128[ind]; highf2star.w[0] = R256.w[2]; // low f2* is ok } // shift right C2* by Ex-128 = shiftright128[ind] if (ind >= 3) { shift = shiftright128[ind]; if (shift < 64) { // 3 <= shift <= 63 R256.w[2] = (R256.w[2] >> shift) | (R256.w[3] << (64 - shift)); R256.w[3] = (R256.w[3] >> shift); } else { // 66 <= shift <= 102 R256.w[2] = (R256.w[3] >> (shift - 64)); R256.w[3] = 0x0ULL; } } // redundant is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; // determine inexactness of the rounding of C2* // (cannot be followed by a second rounding) // if (0 < f2* - 1/2 < 10^(-x1)) then // the result is exact // else (if f2* - 1/2 > T* then) // the result of is inexact if (ind <= 2) { if (R256.w[1] > 0x8000000000000000ull || (R256.w[1] == 0x8000000000000000ull && R256.w[0] > 0x0ull)) { // f2* > 1/2 and the result may be exact tmp64A = R256.w[1] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64A > ten2mk128trunc[ind].w[1] || (tmp64A == ten2mk128trunc[ind].w[1] && R256.w[0] >= ten2mk128trunc[ind].w[0]))) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // this rounding is applied to C2 only! // x_sign != y_sign is_inexact_gt_midpoint = 1; } // else the result is exact // rounding down, unless a midpoint in [ODD, EVEN] } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // this rounding is applied to C2 only! // x_sign != y_sign is_inexact_lt_midpoint = 1; } } else if (ind <= 21) { // if 3 <= ind <= 21 if (highf2star.w[1] > 0x0 || (highf2star.w[1] == 0x0 && highf2star.w[0] > onehalf128[ind]) || (highf2star.w[1] == 0x0 && highf2star.w[0] == onehalf128[ind] && (R256.w[1] || R256.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64A = highf2star.w[0] - onehalf128[ind]; tmp64B = highf2star.w[1]; if (tmp64A > highf2star.w[0]) tmp64B--; if (tmp64B || tmp64A || R256.w[1] > ten2mk128trunc[ind].w[1] || (R256.w[1] == ten2mk128trunc[ind].w[1] && R256.w[0] > ten2mk128trunc[ind].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // this rounding is applied to C2 only! // x_sign != y_sign is_inexact_gt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // this rounding is applied to C2 only! // x_sign != y_sign is_inexact_lt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (highf2star.w[1] > onehalf128[ind] || (highf2star.w[1] == onehalf128[ind] && (highf2star.w[0] || R256.w[1] || R256.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 // tmp64A = highf2star.w[0]; tmp64B = highf2star.w[1] - onehalf128[ind]; if (tmp64B || highf2star.w[0] || R256.w[1] > ten2mk128trunc[ind].w[1] || (R256.w[1] == ten2mk128trunc[ind].w[1] && R256.w[0] > ten2mk128trunc[ind].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // this rounding is applied to C2 only! // x_sign != y_sign is_inexact_gt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // this rounding is applied to C2 only! // x_sign != y_sign is_inexact_lt_midpoint = 1; } } // check for midpoints after determining inexactness if ((R256.w[1] || R256.w[0]) && (highf2star.w[1] == 0) && (highf2star.w[0] == 0) && (R256.w[1] < ten2mk128trunc[ind].w[1] || (R256.w[1] == ten2mk128trunc[ind].w[1] && R256.w[0] <= ten2mk128trunc[ind].w[0]))) { // the result is a midpoint if ((tmp64 + R256.w[2]) & 0x01) { // MP in [EVEN, ODD] // if floor(C2*) is odd C = floor(C2*) - 1; the result may be 0 R256.w[2]--; if (R256.w[2] == 0xffffffffffffffffull) R256.w[3]--; // this rounding is applied to C2 only! // x_sign != y_sign is_midpoint_lt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] // this rounding is applied to C2 only! // x_sign != y_sign is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } } } else { // if (ind == -1) only when x1 = 0 R256.w[2] = C2_lo; R256.w[3] = C2_hi; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } // and now subtract C1 * 10^(e1-e2-x1) - (C2 * 10^(-x1))rnd,P34 // because x_sign != y_sign this last operation is exact C1.w[0] = C1.w[0] - R256.w[2]; C1.w[1] = C1.w[1] - R256.w[3]; if (C1.w[0] > tmp64) C1.w[1]--; // borrow if (C1.w[1] >= 0x8000000000000000ull) { // negative coefficient! C1.w[0] = ~C1.w[0]; C1.w[0]++; C1.w[1] = ~C1.w[1]; if (C1.w[0] == 0x0) C1.w[1]++; tmp_sign = y_sign; // the result will have the sign of y } else { tmp_sign = x_sign; } // the difference has exactly P34 digits x_sign = tmp_sign; if (x1 >= 1) y_exp = y_exp + ((UINT64) x1 << 49); C1_hi = C1.w[1]; C1_lo = C1.w[0]; // general correction from RN to RA, RM, RP, RZ; result uses y_exp if (rnd_mode != ROUNDING_TO_NEAREST) { if ((!x_sign && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even))) || (x_sign && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_DOWN) && is_midpoint_gt_even)))) { // C1 = C1 + 1 C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 y_exp = y_exp + EXP_P1; } } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) && ((x_sign && (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TO_ZERO)) || (!x_sign && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)))) { // C1 = C1 - 1 C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi--; // check if we crossed into the lower decade if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1 C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1 C1_lo = 0x378d8e63ffffffffull; y_exp = y_exp - EXP_P1; // no underflow, because delta + q2 >= P34 + 1 } } else { ; // exact, the result is already correct } } // assemble the result res.w[1] = x_sign | y_exp | C1_hi; res.w[0] = C1_lo; } } // end delta = P34 } else { // if (|delta| <= P34 - 1) if (delta >= 0) { // if (0 <= delta <= P34 - 1) if (delta <= P34 - 1 - q2) { // calculate C' directly; the result is exact // in this case 1<=q1<=P34-1, 1<=q2<=P34-1 and 0 <= e1-e2 <= P34-2 // The coefficient of the result is C1 * 10^(e1-e2) + C2 and the // exponent is e2; either C1 or 10^(e1-e2) may not fit is 64 bits, // but their product fits with certainty in 128 bits (actually in 113) scale = delta - q1 + q2; // scale = (int)(e1 >> 49) - (int)(e2 >> 49) if (scale >= 20) { // 10^(e1-e2) does not fit in 64 bits, but C1 does __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]); C1_hi = C1.w[1]; C1_lo = C1.w[0]; } else if (scale >= 1) { // if 1 <= scale <= 19 then 10^(e1-e2) fits in 64 bits if (q1 <= 19) { // C1 fits in 64 bits __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]); } else { // q1 >= 20 C1.w[1] = C1_hi; C1.w[0] = C1_lo; __mul_128x64_to_128 (C1, ten2k64[scale], C1); } C1_hi = C1.w[1]; C1_lo = C1.w[0]; } else { // if (scale == 0) C1 is unchanged C1.w[0] = C1_lo; // C1.w[1] = C1_hi; } // now add C2 if (x_sign == y_sign) { // the result cannot overflow C1_lo = C1_lo + C2_lo; C1_hi = C1_hi + C2_hi; if (C1_lo < C1.w[0]) C1_hi++; } else { // if x_sign != y_sign C1_lo = C1_lo - C2_lo; C1_hi = C1_hi - C2_hi; if (C1_lo > C1.w[0]) C1_hi--; // the result can be zero, but it cannot overflow if (C1_lo == 0 && C1_hi == 0) { // assemble the result if (x_exp < y_exp) res.w[1] = x_exp; else res.w[1] = y_exp; res.w[0] = 0; if (rnd_mode == ROUNDING_DOWN) { res.w[1] |= 0x8000000000000000ull; } BID_SWAP128 (res); BID_RETURN (res); } if (C1_hi >= 0x8000000000000000ull) { // negative coefficient! C1_lo = ~C1_lo; C1_lo++; C1_hi = ~C1_hi; if (C1_lo == 0x0) C1_hi++; x_sign = y_sign; // the result will have the sign of y } } // assemble the result res.w[1] = x_sign | y_exp | C1_hi; res.w[0] = C1_lo; } else if (delta == P34 - q2) { // calculate C' directly; the result may be inexact if it requires // P34+1 decimal digits; in this case the 'cutoff' point for addition // is at the position of the lsb of C2, so 0 <= e1-e2 <= P34-1 // The coefficient of the result is C1 * 10^(e1-e2) + C2 and the // exponent is e2; either C1 or 10^(e1-e2) may not fit is 64 bits, // but their product fits with certainty in 128 bits (actually in 113) scale = delta - q1 + q2; // scale = (int)(e1 >> 49) - (int)(e2 >> 49) if (scale >= 20) { // 10^(e1-e2) does not fit in 64 bits, but C1 does __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]); } else if (scale >= 1) { // if 1 <= scale <= 19 then 10^(e1-e2) fits in 64 bits if (q1 <= 19) { // C1 fits in 64 bits __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]); } else { // q1 >= 20 C1.w[1] = C1_hi; C1.w[0] = C1_lo; __mul_128x64_to_128 (C1, ten2k64[scale], C1); } } else { // if (scale == 0) C1 is unchanged C1.w[1] = C1_hi; C1.w[0] = C1_lo; // only the low part is necessary } C1_hi = C1.w[1]; C1_lo = C1.w[0]; // now add C2 if (x_sign == y_sign) { // the result can overflow! C1_lo = C1_lo + C2_lo; C1_hi = C1_hi + C2_hi; if (C1_lo < C1.w[0]) C1_hi++; // test for overflow, possible only when C1 >= 10^34 if (C1_hi > 0x0001ed09bead87c0ull || (C1_hi == 0x0001ed09bead87c0ull && C1_lo >= 0x378d8e6400000000ull)) { // C1 >= 10^34 // in this case q = P34 + 1 and x = q - P34 = 1, so multiply // C'' = C'+ 5 = C1 + 5 by k1 ~ 10^(-1) calculated for P34 + 1 // decimal digits // Calculate C'' = C' + 1/2 * 10^x if (C1_lo >= 0xfffffffffffffffbull) { // low half add has carry C1_lo = C1_lo + 5; C1_hi = C1_hi + 1; } else { C1_lo = C1_lo + 5; } // the approximation of 10^(-1) was rounded up to 118 bits // 10^(-1) =~ 33333333333333333333333333333400 * 2^-129 // 10^(-1) =~ 19999999999999999999999999999a00 * 2^-128 C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C'' ten2m1.w[1] = 0x1999999999999999ull; ten2m1.w[0] = 0x9999999999999a00ull; __mul_128x128_to_256 (P256, C1, ten2m1); // P256 = C*, f* // C* is actually floor(C*) in this case // the top Ex = 128 bits of 10^(-1) are // T* = 0x00199999999999999999999999999999 // if (0 < f* < 10^(-x)) then // if floor(C*) is even then C = floor(C*) - logical right // shift; C has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C = floor(C*) - 1 (logical right // shift; C has p decimal digits, correct by Pr. 1) // else // C = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C * 10^(e2+x) if ((P256.w[1] || P256.w[0]) && (P256.w[1] < 0x1999999999999999ull || (P256.w[1] == 0x1999999999999999ull && P256.w[0] <= 0x9999999999999999ull))) { // the result is a midpoint if (P256.w[2] & 0x01) { is_midpoint_gt_even = 1; // if floor(C*) is odd C = floor(C*) - 1; the result is not 0 P256.w[2]--; if (P256.w[2] == 0xffffffffffffffffull) P256.w[3]--; } else { is_midpoint_lt_even = 1; } } // n = Cstar * 10^(e2+1) y_exp = y_exp + EXP_P1; // C* != 10^P because C* has P34 digits // check for overflow if (y_exp == EXP_MAX_P1 && (rnd_mode == ROUNDING_TO_NEAREST || rnd_mode == ROUNDING_TIES_AWAY)) { // overflow for RN res.w[1] = x_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0ull; // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; BID_SWAP128 (res); BID_RETURN (res); } // if (0 < f* - 1/2 < 10^(-x)) then // the result of the addition is exact // else // the result of the addition is inexact if (P256.w[1] > 0x8000000000000000ull || (P256.w[1] == 0x8000000000000000ull && P256.w[0] > 0x0ull)) { // the result may be exact tmp64 = P256.w[1] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > 0x1999999999999999ull || (tmp64 == 0x1999999999999999ull && P256.w[0] >= 0x9999999999999999ull))) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact = 1; } // else the result is exact } else { // the result is inexact // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact = 1; } C1_hi = P256.w[3]; C1_lo = P256.w[2]; if (!is_midpoint_gt_even && !is_midpoint_lt_even) { is_inexact_lt_midpoint = is_inexact && (P256.w[1] & 0x8000000000000000ull); is_inexact_gt_midpoint = is_inexact && !(P256.w[1] & 0x8000000000000000ull); } // general correction from RN to RA, RM, RP, RZ; // result uses y_exp if (rnd_mode != ROUNDING_TO_NEAREST) { if ((!x_sign && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even))) || (x_sign && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_DOWN) && is_midpoint_gt_even)))) { // C1 = C1 + 1 C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 y_exp = y_exp + EXP_P1; } } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) && ((x_sign && (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TO_ZERO)) || (!x_sign && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)))) { // C1 = C1 - 1 C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi--; // check if we crossed into the lower decade if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1 C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1 C1_lo = 0x378d8e63ffffffffull; y_exp = y_exp - EXP_P1; // no underflow, because delta + q2 >= P34 + 1 } } else { ; // exact, the result is already correct } // in all cases check for overflow (RN and RA solved already) if (y_exp == EXP_MAX_P1) { // overflow if ((rnd_mode == ROUNDING_DOWN && x_sign) || // RM and res < 0 (rnd_mode == ROUNDING_UP && !x_sign)) { // RP and res > 0 C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; } else { // RM and res > 0, RP and res < 0, or RZ C1_hi = 0x5fffed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; } y_exp = 0; // x_sign is preserved // set the inexact flag (in case the exact addition was exact) *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; } } } // else if (C1 < 10^34) then C1 is the coeff.; the result is exact } else { // if x_sign != y_sign the result is exact C1_lo = C1_lo - C2_lo; C1_hi = C1_hi - C2_hi; if (C1_lo > C1.w[0]) C1_hi--; // the result can be zero, but it cannot overflow if (C1_lo == 0 && C1_hi == 0) { // assemble the result if (x_exp < y_exp) res.w[1] = x_exp; else res.w[1] = y_exp; res.w[0] = 0; if (rnd_mode == ROUNDING_DOWN) { res.w[1] |= 0x8000000000000000ull; } BID_SWAP128 (res); BID_RETURN (res); } if (C1_hi >= 0x8000000000000000ull) { // negative coefficient! C1_lo = ~C1_lo; C1_lo++; C1_hi = ~C1_hi; if (C1_lo == 0x0) C1_hi++; x_sign = y_sign; // the result will have the sign of y } } // assemble the result res.w[1] = x_sign | y_exp | C1_hi; res.w[0] = C1_lo; } else { // if (delta >= P34 + 1 - q2) // instead of C' = (C1 * 10^(e1-e2) + C2)rnd,P34 // calculate C' = C1 * 10^(e1-e2-x1) + (C2 * 10^(-x1))rnd,P34 // where x1 = q1 + e1 - e2 - P34, 1 <= x1 <= P34 - 1 // In most cases C' will have P34 digits, and n = C' * 10^(e2+x1) // If the result has P34+1 digits, redo the steps above with x1+1 // If the result has P34-1 digits or less, redo the steps above with // x1-1 but only if initially x1 >= 1 // NOTE: these two steps can be improved, e.g we could guess if // P34+1 or P34-1 digits will be obtained by adding/subtracting just // the top 64 bits of the two operands // The result cannot be zero, but it can overflow x1 = delta + q2 - P34; // 1 <= x1 <= P34-1 roundC2: // Calculate C1 * 10^(e1-e2-x1) where 0 <= e1-e2-x1 <= P34 - 1 // scale = (int)(e1 >> 49) - (int)(e2 >> 49) - x1; 0 <= scale <= P34-1 scale = delta - q1 + q2 - x1; // scale = e1 - e2 - x1 = P34 - q1 // either C1 or 10^(e1-e2-x1) may not fit is 64 bits, // but their product fits with certainty in 128 bits (actually in 113) if (scale >= 20) { //10^(e1-e2-x1) doesn't fit in 64 bits, but C1 does __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]); } else if (scale >= 1) { // if 1 <= scale <= 19 then 10^(e1-e2-x1) fits in 64 bits if (q1 <= 19) { // C1 fits in 64 bits __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]); } else { // q1 >= 20 C1.w[1] = C1_hi; C1.w[0] = C1_lo; __mul_128x64_to_128 (C1, ten2k64[scale], C1); } } else { // if (scale == 0) C1 is unchanged C1.w[1] = C1_hi; C1.w[0] = C1_lo; } tmp64 = C1.w[0]; // C1.w[1], C1.w[0] contains C1 * 10^(e1-e2-x1) // now round C2 to q2-x1 decimal digits, where 1<=x1<=q2-1<=P34-1 // (but if we got here a second time after x1 = x1 - 1, then // x1 >= 0; note that for x1 = 0 C2 is unchanged) // C2' = C2 + 1/2 * 10^x1 = C2 + 5 * 10^(x1-1) ind = x1 - 1; // 0 <= ind <= q2-2<=P34-2=32; but note that if x1 = 0 // during a second pass, then ind = -1 if (ind >= 0) { // if (x1 >= 1) C2.w[0] = C2_lo; C2.w[1] = C2_hi; if (ind <= 18) { C2.w[0] = C2.w[0] + midpoint64[ind]; if (C2.w[0] < C2_lo) C2.w[1]++; } else { // 19 <= ind <= 32 C2.w[0] = C2.w[0] + midpoint128[ind - 19].w[0]; C2.w[1] = C2.w[1] + midpoint128[ind - 19].w[1]; if (C2.w[0] < C2_lo) C2.w[1]++; } // the approximation of 10^(-x1) was rounded up to 118 bits __mul_128x128_to_256 (R256, C2, ten2mk128[ind]); // R256 = C2*, f2* // calculate C2* and f2* // C2* is actually floor(C2*) in this case // C2* and f2* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // the top Ex bits of 10^(-x1) are T* = ten2mk128trunc[ind], e.g. // if x1=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f2* < 10^(-x1)) then // if floor(C1+C2*) is even then C2* = floor(C2*) - logical right // shift; C2* has p decimal digits, correct by Prop. 1) // else if floor(C1+C2*) is odd C2* = floor(C2*)-1 (logical right // shift; C2* has p decimal digits, correct by Pr. 1) // else // C2* = floor(C2*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C2* * 10^(e2+x1) if (ind <= 2) { highf2star.w[1] = 0x0; highf2star.w[0] = 0x0; // low f2* ok } else if (ind <= 21) { highf2star.w[1] = 0x0; highf2star.w[0] = R256.w[2] & maskhigh128[ind]; // low f2* ok } else { highf2star.w[1] = R256.w[3] & maskhigh128[ind]; highf2star.w[0] = R256.w[2]; // low f2* is ok } // shift right C2* by Ex-128 = shiftright128[ind] if (ind >= 3) { shift = shiftright128[ind]; if (shift < 64) { // 3 <= shift <= 63 R256.w[2] = (R256.w[2] >> shift) | (R256.w[3] << (64 - shift)); R256.w[3] = (R256.w[3] >> shift); } else { // 66 <= shift <= 102 R256.w[2] = (R256.w[3] >> (shift - 64)); R256.w[3] = 0x0ULL; } } if (second_pass) { is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } // determine inexactness of the rounding of C2* (this may be // followed by a second rounding only if we get P34+1 // decimal digits) // if (0 < f2* - 1/2 < 10^(-x1)) then // the result is exact // else (if f2* - 1/2 > T* then) // the result of is inexact if (ind <= 2) { if (R256.w[1] > 0x8000000000000000ull || (R256.w[1] == 0x8000000000000000ull && R256.w[0] > 0x0ull)) { // f2* > 1/2 and the result may be exact tmp64A = R256.w[1] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64A > ten2mk128trunc[ind].w[1] || (tmp64A == ten2mk128trunc[ind].w[1] && R256.w[0] >= ten2mk128trunc[ind].w[0]))) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; // may be set again during a second pass // this rounding is applied to C2 only! if (x_sign == y_sign) is_inexact_lt_midpoint = 1; else // if (x_sign != y_sign) is_inexact_gt_midpoint = 1; } // else the result is exact // rounding down, unless a midpoint in [ODD, EVEN] } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; // just in case we will round a second time // rounding up, unless a midpoint in [EVEN, ODD] // this rounding is applied to C2 only! if (x_sign == y_sign) is_inexact_gt_midpoint = 1; else // if (x_sign != y_sign) is_inexact_lt_midpoint = 1; } } else if (ind <= 21) { // if 3 <= ind <= 21 if (highf2star.w[1] > 0x0 || (highf2star.w[1] == 0x0 && highf2star.w[0] > onehalf128[ind]) || (highf2star.w[1] == 0x0 && highf2star.w[0] == onehalf128[ind] && (R256.w[1] || R256.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64A = highf2star.w[0] - onehalf128[ind]; tmp64B = highf2star.w[1]; if (tmp64A > highf2star.w[0]) tmp64B--; if (tmp64B || tmp64A || R256.w[1] > ten2mk128trunc[ind].w[1] || (R256.w[1] == ten2mk128trunc[ind].w[1] && R256.w[0] > ten2mk128trunc[ind].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; // may be set again during a second pass // this rounding is applied to C2 only! if (x_sign == y_sign) is_inexact_lt_midpoint = 1; else // if (x_sign != y_sign) is_inexact_gt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; // may be set again during a second pass // rounding up, unless a midpoint in [EVEN, ODD] // this rounding is applied to C2 only! if (x_sign == y_sign) is_inexact_gt_midpoint = 1; else // if (x_sign != y_sign) is_inexact_lt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (highf2star.w[1] > onehalf128[ind] || (highf2star.w[1] == onehalf128[ind] && (highf2star.w[0] || R256.w[1] || R256.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 // tmp64A = highf2star.w[0]; tmp64B = highf2star.w[1] - onehalf128[ind]; if (tmp64B || highf2star.w[0] || R256.w[1] > ten2mk128trunc[ind].w[1] || (R256.w[1] == ten2mk128trunc[ind].w[1] && R256.w[0] > ten2mk128trunc[ind].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; // may be set again during a second pass // this rounding is applied to C2 only! if (x_sign == y_sign) is_inexact_lt_midpoint = 1; else // if (x_sign != y_sign) is_inexact_gt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; // may be set again during a second pass // rounding up, unless a midpoint in [EVEN, ODD] // this rounding is applied to C2 only! if (x_sign == y_sign) is_inexact_gt_midpoint = 1; else // if (x_sign != y_sign) is_inexact_lt_midpoint = 1; } } // check for midpoints if ((R256.w[1] || R256.w[0]) && (highf2star.w[1] == 0) && (highf2star.w[0] == 0) && (R256.w[1] < ten2mk128trunc[ind].w[1] || (R256.w[1] == ten2mk128trunc[ind].w[1] && R256.w[0] <= ten2mk128trunc[ind].w[0]))) { // the result is a midpoint if ((tmp64 + R256.w[2]) & 0x01) { // MP in [EVEN, ODD] // if floor(C2*) is odd C = floor(C2*) - 1; the result may be 0 R256.w[2]--; if (R256.w[2] == 0xffffffffffffffffull) R256.w[3]--; // this rounding is applied to C2 only! if (x_sign == y_sign) is_midpoint_gt_even = 1; else // if (x_sign != y_sign) is_midpoint_lt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] // this rounding is applied to C2 only! if (x_sign == y_sign) is_midpoint_lt_even = 1; else // if (x_sign != y_sign) is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } } // end if (ind >= 0) } else { // if (ind == -1); only during a 2nd pass, and when x1 = 0 R256.w[2] = C2_lo; R256.w[3] = C2_hi; tmp_inexact = 0; // to correct a possible setting to 1 from 1st pass if (second_pass) { is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } } // and now add/subtract C1 * 10^(e1-e2-x1) +/- (C2 * 10^(-x1))rnd,P34 if (x_sign == y_sign) { // addition; could overflow // no second pass is possible this way (only for x_sign != y_sign) C1.w[0] = C1.w[0] + R256.w[2]; C1.w[1] = C1.w[1] + R256.w[3]; if (C1.w[0] < tmp64) C1.w[1]++; // carry // if the sum has P34+1 digits, i.e. C1>=10^34 redo the calculation // with x1=x1+1 if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] >= 0x378d8e6400000000ull)) { // C1 >= 10^34 // chop off one more digit from the sum, but make sure there is // no double-rounding error (see table - double rounding logic) // now round C1 from P34+1 to P34 decimal digits // C1' = C1 + 1/2 * 10 = C1 + 5 if (C1.w[0] >= 0xfffffffffffffffbull) { // low half add has carry C1.w[0] = C1.w[0] + 5; C1.w[1] = C1.w[1] + 1; } else { C1.w[0] = C1.w[0] + 5; } // the approximation of 10^(-1) was rounded up to 118 bits __mul_128x128_to_256 (Q256, C1, ten2mk128[0]); // Q256 = C1*, f1* // C1* is actually floor(C1*) in this case // the top 128 bits of 10^(-1) are // T* = ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f1* < 10^(-1)) then // if floor(C1*) is even then C1* = floor(C1*) - logical right // shift; C1* has p decimal digits, correct by Prop. 1) // else if floor(C1*) is odd C1* = floor(C1*) - 1 (logical right // shift; C1* has p decimal digits, correct by Pr. 1) // else // C1* = floor(C1*) (logical right shift; C has p decimal digits // correct by Property 1) // n = C1* * 10^(e2+x1+1) if ((Q256.w[1] || Q256.w[0]) && (Q256.w[1] < ten2mk128trunc[0].w[1] || (Q256.w[1] == ten2mk128trunc[0].w[1] && Q256.w[0] <= ten2mk128trunc[0].w[0]))) { // the result is a midpoint if (is_inexact_lt_midpoint) { // for the 1st rounding is_inexact_gt_midpoint = 1; is_inexact_lt_midpoint = 0; is_midpoint_gt_even = 0; is_midpoint_lt_even = 0; } else if (is_inexact_gt_midpoint) { // for the 1st rounding Q256.w[2]--; if (Q256.w[2] == 0xffffffffffffffffull) Q256.w[3]--; is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 1; is_midpoint_gt_even = 0; is_midpoint_lt_even = 0; } else if (is_midpoint_gt_even) { // for the 1st rounding // Note: cannot have is_midpoint_lt_even is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 1; is_midpoint_gt_even = 0; is_midpoint_lt_even = 0; } else { // the first rounding must have been exact if (Q256.w[2] & 0x01) { // MP in [EVEN, ODD] // the truncated result is correct Q256.w[2]--; if (Q256.w[2] == 0xffffffffffffffffull) Q256.w[3]--; is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 0; is_midpoint_gt_even = 1; is_midpoint_lt_even = 0; } else { // MP in [ODD, EVEN] is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 0; is_midpoint_gt_even = 0; is_midpoint_lt_even = 1; } } tmp_inexact = 1; // in all cases } else { // the result is not a midpoint // determine inexactness of the rounding of C1 (the sum C1+C2*) // if (0 < f1* - 1/2 < 10^(-1)) then // the result is exact // else (if f1* - 1/2 > T* then) // the result of is inexact // ind = 0 if (Q256.w[1] > 0x8000000000000000ull || (Q256.w[1] == 0x8000000000000000ull && Q256.w[0] > 0x0ull)) { // f1* > 1/2 and the result may be exact Q256.w[1] = Q256.w[1] - 0x8000000000000000ull; // f1* - 1/2 if ((Q256.w[1] > ten2mk128trunc[0].w[1] || (Q256.w[1] == ten2mk128trunc[0].w[1] && Q256.w[0] > ten2mk128trunc[0].w[0]))) { is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 1; is_midpoint_gt_even = 0; is_midpoint_lt_even = 0; // set the inexact flag tmp_inexact = 1; // *pfpsf |= INEXACT_EXCEPTION; } else { // else the result is exact for the 2nd rounding if (tmp_inexact) { // if the previous rounding was inexact if (is_midpoint_lt_even) { is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; } else if (is_midpoint_gt_even) { is_inexact_lt_midpoint = 1; is_midpoint_gt_even = 0; } else { ; // no change } } } // rounding down, unless a midpoint in [ODD, EVEN] } else { // the result is inexact; f1* <= 1/2 is_inexact_gt_midpoint = 1; is_inexact_lt_midpoint = 0; is_midpoint_gt_even = 0; is_midpoint_lt_even = 0; // set the inexact flag tmp_inexact = 1; // *pfpsf |= INEXACT_EXCEPTION; } } // end 'the result is not a midpoint' // n = C1 * 10^(e2+x1) C1.w[1] = Q256.w[3]; C1.w[0] = Q256.w[2]; y_exp = y_exp + ((UINT64) (x1 + 1) << 49); } else { // C1 < 10^34 // C1.w[1] and C1.w[0] already set // n = C1 * 10^(e2+x1) y_exp = y_exp + ((UINT64) x1 << 49); } // check for overflow if (y_exp == EXP_MAX_P1 && (rnd_mode == ROUNDING_TO_NEAREST || rnd_mode == ROUNDING_TIES_AWAY)) { res.w[1] = 0x7800000000000000ull | x_sign; // +/-inf res.w[0] = 0x0ull; // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; BID_SWAP128 (res); BID_RETURN (res); } // else no overflow } else { // if x_sign != y_sign the result of this subtract. is exact C1.w[0] = C1.w[0] - R256.w[2]; C1.w[1] = C1.w[1] - R256.w[3]; if (C1.w[0] > tmp64) C1.w[1]--; // borrow if (C1.w[1] >= 0x8000000000000000ull) { // negative coefficient! C1.w[0] = ~C1.w[0]; C1.w[0]++; C1.w[1] = ~C1.w[1]; if (C1.w[0] == 0x0) C1.w[1]++; tmp_sign = y_sign; // the result will have the sign of y if last rnd } else { tmp_sign = x_sign; } // if the difference has P34-1 digits or less, i.e. C1 < 10^33 then // redo the calculation with x1=x1-1; // redo the calculation also if C1 = 10^33 and // (is_inexact_gt_midpoint or is_midpoint_lt_even); // (the last part should have really been // (is_inexact_lt_midpoint or is_midpoint_gt_even) from // the rounding of C2, but the position flags have been reversed) // 10^33 = 0x0000314dc6448d93 0x38c15b0a00000000 if ((C1.w[1] < 0x0000314dc6448d93ull || (C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] < 0x38c15b0a00000000ull)) || (C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] == 0x38c15b0a00000000ull && (is_inexact_gt_midpoint || is_midpoint_lt_even))) { // C1=10^33 x1 = x1 - 1; // x1 >= 0 if (x1 >= 0) { // clear position flags and tmp_inexact is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; tmp_inexact = 0; second_pass = 1; goto roundC2; // else result has less than P34 digits } } // if the coefficient of the result is 10^34 it means that this // must be the second pass, and we are done if (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] == 0x378d8e6400000000ull) { // if C1 = 10^34 C1.w[1] = 0x0000314dc6448d93ull; // C1 = 10^33 C1.w[0] = 0x38c15b0a00000000ull; y_exp = y_exp + ((UINT64) 1 << 49); } x_sign = tmp_sign; if (x1 >= 1) y_exp = y_exp + ((UINT64) x1 << 49); // x1 = -1 is possible at the end of a second pass when the // first pass started with x1 = 1 } C1_hi = C1.w[1]; C1_lo = C1.w[0]; // general correction from RN to RA, RM, RP, RZ; result uses y_exp if (rnd_mode != ROUNDING_TO_NEAREST) { if ((!x_sign && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even))) || (x_sign && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_DOWN) && is_midpoint_gt_even)))) { // C1 = C1 + 1 C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 y_exp = y_exp + EXP_P1; } } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) && ((x_sign && (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TO_ZERO)) || (!x_sign && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)))) { // C1 = C1 - 1 C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi--; // check if we crossed into the lower decade if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1 C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1 C1_lo = 0x378d8e63ffffffffull; y_exp = y_exp - EXP_P1; // no underflow, because delta + q2 >= P34 + 1 } } else { ; // exact, the result is already correct } // in all cases check for overflow (RN and RA solved already) if (y_exp == EXP_MAX_P1) { // overflow if ((rnd_mode == ROUNDING_DOWN && x_sign) || // RM and res < 0 (rnd_mode == ROUNDING_UP && !x_sign)) { // RP and res > 0 C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; } else { // RM and res > 0, RP and res < 0, or RZ C1_hi = 0x5fffed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; } y_exp = 0; // x_sign is preserved // set the inexact flag (in case the exact addition was exact) *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; } } // assemble the result res.w[1] = x_sign | y_exp | C1_hi; res.w[0] = C1_lo; if (tmp_inexact) *pfpsf |= INEXACT_EXCEPTION; } } else { // if (-P34 + 1 <= delta <= -1) <=> 1 <= -delta <= P34 - 1 // NOTE: the following, up to "} else { // if x_sign != y_sign // the result is exact" is identical to "else if (delta == P34 - q2) {" // from above; also, the code is not symmetric: a+b and b+a may take // different paths (need to unify eventually!) // calculate C' = C2 + C1 * 10^(e1-e2) directly; the result may be // inexact if it requires P34 + 1 decimal digits; in either case the // 'cutoff' point for addition is at the position of the lsb of C2 // The coefficient of the result is C1 * 10^(e1-e2) + C2 and the // exponent is e2; either C1 or 10^(e1-e2) may not fit is 64 bits, // but their product fits with certainty in 128 bits (actually in 113) // Note that 0 <= e1 - e2 <= P34 - 2 // -P34 + 1 <= delta <= -1 <=> -P34 + 1 <= delta <= -1 <=> // -P34 + 1 <= q1 + e1 - q2 - e2 <= -1 <=> // q2 - q1 - P34 + 1 <= e1 - e2 <= q2 - q1 - 1 <=> // 1 - P34 - P34 + 1 <= e1-e2 <= P34 - 1 - 1 => 0 <= e1-e2 <= P34 - 2 scale = delta - q1 + q2; // scale = (int)(e1 >> 49) - (int)(e2 >> 49) if (scale >= 20) { // 10^(e1-e2) does not fit in 64 bits, but C1 does __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]); } else if (scale >= 1) { // if 1 <= scale <= 19 then 10^(e1-e2) fits in 64 bits if (q1 <= 19) { // C1 fits in 64 bits __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]); } else { // q1 >= 20 C1.w[1] = C1_hi; C1.w[0] = C1_lo; __mul_128x64_to_128 (C1, ten2k64[scale], C1); } } else { // if (scale == 0) C1 is unchanged C1.w[1] = C1_hi; C1.w[0] = C1_lo; // only the low part is necessary } C1_hi = C1.w[1]; C1_lo = C1.w[0]; // now add C2 if (x_sign == y_sign) { // the result can overflow! C1_lo = C1_lo + C2_lo; C1_hi = C1_hi + C2_hi; if (C1_lo < C1.w[0]) C1_hi++; // test for overflow, possible only when C1 >= 10^34 if (C1_hi > 0x0001ed09bead87c0ull || (C1_hi == 0x0001ed09bead87c0ull && C1_lo >= 0x378d8e6400000000ull)) { // C1 >= 10^34 // in this case q = P34 + 1 and x = q - P34 = 1, so multiply // C'' = C'+ 5 = C1 + 5 by k1 ~ 10^(-1) calculated for P34 + 1 // decimal digits // Calculate C'' = C' + 1/2 * 10^x if (C1_lo >= 0xfffffffffffffffbull) { // low half add has carry C1_lo = C1_lo + 5; C1_hi = C1_hi + 1; } else { C1_lo = C1_lo + 5; } // the approximation of 10^(-1) was rounded up to 118 bits // 10^(-1) =~ 33333333333333333333333333333400 * 2^-129 // 10^(-1) =~ 19999999999999999999999999999a00 * 2^-128 C1.w[1] = C1_hi; C1.w[0] = C1_lo; // C'' ten2m1.w[1] = 0x1999999999999999ull; ten2m1.w[0] = 0x9999999999999a00ull; __mul_128x128_to_256 (P256, C1, ten2m1); // P256 = C*, f* // C* is actually floor(C*) in this case // the top Ex = 128 bits of 10^(-1) are // T* = 0x00199999999999999999999999999999 // if (0 < f* < 10^(-x)) then // if floor(C*) is even then C = floor(C*) - logical right // shift; C has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C = floor(C*) - 1 (logical right // shift; C has p decimal digits, correct by Pr. 1) // else // C = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C * 10^(e2+x) if ((P256.w[1] || P256.w[0]) && (P256.w[1] < 0x1999999999999999ull || (P256.w[1] == 0x1999999999999999ull && P256.w[0] <= 0x9999999999999999ull))) { // the result is a midpoint if (P256.w[2] & 0x01) { is_midpoint_gt_even = 1; // if floor(C*) is odd C = floor(C*) - 1; the result is not 0 P256.w[2]--; if (P256.w[2] == 0xffffffffffffffffull) P256.w[3]--; } else { is_midpoint_lt_even = 1; } } // n = Cstar * 10^(e2+1) y_exp = y_exp + EXP_P1; // C* != 10^P34 because C* has P34 digits // check for overflow if (y_exp == EXP_MAX_P1 && (rnd_mode == ROUNDING_TO_NEAREST || rnd_mode == ROUNDING_TIES_AWAY)) { // overflow for RN res.w[1] = x_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0ull; // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; BID_SWAP128 (res); BID_RETURN (res); } // if (0 < f* - 1/2 < 10^(-x)) then // the result of the addition is exact // else // the result of the addition is inexact if (P256.w[1] > 0x8000000000000000ull || (P256.w[1] == 0x8000000000000000ull && P256.w[0] > 0x0ull)) { // the result may be exact tmp64 = P256.w[1] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > 0x1999999999999999ull || (tmp64 == 0x1999999999999999ull && P256.w[0] >= 0x9999999999999999ull))) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact = 1; } // else the result is exact } else { // the result is inexact // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact = 1; } C1_hi = P256.w[3]; C1_lo = P256.w[2]; if (!is_midpoint_gt_even && !is_midpoint_lt_even) { is_inexact_lt_midpoint = is_inexact && (P256.w[1] & 0x8000000000000000ull); is_inexact_gt_midpoint = is_inexact && !(P256.w[1] & 0x8000000000000000ull); } // general correction from RN to RA, RM, RP, RZ; result uses y_exp if (rnd_mode != ROUNDING_TO_NEAREST) { if ((!x_sign && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even))) || (x_sign && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_DOWN) && is_midpoint_gt_even)))) { // C1 = C1 + 1 C1_lo = C1_lo + 1; if (C1_lo == 0) { // rounding overflow in the low 64 bits C1_hi = C1_hi + 1; } if (C1_hi == 0x0001ed09bead87c0ull && C1_lo == 0x378d8e6400000000ull) { // C1 = 10^34 => rounding overflow C1_hi = 0x0000314dc6448d93ull; C1_lo = 0x38c15b0a00000000ull; // 10^33 y_exp = y_exp + EXP_P1; } } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) && ((x_sign && (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TO_ZERO)) || (!x_sign && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)))) { // C1 = C1 - 1 C1_lo = C1_lo - 1; if (C1_lo == 0xffffffffffffffffull) C1_hi--; // check if we crossed into the lower decade if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1 C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1 C1_lo = 0x378d8e63ffffffffull; y_exp = y_exp - EXP_P1; // no underflow, because delta + q2 >= P34 + 1 } } else { ; // exact, the result is already correct } // in all cases check for overflow (RN and RA solved already) if (y_exp == EXP_MAX_P1) { // overflow if ((rnd_mode == ROUNDING_DOWN && x_sign) || // RM and res < 0 (rnd_mode == ROUNDING_UP && !x_sign)) { // RP and res > 0 C1_hi = 0x7800000000000000ull; // +inf C1_lo = 0x0ull; } else { // RM and res > 0, RP and res < 0, or RZ C1_hi = 0x5fffed09bead87c0ull; C1_lo = 0x378d8e63ffffffffull; } y_exp = 0; // x_sign is preserved // set the inexact flag (in case the exact addition was exact) *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; } } } // else if (C1 < 10^34) then C1 is the coeff.; the result is exact // assemble the result res.w[1] = x_sign | y_exp | C1_hi; res.w[0] = C1_lo; } else { // if x_sign != y_sign the result is exact C1_lo = C2_lo - C1_lo; C1_hi = C2_hi - C1_hi; if (C1_lo > C2_lo) C1_hi--; if (C1_hi >= 0x8000000000000000ull) { // negative coefficient! C1_lo = ~C1_lo; C1_lo++; C1_hi = ~C1_hi; if (C1_lo == 0x0) C1_hi++; x_sign = y_sign; // the result will have the sign of y } // the result can be zero, but it cannot overflow if (C1_lo == 0 && C1_hi == 0) { // assemble the result if (x_exp < y_exp) res.w[1] = x_exp; else res.w[1] = y_exp; res.w[0] = 0; if (rnd_mode == ROUNDING_DOWN) { res.w[1] |= 0x8000000000000000ull; } BID_SWAP128 (res); BID_RETURN (res); } // assemble the result res.w[1] = y_sign | y_exp | C1_hi; res.w[0] = C1_lo; } } } BID_SWAP128 (res); BID_RETURN (res) } } // bid128_sub stands for bid128qq_sub /***************************************************************************** * BID128 sub ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_sub (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128_sub (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; UINT64 y_sign; if ((y.w[HIGH_128W] & MASK_NAN) != MASK_NAN) { // y is not NAN // change its sign y_sign = y.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative if (y_sign) y.w[HIGH_128W] = y.w[HIGH_128W] & 0x7fffffffffffffffull; else y.w[HIGH_128W] = y.w[HIGH_128W] | 0x8000000000000000ull; } #if DECIMAL_CALL_BY_REFERENCE bid128_add (&res, &x, &y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid128_add (x, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_compare.c000066400000000000000000004052651504475242000171470ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_equal, x, y) int res; int exp_x, exp_y, exp_t; UINT128 sig_x, sig_y, sig_t; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equivalent. if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { if ((y.w[1] & MASK_INF) == MASK_INF) { res = (((x.w[1] ^ y.w[1]) & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else { res = 0; BID_RETURN (res); } } if ((y.w[1] & MASK_INF) == MASK_INF) { res = 0; BID_RETURN (res); } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) { res = 0; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ => not equal : return 0 if ((x.w[1] ^ y.w[1]) & MASK_SIGN) { res = 0; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) if (exp_x > exp_y) { // to simplify the loop below, SWAP (exp_x, exp_y, exp_t); // put the larger exp in y, SWAP (sig_x.w[1], sig_y.w[1], sig_t.w[1]); // and the smaller exp in x SWAP (sig_x.w[0], sig_y.w[0], sig_t.w[0]); // and the smaller exp in x } if (exp_y - exp_x > 33) { res = 0; BID_RETURN (res); } // difference cannot be greater than 10^33 if (exp_y - exp_x > 19) { // recalculate y's significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[exp_y - exp_x - 20]); { res = ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0) && (sig_n_prime256.w[1] == sig_x.w[1]) && (sig_n_prime256.w[0] == sig_x.w[0])); BID_RETURN (res); } } //else{ // recalculate y's significand upwards __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y); { res = ((sig_n_prime192.w[2] == 0) && (sig_n_prime192.w[1] == sig_x.w[1]) && (sig_n_prime192.w[0] == sig_x.w[0])); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_greater, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, rather than // equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => // return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) != MASK_INF) || ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_greater_equal, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) == MASK_INF) && (y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 1; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison of the // significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0] && exp_x > exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0] && exp_x < exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_greater_unordered, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than // equal : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => // return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) != MASK_INF) || ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison of the // significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0] && exp_x > exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0] && exp_x < exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_less, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) != MASK_INF) || (y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 0; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison of the // significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_less_equal, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 1 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 1; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => // return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) == MASK_INF) && ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison of the // significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x. w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_less_unordered, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) != MASK_INF) || (y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 0; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_not_equal, x, y) int res; int exp_x, exp_y, exp_t; UINT128 sig_x, sig_y, sig_t; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equivalent. if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { if ((y.w[1] & MASK_INF) == MASK_INF) { res = (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else { res = 1; BID_RETURN (res); } } if ((y.w[1] & MASK_INF) == MASK_INF) { res = 1; BID_RETURN (res); } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) { res = 1; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ => not equal : return 0 if ((x.w[1] ^ y.w[1]) & MASK_SIGN) { res = 1; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) if (exp_x > exp_y) { // to simplify the loop below, SWAP (exp_x, exp_y, exp_t); // put the larger exp in y, SWAP (sig_x.w[1], sig_y.w[1], sig_t.w[1]); // and the smaller exp in x SWAP (sig_x.w[0], sig_y.w[0], sig_t.w[0]); // and the smaller exp in x } if (exp_y - exp_x > 33) { res = 1; BID_RETURN (res); } // difference cannot be greater than 10^33 if (exp_y - exp_x > 19) { // recalculate y's significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[exp_y - exp_x - 20]); { res = ((sig_n_prime256.w[3] != 0) || (sig_n_prime256.w[2] != 0) || (sig_n_prime256.w[1] != sig_x.w[1]) || (sig_n_prime256.w[0] != sig_x.w[0])); BID_RETURN (res); } } //else{ // recalculate y's significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y); { res = ((sig_n_prime192.w[2] != 0) || (sig_n_prime192.w[1] != sig_x.w[1]) || (sig_n_prime192.w[0] != sig_x.w[0])); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_not_greater, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 1 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 1; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) == MASK_INF) && ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_not_less, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) == MASK_INF) && (y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 1; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0] && exp_x > exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0] && exp_x < exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_ordered, x, y) int res; // NaN (CASE1) // if either number is NAN, the comparison is ordered : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 0; BID_RETURN (res); } } { res = 1; BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_unordered, x, y) int res; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN || (y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; } { res = 1; BID_RETURN (res); } } { res = 0; BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_greater, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) != MASK_INF) || ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_greater_equal, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) == MASK_INF) && (y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 1; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0] && exp_x > exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0] && exp_x < exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_greater_unordered, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) != MASK_INF) || ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0] && exp_x > exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0] && exp_x < exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_less, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) != MASK_INF) || (y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 0; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, |x| < |y|, return 1 if positive if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_less_equal, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 0; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 1 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 1; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) == MASK_INF) && ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_less_unordered, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) != MASK_INF) || (y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 0; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 0; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_not_greater, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 1 if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) { res = 1; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity else { res = (((y.w[1] & MASK_INF) == MASK_INF) && ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 0 { res = (sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_not_less, x, y) int res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 1 if (((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; { res = 1; BID_RETURN (res); } } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x.w[1] & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y.w[1] & MASK_INF) == MASK_INF) && (y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 1; BID_RETURN (res); } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF X IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_x = 1; else non_canon_x = 0; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF Y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) non_canon_y = 1; else non_canon_y = 0; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore // ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; } if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison // of the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0] && exp_x > exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0] && exp_x < exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^33 if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } //else { //128 by 64 bit multiply -> 192 bits // adjust the y significand upwards __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { res = 1; BID_RETURN (res); } // if equal, return 1 { res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } libdfp-1.0.17/libbid/bid128_div.c000066400000000000000000001403711504475242000162750ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_div_macros.h" #ifdef UNCHANGED_BINARY_STATUS_FLAGS #include #define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT #endif extern UINT32 convert_table[5][128][2]; extern SINT8 factors[][2]; extern UINT8 packed_10000_zeros[]; BID128_FUNCTION_ARG2 (bid128_div, x, y) UINT256 CA4, CA4r, P256; UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, res; UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, PD, valid_y; int_float fx, fy, f64; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2, digits_q, amount; int nzeros, i, j, k, d5; unsigned rmode; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { // test if x is NaN if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN (y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = (CX.w[1]) & QUIET_MASK64; res.w[0] = CX.w[0]; BID_RETURN (res); } // x is Infinity? if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } // y is NaN? if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) // return NaN { // return +/-Inf res.w[1] = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; BID_RETURN (res); } } // x is 0 if ((y.w[1] & 0x7800000000000000ull) < 0x7800000000000000ull) { if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } // return 0 res.w[1] = (x.w[1] ^ y.w[1]) & 0x8000000000000000ull; exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128; if (exponent_x > DECIMAL_MAX_EXPON_128) exponent_x = DECIMAL_MAX_EXPON_128; else if (exponent_x < 0) exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; BID_RETURN (res); } } if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; BID_RETURN (res); } // y is 0, return +/-Inf #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif res.w[1] = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128; if (__unsigned_compare_gt_128 (CY, CX)) { // CX < CY // 2^64 f64.i = 0x5f800000; // fx ~ CX, fy ~ CY fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0]; // expon_cy - expon_cx bin_index = (fy.i - fx.i) >> 23; if (CX.w[1]) { T = power10_index_binexp_128[bin_index].w[0]; __mul_64x128_short (CA, T, CX); } else { T128 = power10_index_binexp_128[bin_index]; __mul_64x128_short (CA, CX.w[0], T128); } ed2 = 33; if (__unsigned_compare_gt_128 (CY, CA)) ed2++; T128 = power10_table_128[ed2]; __mul_128x128_to_256 (CA4, CA, T128); ed2 += estimate_decimal_digits[bin_index]; CQ.w[0] = CQ.w[1] = 0; diff_expon = diff_expon - ed2; } else { // get CQ = CX/CY __div_128_by_128 (&CQ, &CR, CX, CY); if (!CR.w[1] && !CR.w[0]) { get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } // get number of decimal digits in CQ // 2^64 f64.i = 0x5f800000; fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0]; // binary expon. of CQ bin_expon = (fx.i - 0x3f800000) >> 23; digits_q = estimate_decimal_digits[bin_expon]; TP128.w[0] = power10_index_binexp_128[bin_expon].w[0]; TP128.w[1] = power10_index_binexp_128[bin_expon].w[1]; if (__unsigned_compare_ge_128 (CQ, TP128)) digits_q++; ed2 = 34 - digits_q; T128.w[0] = power10_table_128[ed2].w[0]; T128.w[1] = power10_table_128[ed2].w[1]; __mul_128x128_to_256 (CA4, CR, T128); diff_expon = diff_expon - ed2; __mul_128x128_low (CQ, CQ, T128); } __div_256_by_128 (&CQ, &CA4, CY); #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!CA4.w[0] && !CA4.w[1]) #endif #endif #ifndef LEAVE_TRAILING_ZEROS // check whether result is exact { // check whether CX, CY are short if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) { i = (int) CY.w[0] - 1; j = (int) CX.w[0] - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128_long (CQ, Qh, amount); diff_expon += nzeros; } else { // decompose Q as Qh*10^17 + Ql //T128 = reciprocals10_128[17]; T128.w[0] = 0x44909befeb9fad49ull; T128.w[1] = 0x000b877aa3236a4bull; __mul_128x128_to_256 (P256, CQ, T128); //amount = recip_scale[17]; Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44)); Q_low = CQ.w[0] - Q_high * 100000000000000000ull; if (!Q_low) { diff_expon += 17; tdigit[0] = Q_high & 0x3ffffff; tdigit[1] = 0; QX = Q_high >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64 amount = short_recip_scale[nzeros]; CQ.w[0] = CQ.w[1] >> amount; } else CQ.w[0] = Q_high; CQ.w[1] = 0; diff_expon += nzeros; } else { tdigit[0] = Q_low & 0x3ffffff; tdigit[1] = 0; QX = Q_low >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); //now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128 (CQ, Qh, amount); } diff_expon += nzeros; } } get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } #endif if (diff_expon >= 0) { #ifdef IEEE_ROUND_NEAREST // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else #ifdef IEEE_ROUND_NEAREST_TIES_AWAY // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case ROUNDING_TO_NEAREST: // round to nearest code // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_TIES_AWAY: // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up CQ.w[0]++; if (!CQ.w[0]) CQ.w[1]++; break; } #endif #endif } else { #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ, CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } //#define LEAVE_TRAILING_ZEROS TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2 (UINT128, bid128dd_div, UINT64, x, UINT64, y) UINT256 CA4, CA4r, P256; UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, res; UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, PD, valid_y; int_float fx, fy, f64; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2, digits_q, amount; int nzeros, i, j, k, d5; unsigned rmode; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y); // unpack arguments, check for NaN or Infinity CX.w[1] = 0; if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // test if x is NaN if ((x & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); BID_RETURN (res); } // x is Infinity? if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if ((((y) & 0x7c00000000000000ull) == 0x7800000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } if ((((y) & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res.w[1] = (((x) ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; BID_RETURN (res); } } // x is 0 if ((((y) & 0x7800000000000000ull) != 0x7800000000000000ull)) { if(!CY.w[0]) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } // return 0 res.w[1] = ((x) ^ (y)) & 0x8000000000000000ull; if (((y) & 0x6000000000000000ull) == 0x6000000000000000ull) exponent_y = ((UINT32) ((y) >> 51)) & 0x3ff; else exponent_y = ((UINT32) ((y) >> 53)) & 0x3ff; exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128; if (exponent_x > DECIMAL_MAX_EXPON_128) exponent_x = DECIMAL_MAX_EXPON_128; else if (exponent_x < 0) exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; BID_RETURN (res); } } CY.w[1] = 0; if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[0] = (CY.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull); BID_RETURN (res); } // y is Infinity? if (((y) & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; BID_RETURN (res); } // y is 0, return +/-Inf res.w[1] = (((x) ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128; if (__unsigned_compare_gt_128 (CY, CX)) { // CX < CY // 2^64 f64.i = 0x5f800000; // fx ~ CX, fy ~ CY fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0]; // expon_cy - expon_cx bin_index = (fy.i - fx.i) >> 23; if (CX.w[1]) { T = power10_index_binexp_128[bin_index].w[0]; __mul_64x128_short (CA, T, CX); } else { T128 = power10_index_binexp_128[bin_index]; __mul_64x128_short (CA, CX.w[0], T128); } ed2 = 33; if (__unsigned_compare_gt_128 (CY, CA)) ed2++; T128 = power10_table_128[ed2]; __mul_128x128_to_256 (CA4, CA, T128); ed2 += estimate_decimal_digits[bin_index]; CQ.w[0] = CQ.w[1] = 0; diff_expon = diff_expon - ed2; } else { // get CQ = CX/CY __div_128_by_128 (&CQ, &CR, CX, CY); if (!CR.w[1] && !CR.w[0]) { get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } // get number of decimal digits in CQ // 2^64 f64.i = 0x5f800000; fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0]; // binary expon. of CQ bin_expon = (fx.i - 0x3f800000) >> 23; digits_q = estimate_decimal_digits[bin_expon]; TP128.w[0] = power10_index_binexp_128[bin_expon].w[0]; TP128.w[1] = power10_index_binexp_128[bin_expon].w[1]; if (__unsigned_compare_ge_128 (CQ, TP128)) digits_q++; ed2 = 34 - digits_q; T128.w[0] = power10_table_128[ed2].w[0]; T128.w[1] = power10_table_128[ed2].w[1]; __mul_128x128_to_256 (CA4, CR, T128); diff_expon = diff_expon - ed2; __mul_128x128_low (CQ, CQ, T128); } __div_256_by_128 (&CQ, &CA4, CY); #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!CA4.w[0] && !CA4.w[1]) #endif #endif #ifndef LEAVE_TRAILING_ZEROS // check whether result is exact { // check whether CX, CY are short if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) { i = (int) CY.w[0] - 1; j = (int) CX.w[0] - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2]; // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128_long (CQ, Qh, amount); diff_expon += nzeros; } else { // decompose Q as Qh*10^17 + Ql //T128 = reciprocals10_128[17]; T128.w[0] = 0x44909befeb9fad49ull; T128.w[1] = 0x000b877aa3236a4bull; __mul_128x128_to_256 (P256, CQ, T128); //amount = recip_scale[17]; Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44)); Q_low = CQ.w[0] - Q_high * 100000000000000000ull; if (!Q_low) { diff_expon += 17; tdigit[0] = Q_high & 0x3ffffff; tdigit[1] = 0; QX = Q_high >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64 amount = short_recip_scale[nzeros]; CQ.w[0] = CQ.w[1] >> amount; } else CQ.w[0] = Q_high; CQ.w[1] = 0; diff_expon += nzeros; } else { tdigit[0] = Q_low & 0x3ffffff; tdigit[1] = 0; QX = Q_low >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128 (CQ, Qh, amount); } diff_expon += nzeros; } } get_BID128(&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } #endif if (diff_expon >= 0) { #ifdef IEEE_ROUND_NEAREST // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else #ifdef IEEE_ROUND_NEAREST_TIES_AWAY // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case ROUNDING_TO_NEAREST: // round to nearest code // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_TIES_AWAY: // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up CQ.w[0]++; if (!CQ.w[0]) CQ.w[1]++; break; } #endif #endif } else { #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ, CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } BID128_FUNCTION_ARGTYPE1_ARG128 (bid128dq_div, UINT64, x, y) UINT256 CA4, CA4r, P256; UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, res; UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, valid_y, PD; int_float fx, fy, f64; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2, digits_q, amount; int nzeros, i, j, k, d5; unsigned rmode; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity CX.w[1] = 0; if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], x)) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // test if x is NaN if ((x & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); BID_RETURN (res); } // x is Infinity? if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res.w[1] = ((x ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; BID_RETURN (res); } } // x is 0 if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) { if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } // return 0 res.w[1] = (x ^ y.w[1]) & 0x8000000000000000ull; exponent_x = exponent_x - exponent_y + (DECIMAL_EXPONENT_BIAS_128<<1) - DECIMAL_EXPONENT_BIAS; if (exponent_x > DECIMAL_MAX_EXPON_128) exponent_x = DECIMAL_MAX_EXPON_128; else if (exponent_x < 0) exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; BID_RETURN (res); } } exponent_x += (DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS); if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; BID_RETURN (res); } // y is 0, return +/-Inf res.w[1] = ((x ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128; if (__unsigned_compare_gt_128 (CY, CX)) { // CX < CY // 2^64 f64.i = 0x5f800000; // fx ~ CX, fy ~ CY fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0]; // expon_cy - expon_cx bin_index = (fy.i - fx.i) >> 23; if (CX.w[1]) { T = power10_index_binexp_128[bin_index].w[0]; __mul_64x128_short (CA, T, CX); } else { T128 = power10_index_binexp_128[bin_index]; __mul_64x128_short (CA, CX.w[0], T128); } ed2 = 33; if (__unsigned_compare_gt_128 (CY, CA)) ed2++; T128 = power10_table_128[ed2]; __mul_128x128_to_256 (CA4, CA, T128); ed2 += estimate_decimal_digits[bin_index]; CQ.w[0] = CQ.w[1] = 0; diff_expon = diff_expon - ed2; } else { // get CQ = CX/CY __div_128_by_128 (&CQ, &CR, CX, CY); if (!CR.w[1] && !CR.w[0]) { get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } // get number of decimal digits in CQ // 2^64 f64.i = 0x5f800000; fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0]; // binary expon. of CQ bin_expon = (fx.i - 0x3f800000) >> 23; digits_q = estimate_decimal_digits[bin_expon]; TP128.w[0] = power10_index_binexp_128[bin_expon].w[0]; TP128.w[1] = power10_index_binexp_128[bin_expon].w[1]; if (__unsigned_compare_ge_128 (CQ, TP128)) digits_q++; ed2 = 34 - digits_q; T128.w[0] = power10_table_128[ed2].w[0]; T128.w[1] = power10_table_128[ed2].w[1]; __mul_128x128_to_256 (CA4, CR, T128); diff_expon = diff_expon - ed2; __mul_128x128_low (CQ, CQ, T128); } __div_256_by_128 (&CQ, &CA4, CY); #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!CA4.w[0] && !CA4.w[1]) #endif #endif #ifndef LEAVE_TRAILING_ZEROS // check whether result is exact { //printf("ed2=%d,nz=%d,a=%d,CQ="LX16","LX16", RH="LX16", RL="LX16"\n",ed2,nzeros,amount,CQ.w[1],CQ.w[0],reciprocals10_128[nzeros].w[1],reciprocals10_128[nzeros].w[0]);fflush(stdout); // check whether CX, CY are short if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) { i = (int) CY.w[0] - 1; j = (int) CX.w[0] - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2]; // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128_long (CQ, Qh, amount); diff_expon += nzeros; } else { // decompose Q as Qh*10^17 + Ql //T128 = reciprocals10_128[17]; T128.w[0] = 0x44909befeb9fad49ull; T128.w[1] = 0x000b877aa3236a4bull; __mul_128x128_to_256 (P256, CQ, T128); //amount = recip_scale[17]; Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44)); Q_low = CQ.w[0] - Q_high * 100000000000000000ull; if (!Q_low) { diff_expon += 17; tdigit[0] = Q_high & 0x3ffffff; tdigit[1] = 0; QX = Q_high >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); //printf("i=%d, nz=%d, digit=%d (%d, %016I64x %016I64x)\n",i,nzeros,digit_h,digit,PD,digit_h);fflush(stdout); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64 amount = short_recip_scale[nzeros]; CQ.w[0] = CQ.w[1] >> amount; } else CQ.w[0] = Q_high; CQ.w[1] = 0; diff_expon += nzeros; } else { tdigit[0] = Q_low & 0x3ffffff; tdigit[1] = 0; QX = Q_low >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); //printf("i=%d, nz=%d, digit=%d (%d, %016I64x %016I64x)\n",i,nzeros,digit_h,digit,PD,digit_h);fflush(stdout); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128 (CQ, Qh, amount); } diff_expon += nzeros; } } get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } #endif if (diff_expon >= 0) { #ifdef IEEE_ROUND_NEAREST // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else #ifdef IEEE_ROUND_NEAREST_TIES_AWAY // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case ROUNDING_TO_NEAREST: // round to nearest code // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_TIES_AWAY: // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up CQ.w[0]++; if (!CQ.w[0]) CQ.w[1]++; break; } #endif #endif } else { #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ, CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } BID128_FUNCTION_ARG128_ARGTYPE2 (bid128qd_div, x, UINT64, y) UINT256 CA4, CA4r, P256; UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, res; UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, PD, valid_y; int_float fx, fy, f64; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2, digits_q, amount; int nzeros, i, j, k, d5, rmode; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y); // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { // test if x is NaN if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN (y & 0x7e00000000000000ull) == 0x7e00000000000000ull) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = (CX.w[1]) & QUIET_MASK64; res.w[0] = CX.w[0]; BID_RETURN (res); } // x is Infinity? if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if (((y & 0x7c00000000000000ull) == 0x7800000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } // y is NaN? if (((y & 0x7c00000000000000ull) != 0x7c00000000000000ull)) // return NaN { // return +/-Inf res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; BID_RETURN (res); } } // x is 0 if ((y & 0x7800000000000000ull) < 0x7800000000000000ull) { if (!CY.w[0]) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } // return 0 res.w[1] = (x.w[1] ^ y) & 0x8000000000000000ull; exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS; if (exponent_x > DECIMAL_MAX_EXPON_128) exponent_x = DECIMAL_MAX_EXPON_128; else if (exponent_x < 0) exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; BID_RETURN (res); } } CY.w[1] = 0; if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[0] = (CY.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull); BID_RETURN (res); } // y is Infinity? if ((y & INFINITY_MASK64) == INFINITY_MASK64) { // return +/-0 res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull); res.w[0] = 0; BID_RETURN (res); } // y is 0 #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif res.w[1] = (sign_x ^ sign_y) | INFINITY_MASK64; res.w[0] = 0; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS; if (__unsigned_compare_gt_128 (CY, CX)) { // CX < CY // 2^64 f64.i = 0x5f800000; // fx ~ CX, fy ~ CY fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0]; // expon_cy - expon_cx bin_index = (fy.i - fx.i) >> 23; if (CX.w[1]) { T = power10_index_binexp_128[bin_index].w[0]; __mul_64x128_short (CA, T, CX); } else { T128 = power10_index_binexp_128[bin_index]; __mul_64x128_short (CA, CX.w[0], T128); } ed2 = 33; if (__unsigned_compare_gt_128 (CY, CA)) ed2++; T128 = power10_table_128[ed2]; __mul_128x128_to_256 (CA4, CA, T128); ed2 += estimate_decimal_digits[bin_index]; CQ.w[0] = CQ.w[1] = 0; diff_expon = diff_expon - ed2; } else { // get CQ = CX/CY __div_128_by_128 (&CQ, &CR, CX, CY); if (!CR.w[1] && !CR.w[0]) { get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } // get number of decimal digits in CQ // 2^64 f64.i = 0x5f800000; fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0]; // binary expon. of CQ bin_expon = (fx.i - 0x3f800000) >> 23; digits_q = estimate_decimal_digits[bin_expon]; TP128.w[0] = power10_index_binexp_128[bin_expon].w[0]; TP128.w[1] = power10_index_binexp_128[bin_expon].w[1]; if (__unsigned_compare_ge_128 (CQ, TP128)) digits_q++; ed2 = 34 - digits_q; T128.w[0] = power10_table_128[ed2].w[0]; T128.w[1] = power10_table_128[ed2].w[1]; __mul_128x128_to_256 (CA4, CR, T128); diff_expon = diff_expon - ed2; __mul_128x128_low (CQ, CQ, T128); } __div_256_by_128 (&CQ, &CA4, CY); #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!CA4.w[0] && !CA4.w[1]) #endif #endif #ifndef LEAVE_TRAILING_ZEROS // check whether result is exact { // check whether CX, CY are short if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) { i = (int) CY.w[0] - 1; j = (int) CX.w[0] - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2]; // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128_long (CQ, Qh, amount); diff_expon += nzeros; } else { // decompose Q as Qh*10^17 + Ql //T128 = reciprocals10_128[17]; T128.w[0] = 0x44909befeb9fad49ull; T128.w[1] = 0x000b877aa3236a4bull; __mul_128x128_to_256 (P256, CQ, T128); //amount = recip_scale[17]; Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44)); Q_low = CQ.w[0] - Q_high * 100000000000000000ull; if (!Q_low) { diff_expon += 17; tdigit[0] = Q_high & 0x3ffffff; tdigit[1] = 0; QX = Q_high >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64 amount = short_recip_scale[nzeros]; CQ.w[0] = CQ.w[1] >> amount; } else CQ.w[0] = Q_high; CQ.w[1] = 0; diff_expon += nzeros; } else { tdigit[0] = Q_low & 0x3ffffff; tdigit[1] = 0; QX = Q_low >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128 (CQ, Qh, amount); } diff_expon += nzeros; } } get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } #endif if (diff_expon >= 0) { #ifdef IEEE_ROUND_NEAREST // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else #ifdef IEEE_ROUND_NEAREST_TIES_AWAY // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case ROUNDING_TO_NEAREST: // round to nearest code // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_TIES_AWAY: // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up CQ.w[0]++; if (!CQ.w[0]) CQ.w[1]++; break; } #endif #endif } else { #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ, CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_fma.c000066400000000000000000005260241504475242000162610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * * BID128 fma x * y + z * ****************************************************************************/ #include "bid_internal.h" static void rounding_correction (unsigned int rnd_mode, unsigned int is_inexact_lt_midpoint, unsigned int is_inexact_gt_midpoint, unsigned int is_midpoint_lt_even, unsigned int is_midpoint_gt_even, int unbexp, UINT128 * ptrres, _IDEC_flags * ptrfpsf) { // unbiased true exponent unbexp may be larger than emax UINT128 res = *ptrres; // expected to have the correct sign and coefficient // (the exponent field is ignored, as unbexp is used instead) UINT64 sign, exp; UINT64 C_hi, C_lo; // general correction from RN to RA, RM, RP, RZ // Note: if the result is negative, then is_inexact_lt_midpoint, // is_inexact_gt_midpoint, is_midpoint_lt_even, and is_midpoint_gt_even // have to be considered as if determined for the absolute value of the // result (so they seem to be reversed) if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) { *ptrfpsf |= INEXACT_EXCEPTION; } // apply correction to result calculated with unbounded exponent sign = res.w[1] & MASK_SIGN; exp = (UINT64) (unbexp + 6176) << 49; // valid only if expmin<=unbexp<=expmax C_hi = res.w[1] & MASK_COEFF; C_lo = res.w[0]; if ((!sign && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even))) || (sign && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_DOWN) && is_midpoint_gt_even)))) { // C = C + 1 C_lo = C_lo + 1; if (C_lo == 0) C_hi = C_hi + 1; if (C_hi == 0x0001ed09bead87c0ull && C_lo == 0x378d8e6400000000ull) { // C = 10^34 => rounding overflow C_hi = 0x0000314dc6448d93ull; C_lo = 0x38c15b0a00000000ull; // 10^33 // exp = exp + EXP_P1; unbexp = unbexp + 1; exp = (UINT64) (unbexp + 6176) << 49; } } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) && ((sign && (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TO_ZERO)) || (!sign && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)))) { // C = C - 1 C_lo = C_lo - 1; if (C_lo == 0xffffffffffffffffull) C_hi--; // check if we crossed into the lower decade if (C_hi == 0x0000314dc6448d93ull && C_lo == 0x38c15b09ffffffffull) { // C = 10^33 - 1 if (exp > 0) { C_hi = 0x0001ed09bead87c0ull; // 10^34 - 1 C_lo = 0x378d8e63ffffffffull; // exp = exp - EXP_P1; unbexp = unbexp - 1; exp = (UINT64) (unbexp + 6176) << 49; } else { // if exp = 0 the result is tiny & inexact *ptrfpsf |= UNDERFLOW_EXCEPTION; } } } else { ; // the result is already correct } if (unbexp > expmax) { // 6111 *ptrfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); exp = 0; if (!sign) { // result is positive if (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TIES_AWAY) { // +inf C_hi = 0x7800000000000000ull; C_lo = 0x0000000000000000ull; } else { // res = +MAXFP = (10^34-1) * 10^emax C_hi = 0x5fffed09bead87c0ull; C_lo = 0x378d8e63ffffffffull; } } else { // result is negative if (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TIES_AWAY) { // -inf C_hi = 0xf800000000000000ull; C_lo = 0x0000000000000000ull; } else { // res = -MAXFP = -(10^34-1) * 10^emax C_hi = 0xdfffed09bead87c0ull; C_lo = 0x378d8e63ffffffffull; } } } // assemble the result res.w[1] = sign | exp | C_hi; res.w[0] = C_lo; *ptrres = res; } static void add256 (UINT256 x, UINT256 y, UINT256 * pz) { // *z = x + yl assume the sum fits in 256 bits UINT256 z; z.w[0] = x.w[0] + y.w[0]; if (z.w[0] < x.w[0]) { x.w[1]++; if (x.w[1] == 0x0000000000000000ull) { x.w[2]++; if (x.w[2] == 0x0000000000000000ull) { x.w[3]++; } } } z.w[1] = x.w[1] + y.w[1]; if (z.w[1] < x.w[1]) { x.w[2]++; if (x.w[2] == 0x0000000000000000ull) { x.w[3]++; } } z.w[2] = x.w[2] + y.w[2]; if (z.w[2] < x.w[2]) { x.w[3]++; } z.w[3] = x.w[3] + y.w[3]; // it was assumed that no carry is possible *pz = z; } static void sub256 (UINT256 x, UINT256 y, UINT256 * pz) { // *z = x - y; assume x >= y UINT256 z; z.w[0] = x.w[0] - y.w[0]; if (z.w[0] > x.w[0]) { x.w[1]--; if (x.w[1] == 0xffffffffffffffffull) { x.w[2]--; if (x.w[2] == 0xffffffffffffffffull) { x.w[3]--; } } } z.w[1] = x.w[1] - y.w[1]; if (z.w[1] > x.w[1]) { x.w[2]--; if (x.w[2] == 0xffffffffffffffffull) { x.w[3]--; } } z.w[2] = x.w[2] - y.w[2]; if (z.w[2] > x.w[2]) { x.w[3]--; } z.w[3] = x.w[3] - y.w[3]; // no borrow possible, because x >= y *pz = z; } static int nr_digits256 (UINT256 R256) { int ind; // determine the number of decimal digits in R256 if (R256.w[3] == 0x0 && R256.w[2] == 0x0 && R256.w[1] == 0x0) { // between 1 and 19 digits for (ind = 1; ind <= 19; ind++) { if (R256.w[0] < ten2k64[ind]) { break; } } // ind digits } else if (R256.w[3] == 0x0 && R256.w[2] == 0x0 && (R256.w[1] < ten2k128[0].w[1] || (R256.w[1] == ten2k128[0].w[1] && R256.w[0] < ten2k128[0].w[0]))) { // 20 digits ind = 20; } else if (R256.w[3] == 0x0 && R256.w[2] == 0x0) { // between 21 and 38 digits for (ind = 1; ind <= 18; ind++) { if (R256.w[1] < ten2k128[ind].w[1] || (R256.w[1] == ten2k128[ind].w[1] && R256.w[0] < ten2k128[ind].w[0])) { break; } } // ind + 20 digits ind = ind + 20; } else if (R256.w[3] == 0x0 && (R256.w[2] < ten2k256[0].w[2] || (R256.w[2] == ten2k256[0].w[2] && R256.w[1] < ten2k256[0].w[1]) || (R256.w[2] == ten2k256[0].w[2] && R256.w[1] == ten2k256[0].w[1] && R256.w[0] < ten2k256[0].w[0]))) { // 39 digits ind = 39; } else { // between 40 and 68 digits for (ind = 1; ind <= 29; ind++) { if (R256.w[3] < ten2k256[ind].w[3] || (R256.w[3] == ten2k256[ind].w[3] && R256.w[2] < ten2k256[ind].w[2]) || (R256.w[3] == ten2k256[ind].w[3] && R256.w[2] == ten2k256[ind].w[2] && R256.w[1] < ten2k256[ind].w[1]) || (R256.w[3] == ten2k256[ind].w[3] && R256.w[2] == ten2k256[ind].w[2] && R256.w[1] == ten2k256[ind].w[1] && R256.w[0] < ten2k256[ind].w[0])) { break; } } // ind + 39 digits ind = ind + 39; } return (ind); } // add/subtract C4 and C3 * 10^scale; this may follow a previous rounding, so // use the rounding information from ptr_is_* to avoid a double rounding error static void add_and_round (int q3, int q4, int e4, int delta, int p34, UINT64 z_sign, UINT64 p_sign, UINT128 C3, UINT256 C4, int rnd_mode, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint, _IDEC_flags * ptrfpsf, UINT128 * ptrres) { int scale; int x0; int ind; UINT64 R64; UINT128 P128, R128; UINT192 P192, R192; UINT256 R256; int is_midpoint_lt_even = 0; int is_midpoint_gt_even = 0; int is_inexact_lt_midpoint = 0; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even0 = 0; int is_midpoint_gt_even0 = 0; int is_inexact_lt_midpoint0 = 0; int is_inexact_gt_midpoint0 = 0; int incr_exp = 0; int is_tiny = 0; int lt_half_ulp = 0; int eq_half_ulp = 0; // int gt_half_ulp = 0; UINT128 res = *ptrres; // scale C3 up by 10^(q4-delta-q3), 0 <= q4-delta-q3 <= 2*P34-2 = 66 scale = q4 - delta - q3; // 0 <= scale <= 66 (or 0 <= scale <= 68 if this // comes from Cases (2), (3), (4), (5), (6), with 0 <= |delta| <= 1 // calculate C3 * 10^scale in R256 (it has at most 67 decimal digits for // Cases (15),(16),(17) and at most 69 for Cases (2),(3),(4),(5),(6)) if (scale == 0) { R256.w[3] = 0x0ull; R256.w[2] = 0x0ull; R256.w[1] = C3.w[1]; R256.w[0] = C3.w[0]; } else if (scale <= 19) { // 10^scale fits in 64 bits P128.w[1] = 0; P128.w[0] = ten2k64[scale]; __mul_128x128_to_256 (R256, P128, C3); } else if (scale <= 38) { // 10^scale fits in 128 bits __mul_128x128_to_256 (R256, ten2k128[scale - 20], C3); } else if (scale <= 57) { // 39 <= scale <= 57 // 10^scale fits in 192 bits but C3 * 10^scale fits in 223 or 230 bits // (10^67 has 223 bits; 10^69 has 230 bits); // must split the computation: // 10^scale * C3 = 10*38 * 10^(scale-38) * C3 where 10^38 takes 127 // bits and so 10^(scale-38) * C3 fits in 128 bits with certainty // Note that 1 <= scale - 38 <= 19 => 10^(scale-38) fits in 64 bits __mul_64x128_to_128 (R128, ten2k64[scale - 38], C3); // now multiply R128 by 10^38 __mul_128x128_to_256 (R256, R128, ten2k128[18]); } else { // 58 <= scale <= 66 // 10^scale takes between 193 and 220 bits, // and C3 * 10^scale fits in 223 bits (10^67/10^69 has 223/230 bits) // must split the computation: // 10^scale * C3 = 10*38 * 10^(scale-38) * C3 where 10^38 takes 127 // bits and so 10^(scale-38) * C3 fits in 128 bits with certainty // Note that 20 <= scale - 38 <= 30 => 10^(scale-38) fits in 128 bits // Calculate first 10^(scale-38) * C3, which fits in 128 bits; because // 10^(scale-38) takes more than 64 bits, C3 will take less than 64 __mul_64x128_to_128 (R128, C3.w[0], ten2k128[scale - 58]); // now calculate 10*38 * 10^(scale-38) * C3 __mul_128x128_to_256 (R256, R128, ten2k128[18]); } // C3 * 10^scale is now in R256 // for Cases (15), (16), (17) C4 > C3 * 10^scale because C4 has at least // one extra digit; for Cases (2), (3), (4), (5), or (6) any order is // possible // add/subtract C4 and C3 * 10^scale; the exponent is e4 if (p_sign == z_sign) { // R256 = C4 + R256 // calculate R256 = C4 + C3 * 10^scale = C4 + R256 which is exact, // but may require rounding add256 (C4, R256, &R256); } else { // if (p_sign != z_sign) { // R256 = C4 - R256 // calculate R256 = C4 - C3 * 10^scale = C4 - R256 or // R256 = C3 * 10^scale - C4 = R256 - C4 which is exact, // but may require rounding // compare first R256 = C3 * 10^scale and C4 if (R256.w[3] > C4.w[3] || (R256.w[3] == C4.w[3] && R256.w[2] > C4.w[2]) || (R256.w[3] == C4.w[3] && R256.w[2] == C4.w[2] && R256.w[1] > C4.w[1]) || (R256.w[3] == C4.w[3] && R256.w[2] == C4.w[2] && R256.w[1] == C4.w[1] && R256.w[0] >= C4.w[0])) { // C3 * 10^scale >= C4 // calculate R256 = C3 * 10^scale - C4 = R256 - C4, which is exact, // but may require rounding sub256 (R256, C4, &R256); // flip p_sign too, because the result has the sign of z p_sign = z_sign; } else { // if C4 > C3 * 10^scale // calculate R256 = C4 - C3 * 10^scale = C4 - R256, which is exact, // but may require rounding sub256 (C4, R256, &R256); } // if the result is pure zero, the sign depends on the rounding mode // (x*y and z had opposite signs) if (R256.w[3] == 0x0ull && R256.w[2] == 0x0ull && R256.w[1] == 0x0ull && R256.w[0] == 0x0ull) { if (rnd_mode != ROUNDING_DOWN) p_sign = 0x0000000000000000ull; else p_sign = 0x8000000000000000ull; // the exponent is max (e4, expmin) if (e4 < -6176) e4 = expmin; // assemble result res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49); res.w[0] = 0x0; *ptrres = res; return; } } // determine the number of decimal digits in R256 ind = nr_digits256 (R256); // the exact result is (-1)^p_sign * R256 * 10^e4 where q (R256) = ind; // round to the destination precision, with unbounded exponent if (ind <= p34) { // result rounded to the destination precision with unbounded exponent // is exact if (ind + e4 < p34 + expmin) { is_tiny = 1; // applies to all rounding modes } res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | R256.w[1]; res.w[0] = R256.w[0]; // Note: res is correct only if expmin <= e4 <= expmax } else { // if (ind > p34) // if more than P digits, round to nearest to P digits // round R256 to p34 digits x0 = ind - p34; // 1 <= x0 <= 34 as 35 <= ind <= 68 if (ind <= 38) { P128.w[1] = R256.w[1]; P128.w[0] = R256.w[0]; round128_19_38 (ind, x0, P128, &R128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else if (ind <= 57) { P192.w[2] = R256.w[2]; P192.w[1] = R256.w[1]; P192.w[0] = R256.w[0]; round192_39_57 (ind, x0, P192, &R192, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R128.w[1] = R192.w[1]; R128.w[0] = R192.w[0]; } else { // if (ind <= 68) round256_58_76 (ind, x0, R256, &R256, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R128.w[1] = R256.w[1]; R128.w[0] = R256.w[0]; } // the rounded result has p34 = 34 digits e4 = e4 + x0 + incr_exp; if (rnd_mode == ROUNDING_TO_NEAREST) { if (e4 < expmin) { is_tiny = 1; // for other rounding modes apply correction } } else { // for RM, RP, RZ, RA apply correction in order to determine tininess // but do not save the result; apply the correction to // (-1)^p_sign * significand * 10^0 P128.w[1] = p_sign | 0x3040000000000000ull | R128.w[1]; P128.w[0] = R128.w[0]; rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, 0, &P128, ptrfpsf); scale = ((P128.w[1] & MASK_EXP) >> 49) - 6176; // -1, 0, or +1 // the number of digits in the significand is p34 = 34 if (e4 + scale < expmin) { is_tiny = 1; } } ind = p34; // the number of decimal digits in the signifcand of res res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | R128.w[1]; // RN res.w[0] = R128.w[0]; // Note: res is correct only if expmin <= e4 <= expmax // set the inexact flag after rounding with bounded exponent, if any } // at this point we have the result rounded with unbounded exponent in // res and we know its tininess: // res = (-1)^p_sign * significand * 10^e4, // where q (significand) = ind <= p34 // Note: res is correct only if expmin <= e4 <= expmax // check for overflow if RN if (rnd_mode == ROUNDING_TO_NEAREST && (ind + e4) > (p34 + expmax)) { res.w[1] = p_sign | 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; *ptrres = res; *ptrfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); return; // BID_RETURN (res) } // else not overflow or not RN, so continue // if (e4 >= expmin) we have the result rounded with bounded exponent if (e4 < expmin) { x0 = expmin - e4; // x0 >= 1; the number of digits to chop off of res // where the result rounded [at most] once is // (-1)^p_sign * significand_res * 10^e4 // avoid double rounding error is_inexact_lt_midpoint0 = is_inexact_lt_midpoint; is_inexact_gt_midpoint0 = is_inexact_gt_midpoint; is_midpoint_lt_even0 = is_midpoint_lt_even; is_midpoint_gt_even0 = is_midpoint_gt_even; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; if (x0 > ind) { // nothing is left of res when moving the decimal point left x0 digits is_inexact_lt_midpoint = 1; res.w[1] = p_sign | 0x0000000000000000ull; res.w[0] = 0x0000000000000000ull; e4 = expmin; } else if (x0 == ind) { // 1 <= x0 = ind <= p34 = 34 // this is <, =, or > 1/2 ulp // compare the ind-digit value in the significand of res with // 1/2 ulp = 5*10^(ind-1), i.e. determine whether it is // less than, equal to, or greater than 1/2 ulp (significand of res) R128.w[1] = res.w[1] & MASK_COEFF; R128.w[0] = res.w[0]; if (ind <= 19) { if (R128.w[0] < midpoint64[ind - 1]) { // < 1/2 ulp lt_half_ulp = 1; is_inexact_lt_midpoint = 1; } else if (R128.w[0] == midpoint64[ind - 1]) { // = 1/2 ulp eq_half_ulp = 1; is_midpoint_gt_even = 1; } else { // > 1/2 ulp // gt_half_ulp = 1; is_inexact_gt_midpoint = 1; } } else { // if (ind <= 38) { if (R128.w[1] < midpoint128[ind - 20].w[1] || (R128.w[1] == midpoint128[ind - 20].w[1] && R128.w[0] < midpoint128[ind - 20].w[0])) { // < 1/2 ulp lt_half_ulp = 1; is_inexact_lt_midpoint = 1; } else if (R128.w[1] == midpoint128[ind - 20].w[1] && R128.w[0] == midpoint128[ind - 20].w[0]) { // = 1/2 ulp eq_half_ulp = 1; is_midpoint_gt_even = 1; } else { // > 1/2 ulp // gt_half_ulp = 1; is_inexact_gt_midpoint = 1; } } if (lt_half_ulp || eq_half_ulp) { // res = +0.0 * 10^expmin res.w[1] = 0x0000000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // if (gt_half_ulp) // res = +1 * 10^expmin res.w[1] = 0x0000000000000000ull; res.w[0] = 0x0000000000000001ull; } res.w[1] = p_sign | res.w[1]; e4 = expmin; } else { // if (1 <= x0 <= ind - 1 <= 33) // round the ind-digit result to ind - x0 digits if (ind <= 18) { // 2 <= ind <= 18 round64_2_18 (ind, x0, res.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res.w[1] = 0x0; res.w[0] = R64; } else if (ind <= 38) { P128.w[1] = res.w[1] & MASK_COEFF; P128.w[0] = res.w[0]; round128_19_38 (ind, x0, P128, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } e4 = e4 + x0; // expmin // we want the exponent to be expmin, so if incr_exp = 1 then // multiply the rounded result by 10 - it will still fit in 113 bits if (incr_exp) { // 64 x 128 -> 128 P128.w[1] = res.w[1] & MASK_COEFF; P128.w[0] = res.w[0]; __mul_64x128_to_128 (res, ten2k64[1], P128); } res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | (res.w[1] & MASK_COEFF); // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // Note: a double rounding error upward is not possible; for this // the result after the first rounding would have to be 99...95 // (35 digits in all), possibly followed by a number of zeros; this // is not possible in Cases (2)-(6) or (15)-(17) which may get here is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res.w[0]++; if (res.w[0] == 0) res.w[1]++; is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this second rounding was exact the result may still be // inexact because of the first rounding if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } } } // res contains the correct result // apply correction if not rounding to nearest if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e4, &res, ptrfpsf); } if (is_midpoint_lt_even || is_midpoint_gt_even || is_inexact_lt_midpoint || is_inexact_gt_midpoint) { // set the inexact flag *ptrfpsf |= INEXACT_EXCEPTION; if (is_tiny) *ptrfpsf |= UNDERFLOW_EXCEPTION; } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; *ptrres = res; return; } #if DECIMAL_CALL_BY_REFERENCE static void bid128_ext_fma (int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint, UINT128 * pres, UINT128 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else static UINT128 bid128_ext_fma (int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint, UINT128 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT64 x_sign, y_sign, z_sign, p_sign, tmp_sign; UINT64 x_exp = 0, y_exp = 0, z_exp = 0, p_exp; int true_p_exp; UINT128 C1, C2, C3; UINT256 C4; int q1 = 0, q2 = 0, q3 = 0, q4; int e1, e2, e3, e4; int scale, ind, delta, x0; int p34 = P34; // used to modify the limit on the number of digits BID_UI64DOUBLE tmp; int x_nr_bits, y_nr_bits, z_nr_bits; unsigned int save_fpsf; int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0; int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; int is_midpoint_lt_even0 = 0, is_midpoint_gt_even0 = 0; int is_inexact_lt_midpoint0 = 0, is_inexact_gt_midpoint0 = 0; int incr_exp = 0; int lsb; int lt_half_ulp = 0; int eq_half_ulp = 0; int gt_half_ulp = 0; int is_tiny = 0; UINT64 R64, tmp64; UINT128 P128, R128; UINT192 P192, R192; UINT256 R256; // the following are based on the table of special cases for fma; the NaN // behavior is similar to that of the IA-64 Architecture fma // identify cases where at least one operand is NaN BID_SWAP128 (x); BID_SWAP128 (y); BID_SWAP128 (z); if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN // if x = {0, f, inf, NaN}, y = NaN, z = {0, f, inf, NaN} then res = Q (y) // check first for non-canonical NaN payload if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (y.w[0] > 0x38c15b09ffffffffull))) { y.w[1] = y.w[1] & 0xffffc00000000000ull; y.w[0] = 0x0ull; } if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (y) res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = y.w[0]; } else { // y is QNaN // return y res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = y.w[0]; // if z = SNaN or x = SNaN signal invalid exception if ((z.w[1] & MASK_SNAN) == MASK_SNAN || (x.w[1] & MASK_SNAN) == MASK_SNAN) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if ((z.w[1] & MASK_NAN) == MASK_NAN) { // z is NAN // if x = {0, f, inf, NaN}, y = {0, f, inf}, z = NaN then res = Q (z) // check first for non-canonical NaN payload if (((z.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((z.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (z.w[0] > 0x38c15b09ffffffffull))) { z.w[1] = z.w[1] & 0xffffc00000000000ull; z.w[0] = 0x0ull; } if ((z.w[1] & MASK_SNAN) == MASK_SNAN) { // z is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (z) res.w[1] = z.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = z.w[0]; } else { // z is QNaN // return z res.w[1] = z.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = z.w[0]; // if x = SNaN signal invalid exception if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, y = {0, f, inf}, z = {0, f, inf} then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // x, y, z are 0, f, or inf but not NaN => unpack the arguments and check // for non-canonical values x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((x.w[1] & MASK_ANY_INF) != MASK_INF) { // x != inf // if x is not infinity check for non-canonical values - treated as zero if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } } y_sign = y.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C2.w[1] = y.w[1] & MASK_COEFF; C2.w[0] = y.w[0]; if ((y.w[1] & MASK_ANY_INF) != MASK_INF) { // y != inf // if y is not infinity check for non-canonical values - treated as zero if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C2.w[1] = 0; // significand high C2.w[0] = 0; // significand low } else { // G0_G1 != 11 y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C2.w[1] > 0x0001ed09bead87c0ull || (C2.w[1] == 0x0001ed09bead87c0ull && C2.w[0] > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 C2.w[1] = 0; C2.w[0] = 0; } else { // canonical ; } } } z_sign = z.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C3.w[1] = z.w[1] & MASK_COEFF; C3.w[0] = z.w[0]; if ((z.w[1] & MASK_ANY_INF) != MASK_INF) { // z != inf // if z is not infinity check for non-canonical values - treated as zero if ((z.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical z_exp = (z.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C3.w[1] = 0; // significand high C3.w[0] = 0; // significand low } else { // G0_G1 != 11 z_exp = z.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C3.w[1] > 0x0001ed09bead87c0ull || (C3.w[1] == 0x0001ed09bead87c0ull && C3.w[0] > 0x378d8e63ffffffffull)) { // z is non-canonical if coefficient is larger than 10^34 -1 C3.w[1] = 0; C3.w[0] = 0; } else { // canonical ; } } } p_sign = x_sign ^ y_sign; // sign of the product // identify cases where at least one operand is infinity if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf if (p_sign == z_sign) { res.w[1] = z_sign | MASK_INF; res.w[0] = 0x0; } else { // return QNaN Indefinite res.w[1] = 0x7c00000000000000ull; res.w[0] = 0x0000000000000000ull; // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } else { // z = 0 or z = f res.w[1] = p_sign | MASK_INF; res.w[0] = 0x0; } } else if (C2.w[1] != 0 || C2.w[0] != 0) { // y = f if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf if (p_sign == z_sign) { res.w[1] = z_sign | MASK_INF; res.w[0] = 0x0; } else { // return QNaN Indefinite res.w[1] = 0x7c00000000000000ull; res.w[0] = 0x0000000000000000ull; // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } else { // z = 0 or z = f res.w[1] = p_sign | MASK_INF; res.w[0] = 0x0; } } else { // y = 0 // return QNaN Indefinite res.w[1] = 0x7c00000000000000ull; res.w[0] = 0x0000000000000000ull; // set invalid flag *pfpsf |= INVALID_EXCEPTION; } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf // x = f, necessarily if ((p_sign != z_sign) || (C1.w[1] == 0x0ull && C1.w[0] == 0x0ull)) { // return QNaN Indefinite res.w[1] = 0x7c00000000000000ull; res.w[0] = 0x0000000000000000ull; // set invalid flag *pfpsf |= INVALID_EXCEPTION; } else { res.w[1] = z_sign | MASK_INF; res.w[0] = 0x0; } } else if (C1.w[1] == 0x0 && C1.w[0] == 0x0) { // x = 0 // z = 0, f, inf // return QNaN Indefinite res.w[1] = 0x7c00000000000000ull; res.w[0] = 0x0000000000000000ull; // set invalid flag *pfpsf |= INVALID_EXCEPTION; } else { // x = f and z = 0, f, necessarily res.w[1] = p_sign | MASK_INF; res.w[0] = 0x0; } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf // x = 0, f and y = 0, f, necessarily res.w[1] = z_sign | MASK_INF; res.w[0] = 0x0; *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } true_p_exp = (x_exp >> 49) - 6176 + (y_exp >> 49) - 6176; if (true_p_exp < -6176) p_exp = 0; // cannot be less than EXP_MIN else p_exp = (UINT64) (true_p_exp + 6176) << 49; if (((C1.w[1] == 0x0 && C1.w[0] == 0x0) || (C2.w[1] == 0x0 && C2.w[0] == 0x0)) && C3.w[1] == 0x0 && C3.w[0] == 0x0) { // (x = 0 or y = 0) and z = 0 // the result is 0 if (p_exp < z_exp) res.w[1] = p_exp; // preferred exponent else res.w[1] = z_exp; // preferred exponent if (p_sign == z_sign) { res.w[1] |= z_sign; res.w[0] = 0x0; } else { // x * y and z have opposite signs if (rnd_mode == ROUNDING_DOWN) { // res = -0.0 res.w[1] |= MASK_SIGN; res.w[0] = 0x0; } else { // res = +0.0 // res.w[1] |= 0x0; res.w[0] = 0x0; } } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // from this point on, we may need to know the number of decimal digits // in the significands of x, y, z when x, y, z != 0 if (C1.w[1] != 0 || C1.w[0] != 0) { // x = f (non-zero finite) // q1 = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } q1 = nr_digits[x_nr_bits - 1].digits; if (q1 == 0) { q1 = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q1++; } } if (C2.w[1] != 0 || C2.w[0] != 0) { // y = f (non-zero finite) if (C2.w[1] == 0) { if (C2.w[0] >= 0x0020000000000000ull) { // y >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C2.w[0] >= 0x0000000100000000ull) { // y >= 2^32 tmp.d = (double) (C2.w[0] >> 32); // exact conversion y_nr_bits = 32 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // y < 2^32 tmp.d = (double) C2.w[0]; // exact conversion y_nr_bits = ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if y < 2^53 tmp.d = (double) C2.w[0]; // exact conversion y_nr_bits = ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C2.w[1] != 0 => nr. bits = 64 + nr_bits (C2.w[1]) tmp.d = (double) C2.w[1]; // exact conversion y_nr_bits = 64 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } q2 = nr_digits[y_nr_bits].digits; if (q2 == 0) { q2 = nr_digits[y_nr_bits].digits1; if (C2.w[1] > nr_digits[y_nr_bits].threshold_hi || (C2.w[1] == nr_digits[y_nr_bits].threshold_hi && C2.w[0] >= nr_digits[y_nr_bits].threshold_lo)) q2++; } } if (C3.w[1] != 0 || C3.w[0] != 0) { // z = f (non-zero finite) if (C3.w[1] == 0) { if (C3.w[0] >= 0x0020000000000000ull) { // z >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C3.w[0] >= 0x0000000100000000ull) { // z >= 2^32 tmp.d = (double) (C3.w[0] >> 32); // exact conversion z_nr_bits = 32 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // z < 2^32 tmp.d = (double) C3.w[0]; // exact conversion z_nr_bits = ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if z < 2^53 tmp.d = (double) C3.w[0]; // exact conversion z_nr_bits = ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C3.w[1] != 0 => nr. bits = 64 + nr_bits (C3.w[1]) tmp.d = (double) C3.w[1]; // exact conversion z_nr_bits = 64 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } q3 = nr_digits[z_nr_bits].digits; if (q3 == 0) { q3 = nr_digits[z_nr_bits].digits1; if (C3.w[1] > nr_digits[z_nr_bits].threshold_hi || (C3.w[1] == nr_digits[z_nr_bits].threshold_hi && C3.w[0] >= nr_digits[z_nr_bits].threshold_lo)) q3++; } } if ((C1.w[1] == 0x0 && C1.w[0] == 0x0) || (C2.w[1] == 0x0 && C2.w[0] == 0x0)) { // x = 0 or y = 0 // z = f, necessarily; for 0 + z return z, with the preferred exponent // the result is z, but need to get the preferred exponent if (z_exp <= p_exp) { // the preferred exponent is z_exp res.w[1] = z_sign | (z_exp & MASK_EXP) | C3.w[1]; res.w[0] = C3.w[0]; } else { // if (p_exp < z_exp) the preferred exponent is p_exp // return (C3 * 10^scale) * 10^(z_exp - scale) // where scale = min (p34-q3, (z_exp-p_exp) >> 49) scale = p34 - q3; ind = (z_exp - p_exp) >> 49; if (ind < scale) scale = ind; if (scale == 0) { res.w[1] = z.w[1]; // & MASK_COEFF, which is redundant res.w[0] = z.w[0]; } else if (q3 <= 19) { // z fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C3.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C3.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]); } } else { // z fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C3 __mul_128x64_to_128 (res, ten2k64[scale], C3); } // subtract scale from the exponent z_exp = z_exp - ((UINT64) scale << 49); res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else { ; // continue with x = f, y = f, z = 0 or x = f, y = f, z = f } e1 = (x_exp >> 49) - 6176; // unbiased exponent of x e2 = (y_exp >> 49) - 6176; // unbiased exponent of y e3 = (z_exp >> 49) - 6176; // unbiased exponent of z e4 = e1 + e2; // unbiased exponent of the exact x * y // calculate C1 * C2 and its number of decimal digits, q4 // the exact product has either q1 + q2 - 1 or q1 + q2 decimal digits // where 2 <= q1 + q2 <= 68 // calculate C4 = C1 * C2 and determine q C4.w[3] = C4.w[2] = C4.w[1] = C4.w[0] = 0; if (q1 + q2 <= 19) { // if 2 <= q1 + q2 <= 19, C4 = C1 * C2 fits in 64 bits C4.w[0] = C1.w[0] * C2.w[0]; // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2 if (C4.w[0] < ten2k64[q1 + q2 - 1]) q4 = q1 + q2 - 1; // q4 in [1, 18] else q4 = q1 + q2; // q4 in [2, 19] // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64; } else if (q1 + q2 == 20) { // C4 = C1 * C2 fits in 64 or 128 bits // q1 <= 19 and q2 <= 19 so both C1 and C2 fit in 64 bits __mul_64x64_to_128MACH (C4, C1.w[0], C2.w[0]); // if C4 < 10^(q1+q2-1) = 10^19 then q4 = q1+q2-1 = 19 else q4 = q1+q2 = 20 if (C4.w[1] == 0 && C4.w[0] < ten2k64[19]) { // 19 = q1+q2-1 // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64; q4 = 19; // 19 = q1 + q2 - 1 } else { // if (C4.w[1] == 0) // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64; // else // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128; q4 = 20; // 20 = q1 + q2 } } else if (q1 + q2 <= 38) { // 21 <= q1 + q2 <= 38 // C4 = C1 * C2 fits in 64 or 128 bits // (64 bits possibly, but only when q1 + q2 = 21 and C4 has 20 digits) // at least one of C1, C2 has at most 19 decimal digits & fits in 64 bits if (q1 <= 19) { __mul_128x64_to_128 (C4, C1.w[0], C2); } else { // q2 <= 19 __mul_128x64_to_128 (C4, C2.w[0], C1); } // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2 if (C4.w[1] < ten2k128[q1 + q2 - 21].w[1] || (C4.w[1] == ten2k128[q1 + q2 - 21].w[1] && C4.w[0] < ten2k128[q1 + q2 - 21].w[0])) { // if (C4.w[1] == 0) // q4 = 20, necessarily // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64; // else // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128; q4 = q1 + q2 - 1; // q4 in [20, 37] } else { // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128; q4 = q1 + q2; // q4 in [21, 38] } } else if (q1 + q2 == 39) { // C4 = C1 * C2 fits in 128 or 192 bits // both C1 and C2 fit in 128 bits (actually in 113 bits) // may replace this by 128x128_to192 __mul_128x128_to_256 (C4, C1, C2); // C4.w[3] is 0 // if C4 < 10^(q1+q2-1) = 10^38 then q4 = q1+q2-1 = 38 else q4 = q1+q2 = 39 if (C4.w[2] == 0 && (C4.w[1] < ten2k128[18].w[1] || (C4.w[1] == ten2k128[18].w[1] && C4.w[0] < ten2k128[18].w[0]))) { // 18 = 38 - 20 = q1+q2-1 - 20 // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128; q4 = 38; // 38 = q1 + q2 - 1 } else { // if (C4.w[2] == 0) // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128; // else // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192; q4 = 39; // 39 = q1 + q2 } } else if (q1 + q2 <= 57) { // 40 <= q1 + q2 <= 57 // C4 = C1 * C2 fits in 128 or 192 bits // (128 bits possibly, but only when q1 + q2 = 40 and C4 has 39 digits) // both C1 and C2 fit in 128 bits (actually in 113 bits); at most one // may fit in 64 bits if (C1.w[1] == 0) { // C1 fits in 64 bits // __mul_64x128_full (REShi64, RESlo128, A64, B128) __mul_64x128_full (C4.w[2], C4, C1.w[0], C2); } else if (C2.w[1] == 0) { // C2 fits in 64 bits // __mul_64x128_full (REShi64, RESlo128, A64, B128) __mul_64x128_full (C4.w[2], C4, C2.w[0], C1); } else { // both C1 and C2 require 128 bits // may use __mul_128x128_to_192 (C4.w[2], C4.w[0], C2.w[0], C1); __mul_128x128_to_256 (C4, C1, C2); // C4.w[3] = 0 } // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2 if (C4.w[2] < ten2k256[q1 + q2 - 40].w[2] || (C4.w[2] == ten2k256[q1 + q2 - 40].w[2] && (C4.w[1] < ten2k256[q1 + q2 - 40].w[1] || (C4.w[1] == ten2k256[q1 + q2 - 40].w[1] && C4.w[0] < ten2k256[q1 + q2 - 40].w[0])))) { // if (C4.w[2] == 0) // q4 = 39, necessarily // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128; // else // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192; q4 = q1 + q2 - 1; // q4 in [39, 56] } else { // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192; q4 = q1 + q2; // q4 in [40, 57] } } else if (q1 + q2 == 58) { // C4 = C1 * C2 fits in 192 or 256 bits // both C1 and C2 fit in 128 bits (actually in 113 bits); at most one // may fit in 64 bits if (C1.w[1] == 0) { // C1 * C2 will fit in 192 bits __mul_64x128_full (C4.w[2], C4, C1.w[0], C2); // may use 64x128_to_192 } else if (C2.w[1] == 0) { // C1 * C2 will fit in 192 bits __mul_64x128_full (C4.w[2], C4, C2.w[0], C1); // may use 64x128_to_192 } else { // C1 * C2 will fit in 192 bits or in 256 bits __mul_128x128_to_256 (C4, C1, C2); } // if C4 < 10^(q1+q2-1) = 10^57 then q4 = q1+q2-1 = 57 else q4 = q1+q2 = 58 if (C4.w[3] == 0 && (C4.w[2] < ten2k256[18].w[2] || (C4.w[2] == ten2k256[18].w[2] && (C4.w[1] < ten2k256[18].w[1] || (C4.w[1] == ten2k256[18].w[1] && C4.w[0] < ten2k256[18].w[0]))))) { // 18 = 57 - 39 = q1+q2-1 - 39 // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192; q4 = 57; // 57 = q1 + q2 - 1 } else { // if (C4.w[3] == 0) // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192; // else // length of C1 * C2 rounded up to a multiple of 64 bits is len = 256; q4 = 58; // 58 = q1 + q2 } } else { // if 59 <= q1 + q2 <= 68 // C4 = C1 * C2 fits in 192 or 256 bits // (192 bits possibly, but only when q1 + q2 = 59 and C4 has 58 digits) // both C1 and C2 fit in 128 bits (actually in 113 bits); none fits in // 64 bits // may use __mul_128x128_to_192 (C4.w[2], C4.w[0], C2.w[0], C1); __mul_128x128_to_256 (C4, C1, C2); // C4.w[3] = 0 // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2 if (C4.w[3] < ten2k256[q1 + q2 - 40].w[3] || (C4.w[3] == ten2k256[q1 + q2 - 40].w[3] && (C4.w[2] < ten2k256[q1 + q2 - 40].w[2] || (C4.w[2] == ten2k256[q1 + q2 - 40].w[2] && (C4.w[1] < ten2k256[q1 + q2 - 40].w[1] || (C4.w[1] == ten2k256[q1 + q2 - 40].w[1] && C4.w[0] < ten2k256[q1 + q2 - 40].w[0])))))) { // if (C4.w[3] == 0) // q4 = 58, necessarily // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192; // else // length of C1 * C2 rounded up to a multiple of 64 bits is len = 256; q4 = q1 + q2 - 1; // q4 in [58, 67] } else { // length of C1 * C2 rounded up to a multiple of 64 bits is len = 256; q4 = q1 + q2; // q4 in [59, 68] } } if (C3.w[1] == 0x0 && C3.w[0] == 0x0) { // x = f, y = f, z = 0 save_fpsf = *pfpsf; // sticky bits - caller value must be preserved *pfpsf = 0; if (q4 > p34) { // truncate C4 to p34 digits into res // x = q4-p34, 1 <= x <= 34 because 35 <= q4 <= 68 x0 = q4 - p34; if (q4 <= 38) { P128.w[1] = C4.w[1]; P128.w[0] = C4.w[0]; round128_19_38 (q4, x0, P128, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else if (q4 <= 57) { // 35 <= q4 <= 57 P192.w[2] = C4.w[2]; P192.w[1] = C4.w[1]; P192.w[0] = C4.w[0]; round192_39_57 (q4, x0, P192, &R192, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res.w[0] = R192.w[0]; res.w[1] = R192.w[1]; } else { // if (q4 <= 68) round256_58_76 (q4, x0, C4, &R256, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res.w[0] = R256.w[0]; res.w[1] = R256.w[1]; } e4 = e4 + x0; if (incr_exp) { e4 = e4 + 1; } q4 = p34; // res is now the coefficient of the result rounded to the destination // precision, with unbounded exponent; the exponent is e4; q4=digits(res) } else { // if (q4 <= p34) // C4 * 10^e4 is the result rounded to the destination precision, with // unbounded exponent (which is exact) if ((q4 + e4 <= p34 + expmax) && (e4 > expmax)) { // e4 is too large, but can be brought within range by scaling up C4 scale = e4 - expmax; // 1 <= scale < P-q4 <= P-1 => 1 <= scale <= P-2 // res = (C4 * 10^scale) * 10^expmax if (q4 <= 19) { // C4 fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C4.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, C4.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C4.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, C4.w[0], ten2k128[scale - 20]); } } else { // C4 fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * CC43 __mul_128x64_to_128 (res, ten2k64[scale], C4); } e4 = e4 - scale; // expmax q4 = q4 + scale; } else { res.w[1] = C4.w[1]; res.w[0] = C4.w[0]; } // res is the coefficient of the result rounded to the destination // precision, with unbounded exponent (it has q4 digits); the exponent // is e4 (exact result) } // check for overflow if (q4 + e4 > p34 + expmax) { if (rnd_mode == ROUNDING_TO_NEAREST) { res.w[1] = p_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0000000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); } else { res.w[1] = p_sign | res.w[1]; rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e4, &res, pfpsf); } *pfpsf |= save_fpsf; *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // check for underflow if (q4 + e4 < expmin + P34) { is_tiny = 1; // the result is tiny if (e4 < expmin) { // if e4 < expmin, we must truncate more of res x0 = expmin - e4; // x0 >= 1 is_inexact_lt_midpoint0 = is_inexact_lt_midpoint; is_inexact_gt_midpoint0 = is_inexact_gt_midpoint; is_midpoint_lt_even0 = is_midpoint_lt_even; is_midpoint_gt_even0 = is_midpoint_gt_even; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; // the number of decimal digits in res is q4 if (x0 < q4) { // 1 <= x0 <= q4-1 => round res to q4 - x0 digits if (q4 <= 18) { // 2 <= q4 <= 18, 1 <= x0 <= 17 round64_2_18 (q4, x0, res.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) { // R64 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 17 R64 = ten2k64[q4 - x0]; } // res.w[1] = 0; (from above) res.w[0] = R64; } else { // if (q4 <= 34) // 19 <= q4 <= 38 P128.w[1] = res.w[1]; P128.w[0] = res.w[0]; round128_19_38 (q4, x0, P128, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) { // increase coefficient by a factor of 10; this will be <= 10^33 // R128 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 37 if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19 // res.w[1] = 0; res.w[0] = ten2k64[q4 - x0]; } else { // 20 <= q4 - x0 <= 37 res.w[0] = ten2k128[q4 - x0 - 20].w[0]; res.w[1] = ten2k128[q4 - x0 - 20].w[1]; } } } e4 = e4 + x0; // expmin } else if (x0 == q4) { // the second rounding is for 0.d(0)d(1)...d(q4-1) * 10^emin // determine relationship with 1/2 ulp if (q4 <= 19) { if (res.w[0] < midpoint64[q4 - 1]) { // < 1/2 ulp lt_half_ulp = 1; is_inexact_lt_midpoint = 1; } else if (res.w[0] == midpoint64[q4 - 1]) { // = 1/2 ulp eq_half_ulp = 1; is_midpoint_gt_even = 1; } else { // > 1/2 ulp // gt_half_ulp = 1; is_inexact_gt_midpoint = 1; } } else { // if (q4 <= 34) if (res.w[1] < midpoint128[q4 - 20].w[1] || (res.w[1] == midpoint128[q4 - 20].w[1] && res.w[0] < midpoint128[q4 - 20].w[0])) { // < 1/2 ulp lt_half_ulp = 1; is_inexact_lt_midpoint = 1; } else if (res.w[1] == midpoint128[q4 - 20].w[1] && res.w[0] == midpoint128[q4 - 20].w[0]) { // = 1/2 ulp eq_half_ulp = 1; is_midpoint_gt_even = 1; } else { // > 1/2 ulp // gt_half_ulp = 1; is_inexact_gt_midpoint = 1; } } if (lt_half_ulp || eq_half_ulp) { // res = +0.0 * 10^expmin res.w[1] = 0x0000000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // if (gt_half_ulp) // res = +1 * 10^expmin res.w[1] = 0x0000000000000000ull; res.w[0] = 0x0000000000000001ull; } e4 = expmin; } else { // if (x0 > q4) // the second rounding is for 0.0...d(0)d(1)...d(q4-1) * 10^emin res.w[1] = 0; res.w[0] = 0; e4 = expmin; is_inexact_lt_midpoint = 1; } // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // Note: a double rounding error upward is not possible; for this // the result after the first rounding would have to be 99...95 // (35 digits in all), possibly followed by a number of zeros; this // not possible for f * f + 0 is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res.w[0]++; if (res.w[0] == 0) res.w[1]++; is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this second rounding was exact the result may still be // inexact because of the first rounding if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } } else { // if e4 >= emin then q4 < P and the result is tiny and exact if (e3 < e4) { // if (e3 < e4) the preferred exponent is e3 // return (C4 * 10^scale) * 10^(e4 - scale) // where scale = min (p34-q4, (e4 - e3)) scale = p34 - q4; ind = e4 - e3; if (ind < scale) scale = ind; if (scale == 0) { ; // res and e4 are unchanged } else if (q4 <= 19) { // C4 fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 res.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, res.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 res.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, res.w[0], ten2k128[scale - 20]); } } else { // res fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C3 __mul_128x64_to_128 (res, ten2k64[scale], res); } // subtract scale from the exponent e4 = e4 - scale; } } // check for inexact result if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) { // set the inexact flag and the underflow flag *pfpsf |= INEXACT_EXCEPTION; *pfpsf |= UNDERFLOW_EXCEPTION; } res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | res.w[1]; if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e4, &res, pfpsf); } *pfpsf |= save_fpsf; *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // no overflow, and no underflow for rounding to nearest res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | res.w[1]; if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e4, &res, pfpsf); // if e4 = expmin && significand < 10^33 => result is tiny (for RD, RZ) if (e4 == expmin) { if ((res.w[1] & MASK_COEFF) < 0x0000314dc6448d93ull || ((res.w[1] & MASK_COEFF) == 0x0000314dc6448d93ull && res.w[0] < 0x38c15b0a00000000ull)) { is_tiny = 1; } } } if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; if (is_tiny) *pfpsf |= UNDERFLOW_EXCEPTION; } if ((*pfpsf & INEXACT_EXCEPTION) == 0) { // x * y is exact // need to ensure that the result has the preferred exponent p_exp = res.w[1] & MASK_EXP; if (z_exp < p_exp) { // the preferred exponent is z_exp // signficand of res in C3 C3.w[1] = res.w[1] & MASK_COEFF; C3.w[0] = res.w[0]; // the number of decimal digits of x * y is q4 <= 34 // Note: the coefficient fits in 128 bits // return (C3 * 10^scale) * 10^(p_exp - scale) // where scale = min (p34-q4, (p_exp-z_exp) >> 49) scale = p34 - q4; ind = (p_exp - z_exp) >> 49; if (ind < scale) scale = ind; // subtract scale from the exponent p_exp = p_exp - ((UINT64) scale << 49); if (scale == 0) { ; // leave res unchanged } else if (q4 <= 19) { // x * y fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C3.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C3.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]); } res.w[1] = p_sign | (p_exp & MASK_EXP) | res.w[1]; } else { // x * y fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C3 __mul_128x64_to_128 (res, ten2k64[scale], C3); res.w[1] = p_sign | (p_exp & MASK_EXP) | res.w[1]; } } // else leave the result as it is, because p_exp <= z_exp } *pfpsf |= save_fpsf; *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // else we have f * f + f // continue with x = f, y = f, z = f delta = q3 + e3 - q4 - e4; delta_ge_zero: if (delta >= 0) { if (p34 <= delta - 1 || // Case (1') (p34 == delta && e3 + 6176 < p34 - q3)) { // Case (1''A) // check for overflow, which can occur only in Case (1') if ((q3 + e3) > (p34 + expmax) && p34 <= delta - 1) { // e3 > expmax implies p34 <= delta-1 and e3 > expmax is a necessary // condition for (q3 + e3) > (p34 + expmax) if (rnd_mode == ROUNDING_TO_NEAREST) { res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0000000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); } else { if (p_sign == z_sign) { is_inexact_lt_midpoint = 1; } else { is_inexact_gt_midpoint = 1; } // q3 <= p34; if (q3 < p34) scale C3 up by 10^(p34-q3) scale = p34 - q3; if (scale == 0) { res.w[1] = z_sign | C3.w[1]; res.w[0] = C3.w[0]; } else { if (q3 <= 19) { // C3 fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C3.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C3.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]); } } else { // C3 fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C3 __mul_128x64_to_128 (res, ten2k64[scale], C3); } // the coefficient in res has q3 + scale = p34 digits } e3 = e3 - scale; res.w[1] = z_sign | res.w[1]; rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // res = z if (q3 < p34) { // the preferred exponent is z_exp - (p34 - q3) // return (C3 * 10^scale) * 10^(z_exp - scale) // where scale = min (p34-q3, z_exp-EMIN) scale = p34 - q3; ind = e3 + 6176; if (ind < scale) scale = ind; if (scale == 0) { res.w[1] = C3.w[1]; res.w[0] = C3.w[0]; } else if (q3 <= 19) { // z fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C3.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C3.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]); } } else { // z fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C3 __mul_128x64_to_128 (res, ten2k64[scale], C3); } // the coefficient in res has q3 + scale digits // subtract scale from the exponent z_exp = z_exp - ((UINT64) scale << 49); e3 = e3 - scale; res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; if (scale + q3 < p34) *pfpsf |= UNDERFLOW_EXCEPTION; } else { scale = 0; res.w[1] = z_sign | ((UINT64) (e3 + 6176) << 49) | C3.w[1]; res.w[0] = C3.w[0]; } // use the following to avoid double rounding errors when operating on // mixed formats in rounding to nearest, and for correcting the result // if not rounding to nearest if ((p_sign != z_sign) && (delta == (q3 + scale + 1))) { // there is a gap of exactly one digit between the scaled C3 and C4 // C3 * 10^ scale = 10^(q3+scale-1) <=> C3 = 10^(q3-1) is special case if ((q3 <= 19 && C3.w[0] != ten2k64[q3 - 1]) || (q3 == 20 && (C3.w[1] != 0 || C3.w[0] != ten2k64[19])) || (q3 >= 21 && (C3.w[1] != ten2k128[q3 - 21].w[1] || C3.w[0] != ten2k128[q3 - 21].w[0]))) { // C3 * 10^ scale != 10^(q3-1) // if ((res.w[1] & MASK_COEFF) != 0x0000314dc6448d93ull || // res.w[0] != 0x38c15b0a00000000ull) { // C3 * 10^scale != 10^33 is_inexact_gt_midpoint = 1; // if (z_sign), set as if for abs. value } else { // if C3 * 10^scale = 10^(q3+scale-1) // ok from above e3 = (z_exp >> 49) - 6176; // the result is always inexact if (q4 == 1) { R64 = C4.w[0]; } else { // if q4 > 1 then truncate C4 from q4 digits to 1 digit; // x = q4-1, 1 <= x <= 67 and check if this operation is exact if (q4 <= 18) { // 2 <= q4 <= 18 round64_2_18 (q4, q4 - 1, C4.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else if (q4 <= 38) { P128.w[1] = C4.w[1]; P128.w[0] = C4.w[0]; round128_19_38 (q4, q4 - 1, P128, &R128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R64 = R128.w[0]; // one decimal digit } else if (q4 <= 57) { P192.w[2] = C4.w[2]; P192.w[1] = C4.w[1]; P192.w[0] = C4.w[0]; round192_39_57 (q4, q4 - 1, P192, &R192, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R64 = R192.w[0]; // one decimal digit } else { // if (q4 <= 68) round256_58_76 (q4, q4 - 1, C4, &R256, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R64 = R256.w[0]; // one decimal digit } if (incr_exp) { R64 = 10; } } if (q4 == 1 && C4.w[0] == 5) { is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 1; is_midpoint_gt_even = 0; } else if ((e3 == expmin) || R64 < 5 || (R64 == 5 && is_inexact_gt_midpoint)) { // result does not change is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; // result decremented is 10^(q3+scale) - 1 if ((q3 + scale) <= 19) { res.w[1] = 0; res.w[0] = ten2k64[q3 + scale]; } else { // if ((q3 + scale + 1) <= 35) res.w[1] = ten2k128[q3 + scale - 20].w[1]; res.w[0] = ten2k128[q3 + scale - 20].w[0]; } res.w[0] = res.w[0] - 1; // borrow never occurs z_exp = z_exp - EXP_P1; e3 = e3 - 1; res.w[1] = z_sign | ((UINT64) (e3 + 6176) << 49) | res.w[1]; } if (e3 == expmin) { if (R64 < 5 || (R64 == 5 && !is_inexact_lt_midpoint)) { ; // result not tiny (in round-to-nearest mode) } else { *pfpsf |= UNDERFLOW_EXCEPTION; } } } // end 10^(q3+scale-1) // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { if (p_sign == z_sign) { // if (z_sign), set as if for absolute value is_inexact_lt_midpoint = 1; } else { // if (p_sign != z_sign) // if (z_sign), set as if for absolute value is_inexact_gt_midpoint = 1; } *pfpsf |= INEXACT_EXCEPTION; } // the result is always inexact => set the inexact flag // Determine tininess: // if (exp > expmin) // the result is not tiny // else // if exp = emin // if (q3 + scale < p34) // the result is tiny // else // if (q3 + scale = p34) // if (C3 * 10^scale > 10^33) // the result is not tiny // else // if C3 * 10^scale = 10^33 // if (xy * z > 0) // the result is not tiny // else // if (xy * z < 0) // if (z > 0) // if rnd_mode != RP // the result is tiny // else // if RP // the result is not tiny // else // if (z < 0) // if rnd_mode != RM // the result is tiny // else // if RM // the result is not tiny // endif // endif // endif // endif // endif // endif if ((e3 == expmin && (q3 + scale) < p34) || (e3 == expmin && (q3 + scale) == p34 && (res.w[1] & MASK_COEFF) == 0x0000314dc6448d93ull && // 10^33_high res.w[0] == 0x38c15b0a00000000ull && // 10^33_low z_sign != p_sign && ((!z_sign && rnd_mode != ROUNDING_UP) || (z_sign && rnd_mode != ROUNDING_DOWN)))) { *pfpsf |= UNDERFLOW_EXCEPTION; } if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if (p34 == delta) { // Case (1''B) // because Case (1''A) was treated above, e3 + 6176 >= p34 - q3 // and C3 can be scaled up to p34 digits if needed // scale C3 to p34 digits if needed scale = p34 - q3; // 0 <= scale <= p34 - 1 if (scale == 0) { res.w[1] = C3.w[1]; res.w[0] = C3.w[0]; } else if (q3 <= 19) { // z fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C3.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C3.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]); } } else { // z fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C3 __mul_128x64_to_128 (res, ten2k64[scale], C3); } // subtract scale from the exponent z_exp = z_exp - ((UINT64) scale << 49); e3 = e3 - scale; // now z_sign, z_exp, and res correspond to a z scaled to p34 = 34 digits // determine whether x * y is less than, equal to, or greater than // 1/2 ulp (z) if (q4 <= 19) { if (C4.w[0] < midpoint64[q4 - 1]) { // < 1/2 ulp lt_half_ulp = 1; } else if (C4.w[0] == midpoint64[q4 - 1]) { // = 1/2 ulp eq_half_ulp = 1; } else { // > 1/2 ulp gt_half_ulp = 1; } } else if (q4 <= 38) { if (C4.w[2] == 0 && (C4.w[1] < midpoint128[q4 - 20].w[1] || (C4.w[1] == midpoint128[q4 - 20].w[1] && C4.w[0] < midpoint128[q4 - 20].w[0]))) { // < 1/2 ulp lt_half_ulp = 1; } else if (C4.w[2] == 0 && C4.w[1] == midpoint128[q4 - 20].w[1] && C4.w[0] == midpoint128[q4 - 20].w[0]) { // = 1/2 ulp eq_half_ulp = 1; } else { // > 1/2 ulp gt_half_ulp = 1; } } else if (q4 <= 58) { if (C4.w[3] == 0 && (C4.w[2] < midpoint192[q4 - 39].w[2] || (C4.w[2] == midpoint192[q4 - 39].w[2] && C4.w[1] < midpoint192[q4 - 39].w[1]) || (C4.w[2] == midpoint192[q4 - 39].w[2] && C4.w[1] == midpoint192[q4 - 39].w[1] && C4.w[0] < midpoint192[q4 - 39].w[0]))) { // < 1/2 ulp lt_half_ulp = 1; } else if (C4.w[3] == 0 && C4.w[2] == midpoint192[q4 - 39].w[2] && C4.w[1] == midpoint192[q4 - 39].w[1] && C4.w[0] == midpoint192[q4 - 39].w[0]) { // = 1/2 ulp eq_half_ulp = 1; } else { // > 1/2 ulp gt_half_ulp = 1; } } else { if (C4.w[3] < midpoint256[q4 - 59].w[3] || (C4.w[3] == midpoint256[q4 - 59].w[3] && C4.w[2] < midpoint256[q4 - 59].w[2]) || (C4.w[3] == midpoint256[q4 - 59].w[3] && C4.w[2] == midpoint256[q4 - 59].w[2] && C4.w[1] < midpoint256[q4 - 59].w[1]) || (C4.w[3] == midpoint256[q4 - 59].w[3] && C4.w[2] == midpoint256[q4 - 59].w[2] && C4.w[1] == midpoint256[q4 - 59].w[1] && C4.w[0] < midpoint256[q4 - 59].w[0])) { // < 1/2 ulp lt_half_ulp = 1; } else if (C4.w[3] == midpoint256[q4 - 59].w[3] && C4.w[2] == midpoint256[q4 - 59].w[2] && C4.w[1] == midpoint256[q4 - 59].w[1] && C4.w[0] == midpoint256[q4 - 59].w[0]) { // = 1/2 ulp eq_half_ulp = 1; } else { // > 1/2 ulp gt_half_ulp = 1; } } if (p_sign == z_sign) { if (lt_half_ulp) { res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; // use the following to avoid double rounding errors when operating on // mixed formats in rounding to nearest is_inexact_lt_midpoint = 1; // if (z_sign), as if for absolute value } else if ((eq_half_ulp && (res.w[0] & 0x01)) || gt_half_ulp) { // add 1 ulp to the significand res.w[0]++; if (res.w[0] == 0x0ull) res.w[1]++; // check for rounding overflow, when coeff == 10^34 if ((res.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && res.w[0] == 0x378d8e6400000000ull) { // coefficient = 10^34 e3 = e3 + 1; // coeff = 10^33 z_exp = ((UINT64) (e3 + 6176) << 49) & MASK_EXP; res.w[1] = 0x0000314dc6448d93ull; res.w[0] = 0x38c15b0a00000000ull; } // end add 1 ulp res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; if (eq_half_ulp) { is_midpoint_lt_even = 1; // if (z_sign), as if for absolute value } else { is_inexact_gt_midpoint = 1; // if (z_sign), as if for absolute value } } else { // if (eq_half_ulp && !(res.w[0] & 0x01)) // leave unchanged res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; is_midpoint_gt_even = 1; // if (z_sign), as if for absolute value } // the result is always inexact, and never tiny // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // check for overflow if (e3 > expmax && rnd_mode == ROUNDING_TO_NEAREST) { res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0000000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); z_exp = res.w[1] & MASK_EXP; } } else { // if (p_sign != z_sign) // consider two cases, because C3 * 10^scale = 10^33 is a special case if (res.w[1] != 0x0000314dc6448d93ull || res.w[0] != 0x38c15b0a00000000ull) { // C3 * 10^scale != 10^33 if (lt_half_ulp) { res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; // use the following to avoid double rounding errors when operating // on mixed formats in rounding to nearest is_inexact_gt_midpoint = 1; // if (z_sign), as if for absolute value } else if ((eq_half_ulp && (res.w[0] & 0x01)) || gt_half_ulp) { // subtract 1 ulp from the significand res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; if (eq_half_ulp) { is_midpoint_gt_even = 1; // if (z_sign), as if for absolute value } else { is_inexact_lt_midpoint = 1; //if(z_sign), as if for absolute value } } else { // if (eq_half_ulp && !(res.w[0] & 0x01)) // leave unchanged res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; is_midpoint_lt_even = 1; // if (z_sign), as if for absolute value } // the result is always inexact, and never tiny // check for overflow for RN if (e3 > expmax) { if (rnd_mode == ROUNDING_TO_NEAREST) { res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0000000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); } else { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); } z_exp = res.w[1] & MASK_EXP; } else { // if C3 * 10^scale = 10^33 e3 = (z_exp >> 49) - 6176; if (e3 > expmin) { // the result is exact if exp > expmin and C4 = d*10^(q4-1), // where d = 1, 2, 3, ..., 9; it could be tiny too, but exact if (q4 == 1) { // if q4 = 1 the result is exact // result coefficient = 10^34 - C4 res.w[1] = 0x0001ed09bead87c0ull; res.w[0] = 0x378d8e6400000000ull - C4.w[0]; z_exp = z_exp - EXP_P1; e3 = e3 - 1; res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; } else { // if q4 > 1 then truncate C4 from q4 digits to 1 digit; // x = q4-1, 1 <= x <= 67 and check if this operation is exact if (q4 <= 18) { // 2 <= q4 <= 18 round64_2_18 (q4, q4 - 1, C4.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else if (q4 <= 38) { P128.w[1] = C4.w[1]; P128.w[0] = C4.w[0]; round128_19_38 (q4, q4 - 1, P128, &R128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R64 = R128.w[0]; // one decimal digit } else if (q4 <= 57) { P192.w[2] = C4.w[2]; P192.w[1] = C4.w[1]; P192.w[0] = C4.w[0]; round192_39_57 (q4, q4 - 1, P192, &R192, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R64 = R192.w[0]; // one decimal digit } else { // if (q4 <= 68) round256_58_76 (q4, q4 - 1, C4, &R256, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R64 = R256.w[0]; // one decimal digit } if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // the result is exact: 10^34 - R64 // incr_exp = 0 with certainty z_exp = z_exp - EXP_P1; e3 = e3 - 1; res.w[1] = z_sign | (z_exp & MASK_EXP) | 0x0001ed09bead87c0ull; res.w[0] = 0x378d8e6400000000ull - R64; } else { // We want R64 to be the top digit of C4, but we actually // obtained (C4 * 10^(-q4+1))RN; a correction may be needed, // because the top digit is (C4 * 10^(-q4+1))RZ // however, if incr_exp = 1 then R64 = 10 with certainty if (incr_exp) { R64 = 10; } // the result is inexact as C4 has more than 1 significant digit // and C3 * 10^scale = 10^33 // example of case that is treated here: // 100...0 * 10^e3 - 0.41 * 10^e3 = // 0999...9.59 * 10^e3 -> rounds to 99...96*10^(e3-1) // note that (e3 > expmin} // in order to round, subtract R64 from 10^34 and then compare // C4 - R64 * 10^(q4-1) with 1/2 ulp // calculate 10^34 - R64 res.w[1] = 0x0001ed09bead87c0ull; res.w[0] = 0x378d8e6400000000ull - R64; z_exp = z_exp - EXP_P1; // will be OR-ed with sign & significand // calculate C4 - R64 * 10^(q4-1); this is a rare case and // R64 is small, 1 <= R64 <= 9 e3 = e3 - 1; if (is_inexact_lt_midpoint) { is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; } else if (is_inexact_gt_midpoint) { is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 1; } else if (is_midpoint_lt_even) { is_midpoint_lt_even = 0; is_midpoint_gt_even = 1; } else if (is_midpoint_gt_even) { is_midpoint_gt_even = 0; is_midpoint_lt_even = 1; } else { ; } // the result is always inexact, and never tiny // check for overflow for RN if (e3 > expmax) { if (rnd_mode == ROUNDING_TO_NEAREST) { res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0000000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); } else { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; res.w[1] = z_sign | ((UINT64) (e3 + 6176) << 49) | res.w[1]; if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); } z_exp = res.w[1] & MASK_EXP; } // end result is inexact } // end q4 > 1 } else { // if (e3 = emin) // if e3 = expmin the result is also tiny (the condition for // tininess is C4 > 050...0 [q4 digits] which is met because // the msd of C4 is not zero) // the result is tiny and inexact in all rounding modes; // it is either 100...0 or 0999...9 (use lt_half_ulp, eq_half_ulp, // gt_half_ulp to calculate) // if (lt_half_ulp || eq_half_ulp) res = 10^33 stays unchanged // p_sign != z_sign so swap gt_half_ulp and lt_half_ulp if (gt_half_ulp) { // res = 10^33 - 1 res.w[1] = 0x0000314dc6448d93ull; res.w[0] = 0x38c15b09ffffffffull; } else { res.w[1] = 0x0000314dc6448d93ull; res.w[0] = 0x38c15b0a00000000ull; } res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; *pfpsf |= UNDERFLOW_EXCEPTION; // inexact is set later if (eq_half_ulp) { is_midpoint_lt_even = 1; // if (z_sign), as if for absolute value } else if (lt_half_ulp) { is_inexact_gt_midpoint = 1; //if(z_sign), as if for absolute value } else { // if (gt_half_ulp) is_inexact_lt_midpoint = 1; //if(z_sign), as if for absolute value } if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); z_exp = res.w[1] & MASK_EXP; } } // end e3 = emin // set the inexact flag (if the result was not exact) if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) *pfpsf |= INEXACT_EXCEPTION; } // end 10^33 } // end if (p_sign != z_sign) res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1]; *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if (((q3 <= delta && delta < p34 && p34 < delta + q4) || // Case (2) (q3 <= delta && delta + q4 <= p34) || // Case (3) (delta < q3 && p34 < delta + q4) || // Case (4) (delta < q3 && q3 <= delta + q4 && delta + q4 <= p34) || // Case (5) (delta + q4 < q3)) && // Case (6) !(delta <= 1 && p_sign != z_sign)) { // Case (2), (3), (4), (5) or (6) // the result has the sign of z if ((q3 <= delta && delta < p34 && p34 < delta + q4) || // Case (2) (delta < q3 && p34 < delta + q4)) { // Case (4) // round first the sum x * y + z with unbounded exponent // scale C3 up by scale = p34 - q3, 1 <= scale <= p34-1, // 1 <= scale <= 33 // calculate res = C3 * 10^scale scale = p34 - q3; x0 = delta + q4 - p34; } else if (delta + q4 < q3) { // Case (6) // make Case (6) look like Case (3) or Case (5) with scale = 0 // by scaling up C4 by 10^(q3 - delta - q4) scale = q3 - delta - q4; // 1 <= scale <= 33 if (q4 <= 19) { // 1 <= scale <= 19; C4 fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C4.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (P128, C4.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C4.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (P128, C4.w[0], ten2k128[scale - 20]); } } else { // C4 fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C4 __mul_128x64_to_128 (P128, ten2k64[scale], C4); } C4.w[0] = P128.w[0]; C4.w[1] = P128.w[1]; // e4 does not need adjustment, as it is not used from this point on scale = 0; x0 = 0; // now Case (6) looks like Case (3) or Case (5) with scale = 0 } else { // if Case (3) or Case (5) // Note: Case (3) is similar to Case (2), but scale differs and the // result is exact, unless it is tiny (so x0 = 0 when calculating the // result with unbounded exponent) // calculate first the sum x * y + z with unbounded exponent (exact) // scale C3 up by scale = delta + q4 - q3, 1 <= scale <= p34-1, // 1 <= scale <= 33 // calculate res = C3 * 10^scale scale = delta + q4 - q3; x0 = 0; // Note: the comments which follow refer [mainly] to Case (2)] } case2_repeat: if (scale == 0) { // this could happen e.g. if we return to case2_repeat // or in Case (4) res.w[1] = C3.w[1]; res.w[0] = C3.w[0]; } else if (q3 <= 19) { // 1 <= scale <= 19; z fits in 64 bits if (scale <= 19) { // 10^scale fits in 64 bits // 64 x 64 C3.w[0] * ten2k64[scale] __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]); } else { // 10^scale fits in 128 bits // 64 x 128 C3.w[0] * ten2k128[scale - 20] __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]); } } else { // z fits in 128 bits, but 10^scale must fit in 64 bits // 64 x 128 ten2k64[scale] * C3 __mul_128x64_to_128 (res, ten2k64[scale], C3); } // e3 is already calculated e3 = e3 - scale; // now res = C3 * 10^scale and e3 = e3 - scale // Note: C3 * 10^scale could be 10^34 if we returned to case2_repeat // because the result was too small // round C4 to nearest to q4 - x0 digits, where x0 = delta + q4 - p34, // 1 <= x0 <= min (q4 - 1, 2 * p34 - 1) <=> 1 <= x0 <= min (q4 - 1, 67) // Also: 1 <= q4 - x0 <= p34 -1 => 1 <= q4 - x0 <= 33 (so the result of // the rounding fits in 128 bits!) // x0 = delta + q4 - p34 (calculated before reaching case2_repeat) // because q3 + q4 - x0 <= P => x0 >= q3 + q4 - p34 if (x0 == 0) { // this could happen only if we return to case2_repeat, or // for Case (3) or Case (6) R128.w[1] = C4.w[1]; R128.w[0] = C4.w[0]; } else if (q4 <= 18) { // 2 <= q4 <= 18, max(1, q3+q4-p34) <= x0 <= q4 - 1, 1 <= x0 <= 17 round64_2_18 (q4, x0, C4.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) { // R64 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 17 R64 = ten2k64[q4 - x0]; } R128.w[1] = 0; R128.w[0] = R64; } else if (q4 <= 38) { // 19 <= q4 <= 38, max(1, q3+q4-p34) <= x0 <= q4 - 1, 1 <= x0 <= 37 P128.w[1] = C4.w[1]; P128.w[0] = C4.w[0]; round128_19_38 (q4, x0, P128, &R128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) { // R128 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 37 if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19 R128.w[0] = ten2k64[q4 - x0]; // R128.w[1] stays 0 } else { // 20 <= q4 - x0 <= 37 R128.w[0] = ten2k128[q4 - x0 - 20].w[0]; R128.w[1] = ten2k128[q4 - x0 - 20].w[1]; } } } else if (q4 <= 57) { // 38 <= q4 <= 57, max(1, q3+q4-p34) <= x0 <= q4 - 1, 5 <= x0 <= 56 P192.w[2] = C4.w[2]; P192.w[1] = C4.w[1]; P192.w[0] = C4.w[0]; round192_39_57 (q4, x0, P192, &R192, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); // R192.w[2] is always 0 if (incr_exp) { // R192 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 5, 1 <= q4 - x0 <= 52 if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19 R192.w[0] = ten2k64[q4 - x0]; // R192.w[1] stays 0 // R192.w[2] stays 0 } else { // 20 <= q4 - x0 <= 33 R192.w[0] = ten2k128[q4 - x0 - 20].w[0]; R192.w[1] = ten2k128[q4 - x0 - 20].w[1]; // R192.w[2] stays 0 } } R128.w[1] = R192.w[1]; R128.w[0] = R192.w[0]; } else { // 58 <= q4 <= 68, max(1, q3+q4-p34) <= x0 <= q4 - 1, 25 <= x0 <= 67 round256_58_76 (q4, x0, C4, &R256, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); // R256.w[3] and R256.w[2] are always 0 if (incr_exp) { // R256 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 25, 1 <= q4 - x0 <= 43 if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19 R256.w[0] = ten2k64[q4 - x0]; // R256.w[1] stays 0 // R256.w[2] stays 0 // R256.w[3] stays 0 } else { // 20 <= q4 - x0 <= 33 R256.w[0] = ten2k128[q4 - x0 - 20].w[0]; R256.w[1] = ten2k128[q4 - x0 - 20].w[1]; // R256.w[2] stays 0 // R256.w[3] stays 0 } } R128.w[1] = R256.w[1]; R128.w[0] = R256.w[0]; } // now add C3 * 10^scale in res and the signed top (q4-x0) digits of C4, // rounded to nearest, which were copied into R128 if (z_sign == p_sign) { lsb = res.w[0] & 0x01; // lsb of C3 * 10^scale // the sum can result in [up to] p34 or p34 + 1 digits res.w[0] = res.w[0] + R128.w[0]; res.w[1] = res.w[1] + R128.w[1]; if (res.w[0] < R128.w[0]) res.w[1]++; // carry // if res > 10^34 - 1 need to increase x0 and decrease scale by 1 if (res.w[1] > 0x0001ed09bead87c0ull || (res.w[1] == 0x0001ed09bead87c0ull && res.w[0] > 0x378d8e63ffffffffull)) { // avoid double rounding error is_inexact_lt_midpoint0 = is_inexact_lt_midpoint; is_inexact_gt_midpoint0 = is_inexact_gt_midpoint; is_midpoint_lt_even0 = is_midpoint_lt_even; is_midpoint_gt_even0 = is_midpoint_gt_even; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; P128.w[1] = res.w[1]; P128.w[0] = res.w[0]; round128_19_38 (35, 1, P128, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); // incr_exp is 0 with certainty in this case // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // Note: a double rounding error upward is not possible; for this // the result after the first rounding would have to be 99...95 // (35 digits in all), possibly followed by a number of zeros; this // not possible in Cases (2)-(6) or (15)-(17) which may get here is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res.w[0]++; if (res.w[0] == 0) res.w[1]++; is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this second rounding was exact the result may still be // inexact because of the first rounding if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } // adjust exponent e3 = e3 + 1; if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { if (is_midpoint_lt_even0 || is_midpoint_gt_even0 || is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0) { is_inexact_lt_midpoint = 1; } } } else { // this is the result rounded with unbounded exponent, unless a // correction is needed res.w[1] = res.w[1] & MASK_COEFF; if (lsb == 1) { if (is_midpoint_gt_even) { // res = res + 1 is_midpoint_gt_even = 0; is_midpoint_lt_even = 1; res.w[0]++; if (res.w[0] == 0x0) res.w[1]++; // check for rounding overflow if (res.w[1] == 0x0001ed09bead87c0ull && res.w[0] == 0x378d8e6400000000ull) { // res = 10^34 => rounding overflow res.w[1] = 0x0000314dc6448d93ull; res.w[0] = 0x38c15b0a00000000ull; // 10^33 e3++; } } else if (is_midpoint_lt_even) { // res = res - 1 is_midpoint_lt_even = 0; is_midpoint_gt_even = 1; res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // if the result is pure zero, the sign depends on the rounding // mode (x*y and z had opposite signs) if (res.w[1] == 0x0ull && res.w[0] == 0x0ull) { if (rnd_mode != ROUNDING_DOWN) z_sign = 0x0000000000000000ull; else z_sign = 0x8000000000000000ull; // the exponent is max (e3, expmin) res.w[1] = 0x0; res.w[0] = 0x0; *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } } else { ; } } } } else { // if (z_sign != p_sign) lsb = res.w[0] & 0x01; // lsb of C3 * 10^scale; R128 contains rounded C4 // used to swap rounding indicators if p_sign != z_sign // the sum can result in [up to] p34 or p34 - 1 digits tmp64 = res.w[0]; res.w[0] = res.w[0] - R128.w[0]; res.w[1] = res.w[1] - R128.w[1]; if (res.w[0] > tmp64) res.w[1]--; // borrow // if res < 10^33 and exp > expmin need to decrease x0 and // increase scale by 1 if (e3 > expmin && ((res.w[1] < 0x0000314dc6448d93ull || (res.w[1] == 0x0000314dc6448d93ull && res.w[0] < 0x38c15b0a00000000ull)) || (is_inexact_lt_midpoint && res.w[1] == 0x0000314dc6448d93ull && res.w[0] == 0x38c15b0a00000000ull)) && x0 >= 1) { x0 = x0 - 1; // first restore e3, otherwise it will be too small e3 = e3 + scale; scale = scale + 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; incr_exp = 0; goto case2_repeat; } // else this is the result rounded with unbounded exponent; // because the result has opposite sign to that of C4 which was // rounded, need to change the rounding indicators if (is_inexact_lt_midpoint) { is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; } else if (is_inexact_gt_midpoint) { is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 1; } else if (lsb == 0) { if (is_midpoint_lt_even) { is_midpoint_lt_even = 0; is_midpoint_gt_even = 1; } else if (is_midpoint_gt_even) { is_midpoint_gt_even = 0; is_midpoint_lt_even = 1; } else { ; } } else if (lsb == 1) { if (is_midpoint_lt_even) { // res = res + 1 res.w[0]++; if (res.w[0] == 0x0) res.w[1]++; // check for rounding overflow if (res.w[1] == 0x0001ed09bead87c0ull && res.w[0] == 0x378d8e6400000000ull) { // res = 10^34 => rounding overflow res.w[1] = 0x0000314dc6448d93ull; res.w[0] = 0x38c15b0a00000000ull; // 10^33 e3++; } } else if (is_midpoint_gt_even) { // res = res - 1 res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // if the result is pure zero, the sign depends on the rounding // mode (x*y and z had opposite signs) if (res.w[1] == 0x0ull && res.w[0] == 0x0ull) { if (rnd_mode != ROUNDING_DOWN) z_sign = 0x0000000000000000ull; else z_sign = 0x8000000000000000ull; // the exponent is max (e3, expmin) res.w[1] = 0x0; res.w[0] = 0x0; *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } } else { ; } } else { ; } } // check for underflow if (e3 == expmin) { // and if significand < 10^33 => result is tiny if ((res.w[1] & MASK_COEFF) < 0x0000314dc6448d93ull || ((res.w[1] & MASK_COEFF) == 0x0000314dc6448d93ull && res.w[0] < 0x38c15b0a00000000ull)) { is_tiny = 1; } } else if (e3 < expmin) { // the result is tiny, so we must truncate more of res is_tiny = 1; x0 = expmin - e3; is_inexact_lt_midpoint0 = is_inexact_lt_midpoint; is_inexact_gt_midpoint0 = is_inexact_gt_midpoint; is_midpoint_lt_even0 = is_midpoint_lt_even; is_midpoint_gt_even0 = is_midpoint_gt_even; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; // determine the number of decimal digits in res if (res.w[1] == 0x0) { // between 1 and 19 digits for (ind = 1; ind <= 19; ind++) { if (res.w[0] < ten2k64[ind]) { break; } } // ind digits } else if (res.w[1] < ten2k128[0].w[1] || (res.w[1] == ten2k128[0].w[1] && res.w[0] < ten2k128[0].w[0])) { // 20 digits ind = 20; } else { // between 21 and 38 digits for (ind = 1; ind <= 18; ind++) { if (res.w[1] < ten2k128[ind].w[1] || (res.w[1] == ten2k128[ind].w[1] && res.w[0] < ten2k128[ind].w[0])) { break; } } // ind + 20 digits ind = ind + 20; } // at this point ind >= x0; because delta >= 2 on this path, the case // ind = x0 can occur only in Case (2) or case (3), when C3 has one // digit (q3 = 1) equal to 1 (C3 = 1), e3 is expmin (e3 = expmin), // the signs of x * y and z are opposite, and through cancellation // the most significant decimal digit in res has the weight // 10^(emin-1); however, it is clear that in this case the most // significant digit is 9, so the result before rounding is // 0.9... * 10^emin // Otherwise, ind > x0 because there are non-zero decimal digits in the // result with weight of at least 10^emin, and correction for underflow // can be carried out using the round*_*_2_* () routines if (x0 == ind) { // the result before rounding is 0.9... * 10^emin res.w[1] = 0x0; res.w[0] = 0x1; is_inexact_gt_midpoint = 1; } else if (ind <= 18) { // check that 2 <= ind // 2 <= ind <= 18, 1 <= x0 <= 17 round64_2_18 (ind, x0, res.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) { // R64 = 10^(ind-x0), 1 <= ind - x0 <= ind - 1, 1 <= ind - x0 <= 17 R64 = ten2k64[ind - x0]; } res.w[1] = 0; res.w[0] = R64; } else if (ind <= 38) { // 19 <= ind <= 38 P128.w[1] = res.w[1]; P128.w[0] = res.w[0]; round128_19_38 (ind, x0, P128, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) { // R128 = 10^(ind-x0), 1 <= ind - x0 <= ind - 1, 1 <= ind - x0 <= 37 if (ind - x0 <= 19) { // 1 <= ind - x0 <= 19 res.w[0] = ten2k64[ind - x0]; // res.w[1] stays 0 } else { // 20 <= ind - x0 <= 37 res.w[0] = ten2k128[ind - x0 - 20].w[0]; res.w[1] = ten2k128[ind - x0 - 20].w[1]; } } } // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // Note: a double rounding error upward is not possible; for this // the result after the first rounding would have to be 99...95 // (35 digits in all), possibly followed by a number of zeros; this // not possible in Cases (2)-(6) which may get here is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res.w[0]++; if (res.w[0] == 0) res.w[1]++; is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this second rounding was exact the result may still be // inexact because of the first rounding if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } // adjust exponent e3 = e3 + x0; if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { if (is_midpoint_lt_even0 || is_midpoint_gt_even0 || is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0) { is_inexact_lt_midpoint = 1; } } } else { ; // not underflow } // check for inexact result if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; if (is_tiny) *pfpsf |= UNDERFLOW_EXCEPTION; } // now check for significand = 10^34 (may have resulted from going // back to case2_repeat) if (res.w[1] == 0x0001ed09bead87c0ull && res.w[0] == 0x378d8e6400000000ull) { // if res = 10^34 res.w[1] = 0x0000314dc6448d93ull; // res = 10^33 res.w[0] = 0x38c15b0a00000000ull; e3 = e3 + 1; } res.w[1] = z_sign | ((UINT64) (e3 + 6176) << 49) | res.w[1]; // check for overflow if (rnd_mode == ROUNDING_TO_NEAREST && e3 > expmax) { res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf res.w[0] = 0x0000000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); } if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e3, &res, pfpsf); } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else { // we get here only if delta <= 1 in Cases (2), (3), (4), (5), or (6) and // the signs of x*y and z are opposite; in these cases massive // cancellation can occur, so it is better to scale either C3 or C4 and // to perform the subtraction before rounding; rounding is performed // next, depending on the number of decimal digits in the result and on // the exponent value // Note: overlow is not possible in this case // this is similar to Cases (15), (16), and (17) if (delta + q4 < q3) { // from Case (6) // Case (6) with 0<= delta <= 1 is similar to Cases (15), (16), and // (17) if we swap (C3, C4), (q3, q4), (e3, e4), (z_sign, p_sign) // and call add_and_round; delta stays positive // C4.w[3] = 0 and C4.w[2] = 0, so swap just the low part of C4 with C3 P128.w[1] = C3.w[1]; P128.w[0] = C3.w[0]; C3.w[1] = C4.w[1]; C3.w[0] = C4.w[0]; C4.w[1] = P128.w[1]; C4.w[0] = P128.w[0]; ind = q3; q3 = q4; q4 = ind; ind = e3; e3 = e4; e4 = ind; tmp_sign = z_sign; z_sign = p_sign; p_sign = tmp_sign; } else { // from Cases (2), (3), (4), (5) // In Cases (2), (3), (4), (5) with 0 <= delta <= 1 C3 has to be // scaled up by q4 + delta - q3; this is the same as in Cases (15), // (16), and (17) if we just change the sign of delta delta = -delta; } add_and_round (q3, q4, e4, delta, p34, z_sign, p_sign, C3, C4, rnd_mode, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, pfpsf, &res); *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } } else { // if delta < 0 delta = -delta; if (p34 < q4 && q4 <= delta) { // Case (7) // truncate C4 to p34 digits into res // x = q4-p34, 1 <= x <= 34 because 35 <= q4 <= 68 x0 = q4 - p34; if (q4 <= 38) { P128.w[1] = C4.w[1]; P128.w[0] = C4.w[0]; round128_19_38 (q4, x0, P128, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else if (q4 <= 57) { // 35 <= q4 <= 57 P192.w[2] = C4.w[2]; P192.w[1] = C4.w[1]; P192.w[0] = C4.w[0]; round192_39_57 (q4, x0, P192, &R192, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res.w[0] = R192.w[0]; res.w[1] = R192.w[1]; } else { // if (q4 <= 68) round256_58_76 (q4, x0, C4, &R256, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res.w[0] = R256.w[0]; res.w[1] = R256.w[1]; } e4 = e4 + x0; if (incr_exp) { e4 = e4 + 1; } if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if C4 rounded to p34 digits is exact then the result is inexact, // in a way that depends on the signs of x * y and z if (p_sign == z_sign) { is_inexact_lt_midpoint = 1; } else { // if (p_sign != z_sign) if (res.w[1] != 0x0000314dc6448d93ull || res.w[0] != 0x38c15b0a00000000ull) { // res != 10^33 is_inexact_gt_midpoint = 1; } else { // res = 10^33 and exact is a special case // if C3 < 1/2 ulp then res = 10^33 and is_inexact_gt_midpoint = 1 // if C3 = 1/2 ulp then res = 10^33 and is_midpoint_lt_even = 1 // if C3 > 1/2 ulp then res = 10^34-1 and is_inexact_lt_midpoint = 1 // Note: ulp is really ulp/10 (after borrow which propagates to msd) if (delta > p34 + 1) { // C3 < 1/2 // res = 10^33, unchanged is_inexact_gt_midpoint = 1; } else { // if (delta == p34 + 1) if (q3 <= 19) { if (C3.w[0] < midpoint64[q3 - 1]) { // C3 < 1/2 ulp // res = 10^33, unchanged is_inexact_gt_midpoint = 1; } else if (C3.w[0] == midpoint64[q3 - 1]) { // C3 = 1/2 ulp // res = 10^33, unchanged is_midpoint_lt_even = 1; } else { // if (C3.w[0] > midpoint64[q3-1]), C3 > 1/2 ulp res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1 res.w[0] = 0x378d8e63ffffffffull; e4 = e4 - 1; is_inexact_lt_midpoint = 1; } } else { // if (20 <= q3 <=34) if (C3.w[1] < midpoint128[q3 - 20].w[1] || (C3.w[1] == midpoint128[q3 - 20].w[1] && C3.w[0] < midpoint128[q3 - 20].w[0])) { // C3 < 1/2 ulp // res = 10^33, unchanged is_inexact_gt_midpoint = 1; } else if (C3.w[1] == midpoint128[q3 - 20].w[1] && C3.w[0] == midpoint128[q3 - 20].w[0]) { // C3 = 1/2 ulp // res = 10^33, unchanged is_midpoint_lt_even = 1; } else { // if (C3 > midpoint128[q3-20]), C3 > 1/2 ulp res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1 res.w[0] = 0x378d8e63ffffffffull; e4 = e4 - 1; is_inexact_lt_midpoint = 1; } } } } } } else if (is_midpoint_lt_even) { if (z_sign != p_sign) { // needs correction: res = res - 1 res.w[0] = res.w[0] - 1; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // if it is (10^33-1)*10^e4 then the corect result is // (10^34-1)*10(e4-1) if (res.w[1] == 0x0000314dc6448d93ull && res.w[0] == 0x38c15b09ffffffffull) { res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1 res.w[0] = 0x378d8e63ffffffffull; e4 = e4 - 1; } is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; } else { // if (z_sign == p_sign) is_midpoint_lt_even = 0; is_inexact_gt_midpoint = 1; } } else if (is_midpoint_gt_even) { if (z_sign == p_sign) { // needs correction: res = res + 1 (cannot cross in the next binade) res.w[0] = res.w[0] + 1; if (res.w[0] == 0x0000000000000000ull) res.w[1]++; is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else { // if (z_sign != p_sign) is_midpoint_gt_even = 0; is_inexact_lt_midpoint = 1; } } else { ; // the rounded result is already correct } // check for overflow if (rnd_mode == ROUNDING_TO_NEAREST && e4 > expmax) { res.w[1] = p_sign | 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); } else { // no overflow or not RN p_exp = ((UINT64) (e4 + 6176) << 49); res.w[1] = p_sign | (p_exp & MASK_EXP) | res.w[1]; } if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e4, &res, pfpsf); } if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if ((q4 <= p34 && p34 <= delta) || // Case (8) (q4 <= delta && delta < p34 && p34 < delta + q3) || // Case (9) (q4 <= delta && delta + q3 <= p34) || // Case (10) (delta < q4 && q4 <= p34 && p34 < delta + q3) || // Case (13) (delta < q4 && q4 <= delta + q3 && delta + q3 <= p34) || // Case (14) (delta + q3 < q4 && q4 <= p34)) { // Case (18) // Case (8) is similar to Case (1), with C3 and C4 swapped // Case (9) is similar to Case (2), with C3 and C4 swapped // Case (10) is similar to Case (3), with C3 and C4 swapped // Case (13) is similar to Case (4), with C3 and C4 swapped // Case (14) is similar to Case (5), with C3 and C4 swapped // Case (18) is similar to Case (6), with C3 and C4 swapped // swap (C3, C4), (q3, q4), (e3, 34), (z_sign, p_sign), (z_exp, p_exp) // and go back to delta_ge_zero // C4.w[3] = 0 and C4.w[2] = 0, so swap just the low part of C4 with C3 P128.w[1] = C3.w[1]; P128.w[0] = C3.w[0]; C3.w[1] = C4.w[1]; C3.w[0] = C4.w[0]; C4.w[1] = P128.w[1]; C4.w[0] = P128.w[0]; ind = q3; q3 = q4; q4 = ind; ind = e3; e3 = e4; e4 = ind; tmp_sign = z_sign; z_sign = p_sign; p_sign = tmp_sign; tmp.ui64 = z_exp; z_exp = p_exp; p_exp = tmp.ui64; goto delta_ge_zero; } else if ((p34 <= delta && delta < q4 && q4 < delta + q3) || // Case (11) (delta < p34 && p34 < q4 && q4 < delta + q3)) { // Case (12) // round C3 to nearest to q3 - x0 digits, where x0 = e4 - e3, // 1 <= x0 <= q3 - 1 <= p34 - 1 x0 = e4 - e3; // or x0 = delta + q3 - q4 if (q3 <= 18) { // 2 <= q3 <= 18 round64_2_18 (q3, x0, C3.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); // C3.w[1] = 0; C3.w[0] = R64; } else if (q3 <= 38) { round128_19_38 (q3, x0, C3, &R128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); C3.w[1] = R128.w[1]; C3.w[0] = R128.w[0]; } // the rounded result has q3 - x0 digits // we want the exponent to be e4, so if incr_exp = 1 then // multiply the rounded result by 10 - it will still fit in 113 bits if (incr_exp) { // 64 x 128 -> 128 P128.w[1] = C3.w[1]; P128.w[0] = C3.w[0]; __mul_64x128_to_128 (C3, ten2k64[1], P128); } e3 = e3 + x0; // this is e4 // now add/subtract the 256-bit C4 and the new (and shorter) 128-bit C3; // the result will have the sign of x * y; the exponent is e4 R256.w[3] = 0; R256.w[2] = 0; R256.w[1] = C3.w[1]; R256.w[0] = C3.w[0]; if (p_sign == z_sign) { // R256 = C4 + R256 add256 (C4, R256, &R256); } else { // if (p_sign != z_sign) { // R256 = C4 - R256 sub256 (C4, R256, &R256); // the result cannot be pure zero // because the result has opposite sign to that of R256 which was // rounded, need to change the rounding indicators lsb = C4.w[0] & 0x01; if (is_inexact_lt_midpoint) { is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; } else if (is_inexact_gt_midpoint) { is_inexact_gt_midpoint = 0; is_inexact_lt_midpoint = 1; } else if (lsb == 0) { if (is_midpoint_lt_even) { is_midpoint_lt_even = 0; is_midpoint_gt_even = 1; } else if (is_midpoint_gt_even) { is_midpoint_gt_even = 0; is_midpoint_lt_even = 1; } else { ; } } else if (lsb == 1) { if (is_midpoint_lt_even) { // res = res + 1 R256.w[0]++; if (R256.w[0] == 0x0) { R256.w[1]++; if (R256.w[1] == 0x0) { R256.w[2]++; if (R256.w[2] == 0x0) { R256.w[3]++; } } } // no check for rounding overflow - R256 was a difference } else if (is_midpoint_gt_even) { // res = res - 1 R256.w[0]--; if (R256.w[0] == 0xffffffffffffffffull) { R256.w[1]--; if (R256.w[1] == 0xffffffffffffffffull) { R256.w[2]--; if (R256.w[2] == 0xffffffffffffffffull) { R256.w[3]--; } } } } else { ; } } else { ; } } // determine the number of decimal digits in R256 ind = nr_digits256 (R256); // ind >= p34 // if R256 is sum, then ind > p34; if R256 is a difference, then // ind >= p34; this means that we can calculate the result rounded to // the destination precision, with unbounded exponent, starting from R256 // and using the indicators from the rounding of C3 to avoid a double // rounding error if (ind < p34) { ; } else if (ind == p34) { // the result rounded to the destination precision with // unbounded exponent // is (-1)^p_sign * R256 * 10^e4 res.w[1] = R256.w[1]; res.w[0] = R256.w[0]; } else { // if (ind > p34) // if more than P digits, round to nearest to P digits // round R256 to p34 digits x0 = ind - p34; // 1 <= x0 <= 34 as 35 <= ind <= 68 // save C3 rounding indicators to help avoid double rounding error is_inexact_lt_midpoint0 = is_inexact_lt_midpoint; is_inexact_gt_midpoint0 = is_inexact_gt_midpoint; is_midpoint_lt_even0 = is_midpoint_lt_even; is_midpoint_gt_even0 = is_midpoint_gt_even; // initialize rounding indicators is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; // round to p34 digits; the result fits in 113 bits if (ind <= 38) { P128.w[1] = R256.w[1]; P128.w[0] = R256.w[0]; round128_19_38 (ind, x0, P128, &R128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else if (ind <= 57) { P192.w[2] = R256.w[2]; P192.w[1] = R256.w[1]; P192.w[0] = R256.w[0]; round192_39_57 (ind, x0, P192, &R192, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R128.w[1] = R192.w[1]; R128.w[0] = R192.w[0]; } else { // if (ind <= 68) round256_58_76 (ind, x0, R256, &R256, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); R128.w[1] = R256.w[1]; R128.w[0] = R256.w[0]; } // the rounded result has p34 = 34 digits e4 = e4 + x0 + incr_exp; res.w[1] = R128.w[1]; res.w[0] = R128.w[0]; // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; // Note: a double rounding error upward is not possible; for this // the result after the first rounding would have to be 99...95 // (35 digits in all), possibly followed by a number of zeros; this // not possible in Cases (2)-(6) or (15)-(17) which may get here // if this is 10^33 - 1 make it 10^34 - 1 and decrement exponent if (res.w[1] == 0x0000314dc6448d93ull && res.w[0] == 0x38c15b09ffffffffull) { // 10^33 - 1 res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1 res.w[0] = 0x378d8e63ffffffffull; e4--; } } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res.w[0]++; if (res.w[0] == 0) res.w[1]++; is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this second rounding was exact the result may still be // inexact because of the first rounding if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } } // determine tininess if (rnd_mode == ROUNDING_TO_NEAREST) { if (e4 < expmin) { is_tiny = 1; // for other rounding modes apply correction } } else { // for RM, RP, RZ, RA apply correction in order to determine tininess // but do not save the result; apply the correction to // (-1)^p_sign * res * 10^0 P128.w[1] = p_sign | 0x3040000000000000ull | res.w[1]; P128.w[0] = res.w[0]; rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, 0, &P128, pfpsf); scale = ((P128.w[1] & MASK_EXP) >> 49) - 6176; // -1, 0, or +1 // the number of digits in the significand is p34 = 34 if (e4 + scale < expmin) { is_tiny = 1; } } // the result rounded to the destination precision with unbounded exponent // is (-1)^p_sign * res * 10^e4 res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | res.w[1]; // RN // res.w[0] unchanged; // Note: res is correct only if expmin <= e4 <= expmax ind = p34; // the number of decimal digits in the signifcand of res // at this point we have the result rounded with unbounded exponent in // res and we know its tininess: // res = (-1)^p_sign * significand * 10^e4, // where q (significand) = ind = p34 // Note: res is correct only if expmin <= e4 <= expmax // check for overflow if RN if (rnd_mode == ROUNDING_TO_NEAREST && (ind + e4) > (p34 + expmax)) { res.w[1] = p_sign | 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } // else not overflow or not RN, so continue // from this point on this is similar to the last part of the computation // for Cases (15), (16), (17) // if (e4 >= expmin) we have the result rounded with bounded exponent if (e4 < expmin) { x0 = expmin - e4; // x0 >= 1; the number of digits to chop off of res // where the result rounded [at most] once is // (-1)^p_sign * significand_res * 10^e4 // avoid double rounding error is_inexact_lt_midpoint0 = is_inexact_lt_midpoint; is_inexact_gt_midpoint0 = is_inexact_gt_midpoint; is_midpoint_lt_even0 = is_midpoint_lt_even; is_midpoint_gt_even0 = is_midpoint_gt_even; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; if (x0 > ind) { // nothing is left of res when moving the decimal point left x0 digits is_inexact_lt_midpoint = 1; res.w[1] = p_sign | 0x0000000000000000ull; res.w[0] = 0x0000000000000000ull; e4 = expmin; } else if (x0 == ind) { // 1 <= x0 = ind <= p34 = 34 // this is <, =, or > 1/2 ulp // compare the ind-digit value in the significand of res with // 1/2 ulp = 5*10^(ind-1), i.e. determine whether it is // less than, equal to, or greater than 1/2 ulp (significand of res) R128.w[1] = res.w[1] & MASK_COEFF; R128.w[0] = res.w[0]; if (ind <= 19) { if (R128.w[0] < midpoint64[ind - 1]) { // < 1/2 ulp lt_half_ulp = 1; is_inexact_lt_midpoint = 1; } else if (R128.w[0] == midpoint64[ind - 1]) { // = 1/2 ulp eq_half_ulp = 1; is_midpoint_gt_even = 1; } else { // > 1/2 ulp gt_half_ulp = 1; is_inexact_gt_midpoint = 1; } } else { // if (ind <= 38) if (R128.w[1] < midpoint128[ind - 20].w[1] || (R128.w[1] == midpoint128[ind - 20].w[1] && R128.w[0] < midpoint128[ind - 20].w[0])) { // < 1/2 ulp lt_half_ulp = 1; is_inexact_lt_midpoint = 1; } else if (R128.w[1] == midpoint128[ind - 20].w[1] && R128.w[0] == midpoint128[ind - 20].w[0]) { // = 1/2 ulp eq_half_ulp = 1; is_midpoint_gt_even = 1; } else { // > 1/2 ulp gt_half_ulp = 1; is_inexact_gt_midpoint = 1; } } if (lt_half_ulp || eq_half_ulp) { // res = +0.0 * 10^expmin res.w[1] = 0x0000000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // if (gt_half_ulp) // res = +1 * 10^expmin res.w[1] = 0x0000000000000000ull; res.w[0] = 0x0000000000000001ull; } res.w[1] = p_sign | res.w[1]; e4 = expmin; } else { // if (1 <= x0 <= ind - 1 <= 33) // round the ind-digit result to ind - x0 digits if (ind <= 18) { // 2 <= ind <= 18 round64_2_18 (ind, x0, res.w[0], &R64, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res.w[1] = 0x0; res.w[0] = R64; } else if (ind <= 38) { P128.w[1] = res.w[1] & MASK_COEFF; P128.w[0] = res.w[0]; round128_19_38 (ind, x0, P128, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } e4 = e4 + x0; // expmin // we want the exponent to be expmin, so if incr_exp = 1 then // multiply the rounded result by 10 - it will still fit in 113 bits if (incr_exp) { // 64 x 128 -> 128 P128.w[1] = res.w[1] & MASK_COEFF; P128.w[0] = res.w[0]; __mul_64x128_to_128 (res, ten2k64[1], P128); } res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | (res. w[1] & MASK_COEFF); // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res.w[0]--; if (res.w[0] == 0xffffffffffffffffull) res.w[1]--; // Note: a double rounding error upward is not possible; for this // the result after the first rounding would have to be 99...95 // (35 digits in all), possibly followed by a number of zeros; this // not possible in this underflow case is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res.w[0]++; if (res.w[0] == 0) res.w[1]++; is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this second rounding was exact the result may still be // inexact because of the first rounding if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } } } // res contains the correct result // apply correction if not rounding to nearest if (rnd_mode != ROUNDING_TO_NEAREST) { rounding_correction (rnd_mode, is_inexact_lt_midpoint, is_inexact_gt_midpoint, is_midpoint_lt_even, is_midpoint_gt_even, e4, &res, pfpsf); } if (is_midpoint_lt_even || is_midpoint_gt_even || is_inexact_lt_midpoint || is_inexact_gt_midpoint) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; if (is_tiny) *pfpsf |= UNDERFLOW_EXCEPTION; } *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else if ((p34 <= delta && delta + q3 <= q4) || // Case (15) (delta < p34 && p34 < delta + q3 && delta + q3 <= q4) || //Case (16) (delta + q3 <= p34 && p34 < q4)) { // Case (17) // calculate first the result rounded to the destination precision, with // unbounded exponent add_and_round (q3, q4, e4, delta, p34, z_sign, p_sign, C3, C4, rnd_mode, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, pfpsf, &res); *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } else { ; } } // end if delta < 0 *ptr_is_midpoint_lt_even = is_midpoint_lt_even; *ptr_is_midpoint_gt_even = is_midpoint_gt_even; *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint; *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint; BID_SWAP128 (res); BID_RETURN (res) } #if DECIMAL_CALL_BY_REFERENCE void bid128_fma (UINT128 * pres, UINT128 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128_fma (UINT128 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even, is_midpoint_gt_even, is_inexact_lt_midpoint, is_inexact_gt_midpoint; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; #if DECIMAL_CALL_BY_REFERENCE bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, &x, &y, &z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x, y, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128ddd_fma (UINT128 * pres, UINT64 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, y = *py, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128ddd_fma (UINT64 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1, y1, z1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, &x1, &y1, &z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x1, y1, z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128ddq_fma (UINT128 * pres, UINT64 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, y = *py; UINT128 z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128ddq_fma (UINT64 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1, y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, &x1, &y1, &z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x1, y1, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dqd_fma (UINT128 * pres, UINT64 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dqd_fma (UINT64 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1, z1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, &x1, py, &z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x1, y, z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dqq_fma (UINT128 * pres, UINT64 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dqq_fma (UINT64 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, &x1, py, pz _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x1, y, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128qdd_fma (UINT128 * pres, UINT128 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128qdd_fma (UINT128 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 y1, z1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, px, &y1, &z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x, y1, z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128qdq_fma (UINT128 * pres, UINT128 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128qdq_fma (UINT128 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, px, &y1, pz _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x, y1, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128qqd_fma (UINT128 * pres, UINT128 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128qqd_fma (UINT128 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 z1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, &res, px, py, &z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint, x, y, z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } // Note: bid128qqq_fma is represented by bid128_fma // Note: bid64ddd_fma is represented by bid64_fma #if DECIMAL_CALL_BY_REFERENCE void bid64ddq_fma (UINT64 * pres, UINT64 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64ddq_fma (UINT64 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res1 = 0xbaddbaddbaddbaddull; UINT128 x1, y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qqq_fma (&res1, &x1, &y1, pz _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res1 = bid64qqq_fma (x1, y1, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res1); } #if DECIMAL_CALL_BY_REFERENCE void bid64dqd_fma (UINT64 * pres, UINT64 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64dqd_fma (UINT64 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res1 = 0xbaddbaddbaddbaddull; UINT128 x1, z1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qqq_fma (&res1, &x1, py, &z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res1 = bid64qqq_fma (x1, y, z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res1); } #if DECIMAL_CALL_BY_REFERENCE void bid64dqq_fma (UINT64 * pres, UINT64 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64dqq_fma (UINT64 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res1 = 0xbaddbaddbaddbaddull; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qqq_fma (&res1, &x1, py, pz _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res1 = bid64qqq_fma (x1, y, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res1); } #if DECIMAL_CALL_BY_REFERENCE void bid64qdd_fma (UINT64 * pres, UINT128 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qdd_fma (UINT128 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res1 = 0xbaddbaddbaddbaddull; UINT128 y1, z1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qqq_fma (&res1, px, &y1, &z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res1 = bid64qqq_fma (x, y1, z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res1); } #if DECIMAL_CALL_BY_REFERENCE void bid64qdq_fma (UINT64 * pres, UINT128 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qdq_fma (UINT128 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res1 = 0xbaddbaddbaddbaddull; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qqq_fma (&res1, px, &y1, pz _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res1 = bid64qqq_fma (x, y1, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res1); } #if DECIMAL_CALL_BY_REFERENCE void bid64qqd_fma (UINT64 * pres, UINT128 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qqd_fma (UINT128 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res1 = 0xbaddbaddbaddbaddull; UINT128 z1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qqq_fma (&res1, px, py, &z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res1 = bid64qqq_fma (x, y, z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res1); } #if DECIMAL_CALL_BY_REFERENCE void bid64qqq_fma (UINT64 * pres, UINT128 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py, z = *pz; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qqq_fma (UINT128 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int is_midpoint_lt_even0 = 0, is_midpoint_gt_even0 = 0, is_inexact_lt_midpoint0 = 0, is_inexact_gt_midpoint0 = 0; int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0, is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; int incr_exp; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 res128 = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT64 res1 = 0xbaddbaddbaddbaddull; unsigned int save_fpsf; // needed because of the call to bid128_ext_fma UINT64 sign; UINT64 exp; int unbexp; UINT128 C; BID_UI64DOUBLE tmp; int nr_bits; int q, x0; int scale; int lt_half_ulp = 0, eq_half_ulp = 0; // Note: for rounding modes other than RN or RA, the result can be obtained // by rounding first to BID128 and then to BID64 save_fpsf = *pfpsf; // sticky bits - caller value must be preserved *pfpsf = 0; #if DECIMAL_CALL_BY_REFERENCE bid128_ext_fma (&is_midpoint_lt_even0, &is_midpoint_gt_even0, &is_inexact_lt_midpoint0, &is_inexact_gt_midpoint0, &res, &x, &y, &z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid128_ext_fma (&is_midpoint_lt_even0, &is_midpoint_gt_even0, &is_inexact_lt_midpoint0, &is_inexact_gt_midpoint0, x, y, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif if ((rnd_mode == ROUNDING_DOWN) || (rnd_mode == ROUNDING_UP) || (rnd_mode == ROUNDING_TO_ZERO) || // no double rounding error is possible ((res.w[HIGH_128W] & MASK_NAN) == MASK_NAN) || //res=QNaN (cannot be SNaN) ((res.w[HIGH_128W] & MASK_ANY_INF) == MASK_INF)) { // result is infinity #if DECIMAL_CALL_BY_REFERENCE bid128_to_bid64 (&res1, &res _RND_MODE_ARG _EXC_FLAGS_ARG); #else res1 = bid128_to_bid64 (res _RND_MODE_ARG _EXC_FLAGS_ARG); #endif // determine the unbiased exponent of the result unbexp = ((res1 >> 53) & 0x3ff) - 398; // if subnormal, res1 must have exp = -398 // if tiny and inexact set underflow and inexact status flags if (!((res1 & MASK_NAN) == MASK_NAN) && // res1 not NaN (unbexp == -398) && ((res1 & MASK_BINARY_SIG1) < 1000000000000000ull) && (is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0 || is_midpoint_lt_even0 || is_midpoint_gt_even0)) { // set the inexact flag and the underflow flag *pfpsf |= (INEXACT_EXCEPTION | UNDERFLOW_EXCEPTION); } else if (is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0 || is_midpoint_lt_even0 || is_midpoint_gt_even0) { // set the inexact flag and the underflow flag *pfpsf |= INEXACT_EXCEPTION; } *pfpsf |= save_fpsf; BID_RETURN (res1); } // else continue, and use rounding to nearest to round to 16 digits // at this point the result is rounded to nearest (even or away) to 34 digits // (or less if exact), and it is zero or finite non-zero canonical [sub]normal sign = res.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative exp = res.w[HIGH_128W] & MASK_EXP; // biased and shifted left 49 bits unbexp = (exp >> 49) - 6176; C.w[1] = res.w[HIGH_128W] & MASK_COEFF; C.w[0] = res.w[LOW_128W]; if ((C.w[1] == 0x0 && C.w[0] == 0x0) || // result is zero (unbexp <= (-398 - 35)) || (unbexp >= (369 + 16))) { // clear under/overflow #if DECIMAL_CALL_BY_REFERENCE bid128_to_bid64 (&res1, &res _RND_MODE_ARG _EXC_FLAGS_ARG); #else res1 = bid128_to_bid64 (res _RND_MODE_ARG _EXC_FLAGS_ARG); #endif *pfpsf |= save_fpsf; BID_RETURN (res1); } // else continue // -398 - 34 <= unbexp <= 369 + 15 if (rnd_mode == ROUNDING_TIES_AWAY) { // apply correction, if needed, to make the result rounded to nearest-even if (is_midpoint_gt_even) { // res = res - 1 res1--; // res1 is now even } // else the result is already correctly rounded to nearest-even } // at this point the result is finite, non-zero canonical normal or subnormal, // and in most cases overflow or underflow will not occur // determine the number of digits q in the result // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C.w[1] == 0) { if (C.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp.d = (double) (C.w[0] >> 32); // exact conversion nr_bits = 33 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp.d = (double) (C.w[0]); // exact conversion nr_bits = 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp.d = (double) C.w[0]; // exact conversion nr_bits = 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C.w[1] != 0 => nr. bits = 64 + nr_bits (C.w[1]) tmp.d = (double) C.w[1]; // exact conversion nr_bits = 65 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[nr_bits - 1].digits; if (q == 0) { q = nr_digits[nr_bits - 1].digits1; if (C.w[1] > nr_digits[nr_bits - 1].threshold_hi || (C.w[1] == nr_digits[nr_bits - 1].threshold_hi && C.w[0] >= nr_digits[nr_bits - 1].threshold_lo)) q++; } // if q > 16, round to nearest even to 16 digits (but for underflow it may // have to be truncated even more) if (q > 16) { x0 = q - 16; if (q <= 18) { round64_2_18 (q, x0, C.w[0], &res1, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else { // 19 <= q <= 34 round128_19_38 (q, x0, C, &res128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res1 = res128.w[0]; // the result fits in 64 bits } unbexp = unbexp + x0; if (incr_exp) unbexp++; q = 16; // need to set in case denormalization is necessary } else { // the result does not require a second rounding (and it must have // been exact in the first rounding, since q <= 16) res1 = C.w[0]; } // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res1--; // res1 becomes odd is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; if (res1 == 0x00038d7ea4c67fffull) { // 10^15 - 1 res1 = 0x002386f26fc0ffffull; // 10^16 - 1 unbexp--; } } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res1++; // res1 becomes odd (so it cannot be 10^16) is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this second rounding was exact the result may still be // inexact because of the first rounding if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } // this is the result rounded correctly to nearest even, with unbounded exp. // check for overflow if (q + unbexp > P16 + expmax16) { res1 = sign | 0x7800000000000000ull; *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION); *pfpsf |= save_fpsf; BID_RETURN (res1) } else if (unbexp > expmax16) { // q + unbexp <= P16 + expmax16 // not overflow; the result must be exact, and we can multiply res1 by // 10^(unbexp - expmax16) and the product will fit in 16 decimal digits scale = unbexp - expmax16; res1 = res1 * ten2k64[scale]; // res1 * 10^scale unbexp = expmax16; // unbexp - scale } else { ; // continue } // check for underflow if (q + unbexp < P16 + expmin16) { if (unbexp < expmin16) { // we must truncate more of res x0 = expmin16 - unbexp; // x0 >= 1 is_inexact_lt_midpoint0 = is_inexact_lt_midpoint; is_inexact_gt_midpoint0 = is_inexact_gt_midpoint; is_midpoint_lt_even0 = is_midpoint_lt_even; is_midpoint_gt_even0 = is_midpoint_gt_even; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; // the number of decimal digits in res1 is q if (x0 < q) { // 1 <= x0 <= q-1 => round res to q - x0 digits // 2 <= q <= 16, 1 <= x0 <= 15 round64_2_18 (q, x0, res1, &res1, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) { // res1 = 10^(q-x0), 1 <= q - x0 <= q - 1, 1 <= q - x0 <= 15 res1 = ten2k64[q - x0]; } unbexp = unbexp + x0; // expmin16 } else if (x0 == q) { // the second rounding is for 0.d(0)d(1)...d(q-1) * 10^emin // determine relationship with 1/2 ulp // q <= 16 if (res1 < midpoint64[q - 1]) { // < 1/2 ulp lt_half_ulp = 1; is_inexact_lt_midpoint = 1; } else if (res1 == midpoint64[q - 1]) { // = 1/2 ulp eq_half_ulp = 1; is_midpoint_gt_even = 1; } else { // > 1/2 ulp // gt_half_ulp = 1; is_inexact_gt_midpoint = 1; } if (lt_half_ulp || eq_half_ulp) { // res = +0.0 * 10^expmin16 res1 = 0x0000000000000000ull; } else { // if (gt_half_ulp) // res = +1 * 10^expmin16 res1 = 0x0000000000000001ull; } unbexp = expmin16; } else { // if (x0 > q) // the second rounding is for 0.0...d(0)d(1)...d(q-1) * 10^emin res1 = 0x0000000000000000ull; unbexp = expmin16; is_inexact_lt_midpoint = 1; } // avoid a double rounding error if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) && is_midpoint_lt_even) { // double rounding error upward // res = res - 1 res1--; // res1 becomes odd is_midpoint_lt_even = 0; is_inexact_lt_midpoint = 1; } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) && is_midpoint_gt_even) { // double rounding error downward // res = res + 1 res1++; // res1 becomes odd is_midpoint_gt_even = 0; is_inexact_gt_midpoint = 1; } else if (!is_midpoint_lt_even && !is_midpoint_gt_even && !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) { // if this rounding was exact the result may still be // inexact because of the previous roundings if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) { is_inexact_gt_midpoint = 1; } if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) { is_inexact_lt_midpoint = 1; } } else if (is_midpoint_gt_even && (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) { // pulled up to a midpoint is_inexact_lt_midpoint = 1; is_inexact_gt_midpoint = 0; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else if (is_midpoint_lt_even && (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) { // pulled down to a midpoint is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 1; is_midpoint_lt_even = 0; is_midpoint_gt_even = 0; } else { ; } } // else if unbexp >= emin then q < P (because q + unbexp < P16 + expmin16) // and the result is tiny and exact // check for inexact result if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even || is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0 || is_midpoint_lt_even0 || is_midpoint_gt_even0) { // set the inexact flag and the underflow flag *pfpsf |= (INEXACT_EXCEPTION | UNDERFLOW_EXCEPTION); } } else if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) { *pfpsf |= INEXACT_EXCEPTION; } // this is the result rounded correctly to nearest, with bounded exponent if (rnd_mode == ROUNDING_TIES_AWAY && is_midpoint_gt_even) { // correction // res = res + 1 res1++; // res1 is now odd } // else the result is already correct // assemble the result if (res1 < 0x0020000000000000ull) { // res < 2^53 res1 = sign | ((UINT64) (unbexp + 398) << 53) | res1; } else { // res1 >= 2^53 res1 = sign | MASK_STEERING_BITS | ((UINT64) (unbexp + 398) << 51) | (res1 & MASK_BINARY_SIG2); } *pfpsf |= save_fpsf; BID_RETURN (res1); } libdfp-1.0.17/libbid/bid128_logb.c000066400000000000000000000035631504475242000164370ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE(int, bid128_logb, x) UINT128 CX; UINT64 sign_x; SINT64 D; int_float f64, fx; int exponent_x, bin_expon_cx, digits; if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN_VAL (0x80000000); } // find number of digits in coefficient // 2^64 f64.i = 0x5f800000; // fx ~ CX fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f; digits = estimate_decimal_digits[bin_expon_cx]; // scale = 38-estimate_decimal_digits[bin_expon_cx]; D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1]; if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) { digits++; } exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS_128 - 1 + digits; BID_RETURN_VAL (exponent_x); } libdfp-1.0.17/libbid/bid128_minmax.c000066400000000000000000001133411504475242000170010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" /***************************************************************************** * BID128 minimum number *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_minnum (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM) { UINT128 x = *px; UINT128 y = *py; #else UINT128 bid128_minnum (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) { #endif UINT128 res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0; BID_SWAP128 (x); BID_SWAP128 (y); // check for non-canonical x if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF); x.w[0] = 0x0ull; } else { // x is not special // check for non-canonical values - treated as zero if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP); x.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && x.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP); x.w[0] = 0x0ull; } else { // canonical ; } } } // check for non-canonical y if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (y.w[0] > 0x38c15b09ffffffffull))) { y.w[1] = y.w[1] & 0xffffc00000000000ull; y.w[0] = 0x0ull; } } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF); y.w[0] = 0x0ull; } else { // y is not special // check for non-canonical values - treated as zero if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP); y.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && y.w[0] > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP); y.w[0] = 0x0ull; } else { // canonical ; } } } // NaN (CASE1) if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = x; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 res = (((x.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => ignore the exponent // field // (Any non-canonical # is considered 0) if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) { x_is_zero = 1; } if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, neither is greater => return either number res = x; BID_RETURN (res); } else if (x_is_zero) { // is x is zero, it is greater if Y is negative res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } else if (y_is_zero) { // is y is zero, X is greater if it is positive res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? y : x; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison of // the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)) ? y : x; BID_RETURN (res); } // if both components are either bigger or smaller, it is clear what // needs to be done if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0] && exp_x > exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? y : x; BID_RETURN (res); } if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0] && exp_x < exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { // difference cannot be greater than 10^33 res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? y : x; BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? y : x; BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? y : x; BID_RETURN (res); } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } // adjust the y significand upwards __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger (converse if negative) res = ((sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } /***************************************************************************** * BID128 minimum magnitude function - returns greater of two numbers *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_minnum_mag (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM) { UINT128 x = *px; UINT128 y = *py; #else UINT128 bid128_minnum_mag (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) { #endif UINT128 res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; BID_SWAP128 (x); BID_SWAP128 (y); // check for non-canonical x if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF); x.w[0] = 0x0ull; } else { // x is not special // check for non-canonical values - treated as zero if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP); x.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && x.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP); x.w[0] = 0x0ull; } else { // canonical ; } } } // check for non-canonical y if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (y.w[0] > 0x38c15b09ffffffffull))) { y.w[1] = y.w[1] & 0xffffc00000000000ull; y.w[0] = 0x0ull; } } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF); y.w[0] = 0x0ull; } else { // y is not special // check for non-canonical values - treated as zero if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP); y.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && y.w[0] > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP); y.w[0] = 0x0ull; } else { // canonical ; } } } // NaN (CASE1) if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = y; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x infinity, it has maximum magnitude. // Check if magnitudes are equal. If x is negative, return it. res = ((x.w[1] & MASK_SIGN) == MASK_SIGN && (y.w[1] & MASK_INF) == MASK_INF) ? x : y; BID_RETURN (res); } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is infinity, then x is less in magnitude res = x; BID_RETURN (res); } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) { res = x; BID_RETURN (res); } if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) { res = y; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // check if exponents are the same and significands are the same if (exp_y == exp_x && sig_x.w[1] == sig_y.w[1] && sig_x.w[0] == sig_y.w[0]) { if (x.w[1] & 0x8000000000000000ull) { // x is negative res = x; BID_RETURN (res); } else { res = y; BID_RETURN (res); } } else if (((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x == exp_y) || ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) && exp_x > exp_y)) { // if both components are either bigger or smaller, it is clear what // needs to be done; also if the magnitudes are equal res = y; BID_RETURN (res); } else if (((sig_y.w[1] > sig_x.w[1] || (sig_y.w[1] == sig_x.w[1] && sig_y.w[0] > sig_x.w[0])) && exp_y == exp_x) || ((sig_y.w[1] > sig_x.w[1] || (sig_y.w[1] == sig_x.w[1] && sig_y.w[0] >= sig_x.w[0])) && exp_y > exp_x)) { res = x; BID_RETURN (res); } else { ; // continue } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = y; // difference cannot be greater than 10^33 BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if positive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; // if equal BID_RETURN (res); } res = (((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ? y : x; BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x); // if positive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { // if = in magnitude, return +, (if possible) res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } res = ((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ? y : x; BID_RETURN (res); } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = x; BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if positive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { // if = in magnitude, return +, (if possible) res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } res = (sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ? y : x; BID_RETURN (res); } // adjust the y significand upwards __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y); // if positive, return whichever significand is larger (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { // if = in magnitude, return +, if possible) res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ? y : x; BID_RETURN (res); } /***************************************************************************** * BID128 maximum function - returns greater of two numbers *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_maxnum (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM) { UINT128 x = *px; UINT128 y = *py; #else UINT128 bid128_maxnum (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) { #endif UINT128 res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0; BID_SWAP128 (x); BID_SWAP128 (y); // check for non-canonical x if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF); x.w[0] = 0x0ull; } else { // x is not special // check for non-canonical values - treated as zero if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP); x.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && x.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP); x.w[0] = 0x0ull; } else { // canonical ; } } } // check for non-canonical y if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (y.w[0] > 0x38c15b09ffffffffull))) { y.w[1] = y.w[1] & 0xffffc00000000000ull; y.w[0] = 0x0ull; } } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF); y.w[0] = 0x0ull; } else { // y is not special // check for non-canonical values - treated as zero if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP); y.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && y.w[0] > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP); y.w[0] = 0x0ull; } else { // canonical ; } } } // NaN (CASE1) if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = x; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) { x_is_zero = 1; } if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, neither is greater => return either number res = x; BID_RETURN (res); } else if (x_is_zero) { // is x is zero, it is greater if Y is negative res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } else if (y_is_zero) { // is y is zero, X is greater if it is positive res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? x : y; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if exponents are the same, then we have a simple comparison of // the significands if (exp_y == exp_x) { res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } // if both components are either bigger or smaller, it is clear what // needs to be done if ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? x : y; BID_RETURN (res); } if ((sig_x.w[1] < sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { // difference cannot be greater than 10^33 res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? x : y; BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger // (converse if negative) res = (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 || (sig_n_prime256.w[1] > sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN)) ? x : y; BID_RETURN (res); } // adjust the y significand upwards __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger (converse if negative) res = ((sig_n_prime192.w[2] != 0 || (sig_n_prime192.w[1] > sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN)) ? x : y; BID_RETURN (res); } /***************************************************************************** * BID128 maximum magnitude function - returns greater of two numbers *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_maxnum_mag (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM) { UINT128 x = *px; UINT128 y = *py; #else UINT128 bid128_maxnum_mag (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) { #endif UINT128 res; int exp_x, exp_y; int diff; UINT128 sig_x, sig_y; UINT192 sig_n_prime192; UINT256 sig_n_prime256; BID_SWAP128 (x); BID_SWAP128 (y); // check for non-canonical x if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF); x.w[0] = 0x0ull; } else { // x is not special // check for non-canonical values - treated as zero if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP); x.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && x.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP); x.w[0] = 0x0ull; } else { // canonical ; } } } // check for non-canonical y if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16] // check for non-canonical NaN payload if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (y.w[0] > 0x38c15b09ffffffffull))) { y.w[1] = y.w[1] & 0xffffc00000000000ull; y.w[0] = 0x0ull; } } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF); y.w[0] = 0x0ull; } else { // y is not special // check for non-canonical values - treated as zero if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11 // non-canonical y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP); y.w[0] = 0x0ull; } else { // G0_G1 != 11 if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && y.w[0] > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP); y.w[0] = 0x0ull; } else { // canonical ; } } } // NaN (CASE1) if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) { res = y; BID_RETURN (res); } // INFINITY (CASE3) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x infinity, it has maximum magnitude res = ((x.w[1] & MASK_SIGN) == MASK_SIGN && (y.w[1] & MASK_INF) == MASK_INF) ? y : x; BID_RETURN (res); } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 res = y; BID_RETURN (res); } // CONVERT X sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CONVERT Y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) { res = y; BID_RETURN (res); } if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) { res = x; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) if (exp_y == exp_x && sig_x.w[1] == sig_y.w[1] && sig_x.w[0] == sig_y.w[0]) { // check if exponents are the same and significands are the same if (x.w[1] & 0x8000000000000000ull) { // x is negative res = y; BID_RETURN (res); } else { res = x; BID_RETURN (res); } } else if (((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x == exp_y) || ((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] >= sig_y.w[0])) && exp_x > exp_y)) { // if both components are either bigger or smaller, it is clear what // needs to be done; also if the magnitudes are equal res = x; BID_RETURN (res); } else if (((sig_y.w[1] > sig_x.w[1] || (sig_y.w[1] == sig_x.w[1] && sig_y.w[0] > sig_x.w[0])) && exp_y == exp_x) || ((sig_y.w[1] > sig_x.w[1] || (sig_y.w[1] == sig_x.w[1] && sig_y.w[0] >= sig_x.w[0])) && exp_y > exp_x)) { res = y; BID_RETURN (res); } else { ; // continue } diff = exp_x - exp_y; // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (diff > 0) { // to simplify the loop below, // if exp_x is 33 greater than exp_y, no need for compensation if (diff > 33) { res = x; // difference cannot be greater than 10^33 BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_y.w[1] && (sig_n_prime256.w[0] == sig_y.w[0])) { res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; // if equal BID_RETURN (res); } res = (((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0) || (sig_n_prime256.w[1] > sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] > sig_y.w[0])) ? x : y; BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x); // if postitive, return whichever significand is larger (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { // if equal, return positive magnitude res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } res = ((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] > sig_y.w[0])) ? x : y; BID_RETURN (res); } diff = exp_y - exp_x; // if exp_x is 33 less than exp_y, no need for compensation if (diff > 33) { res = y; BID_RETURN (res); } if (diff > 19) { //128 by 128 bit multiply -> 256 bits // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0) && sig_n_prime256.w[1] == sig_x.w[1] && (sig_n_prime256.w[0] == sig_x.w[0])) { // if equal, return positive (if possible) res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } res = (sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0 && (sig_n_prime256.w[1] < sig_x.w[1] || (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] < sig_x.w[0]))) ? x : y; BID_RETURN (res); } // adjust the y significand upwards __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y); // if postitive, return whichever significand is larger (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1] && (sig_n_prime192.w[0] == sig_x.w[0])) { // if equal, return positive (if possible) res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } res = (sig_n_prime192.w[2] == 0 && (sig_n_prime192.w[1] < sig_x.w[1] || (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] < sig_x.w[0]))) ? x : y; BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_mul.c000066400000000000000000000315211504475242000163040ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #if DECIMAL_CALL_BY_REFERENCE void bid64dq_mul (UINT64 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64dq_mul (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qq_mul (&res, &x1, py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid64qq_mul (x1, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64qd_mul (UINT64 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qd_mul (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64qq_mul (&res, px, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid64qq_mul (x, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64qq_mul (UINT64 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64qq_mul (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 z = { {0x0000000000000000ull, 0x5ffe000000000000ull} }; UINT64 res = 0xbaddbaddbaddbaddull; UINT64 x_sign, y_sign, p_sign; UINT64 x_exp, y_exp, p_exp; int true_p_exp; UINT128 C1, C2; BID_SWAP128 (z); // skip cases where at least one operand is NaN or infinity if (!(((x.w[HIGH_128W] & MASK_NAN) == MASK_NAN) || ((y.w[HIGH_128W] & MASK_NAN) == MASK_NAN) || ((x.w[HIGH_128W] & MASK_ANY_INF) == MASK_INF) || ((y.w[HIGH_128W] & MASK_ANY_INF) == MASK_INF))) { // x, y are 0 or f but not inf or NaN => unpack the arguments and check // for non-canonical values x_sign = x.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[HIGH_128W] & MASK_COEFF; C1.w[0] = x.w[LOW_128W]; // check for non-canonical values - treated as zero if ((x.w[HIGH_128W] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 => non-canonical x_exp = (x.w[HIGH_128W] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[HIGH_128W] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } y_sign = y.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C2.w[1] = y.w[HIGH_128W] & MASK_COEFF; C2.w[0] = y.w[LOW_128W]; // check for non-canonical values - treated as zero if ((y.w[HIGH_128W] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 => non-canonical y_exp = (y.w[HIGH_128W] << 2) & MASK_EXP; // biased and shifted left 49 bits C2.w[1] = 0; // significand high C2.w[0] = 0; // significand low } else { // G0_G1 != 11 y_exp = y.w[HIGH_128W] & MASK_EXP; // biased and shifted left 49 bits if (C2.w[1] > 0x0001ed09bead87c0ull || (C2.w[1] == 0x0001ed09bead87c0ull && C2.w[0] > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 C2.w[1] = 0; C2.w[0] = 0; } else { // canonical ; } } p_sign = x_sign ^ y_sign; // sign of the product true_p_exp = (x_exp >> 49) - 6176 + (y_exp >> 49) - 6176; // true_p_exp, p_exp are used only for 0 * 0, 0 * f, or f * 0 if (true_p_exp < -398) p_exp = 0; // cannot be less than EXP_MIN else if (true_p_exp > 369) p_exp = (UINT64) (369 + 398) << 53; // cannot be more than EXP_MAX else p_exp = (UINT64) (true_p_exp + 398) << 53; if ((C1.w[1] == 0x0 && C1.w[0] == 0x0) || (C2.w[1] == 0x0 && C2.w[0] == 0x0)) { // x = 0 or y = 0 // the result is 0 res = p_sign | p_exp; // preferred exponent in [EXP_MIN, EXP_MAX] BID_RETURN (res) } // else continue } // swap x and y - ensure that a NaN in x has 'higher precedence' than one in y #if DECIMAL_CALL_BY_REFERENCE bid64qqq_fma (&res, &y, &x, &z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid64qqq_fma (y, x, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dd_mul (UINT128 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dd_mul (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1, y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_mul (&res, &x1, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_mul (x1, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128dq_mul (UINT128 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128dq_mul (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 x1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_mul (&res, &x1, py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_mul (x1, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128qd_mul (UINT128 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128qd_mul (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT128 y1; #if DECIMAL_CALL_BY_REFERENCE bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_mul (&res, px, &y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res = bid128_mul (x, y1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } // bid128_mul stands for bid128qq_mul #if DECIMAL_CALL_BY_REFERENCE void bid128_mul (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px, y = *py; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT128 bid128_mul (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 z = { {0x0000000000000000ull, 0x5ffe000000000000ull} }; UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT64 x_sign, y_sign, p_sign; UINT64 x_exp, y_exp, p_exp; int true_p_exp; UINT128 C1, C2; BID_SWAP128 (x); BID_SWAP128 (y); // skip cases where at least one operand is NaN or infinity if (!(((x.w[1] & MASK_NAN) == MASK_NAN) || ((y.w[1] & MASK_NAN) == MASK_NAN) || ((x.w[1] & MASK_ANY_INF) == MASK_INF) || ((y.w[1] & MASK_ANY_INF) == MASK_INF))) { // x, y are 0 or f but not inf or NaN => unpack the arguments and check // for non-canonical values x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for non-canonical values - treated as zero if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 => non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } y_sign = y.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C2.w[1] = y.w[1] & MASK_COEFF; C2.w[0] = y.w[0]; // check for non-canonical values - treated as zero if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 => non-canonical y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C2.w[1] = 0; // significand high C2.w[0] = 0; // significand low } else { // G0_G1 != 11 y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C2.w[1] > 0x0001ed09bead87c0ull || (C2.w[1] == 0x0001ed09bead87c0ull && C2.w[0] > 0x378d8e63ffffffffull)) { // y is non-canonical if coefficient is larger than 10^34 -1 C2.w[1] = 0; C2.w[0] = 0; } else { // canonical ; } } p_sign = x_sign ^ y_sign; // sign of the product true_p_exp = (x_exp >> 49) - 6176 + (y_exp >> 49) - 6176; // true_p_exp, p_exp are used only for 0 * 0, 0 * f, or f * 0 if (true_p_exp < -6176) p_exp = 0; // cannot be less than EXP_MIN else if (true_p_exp > 6111) p_exp = (UINT64) (6111 + 6176) << 49; // cannot be more than EXP_MAX else p_exp = (UINT64) (true_p_exp + 6176) << 49; if ((C1.w[1] == 0x0 && C1.w[0] == 0x0) || (C2.w[1] == 0x0 && C2.w[0] == 0x0)) { // x = 0 or y = 0 // the result is 0 res.w[1] = p_sign | p_exp; // preferred exponent in [EXP_MIN, EXP_MAX] res.w[0] = 0x0; BID_SWAP128 (res); BID_RETURN (res) } // else continue } BID_SWAP128 (x); BID_SWAP128 (y); BID_SWAP128 (z); // swap x and y - ensure that a NaN in x has 'higher precedence' than one in y #if DECIMAL_CALL_BY_REFERENCE bid128_fma (&res, &y, &x, &z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid128_fma (y, x, z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_next.c000066400000000000000000000527371504475242000165010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" /***************************************************************************** * BID128 nextup ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_nextup (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else UINT128 bid128_nextup (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; UINT64 x_sign; UINT64 x_exp; int exp; BID_UI64DOUBLE tmp1; int x_nr_bits; int q1, ind; UINT128 C1; // C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (UINT64) BID_SWAP128 (x); // unpack the argument x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } } else { // x is not NaN, so it must be infinity if (!x_sign) { // x is +inf res.w[1] = 0x7800000000000000ull; // +inf res.w[0] = 0x0000000000000000ull; } else { // x is -inf res.w[1] = 0xdfffed09bead87c0ull; // -MAXFP = -999...99 * 10^emax res.w[0] = 0x378d8e63ffffffffull; } } BID_RETURN (res); } // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is +/-0 res.w[1] = 0x0000000000000000ull; // +1 * 10^emin res.w[0] = 0x0000000000000001ull; } else { // x is not special and is not zero if (x.w[1] == 0x5fffed09bead87c0ull && x.w[0] == 0x378d8e63ffffffffull) { // x = +MAXFP = 999...99 * 10^emax res.w[1] = 0x7800000000000000ull; // +inf res.w[0] = 0x0000000000000000ull; } else if (x.w[1] == 0x8000000000000000ull && x.w[0] == 0x0000000000000001ull) { // x = -MINFP = 1...99 * 10^emin res.w[1] = 0x8000000000000000ull; // -0 res.w[0] = 0x0000000000000000ull; } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp // can add/subtract 1 ulp to the significand // Note: we could check here if x >= 10^34 to speed up the case q1 = 34 // q1 = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rnd errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q1 = nr_digits[x_nr_bits - 1].digits; if (q1 == 0) { q1 = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q1++; } // if q1 < P34 then pad the significand with zeros if (q1 < P34) { exp = (x_exp >> 49) - 6176; if (exp + 6176 > P34 - q1) { ind = P34 - q1; // 1 <= ind <= P34 - 1 // pad with P34 - q1 zeros, until exponent = emin // C1 = C1 * 10^ind if (q1 <= 19) { // 64-bit C1 if (ind <= 19) { // 64-bit 10^ind and 64-bit C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]); } else { // 128-bit 10^ind and 64-bit C1 __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]); } } else { // C1 is (most likely) 128-bit if (ind <= 14) { // 64-bit 10^ind and 128-bit C1 (most likely) __mul_128x64_to_128 (C1, ten2k64[ind], C1); } else if (ind <= 19) { // 64-bit 10^ind and 64-bit C1 (q1 <= 19) __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]); } else { // 128-bit 10^ind and 64-bit C1 (C1 must be 64-bit) __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]); } } x_exp = x_exp - ((UINT64) ind << 49); } else { // pad with zeros until the exponent reaches emin ind = exp + 6176; // C1 = C1 * 10^ind if (ind <= 19) { // 1 <= P34 - q1 <= 19 <=> 15 <= q1 <= 33 if (q1 <= 19) { // 64-bit C1, 64-bit 10^ind __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]); } else { // 20 <= q1 <= 33 => 128-bit C1, 64-bit 10^ind __mul_128x64_to_128 (C1, ten2k64[ind], C1); } } else { // if 20 <= P34 - q1 <= 33 <=> 1 <= q1 <= 14 => // 64-bit C1, 128-bit 10^ind __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]); } x_exp = EXP_MIN; } } if (!x_sign) { // x > 0 // add 1 ulp (add 1 to the significand) C1.w[0]++; if (C1.w[0] == 0) C1.w[1]++; if (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] == 0x378d8e6400000000ull) { // if C1 = 10^34 C1.w[1] = 0x0000314dc6448d93ull; // C1 = 10^33 C1.w[0] = 0x38c15b0a00000000ull; x_exp = x_exp + EXP_P1; } } else { // x < 0 // subtract 1 ulp (subtract 1 from the significand) C1.w[0]--; if (C1.w[0] == 0xffffffffffffffffull) C1.w[1]--; if (x_exp != 0 && C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] == 0x38c15b09ffffffffull) { // if C1 = 10^33 - 1 C1.w[1] = 0x0001ed09bead87c0ull; // C1 = 10^34 - 1 C1.w[0] = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } } // assemble the result res.w[1] = x_sign | x_exp | C1.w[1]; res.w[0] = C1.w[0]; } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp } // end x is not special and is not zero BID_RETURN (res); } /***************************************************************************** * BID128 nextdown ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_nextdown (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else UINT128 bid128_nextdown (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; UINT64 x_sign; UINT64 x_exp; int exp; BID_UI64DOUBLE tmp1; int x_nr_bits; int q1, ind; UINT128 C1; // C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (UINT64) BID_SWAP128 (x); // unpack the argument x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } } else { // x is not NaN, so it must be infinity if (!x_sign) { // x is +inf res.w[1] = 0x5fffed09bead87c0ull; // +MAXFP = +999...99 * 10^emax res.w[0] = 0x378d8e63ffffffffull; } else { // x is -inf res.w[1] = 0xf800000000000000ull; // -inf res.w[0] = 0x0000000000000000ull; } } BID_RETURN (res); } // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is +/-0 res.w[1] = 0x8000000000000000ull; // -1 * 10^emin res.w[0] = 0x0000000000000001ull; } else { // x is not special and is not zero if (x.w[1] == 0xdfffed09bead87c0ull && x.w[0] == 0x378d8e63ffffffffull) { // x = -MAXFP = -999...99 * 10^emax res.w[1] = 0xf800000000000000ull; // -inf res.w[0] = 0x0000000000000000ull; } else if (x.w[1] == 0x0ull && x.w[0] == 0x0000000000000001ull) { // +MINFP res.w[1] = 0x0000000000000000ull; // +0 res.w[0] = 0x0000000000000000ull; } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp // can add/subtract 1 ulp to the significand // Note: we could check here if x >= 10^34 to speed up the case q1 = 34 // q1 = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rnd errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q1 = nr_digits[x_nr_bits - 1].digits; if (q1 == 0) { q1 = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q1++; } // if q1 < P then pad the significand with zeros if (q1 < P34) { exp = (x_exp >> 49) - 6176; if (exp + 6176 > P34 - q1) { ind = P34 - q1; // 1 <= ind <= P34 - 1 // pad with P34 - q1 zeros, until exponent = emin // C1 = C1 * 10^ind if (q1 <= 19) { // 64-bit C1 if (ind <= 19) { // 64-bit 10^ind and 64-bit C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]); } else { // 128-bit 10^ind and 64-bit C1 __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]); } } else { // C1 is (most likely) 128-bit if (ind <= 14) { // 64-bit 10^ind and 128-bit C1 (most likely) __mul_128x64_to_128 (C1, ten2k64[ind], C1); } else if (ind <= 19) { // 64-bit 10^ind and 64-bit C1 (q1 <= 19) __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]); } else { // 128-bit 10^ind and 64-bit C1 (C1 must be 64-bit) __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]); } } x_exp = x_exp - ((UINT64) ind << 49); } else { // pad with zeros until the exponent reaches emin ind = exp + 6176; // C1 = C1 * 10^ind if (ind <= 19) { // 1 <= P34 - q1 <= 19 <=> 15 <= q1 <= 33 if (q1 <= 19) { // 64-bit C1, 64-bit 10^ind __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]); } else { // 20 <= q1 <= 33 => 128-bit C1, 64-bit 10^ind __mul_128x64_to_128 (C1, ten2k64[ind], C1); } } else { // if 20 <= P34 - q1 <= 33 <=> 1 <= q1 <= 14 => // 64-bit C1, 128-bit 10^ind __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]); } x_exp = EXP_MIN; } } if (x_sign) { // x < 0 // add 1 ulp (add 1 to the significand) C1.w[0]++; if (C1.w[0] == 0) C1.w[1]++; if (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] == 0x378d8e6400000000ull) { // if C1 = 10^34 C1.w[1] = 0x0000314dc6448d93ull; // C1 = 10^33 C1.w[0] = 0x38c15b0a00000000ull; x_exp = x_exp + EXP_P1; } } else { // x > 0 // subtract 1 ulp (subtract 1 from the significand) C1.w[0]--; if (C1.w[0] == 0xffffffffffffffffull) C1.w[1]--; if (x_exp != 0 && C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] == 0x38c15b09ffffffffull) { // if C1 = 10^33 - 1 C1.w[1] = 0x0001ed09bead87c0ull; // C1 = 10^34 - 1 C1.w[0] = 0x378d8e63ffffffffull; x_exp = x_exp - EXP_P1; } } // assemble the result res.w[1] = x_sign | x_exp | C1.w[1]; res.w[0] = C1.w[0]; } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp } // end x is not special and is not zero BID_RETURN (res); } /***************************************************************************** * BID128 nextafter ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_nextafter (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; UINT128 y = *py; UINT128 xnswp = *px; UINT128 ynswp = *py; #else UINT128 bid128_nextafter (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 xnswp = x; UINT128 ynswp = y; #endif UINT128 res; UINT128 tmp1, tmp2, tmp3; FPSC tmp_fpsf = 0; // dummy fpsf for calls to comparison functions int res1, res2; UINT64 x_exp; BID_SWAP128 (x); BID_SWAP128 (y); // check for NaNs if (((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) || ((y.w[1] & MASK_SPECIAL) == MASK_SPECIAL)) { // x is special or y is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } BID_RETURN (res) } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (y.w[0] > 0x38c15b09ffffffffull))) { y.w[1] = y.w[1] & 0xffffc00000000000ull; y.w[0] = 0x0ull; } if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = y.w[0]; } else { // x is QNaN // return x res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = y.w[0]; } BID_RETURN (res) } else { // at least one is infinity if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF); x.w[0] = 0x0ull; } if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF); y.w[0] = 0x0ull; } } } // neither x nor y is NaN // if not infinity, check for non-canonical values x (treated as zero) if ((x.w[1] & MASK_ANY_INF) != MASK_INF) { // x != inf if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits x.w[1] = (x.w[1] & MASK_SIGN) | x_exp; x.w[0] = 0x0ull; } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull || ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull && x.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 x.w[1] = (x.w[1] & MASK_SIGN) | x_exp; x.w[0] = 0x0ull; } else { // canonical ; } } } // no need to check for non-canonical y // neither x nor y is NaN tmp_fpsf = *pfpsf; // save fpsf #if DECIMAL_CALL_BY_REFERENCE bid128_quiet_equal (&res1, &xnswp, &ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_quiet_greater (&res2, &xnswp, &ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res1 = bid128_quiet_equal (xnswp, ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res2 = bid128_quiet_greater (xnswp, ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif *pfpsf = tmp_fpsf; // restore fpsf if (res1) { // x = y // return x with the sign of y res.w[1] = (x.w[1] & 0x7fffffffffffffffull) | (y. w[1] & 0x8000000000000000ull); res.w[0] = x.w[0]; } else if (res2) { // x > y #if DECIMAL_CALL_BY_REFERENCE bid128_nextdown (&res, &xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid128_nextdown (xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_SWAP128 (res); } else { // x < y #if DECIMAL_CALL_BY_REFERENCE bid128_nextup (&res, &xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid128_nextup (xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_SWAP128 (res); } // if the operand x is finite but the result is infinite, signal // overflow and inexact if (((x.w[1] & MASK_SPECIAL) != MASK_SPECIAL) && ((res.w[1] & MASK_SPECIAL) == MASK_SPECIAL)) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; } // if the result is in (-10^emin, 10^emin), and is different from the // operand x, signal underflow and inexact tmp1.w[HIGH_128W] = 0x0000314dc6448d93ull; tmp1.w[LOW_128W] = 0x38c15b0a00000000ull; // +100...0[34] * 10^emin tmp2.w[HIGH_128W] = res.w[1] & 0x7fffffffffffffffull; tmp2.w[LOW_128W] = res.w[0]; tmp3.w[HIGH_128W] = res.w[1]; tmp3.w[LOW_128W] = res.w[0]; tmp_fpsf = *pfpsf; // save fpsf #if DECIMAL_CALL_BY_REFERENCE bid128_quiet_greater (&res1, &tmp1, &tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid128_quiet_not_equal (&res2, &xnswp, &tmp3 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res1 = bid128_quiet_greater (tmp1, tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res2 = bid128_quiet_not_equal (xnswp, tmp3 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif *pfpsf = tmp_fpsf; // restore fpsf if (res1 && res2) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the underflow flag *pfpsf |= UNDERFLOW_EXCEPTION; } BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_noncomp.c000066400000000000000000001144321504475242000171630ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * * BID128 non-computational functions: * - bid128_isSigned * - bid128_isNormal * - bid128_isSubnormal * - bid128_isFinite * - bid128_isZero * - bid128_isInf * - bid128_isSignaling * - bid128_isCanonical * - bid128_isNaN * - bid128_copy * - bid128_negate * - bid128_abs * - bid128_copySign * - bid128_class * - bid128_totalOrder * - bid128_totalOrderMag * - bid128_sameQuantum * - bid128_radix ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid128_isSigned (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isSigned (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x.w[HIGH_128W] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // return 1 iff x is not zero, nor NaN nor subnormal nor infinity #if DECIMAL_CALL_BY_REFERENCE void bid128_isNormal (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isNormal (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_exp, C1_hi, C1_lo; BID_UI64DOUBLE tmp1; int exp, q, x_nr_bits; BID_SWAP128 (x); // test for special values - infinity or NaN if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special res = 0; BID_RETURN (res); } // unpack x x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1_hi = x.w[1] & MASK_COEFF; C1_lo = x.w[0]; // test for zero if (C1_hi == 0 && C1_lo == 0) { res = 0; BID_RETURN (res); } // test for non-canonical values of the argument x if ((((C1_hi > 0x0001ed09bead87c0ull) || ((C1_hi == 0x0001ed09bead87c0ull) && (C1_lo > 0x378d8e63ffffffffull))) && ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0; BID_RETURN (res); } // x is subnormal or normal // determine the number of digits q in the significand // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1_hi == 0) { if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1_lo >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1_lo); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1_lo; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi) tmp1.d = (double) C1_hi; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1_hi > nr_digits[x_nr_bits - 1].threshold_hi || (C1_hi == nr_digits[x_nr_bits - 1].threshold_hi && C1_lo >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (int) (x_exp >> 49) - 6176; // test for subnormal values of x if (exp + q <= -6143) { res = 0; BID_RETURN (res); } else { res = 1; BID_RETURN (res); } } // return 1 iff x is not zero, nor NaN nor normal nor infinity #if DECIMAL_CALL_BY_REFERENCE void bid128_isSubnormal (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isSubnormal (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_exp, C1_hi, C1_lo; BID_UI64DOUBLE tmp1; int exp, q, x_nr_bits; BID_SWAP128 (x); // test for special values - infinity or NaN if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special res = 0; BID_RETURN (res); } // unpack x x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1_hi = x.w[1] & MASK_COEFF; C1_lo = x.w[0]; // test for zero if (C1_hi == 0 && C1_lo == 0) { res = 0; BID_RETURN (res); } // test for non-canonical values of the argument x if ((((C1_hi > 0x0001ed09bead87c0ull) || ((C1_hi == 0x0001ed09bead87c0ull) && (C1_lo > 0x378d8e63ffffffffull))) && ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0; BID_RETURN (res); } // x is subnormal or normal // determine the number of digits q in the significand // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1_hi == 0) { if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1_lo >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1_lo); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1_lo; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi) tmp1.d = (double) C1_hi; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1_hi > nr_digits[x_nr_bits - 1].threshold_hi || (C1_hi == nr_digits[x_nr_bits - 1].threshold_hi && C1_lo >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (int) (x_exp >> 49) - 6176; // test for subnormal values of x if (exp + q <= -6143) { res = 1; } else { res = 0; } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_isFinite (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isFinite (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x.w[HIGH_128W] & MASK_INF) != MASK_INF); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_isZero (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isZero (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT128 sig_x; BID_SWAP128 (x); if ((x.w[1] & MASK_INF) == MASK_INF) { res = 0; BID_RETURN (res); } sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || // significand is non-canonical ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || // significand is non-canonical ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull && (x.w[1] & MASK_INF) != MASK_INF) || // significand is non-canonical (sig_x.w[1] == 0 && sig_x.w[0] == 0)) { // significand is 0 res = 1; BID_RETURN (res); } res = 0; BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_isInf (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isInf (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x.w[HIGH_128W] & MASK_INF) == MASK_INF) && ((x.w[HIGH_128W] & MASK_NAN) != MASK_NAN); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_isSignaling (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isSignaling (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x.w[HIGH_128W] & MASK_SNAN) == MASK_SNAN); BID_RETURN (res); } // return 1 iff x is a canonical number ,infinity, or NaN. #if DECIMAL_CALL_BY_REFERENCE void bid128_isCanonical (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isCanonical (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT128 sig_x; BID_SWAP128 (x); if ((x.w[1] & MASK_NAN) == MASK_NAN) { // NaN if (x.w[1] & 0x01ffc00000000000ull) { res = 0; BID_RETURN (res); } sig_x.w[1] = x.w[1] & 0x00003fffffffffffull; // 46 bits sig_x.w[0] = x.w[0]; // 64 bits // payload must be < 10^33 = 0x0000314dc6448d93_38c15b0a00000000 if (sig_x.w[1] < 0x0000314dc6448d93ull || (sig_x.w[1] == 0x0000314dc6448d93ull && sig_x.w[0] < 0x38c15b0a00000000ull)) { res = 1; } else { res = 0; } BID_RETURN (res); } else if ((x.w[1] & MASK_INF) == MASK_INF) { // infinity if ((x.w[1] & 0x03ffffffffffffffull) || x.w[0]) { res = 0; } else { res = 1; } BID_RETURN (res); } // not NaN or infinity; extract significand to ensure it is canonical sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; // a canonical number has a coefficient < 10^34 // (0x0001ed09_bead87c0_378d8e64_00000000) if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || // significand is non-canonical ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || // significand is non-canonical ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0; } else { res = 1; } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_isNaN (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_isNaN (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x.w[HIGH_128W] & MASK_NAN) == MASK_NAN); BID_RETURN (res); } // copies a floating-point operand x to destination y, with no change #if DECIMAL_CALL_BY_REFERENCE void bid128_copy (UINT128 * pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else UINT128 bid128_copy (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; res = x; BID_RETURN (res); } // copies a floating-point operand x to destination y, reversing the sign #if DECIMAL_CALL_BY_REFERENCE void bid128_negate (UINT128 * pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else UINT128 bid128_negate (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; x.w[HIGH_128W] ^= MASK_SIGN; res = x; BID_RETURN (res); } // copies a floating-point operand x to destination y, changing the sign to positive #if DECIMAL_CALL_BY_REFERENCE void bid128_abs (UINT128 * pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else UINT128 bid128_abs (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; x.w[HIGH_128W] &= ~MASK_SIGN; res = x; BID_RETURN (res); } // copies operand x to destination in the same format as x, but with the sign of y #if DECIMAL_CALL_BY_REFERENCE void bid128_copySign (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; UINT128 y = *py; #else UINT128 bid128_copySign (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; x.w[HIGH_128W] = (x.w[HIGH_128W] & ~MASK_SIGN) | (y.w[HIGH_128W] & MASK_SIGN); res = x; BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_class (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_class (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT256 sig_x_prime256; UINT192 sig_x_prime192; UINT128 sig_x; int exp_x; BID_SWAP128 (x); if ((x.w[1] & MASK_NAN) == MASK_NAN) { if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { res = signalingNaN; } else { res = quietNaN; } BID_RETURN (res); } if ((x.w[1] & MASK_INF) == MASK_INF) { if ((x.w[1] & MASK_SIGN) == MASK_SIGN) { res = negativeInfinity; } else { res = positiveInfinity; } BID_RETURN (res); } // decode number into exponent and significand sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; // check for zero or non-canonical if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { if ((x.w[1] & MASK_SIGN) == MASK_SIGN) { res = negativeZero; } else { res = positiveZero; } BID_RETURN (res); } exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // if exponent is less than -6176, the number may be subnormal // (less than the smallest normal value) // the smallest normal value is 1 x 10^-6143 = 10^33 x 10^-6176 // if (exp_x - 6176 < -6143) if (exp_x < 33) { // sig_x * 10^exp_x if (exp_x > 19) { __mul_128x128_to_256 (sig_x_prime256, sig_x, ten2k128[exp_x - 20]); // 10^33 = 0x0000314dc6448d93_38c15b0a00000000 if ((sig_x_prime256.w[3] == 0) && (sig_x_prime256.w[2] == 0) && ((sig_x_prime256.w[1] < 0x0000314dc6448d93ull) || ((sig_x_prime256.w[1] == 0x0000314dc6448d93ull) && (sig_x_prime256.w[0] < 0x38c15b0a00000000ull)))) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? negativeSubnormal : positiveSubnormal; BID_RETURN (res); } } else { __mul_64x128_to_192 (sig_x_prime192, ten2k64[exp_x], sig_x); // 10^33 = 0x0000314dc6448d93_38c15b0a00000000 if ((sig_x_prime192.w[2] == 0) && ((sig_x_prime192.w[1] < 0x0000314dc6448d93ull) || ((sig_x_prime192.w[1] == 0x0000314dc6448d93ull) && (sig_x_prime192.w[0] < 0x38c15b0a00000000ull)))) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? negativeSubnormal : positiveSubnormal; BID_RETURN (res); } } } // otherwise, normal number, determine the sign res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? negativeNormal : positiveNormal; BID_RETURN (res); } // true if the exponents of x and y are the same, false otherwise. // The special cases of sameQuantum(NaN, NaN) and sameQuantum(Inf, Inf) are true // If exactly one operand is infinite or exactly one operand is NaN, then false #if DECIMAL_CALL_BY_REFERENCE void bid128_sameQuantum (int *pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; UINT128 y = *py; #else int bid128_sameQuantum (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_exp, y_exp; BID_SWAP128 (x); BID_SWAP128 (y); // if both operands are NaN, return true if ((x.w[1] & MASK_NAN) == MASK_NAN || ((y.w[1] & MASK_NAN) == MASK_NAN)) { res = ((x.w[1] & MASK_NAN) == MASK_NAN && (y.w[1] & MASK_NAN) == MASK_NAN); BID_RETURN (res); } // if both operands are INF, return true if ((x.w[1] & MASK_INF) == MASK_INF || (y.w[1] & MASK_INF) == MASK_INF) { res = ((x.w[1] & MASK_INF) == MASK_INF) && ((y.w[1] & MASK_INF) == MASK_INF); BID_RETURN (res); } // decode exponents for both numbers, and return true if they match if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits } if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits } else { // G0_G1 != 11 y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits } res = (x_exp == y_exp); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_totalOrder (int *pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; UINT128 y = *py; #else int bid128_totalOrder (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT128 sig_x, sig_y, pyld_y, pyld_x; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0; BID_SWAP128 (x); BID_SWAP128 (y); // NaN (CASE 1) // if x and y are unordered numerically because either operand is NaN // (1) totalOrder(-NaN, number) is true // (2) totalOrder(number, +NaN) is true // (3) if x and y are both NaN: // i) negative sign bit < positive sign bit // ii) signaling < quiet for +NaN, reverse for -NaN // iii) lesser payload < greater payload for +NaN (reverse for -NaN) // iv) else if bitwise identical (in canonical form), return 1 if ((x.w[1] & MASK_NAN) == MASK_NAN) { // if x is -NaN if ((x.w[1] & MASK_SIGN) == MASK_SIGN) { // return true, unless y is -NaN also if ((y.w[1] & MASK_NAN) != MASK_NAN || (y.w[1] & MASK_SIGN) != MASK_SIGN) { res = 1; // y is a number, return 1 BID_RETURN (res); } else { // if y and x are both -NaN pyld_x.w[1] = x.w[1] & 0x00003fffffffffffull; pyld_x.w[0] = x.w[0]; pyld_y.w[1] = y.w[1] & 0x00003fffffffffffull; pyld_y.w[0] = y.w[0]; if ((pyld_x.w[1] > 0x0000314dc6448d93ull) || ((pyld_x.w[1] == 0x0000314dc6448d93ull) && (pyld_x.w[0] > 0x38c15b09ffffffffull))) { pyld_x.w[1] = 0; pyld_x.w[0] = 0; } if ((pyld_y.w[1] > 0x0000314dc6448d93ull) || ((pyld_y.w[1] == 0x0000314dc6448d93ull) && (pyld_y.w[0] > 0x38c15b09ffffffffull))) { pyld_y.w[1] = 0; pyld_y.w[0] = 0; } // if x and y are both -SNaN or both -QNaN, we have to compare payloads // this statement evaluates to true if both are SNaN or QNaN if (! (((y.w[1] & MASK_SNAN) == MASK_SNAN) ^ ((x.w[1] & MASK_SNAN) == MASK_SNAN))) { // it comes down to the payload. we want to return true if x has a // larger payload, or if the payloads are equal (canonical forms // are bitwise identical) if ((pyld_x.w[1] > pyld_y.w[1]) || ((pyld_x.w[1] == pyld_y.w[1]) && (pyld_x.w[0] >= pyld_y.w[0]))) res = 1; else res = 0; BID_RETURN (res); } else { // either x = -SNaN and y = -QNaN or x = -QNaN and y = -SNaN res = ((y.w[1] & MASK_SNAN) == MASK_SNAN); // totalOrder (-QNaN, -SNaN) == 1 BID_RETURN (res); } } } else { // x is +NaN // return false, unless y is +NaN also if ((y.w[1] & MASK_NAN) != MASK_NAN || (y.w[1] & MASK_SIGN) == MASK_SIGN) { res = 0; // y is a number, return 1 BID_RETURN (res); } else { // x and y are both +NaN; pyld_x.w[1] = x.w[1] & 0x00003fffffffffffull; pyld_x.w[0] = x.w[0]; pyld_y.w[1] = y.w[1] & 0x00003fffffffffffull; pyld_y.w[0] = y.w[0]; if ((pyld_x.w[1] > 0x0000314dc6448d93ull) || ((pyld_x.w[1] == 0x0000314dc6448d93ull) && (pyld_x.w[0] > 0x38c15b09ffffffffull))) { pyld_x.w[1] = 0; pyld_x.w[0] = 0; } if ((pyld_y.w[1] > 0x0000314dc6448d93ull) || ((pyld_y.w[1] == 0x0000314dc6448d93ull) && (pyld_y.w[0] > 0x38c15b09ffffffffull))) { pyld_y.w[1] = 0; pyld_y.w[0] = 0; } // if x and y are both +SNaN or both +QNaN, we have to compare payloads // this statement evaluates to true if both are SNaN or QNaN if (! (((y.w[1] & MASK_SNAN) == MASK_SNAN) ^ ((x.w[1] & MASK_SNAN) == MASK_SNAN))) { // it comes down to the payload. we want to return true if x has a // smaller payload, or if the payloads are equal (canonical forms // are bitwise identical) if ((pyld_x.w[1] < pyld_y.w[1]) || ((pyld_x.w[1] == pyld_y.w[1]) && (pyld_x.w[0] <= pyld_y.w[0]))) res = 1; else res = 0; BID_RETURN (res); } else { // either x = SNaN and y = QNaN or x = QNaN and y = SNaN res = ((x.w[1] & MASK_SNAN) == MASK_SNAN); // totalOrder (-QNaN, -SNaN) == 1 BID_RETURN (res); } } } } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // x is certainly not NAN in this case. // return true if y is positive res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // SIMPLE (CASE 2) // if all the bits are the same, the numbers are equal. if ((x.w[1] == y.w[1]) && (x.w[0] == y.w[0])) { res = 1; BID_RETURN (res); } // OPPOSITE SIGNS (CASE 3) // if signs are opposite, return 1 if x is negative // (if x < y, totalOrder is true) if (((x.w[1] & MASK_SIGN) == MASK_SIGN) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // INFINITY (CASE 4) if ((x.w[1] & MASK_INF) == MASK_INF) { // if x == neg_inf, return (y == neg_inf); if ((x.w[1] & MASK_SIGN) == MASK_SIGN) { res = 1; BID_RETURN (res); } else { // x is positive infinity, only return1 if y is positive infinity as well res = ((y.w[1] & MASK_INF) == MASK_INF); BID_RETURN (res); // && (y & MASK_SIGN) != MASK_SIGN); (we know y has same sign as x) } } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // CONVERT x sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull; sig_x.w[0] = x.w[0]; exp_x = (x.w[1] >> 49) & 0x000000000003fffull; // CHECK IF x IS CANONICAL // 9999999999999999999999999999999999 (decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull))) && ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; // check for the case where the exponent is shifted right by 2 bits! if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { exp_x = (x.w[1] >> 47) & 0x000000000003fffull; } } // CONVERT y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull))) && ((y.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; // check for the case where the exponent is shifted right by 2 bits! if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { exp_y = (y.w[1] >> 47) & 0x000000000003fffull; } } // ZERO (CASE 5) // if x and y represent the same entities, and both are negative // return true iff exp_x <= exp_y if (x_is_zero && y_is_zero) { // we know that signs must be the same because we would have caught it // in case3 if signs were different // totalOrder(x,y) iff exp_x >= exp_y for negative numbers // totalOrder(x,y) iff exp_x <= exp_y for positive numbers if (exp_x == exp_y) { res = 1; BID_RETURN (res); } res = ((exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if x is zero and y isn't, clearly x has the smaller payload if (x_is_zero) { res = ((y.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if y is zero, and x isn't, clearly y has the smaller payload if (y_is_zero) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE 6) // if both components are either bigger or smaller if (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (((sig_x.w[1] < sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (exp_x > exp_y) { // if exp_x is 33 greater than exp_y, it is definitely larger, // so no need for compensation if (exp_x - exp_y > 33) { res = ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); // difference cannot be greater than 10^33 } // otherwise adjust the x significand upwards if (exp_x - exp_y > 19) { __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[exp_x - exp_y - 20]); // the compensated significands are equal (ie "x and y represent the same // entities") return 1 if (negative && expx > expy) || // (positive && expx < expy) if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0) && (sig_n_prime256.w[1] == sig_y.w[1]) && (sig_n_prime256.w[0] == sig_y.w[0])) { // the case exp_x == exp_y cannot occur, because all bits must be // the same - would have been caught if (x == y) res = ((exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if positive, return 1 if adjusted x is smaller than y res = (((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0) && ((sig_n_prime256.w[1] < sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] < sig_y.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_x - exp_y], sig_x); // if positive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = ((exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } res = (((sig_n_prime192.w[2] == 0) && ((sig_n_prime192.w[1] < sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] < sig_y.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // if exp_x is 33 less than exp_y, it is definitely smaller, // no need for compensation if (exp_y - exp_x > 33) { res = ((x.w[1] & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (exp_y - exp_x > 19) { // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[exp_y - exp_x - 20]); // if x and y represent the same entities and both are negative // return true iff exp_x <= exp_y if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0) && (sig_n_prime256.w[1] == sig_x.w[1]) && (sig_n_prime256.w[0] == sig_x.w[0])) { res = (exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // values are not equal, for positive numbers return 1 if x is less than y // and 0 otherwise res = (((sig_n_prime256.w[3] != 0) || // if upper128 bits of compensated y are non-zero, y is bigger (sig_n_prime256.w[2] != 0) || // if upper128 bits of compensated y are non-zero, y is bigger (sig_n_prime256.w[1] > sig_x.w[1]) || // if compensated y is bigger, y is bigger (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y); if ((sig_n_prime192.w[2] == 0) && (sig_n_prime192.w[1] == sig_x.w[1]) && (sig_n_prime192.w[0] == sig_x.w[0])) { res = (exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } res = (((sig_n_prime192.w[2] != 0) || // if upper128 bits of compensated y are non-zero, y is bigger (sig_n_prime192.w[1] > sig_x.w[1]) || // if compensated y is bigger, y is bigger (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_totalOrderMag (int *pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; UINT128 y = *py; #else int bid128_totalOrderMag (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT128 sig_x, sig_y, pyld_y, pyld_x; UINT192 sig_n_prime192; UINT256 sig_n_prime256; char x_is_zero = 0, y_is_zero = 0; BID_SWAP128 (x); BID_SWAP128 (y); x.w[1] = x.w[1] & 0x7fffffffffffffffull; y.w[1] = y.w[1] & 0x7fffffffffffffffull; // NaN (CASE 1) // if x and y are unordered numerically because either operand is NaN // (1) totalOrder(number, +NaN) is true // (2) if x and y are both NaN: // i) signaling < quiet for +NaN // ii) lesser payload < greater payload for +NaN // iii) else if bitwise identical (in canonical form), return 1 if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is +NaN // return false, unless y is +NaN also if ((y.w[1] & MASK_NAN) != MASK_NAN) { res = 0; // y is a number, return 0 BID_RETURN (res); } else { // x and y are both +NaN; pyld_x.w[1] = x.w[1] & 0x00003fffffffffffull; pyld_x.w[0] = x.w[0]; pyld_y.w[1] = y.w[1] & 0x00003fffffffffffull; pyld_y.w[0] = y.w[0]; if ((pyld_x.w[1] > 0x0000314dc6448d93ull) || ((pyld_x.w[1] == 0x0000314dc6448d93ull) && (pyld_x.w[0] > 0x38c15b09ffffffffull))) { pyld_x.w[1] = 0; pyld_x.w[0] = 0; } if ((pyld_y.w[1] > 0x0000314dc6448d93ull) || ((pyld_y.w[1] == 0x0000314dc6448d93ull) && (pyld_y.w[0] > 0x38c15b09ffffffffull))) { pyld_y.w[1] = 0; pyld_y.w[0] = 0; } // if x and y are both +SNaN or both +QNaN, we have to compare payloads // this statement evaluates to true if both are SNaN or QNaN if (! (((y.w[1] & MASK_SNAN) == MASK_SNAN) ^ ((x.w[1] & MASK_SNAN) == MASK_SNAN))) { // it comes down to the payload. we want to return true if x has a // smaller payload, or if the payloads are equal (canonical forms // are bitwise identical) if ((pyld_x.w[1] < pyld_y.w[1]) || ((pyld_x.w[1] == pyld_y.w[1]) && (pyld_x.w[0] <= pyld_y.w[0]))) { res = 1; } else { res = 0; } BID_RETURN (res); } else { // either x = SNaN and y = QNaN or x = QNaN and y = SNaN res = ((x.w[1] & MASK_SNAN) == MASK_SNAN); // totalOrder (-QNaN, -SNaN) == 1 BID_RETURN (res); } } } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // x is certainly not NAN in this case. // return true because y is positive res = 1; BID_RETURN (res); } // SIMPLE (CASE 2) // if all the bits are the same, the numbers are equal. if ((x.w[1] == y.w[1]) && (x.w[0] == y.w[0])) { res = 1; BID_RETURN (res); } // INFINITY (CASE 3) if ((x.w[1] & MASK_INF) == MASK_INF) { // x is positive infinity, only return 1 if y is positive infinity as well res = ((y.w[1] & MASK_INF) == MASK_INF); BID_RETURN (res); // (we know y has same sign as x) } else if ((y.w[1] & MASK_INF) == MASK_INF) { // x is finite, so: // since y is +inf, x> 49) & 0x000000000003fffull; // CHECK IF x IS CANONICAL // 9999999999999999999999999999999999 (decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((((sig_x.w[1] > 0x0001ed09bead87c0ull) || ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull))) && ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) { x_is_zero = 1; // check for the case where the exponent is shifted right by 2 bits! if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { exp_x = (x.w[1] >> 47) & 0x000000000003fffull; } } // CONVERT y exp_y = (y.w[1] >> 49) & 0x0000000000003fffull; sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull; sig_y.w[0] = y.w[0]; // CHECK IF y IS CANONICAL // 9999999999999999999999999999999999(decimal) = // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal) // [0, 10^34) is the 754r supported canonical range. // If the value exceeds that, it is interpreted as 0. if ((((sig_y.w[1] > 0x0001ed09bead87c0ull) || ((sig_y.w[1] == 0x0001ed09bead87c0ull) && (sig_y.w[0] > 0x378d8e63ffffffffull))) && ((y.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) { y_is_zero = 1; // check for the case where the exponent is shifted right by 2 bits! if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { exp_y = (y.w[1] >> 47) & 0x000000000003fffull; } } // ZERO (CASE 4) if (x_is_zero && y_is_zero) { // we know that signs must be the same because we would have caught it // in case3 if signs were different // totalOrder(x,y) iff exp_x <= exp_y for positive numbers if (exp_x == exp_y) { res = 1; BID_RETURN (res); } res = (exp_x <= exp_y); BID_RETURN (res); } // if x is zero and y isn't, clearly x has the smaller payload if (x_is_zero) { res = 1; BID_RETURN (res); } // if y is zero, and x isn't, clearly y has the smaller payload if (y_is_zero) { res = 0; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE 5) // if both components are either bigger or smaller if (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0])) && exp_x >= exp_y) { res = 0; BID_RETURN (res); } if (((sig_x.w[1] < sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0])) && exp_x <= exp_y) { res = 1; BID_RETURN (res); } // if |exp_x - exp_y| < 33, it comes down to the compensated significand if (exp_x > exp_y) { // if exp_x is 33 greater than exp_y, it is definitely larger, // so no need for compensation if (exp_x - exp_y > 33) { res = 0; // difference cannot be greater than 10^33 BID_RETURN (res); } // otherwise adjust the x significand upwards if (exp_x - exp_y > 19) { __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[exp_x - exp_y - 20]); // the compensated significands are equal (ie "x and y represent the same // entities") return 1 if (negative && expx > expy) || // (positive && expx < expy) if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0) && (sig_n_prime256.w[1] == sig_y.w[1]) && (sig_n_prime256.w[0] == sig_y.w[0])) { // the case (exp_x == exp_y) cannot occur, because all bits must be // the same - would have been caught if (x == y) res = (exp_x <= exp_y); BID_RETURN (res); } // since positive, return 1 if adjusted x is smaller than y res = ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0) && ((sig_n_prime256.w[1] < sig_y.w[1]) || (sig_n_prime256.w[1] == sig_y.w[1] && sig_n_prime256.w[0] < sig_y.w[0]))); BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_x - exp_y], sig_x); // if positive, return whichever significand is larger // (converse if negative) if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1] && (sig_n_prime192.w[0] == sig_y.w[0])) { res = (exp_x <= exp_y); BID_RETURN (res); } res = ((sig_n_prime192.w[2] == 0) && ((sig_n_prime192.w[1] < sig_y.w[1]) || (sig_n_prime192.w[1] == sig_y.w[1] && sig_n_prime192.w[0] < sig_y.w[0]))); BID_RETURN (res); } // if exp_x is 33 less than exp_y, it is definitely smaller, // no need for compensation if (exp_y - exp_x > 33) { res = 1; BID_RETURN (res); } if (exp_y - exp_x > 19) { // adjust the y significand upwards __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[exp_y - exp_x - 20]); if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0) && (sig_n_prime256.w[1] == sig_x.w[1]) && (sig_n_prime256.w[0] == sig_x.w[0])) { res = (exp_x <= exp_y); BID_RETURN (res); } // values are not equal, for positive numbers return 1 if x is less than y // and 0 otherwise res = ((sig_n_prime256.w[3] != 0) || // if upper128 bits of compensated y are non-zero, y is bigger (sig_n_prime256.w[2] != 0) || // if upper128 bits of compensated y are non-zero, y is bigger (sig_n_prime256.w[1] > sig_x.w[1]) || // if compensated y is bigger, y is bigger (sig_n_prime256.w[1] == sig_x.w[1] && sig_n_prime256.w[0] > sig_x.w[0])); BID_RETURN (res); } __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y); if ((sig_n_prime192.w[2] == 0) && (sig_n_prime192.w[1] == sig_x.w[1]) && (sig_n_prime192.w[0] == sig_x.w[0])) { res = (exp_x <= exp_y); BID_RETURN (res); } res = ((sig_n_prime192.w[2] != 0) || // if upper128 bits of compensated y are non-zero, y is bigger (sig_n_prime192.w[1] > sig_x.w[1]) || // if compensated y is bigger, y is bigger (sig_n_prime192.w[1] == sig_x.w[1] && sig_n_prime192.w[0] > sig_x.w[0])); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_radix (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else int bid128_radix (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; if (x.w[LOW_128W]) // dummy test res = 10; else res = 10; BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_quantize.c000066400000000000000000000175371504475242000173620ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" BID128_FUNCTION_ARG2 (bid128_quantize, x, y) UINT256 CT; UINT128 CX, CY, T, CX2, CR, Stemp, res, REM_H, C2N; UINT64 sign_x, sign_y, remainder_h, carry, CY64, valid_x; int_float tempx; int exponent_x, exponent_y, digits_x, extra_digits, amount; int expon_diff, total_digits, bin_expon_cx, rmode, status; valid_x = unpack_BID128_value (&sign_x, &exponent_x, &CX, x); // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_y, &exponent_y, &CY, y)) { // y is Inf. or NaN #ifdef SET_STATUS_FLAGS if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // test if y is NaN if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) { // set status flags __set_status_flags (pfpsf, INVALID_EXCEPTION); } #endif if ((x.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull) { res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; } else { res.w[1] = CX.w[1] & QUIET_MASK64; res.w[0] = CX.w[0]; } BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if x is not Inf. if (((x.w[1] & 0x7c00000000000000ull) < 0x7800000000000000ull)) { // return NaN #ifdef SET_STATUS_FLAGS // set status flags __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } else if (((x.w[1] & 0x7c00000000000000ull) <= 0x7800000000000000ull)) { res.w[1] = CX.w[1] & QUIET_MASK64; res.w[0] = CX.w[0]; BID_RETURN (res); } } } if (!valid_x) { // test if x is NaN or Inf if ((x.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull) { #ifdef SET_STATUS_FLAGS // set status flags __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } else if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) { #ifdef SET_STATUS_FLAGS // set status flags __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } res.w[1] = CX.w[1] & QUIET_MASK64; res.w[0] = CX.w[0]; BID_RETURN (res); } if (!CX.w[1] && !CX.w[0]) { get_BID128_very_fast (&res, sign_x, exponent_y, CX); BID_RETURN (res); } } // get number of decimal digits in coefficient_x if (CX.w[1]) { tempx.d = (float) CX.w[1]; bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f + 64; } else { tempx.d = (float) CX.w[0]; bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f; } digits_x = estimate_decimal_digits[bin_expon_cx]; if (CX.w[1] > power10_table_128[digits_x].w[1] || (CX.w[1] == power10_table_128[digits_x].w[1] && CX.w[0] >= power10_table_128[digits_x].w[0])) digits_x++; expon_diff = exponent_x - exponent_y; total_digits = digits_x + expon_diff; if ((UINT32) total_digits <= 34) { if (expon_diff >= 0) { T = power10_table_128[expon_diff]; __mul_128x128_low (CX2, T, CX); get_BID128_very_fast (&res, sign_x, exponent_y, CX2); BID_RETURN (res); } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif // must round off -expon_diff digits extra_digits = -expon_diff; __add_128_128 (CX, CX, round_const_table_128[rmode][extra_digits]); // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_to_256 (CT, CX, reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = recip_scale[extra_digits]; CX2.w[0] = CT.w[2]; CX2.w[1] = CT.w[3]; if (amount >= 64) { CR.w[1] = 0; CR.w[0] = CX2.w[1] >> (amount - 64); } else { __shr_128 (CR, CX2, amount); } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rnd_mode == 0) #endif if (CR.w[0] & 1) { // check whether fractional part of initial_P/10^extra_digits is // exactly .5 this is the same as fractional part of // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero // get remainder if (amount >= 64) { remainder_h = CX2.w[0] | (CX2.w[1] << (128 - amount)); } else remainder_h = CX2.w[0] << (64 - amount); // test whether fractional part is 0 if (!remainder_h && (CT.w[1] < reciprocals10_128[extra_digits].w[1] || (CT.w[1] == reciprocals10_128[extra_digits].w[1] && CT.w[0] < reciprocals10_128[extra_digits].w[0]))) { CR.w[0]--; } } #endif #ifdef SET_STATUS_FLAGS status = INEXACT_EXCEPTION; // get remainder if (amount >= 64) { REM_H.w[1] = (CX2.w[1] << (128 - amount)); REM_H.w[0] = CX2.w[0]; } else { REM_H.w[1] = CX2.w[0] << (64 - amount); REM_H.w[0] = 0; } switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (REM_H.w[1] == 0x8000000000000000ull && !REM_H.w[0] && (CT.w[1] < reciprocals10_128[extra_digits].w[1] || (CT.w[1] == reciprocals10_128[extra_digits].w[1] && CT.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!(REM_H.w[1] | REM_H.w[0]) && (CT.w[1] < reciprocals10_128[extra_digits].w[1] || (CT.w[1] == reciprocals10_128[extra_digits].w[1] && CT.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY64, CT.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, CT.w[1], reciprocals10_128[extra_digits].w[1], CY64); if (amount < 64) { C2N.w[1] = 0; C2N.w[0] = ((UINT64) 1) << amount; REM_H.w[0] = REM_H.w[1] >> (64 - amount); REM_H.w[1] = 0; } else { C2N.w[1] = ((UINT64) 1) << (amount - 64); C2N.w[0] = 0; REM_H.w[1] >>= (128 - amount); } REM_H.w[0] += carry; if (REM_H.w[0] < carry) REM_H.w[1]++; if (__unsigned_compare_ge_128 (REM_H, C2N)) status = EXACT_STATUS; } __set_status_flags (pfpsf, status); #endif get_BID128_very_fast (&res, sign_x, exponent_y, CR); BID_RETURN (res); } if (total_digits < 0) { CR.w[1] = CR.w[0] = 0; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; if (rmode == ROUNDING_UP) CR.w[0] = 1; #endif #endif #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif get_BID128_very_fast (&res, sign_x, exponent_y, CR); BID_RETURN (res); } // else more than 34 digits in coefficient #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_rem.c000066400000000000000000000133251504475242000162740ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_div_macros.h" BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (UINT128, bid128_rem, x, y) UINT256 P256; UINT128 CX, CY, CX2, CQ, CR, T, CXS, P128, res; UINT64 sign_x, sign_y, valid_y; SINT64 D; int_float f64, fx; int exponent_x, exponent_y, diff_expon, bin_expon_cx, scale, scale0; // unpack arguments, check for NaN or Infinity valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // test if x is NaN if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CX.w[1] & QUIET_MASK64; res.w[0] = CX.w[0]; BID_RETURN (res); } // x is Infinity? if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS // set status flags __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } } // x is 0 if ((!CY.w[1]) && (!CY.w[0])) { #ifdef SET_STATUS_FLAGS // set status flags __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } if (valid_y || ((y.w[1] & NAN_MASK64) == INFINITY_MASK64)) { // return 0 if ((exponent_x > exponent_y) && ((y.w[1] & NAN_MASK64) != INFINITY_MASK64)) exponent_x = exponent_y; res.w[1] = sign_x | (((UINT64) exponent_x) << 49); res.w[0] = 0; BID_RETURN (res); } } if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return x res.w[1] = x.w[1]; res.w[0] = x.w[0]; BID_RETURN (res); } // y is 0 #ifdef SET_STATUS_FLAGS // set status flags __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } diff_expon = exponent_x - exponent_y; if (diff_expon <= 0) { diff_expon = -diff_expon; if (diff_expon > 34) { // |x|<|y| in this case res = x; BID_RETURN (res); } // set exponent of y to exponent_x, scale coefficient_y T = power10_table_128[diff_expon]; __mul_128x128_to_256 (P256, CY, T); if (P256.w[2] || P256.w[3]) { // |x|<|y| in this case res = x; BID_RETURN (res); } CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63); CX2.w[0] = CX.w[0] << 1; if (__unsigned_compare_ge_128 (P256, CX2)) { // |x|<|y| in this case res = x; BID_RETURN (res); } P128.w[0] = P256.w[0]; P128.w[1] = P256.w[1]; __div_128_by_128 (&CQ, &CR, CX, P128); CX2.w[1] = (CR.w[1] << 1) | (CR.w[0] >> 63); CX2.w[0] = CR.w[0] << 1; if ((__unsigned_compare_gt_128 (CX2, P256)) || (CX2.w[1] == P256.w[1] && CX2.w[0] == P256.w[0] && (CQ.w[0] & 1))) { __sub_128_128 (CR, P256, CR); sign_x ^= 0x8000000000000000ull; } get_BID128_very_fast (&res, sign_x, exponent_x, CR); BID_RETURN (res); } // 2^64 f64.i = 0x5f800000; scale0 = 38; if (!CY.w[1]) scale0 = 34; while (diff_expon > 0) { // get number of digits in CX and scale=38-digits // fx ~ CX fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f; scale = scale0 - estimate_decimal_digits[bin_expon_cx]; // scale = 38-estimate_decimal_digits[bin_expon_cx]; D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1]; if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) scale--; if (diff_expon >= scale) diff_expon -= scale; else { scale = diff_expon; diff_expon = 0; } T = power10_table_128[scale]; __mul_128x128_low (CXS, CX, T); __div_128_by_128 (&CQ, &CX, CXS, CY); // check for remainder == 0 if (!CX.w[1] && !CX.w[0]) { get_BID128_very_fast (&res, sign_x, exponent_y, CX); BID_RETURN (res); } } CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63); CX2.w[0] = CX.w[0] << 1; if ((__unsigned_compare_gt_128 (CX2, CY)) || (CX2.w[1] == CY.w[1] && CX2.w[0] == CY.w[0] && (CQ.w[0] & 1))) { __sub_128_128 (CX, CY, CX); sign_x ^= 0x8000000000000000ull; } get_BID128_very_fast (&res, sign_x, exponent_y, CX); BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_round_integral.c000066400000000000000000002103531504475242000205250ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" /***************************************************************************** * BID128_round_integral_exact ****************************************************************************/ BID128_FUNCTION_ARG1 (bid128_round_integral_exact, x) UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} }; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1; UINT256 fstar; UINT256 P256; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } BID_RETURN (res) } else { // x is not a NaN, so it must be infinity if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf // return +inf res.w[1] = 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // x is -inf // return -inf res.w[1] = 0xf800000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } } // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } // test for input equal to zero if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 // return 0 preserving the sign bit and the preferred exponent // of MAX(Q(x), 0) if (x_exp <= (0x1820ull << 49)) { res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull; } else { res.w[1] = x_sign | x_exp; } res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero switch (rnd_mode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // if (exp <= -(p+1)) return 0.0 if (x_exp <= 0x2ffa000000000000ull) { // 0x2ffa000000000000ull == -35 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_DOWN: // if (exp <= -p) return -1.0 or +0.0 if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffa000000000000ull == -34 if (x_sign) { // if negative, return negative 1, because we know coefficient // is non-zero (would have been caught above) res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000001ull; } else { // if positive, return positive 0, because we know coefficient is // non-zero (would have been caught above) res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_UP: // if (exp <= -p) return -0.0 or +1.0 if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34 if (x_sign) { // if negative, return negative 0, because we know the coefficient // is non-zero (would have been caught above) res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // if positive, return positive 1, because we know coefficient is // non-zero (would have been caught above) res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000001ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_TO_ZERO: // if (exp <= -p) return -0.0 or +0.0 if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if (exp >= 0) { // -exp <= 0 // the argument is an integer already res.w[1] = x.w[1]; res.w[0] = x.w[0]; BID_RETURN (res); } // exp < 0 switch (rnd_mode) { case ROUNDING_TO_NEAREST: if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); // determine the value of res and fstar // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact // Note: we are going to use ten2mk128[] instead of ten2mk128trunc[] if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 // redundant shift = shiftright128[ind - 1]; // shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* < 10^(-x) <=> midpoint // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] // if 0 < fstar < 10^(-x), subtract 1 if odd (for rounding to even) if ((res.w[0] & 0x0000000000000001ull) && // is result odd? ((fstar.w[1] < (ten2mk128[ind - 1].w[1])) || ((fstar.w[1] == ten2mk128[ind - 1].w[1]) && (fstar.w[0] < ten2mk128[ind - 1].w[0])))) { // subract 1 to make even if (res.w[0]-- == 0) { res.w[1]--; } } if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128[ind - 1].w[1] || (tmp64 == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* < 10^(-x) <=> midpoint // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((res.w[0] & 0x0000000000000001ull) && // is result odd? fstar.w[2] == 0 && (fstar.w[1] < ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] < ten2mk128[ind - 1].w[0]))) { // subract 1 to make even if (res.w[0]-- == 0) { res.w[1]--; } } if (fstar.w[2] > onehalf128[ind - 1] || (fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; if (tmp64 || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* < 10^(-x) <=> midpoint // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((res.w[0] & 0x0000000000000001ull) && // is result odd? fstar.w[3] == 0 && fstar.w[2] == 0 && (fstar.w[1] < ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] < ten2mk128[ind - 1].w[0]))) { // subract 1 to make even if (res.w[0]-- == 0) { res.w[1]--; } } if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if ((q + exp) < 0) <=> q < -exp // the result is +0 or -0 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_TIES_AWAY: if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // determine also the inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact // Note: we are going to use ten2mk128[] instead of ten2mk128trunc[] // shift right C* by Ex-128 = shiftright128[ind] if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 // redundant shift = shiftright128[ind - 1]; // shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128[ind - 1].w[1] || (tmp64 == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0]))) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; if (fstar.w[2] > onehalf128[ind - 1] || (fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; if (tmp64 || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint, it was already rounded away from zero res.w[1] |= x_sign | 0x3040000000000000ull; BID_RETURN (res); } else { // if ((q + exp) < 0) <=> q < -exp // the result is +0 or -0 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_DOWN: if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // (number of digits to be chopped off) // chop off ind digits from the lower part of C1 // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE // tmp64 = C1.w[0]; // if (ind <= 19) { // C1.w[0] = C1.w[0] + midpoint64[ind - 1]; // } else { // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; // } // if (C1.w[0] < tmp64) C1.w[1]++; // if carry-out from C1.w[0], increment C1.w[1] // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; // redundant fstar.w[1] = P256.w[1]; // redundant fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((P256.w[1] > ten2mk128[ind - 1].w[1]) || (P256.w[1] == ten2mk128[ind - 1].w[1] && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) { *pfpsf |= INEXACT_EXCEPTION; // if positive, the truncated value is already the correct result if (x_sign) { // if negative if (++res.w[0] == 0) { res.w[1]++; } } } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 0 <= shift <= 102 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { *pfpsf |= INEXACT_EXCEPTION; // if positive, the truncated value is already the correct result if (x_sign) { // if negative if (++res.w[0] == 0) { res.w[1]++; } } } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { *pfpsf |= INEXACT_EXCEPTION; // if positive, the truncated value is already the correct result if (x_sign) { // if negative if (++res.w[0] == 0) { res.w[1]++; } } } } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 if (x_sign) { // negative rounds down to -1.0 res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000001ull; } else { // positive rpunds down to +0.0 res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_UP: if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // (number of digits to be chopped off) // chop off ind digits from the lower part of C1 // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE // tmp64 = C1.w[0]; // if (ind <= 19) { // C1.w[0] = C1.w[0] + midpoint64[ind - 1]; // } else { // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; // } // if (C1.w[0] < tmp64) C1.w[1]++; // if carry-out from C1.w[0], increment C1.w[1] // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; // redundant fstar.w[1] = P256.w[1]; // redundant fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((P256.w[1] > ten2mk128[ind - 1].w[1]) || (P256.w[1] == ten2mk128[ind - 1].w[1] && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) { *pfpsf |= INEXACT_EXCEPTION; // if negative, the truncated value is already the correct result if (!x_sign) { // if positive if (++res.w[0] == 0) { res.w[1]++; } } } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { *pfpsf |= INEXACT_EXCEPTION; // if negative, the truncated value is already the correct result if (!x_sign) { // if positive if (++res.w[0] == 0) { res.w[1]++; } } } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { *pfpsf |= INEXACT_EXCEPTION; // if negative, the truncated value is already the correct result if (!x_sign) { // if positive if (++res.w[0] == 0) { res.w[1]++; } } } } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 if (x_sign) { // negative rounds up to -0.0 res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // positive rpunds up to +1.0 res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000001ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_TO_ZERO: if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // (number of digits to be chopped off) // chop off ind digits from the lower part of C1 // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE //tmp64 = C1.w[0]; // if (ind <= 19) { // C1.w[0] = C1.w[0] + midpoint64[ind - 1]; // } else { // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; // } // if (C1.w[0] < tmp64) C1.w[1]++; // if carry-out from C1.w[0], increment C1.w[1] // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; // redundant fstar.w[1] = P256.w[1]; // redundant fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((P256.w[1] > ten2mk128[ind - 1].w[1]) || (P256.w[1] == ten2mk128[ind - 1].w[1] && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) { *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { *pfpsf |= INEXACT_EXCEPTION; } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { *pfpsf |= INEXACT_EXCEPTION; } } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 the result is +0 or -0 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; } BID_RETURN (res); } /***************************************************************************** * BID128_round_integral_nearest_even ****************************************************************************/ BID128_FUNCTION_ARG1_NORND (bid128_round_integral_nearest_even, x) UINT128 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1; // UINT128 res is C* at first - represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } BID_RETURN (res) } else { // x is not a NaN, so it must be infinity if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf // return +inf res.w[1] = 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // x is -inf // return -inf res.w[1] = 0xf800000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } } // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } // test for input equal to zero if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 // return 0 preserving the sign bit and the preferred exponent // of MAX(Q(x), 0) if (x_exp <= (0x1820ull << 49)) { res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull; } else { res.w[1] = x_sign | x_exp; } res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // if (exp <= -(p+1)) return 0 if (x_exp <= 0x2ffa000000000000ull) { // 0x2ffa000000000000ull == -35 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if (exp >= 0) { // -exp <= 0 // the argument is an integer already res.w[1] = x.w[1]; res.w[0] = x.w[0]; BID_RETURN (res); } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); // determine the value of res and fstar if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 // redundant shift = shiftright128[ind - 1]; // shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; // redundant fstar.w[1] = P256.w[1]; // redundant fstar.w[0] = P256.w[0]; // fraction f* < 10^(-x) <=> midpoint // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] // if 0 < fstar < 10^(-x), subtract 1 if odd (for rounding to even) if ((res.w[0] & 0x0000000000000001ull) && // is result odd? ((P256.w[1] < (ten2mk128[ind - 1].w[1])) || ((P256.w[1] == ten2mk128[ind - 1].w[1]) && (P256.w[0] < ten2mk128[ind - 1].w[0])))) { // subract 1 to make even if (res.w[0]-- == 0) { res.w[1]--; } } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* < 10^(-x) <=> midpoint // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((res.w[0] & 0x0000000000000001ull) && // is result odd? fstar.w[2] == 0 && (fstar.w[1] < ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] < ten2mk128[ind - 1].w[0]))) { // subract 1 to make even if (res.w[0]-- == 0) { res.w[1]--; } } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* < 10^(-x) <=> midpoint // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((res.w[0] & 0x0000000000000001ull) && // is result odd? fstar.w[3] == 0 && fstar.w[2] == 0 && (fstar.w[1] < ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] < ten2mk128[ind - 1].w[0]))) { // subract 1 to make even if (res.w[0]-- == 0) { res.w[1]--; } } } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if ((q + exp) < 0) <=> q < -exp // the result is +0 or -0 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } } /***************************************************************************** * BID128_round_integral_negative ****************************************************************************/ BID128_FUNCTION_ARG1_NORND (bid128_round_integral_negative, x) UINT128 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo // (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1; // UINT128 res is C* at first - represents up to 34 decimal digits ~ // 113 bits UINT256 fstar; UINT256 P256; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } BID_RETURN (res) } else { // x is not a NaN, so it must be infinity if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf // return +inf res.w[1] = 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // x is -inf // return -inf res.w[1] = 0xf800000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } } // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } // test for input equal to zero if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 // return 0 preserving the sign bit and the preferred exponent // of MAX(Q(x), 0) if (x_exp <= (0x1820ull << 49)) { res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull; } else { res.w[1] = x_sign | x_exp; } res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // if (exp <= -p) return -1.0 or +0.0 if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34 if (x_sign) { // if negative, return negative 1, because we know the coefficient // is non-zero (would have been caught above) res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000001ull; } else { // if positive, return positive 0, because we know coefficient is // non-zero (would have been caught above) res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if (exp >= 0) { // -exp <= 0 // the argument is an integer already res.w[1] = x.w[1]; res.w[0] = x.w[0]; BID_RETURN (res); } else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // (number of digits to be chopped off) // chop off ind digits from the lower part of C1 // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE //tmp64 = C1.w[0]; // if (ind <= 19) { // C1.w[0] = C1.w[0] + midpoint64[ind - 1]; // } else { // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; // } // if (C1.w[0] < tmp64) C1.w[1]++; // if carry-out from C1.w[0], increment C1.w[1] // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // if positive, the truncated value is already the correct result if (x_sign) { // if negative // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; // redundant fstar.w[1] = P256.w[1]; // redundant fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((P256.w[1] > ten2mk128[ind - 1].w[1]) || (P256.w[1] == ten2mk128[ind - 1].w[1] && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) { if (++res.w[0] == 0) { res.w[1]++; } } } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 0 <= shift <= 102 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // if positive, the truncated value is already the correct result if (x_sign) { // if negative // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { if (++res.w[0] == 0) { res.w[1]++; } } } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; // if positive, the truncated value is already the correct result if (x_sign) { // if negative fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { if (++res.w[0] == 0) { res.w[1]++; } } } } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 if (x_sign) { // negative rounds down to -1.0 res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000001ull; } else { // positive rpunds down to +0.0 res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } } /***************************************************************************** * BID128_round_integral_positive ****************************************************************************/ BID128_FUNCTION_ARG1_NORND (bid128_round_integral_positive, x) UINT128 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo // (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1; // UINT128 res is C* at first - represents up to 34 decimal digits ~ // 113 bits UINT256 fstar; UINT256 P256; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } BID_RETURN (res) } else { // x is not a NaN, so it must be infinity if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf // return +inf res.w[1] = 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // x is -inf // return -inf res.w[1] = 0xf800000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } } // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } // test for input equal to zero if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 // return 0 preserving the sign bit and the preferred exponent // of MAX(Q(x), 0) if (x_exp <= (0x1820ull << 49)) { res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull; } else { res.w[1] = x_sign | x_exp; } res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // if (exp <= -p) return -0.0 or +1.0 if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34 if (x_sign) { // if negative, return negative 0, because we know the coefficient // is non-zero (would have been caught above) res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // if positive, return positive 1, because we know coefficient is // non-zero (would have been caught above) res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000001ull; } BID_RETURN (res); } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if (exp >= 0) { // -exp <= 0 // the argument is an integer already res.w[1] = x.w[1]; res.w[0] = x.w[0]; BID_RETURN (res); } else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // (number of digits to be chopped off) // chop off ind digits from the lower part of C1 // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE // tmp64 = C1.w[0]; // if (ind <= 19) { // C1.w[0] = C1.w[0] + midpoint64[ind - 1]; // } else { // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; // } // if (C1.w[0] < tmp64) C1.w[1]++; // if carry-out from C1.w[0], increment C1.w[1] // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; // if negative, the truncated value is already the correct result if (!x_sign) { // if positive // redundant fstar.w[3] = 0; // redundant fstar.w[2] = 0; // redundant fstar.w[1] = P256.w[1]; // redundant fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if ((P256.w[1] > ten2mk128[ind - 1].w[1]) || (P256.w[1] == ten2mk128[ind - 1].w[1] && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) { if (++res.w[0] == 0) { res.w[1]++; } } } } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); // if negative, the truncated value is already the correct result if (!x_sign) { // if positive // redundant fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { if (++res.w[0] == 0) { res.w[1]++; } } } } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; // if negative, the truncated value is already the correct result if (!x_sign) { // if positive fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; // fraction f* > 10^(-x) <=> inexact // f* is in the right position to be compared with // 10^(-x) from ten2mk128[] if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] || (fstar.w[1] == ten2mk128[ind - 1].w[1] && fstar.w[0] >= ten2mk128[ind - 1].w[0])) { if (++res.w[0] == 0) { res.w[1]++; } } } } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 if (x_sign) { // negative rounds up to -0.0 res.w[1] = 0xb040000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // positive rpunds up to +1.0 res.w[1] = 0x3040000000000000ull; res.w[0] = 0x0000000000000001ull; } BID_RETURN (res); } } /***************************************************************************** * BID128_round_integral_zero ****************************************************************************/ BID128_FUNCTION_ARG1_NORND (bid128_round_integral_zero, x) UINT128 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo // (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1; // UINT128 res is C* at first - represents up to 34 decimal digits ~ // 113 bits UINT256 P256; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } BID_RETURN (res) } else { // x is not a NaN, so it must be infinity if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf // return +inf res.w[1] = 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // x is -inf // return -inf res.w[1] = 0xf800000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } } // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } // test for input equal to zero if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 // return 0 preserving the sign bit and the preferred exponent // of MAX(Q(x), 0) if (x_exp <= (0x1820ull << 49)) { res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull; } else { res.w[1] = x_sign | x_exp; } res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // if (exp <= -p) return -0.0 or +0.0 if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if (exp >= 0) { // -exp <= 0 // the argument is an integer already res.w[1] = x.w[1]; res.w[0] = x.w[0]; BID_RETURN (res); } else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // (number of digits to be chopped off) // chop off ind digits from the lower part of C1 // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE //tmp64 = C1.w[0]; // if (ind <= 19) { // C1.w[0] = C1.w[0] + midpoint64[ind - 1]; // } else { // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; // } // if (C1.w[0] < tmp64) C1.w[1]++; // if carry-out from C1.w[0], increment C1.w[1] // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[1] = (P256.w[3] >> shift); res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = P256.w[3] >> shift; } res.w[1] = x_sign | 0x3040000000000000ull | res.w[1]; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 the result is +0 or -0 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } } /***************************************************************************** * BID128_round_integral_nearest_away ****************************************************************************/ BID128_FUNCTION_ARG1_NORND (bid128_round_integral_nearest_away, x) UINT128 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo // (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1; // UINT128 res is C* at first - represents up to 34 decimal digits ~ // 113 bits // UINT256 fstar; UINT256 P256; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, then res = Q (x) // check first for non-canonical NaN payload if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) || (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) && (x.w[0] > 0x38c15b09ffffffffull))) { x.w[1] = x.w[1] & 0xffffc00000000000ull; x.w[0] = 0x0ull; } if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16] res.w[0] = x.w[0]; } else { // x is QNaN // return x res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16] res.w[0] = x.w[0]; } BID_RETURN (res) } else { // x is not a NaN, so it must be infinity if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf // return +inf res.w[1] = 0x7800000000000000ull; res.w[0] = 0x0000000000000000ull; } else { // x is -inf // return -inf res.w[1] = 0xf800000000000000ull; res.w[0] = 0x0000000000000000ull; } BID_RETURN (res); } } // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for non-canonical values (treated as zero) if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11 // non-canonical x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits C1.w[1] = 0; // significand high C1.w[0] = 0; // significand low } else { // G0_G1 != 11 x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] > 0x378d8e63ffffffffull)) { // x is non-canonical if coefficient is larger than 10^34 -1 C1.w[1] = 0; C1.w[0] = 0; } else { // canonical ; } } // test for input equal to zero if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 // return 0 preserving the sign bit and the preferred exponent // of MAX(Q(x), 0) if (x_exp <= (0x1820ull << 49)) { res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull; } else { res.w[1] = x_sign | x_exp; } res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // if (exp <= -(p+1)) return 0.0 if (x_exp <= 0x2ffa000000000000ull) { // 0x2ffa000000000000ull == -35 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if (exp >= 0) { // -exp <= 0 // the argument is an integer already res.w[1] = x.w[1]; res.w[0] = x.w[0]; BID_RETURN (res); } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 34 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res.w[1] = P256.w[3]; res.w[0] = P256.w[2]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift); res.w[1] = (P256.w[3] >> shift); } else { // 22 <= ind - 1 <= 33 shift = shiftright128[ind - 1]; // 2 <= shift <= 38 res.w[1] = 0; res.w[0] = (P256.w[3] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint, it was already rounded away from zero res.w[1] |= x_sign | 0x3040000000000000ull; BID_RETURN (res); } else { // if ((q + exp) < 0) <=> q < -exp // the result is +0 or -0 res.w[1] = x_sign | 0x3040000000000000ull; res.w[0] = 0x0000000000000000ull; BID_RETURN (res); } } libdfp-1.0.17/libbid/bid128_scalb.c000066400000000000000000000054661504475242000166040ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" #define DECIMAL_EXPONENT_BIAS_128 6176 #define MAX_DECIMAL_EXPONENT_128 12287 BID128_FUNCTION_ARG128_ARGTYPE2 (bid128_scalb, x, int, n) UINT128 CX, CX2, CX8, res; SINT64 exp64; UINT64 sign_x; int exponent_x, rmode; // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { // x is Inf. or NaN or 0 #ifdef SET_STATUS_FLAGS if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CX.w[1] & QUIET_MASK64; res.w[0] = CX.w[0]; if (!CX.w[1]) { exp64 = (SINT64) exponent_x + (SINT64) n; if(exp64<0) exp64=0; if(exp64>MAX_DECIMAL_EXPONENT_128) exp64=MAX_DECIMAL_EXPONENT_128; exponent_x = exp64; get_BID128_very_fast (&res, sign_x, exponent_x, CX); } BID_RETURN (res); } exp64 = (SINT64) exponent_x + (SINT64) n; exponent_x = exp64; if ((UINT32) exponent_x <= MAX_DECIMAL_EXPONENT_128) { get_BID128_very_fast (&res, sign_x, exponent_x, CX); BID_RETURN (res); } // check for overflow if (exp64 > MAX_DECIMAL_EXPONENT_128) { if (CX.w[1] < 0x314dc6448d93ull) { // try to normalize coefficient do { CX8.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61); CX8.w[0] = CX.w[0] << 3; CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63); CX2.w[0] = CX.w[0] << 1; __add_128_128 (CX, CX2, CX8); exponent_x--; exp64--; } while (CX.w[1] < 0x314dc6448d93ull && exp64 > MAX_DECIMAL_EXPONENT_128); } if (exp64 <= MAX_DECIMAL_EXPONENT_128) { get_BID128_very_fast (&res, sign_x, exponent_x, CX); BID_RETURN (res); } else exponent_x = 0x7fffffff; // overflow } // exponent < 0 // the BID pack routine will round the coefficient rmode = rnd_mode; get_BID128 (&res, sign_x, exponent_x, CX, (unsigned int *) &rmode, pfpsf); BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_sqrt.c000066400000000000000000000343501504475242000165030ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" #include "bid_sqrt_macros.h" #ifdef UNCHANGED_BINARY_STATUS_FLAGS #include #define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT #endif BID128_FUNCTION_ARG1 (bid128_sqrt, x) UINT256 M256, C256, C4, C8; UINT128 CX, CX1, CX2, A10, S2, T128, TP128, CS, CSM, res; UINT64 sign_x, Carry; SINT64 D; int_float fx, f64; int exponent_x, bin_expon_cx; int digits, scale, exponent_q; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res.w[1] = CX.w[1]; res.w[0] = CX.w[0]; // NaN ? if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CX.w[1] & QUIET_MASK64; BID_RETURN (res); } // x is Infinity? if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = CX.w[1]; if (sign_x) { // -Inf, return NaN res.w[1] = 0x7c00000000000000ull; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } BID_RETURN (res); } // x is 0 otherwise res.w[1] = sign_x | ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1) << 49); res.w[0] = 0; BID_RETURN (res); } if (sign_x) { res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif // 2^64 f64.i = 0x5f800000; // fx ~ CX fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f; digits = estimate_decimal_digits[bin_expon_cx]; A10 = CX; if (exponent_x & 1) { A10.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61); A10.w[0] = CX.w[0] << 3; CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63); CX2.w[0] = CX.w[0] << 1; __add_128_128 (A10, A10, CX2); } CS.w[0] = short_sqrt128 (A10); CS.w[1] = 0; // check for exact result if (CS.w[0] * CS.w[0] == A10.w[0]) { __mul_64x64_to_128_fast (S2, CS.w[0], CS.w[0]); if (S2.w[1] == A10.w[1]) // && S2.w[0]==A10.w[0]) { get_BID128_very_fast (&res, 0, (exponent_x + DECIMAL_EXPONENT_BIAS_128) >> 1, CS); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } // get number of digits in CX D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1]; if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) digits++; // if exponent is odd, scale coefficient by 10 scale = 67 - digits; exponent_q = exponent_x - scale; scale += (exponent_q & 1); // exp. bias is even if (scale > 38) { T128 = power10_table_128[scale - 37]; __mul_128x128_low (CX1, CX, T128); TP128 = power10_table_128[37]; __mul_128x128_to_256 (C256, CX1, TP128); } else { T128 = power10_table_128[scale]; __mul_128x128_to_256 (C256, CX, T128); } // 4*C256 C4.w[3] = (C256.w[3] << 2) | (C256.w[2] >> 62); C4.w[2] = (C256.w[2] << 2) | (C256.w[1] >> 62); C4.w[1] = (C256.w[1] << 2) | (C256.w[0] >> 62); C4.w[0] = C256.w[0] << 2; long_sqrt128 (&CS, C256); #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY if (!((rnd_mode) & 3)) { #endif #endif // compare to midpoints CSM.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63); CSM.w[0] = (CS.w[0] + CS.w[0]) | 1; // CSM^2 //__mul_128x128_to_256(M256, CSM, CSM); __sqr128_to_256 (M256, CSM); if (C4.w[3] > M256.w[3] || (C4.w[3] == M256.w[3] && (C4.w[2] > M256.w[2] || (C4.w[2] == M256.w[2] && (C4.w[1] > M256.w[1] || (C4.w[1] == M256.w[1] && C4.w[0] > M256.w[0])))))) { // round up CS.w[0]++; if (!CS.w[0]) CS.w[1]++; } else { C8.w[1] = (CS.w[1] << 3) | (CS.w[0] >> 61); C8.w[0] = CS.w[0] << 3; // M256 - 8*CSM __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]); __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry); __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry); M256.w[3] = M256.w[3] - Carry; // if CSM' > C256, round up if (M256.w[3] > C4.w[3] || (M256.w[3] == C4.w[3] && (M256.w[2] > C4.w[2] || (M256.w[2] == C4.w[2] && (M256.w[1] > C4.w[1] || (M256.w[1] == C4.w[1] && M256.w[0] > C4.w[0])))))) { // round down if (!CS.w[0]) CS.w[1]--; CS.w[0]--; } } #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY } else { __sqr128_to_256 (M256, CS); C8.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63); C8.w[0] = CS.w[0] << 1; if (M256.w[3] > C256.w[3] || (M256.w[3] == C256.w[3] && (M256.w[2] > C256.w[2] || (M256.w[2] == C256.w[2] && (M256.w[1] > C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])))))) { __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]); __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry); __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry); M256.w[3] = M256.w[3] - Carry; M256.w[0]++; if (!M256.w[0]) { M256.w[1]++; if (!M256.w[1]) { M256.w[2]++; if (!M256.w[2]) M256.w[3]++; } } if (!CS.w[0]) CS.w[1]--; CS.w[0]--; if (M256.w[3] > C256.w[3] || (M256.w[3] == C256.w[3] && (M256.w[2] > C256.w[2] || (M256.w[2] == C256.w[2] && (M256.w[1] > C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])))))) { if (!CS.w[0]) CS.w[1]--; CS.w[0]--; } } else { __add_carry_out (M256.w[0], Carry, M256.w[0], C8.w[0]); __add_carry_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry); __add_carry_in_out (M256.w[2], Carry, M256.w[2], 0, Carry); M256.w[3] = M256.w[3] + Carry; M256.w[0]++; if (!M256.w[0]) { M256.w[1]++; if (!M256.w[1]) { M256.w[2]++; if (!M256.w[2]) M256.w[3]++; } } if (M256.w[3] < C256.w[3] || (M256.w[3] == C256.w[3] && (M256.w[2] < C256.w[2] || (M256.w[2] == C256.w[2] && (M256.w[1] < C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] <= C256.w[0])))))) { CS.w[0]++; if (!CS.w[0]) CS.w[1]++; } } // RU? if ((rnd_mode) == ROUNDING_UP) { CS.w[0]++; if (!CS.w[0]) CS.w[1]++; } } #endif #endif #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif get_BID128_fast (&res, 0, (exponent_q + DECIMAL_EXPONENT_BIAS_128) >> 1, CS); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } BID128_FUNCTION_ARGTYPE1 (bid128d_sqrt, UINT64, x) UINT256 M256, C256, C4, C8; UINT128 CX, CX1, CX2, A10, S2, T128, TP128, CS, CSM, res; UINT64 sign_x, Carry; SINT64 D; int_float fx, f64; int exponent_x, bin_expon_cx; int digits, scale, exponent_q; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif // unpack arguments, check for NaN or Infinity // unpack arguments, check for NaN or Infinity CX.w[1] = 0; if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], x)) { res.w[1] = CX.w[0]; res.w[0] = 0; // NaN ? if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); BID_RETURN (res); } // x is Infinity? if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { if (sign_x) { // -Inf, return NaN res.w[1] = 0x7c00000000000000ull; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } BID_RETURN (res); } // x is 0 otherwise exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_128; res.w[1] = sign_x | ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1) << 49); res.w[0] = 0; BID_RETURN (res); } if (sign_x) { res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_128; // 2^64 f64.i = 0x5f800000; // fx ~ CX fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f; digits = estimate_decimal_digits[bin_expon_cx]; A10 = CX; if (exponent_x & 1) { A10.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61); A10.w[0] = CX.w[0] << 3; CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63); CX2.w[0] = CX.w[0] << 1; __add_128_128 (A10, A10, CX2); } CS.w[0] = short_sqrt128 (A10); CS.w[1] = 0; // check for exact result if (CS.w[0] * CS.w[0] == A10.w[0]) { __mul_64x64_to_128_fast (S2, CS.w[0], CS.w[0]); if (S2.w[1] == A10.w[1]) { get_BID128_very_fast (&res, 0, (exponent_x + DECIMAL_EXPONENT_BIAS_128) >> 1, CS); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } // get number of digits in CX D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1]; if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) digits++; // if exponent is odd, scale coefficient by 10 scale = 67 - digits; exponent_q = exponent_x - scale; scale += (exponent_q & 1); // exp. bias is even if (scale > 38) { T128 = power10_table_128[scale - 37]; __mul_128x128_low (CX1, CX, T128); TP128 = power10_table_128[37]; __mul_128x128_to_256 (C256, CX1, TP128); } else { T128 = power10_table_128[scale]; __mul_128x128_to_256 (C256, CX, T128); } // 4*C256 C4.w[3] = (C256.w[3] << 2) | (C256.w[2] >> 62); C4.w[2] = (C256.w[2] << 2) | (C256.w[1] >> 62); C4.w[1] = (C256.w[1] << 2) | (C256.w[0] >> 62); C4.w[0] = C256.w[0] << 2; long_sqrt128 (&CS, C256); #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY if (!((rnd_mode) & 3)) { #endif #endif // compare to midpoints CSM.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63); CSM.w[0] = (CS.w[0] + CS.w[0]) | 1; // CSM^2 //__mul_128x128_to_256(M256, CSM, CSM); __sqr128_to_256 (M256, CSM); if (C4.w[3] > M256.w[3] || (C4.w[3] == M256.w[3] && (C4.w[2] > M256.w[2] || (C4.w[2] == M256.w[2] && (C4.w[1] > M256.w[1] || (C4.w[1] == M256.w[1] && C4.w[0] > M256.w[0])))))) { // round up CS.w[0]++; if (!CS.w[0]) CS.w[1]++; } else { C8.w[1] = (CS.w[1] << 3) | (CS.w[0] >> 61); C8.w[0] = CS.w[0] << 3; // M256 - 8*CSM __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]); __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry); __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry); M256.w[3] = M256.w[3] - Carry; // if CSM' > C256, round up if (M256.w[3] > C4.w[3] || (M256.w[3] == C4.w[3] && (M256.w[2] > C4.w[2] || (M256.w[2] == C4.w[2] && (M256.w[1] > C4.w[1] || (M256.w[1] == C4.w[1] && M256.w[0] > C4.w[0])))))) { // round down if (!CS.w[0]) CS.w[1]--; CS.w[0]--; } } #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY } else { __sqr128_to_256 (M256, CS); C8.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63); C8.w[0] = CS.w[0] << 1; if (M256.w[3] > C256.w[3] || (M256.w[3] == C256.w[3] && (M256.w[2] > C256.w[2] || (M256.w[2] == C256.w[2] && (M256.w[1] > C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])))))) { __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]); __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry); __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry); M256.w[3] = M256.w[3] - Carry; M256.w[0]++; if (!M256.w[0]) { M256.w[1]++; if (!M256.w[1]) { M256.w[2]++; if (!M256.w[2]) M256.w[3]++; } } if (!CS.w[0]) CS.w[1]--; CS.w[0]--; if (M256.w[3] > C256.w[3] || (M256.w[3] == C256.w[3] && (M256.w[2] > C256.w[2] || (M256.w[2] == C256.w[2] && (M256.w[1] > C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])))))) { if (!CS.w[0]) CS.w[1]--; CS.w[0]--; } } else { __add_carry_out (M256.w[0], Carry, M256.w[0], C8.w[0]); __add_carry_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry); __add_carry_in_out (M256.w[2], Carry, M256.w[2], 0, Carry); M256.w[3] = M256.w[3] + Carry; M256.w[0]++; if (!M256.w[0]) { M256.w[1]++; if (!M256.w[1]) { M256.w[2]++; if (!M256.w[2]) M256.w[3]++; } } if (M256.w[3] < C256.w[3] || (M256.w[3] == C256.w[3] && (M256.w[2] < C256.w[2] || (M256.w[2] == C256.w[2] && (M256.w[1] < C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] <= C256.w[0])))))) { CS.w[0]++; if (!CS.w[0]) CS.w[1]++; } } // RU? if ((rnd_mode) == ROUNDING_UP) { CS.w[0]++; if (!CS.w[0]) CS.w[1]++; } } #endif #endif #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif get_BID128_fast (&res, 0, (exponent_q + DECIMAL_EXPONENT_BIAS_128) >> 1, CS); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_string.c000066400000000000000000000460051504475242000170200ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * BID128_to_string ****************************************************************************/ #define BID_128RES #include #include "bid_internal.h" #include "bid128_2_str.h" #include "bid128_2_str_macros.h" extern int bid128_coeff_2_string (UINT64 X_hi, UINT64 X_lo, char *char_ptr); #if DECIMAL_CALL_BY_REFERENCE void bid128_to_string (char *str, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x; #else void bid128_to_string (char *str, UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) int ind; UINT128 C1; unsigned int k = 0; // pointer in the string unsigned int d0, d123; UINT64 HI_18Dig, LO_18Dig, Tmp; UINT32 MiDi[12], *ptr; char *c_ptr_start, *c_ptr; int midi_ind, k_lcv, len; #if DECIMAL_CALL_BY_REFERENCE x = *px; #endif BID_SWAP128(x); // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag str[0] = ((SINT64)x.w[1]<0)? '-':'+'; str[1] = 'S'; str[2] = 'N'; str[3] = 'a'; str[4] = 'N'; str[5] = '\0'; } else { // x is QNaN str[0] = ((SINT64)x.w[1]<0)? '-':'+'; str[1] = 'Q'; str[2] = 'N'; str[3] = 'a'; str[4] = 'N'; str[5] = '\0'; } } else { // x is not a NaN, so it must be infinity if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf str[0] = '+'; str[1] = 'I'; str[2] = 'n'; str[3] = 'f'; str[4] = '\0'; } else { // x is -inf str[0] = '-'; str[1] = 'I'; str[2] = 'n'; str[3] = 'f'; str[4] = '\0'; } } return; } else if (((x.w[1] & MASK_COEFF) == 0x0ull) && (x.w[0] == 0x0ull)) { // x is 0 len = 0; //determine if +/- if (x.w[1] & MASK_SIGN) str[len++] = '-'; else str[len++] = '+'; str[len++] = '0'; str[len++] = 'E'; // extract the exponent and print exp = (int) (((x.w[1] & MASK_EXP) >> 49) - 6176); if(exp > (((0x5ffe)>>1) - (6176))) { exp = (int) ((((x.w[1]<<2) & MASK_EXP) >> 49) - 6176); } if (exp >= 0) { str[len++] = '+'; len += sprintf (str + len, "%u", exp);// should not use sprintf (should // use sophisticated algorithm, since we know range of exp is limited) str[len++] = '\0'; } else { len += sprintf (str + len, "%d", exp);// should not use sprintf (should // use sophisticated algorithm, since we know range of exp is limited) str[len++] = '\0'; } return; } else { // x is not special and is not zero // unpack x x_sign = x.w[1] & MASK_SIGN;// 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP;// biased and shifted left 49 bit positions if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) x_exp = (x.w[1]<<2) & MASK_EXP;// biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; exp = (x_exp >> 49) - 6176; // determine sign's representation as a char if (x_sign) str[k++] = '-';// negative number else str[k++] = '+';// positive number // determine coefficient's representation as a decimal string // if zero or non-canonical, set coefficient to '0' if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) || ((C1.w[1] == 0) && (C1.w[0] == 0))) { str[k++] = '0'; } else { /* **************************************************** This takes a bid coefficient in C1.w[1],C1.w[0] and put the converted character sequence at location starting at &(str[k]). The function returns the number of MiDi returned. Note that the character sequence does not have leading zeros EXCEPT when the input is of zero value. It will then output 1 character '0' The algorithm essentailly tries first to get a sequence of Millenial Digits "MiDi" and then uses table lookup to get the character strings of these MiDis. **************************************************** */ /* Algorithm first decompose possibly 34 digits in hi and lo 18 digits. (The high can have at most 16 digits). It then uses macro that handle 18 digit portions. The first step is to get hi and lo such that 2^(64) C1.w[1] + C1.w[0] = hi * 10^18 + lo, 0 <= lo < 10^18. We use a table lookup method to obtain the hi and lo 18 digits. [C1.w[1],C1.w[0]] = c_8 2^(107) + c_7 2^(101) + ... + c_0 2^(59) + d where 0 <= d < 2^59 and each c_j has 6 bits. Because d fits in 18 digits, we set hi = 0, and lo = d to begin with. We then retrieve from a table, for j = 0, 1, ..., 8 that gives us A and B where c_j 2^(59+6j) = A * 10^18 + B. hi += A ; lo += B; After each accumulation into lo, we normalize immediately. So at the end, we have the decomposition as we need. */ Tmp = C1.w[0] >> 59; LO_18Dig = (C1.w[0] << 5) >> 5; Tmp += (C1.w[1] << 5); HI_18Dig = 0; k_lcv = 0; // Tmp = {C1.w[1]{49:0}, C1.w[0]{63:59}} // Lo_18Dig = {C1.w[0]{58:0}} while (Tmp) { midi_ind = (int) (Tmp & 0x000000000000003FLL); midi_ind <<= 1; Tmp >>= 6; HI_18Dig += mod10_18_tbl[k_lcv][midi_ind++]; LO_18Dig += mod10_18_tbl[k_lcv++][midi_ind]; __L0_Normalize_10to18 (HI_18Dig, LO_18Dig); } ptr = MiDi; if (HI_18Dig == 0LL) { __L1_Split_MiDi_6_Lead (LO_18Dig, ptr); } else { __L1_Split_MiDi_6_Lead (HI_18Dig, ptr); __L1_Split_MiDi_6 (LO_18Dig, ptr); } len = ptr - MiDi; c_ptr_start = &(str[k]); c_ptr = c_ptr_start; /* now convert the MiDi into character strings */ __L0_MiDi2Str_Lead (MiDi[0], c_ptr); for (k_lcv = 1; k_lcv < len; k_lcv++) { __L0_MiDi2Str (MiDi[k_lcv], c_ptr); } k = k + (c_ptr - c_ptr_start); } // print E and sign of exponent str[k++] = 'E'; if (exp < 0) { exp = -exp; str[k++] = '-'; } else { str[k++] = '+'; } // determine exponent's representation as a decimal string // d0 = exp / 1000; // Use Property 1 d0 = (exp * 0x418a) >> 24;// 0x418a * 2^-24 = (10^(-3))RP,15 d123 = exp - 1000 * d0; if (d0) { // 1000 <= exp <= 6144 => 4 digits to return str[k++] = d0 + 0x30;// ASCII for decimal digit d0 ind = 3 * d123; str[k++] = char_table3[ind]; str[k++] = char_table3[ind + 1]; str[k++] = char_table3[ind + 2]; } else { // 0 <= exp <= 999 => d0 = 0 if (d123 < 10) { // 0 <= exp <= 9 => 1 digit to return str[k++] = d123 + 0x30;// ASCII } else if (d123 < 100) { // 10 <= exp <= 99 => 2 digits to return ind = 2 * (d123 - 10); str[k++] = char_table2[ind]; str[k++] = char_table2[ind + 1]; } else { // 100 <= exp <= 999 => 3 digits to return ind = 3 * d123; str[k++] = char_table3[ind]; str[k++] = char_table3[ind + 1]; str[k++] = char_table3[ind + 2]; } } str[k] = '\0'; } return; } #define MAX_FORMAT_DIGITS_128 34 #define MAX_STRING_DIGITS_128 100 #define MAX_SEARCH MAX_STRING_DIGITS_128-MAX_FORMAT_DIGITS_128-1 #if DECIMAL_CALL_BY_REFERENCE void bid128_from_string (UINT128 * pres, char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #else UINT128 bid128_from_string (char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CX, res; UINT64 sign_x, coeff_high, coeff_low, coeff2, coeff_l2, carry = 0x0ull, scale_high, right_radix_leading_zeros; int ndigits_before, ndigits_after, ndigits_total, dec_expon, sgn_exp, i, d2, rdx_pt_enc; char c, buffer[MAX_STRING_DIGITS_128]; int save_rnd_mode; int save_fpsf; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif save_rnd_mode = rnd_mode; // dummy save_fpsf = *pfpsf; // dummy right_radix_leading_zeros = rdx_pt_enc = 0; // if null string, return NaN if (!ps) { res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } // eliminate leading white space while ((*ps == ' ') || (*ps == '\t')) ps++; // c gets first character c = *ps; // if c is null or not equal to a (radix point, negative sign, // positive sign, or number) it might be SNaN, sNaN, Infinity if (!c || (c != '.' && c != '-' && c != '+' && ((unsigned) (c - '0') > 9))) { res.w[0] = 0; // Infinity? if ((tolower_macro (ps[0]) == 'i' && tolower_macro (ps[1]) == 'n' && tolower_macro (ps[2]) == 'f') && (!ps[3] || (tolower_macro (ps[3]) == 'i' && tolower_macro (ps[4]) == 'n' && tolower_macro (ps[5]) == 'i' && tolower_macro (ps[6]) == 't' && tolower_macro (ps[7]) == 'y' && !ps[8]) )) { res.w[1] = 0x7800000000000000ull; BID_RETURN (res); } // return sNaN if (tolower_macro (ps[0]) == 's' && tolower_macro (ps[1]) == 'n' && tolower_macro (ps[2]) == 'a' && tolower_macro (ps[3]) == 'n') { // case insensitive check for snan res.w[1] = 0x7e00000000000000ull; BID_RETURN (res); } else { // return qNaN res.w[1] = 0x7c00000000000000ull; BID_RETURN (res); } } // if +Inf, -Inf, +Infinity, or -Infinity (case insensitive check for inf) if ((tolower_macro (ps[1]) == 'i' && tolower_macro (ps[2]) == 'n' && tolower_macro (ps[3]) == 'f') && (!ps[4] || (tolower_macro (ps[4]) == 'i' && tolower_macro (ps[5]) == 'n' && tolower_macro (ps[6]) == 'i' && tolower_macro (ps[7]) == 't' && tolower_macro (ps[8]) == 'y' && !ps[9]))) { // ci check for infinity res.w[0] = 0; if (c == '+') res.w[1] = 0x7800000000000000ull; else if (c == '-') res.w[1] = 0xf800000000000000ull; else res.w[1] = 0x7c00000000000000ull; BID_RETURN (res); } // if +sNaN, +SNaN, -sNaN, or -SNaN if (tolower_macro (ps[1]) == 's' && tolower_macro (ps[2]) == 'n' && tolower_macro (ps[3]) == 'a' && tolower_macro (ps[4]) == 'n') { res.w[0] = 0; if (c == '-') res.w[1] = 0xfe00000000000000ull; else res.w[1] = 0x7e00000000000000ull; BID_RETURN (res); } // set up sign_x to be OR'ed with the upper word later if (c == '-') sign_x = 0x8000000000000000ull; else sign_x = 0; // go to next character if leading sign if (c == '-' || c == '+') ps++; c = *ps; // if c isn't a decimal point or a decimal digit, return NaN if (c != '.' && ((unsigned) (c - '0') > 9)) { res.w[1] = 0x7c00000000000000ull | sign_x; res.w[0] = 0; BID_RETURN (res); } // detect zero (and eliminate/ignore leading zeros) if (*(ps) == '0') { // if all numbers are zeros (with possibly 1 radix point, the number is zero // should catch cases such as: 000.0 while (*ps == '0') { ps++; // for numbers such as 0.0000000000000000000000000000000000001001, // we want to count the leading zeros if (rdx_pt_enc) { right_radix_leading_zeros++; } // if this character is a radix point, make sure we haven't already // encountered one if (*(ps) == '.') { if (rdx_pt_enc == 0) { rdx_pt_enc = 1; // if this is the first radix point, and the next character is NULL, // we have a zero if (!*(ps + 1)) { res.w[1] = (0x3040000000000000ull - (right_radix_leading_zeros << 49)) | sign_x; res.w[0] = 0; BID_RETURN (res); } ps = ps + 1; } else { // if 2 radix points, return NaN res.w[1] = 0x7c00000000000000ull | sign_x; res.w[0] = 0; BID_RETURN (res); } } else if (!*(ps)) { //res.w[1] = 0x3040000000000000ull | sign_x; res.w[1] = (0x3040000000000000ull - (right_radix_leading_zeros << 49)) | sign_x; res.w[0] = 0; BID_RETURN (res); } } } c = *ps; // initialize local variables ndigits_before = ndigits_after = ndigits_total = 0; sgn_exp = 0; // pstart_coefficient = ps; if (!rdx_pt_enc) { // investigate string (before radix point) while ((unsigned) (c - '0') <= 9 && ndigits_before < MAX_STRING_DIGITS_128) { buffer[ndigits_before] = c; ps++; c = *ps; ndigits_before++; } ndigits_total = ndigits_before; if (c == '.') { ps++; if ((c = *ps)) { // investigate string (after radix point) while ((unsigned) (c - '0') <= 9 && ndigits_total < MAX_STRING_DIGITS_128) { buffer[ndigits_total] = c; ps++; c = *ps; ndigits_total++; } ndigits_after = ndigits_total - ndigits_before; } } } else { // we encountered a radix point while detecting zeros //if (c = *ps){ c = *ps; ndigits_total = 0; // investigate string (after radix point) while ((unsigned) (c - '0') <= 9 && ndigits_total < MAX_STRING_DIGITS_128) { buffer[ndigits_total] = c; ps++; c = *ps; ndigits_total++; } ndigits_after = ndigits_total - ndigits_before; } // get exponent dec_expon = 0; if (ndigits_total < MAX_STRING_DIGITS_128) { if (c) { if (c != 'e' && c != 'E') { // return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } ps++; c = *ps; if (((unsigned) (c - '0') > 9) && ((c != '+' && c != '-') || (unsigned) (ps[1] - '0') > 9)) { // return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; BID_RETURN (res); } if (c == '-') { sgn_exp = -1; ps++; c = *ps; } else if (c == '+') { ps++; c = *ps; } dec_expon = c - '0'; i = 1; ps++; c = *ps - '0'; while (((unsigned) c) <= 9 && i < 7) { d2 = dec_expon + dec_expon; dec_expon = (d2 << 2) + d2 + c; ps++; c = *ps - '0'; i++; } } dec_expon = (dec_expon + sgn_exp) ^ sgn_exp; } if (ndigits_total <= MAX_FORMAT_DIGITS_128) { dec_expon += DECIMAL_EXPONENT_BIAS_128 - ndigits_after - right_radix_leading_zeros; if (dec_expon < 0) { res.w[1] = 0 | sign_x; res.w[0] = 0; } if (ndigits_total == 0) { CX.w[0] = 0; CX.w[1] = 0; } else if (ndigits_total <= 19) { coeff_high = buffer[0] - '0'; for (i = 1; i < ndigits_total; i++) { coeff2 = coeff_high + coeff_high; coeff_high = (coeff2 << 2) + coeff2 + buffer[i] - '0'; } CX.w[0] = coeff_high; CX.w[1] = 0; } else { coeff_high = buffer[0] - '0'; for (i = 1; i < ndigits_total - 17; i++) { coeff2 = coeff_high + coeff_high; coeff_high = (coeff2 << 2) + coeff2 + buffer[i] - '0'; } coeff_low = buffer[i] - '0'; i++; for (; i < ndigits_total; i++) { coeff_l2 = coeff_low + coeff_low; coeff_low = (coeff_l2 << 2) + coeff_l2 + buffer[i] - '0'; } // now form the coefficient as coeff_high*10^19+coeff_low+carry scale_high = 100000000000000000ull; __mul_64x64_to_128_fast (CX, coeff_high, scale_high); CX.w[0] += coeff_low; if (CX.w[0] < coeff_low) CX.w[1]++; } get_BID128 (&res, sign_x, dec_expon, CX,&rnd_mode,pfpsf); BID_RETURN (res); } else { // simply round using the digits that were read dec_expon += ndigits_before + DECIMAL_EXPONENT_BIAS_128 - MAX_FORMAT_DIGITS_128 - right_radix_leading_zeros; if (dec_expon < 0) { res.w[1] = 0 | sign_x; res.w[0] = 0; } coeff_high = buffer[0] - '0'; for (i = 1; i < MAX_FORMAT_DIGITS_128 - 17; i++) { coeff2 = coeff_high + coeff_high; coeff_high = (coeff2 << 2) + coeff2 + buffer[i] - '0'; } coeff_low = buffer[i] - '0'; i++; for (; i < MAX_FORMAT_DIGITS_128; i++) { coeff_l2 = coeff_low + coeff_low; coeff_low = (coeff_l2 << 2) + coeff_l2 + buffer[i] - '0'; } switch(rnd_mode) { case ROUNDING_TO_NEAREST: carry = ((unsigned) ('4' - buffer[i])) >> 31; if ((buffer[i] == '5' && !(coeff_low & 1)) || dec_expon < 0) { if (dec_expon >= 0) { carry = 0; i++; } for (; i < ndigits_total; i++) { if (buffer[i] > '0') { carry = 1; break; } } } break; case ROUNDING_DOWN: if(sign_x) for (; i < ndigits_total; i++) { if (buffer[i] > '0') { carry = 1; break; } } break; case ROUNDING_UP: if(!sign_x) for (; i < ndigits_total; i++) { if (buffer[i] > '0') { carry = 1; break; } } break; case ROUNDING_TO_ZERO: carry=0; break; case ROUNDING_TIES_AWAY: carry = ((unsigned) ('4' - buffer[i])) >> 31; if (dec_expon < 0) { for (; i < ndigits_total; i++) { if (buffer[i] > '0') { carry = 1; break; } } } break; } // now form the coefficient as coeff_high*10^17+coeff_low+carry scale_high = 100000000000000000ull; if (dec_expon < 0) { if (dec_expon > -MAX_FORMAT_DIGITS_128) { scale_high = 1000000000000000000ull; coeff_low = (coeff_low << 3) + (coeff_low << 1); dec_expon--; } if (dec_expon == -MAX_FORMAT_DIGITS_128 && coeff_high > 50000000000000000ull) carry = 0; } __mul_64x64_to_128_fast (CX, coeff_high, scale_high); coeff_low += carry; CX.w[0] += coeff_low; if (CX.w[0] < coeff_low) CX.w[1]++; get_BID128(&res, sign_x, dec_expon, CX, &rnd_mode, pfpsf); BID_RETURN (res); } } libdfp-1.0.17/libbid/bid128_to_int16.c000066400000000000000000000047531504475242000171610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffff8000 #define INVALID_RESULT 0x8000 BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_rnint, UINT128, x, bid128_to_int32_rnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xrnint, UINT128, x, bid128_to_int32_xrnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_rninta, UINT128, x, bid128_to_int32_rninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xrninta, UINT128, x, bid128_to_int32_xrninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_int, UINT128, x, bid128_to_int32_int, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xint, UINT128, x, bid128_to_int32_xint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_floor, UINT128, x, bid128_to_int32_floor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_ceil, UINT128, x, bid128_to_int32_ceil, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xfloor, UINT128, x, bid128_to_int32_xfloor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xceil, UINT128, x, bid128_to_int32_xceil, int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid128_to_int32.c000066400000000000000000004033711504475242000171560ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID128_to_int32_rnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_rnint, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005 <=> // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1/2 up) tmp64 = 0x500000005ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31-1/2 up) tmp64 = 0x4fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_xrnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xrnint, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005 <=> // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1/2 up) tmp64 = 0x500000005ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31-1/2 up) tmp64 = 0x4fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_floor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_floor, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_lt_midpoint = 0; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; int is_midpoint_gt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000 <=> // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31 up) tmp64 = 0x500000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31 up) tmp64 = 0x500000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 <= n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // return 0 if (x_sign) res = 0xffffffff; else res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31 <= x <= -1 or 1 <= x < 2^31 so x can be rounded // toward negative infinity to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } } // general correction for RM if (x_sign && (is_midpoint_gt_even || is_inexact_lt_midpoint)) { Cstar.w[0] = Cstar.w[0] + 1; } else if (!x_sign && (is_midpoint_lt_even || is_inexact_gt_midpoint)) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // the result is already correct } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_xfloor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xfloor, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_lt_midpoint = 0; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; int is_midpoint_gt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000 <=> // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31 up) tmp64 = 0x500000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31 up) tmp64 = 0x500000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 <= n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 if (x_sign) res = 0xffffffff; else res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31 <= x <= -1 or 1 <= x < 2^31 so x can be rounded // toward negative infinity to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } } // general correction for RM if (x_sign && (is_midpoint_gt_even || is_inexact_lt_midpoint)) { Cstar.w[0] = Cstar.w[0] + 1; } else if (!x_sign && (is_midpoint_lt_even || is_inexact_gt_midpoint)) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // the result is already correct } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_ceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_ceil, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_lt_midpoint = 0; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; int is_midpoint_gt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31-1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1 up) tmp64 = 0x50000000aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n > 2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1 // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x4fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6 <=> // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31 up) tmp64 = 0x4fffffff6ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31-1 < n <= 2^31-1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // return 0 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded // toward positive infinity to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } } // general correction for RM if (x_sign && (is_midpoint_lt_even || is_inexact_gt_midpoint)) { Cstar.w[0] = Cstar.w[0] - 1; } else if (!x_sign && (is_midpoint_gt_even || is_inexact_lt_midpoint)) { Cstar.w[0] = Cstar.w[0] + 1; } else { ; // the result is already correct } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_xceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xceil, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_lt_midpoint = 0; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; int is_midpoint_gt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31-1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1 up) tmp64 = 0x50000000aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n > 2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1 // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x4fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6 <=> // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31 up) tmp64 = 0x4fffffff6ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31-1 < n <= 2^31-1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded // toward positive infinity to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_lt_midpoint = 0; is_inexact_gt_midpoint = 0; } } // general correction for RM if (x_sign && (is_midpoint_lt_even || is_inexact_gt_midpoint)) { Cstar.w[0] = Cstar.w[0] - 1; } else if (!x_sign && (is_midpoint_gt_even || is_inexact_lt_midpoint)) { Cstar.w[0] = Cstar.w[0] + 1; } else { ; // the result is already correct } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_int ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_int, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1 up) tmp64 = 0x50000000aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31-1/2 up) tmp64 = 0x500000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded // toward zero to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0]))) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_gt_midpoint = 0; } } // general correction for RZ if (is_midpoint_lt_even || is_inexact_gt_midpoint) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // exact, the result is already correct } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_xint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xint, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1 up) tmp64 = 0x50000000aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31-1/2 up) tmp64 = 0x500000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded // toward zero to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_gt_midpoint = 0; } } // general correction for RZ if (is_midpoint_lt_even || is_inexact_gt_midpoint) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // exact, the result is already correct } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_rninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_rninta, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005 <=> // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1/2 up) tmp64 = 0x500000005ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31-1/2 up) tmp64 = 0x4fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1/2 < x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest-away to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint, it was already rounded away from zero if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; // no need to check for midpoints - already rounded away from zero! } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int32_xrninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xrninta, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005 <=> // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31+1/2 up) tmp64 = 0x500000005ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^31-1/2 up) tmp64 = 0x4fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^31-1/2 < x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest-away to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint, it was already rounded away from zero if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0]))) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // no need to check for midpoints - already rounded away from zero! } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_to_int64.c000066400000000000000000003242351504475242000171640ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID128_to_int64_rnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_rnint, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0000000000000005ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_xrnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_xrnint, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0000000000000005ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_floor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_floor, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 10*2^63, 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return -1 or 0 if (x_sign) res = 0xffffffffffffffffull; else res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded // toward zero to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result is negative and inexact, need to add 1 to it // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_xfloor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_xfloor, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 10*2^63, 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return -1 or 0 if (x_sign) res = 0xffffffffffffffffull; else res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded // toward zero to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result is negative and inexact, need to add 1 to it // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_ceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_ceil, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+2), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x5000000000000000a, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x000000000000000aull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n > 2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 10*(2^63-1), 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=34 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffff6ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1 < n <= 2^63 - 1 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 or 1 if (x_sign) res = 0x0000000000000000ull; else res = 0x0000000000000001ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded // up to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result is positive and inexact, need to add 1 to it // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_xceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_xceil, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+2), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x5000000000000000a, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x000000000000000aull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n > 2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 10*(2^63-1), 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=34 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffff6ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1 < n <= 2^63 - 1 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 or 1 if (x_sign) res = 0x0000000000000000ull; else res = 0x0000000000000001ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded // up to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result is positive and inexact, need to add 1 to it // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_int ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_int, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x000000000000000aull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded // toward zero to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_xint64_xint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_xint, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x000000000000000aull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded // toward zero to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_rninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_rninta, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0000000000000005ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint it was rounded away from zero if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_int64_xrninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_xrninta, x) SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=34 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=34 C.w[1] = 0x0000000000000005ull; C.w[0] = 0000000000000005ull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 => // 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]); } else if (q == 20) { ; // C1 * 10^0 = C1 } else { // if 21 <= q <= 34 __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } } // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point // Restore C1 which may have been modified above C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18) // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero if (x_sign) res = -Cstar.w[0]; else res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 19 // res = +/-C (exact) if (x_sign) res = -C1.w[0]; else res = C1.w[0]; } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19 // res = +/-C * 10^exp (exact) where this fits in 64-bit integer if (x_sign) res = -C1.w[0] * ten2k64[exp]; else res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_to_int8.c000066400000000000000000000047251504475242000171010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffffff80 #define INVALID_RESULT 0x80 BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_rnint, UINT128, x, bid128_to_int32_rnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xrnint, UINT128, x, bid128_to_int32_xrnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_rninta, UINT128, x, bid128_to_int32_rninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xrninta, UINT128, x, bid128_to_int32_xrninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_int, UINT128, x, bid128_to_int32_int, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xint, UINT128, x, bid128_to_int32_xint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_floor, UINT128, x, bid128_to_int32_floor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_ceil, UINT128, x, bid128_to_int32_ceil, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xfloor, UINT128, x, bid128_to_int32_xfloor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xceil, UINT128, x, bid128_to_int32_xceil, int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid128_to_uint16.c000066400000000000000000000051111504475242000173330ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffff0000 #define INVALID_RESULT 0x8000 BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_rnint, UINT128, x, bid128_to_uint32_rnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xrnint, UINT128, x, bid128_to_uint32_xrnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_rninta, UINT128, x, bid128_to_uint32_rninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xrninta, UINT128, x, bid128_to_uint32_xrninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_int, UINT128, x, bid128_to_uint32_int, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xint, UINT128, x, bid128_to_uint32_xint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_floor, UINT128, x, bid128_to_uint32_floor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_ceil, UINT128, x, bid128_to_uint32_ceil, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xfloor, UINT128, x, bid128_to_uint32_xfloor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xceil, UINT128, x, bid128_to_uint32_xceil, unsigned int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid128_to_uint32.c000066400000000000000000003753431504475242000173520ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID128_to_uint32_rnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_rnint, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -1/2 then n cannot be converted to uint32 with RN // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x05, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x05 <=> // C > 0x05 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1/2 up) tmp64 = 0x05ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32-1/2 up) tmp64 = 0x9fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -1/2 <= n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; } } } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32-1/2 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_xrnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_xrnint, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; unsigned int tmp_inexact = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -1/2 then n cannot be converted to uint32 with RN // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x05, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x05 <=> // C > 0x05 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1/2 up) tmp64 = 0x05ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32-1/2 up) tmp64 = 0x9fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -1/2 <= n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32-1/2 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } res = Cstar.w[0]; // the result is positive if (tmp_inexact) *pfpsf |= INEXACT_EXCEPTION; } else if (exp == 0) { // 1 <= q <= 10 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_floor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_floor, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // x < 0 is invalid if (x_sign) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // x > 0 from this point on // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' // n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32 up) tmp64 = 0xa00000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } // n is not too large to be converted to int32: 0 <= n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +0.0...c(0)c(1)...c(q-1) or n = +0.c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // 1 <= x < 2^32 so x can be rounded down to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_gt_midpoint = 0; } } // general correction for RM if (is_midpoint_lt_even || is_inexact_gt_midpoint) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // the result is already correct } res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_xfloor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_xfloor, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // x < 0 is invalid if (x_sign) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // x > 0 from this point on // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' // n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32 up) tmp64 = 0xa00000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } // n is not too large to be converted to int32: 0 <= n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +0.0...c(0)c(1)...c(q-1) or n = +0.c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // 1 <= x < 2^32 so x can be rounded down to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_gt_midpoint = 0; } } // general correction for RM if (is_midpoint_lt_even || is_inexact_gt_midpoint) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // the result is already correct } res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_ceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_ceil, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_lt_midpoint = 0; int is_midpoint_gt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=> // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1 up) tmp64 = 0x0aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n > 2^32 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1 // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x9fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6 <=> // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32 up) tmp64 = 0x9fffffff6ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^32-1 < n <= 2^32-1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // return 0 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^32-1 < x <= -1 or 1 <= x <= 2^32-1 so x can be rounded // toward positive infinity to a 32-bit signed integer if (x_sign) { // x <= -1 is invalid // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // x > 0 from this point on if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 ; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 ; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_inexact_lt_midpoint = 0; } } // general correction for RM if (is_midpoint_gt_even || is_inexact_lt_midpoint) { Cstar.w[0] = Cstar.w[0] + 1; } else { ; // the result is already correct } res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_xceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_xceil, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_lt_midpoint = 0; int is_midpoint_gt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=> // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1 up) tmp64 = 0x0aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n > 2^32 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1 // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x9fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6 <=> // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32 up) tmp64 = 0x9fffffff6ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^32-1 < n <= 2^32-1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // -2^32-1 < x <= -1 or 1 <= x <= 2^32-1 so x can be rounded // toward positive infinity to a 32-bit signed integer if (x_sign) { // x <= -1 is invalid // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // x > 0 from this point on if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_midpoint_gt_even = 1; is_inexact_lt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_inexact_lt_midpoint = 0; } } // general correction for RM if (is_midpoint_gt_even || is_inexact_lt_midpoint) { Cstar.w[0] = Cstar.w[0] + 1; } else { ; // the result is already correct } res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_int ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_int, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit uint fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=> // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1 up) tmp64 = 0x0aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit uint fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32 up) tmp64 = 0xa00000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to uint32: -2^32 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // x = d(0)...d(k).d(k+1)..., k >= 0, d(0) != 0 if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // x > 0 from this point on // 1 <= x < 2^32 so x can be rounded to zero to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { } // else the result is exact } else { // the result is inexact; f2* <= 1/2 is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_gt_midpoint = 0; } } // general correction for RZ if (is_midpoint_lt_even || is_inexact_gt_midpoint) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // exact, the result is already correct } res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_xint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_xint, x) int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; int is_inexact_gt_midpoint = 0; int is_midpoint_lt_even = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit uint fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=> // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1 up) tmp64 = 0x0aull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit uint fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32 up) tmp64 = 0xa00000000ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to uint32: -2^32 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) // x = d(0)...d(k).d(k+1)..., k >= 0, d(0) != 0 if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // x > 0 from this point on // 1 <= x < 2^32 so x can be rounded to zero to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; is_inexact_gt_midpoint = 1; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] is_midpoint_lt_even = 1; is_inexact_gt_midpoint = 0; } } // general correction for RZ if (is_midpoint_lt_even || is_inexact_gt_midpoint) { Cstar.w[0] = Cstar.w[0] - 1; } else { ; // exact, the result is already correct } res = Cstar.w[0]; } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_rninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_rninta, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05 <=> // C >= 0x05 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1/2 up) tmp64 = 0x05ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32-1/2 up) tmp64 = 0x9fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -1/2 < n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; } } } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^31-1/2 so x can be rounded // to nearest-away to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint, it was already rounded away from zero res = Cstar.w[0]; // always positive // no need to check for midpoints - already rounded away from zero! } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint32_xrninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int, bid128_to_uint32_xrninta, x) unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; unsigned int tmp_inexact = 0; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x00000000; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x00000000; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05 <=> // C >= 0x05 * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 1/2 up) tmp64 = 0x05ull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34 if (q <= 11) { tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2 // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23 // (scale 2^32-1/2 up) tmp64 = 0x9fffffffbull; if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]); } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]); } if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -1/2 < n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x00000000; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x80000000; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9) if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^31-1/2 so x can be rounded // to nearest-away to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint, it was already rounded away from zero // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag // *pfpsf |= INEXACT_EXCEPTION; tmp_inexact = 1; } } // no need to check for midpoints - already rounded away from zero! res = Cstar.w[0]; // the result is positive if (tmp_inexact) *pfpsf |= INEXACT_EXCEPTION; } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_to_uint64.c000066400000000000000000003553701504475242000173550ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID128_to_uint64_rnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_rnint, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n < -1/2 then n cannot be converted to uint64 with RN // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^21 > 0x05, 1<=q<=34 // <=> C * 10^(21-q) > 0x05, 1<=q<=34 if (q == 21) { // C > 5 if (C1.w[1] != 0 || C1.w[0] > 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) > 5 is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C > 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0x9fffffffffffffffb __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff C.w[0] = C1.w[0] + C1.w[0]; C.w[1] = C1.w[1] + C1.w[1]; if (C.w[0] < C1.w[0]) C.w[1]++; if (C.w[1] > 0x01 || (C.w[1] == 0x01 && C.w[0] >= 0xffffffffffffffffull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0x9fffffffffffffffb if (C1.w[1] > 0x09 || (C1.w[1] == 0x09 && C1.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits C.w[1] = 0x09; C.w[0] = 0xfffffffffffffffbull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; } } } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_xrnint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_xrnint, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n < -1/2 then n cannot be converted to uint64 with RN // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^21 > 0x05, 1<=q<=34 // <=> C * 10^(21-q) > 0x05, 1<=q<=34 if (q == 21) { // C > 5 if (C1.w[1] != 0 || C1.w[0] > 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) > 5 is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C > 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0x9fffffffffffffffb __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff C.w[0] = C1.w[0] + C1.w[0]; C.w[1] = C1.w[1] + C1.w[1]; if (C.w[0] < C1.w[0]) C.w[1]++; if (C.w[1] > 0x01 || (C.w[1] == 0x01 && C.w[0] >= 0xffffffffffffffffull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0x9fffffffffffffffb if (C1.w[1] > 0x09 || (C1.w[1] == 0x09 && C1.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits C.w[1] = 0x09; C.w[0] = 0xfffffffffffffffbull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] <= midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[3] == 0) && (fstar.w[2] == 0) && (fstar.w[1] || fstar.w[0]) && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) { // the result is a midpoint; round to nearest if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar.w[0]--; // Cstar.w[0] is now even } // else MP in [ODD, EVEN] } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_floor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_floor, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // if n < 0 then n cannot be converted to uint64 with RM if (x_sign) { // if n < 0 and q + exp = 20 // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 0 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' // if n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65 // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0xa0000000000000000 __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C >= 0x10000000000000000 if (C1.w[1] >= 0x01) { // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0xa0000000000000000 if (C1.w[1] >= 0x0a) { // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits C.w[1] = 0x0a; C.w[0] = 0x0000000000000000ull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } // n is not too large to be converted to int64 if 0 <= n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // 1 <= x < 2^64 so x can be rounded // down to a 64-bit unsigned signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_xfloor ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_xfloor, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // if n < 0 then n cannot be converted to uint64 with RM if (x_sign) { // if n < 0 and q + exp = 20 // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 0 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' // if n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65 // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0xa0000000000000000 __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C >= 0x10000000000000000 if (C1.w[1] >= 0x01) { // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0xa0000000000000000 if (C1.w[1] >= 0x0a) { // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits C.w[1] = 0x0a; C.w[0] = 0x0000000000000000ull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } // n is not too large to be converted to int64 if 0 <= n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // 1 <= x < 2^64 so x can be rounded // down to a 64-bit unsigned signed integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_ceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_ceil, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n <= -1 then n cannot be converted to uint64 with RZ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34 // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34 if (q == 21) { // C >= a if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n > 2^64 - 1 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 > 10 * (2^64 - 1) // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=34 if (q == 1) { // C * 10^20 > 0x9fffffffffffffff6 __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) > 0x9fffffffffffffff6 __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C > 0xffffffffffffffff if (C1.w[1]) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C > 0x9fffffffffffffff6 if (C1.w[1] > 0x09 || (C1.w[1] == 0x09 && C1.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C > 10^(q-21) * 0x9fffffffffffffff6 max 44 bits x 68 bits C.w[1] = 0x09; C.w[0] = 0xfffffffffffffff6ull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n <= 2^64 - 1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 or 1 if (x_sign) res = 0x0000000000000000ull; else res = 0x0000000000000001ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded // to zero to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x <= 2^64 - 1 so x can be rounded // to zero to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result is positive and inexact, need to add 1 to it // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } } // else the result is exact } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_xceil ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_xceil, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n <= -1 then n cannot be converted to uint64 with RZ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34 // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34 if (q == 21) { // C >= a if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n > 2^64 - 1 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 > 10 * (2^64 - 1) // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=34 if (q == 1) { // C * 10^20 > 0x9fffffffffffffff6 __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) > 0x9fffffffffffffff6 __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C > 0xffffffffffffffff if (C1.w[1]) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C > 0x9fffffffffffffff6 if (C1.w[1] > 0x09 || (C1.w[1] == 0x09 && C1.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C > 10^(q-21) * 0x9fffffffffffffff6 max 44 bits x 68 bits C.w[1] = 0x09; C.w[0] = 0xfffffffffffffff6ull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n <= 2^64 - 1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 or 1 if (x_sign) res = 0x0000000000000000ull; else res = 0x0000000000000001ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded // to zero to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x <= 2^64 - 1 so x can be rounded // to zero to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result is positive and inexact, need to add 1 to it // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { if (!x_sign) { // positive and inexact Cstar.w[0]++; if (Cstar.w[0] == 0x0) Cstar.w[1]++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_int ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_int, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n <= -1 then n cannot be converted to uint64 with RZ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34 // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34 if (q == 21) { // C >= a if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65 // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0xa0000000000000000 __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C >= 0x10000000000000000 if (C1.w[1] >= 0x01) { // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0xa0000000000000000 if (C1.w[1] >= 0x0a) { // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits C.w[1] = 0x0a; C.w[0] = 0x0000000000000000ull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded // to zero to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64 so x can be rounded // to zero to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_xint ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_xint, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n <= -1 then n cannot be converted to uint64 with RZ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1 // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34 // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34 if (q == 21) { // C >= a if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65 // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0xa0000000000000000 __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C >= 0x10000000000000000 if (C1.w[1] >= 0x01) { // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0xa0000000000000000 if (C1.w[1] >= 0x0a) { // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits C.w[1] = 0x0a; C.w[0] = 0x0000000000000000ull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded // to zero to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64 so x can be rounded // to zero to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 22 <= ind <= 33 if (fstar.w[3] || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_rninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_rninta, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n <= -1/2 then n cannot be converted to uint64 with RN // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x05, 1<=q<=34 // <=> C * 10^(21-q) >= 0x05, 1<=q<=34 if (q == 21) { // C >= 5 if (C1.w[1] != 0 || C1.w[0] >= 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) >= 5 is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0x9fffffffffffffffb __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff C.w[0] = C1.w[0] + C1.w[0]; C.w[1] = C1.w[1] + C1.w[1]; if (C.w[0] < C1.w[0]) C.w[1]++; if (C.w[1] > 0x01 || (C.w[1] == 0x01 && C.w[0] >= 0xffffffffffffffffull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0x9fffffffffffffffb if (C1.w[1] > 0x09 || (C1.w[1] == 0x09 && C1.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits C.w[1] = 0x09; C.w[0] = 0xfffffffffffffffbull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 < n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // if the result was a midpoint it was rounded away from zero res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } /***************************************************************************** * BID128_to_uint64_xrninta ****************************************************************************/ BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_xrninta, x) UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) UINT64 tmp64, tmp64A; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT128 C1, C; UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits UINT256 fstar; UINT256 P256; // unpack x x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions C1.w[1] = x.w[1] & MASK_COEFF; C1.w[0] = x.w[0]; // check for NaN or Infinity if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) { // x is special if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is QNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } else { // x is not a NaN, so it must be infinity if (!x_sign) { // x is +inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } else { // x is -inf // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; } BID_RETURN (res); } } // check for non-canonical values (after the check for special values) if ((C1.w[1] > 0x0001ed09bead87c0ull) || (C1.w[1] == 0x0001ed09bead87c0ull && (C1.w[0] > 0x378d8e63ffffffffull)) || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) { res = 0x0000000000000000ull; BID_RETURN (res); } else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // x is not special and is not zero // q = nr. of decimal digits in x // determine first the nr. of bits in x if (C1.w[1] == 0) { if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1.w[0] >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) (C1.w[0]); // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1.w[0]; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1]) tmp1.d = (double) C1.w[1]; // exact conversion x_nr_bits = 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo)) q++; } exp = (x_exp >> 49) - 6176; if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 // if n <= -1/2 then n cannot be converted to uint64 with RN // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x05, 1<=q<=34 // <=> C * 10^(21-q) >= 0x05, 1<=q<=34 if (q == 21) { // C >= 5 if (C1.w[1] != 0 || C1.w[0] >= 0x05ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to 64-bit unsigned int fall through // to '1 <= q + exp <= 20' } else { // if 1 <= q <= 20 // C * 10^(21-q) >= 5 is true because C >= 1 and 10^(21-q) >= 10 // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q <= 19) { // C * 10^(21-q) >= 0x9fffffffffffffffb __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 20) { // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff C.w[0] = C1.w[0] + C1.w[0]; C.w[1] = C1.w[1] + C1.w[1]; if (C.w[0] < C1.w[0]) C.w[1]++; if (C.w[1] > 0x01 || (C.w[1] == 0x01 && C.w[0] >= 0xffffffffffffffffull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else if (q == 21) { // C >= 0x9fffffffffffffffb if (C1.w[1] > 0x09 || (C1.w[1] == 0x09 && C1.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13 // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits C.w[1] = 0x09; C.w[0] = 0xfffffffffffffffbull; __mul_128x64_to_128 (C, ten2k64[q - 21], C); if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 < n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (ind <= 18) { // 0 <= ind <= 18 if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x8000000000000000ull; // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } else { // 19 <= ind <= 33 if ((C1.w[1] < midpoint128[ind - 19].w[1]) || ((C1.w[1] == midpoint128[ind - 19].w[1]) && (C1.w[0] < midpoint128[ind - 19].w[0]))) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x00000001; // return +1 } else { res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits tmp64 = C1.w[0]; if (ind <= 19) { C1.w[0] = C1.w[0] + midpoint64[ind - 1]; } else { C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0]; C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1]; } if (C1.w[0] < tmp64) C1.w[1]++; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 33 // kx = 10^(-x) = ten2mk128[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 118 bits __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]); if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[1] = P256.w[3]; Cstar.w[0] = P256.w[2]; fstar.w[3] = 0; fstar.w[2] = P256.w[2] & maskhigh128[ind - 1]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } else { // 22 <= ind - 1 <= 33 Cstar.w[1] = 0; Cstar.w[0] = P256.w[3]; fstar.w[3] = P256.w[3] & maskhigh128[ind - 1]; fstar.w[2] = P256.w[2]; fstar.w[1] = P256.w[1]; fstar.w[0] = P256.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g. // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-128 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 102 if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21 Cstar.w[0] = (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift)); // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift); } else { // 22 <= ind - 1 <= 33 Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38 } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2 if (tmp64 > ten2mk128trunc[ind - 1].w[1] || (tmp64 == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else if (ind - 1 <= 21) { // if 3 <= ind <= 21 if (fstar.w[3] > 0x0 || (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) || (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] && (fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[2] - onehalf128[ind - 1]; tmp64A = fstar.w[3]; if (tmp64 > fstar.w[2]) tmp64A--; if (tmp64A || tmp64 || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 22 <= ind <= 33 if (fstar.w[3] > onehalf128[ind - 1] || (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[3] - onehalf128[ind - 1]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1] || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero res = Cstar.w[0]; // the result is positive } else if (exp == 0) { // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0 // res = C (exact) res = C1.w[0]; } else { // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20 // res = C * 10^exp (exact) - must fit in 64 bits res = C1.w[0] * ten2k64[exp]; } } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid128_to_uint8.c000066400000000000000000000050571504475242000172650ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffffff00 #define INVALID_RESULT 0x80 BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_rnint, UINT128, x, bid128_to_uint32_rnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xrnint, UINT128, x, bid128_to_uint32_xrnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_rninta, UINT128, x, bid128_to_uint32_rninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xrninta, UINT128, x, bid128_to_uint32_xrninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_int, UINT128, x, bid128_to_uint32_int, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xint, UINT128, x, bid128_to_uint32_xint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_floor, UINT128, x, bid128_to_uint32_floor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_ceil, UINT128, x, bid128_to_uint32_ceil, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xfloor, UINT128, x, bid128_to_uint32_xfloor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xceil, UINT128, x, bid128_to_uint32_xceil, unsigned int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid32_to_bid128.c000066400000000000000000000167631504475242000171270ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" /* * Takes a BID32 as input and converts it to a BID128 and returns it. */ TYPE0_FUNCTION_ARGTYPE1_NORND (UINT128, bid32_to_bid128, UINT32, x) UINT128 new_coeff, res; UINT32 sign_x; int exponent_x; UINT32 coefficient_x; if (!unpack_BID32 (&sign_x, &exponent_x, &coefficient_x, x)) { if (((x) & 0x78000000) == 0x78000000) { #ifdef SET_STATUS_FLAGS if (((x) & 0x7e000000) == 0x7e000000) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[0] = (coefficient_x & 0x000fffff); __mul_64x128_low (res, res.w[0], power10_table_128[27]); res.w[1] |= ((((UINT64) coefficient_x) << 32) & 0xfc00000000000000ull); BID_RETURN (res); } } new_coeff.w[0] = coefficient_x; new_coeff.w[1] = 0; get_BID128_very_fast (&res, ((UINT64) sign_x) << 32, exponent_x + DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32, new_coeff); BID_RETURN (res); } // convert_bid32_to_bid128 /* * Takes a BID128 as input and converts it to a BID32 and returns it. */ #if DECIMAL_CALL_BY_REFERENCE void bid128_to_bid32 (UINT32 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else UINT32 bid128_to_bid32 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CX, T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1, CX1; UINT64 sign_x, carry, cy; SINT64 D; UINT32 res; int_float f64, fx; int exponent_x, extra_digits, amount, bin_expon_cx, uf_check = 0; unsigned rmode, status; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif BID_SWAP128 (x); // unpack arguments, check for NaN or Infinity or 0 if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { if (((x.w[1]) & 0x7800000000000000ull) == 0x7800000000000000ull) { Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull); Tmp.w[0] = CX.w[0]; TP128 = reciprocals10_128[27]; __mul_128x128_full (Qh, Ql, Tmp, TP128); amount = recip_scale[27] - 64; res = ((CX.w[1] >> 32) & 0xfc000000) | (Qh.w[1] >> amount); #ifdef SET_STATUS_FLAGS if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN_VAL (res); } // x is 0 exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS_32; if (exponent_x < 0) exponent_x = 0; if (exponent_x > DECIMAL_MAX_EXPON_32) exponent_x = DECIMAL_MAX_EXPON_32; res = (sign_x >> 32) | (exponent_x << 23); BID_RETURN_VAL (res); } if (CX.w[1] || (CX.w[0] >= 10000000)) { // find number of digits in coefficient // 2^64 f64.i = 0x5f800000; // fx ~ CX fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f; extra_digits = estimate_decimal_digits[bin_expon_cx] - 7; // scale = 38-estimate_decimal_digits[bin_expon_cx]; D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1]; if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) extra_digits++; exponent_x += extra_digits; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif if (exponent_x < DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32) { uf_check = 1; if (-extra_digits + exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS_32 + 35 >= 0) { if (exponent_x == DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32 - 1) { T128 = round_const_table_128[rmode][extra_digits]; __add_carry_out (CX1.w[0], carry, T128.w[0], CX.w[0]); CX1.w[1] = CX.w[1] + T128.w[1] + carry; if (__unsigned_compare_ge_128 (CX1, power10_table_128[extra_digits + 7])) uf_check = 0; } extra_digits = extra_digits + DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32 - exponent_x; exponent_x = DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32; } else rmode = ROUNDING_TO_ZERO; } T128 = round_const_table_128[rmode][extra_digits]; __add_carry_out (CX.w[0], carry, T128.w[0], CX.w[0]); CX.w[1] = CX.w[1] + T128.w[1] + carry; TP128 = reciprocals10_128[extra_digits]; __mul_128x128_full (Qh, Ql, CX, TP128); amount = recip_scale[extra_digits]; if (amount >= 64) { CX.w[0] = Qh.w[1] >> (amount - 64); CX.w[1] = 0; } else { __shr_128 (CX, Qh, amount); } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (!(rnd_mode)) #endif if (CX.w[0] & 1) { // check whether fractional part of initial_P/10^ed1 is exactly .5 // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); if (!Qh1.w[1] && !Qh1.w[0] && (Ql.w[1] < reciprocals10_128[extra_digits].w[1] || (Ql.w[1] == reciprocals10_128[extra_digits].w[1] && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) { CX.w[0]--; } } #endif { status = INEXACT_EXCEPTION; // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[extra_digits].w[1] || (Ql.w[1] == reciprocals10_128[extra_digits].w[1] && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if ((!Qh1.w[1]) && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[extra_digits].w[1] || (Ql.w[1] == reciprocals10_128[extra_digits].w[1] && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], cy, Ql.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Ql.w[1], reciprocals10_128[extra_digits].w[1], cy); __shr_128_long (Qh, Qh1, (128 - amount)); Tmp.w[0] = 1; Tmp.w[1] = 0; __shl_128_long (Tmp1, Tmp, amount); Qh.w[0] += carry; if (Qh.w[0] < carry) Qh.w[1]++; if (__unsigned_compare_ge_128 (Qh, Tmp1)) status = EXACT_STATUS; } if (status != EXACT_STATUS) { if (uf_check) { status |= UNDERFLOW_EXCEPTION; } #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, status); #endif } } } res = get_BID32 ((UINT32) (sign_x >> 32), exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS_32, CX.w[0], rnd_mode, pfpsf); BID_RETURN_VAL (res); } libdfp-1.0.17/libbid/bid32_to_bid64.c000066400000000000000000000134601504475242000170350ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /* * Takes a BID32 as input and converts it to a BID64 and returns it. */ TYPE0_FUNCTION_ARGTYPE1_NORND (UINT64, bid32_to_bid64, UINT32, x) UINT64 res; UINT32 sign_x; int exponent_x; UINT32 coefficient_x; if (!unpack_BID32 (&sign_x, &exponent_x, &coefficient_x, x)) { // Inf, NaN, 0 if (((x) & 0x78000000) == 0x78000000) { if (((x) & 0x7e000000) == 0x7e000000) { // sNaN #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } res = (coefficient_x & 0x000fffff); res *= 1000000000; res |= ((((UINT64) coefficient_x) << 32) & 0xfc00000000000000ull); BID_RETURN (res); } } res = very_fast_get_BID64_small_mantissa (((UINT64) sign_x) << 32, exponent_x + DECIMAL_EXPONENT_BIAS - DECIMAL_EXPONENT_BIAS_32, (UINT64) coefficient_x); BID_RETURN (res); } // convert_bid32_to_bid64 /* * Takes a BID64 as input and converts it to a BID32 and returns it. */ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_bid32 (UINT32 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x; #else UINT32 bid64_to_bid32 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 Q; UINT64 sign_x, coefficient_x, remainder_h, carry, Stemp; UINT32 res; int_float tempx; int exponent_x, bin_expon_cx, extra_digits, rmode = 0, amount; unsigned status = 0; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; #endif // unpack arguments, check for NaN or Infinity, 0 if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) { res = (coefficient_x & 0x0003ffffffffffffull); res /= 1000000000ull; res |= ((coefficient_x >> 32) & 0xfc000000); #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (res); } exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_32; if (exponent_x < 0) exponent_x = 0; if (exponent_x > DECIMAL_MAX_EXPON_32) exponent_x = DECIMAL_MAX_EXPON_32; res = (sign_x >> 32) | (exponent_x << 23); BID_RETURN (res); } exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_32; // check number of digits if (coefficient_x >= 10000000) { tempx.d = (float) coefficient_x; bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f; extra_digits = estimate_decimal_digits[bin_expon_cx] - 7; // add test for range if (coefficient_x >= power10_index_binexp[bin_expon_cx]) extra_digits++; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif exponent_x += extra_digits; if ((exponent_x < 0) && (exponent_x + MAX_FORMAT_DIGITS_32 >= 0)) { status = UNDERFLOW_EXCEPTION; if (exponent_x == -1) if (coefficient_x + round_const_table[rmode][extra_digits] >= power10_table_128[extra_digits + 7].w[0]) status = 0; extra_digits -= exponent_x; exponent_x = 0; } coefficient_x += round_const_table[rmode][extra_digits]; __mul_64x64_to_128 (Q, coefficient_x, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; coefficient_x = Q.w[1] >> amount; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (coefficient_x & 1) { // check whether fractional part of initial_P/10^extra_digits // is exactly .5 // get remainder remainder_h = Q.w[1] << (64 - amount); if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits])) coefficient_x--; } #endif #ifdef SET_STATUS_FLAGS { status |= INEXACT_EXCEPTION; // get remainder remainder_h = Q.w[1] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp, carry, Q.w[0], reciprocals10_64[extra_digits]); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } if (status != EXACT_STATUS) __set_status_flags (pfpsf, status); } #endif } res = get_BID32 ((UINT32) (sign_x >> 32), exponent_x, coefficient_x, rnd_mode, pfpsf); BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_add.c000066400000000000000000000405511504475242000161610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * BID64 add ***************************************************************************** * * Algorithm description: * * if(exponent_a < exponent_b) * switch a, b * diff_expon = exponent_a - exponent_b * if(diff_expon > 16) * return normalize(a) * if(coefficient_a*10^diff_expon guaranteed below 2^62) * S = sign_a*coefficient_a*10^diff_expon + sign_b*coefficient_b * if(|S|<10^16) * return get_BID64(sign(S),exponent_b,|S|) * else * determine number of extra digits in S (1, 2, or 3) * return rounded result * else // large exponent difference * if(number_digits(coefficient_a*10^diff_expon) +/- 10^16) * guaranteed the same as * number_digits(coefficient_a*10^diff_expon) ) * S = normalize(coefficient_a + (sign_a^sign_b)*10^(16-diff_expon)) * corr = 10^16 + (sign_a^sign_b)*coefficient_b * corr*10^exponent_b is rounded so it aligns with S*10^exponent_S * return get_BID64(sign_a,exponent(S),S+rounded(corr)) * else * add sign_a*coefficient_a*10^diff_expon, sign_b*coefficient_b * in 128-bit integer arithmetic, then round to 16 decimal digits * * ****************************************************************************/ #include "bid_internal.h" #if DECIMAL_CALL_BY_REFERENCE void bid64_add (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); #else UINT64 bid64_add (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); #endif #if DECIMAL_CALL_BY_REFERENCE void bid64_sub (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 y = *py; #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif // check if y is not NaN if (((y & NAN_MASK64) != NAN_MASK64)) y ^= 0x8000000000000000ull; bid64_add (pres, px, &y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); } #else UINT64 bid64_sub (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { // check if y is not NaN if (((y & NAN_MASK64) != NAN_MASK64)) y ^= 0x8000000000000000ull; return bid64_add (x, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); } #endif #if DECIMAL_CALL_BY_REFERENCE void bid64_add (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x, y; #else UINT64 bid64_add (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CA, CT, CT_new; UINT64 sign_x, sign_y, coefficient_x, coefficient_y, C64_new; UINT64 valid_x, valid_y; UINT64 res; UINT64 sign_a, sign_b, coefficient_a, coefficient_b, sign_s, sign_ab, rem_a; UINT64 saved_ca, saved_cb, C0_64, C64, remainder_h, T1, carry, tmp; int_double tempx; int exponent_x, exponent_y, exponent_a, exponent_b, diff_dec_expon; int bin_expon_ca, extra_digits, amount, scale_k, scale_ca; unsigned rmode, status; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; y = *py; #endif valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y); // unpack arguments, check for NaN or Infinity if (!valid_x) { // x is Inf. or NaN // test if x is NaN if ((x & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if (((x & SNAN_MASK64) == SNAN_MASK64) // sNaN || ((y & SNAN_MASK64) == SNAN_MASK64)) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = coefficient_x & QUIET_MASK64; BID_RETURN (res); } // x is Infinity? if ((x & INFINITY_MASK64) == INFINITY_MASK64) { // check if y is Inf if (((y & NAN_MASK64) == INFINITY_MASK64)) { if (sign_x == (y & 0x8000000000000000ull)) { res = coefficient_x; BID_RETURN (res); } // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = NAN_MASK64; BID_RETURN (res); } } // check if y is NaN if (((y & NAN_MASK64) == NAN_MASK64)) { res = coefficient_y & QUIET_MASK64; #ifdef SET_STATUS_FLAGS if (((y & SNAN_MASK64) == SNAN_MASK64)) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (res); } // otherwise return +/-Inf { res = coefficient_x; BID_RETURN (res); } } // x is 0 { if (((y & INFINITY_MASK64) != INFINITY_MASK64) && coefficient_y) { if (exponent_y <= exponent_x) { res = y; BID_RETURN (res); } } } } if (!valid_y) { // y is Inf. or NaN? if (((y & INFINITY_MASK64) == INFINITY_MASK64)) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = coefficient_y & QUIET_MASK64; BID_RETURN (res); } // y is 0 if (!coefficient_x) { // x==0 if (exponent_x <= exponent_y) res = ((UINT64) exponent_x) << 53; else res = ((UINT64) exponent_y) << 53; if (sign_x == sign_y) res |= sign_x; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rnd_mode == ROUNDING_DOWN && sign_x != sign_y) res |= 0x8000000000000000ull; #endif #endif BID_RETURN (res); } else if (exponent_y >= exponent_x) { res = x; BID_RETURN (res); } } // sort arguments by exponent if (exponent_x < exponent_y) { sign_a = sign_y; exponent_a = exponent_y; coefficient_a = coefficient_y; sign_b = sign_x; exponent_b = exponent_x; coefficient_b = coefficient_x; } else { sign_a = sign_x; exponent_a = exponent_x; coefficient_a = coefficient_x; sign_b = sign_y; exponent_b = exponent_y; coefficient_b = coefficient_y; } // exponent difference diff_dec_expon = exponent_a - exponent_b; /* get binary coefficients of x and y */ //--- get number of bits in the coefficients of x and y --- // version 2 (original) tempx.d = (double) coefficient_a; bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; if (diff_dec_expon > MAX_FORMAT_DIGITS) { // normalize a to a 16-digit coefficient scale_ca = estimate_decimal_digits[bin_expon_ca]; if (coefficient_a >= power10_table_128[scale_ca].w[0]) scale_ca++; scale_k = 16 - scale_ca; coefficient_a *= power10_table_128[scale_k].w[0]; diff_dec_expon -= scale_k; exponent_a -= scale_k; /* get binary coefficients of x and y */ //--- get number of bits in the coefficients of x and y --- tempx.d = (double) coefficient_a; bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; if (diff_dec_expon > MAX_FORMAT_DIGITS) { #ifdef SET_STATUS_FLAGS if (coefficient_b) { __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (((rnd_mode) & 3) && coefficient_b) // not ROUNDING_TO_NEAREST { switch (rnd_mode) { case ROUNDING_DOWN: if (sign_b) { coefficient_a -= ((((SINT64) sign_a) >> 63) | 1); if (coefficient_a < 1000000000000000ull) { exponent_a--; coefficient_a = 9999999999999999ull; } else if (coefficient_a >= 10000000000000000ull) { exponent_a++; coefficient_a = 1000000000000000ull; } } break; case ROUNDING_UP: if (!sign_b) { coefficient_a += ((((SINT64) sign_a) >> 63) | 1); if (coefficient_a < 1000000000000000ull) { exponent_a--; coefficient_a = 9999999999999999ull; } else if (coefficient_a >= 10000000000000000ull) { exponent_a++; coefficient_a = 1000000000000000ull; } } break; default: // RZ if (sign_a != sign_b) { coefficient_a--; if (coefficient_a < 1000000000000000ull) { exponent_a--; coefficient_a = 9999999999999999ull; } } break; } } else #endif #endif // check special case here if ((coefficient_a == 1000000000000000ull) && (diff_dec_expon == MAX_FORMAT_DIGITS + 1) && (sign_a ^ sign_b) && (coefficient_b > 5000000000000000ull)) { coefficient_a = 9999999999999999ull; exponent_a--; } res = fast_get_BID64_check_OF (sign_a, exponent_a, coefficient_a, rnd_mode, pfpsf); BID_RETURN (res); } } // test whether coefficient_a*10^(exponent_a-exponent_b) may exceed 2^62 if (bin_expon_ca + estimate_bin_expon[diff_dec_expon] < 60) { // coefficient_a*10^(exponent_a-exponent_b)<2^63 // multiply by 10^(exponent_a-exponent_b) coefficient_a *= power10_table_128[diff_dec_expon].w[0]; // sign mask sign_b = ((SINT64) sign_b) >> 63; // apply sign to coeff. of b coefficient_b = (coefficient_b + sign_b) ^ sign_b; // apply sign to coefficient a sign_a = ((SINT64) sign_a) >> 63; coefficient_a = (coefficient_a + sign_a) ^ sign_a; coefficient_a += coefficient_b; // get sign sign_s = ((SINT64) coefficient_a) >> 63; coefficient_a = (coefficient_a + sign_s) ^ sign_s; sign_s &= 0x8000000000000000ull; // coefficient_a < 10^16 ? if (coefficient_a < power10_table_128[MAX_FORMAT_DIGITS].w[0]) { #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rnd_mode == ROUNDING_DOWN && (!coefficient_a) && sign_a != sign_b) sign_s = 0x8000000000000000ull; #endif #endif res = very_fast_get_BID64 (sign_s, exponent_b, coefficient_a); BID_RETURN (res); } // otherwise rounding is necessary // already know coefficient_a<10^19 // coefficient_a < 10^17 ? if (coefficient_a < power10_table_128[17].w[0]) extra_digits = 1; else if (coefficient_a < power10_table_128[18].w[0]) extra_digits = 2; else extra_digits = 3; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_s && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif coefficient_a += round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT, coefficient_a, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C64 = CT.w[1] >> amount; } else { // coefficient_a*10^(exponent_a-exponent_b) is large sign_s = sign_a; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_s && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif // check whether we can take faster path scale_ca = estimate_decimal_digits[bin_expon_ca]; sign_ab = sign_a ^ sign_b; sign_ab = ((SINT64) sign_ab) >> 63; // T1 = 10^(16-diff_dec_expon) T1 = power10_table_128[16 - diff_dec_expon].w[0]; // get number of digits in coefficient_a if (coefficient_a >= power10_table_128[scale_ca].w[0]) { scale_ca++; } scale_k = 16 - scale_ca; // addition saved_ca = coefficient_a - T1; coefficient_a = (SINT64) saved_ca *(SINT64) power10_table_128[scale_k].w[0]; extra_digits = diff_dec_expon - scale_k; // apply sign saved_cb = (coefficient_b + sign_ab) ^ sign_ab; // add 10^16 and rounding constant coefficient_b = saved_cb + 10000000000000000ull + round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT, coefficient_b, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C0_64 = CT.w[1] >> amount; // result coefficient C64 = C0_64 + coefficient_a; // filter out difficult (corner) cases // this test ensures the number of digits in coefficient_a does not change // after adding (the appropriately scaled and rounded) coefficient_b if ((UINT64) (C64 - 1000000000000000ull - 1) > 9000000000000000ull - 2) { if (C64 >= 10000000000000000ull) { // result has more than 16 digits if (!scale_k) { // must divide coeff_a by 10 saved_ca = saved_ca + T1; __mul_64x64_to_128 (CA, saved_ca, 0x3333333333333334ull); //reciprocals10_64[1]); coefficient_a = CA.w[1] >> 1; rem_a = saved_ca - (coefficient_a << 3) - (coefficient_a << 1); coefficient_a = coefficient_a - T1; saved_cb += rem_a * power10_table_128[diff_dec_expon].w[0]; } else coefficient_a = (SINT64) (saved_ca - T1 - (T1 << 3)) * (SINT64) power10_table_128[scale_k - 1].w[0]; extra_digits++; coefficient_b = saved_cb + 100000000000000000ull + round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT, coefficient_b, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C0_64 = CT.w[1] >> amount; // result coefficient C64 = C0_64 + coefficient_a; } else if (C64 <= 1000000000000000ull) { // less than 16 digits in result coefficient_a = (SINT64) saved_ca *(SINT64) power10_table_128[scale_k + 1].w[0]; //extra_digits --; exponent_b--; coefficient_b = (saved_cb << 3) + (saved_cb << 1) + 100000000000000000ull + round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT_new, coefficient_b, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C0_64 = CT_new.w[1] >> amount; // result coefficient C64_new = C0_64 + coefficient_a; if (C64_new < 10000000000000000ull) { C64 = C64_new; #ifdef SET_STATUS_FLAGS CT = CT_new; #endif } else exponent_b++; } } } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits is // exactly .5 // this is the same as fractional part of // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero // get remainder remainder_h = CT.w[1] << (64 - amount); // test whether fractional part is 0 if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) { C64--; } } #endif #ifdef SET_STATUS_FLAGS status = INEXACT_EXCEPTION; // get remainder remainder_h = CT.w[1] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if ((remainder_h == 0x8000000000000000ull) && (CT.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; //if(!C64 && rmode==ROUNDING_DOWN) sign_s=sign_y; break; default: // round up __add_carry_out (tmp, carry, CT.w[0], reciprocals10_64[extra_digits]); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; break; } __set_status_flags (pfpsf, status); #endif res = fast_get_BID64_check_OF (sign_s, exponent_b + extra_digits, C64, rnd_mode, pfpsf); BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_compare.c000066400000000000000000002723011504475242000170570ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" static const UINT64 mult_factor[16] = { 1ull, 10ull, 100ull, 1000ull, 10000ull, 100000ull, 1000000ull, 10000000ull, 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull, 1000000000000ull, 10000000000000ull, 100000000000000ull, 1000000000000000ull }; #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y, exp_t; UINT64 sig_x, sig_y, sig_t; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y, lcv; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equivalent. if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if (((x & MASK_INF) == MASK_INF) && ((y & MASK_INF) == MASK_INF)) { res = (((x ^ y) & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // ONE INFINITY (CASE3') if (((x & MASK_INF) == MASK_INF) || ((y & MASK_INF) == MASK_INF)) { res = 0; BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) { res = 0; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ => not equal : return 0 if ((x ^ y) & MASK_SIGN) { res = 0; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) if (exp_x > exp_y) { // to simplify the loop below, SWAP (exp_x, exp_y, exp_t); // put the larger exp in y, SWAP (sig_x, sig_y, sig_t); // and the smaller exp in x } if (exp_y - exp_x > 15) { res = 0; // difference cannot be greater than 10^15 BID_RETURN (res); } for (lcv = 0; lcv < (exp_y - exp_x); lcv++) { // recalculate y's significand upwards sig_y = sig_y * 10; if (sig_y > 9999999999999999ull) { res = 0; BID_RETURN (res); } } res = (sig_y == sig_x); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, rather than equal : // return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } else { // x is pos infinity, it is greater, unless y is positive // infinity => return y!=pos_infinity res = (((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: //(+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater //(ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore ignore the // exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } else if (x_is_zero) { // is x is zero, it is greater if Y is negative res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else if (y_is_zero) { // is y is zero, X is greater if it is positive res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x > sig_y && exp_x > exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x < exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { // difference cannot be greater than 10^15 if (x & MASK_SIGN) // if both are negative res = 0; else // if both are positive res = 1; BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { if (x & MASK_SIGN) // if both are negative res = 1; else // if both are positive res = 0; BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if postitive, return whichever significand is larger (converse if neg.) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } res = (((sig_n_prime.w[1] > 0) || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } res = (((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_greater_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_greater_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 1 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) { // x is -inf, so it is less than y unless y is -inf res = (((y & MASK_INF) == MASK_INF) && (y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else { // x is pos_inf, no way for it to be less than y res = 1; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, they are equal res = 1; BID_RETURN (res); } else if (x_is_zero) { // if x is zero, it is lessthan if Y is positive res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else if (y_is_zero) { // if y is zero, X is less if it is negative res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); // difference cannot be greater than 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_greater_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_greater_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, rather than equal : // return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } else { // x is pos infinity, it is greater, unless y is positive infinity => // return y!=pos_infinity res = (((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } else if (x_is_zero) { // is x is zero, it is greater if Y is negative res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else if (y_is_zero) { // is y is zero, X is greater if it is positive res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { // difference cannot be greater than 10^15 res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } res = (((sig_n_prime.w[1] > 0) || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if postitive, return whichever significand is larger (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } res = (((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) { // x is -inf, so it is less than y unless y is -inf res = (((y & MASK_INF) != MASK_INF) || (y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else { // x is pos_inf, no way for it to be less than y res = 0; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, they are equal res = 0; BID_RETURN (res); } else if (x_is_zero) { // if x is zero, it is lessthan if Y is positive res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else if (y_is_zero) { // if y is zero, X is less if it is negative res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); // difference cannot be greater than 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_less_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_less_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, rather than equal : // return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (LESSEQUAL). if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { if (((x & MASK_SIGN) == MASK_SIGN)) { // if x is neg infinity, it must be lessthan or equal to y return 1 res = 1; BID_RETURN (res); } else { // x is pos infinity, it is greater, unless y is positive infinity => // return y==pos_infinity res = !(((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 1 // if y is negative infinity, then x is greater, return 0 res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, they are equal -> return 1 res = 1; BID_RETURN (res); } else if (x_is_zero) { // if x is zero, it is lessthan if Y is positive res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else if (y_is_zero) { // if y is zero, X is less if it is negative res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); // difference cannot be greater than 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_less_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_less_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) { // x is -inf, so it is less than y unless y is -inf res = (((y & MASK_INF) != MASK_INF) || (y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else { // x is pos_inf, no way for it to be less than y res = 0; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, they are equal res = 0; BID_RETURN (res); } else if (x_is_zero) { // if x is zero, it is lessthan if Y is positive res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else if (y_is_zero) { // if y is zero, X is less if it is negative res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); // difference cannot be greater than 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_not_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_not_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y, exp_t; UINT64 sig_x, sig_y, sig_t; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y, lcv; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 1 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equivalent. if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if (((x & MASK_INF) == MASK_INF) && ((y & MASK_INF) == MASK_INF)) { res = (((x ^ y) & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // ONE INFINITY (CASE3') if (((x & MASK_INF) == MASK_INF) || ((y & MASK_INF) == MASK_INF)) { res = 1; BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) { res = 1; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ => not equal : return 1 if ((x ^ y) & MASK_SIGN) { res = 1; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) if (exp_x > exp_y) { // to simplify the loop below, SWAP (exp_x, exp_y, exp_t); // put the larger exp in y, SWAP (sig_x, sig_y, sig_t); // and the smaller exp in x } if (exp_y - exp_x > 15) { res = 1; BID_RETURN (res); } // difference cannot be greater than 10^16 for (lcv = 0; lcv < (exp_y - exp_x); lcv++) { // recalculate y's significand upwards sig_y = sig_y * 10; if (sig_y > 9999999999999999ull) { res = 1; BID_RETURN (res); } } { res = sig_y != sig_x; BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_not_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_not_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (LESSEQUAL). if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, it must be lessthan or equal to y return 1 if (((x & MASK_SIGN) == MASK_SIGN)) { res = 1; BID_RETURN (res); } // x is pos infinity, it is greater, unless y is positive // infinity => return y==pos_infinity else { res = !(((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 1 // if y is negative infinity, then x is greater, return 0 { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither // number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal -> return 1 if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_not_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_not_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 1 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y & MASK_INF) == MASK_INF) && (y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 1; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither // number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_ordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_ordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; // NaN (CASE1) // if either number is NAN, the comparison is ordered, rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 0; BID_RETURN (res); } else { res = 1; BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_quiet_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_quiet_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN } res = 1; BID_RETURN (res); } else { res = 0; BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } // x is pos infinity, it is greater, // unless y is positive infinity => return y!=pos_infinity else { res = (((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } { res = (((sig_n_prime.w[1] > 0) || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } { res = (((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_greater_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_greater_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 1 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y & MASK_INF) == MASK_INF) && (y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 1; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_greater_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_greater_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return 0 if (((x & MASK_SIGN) == MASK_SIGN)) { res = 0; BID_RETURN (res); } // x is pos infinity, it is greater, // unless y is positive infinity => return y!=pos_infinity else { res = (((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 0 // if y is negative infinity, then x is greater, return 1 { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, neither is greater => return NOTGREATERTHAN if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // is x is zero, it is greater if Y is negative else if (x_is_zero) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // is y is zero, X is greater if it is positive else if (y_is_zero) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } { res = (((sig_n_prime.w[1] > 0) || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } { res = (((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y & MASK_INF) != MASK_INF) || (y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 0; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_less_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_less_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 0; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (LESSEQUAL). if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, it must be lessthan or equal to y return 1 if (((x & MASK_SIGN) == MASK_SIGN)) { res = 1; BID_RETURN (res); } // x is pos infinity, it is greater, // unless y is positive infinity => return y==pos_infinity else { res = !(((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 1 // if y is negative infinity, then x is greater, return 0 { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal -> return 1 if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_less_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_less_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 0; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y & MASK_INF) != MASK_INF) || (y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 0; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal if (x_is_zero && y_is_zero) { res = 0; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 0; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 0; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_not_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_not_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered, // rather than equal : return 0 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (LESSEQUAL). if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, it must be lessthan or equal to y return 1 if (((x & MASK_SIGN) == MASK_SIGN)) { res = 1; BID_RETURN (res); } // x is pos infinity, it is greater, // unless y is positive infinity => return y==pos_infinity else { res = !(((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return 1 // if y is negative infinity, then x is greater, return 0 { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal -> return 1 if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 1 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)); BID_RETURN (res); } } #if DECIMAL_CALL_BY_REFERENCE void bid64_signaling_not_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_signaling_not_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y; // NaN (CASE1) // if either number is NAN, the comparison is unordered : return 1 if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) } if ((x & MASK_SIGN) == MASK_SIGN) // x is -inf, so it is less than y unless y is -inf { res = (((y & MASK_INF) == MASK_INF) && (y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else // x is pos_inf, no way for it to be less than y { res = 1; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, xy { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull) { non_canon_x = 1; } else { non_canon_x = 0; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); non_canon_x = 0; } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull) { non_canon_y = 1; } else { non_canon_y = 0; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); non_canon_y = 0; } // ZERO (CASE4) // some properties: // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // therefore ignore the exponent field // (Any non-canonical # is considered 0) if (non_canon_x || sig_x == 0) { x_is_zero = 1; } if (non_canon_y || sig_y == 0) { y_is_zero = 1; } // if both numbers are zero, they are equal if (x_is_zero && y_is_zero) { res = 1; BID_RETURN (res); } // if x is zero, it is lessthan if Y is positive else if (x_is_zero) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if y is zero, X is less if it is negative else if (y_is_zero) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is less than if y is positive if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // difference cannot be greater than 10^15 // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = 1; BID_RETURN (res); } // if postitive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // return 0 if values are equal if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = 1; BID_RETURN (res); } // if positive, return whichever significand abs is smaller // (converse if negative) { res = (((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) != MASK_SIGN)); BID_RETURN (res); } } libdfp-1.0.17/libbid/bid64_div.c000066400000000000000000001344201504475242000162120ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * BID64 divide ***************************************************************************** * * Algorithm description: * * if(coefficient_x=B, 1 otherwise * Q = 0 * else * get Q=(int)(coefficient_x/coefficient_y) * (based on double precision divide) * check for exact divide case * Let R = coefficient_x - Q*coefficient_y * Let m=16-number_digits(Q) * CA=R*10^m, Q=Q*10^m * B = coefficient_y * endif * if (CA<2^64) * Q += CA/B (64-bit unsigned divide) * else * get final Q using double precision divide, followed by 3 integer * iterations * if exact result, eliminate trailing zeros * check for underflow * round coefficient to nearest * ****************************************************************************/ #include "bid_internal.h" #include "bid_div_macros.h" #ifdef UNCHANGED_BINARY_STATUS_FLAGS #include #define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT #endif extern UINT32 convert_table[5][128][2]; extern SINT8 factors[][2]; extern UINT8 packed_10000_zeros[]; #if DECIMAL_CALL_BY_REFERENCE void bid64_div (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x, y; #else UINT64 bid64_div (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CA, CT; UINT64 sign_x, sign_y, coefficient_x, coefficient_y, A, B, QX, PD; UINT64 A2, Q, Q2, B2, B4, B5, R, T, DU, res; UINT64 valid_x, valid_y; SINT64 D; int_double t_scale, tempq, temp_b; int_float tempx, tempy; double da, db, dq, da_h, da_l; int exponent_x, exponent_y, bin_expon_cx; int diff_expon, ed1, ed2, bin_index; int rmode, amount; int nzeros, i, j, k, d5; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; y = *py; #endif valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y); // unpack arguments, check for NaN or Infinity if (!valid_x) { // x is Inf. or NaN #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // test if x is NaN if ((x & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (coefficient_x & QUIET_MASK64); } // x is Infinity? if ((x & INFINITY_MASK64) == INFINITY_MASK64) { // check if y is Inf or NaN if ((y & INFINITY_MASK64) == INFINITY_MASK64) { // y==Inf, return NaN if ((y & NAN_MASK64) == INFINITY_MASK64) { // Inf/Inf #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (NAN_MASK64); } } else { // otherwise return +/-Inf BID_RETURN (((x ^ y) & 0x8000000000000000ull) | INFINITY_MASK64); } } // x==0 if (((y & INFINITY_MASK64) != INFINITY_MASK64) && !(coefficient_y)) { // y==0 , return NaN #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (NAN_MASK64); } if (((y & INFINITY_MASK64) != INFINITY_MASK64)) { if ((y & SPECIAL_ENCODING_MASK64) == SPECIAL_ENCODING_MASK64) exponent_y = ((UINT32) (y >> 51)) & 0x3ff; else exponent_y = ((UINT32) (y >> 53)) & 0x3ff; sign_y = y & 0x8000000000000000ull; exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS; if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53)); } } if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (coefficient_y & QUIET_MASK64); } // y is Infinity? if ((y & INFINITY_MASK64) == INFINITY_MASK64) { // return +/-0 BID_RETURN (((x ^ y) & 0x8000000000000000ull)); } // y is 0 #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif BID_RETURN ((sign_x ^ sign_y) | INFINITY_MASK64); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS; if (coefficient_x < coefficient_y) { // get number of decimal digits for c_x, c_y //--- get number of bits in the coefficients of x and y --- tempx.d = (float) coefficient_x; tempy.d = (float) coefficient_y; bin_index = (tempy.i - tempx.i) >> 23; A = coefficient_x * power10_index_binexp[bin_index]; B = coefficient_y; temp_b.d = (double) B; // compare A, B DU = (A - B) >> 63; ed1 = 15 + (int) DU; ed2 = estimate_decimal_digits[bin_index] + ed1; T = power10_table_128[ed1].w[0]; __mul_64x64_to_128 (CA, A, T); Q = 0; diff_expon = diff_expon - ed2; // adjust double precision db, to ensure that later A/B - (int)(da/db) > -1 if (coefficient_y < 0x0020000000000000ull) { temp_b.i += 1; db = temp_b.d; } else db = (double) (B + 2 + (B & 1)); } else { // get c_x/c_y // set last bit before conversion to DP A2 = coefficient_x | 1; da = (double) A2; db = (double) coefficient_y; tempq.d = da / db; Q = (UINT64) tempq.d; R = coefficient_x - coefficient_y * Q; // will use to get number of dec. digits of Q bin_expon_cx = (tempq.i >> 52) - 0x3ff; // R<0 ? D = ((SINT64) R) >> 63; Q += D; R += (coefficient_y & D); // exact result ? if (((SINT64) R) <= 0) { // can have R==-1 for coeff_y==1 res = get_BID64 (sign_x ^ sign_y, diff_expon, (Q + R), rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } // get decimal digits of Q DU = power10_index_binexp[bin_expon_cx] - Q - 1; DU >>= 63; ed2 = 16 - estimate_decimal_digits[bin_expon_cx] - (int) DU; T = power10_table_128[ed2].w[0]; __mul_64x64_to_128 (CA, R, T); B = coefficient_y; Q *= power10_table_128[ed2].w[0]; diff_expon -= ed2; } if (!CA.w[1]) { Q2 = CA.w[0] / B; B2 = B + B; B4 = B2 + B2; R = CA.w[0] - Q2 * B; Q += Q2; } else { // 2^64 t_scale.i = 0x43f0000000000000ull; // convert CA to DP da_h = CA.w[1]; da_l = CA.w[0]; da = da_h * t_scale.d + da_l; // quotient dq = da / db; Q2 = (UINT64) dq; // get w[0] remainder R = CA.w[0] - Q2 * B; // R<0 ? D = ((SINT64) R) >> 63; Q2 += D; R += (B & D); // now R<6*B // quick divide // 4*B B2 = B + B; B4 = B2 + B2; R = R - B4; // R<0 ? D = ((SINT64) R) >> 63; // restore R if negative R += (B4 & D); Q2 += ((~D) & 4); R = R - B2; // R<0 ? D = ((SINT64) R) >> 63; // restore R if negative R += (B2 & D); Q2 += ((~D) & 2); R = R - B; // R<0 ? D = ((SINT64) R) >> 63; // restore R if negative R += (B & D); Q2 += ((~D) & 1); Q += Q2; } #ifdef SET_STATUS_FLAGS if (R) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!R) #endif #endif #ifndef LEAVE_TRAILING_ZEROS { // eliminate trailing zeros // check whether CX, CY are short if ((coefficient_x <= 1024) && (coefficient_y <= 1024)) { i = (int) coefficient_y - 1; j = (int) coefficient_x - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; __mul_64x64_to_128 (CT, Q, reciprocals10_64[nzeros]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[nzeros]; Q = CT.w[1] >> amount; diff_expon += nzeros; } else { tdigit[0] = Q & 0x3ffffff; tdigit[1] = 0; QX = Q >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { __mul_64x64_to_128 (CT, Q, reciprocals10_64[nzeros]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[nzeros]; Q = CT.w[1] >> amount; } diff_expon += nzeros; } if (diff_expon >= 0) { res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, Q, rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } #endif if (diff_expon >= 0) { #ifdef IEEE_ROUND_NEAREST // round to nearest code // R*10 R += R; R = (R << 2) + R; B5 = B4 + B; // compare 10*R to 5*B R = B5 - R; // correction for (R==0 && (Q&1)) R -= (Q & 1); // R<0 ? D = ((UINT64) R) >> 63; Q += D; #else #ifdef IEEE_ROUND_NEAREST_TIES_AWAY // round to nearest code // R*10 R += R; R = (R << 2) + R; B5 = B4 + B; // compare 10*R to 5*B R = B5 - R; // correction for (R==0 && (Q&1)) R -= (Q & 1); // R<0 ? D = ((UINT64) R) >> 63; Q += D; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case 0: // round to nearest code case ROUNDING_TIES_AWAY: // R*10 R += R; R = (R << 2) + R; B5 = B4 + B; // compare 10*R to 5*B R = B5 - R; // correction for (R==0 && (Q&1)) R -= ((Q | (rmode >> 2)) & 1); // R<0 ? D = ((UINT64) R) >> 63; Q += D; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up Q++; break; } #endif #endif res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, Q, rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } else { // UF occurs #ifdef SET_STATUS_FLAGS if ((diff_expon + 16 < 0)) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif rmode = rnd_mode; res = get_BID64_UF (sign_x ^ sign_y, diff_expon, Q, R, rmode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } TYPE0_FUNCTION_ARGTYPE1_ARG128 (UINT64, bid64dq_div, UINT64, x, y) UINT256 CA4 = { {0x0ull, 0x0ull, 0x0ull, 0x0ull} }, CA4r, P256, QB256; UINT128 CX, CY, T128, CQ, CQ2, CR, CA, TP128, Qh, Tmp; UINT64 sign_x, sign_y, T, carry64, D, Q_low, QX, valid_y, PD, res; int_float fx, fy, f64; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2, digits_q, amount; int nzeros, i, j, k, d5, done = 0; unsigned rmode; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity CX.w[1] = 0; if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { #ifdef SET_STATUS_FLAGS if (((y.w[1] & SNAN_MASK64) == SNAN_MASK64) || // y is sNaN ((x & SNAN_MASK64) == SNAN_MASK64)) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // test if x is NaN if (((x) & 0x7c00000000000000ull) == 0x7c00000000000000ull) { res = CX.w[0]; BID_RETURN (res & QUIET_MASK64); } // x is Infinity? if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res = (((x) ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; BID_RETURN (res); } } // x is 0 if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) { if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res = 0x7c00000000000000ull; BID_RETURN (res); } // return 0 res = ((x) ^ y.w[1]) & 0x8000000000000000ull; exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128; if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; res |= (((UINT64) exponent_x) << 53); BID_RETURN (res); } } exponent_x += (DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS); if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif Tmp.w[1] = (CY.w[1] & 0x00003fffffffffffull); Tmp.w[0] = CY.w[0]; TP128 = reciprocals10_128[18]; __mul_128x128_high (Qh, Tmp, TP128); amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; BID_RETURN (res); } // y is 0, return +/-Inf res = (((x) ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS; if (__unsigned_compare_gt_128 (CY, CX)) { // CX < CY // 2^64 f64.i = 0x5f800000; // fx ~ CX, fy ~ CY fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0]; // expon_cy - expon_cx bin_index = (fy.i - fx.i) >> 23; if (CX.w[1]) { T = power10_index_binexp_128[bin_index].w[0]; __mul_64x128_short (CA, T, CX); } else { T128 = power10_index_binexp_128[bin_index]; __mul_64x128_short (CA, CX.w[0], T128); } ed2 = 15; if (__unsigned_compare_gt_128 (CY, CA)) ed2++; T128 = power10_table_128[ed2]; __mul_128x128_to_256 (CA4, CA, T128); ed2 += estimate_decimal_digits[bin_index]; CQ.w[0] = CQ.w[1] = 0; diff_expon = diff_expon - ed2; } else { // get CQ = CX/CY __div_128_by_128 (&CQ, &CR, CX, CY); // get number of decimal digits in CQ // 2^64 f64.i = 0x5f800000; fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0]; // binary expon. of CQ bin_expon = (fx.i - 0x3f800000) >> 23; digits_q = estimate_decimal_digits[bin_expon]; TP128.w[0] = power10_index_binexp_128[bin_expon].w[0]; TP128.w[1] = power10_index_binexp_128[bin_expon].w[1]; if (__unsigned_compare_ge_128 (CQ, TP128)) digits_q++; if (digits_q <= 16) { if (!CR.w[1] && !CR.w[0]) { res = get_BID64 (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } ed2 = 16 - digits_q; T128.w[0] = power10_table_128[ed2].w[0]; __mul_64x128_to_192 (CA4, (T128.w[0]), CR); diff_expon = diff_expon - ed2; CQ.w[0] *= T128.w[0]; } else { ed2 = digits_q - 16; diff_expon += ed2; T128 = reciprocals10_128[ed2]; __mul_128x128_to_256 (P256, CQ, T128); amount = recip_scale[ed2]; CQ.w[0] = (P256.w[2] >> amount) | (P256.w[3] << (64 - amount)); CQ.w[1] = 0; __mul_64x64_to_128 (CQ2, CQ.w[0], (power10_table_128[ed2].w[0])); __mul_64x64_to_128 (QB256, CQ2.w[0], CY.w[0]); QB256.w[1] += CQ2.w[0] * CY.w[1] + CQ2.w[1] * CY.w[0]; CA4.w[1] = CX.w[1] - QB256.w[1]; CA4.w[0] = CX.w[0] - QB256.w[0]; if (CX.w[0] < QB256.w[0]) CA4.w[1]--; if (CR.w[0] || CR.w[1]) CA4.w[0] |= 1; done = 1; } } if (!done) { __div_256_by_128 (&CQ, &CA4, CY); } #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!CA4.w[0] && !CA4.w[1]) #endif #endif #ifndef LEAVE_TRAILING_ZEROS // check whether result is exact { // check whether CX, CY are short if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) { i = (int) CY.w[0] - 1; j = (int) CX.w[0] - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128_long (CQ, Qh, amount); diff_expon += nzeros; } else { // decompose Q as Qh*10^17 + Ql Q_low = CQ.w[0]; { tdigit[0] = Q_low & 0x3ffffff; tdigit[1] = 0; QX = Q_low >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128 (CQ, Qh, amount); } diff_expon += nzeros; } } if(diff_expon>=0){ res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } #endif if (diff_expon >= 0) { #ifdef IEEE_ROUND_NEAREST // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; #else #ifdef IEEE_ROUND_NEAREST_TIES_AWAY // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case ROUNDING_TO_NEAREST: // round to nearest code // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_TIES_AWAY: // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up CQ.w[0]++; if (!CQ.w[0]) CQ.w[1]++; break; } #endif #endif res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } else { // UF occurs #ifdef SET_STATUS_FLAGS if ((diff_expon + 16 < 0)) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif rmode = rnd_mode; res = get_BID64_UF (sign_x ^ sign_y, diff_expon, CQ.w[0], CA4.w[1] | CA4.w[0], rmode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } //#define LEAVE_TRAILING_ZEROS TYPE0_FUNCTION_ARG128_ARGTYPE2 (UINT64, bid64qd_div, x, UINT64, y) UINT256 CA4 = { {0x0ull, 0x0ull, 0x0ull, 0x0ull} }, CA4r, P256, QB256; UINT128 CX, CY, T128, CQ, CQ2, CR, CA, TP128, Qh, Tmp; UINT64 sign_x, sign_y, T, carry64, D, Q_low, QX, PD, res, valid_y; int_float fx, fy, f64; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2, digits_q, amount; int nzeros, i, j, k, d5, done = 0; unsigned rmode; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], (y)); // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { // test if x is NaN if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN (y & 0x7e00000000000000ull) == 0x7e00000000000000ull) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull); Tmp.w[0] = CX.w[0]; TP128 = reciprocals10_128[18]; __mul_128x128_high (Qh, Tmp, TP128); amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; BID_RETURN (res); } // x is Infinity? if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if (((y & 0x7c00000000000000ull) == 0x7800000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; BID_RETURN (res); } if (((y & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res = ((x.w[1] ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; BID_RETURN (res); } } // x is 0 if (((y & INFINITY_MASK64) != INFINITY_MASK64) && !(CY.w[0])) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res = 0x7c00000000000000ull; BID_RETURN (res); } // return 0 if (((y & 0x7800000000000000ull) != 0x7800000000000000ull)) { if (!CY.w[0]) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; BID_RETURN (res); } exponent_x = exponent_x - exponent_y - DECIMAL_EXPONENT_BIAS_128 + (DECIMAL_EXPONENT_BIAS << 1); if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; res = (sign_x ^ sign_y) | (((UINT64) exponent_x) << 53); BID_RETURN (res); } } CY.w[1] = 0; if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (CY.w[0] & QUIET_MASK64); } // y is Infinity? if (((y) & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; BID_RETURN (res); } // y is 0, return +/-Inf res = ((x.w[1] ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y - DECIMAL_EXPONENT_BIAS_128 + (DECIMAL_EXPONENT_BIAS << 1); if (__unsigned_compare_gt_128 (CY, CX)) { // CX < CY // 2^64 f64.i = 0x5f800000; // fx ~ CX, fy ~ CY fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0]; // expon_cy - expon_cx bin_index = (fy.i - fx.i) >> 23; if (CX.w[1]) { T = power10_index_binexp_128[bin_index].w[0]; __mul_64x128_short (CA, T, CX); } else { T128 = power10_index_binexp_128[bin_index]; __mul_64x128_short (CA, CX.w[0], T128); } ed2 = 15; if (__unsigned_compare_gt_128 (CY, CA)) ed2++; T128 = power10_table_128[ed2]; __mul_128x128_to_256 (CA4, CA, T128); ed2 += estimate_decimal_digits[bin_index]; CQ.w[0] = CQ.w[1] = 0; diff_expon = diff_expon - ed2; } else { // get CQ = CX/CY __div_128_by_128 (&CQ, &CR, CX, CY); // get number of decimal digits in CQ // 2^64 f64.i = 0x5f800000; fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0]; // binary expon. of CQ bin_expon = (fx.i - 0x3f800000) >> 23; digits_q = estimate_decimal_digits[bin_expon]; TP128.w[0] = power10_index_binexp_128[bin_expon].w[0]; TP128.w[1] = power10_index_binexp_128[bin_expon].w[1]; if (__unsigned_compare_ge_128 (CQ, TP128)) digits_q++; if (digits_q <= 16) { if (!CR.w[1] && !CR.w[0]) { res = get_BID64 (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } ed2 = 16 - digits_q; T128.w[0] = power10_table_128[ed2].w[0]; __mul_64x128_to_192 (CA4, (T128.w[0]), CR); diff_expon = diff_expon - ed2; CQ.w[0] *= T128.w[0]; } else { ed2 = digits_q - 16; diff_expon += ed2; T128 = reciprocals10_128[ed2]; __mul_128x128_to_256 (P256, CQ, T128); amount = recip_scale[ed2]; CQ.w[0] = (P256.w[2] >> amount) | (P256.w[3] << (64 - amount)); CQ.w[1] = 0; __mul_64x64_to_128 (CQ2, CQ.w[0], (power10_table_128[ed2].w[0])); __mul_64x64_to_128 (QB256, CQ2.w[0], CY.w[0]); QB256.w[1] += CQ2.w[0] * CY.w[1] + CQ2.w[1] * CY.w[0]; CA4.w[1] = CX.w[1] - QB256.w[1]; CA4.w[0] = CX.w[0] - QB256.w[0]; if (CX.w[0] < QB256.w[0]) CA4.w[1]--; if (CR.w[0] || CR.w[1]) CA4.w[0] |= 1; done = 1; if(CA4.w[1]|CA4.w[0]) { __mul_64x128_low(CY, (power10_table_128[ed2].w[0]),CY); } } } if (!done) { __div_256_by_128 (&CQ, &CA4, CY); } #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!CA4.w[0] && !CA4.w[1]) #endif #endif #ifndef LEAVE_TRAILING_ZEROS // check whether result is exact { if(!done) { // check whether CX, CY are short if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) { i = (int) CY.w[0] - 1; j = (int) CX.w[0] - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2]; // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128_long (CQ, Qh, amount); diff_expon += nzeros; } else { // decompose Q as Qh*10^17 + Ql //T128 = reciprocals10_128[17]; Q_low = CQ.w[0]; { tdigit[0] = Q_low & 0x3ffffff; tdigit[1] = 0; QX = Q_low >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128 (CQ, Qh, amount); } diff_expon += nzeros; } } } if(diff_expon>=0){ res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } #endif if (diff_expon >= 0) { #ifdef IEEE_ROUND_NEAREST // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; //if(CQ.w[0]> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case ROUNDING_TO_NEAREST: // round to nearest code // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_TIES_AWAY: // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up CQ.w[0]++; if (!CQ.w[0]) CQ.w[1]++; break; } #endif #endif res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } else { // UF occurs #ifdef SET_STATUS_FLAGS if ((diff_expon + 16 < 0)) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif rmode = rnd_mode; res = get_BID64_UF (sign_x ^ sign_y, diff_expon, CQ.w[0], CA4.w[1] | CA4.w[0], rmode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } //#define LEAVE_TRAILING_ZEROS extern UINT32 convert_table[5][128][2]; extern SINT8 factors[][2]; extern UINT8 packed_10000_zeros[]; //UINT64* bid64_div128x128(UINT64 res, UINT128 *px, UINT128 *py, unsigned rnd_mode, unsigned *pfpsf) TYPE0_FUNCTION_ARG128_ARG128 (UINT64, bid64qq_div, x, y) UINT256 CA4 = { {0x0ull, 0x0ull, 0x0ull, 0x0ull} }, CA4r, P256, QB256; UINT128 CX, CY, T128, CQ, CQ2, CR, CA, TP128, Qh, Tmp; UINT64 sign_x, sign_y, T, carry64, D, Q_low, QX, valid_y, PD, res; int_float fx, fy, f64; UINT32 QX32, tdigit[3], digit, digit_h, digit_low; int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2, digits_q, amount; int nzeros, i, j, k, d5, done = 0; unsigned rmode; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { // test if x is NaN if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN (y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull); Tmp.w[0] = CX.w[0]; TP128 = reciprocals10_128[18]; __mul_128x128_high (Qh, Tmp, TP128); amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; BID_RETURN (res); } // x is Infinity? if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is Inf. if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull)) // return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res = ((x.w[1] ^ y. w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; BID_RETURN (res); } } // x is 0 if (((y.w[1] & 0x7800000000000000ull) != 0x7800000000000000ull)) { if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=y=0, return NaN res = 0x7c00000000000000ull; BID_RETURN (res); } // return 0 res = (x.w[1] ^ y.w[1]) & 0x8000000000000000ull; exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS; if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; res |= (((UINT64) exponent_x) << 53); BID_RETURN (res); } } if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif Tmp.w[1] = (CY.w[1] & 0x00003fffffffffffull); Tmp.w[0] = CY.w[0]; TP128 = reciprocals10_128[18]; __mul_128x128_high (Qh, Tmp, TP128); amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; BID_RETURN (res); } // y is 0, return +/-Inf res = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS; if (__unsigned_compare_gt_128 (CY, CX)) { // CX < CY // 2^64 f64.i = 0x5f800000; // fx ~ CX, fy ~ CY fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0]; // expon_cy - expon_cx bin_index = (fy.i - fx.i) >> 23; if (CX.w[1]) { T = power10_index_binexp_128[bin_index].w[0]; __mul_64x128_short (CA, T, CX); } else { T128 = power10_index_binexp_128[bin_index]; __mul_64x128_short (CA, CX.w[0], T128); } ed2 = 15; if (__unsigned_compare_gt_128 (CY, CA)) ed2++; T128 = power10_table_128[ed2]; __mul_128x128_to_256 (CA4, CA, T128); ed2 += estimate_decimal_digits[bin_index]; CQ.w[0] = CQ.w[1] = 0; diff_expon = diff_expon - ed2; } else { // get CQ = CX/CY __div_128_by_128 (&CQ, &CR, CX, CY); // get number of decimal digits in CQ // 2^64 f64.i = 0x5f800000; fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0]; // binary expon. of CQ bin_expon = (fx.i - 0x3f800000) >> 23; digits_q = estimate_decimal_digits[bin_expon]; TP128.w[0] = power10_index_binexp_128[bin_expon].w[0]; TP128.w[1] = power10_index_binexp_128[bin_expon].w[1]; if (__unsigned_compare_ge_128 (CQ, TP128)) digits_q++; if (digits_q <= 16) { if (!CR.w[1] && !CR.w[0]) { res = get_BID64 (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } ed2 = 16 - digits_q; T128.w[0] = power10_table_128[ed2].w[0]; __mul_64x128_to_192 (CA4, (T128.w[0]), CR); diff_expon = diff_expon - ed2; CQ.w[0] *= T128.w[0]; } else { ed2 = digits_q - 16; diff_expon += ed2; T128 = reciprocals10_128[ed2]; __mul_128x128_to_256 (P256, CQ, T128); amount = recip_scale[ed2]; CQ.w[0] = (P256.w[2] >> amount) | (P256.w[3] << (64 - amount)); CQ.w[1] = 0; __mul_64x64_to_128 (CQ2, CQ.w[0], (power10_table_128[ed2].w[0])); __mul_64x64_to_128 (QB256, CQ2.w[0], CY.w[0]); QB256.w[1] += CQ2.w[0] * CY.w[1] + CQ2.w[1] * CY.w[0]; CA4.w[1] = CX.w[1] - QB256.w[1]; CA4.w[0] = CX.w[0] - QB256.w[0]; if (CX.w[0] < QB256.w[0]) CA4.w[1]--; if (CR.w[0] || CR.w[1]) CA4.w[0] |= 1; done = 1; if(CA4.w[1]|CA4.w[0]) { __mul_64x128_low(CY, (power10_table_128[ed2].w[0]),CY); } } } if (!done) { __div_256_by_128 (&CQ, &CA4, CY); } #ifdef SET_STATUS_FLAGS if (CA4.w[0] || CA4.w[1]) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #ifndef LEAVE_TRAILING_ZEROS else #endif #else #ifndef LEAVE_TRAILING_ZEROS if (!CA4.w[0] && !CA4.w[1]) #endif #endif #ifndef LEAVE_TRAILING_ZEROS // check whether result is exact { if(!done) { // check whether CX, CY are short if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) { i = (int) CY.w[0] - 1; j = (int) CX.w[0] - 1; // difference in powers of 2 factors for Y and X nzeros = ed2 - factors[i][0] + factors[j][0]; // difference in powers of 5 factors d5 = ed2 - factors[i][1] + factors[j][1]; if (d5 < nzeros) nzeros = d5; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2]; // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128_long (CQ, Qh, amount); diff_expon += nzeros; } else { // decompose Q as Qh*10^17 + Ql //T128 = reciprocals10_128[17]; Q_low = CQ.w[0]; { tdigit[0] = Q_low & 0x3ffffff; tdigit[1] = 0; QX = Q_low >> 26; QX32 = QX; nzeros = 0; for (j = 0; QX32; j++, QX32 >>= 7) { k = (QX32 & 127); tdigit[0] += convert_table[j][k][0]; tdigit[1] += convert_table[j][k][1]; if (tdigit[0] >= 100000000) { tdigit[0] -= 100000000; tdigit[1]++; } } if (tdigit[1] >= 100000000) { tdigit[1] -= 100000000; if (tdigit[1] >= 100000000) tdigit[1] -= 100000000; } digit = tdigit[0]; if (!digit && !tdigit[1]) nzeros += 16; else { if (!digit) { nzeros += 8; digit = tdigit[1]; } // decompose digit PD = (UINT64) digit *0x068DB8BBull; digit_h = (UINT32) (PD >> 40); digit_low = digit - digit_h * 10000; if (!digit_low) nzeros += 4; else digit_h = digit_low; if (!(digit_h & 1)) nzeros += 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >> (digit_h & 7)); } if (nzeros) { // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_high (Qh, CQ, reciprocals10_128[nzeros]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[nzeros]; __shr_128 (CQ, Qh, amount); } diff_expon += nzeros; } } } if(diff_expon>=0){ res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } #endif if(diff_expon>=0) { #ifdef IEEE_ROUND_NEAREST // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; //if(CQ.w[0]> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; #else rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; switch (rmode) { case ROUNDING_TO_NEAREST: // round to nearest code // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D); CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_TIES_AWAY: // rounding // 2*CA4 - CY CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63); CA4r.w[0] = CA4.w[0] + CA4.w[0]; __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]); CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64; D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1; carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D; CQ.w[0] += carry64; if (CQ.w[0] < carry64) CQ.w[1]++; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: break; default: // rounding up CQ.w[0]++; if (!CQ.w[0]) CQ.w[1]++; break; } #endif #endif res = fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } else { // UF occurs #ifdef SET_STATUS_FLAGS if ((diff_expon + 16 < 0)) { // set status flags __set_status_flags (pfpsf, INEXACT_EXCEPTION); } #endif rmode = rnd_mode; res = get_BID64_UF (sign_x ^ sign_y, diff_expon, CQ.w[0], CA4.w[1] | CA4.w[0], rmode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } libdfp-1.0.17/libbid/bid64_fma.c000066400000000000000000000353421504475242000161760ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * BID64 fma ***************************************************************************** * * Algorithm description: * * if multiplication is guranteed exact (short coefficients) * call the unpacked arg. equivalent of bid64_add(x*y, z) * else * get full coefficient_x*coefficient_y product * call subroutine to perform addition of 64-bit argument * to 128-bit product * ****************************************************************************/ #include "bid_inline_add.h" #if DECIMAL_CALL_BY_REFERENCE extern void bid64_mul (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); #else extern UINT64 bid64_mul (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); #endif #if DECIMAL_CALL_BY_REFERENCE void bid64_fma (UINT64 * pres, UINT64 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x, y, z; #else UINT64 bid64_fma (UINT64 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 P, PU, CT, CZ; UINT64 sign_x, sign_y, coefficient_x, coefficient_y, sign_z, coefficient_z; UINT64 C64, remainder_y, res; UINT64 CYh, CY0L, T, valid_x, valid_y, valid_z; int_double tempx, tempy; int extra_digits, exponent_x, exponent_y, bin_expon_cx, bin_expon_cy, bin_expon_product, rmode; int digits_p, bp, final_exponent, exponent_z, digits_z, ez, ey, scale_z, uf_status; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; y = *py; z = *pz; #endif valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y); valid_z = unpack_BID64 (&sign_z, &exponent_z, &coefficient_z, z); // unpack arguments, check for NaN, Infinity, or 0 if (!valid_x || !valid_y || !valid_z) { if ((y & MASK_NAN) == MASK_NAN) { // y is NAN // if x = {0, f, inf, NaN}, y = NaN, z = {0, f, inf, NaN} then res = Q (y) // check first for non-canonical NaN payload y = y & 0xfe03ffffffffffffull; // clear G6-G12 if ((y & 0x0003ffffffffffffull) > 999999999999999ull) { y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (y) res = y & 0xfdffffffffffffffull; } else { // y is QNaN // return y res = y; // if z = SNaN or x = SNaN signal invalid exception if ((z & MASK_SNAN) == MASK_SNAN || (x & MASK_SNAN) == MASK_SNAN) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } BID_RETURN (res) } else if ((z & MASK_NAN) == MASK_NAN) { // z is NAN // if x = {0, f, inf, NaN}, y = {0, f, inf}, z = NaN then res = Q (z) // check first for non-canonical NaN payload z = z & 0xfe03ffffffffffffull; // clear G6-G12 if ((z & 0x0003ffffffffffffull) > 999999999999999ull) { z = z & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } if ((z & MASK_SNAN) == MASK_SNAN) { // z is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (z) res = z & 0xfdffffffffffffffull; } else { // z is QNaN // return z res = z; // if x = SNaN signal invalid exception if ((x & MASK_SNAN) == MASK_SNAN) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; } } BID_RETURN (res) } else if ((x & MASK_NAN) == MASK_NAN) { // x is NAN // if x = NaN, y = {0, f, inf}, z = {0, f, inf} then res = Q (x) // check first for non-canonical NaN payload x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & 0x0003ffffffffffffull) > 999999999999999ull) { x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res = x & 0xfdffffffffffffffull; } else { // x is QNaN // return x res = x; // clear out G[6]-G[16] } BID_RETURN (res) } if (!valid_x) { // x is Inf. or 0 // x is Infinity? if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if y is 0 if (!coefficient_y) { // y==0, return NaN #ifdef SET_STATUS_FLAGS if ((z & 0x7e00000000000000ull) != 0x7c00000000000000ull) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (0x7c00000000000000ull); } // test if z is Inf of oposite sign if (((z & 0x7c00000000000000ull) == 0x7800000000000000ull) && (((x ^ y) ^ z) & 0x8000000000000000ull)) { // return NaN #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (0x7c00000000000000ull); } // otherwise return +/-Inf BID_RETURN (((x ^ y) & 0x8000000000000000ull) | 0x7800000000000000ull); } // x is 0 if (((y & 0x7800000000000000ull) != 0x7800000000000000ull) && ((z & 0x7800000000000000ull) != 0x7800000000000000ull)) { if (coefficient_z) { exponent_y = exponent_x - DECIMAL_EXPONENT_BIAS + exponent_y; sign_z = z & 0x8000000000000000ull; if (exponent_y >= exponent_z) BID_RETURN (z); res = add_zero64 (exponent_y, sign_z, exponent_z, coefficient_z, &rnd_mode, pfpsf); BID_RETURN (res); } } } if (!valid_y) { // y is Inf. or 0 // y is Infinity? if ((y & 0x7800000000000000ull) == 0x7800000000000000ull) { // check if x is 0 if (!coefficient_x) { // y==0, return NaN #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (0x7c00000000000000ull); } // test if z is Inf of oposite sign if (((z & 0x7c00000000000000ull) == 0x7800000000000000ull) && (((x ^ y) ^ z) & 0x8000000000000000ull)) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // return NaN BID_RETURN (0x7c00000000000000ull); } // otherwise return +/-Inf BID_RETURN (((x ^ y) & 0x8000000000000000ull) | 0x7800000000000000ull); } // y is 0 if (((z & 0x7800000000000000ull) != 0x7800000000000000ull)) { if (coefficient_z) { exponent_y += exponent_x - DECIMAL_EXPONENT_BIAS; sign_z = z & 0x8000000000000000ull; if (exponent_y >= exponent_z) BID_RETURN (z); res = add_zero64 (exponent_y, sign_z, exponent_z, coefficient_z, &rnd_mode, pfpsf); BID_RETURN (res); } } } if (!valid_z) { // y is Inf. or 0 // test if y is NaN/Inf if ((z & 0x7800000000000000ull) == 0x7800000000000000ull) { BID_RETURN (coefficient_z & QUIET_MASK64); } // z is 0, return x*y if ((!coefficient_x) || (!coefficient_y)) { //0+/-0 exponent_x += exponent_y - DECIMAL_EXPONENT_BIAS; if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; if (exponent_x <= exponent_z) res = ((UINT64) exponent_x) << 53; else res = ((UINT64) exponent_z) << 53; if ((sign_x ^ sign_y) == sign_z) res |= sign_z; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST else if (rnd_mode == ROUNDING_DOWN) res |= 0x8000000000000000ull; #endif #endif BID_RETURN (res); } } } /* get binary coefficients of x and y */ //--- get number of bits in the coefficients of x and y --- // version 2 (original) tempx.d = (double) coefficient_x; bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52); tempy.d = (double) coefficient_y; bin_expon_cy = ((tempy.i & MASK_BINARY_EXPONENT) >> 52); // magnitude estimate for coefficient_x*coefficient_y is // 2^(unbiased_bin_expon_cx + unbiased_bin_expon_cx) bin_expon_product = bin_expon_cx + bin_expon_cy; // check if coefficient_x*coefficient_y<2^(10*k+3) // equivalent to unbiased_bin_expon_cx + unbiased_bin_expon_cx < 10*k+1 if (bin_expon_product < UPPER_EXPON_LIMIT + 2 * BINARY_EXPONENT_BIAS) { // easy multiply C64 = coefficient_x * coefficient_y; final_exponent = exponent_x + exponent_y - DECIMAL_EXPONENT_BIAS; if ((final_exponent > 0) || (!coefficient_z)) { res = get_add64 (sign_x ^ sign_y, final_exponent, C64, sign_z, exponent_z, coefficient_z, rnd_mode, pfpsf); BID_RETURN (res); } else { P.w[0] = C64; P.w[1] = 0; extra_digits = 0; } } else { if (!coefficient_z) { #if DECIMAL_CALL_BY_REFERENCE bid64_mul (&res, px, py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid64_mul (x, y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif BID_RETURN (res); } // get 128-bit product: coefficient_x*coefficient_y __mul_64x64_to_128 (P, coefficient_x, coefficient_y); // tighten binary range of P: leading bit is 2^bp // unbiased_bin_expon_product <= bp <= unbiased_bin_expon_product+1 bin_expon_product -= 2 * BINARY_EXPONENT_BIAS; __tight_bin_range_128 (bp, P, bin_expon_product); // get number of decimal digits in the product digits_p = estimate_decimal_digits[bp]; if (!(__unsigned_compare_gt_128 (power10_table_128[digits_p], P))) digits_p++; // if power10_table_128[digits_p] <= P // determine number of decimal digits to be rounded out extra_digits = digits_p - MAX_FORMAT_DIGITS; final_exponent = exponent_x + exponent_y + extra_digits - DECIMAL_EXPONENT_BIAS; } if (((unsigned) final_exponent) >= 3 * 256) { if (final_exponent < 0) { //--- get number of bits in the coefficients of z --- tempx.d = (double) coefficient_z; bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; // get number of decimal digits in the coeff_x digits_z = estimate_decimal_digits[bin_expon_cx]; if (coefficient_z >= power10_table_128[digits_z].w[0]) digits_z++; // underflow if ((final_exponent + 16 < 0) || (exponent_z + digits_z > 33 + final_exponent)) { res = BID_normalize (sign_z, exponent_z, coefficient_z, sign_x ^ sign_y, 1, rnd_mode, pfpsf); BID_RETURN (res); } ez = exponent_z + digits_z - 16; if (ez < 0) ez = 0; scale_z = exponent_z - ez; coefficient_z *= power10_table_128[scale_z].w[0]; ey = final_exponent - extra_digits; extra_digits = ez - ey; if (extra_digits > 33) { res = BID_normalize (sign_z, exponent_z, coefficient_z, sign_x ^ sign_y, 1, rnd_mode, pfpsf); BID_RETURN (res); } //else // extra_digits<=32 if (extra_digits > 17) { CYh = __truncate (P, 16); // get remainder T = power10_table_128[16].w[0]; __mul_64x64_to_64 (CY0L, CYh, T); remainder_y = P.w[0] - CY0L; extra_digits -= 16; P.w[0] = CYh; P.w[1] = 0; } else remainder_y = 0; // align coeff_x, CYh __mul_64x64_to_128 (CZ, coefficient_z, power10_table_128[extra_digits].w[0]); if (sign_z == (sign_y ^ sign_x)) { __add_128_128 (CT, CZ, P); if (__unsigned_compare_ge_128 (CT, power10_table_128[16 + extra_digits])) { extra_digits++; ez++; } } else { if (remainder_y && (__unsigned_compare_ge_128 (CZ, P))) { P.w[0]++; if (!P.w[0]) P.w[1]++; } __sub_128_128 (CT, CZ, P); if (((SINT64) CT.w[1]) < 0) { sign_z = sign_y ^ sign_x; CT.w[0] = 0 - CT.w[0]; CT.w[1] = 0 - CT.w[1]; if (CT.w[0]) CT.w[1]--; } else if(!(CT.w[1]|CT.w[0])) sign_z = (rnd_mode!=ROUNDING_DOWN)? 0: 0x8000000000000000ull; if (ez && (__unsigned_compare_gt_128 (power10_table_128[15 + extra_digits], CT))) { extra_digits--; ez--; } } #ifdef SET_STATUS_FLAGS uf_status = 0; if ((!ez) && __unsigned_compare_gt_128 (power10_table_128 [extra_digits + 15], CT)) { rmode = rnd_mode; if (sign_z && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; //__add_128_64(PU, CT, round_const_table[rmode][extra_digits]); PU = power10_table_128[extra_digits + 15]; PU.w[0]--; if (__unsigned_compare_gt_128 (PU, CT) || (rmode == ROUNDING_DOWN) || (rmode == ROUNDING_TO_ZERO)) uf_status = UNDERFLOW_EXCEPTION; else if (extra_digits < 2) { if ((rmode == ROUNDING_UP)) { if (!extra_digits) uf_status = UNDERFLOW_EXCEPTION; else { if (remainder_y && (sign_z != (sign_y ^ sign_x))) remainder_y = power10_table_128[16].w[0] - remainder_y; if (power10_table_128[15].w[0] > remainder_y) uf_status = UNDERFLOW_EXCEPTION; } } else // RN or RN_away { if (remainder_y && (sign_z != (sign_y ^ sign_x))) remainder_y = power10_table_128[16].w[0] - remainder_y; if (!extra_digits) { remainder_y += round_const_table[rmode][15]; if (remainder_y < power10_table_128[16].w[0]) uf_status = UNDERFLOW_EXCEPTION; } else { if (remainder_y < round_const_table[rmode][16]) uf_status = UNDERFLOW_EXCEPTION; } } //__set_status_flags (pfpsf, uf_status); } } #endif res = __bid_full_round64_remainder (sign_z, ez - extra_digits, CT, extra_digits, remainder_y, rnd_mode, pfpsf, uf_status); BID_RETURN (res); } else { if ((sign_z == (sign_x ^ sign_y)) || (final_exponent > 3 * 256 + 15)) { res = fast_get_BID64_check_OF (sign_x ^ sign_y, final_exponent, 1000000000000000ull, rnd_mode, pfpsf); BID_RETURN (res); } } } if (extra_digits > 0) { res = get_add128 (sign_z, exponent_z, coefficient_z, sign_x ^ sign_y, final_exponent, P, extra_digits, rnd_mode, pfpsf); BID_RETURN (res); } // go to convert_format and exit else { C64 = __low_64 (P); res = get_add64 (sign_x ^ sign_y, exponent_x + exponent_y - DECIMAL_EXPONENT_BIAS, C64, sign_z, exponent_z, coefficient_z, rnd_mode, pfpsf); BID_RETURN (res); } } libdfp-1.0.17/libbid/bid64_logb.c000066400000000000000000000041111504475242000163440ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define MAX_FORMAT_DIGITS 16 #define DECIMAL_EXPONENT_BIAS 398 #if DECIMAL_CALL_BY_REFERENCE void bid64_logb (int * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x; #else int bid64_logb (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 sign_x, coefficient_x; int_double dx; int exponent_x, bin_expon_cx, digits; #if DECIMAL_CALL_BY_REFERENCE x = *px; #endif // unpack arguments, check for NaN or Infinity if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { // x is Inf. or NaN #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (0x80000000); } // find number of digits in coefficient if (coefficient_x >= 1000000000000000ull) { digits = 16; } else { dx.d = (double)coefficient_x; // exact conversion; bin_expon_cx = (int)(dx.i >> 52) - 1023; digits = estimate_decimal_digits[bin_expon_cx]; if (coefficient_x >= power10_table_128[digits].w[0]) digits++; } exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS + digits - 1; BID_RETURN (exponent_x); } libdfp-1.0.17/libbid/bid64_minmax.c000066400000000000000000000705741504475242000167320ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64 minimum function - returns greater of two numbers *****************************************************************************/ static const UINT64 mult_factor[16] = { 1ull, 10ull, 100ull, 1000ull, 10000ull, 100000ull, 1000000ull, 10000000ull, 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull, 1000000000000ull, 10000000000000ull, 100000000000000ull, 1000000000000000ull }; #if DECIMAL_CALL_BY_REFERENCE void bid64_minnum (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM) { UINT64 x = *px; UINT64 y = *py; #else UINT64 bid64_minnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) { #endif UINT64 res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0; // check for non-canonical x if ((x & MASK_NAN) == MASK_NAN) { // x is NaN x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & 0x0003ffffffffffffull) > 999999999999999ull) { x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity x = x & (MASK_SIGN | MASK_INF); } else { // x is not special // check for non-canonical values - treated as zero if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // check for non-canonical y if ((y & MASK_NAN) == MASK_NAN) { // y is NaN y = y & 0xfe03ffffffffffffull; // clear G6-G12 if ((y & 0x0003ffffffffffffull) > 999999999999999ull) { y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity y = y & (MASK_SIGN | MASK_INF); } else { // y is not special // check for non-canonical values - treated as zero if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // NaN (CASE1) if ((x & MASK_NAN) == MASK_NAN) { // x is NAN if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x = x & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y & MASK_NAN) == MASK_NAN) { // y is NAN if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y = y & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal, return either number if (x == y) { res = x; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return x if (((x & MASK_SIGN) == MASK_SIGN)) { res = x; BID_RETURN (res); } // x is pos infinity, return y else { res = y; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return y // if y is negative infinity, then x is greater, return x res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); } // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore // ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // ignore the exponent field // (Any non-canonical # is considered 0) if (sig_x == 0) { x_is_zero = 1; } if (sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, neither is greater => return either res = y; BID_RETURN (res); } else if (x_is_zero) { // is x is zero, it is greater if Y is negative res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } else if (y_is_zero) { // is y is zero, X is greater if it is positive res = ((x & MASK_SIGN) != MASK_SIGN) ? y : x;; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN) ? y : x; BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN) ? y : x; // difference cannot be >10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = y; BID_RETURN (res); } res = (((sig_n_prime.w[1] > 0) || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)) ? y : x; BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if postitive, return whichever significand is larger (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = y; BID_RETURN (res); } res = (((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)) ? y : x; BID_RETURN (res); } /***************************************************************************** * BID64 minimum magnitude function - returns greater of two numbers *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_minnum_mag (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM) { UINT64 x = *px; UINT64 y = *py; #else UINT64 bid64_minnum_mag (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) { #endif UINT64 res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; // check for non-canonical x if ((x & MASK_NAN) == MASK_NAN) { // x is NaN x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & 0x0003ffffffffffffull) > 999999999999999ull) { x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity x = x & (MASK_SIGN | MASK_INF); } else { // x is not special // check for non-canonical values - treated as zero if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // check for non-canonical y if ((y & MASK_NAN) == MASK_NAN) { // y is NaN y = y & 0xfe03ffffffffffffull; // clear G6-G12 if ((y & 0x0003ffffffffffffull) > 999999999999999ull) { y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity y = y & (MASK_SIGN | MASK_INF); } else { // y is not special // check for non-canonical values - treated as zero if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // NaN (CASE1) if ((x & MASK_NAN) == MASK_NAN) { // x is NAN if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x = x & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y & MASK_NAN) == MASK_NAN) { // y is NAN if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y = y & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal, return either number if (x == y) { res = x; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // x is infinity, its magnitude is greater than or equal to y // return x only if y is infinity and x is negative res = ((x & MASK_SIGN) == MASK_SIGN && (y & MASK_INF) == MASK_INF) ? x : y; BID_RETURN (res); } else if ((y & MASK_INF) == MASK_INF) { // y is infinity, then it must be greater in magnitude, return x res = x; BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); } // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore // ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // ignore the exponent field // (Any non-canonical # is considered 0) if (sig_x == 0) { res = x; // x_is_zero, its magnitude must be smaller than y BID_RETURN (res); } if (sig_y == 0) { res = y; // y_is_zero, its magnitude must be smaller than x BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x > sig_y && exp_x >= exp_y) { res = y; BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = x; BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = y; // difference cannot be greater than 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = x; BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // now, sig_n_prime has: sig_x * 10^(exp_x-exp_y), this is // the compensated signif. if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { // two numbers are equal, return minNum(x,y) res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x; BID_RETURN (res); } // now, if compensated_x (sig_n_prime) is greater than y, return y, // otherwise return x res = ((sig_n_prime.w[1] != 0) || sig_n_prime.w[0] > sig_y) ? y : x; BID_RETURN (res); } // exp_y must be greater than exp_x, thus adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x; // two numbers are equal, return either BID_RETURN (res); } res = ((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ? y : x; BID_RETURN (res); } /***************************************************************************** * BID64 maximum function - returns greater of two numbers *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_maxnum (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM) { UINT64 x = *px; UINT64 y = *py; #else UINT64 bid64_maxnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) { #endif UINT64 res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0; // check for non-canonical x if ((x & MASK_NAN) == MASK_NAN) { // x is NaN x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & 0x0003ffffffffffffull) > 999999999999999ull) { x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity x = x & (MASK_SIGN | MASK_INF); } else { // x is not special // check for non-canonical values - treated as zero if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // check for non-canonical y if ((y & MASK_NAN) == MASK_NAN) { // y is NaN y = y & 0xfe03ffffffffffffull; // clear G6-G12 if ((y & 0x0003ffffffffffffull) > 999999999999999ull) { y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity y = y & (MASK_SIGN | MASK_INF); } else { // y is not special // check for non-canonical values - treated as zero if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // NaN (CASE1) if ((x & MASK_NAN) == MASK_NAN) { // x is NAN if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x = x & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y & MASK_NAN) == MASK_NAN) { // y is NAN if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y = y & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal (not Greater). if (x == y) { res = x; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // if x is neg infinity, there is no way it is greater than y, return y // x is pos infinity, it is greater, unless y is positive infinity => // return y!=pos_infinity if (((x & MASK_SIGN) == MASK_SIGN)) { res = y; BID_RETURN (res); } else { res = (((y & MASK_INF) != MASK_INF) || ((y & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so if y is positive infinity, then x is less, return y // if y is negative infinity, then x is greater, return x res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); } // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore // ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // ignore the exponent field // (Any non-canonical # is considered 0) if (sig_x == 0) { x_is_zero = 1; } if (sig_y == 0) { y_is_zero = 1; } if (x_is_zero && y_is_zero) { // if both numbers are zero, neither is greater => return NOTGREATERTHAN res = y; BID_RETURN (res); } else if (x_is_zero) { // is x is zero, it is greater if Y is negative res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } else if (y_is_zero) { // is y is zero, X is greater if it is positive res = ((x & MASK_SIGN) != MASK_SIGN) ? x : y;; BID_RETURN (res); } // OPPOSITE SIGN (CASE5) // now, if the sign bits differ, x is greater if y is negative if (((x ^ y) & MASK_SIGN) == MASK_SIGN) { res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN) ? x : y; BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = ((x & MASK_SIGN) != MASK_SIGN) ? x : y; // difference cannot be > 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if postitive, return whichever significand is larger // (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { res = y; BID_RETURN (res); } res = (((sig_n_prime.w[1] > 0) || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if postitive, return whichever significand is larger (converse if negative) if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = y; BID_RETURN (res); } res = (((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN)) ? x : y; BID_RETURN (res); } /***************************************************************************** * BID64 maximum magnitude function - returns greater of two numbers *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_maxnum_mag (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM) { UINT64 x = *px; UINT64 y = *py; #else UINT64 bid64_maxnum_mag (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) { #endif UINT64 res; int exp_x, exp_y; UINT64 sig_x, sig_y; UINT128 sig_n_prime; // check for non-canonical x if ((x & MASK_NAN) == MASK_NAN) { // x is NaN x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & 0x0003ffffffffffffull) > 999999999999999ull) { x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity x = x & (MASK_SIGN | MASK_INF); } else { // x is not special // check for non-canonical values - treated as zero if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // check for non-canonical y if ((y & MASK_NAN) == MASK_NAN) { // y is NaN y = y & 0xfe03ffffffffffffull; // clear G6-G12 if ((y & 0x0003ffffffffffffull) > 999999999999999ull) { y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits } } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity y = y & (MASK_SIGN | MASK_INF); } else { // y is not special // check for non-canonical values - treated as zero if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11, then the exponent is G[0:w+1] if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2); } // else canonical } // else canonical } // NaN (CASE1) if ((x & MASK_NAN) == MASK_NAN) { // x is NAN if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN // if x is SNAN, then return quiet (x) *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN x = x & 0xfdffffffffffffffull; // quietize x res = x; } else { // x is QNaN if ((y & MASK_NAN) == MASK_NAN) { // y is NAN if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN *pfpsf |= INVALID_EXCEPTION; // set invalid flag } res = x; } else { res = y; } } BID_RETURN (res); } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not if ((y & MASK_SNAN) == MASK_SNAN) { *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN y = y & 0xfdffffffffffffffull; // quietize y res = y; } else { // will return x (which is not NaN) res = x; } BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal, return either number if (x == y) { res = x; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // x is infinity, its magnitude is greater than or equal to y // return y as long as x isn't negative infinity res = ((x & MASK_SIGN) == MASK_SIGN && (y & MASK_INF) == MASK_INF) ? y : x; BID_RETURN (res); } else if ((y & MASK_INF) == MASK_INF) { // y is infinity, then it must be greater in magnitude res = y; BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); } // ZERO (CASE4) // some properties: // (+ZERO == -ZERO) => therefore // ignore the sign, and neither number is greater // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => // ignore the exponent field // (Any non-canonical # is considered 0) if (sig_x == 0) { res = y; // x_is_zero, its magnitude must be smaller than y BID_RETURN (res); } if (sig_y == 0) { res = x; // y_is_zero, its magnitude must be smaller than x BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x > sig_y && exp_x >= exp_y) { res = x; BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = y; BID_RETURN (res); } // if exp_x is 15 greater than exp_y, no need for compensation if (exp_x - exp_y > 15) { res = x; // difference cannot be greater than 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, no need for compensation if (exp_y - exp_x > 15) { res = y; BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down to the compensated significand if (exp_x > exp_y) { // to simplify the loop below, // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // now, sig_n_prime has: sig_x * 10^(exp_x-exp_y), // this is the compensated signif. if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { // two numbers are equal, return maxNum(x,y) res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y; BID_RETURN (res); } // now, if compensated_x (sig_n_prime) is greater than y return y, // otherwise return x res = ((sig_n_prime.w[1] != 0) || sig_n_prime.w[0] > sig_y) ? x : y; BID_RETURN (res); } // exp_y must be greater than exp_x, thus adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y; // two numbers are equal, return either BID_RETURN (res); } res = ((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ? x : y; BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_mul.c000066400000000000000000000264461504475242000162350ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * BID64 multiply ***************************************************************************** * * Algorithm description: * * if(number_digits(coefficient_x)+number_digits(coefficient_y) guaranteed * below 16) * return get_BID64(sign_x^sign_y, exponent_x + exponent_y - dec_bias, * coefficient_x*coefficient_y) * else * get long product: coefficient_x*coefficient_y * determine number of digits to round off (extra_digits) * rounding is performed as a 128x128-bit multiplication by * 2^M[extra_digits]/10^extra_digits, followed by a shift * M[extra_digits] is sufficiently large for required accuracy * ****************************************************************************/ #include "bid_internal.h" #if DECIMAL_CALL_BY_REFERENCE void bid64_mul (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x, y; #else UINT64 bid64_mul (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 P, PU, C128, Q_high, Q_low, Stemp; UINT64 sign_x, sign_y, coefficient_x, coefficient_y; UINT64 C64, remainder_h, carry, CY, res; UINT64 valid_x, valid_y; int_double tempx, tempy; int extra_digits, exponent_x, exponent_y, bin_expon_cx, bin_expon_cy, bin_expon_product; int rmode, digits_p, bp, amount, amount2, final_exponent, round_up; unsigned status, uf_status; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; y = *py; #endif valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y); // unpack arguments, check for NaN or Infinity if (!valid_x) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x is Inf. or NaN // test if x is NaN if ((x & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (coefficient_x & QUIET_MASK64); } // x is Infinity? if ((x & INFINITY_MASK64) == INFINITY_MASK64) { // check if y is 0 if (((y & INFINITY_MASK64) != INFINITY_MASK64) && !coefficient_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // y==0 , return NaN BID_RETURN (NAN_MASK64); } // check if y is NaN if ((y & NAN_MASK64) == NAN_MASK64) // y==NaN , return NaN BID_RETURN (coefficient_y & QUIET_MASK64); // otherwise return +/-Inf BID_RETURN (((x ^ y) & 0x8000000000000000ull) | INFINITY_MASK64); } // x is 0 if (((y & INFINITY_MASK64) != INFINITY_MASK64)) { if ((y & SPECIAL_ENCODING_MASK64) == SPECIAL_ENCODING_MASK64) exponent_y = ((UINT32) (y >> 51)) & 0x3ff; else exponent_y = ((UINT32) (y >> 53)) & 0x3ff; sign_y = y & 0x8000000000000000ull; exponent_x += exponent_y - DECIMAL_EXPONENT_BIAS; if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53)); } } if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y & NAN_MASK64) == NAN_MASK64) { #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (coefficient_y & QUIET_MASK64); } // y is Infinity? if ((y & INFINITY_MASK64) == INFINITY_MASK64) { // check if x is 0 if (!coefficient_x) { __set_status_flags (pfpsf, INVALID_EXCEPTION); // x==0, return NaN BID_RETURN (NAN_MASK64); } // otherwise return +/-Inf BID_RETURN (((x ^ y) & 0x8000000000000000ull) | INFINITY_MASK64); } // y is 0 exponent_x += exponent_y - DECIMAL_EXPONENT_BIAS; if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53)); } //--- get number of bits in the coefficients of x and y --- // version 2 (original) tempx.d = (double) coefficient_x; bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52); tempy.d = (double) coefficient_y; bin_expon_cy = ((tempy.i & MASK_BINARY_EXPONENT) >> 52); // magnitude estimate for coefficient_x*coefficient_y is // 2^(unbiased_bin_expon_cx + unbiased_bin_expon_cx) bin_expon_product = bin_expon_cx + bin_expon_cy; // check if coefficient_x*coefficient_y<2^(10*k+3) // equivalent to unbiased_bin_expon_cx + unbiased_bin_expon_cx < 10*k+1 if (bin_expon_product < UPPER_EXPON_LIMIT + 2 * BINARY_EXPONENT_BIAS) { // easy multiply C64 = coefficient_x * coefficient_y; res = get_BID64_small_mantissa (sign_x ^ sign_y, exponent_x + exponent_y - DECIMAL_EXPONENT_BIAS, C64, rnd_mode, pfpsf); BID_RETURN (res); } else { uf_status = 0; // get 128-bit product: coefficient_x*coefficient_y __mul_64x64_to_128 (P, coefficient_x, coefficient_y); // tighten binary range of P: leading bit is 2^bp // unbiased_bin_expon_product <= bp <= unbiased_bin_expon_product+1 bin_expon_product -= 2 * BINARY_EXPONENT_BIAS; __tight_bin_range_128 (bp, P, bin_expon_product); // get number of decimal digits in the product digits_p = estimate_decimal_digits[bp]; if (!(__unsigned_compare_gt_128 (power10_table_128[digits_p], P))) digits_p++; // if power10_table_128[digits_p] <= P // determine number of decimal digits to be rounded out extra_digits = digits_p - MAX_FORMAT_DIGITS; final_exponent = exponent_x + exponent_y + extra_digits - DECIMAL_EXPONENT_BIAS; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif round_up = 0; if (((unsigned) final_exponent) >= 3 * 256) { if (final_exponent < 0) { // underflow if (final_exponent + 16 < 0) { res = sign_x ^ sign_y; __set_status_flags (pfpsf, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); if (rmode == ROUNDING_UP) res |= 1; BID_RETURN (res); } uf_status = UNDERFLOW_EXCEPTION; if (final_exponent == -1) { __add_128_64 (PU, P, round_const_table[rmode][extra_digits]); if (__unsigned_compare_ge_128 (PU, power10_table_128[extra_digits + 16])) uf_status = 0; } extra_digits -= final_exponent; final_exponent = 0; if (extra_digits > 17) { __mul_128x128_full (Q_high, Q_low, P, reciprocals10_128[16]); amount = recip_scale[16]; __shr_128 (P, Q_high, amount); // get sticky bits amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & Q_high.w[0]; extra_digits -= 16; if (remainder_h || (Q_low.w[1] > reciprocals10_128[16].w[1] || (Q_low.w[1] == reciprocals10_128[16].w[1] && Q_low.w[0] >= reciprocals10_128[16].w[0]))) { round_up = 1; __set_status_flags (pfpsf, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); P.w[0] = (P.w[0] << 3) + (P.w[0] << 1); P.w[0] |= 1; extra_digits++; } } } else { res = fast_get_BID64_check_OF (sign_x ^ sign_y, final_exponent, 1000000000000000ull, rnd_mode, pfpsf); BID_RETURN (res); } } if (extra_digits > 0) { // will divide by 10^(digits_p - 16) // add a constant to P, depending on rounding mode // 0.5*10^(digits_p - 16) for round-to-nearest __add_128_64 (P, P, round_const_table[rmode][extra_digits]); // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_full (Q_high, Q_low, P, reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; __shr_128 (C128, Q_high, amount); C64 = __low_64 (C128); #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if ((C64 & 1) && !round_up) { // check whether fractional part of initial_P/10^extra_digits // is exactly .5 // this is the same as fractional part of // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero // get remainder remainder_h = Q_high.w[0] << (64 - amount); // test whether fractional part is 0 if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) { C64--; } } #endif #ifdef SET_STATUS_FLAGS status = INEXACT_EXCEPTION | uf_status; // get remainder remainder_h = Q_high.w[0] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Q_low.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1], reciprocals10_128[extra_digits].w[1], CY); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } __set_status_flags (pfpsf, status); #endif // convert to BID and return res = fast_get_BID64_check_OF (sign_x ^ sign_y, final_exponent, C64, rmode, pfpsf); BID_RETURN (res); } // go to convert_format and exit C64 = __low_64 (P); res = get_BID64 (sign_x ^ sign_y, exponent_x + exponent_y - DECIMAL_EXPONENT_BIAS, C64, rmode, pfpsf); BID_RETURN (res); } } libdfp-1.0.17/libbid/bid64_next.c000066400000000000000000000365201504475242000164100ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64 nextup ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_nextup (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; BID_UI64DOUBLE tmp1; int x_nr_bits; int q1, ind; UINT64 C1; // C1 represents x_signif (UINT64) // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity if (!(x & 0x8000000000000000ull)) { // x is +inf res = 0x7800000000000000ull; } else { // x is -inf res = 0xf7fb86f26fc0ffffull; // -MAXFP = -999...99 * 10^emax } BID_RETURN (res); } // unpack the argument x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000001ull; // MINFP = 1 * 10^emin } else { // x is not special and is not zero if (x == 0x77fb86f26fc0ffffull) { // x = +MAXFP = 999...99 * 10^emax res = 0x7800000000000000ull; // +inf } else if (x == 0x8000000000000001ull) { // x = -MINFP = 1...99 * 10^emin res = 0x8000000000000000ull; // -0 } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp // can add/subtract 1 ulp to the significand // Note: we could check here if x >= 10^16 to speed up the case q1 =16 // q1 = nr. of decimal digits in x (1 <= q1 <= 54) // determine first the nr. of bits in x if (C1 >= MASK_BINARY_OR2) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q1 = nr_digits[x_nr_bits - 1].digits; if (q1 == 0) { q1 = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q1++; } // if q1 < P16 then pad the significand with zeros if (q1 < P16) { if (x_exp > (UINT64) (P16 - q1)) { ind = P16 - q1; // 1 <= ind <= P16 - 1 // pad with P16 - q1 zeros, until exponent = emin // C1 = C1 * 10^ind C1 = C1 * ten2k64[ind]; x_exp = x_exp - ind; } else { // pad with zeros until the exponent reaches emin ind = x_exp; C1 = C1 * ten2k64[ind]; x_exp = EXP_MIN; } } if (!x_sign) { // x > 0 // add 1 ulp (add 1 to the significand) C1++; if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16 C1 = 0x00038d7ea4c68000ull; // C1 = 10^15 x_exp++; } // Ok, because MAXFP = 999...99 * 10^emax was caught already } else { // x < 0 // subtract 1 ulp (subtract 1 from the significand) C1--; if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1 C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1 x_exp--; } } // assemble the result // if significand has 54 bits if (C1 & MASK_BINARY_OR2) { res = x_sign | (x_exp << 51) | MASK_STEERING_BITS | (C1 & MASK_BINARY_SIG2); } else { // significand fits in 53 bits res = x_sign | (x_exp << 53) | C1; } } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp } // end x is not special and is not zero BID_RETURN (res); } /***************************************************************************** * BID64 nextdown ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_nextdown (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; BID_UI64DOUBLE tmp1; int x_nr_bits; int q1, ind; UINT64 C1; // C1 represents x_signif (UINT64) // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity if (x & 0x8000000000000000ull) { // x is -inf res = 0xf800000000000000ull; } else { // x is +inf res = 0x77fb86f26fc0ffffull; // +MAXFP = +999...99 * 10^emax } BID_RETURN (res); } // unpack the argument x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x8000000000000001ull; // -MINFP = -1 * 10^emin } else { // x is not special and is not zero if (x == 0xf7fb86f26fc0ffffull) { // x = -MAXFP = -999...99 * 10^emax res = 0xf800000000000000ull; // -inf } else if (x == 0x0000000000000001ull) { // x = +MINFP = 1...99 * 10^emin res = 0x0000000000000000ull; // -0 } else { // -MAXFP + 1ulp <= x <= -MINFP OR MINFP + 1 ulp <= x <= MAXFP // can add/subtract 1 ulp to the significand // Note: we could check here if x >= 10^16 to speed up the case q1 =16 // q1 = nr. of decimal digits in x (1 <= q1 <= 16) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid // rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q1 = nr_digits[x_nr_bits - 1].digits; if (q1 == 0) { q1 = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q1++; } // if q1 < P16 then pad the significand with zeros if (q1 < P16) { if (x_exp > (UINT64) (P16 - q1)) { ind = P16 - q1; // 1 <= ind <= P16 - 1 // pad with P16 - q1 zeros, until exponent = emin // C1 = C1 * 10^ind C1 = C1 * ten2k64[ind]; x_exp = x_exp - ind; } else { // pad with zeros until the exponent reaches emin ind = x_exp; C1 = C1 * ten2k64[ind]; x_exp = EXP_MIN; } } if (x_sign) { // x < 0 // add 1 ulp (add 1 to the significand) C1++; if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16 C1 = 0x00038d7ea4c68000ull; // C1 = 10^15 x_exp++; // Ok, because -MAXFP = -999...99 * 10^emax was caught already } } else { // x > 0 // subtract 1 ulp (subtract 1 from the significand) C1--; if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1 C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1 x_exp--; } } // assemble the result // if significand has 54 bits if (C1 & MASK_BINARY_OR2) { res = x_sign | (x_exp << 51) | MASK_STEERING_BITS | (C1 & MASK_BINARY_SIG2); } else { // significand fits in 53 bits res = x_sign | (x_exp << 53) | C1; } } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp } // end x is not special and is not zero BID_RETURN (res); } /***************************************************************************** * BID64 nextafter ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_nextafter (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else UINT64 bid64_nextafter (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 tmp1, tmp2; FPSC tmp_fpsf = 0; // dummy fpsf for calls to comparison functions int res1, res2; // check for NaNs or infinities if (((x & MASK_SPECIAL) == MASK_SPECIAL) || ((y & MASK_SPECIAL) == MASK_SPECIAL)) { // x is NaN or infinity or y is NaN or infinity if ((x & MASK_NAN) == MASK_NAN) { // x is NAN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res = x & 0xfdffffffffffffffull; } else { // x is QNaN if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; } // return x res = x; } BID_RETURN (res); } else if ((y & MASK_NAN) == MASK_NAN) { // y is NAN if ((y & 0x0003ffffffffffffull) > 999999999999999ull) y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else y = y & 0xfe03ffffffffffffull; // clear G6-G12 if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (y) res = y & 0xfdffffffffffffffull; } else { // y is QNaN // return y res = y; } BID_RETURN (res); } else { // at least one is infinity if ((x & MASK_ANY_INF) == MASK_INF) { // x = inf x = x & (MASK_SIGN | MASK_INF); } if ((y & MASK_ANY_INF) == MASK_INF) { // y = inf y = y & (MASK_SIGN | MASK_INF); } } } // neither x nor y is NaN // if not infinity, check for non-canonical values x (treated as zero) if ((x & MASK_ANY_INF) != MASK_INF) { // x != inf // unpack x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11 (condition will be 0), then // the exponent is G[0:w+1] if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull) { // non-canonical x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2); } } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) x is unch. ; // canonical } } // no need to check for non-canonical y // neither x nor y is NaN tmp_fpsf = *pfpsf; // save fpsf #if DECIMAL_CALL_BY_REFERENCE bid64_quiet_equal (&res1, px, py _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_quiet_greater (&res2, px, py _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res1 = bid64_quiet_equal (x, y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res2 = bid64_quiet_greater (x, y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif *pfpsf = tmp_fpsf; // restore fpsf if (res1) { // x = y // return x with the sign of y res = (y & 0x8000000000000000ull) | (x & 0x7fffffffffffffffull); } else if (res2) { // x > y #if DECIMAL_CALL_BY_REFERENCE bid64_nextdown (&res, px _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid64_nextdown (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif } else { // x < y #if DECIMAL_CALL_BY_REFERENCE bid64_nextup (&res, px _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = bid64_nextup (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif } // if the operand x is finite but the result is infinite, signal // overflow and inexact if (((x & MASK_INF) != MASK_INF) && ((res & MASK_INF) == MASK_INF)) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the overflow flag *pfpsf |= OVERFLOW_EXCEPTION; } // if the result is in (-10^emin, 10^emin), and is different from the // operand x, signal underflow and inexact tmp1 = 0x00038d7ea4c68000ull; // +100...0[16] * 10^emin tmp2 = res & 0x7fffffffffffffffull; tmp_fpsf = *pfpsf; // save fpsf #if DECIMAL_CALL_BY_REFERENCE bid64_quiet_greater (&res1, &tmp1, &tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); bid64_quiet_not_equal (&res2, &x, &res _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res1 = bid64_quiet_greater (tmp1, tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res2 = bid64_quiet_not_equal (x, res _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif *pfpsf = tmp_fpsf; // restore fpsf if (res1 && res2) { // if (bid64_quiet_greater (tmp1, tmp2, &tmp_fpsf) && // bid64_quiet_not_equal (x, res, &tmp_fpsf)) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the underflow flag *pfpsf |= UNDERFLOW_EXCEPTION; } BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_noncomp.c000066400000000000000000000671241504475242000171070ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" static const UINT64 mult_factor[16] = { 1ull, 10ull, 100ull, 1000ull, 10000ull, 100000ull, 1000000ull, 10000000ull, 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull, 1000000000000ull, 10000000000000ull, 100000000000000ull, 1000000000000000ull }; /***************************************************************************** * BID64 non-computational functions: * - bid64_isSigned * - bid64_isNormal * - bid64_isSubnormal * - bid64_isFinite * - bid64_isZero * - bid64_isInf * - bid64_isSignaling * - bid64_isCanonical * - bid64_isNaN * - bid64_copy * - bid64_negate * - bid64_abs * - bid64_copySign * - bid64_class * - bid64_sameQuantum * - bid64_totalOrder * - bid64_totalOrderMag * - bid64_radix ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_isSigned (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isSigned (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // return 1 iff x is not zero, nor NaN nor subnormal nor infinity #if DECIMAL_CALL_BY_REFERENCE void bid64_isNormal (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isNormal (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT128 sig_x_prime; UINT64 sig_x; unsigned int exp_x; if ((x & MASK_INF) == MASK_INF) { // x is either INF or NaN res = 0; } else { // decode number into exponent and significand if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; // check for zero or non-canonical if (sig_x > 9999999999999999ull || sig_x == 0) { res = 0; // zero or non-canonical BID_RETURN (res); } exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; } else { sig_x = (x & MASK_BINARY_SIG1); if (sig_x == 0) { res = 0; // zero BID_RETURN (res); } exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; } // if exponent is less than -383, the number may be subnormal // if (exp_x - 398 = -383) the number may be subnormal if (exp_x < 15) { __mul_64x64_to_128MACH (sig_x_prime, sig_x, mult_factor[exp_x]); if (sig_x_prime.w[1] == 0 && sig_x_prime.w[0] < 1000000000000000ull) { res = 0; // subnormal } else { res = 1; // normal } } else { res = 1; // normal } } BID_RETURN (res); } // return 1 iff x is not zero, nor NaN nor normal nor infinity #if DECIMAL_CALL_BY_REFERENCE void bid64_isSubnormal (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isSubnormal (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT128 sig_x_prime; UINT64 sig_x; unsigned int exp_x; if ((x & MASK_INF) == MASK_INF) { // x is either INF or NaN res = 0; } else { // decode number into exponent and significand if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; // check for zero or non-canonical if (sig_x > 9999999999999999ull || sig_x == 0) { res = 0; // zero or non-canonical BID_RETURN (res); } exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; } else { sig_x = (x & MASK_BINARY_SIG1); if (sig_x == 0) { res = 0; // zero BID_RETURN (res); } exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; } // if exponent is less than -383, the number may be subnormal // if (exp_x - 398 = -383) the number may be subnormal if (exp_x < 15) { __mul_64x64_to_128MACH (sig_x_prime, sig_x, mult_factor[exp_x]); if (sig_x_prime.w[1] == 0 && sig_x_prime.w[0] < 1000000000000000ull) { res = 1; // subnormal } else { res = 0; // normal } } else { res = 0; // normal } } BID_RETURN (res); } //iff x is zero, subnormal or normal (not infinity or NaN) #if DECIMAL_CALL_BY_REFERENCE void bid64_isFinite (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isFinite (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x & MASK_INF) != MASK_INF); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_isZero (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isZero (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; // if infinity or nan, return 0 if ((x & MASK_INF) == MASK_INF) { res = 0; } else if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] // => sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; // if(sig_x > 9999999999999999ull) {return 1;} res = (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > 9999999999999999ull); } else { res = ((x & MASK_BINARY_SIG1) == 0); } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_isInf (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isInf (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x & MASK_INF) == MASK_INF) && ((x & MASK_NAN) != MASK_NAN); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_isSignaling (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isSignaling (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x & MASK_SNAN) == MASK_SNAN); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_isCanonical (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isCanonical (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; if ((x & MASK_NAN) == MASK_NAN) { // NaN if (x & 0x01fc000000000000ull) { res = 0; } else if ((x & 0x0003ffffffffffffull) > 999999999999999ull) { // payload res = 0; } else { res = 1; } } else if ((x & MASK_INF) == MASK_INF) { if (x & 0x03ffffffffffffffull) { res = 0; } else { res = 1; } } else if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // 54-bit coeff. res = (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) <= 9999999999999999ull); } else { // 53-bit coeff. res = 1; } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_isNaN (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_isNaN (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; res = ((x & MASK_NAN) == MASK_NAN); BID_RETURN (res); } // copies a floating-point operand x to destination y, with no change #if DECIMAL_CALL_BY_REFERENCE void bid64_copy (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_copy (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; res = x; BID_RETURN (res); } // copies a floating-point operand x to destination y, reversing the sign #if DECIMAL_CALL_BY_REFERENCE void bid64_negate (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_negate (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; res = x ^ MASK_SIGN; BID_RETURN (res); } // copies a floating-point operand x to destination y, changing the sign to positive #if DECIMAL_CALL_BY_REFERENCE void bid64_abs (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_abs (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; res = x & ~MASK_SIGN; BID_RETURN (res); } // copies operand x to destination in the same format as x, but // with the sign of y #if DECIMAL_CALL_BY_REFERENCE void bid64_copySign (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else UINT64 bid64_copySign (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; res = (x & ~MASK_SIGN) | (y & MASK_SIGN); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_class (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_class (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT128 sig_x_prime; UINT64 sig_x; int exp_x; if ((x & MASK_NAN) == MASK_NAN) { // is the NaN signaling? if ((x & MASK_SNAN) == MASK_SNAN) { res = signalingNaN; BID_RETURN (res); } // if NaN and not signaling, must be quietNaN res = quietNaN; BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // is the Infinity negative? if ((x & MASK_SIGN) == MASK_SIGN) { res = negativeInfinity; } else { // otherwise, must be positive infinity res = positiveInfinity; } BID_RETURN (res); } else if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // decode number into exponent and significand sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; // check for zero or non-canonical if (sig_x > 9999999999999999ull || sig_x == 0) { if ((x & MASK_SIGN) == MASK_SIGN) { res = negativeZero; } else { res = positiveZero; } BID_RETURN (res); } exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; } else { sig_x = (x & MASK_BINARY_SIG1); if (sig_x == 0) { res = ((x & MASK_SIGN) == MASK_SIGN) ? negativeZero : positiveZero; BID_RETURN (res); } exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; } // if exponent is less than -383, number may be subnormal // if (exp_x - 398 < -383) if (exp_x < 15) { // sig_x *10^exp_x __mul_64x64_to_128MACH (sig_x_prime, sig_x, mult_factor[exp_x]); if (sig_x_prime.w[1] == 0 && (sig_x_prime.w[0] < 1000000000000000ull)) { res = ((x & MASK_SIGN) == MASK_SIGN) ? negativeSubnormal : positiveSubnormal; BID_RETURN (res); } } // otherwise, normal number, determine the sign res = ((x & MASK_SIGN) == MASK_SIGN) ? negativeNormal : positiveNormal; BID_RETURN (res); } // true if the exponents of x and y are the same, false otherwise. // The special cases of sameQuantum (NaN, NaN) and sameQuantum (Inf, Inf) are // true. // If exactly one operand is infinite or exactly one operand is NaN, then false #if DECIMAL_CALL_BY_REFERENCE void bid64_sameQuantum (int *pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_sameQuantum (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; unsigned int exp_x, exp_y; // if both operands are NaN, return true; if just one is NaN, return false if ((x & MASK_NAN) == MASK_NAN || ((y & MASK_NAN) == MASK_NAN)) { res = ((x & MASK_NAN) == MASK_NAN && (y & MASK_NAN) == MASK_NAN); BID_RETURN (res); } // if both operands are INF, return true; if just one is INF, return false if ((x & MASK_INF) == MASK_INF || (y & MASK_INF) == MASK_INF) { res = ((x & MASK_INF) == MASK_INF && (y & MASK_INF) == MASK_INF); BID_RETURN (res); } // decode exponents for both numbers, and return true if they match if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; } if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; } res = (exp_x == exp_y); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_totalOrder (int *pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_totalOrder (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y, pyld_y, pyld_x; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0; // NaN (CASE1) // if x and y are unordered numerically because either operand is NaN // (1) totalOrder(-NaN, number) is true // (2) totalOrder(number, +NaN) is true // (3) if x and y are both NaN: // i) negative sign bit < positive sign bit // ii) signaling < quiet for +NaN, reverse for -NaN // iii) lesser payload < greater payload for +NaN (reverse for -NaN) // iv) else if bitwise identical (in canonical form), return 1 if ((x & MASK_NAN) == MASK_NAN) { // if x is -NaN if ((x & MASK_SIGN) == MASK_SIGN) { // return true, unless y is -NaN also if ((y & MASK_NAN) != MASK_NAN || (y & MASK_SIGN) != MASK_SIGN) { res = 1; // y is a number, return 1 BID_RETURN (res); } else { // if y and x are both -NaN // if x and y are both -sNaN or both -qNaN, we have to compare payloads // this xnor statement evaluates to true if both are sNaN or qNaN if (! (((y & MASK_SNAN) == MASK_SNAN) ^ ((x & MASK_SNAN) == MASK_SNAN))) { // it comes down to the payload. we want to return true if x has a // larger payload, or if the payloads are equal (canonical forms // are bitwise identical) pyld_y = y & 0x0003ffffffffffffull; pyld_x = x & 0x0003ffffffffffffull; if (pyld_y > 999999999999999ull || pyld_y == 0) { // if y is zero, x must be less than or numerically equal // y's payload is 0 res = 1; BID_RETURN (res); } // if x is zero and y isn't, x has the smaller payload // definitely (since we know y isn't 0 at this point) if (pyld_x > 999999999999999ull || pyld_x == 0) { // x's payload is 0 res = 0; BID_RETURN (res); } res = (pyld_x >= pyld_y); BID_RETURN (res); } else { // either x = -sNaN and y = -qNaN or x = -qNaN and y = -sNaN res = (y & MASK_SNAN) == MASK_SNAN; // totalOrder(-qNaN, -sNaN) == 1 BID_RETURN (res); } } } else { // x is +NaN // return false, unless y is +NaN also if ((y & MASK_NAN) != MASK_NAN || (y & MASK_SIGN) == MASK_SIGN) { res = 0; // y is a number, return 1 BID_RETURN (res); } else { // x and y are both +NaN; // must investigate payload if both quiet or both signaling // this xnor statement will be true if both x and y are +qNaN or +sNaN if (! (((y & MASK_SNAN) == MASK_SNAN) ^ ((x & MASK_SNAN) == MASK_SNAN))) { // it comes down to the payload. we want to return true if x has a // smaller payload, or if the payloads are equal (canonical forms // are bitwise identical) pyld_y = y & 0x0003ffffffffffffull; pyld_x = x & 0x0003ffffffffffffull; // if x is zero and y isn't, x has the smaller // payload definitely (since we know y isn't 0 at this point) if (pyld_x > 999999999999999ull || pyld_x == 0) { res = 1; BID_RETURN (res); } if (pyld_y > 999999999999999ull || pyld_y == 0) { // if y is zero, x must be less than or numerically equal res = 0; BID_RETURN (res); } res = (pyld_x <= pyld_y); BID_RETURN (res); } else { // return true if y is +qNaN and x is +sNaN // (we know they're different bc of xor if_stmt above) res = ((x & MASK_SNAN) == MASK_SNAN); BID_RETURN (res); } } } } else if ((y & MASK_NAN) == MASK_NAN) { // x is certainly not NAN in this case. // return true if y is positive res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits are the same, these numbers are equal. if (x == y) { res = 1; BID_RETURN (res); } // OPPOSITE SIGNS (CASE 3) // if signs are opposite, return 1 if x is negative // (if xy res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull || sig_x == 0) { x_is_zero = 1; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); if (sig_x == 0) { x_is_zero = 1; } } // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull || sig_y == 0) { y_is_zero = 1; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); if (sig_y == 0) { y_is_zero = 1; } } // ZERO (CASE 5) // if x and y represent the same entities, and // both are negative , return true iff exp_x <= exp_y if (x_is_zero && y_is_zero) { if (!((x & MASK_SIGN) == MASK_SIGN) ^ ((y & MASK_SIGN) == MASK_SIGN)) { // if signs are the same: // totalOrder(x,y) iff exp_x >= exp_y for negative numbers // totalOrder(x,y) iff exp_x <= exp_y for positive numbers if (exp_x == exp_y) { res = 1; BID_RETURN (res); } res = (exp_x <= exp_y) ^ ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } else { // signs are different. // totalOrder(-0, +0) is true // totalOrder(+0, -0) is false res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } } // if x is zero and y isn't, clearly x has the smaller payload. if (x_is_zero) { res = ((y & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if y is zero, and x isn't, clearly y has the smaller payload. if (y_is_zero) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller, // it is clear what needs to be done if (sig_x > sig_y && exp_x >= exp_y) { res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 greater than exp_y, it is // definitely larger, so no need for compensation if (exp_x - exp_y > 15) { // difference cannot be greater than 10^15 res = ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if exp_x is 15 less than exp_y, it is // definitely smaller, no need for compensation if (exp_y - exp_x > 15) { res = ((x & MASK_SIGN) != MASK_SIGN); BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down // to the compensated significand if (exp_x > exp_y) { // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if x and y represent the same entities, // and both are negative, return true iff exp_x <= exp_y if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { // case cannot occure, because all bits must // be the same - would have been caught if (x==y) res = (exp_x <= exp_y) ^ ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // if positive, return 1 if adjusted x is smaller than y res = ((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if x and y represent the same entities, // and both are negative, return true iff exp_x <= exp_y if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { // Cannot occur, because all bits must be the same. // Case would have been caught if (x==y) res = (exp_x <= exp_y) ^ ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // values are not equal, for positive numbers return 1 // if x is less than y. 0 otherwise res = ((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) == MASK_SIGN); BID_RETURN (res); } // totalOrderMag is TotalOrder(abs(x), abs(y)) #if DECIMAL_CALL_BY_REFERENCE void bid64_totalOrderMag (int *pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else int bid64_totalOrderMag (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; int exp_x, exp_y; UINT64 sig_x, sig_y, pyld_y, pyld_x; UINT128 sig_n_prime; char x_is_zero = 0, y_is_zero = 0; // NaN (CASE 1) // if x and y are unordered numerically because either operand is NaN // (1) totalOrder(number, +NaN) is true // (2) if x and y are both NaN: // i) signaling < quiet for +NaN // ii) lesser payload < greater payload for +NaN // iii) else if bitwise identical (in canonical form), return 1 if ((x & MASK_NAN) == MASK_NAN) { // x is +NaN // return false, unless y is +NaN also if ((y & MASK_NAN) != MASK_NAN) { res = 0; // y is a number, return 1 BID_RETURN (res); } else { // x and y are both +NaN; // must investigate payload if both quiet or both signaling // this xnor statement will be true if both x and y are +qNaN or +sNaN if (! (((y & MASK_SNAN) == MASK_SNAN) ^ ((x & MASK_SNAN) == MASK_SNAN))) { // it comes down to the payload. we want to return true if x has a // smaller payload, or if the payloads are equal (canonical forms // are bitwise identical) pyld_y = y & 0x0003ffffffffffffull; pyld_x = x & 0x0003ffffffffffffull; // if x is zero and y isn't, x has the smaller // payload definitely (since we know y isn't 0 at this point) if (pyld_x > 999999999999999ull || pyld_x == 0) { res = 1; BID_RETURN (res); } if (pyld_y > 999999999999999ull || pyld_y == 0) { // if y is zero, x must be less than or numerically equal res = 0; BID_RETURN (res); } res = (pyld_x <= pyld_y); BID_RETURN (res); } else { // return true if y is +qNaN and x is +sNaN // (we know they're different bc of xor if_stmt above) res = ((x & MASK_SNAN) == MASK_SNAN); BID_RETURN (res); } } } else if ((y & MASK_NAN) == MASK_NAN) { // x is certainly not NAN in this case. // return true if y is positive res = 1; BID_RETURN (res); } // SIMPLE (CASE2) // if all the bits (except sign bit) are the same, // these numbers are equal. if ((x & ~MASK_SIGN) == (y & ~MASK_SIGN)) { res = 1; BID_RETURN (res); } // INFINITY (CASE3) if ((x & MASK_INF) == MASK_INF) { // x is positive infinity, only return1 // if y is positive infinity as well res = ((y & MASK_INF) == MASK_INF); BID_RETURN (res); } else if ((y & MASK_INF) == MASK_INF) { // x is finite, so: // if y is +inf, x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_x = (x & MASK_BINARY_EXPONENT2) >> 51; sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_x > 9999999999999999ull || sig_x == 0) { x_is_zero = 1; } } else { exp_x = (x & MASK_BINARY_EXPONENT1) >> 53; sig_x = (x & MASK_BINARY_SIG1); if (sig_x == 0) { x_is_zero = 1; } } // if steering bits are 11 (condition will be 0), // then exponent is G[0:w+1] => if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) { exp_y = (y & MASK_BINARY_EXPONENT2) >> 51; sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (sig_y > 9999999999999999ull || sig_y == 0) { y_is_zero = 1; } } else { exp_y = (y & MASK_BINARY_EXPONENT1) >> 53; sig_y = (y & MASK_BINARY_SIG1); if (sig_y == 0) { y_is_zero = 1; } } // ZERO (CASE 5) // if x and y represent the same entities, // and both are negative , return true iff exp_x <= exp_y if (x_is_zero && y_is_zero) { // totalOrder(x,y) iff exp_x <= exp_y for positive numbers res = (exp_x <= exp_y); BID_RETURN (res); } // if x is zero and y isn't, clearly x has the smaller payload. if (x_is_zero) { res = 1; BID_RETURN (res); } // if y is zero, and x isn't, clearly y has the smaller payload. if (y_is_zero) { res = 0; BID_RETURN (res); } // REDUNDANT REPRESENTATIONS (CASE6) // if both components are either bigger or smaller if (sig_x > sig_y && exp_x >= exp_y) { res = 0; BID_RETURN (res); } if (sig_x < sig_y && exp_x <= exp_y) { res = 1; BID_RETURN (res); } // if exp_x is 15 greater than exp_y, it is definitely // larger, so no need for compensation if (exp_x - exp_y > 15) { res = 0; // difference cannot be greater than 10^15 BID_RETURN (res); } // if exp_x is 15 less than exp_y, it is definitely // smaller, no need for compensation if (exp_y - exp_x > 15) { res = 1; BID_RETURN (res); } // if |exp_x - exp_y| < 15, it comes down // to the compensated significand if (exp_x > exp_y) { // otherwise adjust the x significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_x, mult_factor[exp_x - exp_y]); // if x and y represent the same entities, // and both are negative, return true iff exp_x <= exp_y if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) { // case cannot occur, because all bits // must be the same - would have been caught if (x==y) res = (exp_x <= exp_y); BID_RETURN (res); } // if positive, return 1 if adjusted x is smaller than y res = ((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y); BID_RETURN (res); } // adjust the y significand upwards __mul_64x64_to_128MACH (sig_n_prime, sig_y, mult_factor[exp_y - exp_x]); // if x and y represent the same entities, // and both are negative, return true iff exp_x <= exp_y if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) { res = (exp_x <= exp_y); BID_RETURN (res); } // values are not equal, for positive numbers // return 1 if x is less than y. 0 otherwise res = ((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0])); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_radix (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_radix (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; if (x) // dummy test res = 10; else res = 10; BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_quantize.c000066400000000000000000000157001504475242000172670ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define MAX_FORMAT_DIGITS 16 #define DECIMAL_EXPONENT_BIAS 398 #define MAX_DECIMAL_EXPONENT 767 #if DECIMAL_CALL_BY_REFERENCE void bid64_quantize (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x, y; #else UINT64 bid64_quantize (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CT; UINT64 sign_x, sign_y, coefficient_x, coefficient_y, remainder_h, C64, valid_x; UINT64 tmp, carry, res; int_float tempx; int exponent_x, exponent_y, digits_x, extra_digits, amount, amount2; int expon_diff, total_digits, bin_expon_cx; unsigned rmode, status; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; y = *py; #endif valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); // unpack arguments, check for NaN or Infinity if (!unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y)) { // Inf. or NaN or 0 #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // x=Inf, y=Inf? if (((coefficient_x << 1) == 0xf000000000000000ull) && ((coefficient_y << 1) == 0xf000000000000000ull)) { res = coefficient_x; BID_RETURN (res); } // Inf or NaN? if ((y & 0x7800000000000000ull) == 0x7800000000000000ull) { #ifdef SET_STATUS_FLAGS if (((y & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN || (((y & 0x7c00000000000000ull) == 0x7800000000000000ull) && //Inf ((x & 0x7c00000000000000ull) < 0x7800000000000000ull))) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif if ((y & NAN_MASK64) != NAN_MASK64) coefficient_y = 0; if ((x & NAN_MASK64) != NAN_MASK64) { res = 0x7c00000000000000ull | (coefficient_y & QUIET_MASK64); if (((y & NAN_MASK64) != NAN_MASK64) && ((x & NAN_MASK64) == 0x7800000000000000ull)) res = x; BID_RETURN (res); } } } // unpack arguments, check for NaN or Infinity if (!valid_x) { // x is Inf. or NaN or 0 // Inf or NaN? if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { #ifdef SET_STATUS_FLAGS if (((x & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN || ((x & 0x7c00000000000000ull) == 0x7800000000000000ull)) //Inf __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif if ((x & NAN_MASK64) != NAN_MASK64) coefficient_x = 0; res = 0x7c00000000000000ull | (coefficient_x & QUIET_MASK64); BID_RETURN (res); } res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, 0); BID_RETURN (res); } // get number of decimal digits in coefficient_x tempx.d = (float) coefficient_x; bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f; digits_x = estimate_decimal_digits[bin_expon_cx]; if (coefficient_x >= power10_table_128[digits_x].w[0]) digits_x++; expon_diff = exponent_x - exponent_y; total_digits = digits_x + expon_diff; // check range of scaled coefficient if ((UINT32) (total_digits + 1) <= 17) { if (expon_diff >= 0) { coefficient_x *= power10_table_128[expon_diff].w[0]; res = very_fast_get_BID64 (sign_x, exponent_y, coefficient_x); BID_RETURN (res); } // must round off -expon_diff digits extra_digits = -expon_diff; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif coefficient_x += round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT, coefficient_x, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C64 = CT.w[1] >> amount; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rnd_mode == 0) #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits // is exactly .5 // this is the same as fractional part of // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero // get remainder amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & CT.w[1]; // test whether fractional part is 0 if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) { C64--; } } #endif #ifdef SET_STATUS_FLAGS status = INEXACT_EXCEPTION; // get remainder remainder_h = CT.w[1] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if ((remainder_h == 0x8000000000000000ull) && (CT.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; //if(!C64 && rmode==ROUNDING_DOWN) sign_s=sign_y; break; default: // round up __add_carry_out (tmp, carry, CT.w[0], reciprocals10_64[extra_digits]); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; break; } __set_status_flags (pfpsf, status); #endif res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, C64); BID_RETURN (res); } if (total_digits < 0) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif C64 = 0; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; if (rmode == ROUNDING_UP) C64 = 1; #endif #endif res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, C64); BID_RETURN (res); } // else more than 16 digits in coefficient #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_rem.c000066400000000000000000000146661504475242000162240ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * BID64 remainder ***************************************************************************** * * Algorithm description: * * if(exponent_x < exponent_y) * scale coefficient_y so exponents are aligned * perform coefficient divide (64-bit integer divide), unless * coefficient_y is longer than 64 bits (clearly larger * than coefficient_x) * else // exponent_x > exponent_y * use a loop to scale coefficient_x to 18_digits, divide by * coefficient_y (64-bit integer divide), calculate remainder * as new_coefficient_x and repeat until final remainder is obtained * (when new_exponent_x < exponent_y) * ****************************************************************************/ #include "bid_internal.h" #define MAX_FORMAT_DIGITS 16 #define DECIMAL_EXPONENT_BIAS 398 #define MASK_BINARY_EXPONENT 0x7ff0000000000000ull #define BINARY_EXPONENT_BIAS 0x3ff #define UPPER_EXPON_LIMIT 51 #if DECIMAL_CALL_BY_REFERENCE void bid64_rem (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x, y; #else UINT64 bid64_rem (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CY; UINT64 sign_x, sign_y, coefficient_x, coefficient_y, res; UINT64 Q, R, R2, T, valid_y, valid_x; int_float tempx; int exponent_x, exponent_y, bin_expon, e_scale; int digits_x, diff_expon; #if DECIMAL_CALL_BY_REFERENCE x = *px; y = *py; #endif valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y); valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); // unpack arguments, check for NaN or Infinity if (!valid_x) { // x is Inf. or NaN or 0 #ifdef SET_STATUS_FLAGS if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // test if x is NaN if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if (((x & SNAN_MASK64) == SNAN_MASK64)) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = coefficient_x & QUIET_MASK64;; BID_RETURN (res); } // x is Infinity? if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { if (((y & NAN_MASK64) != NAN_MASK64)) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif // return NaN res = 0x7c00000000000000ull; BID_RETURN (res); } } // x is 0 // return x if y != 0 if (((y & 0x7800000000000000ull) < 0x7800000000000000ull) && coefficient_y) { if ((y & 0x6000000000000000ull) == 0x6000000000000000ull) exponent_y = (y >> 51) & 0x3ff; else exponent_y = (y >> 53) & 0x3ff; if (exponent_y < exponent_x) exponent_x = exponent_y; x = exponent_x; x <<= 53; res = x | sign_x; BID_RETURN (res); } } if (!valid_y) { // y is Inf. or NaN // test if y is NaN if ((y & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if (((y & SNAN_MASK64) == SNAN_MASK64)) __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = coefficient_y & QUIET_MASK64;; BID_RETURN (res); } // y is Infinity? if ((y & 0x7800000000000000ull) == 0x7800000000000000ull) { res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x); BID_RETURN (res); } // y is 0, return NaN { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; BID_RETURN (res); } } diff_expon = exponent_x - exponent_y; if (diff_expon <= 0) { diff_expon = -diff_expon; if (diff_expon > 16) { // |x|<|y| in this case res = x; BID_RETURN (res); } // set exponent of y to exponent_x, scale coefficient_y T = power10_table_128[diff_expon].w[0]; __mul_64x64_to_128 (CY, coefficient_y, T); if (CY.w[1] || CY.w[0] > (coefficient_x << 1)) { res = x; BID_RETURN (res); } Q = coefficient_x / CY.w[0]; R = coefficient_x - Q * CY.w[0]; R2 = R + R; if (R2 > CY.w[0] || (R2 == CY.w[0] && (Q & 1))) { R = CY.w[0] - R; sign_x ^= 0x8000000000000000ull; } res = very_fast_get_BID64 (sign_x, exponent_x, R); BID_RETURN (res); } while (diff_expon > 0) { // get number of digits in coeff_x tempx.d = (float) coefficient_x; bin_expon = ((tempx.i >> 23) & 0xff) - 0x7f; digits_x = estimate_decimal_digits[bin_expon]; // will not use this test, dividend will have 18 or 19 digits //if(coefficient_x >= power10_table_128[digits_x].w[0]) // digits_x++; e_scale = 18 - digits_x; if (diff_expon >= e_scale) { diff_expon -= e_scale; } else { e_scale = diff_expon; diff_expon = 0; } // scale dividend to 18 or 19 digits coefficient_x *= power10_table_128[e_scale].w[0]; // quotient Q = coefficient_x / coefficient_y; // remainder coefficient_x -= Q * coefficient_y; // check for remainder == 0 if (!coefficient_x) { res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, 0); BID_RETURN (res); } } R2 = coefficient_x + coefficient_x; if (R2 > coefficient_y || (R2 == coefficient_y && (Q & 1))) { coefficient_x = coefficient_y - coefficient_x; sign_x ^= 0x8000000000000000ull; } res = very_fast_get_BID64 (sign_x, exponent_y, coefficient_x); BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_round_integral.c000066400000000000000000001203201504475242000204360ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64_round_integral_exact ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_round_integral_exact (UINT64 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64_round_integral_exact (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT64 x_sign; int exp; // unbiased exponent // Note: C1 represents the significand (UINT64) BID_UI64DOUBLE tmp1; int x_nr_bits; int q, ind, shift; UINT64 C1; // UINT64 res is C* at first - represents up to 16 decimal digits <= 54 bits UINT128 fstar = { {0x0ull, 0x0ull} }; UINT128 P128; x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity res = x_sign | 0x7800000000000000ull; BID_RETURN (res); } // unpack x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11 (condition will be 0), then // the exponent is G[0:w+1] exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398; C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical C1 = 0; } } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398; C1 = (x & MASK_BINARY_SIG1); } // if x is 0 or non-canonical return 0 preserving the sign bit and // the preferred exponent of MAX(Q(x), 0) if (C1 == 0) { if (exp < 0) exp = 0; res = x_sign | (((UINT64) exp + 398) << 53); BID_RETURN (res); } // x is a finite non-zero number (not 0, non-canonical, or special) switch (rnd_mode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // return 0 if (exp <= -(p+1)) if (exp <= -17) { res = x_sign | 0x31c0000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_DOWN: // return 0 if (exp <= -p) if (exp <= -16) { if (x_sign) { res = 0xb1c0000000000001ull; } else { res = 0x31c0000000000000ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_UP: // return 0 if (exp <= -p) if (exp <= -16) { if (x_sign) { res = 0xb1c0000000000000ull; } else { res = 0x31c0000000000001ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_TO_ZERO: // return 0 if (exp <= -p) if (exp <= -16) { res = x_sign | 0x31c0000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; } // end switch () // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 q = 16; } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } } if (exp >= 0) { // -exp <= 0 // the argument is an integer already res = x; BID_RETURN (res); } switch (rnd_mode) { case ROUNDING_TO_NEAREST: if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // if (0 < f* < 10^(-x)) then the result is a midpoint // since round_to_even, subtract 1 if current result is odd if ((res & 0x0000000000000001ull) && (fstar.w[1] == 0) && (fstar.w[0] < ten2mk64[ind - 1])) { res--; } // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact // fstar.w[0] - 0x8000000000000000ull is f* - 1/2 if ((fstar.w[0] - 0x8000000000000000ull) > ten2mk64[ind - 1]) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 21 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 if (fstar.w[1] > onehalf128[ind - 1] || fstar.w[0] > ten2mk64[ind - 1]) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp < 0 // the result is +0 or -0 res = x_sign | 0x31c0000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_TIES_AWAY: if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // if (0 < f* < 10^(-x)) then the result is a midpoint // C* = floor(C*) - logical right shift; C* has p decimal digits, // correct by Prop. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // midpoints are already rounded correctly // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact // fstar.w[0] - 0x8000000000000000ull is f* - 1/2 if ((fstar.w[0] - 0x8000000000000000ull) > ten2mk64[ind - 1]) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 21 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 if (fstar.w[1] > onehalf128[ind - 1] || fstar.w[0] > ten2mk64[ind - 1]) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp < 0 // the result is +0 or -0 res = x_sign | 0x31c0000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_DOWN: if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // if (0 < f* < 10^(-x)) then the result is exact // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // if (f* > 10^(-x)) then the result is inexact if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1])) { if (x_sign) { // if negative and not exact, increment magnitude res++; } *pfpsf |= INEXACT_EXCEPTION; } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 // the result is +0 or -1 if (x_sign) { res = 0xb1c0000000000001ull; } else { res = 0x31c0000000000000ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_UP: if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // if (0 < f* < 10^(-x)) then the result is exact // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // if (f* > 10^(-x)) then the result is inexact if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1])) { if (!x_sign) { // if positive and not exact, increment magnitude res++; } *pfpsf |= INEXACT_EXCEPTION; } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 // the result is -0 or +1 if (x_sign) { res = 0xb1c0000000000000ull; } else { res = 0x31c0000000000001ull; } *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; case ROUNDING_TO_ZERO: if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // if (0 < f* < 10^(-x)) then the result is exact // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // if (f* > 10^(-x)) then the result is inexact if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1])) { *pfpsf |= INEXACT_EXCEPTION; } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp < 0 // the result is +0 or -0 res = x_sign | 0x31c0000000000000ull; *pfpsf |= INEXACT_EXCEPTION; BID_RETURN (res); } break; } // end switch () BID_RETURN (res); } /***************************************************************************** * BID64_round_integral_nearest_even ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_round_integral_nearest_even (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_round_integral_nearest_even (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT64 x_sign; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 fstar; UINT128 P128; x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity res = x_sign | 0x7800000000000000ull; BID_RETURN (res); } // unpack x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11 (condition will be 0), then // the exponent is G[0:w+1] exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398; C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical C1 = 0; } } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398; C1 = (x & MASK_BINARY_SIG1); } // if x is 0 or non-canonical if (C1 == 0) { if (exp < 0) exp = 0; res = x_sign | (((UINT64) exp + 398) << 53); BID_RETURN (res); } // x is a finite non-zero number (not 0, non-canonical, or special) // return 0 if (exp <= -(p+1)) if (exp <= -17) { res = x_sign | 0x31c0000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 q = 16; } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } } if (exp >= 0) { // -exp <= 0 // the argument is an integer already res = x; BID_RETURN (res); } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // if (0 < f* < 10^(-x)) then the result is a midpoint // since round_to_even, subtract 1 if current result is odd if ((res & 0x0000000000000001ull) && (fstar.w[1] == 0) && (fstar.w[0] < ten2mk64[ind - 1])) { res--; } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp < 0 // the result is +0 or -0 res = x_sign | 0x31c0000000000000ull; BID_RETURN (res); } } /***************************************************************************** * BID64_round_integral_negative *****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_round_integral_negative (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_round_integral_negative (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT64 x_sign; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; int x_nr_bits; int q, ind, shift; UINT64 C1; // UINT64 res is C* at first - represents up to 34 decimal digits ~ 113 bits UINT128 fstar; UINT128 P128; x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity res = x_sign | 0x7800000000000000ull; BID_RETURN (res); } // unpack x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11 (condition will be 0), then // the exponent is G[0:w+1] exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398; C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical C1 = 0; } } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398; C1 = (x & MASK_BINARY_SIG1); } // if x is 0 or non-canonical if (C1 == 0) { if (exp < 0) exp = 0; res = x_sign | (((UINT64) exp + 398) << 53); BID_RETURN (res); } // x is a finite non-zero number (not 0, non-canonical, or special) // return 0 if (exp <= -p) if (exp <= -16) { if (x_sign) { res = 0xb1c0000000000001ull; } else { res = 0x31c0000000000000ull; } BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 q = 16; } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } } if (exp >= 0) { // -exp <= 0 // the argument is an integer already res = x; BID_RETURN (res); } else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // if (0 < f* < 10^(-x)) then the result is exact // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // if (f* > 10^(-x)) then the result is inexact if (x_sign && ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1]))) { // if negative and not exact, increment magnitude res++; } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 // the result is +0 or -1 if (x_sign) { res = 0xb1c0000000000001ull; } else { res = 0x31c0000000000000ull; } BID_RETURN (res); } } /***************************************************************************** * BID64_round_integral_positive ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_round_integral_positive (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_round_integral_positive (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT64 x_sign; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; int x_nr_bits; int q, ind, shift; UINT64 C1; // UINT64 res is C* at first - represents up to 34 decimal digits ~ 113 bits UINT128 fstar; UINT128 P128; x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity res = x_sign | 0x7800000000000000ull; BID_RETURN (res); } // unpack x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11 (condition will be 0), then // the exponent is G[0:w+1] exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398; C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical C1 = 0; } } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398; C1 = (x & MASK_BINARY_SIG1); } // if x is 0 or non-canonical if (C1 == 0) { if (exp < 0) exp = 0; res = x_sign | (((UINT64) exp + 398) << 53); BID_RETURN (res); } // x is a finite non-zero number (not 0, non-canonical, or special) // return 0 if (exp <= -p) if (exp <= -16) { if (x_sign) { res = 0xb1c0000000000000ull; } else { res = 0x31c0000000000001ull; } BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 q = 16; } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } } if (exp >= 0) { // -exp <= 0 // the argument is an integer already res = x; BID_RETURN (res); } else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // if (0 < f* < 10^(-x)) then the result is exact // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; fstar.w[1] = 0; fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; } // if (f* > 10^(-x)) then the result is inexact if (!x_sign && ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1]))) { // if positive and not exact, increment magnitude res++; } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp <= 0 // the result is -0 or +1 if (x_sign) { res = 0xb1c0000000000000ull; } else { res = 0x31c0000000000001ull; } BID_RETURN (res); } } /***************************************************************************** * BID64_round_integral_zero ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_round_integral_zero (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_round_integral_zero (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT64 x_sign; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; int x_nr_bits; int q, ind, shift; UINT64 C1; // UINT64 res is C* at first - represents up to 34 decimal digits ~ 113 bits UINT128 P128; x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity res = x_sign | 0x7800000000000000ull; BID_RETURN (res); } // unpack x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11 (condition will be 0), then // the exponent is G[0:w+1] exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398; C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical C1 = 0; } } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398; C1 = (x & MASK_BINARY_SIG1); } // if x is 0 or non-canonical if (C1 == 0) { if (exp < 0) exp = 0; res = x_sign | (((UINT64) exp + 398) << 53); BID_RETURN (res); } // x is a finite non-zero number (not 0, non-canonical, or special) // return 0 if (exp <= -p) if (exp <= -16) { res = x_sign | 0x31c0000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 q = 16; } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } } if (exp >= 0) { // -exp <= 0 // the argument is an integer already res = x; BID_RETURN (res); } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 127 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // if (0 < f* < 10^(-x)) then the result is exact // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; // redundant fstar.w[1] = 0; // redundant fstar.w[0] = P128.w[0]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); // redundant fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; // redundant fstar.w[0] = P128.w[0]; } // if (f* > 10^(-x)) then the result is inexact // if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind-1])){ // // redundant // } // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp < 0 // the result is +0 or -0 res = x_sign | 0x31c0000000000000ull; BID_RETURN (res); } } /***************************************************************************** * BID64_round_integral_nearest_away ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_round_integral_nearest_away (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_round_integral_nearest_away (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res = 0xbaddbaddbaddbaddull; UINT64 x_sign; int exp; // unbiased exponent // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64) BID_UI64DOUBLE tmp1; int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 P128; x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // check for NaNs and infinities if ((x & MASK_NAN) == MASK_NAN) { // check for NaN if ((x & 0x0003ffffffffffffull) > 999999999999999ull) x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits else x = x & 0xfe03ffffffffffffull; // clear G6-G12 if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (SNaN) res = x & 0xfdffffffffffffffull; } else { // QNaN res = x; } BID_RETURN (res); } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity res = x_sign | 0x7800000000000000ull; BID_RETURN (res); } // unpack x if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // if the steering bits are 11 (condition will be 0), then // the exponent is G[0:w+1] exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398; C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical C1 = 0; } } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398; C1 = (x & MASK_BINARY_SIG1); } // if x is 0 or non-canonical if (C1 == 0) { if (exp < 0) exp = 0; res = x_sign | (((UINT64) exp + 398) << 53); BID_RETURN (res); } // x is a finite non-zero number (not 0, non-canonical, or special) // return 0 if (exp <= -(p+1)) if (exp <= -17) { res = x_sign | 0x31c0000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 q = 16; } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } } if (exp >= 0) { // -exp <= 0 // the argument is an integer already res = x; BID_RETURN (res); } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q // need to shift right -exp digits from the coefficient; the exp will be 0 ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 16 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]); // if (0 < f* < 10^(-x)) then the result is a midpoint // C* = floor(C*) - logical right shift; C* has p decimal digits, // correct by Prop. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0 res = P128.w[1]; } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63 shift = shiftright128[ind - 1]; // 3 <= shift <= 63 res = (P128.w[1] >> shift); } // midpoints are already rounded correctly // set exponent to zero as it was negative before. res = x_sign | 0x31c0000000000000ull | res; BID_RETURN (res); } else { // if exp < 0 and q + exp < 0 // the result is +0 or -0 res = x_sign | 0x31c0000000000000ull; BID_RETURN (res); } } libdfp-1.0.17/libbid/bid64_scalb.c000066400000000000000000000061361504475242000165160ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define MAX_FORMAT_DIGITS 16 #define DECIMAL_EXPONENT_BIAS 398 #define MAX_DECIMAL_EXPONENT 767 #if DECIMAL_CALL_BY_REFERENCE void bid64_scalb (UINT64 * pres, UINT64 * px, int *pn _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x; int n; #else UINT64 bid64_scalb (UINT64 x, int n _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 sign_x, coefficient_x, res; SINT64 exp64; int exponent_x, rmode; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; n = *pn; #endif // unpack arguments, check for NaN or Infinity if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { // x is Inf. or NaN or 0 #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // y is sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif if (coefficient_x) res = coefficient_x & QUIET_MASK64; else { exp64 = (SINT64) exponent_x + (SINT64) n; if(exp64<0) exp64=0; if(exp64>MAX_DECIMAL_EXPONENT) exp64=MAX_DECIMAL_EXPONENT; exponent_x = exp64; res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x); // 0 } BID_RETURN (res); } exp64 = (SINT64) exponent_x + (SINT64) n; exponent_x = exp64; if ((UINT32) exponent_x <= MAX_DECIMAL_EXPONENT) { res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x); BID_RETURN (res); } // check for overflow if (exp64 > MAX_DECIMAL_EXPONENT) { // try to normalize coefficient while ((coefficient_x < 1000000000000000ull) && (exp64 > MAX_DECIMAL_EXPONENT)) { // coefficient_x < 10^15, scale by 10 coefficient_x = (coefficient_x << 1) + (coefficient_x << 3); exponent_x--; exp64--; } if (exp64 <= MAX_DECIMAL_EXPONENT) { res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x); BID_RETURN (res); } else exponent_x = 0x7fffffff; // overflow } // exponent < 0 // the BID pack routine will round the coefficient rmode = rnd_mode; res = get_BID64 (sign_x, exponent_x, coefficient_x, rmode, pfpsf); BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_sqrt.c000066400000000000000000000346521504475242000164270ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * BID64 square root ***************************************************************************** * * Algorithm description: * * if(exponent_x is odd) * scale coefficient_x by 10, adjust exponent * - get lower estimate for number of digits in coefficient_x * - scale coefficient x to between 31 and 33 decimal digits * - in parallel, check for exact case and return if true * - get high part of result coefficient using double precision sqrt * - compute remainder and refine coefficient in one iteration (which * modifies it by at most 1) * - result exponent is easy to compute from the adjusted arg. exponent * ****************************************************************************/ #include "bid_internal.h" #include "bid_sqrt_macros.h" #ifdef UNCHANGED_BINARY_STATUS_FLAGS #include #define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT #endif extern double sqrt (double); #if DECIMAL_CALL_BY_REFERENCE void bid64_sqrt (UINT64 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x; #else UINT64 bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CA, CT; UINT64 sign_x, coefficient_x; UINT64 Q, Q2, A10, C4, R, R2, QE, res; SINT64 D; int_double t_scale; int_float tempx; double da, dq, da_h, da_l, dqe; int exponent_x, exponent_q, bin_expon_cx; int digits_x; int scale; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif x = *px; #endif // unpack arguments, check for NaN or Infinity if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { // x is Inf. or NaN or 0 if ((x & INFINITY_MASK64) == INFINITY_MASK64) { res = coefficient_x; if ((coefficient_x & SSNAN_MASK64) == SINFINITY_MASK64) // -Infinity { res = NAN_MASK64; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } #ifdef SET_STATUS_FLAGS if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (res & QUIET_MASK64); } // x is 0 exponent_x = (exponent_x + DECIMAL_EXPONENT_BIAS) >> 1; res = sign_x | (((UINT64) exponent_x) << 53); BID_RETURN (res); } // x<0? if (sign_x && coefficient_x) { res = NAN_MASK64; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif //--- get number of bits in the coefficient of x --- tempx.d = (float) coefficient_x; bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f; digits_x = estimate_decimal_digits[bin_expon_cx]; // add test for range if (coefficient_x >= power10_index_binexp[bin_expon_cx]) digits_x++; A10 = coefficient_x; if (exponent_x & 1) { A10 = (A10 << 2) + A10; A10 += A10; } dqe = sqrt ((double) A10); QE = (UINT32) dqe; if (QE * QE == A10) { res = very_fast_get_BID64 (0, (exponent_x + DECIMAL_EXPONENT_BIAS) >> 1, QE); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } // if exponent is odd, scale coefficient by 10 scale = 31 - digits_x; exponent_q = exponent_x - scale; scale += (exponent_q & 1); // exp. bias is even CT = power10_table_128[scale]; __mul_64x128_short (CA, coefficient_x, CT); // 2^64 t_scale.i = 0x43f0000000000000ull; // convert CA to DP da_h = CA.w[1]; da_l = CA.w[0]; da = da_h * t_scale.d + da_l; dq = sqrt (da); Q = (UINT64) dq; // get sign(sqrt(CA)-Q) R = CA.w[0] - Q * Q; R = ((SINT64) R) >> 63; D = R + R + 1; exponent_q = (exponent_q + DECIMAL_EXPONENT_BIAS) >> 1; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY if (!((rnd_mode) & 3)) { #endif #endif // midpoint to check Q2 = Q + Q + D; C4 = CA.w[0] << 2; // get sign(-sqrt(CA)+Midpoint) R2 = Q2 * Q2 - C4; R2 = ((SINT64) R2) >> 63; // adjust Q if R!=R2 Q += (D & (R ^ R2)); #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY } else { C4 = CA.w[0]; Q += D; if ((SINT64) (Q * Q - C4) > 0) Q--; if (rnd_mode == ROUNDING_UP) Q++; } #endif #endif res = fast_get_BID64 (0, exponent_q, Q); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } TYPE0_FUNCTION_ARG1 (UINT64, bid64q_sqrt, x) UINT256 M256, C4, C8; UINT128 CX, CX2, A10, S2, T128, CS, CSM, CS2, C256, CS1, mul_factor2_long = { {0x0ull, 0x0ull} }, QH, Tmp, TP128, Qh, Ql; UINT64 sign_x, Carry, B10, res, mul_factor, mul_factor2 = 0x0ull, CS0; SINT64 D; int_float fx, f64; int exponent_x, bin_expon_cx, done = 0; int digits, scale, exponent_q = 0, exact = 1, amount, extra_digits; #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res = CX.w[1]; // NaN ? if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #ifdef SET_STATUS_FLAGS if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull); Tmp.w[0] = CX.w[0]; TP128 = reciprocals10_128[18]; __mul_128x128_full (Qh, Ql, Tmp, TP128); amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; BID_RETURN (res); } // x is Infinity? if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { if (sign_x) { // -Inf, return NaN res = 0x7c00000000000000ull; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } BID_RETURN (res); } // x is 0 otherwise exponent_x = ((exponent_x - DECIMAL_EXPONENT_BIAS_128) >> 1) + DECIMAL_EXPONENT_BIAS; if (exponent_x < 0) exponent_x = 0; if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; //res= sign_x | (((UINT64)exponent_x)<<53); res = get_BID64 (sign_x, exponent_x, 0, rnd_mode, pfpsf); BID_RETURN (res); } if (sign_x) { res = 0x7c00000000000000ull; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif // 2^64 f64.i = 0x5f800000; // fx ~ CX fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f; digits = estimate_decimal_digits[bin_expon_cx]; A10 = CX; if (exponent_x & 1) { A10.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61); A10.w[0] = CX.w[0] << 3; CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63); CX2.w[0] = CX.w[0] << 1; __add_128_128 (A10, A10, CX2); } C256.w[1] = A10.w[1]; C256.w[0] = A10.w[0]; CS.w[0] = short_sqrt128 (A10); CS.w[1] = 0; mul_factor = 0; // check for exact result if (CS.w[0] < 10000000000000000ull) { if (CS.w[0] * CS.w[0] == A10.w[0]) { __sqr64_fast (S2, CS.w[0]); if (S2.w[1] == A10.w[1]) // && S2.w[0]==A10.w[0]) { res = get_BID64 (0, ((exponent_x - DECIMAL_EXPONENT_BIAS_128) >> 1) + DECIMAL_EXPONENT_BIAS, CS.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif BID_RETURN (res); } } if (CS.w[0] >= 1000000000000000ull) { done = 1; exponent_q = exponent_x; C256.w[1] = A10.w[1]; C256.w[0] = A10.w[0]; } #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif exact = 0; } else { B10 = 0x3333333333333334ull; __mul_64x64_to_128_full (CS2, CS.w[0], B10); CS0 = CS2.w[1] >> 1; if (CS.w[0] != ((CS0 << 3) + (CS0 << 1))) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif exact = 0; } done = 1; CS.w[0] = CS0; exponent_q = exponent_x + 2; mul_factor = 10; mul_factor2 = 100; if (CS.w[0] >= 10000000000000000ull) { __mul_64x64_to_128_full (CS2, CS.w[0], B10); CS0 = CS2.w[1] >> 1; if (CS.w[0] != ((CS0 << 3) + (CS0 << 1))) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif exact = 0; } exponent_q += 2; CS.w[0] = CS0; mul_factor = 100; mul_factor2 = 10000; } if (exact) { CS0 = CS.w[0] * mul_factor; __sqr64_fast (CS1, CS0) if ((CS1.w[0] != A10.w[0]) || (CS1.w[1] != A10.w[1])) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INEXACT_EXCEPTION); #endif exact = 0; } } } if (!done) { // get number of digits in CX D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1]; if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) digits++; // if exponent is odd, scale coefficient by 10 scale = 31 - digits; exponent_q = exponent_x - scale; scale += (exponent_q & 1); // exp. bias is even T128 = power10_table_128[scale]; __mul_128x128_low (C256, CX, T128); CS.w[0] = short_sqrt128 (C256); } //printf("CS=%016I64x\n",CS.w[0]); exponent_q = ((exponent_q - DECIMAL_EXPONENT_BIAS_128) >> 1) + DECIMAL_EXPONENT_BIAS; if ((exponent_q < 0) && (exponent_q + MAX_FORMAT_DIGITS >= 0)) { extra_digits = -exponent_q; exponent_q = 0; // get coeff*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (QH, CS.w[0], reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; CS0 = QH.w[1] >> amount; #ifdef SET_STATUS_FLAGS if (exact) { if (CS.w[0] != CS0 * power10_table_128[extra_digits].w[0]) exact = 0; } if (!exact) __set_status_flags (pfpsf, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif CS.w[0] = CS0; if (!mul_factor) mul_factor = 1; mul_factor *= power10_table_128[extra_digits].w[0]; __mul_64x64_to_128 (mul_factor2_long, mul_factor, mul_factor); if (mul_factor2_long.w[1]) mul_factor2 = 0; else mul_factor2 = mul_factor2_long.w[1]; } // 4*C256 C4.w[1] = (C256.w[1] << 2) | (C256.w[0] >> 62); C4.w[0] = C256.w[0] << 2; #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY if (!((rnd_mode) & 3)) { #endif #endif // compare to midpoints CSM.w[0] = (CS.w[0] + CS.w[0]) | 1; //printf("C256=%016I64x %016I64x, CSM=%016I64x %016I64x %016I64x\n",C4.w[1],C4.w[0],CSM.w[1],CSM.w[0], CS.w[0]); if (mul_factor) CSM.w[0] *= mul_factor; // CSM^2 __mul_64x64_to_128 (M256, CSM.w[0], CSM.w[0]); //__mul_128x128_to_256(M256, CSM, CSM); if (C4.w[1] > M256.w[1] || (C4.w[1] == M256.w[1] && C4.w[0] > M256.w[0])) { // round up CS.w[0]++; } else { C8.w[0] = CS.w[0] << 3; C8.w[1] = 0; if (mul_factor) { if (mul_factor2) { __mul_64x64_to_128 (C8, C8.w[0], mul_factor2); } else { __mul_64x128_low (C8, C8.w[0], mul_factor2_long); } } // M256 - 8*CSM __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]); M256.w[1] = M256.w[1] - C8.w[1] - Carry; // if CSM' > C256, round up if (M256.w[1] > C4.w[1] || (M256.w[1] == C4.w[1] && M256.w[0] > C4.w[0])) { // round down if (CS.w[0]) CS.w[0]--; } } #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY } else { CS.w[0]++; CSM.w[0] = CS.w[0]; C8.w[0] = CSM.w[0] << 1; if (mul_factor) CSM.w[0] *= mul_factor; __mul_64x64_to_128 (M256, CSM.w[0], CSM.w[0]); C8.w[1] = 0; if (mul_factor) { if (mul_factor2) { __mul_64x64_to_128 (C8, C8.w[0], mul_factor2); } else { __mul_64x128_low (C8, C8.w[0], mul_factor2_long); } } //printf("C256=%016I64x %016I64x, CSM=%016I64x %016I64x %016I64x\n",C256.w[1],C256.w[0],M256.w[1],M256.w[0], CS.w[0]); if (M256.w[1] > C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])) { __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]); M256.w[1] = M256.w[1] - Carry - C8.w[1]; M256.w[0]++; if (!M256.w[0]) { M256.w[1]++; } if ((M256.w[1] > C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])) && (CS.w[0] > 1)) { CS.w[0]--; if (CS.w[0] > 1) { __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]); M256.w[1] = M256.w[1] - Carry - C8.w[1]; M256.w[0]++; if (!M256.w[0]) { M256.w[1]++; } if (M256.w[1] > C256.w[1] || (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])) CS.w[0]--; } } } else { /*__add_carry_out(M256.w[0], Carry, M256.w[0], C8.w[0]); M256.w[1] = M256.w[1] + Carry + C8.w[1]; M256.w[0]++; if(!M256.w[0]) { M256.w[1]++; } CS.w[0]++; if(M256.w[1]. */ #include #include "bid_internal.h" #include "bid128_2_str.h" #include "bid128_2_str_macros.h" #define MAX_FORMAT_DIGITS 16 #define DECIMAL_EXPONENT_BIAS 398 #define MAX_DECIMAL_EXPONENT 767 #if DECIMAL_CALL_BY_REFERENCE void bid64_to_string (char *ps, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x; #else void bid64_to_string (char *ps, UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif // the destination string (pointed to by ps) must be pre-allocated UINT64 sign_x, coefficient_x, D, ER10; int istart, exponent_x, j, digits_x, bin_expon_cx; int_float tempx; UINT32 MiDi[12], *ptr; UINT64 HI_18Dig, LO_18Dig, Tmp; char *c_ptr_start, *c_ptr; int midi_ind, k_lcv, len; unsigned int save_fpsf; #if DECIMAL_CALL_BY_REFERENCE x = *px; #endif save_fpsf = *pfpsf; // place holder only // unpack arguments, check for NaN or Infinity if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { // x is Inf. or NaN or 0 // Inf or NaN? if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) { ps[0] = (sign_x) ? '-' : '+'; ps[1] = ((x & MASK_SNAN) == MASK_SNAN)? 'S':'Q'; ps[2] = 'N'; ps[3] = 'a'; ps[4] = 'N'; ps[5] = 0; return; } // x is Inf ps[0] = (sign_x) ? '-' : '+'; ps[1] = 'I'; ps[2] = 'n'; ps[3] = 'f'; ps[4] = 0; return; } // 0 istart = 0; if (sign_x) { ps[istart++] = '-'; } ps[istart++] = '0'; ps[istart++] = 'E'; exponent_x -= 398; if (exponent_x < 0) { ps[istart++] = '-'; exponent_x = -exponent_x; } else ps[istart++] = '+'; if (exponent_x) { // get decimal digits in coefficient_x tempx.d = (float) exponent_x; bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f; digits_x = estimate_decimal_digits[bin_expon_cx]; if ((UINT64)exponent_x >= power10_table_128[digits_x].w[0]) digits_x++; j = istart + digits_x - 1; istart = j + 1; // 2^32/10 ER10 = 0x1999999a; while (exponent_x > 9) { D = (UINT64) exponent_x *ER10; D >>= 32; exponent_x = exponent_x - (D << 1) - (D << 3); ps[j--] = '0' + (char) exponent_x; exponent_x = D; } ps[j] = '0' + (char) exponent_x; } else { ps[istart++] = '0'; } ps[istart] = 0; return; } // convert expon, coeff to ASCII exponent_x -= DECIMAL_EXPONENT_BIAS; ER10 = 0x1999999a; istart = 0; if (sign_x) { ps[0] = '-'; istart = 1; } // if zero or non-canonical, set coefficient to '0' if ((coefficient_x > 9999999999999999ull) || // non-canonical ((coefficient_x == 0)) // significand is zero ) { ps[istart++] = '0'; } else { /* **************************************************** This takes a bid coefficient in C1.w[1],C1.w[0] and put the converted character sequence at location starting at &(str[k]). The function returns the number of MiDi returned. Note that the character sequence does not have leading zeros EXCEPT when the input is of zero value. It will then output 1 character '0' The algorithm essentailly tries first to get a sequence of Millenial Digits "MiDi" and then uses table lookup to get the character strings of these MiDis. **************************************************** */ /* Algorithm first decompose possibly 34 digits in hi and lo 18 digits. (The high can have at most 16 digits). It then uses macro that handle 18 digit portions. The first step is to get hi and lo such that 2^(64) C1.w[1] + C1.w[0] = hi * 10^18 + lo, 0 <= lo < 10^18. We use a table lookup method to obtain the hi and lo 18 digits. [C1.w[1],C1.w[0]] = c_8 2^(107) + c_7 2^(101) + ... + c_0 2^(59) + d where 0 <= d < 2^59 and each c_j has 6 bits. Because d fits in 18 digits, we set hi = 0, and lo = d to begin with. We then retrieve from a table, for j = 0, 1, ..., 8 that gives us A and B where c_j 2^(59+6j) = A * 10^18 + B. hi += A ; lo += B; After each accumulation into lo, we normalize immediately. So at the end, we have the decomposition as we need. */ Tmp = coefficient_x >> 59; LO_18Dig = (coefficient_x << 5) >> 5; HI_18Dig = 0; k_lcv = 0; while (Tmp) { midi_ind = (int) (Tmp & 0x000000000000003FLL); midi_ind <<= 1; Tmp >>= 6; HI_18Dig += mod10_18_tbl[k_lcv][midi_ind++]; LO_18Dig += mod10_18_tbl[k_lcv++][midi_ind]; __L0_Normalize_10to18 (HI_18Dig, LO_18Dig); } ptr = MiDi; __L1_Split_MiDi_6_Lead (LO_18Dig, ptr); len = ptr - MiDi; c_ptr_start = &(ps[istart]); c_ptr = c_ptr_start; /* now convert the MiDi into character strings */ __L0_MiDi2Str_Lead (MiDi[0], c_ptr); for (k_lcv = 1; k_lcv < len; k_lcv++) { __L0_MiDi2Str (MiDi[k_lcv], c_ptr); } istart = istart + (c_ptr - c_ptr_start); } ps[istart++] = 'E'; if (exponent_x < 0) { ps[istart++] = '-'; exponent_x = -exponent_x; } else ps[istart++] = '+'; if (exponent_x) { // get decimal digits in coefficient_x tempx.d = (float) exponent_x; bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f; digits_x = estimate_decimal_digits[bin_expon_cx]; if ((UINT64)exponent_x >= power10_table_128[digits_x].w[0]) digits_x++; j = istart + digits_x - 1; istart = j + 1; // 2^32/10 ER10 = 0x1999999a; while (exponent_x > 9) { D = (UINT64) exponent_x *ER10; D >>= 32; exponent_x = exponent_x - (D << 1) - (D << 3); ps[j--] = '0' + (char) exponent_x; exponent_x = D; } ps[j] = '0' + (char) exponent_x; } else { ps[istart++] = '0'; } ps[istart] = 0; return; } #if DECIMAL_CALL_BY_REFERENCE void bid64_from_string (UINT64 * pres, char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #else UINT64 bid64_from_string (char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 sign_x, coefficient_x = 0, rounded = 0, res; int expon_x = 0, sgn_expon, ndigits, add_expon = 0, midpoint = 0, rounded_up = 0; int dec_expon_scale = 0, right_radix_leading_zeros = 0, rdx_pt_enc = 0; unsigned fpsc; char c; unsigned int save_fpsf; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif save_fpsf = *pfpsf; // place holder only // eliminate leading whitespace while (((*ps == ' ') || (*ps == '\t')) && (*ps)) ps++; // get first non-whitespace character c = *ps; // detect special cases (INF or NaN) if (!c || (c != '.' && c != '-' && c != '+' && (c < '0' || c > '9'))) { // Infinity? if ((tolower_macro (ps[0]) == 'i' && tolower_macro (ps[1]) == 'n' && tolower_macro (ps[2]) == 'f') && (!ps[3] || (tolower_macro (ps[3]) == 'i' && tolower_macro (ps[4]) == 'n' && tolower_macro (ps[5]) == 'i' && tolower_macro (ps[6]) == 't' && tolower_macro (ps[7]) == 'y' && !ps[8]))) { res = 0x7800000000000000ull; BID_RETURN (res); } // return sNaN if (tolower_macro (ps[0]) == 's' && tolower_macro (ps[1]) == 'n' && tolower_macro (ps[2]) == 'a' && tolower_macro (ps[3]) == 'n') { // case insensitive check for snan res = 0x7e00000000000000ull; BID_RETURN (res); } else { // return qNaN res = 0x7c00000000000000ull; BID_RETURN (res); } } // detect +INF or -INF if ((tolower_macro (ps[1]) == 'i' && tolower_macro (ps[2]) == 'n' && tolower_macro (ps[3]) == 'f') && (!ps[4] || (tolower_macro (ps[4]) == 'i' && tolower_macro (ps[5]) == 'n' && tolower_macro (ps[6]) == 'i' && tolower_macro (ps[7]) == 't' && tolower_macro (ps[8]) == 'y' && !ps[9]))) { if (c == '+') res = 0x7800000000000000ull; else if (c == '-') res = 0xf800000000000000ull; else res = 0x7c00000000000000ull; BID_RETURN (res); } // if +sNaN, +SNaN, -sNaN, or -SNaN if (tolower_macro (ps[1]) == 's' && tolower_macro (ps[2]) == 'n' && tolower_macro (ps[3]) == 'a' && tolower_macro (ps[4]) == 'n') { if (c == '-') res = 0xfe00000000000000ull; else res = 0x7e00000000000000ull; BID_RETURN (res); } // determine sign if (c == '-') sign_x = 0x8000000000000000ull; else sign_x = 0; // get next character if leading +/- sign if (c == '-' || c == '+') { ps++; c = *ps; } // if c isn't a decimal point or a decimal digit, return NaN if (c != '.' && (c < '0' || c > '9')) { // return NaN res = 0x7c00000000000000ull | sign_x; BID_RETURN (res); } rdx_pt_enc = 0; // detect zero (and eliminate/ignore leading zeros) if (*(ps) == '0' || *(ps) == '.') { if (*(ps) == '.') { rdx_pt_enc = 1; ps++; } // if all numbers are zeros (with possibly 1 radix point, the number is zero // should catch cases such as: 000.0 while (*ps == '0') { ps++; // for numbers such as 0.0000000000000000000000000000000000001001, // we want to count the leading zeros if (rdx_pt_enc) { right_radix_leading_zeros++; } // if this character is a radix point, make sure we haven't already // encountered one if (*(ps) == '.') { if (rdx_pt_enc == 0) { rdx_pt_enc = 1; // if this is the first radix point, and the next character is NULL, // we have a zero if (!*(ps + 1)) { res = ((UINT64) (398 - right_radix_leading_zeros) << 53) | sign_x; BID_RETURN (res); } ps = ps + 1; } else { // if 2 radix points, return NaN res = 0x7c00000000000000ull | sign_x; BID_RETURN (res); } } else if (!*(ps)) { //pres->w[1] = 0x3040000000000000ull | sign_x; res = ((UINT64) (398 - right_radix_leading_zeros) << 53) | sign_x; BID_RETURN (res); } } } c = *ps; ndigits = 0; while ((c >= '0' && c <= '9') || c == '.') { if (c == '.') { if (rdx_pt_enc) { // return NaN res = 0x7c00000000000000ull | sign_x; BID_RETURN (res); } rdx_pt_enc = 1; ps++; c = *ps; continue; } dec_expon_scale += rdx_pt_enc; ndigits++; if (ndigits <= 16) { coefficient_x = (coefficient_x << 1) + (coefficient_x << 3); coefficient_x += (UINT64) (c - '0'); } else if (ndigits == 17) { // coefficient rounding switch(rnd_mode){ case ROUNDING_TO_NEAREST: midpoint = (c == '5' && !(coefficient_x & 1)) ? 1 : 0; // if coefficient is even and c is 5, prepare to round up if // subsequent digit is nonzero // if str[MAXDIG+1] > 5, we MUST round up // if str[MAXDIG+1] == 5 and coefficient is ODD, ROUND UP! if (c > '5' || (c == '5' && (coefficient_x & 1))) { coefficient_x++; rounded_up = 1; break; case ROUNDING_DOWN: if(sign_x) { coefficient_x++; rounded_up=1; } break; case ROUNDING_UP: if(!sign_x) { coefficient_x++; rounded_up=1; } break; case ROUNDING_TIES_AWAY: if(c>='5') { coefficient_x++; rounded_up=1; } break; } if (coefficient_x == 10000000000000000ull) { coefficient_x = 1000000000000000ull; add_expon = 1; } } if (c > '0') rounded = 1; add_expon += 1; } else { // ndigits > 17 add_expon++; if (midpoint && c > '0') { coefficient_x++; midpoint = 0; rounded_up = 1; } if (c > '0') rounded = 1; } ps++; c = *ps; } add_expon -= (dec_expon_scale + right_radix_leading_zeros); if (!c) { res = fast_get_BID64_check_OF (sign_x, add_expon + DECIMAL_EXPONENT_BIAS, coefficient_x, 0, &fpsc); BID_RETURN (res); } if (c != 'E' && c != 'e') { // return NaN res = 0x7c00000000000000ull | sign_x; BID_RETURN (res); } ps++; c = *ps; sgn_expon = (c == '-') ? 1 : 0; if (c == '-' || c == '+') { ps++; c = *ps; } if (!c || c < '0' || c > '9') { // return NaN res = 0x7c00000000000000ull | sign_x; BID_RETURN (res); } while (c >= '0' && c <= '9') { expon_x = (expon_x << 1) + (expon_x << 3); expon_x += (int) (c - '0'); ps++; c = *ps; } if (c) { // return NaN res = 0x7c00000000000000ull | sign_x; BID_RETURN (res); } if (sgn_expon) expon_x = -expon_x; expon_x += add_expon + DECIMAL_EXPONENT_BIAS; if (expon_x < 0) { if (rounded_up) coefficient_x--; rnd_mode = 0; res = get_BID64_UF (sign_x, expon_x, coefficient_x, rounded, rnd_mode, &fpsc); BID_RETURN (res); } res = get_BID64 (sign_x, expon_x, coefficient_x, rnd_mode, &fpsc); BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_to_bid128.c000066400000000000000000000167351504475242000171330ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define BID_128RES #include "bid_internal.h" /* * Takes a BID64 as input and converts it to a BID128 and returns it. */ TYPE0_FUNCTION_ARGTYPE1_NORND (UINT128, bid64_to_bid128, UINT64, x) UINT128 new_coeff, res; UINT64 sign_x; int exponent_x; UINT64 coefficient_x; if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { if (((x) << 1) >= 0xf000000000000000ull) { #ifdef SET_STATUS_FLAGS if (((x) & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[0] = (coefficient_x & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((coefficient_x) & 0xfc00000000000000ull); BID_RETURN (res); } } new_coeff.w[0] = coefficient_x; new_coeff.w[1] = 0; get_BID128_very_fast (&res, sign_x, exponent_x + DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS, new_coeff); BID_RETURN (res); } // convert_bid64_to_bid128 /* * Takes a BID128 as input and converts it to a BID64 and returns it. */ #if DECIMAL_CALL_BY_REFERENCE void bid128_to_bid64 (UINT64 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else UINT64 bid128_to_bid64 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 CX, T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1, CX1; UINT64 sign_x, carry, cy, res; SINT64 D; int_float f64, fx; int exponent_x, extra_digits, amount, bin_expon_cx; unsigned rmode, status, uf_check = 0; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif BID_SWAP128 (x); // unpack arguments, check for NaN or Infinity or 0 if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { if ((x.w[1] << 1) >= 0xf000000000000000ull) { Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull); Tmp.w[0] = CX.w[0]; TP128 = reciprocals10_128[18]; __mul_128x128_full (Qh, Ql, Tmp, TP128); amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; #ifdef SET_STATUS_FLAGS if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif BID_RETURN_VAL (res); } exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS; if (exponent_x < 0) { res = sign_x; BID_RETURN_VAL (res); } if (exponent_x > DECIMAL_MAX_EXPON_64) exponent_x = DECIMAL_MAX_EXPON_64; res = sign_x | (((UINT64) exponent_x) << 53); BID_RETURN_VAL (res); } if (CX.w[1] || (CX.w[0] >= 10000000000000000ull)) { // find number of digits in coefficient // 2^64 f64.i = 0x5f800000; // fx ~ CX fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0]; bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f; extra_digits = estimate_decimal_digits[bin_expon_cx] - 16; // scale = 38-estimate_decimal_digits[bin_expon_cx]; D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1]; if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) extra_digits++; exponent_x += extra_digits; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rnd_mode; if (sign_x && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif if (exponent_x < DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS) { uf_check = 1; if (-extra_digits + exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS + 35 >= 0) { if (exponent_x == DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS - 1) { T128 = round_const_table_128[rmode][extra_digits]; __add_carry_out (CX1.w[0], carry, T128.w[0], CX.w[0]); CX1.w[1] = CX.w[1] + T128.w[1] + carry; if (__unsigned_compare_ge_128 (CX1, power10_table_128[extra_digits + 16])) uf_check = 0; } extra_digits = extra_digits + DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS - exponent_x; exponent_x = DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS; //uf_check = 2; } else rmode = ROUNDING_TO_ZERO; } T128 = round_const_table_128[rmode][extra_digits]; __add_carry_out (CX.w[0], carry, T128.w[0], CX.w[0]); CX.w[1] = CX.w[1] + T128.w[1] + carry; TP128 = reciprocals10_128[extra_digits]; __mul_128x128_full (Qh, Ql, CX, TP128); amount = recip_scale[extra_digits]; if (amount >= 64) { CX.w[0] = Qh.w[1] >> (amount - 64); CX.w[1] = 0; } else { __shr_128 (CX, Qh, amount); } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (!(rmode)) #endif if (CX.w[0] & 1) { // check whether fractional part of initial_P/10^ed1 is exactly .5 // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); if (!Qh1.w[1] && !Qh1.w[0] && (Ql.w[1] < reciprocals10_128[extra_digits].w[1] || (Ql.w[1] == reciprocals10_128[extra_digits].w[1] && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) { CX.w[0]--; } } #endif { status = INEXACT_EXCEPTION; // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[extra_digits].w[1] || (Ql.w[1] == reciprocals10_128[extra_digits].w[1] && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if ((!Qh1.w[1]) && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[extra_digits].w[1] || (Ql.w[1] == reciprocals10_128[extra_digits].w[1] && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], cy, Ql.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Ql.w[1], reciprocals10_128[extra_digits].w[1], cy); __shr_128_long (Qh, Qh1, (128 - amount)); Tmp.w[0] = 1; Tmp.w[1] = 0; __shl_128_long (Tmp1, Tmp, amount); Qh.w[0] += carry; if (Qh.w[0] < carry) Qh.w[1]++; if (__unsigned_compare_ge_128 (Qh, Tmp1)) status = EXACT_STATUS; } if (status != EXACT_STATUS) { if (uf_check) status |= UNDERFLOW_EXCEPTION; #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, status); #endif } } } res = get_BID64 (sign_x, exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS, CX.w[0], rnd_mode, pfpsf); BID_RETURN_VAL (res); } libdfp-1.0.17/libbid/bid64_to_int16.c000066400000000000000000000047151504475242000170760ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffff8000 #define INVALID_RESULT 0x8000 BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_rnint, UINT64, x, bid64_to_int32_rnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xrnint, UINT64, x, bid64_to_int32_xrnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_rninta, UINT64, x, bid64_to_int32_rninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xrninta, UINT64, x, bid64_to_int32_xrninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_int, UINT64, x, bid64_to_int32_int, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xint, UINT64, x, bid64_to_int32_xint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_floor, UINT64, x, bid64_to_int32_floor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_ceil, UINT64, x, bid64_to_int32_ceil, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xfloor, UINT64, x, bid64_to_int32_xfloor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xceil, UINT64, x, bid64_to_int32_xceil, int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid64_to_int32.c000066400000000000000000002603001504475242000170660ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64_to_int32_rnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_rnint (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=16 // <=> C * 10^(11-q) > 0x500000005, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x500000005 <=> // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1/2 up) // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000005ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1/2 up) // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x4fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 <= n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (C1 <= midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_xrnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_xrnint (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=16 // <=> C * 10^(11-q) > 0x500000005, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x500000005 <=> // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1/2 up) // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000005ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1/2 up) // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x4fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (C1 <= midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_floor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_floor (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x500000000 <=> // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1 up) // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000000ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1 up) // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 <= n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return -1 or 0 if (x_sign) res = 0xffffffff; else res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_xfloor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_xfloor (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n < -2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x500000000 <=> // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1 up) // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000000ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1 up) // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 <= n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return -1 or 0 if (x_sign) res = 0xffffffff; else res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_ceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_ceil (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16 // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1 up) // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x50000000aull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n > 2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=16 // <=> C * 10^(11-q) > 0x4fffffff6, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x4fffffff6 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x4fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x4fffffff6 <=> // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1 up) // Note: 0x4fffffff6*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x4fffffff6ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1 < n <= 2^31 - 1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 or 1 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_xceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_xceil (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16 // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1 up) // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x50000000aull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n > 2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=16 // <=> C * 10^(11-q) > 0x4fffffff6, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x4fffffff6 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x4fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x4fffffff6 <=> // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1 up) // Note: 0x4fffffff6*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x4fffffff6ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1 < n <= 2^31 - 1 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 or 1 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_int ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_int (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16 // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1 up) // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x50000000aull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1 up) // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_xint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_xint (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16 // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x50000000aull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x50000000a <=> // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1 up) // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x50000000aull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x500000000 <=> // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1 up) // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded // to nearest to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_rninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_rninta (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000005, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x500000005 <=> // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1/2 up) // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000005ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1/2 up) // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x4fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (C1 < midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest away to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*)-1 (logical right shift; C* has p decimal digits, // correct by Pr. 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int32_xrninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int32_xrninta (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else int bid64_to_int32_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in a signed 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 // if n <= -2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=16 // <=> C * 10^(11-q) >= 0x500000005, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x500000005ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x500000005 <=> // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31+1/2 up) // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x500000005ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } else { // if n > 0 and q + exp = 10 // if n >= 2^31 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x4fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x4fffffffb <=> // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^31-1/2 up) // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x4fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; if (C1 < midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffff; // return -1 } else { // n > 0 res = 0x00000001; // return +1 } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded // to nearest away to a 32-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*)-1 (logical right shift; C* has p decimal digits, // correct by Pr. 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 10 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_to_int64.c000066400000000000000000002471341504475242000171050ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64_to_int64_rnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_rnint (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=16 // <=> C * 10^(20-q) > 0x50000000000000005, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] > 0x05ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] > 0x04ull || (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; // 0 <= ind <= 15 if (C1 <= midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_xrnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_xrnint (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=16 // <=> C * 10^(20-q) > 0x50000000000000005, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] > 0x05ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] > 0x04ull || (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; // 0 <= ind <= 15 if (C1 <= midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_floor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_floor (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=16 // <=> C * 10^(20-q) > 0x50000000000000000, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] != 0)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] >= 0x05ull) { // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63 <= n < 2^63 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return -1 or 0 if (x_sign) res = 0xffffffffffffffffull; else res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_xfloor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_xfloor (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n < -2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=16 // <=> C * 10^(20-q) > 0x50000000000000000, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] != 0)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] >= 0x05ull) { // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63 <= n < 2^63 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return -1 or 0 if (x_sign) res = 0xffffffffffffffffull; else res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (x_sign) { // negative and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_ceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_ceil (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16 // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n > 2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64-2), 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=16 // <=> if C * 10^(20-q) > 0x4fffffffffffffff6, 1<=q<=16 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffff6ull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] > 0x04ull || (C.w[1] == 0x04ull && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 or 1 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_xceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_xceil (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16 // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n > 2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64-2), 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=16 // <=> if C * 10^(20-q) > 0x4fffffffffffffff6, 1<=q<=16 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffff6ull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] > 0x04ull || (C.w[1] == 0x04ull && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 or 1 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] if (!x_sign) { // positive and inexact Cstar++; } // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_int ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_int (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16 // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] >= 0x05ull) { // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_xint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_xint (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16 // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16 C.w[1] = 0x0000000000000005ull; C.w[0] = 0x0000000000000000ull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] >= 0x05ull) { // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1 < n < 2^63 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_rninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_rninta (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=16 // <=> C * 10^(20-q) >= 0x50000000000000005, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x05ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] > 0x04ull || (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1/2 < n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; // 0 <= ind <= 15 if (C1 < midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1/2 < x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } /***************************************************************************** * BID64_to_int64_xrninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_int64_xrninta (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else SINT64 bid64_to_int64_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif SINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in a signed 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 19' if (x_sign) { // if n < 0 and q + exp = 19 // if n <= -2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=16 // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=16 // <=> C * 10^(20-q) >= 0x50000000000000005, 1<=q<=16 // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20 if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x05ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } else { // if n > 0 and q + exp = 19 // if n >= 2^63 - 1/2 then n is too large // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16 // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16 // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16 C.w[1] = 0x0000000000000004ull; C.w[0] = 0xfffffffffffffffbull; // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1 __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]); if (C.w[1] > 0x04ull || (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 19' } // end else if n > 0 and q + exp = 19 } // end else if ((q + exp) == 19) // n is not too large to be converted to int64: -2^63-1/2 < n < 2^63-1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else // res = +/-1 ind = q - 1; // 0 <= ind <= 15 if (C1 < midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (x_sign) { // n < 0 res = 0xffffffffffffffffull; // return -1 } else { // n > 0 res = 0x0000000000000001ull; // return +1 } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18) // -2^63-1/2 < x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded // to nearest to a 64-bit signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero if (x_sign) res = -Cstar; else res = Cstar; } else if (exp == 0) { // 1 <= q <= 16 // res = +/-C (exact) if (x_sign) res = -C1; else res = C1; } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20 // (the upper limit of 20 on q + exp is due to the fact that // +/-C * 10^exp is guaranteed to fit in 64 bits) // res = +/-C * 10^exp (exact) if (x_sign) res = -C1 * ten2k64[exp]; else res = C1 * ten2k64[exp]; } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_to_int8.c000066400000000000000000000046711504475242000170200ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffffff80 #define INVALID_RESULT 0x80 BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_rnint, UINT64, x, bid64_to_int32_rnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xrnint, UINT64, x, bid64_to_int32_xrnint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_rninta, UINT64, x, bid64_to_int32_rninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xrninta, UINT64, x, bid64_to_int32_xrninta, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_int, UINT64, x, bid64_to_int32_int, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xint, UINT64, x, bid64_to_int32_xint, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_floor, UINT64, x, bid64_to_int32_floor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_ceil, UINT64, x, bid64_to_int32_ceil, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xfloor, UINT64, x, bid64_to_int32_xfloor, int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xceil, UINT64, x, bid64_to_int32_xceil, int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid64_to_uint16.c000066400000000000000000000050471504475242000172620ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffff0000 #define INVALID_RESULT 0x8000 BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_rnint, UINT64, x, bid64_to_uint32_rnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xrnint, UINT64, x, bid64_to_uint32_xrnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_rninta, UINT64, x, bid64_to_uint32_rninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xrninta, UINT64, x, bid64_to_uint32_xrninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_int, UINT64, x, bid64_to_uint32_int, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xint, UINT64, x, bid64_to_uint32_xint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_floor, UINT64, x, bid64_to_uint32_floor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_ceil, UINT64, x, bid64_to_uint32_ceil, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xfloor, UINT64, x, bid64_to_uint32_xfloor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xceil, UINT64, x, bid64_to_uint32_xceil, unsigned int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid64_to_uint32.c000066400000000000000000002362271504475242000172660ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64_to_uint32_rnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_rnint (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x9fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1/2 <= n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (C1 <= midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // n > 0 res = 0x00000001; // return +1 } } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32-1/2 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_xrnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_xrnint (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x9fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1/2 <= n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (C1 <= midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // n > 0 res = 0x00000001; // return +1 } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32-1/2 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_floor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_floor (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero if (x_sign) { // if n < 0 the conversion is invalid // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' // n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0xa00000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } // n is not too large to be converted to int32 if -1 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // 1 <= x < 2^32 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_xfloor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_xfloor (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero if (x_sign) { // if n < 0 the conversion is invalid // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' // if n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0xa00000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } // n is not too large to be converted to int32 if -1 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // 1 <= x < 2^32 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_ceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_ceil (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n > 2^32 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=16 // <=> C * 10^(11-q) > 0x9fffffff6, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffff6 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x9fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x9fffffff6 <=> // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1 up) // Note: 0x9fffffff6*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x9fffffff6ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 or 1 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // x <= -1 or 1 <= x <= 2^32 - 1 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x <= 2^32 - 1 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_xceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_xceil (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n > 2^32 - 1 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1 // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=16 // <=> C * 10^(11-q) > 0x9fffffff6, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffff6 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 > 0x9fffffff6ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) > 0x9fffffff6 <=> // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1 up) // Note: 0x9fffffff6*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x9fffffff6ull * ten2k64[q - 11]; if (C1 > tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 or 1 if (x_sign) res = 0x00000000; else res = 0x00000001; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // x <= -1 or 1 <= x < 2^32 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_int ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_int (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0xa00000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // x <= -1 or 1 <= x < 2^32 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_xint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_xint (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n >= 2^32 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16 // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0xa00000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0xa00000000 <=> // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0xa00000000ull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1 < n < 2^32 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // x <= -1 or 1 <= x < 2^32 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_rninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_rninta (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x9fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1/2 < n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (C1 < midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // n > 0 res = 0x00000001; // return +1 } } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32-1/2 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint32_xrninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint32_xrninta (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else unsigned int bid64_to_uint32_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif unsigned int res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x00000000; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1) // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2... // so x rounded to an integer may or may not fit in an unsigned 32-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 10' if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // if n > 0 and q + exp = 10 // if n >= 2^32 - 1/2 then n is too large // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2 // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16 // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16 if (q <= 11) { // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits) if (tmp64 >= 0x9fffffffbull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit unsigned int fall through // to '1 <= q + exp <= 10' } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2 // C * 10^(11-q) >= 0x9fffffffb <=> // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5 // (scale 2^32-1/2 up) // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16 tmp64 = 0x9fffffffbull * ten2k64[q - 11]; if (C1 >= tmp64) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // else cases that can be rounded to a 32-bit int fall through // to '1 <= q + exp <= 10' } } } // n is not too large to be converted to int32 if -1/2 < n < 2^32 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x00000000; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; if (C1 < midpoint64[ind]) { res = 0x00000000; // return 0 } else if (x_sign) { // n < 0 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } else { // n > 0 res = 0x00000001; // return +1 } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9) // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be // rounded to nearest to a 32-bit unsigned integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x80000000; BID_RETURN (res); } // 1 <= x < 2^32-1/2 so x can be rounded // to nearest to a 32-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_to_uint64.c000066400000000000000000002402221504475242000172610ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64_to_uint64_rnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_rnint (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; // 0 <= ind <= 15 if (C1 <= midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x0000000000000001ull; // return +1 } else { // if n < 0 res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_xrnint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_xrnint (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; // 0 <= ind <= 15 if (C1 <= midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x0000000000000001ull; // return +1 } else { // if n < 0 res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero, so // it will need a correction // check for midpoints if ((fstar.w[1] == 0) && fstar.w[0] && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // the result is a midpoint; round to nearest if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result >= 1 Cstar--; // Cstar is now even } // else MP in [ODD, EVEN] } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_floor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_floor (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero if (x_sign) { // if n < 0 the conversion is invalid // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' // n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65) // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000 // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // 1 <= x < 2^64 so x can be rounded // to nearest to a 64-bit unsigned signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_xfloor ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_xfloor (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero if (x_sign) { // if n < 0 the conversion is invalid // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' // n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65) // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000 // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // 1 <= x < 2^64 so x can be rounded // to nearest to a 64-bit unsigned signed integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_ceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_ceil (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n > 2^64 - 1 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65 - 2) // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=16 if (q == 1) { // C * 10^20 > 0x9fffffffffffffff6 __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffff6 // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 or 1 if (x_sign) res = 0x0000000000000000ull; else res = 0x0000000000000001ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x <= 2^64 - 1 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x <= 2^64 - 1 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_xceil ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_xceil (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n > 2^64 - 1 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65 - 2) // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=16 if (q == 1) { // C * 10^20 > 0x9fffffffffffffff6 __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffff6 // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 or 1 if (x_sign) res = 0x0000000000000000ull; else res = 0x0000000000000001ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x <= 2^64 - 1 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x <= 2^64 - 1 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] Cstar++; // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_int ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_int (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65) // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000 // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_xint ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_xint (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n >= 2^64 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65) // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0xa0000000000000000 __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000 // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] >= 0x0a) { // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1 < n < 2^64 // Note: some of the cases tested for above fall through to this point if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 fits in 64 bits // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = C1 * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* < 10^(-x)) then // the result is exact // else // if (f* > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_rninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_rninta (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; // 0 <= ind <= 15 if (C1 < midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x0000000000000001ull; // return +1 } else { // if n < 0 res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // if the result was a midpoint it was rounded away from zero res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } /***************************************************************************** * BID64_to_uint64_xrninta ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_to_uint64_xrninta (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 bid64_to_uint64_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign; UINT64 x_exp; int exp; // unbiased exponent // Note: C1 represents x_significand (UINT64) UINT64 tmp64; BID_UI64DOUBLE tmp1; unsigned int x_nr_bits; int q, ind, shift; UINT64 C1; UINT128 C; UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits UINT128 fstar; UINT128 P128; // check for NaN or Infinity if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // unpack x x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 res = 0x0000000000000000ull; BID_RETURN (res); } // x is not special and is not zero // q = nr. of decimal digits in x (1 <= q <= 54) // determine first the nr. of bits in x if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors if (C1 >= 0x0000000100000000ull) { // x >= 2^32 tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } else { // x < 2^32 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } } else { // if x < 2^53 tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } q = nr_digits[x_nr_bits - 1].digits; if (q == 0) { q = nr_digits[x_nr_bits - 1].digits1; if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q++; } exp = x_exp - 398; // unbiased exponent if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits) // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1) // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43... // so x rounded to an integer may or may not fit in an unsigned 64-bit int // the cases that do not fit are identified here; the ones that fit // fall through and will be handled with other cases further, // under '1 <= q + exp <= 20' if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2 // => set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } else { // if n > 0 and q + exp = 20 // if n >= 2^64 - 1/2 then n is too large // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2 // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1) // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16 if (q == 1) { // C * 10^20 >= 0x9fffffffffffffffb __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19 // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb // has 21 digits __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]); if (C.w[1] > 0x09 || (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) { // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // else cases that can be rounded to a 64-bit int fall through // to '1 <= q + exp <= 20' } } } // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2 // Note: some of the cases tested for above fall through to this point if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1) // set inexact flag *pfpsf |= INEXACT_EXCEPTION; // return 0 res = 0x0000000000000000ull; BID_RETURN (res); } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1) // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1) // res = 0 // else if x > 0 // res = +1 // else // if x < 0 // invalid exc ind = q - 1; // 0 <= ind <= 15 if (C1 < midpoint64[ind]) { res = 0x0000000000000000ull; // return 0 } else if (!x_sign) { // n > 0 res = 0x0000000000000001ull; // return +1 } else { // if n < 0 res = 0x8000000000000000ull; *pfpsf |= INVALID_EXCEPTION; BID_RETURN (res); } // set inexact flag *pfpsf |= INEXACT_EXCEPTION; } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19) // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded // to nearest to a 64-bit unsigned signed integer if (x_sign) { // x <= -1 // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return Integer Indefinite res = 0x8000000000000000ull; BID_RETURN (res); } // 1 <= x < 2^64-1/2 so x can be rounded // to nearest to a 64-bit unsigned integer if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20 ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x' // chop off ind digits from the lower part of C1 // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits C1 = C1 + midpoint64[ind - 1]; // calculate C* and f* // C* is actually floor(C*) in this case // C* and f* need shifting and masking, as shown by // shiftright128[] and maskhigh128[] // 1 <= x <= 15 // kx = 10^(-x) = ten2mk64[ind - 1] // C* = (C1 + 1/2 * 10^x) * 10^(-x) // the approximation of 10^(-x) was rounded up to 54 bits __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]); Cstar = P128.w[1]; fstar.w[1] = P128.w[1] & maskhigh128[ind - 1]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g. // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999 // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has p decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has p decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has p decimal digits, // correct by Property 1) // n = C* * 10^(e+x) // shift right C* by Ex-64 = shiftright128[ind] shift = shiftright128[ind - 1]; // 0 <= shift <= 39 Cstar = Cstar >> shift; // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind - 1 <= 2) { // fstar.w[1] is 0 if (fstar.w[0] > 0x8000000000000000ull) { // f* > 1/2 and the result may be exact tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2 if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } else { // if 3 <= ind - 1 <= 14 if (fstar.w[1] > onehalf128[ind - 1] || (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) { // f2* > 1/2 and the result may be exact // Calculate f2* - 1/2 tmp64 = fstar.w[1] - onehalf128[ind - 1]; if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) { // ten2mk128trunc[ind -1].w[1] is identical to // ten2mk128[ind -1].w[1] // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; } } // if the result was a midpoint it was rounded away from zero res = Cstar; // the result is positive } else if (exp == 0) { // 1 <= q <= 10 // res = +C (exact) res = C1; // the result is positive } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10 // res = +C * 10^exp (exact) res = C1 * ten2k64[exp]; // the result is positive } } BID_RETURN (res); } libdfp-1.0.17/libbid/bid64_to_uint8.c000066400000000000000000000050211504475242000171730ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #define SIZE_MASK 0xffffff00 #define INVALID_RESULT 0x80 BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_rnint, UINT64, x, bid64_to_uint32_rnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xrnint, UINT64, x, bid64_to_uint32_xrnint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_rninta, UINT64, x, bid64_to_uint32_rninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xrninta, UINT64, x, bid64_to_uint32_xrninta, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_int, UINT64, x, bid64_to_uint32_int, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xint, UINT64, x, bid64_to_uint32_xint, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_floor, UINT64, x, bid64_to_uint32_floor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_ceil, UINT64, x, bid64_to_uint32_ceil, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xfloor, UINT64, x, bid64_to_uint32_xfloor, unsigned int, SIZE_MASK, INVALID_RESULT) BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xceil, UINT64, x, bid64_to_uint32_xceil, unsigned int, SIZE_MASK, INVALID_RESULT) libdfp-1.0.17/libbid/bid_b2d.h000066400000000000000000005213441504475242000157370ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ const UINT64 d2b[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 80, 81, 800, 801, 880, 881, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 90, 91, 810, 811, 890, 891, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 82, 83, 820, 821, 808, 809, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 92, 93, 830, 831, 818, 819, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 84, 85, 840, 841, 88, 89, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 94, 95, 850, 851, 98, 99, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 860, 861, 888, 889, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 870, 871, 898, 899, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 180, 181, 900, 901, 980, 981, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 190, 191, 910, 911, 990, 991, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 182, 183, 920, 921, 908, 909, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 192, 193, 930, 931, 918, 919, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 184, 185, 940, 941, 188, 189, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 194, 195, 950, 951, 198, 199, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 186, 187, 960, 961, 988, 989, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 196, 197, 970, 971, 998, 999, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 280, 281, 802, 803, 882, 883, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 290, 291, 812, 813, 892, 893, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 282, 283, 822, 823, 828, 829, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 292, 293, 832, 833, 838, 839, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 284, 285, 842, 843, 288, 289, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 294, 295, 852, 853, 298, 299, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 286, 287, 862, 863, 888, 889, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 296, 297, 872, 873, 898, 899, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 380, 381, 902, 903, 982, 983, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 390, 391, 912, 913, 992, 993, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 382, 383, 922, 923, 928, 929, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 392, 393, 932, 933, 938, 939, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 384, 385, 942, 943, 388, 389, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 394, 395, 952, 953, 398, 399, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 386, 387, 962, 963, 988, 989, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 396, 397, 972, 973, 998, 999, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 480, 481, 804, 805, 884, 885, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 490, 491, 814, 815, 894, 895, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 482, 483, 824, 825, 848, 849, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 492, 493, 834, 835, 858, 859, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 484, 485, 844, 845, 488, 489, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 494, 495, 854, 855, 498, 499, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 486, 487, 864, 865, 888, 889, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 496, 497, 874, 875, 898, 899, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 580, 581, 904, 905, 984, 985, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 590, 591, 914, 915, 994, 995, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 582, 583, 924, 925, 948, 949, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 592, 593, 934, 935, 958, 959, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 584, 585, 944, 945, 588, 589, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 594, 595, 954, 955, 598, 599, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 586, 587, 964, 965, 988, 989, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 596, 597, 974, 975, 998, 999, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 680, 681, 806, 807, 886, 887, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 690, 691, 816, 817, 896, 897, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 682, 683, 826, 827, 868, 869, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 692, 693, 836, 837, 878, 879, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 684, 685, 846, 847, 688, 689, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 694, 695, 856, 857, 698, 699, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 686, 687, 866, 867, 888, 889, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 696, 697, 876, 877, 898, 899, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 780, 781, 906, 907, 986, 987, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 790, 791, 916, 917, 996, 997, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 782, 783, 926, 927, 968, 969, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 792, 793, 936, 937, 978, 979, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 784, 785, 946, 947, 788, 789, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 794, 795, 956, 957, 798, 799, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 786, 787, 966, 967, 988, 989, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 796, 797, 976, 977, 998, 999 }; const UINT64 d2b2[] = { 0000ull, 1000ull, 2000ull, 3000ull, 4000ull, 5000ull, 6000ull, 7000ull, 8000ull, 9000ull, 80000ull, 81000ull, 800000ull, 801000ull, 880000ull, 881000ull, 10000ull, 11000ull, 12000ull, 13000ull, 14000ull, 15000ull, 16000ull, 17000ull, 18000ull, 19000ull, 90000ull, 91000ull, 810000ull, 811000ull, 890000ull, 891000ull, 20000ull, 21000ull, 22000ull, 23000ull, 24000ull, 25000ull, 26000ull, 27000ull, 28000ull, 29000ull, 82000ull, 83000ull, 820000ull, 821000ull, 808000ull, 809000ull, 30000ull, 31000ull, 32000ull, 33000ull, 34000ull, 35000ull, 36000ull, 37000ull, 38000ull, 39000ull, 92000ull, 93000ull, 830000ull, 831000ull, 818000ull, 819000ull, 40000ull, 41000ull, 42000ull, 43000ull, 44000ull, 45000ull, 46000ull, 47000ull, 48000ull, 49000ull, 84000ull, 85000ull, 840000ull, 841000ull, 88000ull, 89000ull, 50000ull, 51000ull, 52000ull, 53000ull, 54000ull, 55000ull, 56000ull, 57000ull, 58000ull, 59000ull, 94000ull, 95000ull, 850000ull, 851000ull, 98000ull, 99000ull, 60000ull, 61000ull, 62000ull, 63000ull, 64000ull, 65000ull, 66000ull, 67000ull, 68000ull, 69000ull, 86000ull, 87000ull, 860000ull, 861000ull, 888000ull, 889000ull, 70000ull, 71000ull, 72000ull, 73000ull, 74000ull, 75000ull, 76000ull, 77000ull, 78000ull, 79000ull, 96000ull, 97000ull, 870000ull, 871000ull, 898000ull, 899000ull, 100000ull, 101000ull, 102000ull, 103000ull, 104000ull, 105000ull, 106000ull, 107000ull, 108000ull, 109000ull, 180000ull, 181000ull, 900000ull, 901000ull, 980000ull, 981000ull, 110000ull, 111000ull, 112000ull, 113000ull, 114000ull, 115000ull, 116000ull, 117000ull, 118000ull, 119000ull, 190000ull, 191000ull, 910000ull, 911000ull, 990000ull, 991000ull, 120000ull, 121000ull, 122000ull, 123000ull, 124000ull, 125000ull, 126000ull, 127000ull, 128000ull, 129000ull, 182000ull, 183000ull, 920000ull, 921000ull, 908000ull, 909000ull, 130000ull, 131000ull, 132000ull, 133000ull, 134000ull, 135000ull, 136000ull, 137000ull, 138000ull, 139000ull, 192000ull, 193000ull, 930000ull, 931000ull, 918000ull, 919000ull, 140000ull, 141000ull, 142000ull, 143000ull, 144000ull, 145000ull, 146000ull, 147000ull, 148000ull, 149000ull, 184000ull, 185000ull, 940000ull, 941000ull, 188000ull, 189000ull, 150000ull, 151000ull, 152000ull, 153000ull, 154000ull, 155000ull, 156000ull, 157000ull, 158000ull, 159000ull, 194000ull, 195000ull, 950000ull, 951000ull, 198000ull, 199000ull, 160000ull, 161000ull, 162000ull, 163000ull, 164000ull, 165000ull, 166000ull, 167000ull, 168000ull, 169000ull, 186000ull, 187000ull, 960000ull, 961000ull, 988000ull, 989000ull, 170000ull, 171000ull, 172000ull, 173000ull, 174000ull, 175000ull, 176000ull, 177000ull, 178000ull, 179000ull, 196000ull, 197000ull, 970000ull, 971000ull, 998000ull, 999000ull, 200000ull, 201000ull, 202000ull, 203000ull, 204000ull, 205000ull, 206000ull, 207000ull, 208000ull, 209000ull, 280000ull, 281000ull, 802000ull, 803000ull, 882000ull, 883000ull, 210000ull, 211000ull, 212000ull, 213000ull, 214000ull, 215000ull, 216000ull, 217000ull, 218000ull, 219000ull, 290000ull, 291000ull, 812000ull, 813000ull, 892000ull, 893000ull, 220000ull, 221000ull, 222000ull, 223000ull, 224000ull, 225000ull, 226000ull, 227000ull, 228000ull, 229000ull, 282000ull, 283000ull, 822000ull, 823000ull, 828000ull, 829000ull, 230000ull, 231000ull, 232000ull, 233000ull, 234000ull, 235000ull, 236000ull, 237000ull, 238000ull, 239000ull, 292000ull, 293000ull, 832000ull, 833000ull, 838000ull, 839000ull, 240000ull, 241000ull, 242000ull, 243000ull, 244000ull, 245000ull, 246000ull, 247000ull, 248000ull, 249000ull, 284000ull, 285000ull, 842000ull, 843000ull, 288000ull, 289000ull, 250000ull, 251000ull, 252000ull, 253000ull, 254000ull, 255000ull, 256000ull, 257000ull, 258000ull, 259000ull, 294000ull, 295000ull, 852000ull, 853000ull, 298000ull, 299000ull, 260000ull, 261000ull, 262000ull, 263000ull, 264000ull, 265000ull, 266000ull, 267000ull, 268000ull, 269000ull, 286000ull, 287000ull, 862000ull, 863000ull, 888000ull, 889000ull, 270000ull, 271000ull, 272000ull, 273000ull, 274000ull, 275000ull, 276000ull, 277000ull, 278000ull, 279000ull, 296000ull, 297000ull, 872000ull, 873000ull, 898000ull, 899000ull, 300000ull, 301000ull, 302000ull, 303000ull, 304000ull, 305000ull, 306000ull, 307000ull, 308000ull, 309000ull, 380000ull, 381000ull, 902000ull, 903000ull, 982000ull, 983000ull, 310000ull, 311000ull, 312000ull, 313000ull, 314000ull, 315000ull, 316000ull, 317000ull, 318000ull, 319000ull, 390000ull, 391000ull, 912000ull, 913000ull, 992000ull, 993000ull, 320000ull, 321000ull, 322000ull, 323000ull, 324000ull, 325000ull, 326000ull, 327000ull, 328000ull, 329000ull, 382000ull, 383000ull, 922000ull, 923000ull, 928000ull, 929000ull, 330000ull, 331000ull, 332000ull, 333000ull, 334000ull, 335000ull, 336000ull, 337000ull, 338000ull, 339000ull, 392000ull, 393000ull, 932000ull, 933000ull, 938000ull, 939000ull, 340000ull, 341000ull, 342000ull, 343000ull, 344000ull, 345000ull, 346000ull, 347000ull, 348000ull, 349000ull, 384000ull, 385000ull, 942000ull, 943000ull, 388000ull, 389000ull, 350000ull, 351000ull, 352000ull, 353000ull, 354000ull, 355000ull, 356000ull, 357000ull, 358000ull, 359000ull, 394000ull, 395000ull, 952000ull, 953000ull, 398000ull, 399000ull, 360000ull, 361000ull, 362000ull, 363000ull, 364000ull, 365000ull, 366000ull, 367000ull, 368000ull, 369000ull, 386000ull, 387000ull, 962000ull, 963000ull, 988000ull, 989000ull, 370000ull, 371000ull, 372000ull, 373000ull, 374000ull, 375000ull, 376000ull, 377000ull, 378000ull, 379000ull, 396000ull, 397000ull, 972000ull, 973000ull, 998000ull, 999000ull, 400000ull, 401000ull, 402000ull, 403000ull, 404000ull, 405000ull, 406000ull, 407000ull, 408000ull, 409000ull, 480000ull, 481000ull, 804000ull, 805000ull, 884000ull, 885000ull, 410000ull, 411000ull, 412000ull, 413000ull, 414000ull, 415000ull, 416000ull, 417000ull, 418000ull, 419000ull, 490000ull, 491000ull, 814000ull, 815000ull, 894000ull, 895000ull, 420000ull, 421000ull, 422000ull, 423000ull, 424000ull, 425000ull, 426000ull, 427000ull, 428000ull, 429000ull, 482000ull, 483000ull, 824000ull, 825000ull, 848000ull, 849000ull, 430000ull, 431000ull, 432000ull, 433000ull, 434000ull, 435000ull, 436000ull, 437000ull, 438000ull, 439000ull, 492000ull, 493000ull, 834000ull, 835000ull, 858000ull, 859000ull, 440000ull, 441000ull, 442000ull, 443000ull, 444000ull, 445000ull, 446000ull, 447000ull, 448000ull, 449000ull, 484000ull, 485000ull, 844000ull, 845000ull, 488000ull, 489000ull, 450000ull, 451000ull, 452000ull, 453000ull, 454000ull, 455000ull, 456000ull, 457000ull, 458000ull, 459000ull, 494000ull, 495000ull, 854000ull, 855000ull, 498000ull, 499000ull, 460000ull, 461000ull, 462000ull, 463000ull, 464000ull, 465000ull, 466000ull, 467000ull, 468000ull, 469000ull, 486000ull, 487000ull, 864000ull, 865000ull, 888000ull, 889000ull, 470000ull, 471000ull, 472000ull, 473000ull, 474000ull, 475000ull, 476000ull, 477000ull, 478000ull, 479000ull, 496000ull, 497000ull, 874000ull, 875000ull, 898000ull, 899000ull, 500000ull, 501000ull, 502000ull, 503000ull, 504000ull, 505000ull, 506000ull, 507000ull, 508000ull, 509000ull, 580000ull, 581000ull, 904000ull, 905000ull, 984000ull, 985000ull, 510000ull, 511000ull, 512000ull, 513000ull, 514000ull, 515000ull, 516000ull, 517000ull, 518000ull, 519000ull, 590000ull, 591000ull, 914000ull, 915000ull, 994000ull, 995000ull, 520000ull, 521000ull, 522000ull, 523000ull, 524000ull, 525000ull, 526000ull, 527000ull, 528000ull, 529000ull, 582000ull, 583000ull, 924000ull, 925000ull, 948000ull, 949000ull, 530000ull, 531000ull, 532000ull, 533000ull, 534000ull, 535000ull, 536000ull, 537000ull, 538000ull, 539000ull, 592000ull, 593000ull, 934000ull, 935000ull, 958000ull, 959000ull, 540000ull, 541000ull, 542000ull, 543000ull, 544000ull, 545000ull, 546000ull, 547000ull, 548000ull, 549000ull, 584000ull, 585000ull, 944000ull, 945000ull, 588000ull, 589000ull, 550000ull, 551000ull, 552000ull, 553000ull, 554000ull, 555000ull, 556000ull, 557000ull, 558000ull, 559000ull, 594000ull, 595000ull, 954000ull, 955000ull, 598000ull, 599000ull, 560000ull, 561000ull, 562000ull, 563000ull, 564000ull, 565000ull, 566000ull, 567000ull, 568000ull, 569000ull, 586000ull, 587000ull, 964000ull, 965000ull, 988000ull, 989000ull, 570000ull, 571000ull, 572000ull, 573000ull, 574000ull, 575000ull, 576000ull, 577000ull, 578000ull, 579000ull, 596000ull, 597000ull, 974000ull, 975000ull, 998000ull, 999000ull, 600000ull, 601000ull, 602000ull, 603000ull, 604000ull, 605000ull, 606000ull, 607000ull, 608000ull, 609000ull, 680000ull, 681000ull, 806000ull, 807000ull, 886000ull, 887000ull, 610000ull, 611000ull, 612000ull, 613000ull, 614000ull, 615000ull, 616000ull, 617000ull, 618000ull, 619000ull, 690000ull, 691000ull, 816000ull, 817000ull, 896000ull, 897000ull, 620000ull, 621000ull, 622000ull, 623000ull, 624000ull, 625000ull, 626000ull, 627000ull, 628000ull, 629000ull, 682000ull, 683000ull, 826000ull, 827000ull, 868000ull, 869000ull, 630000ull, 631000ull, 632000ull, 633000ull, 634000ull, 635000ull, 636000ull, 637000ull, 638000ull, 639000ull, 692000ull, 693000ull, 836000ull, 837000ull, 878000ull, 879000ull, 640000ull, 641000ull, 642000ull, 643000ull, 644000ull, 645000ull, 646000ull, 647000ull, 648000ull, 649000ull, 684000ull, 685000ull, 846000ull, 847000ull, 688000ull, 689000ull, 650000ull, 651000ull, 652000ull, 653000ull, 654000ull, 655000ull, 656000ull, 657000ull, 658000ull, 659000ull, 694000ull, 695000ull, 856000ull, 857000ull, 698000ull, 699000ull, 660000ull, 661000ull, 662000ull, 663000ull, 664000ull, 665000ull, 666000ull, 667000ull, 668000ull, 669000ull, 686000ull, 687000ull, 866000ull, 867000ull, 888000ull, 889000ull, 670000ull, 671000ull, 672000ull, 673000ull, 674000ull, 675000ull, 676000ull, 677000ull, 678000ull, 679000ull, 696000ull, 697000ull, 876000ull, 877000ull, 898000ull, 899000ull, 700000ull, 701000ull, 702000ull, 703000ull, 704000ull, 705000ull, 706000ull, 707000ull, 708000ull, 709000ull, 780000ull, 781000ull, 906000ull, 907000ull, 986000ull, 987000ull, 710000ull, 711000ull, 712000ull, 713000ull, 714000ull, 715000ull, 716000ull, 717000ull, 718000ull, 719000ull, 790000ull, 791000ull, 916000ull, 917000ull, 996000ull, 997000ull, 720000ull, 721000ull, 722000ull, 723000ull, 724000ull, 725000ull, 726000ull, 727000ull, 728000ull, 729000ull, 782000ull, 783000ull, 926000ull, 927000ull, 968000ull, 969000ull, 730000ull, 731000ull, 732000ull, 733000ull, 734000ull, 735000ull, 736000ull, 737000ull, 738000ull, 739000ull, 792000ull, 793000ull, 936000ull, 937000ull, 978000ull, 979000ull, 740000ull, 741000ull, 742000ull, 743000ull, 744000ull, 745000ull, 746000ull, 747000ull, 748000ull, 749000ull, 784000ull, 785000ull, 946000ull, 947000ull, 788000ull, 789000ull, 750000ull, 751000ull, 752000ull, 753000ull, 754000ull, 755000ull, 756000ull, 757000ull, 758000ull, 759000ull, 794000ull, 795000ull, 956000ull, 957000ull, 798000ull, 799000ull, 760000ull, 761000ull, 762000ull, 763000ull, 764000ull, 765000ull, 766000ull, 767000ull, 768000ull, 769000ull, 786000ull, 787000ull, 966000ull, 967000ull, 988000ull, 989000ull, 770000ull, 771000ull, 772000ull, 773000ull, 774000ull, 775000ull, 776000ull, 777000ull, 778000ull, 779000ull, 796000ull, 797000ull, 976000ull, 977000ull, 998000ull, 999000ull }; const UINT64 d2b3[] = { 0000000ull, 1000000ull, 2000000ull, 3000000ull, 4000000ull, 5000000ull, 6000000ull, 7000000ull, 8000000ull, 9000000ull, 80000000ull, 81000000ull, 800000000ull, 801000000ull, 880000000ull, 881000000ull, 10000000ull, 11000000ull, 12000000ull, 13000000ull, 14000000ull, 15000000ull, 16000000ull, 17000000ull, 18000000ull, 19000000ull, 90000000ull, 91000000ull, 810000000ull, 811000000ull, 890000000ull, 891000000ull, 20000000ull, 21000000ull, 22000000ull, 23000000ull, 24000000ull, 25000000ull, 26000000ull, 27000000ull, 28000000ull, 29000000ull, 82000000ull, 83000000ull, 820000000ull, 821000000ull, 808000000ull, 809000000ull, 30000000ull, 31000000ull, 32000000ull, 33000000ull, 34000000ull, 35000000ull, 36000000ull, 37000000ull, 38000000ull, 39000000ull, 92000000ull, 93000000ull, 830000000ull, 831000000ull, 818000000ull, 819000000ull, 40000000ull, 41000000ull, 42000000ull, 43000000ull, 44000000ull, 45000000ull, 46000000ull, 47000000ull, 48000000ull, 49000000ull, 84000000ull, 85000000ull, 840000000ull, 841000000ull, 88000000ull, 89000000ull, 50000000ull, 51000000ull, 52000000ull, 53000000ull, 54000000ull, 55000000ull, 56000000ull, 57000000ull, 58000000ull, 59000000ull, 94000000ull, 95000000ull, 850000000ull, 851000000ull, 98000000ull, 99000000ull, 60000000ull, 61000000ull, 62000000ull, 63000000ull, 64000000ull, 65000000ull, 66000000ull, 67000000ull, 68000000ull, 69000000ull, 86000000ull, 87000000ull, 860000000ull, 861000000ull, 888000000ull, 889000000ull, 70000000ull, 71000000ull, 72000000ull, 73000000ull, 74000000ull, 75000000ull, 76000000ull, 77000000ull, 78000000ull, 79000000ull, 96000000ull, 97000000ull, 870000000ull, 871000000ull, 898000000ull, 899000000ull, 100000000ull, 101000000ull, 102000000ull, 103000000ull, 104000000ull, 105000000ull, 106000000ull, 107000000ull, 108000000ull, 109000000ull, 180000000ull, 181000000ull, 900000000ull, 901000000ull, 980000000ull, 981000000ull, 110000000ull, 111000000ull, 112000000ull, 113000000ull, 114000000ull, 115000000ull, 116000000ull, 117000000ull, 118000000ull, 119000000ull, 190000000ull, 191000000ull, 910000000ull, 911000000ull, 990000000ull, 991000000ull, 120000000ull, 121000000ull, 122000000ull, 123000000ull, 124000000ull, 125000000ull, 126000000ull, 127000000ull, 128000000ull, 129000000ull, 182000000ull, 183000000ull, 920000000ull, 921000000ull, 908000000ull, 909000000ull, 130000000ull, 131000000ull, 132000000ull, 133000000ull, 134000000ull, 135000000ull, 136000000ull, 137000000ull, 138000000ull, 139000000ull, 192000000ull, 193000000ull, 930000000ull, 931000000ull, 918000000ull, 919000000ull, 140000000ull, 141000000ull, 142000000ull, 143000000ull, 144000000ull, 145000000ull, 146000000ull, 147000000ull, 148000000ull, 149000000ull, 184000000ull, 185000000ull, 940000000ull, 941000000ull, 188000000ull, 189000000ull, 150000000ull, 151000000ull, 152000000ull, 153000000ull, 154000000ull, 155000000ull, 156000000ull, 157000000ull, 158000000ull, 159000000ull, 194000000ull, 195000000ull, 950000000ull, 951000000ull, 198000000ull, 199000000ull, 160000000ull, 161000000ull, 162000000ull, 163000000ull, 164000000ull, 165000000ull, 166000000ull, 167000000ull, 168000000ull, 169000000ull, 186000000ull, 187000000ull, 960000000ull, 961000000ull, 988000000ull, 989000000ull, 170000000ull, 171000000ull, 172000000ull, 173000000ull, 174000000ull, 175000000ull, 176000000ull, 177000000ull, 178000000ull, 179000000ull, 196000000ull, 197000000ull, 970000000ull, 971000000ull, 998000000ull, 999000000ull, 200000000ull, 201000000ull, 202000000ull, 203000000ull, 204000000ull, 205000000ull, 206000000ull, 207000000ull, 208000000ull, 209000000ull, 280000000ull, 281000000ull, 802000000ull, 803000000ull, 882000000ull, 883000000ull, 210000000ull, 211000000ull, 212000000ull, 213000000ull, 214000000ull, 215000000ull, 216000000ull, 217000000ull, 218000000ull, 219000000ull, 290000000ull, 291000000ull, 812000000ull, 813000000ull, 892000000ull, 893000000ull, 220000000ull, 221000000ull, 222000000ull, 223000000ull, 224000000ull, 225000000ull, 226000000ull, 227000000ull, 228000000ull, 229000000ull, 282000000ull, 283000000ull, 822000000ull, 823000000ull, 828000000ull, 829000000ull, 230000000ull, 231000000ull, 232000000ull, 233000000ull, 234000000ull, 235000000ull, 236000000ull, 237000000ull, 238000000ull, 239000000ull, 292000000ull, 293000000ull, 832000000ull, 833000000ull, 838000000ull, 839000000ull, 240000000ull, 241000000ull, 242000000ull, 243000000ull, 244000000ull, 245000000ull, 246000000ull, 247000000ull, 248000000ull, 249000000ull, 284000000ull, 285000000ull, 842000000ull, 843000000ull, 288000000ull, 289000000ull, 250000000ull, 251000000ull, 252000000ull, 253000000ull, 254000000ull, 255000000ull, 256000000ull, 257000000ull, 258000000ull, 259000000ull, 294000000ull, 295000000ull, 852000000ull, 853000000ull, 298000000ull, 299000000ull, 260000000ull, 261000000ull, 262000000ull, 263000000ull, 264000000ull, 265000000ull, 266000000ull, 267000000ull, 268000000ull, 269000000ull, 286000000ull, 287000000ull, 862000000ull, 863000000ull, 888000000ull, 889000000ull, 270000000ull, 271000000ull, 272000000ull, 273000000ull, 274000000ull, 275000000ull, 276000000ull, 277000000ull, 278000000ull, 279000000ull, 296000000ull, 297000000ull, 872000000ull, 873000000ull, 898000000ull, 899000000ull, 300000000ull, 301000000ull, 302000000ull, 303000000ull, 304000000ull, 305000000ull, 306000000ull, 307000000ull, 308000000ull, 309000000ull, 380000000ull, 381000000ull, 902000000ull, 903000000ull, 982000000ull, 983000000ull, 310000000ull, 311000000ull, 312000000ull, 313000000ull, 314000000ull, 315000000ull, 316000000ull, 317000000ull, 318000000ull, 319000000ull, 390000000ull, 391000000ull, 912000000ull, 913000000ull, 992000000ull, 993000000ull, 320000000ull, 321000000ull, 322000000ull, 323000000ull, 324000000ull, 325000000ull, 326000000ull, 327000000ull, 328000000ull, 329000000ull, 382000000ull, 383000000ull, 922000000ull, 923000000ull, 928000000ull, 929000000ull, 330000000ull, 331000000ull, 332000000ull, 333000000ull, 334000000ull, 335000000ull, 336000000ull, 337000000ull, 338000000ull, 339000000ull, 392000000ull, 393000000ull, 932000000ull, 933000000ull, 938000000ull, 939000000ull, 340000000ull, 341000000ull, 342000000ull, 343000000ull, 344000000ull, 345000000ull, 346000000ull, 347000000ull, 348000000ull, 349000000ull, 384000000ull, 385000000ull, 942000000ull, 943000000ull, 388000000ull, 389000000ull, 350000000ull, 351000000ull, 352000000ull, 353000000ull, 354000000ull, 355000000ull, 356000000ull, 357000000ull, 358000000ull, 359000000ull, 394000000ull, 395000000ull, 952000000ull, 953000000ull, 398000000ull, 399000000ull, 360000000ull, 361000000ull, 362000000ull, 363000000ull, 364000000ull, 365000000ull, 366000000ull, 367000000ull, 368000000ull, 369000000ull, 386000000ull, 387000000ull, 962000000ull, 963000000ull, 988000000ull, 989000000ull, 370000000ull, 371000000ull, 372000000ull, 373000000ull, 374000000ull, 375000000ull, 376000000ull, 377000000ull, 378000000ull, 379000000ull, 396000000ull, 397000000ull, 972000000ull, 973000000ull, 998000000ull, 999000000ull, 400000000ull, 401000000ull, 402000000ull, 403000000ull, 404000000ull, 405000000ull, 406000000ull, 407000000ull, 408000000ull, 409000000ull, 480000000ull, 481000000ull, 804000000ull, 805000000ull, 884000000ull, 885000000ull, 410000000ull, 411000000ull, 412000000ull, 413000000ull, 414000000ull, 415000000ull, 416000000ull, 417000000ull, 418000000ull, 419000000ull, 490000000ull, 491000000ull, 814000000ull, 815000000ull, 894000000ull, 895000000ull, 420000000ull, 421000000ull, 422000000ull, 423000000ull, 424000000ull, 425000000ull, 426000000ull, 427000000ull, 428000000ull, 429000000ull, 482000000ull, 483000000ull, 824000000ull, 825000000ull, 848000000ull, 849000000ull, 430000000ull, 431000000ull, 432000000ull, 433000000ull, 434000000ull, 435000000ull, 436000000ull, 437000000ull, 438000000ull, 439000000ull, 492000000ull, 493000000ull, 834000000ull, 835000000ull, 858000000ull, 859000000ull, 440000000ull, 441000000ull, 442000000ull, 443000000ull, 444000000ull, 445000000ull, 446000000ull, 447000000ull, 448000000ull, 449000000ull, 484000000ull, 485000000ull, 844000000ull, 845000000ull, 488000000ull, 489000000ull, 450000000ull, 451000000ull, 452000000ull, 453000000ull, 454000000ull, 455000000ull, 456000000ull, 457000000ull, 458000000ull, 459000000ull, 494000000ull, 495000000ull, 854000000ull, 855000000ull, 498000000ull, 499000000ull, 460000000ull, 461000000ull, 462000000ull, 463000000ull, 464000000ull, 465000000ull, 466000000ull, 467000000ull, 468000000ull, 469000000ull, 486000000ull, 487000000ull, 864000000ull, 865000000ull, 888000000ull, 889000000ull, 470000000ull, 471000000ull, 472000000ull, 473000000ull, 474000000ull, 475000000ull, 476000000ull, 477000000ull, 478000000ull, 479000000ull, 496000000ull, 497000000ull, 874000000ull, 875000000ull, 898000000ull, 899000000ull, 500000000ull, 501000000ull, 502000000ull, 503000000ull, 504000000ull, 505000000ull, 506000000ull, 507000000ull, 508000000ull, 509000000ull, 580000000ull, 581000000ull, 904000000ull, 905000000ull, 984000000ull, 985000000ull, 510000000ull, 511000000ull, 512000000ull, 513000000ull, 514000000ull, 515000000ull, 516000000ull, 517000000ull, 518000000ull, 519000000ull, 590000000ull, 591000000ull, 914000000ull, 915000000ull, 994000000ull, 995000000ull, 520000000ull, 521000000ull, 522000000ull, 523000000ull, 524000000ull, 525000000ull, 526000000ull, 527000000ull, 528000000ull, 529000000ull, 582000000ull, 583000000ull, 924000000ull, 925000000ull, 948000000ull, 949000000ull, 530000000ull, 531000000ull, 532000000ull, 533000000ull, 534000000ull, 535000000ull, 536000000ull, 537000000ull, 538000000ull, 539000000ull, 592000000ull, 593000000ull, 934000000ull, 935000000ull, 958000000ull, 959000000ull, 540000000ull, 541000000ull, 542000000ull, 543000000ull, 544000000ull, 545000000ull, 546000000ull, 547000000ull, 548000000ull, 549000000ull, 584000000ull, 585000000ull, 944000000ull, 945000000ull, 588000000ull, 589000000ull, 550000000ull, 551000000ull, 552000000ull, 553000000ull, 554000000ull, 555000000ull, 556000000ull, 557000000ull, 558000000ull, 559000000ull, 594000000ull, 595000000ull, 954000000ull, 955000000ull, 598000000ull, 599000000ull, 560000000ull, 561000000ull, 562000000ull, 563000000ull, 564000000ull, 565000000ull, 566000000ull, 567000000ull, 568000000ull, 569000000ull, 586000000ull, 587000000ull, 964000000ull, 965000000ull, 988000000ull, 989000000ull, 570000000ull, 571000000ull, 572000000ull, 573000000ull, 574000000ull, 575000000ull, 576000000ull, 577000000ull, 578000000ull, 579000000ull, 596000000ull, 597000000ull, 974000000ull, 975000000ull, 998000000ull, 999000000ull, 600000000ull, 601000000ull, 602000000ull, 603000000ull, 604000000ull, 605000000ull, 606000000ull, 607000000ull, 608000000ull, 609000000ull, 680000000ull, 681000000ull, 806000000ull, 807000000ull, 886000000ull, 887000000ull, 610000000ull, 611000000ull, 612000000ull, 613000000ull, 614000000ull, 615000000ull, 616000000ull, 617000000ull, 618000000ull, 619000000ull, 690000000ull, 691000000ull, 816000000ull, 817000000ull, 896000000ull, 897000000ull, 620000000ull, 621000000ull, 622000000ull, 623000000ull, 624000000ull, 625000000ull, 626000000ull, 627000000ull, 628000000ull, 629000000ull, 682000000ull, 683000000ull, 826000000ull, 827000000ull, 868000000ull, 869000000ull, 630000000ull, 631000000ull, 632000000ull, 633000000ull, 634000000ull, 635000000ull, 636000000ull, 637000000ull, 638000000ull, 639000000ull, 692000000ull, 693000000ull, 836000000ull, 837000000ull, 878000000ull, 879000000ull, 640000000ull, 641000000ull, 642000000ull, 643000000ull, 644000000ull, 645000000ull, 646000000ull, 647000000ull, 648000000ull, 649000000ull, 684000000ull, 685000000ull, 846000000ull, 847000000ull, 688000000ull, 689000000ull, 650000000ull, 651000000ull, 652000000ull, 653000000ull, 654000000ull, 655000000ull, 656000000ull, 657000000ull, 658000000ull, 659000000ull, 694000000ull, 695000000ull, 856000000ull, 857000000ull, 698000000ull, 699000000ull, 660000000ull, 661000000ull, 662000000ull, 663000000ull, 664000000ull, 665000000ull, 666000000ull, 667000000ull, 668000000ull, 669000000ull, 686000000ull, 687000000ull, 866000000ull, 867000000ull, 888000000ull, 889000000ull, 670000000ull, 671000000ull, 672000000ull, 673000000ull, 674000000ull, 675000000ull, 676000000ull, 677000000ull, 678000000ull, 679000000ull, 696000000ull, 697000000ull, 876000000ull, 877000000ull, 898000000ull, 899000000ull, 700000000ull, 701000000ull, 702000000ull, 703000000ull, 704000000ull, 705000000ull, 706000000ull, 707000000ull, 708000000ull, 709000000ull, 780000000ull, 781000000ull, 906000000ull, 907000000ull, 986000000ull, 987000000ull, 710000000ull, 711000000ull, 712000000ull, 713000000ull, 714000000ull, 715000000ull, 716000000ull, 717000000ull, 718000000ull, 719000000ull, 790000000ull, 791000000ull, 916000000ull, 917000000ull, 996000000ull, 997000000ull, 720000000ull, 721000000ull, 722000000ull, 723000000ull, 724000000ull, 725000000ull, 726000000ull, 727000000ull, 728000000ull, 729000000ull, 782000000ull, 783000000ull, 926000000ull, 927000000ull, 968000000ull, 969000000ull, 730000000ull, 731000000ull, 732000000ull, 733000000ull, 734000000ull, 735000000ull, 736000000ull, 737000000ull, 738000000ull, 739000000ull, 792000000ull, 793000000ull, 936000000ull, 937000000ull, 978000000ull, 979000000ull, 740000000ull, 741000000ull, 742000000ull, 743000000ull, 744000000ull, 745000000ull, 746000000ull, 747000000ull, 748000000ull, 749000000ull, 784000000ull, 785000000ull, 946000000ull, 947000000ull, 788000000ull, 789000000ull, 750000000ull, 751000000ull, 752000000ull, 753000000ull, 754000000ull, 755000000ull, 756000000ull, 757000000ull, 758000000ull, 759000000ull, 794000000ull, 795000000ull, 956000000ull, 957000000ull, 798000000ull, 799000000ull, 760000000ull, 761000000ull, 762000000ull, 763000000ull, 764000000ull, 765000000ull, 766000000ull, 767000000ull, 768000000ull, 769000000ull, 786000000ull, 787000000ull, 966000000ull, 967000000ull, 988000000ull, 989000000ull, 770000000ull, 771000000ull, 772000000ull, 773000000ull, 774000000ull, 775000000ull, 776000000ull, 777000000ull, 778000000ull, 779000000ull, 796000000ull, 797000000ull, 976000000ull, 977000000ull, 998000000ull, 999000000ull }; const UINT64 d2b4[] = { 0000000000ull, 1000000000ull, 2000000000ull, 3000000000ull, 4000000000ull, 5000000000ull, 6000000000ull, 7000000000ull, 8000000000ull, 9000000000ull, 80000000000ull, 81000000000ull, 800000000000ull, 801000000000ull, 880000000000ull, 881000000000ull, 10000000000ull, 11000000000ull, 12000000000ull, 13000000000ull, 14000000000ull, 15000000000ull, 16000000000ull, 17000000000ull, 18000000000ull, 19000000000ull, 90000000000ull, 91000000000ull, 810000000000ull, 811000000000ull, 890000000000ull, 891000000000ull, 20000000000ull, 21000000000ull, 22000000000ull, 23000000000ull, 24000000000ull, 25000000000ull, 26000000000ull, 27000000000ull, 28000000000ull, 29000000000ull, 82000000000ull, 83000000000ull, 820000000000ull, 821000000000ull, 808000000000ull, 809000000000ull, 30000000000ull, 31000000000ull, 32000000000ull, 33000000000ull, 34000000000ull, 35000000000ull, 36000000000ull, 37000000000ull, 38000000000ull, 39000000000ull, 92000000000ull, 93000000000ull, 830000000000ull, 831000000000ull, 818000000000ull, 819000000000ull, 40000000000ull, 41000000000ull, 42000000000ull, 43000000000ull, 44000000000ull, 45000000000ull, 46000000000ull, 47000000000ull, 48000000000ull, 49000000000ull, 84000000000ull, 85000000000ull, 840000000000ull, 841000000000ull, 88000000000ull, 89000000000ull, 50000000000ull, 51000000000ull, 52000000000ull, 53000000000ull, 54000000000ull, 55000000000ull, 56000000000ull, 57000000000ull, 58000000000ull, 59000000000ull, 94000000000ull, 95000000000ull, 850000000000ull, 851000000000ull, 98000000000ull, 99000000000ull, 60000000000ull, 61000000000ull, 62000000000ull, 63000000000ull, 64000000000ull, 65000000000ull, 66000000000ull, 67000000000ull, 68000000000ull, 69000000000ull, 86000000000ull, 87000000000ull, 860000000000ull, 861000000000ull, 888000000000ull, 889000000000ull, 70000000000ull, 71000000000ull, 72000000000ull, 73000000000ull, 74000000000ull, 75000000000ull, 76000000000ull, 77000000000ull, 78000000000ull, 79000000000ull, 96000000000ull, 97000000000ull, 870000000000ull, 871000000000ull, 898000000000ull, 899000000000ull, 100000000000ull, 101000000000ull, 102000000000ull, 103000000000ull, 104000000000ull, 105000000000ull, 106000000000ull, 107000000000ull, 108000000000ull, 109000000000ull, 180000000000ull, 181000000000ull, 900000000000ull, 901000000000ull, 980000000000ull, 981000000000ull, 110000000000ull, 111000000000ull, 112000000000ull, 113000000000ull, 114000000000ull, 115000000000ull, 116000000000ull, 117000000000ull, 118000000000ull, 119000000000ull, 190000000000ull, 191000000000ull, 910000000000ull, 911000000000ull, 990000000000ull, 991000000000ull, 120000000000ull, 121000000000ull, 122000000000ull, 123000000000ull, 124000000000ull, 125000000000ull, 126000000000ull, 127000000000ull, 128000000000ull, 129000000000ull, 182000000000ull, 183000000000ull, 920000000000ull, 921000000000ull, 908000000000ull, 909000000000ull, 130000000000ull, 131000000000ull, 132000000000ull, 133000000000ull, 134000000000ull, 135000000000ull, 136000000000ull, 137000000000ull, 138000000000ull, 139000000000ull, 192000000000ull, 193000000000ull, 930000000000ull, 931000000000ull, 918000000000ull, 919000000000ull, 140000000000ull, 141000000000ull, 142000000000ull, 143000000000ull, 144000000000ull, 145000000000ull, 146000000000ull, 147000000000ull, 148000000000ull, 149000000000ull, 184000000000ull, 185000000000ull, 940000000000ull, 941000000000ull, 188000000000ull, 189000000000ull, 150000000000ull, 151000000000ull, 152000000000ull, 153000000000ull, 154000000000ull, 155000000000ull, 156000000000ull, 157000000000ull, 158000000000ull, 159000000000ull, 194000000000ull, 195000000000ull, 950000000000ull, 951000000000ull, 198000000000ull, 199000000000ull, 160000000000ull, 161000000000ull, 162000000000ull, 163000000000ull, 164000000000ull, 165000000000ull, 166000000000ull, 167000000000ull, 168000000000ull, 169000000000ull, 186000000000ull, 187000000000ull, 960000000000ull, 961000000000ull, 988000000000ull, 989000000000ull, 170000000000ull, 171000000000ull, 172000000000ull, 173000000000ull, 174000000000ull, 175000000000ull, 176000000000ull, 177000000000ull, 178000000000ull, 179000000000ull, 196000000000ull, 197000000000ull, 970000000000ull, 971000000000ull, 998000000000ull, 999000000000ull, 200000000000ull, 201000000000ull, 202000000000ull, 203000000000ull, 204000000000ull, 205000000000ull, 206000000000ull, 207000000000ull, 208000000000ull, 209000000000ull, 280000000000ull, 281000000000ull, 802000000000ull, 803000000000ull, 882000000000ull, 883000000000ull, 210000000000ull, 211000000000ull, 212000000000ull, 213000000000ull, 214000000000ull, 215000000000ull, 216000000000ull, 217000000000ull, 218000000000ull, 219000000000ull, 290000000000ull, 291000000000ull, 812000000000ull, 813000000000ull, 892000000000ull, 893000000000ull, 220000000000ull, 221000000000ull, 222000000000ull, 223000000000ull, 224000000000ull, 225000000000ull, 226000000000ull, 227000000000ull, 228000000000ull, 229000000000ull, 282000000000ull, 283000000000ull, 822000000000ull, 823000000000ull, 828000000000ull, 829000000000ull, 230000000000ull, 231000000000ull, 232000000000ull, 233000000000ull, 234000000000ull, 235000000000ull, 236000000000ull, 237000000000ull, 238000000000ull, 239000000000ull, 292000000000ull, 293000000000ull, 832000000000ull, 833000000000ull, 838000000000ull, 839000000000ull, 240000000000ull, 241000000000ull, 242000000000ull, 243000000000ull, 244000000000ull, 245000000000ull, 246000000000ull, 247000000000ull, 248000000000ull, 249000000000ull, 284000000000ull, 285000000000ull, 842000000000ull, 843000000000ull, 288000000000ull, 289000000000ull, 250000000000ull, 251000000000ull, 252000000000ull, 253000000000ull, 254000000000ull, 255000000000ull, 256000000000ull, 257000000000ull, 258000000000ull, 259000000000ull, 294000000000ull, 295000000000ull, 852000000000ull, 853000000000ull, 298000000000ull, 299000000000ull, 260000000000ull, 261000000000ull, 262000000000ull, 263000000000ull, 264000000000ull, 265000000000ull, 266000000000ull, 267000000000ull, 268000000000ull, 269000000000ull, 286000000000ull, 287000000000ull, 862000000000ull, 863000000000ull, 888000000000ull, 889000000000ull, 270000000000ull, 271000000000ull, 272000000000ull, 273000000000ull, 274000000000ull, 275000000000ull, 276000000000ull, 277000000000ull, 278000000000ull, 279000000000ull, 296000000000ull, 297000000000ull, 872000000000ull, 873000000000ull, 898000000000ull, 899000000000ull, 300000000000ull, 301000000000ull, 302000000000ull, 303000000000ull, 304000000000ull, 305000000000ull, 306000000000ull, 307000000000ull, 308000000000ull, 309000000000ull, 380000000000ull, 381000000000ull, 902000000000ull, 903000000000ull, 982000000000ull, 983000000000ull, 310000000000ull, 311000000000ull, 312000000000ull, 313000000000ull, 314000000000ull, 315000000000ull, 316000000000ull, 317000000000ull, 318000000000ull, 319000000000ull, 390000000000ull, 391000000000ull, 912000000000ull, 913000000000ull, 992000000000ull, 993000000000ull, 320000000000ull, 321000000000ull, 322000000000ull, 323000000000ull, 324000000000ull, 325000000000ull, 326000000000ull, 327000000000ull, 328000000000ull, 329000000000ull, 382000000000ull, 383000000000ull, 922000000000ull, 923000000000ull, 928000000000ull, 929000000000ull, 330000000000ull, 331000000000ull, 332000000000ull, 333000000000ull, 334000000000ull, 335000000000ull, 336000000000ull, 337000000000ull, 338000000000ull, 339000000000ull, 392000000000ull, 393000000000ull, 932000000000ull, 933000000000ull, 938000000000ull, 939000000000ull, 340000000000ull, 341000000000ull, 342000000000ull, 343000000000ull, 344000000000ull, 345000000000ull, 346000000000ull, 347000000000ull, 348000000000ull, 349000000000ull, 384000000000ull, 385000000000ull, 942000000000ull, 943000000000ull, 388000000000ull, 389000000000ull, 350000000000ull, 351000000000ull, 352000000000ull, 353000000000ull, 354000000000ull, 355000000000ull, 356000000000ull, 357000000000ull, 358000000000ull, 359000000000ull, 394000000000ull, 395000000000ull, 952000000000ull, 953000000000ull, 398000000000ull, 399000000000ull, 360000000000ull, 361000000000ull, 362000000000ull, 363000000000ull, 364000000000ull, 365000000000ull, 366000000000ull, 367000000000ull, 368000000000ull, 369000000000ull, 386000000000ull, 387000000000ull, 962000000000ull, 963000000000ull, 988000000000ull, 989000000000ull, 370000000000ull, 371000000000ull, 372000000000ull, 373000000000ull, 374000000000ull, 375000000000ull, 376000000000ull, 377000000000ull, 378000000000ull, 379000000000ull, 396000000000ull, 397000000000ull, 972000000000ull, 973000000000ull, 998000000000ull, 999000000000ull, 400000000000ull, 401000000000ull, 402000000000ull, 403000000000ull, 404000000000ull, 405000000000ull, 406000000000ull, 407000000000ull, 408000000000ull, 409000000000ull, 480000000000ull, 481000000000ull, 804000000000ull, 805000000000ull, 884000000000ull, 885000000000ull, 410000000000ull, 411000000000ull, 412000000000ull, 413000000000ull, 414000000000ull, 415000000000ull, 416000000000ull, 417000000000ull, 418000000000ull, 419000000000ull, 490000000000ull, 491000000000ull, 814000000000ull, 815000000000ull, 894000000000ull, 895000000000ull, 420000000000ull, 421000000000ull, 422000000000ull, 423000000000ull, 424000000000ull, 425000000000ull, 426000000000ull, 427000000000ull, 428000000000ull, 429000000000ull, 482000000000ull, 483000000000ull, 824000000000ull, 825000000000ull, 848000000000ull, 849000000000ull, 430000000000ull, 431000000000ull, 432000000000ull, 433000000000ull, 434000000000ull, 435000000000ull, 436000000000ull, 437000000000ull, 438000000000ull, 439000000000ull, 492000000000ull, 493000000000ull, 834000000000ull, 835000000000ull, 858000000000ull, 859000000000ull, 440000000000ull, 441000000000ull, 442000000000ull, 443000000000ull, 444000000000ull, 445000000000ull, 446000000000ull, 447000000000ull, 448000000000ull, 449000000000ull, 484000000000ull, 485000000000ull, 844000000000ull, 845000000000ull, 488000000000ull, 489000000000ull, 450000000000ull, 451000000000ull, 452000000000ull, 453000000000ull, 454000000000ull, 455000000000ull, 456000000000ull, 457000000000ull, 458000000000ull, 459000000000ull, 494000000000ull, 495000000000ull, 854000000000ull, 855000000000ull, 498000000000ull, 499000000000ull, 460000000000ull, 461000000000ull, 462000000000ull, 463000000000ull, 464000000000ull, 465000000000ull, 466000000000ull, 467000000000ull, 468000000000ull, 469000000000ull, 486000000000ull, 487000000000ull, 864000000000ull, 865000000000ull, 888000000000ull, 889000000000ull, 470000000000ull, 471000000000ull, 472000000000ull, 473000000000ull, 474000000000ull, 475000000000ull, 476000000000ull, 477000000000ull, 478000000000ull, 479000000000ull, 496000000000ull, 497000000000ull, 874000000000ull, 875000000000ull, 898000000000ull, 899000000000ull, 500000000000ull, 501000000000ull, 502000000000ull, 503000000000ull, 504000000000ull, 505000000000ull, 506000000000ull, 507000000000ull, 508000000000ull, 509000000000ull, 580000000000ull, 581000000000ull, 904000000000ull, 905000000000ull, 984000000000ull, 985000000000ull, 510000000000ull, 511000000000ull, 512000000000ull, 513000000000ull, 514000000000ull, 515000000000ull, 516000000000ull, 517000000000ull, 518000000000ull, 519000000000ull, 590000000000ull, 591000000000ull, 914000000000ull, 915000000000ull, 994000000000ull, 995000000000ull, 520000000000ull, 521000000000ull, 522000000000ull, 523000000000ull, 524000000000ull, 525000000000ull, 526000000000ull, 527000000000ull, 528000000000ull, 529000000000ull, 582000000000ull, 583000000000ull, 924000000000ull, 925000000000ull, 948000000000ull, 949000000000ull, 530000000000ull, 531000000000ull, 532000000000ull, 533000000000ull, 534000000000ull, 535000000000ull, 536000000000ull, 537000000000ull, 538000000000ull, 539000000000ull, 592000000000ull, 593000000000ull, 934000000000ull, 935000000000ull, 958000000000ull, 959000000000ull, 540000000000ull, 541000000000ull, 542000000000ull, 543000000000ull, 544000000000ull, 545000000000ull, 546000000000ull, 547000000000ull, 548000000000ull, 549000000000ull, 584000000000ull, 585000000000ull, 944000000000ull, 945000000000ull, 588000000000ull, 589000000000ull, 550000000000ull, 551000000000ull, 552000000000ull, 553000000000ull, 554000000000ull, 555000000000ull, 556000000000ull, 557000000000ull, 558000000000ull, 559000000000ull, 594000000000ull, 595000000000ull, 954000000000ull, 955000000000ull, 598000000000ull, 599000000000ull, 560000000000ull, 561000000000ull, 562000000000ull, 563000000000ull, 564000000000ull, 565000000000ull, 566000000000ull, 567000000000ull, 568000000000ull, 569000000000ull, 586000000000ull, 587000000000ull, 964000000000ull, 965000000000ull, 988000000000ull, 989000000000ull, 570000000000ull, 571000000000ull, 572000000000ull, 573000000000ull, 574000000000ull, 575000000000ull, 576000000000ull, 577000000000ull, 578000000000ull, 579000000000ull, 596000000000ull, 597000000000ull, 974000000000ull, 975000000000ull, 998000000000ull, 999000000000ull, 600000000000ull, 601000000000ull, 602000000000ull, 603000000000ull, 604000000000ull, 605000000000ull, 606000000000ull, 607000000000ull, 608000000000ull, 609000000000ull, 680000000000ull, 681000000000ull, 806000000000ull, 807000000000ull, 886000000000ull, 887000000000ull, 610000000000ull, 611000000000ull, 612000000000ull, 613000000000ull, 614000000000ull, 615000000000ull, 616000000000ull, 617000000000ull, 618000000000ull, 619000000000ull, 690000000000ull, 691000000000ull, 816000000000ull, 817000000000ull, 896000000000ull, 897000000000ull, 620000000000ull, 621000000000ull, 622000000000ull, 623000000000ull, 624000000000ull, 625000000000ull, 626000000000ull, 627000000000ull, 628000000000ull, 629000000000ull, 682000000000ull, 683000000000ull, 826000000000ull, 827000000000ull, 868000000000ull, 869000000000ull, 630000000000ull, 631000000000ull, 632000000000ull, 633000000000ull, 634000000000ull, 635000000000ull, 636000000000ull, 637000000000ull, 638000000000ull, 639000000000ull, 692000000000ull, 693000000000ull, 836000000000ull, 837000000000ull, 878000000000ull, 879000000000ull, 640000000000ull, 641000000000ull, 642000000000ull, 643000000000ull, 644000000000ull, 645000000000ull, 646000000000ull, 647000000000ull, 648000000000ull, 649000000000ull, 684000000000ull, 685000000000ull, 846000000000ull, 847000000000ull, 688000000000ull, 689000000000ull, 650000000000ull, 651000000000ull, 652000000000ull, 653000000000ull, 654000000000ull, 655000000000ull, 656000000000ull, 657000000000ull, 658000000000ull, 659000000000ull, 694000000000ull, 695000000000ull, 856000000000ull, 857000000000ull, 698000000000ull, 699000000000ull, 660000000000ull, 661000000000ull, 662000000000ull, 663000000000ull, 664000000000ull, 665000000000ull, 666000000000ull, 667000000000ull, 668000000000ull, 669000000000ull, 686000000000ull, 687000000000ull, 866000000000ull, 867000000000ull, 888000000000ull, 889000000000ull, 670000000000ull, 671000000000ull, 672000000000ull, 673000000000ull, 674000000000ull, 675000000000ull, 676000000000ull, 677000000000ull, 678000000000ull, 679000000000ull, 696000000000ull, 697000000000ull, 876000000000ull, 877000000000ull, 898000000000ull, 899000000000ull, 700000000000ull, 701000000000ull, 702000000000ull, 703000000000ull, 704000000000ull, 705000000000ull, 706000000000ull, 707000000000ull, 708000000000ull, 709000000000ull, 780000000000ull, 781000000000ull, 906000000000ull, 907000000000ull, 986000000000ull, 987000000000ull, 710000000000ull, 711000000000ull, 712000000000ull, 713000000000ull, 714000000000ull, 715000000000ull, 716000000000ull, 717000000000ull, 718000000000ull, 719000000000ull, 790000000000ull, 791000000000ull, 916000000000ull, 917000000000ull, 996000000000ull, 997000000000ull, 720000000000ull, 721000000000ull, 722000000000ull, 723000000000ull, 724000000000ull, 725000000000ull, 726000000000ull, 727000000000ull, 728000000000ull, 729000000000ull, 782000000000ull, 783000000000ull, 926000000000ull, 927000000000ull, 968000000000ull, 969000000000ull, 730000000000ull, 731000000000ull, 732000000000ull, 733000000000ull, 734000000000ull, 735000000000ull, 736000000000ull, 737000000000ull, 738000000000ull, 739000000000ull, 792000000000ull, 793000000000ull, 936000000000ull, 937000000000ull, 978000000000ull, 979000000000ull, 740000000000ull, 741000000000ull, 742000000000ull, 743000000000ull, 744000000000ull, 745000000000ull, 746000000000ull, 747000000000ull, 748000000000ull, 749000000000ull, 784000000000ull, 785000000000ull, 946000000000ull, 947000000000ull, 788000000000ull, 789000000000ull, 750000000000ull, 751000000000ull, 752000000000ull, 753000000000ull, 754000000000ull, 755000000000ull, 756000000000ull, 757000000000ull, 758000000000ull, 759000000000ull, 794000000000ull, 795000000000ull, 956000000000ull, 957000000000ull, 798000000000ull, 799000000000ull, 760000000000ull, 761000000000ull, 762000000000ull, 763000000000ull, 764000000000ull, 765000000000ull, 766000000000ull, 767000000000ull, 768000000000ull, 769000000000ull, 786000000000ull, 787000000000ull, 966000000000ull, 967000000000ull, 988000000000ull, 989000000000ull, 770000000000ull, 771000000000ull, 772000000000ull, 773000000000ull, 774000000000ull, 775000000000ull, 776000000000ull, 777000000000ull, 778000000000ull, 779000000000ull, 796000000000ull, 797000000000ull, 976000000000ull, 977000000000ull, 998000000000ull, 999000000000ull }; const UINT64 d2b5[] = { 0000000000000ull, 1000000000000ull, 2000000000000ull, 3000000000000ull, 4000000000000ull, 5000000000000ull, 6000000000000ull, 7000000000000ull, 8000000000000ull, 9000000000000ull, 80000000000000ull, 81000000000000ull, 800000000000000ull, 801000000000000ull, 880000000000000ull, 881000000000000ull, 10000000000000ull, 11000000000000ull, 12000000000000ull, 13000000000000ull, 14000000000000ull, 15000000000000ull, 16000000000000ull, 17000000000000ull, 18000000000000ull, 19000000000000ull, 90000000000000ull, 91000000000000ull, 810000000000000ull, 811000000000000ull, 890000000000000ull, 891000000000000ull, 20000000000000ull, 21000000000000ull, 22000000000000ull, 23000000000000ull, 24000000000000ull, 25000000000000ull, 26000000000000ull, 27000000000000ull, 28000000000000ull, 29000000000000ull, 82000000000000ull, 83000000000000ull, 820000000000000ull, 821000000000000ull, 808000000000000ull, 809000000000000ull, 30000000000000ull, 31000000000000ull, 32000000000000ull, 33000000000000ull, 34000000000000ull, 35000000000000ull, 36000000000000ull, 37000000000000ull, 38000000000000ull, 39000000000000ull, 92000000000000ull, 93000000000000ull, 830000000000000ull, 831000000000000ull, 818000000000000ull, 819000000000000ull, 40000000000000ull, 41000000000000ull, 42000000000000ull, 43000000000000ull, 44000000000000ull, 45000000000000ull, 46000000000000ull, 47000000000000ull, 48000000000000ull, 49000000000000ull, 84000000000000ull, 85000000000000ull, 840000000000000ull, 841000000000000ull, 88000000000000ull, 89000000000000ull, 50000000000000ull, 51000000000000ull, 52000000000000ull, 53000000000000ull, 54000000000000ull, 55000000000000ull, 56000000000000ull, 57000000000000ull, 58000000000000ull, 59000000000000ull, 94000000000000ull, 95000000000000ull, 850000000000000ull, 851000000000000ull, 98000000000000ull, 99000000000000ull, 60000000000000ull, 61000000000000ull, 62000000000000ull, 63000000000000ull, 64000000000000ull, 65000000000000ull, 66000000000000ull, 67000000000000ull, 68000000000000ull, 69000000000000ull, 86000000000000ull, 87000000000000ull, 860000000000000ull, 861000000000000ull, 888000000000000ull, 889000000000000ull, 70000000000000ull, 71000000000000ull, 72000000000000ull, 73000000000000ull, 74000000000000ull, 75000000000000ull, 76000000000000ull, 77000000000000ull, 78000000000000ull, 79000000000000ull, 96000000000000ull, 97000000000000ull, 870000000000000ull, 871000000000000ull, 898000000000000ull, 899000000000000ull, 100000000000000ull, 101000000000000ull, 102000000000000ull, 103000000000000ull, 104000000000000ull, 105000000000000ull, 106000000000000ull, 107000000000000ull, 108000000000000ull, 109000000000000ull, 180000000000000ull, 181000000000000ull, 900000000000000ull, 901000000000000ull, 980000000000000ull, 981000000000000ull, 110000000000000ull, 111000000000000ull, 112000000000000ull, 113000000000000ull, 114000000000000ull, 115000000000000ull, 116000000000000ull, 117000000000000ull, 118000000000000ull, 119000000000000ull, 190000000000000ull, 191000000000000ull, 910000000000000ull, 911000000000000ull, 990000000000000ull, 991000000000000ull, 120000000000000ull, 121000000000000ull, 122000000000000ull, 123000000000000ull, 124000000000000ull, 125000000000000ull, 126000000000000ull, 127000000000000ull, 128000000000000ull, 129000000000000ull, 182000000000000ull, 183000000000000ull, 920000000000000ull, 921000000000000ull, 908000000000000ull, 909000000000000ull, 130000000000000ull, 131000000000000ull, 132000000000000ull, 133000000000000ull, 134000000000000ull, 135000000000000ull, 136000000000000ull, 137000000000000ull, 138000000000000ull, 139000000000000ull, 192000000000000ull, 193000000000000ull, 930000000000000ull, 931000000000000ull, 918000000000000ull, 919000000000000ull, 140000000000000ull, 141000000000000ull, 142000000000000ull, 143000000000000ull, 144000000000000ull, 145000000000000ull, 146000000000000ull, 147000000000000ull, 148000000000000ull, 149000000000000ull, 184000000000000ull, 185000000000000ull, 940000000000000ull, 941000000000000ull, 188000000000000ull, 189000000000000ull, 150000000000000ull, 151000000000000ull, 152000000000000ull, 153000000000000ull, 154000000000000ull, 155000000000000ull, 156000000000000ull, 157000000000000ull, 158000000000000ull, 159000000000000ull, 194000000000000ull, 195000000000000ull, 950000000000000ull, 951000000000000ull, 198000000000000ull, 199000000000000ull, 160000000000000ull, 161000000000000ull, 162000000000000ull, 163000000000000ull, 164000000000000ull, 165000000000000ull, 166000000000000ull, 167000000000000ull, 168000000000000ull, 169000000000000ull, 186000000000000ull, 187000000000000ull, 960000000000000ull, 961000000000000ull, 988000000000000ull, 989000000000000ull, 170000000000000ull, 171000000000000ull, 172000000000000ull, 173000000000000ull, 174000000000000ull, 175000000000000ull, 176000000000000ull, 177000000000000ull, 178000000000000ull, 179000000000000ull, 196000000000000ull, 197000000000000ull, 970000000000000ull, 971000000000000ull, 998000000000000ull, 999000000000000ull, 200000000000000ull, 201000000000000ull, 202000000000000ull, 203000000000000ull, 204000000000000ull, 205000000000000ull, 206000000000000ull, 207000000000000ull, 208000000000000ull, 209000000000000ull, 280000000000000ull, 281000000000000ull, 802000000000000ull, 803000000000000ull, 882000000000000ull, 883000000000000ull, 210000000000000ull, 211000000000000ull, 212000000000000ull, 213000000000000ull, 214000000000000ull, 215000000000000ull, 216000000000000ull, 217000000000000ull, 218000000000000ull, 219000000000000ull, 290000000000000ull, 291000000000000ull, 812000000000000ull, 813000000000000ull, 892000000000000ull, 893000000000000ull, 220000000000000ull, 221000000000000ull, 222000000000000ull, 223000000000000ull, 224000000000000ull, 225000000000000ull, 226000000000000ull, 227000000000000ull, 228000000000000ull, 229000000000000ull, 282000000000000ull, 283000000000000ull, 822000000000000ull, 823000000000000ull, 828000000000000ull, 829000000000000ull, 230000000000000ull, 231000000000000ull, 232000000000000ull, 233000000000000ull, 234000000000000ull, 235000000000000ull, 236000000000000ull, 237000000000000ull, 238000000000000ull, 239000000000000ull, 292000000000000ull, 293000000000000ull, 832000000000000ull, 833000000000000ull, 838000000000000ull, 839000000000000ull, 240000000000000ull, 241000000000000ull, 242000000000000ull, 243000000000000ull, 244000000000000ull, 245000000000000ull, 246000000000000ull, 247000000000000ull, 248000000000000ull, 249000000000000ull, 284000000000000ull, 285000000000000ull, 842000000000000ull, 843000000000000ull, 288000000000000ull, 289000000000000ull, 250000000000000ull, 251000000000000ull, 252000000000000ull, 253000000000000ull, 254000000000000ull, 255000000000000ull, 256000000000000ull, 257000000000000ull, 258000000000000ull, 259000000000000ull, 294000000000000ull, 295000000000000ull, 852000000000000ull, 853000000000000ull, 298000000000000ull, 299000000000000ull, 260000000000000ull, 261000000000000ull, 262000000000000ull, 263000000000000ull, 264000000000000ull, 265000000000000ull, 266000000000000ull, 267000000000000ull, 268000000000000ull, 269000000000000ull, 286000000000000ull, 287000000000000ull, 862000000000000ull, 863000000000000ull, 888000000000000ull, 889000000000000ull, 270000000000000ull, 271000000000000ull, 272000000000000ull, 273000000000000ull, 274000000000000ull, 275000000000000ull, 276000000000000ull, 277000000000000ull, 278000000000000ull, 279000000000000ull, 296000000000000ull, 297000000000000ull, 872000000000000ull, 873000000000000ull, 898000000000000ull, 899000000000000ull, 300000000000000ull, 301000000000000ull, 302000000000000ull, 303000000000000ull, 304000000000000ull, 305000000000000ull, 306000000000000ull, 307000000000000ull, 308000000000000ull, 309000000000000ull, 380000000000000ull, 381000000000000ull, 902000000000000ull, 903000000000000ull, 982000000000000ull, 983000000000000ull, 310000000000000ull, 311000000000000ull, 312000000000000ull, 313000000000000ull, 314000000000000ull, 315000000000000ull, 316000000000000ull, 317000000000000ull, 318000000000000ull, 319000000000000ull, 390000000000000ull, 391000000000000ull, 912000000000000ull, 913000000000000ull, 992000000000000ull, 993000000000000ull, 320000000000000ull, 321000000000000ull, 322000000000000ull, 323000000000000ull, 324000000000000ull, 325000000000000ull, 326000000000000ull, 327000000000000ull, 328000000000000ull, 329000000000000ull, 382000000000000ull, 383000000000000ull, 922000000000000ull, 923000000000000ull, 928000000000000ull, 929000000000000ull, 330000000000000ull, 331000000000000ull, 332000000000000ull, 333000000000000ull, 334000000000000ull, 335000000000000ull, 336000000000000ull, 337000000000000ull, 338000000000000ull, 339000000000000ull, 392000000000000ull, 393000000000000ull, 932000000000000ull, 933000000000000ull, 938000000000000ull, 939000000000000ull, 340000000000000ull, 341000000000000ull, 342000000000000ull, 343000000000000ull, 344000000000000ull, 345000000000000ull, 346000000000000ull, 347000000000000ull, 348000000000000ull, 349000000000000ull, 384000000000000ull, 385000000000000ull, 942000000000000ull, 943000000000000ull, 388000000000000ull, 389000000000000ull, 350000000000000ull, 351000000000000ull, 352000000000000ull, 353000000000000ull, 354000000000000ull, 355000000000000ull, 356000000000000ull, 357000000000000ull, 358000000000000ull, 359000000000000ull, 394000000000000ull, 395000000000000ull, 952000000000000ull, 953000000000000ull, 398000000000000ull, 399000000000000ull, 360000000000000ull, 361000000000000ull, 362000000000000ull, 363000000000000ull, 364000000000000ull, 365000000000000ull, 366000000000000ull, 367000000000000ull, 368000000000000ull, 369000000000000ull, 386000000000000ull, 387000000000000ull, 962000000000000ull, 963000000000000ull, 988000000000000ull, 989000000000000ull, 370000000000000ull, 371000000000000ull, 372000000000000ull, 373000000000000ull, 374000000000000ull, 375000000000000ull, 376000000000000ull, 377000000000000ull, 378000000000000ull, 379000000000000ull, 396000000000000ull, 397000000000000ull, 972000000000000ull, 973000000000000ull, 998000000000000ull, 999000000000000ull, 400000000000000ull, 401000000000000ull, 402000000000000ull, 403000000000000ull, 404000000000000ull, 405000000000000ull, 406000000000000ull, 407000000000000ull, 408000000000000ull, 409000000000000ull, 480000000000000ull, 481000000000000ull, 804000000000000ull, 805000000000000ull, 884000000000000ull, 885000000000000ull, 410000000000000ull, 411000000000000ull, 412000000000000ull, 413000000000000ull, 414000000000000ull, 415000000000000ull, 416000000000000ull, 417000000000000ull, 418000000000000ull, 419000000000000ull, 490000000000000ull, 491000000000000ull, 814000000000000ull, 815000000000000ull, 894000000000000ull, 895000000000000ull, 420000000000000ull, 421000000000000ull, 422000000000000ull, 423000000000000ull, 424000000000000ull, 425000000000000ull, 426000000000000ull, 427000000000000ull, 428000000000000ull, 429000000000000ull, 482000000000000ull, 483000000000000ull, 824000000000000ull, 825000000000000ull, 848000000000000ull, 849000000000000ull, 430000000000000ull, 431000000000000ull, 432000000000000ull, 433000000000000ull, 434000000000000ull, 435000000000000ull, 436000000000000ull, 437000000000000ull, 438000000000000ull, 439000000000000ull, 492000000000000ull, 493000000000000ull, 834000000000000ull, 835000000000000ull, 858000000000000ull, 859000000000000ull, 440000000000000ull, 441000000000000ull, 442000000000000ull, 443000000000000ull, 444000000000000ull, 445000000000000ull, 446000000000000ull, 447000000000000ull, 448000000000000ull, 449000000000000ull, 484000000000000ull, 485000000000000ull, 844000000000000ull, 845000000000000ull, 488000000000000ull, 489000000000000ull, 450000000000000ull, 451000000000000ull, 452000000000000ull, 453000000000000ull, 454000000000000ull, 455000000000000ull, 456000000000000ull, 457000000000000ull, 458000000000000ull, 459000000000000ull, 494000000000000ull, 495000000000000ull, 854000000000000ull, 855000000000000ull, 498000000000000ull, 499000000000000ull, 460000000000000ull, 461000000000000ull, 462000000000000ull, 463000000000000ull, 464000000000000ull, 465000000000000ull, 466000000000000ull, 467000000000000ull, 468000000000000ull, 469000000000000ull, 486000000000000ull, 487000000000000ull, 864000000000000ull, 865000000000000ull, 888000000000000ull, 889000000000000ull, 470000000000000ull, 471000000000000ull, 472000000000000ull, 473000000000000ull, 474000000000000ull, 475000000000000ull, 476000000000000ull, 477000000000000ull, 478000000000000ull, 479000000000000ull, 496000000000000ull, 497000000000000ull, 874000000000000ull, 875000000000000ull, 898000000000000ull, 899000000000000ull, 500000000000000ull, 501000000000000ull, 502000000000000ull, 503000000000000ull, 504000000000000ull, 505000000000000ull, 506000000000000ull, 507000000000000ull, 508000000000000ull, 509000000000000ull, 580000000000000ull, 581000000000000ull, 904000000000000ull, 905000000000000ull, 984000000000000ull, 985000000000000ull, 510000000000000ull, 511000000000000ull, 512000000000000ull, 513000000000000ull, 514000000000000ull, 515000000000000ull, 516000000000000ull, 517000000000000ull, 518000000000000ull, 519000000000000ull, 590000000000000ull, 591000000000000ull, 914000000000000ull, 915000000000000ull, 994000000000000ull, 995000000000000ull, 520000000000000ull, 521000000000000ull, 522000000000000ull, 523000000000000ull, 524000000000000ull, 525000000000000ull, 526000000000000ull, 527000000000000ull, 528000000000000ull, 529000000000000ull, 582000000000000ull, 583000000000000ull, 924000000000000ull, 925000000000000ull, 948000000000000ull, 949000000000000ull, 530000000000000ull, 531000000000000ull, 532000000000000ull, 533000000000000ull, 534000000000000ull, 535000000000000ull, 536000000000000ull, 537000000000000ull, 538000000000000ull, 539000000000000ull, 592000000000000ull, 593000000000000ull, 934000000000000ull, 935000000000000ull, 958000000000000ull, 959000000000000ull, 540000000000000ull, 541000000000000ull, 542000000000000ull, 543000000000000ull, 544000000000000ull, 545000000000000ull, 546000000000000ull, 547000000000000ull, 548000000000000ull, 549000000000000ull, 584000000000000ull, 585000000000000ull, 944000000000000ull, 945000000000000ull, 588000000000000ull, 589000000000000ull, 550000000000000ull, 551000000000000ull, 552000000000000ull, 553000000000000ull, 554000000000000ull, 555000000000000ull, 556000000000000ull, 557000000000000ull, 558000000000000ull, 559000000000000ull, 594000000000000ull, 595000000000000ull, 954000000000000ull, 955000000000000ull, 598000000000000ull, 599000000000000ull, 560000000000000ull, 561000000000000ull, 562000000000000ull, 563000000000000ull, 564000000000000ull, 565000000000000ull, 566000000000000ull, 567000000000000ull, 568000000000000ull, 569000000000000ull, 586000000000000ull, 587000000000000ull, 964000000000000ull, 965000000000000ull, 988000000000000ull, 989000000000000ull, 570000000000000ull, 571000000000000ull, 572000000000000ull, 573000000000000ull, 574000000000000ull, 575000000000000ull, 576000000000000ull, 577000000000000ull, 578000000000000ull, 579000000000000ull, 596000000000000ull, 597000000000000ull, 974000000000000ull, 975000000000000ull, 998000000000000ull, 999000000000000ull, 600000000000000ull, 601000000000000ull, 602000000000000ull, 603000000000000ull, 604000000000000ull, 605000000000000ull, 606000000000000ull, 607000000000000ull, 608000000000000ull, 609000000000000ull, 680000000000000ull, 681000000000000ull, 806000000000000ull, 807000000000000ull, 886000000000000ull, 887000000000000ull, 610000000000000ull, 611000000000000ull, 612000000000000ull, 613000000000000ull, 614000000000000ull, 615000000000000ull, 616000000000000ull, 617000000000000ull, 618000000000000ull, 619000000000000ull, 690000000000000ull, 691000000000000ull, 816000000000000ull, 817000000000000ull, 896000000000000ull, 897000000000000ull, 620000000000000ull, 621000000000000ull, 622000000000000ull, 623000000000000ull, 624000000000000ull, 625000000000000ull, 626000000000000ull, 627000000000000ull, 628000000000000ull, 629000000000000ull, 682000000000000ull, 683000000000000ull, 826000000000000ull, 827000000000000ull, 868000000000000ull, 869000000000000ull, 630000000000000ull, 631000000000000ull, 632000000000000ull, 633000000000000ull, 634000000000000ull, 635000000000000ull, 636000000000000ull, 637000000000000ull, 638000000000000ull, 639000000000000ull, 692000000000000ull, 693000000000000ull, 836000000000000ull, 837000000000000ull, 878000000000000ull, 879000000000000ull, 640000000000000ull, 641000000000000ull, 642000000000000ull, 643000000000000ull, 644000000000000ull, 645000000000000ull, 646000000000000ull, 647000000000000ull, 648000000000000ull, 649000000000000ull, 684000000000000ull, 685000000000000ull, 846000000000000ull, 847000000000000ull, 688000000000000ull, 689000000000000ull, 650000000000000ull, 651000000000000ull, 652000000000000ull, 653000000000000ull, 654000000000000ull, 655000000000000ull, 656000000000000ull, 657000000000000ull, 658000000000000ull, 659000000000000ull, 694000000000000ull, 695000000000000ull, 856000000000000ull, 857000000000000ull, 698000000000000ull, 699000000000000ull, 660000000000000ull, 661000000000000ull, 662000000000000ull, 663000000000000ull, 664000000000000ull, 665000000000000ull, 666000000000000ull, 667000000000000ull, 668000000000000ull, 669000000000000ull, 686000000000000ull, 687000000000000ull, 866000000000000ull, 867000000000000ull, 888000000000000ull, 889000000000000ull, 670000000000000ull, 671000000000000ull, 672000000000000ull, 673000000000000ull, 674000000000000ull, 675000000000000ull, 676000000000000ull, 677000000000000ull, 678000000000000ull, 679000000000000ull, 696000000000000ull, 697000000000000ull, 876000000000000ull, 877000000000000ull, 898000000000000ull, 899000000000000ull, 700000000000000ull, 701000000000000ull, 702000000000000ull, 703000000000000ull, 704000000000000ull, 705000000000000ull, 706000000000000ull, 707000000000000ull, 708000000000000ull, 709000000000000ull, 780000000000000ull, 781000000000000ull, 906000000000000ull, 907000000000000ull, 986000000000000ull, 987000000000000ull, 710000000000000ull, 711000000000000ull, 712000000000000ull, 713000000000000ull, 714000000000000ull, 715000000000000ull, 716000000000000ull, 717000000000000ull, 718000000000000ull, 719000000000000ull, 790000000000000ull, 791000000000000ull, 916000000000000ull, 917000000000000ull, 996000000000000ull, 997000000000000ull, 720000000000000ull, 721000000000000ull, 722000000000000ull, 723000000000000ull, 724000000000000ull, 725000000000000ull, 726000000000000ull, 727000000000000ull, 728000000000000ull, 729000000000000ull, 782000000000000ull, 783000000000000ull, 926000000000000ull, 927000000000000ull, 968000000000000ull, 969000000000000ull, 730000000000000ull, 731000000000000ull, 732000000000000ull, 733000000000000ull, 734000000000000ull, 735000000000000ull, 736000000000000ull, 737000000000000ull, 738000000000000ull, 739000000000000ull, 792000000000000ull, 793000000000000ull, 936000000000000ull, 937000000000000ull, 978000000000000ull, 979000000000000ull, 740000000000000ull, 741000000000000ull, 742000000000000ull, 743000000000000ull, 744000000000000ull, 745000000000000ull, 746000000000000ull, 747000000000000ull, 748000000000000ull, 749000000000000ull, 784000000000000ull, 785000000000000ull, 946000000000000ull, 947000000000000ull, 788000000000000ull, 789000000000000ull, 750000000000000ull, 751000000000000ull, 752000000000000ull, 753000000000000ull, 754000000000000ull, 755000000000000ull, 756000000000000ull, 757000000000000ull, 758000000000000ull, 759000000000000ull, 794000000000000ull, 795000000000000ull, 956000000000000ull, 957000000000000ull, 798000000000000ull, 799000000000000ull, 760000000000000ull, 761000000000000ull, 762000000000000ull, 763000000000000ull, 764000000000000ull, 765000000000000ull, 766000000000000ull, 767000000000000ull, 768000000000000ull, 769000000000000ull, 786000000000000ull, 787000000000000ull, 966000000000000ull, 967000000000000ull, 988000000000000ull, 989000000000000ull, 770000000000000ull, 771000000000000ull, 772000000000000ull, 773000000000000ull, 774000000000000ull, 775000000000000ull, 776000000000000ull, 777000000000000ull, 778000000000000ull, 779000000000000ull, 796000000000000ull, 797000000000000ull, 976000000000000ull, 977000000000000ull, 998000000000000ull, 999000000000000ull }; const UINT64 d2b6[] = { 0000000000000000ull, 1000000000000000ull, 2000000000000000ull, 3000000000000000ull, 4000000000000000ull, 5000000000000000ull, 6000000000000000ull, 7000000000000000ull, 8000000000000000ull, 9000000000000000ull, 80000000000000000ull, 81000000000000000ull, 800000000000000000ull, 801000000000000000ull, 880000000000000000ull, 881000000000000000ull, 10000000000000000ull, 11000000000000000ull, 12000000000000000ull, 13000000000000000ull, 14000000000000000ull, 15000000000000000ull, 16000000000000000ull, 17000000000000000ull, 18000000000000000ull, 19000000000000000ull, 90000000000000000ull, 91000000000000000ull, 810000000000000000ull, 811000000000000000ull, 890000000000000000ull, 891000000000000000ull, 20000000000000000ull, 21000000000000000ull, 22000000000000000ull, 23000000000000000ull, 24000000000000000ull, 25000000000000000ull, 26000000000000000ull, 27000000000000000ull, 28000000000000000ull, 29000000000000000ull, 82000000000000000ull, 83000000000000000ull, 820000000000000000ull, 821000000000000000ull, 808000000000000000ull, 809000000000000000ull, 30000000000000000ull, 31000000000000000ull, 32000000000000000ull, 33000000000000000ull, 34000000000000000ull, 35000000000000000ull, 36000000000000000ull, 37000000000000000ull, 38000000000000000ull, 39000000000000000ull, 92000000000000000ull, 93000000000000000ull, 830000000000000000ull, 831000000000000000ull, 818000000000000000ull, 819000000000000000ull, 40000000000000000ull, 41000000000000000ull, 42000000000000000ull, 43000000000000000ull, 44000000000000000ull, 45000000000000000ull, 46000000000000000ull, 47000000000000000ull, 48000000000000000ull, 49000000000000000ull, 84000000000000000ull, 85000000000000000ull, 840000000000000000ull, 841000000000000000ull, 88000000000000000ull, 89000000000000000ull, 50000000000000000ull, 51000000000000000ull, 52000000000000000ull, 53000000000000000ull, 54000000000000000ull, 55000000000000000ull, 56000000000000000ull, 57000000000000000ull, 58000000000000000ull, 59000000000000000ull, 94000000000000000ull, 95000000000000000ull, 850000000000000000ull, 851000000000000000ull, 98000000000000000ull, 99000000000000000ull, 60000000000000000ull, 61000000000000000ull, 62000000000000000ull, 63000000000000000ull, 64000000000000000ull, 65000000000000000ull, 66000000000000000ull, 67000000000000000ull, 68000000000000000ull, 69000000000000000ull, 86000000000000000ull, 87000000000000000ull, 860000000000000000ull, 861000000000000000ull, 888000000000000000ull, 889000000000000000ull, 70000000000000000ull, 71000000000000000ull, 72000000000000000ull, 73000000000000000ull, 74000000000000000ull, 75000000000000000ull, 76000000000000000ull, 77000000000000000ull, 78000000000000000ull, 79000000000000000ull, 96000000000000000ull, 97000000000000000ull, 870000000000000000ull, 871000000000000000ull, 898000000000000000ull, 899000000000000000ull, 100000000000000000ull, 101000000000000000ull, 102000000000000000ull, 103000000000000000ull, 104000000000000000ull, 105000000000000000ull, 106000000000000000ull, 107000000000000000ull, 108000000000000000ull, 109000000000000000ull, 180000000000000000ull, 181000000000000000ull, 900000000000000000ull, 901000000000000000ull, 980000000000000000ull, 981000000000000000ull, 110000000000000000ull, 111000000000000000ull, 112000000000000000ull, 113000000000000000ull, 114000000000000000ull, 115000000000000000ull, 116000000000000000ull, 117000000000000000ull, 118000000000000000ull, 119000000000000000ull, 190000000000000000ull, 191000000000000000ull, 910000000000000000ull, 911000000000000000ull, 990000000000000000ull, 991000000000000000ull, 120000000000000000ull, 121000000000000000ull, 122000000000000000ull, 123000000000000000ull, 124000000000000000ull, 125000000000000000ull, 126000000000000000ull, 127000000000000000ull, 128000000000000000ull, 129000000000000000ull, 182000000000000000ull, 183000000000000000ull, 920000000000000000ull, 921000000000000000ull, 908000000000000000ull, 909000000000000000ull, 130000000000000000ull, 131000000000000000ull, 132000000000000000ull, 133000000000000000ull, 134000000000000000ull, 135000000000000000ull, 136000000000000000ull, 137000000000000000ull, 138000000000000000ull, 139000000000000000ull, 192000000000000000ull, 193000000000000000ull, 930000000000000000ull, 931000000000000000ull, 918000000000000000ull, 919000000000000000ull, 140000000000000000ull, 141000000000000000ull, 142000000000000000ull, 143000000000000000ull, 144000000000000000ull, 145000000000000000ull, 146000000000000000ull, 147000000000000000ull, 148000000000000000ull, 149000000000000000ull, 184000000000000000ull, 185000000000000000ull, 940000000000000000ull, 941000000000000000ull, 188000000000000000ull, 189000000000000000ull, 150000000000000000ull, 151000000000000000ull, 152000000000000000ull, 153000000000000000ull, 154000000000000000ull, 155000000000000000ull, 156000000000000000ull, 157000000000000000ull, 158000000000000000ull, 159000000000000000ull, 194000000000000000ull, 195000000000000000ull, 950000000000000000ull, 951000000000000000ull, 198000000000000000ull, 199000000000000000ull, 160000000000000000ull, 161000000000000000ull, 162000000000000000ull, 163000000000000000ull, 164000000000000000ull, 165000000000000000ull, 166000000000000000ull, 167000000000000000ull, 168000000000000000ull, 169000000000000000ull, 186000000000000000ull, 187000000000000000ull, 960000000000000000ull, 961000000000000000ull, 988000000000000000ull, 989000000000000000ull, 170000000000000000ull, 171000000000000000ull, 172000000000000000ull, 173000000000000000ull, 174000000000000000ull, 175000000000000000ull, 176000000000000000ull, 177000000000000000ull, 178000000000000000ull, 179000000000000000ull, 196000000000000000ull, 197000000000000000ull, 970000000000000000ull, 971000000000000000ull, 998000000000000000ull, 999000000000000000ull, 200000000000000000ull, 201000000000000000ull, 202000000000000000ull, 203000000000000000ull, 204000000000000000ull, 205000000000000000ull, 206000000000000000ull, 207000000000000000ull, 208000000000000000ull, 209000000000000000ull, 280000000000000000ull, 281000000000000000ull, 802000000000000000ull, 803000000000000000ull, 882000000000000000ull, 883000000000000000ull, 210000000000000000ull, 211000000000000000ull, 212000000000000000ull, 213000000000000000ull, 214000000000000000ull, 215000000000000000ull, 216000000000000000ull, 217000000000000000ull, 218000000000000000ull, 219000000000000000ull, 290000000000000000ull, 291000000000000000ull, 812000000000000000ull, 813000000000000000ull, 892000000000000000ull, 893000000000000000ull, 220000000000000000ull, 221000000000000000ull, 222000000000000000ull, 223000000000000000ull, 224000000000000000ull, 225000000000000000ull, 226000000000000000ull, 227000000000000000ull, 228000000000000000ull, 229000000000000000ull, 282000000000000000ull, 283000000000000000ull, 822000000000000000ull, 823000000000000000ull, 828000000000000000ull, 829000000000000000ull, 230000000000000000ull, 231000000000000000ull, 232000000000000000ull, 233000000000000000ull, 234000000000000000ull, 235000000000000000ull, 236000000000000000ull, 237000000000000000ull, 238000000000000000ull, 239000000000000000ull, 292000000000000000ull, 293000000000000000ull, 832000000000000000ull, 833000000000000000ull, 838000000000000000ull, 839000000000000000ull, 240000000000000000ull, 241000000000000000ull, 242000000000000000ull, 243000000000000000ull, 244000000000000000ull, 245000000000000000ull, 246000000000000000ull, 247000000000000000ull, 248000000000000000ull, 249000000000000000ull, 284000000000000000ull, 285000000000000000ull, 842000000000000000ull, 843000000000000000ull, 288000000000000000ull, 289000000000000000ull, 250000000000000000ull, 251000000000000000ull, 252000000000000000ull, 253000000000000000ull, 254000000000000000ull, 255000000000000000ull, 256000000000000000ull, 257000000000000000ull, 258000000000000000ull, 259000000000000000ull, 294000000000000000ull, 295000000000000000ull, 852000000000000000ull, 853000000000000000ull, 298000000000000000ull, 299000000000000000ull, 260000000000000000ull, 261000000000000000ull, 262000000000000000ull, 263000000000000000ull, 264000000000000000ull, 265000000000000000ull, 266000000000000000ull, 267000000000000000ull, 268000000000000000ull, 269000000000000000ull, 286000000000000000ull, 287000000000000000ull, 862000000000000000ull, 863000000000000000ull, 888000000000000000ull, 889000000000000000ull, 270000000000000000ull, 271000000000000000ull, 272000000000000000ull, 273000000000000000ull, 274000000000000000ull, 275000000000000000ull, 276000000000000000ull, 277000000000000000ull, 278000000000000000ull, 279000000000000000ull, 296000000000000000ull, 297000000000000000ull, 872000000000000000ull, 873000000000000000ull, 898000000000000000ull, 899000000000000000ull, 300000000000000000ull, 301000000000000000ull, 302000000000000000ull, 303000000000000000ull, 304000000000000000ull, 305000000000000000ull, 306000000000000000ull, 307000000000000000ull, 308000000000000000ull, 309000000000000000ull, 380000000000000000ull, 381000000000000000ull, 902000000000000000ull, 903000000000000000ull, 982000000000000000ull, 983000000000000000ull, 310000000000000000ull, 311000000000000000ull, 312000000000000000ull, 313000000000000000ull, 314000000000000000ull, 315000000000000000ull, 316000000000000000ull, 317000000000000000ull, 318000000000000000ull, 319000000000000000ull, 390000000000000000ull, 391000000000000000ull, 912000000000000000ull, 913000000000000000ull, 992000000000000000ull, 993000000000000000ull, 320000000000000000ull, 321000000000000000ull, 322000000000000000ull, 323000000000000000ull, 324000000000000000ull, 325000000000000000ull, 326000000000000000ull, 327000000000000000ull, 328000000000000000ull, 329000000000000000ull, 382000000000000000ull, 383000000000000000ull, 922000000000000000ull, 923000000000000000ull, 928000000000000000ull, 929000000000000000ull, 330000000000000000ull, 331000000000000000ull, 332000000000000000ull, 333000000000000000ull, 334000000000000000ull, 335000000000000000ull, 336000000000000000ull, 337000000000000000ull, 338000000000000000ull, 339000000000000000ull, 392000000000000000ull, 393000000000000000ull, 932000000000000000ull, 933000000000000000ull, 938000000000000000ull, 939000000000000000ull, 340000000000000000ull, 341000000000000000ull, 342000000000000000ull, 343000000000000000ull, 344000000000000000ull, 345000000000000000ull, 346000000000000000ull, 347000000000000000ull, 348000000000000000ull, 349000000000000000ull, 384000000000000000ull, 385000000000000000ull, 942000000000000000ull, 943000000000000000ull, 388000000000000000ull, 389000000000000000ull, 350000000000000000ull, 351000000000000000ull, 352000000000000000ull, 353000000000000000ull, 354000000000000000ull, 355000000000000000ull, 356000000000000000ull, 357000000000000000ull, 358000000000000000ull, 359000000000000000ull, 394000000000000000ull, 395000000000000000ull, 952000000000000000ull, 953000000000000000ull, 398000000000000000ull, 399000000000000000ull, 360000000000000000ull, 361000000000000000ull, 362000000000000000ull, 363000000000000000ull, 364000000000000000ull, 365000000000000000ull, 366000000000000000ull, 367000000000000000ull, 368000000000000000ull, 369000000000000000ull, 386000000000000000ull, 387000000000000000ull, 962000000000000000ull, 963000000000000000ull, 988000000000000000ull, 989000000000000000ull, 370000000000000000ull, 371000000000000000ull, 372000000000000000ull, 373000000000000000ull, 374000000000000000ull, 375000000000000000ull, 376000000000000000ull, 377000000000000000ull, 378000000000000000ull, 379000000000000000ull, 396000000000000000ull, 397000000000000000ull, 972000000000000000ull, 973000000000000000ull, 998000000000000000ull, 999000000000000000ull, 400000000000000000ull, 401000000000000000ull, 402000000000000000ull, 403000000000000000ull, 404000000000000000ull, 405000000000000000ull, 406000000000000000ull, 407000000000000000ull, 408000000000000000ull, 409000000000000000ull, 480000000000000000ull, 481000000000000000ull, 804000000000000000ull, 805000000000000000ull, 884000000000000000ull, 885000000000000000ull, 410000000000000000ull, 411000000000000000ull, 412000000000000000ull, 413000000000000000ull, 414000000000000000ull, 415000000000000000ull, 416000000000000000ull, 417000000000000000ull, 418000000000000000ull, 419000000000000000ull, 490000000000000000ull, 491000000000000000ull, 814000000000000000ull, 815000000000000000ull, 894000000000000000ull, 895000000000000000ull, 420000000000000000ull, 421000000000000000ull, 422000000000000000ull, 423000000000000000ull, 424000000000000000ull, 425000000000000000ull, 426000000000000000ull, 427000000000000000ull, 428000000000000000ull, 429000000000000000ull, 482000000000000000ull, 483000000000000000ull, 824000000000000000ull, 825000000000000000ull, 848000000000000000ull, 849000000000000000ull, 430000000000000000ull, 431000000000000000ull, 432000000000000000ull, 433000000000000000ull, 434000000000000000ull, 435000000000000000ull, 436000000000000000ull, 437000000000000000ull, 438000000000000000ull, 439000000000000000ull, 492000000000000000ull, 493000000000000000ull, 834000000000000000ull, 835000000000000000ull, 858000000000000000ull, 859000000000000000ull, 440000000000000000ull, 441000000000000000ull, 442000000000000000ull, 443000000000000000ull, 444000000000000000ull, 445000000000000000ull, 446000000000000000ull, 447000000000000000ull, 448000000000000000ull, 449000000000000000ull, 484000000000000000ull, 485000000000000000ull, 844000000000000000ull, 845000000000000000ull, 488000000000000000ull, 489000000000000000ull, 450000000000000000ull, 451000000000000000ull, 452000000000000000ull, 453000000000000000ull, 454000000000000000ull, 455000000000000000ull, 456000000000000000ull, 457000000000000000ull, 458000000000000000ull, 459000000000000000ull, 494000000000000000ull, 495000000000000000ull, 854000000000000000ull, 855000000000000000ull, 498000000000000000ull, 499000000000000000ull, 460000000000000000ull, 461000000000000000ull, 462000000000000000ull, 463000000000000000ull, 464000000000000000ull, 465000000000000000ull, 466000000000000000ull, 467000000000000000ull, 468000000000000000ull, 469000000000000000ull, 486000000000000000ull, 487000000000000000ull, 864000000000000000ull, 865000000000000000ull, 888000000000000000ull, 889000000000000000ull, 470000000000000000ull, 471000000000000000ull, 472000000000000000ull, 473000000000000000ull, 474000000000000000ull, 475000000000000000ull, 476000000000000000ull, 477000000000000000ull, 478000000000000000ull, 479000000000000000ull, 496000000000000000ull, 497000000000000000ull, 874000000000000000ull, 875000000000000000ull, 898000000000000000ull, 899000000000000000ull, 500000000000000000ull, 501000000000000000ull, 502000000000000000ull, 503000000000000000ull, 504000000000000000ull, 505000000000000000ull, 506000000000000000ull, 507000000000000000ull, 508000000000000000ull, 509000000000000000ull, 580000000000000000ull, 581000000000000000ull, 904000000000000000ull, 905000000000000000ull, 984000000000000000ull, 985000000000000000ull, 510000000000000000ull, 511000000000000000ull, 512000000000000000ull, 513000000000000000ull, 514000000000000000ull, 515000000000000000ull, 516000000000000000ull, 517000000000000000ull, 518000000000000000ull, 519000000000000000ull, 590000000000000000ull, 591000000000000000ull, 914000000000000000ull, 915000000000000000ull, 994000000000000000ull, 995000000000000000ull, 520000000000000000ull, 521000000000000000ull, 522000000000000000ull, 523000000000000000ull, 524000000000000000ull, 525000000000000000ull, 526000000000000000ull, 527000000000000000ull, 528000000000000000ull, 529000000000000000ull, 582000000000000000ull, 583000000000000000ull, 924000000000000000ull, 925000000000000000ull, 948000000000000000ull, 949000000000000000ull, 530000000000000000ull, 531000000000000000ull, 532000000000000000ull, 533000000000000000ull, 534000000000000000ull, 535000000000000000ull, 536000000000000000ull, 537000000000000000ull, 538000000000000000ull, 539000000000000000ull, 592000000000000000ull, 593000000000000000ull, 934000000000000000ull, 935000000000000000ull, 958000000000000000ull, 959000000000000000ull, 540000000000000000ull, 541000000000000000ull, 542000000000000000ull, 543000000000000000ull, 544000000000000000ull, 545000000000000000ull, 546000000000000000ull, 547000000000000000ull, 548000000000000000ull, 549000000000000000ull, 584000000000000000ull, 585000000000000000ull, 944000000000000000ull, 945000000000000000ull, 588000000000000000ull, 589000000000000000ull, 550000000000000000ull, 551000000000000000ull, 552000000000000000ull, 553000000000000000ull, 554000000000000000ull, 555000000000000000ull, 556000000000000000ull, 557000000000000000ull, 558000000000000000ull, 559000000000000000ull, 594000000000000000ull, 595000000000000000ull, 954000000000000000ull, 955000000000000000ull, 598000000000000000ull, 599000000000000000ull, 560000000000000000ull, 561000000000000000ull, 562000000000000000ull, 563000000000000000ull, 564000000000000000ull, 565000000000000000ull, 566000000000000000ull, 567000000000000000ull, 568000000000000000ull, 569000000000000000ull, 586000000000000000ull, 587000000000000000ull, 964000000000000000ull, 965000000000000000ull, 988000000000000000ull, 989000000000000000ull, 570000000000000000ull, 571000000000000000ull, 572000000000000000ull, 573000000000000000ull, 574000000000000000ull, 575000000000000000ull, 576000000000000000ull, 577000000000000000ull, 578000000000000000ull, 579000000000000000ull, 596000000000000000ull, 597000000000000000ull, 974000000000000000ull, 975000000000000000ull, 998000000000000000ull, 999000000000000000ull, 600000000000000000ull, 601000000000000000ull, 602000000000000000ull, 603000000000000000ull, 604000000000000000ull, 605000000000000000ull, 606000000000000000ull, 607000000000000000ull, 608000000000000000ull, 609000000000000000ull, 680000000000000000ull, 681000000000000000ull, 806000000000000000ull, 807000000000000000ull, 886000000000000000ull, 887000000000000000ull, 610000000000000000ull, 611000000000000000ull, 612000000000000000ull, 613000000000000000ull, 614000000000000000ull, 615000000000000000ull, 616000000000000000ull, 617000000000000000ull, 618000000000000000ull, 619000000000000000ull, 690000000000000000ull, 691000000000000000ull, 816000000000000000ull, 817000000000000000ull, 896000000000000000ull, 897000000000000000ull, 620000000000000000ull, 621000000000000000ull, 622000000000000000ull, 623000000000000000ull, 624000000000000000ull, 625000000000000000ull, 626000000000000000ull, 627000000000000000ull, 628000000000000000ull, 629000000000000000ull, 682000000000000000ull, 683000000000000000ull, 826000000000000000ull, 827000000000000000ull, 868000000000000000ull, 869000000000000000ull, 630000000000000000ull, 631000000000000000ull, 632000000000000000ull, 633000000000000000ull, 634000000000000000ull, 635000000000000000ull, 636000000000000000ull, 637000000000000000ull, 638000000000000000ull, 639000000000000000ull, 692000000000000000ull, 693000000000000000ull, 836000000000000000ull, 837000000000000000ull, 878000000000000000ull, 879000000000000000ull, 640000000000000000ull, 641000000000000000ull, 642000000000000000ull, 643000000000000000ull, 644000000000000000ull, 645000000000000000ull, 646000000000000000ull, 647000000000000000ull, 648000000000000000ull, 649000000000000000ull, 684000000000000000ull, 685000000000000000ull, 846000000000000000ull, 847000000000000000ull, 688000000000000000ull, 689000000000000000ull, 650000000000000000ull, 651000000000000000ull, 652000000000000000ull, 653000000000000000ull, 654000000000000000ull, 655000000000000000ull, 656000000000000000ull, 657000000000000000ull, 658000000000000000ull, 659000000000000000ull, 694000000000000000ull, 695000000000000000ull, 856000000000000000ull, 857000000000000000ull, 698000000000000000ull, 699000000000000000ull, 660000000000000000ull, 661000000000000000ull, 662000000000000000ull, 663000000000000000ull, 664000000000000000ull, 665000000000000000ull, 666000000000000000ull, 667000000000000000ull, 668000000000000000ull, 669000000000000000ull, 686000000000000000ull, 687000000000000000ull, 866000000000000000ull, 867000000000000000ull, 888000000000000000ull, 889000000000000000ull, 670000000000000000ull, 671000000000000000ull, 672000000000000000ull, 673000000000000000ull, 674000000000000000ull, 675000000000000000ull, 676000000000000000ull, 677000000000000000ull, 678000000000000000ull, 679000000000000000ull, 696000000000000000ull, 697000000000000000ull, 876000000000000000ull, 877000000000000000ull, 898000000000000000ull, 899000000000000000ull, 700000000000000000ull, 701000000000000000ull, 702000000000000000ull, 703000000000000000ull, 704000000000000000ull, 705000000000000000ull, 706000000000000000ull, 707000000000000000ull, 708000000000000000ull, 709000000000000000ull, 780000000000000000ull, 781000000000000000ull, 906000000000000000ull, 907000000000000000ull, 986000000000000000ull, 987000000000000000ull, 710000000000000000ull, 711000000000000000ull, 712000000000000000ull, 713000000000000000ull, 714000000000000000ull, 715000000000000000ull, 716000000000000000ull, 717000000000000000ull, 718000000000000000ull, 719000000000000000ull, 790000000000000000ull, 791000000000000000ull, 916000000000000000ull, 917000000000000000ull, 996000000000000000ull, 997000000000000000ull, 720000000000000000ull, 721000000000000000ull, 722000000000000000ull, 723000000000000000ull, 724000000000000000ull, 725000000000000000ull, 726000000000000000ull, 727000000000000000ull, 728000000000000000ull, 729000000000000000ull, 782000000000000000ull, 783000000000000000ull, 926000000000000000ull, 927000000000000000ull, 968000000000000000ull, 969000000000000000ull, 730000000000000000ull, 731000000000000000ull, 732000000000000000ull, 733000000000000000ull, 734000000000000000ull, 735000000000000000ull, 736000000000000000ull, 737000000000000000ull, 738000000000000000ull, 739000000000000000ull, 792000000000000000ull, 793000000000000000ull, 936000000000000000ull, 937000000000000000ull, 978000000000000000ull, 979000000000000000ull, 740000000000000000ull, 741000000000000000ull, 742000000000000000ull, 743000000000000000ull, 744000000000000000ull, 745000000000000000ull, 746000000000000000ull, 747000000000000000ull, 748000000000000000ull, 749000000000000000ull, 784000000000000000ull, 785000000000000000ull, 946000000000000000ull, 947000000000000000ull, 788000000000000000ull, 789000000000000000ull, 750000000000000000ull, 751000000000000000ull, 752000000000000000ull, 753000000000000000ull, 754000000000000000ull, 755000000000000000ull, 756000000000000000ull, 757000000000000000ull, 758000000000000000ull, 759000000000000000ull, 794000000000000000ull, 795000000000000000ull, 956000000000000000ull, 957000000000000000ull, 798000000000000000ull, 799000000000000000ull, 760000000000000000ull, 761000000000000000ull, 762000000000000000ull, 763000000000000000ull, 764000000000000000ull, 765000000000000000ull, 766000000000000000ull, 767000000000000000ull, 768000000000000000ull, 769000000000000000ull, 786000000000000000ull, 787000000000000000ull, 966000000000000000ull, 967000000000000000ull, 988000000000000000ull, 989000000000000000ull, 770000000000000000ull, 771000000000000000ull, 772000000000000000ull, 773000000000000000ull, 774000000000000000ull, 775000000000000000ull, 776000000000000000ull, 777000000000000000ull, 778000000000000000ull, 779000000000000000ull, 796000000000000000ull, 797000000000000000ull, 976000000000000000ull, 977000000000000000ull, 998000000000000000ull, 999000000000000000ull }; const UINT64 b2d[] = { 0x000ull, 0x001ull, 0x002ull, 0x003ull, 0x004ull, 0x005ull, 0x006ull, 0x007ull, 0x008ull, 0x009ull, 0x010ull, 0x011ull, 0x012ull, 0x013ull, 0x014ull, 0x015ull, 0x016ull, 0x017ull, 0x018ull, 0x019ull, 0x020ull, 0x021ull, 0x022ull, 0x023ull, 0x024ull, 0x025ull, 0x026ull, 0x027ull, 0x028ull, 0x029ull, 0x030ull, 0x031ull, 0x032ull, 0x033ull, 0x034ull, 0x035ull, 0x036ull, 0x037ull, 0x038ull, 0x039ull, 0x040ull, 0x041ull, 0x042ull, 0x043ull, 0x044ull, 0x045ull, 0x046ull, 0x047ull, 0x048ull, 0x049ull, 0x050ull, 0x051ull, 0x052ull, 0x053ull, 0x054ull, 0x055ull, 0x056ull, 0x057ull, 0x058ull, 0x059ull, 0x060ull, 0x061ull, 0x062ull, 0x063ull, 0x064ull, 0x065ull, 0x066ull, 0x067ull, 0x068ull, 0x069ull, 0x070ull, 0x071ull, 0x072ull, 0x073ull, 0x074ull, 0x075ull, 0x076ull, 0x077ull, 0x078ull, 0x079ull, 0x00aull, 0x00bull, 0x02aull, 0x02bull, 0x04aull, 0x04bull, 0x06aull, 0x06bull, 0x04eull, 0x04full, 0x01aull, 0x01bull, 0x03aull, 0x03bull, 0x05aull, 0x05bull, 0x07aull, 0x07bull, 0x05eull, 0x05full, 0x080ull, 0x081ull, 0x082ull, 0x083ull, 0x084ull, 0x085ull, 0x086ull, 0x087ull, 0x088ull, 0x089ull, 0x090ull, 0x091ull, 0x092ull, 0x093ull, 0x094ull, 0x095ull, 0x096ull, 0x097ull, 0x098ull, 0x099ull, 0x0a0ull, 0x0a1ull, 0x0a2ull, 0x0a3ull, 0x0a4ull, 0x0a5ull, 0x0a6ull, 0x0a7ull, 0x0a8ull, 0x0a9ull, 0x0b0ull, 0x0b1ull, 0x0b2ull, 0x0b3ull, 0x0b4ull, 0x0b5ull, 0x0b6ull, 0x0b7ull, 0x0b8ull, 0x0b9ull, 0x0c0ull, 0x0c1ull, 0x0c2ull, 0x0c3ull, 0x0c4ull, 0x0c5ull, 0x0c6ull, 0x0c7ull, 0x0c8ull, 0x0c9ull, 0x0d0ull, 0x0d1ull, 0x0d2ull, 0x0d3ull, 0x0d4ull, 0x0d5ull, 0x0d6ull, 0x0d7ull, 0x0d8ull, 0x0d9ull, 0x0e0ull, 0x0e1ull, 0x0e2ull, 0x0e3ull, 0x0e4ull, 0x0e5ull, 0x0e6ull, 0x0e7ull, 0x0e8ull, 0x0e9ull, 0x0f0ull, 0x0f1ull, 0x0f2ull, 0x0f3ull, 0x0f4ull, 0x0f5ull, 0x0f6ull, 0x0f7ull, 0x0f8ull, 0x0f9ull, 0x08aull, 0x08bull, 0x0aaull, 0x0abull, 0x0caull, 0x0cbull, 0x0eaull, 0x0ebull, 0x0ceull, 0x0cfull, 0x09aull, 0x09bull, 0x0baull, 0x0bbull, 0x0daull, 0x0dbull, 0x0faull, 0x0fbull, 0x0deull, 0x0dfull, 0x100ull, 0x101ull, 0x102ull, 0x103ull, 0x104ull, 0x105ull, 0x106ull, 0x107ull, 0x108ull, 0x109ull, 0x110ull, 0x111ull, 0x112ull, 0x113ull, 0x114ull, 0x115ull, 0x116ull, 0x117ull, 0x118ull, 0x119ull, 0x120ull, 0x121ull, 0x122ull, 0x123ull, 0x124ull, 0x125ull, 0x126ull, 0x127ull, 0x128ull, 0x129ull, 0x130ull, 0x131ull, 0x132ull, 0x133ull, 0x134ull, 0x135ull, 0x136ull, 0x137ull, 0x138ull, 0x139ull, 0x140ull, 0x141ull, 0x142ull, 0x143ull, 0x144ull, 0x145ull, 0x146ull, 0x147ull, 0x148ull, 0x149ull, 0x150ull, 0x151ull, 0x152ull, 0x153ull, 0x154ull, 0x155ull, 0x156ull, 0x157ull, 0x158ull, 0x159ull, 0x160ull, 0x161ull, 0x162ull, 0x163ull, 0x164ull, 0x165ull, 0x166ull, 0x167ull, 0x168ull, 0x169ull, 0x170ull, 0x171ull, 0x172ull, 0x173ull, 0x174ull, 0x175ull, 0x176ull, 0x177ull, 0x178ull, 0x179ull, 0x10aull, 0x10bull, 0x12aull, 0x12bull, 0x14aull, 0x14bull, 0x16aull, 0x16bull, 0x14eull, 0x14full, 0x11aull, 0x11bull, 0x13aull, 0x13bull, 0x15aull, 0x15bull, 0x17aull, 0x17bull, 0x15eull, 0x15full, 0x180ull, 0x181ull, 0x182ull, 0x183ull, 0x184ull, 0x185ull, 0x186ull, 0x187ull, 0x188ull, 0x189ull, 0x190ull, 0x191ull, 0x192ull, 0x193ull, 0x194ull, 0x195ull, 0x196ull, 0x197ull, 0x198ull, 0x199ull, 0x1a0ull, 0x1a1ull, 0x1a2ull, 0x1a3ull, 0x1a4ull, 0x1a5ull, 0x1a6ull, 0x1a7ull, 0x1a8ull, 0x1a9ull, 0x1b0ull, 0x1b1ull, 0x1b2ull, 0x1b3ull, 0x1b4ull, 0x1b5ull, 0x1b6ull, 0x1b7ull, 0x1b8ull, 0x1b9ull, 0x1c0ull, 0x1c1ull, 0x1c2ull, 0x1c3ull, 0x1c4ull, 0x1c5ull, 0x1c6ull, 0x1c7ull, 0x1c8ull, 0x1c9ull, 0x1d0ull, 0x1d1ull, 0x1d2ull, 0x1d3ull, 0x1d4ull, 0x1d5ull, 0x1d6ull, 0x1d7ull, 0x1d8ull, 0x1d9ull, 0x1e0ull, 0x1e1ull, 0x1e2ull, 0x1e3ull, 0x1e4ull, 0x1e5ull, 0x1e6ull, 0x1e7ull, 0x1e8ull, 0x1e9ull, 0x1f0ull, 0x1f1ull, 0x1f2ull, 0x1f3ull, 0x1f4ull, 0x1f5ull, 0x1f6ull, 0x1f7ull, 0x1f8ull, 0x1f9ull, 0x18aull, 0x18bull, 0x1aaull, 0x1abull, 0x1caull, 0x1cbull, 0x1eaull, 0x1ebull, 0x1ceull, 0x1cfull, 0x19aull, 0x19bull, 0x1baull, 0x1bbull, 0x1daull, 0x1dbull, 0x1faull, 0x1fbull, 0x1deull, 0x1dfull, 0x200ull, 0x201ull, 0x202ull, 0x203ull, 0x204ull, 0x205ull, 0x206ull, 0x207ull, 0x208ull, 0x209ull, 0x210ull, 0x211ull, 0x212ull, 0x213ull, 0x214ull, 0x215ull, 0x216ull, 0x217ull, 0x218ull, 0x219ull, 0x220ull, 0x221ull, 0x222ull, 0x223ull, 0x224ull, 0x225ull, 0x226ull, 0x227ull, 0x228ull, 0x229ull, 0x230ull, 0x231ull, 0x232ull, 0x233ull, 0x234ull, 0x235ull, 0x236ull, 0x237ull, 0x238ull, 0x239ull, 0x240ull, 0x241ull, 0x242ull, 0x243ull, 0x244ull, 0x245ull, 0x246ull, 0x247ull, 0x248ull, 0x249ull, 0x250ull, 0x251ull, 0x252ull, 0x253ull, 0x254ull, 0x255ull, 0x256ull, 0x257ull, 0x258ull, 0x259ull, 0x260ull, 0x261ull, 0x262ull, 0x263ull, 0x264ull, 0x265ull, 0x266ull, 0x267ull, 0x268ull, 0x269ull, 0x270ull, 0x271ull, 0x272ull, 0x273ull, 0x274ull, 0x275ull, 0x276ull, 0x277ull, 0x278ull, 0x279ull, 0x20aull, 0x20bull, 0x22aull, 0x22bull, 0x24aull, 0x24bull, 0x26aull, 0x26bull, 0x24eull, 0x24full, 0x21aull, 0x21bull, 0x23aull, 0x23bull, 0x25aull, 0x25bull, 0x27aull, 0x27bull, 0x25eull, 0x25full, 0x280ull, 0x281ull, 0x282ull, 0x283ull, 0x284ull, 0x285ull, 0x286ull, 0x287ull, 0x288ull, 0x289ull, 0x290ull, 0x291ull, 0x292ull, 0x293ull, 0x294ull, 0x295ull, 0x296ull, 0x297ull, 0x298ull, 0x299ull, 0x2a0ull, 0x2a1ull, 0x2a2ull, 0x2a3ull, 0x2a4ull, 0x2a5ull, 0x2a6ull, 0x2a7ull, 0x2a8ull, 0x2a9ull, 0x2b0ull, 0x2b1ull, 0x2b2ull, 0x2b3ull, 0x2b4ull, 0x2b5ull, 0x2b6ull, 0x2b7ull, 0x2b8ull, 0x2b9ull, 0x2c0ull, 0x2c1ull, 0x2c2ull, 0x2c3ull, 0x2c4ull, 0x2c5ull, 0x2c6ull, 0x2c7ull, 0x2c8ull, 0x2c9ull, 0x2d0ull, 0x2d1ull, 0x2d2ull, 0x2d3ull, 0x2d4ull, 0x2d5ull, 0x2d6ull, 0x2d7ull, 0x2d8ull, 0x2d9ull, 0x2e0ull, 0x2e1ull, 0x2e2ull, 0x2e3ull, 0x2e4ull, 0x2e5ull, 0x2e6ull, 0x2e7ull, 0x2e8ull, 0x2e9ull, 0x2f0ull, 0x2f1ull, 0x2f2ull, 0x2f3ull, 0x2f4ull, 0x2f5ull, 0x2f6ull, 0x2f7ull, 0x2f8ull, 0x2f9ull, 0x28aull, 0x28bull, 0x2aaull, 0x2abull, 0x2caull, 0x2cbull, 0x2eaull, 0x2ebull, 0x2ceull, 0x2cfull, 0x29aull, 0x29bull, 0x2baull, 0x2bbull, 0x2daull, 0x2dbull, 0x2faull, 0x2fbull, 0x2deull, 0x2dfull, 0x300ull, 0x301ull, 0x302ull, 0x303ull, 0x304ull, 0x305ull, 0x306ull, 0x307ull, 0x308ull, 0x309ull, 0x310ull, 0x311ull, 0x312ull, 0x313ull, 0x314ull, 0x315ull, 0x316ull, 0x317ull, 0x318ull, 0x319ull, 0x320ull, 0x321ull, 0x322ull, 0x323ull, 0x324ull, 0x325ull, 0x326ull, 0x327ull, 0x328ull, 0x329ull, 0x330ull, 0x331ull, 0x332ull, 0x333ull, 0x334ull, 0x335ull, 0x336ull, 0x337ull, 0x338ull, 0x339ull, 0x340ull, 0x341ull, 0x342ull, 0x343ull, 0x344ull, 0x345ull, 0x346ull, 0x347ull, 0x348ull, 0x349ull, 0x350ull, 0x351ull, 0x352ull, 0x353ull, 0x354ull, 0x355ull, 0x356ull, 0x357ull, 0x358ull, 0x359ull, 0x360ull, 0x361ull, 0x362ull, 0x363ull, 0x364ull, 0x365ull, 0x366ull, 0x367ull, 0x368ull, 0x369ull, 0x370ull, 0x371ull, 0x372ull, 0x373ull, 0x374ull, 0x375ull, 0x376ull, 0x377ull, 0x378ull, 0x379ull, 0x30aull, 0x30bull, 0x32aull, 0x32bull, 0x34aull, 0x34bull, 0x36aull, 0x36bull, 0x34eull, 0x34full, 0x31aull, 0x31bull, 0x33aull, 0x33bull, 0x35aull, 0x35bull, 0x37aull, 0x37bull, 0x35eull, 0x35full, 0x380ull, 0x381ull, 0x382ull, 0x383ull, 0x384ull, 0x385ull, 0x386ull, 0x387ull, 0x388ull, 0x389ull, 0x390ull, 0x391ull, 0x392ull, 0x393ull, 0x394ull, 0x395ull, 0x396ull, 0x397ull, 0x398ull, 0x399ull, 0x3a0ull, 0x3a1ull, 0x3a2ull, 0x3a3ull, 0x3a4ull, 0x3a5ull, 0x3a6ull, 0x3a7ull, 0x3a8ull, 0x3a9ull, 0x3b0ull, 0x3b1ull, 0x3b2ull, 0x3b3ull, 0x3b4ull, 0x3b5ull, 0x3b6ull, 0x3b7ull, 0x3b8ull, 0x3b9ull, 0x3c0ull, 0x3c1ull, 0x3c2ull, 0x3c3ull, 0x3c4ull, 0x3c5ull, 0x3c6ull, 0x3c7ull, 0x3c8ull, 0x3c9ull, 0x3d0ull, 0x3d1ull, 0x3d2ull, 0x3d3ull, 0x3d4ull, 0x3d5ull, 0x3d6ull, 0x3d7ull, 0x3d8ull, 0x3d9ull, 0x3e0ull, 0x3e1ull, 0x3e2ull, 0x3e3ull, 0x3e4ull, 0x3e5ull, 0x3e6ull, 0x3e7ull, 0x3e8ull, 0x3e9ull, 0x3f0ull, 0x3f1ull, 0x3f2ull, 0x3f3ull, 0x3f4ull, 0x3f5ull, 0x3f6ull, 0x3f7ull, 0x3f8ull, 0x3f9ull, 0x38aull, 0x38bull, 0x3aaull, 0x3abull, 0x3caull, 0x3cbull, 0x3eaull, 0x3ebull, 0x3ceull, 0x3cfull, 0x39aull, 0x39bull, 0x3baull, 0x3bbull, 0x3daull, 0x3dbull, 0x3faull, 0x3fbull, 0x3deull, 0x3dfull, 0x00cull, 0x00dull, 0x10cull, 0x10dull, 0x20cull, 0x20dull, 0x30cull, 0x30dull, 0x02eull, 0x02full, 0x01cull, 0x01dull, 0x11cull, 0x11dull, 0x21cull, 0x21dull, 0x31cull, 0x31dull, 0x03eull, 0x03full, 0x02cull, 0x02dull, 0x12cull, 0x12dull, 0x22cull, 0x22dull, 0x32cull, 0x32dull, 0x12eull, 0x12full, 0x03cull, 0x03dull, 0x13cull, 0x13dull, 0x23cull, 0x23dull, 0x33cull, 0x33dull, 0x13eull, 0x13full, 0x04cull, 0x04dull, 0x14cull, 0x14dull, 0x24cull, 0x24dull, 0x34cull, 0x34dull, 0x22eull, 0x22full, 0x05cull, 0x05dull, 0x15cull, 0x15dull, 0x25cull, 0x25dull, 0x35cull, 0x35dull, 0x23eull, 0x23full, 0x06cull, 0x06dull, 0x16cull, 0x16dull, 0x26cull, 0x26dull, 0x36cull, 0x36dull, 0x32eull, 0x32full, 0x07cull, 0x07dull, 0x17cull, 0x17dull, 0x27cull, 0x27dull, 0x37cull, 0x37dull, 0x33eull, 0x33full, 0x00eull, 0x00full, 0x10eull, 0x10full, 0x20eull, 0x20full, 0x30eull, 0x30full, 0x06eull, 0x06full, 0x01eull, 0x01full, 0x11eull, 0x11full, 0x21eull, 0x21full, 0x31eull, 0x31full, 0x07eull, 0x07full, 0x08cull, 0x08dull, 0x18cull, 0x18dull, 0x28cull, 0x28dull, 0x38cull, 0x38dull, 0x0aeull, 0x0afull, 0x09cull, 0x09dull, 0x19cull, 0x19dull, 0x29cull, 0x29dull, 0x39cull, 0x39dull, 0x0beull, 0x0bfull, 0x0acull, 0x0adull, 0x1acull, 0x1adull, 0x2acull, 0x2adull, 0x3acull, 0x3adull, 0x1aeull, 0x1afull, 0x0bcull, 0x0bdull, 0x1bcull, 0x1bdull, 0x2bcull, 0x2bdull, 0x3bcull, 0x3bdull, 0x1beull, 0x1bfull, 0x0ccull, 0x0cdull, 0x1ccull, 0x1cdull, 0x2ccull, 0x2cdull, 0x3ccull, 0x3cdull, 0x2aeull, 0x2afull, 0x0dcull, 0x0ddull, 0x1dcull, 0x1ddull, 0x2dcull, 0x2ddull, 0x3dcull, 0x3ddull, 0x2beull, 0x2bfull, 0x0ecull, 0x0edull, 0x1ecull, 0x1edull, 0x2ecull, 0x2edull, 0x3ecull, 0x3edull, 0x3aeull, 0x3afull, 0x0fcull, 0x0fdull, 0x1fcull, 0x1fdull, 0x2fcull, 0x2fdull, 0x3fcull, 0x3fdull, 0x3beull, 0x3bfull, 0x08eull, 0x08full, 0x18eull, 0x18full, 0x28eull, 0x28full, 0x38eull, 0x38full, 0x0eeull, 0x0efull, 0x09eull, 0x09full, 0x19eull, 0x19full, 0x29eull, 0x29full, 0x39eull, 0x39full, 0x0feull, 0x0ffull }; const UINT64 b2d2[] = { 0x000ull << 10, 0x001ull << 10, 0x002ull << 10, 0x003ull << 10, 0x004ull << 10, 0x005ull << 10, 0x006ull << 10, 0x007ull << 10, 0x008ull << 10, 0x009ull << 10, 0x010ull << 10, 0x011ull << 10, 0x012ull << 10, 0x013ull << 10, 0x014ull << 10, 0x015ull << 10, 0x016ull << 10, 0x017ull << 10, 0x018ull << 10, 0x019ull << 10, 0x020ull << 10, 0x021ull << 10, 0x022ull << 10, 0x023ull << 10, 0x024ull << 10, 0x025ull << 10, 0x026ull << 10, 0x027ull << 10, 0x028ull << 10, 0x029ull << 10, 0x030ull << 10, 0x031ull << 10, 0x032ull << 10, 0x033ull << 10, 0x034ull << 10, 0x035ull << 10, 0x036ull << 10, 0x037ull << 10, 0x038ull << 10, 0x039ull << 10, 0x040ull << 10, 0x041ull << 10, 0x042ull << 10, 0x043ull << 10, 0x044ull << 10, 0x045ull << 10, 0x046ull << 10, 0x047ull << 10, 0x048ull << 10, 0x049ull << 10, 0x050ull << 10, 0x051ull << 10, 0x052ull << 10, 0x053ull << 10, 0x054ull << 10, 0x055ull << 10, 0x056ull << 10, 0x057ull << 10, 0x058ull << 10, 0x059ull << 10, 0x060ull << 10, 0x061ull << 10, 0x062ull << 10, 0x063ull << 10, 0x064ull << 10, 0x065ull << 10, 0x066ull << 10, 0x067ull << 10, 0x068ull << 10, 0x069ull << 10, 0x070ull << 10, 0x071ull << 10, 0x072ull << 10, 0x073ull << 10, 0x074ull << 10, 0x075ull << 10, 0x076ull << 10, 0x077ull << 10, 0x078ull << 10, 0x079ull << 10, 0x00aull << 10, 0x00bull << 10, 0x02aull << 10, 0x02bull << 10, 0x04aull << 10, 0x04bull << 10, 0x06aull << 10, 0x06bull << 10, 0x04eull << 10, 0x04full << 10, 0x01aull << 10, 0x01bull << 10, 0x03aull << 10, 0x03bull << 10, 0x05aull << 10, 0x05bull << 10, 0x07aull << 10, 0x07bull << 10, 0x05eull << 10, 0x05full << 10, 0x080ull << 10, 0x081ull << 10, 0x082ull << 10, 0x083ull << 10, 0x084ull << 10, 0x085ull << 10, 0x086ull << 10, 0x087ull << 10, 0x088ull << 10, 0x089ull << 10, 0x090ull << 10, 0x091ull << 10, 0x092ull << 10, 0x093ull << 10, 0x094ull << 10, 0x095ull << 10, 0x096ull << 10, 0x097ull << 10, 0x098ull << 10, 0x099ull << 10, 0x0a0ull << 10, 0x0a1ull << 10, 0x0a2ull << 10, 0x0a3ull << 10, 0x0a4ull << 10, 0x0a5ull << 10, 0x0a6ull << 10, 0x0a7ull << 10, 0x0a8ull << 10, 0x0a9ull << 10, 0x0b0ull << 10, 0x0b1ull << 10, 0x0b2ull << 10, 0x0b3ull << 10, 0x0b4ull << 10, 0x0b5ull << 10, 0x0b6ull << 10, 0x0b7ull << 10, 0x0b8ull << 10, 0x0b9ull << 10, 0x0c0ull << 10, 0x0c1ull << 10, 0x0c2ull << 10, 0x0c3ull << 10, 0x0c4ull << 10, 0x0c5ull << 10, 0x0c6ull << 10, 0x0c7ull << 10, 0x0c8ull << 10, 0x0c9ull << 10, 0x0d0ull << 10, 0x0d1ull << 10, 0x0d2ull << 10, 0x0d3ull << 10, 0x0d4ull << 10, 0x0d5ull << 10, 0x0d6ull << 10, 0x0d7ull << 10, 0x0d8ull << 10, 0x0d9ull << 10, 0x0e0ull << 10, 0x0e1ull << 10, 0x0e2ull << 10, 0x0e3ull << 10, 0x0e4ull << 10, 0x0e5ull << 10, 0x0e6ull << 10, 0x0e7ull << 10, 0x0e8ull << 10, 0x0e9ull << 10, 0x0f0ull << 10, 0x0f1ull << 10, 0x0f2ull << 10, 0x0f3ull << 10, 0x0f4ull << 10, 0x0f5ull << 10, 0x0f6ull << 10, 0x0f7ull << 10, 0x0f8ull << 10, 0x0f9ull << 10, 0x08aull << 10, 0x08bull << 10, 0x0aaull << 10, 0x0abull << 10, 0x0caull << 10, 0x0cbull << 10, 0x0eaull << 10, 0x0ebull << 10, 0x0ceull << 10, 0x0cfull << 10, 0x09aull << 10, 0x09bull << 10, 0x0baull << 10, 0x0bbull << 10, 0x0daull << 10, 0x0dbull << 10, 0x0faull << 10, 0x0fbull << 10, 0x0deull << 10, 0x0dfull << 10, 0x100ull << 10, 0x101ull << 10, 0x102ull << 10, 0x103ull << 10, 0x104ull << 10, 0x105ull << 10, 0x106ull << 10, 0x107ull << 10, 0x108ull << 10, 0x109ull << 10, 0x110ull << 10, 0x111ull << 10, 0x112ull << 10, 0x113ull << 10, 0x114ull << 10, 0x115ull << 10, 0x116ull << 10, 0x117ull << 10, 0x118ull << 10, 0x119ull << 10, 0x120ull << 10, 0x121ull << 10, 0x122ull << 10, 0x123ull << 10, 0x124ull << 10, 0x125ull << 10, 0x126ull << 10, 0x127ull << 10, 0x128ull << 10, 0x129ull << 10, 0x130ull << 10, 0x131ull << 10, 0x132ull << 10, 0x133ull << 10, 0x134ull << 10, 0x135ull << 10, 0x136ull << 10, 0x137ull << 10, 0x138ull << 10, 0x139ull << 10, 0x140ull << 10, 0x141ull << 10, 0x142ull << 10, 0x143ull << 10, 0x144ull << 10, 0x145ull << 10, 0x146ull << 10, 0x147ull << 10, 0x148ull << 10, 0x149ull << 10, 0x150ull << 10, 0x151ull << 10, 0x152ull << 10, 0x153ull << 10, 0x154ull << 10, 0x155ull << 10, 0x156ull << 10, 0x157ull << 10, 0x158ull << 10, 0x159ull << 10, 0x160ull << 10, 0x161ull << 10, 0x162ull << 10, 0x163ull << 10, 0x164ull << 10, 0x165ull << 10, 0x166ull << 10, 0x167ull << 10, 0x168ull << 10, 0x169ull << 10, 0x170ull << 10, 0x171ull << 10, 0x172ull << 10, 0x173ull << 10, 0x174ull << 10, 0x175ull << 10, 0x176ull << 10, 0x177ull << 10, 0x178ull << 10, 0x179ull << 10, 0x10aull << 10, 0x10bull << 10, 0x12aull << 10, 0x12bull << 10, 0x14aull << 10, 0x14bull << 10, 0x16aull << 10, 0x16bull << 10, 0x14eull << 10, 0x14full << 10, 0x11aull << 10, 0x11bull << 10, 0x13aull << 10, 0x13bull << 10, 0x15aull << 10, 0x15bull << 10, 0x17aull << 10, 0x17bull << 10, 0x15eull << 10, 0x15full << 10, 0x180ull << 10, 0x181ull << 10, 0x182ull << 10, 0x183ull << 10, 0x184ull << 10, 0x185ull << 10, 0x186ull << 10, 0x187ull << 10, 0x188ull << 10, 0x189ull << 10, 0x190ull << 10, 0x191ull << 10, 0x192ull << 10, 0x193ull << 10, 0x194ull << 10, 0x195ull << 10, 0x196ull << 10, 0x197ull << 10, 0x198ull << 10, 0x199ull << 10, 0x1a0ull << 10, 0x1a1ull << 10, 0x1a2ull << 10, 0x1a3ull << 10, 0x1a4ull << 10, 0x1a5ull << 10, 0x1a6ull << 10, 0x1a7ull << 10, 0x1a8ull << 10, 0x1a9ull << 10, 0x1b0ull << 10, 0x1b1ull << 10, 0x1b2ull << 10, 0x1b3ull << 10, 0x1b4ull << 10, 0x1b5ull << 10, 0x1b6ull << 10, 0x1b7ull << 10, 0x1b8ull << 10, 0x1b9ull << 10, 0x1c0ull << 10, 0x1c1ull << 10, 0x1c2ull << 10, 0x1c3ull << 10, 0x1c4ull << 10, 0x1c5ull << 10, 0x1c6ull << 10, 0x1c7ull << 10, 0x1c8ull << 10, 0x1c9ull << 10, 0x1d0ull << 10, 0x1d1ull << 10, 0x1d2ull << 10, 0x1d3ull << 10, 0x1d4ull << 10, 0x1d5ull << 10, 0x1d6ull << 10, 0x1d7ull << 10, 0x1d8ull << 10, 0x1d9ull << 10, 0x1e0ull << 10, 0x1e1ull << 10, 0x1e2ull << 10, 0x1e3ull << 10, 0x1e4ull << 10, 0x1e5ull << 10, 0x1e6ull << 10, 0x1e7ull << 10, 0x1e8ull << 10, 0x1e9ull << 10, 0x1f0ull << 10, 0x1f1ull << 10, 0x1f2ull << 10, 0x1f3ull << 10, 0x1f4ull << 10, 0x1f5ull << 10, 0x1f6ull << 10, 0x1f7ull << 10, 0x1f8ull << 10, 0x1f9ull << 10, 0x18aull << 10, 0x18bull << 10, 0x1aaull << 10, 0x1abull << 10, 0x1caull << 10, 0x1cbull << 10, 0x1eaull << 10, 0x1ebull << 10, 0x1ceull << 10, 0x1cfull << 10, 0x19aull << 10, 0x19bull << 10, 0x1baull << 10, 0x1bbull << 10, 0x1daull << 10, 0x1dbull << 10, 0x1faull << 10, 0x1fbull << 10, 0x1deull << 10, 0x1dfull << 10, 0x200ull << 10, 0x201ull << 10, 0x202ull << 10, 0x203ull << 10, 0x204ull << 10, 0x205ull << 10, 0x206ull << 10, 0x207ull << 10, 0x208ull << 10, 0x209ull << 10, 0x210ull << 10, 0x211ull << 10, 0x212ull << 10, 0x213ull << 10, 0x214ull << 10, 0x215ull << 10, 0x216ull << 10, 0x217ull << 10, 0x218ull << 10, 0x219ull << 10, 0x220ull << 10, 0x221ull << 10, 0x222ull << 10, 0x223ull << 10, 0x224ull << 10, 0x225ull << 10, 0x226ull << 10, 0x227ull << 10, 0x228ull << 10, 0x229ull << 10, 0x230ull << 10, 0x231ull << 10, 0x232ull << 10, 0x233ull << 10, 0x234ull << 10, 0x235ull << 10, 0x236ull << 10, 0x237ull << 10, 0x238ull << 10, 0x239ull << 10, 0x240ull << 10, 0x241ull << 10, 0x242ull << 10, 0x243ull << 10, 0x244ull << 10, 0x245ull << 10, 0x246ull << 10, 0x247ull << 10, 0x248ull << 10, 0x249ull << 10, 0x250ull << 10, 0x251ull << 10, 0x252ull << 10, 0x253ull << 10, 0x254ull << 10, 0x255ull << 10, 0x256ull << 10, 0x257ull << 10, 0x258ull << 10, 0x259ull << 10, 0x260ull << 10, 0x261ull << 10, 0x262ull << 10, 0x263ull << 10, 0x264ull << 10, 0x265ull << 10, 0x266ull << 10, 0x267ull << 10, 0x268ull << 10, 0x269ull << 10, 0x270ull << 10, 0x271ull << 10, 0x272ull << 10, 0x273ull << 10, 0x274ull << 10, 0x275ull << 10, 0x276ull << 10, 0x277ull << 10, 0x278ull << 10, 0x279ull << 10, 0x20aull << 10, 0x20bull << 10, 0x22aull << 10, 0x22bull << 10, 0x24aull << 10, 0x24bull << 10, 0x26aull << 10, 0x26bull << 10, 0x24eull << 10, 0x24full << 10, 0x21aull << 10, 0x21bull << 10, 0x23aull << 10, 0x23bull << 10, 0x25aull << 10, 0x25bull << 10, 0x27aull << 10, 0x27bull << 10, 0x25eull << 10, 0x25full << 10, 0x280ull << 10, 0x281ull << 10, 0x282ull << 10, 0x283ull << 10, 0x284ull << 10, 0x285ull << 10, 0x286ull << 10, 0x287ull << 10, 0x288ull << 10, 0x289ull << 10, 0x290ull << 10, 0x291ull << 10, 0x292ull << 10, 0x293ull << 10, 0x294ull << 10, 0x295ull << 10, 0x296ull << 10, 0x297ull << 10, 0x298ull << 10, 0x299ull << 10, 0x2a0ull << 10, 0x2a1ull << 10, 0x2a2ull << 10, 0x2a3ull << 10, 0x2a4ull << 10, 0x2a5ull << 10, 0x2a6ull << 10, 0x2a7ull << 10, 0x2a8ull << 10, 0x2a9ull << 10, 0x2b0ull << 10, 0x2b1ull << 10, 0x2b2ull << 10, 0x2b3ull << 10, 0x2b4ull << 10, 0x2b5ull << 10, 0x2b6ull << 10, 0x2b7ull << 10, 0x2b8ull << 10, 0x2b9ull << 10, 0x2c0ull << 10, 0x2c1ull << 10, 0x2c2ull << 10, 0x2c3ull << 10, 0x2c4ull << 10, 0x2c5ull << 10, 0x2c6ull << 10, 0x2c7ull << 10, 0x2c8ull << 10, 0x2c9ull << 10, 0x2d0ull << 10, 0x2d1ull << 10, 0x2d2ull << 10, 0x2d3ull << 10, 0x2d4ull << 10, 0x2d5ull << 10, 0x2d6ull << 10, 0x2d7ull << 10, 0x2d8ull << 10, 0x2d9ull << 10, 0x2e0ull << 10, 0x2e1ull << 10, 0x2e2ull << 10, 0x2e3ull << 10, 0x2e4ull << 10, 0x2e5ull << 10, 0x2e6ull << 10, 0x2e7ull << 10, 0x2e8ull << 10, 0x2e9ull << 10, 0x2f0ull << 10, 0x2f1ull << 10, 0x2f2ull << 10, 0x2f3ull << 10, 0x2f4ull << 10, 0x2f5ull << 10, 0x2f6ull << 10, 0x2f7ull << 10, 0x2f8ull << 10, 0x2f9ull << 10, 0x28aull << 10, 0x28bull << 10, 0x2aaull << 10, 0x2abull << 10, 0x2caull << 10, 0x2cbull << 10, 0x2eaull << 10, 0x2ebull << 10, 0x2ceull << 10, 0x2cfull << 10, 0x29aull << 10, 0x29bull << 10, 0x2baull << 10, 0x2bbull << 10, 0x2daull << 10, 0x2dbull << 10, 0x2faull << 10, 0x2fbull << 10, 0x2deull << 10, 0x2dfull << 10, 0x300ull << 10, 0x301ull << 10, 0x302ull << 10, 0x303ull << 10, 0x304ull << 10, 0x305ull << 10, 0x306ull << 10, 0x307ull << 10, 0x308ull << 10, 0x309ull << 10, 0x310ull << 10, 0x311ull << 10, 0x312ull << 10, 0x313ull << 10, 0x314ull << 10, 0x315ull << 10, 0x316ull << 10, 0x317ull << 10, 0x318ull << 10, 0x319ull << 10, 0x320ull << 10, 0x321ull << 10, 0x322ull << 10, 0x323ull << 10, 0x324ull << 10, 0x325ull << 10, 0x326ull << 10, 0x327ull << 10, 0x328ull << 10, 0x329ull << 10, 0x330ull << 10, 0x331ull << 10, 0x332ull << 10, 0x333ull << 10, 0x334ull << 10, 0x335ull << 10, 0x336ull << 10, 0x337ull << 10, 0x338ull << 10, 0x339ull << 10, 0x340ull << 10, 0x341ull << 10, 0x342ull << 10, 0x343ull << 10, 0x344ull << 10, 0x345ull << 10, 0x346ull << 10, 0x347ull << 10, 0x348ull << 10, 0x349ull << 10, 0x350ull << 10, 0x351ull << 10, 0x352ull << 10, 0x353ull << 10, 0x354ull << 10, 0x355ull << 10, 0x356ull << 10, 0x357ull << 10, 0x358ull << 10, 0x359ull << 10, 0x360ull << 10, 0x361ull << 10, 0x362ull << 10, 0x363ull << 10, 0x364ull << 10, 0x365ull << 10, 0x366ull << 10, 0x367ull << 10, 0x368ull << 10, 0x369ull << 10, 0x370ull << 10, 0x371ull << 10, 0x372ull << 10, 0x373ull << 10, 0x374ull << 10, 0x375ull << 10, 0x376ull << 10, 0x377ull << 10, 0x378ull << 10, 0x379ull << 10, 0x30aull << 10, 0x30bull << 10, 0x32aull << 10, 0x32bull << 10, 0x34aull << 10, 0x34bull << 10, 0x36aull << 10, 0x36bull << 10, 0x34eull << 10, 0x34full << 10, 0x31aull << 10, 0x31bull << 10, 0x33aull << 10, 0x33bull << 10, 0x35aull << 10, 0x35bull << 10, 0x37aull << 10, 0x37bull << 10, 0x35eull << 10, 0x35full << 10, 0x380ull << 10, 0x381ull << 10, 0x382ull << 10, 0x383ull << 10, 0x384ull << 10, 0x385ull << 10, 0x386ull << 10, 0x387ull << 10, 0x388ull << 10, 0x389ull << 10, 0x390ull << 10, 0x391ull << 10, 0x392ull << 10, 0x393ull << 10, 0x394ull << 10, 0x395ull << 10, 0x396ull << 10, 0x397ull << 10, 0x398ull << 10, 0x399ull << 10, 0x3a0ull << 10, 0x3a1ull << 10, 0x3a2ull << 10, 0x3a3ull << 10, 0x3a4ull << 10, 0x3a5ull << 10, 0x3a6ull << 10, 0x3a7ull << 10, 0x3a8ull << 10, 0x3a9ull << 10, 0x3b0ull << 10, 0x3b1ull << 10, 0x3b2ull << 10, 0x3b3ull << 10, 0x3b4ull << 10, 0x3b5ull << 10, 0x3b6ull << 10, 0x3b7ull << 10, 0x3b8ull << 10, 0x3b9ull << 10, 0x3c0ull << 10, 0x3c1ull << 10, 0x3c2ull << 10, 0x3c3ull << 10, 0x3c4ull << 10, 0x3c5ull << 10, 0x3c6ull << 10, 0x3c7ull << 10, 0x3c8ull << 10, 0x3c9ull << 10, 0x3d0ull << 10, 0x3d1ull << 10, 0x3d2ull << 10, 0x3d3ull << 10, 0x3d4ull << 10, 0x3d5ull << 10, 0x3d6ull << 10, 0x3d7ull << 10, 0x3d8ull << 10, 0x3d9ull << 10, 0x3e0ull << 10, 0x3e1ull << 10, 0x3e2ull << 10, 0x3e3ull << 10, 0x3e4ull << 10, 0x3e5ull << 10, 0x3e6ull << 10, 0x3e7ull << 10, 0x3e8ull << 10, 0x3e9ull << 10, 0x3f0ull << 10, 0x3f1ull << 10, 0x3f2ull << 10, 0x3f3ull << 10, 0x3f4ull << 10, 0x3f5ull << 10, 0x3f6ull << 10, 0x3f7ull << 10, 0x3f8ull << 10, 0x3f9ull << 10, 0x38aull << 10, 0x38bull << 10, 0x3aaull << 10, 0x3abull << 10, 0x3caull << 10, 0x3cbull << 10, 0x3eaull << 10, 0x3ebull << 10, 0x3ceull << 10, 0x3cfull << 10, 0x39aull << 10, 0x39bull << 10, 0x3baull << 10, 0x3bbull << 10, 0x3daull << 10, 0x3dbull << 10, 0x3faull << 10, 0x3fbull << 10, 0x3deull << 10, 0x3dfull << 10, 0x00cull << 10, 0x00dull << 10, 0x10cull << 10, 0x10dull << 10, 0x20cull << 10, 0x20dull << 10, 0x30cull << 10, 0x30dull << 10, 0x02eull << 10, 0x02full << 10, 0x01cull << 10, 0x01dull << 10, 0x11cull << 10, 0x11dull << 10, 0x21cull << 10, 0x21dull << 10, 0x31cull << 10, 0x31dull << 10, 0x03eull << 10, 0x03full << 10, 0x02cull << 10, 0x02dull << 10, 0x12cull << 10, 0x12dull << 10, 0x22cull << 10, 0x22dull << 10, 0x32cull << 10, 0x32dull << 10, 0x12eull << 10, 0x12full << 10, 0x03cull << 10, 0x03dull << 10, 0x13cull << 10, 0x13dull << 10, 0x23cull << 10, 0x23dull << 10, 0x33cull << 10, 0x33dull << 10, 0x13eull << 10, 0x13full << 10, 0x04cull << 10, 0x04dull << 10, 0x14cull << 10, 0x14dull << 10, 0x24cull << 10, 0x24dull << 10, 0x34cull << 10, 0x34dull << 10, 0x22eull << 10, 0x22full << 10, 0x05cull << 10, 0x05dull << 10, 0x15cull << 10, 0x15dull << 10, 0x25cull << 10, 0x25dull << 10, 0x35cull << 10, 0x35dull << 10, 0x23eull << 10, 0x23full << 10, 0x06cull << 10, 0x06dull << 10, 0x16cull << 10, 0x16dull << 10, 0x26cull << 10, 0x26dull << 10, 0x36cull << 10, 0x36dull << 10, 0x32eull << 10, 0x32full << 10, 0x07cull << 10, 0x07dull << 10, 0x17cull << 10, 0x17dull << 10, 0x27cull << 10, 0x27dull << 10, 0x37cull << 10, 0x37dull << 10, 0x33eull << 10, 0x33full << 10, 0x00eull << 10, 0x00full << 10, 0x10eull << 10, 0x10full << 10, 0x20eull << 10, 0x20full << 10, 0x30eull << 10, 0x30full << 10, 0x06eull << 10, 0x06full << 10, 0x01eull << 10, 0x01full << 10, 0x11eull << 10, 0x11full << 10, 0x21eull << 10, 0x21full << 10, 0x31eull << 10, 0x31full << 10, 0x07eull << 10, 0x07full << 10, 0x08cull << 10, 0x08dull << 10, 0x18cull << 10, 0x18dull << 10, 0x28cull << 10, 0x28dull << 10, 0x38cull << 10, 0x38dull << 10, 0x0aeull << 10, 0x0afull << 10, 0x09cull << 10, 0x09dull << 10, 0x19cull << 10, 0x19dull << 10, 0x29cull << 10, 0x29dull << 10, 0x39cull << 10, 0x39dull << 10, 0x0beull << 10, 0x0bfull << 10, 0x0acull << 10, 0x0adull << 10, 0x1acull << 10, 0x1adull << 10, 0x2acull << 10, 0x2adull << 10, 0x3acull << 10, 0x3adull << 10, 0x1aeull << 10, 0x1afull << 10, 0x0bcull << 10, 0x0bdull << 10, 0x1bcull << 10, 0x1bdull << 10, 0x2bcull << 10, 0x2bdull << 10, 0x3bcull << 10, 0x3bdull << 10, 0x1beull << 10, 0x1bfull << 10, 0x0ccull << 10, 0x0cdull << 10, 0x1ccull << 10, 0x1cdull << 10, 0x2ccull << 10, 0x2cdull << 10, 0x3ccull << 10, 0x3cdull << 10, 0x2aeull << 10, 0x2afull << 10, 0x0dcull << 10, 0x0ddull << 10, 0x1dcull << 10, 0x1ddull << 10, 0x2dcull << 10, 0x2ddull << 10, 0x3dcull << 10, 0x3ddull << 10, 0x2beull << 10, 0x2bfull << 10, 0x0ecull << 10, 0x0edull << 10, 0x1ecull << 10, 0x1edull << 10, 0x2ecull << 10, 0x2edull << 10, 0x3ecull << 10, 0x3edull << 10, 0x3aeull << 10, 0x3afull << 10, 0x0fcull << 10, 0x0fdull << 10, 0x1fcull << 10, 0x1fdull << 10, 0x2fcull << 10, 0x2fdull << 10, 0x3fcull << 10, 0x3fdull << 10, 0x3beull << 10, 0x3bfull << 10, 0x08eull << 10, 0x08full << 10, 0x18eull << 10, 0x18full << 10, 0x28eull << 10, 0x28full << 10, 0x38eull << 10, 0x38full << 10, 0x0eeull << 10, 0x0efull << 10, 0x09eull << 10, 0x09full << 10, 0x19eull << 10, 0x19full << 10, 0x29eull << 10, 0x29full << 10, 0x39eull << 10, 0x39full << 10, 0x0feull << 10, 0x0ffull << 10 }; const UINT64 b2d3[] = { 0x000ull << 20, 0x001ull << 20, 0x002ull << 20, 0x003ull << 20, 0x004ull << 20, 0x005ull << 20, 0x006ull << 20, 0x007ull << 20, 0x008ull << 20, 0x009ull << 20, 0x010ull << 20, 0x011ull << 20, 0x012ull << 20, 0x013ull << 20, 0x014ull << 20, 0x015ull << 20, 0x016ull << 20, 0x017ull << 20, 0x018ull << 20, 0x019ull << 20, 0x020ull << 20, 0x021ull << 20, 0x022ull << 20, 0x023ull << 20, 0x024ull << 20, 0x025ull << 20, 0x026ull << 20, 0x027ull << 20, 0x028ull << 20, 0x029ull << 20, 0x030ull << 20, 0x031ull << 20, 0x032ull << 20, 0x033ull << 20, 0x034ull << 20, 0x035ull << 20, 0x036ull << 20, 0x037ull << 20, 0x038ull << 20, 0x039ull << 20, 0x040ull << 20, 0x041ull << 20, 0x042ull << 20, 0x043ull << 20, 0x044ull << 20, 0x045ull << 20, 0x046ull << 20, 0x047ull << 20, 0x048ull << 20, 0x049ull << 20, 0x050ull << 20, 0x051ull << 20, 0x052ull << 20, 0x053ull << 20, 0x054ull << 20, 0x055ull << 20, 0x056ull << 20, 0x057ull << 20, 0x058ull << 20, 0x059ull << 20, 0x060ull << 20, 0x061ull << 20, 0x062ull << 20, 0x063ull << 20, 0x064ull << 20, 0x065ull << 20, 0x066ull << 20, 0x067ull << 20, 0x068ull << 20, 0x069ull << 20, 0x070ull << 20, 0x071ull << 20, 0x072ull << 20, 0x073ull << 20, 0x074ull << 20, 0x075ull << 20, 0x076ull << 20, 0x077ull << 20, 0x078ull << 20, 0x079ull << 20, 0x00aull << 20, 0x00bull << 20, 0x02aull << 20, 0x02bull << 20, 0x04aull << 20, 0x04bull << 20, 0x06aull << 20, 0x06bull << 20, 0x04eull << 20, 0x04full << 20, 0x01aull << 20, 0x01bull << 20, 0x03aull << 20, 0x03bull << 20, 0x05aull << 20, 0x05bull << 20, 0x07aull << 20, 0x07bull << 20, 0x05eull << 20, 0x05full << 20, 0x080ull << 20, 0x081ull << 20, 0x082ull << 20, 0x083ull << 20, 0x084ull << 20, 0x085ull << 20, 0x086ull << 20, 0x087ull << 20, 0x088ull << 20, 0x089ull << 20, 0x090ull << 20, 0x091ull << 20, 0x092ull << 20, 0x093ull << 20, 0x094ull << 20, 0x095ull << 20, 0x096ull << 20, 0x097ull << 20, 0x098ull << 20, 0x099ull << 20, 0x0a0ull << 20, 0x0a1ull << 20, 0x0a2ull << 20, 0x0a3ull << 20, 0x0a4ull << 20, 0x0a5ull << 20, 0x0a6ull << 20, 0x0a7ull << 20, 0x0a8ull << 20, 0x0a9ull << 20, 0x0b0ull << 20, 0x0b1ull << 20, 0x0b2ull << 20, 0x0b3ull << 20, 0x0b4ull << 20, 0x0b5ull << 20, 0x0b6ull << 20, 0x0b7ull << 20, 0x0b8ull << 20, 0x0b9ull << 20, 0x0c0ull << 20, 0x0c1ull << 20, 0x0c2ull << 20, 0x0c3ull << 20, 0x0c4ull << 20, 0x0c5ull << 20, 0x0c6ull << 20, 0x0c7ull << 20, 0x0c8ull << 20, 0x0c9ull << 20, 0x0d0ull << 20, 0x0d1ull << 20, 0x0d2ull << 20, 0x0d3ull << 20, 0x0d4ull << 20, 0x0d5ull << 20, 0x0d6ull << 20, 0x0d7ull << 20, 0x0d8ull << 20, 0x0d9ull << 20, 0x0e0ull << 20, 0x0e1ull << 20, 0x0e2ull << 20, 0x0e3ull << 20, 0x0e4ull << 20, 0x0e5ull << 20, 0x0e6ull << 20, 0x0e7ull << 20, 0x0e8ull << 20, 0x0e9ull << 20, 0x0f0ull << 20, 0x0f1ull << 20, 0x0f2ull << 20, 0x0f3ull << 20, 0x0f4ull << 20, 0x0f5ull << 20, 0x0f6ull << 20, 0x0f7ull << 20, 0x0f8ull << 20, 0x0f9ull << 20, 0x08aull << 20, 0x08bull << 20, 0x0aaull << 20, 0x0abull << 20, 0x0caull << 20, 0x0cbull << 20, 0x0eaull << 20, 0x0ebull << 20, 0x0ceull << 20, 0x0cfull << 20, 0x09aull << 20, 0x09bull << 20, 0x0baull << 20, 0x0bbull << 20, 0x0daull << 20, 0x0dbull << 20, 0x0faull << 20, 0x0fbull << 20, 0x0deull << 20, 0x0dfull << 20, 0x100ull << 20, 0x101ull << 20, 0x102ull << 20, 0x103ull << 20, 0x104ull << 20, 0x105ull << 20, 0x106ull << 20, 0x107ull << 20, 0x108ull << 20, 0x109ull << 20, 0x110ull << 20, 0x111ull << 20, 0x112ull << 20, 0x113ull << 20, 0x114ull << 20, 0x115ull << 20, 0x116ull << 20, 0x117ull << 20, 0x118ull << 20, 0x119ull << 20, 0x120ull << 20, 0x121ull << 20, 0x122ull << 20, 0x123ull << 20, 0x124ull << 20, 0x125ull << 20, 0x126ull << 20, 0x127ull << 20, 0x128ull << 20, 0x129ull << 20, 0x130ull << 20, 0x131ull << 20, 0x132ull << 20, 0x133ull << 20, 0x134ull << 20, 0x135ull << 20, 0x136ull << 20, 0x137ull << 20, 0x138ull << 20, 0x139ull << 20, 0x140ull << 20, 0x141ull << 20, 0x142ull << 20, 0x143ull << 20, 0x144ull << 20, 0x145ull << 20, 0x146ull << 20, 0x147ull << 20, 0x148ull << 20, 0x149ull << 20, 0x150ull << 20, 0x151ull << 20, 0x152ull << 20, 0x153ull << 20, 0x154ull << 20, 0x155ull << 20, 0x156ull << 20, 0x157ull << 20, 0x158ull << 20, 0x159ull << 20, 0x160ull << 20, 0x161ull << 20, 0x162ull << 20, 0x163ull << 20, 0x164ull << 20, 0x165ull << 20, 0x166ull << 20, 0x167ull << 20, 0x168ull << 20, 0x169ull << 20, 0x170ull << 20, 0x171ull << 20, 0x172ull << 20, 0x173ull << 20, 0x174ull << 20, 0x175ull << 20, 0x176ull << 20, 0x177ull << 20, 0x178ull << 20, 0x179ull << 20, 0x10aull << 20, 0x10bull << 20, 0x12aull << 20, 0x12bull << 20, 0x14aull << 20, 0x14bull << 20, 0x16aull << 20, 0x16bull << 20, 0x14eull << 20, 0x14full << 20, 0x11aull << 20, 0x11bull << 20, 0x13aull << 20, 0x13bull << 20, 0x15aull << 20, 0x15bull << 20, 0x17aull << 20, 0x17bull << 20, 0x15eull << 20, 0x15full << 20, 0x180ull << 20, 0x181ull << 20, 0x182ull << 20, 0x183ull << 20, 0x184ull << 20, 0x185ull << 20, 0x186ull << 20, 0x187ull << 20, 0x188ull << 20, 0x189ull << 20, 0x190ull << 20, 0x191ull << 20, 0x192ull << 20, 0x193ull << 20, 0x194ull << 20, 0x195ull << 20, 0x196ull << 20, 0x197ull << 20, 0x198ull << 20, 0x199ull << 20, 0x1a0ull << 20, 0x1a1ull << 20, 0x1a2ull << 20, 0x1a3ull << 20, 0x1a4ull << 20, 0x1a5ull << 20, 0x1a6ull << 20, 0x1a7ull << 20, 0x1a8ull << 20, 0x1a9ull << 20, 0x1b0ull << 20, 0x1b1ull << 20, 0x1b2ull << 20, 0x1b3ull << 20, 0x1b4ull << 20, 0x1b5ull << 20, 0x1b6ull << 20, 0x1b7ull << 20, 0x1b8ull << 20, 0x1b9ull << 20, 0x1c0ull << 20, 0x1c1ull << 20, 0x1c2ull << 20, 0x1c3ull << 20, 0x1c4ull << 20, 0x1c5ull << 20, 0x1c6ull << 20, 0x1c7ull << 20, 0x1c8ull << 20, 0x1c9ull << 20, 0x1d0ull << 20, 0x1d1ull << 20, 0x1d2ull << 20, 0x1d3ull << 20, 0x1d4ull << 20, 0x1d5ull << 20, 0x1d6ull << 20, 0x1d7ull << 20, 0x1d8ull << 20, 0x1d9ull << 20, 0x1e0ull << 20, 0x1e1ull << 20, 0x1e2ull << 20, 0x1e3ull << 20, 0x1e4ull << 20, 0x1e5ull << 20, 0x1e6ull << 20, 0x1e7ull << 20, 0x1e8ull << 20, 0x1e9ull << 20, 0x1f0ull << 20, 0x1f1ull << 20, 0x1f2ull << 20, 0x1f3ull << 20, 0x1f4ull << 20, 0x1f5ull << 20, 0x1f6ull << 20, 0x1f7ull << 20, 0x1f8ull << 20, 0x1f9ull << 20, 0x18aull << 20, 0x18bull << 20, 0x1aaull << 20, 0x1abull << 20, 0x1caull << 20, 0x1cbull << 20, 0x1eaull << 20, 0x1ebull << 20, 0x1ceull << 20, 0x1cfull << 20, 0x19aull << 20, 0x19bull << 20, 0x1baull << 20, 0x1bbull << 20, 0x1daull << 20, 0x1dbull << 20, 0x1faull << 20, 0x1fbull << 20, 0x1deull << 20, 0x1dfull << 20, 0x200ull << 20, 0x201ull << 20, 0x202ull << 20, 0x203ull << 20, 0x204ull << 20, 0x205ull << 20, 0x206ull << 20, 0x207ull << 20, 0x208ull << 20, 0x209ull << 20, 0x210ull << 20, 0x211ull << 20, 0x212ull << 20, 0x213ull << 20, 0x214ull << 20, 0x215ull << 20, 0x216ull << 20, 0x217ull << 20, 0x218ull << 20, 0x219ull << 20, 0x220ull << 20, 0x221ull << 20, 0x222ull << 20, 0x223ull << 20, 0x224ull << 20, 0x225ull << 20, 0x226ull << 20, 0x227ull << 20, 0x228ull << 20, 0x229ull << 20, 0x230ull << 20, 0x231ull << 20, 0x232ull << 20, 0x233ull << 20, 0x234ull << 20, 0x235ull << 20, 0x236ull << 20, 0x237ull << 20, 0x238ull << 20, 0x239ull << 20, 0x240ull << 20, 0x241ull << 20, 0x242ull << 20, 0x243ull << 20, 0x244ull << 20, 0x245ull << 20, 0x246ull << 20, 0x247ull << 20, 0x248ull << 20, 0x249ull << 20, 0x250ull << 20, 0x251ull << 20, 0x252ull << 20, 0x253ull << 20, 0x254ull << 20, 0x255ull << 20, 0x256ull << 20, 0x257ull << 20, 0x258ull << 20, 0x259ull << 20, 0x260ull << 20, 0x261ull << 20, 0x262ull << 20, 0x263ull << 20, 0x264ull << 20, 0x265ull << 20, 0x266ull << 20, 0x267ull << 20, 0x268ull << 20, 0x269ull << 20, 0x270ull << 20, 0x271ull << 20, 0x272ull << 20, 0x273ull << 20, 0x274ull << 20, 0x275ull << 20, 0x276ull << 20, 0x277ull << 20, 0x278ull << 20, 0x279ull << 20, 0x20aull << 20, 0x20bull << 20, 0x22aull << 20, 0x22bull << 20, 0x24aull << 20, 0x24bull << 20, 0x26aull << 20, 0x26bull << 20, 0x24eull << 20, 0x24full << 20, 0x21aull << 20, 0x21bull << 20, 0x23aull << 20, 0x23bull << 20, 0x25aull << 20, 0x25bull << 20, 0x27aull << 20, 0x27bull << 20, 0x25eull << 20, 0x25full << 20, 0x280ull << 20, 0x281ull << 20, 0x282ull << 20, 0x283ull << 20, 0x284ull << 20, 0x285ull << 20, 0x286ull << 20, 0x287ull << 20, 0x288ull << 20, 0x289ull << 20, 0x290ull << 20, 0x291ull << 20, 0x292ull << 20, 0x293ull << 20, 0x294ull << 20, 0x295ull << 20, 0x296ull << 20, 0x297ull << 20, 0x298ull << 20, 0x299ull << 20, 0x2a0ull << 20, 0x2a1ull << 20, 0x2a2ull << 20, 0x2a3ull << 20, 0x2a4ull << 20, 0x2a5ull << 20, 0x2a6ull << 20, 0x2a7ull << 20, 0x2a8ull << 20, 0x2a9ull << 20, 0x2b0ull << 20, 0x2b1ull << 20, 0x2b2ull << 20, 0x2b3ull << 20, 0x2b4ull << 20, 0x2b5ull << 20, 0x2b6ull << 20, 0x2b7ull << 20, 0x2b8ull << 20, 0x2b9ull << 20, 0x2c0ull << 20, 0x2c1ull << 20, 0x2c2ull << 20, 0x2c3ull << 20, 0x2c4ull << 20, 0x2c5ull << 20, 0x2c6ull << 20, 0x2c7ull << 20, 0x2c8ull << 20, 0x2c9ull << 20, 0x2d0ull << 20, 0x2d1ull << 20, 0x2d2ull << 20, 0x2d3ull << 20, 0x2d4ull << 20, 0x2d5ull << 20, 0x2d6ull << 20, 0x2d7ull << 20, 0x2d8ull << 20, 0x2d9ull << 20, 0x2e0ull << 20, 0x2e1ull << 20, 0x2e2ull << 20, 0x2e3ull << 20, 0x2e4ull << 20, 0x2e5ull << 20, 0x2e6ull << 20, 0x2e7ull << 20, 0x2e8ull << 20, 0x2e9ull << 20, 0x2f0ull << 20, 0x2f1ull << 20, 0x2f2ull << 20, 0x2f3ull << 20, 0x2f4ull << 20, 0x2f5ull << 20, 0x2f6ull << 20, 0x2f7ull << 20, 0x2f8ull << 20, 0x2f9ull << 20, 0x28aull << 20, 0x28bull << 20, 0x2aaull << 20, 0x2abull << 20, 0x2caull << 20, 0x2cbull << 20, 0x2eaull << 20, 0x2ebull << 20, 0x2ceull << 20, 0x2cfull << 20, 0x29aull << 20, 0x29bull << 20, 0x2baull << 20, 0x2bbull << 20, 0x2daull << 20, 0x2dbull << 20, 0x2faull << 20, 0x2fbull << 20, 0x2deull << 20, 0x2dfull << 20, 0x300ull << 20, 0x301ull << 20, 0x302ull << 20, 0x303ull << 20, 0x304ull << 20, 0x305ull << 20, 0x306ull << 20, 0x307ull << 20, 0x308ull << 20, 0x309ull << 20, 0x310ull << 20, 0x311ull << 20, 0x312ull << 20, 0x313ull << 20, 0x314ull << 20, 0x315ull << 20, 0x316ull << 20, 0x317ull << 20, 0x318ull << 20, 0x319ull << 20, 0x320ull << 20, 0x321ull << 20, 0x322ull << 20, 0x323ull << 20, 0x324ull << 20, 0x325ull << 20, 0x326ull << 20, 0x327ull << 20, 0x328ull << 20, 0x329ull << 20, 0x330ull << 20, 0x331ull << 20, 0x332ull << 20, 0x333ull << 20, 0x334ull << 20, 0x335ull << 20, 0x336ull << 20, 0x337ull << 20, 0x338ull << 20, 0x339ull << 20, 0x340ull << 20, 0x341ull << 20, 0x342ull << 20, 0x343ull << 20, 0x344ull << 20, 0x345ull << 20, 0x346ull << 20, 0x347ull << 20, 0x348ull << 20, 0x349ull << 20, 0x350ull << 20, 0x351ull << 20, 0x352ull << 20, 0x353ull << 20, 0x354ull << 20, 0x355ull << 20, 0x356ull << 20, 0x357ull << 20, 0x358ull << 20, 0x359ull << 20, 0x360ull << 20, 0x361ull << 20, 0x362ull << 20, 0x363ull << 20, 0x364ull << 20, 0x365ull << 20, 0x366ull << 20, 0x367ull << 20, 0x368ull << 20, 0x369ull << 20, 0x370ull << 20, 0x371ull << 20, 0x372ull << 20, 0x373ull << 20, 0x374ull << 20, 0x375ull << 20, 0x376ull << 20, 0x377ull << 20, 0x378ull << 20, 0x379ull << 20, 0x30aull << 20, 0x30bull << 20, 0x32aull << 20, 0x32bull << 20, 0x34aull << 20, 0x34bull << 20, 0x36aull << 20, 0x36bull << 20, 0x34eull << 20, 0x34full << 20, 0x31aull << 20, 0x31bull << 20, 0x33aull << 20, 0x33bull << 20, 0x35aull << 20, 0x35bull << 20, 0x37aull << 20, 0x37bull << 20, 0x35eull << 20, 0x35full << 20, 0x380ull << 20, 0x381ull << 20, 0x382ull << 20, 0x383ull << 20, 0x384ull << 20, 0x385ull << 20, 0x386ull << 20, 0x387ull << 20, 0x388ull << 20, 0x389ull << 20, 0x390ull << 20, 0x391ull << 20, 0x392ull << 20, 0x393ull << 20, 0x394ull << 20, 0x395ull << 20, 0x396ull << 20, 0x397ull << 20, 0x398ull << 20, 0x399ull << 20, 0x3a0ull << 20, 0x3a1ull << 20, 0x3a2ull << 20, 0x3a3ull << 20, 0x3a4ull << 20, 0x3a5ull << 20, 0x3a6ull << 20, 0x3a7ull << 20, 0x3a8ull << 20, 0x3a9ull << 20, 0x3b0ull << 20, 0x3b1ull << 20, 0x3b2ull << 20, 0x3b3ull << 20, 0x3b4ull << 20, 0x3b5ull << 20, 0x3b6ull << 20, 0x3b7ull << 20, 0x3b8ull << 20, 0x3b9ull << 20, 0x3c0ull << 20, 0x3c1ull << 20, 0x3c2ull << 20, 0x3c3ull << 20, 0x3c4ull << 20, 0x3c5ull << 20, 0x3c6ull << 20, 0x3c7ull << 20, 0x3c8ull << 20, 0x3c9ull << 20, 0x3d0ull << 20, 0x3d1ull << 20, 0x3d2ull << 20, 0x3d3ull << 20, 0x3d4ull << 20, 0x3d5ull << 20, 0x3d6ull << 20, 0x3d7ull << 20, 0x3d8ull << 20, 0x3d9ull << 20, 0x3e0ull << 20, 0x3e1ull << 20, 0x3e2ull << 20, 0x3e3ull << 20, 0x3e4ull << 20, 0x3e5ull << 20, 0x3e6ull << 20, 0x3e7ull << 20, 0x3e8ull << 20, 0x3e9ull << 20, 0x3f0ull << 20, 0x3f1ull << 20, 0x3f2ull << 20, 0x3f3ull << 20, 0x3f4ull << 20, 0x3f5ull << 20, 0x3f6ull << 20, 0x3f7ull << 20, 0x3f8ull << 20, 0x3f9ull << 20, 0x38aull << 20, 0x38bull << 20, 0x3aaull << 20, 0x3abull << 20, 0x3caull << 20, 0x3cbull << 20, 0x3eaull << 20, 0x3ebull << 20, 0x3ceull << 20, 0x3cfull << 20, 0x39aull << 20, 0x39bull << 20, 0x3baull << 20, 0x3bbull << 20, 0x3daull << 20, 0x3dbull << 20, 0x3faull << 20, 0x3fbull << 20, 0x3deull << 20, 0x3dfull << 20, 0x00cull << 20, 0x00dull << 20, 0x10cull << 20, 0x10dull << 20, 0x20cull << 20, 0x20dull << 20, 0x30cull << 20, 0x30dull << 20, 0x02eull << 20, 0x02full << 20, 0x01cull << 20, 0x01dull << 20, 0x11cull << 20, 0x11dull << 20, 0x21cull << 20, 0x21dull << 20, 0x31cull << 20, 0x31dull << 20, 0x03eull << 20, 0x03full << 20, 0x02cull << 20, 0x02dull << 20, 0x12cull << 20, 0x12dull << 20, 0x22cull << 20, 0x22dull << 20, 0x32cull << 20, 0x32dull << 20, 0x12eull << 20, 0x12full << 20, 0x03cull << 20, 0x03dull << 20, 0x13cull << 20, 0x13dull << 20, 0x23cull << 20, 0x23dull << 20, 0x33cull << 20, 0x33dull << 20, 0x13eull << 20, 0x13full << 20, 0x04cull << 20, 0x04dull << 20, 0x14cull << 20, 0x14dull << 20, 0x24cull << 20, 0x24dull << 20, 0x34cull << 20, 0x34dull << 20, 0x22eull << 20, 0x22full << 20, 0x05cull << 20, 0x05dull << 20, 0x15cull << 20, 0x15dull << 20, 0x25cull << 20, 0x25dull << 20, 0x35cull << 20, 0x35dull << 20, 0x23eull << 20, 0x23full << 20, 0x06cull << 20, 0x06dull << 20, 0x16cull << 20, 0x16dull << 20, 0x26cull << 20, 0x26dull << 20, 0x36cull << 20, 0x36dull << 20, 0x32eull << 20, 0x32full << 20, 0x07cull << 20, 0x07dull << 20, 0x17cull << 20, 0x17dull << 20, 0x27cull << 20, 0x27dull << 20, 0x37cull << 20, 0x37dull << 20, 0x33eull << 20, 0x33full << 20, 0x00eull << 20, 0x00full << 20, 0x10eull << 20, 0x10full << 20, 0x20eull << 20, 0x20full << 20, 0x30eull << 20, 0x30full << 20, 0x06eull << 20, 0x06full << 20, 0x01eull << 20, 0x01full << 20, 0x11eull << 20, 0x11full << 20, 0x21eull << 20, 0x21full << 20, 0x31eull << 20, 0x31full << 20, 0x07eull << 20, 0x07full << 20, 0x08cull << 20, 0x08dull << 20, 0x18cull << 20, 0x18dull << 20, 0x28cull << 20, 0x28dull << 20, 0x38cull << 20, 0x38dull << 20, 0x0aeull << 20, 0x0afull << 20, 0x09cull << 20, 0x09dull << 20, 0x19cull << 20, 0x19dull << 20, 0x29cull << 20, 0x29dull << 20, 0x39cull << 20, 0x39dull << 20, 0x0beull << 20, 0x0bfull << 20, 0x0acull << 20, 0x0adull << 20, 0x1acull << 20, 0x1adull << 20, 0x2acull << 20, 0x2adull << 20, 0x3acull << 20, 0x3adull << 20, 0x1aeull << 20, 0x1afull << 20, 0x0bcull << 20, 0x0bdull << 20, 0x1bcull << 20, 0x1bdull << 20, 0x2bcull << 20, 0x2bdull << 20, 0x3bcull << 20, 0x3bdull << 20, 0x1beull << 20, 0x1bfull << 20, 0x0ccull << 20, 0x0cdull << 20, 0x1ccull << 20, 0x1cdull << 20, 0x2ccull << 20, 0x2cdull << 20, 0x3ccull << 20, 0x3cdull << 20, 0x2aeull << 20, 0x2afull << 20, 0x0dcull << 20, 0x0ddull << 20, 0x1dcull << 20, 0x1ddull << 20, 0x2dcull << 20, 0x2ddull << 20, 0x3dcull << 20, 0x3ddull << 20, 0x2beull << 20, 0x2bfull << 20, 0x0ecull << 20, 0x0edull << 20, 0x1ecull << 20, 0x1edull << 20, 0x2ecull << 20, 0x2edull << 20, 0x3ecull << 20, 0x3edull << 20, 0x3aeull << 20, 0x3afull << 20, 0x0fcull << 20, 0x0fdull << 20, 0x1fcull << 20, 0x1fdull << 20, 0x2fcull << 20, 0x2fdull << 20, 0x3fcull << 20, 0x3fdull << 20, 0x3beull << 20, 0x3bfull << 20, 0x08eull << 20, 0x08full << 20, 0x18eull << 20, 0x18full << 20, 0x28eull << 20, 0x28full << 20, 0x38eull << 20, 0x38full << 20, 0x0eeull << 20, 0x0efull << 20, 0x09eull << 20, 0x09full << 20, 0x19eull << 20, 0x19full << 20, 0x29eull << 20, 0x29full << 20, 0x39eull << 20, 0x39full << 20, 0x0feull << 20, 0x0ffull << 20 }; const UINT64 b2d4[] = { 0x000ull << 30, 0x001ull << 30, 0x002ull << 30, 0x003ull << 30, 0x004ull << 30, 0x005ull << 30, 0x006ull << 30, 0x007ull << 30, 0x008ull << 30, 0x009ull << 30, 0x010ull << 30, 0x011ull << 30, 0x012ull << 30, 0x013ull << 30, 0x014ull << 30, 0x015ull << 30, 0x016ull << 30, 0x017ull << 30, 0x018ull << 30, 0x019ull << 30, 0x020ull << 30, 0x021ull << 30, 0x022ull << 30, 0x023ull << 30, 0x024ull << 30, 0x025ull << 30, 0x026ull << 30, 0x027ull << 30, 0x028ull << 30, 0x029ull << 30, 0x030ull << 30, 0x031ull << 30, 0x032ull << 30, 0x033ull << 30, 0x034ull << 30, 0x035ull << 30, 0x036ull << 30, 0x037ull << 30, 0x038ull << 30, 0x039ull << 30, 0x040ull << 30, 0x041ull << 30, 0x042ull << 30, 0x043ull << 30, 0x044ull << 30, 0x045ull << 30, 0x046ull << 30, 0x047ull << 30, 0x048ull << 30, 0x049ull << 30, 0x050ull << 30, 0x051ull << 30, 0x052ull << 30, 0x053ull << 30, 0x054ull << 30, 0x055ull << 30, 0x056ull << 30, 0x057ull << 30, 0x058ull << 30, 0x059ull << 30, 0x060ull << 30, 0x061ull << 30, 0x062ull << 30, 0x063ull << 30, 0x064ull << 30, 0x065ull << 30, 0x066ull << 30, 0x067ull << 30, 0x068ull << 30, 0x069ull << 30, 0x070ull << 30, 0x071ull << 30, 0x072ull << 30, 0x073ull << 30, 0x074ull << 30, 0x075ull << 30, 0x076ull << 30, 0x077ull << 30, 0x078ull << 30, 0x079ull << 30, 0x00aull << 30, 0x00bull << 30, 0x02aull << 30, 0x02bull << 30, 0x04aull << 30, 0x04bull << 30, 0x06aull << 30, 0x06bull << 30, 0x04eull << 30, 0x04full << 30, 0x01aull << 30, 0x01bull << 30, 0x03aull << 30, 0x03bull << 30, 0x05aull << 30, 0x05bull << 30, 0x07aull << 30, 0x07bull << 30, 0x05eull << 30, 0x05full << 30, 0x080ull << 30, 0x081ull << 30, 0x082ull << 30, 0x083ull << 30, 0x084ull << 30, 0x085ull << 30, 0x086ull << 30, 0x087ull << 30, 0x088ull << 30, 0x089ull << 30, 0x090ull << 30, 0x091ull << 30, 0x092ull << 30, 0x093ull << 30, 0x094ull << 30, 0x095ull << 30, 0x096ull << 30, 0x097ull << 30, 0x098ull << 30, 0x099ull << 30, 0x0a0ull << 30, 0x0a1ull << 30, 0x0a2ull << 30, 0x0a3ull << 30, 0x0a4ull << 30, 0x0a5ull << 30, 0x0a6ull << 30, 0x0a7ull << 30, 0x0a8ull << 30, 0x0a9ull << 30, 0x0b0ull << 30, 0x0b1ull << 30, 0x0b2ull << 30, 0x0b3ull << 30, 0x0b4ull << 30, 0x0b5ull << 30, 0x0b6ull << 30, 0x0b7ull << 30, 0x0b8ull << 30, 0x0b9ull << 30, 0x0c0ull << 30, 0x0c1ull << 30, 0x0c2ull << 30, 0x0c3ull << 30, 0x0c4ull << 30, 0x0c5ull << 30, 0x0c6ull << 30, 0x0c7ull << 30, 0x0c8ull << 30, 0x0c9ull << 30, 0x0d0ull << 30, 0x0d1ull << 30, 0x0d2ull << 30, 0x0d3ull << 30, 0x0d4ull << 30, 0x0d5ull << 30, 0x0d6ull << 30, 0x0d7ull << 30, 0x0d8ull << 30, 0x0d9ull << 30, 0x0e0ull << 30, 0x0e1ull << 30, 0x0e2ull << 30, 0x0e3ull << 30, 0x0e4ull << 30, 0x0e5ull << 30, 0x0e6ull << 30, 0x0e7ull << 30, 0x0e8ull << 30, 0x0e9ull << 30, 0x0f0ull << 30, 0x0f1ull << 30, 0x0f2ull << 30, 0x0f3ull << 30, 0x0f4ull << 30, 0x0f5ull << 30, 0x0f6ull << 30, 0x0f7ull << 30, 0x0f8ull << 30, 0x0f9ull << 30, 0x08aull << 30, 0x08bull << 30, 0x0aaull << 30, 0x0abull << 30, 0x0caull << 30, 0x0cbull << 30, 0x0eaull << 30, 0x0ebull << 30, 0x0ceull << 30, 0x0cfull << 30, 0x09aull << 30, 0x09bull << 30, 0x0baull << 30, 0x0bbull << 30, 0x0daull << 30, 0x0dbull << 30, 0x0faull << 30, 0x0fbull << 30, 0x0deull << 30, 0x0dfull << 30, 0x100ull << 30, 0x101ull << 30, 0x102ull << 30, 0x103ull << 30, 0x104ull << 30, 0x105ull << 30, 0x106ull << 30, 0x107ull << 30, 0x108ull << 30, 0x109ull << 30, 0x110ull << 30, 0x111ull << 30, 0x112ull << 30, 0x113ull << 30, 0x114ull << 30, 0x115ull << 30, 0x116ull << 30, 0x117ull << 30, 0x118ull << 30, 0x119ull << 30, 0x120ull << 30, 0x121ull << 30, 0x122ull << 30, 0x123ull << 30, 0x124ull << 30, 0x125ull << 30, 0x126ull << 30, 0x127ull << 30, 0x128ull << 30, 0x129ull << 30, 0x130ull << 30, 0x131ull << 30, 0x132ull << 30, 0x133ull << 30, 0x134ull << 30, 0x135ull << 30, 0x136ull << 30, 0x137ull << 30, 0x138ull << 30, 0x139ull << 30, 0x140ull << 30, 0x141ull << 30, 0x142ull << 30, 0x143ull << 30, 0x144ull << 30, 0x145ull << 30, 0x146ull << 30, 0x147ull << 30, 0x148ull << 30, 0x149ull << 30, 0x150ull << 30, 0x151ull << 30, 0x152ull << 30, 0x153ull << 30, 0x154ull << 30, 0x155ull << 30, 0x156ull << 30, 0x157ull << 30, 0x158ull << 30, 0x159ull << 30, 0x160ull << 30, 0x161ull << 30, 0x162ull << 30, 0x163ull << 30, 0x164ull << 30, 0x165ull << 30, 0x166ull << 30, 0x167ull << 30, 0x168ull << 30, 0x169ull << 30, 0x170ull << 30, 0x171ull << 30, 0x172ull << 30, 0x173ull << 30, 0x174ull << 30, 0x175ull << 30, 0x176ull << 30, 0x177ull << 30, 0x178ull << 30, 0x179ull << 30, 0x10aull << 30, 0x10bull << 30, 0x12aull << 30, 0x12bull << 30, 0x14aull << 30, 0x14bull << 30, 0x16aull << 30, 0x16bull << 30, 0x14eull << 30, 0x14full << 30, 0x11aull << 30, 0x11bull << 30, 0x13aull << 30, 0x13bull << 30, 0x15aull << 30, 0x15bull << 30, 0x17aull << 30, 0x17bull << 30, 0x15eull << 30, 0x15full << 30, 0x180ull << 30, 0x181ull << 30, 0x182ull << 30, 0x183ull << 30, 0x184ull << 30, 0x185ull << 30, 0x186ull << 30, 0x187ull << 30, 0x188ull << 30, 0x189ull << 30, 0x190ull << 30, 0x191ull << 30, 0x192ull << 30, 0x193ull << 30, 0x194ull << 30, 0x195ull << 30, 0x196ull << 30, 0x197ull << 30, 0x198ull << 30, 0x199ull << 30, 0x1a0ull << 30, 0x1a1ull << 30, 0x1a2ull << 30, 0x1a3ull << 30, 0x1a4ull << 30, 0x1a5ull << 30, 0x1a6ull << 30, 0x1a7ull << 30, 0x1a8ull << 30, 0x1a9ull << 30, 0x1b0ull << 30, 0x1b1ull << 30, 0x1b2ull << 30, 0x1b3ull << 30, 0x1b4ull << 30, 0x1b5ull << 30, 0x1b6ull << 30, 0x1b7ull << 30, 0x1b8ull << 30, 0x1b9ull << 30, 0x1c0ull << 30, 0x1c1ull << 30, 0x1c2ull << 30, 0x1c3ull << 30, 0x1c4ull << 30, 0x1c5ull << 30, 0x1c6ull << 30, 0x1c7ull << 30, 0x1c8ull << 30, 0x1c9ull << 30, 0x1d0ull << 30, 0x1d1ull << 30, 0x1d2ull << 30, 0x1d3ull << 30, 0x1d4ull << 30, 0x1d5ull << 30, 0x1d6ull << 30, 0x1d7ull << 30, 0x1d8ull << 30, 0x1d9ull << 30, 0x1e0ull << 30, 0x1e1ull << 30, 0x1e2ull << 30, 0x1e3ull << 30, 0x1e4ull << 30, 0x1e5ull << 30, 0x1e6ull << 30, 0x1e7ull << 30, 0x1e8ull << 30, 0x1e9ull << 30, 0x1f0ull << 30, 0x1f1ull << 30, 0x1f2ull << 30, 0x1f3ull << 30, 0x1f4ull << 30, 0x1f5ull << 30, 0x1f6ull << 30, 0x1f7ull << 30, 0x1f8ull << 30, 0x1f9ull << 30, 0x18aull << 30, 0x18bull << 30, 0x1aaull << 30, 0x1abull << 30, 0x1caull << 30, 0x1cbull << 30, 0x1eaull << 30, 0x1ebull << 30, 0x1ceull << 30, 0x1cfull << 30, 0x19aull << 30, 0x19bull << 30, 0x1baull << 30, 0x1bbull << 30, 0x1daull << 30, 0x1dbull << 30, 0x1faull << 30, 0x1fbull << 30, 0x1deull << 30, 0x1dfull << 30, 0x200ull << 30, 0x201ull << 30, 0x202ull << 30, 0x203ull << 30, 0x204ull << 30, 0x205ull << 30, 0x206ull << 30, 0x207ull << 30, 0x208ull << 30, 0x209ull << 30, 0x210ull << 30, 0x211ull << 30, 0x212ull << 30, 0x213ull << 30, 0x214ull << 30, 0x215ull << 30, 0x216ull << 30, 0x217ull << 30, 0x218ull << 30, 0x219ull << 30, 0x220ull << 30, 0x221ull << 30, 0x222ull << 30, 0x223ull << 30, 0x224ull << 30, 0x225ull << 30, 0x226ull << 30, 0x227ull << 30, 0x228ull << 30, 0x229ull << 30, 0x230ull << 30, 0x231ull << 30, 0x232ull << 30, 0x233ull << 30, 0x234ull << 30, 0x235ull << 30, 0x236ull << 30, 0x237ull << 30, 0x238ull << 30, 0x239ull << 30, 0x240ull << 30, 0x241ull << 30, 0x242ull << 30, 0x243ull << 30, 0x244ull << 30, 0x245ull << 30, 0x246ull << 30, 0x247ull << 30, 0x248ull << 30, 0x249ull << 30, 0x250ull << 30, 0x251ull << 30, 0x252ull << 30, 0x253ull << 30, 0x254ull << 30, 0x255ull << 30, 0x256ull << 30, 0x257ull << 30, 0x258ull << 30, 0x259ull << 30, 0x260ull << 30, 0x261ull << 30, 0x262ull << 30, 0x263ull << 30, 0x264ull << 30, 0x265ull << 30, 0x266ull << 30, 0x267ull << 30, 0x268ull << 30, 0x269ull << 30, 0x270ull << 30, 0x271ull << 30, 0x272ull << 30, 0x273ull << 30, 0x274ull << 30, 0x275ull << 30, 0x276ull << 30, 0x277ull << 30, 0x278ull << 30, 0x279ull << 30, 0x20aull << 30, 0x20bull << 30, 0x22aull << 30, 0x22bull << 30, 0x24aull << 30, 0x24bull << 30, 0x26aull << 30, 0x26bull << 30, 0x24eull << 30, 0x24full << 30, 0x21aull << 30, 0x21bull << 30, 0x23aull << 30, 0x23bull << 30, 0x25aull << 30, 0x25bull << 30, 0x27aull << 30, 0x27bull << 30, 0x25eull << 30, 0x25full << 30, 0x280ull << 30, 0x281ull << 30, 0x282ull << 30, 0x283ull << 30, 0x284ull << 30, 0x285ull << 30, 0x286ull << 30, 0x287ull << 30, 0x288ull << 30, 0x289ull << 30, 0x290ull << 30, 0x291ull << 30, 0x292ull << 30, 0x293ull << 30, 0x294ull << 30, 0x295ull << 30, 0x296ull << 30, 0x297ull << 30, 0x298ull << 30, 0x299ull << 30, 0x2a0ull << 30, 0x2a1ull << 30, 0x2a2ull << 30, 0x2a3ull << 30, 0x2a4ull << 30, 0x2a5ull << 30, 0x2a6ull << 30, 0x2a7ull << 30, 0x2a8ull << 30, 0x2a9ull << 30, 0x2b0ull << 30, 0x2b1ull << 30, 0x2b2ull << 30, 0x2b3ull << 30, 0x2b4ull << 30, 0x2b5ull << 30, 0x2b6ull << 30, 0x2b7ull << 30, 0x2b8ull << 30, 0x2b9ull << 30, 0x2c0ull << 30, 0x2c1ull << 30, 0x2c2ull << 30, 0x2c3ull << 30, 0x2c4ull << 30, 0x2c5ull << 30, 0x2c6ull << 30, 0x2c7ull << 30, 0x2c8ull << 30, 0x2c9ull << 30, 0x2d0ull << 30, 0x2d1ull << 30, 0x2d2ull << 30, 0x2d3ull << 30, 0x2d4ull << 30, 0x2d5ull << 30, 0x2d6ull << 30, 0x2d7ull << 30, 0x2d8ull << 30, 0x2d9ull << 30, 0x2e0ull << 30, 0x2e1ull << 30, 0x2e2ull << 30, 0x2e3ull << 30, 0x2e4ull << 30, 0x2e5ull << 30, 0x2e6ull << 30, 0x2e7ull << 30, 0x2e8ull << 30, 0x2e9ull << 30, 0x2f0ull << 30, 0x2f1ull << 30, 0x2f2ull << 30, 0x2f3ull << 30, 0x2f4ull << 30, 0x2f5ull << 30, 0x2f6ull << 30, 0x2f7ull << 30, 0x2f8ull << 30, 0x2f9ull << 30, 0x28aull << 30, 0x28bull << 30, 0x2aaull << 30, 0x2abull << 30, 0x2caull << 30, 0x2cbull << 30, 0x2eaull << 30, 0x2ebull << 30, 0x2ceull << 30, 0x2cfull << 30, 0x29aull << 30, 0x29bull << 30, 0x2baull << 30, 0x2bbull << 30, 0x2daull << 30, 0x2dbull << 30, 0x2faull << 30, 0x2fbull << 30, 0x2deull << 30, 0x2dfull << 30, 0x300ull << 30, 0x301ull << 30, 0x302ull << 30, 0x303ull << 30, 0x304ull << 30, 0x305ull << 30, 0x306ull << 30, 0x307ull << 30, 0x308ull << 30, 0x309ull << 30, 0x310ull << 30, 0x311ull << 30, 0x312ull << 30, 0x313ull << 30, 0x314ull << 30, 0x315ull << 30, 0x316ull << 30, 0x317ull << 30, 0x318ull << 30, 0x319ull << 30, 0x320ull << 30, 0x321ull << 30, 0x322ull << 30, 0x323ull << 30, 0x324ull << 30, 0x325ull << 30, 0x326ull << 30, 0x327ull << 30, 0x328ull << 30, 0x329ull << 30, 0x330ull << 30, 0x331ull << 30, 0x332ull << 30, 0x333ull << 30, 0x334ull << 30, 0x335ull << 30, 0x336ull << 30, 0x337ull << 30, 0x338ull << 30, 0x339ull << 30, 0x340ull << 30, 0x341ull << 30, 0x342ull << 30, 0x343ull << 30, 0x344ull << 30, 0x345ull << 30, 0x346ull << 30, 0x347ull << 30, 0x348ull << 30, 0x349ull << 30, 0x350ull << 30, 0x351ull << 30, 0x352ull << 30, 0x353ull << 30, 0x354ull << 30, 0x355ull << 30, 0x356ull << 30, 0x357ull << 30, 0x358ull << 30, 0x359ull << 30, 0x360ull << 30, 0x361ull << 30, 0x362ull << 30, 0x363ull << 30, 0x364ull << 30, 0x365ull << 30, 0x366ull << 30, 0x367ull << 30, 0x368ull << 30, 0x369ull << 30, 0x370ull << 30, 0x371ull << 30, 0x372ull << 30, 0x373ull << 30, 0x374ull << 30, 0x375ull << 30, 0x376ull << 30, 0x377ull << 30, 0x378ull << 30, 0x379ull << 30, 0x30aull << 30, 0x30bull << 30, 0x32aull << 30, 0x32bull << 30, 0x34aull << 30, 0x34bull << 30, 0x36aull << 30, 0x36bull << 30, 0x34eull << 30, 0x34full << 30, 0x31aull << 30, 0x31bull << 30, 0x33aull << 30, 0x33bull << 30, 0x35aull << 30, 0x35bull << 30, 0x37aull << 30, 0x37bull << 30, 0x35eull << 30, 0x35full << 30, 0x380ull << 30, 0x381ull << 30, 0x382ull << 30, 0x383ull << 30, 0x384ull << 30, 0x385ull << 30, 0x386ull << 30, 0x387ull << 30, 0x388ull << 30, 0x389ull << 30, 0x390ull << 30, 0x391ull << 30, 0x392ull << 30, 0x393ull << 30, 0x394ull << 30, 0x395ull << 30, 0x396ull << 30, 0x397ull << 30, 0x398ull << 30, 0x399ull << 30, 0x3a0ull << 30, 0x3a1ull << 30, 0x3a2ull << 30, 0x3a3ull << 30, 0x3a4ull << 30, 0x3a5ull << 30, 0x3a6ull << 30, 0x3a7ull << 30, 0x3a8ull << 30, 0x3a9ull << 30, 0x3b0ull << 30, 0x3b1ull << 30, 0x3b2ull << 30, 0x3b3ull << 30, 0x3b4ull << 30, 0x3b5ull << 30, 0x3b6ull << 30, 0x3b7ull << 30, 0x3b8ull << 30, 0x3b9ull << 30, 0x3c0ull << 30, 0x3c1ull << 30, 0x3c2ull << 30, 0x3c3ull << 30, 0x3c4ull << 30, 0x3c5ull << 30, 0x3c6ull << 30, 0x3c7ull << 30, 0x3c8ull << 30, 0x3c9ull << 30, 0x3d0ull << 30, 0x3d1ull << 30, 0x3d2ull << 30, 0x3d3ull << 30, 0x3d4ull << 30, 0x3d5ull << 30, 0x3d6ull << 30, 0x3d7ull << 30, 0x3d8ull << 30, 0x3d9ull << 30, 0x3e0ull << 30, 0x3e1ull << 30, 0x3e2ull << 30, 0x3e3ull << 30, 0x3e4ull << 30, 0x3e5ull << 30, 0x3e6ull << 30, 0x3e7ull << 30, 0x3e8ull << 30, 0x3e9ull << 30, 0x3f0ull << 30, 0x3f1ull << 30, 0x3f2ull << 30, 0x3f3ull << 30, 0x3f4ull << 30, 0x3f5ull << 30, 0x3f6ull << 30, 0x3f7ull << 30, 0x3f8ull << 30, 0x3f9ull << 30, 0x38aull << 30, 0x38bull << 30, 0x3aaull << 30, 0x3abull << 30, 0x3caull << 30, 0x3cbull << 30, 0x3eaull << 30, 0x3ebull << 30, 0x3ceull << 30, 0x3cfull << 30, 0x39aull << 30, 0x39bull << 30, 0x3baull << 30, 0x3bbull << 30, 0x3daull << 30, 0x3dbull << 30, 0x3faull << 30, 0x3fbull << 30, 0x3deull << 30, 0x3dfull << 30, 0x00cull << 30, 0x00dull << 30, 0x10cull << 30, 0x10dull << 30, 0x20cull << 30, 0x20dull << 30, 0x30cull << 30, 0x30dull << 30, 0x02eull << 30, 0x02full << 30, 0x01cull << 30, 0x01dull << 30, 0x11cull << 30, 0x11dull << 30, 0x21cull << 30, 0x21dull << 30, 0x31cull << 30, 0x31dull << 30, 0x03eull << 30, 0x03full << 30, 0x02cull << 30, 0x02dull << 30, 0x12cull << 30, 0x12dull << 30, 0x22cull << 30, 0x22dull << 30, 0x32cull << 30, 0x32dull << 30, 0x12eull << 30, 0x12full << 30, 0x03cull << 30, 0x03dull << 30, 0x13cull << 30, 0x13dull << 30, 0x23cull << 30, 0x23dull << 30, 0x33cull << 30, 0x33dull << 30, 0x13eull << 30, 0x13full << 30, 0x04cull << 30, 0x04dull << 30, 0x14cull << 30, 0x14dull << 30, 0x24cull << 30, 0x24dull << 30, 0x34cull << 30, 0x34dull << 30, 0x22eull << 30, 0x22full << 30, 0x05cull << 30, 0x05dull << 30, 0x15cull << 30, 0x15dull << 30, 0x25cull << 30, 0x25dull << 30, 0x35cull << 30, 0x35dull << 30, 0x23eull << 30, 0x23full << 30, 0x06cull << 30, 0x06dull << 30, 0x16cull << 30, 0x16dull << 30, 0x26cull << 30, 0x26dull << 30, 0x36cull << 30, 0x36dull << 30, 0x32eull << 30, 0x32full << 30, 0x07cull << 30, 0x07dull << 30, 0x17cull << 30, 0x17dull << 30, 0x27cull << 30, 0x27dull << 30, 0x37cull << 30, 0x37dull << 30, 0x33eull << 30, 0x33full << 30, 0x00eull << 30, 0x00full << 30, 0x10eull << 30, 0x10full << 30, 0x20eull << 30, 0x20full << 30, 0x30eull << 30, 0x30full << 30, 0x06eull << 30, 0x06full << 30, 0x01eull << 30, 0x01full << 30, 0x11eull << 30, 0x11full << 30, 0x21eull << 30, 0x21full << 30, 0x31eull << 30, 0x31full << 30, 0x07eull << 30, 0x07full << 30, 0x08cull << 30, 0x08dull << 30, 0x18cull << 30, 0x18dull << 30, 0x28cull << 30, 0x28dull << 30, 0x38cull << 30, 0x38dull << 30, 0x0aeull << 30, 0x0afull << 30, 0x09cull << 30, 0x09dull << 30, 0x19cull << 30, 0x19dull << 30, 0x29cull << 30, 0x29dull << 30, 0x39cull << 30, 0x39dull << 30, 0x0beull << 30, 0x0bfull << 30, 0x0acull << 30, 0x0adull << 30, 0x1acull << 30, 0x1adull << 30, 0x2acull << 30, 0x2adull << 30, 0x3acull << 30, 0x3adull << 30, 0x1aeull << 30, 0x1afull << 30, 0x0bcull << 30, 0x0bdull << 30, 0x1bcull << 30, 0x1bdull << 30, 0x2bcull << 30, 0x2bdull << 30, 0x3bcull << 30, 0x3bdull << 30, 0x1beull << 30, 0x1bfull << 30, 0x0ccull << 30, 0x0cdull << 30, 0x1ccull << 30, 0x1cdull << 30, 0x2ccull << 30, 0x2cdull << 30, 0x3ccull << 30, 0x3cdull << 30, 0x2aeull << 30, 0x2afull << 30, 0x0dcull << 30, 0x0ddull << 30, 0x1dcull << 30, 0x1ddull << 30, 0x2dcull << 30, 0x2ddull << 30, 0x3dcull << 30, 0x3ddull << 30, 0x2beull << 30, 0x2bfull << 30, 0x0ecull << 30, 0x0edull << 30, 0x1ecull << 30, 0x1edull << 30, 0x2ecull << 30, 0x2edull << 30, 0x3ecull << 30, 0x3edull << 30, 0x3aeull << 30, 0x3afull << 30, 0x0fcull << 30, 0x0fdull << 30, 0x1fcull << 30, 0x1fdull << 30, 0x2fcull << 30, 0x2fdull << 30, 0x3fcull << 30, 0x3fdull << 30, 0x3beull << 30, 0x3bfull << 30, 0x08eull << 30, 0x08full << 30, 0x18eull << 30, 0x18full << 30, 0x28eull << 30, 0x28full << 30, 0x38eull << 30, 0x38full << 30, 0x0eeull << 30, 0x0efull << 30, 0x09eull << 30, 0x09full << 30, 0x19eull << 30, 0x19full << 30, 0x29eull << 30, 0x29full << 30, 0x39eull << 30, 0x39full << 30, 0x0feull << 30, 0x0ffull << 30 }; const UINT64 b2d5[] = { 0x000ull << 40, 0x001ull << 40, 0x002ull << 40, 0x003ull << 40, 0x004ull << 40, 0x005ull << 40, 0x006ull << 40, 0x007ull << 40, 0x008ull << 40, 0x009ull << 40, 0x010ull << 40, 0x011ull << 40, 0x012ull << 40, 0x013ull << 40, 0x014ull << 40, 0x015ull << 40, 0x016ull << 40, 0x017ull << 40, 0x018ull << 40, 0x019ull << 40, 0x020ull << 40, 0x021ull << 40, 0x022ull << 40, 0x023ull << 40, 0x024ull << 40, 0x025ull << 40, 0x026ull << 40, 0x027ull << 40, 0x028ull << 40, 0x029ull << 40, 0x030ull << 40, 0x031ull << 40, 0x032ull << 40, 0x033ull << 40, 0x034ull << 40, 0x035ull << 40, 0x036ull << 40, 0x037ull << 40, 0x038ull << 40, 0x039ull << 40, 0x040ull << 40, 0x041ull << 40, 0x042ull << 40, 0x043ull << 40, 0x044ull << 40, 0x045ull << 40, 0x046ull << 40, 0x047ull << 40, 0x048ull << 40, 0x049ull << 40, 0x050ull << 40, 0x051ull << 40, 0x052ull << 40, 0x053ull << 40, 0x054ull << 40, 0x055ull << 40, 0x056ull << 40, 0x057ull << 40, 0x058ull << 40, 0x059ull << 40, 0x060ull << 40, 0x061ull << 40, 0x062ull << 40, 0x063ull << 40, 0x064ull << 40, 0x065ull << 40, 0x066ull << 40, 0x067ull << 40, 0x068ull << 40, 0x069ull << 40, 0x070ull << 40, 0x071ull << 40, 0x072ull << 40, 0x073ull << 40, 0x074ull << 40, 0x075ull << 40, 0x076ull << 40, 0x077ull << 40, 0x078ull << 40, 0x079ull << 40, 0x00aull << 40, 0x00bull << 40, 0x02aull << 40, 0x02bull << 40, 0x04aull << 40, 0x04bull << 40, 0x06aull << 40, 0x06bull << 40, 0x04eull << 40, 0x04full << 40, 0x01aull << 40, 0x01bull << 40, 0x03aull << 40, 0x03bull << 40, 0x05aull << 40, 0x05bull << 40, 0x07aull << 40, 0x07bull << 40, 0x05eull << 40, 0x05full << 40, 0x080ull << 40, 0x081ull << 40, 0x082ull << 40, 0x083ull << 40, 0x084ull << 40, 0x085ull << 40, 0x086ull << 40, 0x087ull << 40, 0x088ull << 40, 0x089ull << 40, 0x090ull << 40, 0x091ull << 40, 0x092ull << 40, 0x093ull << 40, 0x094ull << 40, 0x095ull << 40, 0x096ull << 40, 0x097ull << 40, 0x098ull << 40, 0x099ull << 40, 0x0a0ull << 40, 0x0a1ull << 40, 0x0a2ull << 40, 0x0a3ull << 40, 0x0a4ull << 40, 0x0a5ull << 40, 0x0a6ull << 40, 0x0a7ull << 40, 0x0a8ull << 40, 0x0a9ull << 40, 0x0b0ull << 40, 0x0b1ull << 40, 0x0b2ull << 40, 0x0b3ull << 40, 0x0b4ull << 40, 0x0b5ull << 40, 0x0b6ull << 40, 0x0b7ull << 40, 0x0b8ull << 40, 0x0b9ull << 40, 0x0c0ull << 40, 0x0c1ull << 40, 0x0c2ull << 40, 0x0c3ull << 40, 0x0c4ull << 40, 0x0c5ull << 40, 0x0c6ull << 40, 0x0c7ull << 40, 0x0c8ull << 40, 0x0c9ull << 40, 0x0d0ull << 40, 0x0d1ull << 40, 0x0d2ull << 40, 0x0d3ull << 40, 0x0d4ull << 40, 0x0d5ull << 40, 0x0d6ull << 40, 0x0d7ull << 40, 0x0d8ull << 40, 0x0d9ull << 40, 0x0e0ull << 40, 0x0e1ull << 40, 0x0e2ull << 40, 0x0e3ull << 40, 0x0e4ull << 40, 0x0e5ull << 40, 0x0e6ull << 40, 0x0e7ull << 40, 0x0e8ull << 40, 0x0e9ull << 40, 0x0f0ull << 40, 0x0f1ull << 40, 0x0f2ull << 40, 0x0f3ull << 40, 0x0f4ull << 40, 0x0f5ull << 40, 0x0f6ull << 40, 0x0f7ull << 40, 0x0f8ull << 40, 0x0f9ull << 40, 0x08aull << 40, 0x08bull << 40, 0x0aaull << 40, 0x0abull << 40, 0x0caull << 40, 0x0cbull << 40, 0x0eaull << 40, 0x0ebull << 40, 0x0ceull << 40, 0x0cfull << 40, 0x09aull << 40, 0x09bull << 40, 0x0baull << 40, 0x0bbull << 40, 0x0daull << 40, 0x0dbull << 40, 0x0faull << 40, 0x0fbull << 40, 0x0deull << 40, 0x0dfull << 40, 0x100ull << 40, 0x101ull << 40, 0x102ull << 40, 0x103ull << 40, 0x104ull << 40, 0x105ull << 40, 0x106ull << 40, 0x107ull << 40, 0x108ull << 40, 0x109ull << 40, 0x110ull << 40, 0x111ull << 40, 0x112ull << 40, 0x113ull << 40, 0x114ull << 40, 0x115ull << 40, 0x116ull << 40, 0x117ull << 40, 0x118ull << 40, 0x119ull << 40, 0x120ull << 40, 0x121ull << 40, 0x122ull << 40, 0x123ull << 40, 0x124ull << 40, 0x125ull << 40, 0x126ull << 40, 0x127ull << 40, 0x128ull << 40, 0x129ull << 40, 0x130ull << 40, 0x131ull << 40, 0x132ull << 40, 0x133ull << 40, 0x134ull << 40, 0x135ull << 40, 0x136ull << 40, 0x137ull << 40, 0x138ull << 40, 0x139ull << 40, 0x140ull << 40, 0x141ull << 40, 0x142ull << 40, 0x143ull << 40, 0x144ull << 40, 0x145ull << 40, 0x146ull << 40, 0x147ull << 40, 0x148ull << 40, 0x149ull << 40, 0x150ull << 40, 0x151ull << 40, 0x152ull << 40, 0x153ull << 40, 0x154ull << 40, 0x155ull << 40, 0x156ull << 40, 0x157ull << 40, 0x158ull << 40, 0x159ull << 40, 0x160ull << 40, 0x161ull << 40, 0x162ull << 40, 0x163ull << 40, 0x164ull << 40, 0x165ull << 40, 0x166ull << 40, 0x167ull << 40, 0x168ull << 40, 0x169ull << 40, 0x170ull << 40, 0x171ull << 40, 0x172ull << 40, 0x173ull << 40, 0x174ull << 40, 0x175ull << 40, 0x176ull << 40, 0x177ull << 40, 0x178ull << 40, 0x179ull << 40, 0x10aull << 40, 0x10bull << 40, 0x12aull << 40, 0x12bull << 40, 0x14aull << 40, 0x14bull << 40, 0x16aull << 40, 0x16bull << 40, 0x14eull << 40, 0x14full << 40, 0x11aull << 40, 0x11bull << 40, 0x13aull << 40, 0x13bull << 40, 0x15aull << 40, 0x15bull << 40, 0x17aull << 40, 0x17bull << 40, 0x15eull << 40, 0x15full << 40, 0x180ull << 40, 0x181ull << 40, 0x182ull << 40, 0x183ull << 40, 0x184ull << 40, 0x185ull << 40, 0x186ull << 40, 0x187ull << 40, 0x188ull << 40, 0x189ull << 40, 0x190ull << 40, 0x191ull << 40, 0x192ull << 40, 0x193ull << 40, 0x194ull << 40, 0x195ull << 40, 0x196ull << 40, 0x197ull << 40, 0x198ull << 40, 0x199ull << 40, 0x1a0ull << 40, 0x1a1ull << 40, 0x1a2ull << 40, 0x1a3ull << 40, 0x1a4ull << 40, 0x1a5ull << 40, 0x1a6ull << 40, 0x1a7ull << 40, 0x1a8ull << 40, 0x1a9ull << 40, 0x1b0ull << 40, 0x1b1ull << 40, 0x1b2ull << 40, 0x1b3ull << 40, 0x1b4ull << 40, 0x1b5ull << 40, 0x1b6ull << 40, 0x1b7ull << 40, 0x1b8ull << 40, 0x1b9ull << 40, 0x1c0ull << 40, 0x1c1ull << 40, 0x1c2ull << 40, 0x1c3ull << 40, 0x1c4ull << 40, 0x1c5ull << 40, 0x1c6ull << 40, 0x1c7ull << 40, 0x1c8ull << 40, 0x1c9ull << 40, 0x1d0ull << 40, 0x1d1ull << 40, 0x1d2ull << 40, 0x1d3ull << 40, 0x1d4ull << 40, 0x1d5ull << 40, 0x1d6ull << 40, 0x1d7ull << 40, 0x1d8ull << 40, 0x1d9ull << 40, 0x1e0ull << 40, 0x1e1ull << 40, 0x1e2ull << 40, 0x1e3ull << 40, 0x1e4ull << 40, 0x1e5ull << 40, 0x1e6ull << 40, 0x1e7ull << 40, 0x1e8ull << 40, 0x1e9ull << 40, 0x1f0ull << 40, 0x1f1ull << 40, 0x1f2ull << 40, 0x1f3ull << 40, 0x1f4ull << 40, 0x1f5ull << 40, 0x1f6ull << 40, 0x1f7ull << 40, 0x1f8ull << 40, 0x1f9ull << 40, 0x18aull << 40, 0x18bull << 40, 0x1aaull << 40, 0x1abull << 40, 0x1caull << 40, 0x1cbull << 40, 0x1eaull << 40, 0x1ebull << 40, 0x1ceull << 40, 0x1cfull << 40, 0x19aull << 40, 0x19bull << 40, 0x1baull << 40, 0x1bbull << 40, 0x1daull << 40, 0x1dbull << 40, 0x1faull << 40, 0x1fbull << 40, 0x1deull << 40, 0x1dfull << 40, 0x200ull << 40, 0x201ull << 40, 0x202ull << 40, 0x203ull << 40, 0x204ull << 40, 0x205ull << 40, 0x206ull << 40, 0x207ull << 40, 0x208ull << 40, 0x209ull << 40, 0x210ull << 40, 0x211ull << 40, 0x212ull << 40, 0x213ull << 40, 0x214ull << 40, 0x215ull << 40, 0x216ull << 40, 0x217ull << 40, 0x218ull << 40, 0x219ull << 40, 0x220ull << 40, 0x221ull << 40, 0x222ull << 40, 0x223ull << 40, 0x224ull << 40, 0x225ull << 40, 0x226ull << 40, 0x227ull << 40, 0x228ull << 40, 0x229ull << 40, 0x230ull << 40, 0x231ull << 40, 0x232ull << 40, 0x233ull << 40, 0x234ull << 40, 0x235ull << 40, 0x236ull << 40, 0x237ull << 40, 0x238ull << 40, 0x239ull << 40, 0x240ull << 40, 0x241ull << 40, 0x242ull << 40, 0x243ull << 40, 0x244ull << 40, 0x245ull << 40, 0x246ull << 40, 0x247ull << 40, 0x248ull << 40, 0x249ull << 40, 0x250ull << 40, 0x251ull << 40, 0x252ull << 40, 0x253ull << 40, 0x254ull << 40, 0x255ull << 40, 0x256ull << 40, 0x257ull << 40, 0x258ull << 40, 0x259ull << 40, 0x260ull << 40, 0x261ull << 40, 0x262ull << 40, 0x263ull << 40, 0x264ull << 40, 0x265ull << 40, 0x266ull << 40, 0x267ull << 40, 0x268ull << 40, 0x269ull << 40, 0x270ull << 40, 0x271ull << 40, 0x272ull << 40, 0x273ull << 40, 0x274ull << 40, 0x275ull << 40, 0x276ull << 40, 0x277ull << 40, 0x278ull << 40, 0x279ull << 40, 0x20aull << 40, 0x20bull << 40, 0x22aull << 40, 0x22bull << 40, 0x24aull << 40, 0x24bull << 40, 0x26aull << 40, 0x26bull << 40, 0x24eull << 40, 0x24full << 40, 0x21aull << 40, 0x21bull << 40, 0x23aull << 40, 0x23bull << 40, 0x25aull << 40, 0x25bull << 40, 0x27aull << 40, 0x27bull << 40, 0x25eull << 40, 0x25full << 40, 0x280ull << 40, 0x281ull << 40, 0x282ull << 40, 0x283ull << 40, 0x284ull << 40, 0x285ull << 40, 0x286ull << 40, 0x287ull << 40, 0x288ull << 40, 0x289ull << 40, 0x290ull << 40, 0x291ull << 40, 0x292ull << 40, 0x293ull << 40, 0x294ull << 40, 0x295ull << 40, 0x296ull << 40, 0x297ull << 40, 0x298ull << 40, 0x299ull << 40, 0x2a0ull << 40, 0x2a1ull << 40, 0x2a2ull << 40, 0x2a3ull << 40, 0x2a4ull << 40, 0x2a5ull << 40, 0x2a6ull << 40, 0x2a7ull << 40, 0x2a8ull << 40, 0x2a9ull << 40, 0x2b0ull << 40, 0x2b1ull << 40, 0x2b2ull << 40, 0x2b3ull << 40, 0x2b4ull << 40, 0x2b5ull << 40, 0x2b6ull << 40, 0x2b7ull << 40, 0x2b8ull << 40, 0x2b9ull << 40, 0x2c0ull << 40, 0x2c1ull << 40, 0x2c2ull << 40, 0x2c3ull << 40, 0x2c4ull << 40, 0x2c5ull << 40, 0x2c6ull << 40, 0x2c7ull << 40, 0x2c8ull << 40, 0x2c9ull << 40, 0x2d0ull << 40, 0x2d1ull << 40, 0x2d2ull << 40, 0x2d3ull << 40, 0x2d4ull << 40, 0x2d5ull << 40, 0x2d6ull << 40, 0x2d7ull << 40, 0x2d8ull << 40, 0x2d9ull << 40, 0x2e0ull << 40, 0x2e1ull << 40, 0x2e2ull << 40, 0x2e3ull << 40, 0x2e4ull << 40, 0x2e5ull << 40, 0x2e6ull << 40, 0x2e7ull << 40, 0x2e8ull << 40, 0x2e9ull << 40, 0x2f0ull << 40, 0x2f1ull << 40, 0x2f2ull << 40, 0x2f3ull << 40, 0x2f4ull << 40, 0x2f5ull << 40, 0x2f6ull << 40, 0x2f7ull << 40, 0x2f8ull << 40, 0x2f9ull << 40, 0x28aull << 40, 0x28bull << 40, 0x2aaull << 40, 0x2abull << 40, 0x2caull << 40, 0x2cbull << 40, 0x2eaull << 40, 0x2ebull << 40, 0x2ceull << 40, 0x2cfull << 40, 0x29aull << 40, 0x29bull << 40, 0x2baull << 40, 0x2bbull << 40, 0x2daull << 40, 0x2dbull << 40, 0x2faull << 40, 0x2fbull << 40, 0x2deull << 40, 0x2dfull << 40, 0x300ull << 40, 0x301ull << 40, 0x302ull << 40, 0x303ull << 40, 0x304ull << 40, 0x305ull << 40, 0x306ull << 40, 0x307ull << 40, 0x308ull << 40, 0x309ull << 40, 0x310ull << 40, 0x311ull << 40, 0x312ull << 40, 0x313ull << 40, 0x314ull << 40, 0x315ull << 40, 0x316ull << 40, 0x317ull << 40, 0x318ull << 40, 0x319ull << 40, 0x320ull << 40, 0x321ull << 40, 0x322ull << 40, 0x323ull << 40, 0x324ull << 40, 0x325ull << 40, 0x326ull << 40, 0x327ull << 40, 0x328ull << 40, 0x329ull << 40, 0x330ull << 40, 0x331ull << 40, 0x332ull << 40, 0x333ull << 40, 0x334ull << 40, 0x335ull << 40, 0x336ull << 40, 0x337ull << 40, 0x338ull << 40, 0x339ull << 40, 0x340ull << 40, 0x341ull << 40, 0x342ull << 40, 0x343ull << 40, 0x344ull << 40, 0x345ull << 40, 0x346ull << 40, 0x347ull << 40, 0x348ull << 40, 0x349ull << 40, 0x350ull << 40, 0x351ull << 40, 0x352ull << 40, 0x353ull << 40, 0x354ull << 40, 0x355ull << 40, 0x356ull << 40, 0x357ull << 40, 0x358ull << 40, 0x359ull << 40, 0x360ull << 40, 0x361ull << 40, 0x362ull << 40, 0x363ull << 40, 0x364ull << 40, 0x365ull << 40, 0x366ull << 40, 0x367ull << 40, 0x368ull << 40, 0x369ull << 40, 0x370ull << 40, 0x371ull << 40, 0x372ull << 40, 0x373ull << 40, 0x374ull << 40, 0x375ull << 40, 0x376ull << 40, 0x377ull << 40, 0x378ull << 40, 0x379ull << 40, 0x30aull << 40, 0x30bull << 40, 0x32aull << 40, 0x32bull << 40, 0x34aull << 40, 0x34bull << 40, 0x36aull << 40, 0x36bull << 40, 0x34eull << 40, 0x34full << 40, 0x31aull << 40, 0x31bull << 40, 0x33aull << 40, 0x33bull << 40, 0x35aull << 40, 0x35bull << 40, 0x37aull << 40, 0x37bull << 40, 0x35eull << 40, 0x35full << 40, 0x380ull << 40, 0x381ull << 40, 0x382ull << 40, 0x383ull << 40, 0x384ull << 40, 0x385ull << 40, 0x386ull << 40, 0x387ull << 40, 0x388ull << 40, 0x389ull << 40, 0x390ull << 40, 0x391ull << 40, 0x392ull << 40, 0x393ull << 40, 0x394ull << 40, 0x395ull << 40, 0x396ull << 40, 0x397ull << 40, 0x398ull << 40, 0x399ull << 40, 0x3a0ull << 40, 0x3a1ull << 40, 0x3a2ull << 40, 0x3a3ull << 40, 0x3a4ull << 40, 0x3a5ull << 40, 0x3a6ull << 40, 0x3a7ull << 40, 0x3a8ull << 40, 0x3a9ull << 40, 0x3b0ull << 40, 0x3b1ull << 40, 0x3b2ull << 40, 0x3b3ull << 40, 0x3b4ull << 40, 0x3b5ull << 40, 0x3b6ull << 40, 0x3b7ull << 40, 0x3b8ull << 40, 0x3b9ull << 40, 0x3c0ull << 40, 0x3c1ull << 40, 0x3c2ull << 40, 0x3c3ull << 40, 0x3c4ull << 40, 0x3c5ull << 40, 0x3c6ull << 40, 0x3c7ull << 40, 0x3c8ull << 40, 0x3c9ull << 40, 0x3d0ull << 40, 0x3d1ull << 40, 0x3d2ull << 40, 0x3d3ull << 40, 0x3d4ull << 40, 0x3d5ull << 40, 0x3d6ull << 40, 0x3d7ull << 40, 0x3d8ull << 40, 0x3d9ull << 40, 0x3e0ull << 40, 0x3e1ull << 40, 0x3e2ull << 40, 0x3e3ull << 40, 0x3e4ull << 40, 0x3e5ull << 40, 0x3e6ull << 40, 0x3e7ull << 40, 0x3e8ull << 40, 0x3e9ull << 40, 0x3f0ull << 40, 0x3f1ull << 40, 0x3f2ull << 40, 0x3f3ull << 40, 0x3f4ull << 40, 0x3f5ull << 40, 0x3f6ull << 40, 0x3f7ull << 40, 0x3f8ull << 40, 0x3f9ull << 40, 0x38aull << 40, 0x38bull << 40, 0x3aaull << 40, 0x3abull << 40, 0x3caull << 40, 0x3cbull << 40, 0x3eaull << 40, 0x3ebull << 40, 0x3ceull << 40, 0x3cfull << 40, 0x39aull << 40, 0x39bull << 40, 0x3baull << 40, 0x3bbull << 40, 0x3daull << 40, 0x3dbull << 40, 0x3faull << 40, 0x3fbull << 40, 0x3deull << 40, 0x3dfull << 40, 0x00cull << 40, 0x00dull << 40, 0x10cull << 40, 0x10dull << 40, 0x20cull << 40, 0x20dull << 40, 0x30cull << 40, 0x30dull << 40, 0x02eull << 40, 0x02full << 40, 0x01cull << 40, 0x01dull << 40, 0x11cull << 40, 0x11dull << 40, 0x21cull << 40, 0x21dull << 40, 0x31cull << 40, 0x31dull << 40, 0x03eull << 40, 0x03full << 40, 0x02cull << 40, 0x02dull << 40, 0x12cull << 40, 0x12dull << 40, 0x22cull << 40, 0x22dull << 40, 0x32cull << 40, 0x32dull << 40, 0x12eull << 40, 0x12full << 40, 0x03cull << 40, 0x03dull << 40, 0x13cull << 40, 0x13dull << 40, 0x23cull << 40, 0x23dull << 40, 0x33cull << 40, 0x33dull << 40, 0x13eull << 40, 0x13full << 40, 0x04cull << 40, 0x04dull << 40, 0x14cull << 40, 0x14dull << 40, 0x24cull << 40, 0x24dull << 40, 0x34cull << 40, 0x34dull << 40, 0x22eull << 40, 0x22full << 40, 0x05cull << 40, 0x05dull << 40, 0x15cull << 40, 0x15dull << 40, 0x25cull << 40, 0x25dull << 40, 0x35cull << 40, 0x35dull << 40, 0x23eull << 40, 0x23full << 40, 0x06cull << 40, 0x06dull << 40, 0x16cull << 40, 0x16dull << 40, 0x26cull << 40, 0x26dull << 40, 0x36cull << 40, 0x36dull << 40, 0x32eull << 40, 0x32full << 40, 0x07cull << 40, 0x07dull << 40, 0x17cull << 40, 0x17dull << 40, 0x27cull << 40, 0x27dull << 40, 0x37cull << 40, 0x37dull << 40, 0x33eull << 40, 0x33full << 40, 0x00eull << 40, 0x00full << 40, 0x10eull << 40, 0x10full << 40, 0x20eull << 40, 0x20full << 40, 0x30eull << 40, 0x30full << 40, 0x06eull << 40, 0x06full << 40, 0x01eull << 40, 0x01full << 40, 0x11eull << 40, 0x11full << 40, 0x21eull << 40, 0x21full << 40, 0x31eull << 40, 0x31full << 40, 0x07eull << 40, 0x07full << 40, 0x08cull << 40, 0x08dull << 40, 0x18cull << 40, 0x18dull << 40, 0x28cull << 40, 0x28dull << 40, 0x38cull << 40, 0x38dull << 40, 0x0aeull << 40, 0x0afull << 40, 0x09cull << 40, 0x09dull << 40, 0x19cull << 40, 0x19dull << 40, 0x29cull << 40, 0x29dull << 40, 0x39cull << 40, 0x39dull << 40, 0x0beull << 40, 0x0bfull << 40, 0x0acull << 40, 0x0adull << 40, 0x1acull << 40, 0x1adull << 40, 0x2acull << 40, 0x2adull << 40, 0x3acull << 40, 0x3adull << 40, 0x1aeull << 40, 0x1afull << 40, 0x0bcull << 40, 0x0bdull << 40, 0x1bcull << 40, 0x1bdull << 40, 0x2bcull << 40, 0x2bdull << 40, 0x3bcull << 40, 0x3bdull << 40, 0x1beull << 40, 0x1bfull << 40, 0x0ccull << 40, 0x0cdull << 40, 0x1ccull << 40, 0x1cdull << 40, 0x2ccull << 40, 0x2cdull << 40, 0x3ccull << 40, 0x3cdull << 40, 0x2aeull << 40, 0x2afull << 40, 0x0dcull << 40, 0x0ddull << 40, 0x1dcull << 40, 0x1ddull << 40, 0x2dcull << 40, 0x2ddull << 40, 0x3dcull << 40, 0x3ddull << 40, 0x2beull << 40, 0x2bfull << 40, 0x0ecull << 40, 0x0edull << 40, 0x1ecull << 40, 0x1edull << 40, 0x2ecull << 40, 0x2edull << 40, 0x3ecull << 40, 0x3edull << 40, 0x3aeull << 40, 0x3afull << 40, 0x0fcull << 40, 0x0fdull << 40, 0x1fcull << 40, 0x1fdull << 40, 0x2fcull << 40, 0x2fdull << 40, 0x3fcull << 40, 0x3fdull << 40, 0x3beull << 40, 0x3bfull << 40, 0x08eull << 40, 0x08full << 40, 0x18eull << 40, 0x18full << 40, 0x28eull << 40, 0x28full << 40, 0x38eull << 40, 0x38full << 40, 0x0eeull << 40, 0x0efull << 40, 0x09eull << 40, 0x09full << 40, 0x19eull << 40, 0x19full << 40, 0x29eull << 40, 0x29full << 40, 0x39eull << 40, 0x39full << 40, 0x0feull << 40, 0x0ffull << 40 }; libdfp-1.0.17/libbid/bid_binarydecimal.c000066400000000000000000303324721504475242000200730ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #if DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS #include #define bid_set_excepts(except) __set_status_flags(pfpsf, except) // Rounding to binary should be done according to destination // format rounding mode. static void __bid_set_to_bfp_rnd(void) { switch (fegetround ()) { case FE_DOWNWARD: _IDEC_glbround = ROUNDING_DOWN; break; case FE_UPWARD: _IDEC_glbround = ROUNDING_UP; break; case FE_TOWARDZERO: _IDEC_glbround = ROUNDING_TO_ZERO; break; default: _IDEC_glbround = ROUNDING_TO_NEAREST; break; } } static void __restore_rnd(_IDEC_round *old) { _IDEC_glbround = *old; } #define SET_RESTORE_RND_TO_BFP() \ _IDEC_round __old_rnd __attribute__ ((__cleanup__ (__restore_rnd))) = _IDEC_glbround; \ __bid_set_to_bfp_rnd(); #else #define bid_set_excepts (except) *pfpsf |= except #define SET_RESTORE_RND_TO_BFP() #endif // Counting leading zeros in an unsigned 32-bit word // The "_nz" version will return the wrong answer (31) for zero inputs #define clz32_nz(n) (__builtin_clz (n)) #define clz32(n) (((n)==0) ? 32 : clz32_nz(n)) // Counting trailing zeros in an unsigned 32-bit word #define ctz32(n) (__builtin_ctz (n)) // Counting leading zeros in an unsigned 64-bit word // The "_nz" version will return the wrong answer (63) for zero inputs #define clz64_nz(n) ( (__SIZEOF_LONG__ == 8) ?__builtin_clzl(n) : __builtin_clzll(n) ) #define clz64(n) (((n)==0) ? 64 : clz64_nz(n)) // Counting trailing zeros in an unsigned 64-bit word #define ctz64(n) ( (__SIZEOF_LONG__ == 8) ?__builtin_ctzl(n) : __builtin_ctzll(n) ) // Counting leading zeros in an unsigned 2-part 128-bit word #define clz128(n_hi,n_lo) (((n_hi) == 0) ? 64 + clz64(n_lo) : clz64_nz(n_hi)) // Counting trailing zeros in a 2-part 128-bit word #define ctz128(hi,lo) (((lo) == 0) ? 64 + ctz64(hi) : ctz64(lo)) // Shift 2-part 2^64 * hi + lo left by "c" bits // The "short" form requires a shift 0 < c < 64 and will be faster // Note that shifts of 64 can't be relied on as ANSI #define sll128_short(hi,lo,c) \ ((hi) = ((hi) << (c)) + ((lo)>>(64-(c))), \ (lo) = (lo) << (c) \ ) #define sll128(hi,lo,c) \ (((c) == 0) ? hi = hi, lo = lo : \ (((c) >= 64) ? hi = lo << ((c) - 64), lo = 0 : sll128_short(hi,lo,c))) // Shift 2-part 2^64 * hi + lo right by "c" bits // The "short" form requires a shift 0 < c < 64 and will be faster // Note that shifts of 64 can't be relied on as ANSI #define srl128_short(hi,lo,c) \ ((lo) = ((hi) << (64 - (c))) + ((lo) >> (c)), \ (hi) = (hi) >> (c) \ ) #define srl128(hi,lo,c) \ (((c) == 0) ? hi = hi, lo = lo : \ (((c) >= 64) ? lo = hi >> ((c) - 64), hi = 0 : srl128_short(hi,lo,c))) // Shift 4-part 2^196 * x3 + 2^128 * x2 + 2^64 * x1 + x0 // right by "c" bits (must have c < 64) #define srl256(x3,x2,x1,x0,c) \ ((x0) = ((x1) << (64 - (c))) + ((x0) >> (c)), \ (x1) = ((x2) << (64 - (c))) + ((x1) >> (c)), \ (x2) = ((x3) << (64 - (c))) + ((x2) >> (c)), \ (x3) = (x3) >> (c) \ ) // Compare "<" two 2-part unsigned integers #define lt128(x_hi,x_lo,y_hi,y_lo) \ (((x_hi) < (y_hi)) || (((x_hi) == (y_hi)) && ((x_lo) < (y_lo)))) // Likewise "<=" #define le128(x_hi,x_lo,y_hi,y_lo) \ (((x_hi) < (y_hi)) || (((x_hi) == (y_hi)) && ((x_lo) <= (y_lo)))) // 128x256->384 bit multiplication (missing from existing macros) // I derived this by propagating (A).w[2] = 0 in __mul_192x256_to_448 #define __mul_128x256_to_384(P, A, B) \ { \ UINT512 P0,P1; \ UINT64 CY; \ __mul_64x256_to_320(P0, (A).w[0], B); \ __mul_64x256_to_320(P1, (A).w[1], B); \ (P).w[0] = P0.w[0]; \ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \ __add_carry_in_out((P).w[4],CY,P1.w[3],P0.w[4],CY); \ (P).w[5] = P1.w[4] + CY; \ } // Multiply a 64-bit number by 10, getting "carry" and "sum" #define __mul_10x64(sum,carryout,input,carryin) \ { unsigned long long s3 = (input) + ((input) >> 2); \ (carryout) = ((s3 < (unsigned long long)(input))<<3) + (s3>>61); \ s3 = (s3<<3) + ((input&3)<<1); \ (sum) = s3 + (carryin); \ if ((unsigned long long)(sum) < s3) ++(carryout); \ } // Multiply a 256-bit number by 10, assuming no overflow #define __mul_10x256_to_256(p3,p2,p1,p0,a3,a2,a1,a0) \ { unsigned long long c0,c1,c2,c3; \ __mul_10x64(p0,c0,a0,0ull); \ __mul_10x64(p1,c1,a1,c0); \ __mul_10x64(p2,c2,a2,c1); \ __mul_10x64(p3,c3,a3,c2); \ } // Set up indices for low and high parts, depending on the endian-ness. // Note that this only affects 128-bit input and output operands, not any // of the internal workings, where w[0] is always the low-order part. #if BID_BIG_ENDIAN typedef union { struct { unsigned short hi; unsigned short lo1; unsigned short lo2; unsigned short lo3; unsigned short lo4; unsigned short pad; unsigned pad128; } i; BINARY80 f; } BID_BINARY80LDOUBLE; #else typedef union { struct { unsigned short lo4; unsigned short lo3; unsigned short lo2; unsigned short lo1; unsigned short hi; unsigned short pad; unsigned pad128; } i; BINARY80 f; } BID_BINARY80LDOUBLE; #endif // Pack and return binary floating-point numbers from raw fields #if !DECIMAL_CALL_BY_REFERENCE #define return_binary32(s,e,c) \ { union {UINT32 i; float f; } x_out; \ x_out.i = (((UINT32)(s)) << 31) + \ (((UINT32)(e)) << 23) + \ (c); \ return x_out.f; \ } #else #define return_binary32(s,e,c) \ { union {UINT32 i; float f; } x_out; \ x_out.i = (((UINT32)(s)) << 31) + \ (((UINT32)(e)) << 23) + \ (c); \ *pres = x_out.f; \ return; \ } #endif #if !DECIMAL_CALL_BY_REFERENCE #define return_binary64(s,e,c) \ { union {UINT64 i; double f; } x_out; \ x_out.i = (((UINT64)(s)) << 63) + \ (((UINT64)(e)) << 52) + \ (c); \ return x_out.f; \ } #else #define return_binary64(s,e,c) \ { union {UINT64 i; double f; } x_out; \ x_out.i = (((UINT64)(s)) << 63) + \ (((UINT64)(e)) << 52) + \ (c); \ *pres = x_out.f; \ return; \ } #endif #if !DECIMAL_CALL_BY_REFERENCE #define return_binary80(s,e,c) \ { BID_BINARY80LDOUBLE x_out; \ x_out.i.pad128 = 0; \ x_out.i.pad = 0; \ x_out.i.lo4 = (c)&0xffff; \ x_out.i.lo3 = ((c)&0xffff0000) >> 16; \ x_out.i.lo2 = ((c)&0xffff00000000ull) >> 32; \ x_out.i.lo1 = ((c)&0xffff000000000000ull) >> 48; \ x_out.i.hi = (((UINT64)(s)) << 15) + \ (e); \ return x_out.f; \ } #else #define return_binary80(s,e,c) \ { BID_BINARY80LDOUBLE x_out; \ x_out.i.pad128 = 0; \ x_out.i.pad = 0; \ x_out.i.lo4 = (c)&0xffff; \ x_out.i.lo3 = ((c)&0xffff0000) >> 16; \ x_out.i.lo2 = ((c)&0xffff00000000ull) >> 32; \ x_out.i.lo1 = ((c)&0xffff000000000000ull) >> 48; \ x_out.i.hi = ((s) << 15) + \ (e); \ *pres = x_out.f; \ return; \ } #endif #if !DECIMAL_CALL_BY_REFERENCE #define return_binary128(s,e,c_hi,c_lo) \ { union {UINT128 i; BINARY128 f; } x_out; \ x_out.i.w[LOW_128W] = (c_lo); \ x_out.i.w[HIGH_128W] = (((UINT64)(s)) << 63) + \ (((UINT64)(e)) << 48) + \ (c_hi); \ return x_out.f; \ } #else #define return_binary128(s,e,c_hi,c_lo) \ { union {UINT128 i; BINARY128 f; } x_out; \ x_out.i.w[LOW_128W] = (c_lo); \ x_out.i.w[HIGH_128W] = (((UINT64)(s)) << 63) + \ (((UINT64)(e)) << 48) + \ (c_hi); \ *pres = x_out.f; \ return; \ } #endif // Special cases of returning zero, infinity, NaN as binary FP // Take parameters for the sign, and for NaN the significand #define return_binary32_zero(s) return_binary32(s,0,0) #define return_binary32_inf(s) return_binary32(s,255,0) #define return_binary32_nan(s,c_hi,c_lo) \ return_binary32(s,255,(c_hi>>42)+(1ul<<22)) #define return_binary64_zero(s) return_binary64(s,0,0) #define return_binary64_inf(s) return_binary64(s,2047,0) #define return_binary64_nan(s,c_hi,c_lo) \ return_binary64(s,2047,(c_hi>>13)+(1ull<<51)) #define return_binary80_zero(s) return_binary80(s,0,0) #define return_binary80_inf(s) return_binary80(s,32767,(1ull<<63)) #define return_binary80_nan(s,c_hi,c_lo) \ return_binary80(s,32767,(c_hi>>2)+(3ull<<62)) #define return_binary128_zero(s) return_binary128(s,0,0,0) #define return_binary128_inf(s) return_binary128(s,32767,0,0) #define return_binary128_nan(s,c_hi,c_lo) \ return_binary128(s,32767,(c_hi>>17)+(1ull<<47),((c_lo>>17)+(c_hi<<47))) // Return finite values of maximal magnitude in the various formats #define return_binary32_max(s) return_binary32(s,254,((1ul<<23)-1ul)) #define return_binary64_max(s) return_binary64(s,2046,((1ull<<52)-1ull)) #define return_binary80_max(s) return_binary80(s,32766,0xFFFFFFFFFFFFFFFFull) #define return_binary128_max(s) \ return_binary128(s,32766,((1ull<<48)-1ull),0xFFFFFFFFFFFFFFFFull) #define return_bid32_max(s) return_bid32(s,191,9999999ul) #define return_bid64_max(s) return_bid64(s,767,9999999999999999ull) #define return_bid128_max(s) \ return_bid128(s,12287,542101086242752ull,4003012203950112767ull) // Handle overflow by either infinity or maximal value as appropriate #define return_binary32_ovf(s) \ { if ((rnd_mode==ROUNDING_TO_ZERO) || \ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \ return_binary32_max(s) \ else return_binary32_inf(s) \ } #define return_binary64_ovf(s) \ { if ((rnd_mode==ROUNDING_TO_ZERO) || \ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \ return_binary64_max(s) \ else return_binary64_inf(s) \ } #define return_binary80_ovf(s) \ { if ((rnd_mode==ROUNDING_TO_ZERO) || \ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \ return_binary80_max(s) \ else return_binary80_inf(s) \ } #define return_binary128_ovf(s) \ { if ((rnd_mode==ROUNDING_TO_ZERO) || \ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \ return_binary128_max(s) \ else return_binary128_inf(s) \ } #define return_bid32_ovf(s) \ { if ((rnd_mode==ROUNDING_TO_ZERO) || \ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \ return_bid32_max(s) \ else return_bid32_inf(s) \ } #define return_bid64_ovf(s) \ { if ((rnd_mode==ROUNDING_TO_ZERO) || \ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \ return_bid64_max(s) \ else return_bid64_inf(s) \ } #define return_bid128_ovf(s) \ { if ((rnd_mode==ROUNDING_TO_ZERO) || \ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \ return_bid128_max(s) \ else return_bid128_inf(s) \ } // Unpack binary floating-point number x into // // int s (sign in the LSB) // int e (true "integer" exponent) // c (normalized coefficient with explicit 1 bit) // t (trailing zero count, valid in normalized case only) // [c_hi,c_lo in the case of quad] // // Call the given zero, infinity or nan macros if appropriate #define unpack_binary32(x,s,e,c,t,zero,inf,nan) \ { union { UINT32 i; float f; } x_in; \ x_in.f = x; \ c = x_in.i; \ e = (c >> 23) & ((1ull<<8)-1); \ s = c >> 31; \ c = c & ((1ull<<23)-1); \ if (e == 0) \ { int l; \ if (c == 0) zero; \ l = clz32(c) - (32 - 24); \ c = c << l; \ e = -(l + 149); \ t = 0; \ bid_set_excepts (DENORMAL_EXCEPTION); \ } \ else if (e == ((1ull<<8)-1)) \ { if (c == 0) inf; \ if ((c&(1ul<<22))==0) bid_set_excepts (INVALID_EXCEPTION); \ nan(s,(((unsigned long long) c)) << 42,0ull) \ } \ else \ { c += 1ull<<23; \ t = ctz32(c); \ e -= 150; \ } \ } #define unpack_binary64(x,s,e,c,t,zero,inf,nan) \ { union { UINT64 i; double f; } x_in; \ x_in.f = x; \ c = x_in.i; \ e = (c >> 52) & ((1ull<<11)-1); \ s = c >> 63; \ c = c & ((1ull<<52)-1); \ if (e == 0) \ { int l; \ if (c == 0) zero; \ l = clz64(c) - (64 - 53); \ c = c << l; \ e = -(l + 1074); \ t = 0; \ bid_set_excepts (DENORMAL_EXCEPTION); \ } \ else if (e == ((1ull<<11)-1)) \ { if (c == 0) inf; \ if ((c&(1ull<<51))==0) bid_set_excepts (INVALID_EXCEPTION); \ nan(s,(((unsigned long long) c) << 13),0ull) \ } \ else \ { c += 1ull<<52; \ t = ctz64(c); \ e -= 1075; \ } \ } #define unpack_binary80(x,s,e,c,t,zero,inf,nan) \ { BID_BINARY80LDOUBLE x_in; \ x_in.f = x; \ c = x_in.i.lo4 + ((UINT64)x_in.i.lo3 << 16) + \ ((UINT64)x_in.i.lo2 << 32) + ((UINT64)x_in.i.lo1 << 48); \ e = x_in.i.hi; \ s = e >> 15; \ e = (e & ((1<<15)-1)); \ if (e == 0) \ { int l; \ if (c == 0) zero; \ l = clz64(c); \ c = c << l; \ e -= (l + 16445); \ t = 0; \ bid_set_excepts (DENORMAL_EXCEPTION); \ } \ else if (e == ((1ull<<15)-1)) \ { if ((c & ((1ull<<63)-1)) == 0) inf; \ if ((c&(1ull<<62))==0) bid_set_excepts (INVALID_EXCEPTION); \ nan(s,(((unsigned long long) c) << 2),0ull) \ } \ else \ { t = ctz64(c); \ e -= 16446; \ } \ } #define unpack_binary128(x,s,e,c_hi,c_lo,t,zero,inf,nan) \ { union { UINT128 i; BINARY128 f; } x_in; \ x_in.f = x; \ c_lo = x_in.i.w[LOW_128W]; \ c_hi = x_in.i.w[HIGH_128W]; \ e = (c_hi >> 48) & ((1ull<<15)-1); \ s = c_hi >> 63; \ c_hi = c_hi & ((1ull<<48)-1); \ if (e == 0) \ { int l; \ if ((c_hi == 0) && (c_lo == 0)) zero; \ l = clz128(c_hi,c_lo) - (128 - 113); \ sll128(c_hi,c_lo,l); \ e = -(l + 16494); \ t = 0; \ bid_set_excepts (DENORMAL_EXCEPTION); \ } \ else if (e == ((1ull<<15)-1)) \ { if ((c_hi == 0) && (c_lo == 0)) inf; \ if ((c_hi&(1ull<<47))==0) bid_set_excepts (INVALID_EXCEPTION); \ nan(s,((((unsigned long long) c_hi) << 17) + \ (((unsigned long long) c_lo) >> 47)), \ (((unsigned long long) c_lo) << 17)) \ } \ else \ { c_hi += 1ull<<48; \ t = ctz128(c_hi,c_lo); \ e -= 16495; \ } \ } // Pack and return decimal number from raw fields #if !DECIMAL_CALL_BY_REFERENCE #define return_bid32(s,e,c) \ { if ((UINT32) (c) < (1ul<<23)) \ return (((UINT32) (s) << 31) + ((UINT32) (e) << 23) + (UINT32) (c)); \ else \ return (((UINT32) (s) << 31) + ((0x3ull<<29) - (1ull<<23)) + \ ((UINT32) (e) << 21) + (UINT32) (c)); \ } #else #define return_bid32(s,e,c) \ { if ((UINT32) (c) < (1ul<<23)) \ *pres = (((UINT32) (s) << 31) + ((UINT32) (e) << 23) + (UINT32) (c)); \ else \ *pres = (((UINT32) (s) << 31) + ((0x3ull<<29) - (1ull<<23)) + \ ((UINT32) (e) << 21) + (UINT32) (c)); \ return; \ } #endif #if !DECIMAL_CALL_BY_REFERENCE #define return_bid64(s,e,c) \ { if ((c) < (1ull<<53)) \ return (((UINT64) (s) << 63) + ((UINT64) (e) << 53) + (c)); \ else \ return (((UINT64) (s) << 63) + ((0x3ull<<61) - (1ull<<53)) + \ ((UINT64) (e) << 51) + (c)); \ } #else #define return_bid64(s,e,c) \ { if ((c) < (1ull<<53)) \ *pres = (((UINT64) (s) << 63) + ((UINT64) (e) << 53) + (c)); \ else \ *pres = (((UINT64) (s) << 63) + ((0x3ull<<61) - (1ull<<53)) + \ ((UINT64) (e) << 51) + (c)); \ return; \ } #endif #if !DECIMAL_CALL_BY_REFERENCE #define return_bid128(s,e,c_hi,c_lo) \ { UINT128 x_out; \ x_out.w[LOW_128W] = c_lo; \ x_out.w[HIGH_128W] = ((UINT64) (s) << 63) + ((UINT64) (e) << 49) + \ (c_hi); \ return x_out; \ } #else #define return_bid128(s,e,c_hi,c_lo) \ { UINT128 x_out; \ x_out.w[LOW_128W] = c_lo; \ x_out.w[HIGH_128W] = ((UINT64) (s) << 63) + ((UINT64) (e) << 49) + (c_hi); \ *pres = x_out; \ return; \ } #endif // Special cases of returning zero, infinity, NaN as decimal FP // Take parameters for the sign, and for NaN the significand #define return_bid32_zero(s) return_bid32(s,101,0) #define return_bid32_inf(s) return_bid32(s,(0xF<<4),0) #define return_bid32_nan(s,c_hi,c_lo) \ return_bid32(s,(0x1F<<3),(((c_hi>>44) > 999999ul) ? 0 : (c_hi>>44))); #define return_bid64_zero(s) return_bid64(s,398,0) #define return_bid64_inf(s) return_bid64(s,(0xF<<6),0) #define return_bid64_nan(s,c_hi,c_lo) \ return_bid64(s,(0x1F<<5), \ (((c_hi>>14) > 999999999999999ull) ? 0 : (c_hi>>14))); #define return_bid128_zero(s) return_bid128(s,6176,0,0) #define return_bid128_inf(s) return_bid128(s,(0xF<<10),0,0) #define return_bid128_nan(s,c_hi,c_lo) \ { if (lt128(54210108624275ull,4089650035136921599ull, \ (c_hi>>18),((c_lo>>18)+(c_hi<<46)))) \ return_bid128(s,(0x1F<<9),0ull,0ull) \ else return_bid128(s,(0x1F<<9),(c_hi>>18),((c_lo>>18)+(c_hi<<46))) \ } // Unpack decimal floating-point number x into sign,exponent,coefficient // In special cases, call the macros provided // Coefficient is normalized in the binary sense with postcorrection k, // so that x = 10^e * c / 2^k and the range of c is: // // 2^23 <= c < 2^24 (decimal32) // 2^53 <= c < 2^54 (decimal64) // 2^112 <= c < 2^113 (decimal128) #define unpack_bid32(x,s,e,k,c,zero,inf,nan) \ { s = x >> 31; \ if ((x & (3ull<<29)) == (3ull<<29)) \ { if ((x & (0xFull<<27)) == (0xFull<<27)) \ { if ((x & (0x1Full<<26)) != (0x1Full<<26)) inf; \ if ((x & (1ul<<25))!=0) bid_set_excepts(INVALID_EXCEPTION); \ nan(s,((((x) & 0xFFFFul) > 999999ul) ? 0 : \ (((unsigned long long) x) << 44)),0ull); \ } \ e = ((x >> 21) & ((1ull<<8)-1)) - 101; \ c = (1ull<<23) + (x & ((1ull<<21)-1)); \ if ((unsigned long)(c) > 9999999ul) c = 0; \ k = 0; \ } \ else \ { e = ((x >> 23) & ((1ull<<8)-1)) - 101; \ c = x & ((1ull<<23)-1); \ if (c == 0) zero; \ k = clz32(c) - 8; \ c = c << k; \ } \ } #define unpack_bid64(x,s,e,k,c,zero,inf,nan) \ { s = x >> 63; \ if ((x & (3ull<<61)) == (3ull<<61)) \ { if ((x & (0xFull<<59)) == (0xFull<<59)) \ { if ((x & (0x1Full<<58)) != (0x1Full<<58)) inf; \ if ((x & (1ull<<57))!=0) bid_set_excepts (INVALID_EXCEPTION); \ nan(s,((((x) & 0x3FFFFFFFFFFFFull) > 999999999999999ull) ? 0 : \ (((unsigned long long) x) << 14)),0ull); \ } \ e = ((x >> 51) & ((1ull<<10)-1)) - 398; \ c = (1ull<<53) + (x & ((1ull<<51)-1)); \ if ((unsigned long long)(c) > 9999999999999999ull) c = 0; \ k = 0; \ } \ else \ { e = ((x >> 53) & ((1ull<<10)-1)) - 398; \ c = x & ((1ull<<53)-1); \ if (c == 0) zero; \ k = clz64(c) - 10; \ c = c << k; \ } \ } #define unpack_bid128(x,s,e,k,c,zero,inf,nan) \ { s = x.w[HIGH_128W] >> 63; \ if ((x.w[HIGH_128W] & (3ull<<61)) == (3ull<<61)) \ { if ((x.w[HIGH_128W] & (0xFull<<59)) == (0xFull<<59)) \ { if ((x.w[HIGH_128W] & (0x1Full<<58)) != (0x1Full<<58)) inf; \ if ((x.w[HIGH_128W] & (1ull<<57))!=0) \ bid_set_excepts (INVALID_EXCEPTION); \ if (lt128(54210108624275ull,4089650035136921599ull, \ (x.w[HIGH_128W] & 0x3FFFFFFFFFFFull),x.w[LOW_128W])) \ nan(s,0ull,0ull); \ nan(s,((((unsigned long long) x.w[HIGH_128W]) << 18) + \ (((unsigned long long) x.w[LOW_128W]) >> 46)), \ (((unsigned long long) x.w[LOW_128W]) << 18)); \ } \ zero; \ } \ else \ { e = ((x.w[HIGH_128W] >> 49) & ((1ull<<14)-1)) - 6176; \ c.w[1] = x.w[HIGH_128W] & ((1ull<<49)-1); \ c.w[0] = x.w[LOW_128W]; \ if (lt128(542101086242752ull,4003012203950112767ull, \ c.w[1],c.w[0])) \ { c.w[1] = 0ull; c.w[0] = 0ull; } \ if ((c.w[1] == 0) && (c.w[0] == 0)) zero; \ k = clz128(c.w[1],c.w[0]) - 15; \ sll128(c.w[1],c.w[0],k); \ } \ } // Rounding boundaries table, indexed by // 4 * rounding_mode + 2 * sign + lsb of truncation // We round up if the round/sticky data is strictly > this boundary // // NB: This depends on the particular values of the rounding mode // numbers, which are supposed to be defined as here: // // #define ROUNDING_TO_NEAREST 0x00000 // #define ROUNDING_DOWN 0x00001 // #define ROUNDING_UP 0x00002 // #define ROUNDING_TO_ZERO 0x00003 // #define ROUNDING_TIES_AWAY 0x00004 // // Some of the shortcuts below in "underflow after rounding" also use // the concrete values. // // So we add a directive here to double-check that this is the case #if ((ROUNDING_TO_NEAREST!=0) || (ROUNDING_DOWN!=1) || \ (ROUNDING_UP!=2) || (ROUNDING_TO_ZERO!=3) || \ (ROUNDING_TIES_AWAY!=4)) #error "Rounding mode numbers don't match tables for binary/decimal conversion" #endif static const UINT128 roundbound_128[] = { {{0ull, (1ull << 63)}}, // ROUNDING_TO_NEAREST | positive | even {{~0ull, (1ull << 63) - 1}}, // ROUNDING_TO_NEAREST | positive | odd {{0ull, (1ull << 63)}}, // ROUNDING_TO_NEAREST | negative | even {{~0ull, (1ull << 63) - 1}}, // ROUNDING_TO_NEAREST | negative | odd {{~0ull, ~0ull}}, // ROUNDING_DOWN | positive | even {{~0ull, ~0ull}}, // ROUNDING_DOWN | positive | odd {{0ull, 0ull}}, // ROUNDING_DOWN | negative | even {{0ull, 0ull}}, // ROUNDING_DOWN | negative | odd {{0ull, 0ull}}, // ROUNDING_UP | positive | even {{0ull, 0ull}}, // ROUNDING_UP | positive | odd {{~0ull, ~0ull}}, // ROUNDING_UP | negative | even {{~0ull, ~0ull}}, // ROUNDING_UP | negative | odd {{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | positive | even {{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | positive | odd {{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | negative | even {{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | negative | odd {{~0ull, (1ull << 63) - 1}}, // ROUNDING_TIES_AWAY | positive | even {{~0ull, (1ull << 63) - 1}}, // ROUNDING_TIES_AWAY | positive | odd {{~0ull, (1ull << 63) - 1}}, // ROUNDING_TIES_AWAY | negative | even {{~0ull, (1ull << 63) - 1}} // ROUNDING_TIES_AWAY | negative | odd }; // Table of powers of 5 static const UINT128 power_five[] = { {{1ull, 0ull}}, {{5ull, 0ull}}, {{25ull, 0ull}}, {{125ull, 0ull}}, {{625ull, 0ull}}, {{3125ull, 0ull}}, {{15625ull, 0ull}}, {{78125ull, 0ull}}, {{390625ull, 0ull}}, {{1953125ull, 0ull}}, {{9765625ull, 0ull}}, {{48828125ull, 0ull}}, {{244140625ull, 0ull}}, {{1220703125ull, 0ull}}, {{6103515625ull, 0ull}}, {{30517578125ull, 0ull}}, {{152587890625ull, 0ull}}, {{762939453125ull, 0ull}}, {{3814697265625ull, 0ull}}, {{19073486328125ull, 0ull}}, {{95367431640625ull, 0ull}}, {{476837158203125ull, 0ull}}, {{2384185791015625ull, 0ull}}, {{11920928955078125ull, 0ull}}, {{59604644775390625ull, 0ull}}, {{298023223876953125ull, 0ull}}, {{1490116119384765625ull, 0ull}}, {{7450580596923828125ull, 0ull}}, {{359414837200037393ull, 2ull}}, {{1797074186000186965ull, 10ull}}, {{8985370930000934825ull, 50ull}}, {{8033366502585570893ull, 252ull}}, {{3273344365508751233ull, 1262ull}}, {{16366721827543756165ull, 6310ull}}, {{8046632842880574361ull, 31554ull}}, {{3339676066983768573ull, 157772ull}}, {{16698380334918842865ull, 788860ull}}, {{9704925379756007861ull, 3944304ull}}, {{11631138751360936073ull, 19721522ull}}, {{2815461535676025517ull, 98607613ull}}, {{14077307678380127585ull, 493038065ull}}, {{15046306170771983077ull, 2465190328ull}}, {{1444554559021708921ull, 12325951644ull}}, {{7222772795108544605ull, 61629758220ull}}, {{17667119901833171409ull, 308148791101ull}}, {{14548623214327650581ull, 1540743955509ull}}, {{17402883850509598057ull, 7703719777548ull}}, {{13227442957709783821ull, 38518598887744ull}}, {{10796982567420264257ull, 192592994438723ull}} }; // Tables of values for the various conversions: // // exponents: table of output exponents // breakpoints: test values to decide between two possible exponents // multipliers1/multipliers2: corresponding reciprocal multipliers // coefflimits: used in exactness checks // static const UINT128 breakpoints_binary32[] = { {{17291492046443221751ull, 474778387287989ull}}, {{17522542451896487724ull, 379822709830391ull}}, {{10328685146775279856ull, 303858167864313ull}}, {{12836547420098537447ull, 486173068582901ull}}, {{6579889121336919634ull, 388938454866321ull}}, {{1574562482327625384ull, 311150763893057ull}}, {{6208648786466110938ull, 497841222228891ull}}, {{1277570214430978427ull, 398272977783113ull}}, {{8400753801028603388ull, 318618382226490ull}}, {{13441206081645765421ull, 509789411562384ull}}, {{14442313680058522660ull, 407831529249907ull}}, {{4175153314562997481ull, 326265223399926ull}}, {{17748291747526526940ull, 522024357439881ull}}, {{10509284583279311229ull, 417619485951905ull}}, {{8407427666623448983ull, 334095588761524ull}}, {{2383837822371787403ull, 534552942018439ull}}, {{5596419072639340246ull, 427642353614751ull}}, {{787786443369561873ull, 342113882891801ull}}, {{12328504753617029967ull, 547382212626881ull}}, {{6173454988151713650ull, 437905770101505ull}}, {{4938763990521370920ull, 350324616081204ull}}, {{15280720014318014119ull, 560519385729926ull}}, {{8535227196712500972ull, 448415508583941ull}}, {{3138832942628090454ull, 358732406867153ull}}, {{9889763983586293010ull, 286985925493722ull}}, {{1066227114770427523ull, 459177480789956ull}}, {{15610376950783983311ull, 367341984631964ull}}, {{16177650375369096972ull, 293873587705571ull}}, {{58798897397182893ull, 470197740328915ull}}, {{47039117917746314ull, 376158192263132ull}}, {{11105677738559928021ull, 300926553810505ull}}, {{17769084381695884834ull, 481482486096808ull}}, {{3147221061130976897ull, 385185988877447ull}}, {{13585823293130512487ull, 308148791101957ull}}, {{6979922010041178687ull, 493038065763132ull}}, {{16651984052258673919ull, 394430452610505ull}}, {{13321587241806939135ull, 315544362088404ull}}, {{10246493142665371647ull, 504870979341447ull}}, {{818496884648476671ull, 403896783473158ull}}, {{8033495137202601983ull, 323117426778526ull}}, {{5474894590040342527ull, 516987882845642ull}}, {{15447962116258004991ull, 413590306276513ull}}, {{1290323248780673023ull, 330872245021211ull}}, {{13132563642274807807ull, 529395592033937ull}}, {{3127353284336025599ull, 423516473627150ull}}, {{2501882627468820479ull, 338813178901720ull}}, {{4003012203950112767ull, 542101086242752ull}}, {{14270456207385821183ull, 433680868994201ull}}, {{7727016151166746623ull, 346944695195361ull}}, {{4984528212382973951ull, 555111512312578ull}}, {{11366320199390199807ull, 444089209850062ull}}, {{1714358530028339199ull, 355271367880050ull}}, {{1371486824022671359ull, 284217094304040ull}}, {{2194378918436274175ull, 454747350886464ull}}, {{5444851949490929663ull, 363797880709171ull}}, {{666532744850833407ull, 291038304567337ull}}, {{4755801206503243775ull, 465661287307739ull}}, {{7493989779944505343ull, 372529029846191ull}}, {{2305843009213693951ull, 298023223876953ull}}, {{18446744073709551615ull, 476837158203124ull}}, {{18446744073709551615ull, 381469726562499ull}}, {{18446744073709551615ull, 305175781249999ull}}, {{18446744073709551615ull, 488281249999999ull}}, {{18446744073709551615ull, 390624999999999ull}}, {{18446744073709551615ull, 312499999999999ull}}, {{18446744073709551615ull, 499999999999999ull}}, {{18446744073709551615ull, 399999999999999ull}}, {{18446744073709551615ull, 319999999999999ull}}, {{18446744073709551615ull, 511999999999999ull}}, {{18446744073709551615ull, 409599999999999ull}}, {{18446744073709551615ull, 327679999999999ull}}, {{18446744073709551615ull, 524287999999999ull}}, {{18446744073709551615ull, 419430399999999ull}}, {{18446744073709551615ull, 335544319999999ull}}, {{18446744073709551615ull, 536870911999999ull}}, {{18446744073709551615ull, 429496729599999ull}}, {{18446744073709551615ull, 343597383679999ull}}, {{18446744073709551615ull, 549755813887999ull}}, {{18446744073709551615ull, 439804651110399ull}}, {{18446744073709551615ull, 351843720888319ull}}, {{18446744073709551615ull, 281474976710655ull}}, {{11068046444225730969ull, 450359962737049ull}}, {{12543785970122495098ull, 360287970189639ull}}, {{13724377590839906402ull, 288230376151711ull}}, {{14580306515860029597ull, 461168601842738ull}}, {{596198768462292708ull, 368934881474191ull}}, {{15234354273737475459ull, 295147905179352ull}}, {{9617571579012319442ull, 472236648286964ull}}, {{11383406077951765876ull, 377789318629571ull}}, {{5417376047619502378ull, 302231454903657ull}}, {{12357150490933114128ull, 483570327845851ull}}, {{6196371578004580979ull, 386856262276681ull}}, {{1267748447661754460ull, 309485009821345ull}}, {{2028397516258807136ull, 495176015714152ull}}, {{12690764457232776679ull, 396140812571321ull}}, {{6463262751044311020ull, 316912650057057ull}}, {{14030569216412807955ull, 507060240091291ull}}, {{7535106558388336041ull, 405648192073033ull}}, {{13406782876194489479ull, 324518553658426ull}}, {{14072154972427362520ull, 519229685853482ull}}, {{3879026348458069369ull, 415383748682786ull}}, {{17860616337734096788ull, 332306998946228ull}}, {{6440893251923092922ull, 531691198313966ull}}, {{1463365786796564015ull, 425352958651173ull}}, {{8549390258921071858ull, 340282366920938ull}}, {{9989675599531804650ull, 544451787073501ull}}, {{4302391664883533397ull, 435561429658801ull}}, {{18199308590874468010ull, 348449143727040ull}}, {{10672149671689597200ull, 557518629963265ull}}, {{8537719737351677760ull, 446014903970612ull}}, {{17898222234107073178ull, 356811923176489ull}}, {{18007926602027568865ull, 285449538541191ull}}, {{2987240860050737922ull, 456719261665907ull}}, {{13457839132266321307ull, 365375409332725ull}}, {{10766271305813057046ull, 292300327466180ull}}, {{17226034089300891273ull, 467680523945888ull}}, {{2712780827214982049ull, 374144419156711ull}}, {{16927619920739626932ull, 299315535325368ull}}, {{4948098984731941152ull, 478904856520590ull}}, {{3958479187785552922ull, 383123885216472ull}} }; static const int exponents_binary32[] = { -27, -24, -21, -17, -14, -11, -7, -4, -1, 3, 6, 9, 13, 16, 19, 23, 26, 29, 33, 36, 39, 43, 46, 49, 52, 56, 59, 62, 66, 69, 72, 76, 79, 82, 86, 89, 92, 96, 99, 102, 106, 109, 112, 116, 119, 122, 126, 129, 132, 136, 139, 142, 145, 149, 152, 155, 159, 162, 165, 169, 172, 175, 179, 182, 185, 189, 192, 195, 199, 202, 205, 209, 212, 215, 219, 222, 225, 229, 232, 235, 238, 242, 245, 248, 252, 255, 258, 262, 265, 268, 272, 275, 278, 282, 285, 288, 292, 295, 298, 302, 305, 308, 312, 315, 318, 322, 325, 328, 332, 335, 338, 341, 345, 348, 351, 355, 358, 361, 365, 368, }; static const UINT256 multipliers1_binary32[] = { {{6013890151484785128ull, 7481633477359093489ull, 655737588518723529ull, 651851512427ull}}, {{12129048707783369314ull, 13963727865126254765ull, 14654730040930568123ull, 814814390533ull}}, {{1326252829447047930ull, 12842973812980430553ull, 4483354495881046442ull, 1018517988167ull}}, {{12358123064472874716ull, 12638544651540156999ull, 9719625587566735882ull, 636573742604ull}}, {{10835967812163705491ull, 6574808777570420441ull, 12149531984458419853ull, 795717178255ull}}, {{18156645783632019768ull, 12830196990390413455ull, 10575228962145636912ull, 994646472819ull}}, {{18265432642411094211ull, 8018873118994008409ull, 4303675092127329118ull, 621654045512ull}}, {{8996732747731704052ull, 800219361887734704ull, 5379593865159161398ull, 777067556890ull}}, {{11245915934664630065ull, 10223646239214444188ull, 15947864368303727555ull, 971334446112ull}}, {{16252069496020169599ull, 4083935890295333665ull, 9967415230189829722ull, 607084028820ull}}, {{6480028814743048286ull, 14328291899723942890ull, 12459269037737287152ull, 758855036025ull}}, {{17323408055283586166ull, 17910364874654928612ull, 1739028241889445228ull, 948568795032ull}}, {{1603757997697465546ull, 1970606009804554575ull, 1086892651180903268ull, 592855496895ull}}, {{15839755552403995644ull, 2463257512255693218ull, 15193673869258292797ull, 741069371118ull}}, {{10576322403650218747ull, 7690757908747004427ull, 9768720299718090188ull, 926336713898ull}}, {{4304358493067692765ull, 14030095729821653575ull, 10717136205751194271ull, 578960446186ull}}, {{768762097907228052ull, 12925933643849679065ull, 4173048220334217031ull, 723700557733ull}}, {{5572638640811422969ull, 11545731036384710927ull, 9827996293845159193ull, 904625697166ull}}, {{10400428178148221212ull, 298552870099362473ull, 1530811665225836592ull, 565391060729ull}}, {{17612221241112664419ull, 373191087624203091ull, 6525200599959683644ull, 706738825911ull}}, {{17403590532963442619ull, 466488859530253864ull, 3544814731522216651ull, 883423532389ull}}, {{10877244083102151637ull, 16432456601702266329ull, 4521352216415079358ull, 552139707743ull}}, {{18208241122305077450ull, 11317198715273057103ull, 1040004252091461294ull, 690174634679ull}}, {{18148615384453958909ull, 4923126357236545571ull, 15135063370396490330ull, 862718293348ull}}, {{18074083212140060732ull, 15377279983400457772ull, 472085139286061296ull, 1078397866686ull}}, {{2072929970732762150ull, 9610799989625286108ull, 14130111267335952022ull, 673998666678ull}}, {{2591162463415952687ull, 2790127950176831827ull, 8439267047315164220ull, 842498333348ull}}, {{17074011134552104570ull, 3487659937721039783ull, 10549083809143955275ull, 1053122916685ull}}, {{17588785986736147213ull, 18320688525571507528ull, 8899020389928665998ull, 658201822928ull}}, {{3539238409710632400ull, 13677488620109608603ull, 11123775487410832498ull, 822752278660ull}}, {{18259106067420454212ull, 7873488738282234945ull, 13904719359263540623ull, 1028440348325ull}}, {{4494412264496702026ull, 11838459489067478697ull, 10996292608753406841ull, 642775217703ull}}, {{10229701349048265437ull, 963016306052184659ull, 9133679742514370648ull, 803469022129ull}}, {{8175440667882943892ull, 1203770382565230824ull, 16028785696570351214ull, 1004336277661ull}}, {{5109650417426839933ull, 14587414544385432977ull, 12323834069570163460ull, 627710173538ull}}, {{10998749040210937820ull, 18234268180481791221ull, 6181420550107928517ull, 784637716923ull}}, {{18360122318691060179ull, 8957777170320075314ull, 3115089669207522743ull, 980797146154ull}}, {{16086762467609300516ull, 12516139759091128927ull, 6558617061682089618ull, 612998216346ull}}, {{15496767066084237741ull, 6421802662009135351ull, 17421643363957387831ull, 766247770432ull}}, {{14759272814177909272ull, 3415567309084031285ull, 3330310131237183173ull, 957809713041ull}}, {{11530388518074887247ull, 4440572577391213505ull, 13610658878091709243ull, 598631070650ull}}, {{577927592311445347ull, 939029703311628978ull, 7789951560759860746ull, 748288838313ull}}, {{9945781527244082491ull, 10397159165994312030ull, 14349125469377213836ull, 935361047891ull}}, {{1604427436100163653ull, 15721596515601220827ull, 6662360409147064695ull, 584600654932ull}}, {{15840592350407368278ull, 15040309626074138129ull, 8327950511433830869ull, 730750818665ull}}, {{5965682382727046636ull, 4965328977310508950ull, 15021624157719676491ull, 913438523331ull}}, {{17563609544486567859ull, 797487601605374141ull, 7082672089361103855ull, 570899077082ull}}, {{8119453875326046112ull, 14831917557288881389ull, 18076712148556155626ull, 713623846352ull}}, {{14761003362584945544ull, 9316524909756325928ull, 4149146111985642917ull, 892029807941ull}}, {{9225627101615590965ull, 8128671077811397657ull, 4899059329204720775ull, 557518629963ull}}, {{16143719895446876610ull, 5549152828836859167ull, 1512138143078513065ull, 696898287454ull}}, {{15567963850881207859ull, 11548127054473461863ull, 11113544715702917139ull, 871122859317ull}}, {{14848268795174121920ull, 9823472799664439425ull, 56872839346482712ull, 1088903574147ull}}, {{2362638969342744344ull, 6139670499790274641ull, 16176446589087409359ull, 680564733841ull}}, {{7564984730105818334ull, 3062902106310455397ull, 6385500181077097987ull, 850705917302ull}}, {{14067916931059660821ull, 17663685688170232958ull, 17205247263201148291ull, 1063382396627ull}}, {{4180762063484900109ull, 8733960545892701647ull, 8447436530287023730ull, 664613997892ull}}, {{614266560928737233ull, 1694078645511101251ull, 10559295662858779663ull, 830767497365ull}}, {{14602891256443085253ull, 15952656362171040275ull, 17810805597000862482ull, 1038459371706ull}}, {{6820964026063234331ull, 14582096244784288076ull, 15743439516552926955ull, 649037107316ull}}, {{8526205032579042914ull, 13615934287552972191ull, 1232555321981607078ull, 811296384146ull}}, {{6046070272296415738ull, 7796545822586439431ull, 10764066189331784656ull, 1014120480182ull}}, {{10696322947826341692ull, 4872841139116524644ull, 2115855349904977506ull, 633825300114ull}}, {{13370403684782927115ull, 15314423460750431613ull, 11868191224235997690ull, 792281625142ull}}, {{2877946550696495182ull, 9919657289083263709ull, 5611866993440221305ull, 990352031428ull}}, {{4104559603399003441ull, 17729000851745509578ull, 12730788907754914123ull, 618970019642ull}}, {{14354071541103530109ull, 17549565046254499068ull, 6690114097838866846ull, 773712524553ull}}, {{17942589426379412636ull, 12713584270963348027ull, 12974328640725971462ull, 967140655691ull}}, {{8908275382273438946ull, 3334304150924704613ull, 5803112391240038212ull, 604462909807ull}}, {{15747030246269186586ull, 4167880188655880766ull, 2642204470622659861ull, 755578637259ull}}, {{10460415770981707425ull, 9821536254247238862ull, 17137813643560488538ull, 944473296573ull}}, {{1926073838436179237ull, 10750146177331912193ull, 13016976536438999288ull, 590295810358ull}}, {{7019278316472611950ull, 13437682721664890241ull, 7047848633693973302ull, 737869762948ull}}, {{13385783914018152841ull, 7573731365226336993ull, 8809810792117466628ull, 922337203685ull}}, {{1448585918620263670ull, 13956954140121236429ull, 7811974754287110594ull, 576460752303ull}}, {{6422418416702717491ull, 8222820638296769728ull, 5153282424431500339ull, 720575940379ull}}, {{8028023020878396864ull, 5666839779443574256ull, 1829917012111987520ull, 900719925474ull}}, {{5017514388048998040ull, 3541774862152233910ull, 5755384150997380104ull, 562949953421ull}}, {{15495265021916023358ull, 4427218577690292387ull, 11805916207174113034ull, 703687441776ull}}, {{14757395258967641293ull, 14757395258967641292ull, 14757395258967641292ull, 879609302220ull}}, {{0ull, 0ull, 0ull, 1099511627776ull}}, {{0ull, 0ull, 0ull, 687194767360ull}}, {{0ull, 0ull, 0ull, 858993459200ull}}, {{0ull, 0ull, 0ull, 1073741824000ull}}, {{0ull, 0ull, 0ull, 671088640000ull}}, {{0ull, 0ull, 0ull, 838860800000ull}}, {{0ull, 0ull, 0ull, 1048576000000ull}}, {{0ull, 0ull, 0ull, 655360000000ull}}, {{0ull, 0ull, 0ull, 819200000000ull}}, {{0ull, 0ull, 0ull, 1024000000000ull}}, {{0ull, 0ull, 0ull, 640000000000ull}}, {{0ull, 0ull, 0ull, 800000000000ull}}, {{0ull, 0ull, 0ull, 1000000000000ull}}, {{0ull, 0ull, 0ull, 625000000000ull}}, {{0ull, 0ull, 0ull, 781250000000ull}}, {{0ull, 0ull, 0ull, 976562500000ull}}, {{0ull, 0ull, 0ull, 610351562500ull}}, {{0ull, 0ull, 0ull, 762939453125ull}}, {{0ull, 0ull, 4611686018427387904ull, 953674316406ull}}, {{0ull, 0ull, 16717361816799281152ull, 596046447753ull}}, {{0ull, 0ull, 7061644215716937728ull, 745058059692ull}}, {{0ull, 0ull, 8827055269646172160ull, 931322574615ull}}, {{0ull, 0ull, 12434438571169939456ull, 582076609134ull}}, {{0ull, 0ull, 6319676177107648512ull, 727595761418ull}}, {{0ull, 0ull, 17122967258239336448ull, 909494701772ull}}, {{0ull, 0ull, 1478482499544809472ull, 568434188608ull}}, {{0ull, 0ull, 1848103124431011840ull, 710542735760ull}}, {{0ull, 0ull, 2310128905538764800ull, 888178419700ull}}, {{0ull, 0ull, 10667202602816503808ull, 555111512312ull}}, {{0ull, 0ull, 13334003253520629760ull, 693889390390ull}}, {{0ull, 0ull, 7444132030046011392ull, 867361737988ull}}, {{0ull, 0ull, 9305165037557514240ull, 1084202172485ull}}, {{0ull, 0ull, 8121571157687140352ull, 677626357803ull}}, {{0ull, 0ull, 5540277928681537536ull, 847032947254ull}}, {{0ull, 0ull, 16148719447706697728ull, 1058791184067ull}}, {{0ull, 0ull, 7787106645602992128ull, 661744490042ull}}, {{0ull, 0ull, 510511270148964352ull, 827180612553ull}}, {{0ull, 0ull, 5249825106113593344ull, 1033975765691ull}}, {{0ull, 0ull, 975297682107301888ull, 646234853557ull}}, {{0ull, 0ull, 5830808121061515264ull, 807793566946ull}} }; static const UINT256 multipliers2_binary32[] = { {{12230317112597168372ull, 12964188775534322552ull, 9551240831114137572ull, 325925756213ull}}, {{15287896390746460465ull, 16205235969417903190ull, 16550737057320059869ull, 407407195266ull}}, {{9886498451578299773ull, 6421486906490215276ull, 11465049284795299029ull, 509258994083ull}}, {{15402433569091213166ull, 6319272325770078499ull, 4859812793783367941ull, 318286871302ull}}, {{14641355942936628554ull, 12510776425639986028ull, 15298138029083985734ull, 397858589127ull}}, {{18301694928670785692ull, 6415098495195206727ull, 14510986517927594264ull, 497323236409ull}}, {{18356088358060322914ull, 4009436559497004204ull, 2151837546063664559ull, 310827022756ull}}, {{4498366373865852026ull, 400109680943867352ull, 2689796932579580699ull, 388533778445ull}}, {{5622957967332315033ull, 14335195156461997902ull, 7973932184151863777ull, 485667223056ull}}, {{17349406784864860608ull, 2041967945147666832ull, 4983707615094914861ull, 303542014410ull}}, {{3240014407371524143ull, 7164145949861971445ull, 15453006555723419384ull, 379427518012ull}}, {{8661704027641793083ull, 8955182437327464306ull, 869514120944722614ull, 474284397516ull}}, {{10025251035703508581ull, 985303004902277287ull, 9766818362445227442ull, 296427748447ull}}, {{7919877776201997822ull, 10455000792982622417ull, 7596836934629146398ull, 370534685559ull}}, {{14511533238679885182ull, 3845378954373502213ull, 4884360149859045094ull, 463168356949ull}}, {{11375551283388622191ull, 16238419901765602595ull, 5358568102875597135ull, 289480223093ull}}, {{9607753085808389834ull, 15686338858779615340ull, 11309896147021884323ull, 361850278866ull}}, {{12009691357260487293ull, 14996237555047131271ull, 4913998146922579596ull, 452312848583ull}}, {{14423586125928886414ull, 149276435049681236ull, 9988777869467694104ull, 282695530364ull}}, {{18029482657411108018ull, 186595543812101545ull, 12485972336834617630ull, 353369412955ull}}, {{8701795266481721310ull, 9456616466619902740ull, 10995779402615884133ull, 441711766194ull}}, {{14661994078405851627ull, 8216228300851133164ull, 11484048145062315487ull, 276069853871ull}}, {{18327492598007314533ull, 5658599357636528551ull, 9743374162900506455ull, 345087317339ull}}, {{18297679729081755263ull, 2461563178618272785ull, 7567531685198245165ull, 431359146674ull}}, {{9037041606070030366ull, 7688639991700228886ull, 236042569643030648ull, 539198933343ull}}, {{1036464985366381075ull, 4805399994812643054ull, 7065055633667976011ull, 336999333339ull}}, {{10518953268562752152ull, 1395063975088415913ull, 4219633523657582110ull, 421249166674ull}}, {{17760377604130828093ull, 10967202005715295699ull, 14497913941426753445ull, 526561458342ull}}, {{8794392993368073607ull, 9160344262785753764ull, 4449510194964332999ull, 329100911464ull}}, {{10992991241710092008ull, 6838744310054804301ull, 5561887743705416249ull, 411376139330ull}}, {{18352925070565002914ull, 13160116405995893280ull, 16175731716486546119ull, 514220174162ull}}, {{11470578169103126821ull, 15142601781388515156ull, 14721518341231479228ull, 321387608851ull}}, {{14338222711378908527ull, 481508153026092329ull, 13790211908111961132ull, 401734511064ull}}, {{4087720333941471946ull, 601885191282615412ull, 17237764885139951415ull, 502168138830ull}}, {{11778197245568195775ull, 7293707272192716488ull, 6161917034785081730ull, 313855086769ull}}, {{14722746556960244718ull, 18340506127095671418ull, 12314082311908740066ull, 392318858461ull}}, {{9180061159345530090ull, 13702260622014813465ull, 1557544834603761371ull, 490398573077ull}}, {{17266753270659426066ull, 6258069879545564463ull, 3279308530841044809ull, 306499108173ull}}, {{16971755569896894679ull, 12434273367859343483ull, 8710821681978693915ull, 383123885216ull}}, {{16603008443943730444ull, 10931155691396791450ull, 10888527102473367394ull, 478904856520ull}}, {{14988566295892219432ull, 11443658325550382560ull, 6805329439045854621ull, 299315535325ull}}, {{288963796155722674ull, 469514851655814489ull, 13118347817234706181ull, 374144419156ull}}, {{4972890763622041246ull, 5198579582997156015ull, 16397934771543382726ull, 467680523945ull}}, {{10025585754904857635ull, 17084170294655386221ull, 3331180204573532347ull, 292300327466ull}}, {{17143668212058459947ull, 16743526849891844872ull, 13387347292571691242ull, 365375409332ull}}, {{2982841191363523318ull, 11706036525510030283ull, 16734184115714614053ull, 456719261665ull}}, {{18005176809098059738ull, 9622115837657462878ull, 3541336044680551927ull, 285449538541ull}}, {{13283098974517798864ull, 7415958778644440694ull, 9038356074278077813ull, 356811923176ull}}, {{7380501681292472772ull, 13881634491732938772ull, 11297945092847597266ull, 446014903970ull}}, {{13836185587662571291ull, 13287707575760474636ull, 11672901701457136195ull, 278759314981ull}}, {{17295231984578214113ull, 11997948451273205391ull, 756069071539256532ull, 348449143727ull}}, {{17007353962295379738ull, 14997435564091506739ull, 14780144394706234377ull, 435561429658ull}}, {{16647506434441836768ull, 4911736399832219712ull, 9251808456528017164ull, 544451787073ull}}, {{10404691521526147980ull, 12293207286749913128ull, 17311595331398480487ull, 340282366920ull}}, {{13005864401907684975ull, 10754823090010003506ull, 3192750090538548993ull, 425352958651ull}}, {{7033958465529830411ull, 18055214880939892287ull, 17825995668455349953ull, 531691198313ull}}, {{11313753068597225863ull, 4366980272946350823ull, 4223718265143511865ull, 332306998946ull}}, {{9530505317319144425ull, 10070411359610326433ull, 14503019868284165639ull, 415383748682ull}}, {{16524817665076318435ull, 7976328181085520137ull, 8905402798500431241ull, 519229685853ull}}, {{3410482013031617166ull, 16514420159246919846ull, 7871719758276463477ull, 324518553658ull}}, {{13486474553144297265ull, 6807967143776486095ull, 616277660990803539ull, 405648192073ull}}, {{12246407173002983677ull, 3898272911293219715ull, 5382033094665892328ull, 507060240091ull}}, {{5348161473913170846ull, 2436420569558262322ull, 1057927674952488753ull, 316912650057ull}}, {{15908573879246239366ull, 7657211730375215806ull, 5934095612117998845ull, 396140812571ull}}, {{10662345312203023399ull, 14183200681396407662ull, 2805933496720110652ull, 495176015714ull}}, {{2052279801699501721ull, 18087872462727530597ull, 6365394453877457061ull, 309485009821ull}}, {{7177035770551765055ull, 8774782523127249534ull, 12568429085774209231ull, 386856262276ull}}, {{18194666750044482126ull, 6356792135481674013ull, 15710536357217761539ull, 483570327845ull}}, {{13677509727991495281ull, 1667152075462352306ull, 12124928232474794914ull, 302231454903ull}}, {{7873515123134593293ull, 11307312131182716191ull, 10544474272166105738ull, 377789318629ull}}, {{5230207885490853713ull, 4910768127123619431ull, 17792278858635020077ull, 472236648286ull}}, {{10186408956072865427ull, 5375073088665956096ull, 6508488268219499644ull, 295147905179ull}}, {{12733011195091081783ull, 6718841360832445120ull, 3523924316846986651ull, 368934881474ull}}, {{15916263993863852229ull, 3786865682613168496ull, 13628277432913509122ull, 461168601842ull}}, {{9947664996164907643ull, 6978477070060618214ull, 13129359413998331105ull, 288230376151ull}}, {{3211209208351358746ull, 13334782356003160672ull, 11800013249070525977ull, 360287970189ull}}, {{4014011510439198432ull, 2833419889721787128ull, 914958506055993760ull, 450359962737ull}}, {{2508757194024499020ull, 1770887431076116955ull, 12101064112353465860ull, 281474976710ull}}, {{16971004547812787487ull, 2213609288845146193ull, 5902958103587056517ull, 351843720888ull}}, {{7378697629483820647ull, 7378697629483820646ull, 7378697629483820646ull, 439804651110ull}}, {{0ull, 0ull, 0ull, 549755813888ull}}, {{0ull, 0ull, 0ull, 343597383680ull}}, {{0ull, 0ull, 0ull, 429496729600ull}}, {{0ull, 0ull, 0ull, 536870912000ull}}, {{0ull, 0ull, 0ull, 335544320000ull}}, {{0ull, 0ull, 0ull, 419430400000ull}}, {{0ull, 0ull, 0ull, 524288000000ull}}, {{0ull, 0ull, 0ull, 327680000000ull}}, {{0ull, 0ull, 0ull, 409600000000ull}}, {{0ull, 0ull, 0ull, 512000000000ull}}, {{0ull, 0ull, 0ull, 320000000000ull}}, {{0ull, 0ull, 0ull, 400000000000ull}}, {{0ull, 0ull, 0ull, 500000000000ull}}, {{0ull, 0ull, 0ull, 312500000000ull}}, {{0ull, 0ull, 0ull, 390625000000ull}}, {{0ull, 0ull, 0ull, 488281250000ull}}, {{0ull, 0ull, 0ull, 305175781250ull}}, {{0ull, 0ull, 9223372036854775808ull, 381469726562ull}}, {{0ull, 0ull, 2305843009213693952ull, 476837158203ull}}, {{0ull, 0ull, 17582052945254416384ull, 298023223876ull}}, {{0ull, 0ull, 3530822107858468864ull, 372529029846ull}}, {{0ull, 0ull, 13636899671677861888ull, 465661287307ull}}, {{0ull, 0ull, 6217219285584969728ull, 291038304567ull}}, {{0ull, 0ull, 3159838088553824256ull, 363797880709ull}}, {{0ull, 0ull, 8561483629119668224ull, 454747350886ull}}, {{0ull, 0ull, 739241249772404736ull, 284217094304ull}}, {{0ull, 0ull, 924051562215505920ull, 355271367880ull}}, {{0ull, 0ull, 1155064452769382400ull, 444089209850ull}}, {{0ull, 0ull, 5333601301408251904ull, 277555756156ull}}, {{0ull, 0ull, 6667001626760314880ull, 346944695195ull}}, {{0ull, 0ull, 3722066015023005696ull, 433680868994ull}}, {{0ull, 0ull, 13875954555633532928ull, 542101086242ull}}, {{0ull, 0ull, 13284157615698345984ull, 338813178901ull}}, {{0ull, 0ull, 2770138964340768768ull, 423516473627ull}}, {{0ull, 0ull, 17297731760708124672ull, 529395592033ull}}, {{0ull, 0ull, 3893553322801496064ull, 330872245021ull}}, {{0ull, 0ull, 9478627671929257984ull, 413590306276ull}}, {{0ull, 0ull, 11848284589911572480ull, 516987882845ull}}, {{0ull, 0ull, 9711020877908426752ull, 323117426778ull}}, {{0ull, 0ull, 2915404060530757632ull, 403896783473ull}} }; // ********************************************************************** static const UINT128 breakpoints_binary64[] = { {{5261314576080512960ull, 21426681862861333ull}}, {{4728754506986910400ull, 34282690980578133ull}}, {{11161701235073348928ull, 27426152784462506ull}}, {{5240012173316768832ull, 21940922227570005ull}}, {{8384019477306830144ull, 35105475564112008ull}}, {{14085913211329284736ull, 28084380451289606ull}}, {{7579381754321517504ull, 22467504361031685ull}}, {{12127010806914427968ull, 35948006977650696ull}}, {{6012259830789632064ull, 28758405582120557ull}}, {{15877854308857436608ull, 23006724465696445ull}}, {{12702283447085949312ull, 18405379572557156ull}}, {{12944955885853698240ull, 29448607316091450ull}}, {{10355964708682958592ull, 23558885852873160ull}}, {{8284771766946366848ull, 18847108682298528ull}}, {{9566286012372276672ull, 30155373891677645ull}}, {{7653028809897821312ull, 24124299113342116ull}}, {{2433074233176346752ull, 19299439290673693ull}}, {{203569958340244480ull, 30879102865077909ull}}, {{3852204781414105920ull, 24703282292062327ull}}, {{14149810269357015680ull, 19762625833649861ull}}, {{15260998801487404480ull, 31620201333839778ull}}, {{1140752596964192576ull, 25296161067071823ull}}, {{8291299707055174720ull, 20236928853657458ull}}, {{9576730716546369216ull, 32379086165851933ull}}, {{15040082202720916032ull, 25903268932681546ull}}, {{8342716947434822464ull, 20722615146145237ull}}, {{17037695930637626304ull, 33156184233832379ull}}, {{17319505559252011392ull, 26524947387065903ull}}, {{2787558003175878144ull, 21219957909652723ull}}, {{770743990339494720ull, 33951932655444357ull}}, {{11684641636497326720ull, 27161546124355485ull}}, {{9347713309197861376ull, 21729236899484388ull}}, {{11266992479974667904ull, 34766779039175021ull}}, {{5324245169237824000ull, 27813423231340017ull}}, {{15327442579615990144ull, 22250738585072013ull}}, {{2387815238934122304ull, 35601181736115222ull}}, {{12978298635373028800ull, 28480945388892177ull}}, {{3003941278814602368ull, 22784756311113742ull}}, {{13471199467277412864ull, 18227805048890993ull}}, {{17864570332901950336ull, 29164488078225589ull}}, {{17981005081063470592ull, 23331590462580471ull}}, {{10695455250108866112ull, 18665272370064377ull}}, {{2355333141206544512ull, 29864435792103004ull}}, {{5573615327707145920ull, 23891548633682403ull}}, {{11837589891649537408ull, 19113238906945922ull}}, {{4182748567671618560ull, 30581182251113476ull}}, {{18103594113104936128ull, 24464945800890780ull}}, {{14482875290483948864ull, 19571956640712624ull}}, {{12104554020548587264ull, 31315130625140199ull}}, {{13372992031180780160ull, 25052104500112159ull}}, {{14387742439686534400ull, 20041683600089727ull}}, {{8262992644530813824ull, 32066693760143564ull}}, {{10299742930366561344ull, 25653355008114851ull}}, {{4550445529551338752ull, 20522684006491881ull}}, {{18348759291507873024ull, 32836294410387009ull}}, {{18368356247948208704ull, 26269035528309607ull}}, {{7315987368874746304ull, 21015228422647686ull}}, {{4326882160715773504ull, 33624365476236298ull}}, {{10840203358056439424ull, 26899492380989038ull}}, {{16050860315928972160ull, 21519593904791230ull}}, {{7234632431776803904ull, 34431350247665969ull}}, {{9477054760163353472ull, 27545080198132775ull}}, {{7581643808130682752ull, 22036064158506220ull}}, {{12130630093009092416ull, 35257702653609952ull}}, {{2325806444923453248ull, 28206162122887962ull}}, {{12928691600164493568ull, 22564929698310369ull}}, {{14032302094873505216ull, 18051943758648295ull}}, {{4004939278088056704ull, 28883110013837273ull}}, {{10582649051954265984ull, 23106488011069818ull}}, {{15844816871047233408ull, 18485190408855854ull}}, {{14283660549449842560ull, 29576304654169367ull}}, {{4048230810076053376ull, 23661043723335494ull}}, {{6927933462802753024ull, 18928834978668395ull}}, {{11084693540484404864ull, 30286135965869432ull}}, {{1489057202903703232ull, 24228908772695546ull}}, {{15948641021290603904ull, 19383127018156436ull}}, {{18139128004581145600ull, 31013003229050298ull}}, {{3443255959439185472ull, 24810402583240239ull}}, {{6443953582293258688ull, 19848322066592191ull}}, {{2931628102185393280ull, 31757315306547506ull}}, {{17102697740715955904ull, 25405852245238004ull}}, {{17371507007314675072ull, 20324681796190403ull}}, {{5658318323252018176ull, 32519490873904646ull}}, {{837305843859704192ull, 26015592699123717ull}}, {{11737891119313494336ull, 20812474159298973ull}}, {{15091276976159680640ull, 33299958654878357ull}}, {{4694323951443923840ull, 26639966923902686ull}}, {{66110346413228736ull, 21311973539122149ull}}, {{7484474183744986688ull, 34099157662595438ull}}, {{13366276976479809984ull, 27279326130076350ull}}, {{10693021581183848000ull, 21823460904061080ull}}, {{17108834529894156800ull, 34917537446497728ull}}, {{2619021179689594432ull, 27934029957198183ull}}, {{9473914573235496192ull, 22347223965758546ull}}, {{7779565687692973312ull, 35755558345213674ull}}, {{9913001364896288960ull, 28604446676170939ull}}, {{11619749906658941440ull, 22883557340936751ull}}, {{5606451110585242816ull, 18306845872749401ull}}, {{1591624147452567936ull, 29290953396399042ull}}, {{12341345762187785280ull, 23432762717119233ull}}, {{17251774239234048896ull, 18746210173695386ull}}, {{1777397079581105984ull, 29993936277912619ull}}, {{5111266478406795072ull, 23995149022330095ull}}, {{4089013182725436096ull, 19196119217864076ull}}, {{17610467536586428672ull, 30713790748582521ull}}, {{10399025214527232640ull, 24571032598866017ull}}, {{940522542137965440ull, 19656826079092814ull}}, {{8883533696904565376ull, 31450921726548502ull}}, {{18174873401749383296ull, 25160737381238801ull}}, {{10850549906657596288ull, 20128589904991041ull}}, {{9982182221168333440ull, 32205743847985666ull}}, {{4296396962192756416ull, 25764595078388533ull}}, {{10815815199238025792ull, 20611676062710826ull}}, {{9926606689297020608ull, 32978681700337322ull}}, {{562587721953795840ull, 26382945360269858ull}}, {{7828767807046857280ull, 21106356288215886ull}}, {{5147330861791151040ull, 33770170061145418ull}}, {{11496562318916741504ull, 27016136048916334ull}}, {{12886598669875303488ull, 21612908839133067ull}}, {{5861162612832844352ull, 34580654142612908ull}}, {{12067627719750096128ull, 27664523314090326ull}}, {{5964753361058166592ull, 22131618651272261ull}}, {{2164907748209245888ull, 35410589842035618ull}}, {{9110623828051217344ull, 28328471873628494ull}}, {{10977847877182884160ull, 22662777498902795ull}}, {{8782278301746307328ull, 18130221999122236ull}}, {{6672947653310271104ull, 29008355198595578ull}}, {{12717055752132037568ull, 23206684158876462ull}}, {{2794946972221809408ull, 18565347327101170ull}}, {{4471915155554895040ull, 29704555723361872ull}}, {{14645578568669646976ull, 23763644578689497ull}}, {{4337765225451896960ull, 19010915662951598ull}}, {{3251075545981124800ull, 30417465060722557ull}}, {{13668906881010630784ull, 24333972048578045ull}}, {{10935125504808504640ull, 19467177638862436ull}}, {{10117503178209786752ull, 31147484222179898ull}}, {{15472700172051650048ull, 24917987377743918ull}}, {{1310113693415589056ull, 19934389902195135ull}}, {{2096181909464942528ull, 31895023843512216ull}}, {{16434340786539595328ull, 25516019074809772ull}}, {{5768774999747855616ull, 20412815259847818ull}}, {{5540691184854658688ull, 32660504415756509ull}}, {{8121901762625637248ull, 26128403532605207ull}}, {{17565567854326240768ull, 20902722826084165ull}}, {{9658164493212433600ull, 33444356521734665ull}}, {{7726531594569946880ull, 26755485217387732ull}}, {{17249271719881688448ull, 21404388173910185ull}}, {{9152090678101149952ull, 34247021078256297ull}}, {{18389718986706650944ull, 27397616862605037ull}}, {{7333077559881500096ull, 21918093490084030ull}}, {{11732924095810400192ull, 35068949584134448ull}}, {{16765036906132140800ull, 28055159667307558ull}}, {{2343983080679981632ull, 22444127733846047ull}}, {{7439721743829880960ull, 35910604374153675ull}}, {{5951777395063904768ull, 28728483499322940ull}}, {{4761421916051123840ull, 22982786799458352ull}}, {{14877183977066630016ull, 18386229439566681ull}}, {{16424796733822787392ull, 29417967103306690ull}}, {{13139837387058229888ull, 23534373682645352ull}}, {{3133172280162763264ull, 18827498946116282ull}}, {{8702424463002331584ull, 30123998313786051ull}}, {{3272590755659954944ull, 24099198651028841ull}}, {{17375467863495605248ull, 19279358920823072ull}}, {{13043353322625327104ull, 30846974273316916ull}}, {{6745333843358351360ull, 24677579418653533ull}}, {{12774964704170501696ull, 19742063534922826ull}}, {{13061245897188982144ull, 31587301655876522ull}}, {{3070299088267365056ull, 25269841324701218ull}}, {{9834936900097712704ull, 20215873059760974ull}}, {{4667852595930609344ull, 32345396895617559ull}}, {{7423630891486397760ull, 25876317516494047ull}}, {{17006951157414849216ull, 20701054013195237ull}}, {{12453726592896117440ull, 33121686421112380ull}}, {{9962981274316893952ull, 26497349136889904ull}}, {{11659733834195425472ull, 21197879309511923ull}}, {{14966225319970770432ull, 33916606895219077ull}}, {{4594282626492795712ull, 27133285516175262ull}}, {{14743472545419967552ull, 21706628412940209ull}}, {{12521509628446217088ull, 34730605460704335ull}}, {{10017207702756973632ull, 27784484368563468ull}}, {{15392463791689399552ull, 22227587494850774ull}}, {{13559895622477308352ull, 35564139991761239ull}}, {{14537265312723756992ull, 28451311993408991ull}}, {{7940463435437095296ull, 22761049594727193ull}}, {{13731068377833496832ull, 18208839675781754ull}}, {{10901662960307864000ull, 29134143481250807ull}}, {{1342632738762470592ull, 23307314785000646ull}}, {{15831501449977617728ull, 18645851828000516ull}}, {{17951704690480367744ull, 29833362924800826ull}}, {{10672014937642383872ull, 23866690339840661ull}}, {{4848263135371996800ull, 19093352271872529ull}}, {{15135918646079015488ull, 30549363634996046ull}}, {{8419386102121302080ull, 24439490907996837ull}}, {{17803555325922772608ull, 19551592726397469ull}}, {{17417642077250705216ull, 31282548362235951ull}}, {{10244764847058653888ull, 25026038689788761ull}}, {{4506463062905012736ull, 20020830951831009ull}}, {{14589038530131841088ull, 32033329522929614ull}}, {{15360579638847383168ull, 25626663618343691ull}}, {{8599114896335996224ull, 20501330894674953ull}}, {{10069235019395683648ull, 32802129431479925ull}}, {{8055388015516546880ull, 26241703545183940ull}}, {{6444310412413237504ull, 20993362836147152ull}}, {{14000245474603090368ull, 33589380537835443ull}}, {{132149935456741312ull, 26871504430268355ull}}, {{105719948365393024ull, 21497203544214684ull}}, {{7547849546868449536ull, 34395525670743494ull}}, {{9727628452236669952ull, 27516420536594795ull}}, {{7782102761789335936ull, 22013136429275836ull}}, {{5072666789379116928ull, 35221018286841338ull}}, {{11436831060987114176ull, 28176814629473070ull}}, {{9149464848789691328ull, 22541451703578456ull}}, {{3630223064289842752ull, 18033161362862765ull}}, {{5808356902863748416ull, 28853058180580424ull}}, {{8336034337032909056ull, 23082446544464339ull}}, {{10358176284368237568ull, 18465957235571471ull}}, {{9194384425505359424ull, 29545531576914354ull}}, {{11044856355146197888ull, 23636425261531483ull}}, {{16214582713600778944ull, 18909140209225186ull}}, {{117890638567874048ull, 30254624334760299ull}}, {{3783661325596209536ull, 24203699467808239ull}}, {{6716277875218877952ull, 19362959574246591ull}}, {{3367346970866384128ull, 30980735318794546ull}}, {{17451272835660748544ull, 24784588255035636ull}}, {{10271669453786688512ull, 19827670604028509ull}}, {{5366624681832970688ull, 31724272966445615ull}}, {{4293299745466376576ull, 25379418373156492ull}}, {{14502686240598832192ull, 20303534698525193ull}}, {{1068205096506669632ull, 32485655517640310ull}}, {{854564077205335680ull, 25988524414112248ull}}, {{8062348891248089216ull, 20790819531289798ull}}, {{9210409411255032384ull, 33265311250063677ull}}, {{18436373973229756864ull, 26612249000050941ull}}, {{11059750363841895168ull, 21289799200040753ull}}, {{14006251767405121984ull, 34063678720065205ull}}, {{11205001413924097600ull, 27250942976052164ull}}, {{12653349945881188352ull, 21800754380841731ull}}, {{12866662283926080768ull, 34881207009346770ull}}, {{10293329827140864640ull, 27904965607477416ull}}, {{4545315046970781376ull, 22323972485981933ull}}, {{3583155260411339840ull, 35718355977571093ull}}, {{10245221837812892544ull, 28574684782056874ull}}, {{11885526284992224320ull, 22859747825645499ull}}, {{13197769842735689792ull, 18287798260516399ull}}, {{10048385304151372736ull, 29260477216826239ull}}, {{11728057058063008512ull, 23408381773460991ull}}, {{5693096831708496448ull, 18726705418768793ull}}, {{5419606115991684032ull, 29962728670030069ull}}, {{8025033707535257536ull, 23970182936024055ull}}, {{6420026966028206016ull, 19176146348819244ull}}, {{17650740775128950336ull, 30681834158110790ull}}, {{14120592620103160256ull, 24545467326488632ull}}, {{3917776466598707520ull, 19636373861190906ull}}, {{17336488790783663040ull, 31418198177905449ull}}, {{17558539847368840768ull, 25134558542324359ull}}, {{17736180692636982912ull, 20107646833859487ull}}, {{13620493849251531392ull, 32172234934175180ull}}, {{10896395079401225152ull, 25737787947340144ull}}, {{12406464878262890432ull, 20590230357872115ull}}, {{1403599731511073088ull, 32944368572595385ull}}, {{1122879785208858432ull, 26355494858076308ull}}, {{8277001457650907392ull, 21084395886461046ull}}, {{5864504702757631232ull, 33735033418337674ull}}, {{8380952576948015296ull, 26988026734670139ull}}, {{10394110876300322560ull, 21590421387736111ull}}, {{9251879772596695424ull, 34544674220377778ull}}, {{14780201447561177024ull, 27635739376302222ull}}, {{4445463528565120960ull, 22108591501041778ull}}, {{3423392830962283200ull, 35373746401666845ull}}, {{2738714264769826560ull, 28298997121333476ull}}, {{16948366670783502528ull, 22639197697066780ull}}, {{13558693336626802048ull, 18111358157653424ull}}, {{10625862894377152256ull, 28978173052245479ull}}, {{12190039130243632128ull, 23182538441796383ull}}, {{17130728933678726336ull, 18546030753437106ull}}, {{1583724590692589952ull, 29673649205499371ull}}, {{16024374931521713216ull, 23738919364399496ull}}, {{9130151130475460224ull, 18991135491519597ull}}, {{18297590623502646720ull, 30385816786431355ull}}, {{14638072498802117376ull, 24308653429145084ull}}, {{15399806813783604224ull, 19446922743316067ull}}, {{9882295643086125504ull, 31115076389305708ull}}, {{15284534143952721024ull, 24892061111444566ull}}, {{8538278500420266496ull, 19913648889155653ull}}, {{9971896785930516096ull, 31861838222649045ull}}, {{7977517428744412864ull, 25489470578119236ull}}, {{2692665128253619968ull, 20391576462495389ull}}, {{11686961834689612608ull, 32626522339992622ull}}, {{1970871838267869440ull, 26101217871994098ull}}, {{8955395100098116160ull, 20880974297595278ull}}, {{10639283345415075584ull, 33409558876152445ull}}, {{8511426676332060480ull, 26727647100921956ull}}, {{3119792526323738048ull, 21382117680737565ull}}, {{4991668042117980864ull, 34211388289180104ull}}, {{7682683248436295040ull, 27369110631344083ull}}, {{13524844228232856640ull, 21895288505075266ull}}, {{14261053135688750016ull, 35032461608120426ull}}, {{7719493693809089664ull, 28025969286496341ull}}, {{2486246140305361408ull, 22420775429197073ull}}, {{288645009746667968ull, 35873240686715317ull}}, {{11298962452023065344ull, 28698592549372253ull}}, {{16417867591102272896ull, 22958874039497802ull}}, {{5755596443397997696ull, 18367099231598242ull}}, {{12898303124178706624ull, 29387358770557187ull}}, {{2939944869859144640ull, 23509887016445750ull}}, {{2351955895887315712ull, 18807909613156600ull}}, {{3763129433419705152ull, 30092655381050560ull}}, {{3010503546735764096ull, 24074124304840448ull}}, {{9787100466872431936ull, 19259299443872358ull}}, {{11970011932253980800ull, 30814879110195773ull}}, {{16954707175287005248ull, 24651903288156618ull}}, {{2495719296003873216ull, 19721522630525295ull}}, {{3993150873606197184ull, 31554436208840472ull}}, {{14262567143110688704ull, 25243548967072377ull}}, {{4031356085004730304ull, 20194839173657902ull}}, {{10139518550749478848ull, 32311742677852643ull}}, {{15490312470083403712ull, 25849394142282114ull}}, {{16081598790808633280ull, 20679515313825691ull}}, {{18351860435809992640ull, 33087224502121106ull}}, {{10992139533906083776ull, 26469779601696885ull}}, {{8793711627124867008ull, 21175823681357508ull}}, {{10380589788657876928ull, 33881317890172013ull}}, {{15683169460410122176ull, 27105054312137610ull}}, {{12546535568328097728ull, 21684043449710088ull}}, {{16385108094583046080ull, 34694469519536141ull}}, {{9418737660924526528ull, 27755575615628913ull}}, {{14913687758223441856ull, 22204460492503130ull}}, {{5415156339447955392ull, 35527136788005009ull}}, {{8021473886300274624ull, 28421709430404007ull}}, {{17485225553265950656ull, 22737367544323205ull}}, {{13988180442612760512ull, 18189894035458564ull}}, {{11313042263954685888ull, 29103830456733703ull}}, {{16429131440647569344ull, 23283064365386962ull}}, {{5764607523034234816ull, 18626451492309570ull}}, {{9223372036854775744ull, 29802322387695312ull}}, {{18446744073709551552ull, 23841857910156249ull}}, {{18446744073709551552ull, 19073486328124999ull}}, {{18446744073709551552ull, 30517578124999999ull}}, {{18446744073709551552ull, 24414062499999999ull}}, {{18446744073709551552ull, 19531249999999999ull}}, {{18446744073709551552ull, 31249999999999999ull}}, {{18446744073709551552ull, 24999999999999999ull}}, {{18446744073709551552ull, 19999999999999999ull}}, {{18446744073709551552ull, 31999999999999999ull}}, {{18446744073709551552ull, 25599999999999999ull}}, {{18446744073709551552ull, 20479999999999999ull}}, {{18446744073709551552ull, 32767999999999999ull}}, {{18446744073709551552ull, 26214399999999999ull}}, {{18446744073709551552ull, 20971519999999999ull}}, {{18446744073709551552ull, 33554431999999999ull}}, {{18446744073709551552ull, 26843545599999999ull}}, {{18446744073709551552ull, 21474836479999999ull}}, {{18446744073709551552ull, 34359738367999999ull}}, {{18446744073709551552ull, 27487790694399999ull}}, {{18446744073709551552ull, 21990232555519999ull}}, {{18446744073709551552ull, 35184372088831999ull}}, {{18446744073709551552ull, 28147497671065599ull}}, {{18446744073709551552ull, 22517998136852479ull}}, {{18446744073709551552ull, 18014398509481983ull}}, {{7378697629483820608ull, 28823037615171174ull}}, {{9592306918328966784ull, 23058430092136939ull}}, {{11363194349405083776ull, 18446744073709551ull}}, {{10802413329564313408ull, 29514790517935282ull}}, {{1263233034167630080ull, 23611832414348226ull}}, {{15767981686301745344ull, 18889465931478580ull}}, {{6782026624373240960ull, 30223145490365729ull}}, {{9114970114240503040ull, 24178516392292583ull}}, {{14670673720876223104ull, 19342813113834066ull}}, {{16094380323918136320ull, 30948500982134506ull}}, {{9186155444392598720ull, 24758800785707605ull}}, {{7348924355514078976ull, 19807040628566084ull}}, {{690232524596795392ull, 31691265005705735ull}}, {{552186019677436352ull, 25353012004564588ull}}, {{7820446445225769728ull, 20282409603651670ull}}, {{12512714312361231552ull, 32451855365842672ull}}, {{2631473820405164608ull, 25961484292674138ull}}, {{9483876685807952320ull, 20769187434139310ull}}, {{15174202697292723712ull, 33230699894622896ull}}, {{8450013343092268608ull, 26584559915698317ull}}, {{17828057118699545856ull, 21267647932558653ull}}, {{6388798501467811456ull, 34028236692093846ull}}, {{1421689986432338880ull, 27222589353675077ull}}, {{12205398433371602048ull, 21778071482940061ull}}, {{12149939863910742656ull, 34844914372704098ull}}, {{17098649520612414784ull, 27875931498163278ull}}, {{2610873172264200832ull, 22300745198530623ull}}, {{488048260880811008ull, 35681192317648997ull}}, {{11458485052930379776ull, 28544953854119197ull}}, {{1788090412860483200ull, 22835963083295358ull}}, {{8809169959772207168ull, 18268770466636286ull}}, {{6715974306151710848ull, 29230032746618058ull}}, {{12751477074405189312ull, 23384026197294446ull}}, {{6511832844782241152ull, 18707220957835557ull}}, {{14108281366393496128ull, 29931553532536891ull}}, {{7597276278372886592ull, 23945242826029513ull}}, {{13456518652182129920ull, 19156194260823610ull}}, {{3083685769781856256ull, 30649910817317777ull}}, {{13534995060051216000ull, 24519928653854221ull}}, {{7138647233299062464ull, 19615942923083377ull}}, {{15111184388020410240ull, 31385508676933403ull}}, {{1020901066190597248ull, 25108406941546723ull}}, {{8195418482436298432ull, 20086725553237378ull}}, {{9423320757156167168ull, 32138760885179805ull}}, {{7538656605724933760ull, 25711008708143844ull}}, {{9720274099321857280ull, 20568806966515075ull}}, {{15552438558914971712ull, 32910091146424120ull}}, {{12441950847131977344ull, 26328072917139296ull}}, {{6264211862963671552ull, 21062458333711437ull}}, {{13712087795483784832ull, 33699933333938299ull}}, {{14659019051128938176ull, 26959946667150639ull}}, {{15416564055645060864ull, 21567957333720511ull}}, {{17287804859548276736ull, 34508731733952818ull}}, {{2762197443412890432ull, 27606985387162255ull}}, {{2209757954730312320ull, 22085588309729804ull}}, {{10914310357052320384ull, 35336941295567686ull}}, {{5042099470899945984ull, 28269553036454149ull}}, {{7723028391461867136ull, 22615642429163319ull}}, {{9867771527911404032ull, 18092513943330655ull}}, {{15788434444658246400ull, 28948022309329048ull}}, {{1562701111500866176ull, 23158417847463239ull}}, {{4939509703942603264ull, 18526734277970591ull}}, {{524517896824344576ull, 29642774844752946ull}}, {{15177009576427116928ull, 23714219875802356ull}}, {{8452258846399783232ull, 18971375900641885ull}}, {{13523614154239653184ull, 30354201441027016ull}}, {{7129542508649812224ull, 24283361152821613ull}}, {{13082331636403670400ull, 19426688922257290ull}}, {{2484986544536321088ull, 31082702275611665ull}}, {{1987989235629056832ull, 24866161820489332ull}}, {{12658437832728976448ull, 19892929456391465ull}}, {{1806756458656810688ull, 31828687130226345ull}}, {{1445405166925448576ull, 25462949704181076ull}}, {{15913719392508000128ull, 20370359763344860ull}}, {{7015206954303248640ull, 32592575621351777ull}}, {{16680212007668329856ull, 26074060497081421ull}}, {{9654820791392753536ull, 20859248397665137ull}}, {{690318007260764416ull, 33374797436264220ull}}, {{552254405808611520ull, 26699837949011376ull}}, {{15199198783614530496ull, 21359870359209100ull}}, {{5871973980073697216ull, 34175792574734561ull}}, {{1008230369317047424ull, 27340634059787649ull}}, {{4495933110195548288ull, 21872507247830119ull}}, {{14572190605796697920ull, 34996011596528190ull}}, {{11657752484637358336ull, 27996809277222552ull}}, {{1947504358226065984ull, 22397447421778042ull}}, {{6805355787903615936ull, 35835915874844867ull}}, {{16512331074548623680ull, 28668732699875893ull}}, {{2141818415413168000ull, 22934986159900715ull}}, {{1713454732330534400ull, 18347988927920572ull}}, {{6430876386470765376ull, 29356782284672915ull}}, {{5144701109176612288ull, 23485425827738332ull}}, {{15183807331567020800ull, 18788340662190665ull}}, {{5847347656797681664ull, 30061345059505065ull}}, {{4677878125438145344ull, 24049076047604052ull}}, {{14810348944576247232ull, 19239260838083241ull}}, {{16317860681838174912ull, 30782817340933186ull}}, {{9364939730728629632ull, 24626253872746549ull}}, {{11181300599324814016ull, 19701003098197239ull}}, {{6822034514693971456ull, 31521604957115583ull}}, {{12836325241238997824ull, 25217283965692466ull}}, {{6579711378249287936ull, 20173827172553973ull}}, {{6838189390456950400ull, 32278123476086357ull}}, {{16538597956591291264ull, 25822498780869085ull}}, {{13230878365273033024ull, 20657999024695268ull}}, {{17480056569694942528ull, 33052798439512429ull}}, {{17673394070497864320ull, 26442238751609943ull}}, {{3070668812172560448ull, 21153791001287955ull}}, {{4913070099476096768ull, 33846065602060728ull}}, {{11309153709064698048ull, 27076852481648582ull}}, {{1668625337767937792ull, 21661481985318866ull}}, {{13737846984654431488ull, 34658371176510185ull}}, {{10990277587723545152ull, 27726696941208148ull}}, {{16170919699662656768ull, 22181357552966518ull}}, {{3737378631008788928ull, 35490172084746430ull}}, {{2989902904807031104ull, 28392137667797144ull}}, {{6081271138587535232ull, 22713710134237715ull}}, {{4865016910870028160ull, 18170968107390172ull}}, {{11473375872133955392ull, 29073548971824275ull}}, {{9178700697707164352ull, 23258839177459420ull}}, {{7342960558165731456ull, 18607071341967536ull}}, {{4370039263581349696ull, 29771314147148058ull}}, {{10874729040348900416ull, 23817051317718446ull}}, {{5010434417537209984ull, 19053641054174757ull}}, {{11706043882801446336ull, 30485825686679611ull}}, {{5675486291499246720ull, 24388660549343689ull}}, {{8229737847941307712ull, 19510928439474951ull}}, {{5788882927222271680ull, 31217485503159922ull}}, {{15699152786003548288ull, 24973988402527937ull}}, {{5180624599319017984ull, 19979190722022350ull}}, {{8288999358910428800ull, 31966705155235760ull}}, {{6631199487128343040ull, 25573364124188608ull}}, {{12683657219186495104ull, 20458691299350886ull}}, {{12915153921214571520ull, 32733906078961418ull}}, {{17710820766455477824ull, 26187124863169134ull}}, {{17858005427906292608ull, 20949699890535307ull}}, {{13815413425682426880ull, 33519519824856492ull}}, {{3673633111062120832ull, 26815615859885194ull}}, {{6628255303591606976ull, 21452492687908155ull}}, {{10605208485746571200ull, 34323988300653048ull}}, {{15862864418081077632ull, 27459190640522438ull}}, {{1622245090239131136ull, 21967352512417951ull}}, {{13663638588608340736ull, 35147764019868721ull}}, {{7241562056144762304ull, 28118211215894977ull}}, {{16861296089141540800ull, 22494568972715981ull}}, {{1152632039433092992ull, 35991310356345571ull}}, {{15679500890514115712ull, 28793048285076456ull}}, {{8854251897669382208ull, 23034438628061165ull}}, {{7083401518135505792ull, 18427550902448932ull}}, {{15022791243758719616ull, 29484081443918291ull}}, {{8328884180265065344ull, 23587265155134633ull}}, {{14041804973695872896ull, 18869812124107706ull}}, {{15088190328429576000ull, 30191699398572330ull}}, {{12070552262743660800ull, 24153359518857864ull}}, {{13345790624936838976ull, 19322687615086291ull}}, {{13974567370415121728ull, 30916300184138066ull}}, {{7490305081590187072ull, 24733040147310453ull}}, {{13370941694755970304ull, 19786432117848362ull}}, {{6636111452641911168ull, 31658291388557380ull}}, {{5308889162113528960ull, 25326633110845904ull}}, {{7936460144432733440ull, 20261306488676723ull}}, {{9008987416350463232ull, 32418090381882757ull}}, {{18275236377306101568ull, 25934472305506205ull}}, {{14620189101844881216ull, 20747577844404964ull}}, {{12324256118726079040ull, 33196124551047943ull}}, {{17238102524464683840ull, 26556899640838354ull}}, {{17479830834313657408ull, 21245519712670683ull}}, {{5831636446450389952ull, 33992831540273094ull}}, {{8354657971902222272ull, 27194265232218475ull}}, {{6683726377521777792ull, 21755412185774780ull}}, {{10693962204034844480ull, 34808659497239648ull}}, {{15933867392711696256ull, 27846927597791718ull}}, {{1679047469943626048ull, 22277542078233375ull}}, {{2686475951909801664ull, 35644067325173400ull}}, {{2149180761527841344ull, 28515253860138720ull}}, {{1719344609222273024ull, 22812203088110976ull}}, {{16132870946345459712ull, 18249762470488780ull}}, {{7365849440443183936ull, 29199619952782049ull}}, {{9582028367096457472ull, 23359695962225639ull}}, {{11354971508419076288ull, 18687756769780511ull}}, {{10789256783986701440ull, 29900410831648818ull}}, {{16010103056673181824ull, 23920328665319054ull}}, {{16497431260080455744ull, 19136262932255243ull}}, {{4259797127677267328ull, 30618020691608390ull}}, {{3407837702141813824ull, 24494416553286712ull}}, {{13794316605939182016ull, 19595533242629369ull}}, {{11002860125276960320ull, 31352853188206991ull}}, {{5112939285479657920ull, 25082282550565593ull}}, {{11469049057867546944ull, 20065826040452474ull}}, {{7282432048362344192ull, 32105321664723959ull}}, {{9515294453431785664ull, 25684257331779167ull}}, {{233537933261607872ull, 20547405865423334ull}}, {{7752358322702393280ull, 32875849384677334ull}}, {{9891235472903824960ull, 26300679507741867ull}}, {{534290748839239296ull, 21040543606193494ull}}, {{8233562827626603520ull, 33664869769909590ull}}, {{6586850262101282816ull, 26931895815927672ull}}, {{16337526653906757248ull, 21545516652742137ull}}, {{11382647387283170304ull, 34472826644387420ull}}, {{9106117909826536256ull, 27578261315509936ull}}, {{3595545513119318656ull, 22062609052407949ull}}, {{13131570450474730496ull, 35300174483852718ull}}, {{17883953989863605056ull, 28240139587082174ull}}, {{17996512006632794368ull, 22592111669665739ull}}, {{18086558420048145792ull, 18073689335732591ull}}, {{3113051768883661056ull, 28917902937172147ull}}, {{13558487859332659776ull, 23134322349737717ull}}, {{3468092657982307200ull, 18507457879790174ull}}, {{12927645882255512128ull, 29611932607664278ull}}, {{17720814335288230336ull, 23689546086131422ull}}, {{6797953838746763648ull, 18951636868905138ull}}, {{7187377327252911552ull, 30322618990248221ull}}, {{2060553047060418880ull, 24258095192198577ull}}, {{12716488881874066048ull, 19406476153758861ull}}, {{12967684581514685120ull, 31050361846014178ull}}, {{17752845294695568704ull, 24840289476811342ull}}, {{6823578606272634304ull, 19872231581449074ull}}, {{18296423399520035584ull, 31795570530318518ull}}, {{3569092275390297472ull, 25436456424254815ull}}, {{2855273820312237952ull, 20349165139403852ull}}, {{8257786927241491136ull, 32558664223046163ull}}, {{13984927171277013504ull, 26046931378436930ull}}, {{11187941737021610816ull, 20837545102749544ull}}, {{6832660335008846336ull, 33340072164399271ull}}, {{1776779453265166784ull, 26672057731519417ull}}, {{12489470006837864384ull, 21337646185215533ull}}, {{16293803196198672704ull, 34140233896344853ull}}, {{1966996112733207168ull, 27312187117075883ull}}, {{8952294519670386368ull, 21849749693660706ull}}, {{6944973601988797568ull, 34959599509857130ull}}, {{5555978881591038080ull, 27967679607885704ull}}, {{8134131920014740736ull, 22374143686308563ull}}, {{9325262257281674880ull, 35798629898093701ull}}, {{3770860991083429568ull, 28638903918474961ull}}, {{17774084051834384960ull, 22911123134779968ull}}, {{3151220797241777024ull, 18328898507823975ull}}, {{5041953275586843200ull, 29326237612518360ull}}, {{4033562620469474560ull, 23460990090014688ull}}, {{10605547725859400320ull, 18768792072011750ull}}, {{16968876361375040512ull, 30030067315218800ull}}, {{13575101089100032384ull, 24024053852175040ull}}, {{10860080871280025920ull, 19219243081740032ull}}, {{2618734135080400192ull, 30750788930784052ull}}, {{13163033752290051072ull, 24600631144627241ull}}, {{6841078187090130560ull, 19680504915701793ull}}, {{7256376284602298560ull, 31488807865122869ull}}, {{9494449842423749184ull, 25191046292098295ull}}, {{7595559873938999360ull, 20152837033678636ull}}, {{4774198168818578304ull, 32244539253885818ull}}, {{11198056164538683264ull, 25795631403108654ull}}, {{12647793746372856960ull, 20636505122486923ull}}, {{16547121179454660800ull, 33018408195979077ull}}, {{5858999314079907968ull, 26414726556783262ull}}, {{15755245895489657344ull, 21131781245426609ull}}, {{14140346988557720832ull, 33810849992682575ull}}, {{11312277590846176640ull, 27048679994146060ull}}, {{9049822072676941312ull, 21638943995316848ull}}, {{10790366501541195776ull, 34622310392506957ull}}, {{1253595571749136000ull, 27697848314005566ull}}, {{15760271716366950080ull, 22158278651204452ull}}, {{10459039487219478848ull, 35453245841927124ull}}, {{12056580404517493376ull, 28362596673541699ull}}, {{13334613138355905024ull, 22690077338833359ull}}, {{14357039325426634368ull, 18152061871066687ull}}, {{8213867661714973696ull, 29043298993706700ull}}, {{6571094129371978944ull, 23234639194965360ull}}, {{5256875303497583168ull, 18587711355972288ull}}, {{4721651670854222720ull, 29740338169555661ull}}, {{87972521941467840ull, 23792270535644529ull}}, {{3759726832295084608ull, 19033816428515623ull}}, {{2326214116930225024ull, 30454106285624997ull}}, {{12929017737769910976ull, 24363285028499997ull}}, {{2964516560732108160ull, 19490628022799998ull}}, {{1053877682429462720ull, 31185004836479997ull}}, {{11911148590169301120ull, 24948003869183997ull}}, {{2150221242651620288ull, 19958403095347198ull}}, {{18197749247210233728ull, 31933444952555516ull}}, {{10868850583026276672ull, 25546755962044413ull}}, {{16073778095904841984ull, 20437404769635530ull}}, {{7271300879738195520ull, 32699847631416849ull}}, {{9506389518532466752ull, 26159878105133479ull}}, {{11294460429567883712ull, 20927902484106783ull}}, {{14381787872566703680ull, 33484643974570853ull}}, {{437383853827631936ull, 26787715179656683ull}}, {{7728604712545926208ull, 21430172143725346ull}}, {{4987069910589661312ull, 34288275429960554ull}}, {{7679004743213639360ull, 27430620343968443ull}}, {{13521901424054732096ull, 21944496275174754ull}}, {{10566995834261840448ull, 35111194040279607ull}}, {{1074899037925651712ull, 28088955232223686ull}}, {{15617314489308162624ull, 22471164185778948ull}}, {{2851610294441598336ull, 35953862697246318ull}}, {{9659985865037099264ull, 28763090157797054ull}}, {{11417337506771589760ull, 23010472126237643ull}}, {{16512567634901092416ull, 18408377700990114ull}}, {{15352061771616016960ull, 29453404321584183ull}}, {{1213602973067082560ull, 23562723457267347ull}}, {{12038928822679397056ull, 18850178765813877ull}}, {{4504890857319393984ull, 30160286025302204ull}}, {{7293261500597425472ull, 24128228820241763ull}}, {{13213306829961761024ull, 19302583056193410ull}}, {{2694546854229266048ull, 30884132889909457ull}}, {{13223683927609143808ull, 24707306311927565ull}}, {{10578947142087315072ull, 19765845049542052ull}}, {{2168920168372062784ull, 31625352079267284ull}}, {{5424484949439560576ull, 25300281663413827ull}}, {{15407634403777379392ull, 20240225330731061ull}}, {{17273517416559986432ull, 32384360529169698ull}}, {{2750767489022258176ull, 25907488423335759ull}} }; static const int exponents_binary64[] = { -55, -51, -48, -45, -41, -38, -35, -31, -28, -25, -22, -18, -15, -12, -8, -5, -2, 2, 5, 8, 12, 15, 18, 22, 25, 28, 32, 35, 38, 42, 45, 48, 52, 55, 58, 62, 65, 68, 71, 75, 78, 81, 85, 88, 91, 95, 98, 101, 105, 108, 111, 115, 118, 121, 125, 128, 131, 135, 138, 141, 145, 148, 151, 155, 158, 161, 164, 168, 171, 174, 178, 181, 184, 188, 191, 194, 198, 201, 204, 208, 211, 214, 218, 221, 224, 228, 231, 234, 238, 241, 244, 248, 251, 254, 258, 261, 264, 267, 271, 274, 277, 281, 284, 287, 291, 294, 297, 301, 304, 307, 311, 314, 317, 321, 324, 327, 331, 334, 337, 341, 344, 347, 351, 354, 357, 360, 364, 367, 370, 374, 377, 380, 384, 387, 390, 394, 397, 400, 404, 407, 410, 414, 417, 420, 424, 427, 430, 434, 437, 440, 444, 447, 450, 454, 457, 460, 463, 467, 470, 473, 477, 480, 483, 487, 490, 493, 497, 500, 503, 507, 510, 513, 517, 520, 523, 527, 530, 533, 537, 540, 543, 547, 550, 553, 556, 560, 563, 566, 570, 573, 576, 580, 583, 586, 590, 593, 596, 600, 603, 606, 610, 613, 616, 620, 623, 626, 630, 633, 636, 640, 643, 646, 649, 653, 656, 659, 663, 666, 669, 673, 676, 679, 683, 686, 689, 693, 696, 699, 703, 706, 709, 713, 716, 719, 723, 726, 729, 733, 736, 739, 743, 746, 749, 752, 756, 759, 762, 766, 769, 772, 776, 779, 782, 786, 789, 792, 796, 799, 802, 806, 809, 812, 816, 819, 822, 826, 829, 832, 836, 839, 842, 845, 849, 852, 855, 859, 862, 865, 869, 872, 875, 879, 882, 885, 889, 892, 895, 899, 902, 905, 909, 912, 915, 919, 922, 925, 929, 932, 935, 939, 942, 945, 948, 952, 955, 958, 962, 965, 968, 972, 975, 978, 982, 985, 988, 992, 995, 998, 1002, 1005, 1008, 1012, 1015, 1018, 1022, 1025, 1028, 1032, 1035, 1038, 1041, 1045, 1048, 1051, 1055, 1058, 1061, 1065, 1068, 1071, 1075, 1078, 1081, 1085, 1088, 1091, 1095, 1098, 1101, 1105, 1108, 1111, 1115, 1118, 1121, 1125, 1128, 1131, 1134, 1138, 1141, 1144, 1148, 1151, 1154, 1158, 1161, 1164, 1168, 1171, 1174, 1178, 1181, 1184, 1188, 1191, 1194, 1198, 1201, 1204, 1208, 1211, 1214, 1218, 1221, 1224, 1228, 1231, 1234, 1237, 1241, 1244, 1247, 1251, 1254, 1257, 1261, 1264, 1267, 1271, 1274, 1277, 1281, 1284, 1287, 1291, 1294, 1297, 1301, 1304, 1307, 1311, 1314, 1317, 1321, 1324, 1327, 1330, 1334, 1337, 1340, 1344, 1347, 1350, 1354, 1357, 1360, 1364, 1367, 1370, 1374, 1377, 1380, 1384, 1387, 1390, 1394, 1397, 1400, 1404, 1407, 1410, 1414, 1417, 1420, 1424, 1427, 1430, 1433, 1437, 1440, 1443, 1447, 1450, 1453, 1457, 1460, 1463, 1467, 1470, 1473, 1477, 1480, 1483, 1487, 1490, 1493, 1497, 1500, 1503, 1507, 1510, 1513, 1517, 1520, 1523, 1526, 1530, 1533, 1536, 1540, 1543, 1546, 1550, 1553, 1556, 1560, 1563, 1566, 1570, 1573, 1576, 1580, 1583, 1586, 1590, 1593, 1596, 1600, 1603, 1606, 1610, 1613, 1616, 1620, 1623, 1626, 1629, 1633, 1636, 1639, 1643, 1646, 1649, 1653, 1656, 1659, 1663, 1666, 1669, 1673, 1676, 1679, 1683, 1686, 1689, 1693, 1696, 1699, 1703, 1706, 1709, 1713, 1716, 1719, 1722, 1726, 1729, 1732, 1736, 1739, 1742, 1746, 1749, 1752, 1756, 1759, 1762, 1766, 1769, 1772, 1776, 1779, 1782, 1786, 1789, 1792, 1796, 1799, 1802, 1806, 1809, 1812, 1815, 1819, 1822, 1825, 1829, 1832, 1835, 1839, 1842, 1845, 1849, 1852, 1855, 1859, 1862, 1865, 1869, 1872, 1875, 1879, 1882, 1885, 1889, 1892, 1895, 1899, 1902, 1905, 1909, 1912, 1915, 1918, 1922, 1925, 1928, 1932, 1935, 1938, 1942, 1945, 1948, 1952, 1955, 1958, 1962, 1965, 1968, 1972, 1975, 1978, 1982, 1985, 1988, 1992, 1995, 1998, 2002, 2005, 2008, 2011, 2015, 2018, 2021, 2025, 2028, 2031, 2035, 2038, 2041, 2045, 2048, 2051, 2055, 2058, 2061, 2065, 2068, 2071, 2075, 2078, 2081, 2085, 2088, 2091, 2095, 2098, 2101, 2105, 2108, 2111, 2114, 2118, 2121, 2124, 2128, 2131, 2134, 2138, 2141, 2144, 2148, 2151, 2154, 2158, 2161, }; static const UINT256 multipliers1_binary64[] = { {{1837554224478941466ull, 10276842184138466546ull, 11651621577776737258ull, 7754513766366540701ull}}, {{5760157408726726321ull, 11034712383513929495ull, 9588106495324154738ull, 4846571103979087938ull}}, {{2588510742481019997ull, 4570018442537636061ull, 2761761082300417615ull, 6058213879973859923ull}}, {{7847324446528662900ull, 1100837034744657172ull, 17287259408157685731ull, 7572767349967324903ull}}, {{14127949815935190120ull, 16828924211211268396ull, 17722066157739635437ull, 4732979593729578064ull}}, {{17659937269918987650ull, 7201097208731921783ull, 3705838623464992681ull, 5916224492161972581ull}}, {{17463235568971346659ull, 13613057529342290133ull, 9243984297758628755ull, 7395280615202465726ull}}, {{13220365239820785614ull, 6202317946625237381ull, 1165804167671755068ull, 4622050384501541079ull}}, {{2690398494493818305ull, 7752897433281546727ull, 15292313264871857547ull, 5777562980626926348ull}}, {{17198056173399436594ull, 5079435773174545504ull, 668647507380270318ull, 7221953725783657936ull}}, {{3050826143039744126ull, 15572666753322957689ull, 835809384225337897ull, 9027442157229572420ull}}, {{13435981385468309839ull, 2815387693185766699ull, 9745752901995611994ull, 5642151348268482762ull}}, {{12183290713407999394ull, 12742606653336984182ull, 2958819090639739184ull, 7052689185335603453ull}}, {{6005741354905223435ull, 15928258316671230228ull, 8310209881727061884ull, 8815861481669504316ull}}, {{12976960383670540455ull, 731789411064743084ull, 14417253212934189486ull, 5509913426043440197ull}}, {{16221200479588175569ull, 10138108800685704663ull, 4186508460885573145ull, 6887391782554300247ull}}, {{15664814581057831557ull, 17284322019284518733ull, 621449557679578527ull, 8609239728192875309ull}}, {{12096352122374838675ull, 17720230289693906064ull, 2694248982763430531ull, 5380774830120547068ull}}, {{15120440152968548344ull, 17538601843689994676ull, 3367811228454288164ull, 6725968537650683835ull}}, {{453806117501133814ull, 3476508230902941730ull, 18044822090850023918ull, 8407460672063354793ull}}, {{4895314841865596538ull, 16007875699596502293ull, 4360484779140183092ull, 5254662920039596746ull}}, {{10730829570759383576ull, 1563100550786076250ull, 14673978010780004674ull, 6568328650049495932ull}}, {{4190164926594453662ull, 11177247725337371121ull, 18342472513475005842ull, 8210410812561869915ull}}, {{14148068125190003299ull, 11597465846763244854ull, 9158202311708184699ull, 5131506757851168697ull}}, {{8461713119632728315ull, 9885146290026668164ull, 16059438908062618778ull, 6414383447313960871ull}}, {{10577141399540910394ull, 3133060825678559397ull, 15462612616650885569ull, 8017979309142451089ull}}, {{8916556383926762949ull, 13487378062117569383ull, 2746603857765721624ull, 5011237068214031931ull}}, {{6534009461481065782ull, 16859222577646961729ull, 17268312877489315742ull, 6264046335267539913ull}}, {{12779197845278720131ull, 11850656185203926353ull, 7750333041579480966ull, 7830057919084424892ull}}, {{1069469625658118226ull, 2794974097325066067ull, 14067330187841951412ull, 4893786199427765557ull}}, {{15171895087354811494ull, 3493717621656332583ull, 3749104679520275553ull, 6117232749284706947ull}}, {{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull, 7646540936605883684ull}}, {{2053210247837747184ull, 17140985699504597031ull, 9270056306212873643ull, 4779088085378677302ull}}, {{16401570865079347692ull, 16814546105953358384ull, 2364198345911316246ull, 5973860106723346628ull}}, {{2055219507639632999ull, 11794810595586922173ull, 2955247932389145308ull, 7467325133404183285ull}}, {{3590355201488464576ull, 16595128659096602166ull, 4152872966956909769ull, 4667078208377614553ull}}, {{13711316038715356528ull, 6908852768588588995ull, 9802777227123525116ull, 5833847760472018191ull}}, {{12527459029966807756ull, 8636065960735736244ull, 7641785515477018491ull, 7292309700590022739ull}}, {{15659323787458509695ull, 6183396432492282401ull, 4940545875918885210ull, 9115387125737528424ull}}, {{2869548339520486704ull, 8476308788735064405ull, 3087841172449303256ull, 5697116953585955265ull}}, {{8198621442827996284ull, 10595385985918830506ull, 8471487483989016974ull, 7121396191982444081ull}}, {{1024904766680219546ull, 4020860445543762325ull, 15201045373413659122ull, 8901745239978055101ull}}, {{2946408488388831169ull, 7124723796892239357ull, 11806496367597230903ull, 5563590774986284438ull}}, {{8294696628913426865ull, 4294218727687911292ull, 5534748422641762821ull, 6954488468732855548ull}}, {{10368370786141783581ull, 9979459428037277019ull, 6918435528302203526ull, 8693110585916069435ull}}, {{4174388732124920786ull, 1625476124095910233ull, 2018179195975183252ull, 5433194116197543397ull}}, {{9829671933583538887ull, 2031845155119887791ull, 7134410013396366969ull, 6791492645246929246ull}}, {{7675403898552035704ull, 7151492462327247643ull, 18141384553600234519ull, 8489365806558661557ull}}, {{2491284427381328363ull, 11387211816595611633ull, 13644208355213840526ull, 5305853629099163473ull}}, {{7725791552654048358ull, 5010642733889738733ull, 3220202388735136946ull, 6632317036373954342ull}}, {{14268925459244948351ull, 15486675454216949224ull, 13248625022773696990ull, 8290396295467442927ull}}, {{8918078412028092720ull, 5067486140458205361ull, 15197919666874642475ull, 5181497684667151829ull}}, {{15759284033462503804ull, 1722671657145368797ull, 5162341528311139382ull, 6476872105833939787ull}}, {{5864046986545966042ull, 11376711608286486805ull, 1841240891961536323ull, 8096090132292424734ull}}, {{5970872375804922729ull, 4804601745965360301ull, 14985833612758123914ull, 5060056332682765458ull}}, {{12075276488183541315ull, 15229124219311476184ull, 9508919979092879084ull, 6325070415853456823ull}}, {{15094095610229426643ull, 589661200429793614ull, 7274463955438710952ull, 7906338019816821029ull}}, {{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull, 4941461262385513143ull}}, {{10639340690884892589ull, 5072358831263164165ull, 3953792708276222467ull, 6176826577981891429ull}}, {{17910861882033503640ull, 1728762520651567302ull, 9553926903772665988ull, 7721033222477364286ull}}, {{6582602657843551871ull, 10303848612262005372ull, 1359518296430528338ull, 4825645764048352679ull}}, {{8228253322304439839ull, 3656438728472730907ull, 15534455925820324135ull, 6032057205060440848ull}}, {{5673630634453161895ull, 18405606465873077346ull, 971325833565853552ull, 7540071506325551061ull}}, {{8157705164960614088ull, 11503504041170673341ull, 2912921655192352422ull, 4712544691453469413ull}}, {{14808817474628155514ull, 5156008014608565868ull, 8252838087417828432ull, 5890680864316836766ull}}, {{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull, 7363351080396045958ull}}, {{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull, 9204188850495057447ull}}, {{4661903025908358824ull, 7341007085979871558ull, 13535789341626496214ull, 5752618031559410904ull}}, {{15050750819240224337ull, 18399630894329615255ull, 16919736677033120267ull, 7190772539449263630ull}}, {{14201752505622892517ull, 18387852599484631165ull, 11926298809436624526ull, 8988465674311579538ull}}, {{11181938325228001776ull, 6880721856250506574ull, 12065622774325278233ull, 5617791046444737211ull}}, {{4754050869680226411ull, 13212588338740521122ull, 10470342449479209887ull, 7022238808055921514ull}}, {{15165935623955058822ull, 11904049404998263498ull, 3864556024994236551ull, 8777798510069901893ull}}, {{14090395783399299668ull, 14357559905764996542ull, 4721190524835091796ull, 5486124068793688683ull}}, {{8389622692394348777ull, 17946949882206245678ull, 1289802137616476841ull, 6857655085992110854ull}}, {{1263656328638160163ull, 8598629297475643386ull, 10835624708875371860ull, 8572068857490138567ull}}, {{5401471223826238006ull, 14597515347777052924ull, 13689794470688189268ull, 5357543035931336604ull}}, {{6751839029782797507ull, 18246894184721316155ull, 17112243088360236585ull, 6696928794914170755ull}}, {{3828112768801108980ull, 8973559675619481482ull, 16778617842022907828ull, 8371160993642713444ull}}, {{7004256498928081017ull, 14831846834116951734ull, 1263264114409541584ull, 5231975621026695903ull}}, {{17978692660514877079ull, 93064468936638051ull, 15414138198294090693ull, 6539969526283369878ull}}, {{17861679807216208444ull, 4728016604598185468ull, 10044300711012837558ull, 8174961907854212348ull}}, {{1940177842655354470ull, 16790068433156029630ull, 15501059981237799281ull, 5109351192408882717ull}}, {{11648594340173968895ull, 7152527486162873325ull, 5541266921265085390ull, 6386688990511103397ull}}, {{725684869935297407ull, 18164031394558367465ull, 11538269670008744641ull, 7983361238138879246ull}}, {{11982768089778030640ull, 4434990593957897809ull, 2599732525328077497ull, 4989600773836799529ull}}, {{1143402056940374587ull, 10155424260874760166ull, 7861351675087484775ull, 6237000967295999411ull}}, {{10652624608030244042ull, 8082594307666062303ull, 5215003575431968065ull, 7796251209119999264ull}}, {{13575419407659984382ull, 16580836488359758699ull, 3259377234644980040ull, 4872657005699999540ull}}, {{12357588241147592574ull, 2279301536740146758ull, 4074221543306225051ull, 6090821257124999425ull}}, {{6223613264579714909ull, 16684184976207347160ull, 9704462947560169217ull, 7613526571406249281ull}}, {{3889758290362321819ull, 3510086582488510119ull, 17594504388293575521ull, 4758454107128905800ull}}, {{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull, 5948067633911132251ull}}, {{4924825824084280865ull, 15860803826599919845ull, 18268041069853935943ull, 7435084542388915313ull}}, {{5383859149266369493ull, 16830531419266031759ull, 4499996641017628108ull, 4646927838993072071ull}}, {{2118137918155573962ull, 2591420200372988083ull, 1013309782844647232ull, 5808659798741340089ull}}, {{16482730452976631164ull, 3239275250466235103ull, 5878323246983196944ull, 7260824748426675111ull}}, {{15991727047793401051ull, 4049094063082793879ull, 2736218040301608276ull, 9076030935533343889ull}}, {{16912358432511957513ull, 11754055826281521982ull, 13239351321256974932ull, 5672519334708339930ull}}, {{11917076003785171083ull, 14692569782851902478ull, 7325817114716442857ull, 7090649168385424913ull}}, {{5672972967876688046ull, 4530654173282714386ull, 13768957411822941476ull, 8863311460481781141ull}}, {{8157294123350317933ull, 12055030895156472299ull, 10911441391603032374ull, 5539569662801113213ull}}, {{5584931635760509512ull, 5845416582090814566ull, 18250987757931178372ull, 6924462078501391516ull}}, {{16204536581555412698ull, 7306770727613518207ull, 4366990623704421349ull, 8655577598126739396ull}}, {{17045364391113214793ull, 6872574713972142831ull, 11952741176670039151ull, 5409735998829212122ull}}, {{16695019470464130587ull, 3979032374037790635ull, 5717554433982773131ull, 6762169998536515153ull}}, {{16257088319652775329ull, 362104449119850390ull, 11758629060905854318ull, 8452712498170643941ull}}, {{5548994181355596677ull, 14061373335982070206ull, 9654986172279852900ull, 5282945311356652463ull}}, {{16159614763549271654ull, 17576716669977587757ull, 7457046696922428221ull, 6603681639195815579ull}}, {{6364460399154425855ull, 8135837782189820985ull, 4709622352725647373ull, 8254602048994769474ull}}, {{15507002795539985920ull, 7390741623082332067ull, 7555199988880917512ull, 5159126280621730921ull}}, {{14772067475997594496ull, 9238427028852915084ull, 14055686004528534794ull, 6448907850777163651ull}}, {{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull, 8061134813471454564ull}}, {{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull, 5038209258419659102ull}}, {{9237700373798089483ull, 4698445753088498727ull, 12429219171114694412ull, 6297761573024573878ull}}, {{6935439448820223949ull, 5873057191360623409ull, 6313151927038592207ull, 7872201966280717348ull}}, {{15863864701581109728ull, 10588189772241471486ull, 13169091991253895937ull, 4920126228925448342ull}}, {{10606458840121611352ull, 17846923233729227262ull, 7237992952212594113ull, 6150157786156810428ull}}, {{4034701513297238382ull, 8473595986879370366ull, 9047491190265742642ull, 7687697232696013035ull}}, {{16356746501092937701ull, 9907683510226994382ull, 3348838984702395199ull, 4804810770435008147ull}}, {{11222561089511396318ull, 7772918369356355074ull, 18021106786160157711ull, 6006013463043760183ull}}, {{4804829325034469590ull, 5104461943268055939ull, 17914697464272809235ull, 7507516828804700229ull}}, {{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull, 4692198018002937643ull}}, {{10094841185520837735ull, 1105557131661051262ull, 12266475137052861751ull, 5865247522503672054ull}}, {{3395179445046271361ull, 15217004469858477790ull, 6109721884461301380ull, 7331559403129590068ull}}, {{13467346343162615009ull, 574511513613545621ull, 7637152355576626726ull, 9164449253911987585ull}}, {{10722934473690328333ull, 14194127751290629725ull, 16302435268303861463ull, 5727780783694992240ull}}, {{18015354110540298320ull, 13130973670685899252ull, 1931300011670275213ull, 7159725979618740301ull}}, {{4072448564465821284ull, 2578659033075210354ull, 7025811033015231921ull, 8949657474523425376ull}}, {{7156966371218526206ull, 13140876941740476231ull, 4391131895634519950ull, 5593535921577140860ull}}, {{4334521945595769854ull, 7202724140320819481ull, 5488914869543149938ull, 6991919901971426075ull}}, {{10029838450422100221ull, 18226777212255800159ull, 2249457568501549518ull, 8739899877464282594ull}}, {{13186178059154894494ull, 6780049739232487195ull, 6017596998740856353ull, 5462437423415176621ull}}, {{11871036555516230214ull, 13086748192467996898ull, 12133682266853458345ull, 6828046779268970776ull}}, {{5615423657540511959ull, 2523377185302832411ull, 15167102833566822932ull, 8535058474086213470ull}}, {{1203796776749126023ull, 10800482777669046065ull, 4867753252551876428ull, 5334411546303883419ull}}, {{6116431989363795432ull, 13500603472086307581ull, 1473005547262457631ull, 6668014432879854274ull}}, {{12257226005132132194ull, 12264068321680496572ull, 11064628970932847847ull, 8335018041099817842ull}}, {{16884138290062358430ull, 14582571728691392213ull, 11527079125260417808ull, 5209386275687386151ull}}, {{7270114807295784325ull, 18228214660864240267ull, 9797162888148134356ull, 6511732844609232689ull}}, {{4475957490692342502ull, 4338524252370748718ull, 16858139628612555850ull, 8139666055761540861ull}}, {{16632531486964877776ull, 7323263676159105852ull, 12842180277096541358ull, 5087291284850963038ull}}, {{2343920284996545604ull, 18377451632053658124ull, 6829353309515900889ull, 6359114106063703798ull}}, {{2929900356245682005ull, 9136756484784908943ull, 17760063673749651920ull, 7948892632579629747ull}}, {{8748716750294633109ull, 5710472802990568089ull, 8794196786879838498ull, 4968057895362268592ull}}, {{15547581956295679290ull, 16361463040592985919ull, 10992745983599798122ull, 6210072369202835740ull}}, {{14822791426942211209ull, 11228456763886456591ull, 13740932479499747653ull, 7762590461503544675ull}}, {{16181773669479963862ull, 9323628486642729321ull, 6282239790473648331ull, 4851619038439715422ull}}, {{6392159031567791115ull, 7042849589876023748ull, 17076171774946836222ull, 6064523798049644277ull}}, {{7990198789459738893ull, 18026934024199805493ull, 7510156663401381565ull, 7580654747562055347ull}}, {{7299717252626030761ull, 13572676774338572385ull, 2388004905412169526ull, 4737909217226284592ull}}, {{13736332584209926355ull, 7742473931068439673ull, 2985006131765211908ull, 5922386521532855740ull}}, {{3335357674980244231ull, 9678092413835549592ull, 3731257664706514885ull, 7402983151916069675ull}}, {{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull, 4626864469947543547ull}}, {{16440806238860479518ull, 5831627441398752654ull, 13867799344317011026ull, 5783580587434429433ull}}, {{11327635761720823589ull, 16512906338603216626ull, 3499691125114100070ull, 7229475734293036792ull}}, {{4936172665296253678ull, 11417760886399244975ull, 4374613906392625088ull, 9036844667866295990ull}}, {{10002636943451240405ull, 7136100553999528109ull, 16569191746777554392ull, 5648027917416434993ull}}, {{17114982197741438410ull, 8920125692499410136ull, 6876431628189779278ull, 7060034896770543742ull}}, {{2946983673467246397ull, 1926785078769486863ull, 17818911572091999906ull, 8825043620963179677ull}}, {{8759393823558110854ull, 5815926692658317193ull, 13442662741771193893ull, 5515652263101987298ull}}, {{15560928297875026471ull, 11881594384250284395ull, 7579956390359216558ull, 6894565328877484123ull}}, {{14839474353916395185ull, 5628620943458079686ull, 4863259469521632794ull, 8618206661096855154ull}}, {{4662985452770359087ull, 8129574108088687708ull, 7651223186878408400ull, 5386379163185534471ull}}, {{5828731815962948858ull, 10161967635110859635ull, 4952342965170622596ull, 6732973953981918089ull}}, {{2674228751526298169ull, 12702459543888574544ull, 10802114724890666149ull, 8416217442477397611ull}}, {{1671392969703936356ull, 10244880224144053042ull, 4445478693842972391ull, 5260135901548373507ull}}, {{11312613248984696253ull, 8194414261752678398ull, 945162348876327585ull, 6575169876935466884ull}}, {{4917394524376094508ull, 14854703845618235902ull, 1181452936095409481ull, 8218962346169333605ull}}, {{16908429633017222779ull, 2366660875870315582ull, 3044251094273324878ull, 5136851466355833503ull}}, {{11912165004416752666ull, 12181698131692670286ull, 17640371923123819809ull, 6421064332944791878ull}}, {{5666834218666165025ull, 1392064609333674146ull, 12827092867049998954ull, 8026330416180989848ull}}, {{8153457405093741045ull, 5481726399260934245ull, 8016933041906249346ull, 5016456510113118655ull}}, {{14803507774794564210ull, 16075530035930943614ull, 5409480283955423778ull, 6270570637641398319ull}}, {{9281012681638429454ull, 10871040508058903710ull, 2150164336516891819ull, 7838213297051747899ull}}, {{1188946907596630505ull, 4488557308323120867ull, 17484753774818915051ull, 4898883310657342436ull}}, {{15321241689777951843ull, 999010616976513179ull, 3409198144814092198ull, 6123604138321678046ull}}, {{14539866093795051900ull, 10472135308075417282ull, 13484869717872391055ull, 7654505172902097557ull}}, {{13699102327049295341ull, 13462613595188217657ull, 10733886582883938361ull, 4784065733063810973ull}}, {{3288819853529455465ull, 2993208938703108360ull, 18029044247032310856ull, 5980082166329763716ull}}, {{4111024816911819331ull, 3741511173378885450ull, 4089561235080836954ull, 7475102707912204646ull}}, {{7181076528997274986ull, 6950130501789191310ull, 16391033827207686808ull, 4671939192445127903ull}}, {{18199717698101369540ull, 8687663127236489137ull, 15877106265582220606ull, 5839923990556409879ull}}, {{8914589067344548213ull, 1636206872190835614ull, 15234696813550387854ull, 7299904988195512349ull}}, {{1919864297325909458ull, 11268630627093320326ull, 5208312961655821105ull, 9124881235244390437ull}}, {{15034973241110857124ull, 125365114292243347ull, 5561038610248582143ull, 5703050772027744023ull}}, {{14182030532961183500ull, 13991764448147467896ull, 2339612244383339774ull, 7128813465034680029ull}}, {{17727538166201479375ull, 8266333523329559062ull, 7536201323906562622ull, 8911016831293350036ull}}, {{6468025335448536706ull, 554772433653586510ull, 13933497864296377447ull, 5569385519558343772ull}}, {{17308403706165446690ull, 14528523597349146849ull, 17416872330370471808ull, 6961731899447929715ull}}, {{7800446577424644651ull, 18160654496686433562ull, 17159404394535701856ull, 8702164874309912144ull}}, {{9486965129317790811ull, 11350409060429020976ull, 10724627746584813660ull, 5438853046443695090ull}}, {{11858706411647238513ull, 14188011325536276220ull, 4182412646376241267ull, 6798566308054618863ull}}, {{14823383014559048142ull, 13123328138492957371ull, 616329789542913680ull, 8498207885068273579ull}}, {{6958771374885711137ull, 8202080086558098357ull, 16526107182960178714ull, 5311379928167670986ull}}, {{13310150237034526825ull, 1029228071342847138ull, 11434261941845447585ull, 6639224910209588733ull}}, {{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull, 8299031137761985917ull}}, {{2328104340435295250ull, 15215603238322186527ull, 2591948866729097557ull, 5186894461101241198ull}}, {{16745188480826282774ull, 5184445992620569446ull, 12463308120266147755ull, 6483618076376551497ull}}, {{11708113564178077660ull, 1868871472348323904ull, 1744077095050520982ull, 8104522595470689372ull}}, {{7317570977611298537ull, 15003102725499866152ull, 10313420221261351421ull, 5065326622169180857ull}}, {{9146963722014123172ull, 4918820351592668978ull, 17503461295004077181ull, 6331658277711476071ull}}, {{2210332615662878157ull, 10760211457918224127ull, 17267640600327708572ull, 7914572847139345089ull}}, {{8298986912430380704ull, 15948504198053665887ull, 3874746347563736001ull, 4946608029462090681ull}}, {{5762047622110587976ull, 6100572192284918647ull, 9455118952882057906ull, 6183260036827613351ull}}, {{2590873509210847066ull, 16849087277210924117ull, 7207212672675184478ull, 7729075046034516689ull}}, {{3925138952470473368ull, 5918993529829439669ull, 16033722966490460059ull, 4830671903771572930ull}}, {{9518109709015479614ull, 2787055893859411682ull, 10818781671258299266ull, 6038339879714466163ull}}, {{2674265099414573710ull, 12707191904179040411ull, 8911791070645486178ull, 7547924849643082704ull}}, {{17812316751629966233ull, 12553680958539288160ull, 5569869419153428861ull, 4717453031026926690ull}}, {{3818651865827906175ull, 1857043142891946489ull, 16185708810796561885ull, 5896816288783658362ull}}, {{9385000850712270622ull, 6932989947042321015ull, 11008763976640926548ull, 7371020360979572953ull}}, {{7119565044962950374ull, 8666237433802901269ull, 18372640989228546089ull, 9213775451224466191ull}}, {{6755571162315537936ull, 16945613442195283053ull, 18400429645908923161ull, 5758609657015291369ull}}, {{13056149971321810324ull, 7346958747461940104ull, 9165479002103990240ull, 7198262071269114212ull}}, {{16320187464152262904ull, 9183698434327425130ull, 11456848752629987800ull, 8997827589086392765ull}}, {{14811803183522552219ull, 5739811521454640706ull, 9466373479607436327ull, 5623642243178995478ull}}, {{9291381942548414466ull, 2563078383390912979ull, 2609594812654519601ull, 7029552803973744348ull}}, {{7002541409758130179ull, 7815533997666029128ull, 3261993515818149501ull, 8786941004967180435ull}}, {{4376588381098831362ull, 7190551757754962157ull, 18179647011882201102ull, 5491838128104487771ull}}, {{10082421494800927106ull, 18211561734048478504ull, 18112872746425363473ull, 6864797660130609714ull}}, {{12603026868501158883ull, 8929394112278434418ull, 13417718896176928534ull, 8580997075163262143ull}}, {{12488577811240612206ull, 969185301746633607ull, 15303603337751662190ull, 5363123171977038839ull}}, {{10999036245623377353ull, 10434853664038067817ull, 14517818153762189833ull, 6703903964971298549ull}}, {{18360481325456609595ull, 17655253098474972675ull, 4312214636920573579ull, 8379879956214123187ull}}, {{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull, 5237424972633826992ull}}, {{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull, 6546781215792283740ull}}, {{16633120851708517460ull, 12485656897476221727ull, 608267404471350836ull, 8183476519740354675ull}}, {{17313229559958905269ull, 17026907597777414387ull, 16521068192290451936ull, 5114672824837721671ull}}, {{17029850931521243682ull, 2836890423512216368ull, 16039649221935677017ull, 6393341031047152089ull}}, {{2840569590692002986ull, 8157799047817658365ull, 6214503472137432559ull, 7991676288808940112ull}}, {{4081199003396195818ull, 12016153432527118334ull, 3884064670085895349ull, 4994797680505587570ull}}, {{14324870791100020581ull, 1185133735376734205ull, 14078452874462144995ull, 6243497100631984462ull}}, {{4071030433592862014ull, 15316475224503081469ull, 8374694056222905435ull, 7804371375789980578ull}}, {{4850237030209232711ull, 7266954006100731966ull, 9845869803566703801ull, 4877732109868737861ull}}, {{15286168324616316697ull, 13695378526053302861ull, 16919023272885767655ull, 6097165137335922326ull}}, {{5272652350488232159ull, 12507537139139240673ull, 11925407054252433761ull, 7621456421669902908ull}}, {{14824622765123614859ull, 899681684320943564ull, 16676751445762546909ull, 4763410263543689317ull}}, {{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull, 5954262829429611647ull}}, {{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull, 7442828536787014559ull}}, {{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull, 4651767835491884099ull}}, {{9305436863705329478ull, 15401676660084534608ull, 7278909286806688635ull, 5814709794364855124ull}}, {{11631796079631661847ull, 14640409806678280356ull, 9098636608508360794ull, 7268387242956068905ull}}, {{14539745099539577309ull, 9077140221493074637ull, 15984981779062838897ull, 9085484053695086131ull}}, {{11393183696425929770ull, 17202427684501641408ull, 7684770602700580358ull, 5678427533559428832ull}}, {{14241479620532412213ull, 12279662568772275952ull, 9605963253375725448ull, 7098034416949286040ull}}, {{17801849525665515266ull, 15349578210965344940ull, 12007454066719656810ull, 8872543021186607550ull}}, {{1902783916686171233ull, 14205172400280728492ull, 2892972773272397602ull, 5545339388241629719ull}}, {{2378479895857714042ull, 8533093463496134807ull, 17451274021872660715ull, 6931674235302037148ull}}, {{16808157925104306264ull, 6054680810942780604ull, 3367348453631274278ull, 8664592794127546436ull}}, {{1281726666335415607ull, 17619233562121401590ull, 11327964820374322231ull, 5415370496329716522ull}}, {{10825530369774045317ull, 17412355934224364083ull, 4936583988613126981ull, 6769213120412145653ull}}, {{8920226943790168742ull, 7930386862498291392ull, 10782416004193796631ull, 8461516400515182066ull}}, {{5575141839868855464ull, 11874020816702513976ull, 11350696021048510798ull, 5288447750321988791ull}}, {{6968927299836069330ull, 5619153984023366662ull, 9576684007883250594ull, 6610559687902485989ull}}, {{17934531161649862470ull, 16247314516883984135ull, 16582541028281451146ull, 8263199609878107486ull}}, {{18126611003672245900ull, 14766257591479877988ull, 5752402124248519062ull, 5164499756173817179ull}}, {{4211519680880755759ull, 9234449952495071678ull, 2578816636883260924ull, 6455624695217271474ull}}, {{14487771637955720506ull, 11543062440618839597ull, 12446892832958851963ull, 8069530869021589342ull}}, {{11360700282936019269ull, 4908571016173080796ull, 3167622002171894573ull, 5043456793138493339ull}}, {{14200875353670024086ull, 10747399788643738899ull, 17794585557997031928ull, 6304320991423116673ull}}, {{13139408173660142203ull, 13434249735804673624ull, 8408173892214126198ull, 7880401239278895842ull}}, {{8212130108537588877ull, 3784720066450533111ull, 9866794701061216778ull, 4925250774549309901ull}}, {{5653476617244598192ull, 13954272119917942197ull, 16945179394753908876ull, 6156563468186637376ull}}, {{11678531789983135644ull, 17442840149897427746ull, 2734730169732834479ull, 7695704335233296721ull}}, {{11910768387166847682ull, 17819304121326974197ull, 13238421402151491309ull, 4809815209520810450ull}}, {{1053402428676395890ull, 8439072096376554035ull, 7324654715834588329ull, 6012269011901013063ull}}, {{15151811091127658574ull, 15160526138898080447ull, 4544132376365847507ull, 7515336264876266329ull}}, {{16387410959595868465ull, 7169485827597606327ull, 14369297781297124452ull, 4697085165547666455ull}}, {{15872577681067447677ull, 8961857284497007909ull, 13349936208194017661ull, 5871356456934583069ull}}, {{6005664046052145885ull, 15814007624048647791ull, 2852362204960358364ull, 7339195571168228837ull}}, {{2895394039137794452ull, 1320765456351258123ull, 8177138774627835860ull, 9173994463960286046ull}}, {{17950522338956979196ull, 10048850447074312134ull, 499025715715009508ull, 5733746539975178779ull}}, {{13214780886841448187ull, 12561063058842890168ull, 14458840199925925597ull, 7167183174968973473ull}}, {{16518476108551810234ull, 1866270768271448998ull, 4238492194625243285ull, 8958978968711216842ull}}, {{5712361549417493492ull, 3472262239383349576ull, 7260743640068164957ull, 5599361855444510526ull}}, {{7140451936771866865ull, 8952013817656574874ull, 18299301586939982004ull, 6999202319305638157ull}}, {{18148936957819609390ull, 11190017272070718592ull, 9039068928392813793ull, 8749002899132047697ull}}, {{11343085598637255869ull, 76231767403117264ull, 17178633126313978381ull, 5468126811957529810ull}}, {{14178856998296569836ull, 4706975727681284484ull, 12249919371037697168ull, 6835158514946912263ull}}, {{17723571247870712295ull, 5883719659601605605ull, 10700713195369733556ull, 8543948143683640329ull}}, {{13383075039132889136ull, 12900696824105779311ull, 18217160793174553232ull, 5339967589802275205ull}}, {{12117157780488723516ull, 16125871030132224139ull, 8936392936186027828ull, 6674959487252844007ull}}, {{10534761207183516491ull, 1710594713955728558ull, 6558805151805146882ull, 8343699359066055009ull}}, {{1972539736062309903ull, 5680807714649718253ull, 15628468265946686561ull, 5214812099416284380ull}}, {{7077360688505275283ull, 11712695661739535720ull, 1088841258723806585ull, 6518515124270355476ull}}, {{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull, 8148143905337944345ull}}, {{10140874056322134219ull, 503632201182659961ull, 12379872279446443655ull, 5092589940836215215ull}}, {{17287778588830055677ull, 14464598306760488663ull, 10863154330880666664ull, 6365737426045269019ull}}, {{16998037217610181693ull, 18080747883450610829ull, 8967256895173445426ull, 7957171782556586274ull}}, {{12929616270220057510ull, 15912153445584019672ull, 10216221577910791295ull, 4973232364097866421ull}}, {{16162020337775071888ull, 15278505788552636686ull, 17381962990815877023ull, 6216540455122333026ull}}, {{10979153385364064051ull, 14486446217263407954ull, 12504081701665070471ull, 7770675568902916283ull}}, {{11473656884279927936ull, 15971557913430711827ull, 5509208054326975092ull, 4856672230564322677ull}}, {{9730385086922522016ull, 1517703318078838168ull, 11498196086336106770ull, 6070840288205403346ull}}, {{12162981358653152520ull, 11120501184453323518ull, 5149373071065357654ull, 7588550360256754183ull}}, {{2990177330730832421ull, 2338627221855939295ull, 10135887197056930390ull, 4742843975160471364ull}}, {{17572779718695704238ull, 12146656064174699926ull, 12669858996321162987ull, 5928554968950589205ull}}, {{12742602611514854490ull, 10571634061790987004ull, 2002265690119290022ull, 7410693711188236507ull}}, {{17187498669051559864ull, 1995585270191978973ull, 17392317120820413928ull, 4631683569492647816ull}}, {{7649315281032286118ull, 2494481587739973717ull, 3293652327315965794ull, 5789604461865809771ull}}, {{14173330119717745552ull, 12341474021529742954ull, 17952123464427120954ull, 7237005577332262213ull}}, {{8493290612792406132ull, 6203470490057402885ull, 8605096275251737481ull, 9046256971665327767ull}}, {{7614149642208947785ull, 15406384102354346563ull, 12295714199673417781ull, 5653910607290829854ull}}, {{4906001034333796827ull, 5422922072660769492ull, 6146270712736996419ull, 7067388259113537318ull}}, {{6132501292917246033ull, 2166966572398573961ull, 16906210427776021332ull, 8834235323891921647ull}}, {{15362028354141748531ull, 10577726144603884533ull, 17483910545001095188ull, 5521397077432451029ull}}, {{5367477387395021951ull, 13222157680754855667ull, 8019830125969205273ull, 6901746346790563787ull}}, {{2097660715816389535ull, 2692639045661405872ull, 5413101639034118688ull, 8627182933488204734ull}}, {{1311037947385243460ull, 1682899403538378670ull, 17218246579678487892ull, 5391989333430127958ull}}, {{10862169471086330132ull, 2103624254422973337ull, 12299436187743334057ull, 6739986666787659948ull}}, {{18189397857285300569ull, 7241216336456104575ull, 15374295234679167571ull, 8424983333484574935ull}}, {{18285902688444394712ull, 2219917201071371407ull, 16526463549315561588ull, 5265614583427859334ull}}, {{18245692342128105486ull, 2774896501339214259ull, 11434707399789676177ull, 6582018229284824168ull}}, {{18195429409232743953ull, 8080306645101405728ull, 14293384249737095221ull, 8227522786606030210ull}}, {{11372143380770464971ull, 7356034662402072532ull, 13545051174513072417ull, 5142201741628768881ull}}, {{14215179225963081214ull, 13806729346429978569ull, 3096255912859176809ull, 6427752177035961102ull}}, {{3933915977171687805ull, 3423353627755309500ull, 13093691927928746820ull, 8034690221294951377ull}}, {{11682069522587080686ull, 11362968054201844245ull, 1266028427314384906ull, 5021681388309344611ull}}, {{767528847951687146ull, 4980338030897529499ull, 15417593589425144845ull, 6277101735386680763ull}}, {{14794469115221772644ull, 10837108557049299777ull, 14660305968354043152ull, 7846377169233350954ull}}, {{2329014169372526047ull, 6773192848155812361ull, 13774377248648664874ull, 4903985730770844346ull}}, {{7522953730143045462ull, 17689863097049541259ull, 7994599523956055284ull, 6129982163463555433ull}}, {{4792006144251418924ull, 3665584797602374958ull, 14604935423372457010ull, 7662477704329444291ull}}, {{16830061895439300539ull, 6902676516928872252ull, 6822241630394091679ull, 4789048565205902682ull}}, {{2590833295589574058ull, 4016659627733702412ull, 17751174074847390407ull, 5986310706507378352ull}}, {{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull, 7482888383134222941ull}}, {{8941617539820436589ull, 11784926618718307329ull, 4644732709119747947ull, 4676805239458889338ull}}, {{15788707943202933640ull, 10119472254970496257ull, 15029287923254460742ull, 5846006549323611672ull}}, {{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull, 7307508186654514591ull}}, {{16599405629006654981ull, 4282460352322930642ull, 14259890343230319102ull, 9134385233318143238ull}}, {{14986314536556547267ull, 16511595775483995363ull, 4300745446091561534ull, 5708990770823839524ull}}, {{14121207152268296180ull, 11416122682500218396ull, 5375931807614451918ull, 7136238463529799405ull}}, {{17651508940335370225ull, 5046781316270497187ull, 11331600777945452802ull, 8920298079412249256ull}}, {{8726350078495912439ull, 7765924341096448646ull, 7082250486215908001ull, 5575186299632655785ull}}, {{1684565561265114740ull, 14319091444797948712ull, 13464499126197272905ull, 6968982874540819731ull}}, {{2105706951581393425ull, 4063806250715272178ull, 12218937889319203228ull, 8711228593176024664ull}}, {{5927752863165758795ull, 11763250943551820919ull, 7636836180824502017ull, 5444517870735015415ull}}, {{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull, 6805647338418769269ull}}, {{8109192344089651141ull, 10309629067051791354ull, 10779635027931437426ull, 8507059173023461586ull}}, {{9679931233483419867ull, 11055204185334757500ull, 11348957910884536295ull, 5316911983139663491ull}}, {{12099914041854274834ull, 9207319213241058971ull, 9574511370178282465ull, 6646139978924579364ull}}, {{10513206533890455638ull, 16120835034978711618ull, 11968139212722853081ull, 8307674973655724205ull}}, {{11182440102108922678ull, 3157992869220612905ull, 9785930017165477128ull, 5192296858534827628ull}}, {{142992072353989635ull, 3947491086525766132ull, 12232412521456846410ull, 6490371073168534535ull}}, {{178740090442487044ull, 14157735895011983473ull, 10678829633393670108ull, 8112963841460668169ull}}, {{11640927602595024163ull, 18071956971237265478ull, 18203483566939513577ull, 5070602400912917605ull}}, {{5327787466389004395ull, 8754888158764418136ull, 8919296403392228260ull, 6338253001141147007ull}}, {{6659734332986255494ull, 10943610198455522670ull, 6537434485812897421ull, 7922816251426433759ull}}, {{17997392013398573396ull, 9145599383248395620ull, 11003425581274142744ull, 4951760157141521099ull}}, {{4049995943038665129ull, 11431999229060494526ull, 9142595958165290526ull, 6189700196426901374ull}}, {{14285866965653107219ull, 5066626999470842349ull, 2204872910851837350ull, 7737125245533626718ull}}, {{11234509862746885964ull, 17001699929951440180ull, 15213103624564562055ull, 4835703278458516698ull}}, {{14043137328433607455ull, 16640438894011912321ull, 9793007493850926761ull, 6044629098073145873ull}}, {{3718863605259845606ull, 6965490562232726690ull, 16852945385741046356ull, 7555786372591432341ull}}, {{6935975771714791408ull, 13576803638250229989ull, 12838933875301847924ull, 4722366482869645213ull}}, {{13281655733070877164ull, 16971004547812787486ull, 2213609288845146193ull, 5902958103587056517ull}}, {{7378697629483820647ull, 7378697629483820646ull, 7378697629483820646ull, 7378697629483820646ull}}, {{0ull, 0ull, 0ull, 9223372036854775808ull}}, {{0ull, 0ull, 0ull, 5764607523034234880ull}}, {{0ull, 0ull, 0ull, 7205759403792793600ull}}, {{0ull, 0ull, 0ull, 9007199254740992000ull}}, {{0ull, 0ull, 0ull, 5629499534213120000ull}}, {{0ull, 0ull, 0ull, 7036874417766400000ull}}, {{0ull, 0ull, 0ull, 8796093022208000000ull}}, {{0ull, 0ull, 0ull, 5497558138880000000ull}}, {{0ull, 0ull, 0ull, 6871947673600000000ull}}, {{0ull, 0ull, 0ull, 8589934592000000000ull}}, {{0ull, 0ull, 0ull, 5368709120000000000ull}}, {{0ull, 0ull, 0ull, 6710886400000000000ull}}, {{0ull, 0ull, 0ull, 8388608000000000000ull}}, {{0ull, 0ull, 0ull, 5242880000000000000ull}}, {{0ull, 0ull, 0ull, 6553600000000000000ull}}, {{0ull, 0ull, 0ull, 8192000000000000000ull}}, {{0ull, 0ull, 0ull, 5120000000000000000ull}}, {{0ull, 0ull, 0ull, 6400000000000000000ull}}, {{0ull, 0ull, 0ull, 8000000000000000000ull}}, {{0ull, 0ull, 0ull, 5000000000000000000ull}}, {{0ull, 0ull, 0ull, 6250000000000000000ull}}, {{0ull, 0ull, 0ull, 7812500000000000000ull}}, {{0ull, 0ull, 0ull, 4882812500000000000ull}}, {{0ull, 0ull, 0ull, 6103515625000000000ull}}, {{0ull, 0ull, 0ull, 7629394531250000000ull}}, {{0ull, 0ull, 0ull, 4768371582031250000ull}}, {{0ull, 0ull, 0ull, 5960464477539062500ull}}, {{0ull, 0ull, 0ull, 7450580596923828125ull}}, {{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}}, {{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}}, {{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}}, {{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}}, {{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}}, {{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}}, {{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}}, {{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}}, {{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}}, {{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}}, {{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}}, {{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}}, {{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}}, {{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}}, {{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}}, {{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}}, {{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}}, {{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}}, {{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}}, {{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}}, {{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}}, {{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}}, {{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}}, {{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}}, {{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}}, {{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}}, {{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}}, {{0ull, 9223372036854775808ull, 18445154669448718262ull, 7523163845262640050ull}}, {{0ull, 1152921504606846976ull, 16139907686832836818ull, 4701977403289150031ull}}, {{0ull, 10664523917613334528ull, 15563198590113658118ull, 5877471754111437539ull}}, {{0ull, 4107282860161892352ull, 14842312219214684744ull, 7346839692639296924ull}}, {{0ull, 5134103575202365440ull, 106146200308804314ull, 9183549615799121156ull}}, {{0ull, 7820500752928866304ull, 9289713412047778504ull, 5739718509874450722ull}}, {{0ull, 9775625941161082880ull, 2388769728204947322ull, 7174648137343063403ull}}, {{0ull, 2996160389596577792ull, 16821020215538347865ull, 8968310171678829253ull}}, {{0ull, 13401815289566330880ull, 12818980643925161367ull, 5605193857299268283ull}}, {{0ull, 12140583093530525696ull, 11412039786479063805ull, 7006492321624085354ull}}, {{0ull, 1340670811630993408ull, 5041677696244053949ull, 8758115402030106693ull}}, {{0ull, 3143762266483064832ull, 5456891569366227670ull, 5473822126268816683ull}}, {{0ull, 13153074869958606848ull, 2209428443280396683ull, 6842277657836020854ull}}, {{0ull, 11829657569020870656ull, 11985157590955271662ull, 8552847072295026067ull}}, {{0ull, 2781849962210656256ull, 5184880485133350837ull, 5345529420184391292ull}}, {{0ull, 8088998471190708224ull, 6481100606416688546ull, 6681911775230489115ull}}, {{0ull, 887876052133609472ull, 3489689739593472779ull, 8352389719038111394ull}}, {{0ull, 16695823597079363584ull, 6792742105673308390ull, 5220243574398819621ull}}, {{0ull, 11646407459494428672ull, 13102613650519023392ull, 6525304467998524526ull}}, {{0ull, 14558009324368035840ull, 7154895026294003432ull, 8156630584998155658ull}}, {{0ull, 9098755827730022400ull, 9083495409861140049ull, 5097894115623847286ull}}, {{0ull, 15985130803089915904ull, 2130997225471649253ull, 6372367644529809108ull}}, {{0ull, 6146355448580231168ull, 2663746531839561567ull, 7965459555662261385ull}}, {{0ull, 10759001183003726336ull, 13194056628468195739ull, 4978412222288913365ull}}, {{0ull, 8837065460327270016ull, 2657512730303080962ull, 6223015277861141707ull}}, {{0ull, 1822959788554311712ull, 17156948968161014915ull, 7778769097326427133ull}}, {{0ull, 17280250932342302484ull, 13028936114314328273ull, 4861730685829016958ull}}, {{0ull, 7765255610145714393ull, 7062798106038134534ull, 6077163357286271198ull}}, {{4611686018427387904ull, 483197475827367183ull, 18051869669402443976ull, 7596454196607838997ull}}, {{9799832789158199296ull, 301998422392104489ull, 13588261552590221437ull, 4747783872879899373ull}}, {{16861477004875137024ull, 4989184046417518515ull, 3150268885455613084ull, 5934729841099874217ull}}, {{16465160237666533376ull, 6236480058021898144ull, 8549522125246904259ull, 7418412301374842771ull}}, {{10290725148541583360ull, 1591957027049992388ull, 3037608319065621210ull, 4636507688359276732ull}}, {{12863406435676979200ull, 11213318320667266293ull, 3797010398832026512ull, 5795634610449095915ull}}, {{2244199989314060288ull, 14016647900834082867ull, 134576980112645236ull, 7244543263061369894ull}}, {{16640308041924739072ull, 17520809876042603583ull, 9391593261995582353ull, 9055679078826712367ull}}, {{17317721553844043776ull, 4032977144885545383ull, 12787274816388320827ull, 5659799424266695229ull}}, {{17035465923877666816ull, 429535412679543825ull, 2149035465203237322ull, 7074749280333369037ull}}, {{7459274349564919808ull, 9760291302704205590ull, 7297980349931434556ull, 8843436600416711296ull}}, {{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull, 5527147875260444560ull}}, {{9286322599418134528ull, 5319384571023966665ull, 5701547148383933247ull, 6908934844075555700ull}}, {{16219589267700056064ull, 2037544695352570427ull, 7126933935479916559ull, 8636168555094444625ull}}, {{7831400283098841088ull, 8190994462236438373ull, 15983548755743417609ull, 5397605346934027890ull}}, {{14400936372300939264ull, 14850429096222935870ull, 10756063907824496203ull, 6747006683667534863ull}}, {{8777798428521398272ull, 13951350351851281934ull, 8833393866353232350ull, 8433758354584418579ull}}, {{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull, 5271098971615261612ull}}, {{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull, 6588873714519077015ull}}, {{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull, 8236092143148846269ull}}, {{6186205317594251264ull, 3867513670791002824ull, 2563215182517940054ull, 5147557589468028918ull}}, {{7732756646992814080ull, 14057764125343529338ull, 12427391015002200875ull, 6434446986835036147ull}}, {{442573771886241792ull, 12960519138252023769ull, 10922552750325363190ull, 8043058733543795184ull}}, {{11805823653497370880ull, 3488638442980126951ull, 6826595468953351994ull, 5026911708464871990ull}}, {{10145593548444325696ull, 13584170090579934497ull, 17756616373046465800ull, 6283639635581089987ull}}, {{17293677953982795024ull, 16980212613224918121ull, 17584084447880694346ull, 7854549544476362484ull}}, {{3891019693598165034ull, 15224318901692961730ull, 1766680743070658158ull, 4909093465297726553ull}}, {{14087146653852482101ull, 9807026590261426354ull, 6820036947265710602ull, 6136366831622158191ull}}, {{8385561280460826818ull, 3035411200972007135ull, 3913360165654750349ull, 7670458539527697739ull}}, {{12158504827929098618ull, 4202975009821198411ull, 140007094320525016ull, 4794036587204811087ull}}, {{10586445016483985368ull, 5253718762276498014ull, 14010066923182819982ull, 5992545734006013858ull}}, {{4009684233750205902ull, 15790520489700398326ull, 8289211617123749169ull, 7490682167507517323ull}}, {{16341110701376042401ull, 2951546278421667097ull, 2874914251488649279ull, 4681676354692198327ull}}, {{6591330321437889289ull, 17524490903309247584ull, 17428700869642975310ull, 5852095443365247908ull}}, {{8239162901797361611ull, 12682241592281783672ull, 3339132013344167522ull, 7315119304206559886ull}}, {{10298953627246702013ull, 6629429953497453782ull, 13397287053534985211ull, 9143899130258199857ull}}, {{1825159998601800855ull, 1837550711722214662ull, 1455775380818283901ull, 5714936956411374911ull}}, {{11504822035107026876ull, 6908624408080156231ull, 15654777281305018588ull, 7143671195514218638ull}}, {{9769341525456395691ull, 8635780510100195289ull, 10345099564776497427ull, 8929588994392773298ull}}, {{17635053499478717067ull, 3091519809598928103ull, 11077373246412698796ull, 5580993121495483311ull}}, {{17432130855921008430ull, 3864399761998660129ull, 9235030539588485591ull, 6976241401869354139ull}}, {{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull, 8720301752336692674ull}}, {{9583626965064323420ull, 2442601561758029738ull, 8944249865963774832ull, 5450188595210432921ull}}, {{2756161669475628467ull, 3053251952197537173ull, 15791998350882106444ull, 6812735744013041151ull}}, {{8056888105271923487ull, 3816564940246921466ull, 15128311920175245151ull, 8515919680016301439ull}}, {{9647241084222340084ull, 9302882115295407772ull, 16372723977750610075ull, 5322449800010188399ull}}, {{12059051355277925104ull, 7016916625691871811ull, 15854218953760874690ull, 6653062250012735499ull}}, {{10462128175670018476ull, 17994517818969615572ull, 15206087673773705458ull, 8316327812515919374ull}}, {{15762202146648537356ull, 15858259655283397636ull, 4892118777681178007ull, 5197704882822449609ull}}, {{1256008609601120079ull, 15211138550676859142ull, 10726834490528860413ull, 6497131103528062011ull}}, {{10793382798856175906ull, 5178865133063910215ull, 8796857094733687613ull, 8121413879410077514ull}}, {{13663393276926191798ull, 5542633717378637836ull, 10109721702635942662ull, 5075883674631298446ull}}, {{17079241596157739747ull, 16151664183578073103ull, 3413780091440152519ull, 6344854593289123058ull}}, {{16737365976769786780ull, 15577894211045203475ull, 13490597151154966457ull, 7931068241611403822ull}}, {{8155010726267422785ull, 2818654854262170316ull, 3819937201044466132ull, 4956917651007127389ull}}, {{10193763407834278482ull, 3523318567827712895ull, 9386607519732970569ull, 6196147063758909236ull}}, {{8130518241365460198ull, 9015834228212029023ull, 11733259399666213211ull, 7745183829698636545ull}}, {{11999102928494494480ull, 3329053383418824187ull, 415758097150301401ull, 4840739893561647841ull}}, {{10387192642190730196ull, 8773002747700918138ull, 5131383639865264655ull, 6050924866952059801ull}}, {{3760618765883636937ull, 6354567416198759769ull, 11025915568258968723ull, 7563656083690074751ull}}, {{13879601774745742846ull, 1665761625910530903ull, 13808726257802937308ull, 4727285052306296719ull}}, {{12737816200004790653ull, 2082202032388163629ull, 12649221803826283731ull, 5909106315382870899ull}}, {{2087212194723824604ull, 16437810595767368249ull, 11199841236355466759ull, 7386382894228588624ull}}, {{12833722667770860138ull, 17191160649995687011ull, 6999900772722166724ull, 4616489308892867890ull}}, {{11430467316286187268ull, 3042206738785057148ull, 17973248002757484214ull, 5770611636116084862ull}}, {{14288084145357734085ull, 13026130460336097243ull, 13243187966592079459ull, 7213264545145106078ull}}, {{13248419163269779702ull, 11670977056992733650ull, 7330612921385323516ull, 9016580681431382598ull}}, {{12891947995471000218ull, 16517732697475234339ull, 18416691131147990909ull, 5635362925894614123ull}}, {{11503248975911362368ull, 6812107816561879212ull, 18409177895507600733ull, 7044203657368267654ull}}, {{14379061219889202960ull, 13126820789129736919ull, 13788100332529725108ull, 8805254571710334568ull}}, {{15904442290071833706ull, 17427635030060861382ull, 8617562707831078192ull, 5503284107318959105ull}}, {{10657180825735016325ull, 3337799713866525112ull, 15383639403216235645ull, 6879105134148698881ull}}, {{13321476032168770406ull, 8783935660760544294ull, 5394491198738130844ull, 8598881417685873602ull}}, {{3714236501678093600ull, 14713331824830115992ull, 7983243017638719681ull, 5374300886053671001ull}}, {{4642795627097617000ull, 4556606725755481278ull, 14590739790475787506ull, 6717876107567088751ull}}, {{15026866570726797057ull, 14919130444049127405ull, 13626738719667346478ull, 8397345134458860939ull}}, {{11697634615917942113ull, 4712770509103316724ull, 6210868690578397597ull, 5248340709036788087ull}}, {{14622043269897427641ull, 10502649154806533809ull, 3151899844795609092ull, 6560425886295985109ull}}, {{4442496032089620839ull, 13128311443508167262ull, 8551560824421899269ull, 8200532357869981386ull}}, {{16611618075338176737ull, 10511037661406298490ull, 9956411533691074947ull, 5125332723668738366ull}}, {{11541150557317945113ull, 8527111058330485209ull, 3222142380259067876ull, 6406665904585922958ull}}, {{591380141365267679ull, 10658888822913106512ull, 13251050012178610653ull, 8008332380732403697ull}}, {{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull, 5005207737957752311ull}}, {{9685387772296391182ull, 1986188617563206094ull, 15540529592745350965ull, 6256509672447190388ull}}, {{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull, 7820637090558987986ull}}, {{6413787692499708635ull, 9045699637415760105ull, 5223509716691223585ull, 4887898181599367491ull}}, {{12628920634052023698ull, 15918810565197088035ull, 1917701127436641577ull, 6109872726999209364ull}}, {{11174464774137641718ull, 6063455151214196332ull, 2397126409295801972ull, 7637340908749011705ull}}, {{16207412520690801882ull, 13013031506363648515ull, 13027419051878345992ull, 4773338067968132315ull}}, {{15647579632436114448ull, 16266289382954560644ull, 11672587796420544586ull, 5966672584960165394ull}}, {{1112730466835591444ull, 11109489691838424998ull, 5367362708670904925ull, 7458340731200206743ull}}, {{14530514597054408365ull, 9249274066612709575ull, 10272130720560397434ull, 4661462957000129214ull}}, {{13551457227890622552ull, 2338220546411111161ull, 3616791363845720985ull, 5826828696250161518ull}}, {{3104263479581114478ull, 7534461701441276856ull, 13744361241661927039ull, 7283535870312701897ull}}, {{3880329349476393097ull, 4806391108374208166ull, 3345393496795245087ull, 9104419837890877372ull}}, {{16260263898704909398ull, 9921523470374961959ull, 11314242972351803987ull, 5690262398681798357ull}}, {{15713643854953748843ull, 7790218319541314545ull, 307745660157591272ull, 7112827998352247947ull}}, {{5806996763410022342ull, 9737772899426643182ull, 14219740130479152802ull, 8891034997940309933ull}}, {{17464431032413427676ull, 10697794080569039892ull, 11193180590763164453ull, 5556896873712693708ull}}, {{3383794716807232979ull, 17983928619138687770ull, 13991475738453955566ull, 6946121092140867135ull}}, {{13453115432863817032ull, 13256538737068583904ull, 12877658654640056554ull, 8682651365176083919ull}}, {{8408197145539885645ull, 12897022729095252844ull, 14966065686791117202ull, 5426657103235052449ull}}, {{10510246431924857056ull, 6897906374514290247ull, 4872524053206732791ull, 6783321379043815562ull}}, {{8526122021478683416ull, 4010696949715474905ull, 15314027103363191797ull, 8479151723804769452ull}}, {{16858041309492646895ull, 4812528602785865767ull, 347894902747219065ull, 5299469827377980908ull}}, {{16460865618438420715ull, 10627346771909720113ull, 434868628434023831ull, 6624337284222476135ull}}, {{6741023967765862181ull, 8672497446459762238ull, 14378643840824693501ull, 8280421605278095168ull}}, {{18048198035135827576ull, 7726153913251045350ull, 8986652400515433438ull, 5175263503298809480ull}}, {{13336875507065008661ull, 434320354709030880ull, 11233315500644291798ull, 6469079379123511850ull}}, {{16671094383831260826ull, 9766272480241064408ull, 4818272338950588939ull, 8086349223904389813ull}}, {{10419433989894538017ull, 3798077290936971303ull, 5317263221057812039ull, 5053968264940243633ull}}, {{8412606468940784617ull, 135910595243826225ull, 11258265044749652953ull, 6317460331175304541ull}}, {{15127444104603368675ull, 4781574262482170685ull, 237773250654902479ull, 7896825413969130677ull}}, {{11760495574590799374ull, 9906012941692438534ull, 2454451290873008001ull, 4935515883730706673ull}}, {{5477247431383723409ull, 16994202195542936072ull, 7679750132018647905ull, 6169394854663383341ull}}, {{6846559289229654262ull, 7407694689146506378ull, 14211373683450697786ull, 7711743568329229176ull}}, {{8890785574195921818ull, 9241495199143954390ull, 8882108552156686116ull, 4819839730205768235ull}}, {{1890109930890126464ull, 11551868998929942988ull, 6490949671768469741ull, 6024799662757210294ull}}, {{2362637413612658080ull, 604778193380265023ull, 17337059126565362985ull, 7530999578446512867ull}}, {{8394177411148993156ull, 11907201416931135399ull, 8529818944889657913ull, 4706874736529070542ull}}, {{5881035745508853541ull, 1048943715881755537ull, 1438901644257296584ull, 5883593420661338178ull}}, {{11962980700313454830ull, 1311179644852194421ull, 11021999092176396538ull, 7354491775826672722ull}}, {{1118667820109654825ull, 10862346592920018835ull, 4554126828365719864ull, 9193114719783340903ull}}, {{16840068452064391930ull, 6788966620575011771ull, 9763858295369656771ull, 5745696699864588064ull}}, {{16438399546653102009ull, 3874522257291376810ull, 12204822869212070964ull, 7182120874830735080ull}}, {{11324627396461601703ull, 4843152821614221013ull, 15256028586515088705ull, 8977651093538418850ull}}, {{9383735132002195016ull, 14556185559577357893ull, 14146703884999318344ull, 5611031933461511781ull}}, {{16341354933430131674ull, 18195231949471697366ull, 3848321800966984218ull, 7013789916826889727ull}}, {{11203321629932888785ull, 13520667899984845900ull, 198716232781342369ull, 8767237396033612159ull}}, {{16225448055562831299ull, 1532888409849446831ull, 7041726673129420837ull, 5479523372521007599ull}}, {{15670124051026151219ull, 6527796530739196443ull, 4190472322984388142ull, 6849404215651259499ull}}, {{14975969045355301120ull, 17383117700278771362ull, 626404385303097273ull, 8561755269564074374ull}}, {{13971666671774451104ull, 3946919535033150245ull, 14226560796096599508ull, 5351097043477546483ull}}, {{3629525284435900168ull, 4933649418791437807ull, 13171514976693361481ull, 6688871304346933104ull}}, {{18371964660827038922ull, 10778747791916685162ull, 16464393720866701851ull, 8361089130433666380ull}}, {{16094163931444287230ull, 4430874360734234274ull, 1066874038686912849ull, 5225680706521041488ull}}, {{10894332877450583230ull, 10150278969345180747ull, 1333592548358641061ull, 6532100883151301860ull}}, {{9006230078385841133ull, 17299534730108863838ull, 1666990685448301326ull, 8165126103939127325ull}}, {{1017207780563762804ull, 6200523187890651995ull, 3347712187618882281ull, 5103203814961954578ull}}, {{15106567780986867217ull, 12362340003290702897ull, 13408012271378378659ull, 6379004768702443222ull}}, {{5048151670951420310ull, 10841238985685990718ull, 7536643302368197516ull, 7973755960878054028ull}}, {{16990152849626801406ull, 15999146402908520006ull, 13933774100834899255ull, 4983597475548783767ull}}, {{12014319025178725949ull, 15387246985208262104ull, 12805531607616236165ull, 6229496844435979709ull}}, {{15017898781473407436ull, 5399000676228163918ull, 2171856454238131495ull, 7786871055544974637ull}}, {{4774500719993491744ull, 10291904450283684305ull, 3663253293112526136ull, 4866794409715609148ull}}, {{10579811918419252584ull, 12864880562854605381ull, 4579066616390657670ull, 6083493012144511435ull}}, {{17836450916451453633ull, 6857728666713480918ull, 1112147252060934184ull, 7604366265180639294ull}}, {{6536095804354770617ull, 4286080416695925574ull, 14530150087820247577ull, 4752728915737899558ull}}, {{17393491792298239079ull, 9969286539297294871ull, 8939315572920533663ull, 5940911144672374448ull}}, {{17130178721945410945ull, 7849922155694230685ull, 11174144466150667079ull, 7426138930840468060ull}}, {{13012204710429575793ull, 11823730374949976034ull, 16207212328198942732ull, 4641336831775292537ull}}, {{7041883851182193933ull, 14779662968687470043ull, 6423957354966514703ull, 5801671039719115672ull}}, {{4190668795550354512ull, 13862892692431949650ull, 8029946693708143379ull, 7252088799648894590ull}}, {{14461708031292718948ull, 12716929847112549158ull, 814061330280403416ull, 9065110999561118238ull}}, {{4426881501130561438ull, 7948081154445343224ull, 14343846386707415847ull, 5665694374725698898ull}}, {{5533601876413201798ull, 5323415424629291126ull, 8706435946529494001ull, 7082117968407123623ull}}, {{16140374382371278055ull, 11265955299214001811ull, 6271358914734479597ull, 8852647460508904529ull}}, {{7781890979768354833ull, 9347065071222445084ull, 15448814367777519508ull, 5532904662818065330ull}}, {{9727363724710443541ull, 11683831339028056355ull, 10087645922867123577ull, 6916130828522581663ull}}, {{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull, 8645163535653227079ull}}, {{13940571185267692384ull, 481081949064316707ull, 11916198643363904711ull, 5403227209783266924ull}}, {{12814027963157227576ull, 14436410491612559596ull, 14895248304204880888ull, 6754034012229083655ull}}, {{16017534953946534470ull, 18045513114515699495ull, 14007374361828713206ull, 8442542515286354569ull}}, {{16928488373857665900ull, 6666759678144924280ull, 1837079948501863898ull, 5276589072053971606ull}}, {{2713866393612530759ull, 17556821634535931159ull, 11519721972482105680ull, 6595736340067464507ull}}, {{17227391047297827161ull, 3499282969460362332ull, 9787966447175244197ull, 8244670425084330634ull}}, {{1543747367706366168ull, 4492894865126420410ull, 10729165047911915527ull, 5152919015677706646ull}}, {{11153056246487733517ull, 1004432562980637608ull, 4188084273035118601ull, 6441148769597133308ull}}, {{13941320308109666897ull, 5867226722153184914ull, 5235105341293898251ull, 8051435961996416635ull}}, {{13325011210995929715ull, 1361173692132046619ull, 966097829094992455ull, 5032147476247760397ull}}, {{12044577995317524239ull, 15536525170447221986ull, 5819308304796128472ull, 6290184345309700496ull}}, {{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull, 7862730431637125620ull}}, {{1339376026593886980ull, 7526224270984504273ull, 13769706649976751177ull, 4914206519773203512ull}}, {{6285906051669746629ull, 14019466357158018245ull, 17212133312470938971ull, 6142758149716504390ull}}, {{12469068583014571190ull, 12912646928020134902ull, 12291794603733897906ull, 7678447687145630488ull}}, {{3181481845956719090ull, 12682090348439972218ull, 7682371627333686191ull, 4799029804466019055ull}}, {{13200224344300674670ull, 11240926917122577368ull, 4991278515739719835ull, 5998787255582523819ull}}, {{16500280430375843337ull, 9439472627975833806ull, 1627412126247261890ull, 7498484069478154774ull}}, {{5700989250557514182ull, 10511356410912284033ull, 14852190634186702393ull, 4686552543423846733ull}}, {{11737922581624280632ull, 17750881532067742945ull, 4730180237451214279ull, 5858190679279808417ull}}, {{837345171748187077ull, 17576915896657290778ull, 10524411315241405753ull, 7322738349099760521ull}}, {{10270053501540009654ull, 8136086815539449760ull, 17767200162479145096ull, 9153422936374700651ull}}, {{6418783438462506034ull, 5085054259712156100ull, 8798657092335771733ull, 5720889335234187907ull}}, {{8023479298078132543ull, 10968003843067583029ull, 6386635346992326762ull, 7151111669042734884ull}}, {{14641035141025053582ull, 4486632766979702978ull, 7983294183740408453ull, 8938889586303418605ull}}, {{13762332981568046393ull, 5109988488576008313ull, 7295401874051449235ull, 5586805991439636628ull}}, {{3367858171677894279ull, 1775799592292622488ull, 9119252342564311544ull, 6983507489299545785ull}}, {{4209822714597367849ull, 2219749490365778110ull, 16010751446632777334ull, 8729384361624432231ull}}, {{16466197251905518618ull, 15222401486760775030ull, 16924248681786567689ull, 5455865226015270144ull}}, {{11359374528027122464ull, 5192943803168805076ull, 2708566778523657996ull, 6819831532519087681ull}}, {{14199218160033903080ull, 6491179753961006345ull, 7997394491581960399ull, 8524789415648859601ull}}, {{1956982322380107569ull, 10974516373866710822ull, 16527586603307195009ull, 5327993384780537250ull}}, {{11669599939829910269ull, 18329831485760776431ull, 11436111217279217953ull, 6659991730975671563ull}}, {{9975313906359999932ull, 9077231301918806827ull, 9683453003171634538ull, 8324989663719589454ull}}, {{3928728182261306006ull, 10284955582126642171ull, 1440472108554883682ull, 5203118539824743409ull}}, {{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull, 6503898174780929261ull}}, {{9597402298603831562ull, 18376086106286572344ull, 12627031211078628537ull, 8129872718476161576ull}}, {{5998376436627394726ull, 4567524788788025859ull, 7891894506924142836ull, 5081170449047600985ull}}, {{2886284527356855504ull, 5709405985985032324ull, 14476554152082566449ull, 6351463061309501231ull}}, {{3607855659196069380ull, 11748443500908678309ull, 13484006671675820157ull, 7939328826636876539ull}}, {{4560752796211237315ull, 9648620197281617895ull, 6121661160583693646ull, 4962080516648047837ull}}, {{1089254976836658739ull, 2837403209747246561ull, 12263762469157004962ull, 6202600645810059796ull}}, {{5973254739473211328ull, 12770126049038834009ull, 15329703086446256202ull, 7753250807262574745ull}}, {{15262499258239226840ull, 12593014799076659159ull, 2663535401387828270ull, 4845781754539109216ull}}, {{14466438054371645646ull, 6517896461991048141ull, 3329419251734785338ull, 6057227193173886520ull}}, {{4247989512682393345ull, 17370742614343585985ull, 4161774064668481672ull, 7571533991467358150ull}}, {{14184208491494965601ull, 10856714133964741240ull, 16436166845699964757ull, 4732208744667098843ull}}, {{17730260614368707001ull, 18182578685883314454ull, 15933522538697568042ull, 5915260930833873554ull}}, {{12939453731106107943ull, 13504851320499367260ull, 10693531136517184245ull, 7394076163542341943ull}}, {{17310530618796093273ull, 10746375084525798489ull, 13600985987964322009ull, 4621297602213963714ull}}, {{7803105218212952879ull, 18044654874084636016ull, 7777860448100626703ull, 5776622002767454643ull}}, {{9753881522766191098ull, 17944132574178407116ull, 5110639541698395475ull, 7220777503459318304ull}}, {{12192351903457738873ull, 17818479699295620991ull, 6388299427122994344ull, 9025971879324147880ull}}, {{14537748967302168652ull, 11136549812059763119ull, 3992687141951871465ull, 5641232424577592425ull}}, {{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull, 7051540530721990531ull}}, {{12338939219948015734ull, 107036512240675234ull, 7391495163906646141ull, 8814425663402488164ull}}, {{12323523030894897738ull, 2372740829364115973ull, 13843056514296429646ull, 5509016039626555102ull}}, {{1569345733336458460ull, 12189298073559920775ull, 8080448606015761249ull, 6886270049533193878ull}}, {{15796740221952736787ull, 1401564536667737256ull, 877188720664925754ull, 8607837561916492348ull}}, {{9872962638720460492ull, 5487663853844723689ull, 9771614987270354404ull, 5379898476197807717ull}}, {{16952889316827963519ull, 6859579817305904611ull, 16826204752515330909ull, 6724873095247259646ull}}, {{16579425627607566495ull, 13186160790059768668ull, 11809383903789387828ull, 8406091369059074558ull}}, {{1138768980399953251ull, 17464722530642131226ull, 2769178921440979488ull, 5253807105661921599ull}}, {{10646833262354717372ull, 3384159089593112416ull, 17296531707083388073ull, 6567258882077401998ull}}, {{13308541577943396715ull, 8841884880418778424ull, 12397292596999459283ull, 8209073602596752498ull}}, {{8317838486214622947ull, 3220335041048042563ull, 12359993891552049956ull, 5130671001622970311ull}}, {{5785612089340890780ull, 4025418801310053204ull, 10838306346012674541ull, 6413338752028712889ull}} }; static const UINT256 multipliers2_binary64[] = { {{918777112239470733ull, 5138421092069233273ull, 15049182825743144437ull, 3877256883183270350ull}}, {{12103450741218138969ull, 5517356191756964747ull, 4794053247662077369ull, 2423285551989543969ull}}, {{10517627408095285807ull, 11508381258123593838ull, 10604252578004984615ull, 3029106939986929961ull}}, {{3923662223264331450ull, 9773790554227104394ull, 17867001740933618673ull, 3786383674983662451ull}}, {{7063974907967595060ull, 17637834142460410006ull, 8861033078869817718ull, 2366489796864789032ull}}, {{18053340671814269633ull, 12823920641220736699ull, 11076291348587272148ull, 2958112246080986290ull}}, {{17954989821340449138ull, 16029900801525920874ull, 4621992148879314377ull, 3697640307601232863ull}}, {{15833554656765168615ull, 3101158973312618690ull, 9806274120690653342ull, 2311025192250770539ull}}, {{10568571284101684961ull, 13099820753495549171ull, 7646156632435928773ull, 2888781490313463174ull}}, {{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull, 3610976862891828968ull}}, {{10748785108374647871ull, 17009705413516254652ull, 417904692112668948ull, 4513721078614786210ull}}, {{15941362729588930728ull, 1407693846592883349ull, 4872876450997805997ull, 2821075674134241381ull}}, {{6091645356703999697ull, 6371303326668492091ull, 10702781582174645400ull, 3526344592667801726ull}}, {{3002870677452611718ull, 7964129158335615114ull, 4155104940863530942ull, 4407930740834752158ull}}, {{6488480191835270228ull, 365894705532371542ull, 16431998643321870551ull, 2754956713021720098ull}}, {{17333972276648863593ull, 14292426437197628139ull, 11316626267297562380ull, 3443695891277150123ull}}, {{17055779327383691587ull, 17865533046497035174ull, 9534096815694565071ull, 4304619864096437654ull}}, {{6048176061187419338ull, 18083487181701728840ull, 1347124491381715265ull, 2690387415060273534ull}}, {{7560220076484274172ull, 8769300921844997338ull, 10907277651081919890ull, 3362984268825341917ull}}, {{226903058750566907ull, 1738254115451470865ull, 18245783082279787767ull, 4203730336031677396ull}}, {{11671029457787574077ull, 8003937849798251146ull, 2180242389570091546ull, 2627331460019798373ull}}, {{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull, 3284164325024747966ull}}, {{11318454500152002639ull, 5588623862668685560ull, 18394608293592278729ull, 4105205406280934957ull}}, {{7074034062595001650ull, 15022104960236398235ull, 13802473192708868157ull, 2565753378925584348ull}}, {{4230856559816364158ull, 4942573145013334082ull, 17253091490886085197ull, 3207191723656980435ull}}, {{14511942736625231005ull, 10789902449694055506ull, 16954678345180218592ull, 4008989654571225544ull}}, {{13681650228818157283ull, 6743689031058784691ull, 10596673965737636620ull, 2505618534107015965ull}}, {{12490376767595308699ull, 8429611288823480864ull, 17857528475599433679ull, 3132023167633769956ull}}, {{15612970959494135874ull, 5925328092601963176ull, 3875166520789740483ull, 3915028959542212446ull}}, {{9758106849683834921ull, 1397487048662533033ull, 16257037130775751514ull, 2446893099713882778ull}}, {{16809319580532181555ull, 10970230847682942099ull, 11097924376614913584ull, 3058616374642353473ull}}, {{16399963457237839040ull, 13712788559603677624ull, 37347415486478268ull, 3823270468302941842ull}}, {{10249977160773649400ull, 17793864886607074323ull, 4635028153106436821ull, 2389544042689338651ull}}, {{8200785432539673846ull, 8407273052976679192ull, 1182099172955658123ull, 2986930053361673314ull}}, {{10250981790674592308ull, 5897405297793461086ull, 10700996003049348462ull, 3733662566702091642ull}}, {{1795177600744232288ull, 17520936366403076891ull, 11299808520333230692ull, 2333539104188807276ull}}, {{16079030056212454072ull, 3454426384294294497ull, 14124760650416538366ull, 2916923880236009095ull}}, {{6263729514983403878ull, 13541405017222643930ull, 13044264794593285053ull, 3646154850295011369ull}}, {{17053033930584030656ull, 3091698216246141200ull, 2470272937959442605ull, 4557693562868764212ull}}, {{10658146206615019160ull, 4238154394367532202ull, 10767292623079427436ull, 2848558476792977632ull}}, {{4099310721413998142ull, 5297692992959415253ull, 13459115778849284295ull, 3560698095991222040ull}}, {{9735824420194885581ull, 2010430222771881162ull, 16823894723561605369ull, 4450872619989027550ull}}, {{10696576281049191393ull, 12785733935300895486ull, 5903248183798615451ull, 2781795387493142219ull}}, {{4147348314456713433ull, 11370481400698731454ull, 2767374211320881410ull, 3477244234366427774ull}}, {{14407557429925667599ull, 4989729714018638509ull, 12682589801005877571ull, 4346555292958034717ull}}, {{11310566402917236201ull, 812738062047955116ull, 10232461634842367434ull, 2716597058098771698ull}}, {{14138208003646545252ull, 10239294614414719703ull, 3567205006698183484ull, 3395746322623464623ull}}, {{13061073986130793660ull, 12799118268018399629ull, 18294064313654893067ull, 4244682903279330778ull}}, {{10469014250545439990ull, 5693605908297805816ull, 16045476214461696071ull, 2652926814549581736ull}}, {{13086267813181799987ull, 2505321366944869366ull, 1610101194367568473ull, 3316158518186977171ull}}, {{7134462729622474176ull, 7743337727108474612ull, 15847684548241624303ull, 4145198147733721463ull}}, {{13682411242868822168ull, 11757115107083878488ull, 16822331870292097045ull, 2590748842333575914ull}}, {{17103014053586027710ull, 861335828572684398ull, 11804542801010345499ull, 3238436052916969893ull}}, {{12155395530127758829ull, 14911727840998019210ull, 920620445980768161ull, 4048045066146212367ull}}, {{12208808224757237173ull, 2402300872982680150ull, 7492916806379061957ull, 2530028166341382729ull}}, {{6037638244091770658ull, 7614562109655738092ull, 13977832026401215350ull, 3162535207926728411ull}}, {{7547047805114713322ull, 294830600214896807ull, 12860604014574131284ull, 3953169009908410514ull}}, {{11634433905837777682ull, 9407641161989086312ull, 12649563527536219956ull, 2470730631192756571ull}}, {{14543042382297222103ull, 11759551452486357890ull, 11200268390992887041ull, 3088413288990945714ull}}, {{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull, 3860516611238682143ull}}, {{3291301328921775936ull, 5151924306131002686ull, 9903131185070039977ull, 2412822882024176339ull}}, {{13337498698006995728ull, 11051591401091141261ull, 7767227962910162067ull, 3016028602530220424ull}}, {{2836815317226580948ull, 9202803232936538673ull, 9709034953637702584ull, 3770035753162775530ull}}, {{13302224619335082852ull, 5751752020585336670ull, 10679832864450952019ull, 2356272345726734706ull}}, {{7404408737314077757ull, 2578004007304282934ull, 4126419043708914216ull, 2945340432158418383ull}}, {{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull, 3681675540198022979ull}}, {{40173605984776736ull, 13251503298267717893ull, 14517980288043107294ull, 4602094425247528723ull}}, {{2330951512954179412ull, 3670503542989935779ull, 6767894670813248107ull, 2876309015779705452ull}}, {{16748747446474887977ull, 18423187484019583435ull, 8459868338516560133ull, 3595386269724631815ull}}, {{16324248289666222067ull, 9193926299742315582ull, 5963149404718312263ull, 4494232837155789769ull}}, {{5590969162614000888ull, 12663732964980029095ull, 15256183424017414924ull, 2808895523222368605ull}}, {{2377025434840113206ull, 15829666206225036369ull, 5235171224739604943ull, 3511119404027960757ull}}, {{7582967811977529411ull, 15175396739353907557ull, 11155650049351894083ull, 4388899255034950946ull}}, {{7045197891699649834ull, 7178779952882498271ull, 11583967299272321706ull, 2743062034396844341ull}}, {{4194811346197174389ull, 18196846977957898647ull, 644901068808238420ull, 3428827542996055427ull}}, {{631828164319080082ull, 4299314648737821693ull, 14641184391292461738ull, 4286034428745069283ull}}, {{2700735611913119003ull, 7298757673888526462ull, 6844897235344094634ull, 2678771517965668302ull}}, {{12599291551746174562ull, 18346819129215433885ull, 17779493581034894100ull, 3348464397457085377ull}}, {{1914056384400554490ull, 4486779837809740741ull, 8389308921011453914ull, 4185580496821356722ull}}, {{3502128249464040509ull, 7415923417058475867ull, 9855004094059546600ull, 2615987810513347951ull}}, {{18212718367112214348ull, 9269904271323094833ull, 7707069099147045346ull, 3269984763141684939ull}}, {{8930839903608104222ull, 2364008302299092734ull, 5022150355506418779ull, 4087480953927106174ull}}, {{970088921327677235ull, 17618406253432790623ull, 16973902027473675448ull, 2554675596204441358ull}}, {{15047669206941760256ull, 3576263743081436662ull, 11994005497487318503ull, 3193344495255551698ull}}, {{9586214471822424512ull, 18305387734133959540ull, 5769134835004372320ull, 3991680619069439623ull}}, {{15214756081743791128ull, 11440867333833724712ull, 10523238299518814556ull, 2494800386918399764ull}}, {{571701028470187294ull, 14301084167292155891ull, 13154047874398518195ull, 3118500483647999705ull}}, {{14549684340869897829ull, 13264669190687806959ull, 2607501787715984032ull, 3898125604559999632ull}}, {{16011081740684767999ull, 8290418244179879349ull, 1629688617322490020ull, 2436328502849999770ull}}, {{6178794120573796287ull, 10363022805224849187ull, 11260482808507888333ull, 3045410628562499712ull}}, {{3111806632289857455ull, 17565464524958449388ull, 14075603510634860416ull, 3806763285703124640ull}}, {{11168251182035936718ull, 10978415328099030867ull, 8797252194146787760ull, 2379227053564452900ull}}, {{9348627959117532993ull, 13723019160123788584ull, 10996565242683484700ull, 2974033816955566125ull}}, {{11685784948896916241ull, 17153773950154735730ull, 18357392571781743779ull, 3717542271194457656ull}}, {{11915301611487960555ull, 8415265709633015879ull, 11473370357363589862ull, 2323463919496536035ull}}, {{10282440995932562789ull, 1295710100186494041ull, 9730026928277099424ull, 2904329899370670044ull}}, {{17464737263343091390ull, 1619637625233117551ull, 12162533660346374280ull, 3630412374213337555ull}}, {{17219235560751476334ull, 2024547031541396939ull, 10591481057005579946ull, 4538015467766671944ull}}, {{8456179216255978757ull, 5877027913140760991ull, 6619675660628487466ull, 2836259667354169965ull}}, {{5958538001892585542ull, 16569656928280727047ull, 12886280594212997236ull, 3545324584192712456ull}}, {{2836486483938344023ull, 2265327086641357193ull, 16107850742766246546ull, 4431655730240890570ull}}, {{13302019098529934775ull, 6027515447578236149ull, 14679092732656291995ull, 2769784831400556606ull}}, {{2792465817880254756ull, 2922708291045407283ull, 9125493878965589186ull, 3462231039250695758ull}}, {{17325640327632482157ull, 12876757400661534911ull, 2183495311852210674ull, 4327788799063369698ull}}, {{17746054232411383205ull, 12659659393840847223ull, 5976370588335019575ull, 2704867999414606061ull}}, {{17570881772086841102ull, 11212888223873671125ull, 12082149253846162373ull, 3381084999268257576ull}}, {{8128544159826387665ull, 181052224559925195ull, 15102686567307702967ull, 4226356249085321970ull}}, {{2774497090677798339ull, 7030686667991035103ull, 14050865122994702258ull, 2641472655678326231ull}}, {{17303179418629411635ull, 18011730371843569686ull, 12951895385315989918ull, 3301840819597907789ull}}, {{12405602236431988736ull, 13291290927949686300ull, 2354811176362823686ull, 4127301024497384737ull}}, {{16976873434624768768ull, 3695370811541166033ull, 13000972031295234564ull, 2579563140310865460ull}}, {{7386033737998797248ull, 4619213514426457542ull, 16251215039119043205ull, 3224453925388581825ull}}, {{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull, 4030567406735727282ull}}, {{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull, 2519104629209829551ull}}, {{13842222223753820550ull, 2349222876544249363ull, 6214609585557347206ull, 3148880786512286939ull}}, {{12691091761264887783ull, 12159900632535087512ull, 3156575963519296103ull, 3936100983140358674ull}}, {{7931932350790554864ull, 14517466922975511551ull, 6584545995626947968ull, 2460063114462724171ull}}, {{5303229420060805676ull, 18146833653719389439ull, 3618996476106297056ull, 3075078893078405214ull}}, {{2017350756648619191ull, 4236797993439685183ull, 13747117631987647129ull, 3843848616348006517ull}}, {{8178373250546468851ull, 14177213791968272999ull, 10897791529205973407ull, 2402405385217504073ull}}, {{5611280544755698159ull, 13109831221532953345ull, 18233925429934854663ull, 3003006731521880091ull}}, {{11625786699372010603ull, 11775603008488803777ull, 18180720768991180425ull, 3753758414402350114ull}}, {{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull, 2346099009001468821ull}}, {{5047420592760418868ull, 9776150602685301439ull, 6133237568526430875ull, 2932623761251836027ull}}, {{1697589722523135681ull, 7608502234929238895ull, 3054860942230650690ull, 3665779701564795034ull}}, {{15957045208436083313ull, 287255756806772810ull, 13041948214643089171ull, 4582224626955993792ull}}, {{14584839273699939975ull, 16320435912500090670ull, 8151217634151930731ull, 2863890391847496120ull}}, {{9007677055270149160ull, 15788858872197725434ull, 10189022042689913414ull, 3579862989809370150ull}}, {{2036224282232910642ull, 10512701553392380985ull, 3512905516507615960ull, 4474828737261712688ull}}, {{12801855222464038911ull, 6570438470870238115ull, 2195565947817259975ull, 2796767960788570430ull}}, {{11390633009652660735ull, 3601362070160409740ull, 11967829471626350777ull, 3495959950985713037ull}}, {{14238291262065825919ull, 9113388606127900079ull, 1124728784250774759ull, 4369949938732141297ull}}, {{15816461066432223055ull, 12613396906471019405ull, 12232170536225203984ull, 2731218711707588310ull}}, {{5935518277758115107ull, 15766746133088774257ull, 6066841133426729172ull, 3414023389634485388ull}}, {{12031083865625031788ull, 1261688592651416205ull, 7583551416783411466ull, 4267529237043106735ull}}, {{9825270425229338820ull, 5400241388834523032ull, 11657248663130714022ull, 2667205773151941709ull}}, {{12281588031536673524ull, 15973673772897929598ull, 736502773631228815ull, 3334007216439927137ull}}, {{6128613002566066097ull, 15355406197695024094ull, 5532314485466423923ull, 4167509020549908921ull}}, {{17665441181885955023ull, 7291285864345696106ull, 14986911599484984712ull, 2604693137843693075ull}}, {{12858429440502667971ull, 9114107330432120133ull, 14121953480928842986ull, 3255866422304616344ull}}, {{2237978745346171251ull, 2169262126185374359ull, 17652441851161053733ull, 4069833027880770430ull}}, {{8316265743482438888ull, 3661631838079552926ull, 6421090138548270679ull, 2543645642425481519ull}}, {{1171960142498272802ull, 18412097852881604870ull, 3414676654757950444ull, 3179557053031851899ull}}, {{10688322214977616811ull, 4568378242392454471ull, 18103403873729601768ull, 3974446316289814873ull}}, {{13597730412002092363ull, 2855236401495284044ull, 4397098393439919249ull, 2484028947681134296ull}}, {{16997163015002615453ull, 8180731520296492959ull, 5496372991799899061ull, 3105036184601417870ull}}, {{16634767750325881413ull, 14837600418798004103ull, 16093838276604649634ull, 3881295230751772337ull}}, {{17314258871594757739ull, 13885186280176140468ull, 3141119895236824165ull, 2425809519219857711ull}}, {{3196079515783895558ull, 3521424794938011874ull, 17761457924328193919ull, 3032261899024822138ull}}, {{13218471431584645255ull, 18236839048954678554ull, 12978450368555466590ull, 3790327373781027673ull}}, {{12873230663167791189ull, 6786338387169286192ull, 1194002452706084763ull, 2368954608613142296ull}}, {{16091538328959738986ull, 3871236965534219836ull, 1492503065882605954ull, 2961193260766427870ull}}, {{1667678837490122116ull, 14062418243772550604ull, 11089000869208033250ull, 3701491575958034837ull}}, {{10265671310286102131ull, 13400697420785232031ull, 9236468552468714733ull, 2313432234973771773ull}}, {{8220403119430239759ull, 2915813720699376327ull, 16157271709013281321ull, 2891790293717214716ull}}, {{5663817880860411795ull, 8256453169301608313ull, 1749845562557050035ull, 3614737867146518396ull}}, {{11691458369502902647ull, 5708880443199622487ull, 2187306953196312544ull, 4518422333933147995ull}}, {{14224690508580396011ull, 3568050276999764054ull, 17507967910243553004ull, 2824013958708217496ull}}, {{8557491098870719205ull, 4460062846249705068ull, 3438215814094889639ull, 3530017448385271871ull}}, {{10696863873588399007ull, 963392539384743431ull, 18132827822900775761ull, 4412521810481589838ull}}, {{13603068948633831235ull, 12131335383183934404ull, 6721331370885596946ull, 2757826131550993649ull}}, {{17003836185792289044ull, 5940797192125142197ull, 13013350232034384087ull, 3447282664438742061ull}}, {{7419737176958197593ull, 2814310471729039843ull, 2431629734760816397ull, 4309103330548427577ull}}, {{2331492726385179544ull, 4064787054044343854ull, 13048983630293980008ull, 2693189581592767235ull}}, {{12137737944836250237ull, 5080983817555429817ull, 11699543519440087106ull, 3366486976990959044ull}}, {{1337114375763149085ull, 15574601808799063080ull, 14624429399300108882ull, 4208108721238698805ull}}, {{835696484851968178ull, 14345812148926802329ull, 11446111383776262003ull, 2630067950774186753ull}}, {{5656306624492348127ull, 13320579167731115007ull, 472581174438163792ull, 3287584938467733442ull}}, {{2458697262188047254ull, 16650723959663893759ull, 9814098504902480548ull, 4109481173084666802ull}}, {{8454214816508611390ull, 1183330437935157791ull, 10745497583991438247ull, 2568425733177916751ull}}, {{5956082502208376333ull, 15314221102701110951ull, 8820185961561909904ull, 3210532166472395939ull}}, {{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull, 4013165208090494924ull}}, {{13300100739401646331ull, 2740863199630467122ull, 13231838557807900481ull, 2508228255056559327ull}}, {{7401753887397282105ull, 8037765017965471807ull, 11928112178832487697ull, 3135285318820699159ull}}, {{4640506340819214727ull, 14658892290884227663ull, 10298454205113221717ull, 3919106648525873949ull}}, {{9817845490653091061ull, 11467650691016336241ull, 8742376887409457525ull, 2449441655328671218ull}}, {{16883992881743751730ull, 499505308488256589ull, 1704599072407046099ull, 3061802069160839023ull}}, {{7269933046897525950ull, 14459439690892484449ull, 15965806895790971335ull, 3827252586451048778ull}}, {{16072923200379423479ull, 15954678834448884636ull, 14590315328296744988ull, 2392032866531905486ull}}, {{1644409926764727733ull, 1496604469351554180ull, 9014522123516155428ull, 2990041083164881858ull}}, {{2055512408455909666ull, 1870755586689442725ull, 2044780617540418477ull, 3737551353956102323ull}}, {{3590538264498637493ull, 3475065250894595655ull, 17418888950458619212ull, 2335969596222563951ull}}, {{18323230885905460578ull, 4343831563618244568ull, 17161925169645886111ull, 2919961995278204939ull}}, {{4457294533672274107ull, 818103436095417807ull, 16840720443629969735ull, 3649952494097756174ull}}, {{959932148662954729ull, 14857687350401435971ull, 11827528517682686360ull, 4562440617622195218ull}}, {{16740858657410204370ull, 9286054594000897481ull, 12003891341979066879ull, 2851525386013872011ull}}, {{7091015266480591750ull, 6995882224073733948ull, 10393178159046445695ull, 3564406732517340014ull}}, {{8863769083100739688ull, 4133166761664779531ull, 3768100661953281311ull, 4455508415646675018ull}}, {{3234012667724268353ull, 9500758253681569063ull, 6966748932148188723ull, 2784692759779171886ull}}, {{17877573889937499153ull, 7264261798674573424ull, 17931808202040011712ull, 3480865949723964857ull}}, {{3900223288712322326ull, 9080327248343216781ull, 8579702197267850928ull, 4351082437154956072ull}}, {{4743482564658895406ull, 5675204530214510488ull, 5362313873292406830ull, 2719426523221847545ull}}, {{5929353205823619257ull, 16317377699622913918ull, 11314578360042896441ull, 3399283154027309431ull}}, {{16635063544134299879ull, 6561664069246478685ull, 9531536931626232648ull, 4249103942534136789ull}}, {{12702757724297631377ull, 4101040043279049178ull, 8263053591480089357ull, 2655689964083835493ull}}, {{6655075118517263413ull, 9737986072526199377ull, 14940503007777499600ull, 3319612455104794366ull}}, {{12930529916573967170ull, 12172482590657749221ull, 9452256722867098692ull, 4149515568880992958ull}}, {{10387424207072423433ull, 16831173656015869071ull, 1295974433364548778ull, 2593447230550620599ull}}, {{8372594240413141387ull, 11815595033165060531ull, 15455026096987849685ull, 3241809038188275748ull}}, {{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull, 4052261297735344686ull}}, {{3658785488805649269ull, 16724923399604708884ull, 14380082147485451518ull, 2532663311084590428ull}}, {{4573481861007061586ull, 11682782212651110297ull, 17975102684356814398ull, 3165829138855738035ull}}, {{10328538344686214887ull, 5380105728959112063ull, 17857192337018630094ull, 3957286423569672544ull}}, {{13372865493069966160ull, 17197624135881608751ull, 11160745210636643808ull, 2473304014731045340ull}}, {{12104395847910069796ull, 3050286096142459323ull, 13950931513295804761ull, 3091630018413806675ull}}, {{10518808791460199341ull, 8424543638605462058ull, 12826978373192368047ull, 3864537523017258344ull}}, {{11185941513090012492ull, 12182868801769495642ull, 8016861483245230029ull, 2415335951885786465ull}}, {{4759054854507739807ull, 1393527946929705841ull, 14632762872483925441ull, 3019169939857233081ull}}, {{10560504586562062663ull, 6353595952089520205ull, 4455895535322743089ull, 3773962424821541352ull}}, {{8906158375814983117ull, 15500212516124419888ull, 2784934709576714430ull, 2358726515513463345ull}}, {{11132697969768728896ull, 10151893608300749052ull, 8092854405398280942ull, 2948408144391829181ull}}, {{13915872462210911119ull, 3466494973521160507ull, 14727754025175239082ull, 3685510180489786476ull}}, {{12783154559336250995ull, 13556490753756226442ull, 18409692531469048852ull, 4606887725612233095ull}}, {{12601157618012544776ull, 17696178757952417334ull, 18423586859809237388ull, 2879304828507645684ull}}, {{6528074985660905162ull, 3673479373730970052ull, 4582739501051995120ull, 3599131035634557106ull}}, {{8160093732076131452ull, 4591849217163712565ull, 14951796413169769708ull, 4498913794543196382ull}}, {{7405901591761276110ull, 12093277797582096161ull, 4733186739803718163ull, 2811821121589497739ull}}, {{13869063008128983041ull, 10504911228550232297ull, 1304797406327259800ull, 3514776401986872174ull}}, {{3501270704879065090ull, 13131139035687790372ull, 10854368794763850558ull, 4393470502483590217ull}}, {{11411666227404191489ull, 3595275878877481078ull, 18313195542795876359ull, 2745919064052243885ull}}, {{5041210747400463553ull, 18329152903879015060ull, 9056436373212681736ull, 3432398830065304857ull}}, {{6301513434250579442ull, 4464697056139217209ull, 15932231484943240075ull, 4290498537581631071ull}}, {{15467660942475081911ull, 484592650873316803ull, 16875173705730606903ull, 2681561585988519419ull}}, {{14722890159666464485ull, 14440798868873809716ull, 16482281113735870724ull, 3351951982485649274ull}}, {{18403612699583080606ull, 18050998586092262145ull, 11379479355315062597ull, 4189939978107061593ull}}, {{4584728909598343523ull, 13587717125521357793ull, 194645569430832267ull, 2618712486316913496ull}}, {{10342597155425317307ull, 12372960388474309337ull, 243306961788540334ull, 3273390607896141870ull}}, {{17539932462709034538ull, 6242828448738110863ull, 9527505739090451226ull, 4091738259870177337ull}}, {{17879986816834228443ull, 8513453798888707193ull, 17483906133000001776ull, 2557336412418860835ull}}, {{8514925465760621841ull, 10641817248610883992ull, 17243196647822614316ull, 3196670515523576044ull}}, {{10643656832200777301ull, 13302271560763604990ull, 3107251736068716279ull, 3995838144404470056ull}}, {{2040599501698097909ull, 15231448753118334975ull, 1942032335042947674ull, 2497398840252793785ull}}, {{16385807432404786099ull, 9815938904543142910ull, 7039226437231072497ull, 3121748550315992231ull}}, {{11258887253651206815ull, 16881609649106316542ull, 4187347028111452717ull, 3902185687894990289ull}}, {{2425118515104616356ull, 12856849039905141791ull, 14146306938638127708ull, 2438866054934368930ull}}, {{16866456199162934157ull, 16071061299881427238ull, 8459511636442883827ull, 3048582568667961163ull}}, {{11859698212098891888ull, 15477140606424396144ull, 5962703527126216880ull, 3810728210834951454ull}}, {{7412311382561807430ull, 9673212879015247590ull, 17561747759736049262ull, 2381705131771844658ull}}, {{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull, 2977131414714805823ull}}, {{52521489184354349ull, 12808552114247630408ull, 11299329810091719308ull, 3721414268393507279ull}}, {{32825930740221468ull, 17228717108259544813ull, 13979610158948406423ull, 2325883917745942049ull}}, {{4652718431852664739ull, 16924210366897043112ull, 3639454643403344317ull, 2907354897182427562ull}}, {{5815898039815830924ull, 7320204903339140178ull, 13772690341108956205ull, 3634193621478034452ull}}, {{16493244586624564463ull, 13761942147601313126ull, 17215862926386195256ull, 4542742026847543065ull}}, {{5696591848212964885ull, 8601213842250820704ull, 3842385301350290179ull, 2839213766779714416ull}}, {{7120739810266206107ull, 6139831284386137976ull, 4802981626687862724ull, 3549017208474643020ull}}, {{8900924762832757633ull, 7674789105482672470ull, 6003727033359828405ull, 4436271510593303775ull}}, {{951391958343085617ull, 7102586200140364246ull, 10669858423490974609ull, 2772669694120814859ull}}, {{10412611984783632829ull, 13489918768602843211ull, 8725637010936330357ull, 3465837117651018574ull}}, {{8404078962552153132ull, 3027340405471390302ull, 1683674226815637139ull, 4332296397063773218ull}}, {{640863333167707804ull, 18032988817915476603ull, 5663982410187161115ull, 2707685248164858261ull}}, {{14636137221741798467ull, 17929550003966957849ull, 11691664031161339298ull, 3384606560206072826ull}}, {{4460113471895084371ull, 13188565468103921504ull, 5391208002096898315ull, 4230758200257591033ull}}, {{2787570919934427732ull, 5937010408351256988ull, 14898720047379031207ull, 2644223875160994395ull}}, {{3484463649918034665ull, 2809576992011683331ull, 14011714040796401105ull, 3305279843951242994ull}}, {{18190637617679707043ull, 8123657258441992067ull, 8291270514140725573ull, 4131599804939053743ull}}, {{9063305501836122950ull, 7383128795739938994ull, 12099573098979035339ull, 2582249878086908589ull}}, {{2105759840440377880ull, 4617224976247535839ull, 1289408318441630462ull, 3227812347608635737ull}}, {{16467257855832636061ull, 14994903257164195606ull, 6223446416479425981ull, 4034765434510794671ull}}, {{5680350141468009635ull, 11677657544941316206ull, 10807183037940723094ull, 2521728396569246669ull}}, {{16323809713689787851ull, 5373699894321869449ull, 18120664815853291772ull, 3152160495711558336ull}}, {{6569704086830071102ull, 6717124867902336812ull, 4204086946107063099ull, 3940200619639447921ull}}, {{13329437091123570247ull, 1892360033225266555ull, 14156769387385384197ull, 2462625387274654950ull}}, {{12050110345477074904ull, 6977136059958971098ull, 8472589697376954438ull, 3078281734093318688ull}}, {{5839265894991567822ull, 17944792111803489681ull, 10590737121721193047ull, 3847852167616648360ull}}, {{15178756230438199649ull, 18133024097518262906ull, 6619210701075745654ull, 2404907604760405225ull}}, {{9750073251192973753ull, 13442908085043052825ull, 12885699394772069972ull, 3006134505950506531ull}}, {{16799277582418605095ull, 16803635106303816031ull, 11495438225037699561ull, 3757668132438133164ull}}, {{17417077516652710041ull, 3584742913798803163ull, 16408020927503338034ull, 2348542582773833227ull}}, {{17159660877388499647ull, 13704300679103279762ull, 15898340140951784638ull, 2935678228467291534ull}}, {{12226204059880848751ull, 7907003812024323895ull, 10649553139334954990ull, 3669597785584114418ull}}, {{10671069056423673034ull, 660382728175629061ull, 4088569387313917930ull, 4586997231980143023ull}}, {{8975261169478489598ull, 5024425223537156067ull, 9472884894712280562ull, 2866873269987589389ull}}, {{6607390443420724094ull, 15503903566276220892ull, 16452792136817738606ull, 3583591587484486736ull}}, {{8259238054275905117ull, 10156507420990500307ull, 2119246097312621642ull, 4479489484355608421ull}}, {{2856180774708746746ull, 10959503156546450596ull, 3630371820034082478ull, 2799680927722255263ull}}, {{3570225968385933433ull, 4476006908828287437ull, 18373022830324766810ull, 3499601159652819078ull}}, {{9074468478909804695ull, 14818380672890135104ull, 13742906501051182704ull, 4374501449566023848ull}}, {{5671542799318627935ull, 9261487920556334440ull, 8589316563156989190ull, 2734063405978764905ull}}, {{7089428499148284918ull, 2353487863840642242ull, 15348331722373624392ull, 3417579257473456131ull}}, {{18085157660790131956ull, 2941859829800802802ull, 14573728634539642586ull, 4271974071841820164ull}}, {{15914909556421220376ull, 6450348412052889655ull, 18331952433442052424ull, 2669983794901137602ull}}, {{15281950927099137566ull, 8062935515066112069ull, 13691568504947789722ull, 3337479743626422003ull}}, {{5267380603591758246ull, 855297356977864279ull, 12502774612757349249ull, 4171849679533027504ull}}, {{10209641904885930760ull, 12063775894179634934ull, 7814234132973343280ull, 2607406049708142190ull}}, {{3538680344252637642ull, 15079719867724543668ull, 544420629361903292ull, 3259257562135177738ull}}, {{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull, 4074071952668972172ull}}, {{14293809065015842918ull, 9475188137446105788ull, 15413308176577997635ull, 2546294970418107607ull}}, {{17867261331269803647ull, 7232299153380244331ull, 14654949202295109140ull, 3182868713022634509ull}}, {{17722390645659866655ull, 9040373941725305414ull, 4483628447586722713ull, 3978585891278293137ull}}, {{6464808135110028755ull, 17179448759646785644ull, 14331482825810171455ull, 2486616182048933210ull}}, {{8081010168887535944ull, 16862624931131094151ull, 8690981495407938511ull, 3108270227561166513ull}}, {{5489576692682032026ull, 16466595145486479785ull, 15475412887687311043ull, 3885337784451458141ull}}, {{14960200478994739776ull, 7985778956715355913ull, 11977976064018263354ull, 2428336115282161338ull}}, {{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull, 3035420144102701673ull}}, {{6081490679326576260ull, 5560250592226661759ull, 11798058572387454635ull, 3794275180128377091ull}}, {{10718460702220192019ull, 1169313610927969647ull, 5067943598528465195ull, 2371421987580235682ull}}, {{8786389859347852119ull, 15296700068942125771ull, 15558301535015357301ull, 2964277484475294602ull}}, {{6371301305757427245ull, 5285817030895493502ull, 10224504881914420819ull, 3705346855594118253ull}}, {{17817121371380555740ull, 997792635095989486ull, 8696158560410206964ull, 2315841784746323908ull}}, {{13048029677370918867ull, 1247240793869986858ull, 10870198200512758705ull, 2894802230932904885ull}}, {{7086665059858872776ull, 6170737010764871477ull, 18199433769068336285ull, 3618502788666131106ull}}, {{13470017343250978874ull, 12325107281883477250ull, 13525920174480644548ull, 4523128485832663883ull}}, {{13030446857959249701ull, 16926564088031949089ull, 6147857099836708890ull, 2826955303645414927ull}}, {{2453000517166898414ull, 11934833073185160554ull, 3073135356368498209ull, 3533694129556768659ull}}, {{12289622683313398825ull, 1083483286199286980ull, 17676477250742786474ull, 4417117661945960823ull}}, {{16904386213925650074ull, 5288863072301942266ull, 17965327309355323402ull, 2760698538716225514ull}}, {{11907110730552286784ull, 15834450877232203641ull, 13233287099839378444ull, 3450873173395281893ull}}, {{1048830357908194768ull, 1346319522830702936ull, 2706550819517059344ull, 4313591466744102367ull}}, {{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull, 2695994666715063979ull}}, {{14654456772397940874ull, 10275184164066262476ull, 6149718093871667028ull, 3369993333393829974ull}}, {{18318070965497426093ull, 12843980205082828095ull, 16910519654194359593ull, 4212491666742287467ull}}, {{18366323381076973164ull, 1109958600535685703ull, 8263231774657780794ull, 2632807291713929667ull}}, {{18346218207918828551ull, 10610820287524382937ull, 5717353699894838088ull, 3291009114642412084ull}}, {{9097714704616371977ull, 13263525359405478672ull, 7146692124868547610ull, 4113761393303015105ull}}, {{5686071690385232486ull, 12901389368055812074ull, 15995897624111312016ull, 2571100870814384440ull}}, {{16330961649836316415ull, 16126736710069765092ull, 1548127956429588404ull, 3213876088517980551ull}}, {{1966957988585843903ull, 1711676813877654750ull, 15770218000819149218ull, 4017345110647475688ull}}, {{15064406798148316151ull, 5681484027100922122ull, 9856386250511968261ull, 2510840694154672305ull}}, {{9607136460830619381ull, 11713541052303540557ull, 16932168831567348230ull, 3138550867693340381ull}}, {{16620606594465662130ull, 5418554278524649888ull, 7330152984177021576ull, 3923188584616675477ull}}, {{10387879121541038832ull, 3386596424077906180ull, 6887188624324332437ull, 2451992865385422173ull}}, {{12984848901926298539ull, 8844931548524770629ull, 13220671798832803450ull, 3064991081731777716ull}}, {{2396003072125709462ull, 1832792398801187479ull, 16525839748541004313ull, 3831238852164722145ull}}, {{8415030947719650270ull, 12674710295319211934ull, 3411120815197045839ull, 2394524282602951341ull}}, {{1295416647794787029ull, 11231701850721627014ull, 8875587037423695203ull, 2993155353253689176ull}}, {{10842642846598259595ull, 9427941294974645863ull, 11094483796779619004ull, 3741444191567111470ull}}, {{13694180806764994103ull, 15115835346213929472ull, 2322366354559873973ull, 2338402619729444669ull}}, {{17117726008456242628ull, 5059736127485248128ull, 7514643961627230371ull, 2923003274661805836ull}}, {{2950413436860751669ull, 1712984140929172257ull, 9393304952034037964ull, 3653754093327257295ull}}, {{8299702814503327491ull, 2141230176161465321ull, 7129945171615159551ull, 4567192616659071619ull}}, {{16716529305133049442ull, 8255797887741997681ull, 2150372723045780767ull, 2854495385411919762ull}}, {{7060603576134148090ull, 5708061341250109198ull, 11911337940662001767ull, 3568119231764899702ull}}, {{18049126507022460921ull, 2523390658135248593ull, 5665800388972726401ull, 4460149039706124628ull}}, {{4363175039247956220ull, 13106334207403000131ull, 12764497279962729808ull, 2787593149816327892ull}}, {{842282780632557370ull, 16382917759253750164ull, 15955621599953412260ull, 3484491437270409865ull}}, {{1052853475790696713ull, 2031903125357636089ull, 6109468944659601614ull, 4355614296588012332ull}}, {{12187248468437655206ull, 15104997508630686267ull, 13041790127267026816ull, 2722258935367507707ull}}, {{10622374567119681103ull, 434502812078806218ull, 11690551640656395617ull, 3402823669209384634ull}}, {{4054596172044825571ull, 5154814533525895677ull, 5389817513965718713ull, 4253529586511730793ull}}, {{4839965616741709934ull, 14750974129522154558ull, 14897850992297043955ull, 2658455991569831745ull}}, {{15273329057781913225ull, 13827031643475305293ull, 4787255685089141232ull, 3323069989462289682ull}}, {{5256603266945227819ull, 17283789554344131617ull, 15207441643216202348ull, 4153837486827862102ull}}, {{14814592087909237147ull, 1578996434610306452ull, 4892965008582738564ull, 2596148429267413814ull}}, {{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull, 3245185536584267267ull}}, {{9312742082076019330ull, 7078867947505991736ull, 14562786853551610862ull, 4056481920730334084ull}}, {{5820463801297512082ull, 18259350522473408547ull, 18325113820324532596ull, 2535301200456458802ull}}, {{2663893733194502198ull, 4377444079382209068ull, 13683020238550889938ull, 3169126500570573503ull}}, {{3329867166493127747ull, 14695177136082537143ull, 12492089279761224518ull, 3961408125713216879ull}}, {{8998696006699286698ull, 4572799691624197810ull, 14725084827491847180ull, 2475880078570760549ull}}, {{2024997971519332565ull, 5715999614530247263ull, 4571297979082645263ull, 3094850098213450687ull}}, {{16366305519681329418ull, 2533313499735421174ull, 1102436455425918675ull, 3868562622766813359ull}}, {{5617254931373442982ull, 17724222001830495898ull, 7606551812282281027ull, 2417851639229258349ull}}, {{16244940701071579536ull, 17543591483860731968ull, 14119875783780239188ull, 3022314549036572936ull}}, {{1859431802629922803ull, 3482745281116363345ull, 17649844729725298986ull, 3777893186295716170ull}}, {{12691359922712171512ull, 6788401819125114994ull, 15642838974505699770ull, 2361183241434822606ull}}, {{6640827866535438582ull, 17708874310761169551ull, 10330176681277348904ull, 2951479051793528258ull}}, {{3689348814741910324ull, 3689348814741910323ull, 3689348814741910323ull, 3689348814741910323ull}}, {{0ull, 0ull, 0ull, 4611686018427387904ull}}, {{0ull, 0ull, 0ull, 2882303761517117440ull}}, {{0ull, 0ull, 0ull, 3602879701896396800ull}}, {{0ull, 0ull, 0ull, 4503599627370496000ull}}, {{0ull, 0ull, 0ull, 2814749767106560000ull}}, {{0ull, 0ull, 0ull, 3518437208883200000ull}}, {{0ull, 0ull, 0ull, 4398046511104000000ull}}, {{0ull, 0ull, 0ull, 2748779069440000000ull}}, {{0ull, 0ull, 0ull, 3435973836800000000ull}}, {{0ull, 0ull, 0ull, 4294967296000000000ull}}, {{0ull, 0ull, 0ull, 2684354560000000000ull}}, {{0ull, 0ull, 0ull, 3355443200000000000ull}}, {{0ull, 0ull, 0ull, 4194304000000000000ull}}, {{0ull, 0ull, 0ull, 2621440000000000000ull}}, {{0ull, 0ull, 0ull, 3276800000000000000ull}}, {{0ull, 0ull, 0ull, 4096000000000000000ull}}, {{0ull, 0ull, 0ull, 2560000000000000000ull}}, {{0ull, 0ull, 0ull, 3200000000000000000ull}}, {{0ull, 0ull, 0ull, 4000000000000000000ull}}, {{0ull, 0ull, 0ull, 2500000000000000000ull}}, {{0ull, 0ull, 0ull, 3125000000000000000ull}}, {{0ull, 0ull, 0ull, 3906250000000000000ull}}, {{0ull, 0ull, 0ull, 2441406250000000000ull}}, {{0ull, 0ull, 0ull, 3051757812500000000ull}}, {{0ull, 0ull, 0ull, 3814697265625000000ull}}, {{0ull, 0ull, 0ull, 2384185791015625000ull}}, {{0ull, 0ull, 0ull, 2980232238769531250ull}}, {{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}}, {{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}}, {{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}}, {{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}}, {{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}}, {{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}}, {{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}}, {{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}}, {{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}}, {{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}}, {{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}}, {{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}}, {{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}}, {{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}}, {{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}}, {{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}}, {{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}}, {{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}}, {{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}}, {{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}}, {{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}}, {{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}}, {{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}}, {{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}}, {{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}}, {{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}}, {{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}}, {{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}}, {{0ull, 4611686018427387904ull, 9222577334724359131ull, 3761581922631320025ull}}, {{0ull, 576460752303423488ull, 17293325880271194217ull, 2350988701644575015ull}}, {{0ull, 5332261958806667264ull, 17004971331911604867ull, 2938735877055718769ull}}, {{0ull, 2053641430080946176ull, 7421156109607342372ull, 3673419846319648462ull}}, {{0ull, 2567051787601182720ull, 53073100154402157ull, 4591774807899560578ull}}, {{0ull, 3910250376464433152ull, 4644856706023889252ull, 2869859254937225361ull}}, {{0ull, 4887812970580541440ull, 10417756900957249469ull, 3587324068671531701ull}}, {{0ull, 10721452231653064704ull, 17633882144623949740ull, 4484155085839414626ull}}, {{0ull, 15924279681637941248ull, 15632862358817356491ull, 2802596928649634141ull}}, {{0ull, 15293663583620038656ull, 5706019893239531902ull, 3503246160812042677ull}}, {{0ull, 9893707442670272512ull, 11744210884976802782ull, 4379057701015053346ull}}, {{0ull, 1571881133241532416ull, 11951817821537889643ull, 2736911063134408341ull}}, {{0ull, 15799909471834079232ull, 1104714221640198341ull, 3421138828918010427ull}}, {{0ull, 5914828784510435328ull, 15215950832332411639ull, 4276423536147513033ull}}, {{0ull, 10614297017960103936ull, 2592440242566675418ull, 2672764710092195646ull}}, {{0ull, 4044499235595354112ull, 12463922340063120081ull, 3340955887615244557ull}}, {{0ull, 9667310062921580544ull, 1744844869796736389ull, 4176194859519055697ull}}, {{0ull, 8347911798539681792ull, 12619743089691430003ull, 2610121787199409810ull}}, {{0ull, 5823203729747214336ull, 6551306825259511696ull, 3262652233999262263ull}}, {{0ull, 7279004662184017920ull, 3577447513147001716ull, 4078315292499077829ull}}, {{0ull, 13772749950719787008ull, 4541747704930570024ull, 2548947057811923643ull}}, {{0ull, 17215937438399733760ull, 1065498612735824626ull, 3186183822264904554ull}}, {{0ull, 12296549761144891392ull, 10555245302774556591ull, 3982729777831130692ull}}, {{0ull, 14602872628356638976ull, 15820400351088873677ull, 2489206111144456682ull}}, {{0ull, 4418532730163635008ull, 10552128402006316289ull, 3111507638930570853ull}}, {{0ull, 10134851931131931664ull, 17801846520935283265ull, 3889384548663213566ull}}, {{0ull, 17863497503025927050ull, 6514468057157164136ull, 2430865342914508479ull}}, {{9223372036854775808ull, 3882627805072857196ull, 3531399053019067267ull, 3038581678643135599ull}}, {{11529215046068469760ull, 241598737913683591ull, 18249306871555997796ull, 3798227098303919498ull}}, {{14123288431433875456ull, 9374371248050828052ull, 16017502813149886526ull, 2373891936439949686ull}}, {{17654110539292344320ull, 2494592023208759257ull, 10798506479582582350ull, 2967364920549937108ull}}, {{8232580118833266688ull, 12341612065865724880ull, 13498133099478227937ull, 3709206150687421385ull}}, {{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull, 2318253844179638366ull}}, {{15655075254693265408ull, 5606659160333633146ull, 11121877236270789064ull, 2897817305224547957ull}}, {{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull, 3622271631530684947ull}}, {{17543526057817145344ull, 17983776974876077599ull, 13919168667852566984ull, 4527839539413356183ull}}, {{17882232813776797696ull, 11239860609297548499ull, 15617009445048936221ull, 2829899712133347614ull}}, {{17741104998793609216ull, 214767706339771912ull, 10297889769456394469ull, 3537374640166684518ull}}, {{3729637174782459904ull, 4880145651352102795ull, 3648990174965717278ull, 4421718300208355648ull}}, {{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull, 2763573937630222280ull}}, {{13866533336563843072ull, 11883064322366759140ull, 2850773574191966623ull, 3454467422037777850ull}}, {{17333166670704803840ull, 10242144384531061021ull, 12786839004594734087ull, 4318084277547222312ull}}, {{13139072178404196352ull, 13318869267972994994ull, 7991774377871708804ull, 2698802673467013945ull}}, {{7200468186150469632ull, 16648586584966243743ull, 14601403990767023909ull, 3373503341833767431ull}}, {{4388899214260699136ull, 6975675175925640967ull, 13640068970031391983ull, 4216879177292209289ull}}, {{9660591036554018816ull, 11277326012594607460ull, 1607514078628538133ull, 2635549485807630806ull}}, {{12075738795692523520ull, 261599460461095613ull, 11232764635140448475ull, 3294436857259538507ull}}, {{1259615439333490688ull, 14162057380858533229ull, 9429269775498172689ull, 4118046071574423134ull}}, {{3093102658797125632ull, 1933756835395501412ull, 1281607591258970027ull, 2573778794734014459ull}}, {{3866378323496407040ull, 16252254099526540477ull, 15437067544355876245ull, 3217223493417518073ull}}, {{9444658922797896704ull, 6480259569126011884ull, 5461276375162681595ull, 4021529366771897592ull}}, {{15126283863603461248ull, 1744319221490063475ull, 3413297734476675997ull, 2513455854232435995ull}}, {{14296168811076938656ull, 6792085045289967248ull, 18101680223378008708ull, 3141819817790544993ull}}, {{17870211013846173320ull, 8490106306612459060ull, 8792042223940347173ull, 3927274772238181242ull}}, {{1945509846799082517ull, 7612159450846480865ull, 10106712408390104887ull, 2454546732648863276ull}}, {{7043573326926241051ull, 4903513295130713177ull, 12633390510487631109ull, 3068183415811079095ull}}, {{13416152677085189217ull, 10741077637340779375ull, 11180052119682150982ull, 3835229269763848869ull}}, {{15302624450819325117ull, 2101487504910599205ull, 9293375584015038316ull, 2397018293602405543ull}}, {{5293222508241992684ull, 2626859381138249007ull, 7005033461591409991ull, 2996272867003006929ull}}, {{2004842116875102951ull, 17118632281704974971ull, 13367977845416650392ull, 3745341083753758661ull}}, {{17393927387542797009ull, 10699145176065609356ull, 10660829162599100447ull, 2340838177346099163ull}}, {{3295665160718944645ull, 8762245451654623792ull, 8714350434821487655ull, 2926047721682623954ull}}, {{4119581450898680806ull, 6341120796140891836ull, 1669566006672083761ull, 3657559652103279943ull}}, {{5149476813623351007ull, 12538087013603502699ull, 15922015563622268413ull, 4571949565129099928ull}}, {{912579999300900428ull, 10142147392715883139ull, 9951259727263917758ull, 2857468478205687455ull}}, {{14975783054408289246ull, 3454312204040078115ull, 7827388640652509294ull, 3571835597757109319ull}}, {{14108042799582973654ull, 13541262291904873452ull, 5172549782388248713ull, 4464794497196386649ull}}, {{18040898786594134342ull, 1545759904799464051ull, 14762058660061125206ull, 2790496560747741655ull}}, {{17939437464815280023ull, 11155571917854105872ull, 13840887306649018603ull, 3488120700934677069ull}}, {{3977552757309548413ull, 9332778878890244437ull, 3466051078029109542ull, 4360150876168346337ull}}, {{4791813482532161710ull, 1221300780879014869ull, 13695496969836663224ull, 2725094297605216460ull}}, {{10601452871592590042ull, 1526625976098768586ull, 17119371212295829030ull, 3406367872006520575ull}}, {{4028444052635961744ull, 11131654506978236541ull, 16787527996942398383ull, 4257959840008150719ull}}, {{4823620542111170042ull, 13874813094502479694ull, 17409734025730080845ull, 2661224900005094199ull}}, {{15252897714493738360ull, 3508458312845935905ull, 17150481513735213153ull, 3326531125006367749ull}}, {{5231064087835009238ull, 8997258909484807786ull, 7603043836886852729ull, 4158163906257959687ull}}, {{7881101073324268678ull, 17152501864496474626ull, 11669431425695364811ull, 2598852441411224804ull}}, {{628004304800560040ull, 16828941312193205379ull, 14586789282119206014ull, 3248565551764031005ull}}, {{14620063436282863761ull, 11812804603386730915ull, 4398428547366843806ull, 4060706939705038757ull}}, {{6831696638463095899ull, 2771316858689318918ull, 5054860851317971331ull, 2537941837315649223ull}}, {{17762992834933645682ull, 17299204128643812359ull, 1706890045720076259ull, 3172427296644561529ull}}, {{17592055025239669198ull, 17012319142377377545ull, 6745298575577483228ull, 3965534120805701911ull}}, {{4077505363133711393ull, 1409327427131085158ull, 11133340637377008874ull, 2478458825503563694ull}}, {{14320253740771915049ull, 10985031320768632255ull, 4693303759866485284ull, 3098073531879454618ull}}, {{13288631157537505907ull, 13731289150960790319ull, 15090001736687882413ull, 3872591914849318272ull}}, {{15222923501102023048ull, 10887898728564187901ull, 9431251085429926508ull, 2420369946780823920ull}}, {{5193596321095365098ull, 13609873410705234877ull, 11789063856787408135ull, 3025462433476029900ull}}, {{11103681419796594277ull, 12400655744954155692ull, 14736329820984260169ull, 3781828041845037375ull}}, {{16163172924227647231ull, 832880812955265451ull, 16127735165756244462ull, 2363642526153148359ull}}, {{15592280136857171135ull, 10264473053048857622ull, 15547982938767917673ull, 2954553157691435449ull}}, {{10266978134216688110ull, 17442277334738459932ull, 5599920618177733379ull, 3693191447114294312ull}}, {{15640233370740205877ull, 8595580324997843505ull, 3499950386361083362ull, 2308244654446433945ull}}, {{5715233658143093634ull, 1521103369392528574ull, 8986624001378742107ull, 2885305818058042431ull}}, {{16367414109533642851ull, 15736437267022824429ull, 6621593983296039729ull, 3606632272572553039ull}}, {{6624209581634889851ull, 5835488528496366825ull, 3665306460692661758ull, 4508290340715691299ull}}, {{15669346034590275917ull, 17482238385592392977ull, 18431717602428771262ull, 2817681462947307061ull}}, {{5751624487955681184ull, 12629425945135715414ull, 9204588947753800366ull, 3522101828684133827ull}}, {{16412902646799377288ull, 6563410394564868459ull, 6894050166264862554ull, 4402627285855167284ull}}, {{7952221145035916853ull, 8713817515030430691ull, 13532153390770314904ull, 2751642053659479552ull}}, {{5328590412867508163ull, 10892271893788038364ull, 16915191738462893630ull, 3439552567074349440ull}}, {{6660738016084385203ull, 4391967830380272147ull, 2697245599369065422ull, 4299440708842936801ull}}, {{1857118250839046800ull, 16580037949269833804ull, 13214993545674135648ull, 2687150443026835500ull}}, {{2321397813548808500ull, 2278303362877740639ull, 16518741932092669561ull, 3358938053783544375ull}}, {{16736805322218174337ull, 7459565222024563702ull, 16036741396688449047ull, 4198672567229430469ull}}, {{5848817307958971057ull, 11579757291406434170ull, 12328806382143974606ull, 2624170354518394043ull}}, {{16534393671803489629ull, 5251324577403266904ull, 10799321959252580354ull, 3280212943147992554ull}}, {{2221248016044810420ull, 15787527758608859439ull, 4275780412210949634ull, 4100266178934990693ull}}, {{8305809037669088369ull, 14478890867557925053ull, 4978205766845537473ull, 2562666361834369183ull}}, {{14993947315513748365ull, 4263555529165242604ull, 1611071190129533938ull, 3203332952292961479ull}}, {{295690070682633840ull, 14552816448311329064ull, 15848897042944081134ull, 4004166190366201848ull}}, {{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull, 2502603868978876155ull}}, {{4842693886148195591ull, 10216466345636378855ull, 7770264796372675482ull, 3128254836223595194ull}}, {{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull, 3910318545279493993ull}}, {{12430265883104630126ull, 13746221855562655860ull, 11835126895200387600ull, 2443949090799683745ull}}, {{15537832353880787657ull, 17182777319453319825ull, 958850563718320788ull, 3054936363499604682ull}}, {{5587232387068820859ull, 3031727575607098166ull, 10421935241502676794ull, 3818670454374505852ull}}, {{17327078297200176749ull, 6506515753181824257ull, 15737081562793948804ull, 2386669033984066157ull}}, {{7823789816218057224ull, 8133144691477280322ull, 5836293898210272293ull, 2983336292480082697ull}}, {{556365233417795722ull, 14778116882773988307ull, 11907053391190228270ull, 3729170365600103371ull}}, {{16488629335381979991ull, 4624637033306354787ull, 5136065360280198717ull, 2330731478500064607ull}}, {{15999100650800087084ull, 10392482310060331388ull, 1808395681922860492ull, 2913414348125080759ull}}, {{1552131739790557239ull, 12990602887575414236ull, 16095552657685739327ull, 3641767935156350948ull}}, {{1940164674738196549ull, 11626567591041879891ull, 1672696748397622543ull, 4552209918945438686ull}}, {{17353503986207230507ull, 14184133772042256787ull, 14880493523030677801ull, 2845131199340899178ull}}, {{17080193964331650230ull, 3895109159770657272ull, 9377244866933571444ull, 3556413999176123973ull}}, {{2903498381705011171ull, 4868886449713321591ull, 16333242102094352209ull, 4445517498970154966ull}}, {{8732215516206713838ull, 14572269077139295754ull, 5596590295381582226ull, 2778448436856346854ull}}, {{1691897358403616490ull, 8991964309569343885ull, 16219109906081753591ull, 3473060546070433567ull}}, {{6726557716431908516ull, 6628269368534291952ull, 15662201364174804085ull, 4341325682588041959ull}}, {{4204098572769942823ull, 6448511364547626422ull, 16706404880250334409ull, 2713328551617526224ull}}, {{14478495252817204336ull, 12672325224111920931ull, 2436262026603366395ull, 3391660689521907781ull}}, {{13486433047594117516ull, 11228720511712513260ull, 7657013551681595898ull, 4239575861902384726ull}}, {{17652392691601099256ull, 11629636338247708691ull, 173947451373609532ull, 2649734913688990454ull}}, {{17453804846073986166ull, 14537045422809635864ull, 9440806351071787723ull, 3312168642111238067ull}}, {{3370511983882931091ull, 13559620760084656927ull, 7189321920412346750ull, 4140210802639047584ull}}, {{9024099017567913788ull, 3863076956625522675ull, 4493326200257716719ull, 2587631751649404740ull}}, {{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull, 3234539689561755925ull}}, {{8335547191915630413ull, 14106508276975308012ull, 11632508206330070277ull, 4043174611952194906ull}}, {{14433089031802044817ull, 11122410682323261459ull, 11882003647383681827ull, 2526984132470121816ull}}, {{13429675271325168117ull, 9291327334476688920ull, 14852504559229602284ull, 3158730165587652270ull}}, {{16787094089156460146ull, 11614159168095861150ull, 9342258662182227047ull, 3948412706984565338ull}}, {{5880247787295399687ull, 14176378507700995075ull, 10450597682291279808ull, 2467757941865353336ull}}, {{2738623715691861705ull, 17720473134626243844ull, 13063247102864099760ull, 3084697427331691670ull}}, {{3423279644614827131ull, 3703847344573253189ull, 7105686841725348893ull, 3855871784164614588ull}}, {{4445392787097960909ull, 4620747599571977195ull, 13664426312933118866ull, 2409919865102884117ull}}, {{945054965445063232ull, 14999306536319747302ull, 3245474835884234870ull, 3012399831378605147ull}}, {{10404690743661104848ull, 9525761133544908319ull, 17891901600137457300ull, 3765499789223256433ull}}, {{13420460742429272386ull, 15176972745320343507ull, 4264909472444828956ull, 2353437368264535271ull}}, {{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull, 2941796710330669089ull}}, {{15204862387011503223ull, 655589822426097210ull, 5510999546088198269ull, 3677245887913336361ull}}, {{9782705946909603221ull, 5431173296460009417ull, 11500435451037635740ull, 4596557359891670451ull}}, {{17643406262886971773ull, 12617855347142281693ull, 4881929147684828385ull, 2872848349932294032ull}}, {{8219199773326551005ull, 1937261128645688405ull, 6102411434606035482ull, 3591060437415367540ull}}, {{14885685735085576660ull, 11644948447661886314ull, 7628014293257544352ull, 4488825546769209425ull}}, {{13915239602855873316ull, 7278092779788678946ull, 16296723979354434980ull, 2805515966730755890ull}}, {{8170677466715065837ull, 9097615974735848683ull, 11147532937338267917ull, 3506894958413444863ull}}, {{5601660814966444393ull, 15983705986847198758ull, 9322730153245446992ull, 4383618698016806079ull}}, {{17336096064636191458ull, 9989816241779499223ull, 12744235373419486226ull, 2739761686260503799ull}}, {{17058434062367851418ull, 3263898265369598221ull, 11318608198346969879ull, 3424702107825629749ull}}, {{7487984522677650560ull, 17914930886994161489ull, 313202192651548636ull, 4280877634782037187ull}}, {{16209205372742001360ull, 1973459767516575122ull, 16336652434903075562ull, 2675548521738773241ull}}, {{11038134679072725892ull, 11690196746250494711ull, 6585757488346680740ull, 3344435652173466552ull}}, {{9185982330413519461ull, 14612745932813118389ull, 8232196860433350925ull, 4180544565216833190ull}}, {{8047081965722143615ull, 11438809217221892945ull, 533437019343456424ull, 2612840353260520744ull}}, {{14670538475580067423ull, 14298511521527366181ull, 666796274179320530ull, 3266050441575650930ull}}, {{4503115039192920567ull, 8649767365054431919ull, 10056867379578926471ull, 4082563051969563662ull}}, {{9731975927136657210ull, 12323633630800101805ull, 1673856093809441140ull, 2551601907480977289ull}}, {{16776655927348209417ull, 15404542038500127256ull, 6704006135689189329ull, 3189502384351221611ull}}, {{2524075835475710155ull, 5420619492842995359ull, 3768321651184098758ull, 3986877980439027014ull}}, {{8495076424813400703ull, 17222945238309035811ull, 16190259087272225435ull, 2491798737774391883ull}}, {{6007159512589362975ull, 16916995529458906860ull, 15626137840662893890ull, 3114748422217989854ull}}, {{7508949390736703718ull, 11922872374968857767ull, 10309300263973841555ull, 3893435527772487318ull}}, {{11610622396851521680ull, 5145952225141842152ull, 1831626646556263068ull, 2433397204857804574ull}}, {{14513277996064402100ull, 6432440281427302690ull, 11512905345050104643ull, 3041746506072255717ull}}, {{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull, 3802183132590319647ull}}, {{3268047902177385309ull, 11366412245202738595ull, 7265075043910123788ull, 2376364457868949779ull}}, {{17920117933003895348ull, 14208015306503423243ull, 4469657786460266831ull, 2970455572336187224ull}}, {{17788461397827481281ull, 13148333114701891150ull, 5587072233075333539ull, 3713069465420234030ull}}, {{6506102355214787897ull, 5911865187474988017ull, 17326978200954247174ull, 2320668415887646268ull}}, {{12744313962445872775ull, 16613203521198510829ull, 3211978677483257351ull, 2900835519859557836ull}}, {{2095334397775177256ull, 16154818383070750633ull, 4014973346854071689ull, 3626044399824447295ull}}, {{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull, 4532555499780559119ull}}, {{2213440750565280719ull, 13197412614077447420ull, 7171923193353707923ull, 2832847187362849449ull}}, {{2766800938206600899ull, 11885079749169421371ull, 13576590010119522808ull, 3541058984203561811ull}}, {{17293559228040414836ull, 14856349686461776713ull, 12359051494222015606ull, 4426323730254452264ull}}, {{3890945489884177417ull, 4673532535611222542ull, 7724407183888759754ull, 2766452331409032665ull}}, {{14087053899209997579ull, 15065287706368803985ull, 14267194998288337596ull, 3458065414261290831ull}}, {{3773759318730333261ull, 384865559251453366ull, 13222307729433034092ull, 4322581767826613539ull}}, {{16193657629488622000ull, 9463913011386934161ull, 5958099321681952355ull, 2701613604891633462ull}}, {{6407013981578613788ull, 7218205245806279798ull, 16670996188957216252ull, 3377017006114541827ull}}, {{17232139513828043043ull, 9022756557257849747ull, 16227059217769132411ull, 4221271257643177284ull}}, {{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull, 2638294536026985803ull}}, {{10580305233661041188ull, 8778410817267965579ull, 14983233023095828648ull, 3297868170033732253ull}}, {{8613695523648913581ull, 10973013521584956974ull, 4893983223587622098ull, 4122335212542165317ull}}, {{771873683853183084ull, 11469819469417986013ull, 5364582523955957763ull, 2576459507838853323ull}}, {{5576528123243866759ull, 9725588318345094612ull, 2094042136517559300ull, 3220574384798566654ull}}, {{6970660154054833449ull, 12156985397931368265ull, 11840924707501724933ull, 4025717980998208317ull}}, {{15885877642352740666ull, 9903958882920799117ull, 9706420951402272035ull, 2516073738123880198ull}}, {{6022288997658762120ull, 7768262585223610993ull, 2909654152398064236ull, 3145092172654850248ull}}, {{12139547265500840554ull, 9710328231529513741ull, 3637067690497580295ull, 3931365215818562810ull}}, {{9893060050151719298ull, 12986484172347027944ull, 6884853324988375588ull, 2457103259886601756ull}}, {{12366325062689649123ull, 16233105215433784930ull, 8606066656235469485ull, 3071379074858252195ull}}, {{6234534291507285595ull, 6456323464010067451ull, 6145897301866948953ull, 3839223843572815244ull}}, {{1590740922978359545ull, 15564417211074761917ull, 13064557850521618903ull, 2399514902233009527ull}}, {{6600112172150337335ull, 14843835495416064492ull, 11719011294724635725ull, 2999393627791261909ull}}, {{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull, 3749242034739077387ull}}, {{12073866662133532899ull, 14479050242310917824ull, 16649467353948127004ull, 2343276271711923366ull}}, {{15092333327666916124ull, 18098812802888647280ull, 11588462155580382947ull, 2929095339639904208ull}}, {{418672585874093539ull, 18011829985183421197ull, 14485577694475478684ull, 3661369174549880260ull}}, {{5135026750770004827ull, 4068043407769724880ull, 18106972118094348356ull, 4576711468187350325ull}}, {{3209391719231253017ull, 11765899166710853858ull, 13622700583022661674ull, 2860444667617093953ull}}, {{13235111685893842080ull, 5484001921533791514ull, 3193317673496163381ull, 3575555834521367442ull}}, {{7320517570512526791ull, 11466688420344627297ull, 13215019128724980034ull, 4469444793151709302ull}}, {{16104538527638799005ull, 11778366281142779964ull, 3647700937025724617ull, 2793402995719818314ull}}, {{1683929085838947140ull, 887899796146311244ull, 13782998208136931580ull, 3491753744649772892ull}}, {{2104911357298683925ull, 1109874745182889055ull, 17228747760171164475ull, 4364692180812216115ull}}, {{8233098625952759309ull, 16834572780235163323ull, 8462124340893283844ull, 2727932613007635072ull}}, {{5679687264013561232ull, 2596471901584402538ull, 10577655426116604806ull, 3409915766259543840ull}}, {{16322981116871727348ull, 12468961913835278980ull, 13222069282645756007ull, 4262394707824429800ull}}, {{978491161190053785ull, 14710630223788131219ull, 8263793301653597504ull, 2663996692390268625ull}}, {{15058172006769730943ull, 18388287779735164023ull, 14941427645494384784ull, 3329995865487835781ull}}, {{14211028990034775774ull, 4538615650959403413ull, 4841726501585817269ull, 4162494831859794727ull}}, {{11187736127985428811ull, 5142477791063321085ull, 9943608091132217649ull, 2601559269912371704ull}}, {{149612104699622302ull, 11039783257256539261ull, 12429510113915272061ull, 3251949087390464630ull}}, {{4798701149301915781ull, 18411415089998061980ull, 6313515605539314268ull, 4064936359238080788ull}}, {{12222560255168473171ull, 2283762394394012929ull, 13169319290316847226ull, 2540585224523800492ull}}, {{1443142263678427752ull, 12078075029847291970ull, 16461649112896059032ull, 3175731530654750615ull}}, {{11027299866452810498ull, 15097593787309114962ull, 15965375372692685886ull, 3969664413318438269ull}}, {{11503748434960394466ull, 4824310098640808947ull, 12284202617146622631ull, 2481040258324023918ull}}, {{9767999525273105178ull, 1418701604873623280ull, 6131881234578502481ull, 3101300322905029898ull}}, {{12209999406591381472ull, 6385063024519417004ull, 16888223580077903909ull, 3876625403631287372ull}}, {{16854621665974389228ull, 6296507399538329579ull, 1331767700693914135ull, 2422890877269554608ull}}, {{16456591064040598631ull, 3258948230995524070ull, 1664709625867392669ull, 3028613596586943260ull}}, {{11347366793195972481ull, 8685371307171792992ull, 2080887032334240836ull, 3785766995733679075ull}}, {{7092104245747482801ull, 14651729103837146428ull, 17441455459704758186ull, 2366104372333549421ull}}, {{8865130307184353501ull, 9091289342941657227ull, 7966761269348784021ull, 2957630465416936777ull}}, {{6469726865553053972ull, 15975797697104459438ull, 14570137605113367930ull, 3697038081771170971ull}}, {{17878637346252822445ull, 14596559579117675052ull, 6800492993982161004ull, 2310648801106981857ull}}, {{3901552609106476440ull, 18245699473897093816ull, 13112302260905089159ull, 2888311001383727321ull}}, {{4876940761383095549ull, 18195438323943979366ull, 2555319770849197737ull, 3610388751729659152ull}}, {{15319547988583645245ull, 8909239849647810495ull, 3194149713561497172ull, 4512985939662073940ull}}, {{16492246520505860134ull, 14791646942884657367ull, 11219715607830711540ull, 2820616212288796212ull}}, {{16003622132204937264ull, 42814604896270093ull, 14024644509788389426ull, 3525770265360995265ull}}, {{6169469609974007867ull, 9276890292975113425ull, 3695747581953323070ull, 4407212831701244082ull}}, {{15385133552302224677ull, 1186370414682057986ull, 6921528257148214823ull, 2754508019813277551ull}}, {{10008044903523005038ull, 15318021073634736195ull, 4040224303007880624ull, 3443135024766596939ull}}, {{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull, 4303918780958246174ull}}, {{14159853356215006054ull, 2743831926922361844ull, 14109179530489953010ull, 2689949238098903858ull}}, {{17699816695268757568ull, 12653161945507728113ull, 8413102376257665454ull, 3362436547623629823ull}}, {{8289712813803783248ull, 6593080395029884334ull, 5904691951894693914ull, 4203045684529537279ull}}, {{569384490199976626ull, 8732361265321065613ull, 10607961497575265552ull, 2626903552830960799ull}}, {{5323416631177358686ull, 10915451581651332016ull, 8648265853541694036ull, 3283629441038700999ull}}, {{6654270788971698358ull, 13644314477064165020ull, 6198646298499729641ull, 4104536801298376249ull}}, {{13382291279962087282ull, 1610167520524021281ull, 15403368982630800786ull, 2565335500811485155ull}}, {{2892806044670445390ull, 11236081437509802410ull, 14642525209861113078ull, 3206669376014356444ull}} }; // ********************************************************************** #if __ENABLE_BINARY80__ static const UINT128 breakpoints_binary80[] = { {{6337302757928054309ull, 494016656451265ull}}, {{5069842206342443447ull, 395213325161012ull}}, {{15123920209299685727ull, 316170660128809ull}}, {{13130225890653766194ull, 505873056206095ull}}, {{10504180712523012955ull, 404698444964876ull}}, {{4713995755276500041ull, 323758755971901ull}}, {{163695578958579419ull, 518014009555042ull}}, {{11199002907392594505ull, 414411207644033ull}}, {{16337899955397896250ull, 331528966115226ull}}, {{315198225443261738ull, 530446345784363ull}}, {{7630856209838430037ull, 424357076627490ull}}, {{6104684967870744030ull, 339485661301992ull}}, {{13456844763335100771ull, 543177058083187ull}}, {{3386778181184259970ull, 434541646466550ull}}, {{2709422544947407976ull, 347633317173240ull}}, {{4335076071915852762ull, 556213307477184ull}}, {{7157409672274592533ull, 444970645981747ull}}, {{16793974182045404996ull, 355976516785397ull}}, {{6056481716152503350ull, 284781213428318ull}}, {{6001021931102095037ull, 455649941485309ull}}, {{8490166359623586353ull, 364519953188247ull}}, {{17860179531924600052ull, 291615962550597ull}}, {{13818891992111718790ull, 466585540080956ull}}, {{7365764778947464709ull, 373268432064765ull}}, {{5892611823157971767ull, 298614745651812ull}}, {{13117527731794665151ull, 477783593042899ull}}, {{14183371000177642444ull, 382226874434319ull}}, {{15036045614884024278ull, 305781499547455ull}}, {{5610928910104887229ull, 489250399275929ull}}, {{8178091942825820106ull, 391400319420743ull}}, {{13921171183744476731ull, 313120255536594ull}}, {{11205827449765431801ull, 500992408858551ull}}, {{5275313145070435117ull, 400793927086841ull}}, {{530901701314437771ull, 320635141669473ull}}, {{15606837981070741726ull, 513016226671156ull}}, {{8796121570114683058ull, 410412981336925ull}}, {{7036897256091746446ull, 328330385069540ull}}, {{11259035609746794314ull, 525328616111264ull}}, {{12696577302539345774ull, 420262892889011ull}}, {{6467913027289566296ull, 336210314311209ull}}, {{17727358473147126720ull, 537936502897934ull}}, {{17871235593259611699ull, 430349202318347ull}}, {{6918290845123868713ull, 344279361854678ull}}, {{7379916537456279618ull, 550846978967485ull}}, {{5903933229965023694ull, 440677583173988ull}}, {{12101844213455839602ull, 352542066539190ull}}, {{9681475370764671681ull, 282033653231352ull}}, {{732965334255833398ull, 451253845170164ull}}, {{4275721082146577041ull, 361003076136131ull}}, {{18177972124684902926ull, 288802460908904ull}}, {{18016708955270113712ull, 462083937454247ull}}, {{7034669534732270323ull, 369667149963398ull}}, {{13006433257269636905ull, 295733719970718ull}}, {{17120944396889508724ull, 473173951953149ull}}, {{17386104332253517303ull, 378539161562519ull}}, {{17598232280544724165ull, 302831329250015ull}}, {{9710427575162007049ull, 484530126800025ull}}, {{7768342060129605639ull, 387624101440020ull}}, {{6214673648103684511ull, 310099281152016ull}}, {{2564780207482074571ull, 496158849843226ull}}, {{16809219424953300950ull, 396927079874580ull}}, {{13447375539962640760ull, 317541663899664ull}}, {{10447754419714494246ull, 508066662239463ull}}, {{15736901165255416043ull, 406453329791570ull}}, {{12589520932204332835ull, 325162663833256ull}}, {{12764535862043111889ull, 520260262133210ull}}, {{10211628689634489511ull, 416208209706568ull}}, {{15548000581191412255ull, 332966567765254ull}}, {{13808754485680528639ull, 532746508424407ull}}, {{3668305959060602265ull, 426197206739526ull}}, {{17692040026216123105ull, 340957765391620ull}}, {{9860519968236245352ull, 545532424626593ull}}, {{15267113604072816928ull, 436425939701274ull}}, {{15903039698000163865ull, 349140751761019ull}}, {{14376817072574531215ull, 558625202817631ull}}, {{7812104843317714649ull, 446900162254105ull}}, {{6249683874654171719ull, 357520129803284ull}}, {{8689095914465247698ull, 286016103842627ull}}, {{17591902277886306641ull, 457625766148203ull}}, {{3005475378083314343ull, 366100612918563ull}}, {{9783077931950472121ull, 292880490334850ull}}, {{15652924691120755393ull, 468608784535760ull}}, {{12522339752896604314ull, 374887027628608ull}}, {{17396569431801104098ull, 299909622102886ull}}, {{2009069387688394294ull, 479855395364619ull}}, {{5296604324892625759ull, 383884316291695ull}}, {{4237283459914100607ull, 307107453033356ull}}, {{17847699980088291941ull, 491371924853369ull}}, {{17967508798812543876ull, 393097539882695ull}}, {{14374007039050035101ull, 314478031906156ull}}, {{15619713632996235515ull, 503164851049850ull}}, {{12495770906396988412ull, 402531880839880ull}}, {{9996616725117590729ull, 322025504671904ull}}, {{4926540315962414197ull, 515240807475047ull}}, {{15009278696995662327ull, 412192645980037ull}}, {{4628725328112709215ull, 329754116784030ull}}, {{7405960524980334745ull, 527606586854448ull}}, {{13303466049468088442ull, 422085269483558ull}}, {{18021470469058291400ull, 337668215586846ull}}, {{3008911047299893978ull, 540269144938955ull}}, {{2407128837839915182ull, 432215315951164ull}}, {{5615051885013842469ull, 345772252760931ull}}, {{1605385386538327304ull, 553235604417490ull}}, {{1284308309230661843ull, 442588483533992ull}}, {{12095493091610260444ull, 354070786827193ull}}, {{17055092102772029002ull, 283256629461754ull}}, {{16220100920209515433ull, 453210607138807ull}}, {{5597383106683791700ull, 362568485711046ull}}, {{788557670605123037ull, 290054788568837ull}}, {{4951041087710107183ull, 464087661710139ull}}, {{7650181684909996069ull, 371270129368111ull}}, {{2430796533186086532ull, 297016103494489ull}}, {{11267972082581559098ull, 475225765591182ull}}, {{1635680036581426632ull, 380180612472946ull}}, {{16065939288232782598ull, 304144489978356ull}}, {{18326805231688631511ull, 486631183965370ull}}, {{14661444185350905209ull, 389304947172296ull}}, {{8039806533538813844ull, 311443957737837ull}}, {{16553039268404012473ull, 498310332380539ull}}, {{16931780229465120302ull, 398648265904431ull}}, {{9856075368830185918ull, 318918612723545ull}}, {{15769720590128297469ull, 510269780357672ull}}, {{5237078842618817329ull, 408215824286138ull}}, {{11568360703578874509ull, 326572659428910ull}}, {{62633052016647599ull, 522516255086257ull}}, {{11118152885839049049ull, 418013004069005ull}}, {{8894522308671239239ull, 334410403255204ull}}, {{3163189249648251813ull, 535056645208327ull}}, {{13598597843944332420ull, 428045316166661ull}}, {{7189529460413555613ull, 342436252933329ull}}, {{435200692435958011ull, 547898004693327ull}}, {{11416206998174497378ull, 438318403754661ull}}, {{5443616783797687579ull, 350654723003729ull}}, {{16088484483560120774ull, 561047556805966ull}}, {{9181438772106186296ull, 448838045444773ull}}, {{14723848647168769683ull, 359070436355818ull}}, {{711032473509284777ull, 287256349084655ull}}, {{1137651957614855643ull, 459610158535448ull}}, {{8288819195575705161ull, 367688126828358ull}}, {{14009752985944384775ull, 294150501462686ull}}, {{15036907148027194994ull, 470640802340298ull}}, {{961479274196025025ull, 376512641872239ull}}, {{4458532234098730343ull, 301210113497791ull}}, {{18201698018783699519ull, 481936181596465ull}}, {{14561358415026959615ull, 385548945277172ull}}, {{4270389102537747046ull, 308439156221738ull}}, {{3143273749318484950ull, 493502649954781ull}}, {{17272014258422429253ull, 394802119963824ull}}, {{17506960221479853725ull, 315841695971059ull}}, {{16943089910142034991ull, 505346713553695ull}}, {{13554471928113627993ull, 404277370842956ull}}, {{7154228727748992071ull, 323421896674365ull}}, {{11446765964398387314ull, 517475034678984ull}}, {{12846761586260620174ull, 413980027743187ull}}, {{2898711639524675493ull, 331184022194550ull}}, {{4637938623239480789ull, 529894435511280ull}}, {{3710350898591584631ull, 423915548409024ull}}, {{6657629533615178028ull, 339132438727219ull}}, {{18030904883268105491ull, 542611901963550ull}}, {{14424723906614484393ull, 434089521570840ull}}, {{11539779125291587514ull, 347271617256672ull}}, {{3706251341498898730ull, 555634587610676ull}}, {{17722396332166760277ull, 444507670088540ull}}, {{14177917065733408221ull, 355606136070832ull}}, {{3963636023102905931ull, 284484908856666ull}}, {{17409864081190380459ull, 455175854170665ull}}, {{13927891264952304367ull, 364140683336532ull}}, {{3763615382478022847ull, 291312546669226ull}}, {{17089831056190567525ull, 466100074670761ull}}, {{9982516030210543697ull, 372880059736609ull}}, {{11675361638910345281ull, 298304047789287ull}}, {{3923183363288911157ull, 477286476462860ull}}, {{3138546690631128925ull, 381829181170288ull}}, {{9889534981988723786ull, 305463344936230ull}}, {{15823255971181958059ull, 488741351897968ull}}, {{1590558332719835477ull, 390993081518375ull}}, {{1272446666175868382ull, 312794465214700ull}}, {{2035914665881389411ull, 500471144343520ull}}, {{1628731732705111529ull, 400376915474816ull}}, {{16060380645131730516ull, 320301532379852ull}}, {{10939213773243127533ull, 512482451807764ull}}, {{12440719833336412349ull, 409985961446211ull}}, {{6263227051927219556ull, 327988769156969ull}}, {{17399860912567371936ull, 524782030651150ull}}, {{13919888730053897549ull, 419825624520920ull}}, {{11135910984043118039ull, 335860499616736ull}}, {{10438759944985168216ull, 537376799386778ull}}, {{15729705585471955219ull, 429901439509422ull}}, {{5205066838893743529ull, 343921151607538ull}}, {{4638758127488079324ull, 550273842572061ull}}, {{21657687248553136ull, 440219074057649ull}}, {{3706674964540752832ull, 352175259246119ull}}, {{6654688786374512588ull, 281740207396895ull}}, {{10647502058199220142ull, 450784331835032ull}}, {{1139304017075555467ull, 360627465468026ull}}, {{15668838472628085666ull, 288501972374420ull}}, {{6623397482495385450ull, 461603155799073ull}}, {{12677415615480129006ull, 369282524639258ull}}, {{17520630121867923851ull, 295426019711406ull}}, {{2207566491795305900ull, 472681631538251ull}}, {{16523448452403886013ull, 378145305230600ull}}, {{13218758761923108810ull, 302516244184480ull}}, {{2703269945367422481ull, 484025990695169ull}}, {{5851964771035848308ull, 387220792556135ull}}, {{4681571816828678646ull, 309776634044908ull}}, {{3801166092183975511ull, 495642614471853ull}}, {{10419630503231001055ull, 396514091577482ull}}, {{957006773100980197ull, 317211273261986ull}}, {{12599257281187299286ull, 507538037219177ull}}, {{2700708195466018782ull, 406030429775342ull}}, {{13228613000598545995ull, 324824343820273ull}}, {{17476431986215763269ull, 519718950112437ull}}, {{6602447959488789969ull, 415775160089950ull}}, {{5281958367591031975ull, 332620128071960ull}}, {{8451133388145651160ull, 532192204915136ull}}, {{3071557895774610605ull, 425753763932109ull}}, {{6146595131361598807ull, 340603011145687ull}}, {{13523901024920468415ull, 544964817833099ull}}, {{14508469634678285055ull, 435971854266479ull}}, {{15296124522484538367ull, 348777483413183ull}}, {{2337706347523799448ull, 558043973461094ull}}, {{5559513892760949882ull, 446435178768875ull}}, {{4447611114208759905ull, 357148143015100ull}}, {{3558088891367007924ull, 285718514412080ull}}, {{5692942226187212679ull, 457149623059328ull}}, {{11933051410433590789ull, 365719698447462ull}}, {{2167743498863051985ull, 292575758757970ull}}, {{3468389598180883176ull, 468121214012752ull}}, {{13842758122770437511ull, 374496971210201ull}}, {{7384857683474439685ull, 299597576968161ull}}, {{4437074664075282850ull, 479356123149058ull}}, {{10928357360744046927ull, 383484898519246ull}}, {{5053337073853327218ull, 306787918815397ull}}, {{11774688132907233872ull, 490860670104635ull}}, {{9419750506325787098ull, 392688536083708ull}}, {{14914498034544450324ull, 314150828866966ull}}, {{16484499225787299873ull, 502641326187146ull}}, {{9498250565887929575ull, 402113060949717ull}}, {{219902823226523014ull, 321690448759774ull}}, {{7730542146646257468ull, 514704718015638ull}}, {{13563131346800826621ull, 411763774412510ull}}, {{10850505077440661297ull, 329411019530008ull}}, {{13671459309163147752ull, 527057631248013ull}}, {{18315865076814338848ull, 421646104998410ull}}, {{14652692061451471078ull, 337316883998728ull}}, {{1308214409870891786ull, 539707014397966ull}}, {{15803966786864354722ull, 431765611518372ull}}, {{5264475800007663131ull, 345412489214698ull}}, {{4733812465270350686ull, 552659982743517ull}}, {{14855096416442011519ull, 442127986194813ull}}, {{816030688927878245ull, 353702388955851ull}}, {{15410219810109943889ull, 282961911164680ull}}, {{6209607622466358606ull, 452739057863489ull}}, {{8657034912714997208ull, 362191246290791ull}}, {{3236279115430087443ull, 289752997032633ull}}, {{1488697769946229586ull, 463604795252213ull}}, {{8569655845440804315ull, 370883836201770ull}}, {{6855724676352643452ull, 296707068961416ull}}, {{3590461852680408877ull, 474731310338266ull}}, {{17629764741111968395ull, 379785048270612ull}}, {{6725114163405754069ull, 303828038616490ull}}, {{10760182661449206511ull, 486124861786384ull}}, {{12297494943901275532ull, 388899889429107ull}}, {{2459298325637199779ull, 311119911543286ull}}, {{15002923765245250616ull, 497791858469257ull}}, {{4623641382712379847ull, 398233486775406ull}}, {{9564291427993554ull, 318586789420325ull}}, {{15302866284789687ull, 509738863072520ull}}, {{12242293027831749ull, 407791090458016ull}}, {{14767189093389906692ull, 326232872366412ull}}, {{8870107290456209415ull, 521972595786260ull}}, {{7096085832364967532ull, 417578076629008ull}}, {{13055566295375794672ull, 334062461303206ull}}, {{13510208443117450829ull, 534499938085130ull}}, {{10808166754493960663ull, 427599950468104ull}}, {{12335882218337078853ull, 342079960374483ull}}, {{16048062734597415842ull, 547327936599173ull}}, {{1770403743452201704ull, 437862349279339ull}}, {{5105671809503671686ull, 350289879423471ull}}, {{790377265722054052ull, 560463807077554ull}}, {{4321650627319553565ull, 448371045662043ull}}, {{10836018131339463498ull, 358696836529634ull}}, {{12358163319813481122ull, 286957469223707ull}}, {{5015666052733928502ull, 459131950757932ull}}, {{15080579286412873771ull, 367305560606345ull}}, {{12064463429130299017ull, 293844448485076ull}}, {{11924443857124657781ull, 470151117576122ull}}, {{2160857456215905578ull, 376120894060898ull}}, {{9107383594456545109ull, 300896715248718ull}}, {{10882464936388561851ull, 481434744397949ull}}, {{12395320763852759804ull, 385147795518359ull}}, {{13605605425824118166ull, 308118236414687ull}}, {{7011573422350947774ull, 492989178263500ull}}, {{5609258737880758219ull, 394391342610800ull}}, {{4487406990304606575ull, 315513074088640ull}}, {{7179851184487370520ull, 504820918541824ull}}, {{9433229762331806739ull, 403856734833459ull}}, {{11235932624607355715ull, 323085387866767ull}}, {{3220096940404127851ull, 516936620586828ull}}, {{9954775181807122927ull, 413549296469462ull}}, {{585122515961877695ull, 330839437175570ull}}, {{936196025539004313ull, 529343099480912ull}}, {{11817003264656934420ull, 423474479584729ull}}, {{13142951426467457859ull, 338779583667783ull}}, {{17339373467606022251ull, 542047333868453ull}}, {{2803452329859086831ull, 433637867094763ull}}, {{9621459493371090111ull, 346910293675810ull}}, {{15394335189393744178ull, 555056469881296ull}}, {{8626119336773085019ull, 444045175905037ull}}, {{17968941913644198985ull, 355236140724029ull}}, {{18064502345657269511ull, 284188912579223ull}}, {{6767110864600169279ull, 454702260126758ull}}, {{12792386321163956069ull, 363761808101406ull}}, {{6544560242189254532ull, 291009446481125ull}}, {{10471296387502807252ull, 465615114369800ull}}, {{8377037110002245801ull, 372492091495840ull}}, {{6701629688001796641ull, 297993673196672ull}}, {{14411956315544784949ull, 476789877114675ull}}, {{11529565052435827959ull, 381431901691740ull}}, {{9223652041948662367ull, 305145521353392ull}}, {{448008150218495ull, 488232834165428ull}}, {{7379056036003995442ull, 390586267332342ull}}, {{16971291273028927323ull, 312469013865873ull}}, {{5017973148394821778ull, 499950422185398ull}}, {{11393076148199678069ull, 399960337748318ull}}, {{16493158548043563102ull, 319968270198654ull}}, {{15321007232643969993ull, 511949232317847ull}}, {{4878108156631355348ull, 409559385854278ull}}, {{11281184154788904925ull, 327647508683422ull}}, {{3292499388694606587ull, 524236013893476ull}}, {{17391394769923326562ull, 419388811114780ull}}, {{13913115815938661250ull, 335511048891824ull}}, {{11192938861276127030ull, 536817678226919ull}}, {{12643699903762811947ull, 429454142581535ull}}, {{10114959923010249558ull, 343563314065228ull}}, {{12494587062074488970ull, 549701302504365ull}}, {{9995669649659591176ull, 439761042003492ull}}, {{617838090243852294ull, 351808833602794ull}}, {{8367238573873984317ull, 562894133764470ull}}, {{6693790859099187453ull, 450315307011576ull}}, {{1665683872537439639ull, 360252245609261ull}}, {{16089942356997593004ull, 288201796487408ull}}, {{3607814882744686868ull, 461122874379854ull}}, {{6575600720937659817ull, 368898299503883ull}}, {{12639178206233948500ull, 295118639603106ull}}, {{12843987500490496954ull, 472189823364970ull}}, {{10275190000392397563ull, 377751858691976ull}}, {{4530803185572007727ull, 302201486953581ull}}, {{18317331541140943334ull, 483522379125729ull}}, {{18343214047654664990ull, 386817903300583ull}}, {{3606524793898001022ull, 309454322640467ull}}, {{9459788484978711959ull, 495126916224747ull}}, {{189133158499148921ull, 396101532979798ull}}, {{7530004156283139783ull, 316881226383838ull}}, {{8358657835311113330ull, 507009962214141ull}}, {{2997577453506980341ull, 405607969771313ull}}, {{9776759592289404919ull, 324486375817050ull}}, {{15642815347663047870ull, 519178201307280ull}}, {{12514252278130438296ull, 415342561045824ull}}, {{13700750637246260960ull, 332274048836659ull}}, {{10853154575368286567ull, 531638478138655ull}}, {{8682523660294629253ull, 425310782510924ull}}, {{10635367742977613726ull, 340248626008739ull}}, {{5948541944538450992ull, 544397801613983ull}}, {{12137531185114581440ull, 435518241291186ull}}, {{6020676133349754829ull, 348414593032949ull}}, {{17011779442843428373ull, 557463348852718ull}}, {{2541377110049011728ull, 445970679082175ull}}, {{2033101688039209383ull, 356776543265740ull}}, {{1626481350431367506ull, 285421234612592ull}}, {{6291718975432098333ull, 456673975380147ull}}, {{16101421624571409636ull, 365339180304117ull}}, {{5502439670173307062ull, 292271344243294ull}}, {{16182601101761111946ull, 467634150789270ull}}, {{12946080881408889557ull, 374107320631416ull}}, {{6667515890385201322ull, 299285856505133ull}}, {{6978676609874411793ull, 478857370408213ull}}, {{12961638917383350080ull, 383085896326570ull}}, {{10369311133906680064ull, 306468717061256ull}}, {{9212200184766867457ull, 490349947298010ull}}, {{7369760147813493965ull, 392279957838408ull}}, {{13274505747734615819ull, 313823966270726ull}}, {{13860511566891564664ull, 502118346033162ull}}, {{3709711624029431084ull, 401694676826530ull}}, {{2967769299223544867ull, 321355741461224ull}}, {{12127128508241492434ull, 514169186337958ull}}, {{17080400436077014594ull, 411335349070366ull}}, {{9974971534119701352ull, 329068279256293ull}}, {{12270605639849611840ull, 526509246810069ull}}, {{13505833326621599795ull, 421207397448055ull}}, {{10804666661297279836ull, 336965917958444ull}}, {{6219420213849916768ull, 539145468733511ull}}, {{1286187356338023091ull, 431316374986809ull}}, {{4718298699812328796ull, 345053099989447ull}}, {{11238626734441636397ull, 552084959983115ull}}, {{8990901387553309118ull, 441667967986492ull}}, {{18260767554268378264ull, 353334374389193ull}}, {{3540567599188971641ull, 282667499511355ull}}, {{5664908158702354626ull, 452267999218168ull}}, {{11910624156445704347ull, 361814399374534ull}}, {{13217848139898473801ull, 289451519499627ull}}, {{6391161764869916789ull, 463122431199404ull}}, {{8802278226637843754ull, 370497944959523ull}}, {{14420520210794095650ull, 296398355967618ull}}, {{936739448819091101ull, 474237369548190ull}}, {{749391559055272880ull, 379389895638552ull}}, {{11667559691469949274ull, 303511916510841ull}}, {{11289397876868098192ull, 485619066417346ull}}, {{5342169486752568230ull, 388495253133877ull}}, {{15341782033627785554ull, 310796202507101ull}}, {{17168153624320636240ull, 497273924011362ull}}, {{6355825269972688346ull, 397819139209090ull}}, {{5084660215978150676ull, 318255311367272ull}}, {{11824805160306951406ull, 509208498187635ull}}, {{9459844128245561124ull, 407366798550108ull}}, {{14946572932080269546ull, 325893438840086ull}}, {{16535819061844610627ull, 521429502144138ull}}, {{2160608805249957532ull, 417143601715311ull}}, {{16485882303167607318ull, 333714881372248ull}}, {{4241318796616709770ull, 533943810195598ull}}, {{10771752666777188463ull, 427155048156478ull}}, {{15996099762905571416ull, 341724038525182ull}}, {{10836364361681272974ull, 546758461640292ull}}, {{1290393859861197733ull, 437406769312234ull}}, {{4721663902630868509ull, 349925415449787ull}}, {{11244011058951299938ull, 559880664719659ull}}, {{12684557661902950274ull, 447904531775727ull}}, {{2768948500038539572ull, 358323625420582ull}}, {{13283205244256562627ull, 286658900336465ull}}, {{2806384317100948588ull, 458654240538345ull}}, {{2245107453680758870ull, 366923392430676ull}}, {{16553481221912248389ull, 293538713944540ull}}, {{8038825881350045807ull, 469661942311265ull}}, {{6431060705080036645ull, 375729553849012ull}}, {{16212895008289760286ull, 300583643079209ull}}, {{14872585569037885488ull, 480933828926735ull}}, {{11898068455230308390ull, 384747063141388ull}}, {{16897152393668067358ull, 307797650513110ull}}, {{8588699756159356158ull, 492476240820977ull}}, {{17939006249153215896ull, 393980992656781ull}}, {{10661856184580662393ull, 315184794125425ull}}, {{17058969895329059830ull, 504295670600680ull}}, {{13647175916263247864ull, 403436536480544ull}}, {{14607089547752508614ull, 322749229184435ull}}, {{4924599202694462167ull, 516398766695097ull}}, {{15007725806381300703ull, 413119013356077ull}}, {{4627483015621219916ull, 330495210684862ull}}, {{11093321639735862189ull, 528792337095779ull}}, {{12564006126530600074ull, 423033869676623ull}}, {{17429902530708300706ull, 338427095741298ull}}, {{5751751160681819190ull, 541483353186078ull}}, {{11980098558029275998ull, 433186682548862ull}}, {{2205381216939600152ull, 346549346039090ull}}, {{3528609947103360244ull, 554478953662544ull}}, {{6512236772424598518ull, 443583162930035ull}}, {{5209789417939678814ull, 354866530344028ull}}, {{11546529163835563698ull, 283893224275222ull}}, {{3717051403169260624ull, 454229158840356ull}}, {{17731036381503049792ull, 363383327072284ull}}, {{17874177919944350157ull, 290706661657827ull}}, {{13841289412943318958ull, 465130658652524ull}}, {{14762380345096565490ull, 372104526922019ull}}, {{15499253090819162715ull, 297683621537615ull}}, {{6352060871601108728ull, 476293794460185ull}}, {{5081648697280886982ull, 381035035568148ull}}, {{11444016587308530232ull, 304828028454518ull}}, {{14621077724951738048ull, 487724845527229ull}}, {{15386210994703300762ull, 390179876421783ull}}, {{1240922351536909640ull, 312143901137427ull}}, {{5674824577200965747ull, 499430241819883ull}}, {{11918557291244593244ull, 399544193455906ull}}, {{5845497018253764272ull, 319635354764725ull}}, {{9352795229206022835ull, 511416567623560ull}}, {{7482236183364818268ull, 409133254098848ull}}, {{13364486576175675261ull, 327306603279078ull}}, {{17693829707139170094ull, 523690565246525ull}}, {{14155063765711336075ull, 418952452197220ull}}, {{11324051012569068860ull, 335161961757776ull}}, {{10739783990626689530ull, 536259138812442ull}}, {{1213129563017530978ull, 429007311049954ull}}, {{4659852465155935105ull, 343205848839963ull}}, {{3766415129507585846ull, 549129358143941ull}}, {{17770527362573709969ull, 439303486515152ull}}, {{6837724260575147329ull, 351442789212122ull}}, {{14629707631662146050ull, 562308462739395ull}}, {{11703766105329716840ull, 449846770191516ull}}, {{5673664069521863148ull, 359877416153213ull}}, {{11917628885101311165ull, 287901932922570ull}}, {{621462142452546248ull, 460643092676113ull}}, {{7875867343445857645ull, 368514474140890ull}}, {{6300693874756686116ull, 294811579312712ull}}, {{13770459014352608109ull, 471698526900339ull}}, {{14705716026223996810ull, 377358821520271ull}}, {{8075224006237287125ull, 301887057216217ull}}, {{16609707224721569723ull, 483019291545947ull}}, {{5909068150293435132ull, 386415433236758ull}}, {{12105952149718568752ull, 309132346589406ull}}, {{11990825810065889357ull, 494611754543050ull}}, {{9592660648052711486ull, 395689403634440ull}}, {{7674128518442169188ull, 316551522907552ull}}, {{15967954444249381025ull, 506482436652083ull}}, {{1706317111173773850ull, 405185949321667ull}}, {{12433100133164750050ull, 324148759457333ull}}, {{16203611398321689757ull, 518638015131733ull}}, {{1894842674431620836ull, 414910412105387ull}}, {{12583920583771027638ull, 331928329684309ull}}, {{9066226489807913251ull, 531085327494895ull}}, {{7252981191846330601ull, 424868261995916ull}}, {{2113036138735154157ull, 339894609596733ull}}, {{18138253080943887945ull, 543831375354772ull}}, {{7131904835271289710ull, 435065100283818ull}}, {{13084221497700852414ull, 348052080227054ull}}, {{9866707952095632893ull, 556883328363287ull}}, {{514668732192685668ull, 445506662690630ull}}, {{411734985754148534ull, 356405330152504ull}}, {{4018736803345229150ull, 285124264122003ull}}, {{2740630070610456318ull, 456198822595205ull}}, {{2192504056488365054ull, 364959058076164ull}}, {{5443352059932602366ull, 291967246460931ull}}, {{1330665666408343140ull, 467147594337490ull}}, {{1064532533126674512ull, 373718075469992ull}}, {{11919672470727070579ull, 298974460375993ull}}, {{15382127138421402604ull, 478359136601589ull}}, {{15995050525479032406ull, 382687309281271ull}}, {{9106691605641315602ull, 306149847425017ull}}, {{18260055383768015286ull, 489839755880027ull}}, {{7229346677530591582ull, 391871804704022ull}}, {{16851523786250204235ull, 313497443763217ull}}, {{12205042799032685484ull, 501595910021148ull}}, {{17142731868709969034ull, 401276728016918ull}}, {{2646139050742244257ull, 321021382413535ull}}, {{4233822481187590812ull, 513634211861656ull}}, {{18144453243917713942ull, 410907369489324ull}}, {{18204911409876081477ull, 328725895591459ull}}, {{18059811811575999394ull, 525961432946335ull}}, {{14447849449260799515ull, 420769146357068ull}}, {{490233115182908642ull, 336615317085655ull}}, {{784372984292653828ull, 538584507337048ull}}, {{8006196016917943708ull, 430867605869638ull}}, {{13783654443018175613ull, 344694084695710ull}}, {{3607103035119529365ull, 551510535513137ull}}, {{13953728872321354462ull, 441208428410509ull}}, {{14852331912598993892ull, 352966742728407ull}}, {{4503167900595374467ull, 282373394182726ull}}, {{18273115085178330118ull, 451797430692361ull}}, {{10929143253400753771ull, 361437944553889ull}}, {{12432663417462513340ull, 289150355643111ull}}, {{12513563838456200698ull, 462640569028978ull}}, {{17389548700248781204ull, 370112455223182ull}}, {{6532941330715204317ull, 296089964178546ull}}, {{3074008499660506261ull, 473743942685674ull}}, {{6148555614470315332ull, 378995154148539ull}}, {{8608193306318162589ull, 303196123318831ull}}, {{6394411660625239496ull, 485113797310130ull}}, {{5115529328500191597ull, 388091037848104ull}}, {{7781772277542063600ull, 310472830278483ull}}, {{8761486829325391438ull, 496756528445573ull}}, {{14387887092944133796ull, 397405222756458ull}}, {{442263230129576067ull, 317924178205167ull}}, {{4396969982949232031ull, 508678685128267ull}}, {{14585622430585116595ull, 406942948102613ull}}, {{600451500242362306ull, 325554358482091ull}}, {{12028768844613510660ull, 520886973571345ull}}, {{9623015075690808528ull, 416709578857076ull}}, {{4009063245810736499ull, 333367663085661ull}}, {{17482547637522909368ull, 533388260937057ull}}, {{6607340480534506848ull, 426710608749646ull}}, {{1596523569685695155ull, 341368486999717ull}}, {{6243786526239022571ull, 546189579199547ull}}, {{16063075665216949027ull, 436951663359637ull}}, {{5471762902689738575ull, 349561330687710ull}}, {{8754820644303581720ull, 559298129100336ull}}, {{3314507700700955053ull, 447438503280269ull}}, {{6340954975302674365ull, 357950802624215ull}}, {{5072763980242139492ull, 286360642099372ull}}, {{11805771183129333511ull, 458177027358995ull}}, {{9444616946503466809ull, 366541621887196ull}}, {{3866344742460863124ull, 293233297509757ull}}, {{9875500402679291321ull, 469173276015611ull}}, {{4211051507401522734ull, 375338620812489ull}}, {{7058190020663128510ull, 300270896649991ull}}, {{3914406403577184970ull, 480433434639986ull}}, {{17888920381829389269ull, 384346747711988ull}}, {{3243089861237780445ull, 307477398169591ull}}, {{16256990222206179682ull, 491963837071345ull}}, {{13005592177764943746ull, 393571069657076ull}}, {{6715124927470044673ull, 314856855725661ull}}, {{3365502254468250831ull, 503770969161058ull}}, {{10071099433058421311ull, 403016775328846ull}}, {{4367530731704826726ull, 322413420263077ull}}, {{10677397985469633085ull, 515861472420923ull}}, {{15920616017859527114ull, 412689177936738ull}}, {{1668446370061890721ull, 330151342349391ull}}, {{13737560636324756124ull, 528242147759025ull}}, {{10990048509059804899ull, 422593718207220ull}}, {{8792038807247843919ull, 338074974565776ull}}, {{6688564462112729625ull, 540919959305242ull}}, {{16418898013915914669ull, 432735967444193ull}}, {{2067071966907000766ull, 346188773955355ull}}, {{3307315147051201226ull, 553902038328568ull}}, {{10024549747124781627ull, 443121630662854ull}}, {{11708988612441735624ull, 354497304530283ull}}, {{16745888519437209146ull, 283597843624226ull}}, {{967979927906162371ull, 453756549798763ull}}, {{8153081571808750543ull, 363005239839010ull}}, {{6522465257447000435ull, 290404191871208ull}}, {{6746595597173290372ull, 464646706993933ull}}, {{12775974107222452944ull, 371717365595146ull}}, {{6531430471036052032ull, 297373892476117ull}}, {{14139637568399593575ull, 475798227961787ull}}, {{3933012425235854213ull, 380638582369430ull}}, {{3146409940188683371ull, 304510865895544ull}}, {{12412953533785714040ull, 487217385432870ull}}, {{9930362827028571232ull, 389773908346296ull}}, {{4254941446880946662ull, 311819126677037ull}}, {{10497255129751424983ull, 498910602683259ull}}, {{12087152918543050309ull, 399128482146607ull}}, {{2291024705350619601ull, 319302785717286ull}}, {{14733685972786722331ull, 510884457147657ull}}, {{4408251148745557219ull, 408707565718126ull}}, {{18283996177964087068ull, 326966052574500ull}}, {{10807649811032987692ull, 523145684119201ull}}, {{4956771034084479831ull, 418516547295361ull}}, {{276068012525673541ull, 334813237836289ull}}, {{7820406449524898313ull, 535701180538062ull}}, {{17324371603845649620ull, 428560944430449ull}}, {{17548846097818430019ull, 342848755544359ull}}, {{17010107312283757061ull, 548558008870975ull}}, {{13608085849827005649ull, 438846407096780ull}}, {{10886468679861604519ull, 351077125677424ull}}, {{6350303443552836261ull, 561723401083879ull}}, {{8769591569584179332ull, 449378720867103ull}}, {{14394370885151164112ull, 359502976693682ull}}, {{4136799078637110643ull, 287602381354946ull}}, {{17686924970045107998ull, 460163810167913ull}}, {{3081493531810355429ull, 368131048134331ull}}, {{17222590084415925636ull, 294504838507464ull}}, {{16488097690839750048ull, 471207741611943ull}}, {{2122431708446069069ull, 376966193289555ull}}, {{1697945366756855255ull, 301572954631644ull}}, {{10095410216294789055ull, 482516727410630ull}}, {{8076328173035831244ull, 386013381928504ull}}, {{10150411353170575318ull, 308810705542803ull}}, {{12551309350331010186ull, 494097128868485ull}}, {{10041047480264808149ull, 395277703094788ull}}, {{15411535613695667165ull, 316222162475830ull}}, {{6211712908203515849ull, 505955459961329ull}}, {{8658719141304723002ull, 404764367969063ull}}, {{14305672942527599048ull, 323811494375250ull}}, {{4442332634334606861ull, 518098391000401ull}}, {{18311261366435326781ull, 414478712800320ull}}, {{14649009093148261425ull, 331582970240256ull}}, {{16059716919553397634ull, 530532752384410ull}}, {{12847773535642718107ull, 424426201907528ull}}, {{17656916457997995132ull, 339540961526022ull}}, {{13493671073829150919ull, 543265538441636ull}}, {{7105588044321410412ull, 434612430753309ull}}, {{9373819250199038652ull, 347689944602647ull}}, {{240715541350820551ull, 556303911364236ull}}, {{14949967692048297734ull, 445043129091388ull}}, {{891927709412907217ull, 356034503273111ull}}, {{15470937426497967066ull, 284827602618488ull}}, {{2617406993945285367ull, 455724164189582ull}}, {{13161972039381959263ull, 364579331351665ull}}, {{10529577631505567411ull, 291663465081332ull}}, {{2089928951441266565ull, 466661544130132ull}}, {{12739989605378744221ull, 373329235304105ull}}, {{10191991684302995377ull, 298663388243284ull}}, {{5239140250659061634ull, 477861421189255ull}}, {{4191312200527249307ull, 382289136951404ull}}, {{7042398575163709769ull, 305831309561123ull}}, {{7578488905520025307ull, 489330095297797ull}}, {{17130837568641751215ull, 391464076238237ull}}, {{6325972425429580325ull, 313171260990590ull}}, {{10121555880687328521ull, 501074017584944ull}}, {{11786593519291773140ull, 400859214067955ull}}, {{9429274815433418512ull, 320687371254364ull}}, {{4018793260467738650ull, 513099794006983ull}}, {{10593732237858011566ull, 410479835205586ull}}, {{4785636975544498930ull, 328383868164469ull}}, {{15035716790355018934ull, 525414189063150ull}}, {{12028573432284015147ull, 420331351250520ull}}, {{9622858745827212118ull, 336265081000416ull}}, {{8017876363839718742ull, 538024129600666ull}}, {{2724952276329864670ull, 430419303680533ull}}, {{9558659450547712383ull, 344335442944426ull}}, {{7915157491392519166ull, 550936708711082ull}}, {{17400172437339746302ull, 440749366968865ull}}, {{13920137949871797042ull, 352599493575092ull}}, {{3757412730413616987ull, 282079594860074ull}}, {{13390557998145607826ull, 451327351776118ull}}, {{18091144028000306907ull, 361061881420894ull}}, {{18162264037142155849ull, 288849505136715ull}}, {{10612878385717897742ull, 462159208218745ull}}, {{8490302708574318193ull, 369727366574996ull}}, {{3102893352117544231ull, 295781893259997ull}}, {{8653978178129981094ull, 473251029215995ull}}, {{6923182542503984875ull, 378600823372796ull}}, {{1849197219261277577ull, 302880658698237ull}}, {{6648064365559954446ull, 484609053917179ull}}, {{9007800307189873880ull, 387687243133743ull}}, {{14584937875235719750ull, 310149794506994ull}}, {{12267854156151420631ull, 496239671211191ull}}, {{6124934510179226182ull, 396991736968953ull}}, {{12278645237627201592ull, 317593389575162ull}}, {{4888437121235881254ull, 508149423320260ull}}, {{3910749696988705003ull, 406519538656208ull}}, {{10507297387074784649ull, 325215630924966ull}}, {{9432978189835834792ull, 520345009479946ull}}, {{3857033737126757510ull, 416276007583957ull}}, {{14153673433927136978ull, 333020806067165ull}}, {{4199133420573867549ull, 532833289707465ull}}, {{3359306736459094039ull, 426266631765972ull}}, {{13755491833393006201ull, 341013305412777ull}}, {{7251391674461168629ull, 545621288660444ull}}, {{9490462154310845226ull, 436497030928355ull}}, {{7592369723448676181ull, 349197624742684ull}}, {{1079745113292150920ull, 558716199588295ull}}, {{863796090633720736ull, 446972959670636ull}}, {{15448432131474617881ull, 357578367736508ull}}, {{1290699260953963335ull, 286062694189207ull}}, {{5754467632268251660ull, 457700310702731ull}}, {{914225291072691005ull, 366160248562185ull}}, {{731380232858152804ull, 292928198849748ull}}, {{15927603631540685779ull, 468685118159596ull}}, {{9052734090490638300ull, 374948094527677ull}}, {{18310233716618241609ull, 299958475622141ull}}, {{3470932243395814313ull, 479933560995427ull}}, {{13844792238942382420ull, 383946848796341ull}}, {{7386484976411995613ull, 307157479037073ull}}, {{8129027147517282657ull, 491451966459317ull}}, {{17571268162239557095ull, 393161573167453ull}}, {{2988968085565914707ull, 314529258533963ull}}, {{1093000122163553208ull, 503246813654341ull}}, {{15631795356698483859ull, 402597450923472ull}}, {{5126738655874966440ull, 322077960738778ull}}, {{4513433034658035982ull, 515324737182045ull}}, {{3610746427726428785ull, 412259789745636ull}}, {{17645992401148784321ull, 329807831796508ull}}, {{6097494953386592975ull, 527692530874414ull}}, {{8567344777451184703ull, 422154024699531ull}}, {{3164527007219037439ull, 337723219759625ull}}, {{5063243211550459903ull, 540357151615400ull}}, {{4050594569240367922ull, 432285721292320ull}}, {{3240475655392294338ull, 345828577033856ull}}, {{16252807492853401910ull, 553325723254169ull}}, {{16691594809024631851ull, 442660578603335ull}}, {{13353275847219705481ull, 354128462882668ull}}, {{18061318307259585031ull, 283302770306134ull}}, {{17830062847389605080ull, 453284432489815ull}}, {{14264050277911684064ull, 362627545991852ull}}, {{4032542592845526605ull, 290102036793482ull}}, {{10141416963294752891ull, 464163258869571ull}}, {{4423784755893891990ull, 371330607095657ull}}, {{14607074248940844561ull, 297064485676525ull}}, {{4924574724595799682ull, 475303177082441ull}}, {{250310964934729422ull, 380242541665953ull}}, {{7578946401431604184ull, 304194033332762ull}}, {{15815663057032477018ull, 486710453332419ull}}, {{16341879260367891938ull, 389368362665935ull}}, {{13073503408294313550ull, 311494690132748ull}}, {{17228256638528991357ull, 498391504212397ull}}, {{6403907681339372439ull, 398713203369918ull}}, {{12501823774555318598ull, 318970562695934ull}}, {{8934871595062778787ull, 510352900313495ull}}, {{7147897276050223030ull, 408282320250796ull}}, {{2028969006098268100ull, 326625856200637ull}}, {{6935699224499139284ull, 522601369921019ull}}, {{9237908194341221750ull, 418081095936815ull}}, {{7390326555472977400ull, 334464876749452ull}}, {{15513871303498674164ull, 535143802799123ull}}, {{1343050598573208361ull, 428115042239299ull}}, {{4763789293600477012ull, 342492033791439ull}}, {{15000760499244583866ull, 547987254066302ull}}, {{4621910769911846446ull, 438389803253042ull}}, {{14765575060155208127ull, 350711842602433ull}}, {{1488827207796871064ull, 561138948163894ull}}, {{4880410580979407174ull, 448911158531115ull}}, {{3904328464783525739ull, 359128926824892ull}}, {{14191509216052551561ull, 287303141459913ull}}, {{570321857232620558ull, 459685026335862ull}}, {{11524303930011827416ull, 367748021068689ull}}, {{12908791958751372256ull, 294198416854951ull}}, {{13275369504518374964ull, 470717466967922ull}}, {{3241597974130879324ull, 376573973574338ull}}, {{9971976008788524106ull, 301259178859470ull}}, {{15955161614061638570ull, 482014686175152ull}}, {{5385431661765490209ull, 385611748940122ull}}, {{15376391773638123137ull, 308489399152097ull}}, {{9844831578853355726ull, 493583038643356ull}}, {{4186516448340774258ull, 394866430914685ull}}, {{3349213158672619406ull, 315893144731748ull}}, {{1669392239134280727ull, 505429031570797ull}}, {{12403560235533155551ull, 404343225256637ull}}, {{2544150558942703794ull, 323474580205310ull}}, {{4070640894308326071ull, 517559328328496ull}}, {{18013907974414302150ull, 414047462662796ull}}, {{10721777564789531397ull, 331237970130237ull}}, {{2397448844695608942ull, 529980752208380ull}}, {{1917959075756487153ull, 423984601766704ull}}, {{5223716075347100046ull, 339187681413363ull}}, {{4668596905813449750ull, 542700290261381ull}}, {{45528709908849477ull, 434160232209105ull}}, {{36422967927079582ull, 347328185767284ull}}, {{7436974378167147977ull, 555725097227654ull}}, {{9638928317275628705ull, 444580077782123ull}}, {{15089840283304323610ull, 355664062225698ull}}, {{1003825782417727918ull, 284531249780559ull}}, {{8984818881352185316ull, 455249999648894ull}}, {{10877203919823658576ull, 364199999719115ull}}, {{8701763135858926861ull, 291359999775292ull}}, {{17612169832116193301ull, 466175999640467ull}}, {{6711038236209133994ull, 372940799712374ull}}, {{9058179403709217518ull, 298352639769899ull}}, {{3425040601709017060ull, 477364223631839ull}}, {{6429381296109123971ull, 381891378905471ull}}, {{1454156222145388854ull, 305513103124377ull}}, {{6015998770174532489ull, 488820964999003ull}}, {{12191496645623446638ull, 391056771999202ull}}, {{2374499687014936664ull, 312845417599362ull}}, {{7488548313965808985ull, 500552668158979ull}}, {{9680187465914557511ull, 400442134527183ull}}, {{15122847602215466655ull, 320353707621746ull}}, {{16817858534060926003ull, 512565932194794ull}}, {{17143635641990651125ull, 410052745755835ull}}, {{13714908513592520900ull, 328042196604668ull}}, {{18254504807006123117ull, 524867514567469ull}}, {{18292952660346808817ull, 419894011653975ull}}, {{14634362128277447053ull, 335915209323180ull}}, {{4968235331534363670ull, 537464334917089ull}}, {{7663937079969401259ull, 429971467933671ull}}, {{2441800849233610684ull, 343977174346937ull}}, {{7596230173515687418ull, 550363478955099ull}}, {{9766332953554460257ull, 440290783164079ull}}, {{11502415177585478529ull, 352232626531263ull}}, {{16580629771552203469ull, 281786101225010ull}}, {{8082263560773973935ull, 450857761960017ull}}, {{17533857292844910118ull, 360686209568013ull}}, {{2959039390050197124ull, 288548967654411ull}}, {{15802509468306046369ull, 461678348247057ull}}, {{5263309945161016449ull, 369342678597646ull}}, {{521299141386902836ull, 295474142878117ull}}, {{4523427440960954861ull, 472758628604987ull}}, {{14686788396994494858ull, 378206902883989ull}}, {{15438779532337506209ull, 302565522307191ull}}, {{17323349622256189289ull, 484104835691506ull}}, {{10169330883063041108ull, 387283868553205ull}}, {{8135464706450432886ull, 309827094842564ull}}, {{1948697086094961649ull, 495723351748103ull}}, {{8937655298359789965ull, 396578681398482ull}}, {{18218170682913562942ull, 317262945118785ull}}, {{10702329018952149091ull, 507620712190057ull}}, {{1183165585677898626ull, 406096569752046ull}}, {{15703927727509960194ull, 324877255801636ull}}, {{17747586734532115664ull, 519803609282618ull}}, {{3130022943399961561ull, 415842887426095ull}}, {{2504018354719969249ull, 332674309940876ull}}, {{15074475811777681768ull, 532278895905401ull}}, {{8370231834680235091ull, 425823116724321ull}}, {{3006836653002277750ull, 340658493379457ull}}, {{8500287459545554723ull, 545053589407131ull}}, {{3110881152894533455ull, 436042871525705ull}}, {{2488704922315626764ull, 348834297220564ull}}, {{11360625505188823469ull, 558134875552902ull}}, {{1709802774667238129ull, 446507900442322ull}}, {{12435888663959521473ull, 357206320353857ull}}, {{2570013301683796532ull, 285765056283086ull}}, {{15180067726919805421ull, 457224090052937ull}}, {{4765356552052023690ull, 365779272042350ull}}, {{3812285241641618952ull, 292623417633880ull}}, {{6099656386626590323ull, 468197468214208ull}}, {{12258422738785092905ull, 374557974571366ull}}, {{6117389376286164001ull, 299646379657093ull}}, {{6098474187315952078ull, 479434207451349ull}}, {{8568128164594671986ull, 383547365961079ull}}, {{10543851346417647912ull, 306837892768863ull}}, {{13180813339526326336ull, 490940628430181ull}}, {{6855301856879150745ull, 392752502744145ull}}, {{5484241485503320596ull, 314202002195316ull}}, {{1396088747321492308ull, 502723203512506ull}}, {{15874266256824835139ull, 402178562810004ull}}, {{16388761820201778434ull, 321742850248003ull}}, {{4085926023871383556ull, 514788560396806ull}}, {{18026136078064748137ull, 411830848317444ull}}, {{18110257677193708833ull, 329464678653955ull}}, {{10529668209800382517ull, 527143485846329ull}}, {{12113083382582216337ull, 421714788677063ull}}, {{17069164335549593716ull, 337371830941650ull}}, {{8863918863169798329ull, 539794929506641ull}}, {{3401786275793928340ull, 431835943605313ull}}, {{10100126650118963318ull, 345468754884250ull}}, {{16160202640190341310ull, 552750007814800ull}}, {{12928162112152273048ull, 442200006251840ull}}, {{10342529689721818438ull, 353760005001472ull}}, {{895326122293634104ull, 283008004001178ull}}, {{16189917054637455859ull, 452812806401884ull}}, {{16641282458451875011ull, 362250245121507ull}}, {{5934328337277679362ull, 289800196097206ull}}, {{2116227710160466333ull, 463680313755530ull}}, {{1692982168128373066ull, 370944251004424ull}}, {{5043734549244608776ull, 296755400803539ull}}, {{15448672908275194689ull, 474808641285662ull}}, {{4980240697136335104ull, 379846913028530ull}}, {{3984192557709068083ull, 303877530422824ull}}, {{13753405721818329580ull, 486204048676518ull}}, {{18381422206938484310ull, 388963238941214ull}}, {{18394486580292697771ull, 311170591152971ull}}, {{3605736825274944172ull, 497872945844755ull}}, {{2884589460219955338ull, 398298356675804ull}}, {{5997020382917874593ull, 318638685340643ull}}, {{5905883797926689026ull, 509821896545029ull}}, {{8414055853083261544ull, 407857517236023ull}}, {{14109942311950429882ull, 326286013788818ull}}, {{439814810669225872ull, 522057622062110ull}}, {{351851848535380697ull, 417646097649688ull}}, {{7660179108312125204ull, 334116878119750ull}}, {{12256286573299400327ull, 534587004991600ull}}, {{9805029258639520261ull, 427669603993280ull}}, {{7844023406911616209ull, 342135683194624ull}}, {{1482391006832854965ull, 547417093111399ull}}, {{4875261620208194295ull, 437933674489119ull}}, {{7589558110908465759ull, 350346939591295ull}}, {{12143292977453545215ull, 560555103346072ull}}, {{2335936752479015526ull, 448444082676858ull}}, {{9247447031467033067ull, 358755266141486ull}}, {{3708608810431716130ull, 287004212913189ull}}, {{13312471726174566455ull, 459206740661102ull}}, {{3271279751455832517ull, 367365392528882ull}}, {{13685070245390396983ull, 293892314023105ull}}, {{3449368318915083558ull, 470227702436969ull}}, {{6448843469873977169ull, 376182161949575ull}}, {{5159074775899181735ull, 300945729559660ull}}, {{8254519641438690777ull, 481513167295456ull}}, {{2914266898409042298ull, 385210533836365ull}}, {{2331413518727233838ull, 308168427069092ull}}, {{7419610444705484465ull, 493069483310547ull}}, {{17003734799990118541ull, 394455586648437ull}}, {{6224290210508274187ull, 315564469318750ull}}, {{9958864336813238699ull, 504903150910000ull}}, {{7967091469450590959ull, 403922520728000ull}}, {{6373673175560472767ull, 323138016582400ull}}, {{10197877080896756428ull, 517020826531840ull}}, {{8158301664717405142ull, 413616661225472ull}}, {{17594687775999655083ull, 330893328980377ull}}, {{13394105182631806841ull, 529429326368604ull}}, {{14404632960847355796ull, 423543461094883ull}}, {{455659924452153667ull, 338834768875907ull}}, {{4418404693865356190ull, 542135630201451ull}}, {{18292119014059926245ull, 433708504161160ull}}, {{14633695211247940996ull, 346966803328928ull}}, {{1277819449545243655ull, 555146885326286ull}}, {{15779650818603836216ull, 444117508261028ull}}, {{1555674210657338003ull, 355294006608823ull}}, {{8623236998009691049ull, 284235205287058ull}}, {{10107830382073595355ull, 454776328459293ull}}, {{15464961935142696931ull, 363821062767434ull}}, {{16061318362856067868ull, 291056850213947ull}}, {{10940714121602067296ull, 465690960342316ull}}, {{5063222482539743513ull, 372552768273853ull}}, {{11429275615515615457ull, 298042214619082ull}}, {{3529445725857343439ull, 476867543390532ull}}, {{13891603024911605720ull, 381494034712425ull}}, {{11113282419929284576ull, 305195227769940ull}}, {{17781251871886855322ull, 488312364431904ull}}, {{17914350312251394581ull, 390649891545523ull}}, {{3263433805575384695ull, 312519913236419ull}}, {{12600191718404436159ull, 500031861178270ull}}, {{10080153374723548927ull, 400025488942616ull}}, {{4374773885036928818ull, 320020391154093ull}}, {{3310289401317175786ull, 512032625846549ull}}, {{6337580335795650952ull, 409626100677239ull}}, {{8759413083378431085ull, 327700880541791ull}}, {{6636363303921669089ull, 524321408866866ull}}, {{1619741828395424948ull, 419457127093493ull}}, {{8674491092200160605ull, 335565701674794ull}}, {{2811139303294525999ull, 536905122679671ull}}, {{17006306701603262092ull, 429524098143736ull}}, {{9915696546540699350ull, 343619278514989ull}}, {{4797068030239387991ull, 549790845623983ull}}, {{11216352053675331039ull, 439832676499186ull}}, {{5283732828198354508ull, 351866141199349ull}}, {{7916335077300593929ull, 281492912959479ull}}, {{1598089679455219318ull, 450388660735167ull}}, {{12346518187789906424ull, 360310928588133ull}}, {{17255912179715745785ull, 288248742870506ull}}, {{1784017784351820994ull, 461197988592811ull}}, {{16184609486449098088ull, 368958390874248ull}}, {{1879641144933547501ull, 295166712699399ull}}, {{10386123461377496648ull, 472266740319038ull}}, {{15687596398585817965ull, 377813392255230ull}}, {{12550077118868654372ull, 302250713804184ull}}, {{9012076945964116025ull, 483601142086695ull}}, {{7209661556771292820ull, 386880913669356ull}}, {{2078380430675123933ull, 309504730935485ull}}, {{3325408689080198293ull, 495207569496776ull}}, {{17417722210231799927ull, 396166055597420ull}}, {{13934177768185439941ull, 316932844477936ull}}, {{14915986799612883260ull, 507092551164698ull}}, {{864742995464575638ull, 405674040931759ull}}, {{4381143211113570834ull, 324539232745407ull}}, {{10699177952523623658ull, 519262772392651ull}}, {{4869993547276988603ull, 415410217914121ull}}, {{206646023079680559ull, 332328174331297ull}}, {{4019982451669399218ull, 531725078930075ull}}, {{3215985961335519374ull, 425380063144060ull}}, {{2572788769068415499ull, 340304050515248ull}}, {{427113215767554476ull, 544486480824397ull}}, {{11409737016839774550ull, 435589184659517ull}}, {{1749091983987998994ull, 348471347727614ull}}, {{10177244803864619036ull, 557554156364182ull}}, {{763098213607874583ull, 446043325091346ull}}, {{15367873829853940959ull, 356834660073076ull}}, {{8604950249141242444ull, 285467728058461ull}}, {{6389222769142167264ull, 456748364893538ull}}, {{12490075844797554457ull, 365398691914830ull}}, {{9992060675838043566ull, 292318953531864ull}}, {{4919250637115138736ull, 467710325650983ull}}, {{11314098139175931635ull, 374168260520786ull}}, {{5361929696598834985ull, 299334608416629ull}}, {{15957785144041956622ull, 478935373466606ull}}, {{9076879300491654975ull, 383148298773285ull}}, {{7261503440393323980ull, 306518639018628ull}}, {{7929056689887408044ull, 490429822429805ull}}, {{6343245351909926435ull, 392343857943844ull}}, {{8763945096269851471ull, 313875086355075ull}}, {{14022312154031762355ull, 502200138168120ull}}, {{11217849723225409884ull, 401760110534496ull}}, {{5284930963838417584ull, 321408088427597ull}}, {{12145238356883378457ull, 514252941484155ull}}, {{9716190685506702766ull, 411402353187324ull}}, {{11462301363147272536ull, 329121882549859ull}}, {{7271635736809905088ull, 526595012079775ull}}, {{5817308589447924070ull, 421276009663820ull}}, {{4653846871558339256ull, 337020807731056ull}}, {{67457365009522164ull, 539233292369690ull}}, {{53965892007617731ull, 431386633895752ull}}, {{11111219157831825154ull, 345109307116601ull}}, {{10399253023047099600ull, 552174891386562ull}}, {{940704788953859034ull, 441739913109250ull}}, {{752563831163087227ull, 353391930487400ull}}, {{602051064930469781ull, 282713544389920ull}}, {{963281703888751651ull, 452341671023872ull}}, {{11838671807336732290ull, 361873336819097ull}}, {{2092239816385565186ull, 289498669455278ull}}, {{18104978965184545590ull, 463197871128444ull}}, {{18173331986889546795ull, 370558296902755ull}}, {{14538665589511637436ull, 296446637522204ull}}, {{12193818498992888928ull, 474314620035527ull}}, {{2376357169710490496ull, 379451696028422ull}}, {{12969132179994123366ull, 303561356822737ull}}, {{5993216229022956094ull, 485698170916380ull}}, {{4794572983218364875ull, 388558536733104ull}}, {{7525007201316602223ull, 310846829386483ull}}, {{8350662707364653234ull, 497354927018373ull}}, {{14059227795375543233ull, 397883941614698ull}}, {{179335792074703617ull, 318307153291759ull}}, {{7665634896803346434ull, 509291445266814ull}}, {{9821856732184587470ull, 407433156213451ull}}, {{4168136571005759653ull, 325946524970761ull}}, {{17737064957834946414ull, 521514439953217ull}}, {{6810954336784136485ull, 417211551962574ull}}, {{9138112284169219511ull, 333769241570059ull}}, {{3552933210445020249ull, 534030786512095ull}}, {{2842346568356016199ull, 427224629209676ull}}, {{17031272513652454252ull, 341779703367740ull}}, {{8803291948134375187ull, 546847525388385ull}}, {{7042633558507500150ull, 437478020310708ull}}, {{13012804476289820766ull, 349982416248566ull}}, {{13441789532579892579ull, 559971865997706ull}}, {{7064082811322003740ull, 447977492798165ull}}, {{5651266249057602992ull, 358381994238532ull}}, {{15589059443471813363ull, 286705595390825ull}}, {{6495751035845349765ull, 458728952625321ull}}, {{1507252013934369489ull, 366983162100257ull}}, {{12273848055373226561ull, 293586529680205ull}}, {{1191412814887610881ull, 469738447488329ull}}, {{4642479066651999028ull, 375790757990663ull}}, {{11092680882805419869ull, 300632606392530ull}}, {{17748289412488671790ull, 481012170228048ull}}, {{3130585085765206463ull, 384809736182439ull}}, {{6193816883354075493ull, 307847788945951ull}}, {{2531409383882700143ull, 492556462313522ull}}, {{13093173951331891084ull, 394045169850817ull}}, {{3095841531581692221ull, 315236135880654ull}}, {{12332044080014528200ull, 504377817409046ull}}, {{6176286449269712237ull, 403502253927237ull}}, {{16009075603641500759ull, 322801803141789ull}}, {{14546474521600670245ull, 516482885026863ull}}, {{569133173054805226ull, 413186308021491ull}}, {{15212701797411485474ull, 330549046417192ull}}, {{9582927616890735465ull, 528878474267508ull}}, {{15045039722996409018ull, 423102779414006ull}}, {{8346682963655216891ull, 338482223531205ull}}, {{13354692741848347027ull, 541571557649928ull}}, {{18062451822962498268ull, 433257246119942ull}}, {{7071263828886177968ull, 346605796895954ull}}, {{245975681992153779ull, 554569275033527ull}}, {{11264826989819453993ull, 443655420026821ull}}, {{5322512777113652871ull, 354924336021457ull}}, {{15326056665916653266ull, 283939468817165ull}}, {{6074946591757093610ull, 454303150107465ull}}, {{4859957273405674888ull, 363442520085972ull}}, {{14956012262950270880ull, 290754016068777ull}}, {{9172224361752792115ull, 465206425710044ull}}, {{11027128304144144015ull, 372165140568035ull}}, {{8821702643315315212ull, 297732112454428ull}}, {{10425375414562594017ull, 476371379927085ull}}, {{8340300331650075213ull, 381097103941668ull}}, {{14050937894803880817ull, 304877683153334ull}}, {{11413454187460478338ull, 487804293045335ull}}, {{9130763349968382670ull, 390243434436268ull}}, {{14683308309458526782ull, 312194747549014ull}}, {{12425246850907911882ull, 499511596078423ull}}, {{17318895110210150152ull, 399609276862738ull}}, {{2787069643942389152ull, 319687421490191ull}}, {{15527357874533553613ull, 511499874384305ull}}, {{12421886299626842890ull, 409199899507444ull}}, {{13626857854443384635ull, 327359919605955ull}}, {{3356228493399863801ull, 523775871369529ull}}, {{6374331609461801364ull, 419020697095623ull}}, {{12478162917053261737ull, 335216557676498ull}}, {{16275711852543308457ull, 536346492282397ull}}, {{5641871852550826119ull, 429077193825918ull}}, {{11892195111524481542ull, 343261755060734ull}}, {{7959465734213439497ull, 549218808097175ull}}, {{6367572587370751598ull, 439375046477740ull}}, {{5094058069896601278ull, 351500037182192ull}}, {{11839841726576472368ull, 562400059491507ull}}, {{2093175751777357248ull, 449920047593206ull}}, {{16431935860389527091ull, 359936038074564ull}}, {{16834897503053531996ull, 287948830459651ull}}, {{1110394301692278932ull, 460718128735443ull}}, {{8267013070837643792ull, 368574502988354ull}}, {{10302959271412025356ull, 294859602390683ull}}, {{12795386019517330247ull, 471775363825093ull}}, {{17615006445097684844ull, 377420291060074ull}}, {{17781353970820058198ull, 301936232848059ull}}, {{17382119909086362148ull, 483097972556895ull}}, {{13905695927269089718ull, 386478378045516ull}}, {{7435207927073361451ull, 309182702436413ull}}, {{8206983868575467999ull, 494692323898261ull}}, {{2876238280118464076ull, 395753859118609ull}}, {{5990339438836681584ull, 316603087294887ull}}, {{13273891916880600858ull, 506564939671819ull}}, {{14308462348246391010ull, 405251951737455ull}}, {{11446769878597112808ull, 324201561389964ull}}, {{7246785361529649523ull, 518722498223943ull}}, {{13176125918707540264ull, 414977998579154ull}}, {{14230249549707942535ull, 331982398863323ull}}, {{632306391081246117ull, 531171838181318ull}}, {{7884542742348817540ull, 424937470545054ull}}, {{9996983008620964355ull, 339949976436043ull}}, {{12305823999051632645ull, 543919962297669ull}}, {{13534008013983216439ull, 435135969838135ull}}, {{10827206411186573151ull, 348108775870508ull}}, {{13634181443156606719ull, 556974041392813ull}}, {{18286042784009106021ull, 445579233114250ull}}, {{14628834227207284817ull, 356463386491400ull}}, {{11703067381765827853ull, 285170709193120ull}}, {{278163737115772950ull, 456273134708993ull}}, {{7601228619176439006ull, 365018507767194ull}}, {{9770331710083061528ull, 292014806213755ull}}, {{15632530736132898445ull, 467223689942008ull}}, {{1437978144680587786ull, 373778951953607ull}}, {{12218428959970201199ull, 299023161562885ull}}, {{1102742262242770302ull, 478437058500617ull}}, {{11950240254019947211ull, 382749646800493ull}}, {{16938889832699778415ull, 306199717440394ull}}, {{16034177288093914495ull, 489919547904631ull}}, {{9137993015733221273ull, 391935638323705ull}}, {{7310394412586577018ull, 313548510658964ull}}, {{628584615912792260ull, 501677617054343ull}}, {{7881565322214054454ull, 401342093643474ull}}, {{9994601072513153886ull, 321073674914779ull}}, {{4923315271795315249ull, 513717879863647ull}}, {{15006698661661983169ull, 410974303890917ull}}, {{4626661299845765888ull, 328779443112734ull}}, {{14781355709237046068ull, 526047108980374ull}}, {{15514433382131547178ull, 420837687184299ull}}, {{16100895520447148065ull, 336670149747439ull}}, {{14693386388489705935ull, 538672239595903ull}}, {{686662666566033778ull, 430937791676723ull}}, {{7928027762736647669ull, 344750233341378ull}}, {{8995495605636725947ull, 551600373346205ull}}, {{7196396484509380758ull, 441280298676964ull}}, {{9446466002349414929ull, 353024238941571ull}}, {{3867823987137621620ull, 282419391153257ull}}, {{9877867194162104916ull, 451871025845211ull}}, {{4212944940587773609ull, 361496820676169ull}}, {{7059704767212129211ull, 289197456540935ull}}, {{11295527627539406737ull, 462715930465496ull}}, {{5347073287289615066ull, 370172744372397ull}}, {{15345705074057423023ull, 296138195497917ull}}, {{9795732859524235544ull, 473821112796668ull}}, {{15215283917103209081ull, 379056890237334ull}}, {{15861575948424477588ull, 303245512189867ull}}, {{10621126258511522848ull, 485192819503788ull}}, {{15875598636293038925ull, 388154255603030ull}}, {{12700478909034431140ull, 310523404482424ull}}, {{9252719810229358855ull, 496837447171879ull}}, {{11091524662925397407ull, 397469957737503ull}}, {{16251917359824138572ull, 317975966190002ull}}, {{11245672516750980422ull, 508761545904004ull}}, {{12685886828142694661ull, 407009236723203ull}}, {{17527407091997976375ull, 325607389378562ull}}, {{13286456088229120908ull, 520971823005700ull}}, {{10629164870583296726ull, 416777458404560ull}}, {{8503331896466637381ull, 333421966723648ull}}, {{9915982219604709486ull, 533475146757837ull}}, {{554088146199946942ull, 426780117406270ull}}, {{443270516959957554ull, 341424093925016ull}}, {{11777279271361663056ull, 546278550280025ull}}, {{9421823417089330445ull, 437022840224020ull}}, {{7537458733671464356ull, 349618272179216ull}}, {{4681236344390522323ull, 559389235486746ull}}, {{55640260770507535ull, 447511388389397ull}}, {{11112558652842136998ull, 358009110711517ull}}, {{1511349292789888952ull, 286407288569214ull}}, {{9796856497947642969ull, 458251661710742ull}}, {{458787568874293729ull, 366601329368594ull}}, {{4056378869841345306ull, 293281063494875ull}}, {{6490206191746152490ull, 469249701591800ull}}, {{5192164953396921992ull, 375399761273440ull}}, {{4153731962717537594ull, 300319809018752ull}}, {{10335319955089970473ull, 480511694430003ull}}, {{15646953593555797025ull, 384409355544002ull}}, {{5138865245360816973ull, 307527484435202ull}}, {{11911533207319217481ull, 492043975096323ull}}, {{16907924195339194631ull, 393635180077058ull}}, {{2458292912045624735ull, 314908144061647ull}}, {{7622617474014909900ull, 503853030498635ull}}, {{6098093979211927920ull, 403082424398908ull}}, {{12257172812853362982ull, 322465939519126ull}}, {{12232778871081560125ull, 515945503230602ull}}, {{2407525467381427454ull, 412756402584482ull}}, {{12994066818130872932ull, 330205122067585ull}}, {{2343762835299845076ull, 528328195308137ull}}, {{12943056712465607030ull, 422662556246509ull}}, {{14043794184714395947ull, 338130044997207ull}}, {{7712675436575392223ull, 541008071995532ull}}, {{17238186793486044748ull, 432806457596425ull}}, {{13790549434788835798ull, 346245166077140ull}}, {{3618135021952585662ull, 553992265723425ull}}, {{2894508017562068529ull, 443193812578740ull}}, {{2315606414049654823ull, 354555050062992ull}}, {{12920531575465454828ull, 283644040050393ull}}, {{16983501706002817402ull, 453830464080629ull}}, {{17276150179544164245ull, 363064371264503ull}}, {{2752873699409600426ull, 290451497011603ull}}, {{715249104313450359ull, 464722395218565ull}}, {{572199283450760287ull, 371777916174852ull}}, {{11525805870986339199ull, 297422332939881ull}}, {{11062591764094322073ull, 475875732703810ull}}, {{8850073411275457658ull, 380700586163048ull}}, {{14458756358504186773ull, 304560468930438ull}}, {{997917285155236897ull, 487296750288702ull}}, {{11866380272349920487ull, 389837400230961ull}}, {{5803755403138026067ull, 311869920184769ull}}, {{16664706274504662353ull, 498991872295630ull}}, {{13331765019603729883ull, 399193497836504ull}}, {{14354760830424894229ull, 319354798269203ull}}, {{831524440228368828ull, 510967677230726ull}}, {{15422614811150336355ull, 408774141784580ull}}, {{12338091848920269084ull, 327019313427664ull}}, {{8672900514046699565ull, 523230901484263ull}}, {{14317018040721180298ull, 418584721187410ull}}, {{11453614432576944238ull, 334867776949928ull}}, {{14636434277381200459ull, 535788443119885ull}}, {{11709147421904960367ull, 428630754495908ull}}, {{16746015567007788940ull, 342904603596726ull}}, {{968183204019090041ull, 548647365754763ull}}, {{8153244192699092679ull, 438917892603810ull}}, {{6522595354159274143ull, 351134314083048ull}}, {{6746803751912928307ull, 561814902532877ull}}, {{16465489445756073615ull, 449451922026301ull}}, {{9483042741862948569ull, 359561537621041ull}}, {{3897085378748448532ull, 287649230096833ull}}, {{2545987791255607328ull, 460238768154933ull}}, {{9415487862488306508ull, 368191014523946ull}}, {{3843041475248734883ull, 294552811619157ull}}, {{9838215175139886137ull, 471284498590651ull}}, {{4181223325369998586ull, 377027598872521ull}}, {{18102373919263640162ull, 301622079098016ull}}, {{3138356567628451997ull, 482595326556827ull}}, {{13578731698328492567ull, 386076261245461ull}}, {{7173636543920883730ull, 308861008996369ull}}, {{409772026047682999ull, 494177614394191ull}}, {{15085212879805787692ull, 395342091515352ull}}, {{4689472674360809507ull, 316273673212282ull}}, {{11192505093719205535ull, 506037877139651ull}}, {{5264655260233454104ull, 404830301711721ull}}, {{522375393444852960ull, 323864241369377ull}}, {{4525149444253675060ull, 518182786191003ull}}, {{10998817184886760694ull, 414546228952802ull}}, {{1420356118425587909ull, 331636983162242ull}}, {{5961918604222850978ull, 530619173059587ull}}, {{15837581327604011752ull, 424495338447669ull}}, {{16359413876825119724ull, 339596270758135ull}}, {{7728318129210639943ull, 543354033213017ull}}, {{17250700947594242924ull, 434683226570413ull}}, {{2732514313849663370ull, 347746581256331ull}}, {{15440069346385192361ull, 556394530010129ull}}, {{16041404291850064212ull, 445115624008103ull}}, {{1765076989254320400ull, 356092499206483ull}}, {{8790759220887276966ull, 284873999365186ull}}, {{6686517123935822500ull, 455798398984298ull}}, {{12727911328632478646ull, 364638719187438ull}}, {{17561026692389803563ull, 291710975349950ull}}, {{9650898634114134086ull, 466737560559921ull}}, {{4031370092549396945ull, 373390048447937ull}}, {{14293142518265248526ull, 298712038758349ull}}, {{11800981584998666672ull, 477939262013359ull}}, {{13130134082740843661ull, 382351409610687ull}}, {{3125409636708854282ull, 305881127688550ull}}, {{5000655418734166851ull, 489409804301680ull}}, {{4000524334987333481ull, 391527843441344ull}}, {{6889768282731777108ull, 313222274753075ull}}, {{11023629252370843373ull, 501155639604920ull}}, {{8818903401896674698ull, 400924511683936ull}}, {{3365773906775429435ull, 320739609347149ull}}, {{12763935880324507743ull, 513183374955438ull}}, {{17589846333743426841ull, 410546699964350ull}}, {{14071877066994741473ull, 328437359971480ull}}, {{4068259233482034740ull, 525499775954369ull}}, {{6943956201527538115ull, 420399820763495ull}}, {{5555164961222030492ull, 336319856610796ull}}, {{1509566308471428142ull, 538111770577274ull}}, {{4897001861519052836ull, 430489416461819ull}}, {{7606950303957152592ull, 344391533169455ull}}, {{12171120486331444148ull, 551026453071128ull}}, {{17115594018548975964ull, 440821162456902ull}}, {{6313777585355360125ull, 352656929965522ull}}, {{16119068512510019070ull, 282125543972417ull}}, {{11033114361048389219ull, 451400870355868ull}}, {{16205189118322532021ull, 361120696284694ull}}, {{16653500109399935940ull, 288896557027755ull}}, {{8198856101330345889ull, 462234491244409ull}}, {{10248433695806187034ull, 369787592995527ull}}, {{820049327161128981ull, 295830074396422ull}}, {{5001427738199716693ull, 473328119034275ull}}, {{4001142190559773354ull, 378662495227420ull}}, {{3200913752447818683ull, 302929996181936ull}}, {{16189508448142240863ull, 484687993891097ull}}, {{5572909129029972044ull, 387750395112878ull}}, {{11837024932707798281ull, 310200316090302ull}}, {{4181844633364835958ull, 496320505744484ull}}, {{7034824521433779089ull, 397056404595587ull}}, {{16695906061372754241ull, 317645123676469ull}}, {{15645403253970675816ull, 508232197882351ull}}, {{8826973788434630330ull, 406585758305881ull}}, {{3372230216005793940ull, 325268606644705ull}}, {{5395568345609270305ull, 520429770631528ull}}, {{11695152305971236890ull, 416343816505222ull}}, {{1977424215293168866ull, 333075053204178ull}}, {{17921274003436711478ull, 532920085126684ull}}, {{18026368017491279506ull, 426336068101347ull}}, {{7042396784509202958ull, 341068854481078ull}}, {{7578486040472814410ull, 545710167169725ull}}, {{6062788832378251528ull, 436568133735780ull}}, {{4850231065902601222ull, 349254506988624ull}}, {{15139067334927982602ull, 558807211181798ull}}, {{1043207423716655112ull, 447045768945439ull}}, {{4523914753715234413ull, 357636615156351ull}}, {{18376527061939828823ull, 286109292125080ull}}, {{10955699225394174501ull, 457774867400129ull}}, {{12453908195057249924ull, 366219893920103ull}}, {{17341824185529620585ull, 292975915136082ull}}, {{12989523437879751644ull, 468761464217732ull}}, {{3012921120819980669ull, 375009171374186ull}}, {{17167732155623625828ull, 300007337099348ull}}, {{5332278560546339385ull, 480011739358958ull}}, {{11644520477920892155ull, 384009391487166ull}}, {{5626267567594803400ull, 307207513189733ull}}, {{5312679293409775118ull, 491532021103573ull}}, {{11628841064211640740ull, 393225616882858ull}}, {{16681770480853133239ull, 314580493506286ull}}, {{865391066171640920ull, 503328789610059ull}}, {{4381661667679223059ull, 402663031688047ull}}, {{14573375778369109417ull, 322130425350437ull}}, {{8560005986422933774ull, 515408680560700ull}}, {{6848004789138347019ull, 412326944448560ull}}, {{5478403831310677615ull, 329861555558848ull}}, {{5076097315355173862ull, 527778488894157ull}}, {{15128924296509870059ull, 422222791115325ull}}, {{12103139437207896047ull, 337778232892260ull}}, {{918279025823082059ull, 540445172627617ull}}, {{11802669664884196617ull, 432356138102093ull}}, {{16820833361391177940ull, 345884910481674ull}}, {{15845286934000153734ull, 553415856770679ull}}, {{16365578361942033311ull, 442732685416543ull}}, {{2024416245327895679ull, 354186148333235ull}}, {{1619532996262316543ull, 283348918666588ull}}, {{17348648052987347762ull, 453358269866540ull}}, {{13878918442389878209ull, 362686615893232ull}}, {{3724437124428081921ull, 290149292714586ull}}, {{17027145843310662043ull, 464238868343337ull}}, {{6243019045164708988ull, 371391094674670ull}}, {{4994415236131767191ull, 297112875739736ull}}, {{612366748327006859ull, 475380601183578ull}}, {{7868591028145426133ull, 380304480946862ull}}, {{17362919266742071876ull, 304243584757489ull}}, {{16712624382561584033ull, 486789735611983ull}}, {{2302053061823536256ull, 389431788489587ull}}, {{12909688893684559975ull, 311545430791669ull}}, {{9587455785669564990ull, 498472689266671ull}}, {{3980615813793741669ull, 398778151413337ull}}, {{14252539095260724304ull, 319022521130669ull}}, {{11736016108191427918ull, 510436033809071ull}}, {{5699464071811232011ull, 408348827047257ull}}, {{15627617701674716578ull, 326679061637805ull}}, {{6557444248969994910ull, 522686498620489ull}}, {{8935304213917906251ull, 418149198896391ull}}, {{3458894556392414677ull, 334519359117113ull}}, {{1844882475485953161ull, 535230974587381ull}}, {{16233301239356403821ull, 428184779669904ull}}, {{16675989806227033380ull, 342547823735923ull}}, {{4545490801511791469ull, 548076517977478ull}}, {{11015090270693253822ull, 438461214381982ull}}, {{1433374587070782411ull, 350768971505586ull}}, {{13361445783538982827ull, 561230354408937ull}}, {{3310458997347365615ull, 448984283527150ull}}, {{2648367197877892492ull, 359187426821720ull}}, {{2118693758302313994ull, 287349941457376ull}}, {{14457956457509433360ull, 459759906331801ull}}, {{7877016351265636365ull, 367807925065441ull}}, {{2612264266270598768ull, 294246340052353ull}}, {{490274011291047706ull, 470794144083765ull}}, {{392219209032838165ull, 376635315267012ull}}, {{11381821811452001502ull, 301308252213609ull}}, {{7142868454097471433ull, 482093203541775ull}}, {{5714294763277977146ull, 385674562833420ull}}, {{4571435810622381717ull, 308539650266736ull}}, {{18382343741221541717ull, 493663440426777ull}}, {{7327177363493412727ull, 394930752341422ull}}, {{16929788335020461151ull, 315944601873137ull}}, {{12330266077065096550ull, 505511362997020ull}}, {{9864212861652077240ull, 404409090397616ull}}, {{4202021474579751468ull, 323527272318093ull}}, {{3033885544585692026ull, 517643635708949ull}}, {{6116457250410463944ull, 414114908567159ull}}, {{8582514615070281478ull, 331291926853727ull}}, {{17421372198854360689ull, 530067082965963ull}}, {{2869051314857757582ull, 424053666372771ull}}, {{17052636310853847358ull, 339242933098216ull}}, {{1458776394172783511ull, 542788692957147ull}}, {{12235067559563957778ull, 434230954365717ull}}, {{2409356418167345576ull, 347384763492574ull}}, {{11233667898551573568ull, 555815621588118ull}}, {{16365631948325079501ull, 444652497270494ull}}, {{16781854373401973924ull, 355721997816395ull}}, {{13425483498721579139ull, 284577598253116ull}}, {{14102075968470705976ull, 455324157204986ull}}, {{7592311960034654458ull, 364259325763989ull}}, {{9763198382769633889ull, 291407460611191ull}}, {{8242419782947593577ull, 466251936977906ull}}, {{2904587011616164538ull, 373001549582325ull}}, {{2323669609292931630ull, 298401239665860ull}}, {{3717871374868690609ull, 477441983465376ull}}, {{17731692358862593780ull, 381953586772300ull}}, {{14185353887090075024ull, 305562869417840ull}}, {{4249822145634568422ull, 488900591068545ull}}, {{3399857716507654738ull, 391120472854836ull}}, {{17477281432173765083ull, 312896378283868ull}}, {{5827557403026562194ull, 500634205254190ull}}, {{4662045922421249755ull, 400507364203352ull}}, {{14797683182162730773ull, 320405891362681ull}}, {{16297595461976548591ull, 512649426180290ull}}, {{13038076369581238873ull, 410119540944232ull}}, {{3051763466181170452ull, 328095632755386ull}}, {{15950867990115603693ull, 524953012408617ull}}, {{5381996762608662308ull, 419962409926894ull}}, {{7994946224828840169ull, 335969927941515ull}}, {{12791913959726144271ull, 537551884706424ull}}, {{13922879982522825740ull, 430041507765139ull}}, {{14827652800760170915ull, 344033206212111ull}}, {{16345546851732452818ull, 550453129939378ull}}, {{2008391037160231285ull, 440362503951503ull}}, {{8985410459212005674ull, 352290003161202ull}}, {{18256374811595335509ull, 281832002528961ull}}, {{3384757995359164552ull, 450931204046339ull}}, {{6397155211029241965ull, 360744963237071ull}}, {{1428375354081483248ull, 288595970589657ull}}, {{5974749381272283521ull, 461753552943451ull}}, {{1090450690275916493ull, 369402842354761ull}}, {{15629755811188374487ull, 295522273883808ull}}, {{2871516409449937241ull, 472835638214094ull}}, {{5986561942301860116ull, 378268510571275ull}}, {{4789249553841488093ull, 302614808457020ull}}, {{7662799286146380949ull, 484183693531232ull}}, {{17198285873142835728ull, 387346954824985ull}}, {{13758628698514268583ull, 309877563859988ull}}, {{18324457102880919409ull, 495804102175981ull}}, {{10970216867562825204ull, 396643281740785ull}}, {{8776173494050260163ull, 317314625392628ull}}, {{10352528775738505938ull, 507703400628205ull}}, {{8282023020590804750ull, 406162720502564ull}}, {{10314967231214554123ull, 324930176402051ull}}, {{9125249940459465951ull, 519888282243282ull}}, {{18368246396593303731ull, 415910625794625ull}}, {{14694597117274642984ull, 332728500635700ull}}, {{5064611313929877159ull, 532365601017121ull}}, {{362340236401991404ull, 425892480813697ull}}, {{11357918633347324093ull, 340713984650957ull}}, {{3415274554388077256ull, 545142375441532ull}}, {{13800266087736192774ull, 436113900353225ull}}, {{11040212870188954219ull, 348891120282580ull}}, {{17664340592302326751ull, 558225792452128ull}}, {{3063426029616130431ull, 446580633961703ull}}, {{9829438453176724991ull, 357264507169362ull}}, {{484853133057559347ull, 285811605735490ull}}, {{775765012892094955ull, 457298569176784ull}}, {{4309960825055586287ull, 365838855341427ull}}, {{14516015104270199999ull, 292671084273141ull}}, {{15846926537348499352ull, 468273734837026ull}}, {{8988192415136889159ull, 374618987869621ull}}, {{3501205117367601004ull, 299695190295697ull}}, {{9291277002530071929ull, 479512304473115ull}}, {{7433021602024057543ull, 383609843578492ull}}, {{17014463725844977004ull, 306887874862793ull}}, {{5087049072900501268ull, 491020599780470ull}}, {{4069639258320401014ull, 392816479824376ull}}, {{18013106665623962104ull, 314253183859500ull}}, {{10374226591288787751ull, 502805094175201ull}}, {{4610032458289119877ull, 402244075340161ull}}, {{18445421225598937194ull, 321795260272128ull}}, {{7376581072506837572ull, 514872416435406ull}}, {{2211916043263559735ull, 411897933148325ull}}, {{1769532834610847788ull, 329518346518660ull}}, {{2831252535377356460ull, 527229354429856ull}}, {{17022397287269526461ull, 421783483543884ull}}, {{17307266644557531492ull, 337426786835107ull}}, {{12934231372324409095ull, 539882858936172ull}}, {{2968687468375706629ull, 431906287148938ull}}, {{9753647604184385950ull, 345525029719150ull}}, {{15605836166695017520ull, 552840047550640ull}}, {{12484668933356014016ull, 442272038040512ull}}, {{2609037517200990566ull, 353817630432410ull}}, {{2087230013760792453ull, 283054104345928ull}}, {{18096963280984909217ull, 452886566953484ull}}, {{18166919439529837697ull, 362309253562787ull}}, {{7154837922140049511ull, 289847402850230ull}}, {{11447740675424079218ull, 463755844560368ull}}, {{16536890169823084021ull, 371004675648294ull}}, {{16918860950600377540ull, 296803740518635ull}}, {{8623433447251052448ull, 474885984829817ull}}, {{17966793202026572928ull, 379908787863853ull}}, {{3305388117395527373ull, 303927030291083ull}}, {{1599272173090933473ull, 486283248465733ull}}, {{8658115367956567425ull, 389026598772586ull}}, {{3237143479623343617ull, 311221279018069ull}}, {{12558127196881170433ull, 497954046428910ull}}, {{10046501757504936346ull, 398363237143128ull}}, {{15415899035487769723ull, 318690589714502ull}}, {{9908043197812790265ull, 509904943543204ull}}, {{11615783372992142535ull, 407923954834563ull}}, {{16671324327877534674ull, 326339163867650ull}}, {{8227374850894503863ull, 522142662188241ull}}, {{2892551065973692767ull, 417714129750593ull}}, {{9692738482262774860ull, 334171303800474ull}}, {{4440335127394708807ull, 534674086080759ull}}, {{7241616916657677369ull, 427739268864607ull}}, {{16861339977551872864ull, 342191415091685ull}}, {{8531399890373444967ull, 547506264146697ull}}, {{17893166356524486943ull, 438005011317357ull}}, {{6935835455735768908ull, 350404009053886ull}}, {{3718639099693409607ull, 560646414486218ull}}, {{10353608909238548332ull, 448517131588974ull}}, {{11972235942132748989ull, 358813705271179ull}}, {{13267137568448109514ull, 287050964216943ull}}, {{17538071294775064900ull, 459281542747109ull}}, {{17719805850561962243ull, 367425234197687ull}}, {{6797147050965749148ull, 293940187358150ull}}, {{10875435281545198637ull, 470304299773040ull}}, {{8700348225236158909ull, 376243439818432ull}}, {{18028325024414658097ull, 300994751854745ull}}, {{10398575965353901339ull, 481591602967593ull}}, {{15697558401766941718ull, 385273282374074ull}}, {{16247395536155463697ull, 308218625899259ull}}, {{14927786413623010946ull, 493149801438815ull}}, {{11942229130898408757ull, 394519841151052ull}}, {{2175085675234906359ull, 315615872920842ull}}, {{7169485895117760498ull, 504985396673347ull}}, {{16803635160319939368ull, 403988317338677ull}}, {{6064210498772130848ull, 323190653870942ull}}, {{13392085612777319680ull, 517105046193507ull}}, {{3334970860738035098ull, 413684036954806ull}}, {{17425371947558069371ull, 330947229563844ull}}, {{16812548671867180024ull, 529515567302151ull}}, {{9760690122751833696ull, 423612453841721ull}}, {{4119203283459556633ull, 338889963073377ull}}, {{10280074068277200937ull, 542223940917403ull}}, {{15602756884105581396ull, 433779152733922ull}}, {{5103507877800644470ull, 347023322187138ull}}, {{4476263789739120829ull, 555237315499421ull}}, {{18338406290758937956ull, 444189852399536ull}}, {{10981376217865240042ull, 355351881919629ull}}, {{12474449789034102356ull, 284281505535703ull}}, {{16269770847712653447ull, 454850408857125ull}}, {{13015816678170122758ull, 363880327085700ull}}, {{10412653342536098206ull, 291104261668560ull}}, {{16660245348057757130ull, 465766818669696ull}}, {{9638847463704295381ull, 372613454935757ull}}, {{332380341479615658ull, 298090763948606ull}}, {{11599854990593116023ull, 476945222317769ull}}, {{12969232807216403141ull, 381556177854215ull}}, {{10375386245773122513ull, 305244942283372ull}}, {{1843222734269354728ull, 488391907653396ull}}, {{16231973446383125075ull, 390713526122716ull}}, {{9296229942364589737ull, 312570820898173ull}}, {{11184619093041433256ull, 500113313437077ull}}, {{1568997644949325959ull, 400090650749662ull}}, {{12323244560185191736ull, 320072520599729ull}}, {{8649144852070575809ull, 512116032959567ull}}, {{17987362325882191617ull, 409692826367653ull}}, {{3321843416480022324ull, 327754261094123ull}}, {{1625600651626125395ull, 524406817750597ull}}, {{12368526965526631285ull, 419525454200477ull}}, {{2516123942937484382ull, 335620363360382ull}}, {{7715147123441885334ull, 536992581376611ull}}, {{2482768884011597944ull, 429594065101289ull}}, {{5675563921951188678ull, 343675252081031ull}}, {{1702204645638081239ull, 549880403329650ull}}, {{1361763716510464991ull, 439904322663720ull}}, {{1089410973208371993ull, 351923458130976ull}}, {{15628924037534338887ull, 281538766504780ull}}, {{6559534386345390604ull, 450462026407649ull}}, {{8936976323818222806ull, 360369621126119ull}}, {{10838929873796488568ull, 288295696900895ull}}, {{17342287798074381709ull, 461273115041432ull}}, {{6495132608975684721ull, 369018492033146ull}}, {{1506757272438637453ull, 295214793626517ull}}, {{6100160450643730249ull, 472343669802427ull}}, {{15948174804740715168ull, 377874935841941ull}}, {{9069191029050661811ull, 302299948673553ull}}, {{10821356831739148575ull, 483679917877685ull}}, {{8657085465391318860ull, 386943934302148ull}}, {{14304366001796875735ull, 309555147441718ull}}, {{750892714423539236ull, 495288235906750ull}}, {{600714171538831389ull, 396230588725400ull}}, {{480571337231065111ull, 316984470980320ull}}, {{768914139569704178ull, 507175153568512ull}}, {{11683177755881494312ull, 405740122854809ull}}, {{13035891019447105773ull, 324592098283847ull}}, {{6100030372147727944ull, 519347357254156ull}}, {{1190675482976272032ull, 415477885803325ull}}, {{952540386381017625ull, 332382308642660ull}}, {{1524064618209628201ull, 531811693828256ull}}, {{15976646953535343853ull, 425449355062604ull}}, {{16470666377570185406ull, 340359484050083ull}}, {{4216973315660834710ull, 544575174480134ull}}, {{7062927467270578091ull, 435660139584107ull}}, {{16718388418042193443ull, 348528111667285ull}}, {{8302677395157957892ull, 557644978667657ull}}, {{17710188360352097283ull, 446115982934125ull}}, {{14168150688281677827ull, 356892786347300ull}}, {{11334520550625342261ull, 285514229077840ull}}, {{18135232881000547618ull, 456822766524544ull}}, {{18197535119542348418ull, 365458213219635ull}}, {{14558028095633878734ull, 292366570575708ull}}, {{1156752064562744035ull, 467786512921134ull}}, {{4614750466392105551ull, 374229210336907ull}}, {{14759846817339415411ull, 299383368269525ull}}, {{5169010834033513041ull, 479013389231241ull}}, {{445859852484900110ull, 383210711384993ull}}, {{7735385511471740734ull, 306568569107994ull}}, {{1308570374129054205ull, 490509710572791ull}}, {{15804251558270884657ull, 392407768458232ull}}, {{5264703617132887079ull, 313926214766586ull}}, {{1044828157928798680ull, 502281943626538ull}}, {{8214560155826859591ull, 401825554901230ull}}, {{6571648124661487672ull, 321460443920984ull}}, {{17893334628942200923ull, 514336710273574ull}}, {{18004016517895671061ull, 411469368218859ull}}, {{18092562029058447172ull, 329175494575087ull}}, {{14190703987525874183ull, 526680791320140ull}}, {{11352563190020699346ull, 421344633056112ull}}, {{1703352922532738830ull, 337075706444890ull}}, {{2725364676052382129ull, 539321130311824ull}}, {{5869640555583816026ull, 431456904249459ull}}, {{8385061259208963144ull, 345165523399567ull}}, {{17105446829476251354ull, 552264837439307ull}}, {{6305659834097180437ull, 441811869951446ull}}, {{1355179052535834026ull, 353449495961157ull}}, {{12152189686254398190ull, 282759596768925ull}}, {{996759424297485489ull, 452415354830281ull}}, {{15554802798405629684ull, 361932283864224ull}}, {{16133191053466414070ull, 289545827091379ull}}, {{14745059241320531543ull, 463273323346207ull}}, {{4417349763572604588ull, 370618658676966ull}}, {{18291275069825724963ull, 296494926941572ull}}, {{14508644852753518648ull, 474391883106516ull}}, {{7917567067460904595ull, 379513506485213ull}}, {{13712751283452544323ull, 303610805188170ull}}, {{3493657979814519300ull, 485777288301073ull}}, {{10173624013335436087ull, 388621830640858ull}}, {{15517596840152169516ull, 310897464512686ull}}, {{17449457314759650579ull, 497435943220298ull}}, {{2891519407581989493ull, 397948754576239ull}}, {{6002564340807501918ull, 318359003660991ull}}, {{2225405315808182422ull, 509374405857586ull}}, {{16537719511614187231ull, 407499524686068ull}}, {{2162129165065618815ull, 325999619748855ull}}, {{3459406664104990104ull, 521599391598168ull}}, {{10146222960767812729ull, 417279513278534ull}}, {{11806327183356160507ull, 333823610622827ull}}, {{4132728234402215518ull, 534117776996524ull}}, {{6995531402263682738ull, 427294221597219ull}}, {{9285773936552856513ull, 341835377277775ull}}, {{14857238298484570421ull, 546936603644440ull}}, {{11885790638787656337ull, 437549282915552ull}}, {{2129934881546304423ull, 350039426332442ull}}, {{7097244625215997401ull, 560063082131907ull}}, {{16745842144398528890ull, 448050465705525ull}}, {{13396673715518823112ull, 358440372564420ull}}, {{10717338972415058489ull, 286752298051536ull}}, {{9769044726380272937ull, 458803676882458ull}}, {{15193933410588038996ull, 367042941505966ull}}, {{8465797913728520873ull, 293634353204773ull}}, {{9855927847223723074ull, 469814965127637ull}}, {{506044648295157813ull, 375851972102110ull}}, {{404835718636126250ull, 300681577681688ull}}, {{15405132408785443294ull, 481090524290700ull}}, {{12324105927028354635ull, 384872419432560ull}}, {{9859284741622683708ull, 307897935546048ull}}, {{12085506771854383610ull, 492636696873677ull}}, {{2289707787999686241ull, 394109357498942ull}}, {{12899812674625479962ull, 315287485999153ull}}, {{16950351464658857617ull, 504459977598645ull}}, {{13560281171727086093ull, 403567982078916ull}}, {{7158876122639758551ull, 322854385663133ull}}, {{7764852981481703359ull, 516567017061013ull}}, {{13590580014669183334ull, 413253613648810ull}}, {{10872464011735346667ull, 330602890919048ull}}, {{13706593604034644344ull, 528964625470477ull}}, {{3586577253743894829ull, 423171700376382ull}}, {{13937308247220846833ull, 338537360301105ull}}, {{3852949121843803316ull, 541659776481769ull}}, {{6771708112216952976ull, 433327821185415ull}}, {{5417366489773562381ull, 346662256948332ull}}, {{12357135198379610133ull, 554659611117331ull}}, {{6196359343961777783ull, 443727688893865ull}}, {{4957087475169422226ull, 354982151115092ull}}, {{15033716424361268751ull, 283985720892073ull}}, {{1917853390526568062ull, 454377153427318ull}}, {{8912980341905075096ull, 363501722741854ull}}, {{10819733088265970400ull, 290801378193483ull}}, {{13622224126483642317ull, 465282205109573ull}}, {{18276476930670734500ull, 372225764087658ull}}, {{3553135100310856630ull, 297780611270127ull}}, {{9374364975239280932ull, 476448978032203ull}}, {{14878189609675245392ull, 381159182425762ull}}, {{4523854058256375667ull, 304927345940610ull}}, {{7238166493210201067ull, 487883753504976ull}}, {{2101184379826250531ull, 390307002803981ull}}, {{16438342762828641717ull, 312245602243184ull}}, {{15233301976300095778ull, 499592963589095ull}}, {{12186641581040076622ull, 399674370871276ull}}, {{6059964450090150975ull, 319739496697021ull}}, {{2317245490660420913ull, 511583194715234ull}}, {{5543145207270247054ull, 409266555772187ull}}, {{15502562610041928612ull, 327413244617749ull}}, {{13736053731841354811ull, 523861191388399ull}}, {{14678191800214994172ull, 419088953110719ull}}, {{15431902254913905660ull, 335271162488575ull}}, {{6244299534152697441ull, 536433859981721ull}}, {{1306090812580247629ull, 429147087985377ull}}, {{12112919094289929073ull, 343317670388301ull}}, {{12001972921380065871ull, 549308272621282ull}}, {{2222880707620232050ull, 439446618097026ull}}, {{16535699825063826933ull, 351557294477620ull}}, {{8010375646392571477ull, 562491671164193ull}}, {{13786998146597877828ull, 449993336931354ull}}, {{14718947332020212585ull, 359994669545083ull}}, {{707111421390439099ull, 287995735636067ull}}, {{4820727088966612881ull, 460793177017707ull}}, {{14924628115399021274ull, 368634541614165ull}}, {{11939702492319217019ull, 294907633291332ull}}, {{4346128728743105939ull, 471852213266132ull}}, {{14544949427220215720ull, 377481770612905ull}}, {{11635959541776172576ull, 301985416490324ull}}, {{7549488822616145153ull, 483176666384519ull}}, {{9728939872834826445ull, 386541333107615ull}}, {{7783151898267861156ull, 309233066486092ull}}, {{16142391851970488173ull, 494772906377747ull}}, {{5535215852092569892ull, 395818325102198ull}}, {{11806870311157876560ull, 316654660081758ull}}, {{15201643683110692173ull, 506647456130813ull}}, {{1093268502262822769ull, 405317964904651ull}}, {{15632010060777899508ull, 324254371923720ull}}, {{6564472023535087597ull, 518806995077953ull}}, {{12630275248311890724ull, 415045596062362ull}}, {{2725522569165691932ull, 332036476849890ull}}, {{4360836110665107092ull, 531258362959824ull}}, {{7178017703273995997ull, 425006690367859ull}}, {{9431762977361107120ull, 340005352294287ull}}, {{333425504810130100ull, 544008563670860ull}}, {{266740403848104080ull, 435206850936688ull}}, {{7592089952562303910ull, 348165480749350ull}}, {{12147343924099686257ull, 557064769198960ull}}, {{9717875139279749005ull, 445651815359168ull}}, {{15152997740907619851ull, 356521452287334ull}}, {{15811747007468006204ull, 285217161829867ull}}, {{10541399952981168633ull, 456347458927788ull}}, {{15811817591868755553ull, 365077967142230ull}}, {{12649454073495004442ull, 292062373713784ull}}, {{9171080073366276138ull, 467299797942055ull}}, {{7336864058693020911ull, 373839838353644ull}}, {{9558840061696327052ull, 299071870682915ull}}, {{15294144098714123283ull, 478514993092664ull}}, {{15924664093713208949ull, 382811994474131ull}}, {{9050382460228656836ull, 306249595579305ull}}, {{14480611936365850938ull, 489999352926888ull}}, {{516443104866949781ull, 391999482341511ull}}, {{15170549742861201117ull, 313599585873208ull}}, {{2136786700126459849ull, 501759337397134ull}}, {{5398778174843078202ull, 401407469917707ull}}, {{15387068984100193531ull, 321125975934165ull}}, {{6172566300850758034ull, 513801561494665ull}}, {{4938053040680606427ull, 411041249195732ull}}, {{15018488876770216111ull, 328832999356585ull}}, {{5582838129122794162ull, 526132798970537ull}}, {{15534316947523966299ull, 420906239176429ull}}, {{16116802372761083363ull, 336724991341143ull}}, {{3650790907966271441ull, 538759986145830ull}}, {{2920632726373017153ull, 431007988916664ull}}, {{6025854995840324045ull, 344806391133331ull}}, {{2262670363860697827ull, 551690225813330ull}}, {{1810136291088558261ull, 441352180650664ull}}, {{5137457847612756932ull, 353081744520531ull}}, {{420617463348295222ull, 282465395616425ull}}, {{672987941357272356ull, 451944632986280ull}}, {{538390353085817885ull, 361555706389024ull}}, {{4120061097210564631ull, 289244565111219ull}}, {{13970795385020724056ull, 462791304177950ull}}, {{11176636308016579245ull, 370233043342360ull}}, {{8941309046413263396ull, 296186434673888ull}}, {{10616745659519311110ull, 473898295478221ull}}, {{4804047712873538565ull, 379118636382577ull}}, {{14911284614524561821ull, 303294909106061ull}}, {{16479357753755478268ull, 485271854569698ull}}, {{2115439758778651645ull, 388217483655759ull}}, {{5381700621764831639ull, 310573986924607ull}}, {{12300069809565640946ull, 496918379079371ull}}, {{6150707032910602433ull, 397534703263497ull}}, {{15988612070554212916ull, 318027762610797ull}}, {{10824384053919099374ull, 508844420177276ull}}, {{4970158428393369176ull, 407075536141821ull}}, {{286777927972785017ull, 325660428913457ull}}, {{4148193499498366351ull, 521056686261531ull}}, {{18075950058566334373ull, 416845349009224ull}}, {{18150108861594977822ull, 333476279207379ull}}, {{17972127734326233546ull, 533562046731807ull}}, {{6999004557977166190ull, 426849637385446ull}}, {{1909854831639822629ull, 341479709908357ull}}, {{6745116545365626529ull, 546367535853371ull}}, {{1706744421550590900ull, 437094028682697ull}}, {{12433441981466203690ull, 349675222946157ull}}, {{5136111911378284611ull, 559480356713852ull}}, {{15176935973328358658ull, 447584285371081ull}}, {{8452199963920776603ull, 358067428296865ull}}, {{6761759971136621283ull, 286453942637492ull}}, {{14508164768560504376ull, 458326308219987ull}}, {{4227834185364582854ull, 366661046575990ull}}, {{3382267348291666283ull, 293328837260792ull}}, {{9100976572008576376ull, 469326139617267ull}}, {{18348827701832592071ull, 375460911693813ull}}, {{3611015717240342687ull, 300368729355051ull}}, {{16845671591810279269ull, 480589966968081ull}}, {{9787188458706313092ull, 384471973574465ull}}, {{7829750766965050473ull, 307577578859572ull}}, {{16216950041885991081ull, 492124126175315ull}}, {{12973560033508792865ull, 393699300940252ull}}, {{3000150397323213645ull, 314959440752202ull}}, {{8489589450459052156ull, 503935105203523ull}}, {{14170369189851062371ull, 403148084162818ull}}, {{268248907655118927ull, 322518467330255ull}}, {{429198252248190284ull, 516029547728408ull}}, {{7722056231282372873ull, 412823638182726ull}}, {{2488296170283987975ull, 330258910546181ull}}, {{15049320316680111730ull, 528414256873889ull}}, {{15728805068085999707ull, 422731405499111ull}}, {{8893695239726889443ull, 338185124399289ull}}, {{3161865939337292139ull, 541096199038863ull}}, {{9908190380953654357ull, 432876959231090ull}}, {{7926552304762923486ull, 346301567384872ull}}, {{16371832502362587901ull, 554082507815795ull}}, {{13097466001890070320ull, 443266006252636ull}}, {{6788623986770145933ull, 354612805002109ull}}, {{9120248004158027070ull, 283690244001687ull}}, {{18281745621394753635ull, 453904390402699ull}}, {{18314745311857713231ull, 363123512322159ull}}, {{18341145064228080908ull, 290498809857727ull}}, {{14588436843797288160ull, 464798095772364ull}}, {{15360098289779740851ull, 371838476617891ull}}, {{8598729817081882358ull, 297470781294313ull}}, {{10068618892589101449ull, 475953250070901ull}}, {{4365546299329370836ull, 380762600056721ull}}, {{18249832298431137962ull, 304610080045376ull}}, {{3374289974296448476ull, 487376128072603ull}}, {{10078129608920979427ull, 389900902458082ull}}, {{683806057652962895ull, 311920721966466ull}}, {{12162136136470471603ull, 499073155146345ull}}, {{9729708909176377282ull, 399258524117076ull}}, {{4094418312599191502ull, 319406819293661ull}}, {{17619115744384437374ull, 511050910869857ull}}, {{6716594966023729252ull, 408840728695886ull}}, {{1683927158077073079ull, 327072582956709ull}}, {{10072981082407137572ull, 523316132730734ull}}, {{11747733680667620381ull, 418652906184587ull}}, {{2019489315050275658ull, 334922324947670ull}}, {{3231182904080441054ull, 535875719916272ull}}, {{13652992767490083812ull, 428700575933017ull}}, {{3543696584508246403ull, 342960460746414ull}}, {{13048612164697014892ull, 548736737194262ull}}, {{3060192102273791267ull, 438989389755410ull}}, {{2448153681819033014ull, 351191511804328ull}}, {{227697076168542499ull, 561906418886925ull}}, {{182157660934833999ull, 449525135109540ull}}, {{145726128747867199ull, 359620108087632ull}}, {{11184627347224024729ull, 287696086470105ull}}, {{17895403755558439566ull, 460313738352168ull}}, {{3248276560221020683ull, 368250990681735ull}}, {{2598621248176816547ull, 294600792545388ull}}, {{468445182340996152ull, 471361268072621ull}}, {{15132151404840438214ull, 377089014458096ull}}, {{8416372309130440248ull, 301671211566477ull}}, {{17155544509350614720ull, 482673938506363ull}}, {{2656389163254760807ull, 386139150805091ull}}, {{16882506589571449938ull, 308911320644072ull}}, {{12254615284346678608ull, 494258113030516ull}}, {{6114343412735432563ull, 395406490424413ull}}, {{12270172359672166697ull, 316325192339530ull}}, {{1185531701765915099ull, 506120307743249ull}}, {{4637774176154642403ull, 404896246194599ull}}, {{7399568155665624245ull, 323916996955679ull}}, {{771262604839267823ull, 518267195129087ull}}, {{11685056528097145228ull, 414613756103269ull}}, {{13037394037219626505ull, 331691004882615ull}}, {{2413086385841850793ull, 530705607812185ull}}, {{1930469108673480634ull, 424564486249748ull}}, {{8923072916422605154ull, 339651588999798ull}}, {{10587567851534257923ull, 543442542399677ull}}, {{1091356651743585692ull, 434754033919742ull}}, {{11941131765620599523ull, 347803227135793ull}}, {{15416462010251048914ull, 556485163417269ull}}, {{16022518422942749454ull, 445188130733815ull}}, {{12818014738354199563ull, 356150504587052ull}}, {{2875714161199539004ull, 284920403669642ull}}, {{8290491472661172730ull, 455872645871427ull}}, {{17700439622354669154ull, 364698116697141ull}}, {{10471002883141825000ull, 291758493357713ull}}, {{13064255798285009676ull, 466813589372341ull}}, {{6762055823886097418ull, 373450871497873ull}}, {{12788342288592698581ull, 298760697198298ull}}, {{16771998847006407406ull, 478017115517277ull}}, {{6038901448121305278ull, 382413692413822ull}}, {{15899167602722775192ull, 305930953931057ull}}, {{10681272905388799015ull, 489489526289692ull}}, {{1166320694827218565ull, 391591621031754ull}}, {{4622405370603685175ull, 313273296825403ull}}, {{3706499778223985958ull, 501237274920645ull}}, {{2965199822579188766ull, 400989819936516ull}}, {{17129555117030992306ull, 320791855949212ull}}, {{12649892928281946397ull, 513266969518740ull}}, {{10119914342625557117ull, 410613575614992ull}}, {{717233844616625047ull, 328490860491994ull}}, {{8526271780870420722ull, 525585376787190ull}}, {{6821017424696336578ull, 420468301429752ull}}, {{16524860383982800232ull, 336374641143801ull}}, {{614334911179108109ull, 538199425830083ull}}, {{7870165558427107133ull, 430559540664066ull}}, {{2606783631999775383ull, 344447632531253ull}}, {{481504996457730290ull, 551116212050005ull}}, {{385203997166184232ull, 440892969640004ull}}, {{3997512012474857709ull, 352714375712003ull}}, {{10576707239463706813ull, 282171500569602ull}}, {{2165336324174289609ull, 451474400911364ull}}, {{5421617874081342010ull, 361179520729091ull}}, {{647945484523163285ull, 288943616583273ull}}, {{15794108034204702549ull, 462309786533236ull}}, {{8945937612621851716ull, 369847829226589ull}}, {{10846098904839391696ull, 295878263381271ull}}, {{9975060618259206067ull, 473405221410034ull}}, {{11669397309349275177ull, 378724177128027ull}}, {{1956820217995599495ull, 302979341702422ull}}, {{6820261163534869515ull, 484766946723875ull}}, {{5456208930827895612ull, 387813557379100ull}}, {{4364967144662316490ull, 310250845903280ull}}, {{6983947431459706384ull, 496401353445248ull}}, {{12965855574651585753ull, 397121082756198ull}}, {{17751382089205089249ull, 317696866204958ull}}, {{6266118454276680859ull, 508314985927934ull}}, {{8702243578163255011ull, 406651988742347ull}}, {{18029841306756334978ull, 325321590993877ull}}, {{14090350831842494672ull, 520514545590204ull}}, {{14961629480215906061ull, 416411636472163ull}}, {{901257139946993879ull, 333129309177731ull}}, {{12510057868140921176ull, 533006894684369ull}}, {{13697395109254647264ull, 426405515747495ull}}, {{10957916087403717811ull, 341124412597996ull}}, {{10153968110362127852ull, 545799060156794ull}}, {{11812523303031612605ull, 436639248125435ull}}, {{9450018642425290084ull, 349311398500348ull}}, {{11430681013138553811ull, 558898237600557ull}}, {{1765847181027022402ull, 447118590080446ull}}, {{16170073003789259214ull, 357694872064356ull}}, {{9246709588289497048ull, 286155897651485ull}}, {{14794735341263195277ull, 457849436242376ull}}, {{8146439458268645899ull, 366279548993901ull}}, {{2827802751873006396ull, 293023639195121ull}}, {{15592530847222541203ull, 468837822712193ull}}, {{1405978233552301993ull, 375070258169755ull}}, {{1124782586841841594ull, 300056206535804ull}}, {{9178349768430767197ull, 480089930457286ull}}, {{3653331000002703434ull, 384071944365829ull}}, {{6612013614744073071ull, 307257555492663ull}}, {{6889872968848606590ull, 491612088788261ull}}, {{1822549560336974949ull, 393289671030609ull}}, {{5147388463011490282ull, 314631736824487ull}}, {{11925170355560294775ull, 503410778919179ull}}, {{13229485099190146143ull, 402728623135343ull}}, {{17962285708835937561ull, 322182898508274ull}}, {{17671610689911769128ull, 515492637613239ull}}, {{17826637366671325625ull, 412394110090591ull}}, {{10571961078595150177ull, 329915288072473ull}}, {{13225788911010329960ull, 527864460915957ull}}, {{3201933499324443322ull, 422291568732766ull}}, {{17318942058427195950ull, 337833254986212ull}}, {{12952912034515872228ull, 540533207977940ull}}, {{10362329627612697782ull, 432426566382352ull}}, {{911166072606337579ull, 345941253105882ull}}, {{5147214530912050450ull, 553506004969411ull}}, {{428422809987730037ull, 442804803975529ull}}, {{4032087062732094352ull, 354243843180423ull}}, {{10604367279669496128ull, 283395074544338ull}}, {{13277638832729283482ull, 453432119270941ull}}, {{6932762251441516463ull, 362745695416753ull}}, {{12924907430637033816ull, 290196556333402ull}}, {{5922456630051612814ull, 464314490133444ull}}, {{8427314118783200574ull, 371451592106755ull}}, {{6741851295026560459ull, 297161273685404ull}}, {{18165659701526317381ull, 475458037896646ull}}, {{10843178946479143582ull, 380366430317317ull}}, {{1295845527699494219ull, 304293144253854ull}}, {{9452050473803011397ull, 486869030806166ull}}, {{3872291564300498794ull, 389495224644933ull}}, {{10476530880924219682ull, 311596179715946ull}}, {{9383751779994930845ull, 498553887545514ull}}, {{11196350238737854999ull, 398843110036411ull}}, {{5267731376248373676ull, 319074488029129ull}}, {{15807067831481218528ull, 510519180846606ull}}, {{8956305450443064499ull, 408415344677285ull}}, {{7165044360354451599ull, 326732275741828ull}}, {{7774722161825212236ull, 522771641186925ull}}, {{6219777729460169788ull, 418217312949540ull}}, {{4975822183568135831ull, 334573850359632ull}}, {{11650664308450927653ull, 535318160575411ull}}, {{5631182632018831799ull, 428254528460329ull}}, {{8194294920356975762ull, 342603622768263ull}}, {{9421523057829250896ull, 548165796429221ull}}, {{3847869631521490394ull, 438532637143377ull}}, {{14146342149442923285ull, 350826109714701ull}}, {{15255449809624856609ull, 561321775543522ull}}, {{4825662218216064641ull, 449057420434818ull}}, {{11239227404056672359ull, 359245936347854ull}}, {{12680730737987248210ull, 287396749078283ull}}, {{16599820366037686814ull, 459834798525253ull}}, {{2211809848604418481ull, 367867838820203ull}}, {{9148145508367355431ull, 294294271056162ull}}, {{18326381628129679013ull, 470870833689859ull}}, {{18350454117245653534ull, 376696666951887ull}}, {{7301665664312702181ull, 301357333561510ull}}, {{11682665062900323489ull, 482171733698416ull}}, {{5656783235578348468ull, 385737386958733ull}}, {{11904124217946499421ull, 308589909566986ull}}, {{11667901119230578427ull, 493743855307178ull}}, {{16713018524868283388ull, 394995084245742ull}}, {{5991717190410806064ull, 315996067396594ull}}, {{16965445134141110349ull, 505593707834550ull}}, {{13572356107312888279ull, 404474966267640ull}}, {{10857884885850310623ull, 323579973014112ull}}, {{2615220558392855705ull, 517727956822580ull}}, {{2092176446714284564ull, 414182365458064ull}}, {{5363089972113337974ull, 331345892366451ull}}, {{1202246325897520112ull, 530153427786322ull}}, {{12029843504943747059ull, 424122742229057ull}}, {{2245177174471177001ull, 339298193783246ull}}, {{14660329923379614171ull, 542877110053193ull}}, {{660217494477960367ull, 434301688042555ull}}, {{528173995582368294ull, 347441350434044ull}}, {{8223776022415609917ull, 555906160694470ull}}, {{6579020817932487933ull, 444724928555576ull}}, {{1573867839604080023ull, 355779942844461ull}}, {{16016489530650905311ull, 284623954275568ull}}, {{3490290360589986559ull, 455398326840910ull}}, {{2792232288471989247ull, 364318661472728ull}}, {{9612483460261412044ull, 291454929178182ull}}, {{622578277450617978ull, 466327886685092ull}}, {{11566109066186225352ull, 373062309348073ull}}, {{16631584882432800928ull, 298449847478458ull}}, {{4474442923441019546ull, 477519755965534ull}}, {{7268903153494725960ull, 382015804772427ull}}, {{16883168967021511737ull, 305612643817941ull}}, {{1187628644041046518ull, 488980230108707ull}}, {{12018149359458568184ull, 391184184086965ull}}, {{9614519487566854547ull, 312947347269572ull}}, {{625835921139325982ull, 500715755631316ull}}, {{15258063995879102079ull, 400572604505052ull}}, {{4827753567219461016ull, 320458083604042ull}}, {{11413754522293047950ull, 512732933766467ull}}, {{1752305988350617713ull, 410186347013174ull}}, {{5091193605422404494ull, 328149077610539ull}}, {{15524607398159667837ull, 525038524176862ull}}, {{5040988289043913623ull, 420030819341490ull}}, {{4032790631235130898ull, 336024655473192ull}}, {{10141813824718119760ull, 537639448757107ull}}, {{734753430290675162ull, 430111559005686ull}}, {{15345198003200181422ull, 344089247204548ull}}, {{2416223916668828337ull, 550542795527278ull}}, {{9311676762818883316ull, 440434236421822ull}}, {{70643780771286006ull, 352347389137458ull}}, {{7435212654100849451ull, 281877911309966ull}}, {{4517642617077538476ull, 451004658095946ull}}, {{18371509352629672073ull, 360803726476756ull}}, {{11007858667361827335ull, 288642981181405ull}}, {{17612573867778923737ull, 461828769890248ull}}, {{3022012649997408020ull, 369463015912199ull}}, {{6106958934739836739ull, 295570412729759ull}}, {{17149831925067559429ull, 472912660367614ull}}, {{17409214354795957866ull, 378330128294091ull}}, {{10238022669094855970ull, 302664102635273ull}}, {{12691487455809859229ull, 484262564216437ull}}, {{2774492335164066736ull, 387410051373150ull}}, {{2219593868131253389ull, 309928041098520ull}}, {{3551350189010005423ull, 495884865757632ull}}, {{13909126595433735308ull, 396707892606105ull}}, {{11127301276346988246ull, 317366314084884ull}}, {{6735635597929450224ull, 507786102535815ull}}, {{5388508478343560179ull, 406228882028652ull}}, {{15378853226900579113ull, 324983105622921ull}}, {{17227467533557105935ull, 519972968996674ull}}, {{17471322841587595071ull, 415978375197339ull}}, {{17666407088011986380ull, 332782700157871ull}}, {{2440809637625805945ull, 532452320252595ull}}, {{1952647710100644756ull, 425961856202076ull}}, {{16319513427048157098ull, 340769484961660ull}}, {{7664477409567499741ull, 545231175938657ull}}, {{17199628371879730762ull, 436184940750925ull}}, {{13759702697503784610ull, 348947952600740ull}}, {{3568780242296503760ull, 558316724161185ull}}, {{2855024193837203008ull, 446653379328948ull}}, {{9662716984553583052ull, 357322703463158ull}}, {{15108871217126687088ull, 285858162770526ull}}, {{16795496317918878695ull, 457373060432842ull}}, {{6057699424851282309ull, 365898448346274ull}}, {{8535508354622936171ull, 292718758677019ull}}, {{2588766923170966904ull, 468350013883231ull}}, {{16828408797504414816ull, 374680011106584ull}}, {{17152075852745442176ull, 299744008885267ull}}, {{12685926105425066189ull, 479590414216428ull}}, {{17527438513823873597ull, 383672331373142ull}}, {{6643253181575278231ull, 306937865098514ull}}, {{18007902720004265817ull, 491100584157622ull}}, {{7027624546519592007ull, 392880467326098ull}}, {{13000797266699494252ull, 314304373860878ull}}, {{17111926811977280480ull, 502886998177405ull}}, {{13689541449581824384ull, 402309598541924ull}}, {{14640981974407369830ull, 321847678833539ull}}, {{12357524714826060759ull, 514956286133663ull}}, {{17264717401344669253ull, 411965028906930ull}}, {{13811773921075735403ull, 329572023125544ull}}, {{11030791829495445675ull, 527315237000871ull}}, {{5135284648854446217ull, 421852189600697ull}}, {{15176274163309287943ull, 337481751680557ull}}, {{9524643402327219416ull, 539970802688892ull}}, {{241017092377954886ull, 431976642151114ull}}, {{3882162488644274232ull, 345581313720891ull}}, {{17279506426056569741ull, 552930101953425ull}}, {{13823605140845255793ull, 442344081562740ull}}, {{11058884112676204634ull, 353875265250192ull}}, {{1468409660657143061ull, 283100212200154ull}}, {{9728153086535249544ull, 452960339520246ull}}, {{4093173654486289312ull, 362368271616197ull}}, {{14342585367814762419ull, 289894617292957ull}}, {{8190741329535978578ull, 463831387668732ull}}, {{17620639507854513832ull, 371065110134985ull}}, {{14096511606283611066ull, 296852088107988ull}}, {{418325681602315766ull, 474963340972782ull}}, {{11402706989507583582ull, 379970672778225ull}}, {{9122165591606066866ull, 303976538222580ull}}, {{14595464946569706985ull, 486362461156128ull}}, {{608325513030034619ull, 389089968924903ull}}, {{7865358039907848341ull, 311271975139922ull}}, {{16273921678594467669ull, 498035160223875ull}}, {{13019137342875574135ull, 398428128179100ull}}, {{10415309874300459308ull, 318742502543280ull}}, {{16664495798880734894ull, 509988004069248ull}}, {{2263550194878856945ull, 407990403255399ull}}, {{5500188970644995879ull, 326392322604319ull}}, {{16178999982515814053ull, 522227716166910ull}}, {{12943199986012651243ull, 417782172933528ull}}, {{17733257618293941640ull, 334225738346822ull}}, {{13615816930302665332ull, 534761181354916ull}}, {{7203304729500221942ull, 427808945083933ull}}, {{13141341413083998200ull, 342247156067146ull}}, {{13647448631450576474ull, 547595449707434ull}}, {{14607307719902371503ull, 438076359765947ull}}, {{4307148546438076556ull, 350461087812758ull}}, {{3202088859559012166ull, 560737740500413ull}}, {{9940368717131030379ull, 448590192400330ull}}, {{7952294973704824303ull, 358872153920264ull}}, {{10051184793705769766ull, 287097723136211ull}}, {{8703198040445410979ull, 459356357017938ull}}, {{14341256061840149429ull, 367485085614350ull}}, {{11473004849472119543ull, 293988068491480ull}}, {{18356807759155391270ull, 470380909586368ull}}, {{3617399763098582046ull, 376304727669095ull}}, {{2893919810478865637ull, 301043782135276ull}}, {{15698318140991915989ull, 481670051416441ull}}, {{8869305698051622468ull, 385336041133153ull}}, {{14474142187925118620ull, 308268832906522ull}}, {{8401232241712548500ull, 493230132650436ull}}, {{3031636978628128477ull, 394584106120349ull}}, {{6114658397644413105ull, 315667284896279ull}}, {{17162151065714881614ull, 505067655834046ull}}, {{10040372037829994968ull, 404054124667237ull}}, {{653600000780175328ull, 323243299733790ull}}, {{1045760001248280525ull, 517189279574064ull}}, {{4525956815740534743ull, 413751423659251ull}}, {{18378160711560069087ull, 331001138927400ull}}, {{10958313064786558924ull, 529601822283841ull}}, {{5077301637087336816ull, 423681457827073ull}}, {{11440538939153690099ull, 338945166261658ull}}, {{14615513487903993835ull, 542312266018653ull}}, {{624364346097464098ull, 433849812814923ull}}, {{7878189106361791925ull, 347079850251938ull}}, {{8915753755436956757ull, 555327760403101ull}}, {{3443254189607655082ull, 444262208322481ull}}, {{17511998610653765359ull, 355409766657984ull}}, {{17698947703264922610ull, 284327813326387ull}}, {{13560921066256234884ull, 454924501322220ull}}, {{10848736853004987907ull, 363939601057776ull}}, {{4989640667662080002ull, 291151680846221ull}}, {{604727438775507357ull, 465842689353954ull}}, {{4173130765762316209ull, 372674151483163ull}}, {{10717202242093673613ull, 298139321186530ull}}, {{17147523587349877782ull, 477022913898448ull}}, {{2649972425654171256ull, 381618331118759ull}}, {{5809326755265247328ull, 305294664895007ull}}, {{12984271623166306048ull, 488471463832011ull}}, {{6698068483791134515ull, 390777171065609ull}}, {{9047803601774817935ull, 312621736852487ull}}, {{18165834577581619020ull, 500194778963979ull}}, {{18222016476807205539ull, 400155823171183ull}}, {{3509566737220033461ull, 320124658536947ull}}, {{9304655594293963862ull, 512199453659115ull}}, {{7443724475435171089ull, 409759562927292ull}}, {{17023026024573867841ull, 327807650341833ull}}, {{5100748750866726606ull, 524492240546934ull}}, {{7769947815435291608ull, 419593792437547ull}}, {{17284004696573964256ull, 335675033950037ull}}, {{12897012255550701517ull, 537080054320060ull}}, {{10317609804440561214ull, 429664043456048ull}}, {{15632785473036269617ull, 343731234764838ull}}, {{2876363868406569449ull, 549969975623742ull}}, {{13369137538950986528ull, 439975980498993ull}}, {{18074007660644609869ull, 351980784399194ull}}, {{18148554943257598218ull, 281584627519355ull}}, {{10590943835502605534ull, 450535404030969ull}}, {{12162103883143994750ull, 360428323224775ull}}, {{9729683106515195800ull, 288342658579820ull}}, {{15567492970424313280ull, 461348253727712ull}}, {{5075296746855629978ull, 369078602982170ull}}, {{4060237397484503982ull, 295262882385736ull}}, {{17564426280200937341ull, 472420611817177ull}}, {{6672843394676929226ull, 377936489453742ull}}, {{16406321159967274351ull, 302349191562993ull}}, {{4114020967496177022ull, 483758706500790ull}}, {{3291216773996941618ull, 387006965200632ull}}, {{13701019863423284264ull, 309605572160505ull}}, {{3474887707767703206ull, 495368915456809ull}}, {{6469258980956072888ull, 396295132365447ull}}, {{16243453628990589280ull, 317036105892357ull}}, {{11232130547417301555ull, 507257769427772ull}}, {{1607006808450020598ull, 405806215542218ull}}, {{8664303076243837124ull, 324644972433774ull}}, {{2794838477764408430ull, 519431955894039ull}}, {{5925219596953437067ull, 415545564715231ull}}, {{1050826862820839330ull, 332436451772185ull}}, {{1681322980513342929ull, 531898322835496ull}}, {{16102453643378315636ull, 425518658268396ull}}, {{9192614099960742185ull, 340414926614717ull}}, {{18397531374679097820ull, 544663882583547ull}}, {{7339327470259457609ull, 435731106066838ull}}, {{13250159605691386734ull, 348584884853470ull}}, {{2753511295396667158ull, 557735815765553ull}}, {{9581506665801154373ull, 446188652612442ull}}, {{286507703157102852ull, 356950922089954ull}}, {{3918554977267592605ull, 285560737671963ull}}, {{2580339148886237845ull, 456897180275141ull}}, {{16821666578076631568ull, 365517744220112ull}}, {{6078635632977484608ull, 292414195376090ull}}, {{9725817012763975373ull, 467862712601744ull}}, {{11470002424953090622ull, 374290170081395ull}}, {{9176001939962472497ull, 299432136065116ull}}, {{7302905474456135350ull, 479091417704186ull}}, {{2152975564822997956ull, 383273134163349ull}}, {{5411729266600308688ull, 306618507330679ull}}, {{16037464456044314548ull, 490589611729086ull}}, {{9140622750093541315ull, 392471689383269ull}}, {{11001847014816743375ull, 313977351506615ull}}, {{17602955223706789400ull, 502363762410584ull}}, {{17771712993707341843ull, 401891009928467ull}}, {{6838672765482052828ull, 321512807942774ull}}, {{18320574054255105172ull, 514420492708438ull}}, {{3588412799178353168ull, 411536394166751ull}}, {{17628125498310323827ull, 329229115333400ull}}, {{9758256723586966507ull, 526766584533441ull}}, {{4117256564127662883ull, 421413267626753ull}}, {{10672502880785950952ull, 337130614101402ull}}, {{2318609350289880231ull, 539408982562244ull}}, {{5544236294973814508ull, 431527186049795ull}}, {{4435389035979051606ull, 345221748839836ull}}, {{18164668901792213540ull, 552354798143737ull}}, {{7153037491949950186ull, 441883838514990ull}}, {{5722429993559960148ull, 353507070811992ull}}, {{15645990439073699088ull, 282805656649593ull}}, {{2897491814066456602ull, 452489050639350ull}}, {{2317993451253165282ull, 361991240511480ull}}, {{1854394761002532225ull, 289592992409184ull}}, {{10345729247087872207ull, 463348787854694ull}}, {{11965932212412208089ull, 370679030283755ull}}, {{9572745769929766471ull, 296543224227004ull}}, {{4248346787661895384ull, 474469158763207ull}}, {{14466723874355247277ull, 379575327010565ull}}, {{11573379099484197821ull, 303660261608452ull}}, {{3760011300207075222ull, 485856418573524ull}}, {{6697357854907570501ull, 388685134858819ull}}, {{9047235098667966724ull, 310948107887055ull}}, {{14475576157868746758ull, 497516972619288ull}}, {{512414482069266437ull, 398013578095431ull}}, {{15167326844623054442ull, 318410862476344ull}}, {{13199676507171156138ull, 509457379962151ull}}, {{6870392390995014587ull, 407565903969721ull}}, {{1806965098054101346ull, 326052723175777ull}}, {{6580492971628472478ull, 521684357081243ull}}, {{12643092006786598628ull, 417347485664994ull}}, {{13803822420171189226ull, 333877988531995ull}}, {{3639371798564351146ull, 534204781651193ull}}, {{10290195068335301563ull, 427363825320954ull}}, {{11921504869410151573ull, 341891060256763ull}}, {{15385058976314332194ull, 547025696410821ull}}, {{8618698366309555432ull, 437620557128657ull}}, {{17963005137273375315ull, 350096445702925ull}}, {{10294064145927848889ull, 560154313124681ull}}, {{4545902502000368788ull, 448123450499745ull}}, {{3636722001600295030ull, 358498760399796ull}}, {{17666772860247877317ull, 286799008319836ull}}, {{2441394873203231445ull, 458878413311739ull}}, {{5642464713304495479ull, 367102730649391ull}}, {{824622955901686060ull, 293682184519513ull}}, {{16076791988410338989ull, 469891495231220ull}}, {{12861433590728271191ull, 375913196184976ull}}, {{6599798057840706629ull, 300730556947981ull}}, {{3180979263061309961ull, 481168891116770ull}}, {{2544783410449047969ull, 384935112893416ull}}, {{16793221987326879668ull, 307948090314732ull}}, {{12111759920755366176ull, 492716944503572ull}}, {{2310710307120472294ull, 394173555602858ull}}, {{9227265875180198482ull, 315338844482286ull}}, {{7384927770804496924ull, 504542151171658ull}}, {{13286639846127418186ull, 403633720937326ull}}, {{6939963062160024225ull, 322906976749861ull}}, {{3725243269972218115ull, 516651162799778ull}}, {{10358892245461595138ull, 413320930239822ull}}, {{908416166885455464ull, 330656744191858ull}}, {{16210861125984370035ull, 529050790706972ull}}, {{5589991271303675382ull, 423240632565578ull}}, {{11850690646526760952ull, 338592506052462ull}}, {{4203709775475176230ull, 541748009683940ull}}, {{3362967820380140984ull, 433398407747152ull}}, {{13758420700529843757ull, 346718726197721ull}}, {{14634775491363929365ull, 554749961916354ull}}, {{15397169207833053815ull, 443799969533083ull}}, {{1249688922040712082ull, 355039975626467ull}}, {{12067797581858300635ull, 284031980501173ull}}, {{15619127316231370693ull, 454451168801877ull}}, {{5116604223501275908ull, 363560935041502ull}}, {{15161329823026751696ull, 290848748033201ull}}, {{16879430087358982068ull, 465357996853122ull}}, {{6124846440403365008ull, 372286397482498ull}}, {{12278574781806512652ull, 297829117985998ull}}, {{15956370836148509921ull, 476526588777597ull}}, {{5386399039434987290ull, 381221271022078ull}}, {{11687816861031810479ull, 304977016817662ull}}, {{3943111718683255473ull, 487963226908260ull}}, {{3154489374946604378ull, 390370581526608ull}}, {{9902289129441104149ull, 312296465221286ull}}, {{8464964977621945992ull, 499674344354058ull}}, {{14150669611581377440ull, 399739475483246ull}}, {{7631186874523191629ull, 319791580386597ull}}, {{15899247813979016930ull, 511666528618555ull}}, {{12719398251183213544ull, 409333222894844ull}}, {{13864867415688481158ull, 327466578315875ull}}, {{3737043791392018237ull, 523946525305401ull}}, {{17747030292081255882ull, 419157220244320ull}}, {{14197624233665004706ull, 335325776195456ull}}, {{15337501144380186883ull, 536521241912730ull}}, {{12270000915504149506ull, 429216993530184ull}}, {{13505349547145229928ull, 343373594824147ull}}, {{6851164016464726593ull, 549397751718636ull}}, {{1791582398429870951ull, 439518201374909ull}}, {{5122614733485807084ull, 351614561099927ull}}, {{11885532388319201658ull, 562583297759883ull}}, {{16887123540139181972ull, 450066638207906ull}}, {{9820350017369435255ull, 360053310566325ull}}, {{7856280013895548204ull, 288042648453060ull}}, {{12570048022232877126ull, 460868237524896ull}}, {{6366689603044391378ull, 368694590019917ull}}, {{16161398126661244072ull, 294955672015933ull}}, {{3722144114206528576ull, 471929075225494ull}}, {{6667064106107133184ull, 377543260180395ull}}, {{5333651284885706547ull, 302034608144316ull}}, {{1155144426333309829ull, 483255373030906ull}}, {{15681510800034289156ull, 386604298424724ull}}, {{16234557454769341648ull, 309283438739779ull}}, {{14907245483405215667ull, 494853501983647ull}}, {{4547098757240351887ull, 395882801586918ull}}, {{11016376635276102156ull, 316706241269534ull}}, {{6558156172216032480ull, 506729986031255ull}}, {{5246524937772825984ull, 405383988825004ull}}, {{7886568764960171110ull, 324307191060003ull}}, {{8929161209194363454ull, 518891505696005ull}}, {{7143328967355490763ull, 415113204556804ull}}, {{9404011988626302933ull, 332090563645443ull}}, {{11357070367060174370ull, 531344901832709ull}}, {{12775005108390049819ull, 425075921466167ull}}, {{2841306457228219209ull, 340060737172934ull}}, {{11924787961048971381ull, 544097179476694ull}}, {{13229179183581087428ull, 435277743581355ull}}, {{10583343346864869942ull, 348222194865084ull}}, {{5865302910758060938ull, 557155511784135ull}}, {{4692242328606448751ull, 445724409427308ull}}, {{11132491492368979647ull, 356579527541846ull}}, {{5216644379153273394ull, 285263622033477ull}}, {{12035979821387147754ull, 456421795253563ull}}, {{17007481486593538850ull, 365137436202850ull}}, {{13605985189274831080ull, 292109948962280ull}}, {{3322832229130178112ull, 467375918339649ull}}, {{6347614598046052812ull, 373900734671719ull}}, {{8767440493178752573ull, 299120587737375ull}}, {{14027904789086004117ull, 478592940379800ull}}, {{11222323831268803294ull, 382874352303840ull}}, {{8977859065015042635ull, 306299481843072ull}}, {{18053923318765978539ull, 490079170948915ull}}, {{14443138655012782831ull, 392063336759132ull}}, {{4175813294526405618ull, 313650669407306ull}}, {{17749347715467979959ull, 501841071051689ull}}, {{17888826987116294291ull, 401472856841351ull}}, {{10621712774951125109ull, 321178285473081ull}}, {{9616042810437979529ull, 513885256756930ull}}, {{7692834248350383623ull, 411108205405544ull}}, {{9843616213422217221ull, 328886564324435ull}}, {{15749785941475547554ull, 526218502919096ull}}, {{8910479938438527720ull, 420974802335277ull}}, {{18196430394976553146ull, 336779841868221ull}}, {{3288846928769112771ull, 538847746989155ull}}, {{2631077543015290217ull, 431078197591324ull}}, {{5794210849154142496ull, 344862558073059ull}}, {{16649434988130448641ull, 551780092916894ull}}, {{17008896805246269236ull, 441424074333515ull}}, {{13607117444197015389ull, 353139259466812ull}}, {{3506996325873791664ull, 282511407573450ull}}, {{5611194121398066663ull, 452018252117520ull}}, {{4488955297118453331ull, 361614601694016ull}}, {{18348559496662403957ull, 289291681355212ull}}, {{14600299935692205039ull, 462866690168340ull}}, {{11680239948553764031ull, 370293352134672ull}}, {{1965494329359190578ull, 296234681707738ull}}, {{17902186185942346219ull, 473975490732380ull}}, {{14321748948753876975ull, 379180392585904ull}}, {{15146747973745011903ull, 303344314068723ull}}, {{2098703869540557106ull, 485350902509958ull}}, {{9057660725116266331ull, 388280722007966ull}}, {{3556779765351102741ull, 310624577606373ull}}, {{2001498809819854063ull, 496999324170197ull}}, {{12669245492081614220ull, 397599459336157ull}}, {{2756698764181470730ull, 318079567468926ull}}, {{15478764466916084137ull, 508927307950281ull}}, {{8693662758790956987ull, 407141846360225ull}}, {{6954930207032765589ull, 325713477088180ull}}, {{11127888331252424943ull, 521141563341088ull}}, {{16281008294485760601ull, 416913250672870ull}}, {{13024806635588608480ull, 333530600538296ull}}, {{13460992987457952923ull, 533648960861274ull}}, {{14458143204708272661ull, 426919168689019ull}}, {{15255863378508528452ull, 341535334951215ull}}, {{5962637331904093908ull, 546456535921945ull}}, {{4770109865523275126ull, 437165228737556ull}}, {{126739077676709777ull, 349732182990045ull}}, {{202782524282735644ull, 559571492784072ull}}, {{11230272463651919485ull, 447657194227257ull}}, {{1605520341437714941ull, 358125755381806ull}}, {{16041811532117813246ull, 286500604305444ull}}, {{14598852007162770224ull, 458400966888711ull}}, {{7989732790988305856ull, 366720773510969ull}}, {{10081135047532555008ull, 293376618808775ull}}, {{16129816076052088013ull, 469402590094040ull}}, {{12903852860841670410ull, 375522072075232ull}}, {{2944384659189515682ull, 300417657660186ull}}, {{15779061898928956060ull, 480668252256297ull}}, {{5244551889659344202ull, 384534601805038ull}}, {{11574339141211296008ull, 307627681444030ull}}, {{72198552228521997ull, 492204290310449ull}}, {{3747107656524727921ull, 393763432248359ull}}, {{6687034939961692660ull, 315010745798687ull}}, {{14388604718680618579ull, 504017193277899ull}}, {{15200232589686405186ull, 403213754622319ull}}, {{15849534886491034472ull, 322571003697855ull}}, {{6912511744676103539ull, 516113605916569ull}}, {{9219358210482793155ull, 412890884733255ull}}, {{7375486568386234524ull, 330312707786604ull}}, {{732732065192244269ull, 528500332458567ull}}, {{11654232096379526384ull, 422800265966853ull}}, {{16702083306587441754ull, 338240212773482ull}}, {{11965938031572265514ull, 541184340437572ull}}, {{2194052795773991764ull, 432947472350058ull}}, {{9133939866103014058ull, 346357977880046ull}}, {{7235606156281001846ull, 554172764608074ull}}, {{9477833739766711800ull, 443338211686459ull}}, {{11271615806555279763ull, 354670569349167ull}}, {{1638595015760403164ull, 283736455479334ull}}, {{10000449654700465709ull, 453978328766934ull}}, {{11689708538502282890ull, 363182663013547ull}}, {{1973069201318005666ull, 290546130410838ull}}, {{17914305981076450358ull, 464873808657340ull}}, {{14331444784861160287ull, 371899046925872ull}}, {{4086458198405107583ull, 297519237540698ull}}, {{2848984302706261810ull, 476030780065117ull}}, {{13347233886390740417ull, 380824624052093ull}}, {{18056484738596412980ull, 304659699241674ull}}, {{17822329137528529799ull, 487455518786679ull}}, {{17947212124764734162ull, 389964415029343ull}}, {{3289723255586056360ull, 311971532023475ull}}, {{5263557208937690176ull, 499154451237560ull}}, {{4210845767150152141ull, 399323560990048ull}}, {{10747374243203942359ull, 319458848792038ull}}, {{13506449974384397452ull, 511134158067261ull}}, {{7115811164765607638ull, 408907326453809ull}}, {{9381997746554396434ull, 327125861163047ull}}, {{253801135519393001ull, 523401377860876ull}}, {{14960436167383155694ull, 418721102288700ull}}, {{11968348933906524555ull, 334976881830960ull}}, {{702614220540887672ull, 535963010929537ull}}, {{11630137820658441107ull, 428770408743629ull}}, {{12993459071268663209ull, 343016326994903ull}}, {{17100185699287950811ull, 548826123191845ull}}, {{13680148559430360649ull, 439060898553476ull}}, {{7254770032802378196ull, 351248718842781ull}}, {{4228934422999984467ull, 561997950148450ull}}, {{3383147538399987574ull, 449598360118760ull}}, {{2706518030719990059ull, 359678688095008ull}}, {{9543912054059812693ull, 287742950476006ull}}, {{7891561657011879663ull, 460388720761610ull}}, {{6313249325609503730ull, 368310976609288ull}}, {{12429297089971423631ull, 294648781287430ull}}, {{1440131270244726193ull, 471438050059889ull}}, {{4841453830937691278ull, 377150440047911ull}}, {{183814250008242699ull, 301720352038329ull}}, {{7672800429497008965ull, 482752563261326ull}}, {{2448891528855696849ull, 386202050609061ull}}, {{16716508482052198772ull, 308961640487248ull}}, {{4610320682832056096ull, 494338624779598ull}}, {{11066954175749465523ull, 395470899823678ull}}, {{16232260970083393065ull, 316376719858942ull}}, {{11214222293165787611ull, 506202751774308ull}}, {{16350075464016450735ull, 404962201419446ull}}, {{9390711556471250265ull, 323969761135557ull}}, {{267743231386359131ull, 518351617816892ull}}, {{11282241029334818274ull, 414681294253513ull}}, {{16404490452951675266ull, 331745035402810ull}}, {{7800440651013128809ull, 530792056644497ull}}, {{17308398965036234017ull, 424633645315597ull}}, {{6468021542545166567ull, 339706916252478ull}}, {{6659485653330356185ull, 543531066003965ull}}, {{5327588522664284948ull, 434824852803172ull}}, {{15330117262357158928ull, 347859882242537ull}}, {{9770792360803812992ull, 556575811588060ull}}, {{7816633888643050393ull, 445260649270448ull}}, {{13632004740398260961ull, 356208519416358ull}}, {{18284301421802429415ull, 284966815533086ull}}, {{3429440571690514802ull, 455946904852939ull}}, {{6432901272094322165ull, 364757523882351ull}}, {{1456972202933547408ull, 291806019105881ull}}, {{13399201968919406823ull, 466889630569409ull}}, {{14408710389877435782ull, 373511704455527ull}}, {{4148270682418127979ull, 298809363564422ull}}, {{10326581906610915090ull, 478094981703075ull}}, {{8261265525288732072ull, 382475985362460ull}}, {{6609012420230985657ull, 305980788289968ull}}, {{6885071057627666729ull, 489569261263949ull}}, {{9197405660844043706ull, 391655409011159ull}}, {{11047273343417145288ull, 313324327208927ull}}, {{2918242090499791168ull, 501318923534284ull}}, {{6023942487141743258ull, 401055138827427ull}}, {{15887200433939125576ull, 320844111061941ull}}, {{18040823064818780275ull, 513350577699106ull}}, {{10743309637113113897ull, 410680462159285ull}}, {{8594647709690491117ull, 328544369727428ull}}, {{10062087520762875465ull, 525670991563885ull}}, {{8049670016610300372ull, 420536793251108ull}}, {{13818433642772060944ull, 336429434600886ull}}, {{14730796198951476864ull, 538287095361418ull}}, {{716590514935450521ull, 430629676289135ull}}, {{573272411948360417ull, 344503741031308ull}}, {{15674631118085017960ull, 551205985650092ull}}, {{5161007264984193722ull, 440964788520074ull}}, {{7818154626729265300ull, 352771830816059ull}}, {{9943872516125322563ull, 282217464652847ull}}, {{1152800766832874809ull, 451547943444556ull}}, {{15679635872433941140ull, 361238354755644ull}}, {{16233057512689063235ull, 288990683804515ull}}, {{7526147946592949560ull, 462385094087225ull}}, {{6020918357274359648ull, 369908075269780ull}}, {{4816734685819487718ull, 295926460215824ull}}, {{15085473126795000996ull, 473482336345318ull}}, {{1000332057210269827ull, 378785869076255ull}}, {{800265645768215862ull, 303028695261004ull}}, {{8659122662712966025ull, 484845912417606ull}}, {{3237949315428462497ull, 387876729934085ull}}, {{2590359452342769997ull, 310301383947268ull}}, {{455226309006521673ull, 496482214315629ull}}, {{4053529861947127662ull, 397185771452503ull}}, {{10621521519041522776ull, 317748617162002ull}}, {{2237039171498795148ull, 508397787459204ull}}, {{5478980151940946442ull, 406718229967363ull}}, {{11761881751036577800ull, 325374583973890ull}}, {{372266727948972864ull, 520599334358225ull}}, {{297813382359178291ull, 416479467486580ull}}, {{238250705887342633ull, 333183573989264ull}}, {{7759898758903568859ull, 533093718382822ull}}, {{17275965451348586057ull, 426474974706257ull}}, {{6442074731595048199ull, 341179979765006ull}}, {{2928621941068256472ull, 545887967624010ull}}, {{2342897552854605178ull, 436710374099208ull}}, {{9253015671767504788ull, 349368299279366ull}}, {{7426127445344187015ull, 558989278846986ull}}, {{2251553141533439289ull, 447191423077589ull}}, {{5490591327968661754ull, 357753138462071ull}}, {{703124247633019080ull, 286202510769657ull}}, {{4814347610954740852ull, 457924017231451ull}}, {{162129274021882358ull, 366339213785161ull}}, {{14887098678185147179ull, 293071371028128ull}}, {{1683264996644773548ull, 468914193645006ull}}, {{16104007256283460131ull, 375131354916004ull}}, {{16572554619768678428ull, 300105083932803ull}}, {{4379994503178423545ull, 480168134292486ull}}, {{18261390861510380129ull, 384134507433988ull}}, {{3541066244982573134ull, 307307605947191ull}}, {{16733752436197847984ull, 491692169515505ull}}, {{13387001948958278387ull, 393353735612404ull}}, {{14398950373908533033ull, 314682988489923ull}}, {{902227709802190913ull, 503492781583878ull}}, {{8100479797325573377ull, 402794225267102ull}}, {{17548430282086189671ull, 322235380213681ull}}, {{2252046748144531211ull, 515576608341891ull}}, {{16559032657483266262ull, 412461286673512ull}}, {{5868528496502792363ull, 329969029338810ull}}, {{9389645594404467781ull, 527950446942096ull}}, {{3822367660781663902ull, 422360357553677ull}}, {{14125940572851062091ull, 337888286042941ull}}, {{15222807287077878699ull, 540621257668706ull}}, {{8488897014920392636ull, 432497006134965ull}}, {{6791117611936314109ull, 345997604907972ull}}, {{14555136993840012897ull, 553596167852755ull}}, {{11644109595072010318ull, 442876934282204ull}}, {{13004636490799518577ull, 354301547425763ull}}, {{17782406822123435508ull, 283441237940610ull}}, {{10005106841687945197ull, 453505980704977ull}}, {{625387843866535511ull, 362804784563982ull}}, {{11568356719318959379ull, 290243827651185ull}}, {{62626677200783390ull, 464390124241897ull}}, {{11118147785986357682ull, 371512099393517ull}}, {{1515820599305265499ull, 297209679514814ull}}, {{9804010588372245445ull, 475535487223702ull}}, {{464510841213975709ull, 380428389778962ull}}, {{11439655117196911537ull, 304342711823169ull}}, {{7235401743289327490ull, 486948338917071ull}}, {{2098972579889551669ull, 389558671133657ull}}, {{12747224508137372304ull, 311646936906925ull}}, {{1948815139310244071ull, 498635099051081ull}}, {{16316447370415836550ull, 398908079240864ull}}, {{16742506711074579563ull, 319126463392691ull}}, {{962569034525955038ull, 510602341428307ull}}, {{11838101671846495000ull, 408481873142645ull}}, {{9470481337477196000ull, 326785498514116ull}}, {{7774072510479692954ull, 522856797622586ull}}, {{2529909193641844040ull, 418285438098069ull}}, {{5713276169655385555ull, 334628350478455ull}}, {{9141241871448616888ull, 535405360765528ull}}, {{14691691126642714157ull, 428324288612422ull}}, {{4374655271830350679ull, 342659430889938ull}}, {{3310099620186650764ull, 548255089423901ull}}, {{17405474955116961904ull, 438604071539120ull}}, {{13924379964093569523ull, 350883257231296ull}}, {{14900310313065890590ull, 561413211570074ull}}, {{15609597065194622795ull, 449130569256059ull}}, {{16177026466897608559ull, 359304455404847ull}}, {{5562923544034266201ull, 287443564323878ull}}, {{5211328855712915599ull, 459909702918205ull}}, {{4169063084570332479ull, 367927762334564ull}}, {{7024599282398176306ull, 294342209867651ull}}, {{3860661222353261444ull, 470947535788242ull}}, {{14156575422108340125ull, 376758028630593ull}}, {{257213893460941130ull, 301406422904475ull}}, {{411542229537505808ull, 482250276647160ull}}, {{329233783630004647ull, 385800221317728ull}}, {{7642084656387824364ull, 308640177054182ull}}, {{15916684264962429305ull, 493824283286691ull}}, {{9043998597228033121ull, 395059426629353ull}}, {{14613896507266247143ull, 316047541303482ull}}, {{8624839152658354136ull, 505676066085572ull}}, {{17967917766352414278ull, 404540852868457ull}}, {{6995636583598110776ull, 323632682294766ull}}, {{3814320904273156596ull, 517812291671626ull}}, {{17808851982386166569ull, 414249833337300ull}}, {{14247081585908933255ull, 331399866669840ull}}, {{4348586463744741593ull, 530239786671745ull}}, {{3478869170995793274ull, 424191829337396ull}}, {{17540490595764275912ull, 339353463469916ull}}, {{2239343250029469197ull, 542965541551867ull}}, {{12859521044249306327ull, 434372433241493ull}}, {{17666314464883265708ull, 347497946593194ull}}, {{17198056699587494164ull, 555996714549111ull}}, {{10069096544928085008ull, 444797371639289ull}}, {{11744626050684378329ull, 355837897311431ull}}, {{5706352025805592340ull, 284670317849145ull}}, {{9130163241288947745ull, 455472508558632ull}}, {{18372177037256889165ull, 364378006846905ull}}, {{14697741629805511332ull, 291502405477524ull}}, {{12448340163463087162ull, 466403848764039ull}}, {{13648020945512380053ull, 373123079011231ull}}, {{7229067941667993719ull, 298498463208985ull}}, {{11566508706668789950ull, 477597541134376ull}}, {{5563858150593121637ull, 382078032907501ull}}, {{761737705732586986ull, 305662426326001ull}}, {{12286826773397870148ull, 489059882121601ull}}, {{6140112603976385795ull, 391247905697281ull}}, {{1222741268439198313ull, 312998324557825ull}}, {{1956386029502717301ull, 500797319292520ull}}, {{1565108823602173840ull, 400637855434016ull}}, {{16009482317849380365ull, 320510284347212ull}}, {{10857776449591367292ull, 512816454955540ull}}, {{8686221159673093833ull, 410253163964432ull}}, {{18017023371964206036ull, 328202531171545ull}}, {{10380493321433178042ull, 525124049874473ull}}, {{15683092286630363080ull, 420099239899578ull}}, {{1478427385078559494ull, 336079391919663ull}}, {{17122879075093336484ull, 537727027071460ull}}, {{13698303260074669187ull, 430181621657168ull}}, {{18337340237543555996ull, 344145297325734ull}}, {{18271697935843958624ull, 550632475721175ull}}, {{14617358348675166899ull, 440505980576940ull}}, {{11693886678940133519ull, 352404784461552ull}}, {{1976411713668286169ull, 281923827569242ull}}, {{6851607556611168194ull, 451078124110787ull}}, {{16549332489514665525ull, 360862499288629ull}}, {{16928814806353642743ull, 288689999430903ull}}, {{4950010801714366449ull, 461903999089446ull}}, {{270659826629582836ull, 369523199271557ull}}, {{11284574305529397238ull, 295618559417245ull}}, {{18055318888847035582ull, 472989695067592ull}}, {{7065557481593807819ull, 378391756054074ull}}, {{9341794800016956578ull, 302713404843259ull}}, {{3878825235801399556ull, 484341447749215ull}}, {{3103060188641119645ull, 387473158199372ull}}, {{13550494595138626685ull, 309978526559497ull}}, {{6923396093254161404ull, 495965642495196ull}}, {{1849368059861418800ull, 396772513996157ull}}, {{12547540892114866009ull, 317418011196925ull}}, {{1629321353674233999ull, 507868817915081ull}}, {{16060852341907028492ull, 406295054332064ull}}, {{16538030688267533117ull, 325036043465651ull}}, {{635407398034680725ull, 520057669545043ull}}, {{7887023547911565226ull, 416046135636034ull}}, {{9998967653071162504ull, 332836908508827ull}}, {{1240952985946218714ull, 532539053614124ull}}, {{4682111203498885294ull, 426031242891299ull}}, {{7435037777541018558ull, 340824994313039ull}}, {{828013999839898724ull, 545319990900863ull}}, {{8041108829355739626ull, 436255992720690ull}}, {{6432887063484591700ull, 349004794176552ull}}, {{13981968116317257044ull, 558407670682483ull}}, {{117528048828074666ull, 446726136545987ull}}, {{11162068883288190702ull, 357380909236789ull}}, {{12619003921372462885ull, 285904727389431ull}}, {{12811708644712119969ull, 457447563823090ull}}, {{10249366915769695975ull, 365958051058472ull}}, {{820795903131936134ull, 292766440846778ull}}, {{16070668703978739107ull, 468426305354844ull}}, {{16545883777924901609ull, 374741044283875ull}}, {{13236707022339921287ull, 299792835427100ull}}, {{2731987162034322444ull, 479668536683361ull}}, {{16942984988595099248ull, 383734829346688ull}}, {{2486341546650348428ull, 306987863477351ull}}, {{15046192918866288455ull, 491180581563761ull}}, {{8347605520351120441ull, 392944465251009ull}}, {{10367433231022806676ull, 314355572200807ull}}, {{1830497910668849389ull, 502968915521292ull}}, {{12532444772760810481ull, 402375132417033ull}}, {{17404653447692469031ull, 321900105933626ull}}, {{2022003813114578187ull, 515040169493803ull}}, {{8996300679975483196ull, 412032135595042ull}}, {{18265086988206117526ull, 329625708476033ull}}, {{7088046292678326103ull, 527401133561654ull}}, {{9359785848884571206ull, 421920906849323ull}}, {{14866526308591477611ull, 337536725479458ull}}, {{1650349205294902238ull, 540058760767134ull}}, {{5009628178977832114ull, 432047008613707ull}}, {{15075748987407996661ull, 345637606890965ull}}, {{5674454306143243041ull, 553020171025545ull}}, {{4539563444914594433ull, 442416136820436ull}}, {{18389046014899316839ull, 353932909456348ull}}, {{3643190367693722501ull, 283146327565079ull}}, {{13207802217793776649ull, 453034124104126ull}}, {{6876892959493110996ull, 362427299283301ull}}, {{1812165552852578473ull, 289941839426641ull}}, {{13967511328789856527ull, 463906943082625ull}}, {{11174009063031885222ull, 371125554466100ull}}, {{8939207250425508177ull, 296900443572880ull}}, {{14302731600680813084ull, 475040709716608ull}}, {{374138836318919498ull, 380032567773287ull}}, {{11367357513280866568ull, 304026054218629ull}}, {{7119725577023655539ull, 486441686749807ull}}, {{16763826905844655401ull, 389153349399845ull}}, {{13411061524675724320ull, 311322679519876ull}}, {{14079000809997338266ull, 498116287231802ull}}, {{3884503018514049967ull, 398493029785442ull}}, {{14175648859036970943ull, 318794423828353ull}}, {{544945286007691570ull, 510071078125366ull}}, {{15193351487773794548ull, 408056862500292ull}}, {{4775983560735214992ull, 326445490000234ull}}, {{15020271326660164634ull, 522312784000374ull}}, {{15705565876070042031ull, 417850227200299ull}}, {{16253801515597943948ull, 334280181760239ull}}, {{14938035980730979347ull, 534848290816383ull}}, {{882382340359052508ull, 427878632653107ull}}, {{11773952316512972976ull, 342302906122485ull}}, {{391579632711205145ull, 547684649795977ull}}, {{11381310150394695086ull, 438147719836781ull}}, {{5415699305573845745ull, 350518175869425ull}}, {{8665118888918153193ull, 560829081391080ull}}, {{6932095111134522554ull, 448663265112864ull}}, {{9235024903649528366ull, 358930612090291ull}}, {{3698671108177712370ull, 287144489672233ull}}, {{2228524958342429469ull, 459431183475573ull}}, {{9161517596157764221ull, 367544946780458ull}}, {{14707911706410032023ull, 294035957424366ull}}, {{16153961100772230591ull, 470457531878986ull}}, {{9233820065875874150ull, 376366025503189ull}}, {{11076404867442609643ull, 301092820402551ull}}, {{10343550158424354783ull, 481748512644082ull}}, {{896142497255663180ull, 385398810115266ull}}, {{15474309256772171836ull, 308319048092212ull}}, {{10001499551867833646ull, 493310476947540ull}}, {{8001199641494266916ull, 394648381558032ull}}, {{17469006157421144503ull, 315718705246425ull}}, {{9503665778164279588ull, 505149928394281ull}}, {{3913583807789513347ull, 404119942715425ull}}, {{3130867046231610678ull, 323295954172340ull}}, {{5009387273970577085ull, 517273526675744ull}}, {{7696858633918371991ull, 413818821340595ull}}, {{6157486907134697593ull, 331055057072476ull}}, {{2473281421931695502ull, 529688091315962ull}}, {{13046671581771087371ull, 423750473052769ull}}, {{14126686080158780220ull, 339000378442215ull}}, {{4155953654544496737ull, 542400605507545ull}}, {{3324762923635597389ull, 433920484406036ull}}, {{17417205597876119204ull, 347136387524828ull}}, {{5731436068150328788ull, 555418220039726ull}}, {{895800039778352707ull, 444334576031781ull}}, {{15474035290790323458ull, 355467660825424ull}}, {{16068577047374169090ull, 284374128660339ull}}, {{14641676831572939574ull, 454998605856543ull}}, {{645295021032620689ull, 363998884685235ull}}, {{516236016826096551ull, 291199107748188ull}}, {{15583372885889395775ull, 465918572397100ull}}, {{12466698308711516620ull, 372734857917680ull}}, {{9973358646969213296ull, 298187886334144ull}}, {{4889327390925010305ull, 477100618134631ull}}, {{222113097998097920ull, 381680494507705ull}}, {{177690478398478336ull, 305344395606164ull}}, {{7663002394921385985ull, 488551032969862ull}}, {{17198448360162839757ull, 390840826375889ull}}, {{17448107502872182129ull, 312672661100711ull}}, {{2091530301402119144ull, 500276257761139ull}}, {{5362573055863605638ull, 400221006208911ull}}, {{600709629948974187ull, 320176804967129ull}}, {{8339833037402179346ull, 512282887947406ull}}, {{2982517615179833154ull, 409826310357925ull}}, {{2386014092143866523ull, 327861048286340ull}}, {{3817622547430186437ull, 524577677258144ull}}, {{6743446852686059473ull, 419662141806515ull}}, {{5394757482148847578ull, 335729713445212ull}}, {{12320960786180066448ull, 537167541512339ull}}, {{13546117443685963482ull, 429734033209871ull}}, {{7147545140206860462ull, 343787226567897ull}}, {{15125421039072887063ull, 550059562508635ull}}, {{12100336831258309650ull, 440047650006908ull}}, {{17058967094490468367ull, 352038120005526ull}}, {{9957824860850464370ull, 281630496004421ull}}, {{8553822147876922346ull, 450608793607074ull}}, {{10532406533043448200ull, 360487034885659ull}}, {{12115274041176668883ull, 288389627908527ull}}, {{4627043206915028920ull, 461423404653644ull}}, {{7390983380273933459ull, 369138723722915ull}}, {{5912786704219146767ull, 295310978978332ull}}, {{13149807541492545151ull, 472497566365331ull}}, {{6830497218452125798ull, 377998053092265ull}}, {{5464397774761700638ull, 302398442473812ull}}, {{12432385254360631344ull, 483837507958099ull}}, {{13635257018230415399ull, 387070006366479ull}}, {{14597554429326242642ull, 309656005093183ull}}, {{1219994198470526288ull, 495449608149094ull}}, {{4665344173518331354ull, 396359686519275ull}}, {{3732275338814665083ull, 317087749215420ull}}, {{5971640542103464133ull, 507340398744672ull}}, {{15845358877908502276ull, 405872318995737ull}}, {{5297589472842981174ull, 324697855196590ull}}, {{8476143156548769879ull, 519516568314544ull}}, {{10470263339980926226ull, 415613254651635ull}}, {{8376210671984740981ull, 332490603721308ull}}, {{9712588260433675246ull, 531984965954093ull}}, {{15148768237830760843ull, 425587972763274ull}}, {{15808363405006518998ull, 340470378210619ull}}, {{14225335003784699427ull, 544752605136991ull}}, {{7690919188285849219ull, 435802084109593ull}}, {{13531432980112500021ull, 348641667287674ull}}, {{10582246323954269064ull, 557826667660279ull}}, {{12155145873905325575ull, 446261334128223ull}}, {{17102814328608081106ull, 357009067302578ull}}, {{2614205018660733915ull, 285607253842063ull}}, {{493379215115263941ull, 456971606147301ull}}, {{15152098631059852446ull, 365577284917840ull}}, {{12121678904847881957ull, 292461827934272ull}}, {{4637290988788969838ull, 467938924694836ull}}, {{20483976289265547ull, 374351139755869ull}}, {{3705735995773322761ull, 299480911804695ull}}, {{5929177593237316417ull, 479169458887512ull}}, {{15811388518815584103ull, 383335567110009ull}}, {{16338459629794377606ull, 306668453688007ull}}, {{11384140148703362877ull, 490669525900812ull}}, {{1728614489478869655ull, 392535620720650ull}}, {{1382891591583095724ull, 314028496576520ull}}, {{2212626546532953159ull, 502445594522432ull}}, {{12838147681452093496ull, 401956475617945ull}}, {{10270518145161674797ull, 321565180494356ull}}, {{9054131402774859029ull, 514504288790970ull}}, {{7243305122219887223ull, 411603431032776ull}}, {{2105295283033999455ull, 329282744826221ull}}, {{14436518897080130098ull, 526852391721953ull}}, {{481168673438373109ull, 421481913377563ull}}, {{7763632568234519133ull, 337185530702050ull}}, {{12421812109175230614ull, 539496849123280ull}}, {{9937449687340184491ull, 431597479298624ull}}, {{11639308564614057916ull, 345277983438899ull}}, {{7554847259156761696ull, 552444773502239ull}}, {{9733226622067319680ull, 441955818801791ull}}, {{4097232482911945421ull, 353564655041433ull}}, {{10656483615813376983ull, 282851724033146ull}}, {{9671676155817582526ull, 452562758453034ull}}, {{11426689739395976344ull, 362050206762427ull}}, {{1762654162032960429ull, 289640165409942ull}}, {{6509595473994647010ull, 463424264655907ull}}, {{16275722823421448577ull, 370739411724725ull}}, {{13020578258737158862ull, 296591529379780ull}}, {{2386181140269902563ull, 474546447007649ull}}, {{5598293726957832374ull, 379637157606119ull}}, {{8167983796308176222ull, 303709726084895ull}}, {{13068774074093081955ull, 485935561735832ull}}, {{3076321629790644918ull, 388748449388666ull}}, {{17218452562800157227ull, 310998759510932ull}}, {{12792128841512610271ull, 497598015217492ull}}, {{2855005443726267570ull, 398078412173994ull}}, {{5973353169722924379ull, 318462729739195ull}}, {{9557365071556679007ull, 509540367582712ull}}, {{267194427761522559ull, 407632294066170ull}}, {{213755542209218047ull, 326105835252936ull}}, {{11410055311760479845ull, 521769336404697ull}}, {{1749346619924563230ull, 417415469123758ull}}, {{8778174925423471230ull, 333932375299006ull}}, {{6666382251193733322ull, 534291800478410ull}}, {{5333105800954986657ull, 427433440382728ull}}, {{11645182270247809972ull, 341946752306182ull}}, {{3874896373428854663ull, 547114803689892ull}}, {{14167963542968814700ull, 437691842951913ull}}, {{266324390149320790ull, 350153474361531ull}}, {{11494165468464644234ull, 560245558978449ull}}, {{12884681189513625711ull, 448196447182759ull}}, {{13997093766352810892ull, 358557157746207ull}}, {{3818977383598428067ull, 286845726196966ull}}, {{17178410257983215877ull, 458953161915145ull}}, {{13742728206386572701ull, 367162529532116ull}}, {{7304833750367347838ull, 293730023625693ull}}, {{7998385185845846217ull, 469968037801109ull}}, {{10088056963418587297ull, 375974430240887ull}}, {{691747941251049191ull, 300779544192710ull}}, {{1106796706001678706ull, 481247270708336ull}}, {{15642832623768984258ull, 384997816566668ull}}, {{1446219654789456436ull, 307998253253335ull}}, {{2313951447663130299ull, 492797205205336ull}}, {{16608556417098145532ull, 394237764164268ull}}, {{2218798689452785456ull, 315390211331415ull}}, {{3550077903124456729ull, 504624338130264ull}}, {{6529411137241475706ull, 403699470504211ull}}, {{1534180095051270242ull, 322959576403369ull}}, {{9833385781565853034ull, 516735322245390ull}}, {{7866708625252682427ull, 413388257796312ull}}, {{17361413344427876911ull, 330710606237049ull}}, {{16710214906858872088ull, 529136969979279ull}}, {{17057520740229007994ull, 423309575983423ull}}, {{2577970147957475425ull, 338647660786739ull}}, {{11503449866215781327ull, 541836257258782ull}}, {{1824062263488804415ull, 433469005807026ull}}, {{16216645069758684825ull, 346775204645620ull}}, {{7499888037904344104ull, 554840327432993ull}}, {{13378608059807295930ull, 443872261946394ull}}, {{14392235262587747067ull, 355097809557115ull}}, {{11513788210070197653ull, 284078247645692ull}}, {{3664665877144674953ull, 454525196233108ull}}, {{10310430331199560608ull, 363620156986486ull}}, {{4558995450217738163ull, 290896125589189ull}}, {{14673090349832201708ull, 465433800942702ull}}, {{4359774650381940720ull, 372347040754162ull}}, {{14555866164531283546ull, 297877632603329ull}}, {{12221339419024322704ull, 476604212165327ull}}, {{2398373905735637516ull, 381283369732262ull}}, {{12986745568814240983ull, 305026695785809ull}}, {{9710746465877054603ull, 488042713257295ull}}, {{7768597172701643682ull, 390434170605836ull}}, {{2525528923419404623ull, 312347336484669ull}}, {{11419543906954868043ull, 499755738375470ull}}, {{9135635125563894434ull, 399804590700376ull}}, {{3619159285709205224ull, 319843672560301ull}}, {{16858701301360459328ull, 511749876096481ull}}, {{9797612226346457139ull, 409399900877185ull}}, {{7838089781077165711ull, 327519920701748ull}}, {{8851594834981554815ull, 524031873122797ull}}, {{18149322312210974822ull, 419225498498237ull}}, {{7140760220284959211ull, 335380398798590ull}}, {{11425216352455934738ull, 536608638077744ull}}, {{12829521896706658113ull, 429286910462195ull}}, {{10263617517365326490ull, 343429528369756ull}}, {{9043090398300701739ull, 549487245391610ull}}, {{7234472318640561391ull, 439589796313288ull}}, {{13166275484396269759ull, 351671837050630ull}}, {{2619296701324479999ull, 562674939281009ull}}, {{5784786175801494322ull, 450139951424807ull}}, {{15695875384866926427ull, 360111961139845ull}}, {{12556700307893541142ull, 288089568911876ull}}, {{12712022863145845180ull, 460943310259002ull}}, {{2790920661032855498ull, 368754648207202ull}}, {{13300782973052015368ull, 295003718565761ull}}, {{13902555127399403942ull, 472005949705218ull}}, {{53997657693792184ull, 377604759764175ull}}, {{43198126155033747ull, 302083807811340ull}}, {{69117001848053996ull, 483334092498144ull}}, {{3744642416220353520ull, 386667273998515ull}}, {{2995713932976282816ull, 309333819198812ull}}, {{8482491107503962829ull, 494934110718099ull}}, {{10475341700745080586ull, 395947288574479ull}}, {{12069622175337974792ull, 316757830859583ull}}, {{15622046665798849344ull, 506812529375333ull}}, {{1429590888413348506ull, 405450023500267ull}}, {{12211719154956409774ull, 324360018800213ull}}, {{15849401833188345316ull, 518976030080341ull}}, {{8990172651808765929ull, 415180824064273ull}}, {{14570835750930833390ull, 332144659251418ull}}, {{1177244313037871484ull, 531431454802270ull}}, {{941795450430297187ull, 425145163841816ull}}, {{15510831619311879043ull, 340116131073452ull}}, {{10059935331931365176ull, 544185809717524ull}}, {{11737297080287002464ull, 435348647774019ull}}, {{13079186478971512294ull, 348278918219215ull}}, {{2479954292644868055ull, 557246269150745ull}}, {{1983963434115894444ull, 445797015320596ull}}, {{16344566006260356848ull, 356637612256476ull}}, {{9386303990266375155ull, 285310089805181ull}}, {{7639388754942379602ull, 456496143688290ull}}, {{6111511003953903681ull, 365196914950632ull}}, {{15957255247388853915ull, 292157531960505ull}}, {{7084864322112614648ull, 467452051136809ull}}, {{9357240272432002041ull, 373961640909447ull}}, {{107094588461780986ull, 299169312727558ull}}, {{14928746600506490871ull, 478670900364092ull}}, {{4564299650921372051ull, 382936720291274ull}}, {{7340788535479007964ull, 306349376233019ull}}, {{677215212540681772ull, 490159001972831ull}}, {{15299167429000186711ull, 392127201578264ull}}, {{15928682757942059692ull, 313701761262611ull}}, {{18107194783223474860ull, 501922818020178ull}}, {{3417709382353048919ull, 401538254416143ull}}, {{10112865135366259781ull, 321230603532914ull}}, {{5112537772360284681ull, 513968965652663ull}}, {{11468727847372048391ull, 411175172522130ull}}, {{9174982277897638713ull, 328940138017704ull}}, {{3611925200410490971ull, 526304220828327ull}}, {{13957586604554123746ull, 421043376662661ull}}, {{7476720468901388674ull, 336834701330129ull}}, {{894706306016490908ull, 538935522128207ull}}, {{11783811489038923696ull, 431148417702565ull}}, {{9427049191231138957ull, 344918734162052ull}}, {{325883447002181039ull, 551869974659284ull}}, {{3950055572343655154ull, 441495979727427ull}}, {{14228090902100655093ull, 353196783781941ull}}, {{7693123906938613751ull, 282557427025553ull}}, {{8619649436359871678ull, 452091883240885ull}}, {{6895719549087897343ull, 361673506592708ull}}, {{12895273268754138520ull, 289338805274166ull}}, {{13253739600522800987ull, 462942088438666ull}}, {{6913642865676330466ull, 370353670750933ull}}, {{12909611922024885019ull, 296282936600746ull}}, {{13276681445755995384ull, 474052698561194ull}}, {{14310693971346706631ull, 379242158848955ull}}, {{11448555177077365304ull, 303393727079164ull}}, {{7249641839098053518ull, 485429963326663ull}}, {{13178411100762263460ull, 388343970661330ull}}, {{10542728880609810768ull, 310675176529064ull}}, {{5800319764749966260ull, 497080282446503ull}}, {{12018953441283793654ull, 397664225957202ull}}, {{2236465123543214277ull, 318131380765762ull}}, {{7267693012411053167ull, 509010209225219ull}}, {{9503503224670752856ull, 407208167380175ull}}, {{7602802579736602285ull, 325766533904140ull}}, {{12164484127578563656ull, 521226454246624ull}}, {{13420936116804761248ull, 416981163397299ull}}, {{14426097708185719322ull, 333584930717839ull}}, {{12013709888871419945ull, 533735889148543ull}}, {{16989665540580956603ull, 426988711318834ull}}, {{17281081247206675605ull, 341590969055067ull}}, {{12892334736563039676ull, 546545550488108ull}}, {{17692565418734252387ull, 437236440390486ull}}, {{10464703520245491586ull, 349789152312389ull}}, {{5675479188167055569ull, 559662643699823ull}}, {{11919080980017465101ull, 447730114959858ull}}, {{16913962413497792727ull, 358184091967886ull}}, {{9841821116056323858ull, 286547273574309ull}}, {{4678867341464387204ull, 458475637718895ull}}, {{3743093873171509763ull, 366780510175116ull}}, {{17751870357504849103ull, 293424408140092ull}}, {{13645597313040117273ull, 469479053024148ull}}, {{18295175479915914465ull, 375583242419318ull}}, {{3568093939707000602ull, 300466593935455ull}}, {{5708950303531200963ull, 480746550296728ull}}, {{11945857872308781417ull, 384597240237382ull}}, {{2177988668363204487ull, 307677792189906ull}}, {{14552828313606858149ull, 492284467503849ull}}, {{15331611465627396843ull, 393827574003079ull}}, {{15954637987243827797ull, 315062059202463ull}}, {{3391327891138662537ull, 504099294723942ull}}, {{13781108757136660999ull, 403279435779153ull}}, {{18403584635193149445ull, 322623548623322ull}}, {{14688340157341397820ull, 516197677797316ull}}, {{8061323311131207933ull, 412958142237853ull}}, {{13827756278388786992ull, 330366513790282ull}}, {{7367014786454417895ull, 528586422064452ull}}, {{16961658273389265286ull, 422869137651561ull}}, {{9879977803969501905ull, 338295310121249ull}}, {{4739918042125472079ull, 541272496193999ull}}, {{7481283248442287987ull, 433017996955199ull}}, {{9674375413495740712ull, 346414397564159ull}}, {{4410954217367454170ull, 554263036102655ull}}, {{3528763373893963336ull, 443410428882124ull}}, {{6512359513857080992ull, 354728343105699ull}}, {{8899236425827575117ull, 283782674484559ull}}, {{3170731837098389218ull, 454052279175295ull}}, {{2536585469678711374ull, 363241823340236ull}}, {{16786663634710610392ull, 290593458672188ull}}, {{4722568927085514688ull, 464949533875502ull}}, {{14846101585894142720ull, 371959627100401ull}}, {{8187532453973403853ull, 297567701680321ull}}, {{5721354296873625518ull, 476108322688514ull}}, {{8266432252240810738ull, 380886658150811ull}}, {{2923796987050738267ull, 304709326520649ull}}, {{12056772808765001874ull, 487534922433038ull}}, {{17024115876495822145ull, 390027937946430ull}}, {{13619292701196657716ull, 312022350357144ull}}, {{10722821877688921376ull, 499235760571431ull}}, {{4888908687409226778ull, 399388608457145ull}}, {{3911126949927381422ull, 319510886765716ull}}, {{17325849564109541245ull, 511217418825145ull}}, {{13860679651287632996ull, 408973935060116ull}}, {{7399194906288196074ull, 327179148048093ull}}, {{8149363035319203395ull, 523486636876949ull}}, {{10208839242997273039ull, 418789309501559ull}}, {{11856420209139728754ull, 335031447601247ull}}, {{4212877075655924714ull, 536050316161996ull}}, {{18127696919492381064ull, 428840252929596ull}}, {{10812808720851994528ull, 343072202343677ull}}, {{2543098694395549952ull, 548915523749884ull}}, {{5723827770258350285ull, 439132418999907ull}}, {{15647108660432411197ull, 351305935199925ull}}, {{6588629782982306300ull, 562089496319881ull}}, {{1581555011643934717ull, 449671597055905ull}}, {{1265244009315147773ull, 359737277644724ull}}, {{4701544022194028542ull, 287789822115779ull}}, {{14901168064994266314ull, 460463715385246ull}}, {{8231585637253502728ull, 368370972308197ull}}, {{17653314954028533152ull, 294696777846557ull}}, {{13487908667478011750ull, 471514844554492ull}}, {{3411629304498588754ull, 377211875643594ull}}, {{6418652258340781326ull, 301769500514875ull}}, {{10269843613345250122ull, 482831200823800ull}}, {{8215874890676200097ull, 386264960659040ull}}, {{6572699912540960078ull, 309011968527232ull}}, {{14205668674807446448ull, 494419149643571ull}}, {{7675186125104046835ull, 395535319714857ull}}, {{17208195344308968438ull, 316428255771885ull}}, {{9086368477184797884ull, 506285209235017ull}}, {{18337141225973569277ull, 405028167388013ull}}, {{3601666536553124452ull, 324022533910411ull}}, {{16830712902710730093ull, 518436054256657ull}}, {{6085872692684763428ull, 414748843405326ull}}, {{1179349339405900419ull, 331799074724261ull}}, {{12955005387275171640ull, 530878519558817ull}}, {{2985306680336316666ull, 424702815647054ull}}, {{6077594159010963656ull, 339762252517643ull}}, {{6034801839675631526ull, 543619604028229ull}}, {{8517190286482415544ull, 434895683222583ull}}, {{14192449858669753082ull, 347916546578066ull}}, {{15329222144387784284ull, 556666474524906ull}}, {{8574028900768317104ull, 445333179619925ull}}, {{6859223120614653683ull, 356266543695940ull}}, {{5487378496491722946ull, 285013234956752ull}}, {{12469154409128667038ull, 456021175930803ull}}, {{17354021156786754277ull, 364816940744642ull}}, {{6504519295945582775ull, 291853552595714ull}}, {{17785928502996753086ull, 466965684153142ull}}, {{6850045172913581823ull, 373572547322514ull}}, {{9169384953072775781ull, 298858037858011ull}}, {{7292318295432620604ull, 478172860572818ull}}, {{13212552265829917129ull, 382538288458254ull}}, {{14259390627405844027ull, 306030630766603ull}}, {{678932115397888504ull, 489649009226566ull}}, {{15300540951285952096ull, 391719207381252ull}}, {{4861735131544941030ull, 313375365905002ull}}, {{11468125025213815971ull, 501400585448003ull}}, {{16553197649654873423ull, 401120468358402ull}}, {{5863860490240078092ull, 320896374686722ull}}, {{13071525599126035271ull, 513434199498755ull}}, {{10457220479300828217ull, 410747359599004ull}}, {{12055125198182572897ull, 328597887679203ull}}, {{15598851502350206312ull, 525756620286725ull}}, {{12479081201880165049ull, 420605296229380ull}}, {{9983264961504132039ull, 336484236983504ull}}, {{4905177494180880293ull, 538374779173607ull}}, {{14992188439570435204ull, 430699823338885ull}}, {{11993750751656348163ull, 344559858671108ull}}, {{15500652387908246738ull, 551295773873773ull}}, {{1332475466100866421ull, 441036619099019ull}}, {{4755329187622603460ull, 352829295279215ull}}, {{3804263350098082768ull, 282263436223372ull}}, {{9776170174898842752ull, 451621497957395ull}}, {{7820936139919074202ull, 361297198365916ull}}, {{2567400097193349038ull, 289037758692733ull}}, {{418491340767448138ull, 462460413908373ull}}, {{7713490702097779157ull, 369968331126698ull}}, {{13549490191162043972ull, 295974664901358ull}}, {{17989835491117360032ull, 473559463842173ull}}, {{3323821948668157056ull, 378847571073739ull}}, {{6348406373676435968ull, 303078056858991ull}}, {{2778752568398476902ull, 484924890974386ull}}, {{16980397313686422814ull, 387939912779508ull}}, {{2516271406723407282ull, 310351930223607ull}}, {{7715383065499361974ull, 496563088357771ull}}, {{2482957637657579256ull, 397250470686217ull}}, {{13054412554351794374ull, 317800376548973ull}}, {{17197711272220960676ull, 508480602478357ull}}, {{6379471388292947894ull, 406784481982686ull}}, {{1414228295892447992ull, 325427585586149ull}}, {{9641462902911737434ull, 520684136937838ull}}, {{15091867951813210594ull, 416547309550270ull}}, {{12073494361450568475ull, 333237847640216ull}}, {{11938893348837088914ull, 533180556224346ull}}, {{5861765864327760808ull, 426544444979477ull}}, {{15757459135687939616ull, 341235555983581ull}}, {{17833236987616882739ull, 545976889573730ull}}, {{14266589590093506191ull, 436781511658984ull}}, {{15102620486816715276ull, 349425209327187ull}}, {{9406797519939103149ull, 559080334923500ull}}, {{7525438015951282519ull, 447264267938800ull}}, {{6020350412761026015ull, 357811414351040ull}}, {{4816280330208820812ull, 286249131480832ull}}, {{11395397343076023623ull, 457998610369331ull}}, {{5426969059718908575ull, 366398888295465ull}}, {{4341575247775126860ull, 293119110636372ull}}, {{10635869211182113299ull, 468990577018195ull}}, {{8508695368945690639ull, 375192461614556ull}}, {{3117607480414642188ull, 300153969291645ull}}, {{4988171968663427501ull, 480246350866632ull}}, {{15058584019156472970ull, 384197080693305ull}}, {{12046867215325178376ull, 307357664554644ull}}, {{8206941100294554433ull, 491772263287431ull}}, {{2876204065493733223ull, 393417810629945ull}}, {{2300963252394986578ull, 314734248503956ull}}, {{14749587648057709495ull, 503574797606329ull}}, {{15489018933188077919ull, 402859838085063ull}}, {{1323168702324731366ull, 322287870468051ull}}, {{13185116367945301155ull, 515660592748881ull}}, {{6858744279614330601ull, 412528474199105ull}}, {{5486995423691464480ull, 330022779359284ull}}, {{16157890307390163815ull, 528036446974854ull}}, {{16615661060654041375ull, 422429157579883ull}}, {{2224482404297502131ull, 337943326063907ull}}, {{7248520661617913732ull, 540709321702251ull}}, {{2109467714552420663ull, 432567457361801ull}}, {{16444969430609577823ull, 346053965889440ull}}, {{7865207015265772901ull, 553686345423105ull}}, {{6292165612212618321ull, 442949076338484ull}}, {{8723081304512004980ull, 354359261070787ull}}, {{18046511487835334953ull, 283487408856629ull}}, {{17806371936310804956ull, 453579854170607ull}}, {{6866399919564823318ull, 362863883336486ull}}, {{1803771120909948331ull, 290291106669189ull}}, {{10264731422939737977ull, 464465770670702ull}}, {{833087508867969735ull, 371572616536562ull}}, {{11734516451320106757ull, 297258093229249ull}}, {{7707179877886439842ull, 475612949166799ull}}, {{9855092717051062197ull, 380490359333439ull}}, {{11573422988382760081ull, 304392287466751ull}}, {{11138779151928595483ull, 487027659946802ull}}, {{1532325692059055740ull, 389622127957442ull}}, {{12293906997872975561ull, 311697702365953ull}}, {{15980902381854850575ull, 498716323785525ull}}, {{12784721905483880460ull, 398973059028420ull}}, {{10227777524387104368ull, 319178447222736ull}}, {{8985746409535546343ull, 510685515556378ull}}, {{14567294757112257721ull, 408548412445102ull}}, {{4275138176205985530ull, 326838729956082ull}}, {{10529569896671487171ull, 522941967929731ull}}, {{4734307102595279414ull, 418353574343785ull}}, {{3787445682076223531ull, 334682859475028ull}}, {{2370564276580047327ull, 535492575160045ull}}, {{1896451421264037861ull, 428394060128036ull}}, {{16274556395978871582ull, 342715248102428ull}}, {{3903197345114732592ull, 548344396963886ull}}, {{17879953135059427366ull, 438675517571108ull}}, {{3235916063821810923ull, 350940414056887ull}}, {{8866814516856807801ull, 561504662491019ull}}, {{10782800428227356564ull, 449203729992815ull}}, {{8626240342581885251ull, 359362983994252ull}}, {{17969038718291239170ull, 287490387195401ull}}, {{2925020246072610410ull, 459984619512643ull}}, {{9718713826341908974ull, 367987695610114ull}}, {{11464319875815437503ull, 294390156488091ull}}, {{10964214171820879358ull, 471024250380946ull}}, {{5082022522714793163ull, 376819400304757ull}}, {{15133664462397565500ull, 301455520243805ull}}, {{5767119066126553184ull, 482328832390089ull}}, {{8303044067643152871ull, 385863065912071ull}}, {{2953086439372611973ull, 308690452729657ull}}, {{8414287117738089480ull, 493904724367451ull}}, {{3042080879448561261ull, 395123779493961ull}}, {{17191059962526490302ull, 316099023595168ull}}, {{5369603051590922544ull, 505758437752270ull}}, {{4295682441272738035ull, 404606750201816ull}}, {{18193941211985831721ull, 323685400161452ull}}, {{14352910680209689460ull, 517896640258324ull}}, {{15171677358909661891ull, 414317312206659ull}}, {{15826690701869639836ull, 331453849765327ull}}, {{10565309864023782445ull, 530326159624524ull}}, {{12141596705960936279ull, 424260927699619ull}}, {{13402626179510659347ull, 339408742159695ull}}, {{2997457813507503339ull, 543053987455513ull}}, {{9776663880289823317ull, 434443189964410ull}}, {{7821331104231858654ull, 347554551971528ull}}, {{8824780952029063523ull, 556087283154445ull}}, {{7059824761623250819ull, 444869826523556ull}}, {{1958510994556690332ull, 355895861218845ull}}, {{1566808795645352265ull, 284716688975076ull}}, {{13574940517258294594ull, 455546702360121ull}}, {{7170603599064725352ull, 364437361888097ull}}, {{16804529323477511251ull, 291549889510477ull}}, {{12129851658596376709ull, 466479823216764ull}}, {{13393230141619011690ull, 373183858573411ull}}, {{7025235298553299029ull, 298547086858729ull}}, {{172330033459547477ull, 477675338973967ull}}, {{11205910470993368951ull, 382140271179173ull}}, {{16343426006278515807ull, 305712216943338ull}}, {{4013388721594163353ull, 489139547109342ull}}, {{14278757421501061652ull, 391311637687473ull}}, {{354959492975118352ull, 313049310149979ull}}, {{7946632818244010009ull, 500878896239966ull}}, {{2667957439853297684ull, 400703116991973ull}}, {{9513063581366458794ull, 320562493593578ull}}, {{11531552915444423747ull, 512899989749725ull}}, {{9225242332355538998ull, 410319991799780ull}}, {{7380193865884431198ull, 328255993439824ull}}, {{740263741189358947ull, 525209589503719ull}}, {{4281559807693397481ull, 420167671602975ull}}, {{3425247846154717985ull, 336134137282380ull}}, {{5480396553847548776ull, 537814619651808ull}}, {{11763014872561859667ull, 430251695721446ull}}, {{5721063083307577410ull, 344201356577157ull}}, {{12843049748034034180ull, 550722170523451ull}}, {{6585090983685317021ull, 440577736418761ull}}, {{1578723972206343293ull, 352462189135009ull}}, {{4952327992506984958ull, 281969751308007ull}}, {{11613073602753086256ull, 451151602092811ull}}, {{5601110067460558681ull, 360921281674249ull}}, {{8170236868710357268ull, 288737025339399ull}}, {{2004332545710840660ull, 461979240543039ull}}, {{5292814851310582851ull, 369583392434431ull}}, {{544903066306555957ull, 295666713947545ull}}, {{871844906090489532ull, 473066742316072ull}}, {{11765522369098122595ull, 378453393852857ull}}, {{2033720265794677430ull, 302762715082286ull}}, {{14321998869497214857ull, 484420344131657ull}}, {{4078901466113951239ull, 387536275305326ull}}, {{18020516431858802284ull, 310029020244260ull}}, {{10386082217264532039ull, 496046432390817ull}}, {{930168144327804985ull, 396837145912654ull}}, {{4433483330204154311ull, 317469716730123ull}}, {{3404224513584736575ull, 507951546768197ull}}, {{13791426055093520229ull, 406361237414557ull}}, {{3654443214590995537ull, 325088989931646ull}}, {{16915155587571323829ull, 520142383890633ull}}, {{2464078025831328093ull, 416113907112507ull}}, {{13039308864890793444ull, 332891125690005ull}}, {{2416150110115717895ull, 532625801104009ull}}, {{5622268902834484639ull, 426100640883207ull}}, {{15565861566493318681ull, 340880512706565ull}}, {{6458634432679758274ull, 545408820330505ull}}, {{5166907546143806619ull, 436327056264404ull}}, {{7822874851656955618ull, 349061645011523ull}}, {{8827250947909218666ull, 558498632018437ull}}, {{18129847202553105902ull, 446798905614749ull}}, {{18193226576784395045ull, 357439124491799ull}}, {{18243930076169426359ull, 285951299593439ull}}, {{18122241677645351205ull, 457522079349503ull}}, {{3429746897890549994ull, 366017663479603ull}}, {{10122495147796260642ull, 292814130783682ull}}, {{1438596977506375734ull, 468502609253892ull}}, {{12218924026230831557ull, 374802087403113ull}}, {{17153836850468485892ull, 299841669922490ull}}, {{8999394887040025811ull, 479746671875985ull}}, {{7199515909632020649ull, 383797337500788ull}}, {{13138310357189437166ull, 307037870000630ull}}, {{2574552497793547849ull, 491260592001009ull}}, {{5748990812976748602ull, 393008473600807ull}}, {{15667239094607129851ull, 314406778880645ull}}, {{6620838477661856147ull, 503050846209033ull}}, {{12675368411613305564ull, 402440676967226ull}}, {{6450945914548734128ull, 321952541573781ull}}, {{2942815833794153958ull, 515124066518050ull}}, {{2354252667035323166ull, 412099253214440ull}}, {{1883402133628258533ull, 329679402571552ull}}, {{6702792228547123976ull, 527487044114483ull}}, {{12740931412321519827ull, 421989635291586ull}}, {{6503396315115305539ull, 337591708233269ull}}, {{17784131733668309508ull, 540146733173230ull}}, {{14227305386934647607ull, 432117386538584ull}}, {{15071193124289628408ull, 345693909230867ull}}, {{9356513739895764161ull, 553110254769388ull}}, {{14863908621400431975ull, 442488203815510ull}}, {{11891126897120345580ull, 353990563052408ull}}, {{16891599147180097110ull, 283192450441926ull}}, {{1201116932294783114ull, 453107920707083ull}}, {{8339591175319647138ull, 362486336565666ull}}, {{2982324125513807387ull, 289989069252533ull}}, {{1082369786080181496ull, 463982510804053ull}}, {{8244593458347965843ull, 371186008643242ull}}, {{17663721210904103644ull, 296948806914593ull}}, {{6125861048995103892ull, 475118091063350ull}}, {{4900688839196083113ull, 380094472850680ull}}, {{3920551071356866490ull, 304075578280544ull}}, {{13651579343654807031ull, 486520925248870ull}}, {{10921263474923845625ull, 389216740199096ull}}, {{5047661965197166177ull, 311373392159277ull}}, {{11765607959057376206ull, 498197427454843ull}}, {{16791183996729721611ull, 398557941963874ull}}, {{17122296012125687612ull, 318846353571099ull}}, {{16327627175175369210ull, 510154165713759ull}}, {{16751450554882205691ull, 408123332571007ull}}, {{6022462814421943906ull, 326498666056806ull}}, {{2257242873591289604ull, 522397865690890ull}}, {{1805794298873031683ull, 417918292552712ull}}, {{12512681883324156316ull, 334334634042169ull}}, {{8952244569092919136ull, 534935414467471ull}}, {{3472446840532424986ull, 427948331573977ull}}, {{13846003916651670958ull, 342358665259181ull}}, {{14774908637158852887ull, 547773864414690ull}}, {{11819926909727082310ull, 438219091531752ull}}, {{2077243898297845201ull, 350575273225402ull}}, {{7012939052018462645ull, 560920437160643ull}}, {{12989048871098590763ull, 448736349728514ull}}, {{14080587911620782933ull, 358989079782811ull}}, {{7575121514554716023ull, 287191263826249ull}}, {{1052147979061814668ull, 459506022121999ull}}, {{4531067197991362057ull, 367604817697599ull}}, {{7314202573134999969ull, 294083854158079ull}}, {{634677672790268981ull, 470534166652927ull}}, {{11575788582457946154ull, 376427333322341ull}}, {{5571282051224446600ull, 301141866657873ull}}, {{5224702467217204237ull, 481826986652597ull}}, {{15247808417999494359ull, 385461589322077ull}}, {{4819549104915774841ull, 308369271457662ull}}, {{11400627382607150069ull, 493390834332259ull}}, {{12809850720827630378ull, 394712667465807ull}}, {{2869182947178283656ull, 315770133972646ull}}, {{15658739159710984820ull, 505232214356233ull}}, {{1458944883543056886ull, 404185771484987ull}}, {{12235202351060176478ull, 323348617187989ull}}, {{8508277317470551396ull, 517357787500783ull}}, {{14185319483460261763ull, 413886230000626ull}}, {{7658906772026299087ull, 331108984000501ull}}, {{4875553205758257894ull, 529774374400802ull}}, {{14968489008832337284ull, 423819499520641ull}}, {{8285442392323959504ull, 339055599616513ull}}, {{9567359012976424884ull, 542488959386421ull}}, {{3964538395639229584ull, 433991167509137ull}}, {{14239677160737114637ull, 347192934007309ull}}, {{11715437012953652449ull, 555508694411695ull}}, {{9372349610362921959ull, 444406955529356ull}}, {{3808530873548427244ull, 355525564423485ull}}, {{3046824698838741795ull, 284420451538788ull}}, {{1185570703400076549ull, 455072722462061ull}}, {{15705851821687702532ull, 364058177969648ull}}, {{1496635013124431056ull, 291246542375719ull}}, {{9773313650482910336ull, 465994467801150ull}}, {{7818650920386328269ull, 372795574240920ull}}, {{6254920736309062615ull, 298236459392736ull}}, {{2629175548610679538ull, 477178335028378ull}}, {{9482038068372364277ull, 381742668022702ull}}, {{206932825214070775ull, 305394134418162ull}}, {{4020441335084423563ull, 488630615069059ull}}, {{6905701882809449174ull, 390904492055247ull}}, {{16592607950473290309ull, 312723593644197ull}}, {{11790777461789623201ull, 500357749830716ull}}, {{5743273154689788238ull, 400286199864573ull}}, {{11973316153235651236ull, 320228959891658ull}}, {{15467957030435131655ull, 512366335826653ull}}, {{1306319180122374355ull, 409893068661323ull}}, {{8423752973581720130ull, 327914454929058ull}}, {{9788655942988841885ull, 524663127886493ull}}, {{15209622383874894154ull, 419730502309194ull}}, {{15857046721841825647ull, 335784401847355ull}}, {{6924530681237369419ull, 537255042955769ull}}, {{9228973359731805858ull, 429804034364615ull}}, {{7383178687785444686ull, 343843227491692ull}}, {{15502434715198621822ull, 550149163986707ull}}, {{5023250142675076811ull, 440119331189366ull}}, {{329251299398151125ull, 352095464951493ull}}, {{7642098669002341547ull, 281676371961194ull}}, {{1159311426178015505ull, 450682195137911ull}}, {{15684844399910053697ull, 360545756110328ull}}, {{1479829075702311988ull, 288436604888263ull}}, {{17125121780091340474ull, 461498567821220ull}}, {{13700097424073072379ull, 369198854256976ull}}, {{7270729124516547580ull, 295359083405581ull}}, {{4254468969742655482ull, 472574533448930ull}}, {{3403575175794124385ull, 378059626759144ull}}, {{6412208955377209831ull, 302447701407315ull}}, {{10259534328603535730ull, 483916322251704ull}}, {{11896976277624738907ull, 387133057801363ull}}, {{16896278651583611772ull, 309706446241090ull}}, {{8587301768824227220ull, 495530313985745ull}}, {{6869841415059381776ull, 396424251188596ull}}, {{1806524317305595097ull, 317139400950877ull}}, {{6579787722430862479ull, 507423041521403ull}}, {{12642527807428510630ull, 405938433217122ull}}, {{2735324616458987857ull, 324750746573698ull}}, {{687170571592470248ull, 519601194517917ull}}, {{11617782901499707168ull, 415680955614333ull}}, {{16672923950683586381ull, 332544764491466ull}}, {{851236617900365947ull, 532071623186347ull}}, {{11749035738546023727ull, 425657298549077ull}}, {{2020530961352998335ull, 340525838839262ull}}, {{6922198352906707660ull, 544841342142819ull}}, {{9227107497067276451ull, 435873073714255ull}}, {{7381685997653821161ull, 348698458971404ull}}, {{742651152020382888ull, 557917534354247ull}}, {{11662167365842037280ull, 446334027483397ull}}, {{1951036263189809178ull, 357067221986718ull}}, {{8939526640035667988ull, 285653777589374ull}}, {{3235196179831337812ull, 457046044142999ull}}, {{6277505758606980573ull, 365636835314399ull}}, {{8711353421627494781ull, 292509468251519ull}}, {{2870119030378260681ull, 468015149202431ull}}, {{17053490483270249837ull, 374412119361944ull}}, {{17332141201358110193ull, 299529695489555ull}}, {{9284681848463424693ull, 479247512783289ull}}, {{11117094293512650077ull, 383398010226631ull}}, {{5204326620068209739ull, 306718408181305ull}}, {{8326922592109135582ull, 490749453090088ull}}, {{14040235703171129112ull, 392599562472070ull}}, {{11232188562536903290ull, 314079649977656ull}}, {{10592804070575224617ull, 502527439964250ull}}, {{8474243256460179694ull, 402021951971400ull}}, {{6779394605168143755ull, 321617561577120ull}}, {{10847031368269030008ull, 514588098523392ull}}, {{1298927465131403360ull, 411670478818714ull}}, {{4728490786847033011ull, 329336383054971ull}}, {{186887629471432172ull, 526938212887954ull}}, {{3838858918319056060ull, 421550570310363ull}}, {{10449784764139065495ull, 337240456248290ull}}, {{16719655622622504792ull, 539584729997264ull}}, {{17065073312839914156ull, 431667783997811ull}}, {{9962709835530021002ull, 345334227198249ull}}, {{4872289292622302634ull, 552534763517199ull}}, {{7587180248839752430ull, 442027810813759ull}}, {{9759093013813712267ull, 353622248651007ull}}, {{428576781567149167ull, 282897798920806ull}}, {{11753769294733169637ull, 452636478273289ull}}, {{13092364250528446033ull, 362109182618631ull}}, {{6784542585680846503ull, 289687346094905ull}}, {{10855268137089354405ull, 463499753751848ull}}, {{16062912139155304170ull, 370799803001478ull}}, {{1782283267098512367ull, 296639842401183ull}}, {{17609048486325261080ull, 474623747841892ull}}, {{6708541159576388217ull, 379698998273514ull}}, {{9056181742403020897ull, 303759198618811ull}}, {{7111193158361012789ull, 486014717790098ull}}, {{13067652156172630878ull, 388811774232078ull}}, {{17832819354421925348ull, 311049419385662ull}}, {{13775115708107439265ull, 497679071017060ull}}, {{11020092566485951412ull, 398143256813648ull}}, {{16194771682672581776ull, 318514605450918ull}}, {{3775541803824668902ull, 509623368721470ull}}, {{3020433443059735122ull, 407698694977176ull}}, {{17173742013415429390ull, 326158955981740ull}}, {{9031243147755135408ull, 521854329570785ull}}, {{7224994518204108327ull, 417483463656628ull}}, {{13158693244047107308ull, 333986770925302ull}}, {{6296513931507730400ull, 534378833480484ull}}, {{8726559959948094643ull, 427503066784387ull}}, {{18049294412184206684ull, 342002453427509ull}}, {{17810824615268999725ull, 547203925484015ull}}, {{14248659692215199780ull, 437763140387212ull}}, {{4020230124288339177ull, 350210512309770ull}}, {{6432368198861342684ull, 560336819695632ull}}, {{16213941003314805117ull, 448269455756505ull}}, {{12971152802651844093ull, 358615564605204ull}}, {{14066271056863385598ull, 286892451684163ull}}, {{369940802529955017ull, 459027922694662ull}}, {{11363999086249694983ull, 367222338155729ull}}, {{12780548083741666310ull, 293777870524583ull}}, {{16759528119244755773ull, 470044592839333ull}}, {{2339576051170073649ull, 376035674271467ull}}, {{12939707285161789888ull, 300828539417173ull}}, {{17014182841516953498ull, 481325663067477ull}}, {{6232648643729742152ull, 385060530453982ull}}, {{16054165359209524691ull, 308048424363185ull}}, {{7239920501025687890ull, 492877478981097ull}}, {{16859982845046281282ull, 394301983184877ull}}, {{6109288646553204379ull, 315441586547902ull}}, {{13464210649227037330ull, 504706538476643ull}}, {{18150066148865450510ull, 403765230781314ull}}, {{18209401733834270731ull, 323012184625051ull}}, {{3309601070941460908ull, 516819495400083ull}}, {{10026378486236989373ull, 413455596320066ull}}, {{4331753974247681175ull, 330764477056053ull}}, {{3241457544054379557ull, 529223163289685ull}}, {{2593166035243503645ull, 423378530631748ull}}, {{9453230457678623562ull, 338702824505398ull}}, {{11435819917543887377ull, 541924519208637ull}}, {{1769958304551289255ull, 433539615366910ull}}, {{1415966643641031404ull, 346831692293528ull}}, {{17022941888793291540ull, 554930707669644ull}}, {{17307702325776543555ull, 443944566135715ull}}, {{13846161860621234844ull, 355155652908572ull}}, {{3698231859013167228ull, 284124522326858ull}}, {{2227822159679157243ull, 454599235722973ull}}, {{9160955357227146440ull, 363679388578378ull}}, {{14707461915265537799ull, 290943510862702ull}}, {{8774543805457219185ull, 465509617380324ull}}, {{10708983859107685671ull, 372407693904259ull}}, {{12256535902028058860ull, 297926155123407ull}}, {{4853062184277252884ull, 476681848197452ull}}, {{14950496191647533277ull, 381345478557961ull}}, {{8271048138576116298ull, 305076382846369ull}}, {{2165630577496055107ull, 488122212554191ull}}, {{16489899720964485379ull, 390497770043352ull}}, {{5813222147287767656ull, 312398216034682ull}}, {{12990504250402338574ull, 499837145655491ull}}, {{6703054585579960536ull, 399869716524393ull}}, {{12741141297947789075ull, 319895773219514ull}}, {{9317779632490731550ull, 511833237151223ull}}, {{14832921335476405887ull, 409466589720978ull}}, {{798290624155393740ull, 327573271776783ull}}, {{16034660257616271276ull, 524117234842852ull}}, {{5449030576609196375ull, 419293787874282ull}}, {{15427270905513088069ull, 335435030299425ull}}, {{6236889375111389295ull, 536696048479081ull}}, {{1300162685347201113ull, 429356838783265ull}}, {{1040130148277760890ull, 343485471026612ull}}, {{5353557051986327748ull, 549576753642579ull}}, {{7972194456330972521ull, 439661402914063ull}}, {{13756453194548598663ull, 351729122331250ull}}, {{3563581037568206246ull, 562766595730001ull}}, {{17608260089022206289ull, 450213276584000ull}}, {{14086608071217765031ull, 360170621267200ull}}, {{11269286456974212025ull, 288136497013760ull}}, {{18030858331158739240ull, 461018395222016ull}}, {{10735337850185081069ull, 368814716177613ull}}, {{15966967909631885501ull, 295051772942090ull}}, {{7100404581701465186ull, 472082836707345ull}}, {{5680323665361172149ull, 377666269365876ull}}, {{854910117547027396ull, 302133015492701ull}}, {{12435902632300974803ull, 483412824788321ull}}, {{6259373291098869519ull, 386730259830657ull}}, {{16075545077104826585ull, 309384207864525ull}}, {{7274128049658170920ull, 495014732583241ull}}, {{2129953624984626413ull, 396011786066593ull}}, {{9082660529471521777ull, 316809428853274ull}}, {{3464210402928703873ull, 506895086165239ull}}, {{6460717137084873422ull, 405516068932191ull}}, {{1479224894925988414ull, 324412855145753ull}}, {{17124155090849222756ull, 519060568233204ull}}, {{17388672887421288528ull, 415248454586563ull}}, {{2842891865711299852ull, 332198763669251ull}}, {{15616673429363810734ull, 531518021870801ull}}, {{8803989928749138264ull, 425214417496641ull}}, {{3353843128257400288ull, 340171533997313ull}}, {{1676800190469930137ull, 544274454395701ull}}, {{16098835411343585403ull, 435419563516560ull}}, {{12879068329074868322ull, 348335650813248ull}}, {{16917160511777878992ull, 557337041301197ull}}, {{6155030779938482547ull, 445869633040958ull}}, {{12302722253434606684ull, 356695706432766ull}}, {{6152828988005775024ull, 285356565146213ull}}, {{6155177566067329716ull, 456570504233941ull}}, {{1234793238111953449ull, 365256403387153ull}}, {{8366532219973383406ull, 292205122709722ull}}, {{17075800366699323773ull, 467528196335555ull}}, {{13660640293359459018ull, 374022557068444ull}}, {{14617861049429477537ull, 299218045654755ull}}, {{4941833605377612444ull, 478748873047609ull}}, {{7642815699044000278ull, 382999098438087ull}}, {{17182299003460931192ull, 306399278750469ull}}, {{16423631961311758938ull, 490238846000751ull}}, {{9449556754307496827ull, 392191076800601ull}}, {{3870296588704087139ull, 313752861440481ull}}, {{17260520986152270392ull, 502004578304769ull}}, {{17497765603663726636ull, 401603662643815ull}}, {{13998212482930981309ull, 321282930115052ull}}, {{7639744713721928802ull, 514052688184084ull}}, {{9801144585719453365ull, 411242150547267ull}}, {{462218039091742045ull, 328993720437814ull}}, {{8118246492030607919ull, 526389952700502ull}}, {{17562643637850217305ull, 421111962160401ull}}, {{10360766095538263520ull, 336889569728321ull}}, {{9198528123377400987ull, 539023311565314ull}}, {{11048171313443831112ull, 431218649252251ull}}, {{5149188236013154567ull, 344974919401801ull}}, {{860003548137226661ull, 551959871042882ull}}, {{11756049282735512298ull, 441567896834305ull}}, {{9404839426188409838ull, 353254317467444ull}}, {{11213220355692638194ull, 282603453973955ull}}, {{17941152569108221110ull, 452165526358328ull}}, {{3284875611060845918ull, 361732421086663ull}}, {{10006598118332497381ull, 289385936869330ull}}, {{16010556989331995810ull, 463017498990928ull}}, {{1740399147239865678ull, 370413999192743ull}}, {{8771016947275713189ull, 296331199354194ull}}, {{2965580671415410133ull, 474129918966711ull}}, {{17129859796099969399ull, 379303935173368ull}}, {{2635841392654244550ull, 303443148138695ull}}, {{4217346228246791280ull, 485509037021912ull}}, {{14441923426823163993ull, 388407229617529ull}}, {{15242887556200441518ull, 310725783694023ull}}, {{2252527201469244489ull, 497161253910438ull}}, {{9180719390659216238ull, 397729003128350ull}}, {{7344575512527372990ull, 318183202502680ull}}, {{11751320820043796785ull, 509093124004288ull}}, {{16779754285518858074ull, 407274499203430ull}}, {{13423803428415086459ull, 325819599362744ull}}, {{10410039041238407365ull, 521311358980391ull}}, {{4638682418248815569ull, 417049087184313ull}}, {{11089643564082873101ull, 333639269747450ull}}, {{17743429702532596963ull, 533822831595920ull}}, {{14194743762026077570ull, 427058265276736ull}}, {{7666446194878951733ull, 341646612221389ull}}, {{1198267467580591803ull, 546634579554223ull}}, {{8337311603548294089ull, 437307663643378ull}}, {{14048546912322455917ull, 349846130914702ull}}, {{7720279800748288175ull, 559753809463524ull}}, {{9865572655340540863ull, 447803047570819ull}}, {{11581806939014343014ull, 358242438056655ull}}, {{9265445551211474411ull, 286593950445324ull}}, {{3756666437712628088ull, 458550320712519ull}}, {{6694681964912012793ull, 366840256570015ull}}, {{5355745571929610235ull, 293472205256012ull}}, {{12258541729829286699ull, 469555528409619ull}}, {{13496182198605339682ull, 375644422727695ull}}, {{10796945758884271746ull, 300515538182156ull}}, {{9896415584731014147ull, 480824861091450ull}}, {{7917132467784811318ull, 384659888873160ull}}, {{6333705974227849054ull, 307727911098528ull}}, {{6444580744022648163ull, 492364657757645ull}}, {{5155664595218118531ull, 393891726206116ull}}, {{435182861432584501ull, 315113380964893ull}}, {{15453687837259776495ull, 504181409543828ull}}, {{1294903825582090226ull, 403345127635063ull}}, {{8414620689949492827ull, 322676102108050ull}}, {{13463393103919188524ull, 516281763372880ull}}, {{10770714483135350819ull, 413025410698304ull}}, {{12305920401250190978ull, 330420328558643ull}}, {{16000123827258395243ull, 528672525693829ull}}, {{16489447876548626517ull, 422938020555063ull}}, {{2123511857013170244ull, 338350416444051ull}}, {{14465665415446803360ull, 541360666310481ull}}, {{7883183517615532365ull, 433088533048385ull}}, {{6306546814092425892ull, 346470826438708ull}}, {{6401126087805971104ull, 554353322301933ull}}, {{12499598499728597530ull, 443482657841546ull}}, {{6310329985040967700ull, 354786126273237ull}}, {{16116310432258505130ull, 283828901018589ull}}, {{14718050247387877238ull, 454126241629743ull}}, {{706393753684570821ull, 363300993303795ull}}, {{565115002947656657ull, 290640794643036ull}}, {{11972230448941981621ull, 465025271428857ull}}, {{2199086729669764650ull, 372020217143086ull}}, {{16516664642703453013ull, 297616173714468ull}}, {{4290570539874062881ull, 476185877943150ull}}, {{3432456431899250305ull, 380948702354520ull}}, {{2745965145519400244ull, 304758961883616ull}}, {{15461590677056771360ull, 487614339013785ull}}, {{12369272541645417088ull, 390091471211028ull}}, {{17274115662800154317ull, 312073176968822ull}}, {{12881189801512605614ull, 499317083150116ull}}, {{6615603026468174168ull, 399453666520093ull}}, {{12671180050658359981ull, 319562933216074ull}}, {{9205841636827645000ull, 511300693145719ull}}, {{11054022124204026323ull, 409040554516575ull}}, {{8843217699363221058ull, 327232443613260ull}}, {{14149148318981153694ull, 523571909781216ull}}, {{7629969840443012632ull, 418857527824973ull}}, {{13482673501838230752ull, 335086022259978ull}}, {{17882928788199258880ull, 536137635615965ull}}, {{14306343030559407104ull, 428910108492772ull}}, {{4066376794963705036ull, 343128086794218ull}}, {{2816854057200017735ull, 549004938870749ull}}, {{5942832060501924511ull, 439203951096599ull}}, {{8443614463143449932ull, 351363160877279ull}}, {{2441736696803788922ull, 562181057403647ull}}, {{13021435801668762107ull, 449744845922917ull}}, {{3038451011851189039ull, 359795876738334ull}}, {{6120109624222861555ull, 287836701390667ull}}, {{13481524213498488811ull, 460538722225067ull}}, {{3406521741314970402ull, 368430977780054ull}}, {{6414566207793886645ull, 294744782224043ull}}, {{6573957117728308309ull, 471591651558469ull}}, {{8948514508924556970ull, 377273321246775ull}}, {{7158811607139645576ull, 301818656997420ull}}, {{11454098571423432922ull, 482909851195872ull}}, {{1784581227654925691ull, 386327880956698ull}}, {{8806362611607761199ull, 309062304765358ull}}, {{10400831363830507596ull, 494499687624573ull}}, {{15699362720548226723ull, 395599750099658ull}}, {{1491443732212850409ull, 316479800079727ull}}, {{6075658786282470977ull, 506367680127563ull}}, {{12239224658509797428ull, 405094144102050ull}}, {{9791379726807837942ull, 324075315281640ull}}, {{15666207562892540708ull, 518520504450624ull}}, {{16222314865055942890ull, 414816403560499ull}}, {{16667200706786664635ull, 331853122848399ull}}, {{15599474686632932446ull, 530964996557439ull}}, {{16168928564048256280ull, 424771997245951ull}}, {{9245794036496694701ull, 339817597796761ull}}, {{7414572828910890875ull, 543708156474818ull}}, {{13310355892612533346ull, 434966525179854ull}}, {{14337633528831937000ull, 347973220143883ull}}, {{804120757679637262ull, 556757152230214ull}}, {{4332645420885620132ull, 445405721784171ull}}, {{18223511595676137399ull, 356324577427336ull}}, {{10889460461798999596ull, 285059661941869ull}}, {{6355090294652668384ull, 456095459106991ull}}, {{1394723420980224384ull, 364876367285593ull}}, {{8494476366268000153ull, 291901093828474ull}}, {{2523115741803069276ull, 467041750125559ull}}, {{5707841408184365744ull, 373633400100447ull}}, {{15634319570773223564ull, 298906720080357ull}}, {{10257516054269516411ull, 478250752128572ull}}, {{827315213931792482ull, 382600601702858ull}}, {{8040549800629254632ull, 306080481362286ull}}, {{5486182051522986765ull, 489728770179658ull}}, {{11767643270702210058ull, 391783016143726ull}}, {{5724765801819857723ull, 313426412914981ull}}, {{1780927653427951711ull, 501482260663970ull}}, {{1424742122742361369ull, 401185808531176ull}}, {{15897188957161530388ull, 320948646824940ull}}, {{6988758257748897005ull, 513517834919905ull}}, {{5591006606199117604ull, 410814267935924ull}}, {{8162154099701204406ull, 328651414348739ull}}, {{1991400115296196080ull, 525842262957983ull}}, {{8971817721720777511ull, 420673810366386ull}}, {{3488105362634711685ull, 336539048293109ull}}, {{12959666209699359343ull, 538462477268974ull}}, {{14057081782501397798ull, 430769981815179ull}}, {{14935014240743028561ull, 344615985452143ull}}, {{1759929896737383759ull, 551385576723430ull}}, {{1407943917389907007ull, 441108461378744ull}}, {{4815703948653835929ull, 352886769102995ull}}, {{3852563158923068743ull, 282309415282396ull}}, {{17232147498502640958ull, 451695064451833ull}}, {{2717671554576381797ull, 361356051561467ull}}, {{13242183687886836407ull, 289084841249173ull}}, {{17498145085877027929ull, 462535745998677ull}}, {{6619818439217801696ull, 370028596798942ull}}, {{16363901195599972327ull, 296022877439153ull}}, {{4046149024508493784ull, 473636603902646ull}}, {{17994314478574436320ull, 378909283122116ull}}, {{10706102768117638732ull, 303127426497693ull}}, {{13440415614246311649ull, 485003882396309ull}}, {{14441681306138959642ull, 388003105917047ull}}, {{4174647415427347067ull, 310402484733638ull}}, {{2990087049941844985ull, 496643975573821ull}}, {{17149464898921117280ull, 397315180459056ull}}, {{10030223104394983501ull, 317852144367245ull}}, {{16048356967031973602ull, 508563430987592ull}}, {{5459987944141758235ull, 406850744790074ull}}, {{8057339170055316911ull, 325480595832059ull}}, {{1823696227862776089ull, 520768953331295ull}}, {{1458956982290220871ull, 416615162665036ull}}, {{15924560844799817989ull, 333292130132028ull}}, {{3343204463228246844ull, 533267408211246ull}}, {{17431958829550238768ull, 426613926568996ull}}, {{10256218248898280691ull, 341291141255197ull}}, {{1652553939269607813ull, 546065826008316ull}}, {{16079438410383327543ull, 436852660806652ull}}, {{5484853098822841388ull, 349482128645322ull}}, {{12465113772858456544ull, 559171405832515ull}}, {{9972091018286765235ull, 447337124666012ull}}, {{598975185145591542ull, 357869699732810ull}}, {{479180148116473233ull, 286295759786248ull}}, {{15524083495953998467ull, 458073215657996ull}}, {{8729917982021288450ull, 366458572526397ull}}, {{18051980829842761729ull, 293166858021117ull}}, {{14125774068780777475ull, 469066972833788ull}}, {{232572810798891010ull, 375253578267031ull}}, {{14943453507606754101ull, 300202862613624ull}}, {{12841479167945075592ull, 480324580181799ull}}, {{13962532149097970797ull, 384259664145439ull}}, {{14859374534020286960ull, 307407731316351ull}}, {{16396301624948638490ull, 491852370106162ull}}, {{5738343670475090146ull, 393481896084930ull}}, {{4590674936380072117ull, 314785516867944ull}}, {{14723777527691936033ull, 503656826988710ull}}, {{11779022022153548826ull, 402925461590968ull}}, {{16801915247206659707ull, 322340369272774ull}}, {{15815017951304924563ull, 515744590836439ull}}, {{16341363175785849973ull, 412595672669151ull}}, {{9383741725886769655ull, 330076538135321ull}}, {{7635289131935010802ull, 528122461016514ull}}, {{9797580120289918965ull, 422497968813211ull}}, {{4148715281490024849ull, 337998375050569ull}}, {{14016642079867860405ull, 540797400080910ull}}, {{11213313663894288324ull, 432637920064728ull}}, {{16349348560599251305ull, 346110336051782ull}}, {{11401562437991160796ull, 553776537682852ull}}, {{1742552320909107990ull, 443021230146282ull}}, {{12462088300953017362ull, 354416984117025ull}}, {{9969670640762413889ull, 283533587293620ull}}, {{15951473025219862223ull, 453653739669792ull}}, {{5382480790692069132ull, 362922991735834ull}}, {{7995333447295565629ull, 290338393388667ull}}, {{16481882330414815329ull, 464541429421867ull}}, {{5806808234848031617ull, 371633143537494ull}}, {{8334795402620335617ull, 297306514829995ull}}, {{13335672644192536987ull, 475690423727992ull}}, {{3289840485870208943ull, 380552338982394ull}}, {{6321221203438077478ull, 304441871185915ull}}, {{10113953925500923964ull, 487106993897464ull}}, {{11780511955142649495ull, 389685595117971ull}}, {{5735060749372209272ull, 311748476094377ull}}, {{12865446013737445159ull, 498797561751003ull}}, {{17671054440473776774ull, 399038049400802ull}}, {{6758145922895200772ull, 319230439520642ull}}, {{14502382291374231559ull, 510768703233027ull}}, {{4223208203615564601ull, 408614962586422ull}}, {{14446613007118182650ull, 326891970069137ull}}, {{8357185552421450948ull, 523027152110620ull}}, {{6685748441937160758ull, 418421721688496ull}}, {{1659249938807818283ull, 334737377350797ull}}, {{6344148716834419577ull, 535579803761275ull}}, {{5075318973467535661ull, 428463843009020ull}}, {{4060255178774028529ull, 342771074407216ull}}, {{17564454730264176616ull, 548433719051545ull}}, {{14051563784211341293ull, 438746975241236ull}}, {{7551902212627162711ull, 350997580192989ull}}, {{1014997095977729368ull, 561596128308783ull}}, {{8190695306266004141ull, 449276902647026ull}}, {{2863207430270892990ull, 359421522117621ull}}, {{17047961203184355684ull, 287537217694096ull}}, {{1451296221901596833ull, 460059548310555ull}}, {{1161036977521277466ull, 368047638648444ull}}, {{4618178396758932296ull, 294438110918755ull}}, {{7389085434814291674ull, 471100977470008ull}}, {{13289965977335253985ull, 376880781976006ull}}, {{6942623967126292865ull, 301504625580805ull}}, {{11108198347402068584ull, 482407400929288ull}}, {{16265256307405475514ull, 385925920743430ull}}, {{13012205045924380411ull, 308740736594744ull}}, {{9751481629253277688ull, 493985178551591ull}}, {{4111836488660711827ull, 395188142841273ull}}, {{10668166820412390108ull, 316150514273018ull}}, {{13379718097917913850ull, 505840822836829ull}}, {{14393123293076241403ull, 404672658269463ull}}, {{446452190235262153ull, 323738126615571ull}}, {{11782369948602150414ull, 517981002584913ull}}, {{16804593588365540978ull, 414384802067930ull}}, {{13443674870692432782ull, 331507841654344ull}}, {{10441833348882161482ull, 530412546646951ull}}, {{4664117864363818862ull, 424330037317561ull}}, {{41945476749144767ull, 339464029854049ull}}, {{7445810392282452273ull, 543142447766478ull}}, {{13335345943309782465ull, 434513958213182ull}}, {{3289579125164005326ull, 347611166570546ull}}, {{16331373044488139491ull, 556177866512873ull}}, {{1997051991364780623ull, 444942293210299ull}}, {{5286990407833734821ull, 355953834568239ull}}, {{7918941141008898180ull, 284763067654591ull}}, {{5291608196130416442ull, 455620908247346ull}}, {{543937742162422831ull, 364496726597877ull}}, {{11503196637955669234ull, 291597381278301ull}}, {{11026416991245250128ull, 466555810045282ull}}, {{1442435963512379456ull, 373244648036226ull}}, {{15911344029777544858ull, 298595718428980ull}}, {{7011406373934520156ull, 477753149486369ull}}, {{9298473913889526448ull, 382202519589095ull}}, {{7438779131111621158ull, 305762015671276ull}}, {{4523348980294773207ull, 489219225074042ull}}, {{14686725628461549535ull, 391375380059233ull}}, {{681334058543508659ull, 313100304047387ull}}, {{4779483308411524177ull, 500960486475819ull}}, {{7512935461471129665ull, 400768389180655ull}}, {{6010348369176903732ull, 320614711344524ull}}, {{16995255020166866618ull, 512983538151238ull}}, {{2528157571907762324ull, 410386830520991ull}}, {{16779921316493851152ull, 328309464416792ull}}, {{12090478847422520551ull, 525295143066868ull}}, {{17051080707421837087ull, 420236114453494ull}}, {{17330213380679379993ull, 336188891562795ull}}, {{9281597335377456373ull, 537902226500473ull}}, {{14803975497785785745ull, 430321781200378ull}}, {{775133954002897626ull, 344257424960303ull}}, {{15997609585372277495ull, 550811879936484ull}}, {{16487436483039732319ull, 440649503949187ull}}, {{5811251556947965209ull, 352519603159350ull}}, {{4649001245558372167ull, 282015682527480ull}}, {{7438401992893395467ull, 451225092043968ull}}, {{13329419223798537020ull, 360980073635174ull}}, {{14352884193780739939ull, 288784058908139ull}}, {{11896568265823452933ull, 462054494253023ull}}, {{16895952242142582993ull, 369643595402418ull}}, {{2448715349488335425ull, 295714876321935ull}}, {{3917944559181336680ull, 473143802115096ull}}, {{17891750906312710636ull, 378515041692076ull}}, {{10624051910308258186ull, 302812033353661ull}}, {{9619785427009392451ull, 484499253365858ull}}, {{15074525971091334607ull, 387599402692686ull}}, {{8370271962131157363ull, 310079522154149ull}}, {{2324388695184120811ull, 496127235446639ull}}, {{5548859770889206972ull, 396901788357311ull}}, {{749739001969455254ull, 317521430685849ull}}, {{8578280032634949053ull, 508034289097358ull}}, {{14241321655591779889ull, 406427431277886ull}}, {{7703708509731513588ull, 325141945022309ull}}, {{1257887171344690771ull, 520227112035695ull}}, {{1006309737075752617ull, 416181689628556ull}}, {{15562443048628243386ull, 332945351702844ull}}, {{13831862433579458449ull, 532712562724551ull}}, {{7376141132121656436ull, 426170050179641ull}}, {{2211564090955414825ull, 340936040143713ull}}, {{18295897804496305013ull, 545497664229940ull}}, {{14636718243597044011ull, 436398131383952ull}}, {{4330676965393814562ull, 349118505107162ull}}, {{10618431959372013623ull, 558589608171459ull}}, {{12184094382239521221ull, 446871686537167ull}}, {{2368577876307796330ull, 357497349229734ull}}, {{5584211115788147387ull, 285997879383787ull}}, {{12624086600002946143ull, 457596607014059ull}}, {{13788618094744267238ull, 366077285611247ull}}, {{3652196846311593144ull, 292861828488998ull}}, {{2154166139356638707ull, 468578925582397ull}}, {{12791379355711041935ull, 374863140465917ull}}, {{2854405855085012902ull, 299890512372734ull}}, {{11945746997619841289ull, 479824819796374ull}}, {{13245946412837783355ull, 383859855837099ull}}, {{14286105945012137007ull, 307087884669679ull}}, {{11789723067793688242ull, 491340615471487ull}}, {{2053080824751129947ull, 393072492377190ull}}, {{1642464659800903957ull, 314457993901752ull}}, {{6317292270423356655ull, 503132790242803ull}}, {{12432531445822505970ull, 402506232194242ull}}, {{2567327527174184130ull, 322004985755394ull}}, {{11486421672962515254ull, 515207977208630ull}}, {{9189137338370012203ull, 412166381766904ull}}, {{11040658685437920086ull, 329733105413523ull}}, {{13975705081958761815ull, 527572968661637ull}}, {{3801866436083188805ull, 422058374929310ull}}, {{3041493148866551044ull, 337646699943448ull}}, {{1177040223444571347ull, 540234719909517ull}}, {{12009678622981388047ull, 432187775927613ull}}, {{16986440527868931084ull, 345750220742090ull}}, {{8731560770880738119ull, 553200353187345ull}}, {{6985248616704590495ull, 442560282549876ull}}, {{1898850078621762073ull, 354048226039901ull}}, {{16276475321865050951ull, 283238580831920ull}}, {{7595616441274529906ull, 453181729331073ull}}, {{13455190782503444571ull, 362545383464858ull}}, {{18142850255486576303ull, 290036306771886ull}}, {{3203118705585149823ull, 464058090835019ull}}, {{6251843779210030181ull, 371246472668015ull}}, {{5001475023368024145ull, 296997178134412ull}}, {{11691708852130748956ull, 475195485015059ull}}, {{13042715896446509488ull, 380156388012047ull}}, {{3055475087673386944ull, 304125110409638ull}}, {{1199411325535508787ull, 486600176655421ull}}, {{15716924319396048322ull, 389280141324336ull}}, {{8884190640774928334ull, 311424113059469ull}}, {{3146658581014154366ull, 498278580895151ull}}, {{17274722123778964785ull, 398622864716120ull}}, {{13819777699023171828ull, 318898291772896ull}}, {{14732946688953254279ull, 510237266836634ull}}, {{15475706165904513746ull, 408189813469307ull}}, {{5001867303239790350ull, 326551850775446ull}}, {{624290055699843915ull, 522482961240714ull}}, {{4188780859301785455ull, 417986368992571ull}}, {{18108419946409069657ull, 334389095194056ull}}, {{3148030211061139188ull, 535022552310491ull}}, {{17275819427816552643ull, 428018041848392ull}}, {{6441957912769421468ull, 342414433478714ull}}, {{17685830289914894996ull, 547863093565942ull}}, {{6769966602448095350ull, 438290474852754ull}}, {{9105322096700386603ull, 350632379882203ull}}, {{10879166539978708242ull, 561011807811525ull}}, {{8703333231982966594ull, 448809446249220ull}}, {{6962666585586373275ull, 359047556999376ull}}, {{1880784453727188297ull, 287238045599501ull}}, {{14077301570189232244ull, 459580872959201ull}}, {{7572492441409475472ull, 367664698367361ull}}, {{2368645138385670055ull, 294131758693889ull}}, {{11168529850900892734ull, 470610813910222ull}}, {{1556126251236893541ull, 376488651128178ull}}, {{8623598630473335479ull, 301190920902542ull}}, {{17487106623499247090ull, 481905473444067ull}}, {{6610987669315577025ull, 385524378755254ull}}, {{8978138950194371943ull, 308419503004203ull}}, {{10675673505569084786ull, 493471204806725ull}}, {{8540538804455267829ull, 394776963845380ull}}, {{6832431043564214263ull, 315821571076304ull}}, {{18310587299186563468ull, 505314513722086ull}}, {{10959121024607340451ull, 404251610977669ull}}, {{12456645634427782684ull, 323401288782135ull}}, {{1483888941374900678ull, 517442062051417ull}}, {{12255157597325651512ull, 413953649641133ull}}, {{17182823707344341856ull, 331162919712906ull}}, {{1667076228557574707ull, 529860671540651ull}}, {{16091056241813701059ull, 423888537232520ull}}, {{12872844993450960847ull, 339110829786016ull}}, {{13217854360037716709ull, 542577327657626ull}}, {{6884934673288263044ull, 434061862126101ull}}, {{1818598923888700112ull, 347249489700881ull}}, {{13977804722447651149ull, 555599183521409ull}}, {{14871592592700031242ull, 444479346817127ull}}, {{4518576444676204347ull, 355583477453702ull}}, {{14682907599966694447ull, 284466781962961ull}}, {{16113954530462890469ull, 455146851140738ull}}, {{1823117180144581406ull, 364117480912591ull}}, {{16215889003083306417ull, 291293984730072ull}}, {{11188027145965648975ull, 466070375568116ull}}, {{5261072902030608857ull, 372856300454493ull}}, {{11587555951108307732ull, 298285040363594ull}}, {{7472043077547561402ull, 477256064581751ull}}, {{2288285647296138798ull, 381804851665401ull}}, {{16588023776804552331ull, 305443881332320ull}}, {{8094093969177732114ull, 488710210131713ull}}, {{13853972804826006338ull, 390968168105370ull}}, {{11083178243860805070ull, 312774534484296ull}}, {{10354387560693467466ull, 500439255174874ull}}, {{11972858863296684296ull, 400351404139899ull}}, {{13267635905379257760ull, 320281123311919ull}}, {{10160171004381081446ull, 512449797299071ull}}, {{4438787988762954834ull, 409959837839257ull}}, {{14619076835236094836ull, 327967870271405ull}}, {{4943778862668200123ull, 524748592434249ull}}, {{7644371904876470421ull, 419798873947399ull}}, {{9804846338643086660ull, 335839099157919ull}}, {{4619707697603207687ull, 537342558652671ull}}, {{6417343340655826ull, 429874046922137ull}}, {{11073180318898255630ull, 343899237537709ull}}, {{6649042066011478039ull, 550238780060335ull}}, {{5319233652809182431ull, 440191024048268ull}}, {{11634084551731166591ull, 352152819238614ull}}, {{12996616456126843596ull, 281722255390891ull}}, {{13415888700319129108ull, 450755608625426ull}}, {{7043362145513392963ull, 360604486900341ull}}, {{1945340901668804047ull, 288483589520273ull}}, {{17869940701637727768ull, 461573743232436ull}}, {{10606603746568271891ull, 369258994585949ull}}, {{12174631811996527836ull, 295407195668759ull}}, {{8411364454968713569ull, 472651513070015ull}}, {{6729091563974970855ull, 378121210456012ull}}, {{16451319695405707653ull, 302496968364809ull}}, {{15254065068423401276ull, 483995149383695ull}}, {{12203252054738721021ull, 387196119506956ull}}, {{6073252829049066493ull, 309756895605565ull}}, {{9717204526478506390ull, 495611032968904ull}}, {{11463112435924715435ull, 396488826375123ull}}, {{16549187578223592994ull, 317191061100098ull}}, {{4342607236706286852ull, 507505697760158ull}}, {{10852783418848850128ull, 406004558208126ull}}, {{4992877920337169779ull, 324803646566501ull}}, {{609907043055651000ull, 519685834506402ull}}, {{11555972078670251770ull, 415748667605121ull}}, {{5555428848194291092ull, 332598934084097ull}}, {{12578034971852776071ull, 532158294534555ull}}, {{10062427977482220857ull, 425726635627644ull}}, {{11739291196727687009ull, 340581308502115ull}}, {{336121841054747598ull, 544930093603385ull}}, {{268897472843798078ull, 435944074882708ull}}, {{7593815607758859109ull, 348755259906166ull}}, {{4771407342930353928ull, 558008415849866ull}}, {{127777059602372819ull, 446406732679893ull}}, {{7480919277165718902ull, 357125386143914ull}}, {{9674084236474485445ull, 285700308915131ull}}, {{8099837148875356065ull, 457120494264210ull}}, {{6479869719100284852ull, 365696395411368ull}}, {{12562593404764048528ull, 292557116329094ull}}, {{9032103003396746675ull, 468091386126551ull}}, {{3536333587975487017ull, 374473108901241ull}}, {{17586462129348030906ull, 299578487120992ull}}, {{13380944147989208158ull, 479325579393588ull}}, {{18083452947875187172ull, 383460463514870ull}}, {{14466762358300149738ull, 306768370811896ull}}, {{15768122143796418934ull, 490829393299034ull}}, {{16303846529779045471ull, 392663514639227ull}}, {{5664379594339415730ull, 314130811711382ull}}, {{12752356165684975491ull, 502609298738211ull}}, {{6512536117806070070ull, 402087438990569ull}}, {{8899377708986766379ull, 321669951192455ull}}, {{14239004334378826207ull, 514671921907928ull}}, {{323157023277329996ull, 411737537526343ull}}, {{7637223248105684643ull, 329390030021074ull}}, {{1151510752743364459ull, 527024048033719ull}}, {{4610557416936601890ull, 421619238426975ull}}, {{3688445933549281512ull, 337295390741580ull}}, {{5901513493678850420ull, 539672625186528ull}}, {{12099908424426900982ull, 431738100149222ull}}, {{2301229110057700139ull, 345390480119378ull}}, {{18439361835059961516ull, 552624768191004ull}}, {{18440838282789879536ull, 442099814552803ull}}, {{3684624182006172659ull, 353679851642243ull}}, {{10326396975088758774ull, 282943881313794ull}}, {{5454188715916283068ull, 452710210102071ull}}, {{674002157991116131ull, 362168168081657ull}}, {{11607248170618623875ull, 289734534465325ull}}, {{124852999280246584ull, 463575255144521ull}}, {{14857277658391838560ull, 370860204115616ull}}, {{8196473311971560524ull, 296688163292493ull}}, {{9425008484412586516ull, 474701061267989ull}}, {{11229355602271979536ull, 379760849014391ull}}, {{5294135667075673305ull, 303808679211513ull}}, {{4781268252579166966ull, 486093886738421ull}}, {{135665787321423249ull, 388875109390737ull}}, {{11176579074082869569ull, 311100087512589ull}}, {{6814480074306860341ull, 497760140020143ull}}, {{12830281688929308919ull, 398208112016114ull}}, {{13953574165885357458ull, 318566489612891ull}}, {{14947021035932751287ull, 509706383380626ull}}, {{8268268014004290707ull, 407765106704501ull}}, {{2925265596461522242ull, 326212085363601ull}}, {{15748471398564166557ull, 521939336581761ull}}, {{8909428304109422922ull, 417551469265409ull}}, {{10816891458029448661ull, 334041175412327ull}}, {{2549631073879476565ull, 534465880659724ull}}, {{5729053673845491575ull, 427572704527779ull}}, {{8272591753818303583ull, 342058163622223ull}}, {{9546797991367375410ull, 547293061795557ull}}, {{258740763610079682ull, 437834449436446ull}}, {{14964387869855705038ull, 350267559549156ull}}, {{16564322962285307415ull, 560428095278650ull}}, {{13251458369828245932ull, 448342476222920ull}}, {{10601166695862596745ull, 358673980978336ull}}, {{4791584541948167073ull, 286939184782669ull}}, {{15045232896600887963ull, 459102695652270ull}}, {{12036186317280710371ull, 367282156521816ull}}, {{5939600239082657973ull, 293825725217453ull}}, {{5814011567790342434ull, 470121160347925ull}}, {{4651209254232273947ull, 376096928278340ull}}, {{3720967403385819158ull, 300877542622672ull}}, {{9642896660159220976ull, 481404068196275ull}}, {{7714317328127376781ull, 385123254557020ull}}, {{6171453862501901424ull, 308098603645616ull}}, {{2495628550519221633ull, 492957765832986ull}}, {{16753898099383018599ull, 394366212666388ull}}, {{2335072035280683910ull, 315492970133111ull}}, {{14804161700674825225ull, 504788752212977ull}}, {{4464631731056039534ull, 403831001770382ull}}, {{14639751829070562596ull, 323064801416305ull}}, {{4976858852803348539ull, 516903682266089ull}}, {{7670835896984589154ull, 413522945812871ull}}, {{2447319902845761000ull, 330818356650297ull}}, {{7605060659295127923ull, 529309370640475ull}}, {{6084048527436102339ull, 423447496512380ull}}, {{4867238821948881871ull, 338757997209904ull}}, {{15166279744602031640ull, 542012795535846ull}}, {{8443674980939714989ull, 433610236428677ull}}, {{17822986428977502960ull, 346888189142941ull}}, {{2691336583170632474ull, 555021102628707ull}}, {{13221115710762236949ull, 444016882102965ull}}, {{10576892568609789559ull, 355213505682372ull}}, {{1082816425404011001ull, 284170804545898ull}}, {{16489901539614058894ull, 454673287273436ull}}, {{9502572416949336792ull, 363738629818749ull}}, {{11291406748301379757ull, 290990903854999ull}}, {{6998204353056476642ull, 465585446167999ull}}, {{9287912297187091636ull, 372468356934399ull}}, {{11119678652491583632ull, 297974685547519ull}}, {{6723439399760802842ull, 476759496876031ull}}, {{1689402705066731951ull, 381407597500825ull}}, {{1351522164053385560ull, 305126078000660ull}}, {{2162435462485416897ull, 488201724801056ull}}, {{16487343628955974810ull, 390561379840844ull}}, {{16879223717906690171ull, 312449103872675ull}}, {{8560013874941152658ull, 499918566196281ull}}, {{3158662285211011803ull, 399934852957025ull}}, {{2526929828168809443ull, 319947882365620ull}}, {{4043087725070095108ull, 511916611784992ull}}, {{14302516624281807056ull, 409533289427993ull}}, {{373966855199714675ull, 327626631542395ull}}, {{598346968319543481ull, 524202610467832ull}}, {{11546724018881365754ull, 419362088374265ull}}, {{9237379215105092603ull, 335489670699412ull}}, {{22411485200506873ull, 536783473119060ull}}, {{17929188160405498ull, 429426778495248ull}}, {{7393040980012145045ull, 343541422796198ull}}, {{8139516753277521749ull, 549666276473917ull}}, {{17579659846847748368ull, 439733021179133ull}}, {{2995681433252467725ull, 351786416943307ull}}, {{8482439107945858684ull, 562858267109291ull}}, {{3096602471614776624ull, 450286613687433ull}}, {{9855979606775641945ull, 360229290949946ull}}, {{4195434870678603233ull, 288183432759957ull}}, {{10402044607827675496ull, 461093492415931ull}}, {{4632286871520230073ull, 368874793932745ull}}, {{3705829497216184059ull, 295099835146196ull}}, {{16997373639771625464ull, 472159736233913ull}}, {{2529852467591569401ull, 377727788987131ull}}, {{16781277233040896814ull, 302182231189704ull}}, {{15781997128639703933ull, 483491569903527ull}}, {{5246900073427942500ull, 386793255922822ull}}, {{15265566502968084969ull, 309434604738257ull}}, {{9667511145781294658ull, 495095367581212ull}}, {{355311287141215080ull, 396076294064970ull}}, {{284249029712972064ull, 316861035251976ull}}, {{11522844891766486272ull, 506977656403161ull}}, {{5528927098671278695ull, 405582125122529ull}}, {{8112490493678933279ull, 324465700098023ull}}, {{9290635975144382923ull, 519145120156837ull}}, {{53811150631685692ull, 415316096125470ull}}, {{43048920505348553ull, 332252876900376ull}}, {{11136924717034288655ull, 531604603040601ull}}, {{5220190958885520601ull, 425283682432481ull}}, {{486803952366506158ull, 340226945945985ull}}, {{778886323786409852ull, 544363113513576ull}}, {{15380504317996769175ull, 435490490810860ull}}, {{12304403454397415340ull, 348392392648688ull}}, {{15997696712293954220ull, 557427828237901ull}}, {{9108808555093253053ull, 445942262590321ull}}, {{3597698029332692119ull, 356753810072257ull}}, {{13946204867691884665ull, 285403048057805ull}}, {{3867183714597463848ull, 456644876892489ull}}, {{6783095786419881402ull, 365315901513991ull}}, {{1737127814393994798ull, 292252721211193ull}}, {{17536799761998032970ull, 467604353937908ull}}, {{2961393365372695406ull, 374083483150327ull}}, {{13437161136523887294ull, 299266786520261ull}}, {{14120760188954399025ull, 478826858432418ull}}, {{228561706937788250ull, 383061486745935ull}}, {{182849365550230600ull, 306449189396748ull}}, {{15049954243848010253ull, 490318703034796ull}}, {{8350614580336497879ull, 392254962427837ull}}, {{17748538108494929273ull, 313803969942269ull}}, {{17329614529366155867ull, 502086351907631ull}}, {{10174342808751014371ull, 401669081526105ull}}, {{8139474247000811496ull, 321335265220884ull}}, {{1955112350975567425ull, 514136424353415ull}}, {{1564089880780453940ull, 411309139482732ull}}, {{12319318348850094121ull, 329047311586185ull}}, {{1264165284450598978ull, 526475698537897ull}}, {{12079378671786210152ull, 421180558830317ull}}, {{2284805307945147475ull, 336944447064254ull}}, {{11034386122196056607ull, 539111115302806ull}}, {{5138160083014934962ull, 431288892242245ull}}, {{4110528066411947970ull, 345031113793796ull}}, {{17644891350484847722ull, 552049782070073ull}}, {{3047866636162147208ull, 441639825656059ull}}, {{6127642123671628089ull, 353311860524847ull}}, {{15970160143163033441ull, 282649488419877ull}}, {{10794860970093212213ull, 452239181471804ull}}, {{12325237590816480093ull, 361791345177443ull}}, {{17238887702137004721ull, 289433076141954ull}}, {{16514173879193476584ull, 463092921827127ull}}, {{5832641473870960621ull, 370474337461702ull}}, {{15734159623322499466ull, 296379469969361ull}}, {{17795957767832178500ull, 474207151950978ull}}, {{3168719770040011830ull, 379365721560783ull}}, {{9913673445515830111ull, 303492577248626ull}}, {{8483179883341507531ull, 485588123597802ull}}, {{17854590350898936994ull, 388470498878241ull}}, {{10594323465977239272ull, 310776399102593ull}}, {{13261568730821672512ull, 497242238564149ull}}, {{14298603799399248333ull, 397793790851319ull}}, {{15128231854261308989ull, 318235032681055ull}}, {{5758426893108542767ull, 509176052289689ull}}, {{8296090329228744537ull, 407340841831751ull}}, {{2947523448641085306ull, 325872673465401ull}}, {{15784083962051467460ull, 521396277544641ull}}, {{8937918354899263645ull, 417117022035713ull}}, {{14529032313403231562ull, 333693617628570ull}}, {{4799707627735618884ull, 533909788205713ull}}, {{11218463731672315753ull, 427127830564570ull}}, {{8974770985337852602ull, 341702264451656ull}}, {{6980935947056743518ull, 546723623122650ull}}, {{5584748757645394814ull, 437378898498120ull}}, {{4467799006116315851ull, 349903118798496ull}}, {{18216524854011836332ull, 559844990077593ull}}, {{3505173438983738096ull, 447875992062075ull}}, {{2804138751186990477ull, 358300793649660ull}}, {{2243311000949592381ull, 286640634919728ull}}, {{18346692860486989103ull, 458625015871564ull}}, {{18366703103131501605ull, 366900012697251ull}}, {{11004013667763290961ull, 293520010157801ull}}, {{10227724238937444892ull, 469632016252482ull}}, {{803481761666135267ull, 375705613001986ull}}, {{15400180668300549506ull, 300564490401588ull}}, {{2504196180829417271ull, 480903184642542ull}}, {{13071403388889264786ull, 384722547714033ull}}, {{17835820340595232475ull, 307778038171226ull}}, {{2711870841758999698ull, 492444861073963ull}}, {{9548194302891020405ull, 393955888859170ull}}, {{7638555442312816324ull, 315164711087336ull}}, {{4842991078216685472ull, 504263537739738ull}}, {{11253090492057169024ull, 403410830191790ull}}, {{9002472393645735219ull, 322728664153432ull}}, {{18093304644575086674ull, 516365862645491ull}}, {{10785294900918159016ull, 413092690116393ull}}, {{16006933550218347859ull, 330474152093114ull}}, {{14543047236123625605ull, 528758643348983ull}}, {{566391344673169514ull, 423006914679187ull}}, {{11521159519964266581ull, 338405531743349ull}}, {{7365808787717095560ull, 541448850789359ull}}, {{9581995844915586771ull, 433159080631487ull}}, {{286899046448648771ull, 346527264505190ull}}, {{459038474317838033ull, 554443623208304ull}}, {{4056579594196180750ull, 443554898566643ull}}, {{10623961304840765246ull, 354843918853314ull}}, {{12188517858614522520ull, 283875135082651ull}}, {{12122930944299415386ull, 454200216132242ull}}, {{2319647125955711662ull, 363360172905794ull}}, {{5545066515506479653ull, 290688138324635ull}}, {{8872106424810367445ull, 465101021319416ull}}, {{3408336325106383633ull, 372080817055533ull}}, {{10105366689568927552ull, 297664653644426ull}}, {{8789889073826463438ull, 476263445831082ull}}, {{18099957703286901720ull, 381010756664865ull}}, {{14479966162629521376ull, 304808605331892ull}}, {{8410550601239592908ull, 487693768531028ull}}, {{14107138110475494973ull, 390155014824822ull}}, {{3907012858896575332ull, 312124011859858ull}}, {{2561871759492610208ull, 499398418975773ull}}, {{9428195037077908813ull, 399518735180618ull}}, {{14921253659146147697ull, 319614988144494ull}}, {{12805959410408105345ull, 511383981031191ull}}, {{6555418713584573953ull, 409107184824953ull}}, {{12623032600351479809ull, 327285747859962ull}}, {{5439456901594726401ull, 523657196575940ull}}, {{4351565521275781121ull, 418925757260752ull}}, {{14549298861246355866ull, 335140605808601ull}}, {{15900180548510348740ull, 536224969293762ull}}, {{5341446809324458345ull, 428979975435010ull}}, {{4273157447459566676ull, 343183980348008ull}}, {{3147703101193396359ull, 549094368556813ull}}, {{9896860110438537734ull, 439275494845450ull}}, {{7917488088350830187ull, 351420395876360ull}}, {{12667980941361328299ull, 562272633402176ull}}, {{6445035938347152316ull, 449818106721741ull}}, {{1466679935935811529ull, 359854485377393ull}}, {{8552041578232469870ull, 287883588301914ull}}, {{2615220080946220823ull, 460613741283063ull}}, {{9470873694240797304ull, 368490993026450ull}}, {{7576698955392637843ull, 294792794421160ull}}, {{12122718328628220550ull, 471668471073856ull}}, {{6008825848160666116ull, 377334776859085ull}}, {{4807060678528532893ull, 301867821487268ull}}, {{4001948270903742306ull, 482988514379629ull}}, {{6890907431464904168ull, 386390811503703ull}}, {{12891423574655743981ull, 309112649202962ull}}, {{5868882460481549076ull, 494580238724740ull}}, {{4695105968385239261ull, 395664190979792ull}}, {{14824131218933922378ull, 316531352783833ull}}, {{1582517061842813866ull, 506450164454134ull}}, {{4955362464216161416ull, 405160131563307ull}}, {{15032336415598660103ull, 324128105250645ull}}, {{5604994191248304548ull, 518604968401033ull}}, {{11862692982482464285ull, 414883974720826ull}}, {{5800805571244061105ull, 331907179776661ull}}, {{1902591284506677121ull, 531051487642658ull}}, {{8900770657089162343ull, 424841190114126ull}}, {{3431267710929419551ull, 339872952091301ull}}, {{16558074781712802252ull, 543796723346081ull}}, {{9557111010628331478ull, 435037378676865ull}}, {{7645688808502665183ull, 348029902941492ull}}, {{15922450908346174616ull, 556847844706387ull}}, {{5359263097193119046ull, 445478275765110ull}}, {{4287410477754495237ull, 356382620612088ull}}, {{10808626011687416836ull, 285106096489670ull}}, {{17293801618699866937ull, 456169754383472ull}}, {{6456343665476072903ull, 364935803506778ull}}, {{12543772561864678969ull, 291948642805422ull}}, {{5312640840015845058ull, 467117828488676ull}}, {{560763857270765723ull, 373694262790941ull}}, {{15206006344784253871ull, 298955410232752ull}}, {{9572214892687164901ull, 478328656372404ull}}, {{11347120728891642244ull, 382662925097923ull}}, {{16456394212597134442ull, 306130340078338ull}}, {{4194137851703953168ull, 489808544125342ull}}, {{14423356725588893504ull, 391846835300273ull}}, {{470638936245383833ull, 313477468240219ull}}, {{8131719927476434780ull, 501563949184350ull}}, {{6505375941981147824ull, 401251159347480ull}}, {{5204300753584918259ull, 321000927477984ull}}, {{15705578835219689861ull, 513601483964774ull}}, {{16253811882917662212ull, 410881187171819ull}}, {{16692398321076040093ull, 328704949737455ull}}, {{8261093240012112533ull, 525927919579929ull}}, {{10298223406751600349ull, 420742335663943ull}}, {{15617276354885100926ull, 336593868531154ull}}, {{13919595723590430512ull, 538550189649847ull}}, {{3756978949388523763ull, 430840151719878ull}}, {{10384280788994639657ull, 344672121375902ull}}, {{1857454003423782158ull, 551475394201444ull}}, {{5175312017480936050ull, 441180315361155ull}}, {{4140249613984748840ull, 352944252288924ull}}, {{7001548505929709395ull, 282355401831139ull}}, {{134431165261804062ull, 451768642929823ull}}, {{7486242561693263896ull, 361414914343858ull}}, {{13367691678838431763ull, 289131931475086ull}}, {{14009609056657670175ull, 462611090360138ull}}, {{139640801100405170ull, 370088872288111ull}}, {{14869107899847965429ull, 296071097830488ull}}, {{1654479751305282747ull, 473713756528782ull}}, {{12391630245269957167ull, 378971005223025ull}}, {{9913304196215965734ull, 303176804178420ull}}, {{15861286713945545174ull, 485082886685472ull}}, {{5310331741672615493ull, 388066309348378ull}}, {{11626963022821913041ull, 310453047478702ull}}, {{3845745577547419573ull, 496724875965924ull}}, {{6765945276779845981ull, 397379900772739ull}}, {{9102105036165787108ull, 317903920618191ull}}, {{7184670428381438727ull, 508646272989106ull}}, {{2058387527963240658ull, 406917018391285ull}}, {{1646710022370592526ull, 325533614713028ull}}, {{17392131294760589335ull, 520853783540844ull}}, {{17603053850550381791ull, 416683026832675ull}}, {{14082443080440305433ull, 333346421466140ull}}, {{4085164854994937077ull, 533354274345825ull}}, {{3268131883995949662ull, 426683419476660ull}}, {{2614505507196759729ull, 341346735581328ull}}, {{493859996772905244ull, 546154776930125ull}}, {{395087997418324195ull, 436923821544100ull}}, {{316070397934659356ull, 349539057235280ull}}, {{505712636695454970ull, 559262491576448ull}}, {{7783267738840184622ull, 447409993261158ull}}, {{13605311820555968344ull, 357927994608926ull}}, {{7194900641702864352ull, 286342395687141ull}}, {{4133143397240762317ull, 458147833099426ull}}, {{18063909976760251146ull, 366518266479540ull}}, {{14451127981408200917ull, 293214613183632ull}}, {{8364409511285480174ull, 469143381093812ull}}, {{17759574053254115109ull, 375314704875049ull}}, {{17897008057345202410ull, 300251763900039ull}}, {{17567166447526592887ull, 480402822240063ull}}, {{2985686713795543340ull, 384322257792051ull}}, {{17145944630004075965ull, 307457806233640ull}}, {{8986767334296969928ull, 491932489973825ull}}, {{7189413867437575942ull, 393545991979060ull}}, {{5751531093950060754ull, 314836793583248ull}}, {{5513100935578186883ull, 503738869733197ull}}, {{15478527192688280476ull, 402991095786557ull}}, {{5004124124666803734ull, 322392876629246ull}}, {{627900969983065329ull, 515828602606794ull}}, {{4191669590728362586ull, 412662882085435ull}}, {{3353335672582690069ull, 330130305668348ull}}, {{1675988261390393787ull, 528208489069357ull}}, {{12408837053338045999ull, 422566791255485ull}}, {{9927069642670436799ull, 338053433004388ull}}, {{12193962613530788556ull, 540885492807021ull}}, {{6065821276082720521ull, 432708394245617ull}}, {{15920703465091907387ull, 346166715396493ull}}, {{3337032655695589880ull, 553866744634390ull}}, {{2669626124556471904ull, 443093395707512ull}}, {{13203747343870908492ull, 354474716566009ull}}, {{14252346689838637117ull, 283579773252807ull}}, {{8046359444774178095ull, 453727637204492ull}}, {{17505134000045073445ull, 362982109763593ull}}, {{2936060755810327787ull, 290385687810875ull}}, {{4697697209296524459ull, 464617100497400ull}}, {{3758157767437219567ull, 371693680397920ull}}, {{3006526213949775653ull, 297354944318336ull}}, {{15878488386545372015ull, 475767910909337ull}}, {{5324093079752476966ull, 380614328727470ull}}, {{4259274463801981573ull, 304491462981976ull}}, {{17882885586308901486ull, 487186340771161ull}}, {{10616959654305210865ull, 389749072616929ull}}, {{12182916538186079015ull, 311799258093543ull}}, {{15803317646355816102ull, 498878812949669ull}}, {{16332002931826563205ull, 399103050359735ull}}, {{13065602345461250564ull, 319282440287788ull}}, {{17215614937996090579ull, 510851904460461ull}}, {{10083143135654962140ull, 408681523568369ull}}, {{11755863323265880035ull, 326945218854695ull}}, {{362637243515856440ull, 523112350167513ull}}, {{7668807424296505798ull, 418489880134010ull}}, {{6135045939437204639ull, 334791904107208ull}}, {{6126724688357617099ull, 535667046571533ull}}, {{12280077380169914325ull, 428533637257226ull}}, {{6134713089394021137ull, 342826909805781ull}}, {{2436843313546613173ull, 548523055689250ull}}, {{1949474650837290538ull, 438818444551400ull}}, {{1559579720669832431ull, 351054755641120ull}}, {{2495327553071731889ull, 561687609025792ull}}, {{13064308486683116481ull, 449350087220633ull}}, {{17830144418830313831ull, 359480069776506ull}}, {{10574766720322340742ull, 287584055821205ull}}, {{16919626752515745187ull, 460134489313928ull}}, {{2467654957786865180ull, 368107591451143ull}}, {{9352821595713312790ull, 294486073160914ull}}, {{3896468108915569495ull, 471177717057463ull}}, {{10495872116616276242ull, 376942173645970ull}}, {{8396697693293020994ull, 301553738916776ull}}, {{6056018679785012944ull, 482485982266842ull}}, {{15912861388053741325ull, 385988785813473ull}}, {{1662242666217262090ull, 308791028650779ull}}, {{10038285895431439991ull, 494065645841246ull}}, {{4341279901603241669ull, 395252516672997ull}}, {{14541070365508324305ull, 316202013338397ull}}, {{8508317325845677595ull, 505923221341436ull}}, {{3117305045934631753ull, 404738577073149ull}}, {{6183192851489615725ull, 323790861658519ull}}, {{17271806191867205807ull, 518065378653630ull}}, {{13817444953493764646ull, 414452302922904ull}}, {{14743304777536922040ull, 331561842338323ull}}, {{1453194755607613325ull, 530498947741318ull}}, {{8541253433969911306ull, 424399158193054ull}}, {{10522351561917839368ull, 339519326554443ull}}, {{13146413684326632666ull, 543230922487109ull}}, {{14206479762203216456ull, 434584737989687ull}}, {{3986486180278752518ull, 347667790391750ull}}, {{6378377888446004029ull, 556268464626800ull}}, {{5102702310756803223ull, 445014771701440ull}}, {{4082161848605442578ull, 356011817361152ull}}, {{14333775923110085032ull, 284809453888921ull}}, {{15555343847492315406ull, 455695126222274ull}}, {{16133623892735762648ull, 364556100977819ull}}, {{16596247928930520441ull, 291644880782255ull}}, {{8107252612579281090ull, 466631809251609ull}}, {{10175150904805335195ull, 373305447401287ull}}, {{761423094360447510ull, 298644357921030ull}}, {{1218276950976716016ull, 477830972673648ull}}, {{8353319190265193459ull, 382264778138918ull}}, {{14061352981695975413ull, 305811822511134ull}}, {{11430118326487829692ull, 489298916017815ull}}, {{9144094661190263754ull, 391439132814252ull}}, {{18383322173177941972ull, 313151306251401ull}}, {{3587873773891334894ull, 501042090002243ull}}, {{10248996648596888561ull, 400833672001794ull}}, {{11888546133619421172ull, 320666937601435ull}}, {{574929740081522260ull, 513067100162297ull}}, {{11527990236290948777ull, 410453680129837ull}}, {{1843694559548938375ull, 328362944103870ull}}, {{2949911295278301401ull, 525380710566192ull}}, {{13427975480448372090ull, 420304568452953ull}}, {{18121078013842518318ull, 336243654762362ull}}, {{14236329563180388017ull, 537989847619780ull}}, {{11389063650544310414ull, 430391878095824ull}}, {{12800599735177358654ull, 344313502476659ull}}, {{9412913132058042877ull, 550901603962655ull}}, {{7530330505646434301ull, 440721283170124ull}}, {{9713613219259057764ull, 352577026536099ull}}, {{11460239390149156535ull, 282061621228879ull}}, {{7268336580012919486ull, 451298593966207ull}}, {{16882715708236066558ull, 361038875172965ull}}, {{13506172566588853246ull, 288831100138372ull}}, {{6852480847574523902ull, 462129760221396ull}}, {{1792635863317708798ull, 369703808177117ull}}, {{12502155134879898008ull, 295763046541693ull}}, {{16314099401065926490ull, 473220874466709ull}}, {{16740628335594651515ull, 378576699573367ull}}, {{6013805038991900566ull, 302861359658694ull}}, {{17000785691870861552ull, 484578175453910ull}}, {{13600628553496689241ull, 387662540363128ull}}, {{18259200472281172039ull, 310130032290502ull}}, {{14457325496682233970ull, 496208051664804ull}}, {{15255209212087697499ull, 396966441331843ull}}, {{1136120925444427030ull, 317573153065475ull}}, {{1817793480711083248ull, 508117044904760ull}}, {{1454234784568866598ull, 406493635923808ull}}, {{8542085457138913925ull, 325194908739046ull}}, {{6288639101938441634ull, 520311853982474ull}}, {{8720260096292663630ull, 416249483185979ull}}, {{10665556891776041227ull, 332999586548783ull}}, {{13375542212099755641ull, 532799338478053ull}}, {{18079131399163625159ull, 426239470782442ull}}, {{7084607489847079481ull, 340991576625954ull}}, {{267325539529596200ull, 545586522601527ull}}, {{11281906875849407929ull, 436469218081221ull}}, {{5336176685937616020ull, 349175374464977ull}}, {{12227231512242095956ull, 558680599143963ull}}, {{17160482839277497411ull, 446944479315170ull}}, {{13728386271421997928ull, 357555583452136ull}}, {{7293360202395688019ull, 286044466761709ull}}, {{601329879607369862ull, 457671146818735ull}}, {{481063903685895889ull, 366136917454988ull}}, {{7763548752432537358ull, 292909533963990ull}}, {{12421678003892059773ull, 468655254342384ull}}, {{13626691217855558141ull, 374924203473907ull}}, {{3522655344800625867ull, 299939362779126ull}}, {{16704294995906732356ull, 479902980446601ull}}, {{9674087181983475562ull, 383922384357281ull}}, {{4049920930844870126ull, 307137907485825ull}}, {{6479873489351792202ull, 491420651977320ull}}, {{5183898791481433762ull, 393136521581856ull}}, {{457770218443236686ull, 314509217265485ull}}, {{732432349509178698ull, 503214747624776ull}}, {{15343341138574984251ull, 402571798099820ull}}, {{12274672910859987401ull, 322057438479856ull}}, {{12260779027892159195ull, 515291901567770ull}}, {{9808623222313727356ull, 412233521254216ull}}, {{4157549763109071561ull, 329786817003373ull}}, {{2962730806232604175ull, 527658907205397ull}}, {{13438231089211814310ull, 422127125764317ull}}, {{3371887241885630801ull, 337701700611454ull}}, {{12773717216500829929ull, 540322720978326ull}}, {{6529624958458753620ull, 432258176782661ull}}, {{1534351152025092573ull, 345806541426129ull}}, {{9833659472723968763ull, 553290466281806ull}}, {{4177578763437264687ull, 442632373025445ull}}, {{3342063010749811749ull, 354105898420356ull}}, {{17431045667567490692ull, 283284718736284ull}}, {{16821626623882254138ull, 453255549978055ull}}, {{13457301299105803311ull, 362604439982444ull}}, {{14455189854026552972ull, 290083551985955ull}}, {{4681559692732933139ull, 464133683177529ull}}, {{7434596568928256834ull, 371306946542023ull}}, {{13326374884626426114ull, 297045557233618ull}}, {{17632851000660371459ull, 475272891573789ull}}, {{17795629615270207490ull, 380218313259031ull}}, {{10547154877474255669ull, 304174650607225ull}}, {{16875447803958809070ull, 486679440971560ull}}, {{13500358243167047256ull, 389343552777248ull}}, {{18178984224017458451ull, 311474842221798ull}}, {{6950281869976471583ull, 498359747554878ull}}, {{12938923125464997913ull, 398687798043902ull}}, {{2972440870888177684ull, 318950238435122ull}}, {{8445254208162994618ull, 510320381496195ull}}, {{6756203366530395694ull, 408256305196956ull}}, {{1715613878482406232ull, 326605044157565ull}}, {{2744982205571849971ull, 522568070652104ull}}, {{5885334579199390300ull, 418054456521683ull}}, {{12086965292843332886ull, 334443565217346ull}}, {{11960446839065511972ull, 535109704347754ull}}, {{13257706285994319901ull, 428087763478203ull}}, {{17984862658279276567ull, 342470210782562ull}}, {{14018384994279201215ull, 547952337252100ull}}, {{11214707995423360972ull, 438361869801680ull}}, {{8971766396338688777ull, 350689495841344ull}}, {{3286779789916171074ull, 561103193346151ull}}, {{17386819090900578152ull, 448882554676920ull}}, {{13909455272720462522ull, 359106043741536ull}}, {{7438215403434459694ull, 287284834993229ull}}, {{833098201269404541ull, 459655735989167ull}}, {{11734525005241254602ull, 367724588791333ull}}, {{16766317633676824328ull, 294179671033066ull}}, {{1000666510689546663ull, 470687473652907ull}}, {{11868579652777368300ull, 376549978922325ull}}, {{9494863722221894640ull, 301239983137860ull}}, {{15191781955555031424ull, 481983973020576ull}}, {{8464076749702114816ull, 385587178416461ull}}, {{3081912585019781529ull, 308469742733169ull}}, {{12309757765515471094ull, 493551588373070ull}}, {{9847806212412376875ull, 394841270698456ull}}, {{4188896155187991177ull, 315873016558765ull}}, {{6702233848300785883ull, 505396826494024ull}}, {{9051135893382539029ull, 404317461195219ull}}, {{10930257529447941547ull, 323453968956175ull}}, {{17488412047116706475ull, 517526350329880ull}}, {{13990729637693365180ull, 414021080263904ull}}, {{14881932524896602467ull, 331216864211123ull}}, {{1674999151383102008ull, 529946982737798ull}}, {{8718696950590302253ull, 423957586190238ull}}, {{14353655189956062449ull, 339166068952190ull}}, {{4519104230220148302ull, 542665710323505ull}}, {{3615283384176118641ull, 434132568258804ull}}, {{6581575522082805236ull, 347306054607043ull}}, {{6841172020590578055ull, 555689687371269ull}}, {{9162286431214372767ull, 444551749897015ull}}, {{7329829144971498214ull, 355641399917612ull}}, {{16931909760202929540ull, 284513119934089ull}}, {{16023009172098956295ull, 455220991894543ull}}, {{1750360893453434067ull, 364176793515635ull}}, {{1400288714762747253ull, 291341434812508ull}}, {{16997857202588036898ull, 466146295700012ull}}, {{6219588132586608872ull, 372917036560010ull}}, {{4975670506069287098ull, 298333629248008ull}}, {{4271723994968949033ull, 477333806796813ull}}, {{10796076825458979873ull, 381867045437450ull}}, {{8636861460367183898ull, 305493636349960ull}}, {{13818978336587494237ull, 488789818159936ull}}, {{7365833854528085067ull, 391031854527949ull}}, {{9582015898364378376ull, 312825483622359ull}}, {{4263178993157274433ull, 500520773795775ull}}, {{3410543194525819546ull, 400416619036620ull}}, {{2728434555620655637ull, 320333295229296ull}}, {{15433541733218779989ull, 512533272366873ull}}, {{1278786942349293021ull, 410026617893499ull}}, {{4712378368621344740ull, 328021294314799ull}}, {{14918503019277972231ull, 524834070903678ull}}, {{866755971196646815ull, 419867256722943ull}}, {{8072102406441138098ull, 335893805378354ull}}, {{1847317406080089988ull, 537430088605367ull}}, {{12545900369089802960ull, 429944070884293ull}}, {{17415417924755663014ull, 343955256707434ull}}, {{16796622235383329854ull, 550328410731895ull}}, {{13437297788306663883ull, 440262728585516ull}}, {{7060489415903420783ull, 352210182868413ull}}, {{13027089162206557273ull, 281768146294730ull}}, {{2396598585820940021ull, 450829034071569ull}}, {{5606627683398662340ull, 360663227257255ull}}, {{4485302146718929872ull, 288530581805804ull}}, {{14555181064234108441ull, 461648930889286ull}}, {{7954796036645376430ull, 369319144711429ull}}, {{10053185644058211467ull, 295455315769143ull}}, {{12395748215751228024ull, 472728505230629ull}}, {{13605947387342892742ull, 378182804184503ull}}, {{18263455539358134840ull, 302546243347602ull}}, {{14464133604005374452ull, 484073989356164ull}}, {{15260655697946209884ull, 387259191484931ull}}, {{8519175743615057584ull, 309807353187945ull}}, {{13630681189784092135ull, 495691765100712ull}}, {{3525847322343453062ull, 396553412080570ull}}, {{2820677857874762449ull, 317242729664456ull}}, {{15581131016825350889ull, 507588367463129ull}}, {{16154253628202191034ull, 406070693970503ull}}, {{1855356458336021858ull, 324856555176403ull}}, {{17725965592305276265ull, 519770488282244ull}}, {{17870121288586131335ull, 415816390625795ull}}, {{14296097030868905068ull, 332653112500636ull}}, {{15495057619906427463ull, 532244980001018ull}}, {{1327999651699411001ull, 425795984000815ull}}, {{1062399721359528800ull, 340636787200652ull}}, {{5389188368917156404ull, 545018859521043ull}}, {{11690048324617545770ull, 436015087616834ull}}, {{13041387474435946939ull, 348812070093467ull}}, {{6108824700129873809ull, 558099312149548ull}}, {{12265757389587719694ull, 446479449719638ull}}, {{17191303541153996401ull, 357183559775710ull}}, {{13753042832923197121ull, 285746847820568ull}}, {{18315519717935205071ull, 457194956512909ull}}, {{18341764589090074380ull, 365755965210327ull}}, {{7294714041788238857ull, 292604772168262ull}}, {{15360891281603092495ull, 468167635469219ull}}, {{15978061840024384319ull, 374534108375375ull}}, {{12782449472019507455ull, 299627286700300ull}}, {{2005175081521660313ull, 479403658720481ull}}, {{16361535324184969543ull, 383522926976384ull}}, {{16778577074089885957ull, 306818341581107ull}}, {{12088328059576176239ull, 490909346529772ull}}, {{2291964818177120345ull, 392727477223818ull}}, {{9212269484025516922ull, 314181981779054ull}}, {{3671584730215096106ull, 502691170846487ull}}, {{14005314228397807855ull, 402152936677189ull}}, {{14893600197460156607ull, 321722349341751ull}}, {{16451062686452429925ull, 514755758946802ull}}, {{5782152519678123293ull, 411804607157442ull}}, {{15693768459968229604ull, 329443685725953ull}}, {{2973936647497705428ull, 527109897161526ull}}, {{17136544576965805635ull, 421687917729220ull}}, {{13709235661572644508ull, 337350334183376ull}}, {{14556079429032410566ull, 539760534693402ull}}, {{4266165913742107807ull, 431808427754722ull}}, {{14480979175219417215ull, 345446742203777ull}}, {{8412171421383426251ull, 552714787526044ull}}, {{10419085951848651324ull, 442171830020835ull}}, {{8335268761478921059ull, 353737464016668ull}}, {{14046912638666957494ull, 282989971213334ull}}, {{11407013777641401020ull, 452783953941335ull}}, {{9125611022113120816ull, 362227163153068ull}}, {{14679186447174317299ull, 289781730522454ull}}, {{12418651871253176710ull, 463650768835927ull}}, {{2556223867518720721ull, 370920615068742ull}}, {{13113025538240707546ull, 296736492054993ull}}, {{17291492046443221751ull, 474778387287989ull}}, {{17522542451896487724ull, 379822709830391ull}}, {{10328685146775279856ull, 303858167864313ull}}, {{12836547420098537447ull, 486173068582901ull}}, {{6579889121336919634ull, 388938454866321ull}}, {{1574562482327625384ull, 311150763893057ull}}, {{6208648786466110938ull, 497841222228891ull}}, {{1277570214430978427ull, 398272977783113ull}}, {{8400753801028603388ull, 318618382226490ull}}, {{13441206081645765421ull, 509789411562384ull}}, {{14442313680058522660ull, 407831529249907ull}}, {{4175153314562997481ull, 326265223399926ull}}, {{17748291747526526940ull, 522024357439881ull}}, {{10509284583279311229ull, 417619485951905ull}}, {{8407427666623448983ull, 334095588761524ull}}, {{2383837822371787403ull, 534552942018439ull}}, {{5596419072639340246ull, 427642353614751ull}}, {{787786443369561873ull, 342113882891801ull}}, {{12328504753617029967ull, 547382212626881ull}}, {{6173454988151713650ull, 437905770101505ull}}, {{4938763990521370920ull, 350324616081204ull}}, {{15280720014318014119ull, 560519385729926ull}}, {{8535227196712500972ull, 448415508583941ull}}, {{3138832942628090454ull, 358732406867153ull}}, {{9889763983586293010ull, 286985925493722ull}}, {{1066227114770427523ull, 459177480789956ull}}, {{15610376950783983311ull, 367341984631964ull}}, {{16177650375369096972ull, 293873587705571ull}}, {{58798897397182893ull, 470197740328915ull}}, {{47039117917746314ull, 376158192263132ull}}, {{11105677738559928021ull, 300926553810505ull}}, {{17769084381695884834ull, 481482486096808ull}}, {{3147221061130976897ull, 385185988877447ull}}, {{13585823293130512487ull, 308148791101957ull}}, {{6979922010041178687ull, 493038065763132ull}}, {{16651984052258673919ull, 394430452610505ull}}, {{13321587241806939135ull, 315544362088404ull}}, {{10246493142665371647ull, 504870979341447ull}}, {{818496884648476671ull, 403896783473158ull}}, {{8033495137202601983ull, 323117426778526ull}}, {{5474894590040342527ull, 516987882845642ull}}, {{15447962116258004991ull, 413590306276513ull}}, {{1290323248780673023ull, 330872245021211ull}}, {{13132563642274807807ull, 529395592033937ull}}, {{3127353284336025599ull, 423516473627150ull}}, {{2501882627468820479ull, 338813178901720ull}}, {{4003012203950112767ull, 542101086242752ull}}, {{14270456207385821183ull, 433680868994201ull}}, {{7727016151166746623ull, 346944695195361ull}}, {{4984528212382973951ull, 555111512312578ull}}, {{11366320199390199807ull, 444089209850062ull}}, {{1714358530028339199ull, 355271367880050ull}}, {{1371486824022671359ull, 284217094304040ull}}, {{2194378918436274175ull, 454747350886464ull}}, {{5444851949490929663ull, 363797880709171ull}}, {{666532744850833407ull, 291038304567337ull}}, {{4755801206503243775ull, 465661287307739ull}}, {{7493989779944505343ull, 372529029846191ull}}, {{2305843009213693951ull, 298023223876953ull}}, {{18446744073709551615ull, 476837158203124ull}}, {{18446744073709551615ull, 381469726562499ull}}, {{18446744073709551615ull, 305175781249999ull}}, {{18446744073709551615ull, 488281249999999ull}}, {{18446744073709551615ull, 390624999999999ull}}, {{18446744073709551615ull, 312499999999999ull}}, {{18446744073709551615ull, 499999999999999ull}}, {{18446744073709551615ull, 399999999999999ull}}, {{18446744073709551615ull, 319999999999999ull}}, {{18446744073709551615ull, 511999999999999ull}}, {{18446744073709551615ull, 409599999999999ull}}, {{18446744073709551615ull, 327679999999999ull}}, {{18446744073709551615ull, 524287999999999ull}}, {{18446744073709551615ull, 419430399999999ull}}, {{18446744073709551615ull, 335544319999999ull}}, {{18446744073709551615ull, 536870911999999ull}}, {{18446744073709551615ull, 429496729599999ull}}, {{18446744073709551615ull, 343597383679999ull}}, {{18446744073709551615ull, 549755813887999ull}}, {{18446744073709551615ull, 439804651110399ull}}, {{18446744073709551615ull, 351843720888319ull}}, {{18446744073709551615ull, 281474976710655ull}}, {{11068046444225730969ull, 450359962737049ull}}, {{12543785970122495098ull, 360287970189639ull}}, {{13724377590839906402ull, 288230376151711ull}}, {{14580306515860029597ull, 461168601842738ull}}, {{596198768462292708ull, 368934881474191ull}}, {{15234354273737475459ull, 295147905179352ull}}, {{9617571579012319442ull, 472236648286964ull}}, {{11383406077951765876ull, 377789318629571ull}}, {{5417376047619502378ull, 302231454903657ull}}, {{12357150490933114128ull, 483570327845851ull}}, {{6196371578004580979ull, 386856262276681ull}}, {{1267748447661754460ull, 309485009821345ull}}, {{2028397516258807136ull, 495176015714152ull}}, {{12690764457232776679ull, 396140812571321ull}}, {{6463262751044311020ull, 316912650057057ull}}, {{14030569216412807955ull, 507060240091291ull}}, {{7535106558388336041ull, 405648192073033ull}}, {{13406782876194489479ull, 324518553658426ull}}, {{14072154972427362520ull, 519229685853482ull}}, {{3879026348458069369ull, 415383748682786ull}}, {{17860616337734096788ull, 332306998946228ull}}, {{6440893251923092922ull, 531691198313966ull}}, {{1463365786796564015ull, 425352958651173ull}}, {{8549390258921071858ull, 340282366920938ull}}, {{9989675599531804650ull, 544451787073501ull}}, {{4302391664883533397ull, 435561429658801ull}}, {{18199308590874468010ull, 348449143727040ull}}, {{10672149671689597200ull, 557518629963265ull}}, {{8537719737351677760ull, 446014903970612ull}}, {{17898222234107073178ull, 356811923176489ull}}, {{18007926602027568865ull, 285449538541191ull}}, {{2987240860050737922ull, 456719261665907ull}}, {{13457839132266321307ull, 365375409332725ull}}, {{10766271305813057046ull, 292300327466180ull}}, {{17226034089300891273ull, 467680523945888ull}}, {{2712780827214982049ull, 374144419156711ull}}, {{16927619920739626932ull, 299315535325368ull}}, {{4948098984731941152ull, 478904856520590ull}}, {{3958479187785552922ull, 383123885216472ull}}, {{14234829794454173307ull, 306499108173177ull}}, {{8018332412159035998ull, 490398573077084ull}}, {{10104014744469139122ull, 392318858461667ull}}, {{704514166091490651ull, 313855086769334ull}}, {{8505920295230205688ull, 502168138830934ull}}, {{10494085050926074874ull, 401734511064747ull}}, {{1016570411257039252ull, 321387608851798ull}}, {{16383907916978904097ull, 514220174162876ull}}, {{9417777518841212954ull, 411376139330301ull}}, {{3844873200331060040ull, 329100911464241ull}}, {{17219843564755427034ull, 526561458342785ull}}, {{13775874851804341627ull, 421249166674228ull}}, {{18399397510927293948ull, 336999333339382ull}}, {{14681640758516029024ull, 539198933343012ull}}, {{4366614977329002573ull, 431359146674410ull}}, {{3493291981863202058ull, 345087317339528ull}}, {{1899918356239212970ull, 552139707743245ull}}, {{1519934684991370376ull, 441711766194596ull}}, {{15973343006960737594ull, 353369412955676ull}}, {{9089325590826679752ull, 282695530364541ull}}, {{7164223315838866956ull, 452312848583266ull}}, {{2042029837929183242ull, 361850278866613ull}}, {{9012321499827167240ull, 289480223093290ull}}, {{14419714399723467584ull, 463168356949264ull}}, {{15225120334520684390ull, 370534685559411ull}}, {{8490747452874637189ull, 296427748447529ull}}, {{2517149480373688533ull, 474284397516047ull}}, {{13081766028524681796ull, 379427518012837ull}}, {{3086715193335924790ull, 303542014410270ull}}, {{4938744309337479665ull, 485667223056432ull}}, {{15019041891695714701ull, 388533778445145ull}}, {{12015233513356571761ull, 310827022756116ull}}, {{11845675991886694171ull, 497323236409786ull}}, {{5787191978767445014ull, 397858589127829ull}}, {{8319102397755866334ull, 318286871302263ull}}, {{9621215021667475812ull, 509258994083621ull}}, {{4007623202592070326ull, 407407195266897ull}}, {{14274145006299387230ull, 325925756213517ull}}, {{8081236751111378276ull, 521481209941628ull}}, {{13843687030372923267ull, 417184967953302ull}}, {{3696251994814517967ull, 333747974362642ull}}, {{9603352006445139071ull, 533996758980227ull}}, {{303983975672290610ull, 427197407184182ull}}, {{11311233624763563458ull, 341757925747345ull}}, {{18097973799621701533ull, 546812681195752ull}}, {{7099681410213540580ull, 437450144956602ull}}, {{16747791572396563433ull, 349960115965281ull}}, {{971024812641129231ull, 559936185544451ull}}, {{15534215109080544677ull, 447948948435560ull}}, {{12427372087264435742ull, 358359158748448ull}}, {{17320595299295369240ull, 286687326998758ull}}, {{5576859590421128845ull, 458699723198014ull}}, {{8150836487078813399ull, 366959778558411ull}}, {{2831320374921140396ull, 293567822846729ull}}, {{11908810229357645280ull, 469708516554766ull}}, {{5837699368744205901ull, 375766813243813ull}}, {{12048857124479185367ull, 300613450595050ull}}, {{831427325457144971ull, 480981520952081ull}}, {{15422537119333357270ull, 384785216761664ull}}, {{16027378510208596139ull, 307828173409331ull}}, {{18265107986849933176ull, 492525077454930ull}}, {{14612086389479946541ull, 394020061963944ull}}, {{15379017926325867556ull, 315216049571155ull}}, {{6159684608411836474ull, 504345679313849ull}}, {{8617096501471379502ull, 403476543451079ull}}, {{10583026015919013925ull, 322781234760863ull}}, {{13243492810728511957ull, 516449975617381ull}}, {{6905445433840899242ull, 413159980493905ull}}, {{5524356347072719393ull, 330527984395124ull}}, {{16217667784800171676ull, 528844775032198ull}}, {{1906087783614406371ull, 423075820025759ull}}, {{5214219041633435420ull, 338460656020607ull}}, {{12032099281355406996ull, 541537049632971ull}}, {{5936330610342415273ull, 433229639706377ull}}, {{15817110932499663188ull, 346583711765101ull}}, {{17928679862515640455ull, 554533938824162ull}}, {{6964246260528691717ull, 443627151059330ull}}, {{5571397008422953374ull, 354901720847464ull}}, {{8146466421480273022ull, 283921376677971ull}}, {{5655648644884616189ull, 454274202684754ull}}, {{8213867730649603275ull, 363419362147803ull}}, {{13949791814003503266ull, 290735489718242ull}}, {{7562271643437963933ull, 465176783549188ull}}, {{13428514944234191793ull, 372141426839350ull}}, {{10742811955387353434ull, 297713141471480ull}}, {{17188499128619765495ull, 476341026354368ull}}, {{2682752858670081426ull, 381072821083495ull}}, {{2146202286936065141ull, 304858256866796ull}}, {{14501970103323435195ull, 487773210986873ull}}, {{533529638433017186ull, 390218568789499ull}}, {{4116172525488324072ull, 312174855031599ull}}, {{13964573670265139162ull, 499479768050558ull}}, {{103612491986380360ull, 399583814440447ull}}, {{11150936437814835258ull, 319667051552357ull}}, {{3084103041536095120ull, 511467282483772ull}}, {{13535328877454607065ull, 409173825987017ull}}, {{3449565472479865006ull, 327339060789614ull}}, {{12898002385451604656ull, 523742497263382ull}}, {{2939704278877463078ull, 418993997810706ull}}, {{17109158682069611755ull, 335195198248564ull}}, {{16306607447085647839ull, 536312317197703ull}}, {{1977239513442787302ull, 429049853758163ull}}, {{8960489240238050488ull, 343239883006530ull}}, {{14336782784380880780ull, 549183812810448ull}}, {{401379783278973655ull, 439347050248359ull}}, {{4010452641365089247ull, 351477640198687ull}}, {{10106073040926053118ull, 562364224317899ull}}, {{11774207247482752818ull, 449891379454319ull}}, {{13108714612728112577ull, 359913103563455ull}}, {{10486971690182490062ull, 287930482850764ull}}, {{5711108260066253130ull, 460688772561223ull}}, {{11947584237536823150ull, 368551018048978ull}}, {{16936765019513279166ull, 294840814439182ull}}, {{12341428772253605373ull, 471745303102692ull}}, {{2494445388319063652ull, 377396242482154ull}}, {{5684905125397161245ull, 301916993985723ull}}, {{5406499385893547669ull, 483067190377157ull}}, {{15393245952940569105ull, 386453752301725ull}}, {{12314596762352455284ull, 309163001841380ull}}, {{1256610746054376838ull, 494660802946209ull}}, {{4694637411585411794ull, 395728642356967ull}}, {{14823756373494060404ull, 316582913885573ull}}, {{1581917309139034708ull, 506532662216918ull}}, {{8644231476795048413ull, 405226129773534ull}}, {{10604733996177949053ull, 324180903818827ull}}, {{2210179134917077193ull, 518689446110124ull}}, {{5457492122675572077ull, 414951556888099ull}}, {{8055342512882367985ull, 331961245510479ull}}, {{1820501576386057807ull, 531137992816767ull}}, {{12524447705334577215ull, 424910394253413ull}}, {{17398255793751482418ull, 339928315402730ull}}, {{9390465196292820253ull, 543885304644369ull}}, {{11201720971776166526ull, 435108243715495ull}}, {{8961376777420933221ull, 348086594972396ull}}, {{6959505214389672507ull, 556938551955834ull}}, {{9256952986253648329ull, 445550841564667ull}}, {{26864759519098016ull, 356440673251734ull}}, {{3710840622357188736ull, 285152538601387ull}}, {{9626693810513412301ull, 456244061762219ull}}, {{11390703863152640164ull, 364995249409775ull}}, {{9112563090522112131ull, 291996199527820ull}}, {{14580100944835379410ull, 467193919244512ull}}, {{4285383126384482882ull, 373755135395610ull}}, {{3428306501107586305ull, 299004108316488ull}}, {{1795941587030227766ull, 478406573306381ull}}, {{16194148528591823505ull, 382725258645104ull}}, {{16644667637615369127ull, 306180206916083ull}}, {{4495375331733128665ull, 489888331065734ull}}, {{7285649080128413255ull, 391910664852587ull}}, {{16896565708328461573ull, 313528531882069ull}}, {{15966458689099807548ull, 501645651011311ull}}, {{9083818136537935715ull, 401316520809049ull}}, {{10956403323972258895ull, 321053216647239ull}}, {{6462198874129883263ull, 513685146635583ull}}, {{12548456728787727257ull, 410948117308466ull}}, {{6349416568288271482ull, 328758493846773ull}}, {{6469717694519324048ull, 526013590154837ull}}, {{16243820599841190208ull, 420810872123869ull}}, {{16684405294614862490ull, 336648697699095ull}}, {{8248304397674228368ull, 538637916318553ull}}, {{13977341147623203341ull, 430910333054842ull}}, {{3803175288614742026ull, 344728266443874ull}}, {{13463778091267407888ull, 551565226310198ull}}, {{18149720102497746957ull, 441252181048158ull}}, {{3451729637772466596ull, 353001744838527ull}}, {{13829430154443704246ull, 282401395870821ull}}, {{14748390617626106148ull, 451842233393314ull}}, {{15488061308842795241ull, 361473786714651ull}}, {{8701100232332325870ull, 289179029371721ull}}, {{6543062742247900745ull, 462686446994754ull}}, {{8923799008540230919ull, 370149157595803ull}}, {{14517736836316005382ull, 296119326076642ull}}, {{8470983679137967319ull, 473790921722628ull}}, {{14155484572794194501ull, 379032737378102ull}}, {{3945690028751534954ull, 303226189902482ull}}, {{10002452860744366251ull, 485161903843971ull}}, {{4312613473853582677ull, 388129523075177ull}}, {{14518137223308597111ull, 310503618460141ull}}, {{15850321927809934732ull, 496805789536226ull}}, {{8990908727506037462ull, 397444631628981ull}}, {{3503378167262919646ull, 317955705303185ull}}, {{5605405067620671435ull, 508729128485096ull}}, {{794975239354626824ull, 406983302788077ull}}, {{11704026635709432429ull, 325586642230461ull}}, {{11347744987651271240ull, 520938627568738ull}}, {{16456893619604837639ull, 416750902054990ull}}, {{13165514895683870111ull, 333400721643992ull}}, {{6307428574126550885ull, 533441154630388ull}}, {{12424640488785061354ull, 426752923704310ull}}, {{9939712391028049083ull, 341402338963448ull}}, {{12214191010902968210ull, 546243742341517ull}}, {{2392655179238553922ull, 436994993873214ull}}, {{5603472958132753460ull, 349595995098571ull}}, {{1586859103528584890ull, 559353592157714ull}}, {{4958836097564778235ull, 447482873726171ull}}, {{277720063309912265ull, 357986298980937ull}}, {{11290222494873660782ull, 286389039184749ull}}, {{6996309547572126281ull, 458222462695599ull}}, {{9286396452799611348ull, 366577970156479ull}}, {{11118465976981599402ull, 293262376125183ull}}, {{14100196748428648720ull, 469219801800293ull}}, {{212110954517188006ull, 375375841440235ull}}, {{169688763613750405ull, 300300673152188ull}}, {{15028897280749641941ull, 480481077043500ull}}, {{12023117824599713552ull, 384384861634800ull}}, {{9618494259679770842ull, 307507889307840ull}}, {{15389590815487633347ull, 492012622892544ull}}, {{16001021467132017001ull, 393610098314035ull}}, {{12800817173705613601ull, 314888078651228ull}}, {{16791958663187071438ull, 503820925841965ull}}, {{13433566930549657150ull, 403056740673572ull}}, {{3368155914955905074ull, 322445392538858ull}}, {{1699700649187537795ull, 515912628062173ull}}, {{8738458148833850882ull, 412730102449738ull}}, {{14369464148550901352ull, 330184081959790ull}}, {{4544398563971890548ull, 528294531135665ull}}, {{3635518851177512438ull, 422635624908532ull}}, {{13976461525167740920ull, 338108499926825ull}}, {{3915594366558833856ull, 540973599882921ull}}, {{17889870752214708378ull, 432778879906336ull}}, {{10622547787029856379ull, 346223103925069ull}}, {{5928030015022039237ull, 553956966280111ull}}, {{1053075197275721066ull, 443165573024089ull}}, {{4531808972562487176ull, 354532458419271ull}}, {{18382842437017631034ull, 283625966735416ull}}, {{3587106196034837392ull, 453801546776667ull}}, {{13937731401053600883ull, 363041237421333ull}}, {{82138676617149737ull, 290432989937067ull}}, {{3820770697329349902ull, 464692783899307ull}}, {{14124663002089210891ull, 371754227119445ull}}, {{11299730401671368713ull, 297403381695556ull}}, {{10700871013190369294ull, 475845410712890ull}}, {{8560696810552295435ull, 380676328570312ull}}, {{17916603892667567318ull, 304541062856249ull}}, {{17598519784042376739ull, 487265700569999ull}}, {{17768164641975811714ull, 389812560455999ull}}, {{17903880528322559695ull, 311850048364799ull}}, {{17578162401090364542ull, 498960077383679ull}}, {{17751878735614201957ull, 399168061906943ull}}, {{3133456544265630596ull, 319334449525555ull}}, {{5013530470825008953ull, 510935119240888ull}}, {{11389522006143827809ull, 408748095392710ull}}, {{9111617604915062247ull, 326998476314168ull}}, {{10889239353122189273ull, 523197562102669ull}}, {{12400740297239661741ull, 418558049682135ull}}, {{9920592237791729393ull, 334846439745708ull}}, {{12183598765724856706ull, 535754303593133ull}}, {{17125576642063706011ull, 428603442874506ull}}, {{10011112498909054485ull, 342882754299605ull}}, {{16017779998254487177ull, 548612406879368ull}}, {{1746177554377858772ull, 438889925503495ull}}, {{1396942043502287017ull, 351111940402796ull}}, {{13303153713829390198ull, 561779104644473ull}}, {{18021220600547332804ull, 449423283715578ull}}, {{3348930036212135274ull, 359538626972463ull}}, {{10057841658453528865ull, 287630901577970ull}}, {{16092546653525646185ull, 460209442524752ull}}, {{5495339693336696301ull, 368167554019802ull}}, {{15464318198895088011ull, 294534043215841ull}}, {{17364211488748320171ull, 471254469145346ull}}, {{10202020376256745813ull, 377003575316277ull}}, {{782918671521576004ull, 301602860253022ull}}, {{4942018689176431930ull, 482564576404835ull}}, {{3953614951341145544ull, 386051661123868ull}}, {{10541589590556737082ull, 308841328899094ull}}, {{5798496900665048361ull, 494146126238551ull}}, {{949448705790128366ull, 395316900990841ull}}, {{15516954223599743985ull, 316253520792672ull}}, {{10069731498791949084ull, 506005633268276ull}}, {{4366436384291648944ull, 404804506614621ull}}, {{18250544366400960448ull, 323843605291696ull}}, {{3375429283048164454ull, 518149768466715ull}}, {{2700343426438531563ull, 414519814773372ull}}, {{13228321185376556220ull, 331615851818697ull}}, {{6407918637634848660ull, 530585362909916ull}}, {{1436986095365968605ull, 424468290327933ull}}, {{8528286505776595530ull, 339574632262346ull}}, {{6266560779758732202ull, 543319411619754ull}}, {{8702597438548896085ull, 434655529295803ull}}, {{14340775580322937514ull, 347724423436642ull}}, {{8187845669549058730ull, 556359077498628ull}}, {{13928974165123067630ull, 445087261998902ull}}, {{3764481702614633458ull, 356069809599122ull}}, {{14079631806317437736ull, 284855847679297ull}}, {{7770015631140259084ull, 455769356286876ull}}, {{2526663690170296944ull, 364615485029501ull}}, {{16778726211103878848ull, 291692388023600ull}}, {{8399217864056654541ull, 466707820837761ull}}, {{3030025476503413310ull, 373366256670209ull}}, {{6113369195944640971ull, 298693005336167ull}}, {{13470739528253335877ull, 477908808537867ull}}, {{3397893993118848055ull, 382327046830294ull}}, {{6407664009236988767ull, 305861637464235ull}}, {{10252262414779182028ull, 489378619942776ull}}, {{4512461117081435299ull, 391502895954221ull}}, {{18367364152632789532ull, 313202316763376ull}}, {{3562340941019090989ull, 501123706821403ull}}, {{10228570382299093437ull, 400898965457122ull}}, {{804158676355454103ull, 320719172365698ull}}, {{16044049141136367858ull, 513150675785116ull}}, {{9145890498167183963ull, 410520540628093ull}}, {{14695410028017567817ull, 328416432502474ull}}, {{12444609600602377538ull, 525466292003959ull}}, {{13645036495223812353ull, 420373033603167ull}}, {{3537331566695229236ull, 336298426882534ull}}, {{13038428136196187425ull, 538077483012054ull}}, {{14120091323698860263ull, 430461986409643ull}}, {{228026614733357241ull, 344369589127715ull}}, {{364842583573371585ull, 550991342604344ull}}, {{3981222881600607591ull, 440793074083475ull}}, {{3184978305280486073ull, 352634459266780ull}}, {{2547982644224388858ull, 282107567413424ull}}, {{11455469860242842820ull, 451372107861478ull}}, {{16543073517678094902ull, 361097686289182ull}}, {{5855761184658655275ull, 288878149031346ull}}, {{1990520265970027794ull, 462205038450154ull}}, {{5281765027517932559ull, 369764030760123ull}}, {{11604109651498166693ull, 295811224608098ull}}, {{14877226627655156386ull, 473297959372957ull}}, {{4523083672640304462ull, 378638367498366ull}}, {{18375862197079884863ull, 302910693998692ull}}, {{14643984256360174488ull, 484657110397908ull}}, {{647140960862408621ull, 387725688318327ull}}, {{11585759212915657866ull, 310180550654661ull}}, {{11158517111181231939ull, 496288881047458ull}}, {{16305511318428806198ull, 397031104837966ull}}, {{9355060240001134635ull, 317624883870373ull}}, {{11278747569259905093ull, 508199814192597ull}}, {{1644300425924103428ull, 406559851354078ull}}, {{8694137970223103389ull, 325247881083262ull}}, {{17599969567098875745ull, 520396609733219ull}}, {{17769324468421010919ull, 416317287786575ull}}, {{14215459574736808735ull, 333053830229260ull}}, {{4297991245869342361ull, 532886128366817ull}}, {{14506439440921204858ull, 426308902693453ull}}, {{537105108511232917ull, 341047122154763ull}}, {{15616763432585613960ull, 545675395447620ull}}, {{12493410746068491168ull, 436540316358096ull}}, {{6305379782112882611ull, 349232253086477ull}}, {{13777956466122522501ull, 558771604938363ull}}, {{18401062802381838647ull, 447017283950690ull}}, {{14720850241905470918ull, 357613827160552ull}}, {{4397982564040556088ull, 286091061728442ull}}, {{10726120917206800064ull, 457745698765507ull}}, {{1202199104281619405ull, 366196559012406ull}}, {{15719154542392936816ull, 292957247209924ull}}, {{14082600823602967937ull, 468731595535879ull}}, {{14955429473624284673ull, 374985276428703ull}}, {{896297134673696768ull, 299988221142963ull}}, {{16191470674445556122ull, 479981153828740ull}}, {{12953176539556444898ull, 383984923062992ull}}, {{2983843602161335272ull, 307187938450394ull}}, {{12152847392941957082ull, 491500701520630ull}}, {{9722277914353565665ull, 393200561216504ull}}, {{11467171146224762855ull, 314560448973203ull}}, {{14658125019217710245ull, 503296718357125ull}}, {{11726500015374168196ull, 402637374685700ull}}, {{9381200012299334557ull, 322109899748560ull}}, {{15009920019678935291ull, 515375839597696ull}}, {{8318587201001237910ull, 412300671678157ull}}, {{17722916205026721297ull, 329840537342525ull}}, {{9909921854333202460ull, 527744859748041ull}}, {{4238588668724651645ull, 422195887798433ull}}, {{10769568564463541962ull, 337756710238746ull}}, {{9852612073657846493ull, 540410736381994ull}}, {{11571438473668187518ull, 432328589105595ull}}, {{9257150778934550014ull, 345862871284476ull}}, {{7432743616811459376ull, 553380594055162ull}}, {{17014241337674898471ull, 442704475244129ull}}, {{17300741884881829100ull, 354163580195303ull}}, {{2772547063679732310ull, 283330864156243ull}}, {{746726487145661373ull, 453329382649989ull}}, {{4286730004458439422ull, 362663506119991ull}}, {{18186779262534392830ull, 290130804895992ull}}, {{14341451561087387235ull, 464209287833588ull}}, {{405114804644178819ull, 371367430266871ull}}, {{15081487102682984348ull, 297093944213496ull}}, {{16751681734808954310ull, 475350310741594ull}}, {{17090694202589073771ull, 380280248593275ull}}, {{13672555362071259017ull, 304224198874620ull}}, {{3429344505604462811ull, 486758718199393ull}}, {{10122173233967390895ull, 389406974559514ull}}, {{11787087401915823039ull, 311525579647611ull}}, {{11480642213581496217ull, 498440927436178ull}}, {{16563211400349017620ull, 398752741948942ull}}, {{5871871490795393449ull, 319002193559154ull}}, {{16773692014756450166ull, 510403509694646ull}}, {{9729604797063249809ull, 408322807755717ull}}, {{404986208166779201ull, 326658246204574ull}}, {{8026675562550667368ull, 522653193927318ull}}, {{13800038079524354541ull, 418122555141854ull}}, {{14729379278361393956ull, 334498044113483ull}}, {{1430913956926768390ull, 535196870581574ull}}, {{4834079980283325035ull, 428157496465259ull}}, {{7556612798968570351ull, 342525997172207ull}}, {{15779929293091622885ull, 548041595475531ull}}, {{8934594619731387985ull, 438433276380425ull}}, {{7147675695785110388ull, 350746621104340ull}}, {{11436281113256176621ull, 561194593766944ull}}, {{12838373705346851620ull, 448955675013555ull}}, {{10270698964277481296ull, 359164540010844ull}}, {{11905907986163895360ull, 287331632008675ull}}, {{602708704152680960ull, 459730611213881ull}}, {{15239562222289786061ull, 367784488971104ull}}, {{15880998592573739172ull, 294227591176883ull}}, {{3273504859666520736ull, 470764145883014ull}}, {{6308152702475126912ull, 376611316706411ull}}, {{1357173347238191206ull, 301289053365129ull}}, {{9550174985064926576ull, 482062485384206ull}}, {{3950791173310030938ull, 385649988307365ull}}, {{3160632938648024750ull, 308519990645892ull}}, {{8746361516578749924ull, 493631985033427ull}}, {{18065135657488730908ull, 394905588026741ull}}, {{10762759711249074403ull, 315924470421393ull}}, {{13531066723256608723ull, 505479152674229ull}}, {{14514202193347197301ull, 404383322139383ull}}, {{543315310452026871ull, 323506657711507ull}}, {{4558653311465153318ull, 517610652338411ull}}, {{18404317908139763947ull, 414088521870728ull}}, {{3655407882286080188ull, 331270817496583ull}}, {{2159303796915817977ull, 530033307994533ull}}, {{9106140667016475028ull, 424026646395626ull}}, {{3595563718871269699ull, 339221317116501ull}}, {{16820948394419762489ull, 542754107386401ull}}, {{9767409900793899668ull, 434203285909121ull}}, {{4124579105893209411ull, 347362628727297ull}}, {{10288675384171045381ull, 555780205963675ull}}, {{8230940307336836305ull, 444624164770940ull}}, {{6584752245869469044ull, 355699331816752ull}}, {{16335848240921306204ull, 284559465453401ull}}, {{311915482280717665ull, 455295144725443ull}}, {{7628230015308394778ull, 364236115780354ull}}, {{9791932826988626146ull, 291388892624283ull}}, {{11977743708439891510ull, 466222228198853ull}}, {{16960892596235733854ull, 372977782559082ull}}, {{6190016447504766437ull, 298382226047266ull}}, {{2525328686523805653ull, 477411561675626ull}}, {{16777658208186685815ull, 381929249340500ull}}, {{13422126566549348652ull, 305543399472400ull}}, {{3028658432769406228ull, 488869439155841ull}}, {{17180322005183166275ull, 391095551324672ull}}, {{6365559974662712373ull, 312876441059738ull}}, {{6495547144718429474ull, 500602305695581ull}}, {{1507088901032833256ull, 400481844556465ull}}, {{1205671120826266605ull, 320385475645172ull}}, {{5618422608063936891ull, 512616761032275ull}}, {{4494738086451149513ull, 410093408825820ull}}, {{3595790469160919610ull, 328074727060656ull}}, {{16821311194883202346ull, 524919563297049ull}}, {{17146397770648472200ull, 419935650637639ull}}, {{17406467031260688083ull, 335948520510111ull}}, {{2024905546823728671ull, 537517632816179ull}}, {{5309273252200893260ull, 430014106252943ull}}, {{11626116231244535254ull, 344011285002354ull}}, {{7533739525765525438ull, 550418056003767ull}}, {{17095038064838151320ull, 440334444803013ull}}, {{2607984007644790086ull, 352267555842411ull}}, {{16843782465083473361ull, 281814044673928ull}}, {{4813959055682095439ull, 450902471478286ull}}, {{161818429803766028ull, 360721977182629ull}}, {{3818803558584923146ull, 288577581746103ull}}, {{2420736878993966710ull, 461724130793765ull}}, {{1936589503195173368ull, 369379304635012ull}}, {{12617318046781869664ull, 295503443708009ull}}, {{9119662430625260493ull, 472805509932815ull}}, {{7295729944500208394ull, 378244407946252ull}}, {{16904630399825897685ull, 302595526357001ull}}, {{1221966936528064034ull, 484152842171203ull}}, {{8356271178706271873ull, 387322273736962ull}}, {{17753063387190748468ull, 309857818989569ull}}, {{17336854975279466580ull, 495772510383311ull}}, {{10180135165481662941ull, 396618008306649ull}}, {{11833456947127240676ull, 317294406645319ull}}, {{7865484671177854112ull, 507671050632511ull}}, {{2603038922200372966ull, 406136840506009ull}}, {{5771779952502208696ull, 324909472404807ull}}, {{12924196738745444237ull, 519855155847691ull}}, {{6650008576254445066ull, 415884124678153ull}}, {{12698704490487376699ull, 332707299742522ull}}, {{5560531925812161426ull, 532331679588036ull}}, {{759076725907818818ull, 425865343670429ull}}, {{4296610195468165377ull, 340692274936343ull}}, {{3185227498007154281ull, 545107639898149ull}}, {{6237530813147633748ull, 436086111918519ull}}, {{8679373465260017321ull, 348868889534815ull}}, {{13886997544416027714ull, 558190223255704ull}}, {{14798946850274732495ull, 446552178604563ull}}, {{771111035994055026ull, 357241742883651ull}}, {{15374284087762885313ull, 285793394306920ull}}, {{6152110466711064886ull, 457269430891073ull}}, {{12300386002852672555ull, 365815544712858ull}}, {{17219006431765958690ull, 292652435770286ull}}, {{1724968587632161642ull, 468243897232459ull}}, {{5069323684847639637ull, 374595117785967ull}}, {{15123505392103842679ull, 299676094228773ull}}, {{2061515738914686348ull, 479481750766038ull}}, {{9027910220615569724ull, 383585400612830ull}}, {{7222328176492455779ull, 306868320490264ull}}, {{487678638162198278ull, 490989312784423ull}}, {{7768840540013579269ull, 392791450227538ull}}, {{13593770061494684061ull, 314233160182030ull}}, {{3303288024681942882ull, 502773056291249ull}}, {{6331979234487464629ull, 402218445032999ull}}, {{8754932202331882026ull, 321774756026399ull}}, {{2939845079505280272ull, 514839609642239ull}}, {{6041224878346134541ull, 411871687713791ull}}, {{1143631087934997310ull, 329497350171033ull}}, {{16587204999663636988ull, 527195760273652ull}}, {{5891066370247088944ull, 421756608218922ull}}, {{15780899540423402125ull, 337405286575137ull}}, {{10492044005709802107ull, 539848458520220ull}}, {{8393635204567841686ull, 431878766816176ull}}, {{3025559348912363025ull, 345503013452941ull}}, {{15908941402485511810ull, 552804821524705ull}}, {{12727153121988409448ull, 442243857219764ull}}, {{13871071312332637882ull, 353795085775811ull}}, {{7407508235124199982ull, 283036068620649ull}}, {{783966731972989002ull, 452857709793039ull}}, {{4316522200320301525ull, 362286167834431ull}}, {{18210613019223882512ull, 289828934267544ull}}, {{18068934386532481051ull, 463726294828071ull}}, {{10765798694484074517ull, 370981035862457ull}}, {{1233941326103438967ull, 296784828689966ull}}, {{13042352565991233317ull, 474855725903945ull}}, {{10433882052792986654ull, 379884580723156ull}}, {{4657756827492479000ull, 303907664578525ull}}, {{7452410923987966400ull, 486252263325640ull}}, {{5961928739190373120ull, 389001810660512ull}}, {{15837589435578029465ull, 311201448528409ull}}, {{14272096652699116175ull, 497922317645455ull}}, {{11417677322159292940ull, 398337854116364ull}}, {{12823490672469344675ull, 318670283293091ull}}, {{13138887446467130834ull, 509872453268946ull}}, {{6821761142431794344ull, 407897962615157ull}}, {{16525455358171166445ull, 326318370092125ull}}, {{7993984499364314696ull, 522109392147401ull}}, {{2705838784749541434ull, 417687513717921ull}}, {{16922066286767274440ull, 334150010974336ull}}, {{1249864355634266841ull, 534640017558939ull}}, {{4689240299249323796ull, 427712014047151ull}}, {{62043424657548713ull, 342169611237721ull}}, {{11167315923677808911ull, 547471377980353ull}}, {{16312550368426067775ull, 437977102384282ull}}, {{5671342665257033574ull, 350381681907426ull}}, {{1695450634927433072ull, 560610691051882ull}}, {{12424406952167677427ull, 448488552841505ull}}, {{9939525561734141942ull, 358790842273204ull}}, {{11640969264129223876ull, 287032673818563ull}}, {{14936202007864847879ull, 459252278109701ull}}, {{8259612791549967980ull, 367401822487761ull}}, {{2918341418498064061ull, 293921457990209ull}}, {{12048043899080723144ull, 470274332784334ull}}, {{13327783934006488838ull, 376219466227467ull}}, {{3283529517721370424ull, 300975572981974ull}}, {{12632344857838013325ull, 481560916771158ull}}, {{17484573515754231307ull, 385248733416926ull}}, {{10298309997861474722ull, 308198986733541ull}}, {{9098598367094538909ull, 493118378773666ull}}, {{3589529878933720804ull, 394494703018933ull}}, {{10250321532630797289ull, 315595762415146ull}}, {{9021816822725455017ull, 504953219864234ull}}, {{10906802272922274337ull, 403962575891387ull}}, {{1346744188853998823ull, 323170060713110ull}}, {{2154790702166398117ull, 517072097140976ull}}, {{16481227820700759786ull, 413657677712780ull}}, {{13184982256560607829ull, 330926142170224ull}}, {{10027925166271241557ull, 529481827472359ull}}, {{11711688947758903569ull, 423585461977887ull}}, {{1990653528723302208ull, 338868369582310ull}}, {{3185045645957283534ull, 542189391331696ull}}, {{17305431775733468120ull, 433751513065356ull}}, {{10154996605844864172ull, 347001210452285ull}}, {{16247994569351782676ull, 555201936723656ull}}, {{9309046840739515818ull, 444161549378925ull}}, {{7447237472591612654ull, 355329239503140ull}}, {{5957789978073290123ull, 284263391602512ull}}, {{13221812779659174521ull, 454821426564019ull}}, {{14266799038469249940ull, 363857141251215ull}}, {{11413439230775399952ull, 291085713000972ull}}, {{3504107510272998630ull, 465737140801556ull}}, {{17560681267186040197ull, 372589712641244ull}}, {{17737893828490742480ull, 298071770112995ull}}, {{9933886051875636353ull, 476914832180793ull}}, {{15325806470984329729ull, 381531865744634ull}}, {{15949993991529374106ull, 305225492595707ull}}, {{10762595127479357277ull, 488360788153132ull}}, {{1231378472499665175ull, 390688630522506ull}}, {{15742498036967373433ull, 312550904418004ull}}, {{14119950414922066523ull, 500081447068807ull}}, {{3917262702453832572ull, 400065157655046ull}}, {{17891205420930707350ull, 320052126124036ull}}, {{2800486970295759499ull, 512083401798459ull}}, {{5929738390978517922ull, 409666721438767ull}}, {{15811837157008545307ull, 327733377151013ull}}, {{3162846562762210552ull, 524373403441622ull}}, {{13598323694435499411ull, 419498722753297ull}}, {{3499961326064578883ull, 335598978202638ull}}, {{1910589306961415889ull, 536958365124221ull}}, {{16285866704536774004ull, 429566692099376ull}}, {{9339344548887508880ull, 343653353679501ull}}, {{7564253648736193562ull, 549845365887202ull}}, {{17119449363214685819ull, 439876292709761ull}}, {{10006210675829838332ull, 351901034167809ull}}, {{11694317355405780989ull, 281520827334247ull}}, {{3953512509681608289ull, 450433323734796ull}}, {{17920205266712927924ull, 360346658987836ull}}, {{10646815398628432016ull, 288277327190269ull}}, {{5966858193579760256ull, 461243723504431ull}}, {{1084137740121897882ull, 368994978803545ull}}, {{867310192097518305ull, 295195983042836ull}}, {{12455742751581760258ull, 472313572868537ull}}, {{2585896571781587560ull, 377850858294830ull}}, {{2068717257425270048ull, 302280686635864ull}}, {{10688645241364252724ull, 483649098617382ull}}, {{1172218563607581532ull, 386919278893906ull}}, {{15695170109853706519ull, 309535423115124ull}}, {{14044225731540199461ull, 495256676984199ull}}, {{14924729399974069892ull, 396205341587359ull}}, {{15629132334721166236ull, 316964273269887ull}}, {{10249216476586224686ull, 507142837231820ull}}, {{8199373181268979748ull, 405714269785456ull}}, {{2870149730273273475ull, 324571415828365ull}}, {{4592239568437237561ull, 519314265325384ull}}, {{7363140469491700372ull, 415451412260307ull}}, {{16958558819819091267ull, 332361129808245ull}}, {{8686950038000994412ull, 531777807693193ull}}, {{14328257659884616176ull, 425422246154554ull}}, {{15151954942649603264ull, 340337796923643ull}}, {{2107035019787903283ull, 544540475077830ull}}, {{1685628015830322626ull, 435632380062264ull}}, {{5037851227406168424ull, 348505904049811ull}}, {{681864334366048832ull, 557609446479698ull}}, {{7924189096976659712ull, 446087557183758ull}}, {{13718048907065148416ull, 356870045747006ull}}, {{7285090310910208409ull, 285496036597605ull}}, {{11656144497456333455ull, 456793658556168ull}}, {{16703613227448887411ull, 365434926844934ull}}, {{17052239396701020252ull, 292347941475947ull}}, {{12526187775753991110ull, 467756706361516ull}}, {{6331601405861282565ull, 374205365089213ull}}, {{12443978754172846698ull, 299364292071370ull}}, {{1463621932967003101ull, 478982867314193ull}}, {{8549595175857423127ull, 383186293851354ull}}, {{10529024955427848825ull, 306549035081083ull}}, {{13157091113942647797ull, 490478456129733ull}}, {{17904370520637938884ull, 392382764903786ull}}, {{10634147601768440784ull, 313906211923029ull}}, {{5946589718603774285ull, 502249939076847ull}}, {{15825318219108750397ull, 401799951261477ull}}, {{5281556945803179671ull, 321439961009182ull}}, {{12139839928026997798ull, 514303937614691ull}}, {{6022523127679687915ull, 411443150091753ull}}, {{12196716131627570978ull, 329154520073402ull}}, {{4757350551636472273ull, 526647232117444ull}}, {{7495229256051088141ull, 421317785693955ull}}, {{5996183404840870513ull, 337054228555164ull}}, {{16972591077229213467ull, 539286765688262ull}}, {{6199375232299550127ull, 431429412550610ull}}, {{4959500185839640102ull, 345143530040488ull}}, {{4245851482601513840ull, 552229648064781ull}}, {{18154076445048852365ull, 441783718451824ull}}, {{18212609970780992215ull, 353426974761459ull}}, {{18259436791366704095ull, 282741579809167ull}}, {{14457703607219085259ull, 452386527694668ull}}, {{498116441549537238ull, 361909222155735ull}}, {{398493153239629790ull, 289527377724588ull}}, {{15394984304151048957ull, 463243804359340ull}}, {{12315987443320839166ull, 370595043487472ull}}, {{2474092325172850686ull, 296476034789978ull}}, {{269198905534650775ull, 474361655663965ull}}, {{215359124427720620ull, 379489324531172ull}}, {{11240333743767907465ull, 303591459624937ull}}, {{3227138731061010652ull, 485746335399900ull}}, {{2581710984848808522ull, 388597068319920ull}}, {{2065368787879046817ull, 310877654655936ull}}, {{14372636504832205877ull, 497404247449497ull}}, {{4119411574381944055ull, 397923397959598ull}}, {{10674226888989375891ull, 318338718367678ull}}, {{13389414207641091102ull, 509341949388285ull}}, {{10711531366112872882ull, 407473559510628ull}}, {{15947922722374118952ull, 325978847608502ull}}, {{10759281096830949030ull, 521566156173604ull}}, {{12296773692206669547ull, 417252924938883ull}}, {{17216116583249156284ull, 333802339951106ull}}, {{1720344830005277792ull, 534083743921771ull}}, {{16133671122971863527ull, 427266995137416ull}}, {{9217588083635580498ull, 341813596109933ull}}, {{11058792119075018474ull, 546901753775893ull}}, {{16225731324743835425ull, 437521403020714ull}}, {{16669933874536978663ull, 350017122416571ull}}, {{846452496065793599ull, 560027395866515ull}}, {{677161996852634879ull, 448021916693212ull}}, {{11609776041707838873ull, 358417533354569ull}}, {{12977169648108181421ull, 286734026683655ull}}, {{2316727363263538659ull, 458774442693849ull}}, {{5542730705352741250ull, 367019554155079ull}}, {{8123533379024103323ull, 293615643324063ull}}, {{9308304591696654994ull, 469785029318501ull}}, {{3757294858615413672ull, 375828023454801ull}}, {{17763231145859972230ull, 300662418763840ull}}, {{9974425759666403953ull, 481059870022145ull}}, {{7979540607733123162ull, 384847896017716ull}}, {{2694283671444588206ull, 307878316814173ull}}, {{621505059569430807ull, 492605306902677ull}}, {{11565250491881275615ull, 394084245522141ull}}, {{5562851578763110169ull, 315267396417713ull}}, {{5211213711279065947ull, 504427834268341ull}}, {{479622154281342435ull, 403542267414673ull}}, {{7762395352908894594ull, 322833813931738ull}}, {{8730483749912321028ull, 516534102290781ull}}, {{3295038185187946499ull, 413227281832625ull}}, {{2636030548150357199ull, 330581825466100ull}}, {{4217648877040571519ull, 528930920745760ull}}, {{3374119101632457215ull, 423144736596608ull}}, {{10077992910789786418ull, 338515789277286ull}}, {{8746091027779837623ull, 541625262843658ull}}, {{14375570451707690745ull, 433300210274926ull}}, {{7811107546624242272ull, 346640168219941ull}}, {{5119074445114966990ull, 554624269151906ull}}, {{405910741350063268ull, 443699415321525ull}}, {{324728593080050615ull, 354959532257220ull}}, {{259782874464040492ull, 283967625805776ull}}, {{11483699043368195756ull, 454348201289241ull}}, {{5497610419952646282ull, 363478561031393ull}}, {{11776785965445937672ull, 290782848825114ull}}, {{7774811100487769306ull, 465252558120183ull}}, {{13598546509874036091ull, 372202046496146ull}}, {{7189488393157318549ull, 297761637196917ull}}, {{15192530243793620002ull, 476418619515067ull}}, {{4775326565551075355ull, 381134895612054ull}}, {{7509610067182770607ull, 304907916489643ull}}, {{8326027292750522649ull, 487852666383429ull}}, {{10350170648942328442ull, 390282133106743ull}}, {{15658834148637683400ull, 312225706485394ull}}, {{13986088193594562471ull, 499561130376631ull}}, {{7499521740133739653ull, 399648904301305ull}}, {{5999617392106991723ull, 319719123441044ull}}, {{16978085456855007403ull, 511550597505670ull}}, {{13582468365484005922ull, 409240478004536ull}}, {{7176625877645294415ull, 327392382403629ull}}, {{414554960006740094ull, 523827811845807ull}}, {{11399690412231123045ull, 419062249476645ull}}, {{9119752329784898436ull, 335249799581316ull}}, {{7212906098172016851ull, 536399679330106ull}}, {{2080976063795703157ull, 429119743464085ull}}, {{1664780851036562526ull, 343295794771268ull}}, {{17421044620626141334ull, 549273271634028ull}}, {{2868789252275182098ull, 439418617307223ull}}, {{9673729031303966325ull, 351534893845778ull}}, {{11788617635344435796ull, 562455830153245ull}}, {{9430894108275548637ull, 449964664122596ull}}, {{3855366471878528586ull, 359971731298077ull}}, {{14152339621728553839ull, 287977385038461ull}}, {{15265045765281865496ull, 460763816061538ull}}, {{1143990167999761427ull, 368611052849231ull}}, {{15672587393367450434ull, 294888842279384ull}}, {{14008093385162189725ull, 471822147647015ull}}, {{11206474708129751780ull, 377457718117612ull}}, {{1586482137019980778ull, 301966174494090ull}}, {{2538371419231969244ull, 483145879190544ull}}, {{5720045950127485719ull, 386516703352435ull}}, {{4576036760101988575ull, 309213362681948ull}}, {{3632310001421271397ull, 494741380291117ull}}, {{13973894445362748087ull, 395793104232893ull}}, {{111069112064467500ull, 316634483386315ull}}, {{177710579303148000ull, 506615173418104ull}}, {{3831517278184428723ull, 405292138734483ull}}, {{10443911452031363625ull, 324233710987586ull}}, {{9331560693766361154ull, 518773937580138ull}}, {{14843946184496909569ull, 415019150064110ull}}, {{11875156947597527655ull, 332015320051288ull}}, {{15310902301414133926ull, 531224512082061ull}}, {{8559373026389396817ull, 424979609665649ull}}, {{10536847235853427777ull, 339983687732519ull}}, {{5790909133139753474ull, 543973900372031ull}}, {{943378491769892456ull, 435179120297625ull}}, {{754702793415913964ull, 348143296238100ull}}, {{1207524469465462343ull, 557029273980960ull}}, {{966019575572369875ull, 445623419184768ull}}, {{8151513289941716546ull, 356498735347814ull}}, {{10210559446695283560ull, 285198988278251ull}}, {{8958197485228633050ull, 456318381245202ull}}, {{18234604432408637409ull, 365054704996161ull}}, {{10898334731184999604ull, 292043763996929ull}}, {{6369289125670268397ull, 467270022395087ull}}, {{16163477744761945687ull, 373816017916069ull}}, {{16620131010551466873ull, 299052814332855ull}}, {{8145465543172795381ull, 478484502932569ull}}, {{10205721249280146628ull, 382787602346055ull}}, {{8164576999424117302ull, 306230081876844ull}}, {{1995276754852856714ull, 489968131002951ull}}, {{16353616662849926664ull, 391974504802360ull}}, {{13082893330279941331ull, 313579603841888ull}}, {{17243280513705995807ull, 501727366147021ull}}, {{10105275596222886322ull, 401381892917617ull}}, {{705522847494488411ull, 321105514334094ull}}, {{8507534185475002105ull, 513768822934550ull}}, {{6806027348380001684ull, 411015058347640ull}}, {{5444821878704001347ull, 328812046678112ull}}, {{12401063820668312478ull, 526099274684979ull}}, {{13610199871276560306ull, 420879419747983ull}}, {{18266857526505068891ull, 336703535798386ull}}, {{3401530339214737964ull, 538725657277419ull}}, {{6410573086113700694ull, 430980525821935ull}}, {{5128458468890960555ull, 344784420657548ull}}, {{4516184735483626565ull, 551655073052077ull}}, {{14680994232612632222ull, 441324058441661ull}}, {{8055446571348195454ull, 353059246753329ull}}, {{10133706071820466686ull, 282447397402663ull}}, {{12524580900170836375ull, 451915835844261ull}}, {{6330315905394758777ull, 361532668675409ull}}, {{8753601539057717345ull, 289226134940327ull}}, {{17695111277234258075ull, 462761815904523ull}}, {{3088042577561675490ull, 370209452723619ull}}, {{6159782876791250715ull, 296167562178895ull}}, {{9855652602866001145ull, 473868099486232ull}}, {{505824452808980269ull, 379094479588986ull}}, {{15162054821214825508ull, 303275583671188ull}}, {{2123194825492258874ull, 485240933873902ull}}, {{12766602304619538069ull, 388192747099121ull}}, {{6523933028953720132ull, 310554197679297ull}}, {{14127641661067862534ull, 496886716286875ull}}, {{11302113328854290027ull, 397509373029500ull}}, {{9041690663083432022ull, 318007498423600ull}}, {{14466705060933491235ull, 508811997477760ull}}, {{11573364048746792988ull, 407049597982208ull}}, {{16637388868481255037ull, 325639678385766ull}}, {{794380486376635797ull, 521023485417227ull}}, {{11703550833327039607ull, 416818788333781ull}}, {{5673491851919721362ull, 333455030667025ull}}, {{9077586963071554180ull, 533528049067240ull}}, {{7262069570457243344ull, 426822439253792ull}}, {{16877702100591525644ull, 341457951403033ull}}, {{4868230472494979092ull, 546332722244854ull}}, {{7583933192737893597ull, 437066177795883ull}}, {{13445844183674135524ull, 349652942236706ull}}, {{14134653064394796192ull, 559444707578730ull}}, {{11307722451515836953ull, 447555766062984ull}}, {{12735526775954579886ull, 358044612850387ull}}, {{2809723791279843262ull, 286435690280310ull}}, {{4495558066047749220ull, 458297104448496ull}}, {{18353841711805840668ull, 366637683558796ull}}, {{10993724554702762211ull, 293310146847037ull}}, {{2832564028556778246ull, 469296234955260ull}}, {{2266051222845422597ull, 375436987964208ull}}, {{9191538607760158724ull, 300349590371366ull}}, {{7327764142932433312ull, 480559344594186ull}}, {{2172862499604036326ull, 384447475675349ull}}, {{5427638814425139384ull, 307557980540279ull}}, {{16062919732564043661ull, 492092768864446ull}}, {{9160986971309324605ull, 393674215091557ull}}, {{18396836021273190654ull, 314939372073245ull}}, {{10988193560327553430ull, 503902995317193ull}}, {{16169252477745863391ull, 403122396253754ull}}, {{16624750796938601036ull, 322497917003003ull}}, {{4463508386650299718ull, 515996667204806ull}}, {{18328201968287881067ull, 412797333763844ull}}, {{18351910389372215177ull, 330237867011075ull}}, {{10916312549285992667ull, 528380587217721ull}}, {{5043701224686883811ull, 422704469774177ull}}, {{15103007423975238018ull, 338163575819341ull}}, {{16786114248876560183ull, 541061721310946ull}}, {{9739542584359337823ull, 432849377048757ull}}, {{412936438003649612ull, 346279501639006ull}}, {{11728744745031570349ull, 554047202622409ull}}, {{13072344610767166602ull, 443237762097927ull}}, {{3079178059129912635ull, 354590209678342ull}}, {{13531388891529661078ull, 283672167742673ull}}, {{17960873411705547401ull, 453875468388277ull}}, {{6990001099880617274ull, 363100374710622ull}}, {{16660047324130224789ull, 290480299768497ull}}, {{11898680459640718370ull, 464768479629596ull}}, {{5829595552970664373ull, 371814783703677ull}}, {{15731722886602262468ull, 297451826962941ull}}, {{17792058989079799302ull, 475922923140706ull}}, {{10544298376521929118ull, 380738338512565ull}}, {{8435438701217543295ull, 304590670810052ull}}, {{17186050736689979595ull, 487345073296083ull}}, {{2680794145126252706ull, 389876058636867ull}}, {{13212681760326733135ull, 311900846909493ull}}, {{17450942001780862692ull, 499041355055189ull}}, {{17650102416166600477ull, 399233084044151ull}}, {{10430733118191370058ull, 319386467235321ull}}, {{9310475359622371447ull, 511018347576514ull}}, {{11137729102439807481ull, 408814678061211ull}}, {{5220834467209935661ull, 327051742448969ull}}, {{15732032777019717705ull, 523282787918350ull}}, {{12585626221615774164ull, 418626230334680ull}}, {{10068500977292619331ull, 334900984267744ull}}, {{5041555119442459960ull, 535841574828391ull}}, {{343895280812057645ull, 428673259862713ull}}, {{7653813854133466762ull, 342938607890170ull}}, {{12246102166613546820ull, 548701772624272ull}}, {{2418184103807016809ull, 438961418099418ull}}, {{9313244912529434094ull, 351169134479534ull}}, {{3833145415821363581ull, 561870615167255ull}}, {{3066516332657090864ull, 449496492133804ull}}, {{6142561880867583015ull, 359597193707043ull}}, {{12292747134177887058ull, 287677754965634ull}}, {{8600348970458888324ull, 460284407945015ull}}, {{6880279176367110659ull, 368227526356012ull}}, {{16572269785319419497ull, 294582021084809ull}}, {{15447585212285340225ull, 471331233735695ull}}, {{12358068169828272180ull, 377064986988556ull}}, {{6197105721120707421ull, 301651989590845ull}}, {{9915369153793131873ull, 482643183345352ull}}, {{553597693550684852ull, 386114546676282ull}}, {{11510924599066278851ull, 308891637341025ull}}, {{18417479358506046162ull, 494226619745640ull}}, {{14733983486804836930ull, 395381295796512ull}}, {{4408489159960048897ull, 316305036637210ull}}, {{7053582655936078236ull, 506088058619536ull}}, {{1953517310006952266ull, 404870446895629ull}}, {{5252162662747472136ull, 323896357516503ull}}, {{4714111445654045094ull, 518234172026405ull}}, {{3771289156523236075ull, 414587337621124ull}}, {{6706380139960499183ull, 331669870096899ull}}, {{18108905853420619340ull, 530671792155038ull}}, {{3419078238510764502ull, 424537433724031ull}}, {{17492657849776252894ull, 339629946979224ull}}, {{16920206115416273662ull, 543407915166759ull}}, {{17225513707074929252ull, 434726332133407ull}}, {{6401713336176122755ull, 347781065706726ull}}, {{2864043708397975763ull, 556449705130762ull}}, {{13359281410944111580ull, 445159764104609ull}}, {{14376773943497199587ull, 356127811283687ull}}, {{4122721525313939023ull, 284902249026950ull}}, {{6596354440502302437ull, 455843598443120ull}}, {{5277083552401841949ull, 364674878754496ull}}, {{532318027179563236ull, 291739903003597ull}}, {{4541057658229211502ull, 466783844805755ull}}, {{3632846126583369201ull, 373427075844604ull}}, {{6595625716008605684ull, 298741660675683ull}}, {{6863652330871858772ull, 477986657081093ull}}, {{12869619494181307664ull, 382389325664874ull}}, {{13985044410086956454ull, 305911460531899ull}}, {{11308024611913399357ull, 489458336851039ull}}, {{12735768504272629809ull, 391566669480831ull}}, {{6499265988676193524ull, 313253335584665ull}}, {{10398825581881909638ull, 501205336935464ull}}, {{12008409280247438034ull, 400964269548371ull}}, {{5917378609456040104ull, 320771415638697ull}}, {{13157154589871574489ull, 513234265021915ull}}, {{10525723671897259591ull, 410587412017532ull}}, {{1041881308033987027ull, 328469929614026ull}}, {{12735056537080110212ull, 525551887382441ull}}, {{6498696414922177847ull, 420441509905953ull}}, {{12577654761421562924ull, 336353207924762ull}}, {{5366852359306859385ull, 538165132679620ull}}, {{4293481887445487508ull, 430532106143696ull}}, {{18192180768924031299ull, 344425684914956ull}}, {{3282047527085077817ull, 551081095863931ull}}, {{17383033280635703546ull, 440864876691144ull}}, {{17595775439250473160ull, 352691901352915ull}}, {{14076620351400378528ull, 282153521082332ull}}, {{7765197303272964352ull, 451445633731732ull}}, {{17280204286844102451ull, 361156506985385ull}}, {{13824163429475281961ull, 288925205588308ull}}, {{18429312672418540814ull, 462280328941293ull}}, {{3675403693709101682ull, 369824263153035ull}}, {{2940322954967281345ull, 295859410522428ull}}, {{1015167913205739830ull, 473375056835885ull}}, {{812134330564591864ull, 378700045468708ull}}, {{8028405093935494137ull, 302960036374966ull}}, {{5466750520812969973ull, 484736058199946ull}}, {{684051601908465655ull, 387788846559957ull}}, {{11615287725752503494ull, 310231077247965ull}}, {{137716287494453974ull, 496369723596745ull}}, {{110173029995563179ull, 397095778877396ull}}, {{14845533682964091836ull, 317676623101916ull}}, {{16374156263258726292ull, 508282596963066ull}}, {{9409976195865070710ull, 406626077570453ull}}, {{14906678586175877214ull, 325300862056362ull}}, {{9093290478913762251ull, 520481379290180ull}}, {{7274632383131009800ull, 416385103432144ull}}, {{9509054721246718163ull, 333108082745715ull}}, {{15214487553994749062ull, 532972932393144ull}}, {{15860938857937709572ull, 426378345914515ull}}, {{12688751086350167658ull, 341102676731612ull}}, {{5544606479192626960ull, 545764282770580ull}}, {{4435685183354101568ull, 436611426216464ull}}, {{7237896961425191577ull, 349289140973171ull}}, {{4201937508796485878ull, 558862625557074ull}}, {{7050898821779099025ull, 447090100445659ull}}, {{9330067872165189543ull, 357672080356527ull}}, {{85356668248330988ull, 286137664285222ull}}, {{3825919483939239905ull, 457820262856355ull}}, {{3060735587151391924ull, 366256210285084ull}}, {{6137937284463023862ull, 293004968228067ull}}, {{13510048469882748503ull, 468807949164907ull}}, {{3429341146422378156ull, 375046359331926ull}}, {{17500868176105543817ull, 300037087465540ull}}, {{9554645008059318492ull, 480059339944865ull}}, {{7643716006447454793ull, 384047471955892ull}}, {{17183019249383694804ull, 307237977564713ull}}, {{5356737910562449748ull, 491580764103542ull}}, {{15353436772675690768ull, 393264611282833ull}}, {{1214702973914821645ull, 314611689026267ull}}, {{5632873573005624955ull, 503378702442027ull}}, {{15574345302630230933ull, 402702961953621ull}}, {{8770127427362274423ull, 322162369562897ull}}, {{17721552698521549401ull, 515459791300635ull}}, {{14177242158817239521ull, 412367833040508ull}}, {{273747282828060647ull, 329894266432407ull}}, {{4127344467266807358ull, 527830826291851ull}}, {{18059270832781087179ull, 422264661033480ull}}, {{14447416666224869743ull, 337811728826784ull}}, {{12047820221734060620ull, 540498766122855ull}}, {{9638256177387248496ull, 432399012898284ull}}, {{11399953756651709120ull, 345919210318627ull}}, {{3482530751675093299ull, 553470736509804ull}}, {{6475373416081984963ull, 442776589207843ull}}, {{12558996362349408616ull, 354221271366274ull}}, {{13736545904621437216ull, 283377017093019ull}}, {{10910427003168568577ull, 453403227348831ull}}, {{5038992787792944538ull, 362722581879065ull}}, {{4031194230234355630ull, 290178065503252ull}}, {{10139259583116879332ull, 464284904805203ull}}, {{15490105295977324112ull, 371427923844162ull}}, {{5013386607298038643ull, 297142339075330ull}}, {{8021418571676861829ull, 475427742520528ull}}, {{13795832486825310110ull, 380342194016422ull}}, {{3657968359976427441ull, 304273755213138ull}}, {{2163400561220373583ull, 486838008341021ull}}, {{16488115707943940159ull, 389470406672816ull}}, {{9501143751613241804ull, 311576325338253ull}}, {{11512481187839276563ull, 498522120541205ull}}, {{9209984950271421251ull, 398817696432964ull}}, {{11057336774959047324ull, 319054157146371ull}}, {{10313041210450655072ull, 510486651434194ull}}, {{11939781783102434380ull, 408389321147355ull}}, {{9551825426481947504ull, 326711456917884ull}}, {{4214874238145385037ull, 522738331068615ull}}, {{3371899390516308030ull, 418190664854892ull}}, {{13765565956638777393ull, 334552531883913ull}}, {{18335556715880133507ull, 535284051014261ull}}, {{10979096557962196482ull, 428227240811409ull}}, {{12472626061111667509ull, 342581792649127ull}}, {{5198806438811026721ull, 548130868238604ull}}, {{7848393965790731700ull, 438504694590883ull}}, {{13657412802116406006ull, 350803755672706ull}}, {{14473162853902428964ull, 561286009076330ull}}, {{11578530283121943171ull, 449028807261064ull}}, {{12952173041239464860ull, 359223045808851ull}}, {{6672389618249661565ull, 287378436647081ull}}, {{3297125759715637858ull, 459805498635330ull}}, {{2637700607772510286ull, 367844398908264ull}}, {{5799509300959918552ull, 294275519126611ull}}, {{1900517252052049037ull, 470840830602578ull}}, {{8899111431125459876ull, 376672664482062ull}}, {{18187335589126098870ull, 301338131585649ull}}, {{18031690498376027223ull, 482141010537039ull}}, {{18114701213442732101ull, 385712808429631ull}}, {{10802412156012275358ull, 308570246743705ull}}, {{17283859449619640573ull, 493712394789928ull}}, {{2759041115469981489ull, 394969915831943ull}}, {{9585930521859805837ull, 315975932665554ull}}, {{4269442390749958370ull, 505561492264887ull}}, {{14483600356825697666ull, 404449193811909ull}}, {{15276229100202468456ull, 323559355049527ull}}, {{9684571301356308236ull, 517694968079244ull}}, {{11437005855826956912ull, 414155974463395ull}}, {{9149604684661565530ull, 331324779570716ull}}, {{7260669865974684201ull, 530119647313146ull}}, {{2119187078037837038ull, 424095717850517ull}}, {{12763396106656000600ull, 339276574280413ull}}, {{16732084955907690637ull, 542842518848661ull}}, {{9696319149984242186ull, 434274015078929ull}}, {{11446404134729304072ull, 347419212063143ull}}, {{14624897800824976192ull, 555870739301029ull}}, {{15389267055401891277ull, 444696591440823ull}}, {{1243367200095782052ull, 355757273152659ull}}, {{4684042574818535965ull, 284605818522127ull}}, {{11183816934451567867ull, 455369309635403ull}}, {{16325751177045074940ull, 364295447708322ull}}, {{5681903312152239305ull, 291436358166658ull}}, {{5401696484701672566ull, 466298173066653ull}}, {{11700054817245158699ull, 373038538453322ull}}, {{1981346224312306313ull, 298430830762658ull}}, {{17927549217867331393ull, 477489329220252ull}}, {{6963341744810044468ull, 381991463376202ull}}, {{16638719840073766544ull, 305593170700961ull}}, {{796510040924654208ull, 488949073121539ull}}, {{4326556847481633690ull, 391159258497231ull}}, {{18218640736952948244ull, 312927406797784ull}}, {{18081778734898986222ull, 500683850876455ull}}, {{14465422987919188977ull, 400547080701164ull}}, {{15261687205077261505ull, 320437664560931ull}}, {{17040001898639797762ull, 512700263297490ull}}, {{13632001518911838209ull, 410160210637992ull}}, {{3526903585645649921ull, 328128168510394ull}}, {{13021743366516860520ull, 525005069616630ull}}, {{10417394693213488416ull, 420004055693304ull}}, {{12023264569312701056ull, 336003244554643ull}}, {{15547874496158411367ull, 537605191287429ull}}, {{16127648411668639416ull, 430084153029943ull}}, {{1834072285109180563ull, 344067322423955ull}}, {{2934515656174688902ull, 550507715878328ull}}, {{9726310154423571768ull, 440406172702662ull}}, {{402350494055036768ull, 352324938162130ull}}, {{321880395244029414ull, 281859950529704ull}}, {{7893706261874267709ull, 450975920847526ull}}, {{2625616194757503844ull, 360780736678021ull}}, {{16857888214773644368ull, 288624589342416ull}}, {{1147179440444458727ull, 461799342947867ull}}, {{11985789996581297951ull, 369439474358293ull}}, {{16967329626748859007ull, 295551579486634ull}}, {{16079680958572443442ull, 472882527178615ull}}, {{12863744766857954753ull, 378306021742892ull}}, {{2912298184002543156ull, 302644817394314ull}}, {{12038374723887889697ull, 484231707830902ull}}, {{2252002149626491111ull, 387385366264722ull}}, {{12869648163926923858ull, 309908293011777ull}}, {{5834041803315436880ull, 495853268818844ull}}, {{8356582257394259827ull, 396682615055075ull}}, {{6685265805915407862ull, 317346092044060ull}}, {{10696425289464652579ull, 507753747270496ull}}, {{4867791416829811740ull, 406202997816397ull}}, {{14962279577689580362ull, 324962398253117ull}}, {{9182252065335687286ull, 519939837204988ull}}, {{14724499281752370475ull, 415951869763990ull}}, {{11779599425401896380ull, 332761495811192ull}}, {{4089963821675392916ull, 532418393297908ull}}, {{10650668686824134979ull, 425934714638326ull}}, {{4831186134717397660ull, 340747771710661ull}}, {{351200186064015609ull, 545196434737058ull}}, {{7659657778335033134ull, 436157147789646ull}}, {{2438377407926116184ull, 348925718231717ull}}, {{7590752667423696218ull, 558281149170747ull}}, {{17140648578164687944ull, 446624919336597ull}}, {{6333821233047929708ull, 357299935469278ull}}, {{12445754615922164413ull, 285839948375422ull}}, {{5155812126507821768ull, 457343917400676ull}}, {{435300886464347091ull, 365875133920541ull}}, {{15105635968139118966ull, 292700107136432ull}}, {{9411622290054949053ull, 468320171418292ull}}, {{150600202560138596ull, 374656137134634ull}}, {{3809828976790021200ull, 299724909707707ull}}, {{9785075177605944243ull, 479559855532331ull}}, {{4138711327342845071ull, 383647884425865ull}}, {{3310969061874276057ull, 306918307540692ull}}, {{8986899313740752014ull, 491069292065107ull}}, {{18257565895218332581ull, 392855433652085ull}}, {{14606052716174666065ull, 314284346921668ull}}, {{1233591457428003764ull, 502854955074670ull}}, {{986873165942403011ull, 402283964059736ull}}, {{15546893791721563702ull, 321827171247788ull}}, {{2738937178303039984ull, 514923473996462ull}}, {{13259196186868162957ull, 411938779197169ull}}, {{14296705764236440689ull, 329551023357735ull}}, {{4427985149068753486ull, 527281637372377ull}}, {{14610434563480733758ull, 421825309897901ull}}, {{7998998836042676683ull, 337460247918321ull}}, {{5419700508184462047ull, 539936396669314ull}}, {{8025109221289479961ull, 431949117335451ull}}, {{2730738562289673645ull, 345559293868361ull}}, {{15437228143889208802ull, 552894870189377ull}}, {{4971084885627546395ull, 442315896151502ull}}, {{15044914352727768086ull, 353852716921201ull}}, {{8346582667440304145ull, 283082173536961ull}}, {{5975834638420665987ull, 452931477659138ull}}, {{12159365340220353436ull, 362345182127310ull}}, {{9727492272176282748ull, 289876145701848ull}}, {{11874638820740142074ull, 463801833122957ull}}, {{2121013427108293013ull, 371041466498366ull}}, {{16454206000654275703ull, 296833173198692ull}}, {{11569334342079199833ull, 474933077117908ull}}, {{16634165103147180512ull, 379946461694326ull}}, {{9617983267775834087ull, 303957169355461ull}}, {{8010075598957513892ull, 486331470968738ull}}, {{13786758108649831760ull, 389065176774990ull}}, {{11029406486919865408ull, 311252141419992ull}}, {{2889655120104143360ull, 498003426271988ull}}, {{9690421725567135335ull, 398402741017590ull}}, {{7752337380453708268ull, 318722192814072ull}}, {{16093088623467843552ull, 509955508502515ull}}, {{12874470898774274841ull, 407964406802012ull}}, {{2920879089535599226ull, 326371525441610ull}}, {{4673406543256958763ull, 522194440706576ull}}, {{49376419863656687ull, 417755552565261ull}}, {{14796896394858566642ull, 334204442052208ull}}, {{1538941343322244689ull, 534727107283534ull}}, {{4920501889399706074ull, 427781685826827ull}}, {{15004447955745495829ull, 342225348661461ull}}, {{16628419099708972680ull, 547560557858338ull}}, {{2234688835541447174ull, 438048446286671ull}}, {{16545146327400799032ull, 350438757029336ull}}, {{646792420647906189ull, 560702011246939ull}}, {{4206782751260235274ull, 448561608997551ull}}, {{18122821459975829512ull, 358849287198040ull}}, {{14498257167980663610ull, 287079429758432ull}}, {{8439816209801420483ull, 459327087613492ull}}, {{17819899412066867356ull, 367461670090793ull}}, {{3187873085427762915ull, 293969336072635ull}}, {{5100596936684420664ull, 470350937716216ull}}, {{391128734605626208ull, 376280750172973ull}}, {{7691600617168321613ull, 301024600138378ull}}, {{8617212172727404258ull, 481639360221405ull}}, {{6893769738181923406ull, 385311488177124ull}}, {{9204364605287449048ull, 308249190541699ull}}, {{3658936924234187507ull, 493198704866719ull}}, {{6616498354129260329ull, 394558963893375ull}}, {{5293198683303408263ull, 315647171114700ull}}, {{8469117893285453221ull, 505035473783520ull}}, {{6775294314628362577ull, 404028379026816ull}}, {{1730886636960779738ull, 323222703221453ull}}, {{17526813878104888874ull, 517156325154324ull}}, {{17710799917225821422ull, 413725060123459ull}}, {{17857988748522567461ull, 330980048098767ull}}, {{13815386738668466645ull, 529568076958028ull}}, {{18431007020418593962ull, 423654461566422ull}}, {{7366107986851054523ull, 338923569253138ull}}, {{8096423964219776915ull, 542277710805021ull}}, {{2787790356633911208ull, 433822168644017ull}}, {{13298278729532859936ull, 347057734915213ull}}, {{17587897152510665575ull, 555292375864341ull}}, {{10380968907266622137ull, 444233900691473ull}}, {{15683472755297118356ull, 355387120553178ull}}, {{1478731760011963715ull, 284309696442543ull}}, {{17123366074986783237ull, 454895514308068ull}}, {{2630646415763695620ull, 363916411446455ull}}, {{2104517132610956496ull, 291133129157164ull}}, {{10745925041661351040ull, 465813006651462ull}}, {{1218042403845260185ull, 372650405321170ull}}, {{974433923076208148ull, 298120324256936ull}}, {{12627140721147664007ull, 476992518811097ull}}, {{2723014947434310559ull, 381594015048878ull}}, {{9557109587431269094ull, 305275212039102ull}}, {{533980080922389257ull, 488440339262564ull}}, {{4116532879479821729ull, 390752271410051ull}}, {{18050621562551498676ull, 312601817128040ull}}, {{10434250426372846266ull, 500162907404865ull}}, {{8347400341098277012ull, 400130325923892ull}}, {{17745966717104352579ull, 320104260739113ull}}, {{6257453858915502188ull, 512166817182582ull}}, {{16074009531358132720ull, 409733453746065ull}}, {{12859207625086506176ull, 327786762996852ull}}, {{5817336941170768589ull, 524458820794964ull}}, {{8343218367678525194ull, 419567056635971ull}}, {{2985225879400909832ull, 335653645308777ull}}, {{8465710221783366055ull, 537045832494043ull}}, {{14151265806910513490ull, 429636665995234ull}}, {{15010361460270321115ull, 343709332796187ull}}, {{9259183077464872492ull, 549934932473900ull}}, {{7407346461971897993ull, 439947945979120ull}}, {{5925877169577518395ull, 351958356783296ull}}, {{1051352920920104392ull, 281566685426637ull}}, {{5371513488214077351ull, 450506696682619ull}}, {{7986559605313172204ull, 360405357346095ull}}, {{6389247684250537763ull, 288324285876876ull}}, {{2844098665317039775ull, 461318857403002ull}}, {{13343325376479362790ull, 369055085922401ull}}, {{6985311486441579908ull, 295244068737921ull}}, {{3797800748822707207ull, 472390509980674ull}}, {{6727589413800076089ull, 377912407984539ull}}, {{9071420345781971194ull, 302329926387631ull}}, {{7135574923767333265ull, 483727882220210ull}}, {{5708459939013866612ull, 386982305776168ull}}, {{11945465580694913936ull, 309585844620934ull}}, {{8044698484886131328ull, 495337351393495ull}}, {{6435758787908905062ull, 396269881114796ull}}, {{1459258215585213726ull, 317015904891837ull}}, {{6024161959678252286ull, 507225447826939ull}}, {{8508678382484512152ull, 405780358261551ull}}, {{3117593891245699398ull, 324624286609241ull}}, {{16056196670218850007ull, 519398858574785ull}}, {{12844957336175080005ull, 415519086859828ull}}, {{17654663498423884651ull, 332415269487862ull}}, {{13490066338510574148ull, 531864431180580ull}}, {{10792053070808459319ull, 425491544944464ull}}, {{12322991271388677778ull, 340393235955571ull}}, {{12338088404738063799ull, 544629177528914ull}}, {{13559819538532361362ull, 435703342023131ull}}, {{7158506816083978766ull, 348562673618505ull}}, {{11453610905734366026ull, 557700277789608ull}}, {{16541586354071313467ull, 446160222231686ull}}, {{9543920268515140451ull, 356928177785349ull}}, {{11324485029554022684ull, 285542542228279ull}}, {{7051129603060705325ull, 456868067565247ull}}, {{16708950126674295229ull, 365494454052197ull}}, {{5988462471855615537ull, 292395563241758ull}}, {{5892191140227074536ull, 467832901186813ull}}, {{12092450541665480275ull, 374266320949450ull}}, {{9673960433332384220ull, 299413056759560ull}}, {{15478336693331814752ull, 479060890815296ull}}, {{8693320539923541478ull, 383248712652237ull}}, {{18022702876164564152ull, 306598970121789ull}}, {{17768278157637571674ull, 490558352194863ull}}, {{3146576081884326370ull, 392446681755891ull}}, {{17274656124475102389ull, 313957345404712ull}}, {{12882054540192522529ull, 502331752647540ull}}, {{10305643632154018023ull, 401865402118032ull}}, {{865817276239393772ull, 321492321694426ull}}, {{12453354086208761005ull, 514387714711081ull}}, {{6273334454225098481ull, 411510171768865ull}}, {{5018667563380078785ull, 329208137415092ull}}, {{11719216916150036379ull, 526733019864147ull}}, {{1996675903436208457ull, 421386415891318ull}}, {{8976038352232787412ull, 337109132713054ull}}, {{3293614919346728889ull, 539374612340887ull}}, {{13702938379703114081ull, 431499689872709ull}}, {{14651699518504401588ull, 345199751898167ull}}, {{8685323970639401248ull, 552319603037068ull}}, {{14326956805995341645ull, 441855682429654ull}}, {{15150914259538183639ull, 353484545943723ull}}, {{1052684963404815941ull, 282787636754979ull}}, {{9062993570931526153ull, 452460218807966ull}}, {{3561046042003310599ull, 361968175046373ull}}, {{10227534463086469126ull, 289574540037098ull}}, {{12674706326196440278ull, 463319264059357ull}}, {{2761067431473331576ull, 370655411247486ull}}, {{16966249204146306553ull, 296524328997988ull}}, {{5009905838182628546ull, 474438926396782ull}}, {{15075971114771833807ull, 379551141117425ull}}, {{12060776891817467045ull, 303640912893940ull}}, {{850498953198395657ull, 485825460630305ull}}, {{680399162558716525ull, 388660368504244ull}}, {{4233668144788883543ull, 310928294803395ull}}, {{6773869031662213670ull, 497485271685432ull}}, {{16487141669555501905ull, 397988217348345ull}}, {{13189713335644401524ull, 318390573878676ull}}, {{13724843707547221792ull, 509424918205882ull}}, {{3601177336553956787ull, 407539934564706ull}}, {{17638337128210806723ull, 326031947651764ull}}, {{17153292960911559787ull, 521651116242823ull}}, {{2654587924503516860ull, 417320892994259ull}}, {{5813019154344723811ull, 333856714395407ull}}, {{12990179461693468421ull, 534170743032651ull}}, {{6702794754612864414ull, 427336594426121ull}}, {{1672886988948381208ull, 341869275540897ull}}, {{6365967997059320256ull, 546990840865435ull}}, {{5092774397647456204ull, 437592672692348ull}}, {{11452917147601785610ull, 350074138153878ull}}, {{14635318621420946653ull, 560118621046205ull}}, {{11708254897136757322ull, 448094896836964ull}}, {{13055952732451316181ull, 358475917469571ull}}, {{6755413371219142621ull, 286780733975657ull}}, {{14498010208692538518ull, 458849174361051ull}}, {{7909059352212120491ull, 367079339488841ull}}, {{2637898667027786069ull, 293663471591073ull}}, {{531289052502547388ull, 469861554545717ull}}, {{11493077686227768880ull, 375889243636573ull}}, {{16573159778466035750ull, 300711394909258ull}}, {{4380962757094195261ull, 481138231854814ull}}, {{7194119020417266532ull, 384910585483851ull}}, {{2065946401591902903ull, 307928468387081ull}}, {{14373560686772775614ull, 492685549419329ull}}, {{15188197364160130814ull, 394148439535463ull}}, {{1082511447102373682ull, 315318751628371ull}}, {{12800064759589528861ull, 504510002605393ull}}, {{17618749437155443735ull, 403608002084314ull}}, {{17784348364466265311ull, 322886401667451ull}}, {{2629515679952652235ull, 516618242667923ull}}, {{9482310173445942435ull, 413294594134338ull}}, {{14964545768240574594ull, 330635675307470ull}}, {{5496529155475367735ull, 529017080491953ull}}, {{11775920953864114834ull, 423213664393562ull}}, {{2042039133607471221ull, 338570931514850ull}}, {{3267262613771953953ull, 541713490423760ull}}, {{2613810091017563163ull, 433370792339008ull}}, {{9469745702297871176ull, 346696633871206ull}}, {{7772895494192773236ull, 554714614193930ull}}, {{6218316395354218589ull, 443771691355144ull}}, {{8664001931025285194ull, 355017353084115ull}}, {{6931201544820228155ull, 284013882467292ull}}, {{14779271286454275372ull, 454422211947667ull}}, {{4444719399679599651ull, 363537769558134ull}}, {{7245124334485590044ull, 290830215646507ull}}, {{15281547749918854394ull, 465328345034411ull}}, {{8535889385193173192ull, 372262676027529ull}}, {{10518060322896448876ull, 297810140822023ull}}, {{13139547701892407879ull, 476496225315237ull}}, {{3132940532030105657ull, 381196980252190ull}}, {{2506352425624084526ull, 304957584201752ull}}, {{7699512695740445564ull, 487932134722803ull}}, {{13538307786076177098ull, 390345707778242ull}}, {{3451948599377121032ull, 312276566222594ull}}, {{12901815388487214297ull, 499642505956150ull}}, {{10321452310789771438ull, 399714004764920ull}}, {{8257161848631817150ull, 319771203811936ull}}, {{5832761328327086794ull, 511633926099098ull}}, {{12044906692145490082ull, 409307140879278ull}}, {{17014622983200212712ull, 327445712703422ull}}, {{12466001514152699046ull, 523913140325476ull}}, {{6283452396580248914ull, 419130512260381ull}}, {{1337413102522288808ull, 335304409808305ull}}, {{2139860964035662092ull, 536487055693288ull}}, {{9090586400712350320ull, 429189644554630ull}}, {{7272469120569880256ull, 343351715643704ull}}, {{567904148686077440ull, 549362745029927ull}}, {{11522369763174592922ull, 439490196023941ull}}, {{5528546995797764014ull, 351592156819153ull}}, {{5156326378534512100ull, 562547450910645ull}}, {{4125061102827609680ull, 450037960728516ull}}, {{18057444141229729036ull, 360030368582812ull}}, {{7067257683499962583ull, 288024294866250ull}}, {{11307612293599940133ull, 460838871786000ull}}, {{9046089834879952106ull, 368671097428800ull}}, {{7236871867903961685ull, 294936877943040ull}}, {{11578994988646338696ull, 471899004708864ull}}, {{12952544805658981280ull, 377519203767091ull}}, {{6672687029785274700ull, 302015363013673ull}}, {{6986950432914529198ull, 483224580821877ull}}, {{16657606790557354328ull, 386579664657501ull}}, {{9636736617703973139ull, 309263731726001ull}}, {{8040080958842536376ull, 494821970761602ull}}, {{17500111211299760070ull, 395857576609281ull}}, {{10310740154297897733ull, 316686061287425ull}}, {{16497184246876636373ull, 506697698059880ull}}, {{13197747397501309098ull, 405358158447904ull}}, {{14247546732742957602ull, 324286526758323ull}}, {{659981883937270224ull, 518858442813318ull}}, {{7906683136633636826ull, 415086754250654ull}}, {{10014695324048819784ull, 332069403400523ull}}, {{12334163703736201331ull, 531311045440837ull}}, {{2488633333505140418ull, 425048836352670ull}}, {{1990906666804112334ull, 340039069082136ull}}, {{14253497111112310705ull, 544062510531417ull}}, {{4024100059406027917ull, 435250008425134ull}}, {{6908628862266732657ull, 348200006740107ull}}, {{14743154994368682575ull, 557120010784171ull}}, {{8105175180753035737ull, 445696008627337ull}}, {{17552186588828159559ull, 356556806901869ull}}, {{17731098085804437970ull, 285245445521495ull}}, {{9923012863577549136ull, 456392712834393ull}}, {{15317107920345859955ull, 365114170267514ull}}, {{15943035151018598287ull, 292091336214011ull}}, {{18130158612145936614ull, 467346137942418ull}}, {{3436080445491018321ull, 373876910353935ull}}, {{2748864356392814657ull, 299101528283148ull}}, {{708834155486593128ull, 478562445253037ull}}, {{11635113768615005472ull, 382849956202429ull}}, {{12997439829633914701ull, 306279964961943ull}}, {{17106554912672353198ull, 490047943939109ull}}, {{17374592744879792882ull, 392038355151287ull}}, {{6520976566420013659ull, 313630684121030ull}}, {{10433562506272021855ull, 501809094593648ull}}, {{15725547634501438130ull, 401447275674918ull}}, {{1512391663375419534ull, 321157820539935ull}}, {{2419826661400671255ull, 513852512863896ull}}, {{16693256588088178297ull, 411082010291116ull}}, {{9665256455728632314ull, 328865608232893ull}}, {{11775061514423901380ull, 526184973172629ull}}, {{13109398026281031427ull, 420947978538103ull}}, {{17866216050508645788ull, 336758382830482ull}}, {{13828550421846191968ull, 538813412528772ull}}, {{3684142707993132928ull, 431050730023018ull}}, {{10326011795878326989ull, 344840584018414ull}}, {{5453572429179592213ull, 551744934429463ull}}, {{11741555572827494416ull, 441395947543570ull}}, {{9393244458261995533ull, 353116758034856ull}}, {{3825246751867686103ull, 282493406427885ull}}, {{6120394802988297765ull, 451989450284616ull}}, {{1206967027648727889ull, 361591560227693ull}}, {{8344271251602802957ull, 289273248182154ull}}, {{2282787558338753763ull, 462837197091447ull}}, {{12894276490896733980ull, 370269757673157ull}}, {{2936723563233566537ull, 296215806138526ull}}, {{15766804145399437429ull, 473945289821641ull}}, {{8924094501577639620ull, 379156231857313ull}}, {{14517973230745932342ull, 303324985485850ull}}, {{4782013095483940132ull, 485319976777361ull}}, {{136261661645241782ull, 388255981421889ull}}, {{3798358144058103749ull, 310604785137511ull}}, {{17145419474718696968ull, 496967656220017ull}}, {{6337637950291136928ull, 397574124976014ull}}, {{8759459174974819866ull, 318059299980811ull}}, {{6636437050475891139ull, 508894879969298ull}}, {{12687847269864533557ull, 407115903975438ull}}, {{17528975445375447492ull, 325692723180350ull}}, {{9599616638891164372ull, 521108357088561ull}}, {{3990344496371021174ull, 416886685670849ull}}, {{6881624411838727263ull, 333509348536679ull}}, {{18389296688425784267ull, 533614957658686ull}}, {{11022088535998717090ull, 426891966126949ull}}, {{12507019643540883995ull, 341513572901559ull}}, {{8943184985439683423ull, 546421716642495ull}}, {{7154547988351746738ull, 437137373313996ull}}, {{2034289575939487067ull, 349709898651197ull}}, {{6944212136245089631ull, 559535837841915ull}}, {{5555369708996071705ull, 447628670273532ull}}, {{15512342211422588333ull, 358102936218825ull}}, {{12409873769138070667ull, 286482348975060ull}}, {{1409053956911361451ull, 458371758360097ull}}, {{12195289609754820130ull, 366697406688077ull}}, {{2377534058320035458ull, 293357925350462ull}}, {{7493403308053967056ull, 469372680560739ull}}, {{9684071461185083968ull, 375498144448591ull}}, {{4057908354206156851ull, 300398515558873ull}}, {{2803304551987940638ull, 480637624894197ull}}, {{13310690085816083480ull, 384510099915357ull}}, {{3269854439169046138ull, 307608079932286ull}}, {{16299813546896204790ull, 492172927891657ull}}, {{5661153208033143186ull, 393738342313326ull}}, {{839573751684604225ull, 314990673850661ull}}, {{12411364446921097730ull, 503985078161057ull}}, {{2550393928053057538ull, 403188062528846ull}}, {{16797710401410087323ull, 322550450023076ull}}, {{1050894939062767455ull, 516080720036923ull}}, {{8219413580734034610ull, 412864576029538ull}}, {{13954228494071048334ull, 330291660823630ull}}, {{3880021516804125719ull, 528466657317809ull}}, {{6793366028185210898ull, 422773325854247ull}}, {{16502739266773899688ull, 338218660683397ull}}, {{11646987567870598209ull, 541149857093436ull}}, {{5628241239554568244ull, 432919885674749ull}}, {{8191941806385564918ull, 346335908539799ull}}, {{2039060445991172899ull, 554137453663679ull}}, {{5320597171534848643ull, 443309962930943ull}}, {{11635175366711699560ull, 354647970344754ull}}, {{12997489108111269971ull, 283718376275803ull}}, {{17106633758236121631ull, 453949402041285ull}}, {{13685307006588897305ull, 363159521633028ull}}, {{18326943234754938490ull, 290527617306422ull}}, {{14565713916640260292ull, 464844187690276ull}}, {{7963222318570297910ull, 371875350152221ull}}, {{2681229040114328005ull, 297500280121777ull}}, {{7979315278924835131ull, 476000448194843ull}}, {{13762149852623688751ull, 380800358555874ull}}, {{14699068696840861324ull, 304640286844699ull}}, {{12450463470719647150ull, 487424458951519ull}}, {{13649719591317628043ull, 389939567161215ull}}, {{10919775673054102434ull, 311951653728972ull}}, {{2714245817918922602ull, 499122645966356ull}}, {{16928791913302779374ull, 399298116773084ull}}, {{17232382345384133823ull, 319438493418467ull}}, {{12814416493646972824ull, 511101589469548ull}}, {{17630230824401398905ull, 408881271575638ull}}, {{3036138215295388154ull, 327105017260511ull}}, {{15925867588698352017ull, 523368027616817ull}}, {{5361996441474860967ull, 418694422093454ull}}, {{7978945967921799097ull, 334955537674763ull}}, {{9076964733932968232ull, 535928860279621ull}}, {{3572222972404464262ull, 428743088223697ull}}, {{13925824822149302379ull, 342994470578957ull}}, {{7523924456471242514ull, 548791152926332ull}}, {{17087186009402724981ull, 439032922341065ull}}, {{13669748807522179985ull, 351226337872852ull}}, {{7114202833067846683ull, 561962140596564ull}}, {{9380711081196187670ull, 449569712477251ull}}, {{3815220050215039812ull, 359655769981801ull}}, {{17809571299139673143ull, 287724615985440ull}}, {{10048570004913925412ull, 460359385576705ull}}, {{8038856003931140330ull, 368287508461364ull}}, {{10120433617886822587ull, 294630006769091ull}}, {{8813996159135095493ull, 471408010830546ull}}, {{3361848112566166071ull, 377126408664437ull}}, {{13757524934278663826ull, 301701126931549ull}}, {{10943993450620131153ull, 482721803090479ull}}, {{12444543575238015245ull, 386177442472383ull}}, {{17334332489674232843ull, 308941953977906ull}}, {{1909490280285400286ull, 494307126364651ull}}, {{16284987483195961522ull, 395445701091720ull}}, {{13027989986556769217ull, 316356560873376ull}}, {{13466086349007010101ull, 506170497397402ull}}, {{3394171449721787435ull, 404936397917922ull}}, {{13783383604003160917ull, 323949118334337ull}}, {{7296018507437416175ull, 518318589334940ull}}, {{5836814805949932940ull, 414654871467952ull}}, {{15737498288985677321ull, 331723897174361ull}}, {{17801299632893263068ull, 530758235478978ull}}, {{3172993262088879485ull, 424606588383183ull}}, {{9917092239154924234ull, 339685270706546ull}}, {{8488649953164058129ull, 543496433130474ull}}, {{10480268777273156826ull, 434797146504379ull}}, {{12073563836560435784ull, 347837717203503ull}}, {{15628353323754786931ull, 556540347525605ull}}, {{12502682659003829545ull, 445232278020484ull}}, {{13691494941944973959ull, 356185822416387ull}}, {{3574498324072158521ull, 284948657933110ull}}, {{5719197318515453634ull, 455917852692976ull}}, {{886009040070452584ull, 364734282154381ull}}, {{15466202491024003360ull, 291787425723504ull}}, {{13677877541412674406ull, 466859881157607ull}}, {{3563604403646318878ull, 373487904926086ull}}, {{17608278781884696395ull, 298790323940868ull}}, {{6037153162564052294ull, 478064518305390ull}}, {{4829722530051241835ull, 382451614644312ull}}, {{14931824468266724437ull, 305961291715449ull}}, {{12822872705001028130ull, 489538066744719ull}}, {{13947646978742732827ull, 391630453395775ull}}, {{11158117582994186262ull, 313304362716620ull}}, {{17852988132790698019ull, 501286980346592ull}}, {{6903692876748737769ull, 401029584277274ull}}, {{9212303116140900538ull, 320823667421819ull}}, {{3671638541599709892ull, 513317867874911ull}}, {{17694706092247409206ull, 410654294299928ull}}, {{3087718429572196395ull, 328523435439943ull}}, {{1251000672573603909ull, 525637496703909ull}}, {{4690149352800793451ull, 420509997363127ull}}, {{14820165926466365730ull, 336407997890501ull}}, {{16333567852862364522ull, 538252796624802ull}}, {{5688156652806070971ull, 430602237299842ull}}, {{15618571766470587746ull, 344481789839873ull}}, {{2853621937901478455ull, 551170863743798ull}}, {{9661595179805003410ull, 440936690995038ull}}, {{15107973773327823375ull, 352749352796030ull}}, {{12086379018662258700ull, 282199482236824ull}}, {{8270159985633882950ull, 451519171578919ull}}, {{10305476803249016683ull, 361215337263135ull}}, {{8244381442599213346ull, 288972269810508ull}}, {{9501661493416831031ull, 462355631696813ull}}, {{14980026824217285471ull, 369884505357450ull}}, {{11984021459373828377ull, 295907604285960ull}}, {{727690261288573788ull, 473452166857537ull}}, {{11650198653256590000ull, 378761733486029ull}}, {{13009507737347182323ull, 303009386788823ull}}, {{17125863565013581394ull, 484815018862117ull}}, {{6321993222527044468ull, 387852015089694ull}}, {{8746943392763545898ull, 310281612071755ull}}, {{13995109428421673437ull, 496450579314808ull}}, {{128041098511607780ull, 397160463451847ull}}, {{11170479323035017193ull, 317728370761477ull}}, {{3115371657888386217ull, 508365393218364ull}}, {{6181646141052619296ull, 406692314574691ull}}, {{1255968098100185114ull, 325353851659753ull}}, {{16766944215927937475ull, 520566162655604ull}}, {{17102904187484260303ull, 416452930124483ull}}, {{2614276905761677273ull, 333162344099587ull}}, {{7872191863960593960ull, 533059750559339ull}}, {{9987102305910385491ull, 426447800447471ull}}, {{4300333029986398070ull, 341158240357977ull}}, {{10569881662720147235ull, 545853184572763ull}}, {{15834602959659938434ull, 436682547658210ull}}, {{12667682367727950747ull, 349346038126568ull}}, {{16578942973622810873ull, 558953661002509ull}}, {{16952503193640159021ull, 447162928802007ull}}, {{6183304925428306571ull, 357730343041606ull}}, {{1257295125600734933ull, 286184274433285ull}}, {{2011672200961175893ull, 457894839093256ull}}, {{16366733019736582007ull, 366315871274604ull}}, {{16782735230531175929ull, 293052697019683ull}}, {{4716283480398419548ull, 468884315231494ull}}, {{7462375599060645961ull, 375107452185195ull}}, {{5969900479248516769ull, 300085961748156ull}}, {{2173143137313806184ull, 480137538797050ull}}, {{1738514509851044947ull, 384110031037640ull}}, {{1390811607880835958ull, 307288024830112ull}}, {{5914647387351247856ull, 491660839728179ull}}, {{8421066724622908608ull, 393328671782543ull}}, {{14115551009182147532ull, 314662937426034ull}}, {{11516835170465705083ull, 503460699881655ull}}, {{9213468136372564066ull, 402768559905324ull}}, {{11060123323839961576ull, 322214847924259ull}}, {{6628150873918207552ull, 515543756678815ull}}, {{5302520699134566042ull, 412435005343052ull}}, {{15310063003533383803ull, 329948004274441ull}}, {{17117403176169593438ull, 527916806839106ull}}, {{10004573726193764427ull, 422333445471285ull}}, {{8003658980955011542ull, 337866756377028ull}}, {{9116505554786108144ull, 540586810203245ull}}, {{7293204443828886515ull, 432469448162596ull}}, {{2145214740321198889ull, 345975558530077ull}}, {{7121692399255828545ull, 553560893648123ull}}, {{13076051548888483483ull, 442848714918498ull}}, {{17839538868594607432ull, 354278971934798ull}}, {{3203584650649954976ull, 283423177547839ull}}, {{12504433070523748609ull, 453477084076542ull}}, {{2624848826935178240ull, 362781667261234ull}}, {{5789227876290052915ull, 290225333808987ull}}, {{12952113416805994988ull, 464360534094379ull}}, {{14051039548186706314ull, 371488427275503ull}}, {{172785194323634081ull, 297190741820403ull}}, {{15033851569885455823ull, 475505186912644ull}}, {{15716430070650274982ull, 380404149530115ull}}, {{12573144056520219985ull, 304323319624092ull}}, {{5359635231464710684ull, 486917311398548ull}}, {{11666405814655589193ull, 389533849118838ull}}, {{16711822281208292001ull, 311627079295070ull}}, {{8292171576223715586ull, 498603326872113ull}}, {{14012434890462793115ull, 398882661497690ull}}, {{11209947912370234492ull, 319106129198152ull}}, {{3178521400824733895ull, 510569806717044ull}}, {{6232165935401697439ull, 408455845373635ull}}, {{4985732748321357951ull, 326764676298908ull}}, {{4287823582572262398ull, 522823482078253ull}}, {{10808956495541630565ull, 418258785662602ull}}, {{1268467566949483806ull, 334607028530082ull}}, {{5718896921861084412ull, 535371245648131ull}}, {{885768722746957207ull, 428296996518505ull}}, {{708614978197565765ull, 342637597214804ull}}, {{8512481594599925871ull, 548220155543686ull}}, {{3120636460938030374ull, 438576124434949ull}}, {{6185857983492334622ull, 350860899547959ull}}, {{17276070403071556042ull, 561377439276734ull}}, {{17510205137199155157ull, 449101951421387ull}}, {{6629466480275503479ull, 359281561137110ull}}, {{5303573184220402783ull, 287425248909688ull}}, {{4796368280010734130ull, 459880398255501ull}}, {{147745809266676980ull, 367904318604401ull}}, {{14875591906380982877ull, 294323454883520ull}}, {{5354202976500020988ull, 470917527813633ull}}, {{11662060010683837436ull, 376734022250906ull}}, {{5640299193805159626ull, 301387217800725ull}}, {{9024478710088255402ull, 482219548481160ull}}, {{7219582968070604321ull, 385775638784928ull}}, {{13154364003940304103ull, 308620511027942ull}}, {{6289587147336845273ull, 493792817644708ull}}, {{12410367347353296864ull, 395034254115766ull}}, {{6238945063140727168ull, 316027403292613ull}}, {{6292963286283253146ull, 505643845268181ull}}, {{1345021814284692194ull, 404515076214545ull}}, {{1076017451427753755ull, 323612060971636ull}}, {{12789674366510136978ull, 517779297554617ull}}, {{2853041863724288936ull, 414223438043694ull}}, {{5971782305721341472ull, 331378750434955ull}}, {{9554851689154146355ull, 530206000695928ull}}, {{15022578980807137730ull, 424164800556742ull}}, {{4639365555161889538ull, 339331840445394ull}}, {{14801682517742843907ull, 542930944712630ull}}, {{11841346014194275126ull, 434344755770104ull}}, {{13162425626097330424ull, 347475804616083ull}}, {{17370532187013818355ull, 555961287385733ull}}, {{2828379305385323714ull, 444769029908587ull}}, {{13330749888533989941ull, 355815223926869ull}}, {{14353948725569102276ull, 284652179141495ull}}, {{4519573887201012025ull, 455443486626393ull}}, {{10994356739244630267ull, 364354789301114ull}}, {{12484834206137614536ull, 291483831440891ull}}, {{12597037100336362612ull, 466374130305426ull}}, {{6388280865527179766ull, 373099304244341ull}}, {{1421275877679833490ull, 298479443395473ull}}, {{17031436663255374877ull, 477567109432756ull}}, {{9935800515862389578ull, 382053687546205ull}}, {{7948640412689911662ull, 305642950036964ull}}, {{1649778216078127691ull, 489028720059143ull}}, {{8698520202346322799ull, 391222976047314ull}}, {{10648164976618968562ull, 312978380837851ull}}, {{9658366333106529053ull, 500765409340562ull}}, {{347995437001402596ull, 400612327472450ull}}, {{278396349601122077ull, 320489861977960ull}}, {{445434159361795323ull, 512783779164736ull}}, {{15113742586457077551ull, 410227023331788ull}}, {{1022947624939931071ull, 328181618665431ull}}, {{12704762644129620684ull, 525090589864689ull}}, {{13853158930045606870ull, 420072471891751ull}}, {{7393178329294575173ull, 336057977513401ull}}, {{4450387697387499631ull, 537692764021442ull}}, {{14628356602135730674ull, 430154211217153ull}}, {{634638837482853569ull, 344123368973723ull}}, {{15772817398940207004ull, 550597390357956ull}}, {{8928905104410255280ull, 440477912286365ull}}, {{7143124083528204224ull, 352382329829092ull}}, {{16782545711048294349ull, 281905863863273ull}}, {{4715980249225809019ull, 451049382181238ull}}, {{11151481828864467862ull, 360839505744990ull}}, {{8921185463091574289ull, 288671604595992ull}}, {{17963245555688429186ull, 461874567353587ull}}, {{6991898815066922702ull, 369499653882870ull}}, {{5593519052053538162ull, 295599723106296ull}}, {{1570932853801840413ull, 472959556970074ull}}, {{4946095097783382653ull, 378367645576059ull}}, {{7646224892968616446ull, 302694116460847ull}}, {{15923308643491696637ull, 484310586337355ull}}, {{12738646914793357309ull, 387448469069884ull}}, {{13880266346576596171ull, 309958775255907ull}}, {{7451030895554912580ull, 495934040409452ull}}, {{17028871160669661034ull, 396747232327561ull}}, {{9933748113793818504ull, 317397785862049ull}}, {{4825950537844378637ull, 507836457379279ull}}, {{7550109245017413232ull, 406269165903423ull}}, {{13418785025497751232ull, 325015332722738ull}}, {{17780707226054491649ull, 520024532356381ull}}, {{10535216966101682996ull, 416019625885105ull}}, {{8428173572881346396ull, 332815700708084ull}}, {{2417031272384423265ull, 532505121132935ull}}, {{1933625017907538612ull, 426004096906348ull}}, {{8925597643809851536ull, 340803277525078ull}}, {{10591607415353852134ull, 545285244040125ull}}, {{8473285932283081707ull, 436228195232100ull}}, {{6778628745826465366ull, 348982556185680ull}}, {{10845805993322344586ull, 558372089897088ull}}, {{16055342424141696315ull, 446697671917670ull}}, {{12844273939313357052ull, 357358137534136ull}}, {{6586070336708775318ull, 285886510027309ull}}, {{17916410168217861156ull, 457418416043694ull}}, {{18022476949316199248ull, 365934732834955ull}}, {{14417981559452959398ull, 292747786267964ull}}, {{12000724050899004067ull, 468396458028743ull}}, {{16979276870203023900ull, 374717166422994ull}}, {{17272770310904329443ull, 299773733138395ull}}, {{9189688423737375494ull, 479637973021433ull}}, {{14730448368473721041ull, 383710378417146ull}}, {{8095009880037066510ull, 306968302733717ull}}, {{16641364622801216739ull, 491149284373947ull}}, {{5934394068757152745ull, 392919427499158ull}}, {{12126212884489542842ull, 314335541999326ull}}, {{12023242985699447901ull, 502936867198922ull}}, {{2239896759075737674ull, 402349493759138ull}}, {{9170615036744410786ull, 321879595007310ull}}, {{14672984058791057258ull, 515007352011696ull}}, {{8049038432290935483ull, 412005881609357ull}}, {{17507277190058479356ull, 329604705287485ull}}, {{9564899430384015353ull, 527367528459977ull}}, {{273221914823391636ull, 421894022767982ull}}, {{11286623976084444279ull, 337515218214385ull}}, {{18058598361735110846ull, 540024349143016ull}}, {{10757529874646178353ull, 432019479314413ull}}, {{15984721529200763329ull, 345615583451530ull}}, {{7128810373011669711ull, 552984933522449ull}}, {{9392397113151246092ull, 442387946817959ull}}, {{11203266505262907196ull, 353910357454367ull}}, {{1583915574726505111ull, 283128285963494ull}}, {{9912962549046228824ull, 453005257541590ull}}, {{7930370039236983059ull, 362404206033272ull}}, {{17412342475615317417ull, 289923364826617ull}}, {{13102352702016866574ull, 463877383722588ull}}, {{17860579791097313906ull, 371101906978070ull}}, {{14288463832877851124ull, 296881525582456ull}}, {{15482844503120741153ull, 475010440931930ull}}, {{12386275602496592922ull, 380008352745544ull}}, {{13598369296739184661ull, 304006682196435ull}}, {{3310646801073143842ull, 486410691514297ull}}, {{13716563885084246043ull, 389128553211437ull}}, {{3594553478583576188ull, 311302842569150ull}}, {{5751285565733721901ull, 498084548110640ull}}, {{4601028452586977521ull, 398467638488512ull}}, {{14748869206295312986ull, 318774110790809ull}}, {{12530144285846769808ull, 510038577265295ull}}, {{10024115428677415846ull, 408030861812236ull}}, {{4329943528200022354ull, 326424689449789ull}}, {{14306607274603856413ull, 522279503119662ull}}, {{4066588190199264484ull, 417823602495730ull}}, {{3253270552159411587ull, 334258881996584ull}}, {{12583930512938879186ull, 534814211194534ull}}, {{13756493225093013672ull, 427851368955627ull}}, {{3626496950590590291ull, 342281095164502ull}}, {{9491743935686854789ull, 547649752263203ull}}, {{14972092778033304477ull, 438119801810562ull}}, {{4598976592942822935ull, 350495841448450ull}}, {{7358362548708516697ull, 560793346317520ull}}, {{5886690038966813358ull, 448634677054016ull}}, {{1020003216431540363ull, 358907741643213ull}}, {{8194700202629052936ull, 287126193314570ull}}, {{13111520324206484699ull, 459401909303312ull}}, {{3110518629881367112ull, 367521527442650ull}}, {{2488414903905093690ull, 294017221954120ull}}, {{3981463846248149904ull, 470427555126592ull}}, {{14253217521224250893ull, 376342044101273ull}}, {{334527572753669744ull, 301073635281019ull}}, {{7913941745889692238ull, 481717816449630ull}}, {{6331153396711753790ull, 385374253159704ull}}, {{8754271532111313355ull, 308299402527763ull}}, {{10317485636636191046ull, 493279044044421ull}}, {{4564639694567042513ull, 394623235235537ull}}, {{14719758199879364980ull, 315698588188429ull}}, {{12483566675581252999ull, 505117741101487ull}}, {{2608155710981181752ull, 404094192881190ull}}, {{2086524568784945402ull, 323275354304952ull}}, {{7027788124797822966ull, 517240566887923ull}}, {{13000928129322079019ull, 413792453510338ull}}, {{17779440132941483862ull, 331033962808270ull}}, {{10000360138996822563ull, 529654340493233ull}}, {{15378985740681278697ull, 423723472394586ull}}, {{8613839777803112634ull, 338978777915669ull}}, {{2714097200259249246ull, 542366044665071ull}}, {{16928673019175040689ull, 433892835732056ull}}, {{9853589600598122228ull, 347114268585645ull}}, {{15765743360956995565ull, 555382829737032ull}}, {{5233897059281775806ull, 444306263789626ull}}, {{497768832683510321ull, 355445011031701ull}}, {{15155610325114449550ull, 284356008825360ull}}, {{5802232446473567664ull, 454969614120577ull}}, {{15709832401404585100ull, 363975691296461ull}}, {{8878517106381757757ull, 291180553037169ull}}, {{3137580925985081442ull, 465888884859471ull}}, {{17267459999755706446ull, 372711107887576ull}}, {{10124619185062654834ull, 298168886310061ull}}, {{8820693066616427088ull, 477070218096098ull}}, {{14435252082776962317ull, 381656174476878ull}}, {{480155221995838884ull, 305324939581503ull}}, {{15525643614160983507ull, 488519903330404ull}}, {{16109863706070697129ull, 390815922664323ull}}, {{1819844520630826733ull, 312652738131459ull}}, {{10290448862493143420ull, 500244381010334ull}}, {{11921707904736425059ull, 400195504808267ull}}, {{2158668694305319401ull, 320156403846614ull}}, {{10832567540372331688ull, 512250246154582ull}}, {{1287356402814044704ull, 409800196923666ull}}, {{15787280381218877056ull, 327840157538932ull}}, {{10502253350982561997ull, 524544252062292ull}}, {{1023105051302228951ull, 419635401649834ull}}, {{4507832855783693484ull, 335708321319867ull}}, {{10901881383995819897ull, 537133314111787ull}}, {{1342807477712835271ull, 429706651289430ull}}, {{1074245982170268217ull, 343765321031544ull}}, {{9097491200956249794ull, 550024513650470ull}}, {{7277992960764999835ull, 440019610920376ull}}, {{2133045553870089545ull, 352015688736301ull}}, {{16463831702063712928ull, 281612550989040ull}}, {{7895386649592389070ull, 450580081582465ull}}, {{6316309319673911256ull, 360464065265972ull}}, {{16121093899964859974ull, 288371252212777ull}}, {{11036354980976134666ull, 461394003540444ull}}, {{12518432799522818056ull, 369115202832355ull}}, {{10014746239618254445ull, 295292162265884ull}}, {{4955547539163476142ull, 472467459625415ull}}, {{3964438031330780914ull, 377973967700332ull}}, {{14239596869290355700ull, 302379174160265ull}}, {{4336610917155017505ull, 483806678656425ull}}, {{3469288733724014004ull, 387045342925140ull}}, {{2775430986979211203ull, 309636274340112ull}}, {{8130038393908648248ull, 495418038944179ull}}, {{10193379529868828922ull, 396334431155343ull}}, {{15533401253378883784ull, 317067544924274ull}}, {{13785395561180483085ull, 507308071878839ull}}, {{14717665263686296791ull, 405846457503071ull}}, {{8084783396207127109ull, 324677166002457ull}}, {{16625002248673313698ull, 519483465603931ull}}, {{9610652984196740635ull, 415586772483145ull}}, {{7688522387357392508ull, 332469417986516ull}}, {{4922938190288007367ull, 531951068778426ull}}, {{249001737488495570ull, 425560855022741ull}}, {{14956596648958437749ull, 340448684018192ull}}, {{9173159379365859106ull, 544717894429108ull}}, {{14717225132976507931ull, 435774315543286ull}}, {{8084431291639296022ull, 348619452434629ull}}, {{1867043622397142665ull, 557791123895407ull}}, {{12561681342143445102ull, 446232899116325ull}}, {{10049345073714756081ull, 356986319293060ull}}, {{8039476058971804865ull, 285589055434448ull}}, {{9173812879612977461ull, 456942488695117ull}}, {{18407096747916112938ull, 365553990956093ull}}, {{3657630954107159381ull, 292443192764875ull}}, {{5852209526571455010ull, 467909108423800ull}}, {{4681767621257164008ull, 374327286739040ull}}, {{3745414097005731206ull, 299461829391232ull}}, {{9682011369951080253ull, 479138927025971ull}}, {{4056260281218953879ull, 383311141620777ull}}, {{14313054669200894073ull, 306648913296621ull}}, {{15522189841237609870ull, 490638261274594ull}}, {{16107100687731998219ull, 392510609019675ull}}, {{12885680550185598575ull, 314008487215740ull}}, {{2170344806587406105ull, 502413579545185ull}}, {{1736275845269924884ull, 401930863636148ull}}, {{8767718305699760553ull, 321544690908918ull}}, {{10339000474377706563ull, 514471505454269ull}}, {{11960549194244075573ull, 411577204363415ull}}, {{9568439355395260458ull, 329261763490732ull}}, {{552107709664775441ull, 526818821585172ull}}, {{11509732611957551322ull, 421455057268137ull}}, {{1829088460082220411ull, 337164045814510ull}}, {{2926541536131552659ull, 539462473303216ull}}, {{17098628487872883420ull, 431569978642572ull}}, {{6300205160814486089ull, 345255982914058ull}}, {{6390979442561267420ull, 552409572662493ull}}, {{12491481183532834582ull, 441927658129994ull}}, {{13682533761568177989ull, 353542126503995ull}}, {{10946027009254542391ull, 282833701203196ull}}, {{10134945585323447179ull, 452533921925114ull}}, {{11797305283000668067ull, 362027137540091ull}}, {{5748495411658624130ull, 289621710032073ull}}, {{5508243843911888285ull, 463394736051317ull}}, {{15474641519355241598ull, 370715788841053ull}}, {{1311666771258462308ull, 296572631072843ull}}, {{16856062092981180986ull, 474516209716548ull}}, {{2416803230159213819ull, 379612967773239ull}}, {{5622791398869281379ull, 303690374218591ull}}, {{1617768608707029560ull, 485904598749746ull}}, {{16051610145933264940ull, 388723678999796ull}}, {{9151939302004701629ull, 310978943199837ull}}, {{18332451697949432930ull, 497566309119739ull}}, {{18355310173101456667ull, 398053047295791ull}}, {{10994899323739255010ull, 318442437836633ull}}, {{13902490103240897694ull, 509507900538613ull}}, {{53945638366987185ull, 407606320430891ull}}, {{14800551769661231041ull, 326085056344712ull}}, {{8923487572490328373ull, 521736090151540ull}}, {{7138790057992262698ull, 417388872121232ull}}, {{16779078490619541128ull, 333911097696985ull}}, {{8399781511281714189ull, 534257756315177ull}}, {{17787871653251102321ull, 427406205052141ull}}, {{10540948507858971533ull, 341924964041713ull}}, {{13176168797832444131ull, 547079942466741ull}}, {{6851586223524044981ull, 437663953973393ull}}, {{12859966608303056631ull, 350131163178714ull}}, {{9507900129059159641ull, 560209861085943ull}}, {{14985017732731148359ull, 448167888868754ull}}, {{15677363000926829010ull, 358534311095003ull}}, {{1473843956515732238ull, 286827448876003ull}}, {{17115545589392812875ull, 458923918201604ull}}, {{17381785286256160623ull, 367139134561283ull}}, {{2837381784779197529ull, 293711307649027ull}}, {{8229159670388626369ull, 469938092238443ull}}, {{13962025365794721742ull, 375950473790754ull}}, {{14858969107377687716ull, 300760379032603ull}}, {{1638257683352838407ull, 481216606452166ull}}, {{16068001405649912019ull, 384973285161732ull}}, {{5475703495036108968ull, 307978628129386ull}}, {{1382427962573953703ull, 492765805007018ull}}, {{8484639999542983609ull, 394212644005614ull}}, {{10477060814376297210ull, 315370115204491ull}}, {{9384599673518254890ull, 504592184327186ull}}, {{3818330924072693589ull, 403673747461749ull}}, {{6744013554000065194ull, 322938997969399ull}}, {{18169119315883924958ull, 516702396751038ull}}, {{3467249008481408996ull, 413361917400831ull}}, {{17531194465752768490ull, 330689533920664ull}}, {{16981864700978698614ull, 529103254273063ull}}, {{2517445316557227922ull, 423282603418451ull}}, {{16771351512213423630ull, 338626082734760ull}}, {{8387418345831926192ull, 541801732375617ull}}, {{17777981120891271923ull, 433441385900493ull}}, {{3154338452487286569ull, 346753108720395ull}}, {{5046941523979658511ull, 554804973952632ull}}, {{15105599663409457778ull, 443843979162105ull}}, {{12084479730727566222ull, 355075183329684ull}}, {{13356932599323963301ull, 284060146663747ull}}, {{6613696899950699989ull, 454496234661996ull}}, {{1601608705218649668ull, 363596987729597ull}}, {{12349333408400650704ull, 290877590183677ull}}, {{5001538194473399834ull, 465404144293884ull}}, {{7690579370320630190ull, 372323315435107ull}}, {{17220509940482235122ull, 297858652348085ull}}, {{9106071831062024579ull, 476573843756937ull}}, {{18352903909075350633ull, 381259075005549ull}}, {{18371671942002190829ull, 305007260004439ull}}, {{18326628662977774357ull, 488011616007103ull}}, {{3593256486156488516ull, 390409292805683ull}}, {{10253302818409011459ull, 312327434244546ull}}, {{9026586879970597689ull, 499723894791274ull}}, {{10910618318718388474ull, 399779115833019ull}}, {{12417843469716621102ull, 319823292666415ull}}, {{1421805477837042148ull, 511717268266265ull}}, {{1137444382269633718ull, 409373814613012ull}}, {{11978001950041437944ull, 327499051690409ull}}, {{8096756675840569741ull, 523998482704655ull}}, {{6477405340672455793ull, 419198786163724ull}}, {{8871273087279874958ull, 335359028930979ull}}, {{3125990495422068963ull, 536574446289567ull}}, {{13568838840563386140ull, 429259557031653ull}}, {{18233768701934529558ull, 343407645625322ull}}, {{14416634664127606000ull, 549452233000516ull}}, {{7843958916560174477ull, 439561786400413ull}}, {{13653864762731960228ull, 351649429120330ull}}, {{3399439546661584749ull, 562639086592529ull}}, {{6408900452071178122ull, 450111269274023ull}}, {{12505817991140763144ull, 360089015419218ull}}, {{17383352022396431162ull, 288071212335374ull}}, {{16745316791608558889ull, 460913939736599ull}}, {{17085602248028757434ull, 368731151789279ull}}, {{17357830613164916271ull, 294984921431423ull}}, {{5636436092612404094ull, 471975874290278ull}}, {{11887846503573743922ull, 377580699432222ull}}, {{2131579573375174491ull, 302064559545778ull}}, {{18167922576367920478ull, 483303295273244ull}}, {{18223686875836246706ull, 386642636218595ull}}, {{14578949500668997365ull, 309314108974876ull}}, {{15947621571586575137ull, 494902574359802ull}}, {{5379399627785439463ull, 395922059487842ull}}, {{15371566146454082540ull, 316737647590273ull}}, {{2458412945875070125ull, 506780236144438ull}}, {{9345427986183876747ull, 405424188915550ull}}, {{7476342388947101397ull, 324339351132440ull}}, {{11962147822315362236ull, 518942961811904ull}}, {{13259067072594200112ull, 415154369449523ull}}, {{17985951287559180736ull, 332123495559618ull}}, {{6641429171643227238ull, 531397592895390ull}}, {{5313143337314581790ull, 425118074316312ull}}, {{15318561114077396402ull, 340094459453049ull}}, {{13441651338298103274ull, 544151135124879ull}}, {{14442669885380392942ull, 435320908099903ull}}, {{486089464078583384ull, 348256726479923ull}}, {{15535138401493374707ull, 557210762367876ull}}, {{8738761906452789443ull, 445768609894301ull}}, {{3301660710420321231ull, 356614887915441ull}}, {{17398723827303898277ull, 285291910332352ull}}, {{13080562864718595951ull, 456467056531764ull}}, {{14153799106516787084ull, 365173645225411ull}}, {{7633690470471519344ull, 292138916180329ull}}, {{1145858308528699981ull, 467422265888527ull}}, {{11984733091048690954ull, 373937812710821ull}}, {{5898437658097042440ull, 299150250168657ull}}, {{13126849067697178228ull, 478640400269851ull}}, {{6812130439415832259ull, 382912320215881ull}}, {{1760355536790755484ull, 306329856172705ull}}, {{2816568858865208774ull, 490127769876328ull}}, {{9631952716575987666ull, 392102215901062ull}}, {{326864543776969486ull, 313681772720850ull}}, {{522983270043151178ull, 501890836353360ull}}, {{418386616034520942ull, 401512669082688ull}}, {{7713406922311437400ull, 321210135266150ull}}, {{12341451075698299841ull, 513936216425840ull}}, {{9873160860558639872ull, 411148973140672ull}}, {{519831058963091251ull, 328919178512538ull}}, {{15589124953308587295ull, 526270685620060ull}}, {{12471299962646869836ull, 421016548496048ull}}, {{17355737599601316515ull, 336813238796838ull}}, {{5633087270910644485ull, 538901182074942ull}}, {{15574516260954246558ull, 431120945659953ull}}, {{1391566564537666277ull, 344896756527963ull}}, {{16983901762227907336ull, 551834810444740ull}}, {{13587121409782325868ull, 441467848355792ull}}, {{3490999498342040048ull, 353174278684634ull}}, {{6482148413415542362ull, 282539422947707ull}}, {{14060786276206778102ull, 452063076716331ull}}, {{7559280206223512158ull, 361650461373065ull}}, {{6047424164978809727ull, 289320369098452ull}}, {{13365227478708005886ull, 462912590557523ull}}, {{18070879612450225355ull, 370330072446018ull}}, {{3388657245734449315ull, 296264057956815ull}}, {{5421851593175118904ull, 474022492730904ull}}, {{8026830089282005446ull, 379217994184723ull}}, {{13800161700909425003ull, 303374395347778ull}}, {{18390909906713169682ull, 485399032556445ull}}, {{14712727925370535745ull, 388319226045156ull}}, {{8080833525554518273ull, 310655380836125ull}}, {{12929333640887229237ull, 497048609337800ull}}, {{10343466912709783390ull, 397638887470240ull}}, {{8274773530167826712ull, 318111109976192ull}}, {{16928986463010433062ull, 508977775961907ull}}, {{6164491540924525803ull, 407182220769526ull}}, {{1242244417997710319ull, 325745776615621ull}}, {{13055637513022067481ull, 521193242584993ull}}, {{17823207639901474631ull, 416954594067994ull}}, {{17947914926663090028ull, 333563675254395ull}}, {{10269919808951392429ull, 533701880407033ull}}, {{15594633476644934589ull, 426961504325626ull}}, {{8786357966574037348ull, 341569203460501ull}}, {{6679475117034639111ull, 546510725536802ull}}, {{16411626537853442258ull, 437208580429441ull}}, {{9439952415540843483ull, 349766864343553ull}}, {{11414575050123439250ull, 559626982949685ull}}, {{9131660040098751400ull, 447701586359748ull}}, {{14684025661562821766ull, 358161269087798ull}}, {{679174085024526443ull, 286529015270239ull}}, {{8465376165523062956ull, 458446424432382ull}}, {{17840347376644181335ull, 366757139545905ull}}, {{14272277901315345068ull, 293405711636724ull}}, {{11767598197878821139ull, 469449138618759ull}}, {{13103427373044967234ull, 375559310895007ull}}, {{3104044268952153141ull, 300447448716006ull}}, {{16034517274549175995ull, 480715917945609ull}}, {{16516962634381251119ull, 384572734356487ull}}, {{5834872478021180249ull, 307658187485190ull}}, {{9335795964833888398ull, 492253099976304ull}}, {{11157985586609021042ull, 393802479981043ull}}, {{16305086098771037480ull, 315041983984834ull}}, {{15020091313807928998ull, 504067174375735ull}}, {{12016073051046343199ull, 403253739500588ull}}, {{16991556070320895205ull, 322602991600470ull}}, {{8739745638803880713ull, 516164786560753ull}}, {{14370494140526925216ull, 412931829248602ull}}, {{4117697682937719527ull, 330345463398882ull}}, {{10277665107442261566ull, 528552741438211ull}}, {{4532783271211898930ull, 422842193150569ull}}, {{7315575431711429467ull, 338273754520455ull}}, {{11704920690738287147ull, 541238007232728ull}}, {{16742634182074450364ull, 432990405786182ull}}, {{6015409716175739645ull, 346392324628946ull}}, {{2245957916397362785ull, 554227719406314ull}}, {{5486115147859800551ull, 443382175525051ull}}, {{699543303545930118ull, 354705740420041ull}}, {{15317029901804385387ull, 283764592336032ull}}, {{9749852583919375327ull, 454023347737652ull}}, {{421184437651679615ull, 363218678190122ull}}, {{11404993994347074661ull, 290574942552097ull}}, {{3490595131987678166ull, 464919908083356ull}}, {{17549871364557783825ull, 371935926466684ull}}, {{17729245906388137383ull, 297548741173347ull}}, {{13609398191253378521ull, 476077985877356ull}}, {{7198169738260792493ull, 380862388701885ull}}, {{5758535790608633995ull, 304689910961508ull}}, {{5524308450231904068ull, 487503857538413ull}}, {{11798144389669343901ull, 390003086030730ull}}, {{9438515511735475121ull, 312002468824584ull}}, {{4033578374551029224ull, 499203950119335ull}}, {{3226862699640823379ull, 399363160095468ull}}, {{9960187789196479349ull, 319490528076374ull}}, {{4868254018488635990ull, 511184844922199ull}}, {{7583952029532819115ull, 408947875937759ull}}, {{9756510438368165615ull, 327158300750207ull}}, {{853021442421423692ull, 523453281200332ull}}, {{11750463598162869923ull, 418762624960265ull}}, {{9400370878530295938ull, 335010099968212ull}}, {{283198146680832208ull, 536016159949140ull}}, {{226558517344665767ull, 428812927959312ull}}, {{11249293258101463583ull, 343050342367449ull}}, {{6930822768736610763ull, 548880547787919ull}}, {{9234007029731198934ull, 439104438230335ull}}, {{7387205623784959147ull, 351283550584268ull}}, {{8130180183314024312ull, 562053680934829ull}}, {{10193492961393129773ull, 449642944747863ull}}, {{15533491998598324465ull, 359714355798290ull}}, {{12426793598878659572ull, 287771484638632ull}}, {{5125474499238214022ull, 460434375421812ull}}, {{15168426043616302187ull, 368347500337449ull}}, {{15824089649634952073ull, 294678000269959ull}}, {{14250496995190192347ull, 471484800431935ull}}, {{11400397596152153878ull, 377187840345548ull}}, {{16499015706405543748ull, 301750272276438ull}}, {{4262332241797408058ull, 482800435642302ull}}, {{14477912237663657416ull, 386240348513841ull}}, {{7892980975389015610ull, 308992278811073ull}}, {{8939420745880514653ull, 494387646097717ull}}, {{18219583040930142692ull, 395510116878173ull}}, {{3507619988518383184ull, 316408093502539ull}}, {{12990889611113233740ull, 506252949604062ull}}, {{3014014059406766346ull, 405002359683250ull}}, {{2411211247525413077ull, 324001887746600ull}}, {{3857937996040660923ull, 518403020394560ull}}, {{3086350396832528738ull, 414722416315648ull}}, {{9847777946949843637ull, 331777933052518ull}}, {{12067095900377839496ull, 530844692884029ull}}, {{13343025535044181920ull, 424675754307223ull}}, {{18053118057519166182ull, 339740603445778ull}}, {{6748896003579203953ull, 543584965513246ull}}, {{1709767988121452839ull, 434867972410597ull}}, {{12435860834722893241ull, 347894377928477ull}}, {{5139982076588987892ull, 556631004685564ull}}, {{7801334476013100637ull, 445304803748451ull}}, {{2551718766068570186ull, 356243842998761ull}}, {{16798770271822497442ull, 284995074399008ull}}, {{4741939546464533968ull, 455992119038414ull}}, {{7482900451913537497ull, 364793695230731ull}}, {{2296971546788919675ull, 291834956184585ull}}, {{3675154474862271480ull, 466935929895336ull}}, {{17697518838857458476ull, 373548743916268ull}}, {{3089968626860235811ull, 298838995133015ull}}, {{4943949802976377299ull, 478142392212824ull}}, {{7644508657123012162ull, 382513913770259ull}}, {{9804955740440320053ull, 306011131016207ull}}, {{930533925736870792ull, 489617809625932ull}}, {{11812473584815227603ull, 391694247700745ull}}, {{9449978867852182082ull, 313355398160596ull}}, {{7741268559079670686ull, 501368637056954ull}}, {{9882363662005646872ull, 401094909645563ull}}, {{15284588559088338144ull, 320875927716450ull}}, {{6008597620831789414ull, 513401484346321ull}}, {{1117529281923521208ull, 410721187477057ull}}, {{11962069869764547936ull, 328576949981645ull}}, {{692567717913725082ull, 525723119970633ull}}, {{7932751803814800712ull, 420578495976506ull}}, {{2656852628309930246ull, 336462796781205ull}}, {{4250964205295888394ull, 538340474849928ull}}, {{10779468993720531361ull, 430672379879942ull}}, {{1244877565492604443ull, 344537903903954ull}}, {{9370501734271987755ull, 551260646246326ull}}, {{3807052572675679881ull, 441008516997061ull}}, {{17803037317108185197ull, 352806813597648ull}}, {{3174383409460817188ull, 282245450878119ull}}, {{12457711084621128148ull, 451592721404990ull}}, {{9966168867696902518ull, 361274177123992ull}}, {{594237464673701368ull, 289019341699194ull}}, {{8329477572961742835ull, 462430946718710ull}}, {{6663582058369394268ull, 369944757374968ull}}, {{12709563276179336061ull, 295955805899974ull}}, {{9267254797661206728ull, 473529289439959ull}}, {{11103152652870875705ull, 378823431551967ull}}, {{1503824492812879918ull, 303058745241574ull}}, {{9784816817984428515ull, 484893992386518ull}}, {{15206551083871363459ull, 387915193909214ull}}, {{15854589681839001090ull, 310332155127371ull}}, {{17988645861458581098ull, 496531448203794ull}}, {{18080265503908775201ull, 397225158563035ull}}, {{14464212403127020161ull, 317780126850428ull}}, {{1006646956551770319ull, 508448202960686ull}}, {{15562712824209057548ull, 406758562368548ull}}, {{1382123815141515068ull, 325406849894839ull}}, {{9590095733710244756ull, 520650959831742ull}}, {{293378957484375158ull, 416520767865394ull}}, {{3924051980729410450ull, 333216614292315ull}}, {{6278483169167056720ull, 533146582867704ull}}, {{8712135350075555699ull, 426517266294163ull}}, {{14348405909544265206ull, 341213813035330ull}}, {{4510705381561272713ull, 545942100856529ull}}, {{7297913119990928494ull, 436753680685223ull}}, {{13217028125476563441ull, 349402944548178ull}}, {{17457896186020591183ull, 559044711277085ull}}, {{13966316948816472946ull, 447235769021668ull}}, {{105007114827447387ull, 357788615217335ull}}, {{84005691861957910ull, 286230892173868ull}}, {{14891804365946773949ull, 457969427478188ull}}, {{845397048531688189ull, 366375541982551ull}}, {{15433712897792991844ull, 293100433586040ull}}, {{6247196562759235335ull, 468960693737665ull}}, {{4997757250207388268ull, 375168554990132ull}}, {{15066252244391641584ull, 300134843992105ull}}, {{5659259517317074918ull, 480215750387369ull}}, {{8216756428595570258ull, 384172600309895ull}}, {{6573405142876456206ull, 307338080247916ull}}, {{3138750599118509284ull, 491740928396666ull}}, {{17268395738262448720ull, 393392742717332ull}}, {{6436018961126138329ull, 314714194173866ull}}, {{2918932708318000681ull, 503542710678186ull}}, {{17092541425622041837ull, 402834168542548ull}}, {{2605986696271902500ull, 322267334834039ull}}, {{11548276343518864647ull, 515627735734462ull}}, {{1859923445331271071ull, 412502188587570ull}}, {{1487938756265016857ull, 330001750870056ull}}, {{13448748454249757941ull, 528002801392089ull}}, {{14448347578141716676ull, 422402241113671ull}}, {{7869329247771463017ull, 337921792890937ull}}, {{16280275611176251151ull, 540674868625499ull}}, {{16713569303682911244ull, 432539894900399ull}}, {{17060204257688239318ull, 346031915920319ull}}, {{16228280368075451940ull, 553651065472511ull}}, {{9293275479718451229ull, 442920852378009ull}}, {{11123969198516671306ull, 354336681902407ull}}, {{1520477729329516398ull, 283469345521926ull}}, {{13500810811152957207ull, 453550952835081ull}}, {{7111299834180455442ull, 362840762268065ull}}, {{5689039867344364354ull, 290272609814452ull}}, {{12791812602492893290ull, 464436175703123ull}}, {{17612147711478135278ull, 371548940562498ull}}, {{3021671724956777253ull, 297239152449999ull}}, {{12213372389414664251ull, 475582643919998ull}}, {{17149395541015552047ull, 380466115135998ull}}, {{2651469988586710668ull, 304372892108799ull}}, {{11621049611222557716ull, 486996627374078ull}}, {{16675537318461866819ull, 389597301899262ull}}, {{5961732225285672808ull, 311677841519410ull}}, {{9538771560457076494ull, 498684546431056ull}}, {{3941668433623750872ull, 398947637144845ull}}, {{3153334746899000697ull, 319158109715876ull}}, {{16113382039264132086ull, 510652975545401ull}}, {{9201356816669395345ull, 408522380436321ull}}, {{3671736638593605953ull, 326817904349057ull}}, {{9564127436491679848ull, 522908646958491ull}}, {{3961953134451433555ull, 418326917566793ull}}, {{10548260137044967490ull, 334661534053434ull}}, {{5809169775046217015ull, 535458454485495ull}}, {{4647335820036973612ull, 428366763588396ull}}, {{28519841287668566ull, 342693410870717ull}}, {{3734980560802180030ull, 548309457393147ull}}, {{14056030892867474993ull, 438647565914517ull}}, {{3866127084810159348ull, 350918052731614ull}}, {{13564500965180075604ull, 561468884370582ull}}, {{3472903142660239837ull, 449175107496466ull}}, {{17535717773095833162ull, 359340085997172ull}}, {{6649876588992845883ull, 287472068797738ull}}, {{6950453727646643090ull, 459955310076381ull}}, {{1871014167375404149ull, 367964248061105ull}}, {{1496811333900323319ull, 294371398448884ull}}, {{9773595763724337957ull, 470994237518214ull}}, {{11508225425721380689ull, 376795390014571ull}}, {{5517231525835194228ull, 301436312011657ull}}, {{12516919256078221088ull, 482298099218651ull}}, {{6324186590120666547ull, 385838479374921ull}}, {{1370000457354622914ull, 308670783499937ull}}, {{5881349546509306986ull, 493873253599899ull}}, {{8394428451949355912ull, 395098602879919ull}}, {{10404891576301395053ull, 316078882303935ull}}, {{16647826522082232085ull, 505726211686296ull}}, {{9628912402923875344ull, 404580969349037ull}}, {{324432292855279629ull, 323664775479230ull}}, {{519091668568447407ull, 517863640766768ull}}, {{7793970964338578572ull, 414290912613414ull}}, {{9924525586212773180ull, 331432730090731ull}}, {{8500543308456616443ull, 530292368145170ull}}, {{6800434646765293154ull, 424233894516136ull}}, {{1750998902670324200ull, 339387115612909ull}}, {{10180295873756339367ull, 543019384980654ull}}, {{11833585513746981816ull, 434415507984523ull}}, {{16845566040481406099ull, 347532406387618ull}}, {{4816812776318787820ull, 556051850220190ull}}, {{3853450221055030256ull, 444841480176152ull}}, {{14150806621069755174ull, 355873184140921ull}}, {{7631296482113893816ull, 284698547312737ull}}, {{15899423186124140429ull, 455517675700379ull}}, {{16408887363641222667ull, 364414140560303ull}}, {{2059063446687247164ull, 291531312448243ull}}, {{18051896773667236755ull, 466450099917188ull}}, {{3373470974708058434ull, 373160079933751ull}}, {{17456172038734088040ull, 298528063947000ull}}, {{9483131188264989248ull, 477644902315201ull}}, {{3897156135870081075ull, 382115921852161ull}}, {{17875120167663706153ull, 305692737481728ull}}, {{6464099379810467906ull, 489108379970766ull}}, {{1481930689106464001ull, 391286703976613ull}}, {{8564242180768991847ull, 313029363181290ull}}, {{13702787489230386956ull, 500846981090064ull}}, {{14651578806126219888ull, 400677584872051ull}}, {{8031914230159065587ull, 320542067897641ull}}, {{5472365138770684293ull, 512867308636226ull}}, {{688543296274637111ull, 410293846908981ull}}, {{15308229895987350982ull, 328235077527184ull}}, {{13425121389354030601ull, 525176124043495ull}}, {{10740097111483224481ull, 420140899234796ull}}, {{4902728874444669262ull, 336112719387837ull}}, {{11533715013853381142ull, 537780351020539ull}}, {{12916320825824615237ull, 430224280816431ull}}, {{6643707845917781866ull, 344179424653145ull}}, {{10629932553468450986ull, 550687079445032ull}}, {{1125248413290940142ull, 440549663556026ull}}, {{15657593989600393407ull, 352439730844820ull}}, {{12526075191680314725ull, 281951784675856ull}}, {{12663022677204682914ull, 451122855481370ull}}, {{10130418141763746331ull, 360898284385096ull}}, {{4414985698669086742ull, 288718627508077ull}}, {{10753325932612449110ull, 461949804012923ull}}, {{15981358375573779934ull, 369559843210338ull}}, {{1717040256233292978ull, 295647874568271ull}}, {{13815310854198999734ull, 473036599309233ull}}, {{18430946312843020434ull, 378429279447386ull}}, {{11055408235532506024ull, 302743423557909ull}}, {{6620606732626278669ull, 484389477692655ull}}, {{5296485386101022935ull, 387511582154124ull}}, {{7926537123622728671ull, 310009265723299ull}}, {{1614412953570634904ull, 496014825157279ull}}, {{4980879177598418247ull, 396811860125823ull}}, {{11363400971562555244ull, 317449488100658ull}}, {{14492092739758178067ull, 507919180961053ull}}, {{525627747580811484ull, 406335344768843ull}}, {{7799199827548469833ull, 325068275815074ull}}, {{1410673279851820764ull, 520109241304119ull}}, {{4817887438623366934ull, 416087393043295ull}}, {{3854309950898693547ull, 332869914434636ull}}, {{17234942365663640646ull, 532591863095417ull}}, {{6409256263047091870ull, 426073490476334ull}}, {{8816753825179583819ull, 340858792381067ull}}, {{17796154935029244434ull, 545374067809707ull}}, {{6858226318539574901ull, 436299254247766ull}}, {{1797232240089749597ull, 349039403398213ull}}, {{17632966843111240649ull, 558463045437140ull}}, {{14106373474488992519ull, 446770436349712ull}}, {{3906401150107373369ull, 357416349079770ull}}, {{3125120920085898695ull, 285933079263816ull}}, {{16068239916363168882ull, 457492926822105ull}}, {{12854591933090535105ull, 365994341457684ull}}, {{13973022361214338407ull, 292795473166147ull}}, {{7599440518975300159ull, 468472757065836ull}}, {{2390203600438329804ull, 374778205652669ull}}, {{5601511695092574166ull, 299822564522135ull}}, {{8962418712148118666ull, 479716103235416ull}}, {{3480586154976584610ull, 383772882588333ull}}, {{10163166553465088334ull, 307018306070666ull}}, {{8882368856060320688ull, 491229289713066ull}}, {{3416546270106346227ull, 392983431770453ull}}, {{10111934645568897628ull, 314386745416362ull}}, {{1421700173942594913ull, 503018792666180ull}}, {{1137360139154075930ull, 402415034132944ull}}, {{4599236926065171067ull, 321932027306355ull}}, {{7358779081704273708ull, 515091243690168ull}}, {{13265720894847239612ull, 412072994952134ull}}, {{14301925530619702013ull, 329658395961707ull}}, {{8125685590023881928ull, 527453433538732ull}}, {{17568594916244836512ull, 421962746830985ull}}, {{14054875932995869210ull, 337570197464788ull}}, {{351708604341928797ull, 540112315943662ull}}, {{11349413327699274007ull, 432089852754929ull}}, {{12768879476901329529ull, 345671882203943ull}}, {{16740858348300216923ull, 553075011526309ull}}, {{17082035493382083861ull, 442460009221047ull}}, {{6286930765221846443ull, 353968007376838ull}}, {{12408242241661297800ull, 283174405901470ull}}, {{1406443512948524865ull, 453079049442353ull}}, {{8503852439842640538ull, 362463239553882ull}}, {{17871128396099843400ull, 289970591643105ull}}, {{10147061360050197824ull, 463952946628969ull}}, {{11806997902782068583ull, 371162357303175ull}}, {{9445598322225654866ull, 296929885842540ull}}, {{15112957315561047786ull, 475087817348064ull}}, {{15779714667190748552ull, 380070253878451ull}}, {{8934422919010688518ull, 304056203102761ull}}, {{6916379040933280983ull, 486489924964418ull}}, {{12911800862230445433ull, 389191939971534ull}}, {{14018789504526266669ull, 311353551977227ull}}, {{7672667948274385378ull, 498165683163564ull}}, {{9827483173361418626ull, 398532546530851ull}}, {{4172637723947224577ull, 318826037224681ull}}, {{17744266802541290293ull, 510121659559489ull}}, {{17884762256774942558ull, 408097327647591ull}}, {{10618460990678043723ull, 326477862118073ull}}, {{13300188770342959634ull, 522364579388917ull}}, {{3261453386790547061ull, 417891663511134ull}}, {{6298511524174347972ull, 334313330808907ull}}, {{13766967253420867078ull, 534901329294251ull}}, {{7324224987994783339ull, 427921063435401ull}}, {{2170031175653916348ull, 342336850748321ull}}, {{14540096325271997127ull, 547738961197313ull}}, {{564030615991866732ull, 438191168957851ull}}, {{15208619751761134678ull, 350552935166280ull}}, {{5887047529108263869ull, 560884696266049ull}}, {{8398986838028521418ull, 448707757012839ull}}, {{10408538285164727458ull, 358966205610271ull}}, {{4637481813389871643ull, 287172964488217ull}}, {{11109319716165704952ull, 459476743181147ull}}, {{1508758143448743315ull, 367581394544918ull}}, {{8585704144242815299ull, 294065115635934ull}}, {{2669080186562773508ull, 470504185017495ull}}, {{2135264149250218807ull, 376403348013996ull}}, {{16465606578367816338ull, 301122678411196ull}}, {{519528822195133879ull, 481796285457915ull}}, {{415623057756107103ull, 385437028366332ull}}, {{11400544890430616652ull, 308349622693065ull}}, {{18240871824688986643ull, 493359396308904ull}}, {{18282046274493099638ull, 394687517047123ull}}, {{3557590575368748740ull, 315750013637699ull}}, {{13070842550073818631ull, 505200021820318ull}}, {{17835371669542875551ull, 404160017456254ull}}, {{17957646150376210764ull, 323328013965003ull}}, {{6596140952150475284ull, 517324822344006ull}}, {{1587563946978469904ull, 413859857875205ull}}, {{1270051157582775923ull, 331087886300164ull}}, {{9410779481616262123ull, 529740618080262ull}}, {{149925955809189052ull, 423792494464210ull}}, {{119940764647351242ull, 339033995571368ull}}, {{14949300482403403280ull, 542454392914188ull}}, {{891393941696991654ull, 433963514331351ull}}, {{15470510412325234616ull, 347170811465080ull}}, {{6306072586010823770ull, 555473298344129ull}}, {{8734206883550569339ull, 444378638675303ull}}, {{14366063136324276117ull, 355502910940242ull}}, {{4114152879575600247ull, 284402328752194ull}}, {{13961342236804781043ull, 455043726003510ull}}, {{11169073789443824834ull, 364034980802808ull}}, {{16313956661038880514ull, 291227984642246ull}}, {{276888954468836560ull, 465964775427595ull}}, {{221511163575069248ull, 372771820342076ull}}, {{14934604189827696691ull, 298217456273660ull}}, {{5448622630014763089ull, 477147930037857ull}}, {{15426944548237541441ull, 381718344030285ull}}, {{12341555638590033153ull, 305374675224228ull}}, {{16057140207002142722ull, 488599480358765ull}}, {{12845712165601714177ull, 390879584287012ull}}, {{2897872102997550695ull, 312703667429610ull}}, {{4636595364796081113ull, 500325867887376ull}}, {{19927477094954567ull, 400260694309901ull}}, {{14773337240643604946ull, 320208555447920ull}}, {{5190595511320216298ull, 512333688716673ull}}, {{11531174038539993685ull, 409866950973338ull}}, {{16603636860315815594ull, 327893560778670ull}}, {{8119074902795753335ull, 524629697245873ull}}, {{13873957551720423314ull, 419703757796698ull}}, {{31119597150607682ull, 335763006237359ull}}, {{7428488984924792937ull, 537220809979774ull}}, {{9632140002681744673ull, 429776647983819ull}}, {{11395060816887306061ull, 343821318387055ull}}, {{18232097307019689699ull, 550114109419288ull}}, {{3517631401390020789ull, 440091287535431ull}}, {{17571500380079657924ull, 352073030028344ull}}, {{17746549118805636662ull, 281658424022675ull}}, {{9947734516379467044ull, 450653478436281ull}}, {{4268838798361663312ull, 360522782749025ull}}, {{3415071038689330649ull, 288418226199220ull}}, {{5464113661902929039ull, 461469161918752ull}}, {{15439337373748074201ull, 369175329535001ull}}, {{8662121084256549038ull, 295340263628001ull}}, {{6480696105326657814ull, 472544421804802ull}}, {{16252603328487057221ull, 378035537443841ull}}, {{9312733848047735453ull, 302428429955073ull}}, {{11211025342134466402ull, 483885487928117ull}}, {{1590122644223752475ull, 387108390342494ull}}, {{4961446930120912303ull, 309686712273995ull}}, {{7938315088193459686ull, 495498739638392ull}}, {{17418698514780498718ull, 396398991710713ull}}, {{2866912367598668005ull, 317119193368571ull}}, {{15655106232383599778ull, 507390709389713ull}}, {{1456038541681148852ull, 405912567511771ull}}, {{15922226092312560375ull, 324730054009416ull}}, {{18096864118216275953ull, 519568086415066ull}}, {{10788142479831110439ull, 415654469132053ull}}, {{16009211613348708998ull, 332523575305642ull}}, {{10857343322390293104ull, 532037720489028ull}}, {{16064572287396055129ull, 425630176391222ull}}, {{5472960200433023457ull, 340504141112978ull}}, {{5067387505950927208ull, 544806625780765ull}}, {{4053910004760741767ull, 435845300624612ull}}, {{14311174448034324383ull, 348676240499689ull}}, {{11829832672629188043ull, 557881984799503ull}}, {{16842563767587171081ull, 446305587839602ull}}, {{6095353384585916218ull, 357044470271682ull}}, {{15944329151894463944ull, 285635576217345ull}}, {{7064182569321590695ull, 457016921947753ull}}, {{13030043684941093202ull, 365613537558202ull}}, {{3045337318469053915ull, 292490830046562ull}}, {{8561888524292396588ull, 467985328074499ull}}, {{10538859634175827593ull, 374388262459599ull}}, {{12120436522082572398ull, 299510609967679ull}}, {{8324651991106384867ull, 479216975948287ull}}, {{17727768037110838863ull, 383373580758629ull}}, {{17871563244430581414ull, 306698864606903ull}}, {{6458408302637468323ull, 490718183371046ull}}, {{1477377827368064335ull, 392574546696837ull}}, {{12249948706120182437ull, 314059637357469ull}}, {{8531871485566560931ull, 502495419771951ull}}, {{3136148373711338421ull, 401996335817561ull}}, {{17266313957936712030ull, 321597068654048ull}}, {{5490009444247277309ull, 514555309846478ull}}, {{11770705184881642493ull, 411644247877182ull}}, {{2037866518421493348ull, 329315398301746ull}}, {{14328632873700120327ull, 526904637282793ull}}, {{394859854734365292ull, 421523709826235ull}}, {{315887883787492233ull, 337218967860988ull}}, {{15262815873027628866ull, 539550348577580ull}}, {{12210252698422103093ull, 431640278862064ull}}, {{13457550973479592797ull, 345312223089651ull}}, {{14153383928083527830ull, 552499556943442ull}}, {{3944009512983001617ull, 441999645554754ull}}, {{6844556425128311617ull, 353599716443803ull}}, {{12854342769586469940ull, 282879773155042ull}}, {{5809553172370710611ull, 452607637048068ull}}, {{12026340167380389135ull, 362086109638454ull}}, {{13310420948646221631ull, 289668887710763ull}}, {{17607324703092044287ull, 463470220337221ull}}, {{10396510947731725107ull, 370776176269777ull}}, {{938511128701559439ull, 296620941015822ull}}, {{5190966620664405426ull, 474593505625315ull}}, {{4152773296531524340ull, 379674804500252ull}}, {{14390265081450950442ull, 303739843600201ull}}, {{15645726500837700061ull, 485983749760322ull}}, {{5137883571186339402ull, 388786999808258ull}}, {{11489004486432892168ull, 311029599846606ull}}, {{11003709548808806823ull, 497647359754570ull}}, {{8802967639047045458ull, 398117887803656ull}}, {{3353025296495726043ull, 318494310242925ull}}, {{5364840474393161669ull, 509590896388680ull}}, {{4291872379514529335ull, 407672717110944ull}}, {{7122846718353533791ull, 326138173688755ull}}, {{11396554749365654066ull, 521821077902008ull}}, {{16495941428976343899ull, 417456862321606ull}}, {{9507404328439164796ull, 333965489857285ull}}, {{15211846925502663674ull, 534344783771656ull}}, {{8480128725660220616ull, 427475827017325ull}}, {{6784102980528176493ull, 341980661613860ull}}, {{10854564768845082389ull, 547169058582176ull}}, {{4994303000334155588ull, 437735246865741ull}}, {{306093585525414147ull, 350188197492593ull}}, {{15247144995808303928ull, 560301115988148ull}}, {{1129669552420912173ull, 448240892790519ull}}, {{4593084456678640061ull, 358592714232415ull}}, {{3674467565342912049ull, 286874171385932ull}}, {{9568496919290569602ull, 458998674217491ull}}, {{3965448720690545358ull, 367198939373993ull}}, {{10551056606036256933ull, 293759151499194ull}}, {{5813644125432280123ull, 470014642398711ull}}, {{961566485603913775ull, 376011713918969ull}}, {{4458602003225041343ull, 300809371135175ull}}, {{7133763205160066150ull, 481294993816280ull}}, {{5707010564128052920ull, 385035995053024ull}}, {{8254957266044352659ull, 308028796042419ull}}, {{2139885181445233285ull, 492846073667871ull}}, {{16469303404123827921ull, 394276858934296ull}}, {{9486093908557152013ull, 315421487147437ull}}, {{420354994723801929ull, 504674379435900ull}}, {{336283995779041543ull, 403739503548720ull}}, {{269027196623233234ull, 322991602838976ull}}, {{11498489958822904144ull, 516786564542361ull}}, {{5509443152316412992ull, 413429251633889ull}}, {{8096903336595040717ull, 330743401307111ull}}, {{5576347709068244501ull, 529189442091378ull}}, {{11839775796738416247ull, 423351553673102ull}}, {{2093123007906912351ull, 338681242938482ull}}, {{7038345627392970085ull, 541889988701571ull}}, {{1941327687172465745ull, 433511990961257ull}}, {{12621108593963703565ull, 346809592769005ull}}, {{1747029676632374089ull, 554895348430409ull}}, {{5086972556047809594ull, 443916278744327ull}}, {{15137624489063978645ull, 355133022995461ull}}, {{8420750776509272593ull, 284106418396369ull}}, {{2405154798189105179ull, 454570269434191ull}}, {{16681519097518925436ull, 363656215547352ull}}, {{5966517648531319702ull, 290924972437882ull}}, {{13235777052392021847ull, 465479955900611ull}}, {{6899272827171707154ull, 372383964720489ull}}, {{9208767076479276047ull, 297907171776391ull}}, {{7355329692883021028ull, 476651474842226ull}}, {{2194914939564506499ull, 381321179873781ull}}, {{16513327210619246492ull, 305056943899024ull}}, {{15353277092765063418ull, 488091110238439ull}}, {{15971970488953961058ull, 390472888190751ull}}, {{9088227576421258523ull, 312378310552601ull}}, {{7162466492790192990ull, 499805296884162ull}}, {{16798019638457885362ull, 399844237507329ull}}, {{17127764525508218613ull, 319875390005863ull}}, {{5268330352361687841ull, 511800624009382ull}}, {{15282710726115081243ull, 409440499207505ull}}, {{12226168580892064994ull, 327552399366004ull}}, {{8493823285201573021ull, 524083838985607ull}}, {{17863105072386989386ull, 419267071188485ull}}, {{14290484057909591509ull, 335413656950788ull}}, {{728681604203884475ull, 536661851121262ull}}, {{11650991727588838550ull, 429329480897009ull}}, {{13010142196812981163ull, 343463584717607ull}}, {{6058832255933128568ull, 549541735548172ull}}, {{15915112248972233824ull, 439633388438537ull}}, {{5353392169693966413ull, 351706710750830ull}}, {{8565427471510346261ull, 562730737201328ull}}, {{14231039606692097655ull, 450184589761062ull}}, {{4006134055869857477ull, 360147671808850ull}}, {{3204907244695885982ull, 288118137447080ull}}, {{5127851591513417571ull, 460989019915328ull}}, {{11480978902694554703ull, 368791215932262ull}}, {{1806085492671823116ull, 295032972745810ull}}, {{2889736788274916986ull, 472052756393296ull}}, {{17069184689587574882ull, 377642205114636ull}}, {{9965998936928149582ull, 302113764091709ull}}, {{4877551854859308362ull, 483382022546735ull}}, {{3902041483887446689ull, 386705618037388ull}}, {{10500330816593777998ull, 309364494429910ull}}, {{16800529306550044797ull, 494983191087856ull}}, {{9751074630498125514ull, 395986552870285ull}}, {{7800859704398500411ull, 316789242296228ull}}, {{8792026712295690335ull, 506862787673965ull}}, {{7033621369836552268ull, 405490230139172ull}}, {{16694943540094972784ull, 324392184111337ull}}, {{11954514405184315162ull, 519027494578140ull}}, {{9563611524147452129ull, 415221995662512ull}}, {{272191589834141057ull, 332177596530010ull}}, {{435506543734625691ull, 531484154448016ull}}, {{15105800493955341846ull, 425187323558412ull}}, {{4705942765680452830ull, 340149858846730ull}}, {{7529508425088724528ull, 544239774154768ull}}, {{13402304369554800269ull, 435391819323814ull}}, {{14411192310385750538ull, 348313455459051ull}}, {{15679210067133380215ull, 557301528734482ull}}, {{5164670424222883526ull, 445841222987586ull}}, {{442387524636396497ull, 356672978390069ull}}, {{4043258834451027521ull, 285338382712055ull}}, {{6469214135121644034ull, 456541412339288ull}}, {{12554068937581135873ull, 365233129871430ull}}, {{10043255150064908699ull, 292186503897144ull}}, {{5001161795878122948ull, 467498406235431ull}}, {{311580621960588035ull, 373998724988345ull}}, {{249264497568470428ull, 299198979990676ull}}, {{11466869640335283655ull, 478718367985081ull}}, {{5484146897526316601ull, 382974694388065ull}}, {{4387317518021053280ull, 306379755510452ull}}, {{10709056843575595572ull, 490207608816723ull}}, {{15945943104344297104ull, 392166087053378ull}}, {{1688708039249706714ull, 313732869642703ull}}, {{17459328121767172035ull, 501972591428324ull}}, {{17656811312155647951ull, 401578073142659ull}}, {{17814797864466428684ull, 321262458514127ull}}, {{13746281324178644602ull, 514019933622604ull}}, {{14686373874084826004ull, 411215946898083ull}}, {{681052655042129834ull, 328972757518467ull}}, {{4779033062809318058ull, 526356412029547ull}}, {{14891272894473185416ull, 421085129623637ull}}, {{4534320686094727686ull, 336868103698910ull}}, {{7254913097751564298ull, 538988965918256ull}}, {{2114581663459341115ull, 431191172734605ull}}, {{1691665330767472892ull, 344952938187684ull}}, {{10085362158711777274ull, 551924701100294ull}}, {{11757638541711332142ull, 441539760880235ull}}, {{9406110833369065714ull, 353231808704188ull}}, {{14903586296179073217ull, 282585446963350ull}}, {{5398994000176965532ull, 452136715141361ull}}, {{629846385399662102ull, 361709372113089ull}}, {{4193225923061640005ull, 289367497690471ull}}, {{17777207921124354978ull, 462987996304753ull}}, {{3153719892673753012ull, 370390397043803ull}}, {{9901673543622823056ull, 296312317635042ull}}, {{1085282410828875597ull, 474099708216068ull}}, {{8246923558146921124ull, 379279766572854ull}}, {{10286887661259447222ull, 303423813258283ull}}, {{12769671443273205233ull, 485478101213253ull}}, {{17594434784102384833ull, 388382480970602ull}}, {{6696850197798087220ull, 310705984776482ull}}, {{14404309131218849875ull, 497129575642371ull}}, {{7834098490233169577ull, 397703660513897ull}}, {{17335325236412266631ull, 318162928411117ull}}, {{12979125119291985317ull, 509060685457788ull}}, {{17761997724917408900ull, 407248548366230ull}}, {{14209598179933927120ull, 325798838692984ull}}, {{11667310643668552422ull, 521278141908775ull}}, {{9333848514934841938ull, 417022513527020ull}}, {{7467078811947873550ull, 333618010821616ull}}, {{4568628469632777034ull, 533788817314586ull}}, {{18412298034673862920ull, 427031053851668ull}}, {{3661791983513359366ull, 341624843081335ull}}, {{5858867173621374986ull, 546599748930136ull}}, {{997744924155189666ull, 437279799144109ull}}, {{4487544754066062056ull, 349823839315287ull}}, {{10869420421247609613ull, 559718142904459ull}}, {{12384885151739998013ull, 447774514323567ull}}, {{2529210491908177764ull, 358219611458854ull}}, {{5712717208268452534ull, 286575689167083ull}}, {{5450998718487613732ull, 458521102667333ull}}, {{11739496604273911632ull, 366816882133866ull}}, {{5702248468677218982ull, 293453505707093ull}}, {{5434248735141640049ull, 469525609131349ull}}, {{8036747802855222362ull, 375620487305079ull}}, {{10118747057026088213ull, 300496389844063ull}}, {{12500646476499830818ull, 480794223750501ull}}, {{6311168366457954331ull, 384635379000401ull}}, {{1359585878424453141ull, 307708303200321ull}}, {{13243383849704855996ull, 492333285120513ull}}, {{17973404709247705443ull, 393866628096410ull}}, {{14378723767398164354ull, 315093302477128ull}}, {{869865139385601028ull, 504149283963406ull}}, {{15453287370476122115ull, 403319427170724ull}}, {{16051978711122808015ull, 322655541736579ull}}, {{14615119493570761855ull, 516248866778527ull}}, {{4313397965372788838ull, 412999093422822ull}}, {{14518764816523962040ull, 330399274738257ull}}, {{8472628447470697971ull, 528638839581212ull}}, {{17846149202202289346ull, 422911071664969ull}}, {{17966268176503741800ull, 338328857331975ull}}, {{10299285008696435264ull, 541326171731161ull}}, {{4550079192215237888ull, 433060937384929ull}}, {{7329412168514100634ull, 346448749907943ull}}, {{8037710654880650691ull, 554317999852709ull}}, {{10119517338646430876ull, 443454399882167ull}}, {{716916241433324054ull, 354763519905734ull}}, {{4262881807888569566ull, 283810815924587ull}}, {{10509959707363621630ull, 454097305479339ull}}, {{12097316580632807627ull, 363277844383471ull}}, {{5988504449764335778ull, 290622275506777ull}}, {{13270955934364847569ull, 464995640810843ull}}, {{17995462376975698701ull, 371996512648674ull}}, {{18085718716322469284ull, 297597210118939ull}}, {{17869103501890219885ull, 476155536190303ull}}, {{3227236357286444938ull, 380924428952243ull}}, {{9960486715312976597ull, 304739543161794ull}}, {{4868732300275031586ull, 487583269058871ull}}, {{205637025478114945ull, 390066615247097ull}}, {{11232556064608222926ull, 312053292197677ull}}, {{3214694444405515389ull, 499285267516284ull}}, {{6261104370266322634ull, 399428214013027ull}}, {{16076929940438789077ull, 319542571210421ull}}, {{18344390275218241877ull, 511268113936674ull}}, {{18364861034916503825ull, 409014491149339ull}}, {{18381237642675113383ull, 327211592919471ull}}, {{3584538525086809150ull, 523538548671155ull}}, {{2867630820069447320ull, 418830838936924ull}}, {{5983453470797468179ull, 335064671149539ull}}, {{16952223182759769734ull, 536103473839262ull}}, {{6183080916723995140ull, 428882779071410ull}}, {{4946464733379196112ull, 343106223257128ull}}, {{4224994758664803457ull, 548969957211405ull}}, {{3379995806931842765ull, 439175965769124ull}}, {{6393345460287384535ull, 351340772615299ull}}, {{17608050365943635903ull, 562145236184478ull}}, {{3018393848529177753ull, 449716188947583ull}}, {{9793412708307162849ull, 359772951158066ull}}, {{4145381351903819956ull, 287818360926453ull}}, {{2943261348304201606ull, 460509377482325ull}}, {{2354609078643361285ull, 368407501985860ull}}, {{1883687262914689028ull, 294726001588688ull}}, {{17771294879631143737ull, 471561602541900ull}}, {{14217035903704914990ull, 377249282033520ull}}, {{11373628722963931992ull, 301799425626816ull}}, {{10819108327258470541ull, 482879081002906ull}}, {{4965937847064866109ull, 386303264802325ull}}, {{3972750277651892887ull, 309042611841860ull}}, {{6356400444243028620ull, 494468178946976ull}}, {{1395771540652512573ull, 395574543157581ull}}, {{15874012491489651351ull, 316459634526064ull}}, {{14330373542157711192ull, 506335415241703ull}}, {{396252389500437984ull, 405068332193363ull}}, {{7695699541084171033ull, 324054665754690ull}}, {{12313119265734673654ull, 518487465207504ull}}, {{13539844227329649246ull, 414789972166003ull}}, {{18210573011347540043ull, 331831977732802ull}}, {{14379521559188422777ull, 530931164372484ull}}, {{15192966062092648544ull, 424744931497987ull}}, {{4775675220190298189ull, 339795945198390ull}}, {{7641080352304477103ull, 543673512317424ull}}, {{9802213096585492005ull, 434938809853939ull}}, {{11531119292010303927ull, 347951047883151ull}}, {{11071093237732665638ull, 556721676613042ull}}, {{1478176960702311864ull, 445377341290434ull}}, {{4871890383303759814ull, 356301873032347ull}}, {{14965558750868738821ull, 285041498425877ull}}, {{9187498742422340821ull, 456066397481404ull}}, {{11039347808679782980ull, 364853117985123ull}}, {{16210175876427647030ull, 291882494388098ull}}, {{3800188513832773309ull, 467011991020958ull}}, {{10418848440550039293ull, 373609592816766ull}}, {{4645729937698121111ull, 298887674253413ull}}, {{3743819085575083455ull, 478220278805461ull}}, {{17752450527427708057ull, 382576223044368ull}}, {{3133913977716435476ull, 306060978435495ull}}, {{5014262364346296762ull, 489697565496792ull}}, {{15079456335702768379ull, 391758052397433ull}}, {{995518624336483733ull, 313406441917947ull}}, {{5282178613680284297ull, 501450307068715ull}}, {{4225742890944227438ull, 401160245654972ull}}, {{14448640756981112920ull, 320928196523977ull}}, {{8360429952202139379ull, 513485114438364ull}}, {{10377692776503621826ull, 410788091550691ull}}, {{4612805406460987138ull, 328630473240553ull}}, {{3691139835595669097ull, 525808757184885ull}}, {{2952911868476535278ull, 420647005747908ull}}, {{9741027124265048868ull, 336517604598326ull}}, {{8206945769340257543ull, 538428167357322ull}}, {{17633603059697937004ull, 430742533885857ull}}, {{6728184818274528957ull, 344594027108686ull}}, {{3386398079755425685ull, 551350443373898ull}}, {{10087816093288161194ull, 441080354699118ull}}, {{15448950504114349602ull, 352864283759294ull}}, {{16048509218033390004ull, 282291427007435ull}}, {{7230870675143872391ull, 451666283211897ull}}, {{16852742984340828883ull, 361333026569517ull}}, {{6103496757988842460ull, 289066421255614ull}}, {{17144292442265968582ull, 462506274008982ull}}, {{6336736324328954219ull, 370005019207186ull}}, {{1380040244721253052ull, 296004015365749ull}}, {{9586762021037825530ull, 473606424585198ull}}, {{15048107246314081070ull, 378885139668158ull}}, {{970439352825533886ull, 303108111734527ull}}, {{5242051779262764542ull, 484972978775243ull}}, {{11572339052894032280ull, 387978383020194ull}}, {{12947220057057136147ull, 310382706416155ull}}, {{2268808017581866219ull, 496612330265849ull}}, {{5504395228807403299ull, 397289864212679ull}}, {{8092864997787832962ull, 317831891370143ull}}, {{9259235181718622416ull, 508531026192229ull}}, {{11096736960116808256ull, 406824820953783ull}}, {{16256087197577267251ull, 325459856763026ull}}, {{184297812930255340ull, 520735770820843ull}}, {{7526135879828024918ull, 416588616656674ull}}, {{9710257518604330258ull, 333270893325339ull}}, {{4468365585541197443ull, 533233429320543ull}}, {{10953390097916778601ull, 426586743456434ull}}, {{12452060893075333204ull, 341269394765147ull}}, {{5165902169952891833ull, 546031031624236ull}}, {{443372921220403143ull, 436824825299389ull}}, {{4044047151718232838ull, 349459860239511ull}}, {{17538521886974903510ull, 559135776383217ull}}, {{6652119880096102162ull, 447308621106574ull}}, {{9011044718818792053ull, 357846896885259ull}}, {{10898184589796943965ull, 286277517508207ull}}, {{2679700084707469052ull, 458044028013132ull}}, {{13211806511991706211ull, 366435222410505ull}}, {{10569445209593364969ull, 293148177928404ull}}, {{5843065891123652980ull, 469037084685447ull}}, {{15742499157124653354ull, 375229667748357ull}}, {{5215301696215902037ull, 300183734198686ull}}, {{965785084461622612ull, 480293974717898ull}}, {{8151325697053118736ull, 384235179774318ull}}, {{13899758187126315635ull, 307388143819454ull}}, {{11171566655176374047ull, 491821030111127ull}}, {{1558555694657278591ull, 393456824088902ull}}, {{12314890999951553842ull, 314765459271121ull}}, {{12325127970438665502ull, 503624734833794ull}}, {{13549451191092842725ull, 402899787867035ull}}, {{10839560952874274180ull, 322319830293628ull}}, {{13653948709856928364ull, 515711728469805ull}}, {{10923158967885542691ull, 412569382775844ull}}, {{12427875989050344476ull, 330055506220675ull}}, {{1437857508770999546ull, 528088809953081ull}}, {{15907681265984440930ull, 422471047962464ull}}, {{16415493827529463067ull, 337976838369971ull}}, {{439348420853768645ull, 540762941391955ull}}, {{351478736683014916ull, 432610353113564ull}}, {{3970531804088322256ull, 346088282490851ull}}, {{17420897330767046579ull, 553741251985361ull}}, {{10247369049871726940ull, 442993001588289ull}}, {{11887244054639291875ull, 354394401270631ull}}, {{5820446428969523177ull, 283515521016505ull}}, {{9312714286351237083ull, 453624833626408ull}}, {{14828869058564810313ull, 362899866901126ull}}, {{8173746432109937927ull, 290319893520901ull}}, {{5699296661892080037ull, 464511829633442ull}}, {{15627483773739394999ull, 371609463706753ull}}, {{1433940574765785030ull, 297287570965403ull}}, {{17051700178592897340ull, 475660113544644ull}}, {{17330708957616228195ull, 380528090835715ull}}, {{13864567166092982556ull, 304422472668572ull}}, {{7425912206781130798ull, 487075956269716ull}}, {{2251380950682994315ull, 389660765015773ull}}, {{9179802390030216098ull, 311728612012618ull}}, {{10998335009306435434ull, 498765779220189ull}}, {{12488016822187058670ull, 399012623376151ull}}, {{6301064643007736613ull, 319210098700921ull}}, {{2703005799328557935ull, 510736157921474ull}}, {{5851753454204756671ull, 408588926337179ull}}, {{8370751578105715660ull, 326871141069743ull}}, {{9703853710227234733ull, 522993825711589ull}}, {{11452431782923698109ull, 418395060569271ull}}, {{5472596611597048164ull, 334716048455417ull}}, {{12445503393297187386ull, 535545677528667ull}}, {{2577705085153929262ull, 428436542022934ull}}, {{5751512882865053733ull, 342749233618347ull}}, {{12891769427325996296ull, 548398773789355ull}}, {{10313415541860797037ull, 438719019031484ull}}, {{11940081248230547953ull, 350975215225187ull}}, {{4346734738201235432ull, 561560344360300ull}}, {{3477387790560988345ull, 449248275488240ull}}, {{2781910232448790676ull, 359398620390592ull}}, {{13293574630184763510ull, 287518896312473ull}}, {{17580370593553711294ull, 460030234099957ull}}, {{6685598845359148388ull, 368024187279966ull}}, {{1659130261545408387ull, 294419349823973ull}}, {{17412003677440294713ull, 471070959718356ull}}, {{10240254127210325447ull, 376856767774685ull}}, {{8192203301768260358ull, 301485414219748ull}}, {{9418176468087306249ull, 482376662751597ull}}, {{155843544986024353ull, 385901330201278ull}}, {{7503372465472640129ull, 308721064161022ull}}, {{15694744759498134529ull, 493953702657635ull}}, {{12555795807598507623ull, 395162962126108ull}}, {{17423334275562626745ull, 316130369700886ull}}, {{2051893137706830530ull, 505808591521419ull}}, {{5330863324907374747ull, 404646873217135ull}}, {{4264690659925899798ull, 323717498573708ull}}, {{3134156241139529353ull, 517947997717933ull}}, {{9886022622395444129ull, 414358398174346ull}}, {{4219469283174444980ull, 331486718539477ull}}, {{10440499667821022291ull, 530378749663163ull}}, {{15731097363740638479ull, 424302999730530ull}}, {{12584877890992510783ull, 339442399784424ull}}, {{9067758181362286284ull, 543107839655079ull}}, {{10943555359831739350ull, 434486271724063ull}}, {{16133541917349212126ull, 347589017379250ull}}, {{7366922994049187787ull, 556142427806801ull}}, {{2204189580497439906ull, 444913942245441ull}}, {{16520746923365593218ull, 355931153796352ull}}, {{5837899909208653928ull, 284744923037082ull}}, {{13029988669475756608ull, 455591876859331ull}}, {{6734642120838694963ull, 364473501487465ull}}, {{5387713696670955970ull, 291578801189972ull}}, {{12309690729415439876ull, 466526081903955ull}}, {{9847752583532351900ull, 373220865523164ull}}, {{11567550881567791843ull, 298576692418531ull}}, {{11129383781024646303ull, 477722707869650ull}}, {{8903507024819717043ull, 382178166295720ull}}, {{7122805619855773634ull, 305742533036576ull}}, {{4017791362285417168ull, 489188052858522ull}}, {{14282279534054064704ull, 391350442286817ull}}, {{4047125997759431117ull, 313080353829454ull}}, {{13854099225898910434ull, 500928566127126ull}}, {{7393930565977218024ull, 400742852901701ull}}, {{2225795638039864096ull, 320594282321361ull}}, {{14629319465089513523ull, 512950851714177ull}}, {{4324757942587790172ull, 410360681371342ull}}, {{14527852798295963107ull, 328288545097073ull}}, {{1108471588822079032ull, 525261672155318ull}}, {{8265474900541483872ull, 420209337724254ull}}, {{10301728735175097421ull, 336167470179403ull}}, {{12793417161538245550ull, 537867952287045ull}}, {{10234733729230596440ull, 430294361829636ull}}, {{4498438168642566829ull, 344235489463709ull}}, {{14576198699311927573ull, 550776783141934ull}}, {{15350307774191452381ull, 440621426513547ull}}, {{4901548589869341258ull, 352497141210838ull}}, {{11299936501379293653ull, 281997712968670ull}}, {{18079898402206869845ull, 451196340749872ull}}, {{7085221092281675230ull, 360957072599898ull}}, {{13046874503309160830ull, 288765658079918ull}}, {{17185650390552747005ull, 462025052927869ull}}, {{17437869127184107927ull, 369620042342295ull}}, {{13950295301747286342ull, 295696033873836ull}}, {{14941774853311837501ull, 473113654198138ull}}, {{885373438423739031ull, 378490923358511ull}}, {{15465694009706632517ull, 302792738686808ull}}, {{2609017527079150089ull, 484468381898894ull}}, {{5776562836405230394ull, 387574705519115ull}}, {{4621250269124184315ull, 310059764415292ull}}, {{11083349245340605228ull, 496095623064467ull}}, {{1487981766788663536ull, 396876498451574ull}}, {{4879734228172841152ull, 317501198761259ull}}, {{15186272394560366489ull, 508001918018014ull}}, {{15838366730390203515ull, 406401534414411ull}}, {{8981344569570252488ull, 325121227531529ull}}, {{3302104867086673012ull, 520193964050447ull}}, {{13709730337895069379ull, 416155171240357ull}}, {{3589086640832234857ull, 332924136992286ull}}, {{16810585069557306741ull, 532678619187657ull}}, {{6069770426162024746ull, 426142895350126ull}}, {{1166467526187709474ull, 340914316280101ull}}, {{12934394486126066128ull, 545462906048161ull}}, {{6658166774158942579ull, 436370324838529ull}}, {{9015882234069064386ull, 349096259870823ull}}, {{10736062759768592695ull, 558554015793317ull}}, {{1210152578331053510ull, 446843212634654ull}}, {{4657470877406753131ull, 357474570107723ull}}, {{11104674331409223151ull, 285979656086178ull}}, {{14078130115512846719ull, 457567449737885ull}}, {{11262504092410277375ull, 366053959790308ull}}, {{16388700903412042546ull, 292843167832246ull}}, {{396479742265895812ull, 468549068531595ull}}, {{317183793812716649ull, 374839254825276ull}}, {{15011142294017814612ull, 299871403860220ull}}, {{5571083596718951764ull, 479794246176353ull}}, {{11835564506858982057ull, 383835396941082ull}}, {{2089753976003364999ull, 307068317552866ull}}, {{14411652805831114969ull, 491309308084585ull}}, {{11529322244664891975ull, 393047446467668ull}}, {{16602155425215734226ull, 314437957174134ull}}, {{15495402236119443793ull, 503100731478615ull}}, {{12396321788895555034ull, 402480585182892ull}}, {{2538359801632623381ull, 321984468146314ull}}, {{11440073312096018056ull, 515175149034102ull}}, {{1773361020192993798ull, 412140119227282ull}}, {{12486735260380126008ull, 329712095381825ull}}, {{1532032342898649997ull, 527539352610921ull}}, {{15983021133286561290ull, 422031482088736ull}}, {{9097068091887338709ull, 337625185670989ull}}, {{3487262502794010965ull, 540200297073583ull}}, {{10168507631719029418ull, 432160237658866ull}}, {{4445457290633313211ull, 345728190127093ull}}, {{3423382850271390815ull, 553165104203349ull}}, {{6428055094959022975ull, 442532083362679ull}}, {{8831792890709128703ull, 354025666690143ull}}, {{14444131942051123609ull, 283220533352114ull}}, {{12042564663056066805ull, 453152853363383ull}}, {{17012749359928674090ull, 362522282690706ull}}, {{9920850673201028949ull, 290017826152565ull}}, {{15873361077121646319ull, 464028521844104ull}}, {{16388037676439227378ull, 371222817475283ull}}, {{2042383696925650933ull, 296978253980227ull}}, {{6957162729822951816ull, 475165206368363ull}}, {{12944427813342182099ull, 380132165094690ull}}, {{10355542250673745679ull, 304105732075752ull}}, {{1811472342110351794ull, 486569171321204ull}}, {{5138526688430191758ull, 389255337056963ull}}, {{11489518980227974053ull, 311404269645570ull}}, {{18383230368364758485ull, 498246831432912ull}}, {{7327886665207986142ull, 398597465146330ull}}, {{5862309332166388913ull, 318877972117064ull}}, {{16758392560950042908ull, 510204755387302ull}}, {{6028016419276213680ull, 408163804309842ull}}, {{15890459579646701913ull, 326531043447873ull}}, {{3288642438983261122ull, 522449669516598ull}}, {{10009611580670429544ull, 417959735613278ull}}, {{15386386894020164282ull, 334367788490622ull}}, {{9860823771464621558ull, 534988461584996ull}}, {{4199310202429786923ull, 427990769267997ull}}, {{14427494606169560508ull, 342392615414397ull}}, {{8326596110903655521ull, 547828184663036ull}}, {{2971928073981014093ull, 438262547730429ull}}, {{6066891273926721598ull, 350610038184343ull}}, {{6017677223540844233ull, 560976061094949ull}}, {{8503490593574585710ull, 448780848875959ull}}, {{10492141289601578891ull, 359024679100767ull}}, {{1015015402197442466ull, 287219743280614ull}}, {{9002722272999728593ull, 459551589248982ull}}, {{18270224262625513844ull, 367641271399185ull}}, {{14616179410100411075ull, 294113017119348ull}}, {{1249794167709195781ull, 470580827390958ull}}, {{8378532963651177271ull, 376464661912766ull}}, {{3013477556179031493ull, 301171729530213ull}}, {{1132215275144540067ull, 481874767248341ull}}, {{15663167479083273346ull, 385499813798672ull}}, {{5151836353782798030ull, 308399851038938ull}}, {{4553589351310566526ull, 493439761662301ull}}, {{18400266740016094513ull, 394751809329840ull}}, {{14720213392012875610ull, 315801447463872ull}}, {{8794946168252959684ull, 505282315942196ull}}, {{3346608119860457424ull, 404225852753757ull}}, {{13745332940114096909ull, 323380682203005ull}}, {{3545788630473003438ull, 517409091524809ull}}, {{6525979719120313074ull, 413927273219847ull}}, {{16288830219521981428ull, 331141818575877ull}}, {{11304733092267528993ull, 529826909721404ull}}, {{12733135288555933517ull, 423861527777123ull}}, {{17565205860328567460ull, 339089222221698ull}}, {{5968236488074245998ull, 542542755554718ull}}, {{12153286819943217444ull, 434034204443774ull}}, {{13411978270696484279ull, 347227363555019ull}}, {{10391118788888643876ull, 555563781688031ull}}, {{4623546216369004778ull, 444451025350425ull}}, {{3698836973095203822ull, 355560820280340ull}}, {{2959069578476163058ull, 284448656224272ull}}, {{8423860140303771216ull, 455117849958835ull}}, {{6739088112243016972ull, 364094279967068ull}}, {{12769968119278234224ull, 291275423973654ull}}, {{9363902546619443790ull, 466040678357847ull}}, {{112424407811734385ull, 372832542686278ull}}, {{7468637155733208154ull, 298266034149022ull}}, {{15639168263915043371ull, 477225654638435ull}}, {{12511334611132034696ull, 381780523710748ull}}, {{17387765318389448403ull, 305424418968598ull}}, {{5684331620971655507ull, 488679070349758ull}}, {{11926162926261145052ull, 390943256279806ull}}, {{5851581526267005718ull, 312754605023845ull}}, {{9362530442027209149ull, 500407368038152ull}}, {{111326724137946673ull, 400325894430522ull}}, {{11157107823536088308ull, 320260715544417ull}}, {{3093977258690100000ull, 512417144871068ull}}, {{9853879436435900646ull, 409933715896854ull}}, {{11572452363890630840ull, 327946972717483ull}}, {{14826574967483099021ull, 524715156347973ull}}, {{793213529760748247ull, 419772125078379ull}}, {{4323919638550508921ull, 335817700062703ull}}, {{3228922606938903950ull, 537308320100325ull}}, {{2583138085551123160ull, 429846656080260ull}}, {{2066510468440898528ull, 343877324864208ull}}, {{18063812008473078938ull, 550203719782732ull}}, {{7072351977294642504ull, 440162975826186ull}}, {{1968532767093803680ull, 352130380660949ull}}, {{5264175028416953267ull, 281704304528759ull}}, {{15801377674950945874ull, 450726887246014ull}}, {{16330450954702667022ull, 360581509796811ull}}, {{9375011949020223294ull, 288465207837449ull}}, {{3931972674206626302ull, 461544332539919ull}}, {{6834926954107211365ull, 369235466031935ull}}, {{5467941563285769092ull, 295388372825548ull}}, {{5059357686515320224ull, 472621396520877ull}}, {{15115532593437987148ull, 378097117216701ull}}, {{8403077260008479395ull, 302477693773361ull}}, {{6066225986529746386ull, 483964310037378ull}}, {{12231678418707617755ull, 387171448029902ull}}, {{2406645105482273558ull, 309737158423922ull}}, {{7539980983513548016ull, 495579453478275ull}}, {{6031984786810838413ull, 396463562782620ull}}, {{4825587829448670730ull, 317170850226096ull}}, {{342242897634052522ull, 507473360361754ull}}, {{3963143132849152341ull, 405978688289403ull}}, {{10549212135763142519ull, 324782950631522ull}}, {{2121344158253386738ull, 519652721010436ull}}, {{16454470585570350683ull, 415722176808348ull}}, {{2095530024230549577ull, 332577741446679ull}}, {{10731545668252699969ull, 532124386314686ull}}, {{4895887719860249652ull, 425699509051749ull}}, {{7606058990630110045ull, 340559607241399ull}}, {{1101647940782445102ull, 544895371586239ull}}, {{4570667167367866405ull, 435916297268991ull}}, {{18413928992861934417ull, 348733037815192ull}}, {{14704891129611453774ull, 557972860504308ull}}, {{695866459463432050ull, 446378288403447ull}}, {{11624739611796476609ull, 357102630722757ull}}, {{1921094059953360641ull, 285682104578206ull}}, {{14141796940151107995ull, 457091367325129ull}}, {{15002786366862796719ull, 365673093860103ull}}, {{934182649264506406ull, 292538475088083ull}}, {{16252087497790851542ull, 468061560140932ull}}, {{5622972368748860587ull, 374449248112746ull}}, {{809029080257178147ull, 299559398490197ull}}, {{4983795343153395358ull, 479295037584315ull}}, {{3987036274522716286ull, 383436030067452ull}}, {{14257675463843903999ull, 306748824053961ull}}, {{15433583112666425752ull, 490798118486338ull}}, {{1278820045907409632ull, 392638494789071ull}}, {{15780451295693568998ull, 314110795831256ull}}, {{17870024443625889751ull, 502577273330010ull}}, {{14296019554900711801ull, 402061818664008ull}}, {{368769199694838471ull, 321649454931207ull}}, {{4279379534253651877ull, 514639127889931ull}}, {{18180898886370562794ull, 411711302311944ull}}, {{18234067923838360558ull, 329369041849555ull}}, {{10727764604431825278ull, 526990466959289ull}}, {{12271560498287370545ull, 421592373567431ull}}, {{6127899583887986113ull, 337273898853945ull}}, {{9804639334220777781ull, 539638238166312ull}}, {{465013837892801578ull, 431710590533050ull}}, {{372011070314241262ull, 345368472426440ull}}, {{595217712502786020ull, 552589555882304ull}}, {{4165522984744139139ull, 442071644705843ull}}, {{10711116017279131958ull, 353657315764674ull}}, {{12258241628565215889ull, 282925852611739ull}}, {{8545140161478614454ull, 452681364178783ull}}, {{14214809758666712209ull, 362145091343026ull}}, {{7682498992191459444ull, 289716073074421ull}}, {{4913300758022514464ull, 463545716919074ull}}, {{7619989421159921895ull, 370836573535259ull}}, {{9785340351669847839ull, 296669258828207ull}}, {{899149303704115249ull, 474670814125132ull}}, {{11787365887189023169ull, 379736651300105ull}}, {{9429892709751218535ull, 303789321040084ull}}, {{4019781891376218687ull, 486062913664135ull}}, {{3215825513100974949ull, 388850330931308ull}}, {{9951358039964600606ull, 311080264745046ull}}, {{8543475234459540323ull, 497728423592074ull}}, {{10524129002309542582ull, 398182738873659ull}}, {{12108652016589544388ull, 318546191098927ull}}, {{4616447967575629729ull, 509673905758284ull}}, {{7382507188802414106ull, 407739124606627ull}}, {{16974052195267662255ull, 326191299685301ull}}, {{1333041809234887345ull, 521906079496483ull}}, {{8445131076871730522ull, 417524863597186ull}}, {{3066756046755474095ull, 334019890877749ull}}, {{12285507304292579198ull, 534431825404398ull}}, {{17207103472917884005ull, 427545460323518ull}}, {{2697636334108576234ull, 342036368258815ull}}, {{4316218134573721975ull, 547258189214104ull}}, {{7142323322400887903ull, 437806551371283ull}}, {{13092556287404530969ull, 350245241097026ull}}, {{13569392430363428904ull, 560392385755242ull}}, {{3476816314806922477ull, 448313908604194ull}}, {{6470801866587448304ull, 358651126883355ull}}, {{5176641493269958643ull, 286920901506684ull}}, {{15661324018715754476ull, 459073442410694ull}}, {{16218408029714513904ull, 367258753928555ull}}, {{12974726423771611123ull, 293807003142844ull}}, {{9691515833808846828ull, 470091205028551ull}}, {{4063863852305167139ull, 376072964022841ull}}, {{18008486340811775004ull, 300858371218272ull}}, {{14056182886331198714ull, 481373393949236ull}}, {{7555597494323048648ull, 385098715159389ull}}, {{9733826810200349241ull, 308078972127511ull}}, {{8195425266836738140ull, 492926355404018ull}}, {{13935037842953211158ull, 394341084323214ull}}, {{14837379089104479250ull, 315472867458571ull}}, {{16361108913083346153ull, 504756587933714ull}}, {{16778235945208587246ull, 403805270346971ull}}, {{9733239941424959473ull, 323044216277577ull}}, {{815788647312293865ull, 516870746044124ull}}, {{4341979732591745415ull, 413496596835299ull}}, {{7162932600815306655ull, 330797277468239ull}}, {{392645717078759679ull, 529275643949183ull}}, {{7692814203146828389ull, 423420515159346ull}}, {{2464902547775552388ull, 338736412127477ull}}, {{7633192891182794144ull, 541978259403963ull}}, {{13485251942430055962ull, 433582607523170ull}}, {{10788201553944044769ull, 346866086018536ull}}, {{9882424856826650985ull, 554985737629658ull}}, {{15284637514945141434ull, 443988590103726ull}}, {{8538361197214202824ull, 355190872082981ull}}, {{3141340143029451936ull, 284152697666385ull}}, {{5026144228847123098ull, 454644316266216ull}}, {{331566568335788155ull, 363715453012973ull}}, {{7643950884152451170ull, 290972362410378ull}}, {{8540972599902011550ull, 465555779856605ull}}, {{6832778079921609240ull, 372444623885284ull}}, {{9155571278679197715ull, 297955699108227ull}}, {{18338262860628626667ull, 476729118573163ull}}, {{3602563844277170364ull, 381383294858531ull}}, {{17639446334389377584ull, 305106635886824ull}}, {{17155067690797273165ull, 488170617418919ull}}, {{17413402967379728855ull, 390536493935135ull}}, {{13930722373903783084ull, 312429195148108ull}}, {{153062909794590995ull, 499886712236974ull}}, {{3811799142577583119ull, 399909369789579ull}}, {{6738788128803976819ull, 319927495831663ull}}, {{7092712191344452587ull, 511883993330661ull}}, {{1984820938333651746ull, 409507194664529ull}}, {{5277205565408831720ull, 327605755731623ull}}, {{4754180089912220429ull, 524169209170597ull}}, {{14871390516155507313ull, 419335367336477ull}}, {{4518414783440585204ull, 335468293869182ull}}, {{10918812468246846650ull, 536749270190691ull}}, {{5045701159855566996ull, 429399416152553ull}}, {{11415258557368274243ull, 343519532922042ull}}, {{3507018432821597497ull, 549631252675268ull}}, {{10184312375741098644ull, 439705002140214ull}}, {{11836798715334789238ull, 351764001712171ull}}, {{11560180315051842135ull, 562822402739474ull}}, {{12937493066783384031ull, 450257922191579ull}}, {{14039343268168617548ull, 360206337753263ull}}, {{163428170309163069ull, 288165070202611ull}}, {{11329531516720391880ull, 461064112324177ull}}, {{1684927583892492857ull, 368851289859342ull}}, {{12415988511339725255ull, 295081031887473ull}}, {{16176232803401650086ull, 472129651019957ull}}, {{5562288613237499422ull, 377703720815966ull}}, {{760482075848089214ull, 302162976652773ull}}, {{15974166580324584036ull, 483460762644436ull}}, {{9089984449517756906ull, 386768610115549ull}}, {{10961336374356115848ull, 309414888092439ull}}, {{6470091754744054387ull, 495063820947903ull}}, {{12554771033279064156ull, 396051056758322ull}}, {{2665119197139430678ull, 316840845406658ull}}, {{574841900681178762ull, 506945352650653ull}}, {{7838571150028763656ull, 405556282120522ull}}, {{17338903364248741894ull, 324445025696417ull}}, {{12984850123830345738ull, 519112041114268ull}}, {{17766577728548097237ull, 415289632891414ull}}, {{17902610997580388113ull, 332231706313131ull}}, {{2818735892935248718ull, 531570730101011ull}}, {{17012383973315840267ull, 425256584080808ull}}, {{2541860734426941244ull, 340205267264647ull}}, {{7756325989825016314ull, 544328427623435ull}}, {{6205060791860013051ull, 435462742098748ull}}, {{12342746262971831087ull, 348370193678998ull}}, {{16059045206013019417ull, 557392309886397ull}}, {{5468538535326594887ull, 445913847909118ull}}, {{11753528457745096556ull, 356731078327294ull}}, {{13092171580937987568ull, 285384862661835ull}}, {{2500730455791228493ull, 456615780258937ull}}, {{13068630808858713764ull, 365292624207149ull}}, {{14144253461828881334ull, 292234099365719ull}}, {{11562759094700479165ull, 467574558985151ull}}, {{5560858461018473009ull, 374059647188121ull}}, {{759337954072868084ull, 299247717750497ull}}, {{4904289541258499257ull, 478796348400795ull}}, {{3923431633006799406ull, 383037078720636ull}}, {{17896140565373080817ull, 306429662976508ull}}, {{6497732016145467369ull, 490287460762414ull}}, {{8887534427658284218ull, 392229968609931ull}}, {{3420678727384717051ull, 313783974887945ull}}, {{5473085963815547282ull, 502054359820712ull}}, {{15446515215278168795ull, 401643487856569ull}}, {{16046560986964445359ull, 321314790285255ull}}, {{7227753505433560959ull, 514103664456409ull}}, {{9471551619088759090ull, 411282931565127ull}}, {{198543665787186626ull, 329026345252102ull}}, {{4007018680001408925ull, 526442152403363ull}}, {{10584312573484947786ull, 421153721922690ull}}, {{8467450058787958229ull, 336922977538152ull}}, {{17237268908802643490ull, 539076764061043ull}}, {{2721768682816383822ull, 431261411248835ull}}, {{2177414946253107058ull, 345009128999068ull}}, {{18241259172972612585ull, 552014606398508ull}}, {{3524960894152359098ull, 441611685118807ull}}, {{13888015159547618248ull, 353289348095045ull}}, {{11110412127638094599ull, 282631478476036ull}}, {{10397961774737130712ull, 452210365561658ull}}, {{15697067049273525216ull, 361768292449326ull}}, {{8868304824676909849ull, 289414633959461ull}}, {{6810590089999235112ull, 463063414335138ull}}, {{12827169701483208736ull, 370450731468110ull}}, {{10261735761186566989ull, 296360585174488ull}}, {{12729428403156596859ull, 474176936279181ull}}, {{6494193907783367164ull, 379341549023345ull}}, {{5195355126226693731ull, 303473239218676ull}}, {{933870572478889324ull, 485557182749882ull}}, {{11815142902208842429ull, 388445746199905ull}}, {{9452114321767073943ull, 310756596959924ull}}, {{4055336470601587339ull, 497210555135879ull}}, {{6933617991223180194ull, 397768444108703ull}}, {{12925592022462364802ull, 318214755286962ull}}, {{5923551976972142390ull, 509143608459140ull}}, {{4738841581577713912ull, 407314886767312ull}}, {{14859119709487902099ull, 325851909413849ull}}, {{12706545090954912390ull, 521363055062159ull}}, {{13854584887505840235ull, 417090444049727ull}}, {{3704970280520851541ull, 333672355239782ull}}, {{9617301263575272790ull, 533875768383651ull}}, {{4004492196118307908ull, 427100614706921ull}}, {{17960989015862287619ull, 341680491765536ull}}, {{2912140722186287929ull, 546688786824859ull}}, {{6019061392490940666ull, 437351029459887ull}}, {{15883295558218483503ull, 349880823567909ull}}, {{14345226448923842635ull, 559809317708655ull}}, {{11476181159139074108ull, 447847454166924ull}}, {{12870293742053169609ull, 358277963333539ull}}, {{13985583808384446011ull, 286622370666831ull}}, {{14998236463931292971ull, 458595793066930ull}}, {{11998589171145034376ull, 366876634453544ull}}, {{13288220151657937824ull, 293501307562835ull}}, {{2814408168943148903ull, 469602092100537ull}}, {{13319572979380250092ull, 375681673680429ull}}, {{14345007198246110397ull, 300545338944343ull}}, {{815918628742314696ull, 480872542310950ull}}, {{652734902993851757ull, 384698033848760ull}}, {{522187922395081405ull, 307758427079008ull}}, {{15592895934799771541ull, 492413483326412ull}}, {{5095619118355996587ull, 393930786661130ull}}, {{4076495294684797269ull, 315144629328904ull}}, {{13901090100979496277ull, 504231406926246ull}}, {{7431523266041686699ull, 403385125540997ull}}, {{17013265057059080328ull, 322708100432797ull}}, {{12463828832326887233ull, 516332960692476ull}}, {{6281714251119599463ull, 413066368553981ull}}, {{1336022586153769247ull, 330453094843185ull}}, {{2137636137846030796ull, 528724951749096ull}}, {{16467504169244465929ull, 422979961399276ull}}, {{9484654520653662420ull, 338383969119421ull}}, {{7796749603562039226ull, 541414350591074ull}}, {{9926748497591541704ull, 433131480472859ull}}, {{11630747612815143686ull, 346505184378287ull}}, {{3851800921536588606ull, 554408295005260ull}}, {{3081440737229270884ull, 443526636004208ull}}, {{9843850219267237354ull, 354821308803366ull}}, {{4185731360671879560ull, 283857047042693ull}}, {{3007821362333096973ull, 454171275268309ull}}, {{6095605904608387901ull, 363337020214647ull}}, {{15944531167912441290ull, 290669616171717ull}}, {{10753854609692264772ull, 465071385874748ull}}, {{15981781317237632464ull, 372057108699798ull}}, {{1717378609564375002ull, 297645686959839ull}}, {{10126503404786820649ull, 476233099135742ull}}, {{722505094345635873ull, 380986479308594ull}}, {{4267352890218419021ull, 304789183446875ull}}, {{6827764624349470435ull, 487662693515000ull}}, {{5462211699479576348ull, 390130154812000ull}}, {{4369769359583661078ull, 312104123849600ull}}, {{6991630975333857725ull, 499366598159360ull}}, {{5593304780267086180ull, 399493278527488ull}}, {{11853341453697489590ull, 319594622821990ull}}, {{518602252206431729ull, 511351396515185ull}}, {{414881801765145383ull, 409081117212148ull}}, {{7710603070895936953ull, 327264893769718ull}}, {{8647616098691588801ull, 523623830031549ull}}, {{10607441693695181364ull, 418899064025239ull}}, {{12175302169698055414ull, 335119251220191ull}}, {{12101785842033068017ull, 536190801952306ull}}, {{5992079858884544090ull, 428952641561845ull}}, {{4793663887107635272ull, 343162113249476ull}}, {{291164589888395789ull, 549059381199162ull}}, {{11300978116136447601ull, 439247504959329ull}}, {{12730131307651068404ull, 351398003967463ull}}, {{16678861277499799123ull, 562236806347941ull}}, {{9653740207257928975ull, 449789445078353ull}}, {{15101689795290163826ull, 359831556062682ull}}, {{4702654206748310415ull, 287865244850146ull}}, {{145549101313476017ull, 460584391760234ull}}, {{3805788095792691137ull, 368467513408187ull}}, {{14112676920859883879ull, 294774010726549ull}}, {{11512236629150083237ull, 471638417162479ull}}, {{12899138118061976913ull, 377310733729983ull}}, {{17698008123933402177ull, 301848586983986ull}}, {{2491371295100071220ull, 482957739174379ull}}, {{5682445850821967299ull, 386366191339503ull}}, {{11924654310141394486ull, 309092953071602ull}}, {{4322051637258589885ull, 494548724914564ull}}, {{7146990124548782231ull, 395638979931651ull}}, {{2028243284897115462ull, 316511183945321ull}}, {{14313235700061115708ull, 506417894312513ull}}, {{382542115823161597ull, 405134315450011ull}}, {{15063428951626170570ull, 324107452360008ull}}, {{1965393434150410974ull, 518571923776014ull}}, {{5261663562062239102ull, 414857539020811ull}}, {{519982034907880958ull, 331886031216649ull}}, {{8210668885336430180ull, 531017649946638ull}}, {{13947232737752964790ull, 424814119957310ull}}, {{11157786190202371832ull, 339851295965848ull}}, {{14163109089581884608ull, 543762073545357ull}}, {{3951789642181687040ull, 435009658836286ull}}, {{17918826972712990925ull, 348007727069028ull}}, {{6534030267889323541ull, 556812363310446ull}}, {{1537875399569548509ull, 445449890648357ull}}, {{12298346763881369777ull, 356359912518685ull}}, {{9838677411105095822ull, 285087930014948ull}}, {{12052535043026242992ull, 456140688023917ull}}, {{2263330404937173747ull, 364912550419134ull}}, {{5500013138691649320ull, 291930040335307ull}}, {{12489369836648549236ull, 467088064536491ull}}, {{6302147054576929066ull, 373670451629193ull}}, {{12420415273145363899ull, 298936361303354ull}}, {{8804617992806851269ull, 478298178085367ull}}, {{18111740838471211985ull, 382638542468293ull}}, {{3421346226551238618ull, 306110833974635ull}}, {{5474153962481981789ull, 489777334359416ull}}, {{689974355243675108ull, 391821867487533ull}}, {{7930677113678760733ull, 313457493990026ull}}, {{5310385752402196526ull, 501531990384042ull}}, {{15316355046147488190ull, 401225592307233ull}}, {{1185037592692259583ull, 320980473845787ull}}, {{5585408963049525656ull, 513568758153259ull}}, {{8157675985181530848ull, 410855006522607ull}}, {{17594187232370955648ull, 328684005218085ull}}, {{9703955498083977421ull, 525894408348937ull}}, {{384466768983361290ull, 420715526679150ull}}, {{307573415186689032ull, 336572421343320ull}}, {{492117464298702451ull, 538515874149312ull}}, {{11461740415664692931ull, 430812699319449ull}}, {{12858741147273664668ull, 344650159455559ull}}, {{9505939391412132499ull, 551440255128895ull}}, {{7604751513129705999ull, 441152204103116ull}}, {{2394452395761854476ull, 352921763282493ull}}, {{9294259546093304227ull, 282337410625994ull}}, {{3802768829523555794ull, 451739857001591ull}}, {{17799610322586485928ull, 361391885601272ull}}, {{6860990628585368096ull, 289113508481018ull}}, {{7288236190994678630ull, 462581613569629ull}}, {{9519937767537653227ull, 370065290855703ull}}, {{14994647843513943228ull, 296052232684562ull}}, {{9234041290654667873ull, 473683572295300ull}}, {{7387233032523734298ull, 378946857836240ull}}, {{5909786426018987438ull, 303157486268992ull}}, {{13145007096372290225ull, 485051978030387ull}}, {{3137308047614011533ull, 388041582424310ull}}, {{2509846438091209226ull, 310433265939448ull}}, {{326405486204024439ull, 496693225503117ull}}, {{11329170833188950521ull, 397354580402493ull}}, {{16442034296034981063ull, 317883664321994ull}}, {{15239208429430238732ull, 508613862915191ull}}, {{8502017928802280662ull, 406891090332153ull}}, {{14180311972525645176ull, 325512872265722ull}}, {{7931103897073390989ull, 520820595625156ull}}, {{2655534302916802468ull, 416656476500125ull}}, {{2124427442333441974ull, 333325181200100ull}}, {{3399083907733507159ull, 533320289920160ull}}, {{2719267126186805727ull, 426656231936128ull}}, {{9554111330433265228ull, 341324985548902ull}}, {{529182869725583072ull, 546119976878244ull}}, {{4112695110522376781ull, 436895981502595ull}}, {{3290156088417901425ull, 349516785202076ull}}, {{16332296185694373249ull, 559226856323321ull}}, {{9376488133813588276ull, 447381485058657ull}}, {{122492877567049975ull, 357905188046926ull}}, {{14855389561021281272ull, 286324150437540ull}}, {{5321879223924498420ull, 458118640700065ull}}, {{4257503379139598736ull, 366494912560052ull}}, {{14474049147537409958ull, 293195930048041ull}}, {{15779781006576035287ull, 469113488076866ull}}, {{8934475990518917906ull, 375290790461493ull}}, {{14526278421898954971ull, 300232632369194ull}}, {{12173999030812596985ull, 480372211790711ull}}, {{6049850409908167265ull, 384297769432569ull}}, {{8529229142668444135ull, 307438215546055ull}}, {{13646766628269510616ull, 491901144873688ull}}, {{18296110932099429139ull, 393520915898950ull}}, {{14636888745679543311ull, 314816732719160ull}}, {{4972277919377717682ull, 503706772350657ull}}, {{15045868779727905115ull, 402965417880525ull}}, {{12036695023782324092ull, 322372334304420ull}}, {{811967964342166932ull, 515795734887073ull}}, {{8028272000957554192ull, 412636587909658ull}}, {{13801315230249864000ull, 330109270327726ull}}, {{14703406738915961753ull, 528174832524362ull}}, {{4384027761648948756ull, 422539866019490ull}}, {{3507222209319159005ull, 338031892815592ull}}, {{9300904349652564731ull, 540851028504947ull}}, {{62025850238231138ull, 432680822803958ull}}, {{7428318309674405557ull, 346144658243166ull}}, {{4506611665995228245ull, 553831453189066ull}}, {{18362684591763823889ull, 443065162551252ull}}, {{7311450043927238465ull, 354452130041002ull}}, {{16917206479367521741ull, 283561704032801ull}}, {{1242088663794662524ull, 453698726452483ull}}, {{8372368560519550665ull, 362958981161986ull}}, {{3008546033673730209ull, 290367184929589ull}}, {{12192371283361788981ull, 464587495887342ull}}, {{2375199397205610538ull, 371669996709874ull}}, {{5589508332506398754ull, 297335997367899ull}}, {{16321910961494058653ull, 475737595788638ull}}, {{1989482324969515952ull, 380590076630911ull}}, {{16348981118943254055ull, 304472061304728ull}}, {{4022276901857744549ull, 487155298087566ull}}, {{17975216780453836932ull, 389724238470052ull}}, {{7001475794879248899ull, 311779390776042ull}}, {{14891710086548708561ull, 498847025241667ull}}, {{4534670439755146203ull, 399077620193334ull}}, {{7317085166546027285ull, 319262096154667ull}}, {{15396685081215553980ull, 510819353847467ull}}, {{4938650435488622537ull, 408655483077974ull}}, {{7640269163132808353ull, 326924386462379ull}}, {{1156384216786762396ull, 523079018339807ull}}, {{11993153817655140886ull, 418463214671845ull}}, {{9594523054124112709ull, 334770571737476ull}}, {{7972539257114759688ull, 535632914779962ull}}, {{17446077849917538720ull, 428506331823969ull}}, {{17646211094675941299ull, 342805065459175ull}}, {{9787193677771954462ull, 548488104734681ull}}, {{4140406127475653247ull, 438790483787745ull}}, {{3312324901980522597ull, 351032387030196ull}}, {{16367766287394567125ull, 561651819248313ull}}, {{2026166585689922731ull, 449321455398651ull}}, {{16378328527519579477ull, 359457164318920ull}}, {{13102662822015663582ull, 287565731455136ull}}, {{13585562885741241085ull, 460105170328218ull}}, {{18247147938076813514ull, 368084136262574ull}}, {{18287067165203361134ull, 294467309010059ull}}, {{18191261020099646846ull, 471147694416095ull}}, {{14553008816079717476ull, 376918155532876ull}}, {{7953058238121863658ull, 301534524426301ull}}, {{5346195551511161206ull, 482455239082082ull}}, {{15345002885434659935ull, 385964191265665ull}}, {{12276002308347727948ull, 308771353012532ull}}, {{4884208434388723424ull, 494034164820052ull}}, {{14975413191736709708ull, 395227331856041ull}}, {{8290981738647457443ull, 316181865484833ull}}, {{9576221967094021587ull, 505890984775733ull}}, {{15039675203159037916ull, 404712787820586ull}}, {{8342391347785320009ull, 323770230256469ull}}, {{2279779712230781045ull, 518032368410351ull}}, {{16581219028752266129ull, 414425894728280ull}}, {{13264975223001812903ull, 331540715782624ull}}, {{10155913912577169676ull, 530465145252199ull}}, {{11814079944803646064ull, 424372116201759ull}}, {{13140612770584827174ull, 339497692961407ull}}, {{6267585173968082186ull, 543196308738252ull}}, {{16082114583400196718ull, 434557046990601ull}}, {{9176342851978247051ull, 347645637592481ull}}, {{7303450933681374636ull, 556233020147970ull}}, {{5842760746945099709ull, 444986416118376ull}}, {{984859782814169444ull, 355989132894701ull}}, {{15545283085218976848ull, 284791306315760ull}}, {{6425708862640811340ull, 455666090105217ull}}, {{16208613534338380042ull, 364532872084173ull}}, {{1898844383244973064ull, 291626297667339ull}}, {{10416848642675777549ull, 466602076267742ull}}, {{954781284656801392ull, 373281661014194ull}}, {{4453173842467351437ull, 298625328811355ull}}, {{7125078147947762300ull, 477800526098168ull}}, {{13078760147842030486ull, 382240420878534ull}}, {{14152356933015534712ull, 305792336702827ull}}, {{7886375833857214247ull, 489267738724524ull}}, {{9998449481827681720ull, 391414190979619ull}}, {{11688108400204055699ull, 313131352783695ull}}, {{254229366616937503ull, 501010164453913ull}}, {{7582081122777370649ull, 400808131563130ull}}, {{6065664898221896519ull, 320646505250504ull}}, {{17083761466638855077ull, 513034408400806ull}}, {{9977660358569173738ull, 410427526720645ull}}, {{7982128286855338991ull, 328342021376516ull}}, {{5392707629484721739ull, 525347234202426ull}}, {{624817288845867068ull, 420277787361941ull}}, {{15257249090044334947ull, 336222229889552ull}}, {{9654203285103294623ull, 537955567823284ull}}, {{11412711442824546021ull, 430364454258627ull}}, {{1751471524775816170ull, 344291563406902ull}}, {{6491703254383216196ull, 550866501451043ull}}, {{12572060232990393603ull, 440693201160834ull}}, {{13746997001134225206ull, 352554560928667ull}}, {{3618899971423559518ull, 282043648742934ull}}, {{13168937583761515876ull, 451269837988694ull}}, {{14224498881751123024ull, 361015870390955ull}}, {{11379599105400898419ull, 288812696312764ull}}, {{7139312124415706501ull, 462100314100423ull}}, {{13090147329016385847ull, 369680251280338ull}}, {{17850815492696929324ull, 295744201024270ull}}, {{10114560714605535302ull, 473190721638833ull}}, {{15470346201168248888ull, 378552577311066ull}}, {{8686928146192688787ull, 302842061848853ull}}, {{10209736219166391737ull, 484547298958165ull}}, {{8167788975333113389ull, 387637839166532ull}}, {{17602277624492221681ull, 310110271333225ull}}, {{9716900125478003074ull, 496176434133161ull}}, {{4084171285640492136ull, 396941147306529ull}}, {{6956685843254304032ull, 317552917845223ull}}, {{7441348534464976128ull, 508084668552357ull}}, {{17021125271797711872ull, 406467734841885ull}}, {{13616900217438169497ull, 325174187873508ull}}, {{18097691533159160873ull, 520278700597613ull}}, {{3410106782301597729ull, 416222960478091ull}}, {{17485480684808919476ull, 332978368382472ull}}, {{13219373836726629868ull, 532765389411956ull}}, {{6886150254639393571ull, 426212311529565ull}}, {{5508920203711514857ull, 340969849223652ull}}, {{12503621140680334095ull, 545551758757843ull}}, {{17381594542028087922ull, 436441407006274ull}}, {{17594624448364380661ull, 349153125605019ull}}, {{17083352673157278088ull, 558645000968031ull}}, {{9977333323783912147ull, 446916000774425ull}}, {{7981866659027129718ull, 357532800619540ull}}, {{6385493327221703774ull, 286026240495632ull}}, {{13906138138296636362ull, 457641984793011ull}}, {{7435561695895398766ull, 366113587834409ull}}, {{9637798171458229336ull, 292890870267527ull}}, {{663081815365525645ull, 468625392428044ull}}, {{4219814267034330839ull, 374900313942435ull}}, {{3375851413627464671ull, 299920251153948ull}}, {{1712013447062033151ull, 479872401846317ull}}, {{12437657201875357490ull, 383897921477053ull}}, {{17328823390984106639ull, 307118337181642ull}}, {{12968722166606929329ull, 491389339490628ull}}, {{17753675362769364110ull, 393111471592502ull}}, {{6824242660731670641ull, 314489177274002ull}}, {{14608137071912583349ull, 503182683638403ull}}, {{618463213304335710ull, 402546146910723ull}}, {{7873468200127289214ull, 322036917528578ull}}, {{8908200305461752420ull, 515259068045725ull}}, {{7126560244369401936ull, 412207254436580ull}}, {{5701248195495521549ull, 329765803549264ull}}, {{16500694742276655124ull, 527625285678822ull}}, {{5821858164337503453ull, 422100228543058ull}}, {{12036184160953823409ull, 337680182834446ull}}, {{11879197028042296808ull, 540288292535114ull}}, {{13192706437175747769ull, 432230634028091ull}}, {{6864816334998687892ull, 345784507222473ull}}, {{7294357321255990305ull, 553255211555957ull}}, {{16903532301230523213ull, 442604169244765ull}}, {{13522825840984418570ull, 354083335395812ull}}, {{3439563043303714210ull, 283266668316650ull}}, {{5503300869285942736ull, 453226669306640ull}}, {{4402640695428754189ull, 362581335445312ull}}, {{14590159000568734320ull, 290065068356249ull}}, {{12276207956684243943ull, 464104109369999ull}}, {{13510315180089305478ull, 371283287495999ull}}, {{14497600958813354705ull, 297026629996799ull}}, {{12128115089875636559ull, 475242607994879ull}}, {{13391840886642419571ull, 380194086395903ull}}, {{18092170338797756303ull, 304155269116722ull}}, {{14190077283108768792ull, 486648430586756ull}}, {{7662713011745104710ull, 389318744469405ull}}, {{6130170409396083768ull, 311454995575524ull}}, {{17186970284517554676ull, 498327992920838ull}}, {{2681529783388312771ull, 398662394336671ull}}, {{16902619085678291509ull, 318929915469336ull}}, {{1218748833891894153ull, 510287864750939ull}}, {{4664347881855425645ull, 408230291800751ull}}, {{42129490742430193ull, 326584233440601ull}}, {{11135453629413619279ull, 522534773504961ull}}, {{5219014088788985100ull, 418027818803969ull}}, {{7864560085773098403ull, 334422255043175ull}}, {{12583296137236957445ull, 535075608069080ull}}, {{10066636909789565956ull, 428060486455264ull}}, {{11742658342573563088ull, 342448389164211ull}}, {{11409555718633880294ull, 547917422662738ull}}, {{16506342204390924882ull, 438333938130190ull}}, {{13205073763512739905ull, 350667150504152ull}}, {{6370722762652742556ull, 561067440806644ull}}, {{8785927024864104368ull, 448853952645315ull}}, {{7028741619891283494ull, 359083162116252ull}}, {{16691039740138757765ull, 287266529693001ull}}, {{880221881028640162ull, 459626447508803ull}}, {{8082875134306732776ull, 367701158007042ull}}, {{17534346551671117190ull, 294160926405633ull}}, {{5918861594222325565ull, 470657482249014ull}}, {{8424438090119770775ull, 376525985799211ull}}, {{3050201657353906297ull, 301220788639369ull}}, {{12259020281250070722ull, 481953261822990ull}}, {{9807216225000056577ull, 385562609458392ull}}, {{467075350516224615ull, 308450087566714ull}}, {{8126018190309780031ull, 493520140106742ull}}, {{17568860996473554994ull, 394816112085393ull}}, {{2987042352953113026ull, 315852889668315ull}}, {{4779267764724980842ull, 505364623469304ull}}, {{7512763026521894996ull, 404291698775443ull}}, {{13388908050701336643ull, 323433359020354ull}}, {{10354206436896407660ull, 517493374432567ull}}, {{904667520033305482ull, 413994699546054ull}}, {{4413082830768554708ull, 331195759636843ull}}, {{3371583714487777211ull, 529913215418949ull}}, {{6386615786332132092ull, 423930572335159ull}}, {{8798641443807615996ull, 339144457868127ull}}, {{17767175124834095918ull, 542631132589003ull}}, {{3145693655641545764ull, 434104906071203ull}}, {{9895252553997057258ull, 347283924856962ull}}, {{1075008827427650320ull, 555654279771140ull}}, {{860007061942120256ull, 444523423816912ull}}, {{11756052093779427174ull, 355618739053529ull}}, {{13094190489765452062ull, 284494991242823ull}}, {{17261355968882812977ull, 455191985988517ull}}, {{6430387145622429735ull, 364153588790814ull}}, {{8833658531239854111ull, 291322871032651ull}}, {{6755156020499945932ull, 466116593652242ull}}, {{16472171260625687715ull, 372893274921793ull}}, {{2109690564274819202ull, 298314619937435ull}}, {{3375504902839710724ull, 477303391899896ull}}, {{17457799181239409872ull, 381842713519916ull}}, {{10276890530249617574ull, 305474170815933ull}}, {{12753676033657477796ull, 488758673305493ull}}, {{17581638456409802883ull, 391006938644394ull}}, {{17754659579869752629ull, 312805550915515ull}}, {{9960711254082052591ull, 500488881464825ull}}, {{7968569003265642073ull, 400391105171860ull}}, {{6374855202612513658ull, 320312884137488ull}}, {{6510419509438111530ull, 512500614619981ull}}, {{1518986792808578901ull, 410000491695985ull}}, {{1215189434246863121ull, 328000393356788ull}}, {{16701698353762622286ull, 524800629370860ull}}, {{13361358683010097829ull, 419840503496688ull}}, {{18067784575891898909ull, 335872402797350ull}}, {{10461711247717486639ull, 537395844475761ull}}, {{4680020183432078988ull, 429916675580609ull}}, {{7433364961487573514ull, 343933340464487ull}}, {{15582732753122027945ull, 550293344743179ull}}, {{16155535017239532679ull, 440234675794543ull}}, {{1856381569565895174ull, 352187740635635ull}}, {{1485105255652716139ull, 281750192508508ull}}, {{17133563668011987115ull, 450800308013612ull}}, {{6328153304925769046ull, 360640246410890ull}}, {{5062522643940615237ull, 288512197128712ull}}, {{11789385045046894702ull, 461619515405939ull}}, {{13120856850779426085ull, 369295612324751ull}}, {{6807336665881630544ull, 295436489859801ull}}, {{3513041035926788225ull, 472698383775682ull}}, {{13878479272967161550ull, 378158707020545ull}}, {{11102783418373729240ull, 302526965616436ull}}, {{10385755839914146137ull, 484043144986298ull}}, {{15687302301415137556ull, 387234515989038ull}}, {{1481795396906379075ull, 309787612791231ull}}, {{13438919079275937490ull, 495660180465969ull}}, {{14440484078162660315ull, 396528144372775ull}}, {{11552387262530128252ull, 317222515498220ull}}, {{37075546338653588ull, 507556024797153ull}}, {{7408358066554743516ull, 406044819837722ull}}, {{16994732897469525783ull, 324835855870177ull}}, {{12434177376983599960ull, 519737369392284ull}}, {{13636690716328790291ull, 415789895513827ull}}, {{3530654943579211586ull, 332631916411062ull}}, {{9338396724468648861ull, 532211066257699ull}}, {{11160066194316829412ull, 425768853006159ull}}, {{12617401770195373853ull, 340615082404927ull}}, {{5430447573344956872ull, 544984131847884ull}}, {{8033706873417875821ull, 435987305478307ull}}, {{17495011942960031626ull, 348789844382645ull}}, {{9545275035026498986ull, 558063751012233ull}}, {{15014917657505019835ull, 446451000809786ull}}, {{8322585311262105545ull, 357160800647829ull}}, {{10347417063751594759ull, 285728640518263ull}}, {{12866518487260641291ull, 457165824829221ull}}, {{6603865975066602710ull, 365732659863377ull}}, {{16351139224279013137ull, 292586127890701ull}}, {{336381055653048758ull, 468137804625123ull}}, {{7647802474006259652ull, 374510243700098ull}}, {{13496939608688828368ull, 299608194960078ull}}, {{17905754559160215066ull, 479373111936125ull}}, {{14324603647328172053ull, 383498489548900ull}}, {{11459682917862537642ull, 306798791639120ull}}, {{18335492668580060228ull, 490878066622592ull}}, {{7289696505380227536ull, 392702453298074ull}}, {{9521106019046092352ull, 314161962638459ull}}, {{4165723186248016794ull, 502659140221535ull}}, {{3332578548998413435ull, 402127312177228ull}}, {{10044760468682551394ull, 321701849741782ull}}, {{1314221490924440938ull, 514722959586852ull}}, {{12119423636965283720ull, 411778367669481ull}}, {{6006190094830316653ull, 329422694135585ull}}, {{9609904151728506645ull, 527076310616936ull}}, {{3998574506640894992ull, 421661048493549ull}}, {{6888208420054626317ull, 337328838794839ull}}, {{18399831101571222754ull, 539726142071742ull}}, {{7341167251773157557ull, 431780913657394ull}}, {{9562282616160436368ull, 345424730925915ull}}, {{15299652185856698190ull, 552679569481464ull}}, {{15929070563427268875ull, 442143655585171ull}}, {{9053907635999904777ull, 353714924468137ull}}, {{18311172553025654791ull, 282971939574509ull}}, {{18229829640615316696ull, 452755103319215ull}}, {{14583863712492253357ull, 362204082655372ull}}, {{4288393340509982039ull, 289763266124298ull}}, {{3172080530074060939ull, 463621225798877ull}}, {{13605710868284979721ull, 370896980639101ull}}, {{7195219879886073453ull, 296717584511281ull}}, {{4133654178333896879ull, 474748135218050ull}}, {{3306923342667117503ull, 379798508174440ull}}, {{2645538674133694003ull, 303838806539552ull}}, {{7922210693355820728ull, 486142090463283ull}}, {{13716466184168477228ull, 388913672370626ull}}, {{7283824132592871459ull, 311130937896501ull}}, {{4275420982664773689ull, 497809500634402ull}}, {{14488383230357549921ull, 398247600507521ull}}, {{7901357769544129613ull, 318598080406017ull}}, {{16331521246012517705ull, 509756928649627ull}}, {{5686519367326193517ull, 407805542919702ull}}, {{15617261938086685783ull, 326244434335761ull}}, {{17608921471454876607ull, 521991094937218ull}}, {{3019090732938170316ull, 417592875949775ull}}, {{2415272586350536253ull, 334074300759820ull}}, {{3864436138160858005ull, 534518881215712ull}}, {{14159595354754417373ull, 427615104972569ull}}, {{15017025098545444222ull, 342092083978055ull}}, {{5580496083963159139ull, 547347334364889ull}}, {{8153745681912437634ull, 437877867491911ull}}, {{2833647730788039784ull, 350302293993529ull}}, {{11912533998744684301ull, 560483670389646ull}}, {{5840678384253837118ull, 448386936311717ull}}, {{15740589151628800664ull, 358709549049373ull}}, {{1524424877077309561ull, 286967639239499ull}}, {{9817777432807515945ull, 459148222783198ull}}, {{15232919575729833402ull, 367318578226558ull}}, {{1118289216358135752ull, 293854862581247ull}}, {{5478611560914927527ull, 470167780129995ull}}, {{4382889248731942021ull, 376134224103996ull}}, {{18263706657953194910ull, 300907379283196ull}}, {{3396488949531739593ull, 481451806853115ull}}, {{2717191159625391675ull, 385161445482492ull}}, {{13241799371926044309ull, 308129156385993ull}}, {{17497530180339760572ull, 493006650217589ull}}, {{17687372959013718781ull, 394405320174071ull}}, {{10460549552469064701ull, 315524256139257ull}}, {{1979484024982862229ull, 504838809822812ull}}, {{12651633664212020753ull, 403871047858249ull}}, {{13810655746111526925ull, 323096838286599ull}}, {{11029002749552712111ull, 516954941258559ull}}, {{12512551014384080012ull, 413563953006847ull}}, {{2631343182023443363ull, 330851162405478ull}}, {{520800276495599058ull, 529361859848765ull}}, {{416640221196479247ull, 423489487879012ull}}, {{11401358621182914367ull, 338791590303209ull}}, {{7174127349666932018ull, 542066544485135ull}}, {{5739301879733545614ull, 433653235588108ull}}, {{11970139133270657137ull, 346922588470486ull}}, {{11773524983749230774ull, 555076141552778ull}}, {{16797517616483205265ull, 444060913242222ull}}, {{6059316463702743566ull, 355248730593778ull}}, {{12226150800446015499ull, 284198984475022ull}}, {{4804446021745983506ull, 454718375160036ull}}, {{154208002654876481ull, 363774700128029ull}}, {{3812715216865811508ull, 291019760102423ull}}, {{2410995532243388090ull, 465631616163877ull}}, {{12996842870020441442ull, 372505292931101ull}}, {{6708125481274442830ull, 298004234344881ull}}, {{3354303140555287882ull, 476806774951810ull}}, {{2683442512444230305ull, 381445419961448ull}}, {{9525451639439204891ull, 305156335969158ull}}, {{11551373808360817502ull, 488250137550653ull}}, {{16619796676172474648ull, 390600110040522ull}}, {{5917139711454159072ull, 312480088032418ull}}, {{5778074723584744192ull, 499968140851869ull}}, {{8311808593609705677ull, 399974512681495ull}}, {{6649446874887764541ull, 319979610145196ull}}, {{3260417370336602620ull, 511967376232314ull}}, {{6297682711011192419ull, 409573900985851ull}}, {{1348797354067043612ull, 327659120788681ull}}, {{13226122210733000749ull, 524254593261889ull}}, {{14270246583328310922ull, 419403674609511ull}}, {{7726848451920738415ull, 335522939687609ull}}, {{1294911078847450494ull, 536836703500175ull}}, {{1035928863077960395ull, 429469362800140ull}}, {{828743090462368316ull, 343575490240112ull}}, {{5015337759481699629ull, 549720784384179ull}}, {{7701619022327270026ull, 439776627507343ull}}, {{13539992847345636667ull, 351821302005874ull}}, {{10595942111527287699ull, 562914083209399ull}}, {{12166102503963740482ull, 450331266567519ull}}, {{13422230817912902709ull, 360265013254015ull}}, {{10737784654330322167ull, 288212010603212ull}}, {{2423060187960874174ull, 461139216965140ull}}, {{1938448150368699339ull, 368911373572112ull}}, {{12618804964520690441ull, 295129098857689ull}}, {{9122041499007373736ull, 472206558172303ull}}, {{14676330828689719635ull, 377765246537842ull}}, {{4362367033467955062ull, 302212197230274ull}}, {{14358484883032548746ull, 483539515568438ull}}, {{418741462200308027ull, 386831612454751ull}}, {{15092388428727887714ull, 309465289963800ull}}, {{5701077412255068727ull, 495144463942081ull}}, {{871513115062144658ull, 396115571153665ull}}, {{697210492049715726ull, 316892456922932ull}}, {{4804885602021455486ull, 507027931076691ull}}, {{154559666875254065ull, 405622344861353ull}}, {{7502345362984023899ull, 324497875889082ull}}, {{15693101395516348561ull, 519196601422531ull}}, {{8865132301671168526ull, 415357281138025ull}}, {{7092105841336934820ull, 332285824910420ull}}, {{11347369346139095713ull, 531657319856672ull}}, {{1699197847427455924ull, 425325855885338ull}}, {{8738055907425785385ull, 340260684708270ull}}, {{13980889451881256617ull, 544417095533232ull}}, {{3806013932021184647ull, 435533676426586ull}}, {{17802206404584589010ull, 348426941141268ull}}, {{6347437358883880478ull, 557483105826030ull}}, {{5077949887107104382ull, 445986484660824ull}}, {{7751708724427593829ull, 356789187728659ull}}, {{9890715794283985386ull, 285431350182927ull}}, {{1067750011886735325ull, 456690160292684ull}}, {{4543548824251298583ull, 365352128234147ull}}, {{14702885503626769836ull, 292281702587317ull}}, {{8767221546835190445ull, 467650724139708ull}}, {{14392474866951973003ull, 374120579311766ull}}, {{7824631078819668079ull, 299296463449413ull}}, {{8830060911369558603ull, 478874341519061ull}}, {{3374699914353736559ull, 383099473215249ull}}, {{6389108746224899570ull, 306479578572199ull}}, {{17601271623443659959ull, 490367325715518ull}}, {{3012970854529196998ull, 392293860572415ull}}, {{2410376683623357598ull, 313835088457932ull}}, {{7545951508539282481ull, 502136141532691ull}}, {{2347412392089515661ull, 401708913226153ull}}, {{9256627543155433175ull, 321367130580922ull}}, {{53208810081051788ull, 514187408929476ull}}, {{14799962307032482723ull, 411349927143580ull}}, {{11839969845625986178ull, 329079941714864ull}}, {{7875905308775846916ull, 526527906743783ull}}, {{13679421876504498179ull, 421222325395026ull}}, {{7254188686461688220ull, 336977860316021ull}}, {{4228004268854880506ull, 539164576505634ull}}, {{7071752229825814728ull, 431331661204507ull}}, {{16725448228086382752ull, 345065328963605ull}}, {{8313973091228660787ull, 552104526341769ull}}, {{10340527287724838953ull, 441683621073415ull}}, {{8272421830179871162ull, 353346896858732ull}}, {{17685983908369627899ull, 282677517486985ull}}, {{9850830179681853023ull, 452284027979177ull}}, {{501966514261661772ull, 361827222383342ull}}, {{11469619655635060387ull, 289461777906673ull}}, {{14662042634274186296ull, 463138844650677ull}}, {{4350936477935528391ull, 370511075720542ull}}, {{14548795626574153682ull, 296408860576433ull}}, {{1141980114067183952ull, 474254176922294ull}}, {{4602932905995657485ull, 379403341537835ull}}, {{3682346324796525988ull, 303522673230268ull}}, {{2202405304932531258ull, 485636277168429ull}}, {{5451273058687935329ull, 388509021734743ull}}, {{11739716076434168910ull, 310807217387794ull}}, {{7715499278068939286ull, 497291547820471ull}}, {{2483050607713241106ull, 397833238256377ull}}, {{13054486930396323854ull, 318266590605101ull}}, {{13508481459150297520ull, 509226544968162ull}}, {{3428087537836417370ull, 407381235974530ull}}, {{2742470030269133896ull, 325904988779624ull}}, {{11766649677914434880ull, 521447982047398ull}}, {{16792017371815368550ull, 417158385637918ull}}, {{2365567453226563870ull, 333726708510335ull}}, {{3784907925162502193ull, 533962733616536ull}}, {{17785321599097643047ull, 427170186893228ull}}, {{3160210835052383468ull, 341736149514583ull}}, {{1366988521341903226ull, 546777839223333ull}}, {{8472288446557343227ull, 437422271378666ull}}, {{3088481942503964258ull, 349937817102933ull}}, {{1252222293264432490ull, 559900507364693ull}}, {{8380475464095366639ull, 447920405891754ull}}, {{10393729186018203634ull, 358336324713403ull}}, {{15693680978298383553ull, 286669059770722ull}}, {{10352494306309772393ull, 458670495633156ull}}, {{4592646630305907591ull, 366936396506525ull}}, {{3674117304244726073ull, 293549117205220ull}}, {{5878587686791561717ull, 469678587528352ull}}, {{15770916593658980343ull, 375742870022681ull}}, {{8927384460185273951ull, 300594296018145ull}}, {{14283815136296438322ull, 480950873629032ull}}, {{4048354479553330011ull, 384760698903226ull}}, {{17996078842610305302ull, 307808559122580ull}}, {{10346982074466936867ull, 492493694596129ull}}, {{11966934474315459817ull, 393994955676903ull}}, {{16952245208936188500ull, 315195964541522ull}}, {{12366197075330260307ull, 504313543266436ull}}, {{6203608845522297922ull, 403450834613149ull}}, {{8652235891159748661ull, 322760667690519ull}}, {{2775530981629866888ull, 516417068304831ull}}, {{16977820044271534803ull, 413133654643864ull}}, {{17271604850159138166ull, 330506923715091ull}}, {{1809126057061248803ull, 528811077944147ull}}, {{12515347289874730012ull, 423048862355317ull}}, {{2633580202415963363ull, 338439089884254ull}}, {{11592425953349362027ull, 541502543814806ull}}, {{5584591947937579299ull, 433202035051845ull}}, {{4467673558350063439ull, 346561628041476ull}}, {{18216324137585832472ull, 554498604866361ull}}, {{10883710495326755654ull, 443598883893089ull}}, {{12396317211003314846ull, 354879107114471ull}}, {{6227704954060741554ull, 283903285691577ull}}, {{13653676741239096810ull, 454245257106523ull}}, {{18301639022475098094ull, 363396205685218ull}}, {{3573264773754347506ull, 290716964548175ull}}, {{5717223638006956009ull, 465147143277080ull}}, {{4573778910405564807ull, 372117714621664ull}}, {{7348371943066362169ull, 297694171697331ull}}, {{4378697479422358824ull, 476310674715730ull}}, {{3502957983537887059ull, 381048539772584ull}}, {{6491715201572219970ull, 304838831818067ull}}, {{14076093137257462276ull, 487742130908907ull}}, {{3882176880322149174ull, 390193704727126ull}}, {{17863136763225360632ull, 312154963781700ull}}, {{10134274747451025396ull, 499447942050721ull}}, {{4418070983218909993ull, 399558353640577ull}}, {{14602503230800858964ull, 319646682912461ull}}, {{15985307539797553697ull, 511434692659938ull}}, {{1720199587612311988ull, 409147754127951ull}}, {{16133554929057490883ull, 327318203302360ull}}, {{7366943812782433797ull, 523709125283777ull}}, {{16961601494451678007ull, 418967300227021ull}}, {{9879932380819432082ull, 335173840181617ull}}, {{1050496550343450039ull, 536278144290588ull}}, {{8219094869758580678ull, 429022515432470ull}}, {{6575275895806864542ull, 343218012345976ull}}, {{3141743803807162621ull, 549148819753562ull}}, {{13581441487271461066ull, 439319055802849ull}}, {{14554502004559079176ull, 351455244642279ull}}, {{12219156763068795713ull, 562328391427647ull}}, {{2396627780971215924ull, 449862713142118ull}}, {{9295999854260793385ull, 359890170513694ull}}, {{11126148698150545031ull, 287912136410955ull}}, {{17801837917040872050ull, 460659418257528ull}}, {{3173423889406966671ull, 368527534606023ull}}, {{9917436741009393983ull, 294822027684818ull}}, {{12178549970873120049ull, 471715244295709ull}}, {{13432188791440406363ull, 377372195436567ull}}, {{3367053403668504444ull, 301897756349254ull}}, {{12765983075353427757ull, 483036410158806ull}}, {{6523437645540831882ull, 386429128127045ull}}, {{5218750116432665505ull, 309143302501636ull}}, {{971302556808444163ull, 494629284002618ull}}, {{8155739674930575976ull, 395703427202094ull}}, {{10213940554686371104ull, 316562741761675ull}}, {{16342304887498193767ull, 506500386818680ull}}, {{13073843909998555014ull, 405200309454944ull}}, {{14148423942740754334ull, 324160247563955ull}}, {{4190734234675655319ull, 518656396102329ull}}, {{7041936202482434578ull, 414925116881863ull}}, {{13012246591469768309ull, 331940093505490ull}}, {{2372850472642077678ull, 531104149608785ull}}, {{1898280378113662142ull, 424883319687028ull}}, {{8897321931974750360ull, 339906655749622ull}}, {{17925063905901510900ull, 543850649199395ull}}, {{14340051124721208720ull, 435080519359516ull}}, {{7782692085035056653ull, 348064415487613ull}}, {{8762958521314180321ull, 556903064780181ull}}, {{3321018002309433934ull, 445522451824145ull}}, {{2656814401847547147ull, 356417961459316ull}}, {{16882846780445679010ull, 285134369167452ull}}, {{12255159589745445124ull, 456214990667924ull}}, {{13493476486538266422ull, 364971992534339ull}}, {{14484130003972523461ull, 291977594027471ull}}, {{15795910376872216891ull, 467164150443954ull}}, {{16326077116239683836ull, 373731320355163ull}}, {{1992815248766016099ull, 298985056284131ull}}, {{14256550842251356728ull, 478376090054609ull}}, {{15094589488542995706ull, 382700872043687ull}}, {{4696973961350575918ull, 306160697634950ull}}, {{7515158338160921469ull, 489857116215920ull}}, {{6012126670528737175ull, 391885692972736ull}}, {{1120352521681079417ull, 313508554378189ull}}, {{9171261664173547714ull, 501613687005102ull}}, {{18405055775564569141ull, 401290949604081ull}}, {{11034695805709744989ull, 321032759683265ull}}, {{17655513289135591983ull, 513652415493224ull}}, {{17813759446050383910ull, 410921932394579ull}}, {{17940356371582217451ull, 328737545915663ull}}, {{6568477306080085982ull, 525980073465062ull}}, {{16322828289089799755ull, 420784058772049ull}}, {{16747611446013750127ull, 336627247017639ull}}, {{15728131869396269235ull, 538603595228223ull}}, {{1514459051291284418ull, 430882876182579ull}}, {{4900916055774937857ull, 344706300946063ull}}, {{4152116874497990249ull, 551530081513701ull}}, {{18079088758566033492ull, 441224065210960ull}}, {{14463271006852826793ull, 352979252168768ull}}, {{502570361256530465ull, 282383401735015ull}}, {{804112578010448744ull, 451813442776024ull}}, {{4332638877150269319ull, 361450754220819ull}}, {{7155459916462125778ull, 289160603376655ull}}, {{11448735866339401245ull, 462656965402648ull}}, {{16537686322555341642ull, 370125572322118ull}}, {{2162102613818542344ull, 296100457857695ull}}, {{3459364182109667751ull, 473760732572312ull}}, {{13835537789913465170ull, 379008586057849ull}}, {{14757779046672682459ull, 303206868846279ull}}, {{12544400030450560966ull, 485130990154047ull}}, {{2656822394876628126ull, 388104792123238ull}}, {{9504155545385123147ull, 310483833698590ull}}, {{15206648872616197036ull, 496774133917744ull}}, {{15854667912834867952ull, 397419307134195ull}}, {{12683734330267894361ull, 317935445707356ull}}, {{12915277298944810332ull, 508696713131770ull}}, {{10332221839155848265ull, 406957370505416ull}}, {{4576428656582768289ull, 325565896404333ull}}, {{3632937035790518939ull, 520905434246933ull}}, {{10285047258116235798ull, 416724347397546ull}}, {{4538688991751078315ull, 333379477918037ull}}, {{10951251201543635627ull, 533407164668859ull}}, {{12450349775976818825ull, 426725731735087ull}}, {{2581582191297634414ull, 341380585388070ull}}, {{4130531506076215062ull, 546208936620912ull}}, {{14372471649086703019ull, 436967149296729ull}}, {{15187326134011272738ull, 349573719437383ull}}, {{2163628925966574443ull, 559317951099814ull}}, {{5420251955515169877ull, 447454360879851ull}}, {{646852749670225578ull, 357963488703881ull}}, {{15274877458703821755ull, 286370790963104ull}}, {{13371757489700383839ull, 458193265540967ull}}, {{3318708362276486425ull, 366554612432774ull}}, {{6344315504563099463ull, 293243689946219ull}}, {{17529602436784779788ull, 469189903913950ull}}, {{14023681949427823830ull, 375351923131160ull}}, {{11218945559542259064ull, 300281538504928ull}}, {{14260964080525704179ull, 480450461607885ull}}, {{11408771264420563343ull, 384360369286308ull}}, {{16505714641020271321ull, 307488295429046ull}}, {{583701722439061852ull, 491981272686475ull}}, {{466961377951249481ull, 393585018149180ull}}, {{373569102360999585ull, 314868014519344ull}}, {{7976408193261419982ull, 503788823230950ull}}, {{6381126554609135986ull, 403031058584760ull}}, {{5104901243687308789ull, 322424846867808ull}}, {{4478493175157783739ull, 515879754988493ull}}, {{10961492169610047637ull, 412703803990794ull}}, {{12458542550429948433ull, 330163043192635ull}}, {{1486924006978365877ull, 528260869108217ull}}, {{12257585649808423671ull, 422608695286573ull}}, {{17184766149330559583ull, 338086956229258ull}}, {{5359532950477433394ull, 540939129966814ull}}, {{7976975175123857038ull, 432751303973451ull}}, {{2692231325357175307ull, 346201043178761ull}}, {{15375616564797211462ull, 553921669086017ull}}, {{4921795622353948523ull, 443137335268814ull}}, {{7626785312625069141ull, 354509868215051ull}}, {{2412079435358144990ull, 283607894572041ull}}, {{14927373540798762954ull, 453772631315265ull}}, {{11941898832639010363ull, 363018105052212ull}}, {{2174821436627387644ull, 290414484041770ull}}, {{3479714298603820230ull, 464663174466832ull}}, {{13851817883108787154ull, 371730539573465ull}}, {{11081454306487029723ull, 297384431658772ull}}, {{2972931631411606264ull, 475815090654036ull}}, {{17135740564096926304ull, 380652072523228ull}}, {{2640546007051810074ull, 304521658018583ull}}, {{535524796540985795ull, 487234652829733ull}}, {{7807117466716609282ull, 389787722263786ull}}, {{2556345158631377102ull, 311830177811029ull}}, {{11468849883294024011ull, 498928284497646ull}}, {{5485731091893308885ull, 399142627598117ull}}, {{15456631317740378078ull, 319314102078493ull}}, {{2594517219933142985ull, 510902563325590ull}}, {{2075613775946514388ull, 408722050660472ull}}, {{12728537464982942480ull, 326977640528377ull}}, {{5608264685005066675ull, 523164224845404ull}}, {{8175960562745963663ull, 418531379876323ull}}, {{13919466079680591577ull, 334825103901058ull}}, {{135052839037484584ull, 535720166241694ull}}, {{3797391085971897991ull, 428576132993355ull}}, {{3037912868777518392ull, 342860906394684ull}}, {{12239358219527850075ull, 548577450231494ull}}, {{13480835390364190383ull, 438861960185195ull}}, {{10784668312291352306ull, 351089568148156ull}}, {{9876771670182343044ull, 561743309037050ull}}, {{7901417336145874435ull, 449394647229640ull}}, {{6321133868916699548ull, 359515717783712ull}}, {{16124953539359090608ull, 287612574226969ull}}, {{14731879218748814003ull, 460180118763151ull}}, {{8096154560257140879ull, 368144095010521ull}}, {{2787574833463802380ull, 294515276008417ull}}, {{8149468548283994132ull, 471224441613467ull}}, {{17587621282852926275ull, 376979553290773ull}}, {{3002050582056610050ull, 301583642632619ull}}, {{12181978560774396727ull, 482533828212190ull}}, {{9745582848619517381ull, 386027062569752ull}}, {{417768649411793259ull, 308821650055802ull}}, {{4357778653800779537ull, 494114640089283ull}}, {{10864920552524444276ull, 395291712071426ull}}, {{5002587627277645098ull, 316233369657141ull}}, {{625442574160411510ull, 505973391451426ull}}, {{15257749318295970501ull, 404778713161140ull}}, {{12206199454636776400ull, 323822970528912ull}}, {{4772523868451200948ull, 518116752846260ull}}, {{3818019094760960759ull, 414493402277008ull}}, {{10433112905292589253ull, 331594721821606ull}}, {{9314283018984322159ull, 530551554914570ull}}, {{7451426415187457727ull, 424441243931656ull}}, {{2271792317408055858ull, 339552995145325ull}}, {{3634867707852889374ull, 543284792232520ull}}, {{2907894166282311499ull, 434627833786016ull}}, {{17083710591993490492ull, 347702267028812ull}}, {{12576541688221943494ull, 556323627246100ull}}, {{10061233350577554795ull, 445058901796880ull}}, {{8048986680462043836ull, 356047121437504ull}}, {{10128538159111545392ull, 284837697150003ull}}, {{12516312239836562304ull, 455740315440005ull}}, {{10013049791869249843ull, 364592252352004ull}}, {{11699788648237310198ull, 291673801881603ull}}, {{15030313022437785994ull, 466678083010565ull}}, {{12024250417950228795ull, 373342466408452ull}}, {{2240702704876362389ull, 298673973126762ull}}, {{7274473142544090146ull, 477878357002819ull}}, {{9508927328777182440ull, 382302685602255ull}}, {{7607141863021745952ull, 305842148481804ull}}, {{1103380536609062554ull, 489347437570887ull}}, {{11950750873512981013ull, 391477950056709ull}}, {{13249949513552295133ull, 313182360045367ull}}, {{6442523962716030921ull, 501091776072588ull}}, {{12532716799656645383ull, 400873420858070ull}}, {{10026173439725316306ull, 320698736686456ull}}, {{8663179874076685444ull, 513117978698330ull}}, {{6930543899261348355ull, 410494382958664ull}}, {{9233783934150989007ull, 328395506366931ull}}, {{7395356665157761765ull, 525432810187090ull}}, {{5916285332126209412ull, 420346248149672ull}}, {{15801074709926698499ull, 336276998519737ull}}, {{10524324276915076306ull, 538043197631580ull}}, {{8419459421532061045ull, 430434558105264ull}}, {{10424916351967559159ull, 344347646484211ull}}, {{9301168533664274008ull, 550956234374738ull}}, {{14819632456415239853ull, 440764987499790ull}}, {{11855705965132191882ull, 352611989999832ull}}, {{2105867142621932859ull, 282089591999866ull}}, {{14437433872420823545ull, 451343347199785ull}}, {{11549947097936658836ull, 361074677759828ull}}, {{16618655307833147715ull, 288859742207862ull}}, {{11832453233565395051ull, 462175587532580ull}}, {{9465962586852316041ull, 369740470026064ull}}, {{11262118884223763156ull, 295792376020851ull}}, {{10640692585274200403ull, 473267801633362ull}}, {{1133856438735539676ull, 378614241306690ull}}, {{907085150988431741ull, 302891393045352ull}}, {{5140685056323401109ull, 484626228872563ull}}, {{11491245674542541533ull, 387700983098050ull}}, {{9192996539634033226ull, 310160786478440ull}}, {{14708794463414453163ull, 496257258365504ull}}, {{15456384385473472853ull, 397005806692403ull}}, {{1297061064153047313ull, 317604645353923ull}}, {{16832692961612516994ull, 508167432566276ull}}, {{9776805554548103272ull, 406533946053021ull}}, {{4132095628896572294ull, 325227156842417ull}}, {{10300701820976425994ull, 520363450947867ull}}, {{861863827297320149ull, 416290760758294ull}}, {{4378839876579766442ull, 333032608606635ull}}, {{7006143802527626308ull, 532852173770616ull}}, {{1915566227280190723ull, 426281739016493ull}}, {{8911150611307973225ull, 341025391213194ull}}, {{3189794533867026190ull, 545640625941111ull}}, {{17309230886061262245ull, 436512500752888ull}}, {{2779338264623278826ull, 349210000602311ull}}, {{15514987667622977092ull, 558736000963697ull}}, {{5033292504614561027ull, 446988800770958ull}}, {{11405331633175469468ull, 357591040616766ull}}, {{5434916491798465251ull, 286072832493413ull}}, {{5006517572135634078ull, 457716531989461ull}}, {{315865242966596939ull, 366173225591569ull}}, {{3942041009115187875ull, 292938580473255ull}}, {{6307265614584300600ull, 468701728757208ull}}, {{12424510121151261126ull, 374961383005766ull}}, {{6250259282179098578ull, 299969106404613ull}}, {{6311066036744647401ull, 479950570247381ull}}, {{1359504014653807598ull, 383960456197905ull}}, {{1087603211723046078ull, 307168364958324ull}}, {{9118862768240694372ull, 491469383933318ull}}, {{14673787844076376144ull, 393175507146654ull}}, {{15428379090003011238ull, 314540405717323ull}}, {{2549313655553356042ull, 503264649147718ull}}, {{9418148553926505480ull, 402611719318174ull}}, {{11223867657883114707ull, 322089375454539ull}}, {{6890141808387252562ull, 515343000727263ull}}, {{12890811076193622696ull, 412274400581810ull}}, {{10312648860954898156ull, 329819520465448ull}}, {{12810889362785926727ull, 527711232744717ull}}, {{2870013860744920735ull, 422168986195774ull}}, {{5985359903337846911ull, 337735188956619ull}}, {{16955273474824375705ull, 540376302330590ull}}, {{13564218779859500564ull, 432301041864472ull}}, {{3472677394403779805ull, 345840833491578ull}}, {{1866935016304137365ull, 553345333586525ull}}, {{1493548013043309892ull, 442676266869220ull}}, {{1194838410434647913ull, 354141013495376ull}}, {{15713265987315359623ull, 283312810796300ull}}, {{6694481505995023781ull, 453300497274081ull}}, {{1666236390054108702ull, 362640397819265ull}}, {{1332989112043286961ull, 290112318255412ull}}, {{5822131394011169462ull, 464179709208659ull}}, {{8347053929950845892ull, 371343767366927ull}}, {{17745689588186407683ull, 297075013893541ull}}, {{2567661637904880031ull, 475320022229667ull}}, {{13122175754549634995ull, 380256017783733ull}}, {{17876438233123528642ull, 304204814226986ull}}, {{2776859469804273565ull, 486727702763179ull}}, {{5910836390585329175ull, 389382162210543ull}}, {{12107366741952083986ull, 311505729768434ull}}, {{8303740342897603409ull, 498409167629495ull}}, {{6642992274318082727ull, 398727334103596ull}}, {{1625045004712555858ull, 318981867282877ull}}, {{6289420822281999697ull, 510370987652603ull}}, {{12410234287309420404ull, 408296790122082ull}}, {{2549489800363715677ull, 326637432097666ull}}, {{15147230124807676052ull, 522619891356265ull}}, {{12117784099846140842ull, 418095913085012ull}}, {{2315529650393092027ull, 334476730468010ull}}, {{3704847440628947243ull, 535162768748816ull}}, {{17721273211470799087ull, 428130214999052ull}}, {{6798320939692818623ull, 342504171999242ull}}, {{14566662318250420121ull, 548006675198787ull}}, {{4274632225116515450ull, 438405340159030ull}}, {{3419705780093212360ull, 350724272127224ull}}, {{12850226877632960423ull, 561158835403558ull}}, {{17658879131590188985ull, 448927068322846ull}}, {{10437754490530240864ull, 359141654658277ull}}, {{971505962940372045ull, 287313323726622ull}}, {{5243758355446505596ull, 459701317962595ull}}, {{4195006684357204476ull, 367761054370076ull}}, {{18113400606453404874ull, 294208843496060ull}}, {{10534696896615896182ull, 470734149593697ull}}, {{1049059887808896299ull, 376587319674958ull}}, {{8217945539730937686ull, 301269855739966ull}}, {{5770015234085679651ull, 482031769183946ull}}, {{926663372526633398ull, 385625415347157ull}}, {{11809377142247037688ull, 308500332277725ull}}, {{448259353885708685ull, 493600531644361ull}}, {{15116002742076208240ull, 394880425315488ull}}, {{1024755749435235623ull, 315904340252391ull}}, {{12707655643322107966ull, 505446944403825ull}}, {{10166124514657686373ull, 404357555523060ull}}, {{8132899611726149098ull, 323486044418448ull}}, {{9323290564019928234ull, 517577671069517ull}}, {{79934821732121941ull, 414062136855614ull}}, {{3753296672127607876ull, 331249709484491ull}}, {{17073321119629903571ull, 529999535175185ull}}, {{13658656895703922857ull, 423999628140148ull}}, {{18305623146046958932ull, 339199702512118ull}}, {{7152904145223672352ull, 542719524019390ull}}, {{5722323316178937881ull, 434175619215512ull}}, {{15645905097168881275ull, 347340495372409ull}}, {{13965401711244479070ull, 555744792595855ull}}, {{11172321368995583256ull, 444595834076684ull}}, {{12627205909938376928ull, 355676667261347ull}}, {{2723067098466880896ull, 284541333809078ull}}, {{667558542805099110ull, 455266134094525ull}}, {{534046834244079288ull, 364212907275620ull}}, {{427237467395263430ull, 291370325820496ull}}, {{11751626392058152458ull, 466192521312793ull}}, {{16779998743130342613ull, 372954017050234ull}}, {{17113347809246184414ull, 298363213640187ull}}, {{12623961235826253769ull, 477381141824300ull}}, {{10099168988661003015ull, 381904913459440ull}}, {{8079335190928802412ull, 305523930767552ull}}, {{16616285120227994183ull, 488838289228083ull}}, {{2224981651956664377ull, 391070631382467ull}}, {{12848031765791062471ull, 312856505105973ull}}, {{16867502010523789630ull, 500570408169557ull}}, {{6115303978935211058ull, 400456326535646ull}}, {{1202894368406258523ull, 320365061228517ull}}, {{5613979804191923960ull, 512584097965627ull}}, {{15559230287579270138ull, 410067278372501ull}}, {{8758035415321505787ull, 328053822698001ull}}, {{6634159035030588613ull, 524886116316802ull}}, {{16375373672250201860ull, 419908893053441ull}}, {{9410950123058251165ull, 335927114442753ull}}, {{11368171382151291540ull, 537483383108405ull}}, {{9094537105721033232ull, 429986706486724ull}}, {{10964978499318736909ull, 343989365189379ull}}, {{6475919154684248085ull, 550382984303007ull}}, {{16248781767973129437ull, 440306387442405ull}}, {{12999025414378503550ull, 352245109953924ull}}, {{14088569146244713163ull, 281796087963139ull}}, {{11473664189765810091ull, 450873740741023ull}}, {{16557628981296468719ull, 360698992592818ull}}, {{2178056740811444006ull, 288559194074255ull}}, {{3484890785298310410ull, 461694710518808ull}}, {{10166610257722468974ull, 369355768415046ull}}, {{4443939391436064856ull, 295484614732037ull}}, {{10799651841039614093ull, 472775383571259ull}}, {{12329070287573601597ull, 378220306857007ull}}, {{2484558600575060631ull, 302576245485606ull}}, {{15043340205145827980ull, 484121992776969ull}}, {{15724020978858572707ull, 387297594221575ull}}, {{12579216783086858166ull, 309838075377260ull}}, {{1680002779229421449ull, 495740920603617ull}}, {{12412048667609268129ull, 396592736482893ull}}, {{17308336563571235150ull, 317274189186314ull}}, {{16625292057488245270ull, 507638702698103ull}}, {{2232187201764865246ull, 406110962158483ull}}, {{9164447390895712843ull, 324888769726786ull}}, {{7284418195949319903ull, 519822031562858ull}}, {{13206232186243276569ull, 415857625250286ull}}, {{6875636934252710932ull, 332686100200229ull}}, {{18379716724288158138ull, 532297760320366ull}}, {{11014424564688616187ull, 425838208256293ull}}, {{16190237281234713596ull, 340670566605034ull}}, {{14836333205749810784ull, 545072906568055ull}}, {{11869066564599848627ull, 436058325254444ull}}, {{13184602066421789225ull, 348846660203555ull}}, {{2648619232565311144ull, 558154656325689ull}}, {{5808244200794159238ull, 446523725060551ull}}, {{957246545893417067ull, 357218980048441ull}}, {{15523192495682374946ull, 285775184038752ull}}, {{10079712734124158622ull, 457240294462004ull}}, {{11753119002041237221ull, 365792235569603ull}}, {{16781192831116810423ull, 292633788455682ull}}, {{12092513270819255384ull, 468214061529092ull}}, {{2295312987171583661ull, 374571249223274ull}}, {{5525599204479177252ull, 299656999378619ull}}, {{16219656356650504249ull, 479451199005790ull}}, {{12975725085320403399ull, 383560959204632ull}}, {{3001882438772502073ull, 306848767363706ull}}, {{15871058346261734287ull, 490958027781929ull}}, {{16386195491751297752ull, 392766422225543ull}}, {{2040909949175307232ull, 314213137780435ull}}, {{3265455918680491572ull, 502741020448696ull}}, {{17369759993912034550ull, 402192816358956ull}}, {{10206459180387717317ull, 321754253087165ull}}, {{16330334688620347707ull, 514806804939464ull}}, {{16753616565638188489ull, 411845443951571ull}}, {{9713544437768640468ull, 329476355161257ull}}, {{784275841462183456ull, 527162168258012ull}}, {{11695467117395477734ull, 421729734606409ull}}, {{13045722508658292511ull, 337383787685127ull}}, {{6115760754885626724ull, 539814060296204ull}}, {{8581957418650411703ull, 431851248236963ull}}, {{14244263564404150008ull, 345480998589570ull}}, {{4344077629337088398ull, 552769597743313ull}}, {{10853959732953491364ull, 442215678194650ull}}, {{8683167786362793091ull, 353772542555720ull}}, {{6946534229090234473ull, 283018034044576ull}}, {{3735757137060554511ull, 452828854471322ull}}, {{14056652153874174578ull, 362263083577057ull}}, {{3866624093615519016ull, 289810466861646ull}}, {{17254644994010561396ull, 463696746978633ull}}, {{2735669550982718147ull, 370957397582907ull}}, {{13256582085011905487ull, 296765918066325ull}}, {{2763787262309497163ull, 474825468906121ull}}, {{16968425068815239023ull, 379860375124896ull}}, {{9885391240310280895ull, 303888300099917ull}}, {{1059230725528808140ull, 486221280159868ull}}, {{8226082209906867158ull, 388977024127894ull}}, {{10270214582667404050ull, 311181619302315ull}}, {{16432343332267846480ull, 497890590883704ull}}, {{16835223480556187507ull, 398312472706963ull}}, {{2400132340219219036ull, 318649978165571ull}}, {{14908258188576481427ull, 509839965064913ull}}, {{858560106635454172ull, 407871972051931ull}}, {{15444243344276004631ull, 326297577641544ull}}, {{13642742906615876440ull, 522076124226471ull}}, {{7224845510550790828ull, 417660899381177ull}}, {{16847922852666363632ull, 334128719504941ull}}, {{1131234861072809549ull, 534605951207907ull}}, {{11973034333083978609ull, 427684760966325ull}}, {{9578427466467182887ull, 342147808773060ull}}, {{15325483946347492620ull, 547436494036896ull}}, {{8571038342336083772ull, 437949195229517ull}}, {{17924877118094597987ull, 350359356183613ull}}, {{6543710500499894841ull, 560574969893782ull}}, {{16303014844625646842ull, 448459975915025ull}}, {{13042411875700517474ull, 358767980732020ull}}, {{10433929500560413979ull, 287014384585616ull}}, {{9315589571412841720ull, 459223015336986ull}}, {{3763122842388363053ull, 367378412269589ull}}, {{6699847088652600765ull, 293902729815671ull}}, {{3341057712360340578ull, 470244367705074ull}}, {{6362194984630182786ull, 376195494164059ull}}, {{8779104802446056552ull, 300956395331247ull}}, {{17735916498655600806ull, 481530232529995ull}}, {{14188733198924480645ull, 385224186023996ull}}, {{7661637744397674193ull, 308179348819197ull}}, {{15947969205778189032ull, 493086958110715ull}}, {{12758375364622551225ull, 394469566488572ull}}, {{2828002662214220334ull, 315575653190858ull}}, {{835455444800842211ull, 504921045105373ull}}, {{8047061985324494415ull, 403936836084298ull}}, {{13816347217743416178ull, 323149468867438ull}}, {{18416806733647555563ull, 517039150187901ull}}, {{11044096572176134127ull, 413631320150321ull}}, {{5145928442998996978ull, 330905056120257ull}}, {{11922834323540305489ull, 529448089792411ull}}, {{5848918644090334068ull, 423558471833929ull}}, {{8368483730014177577ull, 338846777467143ull}}, {{9700225153280773800ull, 542154843947429ull}}, {{11449528937366529363ull, 433723875157943ull}}, {{16538320779377044137ull, 346979100126354ull}}, {{15393266802777539650ull, 555166560202167ull}}, {{4935915812738211074ull, 444133248161734ull}}, {{7638081464932479182ull, 355306598529387ull}}, {{17178511616171714315ull, 284245278823509ull}}, {{16417572141649011935ull, 454792446117615ull}}, {{13134057713319209548ull, 363833956894092ull}}, {{3128548541171546992ull, 291067165515274ull}}, {{12384375295358295833ull, 465707464824438ull}}, {{17286197865770457313ull, 372565971859550ull}}, {{13828958292616365850ull, 298052777487640ull}}, {{3679589194476633745ull, 476884443980225ull}}, {{2943671355581306996ull, 381507555184180ull}}, {{2354937084465045596ull, 305206044147344ull}}, {{11146596964627893601ull, 488329670635750ull}}, {{8917277571702314881ull, 390663736508600ull}}, {{7133822057361851905ull, 312530989206880ull}}, {{11414115291778963048ull, 500049582731008ull}}, {{16509989862906991084ull, 400039666184806ull}}, {{9518643075583682544ull, 320031732947845ull}}, {{15229828920933892071ull, 512050772716552ull}}, {{4805165507263293010ull, 409640618173242ull}}, {{14912178850036365378ull, 327712494538593ull}}, {{1723393271606722665ull, 524339991261750ull}}, {{1378714617285378132ull, 419471993009400ull}}, {{1102971693828302506ull, 335577594407520ull}}, {{1764754710125284009ull, 536924151052032ull}}, {{12479850212325958177ull, 429539320841625ull}}, {{9983880169860766542ull, 343631456673300ull}}, {{15974208271777226467ull, 549810330677280ull}}, {{12779366617421781173ull, 439848264541824ull}}, {{13912842108679335262ull, 351878611633459ull}}, {{14819622501685378532ull, 281502889306767ull}}, {{8954000743728964359ull, 450404622890828ull}}, {{14541898224466992134ull, 360323698312662ull}}, {{4254820950089773061ull, 288258958650130ull}}, {{6807713520143636897ull, 461214333840208ull}}, {{12824868445598730164ull, 368971467072166ull}}, {{6570545941737073808ull, 295177173657733ull}}, {{6823524692037407770ull, 472283477852373ull}}, {{12837517383113746862ull, 377826782281898ull}}, {{17648711535974818136ull, 302261425825518ull}}, {{6101845569108247079ull, 483618281320830ull}}, {{4881476455286597663ull, 386894625056664ull}}, {{7594529978971188453ull, 309515700045331ull}}, {{4772550336870080879ull, 495225120072530ull}}, {{3818040269496064703ull, 396180096058024ull}}, {{6743781030338762086ull, 316944076846419ull}}, {{18168747278025839984ull, 507110522954270ull}}, {{14534997822420671987ull, 405688418363416ull}}, {{7938649443194627266ull, 324550734690733ull}}, {{9012490294369493303ull, 519281175505173ull}}, {{14588689864979415289ull, 415424940404138ull}}, {{602905447757801261ull, 332339952323311ull}}, {{12032695160638212988ull, 531743923717297ull}}, {{2247458499026749744ull, 425395138973838ull}}, {{9176664428705220442ull, 340316111179070ull}}, {{14682663085928352707ull, 544505777886512ull}}, {{4367432839258861519ull, 435604622309210ull}}, {{3493946271407089215ull, 348483697847368ull}}, {{1900965219509432421ull, 557573916555789ull}}, {{5210120990349456260ull, 446059133244631ull}}, {{478747977537654685ull, 356847306595705ull}}, {{382998382030123748ull, 285477845276564ull}}, {{7991495040732018643ull, 456764552442502ull}}, {{17461242476811345884ull, 365411641954001ull}}, {{10279645166707166384ull, 292329313563201ull}}, {{9068734637247645568ull, 467726901701122ull}}, {{18323034154023847424ull, 374181521360897ull}}, {{7279729693735257293ull, 299345217088718ull}}, {{7958218695234501345ull, 478952347341949ull}}, {{10055923770929511399ull, 383161877873559ull}}, {{11734087831485519443ull, 306529502298847ull}}, {{4017145271409189816ull, 490447203678156ull}}, {{17971111476094993145ull, 392357762942524ull}}, {{18066237995617904839ull, 313886210354019ull}}, {{17837934348762916774ull, 502217936566431ull}}, {{10580998664268423096ull, 401774349253145ull}}, {{8464798931414738476ull, 321419479402516ull}}, {{6164980660779760916ull, 514271167044026ull}}, {{1242635713881898410ull, 411416933635221ull}}, {{15751503830073160020ull, 329133546908176ull}}, {{17823708498633235386ull, 526613675053082ull}}, {{6880269169422767663ull, 421290940042466ull}}, {{1814866520796303807ull, 337032752033973ull}}, {{17661181692241727384ull, 539252403254356ull}}, {{10439596539051471584ull, 431401922603485ull}}, {{8351677231241177267ull, 345121538082788ull}}, {{9673334755243973304ull, 552194460932461ull}}, {{4049318989453268320ull, 441755568745969ull}}, {{6928804006304524979ull, 353404454996775ull}}, {{5543043205043619983ull, 282723563997420ull}}, {{8868869128069791974ull, 452357702395872ull}}, {{18163141746681564548ull, 361886161916697ull}}, {{7151815767861430992ull, 289508929533358ull}}, {{7753556413836379265ull, 463214287253373ull}}, {{13581542760552924058ull, 370571429802698ull}}, {{18243931837926159893ull, 296457143842158ull}}, {{7054198052230393889ull, 474331430147454ull}}, {{9332707256526225435ull, 379465144117963ull}}, {{14844863434704800994ull, 303572115294370ull}}, {{5305037421818129975ull, 485715384470993ull}}, {{11622727566938324626ull, 388572307576794ull}}, {{12987530868292570024ull, 310857846061435ull}}, {{2333305315558560423ull, 497372553698297ull}}, {{12934690696672579308ull, 397898042958637ull}}, {{2969054927854242800ull, 318318434366910ull}}, {{4750487884566788480ull, 509309494987056ull}}, {{111041492911520460ull, 407447595989645ull}}, {{88833194329216368ull, 325958076791716ull}}, {{11210179555152477159ull, 521532922866745ull}}, {{8968143644121981727ull, 417226338293396ull}}, {{3485166100555675058ull, 333781070634717ull}}, {{9265614575630990417ull, 534049713015547ull}}, {{33794031020971687ull, 427239770412438ull}}, {{7405732854300597996ull, 341791816329950ull}}, {{11849172566880956794ull, 546866906127920ull}}, {{9479338053504765435ull, 437493524902336ull}}, {{3894121628061902025ull, 349994819921869ull}}, {{13609292234382863886ull, 559991711874990ull}}, {{10887433787506291109ull, 447993369499992ull}}, {{1331249400521212241ull, 358394695599994ull}}, {{4754348335158880116ull, 286715756479995ull}}, {{7606957336254208185ull, 458745210367992ull}}, {{17153612313229097518ull, 366996168294393ull}}, {{2654843406357547044ull, 293596934635515ull}}, {{4247749450172075271ull, 469755095416824ull}}, {{7087548374879570540ull, 375804076333459ull}}, {{9359387514645566755ull, 300643261066767ull}}, {{217624764465265516ull, 481029217706828ull}}, {{7552797441056033059ull, 384823374165462ull}}, {{17110284397070557417ull, 307858699332369ull}}, {{16308408591087160897ull, 492573918931791ull}}, {{9357378058127818395ull, 394059135145433ull}}, {{14864600075986075362ull, 315247308116346ull}}, {{16404662492093899933ull, 504395692986154ull}}, {{16813078808417030270ull, 403516554388923ull}}, {{2382416602507893246ull, 322813243511139ull}}, {{11190564193496449840ull, 516501189617822ull}}, {{1573753725313339226ull, 413200951694258ull}}, {{8637700609734492027ull, 330560761355406ull}}, {{6441623346091366597ull, 528897218168650ull}}, {{5153298676873093277ull, 423117774534920ull}}, {{4122638941498474622ull, 338494219627936ull}}, {{17664268750623290365ull, 541590751404697ull}}, {{6752717371014811645ull, 433272601123758ull}}, {{12780871526295669963ull, 346618080899006ull}}, {{13070696812589251294ull, 554588929438410ull}}, {{10456557450071401035ull, 443671143550728ull}}, {{15743943589540941474ull, 354936914840582ull}}, {{5216457242148932533ull, 283949531872466ull}}, {{967633957954471407ull, 454319250995946ull}}, {{15531502425331218418ull, 363455400796756ull}}, {{8735853125523064411ull, 290764320637405ull}}, {{13977365000836903058ull, 465222913019848ull}}, {{113845556443791477ull, 372178330415879ull}}, {{3780425259896943505ull, 297742664332703ull}}, {{2359331601093199284ull, 476388262932325ull}}, {{1887465280874559427ull, 381110610345860ull}}, {{1509972224699647542ull, 304888488276688ull}}, {{17173350818487077360ull, 487821581242700ull}}, {{13738680654789661888ull, 390257264994160ull}}, {{10990944523831729510ull, 312205811995328ull}}, {{13896162423388856894ull, 499529299192525ull}}, {{11116929938711085515ull, 399623439354020ull}}, {{8893543950968868412ull, 319698751483216ull}}, {{6850972692066368813ull, 511518002373146ull}}, {{1791429338911184727ull, 409214401898517ull}}, {{12501189915354678751ull, 327371521518813ull}}, {{16312555049825575679ull, 523794434430101ull}}, {{9360695225118550220ull, 419035547544081ull}}, {{3799207365352929852ull, 335228438035265ull}}, {{6078731784564687764ull, 536365500856424ull}}, {{8552334242393660534ull, 429092400685139ull}}, {{10531216208656838751ull, 343273920548111ull}}, {{9471248304367121355ull, 549238272876978ull}}, {{14955696272977517730ull, 439390618301582ull}}, {{4585859388898193538ull, 351512494641266ull}}, {{18405421466462840630ull, 562419991426025ull}}, {{14724337173170272504ull, 449935993140820ull}}, {{11779469738536218003ull, 359948794512656ull}}, {{5734226976087064079ull, 287959035610125ull}}, {{9174763161739302527ull, 460734456976200ull}}, {{7339810529391442021ull, 368587565580960ull}}, {{5871848423513153617ull, 294870052464768ull}}, {{5705608662879135464ull, 471792083943629ull}}, {{8253835745045218695ull, 377433667154903ull}}, {{13981766225519995602ull, 301946933723922ull}}, {{7613430701864351671ull, 483115093958276ull}}, {{2401395746749571013ull, 386492075166621ull}}, {{16678511856367298103ull, 309193660133296ull}}, {{860177266994304703ull, 494709856213275ull}}, {{688141813595443762ull, 395767884970620ull}}, {{550513450876355010ull, 316614307976496ull}}, {{11948867965627898986ull, 506582892762393ull}}, {{16937792001986139835ull, 405266314209914ull}}, {{17239582416330822191ull, 324213051367931ull}}, {{1757890162935943243ull, 518740882188691ull}}, {{16163707389316395887ull, 414992705750952ull}}, {{5552268281969296063ull, 331994164600762ull}}, {{12572978065892784025ull, 531190663361219ull}}, {{13747731267456137543ull, 424952530688975ull}}, {{10998185013964910034ull, 339962024551180ull}}, {{17597096022343856055ull, 543939239281888ull}}, {{3009630373649353875ull, 435151391425511ull}}, {{17165099557887124392ull, 348121113140408ull}}, {{5328066404167937089ull, 556993781024654ull}}, {{7951801938076259994ull, 445595024819723ull}}, {{13740139179944828642ull, 356476019855778ull}}, {{18370808973439683560ull, 285180815884622ull}}, {{14635899098535852403ull, 456289305415396ull}}, {{8019370464086771599ull, 365031444332317ull}}, {{17483542815495148249ull, 292025155465853ull}}, {{5837575616340775259ull, 467240248745366ull}}, {{980711678330709884ull, 373792198996293ull}}, {{8163266972148388553ull, 299033759197034ull}}, {{1993180711211690716ull, 478454014715255ull}}, {{1594544568969352573ull, 382763211772204ull}}, {{4964984469917392381ull, 306210569417763ull}}, {{4254626337125917487ull, 489936911068421ull}}, {{18161096328668375283ull, 391949528854736ull}}, {{10839528248192789903ull, 313559623083789ull}}, {{6275198752882732875ull, 501695396934063ull}}, {{12398856631790006946ull, 401356317547250ull}}, {{9919085305432005557ull, 321085054037800ull}}, {{15870536488691208892ull, 513736086460480ull}}, {{12696429190952967113ull, 410988869168384ull}}, {{13846492167504284014ull, 328791095334707ull}}, {{7396992209039213129ull, 526065752535532ull}}, {{16985640211457101473ull, 420852602028425ull}}, {{13588512169165681178ull, 336682081622740ull}}, {{3294875396955538270ull, 538691330596385ull}}, {{2635900317564430616ull, 430953064477108ull}}, {{9487417883535365139ull, 344762451581686ull}}, {{7801170984172763576ull, 551619922530698ull}}, {{13619634416822031507ull, 441295938024558ull}}, {{18274405162941445852ull, 353036750419646ull}}, {{10930175315611246358ull, 282429400335717ull}}, {{2730885246010352881ull, 451887040537148ull}}, {{9563405826292102951ull, 361509632429718ull}}, {{15029422290517503007ull, 289207705943774ull}}, {{12979029220602273842ull, 462732329510039ull}}, {{14072572191223729397ull, 370185863608031ull}}, {{7568708938237073194ull, 296148690886425ull}}, {{12109934301179317111ull, 473837905418280ull}}, {{9687947440943453688ull, 379070324334624ull}}, {{11439706767496673274ull, 303256259467699ull}}, {{7235484383768946269ull, 485210015148319ull}}, {{9477736321757067338ull, 388168012118655ull}}, {{7582189057405653870ull, 310534409694924ull}}, {{1063456047623315223ull, 496855055511879ull}}, {{4540113652840562502ull, 397484044409503ull}}, {{11010788551756270648ull, 317987235527602ull}}, {{2859866423842391744ull, 508779576844164ull}}, {{5977241953815823718ull, 407023661475331ull}}, {{1092444748310748651ull, 325618929180265ull}}, {{1747911597297197842ull, 520990286688424ull}}, {{5087678092579668597ull, 416792229350739ull}}, {{7759491288805645201ull, 333433783480591ull}}, {{5036488432605211675ull, 533494053568946ull}}, {{339841931342259017ull, 426795242855157ull}}, {{11339919989299538183ull, 341436194284125ull}}, {{18143871982879261093ull, 546297910854600ull}}, {{14515097586303408874ull, 437038328683680ull}}, {{11612078069042727099ull, 349630662946944ull}}, {{7511278466242632389ull, 559409060715111ull}}, {{2319673958252195588ull, 447527248572089ull}}, {{5545087981343666794ull, 358021798857671ull}}, {{746721570333023112ull, 286417439086137ull}}, {{4884103327274747302ull, 458267902537819ull}}, {{7596631476561708165ull, 366614322030255ull}}, {{6077305181249366532ull, 293291457624204ull}}, {{17102385919482807098ull, 469266332198726ull}}, {{9992559920844335355ull, 375413065758981ull}}, {{4304699121933557960ull, 300330452607185ull}}, {{6887518595093692737ull, 480528724171496ull}}, {{1820666061333043866ull, 384422979337197ull}}, {{12524579293292166063ull, 307538383469757ull}}, {{5281931610299824408ull, 492061413551612ull}}, {{15293591732465590496ull, 393649130841289ull}}, {{15924222200714382720ull, 314919304673031ull}}, {{18100057891659191705ull, 503870887476850ull}}, {{14480046313327353364ull, 403096709981480ull}}, {{11584037050661882691ull, 322477367985184ull}}, {{7466412836833281337ull, 515963788776295ull}}, {{5973130269466625069ull, 412771031021036ull}}, {{1089155400831389732ull, 330216824816829ull}}, {{9121346270814044218ull, 528346919706926ull}}, {{3607728201909325051ull, 422677535765541ull}}, {{17643577820495101334ull, 338142028612432ull}}, {{13472329253824520841ull, 541027245779892ull}}, {{3399165773575796026ull, 432821796623914ull}}, {{6408681433602547144ull, 346257437299131ull}}, {{2875192664280254785ull, 554011899678610ull}}, {{2300154131424203828ull, 443209519742888ull}}, {{9218820934623183708ull, 354567615794310ull}}, {{7375056747698546967ull, 283654092635448ull}}, {{8110741981575764824ull, 453846548216717ull}}, {{17556640029486342828ull, 363077238573373ull}}, {{2977265579363343293ull, 290461790858699ull}}, {{12142322556465169916ull, 464738865373918ull}}, {{17092555674655956579ull, 371791092299134ull}}, {{17363393354466675586ull, 297432873839307ull}}, {{13024034108179039645ull, 475892598142892ull}}, {{3040529657059411070ull, 380714078514314ull}}, {{6121772540389439179ull, 304571262811451ull}}, {{2416138435139282040ull, 487314020498322ull}}, {{13000957192337156602ull, 389851216398657ull}}, {{3022068124385904635ull, 311880973118926ull}}, {{15903355443243178386ull, 499009556990281ull}}, {{9033335539852632385ull, 399207645592225ull}}, {{7226668431882105908ull, 319366116473780ull}}, {{11562669491011369453ull, 510985786358048ull}}, {{16628833222292916209ull, 408788629086438ull}}, {{2235020133608601997ull, 327030903269151ull}}, {{14644078657999494166ull, 523249445230641ull}}, {{8025914111657685009ull, 418599556184513ull}}, {{13799428918809968654ull, 334879644947610ull}}, {{3632342196386398230ull, 535807431916177ull}} }; static const int exponents_binary80[] = { -65, -62, -59, -55, -52, -49, -45, -42, -39, -35, -32, -29, -25, -22, -19, -15, -12, -9, -6, -2, 1, 4, 8, 11, 14, 18, 21, 24, 28, 31, 34, 38, 41, 44, 48, 51, 54, 58, 61, 64, 68, 71, 74, 78, 81, 84, 87, 91, 94, 97, 101, 104, 107, 111, 114, 117, 121, 124, 127, 131, 134, 137, 141, 144, 147, 151, 154, 157, 161, 164, 167, 171, 174, 177, 181, 184, 187, 190, 194, 197, 200, 204, 207, 210, 214, 217, 220, 224, 227, 230, 234, 237, 240, 244, 247, 250, 254, 257, 260, 264, 267, 270, 274, 277, 280, 283, 287, 290, 293, 297, 300, 303, 307, 310, 313, 317, 320, 323, 327, 330, 333, 337, 340, 343, 347, 350, 353, 357, 360, 363, 367, 370, 373, 377, 380, 383, 386, 390, 393, 396, 400, 403, 406, 410, 413, 416, 420, 423, 426, 430, 433, 436, 440, 443, 446, 450, 453, 456, 460, 463, 466, 470, 473, 476, 479, 483, 486, 489, 493, 496, 499, 503, 506, 509, 513, 516, 519, 523, 526, 529, 533, 536, 539, 543, 546, 549, 553, 556, 559, 563, 566, 569, 572, 576, 579, 582, 586, 589, 592, 596, 599, 602, 606, 609, 612, 616, 619, 622, 626, 629, 632, 636, 639, 642, 646, 649, 652, 656, 659, 662, 666, 669, 672, 675, 679, 682, 685, 689, 692, 695, 699, 702, 705, 709, 712, 715, 719, 722, 725, 729, 732, 735, 739, 742, 745, 749, 752, 755, 759, 762, 765, 768, 772, 775, 778, 782, 785, 788, 792, 795, 798, 802, 805, 808, 812, 815, 818, 822, 825, 828, 832, 835, 838, 842, 845, 848, 852, 855, 858, 862, 865, 868, 871, 875, 878, 881, 885, 888, 891, 895, 898, 901, 905, 908, 911, 915, 918, 921, 925, 928, 931, 935, 938, 941, 945, 948, 951, 955, 958, 961, 964, 968, 971, 974, 978, 981, 984, 988, 991, 994, 998, 1001, 1004, 1008, 1011, 1014, 1018, 1021, 1024, 1028, 1031, 1034, 1038, 1041, 1044, 1048, 1051, 1054, 1058, 1061, 1064, 1067, 1071, 1074, 1077, 1081, 1084, 1087, 1091, 1094, 1097, 1101, 1104, 1107, 1111, 1114, 1117, 1121, 1124, 1127, 1131, 1134, 1137, 1141, 1144, 1147, 1151, 1154, 1157, 1160, 1164, 1167, 1170, 1174, 1177, 1180, 1184, 1187, 1190, 1194, 1197, 1200, 1204, 1207, 1210, 1214, 1217, 1220, 1224, 1227, 1230, 1234, 1237, 1240, 1244, 1247, 1250, 1253, 1257, 1260, 1263, 1267, 1270, 1273, 1277, 1280, 1283, 1287, 1290, 1293, 1297, 1300, 1303, 1307, 1310, 1313, 1317, 1320, 1323, 1327, 1330, 1333, 1337, 1340, 1343, 1347, 1350, 1353, 1356, 1360, 1363, 1366, 1370, 1373, 1376, 1380, 1383, 1386, 1390, 1393, 1396, 1400, 1403, 1406, 1410, 1413, 1416, 1420, 1423, 1426, 1430, 1433, 1436, 1440, 1443, 1446, 1449, 1453, 1456, 1459, 1463, 1466, 1469, 1473, 1476, 1479, 1483, 1486, 1489, 1493, 1496, 1499, 1503, 1506, 1509, 1513, 1516, 1519, 1523, 1526, 1529, 1533, 1536, 1539, 1543, 1546, 1549, 1552, 1556, 1559, 1562, 1566, 1569, 1572, 1576, 1579, 1582, 1586, 1589, 1592, 1596, 1599, 1602, 1606, 1609, 1612, 1616, 1619, 1622, 1626, 1629, 1632, 1636, 1639, 1642, 1645, 1649, 1652, 1655, 1659, 1662, 1665, 1669, 1672, 1675, 1679, 1682, 1685, 1689, 1692, 1695, 1699, 1702, 1705, 1709, 1712, 1715, 1719, 1722, 1725, 1729, 1732, 1735, 1738, 1742, 1745, 1748, 1752, 1755, 1758, 1762, 1765, 1768, 1772, 1775, 1778, 1782, 1785, 1788, 1792, 1795, 1798, 1802, 1805, 1808, 1812, 1815, 1818, 1822, 1825, 1828, 1832, 1835, 1838, 1841, 1845, 1848, 1851, 1855, 1858, 1861, 1865, 1868, 1871, 1875, 1878, 1881, 1885, 1888, 1891, 1895, 1898, 1901, 1905, 1908, 1911, 1915, 1918, 1921, 1925, 1928, 1931, 1934, 1938, 1941, 1944, 1948, 1951, 1954, 1958, 1961, 1964, 1968, 1971, 1974, 1978, 1981, 1984, 1988, 1991, 1994, 1998, 2001, 2004, 2008, 2011, 2014, 2018, 2021, 2024, 2028, 2031, 2034, 2037, 2041, 2044, 2047, 2051, 2054, 2057, 2061, 2064, 2067, 2071, 2074, 2077, 2081, 2084, 2087, 2091, 2094, 2097, 2101, 2104, 2107, 2111, 2114, 2117, 2121, 2124, 2127, 2130, 2134, 2137, 2140, 2144, 2147, 2150, 2154, 2157, 2160, 2164, 2167, 2170, 2174, 2177, 2180, 2184, 2187, 2190, 2194, 2197, 2200, 2204, 2207, 2210, 2214, 2217, 2220, 2223, 2227, 2230, 2233, 2237, 2240, 2243, 2247, 2250, 2253, 2257, 2260, 2263, 2267, 2270, 2273, 2277, 2280, 2283, 2287, 2290, 2293, 2297, 2300, 2303, 2307, 2310, 2313, 2317, 2320, 2323, 2326, 2330, 2333, 2336, 2340, 2343, 2346, 2350, 2353, 2356, 2360, 2363, 2366, 2370, 2373, 2376, 2380, 2383, 2386, 2390, 2393, 2396, 2400, 2403, 2406, 2410, 2413, 2416, 2419, 2423, 2426, 2429, 2433, 2436, 2439, 2443, 2446, 2449, 2453, 2456, 2459, 2463, 2466, 2469, 2473, 2476, 2479, 2483, 2486, 2489, 2493, 2496, 2499, 2503, 2506, 2509, 2513, 2516, 2519, 2522, 2526, 2529, 2532, 2536, 2539, 2542, 2546, 2549, 2552, 2556, 2559, 2562, 2566, 2569, 2572, 2576, 2579, 2582, 2586, 2589, 2592, 2596, 2599, 2602, 2606, 2609, 2612, 2615, 2619, 2622, 2625, 2629, 2632, 2635, 2639, 2642, 2645, 2649, 2652, 2655, 2659, 2662, 2665, 2669, 2672, 2675, 2679, 2682, 2685, 2689, 2692, 2695, 2699, 2702, 2705, 2708, 2712, 2715, 2718, 2722, 2725, 2728, 2732, 2735, 2738, 2742, 2745, 2748, 2752, 2755, 2758, 2762, 2765, 2768, 2772, 2775, 2778, 2782, 2785, 2788, 2792, 2795, 2798, 2802, 2805, 2808, 2811, 2815, 2818, 2821, 2825, 2828, 2831, 2835, 2838, 2841, 2845, 2848, 2851, 2855, 2858, 2861, 2865, 2868, 2871, 2875, 2878, 2881, 2885, 2888, 2891, 2895, 2898, 2901, 2904, 2908, 2911, 2914, 2918, 2921, 2924, 2928, 2931, 2934, 2938, 2941, 2944, 2948, 2951, 2954, 2958, 2961, 2964, 2968, 2971, 2974, 2978, 2981, 2984, 2988, 2991, 2994, 2998, 3001, 3004, 3007, 3011, 3014, 3017, 3021, 3024, 3027, 3031, 3034, 3037, 3041, 3044, 3047, 3051, 3054, 3057, 3061, 3064, 3067, 3071, 3074, 3077, 3081, 3084, 3087, 3091, 3094, 3097, 3100, 3104, 3107, 3110, 3114, 3117, 3120, 3124, 3127, 3130, 3134, 3137, 3140, 3144, 3147, 3150, 3154, 3157, 3160, 3164, 3167, 3170, 3174, 3177, 3180, 3184, 3187, 3190, 3193, 3197, 3200, 3203, 3207, 3210, 3213, 3217, 3220, 3223, 3227, 3230, 3233, 3237, 3240, 3243, 3247, 3250, 3253, 3257, 3260, 3263, 3267, 3270, 3273, 3277, 3280, 3283, 3287, 3290, 3293, 3296, 3300, 3303, 3306, 3310, 3313, 3316, 3320, 3323, 3326, 3330, 3333, 3336, 3340, 3343, 3346, 3350, 3353, 3356, 3360, 3363, 3366, 3370, 3373, 3376, 3380, 3383, 3386, 3389, 3393, 3396, 3399, 3403, 3406, 3409, 3413, 3416, 3419, 3423, 3426, 3429, 3433, 3436, 3439, 3443, 3446, 3449, 3453, 3456, 3459, 3463, 3466, 3469, 3473, 3476, 3479, 3483, 3486, 3489, 3492, 3496, 3499, 3502, 3506, 3509, 3512, 3516, 3519, 3522, 3526, 3529, 3532, 3536, 3539, 3542, 3546, 3549, 3552, 3556, 3559, 3562, 3566, 3569, 3572, 3576, 3579, 3582, 3585, 3589, 3592, 3595, 3599, 3602, 3605, 3609, 3612, 3615, 3619, 3622, 3625, 3629, 3632, 3635, 3639, 3642, 3645, 3649, 3652, 3655, 3659, 3662, 3665, 3669, 3672, 3675, 3679, 3682, 3685, 3688, 3692, 3695, 3698, 3702, 3705, 3708, 3712, 3715, 3718, 3722, 3725, 3728, 3732, 3735, 3738, 3742, 3745, 3748, 3752, 3755, 3758, 3762, 3765, 3768, 3772, 3775, 3778, 3781, 3785, 3788, 3791, 3795, 3798, 3801, 3805, 3808, 3811, 3815, 3818, 3821, 3825, 3828, 3831, 3835, 3838, 3841, 3845, 3848, 3851, 3855, 3858, 3861, 3865, 3868, 3871, 3874, 3878, 3881, 3884, 3888, 3891, 3894, 3898, 3901, 3904, 3908, 3911, 3914, 3918, 3921, 3924, 3928, 3931, 3934, 3938, 3941, 3944, 3948, 3951, 3954, 3958, 3961, 3964, 3968, 3971, 3974, 3977, 3981, 3984, 3987, 3991, 3994, 3997, 4001, 4004, 4007, 4011, 4014, 4017, 4021, 4024, 4027, 4031, 4034, 4037, 4041, 4044, 4047, 4051, 4054, 4057, 4061, 4064, 4067, 4070, 4074, 4077, 4080, 4084, 4087, 4090, 4094, 4097, 4100, 4104, 4107, 4110, 4114, 4117, 4120, 4124, 4127, 4130, 4134, 4137, 4140, 4144, 4147, 4150, 4154, 4157, 4160, 4164, 4167, 4170, 4173, 4177, 4180, 4183, 4187, 4190, 4193, 4197, 4200, 4203, 4207, 4210, 4213, 4217, 4220, 4223, 4227, 4230, 4233, 4237, 4240, 4243, 4247, 4250, 4253, 4257, 4260, 4263, 4266, 4270, 4273, 4276, 4280, 4283, 4286, 4290, 4293, 4296, 4300, 4303, 4306, 4310, 4313, 4316, 4320, 4323, 4326, 4330, 4333, 4336, 4340, 4343, 4346, 4350, 4353, 4356, 4359, 4363, 4366, 4369, 4373, 4376, 4379, 4383, 4386, 4389, 4393, 4396, 4399, 4403, 4406, 4409, 4413, 4416, 4419, 4423, 4426, 4429, 4433, 4436, 4439, 4443, 4446, 4449, 4453, 4456, 4459, 4462, 4466, 4469, 4472, 4476, 4479, 4482, 4486, 4489, 4492, 4496, 4499, 4502, 4506, 4509, 4512, 4516, 4519, 4522, 4526, 4529, 4532, 4536, 4539, 4542, 4546, 4549, 4552, 4555, 4559, 4562, 4565, 4569, 4572, 4575, 4579, 4582, 4585, 4589, 4592, 4595, 4599, 4602, 4605, 4609, 4612, 4615, 4619, 4622, 4625, 4629, 4632, 4635, 4639, 4642, 4645, 4649, 4652, 4655, 4658, 4662, 4665, 4668, 4672, 4675, 4678, 4682, 4685, 4688, 4692, 4695, 4698, 4702, 4705, 4708, 4712, 4715, 4718, 4722, 4725, 4728, 4732, 4735, 4738, 4742, 4745, 4748, 4751, 4755, 4758, 4761, 4765, 4768, 4771, 4775, 4778, 4781, 4785, 4788, 4791, 4795, 4798, 4801, 4805, 4808, 4811, 4815, 4818, 4821, 4825, 4828, 4831, 4835, 4838, 4841, 4844, 4848, 4851, 4854, 4858, 4861, 4864, 4868, 4871, 4874, 4878, 4881, 4884, 4888, 4891, 4894, 4898, 4901, 4904, 4908, 4911, 4914, 4918, 4921, 4924, 4928, 4931, 4934, 4938, 4941, 4944, 4947, 4951, 4954, 4957, 4961, 4964, 4967, 4971, 4974, 4977, 4981, 4984, 4987, 4991, 4994, 4997, 5001, 5004, 5007, 5011, 5014, 5017, 5021, 5024, 5027, 5031, 5034, 5037, 5040, 5044, 5047, 5050, 5054, 5057, 5060, 5064, 5067, 5070, 5074, 5077, 5080, 5084, 5087, 5090, 5094, 5097, 5100, 5104, 5107, 5110, 5114, 5117, 5120, 5124, 5127, 5130, 5134, 5137, 5140, 5143, 5147, 5150, 5153, 5157, 5160, 5163, 5167, 5170, 5173, 5177, 5180, 5183, 5187, 5190, 5193, 5197, 5200, 5203, 5207, 5210, 5213, 5217, 5220, 5223, 5227, 5230, 5233, 5236, 5240, 5243, 5246, 5250, 5253, 5256, 5260, 5263, 5266, 5270, 5273, 5276, 5280, 5283, 5286, 5290, 5293, 5296, 5300, 5303, 5306, 5310, 5313, 5316, 5320, 5323, 5326, 5329, 5333, 5336, 5339, 5343, 5346, 5349, 5353, 5356, 5359, 5363, 5366, 5369, 5373, 5376, 5379, 5383, 5386, 5389, 5393, 5396, 5399, 5403, 5406, 5409, 5413, 5416, 5419, 5423, 5426, 5429, 5432, 5436, 5439, 5442, 5446, 5449, 5452, 5456, 5459, 5462, 5466, 5469, 5472, 5476, 5479, 5482, 5486, 5489, 5492, 5496, 5499, 5502, 5506, 5509, 5512, 5516, 5519, 5522, 5525, 5529, 5532, 5535, 5539, 5542, 5545, 5549, 5552, 5555, 5559, 5562, 5565, 5569, 5572, 5575, 5579, 5582, 5585, 5589, 5592, 5595, 5599, 5602, 5605, 5609, 5612, 5615, 5619, 5622, 5625, 5628, 5632, 5635, 5638, 5642, 5645, 5648, 5652, 5655, 5658, 5662, 5665, 5668, 5672, 5675, 5678, 5682, 5685, 5688, 5692, 5695, 5698, 5702, 5705, 5708, 5712, 5715, 5718, 5721, 5725, 5728, 5731, 5735, 5738, 5741, 5745, 5748, 5751, 5755, 5758, 5761, 5765, 5768, 5771, 5775, 5778, 5781, 5785, 5788, 5791, 5795, 5798, 5801, 5805, 5808, 5811, 5815, 5818, 5821, 5824, 5828, 5831, 5834, 5838, 5841, 5844, 5848, 5851, 5854, 5858, 5861, 5864, 5868, 5871, 5874, 5878, 5881, 5884, 5888, 5891, 5894, 5898, 5901, 5904, 5908, 5911, 5914, 5917, 5921, 5924, 5927, 5931, 5934, 5937, 5941, 5944, 5947, 5951, 5954, 5957, 5961, 5964, 5967, 5971, 5974, 5977, 5981, 5984, 5987, 5991, 5994, 5997, 6001, 6004, 6007, 6010, 6014, 6017, 6020, 6024, 6027, 6030, 6034, 6037, 6040, 6044, 6047, 6050, 6054, 6057, 6060, 6064, 6067, 6070, 6074, 6077, 6080, 6084, 6087, 6090, 6094, 6097, 6100, 6104, 6107, 6110, 6113, 6117, 6120, 6123, 6127, 6130, 6133, 6137, 6140, 6143, 6147, 6150, 6153, 6157, 6160, 6163, 6167, 6170, 6173, 6177, 6180, 6183, 6187, 6190, 6193, 6197, 6200, 6203, 6206, 6210, 6213, 6216, 6220, 6223, 6226, 6230, 6233, 6236, 6240, 6243, 6246, 6250, 6253, 6256, 6260, 6263, 6266, 6270, 6273, 6276, 6280, 6283, 6286, 6290, 6293, 6296, 6300, 6303, 6306, 6309, 6313, 6316, 6319, 6323, 6326, 6329, 6333, 6336, 6339, 6343, 6346, 6349, 6353, 6356, 6359, 6363, 6366, 6369, 6373, 6376, 6379, 6383, 6386, 6389, 6393, 6396, 6399, 6402, 6406, 6409, 6412, 6416, 6419, 6422, 6426, 6429, 6432, 6436, 6439, 6442, 6446, 6449, 6452, 6456, 6459, 6462, 6466, 6469, 6472, 6476, 6479, 6482, 6486, 6489, 6492, 6495, 6499, 6502, 6505, 6509, 6512, 6515, 6519, 6522, 6525, 6529, 6532, 6535, 6539, 6542, 6545, 6549, 6552, 6555, 6559, 6562, 6565, 6569, 6572, 6575, 6579, 6582, 6585, 6589, 6592, 6595, 6598, 6602, 6605, 6608, 6612, 6615, 6618, 6622, 6625, 6628, 6632, 6635, 6638, 6642, 6645, 6648, 6652, 6655, 6658, 6662, 6665, 6668, 6672, 6675, 6678, 6682, 6685, 6688, 6691, 6695, 6698, 6701, 6705, 6708, 6711, 6715, 6718, 6721, 6725, 6728, 6731, 6735, 6738, 6741, 6745, 6748, 6751, 6755, 6758, 6761, 6765, 6768, 6771, 6775, 6778, 6781, 6785, 6788, 6791, 6794, 6798, 6801, 6804, 6808, 6811, 6814, 6818, 6821, 6824, 6828, 6831, 6834, 6838, 6841, 6844, 6848, 6851, 6854, 6858, 6861, 6864, 6868, 6871, 6874, 6878, 6881, 6884, 6887, 6891, 6894, 6897, 6901, 6904, 6907, 6911, 6914, 6917, 6921, 6924, 6927, 6931, 6934, 6937, 6941, 6944, 6947, 6951, 6954, 6957, 6961, 6964, 6967, 6971, 6974, 6977, 6980, 6984, 6987, 6990, 6994, 6997, 7000, 7004, 7007, 7010, 7014, 7017, 7020, 7024, 7027, 7030, 7034, 7037, 7040, 7044, 7047, 7050, 7054, 7057, 7060, 7064, 7067, 7070, 7074, 7077, 7080, 7083, 7087, 7090, 7093, 7097, 7100, 7103, 7107, 7110, 7113, 7117, 7120, 7123, 7127, 7130, 7133, 7137, 7140, 7143, 7147, 7150, 7153, 7157, 7160, 7163, 7167, 7170, 7173, 7176, 7180, 7183, 7186, 7190, 7193, 7196, 7200, 7203, 7206, 7210, 7213, 7216, 7220, 7223, 7226, 7230, 7233, 7236, 7240, 7243, 7246, 7250, 7253, 7256, 7260, 7263, 7266, 7270, 7273, 7276, 7279, 7283, 7286, 7289, 7293, 7296, 7299, 7303, 7306, 7309, 7313, 7316, 7319, 7323, 7326, 7329, 7333, 7336, 7339, 7343, 7346, 7349, 7353, 7356, 7359, 7363, 7366, 7369, 7372, 7376, 7379, 7382, 7386, 7389, 7392, 7396, 7399, 7402, 7406, 7409, 7412, 7416, 7419, 7422, 7426, 7429, 7432, 7436, 7439, 7442, 7446, 7449, 7452, 7456, 7459, 7462, 7465, 7469, 7472, 7475, 7479, 7482, 7485, 7489, 7492, 7495, 7499, 7502, 7505, 7509, 7512, 7515, 7519, 7522, 7525, 7529, 7532, 7535, 7539, 7542, 7545, 7549, 7552, 7555, 7559, 7562, 7565, 7568, 7572, 7575, 7578, 7582, 7585, 7588, 7592, 7595, 7598, 7602, 7605, 7608, 7612, 7615, 7618, 7622, 7625, 7628, 7632, 7635, 7638, 7642, 7645, 7648, 7652, 7655, 7658, 7661, 7665, 7668, 7671, 7675, 7678, 7681, 7685, 7688, 7691, 7695, 7698, 7701, 7705, 7708, 7711, 7715, 7718, 7721, 7725, 7728, 7731, 7735, 7738, 7741, 7745, 7748, 7751, 7755, 7758, 7761, 7764, 7768, 7771, 7774, 7778, 7781, 7784, 7788, 7791, 7794, 7798, 7801, 7804, 7808, 7811, 7814, 7818, 7821, 7824, 7828, 7831, 7834, 7838, 7841, 7844, 7848, 7851, 7854, 7857, 7861, 7864, 7867, 7871, 7874, 7877, 7881, 7884, 7887, 7891, 7894, 7897, 7901, 7904, 7907, 7911, 7914, 7917, 7921, 7924, 7927, 7931, 7934, 7937, 7941, 7944, 7947, 7951, 7954, 7957, 7960, 7964, 7967, 7970, 7974, 7977, 7980, 7984, 7987, 7990, 7994, 7997, 8000, 8004, 8007, 8010, 8014, 8017, 8020, 8024, 8027, 8030, 8034, 8037, 8040, 8044, 8047, 8050, 8053, 8057, 8060, 8063, 8067, 8070, 8073, 8077, 8080, 8083, 8087, 8090, 8093, 8097, 8100, 8103, 8107, 8110, 8113, 8117, 8120, 8123, 8127, 8130, 8133, 8137, 8140, 8143, 8146, 8150, 8153, 8156, 8160, 8163, 8166, 8170, 8173, 8176, 8180, 8183, 8186, 8190, 8193, 8196, 8200, 8203, 8206, 8210, 8213, 8216, 8220, 8223, 8226, 8230, 8233, 8236, 8240, 8243, 8246, 8249, 8253, 8256, 8259, 8263, 8266, 8269, 8273, 8276, 8279, 8283, 8286, 8289, 8293, 8296, 8299, 8303, 8306, 8309, 8313, 8316, 8319, 8323, 8326, 8329, 8333, 8336, 8339, 8342, 8346, 8349, 8352, 8356, 8359, 8362, 8366, 8369, 8372, 8376, 8379, 8382, 8386, 8389, 8392, 8396, 8399, 8402, 8406, 8409, 8412, 8416, 8419, 8422, 8426, 8429, 8432, 8436, 8439, 8442, 8445, 8449, 8452, 8455, 8459, 8462, 8465, 8469, 8472, 8475, 8479, 8482, 8485, 8489, 8492, 8495, 8499, 8502, 8505, 8509, 8512, 8515, 8519, 8522, 8525, 8529, 8532, 8535, 8538, 8542, 8545, 8548, 8552, 8555, 8558, 8562, 8565, 8568, 8572, 8575, 8578, 8582, 8585, 8588, 8592, 8595, 8598, 8602, 8605, 8608, 8612, 8615, 8618, 8622, 8625, 8628, 8631, 8635, 8638, 8641, 8645, 8648, 8651, 8655, 8658, 8661, 8665, 8668, 8671, 8675, 8678, 8681, 8685, 8688, 8691, 8695, 8698, 8701, 8705, 8708, 8711, 8715, 8718, 8721, 8725, 8728, 8731, 8734, 8738, 8741, 8744, 8748, 8751, 8754, 8758, 8761, 8764, 8768, 8771, 8774, 8778, 8781, 8784, 8788, 8791, 8794, 8798, 8801, 8804, 8808, 8811, 8814, 8818, 8821, 8824, 8827, 8831, 8834, 8837, 8841, 8844, 8847, 8851, 8854, 8857, 8861, 8864, 8867, 8871, 8874, 8877, 8881, 8884, 8887, 8891, 8894, 8897, 8901, 8904, 8907, 8911, 8914, 8917, 8921, 8924, 8927, 8930, 8934, 8937, 8940, 8944, 8947, 8950, 8954, 8957, 8960, 8964, 8967, 8970, 8974, 8977, 8980, 8984, 8987, 8990, 8994, 8997, 9000, 9004, 9007, 9010, 9014, 9017, 9020, 9023, 9027, 9030, 9033, 9037, 9040, 9043, 9047, 9050, 9053, 9057, 9060, 9063, 9067, 9070, 9073, 9077, 9080, 9083, 9087, 9090, 9093, 9097, 9100, 9103, 9107, 9110, 9113, 9116, 9120, 9123, 9126, 9130, 9133, 9136, 9140, 9143, 9146, 9150, 9153, 9156, 9160, 9163, 9166, 9170, 9173, 9176, 9180, 9183, 9186, 9190, 9193, 9196, 9200, 9203, 9206, 9210, 9213, 9216, 9219, 9223, 9226, 9229, 9233, 9236, 9239, 9243, 9246, 9249, 9253, 9256, 9259, 9263, 9266, 9269, 9273, 9276, 9279, 9283, 9286, 9289, 9293, 9296, 9299, 9303, 9306, 9309, 9312, 9316, 9319, 9322, 9326, 9329, 9332, 9336, 9339, 9342, 9346, 9349, 9352, 9356, 9359, 9362, 9366, 9369, 9372, 9376, 9379, 9382, 9386, 9389, 9392, 9396, 9399, 9402, 9406, 9409, 9412, 9415, 9419, 9422, 9425, 9429, 9432, 9435, 9439, 9442, 9445, 9449, 9452, 9455, 9459, 9462, 9465, 9469, 9472, 9475, 9479, 9482, 9485, 9489, 9492, 9495, 9499, 9502, 9505, 9508, 9512, 9515, 9518, 9522, 9525, 9528, 9532, 9535, 9538, 9542, 9545, 9548, 9552, 9555, 9558, 9562, 9565, 9568, 9572, 9575, 9578, 9582, 9585, 9588, 9592, 9595, 9598, 9601, 9605, 9608, 9611, 9615, 9618, 9621, 9625, 9628, 9631, 9635, 9638, 9641, 9645, 9648, 9651, 9655, 9658, 9661, 9665, 9668, 9671, 9675, 9678, 9681, 9685, 9688, 9691, 9695, 9698, 9701, 9704, 9708, 9711, 9714, 9718, 9721, 9724, 9728, 9731, 9734, 9738, 9741, 9744, 9748, 9751, 9754, 9758, 9761, 9764, 9768, 9771, 9774, 9778, 9781, 9784, 9788, 9791, 9794, 9797, 9801, 9804, 9807, 9811, 9814, 9817, 9821, 9824, 9827, 9831, 9834, 9837, 9841, 9844, 9847, 9851, 9854, 9857, 9861, 9864, 9867, 9871, 9874, 9877, 9881, 9884, 9887, 9891, 9894, 9897, 9900, 9904, 9907, 9910, 9914, 9917, 9920, 9924, 9927, 9930, 9934, 9937, 9940, 9944, 9947, 9950, 9954, 9957, 9960, 9964, 9967, 9970, 9974, 9977, 9980, 9984, 9987, 9990, 9993, 9997, 10000, 10003, 10007, 10010, 10013, 10017, 10020, 10023, 10027, 10030, 10033, 10037, 10040, 10043, 10047, 10050, 10053, 10057, 10060, 10063, 10067, 10070, 10073, 10077, 10080, 10083, 10087, 10090, 10093, 10096, 10100, 10103, 10106, 10110, 10113, 10116, 10120, 10123, 10126, 10130, 10133, 10136, 10140, 10143, 10146, 10150, 10153, 10156, 10160, 10163, 10166, 10170, 10173, 10176, 10180, 10183, 10186, 10189, 10193, 10196, 10199, 10203, 10206, 10209, 10213, 10216, 10219, 10223, 10226, 10229, 10233, 10236, 10239, 10243, 10246, 10249, 10253, 10256, 10259, 10263, 10266, 10269, 10273, 10276, 10279, 10282, 10286, 10289, 10292, 10296, 10299, 10302, 10306, 10309, 10312, 10316, 10319, 10322, 10326, 10329, 10332, 10336, 10339, 10342, 10346, 10349, 10352, 10356, 10359, 10362, 10366, 10369, 10372, 10376, 10379, 10382, 10385, 10389, 10392, 10395, 10399, 10402, 10405, 10409, 10412, 10415, 10419, 10422, 10425, 10429, 10432, 10435, 10439, 10442, 10445, 10449, 10452, 10455, 10459, 10462, 10465, 10469, 10472, 10475, 10478, 10482, 10485, 10488, 10492, 10495, 10498, 10502, 10505, 10508, 10512, 10515, 10518, 10522, 10525, 10528, 10532, 10535, 10538, 10542, 10545, 10548, 10552, 10555, 10558, 10562, 10565, 10568, 10572, 10575, 10578, 10581, 10585, 10588, 10591, 10595, 10598, 10601, 10605, 10608, 10611, 10615, 10618, 10621, 10625, 10628, 10631, 10635, 10638, 10641, 10645, 10648, 10651, 10655, 10658, 10661, 10665, 10668, 10671, 10674, 10678, 10681, 10684, 10688, 10691, 10694, 10698, 10701, 10704, 10708, 10711, 10714, 10718, 10721, 10724, 10728, 10731, 10734, 10738, 10741, 10744, 10748, 10751, 10754, 10758, 10761, 10764, 10767, 10771, 10774, 10777, 10781, 10784, 10787, 10791, 10794, 10797, 10801, 10804, 10807, 10811, 10814, 10817, 10821, 10824, 10827, 10831, 10834, 10837, 10841, 10844, 10847, 10851, 10854, 10857, 10861, 10864, 10867, 10870, 10874, 10877, 10880, 10884, 10887, 10890, 10894, 10897, 10900, 10904, 10907, 10910, 10914, 10917, 10920, 10924, 10927, 10930, 10934, 10937, 10940, 10944, 10947, 10950, 10954, 10957, 10960, 10963, 10967, 10970, 10973, 10977, 10980, 10983, 10987, 10990, 10993, 10997, 11000, 11003, 11007, 11010, 11013, 11017, 11020, 11023, 11027, 11030, 11033, 11037, 11040, 11043, 11047, 11050, 11053, 11057, 11060, 11063, 11066, 11070, 11073, 11076, 11080, 11083, 11086, 11090, 11093, 11096, 11100, 11103, 11106, 11110, 11113, 11116, 11120, 11123, 11126, 11130, 11133, 11136, 11140, 11143, 11146, 11150, 11153, 11156, 11159, 11163, 11166, 11169, 11173, 11176, 11179, 11183, 11186, 11189, 11193, 11196, 11199, 11203, 11206, 11209, 11213, 11216, 11219, 11223, 11226, 11229, 11233, 11236, 11239, 11243, 11246, 11249, 11252, 11256, 11259, 11262, 11266, 11269, 11272, 11276, 11279, 11282, 11286, 11289, 11292, 11296, 11299, 11302, 11306, 11309, 11312, 11316, 11319, 11322, 11326, 11329, 11332, 11336, 11339, 11342, 11346, 11349, 11352, 11355, 11359, 11362, 11365, 11369, 11372, 11375, 11379, 11382, 11385, 11389, 11392, 11395, 11399, 11402, 11405, 11409, 11412, 11415, 11419, 11422, 11425, 11429, 11432, 11435, 11439, 11442, 11445, 11448, 11452, 11455, 11458, 11462, 11465, 11468, 11472, 11475, 11478, 11482, 11485, 11488, 11492, 11495, 11498, 11502, 11505, 11508, 11512, 11515, 11518, 11522, 11525, 11528, 11532, 11535, 11538, 11542, 11545, 11548, 11551, 11555, 11558, 11561, 11565, 11568, 11571, 11575, 11578, 11581, 11585, 11588, 11591, 11595, 11598, 11601, 11605, 11608, 11611, 11615, 11618, 11621, 11625, 11628, 11631, 11635, 11638, 11641, 11644, 11648, 11651, 11654, 11658, 11661, 11664, 11668, 11671, 11674, 11678, 11681, 11684, 11688, 11691, 11694, 11698, 11701, 11704, 11708, 11711, 11714, 11718, 11721, 11724, 11728, 11731, 11734, 11737, 11741, 11744, 11747, 11751, 11754, 11757, 11761, 11764, 11767, 11771, 11774, 11777, 11781, 11784, 11787, 11791, 11794, 11797, 11801, 11804, 11807, 11811, 11814, 11817, 11821, 11824, 11827, 11831, 11834, 11837, 11840, 11844, 11847, 11850, 11854, 11857, 11860, 11864, 11867, 11870, 11874, 11877, 11880, 11884, 11887, 11890, 11894, 11897, 11900, 11904, 11907, 11910, 11914, 11917, 11920, 11924, 11927, 11930, 11933, 11937, 11940, 11943, 11947, 11950, 11953, 11957, 11960, 11963, 11967, 11970, 11973, 11977, 11980, 11983, 11987, 11990, 11993, 11997, 12000, 12003, 12007, 12010, 12013, 12017, 12020, 12023, 12027, 12030, 12033, 12036, 12040, 12043, 12046, 12050, 12053, 12056, 12060, 12063, 12066, 12070, 12073, 12076, 12080, 12083, 12086, 12090, 12093, 12096, 12100, 12103, 12106, 12110, 12113, 12116, 12120, 12123, 12126, 12129, 12133, 12136, 12139, 12143, 12146, 12149, 12153, 12156, 12159, 12163, 12166, 12169, 12173, 12176, 12179, 12183, 12186, 12189, 12193, 12196, 12199, 12203, 12206, 12209, 12213, 12216, 12219, 12223, 12226, 12229, 12232, 12236, 12239, 12242, 12246, 12249, 12252, 12256, 12259, 12262, 12266, 12269, 12272, 12276, 12279, 12282, 12286, 12289, 12292, 12296, 12299, 12302, 12306, 12309, 12312, 12316, 12319, 12322, 12325, 12329, 12332, 12335, 12339, 12342, 12345, 12349, 12352, 12355, 12359, 12362, 12365, 12369, 12372, 12375, 12379, 12382, 12385, 12389, 12392, 12395, 12399, 12402, 12405, 12409, 12412, 12415, 12418, 12422, 12425, 12428, 12432, 12435, 12438, 12442, 12445, 12448, 12452, 12455, 12458, 12462, 12465, 12468, 12472, 12475, 12478, 12482, 12485, 12488, 12492, 12495, 12498, 12502, 12505, 12508, 12512, 12515, 12518, 12521, 12525, 12528, 12531, 12535, 12538, 12541, 12545, 12548, 12551, 12555, 12558, 12561, 12565, 12568, 12571, 12575, 12578, 12581, 12585, 12588, 12591, 12595, 12598, 12601, 12605, 12608, 12611, 12614, 12618, 12621, 12624, 12628, 12631, 12634, 12638, 12641, 12644, 12648, 12651, 12654, 12658, 12661, 12664, 12668, 12671, 12674, 12678, 12681, 12684, 12688, 12691, 12694, 12698, 12701, 12704, 12708, 12711, 12714, 12717, 12721, 12724, 12727, 12731, 12734, 12737, 12741, 12744, 12747, 12751, 12754, 12757, 12761, 12764, 12767, 12771, 12774, 12777, 12781, 12784, 12787, 12791, 12794, 12797, 12801, 12804, 12807, 12810, 12814, 12817, 12820, 12824, 12827, 12830, 12834, 12837, 12840, 12844, 12847, 12850, 12854, 12857, 12860, 12864, 12867, 12870, 12874, 12877, 12880, 12884, 12887, 12890, 12894, 12897, 12900, 12903, 12907, 12910, 12913, 12917, 12920, 12923, 12927, 12930, 12933, 12937, 12940, 12943, 12947, 12950, 12953, 12957, 12960, 12963, 12967, 12970, 12973, 12977, 12980, 12983, 12987, 12990, 12993, 12997, 13000, 13003, 13006, 13010, 13013, 13016, 13020, 13023, 13026, 13030, 13033, 13036, 13040, 13043, 13046, 13050, 13053, 13056, 13060, 13063, 13066, 13070, 13073, 13076, 13080, 13083, 13086, 13090, 13093, 13096, 13099, 13103, 13106, 13109, 13113, 13116, 13119, 13123, 13126, 13129, 13133, 13136, 13139, 13143, 13146, 13149, 13153, 13156, 13159, 13163, 13166, 13169, 13173, 13176, 13179, 13183, 13186, 13189, 13193, 13196, 13199, 13202, 13206, 13209, 13212, 13216, 13219, 13222, 13226, 13229, 13232, 13236, 13239, 13242, 13246, 13249, 13252, 13256, 13259, 13262, 13266, 13269, 13272, 13276, 13279, 13282, 13286, 13289, 13292, 13295, 13299, 13302, 13305, 13309, 13312, 13315, 13319, 13322, 13325, 13329, 13332, 13335, 13339, 13342, 13345, 13349, 13352, 13355, 13359, 13362, 13365, 13369, 13372, 13375, 13379, 13382, 13385, 13388, 13392, 13395, 13398, 13402, 13405, 13408, 13412, 13415, 13418, 13422, 13425, 13428, 13432, 13435, 13438, 13442, 13445, 13448, 13452, 13455, 13458, 13462, 13465, 13468, 13472, 13475, 13478, 13482, 13485, 13488, 13491, 13495, 13498, 13501, 13505, 13508, 13511, 13515, 13518, 13521, 13525, 13528, 13531, 13535, 13538, 13541, 13545, 13548, 13551, 13555, 13558, 13561, 13565, 13568, 13571, 13575, 13578, 13581, 13584, 13588, 13591, 13594, 13598, 13601, 13604, 13608, 13611, 13614, 13618, 13621, 13624, 13628, 13631, 13634, 13638, 13641, 13644, 13648, 13651, 13654, 13658, 13661, 13664, 13668, 13671, 13674, 13678, 13681, 13684, 13687, 13691, 13694, 13697, 13701, 13704, 13707, 13711, 13714, 13717, 13721, 13724, 13727, 13731, 13734, 13737, 13741, 13744, 13747, 13751, 13754, 13757, 13761, 13764, 13767, 13771, 13774, 13777, 13780, 13784, 13787, 13790, 13794, 13797, 13800, 13804, 13807, 13810, 13814, 13817, 13820, 13824, 13827, 13830, 13834, 13837, 13840, 13844, 13847, 13850, 13854, 13857, 13860, 13864, 13867, 13870, 13873, 13877, 13880, 13883, 13887, 13890, 13893, 13897, 13900, 13903, 13907, 13910, 13913, 13917, 13920, 13923, 13927, 13930, 13933, 13937, 13940, 13943, 13947, 13950, 13953, 13957, 13960, 13963, 13967, 13970, 13973, 13976, 13980, 13983, 13986, 13990, 13993, 13996, 14000, 14003, 14006, 14010, 14013, 14016, 14020, 14023, 14026, 14030, 14033, 14036, 14040, 14043, 14046, 14050, 14053, 14056, 14060, 14063, 14066, 14069, 14073, 14076, 14079, 14083, 14086, 14089, 14093, 14096, 14099, 14103, 14106, 14109, 14113, 14116, 14119, 14123, 14126, 14129, 14133, 14136, 14139, 14143, 14146, 14149, 14153, 14156, 14159, 14163, 14166, 14169, 14172, 14176, 14179, 14182, 14186, 14189, 14192, 14196, 14199, 14202, 14206, 14209, 14212, 14216, 14219, 14222, 14226, 14229, 14232, 14236, 14239, 14242, 14246, 14249, 14252, 14256, 14259, 14262, 14265, 14269, 14272, 14275, 14279, 14282, 14285, 14289, 14292, 14295, 14299, 14302, 14305, 14309, 14312, 14315, 14319, 14322, 14325, 14329, 14332, 14335, 14339, 14342, 14345, 14349, 14352, 14355, 14359, 14362, 14365, 14368, 14372, 14375, 14378, 14382, 14385, 14388, 14392, 14395, 14398, 14402, 14405, 14408, 14412, 14415, 14418, 14422, 14425, 14428, 14432, 14435, 14438, 14442, 14445, 14448, 14452, 14455, 14458, 14461, 14465, 14468, 14471, 14475, 14478, 14481, 14485, 14488, 14491, 14495, 14498, 14501, 14505, 14508, 14511, 14515, 14518, 14521, 14525, 14528, 14531, 14535, 14538, 14541, 14545, 14548, 14551, 14554, 14558, 14561, 14564, 14568, 14571, 14574, 14578, 14581, 14584, 14588, 14591, 14594, 14598, 14601, 14604, 14608, 14611, 14614, 14618, 14621, 14624, 14628, 14631, 14634, 14638, 14641, 14644, 14648, 14651, 14654, 14657, 14661, 14664, 14667, 14671, 14674, 14677, 14681, 14684, 14687, 14691, 14694, 14697, 14701, 14704, 14707, 14711, 14714, 14717, 14721, 14724, 14727, 14731, 14734, 14737, 14741, 14744, 14747, 14750, 14754, 14757, 14760, 14764, 14767, 14770, 14774, 14777, 14780, 14784, 14787, 14790, 14794, 14797, 14800, 14804, 14807, 14810, 14814, 14817, 14820, 14824, 14827, 14830, 14834, 14837, 14840, 14844, 14847, 14850, 14853, 14857, 14860, 14863, 14867, 14870, 14873, 14877, 14880, 14883, 14887, 14890, 14893, 14897, 14900, 14903, 14907, 14910, 14913, 14917, 14920, 14923, 14927, 14930, 14933, 14937, 14940, 14943, 14946, 14950, 14953, 14956, 14960, 14963, 14966, 14970, 14973, 14976, 14980, 14983, 14986, 14990, 14993, 14996, 15000, 15003, 15006, 15010, 15013, 15016, 15020, 15023, 15026, 15030, 15033, 15036, 15039, 15043, 15046, 15049, 15053, 15056, 15059, 15063, 15066, 15069, 15073, 15076, 15079, 15083, 15086, 15089, 15093, 15096, 15099, 15103, 15106, 15109, 15113, 15116, 15119, 15123, 15126, 15129, 15133, 15136, 15139, 15142, 15146, 15149, 15152, 15156, 15159, 15162, 15166, 15169, 15172, 15176, 15179, 15182, 15186, 15189, 15192, 15196, 15199, 15202, 15206, 15209, 15212, 15216, 15219, 15222, 15226, 15229, 15232, 15235, 15239, 15242, 15245, 15249, 15252, 15255, 15259, 15262, 15265, 15269, 15272, 15275, 15279, 15282, 15285, 15289, 15292, 15295, 15299, 15302, 15305, 15309, 15312, 15315, 15319, 15322, 15325, 15329, 15332, 15335, 15338, 15342, 15345, 15348, 15352, 15355, 15358, 15362, 15365, 15368, 15372, 15375, 15378, 15382, 15385, 15388, 15392, 15395, 15398, 15402, 15405, 15408, 15412, 15415, 15418, 15422, 15425, 15428, 15431, 15435, 15438, 15441, 15445, 15448, 15451, 15455, 15458, 15461, 15465, 15468, 15471, 15475, 15478, 15481, 15485, 15488, 15491, 15495, 15498, 15501, 15505, 15508, 15511, 15515, 15518, 15521, 15524, 15528, 15531, 15534, 15538, 15541, 15544, 15548, 15551, 15554, 15558, 15561, 15564, 15568, 15571, 15574, 15578, 15581, 15584, 15588, 15591, 15594, 15598, 15601, 15604, 15608, 15611, 15614, 15618, 15621, 15624, 15627, 15631, 15634, 15637, 15641, 15644, 15647, 15651, 15654, 15657, 15661, 15664, 15667, 15671, 15674, 15677, 15681, 15684, 15687, 15691, 15694, 15697, 15701, 15704, 15707, 15711, 15714, 15717, 15720, 15724, 15727, 15730, 15734, 15737, 15740, 15744, 15747, 15750, 15754, 15757, 15760, 15764, 15767, 15770, 15774, 15777, 15780, 15784, 15787, 15790, 15794, 15797, 15800, 15804, 15807, 15810, 15814, 15817, 15820, 15823, 15827, 15830, 15833, 15837, 15840, 15843, 15847, 15850, 15853, 15857, 15860, 15863, 15867, 15870, 15873, 15877, 15880, 15883, 15887, 15890, 15893, 15897, 15900, 15903, 15907, 15910, 15913, 15916, 15920, 15923, 15926, 15930, 15933, 15936, 15940, 15943, 15946, 15950, 15953, 15956, 15960, 15963, 15966, 15970, 15973, 15976, 15980, 15983, 15986, 15990, 15993, 15996, 16000, 16003, 16006, 16009, 16013, 16016, 16019, 16023, 16026, 16029, 16033, 16036, 16039, 16043, 16046, 16049, 16053, 16056, 16059, 16063, 16066, 16069, 16073, 16076, 16079, 16083, 16086, 16089, 16093, 16096, 16099, 16103, 16106, 16109, 16112, 16116, 16119, 16122, 16126, 16129, 16132, 16136, 16139, 16142, 16146, 16149, 16152, 16156, 16159, 16162, 16166, 16169, 16172, 16176, 16179, 16182, 16186, 16189, 16192, 16196, 16199, 16202, 16205, 16209, 16212, 16215, 16219, 16222, 16225, 16229, 16232, 16235, 16239, 16242, 16245, 16249, 16252, 16255, 16259, 16262, 16265, 16269, 16272, 16275, 16279, 16282, 16285, 16289, 16292, 16295, 16299, 16302, 16305, 16308, 16312, 16315, 16318, 16322, 16325, 16328, 16332, 16335, 16338, 16342, 16345, 16348, 16352, 16355, 16358, 16362, 16365, 16368, 16372, 16375, 16378, 16382, 16385, 16388, 16392, 16395, 16398, 16401, 16405, 16408, 16411, 16415, 16418, 16421, 16425, 16428, 16431, 16435, 16438, 16441, 16445, 16448, 16451, 16455, 16458, 16461, 16465, 16468, 16471, 16475, 16478, 16481, 16485, 16488, 16491, 16494, 16498, 16501, 16504, 16508, 16511, 16514, 16518, 16521, 16524, 16528, 16531, 16534, 16538, 16541, 16544, 16548, 16551, 16554, 16558, 16561, 16564, 16568, 16571, 16574, 16578, 16581, 16584, 16588, 16591, 16594, 16597, 16601, 16604, 16607, 16611, 16614, 16617, 16621, 16624, 16627, 16631, 16634, 16637, 16641, 16644, 16647, 16651, 16654, 16657, 16661, 16664, 16667, 16671, 16674, 16677, 16681, 16684, 16687, 16690, 16694, 16697, 16700, 16704, 16707, 16710, 16714, 16717, 16720, 16724, 16727, 16730, 16734, 16737, 16740, 16744, 16747, 16750, 16754, 16757, 16760, 16764, 16767, 16770, 16774, 16777, 16780, 16784, 16787, 16790, 16793, 16797, 16800, 16803, 16807, 16810, 16813, 16817, 16820, 16823, 16827, 16830, 16833, 16837, 16840, 16843, 16847, 16850, 16853, 16857, 16860, 16863, 16867, 16870, 16873, 16877, 16880, 16883, 16886, 16890, 16893, 16896, 16900, 16903, 16906, 16910, 16913, 16916, 16920, 16923, 16926, 16930, 16933, 16936, 16940, 16943, 16946, 16950, 16953, 16956, 16960, 16963, 16966, 16970, 16973, 16976, 16980, 16983, 16986, 16989, 16993, 16996, 16999, 17003, 17006, 17009, 17013, 17016, 17019, 17023, 17026, 17029, 17033, 17036, 17039, 17043, 17046, 17049, 17053, 17056, 17059, 17063, 17066, 17069, 17073, 17076, 17079, 17082, 17086, 17089, 17092, 17096, 17099, 17102, 17106, 17109, 17112, 17116, 17119, 17122, 17126, 17129, 17132, 17136, 17139, 17142, 17146, 17149, 17152, 17156, 17159, 17162, 17166, 17169, 17172, 17175, 17179, 17182, 17185, 17189, 17192, 17195, 17199, 17202, 17205, 17209, 17212, 17215, 17219, 17222, 17225, 17229, 17232, 17235, 17239, 17242, 17245, 17249, 17252, 17255, 17259, 17262, 17265, 17269, 17272, 17275, 17278, 17282, 17285, 17288, 17292, 17295, 17298, 17302, 17305, 17308, 17312, 17315, 17318, 17322, 17325, 17328, 17332, 17335, 17338, 17342, 17345, 17348, 17352, 17355, 17358, 17362, 17365, 17368, 17371, 17375, 17378, 17381, 17385, 17388, 17391, 17395, 17398, 17401, 17405, 17408, 17411, 17415, 17418, 17421, 17425, 17428, 17431, 17435, 17438, 17441, 17445, 17448, 17451, 17455, 17458, 17461, 17465, 17468, 17471, 17474, 17478, 17481, 17484, 17488, 17491, 17494, 17498, 17501, 17504, 17508, 17511, 17514, 17518, 17521, 17524, 17528, 17531, 17534, 17538, 17541, 17544, 17548, 17551, 17554, 17558, 17561, 17564, 17567, 17571, 17574, 17577, 17581, 17584, 17587, 17591, 17594, 17597, 17601, 17604, 17607, 17611, 17614, 17617, 17621, 17624, 17627, 17631, 17634, 17637, 17641, 17644, 17647, 17651, 17654, 17657, 17660, 17664, 17667, 17670, 17674, 17677, 17680, 17684, 17687, 17690, 17694, 17697, 17700, 17704, 17707, 17710, 17714, 17717, 17720, 17724, 17727, 17730, 17734, 17737, 17740, 17744, 17747, 17750, 17754, 17757, 17760, 17763, 17767, 17770, 17773, 17777, 17780, 17783, 17787, 17790, 17793, 17797, 17800, 17803, 17807, 17810, 17813, 17817, 17820, 17823, 17827, 17830, 17833, 17837, 17840, 17843, 17847, 17850, 17853, 17856, 17860, 17863, 17866, 17870, 17873, 17876, 17880, 17883, 17886, 17890, 17893, 17896, 17900, 17903, 17906, 17910, 17913, 17916, 17920, 17923, 17926, 17930, 17933, 17936, 17940, 17943, 17946, 17950, 17953, 17956, 17959, 17963, 17966, 17969, 17973, 17976, 17979, 17983, 17986, 17989, 17993, 17996, 17999, 18003, 18006, 18009, 18013, 18016, 18019, 18023, 18026, 18029, 18033, 18036, 18039, 18043, 18046, 18049, 18052, 18056, 18059, 18062, 18066, 18069, 18072, 18076, 18079, 18082, 18086, 18089, 18092, 18096, 18099, 18102, 18106, 18109, 18112, 18116, 18119, 18122, 18126, 18129, 18132, 18136, 18139, 18142, 18145, 18149, 18152, 18155, 18159, 18162, 18165, 18169, 18172, 18175, 18179, 18182, 18185, 18189, 18192, 18195, 18199, 18202, 18205, 18209, 18212, 18215, 18219, 18222, 18225, 18229, 18232, 18235, 18239, 18242, 18245, 18248, 18252, 18255, 18258, 18262, 18265, 18268, 18272, 18275, 18278, 18282, 18285, 18288, 18292, 18295, 18298, 18302, 18305, 18308, 18312, 18315, 18318, 18322, 18325, 18328, 18332, 18335, 18338, 18341, 18345, 18348, 18351, 18355, 18358, 18361, 18365, 18368, 18371, 18375, 18378, 18381, 18385, 18388, 18391, 18395, 18398, 18401, 18405, 18408, 18411, 18415, 18418, 18421, 18425, 18428, 18431, 18435, 18438, 18441, 18444, 18448, 18451, 18454, 18458, 18461, 18464, 18468, 18471, 18474, 18478, 18481, 18484, 18488, 18491, 18494, 18498, 18501, 18504, 18508, 18511, 18514, 18518, 18521, 18524, 18528, 18531, 18534, 18537, 18541, 18544, 18547, 18551, 18554, 18557, 18561, 18564, 18567, 18571, 18574, 18577, 18581, 18584, 18587, 18591, 18594, 18597, 18601, 18604, 18607, 18611, 18614, 18617, 18621, 18624, 18627, 18630, 18634, 18637, 18640, 18644, 18647, 18650, 18654, 18657, 18660, 18664, 18667, 18670, 18674, 18677, 18680, 18684, 18687, 18690, 18694, 18697, 18700, 18704, 18707, 18710, 18714, 18717, 18720, 18724, 18727, 18730, 18733, 18737, 18740, 18743, 18747, 18750, 18753, 18757, 18760, 18763, 18767, 18770, 18773, 18777, 18780, 18783, 18787, 18790, 18793, 18797, 18800, 18803, 18807, 18810, 18813, 18817, 18820, 18823, 18826, 18830, 18833, 18836, 18840, 18843, 18846, 18850, 18853, 18856, 18860, 18863, 18866, 18870, 18873, 18876, 18880, 18883, 18886, 18890, 18893, 18896, 18900, 18903, 18906, 18910, 18913, 18916, 18920, 18923, 18926, 18929, 18933, 18936, 18939, 18943, 18946, 18949, 18953, 18956, 18959, 18963, 18966, 18969, 18973, 18976, 18979, 18983, 18986, 18989, 18993, 18996, 18999, 19003, 19006, 19009, 19013, 19016, 19019, 19022, 19026, 19029, 19032, 19036, 19039, 19042, 19046, 19049, 19052, 19056, 19059, 19062, 19066, 19069, 19072, 19076, 19079, 19082, 19086, 19089, 19092, 19096, 19099, 19102, 19106, 19109, 19112, 19116, 19119, 19122, 19125, 19129, 19132, 19135, 19139, 19142, 19145, 19149, 19152, 19155, 19159, 19162, 19165, 19169, 19172, 19175, 19179, 19182, 19185, 19189, 19192, 19195, 19199, 19202, 19205, 19209, 19212, 19215, 19218, 19222, 19225, 19228, 19232, 19235, 19238, 19242, 19245, 19248, 19252, 19255, 19258, 19262, 19265, 19268, 19272, 19275, 19278, 19282, 19285, 19288, 19292, 19295, 19298, 19302, 19305, 19308, 19311, 19315, 19318, 19321, 19325, 19328, 19331, 19335, 19338, 19341, 19345, 19348, 19351, 19355, 19358, 19361, 19365, 19368, 19371, 19375, 19378, 19381, 19385, 19388, 19391, 19395, 19398, 19401, 19405, 19408, 19411, 19414, 19418, 19421, 19424, 19428, 19431, 19434, 19438, 19441, 19444, 19448, 19451, 19454, 19458, 19461, 19464, 19468, 19471, 19474, 19478, 19481, 19484, 19488, 19491, 19494, 19498, 19501, 19504, 19507, 19511, 19514, 19517, 19521, 19524, 19527, 19531, 19534, 19537, 19541, 19544, 19547, 19551, 19554, 19557, 19561, 19564, 19567, 19571, 19574, 19577, 19581, 19584, 19587, 19591, 19594, 19597, 19601, 19604, 19607, 19610, 19614, 19617, 19620, 19624, 19627, 19630, 19634, 19637, 19640, 19644, 19647, 19650, 19654, 19657, 19660, 19664, 19667, 19670, 19674, 19677, 19680, 19684, 19687, 19690, 19694, 19697, 19700, 19703, 19707, 19710, 19713, 19717, 19720, 19723, 19727, 19730, 19733, 19737, 19740, 19743, 19747, 19750, 19753, 19757, 19760, 19763, 19767, 19770, 19773, 19777, 19780, 19783, 19787, 19790, 19793, 19796, 19800, 19803, 19806, 19810, 19813, 19816, 19820, 19823, 19826, 19830, 19833, 19836, 19840, 19843, 19846, 19850, 19853, 19856, 19860, 19863, 19866, 19870, 19873, 19876, 19880, 19883, 19886, 19890, 19893, 19896, 19899, 19903, 19906, 19909, 19913, 19916, 19919, 19923, 19926, 19929, 19933, 19936, 19939, 19943, 19946, 19949, 19953, 19956, 19959, 19963, 19966, 19969, 19973, 19976, 19979, 19983, 19986, 19989, 19992, 19996, 19999, 20002, 20006, 20009, 20012, 20016, 20019, 20022, 20026, 20029, 20032, 20036, 20039, 20042, 20046, 20049, 20052, 20056, 20059, 20062, 20066, 20069, 20072, 20076, 20079, 20082, 20086, 20089, 20092, 20095, 20099, 20102, 20105, 20109, 20112, 20115, 20119, 20122, 20125, 20129, 20132, 20135, 20139, 20142, 20145, 20149, 20152, 20155, 20159, 20162, 20165, 20169, 20172, 20175, 20179, 20182, 20185, 20188, 20192, 20195, 20198, 20202, 20205, 20208, 20212, 20215, 20218, 20222, 20225, 20228, 20232, 20235, 20238, 20242, 20245, 20248, 20252, 20255, 20258, 20262, 20265, 20268, 20272, 20275, 20278, 20281, 20285, 20288, 20291, 20295, 20298, 20301, 20305, 20308, 20311, 20315, 20318, 20321, 20325, 20328, 20331, 20335, 20338, 20341, 20345, 20348, 20351, 20355, 20358, 20361, 20365, 20368, 20371, 20375, 20378, 20381, 20384, 20388, 20391, 20394, 20398, 20401, 20404, 20408, 20411, 20414, 20418, 20421, 20424, 20428, 20431, 20434, 20438, 20441, 20444, 20448, 20451, 20454, 20458, 20461, 20464, 20468, 20471, 20474, 20477, 20481, 20484, 20487, 20491, 20494, 20497, 20501, 20504, 20507, 20511, 20514, 20517, 20521, 20524, 20527, 20531, 20534, 20537, 20541, 20544, 20547, 20551, 20554, 20557, 20561, 20564, 20567, 20571, 20574, 20577, 20580, 20584, 20587, 20590, 20594, 20597, 20600, 20604, 20607, 20610, 20614, 20617, 20620, 20624, 20627, 20630, 20634, 20637, 20640, 20644, 20647, 20650, 20654, 20657, 20660, 20664, 20667, 20670, 20673, 20677, 20680, 20683, 20687, 20690, 20693, 20697, 20700, 20703, 20707, 20710, 20713, 20717, 20720, 20723, 20727, 20730, 20733, 20737, 20740, 20743, 20747, 20750, 20753, 20757, 20760, 20763, 20766, 20770, 20773, 20776, 20780, 20783, 20786, 20790, 20793, 20796, 20800, 20803, 20806, 20810, 20813, 20816, 20820, 20823, 20826, 20830, 20833, 20836, 20840, 20843, 20846, 20850, 20853, 20856, 20860, 20863, 20866, 20869, 20873, 20876, 20879, 20883, 20886, 20889, 20893, 20896, 20899, 20903, 20906, 20909, 20913, 20916, 20919, 20923, 20926, 20929, 20933, 20936, 20939, 20943, 20946, 20949, 20953, 20956, 20959, 20962, 20966, 20969, 20972, 20976, 20979, 20982, 20986, 20989, 20992, 20996, 20999, 21002, 21006, 21009, 21012, 21016, 21019, 21022, 21026, 21029, 21032, 21036, 21039, 21042, 21046, 21049, 21052, 21056, 21059, 21062, 21065, 21069, 21072, 21075, 21079, 21082, 21085, 21089, 21092, 21095, 21099, 21102, 21105, 21109, 21112, 21115, 21119, 21122, 21125, 21129, 21132, 21135, 21139, 21142, 21145, 21149, 21152, 21155, 21158, 21162, 21165, 21168, 21172, 21175, 21178, 21182, 21185, 21188, 21192, 21195, 21198, 21202, 21205, 21208, 21212, 21215, 21218, 21222, 21225, 21228, 21232, 21235, 21238, 21242, 21245, 21248, 21252, 21255, 21258, 21261, 21265, 21268, 21271, 21275, 21278, 21281, 21285, 21288, 21291, 21295, 21298, 21301, 21305, 21308, 21311, 21315, 21318, 21321, 21325, 21328, 21331, 21335, 21338, 21341, 21345, 21348, 21351, 21354, 21358, 21361, 21364, 21368, 21371, 21374, 21378, 21381, 21384, 21388, 21391, 21394, 21398, 21401, 21404, 21408, 21411, 21414, 21418, 21421, 21424, 21428, 21431, 21434, 21438, 21441, 21444, 21447, 21451, 21454, 21457, 21461, 21464, 21467, 21471, 21474, 21477, 21481, 21484, 21487, 21491, 21494, 21497, 21501, 21504, 21507, 21511, 21514, 21517, 21521, 21524, 21527, 21531, 21534, 21537, 21541, 21544, 21547, 21550, 21554, 21557, 21560, 21564, 21567, 21570, 21574, 21577, 21580, 21584, 21587, 21590, 21594, 21597, 21600, 21604, 21607, 21610, 21614, 21617, 21620, 21624, 21627, 21630, 21634, 21637, 21640, 21643, 21647, 21650, 21653, 21657, 21660, 21663, 21667, 21670, 21673, 21677, 21680, 21683, 21687, 21690, 21693, 21697, 21700, 21703, 21707, 21710, 21713, 21717, 21720, 21723, 21727, 21730, 21733, 21737, 21740, 21743, 21746, 21750, 21753, 21756, 21760, 21763, 21766, 21770, 21773, 21776, 21780, 21783, 21786, 21790, 21793, 21796, 21800, 21803, 21806, 21810, 21813, 21816, 21820, 21823, 21826, 21830, 21833, 21836, 21839, 21843, 21846, 21849, 21853, 21856, 21859, 21863, 21866, 21869, 21873, 21876, 21879, 21883, 21886, 21889, 21893, 21896, 21899, 21903, 21906, 21909, 21913, 21916, 21919, 21923, 21926, 21929, 21932, 21936, 21939, 21942, 21946, 21949, 21952, 21956, 21959, 21962, 21966, 21969, 21972, 21976, 21979, 21982, 21986, 21989, 21992, 21996, 21999, 22002, 22006, 22009, 22012, 22016, 22019, 22022, 22026, 22029, 22032, 22035, 22039, 22042, 22045, 22049, 22052, 22055, 22059, 22062, 22065, 22069, 22072, 22075, 22079, 22082, 22085, 22089, 22092, 22095, 22099, 22102, 22105, 22109, 22112, 22115, 22119, 22122, 22125, 22128, 22132, 22135, 22138, 22142, 22145, 22148, 22152, 22155, 22158, 22162, 22165, 22168, 22172, 22175, 22178, 22182, 22185, 22188, 22192, 22195, 22198, 22202, 22205, 22208, 22212, 22215, 22218, 22222, 22225, 22228, 22231, 22235, 22238, 22241, 22245, 22248, 22251, 22255, 22258, 22261, 22265, 22268, 22271, 22275, 22278, 22281, 22285, 22288, 22291, 22295, 22298, 22301, 22305, 22308, 22311, 22315, 22318, 22321, 22324, 22328, 22331, 22334, 22338, 22341, 22344, 22348, 22351, 22354, 22358, 22361, 22364, 22368, 22371, 22374, 22378, 22381, 22384, 22388, 22391, 22394, 22398, 22401, 22404, 22408, 22411, 22414, 22417, 22421, 22424, 22427, 22431, 22434, 22437, 22441, 22444, 22447, 22451, 22454, 22457, 22461, 22464, 22467, 22471, 22474, 22477, 22481, 22484, 22487, 22491, 22494, 22497, 22501, 22504, 22507, 22511, 22514, 22517, 22520, 22524, 22527, 22530, 22534, 22537, 22540, 22544, 22547, 22550, 22554, 22557, 22560, 22564, 22567, 22570, 22574, 22577, 22580, 22584, 22587, 22590, 22594, 22597, 22600, 22604, 22607, 22610, 22613, 22617, 22620, 22623, 22627, 22630, 22633, 22637, 22640, 22643, 22647, 22650, 22653, 22657, 22660, 22663, 22667, 22670, 22673, 22677, 22680, 22683, 22687, 22690, 22693, 22697, 22700, 22703, 22707, 22710, 22713, 22716, 22720, 22723, 22726, 22730, 22733, 22736, 22740, 22743, 22746, 22750, 22753, 22756, 22760, 22763, 22766, 22770, 22773, 22776, 22780, 22783, 22786, 22790, 22793, 22796, 22800, 22803, 22806, 22809, 22813, 22816, 22819, 22823, 22826, 22829, 22833, 22836, 22839, 22843, 22846, 22849, 22853, 22856, 22859, 22863, 22866, 22869, 22873, 22876, 22879, 22883, 22886, 22889, 22893, 22896, 22899, 22902, 22906, 22909, 22912, 22916, 22919, 22922, 22926, 22929, 22932, 22936, 22939, 22942, 22946, 22949, 22952, 22956, 22959, 22962, 22966, 22969, 22972, 22976, 22979, 22982, 22986, 22989, 22992, 22996, 22999, 23002, 23005, 23009, 23012, 23015, 23019, 23022, 23025, 23029, 23032, 23035, 23039, 23042, 23045, 23049, 23052, 23055, 23059, 23062, 23065, 23069, 23072, 23075, 23079, 23082, 23085, 23089, 23092, 23095, 23098, 23102, 23105, 23108, 23112, 23115, 23118, 23122, 23125, 23128, 23132, 23135, 23138, 23142, 23145, 23148, 23152, 23155, 23158, 23162, 23165, 23168, 23172, 23175, 23178, 23182, 23185, 23188, 23192, 23195, 23198, 23201, 23205, 23208, 23211, 23215, 23218, 23221, 23225, 23228, 23231, 23235, 23238, 23241, 23245, 23248, 23251, 23255, 23258, 23261, 23265, 23268, 23271, 23275, 23278, 23281, 23285, 23288, 23291, 23294, 23298, 23301, 23304, 23308, 23311, 23314, 23318, 23321, 23324, 23328, 23331, 23334, 23338, 23341, 23344, 23348, 23351, 23354, 23358, 23361, 23364, 23368, 23371, 23374, 23378, 23381, 23384, 23388, 23391, 23394, 23397, 23401, 23404, 23407, 23411, 23414, 23417, 23421, 23424, 23427, 23431, 23434, 23437, 23441, 23444, 23447, 23451, 23454, 23457, 23461, 23464, 23467, 23471, 23474, 23477, 23481, 23484, 23487, 23490, 23494, 23497, 23500, 23504, 23507, 23510, 23514, 23517, 23520, 23524, 23527, 23530, 23534, 23537, 23540, 23544, 23547, 23550, 23554, 23557, 23560, 23564, 23567, 23570, 23574, 23577, 23580, 23583, 23587, 23590, 23593, 23597, 23600, 23603, 23607, 23610, 23613, 23617, 23620, 23623, 23627, 23630, 23633, 23637, 23640, 23643, 23647, 23650, 23653, 23657, 23660, 23663, 23667, 23670, 23673, 23677, 23680, 23683, 23686, 23690, 23693, 23696, 23700, 23703, 23706, 23710, 23713, 23716, 23720, 23723, 23726, 23730, 23733, 23736, 23740, 23743, 23746, 23750, 23753, 23756, 23760, 23763, 23766, 23770, 23773, 23776, 23779, 23783, 23786, 23789, 23793, 23796, 23799, 23803, 23806, 23809, 23813, 23816, 23819, 23823, 23826, 23829, 23833, 23836, 23839, 23843, 23846, 23849, 23853, 23856, 23859, 23863, 23866, 23869, 23873, 23876, 23879, 23882, 23886, 23889, 23892, 23896, 23899, 23902, 23906, 23909, 23912, 23916, 23919, 23922, 23926, 23929, 23932, 23936, 23939, 23942, 23946, 23949, 23952, 23956, 23959, 23962, 23966, 23969, 23972, 23975, 23979, 23982, 23985, 23989, 23992, 23995, 23999, 24002, 24005, 24009, 24012, 24015, 24019, 24022, 24025, 24029, 24032, 24035, 24039, 24042, 24045, 24049, 24052, 24055, 24059, 24062, 24065, 24068, 24072, 24075, 24078, 24082, 24085, 24088, 24092, 24095, 24098, 24102, 24105, 24108, 24112, 24115, 24118, 24122, 24125, 24128, 24132, 24135, 24138, 24142, 24145, 24148, 24152, 24155, 24158, 24162, 24165, 24168, 24171, 24175, 24178, 24181, 24185, 24188, 24191, 24195, 24198, 24201, 24205, 24208, 24211, 24215, 24218, 24221, 24225, 24228, 24231, 24235, 24238, 24241, 24245, 24248, 24251, 24255, 24258, 24261, 24264, 24268, 24271, 24274, 24278, 24281, 24284, 24288, 24291, 24294, 24298, 24301, 24304, 24308, 24311, 24314, 24318, 24321, 24324, 24328, 24331, 24334, 24338, 24341, 24344, 24348, 24351, 24354, 24358, 24361, 24364, 24367, 24371, 24374, 24377, 24381, 24384, 24387, 24391, 24394, 24397, 24401, 24404, 24407, 24411, 24414, 24417, 24421, 24424, 24427, 24431, 24434, 24437, 24441, 24444, 24447, 24451, 24454, 24457, 24460, 24464, 24467, 24470, 24474, 24477, 24480, 24484, 24487, 24490, 24494, 24497, 24500, 24504, 24507, 24510, 24514, 24517, 24520, 24524, 24527, 24530, 24534, 24537, 24540, 24544, 24547, 24550, 24553, 24557, 24560, 24563, 24567, 24570, 24573, 24577, 24580, 24583, 24587, 24590, 24593, 24597, 24600, 24603, 24607, 24610, 24613, 24617, 24620, 24623, 24627, 24630, 24633, 24637, 24640, 24643, 24647, 24650, 24653, 24656, 24660, 24663, 24666, 24670, 24673, 24676, 24680, 24683, 24686, 24690, 24693, 24696, 24700, 24703, 24706, 24710, 24713, 24716, 24720, 24723, 24726, 24730, 24733, 24736, 24740, 24743, 24746, 24749, 24753, 24756, 24759, 24763, 24766, 24769, 24773, 24776, 24779, 24783, 24786, 24789, 24793, 24796, 24799, 24803, 24806, 24809, 24813, 24816, 24819, 24823, 24826, 24829, 24833, 24836, 24839, 24843, 24846, 24849, 24852, 24856, 24859, 24862, 24866, 24869, 24872, 24876, 24879, 24882, 24886, 24889, 24892, 24896, 24899, 24902, 24906, 24909, 24912, 24916, 24919, 24922, 24926, 24929, 24932, 24936, 24939, 24942, 24945, 24949, 24952, 24955, 24959, 24962, 24965, 24969, 24972, 24975, 24979, 24982, 24985, 24989, 24992, 24995, 24999, 25002, 25005, 25009, 25012, 25015, 25019, 25022, 25025, 25029, 25032, 25035, 25038, 25042, 25045, 25048, 25052, 25055, 25058, 25062, 25065, 25068, 25072, 25075, 25078, 25082, 25085, 25088, 25092, 25095, 25098, 25102, 25105, 25108, 25112, 25115, 25118, 25122, 25125, 25128, 25132, 25135, 25138, 25141, 25145, 25148, 25151, 25155, 25158, 25161, 25165, 25168, 25171, 25175, 25178, 25181, 25185, 25188, 25191, 25195, 25198, 25201, 25205, 25208, 25211, 25215, 25218, 25221, 25225, 25228, 25231, 25234, 25238, 25241, 25244, 25248, 25251, 25254, 25258, 25261, 25264, 25268, 25271, 25274, 25278, 25281, 25284, 25288, 25291, 25294, 25298, 25301, 25304, 25308, 25311, 25314, 25318, 25321, 25324, 25328, 25331, 25334, 25337, 25341, 25344, 25347, 25351, 25354, 25357, 25361, 25364, 25367, 25371, 25374, 25377, 25381, 25384, 25387, 25391, 25394, 25397, 25401, 25404, 25407, 25411, 25414, 25417, 25421, 25424, 25427, 25430, 25434, 25437, 25440, 25444, 25447, 25450, 25454, 25457, 25460, 25464, 25467, 25470, 25474, 25477, 25480, 25484, 25487, 25490, 25494, 25497, 25500, 25504, 25507, 25510, 25514, 25517, 25520, 25524, 25527, 25530, 25533, 25537, 25540, 25543, 25547, 25550, 25553, 25557, 25560, 25563, 25567, 25570, 25573, 25577, 25580, 25583, 25587, 25590, 25593, 25597, 25600, 25603, 25607, 25610, 25613, 25617, 25620, 25623, 25626, 25630, 25633, 25636, 25640, 25643, 25646, 25650, 25653, 25656, 25660, 25663, 25666, 25670, 25673, 25676, 25680, 25683, 25686, 25690, 25693, 25696, 25700, 25703, 25706, 25710, 25713, 25716, 25719, 25723, 25726, 25729, 25733, 25736, 25739, 25743, 25746, 25749, 25753, 25756, 25759, 25763, 25766, 25769, 25773, 25776, 25779, 25783, 25786, 25789, 25793, 25796, 25799, 25803, 25806, 25809, 25813, 25816, 25819, 25822, 25826, 25829, 25832, 25836, 25839, 25842, 25846, 25849, 25852, 25856, 25859, 25862, 25866, 25869, 25872, 25876, 25879, 25882, 25886, 25889, 25892, 25896, 25899, 25902, 25906, 25909, 25912, 25915, 25919, 25922, 25925, 25929, 25932, 25935, 25939, 25942, 25945, 25949, 25952, 25955, 25959, 25962, 25965, 25969, 25972, 25975, 25979, 25982, 25985, 25989, 25992, 25995, 25999, 26002, 26005, 26009, 26012, 26015, 26018, 26022, 26025, 26028, 26032, 26035, 26038, 26042, 26045, 26048, 26052, 26055, 26058, 26062, 26065, 26068, 26072, 26075, 26078, 26082, 26085, 26088, 26092, 26095, 26098, 26102, 26105, 26108, 26111, 26115, 26118, 26121, 26125, 26128, 26131, 26135, 26138, 26141, 26145, 26148, 26151, 26155, 26158, 26161, 26165, 26168, 26171, 26175, 26178, 26181, 26185, 26188, 26191, 26195, 26198, 26201, 26204, 26208, 26211, 26214, 26218, 26221, 26224, 26228, 26231, 26234, 26238, 26241, 26244, 26248, 26251, 26254, 26258, 26261, 26264, 26268, 26271, 26274, 26278, 26281, 26284, 26288, 26291, 26294, 26298, 26301, 26304, 26307, 26311, 26314, 26317, 26321, 26324, 26327, 26331, 26334, 26337, 26341, 26344, 26347, 26351, 26354, 26357, 26361, 26364, 26367, 26371, 26374, 26377, 26381, 26384, 26387, 26391, 26394, 26397, 26400, 26404, 26407, 26410, 26414, 26417, 26420, 26424, 26427, 26430, 26434, 26437, 26440, 26444, 26447, 26450, 26454, 26457, 26460, 26464, 26467, 26470, 26474, 26477, 26480, 26484, 26487, 26490, 26494, 26497, 26500, 26503, 26507, 26510, 26513, 26517, 26520, 26523, 26527, 26530, 26533, 26537, 26540, 26543, 26547, 26550, 26553, 26557, 26560, 26563, 26567, 26570, 26573, 26577, 26580, 26583, 26587, 26590, 26593, 26596, 26600, 26603, 26606, 26610, 26613, 26616, 26620, 26623, 26626, 26630, 26633, 26636, 26640, 26643, 26646, 26650, 26653, 26656, 26660, 26663, 26666, 26670, 26673, 26676, 26680, 26683, 26686, 26689, 26693, 26696, 26699, 26703, 26706, 26709, 26713, 26716, 26719, 26723, 26726, 26729, 26733, 26736, 26739, 26743, 26746, 26749, 26753, 26756, 26759, 26763, 26766, 26769, 26773, 26776, 26779, 26783, 26786, 26789, 26792, 26796, 26799, 26802, 26806, 26809, 26812, 26816, 26819, 26822, 26826, 26829, 26832, 26836, 26839, 26842, 26846, 26849, 26852, 26856, 26859, 26862, 26866, 26869, 26872, 26876, 26879, 26882, 26885, 26889, 26892, 26895, 26899, 26902, 26905, 26909, 26912, 26915, 26919, 26922, 26925, 26929, 26932, 26935, 26939, 26942, 26945, 26949, 26952, 26955, 26959, 26962, 26965, 26969, 26972, 26975, 26979, 26982, 26985, 26988, 26992, 26995, 26998, 27002, 27005, 27008, 27012, 27015, 27018, 27022, 27025, 27028, 27032, 27035, 27038, 27042, 27045, 27048, 27052, 27055, 27058, 27062, 27065, 27068, 27072, 27075, 27078, 27081, 27085, 27088, 27091, 27095, 27098, 27101, 27105, 27108, 27111, 27115, 27118, 27121, 27125, 27128, 27131, 27135, 27138, 27141, 27145, 27148, 27151, 27155, 27158, 27161, 27165, 27168, 27171, 27174, 27178, 27181, 27184, 27188, 27191, 27194, 27198, 27201, 27204, 27208, 27211, 27214, 27218, 27221, 27224, 27228, 27231, 27234, 27238, 27241, 27244, 27248, 27251, 27254, 27258, 27261, 27264, 27268, 27271, 27274, 27277, 27281, 27284, 27287, 27291, 27294, 27297, 27301, 27304, 27307, 27311, 27314, 27317, 27321, 27324, 27327, 27331, 27334, 27337, 27341, 27344, 27347, 27351, 27354, 27357, 27361, 27364, 27367, 27370, 27374, 27377, 27380, 27384, 27387, 27390, 27394, 27397, 27400, 27404, 27407, 27410, 27414, 27417, 27420, 27424, 27427, 27430, 27434, 27437, 27440, 27444, 27447, 27450, 27454, 27457, 27460, 27464, 27467, 27470, 27473, 27477, 27480, 27483, 27487, 27490, 27493, 27497, 27500, 27503, 27507, 27510, 27513, 27517, 27520, 27523, 27527, 27530, 27533, 27537, 27540, 27543, 27547, 27550, 27553, 27557, 27560, 27563, 27566, 27570, 27573, 27576, 27580, 27583, 27586, 27590, 27593, 27596, 27600, 27603, 27606, 27610, 27613, 27616, 27620, 27623, 27626, 27630, 27633, 27636, 27640, 27643, 27646, 27650, 27653, 27656, 27660, 27663, 27666, 27669, 27673, 27676, 27679, 27683, 27686, 27689, 27693, 27696, 27699, 27703, 27706, 27709, 27713, 27716, 27719, 27723, 27726, 27729, 27733, 27736, 27739, 27743, 27746, 27749, 27753, 27756, 27759, 27762, 27766, 27769, 27772, 27776, 27779, 27782, 27786, 27789, 27792, 27796, 27799, 27802, 27806, 27809, 27812, 27816, 27819, 27822, 27826, 27829, 27832, 27836, 27839, 27842, 27846, 27849, 27852, 27855, 27859, 27862, 27865, 27869, 27872, 27875, 27879, 27882, 27885, 27889, 27892, 27895, 27899, 27902, 27905, 27909, 27912, 27915, 27919, 27922, 27925, 27929, 27932, 27935, 27939, 27942, 27945, 27949, 27952, 27955, 27958, 27962, 27965, 27968, 27972, 27975, 27978, 27982, 27985, 27988, 27992, 27995, 27998, 28002, 28005, 28008, 28012, 28015, 28018, 28022, 28025, 28028, 28032, 28035, 28038, 28042, 28045, 28048, 28051, 28055, 28058, 28061, 28065, 28068, 28071, 28075, 28078, 28081, 28085, 28088, 28091, 28095, 28098, 28101, 28105, 28108, 28111, 28115, 28118, 28121, 28125, 28128, 28131, 28135, 28138, 28141, 28145, 28148, 28151, 28154, 28158, 28161, 28164, 28168, 28171, 28174, 28178, 28181, 28184, 28188, 28191, 28194, 28198, 28201, 28204, 28208, 28211, 28214, 28218, 28221, 28224, 28228, 28231, 28234, 28238, 28241, 28244, 28247, 28251, 28254, 28257, 28261, 28264, 28267, 28271, 28274, 28277, 28281, 28284, 28287, 28291, 28294, 28297, 28301, 28304, 28307, 28311, 28314, 28317, 28321, 28324, 28327, 28331, 28334, 28337, 28340, 28344, 28347, 28350, 28354, 28357, 28360, 28364, 28367, 28370, 28374, 28377, 28380, 28384, 28387, 28390, 28394, 28397, 28400, 28404, 28407, 28410, 28414, 28417, 28420, 28424, 28427, 28430, 28434, 28437, 28440, 28443, 28447, 28450, 28453, 28457, 28460, 28463, 28467, 28470, 28473, 28477, 28480, 28483, 28487, 28490, 28493, 28497, 28500, 28503, 28507, 28510, 28513, 28517, 28520, 28523, 28527, 28530, 28533, 28536, 28540, 28543, 28546, 28550, 28553, 28556, 28560, 28563, 28566, 28570, 28573, 28576, 28580, 28583, 28586, 28590, 28593, 28596, 28600, 28603, 28606, 28610, 28613, 28616, 28620, 28623, 28626, 28630, 28633, 28636, 28639, 28643, 28646, 28649, 28653, 28656, 28659, 28663, 28666, 28669, 28673, 28676, 28679, 28683, 28686, 28689, 28693, 28696, 28699, 28703, 28706, 28709, 28713, 28716, 28719, 28723, 28726, 28729, 28732, 28736, 28739, 28742, 28746, 28749, 28752, 28756, 28759, 28762, 28766, 28769, 28772, 28776, 28779, 28782, 28786, 28789, 28792, 28796, 28799, 28802, 28806, 28809, 28812, 28816, 28819, 28822, 28825, 28829, 28832, 28835, 28839, 28842, 28845, 28849, 28852, 28855, 28859, 28862, 28865, 28869, 28872, 28875, 28879, 28882, 28885, 28889, 28892, 28895, 28899, 28902, 28905, 28909, 28912, 28915, 28919, 28922, 28925, 28928, 28932, 28935, 28938, 28942, 28945, 28948, 28952, 28955, 28958, 28962, 28965, 28968, 28972, 28975, 28978, 28982, 28985, 28988, 28992, 28995, 28998, 29002, 29005, 29008, 29012, 29015, 29018, 29021, 29025, 29028, 29031, 29035, 29038, 29041, 29045, 29048, 29051, 29055, 29058, 29061, 29065, 29068, 29071, 29075, 29078, 29081, 29085, 29088, 29091, 29095, 29098, 29101, 29105, 29108, 29111, 29115, 29118, 29121, 29124, 29128, 29131, 29134, 29138, 29141, 29144, 29148, 29151, 29154, 29158, 29161, 29164, 29168, 29171, 29174, 29178, 29181, 29184, 29188, 29191, 29194, 29198, 29201, 29204, 29208, 29211, 29214, 29217, 29221, 29224, 29227, 29231, 29234, 29237, 29241, 29244, 29247, 29251, 29254, 29257, 29261, 29264, 29267, 29271, 29274, 29277, 29281, 29284, 29287, 29291, 29294, 29297, 29301, 29304, 29307, 29310, 29314, 29317, 29320, 29324, 29327, 29330, 29334, 29337, 29340, 29344, 29347, 29350, 29354, 29357, 29360, 29364, 29367, 29370, 29374, 29377, 29380, 29384, 29387, 29390, 29394, 29397, 29400, 29404, 29407, 29410, 29413, 29417, 29420, 29423, 29427, 29430, 29433, 29437, 29440, 29443, 29447, 29450, 29453, 29457, 29460, 29463, 29467, 29470, 29473, 29477, 29480, 29483, 29487, 29490, 29493, 29497, 29500, 29503, 29506, 29510, 29513, 29516, 29520, 29523, 29526, 29530, 29533, 29536, 29540, 29543, 29546, 29550, 29553, 29556, 29560, 29563, 29566, 29570, 29573, 29576, 29580, 29583, 29586, 29590, 29593, 29596, 29600, 29603, 29606, 29609, 29613, 29616, 29619, 29623, 29626, 29629, 29633, 29636, 29639, 29643, 29646, 29649, 29653, 29656, 29659, 29663, 29666, 29669, 29673, 29676, 29679, 29683, 29686, 29689, 29693, 29696, 29699, 29702, 29706, 29709, 29712, 29716, 29719, 29722, 29726, 29729, 29732, 29736, 29739, 29742, 29746, 29749, 29752, 29756, 29759, 29762, 29766, 29769, 29772, 29776, 29779, 29782, 29786, 29789, 29792, 29796, 29799, 29802, 29805, 29809, 29812, 29815, 29819, 29822, 29825, 29829, 29832, 29835, 29839, 29842, 29845, 29849, 29852, 29855, 29859, 29862, 29865, 29869, 29872, 29875, 29879, 29882, 29885, 29889, 29892, 29895, 29898, 29902, 29905, 29908, 29912, 29915, 29918, 29922, 29925, 29928, 29932, 29935, 29938, 29942, 29945, 29948, 29952, 29955, 29958, 29962, 29965, 29968, 29972, 29975, 29978, 29982, 29985, 29988, 29991, 29995, 29998, 30001, 30005, 30008, 30011, 30015, 30018, 30021, 30025, 30028, 30031, 30035, 30038, 30041, 30045, 30048, 30051, 30055, 30058, 30061, 30065, 30068, 30071, 30075, 30078, 30081, 30085, 30088, 30091, 30094, 30098, 30101, 30104, 30108, 30111, 30114, 30118, 30121, 30124, 30128, 30131, 30134, 30138, 30141, 30144, 30148, 30151, 30154, 30158, 30161, 30164, 30168, 30171, 30174, 30178, 30181, 30184, 30187, 30191, 30194, 30197, 30201, 30204, 30207, 30211, 30214, 30217, 30221, 30224, 30227, 30231, 30234, 30237, 30241, 30244, 30247, 30251, 30254, 30257, 30261, 30264, 30267, 30271, 30274, 30277, 30281, 30284, 30287, 30290, 30294, 30297, 30300, 30304, 30307, 30310, 30314, 30317, 30320, 30324, 30327, 30330, 30334, 30337, 30340, 30344, 30347, 30350, 30354, 30357, 30360, 30364, 30367, 30370, 30374, 30377, 30380, 30383, 30387, 30390, 30393, 30397, 30400, 30403, 30407, 30410, 30413, 30417, 30420, 30423, 30427, 30430, 30433, 30437, 30440, 30443, 30447, 30450, 30453, 30457, 30460, 30463, 30467, 30470, 30473, 30476, 30480, 30483, 30486, 30490, 30493, 30496, 30500, 30503, 30506, 30510, 30513, 30516, 30520, 30523, 30526, 30530, 30533, 30536, 30540, 30543, 30546, 30550, 30553, 30556, 30560, 30563, 30566, 30570, 30573, 30576, 30579, 30583, 30586, 30589, 30593, 30596, 30599, 30603, 30606, 30609, 30613, 30616, 30619, 30623, 30626, 30629, 30633, 30636, 30639, 30643, 30646, 30649, 30653, 30656, 30659, 30663, 30666, 30669, 30672, 30676, 30679, 30682, 30686, 30689, 30692, 30696, 30699, 30702, 30706, 30709, 30712, 30716, 30719, 30722, 30726, 30729, 30732, 30736, 30739, 30742, 30746, 30749, 30752, 30756, 30759, 30762, 30766, 30769, 30772, 30775, 30779, 30782, 30785, 30789, 30792, 30795, 30799, 30802, 30805, 30809, 30812, 30815, 30819, 30822, 30825, 30829, 30832, 30835, 30839, 30842, 30845, 30849, 30852, 30855, 30859, 30862, 30865, 30868, 30872, 30875, 30878, 30882, 30885, 30888, 30892, 30895, 30898, 30902, 30905, 30908, 30912, 30915, 30918, 30922, 30925, 30928, 30932, 30935, 30938, 30942, 30945, 30948, 30952, 30955, 30958, 30961, 30965, 30968, 30971, 30975, 30978, 30981, 30985, 30988, 30991, 30995, 30998, 31001, 31005, 31008, 31011, 31015, 31018, 31021, 31025, 31028, 31031, 31035, 31038, 31041, 31045, 31048, 31051, 31055, 31058, 31061, 31064, 31068, 31071, 31074, 31078, 31081, 31084, 31088, 31091, 31094, 31098, 31101, 31104, 31108, 31111, 31114, 31118, 31121, 31124, 31128, 31131, 31134, 31138, 31141, 31144, 31148, 31151, 31154, 31157, 31161, 31164, 31167, 31171, 31174, 31177, 31181, 31184, 31187, 31191, 31194, 31197, 31201, 31204, 31207, 31211, 31214, 31217, 31221, 31224, 31227, 31231, 31234, 31237, 31241, 31244, 31247, 31251, 31254, 31257, 31260, 31264, 31267, 31270, 31274, 31277, 31280, 31284, 31287, 31290, 31294, 31297, 31300, 31304, 31307, 31310, 31314, 31317, 31320, 31324, 31327, 31330, 31334, 31337, 31340, 31344, 31347, 31350, 31353, 31357, 31360, 31363, 31367, 31370, 31373, 31377, 31380, 31383, 31387, 31390, 31393, 31397, 31400, 31403, 31407, 31410, 31413, 31417, 31420, 31423, 31427, 31430, 31433, 31437, 31440, 31443, 31446, 31450, 31453, 31456, 31460, 31463, 31466, 31470, 31473, 31476, 31480, 31483, 31486, 31490, 31493, 31496, 31500, 31503, 31506, 31510, 31513, 31516, 31520, 31523, 31526, 31530, 31533, 31536, 31540, 31543, 31546, 31549, 31553, 31556, 31559, 31563, 31566, 31569, 31573, 31576, 31579, 31583, 31586, 31589, 31593, 31596, 31599, 31603, 31606, 31609, 31613, 31616, 31619, 31623, 31626, 31629, 31633, 31636, 31639, 31642, 31646, 31649, 31652, 31656, 31659, 31662, 31666, 31669, 31672, 31676, 31679, 31682, 31686, 31689, 31692, 31696, 31699, 31702, 31706, 31709, 31712, 31716, 31719, 31722, 31726, 31729, 31732, 31736, 31739, 31742, 31745, 31749, 31752, 31755, 31759, 31762, 31765, 31769, 31772, 31775, 31779, 31782, 31785, 31789, 31792, 31795, 31799, 31802, 31805, 31809, 31812, 31815, 31819, 31822, 31825, 31829, 31832, 31835, 31838, 31842, 31845, 31848, 31852, 31855, 31858, 31862, 31865, 31868, 31872, 31875, 31878, 31882, 31885, 31888, 31892, 31895, 31898, 31902, 31905, 31908, 31912, 31915, 31918, 31922, 31925, 31928, 31931, 31935, 31938, 31941, 31945, 31948, 31951, 31955, 31958, 31961, 31965, 31968, 31971, 31975, 31978, 31981, 31985, 31988, 31991, 31995, 31998, 32001, 32005, 32008, 32011, 32015, 32018, 32021, 32025, 32028, 32031, 32034, 32038, 32041, 32044, 32048, 32051, 32054, 32058, 32061, 32064, 32068, 32071, 32074, 32078, 32081, 32084, 32088, 32091, 32094, 32098, 32101, 32104, 32108, 32111, 32114, 32118, 32121, 32124, 32127, 32131, 32134, 32137, 32141, 32144, 32147, 32151, 32154, 32157, 32161, 32164, 32167, 32171, 32174, 32177, 32181, 32184, 32187, 32191, 32194, 32197, 32201, 32204, 32207, 32211, 32214, 32217, 32221, 32224, 32227, 32230, 32234, 32237, 32240, 32244, 32247, 32250, 32254, 32257, 32260, 32264, 32267, 32270, 32274, 32277, 32280, 32284, 32287, 32290, 32294, 32297, 32300, 32304, 32307, 32310, 32314, 32317, 32320, 32323, 32327, 32330, 32333, 32337, 32340, 32343, 32347, 32350, 32353, 32357, 32360, 32363, 32367, 32370, 32373, 32377, 32380, 32383, 32387, 32390, 32393, 32397, 32400, 32403, 32407, 32410, 32413, 32417, 32420, 32423, 32426, 32430, 32433, 32436, 32440, 32443, 32446, 32450, 32453, 32456, 32460, 32463, 32466, 32470, 32473, 32476, 32480, 32483, 32486, 32490, 32493, 32496, 32500, 32503, 32506, 32510, 32513, 32516, 32519, 32523, 32526, 32529, 32533, 32536, 32539, 32543, 32546, 32549, 32553, 32556, 32559, 32563, 32566, 32569, 32573, 32576, 32579, 32583, 32586, 32589, 32593, 32596, 32599, 32603, 32606, 32609, 32612, 32616, 32619, 32622, 32626, 32629, 32632, 32636, 32639, 32642, 32646, 32649, 32652, 32656, 32659, 32662, 32666, 32669, 32672, 32676, 32679, 32682, 32686, 32689, 32692, 32696, 32699, 32702, 32706, 32709, 32712, 32715, 32719, 32722, 32725, 32729, 32732, 32735, 32739, 32742, 32745, 32749, 32752, 32755, 32759, 32762, 32765, 32769, 32772, 32775, 32779, 32782, 32785, 32789, 32792, 32795, 32799, 32802, 32805, 32808, 32812, 32815, 32818, 32822, 32825, 32828, 32832, 32835, 32838, 32842, 32845, 32848, 32852, 32855, 32858, 32862, 32865, 32868, 32872, 32875, 32878, 32882, }; static const UINT256 multipliers1_binary80[] = { {{12415850090107640902ull, 14557465677128539270ull, 4938398379086257084ull, 5255184001115807319ull}}, {{6296440575779775320ull, 18196832096410674088ull, 1561311955430433451ull, 6568980001394759149ull}}, {{7870550719724719149ull, 18134354102085954706ull, 6563325962715429718ull, 8211225001743448936ull}}, {{9530780218255337373ull, 6722285295376333787ull, 4102078726697143574ull, 5132015626089655585ull}}, {{7301789254391783812ull, 17626228656075193042ull, 9739284426798817371ull, 6415019532612069481ull}}, {{18350608604844505572ull, 17421099801666603398ull, 16785791551925909618ull, 8018774415765086851ull}}, {{6857444359600428079ull, 15499873394469015028ull, 8185276710739999559ull, 5011734009853179282ull}}, {{8571805449500535098ull, 14763155724658880881ull, 1008223851570223641ull, 6264667512316474103ull}}, {{15326442830303056777ull, 4618886600541437389ull, 15095337869744943264ull, 7830834390395592628ull}}, {{11884869778153104438ull, 2886804125338398368ull, 211214131735813732ull, 4894271493997245393ull}}, {{14856087222691380547ull, 3608505156672997960ull, 4875703683097155069ull, 6117839367496556741ull}}, {{123364954654674068ull, 9122317464268635355ull, 10706315622298831740ull, 7647299209370695926ull}}, {{16218004161155028957ull, 14924820452022672904ull, 2079761245509381933ull, 4779562005856684954ull}}, {{1825761127734234580ull, 4820967509746177419ull, 11823073593741503225ull, 5974452507320856192ull}}, {{16117259464949956936ull, 10637895405610109677ull, 14778841992176879031ull, 7468065634151070240ull}}, {{12379130174807417037ull, 13566213656147400404ull, 9236776245110549394ull, 4667541021344418900ull}}, {{15473912718509271297ull, 7734395033329474697ull, 11545970306388186743ull, 5834426276680523625ull}}, {{5507332842854425409ull, 5056307773234455468ull, 597404827703069717ull, 7293032845850654532ull}}, {{6884166053568031761ull, 10932070734970457239ull, 746756034628837146ull, 9116291057313318165ull}}, {{11220132811121101707ull, 11444230227783923678ull, 2772565530856717168ull, 5697681910820823853ull}}, {{4801793977046601325ull, 14305287784729904598ull, 8077392931998284364ull, 7122102388526029816ull}}, {{15225614508163027464ull, 17881609730912380747ull, 10096741164997855455ull, 8902627985657537270ull}}, {{7210166058388198213ull, 18093535109461319823ull, 1698777209696271755ull, 5564142491035960794ull}}, {{4401021554557859863ull, 18005232868399261875ull, 11346843548975115502ull, 6955178113794950992ull}}, {{889590924769936924ull, 13283169048644301536ull, 14183554436218894378ull, 8693972642243688740ull}}, {{555994327981210578ull, 12913666673830076364ull, 18088093559491584794ull, 5433732901402305462ull}}, {{694992909976513222ull, 6918711305432819647ull, 13386744912509705185ull, 6792166126752881828ull}}, {{14703799192752805239ull, 13260075150218412462ull, 16733431140637131481ull, 8490207658441102285ull}}, {{4578188477043115371ull, 1370017941245425933ull, 12764237472111901128ull, 5306379786525688928ull}}, {{10334421614731282117ull, 1712522426556782416ull, 15955296840139876410ull, 6632974733157111160ull}}, {{12918027018414102647ull, 11364025070050753828ull, 1497376976465293896ull, 8291218416446388951ull}}, {{17297138923363589962ull, 7102515668781721142ull, 7853389637931890541ull, 5182011510278993094ull}}, {{12398051617349711645ull, 13489830604404539332ull, 593365010560087368ull, 6477514387848741368ull}}, {{15497564521687139556ull, 16862288255505674165ull, 741706263200109210ull, 8096892984810926710ull}}, {{11991820835268156175ull, 15150616178118434257ull, 14298624469782231968ull, 5060558115506829193ull}}, {{1154717988803031506ull, 491526148938491206ull, 4038222531945626249ull, 6325697644383536492ull}}, {{10666769522858565191ull, 5226093704600501911ull, 5047778164932032811ull, 7907122055479420615ull}}, {{13584259979427685100ull, 960465556161619742ull, 10072390380723602363ull, 4941951284674637884ull}}, {{7756952937429830567ull, 15035640000484188390ull, 12590487975904502953ull, 6177439105843297355ull}}, {{472819134932512401ull, 4959491945323071776ull, 11126423951453240788ull, 7721798882304121694ull}}, {{295511959332820251ull, 12323054502681695668ull, 2342328951230887588ull, 4826124301440076059ull}}, {{369389949166025313ull, 15403818128352119585ull, 16762969244320773197ull, 6032655376800095073ull}}, {{5073423454884919546ull, 5419714605157985769ull, 7118653500118802785ull, 7540819221000118842ull}}, {{14700104705371544476ull, 14916536674292210865ull, 9060844456001639644ull, 4713012013125074276ull}}, {{4540072826432266883ull, 198926769155711966ull, 11326055570002049556ull, 5891265016406342845ull}}, {{14898463069895109412ull, 248658461444639957ull, 322511407220398233ull, 7364081270507928557ull}}, {{4788020782086723053ull, 4922509095233187851ull, 5014825277452885695ull, 9205101588134910696ull}}, {{686669979590507956ull, 9994097212161824263ull, 3134265798408053559ull, 5753188492584319185ull}}, {{14693395529770298657ull, 7880935496774892424ull, 8529518266437454853ull, 7191485615730398981ull}}, {{18366744412212873321ull, 14462855389396003434ull, 15273583851474206470ull, 8989357019662998726ull}}, {{16090901276060433730ull, 4427598599945114242ull, 4934303888743991140ull, 5618348137289374204ull}}, {{10890254558220766354ull, 5534498249931392803ull, 6167879860929988925ull, 7022935171611717755ull}}, {{9001132179348570039ull, 11529808830841628908ull, 3098163807735098252ull, 8778668964514647194ull}}, {{14849079648947632082ull, 16429502556130793875ull, 6548038398261824311ull, 5486668102821654496ull}}, {{13949663542757152199ull, 15925192176736104440ull, 8185047997827280389ull, 6858335128527068120ull}}, {{17437079428446440248ull, 6071432165637966838ull, 10231309997284100487ull, 8572918910658835150ull}}, {{6286488624351637251ull, 10712174131164811130ull, 1782882729875174900ull, 5358074319161771969ull}}, {{17081482817294322372ull, 13390217663956013912ull, 6840289430771356529ull, 6697592898952214961ull}}, {{2905109447908351349ull, 2902714024662853679ull, 13162047806891583566ull, 8371991123690268701ull}}, {{8733222432583801449ull, 15649254320696447261ull, 10532122888520933680ull, 5232494452306417938ull}}, {{15528214059157139716ull, 1114823827161007460ull, 3941781573796391293ull, 6540618065383022423ull}}, {{963523500236873028ull, 6005215802378647230ull, 315540948818101212ull, 8175772581728778029ull}}, {{14437260242930209355ull, 12976631913341430326ull, 2503056102225007209ull, 5109857863580486268ull}}, {{8823203266807985885ull, 2385731836394624196ull, 3128820127781259012ull, 6387322329475607835ull}}, {{11029004083509982357ull, 2982164795493280245ull, 17746083215008737477ull, 7984152911844509793ull}}, {{9198970561407432925ull, 4169696006396994105ull, 4173772981739379067ull, 4990095569902818621ull}}, {{16110399220186679060ull, 600433989568854727ull, 9828902245601611738ull, 6237619462378523276ull}}, {{15526313006805960921ull, 9973914523815844217ull, 12286127807002014672ull, 7797024327973154095ull}}, {{2786416601612643720ull, 6233696577384902636ull, 14596358907017341026ull, 4873140204983221309ull}}, {{3483020752015804650ull, 17015492758585904103ull, 4410390578489512570ull, 6091425256229026637ull}}, {{18188833995301919524ull, 12045993911377604320ull, 10124674241539278617ull, 7614281570286283296ull}}, {{11368021247063699703ull, 611217166969920844ull, 6327921400962049136ull, 4758925981428927060ull}}, {{14210026558829624628ull, 764021458712401055ull, 7909901751202561420ull, 5948657476786158825ull}}, {{13150847180109642881ull, 955026823390501319ull, 14499063207430589679ull, 7435821845982698531ull}}, {{15136808515209608657ull, 7514420792260145180ull, 6756071495430424597ull, 4647388653739186582ull}}, {{474266570302459205ull, 14004712008752569380ull, 17668461406142806554ull, 5809235817173983227ull}}, {{592833212878074006ull, 8282517974085935917ull, 17473890739251120289ull, 7261544771467479034ull}}, {{5352727534524980412ull, 14964833486034807800ull, 12618991387209124553ull, 9076930964334348793ull}}, {{3345454709078112758ull, 2435491901130673019ull, 969340589364620990ull, 5673081852708967996ull}}, {{18016876441629804659ull, 12267736913268117081ull, 1211675736705776237ull, 7091352315886209995ull}}, {{8686037496755092111ull, 1499613086302982640ull, 15349652726164384009ull, 8864190394857762493ull}}, {{5428773435471932570ull, 12466473225007833910ull, 11899375963066433957ull, 5540118996786101558ull}}, {{16009338831194691520ull, 1748033475977628675ull, 5650847916978266639ull, 6925148745982626948ull}}, {{15399987520565976496ull, 16020099900254199556ull, 7063559896222833298ull, 8656435932478283685ull}}, {{401620163498959502ull, 14624248456086262627ull, 6720567944352964763ull, 5410272457798927303ull}}, {{14337083259655863090ull, 13668624551680440379ull, 3789023912013818050ull, 6762840572248659129ull}}, {{13309668056142440958ull, 7862408652745774666ull, 9347965908444660467ull, 8453550715310823911ull}}, {{12930228553516413503ull, 2608162398752415214ull, 12760007720418994648ull, 5283469197069264944ull}}, {{6939413655040741070ull, 3260202998440519018ull, 15950009650523743310ull, 6604336496336581180ull}}, {{17897639105655702146ull, 13298625784905424580ull, 1490767989445127521ull, 8255420620420726476ull}}, {{1962652404180038033ull, 1394112087924808507ull, 10155102030257980509ull, 5159637887762954047ull}}, {{16288373560507211254ull, 6354326128333398537ull, 8082191519395087732ull, 6449547359703692559ull}}, {{6525408895351850355ull, 7942907660416748172ull, 5491053380816471761ull, 8061934199629615699ull}}, {{13301752596449682280ull, 16493532333828937367ull, 1126065353796600898ull, 5038708874768509812ull}}, {{12015504727134714946ull, 11393543380431395901ull, 1407581692245751123ull, 6298386093460637265ull}}, {{1184322853636229970ull, 9630243207111856973ull, 6371163133734576808ull, 7872982616825796581ull}}, {{3046044792736337684ull, 6018902004444910608ull, 6287819967797804457ull, 4920614135516122863ull}}, {{3807555990920422104ull, 12135313523983526164ull, 3248088941319867667ull, 6150767669395153579ull}}, {{4759444988650527630ull, 10557455886552019801ull, 17895169231931998296ull, 7688459586743941973ull}}, {{14503868163975049529ull, 6598409929095012375ull, 13490323779171192887ull, 4805287241714963733ull}}, {{13518149186541424007ull, 3636326392941377565ull, 3027846668681827397ull, 6006609052143704667ull}}, {{3062628427894616297ull, 9157094009604109861ull, 17619866391134447958ull, 7508261315179630833ull}}, {{4219985776647829138ull, 1111497737575180759ull, 4094887466817948118ull, 4692663321987269271ull}}, {{663296202382398518ull, 10612744208823751757ull, 506923315095047243ull, 5865829152484086589ull}}, {{5440806271405386052ull, 8654244242602301792ull, 5245340162296196958ull, 7332286440605108236ull}}, {{6801007839256732564ull, 1594433266398101432ull, 6556675202870246198ull, 9165358050756385295ull}}, {{4250629899535457853ull, 14831578846780977107ull, 11015451029434985729ull, 5728348781722740809ull}}, {{701601355991934412ull, 4704415503194057672ull, 18380999805221120066ull, 7160435977153426011ull}}, {{877001694989918015ull, 15103891415847347898ull, 18364563738099012178ull, 8950544971441782514ull}}, {{5159812077796086663ull, 14051618153331980340ull, 16089538354739270515ull, 5594090607151114071ull}}, {{6449765097245108329ull, 12952836673237587521ull, 15500236924996700240ull, 6992613258938892589ull}}, {{12673892389983773315ull, 16191045841546984401ull, 5540238100963711588ull, 8740766573673615737ull}}, {{1003653716098776466ull, 896031614112089443ull, 14991863859170789503ull, 5462979108546009835ull}}, {{15089625200405634295ull, 14955097572922275515ull, 14128143805536098974ull, 6828723885682512294ull}}, {{14250345482079654964ull, 9470499929298068586ull, 8436807720065347910ull, 8535904857103140368ull}}, {{13518151944727172257ull, 1307376437383904962ull, 5273004825040842444ull, 5334940535689462730ull}}, {{7674317894054189513ull, 1634220546729881203ull, 15814628068155828863ull, 6668675669611828412ull}}, {{4981211349140348987ull, 15877833738694515216ull, 1321541011485234462ull, 8335844587014785516ull}}, {{3113257093212718117ull, 5311960068256684106ull, 10049335169033047347ull, 5209902866884240947ull}}, {{13114943403370673454ull, 2028264066893467228ull, 7949982942863921280ull, 6512378583605301184ull}}, {{16393679254213341818ull, 2535330083616834035ull, 9937478678579901600ull, 8140473229506626480ull}}, {{7940206524669644684ull, 1584581302260521272ull, 6210924174112438500ull, 5087795768441641550ull}}, {{9925258155837055855ull, 1980726627825651590ull, 16987027254495323933ull, 6359744710552051937ull}}, {{3183200657941544011ull, 7087594303209452392ull, 7398726012836991204ull, 7949680888190064922ull}}, {{1989500411213465007ull, 13653118476360683553ull, 9235889776450507406ull, 4968550555118790576ull}}, {{7098561532444219163ull, 7843026058596078633ull, 11544862220563134258ull, 6210688193898488220ull}}, {{13484887933982661857ull, 580410536390322483ull, 14431077775703917823ull, 7763360242373110275ull}}, {{6122211949525469709ull, 7280285612885033408ull, 6713580600601254687ull, 4852100151483193922ull}}, {{7652764936906837136ull, 4488670997678903856ull, 17615347787606344167ull, 6065125189353992402ull}}, {{9565956171133546420ull, 999152728671241916ull, 12795812697653154401ull, 7581406486692490503ull}}, {{15202094643813242321ull, 12153685501487995957ull, 14914911963674303356ull, 4738379054182806564ull}}, {{5167560249484389189ull, 15192106876859994947ull, 196895880883327579ull, 5922973817728508206ull}}, {{1847764293428098582ull, 14378447577647605780ull, 9469491887958935282ull, 7403717272160635257ull}}, {{10378224720247337422ull, 13598215754457141516ull, 17447647476042804311ull, 4627323295100397035ull}}, {{12972780900309171777ull, 12386083674644038991ull, 17197873326626117485ull, 5784154118875496294ull}}, {{11604290106959076817ull, 1647546538022885027ull, 12273969621427871049ull, 7230192648594370368ull}}, {{9893676615271458117ull, 6671119190955994188ull, 15342462026784838811ull, 9037740810742962960ull}}, {{15406919921399437132ull, 1863606485133802415ull, 9589038766740524257ull, 5648588006714351850ull}}, {{14646963883321908510ull, 6941194124844640923ull, 2762926421570879513ull, 7060735008392939813ull}}, {{13697018835724997734ull, 13288178674483189058ull, 8065344045390987295ull, 8825918760491174766ull}}, {{13172322790755511488ull, 15222640699193075017ull, 429154009941979155ull, 5516199225306984229ull}}, {{2630345433162225648ull, 14416614855563955868ull, 5148128530854861848ull, 6895249031633730286ull}}, {{3287931791452782059ull, 18020768569454944835ull, 15658532700423353118ull, 8619061289542162857ull}}, {{18195858434153846451ull, 6651294337481952617ull, 2869053910123513843ull, 5386913305963851786ull}}, {{8909764987410144352ull, 3702431903425052868ull, 12809689424509168112ull, 6733641632454814732ull}}, {{11137206234262680440ull, 4628039879281316085ull, 16012111780636460140ull, 8417052040568518415ull}}, {{9266596905627869227ull, 12115896961405598361ull, 16925098890538869443ull, 5260657525355324009ull}}, {{16194932150462224438ull, 10533185183329610047ull, 7321315557891423092ull, 6575821906694155012ull}}, {{15631979169650392643ull, 13166481479162012559ull, 9151644447364278865ull, 8219777383367693765ull}}, {{16687516008672577258ull, 1311521896835175993ull, 8025620788816368243ull, 5137360864604808603ull}}, {{7024336955558557860ull, 15474460426326133704ull, 5420339967593072399ull, 6421701080756010754ull}}, {{8780421194448197325ull, 14731389514480279226ull, 15998796996346116307ull, 8027126350945013442ull}}, {{10099449264957511233ull, 6901275437336480564ull, 14610934141143710596ull, 5016953969340633401ull}}, {{12624311581196889041ull, 8626594296670600705ull, 4428609621147474533ull, 6271192461675791752ull}}, {{1945331421213947589ull, 15394928889265638786ull, 5535762026434343166ull, 7838990577094739690ull}}, {{5827518156686105147ull, 5010144537363636337ull, 8071537284948852383ull, 4899369110684212306ull}}, {{11896083714285019338ull, 1650994653277157517ull, 866049569331289671ull, 6124211388355265383ull}}, {{1035046587574110460ull, 15898801371878610609ull, 14917620016946275800ull, 7655264235444081728ull}}, {{12176119163302288798ull, 9936750857424131630ull, 9323512510591422375ull, 4784540147152551080ull}}, {{5996776917273085189ull, 7809252553352776634ull, 11654390638239277969ull, 5980675183940688850ull}}, {{16719343183446132294ull, 14373251710118358696ull, 5344616260944321653ull, 7475843979925861063ull}}, {{10449589489653832684ull, 11289125328037668137ull, 10257914190731282889ull, 4672402487453663164ull}}, {{17673672880494678759ull, 276348604764921459ull, 12822392738414103612ull, 5840503109317078955ull}}, {{17480405082190960545ull, 345435755956151824ull, 11416304904590241611ull, 7300628886646348694ull}}, {{3403762279029149065ull, 14266852750227353493ull, 5047009093883026205ull, 9125786108307935868ull}}, {{4433194433606912118ull, 11222625978105789885ull, 12377752720531667186ull, 5703616317692459917ull}}, {{10153179060436028051ull, 4804910435777461548ull, 1637132845382420271ull, 7129520397115574897ull}}, {{12691473825545035063ull, 1394452026294439031ull, 6658102075155413243ull, 8911900496394468621ull}}, {{14849700168606728771ull, 17012433580929882058ull, 6467156806185827228ull, 5569937810246542888ull}}, {{9338753173903635155ull, 2818797902452800957ull, 8083946007732284036ull, 6962422262808178610ull}}, {{16285127485806931848ull, 3523497378066001196ull, 881560472810579237ull, 8703027828510223263ull}}, {{954832641774556597ull, 4508028870504944700ull, 7468504323147693879ull, 5439392392818889539ull}}, {{1193540802218195746ull, 1023350069703792971ull, 4723944385507229445ull, 6799240491023611924ull}}, {{15326984058054908395ull, 5890873605557129117ull, 5904930481884036806ull, 8499050613779514905ull}}, {{11885208045498011699ull, 17516854058755369410ull, 15219796597245992763ull, 5311906633612196815ull}}, {{5633138020017738816ull, 17284381555016823859ull, 14413059728130103050ull, 6639883292015246019ull}}, {{2429736506594785615ull, 12382104906916254016ull, 13404638641735240909ull, 8299854115019057524ull}}, {{1518585316621741010ull, 10044658576036352712ull, 17601271187939301376ull, 5187408821886910952ull}}, {{1898231645777176262ull, 12555823220045440890ull, 3554844911214575104ull, 6484261027358638691ull}}, {{11596161594076246136ull, 15694779025056801112ull, 18278614194300382592ull, 8105326284198298363ull}}, {{7247600996297653835ull, 9809236890660500695ull, 9118290862224045168ull, 5065828927623936477ull}}, {{4447815226944679390ull, 12261546113325625869ull, 16009549596207444364ull, 6332286159529920596ull}}, {{10171455052108237141ull, 15326932641657032336ull, 1565192921549753839ull, 7915357699412400746ull}}, {{6357159407567648213ull, 16496861928676727066ull, 5589931594395984053ull, 4947098562132750466ull}}, {{17169821296314336074ull, 6786019355563745120ull, 16210786529849755875ull, 6183873202665938082ull}}, {{3015532546683368477ull, 3870838176027293497ull, 11040111125457419036ull, 7729841503332422603ull}}, {{13413922887745575058ull, 11642645896871834243ull, 4594226444197192945ull, 4831150939582764127ull}}, {{12155717591254580919ull, 718249315807629092ull, 1131097036819103278ull, 6038938674478455159ull}}, {{15194646989068226148ull, 10121183681614312173ull, 15248929351306042809ull, 7548673343098068948ull}}, {{11802497377381335295ull, 17854954847077414868ull, 307208807711500947ull, 4717920839436293093ull}}, {{14753121721726669118ull, 17707007540419380681ull, 4995697028066764088ull, 5897401049295366366ull}}, {{4606344096876172686ull, 3687015351814674236ull, 15467993321938230919ull, 7371751311619207957ull}}, {{5757930121095215857ull, 18443827245050506507ull, 5499933597140624936ull, 9214689139524009947ull}}, {{1292863316470815959ull, 11527392028156566567ull, 1131615488999196633ull, 5759180712202506217ull}}, {{15451137200870683660ull, 574181979913544496ull, 6026205379676383696ull, 7198975890253132771ull}}, {{867177427378802959ull, 717727474891930621ull, 2921070706168091716ull, 8998719862816415964ull}}, {{2847828901325445802ull, 9671951708662232446ull, 11049041228209833130ull, 5624199914260259977ull}}, {{12783158163511583060ull, 2866567598973014749ull, 18422987553689679317ull, 7030249892825324971ull}}, {{2143889649107315113ull, 8194895517143656341ull, 18417048423684711242ull, 8787812366031656214ull}}, {{3645774039905765898ull, 9733495716642173117ull, 6898969246375556622ull, 5492382728769785134ull}}, {{9168903568309595276ull, 2943497608947940588ull, 17847083594824221586ull, 6865478410962231417ull}}, {{11461129460386994095ull, 12902744048039701543ull, 8473796438248113270ull, 8581848013702789272ull}}, {{14080734940382953166ull, 3452529011597425560ull, 5296122773905070794ull, 5363655008564243295ull}}, {{17600918675478691457ull, 13539033301351557758ull, 2008467448953950588ull, 6704568760705304119ull}}, {{12777776307493588513ull, 16923791626689447198ull, 16345642366474601947ull, 8380710950881630148ull}}, {{3374424173756104917ull, 8271526757467210547ull, 992654442191850409ull, 5237944344301018843ull}}, {{18053088272477294858ull, 14951094465261401087ull, 15075876108021976723ull, 6547430430376273553ull}}, {{17954674322169230668ull, 14077182063149363455ull, 5009787079745307192ull, 8184288037970341942ull}}, {{18139200478996851024ull, 8798238789468352159ull, 16966174980122980707ull, 5115180023731463713ull}}, {{18062314580318675876ull, 6386112468408052295ull, 7372660669871562172ull, 6393975029664329642ull}}, {{17966207206970956941ull, 7982640585510065369ull, 18439197874194228523ull, 7992468787080412052ull}}, {{4311350476715766232ull, 2683307356730096904ull, 2301126634516617019ull, 4995292991925257533ull}}, {{5389188095894707790ull, 17189192251194784842ull, 7488094311573159177ull, 6244116239906571916ull}}, {{15959857156723160545ull, 7651432258711317340ull, 9360117889466448972ull, 7805145299883214895ull}}, {{751538686097199533ull, 14005517198549349146ull, 12767602708557612463ull, 4878215812427009309ull}}, {{10162795394476275224ull, 12895210479759298528ull, 2124445330414851867ull, 6097769765533761637ull}}, {{12703494243095344030ull, 11507327081271735256ull, 7267242681445952738ull, 7622212206917202046ull}}, {{7939683901934590019ull, 11803765444222222439ull, 18377084731185884173ull, 4763882629323251278ull}}, {{5312918858990849620ull, 919648749995614337ull, 13747983877127579409ull, 5954853286654064098ull}}, {{11252834592165949928ull, 5761246955921905825ull, 7961607809554698453ull, 7443566608317580123ull}}, {{115492592462636849ull, 5906622356664885093ull, 2670161871757992581ull, 4652229130198487577ull}}, {{4756051759005683966ull, 11994963964258494270ull, 7949388358124878630ull, 5815286412748109471ull}}, {{15168436735611880765ull, 5770332918468342029ull, 5325049429228710384ull, 7269108015935136839ull}}, {{5125487864232687244ull, 7212916148085427537ull, 2044625768108500076ull, 9086385019918921049ull}}, {{14732644961213899288ull, 13731444629408168018ull, 12807106151136282307ull, 5678990637449325655ull}}, {{9192434164662598301ull, 12552619768332822119ull, 11397196670492964980ull, 7098738296811657069ull}}, {{6878856687400859973ull, 15690774710416027649ull, 411437782834042513ull, 8873422871014571337ull}}, {{15828500475694007243ull, 2889205166368935424ull, 11786363660339746331ull, 5545889294384107085ull}}, {{1338881520907957438ull, 17446564513243332993ull, 897896520142519201ull, 6932361617980133857ull}}, {{6285287919562334701ull, 7973147586272002529ull, 5734056668605536906ull, 8665452022475167321ull}}, {{15457519995794928948ull, 9594903259847389484ull, 15113000463946930326ull, 5415907514046979575ull}}, {{875155921034109569ull, 2770257037954461048ull, 14279564561506275004ull, 6769884392558724469ull}}, {{1093944901292636962ull, 3462821297443076310ull, 4014397646600680043ull, 8462355490698405587ull}}, {{14518773618590061813ull, 18305164375397780357ull, 203155519911731074ull, 5288972181686503492ull}}, {{4313408967955413554ull, 13658083432392449639ull, 253944399889663843ull, 6611215227108129365ull}}, {{780075191516879039ull, 12460918272063174145ull, 4929116518289467708ull, 8264019033885161706ull}}, {{12016762040766519159ull, 17011445956894259648ull, 7692383842358305221ull, 5165011896178226066ull}}, {{15020952550958148949ull, 7429249390835660848ull, 392107766093105719ull, 6456264870222782583ull}}, {{329446614988134570ull, 4674875720117188157ull, 14325192762898545861ull, 8070331087778478228ull}}, {{2511747143581278059ull, 5227640334286936550ull, 18176617513666366971ull, 5043956929861548892ull}}, {{12363055966331373381ull, 1922864399431282783ull, 4274027818373407098ull, 6304946162326936116ull}}, {{10842133939486828822ull, 11626952536143879287ull, 5342534772966758872ull, 7881182702908670145ull}}, {{13693862739820349870ull, 7266845335089924554ull, 14868299279172694055ull, 4925739189317918840ull}}, {{7893956387920661530ull, 4471870650435017789ull, 138630025256315953ull, 6157173986647398551ull}}, {{14479131503328214816ull, 10201524331471160140ull, 14008345586852558653ull, 7696467483309248188ull}}, {{18272829226434910068ull, 8681795716383169039ull, 17978588028637624966ull, 4810292177068280117ull}}, {{18229350514616249681ull, 1628872608624185491ull, 8638176980514867496ull, 6012865221335350147ull}}, {{18175002124842924197ull, 2036090760780231864ull, 6186035207216196466ull, 7516081526669187684ull}}, {{11359376328026827623ull, 5884242743915032819ull, 13089644041364898599ull, 4697550954168242302ull}}, {{9587534391606146625ull, 2743617411466403120ull, 7138683014851347441ull, 5871938692710302878ull}}, {{11984417989507683281ull, 8041207782760391804ull, 18146725805418960109ull, 7339923365887878597ull}}, {{14980522486884604101ull, 14663195746877877659ull, 8848349201491536424ull, 9174904207359848247ull}}, {{7056983545089183612ull, 9164497341798673537ull, 12447747278573292121ull, 5734315129599905154ull}}, {{13432915449788867418ull, 16067307695675729825ull, 6336312061361839343ull, 7167893911999881443ull}}, {{2956086256953920561ull, 15472448601167274378ull, 3308704058274911275ull, 8959867389999851804ull}}, {{6459239929023588255ull, 7364437366515852534ull, 11291312073276595355ull, 5599917118749907377ull}}, {{17297421948134261126ull, 4593860689717427763ull, 279082036313580482ull, 6999896398437384222ull}}, {{17010091416740438504ull, 14965697899001560512ull, 9572224582246751410ull, 8749870498046730277ull}}, {{10631307135462774065ull, 13965247205303363224ull, 8288483373117913583ull, 5468669061279206423ull}}, {{13289133919328467581ull, 12844872988201816126ull, 5748918197970004075ull, 6835836326599008029ull}}, {{7388045362305808668ull, 11444405216824882254ull, 11797833765889892998ull, 8544795408248760036ull}}, {{5842333013742514ull, 2541067242088163505ull, 16597018140535958932ull, 5340497130155475022ull}}, {{4618988934694566046ull, 3176334052610204381ull, 11522900638815172857ull, 6675621412694343778ull}}, {{10385422186795595462ull, 8582103584190143380ull, 5180253761664190263ull, 8344526765867929723ull}}, {{15714260903602022972ull, 12281343767759921468ull, 931815591826424962ull, 5215329228667456077ull}}, {{1196082055792977098ull, 6128307672845126028ull, 5776455508210419107ull, 6519161535834320096ull}}, {{1495102569741221373ull, 3048698572629019631ull, 7220569385263023884ull, 8148951919792900120ull}}, {{7851968133729345214ull, 11128808644747913077ull, 4512855865789389927ull, 5093094949870562575ull}}, {{14426646185589069422ull, 9299324787507503442ull, 1029383813809349505ull, 6366368687338203219ull}}, {{8809935695131560969ull, 16235842002811767207ull, 15121787822543850593ull, 7957960859172754023ull}}, {{12423738837098307462ull, 3229872224116272648ull, 16368646416730988477ull, 4973725536982971264ull}}, {{15529673546372884327ull, 8649026298572728714ull, 2014063947204183980ull, 6217156921228714081ull}}, {{10188719896111329601ull, 10811282873215910893ull, 7129265952432617879ull, 7771446151535892601ull}}, {{8673792944283274953ull, 13674580823401026164ull, 15985006266338855934ull, 4857153844709932875ull}}, {{10842241180354093691ull, 7869853992396506897ull, 15369571814496182014ull, 6071442305887416094ull}}, {{18164487493870005017ull, 613945453640857813ull, 9988592731265451710ull, 7589302882359270118ull}}, {{13658647692882447088ull, 14218773963807699845ull, 1631184438613519414ull, 4743314301474543824ull}}, {{3238251560820895148ull, 8550095417904848999ull, 2038980548266899268ull, 5929142876843179780ull}}, {{17882872506308282647ull, 10687619272381061248ull, 2548725685333624085ull, 7411428596053974725ull}}, {{11176795316442676654ull, 8985605054451857232ull, 3898796562547209005ull, 4632142872533734203ull}}, {{13970994145553345818ull, 15843692336492209444ull, 261809684756623352ull, 5790178590667167754ull}}, {{17463742681941682272ull, 1357871346905710189ull, 9550634142800554999ull, 7237723238333959692ull}}, {{7994620297144939128ull, 15532397238914301449ull, 11938292678500693748ull, 9047154047917449615ull}}, {{16525852731784056715ull, 484376237466662597ull, 14378961951704015449ull, 5654471279948406009ull}}, {{6822257859447907182ull, 5217156315260716151ull, 4138644384347855599ull, 7068089099935507512ull}}, {{3916136305882496073ull, 1909759375648507285ull, 5173305480434819499ull, 8835111374919384390ull}}, {{4753428200390253998ull, 17334500674276174717ull, 17068373980553925898ull, 5521944609324615243ull}}, {{10553471268915205401ull, 12444753805990442588ull, 16723781457265019469ull, 6902430761655769054ull}}, {{13191839086144006752ull, 1720884202205889523ull, 11681354784726498529ull, 8628038452069711318ull}}, {{5939056419626310268ull, 12604767672447150712ull, 2689160722026673676ull, 5392524032543569574ull}}, {{7423820524532887835ull, 15755959590558938390ull, 12584822939388117903ull, 6740655040679461967ull}}, {{56403618811333985ull, 15083263469771285084ull, 11119342655807759475ull, 8425818800849327459ull}}, {{9258624298611859549ull, 7121196659393359225ull, 4643746150666155720ull, 5266136750530829662ull}}, {{16184966391692212340ull, 8901495824241699031ull, 15028054725187470458ull, 6582670938163537077ull}}, {{15619521971187877521ull, 1903497743447347981ull, 4950010351202174361ull, 8228338672704421347ull}}, {{12068044241206117403ull, 12718901135723062248ull, 787913460287665023ull, 5142711670440263342ull}}, {{15085055301507646754ull, 11286940401226439906ull, 10208263862214357087ull, 6428389588050329177ull}}, {{9632947090029782634ull, 9496989483105661979ull, 17372015846195334263ull, 8035486985062911471ull}}, {{3714748922054920194ull, 12853147454582120593ull, 17775038931513165770ull, 5022179365664319669ull}}, {{9255122170996038147ull, 6843062281372874933ull, 8383740609109293501ull, 6277724207080399587ull}}, {{16180588732172435587ull, 13165513870143481570ull, 5867989742959228972ull, 7847155258850499484ull}}, {{14724553976035160146ull, 17451818205694451789ull, 12890865626204293915ull, 4904472036781562177ull}}, {{4570634414761786471ull, 17203086738690676833ull, 2278523977473203682ull, 6130590045976952722ull}}, {{10324979036879620992ull, 12280486386508570233ull, 12071527008696280411ull, 7663237557471190902ull}}, {{17982326944118232880ull, 5369460982354162443ull, 2933018362007787353ull, 4789523473419494314ull}}, {{17866222661720403196ull, 11323512246370090958ull, 12889644989364509999ull, 5986904341774367892ull}}, {{13109406290295728187ull, 9542704289535225794ull, 16112056236705637499ull, 7483630427217959865ull}}, {{12805064949862218021ull, 3658347171745822169ull, 3152506120299941581ull, 4677269017011224916ull}}, {{2171273132045608814ull, 9184619983109665616ull, 3940632650374926976ull, 5846586271264031145ull}}, {{2714091415057011018ull, 11480774978887082020ull, 9537476831396046624ull, 7308232839080038931ull}}, {{3392614268821263772ull, 14350968723608852525ull, 7310160020817670376ull, 9135291048850048664ull}}, {{4426226927226983810ull, 8969355452255532828ull, 4568850013011043985ull, 5709556905531280415ull}}, {{5532783659033729762ull, 15823380333746803939ull, 1099376497836417077ull, 7136946131914100519ull}}, {{2304293555364774299ull, 5944167361901341212ull, 15209278677577685059ull, 8921182664892625648ull}}, {{10663555508957759745ull, 1409261591974644305ull, 9505799173486053162ull, 5575739165557891030ull}}, {{17941130404624587585ull, 10984949026823081189ull, 2658876930002790644ull, 6969673956947363788ull}}, {{8591354950498570769ull, 13731186283528851487ull, 3323596162503488305ull, 8712092446184204735ull}}, {{12287125871702688587ull, 1664462399564450323ull, 8994776629205762047ull, 5445057778865127959ull}}, {{10747221321200972829ull, 15915636054737726616ull, 6631784768079814654ull, 6806322223581409949ull}}, {{13434026651501216037ull, 10671173031567382462ull, 12901416978527156222ull, 8507902779476762436ull}}, {{3784580638760872119ull, 2057797126302226135ull, 17286757648434248447ull, 5317439237172976522ull}}, {{119039780023702245ull, 16407304463159946381ull, 12385075023688034750ull, 6646799046466220653ull}}, {{4760485743457015710ull, 11285758542095157168ull, 1646285724327879726ull, 8308498808082775817ull}}, {{2975303589660634819ull, 2441913070382085326ull, 12558143623773394589ull, 5192811755051734885ull}}, {{12942501523930569331ull, 7664077356404994561ull, 1862621474434579524ull, 6491014693814668607ull}}, {{2343068849631047952ull, 9580096695506243202ull, 16163334898325388117ull, 8113768367268335758ull}}, {{6076104049446792874ull, 8293403443905095953ull, 5490398293025979669ull, 5071105229542709849ull}}, {{12206816080235878997ull, 14978440323308757845ull, 11474683884709862490ull, 6338881536928387311ull}}, {{1423462045012685034ull, 9499678367281171499ull, 9731668837459940209ull, 7923601921160484139ull}}, {{17030564842628785810ull, 17466514025619201946ull, 3776450014198768678ull, 4952251200725302587ull}}, {{12064834016431206455ull, 12609770495169226625ull, 108876499321072944ull, 6190314000906628234ull}}, {{1245984465256844356ull, 15762213118961533282ull, 9359467661006116988ull, 7737892501133285292ull}}, {{5390426309212915627ull, 628011162496182493ull, 15073039324983598926ull, 4836182813208303307ull}}, {{11349718904943532437ull, 10008385989975003924ull, 14229613137802110753ull, 6045228516510379134ull}}, {{14187148631179415547ull, 17122168505896142809ull, 8563644385397862633ull, 7556535645637973918ull}}, {{1949438866846052861ull, 3783826288544007400ull, 740591722446276242ull, 4722834778523733699ull}}, {{2436798583557566076ull, 13953154897534785058ull, 14760797708340009014ull, 5903543473154667123ull}}, {{12269370266301733403ull, 8218071585063705514ull, 13839311116997623364ull, 7379429341443333904ull}}, {{12280042434865971281ull, 14359666777519591754ull, 8649569448123514602ull, 4612143338402083690ull}}, {{6126681006727688293ull, 8726211435044713885ull, 1588589773299617445ull, 5765179173002604613ull}}, {{12270037276836998270ull, 15519450312233280260ull, 6597423235051909710ull, 7206473966253255766ull}}, {{15337546596046247838ull, 10175940853436824517ull, 17470151080669662946ull, 9008092457816569707ull}}, {{11891809631742598851ull, 10971649051825403227ull, 8613001416204845389ull, 5630057786135356067ull}}, {{10253076021250860659ull, 18326247333209141938ull, 6154565751828668832ull, 7037572232669195084ull}}, {{3592972989708800016ull, 4461065092801875807ull, 7693207189785836041ull, 8796965290836493855ull}}, {{9163137146209081866ull, 14317380729069642139ull, 11725783521257229381ull, 5498103306772808659ull}}, {{6842235414333964429ull, 4061667856054888962ull, 10045543383144148823ull, 6872629133466010824ull}}, {{17776166304772231344ull, 465398801641223298ull, 12556929228930186029ull, 8590786416832513530ull}}, {{15721789958910032494ull, 2596717260239458513ull, 12459766786508754172ull, 5369241510520320956ull}}, {{5817179393355376905ull, 3245896575299323142ull, 15574708483135942715ull, 6711551888150401195ull}}, {{16494846278548996939ull, 17892428774406317639ull, 14856699585492540489ull, 8389439860188001494ull}}, {{17226807951734204943ull, 4265238956362866668ull, 4673751222505449902ull, 5243399912617500934ull}}, {{3086765865958204563ull, 14554920732308359144ull, 15065561064986588185ull, 6554249890771876167ull}}, {{3858457332447755704ull, 4358592860103285218ull, 14220265312805847328ull, 8192812363464845209ull}}, {{7023221851207235219ull, 2724120537564553261ull, 1970136792862572724ull, 5120507727165528256ull}}, {{13390713332436431928ull, 3405150671955691576ull, 2462670991078215905ull, 6400634658956910320ull}}, {{16738391665545539909ull, 8868124358372002374ull, 3078338738847769881ull, 8000793323696137900ull}}, {{5849808772538574540ull, 17071792770050971244ull, 11147333748634631983ull, 5000495827310086187ull}}, {{7312260965673218174ull, 16728054944136326151ull, 9322481167365902075ull, 6250619784137607734ull}}, {{4528640188664134814ull, 16298382661743019785ull, 2429729422352601786ull, 7813274730172009668ull}}, {{14359615163983554019ull, 14798175182016775269ull, 10741952925825151924ull, 4883296706357506042ull}}, {{4114460899697278811ull, 50974903811417471ull, 4204069120426664098ull, 6104120882946882553ull}}, {{531390106194210610ull, 9287090666619047647ull, 9866772418960718026ull, 7630151103683603191ull}}, {{7249647844012463487ull, 10416117685064292683ull, 13084261789491530622ull, 4768844439802251994ull}}, {{4450373786588191455ull, 3796775069475590046ull, 7131955200009637470ull, 5961055549752814993ull}}, {{14786339270090015127ull, 13969340873699263365ull, 13526630018439434741ull, 7451319437191018741ull}}, {{11547305053019953406ull, 11036681055275733555ull, 10759986770738340665ull, 4657074648244386713ull}}, {{9822445297847553854ull, 18407537337522054848ull, 18061669481850313735ull, 5821343310305483391ull}}, {{12278056622309442317ull, 18397735653475180656ull, 17965400833885504265ull, 7276679137881854239ull}}, {{15347570777886802897ull, 9162111511561812108ull, 17845065023929492428ull, 9095848922352317799ull}}, {{368859699324476003ull, 14949691731580908376ull, 18070694667597014623ull, 5684905576470198624ull}}, {{461074624155595003ull, 14075428646048747566ull, 4141624260786716663ull, 7106131970587748281ull}}, {{9799715317049269562ull, 12982599789133546553ull, 9788716344410783733ull, 8882664963234685351ull}}, {{17654037119224263236ull, 10419967877422160547ull, 13035476742897821689ull, 5551665602021678344ull}}, {{17455860380602941141ull, 17636645865205088588ull, 16294345928622277111ull, 6939582002527097930ull}}, {{3373081402044124810ull, 17434121313078972832ull, 11144560373923070581ull, 8674477503158872413ull}}, {{2108175876277578007ull, 13202168829888051972ull, 9271193242915613065ull, 5421548439474295258ull}}, {{2635219845346972508ull, 2667652982077901253ull, 2365619516789740524ull, 6776935549342869073ull}}, {{7905710825111103539ull, 3334566227597376566ull, 7568710414414563559ull, 8471169436678586341ull}}, {{329383247267051808ull, 9001632919889442210ull, 7036287018222796176ull, 5294480897924116463ull}}, {{9635101095938590568ull, 11252041149861802762ull, 4183672754351107316ull, 6618101122405145579ull}}, {{2820504333068462402ull, 14065051437327253453ull, 617904924511496241ull, 8272626403006431974ull}}, {{4068658217381482953ull, 1873128120688451552ull, 14221248633101848863ull, 5170391501879019983ull}}, {{5085822771726853692ull, 16176468206142728152ull, 13164874772949923174ull, 6462989377348774979ull}}, {{6357278464658567114ull, 10997213220823634382ull, 11844407447760016064ull, 8078736721685968724ull}}, {{17808357095693768159ull, 6873258263014771488ull, 16626126691704785848ull, 5049210451053730452ull}}, {{3813702295907658582ull, 8591572828768464361ull, 2335914290921430694ull, 6311513063817163066ull}}, {{9378813888311961132ull, 1516093999105804643ull, 12143264900506564176ull, 7889391329771453832ull}}, {{3555915670981281755ull, 947558749441127902ull, 7589540562816602610ull, 4930869581107158645ull}}, {{13668266625581378002ull, 10407820473656185685ull, 14098611721948141166ull, 6163586976383948306ull}}, {{3250275226694558791ull, 3786403555215456299ull, 8399892615580400650ull, 7704483720479935383ull}}, {{18172323081179956908ull, 6978188240437048090ull, 12167461912378832262ull, 4815302325299959614ull}}, {{13492031814620170327ull, 17946107337401085921ull, 5985955353618764519ull, 6019127906624949518ull}}, {{3029981712993049197ull, 17820948153323969498ull, 16705816228878231457ull, 7523909883281186897ull}}, {{6505424589048043652ull, 4220563568186399080ull, 3523606115407812805ull, 4702443677050741811ull}}, {{8131780736310054565ull, 9887390478660386754ull, 18239565699541929718ull, 5878054596313427263ull}}, {{941353883532792398ull, 3135866061470707635ull, 18187771106000024244ull, 7347568245391784079ull}}, {{15011750409698154210ull, 3919832576838384543ull, 18123027864072642401ull, 9184460306739730099ull}}, {{16299873033702428237ull, 13979110406592460099ull, 9021049405831707548ull, 5740287691712331312ull}}, {{15763155273700647393ull, 17473888008240575124ull, 11276311757289634435ull, 7175359614640414140ull}}, {{1257200018416257625ull, 17230673991873331002ull, 14095389696612043044ull, 8969199518300517675ull}}, {{5397436029937548920ull, 1545799208066056068ull, 6503775551168832951ull, 5605749698937823547ull}}, {{6746795037421936149ull, 15767307065364733797ull, 3518033420533653284ull, 7007187123672279434ull}}, {{13045179815204808091ull, 1262389757996365630ull, 13620913812521842414ull, 8758983904590349292ull}}, {{3541551366075617153ull, 14624051654029892231ull, 17736443169680927316ull, 5474364940368968307ull}}, {{18261997262876685153ull, 18280064567537365288ull, 17558867943673771241ull, 6842956175461210384ull}}, {{4380752504886304825ull, 9015022654139542899ull, 3501840855882662436ull, 8553695219326512981ull}}, {{432127306340246564ull, 14857761195691990120ull, 4494493544140357974ull, 5346059512079070613ull}}, {{540159132925308205ull, 9348829457760211842ull, 10229802948602835372ull, 6682574390098838266ull}}, {{9898570953011411064ull, 11686036822200264802ull, 3563881648898768407ull, 8353217987623547833ull}}, {{10798292864059519819ull, 14221302041516247357ull, 13756641076630200014ull, 5220761242264717395ull}}, {{18109552098501787678ull, 8553255515040533388ull, 12584115327360362114ull, 6525951552830896744ull}}, {{4190196049417682981ull, 1468197356945890928ull, 15730144159200452643ull, 8157439441038620930ull}}, {{2618872530886051863ull, 17058524412587039494ull, 14443026117927670805ull, 5098399650649138081ull}}, {{12496962700462340637ull, 7488097460451635655ull, 4218724592127424795ull, 6372999563311422602ull}}, {{11009517357150537892ull, 4748435807137156665ull, 14496777777014056802ull, 7966249454139278252ull}}, {{18410163394287555943ull, 7579458397888110819ull, 18283858147488561309ull, 4978905908837048907ull}}, {{18401018224432057024ull, 14086009015787526428ull, 18243136665933313732ull, 6223632386046311134ull}}, {{4554528706830519664ull, 17607511269734408036ull, 13580548795561866357ull, 7779540482557888918ull}}, {{12069952478623850598ull, 13310537552797698974ull, 3876156978798778569ull, 4862212801598680574ull}}, {{5864068561425037440ull, 2803113885714960006ull, 14068568260353249020ull, 6077766001998350717ull}}, {{16553457738636072608ull, 3503892357143700007ull, 3750652270159397563ull, 7597207502497938397ull}}, {{17263440114288627236ull, 18330833787710670168ull, 4650000678063317428ull, 4748254689061211498ull}}, {{3132556069151232429ull, 4466798160928786095ull, 15035872884433922594ull, 5935318361326514372ull}}, {{17750753141721204248ull, 14806869738015758426ull, 348097031832851626ull, 7419147951658142966ull}}, {{15705906732003140559ull, 13865979604687236920ull, 14052618700177695978ull, 4636967469786339353ull}}, {{1185639341294374083ull, 8109102469004270343ull, 3730715319939956261ull, 5796209337232924192ull}}, {{15317107231900131315ull, 14748064104682725832ull, 4663394149924945326ull, 7245261671541155240ull}}, {{699639966165612528ull, 9211708093998631483ull, 5829242687406181658ull, 9056577089426444050ull}}, {{16578176043349365494ull, 10369003577176532580ull, 8254962698056251440ull, 5660360680891527531ull}}, {{2275975980477155252ull, 12961254471470665726ull, 5707017354142926396ull, 7075450851114409414ull}}, {{12068342012451219872ull, 16201568089338332157ull, 16357143729533433803ull, 8844313563893011767ull}}, {{9848556766995706372ull, 7820137046622763646ull, 17140743858599477983ull, 5527695977433132354ull}}, {{3087323921889857157ull, 5163485289851066654ull, 12202557786394571671ull, 6909619971791415443ull}}, {{13082526939217097255ull, 1842670593886445413ull, 10641511214565826685ull, 8637024964739269304ull}}, {{10482422346224379736ull, 3457512130392722335ull, 6650944509103641678ull, 5398140602962043315ull}}, {{8491341914353086766ull, 13545262199845678727ull, 3701994617952164193ull, 6747675753702554144ull}}, {{6002491374513970554ull, 3096519694524934697ull, 4627493272440205242ull, 8434594692128192680ull}}, {{15280772155139701356ull, 6547010827505472089ull, 2892183295275128276ull, 5271621682580120425ull}}, {{5265907138642462983ull, 8183763534381840112ull, 8226915137521298249ull, 6589527103225150531ull}}, {{6582383923303078729ull, 14841390436404688044ull, 5671957903474234907ull, 8236908879031438164ull}}, {{13337361988919200014ull, 6970026013539236075ull, 12768345726526172625ull, 5148068049394648852ull}}, {{12060016467721612113ull, 13324218535351432998ull, 15960432158157715781ull, 6435085061743311065ull}}, {{5851648547797239333ull, 2820215113907127536ull, 6115482142414981015ull, 8043856327179138832ull}}, {{3657280342373274583ull, 8680163473833036566ull, 3822176339009363134ull, 5027410204486961770ull}}, {{13794972464821369037ull, 1626832305436519899ull, 14001092460616479726ull, 6284262755608702212ull}}, {{12632029562599323392ull, 11256912418650425682ull, 17501365575770599657ull, 7855328444510877765ull}}, {{12506704495051965024ull, 118041234015434195ull, 13244196494070318738ull, 4909580277819298603ull}}, {{11021694600387568376ull, 9370923579374068552ull, 11943559599160510518ull, 6136975347274123254ull}}, {{13777118250484460470ull, 2490282437362809882ull, 5706077462095862340ull, 7671219184092654068ull}}, {{13222384924980175698ull, 10779798560206531984ull, 12789670450664689770ull, 4794511990057908792ull}}, {{16527981156225219623ull, 4251376163403389172ull, 15987088063330862213ull, 5993139987572385990ull}}, {{2213232371571972912ull, 9925906222681624370ull, 10760488042308801958ull, 7491424984465482488ull}}, {{5994956250659870974ull, 1592005370748627327ull, 6725305026443001224ull, 4682140615290926555ull}}, {{2882009294897450814ull, 1990006713435784159ull, 3794945264626363626ull, 5852675769113658194ull}}, {{17437569673903977229ull, 11710880428649506006ull, 13967053617637730340ull, 7315844711392072742ull}}, {{12573590055525195728ull, 14638600535811882508ull, 8235444985192387117ull, 9144805889240090928ull}}, {{17081865821558023138ull, 11454968344096120519ull, 5147153115745241948ull, 5715503680775056830ull}}, {{16740646258520141019ull, 14318710430120150649ull, 15657313431536328243ull, 7144379600968821037ull}}, {{7090749767868012561ull, 13286702019222800408ull, 5736583734138246592ull, 8930474501211026297ull}}, {{4431718604917507851ull, 8304188762014250255ull, 15114579879904873880ull, 5581546563256891435ull}}, {{927962237719496910ull, 10380235952517812819ull, 14281538831453704446ull, 6976933204071114294ull}}, {{14995010852431534849ull, 3751922903792490215ull, 8628551502462354750ull, 8721166505088892868ull}}, {{16289410810410791137ull, 16180009870152470096ull, 14616216725893747526ull, 5450729065680558042ull}}, {{1915019439303937305ull, 11001640300835811813ull, 9046898870512408600ull, 6813411332100697553ull}}, {{7005460317557309535ull, 13752050376044764766ull, 15920309606567898654ull, 8516764165125871941ull}}, {{18213470753755482171ull, 3983345466600590074ull, 12256036513318630611ull, 5322977603203669963ull}}, {{13543466405339576906ull, 367495814823349689ull, 10708359623220900360ull, 6653722004004587454ull}}, {{3094274951392307421ull, 459369768529187112ull, 4162077492171349642ull, 8317152505005734318ull}}, {{1933921844620192138ull, 4898792123758129849ull, 16436356487889257238ull, 5198220315628583948ull}}, {{7029088324202628076ull, 15346862191552438119ull, 2098701536152019931ull, 6497775394535729936ull}}, {{4174674386825897191ull, 14571891721013159745ull, 2623376920190024914ull, 8122219243169662420ull}}, {{14138386537834655505ull, 13719118344060612744ull, 10862982611973541379ull, 5076387026981039012ull}}, {{17672983172293319381ull, 12537211911648378026ull, 13578728264966926724ull, 6345483783726298765ull}}, {{12867856928511873418ull, 15671514889560472533ull, 3138352275926494693ull, 7931854729657873457ull}}, {{10348253589533614838ull, 12100539815188989285ull, 13490685218522528943ull, 4957409206036170910ull}}, {{17547003005344406452ull, 10513988750558848702ull, 7639984486298385371ull, 6196761507545213638ull}}, {{12710381719825732257ull, 8530799919771172974ull, 326608571018205906ull, 7745951884431517048ull}}, {{3332302556463694757ull, 9943435968284371013ull, 204130356886378691ull, 4841219927769698155ull}}, {{8777064214007006350ull, 7817608941928075862ull, 14090221001390137076ull, 6051524909712122693ull}}, {{1747958230653982129ull, 9772011177410094828ull, 3777718196455507633ull, 7564406137140153367ull}}, {{10315845931013514639ull, 17636722031949779027ull, 9278602900425774126ull, 4727753835712595854ull}}, {{8283121395339505394ull, 12822530503082447976ull, 2374881588677441850ull, 5909692294640744818ull}}, {{10353901744174381743ull, 6804791091998284162ull, 12191974022701578121ull, 7387115368300931022ull}}, {{11082874608536376494ull, 15782209478567397361ull, 3008297745761098421ull, 4616947105188081889ull}}, {{18535205388306905ull, 5892703792927082990ull, 8372058200628760931ull, 5771183881485102361ull}}, {{9246541043590159439ull, 2754193722731465833ull, 15076758769213339068ull, 7213979851856377951ull}}, {{16169862322915087202ull, 3442742153414332291ull, 14234262443089285931ull, 9017474814820472439ull}}, {{7800320942608235550ull, 18292614910379815346ull, 15813943054571885562ull, 5635921759262795274ull}}, {{527029141405518629ull, 13642396601119993375ull, 10544056781360081145ull, 7044902199078494093ull}}, {{14493844482039061998ull, 3217937696117828006ull, 17791756995127489336ull, 8806127748848117616ull}}, {{4446966782847025845ull, 2011211060073642504ull, 11119848121954680835ull, 5503829843030073510ull}}, {{5558708478558782306ull, 16349071880374216842ull, 4676438115588575235ull, 6879787303787591888ull}}, {{16171757635053253691ull, 15824653832040383148ull, 5845547644485719044ull, 8599734129734489860ull}}, {{883976485053507749ull, 667036608170463660ull, 12876839314658350211ull, 5374833831084056162ull}}, {{1104970606316884686ull, 14668853815495243287ull, 6872677106468161955ull, 6718542288855070203ull}}, {{15216271313178269569ull, 13724381250941666204ull, 3979160364657814540ull, 8398177861068837754ull}}, {{286797533881642673ull, 17801110318693317186ull, 7098661246338521991ull, 5248861163168023596ull}}, {{9581868954206829149ull, 17639701879939258578ull, 8873326557923152489ull, 6561076453960029495ull}}, {{2753964155903760628ull, 8214569294641909511ull, 6479972178976552708ull, 8201345567450036869ull}}, {{8638756625080932249ull, 14357477846005969252ull, 6355825621074039394ull, 5125840979656273043ull}}, {{10798445781351165311ull, 8723475270652685757ull, 3333096007915161339ull, 6407301224570341304ull}}, {{18109743245116344542ull, 6292658069888469292ull, 4166370009893951674ull, 8009126530712926630ull}}, {{2095217491342939531ull, 8544597312107681212ull, 16439039311465883508ull, 5005704081695579143ull}}, {{2619021864178674414ull, 10680746640134601515ull, 15937113120904966481ull, 6257130102119473929ull}}, {{17108835385505506729ull, 17962619318595639797ull, 6086333345849044389ull, 7821412627649342412ull}}, {{12998865125154635658ull, 13532480083335968825ull, 13027330378010428551ull, 4888382892280839007ull}}, {{2413523351161130860ull, 12303914085742573128ull, 11672476954085647785ull, 6110478615351048759ull}}, {{3016904188951413575ull, 1544834551896052698ull, 9978910174179671828ull, 7638098269188810949ull}}, {{6497251136522021389ull, 10188893631789808744ull, 8542661868075988844ull, 4773811418243006843ull}}, {{8121563920652526736ull, 12736117039737260930ull, 6066641316667598151ull, 5967264272803758554ull}}, {{928582863960882612ull, 11308460281244188259ull, 16806673682689273497ull, 7459080341004698192ull}}, {{16721265354471409296ull, 150258648136535805ull, 10504171051680795936ull, 4661925213127936370ull}}, {{7066523637807097908ull, 187823310170669757ull, 3906841777746219112ull, 5827406516409920463ull}}, {{13444840565686260289ull, 234779137713337196ull, 271866203755385986ull, 7284258145512400579ull}}, {{16806050707107825362ull, 9516845958996447303ull, 14174890809976396194ull, 9105322681890500723ull}}, {{17421310719583472707ull, 10559714742800167468ull, 6553463747021553669ull, 5690826676181562952ull}}, {{3329894325769789268ull, 17811329446927597240ull, 8191829683776942086ull, 7113533345226953690ull}}, {{4162367907212236585ull, 13040789771804720742ull, 1016415067866401800ull, 8891916681533692113ull}}, {{16436537997289811578ull, 8150493607377950463ull, 12164474463484970885ull, 5557447925958557570ull}}, {{15933986478184876568ull, 14799803027649825983ull, 5982221042501437798ull, 6946809907448196963ull}}, {{15305797079303707806ull, 9276381747707506671ull, 2866090284699409344ull, 8683512384310246204ull}}, {{16483652202205899235ull, 5797738592317191669ull, 11014678464791906648ull, 5427195240193903877ull}}, {{6769507197475210331ull, 7247173240396489587ull, 18380034099417271214ull, 6783994050242379846ull}}, {{3850197978416625010ull, 18282338587350387792ull, 13751670587416813209ull, 8479992562802974808ull}}, {{2406373736510390632ull, 4508932589452910514ull, 8594794117135508256ull, 5299995351751859255ull}}, {{12231339207492764097ull, 5636165736816138142ull, 6131806627991997416ull, 6624994189689824069ull}}, {{6065801972511179314ull, 7045207171020172678ull, 12276444303417384674ull, 8281242737112280086ull}}, {{17626184288101650783ull, 9014940500314995827ull, 3061091671208477517ull, 5175776710695175054ull}}, {{17421044341699675575ull, 15880361643821132688ull, 13049736625865372704ull, 6469720888368968817ull}}, {{3329561353415042852ull, 1403707981066864245ull, 2477112727049552169ull, 8087151110461211022ull}}, {{4386818855098095735ull, 12406532534235259913ull, 15383253509688133817ull, 5054469444038256888ull}}, {{10095209587300007573ull, 1673107612511911179ull, 782322813400615656ull, 6318086805047821111ull}}, {{8007325965697621562ull, 2091384515639888974ull, 14812961572032933282ull, 7897608506309776388ull}}, {{392892710133625572ull, 5918801340702318513ull, 34728945665807493ull, 4936005316443610243ull}}, {{5102801906094419869ull, 12010187694305286045ull, 13878469237364423078ull, 6170006645554512803ull}}, {{10990188401045412740ull, 5789362581026831748ull, 12736400528278140944ull, 7712508306943141004ull}}, {{16092239787508158771ull, 3618351613141769842ull, 17183622367028613898ull, 4820317691839463127ull}}, {{10891927697530422655ull, 13746311553281988111ull, 16867841940358379468ull, 6025397114799328909ull}}, {{9003223603485640415ull, 17182889441602485139ull, 7249744370165810623ull, 7531746393499161137ull}}, {{3321171742964831308ull, 17656834928642635068ull, 16060305277422101399ull, 4707341495936975710ull}}, {{4151464678706039134ull, 17459357642375905931ull, 10852009559922850941ull, 5884176869921219638ull}}, {{577644829955161014ull, 7989138997687718702ull, 4341639913048787869ull, 7355221087401524548ull}}, {{9945428074298727075ull, 14598109765537036281ull, 5427049891310984836ull, 9194026359251905685ull}}, {{17745107592505174182ull, 18347190640315423483ull, 5697749191283059474ull, 5746266474532441053ull}}, {{17569698472204079824ull, 13710616263539503546ull, 11733872507531212247ull, 7182833093165551316ull}}, {{12738751053400323971ull, 12526584310996991529ull, 14667340634414015309ull, 8978541366456939145ull}}, {{1044190380734120626ull, 10134958203586813658ull, 2249558868867677712ull, 5611588354035586966ull}}, {{10528610012772426591ull, 12668697754483517072ull, 12035320622939372948ull, 7014485442544483707ull}}, {{13160762515965533238ull, 15835872193104396340ull, 10432464760246828281ull, 8768106803180604634ull}}, {{17448848609333234082ull, 2979891093049165856ull, 11131976493581655580ull, 5480066751987877896ull}}, {{3364316687956990987ull, 3724863866311457321ull, 13914970616977069475ull, 6850083439984847370ull}}, {{8817081878373626637ull, 44393814461933747ull, 8170341234366561036ull, 8562604299981059213ull}}, {{3204833164769822696ull, 9251118170893484400ull, 7412306280692794599ull, 5351627687488162008ull}}, {{4006041455962278370ull, 6952211695189467596ull, 9265382850865993249ull, 6689534609360202510ull}}, {{5007551819952847963ull, 13301950637414222399ull, 2358356526727715753ull, 8361918261700253138ull}}, {{10047248915111611833ull, 1396190120742807143ull, 6085658847632210250ull, 5226198913562658211ull}}, {{7947375125462126887ull, 10968609687783284737ull, 2995387541112874908ull, 6532748641953322764ull}}, {{14545904925255046513ull, 13710762109729105921ull, 3744234426391093635ull, 8165935802441653455ull}}, {{2173661550643322215ull, 6263383309366997249ull, 9257675544135515378ull, 5103709876526033409ull}}, {{7328762956731540672ull, 17052601173563522369ull, 16183780448596782126ull, 6379637345657541761ull}}, {{13772639714341813744ull, 12092379430099627153ull, 6394667505463813946ull, 7974546682071927202ull}}, {{1690370793822551734ull, 12169423162239654875ull, 8608353209342271620ull, 4984091676294954501ull}}, {{15948021547560353380ull, 15211778952799568593ull, 15372127530105227429ull, 6230114595368693126ull}}, {{6099968879168278012ull, 5179665635717297030ull, 9991787375776758479ull, 7787643244210866408ull}}, {{17647538604762337470ull, 10154820049964392499ull, 6244867109860474049ull, 4867277027631791505ull}}, {{17447737237525533933ull, 17305211080882878528ull, 12417769905752980465ull, 6084096284539739381ull}}, {{3362927473197365801ull, 7796455795821434449ull, 1687154326909061870ull, 7605120355674674227ull}}, {{13631044716816823386ull, 261098853961008626ull, 17195372518814021333ull, 4753200222296671391ull}}, {{7815433859166253424ull, 4938059585878648687ull, 16882529630090138762ull, 5941500277870839239ull}}, {{5157606305530428876ull, 15395946519203086667ull, 16491476019185285548ull, 7426875347338549049ull}}, {{917660931742824095ull, 399094537647153359ull, 3389643484349721612ull, 4641797092086593156ull}}, {{14982134219960693831ull, 498868172058941698ull, 4237054355437152015ull, 5802246365108241445ull}}, {{9504295738096091481ull, 14458643270355840835ull, 9908003962723827922ull, 7252807956385301806ull}}, {{7268683654192726447ull, 8849932051090025236ull, 3161632916550009095ull, 9066009945481627258ull}}, {{13766299320725229838ull, 12448736559572347628ull, 6587706591271143588ull, 5666256215926017036ull}}, {{17207874150906537297ull, 15560920699465434535ull, 8234633239088929485ull, 7082820269907521295ull}}, {{16898156670205783717ull, 5616092819049629457ull, 5681605530433773953ull, 8853525337384401619ull}}, {{3643818891237532967ull, 15039273057974488171ull, 1245160447307414768ull, 5533453335865251012ull}}, {{18389831669329079921ull, 352347248758558597ull, 1556450559134268461ull, 6916816669831563765ull}}, {{9152231531379186189ull, 5052120079375586151ull, 6557249217345223480ull, 8646020837289454706ull}}, {{12637673734753073224ull, 3157575049609741344ull, 8709966779268152579ull, 5403763023305909191ull}}, {{15797092168441341530ull, 17782026867294340392ull, 6275772455657802819ull, 6754703779132386489ull}}, {{1299621136842125297ull, 17615847565690537587ull, 12456401587999641428ull, 8443379723915483111ull}}, {{16953164275022185975ull, 1786532691701810183ull, 14702780020140857749ull, 5277112327447176944ull}}, {{16579769325350344564ull, 6844851883054650633ull, 18378475025176072186ull, 6596390409308971180ull}}, {{6889653601405766993ull, 17779436890673089100ull, 4526349707760538616ull, 8245488011636213976ull}}, {{13529405537733380179ull, 11112148056670680687ull, 2828968567350336635ull, 5153430007272633735ull}}, {{12300070903739337319ull, 9278499052410962955ull, 17371268764470084506ull, 6441787509090792168ull}}, {{10763402611246783745ull, 2374751778658927886ull, 3267341881878054017ull, 8052234386363490211ull}}, {{2115440613601851937ull, 13013434907730299689ull, 18182989740669641424ull, 5032646491477181381ull}}, {{7255986785429702825ull, 16266793634662874611ull, 8893679120554888068ull, 6290808114346476727ull}}, {{4458297463359740627ull, 1886747969619041648ull, 6505412882266222182ull, 7863510142933095909ull}}, {{2786435914599837892ull, 15014275536294064742ull, 6371726060630082815ull, 4914693839333184943ull}}, {{12706416930104573173ull, 14156158401940193023ull, 3352971557360215615ull, 6143367299166481179ull}}, {{11271335144203328562ull, 13083511983997853375ull, 18026272501982433231ull, 7679209123958101473ull}}, {{13962113492768162208ull, 15094724017639740215ull, 4348891286097938913ull, 4799505702473813421ull}}, {{12840955847532814855ull, 5033346966767511557ull, 10047800126049811546ull, 5999382128092266776ull}}, {{2216136754133854857ull, 15515055745314165255ull, 12559750157562264432ull, 7499227660115333470ull}}, {{8302614498974741142ull, 9696909840821353284ull, 3238157830049027366ull, 4687017287572083419ull}}, {{10378268123718426427ull, 2897765264171915797ull, 17882755342843447920ull, 5858771609465104273ull}}, {{17584521173075420938ull, 3622206580214894746ull, 8518386123272146188ull, 7323464511831380342ull}}, {{12757279429489500364ull, 4527758225268618433ull, 1424610617235406927ull, 9154330639789225428ull}}, {{1055770615789855872ull, 9747377918433968377ull, 10113753672626905137ull, 5721456649868265892ull}}, {{5931399288164707744ull, 16795908416469848375ull, 12642192090783631421ull, 7151820812335332365ull}}, {{2802563091778496775ull, 7159827465305146757ull, 1967682058197375565ull, 8939776015419165457ull}}, {{4057444941575254437ull, 6780735175029410675ull, 12759016332441829488ull, 5587360009636978410ull}}, {{460120158541680142ull, 8475918968786763344ull, 6725398378697511052ull, 6984200012046223013ull}}, {{575150198177100177ull, 10594898710983454180ull, 13018433991799276719ull, 8730250015057778766ull}}, {{9582840910715463419ull, 13539340722005740718ull, 3524835226447160045ull, 5456406259411111729ull}}, {{2755179101539553466ull, 3089117847225012186ull, 9017730051486337961ull, 6820507824263889661ull}}, {{12667345913779217640ull, 8473083327458653136ull, 15883848582785310355ull, 8525634780329862076ull}}, {{7917091196112011025ull, 2989834070447964258ull, 704033327386043164ull, 5328521737706163798ull}}, {{672991958285237973ull, 3737292588059955323ull, 10103413696087329763ull, 6660652172132704747ull}}, {{14676298003138711178ull, 59929716647556249ull, 8017581101681774300ull, 8325815215165880934ull}}, {{2255157224320612631ull, 9260828109759498464ull, 399302170123721033ull, 5203634509478675584ull}}, {{2818946530400765788ull, 16187721155626760984ull, 499127712654651291ull, 6504543136848344480ull}}, {{3523683163000957235ull, 15622965426106063326ull, 623909640818314114ull, 8130678921060430600ull}}, {{16037360032157761984ull, 14376039409743677482ull, 389943525511446321ull, 5081674325662769125ull}}, {{10823328003342426672ull, 4134991206897433141ull, 5099115425316695806ull, 6352092907078461406ull}}, {{18140846022605421244ull, 14392111045476567234ull, 15597266318500645565ull, 7940116133848076757ull}}, {{15949714782555776182ull, 11300912412636548473ull, 12054134458276597430ull, 4962572583655047973ull}}, {{6102085422912556515ull, 4902768478940909784ull, 1232610017563583076ull, 6203215729568809967ull}}, {{7627606778640695644ull, 6128460598676137230ull, 15375820577236642557ull, 7754019661961012458ull}}, {{155568218223046873ull, 6136130883386279721ull, 14221573879200289502ull, 4846262288725632786ull}}, {{4806146291206196496ull, 16893535641087625459ull, 8553595312145586069ull, 6057827860907040983ull}}, {{1395996845580357715ull, 7281861496077368112ull, 6080308121754594683ull, 7572284826133801229ull}}, {{872498028487723572ull, 2245320425834661118ull, 6106035585310315629ull, 4732678016333625768ull}}, {{10313994572464430273ull, 7418336550720714301ull, 7632544481637894536ull, 5915847520417032210ull}}, {{17504179234007925746ull, 9272920688400892876ull, 317308565192592362ull, 7394809400521290263ull}}, {{1716739984400177783ull, 10407261448677945952ull, 7115846880886452082ull, 4621755875325806414ull}}, {{2145924980500222229ull, 3785704773992656632ull, 18118180637962840911ull, 5777194844157258017ull}}, {{2682406225625277786ull, 120444949063432886ull, 8812667742171387427ull, 7221493555196572522ull}}, {{12576379818886373040ull, 13985614241611454819ull, 1792462640859458475ull, 9026866943995715653ull}}, {{5554394377590289198ull, 6435165891793465310ull, 3426132159750855499ull, 5641791839997322283ull}}, {{16166365008842637306ull, 3432271346314443733ull, 18117723254970733086ull, 7052239799996652853ull}}, {{6372898205771132920ull, 13513711219747830475ull, 8812096013431252645ull, 8815299749995816067ull}}, {{1677218369393264123ull, 10751912521556087999ull, 3201716999180838951ull, 5509562343747385042ull}}, {{15931581017023743866ull, 8828204633517722094ull, 13225518285830824497ull, 6886952929684231302ull}}, {{10691104234424904024ull, 15646941810324540522ull, 7308525820433754813ull, 8608691162105289128ull}}, {{11293626164942952919ull, 12085181640666531778ull, 4567828637771096758ull, 5380431976315805705ull}}, {{4893660669323915341ull, 5883105013978388915ull, 10321471815641258852ull, 6725539970394757131ull}}, {{1505389818227506272ull, 7353881267472986144ull, 8290153751124185661ull, 8406924962993446414ull}}, {{940868636392191420ull, 6902018801384310292ull, 569660076025228134ull, 5254328101870904009ull}}, {{1176085795490239275ull, 17850895538585163673ull, 5323761113458923071ull, 6567910127338630011ull}}, {{6081793262790186998ull, 17701933404804066687ull, 2043015373396265935ull, 8209887659173287514ull}}, {{10718649816884948730ull, 17981237405643623535ull, 5888570626800054113ull, 5131179786983304696ull}}, {{8786626252678798008ull, 8641488701772365707ull, 7360713283500067642ull, 6413974733729130870ull}}, {{6371596797421109606ull, 1578488840360681326ull, 18424263641229860361ull, 8017468417161413587ull}}, {{17817306053670357216ull, 12515770571293895588ull, 9209321766554968773ull, 5010917760725883492ull}}, {{3824888493378394904ull, 1809655158835205774ull, 11511652208193710967ull, 6263647200907354365ull}}, {{14004482653577769438ull, 16097127003826170929ull, 554507204959974996ull, 7829559001134192957ull}}, {{1835272630845024043ull, 837332340536581023ull, 2652410012313678325ull, 4893474375708870598ull}}, {{16129148843838443765ull, 5658351444098114182ull, 12538884552246873714ull, 6116842969636088247ull}}, {{10938064017943278899ull, 16296311341977418536ull, 11061919671881204238ull, 7646053712045110309ull}}, {{6836290011214549312ull, 5573508570308498681ull, 9219542804139446601ull, 4778783570028193943ull}}, {{13157048532445574544ull, 11578571731313011255ull, 6912742486746920347ull, 5973479462535242429ull}}, {{11834624647129580276ull, 9861528645713876165ull, 13252614126861038338ull, 7466849328169053036ull}}, {{9702483413669681624ull, 10775141421998560507ull, 17506255866142924769ull, 4666780830105658147ull}}, {{7516418248659714126ull, 18080612795925588538ull, 17271133814251268057ull, 5833476037632072684ull}}, {{172150773969866850ull, 8765707939624821961ull, 3142173194104533456ull, 7291845047040090856ull}}, {{4826874485889721466ull, 10957134924531027451ull, 3927716492630666820ull, 9114806308800113570ull}}, {{710953544467381965ull, 16071581364686667965ull, 7066508826321554666ull, 5696753943000070981ull}}, {{5500377949011615360ull, 10866104669003559148ull, 13444822051329331237ull, 7120942428750088726ull}}, {{6875472436264519199ull, 18194316854681836839ull, 7582655527306888238ull, 8901178035937610908ull}}, {{11214699300306406356ull, 6759762015748760120ull, 13962531741421580957ull, 5563236272461006817ull}}, {{14018374125383007945ull, 13061388538113338054ull, 3618106621494812484ull, 6954045340576258522ull}}, {{8299595619873984123ull, 16326735672641672568ull, 13746005313723291413ull, 8692556675720323152ull}}, {{5187247262421240077ull, 12510052804614739307ull, 8591253321077057133ull, 5432847922325201970ull}}, {{1872373059599162192ull, 1802507950486260422ull, 1515694614491545609ull, 6791059902906502463ull}}, {{11563838361353728548ull, 6864820956535213431ull, 15729676323396595723ull, 8488824878633128078ull}}, {{14144928003487162198ull, 1984670088620814442ull, 5219361683695484423ull, 5305515549145705049ull}}, {{8457787967504176940ull, 16315895666058181765ull, 11135888123046743432ull, 6631894436432131311ull}}, {{15183920977807609079ull, 1948125508863175590ull, 9308174135381041387ull, 8289868045540164139ull}}, {{4878264592702367770ull, 17358479507535342408ull, 3511765825399456914ull, 5181167528462602587ull}}, {{6097830740877959713ull, 12474727347564402202ull, 18224765337031484855ull, 6476459410578253233ull}}, {{16845660462952225449ull, 10981723166028114848ull, 8945898616007192357ull, 8095574263222816542ull}}, {{10528537789345140906ull, 9169419987981265732ull, 979500616577107319ull, 5059733914514260339ull}}, {{13160672236681426132ull, 6850088966549194261ull, 15059433826003547861ull, 6324667393142825423ull}}, {{2615782240569618953ull, 13174297226613880731ull, 14212606264077046922ull, 7905834241428531779ull}}, {{17775764964851869510ull, 12845621785061063360ull, 6577035905834460374ull, 4941146400892832362ull}}, {{3772962132355285271ull, 6833655194471553393ull, 17444666919147851276ull, 6176433001116040452ull}}, {{9327888683871494493ull, 8542068993089441741ull, 3359089575225262479ull, 7720541251395050566ull}}, {{8135773436633378010ull, 12256322148321982944ull, 15934489039797952761ull, 4825338282121906603ull}}, {{10169716795791722513ull, 1485344630120314968ull, 15306425281320053048ull, 6031672852652383254ull}}, {{12712145994739653141ull, 1856680787650393710ull, 9909659564795290502ull, 7539591065815479068ull}}, {{3333405228284895309ull, 14995483547563659781ull, 15416909264851832371ull, 4712244416134674417ull}}, {{8778442553783507040ull, 14132668416027186822ull, 5436078525782626752ull, 5890305520168343022ull}}, {{1749681155374607992ull, 17665835520033983528ull, 16018470194083059248ull, 7362881900210428777ull}}, {{2187101444218259990ull, 3635550326332927794ull, 6188029687321660349ull, 9203602375263035972ull}}, {{5978624421063800398ull, 4578061963171773823ull, 13090890591430813526ull, 5752251484539397482ull}}, {{2861594507902362593ull, 14945949490819493087ull, 7140241202433741099ull, 7190314355674246853ull}}, {{17412051190160116954ull, 14070750845096978454ull, 13536987521469564278ull, 8987892944592808566ull}}, {{6270845975422685192ull, 4182533259758223630ull, 3848931182491089770ull, 5617433090370505354ull}}, {{17061929506133132298ull, 14451538611552555345ull, 14034536014968638020ull, 7021791362963131692ull}}, {{7492353827384251661ull, 18064423264440694182ull, 17543170018710797525ull, 8777239203703914615ull}}, {{71035123687769384ull, 13596107549489127816ull, 17882010289335330309ull, 5485774502314946634ull}}, {{88793904609711730ull, 3160076381579246058ull, 13129140824814387079ull, 6857218127893683293ull}}, {{9334364417616915470ull, 17785153532256221284ull, 2576367975735820136ull, 8571522659867104117ull}}, {{15057349797865347977ull, 11115720957660138302ull, 3916072994048581537ull, 5357201662416940073ull}}, {{9598315210476909163ull, 59593141793009166ull, 9506777260988114826ull, 6696502078021175091ull}}, {{2774521976241360646ull, 9297863464096037266ull, 7271785557807755628ull, 8370627597526468864ull}}, {{6345762253578238308ull, 15034536701914799099ull, 4544865973629847267ull, 5231642248454043040ull}}, {{3320516798545409981ull, 14181484858966110970ull, 5681082467037309084ull, 6539552810567553800ull}}, {{13374018035036538284ull, 17726856073707638712ull, 7101353083796636355ull, 8174441013209442250ull}}, {{8358761271897836428ull, 8773442036853580243ull, 9050031695800285626ull, 5109025633255901406ull}}, {{5836765571444907630ull, 1743430509212199496ull, 2089167582895581225ull, 6386282041569876758ull}}, {{7295956964306134538ull, 6790974154942637274ull, 11834831515474252339ull, 7982852551962345947ull}}, {{9171659121118721990ull, 1938515837625454344ull, 5090926687957713760ull, 4989282844976466217ull}}, {{11464573901398402488ull, 2423144797031817930ull, 10975344378374530104ull, 6236603556220582771ull}}, {{5107345339893227302ull, 3028930996289772413ull, 9107494454540774726ull, 7795754445275728464ull}}, {{5497933846646961016ull, 15728139927963271470ull, 5692184034087984203ull, 4872346528297330290ull}}, {{16095789345163477078ull, 15048488891526701433ull, 16338602079464756062ull, 6090433160371662862ull}}, {{6284678626172182635ull, 9587239077553600984ull, 11199880562476169270ull, 7613041450464578578ull}}, {{3927924141357614147ull, 1380338405043612711ull, 11611611369974993698ull, 4758150906540361611ull}}, {{298219158269629780ull, 10948795043159291697ull, 9902828194041354218ull, 5947688633175452014ull}}, {{4984459966264425128ull, 4462621767094338813ull, 3155163205696916965ull, 7434610791469315018ull}}, {{5421130488128959657ull, 5094981613647655710ull, 6583663021987961007ull, 4646631744668321886ull}}, {{15999785147015975380ull, 1757040998632181733ull, 17452950814339727067ull, 5808289680835402357ull}}, {{6164673378487805512ull, 16031359303572390879ull, 7981130462642495121ull, 7260362101044252947ull}}, {{3094155704682368986ull, 6204141074183324887ull, 5364727059875730998ull, 9075452626305316184ull}}, {{8851376343067562473ull, 17712646226646741766ull, 3352954412422331873ull, 5672157891440822615ull}}, {{1840848391979677283ull, 8305749728026263496ull, 18026251070810078554ull, 7090197364301028268ull}}, {{2301060489974596603ull, 1158815123178053562ull, 4086069764803046577ull, 8862746705376285336ull}}, {{6049848824661510781ull, 12253474498054753236ull, 2553793603001904110ull, 5539216690860178335ull}}, {{7562311030826888476ull, 6093471085713665737ull, 17027300059034543850ull, 6924020863575222918ull}}, {{14064574806960998499ull, 16840210893996857979ull, 12060753036938404004ull, 8655026079469028648ull}}, {{6484516245136930110ull, 1301759771893260429ull, 7537970648086502503ull, 5409391299668142905ull}}, {{12717331324848550542ull, 15462257770148739248ull, 14034149328535516032ull, 6761739124585178631ull}}, {{15896664156060688177ull, 881078138976372444ull, 12931000642242007137ull, 8452173905731473289ull}}, {{712043060683154303ull, 12079888882928702538ull, 1164346373760172604ull, 5282608691082170806ull}}, {{10113425862708718686ull, 15099861103660878172ull, 10678805004054991563ull, 6603260863852713507ull}}, {{12641782328385898358ull, 14263140361148709811ull, 8736820236641351550ull, 8254076079815891884ull}}, {{5595270946027492522ull, 4302776707290555728ull, 14683884684755620527ull, 5158797549884932427ull}}, {{6994088682534365652ull, 766784865685806756ull, 13743169837517137755ull, 6448496937356165534ull}}, {{8742610853167957065ull, 14793539137389422157ull, 7955590260041646385ull, 8060621171695206918ull}}, {{7769974792443667118ull, 2328432933227306992ull, 360557894098641087ull, 5037888232309504324ull}}, {{9712468490554583897ull, 16745599221816297452ull, 450697367623301358ull, 6297360290386880405ull}}, {{12140585613193229871ull, 11708626990415596007ull, 5175057727956514602ull, 7871700362983600506ull}}, {{14505395035886850526ull, 11929577887437135408ull, 7846097098400209530ull, 4919812726864750316ull}}, {{18131743794858563157ull, 5688600322441643452ull, 9807621373000261913ull, 6149765908580937895ull}}, {{4217935669863652330ull, 11722436421479442220ull, 7647840697822939487ull, 7687207385726172369ull}}, {{11859581830519558515ull, 14244051791065733243ull, 16309115482207806939ull, 4804504616078857730ull}}, {{10212791269722060239ull, 13193378720404778650ull, 11163022315904982866ull, 6005630770098572163ull}}, {{3542617050297799491ull, 7268351363651197505ull, 9342091876453840679ull, 7507038462623215204ull}}, {{13743350702504594442ull, 11460248629923080296ull, 15062179459638426232ull, 4691899039139509502ull}}, {{17179188378130743052ull, 14325310787403850370ull, 9604352287693256982ull, 5864873798924386878ull}}, {{12250613435808653007ull, 8683266447400037155ull, 2782068322761795420ull, 7331092248655483598ull}}, {{10701580776333428355ull, 10854083059250046444ull, 12700957440307020083ull, 9163865310819354497ull}}, {{15911860022063168530ull, 4477958902817585075ull, 1020569372550805696ull, 5727415819262096561ull}}, {{15278139009151572758ull, 5597448628521981344ull, 5887397734115895024ull, 7159269774077620701ull}}, {{650929687729914332ull, 6996810785652476681ull, 11970933186072256684ull, 8949087217597025876ull}}, {{11936046100899666218ull, 13596378777887573733ull, 16705205278149936235ull, 5593179510998141172ull}}, {{1084999570842419060ull, 12383787453932079263ull, 2434762523977868678ull, 6991474388747676466ull}}, {{15191307518835187537ull, 6256362280560323270ull, 12266825191827111656ull, 8739342985934595582ull}}, {{4882881180844604307ull, 3910226425350202044ull, 3055079726464556881ull, 5462089366209122239ull}}, {{6103601476055755383ull, 9499469050115140459ull, 17653907713362859813ull, 6827611707761402798ull}}, {{3017815826642306325ull, 16486022331071313478ull, 12844012604848798958ull, 8534514634701753498ull}}, {{15721192946933605165ull, 5692077938492183019ull, 12639193896457887253ull, 5334071646688595936ull}}, {{15039805165239618552ull, 11726783441542616678ull, 15798992370572359066ull, 6667589558360744920ull}}, {{9576384419694747382ull, 5435107265073495040ull, 1301996389505897217ull, 8334486947950931151ull}}, {{5985240262309217114ull, 14926157086739404160ull, 7731276771082267616ull, 5209054342469331969ull}}, {{7481550327886521393ull, 210952284714703584ull, 14275781982280222425ull, 6511317928086664961ull}}, {{9351937909858151741ull, 4875376374320767384ull, 4009669422568114319ull, 8139147410108331202ull}}, {{5844961193661344838ull, 9964639261591561471ull, 7117729407532459353ull, 5086967131317707001ull}}, {{2694515473649293144ull, 17067485095416839743ull, 13508847777842962095ull, 6358708914147133751ull}}, {{17203202397343780141ull, 16722670350843661774ull, 12274373703876314715ull, 7948386142683917189ull}}, {{6140315479912474684ull, 8145825960063594657ull, 9977326574136390649ull, 4967741339177448243ull}}, {{12287080368317981259ull, 14793968468506881225ull, 7859972199243100407ull, 6209676673971810304ull}}, {{1523792405115312862ull, 13880774567206213628ull, 9824965249053875509ull, 7762095842464762880ull}}, {{10175742290051846347ull, 10981327113717577469ull, 6140603280658672193ull, 4851309901540476800ull}}, {{17331363880992195838ull, 18338344910574359740ull, 7675754100823340241ull, 6064137376925596000ull}}, {{3217460777530693181ull, 9087873082935785964ull, 9594692626029175302ull, 7580171721156995000ull}}, {{11234285022811459046ull, 1068234658407478323ull, 5996682891268234564ull, 4737607325723121875ull}}, {{9431170260086935904ull, 1335293323009347904ull, 2884167595657905301ull, 5922009157153902344ull}}, {{11788962825108669880ull, 6280802672189072784ull, 3605209494572381626ull, 7402511446442377930ull}}, {{7368101765692918675ull, 8537187688545558394ull, 6864941952535126420ull, 4626569654026486206ull}}, {{18433499243970924152ull, 10671484610681947992ull, 17804549477523683833ull, 5783212067533107757ull}}, {{4595129981254103573ull, 17951041781779822895ull, 8420628791622441079ull, 7229015084416384697ull}}, {{1132226458140241563ull, 17827116208797390715ull, 15137472007955439253ull, 9036268855520480871ull}}, {{16848542600833508641ull, 13447790639712063148ull, 16378449032613231389ull, 5647668034700300544ull}}, {{2613934177332334185ull, 2974680244357915224ull, 2026317217056987621ull, 7059585043375375681ull}}, {{3267417721665417731ull, 8330036323874781934ull, 7144582539748622430ull, 8824481304219219601ull}}, {{15877194131323049794ull, 594586683994350804ull, 15994579133411358779ull, 5515300815137012250ull}}, {{1399748590444260626ull, 14578291410275102218ull, 10769851879909422665ull, 6894126018921265313ull}}, {{10973057774910101591ull, 4387806207561714060ull, 18074000868314166236ull, 8617657523651581641ull}}, {{16081533146173589302ull, 11965750916580847095ull, 4378721515055272041ull, 5386035952282238526ull}}, {{15490230414289598724ull, 1122130590443895157ull, 14696773930673865860ull, 6732544940352798157ull}}, {{5527729962579834693ull, 1402663238054868947ull, 4535909358060168613ull, 8415681175440997697ull}}, {{1148988217398702731ull, 3182507532997987044ull, 14364158394856075143ull, 5259800734650623560ull}}, {{1436235271748378414ull, 17813192471529647517ull, 17955197993570093928ull, 6574750918313279450ull}}, {{6406980108112860921ull, 3819746515702507780ull, 13220625455107841603ull, 8218438647891599313ull}}, {{13227734604425313884ull, 81498563100373410ull, 1345361881801319146ull, 5136524154932249571ull}}, {{7311296218676866547ull, 9325245240730242571ull, 15516760407533812644ull, 6420655193665311963ull}}, {{4527434254918695279ull, 11656556550912803214ull, 14784264490989877901ull, 8025818992081639954ull}}, {{16664704464606348262ull, 9591190853534195960ull, 13851851325296061592ull, 5016136870051024971ull}}, {{2384136507048383711ull, 11988988566917744951ull, 12703128138192689086ull, 6270171087563781214ull}}, {{16815228689092643351ull, 5762863671792405380ull, 6655538135886085550ull, 7837713859454726518ull}}, {{1286145893828126286ull, 17436847850152417075ull, 17994769390210967180ull, 4898571162159204073ull}}, {{15442740422567321570ull, 3349315738980969727ull, 8658403682481545264ull, 6123213952699005092ull}}, {{14691739509781764058ull, 4186644673726212159ull, 10823004603101931580ull, 7654017440873756365ull}}, {{16099866221254684393ull, 11840024957933658407ull, 9070220886152401189ull, 4783760900546097728ull}}, {{15513146758140967587ull, 964973142134909297ull, 11337776107690501487ull, 5979701125682622160ull}}, {{5556375392394045771ull, 15041274482950800334ull, 14172220134613126858ull, 7474626407103277700ull}}, {{17307792675528442319ull, 14012482570271638112ull, 18081009620987980094ull, 4671641504439548562ull}}, {{3187996770701001283ull, 8292231175984771833ull, 13377889989380199310ull, 5839551880549435703ull}}, {{8596681981803639507ull, 1141916933126188983ull, 12110676468297861234ull, 7299439850686794629ull}}, {{6134166458827161480ull, 10650768203262512037ull, 1303287530090162830ull, 9124299813358493287ull}}, {{6139697045980669877ull, 2045044108611682119ull, 7732083733947433625ull, 5702687383349058304ull}}, {{3062935289048449442ull, 7167991154191990553ull, 9665104667434292031ull, 7128359229186322880ull}}, {{8440355129737949707ull, 4348302924312600287ull, 12081380834292865039ull, 8910449036482903600ull}}, {{12192750983727300423ull, 9635218355336457035ull, 7550863021433040649ull, 5569030647801814750ull}}, {{10629252711231737625ull, 16655708962597959198ull, 215206739936525003ull, 6961288309752268438ull}}, {{4063193852184896223ull, 16207950184820061094ull, 9492380461775432062ull, 8701610387190335547ull}}, {{16374554212897723851ull, 5518282847085150279ull, 3626894779395951087ull, 5438506491993959717ull}}, {{15856506747694766910ull, 2286167540429049945ull, 9145304492672326763ull, 6798133114992449646ull}}, {{5985575379336294926ull, 16692767480818476144ull, 2208258578985632645ull, 8497666393740562058ull}}, {{3740984612085184329ull, 12738822684725241542ull, 5991847630293408307ull, 5311041496087851286ull}}, {{13899602801961256219ull, 11311842337479164023ull, 16713181574721536192ull, 6638801870109814107ull}}, {{12762817484024182369ull, 14139802921848955029ull, 16279790949974532336ull, 8298502337637267634ull}}, {{10282603936728807933ull, 8837376826155596893ull, 14786555362161470614ull, 5186563961023292271ull}}, {{17464940939338397820ull, 1823348995839720308ull, 13871508184274450364ull, 6483204951279115339ull}}, {{3384432100463445659ull, 2279186244799650386ull, 12727699211915675051ull, 8104006189098894174ull}}, {{6726956081217041441ull, 17565392467495639155ull, 3343125989019909002ull, 5065003868186808859ull}}, {{3797009083093913897ull, 12733368547514773136ull, 18013965541557049965ull, 6331254835233511073ull}}, {{4746261353867392371ull, 2081652629111302708ull, 8682398871664148745ull, 7914068544041888842ull}}, {{12189785383021896040ull, 12830247939263033952ull, 10038185313217480869ull, 4946292840026180526ull}}, {{15237231728777370050ull, 2202751868796628728ull, 3324359604667075279ull, 6182866050032725658ull}}, {{599795587262160947ull, 16588497891277949623ull, 13378821542688619906ull, 7728582562540907072ull}}, {{7292401269679932448ull, 14979497200476106418ull, 8361763464180387441ull, 4830364101588066920ull}}, {{18338873623954691368ull, 4889313445312969310ull, 10452204330225484302ull, 6037955126985083650ull}}, {{13700219993088588401ull, 15335013843495987446ull, 3841883375927079569ull, 7547443908731354563ull}}, {{3950951477252979847ull, 2666854624543910298ull, 95334100740730779ull, 4717152442957096602ull}}, {{14162061383421000617ull, 17168626335962051584ull, 9342539662780689281ull, 5896440553696370752ull}}, {{17702576729276250771ull, 7625724864670400768ull, 11678174578475861602ull, 7370550692120463440ull}}, {{3681476837885761847ull, 308784043983225153ull, 14597718223094827003ull, 9213188365150579300ull}}, {{13830138069747070915ull, 16333891091985373384ull, 18346945926289042684ull, 5758242728219112062ull}}, {{17287672587183838643ull, 1970619791272165114ull, 13710310371006527548ull, 7197803410273890078ull}}, {{12386218697125022496ull, 2463274739090206393ull, 7914515926903383627ull, 8997254262842362598ull}}, {{823857658062057204ull, 17680447776427236660ull, 334886435887226862ull, 5623283914276476624ull}}, {{1029822072577571505ull, 12877187683679270017ull, 418608044859033578ull, 7029104892845595780ull}}, {{5898963609149352285ull, 6873112567744311713ull, 523260056073791973ull, 8786381116056994725ull}}, {{15216067301786814939ull, 6601538364053888772ull, 2632880544259813935ull, 5491488197535621703ull}}, {{573340053523967057ull, 3640236936639973062ull, 17126158735606931131ull, 6864360246919527128ull}}, {{9940047103759734629ull, 18385354226082130039ull, 2960954345799112297ull, 8580450308649408911ull}}, {{13130058467490915999ull, 4573317363660249418ull, 8768125493765527042ull, 5362781442905880569ull}}, {{7189201047508869191ull, 14940018741430087581ull, 15571842885634296706ull, 6703476803632350711ull}}, {{13598187327813474393ull, 9451651389932833668ull, 14853117588615482979ull, 8379346004540438389ull}}, {{17722239116738197304ull, 3601439109494327090ull, 11589041502098370814ull, 5237091252837773993ull}}, {{12929426859067970822ull, 13725170923722684671ull, 651243822340799805ull, 6546364066047217492ull}}, {{11550097555407575623ull, 3321405599371192127ull, 814054777925999757ull, 8182955082559021865ull}}, {{14136339999770816620ull, 4381721508820689031ull, 12037999282272219608ull, 5114346926599388665ull}}, {{13058738981286132871ull, 5477151886025861289ull, 1212441047558110798ull, 6392933658249235832ull}}, {{2488365671325502377ull, 16069811894387102420ull, 1515551309447638497ull, 7991167072811544790ull}}, {{10778600581433214794ull, 3126103406350857156ull, 14782277623686937773ull, 4994479420507215493ull}}, {{13473250726791518492ull, 8519315276365959349ull, 4642788974326508504ull, 6243099275634019367ull}}, {{3006505353207234403ull, 10649144095457449187ull, 1191800199480747726ull, 7803874094542524209ull}}, {{18019966910250379166ull, 2044029041233517837ull, 12274090170743937089ull, 4877421309089077630ull}}, {{8689900582530810246ull, 7166722319969285201ull, 6119240676575145553ull, 6096776636361347038ull}}, {{15474061746590900711ull, 13570088918388994405ull, 16872422882573707749ull, 7620970795451683797ull}}, {{11977131600833006896ull, 10787148583206815455ull, 12851107310822261295ull, 4763106747157302373ull}}, {{10359728482613870716ull, 8872249710581131415ull, 2228826083245662907ull, 5953883433946627967ull}}, {{8337974584839950491ull, 6478626119799026365ull, 16621090659339242346ull, 7442354292433284958ull}}, {{7517077124738663009ull, 8660827343301779382ull, 5776495643659638562ull, 4651471432770803099ull}}, {{172974369068552954ull, 1602662142272448420ull, 2608933536147160299ull, 5814339290963503874ull}}, {{216217961335691192ull, 15838385733122724237ull, 12484538957038726181ull, 7267924113704379842ull}}, {{4881958470097001894ull, 5962924111121241584ull, 6382301659443631919ull, 9084905142130474803ull}}, {{3051224043810626184ull, 10644356597091857846ull, 1683095527938575997ull, 5678065713831546752ull}}, {{13037402091618058538ull, 17917131764792210211ull, 2103869409923219996ull, 7097582142289433440ull}}, {{11685066596095185268ull, 3949670632280711148ull, 2629836762404024996ull, 8871977677861791800ull}}, {{16526538659414266601ull, 11691916182030220275ull, 1643647976502515622ull, 5544986048663619875ull}}, {{16046487305840445347ull, 5391523190682999536ull, 15889618025910308240ull, 6931232560829524843ull}}, {{1611365058591005067ull, 6739403988353749421ull, 15250336513960497396ull, 8664040701036906054ull}}, {{3312946170833072119ull, 13435499529575869196ull, 4919774302797922968ull, 5415025438148066284ull}}, {{4141182713541340149ull, 16794374411969836495ull, 6149717878497403710ull, 6768781797685082855ull}}, {{564792373499287282ull, 11769595978107519811ull, 3075461329694366734ull, 8460977247106353569ull}}, {{16493896297932912215ull, 2744311467889811977ull, 13451378377127448969ull, 5288110779441470980ull}}, {{6782312317133976557ull, 8042075353289652876ull, 16814222971409311211ull, 6610138474301838725ull}}, {{8477890396417470696ull, 5440908173184678191ull, 7182720658979475302ull, 8262673092877298407ull}}, {{12216210525402001041ull, 17235625663522587581ull, 11406729439503253919ull, 5164170683048311504ull}}, {{1435205101470337590ull, 16932846060975846573ull, 14258411799379067399ull, 6455213353810389380ull}}, {{6405692395265309891ull, 16554371557792420312ull, 17823014749223834249ull, 8069016692262986725ull}}, {{4003557747040818682ull, 3428953195979180839ull, 13445227227478590358ull, 5043135432664366703ull}}, {{392761165373635448ull, 13509563531828751857ull, 12194848015920850043ull, 6303919290830458379ull}}, {{5102637475144432214ull, 12275268396358551917ull, 10631874001473674650ull, 7879899113538072974ull}}, {{5494991431178964086ull, 12283728766151482852ull, 2033235232493658752ull, 4924936945961295609ull}}, {{6868739288973705107ull, 15354660957689353565ull, 7153230059044461344ull, 6156171182451619511ull}}, {{13197610129644519288ull, 746582123402140340ull, 4329851555378188777ull, 7695213978064524389ull}}, {{17471878367882600363ull, 11995828873194807472ull, 5012000231325061937ull, 4809508736290327743ull}}, {{3393103886143698838ull, 1159728036211345629ull, 1653314270728939518ull, 6011885920362909679ull}}, {{8853065876107011451ull, 10673032082118957844ull, 15901700893693338109ull, 7514857400453637098ull}}, {{14756538209421657965ull, 8976488060538042604ull, 14550249076985724222ull, 4696785875283523186ull}}, {{18445672761777072457ull, 1997238038817777447ull, 8964439309377379470ull, 5870982344104403983ull}}, {{18445404933793952667ull, 11719919585376997617ull, 6593863118294336433ull, 7338727930130504979ull}}, {{9221698111960277121ull, 814841426439083310ull, 3630642879440532638ull, 9173409912663131224ull}}, {{1151875301547785297ull, 14344333946806590781ull, 2269151799650332898ull, 5733381195414457015ull}}, {{6051530145362119525ull, 8707045396653462668ull, 16671497804845079835ull, 7166726494268071268ull}}, {{7564412681702649406ull, 6272120727389440431ull, 2392628182346798178ull, 8958408117835089086ull}}, {{11645286953705237735ull, 8531761473045788173ull, 15330450669248912573ull, 5599005073646930678ull}}, {{721550636849383457ull, 15276387859734623121ull, 9939691299706364908ull, 6998756342058663348ull}}, {{5513624314489117225ull, 648740750958727285ull, 12424614124632956136ull, 8748445427573329185ull}}, {{5751858205769392218ull, 405462969349204553ull, 847854800254515729ull, 5467778392233330741ull}}, {{11801508775639128176ull, 5118514730113893595ull, 5671504518745532565ull, 6834722990291663426ull}}, {{10140199951121522316ull, 11009829431069754898ull, 16312752685286691514ull, 8543403737864579282ull}}, {{10949310987878339351ull, 11492829412845984715ull, 14807156446731570100ull, 5339627336165362051ull}}, {{9074952716420536285ull, 14366036766057480894ull, 13897259539987074721ull, 6674534170206702564ull}}, {{2120318858670894548ull, 4122487902289687406ull, 17371574424983843402ull, 8343167712758378205ull}}, {{15160257341951472805ull, 7188240957358442532ull, 13163077024828596078ull, 5214479820473986378ull}}, {{503577603729789390ull, 18208673233552828974ull, 7230474244180969289ull, 6518099775592482973ull}}, {{9852844041517012545ull, 8925783486658872505ull, 13649778823653599516ull, 8147624719490603716ull}}, {{17687242572016602601ull, 14801986716016571123ull, 17754483801638275505ull, 5092265449681627322ull}}, {{17497367196593365347ull, 4667425339738550192ull, 12969732715193068574ull, 6365331812102034153ull}}, {{3424964922032155068ull, 15057653711527963549ull, 2377107838709172005ull, 7956664765127542692ull}}, {{4446446085483790870ull, 11716876578918671170ull, 10709064436048008311ull, 4972915478204714182ull}}, {{14781429643709514395ull, 10034409705220951058ull, 4162958508205234581ull, 6216144347755892728ull}}, {{9253415017782117185ull, 17154698149953576727ull, 5203698135256543226ull, 7770180434694865910ull}}, {{12700913413754905097ull, 15333372362148373358ull, 17087369389817503228ull, 4856362771684291193ull}}, {{6652769730338855563ull, 719971378975915082ull, 7524153681989715324ull, 6070453464605363992ull}}, {{17539334199778345262ull, 899964223719893852ull, 9405192102487144155ull, 7588066830756704990ull}}, {{1738711838006689981ull, 16703378704320791322ull, 1266559045627077192ull, 4742541769222940619ull}}, {{11396761834363138284ull, 2432479306691437536ull, 15418256862316010203ull, 5928177211528675773ull}}, {{14245952292953922855ull, 16875657188646460632ull, 5437763022612849041ull, 7410221514410844717ull}}, {{8903720183096201784ull, 3629756715262956039ull, 5704444898346724603ull, 4631388446506777948ull}}, {{6517964210442864326ull, 18372253949360858761ull, 7130556122933405753ull, 5789235558133472435ull}}, {{12759141281480968312ull, 9130259381418909739ull, 4301509135239369288ull, 7236544447666840544ull}}, {{11337240583423822486ull, 11412824226773637174ull, 5376886419049211610ull, 9045680559583550680ull}}, {{2474089346212501150ull, 11744701160160911138ull, 3360554011905757256ull, 5653550349739719175ull}}, {{12315983719620402245ull, 14680876450201138922ull, 18035750570164360282ull, 7066937937174648968ull}}, {{6171607612670726998ull, 9127723525896647845ull, 4097944138995898737ull, 8833672421468311211ull}}, {{6163097767132898326ull, 17234042249753874663ull, 255372077658742758ull, 5521045263417694507ull}}, {{3092186190488735004ull, 12319180775337567521ull, 14154273152355592160ull, 6901306579272118133ull}}, {{8476918756538306658ull, 15398975969171959401ull, 3857783385162326488ull, 8626633224090147667ull}}, {{16827289268904911422ull, 9624359980732474625ull, 105271606512760103ull, 5391645765056342292ull}}, {{7199053530848975565ull, 7418763957488205378ull, 131589508140950129ull, 6739557206320427865ull}}, {{18222188950415995264ull, 13885140965287644626ull, 4776172903603575565ull, 8424446507900534831ull}}, {{16000554112437384944ull, 10984056112518471843ull, 9902637092393316584ull, 5265279067437834269ull}}, {{15389006622119343276ull, 13730070140648089804ull, 16989982383919033634ull, 6581598834297292836ull}}, {{789514203939627479ull, 7939215638955336448ull, 2790733906189240427ull, 8226998542871616046ull}}, {{493446377462267175ull, 2656166765133391328ull, 15579266746650438979ull, 5141874089294760028ull}}, {{616807971827833968ull, 17155266511698902872ull, 1027339359603497107ull, 6427342611618450036ull}}, {{771009964784792460ull, 16832397121196240686ull, 1284174199504371384ull, 8034178264523062545ull}}, {{14316939283272659000ull, 10520248200747650428ull, 12331823920758701875ull, 5021361415326914090ull}}, {{17896174104090823750ull, 8538624232507175131ull, 6191407864093601536ull, 6276701769158642613ull}}, {{17758531611686141783ull, 10673280290633968914ull, 12350945848544389824ull, 7845877211448303266ull}}, {{15710768275731226518ull, 6670800181646230571ull, 12331027173767631544ull, 4903673257155189541ull}}, {{15026774326236645244ull, 8338500227057788214ull, 1578725911927375718ull, 6129591571443986927ull}}, {{9560095870941030747ull, 1199753246967459460ull, 15808465445191383360ull, 7661989464304983658ull}}, {{15198431956192920025ull, 749845779354662162ull, 14491976921672002504ull, 4788743415190614786ull}}, {{9774667908386374223ull, 937307224193327703ull, 8891599115235227322ull, 5985929268988268483ull}}, {{7606648867055579875ull, 10395006067096435437ull, 6502812875616646248ull, 7482411586235335604ull}}, {{7059998551123431374ull, 6496878791935272148ull, 13287630084115179713ull, 4676507241397084752ull}}, {{8824998188904289217ull, 12732784508346478089ull, 16609537605143974641ull, 5845634051746355940ull}}, {{15642933754557749425ull, 2080922580150933899ull, 2315177932720416686ull, 7307042564682944926ull}}, {{14941981174769798878ull, 11824525262043443182ull, 12117344452755296665ull, 9133803205853681157ull}}, {{4727052215803736395ull, 472799261136070133ull, 9879183292185754368ull, 5708627003658550723ull}}, {{10520501288182058397ull, 590999076420087666ull, 7737293096804805056ull, 7135783754573188404ull}}, {{3927254573372797188ull, 738748845525109583ull, 9671616371006006320ull, 8919729693216485505ull}}, {{9372063135999080099ull, 461718028453193489ull, 17573975277947223710ull, 5574831058260303440ull}}, {{16326764938426238028ull, 9800519572421267669ull, 3520725023724478021ull, 6968538822825379301ull}}, {{6573398117750633822ull, 16862335483953972491ull, 9012592298082985430ull, 8710673528531724126ull}}, {{1802530814380452187ull, 5927273659043844903ull, 1021184167874477990ull, 5444170955332327579ull}}, {{16088221573257728946ull, 16632464110659581936ull, 15111538265125261199ull, 6805213694165409473ull}}, {{1663532892862609566ull, 16178894119897089517ull, 5054364776124412787ull, 8506517117706761842ull}}, {{3345551067252824931ull, 7805965815721986996ull, 7770664003505145896ull, 5316573198566726151ull}}, {{4181938834066031164ull, 9757457269652483745ull, 5101643985954044466ull, 6645716498208407689ull}}, {{9839109561009926858ull, 2973449550210828873ull, 10988741000869943487ull, 8307145622760509611ull}}, {{17678658521699674047ull, 8775934996522849901ull, 4562120116330020727ull, 5191966014225318507ull}}, {{8263265096842428846ull, 6358232727226174473ull, 1090964126985138005ull, 6489957517781648134ull}}, {{14940767389480423962ull, 12559476927460105995ull, 10587077195586198314ull, 8112446897227060167ull}}, {{7032136609211571024ull, 12461359098089954151ull, 13534452274882455802ull, 5070279310766912604ull}}, {{4178484743087075876ull, 6353326835757666881ull, 16918065343603069753ull, 6337849138458640755ull}}, {{9834791947286232749ull, 12553344563124471505ull, 16535895661076449287ull, 7922311423073300944ull}}, {{17675960013122365228ull, 14763369379593876546ull, 10334934788172780804ull, 4951444639420813090ull}}, {{12871577979548180727ull, 7467650782794067ull, 3695296448361200198ull, 6189305799276016363ull}}, {{11477786456007838005ull, 9232706600333268392ull, 7434542024112343ull, 7736632249095020454ull}}, {{7173616535004898753ull, 12687970652849374601ull, 13839704644047233926ull, 4835395155684387783ull}}, {{13578706687183511346ull, 6636591279206942443ull, 12687944786631654504ull, 6044243944605484729ull}}, {{12361697340552001278ull, 8295739099008678054ull, 2024872928007404418ull, 7555304930756855912ull}}, {{3114374819417612895ull, 9796522955307811688ull, 1265545580004627761ull, 4722065581723034945ull}}, {{3892968524272016118ull, 16857339712562152514ull, 6193617993433172605ull, 5902581977153793681ull}}, {{14089582692194795956ull, 7236616585420526930ull, 12353708510218853661ull, 7378227471442242101ull}}, {{8388606328388719137ull, 13657456750203046567ull, 1607077582491403364ull, 9222784339302802627ull}}, {{12160407982884031317ull, 17759282505731679912ull, 17145324553552984766ull, 5764240212064251641ull}}, {{15200509978605039146ull, 12975731095309824082ull, 7596597636659067246ull, 7205300265080314552ull}}, {{9777265436401523124ull, 6996291832282504295ull, 9495747045823834058ull, 9006625331350393190ull}}, {{13028319925392033809ull, 8984368413603953088ull, 1323155885212508382ull, 5629140832093995744ull}}, {{16285399906740042261ull, 2007088480150165552ull, 1653944856515635478ull, 7036426040117494680ull}}, {{1910005809715501210ull, 11732232637042482749ull, 2067431070644544347ull, 8795532550146868350ull}}, {{3499596640285882208ull, 5026802388937857766ull, 15127202474435003929ull, 5497207843841792718ull}}, {{13597867837212128568ull, 10895189004599710111ull, 9685631056188979103ull, 6871509804802240898ull}}, {{12385648778087772806ull, 9007300237322249735ull, 2883666783381448071ull, 8589387256002801123ull}}, {{14658559513945939860ull, 12547091675967487940ull, 17943192804109262708ull, 5368367035001750701ull}}, {{18323199392432424825ull, 15683864594959359925ull, 8593932949854414673ull, 6710458793752188377ull}}, {{9068941185258367319ull, 5769772688417036195ull, 15354102205745406246ull, 8388073492190235471ull}}, {{3362245231572785623ull, 17441165985542811334ull, 16513842906231960759ull, 5242545932618897169ull}}, {{13426178576320757836ull, 17189771463501126263ull, 6807245577507787237ull, 6553182415773621462ull}}, {{12171037201973559391ull, 7652156274094244117ull, 17732429008739509855ull, 8191478019717026827ull}}, {{9912741260447168572ull, 11700126698949984429ull, 8776925121248499707ull, 5119673762323141767ull}}, {{17002612593986348618ull, 10013472355260092632ull, 6359470383133236730ull, 6399592202903927209ull}}, {{2806521668773384157ull, 3293468407220339983ull, 12561023997343933817ull, 7999490253629909011ull}}, {{8671605070624446954ull, 13587632800581182249ull, 5544796989126264683ull, 4999681408518693132ull}}, {{15451192356707946597ull, 12372854982299089907ull, 6930996236407830854ull, 6249601760648366415ull}}, {{14702304427457545342ull, 6242696691019086576ull, 4052059277082400664ull, 7812002200810458019ull}}, {{9188940267160965839ull, 3901685431886929110ull, 226694038962806463ull, 4882501375506536262ull}}, {{2262803297096431490ull, 265420771431273484ull, 9506739585558283887ull, 6103126719383170327ull}}, {{2828504121370539363ull, 14166834019571255567ull, 7271738463520466954ull, 7628908399228962909ull}}, {{8685344103497668958ull, 13465957280659422633ull, 6850679548913985798ull, 4768067749518101818ull}}, {{15468366147799474101ull, 7609074563969502483ull, 17786721472997258056ull, 5960084686897627272ull}}, {{14723771666321954722ull, 9511343204961878104ull, 3786657767537020954ull, 7450105858622034091ull}}, {{9202357291451221702ull, 10556275521528561719ull, 60818095496944144ull, 4656316161638771307ull}}, {{6891260595886639223ull, 13195344401910702149ull, 13911080674653343892ull, 5820395202048464133ull}}, {{13225761763285686933ull, 16494180502388377686ull, 3553792788034516153ull, 7275494002560580167ull}}, {{7308830167252332858ull, 6782667572703308396ull, 18277299040325308904ull, 9094367503200725208ull}}, {{13791390891387483844ull, 4239167232939567747ull, 11423311900203318065ull, 5683979689500453255ull}}, {{12627552595806966901ull, 9910645059601847588ull, 9667453856826759677ull, 7104974611875566569ull}}, {{15784440744758708626ull, 16999992342929697389ull, 16696003339460837500ull, 8881218264844458211ull}}, {{12171118474687886844ull, 1401623177476285060ull, 8129159077949329486ull, 5550761415527786382ull}}, {{15213898093359858554ull, 10975401008700132133ull, 938076810581886049ull, 6938451769409732978ull}}, {{5182314561417659481ull, 18330937279302553071ull, 10395968050082133369ull, 8673064711762166222ull}}, {{10156475628527119032ull, 4539306771923013813ull, 1885794012873945452ull, 5420665444851353889ull}}, {{17307280554086286694ull, 5674133464903767266ull, 6968928534519819719ull, 6775831806064192361ull}}, {{12410728655753082559ull, 2480980812702321179ull, 13322846686577162553ull, 8469789757580240451ull}}, {{5450862400631982647ull, 13079828054007420497ull, 6020936169897032643ull, 5293618598487650282ull}}, {{11425264019217366213ull, 11738099049081887717ull, 16749542249226066612ull, 6617023248109562852ull}}, {{446521968739544054ull, 14672623811352359647ull, 2490183737823031649ull, 8271279060136953566ull}}, {{7196605258103296890ull, 2252860854454142923ull, 15391422891421558493ull, 5169549412585595978ull}}, {{4384070554201733209ull, 7427762086495066558ull, 10015906577422172308ull, 6461936765731994973ull}}, {{14703460229606942319ull, 9284702608118833197ull, 17131569240205103289ull, 8077420957164993716ull}}, {{11495505652718032901ull, 17332154176142740508ull, 1483858738273413747ull, 5048388098228121073ull}}, {{14369382065897541126ull, 17053506701751037731ull, 6466509441269155088ull, 6310485122785151341ull}}, {{13350041563944538504ull, 2870139303479245548ull, 12694822820013831765ull, 7888106403481439176ull}}, {{17567148014320112373ull, 4099680073888222419ull, 7934264262508644853ull, 4930066502175899485ull}}, {{17347248999472752562ull, 9736286110787665928ull, 14529516346563193970ull, 6162583127719874356ull}}, {{3237317175631389087ull, 2946985601629806603ull, 18161895433203992463ull, 7703228909649842945ull}}, {{18164224299265475843ull, 8759395028659710982ull, 4433655618111413433ull, 4814518068531151841ull}}, {{13481908337227068996ull, 15560929804252026632ull, 10153755541066654695ull, 6018147585663939801ull}}, {{16852385421533836245ull, 14839476236887645386ull, 17303880444760706273ull, 7522684482079924751ull}}, {{15144426906886035557ull, 2357143620413696510ull, 17732454305616523277ull, 4701677801299952969ull}}, {{9707161596752768639ull, 7558115543944508542ull, 8330509826738490384ull, 5877097251624941212ull}}, {{2910579959086184990ull, 9447644429930635678ull, 10413137283423112980ull, 7346371564531176515ull}}, {{12861596985712507045ull, 11809555537413294597ull, 8404735585851503321ull, 9182964455663970644ull}}, {{10344341125284010856ull, 463443183242227267ull, 14476331778011965384ull, 5739352784789981652ull}}, {{8318740388177625665ull, 579303979052784084ull, 18095414722514956730ull, 7174190980987477065ull}}, {{10398425485222032082ull, 9947502010670755913ull, 8784210347861532200ull, 8967738726234346332ull}}, {{18028230974332239811ull, 6217188756669222445ull, 14713503504268233433ull, 5604836703896466457ull}}, {{8700230662633136052ull, 12383171964263915961ull, 4556821325053128079ull, 7006045879870583072ull}}, {{15486974346718807969ull, 10867278936902507047ull, 5696026656316410099ull, 8757557349838228840ull}}, {{16596887994340336837ull, 4486206326350372952ull, 3560016660197756312ull, 5473473343648893025ull}}, {{2299365919215869430ull, 5607757907937966191ull, 9061706843674583294ull, 6841841679561116281ull}}, {{16709265454302000499ull, 16233069421777233546ull, 15938819573020617021ull, 8552302099451395351ull}}, {{15054976927366138216ull, 12451511397824464918ull, 16879291260778967494ull, 5345188812157122094ull}}, {{9595349122352896962ull, 6341017210425805340ull, 11875742039118933560ull, 6681486015196402618ull}}, {{11994186402941121202ull, 7926271513032256675ull, 5621305512043891142ull, 8351857518995503273ull}}, {{5190523492624506800ull, 342233677217772518ull, 15042530991095901724ull, 5219910949372189545ull}}, {{15711526402635409307ull, 427792096522215647ull, 4968105683587713443ull, 6524888686715236932ull}}, {{15027721984866873730ull, 14369798175934933271ull, 6210132104484641803ull, 8156110858394046165ull}}, {{16309855268182877938ull, 6675280850745639342ull, 6187175574516595079ull, 5097569286496278853ull}}, {{11163947048373821614ull, 3732415045004661274ull, 12345655486573131753ull, 6371961608120348566ull}}, {{4731561773612501209ull, 9277204824683214497ull, 6208697321361638883ull, 7964952010150435708ull}}, {{14486441154576283016ull, 3492410006213315108ull, 13103807862705800110ull, 4978095006344022317ull}}, {{18108051443220353770ull, 13588884544621419693ull, 2544701773100086425ull, 6222618757930027897ull}}, {{8800006248743278500ull, 3151047625494610905ull, 7792563234802495936ull, 7778273447412534871ull}}, {{17029218951533018823ull, 1969404765934131815ull, 11787881049392641816ull, 4861420904632834294ull}}, {{16674837670988885624ull, 2461755957417664769ull, 5511479274886026462ull, 6076776130791042868ull}}, {{7008489033453943318ull, 12300566983626856770ull, 6889349093607533077ull, 7595970163488803585ull}}, {{8991991664336102478ull, 9993697373980479433ull, 15835058229573177933ull, 4747481352180502240ull}}, {{15851675598847516001ull, 17103807735902987195ull, 1347078713256920800ull, 5934351690225627801ull}}, {{15202908480132007098ull, 2933015596169182378ull, 6295534409998538905ull, 7417939612782034751ull}}, {{14113503818509892340ull, 13362349793674208746ull, 10852238033890168671ull, 4636212257988771719ull}}, {{8418507736282589617ull, 12091251223665373029ull, 8953611523935322935ull, 5795265322485964649ull}}, {{15134820688780624925ull, 10502378011154328382ull, 15803700423346541573ull, 7244081653107455811ull}}, {{9695153824121005349ull, 17739658532370298382ull, 15142939510755789062ull, 9055102066384319764ull}}, {{1447785121648240439ull, 6475600564304048585ull, 240965157367592356ull, 5659438791490199853ull}}, {{6421417420487688453ull, 8094500705380060731ull, 4912892465136878349ull, 7074298489362749816ull}}, {{3415085757182222662ull, 14729811900152463818ull, 6141115581421097936ull, 8842873111703437270ull}}, {{6746114616666277068ull, 9206132437595289886ull, 17673255293670349922ull, 5526795694814648293ull}}, {{17656015307687622143ull, 2284293510139336549ull, 8256511061805773691ull, 6908494618518310367ull}}, {{8234961079327363966ull, 16690424942956334399ull, 5708952808829829209ull, 8635618273147887959ull}}, {{12064379702220684335ull, 3513986561706627143ull, 10485624533159725112ull, 5397261420717429974ull}}, {{10468788609348467515ull, 4392483202133283929ull, 3883658629594880582ull, 6746576775896787468ull}}, {{17697671780112972297ull, 14713976039521380719ull, 4854573286993600727ull, 8433220969870984335ull}}, {{17978573890211689542ull, 16113764052341944805ull, 9951637332012082310ull, 5270763106169365209ull}}, {{8638159307482448215ull, 10918833028572655199ull, 17051232683442490792ull, 6588453882711706511ull}}, {{6186013115925672365ull, 13648541285715818999ull, 16702354835875725586ull, 8235567353389633139ull}}, {{10783787225094627084ull, 13142024321999774778ull, 8133128763208634539ull, 5147229595868520712ull}}, {{4256361994513508047ull, 11815844384072330569ull, 10166410954010793174ull, 6434036994835650890ull}}, {{9932138511569272963ull, 5546433443235637403ull, 3484641655658715660ull, 8042546243544563613ull}}, {{3901743560517101650ull, 12689892938877049185ull, 4483744044000391239ull, 5026591402215352258ull}}, {{9488865469073764966ull, 11250680155168923577ull, 14828052091855264857ull, 6283239252769190322ull}}, {{16472767854769594112ull, 228292138678990759ull, 9311693077964305264ull, 7854049065961487903ull}}, {{17213008936872078176ull, 142682586674369224ull, 12737337201368772646ull, 4908780666225929939ull}}, {{3069517097380546104ull, 9401725270197737339ull, 11309985483283577903ull, 6135975832782412424ull}}, {{17671954427007846342ull, 7140470569319783769ull, 14137481854104472379ull, 7669969790978015530ull}}, {{4127442489238822108ull, 2156951096611170904ull, 13447612177242683141ull, 4793731119361259706ull}}, {{5159303111548527635ull, 7307874889191351534ull, 7586143184698578118ull, 5992163899201574633ull}}, {{15672500926290435351ull, 18358215648343965225ull, 14094364999300610551ull, 7490204874001968291ull}}, {{2877784051290440239ull, 18391413807856060122ull, 6503135115349187642ull, 4681378046251230182ull}}, {{12820602100967826106ull, 13765895222965299344ull, 17352290931041260361ull, 5851722557814037727ull}}, {{16025752626209782633ull, 3372310973424460468ull, 17078677645374187548ull, 7314653197267547159ull}}, {{1585446709052676675ull, 4215388716780575586ull, 16736661038290346531ull, 9143316496584433949ull}}, {{5602590211585310826ull, 328774938774165789ull, 12766256158145160534ull, 5714572810365271218ull}}, {{11614923782909026436ull, 9634340710322483044ull, 6734448160826674859ull, 7143216012956589023ull}}, {{14518654728636283045ull, 7431239869475715901ull, 3806374182605955670ull, 8929020016195736279ull}}, {{11380002214611370855ull, 32838899994934534ull, 9296512891769804150ull, 5580637510122335174ull}}, {{5001630731409437761ull, 9264420661848443976ull, 2397269077857479379ull, 6975796887652918968ull}}, {{6252038414261797201ull, 6968839808883167066ull, 2996586347321849224ull, 8719746109566148710ull}}, {{8519210027341011155ull, 4355524880551979416ull, 15707924522358319477ull, 5449841318478842943ull}}, {{10649012534176263944ull, 10056092119117362174ull, 15023219634520511442ull, 6812301648098553679ull}}, {{4087893630865554121ull, 3346743112041926910ull, 14167338524723251399ull, 8515377060123192099ull}}, {{16389991574573135038ull, 9009243472667286174ull, 6548743568738338172ull, 5322110662576995062ull}}, {{11264117431361642989ull, 11261554340834107718ull, 17409301497777698523ull, 6652638328221243827ull}}, {{4856774752347277929ull, 9465256907615246744ull, 17149940853794735250ull, 8315797910276554784ull}}, {{3035484220217048706ull, 10527471585686917119ull, 10718713033621709531ull, 5197373693922846740ull}}, {{17629413330553474594ull, 8547653463681258494ull, 13398391292027136914ull, 6496717117403558425ull}}, {{12813394626337067434ull, 1461194792746797310ull, 2912931059751757431ull, 8120896396754448032ull}}, {{3396685623033279243ull, 7830775773107830175ull, 1820581912344848394ull, 5075560247971530020ull}}, {{18080915084073762765ull, 565097679530011910ull, 2275727390431060493ull, 6344450309964412525ull}}, {{13377771818237427648ull, 5318058117839902792ull, 7456345256466213520ull, 7930562887455515656ull}}, {{8361107386398392280ull, 3323786323649939245ull, 4660215785291383450ull, 4956601804659697285ull}}, {{15063070251425378254ull, 13378104941417199864ull, 10436955750041617216ull, 6195752255824621606ull}}, {{382093740572171202ull, 16722631176771499831ull, 3822822650697245712ull, 7744690319780777008ull}}, {{7156337615498688857ull, 10451644485482187394ull, 2389264156685778570ull, 4840431449862985630ull}}, {{18168794056228136880ull, 3841183569997958434ull, 12209952232711999021ull, 6050539312328732037ull}}, {{13487620533430395291ull, 9413165480924835947ull, 1427382235607835064ull, 7563174140410915047ull}}, {{6123919824180303105ull, 5883228425578022467ull, 7809642924895978771ull, 4726983837756821904ull}}, {{3043213761797990977ull, 2742349513545140180ull, 9762053656119973464ull, 5908729797196027380ull}}, {{3804017202247488722ull, 3427936891931425225ull, 12202567070149966830ull, 7385912246495034225ull}}, {{13906725797473150211ull, 15977518612739304477ull, 709075391202647412ull, 4616195154059396391ull}}, {{3548349191559274052ull, 1525154192214578981ull, 14721402294285472978ull, 5770243942574245488ull}}, {{9047122507876480469ull, 11129814777122999534ull, 18401752867856841222ull, 7212804928217806860ull}}, {{2085531097990824778ull, 4688896434548973610ull, 4555447011111499912ull, 9016006160272258576ull}}, {{5915142954671653390ull, 2930560271593108506ull, 2847154381944687445ull, 5635003850170161610ull}}, {{16617300730194342546ull, 8274886357918773536ull, 12782315014285635114ull, 7043754812712702012ull}}, {{2324881839033376566ull, 1120235910543691113ull, 15977893767857043893ull, 8804693515890877515ull}}, {{12982266195464330114ull, 3005990453303500897ull, 7680340595696958481ull, 5502933447431798447ull}}, {{2392774689048248930ull, 8369174085056764026ull, 4988739726193810197ull, 6878666809289748059ull}}, {{12214340398165086971ull, 15073153624748342936ull, 1624238639314874842ull, 8598333511612185074ull}}, {{7633962748853179357ull, 14032407033895102239ull, 5626835167999184680ull, 5373958444757615671ull}}, {{4930767417639086292ull, 17540508792368877799ull, 2421857941571592946ull, 6717448055947019589ull}}, {{1551773253621469961ull, 12702263953606321441ull, 7639008445391879087ull, 8396810069933774486ull}}, {{12499073329581888486ull, 14856443998645032756ull, 162694259942536525ull, 5248006293708609054ull}}, {{15623841661977360607ull, 4735496943024127233ull, 9426739861782946465ull, 6560007867135761317ull}}, {{5694744022189537047ull, 10531057197207546946ull, 16395110845656070985ull, 8200009833919701646ull}}, {{8170901032295848558ull, 18111125794323186601ull, 5635258260107656461ull, 5125006146199813529ull}}, {{14825312308797198602ull, 8803849187621819539ull, 11655758843561958481ull, 6406257682749766911ull}}, {{13919954367569110348ull, 15616497502954662328ull, 9958012536025060197ull, 8007822103437208639ull}}, {{8699971479730693968ull, 12066153948560357907ull, 13141286862656744479ull, 5004888814648255399ull}}, {{6263278331235979556ull, 10471006417273059480ull, 11814922559893542695ull, 6256111018310319249ull}}, {{7829097914044974444ull, 8477072003163936446ull, 933595144584764657ull, 7820138772887899062ull}}, {{281500177850721124ull, 16827385048045930039ull, 14418555020647641622ull, 4887586733054936913ull}}, {{14186933277595565117ull, 11810859273202636740ull, 4188135720527388316ull, 6109483416318671142ull}}, {{17733666596994456396ull, 14763574091503295925ull, 14458541687514011203ull, 7636854270398338927ull}}, {{13389384632335229200ull, 6921390797975866001ull, 15954117582337338858ull, 4773033918998961829ull}}, {{2901672735136872787ull, 17875110534324608310ull, 6107588922639509860ull, 5966292398748702287ull}}, {{12850462955775866792ull, 3897144094196208771ull, 3022800134871999422ull, 7457865498435877859ull}}, {{5725696338146222793ull, 16270773114154794194ull, 18030151148790857302ull, 4661165936522423661ull}}, {{16380492459537554299ull, 11115094355838716934ull, 8702630880706407916ull, 5826457420653029577ull}}, {{11252243537567167066ull, 13893867944798396168ull, 15489974619310397799ull, 7283071775816286971ull}}, {{14065304421958958833ull, 12755648912570607306ull, 14750782255710609345ull, 9103839719770358714ull}}, {{13402501282151737175ull, 1054751542715547710ull, 13830924928246518745ull, 5689899824856474196ull}}, {{7529754565834895660ull, 5930125446821822542ull, 17288656160308148431ull, 7112374781070592745ull}}, {{188821170438843767ull, 2800970790099890274ull, 7775762145103021827ull, 8890468476338240932ull}}, {{4729699249951665259ull, 17891507808308289085ull, 14083223377544164449ull, 5556542797711400582ull}}, {{10523810080866969477ull, 8529326705103197644ull, 8380657185075429754ull, 6945678497139250728ull}}, {{13154762601083711846ull, 1438286344524221247ull, 10475821481344287193ull, 8682098121424063410ull}}, {{15139255653318401760ull, 12428144011396108039ull, 11159074444267567399ull, 5426311325890039631ull}}, {{14312383548220614296ull, 10923493995817747145ull, 9337157036907071345ull, 6782889157362549539ull}}, {{4055421379993604158ull, 18266053513199571836ull, 7059760277706451277ull, 8478611446703186924ull}}, {{11758010399350778407ull, 13722126454963426349ull, 13635722210421307856ull, 5299132154189491827ull}}, {{862454943906309296ull, 17152658068704282937ull, 12432966744599246916ull, 6623915192736864784ull}}, {{5689754698310274524ull, 2994078512170802055ull, 15541208430749058646ull, 8279893990921080980ull}}, {{10473625714085003434ull, 15706357125388914996ull, 489883232363385845ull, 5174933744325675613ull}}, {{13092032142606254292ull, 5797888351453980033ull, 5224040058881620211ull, 6468667180407094516ull}}, {{2529982122975654153ull, 2635674420890087138ull, 6530050073602025264ull, 8085833975508868145ull}}, {{6192924845287171750ull, 1647296513056304461ull, 15610496342069735550ull, 5053646234693042590ull}}, {{12352842075036352591ull, 11282492678175156384ull, 10289748390732393629ull, 6317057793366303238ull}}, {{15441052593795440739ull, 268057792436781768ull, 3638813451560716229ull, 7896322241707879048ull}}, {{9650657871122150462ull, 2473379129486682557ull, 2274258407225447643ull, 4935201401067424405ull}}, {{16675008357330075982ull, 16926781967140516908ull, 7454509027459197457ull, 6169001751334280506ull}}, {{2397016372953043361ull, 7323419403643482424ull, 94764247469221014ull, 7711252189167850633ull}}, {{1498135233095652101ull, 18412195182559340227ull, 11588442700736732893ull, 4819532618229906645ull}}, {{15707727096651728838ull, 9180185922917011571ull, 650495320638752405ull, 6024415772787383307ull}}, {{15022972852387273143ull, 16086918422073652368ull, 14648177206080604218ull, 7530519715984229133ull}}, {{9389358032742045715ull, 14666010032223420634ull, 11460953763014071588ull, 4706574822490143208ull}}, {{2513325504072781335ull, 18332512540279275793ull, 14326192203767589485ull, 5883218528112679010ull}}, {{7753342898518364573ull, 9080582620066931029ull, 8684368217854711049ull, 7354023160140848763ull}}, {{14303364641575343620ull, 15962414293511051690ull, 6243774253891000907ull, 9192528950176060954ull}}, {{13551288919411977667ull, 7670665924230713354ull, 8514044927109263471ull, 5745330593860038096ull}}, {{7715739112410196275ull, 4976646386861003789ull, 10642556158886579339ull, 7181663242325047620ull}}, {{14256359908940133248ull, 1609121965148866832ull, 13303195198608224174ull, 8977079052906309525ull}}, {{8910224943087583280ull, 14840759283500205482ull, 10620340008343834060ull, 5610674408066443453ull}}, {{1914409142004703292ull, 104205030665705237ull, 17887111028857180480ull, 7013343010083054316ull}}, {{7004697445933267019ull, 130256288332131546ull, 3912144712361923984ull, 8766678762603817896ull}}, {{8989621922135679791ull, 81410180207582216ull, 2445090445226202490ull, 5479174226627386185ull}}, {{11237027402669599738ull, 9325134762114253578ull, 7668049074960141016ull, 6848967783284232731ull}}, {{4822912216482223865ull, 11656418452642816973ull, 4973375325272788366ull, 8561209729105290914ull}}, {{5320163144515083868ull, 2673575514474372704ull, 7720045596722880633ull, 5350756080690806821ull}}, {{6650203930643854835ull, 7953655411520353784ull, 14261743014330988695ull, 6688445100863508526ull}}, {{8312754913304818543ull, 5330383245973054326ull, 8603806731058960061ull, 8360556376079385658ull}}, {{583785802388123686ull, 5637332537946852906ull, 9989065225339237942ull, 5225347735049616036ull}}, {{9953104289839930415ull, 16270037709288341940ull, 12486331531674047427ull, 6531684668812020045ull}}, {{12441380362299913019ull, 15725861118183039521ull, 1772856359310395572ull, 8164605836015025057ull}}, {{858333698796363781ull, 605291162009623893ull, 12637250270637466993ull, 5102878647509390660ull}}, {{5684603141922842630ull, 5368299970939417770ull, 15796562838296833741ull, 6378598309386738325ull}}, {{16329125964258329095ull, 11322060982101660116ull, 5910645492588878464ull, 7973247886733422907ull}}, {{982331690806679877ull, 7076288113813537573ull, 1388310423654355088ull, 4983279929208389317ull}}, {{5839600631935737750ull, 8845360142266921966ull, 6347074047995331764ull, 6229099911510486646ull}}, {{16522872826774447995ull, 11056700177833652457ull, 17157214596848940513ull, 7786374889388108307ull}}, {{3409266489092948141ull, 18439652657214502546ull, 8417416113816893868ull, 4866484305867567692ull}}, {{13484955148220960984ull, 4602821747808576566ull, 10521770142271117336ull, 6083105382334459615ull}}, {{7632821898421425422ull, 5753527184760720708ull, 8540526659411508766ull, 7603881727918074519ull}}, {{13993885723368166697ull, 17431012545757614154ull, 12255358189773274834ull, 4752426079948796574ull}}, {{8268985117355432563ull, 12565393645342241885ull, 6095825700361817735ull, 5940532599935995718ull}}, {{14947917415121678608ull, 11095056038250414452ull, 16843154162307047977ull, 7425665749919994647ull}}, {{119076347596273322ull, 16880996265427177ull, 17444500379082986842ull, 4641041093699996654ull}}, {{4760531452922729557ull, 9244473282186559779ull, 12582253436998957744ull, 5801301367124995818ull}}, {{1338978297726024042ull, 11555591602733199724ull, 6504444759393921372ull, 7251626708906244773ull}}, {{1673722872157530052ull, 14444489503416499655ull, 12742241967669789619ull, 9064533386132805966ull}}, {{7963605822739538139ull, 6721962930421618332ull, 3352215211366230608ull, 5665333366333003729ull}}, {{9954507278424422673ull, 8402453663027022915ull, 8801955032635176164ull, 7081666707916254661ull}}, {{7831448079603140437ull, 10503067078783778644ull, 15614129809221358109ull, 8852083384895318326ull}}, {{14118027086606738581ull, 8870259933453555604ull, 5147145112335960914ull, 5532552115559573954ull}}, {{17647533858258423227ull, 1864452879962168697ull, 15657303427274726951ull, 6915690144449467442ull}}, {{8224359267540865321ull, 16165624155234874584ull, 10348257247238632880ull, 8644612680561834303ull}}, {{5140224542213040826ull, 10103515097021796615ull, 13385189807165227406ull, 5402882925351146439ull}}, {{1813594659338913128ull, 3406021834422469961ull, 12119801240529146354ull, 6753603656688933049ull}}, {{6878679342601029314ull, 13480899329882863259ull, 1314693495379269230ull, 8442004570861166312ull}}, {{1993331579911949370ull, 3813876062749401633ull, 821683434612043269ull, 5276252856788228945ull}}, {{7103350493317324616ull, 9379031096864139945ull, 5638790311692441990ull, 6595316070985286181ull}}, {{13490874135074043674ull, 2500416834225399123ull, 11660173908042940392ull, 8244145088731607726ull}}, {{6125953325207583344ull, 1562760521390874452ull, 2675922674099449841ull, 5152590680457254829ull}}, {{7657441656509479180ull, 6565136670165980969ull, 7956589361051700205ull, 6440738350571568536ull}}, {{14183488089064236879ull, 12818106856134864115ull, 9945736701314625256ull, 8050922938214460670ull}}, {{6558837046451454098ull, 8011316785084290072ull, 1604399419894252881ull, 5031826836384037919ull}}, {{8198546308064317622ull, 14625831999782750494ull, 15840557330149979813ull, 6289783545480047398ull}}, {{1024810848225621219ull, 4447231944446274406ull, 10577324625832698959ull, 7862229431850059248ull}}, {{14475564835423176974ull, 9697048992920003359ull, 6610827891145436849ull, 4913893394906287030ull}}, {{13482770025851583314ull, 16732997259577392103ull, 17486906900786571869ull, 6142366743632858787ull}}, {{12241776513887091238ull, 7081188519189576417ull, 17246947607555826933ull, 7677958429541073484ull}}, {{733581293538350168ull, 6731585833707179213ull, 1555970217867616025ull, 4798724018463170928ull}}, {{5528662635350325614ull, 13026168310561361920ull, 1944962772334520031ull, 5998405023078963660ull}}, {{6910828294187907017ull, 11671024369774314496ull, 2431203465418150039ull, 7498006278848704575ull}}, {{4319267683867441886ull, 14211919258750028416ull, 8437031193527425630ull, 4686253924280440359ull}}, {{5399084604834302357ull, 8541527036582759712ull, 5934602973481894134ull, 5857817405350550449ull}}, {{6748855756042877946ull, 1453536758873673832ull, 12029939735279755572ull, 7322271756688188061ull}}, {{8436069695053597433ull, 1816920948592092290ull, 1202366613817530753ull, 9152839695860235077ull}}, {{9884229577835886300ull, 12664790638938527441ull, 3057322142849650672ull, 5720524809912646923ull}}, {{16966972990722245779ull, 15830988298673159301ull, 17656710733844227052ull, 7150656012390808653ull}}, {{7373658183120643511ull, 1341991299631897511ull, 8235830362023120104ull, 8938320015488510817ull}}, {{11526065392091484051ull, 838744562269935944ull, 16676609022332919825ull, 5586450009680319260ull}}, {{14407581740114355063ull, 5660116721264807834ull, 2399017204206598165ull, 6983062512100399076ull}}, {{8786105138288168021ull, 11686831920008397697ull, 2998771505258247706ull, 8728828140125498845ull}}, {{17020530757498574773ull, 11915955968432636464ull, 4180075200000098768ull, 5455517587578436778ull}}, {{2828919373163666850ull, 14894944960540795581ull, 14448466036854899268ull, 6819396984473045972ull}}, {{8147835234881971467ull, 171937126966442860ull, 18060582546068624086ull, 8524246230591307465ull}}, {{14315769058656007975ull, 13942518759636190499ull, 4370335063651808197ull, 5327653894119567166ull}}, {{13283025304892622065ull, 3593090394263074412ull, 14686290866419536055ull, 6659567367649458957ull}}, {{16603781631115777581ull, 18326421048111006727ull, 4522805527742256356ull, 8324459209561823697ull}}, {{17294892547088442844ull, 2230641118214603396ull, 14355968500907379983ull, 5202787005976139810ull}}, {{3171871610151001939ull, 16623359453050417958ull, 8721588589279449170ull, 6503483757470174763ull}}, {{13188211549543528231ull, 11555827279458246639ull, 6290299718171923559ull, 8129354696837718454ull}}, {{15160161246105787001ull, 14139921077302486005ull, 17766495379139615936ull, 5080846685523574033ull}}, {{5115143502350070039ull, 17674901346628107507ull, 8373061168642356208ull, 6351058356904467542ull}}, {{1782243359510199645ull, 3646882609575582768ull, 1242954423948169453ull, 7938822946130584428ull}}, {{1113902099693874778ull, 4585144640198433182ull, 10000218551822381716ull, 4961764341331615267ull}}, {{10615749661472119280ull, 5731430800248041477ull, 7888587171350589241ull, 6202205426664519084ull}}, {{17881373095267537004ull, 11775974518737439750ull, 9860733964188236551ull, 7752756783330648855ull}}, {{6564172166114822724ull, 14277513101851981700ull, 13080487755258729700ull, 4845472989581655534ull}}, {{8205215207643528405ull, 17846891377314977125ull, 7127237657218636317ull, 6056841236977069418ull}}, {{14868205027981798410ull, 8473556166361557694ull, 18132419108378071205ull, 7571051546221336772ull}}, {{4680942124061236102ull, 7601815613189667511ull, 2109389905881518695ull, 4731907216388335483ull}}, {{1239491636649157224ull, 4890583498059696485ull, 16471795437634062081ull, 5914884020485419353ull}}, {{6161050564238834434ull, 10724915391002008510ull, 6754686241760413889ull, 7393605025606774192ull}}, {{17685714657931435233ull, 18232287165444725078ull, 4221678901100258680ull, 4621003141004233870ull}}, {{12883771285559518233ull, 4343614883096354732ull, 14500470663230099159ull, 5776253926255292337ull}}, {{16104714106949397792ull, 817832585443055511ull, 4290530273755460237ull, 7220317407819115422ull}}, {{15519206615259359335ull, 5633976750231207293ull, 14586534879049101104ull, 9025396759773894277ull}}, {{12005347143750793537ull, 3521235468894504558ull, 11422427308619382142ull, 5640872974858683923ull}}, {{5783311892833716113ull, 13624916372972906506ull, 9666348117346839773ull, 7051091218573354904ull}}, {{16452511902896920949ull, 3196087410933969420ull, 12082935146683549717ull, 8813864023216693630ull}}, {{1059447902455799785ull, 4303397641047424840ull, 2940148448249830669ull, 5508665014510433519ull}}, {{1324309878069749732ull, 9990933069736668954ull, 17510243615594452048ull, 6885831268138041898ull}}, {{10878759384441962972ull, 12488666337170836192ull, 12664432482638289252ull, 8607289085172552373ull}}, {{6799224615276226858ull, 17028788497586548428ull, 10221113310862624734ull, 5379555678232845233ull}}, {{8499030769095283572ull, 12062613585128409727ull, 17388077657005668822ull, 6724444597791056541ull}}, {{6012102442941716561ull, 5854894944555736351ull, 7900039015974922316ull, 8405555747238820677ull}}, {{10675093054479654707ull, 12882681377202111027ull, 7243367394198020399ull, 5253472342024262923ull}}, {{8732180299672180479ull, 11491665703075250880ull, 4442523224320137595ull, 6566840427530328654ull}}, {{10915225374590225599ull, 9752896110416675696ull, 14776526067254947802ull, 8208550534412910817ull}}, {{6822015859118891000ull, 10707246087437810214ull, 2317799764393260520ull, 5130344084008069261ull}}, {{17750891860753389558ull, 13384057609297262767ull, 7508935723918963554ull, 6412930105010086576ull}}, {{17576928807514349043ull, 7506699974766802651ull, 9386169654898704443ull, 8016162631262608220ull}}, {{8679737495482774200ull, 2385844475015557705ull, 15089728071166466085ull, 5010101644539130137ull}}, {{15461357887780855654ull, 7593991612196835035ull, 5027102033675918894ull, 6262627055673912672ull}}, {{14715011341298681663ull, 269117478391267986ull, 6283877542094898618ull, 7828283819592390840ull}}, {{13808568106739063944ull, 4779884442421930395ull, 3927423463809311636ull, 4892677387245244275ull}}, {{12649024114996442025ull, 5974855553027412994ull, 297593311334251641ull, 6115846734056555344ull}}, {{6587908106890776724ull, 12080255459711654147ull, 371991639167814551ull, 7644808417570694180ull}}, {{1811599557593041500ull, 14467688689960865698ull, 9455866811334659902ull, 4778005260981683862ull}}, {{11487871483846077683ull, 8861238825596306314ull, 2596461477313549070ull, 5972506576227104828ull}}, {{5136467317952821296ull, 1853176495140607085ull, 3245576846641936338ull, 7465633220283881035ull}}, {{5516135082934207262ull, 5769921327890267332ull, 18169386593647067875ull, 4666020762677425646ull}}, {{6895168853667759078ull, 2600715641435446261ull, 13488361205204059036ull, 5832525953346782058ull}}, {{13230647085512086751ull, 3250894551794307826ull, 7637079469650297987ull, 7290657441683477573ull}}, {{7314936820035332631ull, 17898676245025048495ull, 14158035355490260387ull, 9113321802104346966ull}}, {{11489364540163164750ull, 8880829643926961357ull, 4237086078754024838ull, 5695826126315216854ull}}, {{526647619921792226ull, 1877665018053925889ull, 14519729635297306856ull, 7119782657894021067ull}}, {{5269995543329628186ull, 2347081272567407361ull, 13537976025694245666ull, 8899728322367526334ull}}, {{14822962260649487377ull, 6078611813782017504ull, 3849548997631515637ull, 5562330201479703959ull}}, {{81958752102307605ull, 12209950785654909785ull, 200250228612006642ull, 6952912751849629949ull}}, {{4714134458555272410ull, 6039066445213861423ull, 4861998804192396207ull, 8691140939812037436ull}}, {{9863863064238127112ull, 10691945555899745245ull, 12262121289475023437ull, 5431963087382523397ull}}, {{16941514848725046794ull, 17976617963302069460ull, 1492593556561615584ull, 6789953859228154247ull}}, {{2730149487196756876ull, 4024028380418035210ull, 15700800000984183193ull, 8487442324035192808ull}}, {{6318029447925360952ull, 14044232783829741766ull, 9813000000615114495ull, 5304651452521995505ull}}, {{17120908846761476998ull, 12943604961359789303ull, 16877936019196281023ull, 6630814315652494381ull}}, {{16789450040024458343ull, 11567820183272348725ull, 7262361968713187567ull, 8288517894565617977ull}}, {{12799249284228980417ull, 14147416642186299809ull, 16068191276514211989ull, 5180323684103511235ull}}, {{2164003550004061809ull, 3849212747450711050ull, 15473553077215377083ull, 6475404605129389044ull}}, {{11928376474359853069ull, 199829915886000908ull, 895197272809669738ull, 8094255756411736306ull}}, {{16678607333329683976ull, 4736579715856138471ull, 5171184313933431490ull, 5058909847757335191ull}}, {{16236573148234717066ull, 15144096681674948897ull, 1852294373989401458ull, 6323637309696668989ull}}, {{6460658380011232621ull, 9706748815238910314ull, 6927053985914139727ull, 7904546637120836236ull}}, {{8649597505934408292ull, 12984247037165400802ull, 13552780778051113137ull, 4940341648200522647ull}}, {{1588624845563234557ull, 2395250741174587291ull, 12329289954136503518ull, 6175427060250653309ull}}, {{15820839112236206908ull, 12217435463323009921ull, 1576554387388465685ull, 7719283825313316637ull}}, {{2970495417506547462ull, 9941740173790575153ull, 3291189501331485005ull, 4824552390820822898ull}}, {{8324805290310572231ull, 17038861235665606845ull, 13337358913519132064ull, 6030690488526028622ull}}, {{15017692631315603193ull, 2851832470872456940ull, 7448326605044139273ull, 7538363110657535778ull}}, {{162685857717476188ull, 13311610340363755348ull, 9266890146579974949ull, 4711476944160959861ull}}, {{203357322146845234ull, 2804454870172530473ull, 16195298701652356591ull, 5889346180201199826ull}}, {{4865882671110944447ull, 17340626642997826803ull, 11020751340210669930ull, 7361682725251499783ull}}, {{1470667320461292654ull, 12452411266892507696ull, 9164253156835949509ull, 9202103406564374729ull}}, {{919167075288307909ull, 10088600051021511262ull, 17256873269090938203ull, 5751314629102734205ull}}, {{10372330880965160694ull, 7999064045349501173ull, 7736033531081509042ull, 7189143286378417757ull}}, {{17577099619633838772ull, 775458019832100658ull, 14281727932279274207ull, 8986429107973022196ull}}, {{15597373280698537137ull, 7402190290036144767ull, 18149451994529322187ull, 5616518192483138872ull}}, {{14885030582445783517ull, 4641051844117793055ull, 4240070919452101118ull, 7020647740603923591ull}}, {{13994602209629841492ull, 15024686842002017127ull, 688402630887738493ull, 8775809675754904489ull}}, {{15664155408659732788ull, 11696272285464954656ull, 11959466690373306318ull, 5484881047346815305ull}}, {{1133450187115114369ull, 5396968319976417513ull, 1114275307684469186ull, 6856101309183519132ull}}, {{6028498752321280866ull, 15969582436825297699ull, 1392844134605586482ull, 8570126636479398915ull}}, {{1461968710987106589ull, 14592675041443198966ull, 17011428648624349215ull, 5356329147799624321ull}}, {{11050832925588659044ull, 13629157783376610803ull, 7429227755498272807ull, 6695411434749530402ull}}, {{9201855138558435901ull, 12424761210793375600ull, 63162657518065201ull, 8369264293436913003ull}}, {{5751159461599022439ull, 847946729104777894ull, 16180377725444648415ull, 5230790183398070626ull}}, {{16412321363853553856ull, 14894991466663136079ull, 11002100119951034710ull, 6538487729247588283ull}}, {{15903715686389554416ull, 9395367296474144291ull, 9140939131511405484ull, 8173109661559485354ull}}, {{7633979294779777558ull, 15095476597151115990ull, 10324772975622016331ull, 5108193538474678346ull}}, {{319102081619946140ull, 14257659728011507084ull, 3682594182672744606ull, 6385241923093347933ull}}, {{398877602024932674ull, 8598702623159608047ull, 9214928746768318662ull, 7981552403866684916ull}}, {{7166827528906664778ull, 762503121047367125ull, 14982702503584974972ull, 4988470252416678072ull}}, {{13570220429560718876ull, 953128901309208906ull, 281634055771667099ull, 6235587815520847591ull}}, {{7739403500096122787ull, 15026469181918674845ull, 14187100624996747585ull, 7794484769401059488ull}}, {{7142970196773770694ull, 2474014211058089922ull, 8866937890622967241ull, 4871552980875662180ull}}, {{18152084782821989175ull, 7704203782250000306ull, 11083672363278709051ull, 6089441226094577725ull}}, {{13466733941672710661ull, 5018568709385112479ull, 19532398816222602ull, 7611801532618222157ull}}, {{15334237741186526019ull, 7748291461793083203ull, 2318050758473833078ull, 4757375957886388848ull}}, {{14556111158055769620ull, 461992290386578196ull, 2897563448092291348ull, 5946719947357986060ull}}, {{18195138947569712025ull, 577490362983222745ull, 3621954310115364185ull, 7433399934197482575ull}}, {{4454432814589988160ull, 11890146522932983976ull, 9181250471463184471ull, 4645874958873426609ull}}, {{5568041018237485200ull, 10250997135238842066ull, 16088249107756368493ull, 5807343698591783261ull}}, {{16183423309651632307ull, 17425432437475940486ull, 6275253329413296904ull, 7259179623239729077ull}}, {{11005907100209764576ull, 3335046473135373992ull, 12455752680194009035ull, 9073974529049661346ull}}, {{6878691937631102860ull, 18225305110205466409ull, 12396531443548643550ull, 5671234080656038341ull}}, {{13210050940466266479ull, 13558259350902057203ull, 1660606249153640726ull, 7089042600820047927ull}}, {{11900877657155445195ull, 7724452151772795696ull, 15910815866724214620ull, 8861303251025059908ull}}, {{7438048535722153247ull, 14051154631712773118ull, 720887879847858329ull, 5538314531890662443ull}}, {{74188632797915751ull, 3728885234358802686ull, 14736167905091986624ull, 6922893164863328053ull}}, {{9316107827852170496ull, 4661106542948503357ull, 4585151826082819568ull, 8653616456079160067ull}}, {{8128410401621300512ull, 2913191589342814598ull, 559876882088068278ull, 5408510285049475042ull}}, {{937140965171849832ull, 12864861523533294056ull, 9923218139464861155ull, 6760637856311843802ull}}, {{1171426206464812290ull, 11469390885989229666ull, 3180650637476300636ull, 8450797320389804753ull}}, {{5343827397467895585ull, 16391741340598044349ull, 13517121694491157657ull, 5281748325243627970ull}}, {{11291470265262257386ull, 6654618620465391724ull, 7673030081259171264ull, 6602185406554534963ull}}, {{14114337831577821732ull, 8318273275581739655ull, 4979601583146576176ull, 8252731758193168704ull}}, {{15738990172377220439ull, 5198920797238587284ull, 3112250989466610110ull, 5157957348870730440ull}}, {{1226993641761973932ull, 15722023033403009914ull, 3890313736833262637ull, 6447446686088413050ull}}, {{10757114089057243223ull, 5817470736471598680ull, 14086264207896354105ull, 8059308357610516312ull}}, {{6723196305660777015ull, 15165134256363218935ull, 8803915129935221315ull, 5037067723506572695ull}}, {{3792309363648583364ull, 14344731802026635765ull, 6393207893991638740ull, 6296334654383215869ull}}, {{9352072722988117109ull, 17930914752533294706ull, 12603195885916936329ull, 7870418317979019836ull}}, {{10456731470294961097ull, 4289292692692227335ull, 17100369465552861014ull, 4919011448736887397ull}}, {{8459228319441313468ull, 14584987902720059977ull, 7540403776658912555ull, 6148764310921109247ull}}, {{15185721417729029738ull, 13619548859972687067ull, 4813818702396252790ull, 7685955388651386559ull}}, {{7185232876866949635ull, 3900532019055541513ull, 9926165716638739850ull, 4803722117907116599ull}}, {{13593227114511074947ull, 14099037060674202699ull, 7796021127371036908ull, 6004652647383895749ull}}, {{12379847874711455780ull, 17623796325842753374ull, 14356712427641184039ull, 7505815809229869686ull}}, {{3125718903267271959ull, 17932401731292802715ull, 4361259248848352120ull, 4691134880768668554ull}}, {{17742206684366253660ull, 3968758090406451777ull, 14674946097915215959ull, 5863918600960835692ull}}, {{8342700300175653363ull, 349261594580676818ull, 18343682622394019949ull, 7329898251201044615ull}}, {{1205003338364790896ull, 5048263011653233927ull, 18317917259565137032ull, 9162372814001305769ull}}, {{7670656114119076166ull, 3155164382283271204ull, 4531169259587128789ull, 5726483008750816106ull}}, {{9588320142648845207ull, 8555641496281476909ull, 14887333611338686794ull, 7158103760938520132ull}}, {{16597086196738444413ull, 1471179833497070328ull, 162422940463806877ull, 8947629701173150166ull}}, {{10373178872961527758ull, 3225330405149362907ull, 13936572393072043010ull, 5592268563233218853ull}}, {{8354787572774521794ull, 13255035043291479442ull, 3585657436057890050ull, 6990335704041523567ull}}, {{1220112429113376434ull, 7345421767259573495ull, 18317129850354526275ull, 8737919630051904458ull}}, {{7680099295836942128ull, 2285045595323539482ull, 16059892174898966826ull, 5461199768782440286ull}}, {{376752082941401851ull, 12079679031009200161ull, 10851493181768932724ull, 6826499710978050358ull}}, {{5082626122104140218ull, 15099598788761500201ull, 4340994440356390097ull, 8533124638722562948ull}}, {{14705856372383557396ull, 2519720215334855769ull, 11936493562077519619ull, 5333202899201601842ull}}, {{4547262410197283033ull, 16984708324450733424ull, 5697244915742123715ull, 6666503624002002303ull}}, {{5684078012746603792ull, 16619199387136028876ull, 2509870126250266740ull, 8333129530002502879ull}}, {{12775920794821403178ull, 1163627580105242239ull, 8486197856547498569ull, 5208205956251564299ull}}, {{11358214975099366068ull, 6066220493558940703ull, 5996061302256985307ull, 6510257445314455374ull}}, {{9586082700446819681ull, 2971089598521287975ull, 16718448664676007442ull, 8137821806643069217ull}}, {{12908830715420344157ull, 6468617017503192888ull, 3531501387781422795ull, 5086138629151918261ull}}, {{16136038394275430196ull, 3474085253451603206ull, 9026062753154166398ull, 6357673286439897826ull}}, {{10946675955989511937ull, 13565978603669279816ull, 2059206404587932189ull, 7947091608049872283ull}}, {{6841672472493444961ull, 10784579636506993837ull, 17427905067363315282ull, 4966932255031170176ull}}, {{13163776609044194105ull, 4257352508778966488ull, 3338137260494592487ull, 6208665318788962721ull}}, {{16454720761305242631ull, 710004617546320206ull, 8784357594045628513ull, 7760831648486203401ull}}, {{5672514457388388741ull, 11972967932034919889ull, 17019438542346987580ull, 4850519780303877125ull}}, {{11702329090162873830ull, 14966209915043649861ull, 7439240122651570763ull, 6063149725379846407ull}}, {{792853307421428575ull, 14096076375377174423ull, 4687364134887075550ull, 7578937156724808009ull}}, {{7413062344779474715ull, 4198361716183346110ull, 14458817630372891979ull, 4736835722953005005ull}}, {{42955894119567586ull, 636266126801794734ull, 4238463982683951262ull, 5921044653691256257ull}}, {{9277066904504235291ull, 10018704695357019225ull, 9909765996782326981ull, 7401305817114070321ull}}, {{17327381861383616817ull, 8567533443811830967ull, 17722818794057424123ull, 4625816135696293950ull}}, {{17047541308302133117ull, 6097730786337400805ull, 12930151455717004346ull, 5782270169620367438ull}}, {{7474368580095502684ull, 16845535519776526815ull, 6939317282791479624ull, 7227837712025459298ull}}, {{4731274706691990451ull, 2610175326011106903ull, 17897518640344125339ull, 9034797140031824122ull}}, {{9874575719323575888ull, 17772260643252799478ull, 15797635168642466240ull, 5646748212519890076ull}}, {{3119847612299694052ull, 3768581730356447732ull, 1300299887093531185ull, 7058435265649862596ull}}, {{3899809515374617565ull, 9322413181372947569ull, 1625374858866913981ull, 8823044082062328245ull}}, {{13966595993177605738ull, 8132351247571786182ull, 3321702296005515190ull, 5514402551288955153ull}}, {{8234872954617231365ull, 942067022609956920ull, 8763813888434281892ull, 6893003189111193941ull}}, {{10293591193271539206ull, 1177583778262446150ull, 15566453378970240269ull, 8616253986388992426ull}}, {{1821808477367324100ull, 3041832870627722796ull, 14340719380283788072ull, 5385158741493120266ull}}, {{2277260596709155124ull, 3802291088284653495ull, 8702527188499959282ull, 6731448426866400333ull}}, {{16681633801168607617ull, 13976235897210592676ull, 15489845004052337006ull, 8414310533583000416ull}}, {{1202649088875603953ull, 4123461417329232519ull, 9681153127532710629ull, 5258944083489375260ull}}, {{15338369416376668653ull, 9766012790088928552ull, 12101441409415888286ull, 6573680104361719075ull}}, {{726217696761284200ull, 2984143950756384883ull, 10515115743342472454ull, 8217100130452148844ull}}, {{16594787124971660289ull, 15700148024504904263ull, 15795319376443821091ull, 5135687581532593027ull}}, {{16131797887787187458ull, 15013499012203742425ull, 15132463202127388460ull, 6419609476915741284ull}}, {{6329689304451820610ull, 320129691545126416ull, 468834928949683960ull, 8024511846144676606ull}}, {{3956055815282387881ull, 200081057215704010ull, 14128079885875716187ull, 5015319903840422878ull}}, {{14168441805957760660ull, 14085159376801793724ull, 8436727820489869425ull, 6269149879800528598ull}}, {{17710552257447200824ull, 3771391165720078443ull, 1322537738757560974ull, 7836437349750660748ull}}, {{8763252151690806563ull, 16192177533857212739ull, 10049958123578251416ull, 4897773343594162967ull}}, {{6342379171186120300ull, 1793477843611964308ull, 7950761636045426367ull, 6122216679492703709ull}}, {{7927973963982650375ull, 16076905359797119097ull, 14550138063484170862ull, 7652770849365879636ull}}, {{16484198773557626245ull, 5436379831445811531ull, 18317208326532382597ull, 4782981780853674772ull}}, {{15993562448519644902ull, 11407160807734652318ull, 4449766334455926630ull, 5978727226067093466ull}}, {{10768581023794780319ull, 5035578972813539590ull, 14785579954924684096ull, 7473409032583866832ull}}, {{2118677121444349796ull, 3147236858008462244ull, 9240987471827927560ull, 4670880645364916770ull}}, {{2648346401805437244ull, 3934046072510577805ull, 2327862302930133642ull, 5838600806706145963ull}}, {{7922119020684184459ull, 14140929627492998064ull, 16744885933944830764ull, 7298251008382682453ull}}, {{9902648775855230574ull, 17676162034366247580ull, 7096049362148874743ull, 9122813760478353067ull}}, {{15412527521764294917ull, 17965130299119986593ull, 2129187842129352762ull, 5701758600298970667ull}}, {{5430601346923204934ull, 13233040837045207434ull, 16496542857943854665ull, 7127198250373713333ull}}, {{16011623720508781975ull, 2706242991024345580ull, 6785620517147654620ull, 8908997812967141667ull}}, {{783892788463212927ull, 10914773906244991796ull, 1935169814003590185ull, 5568123633104463542ull}}, {{979865985579016158ull, 18255153401233627649ull, 11642334304359263539ull, 6960154541380579427ull}}, {{5836518500401158102ull, 18207255733114646657ull, 9941231862021691520ull, 8700193176725724284ull}}, {{15177039108819193574ull, 11379534833196654160ull, 15436641950618333008ull, 5437620735453577677ull}}, {{524554812314440351ull, 14224418541495817701ull, 5460744382990752548ull, 6797025919316972097ull}}, {{5267379533820438343ull, 17780523176869772126ull, 11437616497165828589ull, 8496282399146215121ull}}, {{17127170263919937677ull, 13418669994757301530ull, 230981283087561012ull, 5310176499466384451ull}}, {{12185590793045146288ull, 16773337493446626913ull, 14123784659141614977ull, 6637720624332980563ull}}, {{1396930436024269147ull, 7131613811526119930ull, 13043044805499630818ull, 8297150780416225704ull}}, {{5484767540942556121ull, 9068944650631212860ull, 8151903003437269261ull, 5185719237760141065ull}}, {{6855959426178195151ull, 15947866831716403979ull, 14801564772723974480ull, 6482149047200176331ull}}, {{3958263264295356035ull, 1488089465935953358ull, 13890269947477580197ull, 8102686309000220414ull}}, {{16308972595466761234ull, 3235898925423664800ull, 4069732698746099719ull, 5064178943125137759ull}}, {{1939471670623899927ull, 17879931712061744713ull, 475479855005236744ull, 6330223678906422199ull}}, {{7036025606707262812ull, 3903170566367629275ull, 14429407874038709643ull, 7912779598633027748ull}}, {{2091672994978345306ull, 133638594766074345ull, 18241751958128969335ull, 4945487249145642342ull}}, {{7226277262150319536ull, 14002106298739756643ull, 13578817910806435860ull, 6181859061432052928ull}}, {{4421160559260511516ull, 17502632873424695804ull, 16973522388508044825ull, 7727323826790066160ull}}, {{11986597386392595506ull, 4021616518249353021ull, 10608451492817528016ull, 4829577391743791350ull}}, {{1148188677708580670ull, 5027020647811691277ull, 4037192329167134212ull, 6036971739679739188ull}}, {{6046921865563113741ull, 6283775809764614096ull, 5046490411458917765ull, 7546214674599673985ull}}, {{3779326165976946088ull, 6233202890316577762ull, 14683271553230293363ull, 4716384171624796240ull}}, {{13947529744325958418ull, 3179817594468334298ull, 18354089441537866704ull, 5895480214530995300ull}}, {{8211040143552672215ull, 3974771993085417873ull, 4495867728212781764ull, 7369350268163744126ull}}, {{14875486197868228173ull, 4968464991356772341ull, 14843206697120753013ull, 9211687835204680157ull}}, {{11603021882881336560ull, 5411133628811676665ull, 11582847194914164585ull, 5757304897002925098ull}}, {{668719298319506988ull, 11375603054441983736ull, 5255186956787929923ull, 7196631121253656373ull}}, {{835899122899383735ull, 9607817799625091766ull, 11180669714412300308ull, 8995788901567070466ull}}, {{14357495007094278546ull, 15228258161620458161ull, 11599604589935075596ull, 5622368063479419041ull}}, {{4111810703585684471ull, 588578628316021086ull, 664447682136680784ull, 7027960079349273802ull}}, {{14363135416336881397ull, 735723285395026357ull, 10053931639525626788ull, 8784950099186592252ull}}, {{11282802644424244825ull, 9683199090226667281ull, 15507079311558292550ull, 5490593811991620157ull}}, {{268445250248142319ull, 2880626825928558294ull, 5548791084165701976ull, 6863242264989525197ull}}, {{9558928599664953707ull, 3600783532410697867ull, 11547674873634515374ull, 8579052831236906496ull}}, {{3668487365576902115ull, 16085547763038849879ull, 7217296796021572108ull, 5361908019523066560ull}}, {{18420667262253291356ull, 1660190630089010732ull, 9021620995026965136ull, 6702385024403833200ull}}, {{4579090004107062578ull, 2075238287611263416ull, 11277026243783706420ull, 8377981280504791500ull}}, {{2861931252566914112ull, 10520395966611815443ull, 16271513439219592320ull, 5236238300315494687ull}}, {{17412472120990806351ull, 13150494958264769303ull, 15727705780597102496ull, 6545297875394368359ull}}, {{17153904132811120035ull, 16438118697830961629ull, 15047946207318990216ull, 8181622344242960449ull}}, {{13027033092220643974ull, 10273824186144351018ull, 2487437351933287029ull, 5113513965151850281ull}}, {{7060419328421029160ull, 17453966251107826677ull, 7720982708343996690ull, 6391892456439812851ull}}, {{13437210178953674353ull, 12594085777030007538ull, 5039542367002607959ull, 7989865570549766064ull}}, {{13009942380273434375ull, 14788832638284836567ull, 3149713979376629974ull, 4993665981593603790ull}}, {{11650741956914405065ull, 9262668761001269901ull, 13160514511075563276ull, 6242082476992004737ull}}, {{728369390860842619ull, 11578335951251587377ull, 2615585083562290383ull, 7802603096240005922ull}}, {{11984445915356496397ull, 14153988997173323966ull, 6246426695653819393ull, 4876626935150003701ull}}, {{5757185357340844688ull, 3857428191184491246ull, 12419719387994662146ull, 6095783668937504626ull}}, {{16419853733530831668ull, 14045157275835389865ull, 6301277198138551874ull, 7619729586171880783ull}}, {{3344879555815687937ull, 13389909315824506570ull, 10855827276477676777ull, 4762330991357425489ull}}, {{13404471481624385729ull, 2902328589498469500ull, 18181470114024483876ull, 5952913739196781861ull}}, {{16755589352030482161ull, 3627910736873086875ull, 8891779587248441133ull, 7441142173995977327ull}}, {{8166400335805357399ull, 4573287219759373249ull, 12474891269671357564ull, 4650713858747485829ull}}, {{14819686438184084652ull, 5716609024699216561ull, 1758556031807033243ull, 5813392323434357287ull}}, {{4689549992447942103ull, 2534075262446632798ull, 16033253095040955266ull, 7266740404292946608ull}}, {{15085309527414703437ull, 12390966114913066805ull, 1594822295091642466ull, 9083425505366183261ull}}, {{11734161463847883600ull, 12356039840248054657ull, 3302606943645970493ull, 5677140940853864538ull}}, {{832643774527690788ull, 1609991745027904610ull, 13351630716412238925ull, 7096426176067330672ull}}, {{10264176755014389293ull, 6624175699712268666ull, 16689538395515298656ull, 8870532720084163340ull}}, {{11026796490311381212ull, 4140109812320167916ull, 1207589460342285852ull, 5544082950052602088ull}}, {{13783495612889226515ull, 5175137265400209895ull, 1509486825427857315ull, 6930103687565752610ull}}, {{12617683497684145240ull, 1857235563322874465ull, 11110230568639597452ull, 8662629609457190762ull}}, {{968523158411508919ull, 10384144263931572349ull, 11555580123827136311ull, 5414143505910744226ull}}, {{5822339966441774053ull, 8368494311487077532ull, 5221103117929144581ull, 6767679382388430283ull}}, {{7277924958052217566ull, 15072303907786234819ull, 1914692878984042822ull, 8459599227985537854ull}}, {{2242860089568942027ull, 4808503923939008858ull, 15031741104647190476ull, 5287249517490961158ull}}, {{12026947148815953341ull, 6010629904923761072ull, 9566304343954212287ull, 6609061896863701448ull}}, {{15033683936019941677ull, 2901601362727313436ull, 11957880429942765359ull, 8261327371079626810ull}}, {{172680423157687740ull, 8731029879345652754ull, 12085361287141616253ull, 5163329606924766756ull}}, {{9439222565801885483ull, 15525473367609453846ull, 15106701608927020316ull, 6454162008655958445ull}}, {{2575656170397581046ull, 960097635802265692ull, 5048318955876611684ull, 8067702510819948057ull}}, {{10833157143353263962ull, 9823433059231191865ull, 14684414393491352062ull, 5042314069262467535ull}}, {{18153132447618967856ull, 3055919287184214023ull, 13743831973436802174ull, 6302892586578084419ull}}, {{18079729541096321916ull, 13043271145835043337ull, 12568103948368614813ull, 7878615733222605524ull}}, {{4382301935544119342ull, 10457887475360596038ull, 17078437004585160066ull, 4924134833264128452ull}}, {{14701249456284924985ull, 3848987307345969239ull, 2901302182021898467ull, 6155168541580160566ull}}, {{13764875801928768327ull, 199548115755073645ull, 12849999764382148892ull, 7693960676975200707ull}}, {{10908890385419174157ull, 9348089609201696836ull, 5725406843525149105ull, 4808725423109500442ull}}, {{13636112981773967696ull, 16296798029929508949ull, 16380130591261212189ull, 6010906778886875552ull}}, {{3210083171935295907ull, 6535939482129722475ull, 2028419165366963621ull, 7513633473608594441ull}}, {{18147203046955417606ull, 6390805185544770498ull, 12796977024422822023ull, 4696020921005371525ull}}, {{13460631771839496200ull, 3376820463503575219ull, 2161163225246363817ull, 5870026151256714407ull}}, {{12214103696371982345ull, 8832711597806856928ull, 16536512086840118483ull, 7337532689070893008ull}}, {{15267629620464977932ull, 6429203478831183256ull, 2223896034840596488ull, 9171915861338616261ull}}, {{9542268512790611207ull, 4018252174269489535ull, 3695778030989066757ull, 5732447413336635163ull}}, {{7316149622560876105ull, 9634501236264249823ull, 8036520308945542ull, 7165559266670793954ull}}, {{4533501009773707227ull, 2819754508475536471ull, 9233417687240957736ull, 8956949083338492442ull}}, {{9750967158749648873ull, 1762346567797210294ull, 10382572072952986489ull, 5598093177086557776ull}}, {{2965336911582285284ull, 6814619228173900772ull, 12978215091191233111ull, 6997616471358197220ull}}, {{3706671139477856604ull, 3906588016789988061ull, 16222768863989041389ull, 8747020589197746525ull}}, {{4622512471387354330ull, 4747460519707436490ull, 12445073549206844820ull, 5466887868248591578ull}}, {{15001512626088968720ull, 5934325649634295612ull, 6332969899653780217ull, 6833609835310739473ull}}, {{305146708901659284ull, 12029593080470257420ull, 12527898392994613175ull, 8542012294138424341ull}}, {{9414088729918312861ull, 14436024702934992743ull, 10135779504835327186ull, 5338757683836515213ull}}, {{7155924893970503172ull, 8821658841813965121ull, 17281410399471546887ull, 6673447104795644016ull}}, {{13556592135890516869ull, 6415387533840068497ull, 3155018925629881993ull, 8341808880994555021ull}}, {{1555341057290491187ull, 15538832254718512571ull, 4277729837732370197ull, 5213630550621596888ull}}, {{15779234376895277696ull, 5588482263115977001ull, 5347162297165462747ull, 6517038188276996110ull}}, {{5888984915836933408ull, 2373916810467583348ull, 15907324908311604242ull, 8146297735346245137ull}}, {{12903987609252859188ull, 6095384024969627496ull, 3024549040053670795ull, 5091436084591403211ull}}, {{16129984511566073985ull, 3007544012784646466ull, 17615744355349252206ull, 6364295105739254013ull}}, {{10939108602602816673ull, 12982802052835583891ull, 8184622388904401545ull, 7955368882174067517ull}}, {{4531099867413066469ull, 1196722255381158076ull, 7421232002278944918ull, 4972105551358792198ull}}, {{5663874834266333086ull, 10719274856081223403ull, 53167965993905339ull, 6215131939198490248ull}}, {{2468157524405528453ull, 8787407551674141350ull, 66459957492381674ull, 7768914923998112810ull}}, {{15377656508035618995ull, 10103815738223726247ull, 4653223491860126450ull, 4855571827498820506ull}}, {{14610384616617135840ull, 3406397635924882001ull, 15039901401679933871ull, 6069464784373525632ull}}, {{4427922715489256088ull, 18093055100188266214ull, 353132678390365722ull, 7586830980466907041ull}}, {{16602509752462948767ull, 15919845456045054287ull, 11749922970062448336ull, 4741769362791816900ull}}, {{16141451172151298055ull, 1453062746346766243ull, 14687403712578060421ull, 5927211703489771125ull}}, {{15565127946761734664ull, 6428014451360845708ull, 4524196585440411814ull, 7409014629362213907ull}}, {{504832929871308357ull, 17852567087382692280ull, 521779856686563431ull, 4630634143351383692ull}}, {{631041162339135447ull, 17704022840800977446ull, 652224820858204289ull, 5788292679189229615ull}}, {{10012173489778695116ull, 8294970495719058095ull, 14650339081354919074ull, 7235365848986537018ull}}, {{7903530843795980991ull, 1145341082794046811ull, 9089551814838873035ull, 9044207311233171273ull}}, {{2633863768158794168ull, 16856739241242136921ull, 17210184930342765406ull, 5652629569520732045ull}}, {{7904015728625880613ull, 11847552014697895343ull, 7677673107646293046ull, 7065786961900915057ull}}, {{5268333642354962863ull, 5586067981517593371ull, 14208777402985254212ull, 8832233702376143821ull}}, {{986865517258157837ull, 12714664525303271665ull, 11186328886079477834ull, 5520146063985089888ull}}, {{5845267915000085201ull, 6669958619774313773ull, 13982911107599347293ull, 6900182579981362360ull}}, {{11918270912177494405ull, 12949134293145280120ull, 17478638884499184116ull, 8625228224976702950ull}}, {{7448919320110934003ull, 17316580970070575883ull, 6312463284384602168ull, 5390767640610439344ull}}, {{4699463131711279600ull, 3198982138878668238ull, 7890579105480752711ull, 6738459550763049180ull}}, {{15097700951493875308ull, 17833785728880499009ull, 9863223881850940888ull, 8423074438453811475ull}}, {{2518534067042590211ull, 11146116080550311881ull, 3858671916943144103ull, 5264421524033632172ull}}, {{7759853602230625668ull, 9320959082260501947ull, 4823339896178930129ull, 6580526905042040215ull}}, {{5088130984360894181ull, 16262884871253015338ull, 1417488851796274757ull, 8225658631302550269ull}}, {{7791767883652946767ull, 12470146053746828538ull, 3191773541586365675ull, 5141036644564093918ull}}, {{516337817711407651ull, 10975996548756147769ull, 13213088963837732902ull, 6426295805705117397ull}}, {{5257108290566647468ull, 4496623649090408903ull, 2681303149515002416ull, 8032869757131396747ull}}, {{10203221709245236523ull, 2810389780681505564ull, 17816715532942734174ull, 5020543598207122966ull}}, {{12754027136556545654ull, 12736359262706657763ull, 13047522379323641909ull, 6275679497758903708ull}}, {{11330847902268294164ull, 2085391023101158492ull, 16309402974154552387ull, 7844599372198629635ull}}, {{16305151975772459660ull, 17444270453934081721ull, 7887533849632901289ull, 4902874607624143522ull}}, {{6546381914433410863ull, 7970280012135438440ull, 636045275186350804ull, 6128593259530179403ull}}, {{8182977393041763579ull, 9962850015169298050ull, 14630114649265102217ull, 7660741574412724253ull}}, {{9726046889078490141ull, 17755996305549281041ull, 11449664665004382837ull, 4787963484007952658ull}}, {{16769244629775500580ull, 8359937326654437589ull, 5088708794400702739ull, 5984954355009940823ull}}, {{7126497731937212013ull, 5838235639890659083ull, 1749199974573490520ull, 7481192943762426029ull}}, {{2148218073247063557ull, 3648897274931661927ull, 3399092993322125527ull, 4675745589851516268ull}}, {{16520330646840993158ull, 18396179648946741120ull, 4248866241652656908ull, 5844681987314395335ull}}, {{2203669234841689831ull, 4548480487473874785ull, 699396783638433232ull, 7305852484142994169ull}}, {{7366272561979500192ull, 5685600609342343481ull, 5485931997975429444ull, 9132315605178742711ull}}, {{16133135397305657380ull, 12776872417693740483ull, 10346236526375725258ull, 5707697253236714194ull}}, {{15554733228204683821ull, 6747718485262399796ull, 3709423621114880765ull, 7134621566545892743ull}}, {{996672461546303161ull, 13046334125005387650ull, 25093507966213052ull, 8918276958182365929ull}}, {{5234606306893827380ull, 17377330864983143089ull, 11544898488547352917ull, 5573923098863978705ull}}, {{11154943902044672128ull, 7886605525946765149ull, 596065055402027435ull, 6967403873579973382ull}}, {{108621822273676448ull, 5246570889006068533ull, 9968453356107310102ull, 8709254841974966727ull}}, {{2373731648134741732ull, 17114164860910956545ull, 13147812375208150669ull, 5443284276234354204ull}}, {{7578850578595815069ull, 7557648020856531969ull, 16434765469010188337ull, 6804105345292942755ull}}, {{14085249241672156741ull, 14058746044498052865ull, 15931770817835347517ull, 8505131681616178444ull}}, {{1885751748404016107ull, 11092559287024976993ull, 733984724292316390ull, 5315707301010111528ull}}, {{6968875703932408038ull, 4642327071926445433ull, 917480905365395488ull, 6644634126262639410ull}}, {{13322780648342897951ull, 5802908839908056791ull, 10370223168561520168ull, 8305792657828299262ull}}, {{15244266932855393076ull, 3626818024942535494ull, 1869703461923562201ull, 5191120411142687039ull}}, {{9831961629214465536ull, 9145208549605557272ull, 16172187382686616463ull, 6488900513928358798ull}}, {{12289952036518081920ull, 6819824668579558686ull, 10991862191503494771ull, 8111125642410448498ull}}, {{3069534004396413296ull, 1956547408648530227ull, 11481599888117072136ull, 5069453526506530311ull}}, {{17671975560777680332ull, 2445684260810662783ull, 9740313841718952266ull, 6336816908133162889ull}}, {{17478283432544712511ull, 12280477362868104287ull, 16787078320576078236ull, 7921021135166453611ull}}, {{17841456172981527176ull, 16898670388647340987ull, 8186080941146354945ull, 4950638209479033507ull}}, {{17690134197799521066ull, 7288279930527012522ull, 5620915158005555778ull, 6188297761848791884ull}}, {{12889295710394625524ull, 18333721950013541461ull, 7026143947506944722ull, 7735372202310989855ull}}, {{10361652828210334905ull, 16070262237185851317ull, 11308868994832922307ull, 4834607626444368659ull}}, {{17563752053690306535ull, 15476141778054926242ull, 9524400225113764980ull, 6043259533055460824ull}}, {{12731318030258107360ull, 898433148859106187ull, 11905500281392206226ull, 7554074416319326030ull}}, {{5651230759697623148ull, 5173206736464329271ull, 2829251657442740987ull, 4721296510199578769ull}}, {{2452352431194641031ull, 1854822402153023685ull, 8148250590230814138ull, 5901620637749473461ull}}, {{7677126557420689193ull, 11541900039546055414ull, 14796999256215905576ull, 7377025797186841826ull}}, {{373036159921085683ull, 14427375049432569268ull, 9272877033415106162ull, 9221282246483552283ull}}, {{9456519636805454360ull, 13628795424322743696ull, 3489705136670747399ull, 5763301404052220177ull}}, {{11820649546006817950ull, 12424308261976041716ull, 8973817439265822153ull, 7204126755065275221ull}}, {{14775811932508522437ull, 1695327272187888433ull, 15828957817509665596ull, 9005158443831594026ull}}, {{2317353430176744667ull, 10282951581972206079ull, 14504784654370928901ull, 5628224027394746266ull}}, {{16731749843003094546ull, 17465375495892645502ull, 8907608781108885318ull, 7035280034243432833ull}}, {{11691315266899092375ull, 12608347333011031070ull, 15746196994813494552ull, 8794100042804291041ull}}, {{2695386023384544830ull, 7880217083131894419ull, 2923844094117352239ull, 5496312526752681901ull}}, {{17204290584512844750ull, 5238585335487480119ull, 8266491136074078203ull, 6870390658440852376ull}}, {{16893677212213668033ull, 1936545650931962245ull, 10333113920092597754ull, 8587988323051065470ull}}, {{12864391266847236473ull, 5822027050259864307ull, 1846510181630485692ull, 5367492701906915919ull}}, {{11468803065131657687ull, 7277533812824830384ull, 16143195782320270827ull, 6709365877383644898ull}}, {{14336003831414572109ull, 4485231247603650076ull, 10955622691045562726ull, 8386707346729556123ull}}, {{18183374431488883376ull, 16638327585034445009ull, 4541421172689782751ull, 5241692091705972577ull}}, {{8894159984078940508ull, 16186223462865668358ull, 10288462484289616343ull, 6552115114632465721ull}}, {{1894327943243899827ull, 15621093310154697544ull, 17472264123789408333ull, 8190143893290582151ull}}, {{1183954964527437392ull, 12069026328060379917ull, 17837694105009462064ull, 5118839933306613844ull}}, {{6091629724086684644ull, 15086282910075474896ull, 3850373557552275964ull, 6398549916633267306ull}}, {{7614537155108355805ull, 411109563884792004ull, 14036338983795120764ull, 7998187395791584132ull}}, {{13982457758797498186ull, 9480315514282770810ull, 17996083901726726285ull, 4998867122369740082ull}}, {{8254700161642096924ull, 16462080411280851417ull, 13271732840303632048ull, 6248583902962175103ull}}, {{14930061220480009059ull, 2130856440391512655ull, 11977980031952152157ull, 7810729878702718879ull}}, {{16248817290441087518ull, 3637628284458389361ull, 14403766547611176954ull, 4881706174189199299ull}}, {{6475963557769195686ull, 13770407392427762510ull, 13393022166086583288ull, 6102132717736499124ull}}, {{17318326484066270415ull, 17213009240534703137ull, 16741277707608229110ull, 7627665897170623905ull}}, {{3906425024900337154ull, 6146444756906801557ull, 3545769539614061338ull, 4767291185731639941ull}}, {{9494717299552809346ull, 16906427982988277754ull, 9043897942944964576ull, 5959113982164549926ull}}, {{2645024587586235874ull, 2686290905025795577ull, 2081500391826429913ull, 7448892477705687408ull}}, {{13182355413309867182ull, 13208146861709591995ull, 1300937744891518695ull, 4655557798566054630ull}}, {{11866258248209946073ull, 11898497558709602090ull, 10849544217969174177ull, 5819447248207568287ull}}, {{5609450773407656783ull, 1038063893104838901ull, 8950244254034079818ull, 7274309060259460359ull}}, {{11623499485186958883ull, 10520951903235824434ull, 6576119299115211868ull, 9092886325324325449ull}}, {{11876373196669237206ull, 15798966976377166079ull, 15639289608015477177ull, 5683053953327703405ull}}, {{10233780477409158603ull, 5913650665189293887ull, 5714053954737182760ull, 7103817441659629257ull}}, {{8180539578334060350ull, 7392063331486617359ull, 11754253461848866354ull, 8879771802074536571ull}}, {{12030366264099869575ull, 9231725600606523753ull, 5040565404441847519ull, 5549857376296585357ull}}, {{1202899774842673256ull, 6927970982330766788ull, 10912392773979697303ull, 6937321720370731696ull}}, {{1503624718553341570ull, 4048277709486070581ull, 13640490967474621629ull, 8671652150463414620ull}}, {{3245608458309532434ull, 4836016577642488065ull, 17748678891526414326ull, 5419782594039634137ull}}, {{8668696591314303446ull, 15268392758907885889ull, 8350790559125854195ull, 6774728242549542672ull}}, {{15447556757570267211ull, 14473804930207469457ull, 10438488198907317744ull, 8468410303186928340ull}}, {{2737193945840335151ull, 9046128081379668411ull, 15747427161171849398ull, 5292756439491830212ull}}, {{17256550487582582651ull, 2084288064869809705ull, 1237539877755260132ull, 6615945549364787766ull}}, {{7735630054196064602ull, 2605360081087262132ull, 10770296884048850973ull, 8269931936705984707ull}}, {{14058140820727316184ull, 3934193059893232784ull, 4425592543316837906ull, 5168707460441240442ull}}, {{17572676025909145230ull, 14141113361721316788ull, 14755362716000823190ull, 6460884325551550552ull}}, {{3519100958676879922ull, 8453019665296870178ull, 18444203395001028988ull, 8076105406939438190ull}}, {{6811124117600437855ull, 14506509327665319669ull, 6915941103448255213ull, 5047565879337148869ull}}, {{13125591165427935223ull, 4298078604299485874ull, 13256612397737706921ull, 6309457349171436086ull}}, {{7183616919930143220ull, 9984284273801745247ull, 7347393460317357843ull, 7886821686464295108ull}}, {{11407289602597421369ull, 3934334661912396827ull, 13815492949553124460ull, 4929263554040184442ull}}, {{9647425984819388807ull, 4917918327390496034ull, 8045994150086629767ull, 6161579442550230553ull}}, {{2835910444169460201ull, 1535711890810732139ull, 14669178706035675113ull, 7701974303187788191ull}}, {{17913345092101770290ull, 12489034977825177346ull, 16085765718913378801ull, 4813733939492367619ull}}, {{13168309328272437054ull, 1776235666999307971ull, 15495521130214335598ull, 6017167424365459524ull}}, {{11848700641913158413ull, 11443666620603910772ull, 922657339058367881ull, 7521459280456824406ull}}, {{16628809938050499816ull, 234762610236362376ull, 14411718892193643638ull, 4700912050285515253ull}}, {{2339268348853573154ull, 9516825299650228779ull, 4179590559959890835ull, 5876140062856894067ull}}, {{16759143491349130155ull, 7284345606135398069ull, 612802181522475640ull, 7345175078571117584ull}}, {{7113871308904248982ull, 9105432007669247587ull, 766002726903094550ull, 9181468848213896980ull}}, {{2140326558851461662ull, 1079208986365891838ull, 9702123741169209902ull, 5738418030133685612ull}}, {{11898780235419102885ull, 10572383269812140605ull, 12127654676461512377ull, 7173022537667107015ull}}, {{1038417238991714894ull, 17827165105692563661ull, 10547882327149502567ull, 8966278172083883769ull}}, {{2954853783583515761ull, 18059507218698934144ull, 18121641500536908864ull, 5603923857552427355ull}}, {{3693567229479394701ull, 4127639949664116064ull, 18040365857243748177ull, 7004904821940534194ull}}, {{4616959036849243376ull, 9771235955507532984ull, 13327085284699909413ull, 8756131027425667743ull}}, {{2885599398030777110ull, 8412865481405902067ull, 15246957330578525239ull, 5472581892141042339ull}}, {{17442057302820635100ull, 5904395833329989679ull, 14447010644795768645ull, 6840727365176302924ull}}, {{17190885610098405971ull, 11992180810089875003ull, 18058763305994710806ull, 8550909206470378655ull}}, {{8438460497097809780ull, 2883426987878783973ull, 18204256093887776110ull, 5344318254043986659ull}}, {{15159761639799650129ull, 12827655771703255774ull, 18143634098932332233ull, 6680397817554983324ull}}, {{9726330012894786853ull, 2199511659346906006ull, 4232798549955863676ull, 8350497271943729156ull}}, {{1467270239631853879ull, 10598066823946592062ull, 11868871130577190605ull, 5219060794964830722ull}}, {{11057459836394593157ull, 17859269548360627981ull, 5612716876366712448ull, 6523825993706038403ull}}, {{18433510813920629350ull, 3877342861741233360ull, 2404210077031002657ull, 8154782492132548004ull}}, {{11520944258700393344ull, 13952554334656740610ull, 10726003334999152468ull, 5096739057582842502ull}}, {{5177808286520715872ull, 17440692918320925763ull, 4184132131894164777ull, 6370923821978553128ull}}, {{1860574339723506935ull, 7965808092618993492ull, 5230165164867705972ull, 7963654777473191410ull}}, {{10386230999181967643ull, 14202002094741646740ull, 7880539246469704136ull, 4977284235920744631ull}}, {{12982788748977459553ull, 17752502618427058425ull, 5238988039659742266ull, 6221605294900930789ull}}, {{2393427880939660730ull, 12967256236179047224ull, 11160421068002065737ull, 7777006618626163486ull}}, {{1495892425587287956ull, 1187006119970822659ull, 2363577149073903182ull, 4860629136641352179ull}}, {{15704923587266273657ull, 10707129686818304131ull, 16789529491624542689ull, 6075786420801690223ull}}, {{15019468465655454167ull, 17995598126950268068ull, 16375225846103290457ull, 7594733026002112779ull}}, {{163795754179883047ull, 4329719801702835687ull, 7928673144600862584ull, 4746708141251320487ull}}, {{14039802748007017520ull, 5412149752128544608ull, 5299155412323690326ull, 5933385176564150609ull}}, {{17549753435008771900ull, 15988559227015456568ull, 11235630283832000811ull, 7416731470705188261ull}}, {{10968595896880482438ull, 7687006507670966403ull, 9328111936608694459ull, 4635457169190742663ull}}, {{9099058852673215143ull, 4997072116161320100ull, 7048453902333480170ull, 5794321461488428329ull}}, {{11373823565841518929ull, 15469712182056425933ull, 13422253396344238116ull, 7242901826860535411ull}}, {{382221402019734949ull, 890396153860980801ull, 12166130727002909742ull, 9053627283575669264ull}}, {{11768103422330804103ull, 14391555651445276712ull, 7603831704376818588ull, 5658517052234793290ull}}, {{14710129277913505129ull, 17989444564306595890ull, 281417593616247427ull, 7073146315293491613ull}}, {{9164289560537105603ull, 17875119686955856959ull, 4963458010447697188ull, 8841432894116864516ull}}, {{12645210002976772858ull, 1948577767492634791ull, 12325533293384586551ull, 5525895558823040322ull}}, {{11194826485293578169ull, 16270780264647957201ull, 6183544579875957380ull, 6907369448528800403ull}}, {{158475051334808999ull, 1891731257100394886ull, 3117744706417558822ull, 8634211810661000504ull}}, {{13934104962366419336ull, 15017390090969910515ull, 1948590441510974263ull, 5396382381663125315ull}}, {{12805945184530636266ull, 14160051595285000240ull, 16270796107170881541ull, 6745477977078906643ull}}, {{16007431480663295333ull, 3865006438824086588ull, 15726809115536214023ull, 8431847471348633304ull}}, {{781272638559783775ull, 9333158051906135974ull, 9829255697210133764ull, 5269904669592895815ull}}, {{10199962835054505527ull, 11666447564882669967ull, 7674883603085279301ull, 6587380836991119769ull}}, {{8138267525390744004ull, 748001400821173747ull, 14205290522283987031ull, 8234226046238899711ull}}, {{2780574194155521051ull, 7385029903154315448ull, 15795835604068573750ull, 5146391278899312319ull}}, {{3475717742694401313ull, 7915342088118502ull, 15133108486658329284ull, 6432989098624140399ull}}, {{13568019215222777450ull, 9894177610148127ull, 14304699589895523701ull, 8041236373280175499ull}}, {{15397541037155317762ull, 2312026870220036531ull, 6634594234471008361ull, 5025772733300109687ull}}, {{14635240278016759299ull, 7501719606202433568ull, 3681556774661372547ull, 6282215916625137109ull}}, {{18294050347520949123ull, 4765463489325654056ull, 9213631986754103588ull, 7852769895781421386ull}}, {{11433781467200593202ull, 12201786717683309593ull, 10370206010148702646ull, 4907981184863388366ull}}, {{457168778718577791ull, 6028861360249361184ull, 3739385475831102500ull, 6134976481079235458ull}}, {{571460973398222238ull, 7536076700311701480ull, 13897603881643653933ull, 7668720601349044322ull}}, {{357163108373888899ull, 7015890946908507377ull, 13297688444454671612ull, 4792950375843152701ull}}, {{5058139903894749028ull, 8769863683635634221ull, 2787052500286175803ull, 5991187969803940877ull}}, {{10934360898295824189ull, 6350643586117154872ull, 8095501643785107658ull, 7488984962254926096ull}}, {{6833975561434890118ull, 8580838259750609699ull, 5059688527365692286ull, 4680615601409328810ull}}, {{3930783433366224743ull, 1502675787833486316ull, 15547982696061891166ull, 5850769501761661012ull}}, {{4913479291707780929ull, 11101716771646633703ull, 988234296367812341ull, 7313461877202076266ull}}, {{1530163096207338257ull, 42087909276128417ull, 10458664907314541235ull, 9141827346502595332ull}}, {{12485566981198056171ull, 16167206007793437924ull, 15760037603926364079ull, 5713642091564122082ull}}, {{15606958726497570214ull, 15597321491314409501ull, 10476674968053179291ull, 7142052614455152603ull}}, {{5673640352839799055ull, 14884965845715623973ull, 8484157691639086210ull, 8927565768068940754ull}}, {{5851868229738568361ull, 13914789671999652887ull, 9914284575701816785ull, 5579728605043087971ull}}, {{2703149268745822548ull, 3558429034717402397ull, 7781169701199883078ull, 6974660756303859964ull}}, {{7990622604359666089ull, 13671408330251528804ull, 9726462126499853847ull, 8718325945379824955ull}}, {{14217511164579567114ull, 15462159234048287358ull, 3773195819848714702ull, 5448953715862390597ull}}, {{8548516918869683084ull, 10104327005705583390ull, 9328180793238281282ull, 6811192144827988246ull}}, {{1462274111732328047ull, 3407036720277203430ull, 2436853954693075795ull, 8513990181034985308ull}}, {{14748979375114868741ull, 18270299014669109807ull, 10746405758537948179ull, 5321243863146865817ull}}, {{13824538200466198023ull, 18226187749908999355ull, 18044693216599823128ull, 6651554828933582271ull}}, {{12668986732155359624ull, 4335990613676697578ull, 17944180502322391007ull, 8314443536166977839ull}}, {{12529802726024487669ull, 9627523161189017842ull, 18132641841592576235ull, 5196527210104361149ull}}, {{6438881370675833778ull, 7422717933058884399ull, 8830744246708556582ull, 6495659012630451437ull}}, {{3436915694917404319ull, 55025379468829691ull, 15650116326813083632ull, 8119573765788064296ull}}, {{18288973373819235363ull, 34390862168018556ull, 9781322704258177270ull, 5074733603617540185ull}}, {{4414472643564492588ull, 9266360614564799004ull, 16838339398750109491ull, 6343417004521925231ull}}, {{5518090804455615735ull, 6971264749778610851ull, 16436238230010248960ull, 7929271255652406539ull}}, {{1142963743571065883ull, 4357040468611631782ull, 7966805884542711648ull, 4955794534782754087ull}}, {{10652076716318608161ull, 5446300585764539727ull, 5346821337251001656ull, 6194743168478442609ull}}, {{8703409876970872297ull, 6807875732205674659ull, 11295212689991139974ull, 7743428960598053261ull}}, {{3133788163893101234ull, 18089980387910710374ull, 9365350940458156435ull, 4839643100373783288ull}}, {{13140607241721152350ull, 18000789466461000063ull, 11706688675572695544ull, 6049553875467229110ull}}, {{11814073033724052534ull, 4054242759366698463ull, 5409988807611093623ull, 7561942344334036388ull}}, {{14301324673718614690ull, 9451430752245268395ull, 12604615041611709322ull, 4726213965208772742ull}}, {{13264969823720880458ull, 2590916403451809686ull, 6532396765159860845ull, 5907767456510965928ull}}, {{7357840242796324765ull, 7850331522742150012ull, 8165495956449826056ull, 7384709320638707410ull}}, {{13822022188602478786ull, 4906457201713843757ull, 9715120991208529189ull, 4615443325399192131ull}}, {{3442469680470934770ull, 10744757520569692601ull, 7532215220583273582ull, 5769304156748990164ull}}, {{8914773119016056367ull, 4207574863857339943ull, 9415269025729091978ull, 7211630195936237705ull}}, {{6531780380342682555ull, 14482840616676450737ull, 16380772300588752876ull, 9014537744920297131ull}}, {{15611577783782646357ull, 18275147422277557518ull, 7932139678654276595ull, 5634086090575185707ull}}, {{10291100192873532138ull, 18232248259419558994ull, 5303488579890457840ull, 7042607613218982134ull}}, {{3640503204237139364ull, 4343566250564897127ull, 15852732761717848109ull, 8803259516523727667ull}}, {{9192843530289293959ull, 5020571915816754656ull, 7602114966859961116ull, 5502037197827329792ull}}, {{11491054412861617448ull, 6275714894770943320ull, 9502643708574951395ull, 6877546497284162240ull}}, {{14363818016077021810ull, 3232957600036291246ull, 11878304635718689244ull, 8596933121605202800ull}}, {{4365700241620750728ull, 11243970536877457837ull, 7423940397324180777ull, 5373083201003251750ull}}, {{10068811320453326313ull, 219905115814658584ull, 56553459800450164ull, 6716354001254064688ull}}, {{12586014150566657892ull, 274881394768323230ull, 70691824750562705ull, 8395442501567580860ull}}, {{3254572825676773279ull, 11701015917798671779ull, 9267554427323877498ull, 5247151563479738037ull}}, {{17903274087378130310ull, 5402897860393563915ull, 16196129052582234777ull, 6558939454349672546ull}}, {{17767406590795274983ull, 11365308343919342798ull, 11021789278873017663ull, 8198674317937090683ull}}, {{6492943100819658961ull, 14020846742590671105ull, 4582775290081942087ull, 5124171448710681677ull}}, {{12727864894451961605ull, 12914372409810950977ull, 10340155131029815513ull, 6405214310888352096ull}}, {{2074773062782788294ull, 2307907456981525010ull, 12925193913787269392ull, 8006517888610440120ull}}, {{5908419182666630588ull, 1442442160613453131ull, 8078246196117043370ull, 5004073680381525075ull}}, {{2773837959905900331ull, 11026424737621592222ull, 5486121726718916308ull, 6255092100476906344ull}}, {{12690669486737151221ull, 13783030922026990277ull, 6857652158398645385ull, 7818865125596132930ull}}, {{10237511438424413466ull, 1696865298625787067ull, 8897718617426541270ull, 4886790703497583081ull}}, {{8185203279603128928ull, 11344453660137009642ull, 15733834290210564491ull, 6108488379371978851ull}}, {{1008132062649135352ull, 9568881056743874149ull, 15055606844335817710ull, 7635610474214973564ull}}, {{2935925548369403547ull, 1368864642037533439ull, 186382240855110261ull, 4772256546384358478ull}}, {{17504964990743918146ull, 6322766820974304702ull, 9456349837923663634ull, 5965320682980448097ull}}, {{12657834201575121874ull, 17126830563072656686ull, 16432123315831967446ull, 7456650853725560121ull}}, {{3299460357557063267ull, 6092583083493022525ull, 3352548044753897798ull, 4660406783578475076ull}}, {{8736011465373716988ull, 16839100891221053964ull, 4190685055942372247ull, 5825508479473093845ull}}, {{10920014331717146235ull, 16437190095598929551ull, 9850042338355353213ull, 7281885599341367306ull}}, {{9038331896219044890ull, 6711429564216498227ull, 3089180886089415709ull, 9102356999176709133ull}}, {{3343114425923209104ull, 6500486486849005344ull, 4236581063019578770ull, 5688973124485443208ull}}, {{4178893032404011380ull, 17348980145416032488ull, 5295726328774473462ull, 7111216405606804010ull}}, {{5223616290505014225ull, 12462853144915264802ull, 15843029947822867636ull, 8889020507008505012ull}}, {{7876446199993021795ull, 17012655252426816309ull, 678521680534516464ull, 5555637816880315633ull}}, {{14457243768418665147ull, 2819074991823968770ull, 5459838119095533485ull, 6944547271100394541ull}}, {{8848182673668555626ull, 8135529758207348867ull, 11436483667296804760ull, 8680684088875493176ull}}, {{3224271161829153314ull, 5084706098879593042ull, 7147802292060502975ull, 5425427555547183235ull}}, {{13253710989141217451ull, 1744196605172103398ull, 4323066846648240815ull, 6781784444433979044ull}}, {{7343766699571746006ull, 16015303811747292960ull, 5403833558310301018ull, 8477230555542473805ull}}, {{4589854187232341254ull, 14621250900769446004ull, 5683238983157632088ull, 5298269097214046128ull}}, {{5737317734040426567ull, 18276563625961807505ull, 7104048728947040110ull, 6622836371517557660ull}}, {{11783333185977921113ull, 13622332495597483573ull, 8880060911183800138ull, 8278545464396947075ull}}, {{9670426250449894648ull, 13125643828175815137ull, 3244195060276181134ull, 5174090915248091922ull}}, {{16699718831489756213ull, 7183682748364993113ull, 13278615862200002226ull, 6467613644060114902ull}}, {{7039590484080031555ull, 18202975472311017200ull, 7374897790895226974ull, 8084517055075143628ull}}, {{4399744052550019722ull, 6765173651766997846ull, 13832683156164292667ull, 5052823159421964767ull}}, {{14723052102542300460ull, 3844781046281359403ull, 12679167926777977930ull, 6316028949277455959ull}}, {{13792129109750487671ull, 14029348344706475062ull, 11237273890045084508ull, 7895036186596819949ull}}, {{4008394675166666891ull, 17991714752296322722ull, 9329139190491871769ull, 4934397616623012468ull}}, {{14233865380813109421ull, 8654585385088239690ull, 11661423988114839712ull, 6167997020778765585ull}}, {{8568959689161610968ull, 10818231731360299613ull, 741721929861385928ull, 7709996275973456982ull}}, {{7661442814939700807ull, 6761394832100187258ull, 14298634261445529917ull, 4818747672483410613ull}}, {{353431481819850201ull, 13063429558552621977ull, 4038234771524748684ull, 6023434590604263267ull}}, {{5053475370702200655ull, 16329286948190777471ull, 436107445978547951ull, 7529293238255329084ull}}, {{10075951134329957266ull, 17123333370260317775ull, 9495939190591368277ull, 4705808273909580677ull}}, {{7983252899485058678ull, 7569108657543233507ull, 16481610006666598251ull, 5882260342386975846ull}}, {{5367380105928935443ull, 4849699803501653980ull, 11378640471478472006ull, 7352825427983719808ull}}, {{6709225132411169304ull, 15285496791231843283ull, 14223300589348090007ull, 9191031784979649760ull}}, {{1887422698543286863ull, 16470964522160983908ull, 8889562868342556254ull, 5744394865612281100ull}}, {{2359278373179108579ull, 11365333615846454077ull, 11111953585428195318ull, 7180493582015351375ull}}, {{7560783984901273627ull, 4983294982953291788ull, 9278255963357856244ull, 8975616977519189219ull}}, {{13948862027418071825ull, 12337931401200583175ull, 3493066967884966200ull, 5609760610949493262ull}}, {{12824391515845201878ull, 15422414251500728969ull, 13589705746710983558ull, 7012200763686866577ull}}, {{2195431339524338635ull, 10054645777521135404ull, 3152074128106565736ull, 8765250954608583222ull}}, {{10595516624057487455ull, 6284153610950709627ull, 15805104385348767297ull, 5478281846630364513ull}}, {{8632709761644471415ull, 12466878032115774938ull, 5921322426403795409ull, 6847852308287955642ull}}, {{1567515165200813460ull, 1748539484862554961ull, 16625025069859520070ull, 8559815385359944552ull}}, {{12508912024318978173ull, 14927895233321260562ull, 10390640668662200043ull, 5349884615849965345ull}}, {{6412767993543946908ull, 14048183023224187799ull, 17599986854255137958ull, 6687355769812456681ull}}, {{3404273973502545731ull, 8336856742175458941ull, 8164925512536758736ull, 8359194712265570852ull}}, {{4433514242652785034ull, 5210535463859661838ull, 14326450482190250018ull, 5224496695165981782ull}}, {{14765264840170757100ull, 15736541366679353105ull, 8684691065883036714ull, 6530620868957477228ull}}, {{4621522994931282663ull, 10447304671494415574ull, 10855863832353795893ull, 8163276086196846535ull}}, {{16723509927114215377ull, 8835408428897703685ull, 13702443922862204289ull, 5102047553873029084ull}}, {{7069329353610605509ull, 15655946554549517511ull, 17128054903577755361ull, 6377559442341286355ull}}, {{4224975673585868982ull, 5734875137904733177ull, 16798382611044806298ull, 7971949302926607944ull}}, {{14169824842059637874ull, 8195982979617846139ull, 10498989131903003936ull, 4982468314329129965ull}}, {{13100595034147159438ull, 10244978724522307674ull, 17735422433306142824ull, 6228085392911412456ull}}, {{7152371755829173489ull, 12806223405652884593ull, 3722533967923126914ull, 7785106741139265571ull}}, {{15999447393461703191ull, 12615575646960440774ull, 20740720738260369ull, 4865691713212040982ull}}, {{10775937204972353181ull, 1934411503418387256ull, 9249297937777601270ull, 6082114641515051227ull}}, {{13469921506215441476ull, 11641386416127759878ull, 6949936403794613683ull, 7602643301893814034ull}}, {{3807014922957263019ull, 4970023500866155972ull, 8955396270799021456ull, 4751652063683633771ull}}, {{4758768653696578773ull, 6212529376082694965ull, 6582559320071388916ull, 5939565079604542214ull}}, {{10560146835548111370ull, 7765661720103368706ull, 17451571186944011953ull, 7424456349505677767ull}}, {{11211777790644957511ull, 16382753621133075201ull, 17824761019481089326ull, 4640285218441048604ull}}, {{179664183024033176ull, 11255069989561568194ull, 3834207200641810042ull, 5800356523051310756ull}}, {{9447952265634817278ull, 4845465450097184434ull, 4792759000802262553ull, 7250445653814138445ull}}, {{2586568295188745789ull, 10668517831048868447ull, 10602634769430216095ull, 9063057067267673056ull}}, {{8534134212134047975ull, 13585352672046624635ull, 6626646730893885059ull, 5664410667042295660ull}}, {{6055981746740172064ull, 12370004821630892890ull, 8283308413617356324ull, 7080513333802869575ull}}, {{16793349220279990888ull, 15462506027038616112ull, 5742449498594307501ull, 8850641667253586969ull}}, {{10495843262674994305ull, 11969909276112829022ull, 15118245982689911948ull, 5531651042033491855ull}}, {{3896432041488967073ull, 14962386595141036278ull, 14286121459935002031ull, 6914563802541864819ull}}, {{14093912088715984649ull, 14091297225498907443ull, 13245965806491364635ull, 8643204753177331024ull}}, {{6502852046233796454ull, 6501217756723123200ull, 8278728629057102897ull, 5402002970735831890ull}}, {{8128565057792245568ull, 12738208214331291904ull, 1125038749466602813ull, 6752503713419789863ull}}, {{10160706322240306959ull, 2087702212631951168ull, 15241356492115417229ull, 8440629641774737328ull}}, {{6350441451400191850ull, 3610656892108663432ull, 9525847807572135768ull, 5275393526109210830ull}}, {{7938051814250239812ull, 4513321115135829290ull, 2683937722610393902ull, 6594241907636513538ull}}, {{699192730958023957ull, 14865023430774562421ull, 12578294190117768185ull, 8242802384545641922ull}}, {{2742838466062458925ull, 2373110616593019657ull, 12473119887250993020ull, 5151751490341026201ull}}, {{8040234101005461560ull, 2966388270741274571ull, 1756341803781577563ull, 6439689362926282752ull}}, {{5438606607829439046ull, 17543043393708756926ull, 2195427254726971953ull, 8049611703657853440ull}}, {{17234187185175563116ull, 4046873093426891222ull, 1372142034204357471ull, 5031007314786158400ull}}, {{12319361944614678087ull, 446905348356226124ull, 1715177542755446839ull, 6288759143482698000ull}}, {{15399202430768347609ull, 14393689740727446367ull, 2143971928444308548ull, 7860948929353372500ull}}, {{16542030546871299112ull, 18219428124809429787ull, 10563354492132468650ull, 4913093080845857812ull}}, {{16065852165161735985ull, 13550913119157011426ull, 13204193115165585813ull, 6141366351057322265ull}}, {{10858943169597394174ull, 3103583343664100571ull, 2670183338674818555ull, 7676707938821652832ull}}, {{4480996471784677407ull, 18080640654285920521ull, 1668864586671761596ull, 4797942461763533020ull}}, {{10212931608158234662ull, 4154056744147849035ull, 2086080733339701996ull, 5997428077204416275ull}}, {{8154478491770405424ull, 5192570930184811294ull, 16442658971956791207ull, 7496785096505520343ull}}, {{484863038929115486ull, 10162885859006588915ull, 17194190885114076360ull, 4685490685315950214ull}}, {{14441136853943558069ull, 12703607323758236143ull, 12269366569537819642ull, 5856863356644937768ull}}, {{13439735049002059683ull, 6656137117843019371ull, 15336708211922274553ull, 7321079195806172210ull}}, {{12187982792825186699ull, 12931857415731162118ull, 9947513228048067383ull, 9151348994757715263ull}}, {{3005803227088353783ull, 14999939912473058180ull, 13134724795171123970ull, 5719593121723572039ull}}, {{3757254033860442229ull, 9526552853736546917ull, 11806719975536517059ull, 7149491402154465049ull}}, {{9308253560752940690ull, 7296505048743295742ull, 923341914138482612ull, 8936864252693081312ull}}, {{1205972457043200027ull, 13783687692319335647ull, 577088696336551632ull, 5585540157933175820ull}}, {{15342523626586163746ull, 17229609615399169558ull, 721360870420689540ull, 6981925197416469775ull}}, {{9954782496377928875ull, 3090267945539410332ull, 14736759143308025638ull, 8727406496770587218ull}}, {{15445111097090981355ull, 15766475521244295169ull, 13822160482994903927ull, 5454629060481617011ull}}, {{5471330816081562981ull, 15096408383127981058ull, 12666014585316242005ull, 6818286325602021264ull}}, {{16062535556956729535ull, 5035452423627812610ull, 15832518231645302507ull, 8522857907002526580ull}}, {{14650770741525343863ull, 841314755553688929ull, 671951857923538259ull, 5326786191876579113ull}}, {{4478405371624516117ull, 14886701499724274874ull, 5451625840831810727ull, 6658482739845723891ull}}, {{14821378751385420954ull, 13996690856227955688ull, 2202846282612375505ull, 8323103424807154864ull}}, {{9263361719615888097ull, 1830402757501390449ull, 1376778926632734691ull, 5201939640504471790ull}}, {{16190888167947248025ull, 16123061502158901773ull, 10944345695145694171ull, 6502424550630589737ull}}, {{6403552154651896319ull, 15542140859271239313ull, 18292118137359505618ull, 8128030688288237171ull}}, {{15531435142725904959ull, 14325524055471912474ull, 9126730826635997059ull, 5080019180180148232ull}}, {{10190921891552605391ull, 13295219050912502689ull, 11408413533294996324ull, 6350023975225185290ull}}, {{17350338382868144643ull, 16619023813640628361ull, 5037144879763969597ull, 7937529969031481613ull}}, {{3926432461651508546ull, 12692732892739086678ull, 5454058559066174950ull, 4960956230644676008ull}}, {{14131412613919161490ull, 6642544079069082539ull, 6817573198832718688ull, 6201195288305845010ull}}, {{13052579748971563959ull, 8303180098836353174ull, 17745338535395674168ull, 7751494110382306262ull}}, {{3546176324679839570ull, 5189487561772720734ull, 6479150566194908451ull, 4844683818988941414ull}}, {{13656092442704575271ull, 1875173433788513013ull, 17322310244598411372ull, 6055854773736176767ull}}, {{3235057498098555376ull, 2343966792235641267ull, 17041201787320626311ull, 7569818467170220959ull}}, {{18162812000807454774ull, 8382508272788357647ull, 17568280144716473300ull, 4731136541981388099ull}}, {{18091828982581930564ull, 10478135340985447059ull, 17348664162468203721ull, 5913920677476735124ull}}, {{18003100209800025301ull, 17709355194659196728ull, 3239086129375703035ull, 7392400846845918906ull}}, {{11251937631125015813ull, 8762503987448304003ull, 6636114849287202301ull, 4620250529278699316ull}}, {{9453236020478881862ull, 15564816002737767908ull, 8295143561609002876ull, 5775313161598374145ull}}, {{11816545025598602328ull, 1009275929712658269ull, 14980615470438641500ull, 7219141451997967681ull}}, {{935623226716089197ull, 1261594912140822837ull, 4890711282766138163ull, 9023926814997459602ull}}, {{2890607525911249701ull, 16929397884583871937ull, 7668380570156224255ull, 5639954259373412251ull}}, {{8224945425816450030ull, 16550061337302452017ull, 4973789694267892415ull, 7049942824216765314ull}}, {{14892867800697950441ull, 16075890653200677117ull, 15440609154689641327ull, 8812428530270956642ull}}, {{11613885384649912978ull, 16964960685891505054ull, 14262066740108413733ull, 5507767831419347901ull}}, {{5293984693957615414ull, 7371142802082217606ull, 3992525369853353455ull, 6884709789274184877ull}}, {{15840852904301795075ull, 4602242484175384103ull, 9602342730744079723ull, 8605887236592731096ull}}, {{16818062092829703778ull, 570558543395921112ull, 6001464206715049827ull, 5378679522870456935ull}}, {{2575833542327578107ull, 14548256234527065103ull, 2890144239966424379ull, 6723349403588071169ull}}, {{17054849983191636345ull, 13573634274731443474ull, 8224366318385418378ull, 8404186754485088961ull}}, {{15270967257922160620ull, 13095207440134540075ull, 16669443995059356246ull, 5252616721553180600ull}}, {{14477023053975312871ull, 7145637263313399286ull, 2390060920114643692ull, 6565770901941475751ull}}, {{8872906780614365281ull, 8932046579141749108ull, 16822634205425468327ull, 8207213627426844688ull}}, {{14768938774738754109ull, 12500058139604675048ull, 10514146378390917704ull, 5129508517141777930ull}}, {{14429394713891020ull, 15625072674505843811ull, 3919310936133871322ull, 6411885646427222413ull}}, {{13853094798674527486ull, 10307968806277528955ull, 9510824688594727057ull, 8014857058034028016ull}}, {{6352341239957885727ull, 17971695549991925357ull, 5944265430371704410ull, 5009285661271267510ull}}, {{12552112568374745063ull, 13241247400635130888ull, 16653703824819406321ull, 6261607076589084387ull}}, {{15690140710468431328ull, 2716501195511749898ull, 16205443762596869998ull, 7827008845736355484ull}}, {{14418023962470157484ull, 15532871302477007398ull, 905030314768267940ull, 4891880528585222178ull}}, {{8799157916232921047ull, 969345054386707632ull, 10354659930315110734ull, 6114850660731527722ull}}, {{10998947395291151309ull, 10435053354838160348ull, 3719952876039112609ull, 7643563325914409653ull}}, {{16097714158911745376ull, 18051123392842319977ull, 4630813556738139332ull, 4777227078696506033ull}}, {{6287084643357518008ull, 4117160167343348356ull, 10400202964350062070ull, 5971533848370632541ull}}, {{7858855804196897510ull, 14369822246033961253ull, 17611939723864965491ull, 7464417310463290676ull}}, {{7217627886836754896ull, 6675295894557531831ull, 1784090290560827624ull, 4665260819039556673ull}}, {{4410348840118555716ull, 8344119868196914789ull, 6841798881628422434ull, 5831576023799445841ull}}, {{10124622068575582549ull, 1206777798391367678ull, 13163934620462915947ull, 7289470029749307301ull}}, {{3432405548864702378ull, 15343530303271373310ull, 2619860220296481221ull, 9111837537186634127ull}}, {{15980311523322602698ull, 11895549448758302270ull, 8554941665326382619ull, 5694898460741646329ull}}, {{10752017367298477565ull, 10257750792520489934ull, 15305363100085366178ull, 7118623075927057911ull}}, {{4216649672268321148ull, 3598816453795836610ull, 14520017856679319819ull, 8898278844908822389ull}}, {{7247092063595088622ull, 18390161348118255545ull, 11380854169638268838ull, 5561424278068013993ull}}, {{13670551097921248681ull, 13764329648293043623ull, 391009656765672336ull, 6951780347585017492ull}}, {{12476502853974172947ull, 17205412060366304529ull, 488762070957090420ull, 8689725434481271865ull}}, {{880285256092776236ull, 1530010500874164523ull, 11834691340416651273ull, 5431078396550794915ull}}, {{14935414625398134007ull, 6524199144520093557ull, 10181678157093426187ull, 6788847995688493644ull}}, {{4834210226465503797ull, 3543562912222729043ull, 12727097696366782734ull, 8486059994610617055ull}}, {{715538382327245921ull, 16049784875421369364ull, 14871965087870321064ull, 5303787496631635659ull}}, {{894422977909057401ull, 1615487020567160089ull, 13978270341410513427ull, 6629734370789544574ull}}, {{5729714740813709656ull, 15854416830991113823ull, 8249465889908365975ull, 8287167963486930718ull}}, {{10498600740649650391ull, 16826539547010527995ull, 544230162765340830ull, 5179479977179331699ull}}, {{8511564907384675084ull, 11809802396908384186ull, 14515345758738839750ull, 6474349971474164623ull}}, {{1416084097376068047ull, 5538880959280704425ull, 13532496179996161784ull, 8092937464342705779ull}}, {{12414267606928512290ull, 3461800599550440265ull, 6151967103283907163ull, 5058085915214191112ull}}, {{1682776453378476650ull, 18162308804720214044ull, 7689958879104883953ull, 6322607394017738890ull}}, {{2103470566723095813ull, 8867827950618103843ull, 389076562026329134ull, 7903259242522173613ull}}, {{17455570168697792547ull, 930706450708926997ull, 2549015860480149661ull, 4939537026576358508ull}}, {{7984404655590076972ull, 5775069081813546651ull, 3186269825600187076ull, 6174421283220448135ull}}, {{5368819801060208311ull, 7218836352266933314ull, 17817895337282397557ull, 7718026604025560168ull}}, {{7967198394090018098ull, 6817615729380527273ull, 11136184585801498473ull, 4823766627515975105ull}}, {{14570684011039910527ull, 13133705680153046995ull, 85172676969709379ull, 6029708284394968882ull}}, {{13601668995372500254ull, 11805446081763920840ull, 9329837883066912532ull, 7537135355493711102ull}}, {{8501043122107812659ull, 16601775837957226333ull, 1219462658489432428ull, 4710709597183569439ull}}, {{15237989921062153728ull, 2305475723736981300ull, 15359386378393954248ull, 5888386996479461798ull}}, {{600743327618140544ull, 2881844654671226626ull, 9975860936137667002ull, 7360483745599327248ull}}, {{9974301196377451487ull, 12825677855193809090ull, 12469826170172083752ull, 9200604681999159060ull}}, {{10845624266163295084ull, 8016048659496130681ull, 17017013393212328153ull, 5750377926249474412ull}}, {{18168716351131506759ull, 14631746842797551255ull, 2824522667805858575ull, 7187972407811843016ull}}, {{18099209420486995544ull, 13677997535069551165ull, 3530653334757323219ull, 8984965509764803770ull}}, {{13617848897018066167ull, 6242905450204775526ull, 6818344352650714916ull, 5615603443603002356ull}}, {{7798939084417806901ull, 7803631812755969408ull, 8522930440813393645ull, 7019504304503752945ull}}, {{9748673855522258626ull, 14366225784372349664ull, 15265349069444129960ull, 8774380380629691181ull}}, {{6092921159701411641ull, 8978891115232718540ull, 11846686177616275177ull, 5483987737893556988ull}}, {{7616151449626764552ull, 15835299912468286079ull, 14808357722020343971ull, 6854984672366946235ull}}, {{4908503293606067786ull, 15182438872157969695ull, 13898761134098042060ull, 8568730840458682794ull}}, {{9985343586144874222ull, 265652258243955251ull, 13298411727238664192ull, 5355456775286676746ull}}, {{7869993464253704874ull, 332065322804944064ull, 7399642622193554432ull, 6694320969108345933ull}}, {{9837491830317131092ull, 415081653506180080ull, 13861239296169330944ull, 8367901211385432416ull}}, {{6148432393948206933ull, 259426033441362550ull, 8663274560105831840ull, 5229938257115895260ull}}, {{16908912529290034474ull, 324282541801703187ull, 10829093200132289800ull, 6537422821394869075ull}}, {{16524454643185155188ull, 405353177252128984ull, 8924680481737974346ull, 8171778526743586344ull}}, {{10327784151990721993ull, 4865031754209968519ull, 5577925301086233966ull, 5107361579214741465ull}}, {{8298044171561014587ull, 15304661729617236457ull, 11584092644785180361ull, 6384201974018426831ull}}, {{14984241232878656137ull, 5295769106739381859ull, 9868429787554087548ull, 7980252467523033539ull}}, {{7059307761335466134ull, 12533227728566889470ull, 3861925608007610765ull, 4987657792201895962ull}}, {{18047506738524108475ull, 1831476605426448125ull, 14050779046864289265ull, 6234572240252369952ull}}, {{8724325367872971882ull, 6901031775210448061ull, 17563473808580361581ull, 7793215300315462440ull}}, {{7758546364134301378ull, 6618987868720223990ull, 10977171130362725988ull, 4870759562697164025ull}}, {{474810918313100915ull, 8273734835900279988ull, 18333149931380795389ull, 6088449453371455031ull}}, {{593513647891376143ull, 14953854563302737889ull, 18304751395798606332ull, 7610561816714318789ull}}, {{11900161076000579850ull, 122787065209435372ull, 13746312631587822910ull, 4756601135446449243ull}}, {{14875201345000724812ull, 9376855868366570023ull, 12571204771057390733ull, 5945751419308061554ull}}, {{13982315662823518111ull, 16332755853885600433ull, 6490633926966962608ull, 7432189274135076943ull}}, {{1821418261623616964ull, 10207972408678500271ull, 10974175231995433486ull, 4645118296334423089ull}}, {{16111830882311684916ull, 3536593473993349530ull, 18329405058421679762ull, 5806397870418028861ull}}, {{10916416566034830337ull, 13644113879346462721ull, 9076698267744935990ull, 7257997338022536077ull}}, {{18257206725970925826ull, 7831770312328302593ull, 15957558853108557892ull, 9072496672528170096ull}}, {{4493225176090746785ull, 14118228482059964929ull, 9973474283192848682ull, 5670310420330106310ull}}, {{10228217488540821385ull, 8424413565720180353ull, 3243470817136285045ull, 7087888025412632888ull}}, {{17396957879103414636ull, 15142202975577613345ull, 4054338521420356306ull, 8859860031765791110ull}}, {{3955569646798552291ull, 14075562878163396245ull, 16369019631169886403ull, 5537412519853619443ull}}, {{9556148076925578268ull, 12982767579276857402ull, 15849588520534970100ull, 6921765649817024304ull}}, {{2721813059302197027ull, 16228459474096071753ull, 1365241576959161009ull, 8652207062271280381ull}}, {{13230348208132342902ull, 3225258143668962989ull, 3159118994813169583ull, 5407629413919550238ull}}, {{2702877204883264916ull, 17866630734868367449ull, 13172270780371237786ull, 6759536767399437797ull}}, {{7990282524531469048ull, 13109916381730683503ull, 2630280420181883521ull, 8449420959249297247ull}}, {{11911455605473250011ull, 1276168710940595333ull, 8561454290254759057ull, 5280888099530810779ull}}, {{1054261451559398802ull, 6206896907103132071ull, 6090131844391060917ull, 6601110124413513474ull}}, {{15152884869731412214ull, 12370307152306302992ull, 16836036842343601954ull, 8251387655516891842ull}}, {{9470553043582132634ull, 12343127988618827274ull, 15134209044892139125ull, 5157117284698057401ull}}, {{2614819267622889985ull, 1593851930491370381ull, 5082703250833010195ull, 6446396605872571752ull}}, {{7880210102956000385ull, 15827372968396376688ull, 6353379063541262743ull, 8057995757340714690ull}}, {{4925131314347500241ull, 16809637132888817286ull, 8582547933140677118ull, 5036247348337946681ull}}, {{15379786179789151109ull, 11788674379256245799ull, 15339870934853234302ull, 6295309185422433351ull}}, {{14613046706309050982ull, 5512470937215531441ull, 14563152650139154974ull, 7869136481778041689ull}}, {{2215625163802075008ull, 17280352391041870863ull, 2184441378695890002ull, 4918210301111276056ull}}, {{16604589510034757472ull, 12377068451947562770ull, 2730551723369862503ull, 6147762876389095070ull}}, {{11532364850688671031ull, 10859649546507065559ull, 12636561691067103937ull, 7684703595486368837ull}}, {{14125257059321501251ull, 18316496012635385734ull, 10203694066130633912ull, 4802939747178980523ull}}, {{8433199287297100755ull, 4448875942084680552ull, 8142931564235904487ull, 6003674683973725654ull}}, {{10541499109121375944ull, 949408909178462786ull, 955292418440104801ull, 7504593354967157068ull}}, {{11200122961628247869ull, 12122595614305009001ull, 9820429798379841308ull, 4690370846854473167ull}}, {{165095646753146124ull, 15153244517881261252ull, 7663851229547413731ull, 5862963558568091459ull}}, {{206369558441432655ull, 14329869628924188661ull, 4968128018506879260ull, 7328704448210114324ull}}, {{4869647966479178723ull, 17912337036155235826ull, 6210160023133599075ull, 9160880560262642905ull}}, {{7655215997476874606ull, 8889367638383328439ull, 15410565060526969182ull, 5725550350164151815ull}}, {{4957333978418705354ull, 1888337511124384741ull, 14651520307231323574ull, 7156937937705189769ull}}, {{10808353491450769596ull, 11583793925760256734ull, 4479342328756990755ull, 8946172422131487212ull}}, {{2143534913729343094ull, 4934028194386466507ull, 12022960992327895030ull, 5591357763832179507ull}}, {{16514476697443842579ull, 15390907279837858941ull, 10417015221982480883ull, 6989197204790224384ull}}, {{6808037816522639511ull, 14626948081369935773ull, 13021269027478101104ull, 8736496505987780480ull}}, {{6560866644540343647ull, 9141842550856209858ull, 8138293142173813190ull, 5460310316242362800ull}}, {{17424455342530205366ull, 2203931151715486514ull, 10172866427717266488ull, 6825387895302953500ull}}, {{12557197141307980900ull, 2754913939644358143ull, 12716083034646583110ull, 8531734869128691875ull}}, {{14765777240958569919ull, 15556879267559887551ull, 5641708887440420491ull, 5332334293205432422ull}}, {{13845535532770824494ull, 14834413066022471535ull, 16275508146155301422ull, 6665417866506790527ull}}, {{12695233397536142714ull, 9319644295673313611ull, 15732699164266738874ull, 8331772333133488159ull}}, {{5628677864246395244ull, 10436463703223208911ull, 16750466005307793652ull, 5207357708208430099ull}}, {{2424161311880606151ull, 13045579629029011139ull, 16326396488207354161ull, 6509197135260537624ull}}, {{16865259695132921401ull, 2471916481004100211ull, 1961251536549641086ull, 8136496419075672031ull}}, {{8234944300244381924ull, 15380005855909726344ull, 8143311237984607534ull, 5085310261922295019ull}}, {{10293680375305477404ull, 10001635283032382122ull, 5567453029053371514ull, 6356637827402868774ull}}, {{3643728432277070947ull, 3278672066935701845ull, 16182688323171490201ull, 7945797284253585967ull}}, {{4583173279386863294ull, 13578385087903283413ull, 17031709229623263231ull, 4966123302658491229ull}}, {{10340652617660967022ull, 12361295341451716362ull, 7454578481746915327ull, 6207654128323114037ull}}, {{3702443735221432969ull, 10839933158387257549ull, 13929909120611032063ull, 7759567660403892546ull}}, {{4619870343727089558ull, 13692487251633117824ull, 13317879218809282943ull, 4849729787752432841ull}}, {{5774837929658861947ull, 12503923046114009376ull, 2812290968229439967ull, 6062162234690541052ull}}, {{7218547412073577434ull, 11018217789215123816ull, 3515363710286799959ull, 7577702793363176315ull}}, {{4511592132545985896ull, 13803915145900534241ull, 18338003383425107638ull, 4736064245851985196ull}}, {{10251176184109870274ull, 8031521895520891993ull, 4475760155571832932ull, 5920080307314981496ull}}, {{17425656248564725747ull, 10039402369401114991ull, 5594700194464791165ull, 7400100384143726870ull}}, {{17808564182994035448ull, 8580469490089390821ull, 17331745676822658190ull, 4625062740089829293ull}}, {{8425647173460380598ull, 1502214825756962719ull, 7829624040746159026ull, 5781328425112286617ull}}, {{5920372948398087843ull, 11101140569050979207ull, 14398716069360086686ull, 7226660531390358271ull}}, {{2788780167070221900ull, 4653053674458948201ull, 13386709068272720454ull, 9033325664237947839ull}}, {{13272202650487358448ull, 16743216601819006337ull, 15284222195311532139ull, 5645828540148717399ull}}, {{2755195257827034347ull, 16317334733846370018ull, 14493591725712027270ull, 7057285675185896749ull}}, {{12667366109138568742ull, 11173296380453186714ull, 4281931601857870376ull, 8821607093982370937ull}}, {{12528789836638993368ull, 6983310237783241696ull, 14205422297229638745ull, 5513504433738981835ull}}, {{15660987295798741710ull, 13340823815656440024ull, 13145091853109660527ull, 6891880542173727294ull}}, {{1129490046038875521ull, 12064343751143162127ull, 7207992779532299851ull, 8614850677717159118ull}}, {{7623460306415379057ull, 5234371835250782377ull, 18340053542489851119ull, 5384281673573224448ull}}, {{14141011401446611725ull, 1931278775636090067ull, 4478322854402762283ull, 6730352091966530561ull}}, {{13064578233380876752ull, 16249156524827276296ull, 10209589586430840757ull, 8412940114958163201ull}}, {{8165361395863047970ull, 12461565837230741637ull, 17910208537587745233ull, 5258087571848852000ull}}, {{14818387763256197867ull, 1741899241256263334ull, 3941016598275129926ull, 6572609464811065001ull}}, {{9299612667215471525ull, 11400746088425104976ull, 9537956766271300311ull, 8215761831013831251ull}}, {{5812257917009669703ull, 14042995332906772466ull, 3655379969705868742ull, 5134851144383644532ull}}, {{16488694433116862937ull, 8330372129278689774ull, 4569224962132335928ull, 6418563930479555665ull}}, {{11387496004541302863ull, 10412965161598362218ull, 10323217221092807814ull, 8023204913099444581ull}}, {{11728871021265702194ull, 1896417207571588482ull, 8757853772396698836ull, 5014503070687152863ull}}, {{5437716739727351934ull, 2370521509464485603ull, 6335631197068485641ull, 6268128838358941079ull}}, {{2185459906231802013ull, 7574837905257994908ull, 3307852977908219147ull, 7835161047948676349ull}}, {{10589284478249652067ull, 2428430681572552865ull, 4373251120406330919ull, 4896975654967922718ull}}, {{17848291616239452987ull, 16870596407247854793ull, 14689935937362689456ull, 6121219568709903397ull}}, {{8475306465017152522ull, 2641501435350266876ull, 4527361866421198109ull, 7651524460887379247ull}}, {{14520438577490496134ull, 3956781406307610749ull, 9747130194154330674ull, 4782202788054612029ull}}, {{4315490166580956456ull, 14169348794739289245ull, 16795598761120301246ull, 5977753485068265036ull}}, {{10006048726653583474ull, 8488313956569335748ull, 2547754377690824942ull, 7472191856335331296ull}}, {{15477152491013265479ull, 693510204428446938ull, 1592346486056765589ull, 4670119910209582060ull}}, {{10123068576911806041ull, 5478573773962946577ull, 1990433107570956986ull, 5837649887761977575ull}}, {{17265521739567145455ull, 16071589254308459029ull, 16323099439745859944ull, 7297062359702471968ull}}, {{7746844119176768107ull, 1642742494176022171ull, 1957130225972773315ull, 9121327949628089961ull}}, {{2535934565271786115ull, 17167615123355871521ull, 12752421437301453081ull, 5700829968517556225ull}}, {{7781604225017120547ull, 7624460848912675689ull, 2105468741344652640ull, 7126037460646945282ull}}, {{14338691299698788588ull, 9530576061140844611ull, 11855207963535591608ull, 8907546825808681602ull}}, {{6655839053098048916ull, 5956610038213027882ull, 12021190995637132659ull, 5567216766130426001ull}}, {{17543170853227336953ull, 2834076529338896948ull, 1191430689264252112ull, 6959020957663032502ull}}, {{3482219492824619575ull, 3542595661673621186ull, 10712660398435090948ull, 8698776197078790627ull}}, {{6788073201442775138ull, 11437494325400789049ull, 4389569739808237890ull, 5436735123174244142ull}}, {{13096777520230856827ull, 5073495869896210503ull, 14710334211615073171ull, 6795918903967805177ull}}, {{11759285881861183129ull, 1730183818942875225ull, 4552859709236677752ull, 8494898629959756472ull}}, {{432024648522157600ull, 1081364886839297016ull, 2845537318272923595ull, 5309311643724847795ull}}, {{540030810652697000ull, 15186764163831284982ull, 17391979703123318205ull, 6636639554656059743ull}}, {{9898410550170647058ull, 5148397149506942515ull, 17128288610476759853ull, 8295799443320074679ull}}, {{3880663584642960459ull, 5523591227655533024ull, 17622709409189056764ull, 5184874652075046674ull}}, {{4850829480803700574ull, 6904489034569416280ull, 12805014724631545147ull, 6481093315093808343ull}}, {{6063536851004625717ull, 4018925274784382446ull, 11394582387362043530ull, 8101366643867260429ull}}, {{17624768587160054785ull, 7123514315167626932ull, 9427457001314971158ull, 5063354152417037768ull}}, {{3584216660240516866ull, 18127764930814309474ull, 11784321251643713947ull, 6329192690521297210ull}}, {{13703642862155421890ull, 18048020145090498938ull, 5507029527699866626ull, 7911490863151621513ull}}, {{13176462807274526585ull, 15891698609108949740ull, 14971108500880886401ull, 4944681789469763445ull}}, {{16470578509093158232ull, 6029565206104023463ull, 4878827570818944290ull, 6180852236837204307ull}}, {{15976537117939059886ull, 16760328544484805137ull, 1486848445096292458ull, 7726065296046505384ull}}, {{3067806671070830573ull, 15086891358730391115ull, 929280278185182786ull, 4828790810029065865ull}}, {{17669816394120701928ull, 9635242161558213085ull, 5773286366158866387ull, 6035988512536332331ull}}, {{8252212437368713697ull, 7432366683520378453ull, 2604921939271195080ull, 7544985640670415414ull}}, {{7463475782569140013ull, 4645229177200236533ull, 15463134267326660637ull, 4715616025419009633ull}}, {{13941030746638812920ull, 10418222489927683570ull, 5493859778876162084ull, 5894520031773762042ull}}, {{8202916396443740342ull, 13022778112409604463ull, 16090696760449978413ull, 7368150039717202552ull}}, {{5641959477127287524ull, 2443414585229841867ull, 1666626876852921401ull, 9210187549646503191ull}}, {{1220381663990860750ull, 13056349161837120927ull, 7959170825674157731ull, 5756367218529064494ull}}, {{15360535135270739650ull, 11708750433869013254ull, 725591495237921356ull, 7195459023161330618ull}}, {{9977296882233648754ull, 14635938042336266568ull, 10130361405902177503ull, 8994323778951663272ull}}, {{6235810551396030472ull, 16064990304101248461ull, 6331475878688860939ull, 5621452361844789545ull}}, {{12406449207672425993ull, 15469551861699172672ull, 12526030866788464078ull, 7026815452305986931ull}}, {{15508061509590532492ull, 10113567790269190032ull, 11045852565058192194ull, 8783519315382483664ull}}, {{9692538443494082807ull, 10932665887345631674ull, 6903657853161370121ull, 5489699572114052290ull}}, {{2892301017512827701ull, 18277518377609427497ull, 17852944353306488459ull, 6862124465142565362ull}}, {{8227062290318422530ull, 18235211953584396467ull, 13092808404778334766ull, 8577655581428206703ull}}, {{2836070922235320130ull, 6785321452562859888ull, 15100534280627541085ull, 5361034738392629189ull}}, {{3545088652794150162ull, 13093337834130962764ull, 5040609795502262644ull, 6701293422990786487ull}}, {{4431360815992687702ull, 16366672292663703455ull, 1689076225950440401ull, 8376616778738483109ull}}, {{9687129537636511670ull, 3311641155273732803ull, 3361515650432719203ull, 5235385486711551943ull}}, {{7497225903618251684ull, 17974609499374329716ull, 18036952618323062715ull, 6544231858389439928ull}}, {{9371532379522814604ull, 17856575855790524241ull, 4099446699194276778ull, 8180289822986799911ull}}, {{17386422783270228888ull, 15772045928296465554ull, 9479683214637504842ull, 5112681139366749944ull}}, {{12509656442233010302ull, 10491685373515806135ull, 11849604018296881053ull, 6390851424208437430ull}}, {{11025384534363874973ull, 17726292735322145573ull, 5588632986016325508ull, 7988564280260546788ull}}, {{9196708343191115810ull, 1855560922721565175ull, 12716267653114979251ull, 4992852675162841742ull}}, {{6884199410561506859ull, 16154509208684120181ull, 6671962529538948255ull, 6241065843953552178ull}}, {{13216935281629271477ull, 15581450492427762322ull, 17563325198778461127ull, 7801332304941940222ull}}, {{12872270569445682578ull, 16655935585408433307ull, 6365392230809150300ull, 4875832690588712639ull}}, {{11478652193379715318ull, 2373175408050990018ull, 3345054270084049972ull, 6094790863235890799ull}}, {{5124943204869868339ull, 2966469260063737523ull, 18016375892887226177ull, 7618488579044863498ull}}, {{897246493829973760ull, 13383258333608305712ull, 15871920951481904264ull, 4761555361903039686ull}}, {{1121558117287467200ull, 16729072917010382140ull, 10616529152497604522ull, 5951944202378799608ull}}, {{1401947646609334000ull, 11687969109408201867ull, 13270661440622005653ull, 7439930252973499510ull}}, {{17017118343626691414ull, 9610823702593820118ull, 3682477381961365629ull, 4649956408108437194ull}}, {{12048025892678588460ull, 16625215646669663052ull, 13826468764306482844ull, 5812445510135546492ull}}, {{15060032365848235574ull, 2334775484627527199ull, 17283085955383103556ull, 7265556887669433115ull}}, {{14213354438882906564ull, 2918469355784408999ull, 16992171425801491541ull, 9081946109586791394ull}}, {{15800875551942898459ull, 4129886356578949576ull, 15231793159553320117ull, 5676216318491744621ull}}, {{1304350366219071457ull, 9774043964151074875ull, 5204683394159486434ull, 7095270398114680777ull}}, {{15465496013056003033ull, 2994182918334067785ull, 11117540261126745947ull, 8869087997643350971ull}}, {{2748405980518920040ull, 18012265388454650030ull, 4642619653990522264ull, 5543179998527094357ull}}, {{12658879512503425858ull, 4068587661858760921ull, 10414960585915540735ull, 6928974998158867946ull}}, {{1988541335347118610ull, 474048558896063248ull, 3795328695539650111ull, 8661218747698584933ull}}, {{1242838334591949132ull, 7213809376951121386ull, 4677923443925975271ull, 5413261717311615583ull}}, {{10776919955094712222ull, 4405575702761513828ull, 1235718286480081185ull, 6766577146639519479ull}}, {{13471149943868390278ull, 10118655646879280189ull, 15379705913382265193ull, 8458221433299399348ull}}, {{10725311724131437876ull, 17853374825368019878ull, 388944159009139937ull, 5286388395812124593ull}}, {{4183267618309521537ull, 8481660476427861136ull, 5097866217188812826ull, 6607985494765155741ull}}, {{5229084522886901921ull, 1378703558680050612ull, 10984018789913403937ull, 8259981868456444676ull}}, {{12491549863659089509ull, 12390904770243501392ull, 16088383780550653268ull, 5162488667785277922ull}}, {{15614437329573861886ull, 15488630962804376740ull, 10887107688833540777ull, 6453110834731597403ull}}, {{1071302588257775741ull, 5525730648223307214ull, 8997198592614538068ull, 8066388543414496754ull}}, {{14504622172943273550ull, 12676953691994342816ull, 10234935138811474196ull, 5041492839634060471ull}}, {{18130777716179091938ull, 15846192114992928520ull, 8181982905086954841ull, 6301866049542575589ull}}, {{4216728071514313306ull, 5972682088458996939ull, 14839164649786081456ull, 7877332561928219486ull}}, {{329612035482751864ull, 3732926305286873087ull, 4662791887688913006ull, 4923332851205137179ull}}, {{14247073099635603542ull, 13889529918463367166ull, 1216803841183753353ull, 6154166064006421474ull}}, {{8585469337689728620ull, 3526854342797045246ull, 10744376838334467500ull, 7692707580008026842ull}}, {{754232317628692484ull, 11427656001102929087ull, 11326921542386430091ull, 4807942237505016776ull}}, {{14777848452318029316ull, 9672883982951273454ull, 14158651927983037614ull, 6009927796881270970ull}}, {{9248938528542760837ull, 2867732941834316010ull, 8474942873124021210ull, 7512409746101588713ull}}, {{10392272598766613428ull, 6404019107073835410ull, 16826054341770983016ull, 4695256091313492945ull}}, {{3766968711603490976ull, 8005023883842294263ull, 7197509871931565058ull, 5869070114141866182ull}}, {{97024871076975816ull, 782907817948092021ull, 18220259376769232131ull, 7336337642677332727ull}}, {{4732967107273607674ull, 14813692827717278738ull, 18163638202534152259ull, 9170422053346665909ull}}, {{7569790460473392701ull, 6952715008109605259ull, 13658116885797539114ull, 5731513783341666193ull}}, {{4850552057164352972ull, 17914265796991782382ull, 3237588051964760180ull, 7164392229177082742ull}}, {{15286562108310217022ull, 3946088172530176361ull, 13270357101810726034ull, 8955490286471353427ull}}, {{2636572290052803783ull, 7077991126258748130ull, 5988130179418009819ull, 5597181429044595892ull}}, {{12519087399420780537ull, 4235802889396047258ull, 7485162724272512274ull, 6996476786305744865ull}}, {{6425487212421199863ull, 14518125648599834881ull, 13968139423768028246ull, 8745595982882181081ull}}, {{15545144553831719674ull, 4462142511947508896ull, 1812558112213935798ull, 5465997489301363176ull}}, {{984686618580097977ull, 14801050176789161929ull, 2265697640267419747ull, 6832496861626703970ull}}, {{5842544291652510375ull, 13889626702559064507ull, 12055494087189050492ull, 8540621077033379962ull}}, {{1345747173069125033ull, 17904388725954191125ull, 12146369822920544461ull, 5337888173145862476ull}}, {{6293869984763794195ull, 8545427852160575194ull, 15182962278650680577ull, 6672360216432328095ull}}, {{17090709517809518551ull, 15293470833628106896ull, 14367016829885962817ull, 8340450270540410119ull}}, {{10681693448630949095ull, 2640890243376484954ull, 15896914546319808617ull, 5212781419087756324ull}}, {{4128744773933910560ull, 7912798822647994097ull, 1424399109190209155ull, 6515976773859695406ull}}, {{9772616985844776104ull, 5279312509882604717ull, 11003870923342537252ull, 8144970967324619257ull}}, {{8413728625366679017ull, 12522942355531403756ull, 18406634373157555542ull, 5090606854577887035ull}}, {{10517160781708348771ull, 6430305907559478887ull, 18396606948019556524ull, 6363258568222358794ull}}, {{8534764958708048060ull, 8037882384449348609ull, 13772386648169669847ull, 7954073210277948493ull}}, {{16863443145260999798ull, 11941205517921924736ull, 10913584664319737606ull, 4971295756423717808ull}}, {{2632559857866698131ull, 5703134860547630113ull, 13641980830399672008ull, 6214119695529647260ull}}, {{7902385840760760568ull, 7128918575684537641ull, 17052476037999590010ull, 7767649619412059075ull}}, {{16468206196543945115ull, 9067260128230223929ull, 8351954514536049804ull, 4854781012132536922ull}}, {{6750199690397767682ull, 11334075160287779912ull, 1216571106315286447ull, 6068476265165671153ull}}, {{8437749612997209602ull, 9555907931932336986ull, 6132399901321495963ull, 7585595331457088941ull}}, {{9885279526550643905ull, 3666599448244016664ull, 6138592947539628929ull, 4740997082160680588ull}}, {{12356599408188304882ull, 9194935328732408734ull, 7673241184424536161ull, 5926246352700850735ull}}, {{6222377223380605294ull, 16105355179342898822ull, 4979865462103282297ull, 7407807940876063419ull}}, {{17724043819895042021ull, 3148317959448229907ull, 806572904600857484ull, 4629879963047539637ull}}, {{17543368756441414622ull, 3935397449310287384ull, 5619902149178459759ull, 5787349953809424546ull}}, {{3482466871842216661ull, 307560793210471327ull, 16248249723327850507ull, 7234187442261780682ull}}, {{18188141645084934539ull, 14219509046795252870ull, 11086940117305037325ull, 9042734302827225853ull}}, {{6755902509750696183ull, 11193036163460726996ull, 9235180582529342280ull, 5651708939267016158ull}}, {{8444878137188370228ull, 13991295204325908745ull, 2320603691306902042ull, 7064636174083770198ull}}, {{15167783689912850689ull, 8265746968552610123ull, 12124126650988403361ull, 8830795217604712747ull}}, {{7174021796981837729ull, 16695306901413851087ull, 5271736147654058148ull, 5519247011002945467ull}}, {{4355841227799909257ull, 2422389553057762243ull, 1977984166140184782ull, 6899058763753681834ull}}, {{833115516322498667ull, 12251358978176978612ull, 11695852244530006785ull, 8623823454692102292ull}}, {{9744069234556337475ull, 739570333719529776ull, 16533279689686030049ull, 5389889659182563932ull}}, {{12180086543195421844ull, 5536148935576800124ull, 2219855538397985945ull, 6737362073978204916ull}}, {{15225108178994277305ull, 11531872187898388059ull, 2774819422997482431ull, 8421702592472756145ull}}, {{7209849602657729364ull, 14124949145077574393ull, 13263477185441896279ull, 5263564120295472590ull}}, {{13623998021749549609ull, 13044500412919580087ull, 7355974444947594541ull, 6579455150369340738ull}}, {{12418311508759549107ull, 2470567460867311397ull, 18418340093039268985ull, 8224318937961675922ull}}, {{10067287702188412144ull, 13073319709110539383ull, 16123148576576931019ull, 5140199336226047451ull}}, {{7972423609308127276ull, 11729963617960786325ull, 15542249702293775870ull, 6425249170282559314ull}}, {{14577215530062546998ull, 5439082485596207098ull, 10204440091012444030ull, 8031561462853199143ull}}, {{13722445724716479778ull, 17234484608779793148ull, 13295304084523859374ull, 5019725914283249464ull}}, {{17153057155895599723ull, 12319733724119965627ull, 16619130105654824218ull, 6274657392854061830ull}}, {{16829635426442111749ull, 6176295118295181226ull, 11550540595213754465ull, 7843321741067577288ull}}, {{15130208159953707747ull, 15389399495002958026ull, 7219087872008596540ull, 4902076088167235805ull}}, {{9689388163087358876ull, 790005295044145917ull, 13635545858438133580ull, 6127595110209044756ull}}, {{16723421222286586499ull, 987506618805182396ull, 17044432323047666975ull, 7659493887761305945ull}}, {{1228766227074340754ull, 7534720664394320854ull, 3735241174263710003ull, 4787183679850816216ull}}, {{10759329820697701750ull, 4806714812065513163ull, 4669051467829637504ull, 5983979599813520270ull}}, {{8837476257444739284ull, 6008393515081891454ull, 15059686371641822688ull, 7479974499766900337ull}}, {{911736642475574149ull, 3755245946926182159ull, 2494774954635057324ull, 4674984062354312711ull}}, {{14974728858376631398ull, 4694057433657727698ull, 16953526748575985367ull, 5843730077942890888ull}}, {{9495039036116013439ull, 1255885773644771719ull, 2745164362010430093ull, 7304662597428613611ull}}, {{7257112776717628895ull, 6181543235483352553ull, 17266513507795201328ull, 9130828246785767013ull}}, {{16064910531516987819ull, 3863464522177095345ull, 13097413951585694782ull, 5706767654241104383ull}}, {{6246080109114071062ull, 14052702689576144990ull, 11760081421054730573ull, 7133459567801380479ull}}, {{17030972173247364635ull, 3730820306688017525ull, 10088415757891025313ull, 8916824459751725599ull}}, {{12950200617493296849ull, 13860977737748480713ull, 13222788876322972676ull, 5573015287344828499ull}}, {{2352692716584457350ull, 17326222172185600892ull, 11916800076976327941ull, 6966269109181035624ull}}, {{2940865895730571687ull, 7822719659949837403ull, 14896000096220409927ull, 8707836386476294530ull}}, {{17978942249327464968ull, 11806728815109730232ull, 13921686078565144108ull, 5442397741547684081ull}}, {{4026933737949779594ull, 14758411018887162791ull, 3567049542924266423ull, 6802997176934605102ull}}, {{421981154009836589ull, 13836327755181565585ull, 13682183965510108837ull, 8503746471168256377ull}}, {{11792953267324617628ull, 10953547856202172442ull, 1633835950802736167ull, 5314841544480160236ull}}, {{5517819547300996227ull, 9080248801825327649ull, 2042294938503420209ull, 6643551930600200295ull}}, {{11508960452553633188ull, 15961997020709047465ull, 16387926728411438973ull, 8304439913250250368ull}}, {{275571255204938887ull, 12282091147156848618ull, 10242454205257149358ull, 5190274945781406480ull}}, {{9567836105860949416ull, 6129241897091284964ull, 12803067756571436698ull, 6487843682226758100ull}}, {{11959795132326186770ull, 16884924408218882013ull, 16003834695714295872ull, 8109804602783447625ull}}, {{9780714966917560683ull, 10553077755136801258ull, 3084867657180353064ull, 5068627876739654766ull}}, {{3002521671792175046ull, 13191347193921001573ull, 13079456608330217138ull, 6335784845924568457ull}}, {{8364838108167606712ull, 7265811955546476158ull, 2514262705130607711ull, 7919731057405710572ull}}, {{616337799177366291ull, 11458661499857629455ull, 10794786227561405627ull, 4949831910878569107ull}}, {{14605480304253871576ull, 9711640856394648914ull, 8881796766024369130ull, 6187289888598211384ull}}, {{9033478343462563661ull, 2916179033638535335ull, 11102245957530461413ull, 7734112360747764230ull}}, {{12563452992305184145ull, 4128454905237778536ull, 2327217705029150479ull, 4833820225467352644ull}}, {{15704316240381480181ull, 548882613119835266ull, 2909022131286438099ull, 6042275281834190805ull}}, {{10407023263622074418ull, 14521161321681957795ull, 8247963682535435527ull, 7552844102292738506ull}}, {{4198546530550102559ull, 15993254853692305478ull, 9766663320012035108ull, 4720527563932961566ull}}, {{14471555200042404007ull, 1544824493405830231ull, 2984957113160268078ull, 5900659454916201958ull}}, {{13477757981625617104ull, 11154402653612063597ull, 12954568428305110905ull, 7375824318645252447ull}}, {{3012139421749857668ull, 107945261732915785ull, 11581524516954000728ull, 9219780398306565559ull}}, {{13411802184662130803ull, 67465788583072365ull, 14155981850737332311ull, 5762362748941603474ull}}, {{2929694675545499791ull, 13919390291011004169ull, 8471605276566889580ull, 7202953436177004343ull}}, {{8273804362859262643ull, 17399237863763755211ull, 5977820577281224071ull, 9003691795221255429ull}}, {{2865284717573345200ull, 17792052692493428863ull, 6041980870014458996ull, 5627307372013284643ull}}, {{17416663952248845212ull, 3793321791907234462ull, 2940790069090685842ull, 7034134215016605804ull}}, {{12547457903456280707ull, 13965024276738818886ull, 3675987586363357302ull, 8792667768770757255ull}}, {{3230475171232787538ull, 4116454154534373900ull, 9215021269118180170ull, 5495417355481723284ull}}, {{4038093964040984422ull, 14368939730022743183ull, 11518776586397725212ull, 6869271694352154105ull}}, {{435931436623842624ull, 17961174662528428979ull, 563412677714992803ull, 8586589617940192632ull}}, {{16413358212385759304ull, 8919891154866574159ull, 352132923571870502ull, 5366618511212620395ull}}, {{15905011747054811226ull, 1926491906728441891ull, 14275224209747001840ull, 6708273139015775493ull}}, {{15269578665391126128ull, 2408114883410552364ull, 4008972206901588588ull, 8385341423769719367ull}}, {{320114629014678022ull, 10728443838986371036ull, 9423136656954574723ull, 5240838389856074604ull}}, {{400143286268347528ull, 8798868780305575891ull, 11778920821193218404ull, 6551047987320093255ull}}, {{14335237163117598122ull, 10998585975381969863ull, 10111965008064135101ull, 8188809984150116569ull}}, {{15877052254589580682ull, 9179959243827425116ull, 17849193176108554198ull, 5118006240093822855ull}}, {{1399571244527424237ull, 2251577017929505588ull, 17699805451708304844ull, 6397507800117278569ull}}, {{1749464055659280296ull, 2814471272411881985ull, 8289698759353217343ull, 7996884750146598212ull}}, {{12622630080855519945ull, 8676573572898508096ull, 14404433761450536647ull, 4998052968841623882ull}}, {{15778287601069399931ull, 6234030947695747216ull, 8782170164958395001ull, 6247566211052029853ull}}, {{1276115427627198298ull, 12404224703047071925ull, 15589398724625381655ull, 7809457763815037316ull}}, {{3103415151480692888ull, 14670169467045501809ull, 520002166036087726ull, 4880911102384398323ull}}, {{8490954957778254014ull, 9114339796952101453ull, 14485060762827273370ull, 6101138877980497903ull}}, {{15225379715650205422ull, 2169552709335351008ull, 13494639935106703809ull, 7626423597475622379ull}}, {{9515862322281378389ull, 12885185489403064140ull, 6128306950227995928ull, 4766514748422263987ull}}, {{11894827902851722986ull, 16106481861753830175ull, 3048697669357607006ull, 5958143435527829984ull}}, {{10256848860137265828ull, 10909730290337511911ull, 3810872086697008758ull, 7447679294409787480ull}}, {{13328059565226872999ull, 2206895413033557040ull, 2381795054185630474ull, 4654799559006117175ull}}, {{16660074456533591248ull, 11981991303146722108ull, 16812301873014201804ull, 5818499448757646468ull}}, {{2378348996957437444ull, 14977489128933402636ull, 2568633267558200639ull, 7273124310947058086ull}}, {{2972936246196796805ull, 14110175392739365391ull, 12434163621302526607ull, 9091405388683822607ull}}, {{8775614181514079860ull, 15736388648103185225ull, 14688881290955160985ull, 5682128367927389129ull}}, {{15581203745319987728ull, 5835427754846817819ull, 4526043558411787520ull, 7102660459909236412ull}}, {{14864818663222596756ull, 7294284693558522274ull, 5657554448014734400ull, 8878325574886545515ull}}, {{13902197682941510877ull, 4558927933474076421ull, 1230128520795515048ull, 5548953484304090947ull}}, {{3542689048394724884ull, 5698659916842595527ull, 15372718706276557522ull, 6936191855380113683ull}}, {{18263419365775569817ull, 16346696932908020216ull, 14604212364418308998ull, 8670239819225142104ull}}, {{11414637103609731136ull, 5604999564640124731ull, 9127632727761443124ull, 5418899887015713815ull}}, {{9656610361084776016ull, 7006249455800155914ull, 6797854891274416001ull, 6773624858769642269ull}}, {{2847390914501194211ull, 13369497838177582797ull, 13109004632520407905ull, 8467031073462052836ull}}, {{4085462330776940334ull, 1438407121219907392ull, 17416499932180030749ull, 5291894420913783022ull}}, {{5106827913471175418ull, 6409694919952272144ull, 12547252878370262628ull, 6614868026142228778ull}}, {{6383534891838969272ull, 8012118649940340180ull, 6460694061108052477ull, 8268585032677785973ull}}, {{13213081344254131603ull, 7313417165426406564ull, 6343776797406226750ull, 5167865645423616233ull}}, {{16516351680317664504ull, 18365143493637784013ull, 12541407015185171341ull, 6459832056779520291ull}}, {{6810381545114916918ull, 9121371311765066305ull, 11065072750554076273ull, 8074790070974400364ull}}, {{15785703511765292834ull, 17230072115921636200ull, 16139042505951073478ull, 5046743794359000227ull}}, {{1285385315997064426ull, 12314218108047269443ull, 15562117114011453944ull, 6308429742948750284ull}}, {{15441789700278494244ull, 15392772635059086803ull, 1005902318804765814ull, 7885537178685937856ull}}, {{7345275553460364951ull, 5008796878484541348ull, 628688949252978634ull, 4928460736678711160ull}}, {{9181594441825456189ull, 15484368134960452493ull, 785861186566223292ull, 6160575920848388950ull}}, {{16088679070709208140ull, 908716094991014000ull, 10205698520062554924ull, 7700719901060486187ull}}, {{10055424419193255087ull, 9791319596224159558ull, 4072718565825402875ull, 4812949938162803867ull}}, {{3345908487136793051ull, 7627463476852811544ull, 479212188854365690ull, 6016187422703504834ull}}, {{4182385608920991314ull, 310957309211238622ull, 9822387272922732921ull, 7520234278379381042ull}}, {{16449049060857783283ull, 11723563364325493898ull, 10750678064004095979ull, 4700146423987113151ull}}, {{11337939289217453296ull, 10042768186979479469ull, 8826661561577732070ull, 5875183029983891439ull}}, {{337366056239652908ull, 3330088196869573529ull, 6421640933544777184ull, 7343978787479864299ull}}, {{5033393588726954039ull, 4162610246086966911ull, 3415365148503583576ull, 9179973484349830374ull}}, {{10063400020595428130ull, 2601631403804354319ull, 15969661273096903447ull, 5737483427718643983ull}}, {{7967564007316897259ull, 17087097310037606611ull, 15350390572943741404ull, 7171854284648304979ull}}, {{5347768990718733670ull, 2912127563837456648ull, 14576302197752288852ull, 8964817855810381224ull}}, {{3342355619199208544ull, 11043451764253186213ull, 9110188873595180532ull, 5603011159881488265ull}}, {{8789630542426398583ull, 13804314705316482766ull, 15999422110421363569ull, 7003763949851860331ull}}, {{1763666141178222421ull, 3420335326363439746ull, 15387591619599316558ull, 8754704937314825414ull}}, {{5713977356663776917ull, 15972767634259313553ull, 5005558743822184944ull, 5471690585821765884ull}}, {{11754157714257109051ull, 1519215469114590325ull, 6256948429777731181ull, 6839613232277207355ull}}, {{857639087539222601ull, 6510705354820625811ull, 3209499518794776072ull, 8549516540346509194ull}}, {{16676925494207871790ull, 4069190846762891131ull, 6617623217674122949ull, 5343447837716568246ull}}, {{16234470849332451833ull, 9698174576881001818ull, 17495401058947429494ull, 6679309797145710307ull}}, {{11069716524810788983ull, 2899346184246476465ull, 17257565305256898964ull, 8349137246432137884ull}}, {{1043800365661259ull, 11035463402008823599ull, 1562606278930786044ull, 5218210779020086178ull}}, {{13836362805739240285ull, 13794329252511029498ull, 11176629885518258363ull, 6522763473775107722ull}}, {{8072081470319274549ull, 12631225547211398969ull, 4747415320043047146ull, 8153454342218884653ull}}, {{16574265965018016353ull, 12506201985434512259ull, 5272977584240598418ull, 5095908963886802908ull}}, {{16106146437845132537ull, 6409380444938364516ull, 6591221980300748023ull, 6369886204858503635ull}}, {{1685938973596864055ull, 3400039537745567742ull, 3627341456948547125ull, 7962357756073129544ull}}, {{14888769913780203747ull, 4430867720304673790ull, 2267088410592841953ull, 4976473597545705965ull}}, {{9387590355370478875ull, 10150270668808230142ull, 7445546531668440345ull, 6220591996932132456ull}}, {{2511115907358322786ull, 17299524354437675582ull, 9306933164585550431ull, 7775739996165165570ull}}, {{15404505497381115454ull, 17729731749164629094ull, 10428519246293356923ull, 4859837497603228481ull}}, {{10032259834871618509ull, 17550478668028398464ull, 17647335076294084058ull, 6074796872004035601ull}}, {{12540324793589523136ull, 12714726298180722272ull, 8224110790085441361ull, 7593496090005044502ull}}, {{7837702995993451960ull, 1029174908721869564ull, 528383225376012947ull, 4745935056253152814ull}}, {{9797128744991814950ull, 15121526691184500667ull, 9883851068574791991ull, 5932418820316441017ull}}, {{7634724912812380783ull, 14290222345553237930ull, 16966499854145877893ull, 7415523525395551271ull}}, {{9383389088935125894ull, 11237231975184467658ull, 17521591436482255539ull, 4634702203372219544ull}}, {{2505864324314131559ull, 9434853950553196669ull, 3455245221893267808ull, 5793377754215274431ull}}, {{7744016423820052353ull, 11793567438191495836ull, 18154114582648748472ull, 7241722192769093038ull}}, {{9680020529775065441ull, 14741959297739369795ull, 13469271191456159782ull, 9052152740961366298ull}}, {{3744169821895721949ull, 4602038542659718218ull, 13029980513087487768ull, 5657595463100853936ull}}, {{13903584314224428244ull, 5752548178324647772ull, 16287475641359359710ull, 7071994328876067420ull}}, {{17379480392780535305ull, 16414057259760585523ull, 1912600477989648021ull, 8839992911095084276ull}}, {{8556332236274140614ull, 12564628796564059904ull, 10418747335598305821ull, 5524995569434427672ull}}, {{10695415295342675767ull, 1870727940422911168ull, 13023434169497882277ull, 6906244461793034590ull}}, {{13369269119178344708ull, 6950095943956026864ull, 7055920675017577038ull, 8632805577241293238ull}}, {{8355793199486465443ull, 18178868020254680502ull, 18245008477168149360ull, 5395503485775808273ull}}, {{1221369462503305996ull, 4276840951608799012ull, 8971202541178022989ull, 6744379357219760342ull}}, {{1526711828129132494ull, 9957737207938386669ull, 1990631139617752928ull, 8430474196524700428ull}}, {{3260037901794401761ull, 6223585754961491668ull, 10467516499115871388ull, 5269046372827937767ull}}, {{4075047377243002201ull, 7779482193701864585ull, 8472709605467451331ull, 6586307966034922209ull}}, {{9705495239981140656ull, 5112666723699942827ull, 15202573025261702068ull, 8232884957543652761ull}}, {{3760091515774518958ull, 12418788739167240075ull, 2584079113147481936ull, 5145553098464782976ull}}, {{88428376290760793ull, 15523485923959050094ull, 3230098891434352420ull, 6431941373080978720ull}}, {{9333907507218226799ull, 957613331239261001ull, 4037623614292940526ull, 8039926716351223400ull}}, {{17362907238079861510ull, 14433566387306701837ull, 2523514758933087828ull, 5024954197719514625ull}}, {{7868575992317663175ull, 18041957984133377297ull, 7766079467093747689ull, 6281192747149393281ull}}, {{14447406008824466873ull, 8717389424884557909ull, 14319285352294572516ull, 7851490933936741601ull}}, {{11335471764728985748ull, 14671740427407624501ull, 2032024317543025966ull, 4907181833710463501ull}}, {{334281650629068472ull, 9116303497404754819ull, 7151716415356170362ull, 6133977292138079376ull}}, {{14252910118568499302ull, 2172007334901167715ull, 8939645519195212953ull, 7667471615172599220ull}}, {{6602225814891618112ull, 12886719630381699582ull, 14810650486351783903ull, 4792169759482874512ull}}, {{17476154305469298448ull, 11496713519549736573ull, 66569034230178263ull, 5990212199353593141ull}}, {{8010134826554459348ull, 9759205881009782813ull, 4694897311215110733ull, 7487765249191991426ull}}, {{7312177275810231045ull, 8405346684844808210ull, 7545996837936832112ull, 4679853280744994641ull}}, {{18363593631617564614ull, 10506683356056010262ull, 14044182065848428044ull, 5849816600931243301ull}}, {{13731120002667179959ull, 13133354195070012828ull, 3720169527028371343ull, 7312270751164054127ull}}, {{17163900003333974949ull, 11805006725410128131ull, 38525890358076275ull, 9140338438955067659ull}}, {{8421594492870040391ull, 5072286194167636130ull, 16164979745969655336ull, 5712711524346917286ull}}, {{1303621079232774681ull, 6340357742709545163ull, 10982852645607293362ull, 7140889405433646608ull}}, {{15464584404323132063ull, 17148819215241707261ull, 13728565807009116702ull, 8926111756792058260ull}}, {{11971208261915651492ull, 6106325991098679134ull, 17803725666235473747ull, 5578819847995036412ull}}, {{5740638290539788556ull, 3021221470445961014ull, 3807913009084790568ull, 6973524809993795516ull}}, {{16399169900029511503ull, 3776526838057451267ull, 4759891261355988210ull, 8716906012492244395ull}}, {{7943638178304750738ull, 6972015292213294946ull, 669089029133798679ull, 5448066257807652747ull}}, {{706175686026162614ull, 4103333096839230779ull, 14671419341699412061ull, 6810082822259565933ull}}, {{14717777662814866979ull, 9740852389476426377ull, 4504216121842101364ull, 8512603527824457417ull}}, {{2281082011618210006ull, 15311404780277542294ull, 14344350122219783112ull, 5320377204890285885ull}}, {{12074724551377538316ull, 692511901637376251ull, 4095379597492565179ull, 6650471506112857357ull}}, {{10481719670794534991ull, 14700697932328884026ull, 9730910515293094377ull, 8313089382641071696ull}}, {{11162760812673972273ull, 2270407180064470660ull, 6081819072058183986ull, 5195680864150669810ull}}, {{13953451015842465341ull, 12061381011935364133ull, 16825645876927505790ull, 6494601080188337262ull}}, {{3606755714520917965ull, 5853354228064429359ull, 11808685309304606430ull, 8118251350235421578ull}}, {{9171751349216655584ull, 17493404447822432061ull, 11992114336742766922ull, 5073907093897138486ull}}, {{16076375204948207384ull, 12643383522923264268ull, 5766770884073682845ull, 6342383867371423108ull}}, {{1648724932475707614ull, 1969171348371916624ull, 7208463605092103557ull, 7927979834214278885ull}}, {{1030453082797317259ull, 3536575101946141842ull, 6811132762396258675ull, 4954987396383924303ull}}, {{10511438390351422382ull, 18255776932714841014ull, 3902229934567935439ull, 6193734245479905379ull}}, {{3915925951084502169ull, 18208035147466163364ull, 266101399782531395ull, 7742167806849881724ull}}, {{11670825756282589664ull, 9074178957952658150ull, 9389685411718857930ull, 4838854879281176077ull}}, {{5365160158498461271ull, 2119351660586046880ull, 16348792783075960317ull, 6048568599101470096ull}}, {{6706450198123076589ull, 7260875594159946504ull, 1989246905135398780ull, 7560710748876837621ull}}, {{4191531373826922868ull, 13761419283204742373ull, 3549122324923318189ull, 4725444218048023513ull}}, {{9851100235711041489ull, 3366716048723764254ull, 9048088924581535641ull, 5906805272560029391ull}}, {{3090503257784026054ull, 8820081079332093222ull, 6698425137299531647ull, 7383506590700036739ull}}, {{15766622591397179996ull, 12430079702223640119ull, 1880672701598513327ull, 4614691619187522962ull}}, {{15096592220819087091ull, 10925913609352162245ull, 11574212913852917467ull, 5768364523984403702ull}}, {{5035682220741695151ull, 9045705993262814903ull, 5244394105461371026ull, 7210455654980504628ull}}, {{1682916757499731035ull, 2083760454723742821ull, 6555492631826713783ull, 9013069568725630785ull}}, {{3357665982651025849ull, 8219879311843421119ull, 15626397940960165874ull, 5633168480453519240ull}}, {{18032140533595946023ull, 1051477102949500590ull, 1086253352490655727ull, 7041460600566899051ull}}, {{13316803630140156721ull, 15149404433969039450ull, 15192874745895483370ull, 8801825750708623813ull}}, {{12934688287264985855ull, 14080063789658037560ull, 11801389725398371058ull, 5501141094192889883ull}}, {{16168360359081232318ull, 8376707700217771142ull, 10140051138320575919ull, 6876426367741112354ull}}, {{10987078411996764589ull, 5859198606844826024ull, 3451691886045944091ull, 8595532959676390443ull}}, {{6866924007497977869ull, 1356156120064322313ull, 18298208493274572721ull, 5372208099797744026ull}}, {{13195341027799860240ull, 6306881168507790795ull, 13649388579738440093ull, 6715260124747180033ull}}, {{11882490266322437395ull, 12495287479062126398ull, 3226677669390886404ull, 8394075155933975042ull}}, {{2814870398024135468ull, 17032926711268604807ull, 6628359561796691906ull, 5246296972458734401ull}}, {{17353646052812333047ull, 12067786352230980200ull, 12897135470673252787ull, 6557871215573418001ull}}, {{3245313492305864693ull, 10473046921861337347ull, 2286361283059402272ull, 8197339019466772502ull}}, {{18169221997187023097ull, 6545654326163335841ull, 15264033857194290132ull, 5123336887166732813ull}}, {{8876469441201615159ull, 8182067907704169802ull, 5244984266210698953ull, 6404171108958416017ull}}, {{1872214764647243141ull, 14839270903057600157ull, 11167916351190761595ull, 8005213886198020021ull}}, {{3475977237118220915ull, 6968701305197306146ull, 9285790728707919949ull, 5003258678873762513ull}}, {{13568343583252551952ull, 13322562649924020586ull, 16218924429312287840ull, 6254073348592203141ull}}, {{7737057442210914132ull, 16653203312405025733ull, 6438597481358196088ull, 7817591685740253927ull}}, {{7141503910595515285ull, 10408252070253141083ull, 10941652453489954411ull, 4885994803587658704ull}}, {{4315193869817006202ull, 8398629069389038450ull, 13677065566862443014ull, 6107493504484573380ull}}, {{14617364374126033560ull, 1274914299881522254ull, 17096331958578053768ull, 7634366880605716725ull}}, {{4524166715401383071ull, 796821437425951409ull, 12991050483324977557ull, 4771479300378572953ull}}, {{10266894412679116743ull, 5607712815209827165ull, 2403755048874058234ull, 5964349125473216192ull}}, {{17445304034276283833ull, 16233013055867059764ull, 3004693811092572792ull, 7455436406841520240ull}}, {{1679942984567901588ull, 10145633159916912353ull, 1877933631932857995ull, 4659647754275950150ull}}, {{6711614749137264888ull, 8070355431468752537ull, 11570789076770848302ull, 5824559692844937687ull}}, {{13001204454848969014ull, 864572252481164863ull, 9851800327536172474ull, 7280699616056172109ull}}, {{11639819550133823364ull, 10304087352456231887ull, 16926436427847603496ull, 9100874520070215136ull}}, {{14192416246474721458ull, 6440054595285144929ull, 10579022767404752185ull, 5688046575043884460ull}}, {{3905462252811238111ull, 12661754262533819066ull, 13223778459255940231ull, 7110058218804855575ull}}, {{14105199852868823447ull, 11215506809739885928ull, 11918037055642537385ull, 8887572773506069469ull}}, {{8815749908043014654ull, 92162728446346849ull, 9754616168990279818ull, 5554732983441293418ull}}, {{15631373403481156222ull, 9338575447412709369ull, 2969898174383073964ull, 6943416229301616773ull}}, {{5704158699069281565ull, 11673219309265886712ull, 8324058736406230359ull, 8679270286627020966ull}}, {{3565099186918300978ull, 14213291095932261051ull, 590850691826506070ull, 5424543929141888104ull}}, {{18291432038930039935ull, 8543241833060550505ull, 738563364783132588ull, 6780679911427360130ull}}, {{9029231993380386206ull, 10679052291325688132ull, 10146576242833691543ull, 8475849889284200162ull}}, {{14866642032717517187ull, 13591936709719636938ull, 10953296170198445118ull, 5297406180802625101ull}}, {{9359930504042120676ull, 7766548850294770365ull, 18303306231175444302ull, 6621757726003281376ull}}, {{16311599148480038749ull, 484814026013687148ull, 4432388715259753762ull, 8277197157504101721ull}}, {{971377430945248410ull, 4914694784685942372ull, 14299457993105815861ull, 5173248223440063575ull}}, {{1214221788681560513ull, 10755054499284815869ull, 13262636472954881922ull, 6466560279300079469ull}}, {{6129463254279338545ull, 4220446087251244028ull, 2743237535911438691ull, 8083200349125099337ull}}, {{13054286570779362399ull, 331935795318333565ull, 13243738506013118942ull, 5052000218203187085ull}}, {{2482800158192039286ull, 9638291781002692765ull, 2719615077234234965ull, 6315000272753983857ull}}, {{7715186216167437011ull, 16659550744680753860ull, 8011204864970181610ull, 7893750340942479821ull}}, {{14045363421959423940ull, 15023905233852859066ull, 7312846049820057458ull, 4933593963089049888ull}}, {{8333332240594504117ull, 9556509505461298025ull, 9141057562275071823ull, 6166992453861312360ull}}, {{15028351319170518051ull, 7333950863399234627ull, 11426321952843839779ull, 7708740567326640450ull}}, {{7086876565267879830ull, 2277876280410827690ull, 11753137238954787766ull, 4817962854579150281ull}}, {{18081967743439625595ull, 12070717387368310420ull, 856363493411320995ull, 6022453568223937852ull}}, {{4155715605589980378ull, 10476710715783000122ull, 1070454366764151244ull, 7528066960279922315ull}}, {{7209008271921125640ull, 15771316234219150884ull, 16809935043723452191ull, 4705041850174951446ull}}, {{9011260339901407050ull, 15102459274346550701ull, 11789046767799539431ull, 5881302312718689308ull}}, {{15875761443304146717ull, 14266388074505800472ull, 14736308459749424289ull, 7351627890898361635ull}}, {{1397957730420631780ull, 3997927037850086879ull, 13808699556259392458ull, 9189534863622952044ull}}, {{7791252609153976718ull, 7110390417083692203ull, 17853809259516896094ull, 5743459289764345027ull}}, {{5127379743015082994ull, 18111360058209391062ull, 17705575555968732213ull, 7179324112205431284ull}}, {{15632596715623629550ull, 8804142017479575115ull, 3685225371251363651ull, 8974155140256789106ull}}, {{7464529938051074517ull, 3196745751711040495ull, 6914951875459490186ull, 5608846962660493191ull}}, {{4718976404136455242ull, 13219304226493576427ull, 4032003825896974828ull, 7011058703325616489ull}}, {{1287034486743181149ull, 16524130283116970534ull, 9651690800798606439ull, 8763823379157020611ull}}, {{14639454609496651930ull, 17245110454589188439ull, 3726463741285435072ull, 5477389611973137882ull}}, {{13687632243443427009ull, 3109643994526933933ull, 13881451713461569649ull, 6846737014966422352ull}}, {{3274482249022120049ull, 8498741011586055321ull, 17351814641826962061ull, 8558421268708027940ull}}, {{13575766451707294791ull, 7617556141454978527ull, 1621512114287075480ull, 5349013292942517463ull}}, {{12358022046206730584ull, 9521945176818723159ull, 15861948198141008062ull, 6686266616178146828ull}}, {{10835841539331025326ull, 2679059434168628141ull, 1380691173966708462ull, 8357833270222683536ull}}, {{9078243971295584781ull, 15509470201637556300ull, 862931983729192788ull, 5223645793889177210ull}}, {{11347804964119480976ull, 940093678337393759ull, 10302037016516266794ull, 6529557242361471512ull}}, {{9573070186721963316ull, 10398489134776518007ull, 12877546270645333492ull, 8161946552951839390ull}}, {{12900697894342308929ull, 15722427746090099562ull, 3436780400725945528ull, 5101216595594899619ull}}, {{6902500331073110353ull, 1206290608903072837ull, 18131033556189595623ull, 6376520744493624523ull}}, {{13239811432268775845ull, 15342921316411004758ull, 18052105926809606624ull, 7970650930617030654ull}}, {{3663196126740596999ull, 9589325822756877974ull, 6670880185828616236ull, 4981656831635644159ull}}, {{13802367195280522057ull, 11986657278446097467ull, 3726914213858382391ull, 6227071039544555199ull}}, {{12641272975673264667ull, 10371635579630233930ull, 46956748895590085ull, 7783838799430693999ull}}, {{12512481628223178321ull, 8788115246482590158ull, 6946876995700825659ull, 4864899249644183749ull}}, {{6417229998424197093ull, 6373458039675849794ull, 13295282263053419978ull, 6081124062055229686ull}}, {{17244909534885022174ull, 17190194586449588050ull, 7395730791961999164ull, 7601405077569037108ull}}, {{15389754477730526763ull, 1520499579676216723ull, 13845703781831025286ull, 4750878173480648192ull}}, {{14625507078735770550ull, 11123996511450046712ull, 17307129727288781607ull, 5938597716850810240ull}}, {{18281883848419713187ull, 9293309620885170486ull, 3187168085401425393ull, 7423247146063512801ull}}, {{6814491386834932838ull, 17337533559121701314ull, 13521195099444360630ull, 4639529466289695500ull}}, {{17741486270398441855ull, 12448544912047350834ull, 16901493874305450788ull, 5799411832862119375ull}}, {{12953485801143276511ull, 15560681140059188543ull, 16515181324454425581ull, 7249264791077649219ull}}, {{11580171233001707735ull, 5615793369791821967ull, 16032290637140644073ull, 9061580988847061524ull}}, {{14155136048267149190ull, 15039085902188358489ull, 796809611358126737ull, 5663488118029413453ull}}, {{3858862005051772776ull, 4963799322453284400ull, 5607698032625046326ull, 7079360147536766816ull}}, {{4823577506314715970ull, 15428121189921381308ull, 7009622540781307907ull, 8849200184420958520ull}}, {{12238107978301473289ull, 7336732734487169365ull, 4381014087988317442ull, 5530750115263099075ull}}, {{1462576917594677900ull, 18394287954963737515ull, 864581591558008898ull, 6913437644078873844ull}}, {{15663279202275511086ull, 13769487906849896085ull, 1080726989447511123ull, 8641797055098592305ull}}, {{12095392510635888381ull, 6300086932567491101ull, 12204669414473164212ull, 5401123159436620190ull}}, {{1284182583012696764ull, 7875108665709363877ull, 6032464731236679457ull, 6751403949295775238ull}}, {{6216914247193258859ull, 14455571850564092750ull, 16763952950900625129ull, 8439254936619719047ull}}, {{17720629459777950499ull, 2117203378961476112ull, 17394999621953972562ull, 5274534335387324404ull}}, {{3704042751012886508ull, 11869876260556620949ull, 3297005453732914086ull, 6593167919234155506ull}}, {{9241739457193496039ull, 5613973288841000378ull, 13344628854020918416ull, 8241459899042694382ull}}, {{10387773179173322928ull, 3508733305525625236ull, 3728707015335686106ull, 5150912436901683989ull}}, {{12984716473966653660ull, 13609288668761807353ull, 9272569787596995536ull, 6438640546127104986ull}}, {{2395837537176153363ull, 17011610835952259192ull, 2367340197641468612ull, 8048300682658881233ull}}, {{1497398460735095852ull, 1408884735615386187ull, 13008802669594387643ull, 5030187926661800770ull}}, {{15706806131201033527ull, 15596163974801396445ull, 7037631300138208745ull, 6287734908327250963ull}}, {{5798449608719128197ull, 5660146913219581845ull, 4185353106745373028ull, 7859668635409063704ull}}, {{5929874014663149075ull, 12760963857617014461ull, 2615845691715858142ull, 4912292897130664815ull}}, {{12024028536756324248ull, 6727832785166492268ull, 17104865169926986390ull, 6140366121413331018ull}}, {{15030035670945405310ull, 17633163018312891143ull, 12157709425553957179ull, 7675457651766663773ull}}, {{16311301321981960175ull, 8714883877231863012ull, 9904411400184917189ull, 4797161032354164858ull}}, {{1942382578767898602ull, 15505290864967216670ull, 3157142213376370678ull, 5996451290442706073ull}}, {{11651350260314649061ull, 10158241544354245029ull, 8558113785147851252ull, 7495564113053382591ull}}, {{9587936921910349615ull, 15572273002076178951ull, 12266350143358488888ull, 4684727570658364119ull}}, {{7373235133960549115ull, 1018597178885672073ull, 10721251660770723207ull, 5855909463322955149ull}}, {{13828229935878074298ull, 15108304528889253803ull, 18013250594390791912ull, 7319886829153693936ull}}, {{12673601401420204968ull, 438636587402015638ull, 4069819169278938275ull, 9149858536442117421ull}}, {{3309314857460240201ull, 16415048931622117438ull, 4849479990013030373ull, 5718661585276323388ull}}, {{13360015608680076059ull, 6683753109245483085ull, 6061849987516287967ull, 7148326981595404235ull}}, {{2864961455567931362ull, 3743005368129465953ull, 2965626465967972055ull, 8935408726994255294ull}}, {{13319815955798426861ull, 9256907382721998076ull, 15688574596512146246ull, 5584630454371409558ull}}, {{16649769944748033577ull, 2347762191547721787ull, 10387346208785407000ull, 6980788067964261948ull}}, {{16200526412507654067ull, 2934702739434652234ull, 12984182760981758750ull, 8725985084955327435ull}}, {{14737015026244671696ull, 15669247267428821358ull, 5809271216399905266ull, 5453740678097079647ull}}, {{9197896745951063812ull, 10363187047431250890ull, 2649903002072493679ull, 6817175847621349559ull}}, {{2273998895584053956ull, 8342297790861675709ull, 17147436807872780811ull, 8521469809526686948ull}}, {{3727092318953727675ull, 2908093110074853366ull, 1493775968065712199ull, 5325918630954179343ull}}, {{13882237435546935402ull, 17470174442875730419ull, 15702278015364303960ull, 6657398288692724178ull}}, {{12741110776006281348ull, 3390973979885111408ull, 10404475482350604143ull, 8321747860865905223ull}}, {{7963194235003925843ull, 9036887765069276486ull, 13420326204110209445ull, 5201092413041190764ull}}, {{730620756900131495ull, 15907795724763983512ull, 16775407755137761806ull, 6501365516301488455ull}}, {{913275946125164369ull, 10661372619100203582ull, 16357573675494814354ull, 8126706895376860569ull}}, {{14405855521610391443ull, 11275043905365015142ull, 3305954519543177115ull, 5079191809610537856ull}}, {{8783947365158213495ull, 9482118863278881024ull, 4132443149428971394ull, 6348989762013172320ull}}, {{10979934206447766869ull, 2629276542243825472ull, 5165553936786214243ull, 7936237202516465400ull}}, {{6862458879029854293ull, 17784198903398248584ull, 3228471210491383901ull, 4960148251572790875ull}}, {{8578073598787317866ull, 8395190573965647018ull, 17870647068396393589ull, 6200185314465988593ull}}, {{1499219961629371525ull, 15105674235884446677ull, 8503250780213328274ull, 7750231643082485742ull}}, {{3242855485232051155ull, 14052732415855167077ull, 702845719205942267ull, 4843894776926553589ull}}, {{8665255374967451848ull, 12954229501391570942ull, 5490243167434815738ull, 6054868471158191986ull}}, {{1608197181854539002ull, 6969414839884687870ull, 16086175996148295481ull, 7568585588947739982ull}}, {{14840181293941250588ull, 15885099320996399678ull, 5442173979165296771ull, 4730365993092337489ull}}, {{9326854580571787427ull, 15244688132818111694ull, 11414403492384008868ull, 5912957491365421861ull}}, {{2435196188859958476ull, 609116092313088002ull, 432946310197847374ull, 7391196864206777327ull}}, {{6133683636464861952ull, 14215755612977843713ull, 7188120471514736464ull, 4619498040129235829ull}}, {{12278790564008465343ull, 17769694516222304641ull, 13596836607820808484ull, 5774372550161544786ull}}, {{1513430149728417967ull, 3765374071568329186ull, 7772673722921234798ull, 7217965687701930983ull}}, {{11115159724015298267ull, 13930089626315187290ull, 5104156135224155593ull, 9022457109627413729ull}}, {{11558660845936949321ull, 1788776988805910200ull, 14719312630583567006ull, 5639035693517133580ull}}, {{14448326057421186651ull, 11459343272862163558ull, 18399140788229458757ull, 7048794616896416975ull}}, {{8837035534921707506ull, 489121035795540736ull, 18387239966859435543ull, 8810993271120521219ull}}, {{5523147209326067191ull, 7223229675013294816ull, 9186181970073453262ull, 5506870794450325762ull}}, {{6903934011657583989ull, 18252409130621394328ull, 2259355425737040769ull, 6883588493062907203ull}}, {{8629917514571979986ull, 8980453357994579198ull, 16659252337453464674ull, 8604485616328634003ull}}, {{782012428180099587ull, 10224469367173999903ull, 8106189701694721469ull, 5377803510205396252ull}}, {{14812573590507288196ull, 17392272727394887782ull, 10132737127118401836ull, 6722254387756745315ull}}, {{9292344951279334437ull, 3293596835534058112ull, 8054235390470614392ull, 8402817984695931644ull}}, {{5807715594549584023ull, 2058498022208786320ull, 14257269155898909803ull, 5251761240434957277ull}}, {{7259644493186980029ull, 16408180583043146612ull, 3986528389591473541ull, 6564701550543696597ull}}, {{9074555616483725036ull, 6675167673521769553ull, 9594846505416729831ull, 8205876938179620746ull}}, {{17200812306370797908ull, 11089508823592187826ull, 10608465084312844048ull, 5128673086362262966ull}}, {{12277643346108721577ull, 13861886029490234783ull, 4037209318536279252ull, 6410841357952828708ull}}, {{10735368164208514067ull, 17327357536862793479ull, 5046511648170349065ull, 8013551697441035885ull}}, {{13627134130271403148ull, 3912069432898164068ull, 5459912789320162118ull, 5008469810900647428ull}}, {{17033917662839253935ull, 14113458827977480893ull, 6824890986650202647ull, 6260587263625809285ull}}, {{7457339023266903706ull, 13030137516544463213ull, 13142799751740141213ull, 7825734079532261606ull}}, {{6966679898755508769ull, 10449678957053983460ull, 3602563826410200354ull, 4891083799707663504ull}}, {{8708349873444385961ull, 3838726659462703517ull, 4503204783012750443ull, 6113854749634579380ull}}, {{15497123360232870355ull, 186722305900991492ull, 5629005978765938054ull, 7642318437043224225ull}}, {{462330063290768164ull, 13951759496470283395ull, 15047343782797181043ull, 4776449023152015140ull}}, {{14412970634395623917ull, 12828013352160466339ull, 362435654786924688ull, 5970561278940018926ull}}, {{13404527274567141992ull, 16035016690200582924ull, 9676416605338431668ull, 7463201598675023657ull}}, {{17601201583459239553ull, 798513394520588519ull, 17576975424404989553ull, 4664500999171889785ull}}, {{17389815960896661537ull, 5609827761578123553ull, 8136161225224073229ull, 5830626248964862232ull}}, {{7902211895838663209ull, 11623970720400042346ull, 10170201531530091536ull, 7288282811206077790ull}}, {{654392832943553204ull, 14529963400500052933ull, 3489379877557838612ull, 9110353514007597238ull}}, {{2714838529803414704ull, 18304599162167308891ull, 16015920478755812844ull, 5693970946254748273ull}}, {{17228606217536432092ull, 4434004878999584497ull, 6184842543162602344ull, 7117463682818435342ull}}, {{7700699716638376403ull, 5542506098749480622ull, 16954425215808028738ull, 8896829603523044177ull}}, {{201251304471597348ull, 8075752330145813293ull, 3678986732238936105ull, 5560518502201902611ull}}, {{4863250149016884589ull, 14706376431109654520ull, 18433791470580833843ull, 6950648127752378263ull}}, {{6079062686271105736ull, 13771284520459680246ull, 18430553319798654400ull, 8688310159690472829ull}}, {{17634472234201604797ull, 8607052825287300153ull, 13824938834087852952ull, 5430193849806545518ull}}, {{8208032237469842285ull, 10758816031609125192ull, 8057801505755040382ull, 6787742312258181898ull}}, {{10260040296837302856ull, 4225148002656630682ull, 848879845339024670ull, 8484677890322727373ull}}, {{11024211203950702189ull, 16475775556942557888ull, 2836392912550584370ull, 5302923681451704608ull}}, {{13780264004938377736ull, 11371347409323421552ull, 3545491140688230463ull, 6628654601814630760ull}}, {{17225330006172972170ull, 9602498243226889036ull, 4431863925860288079ull, 8285818252268288450ull}}, {{1542459217003331799ull, 12919090429657887504ull, 7381600972090067953ull, 5178636407667680281ull}}, {{1928074021254164748ull, 2313804981790195668ull, 13838687233539972846ull, 6473295509584600351ull}}, {{2410092526567705935ull, 12115628264092520393ull, 12686673023497578153ull, 8091619386980750439ull}}, {{13035522875173285969ull, 654738637416743389ull, 14846699667327068202ull, 5057262116862969024ull}}, {{2459345538684443750ull, 10041795333625705045ull, 111630510449283636ull, 6321577646078711281ull}}, {{7685867941782942591ull, 12552244167032131306ull, 4751224156488992449ull, 7901972057598389101ull}}, {{9415353482041727024ull, 927623576754000210ull, 5275358107019314233ull, 4938732535998993188ull}}, {{2545819815697382971ull, 5771215489369888167ull, 6594197633774142791ull, 6173415669998741485ull}}, {{17017332824903892426ull, 2602333343284972304ull, 12854433060645066393ull, 7716769587498426856ull}}, {{10635833015564932766ull, 13155673385621577450ull, 8034020662903166495ull, 4822980992186516785ull}}, {{4071419232601390150ull, 11832905713599583909ull, 14654211847056346023ull, 6028726240233145981ull}}, {{9700960059179125591ull, 10179446123572091982ull, 4482706753538268817ull, 7535907800291432477ull}}, {{1451414018559565591ull, 17891368873301027249ull, 5107534730175111962ull, 4709942375182145298ull}}, {{6425953541626844892ull, 13140839054771508253ull, 15607790449573665761ull, 5887427968977681622ull}}, {{12644127945460944019ull, 2590990763182221604ull, 10286366025112306394ull, 7359284961222102028ull}}, {{15805159931826180024ull, 12462110490832552813ull, 12857957531390382992ull, 9199106201527627535ull}}, {{12184067966605056467ull, 7788819056770345508ull, 14953752484760071226ull, 5749441375954767209ull}}, {{15230084958256320584ull, 512651784108156077ull, 4857132550667925321ull, 7186801719943459012ull}}, {{5202548142538237018ull, 5252500748562583001ull, 6071415688334906651ull, 8983502149929323765ull}}, {{14780807635154867896ull, 976969958637920423ull, 6100477814423010609ull, 5614688843705827353ull}}, {{13864323525516196966ull, 5832898466724788433ull, 12237283286456151165ull, 7018361054632284191ull}}, {{3495346351613082496ull, 11902809101833373446ull, 10684918089642801052ull, 8772951318290355239ull}}, {{16019649525040340272ull, 16662627725500634211ull, 13595602833667832513ull, 5483094573931472024ull}}, {{15412875887873037436ull, 6993226601593629052ull, 16994503542084790642ull, 6853868217414340030ull}}, {{819350786131745179ull, 17964905288846812124ull, 12019757390751212494ull, 8567335271767925038ull}}, {{9735466278187116545ull, 6616379787101869673ull, 2900662350792119905ull, 5354584544854953149ull}}, {{16781018866161283585ull, 12882160752304724995ull, 8237513956917537785ull, 6693230681068691436ull}}, {{16364587564274216577ull, 2267642885098742532ull, 10296892446146922232ull, 8366538351335864295ull}}, {{1004495190816609553ull, 1417276803186714083ull, 13353086806482908251ull, 5229086469584915184ull}}, {{15090677043802925653ull, 15606654059265556315ull, 16691358508103635313ull, 6536358086981143980ull}}, {{14251660286326269162ull, 5673259518799781682ull, 2417454061419992526ull, 8170447608726429976ull}}, {{13518973697381306130ull, 17380845254532027263ull, 1510908788387495328ull, 5106529755454018735ull}}, {{12287031103299244759ull, 3279312494455482463ull, 15723694040766532873ull, 6383162194317523418ull}}, {{10747102860696668045ull, 8710826636496740983ull, 10431245514103390283ull, 7978952742896904273ull}}, {{13634468315576499384ull, 3138423638596769162ull, 18048743492383088687ull, 4986845464310565170ull}}, {{7819713357615848422ull, 17758087603528125165ull, 13337557328624085050ull, 6233556830388206463ull}}, {{14386327715447198431ull, 12974237467555380648ull, 12060260642352718409ull, 7791946037985258079ull}}, {{8991454822154499020ull, 1191369389581031049ull, 14455191929111530862ull, 4869966273740786299ull}}, {{15851004546120511679ull, 10712583773831064619ull, 13457303892962025673ull, 6087457842175982874ull}}, {{15202069664223251694ull, 18002415735716218678ull, 7598257829347756283ull, 7609322302719978593ull}}, {{4889607521712144405ull, 8945666825608942722ull, 16278126189410817437ull, 4755826439199986620ull}}, {{15335381438994956314ull, 15793769550438566306ull, 1900913663053970180ull, 5944783048999983276ull}}, {{9945854761888919584ull, 1295467864338656267ull, 2376142078817462726ull, 7430978811249979095ull}}, {{3910316216966880788ull, 14644725470493823879ull, 8402617826901996059ull, 4644361757031236934ull}}, {{276209252781213081ull, 13694220819689891945ull, 1279900246772719266ull, 5805452196289046168ull}}, {{4956947584403904256ull, 7894403987757589123ull, 1599875308465899083ull, 7256815245361307710ull}}, {{1584498462077492416ull, 5256318966269598500ull, 11223216172437149662ull, 9071019056701634637ull}}, {{10213683575653208568ull, 17120257409200662774ull, 9320353116986912490ull, 5669386910438521648ull}}, {{3543732432711734902ull, 12176949724646052660ull, 11650441396233640613ull, 7086733638048152060ull}}, {{4429665540889668627ull, 1386129100525402113ull, 14563051745292050767ull, 8858417047560190075ull}}, {{14297756009124512652ull, 7783859715469458176ull, 6796064331593837777ull, 5536510654725118797ull}}, {{17872195011405640815ull, 14341510662764210624ull, 13106766432919685125ull, 6920638318406398496ull}}, {{3893499690547499403ull, 4091830273173099569ull, 16383458041149606407ull, 8650797898007998120ull}}, {{13962652352660656887ull, 9474922948374269086ull, 10239661275718504004ull, 5406748686254998825ull}}, {{8229943403971045300ull, 11843653685467836358ull, 17411262613075517909ull, 6758435857818748531ull}}, {{1064057218109030817ull, 969509051552631736ull, 17152392247917009483ull, 8448044822273435664ull}}, {{665035761318144261ull, 16746844221716252499ull, 10720245154948130926ull, 5280028013920897290ull}}, {{14666352756929844038ull, 11710183240290539815ull, 4176934406830387850ull, 6600035017401121613ull}}, {{13721254927734917144ull, 5414357013508398961ull, 9832854026965372717ull, 8250043771751402016ull}}, {{1658255302193241359ull, 5689816142656443303ull, 6145533766853357948ull, 5156277357344626260ull}}, {{15907877183023715411ull, 7112270178320554128ull, 7681917208566697435ull, 6445346696680782825ull}}, {{1438102405070092647ull, 4278651704473304757ull, 14214082529135759698ull, 8056683370850978531ull}}, {{3204657012382501857ull, 7285843333723203377ull, 6577958571496155859ull, 5035427106781861582ull}}, {{8617507283905515225ull, 4495618148726616317ull, 17445820251224970632ull, 6294283883477326977ull}}, {{15383570123309281935ull, 5619522685908270396ull, 7972217258749049578ull, 7867854854346658722ull}}, {{391359290213525401ull, 8123887697120056902ull, 9594321805145543890ull, 4917409283966661701ull}}, {{9712571149621682560ull, 931487584545295319ull, 16604588274859317767ull, 6146761604958327126ull}}, {{7529027918599715295ull, 14999417535963782861ull, 11532363306719371400ull, 7683452006197908908ull}}, {{7011485458338516012ull, 9374635959977364288ull, 16431099103554382933ull, 4802157503873693067ull}}, {{8764356822923145015ull, 16329980968399093264ull, 15927187861015590762ull, 6002696879842116334ull}}, {{10955446028653931268ull, 11189104173644090772ull, 10685612789414712645ull, 7503371099802645418ull}}, {{16070525804763482851ull, 9299033117741250684ull, 11290194011811583307ull, 4689606937376653386ull}}, {{1641413182244801947ull, 7012105378749175452ull, 4889370477909703326ull, 5862008671720816733ull}}, {{2051766477806002434ull, 17988503760291245123ull, 10723399115814517061ull, 7327510839651020916ull}}, {{16399766152539666754ull, 8650571645081892691ull, 13404248894768146327ull, 9159388549563776145ull}}, {{7944010836123597770ull, 12324136305817264788ull, 1460126531589009598ull, 5724617843477360091ull}}, {{9930013545154497212ull, 6181798345416805177ull, 15660216219768425710ull, 7155772304346700113ull}}, {{17024202949870509419ull, 16950619968625782279ull, 5740212219428368425ull, 8944715380433375142ull}}, {{17557655871310150243ull, 3676608452750032068ull, 17422690692424893978ull, 5590447112770859463ull}}, {{3500325765428136188ull, 13819132602792315894ull, 17166677347103729568ull, 6988058890963574329ull}}, {{13598779243639946042ull, 17273915753490394867ull, 7623288628597498248ull, 8735073613704467912ull}}, {{6193394018061272325ull, 10796197345931496792ull, 4764555392873436405ull, 5459421008565292445ull}}, {{7741742522576590406ull, 18106932700841758894ull, 10567380259519183410ull, 6824276260706615556ull}}, {{453806116365962199ull, 13410293839197422810ull, 13209225324398979263ull, 8530345325883269445ull}}, {{4895314841156114279ull, 15298962677139471112ull, 10561608836963055991ull, 5331465828677043403ull}}, {{6119143551445142848ull, 14512017327996950986ull, 8590325027776432085ull, 6664332285846304254ull}}, {{16872301476161204368ull, 4304963604714025020ull, 1514534247865764299ull, 8330415357307880318ull}}, {{1321816385745976922ull, 384759243732571686ull, 14781641960198266399ull, 5206509598317425198ull}}, {{10875642519037246961ull, 14316007109947878319ull, 9253680413393057190ull, 6508136997896781498ull}}, {{8982867130369170797ull, 8671636850580072091ull, 2343728479886545680ull, 8135171247370976873ull}}, {{3308448947267037796ull, 5419773031612545057ull, 12994045345997560810ull, 5084482029606860545ull}}, {{8747247202511185149ull, 15998088326370457129ull, 2407498627214787300ull, 6355602537008575682ull}}, {{15545745021566369340ull, 1550866334253519795ull, 12232745320873259934ull, 7944503171260719602ull}}, {{7410247629265286886ull, 14804349514190613584ull, 12257151843973175362ull, 4965314482037949751ull}}, {{9262809536581608607ull, 9282064855883491172ull, 10709753786539081299ull, 6206643102547437189ull}}, {{11578511920727010759ull, 6990895051426976061ull, 17998878251601239528ull, 7758303878184296486ull}}, {{9542412959668075676ull, 4369309407141860038ull, 6637612888823386801ull, 4848939923865185304ull}}, {{2704644162730318787ull, 10073322777354712952ull, 8297016111029233501ull, 6061174904831481630ull}}, {{3380805203412898484ull, 17203339490120779094ull, 1147898101931766068ull, 7576468631039352038ull}}, {{15948061307415225265ull, 1528715144470711125ull, 14552494368989517505ull, 4735292894399595023ull}}, {{6100018578986867869ull, 6522579949015776811ull, 13578931942809508977ull, 5919116117999493779ull}}, {{3013337205306196932ull, 12764910954697108918ull, 12361978910084498317ull, 7398895147499367224ull}}, {{15718393808598536795ull, 10283912355899387025ull, 7726236818802811448ull, 4624309467187104515ull}}, {{5812934205466007281ull, 12854890444874233782ull, 5046110005076126406ull, 5780386833983880644ull}}, {{16489539793687284909ull, 6845241019238016419ull, 6307637506345158008ull, 7225483542479850805ull}}, {{16000238723681718232ull, 8556551274047520524ull, 12496232901358835414ull, 9031854428099813506ull}}, {{776777165446298087ull, 736158527852312424ull, 12421831581776660038ull, 5644909017562383441ull}}, {{970971456807872609ull, 10143570196670166338ull, 1692231421938661335ull, 7056136271952979302ull}}, {{10437086357864616569ull, 8067776727410320018ull, 11338661314278102477ull, 8820170339941224127ull}}, {{11134864992092773260ull, 7348203463845143963ull, 14004192349064895904ull, 5512606462463265079ull}}, {{9306895221688578671ull, 9185254329806429954ull, 12893554417903731976ull, 6890758078079081349ull}}, {{2410246990255947531ull, 11481567912258037443ull, 2281884967097501258ull, 8613447597598851687ull}}, {{17647305433405824871ull, 11787665963588661305ull, 8343707132077020142ull, 5383404748499282304ull}}, {{8224073736475117376ull, 5511210417631050824ull, 10429633915096275178ull, 6729255935624102880ull}}, {{10280092170593896720ull, 16112385058893589338ull, 13037042393870343972ull, 8411569919530128600ull}}, {{11036743625048573354ull, 846868624953717528ull, 8148151496168964983ull, 5257231199706330375ull}}, {{13795929531310716693ull, 14893643836474310622ull, 5573503351783818324ull, 6571538999632912969ull}}, {{8021539877283620058ull, 170310721883336662ull, 11578565208157160810ull, 8214423749541141211ull}}, {{401776404874874632ull, 4718130219604473318ull, 4930760245884531554ull, 5134014843463213257ull}}, {{9725592542948369098ull, 15121034811360367455ull, 10775136325783052346ull, 6417518554329016571ull}}, {{7545304660258073469ull, 9677921477345683511ull, 8857234388801427529ull, 8021898192911270714ull}}, {{11633344440302377774ull, 17577915969409521954ull, 10147457511428280109ull, 5013686370569544196ull}}, {{5318308513523196410ull, 8137336906479738731ull, 12684321889285350137ull, 6267107963211930245ull}}, {{2036199623476607608ull, 14783357151527061318ull, 2020344306324523959ull, 7833884954014912807ull}}, {{15107682819955043467ull, 16157127247345495179ull, 8180244219093909330ull, 4896178096259320504ull}}, {{14272917506516416430ull, 10973037022327093166ull, 10225305273867386663ull, 6120222620324150630ull}}, {{8617774846290744729ull, 9104610259481478554ull, 3558259555479457521ull, 7650278275405188288ull}}, {{9997795297359103360ull, 17219596458244393856ull, 2223912222174660950ull, 4781423922128242680ull}}, {{12497244121698879200ull, 12301123535950716512ull, 2779890277718326188ull, 5976779902660303350ull}}, {{15621555152123599000ull, 15376404419938395640ull, 12698234884002683543ull, 7470974878325379187ull}}, {{9763471970077249375ull, 16527781790102579131ull, 5630553793287983262ull, 4669359298953361992ull}}, {{7592653944169173815ull, 11436355200773448106ull, 7038192241609979078ull, 5836699123691702490ull}}, {{267445393356691460ull, 5072071964112034325ull, 18021112338867249656ull, 7295873904614628112ull}}, {{4945992760123252229ull, 6340089955140042906ull, 4079646349874510454ull, 9119842380768285141ull}}, {{7702931493504420547ull, 17797614277244690528ull, 4855621977885262985ull, 5699901487980178213ull}}, {{9628664366880525684ull, 8411959791273699448ull, 10681213490783966636ull, 7124876859975222766ull}}, {{12035830458600657105ull, 10514949739092124310ull, 4128144826625182487ull, 8906096074969028458ull}}, {{2910708018198022787ull, 13489372614573659550ull, 7191776535068126958ull, 5566310046855642786ull}}, {{12861757059602304291ull, 7638343731362298629ull, 18213092705689934506ull, 6957887558569553482ull}}, {{2242138269220716652ull, 324557627348097479ull, 13542993845257642325ull, 8697359448211941853ull}}, {{8318865445904029764ull, 2508691526306254876ull, 10770214162499720405ull, 5435849655132463658ull}}, {{10398581807380037204ull, 7747550426310206499ull, 4239395666269874698ull, 6794812068915579573ull}}, {{8386541240797658601ull, 461065996032982316ull, 9910930601264731277ull, 8493515086144474466ull}}, {{14464960312353312434ull, 2594009256734307899ull, 10806017644217844952ull, 5308446928840296541ull}}, {{13469514372014252638ull, 3242511570917884874ull, 18119208073699694094ull, 6635558661050370676ull}}, {{7613520928163039990ull, 13276511500502131901ull, 4202266018415066001ull, 8294448326312963346ull}}, {{7064293589315593946ull, 1380290660172750582ull, 7238102279936804155ull, 5184030203945602091ull}}, {{18053739023499268240ull, 15560421380498101939ull, 4435941831493617289ull, 6480037754932002614ull}}, {{17955487760946697396ull, 5615468670340463712ull, 14768299326221797420ull, 8100047193665003267ull}}, {{11222179850591685873ull, 12733039955817565628ull, 6924344069674929435ull, 5062529496040627042ull}}, {{14027724813239607341ull, 11304613926344569131ull, 17878802123948437602ull, 6328161870050783802ull}}, {{12922969998122121272ull, 4907395371075935606ull, 13125130618080771195ull, 7910202337563479753ull}}, {{3465170230398937891ull, 761279097708765802ull, 1285677608659400141ull, 4943876460977174846ull}}, {{13554834824853448172ull, 5563284890563345156ull, 10830469047679025984ull, 6179845576221468557ull}}, {{16943543531066810215ull, 6954106113204181445ull, 18149772328026170384ull, 7724806970276835696ull}}, {{12895557716130450336ull, 4346316320752613403ull, 11343607705016356490ull, 4828004356423022310ull}}, {{11507761126735675016ull, 14656267437795542562ull, 4956137594415669804ull, 6035005445528777888ull}}, {{5161329371564817962ull, 18320334297244428203ull, 6195171993019587255ull, 7543756806910972360ull}}, {{919987848014317275ull, 18367737963418849483ull, 3871982495637242034ull, 4714848004319357725ull}}, {{14985042865300060305ull, 13736300417418786045ull, 9451664137973940447ull, 5893560005399197156ull}}, {{4896245526342911669ull, 12558689503346094653ull, 11814580172467425559ull, 7366950006748996445ull}}, {{10731992926356027491ull, 11086675860755230412ull, 933167160302118237ull, 9208687508436245557ull}}, {{15930867615827292990ull, 9235015422185712959ull, 2889072484402517850ull, 5755429692772653473ull}}, {{15301898501356728333ull, 2320397240877365391ull, 8223026623930535217ull, 7194287115965816841ull}}, {{14515687108268522512ull, 7512182569524094643ull, 14890469298340556925ull, 8992858894957271051ull}}, {{6766461433454132618ull, 7000957115166253104ull, 7000700302249154126ull, 5620536809348294407ull}}, {{8458076791817665773ull, 17974568430812592188ull, 4139189359384054753ull, 7025671011685368009ull}}, {{10572595989772082216ull, 8633152483233576523ull, 9785672717657456346ull, 8782088764606710011ull}}, {{4302029484393857433ull, 10007406320448373231ull, 3810202439322216264ull, 5488805477879193757ull}}, {{765850837064933887ull, 12509257900560466539ull, 9374439067580158234ull, 6861006847348992196ull}}, {{14792371601613331071ull, 6413200338845807365ull, 11718048834475197793ull, 8576258559186240245ull}}, {{11551075260222025872ull, 15537465257847099363ull, 9629623530760692572ull, 5360161599491400153ull}}, {{9827158056850144435ull, 975087498599322588ull, 16648715431878253620ull, 6700201999364250191ull}}, {{12283947571062680544ull, 1218859373249153235ull, 16199208271420429121ull, 8375252499205312739ull}}, {{5371624222700481388ull, 12291002154349190532ull, 7818662160424074248ull, 5234532812003320462ull}}, {{6714530278375601735ull, 15363752692936488165ull, 549955663675317002ull, 6543166015004150578ull}}, {{13004848866396890073ull, 9981318829315834398ull, 9910816616448922061ull, 8178957518755188222ull}}, {{3516344523070668392ull, 8544167277536090451ull, 1582574366853188384ull, 5111848449221992639ull}}, {{18230488709120499201ull, 10680209096920113063ull, 15813276013848649192ull, 6389810561527490798ull}}, {{18176424867973236098ull, 13350261371150141329ull, 10543222980456035682ull, 7987263201909363498ull}}, {{4442736514842190705ull, 12955599375396226235ull, 11201200381212410205ull, 4992039501193352186ull}}, {{941734625125350477ull, 2359441163963119082ull, 4778128439660736949ull, 6240049376491690233ull}}, {{10400540318261463905ull, 7560987473381286756ull, 10584346568003309090ull, 7800061720614612791ull}}, {{15723709735768190749ull, 9337303189290692126ull, 13532745632643150037ull, 4875038575384132994ull}}, {{10431265132855462628ull, 16283315005040753062ull, 7692560003949161738ull, 6093798219230166243ull}}, {{3815709379214552476ull, 11130771719446165520ull, 5004013986509064269ull, 7617247774037707804ull}}, {{2384818362009095298ull, 9262575333867547402ull, 12350880778422940976ull, 4760779858773567377ull}}, {{12204394989366144930ull, 11578219167334434252ull, 1603542917746512508ull, 5950974823466959222ull}}, {{15255493736707681163ull, 14472773959168042815ull, 11227800684037916443ull, 7438718529333699027ull}}, {{16452212613083382583ull, 6739640715266332807ull, 4711532418310003825ull, 4649199080833561892ull}}, {{15953579747926840324ull, 13036236912510303913ull, 5889415522887504781ull, 5811498851041952365ull}}, {{6106916629626386693ull, 2460238085355716180ull, 11973455422036768881ull, 7264373563802440456ull}}, {{7633645787032983367ull, 7686983625122033129ull, 14966819277545961101ull, 9080466954753050570ull}}, {{16300243662964084364ull, 7110207774914964657ull, 13965948066893613592ull, 5675291846720656606ull}}, {{6540246523422941743ull, 8887759718643705822ull, 8234063046762241182ull, 7094114808400820758ull}}, {{17398680191133452987ull, 1886327611449856469ull, 1069206771598025670ull, 8867643510501025948ull}}, {{13180018128672102069ull, 15014012812438324005ull, 9891626269103541851ull, 5542277194063141217ull}}, {{2639964605557963874ull, 14155829997120517103ull, 16976218854806815218ull, 6927846492578926521ull}}, {{17135013812229618555ull, 8471415459545870570ull, 7385215513226355311ull, 8659808115723658152ull}}, {{15321069651070899501ull, 12212163689857250962ull, 4615759695766472069ull, 5412380072327286345ull}}, {{9927965026983848568ull, 1430146557039399991ull, 10381385638135477991ull, 6765475090409107931ull}}, {{7798270265302422806ull, 15622741251581413701ull, 8365046029241959584ull, 8456843863011384914ull}}, {{7179761925027708206ull, 9764213282238383563ull, 9839839786703612644ull, 5285527414382115571ull}}, {{4363016387857247353ull, 12205266602797979454ull, 7688113714952127901ull, 6606909267977644464ull}}, {{14677142521676334999ull, 1421525198215310605ull, 9610142143690159877ull, 8258636584972055580ull}}, {{11479057085261403327ull, 3194296258098263080ull, 15229710876661125731ull, 5161647865607534737ull}}, {{14348821356576754158ull, 17827928377904992562ull, 5202080540544243451ull, 6452059832009418422ull}}, {{8712654658866166890ull, 17673224453953852799ull, 15725972712535080122ull, 8065074790011773027ull}}, {{12362938189432436162ull, 15657451302148545903ull, 7522889936120731124ull, 5040671743757358142ull}}, {{10841986718363157299ull, 1125070053976130763ull, 180240383296138098ull, 6300839679696697678ull}}, {{8940797379526558719ull, 10629709604324939262ull, 9448672515974948430ull, 7876049599620872097ull}}, {{976312343776711296ull, 2031882484275699135ull, 17434635368552812529ull, 4922530999763045060ull}}, {{15055448485003052832ull, 7151539123772011822ull, 3346550136981464045ull, 6153163749703806326ull}}, {{9595938569399040231ull, 13551109923142402682ull, 13406559708081605864ull, 7691454687129757907ull}}, {{10609147624301788049ull, 8469443701964001676ull, 6073256808337309713ull, 4807159179456098692ull}}, {{13261434530377235061ull, 15198490645882389999ull, 7591571010421637141ull, 6008948974320123365ull}}, {{11965107144544155922ull, 5163055252070823787ull, 14101149781454434331ull, 7511186217900154206ull}}, {{5172348956126403499ull, 921066523330570915ull, 4201532594981633553ull, 4694491386187596379ull}}, {{1853750176730616470ull, 5763019172590601548ull, 640229725299654037ull, 5868114232734495474ull}}, {{2317187720913270588ull, 11815459984165639839ull, 10023659193479343354ull, 7335142790918119342ull}}, {{16731542706423751946ull, 5545952943352273990ull, 3306201954994403385ull, 9168928488647649178ull}}, {{5845528173087457063ull, 14995435635663641004ull, 6678062240298890019ull, 5730580305404780736ull}}, {{7306910216359321328ull, 14132608526152163351ull, 8347577800373612524ull, 7163225381755975920ull}}, {{4521951752021763756ull, 17665760657690204189ull, 10434472250467015655ull, 8954031727194969900ull}}, {{5132062854227296300ull, 17958629438697459474ull, 15744917193396660592ull, 5596269829496856187ull}}, {{15638450604638896183ull, 4001542724662272726ull, 15069460473318437837ull, 6995337286871070234ull}}, {{10324691218943844420ull, 9613614424255228812ull, 9613453554793271488ull, 8744171608588837793ull}}, {{15676304048694678571ull, 6008509015159518007ull, 17537623517814264440ull, 5465107255368023620ull}}, {{14983694042440960309ull, 7510636268949397509ull, 3475285323558278934ull, 6831384069210029526ull}}, {{4894559497769036674ull, 164923299331971079ull, 13567478691302624476ull, 8539230086512536907ull}}, {{9976628713746729778ull, 9326449098937257732ull, 6173831172850446345ull, 5337018804070335567ull}}, {{12470785892183412222ull, 16269747392098960069ull, 3105602947635670027ull, 6671273505087919459ull}}, {{1753424309947101565ull, 15725498221696312183ull, 17717061739826751246ull, 8339091881359899323ull}}, {{8013419221358020335ull, 5216750370132807210ull, 8767320578178025577ull, 5211932425849937077ull}}, {{793401989842749610ull, 11132623981093396917ull, 15570836741149919875ull, 6514915532312421346ull}}, {{5603438505730824917ull, 9304093957939358242ull, 10240173889582624036ull, 8143644415390526683ull}}, {{8113835084509153477ull, 15038430760566874709ull, 4094265671775446070ull, 5089777759619079177ull}}, {{14753979874063829750ull, 9574666413853817578ull, 9729518108146695492ull, 6362222199523848971ull}}, {{9219102805725011380ull, 11968333017317271973ull, 7550211616755981461ull, 7952777749404811214ull}}, {{8067782262791826064ull, 9786051145036988935ull, 107196242045100509ull, 4970486093378007009ull}}, {{5473041810062394676ull, 16844249949723624073ull, 4745681320983763540ull, 6213107616722508761ull}}, {{11452988281005381249ull, 2608568363444978475ull, 10543787669657092330ull, 7766384520903135951ull}}, {{4852274666414669329ull, 6242041245580499451ull, 13507396321176764562ull, 4853990325564459969ull}}, {{1453657314590948757ull, 17025923593830400122ull, 3049187346188791990ull, 6067487906955574962ull}}, {{11040443680093461754ull, 12059032455433224344ull, 13034856219590765796ull, 7584359883694468702ull}}, {{6900277300058413597ull, 16760267321500541023ull, 3535099118816840718ull, 4740224927309042939ull}}, {{4013660606645629092ull, 11726962115020900471ull, 18253931953803214610ull, 5925281159136303673ull}}, {{405389739879648460ull, 5435330606921349781ull, 8982356886971854551ull, 7406601448920379592ull}}, {{2559211596638474240ull, 10314610656966925469ull, 5613973054357409094ull, 4629125905575237245ull}}, {{7810700514225480704ull, 3669891284353881028ull, 11629152336374149272ull, 5786407381969046556ull}}, {{9763375642781850880ull, 4587364105442351285ull, 14536440420467686590ull, 7233009227461308195ull}}, {{16815905571904701503ull, 14957577168657714914ull, 13558864507157220333ull, 9041261534326635244ull}}, {{15121627000867826344ull, 11654328739624765773ull, 17697662353828038516ull, 5650788458954147027ull}}, {{5066975695802619218ull, 14567910924530957217ull, 17510391923857660241ull, 7063485573692683784ull}}, {{10945405638180661926ull, 4374830600381532809ull, 3441245831112523686ull, 8829356967115854731ull}}, {{18370093569931383464ull, 16569327180520621717ull, 18291679708941184967ull, 5518348104447409206ull}}, {{9127558907132065618ull, 16099972957223389243ull, 13641227599321705401ull, 6897935130559261508ull}}, {{6797762615487694118ull, 6289908141247072842ull, 17051534499152131752ull, 8622418913199076885ull}}, {{8860287653107196728ull, 3931192588279420526ull, 12963052071183776297ull, 5389011820749423053ull}}, {{1851987529529220102ull, 9525676753776663562ull, 2368757033697556659ull, 6736264775936778817ull}}, {{11538356448766300935ull, 7295409923793441548ull, 7572632310549333728ull, 8420330969920973521ull}}, {{16434844817333713893ull, 4559631202370900967ull, 16262110240161803340ull, 5262706856200608450ull}}, {{15931870003239754462ull, 5699539002963626209ull, 11104265763347478367ull, 6578383570250760563ull}}, {{6079779448767529365ull, 2512737735277144858ull, 9268646185756960055ull, 8222979462813450704ull}}, {{8411548173907093757ull, 8487990112189297392ull, 5792903866098100034ull, 5139362164258406690ull}}, {{10514435217383867197ull, 1386615603381845932ull, 16464501869477400851ull, 6424202705323008362ull}}, {{13143044021729833996ull, 15568327559509471127ull, 11357255299991975255ull, 8030253381653760453ull}}, {{15131931541222228103ull, 16647733752334501310ull, 9404127571708678486ull, 5018908363533600283ull}}, {{9691542389673009321ull, 11586295153563350830ull, 7143473446208460204ull, 6273635454417000354ull}}, {{2891055950236485843ull, 14482868941954188538ull, 18152713844615351063ull, 7842044318021250442ull}}, {{6418595987325191556ull, 15969322116362449692ull, 15957132171311982318ull, 4901277698763281526ull}}, {{8023244984156489445ull, 10738280608598286307ull, 10723043177285202090ull, 6126597123454101908ull}}, {{5417370211768223902ull, 4199478723893082076ull, 13403803971606502613ull, 7658246404317627385ull}}, {{12609228419209915747ull, 4930517211646870249ull, 1459848454612982277ull, 4786404002698517116ull}}, {{1926477468730230972ull, 10774832532985975716ull, 1824810568266227846ull, 5983005003373146395ull}}, {{2408096835912788715ull, 4245168629377693837ull, 16116071265614948520ull, 7478756254216432993ull}}, {{3810903531659186899ull, 2653230393361058648ull, 3155015513368260969ull, 4674222658885270621ull}}, {{4763629414573983623ull, 7928224010128711214ull, 8555455410137714115ull, 5842778323606588276ull}}, {{15177908805072255337ull, 5298593994233501113ull, 10694319262672142644ull, 7303472904508235345ull}}, {{5137327951058155459ull, 6623242492791876392ull, 17979585096767566209ull, 9129341130635294181ull}}, {{3210829969411347162ull, 15668741604063392505ull, 13543083694693422832ull, 5705838206647058863ull}}, {{8625223480191571857ull, 1139182931369689015ull, 12317168599939390637ull, 7132297758308823579ull}}, {{6169843331812076917ull, 6035664682639499173ull, 10784774731496850392ull, 8915372197886029474ull}}, {{6161995091596242025ull, 3772290426649686983ull, 11352170225612919399ull, 5572107623678768421ull}}, {{3090807846067914627ull, 103677014884720825ull, 355154726733985537ull, 6965134529598460527ull}}, {{8475195826012281188ull, 4741282287033288935ull, 14279001463699645633ull, 8706418161998075658ull}}, {{12214526418898757599ull, 14492516475464275344ull, 13536061933239666424ull, 5441511351248797286ull}}, {{15268158023623446998ull, 18115645594330344180ull, 7696705379694807222ull, 6801889189060996608ull}}, {{638453455819757132ull, 13421184956058154418ull, 9620881724618509028ull, 8502361486326245760ull}}, {{5010719428314736112ull, 17611612634391122319ull, 6013051077886568142ull, 5313975928953903600ull}}, {{1651713266966032235ull, 12791143756134127091ull, 7516313847358210178ull, 6642469911192379500ull}}, {{15899699638989704006ull, 6765557658312883055ull, 9395392309197762723ull, 8303087388990474375ull}}, {{16854841302009646860ull, 1922630527231857957ull, 12789649220889683558ull, 5189429618119046484ull}}, {{7233493572229894863ull, 11626660195894598255ull, 15987061526112104447ull, 6486787022648808105ull}}, {{4430180946859980674ull, 9921639226440859915ull, 6148768852357966847ull, 8108483778311010132ull}}, {{463020082573793970ull, 13118553544166619303ull, 13066352569578505087ull, 5067802361444381332ull}}, {{14413833158499406174ull, 11786505911780886224ull, 16332940711973131359ull, 6334752951805476665ull}}, {{18017291448124257717ull, 10121446371298719876ull, 6581117834684250487ull, 7918441189756845832ull}}, {{2037435118222885266ull, 13243433009702781779ull, 4113198646677656554ull, 4949025743598028645ull}}, {{16381851953060770294ull, 7330919225273701415ull, 9753184326774458597ull, 6186282179497535806ull}}, {{15865628922898574963ull, 13775335050019514673ull, 2968108371613297438ull, 7732852724371919758ull}}, {{2998489049170527496ull, 3997898387834808767ull, 15690125787540474611ull, 4833032952732449848ull}}, {{17583169366745323082ull, 385686966366123054ull, 1165913160716041648ull, 6041291190915562311ull}}, {{12755589671576878044ull, 482108707957653818ull, 15292449506177215772ull, 7551613988644452888ull}}, {{12583929563162936682ull, 9524689979328309444ull, 9557780941360759857ull, 4719758742902783055ull}}, {{15729911953953670852ull, 16517548492587774709ull, 7335540158273561917ull, 5899698428628478819ull}}, {{5827331887159924853ull, 6811877560452554675ull, 4557739179414564493ull, 7374623035785598524ull}}, {{2672478840522518162ull, 13126532968993081248ull, 5697173974268205616ull, 9218278794731998155ull}}, {{1670299275326573852ull, 8204083105620675780ull, 1254890724703934558ull, 5761424246707498847ull}}, {{2087874094158217315ull, 1031731845171068917ull, 15403671461162081910ull, 7201780308384373558ull}}, {{7221528636125159547ull, 10513036843318611954ull, 10031217289597826579ull, 9002225385480466948ull}}, {{9125141416005612621ull, 4264805017860438519ull, 15492882842853417420ull, 5626390865925291842ull}}, {{6794740751579627872ull, 5331006272325548149ull, 10142731516711995967ull, 7032988582406614803ull}}, {{13105111957901922744ull, 2052071821979547282ull, 8066728377462607055ull, 8791235728008268504ull}}, {{12802380992116089619ull, 8200073916378298907ull, 5041705235914129409ull, 5494522330005167815ull}}, {{11391290221717724120ull, 14861778413900261538ull, 1690445526465273857ull, 6868152912506459769ull}}, {{5015740740292379342ull, 4742164962093163211ull, 6724742926508980226ull, 8585191140633074711ull}}, {{828994953469043137ull, 7575539119735614911ull, 11120493356709194497ull, 5365744462895671694ull}}, {{14871301747118467633ull, 14081109918096906542ull, 4677244659031717313ull, 6707180578619589618ull}}, {{9365755147043308733ull, 3766329342338969466ull, 15069927860644422450ull, 8383975723274487022ull}}, {{10465282985329455862ull, 6965641857389243820ull, 4807018894475376127ull, 5239984827046554389ull}}, {{13081603731661819828ull, 4095366303309166871ull, 10620459636521608063ull, 6549981033808192986ull}}, {{11740318646149886881ull, 507521860709070685ull, 4052202508797234271ull, 8187476292260241233ull}}, {{9643542163057373253ull, 7234730190584251034ull, 14061841614066741179ull, 5117172682662650770ull}}, {{2831055666966940758ull, 4431726719802925889ull, 8353929980728650666ull, 6396465853328313463ull}}, {{8150505602136063851ull, 14763030436608433169ull, 5830726457483425428ull, 7995582316660391829ull}}, {{16623281047403509667ull, 3521986025494922ull, 5950047045140834845ull, 4997238947912744893ull}}, {{11555729272399611276ull, 4616088500959256557ull, 12049244824853431460ull, 6246548684890931116ull}}, {{609603535217350382ull, 5770110626199070697ull, 15061556031066789325ull, 7808185856113663895ull}}, {{11910217255579313749ull, 5912162150588113137ull, 16331001547057825184ull, 4880116160071039934ull}}, {{1052713514191978474ull, 7390202688235141422ull, 11190379896967505672ull, 6100145200088799918ull}}, {{10539263929594748901ull, 9237753360293926777ull, 4764602834354606282ull, 7625181500110999898ull}}, {{18116255002065187823ull, 10385281868611092139ull, 7589562789899016830ull, 4765738437569374936ull}}, {{18033632734154096875ull, 3758230298909089366ull, 9486953487373771038ull, 5957173046961718670ull}}, {{13318668880837845285ull, 13921159910491137516ull, 2635319822362437989ull, 7446466308702148338ull}}, {{17547540087378429112ull, 11006567953270654899ull, 6258760907403911647ull, 4654041442938842711ull}}, {{17322739090795648485ull, 9146523923160930720ull, 3211765115827501655ull, 5817551803673553389ull}}, {{3206679789785008991ull, 6821468885523775497ull, 8626392413211764973ull, 7271939754591941736ull}}, {{8620035755658649142ull, 13138522125332107275ull, 10782990516514706216ull, 9089924693239927170ull}}, {{3081679338072961762ull, 8211576328332567047ull, 11351055091249079289ull, 5681202933274954481ull}}, {{17687157227873365914ull, 14876156428843096712ull, 353760808779185399ull, 7101503666593693102ull}}, {{3662202461132155777ull, 13983509517626482987ull, 9665573047828757557ull, 8876879583242116377ull}}, {{18429777602703455025ull, 11045536457730245818ull, 17570198200961443233ull, 5548049739526322735ull}}, {{13813849966524542973ull, 18418606590590195177ull, 17351061732774416137ull, 6935062174407903419ull}}, {{3432254402873515004ull, 9188200182955580260ull, 17077141147540632268ull, 8668827718009879274ull}}, {{11368531038650722686ull, 14965997151202013470ull, 15284899235640283071ull, 5418017323756174546ull}}, {{4987291761458627549ull, 14095810420575128934ull, 9882752007695578031ull, 6772521654695218183ull}}, {{15457486738678060244ull, 13008077007291523263ull, 7741753991192084635ull, 8465652068369022729ull}}, {{16578458239314869509ull, 5824205120343508087ull, 16367811290563522657ull, 5291032542730639205ull}}, {{16111386780716198982ull, 11891942418856773013ull, 6624706057922239609ull, 6613790678413299007ull}}, {{6304175420613085015ull, 1029869968288802555ull, 3669196553975411608ull, 8267238348016623759ull}}, {{1634266628669484183ull, 643668730180501597ull, 9210776873875714111ull, 5167023967510389849ull}}, {{6654519304264243132ull, 14639643968007790708ull, 16125157110772030542ull, 6458779959387987311ull}}, {{8318149130330303915ull, 9076182923154962577ull, 15544760370037650274ull, 8073474949234984139ull}}, {{16728058252524909707ull, 10284300345399239514ull, 7409632222059837469ull, 5045921843271865087ull}}, {{11686700778801361326ull, 17467061450176437297ull, 4650354259147408932ull, 6307402304089831359ull}}, {{773317918219537945ull, 3387082739010995006ull, 1201256805506873262ull, 7884252880112289199ull}}, {{14318381754169374928ull, 15951984767164035590ull, 7668314531082877644ull, 4927658050070180749ull}}, {{8674605155856942852ull, 1493236885245492872ull, 14197079182280984960ull, 6159572562587725936ull}}, {{10843256444821178564ull, 1866546106556866090ull, 17746348977851231200ull, 7699465703234657420ull}}, {{11388721296440624507ull, 1166591316598041306ull, 1868096074302243692ull, 4812166064521660888ull}}, {{5012529583696004826ull, 1458239145747551633ull, 2335120092877804615ull, 6015207580652076110ull}}, {{10877347998047393936ull, 15657856987466603253ull, 12142272152952031576ull, 7519009475815095137ull}}, {{9104185507993315162ull, 9786160617166627033ull, 671391067953937879ull, 4699380922384434461ull}}, {{15991917903419031856ull, 7621014753030895887ull, 5450924853369810253ull, 5874226152980543076ull}}, {{15378211360846401916ull, 14137954459716007763ull, 6813656066712262816ull, 7342782691225678845ull}}, {{14611078182630614491ull, 17672443074645009704ull, 13128756101817716424ull, 9178478364032098556ull}}, {{9131923864144134057ull, 11045276921653131065ull, 17428844600490848573ull, 5736548977520061597ull}}, {{16026590848607555476ull, 18418282170493801735ull, 7950997695331397004ull, 7170686221900076997ull}}, {{15421552542332056440ull, 4576108639407700553ull, 14550433137591634160ull, 8963357777375096246ull}}, {{2720941311316453419ull, 2860067899629812846ull, 4482334692567383446ull, 5602098610859435154ull}}, {{12624548676000342582ull, 12798456911392041865ull, 14826290402564005115ull, 7002623263574293942ull}}, {{1945627789718264515ull, 11386385120812664428ull, 9309490966350230586ull, 8753279079467867428ull}}, {{10439389405428691130ull, 11728176718935303171ull, 15041803890823669924ull, 5470799424667417142ull}}, {{8437550738358476009ull, 14660220898669128964ull, 9578882826674811597ull, 6838499280834271428ull}}, {{10546938422948095011ull, 4490218068054247493ull, 11973603533343514497ull, 8548124101042839285ull}}, {{8897679523556253334ull, 14335601338602374443ull, 9789345217553390512ull, 5342577563151774553ull}}, {{6510413386017928763ull, 17919501673252968054ull, 16848367540369126044ull, 6678221953939718191ull}}, {{17361388769377186762ull, 3952633017856658451ull, 16448773407034019652ull, 8347777442424647739ull}}, {{8545024971647047774ull, 11693767673015187340ull, 7974640370182568330ull, 5217360901515404837ull}}, {{10681281214558809718ull, 5393837554414208367ull, 14579986481155598317ull, 6521701126894256046ull}}, {{8739915499771124243ull, 11353982961445148363ull, 9001611064589722088ull, 8152126408617820058ull}}, {{3156604178143258700ull, 7096239350903217727ull, 10237692933795964209ull, 5095079005386137536ull}}, {{17780813277961237087ull, 13481985207056410062ull, 12797116167244955261ull, 6368848756732671920ull}}, {{13002644560596770551ull, 3017423453538348866ull, 15996395209056194077ull, 7961060945915839900ull}}, {{12738338868800369499ull, 4191732667675161993ull, 774374968805345490ull, 4975663091197399938ull}}, {{2087865530718298161ull, 14463037871448728300ull, 10191340747861457670ull, 6219578863996749922ull}}, {{2609831913397872701ull, 8855425302456134567ull, 3515803897972046280ull, 7774473579995937403ull}}, {{8548673973514752294ull, 5534640814035084104ull, 18338278500728386589ull, 4859045987497460876ull}}, {{10685842466893440368ull, 11529987035971243034ull, 4476104052200931620ull, 6073807484371826096ull}}, {{4133931046762024652ull, 14412483794964053793ull, 5595130065251164525ull, 7592259355464782620ull}}, {{14112921950294735168ull, 11313645381066227572ull, 12720328327636753636ull, 4745162097165489137ull}}, {{17641152437868418959ull, 14142056726332784465ull, 2065352354263778333ull, 5931452621456861422ull}}, {{8216382492053359987ull, 3842512852633816870ull, 11805062479684498725ull, 7414315776821076777ull}}, {{523553039105962088ull, 4707413542109829496ull, 460635022161729847ull, 4633947360513172986ull}}, {{654441298882452610ull, 1272580909209898966ull, 9799165814556938117ull, 5792434200641466232ull}}, {{10041423660457841570ull, 6202412154939761611ull, 12248957268196172646ull, 7240542750801832790ull}}, {{7940093557144914059ull, 16976387230529477822ull, 6087824548390439999ull, 9050678438502290988ull}}, {{350872454788183383ull, 17527771046722005495ull, 13028262379598800807ull, 5656674024063931867ull}}, {{14273648623767392940ull, 17298027789975118964ull, 11673641956071113105ull, 7070842530079914834ull}}, {{17842060779709241175ull, 7787476682186734993ull, 5368680408234115574ull, 8838553162599893543ull}}, {{4233758959677193879ull, 255486907939321467ull, 10272954282787404090ull, 5524095726624933464ull}}, {{680512681169104444ull, 9542730671778927642ull, 12841192853484255112ull, 6905119658281166830ull}}, {{10074012888316156363ull, 11928413339723659552ull, 6828119030000543082ull, 8631399572851458538ull}}, {{6296258055197597727ull, 12066944355754675124ull, 8879260412177727330ull, 5394624733032161586ull}}, {{7870322568996997159ull, 5860308407838568097ull, 1875703478367383355ull, 6743280916290201983ull}}, {{14449589229673634353ull, 2713699491370822217ull, 16179687403241392906ull, 8429101145362752478ull}}, {{2113464240904939615ull, 6307748200534151790ull, 5500618608598482662ull, 5268188215851720299ull}}, {{11865202337985950326ull, 17108057287522465545ull, 2264087242320715423ull, 6585235269814650374ull}}, {{996444867200274196ull, 16773385590975694028ull, 12053481089755670087ull, 8231544087268312967ull}}, {{9846150078854947180ull, 17400895022000890623ull, 14450954708738375660ull, 5144715054542695604ull}}, {{7696001580141296071ull, 3304374703791561663ull, 18063693385922969576ull, 6430893818178369505ull}}, {{5008315956749232185ull, 4130468379739452079ull, 8744558677121548258ull, 8038617272722961882ull}}, {{10047726500609351972ull, 7193228755764545453ull, 10077035191628355565ull, 5024135795451851176ull}}, {{17171344144189077869ull, 13603221963133069720ull, 12596293989535444456ull, 6280169744314813970ull}}, {{3017436106526795720ull, 17004027453916337151ull, 6521995450064529762ull, 7850212180393517463ull}}, {{8803426594220329181ull, 15239203177125098623ull, 10993776183931412957ull, 4906382612745948414ull}}, {{6392597224348023572ull, 5213945916124209567ull, 4518848193059490389ull, 6132978265932435518ull}}, {{3379060512007641561ull, 11129118413582649863ull, 14871932278179138794ull, 7666222832415544397ull}}, {{9029441847645857832ull, 11567385026916544068ull, 11600800683075655698ull, 4791389270259715248ull}}, {{11286802309557322290ull, 5235859246790904277ull, 14501000853844569623ull, 5989236587824644060ull}}, {{273444831664489150ull, 1933138040061242443ull, 18126251067305712029ull, 7486545734780805075ull}}, {{16311804084286163383ull, 3514054284251970478ull, 9023063907852376066ull, 4679091084238003172ull}}, {{11166383068502928421ull, 13615939892169738906ull, 11278829884815470082ull, 5848863855297503965ull}}, {{4734606798773884718ull, 7796552828357397825ull, 263479300737173891ull, 7311079819121879957ull}}, {{10529944516894743801ull, 5134005017019359377ull, 4941035144348855268ull, 9138849773902349946ull}}, {{18110430369127684636ull, 12432125172491875418ull, 7699832983645422446ull, 5711781108688968716ull}}, {{13414665924554829987ull, 6316784428760068465ull, 9624791229556778058ull, 7139726385861210895ull}}, {{2933274350411373771ull, 17119352572804861390ull, 7419303018518584668ull, 8924657982326513619ull}}, {{15668354524289272319ull, 1476223321148262560ull, 2331221377360421466ull, 5577911238954071012ull}}, {{1138699081652038783ull, 11068651188290104009ull, 2914026721700526832ull, 6972389048692588765ull}}, {{6035059870492436382ull, 13835813985362630011ull, 8254219420553046444ull, 8715486310865735956ull}}, {{1466069409844078787ull, 17870755777706419565ull, 14382259174700429835ull, 5447178944291084972ull}}, {{6444272780732486388ull, 17726758703705636552ull, 17977823968375537294ull, 6808973680363856215ull}}, {{8055340975915607985ull, 12935076342777269882ull, 17860593942042033714ull, 8511217100454820269ull}}, {{9646274128374642895ull, 12696108732663181580ull, 13468714222989965023ull, 5319510687784262668ull}}, {{12057842660468303618ull, 11258449897401589071ull, 16835892778737456279ull, 6649388359730328335ull}}, {{10460617307157991618ull, 9461376353324598435ull, 16433179954994432445ull, 8311735449662910419ull}}, {{4232042807760050810ull, 8219203230041567974ull, 7964894462657826326ull, 5194834656039319012ull}}, {{14513425546554839320ull, 1050632000697184159ull, 9956118078322282908ull, 6493543320049148765ull}}, {{13530095914766161246ull, 1313290000871480199ull, 17056833616330241539ull, 8116929150061435956ull}}, {{15373838974369932635ull, 16961707315040532788ull, 1437148973351625153ull, 5073080718788397473ull}}, {{770554644252864178ull, 7367076088518502274ull, 6408122235116919346ull, 6341350898485496841ull}}, {{10186565342170856030ull, 18432217147502903650ull, 12621838812323537086ull, 7926688623106871051ull}}, {{10978289357284172923ull, 6908449698761926877ull, 5582806248488516727ull, 4954180389441794407ull}}, {{18334547715032604057ull, 4023876105025020692ull, 2366821792183258005ull, 6192725486802243009ull}}, {{4471440570081203456ull, 9641531149708663770ull, 7570213258656460410ull, 7740906858502803761ull}}, {{7406336374728140064ull, 10637642986995302760ull, 16260598332728757516ull, 4838066786564252350ull}}, {{9257920468410175080ull, 13297053733744128450ull, 11102375879056171087ull, 6047583483205315438ull}}, {{2349028548657943042ull, 12009631148752772659ull, 4654597811965438051ull, 7559479354006644298ull}}, {{17609043907407072065ull, 5200176458756788959ull, 7520809650905786686ull, 4724674596254152686ull}}, {{17399618865831452177ull, 15723592610300762007ull, 177640026777457549ull, 5905843245317690858ull}}, {{17137837563861927318ull, 5819432707593788797ull, 9445422070326597745ull, 7382304056647113572ull}}, {{13016991486627398526ull, 15166360488314587758ull, 15126760830808899398ull, 4613940035404445982ull}}, {{7047867321429472349ull, 9734578573538458890ull, 9685079001656348440ull, 5767425044255557478ull}}, {{18033206188641616244ull, 12168223216923073612ull, 2882976715215659742ull, 7209281305319446848ull}}, {{4094763662092468689ull, 5986906984299066208ull, 3603720894019574678ull, 9011601631649308560ull}}, {{2559227288807792931ull, 17576874920469080092ull, 2252325558762234173ull, 5632251019780817850ull}}, {{3199034111009741163ull, 8136035595304186403ull, 12038778985307568525ull, 7040313774726022312ull}}, {{17833850694044340166ull, 14781730512557620907ull, 15048473731634460656ull, 8800392218407527890ull}}, {{8840313674564018652ull, 9238581570348513067ull, 14016982100698925814ull, 5500245136504704931ull}}, {{6438706074777635411ull, 2324854926080865526ull, 12909541607446269364ull, 6875306420630881164ull}}, {{17271754630326820071ull, 2906068657601081907ull, 16136927009307836705ull, 8594133025788601455ull}}, {{8489003634740568593ull, 13345507957069145952ull, 17003108408458479796ull, 5371333141117875909ull}}, {{10611254543425710741ull, 16681884946336432440ull, 7418827455290936033ull, 6714166426397344887ull}}, {{13264068179282138426ull, 7017298127638376838ull, 4661848300686282138ull, 8392708032996681109ull}}, {{3678356593623948612ull, 8997497348201373428ull, 5219498197142620288ull, 5245442520622925693ull}}, {{4597945742029935765ull, 11246871685251716785ull, 11136058764855663264ull, 6556803150778657116ull}}, {{10359118195964807611ull, 14058589606564645981ull, 13920073456069579080ull, 8196003938473321395ull}}, {{8780291881691698709ull, 8786618504102903738ull, 6394202900829792973ull, 5122502461545825872ull}}, {{1751992815259847578ull, 15594959148556017577ull, 7992753626037241216ull, 6403128076932282340ull}}, {{6801677037502197376ull, 1046954861985470355ull, 9990942032546551521ull, 8003910096165352925ull}}, {{1945205139225179408ull, 12183561834809388732ull, 8550181779555288652ull, 5002443810103345578ull}}, {{2431506424031474260ull, 15229452293511735915ull, 1464355187589335007ull, 6253054762629181973ull}}, {{16874441085321506537ull, 14425129348462281989ull, 6442130002914056663ull, 7816318453286477466ull}}, {{12852368687539635538ull, 15933234870430008099ull, 8638017270248673318ull, 4885199033304048416ull}}, {{11453774840997156518ull, 10693171551182734316ull, 10797521587810841648ull, 6106498791630060520ull}}, {{14317218551246445648ull, 13366464438978417895ull, 13496901984763552060ull, 7633123489537575650ull}}, {{15865790622170110386ull, 17577412311216286992ull, 13047249758904607941ull, 4770702180960984781ull}}, {{1385494204003086367ull, 8136707333738195029ull, 2474004143348596215ull, 5963377726201230977ull}}, {{6343553773431245862ull, 5559198148745355882ull, 7704191197613133173ull, 7454222157751538721ull}}, {{8576407126821916568ull, 5780341852179541378ull, 16344334544576677993ull, 4658888848594711700ull}}, {{1497136871672619902ull, 11837113333651814627ull, 1983674107011295875ull, 5823611060743389626ull}}, {{15706479144872938589ull, 10184705648637380379ull, 11702964670618895652ull, 7279513825929237032ull}}, {{15021412912663785332ull, 12730882060796725474ull, 14628705838273619565ull, 9099392282411546290ull}}, {{14000069088842253737ull, 10262644297211647373ull, 13754627167348400132ull, 5687120176507216431ull}}, {{3665028305770653459ull, 12828305371514559217ull, 12581597940758112261ull, 7108900220634020539ull}}, {{9192971400640704728ull, 2200323659111035309ull, 11115311407520252423ull, 8886125275792525674ull}}, {{8051450134614134407ull, 8292731314585478924ull, 11558755648127545668ull, 5553828297370328546ull}}, {{10064312668267668009ull, 10365914143231848655ull, 5225072523304656277ull, 6942285371712910683ull}}, {{7968704816907197107ull, 17569078697467198723ull, 1919654635703432442ull, 8677856714641138354ull}}, {{2674597501353304240ull, 15592360204344387106ull, 5811470165742033180ull, 5423660446650711471ull}}, {{12566618913546406108ull, 1043706181720932266ull, 2652651688750153572ull, 6779575558313389339ull}}, {{6484901605078231826ull, 1304632727151165333ull, 17150872666219855677ull, 8474469447891736673ull}}, {{6358906512387588844ull, 3121238463683172285ull, 3801766388746327942ull, 5296543404932335421ull}}, {{12560319158911873958ull, 13124920116458741164ull, 9363894004360297831ull, 6620679256165419276ull}}, {{15700398948639842448ull, 11794464127146038551ull, 11704867505450372289ull, 8275849070206774095ull}}, {{16730278370540983386ull, 454011051825192238ull, 14233071218547564537ull, 5172405668879233809ull}}, {{11689475926321453425ull, 5179199833208878202ull, 3956280967902291959ull, 6465507086099042262ull}}, {{5388472871047040973ull, 1862313773083709849ull, 14168723246732640757ull, 8081883857623802827ull}}, {{14897010590472870368ull, 3469789117391012607ull, 6549609019994206521ull, 5051177411014876767ull}}, {{14009577219663700056ull, 8948922415166153663ull, 3575325256565370247ull, 6313971763768595959ull}}, {{12900285506152237166ull, 6574467000530304175ull, 18304214625988876521ull, 7892464704710744948ull}}, {{14980207468986230085ull, 15638256921399909869ull, 2216762104388272017ull, 4932790440444215593ull}}, {{4890201280950623894ull, 5712763096467723625ull, 7382638648912727926ull, 6165988050555269491ull}}, {{10724437619615667771ull, 16364325907439430339ull, 4616612292713522003ull, 7707485063194086864ull}}, {{4396930503046098405ull, 7921860682935950010ull, 2885382682945951252ull, 4817178164496304290ull}}, {{14719535165662398814ull, 9902325853669937512ull, 12830100390537214873ull, 6021472705620380362ull}}, {{18399418957077998518ull, 16989593335514809794ull, 6814253451316742783ull, 7526840882025475453ull}}, {{16111322866601136978ull, 17536024862337837977ull, 6564751416286658191ull, 4704275551265922158ull}}, {{6304095527969257510ull, 17308345059494909568ull, 17429311307213098547ull, 5880344439082402697ull}}, {{7880119409961571888ull, 17023745305941249056ull, 7951581078734209472ull, 7350430548853003372ull}}, {{9850149262451964859ull, 2832937558717009704ull, 9939476348417761841ull, 9188038186066254215ull}}, {{6156343289032478037ull, 13299801020266600825ull, 13129701745402183006ull, 5742523866291408884ull}}, {{12307115129717985451ull, 7401379238478475223ull, 16412127181752728758ull, 7178154832864261105ull}}, {{10772207893720093909ull, 28352011243318221ull, 6680100921908747236ull, 8972693541080326382ull}}, {{9038472942788752645ull, 9241092043881849696ull, 18010121131475130734ull, 5607933463175203988ull}}, {{11298091178485940807ull, 2327993017997536312ull, 4065907340634361802ull, 7009916828969004986ull}}, {{14122613973107426008ull, 12133363309351696198ull, 14305756212647728060ull, 8762396036211256232ull}}, {{4214947714764753351ull, 16806724105199585932ull, 8941097632904830037ull, 5476497522632035145ull}}, {{5268684643455941689ull, 7173347076217318703ull, 15788058059558425451ull, 6845621903290043931ull}}, {{1974169785892539207ull, 4354997826844260475ull, 15123386556020643910ull, 8557027379112554914ull}}, {{17374757180678694669ull, 16556931697059826508ull, 14063802615940290347ull, 5348142111945346821ull}}, {{3271702402138816720ull, 16084478602897395232ull, 3744695214643199222ull, 6685177639931683527ull}}, {{4089628002673520899ull, 10882226216766968232ull, 69182999876611124ull, 8356472049914604409ull}}, {{2556017501670950562ull, 16024763422334130953ull, 11572454420991351712ull, 5222795031196627755ull}}, {{7806707895516076107ull, 1584210204208112075ull, 9853882007811801737ull, 6528493788995784694ull}}, {{5146698850967707229ull, 6591948773687527998ull, 3093980472909976363ull, 8160617236244730868ull}}, {{17051744837136980730ull, 1814124974341011046ull, 11157109832423511035ull, 5100385772652956792ull}}, {{12091309009566450105ull, 16102714273208427520ull, 13946387290529388793ull, 6375482215816195990ull}}, {{15114136261958062631ull, 6293334786228370688ull, 8209612076306960184ull, 7969352769770244988ull}}, {{9446335163723789145ull, 3933334241392731680ull, 14354379584546625923ull, 4980845481106403117ull}}, {{11807918954654736431ull, 304981783313526696ull, 4107916425401118692ull, 6226056851383003897ull}}, {{14759898693318420538ull, 381227229141908370ull, 9746581550178786269ull, 7782571064228754871ull}}, {{13836622701751400741ull, 2544110027427386683ull, 13009142496502823274ull, 4864106915142971794ull}}, {{12684092358761863022ull, 12403509571139009162ull, 7038056083773753284ull, 6080133643928714743ull}}, {{6631743411597552969ull, 15504386963923761453ull, 4185884086289803701ull, 7600167054910893429ull}}, {{6450682641462164558ull, 11996084861666044860ull, 4922020563144821265ull, 4750104409319308393ull}}, {{8063353301827705697ull, 1160048021800392363ull, 10764211722358414486ull, 5937630511649135491ull}}, {{5467505608857244217ull, 10673432064105266262ull, 8843578634520630203ull, 7422038139561419364ull}}, {{17252249060817941348ull, 4365052030852097461ull, 14750608683430169685ull, 4638773837225887102ull}}, {{7730253270740262973ull, 10068001056992509731ull, 9214888817432936298ull, 5798467296532358878ull}}, {{5051130569997940812ull, 3361629284385861356ull, 2295238984936394565ull, 7248084120665448598ull}}, {{6313913212497426015ull, 8813722623909714599ull, 12092420768025269014ull, 9060105150831810747ull}}, {{10863724785451973115ull, 896890621516183720ull, 5251919970802099182ull, 5662565719269881717ull}}, {{13579655981814966394ull, 10344485313750005458ull, 11176585981930011881ull, 7078207149087352146ull}}, {{7751197940413932184ull, 17542292660614894727ull, 4747360440557739043ull, 8847758936359190183ull}}, {{11762027740399789471ull, 8658089903670615252ull, 9884629302989668758ull, 5529849335224493864ull}}, {{14702534675499736839ull, 1599240342733493257ull, 12355786628737085948ull, 6912311669030617330ull}}, {{4543110289092507337ull, 1999050428416866572ull, 6221361249066581627ull, 8640389586288271663ull}}, {{12062815967537592894ull, 17390307582256399271ull, 10805879808307695372ull, 5400243491430169789ull}}, {{10466833940994603213ull, 3291140404110947473ull, 18119035778812007120ull, 6750304364287712236ull}}, {{17695228444670641920ull, 4113925505138684341ull, 4202050649805457284ull, 8437880455359640296ull}}, {{13365360787132845152ull, 11794575477566453521ull, 2626281656128410802ull, 5273675284599775185ull}}, {{2871642928633892728ull, 5519847310103291094ull, 7894538088587901407ull, 6592094105749718981ull}}, {{12812925697647141718ull, 2288123119201725963ull, 14479858629162264663ull, 8240117632187148726ull}}, {{5702235551815769622ull, 8347605977142160583ull, 4438225624799027510ull, 5150073520116967954ull}}, {{2516108421342324123ull, 1211135434572924921ull, 14771154067853560196ull, 6437591900146209942ull}}, {{7756821545105293058ull, 1513919293216156151ull, 9240570547962174437ull, 8046989875182762428ull}}, {{11765542493331890018ull, 3252042567473791546ull, 14998728629331134831ull, 5029368671989226517ull}}, {{5483556079810086714ull, 17900111264624403145ull, 4913352731381754826ull, 6286710839986533147ull}}, {{11466131118189996296ull, 13151767043925728123ull, 1530004895799805629ull, 7858388549983166434ull}}, {{4860488939655053733ull, 10525697411667274029ull, 5567939078302266422ull, 4911492843739479021ull}}, {{10687297192996205070ull, 3933749727729316728ull, 11571609866305220932ull, 6139366054674348776ull}}, {{13359121491245256338ull, 4917187159661645910ull, 14464512332881526165ull, 7674207568342935970ull}}, {{3737764913600897307ull, 5379084984002222646ull, 13652006226478341757ull, 4796379730214334981ull}}, {{13895578178855897442ull, 11335542248430166211ull, 3229949727815763484ull, 5995474662767918727ull}}, {{12757786705142483899ull, 14169427810537707764ull, 17872495215051868067ull, 7494343328459898408ull}}, {{17196988727568828245ull, 6550049372372373400ull, 11170309509407417542ull, 4683964580287436505ull}}, {{3049491835751483690ull, 17410933752320242559ull, 127828831477108215ull, 5854955725359295632ull}}, {{17646922849971518324ull, 17151981171972915294ull, 159786039346385269ull, 7318694656699119540ull}}, {{12835281525609622097ull, 7604918409683980406ull, 199732549182981587ull, 9148368320873899425ull}}, {{3410364935078625907ull, 2447230996838793802ull, 11654047889307833252ull, 5717730200546187140ull}}, {{13486328205703058191ull, 3059038746048492252ull, 14567559861634791565ull, 7147162750682733925ull}}, {{16857910257128822739ull, 8435484450988003219ull, 4374391771761325744ull, 8933953438353417407ull}}, {{8230350901491820260ull, 5272177781867502012ull, 9651523884991910446ull, 5583720898970885879ull}}, {{10287938626864775325ull, 15813594264189153323ull, 7452718837812500153ull, 6979651123713607349ull}}, {{8248237265153581252ull, 5931934774954277942ull, 13927584565693013096ull, 8724563904642009186ull}}, {{543462272293600379ull, 3707459234346423714ull, 13316426371985521089ull, 5452852440401255741ull}}, {{9902699877221776281ull, 9246010061360417546ull, 2810474909699737649ull, 6816065550501569677ull}}, {{3155002809672444544ull, 16169198595127909837ull, 8124779655552059965ull, 8520081938126962096ull}}, {{4277719765258971792ull, 12411592131168637600ull, 5077987284720037478ull, 5325051211329351310ull}}, {{5347149706573714740ull, 6291118127106021192ull, 15570856142754822656ull, 6656314014161689137ull}}, {{6683937133217143425ull, 7863897658882526490ull, 5628512123161364608ull, 8320392517702111422ull}}, {{8789146726688102545ull, 4914936036801579056ull, 17352878132258016592ull, 5200245323563819638ull}}, {{10986433408360128181ull, 6143670046001973820ull, 12467725628467744932ull, 6500306654454774548ull}}, {{13733041760450160226ull, 7679587557502467275ull, 15584657035584681165ull, 8125383318068468185ull}}, {{6277308091067656189ull, 7105585232652735999ull, 2822881619599343872ull, 5078364573792792616ull}}, {{3234949095407182332ull, 8881981540815919999ull, 3528602024499179840ull, 6347955717240990770ull}}, {{17878744424541141627ull, 11102476926019899998ull, 13634124567478750608ull, 7934944646551238462ull}}, {{6562529246910825613ull, 6939048078762437499ull, 3909641836246831226ull, 4959340404094524039ull}}, {{3591475540211144113ull, 17897182135307822682ull, 275366276881151128ull, 6199175505118155049ull}}, {{13712716462118705949ull, 3924733595425226736ull, 4955893864528826815ull, 7748969381397693811ull}}, {{8570447788824191218ull, 9370487524781848566ull, 791590656116822807ull, 4843105863373558632ull}}, {{1489687699175463214ull, 7101423387549922804ull, 989488320146028509ull, 6053882329216948290ull}}, {{1862109623969329018ull, 13488465252864791409ull, 10460232437037311444ull, 7567352911521185362ull}}, {{12693033561049300396ull, 17653662819895270438ull, 11149331291575707556ull, 4729595569700740851ull}}, {{6642919914456849687ull, 3620334451159536432ull, 9324978096042246542ull, 5911994462125926064ull}}, {{8303649893071062109ull, 13748790100804196348ull, 11656222620052808177ull, 7389993077657407580ull}}, {{14413153220024189626ull, 1675464785361540861ull, 16508511174387780919ull, 4618745673535879737ull}}, {{4181383469748073321ull, 15929389036984089789ull, 6800580912702562436ull, 5773432091919849672ull}}, {{9838415355612479555ull, 1464992222520560620ull, 8500726140878203046ull, 7216790114899812090ull}}, {{12298019194515599443ull, 11054612315005476583ull, 1402535639242977999ull, 9020987643624765113ull}}, {{14603791024213331508ull, 13826661724519504720ull, 12405799820595331009ull, 5638117277265478195ull}}, {{18254738780266664385ull, 3448269100367217188ull, 10895563757316775858ull, 7047646596581847744ull}}, {{4371679401623778866ull, 13533708412313797294ull, 13619454696645969822ull, 8809558245727309680ull}}, {{16567357681297025503ull, 3846881739268735404ull, 8512159185403731139ull, 5505973903579568550ull}}, {{2262453027911730263ull, 196916155658531352ull, 1416826944899888116ull, 6882467379474460688ull}}, {{2828066284889662828ull, 246145194573164190ull, 1771033681124860145ull, 8603084224343075860ull}}, {{15602599483338202980ull, 11683055792676697378ull, 10330268087557813398ull, 5376927640214422412ull}}, {{10279877317317977917ull, 5380447703991095915ull, 12912835109447266748ull, 6721159550268028015ull}}, {{8238160628220084492ull, 6725559629988869894ull, 11529357868381695531ull, 8401449437835035019ull}}, {{537164374210164904ull, 1897631759529349732ull, 4900005658524865755ull, 5250905898646896887ull}}, {{671455467762706129ull, 16207097754693850877ull, 1513321054728694289ull, 6563632373308621109ull}}, {{5451005353130770566ull, 6423814138085149884ull, 6503337336838255766ull, 8204540466635776386ull}}, {{12630250382561507412ull, 17849941891585382389ull, 8676271853951297757ull, 5127837791647360241ull}}, {{1952754922919720552ull, 8477369309199564275ull, 15457025835866510101ull, 6409797239559200301ull}}, {{16276001708931814402ull, 15208397654926843247ull, 5486224239550973914ull, 8012246549449000377ull}}, {{17090030095723465858ull, 14116934552756664933ull, 14958105195787828456ull, 5007654093405625235ull}}, {{7527479564372168610ull, 17646168190945831167ull, 14085945476307397666ull, 6259567616757031544ull}}, {{4797663437037822858ull, 12834338201827513151ull, 17607431845384247083ull, 7824459520946289430ull}}, {{9916068675789721143ull, 5715618366928501767ull, 6392958884937766523ull, 4890287200591430894ull}}, {{7783399826309763524ull, 2532836940233239305ull, 17214570643026983962ull, 6112859000739288617ull}}, {{14340935801314592309ull, 12389418212146324939ull, 7683155248501566240ull, 7641073750924110772ull}}, {{6657241866607926241ull, 7743386382591453087ull, 14025344067168254708ull, 4775671094327569232ull}}, {{3709866314832519898ull, 9679232978239316359ull, 17531680083960318385ull, 5969588867909461540ull}}, {{25646875113261968ull, 16710727241226533353ull, 3467856031240846365ull, 7461986084886826926ull}}, {{11545244343014258490ull, 12750047534980277297ull, 16002468074807692690ull, 4663741303054266828ull}}, {{596497373485659401ull, 6714187381870570814ull, 1556341019800064247ull, 5829676628817833536ull}}, {{9968993753711850059ull, 3781048208910825613ull, 1945426274750080309ull, 7287095786022291920ull}}, {{17072928210567200477ull, 9337996279565919920ull, 2431782843437600386ull, 9108869732527864900ull}}, {{10670580131604500298ull, 10447933693156087854ull, 10743236314003276049ull, 5693043582829915562ull}}, {{4114853127650849565ull, 17671603134872497722ull, 4205673355649319253ull, 7116304478537394453ull}}, {{14366938446418337764ull, 8254445863308458440ull, 9868777712989036971ull, 8895380598171743066ull}}, {{8979336529011461103ull, 2853185655354092573ull, 10779672089045536011ull, 5559612873857339416ull}}, {{15835856679691714282ull, 17401540124474779428ull, 13474590111306920013ull, 6949516092321674270ull}}, {{1348076775905091237ull, 7916867100311310574ull, 7619865602278874209ull, 8686895115402092838ull}}, {{14677606040222845735ull, 16477256983763038868ull, 150729982996908476ull, 5429309447126308024ull}}, {{18347007550278557169ull, 2149827155994246969ull, 188412478746135596ull, 6786636808907885030ull}}, {{9098701382566032749ull, 2687283944992808712ull, 9458887635287445303ull, 8483296011134856287ull}}, {{5686688364103770468ull, 8597081493261587301ull, 12829333799695735170ull, 5302060006959285179ull}}, {{11720046473557100989ull, 1522979829722208318ull, 11424981231192281059ull, 6627575008699106474ull}}, {{5426686055091600428ull, 15738782842434924110ull, 5057854502135575515ull, 8284468760873883093ull}}, {{17226736839714413980ull, 7530896267308133616ull, 5467002073048428649ull, 5177792975546176933ull}}, {{3086676975933465859ull, 14025306352562554925ull, 11445438609737923715ull, 6472241219432721166ull}}, {{8470032238344220227ull, 12919946922275805752ull, 5083426225317628836ull, 8090301524290901458ull}}, {{5293770148965137642ull, 17298338863277154403ull, 7788827409250905926ull, 5056438452681813411ull}}, {{2005526667779034149ull, 12399551542241667196ull, 5124348243136244504ull, 6320548065852266764ull}}, {{2506908334723792686ull, 15499439427802083995ull, 6405435303920305630ull, 7900685082315333455ull}}, {{17707718773698228093ull, 5075463623948914592ull, 10920926092591272875ull, 4937928176447083409ull}}, {{3687904393413233500ull, 1732643511508755337ull, 18262843634166478998ull, 6172410220558854261ull}}, {{9221566510193929779ull, 11389176426240719979ull, 8993496487425935035ull, 7715512775698567827ull}}, {{3457636059657512160ull, 4812392257186756035ull, 3315092295427515445ull, 4822195484811604892ull}}, {{18157103129854053912ull, 10627176339910832947ull, 4143865369284394306ull, 6027744356014506115ull}}, {{18084692893890179485ull, 4060598388033765376ull, 568145693178104979ull, 7534680445018132644ull}}, {{11302933058681362179ull, 232030983307409408ull, 9578463095091091420ull, 4709175278136332902ull}}, {{14128666323351702723ull, 290038729134261760ull, 2749706832009088467ull, 5886469097670416128ull}}, {{17660832904189628404ull, 14197606466699990912ull, 3437133540011360583ull, 7358086372088020160ull}}, {{3629297056527483889ull, 13135322064947600737ull, 4296416925014200729ull, 9197607965110025200ull}}, {{13797525706398147191ull, 1292047262951168604ull, 2685260578133875456ull, 5748504978193765750ull}}, {{17246907132997683988ull, 1615059078688960755ull, 12579947759522120128ull, 7185631222742207187ull}}, {{16946947897819717081ull, 2018823848361200944ull, 11113248680975262256ull, 8982039028427758984ull}}, {{10591842436137323176ull, 1261764905225750590ull, 6945780425609538910ull, 5613774392767349365ull}}, {{4016431008316878162ull, 10800578168386964046ull, 13293911550439311541ull, 7017217990959186706ull}}, {{14243910797250873510ull, 18112408728911092961ull, 7394017401194363618ull, 8771522488698983383ull}}, {{1984915220640714088ull, 15931941473996821005ull, 11538789903387559117ull, 5482201555436864614ull}}, {{7092830044228280514ull, 6079868787213862544ull, 5200115342379673089ull, 6852751944296080768ull}}, {{8866037555285350642ull, 12211522002444716084ull, 6500144177974591361ull, 8565939930370100960ull}}, {{14764645508908119959ull, 714672223886865696ull, 4062590111234119601ull, 5353712456481313100ull}}, {{9062812425598333ull, 5505026298285970025ull, 5078237639042649501ull, 6692140570601641375ull}}, {{4623014533959385820ull, 11492968891284850435ull, 1736111030375923972ull, 8365175713252051719ull}}, {{583541074510922186ull, 16406477593907807330ull, 8002598421626034338ull, 5228234820782532324ull}}, {{9952798379993428540ull, 11284724955529983354ull, 10003248027032542923ull, 6535293525978165405ull}}, {{3217625938137009867ull, 9494220175985091289ull, 17115746052218066558ull, 8169116907472706756ull}}, {{13540231257404100927ull, 1322201591563294151ull, 1473969245781515791ull, 5105698067170441723ull}}, {{12313603053327738255ull, 15487810044736281401ull, 15677519612509058450ull, 6382122583963052153ull}}, {{1556945761377509106ull, 10136390519065575944ull, 5761841460354159351ull, 7977653229953815192ull}}, {{973091100860943192ull, 13252773102057066821ull, 3601150912721349594ull, 4986033268721134495ull}}, {{5828049894503566893ull, 7342594340716557718ull, 18336496696183850705ull, 6232541585901418118ull}}, {{16508434404984234425ull, 13789928944323085051ull, 13697248833375037573ull, 7790676982376772648ull}}, {{8011928493901452564ull, 10924548599415622109ull, 8560780520859398483ull, 4869173113985482905ull}}, {{14626596635804203608ull, 9043999730842139732ull, 15312661669501636008ull, 6086466392481853631ull}}, {{18283245794755254510ull, 11304999663552674665ull, 14529141068449657106ull, 7608082990602317039ull}}, {{4509499594080952213ull, 11677310808147809570ull, 15998242195422117547ull, 4755051869126448149ull}}, {{14860246529455966074ull, 9984952491757374058ull, 6162744688995483222ull, 5943814836408060187ull}}, {{9351936124965181785ull, 3257818577841941765ull, 3091744842816966124ull, 7429768545510075234ull}}, {{8150803087316932568ull, 11259508648005989411ull, 6544026545187991731ull, 4643605340943797021ull}}, {{5576817840718777806ull, 9462699791580098860ull, 12791719199912377568ull, 5804506676179746276ull}}, {{6971022300898472257ull, 11828374739475123575ull, 15989648999890471960ull, 7255633345224682845ull}}, {{4102091857695702417ull, 14785468424343904469ull, 6152003194580926238ull, 9069541681530853557ull}}, {{4869650420273507963ull, 4629231746787552389ull, 6150845005826772851ull, 5668463550956783473ull}}, {{10698749043769272857ull, 1174853665057052582ull, 12300242275710853968ull, 7085579438695979341ull}}, {{4150064267856815263ull, 1468567081321315728ull, 1540244789356403748ull, 8856974298369974177ull}}, {{2593790167410509540ull, 10141226462680598138ull, 12491868039416222102ull, 5535608936481233860ull}}, {{12465609746117912733ull, 3453161041495971864ull, 15614835049270277628ull, 6919511170601542325ull}}, {{15582012182647390916ull, 4316451301869964830ull, 5683485756305683323ull, 8649388963251927907ull}}, {{5127071595727231419ull, 391939054455034067ull, 1246335588477358125ull, 5405868102032454942ull}}, {{1797153476231651369ull, 5101609836496180488ull, 10781291522451473464ull, 6757335127540568677ull}}, {{2246441845289564211ull, 6377012295620225610ull, 18088300421491729734ull, 8446668909425710846ull}}, {{6015712171733365536ull, 17820690740044804718ull, 6693501745004943179ull, 5279168068391069279ull}}, {{16743012251521482728ull, 17664177406628617993ull, 3755191162828791070ull, 6598960085488836599ull}}, {{7093707259119689698ull, 12856849721430996684ull, 82302935108600934ull, 8248700106861045749ull}}, {{13656939073804581869ull, 3423845057466985023ull, 2357282343656569536ull, 5155437566788153593ull}}, {{12459487823828339433ull, 4279806321833731279ull, 7558288947998099824ull, 6444296958485191991ull}}, {{10962673761358036387ull, 5349757902292164099ull, 4836175166570236876ull, 8055371198106489989ull}}, {{4545828091635078790ull, 12566970725787378370ull, 5328452488320091999ull, 5034606998816556243ull}}, {{14905657151398624295ull, 11097027388806835058ull, 2048879591972727095ull, 6293258748520695304ull}}, {{9408699402393504561ull, 9259598217581155919ull, 2561099489965908869ull, 7866573435650869130ull}}, {{12797966154137022207ull, 8093091895201916401ull, 6212373199656080947ull, 4916608397281793206ull}}, {{2162399637389114046ull, 5504678850575007598ull, 16988838536424876992ull, 6145760496602241507ull}}, {{11926371583591168366ull, 6880848563218759497ull, 16624362152103708336ull, 7682200620752801884ull}}, {{536453212103398373ull, 4300530352011724686ull, 1166854308210041902ull, 4801375387970501178ull}}, {{9893938551984023774ull, 14599034976869431665ull, 10681939922117328185ull, 6001719234963126472ull}}, {{16979109208407417621ull, 4413735665804625869ull, 13352424902646660232ull, 7502149043703908090ull}}, {{12917786264468329965ull, 2758584791127891168ull, 12956951582581550549ull, 4688843152314942556ull}}, {{16147232830585412457ull, 8059917007337251864ull, 16196189478226938186ull, 5861053940393678195ull}}, {{1737296964522213955ull, 851524222316789023ull, 15633550829356284829ull, 7326317425492097744ull}}, {{16006679260934931155ull, 5676091296323374182ull, 1095194462985804420ull, 9157896781865122181ull}}, {{5392488519656944068ull, 12770929097056884672ull, 2990339548579821714ull, 5723685488665701363ull}}, {{6740610649571180085ull, 6740289334466330032ull, 17572982491006940855ull, 7154606860832126703ull}}, {{8425763311963975106ull, 3813675649655524636ull, 17354542095331288165ull, 8943258576040158379ull}}, {{14489474106832260250ull, 4689390290248396849ull, 8540745800368361151ull, 5589536610025098987ull}}, {{4276784578258161600ull, 1250051844383108158ull, 6064246232033063535ull, 6986920762531373734ull}}, {{14569352759677477808ull, 15397622860761048909ull, 16803679826896105226ull, 8733650953164217167ull}}, {{11411688484012117582ull, 14235200306403043472ull, 17419828919451147622ull, 5458531845727635729ull}}, {{14264610605015146977ull, 8570628346149028532ull, 7939728094031770816ull, 6823164807159544662ull}}, {{17830763256268933722ull, 10713285432686285665ull, 701288080684937712ull, 8528956008949430828ull}}, {{4226698007527001720ull, 6695803395428928541ull, 9661677087282861878ull, 5330597505593394267ull}}, {{9895058527836140054ull, 17593126281140936484ull, 7465410340676189443ull, 6663246881991742834ull}}, {{12368823159795175068ull, 17379721832998782701ull, 108390888990460996ull, 8329058602489678543ull}}, {{10036357484085678369ull, 1638954108769463380ull, 6985273333260119979ull, 5205661626556049089ull}}, {{12545446855107097962ull, 15883750691243992937ull, 13343277685002537877ull, 6507077033195061361ull}}, {{1846750513601708740ull, 6019630308772827460ull, 2844039050971008635ull, 8133846291493826702ull}}, {{10377591107855843771ull, 1456425933769323210ull, 15612582462139044109ull, 5083653932183641688ull}}, {{3748616847965028905ull, 6432218435639041917ull, 1068984003964253520ull, 6354567415229552111ull}}, {{9297457078383674035ull, 8040273044548802396ull, 15171288060237480612ull, 7943209269036940138ull}}, {{15034282710844572080ull, 14248542689697777305ull, 14093741056075813286ull, 4964505793148087586ull}}, {{4957795333273551388ull, 8587306325267445824ull, 8393804283239990800ull, 6205632241435109483ull}}, {{6197244166591939235ull, 10734132906584307280ull, 5880569335622600596ull, 7757040301793886854ull}}, {{3873277604119962022ull, 15932205103469967858ull, 17510413890046289084ull, 4848150188621179283ull}}, {{14064969042004728336ull, 1468512305627908206ull, 17276331344130473452ull, 6060187735776474104ull}}, {{8357839265651134611ull, 1835640382034885258ull, 3148670106453540199ull, 7575234669720592631ull}}, {{9835335559459347036ull, 8064804266412885142ull, 8885447844174544480ull, 4734521668575370394ull}}, {{3070797412469407987ull, 10081005333016106428ull, 1883437768363404792ull, 5918152085719212993ull}}, {{3838496765586759984ull, 12601256666270133035ull, 6965983228881643894ull, 7397690107149016241ull}}, {{93217469278031038ull, 3264099397991445243ull, 15882954564119497194ull, 4623556316968135150ull}}, {{13951579891879702510ull, 13303496284344082361ull, 10630321168294595684ull, 5779445396210168938ull}}, {{3604416809567464425ull, 16629370355430102952ull, 4064529423513468797ull, 7224306745262711173ull}}, {{4505521011959330531ull, 6951654889005464978ull, 9692347797819223901ull, 9030383431578388966ull}}, {{7427636650901969486ull, 6650627314842109563ull, 1446031355209627034ull, 5643989644736493104ull}}, {{4672859795200073953ull, 17536656180407412762ull, 1807539194012033792ull, 7054987055920616380ull}}, {{15064446780854868250ull, 3474076151799714336ull, 2259423992515042241ull, 8818733819900770475ull}}, {{9415279238034292656ull, 13700512640943291220ull, 17553041059817759064ull, 5511708637437981546ull}}, {{11769099047542865820ull, 17125640801179114025ull, 12717929287917423022ull, 6889635796797476933ull}}, {{876315754146418563ull, 12183678964619116724ull, 2062353554614615066ull, 8612044745996846167ull}}, {{9771069383196287410ull, 12226485371314335856ull, 8206499999275216272ull, 5382527966248028854ull}}, {{12213836728995359262ull, 15283106714142919820ull, 1034752962239244532ull, 6728159957810036068ull}}, {{15267295911244199078ull, 657139318969098159ull, 1293441202799055666ull, 8410199947262545085ull}}, {{16459588972168706280ull, 5022398092783074253ull, 3114243760963103743ull, 5256374967039090678ull}}, {{6739428159928719138ull, 1666311597551454913ull, 13116176738058655487ull, 6570468708798863347ull}}, {{13035971218338286826ull, 15917947552221482353ull, 11783534904145931454ull, 8213085885998579184ull}}, {{1229952983820347410ull, 5337031201711038567ull, 7364709315091207159ull, 5133178678749111990ull}}, {{15372499285057597975ull, 2059602983711410304ull, 18429258680718784757ull, 6416473348436389987ull}}, {{768880032612445853ull, 7186189748066650785ull, 18424887332471093042ull, 8020591685545487484ull}}, {{12009765066451248418ull, 9103054610969044644ull, 2292182545939657343ull, 5012869803465929678ull}}, {{15012206333064060522ull, 6767132245283917901ull, 12088600219279347487ull, 6266087254332412097ull}}, {{4930199861047911941ull, 3847229288177509473ull, 1275692218817020647ull, 7832609067915515122ull}}, {{14610589959223414723ull, 9322047332752025276ull, 5408993655188025808ull, 4895380667447196951ull}}, {{18263237449029268404ull, 11652559165940031595ull, 2149556050557644356ull, 6119225834308996189ull}}, {{18217360792859197601ull, 14565698957425039494ull, 7298631081624443349ull, 7649032292886245236ull}}, {{6774164477109610597ull, 11409404857604343636ull, 13785016462870052901ull, 4780645183053903272ull}}, {{8467705596387013246ull, 426698016723265833ull, 17231270578587566127ull, 5975806478817379090ull}}, {{15196318013911154461ull, 14368430576186246003ull, 12315716186379681850ull, 7469758098521723863ull}}, {{7191855749480777586ull, 13591955128543791656ull, 14614851644128383012ull, 4668598811576077414ull}}, {{8989819686850971983ull, 16989943910679739570ull, 9045192518305702957ull, 5835748514470096768ull}}, {{2013902571708939170ull, 7402371833067510751ull, 11306490647882128697ull, 7294685643087620960ull}}, {{16352436269918337675ull, 13864650809761776342ull, 14133113309852660871ull, 9118357053859526200ull}}, {{5608586650271573143ull, 15582935783742192070ull, 8833195818657913044ull, 5698973158662203875ull}}, {{16234105349694242237ull, 1031925655968188471ull, 6429808754895003402ull, 7123716448327754844ull}}, {{15680945668690414892ull, 10513279106815011397ull, 8037260943618754252ull, 8904645560409693555ull}}, {{12106434052145203259ull, 15794171478614157931ull, 2717445080548027455ull, 5565403475256058472ull}}, {{10521356546754116170ull, 15131028329840309510ull, 3396806350685034319ull, 6956754344070073090ull}}, {{3928323646587869405ull, 14302099393872998984ull, 13469379975211068707ull, 8695942930087591362ull}}, {{2455202279117418378ull, 6632969111956930413ull, 13030048502934305846ull, 5434964331304744601ull}}, {{7680688867324160876ull, 17514583426800938824ull, 2452502573385718595ull, 6793705414130930752ull}}, {{9600861084155201095ull, 17281543265073785626ull, 3065628216732148244ull, 8492131767663663440ull}}, {{10612224196024388589ull, 1577592503816340208ull, 1916017635457592653ull, 5307582354789789650ull}}, {{13265280245030485736ull, 6583676648197813164ull, 11618394081176766624ull, 6634477943487237062ull}}, {{16581600306288107170ull, 8229595810247266455ull, 5299620564616182472ull, 8293097429359046328ull}}, {{17281029219071148837ull, 5143497381404541534ull, 3312262852885114045ull, 5183185893349403955ull}}, {{12377914486984160238ull, 11041057745183064822ull, 17975386621388556268ull, 6478982366686754943ull}}, {{6249021071875424490ull, 13801322181478831028ull, 17857547258308307431ull, 8098727958358443679ull}}, {{13129010206776916114ull, 15543355391065351248ull, 18078496064083774000ull, 5061704973974027299ull}}, {{16411262758471145143ull, 982450165122137444ull, 17986434061677329597ull, 6327131217467534124ull}}, {{2067334374379379813ull, 5839748724830059710ull, 4036298503387110380ull, 7908914021834417656ull}}, {{15127142039269276095ull, 12873214989873563126ull, 2522686564616943987ull, 4943071263646511035ull}}, {{9685555512231819311ull, 11479832718914566004ull, 16988416261053343696ull, 6178839079558138793ull}}, {{12106944390289774138ull, 14349790898643207505ull, 7400462271034515908ull, 7723548849447673492ull}}, {{649311216290026981ull, 18191991348506780499ull, 13848660956251348250ull, 4827218030904795932ull}}, {{14646697075644697438ull, 13516617148778699815ull, 17310826195314185313ull, 6034022538630994915ull}}, {{13696685326128483893ull, 3060713380691211057ull, 17026846725715343738ull, 7542528173288743644ull}}, {{1642899301189220577ull, 6524631881359394815ull, 1418407166717314028ull, 4714080108305464778ull}}, {{15888682181768689433ull, 8155789851699243518ull, 10996380995251418343ull, 5892600135381830972ull}}, {{10637480690356085984ull, 5583051296196666494ull, 13745476244064272929ull, 7365750169227288715ull}}, {{4073478826090331671ull, 11590500138673221022ull, 12570159286652953257ull, 9207187711534110894ull}}, {{16380982321588621007ull, 326533559029681282ull, 3244663535730707882ull, 5754492319708819309ull}}, {{11252855865131000450ull, 9631538985641877411ull, 8667515438090772756ull, 7193115399636024136ull}}, {{9454383812986362659ull, 12039423732052346764ull, 10834394297613465945ull, 8991394249545030170ull}}, {{15132361919971252470ull, 607110804891634871ull, 11383182454435804120ull, 5619621405965643856ull}}, {{14303766381536677683ull, 758888506114543589ull, 14228978068044755150ull, 7024526757457054820ull}}, {{4044649921638683392ull, 10171982669497955295ull, 17786222585055943937ull, 8780658446821318525ull}}, {{9445435228665258976ull, 17886704214504691819ull, 13422232124873658912ull, 5487911529263324078ull}}, {{7195108017404185816ull, 3911636194421313158ull, 7554418119237297833ull, 6859889411579155098ull}}, {{18217257058610008078ull, 9501231261454029351ull, 219650612191846483ull, 8574861764473943873ull}}, {{18303314689272336905ull, 3632426529195074392ull, 11666496678688373812ull, 5359288602796214920ull}}, {{4432399287880869515ull, 4540533161493842991ull, 14583120848360467265ull, 6699110753495268650ull}}, {{928813091423698990ull, 10287352470294691643ull, 9005529023595808273ull, 8373888441869085813ull}}, {{16721409246635669533ull, 17958810340002652036ull, 7934298648961074122ull, 5233680276168178633ull}}, {{2455017484585035300ull, 13225140888148539238ull, 14529559329628730557ull, 6542100345210223291ull}}, {{12292143892586069933ull, 2696368054903510335ull, 13550263143608525293ull, 8177625431512779114ull}}, {{14600118960507375564ull, 3991073043528387911ull, 13080600483182716212ull, 5111015894695486946ull}}, {{13638462682206831551ull, 4988841304410484889ull, 7127378567123619457ull, 6388769868369358683ull}}, {{3213020297476375727ull, 10847737648940494016ull, 4297537190477136417ull, 7985962335461698354ull}}, {{2008137685922734829ull, 18309051076656278520ull, 7297646762475598164ull, 4991226459663561471ull}}, {{2510172107403418537ull, 4439569772110796534ull, 4510372434667109802ull, 6239033074579451839ull}}, {{12361087171109048979ull, 14772834251993271475ull, 1026279524906499348ull, 7798791343224314799ull}}, {{5419836472729461660ull, 9649370641018864ull, 7558953730707643949ull, 4874244589515196749ull}}, {{6774795590911827075ull, 4623747731728661484ull, 14060378181811942840ull, 6092805736893995936ull}}, {{8468494488639783843ull, 5779684664660826855ull, 17575472727264928550ull, 7616007171117494920ull}}, {{12210338083040946758ull, 17447360970695180496ull, 10984670454540580343ull, 4760004481948434325ull}}, {{15262922603801183448ull, 17197515194941587716ull, 18342524086603113333ull, 5950005602435542906ull}}, {{631909181041927693ull, 7661835938394820934ull, 13704783071399115859ull, 7437507003044428633ull}}, {{14230001293433368521ull, 2482804452283069131ull, 1647960391983365556ull, 4648441876902767896ull}}, {{13175815598364322747ull, 3103505565353836414ull, 2059950489979206945ull, 5810552346128459870ull}}, {{7246397461100627625ull, 8491067975119683422ull, 11798310149328784489ull, 7263190432660574837ull}}, {{18281368863230560339ull, 15225520987326992181ull, 912829631378816899ull, 9078988040825718547ull}}, {{13731698548732794164ull, 7210107607865676161ull, 16711419584107618226ull, 5674367525516074091ull}}, {{3329565130633828993ull, 18236006546686871010ull, 16277588461707134878ull, 7092959406895092614ull}}, {{13385328450147062049ull, 13571636146503812954ull, 11123613540279142790ull, 8866199258618865768ull}}, {{12977516299769301685ull, 3870586573137495192ull, 6952258462674464244ull, 5541374536636791105ull}}, {{16221895374711627106ull, 4838233216421868990ull, 13302009096770468209ull, 6926718170795988881ull}}, {{11053997181534758074ull, 10659477538954724142ull, 2792453315680921549ull, 8658397713494986102ull}}, {{2297062220031835893ull, 8968016471060396541ull, 15580341377582739680ull, 5411498570934366313ull}}, {{7483013793467182770ull, 11210020588825495676ull, 5640368666696260888ull, 6764373213667957892ull}}, {{9353767241833978462ull, 14012525736031869595ull, 7050460833370326110ull, 8455466517084947365ull}}, {{3540261516932542587ull, 4146142566592530593ull, 6712381030070147771ull, 5284666573178092103ull}}, {{9037012914593066138ull, 570992189813275337ull, 3778790269160296810ull, 6605833216472615129ull}}, {{15907952161668720576ull, 9937112274121369979ull, 9335173854877758916ull, 8257291520590768911ull}}, {{7636627091829256408ull, 15434067208180632045ull, 12752012686939681178ull, 5160807200369230569ull}}, {{14157469883213958414ull, 10069211973371014248ull, 2104957803392437761ull, 6451009000461538212ull}}, {{17696837354017448017ull, 17198200985141155714ull, 2631197254240547201ull, 8063761250576922765ull}}, {{15672209364688292915ull, 3831346588072140465ull, 3950341293114035953ull, 5039850781610576728ull}}, {{5755203650578202432ull, 9400869253517563486ull, 4937926616392544941ull, 6299813477013220910ull}}, {{16417376600077528847ull, 16362772585324342261ull, 15395780307345456984ull, 7874766846266526137ull}}, {{12566703384262149482ull, 10226732865827713913ull, 2704833664449828759ull, 4921729278916578836ull}}, {{1873321175045523140ull, 8171730063857254488ull, 3381042080562285949ull, 6152161598645723545ull}}, {{2341651468806903925ull, 14826348598248956014ull, 8837988619130245340ull, 7690201998307154431ull}}, {{15298590223286478665ull, 43095837050821700ull, 12441271914597485194ull, 4806376248941971519ull}}, {{676493705398546716ull, 9277241833168302934ull, 10939903874819468588ull, 6007970311177464399ull}}, {{10068989168602959202ull, 11596552291460378667ull, 9063193825096947831ull, 7509962888971830499ull}}, {{3987275221163155550ull, 14165374209803818523ull, 3358653131471898442ull, 4693726805607394062ull}}, {{372408008026556533ull, 8483345725399997346ull, 13421688451194648861ull, 5867158507009242577ull}}, {{9688882046887971474ull, 15215868175177384586ull, 2942052508711147364ull, 7333948133761553222ull}}, {{2887730521755188535ull, 573091145262179117ull, 12900937672743710014ull, 9167435167201941527ull}}, {{4110674585310686786ull, 14193240021071025660ull, 14980615073105900614ull, 5729646979501213454ull}}, {{5138343231638358483ull, 8518177989484006267ull, 9502396804527599960ull, 7162058724376516818ull}}, {{1811243021120560199ull, 10647722486855007834ull, 2654623968804724142ull, 8952573405470646023ull}}, {{5743712906627738029ull, 2043140535856991992ull, 8576669008144034445ull, 5595358378419153764ull}}, {{7179641133284672536ull, 7165611688248627894ull, 10720836260180043056ull, 6994197973023942205ull}}, {{18197923453460616478ull, 8957014610310784867ull, 18012731343652441724ull, 8742747466279927756ull}}, {{9067859149199191347ull, 14821506168299016350ull, 2034585052928000269ull, 5464217166424954848ull}}, {{2111451899644213375ull, 4691824655091606726ull, 2543231316160000337ull, 6830271458031193560ull}}, {{11862686911410042527ull, 10476466837291896311ull, 3179039145200000421ull, 8537839322538991950ull}}, {{14331708347272358436ull, 8853634782521129146ull, 15821957521032163975ull, 5336149576586869968ull}}, {{8691263397235672236ull, 6455357459724023529ull, 1330702827580653353ull, 6670186970733587461ull}}, {{15475765264971978199ull, 12680882843082417315ull, 6275064552903204595ull, 8337733713416984326ull}}, {{7366510281393792423ull, 5619708767712816870ull, 17756973400846666584ull, 5211083570885615203ull}}, {{18431509888597016336ull, 7024635959641021087ull, 17584530732630945326ull, 6513854463607019004ull}}, {{18427701342318882516ull, 18004166986406052167ull, 3533919342079130041ull, 8142318079508773756ull}}, {{18434842366590383429ull, 4335075338862700748ull, 11432071625654232084ull, 5088948799692983597ull}}, {{4596808884528427670ull, 5418844173578375936ull, 455031476785626393ull, 6361185999616229497ull}}, {{5746011105660534587ull, 11385241235400357824ull, 5180475364409420895ull, 7951482499520286871ull}}, {{3591256941037834117ull, 14033304799766305496ull, 10155326130396969915ull, 4969676562200179294ull}}, {{4489071176297292646ull, 12929944981280493966ull, 3470785626141436586ull, 6212095702750224118ull}}, {{14834711007226391616ull, 6939059189745841649ull, 13561854069531571541ull, 7765119628437780147ull}}, {{2354165351875412904ull, 6642755002804844983ull, 6170315784243538261ull, 4853199767773612592ull}}, {{16777764745126429842ull, 12915129771933444132ull, 7712894730304422826ull, 6066499709717015740ull}}, {{2525461857698485686ull, 6920540178062029358ull, 9641118412880528533ull, 7583124637146269675ull}}, {{15413471716343717266ull, 6631180620502462300ull, 3719855998836636381ull, 4739452898216418547ull}}, {{820095571720094967ull, 12900661794055465780ull, 38133980118407572ull, 5924316122770523184ull}}, {{1025119464650118708ull, 16125827242569332225ull, 47667475148009465ull, 7405395153463153980ull}}, {{12169914711474793953ull, 3161112998964750784ull, 9253164208822281724ull, 4628371970914471237ull}}, {{15212393389343492441ull, 3951391248705938480ull, 16178141279455240059ull, 5785464963643089046ull}}, {{568747662969813935ull, 327553042455035197ull, 10999304562464274266ull, 7231831204553861308ull}}, {{5322620597139655322ull, 9632813339923569804ull, 13749130703080342832ull, 9039789005692326635ull}}, {{12550009910067060385ull, 6020508337452231127ull, 6287363680211520318ull, 5649868128557704147ull}}, {{11075826369156437577ull, 16749007458670064717ull, 3247518581837012493ull, 7062335160697130184ull}}, {{9724906163383259ull, 7101201268055417185ull, 4059398227296265617ull, 8827918950871412730ull}}, {{11535293112420584297ull, 15967465838603105500ull, 7148809910487553914ull, 5517449344294632956ull}}, {{14419116390525730371ull, 10735960261399106067ull, 8936012388109442393ull, 6896811680368291195ull}}, {{13412209469729775060ull, 18031636345176270488ull, 6558329466709415087ull, 8621014600460363994ull}}, {{8382630918581109413ull, 18187301743376250911ull, 8710641935120772333ull, 5388134125287727496ull}}, {{5866602629798998862ull, 8899069123938149927ull, 10888302418900965417ull, 6735167656609659370ull}}, {{2721567268821360673ull, 15735522423350075313ull, 4387005986771430963ull, 8418959570762074213ull}}, {{13230194589081820181ull, 7528858505380103118ull, 5047721750945838304ull, 5261849731726296383ull}}, {{7314371199497499418ull, 9411073131725128898ull, 1697966170254909976ull, 6577312164657870479ull}}, {{18366336036226650080ull, 11763841414656411122ull, 15957515768100801182ull, 8221640205822338098ull}}, {{16090646041069044204ull, 2740714865732869047ull, 14585133373490388643ull, 5138525128638961311ull}}, {{15501621532908917351ull, 17260951637448250021ull, 13619730698435597899ull, 6423156410798701639ull}}, {{5541968860853982977ull, 16964503528382924623ull, 12412977354617109470ull, 8028945513498377049ull}}, {{10381259565674821217ull, 5991128686811939985ull, 840581818994611563ull, 5018090945936485656ull}}, {{17588260475520914425ull, 2877224840087537077ull, 1050727273743264454ull, 6272613682420607070ull}}, {{8150267539118979319ull, 12819903086964197155ull, 10536781129033856375ull, 7840767103025758837ull}}, {{2788074202735668122ull, 14929968456993705078ull, 8891331214859854186ull, 4900479439391099273ull}}, {{12708464790274360961ull, 9439088534387355539ull, 15725850037002205637ull, 6125599299238874091ull}}, {{11273894969415563297ull, 16410546686411582328ull, 15045626527825369142ull, 7656999124048592614ull}}, {{7046184355884727061ull, 5644905660579851051ull, 4791830561463467810ull, 4785624452530370384ull}}, {{4196044426428520922ull, 16279504112579589622ull, 5989788201829334762ull, 5982030565662962980ull}}, {{14468427569890426960ull, 11126008103869711219ull, 7487235252286668453ull, 7477538207078703725ull}}, {{6736924221967822898ull, 9259598074132263464ull, 6985365041892861735ull, 4673461379424189828ull}}, {{8421155277459778623ull, 6962811574237941426ull, 8731706302366077169ull, 5841826724280237285ull}}, {{1303072059969947470ull, 13315200486224814687ull, 15526318896384984365ull, 7302283405350296606ull}}, {{15463898130244598050ull, 2808942552498854646ull, 10184526583626454649ull, 9127854256687870758ull}}, {{5053250312975485877ull, 13284804141380253914ull, 1753643096339146251ull, 5704908910429919224ull}}, {{15539934928074133155ull, 11994319158297929488ull, 2192053870423932814ull, 7131136138037399030ull}}, {{978174586383114827ull, 5769526911017636053ull, 11963439374884691826ull, 8913920172546748787ull}}, {{2917202125703140719ull, 8217640337813410437ull, 5171306600089238439ull, 5571200107841717992ull}}, {{8258188675556313803ull, 5660364403839375142ull, 6464133250111548049ull, 6964000134802147490ull}}, {{1099363807590616445ull, 11687141523226606832ull, 17303538599494210869ull, 8705000168502684362ull}}, {{687102379744135279ull, 9610306461230323222ull, 15426397643111269697ull, 5440625105314177726ull}}, {{10082250011534944906ull, 16624569094965291931ull, 10059625017034311313ull, 6800781381642722158ull}}, {{7991126495991293228ull, 6945653313424451202ull, 3351159234438113334ull, 8500976727053402698ull}}, {{9606140078421946172ull, 18176091376172445713ull, 6706160539951208737ull, 5313110454408376686ull}}, {{16619361116454820619ull, 8885056164933393429ull, 17606072711793786730ull, 6641388068010470857ull}}, {{6939143340286362061ull, 1882948169311965979ull, 8172532834460069701ull, 8301735085013088572ull}}, {{2031121578465282337ull, 3482685615033672689ull, 14331205058392319371ull, 5188584428133180357ull}}, {{7150587991508990825ull, 18188415074074254573ull, 4078948267708235501ull, 6485730535166475447ull}}, {{13549921007813626435ull, 8900460787310654504ull, 486999316207906473ull, 8107163168958094309ull}}, {{8468700629883516522ull, 17092003038137628825ull, 2610217581843635497ull, 5066976980598808943ull}}, {{15197561805781783556ull, 7529945742389872319ull, 17097830032586708084ull, 6333721225748511178ull}}, {{14385266238799841541ull, 9412432177987340399ull, 12148915503878609297ull, 7917151532185638973ull}}, {{15908320426890982819ull, 17411985157310557509ull, 9898915199137824762ull, 4948219707616024358ull}}, {{6050342478331564812ull, 12541609409783421079ull, 3150271962067505145ull, 6185274634520030448ull}}, {{2951242079487068111ull, 1841953706947112637ull, 3937839952584381432ull, 7731593293150038060ull}}, {{4150369308893111522ull, 1151221066841945398ull, 11684522007220014203ull, 4832245808218773787ull}}, {{14411333672971165210ull, 15274084388834595459ull, 9993966490597629849ull, 6040307260273467234ull}}, {{13402481072786568608ull, 5257547430761080612ull, 3269086076392261504ull, 7550384075341834043ull}}, {{17599922707346381188ull, 3285967144225675382ull, 18184079862241021104ull, 4718990047088646276ull}}, {{12776531347328200677ull, 4107458930282094228ull, 4283355754091724764ull, 5898737558860807846ull}}, {{15970664184160250846ull, 5134323662852617785ull, 14577566729469431763ull, 7373421948576009807ull}}, {{6128272174918149846ull, 1806218560138384328ull, 13610272393409401800ull, 9216777435720012259ull}}, {{3830170109323843654ull, 1128886600086490205ull, 6200577236667182173ull, 5760485897325007662ull}}, {{9399398655082192471ull, 6022794268535500660ull, 16974093582688753524ull, 7200607371656259577ull}}, {{11749248318852740589ull, 7528492835669375825ull, 7382558923078778193ull, 9000759214570324472ull}}, {{425751171641881012ull, 16234523068361829651ull, 4614099326924236370ull, 5625474509106452795ull}}, {{14367247019834514977ull, 11069781798597511255ull, 1155938140227907559ull, 7031843136383065994ull}}, {{13347372756365755817ull, 9225541229819501165ull, 10668294712139660257ull, 8789803920478832492ull}}, {{10647950981942291338ull, 17295178314705657988ull, 15891056231942063468ull, 5493627450299270307ull}}, {{13309938727427864172ull, 3172228819672520869ull, 15252134271500191432ull, 6867034312874087884ull}}, {{2802365354002666503ull, 3965286024590651087ull, 618423765665687674ull, 8583792891092609856ull}}, {{8669007373892748421ull, 7089989783796544833ull, 386514853541054796ull, 5364870556932881160ull}}, {{15447945235793323430ull, 8862487229745681041ull, 483143566926318495ull, 6706088196166101450ull}}, {{5474873489459490575ull, 6466423018754713398ull, 9827301495512673927ull, 8382610245207626812ull}}, {{17256853986194345322ull, 10959043414362777729ull, 15365435471550197012ull, 5239131403254766757ull}}, {{7736009427460767940ull, 13698804267953472162ull, 5371736284155582553ull, 6548914254068458447ull}}, {{446639747471184117ull, 3288447279659676491ull, 2102984336767090288ull, 8186142817585573059ull}}, {{16420050906665347737ull, 2055279549787297806ull, 17455266274975289094ull, 5116339260990983161ull}}, {{11301691596476908863ull, 11792471474088898066ull, 7984024788436947655ull, 6395424076238728952ull}}, {{4903742458741360271ull, 10128903324183734679ull, 9980030985546184569ull, 7994280095298411190ull}}, {{9982368064354432026ull, 17859779623683303934ull, 1625833347538977451ull, 4996425059561506994ull}}, {{3254588043588264224ull, 17713038511176742014ull, 11255663721278497622ull, 6245531324451883742ull}}, {{13291607091340106088ull, 12917926102116151709ull, 4846207614743346220ull, 7806914155564854678ull}}, {{10613097441301260257ull, 17297075850677370626ull, 16863937814496755099ull, 4879321347228034173ull}}, {{4042999764771799513ull, 17009658794919325379ull, 7244864212838780162ull, 6099151684035042717ull}}, {{442063687537361487ull, 12038701456794380916ull, 13667766284475863107ull, 7623939605043803396ull}}, {{9499661841565626738ull, 5218345401282794120ull, 17765725964652190250ull, 4764962253152377122ull}}, {{11874577301957033422ull, 15746303788458268458ull, 12983785418960462004ull, 5956202816440471403ull}}, {{5619849590591515969ull, 1236135661863283957ull, 11618045755273189602ull, 7445253520550589254ull}}, {{5818249003333391433ull, 5384270807091940377ull, 2649592578618355597ull, 4653283450344118284ull}}, {{11884497272594127195ull, 11342024527292313375ull, 3311990723272944496ull, 5816604312930147855ull}}, {{10243935572315271090ull, 14177530659115391719ull, 17975046459373344332ull, 7270755391162684818ull}}, {{8193233446966700958ull, 17721913323894239649ull, 13245436037361904607ull, 9088444238953356023ull}}, {{16649985950422657859ull, 17993724855074981636ull, 15195926550992272235ull, 5680277649345847514ull}}, {{2365738364318770708ull, 17880470050416339142ull, 9771536151885564486ull, 7100347061682309393ull}}, {{12180544992253239193ull, 13127215526165648119ull, 16826106208284343512ull, 8875433827102886741ull}}, {{14530369647799356352ull, 8204509703853530074ull, 12822159389391408647ull, 5547146141939304213ull}}, {{8939590022894419631ull, 5643951111389524689ull, 2192641181457097097ull, 6933932677424130267ull}}, {{15786173547045412443ull, 11666624907664293765ull, 16575859532103535083ull, 8667415846780162833ull}}, {{12172201476117076729ull, 4985797558076489651ull, 3442383179923627571ull, 5417134904237601771ull}}, {{10603565826718958007ull, 1620560929168224160ull, 18138037030186698176ull, 6771418630297002213ull}}, {{13254457283398697509ull, 2025701161460280200ull, 8837488232451209008ull, 8464273287871252767ull}}, {{8284035802124185943ull, 1266063225912675125ull, 12440959172923087486ull, 5290170804919532979ull}}, {{14966730771082620333ull, 10805951069245619714ull, 10939512947726471453ull, 6612713506149416224ull}}, {{9485041426998499608ull, 18119124854984412547ull, 13674391184658089316ull, 8265891882686770280ull}}, {{3622307882660368303ull, 2101080997510482034ull, 8546494490411305823ull, 5166182426679231425ull}}, {{13751256890180236187ull, 16461409302170266254ull, 15294804131441520182ull, 6457728033349039281ull}}, {{7965699075870519426ull, 11353389590858057010ull, 5283447109019736516ull, 8072160041686299102ull}}, {{9590247940846462545ull, 16319240531141061439ull, 17137212498419499034ull, 5045100026053936938ull}}, {{7376123907630690277ull, 11175678627071550991ull, 12198143586169597985ull, 6306375032567421173ull}}, {{4608468866110974942ull, 134540228557275027ull, 1412621427429833770ull, 7882968790709276467ull}}, {{574450032105665387ull, 4695773661275684796ull, 17023789456639503770ull, 4926855494193297791ull}}, {{718062540132081734ull, 15093089113449381803ull, 16668050802371991808ull, 6158569367741622239ull}}, {{14732636230447265879ull, 419617318102175637ull, 16223377484537601857ull, 7698211709677027799ull}}, {{11513740653243235127ull, 11791475869882329533ull, 17057139955477083016ull, 4811382318548142374ull}}, {{557117761271880196ull, 14739344837352911917ull, 12098052907491577962ull, 6014227898185177968ull}}, {{5308083220017238149ull, 9200809009836364088ull, 15122566134364472453ull, 7517784872731472460ull}}, {{3317552012510773843ull, 8056348640361421507ull, 228231797123019475ull, 4698615545457170288ull}}, {{17981998070920631016ull, 5458749782024388979ull, 285289746403774344ull, 5873269431821462860ull}}, {{17865811570223400866ull, 6823437227530486224ull, 356612183004717930ull, 7341586789776828575ull}}, {{3885520389069699467ull, 17752668571267883589ull, 14280823284038061124ull, 9176983487221035718ull}}, {{4734293252382256119ull, 1872045820187651435ull, 4313828534096400299ull, 5735614679513147324ull}}, {{1306180547050432244ull, 16175115330516728006ull, 5392285667620500373ull, 7169518349391434155ull}}, {{10856097720667816113ull, 6383836107863746295ull, 2128671066098237563ull, 8961897936739292694ull}}, {{13702590103058466927ull, 1684054558201147482ull, 15165477471593562189ull, 5601186210462057933ull}}, {{7904865591968307851ull, 6716754216178822257ull, 5121788784209789024ull, 7001482763077572417ull}}, {{14492768008387772717ull, 8395942770223527821ull, 11013921998689624184ull, 8751853453846965521ull}}, {{11363823014456051900ull, 5247464231389704888ull, 18412916295249484875ull, 5469908408654353450ull}}, {{14204778768070064875ull, 1947644270809743206ull, 13792773332207080286ull, 6837385510817941813ull}}, {{8532601423232805286ull, 11657927375366954816ull, 3405908609976686645ull, 8546731888522427267ull}}, {{5332875889520503304ull, 9592047618818040712ull, 18269593945731286817ull, 5341707430326517041ull}}, {{6666094861900629130ull, 16601745541949938794ull, 9001934376881944809ull, 6677134287908146302ull}}, {{17555990614230562220ull, 6917123872155259780ull, 2029045934247655204ull, 8346417859885182878ull}}, {{1749122097039325580ull, 13546574456951813171ull, 15103211764186948214ull, 5216511162428239298ull}}, {{16021460676581320687ull, 7709846034334990655ull, 9655642668378909460ull, 6520638953035299123ull}}, {{15415139827299262954ull, 9637307542918738319ull, 7457867317046248921ull, 8150798691294123904ull}}, {{16551991419703121203ull, 17552532260392681209ull, 4661167073153905575ull, 5094249182058827440ull}}, {{6854931219346737791ull, 17328979307063463608ull, 5826458841442381969ull, 6367811477573534300ull}}, {{8568664024183422239ull, 7826166078547165798ull, 7283073551802977462ull, 7959764346966917875ull}}, {{743728996687250995ull, 279667780664590720ull, 2246077960663166962ull, 4974852716854323672ull}}, {{929661245859063744ull, 9572956762685514208ull, 2807597450828958702ull, 6218565896067904590ull}}, {{1162076557323829680ull, 2742823916502116952ull, 12732868850390974186ull, 7773207370084880737ull}}, {{726297848327393550ull, 6325950966241210999ull, 1040514003853277010ull, 4858254606303050461ull}}, {{14742930365691405650ull, 17130810744656289556ull, 5912328523243984166ull, 6072818257878813076ull}}, {{18428662957114257062ull, 12190141393965586137ull, 7390410654054980208ull, 7591022822348516345ull}}, {{4600385320555328808ull, 7618838371228491336ull, 16148221704852832390ull, 4744389263967822715ull}}, {{5750481650694161010ull, 300175927180838362ull, 15573591112638652584ull, 5930486579959778394ull}}, {{16411474100222477070ull, 375219908976047952ull, 10243616853943539922ull, 7413108224949722993ull}}, {{10257171312639048169ull, 4846198461537417874ull, 17931475579783182211ull, 4633192640593576870ull}}, {{3598092103944034403ull, 1446062058494384439ull, 13190972437874201956ull, 5791490800741971088ull}}, {{18332673185212206716ull, 1807577573117980548ull, 16488715547342752445ull, 7239363500927463860ull}}, {{4469097407805706779ull, 6871157984824863590ull, 2164150360468888940ull, 9049204376159329826ull}}, {{16628243935160730449ull, 13517845777370315551ull, 5964279993720443491ull, 5655752735099581141ull}}, {{16173618900523525157ull, 12285621203285506535ull, 12067036010577942268ull, 7069690918874476426ull}}, {{15605337607227018542ull, 15357026504106883169ull, 5860422976367652027ull, 8837113648593095533ull}}, {{2835806976875804733ull, 7292298555853108029ull, 5968607369443476469ull, 5523196030370684708ull}}, {{8156444739522143820ull, 13727059213243772940ull, 7460759211804345586ull, 6903995037963355885ull}}, {{10195555924402679775ull, 7935451979699940367ull, 13937635033182819887ull, 8629993797454194856ull}}, {{13289751480392756715ull, 11877186514953544585ull, 8711021895739262429ull, 5393746123408871785ull}}, {{2777131295208782182ull, 1011425088409767020ull, 15500463388101465941ull, 6742182654261089731ull}}, {{3471414119010977728ull, 5875967378939596679ull, 14763893216699444522ull, 8427728317826362164ull}}, {{9087162852022942936ull, 8284165630264635828ull, 4061223582377018ull, 5267330198641476353ull}}, {{11358953565028678670ull, 1131835000976018977ull, 4616762547905359177ull, 6584162748301845441ull}}, {{363633901003684625ull, 6026479769647411626ull, 10382639203309086875ull, 8230203435377306801ull}}, {{4838957206554690795ull, 1460706846815938314ull, 18018364548136649057ull, 5143877147110816750ull}}, {{15272068545048139302ull, 6437569576947310796ull, 13299583648316035513ull, 6429846433888520938ull}}, {{643341607600622511ull, 12658647989611526400ull, 7401107523540268583ull, 8037308042360651173ull}}, {{402088504750389069ull, 14829184021148285856ull, 6931535211426361816ull, 5023317526475406983ull}}, {{502610630937986337ull, 89735952725805704ull, 4052732995855564367ull, 6279146908094258729ull}}, {{628263288672482921ull, 13947227996189420842ull, 9677602263246843362ull, 7848933635117823411ull}}, {{5004350573847689730ull, 13328703516045775930ull, 3742658405315583149ull, 4905583521948639632ull}}, {{15478810254164387970ull, 2825821339775056200ull, 4678323006644478937ull, 6131979402435799540ull}}, {{901768743995933346ull, 8143962693146208155ull, 5847903758305598671ull, 7664974253044749425ull}}, {{16704506529493316006ull, 12007505710857461952ull, 15184154895009468929ull, 4790608908152968390ull}}, {{2433889088157093391ull, 1174324083289663729ull, 9756821581907060354ull, 5988261135191210488ull}}, {{7654047378623754642ull, 10691277140966855469ull, 12196026977383825442ull, 7485326418989013110ull}}, {{7089622620853540604ull, 11293734231531672572ull, 3010830842437502997ull, 4678329011868133194ull}}, {{8862028276066925755ull, 282109734132427003ull, 12986910589901654555ull, 5847911264835166492ull}}, {{6465849326656269289ull, 14187695222947697466ull, 16233638237377068193ull, 7309889081043958115ull}}, {{17305683695175112419ull, 3899560973402458120ull, 15680361778293947338ull, 9137361351304947644ull}}, {{10816052309484445262ull, 7048911626803924229ull, 576854074578941278ull, 5710850844565592278ull}}, {{18131751405282944482ull, 18034511570359681094ull, 9944439630078452405ull, 7138563555706990347ull}}, {{13441317219748904794ull, 8708081407667437656ull, 7818863519170677603ull, 8923204444633737934ull}}, {{8400823262343065496ull, 3136707870578454583ull, 275103681054285598ull, 5577002777896086209ull}}, {{5889343059501443966ull, 13144256875077844037ull, 4955565619745244901ull, 6971253472370107761ull}}, {{11973364842804192862ull, 2595263038565141334ull, 10806143043108944031ull, 8714066840462634701ull}}, {{2871667008325232635ull, 8539568426744295190ull, 9059682411156783971ull, 5446291775289146688ull}}, {{12812955797261316601ull, 6062774515002981083ull, 11324603013945979964ull, 6807864719111433360ull}}, {{11404508728149257848ull, 7578468143753726354ull, 14155753767432474955ull, 8509830898889291700ull}}, {{11739503973520674059ull, 2430699580632385019ull, 18070718141500072655ull, 5318644311805807312ull}}, {{10062693948473454670ull, 16873432531072644986ull, 4141653603165539202ull, 6648305389757259141ull}}, {{3354995398737042529ull, 11868418626986030425ull, 9788753022384311907ull, 8310381737196573926ull}}, {{13626087170279121341ull, 5111918632652575063ull, 1506284620562807038ull, 5193988585747858704ull}}, {{12420922944421513772ull, 15613270327670494637ull, 1882855775703508797ull, 6492485732184823380ull}}, {{1691095625244728503ull, 5681529854305954585ull, 2353569719629385997ull, 8115607165231029225ull}}, {{12586149811846425074ull, 5856799168154915567ull, 13000196120836836008ull, 5072254478269393265ull}}, {{11121001246380643439ull, 7320998960193644459ull, 2415187095763881298ull, 6340318097836741582ull}}, {{9289565539548416394ull, 18374620737096831382ull, 12242355906559627430ull, 7925397622295926977ull}}, {{1194292443790372343ull, 6872451942258131710ull, 733943413958685288ull, 4953373513934954361ull}}, {{10716237591592741236ull, 8590564927822664637ull, 5529115285875744514ull, 6191716892418692951ull}}, {{18006983007918314449ull, 1514834122923554988ull, 2299708088917292739ull, 7739646115523366189ull}}, {{2030992343094170723ull, 17087672391323079532ull, 3743160564787001913ull, 4837278822202103868ull}}, {{2538740428867713403ull, 7524532433871685703ull, 4678950705983752392ull, 6046598527752629835ull}}, {{17008483591366805466ull, 9405665542339607128ull, 1237002364052302586ull, 7558248159690787294ull}}, {{10630302244604253417ull, 10490226982389642359ull, 14608184532814852828ull, 4723905099806742058ull}}, {{8676191787327928867ull, 13112783727987052949ull, 9036858629163790227ull, 5904881374758427573ull}}, {{15456925752587298987ull, 11779293641556428282ull, 15907759304882125688ull, 7381101718448034466ull}}, {{14272264613794449771ull, 7362058525972767676ull, 14554035583978716459ull, 4613188574030021541ull}}, {{17840330767243062214ull, 4590887139038571691ull, 4357486424691231862ull, 5766485717537526927ull}}, {{17688727440626439863ull, 14961980960652990422ull, 835172012436651923ull, 7208107146921908659ull}}, {{12887537263928274021ull, 14090790182388850124ull, 14879023070827978616ull, 9010133933652385823ull}}, {{17278082826809947071ull, 8806743863993031327ull, 16216918446908568491ull, 5631333708532741139ull}}, {{16985917515085045935ull, 6396743811563901255ull, 15659462040208322710ull, 7039167135665926424ull}}, {{16620710875428919514ull, 17219301801309652377ull, 1127583476550851771ull, 8798958919582408031ull}}, {{3470415269501992841ull, 8456220616604838784ull, 7622268700485364213ull, 5499349324739005019ull}}, {{4338019086877491051ull, 15181961789183436384ull, 4916149857179317362ull, 6874186655923756274ull}}, {{5422523858596863813ull, 9754080199624519672ull, 15368559358328922511ull, 8592733319904695342ull}}, {{3389077411623039883ull, 13013829152406406651ull, 4993663580528188665ull, 5370458324940434589ull}}, {{18071404819810963566ull, 2432228385225844601ull, 10853765494087623736ull, 6713072906175543236ull}}, {{8754197969481540746ull, 3040285481532305752ull, 13567206867609529670ull, 8391341132719429045ull}}, {{5471373730925962966ull, 15735236481239854807ull, 10785347301469649995ull, 5244588207949643153ull}}, {{2227531145230065804ull, 15057359583122430605ull, 18093370145264450398ull, 6555735259937053941ull}}, {{7396099949964970158ull, 9598327442048262448ull, 8781654626298399286ull, 8194669074921317427ull}}, {{4622562468728106349ull, 1387268632852776126ull, 3182691132222805602ull, 5121668171825823392ull}}, {{15001575122764908744ull, 10957457827920745965ull, 3978363915278507002ull, 6402085214782279240ull}}, {{4916910848173972218ull, 4473450248046156649ull, 4972954894098133753ull, 8002606518477849050ull}}, {{14602284326177202397ull, 14325121451097317665ull, 7719782827238721499ull, 5001629074048655656ull}}, {{4417797352439339284ull, 13294715795444259178ull, 9649728534048401874ull, 6252036342560819570ull}}, {{14745618727403949912ull, 7395022707450548164ull, 2838788630705726535ull, 7815045428201024463ull}}, {{18439383741482244503ull, 11539418219797674458ull, 8691771921832160940ull, 4884403392625640289ull}}, {{13825857639998029821ull, 14424272774747093073ull, 15476400920717589079ull, 6105504240782050361ull}}, {{3447263994715373564ull, 13418654950006478438ull, 5510443095614822637ull, 7631880300977562952ull}}, {{15989598051979272190ull, 10692502352967742975ull, 3444026934759264148ull, 4769925188110976845ull}}, {{15375311546546702333ull, 13365627941209678719ull, 8916719686876468089ull, 5962406485138721056ull}}, {{14607453414755990013ull, 2871976871229934687ull, 11145899608595585112ull, 7453008106423401320ull}}, {{16047187411863575614ull, 1794985544518709179ull, 6966187255372240695ull, 4658130066514625825ull}}, {{15447298246402081613ull, 16078789985930550186ull, 13319420087642688772ull, 5822662583143282281ull}}, {{10085750771147826209ull, 1651743408703636117ull, 2814217054271197254ull, 7278328228929102852ull}}, {{17218874482362170665ull, 11288051297734320954ull, 3517771317838996567ull, 9097910286161378565ull}}, {{15373482569903744570ull, 13972561088725032452ull, 4504450082863066806ull, 5686193928850861603ull}}, {{770109138670129096ull, 8242329324051514758ull, 1018876585151445604ull, 7107742411063577004ull}}, {{10186008460192437178ull, 10302911655064393447ull, 1273595731439307005ull, 8884678013829471255ull}}, {{13283784315261355092ull, 8745162793628939856ull, 7713526359790648734ull, 5552923758643419534ull}}, {{16604730394076693865ull, 1708081455181399012ull, 418535912883535110ull, 6941154698304274418ull}}, {{2309168918886315715ull, 11358473855831524574ull, 9746541927959194695ull, 8676443372880343022ull}}, {{15278288629586111034ull, 14016575187535784714ull, 1479902686547108780ull, 5422777108050214389ull}}, {{9874488750127862985ull, 17520718984419730893ull, 6461564376611273879ull, 6778471385062767986ull}}, {{16954796956087216635ull, 17289212712097275712ull, 17300327507618868157ull, 8473089231328459982ull}}, {{10596748097554510397ull, 13111600954274491272ull, 6201018673834404694ull, 5295680769580287489ull}}, {{13245935121943137996ull, 7166129155988338282ull, 12362959360720393772ull, 6619600961975359361ull}}, {{7334046865574146687ull, 8957661444985422853ull, 1618641145618328503ull, 8274501202469199202ull}}, {{6889622300197535632ull, 12516067430756971139ull, 5623336734438843218ull, 5171563251543249501ull}}, {{4000341856819531635ull, 6421712251591438116ull, 11640856936475941927ull, 6464454064429061876ull}}, {{5000427321024414544ull, 3415454296061909741ull, 14551071170594927409ull, 8080567580536327345ull}}, {{5431110084853953042ull, 13663873981107163348ull, 2176890453980747774ull, 5050354737835204591ull}}, {{6788887606067441303ull, 7856470439529178377ull, 16556171122758098430ull, 6312943422294005738ull}}, {{13097795526011689532ull, 597216012556697163ull, 11471841866592847230ull, 7891179277867507173ull}}, {{5880279194543612006ull, 14208318063130099439ull, 9475744175834223470ull, 4931987048667191983ull}}, {{2738662974752127103ull, 8537025542057848491ull, 7232994201365391434ull, 6164983810833989979ull}}, {{17258386773722322591ull, 1447909890717534805ull, 4429556733279351389ull, 7706229763542487474ull}}, {{13092334742790145571ull, 3210786690912153205ull, 7380158976726982522ull, 4816393602214054671ull}}, {{2530360373205518252ull, 13236855400494967315ull, 4613512702481340248ull, 6020492002767568339ull}}, {{16998008521789061527ull, 16546069250618709143ull, 1155204859674287406ull, 7525615003459460424ull}}, {{17541284353759245311ull, 5729607263209305310ull, 722003037296429629ull, 4703509377162162765ull}}, {{12703233405344280830ull, 11773695097439019542ull, 5514189815047924940ull, 5879386721452703456ull}}, {{6655669719825575229ull, 14717118871798774428ull, 6892737268809906175ull, 7349233401815879320ull}}, {{8319587149781969037ull, 13784712571321080131ull, 8615921586012382719ull, 9186541752269849150ull}}, {{2893898959400036696ull, 15532974384716756938ull, 773264972830351295ull, 5741588595168655719ull}}, {{12840745736104821678ull, 14804531962468558268ull, 14801639271320102831ull, 7176985743960819648ull}}, {{16050932170131027097ull, 13893978934658309931ull, 55305015440576923ull, 8971232179951024561ull}}, {{7725989597118197984ull, 6377893824947749755ull, 11563780680718830337ull, 5607020112469390350ull}}, {{5045800977970359576ull, 12584053299612075098ull, 5231353814043762113ull, 7008775140586737938ull}}, {{15530623259317725278ull, 1895008569232930160ull, 15762564304409478450ull, 8760968925733422422ull}}, {{9706639537073578299ull, 5796066374197969254ull, 5239916671828536127ull, 5475605578583389014ull}}, {{2909927384487197065ull, 2633396949320073664ull, 15773267876640445967ull, 6844506973229236267ull}}, {{3637409230608996332ull, 17126804241932255792ull, 15104898827373169554ull, 8555633716536545334ull}}, {{2273380769130622707ull, 15315938669635047774ull, 4828875748680843067ull, 5347271072835340834ull}}, {{12065097998268054192ull, 14533237318616421813ull, 15259466722705829642ull, 6684088841044176042ull}}, {{1246314442552904028ull, 8943174611415751459ull, 9850961366527511245ull, 8355111051305220053ull}}, {{16919847591091422682ull, 7895327141348538613ull, 8462693863293388480ull, 5221944407065762533ull}}, {{7314751433582114640ull, 9869158926685673267ull, 15190053347544123504ull, 6527430508832203166ull}}, {{4531753273550255396ull, 12336448658357091584ull, 9764194647575378572ull, 8159288136040253958ull}}, {{2832345795968909623ull, 16933652448327958048ull, 1490935636307223703ull, 5099555085025158724ull}}, {{3540432244961137028ull, 16555379541982559656ull, 1863669545384029629ull, 6374443856281448405ull}}, {{4425540306201421285ull, 6859166372196035858ull, 6941272950157424941ull, 7968054820351810506ull}}, {{7377648709803276207ull, 6592821991836216363ull, 8949981612275778492ull, 4980034262719881566ull}}, {{4610374868826707355ull, 8241027489795270454ull, 1964104978489947307ull, 6225042828399851958ull}}, {{14986340622888160002ull, 5689598343816700163ull, 11678503259967209942ull, 7781303535499814947ull}}, {{7060619880091406049ull, 17391057020167601314ull, 4993221528265812261ull, 4863314709687384342ull}}, {{18049146886969033370ull, 7903763219927337930ull, 15464898947187041135ull, 6079143387109230427ull}}, {{13338061571856515904ull, 5268018006481784509ull, 14719437665556413515ull, 7598929233886538034ull}}, {{10642131491624016392ull, 986668244837421366ull, 13811334559400146351ull, 4749330771179086271ull}}, {{4079292327675244682ull, 15068393361328940420ull, 12652482180822795034ull, 5936663463973857839ull}}, {{5099115409594055852ull, 9612119664806399717ull, 11203916707601105889ull, 7420829329967322299ull}}, {{5492790140209978860ull, 17536789836572469583ull, 4696604933036997228ull, 4638018331229576437ull}}, {{2254301656835085671ull, 3474243222006035363ull, 10482442184723634440ull, 5797522914036970546ull}}, {{16652935126326020800ull, 4342804027507544203ull, 3879680694049767242ull, 7246903642546213183ull}}, {{16204482889480138096ull, 14651877071239206062ull, 237914849134821148ull, 9058629553182766479ull}}, {{5516115787497698406ull, 18380795206379279597ull, 7066225808350345073ull, 5661643470739229049ull}}, {{11506830752799510912ull, 9140935952691935784ull, 13444468278865319246ull, 7077054338424036311ull}}, {{14383538440999388640ull, 2202797904010143922ull, 12193899330154261154ull, 8846317923030045389ull}}, {{13601397544052005804ull, 5988434708433727855ull, 9927030090560107173ull, 5528948701893778368ull}}, {{12390060911637619351ull, 12097229403969547723ull, 12408787613200133966ull, 6911185877367222960ull}}, {{10875890121119636284ull, 5898164718107158846ull, 15510984516500167458ull, 8638982346709028700ull}}, {{2185745307272384774ull, 8298038967244362183ull, 470993285957828853ull, 5399363966693142938ull}}, {{16567239689372644679ull, 14984234727482840632ull, 9812113644302061874ull, 6749204958366428672ull}}, {{2262305538006254233ull, 9506921372498774983ull, 12265142055377577343ull, 8436506197958035840ull}}, {{8331469988894990752ull, 12859354885452816220ull, 7665713784610985839ull, 5272816373723772400ull}}, {{10414337486118738440ull, 11462507588388632371ull, 9582142230763732299ull, 6591020467154715500ull}}, {{8406235839221035145ull, 9716448467058402560ull, 11977677788454665374ull, 8238775583943394375ull}}, {{5253897399513146966ull, 1461094273484113696ull, 14403577645425247715ull, 5149234739964621484ull}}, {{6567371749391433707ull, 15661425897137305832ull, 18004472056781559643ull, 6436543424955776855ull}}, {{8209214686739292134ull, 14965096352994244386ull, 17893904052549561650ull, 8045679281194721069ull}}, {{9742445197639445488ull, 13964871239048790645ull, 13489533042057169983ull, 5028549550746700668ull}}, {{16789742515476694764ull, 12844403030383600402ull, 16861916302571462479ull, 6285686938433375835ull}}, {{11763806107491092647ull, 11443817769552112599ull, 16465709359786940195ull, 7857108673041719794ull}}, {{14269907844823014760ull, 4846543096756376422ull, 14902754368294225526ull, 4910692920651074871ull}}, {{8614012769173992642ull, 15281550907800246336ull, 14016756941940394003ull, 6138366150813843589ull}}, {{10767515961467490803ull, 14490252616322920016ull, 3685888122143328792ull, 7672957688517304487ull}}, {{6729697475917181752ull, 9056407885201825010ull, 9221209103980662351ull, 4795598555323315304ull}}, {{17635493881751252998ull, 6708823838074893358ull, 11526511379975827939ull, 5994498194154144130ull}}, {{12820995315334290439ull, 3774343779166228794ull, 5184767188115009116ull, 7493122742692680163ull}}, {{12624808090511319429ull, 11582336898833668804ull, 934636483358186745ull, 4683201714182925102ull}}, {{15781010113139149286ull, 642863068259922293ull, 10391667641052509240ull, 5854002142728656377ull}}, {{5891204586141772895ull, 803578835324902867ull, 17601270569743024454ull, 7317502678410820471ull}}, {{2752319714249828215ull, 10227845581010904392ull, 17389902193751392663ull, 9146878348013525589ull}}, {{1720199821406142634ull, 13309932515772897101ull, 13174531880308314366ull, 5716798967508453493ull}}, {{6761935795185066197ull, 7414043607861345568ull, 2633106795103229246ull, 7145998709385566867ull}}, {{8452419743981332746ull, 44182472971906152ull, 17126441549161200270ull, 8932498386731958583ull}}, {{5282762339988332966ull, 13862672100889605057ull, 17621554995866832024ull, 5582811491707474114ull}}, {{11215138943412804112ull, 17328340126112006321ull, 12803571707978764222ull, 6978514364634342643ull}}, {{183865623983841428ull, 12437053120785232094ull, 11392778616546067374ull, 8723142955792928304ull}}, {{13949974070272064604ull, 3161472182063382154ull, 7120486635341292109ull, 5451964347370580190ull}}, {{8214095550985304947ull, 8563526246006615597ull, 18123980331031390944ull, 6814955434213225237ull}}, {{14879305457159019088ull, 10704407807508269496ull, 8819917358507074968ull, 8518694292766531547ull}}, {{9299565910724386930ull, 6690254879692668435ull, 3206605339853227903ull, 5324183932979082217ull}}, {{7012771369978095759ull, 3751132581188447640ull, 8619942693243922783ull, 6655229916223852771ull}}, {{8765964212472619698ull, 77229708058171646ull, 6163242348127515575ull, 8319037395279815964ull}}, {{867041614367999408ull, 6965797595177439135ull, 13075398504434473042ull, 5199398372049884977ull}}, {{14918860073242162971ull, 17930619030826574726ull, 2509190075260927590ull, 6499247965062356222ull}}, {{9425203054697927906ull, 13189901751678442600ull, 12359859630930935296ull, 8124059956327945277ull}}, {{5890751909186204942ull, 8243688594799026625ull, 10030755278545528512ull, 5077537472704965798ull}}, {{11975125904910144081ull, 10304610743498783281ull, 3315072061327134832ull, 6346921840881207248ull}}, {{1133849325855516389ull, 12880763429373479102ull, 4143840076658918540ull, 7933652301101509060ull}}, {{14543713883941861455ull, 17273849180213200246ull, 11813272084766599895ull, 4958532688188443162ull}}, {{8956270318072551011ull, 16980625456839112404ull, 5543218069103474061ull, 6198165860235553953ull}}, {{11195337897590688764ull, 7390723765766726793ull, 11540708604806730481ull, 7747707325294442441ull}}, {{79557158353098621ull, 16148417399672674006ull, 295413850363124694ull, 4842317078309026526ull}}, {{9322818484796149085ull, 10962149712736066699ull, 9592639349808681676ull, 6052896347886283157ull}}, {{7041837087567798452ull, 13702687140920083374ull, 16602485205688239999ull, 7566120434857853946ull}}, {{18236206235012037744ull, 15481708490716133964ull, 14988239271982537903ull, 4728825271786158716ull}}, {{4348513720055495564ull, 14740449594967779552ull, 288555016268620763ull, 5911031589732698396ull}}, {{5435642150069369455ull, 13813875975282336536ull, 360693770335775954ull, 7388789487165872995ull}}, {{3397276343793355910ull, 13245358502978848239ull, 16366334670955717635ull, 4617993429478670621ull}}, {{18081653485023858599ull, 11945012110296172394ull, 6622860283412483332ull, 5772491786848338277ull}}, {{13378694819425047441ull, 14931265137870215493ull, 12890261372692992069ull, 7215614733560422846ull}}, {{2888310468999145589ull, 4829023367055605655ull, 6889454679011464279ull, 9019518416950528558ull}}, {{8722723070765547849ull, 9935668632050835390ull, 18140967229664328886ull, 5637199010594080348ull}}, {{1680031801602159003ull, 3196213753208768430ull, 4229464963370859492ull, 7046498763242600436ull}}, {{11323411788857474562ull, 3995267191510960537ull, 5286831204213574365ull, 8808123454053250545ull}}, {{159603340394839746ull, 4802885003908044288ull, 14833484548701953738ull, 5505077158783281590ull}}, {{199504175493549682ull, 15226978291739831168ull, 9318483649022666364ull, 6881346448479101988ull}}, {{249380219366937102ull, 586978790965237344ull, 11648104561278332956ull, 8601683060598877485ull}}, {{155862637104335689ull, 9590233781208049148ull, 9585908360012652049ull, 5376051912874298428ull}}, {{194828296380419611ull, 16599478244937449339ull, 11982385450015815061ull, 6720064891092873035ull}}, {{14078593425757688226ull, 6914289750889647961ull, 10366295794092380923ull, 8400081113866091294ull}}, {{1881591863457473285ull, 2015588085092336024ull, 1867248852880350173ull, 5250050696166307059ull}}, {{2351989829321841607ull, 7131171124792807934ull, 16169119121382601428ull, 6562563370207883823ull}}, {{12163359323507077816ull, 8913963905991009917ull, 15599712883300863881ull, 8203204212759854779ull}}, {{9907942586405617587ull, 17100442487312850958ull, 7443977542849345973ull, 5127002632974909237ull}}, {{3161556196152246176ull, 7540495053858899986ull, 13916657946989070371ull, 6408753291218636546ull}}, {{13175317282045083528ull, 4813932798896237078ull, 8172450396881562156ull, 8010941614023295683ull}}, {{3622887282850789301ull, 12232080036164923982ull, 2801938488837282395ull, 5006838508764559802ull}}, {{13751981140418262434ull, 10678414026778767073ull, 12725795147901378802ull, 6258548135955699752ull}}, {{3354918370240664331ull, 4124645496618683034ull, 15907243934876723503ull, 7823185169944624690ull}}, {{6708509999827803111ull, 9495432463027758752ull, 14553713477725340093ull, 4889490731215390431ull}}, {{8385637499784753888ull, 16480976597212086344ull, 13580455828729287212ull, 6111863414019238039ull}}, {{10482046874730942360ull, 2154476672805556314ull, 12363883767484221112ull, 7639829267524047549ull}}, {{11162965315134226879ull, 1346547920503472696ull, 10033270363891332147ull, 4774893292202529718ull}}, {{13953706643917783599ull, 15518242955911504582ull, 3318215918009389375ull, 5968616615253162148ull}}, {{8218761268042453691ull, 14786117676461992824ull, 4147769897511736719ull, 7460770769066452685ull}}, {{5136725792526533557ull, 16158852575429827371ull, 4898199195158529401ull, 4662981730666532928ull}}, {{1809221222230779042ull, 6363507664005120502ull, 6122748993948161752ull, 5828727163333166160ull}}, {{11484898564643249610ull, 7954384580006400627ull, 7653436242435202190ull, 7285908954166457700ull}}, {{9744437187376674109ull, 719608688153224976ull, 9566795303044002738ull, 9107386192708072125ull}}, {{6090273242110421318ull, 5061441448523153514ull, 8285090073616195663ull, 5692116370442545078ull}}, {{16836213589492802456ull, 1715115792226553988ull, 1132990555165468771ull, 7115145463053181348ull}}, {{2598522913156451454ull, 15978952795565356198ull, 1416238193956835963ull, 8893931828816476685ull}}, {{15459134876004945871ull, 7681002488014653671ull, 3190991880436716429ull, 5558707393010297928ull}}, {{14712232576578794434ull, 14212939128445704993ull, 3988739850545895536ull, 6948384241262872410ull}}, {{4555232665441329331ull, 17766173910557131242ull, 14209296850037145228ull, 8685480301578590512ull}}, {{7458706434328218736ull, 1880486657243431218ull, 8880810531273215768ull, 5428425188486619070ull}}, {{100011006055497612ull, 2350608321554289023ull, 1877641127236743902ull, 6785531485608273838ull}}, {{13960071812851535726ull, 12161632438797637086ull, 11570423445900705685ull, 8481914357010342297ull}}, {{4113358864604821925ull, 9906863283462217131ull, 313985626046859197ull, 5301196473131463936ull}}, {{530012562328639502ull, 16995265122755159318ull, 392482032558573996ull, 6626495591414329920ull}}, {{9885887739765575186ull, 2797337329734397531ull, 490602540698217496ull, 8283119489267912400ull}}, {{3872836828139790539ull, 1748335831083998457ull, 306626587936385935ull, 5176949680792445250ull}}, {{9452732053602126078ull, 16020477844137161783ull, 9606655271775258226ull, 6471187100990556562ull}}, {{7204229048575269693ull, 10802225268316676421ull, 2784947052864296975ull, 8088983876238195703ull}}, {{6808486164573237511ull, 13668919820339004619ull, 8658120935681267465ull, 5055614922648872314ull}}, {{3898921687289158984ull, 3251091720141592062ull, 1599279132746808524ull, 6319518653311090393ull}}, {{14097024145966224538ull, 4063864650176990077ull, 6610784934360898559ull, 7899398316638862991ull}}, {{11116483100442584288ull, 9457444434001700654ull, 11049269611616643455ull, 4937123947899289369ull}}, {{4672231838698454552ull, 7210119524074737914ull, 18423273032948192223ull, 6171404934874111711ull}}, {{15063661835227843998ull, 4400963386666034488ull, 18417405272757852375ull, 7714256168592639639ull}}, {{9414788647017402499ull, 9668131144307353411ull, 18428407323114739590ull, 4821410105370399774ull}}, {{7156799790344365220ull, 2861791893529415956ull, 13812137117038648680ull, 6026762631712999718ull}}, {{8945999737930456525ull, 3577239866911769945ull, 8041799359443535042ull, 7533453289641249648ull}}, {{17120464882275005088ull, 6847460935247244119ull, 5026124599652209401ull, 4708408306025781030ull}}, {{16788895084416368456ull, 13171012187486443053ull, 15506027786420037559ull, 5885510382532226287ull}}, {{7151060800238296858ull, 11852079215930665913ull, 14770848714597659045ull, 7356887978165282859ull}}, {{13550512018725258976ull, 980040964631168679ull, 13851874874819685903ull, 9196109972706603574ull}}, {{15386599039344368716ull, 7530054630535562280ull, 4045735778334915785ull, 5747568732941627234ull}}, {{786504725470909279ull, 14024254306596840755ull, 14280541759773420539ull, 7184460916177034042ull}}, {{14818188962120800311ull, 12918631864818663039ull, 8627305162861999866ull, 8980576145221292553ull}}, {{16178897128966582051ull, 12685830933939052303ull, 16921280772857219676ull, 5612860090763307845ull}}, {{15611935392780839659ull, 15857288667423815379ull, 7316542910789360883ull, 7016075113454134807ull}}, {{14903233222548661670ull, 15209924815852381320ull, 4533992620059313200ull, 8770093891817668509ull}}, {{9314520764092913544ull, 9506203009907738325ull, 5139588396750764702ull, 5481308682386042818ull}}, {{16254836973543529834ull, 2659381725529897098ull, 15647857532793231686ull, 6851635852982553522ull}}, {{11095174180074636484ull, 12547599193767147181ull, 10336449879136763799ull, 8564544816228191903ull}}, {{9240326871760341755ull, 14759778523745548844ull, 13377810202101559230ull, 5352840510142619939ull}}, {{11550408589700427193ull, 9226351117827160247ull, 12110576734199561134ull, 6691050637678274924ull}}, {{9826324718698146087ull, 2309566860429174501ull, 15138220917749451418ull, 8363813297097843655ull}}, {{8447295958400035257ull, 6055165306195621967ull, 16378917101234488992ull, 5227383310686152284ull}}, {{5947433929572656167ull, 7568956632744527459ull, 2026902302833559624ull, 6534229138357690356ull}}, {{2822606393538432304ull, 9461195790930659324ull, 2533627878541949530ull, 8167786422947112945ull}}, {{10987501032816295998ull, 10524933387759049981ull, 13112732470157188216ull, 5104866514341945590ull}}, {{18346062309447757902ull, 13156166734698812476ull, 7167543550841709462ull, 6381083142927431988ull}}, {{4485833813100145761ull, 7221836381518739788ull, 8959429438552136828ull, 7976353928659289985ull}}, {{12027018170042366909ull, 13737019775303988175ull, 17128858445163555277ull, 4985221205412056240ull}}, {{10422086694125570732ull, 3336216663847821507ull, 2964328982744892481ull, 6231526506765070301ull}}, {{8415922349229575511ull, 8781956848237164788ull, 8317097246858503505ull, 7789408133456337876ull}}, {{14483323505123260503ull, 17017938076216697752ull, 14421557816141340498ull, 4868380083410211172ull}}, {{18104154381404075628ull, 12049050558416096382ull, 18026947270176675623ull, 6085475104262763965ull}}, {{13406820939900318727ull, 10449627179592732574ull, 8698626032438680817ull, 7606843880328454957ull}}, {{3767577069010311301ull, 18060232033313927619ull, 7742484279487869462ull, 4754277425205284348ull}}, {{97785317835501222ull, 13351918004787633716ull, 9678105349359836828ull, 5942846781506605435ull}}, {{122231647294376527ull, 16689897505984542145ull, 7485945668272408131ull, 7428558476883256794ull}}, {{11605609825627455089ull, 8125342932026644888ull, 9290402061097642986ull, 4642849048052035496ull}}, {{14507012282034318862ull, 933306628178530302ull, 11613002576372053733ull, 5803561310065044370ull}}, {{8910393315688122769ull, 5778319303650550782ull, 5292881183610291358ull, 7254451637581305463ull}}, {{1914619607755377653ull, 16446271166417964286ull, 2004415461085476293ull, 9068064546976631829ull}}, {{15031695310129274745ull, 12584762488224921630ull, 3558602672392116635ull, 5667540341860394893ull}}, {{9566247100806817624ull, 11119267091853764134ull, 9059939358917533698ull, 7084425427325493616ull}}, {{2734436839153746221ull, 4675711827962429360ull, 11324924198646917123ull, 8855531784156867020ull}}, {{1709023024471091389ull, 616476883262824398ull, 16301449661009099010ull, 5534707365098041887ull}}, {{11359650817443640044ull, 9993968140933306305ull, 15765126057833985858ull, 6918384206372552359ull}}, {{364505466522386342ull, 3269088139311857074ull, 15094721553865094419ull, 8647980257965690449ull}}, {{4839501935003879368ull, 18184081151565768335ull, 2516671943524602155ull, 5404987661228556531ull}}, {{1437691400327461306ull, 18118415421029822515ull, 16980897984687916406ull, 6756234576535695663ull}}, {{15632172305691490344ull, 13424647239432502335ull, 16614436462432507604ull, 8445293220669619579ull}}, {{16687636718698263321ull, 17613776561500089767ull, 8078179779806623300ull, 5278308262918512237ull}}, {{16247859879945441248ull, 3570476628165560593ull, 14709410743185667030ull, 6597885328648140296ull}}, {{6474766794649637848ull, 13686467822061726550ull, 18386763428982083787ull, 8247356660810175370ull}}, {{17881787301938187367ull, 6248199379574885141ull, 16103413161541190271ull, 5154597913006359606ull}}, {{8517176072140570496ull, 3198563206041218523ull, 10905894415071712031ull, 6443247391257949508ull}}, {{6034784071748325216ull, 17833262062833686866ull, 13632368018839640038ull, 8054059239072436885ull}}, {{8383426063270091164ull, 6534102770843666387ull, 10826073020988468976ull, 5033787024420273053ull}}, {{5867596560660226051ull, 8167628463554582984ull, 18144277294662974124ull, 6292233780525341316ull}}, {{7334495700825282564ull, 10209535579443228730ull, 4233602544619166039ull, 7865292225656676646ull}}, {{9195745831443189507ull, 13298488764793099812ull, 16481059645669142486ull, 4915807641035422903ull}}, {{11494682289303986883ull, 7399738919136598957ull, 15989638538659040204ull, 6144759551294278629ull}}, {{533294806347819892ull, 9249673648920748697ull, 6151990118041636543ull, 7680949439117848287ull}}, {{11862524300035857193ull, 12698575058216549791ull, 10762522851417104695ull, 4800593399448655179ull}}, {{10216469356617433587ull, 11261532804343299335ull, 8841467545843992965ull, 6000741749310818974ull}}, {{8158900677344404079ull, 241857950146960457ull, 1828462395450215399ull, 7500927186638523718ull}}, {{16628527969408722310ull, 7068690246482932141ull, 14977847052438548336ull, 4688079491649077323ull}}, {{6950601906478739175ull, 8835862808103665177ull, 14110622797120797516ull, 5860099364561346654ull}}, {{13299938401525811873ull, 11044828510129581471ull, 8414906459546221087ull, 7325124205701683318ull}}, {{12013236983479876937ull, 9194349619234588935ull, 1295261037578000551ull, 9156405257127104148ull}}, {{14425802142316004942ull, 12663997539662699940ull, 10032910185341026152ull, 5722753285704440092ull}}, {{18032252677895006177ull, 15829996924578374925ull, 12541137731676282690ull, 7153441607130550115ull}}, {{8705257792086594009ull, 10564124118868192849ull, 11064736146167965459ull, 8941802008913187644ull}}, {{16970001166122591016ull, 4296734565078926578ull, 16138832128209754220ull, 5588626255570742277ull}}, {{11989129420798462962ull, 5370918206348658223ull, 6338482104980029063ull, 6985782819463427847ull}}, {{10374725757570690798ull, 2101961739508434875ull, 3311416612797648425ull, 8732228524329284809ull}}, {{4178360589267987797ull, 12842941133261241557ull, 13598850429067000025ull, 5457642827705803005ull}}, {{9834636755012372650ull, 2218618361294388234ull, 3163504981051586320ull, 6822053534632253757ull}}, {{3069923906910690005ull, 2773272951617985293ull, 8566067244741870804ull, 8527566918290317196ull}}, {{4224545451032875205ull, 10956667631616016616ull, 14577164064818445060ull, 5329729323931448247ull}}, {{5280681813791094006ull, 13695834539520020770ull, 13609769062595668421ull, 6662161654914310309ull}}, {{15824224304093643316ull, 3284735119117862250ull, 3177153272962421815ull, 8327702068642887887ull}}, {{14501826208485914976ull, 8970488477089745762ull, 8903249823242595490ull, 5204813792901804929ull}}, {{8903910723752617912ull, 1989738559507406395ull, 15740748297480632267ull, 6506017241127256161ull}}, {{6518202386263384486ull, 16322231254666421706ull, 5840877316568626621ull, 8132521551409070202ull}}, {{8685562509842003208ull, 12507237543380207518ull, 8262234341282779542ull, 5082825969630668876ull}}, {{1633581100447728202ull, 6410674892370483590ull, 10327792926603474428ull, 6353532462038336095ull}}, {{11265348412414436061ull, 8013343615463104487ull, 8298055139826955131ull, 7941915577547920119ull}}, {{13958371785400104394ull, 2702496750450746352ull, 12103813490032928813ull, 4963697235967450074ull}}, {{17447964731750130492ull, 7989806956490820844ull, 5906394825686385208ull, 6204621544959312593ull}}, {{3363211840978111499ull, 9987258695613526056ull, 11994679550535369414ull, 7755776931199140741ull}}, {{2102007400611319687ull, 1630350666331065881ull, 9802517728298299836ull, 4847360581999462963ull}}, {{7239195269191537513ull, 2037938332913832351ull, 7641461141945486891ull, 6059200727499328704ull}}, {{4437308068062033987ull, 16382480971424454151ull, 9551826427431858613ull, 7574000909374160880ull}}, {{9690846570179853098ull, 12544893616353977796ull, 5969891517144911633ull, 4733750568358850550ull}}, {{12113558212724816373ull, 1846058965160308533ull, 16685736433285915350ull, 5917188210448563187ull}}, {{1306889710623856754ull, 11530945743305161475ull, 16245484523180006283ull, 7396485263060703984ull}}, {{16957707133635768135ull, 4900998080352031969ull, 10153427826987503927ull, 4622803289412939990ull}}, {{7362075861762546457ull, 1514561582012652058ull, 3468412746879604101ull, 5778504111766174988ull}}, {{18425966864057958879ull, 6504887995943202976ull, 4335515933599505126ull, 7223130139707718735ull}}, {{4585714506362896982ull, 17354482031783779529ull, 807708898571993503ull, 9028912674634648419ull}}, {{14395286612545280374ull, 17764080297505944061ull, 16645719126103353603ull, 5643070421646655261ull}}, {{4159050210399436756ull, 17593414353455042173ull, 6972090852347028292ull, 7053838027058319077ull}}, {{9810498781426683848ull, 3545023868109251100ull, 13326799583861173270ull, 8817297533822898846ull}}, {{15354933775246453213ull, 16050697972850445649ull, 3717563721485845389ull, 5510810958639311779ull}}, {{5358609163775902805ull, 6228314410780893350ull, 35268633429918833ull, 6888513698299139724ull}}, {{15921633491574654314ull, 12397079031903504591ull, 44085791787398541ull, 8610642122873924655ull}}, {{16868549959875240802ull, 10054017404153384321ull, 6945082647508205944ull, 5381651326796202909ull}}, {{7250629394561887291ull, 12567521755191730402ull, 13293039327812645334ull, 6727064158495253636ull}}, {{18286658780057134921ull, 6486030157134887194ull, 16616299159765806668ull, 8408830198119067045ull}}, {{16040847755963097230ull, 13277140885064080304ull, 12691029984067323119ull, 5255518873824416903ull}}, {{1604315621244319921ull, 11984740087902712477ull, 11252101461656765995ull, 6569398592280521129ull}}, {{6617080544982787806ull, 10369239091451002692ull, 230068771788793782ull, 8211748240350651412ull}}, {{13359047377469018187ull, 1869088413729488778ull, 9367165019222771922ull, 5132342650219157132ull}}, {{7475437184981496925ull, 11559732554016636781ull, 11708956274028464902ull, 6415428312773946415ull}}, {{13955982499654259060ull, 5226293655666020168ull, 10024509324108193224ull, 8019285390967433019ull}}, {{8722489062283911913ull, 3266433534791262605ull, 3959475318353926813ull, 5012053369354645637ull}}, {{15514797346282277795ull, 8694727936916466160ull, 9561030166369796420ull, 6265066711693307046ull}}, {{946752609143295628ull, 10868409921145582701ull, 2727915671107469717ull, 7831333389616633808ull}}, {{2897563389928253720ull, 9098599209929683140ull, 1704947294442168573ull, 4894583368510396130ull}}, {{3621954237410317149ull, 15984935030839491829ull, 11354556154907486524ull, 6118229210637995162ull}}, {{9139128815190284340ull, 1534424714839813170ull, 4969823156779582348ull, 7647786513297493953ull}}, {{10323641527921315617ull, 10182387483629659039ull, 14635354519055708727ull, 4779866570810933720ull}}, {{8292865891474256617ull, 8116298336109685895ull, 18294193148819635909ull, 5974833213513667150ull}}, {{5754396345915432867ull, 14757058938564495273ull, 13644369399169769078ull, 7468541516892083938ull}}, {{15125712762265615302ull, 4611475818175421641ull, 13139416892908493578ull, 4667838448057552461ull}}, {{5072082897549855416ull, 14987716809574052860ull, 2589213060853453260ull, 5834798060071940577ull}}, {{6340103621937319269ull, 287901938258014459ull, 7848202344494204480ull, 7293497575089925721ull}}, {{3313443508994261183ull, 359877422822518074ull, 14421938949045143504ull, 9116871968862407151ull}}, {{6682588211548801143ull, 224923389264073796ull, 15931240870794296546ull, 5698044980539004469ull}}, {{8353235264436001429ull, 9504526273434868053ull, 6078993033210706970ull, 7122556225673755587ull}}, {{15053230098972389690ull, 2657285804938809258ull, 2987055273085995809ull, 8903195282092194484ull}}, {{14019954830285131461ull, 13190018674155225546ull, 11090281582533523188ull, 5564497051307621552ull}}, {{8301571501001638518ull, 16487523342694031933ull, 13862851978166903985ull, 6955621314134526940ull}}, {{14988650394679436051ull, 6774346123085376204ull, 17328564972708629982ull, 8694526642668158675ull}}, {{144534459819871724ull, 18069024382210523840ull, 8524510098729199786ull, 5434079151667599172ull}}, {{180668074774839655ull, 13362908440908378992ull, 10655637623411499733ull, 6792598939584498965ull}}, {{225835093468549568ull, 2868577495853310028ull, 17931233047691762571ull, 8490748674480623706ull}}, {{9364518970272619288ull, 17933761999404176431ull, 15818706673234739510ull, 5306717921550389816ull}}, {{7093962694413386206ull, 13193830462400444731ull, 1326639267833872772ull, 6633397401937987271ull}}, {{4255767349589344854ull, 16492288078000555914ull, 15493357140074504677ull, 8291746752422484088ull}}, {{7271540611920728438ull, 12613523057964041398ull, 9683348212546565423ull, 5182341720264052555ull}}, {{18312797801755686355ull, 11155217804027663843ull, 7492499247255818875ull, 6477927150330065694ull}}, {{18279311233767220040ull, 9332336236607191900ull, 142252022214997786ull, 8097408937912582118ull}}, {{2201197484249736717ull, 10444396166306882842ull, 13923965569166537328ull, 5060880586195363823ull}}, {{11974868892166946704ull, 13055495207883603552ull, 12793270943030783756ull, 6326100732744204779ull}}, {{14968586115208683380ull, 16319369009854504440ull, 11379902660361091791ull, 7907625915930255974ull}}, {{9355366322005427113ull, 17117134658800147131ull, 2500753144298294465ull, 4942266197456409984ull}}, {{7082521884079395987ull, 7561360268218020202ull, 3125941430372868082ull, 6177832746820512480ull}}, {{18076524391954020792ull, 228328298417749444ull, 3907426787966085103ull, 7722290933525640600ull}}, {{2074455708116487187ull, 7060234214152175259ull, 2442141742478803189ull, 4826431833453525375ull}}, {{16428127690427772695ull, 13436978786117606977ull, 16887735233380667698ull, 6033039791816906718ull}}, {{6700101557752552157ull, 7572851445792232914ull, 11886297004871058815ull, 7541299739771133398ull}}, {{8799249492022733002ull, 11650561181261227427ull, 2817249609617023855ull, 4713312337356958374ull}}, {{6387375846601028349ull, 9951515458149146380ull, 12744934048876055627ull, 5891640421696197967ull}}, {{7984219808251285436ull, 7827708304259045071ull, 11319481542667681630ull, 7364550527120247459ull}}, {{5368588741886718891ull, 561263343469030531ull, 9537665909907214134ull, 9205688158900309324ull}}, {{1049524954465505355ull, 14185847644950307794ull, 15184413230546784641ull, 5753555099312693327ull}}, {{10535278229936657502ull, 3897251500905721030ull, 14368830519756092898ull, 7191943874140866659ull}}, {{3945725750566046069ull, 14094936412986927096ull, 13349352131267728218ull, 8989929842676083324ull}}, {{2466078594103778793ull, 13421021276544217339ull, 17566717118897105944ull, 5618706151672552077ull}}, {{16917656297911887203ull, 16776276595680271673ull, 8123338343339218718ull, 7023382689590690097ull}}, {{7312012317107695292ull, 11746973707745563784ull, 14765858947601411302ull, 8779228361988362621ull}}, {{4570007698192309558ull, 2730172548913589461ull, 11534504851464576016ull, 5487017726242726638ull}}, {{10324195641167774851ull, 3412715686141986826ull, 5194759027475944212ull, 6858772157803408298ull}}, {{3681872514604942756ull, 4265894607677483533ull, 15716820821199706073ull, 8573465197254260372ull}}, {{4607013330841783175ull, 14195399175866896968ull, 599640976395040487ull, 5358415748283912733ull}}, {{5758766663552228968ull, 13132562951406233306ull, 5361237238921188513ull, 6698019685354890916ull}}, {{16421830366295062018ull, 2580645633975627920ull, 6701546548651485642ull, 8372524606693613645ull}}, {{10263643978934413761ull, 6224589539662155354ull, 6494309602120872478ull, 5232827879183508528ull}}, {{3606182936813241394ull, 17004108961432470001ull, 8117887002651090597ull, 6541034848979385660ull}}, {{9119414689443939646ull, 7420078146508423789ull, 10147358753313863247ull, 8176293561224232075ull}}, {{8005477190116156231ull, 11555077869208846724ull, 4036256211607470577ull, 5110183475765145047ull}}, {{10006846487645195289ull, 608789281228894693ull, 433634246081950318ull, 6387729344706431309ull}}, {{17120244127983882015ull, 9984358638390894174ull, 5153728826029825801ull, 7984661680883039136ull}}, {{6088466561562538355ull, 17769439195062778619ull, 3221080516268641125ull, 4990413550551899460ull}}, {{2998897183525785040ull, 8376740938546309562ull, 4026350645335801407ull, 6238016938189874325ull}}, {{12971993516262007108ull, 5859240154755499048ull, 9644624325097139663ull, 7797521172737342906ull}}, {{8107495947663754443ull, 10579554124363268761ull, 10639576221613100193ull, 4873450732960839316ull}}, {{14746055953007080957ull, 17836128673881473855ull, 13299470277016375241ull, 6091813416201049145ull}}, {{13820883922831463292ull, 8460102787069678607ull, 2789279790988305340ull, 7614766770251311432ull}}, {{15555581479410746414ull, 14510936278773324937ull, 1743299869367690837ull, 4759229231407069645ull}}, {{5609418793981269305ull, 4303612293184492460ull, 6790810855137001451ull, 5949036539258837056ull}}, {{7011773492476586631ull, 767829348053227671ull, 8488513568921251814ull, 7436295674073546320ull}}, {{11299887460438948501ull, 14314951397815431006ull, 5305320980575782383ull, 4647684796295966450ull}}, {{4901487288693909818ull, 13282003228841900854ull, 15855023262574503787ull, 5809605995369958062ull}}, {{15350231147722163080ull, 11990818017624988163ull, 10595407041363353926ull, 7262007494212447578ull}}, {{14576102916225315946ull, 5765150485176459396ull, 4020886764849416600ull, 9077509367765559473ull}}, {{18333436359495598274ull, 3603219053235287122ull, 14042269274099355135ull, 5673443354853474670ull}}, {{13693423412514722035ull, 18339081871826272615ull, 8329464555769418110ull, 7091804193566843338ull}}, {{12505093247216014640ull, 13700480302928064961ull, 1188458657856996830ull, 8864755241958554173ull}}, {{898154251868927294ull, 3951114170902652697ull, 3048629670374316971ull, 5540472026224096358ull}}, {{5734378833263547021ull, 327206695200927967ull, 13034159124822672022ull, 6925590032780120447ull}}, {{2556287523152045873ull, 9632380405855935767ull, 11681012887600952123ull, 8656987540975150559ull}}, {{8515208729611110527ull, 3714394744446265902ull, 14218162082391676933ull, 5410617213109469099ull}}, {{1420638875159112350ull, 9254679448985220282ull, 13161016584562208262ull, 6763271516386836374ull}}, {{10999170630803666245ull, 2344977274376749544ull, 7227898693847984520ull, 8454089395483545468ull}}, {{6874481644252291404ull, 1465610796485468465ull, 13740808720509766133ull, 5283805872177215917ull}}, {{13204788073742752158ull, 6443699514034223485ull, 3340952845355043954ull, 6604757340221519897ull}}, {{2670927036896276486ull, 17277996429397555165ull, 8787877075121192846ull, 8255946675276899871ull}}, {{3975172407273866756ull, 6187061749946084074ull, 12409952199591827385ull, 5159966672048062419ull}}, {{14192337545947109253ull, 12345513205859992996ull, 10900754231062396327ull, 6449958340060078024ull}}, {{17740421932433886566ull, 10820205488897603341ull, 13625942788827995409ull, 8062447925075097530ull}}, {{13393606716984873056ull, 18291843476629471848ull, 13127900261444885034ull, 5039029953171935956ull}}, {{16742008396231091320ull, 13641432308932064002ull, 16409875326806106293ull, 6298787441464919945ull}}, {{11704138458434088341ull, 3216732330882916291ull, 6677286103225469155ull, 7873484301831149932ull}}, {{5009243527307611261ull, 18151358771297680346ull, 13396675851370694029ull, 4920927688644468707ull}}, {{15484926445989289885ull, 8854140408839936720ull, 12134158795785979633ull, 6151159610805585884ull}}, {{909413983777060740ull, 15679361529477308805ull, 15167698494732474541ull, 7688949513506982355ull}}, {{2874226749074356915ull, 12105443965137011955ull, 7173968549994102636ull, 4805593445941863972ull}}, {{17427841491625109855ull, 15131804956421264943ull, 8967460687492628295ull, 6006991807427329965ull}}, {{17173115846103999415ull, 14303070177099193275ull, 15821011877793173273ull, 7508739759284162456ull}}, {{8427354394601305682ull, 2021889833045913941ull, 9888132423620733296ull, 4692962349552601535ull}}, {{15145879011679020007ull, 2527362291307392426ull, 7748479511098528716ull, 5866202936940751919ull}}, {{9708976727743999200ull, 3159202864134240533ull, 5073913370445772991ull, 7332753671175939899ull}}, {{16747906928107386904ull, 17784061635449964378ull, 1730705694629828334ull, 9165942088969924874ull}}, {{15079127848494504719ull, 6503352503728839832ull, 5693377077571030613ull, 5728713805606203046ull}}, {{402165736908579283ull, 12740876648088437695ull, 16340093383818564074ull, 7160892257007753807ull}}, {{14337765226417887816ull, 6702723773255771310ull, 15813430711345817189ull, 8951115321259692259ull}}, {{4349417248083791981ull, 6495045367498551021ull, 7577551185377441791ull, 5594447075787307662ull}}, {{10048457578532127880ull, 3507120690945800872ull, 248566944867026431ull, 6993058844734134578ull}}, {{12560571973165159850ull, 18218958918964414802ull, 9534080717938558846ull, 8741323555917668222ull}}, {{12462043501655612811ull, 6775163305925371347ull, 1347114430284211375ull, 5463327222448542639ull}}, {{10965868358642128109ull, 3857268113979326280ull, 15518951093137427931ull, 6829159028060678298ull}}, {{13707335448302660136ull, 209899124046769946ull, 10175316829567009106ull, 8536448785075847873ull}}, {{13178770673616550489ull, 4742872970956619120ull, 17888788064547850451ull, 5335280490672404920ull}}, {{16473463342020688112ull, 1316905195268385996ull, 3914241006975261448ull, 6669100613340506151ull}}, {{2145085103816308523ull, 1646131494085482496ull, 281115240291688906ull, 8336375766675632689ull}}, {{1340678189885192827ull, 5640518202230814464ull, 11704912071250775326ull, 5210234854172270430ull}}, {{1675847737356491034ull, 16274019789643293888ull, 5407768052208693349ull, 6512793567715338038ull}}, {{2094809671695613792ull, 6507466681771953648ull, 15983082102115642495ull, 8140991959644172547ull}}, {{1309256044809758620ull, 10984695703748552886ull, 7683583304608582607ull, 5088119974777607842ull}}, {{10859942092866974083ull, 9119183611258303203ull, 381107093905952451ull, 6360149968472009803ull}}, {{8963241597656329700ull, 6787293495645491100ull, 14311441922664604276ull, 7950187460590012253ull}}, {{14825398035389981871ull, 13465430471633207745ull, 11250494210879071624ull, 4968867162868757658ull}}, {{4696689488955313626ull, 16831788089541509682ull, 4839745726744063722ull, 6211083953585947073ull}}, {{15094233898048917841ull, 11816363075072111294ull, 10661368176857467557ull, 7763854941982433841ull}}, {{4822210167853185747ull, 9691069931133763511ull, 18192570156604386983ull, 4852409338739021150ull}}, {{1416076691389094279ull, 7502151395489816485ull, 13517340658900707921ull, 6065511673423776438ull}}, {{6381781882663755753ull, 13989375262789658510ull, 7673303786771109093ull, 7581889591779720548ull}}, {{17823671731947011058ull, 11049202548457230520ull, 14019186903586718991ull, 4738680994862325342ull}}, {{3832845591224212206ull, 9199817167144150247ull, 8300611592628622931ull, 5923351243577906678ull}}, {{179370970602877353ull, 6888085440502799905ull, 1152392453931002856ull, 7404189054472383348ull}}, {{11641321902695268106ull, 4305053400314249940ull, 9943617320561652593ull, 4627618159045239592ull}}, {{14551652378369085132ull, 9993002768820200329ull, 12429521650702065741ull, 5784522698806549490ull}}, {{4354507417679192703ull, 17102939479452638316ull, 6313530026522806368ull, 7230653373508186863ull}}, {{5443134272098990879ull, 2931930275606246279ull, 3280226514726120057ull, 9038316716885233579ull}}, {{10319487947702951156ull, 13361671468322373684ull, 18191042636199682699ull, 5648947948053270986ull}}, {{12899359934628688944ull, 12090403316975579201ull, 13515431258394827566ull, 7061184935066588733ull}}, {{2289141863003697468ull, 5889632109364698194ull, 3059231017711370746ull, 8826481168833235917ull}}, {{6042399682804698822ull, 8292706086780324275ull, 4217862395283300668ull, 5516550730520772448ull}}, {{2941313585078485623ull, 10365882608475405344ull, 5272327994104125835ull, 6895688413150965560ull}}, {{3676641981348107029ull, 8345667242166868776ull, 6590409992630157294ull, 8619610516438706950ull}}, {{2297901238342566893ull, 604356007926905081ull, 17954064300676012021ull, 5387256572774191843ull}}, {{7484062566355596521ull, 5367131028336019255ull, 17830894357417627122ull, 6734070715967739804ull}}, {{4743392189517107747ull, 15932285822274799877ull, 3841873873062482286ull, 8417588394959674756ull}}, {{5270463127661886294ull, 5345992620494362019ull, 11624543207518827237ull, 5260992746849796722ull}}, {{1976392891149969963ull, 11294176794045340428ull, 5307306972543758238ull, 6576240933562245903ull}}, {{2470491113937462454ull, 4894348955701899727ull, 2022447697252309894ull, 8220301166952807379ull}}, {{8461585973851995890ull, 16894026152595851041ull, 17404930875278551347ull, 5137688229345504611ull}}, {{15188668485742382766ull, 16505846672317425897ull, 17144477575670801280ull, 6422110286681880764ull}}, {{5150777551895814746ull, 2185564266687230756ull, 2983852895878949985ull, 8027637858352350956ull}}, {{12442608006789660024ull, 12895192712747988982ull, 11088280096779119548ull, 5017273661470219347ull}}, {{6329887971632299222ull, 16118990890934986228ull, 9248664102546511531ull, 6271592076837774184ull}}, {{7912359964540374027ull, 15537052595241344881ull, 11560830128183139414ull, 7839490096047217730ull}}, {{16474440023906203527ull, 5098971853598452646ull, 11837204848541850038ull, 4899681310029511081ull}}, {{11369677993027978601ull, 15597086853852841616ull, 961448005395148835ull, 6124601637536888852ull}}, {{14212097491284973251ull, 14884672548888664116ull, 1201810006743936044ull, 7655752046921111065ull}}, {{18105932968907884090ull, 79548306200639264ull, 12280346300283429788ull, 4784845029325694415ull}}, {{4185672137425303497ull, 99435382750799081ull, 10738746856926899331ull, 5981056286657118019ull}}, {{9843776190209017275ull, 13959352283720662563ull, 8811747552731236259ull, 7476320358321397524ull}}, {{3846517109666941845ull, 6418752168111720150ull, 14730714257311798470ull, 4672700223950873452ull}}, {{14031518423938453114ull, 17246812246994425995ull, 18413392821639748087ull, 5840875279938591815ull}}, {{12927712011495678488ull, 16946829290315644590ull, 18405055008622297205ull, 7301094099923239769ull}}, {{6936267977514822302ull, 7348478557612392026ull, 9171260705495707795ull, 9126367624904049712ull}}, {{8946853504374151843ull, 2286956089294051064ull, 5732037940934817372ull, 5703979765565031070ull}}, {{11183566880467689804ull, 2858695111617563830ull, 16388419463023297523ull, 7129974706956288837ull}}, {{4756086563729836446ull, 17408426944804118500ull, 6650466273496958191ull, 8912468383695361047ull}}, {{12195926139185923587ull, 17797795868143655918ull, 11074070448576680725ull, 5570292739809600654ull}}, {{6021535637127628676ull, 8412186779897406186ull, 4619216023866075099ull, 6962865924762000818ull}}, {{16750291583264311653ull, 5903547456444369828ull, 14997392066687369682ull, 8703582405952501022ull}}, {{1245560202685418975ull, 8301403178705119047ull, 4761684023252218147ull, 5439739003720313139ull}}, {{15392008308638937431ull, 5765067954954010904ull, 1340419010637884780ull, 6799673754650391424ull}}, {{793266312089120172ull, 7206334943692513631ull, 1675523763297355975ull, 8499592193312989280ull}}, {{7413320472696781964ull, 11421488367448902875ull, 1047202352060847484ull, 5312245120820618300ull}}, {{4654964572443589551ull, 14276860459311128594ull, 1309002940076059355ull, 6640306401025772875ull}}, {{15042077752409262746ull, 13234389555711522838ull, 15471311730377237906ull, 8300383001282216093ull}}, {{4789612576828401313ull, 12883179490747089678ull, 11975412840699467643ull, 5187739375801385058ull}}, {{15210387757890277449ull, 11492288345006474193ull, 5745894014019558746ull, 6484674219751731323ull}}, {{5177926642080683099ull, 5141988394403316934ull, 2570681499097060529ull, 8105842774689664154ull}}, {{17071262206582590649ull, 14742957792570542843ull, 6218361955363050734ull, 5066151734181040096ull}}, {{16727391739800850407ull, 9205325203858402746ull, 7772952444203813418ull, 6332689667726300120ull}}, {{11685867637896287201ull, 2283284467968227625ull, 9716190555254766773ull, 7915862084657875150ull}}, {{386138246044097645ull, 3732895801693836218ull, 1460933078606841329ull, 4947413802911171969ull}}, {{9706044844409897864ull, 9277805770544683176ull, 6437852366685939565ull, 6184267253638964961ull}}, {{12132556055512372329ull, 16208943231608241874ull, 12659001476784812360ull, 7730334067048706201ull}}, {{12194533553122620610ull, 10130589519755151171ull, 994346895349425869ull, 4831458791905441376ull}}, {{10631480922975887858ull, 17274922918121326868ull, 1242933619186782336ull, 6039323489881801720ull}}, {{13289351153719859823ull, 3146909573942106969ull, 1553667023983477921ull, 7549154362352252150ull}}, {{1388315443433830534ull, 13496033529782286616ull, 14806099945271837412ull, 4718221476470157593ull}}, {{1735394304292288167ull, 16870041912227858270ull, 4672566876307633053ull, 5897776845587696992ull}}, {{11392614917220136016ull, 7252494335002659125ull, 5840708595384541317ull, 7372221056984621240ull}}, {{405710591243006308ull, 13677303937180711811ull, 7300885744230676646ull, 9215276321230776550ull}}, {{16394470184022736607ull, 3936628942310556977ull, 18398111645426336616ull, 5759547700769235343ull}}, {{6658029674746257046ull, 4920786177888196222ull, 18385953538355532866ull, 7199434625961544179ull}}, {{17545909130287597116ull, 15374354759215021085ull, 18370755904517028178ull, 8999293282451930224ull}}, {{13272036215643442150ull, 14220657742936776082ull, 11481722440323142611ull, 5624558301532456390ull}}, {{7366673232699526879ull, 13164136160243582199ull, 5128781013549152456ull, 7030697876915570488ull}}, {{4596655522447020695ull, 16455170200304477749ull, 6410976266936440570ull, 8788372346144463110ull}}, {{5178752710743081886ull, 14896167393617686497ull, 17841918222117439068ull, 5492732716340289443ull}}, {{11085126906856240262ull, 173465168312556505ull, 17690711759219410932ull, 6865915895425361804ull}}, {{21350578288136615ull, 216831460390695632ull, 3666645625314712049ull, 8582394869281702256ull}}, {{13344111430085385ull, 11664734708812654530ull, 2291653515821695030ull, 5363996793301063910ull}}, {{9240052176142382539ull, 5357546349161042354ull, 12087938931631894596ull, 6704995991626329887ull}}, {{2326693183323202365ull, 6696932936451302943ull, 10498237646112480341ull, 8381244989532912359ull}}, {{8371712267218083334ull, 6491426094495758291ull, 13478927556461382069ull, 5238278118458070224ull}}, {{5852954315595216264ull, 12725968636547085768ull, 16848659445576727586ull, 6547847648072587780ull}}, {{7316192894494020330ull, 6684088758829081402ull, 2614080233261357867ull, 8184809560090734726ull}}, {{9184306577486150610ull, 1871712465054481924ull, 15468858201070512379ull, 5115505975056709203ull}}, {{11480383221857688263ull, 16174698636600266117ull, 14724386732910752569ull, 6394382468820886504ull}}, {{515420972039946616ull, 6383315240468168935ull, 18405483416138440712ull, 7992978086026108130ull}}, {{7239667135166048491ull, 3989572025292605584ull, 16115113153513913349ull, 4995611303766317581ull}}, {{9049583918957560614ull, 9598651050043144884ull, 6308833386610227974ull, 6244514129707896977ull}}, {{11311979898696950767ull, 2774941775699155297ull, 12497727751690172872ull, 7805642662134871221ull}}, {{152458409044512374ull, 1734338609811972061ull, 10116922854020051997ull, 4878526663834294513ull}}, {{4802259029733028371ull, 6779609280692352980ull, 17257839585952452900ull, 6098158329792868141ull}}, {{6002823787166285464ull, 8474511600865441225ull, 7737241427158402413ull, 7622697912241085177ull}}, {{15280979913047398175ull, 7602412759754594717ull, 16364990938042471268ull, 4764186195150678235ull}}, {{5266166836027084007ull, 9503015949693243397ull, 15844552654125701181ull, 5955232743938347794ull}}, {{11194394563461242912ull, 16490455955543942150ull, 10582318780802350668ull, 7444040929922934743ull}}, {{2384810583735888916ull, 1083162935360188036ull, 13531478265642551024ull, 4652525581201834214ull}}, {{2981013229669861145ull, 1353953669200235045ull, 7690975795198412972ull, 5815656976502292768ull}}, {{8337952555514714336ull, 1692442086500293806ull, 9613719743998016215ull, 7269571220627865960ull}}, {{1199068657538617111ull, 15950610663407530970ull, 12017149679997520268ull, 9086964025784832450ull}}, {{5361103929389023599ull, 745759627774931048ull, 12122404568425838072ull, 5679352516115520281ull}}, {{6701379911736279498ull, 932199534718663810ull, 1317947655250133878ull, 7099190645144400352ull}}, {{17600096926525125181ull, 10388621455253105570ull, 1647434569062667347ull, 8873988306430500440ull}}, {{15611746597505591142ull, 4187045400319497029ull, 1029646605664167092ull, 5546242691519062775ull}}, {{5679625191599825216ull, 5233806750399371287ull, 15122116312362372577ull, 6932803364398828468ull}}, {{2487845471072393615ull, 11153944456426602013ull, 455901316743414105ull, 8666004205498535586ull}}, {{3860746428633939962ull, 53686257625544402ull, 4896624341392021720ull, 5416252628436584741ull}}, {{14049305072647200760ull, 67107822031930502ull, 10732466445167415054ull, 6770315785545730926ull}}, {{8338259303954225142ull, 9307256814394688936ull, 4192211019604493009ull, 8462894731932163658ull}}, {{5211412064971390714ull, 17346250555065150345ull, 7231817905680196034ull, 5289309207457602286ull}}, {{11125951099641626296ull, 12459441156976662123ull, 18263144418955020851ull, 6611636509322002857ull}}, {{9295752856124644966ull, 10962615427793439750ull, 8993872468411612352ull, 8264545636652503572ull}}, {{1198159516650515200ull, 6851634642370899844ull, 14844542329612033528ull, 5165341022907814732ull}}, {{1497699395813144000ull, 8564543302963624805ull, 108933838305490294ull, 6456676278634768416ull}}, {{6483810263193817904ull, 1482307091849755198ull, 136167297881862868ull, 8070845348293460520ull}}, {{17887439469778299902ull, 10149813969260872806ull, 85104561176164292ull, 5044278342683412825ull}}, {{13135927300368099070ull, 12687267461576091008ull, 4718066719897593269ull, 6305347928354266031ull}}, {{16419909125460123837ull, 2024026271687950048ull, 1285897381444603683ull, 7881684910442832539ull}}, {{10262443203412577398ull, 17405917484300826444ull, 16944586927898734965ull, 4926053069026770336ull}}, {{12828054004265721748ull, 7922338800093869343ull, 2733989586163867091ull, 6157566336283462921ull}}, {{11423381486904764280ull, 5291237481689948775ull, 8029173001132221768ull, 7696957920354328651ull}}, {{14057142456956559531ull, 3307023426056217984ull, 2712390116493944653ull, 4810598700221455407ull}}, {{17571428071195699414ull, 8745465300997660384ull, 17225545700899594528ull, 6013248375276819258ull}}, {{3517541015285072652ull, 10931831626247075481ull, 12308560089269717352ull, 7516560469096024073ull}}, {{13727678180621640167ull, 6832394766404422175ull, 775321028152491489ull, 4697850293185015046ull}}, {{12547911707349662305ull, 13152179476432915623ull, 10192523322045390169ull, 5872312866481268807ull}}, {{11073203615759689977ull, 2605166290258980817ull, 8128968134129349808ull, 7340391083101586009ull}}, {{6446464417448760ull, 3256457862823726022ull, 14772896186089075164ull, 9175488853876982511ull}}, {{13839087095543069187ull, 11258658201119604571ull, 16150589143946753833ull, 5734680533673114069ull}}, {{12687172851001448579ull, 238264696117342002ull, 6353178374651278580ull, 7168350667091392587ull}}, {{6635594026897034916ull, 297830870146677503ull, 3329786949886710321ull, 8960438333864240734ull}}, {{11064775294451728679ull, 11715359339910143199ull, 15916174898961357662ull, 5600273958665150458ull}}, {{9219283099637272944ull, 5420827138032903191ull, 10671846586846921270ull, 7000342448331438073ull}}, {{6912417856119203276ull, 15999405959395904797ull, 17951494251986039491ull, 8750428060414297591ull}}, {{6626104169288196000ull, 7693785715408746546ull, 18137212935132356538ull, 5469017537758935994ull}}, {{17506002248465020808ull, 393860107406157374ull, 13448144132060669865ull, 6836271922198669993ull}}, {{12659130773726500202ull, 5104011152685084622ull, 2975122109793673619ull, 8545339902748337492ull}}, {{3300270715151674722ull, 884163961214483937ull, 11082823355475821820ull, 5340837439217710932ull}}, {{8737024412366981307ull, 1105204951518104921ull, 13853529194344777275ull, 6676046799022138665ull}}, {{15532966533886114537ull, 15216564244679794863ull, 3481853437648807881ull, 8345058498777673332ull}}, {{16625633111319903442ull, 2592823625283789933ull, 11399530435385280734ull, 5215661561736045832ull}}, {{6946983333867715590ull, 12464401568459513225ull, 14249413044231600917ull, 6519576952170057290ull}}, {{13295415185762032392ull, 1745443905292227819ull, 8588394268434725339ull, 8149471190212571613ull}}, {{6003791481887576293ull, 17231803505303500051ull, 7673589426985397288ull, 5093419493882857258ull}}, {{2893053333932082462ull, 3093010307919823448ull, 368614746876970803ull, 6366774367353571573ull}}, {{3616316667415103078ull, 17701320940181943022ull, 5072454452023601407ull, 7958467959191964466ull}}, {{16095255972416603136ull, 17980854615254796244ull, 7781970050942138783ull, 4974042474494977791ull}}, {{1672325891811202303ull, 17864382250641107402ull, 5115776545250285575ull, 6217553093118722239ull}}, {{11313779401618778687ull, 17718791794873996348ull, 1783034663135469065ull, 7771941366398402799ull}}, {{16294484162866512488ull, 4156715844155165861ull, 8031925692100750022ull, 4857463353999001749ull}}, {{6533047148300976897ull, 14419266842048733135ull, 14651593133553325431ull, 6071829192498752186ull}}, {{3554622916948833218ull, 13412397534133528515ull, 9091119380086880981ull, 7589786490623440233ull}}, {{18362540387588878425ull, 10688591468047149273ull, 17211164658622770373ull, 4743616556639650145ull}}, {{9118117429203934319ull, 17972425353486324496ull, 7678897767996299254ull, 5929520695799562682ull}}, {{11397646786504917899ull, 13242159655003129812ull, 375250173140598260ull, 7411900869749453353ull}}, {{16346901278420349495ull, 17499721821231731940ull, 11763746404281343672ull, 4632438043593408345ull}}, {{1986882524315885253ull, 3427908202830113310ull, 869624950069515879ull, 5790547554491760432ull}}, {{11706975192249632374ull, 18119943308819805349ull, 1087031187586894848ull, 7238184443114700540ull}}, {{798660935029876755ull, 4203185062315205071ull, 1358788984483618561ull, 9047730553893375675ull}}, {{7416692112034754828ull, 14156205710015472929ull, 16990144179798119264ull, 5654831596183359796ull}}, {{13882551158470831439ull, 17695257137519341161ull, 2790936151038097464ull, 7068539495229199746ull}}, {{3518130892806375587ull, 3672327348189624836ull, 12712042225652397639ull, 8835674369036499682ull}}, {{11422203844858760550ull, 9212733620259597378ull, 12556712409460136428ull, 5522296480647812301ull}}, {{5054382769218674879ull, 11515917025324496723ull, 1860832456543006823ull, 6902870600809765377ull}}, {{1706292443095955695ull, 9783210263228233000ull, 6937726589106146433ull, 8628588251012206721ull}}, {{1066432776934972310ull, 17643721460586115385ull, 15865294164259811280ull, 5392867656882629200ull}}, {{5944726989596103291ull, 3607907752023092615ull, 1384873631615212485ull, 6741084571103286501ull}}, {{2819222718567741209ull, 9121570708456253673ull, 6342778057946403510ull, 8426355713879108126ull}}, {{13291229245173308016ull, 1089295674357770641ull, 17799294341498665906ull, 5266472321174442578ull}}, {{2778978501184471308ull, 10584991629801989110ull, 13025745890018556574ull, 6583090401468053223ull}}, {{12697095163335364943ull, 4007867500397710579ull, 11670496344095807814ull, 8228863001835066529ull}}, {{5629841467870909137ull, 16339975243030732824ull, 376531187418798027ull, 5143039376146916581ull}}, {{7037301834838636422ull, 15813283035361028126ull, 5082350002700885438ull, 6428799220183645726ull}}, {{18019999330403071335ull, 10543231757346509349ull, 15576309540230882606ull, 8035999025229557157ull}}, {{13568342590715613537ull, 1977833829914180439ull, 12041036471857995581ull, 5022499390768473223ull}}, {{12348742219967129017ull, 7083978305820113453ull, 10439609571395106572ull, 6278124238460591529ull}}, {{1600869719676747559ull, 8854972882275141817ull, 17661197982671271119ull, 7847655298075739411ull}}, {{12529758620866436984ull, 12451887079063045491ull, 8732405729955850497ull, 4904784561297337132ull}}, {{11050512257655658326ull, 1729800793546643152ull, 10915507162444813122ull, 6130980701621671415ull}}, {{13813140322069572908ull, 11385623028788079748ull, 9032697934628628498ull, 7663725877027089269ull}}, {{17856584738148258876ull, 11727700411419937746ull, 7951279218356586763ull, 4789828673141930793ull}}, {{13097358885830547786ull, 10047939495847534279ull, 14550785041373121358ull, 5987285841427413491ull}}, {{11760012588860796829ull, 3336552332954642041ull, 13576795283289013794ull, 7484107301784266864ull}}, {{432478840396916162ull, 6697031226524039180ull, 8485497052055633621ull, 4677567063615166790ull}}, {{540598550496145203ull, 12982975051582436879ull, 1383499278214766218ull, 5846958829518958488ull}}, {{14510806243402345215ull, 7005346777623270290ull, 1729374097768457773ull, 7308698536898698110ull}}, {{8915135767398155711ull, 13368369490456475767ull, 11385089659065348024ull, 9135873171123372637ull}}, {{12489488882264929175ull, 8355230931535297354ull, 9421524046129536467ull, 5709920731952107898ull}}, {{6388489065976385661ull, 5832352645991733789ull, 2553533020807144776ull, 7137400914940134873ull}}, {{12597297350897869980ull, 7290440807489667236ull, 7803602294436318874ull, 8921751143675168591ull}}, {{17096682881165944546ull, 9168211523108429926ull, 11794780461663781152ull, 5576094464796980369ull}}, {{12147481564602654874ull, 11460264403885537408ull, 908417521797562728ull, 6970118080996225462ull}}, {{15184351955753318593ull, 14325330504856921760ull, 10358893939101729218ull, 8712647601245281827ull}}, {{9490219972345824121ull, 13565017583962964004ull, 4168465702724886809ull, 5445404750778301142ull}}, {{11862774965432280151ull, 3121213924671541293ull, 14433954165260884320ull, 6806755938472876427ull}}, {{993410651508186476ull, 3901517405839426617ull, 13430756688148717496ull, 8508444923091095534ull}}, {{12150096703261086308ull, 2438448378649641635ull, 3782536911665560531ull, 5317778076931934709ull}}, {{10575934860648969981ull, 16883118528594215756ull, 9339857158009338567ull, 6647222596164918386ull}}, {{13219918575811212476ull, 16492212142315381791ull, 2451449410656897401ull, 8309028245206147983ull}}, {{15179978137523089653ull, 3390103561306031763ull, 8449684909301642732ull, 5193142653253842489ull}}, {{14363286653476474163ull, 4237629451632539704ull, 15173792155054441319ull, 6491428316567303111ull}}, {{17954108316845592703ull, 685350796113286726ull, 14355554175390663745ull, 8114285395709128889ull}}, {{6609631679601107536ull, 11957559293639273964ull, 2054692331978082984ull, 5071428372318205556ull}}, {{8262039599501384419ull, 14946949117049092455ull, 2568365414972603730ull, 6339285465397756945ull}}, {{5715863480949342620ull, 9460314359456589761ull, 7822142787143142567ull, 7924106831747196181ull}}, {{15101629721661808898ull, 12830225502301450456ull, 7194682251178158056ull, 4952566769841997613ull}}, {{430293078367709506ull, 16037781877876813071ull, 13605038832400085474ull, 6190708462302497016ull}}, {{14372924403241800595ull, 10823855310491240530ull, 17006298540500106843ull, 7738385577878121270ull}}, {{13594763770453513276ull, 4459066559843331379ull, 6017250569385178873ull, 4836490986173825794ull}}, {{12381768694639503691ull, 10185519218231552128ull, 16744935248586249399ull, 6045613732717282242ull}}, {{15477210868299379613ull, 8120213004362052256ull, 11707797023878035941ull, 7557017165896602803ull}}, {{9673256792687112258ull, 7380976136939976612ull, 5011530130710078511ull, 4723135728685376752ull}}, {{12091570990858890323ull, 4614534152747582861ull, 6264412663387598139ull, 5903919660856720940ull}}, {{1279405683291449191ull, 1156481672507090673ull, 7830515829234497674ull, 7379899576070901175ull}}, {{12328843598125625505ull, 5334487063744319574ull, 11811601420912642902ull, 4612437235044313234ull}}, {{6187682460802256073ull, 15891480866535175276ull, 5541129739286027819ull, 5765546543805391543ull}}, {{7734603076002820091ull, 15252665064741581191ull, 2314726155680146870ull, 7206933179756739429ull}}, {{5056567826576137210ull, 9842459294072200681ull, 7505093713027571492ull, 9008666474695924286ull}}, {{14689569937678555516ull, 15374909095649901233ull, 78997552214844278ull, 5630416546684952679ull}}, {{4526904366816030683ull, 9995264332707600734ull, 13933804995550719060ull, 7038020683356190848ull}}, {{14882002495374814162ull, 12494080415884500917ull, 17417256244438398825ull, 8797525854195238560ull}}, {{11607094568822952803ull, 891271232286731217ull, 10885785152773999266ull, 5498453658872024100ull}}, {{673810155746527292ull, 10337461077213189830ull, 13607231440967499082ull, 6873067073590030125ull}}, {{10065634731537934923ull, 3698454309661711479ull, 3173981245927210141ull, 8591333841987537657ull}}, {{13208550734852291183ull, 4617376952752263626ull, 13512953324772976098ull, 5369583651242211035ull}}, {{7287316381710588171ull, 14995093227795105341ull, 12279505637538832218ull, 6711979564052763794ull}}, {{13720831495565623117ull, 9520494497889105868ull, 6126010010068764465ull, 8389974455065954743ull}}, {{17798891721583290256ull, 17479524107249160927ull, 10746285283934059646ull, 5243734034416221714ull}}, {{17636928633551724916ull, 12626033097206675351ull, 4209484568062798750ull, 6554667543020277143ull}}, {{17434474773512268241ull, 6559169334653568381ull, 650169691651110534ull, 8193334428775346429ull}}, {{13202389742658861603ull, 17934538889440643950ull, 2712199066495638035ull, 5120834017984591518ull}}, {{7279615141468801196ull, 17806487593373417034ull, 12613620869974323352ull, 6401042522480739397ull}}, {{18322890963690777303ull, 3811365418007219676ull, 1931968032185740479ull, 8001303153100924247ull}}, {{2228434815451960006ull, 9299632413895594154ull, 8125009047757169655ull, 5000814470688077654ull}}, {{12008915556169725816ull, 7012854498942104788ull, 932889272841686261ull, 6251018088360097068ull}}, {{15011144445212157269ull, 13377754142105018889ull, 1166111591052107826ull, 7813772610450121335ull}}, {{2464436250616516438ull, 12972782357243024710ull, 7646348772048649247ull, 4883607881531325834ull}}, {{12303917350125421355ull, 11604291928126392983ull, 334563928206035751ull, 6104509851914157293ull}}, {{10768210669229388789ull, 9893678891730603325ull, 5029890928684932593ull, 7630637314892696616ull}}, {{9035974677482061946ull, 17712764353400096838ull, 3143681830428082870ull, 4769148321807935385ull}}, {{2071596309997801624ull, 12917583404895345240ull, 8541288306462491492ull, 5961435402259919231ull}}, {{2589495387497252030ull, 16146979256119181550ull, 6064924364650726461ull, 7451794252824899039ull}}, {{15453492672467946231ull, 12397705044288182420ull, 10708106755547785894ull, 4657371408015561899ull}}, {{870121766875381172ull, 6273759268505452218ull, 8773447426007344464ull, 5821714260019452374ull}}, {{10311024245449002273ull, 7842199085631815272ull, 1743437245654404772ull, 7277142825024315468ull}}, {{12888780306811252842ull, 9802748857039769090ull, 2179296557068005965ull, 9096428531280394335ull}}, {{12667173710184420930ull, 8432561044863549633ull, 8279589375808585584ull, 5685267832050246459ull}}, {{1998909082448362451ull, 10540701306079437042ull, 5737800701333344076ull, 7106584790062808074ull}}, {{11722008389915228871ull, 13175876632599296302ull, 16395622913521455903ull, 8883230987578510092ull}}, {{2714569225269630141ull, 15152451923015642045ull, 1023892284096134131ull, 5552019367236568808ull}}, {{8004897550014425580ull, 14328878885342164652ull, 1279865355120167664ull, 6940024209045711010ull}}, {{10006121937518031974ull, 17911098606677705815ull, 10823203730754985388ull, 8675030261307138762ull}}, {{13171355238589851840ull, 1971064592318790326ull, 11376188350149253772ull, 5421893913316961726ull}}, {{7240822011382538992ull, 2463830740398487908ull, 4996863400831791407ull, 6777367391646202158ull}}, {{9051027514228173740ull, 16914846480780273597ull, 15469451287894515066ull, 8471709239557752697ull}}, {{7962735205606302540ull, 15183465068915058902ull, 2750878027292990060ull, 5294818274723595436ull}}, {{730046970153102366ull, 532587262434272012ull, 3438597534116237576ull, 6618522843404494295ull}}, {{912558712691377958ull, 665734078042840015ull, 18133304972927460682ull, 8273153554255617868ull}}, {{7487878223073193080ull, 5027769817204162913ull, 2109943571224887118ull, 5170720971409761168ull}}, {{13971533797268879254ull, 15508084308359979449ull, 2637429464031108897ull, 6463401214262201460ull}}, {{3629359191303935355ull, 5550047330167810600ull, 3296786830038886122ull, 8079251517827751825ull}}, {{2268349494564959597ull, 8080465599782269529ull, 13589706814842773586ull, 5049532198642344890ull}}, {{7447122886633587400ull, 877209962873061103ull, 7763761481698691175ull, 6311915248302931113ull}}, {{4697217589864596346ull, 14931570508873490091ull, 14316387870550751872ull, 7889894060378663891ull}}, {{629917984451678765ull, 9332231568045931307ull, 6641899409880525968ull, 4931183787736664932ull}}, {{14622455535846762168ull, 11665289460057414133ull, 8302374262350657460ull, 6163979734670831165ull}}, {{4443011364526288997ull, 14581611825071767667ull, 14989653846365709729ull, 7704974668338538956ull}}, {{471039093615236672ull, 2195978363028772936ull, 145161617123792773ull, 4815609167711586848ull}}, {{588798867019045839ull, 7356658972213354074ull, 181452021404740966ull, 6019511459639483560ull}}, {{9959370620628583107ull, 18419195752121468400ull, 226815026755926207ull, 7524389324549354450ull}}, {{6224606637892864442ull, 18429526372716999606ull, 4753445410149841783ull, 4702743327843346531ull}}, {{17004130334220856360ull, 18425221947468861603ull, 1330120744259914325ull, 5878429159804183164ull}}, {{16643476899348682546ull, 9196469379053913292ull, 1662650930324892907ull, 7348036449755228955ull}}, {{2357602050476301567ull, 6883900705390003712ull, 15913371718188279846ull, 9185045562194036193ull}}, {{1473501281547688480ull, 18137495996150916032ull, 3028328296226593047ull, 5740653476371272621ull}}, {{1841876601934610599ull, 18060183976761257136ull, 8397096388710629213ull, 7175816845464090776ull}}, {{2302345752418263249ull, 8740171915669407708ull, 10496370485888286517ull, 8969771056830113470ull}}, {{10662338132116190339ull, 7768450456507073769ull, 1948545535252791169ull, 5606106910518820919ull}}, {{17939608683572625827ull, 14322249089061230115ull, 16270739974348152673ull, 7007633638148526148ull}}, {{17812824836038394380ull, 4067753306044373932ull, 1891680894225639226ull, 8759542047685657686ull}}, {{1909643485669220680ull, 7154031834705121612ull, 15017358614173188228ull, 5474713779803536053ull}}, {{2387054357086525850ull, 8942539793381402015ull, 4936640212434321573ull, 6843392224754420067ull}}, {{16818876001640321024ull, 15789860760154140422ull, 1559114247115514062ull, 8554240280943025084ull}}, {{5900111482597812736ull, 5256976956668949860ull, 10197818441301972097ull, 5346400175589390677ull}}, {{7375139353247265920ull, 11182907214263575229ull, 17358959070054853025ull, 6683000219486738346ull}}, {{13830610209986470304ull, 143575962547305324ull, 12475326800713790474ull, 8353750274358422933ull}}, {{17867503418096319748ull, 4701420995019453731ull, 10102922259659812998ull, 5221093921474014333ull}}, {{17722693254193011781ull, 15100148280629092972ull, 17240338843002154151ull, 6526367401842517916ull}}, {{3706622494031713110ull, 14263499332358978312ull, 3103679480043141073ull, 8157959252303147396ull}}, {{2316639058769820694ull, 1997158055083279589ull, 11163171711881738979ull, 5098724532689467122ull}}, {{7507484841889663771ull, 16331505624136263198ull, 4730592602997397915ull, 6373405665861833903ull}}, {{160984015507303906ull, 15802696011742941094ull, 1301554735319359490ull, 7966757082327292379ull}}, {{13935673064974228654ull, 14488371025766726087ull, 16954372774070457345ull, 4979223176454557736ull}}, {{12807905312790397913ull, 4275405726926243897ull, 2746221893878520066ull, 6224028970568197171ull}}, {{2174823585705833679ull, 14567629195512580680ull, 17267835422630313794ull, 7780036213210246463ull}}, {{1359264741066146049ull, 13716454265622750829ull, 17709926166785027977ull, 4862522633256404039ull}}, {{6310766944760070466ull, 3310509776746274824ull, 17525721690053897068ull, 6078153291570505049ull}}, {{7888458680950088082ull, 4138137220932843530ull, 8072094057285207623ull, 7597691614463131312ull}}, {{9541972694021192955ull, 9503864790724109062ull, 5045058785803254764ull, 4748557259039457070ull}}, {{2704093830671715386ull, 11879830988405136328ull, 15529695519108844263ull, 5935696573799321337ull}}, {{3380117288339644233ull, 10238102717079032506ull, 5577061343603891617ull, 7419620717249151672ull}}, {{6724259323639665550ull, 17928029244242865076ull, 3485663339752432260ull, 4637262948280719795ull}}, {{8405324154549581937ull, 3963292481594029729ull, 18192137229972704038ull, 5796578685350899743ull}}, {{15118341211614365325ull, 14177487638847312969ull, 18128485519038492143ull, 7245723356688624679ull}}, {{5062868459235792944ull, 13110173530131753308ull, 18048920880370727275ull, 9057154195860780849ull}}, {{12387664823877146398ull, 5888015447118651865ull, 4363046522590622691ull, 5660721372412988031ull}}, {{1649522974564269286ull, 2748333290470926928ull, 842122134810890460ull, 7075901715516235039ull}}, {{2061903718205336607ull, 3435416613088658660ull, 14887710723795776787ull, 8844877144395293798ull}}, {{10512061860733111187ull, 18288036447676269326ull, 4693133183944972587ull, 5528048215247058624ull}}, {{3916705289061613176ull, 18248359541167948754ull, 5866416479931215734ull, 6910060269058823280ull}}, {{14119253648181792278ull, 13587077389605160134ull, 7333020599914019668ull, 8637575336323529100ull}}, {{4212847511686232270ull, 17715295405358000892ull, 13806509911801038100ull, 5398484585202205687ull}}, {{5266059389607790337ull, 3697375182987949499ull, 12646451371323909722ull, 6748105731502757109ull}}, {{1970888218582350018ull, 13845091015589712682ull, 1973006158872723440ull, 8435132164378446387ull}}, {{5843491155041356665ull, 8653181884743570426ull, 17374029913791309814ull, 5271957602736528991ull}}, {{16527735980656471639ull, 1593105319074687224ull, 17105851373811749364ull, 6589947003420661239ull}}, {{2212925902111037933ull, 1991381648843359031ull, 16770628198837298801ull, 8237433754275826549ull}}, {{8300607716460480564ull, 12773828576595569154ull, 12787485633487005702ull, 5148396096422391593ull}}, {{1152387608720824897ull, 6743913683889685635ull, 2149298986576593416ull, 6435495120527989492ull}}, {{15275542566183194834ull, 8429892104862107043ull, 2686623733220741770ull, 8044368900659986865ull}}, {{7241371094650802819ull, 9880368583966204806ull, 13208354879331433366ull, 5027730562912491790ull}}, {{18275085905168279332ull, 3127088693102980199ull, 7287071562309515900ull, 6284663203640614738ull}}, {{18232171363032961261ull, 3908860866378725249ull, 18332211489741670683ull, 7855829004550768422ull}}, {{4477578074254518932ull, 137195032273009329ull, 6845946162661156273ull, 4909893127844230264ull}}, {{10208658611245536569ull, 4783179808768649565ull, 8557432703326445341ull, 6137366409805287830ull}}, {{17372509282484308615ull, 10590660779388199860ull, 1473418842303280868ull, 7671708012256609788ull}}, {{1634446264697917077ull, 15842535023972400721ull, 10144258813294326350ull, 4794817507660381117ull}}, {{6654743849299784250ull, 10579796743110725093ull, 17292009535045295842ull, 5993521884575476396ull}}, {{12930115830052118216ull, 4001373892033630558ull, 3168267845097068187ull, 7491902355719345496ull}}, {{3469636375355185981ull, 195015673307325147ull, 1980167403185667617ull, 4682438972324590935ull}}, {{18172103524476146188ull, 4855455610061544337ull, 16310267309264248233ull, 5853048715405738668ull}}, {{8880071350313019023ull, 10681005531004318326ull, 1941090062870758675ull, 7316310894257173336ull}}, {{1876717151036497971ull, 8739570895328010004ull, 2426362578588448344ull, 9145388617821466670ull}}, {{10396320256252587040ull, 5462231809580006252ull, 15351534666899943927ull, 5715867886138416668ull}}, {{12995400320315733800ull, 2216103743547619911ull, 742674259915378293ull, 7144834857673020836ull}}, {{11632564381967279346ull, 7381815697861912793ull, 928342824894222866ull, 8931043572091276045ull}}, {{352823711088467735ull, 9225320829591083400ull, 2886057274772583243ull, 5581902232557047528ull}}, {{441029638860584669ull, 6919965018561466346ull, 3607571593465729054ull, 6977377790696309410ull}}, {{9774659085430506644ull, 17873328310056608740ull, 13732836528686937125ull, 8721722238370386762ull}}, {{15332533965248842461ull, 13476673202999074414ull, 13194708848856723607ull, 5451076398981491726ull}}, {{9942295419706277268ull, 12234155485321455114ull, 7270014024216128701ull, 6813845498726864658ull}}, {{3204497237778070777ull, 1457636301369655181ull, 18310889567124936685ull, 8517306873408580822ull}}, {{4308653782824988188ull, 3216865697569728440ull, 6832619961025697524ull, 5323316795880363014ull}}, {{5385817228531235234ull, 4021082121962160550ull, 17764146988136897713ull, 6654145994850453767ull}}, {{15955643572518819851ull, 9638038670880088591ull, 17593497716743734237ull, 8317682493563067209ull}}, {{16889806260465344263ull, 8329617178513749321ull, 4078407045323752042ull, 5198551558476917006ull}}, {{7277199770299516617ull, 1188649436287410844ull, 14321380843509465861ull, 6498189448096146257ull}}, {{9096499712874395771ull, 6097497813786651459ull, 4066667999104668614ull, 8122736810120182822ull}}, {{3379469311332803405ull, 17645994188898820874ull, 16376725554722581595ull, 5076710506325114263ull}}, {{13447708676020780064ull, 17445806717696138188ull, 15859220924975839090ull, 6345888132906392829ull}}, {{16809635845025975080ull, 12583886360265396927ull, 5988968100937635151ull, 7932360166132991037ull}}, {{17423551430782316281ull, 14782458002806954935ull, 6048948072299715921ull, 4957725103833119398ull}}, {{17167753270050507447ull, 4643014448226529957ull, 16784557127229420710ull, 6197156379791399247ull}}, {{7624633532280970597ull, 15027140097137938255ull, 16369010390609387983ull, 7746445474739249059ull}}, {{11682924985316688479ull, 16309491588352293265ull, 7924788484917173537ull, 4841528421712030662ull}}, {{768598176363696887ull, 6551806430158202870ull, 682613569291691114ull, 6051910527140038328ull}}, {{10184119757309396917ull, 17413130074552529395ull, 853266961614613892ull, 7564888158925047910ull}}, {{4059231839104679121ull, 1659834259740555064ull, 14368349906291297395ull, 4728055099328154943ull}}, {{5074039798880848901ull, 15909850879957857542ull, 13348751364436733839ull, 5910068874160193679ull}}, {{15565921785455836934ull, 15275627581519934023ull, 12074253187118529395ull, 7387586092700242099ull}}, {{16646230143550979940ull, 7241424229236264812ull, 5240565232735386920ull, 4617241307937651312ull}}, {{2361043605729173309ull, 9051780286545331016ull, 6550706540919233650ull, 5771551634922064140ull}}, {{2951304507161466636ull, 2091353321326887962ull, 8188383176149042063ull, 7214439543652580175ull}}, {{12912502670806609103ull, 16449249706940773664ull, 5623792951758914674ull, 9018049429565725219ull}}, {{8070314169254130690ull, 14892467085265371444ull, 1209027585635627719ull, 5636280893478578262ull}}, {{10087892711567663362ull, 14003897838154326401ull, 10734656518899310457ull, 7045351116848222827ull}}, {{17221551907886967106ull, 3669814242410744289ull, 8806634630196750168ull, 8806688896060278534ull}}, {{3845940914788272586ull, 2293633901506715181ull, 892460625445580951ull, 5504180560037674084ull}}, {{9419112161912728636ull, 16702100432165557688ull, 1115575781806976188ull, 6880225700047092605ull}}, {{11773890202390910795ull, 2430881466497395494ull, 6006155745686108140ull, 8600282125058865756ull}}, {{2746995358066931343ull, 10742672953415647992ull, 12977219377908593395ull, 5375176328161791097ull}}, {{3433744197583664178ull, 8816655173342172086ull, 2386466167103578032ull, 6718970410202238872ull}}, {{13515552283834356031ull, 11020818966677715107ull, 2983082708879472540ull, 8398713012752798590ull}}, {{6141377168182778568ull, 16111383891028347750ull, 15699484748331834049ull, 5249195632970499118ull}}, {{16900093497083249017ull, 6304171808503270975ull, 10400983898560016754ull, 6561494541213123898ull}}, {{16513430852926673367ull, 17103586797483864527ull, 3777857836345245134ull, 8201868176516404873ull}}, {{17238423310720252711ull, 6078055730000027425ull, 13890376193784247969ull, 5126167610322753045ull}}, {{7712971083118152176ull, 12209255680927422186ull, 3527912186948146249ull, 6407709512903441307ull}}, {{417841817042914412ull, 1426511545877114021ull, 18244948288967346524ull, 8009636891129301633ull}}, {{2566994144865515460ull, 10114941753027972071ull, 4485563652963509721ull, 5006023056955813521ull}}, {{17043800736364058037ull, 17255363209712352992ull, 10218640584631775055ull, 6257528821194766901ull}}, {{2858006846745520930ull, 16957517993713053337ull, 17384986749217106723ull, 7821911026493458626ull}}, {{13315469325284420341ull, 8292605736856964383ull, 15477302736688079606ull, 4888694391558411641ull}}, {{12032650638178137523ull, 1142385134216429671ull, 5511570365577935796ull, 6110867989448014552ull}}, {{10429127279295283999ull, 1427981417770537089ull, 6889462956972419745ull, 7638584986810018190ull}}, {{18047419595628022260ull, 12421703432175055440ull, 18140972403389926052ull, 4774115616756261368ull}}, {{4112530420825476208ull, 15527129290218819301ull, 4229471430527855949ull, 5967644520945326711ull}}, {{9752349044459233164ull, 5573853557491360414ull, 675153269732432033ull, 7459555651181658389ull}}, {{1483532134359632824ull, 15012873519500570019ull, 2727813802796463972ull, 4662222281988536493ull}}, {{15689473223231704742ull, 319347825666160907ull, 8021453271922967870ull, 5827777852485670616ull}}, {{15000155510612243023ull, 9622556818937476942ull, 10026816589903709837ull, 7284722315607088270ull}}, {{9526822351410527971ull, 16639882042099234082ull, 3310148700524861488ull, 9105902894508860338ull}}, {{10565949988058967886ull, 10399926276312021301ull, 6680528956255426334ull, 5691189309068037711ull}}, {{17819123503501097761ull, 3776535808535250818ull, 3738975176891895014ull, 7113986636335047139ull}}, {{13050532342521596393ull, 13944041797523839331ull, 62032952687480863ull, 8892483295418808924ull}}, {{5850739704862303794ull, 15632555151093481438ull, 9262142632284451347ull, 5557802059636755577ull}}, {{16536796667932655551ull, 14929007920439463893ull, 16189364308782952088ull, 6947252574545944471ull}}, {{6835937779633655726ull, 214515826839778251ull, 15625019367551302207ull, 8684065718182430589ull}}, {{1966618103057340877ull, 7051601419415943263ull, 12071480113933257831ull, 5427541073864019118ull}}, {{16293330684103839808ull, 4202815755842541174ull, 5865978105561796481ull, 6784426342330023898ull}}, {{11143291318275023952ull, 9865205713230564372ull, 16555844668807021409ull, 8480532927912529872ull}}, {{16187929110776665778ull, 17694968616837572492ull, 10347402918004388380ull, 5300333079945331170ull}}, {{1788167314761280607ull, 3671966697337414000ull, 3710881610650709668ull, 6625416349931663963ull}}, {{2235209143451600758ull, 4589958371671767500ull, 26915994885999181ull, 8281770437414579954ull}}, {{10620377751512026282ull, 5174566991508548639ull, 4628508515231137392ull, 5176106523384112471ull}}, {{8663786170962644948ull, 6468208739385685799ull, 1173949625611533836ull, 6470133154230140589ull}}, {{6218046695275918281ull, 8085260924232107249ull, 6079123050441805199ull, 8087666442787675736ull}}, {{15415494230615918686ull, 11970817105286148886ull, 3799451906526128249ull, 5054791526742297335ull}}, {{10045995751415122549ull, 1128463326325522396ull, 137628864730272408ull, 6318489408427871669ull}}, {{12557494689268903187ull, 1410579157906902995ull, 4783722099340228414ull, 7898111760534839586ull}}, {{5542591171579370540ull, 14716670028973978084ull, 7601512330515030662ull, 4936319850334274741ull}}, {{6928238964474213175ull, 9172465499362696797ull, 14113576431571176232ull, 6170399812917843426ull}}, {{13271984724020154372ull, 11465581874203370996ull, 8418598502609194482ull, 7712999766147304283ull}}, {{17518362489367372291ull, 11777674689804494776ull, 2955781054917052599ull, 4820624853842065177ull}}, {{3451209037999663747ull, 10110407343828230567ull, 8306412337073703653ull, 6025781067302581471ull}}, {{18149069352781743396ull, 17249695198212676112ull, 5771329402914741662ull, 7532226334128226839ull}}, {{11343168345488589623ull, 6169373480455534666ull, 10524609904462795395ull, 4707641458830141774ull}}, {{4955588395005961220ull, 3100030832142030429ull, 3932390343723718436ull, 5884551823537677218ull}}, {{10806171512184839429ull, 3875038540177538036ull, 14138859966509423853ull, 7355689779422096522ull}}, {{13507714390231049286ull, 9455484193649310449ull, 8450202921282004008ull, 9194612224277620653ull}}, {{1524792466253323948ull, 5909677621030819031ull, 7587219835014946457ull, 5746632640173512908ull}}, {{15741048638098818647ull, 11998783044715911692ull, 9484024793768683071ull, 7183290800216891135ull}}, {{1229566723913971693ull, 10386792787467501712ull, 7243344973783465935ull, 8979113500271113919ull}}, {{768479202446232308ull, 13409274519808270426ull, 11444619636255748065ull, 5611945937669446199ull}}, {{10183971039912566193ull, 2926535094478174320ull, 9694088526892297178ull, 7014932422086807749ull}}, {{12729963799890707741ull, 12881540904952493708ull, 16729296677042759376ull, 8768665527608509686ull}}, {{17179599411786468147ull, 8050963065595308567ull, 5844124404724336706ull, 5480415954755318554ull}}, {{16862813246305697279ull, 840331795139359901ull, 16528527542760196691ull, 6850519943444148192ull}}, {{7243458502599957887ull, 14885472799206363589ull, 2213915354740694247ull, 8563149929305185241ull}}, {{6833004573338667631ull, 16220949527145059099ull, 12912912142781403664ull, 5351968705815740775ull}}, {{3929569698245946635ull, 1829442835221772258ull, 11529454160049366677ull, 6689960882269675969ull}}, {{14135334159662209102ull, 6898489562454603226ull, 576759644779544634ull, 8362451102837094962ull}}, {{13446269868216268593ull, 8923241994961514920ull, 4972160796414603300ull, 5226531939273184351ull}}, {{16807837335270335741ull, 11154052493701893650ull, 1603514977090866221ull, 6533164924091480439ull}}, {{11786424632233143868ull, 107507561845203351ull, 15839451776645746489ull, 8166456155114350548ull}}, {{14284044422786796774ull, 11596407272221721854ull, 676285323548815747ull, 5104035096946469093ull}}, {{8631683491628720159ull, 9883823071849764414ull, 5457042672863407588ull, 6380043871183086366ull}}, {{1566232327681124390ull, 12354778839812205518ull, 16044675377934035293ull, 7975054838978857957ull}}, {{14813953260082866456ull, 10027579784096322400ull, 12333765120422466010ull, 4984409274361786223ull}}, {{70697501394031454ull, 3311102693265627193ull, 10805520382100694609ull, 6230511592952232779ull}}, {{4700057895169927222ull, 8750564385009421895ull, 8895214459198480357ull, 7788139491190290974ull}}, {{9855065212122286370ull, 7774945749844582636ull, 947823018571662319ull, 4867587181993931859ull}}, {{12318831515152857962ull, 5106996168878340391ull, 15019836828496741611ull, 6084483977492414823ull}}, {{10786853375513684548ull, 1772059192670537585ull, 14163110017193539110ull, 7605604971865518529ull}}, {{18270998405764522603ull, 14942595050701249702ull, 1934414733104880087ull, 4753503107415949081ull}}, {{13615375970350877446ull, 14066557794949174224ull, 7029704434808488013ull, 5941878884269936351ull}}, {{17019219962938596807ull, 3748139188404304068ull, 4175444525083222113ull, 7427348605337420439ull}}, {{1413640439981847196ull, 13871802038821159803ull, 9527181855818095676ull, 4642092878335887774ull}}, {{15602108605259472707ull, 17339752548526449753ull, 2685605282917843787ull, 5802616097919859718ull}}, {{5667577701292177172ull, 17063004667230674288ull, 12580378640502080542ull, 7253270122399824647ull}}, {{7084472126615221465ull, 12105383797183567052ull, 11113787282200212774ull, 9066587652999780809ull}}, {{13651167115989289224ull, 2954178854812341503ull, 28588023734051128ull, 5666617283124863006ull}}, {{12452272876559223626ull, 3692723568515426879ull, 9259107066522339718ull, 7083271603906078757ull}}, {{10953655077271641628ull, 13839276497499059407ull, 16185569851580312551ull, 8854089504882598446ull}}, {{13763563450935857874ull, 15567076838577993985ull, 5504295138810307440ull, 5533805940551624029ull}}, {{3369396258387658630ull, 1012101974512940866ull, 11492054941940272205ull, 6917257425689530036ull}}, {{13435117359839349095ull, 5876813486568563986ull, 14365068677425340256ull, 8646571782111912545ull}}, {{13008634368326981089ull, 3673008429105352491ull, 2060638895749755804ull, 5404107363819945341ull}}, {{11649106941981338457ull, 4591260536381690614ull, 7187484638114582659ull, 6755134204774931676ull}}, {{5338011640621897263ull, 1127389652049725364ull, 8984355797643228324ull, 8443917755968664595ull}}, {{12559629312243461597ull, 9927990569385854160ull, 3309379364313323750ull, 5277448597480415372ull}}, {{15699536640304326997ull, 3186616174877541892ull, 4136724205391654688ull, 6596810746850519215ull}}, {{1177676726670857130ull, 3983270218596927366ull, 559219238312180456ull, 8246013433563149019ull}}, {{14571106009451449418ull, 2489543886623079603ull, 16490413088440970449ull, 5153758395976968136ull}}, {{13602196493386923869ull, 7723615876706237408ull, 2166272286841661445ull, 6442197994971210171ull}}, {{17002745616733654836ull, 14266205864310184664ull, 16542898413834240518ull, 8052747493714012713ull}}, {{10626716010458534273ull, 4304692646766477511ull, 3421782481005318468ull, 5032967183571257946ull}}, {{8671708994645779937ull, 5380865808458096889ull, 13500600138111423893ull, 6291208979464072432ull}}, {{15451322261734612825ull, 11337768279000009015ull, 16875750172639279866ull, 7864011224330090540ull}}, {{16574605441225214872ull, 11697791192802393538ull, 1323971821044774108ull, 4915007015206306588ull}}, {{11494884764676742781ull, 14622238991002991923ull, 1654964776305967635ull, 6143758769007883235ull}}, {{9756919937418540573ull, 13666112720326352000ull, 15903764025664623256ull, 7679698461259854043ull}}, {{6098074960886587858ull, 8541320450203970000ull, 7634009506826695583ull, 4799811538287408777ull}}, {{7622593701108234822ull, 6064964544327574596ull, 14154197901960757383ull, 5999764422859260971ull}}, {{9528242126385293528ull, 2969519661982080341ull, 13081061359023558825ull, 7499705528574076214ull}}, {{8260994338204502407ull, 13385164834807269973ull, 3563977330962336361ull, 4687315955358797634ull}}, {{14937928941183015913ull, 2896397988226923754ull, 13678343700557696260ull, 5859144944198497042ull}}, {{9449039139623994083ull, 3620497485283654693ull, 7874557588842344517ull, 7323931180248121303ull}}, {{16422984942957380507ull, 9137307875031956270ull, 5231510967625542742ull, 9154913975310151629ull}}, {{5652679570920974913ull, 1099131403467584765ull, 5575537363979658166ull, 5721821234568844768ull}}, {{11677535482078606546ull, 10597286291189256764ull, 6969421704974572707ull, 7152276543211055960ull}}, {{14596919352598258182ull, 8634921845559183051ull, 8711777131218215884ull, 8940345679013819950ull}}, {{6817231586160217412ull, 14620198190329265215ull, 833174688583997023ull, 5587716049383637469ull}}, {{3909853464272883861ull, 13663561719484193615ull, 5653154379157384183ull, 6984645061729546836ull}}, {{275630811913716922ull, 12467766130927854115ull, 7066442973946730229ull, 8730806327161933545ull}}, {{16313170321941930740ull, 10098196841043602773ull, 15945741904785176153ull, 5456753954476208465ull}}, {{6556404847145249713ull, 17234432069731891371ull, 6097119325699306479ull, 6820942443095260582ull}}, {{3583820040504174237ull, 16931354068737476310ull, 16844771193978908907ull, 8526178053869075727ull}}, {{16074945580597272611ull, 8276253283747228741ull, 17445511023877899923ull, 5328861283668172329ull}}, {{6258623920464427051ull, 5733630586256648023ull, 7971830724565211192ull, 6661076604585215412ull}}, {{3211593882153145910ull, 7167038232820810029ull, 9964788405706513990ull, 8326345755731519265ull}}, {{4313089185559410146ull, 18314456950795169980ull, 17757207799635041003ull, 5203966097332199540ull}}, {{5391361481949262682ull, 18281385170066574571ull, 3749765675834249638ull, 6504957621665249426ull}}, {{2127515834009190448ull, 13628359425728442406ull, 13910579131647587856ull, 8131197027081561782ull}}, {{15164755451537907742ull, 8517724641080276503ull, 4082425938852354506ull, 5081998141925976114ull}}, {{14344258295994996774ull, 1423783764495569821ull, 14326404460420218941ull, 6352497677407470142ull}}, {{4095264814711582255ull, 6391415724046850181ull, 8684633538670497868ull, 7940622096759337678ull}}, {{4865383518408432862ull, 13218006864384057171ull, 816209943241673263ull, 4962888810474586049ull}}, {{1470043379583153173ull, 11910822562052683560ull, 5631948447479479483ull, 6203611013093232561ull}}, {{1837554224478941466ull, 10276842184138466546ull, 11651621577776737258ull, 7754513766366540701ull}}, {{5760157408726726321ull, 11034712383513929495ull, 9588106495324154738ull, 4846571103979087938ull}}, {{2588510742481019997ull, 4570018442537636061ull, 2761761082300417615ull, 6058213879973859923ull}}, {{7847324446528662900ull, 1100837034744657172ull, 17287259408157685731ull, 7572767349967324903ull}}, {{14127949815935190120ull, 16828924211211268396ull, 17722066157739635437ull, 4732979593729578064ull}}, {{17659937269918987650ull, 7201097208731921783ull, 3705838623464992681ull, 5916224492161972581ull}}, {{17463235568971346659ull, 13613057529342290133ull, 9243984297758628755ull, 7395280615202465726ull}}, {{13220365239820785614ull, 6202317946625237381ull, 1165804167671755068ull, 4622050384501541079ull}}, {{2690398494493818305ull, 7752897433281546727ull, 15292313264871857547ull, 5777562980626926348ull}}, {{17198056173399436594ull, 5079435773174545504ull, 668647507380270318ull, 7221953725783657936ull}}, {{3050826143039744126ull, 15572666753322957689ull, 835809384225337897ull, 9027442157229572420ull}}, {{13435981385468309839ull, 2815387693185766699ull, 9745752901995611994ull, 5642151348268482762ull}}, {{12183290713407999394ull, 12742606653336984182ull, 2958819090639739184ull, 7052689185335603453ull}}, {{6005741354905223435ull, 15928258316671230228ull, 8310209881727061884ull, 8815861481669504316ull}}, {{12976960383670540455ull, 731789411064743084ull, 14417253212934189486ull, 5509913426043440197ull}}, {{16221200479588175569ull, 10138108800685704663ull, 4186508460885573145ull, 6887391782554300247ull}}, {{15664814581057831557ull, 17284322019284518733ull, 621449557679578527ull, 8609239728192875309ull}}, {{12096352122374838675ull, 17720230289693906064ull, 2694248982763430531ull, 5380774830120547068ull}}, {{15120440152968548344ull, 17538601843689994676ull, 3367811228454288164ull, 6725968537650683835ull}}, {{453806117501133814ull, 3476508230902941730ull, 18044822090850023918ull, 8407460672063354793ull}}, {{4895314841865596538ull, 16007875699596502293ull, 4360484779140183092ull, 5254662920039596746ull}}, {{10730829570759383576ull, 1563100550786076250ull, 14673978010780004674ull, 6568328650049495932ull}}, {{4190164926594453662ull, 11177247725337371121ull, 18342472513475005842ull, 8210410812561869915ull}}, {{14148068125190003299ull, 11597465846763244854ull, 9158202311708184699ull, 5131506757851168697ull}}, {{8461713119632728315ull, 9885146290026668164ull, 16059438908062618778ull, 6414383447313960871ull}}, {{10577141399540910394ull, 3133060825678559397ull, 15462612616650885569ull, 8017979309142451089ull}}, {{8916556383926762949ull, 13487378062117569383ull, 2746603857765721624ull, 5011237068214031931ull}}, {{6534009461481065782ull, 16859222577646961729ull, 17268312877489315742ull, 6264046335267539913ull}}, {{12779197845278720131ull, 11850656185203926353ull, 7750333041579480966ull, 7830057919084424892ull}}, {{1069469625658118226ull, 2794974097325066067ull, 14067330187841951412ull, 4893786199427765557ull}}, {{15171895087354811494ull, 3493717621656332583ull, 3749104679520275553ull, 6117232749284706947ull}}, {{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull, 7646540936605883684ull}}, {{2053210247837747184ull, 17140985699504597031ull, 9270056306212873643ull, 4779088085378677302ull}}, {{16401570865079347692ull, 16814546105953358384ull, 2364198345911316246ull, 5973860106723346628ull}}, {{2055219507639632999ull, 11794810595586922173ull, 2955247932389145308ull, 7467325133404183285ull}}, {{3590355201488464576ull, 16595128659096602166ull, 4152872966956909769ull, 4667078208377614553ull}}, {{13711316038715356528ull, 6908852768588588995ull, 9802777227123525116ull, 5833847760472018191ull}}, {{12527459029966807756ull, 8636065960735736244ull, 7641785515477018491ull, 7292309700590022739ull}}, {{15659323787458509695ull, 6183396432492282401ull, 4940545875918885210ull, 9115387125737528424ull}}, {{2869548339520486704ull, 8476308788735064405ull, 3087841172449303256ull, 5697116953585955265ull}}, {{8198621442827996284ull, 10595385985918830506ull, 8471487483989016974ull, 7121396191982444081ull}}, {{1024904766680219546ull, 4020860445543762325ull, 15201045373413659122ull, 8901745239978055101ull}}, {{2946408488388831169ull, 7124723796892239357ull, 11806496367597230903ull, 5563590774986284438ull}}, {{8294696628913426865ull, 4294218727687911292ull, 5534748422641762821ull, 6954488468732855548ull}}, {{10368370786141783581ull, 9979459428037277019ull, 6918435528302203526ull, 8693110585916069435ull}}, {{4174388732124920786ull, 1625476124095910233ull, 2018179195975183252ull, 5433194116197543397ull}}, {{9829671933583538887ull, 2031845155119887791ull, 7134410013396366969ull, 6791492645246929246ull}}, {{7675403898552035704ull, 7151492462327247643ull, 18141384553600234519ull, 8489365806558661557ull}}, {{2491284427381328363ull, 11387211816595611633ull, 13644208355213840526ull, 5305853629099163473ull}}, {{7725791552654048358ull, 5010642733889738733ull, 3220202388735136946ull, 6632317036373954342ull}}, {{14268925459244948351ull, 15486675454216949224ull, 13248625022773696990ull, 8290396295467442927ull}}, {{8918078412028092720ull, 5067486140458205361ull, 15197919666874642475ull, 5181497684667151829ull}}, {{15759284033462503804ull, 1722671657145368797ull, 5162341528311139382ull, 6476872105833939787ull}}, {{5864046986545966042ull, 11376711608286486805ull, 1841240891961536323ull, 8096090132292424734ull}}, {{5970872375804922729ull, 4804601745965360301ull, 14985833612758123914ull, 5060056332682765458ull}}, {{12075276488183541315ull, 15229124219311476184ull, 9508919979092879084ull, 6325070415853456823ull}}, {{15094095610229426643ull, 589661200429793614ull, 7274463955438710952ull, 7906338019816821029ull}}, {{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull, 4941461262385513143ull}}, {{10639340690884892589ull, 5072358831263164165ull, 3953792708276222467ull, 6176826577981891429ull}}, {{17910861882033503640ull, 1728762520651567302ull, 9553926903772665988ull, 7721033222477364286ull}}, {{6582602657843551871ull, 10303848612262005372ull, 1359518296430528338ull, 4825645764048352679ull}}, {{8228253322304439839ull, 3656438728472730907ull, 15534455925820324135ull, 6032057205060440848ull}}, {{5673630634453161895ull, 18405606465873077346ull, 971325833565853552ull, 7540071506325551061ull}}, {{8157705164960614088ull, 11503504041170673341ull, 2912921655192352422ull, 4712544691453469413ull}}, {{14808817474628155514ull, 5156008014608565868ull, 8252838087417828432ull, 5890680864316836766ull}}, {{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull, 7363351080396045958ull}}, {{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull, 9204188850495057447ull}}, {{4661903025908358824ull, 7341007085979871558ull, 13535789341626496214ull, 5752618031559410904ull}}, {{15050750819240224337ull, 18399630894329615255ull, 16919736677033120267ull, 7190772539449263630ull}}, {{14201752505622892517ull, 18387852599484631165ull, 11926298809436624526ull, 8988465674311579538ull}}, {{11181938325228001776ull, 6880721856250506574ull, 12065622774325278233ull, 5617791046444737211ull}}, {{4754050869680226411ull, 13212588338740521122ull, 10470342449479209887ull, 7022238808055921514ull}}, {{15165935623955058822ull, 11904049404998263498ull, 3864556024994236551ull, 8777798510069901893ull}}, {{14090395783399299668ull, 14357559905764996542ull, 4721190524835091796ull, 5486124068793688683ull}}, {{8389622692394348777ull, 17946949882206245678ull, 1289802137616476841ull, 6857655085992110854ull}}, {{1263656328638160163ull, 8598629297475643386ull, 10835624708875371860ull, 8572068857490138567ull}}, {{5401471223826238006ull, 14597515347777052924ull, 13689794470688189268ull, 5357543035931336604ull}}, {{6751839029782797507ull, 18246894184721316155ull, 17112243088360236585ull, 6696928794914170755ull}}, {{3828112768801108980ull, 8973559675619481482ull, 16778617842022907828ull, 8371160993642713444ull}}, {{7004256498928081017ull, 14831846834116951734ull, 1263264114409541584ull, 5231975621026695903ull}}, {{17978692660514877079ull, 93064468936638051ull, 15414138198294090693ull, 6539969526283369878ull}}, {{17861679807216208444ull, 4728016604598185468ull, 10044300711012837558ull, 8174961907854212348ull}}, {{1940177842655354470ull, 16790068433156029630ull, 15501059981237799281ull, 5109351192408882717ull}}, {{11648594340173968895ull, 7152527486162873325ull, 5541266921265085390ull, 6386688990511103397ull}}, {{725684869935297407ull, 18164031394558367465ull, 11538269670008744641ull, 7983361238138879246ull}}, {{11982768089778030640ull, 4434990593957897809ull, 2599732525328077497ull, 4989600773836799529ull}}, {{1143402056940374587ull, 10155424260874760166ull, 7861351675087484775ull, 6237000967295999411ull}}, {{10652624608030244042ull, 8082594307666062303ull, 5215003575431968065ull, 7796251209119999264ull}}, {{13575419407659984382ull, 16580836488359758699ull, 3259377234644980040ull, 4872657005699999540ull}}, {{12357588241147592574ull, 2279301536740146758ull, 4074221543306225051ull, 6090821257124999425ull}}, {{6223613264579714909ull, 16684184976207347160ull, 9704462947560169217ull, 7613526571406249281ull}}, {{3889758290362321819ull, 3510086582488510119ull, 17594504388293575521ull, 4758454107128905800ull}}, {{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull, 5948067633911132251ull}}, {{4924825824084280865ull, 15860803826599919845ull, 18268041069853935943ull, 7435084542388915313ull}}, {{5383859149266369493ull, 16830531419266031759ull, 4499996641017628108ull, 4646927838993072071ull}}, {{2118137918155573962ull, 2591420200372988083ull, 1013309782844647232ull, 5808659798741340089ull}}, {{16482730452976631164ull, 3239275250466235103ull, 5878323246983196944ull, 7260824748426675111ull}}, {{15991727047793401051ull, 4049094063082793879ull, 2736218040301608276ull, 9076030935533343889ull}}, {{16912358432511957513ull, 11754055826281521982ull, 13239351321256974932ull, 5672519334708339930ull}}, {{11917076003785171083ull, 14692569782851902478ull, 7325817114716442857ull, 7090649168385424913ull}}, {{5672972967876688046ull, 4530654173282714386ull, 13768957411822941476ull, 8863311460481781141ull}}, {{8157294123350317933ull, 12055030895156472299ull, 10911441391603032374ull, 5539569662801113213ull}}, {{5584931635760509512ull, 5845416582090814566ull, 18250987757931178372ull, 6924462078501391516ull}}, {{16204536581555412698ull, 7306770727613518207ull, 4366990623704421349ull, 8655577598126739396ull}}, {{17045364391113214793ull, 6872574713972142831ull, 11952741176670039151ull, 5409735998829212122ull}}, {{16695019470464130587ull, 3979032374037790635ull, 5717554433982773131ull, 6762169998536515153ull}}, {{16257088319652775329ull, 362104449119850390ull, 11758629060905854318ull, 8452712498170643941ull}}, {{5548994181355596677ull, 14061373335982070206ull, 9654986172279852900ull, 5282945311356652463ull}}, {{16159614763549271654ull, 17576716669977587757ull, 7457046696922428221ull, 6603681639195815579ull}}, {{6364460399154425855ull, 8135837782189820985ull, 4709622352725647373ull, 8254602048994769474ull}}, {{15507002795539985920ull, 7390741623082332067ull, 7555199988880917512ull, 5159126280621730921ull}}, {{14772067475997594496ull, 9238427028852915084ull, 14055686004528534794ull, 6448907850777163651ull}}, {{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull, 8061134813471454564ull}}, {{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull, 5038209258419659102ull}}, {{9237700373798089483ull, 4698445753088498727ull, 12429219171114694412ull, 6297761573024573878ull}}, {{6935439448820223949ull, 5873057191360623409ull, 6313151927038592207ull, 7872201966280717348ull}}, {{15863864701581109728ull, 10588189772241471486ull, 13169091991253895937ull, 4920126228925448342ull}}, {{10606458840121611352ull, 17846923233729227262ull, 7237992952212594113ull, 6150157786156810428ull}}, {{4034701513297238382ull, 8473595986879370366ull, 9047491190265742642ull, 7687697232696013035ull}}, {{16356746501092937701ull, 9907683510226994382ull, 3348838984702395199ull, 4804810770435008147ull}}, {{11222561089511396318ull, 7772918369356355074ull, 18021106786160157711ull, 6006013463043760183ull}}, {{4804829325034469590ull, 5104461943268055939ull, 17914697464272809235ull, 7507516828804700229ull}}, {{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull, 4692198018002937643ull}}, {{10094841185520837735ull, 1105557131661051262ull, 12266475137052861751ull, 5865247522503672054ull}}, {{3395179445046271361ull, 15217004469858477790ull, 6109721884461301380ull, 7331559403129590068ull}}, {{13467346343162615009ull, 574511513613545621ull, 7637152355576626726ull, 9164449253911987585ull}}, {{10722934473690328333ull, 14194127751290629725ull, 16302435268303861463ull, 5727780783694992240ull}}, {{18015354110540298320ull, 13130973670685899252ull, 1931300011670275213ull, 7159725979618740301ull}}, {{4072448564465821284ull, 2578659033075210354ull, 7025811033015231921ull, 8949657474523425376ull}}, {{7156966371218526206ull, 13140876941740476231ull, 4391131895634519950ull, 5593535921577140860ull}}, {{4334521945595769854ull, 7202724140320819481ull, 5488914869543149938ull, 6991919901971426075ull}}, {{10029838450422100221ull, 18226777212255800159ull, 2249457568501549518ull, 8739899877464282594ull}}, {{13186178059154894494ull, 6780049739232487195ull, 6017596998740856353ull, 5462437423415176621ull}}, {{11871036555516230214ull, 13086748192467996898ull, 12133682266853458345ull, 6828046779268970776ull}}, {{5615423657540511959ull, 2523377185302832411ull, 15167102833566822932ull, 8535058474086213470ull}}, {{1203796776749126023ull, 10800482777669046065ull, 4867753252551876428ull, 5334411546303883419ull}}, {{6116431989363795432ull, 13500603472086307581ull, 1473005547262457631ull, 6668014432879854274ull}}, {{12257226005132132194ull, 12264068321680496572ull, 11064628970932847847ull, 8335018041099817842ull}}, {{16884138290062358430ull, 14582571728691392213ull, 11527079125260417808ull, 5209386275687386151ull}}, {{7270114807295784325ull, 18228214660864240267ull, 9797162888148134356ull, 6511732844609232689ull}}, {{4475957490692342502ull, 4338524252370748718ull, 16858139628612555850ull, 8139666055761540861ull}}, {{16632531486964877776ull, 7323263676159105852ull, 12842180277096541358ull, 5087291284850963038ull}}, {{2343920284996545604ull, 18377451632053658124ull, 6829353309515900889ull, 6359114106063703798ull}}, {{2929900356245682005ull, 9136756484784908943ull, 17760063673749651920ull, 7948892632579629747ull}}, {{8748716750294633109ull, 5710472802990568089ull, 8794196786879838498ull, 4968057895362268592ull}}, {{15547581956295679290ull, 16361463040592985919ull, 10992745983599798122ull, 6210072369202835740ull}}, {{14822791426942211209ull, 11228456763886456591ull, 13740932479499747653ull, 7762590461503544675ull}}, {{16181773669479963862ull, 9323628486642729321ull, 6282239790473648331ull, 4851619038439715422ull}}, {{6392159031567791115ull, 7042849589876023748ull, 17076171774946836222ull, 6064523798049644277ull}}, {{7990198789459738893ull, 18026934024199805493ull, 7510156663401381565ull, 7580654747562055347ull}}, {{7299717252626030761ull, 13572676774338572385ull, 2388004905412169526ull, 4737909217226284592ull}}, {{13736332584209926355ull, 7742473931068439673ull, 2985006131765211908ull, 5922386521532855740ull}}, {{3335357674980244231ull, 9678092413835549592ull, 3731257664706514885ull, 7402983151916069675ull}}, {{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull, 4626864469947543547ull}}, {{16440806238860479518ull, 5831627441398752654ull, 13867799344317011026ull, 5783580587434429433ull}}, {{11327635761720823589ull, 16512906338603216626ull, 3499691125114100070ull, 7229475734293036792ull}}, {{4936172665296253678ull, 11417760886399244975ull, 4374613906392625088ull, 9036844667866295990ull}}, {{10002636943451240405ull, 7136100553999528109ull, 16569191746777554392ull, 5648027917416434993ull}}, {{17114982197741438410ull, 8920125692499410136ull, 6876431628189779278ull, 7060034896770543742ull}}, {{2946983673467246397ull, 1926785078769486863ull, 17818911572091999906ull, 8825043620963179677ull}}, {{8759393823558110854ull, 5815926692658317193ull, 13442662741771193893ull, 5515652263101987298ull}}, {{15560928297875026471ull, 11881594384250284395ull, 7579956390359216558ull, 6894565328877484123ull}}, {{14839474353916395185ull, 5628620943458079686ull, 4863259469521632794ull, 8618206661096855154ull}}, {{4662985452770359087ull, 8129574108088687708ull, 7651223186878408400ull, 5386379163185534471ull}}, {{5828731815962948858ull, 10161967635110859635ull, 4952342965170622596ull, 6732973953981918089ull}}, {{2674228751526298169ull, 12702459543888574544ull, 10802114724890666149ull, 8416217442477397611ull}}, {{1671392969703936356ull, 10244880224144053042ull, 4445478693842972391ull, 5260135901548373507ull}}, {{11312613248984696253ull, 8194414261752678398ull, 945162348876327585ull, 6575169876935466884ull}}, {{4917394524376094508ull, 14854703845618235902ull, 1181452936095409481ull, 8218962346169333605ull}}, {{16908429633017222779ull, 2366660875870315582ull, 3044251094273324878ull, 5136851466355833503ull}}, {{11912165004416752666ull, 12181698131692670286ull, 17640371923123819809ull, 6421064332944791878ull}}, {{5666834218666165025ull, 1392064609333674146ull, 12827092867049998954ull, 8026330416180989848ull}}, {{8153457405093741045ull, 5481726399260934245ull, 8016933041906249346ull, 5016456510113118655ull}}, {{14803507774794564210ull, 16075530035930943614ull, 5409480283955423778ull, 6270570637641398319ull}}, {{9281012681638429454ull, 10871040508058903710ull, 2150164336516891819ull, 7838213297051747899ull}}, {{1188946907596630505ull, 4488557308323120867ull, 17484753774818915051ull, 4898883310657342436ull}}, {{15321241689777951843ull, 999010616976513179ull, 3409198144814092198ull, 6123604138321678046ull}}, {{14539866093795051900ull, 10472135308075417282ull, 13484869717872391055ull, 7654505172902097557ull}}, {{13699102327049295341ull, 13462613595188217657ull, 10733886582883938361ull, 4784065733063810973ull}}, {{3288819853529455465ull, 2993208938703108360ull, 18029044247032310856ull, 5980082166329763716ull}}, {{4111024816911819331ull, 3741511173378885450ull, 4089561235080836954ull, 7475102707912204646ull}}, {{7181076528997274986ull, 6950130501789191310ull, 16391033827207686808ull, 4671939192445127903ull}}, {{18199717698101369540ull, 8687663127236489137ull, 15877106265582220606ull, 5839923990556409879ull}}, {{8914589067344548213ull, 1636206872190835614ull, 15234696813550387854ull, 7299904988195512349ull}}, {{1919864297325909458ull, 11268630627093320326ull, 5208312961655821105ull, 9124881235244390437ull}}, {{15034973241110857124ull, 125365114292243347ull, 5561038610248582143ull, 5703050772027744023ull}}, {{14182030532961183500ull, 13991764448147467896ull, 2339612244383339774ull, 7128813465034680029ull}}, {{17727538166201479375ull, 8266333523329559062ull, 7536201323906562622ull, 8911016831293350036ull}}, {{6468025335448536706ull, 554772433653586510ull, 13933497864296377447ull, 5569385519558343772ull}}, {{17308403706165446690ull, 14528523597349146849ull, 17416872330370471808ull, 6961731899447929715ull}}, {{7800446577424644651ull, 18160654496686433562ull, 17159404394535701856ull, 8702164874309912144ull}}, {{9486965129317790811ull, 11350409060429020976ull, 10724627746584813660ull, 5438853046443695090ull}}, {{11858706411647238513ull, 14188011325536276220ull, 4182412646376241267ull, 6798566308054618863ull}}, {{14823383014559048142ull, 13123328138492957371ull, 616329789542913680ull, 8498207885068273579ull}}, {{6958771374885711137ull, 8202080086558098357ull, 16526107182960178714ull, 5311379928167670986ull}}, {{13310150237034526825ull, 1029228071342847138ull, 11434261941845447585ull, 6639224910209588733ull}}, {{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull, 8299031137761985917ull}}, {{2328104340435295250ull, 15215603238322186527ull, 2591948866729097557ull, 5186894461101241198ull}}, {{16745188480826282774ull, 5184445992620569446ull, 12463308120266147755ull, 6483618076376551497ull}}, {{11708113564178077660ull, 1868871472348323904ull, 1744077095050520982ull, 8104522595470689372ull}}, {{7317570977611298537ull, 15003102725499866152ull, 10313420221261351421ull, 5065326622169180857ull}}, {{9146963722014123172ull, 4918820351592668978ull, 17503461295004077181ull, 6331658277711476071ull}}, {{2210332615662878157ull, 10760211457918224127ull, 17267640600327708572ull, 7914572847139345089ull}}, {{8298986912430380704ull, 15948504198053665887ull, 3874746347563736001ull, 4946608029462090681ull}}, {{5762047622110587976ull, 6100572192284918647ull, 9455118952882057906ull, 6183260036827613351ull}}, {{2590873509210847066ull, 16849087277210924117ull, 7207212672675184478ull, 7729075046034516689ull}}, {{3925138952470473368ull, 5918993529829439669ull, 16033722966490460059ull, 4830671903771572930ull}}, {{9518109709015479614ull, 2787055893859411682ull, 10818781671258299266ull, 6038339879714466163ull}}, {{2674265099414573710ull, 12707191904179040411ull, 8911791070645486178ull, 7547924849643082704ull}}, {{17812316751629966233ull, 12553680958539288160ull, 5569869419153428861ull, 4717453031026926690ull}}, {{3818651865827906175ull, 1857043142891946489ull, 16185708810796561885ull, 5896816288783658362ull}}, {{9385000850712270622ull, 6932989947042321015ull, 11008763976640926548ull, 7371020360979572953ull}}, {{7119565044962950374ull, 8666237433802901269ull, 18372640989228546089ull, 9213775451224466191ull}}, {{6755571162315537936ull, 16945613442195283053ull, 18400429645908923161ull, 5758609657015291369ull}}, {{13056149971321810324ull, 7346958747461940104ull, 9165479002103990240ull, 7198262071269114212ull}}, {{16320187464152262904ull, 9183698434327425130ull, 11456848752629987800ull, 8997827589086392765ull}}, {{14811803183522552219ull, 5739811521454640706ull, 9466373479607436327ull, 5623642243178995478ull}}, {{9291381942548414466ull, 2563078383390912979ull, 2609594812654519601ull, 7029552803973744348ull}}, {{7002541409758130179ull, 7815533997666029128ull, 3261993515818149501ull, 8786941004967180435ull}}, {{4376588381098831362ull, 7190551757754962157ull, 18179647011882201102ull, 5491838128104487771ull}}, {{10082421494800927106ull, 18211561734048478504ull, 18112872746425363473ull, 6864797660130609714ull}}, {{12603026868501158883ull, 8929394112278434418ull, 13417718896176928534ull, 8580997075163262143ull}}, {{12488577811240612206ull, 969185301746633607ull, 15303603337751662190ull, 5363123171977038839ull}}, {{10999036245623377353ull, 10434853664038067817ull, 14517818153762189833ull, 6703903964971298549ull}}, {{18360481325456609595ull, 17655253098474972675ull, 4312214636920573579ull, 8379879956214123187ull}}, {{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull, 5237424972633826992ull}}, {{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull, 6546781215792283740ull}}, {{16633120851708517460ull, 12485656897476221727ull, 608267404471350836ull, 8183476519740354675ull}}, {{17313229559958905269ull, 17026907597777414387ull, 16521068192290451936ull, 5114672824837721671ull}}, {{17029850931521243682ull, 2836890423512216368ull, 16039649221935677017ull, 6393341031047152089ull}}, {{2840569590692002986ull, 8157799047817658365ull, 6214503472137432559ull, 7991676288808940112ull}}, {{4081199003396195818ull, 12016153432527118334ull, 3884064670085895349ull, 4994797680505587570ull}}, {{14324870791100020581ull, 1185133735376734205ull, 14078452874462144995ull, 6243497100631984462ull}}, {{4071030433592862014ull, 15316475224503081469ull, 8374694056222905435ull, 7804371375789980578ull}}, {{4850237030209232711ull, 7266954006100731966ull, 9845869803566703801ull, 4877732109868737861ull}}, {{15286168324616316697ull, 13695378526053302861ull, 16919023272885767655ull, 6097165137335922326ull}}, {{5272652350488232159ull, 12507537139139240673ull, 11925407054252433761ull, 7621456421669902908ull}}, {{14824622765123614859ull, 899681684320943564ull, 16676751445762546909ull, 4763410263543689317ull}}, {{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull, 5954262829429611647ull}}, {{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull, 7442828536787014559ull}}, {{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull, 4651767835491884099ull}}, {{9305436863705329478ull, 15401676660084534608ull, 7278909286806688635ull, 5814709794364855124ull}}, {{11631796079631661847ull, 14640409806678280356ull, 9098636608508360794ull, 7268387242956068905ull}}, {{14539745099539577309ull, 9077140221493074637ull, 15984981779062838897ull, 9085484053695086131ull}}, {{11393183696425929770ull, 17202427684501641408ull, 7684770602700580358ull, 5678427533559428832ull}}, {{14241479620532412213ull, 12279662568772275952ull, 9605963253375725448ull, 7098034416949286040ull}}, {{17801849525665515266ull, 15349578210965344940ull, 12007454066719656810ull, 8872543021186607550ull}}, {{1902783916686171233ull, 14205172400280728492ull, 2892972773272397602ull, 5545339388241629719ull}}, {{2378479895857714042ull, 8533093463496134807ull, 17451274021872660715ull, 6931674235302037148ull}}, {{16808157925104306264ull, 6054680810942780604ull, 3367348453631274278ull, 8664592794127546436ull}}, {{1281726666335415607ull, 17619233562121401590ull, 11327964820374322231ull, 5415370496329716522ull}}, {{10825530369774045317ull, 17412355934224364083ull, 4936583988613126981ull, 6769213120412145653ull}}, {{8920226943790168742ull, 7930386862498291392ull, 10782416004193796631ull, 8461516400515182066ull}}, {{5575141839868855464ull, 11874020816702513976ull, 11350696021048510798ull, 5288447750321988791ull}}, {{6968927299836069330ull, 5619153984023366662ull, 9576684007883250594ull, 6610559687902485989ull}}, {{17934531161649862470ull, 16247314516883984135ull, 16582541028281451146ull, 8263199609878107486ull}}, {{18126611003672245900ull, 14766257591479877988ull, 5752402124248519062ull, 5164499756173817179ull}}, {{4211519680880755759ull, 9234449952495071678ull, 2578816636883260924ull, 6455624695217271474ull}}, {{14487771637955720506ull, 11543062440618839597ull, 12446892832958851963ull, 8069530869021589342ull}}, {{11360700282936019269ull, 4908571016173080796ull, 3167622002171894573ull, 5043456793138493339ull}}, {{14200875353670024086ull, 10747399788643738899ull, 17794585557997031928ull, 6304320991423116673ull}}, {{13139408173660142203ull, 13434249735804673624ull, 8408173892214126198ull, 7880401239278895842ull}}, {{8212130108537588877ull, 3784720066450533111ull, 9866794701061216778ull, 4925250774549309901ull}}, {{5653476617244598192ull, 13954272119917942197ull, 16945179394753908876ull, 6156563468186637376ull}}, {{11678531789983135644ull, 17442840149897427746ull, 2734730169732834479ull, 7695704335233296721ull}}, {{11910768387166847682ull, 17819304121326974197ull, 13238421402151491309ull, 4809815209520810450ull}}, {{1053402428676395890ull, 8439072096376554035ull, 7324654715834588329ull, 6012269011901013063ull}}, {{15151811091127658574ull, 15160526138898080447ull, 4544132376365847507ull, 7515336264876266329ull}}, {{16387410959595868465ull, 7169485827597606327ull, 14369297781297124452ull, 4697085165547666455ull}}, {{15872577681067447677ull, 8961857284497007909ull, 13349936208194017661ull, 5871356456934583069ull}}, {{6005664046052145885ull, 15814007624048647791ull, 2852362204960358364ull, 7339195571168228837ull}}, {{2895394039137794452ull, 1320765456351258123ull, 8177138774627835860ull, 9173994463960286046ull}}, {{17950522338956979196ull, 10048850447074312134ull, 499025715715009508ull, 5733746539975178779ull}}, {{13214780886841448187ull, 12561063058842890168ull, 14458840199925925597ull, 7167183174968973473ull}}, {{16518476108551810234ull, 1866270768271448998ull, 4238492194625243285ull, 8958978968711216842ull}}, {{5712361549417493492ull, 3472262239383349576ull, 7260743640068164957ull, 5599361855444510526ull}}, {{7140451936771866865ull, 8952013817656574874ull, 18299301586939982004ull, 6999202319305638157ull}}, {{18148936957819609390ull, 11190017272070718592ull, 9039068928392813793ull, 8749002899132047697ull}}, {{11343085598637255869ull, 76231767403117264ull, 17178633126313978381ull, 5468126811957529810ull}}, {{14178856998296569836ull, 4706975727681284484ull, 12249919371037697168ull, 6835158514946912263ull}}, {{17723571247870712295ull, 5883719659601605605ull, 10700713195369733556ull, 8543948143683640329ull}}, {{13383075039132889136ull, 12900696824105779311ull, 18217160793174553232ull, 5339967589802275205ull}}, {{12117157780488723516ull, 16125871030132224139ull, 8936392936186027828ull, 6674959487252844007ull}}, {{10534761207183516491ull, 1710594713955728558ull, 6558805151805146882ull, 8343699359066055009ull}}, {{1972539736062309903ull, 5680807714649718253ull, 15628468265946686561ull, 5214812099416284380ull}}, {{7077360688505275283ull, 11712695661739535720ull, 1088841258723806585ull, 6518515124270355476ull}}, {{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull, 8148143905337944345ull}}, {{10140874056322134219ull, 503632201182659961ull, 12379872279446443655ull, 5092589940836215215ull}}, {{17287778588830055677ull, 14464598306760488663ull, 10863154330880666664ull, 6365737426045269019ull}}, {{16998037217610181693ull, 18080747883450610829ull, 8967256895173445426ull, 7957171782556586274ull}}, {{12929616270220057510ull, 15912153445584019672ull, 10216221577910791295ull, 4973232364097866421ull}}, {{16162020337775071888ull, 15278505788552636686ull, 17381962990815877023ull, 6216540455122333026ull}}, {{10979153385364064051ull, 14486446217263407954ull, 12504081701665070471ull, 7770675568902916283ull}}, {{11473656884279927936ull, 15971557913430711827ull, 5509208054326975092ull, 4856672230564322677ull}}, {{9730385086922522016ull, 1517703318078838168ull, 11498196086336106770ull, 6070840288205403346ull}}, {{12162981358653152520ull, 11120501184453323518ull, 5149373071065357654ull, 7588550360256754183ull}}, {{2990177330730832421ull, 2338627221855939295ull, 10135887197056930390ull, 4742843975160471364ull}}, {{17572779718695704238ull, 12146656064174699926ull, 12669858996321162987ull, 5928554968950589205ull}}, {{12742602611514854490ull, 10571634061790987004ull, 2002265690119290022ull, 7410693711188236507ull}}, {{17187498669051559864ull, 1995585270191978973ull, 17392317120820413928ull, 4631683569492647816ull}}, {{7649315281032286118ull, 2494481587739973717ull, 3293652327315965794ull, 5789604461865809771ull}}, {{14173330119717745552ull, 12341474021529742954ull, 17952123464427120954ull, 7237005577332262213ull}}, {{8493290612792406132ull, 6203470490057402885ull, 8605096275251737481ull, 9046256971665327767ull}}, {{7614149642208947785ull, 15406384102354346563ull, 12295714199673417781ull, 5653910607290829854ull}}, {{4906001034333796827ull, 5422922072660769492ull, 6146270712736996419ull, 7067388259113537318ull}}, {{6132501292917246033ull, 2166966572398573961ull, 16906210427776021332ull, 8834235323891921647ull}}, {{15362028354141748531ull, 10577726144603884533ull, 17483910545001095188ull, 5521397077432451029ull}}, {{5367477387395021951ull, 13222157680754855667ull, 8019830125969205273ull, 6901746346790563787ull}}, {{2097660715816389535ull, 2692639045661405872ull, 5413101639034118688ull, 8627182933488204734ull}}, {{1311037947385243460ull, 1682899403538378670ull, 17218246579678487892ull, 5391989333430127958ull}}, {{10862169471086330132ull, 2103624254422973337ull, 12299436187743334057ull, 6739986666787659948ull}}, {{18189397857285300569ull, 7241216336456104575ull, 15374295234679167571ull, 8424983333484574935ull}}, {{18285902688444394712ull, 2219917201071371407ull, 16526463549315561588ull, 5265614583427859334ull}}, {{18245692342128105486ull, 2774896501339214259ull, 11434707399789676177ull, 6582018229284824168ull}}, {{18195429409232743953ull, 8080306645101405728ull, 14293384249737095221ull, 8227522786606030210ull}}, {{11372143380770464971ull, 7356034662402072532ull, 13545051174513072417ull, 5142201741628768881ull}}, {{14215179225963081214ull, 13806729346429978569ull, 3096255912859176809ull, 6427752177035961102ull}}, {{3933915977171687805ull, 3423353627755309500ull, 13093691927928746820ull, 8034690221294951377ull}}, {{11682069522587080686ull, 11362968054201844245ull, 1266028427314384906ull, 5021681388309344611ull}}, {{767528847951687146ull, 4980338030897529499ull, 15417593589425144845ull, 6277101735386680763ull}}, {{14794469115221772644ull, 10837108557049299777ull, 14660305968354043152ull, 7846377169233350954ull}}, {{2329014169372526047ull, 6773192848155812361ull, 13774377248648664874ull, 4903985730770844346ull}}, {{7522953730143045462ull, 17689863097049541259ull, 7994599523956055284ull, 6129982163463555433ull}}, {{4792006144251418924ull, 3665584797602374958ull, 14604935423372457010ull, 7662477704329444291ull}}, {{16830061895439300539ull, 6902676516928872252ull, 6822241630394091679ull, 4789048565205902682ull}}, {{2590833295589574058ull, 4016659627733702412ull, 17751174074847390407ull, 5986310706507378352ull}}, {{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull, 7482888383134222941ull}}, {{8941617539820436589ull, 11784926618718307329ull, 4644732709119747947ull, 4676805239458889338ull}}, {{15788707943202933640ull, 10119472254970496257ull, 15029287923254460742ull, 5846006549323611672ull}}, {{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull, 7307508186654514591ull}}, {{16599405629006654981ull, 4282460352322930642ull, 14259890343230319102ull, 9134385233318143238ull}}, {{14986314536556547267ull, 16511595775483995363ull, 4300745446091561534ull, 5708990770823839524ull}}, {{14121207152268296180ull, 11416122682500218396ull, 5375931807614451918ull, 7136238463529799405ull}}, {{17651508940335370225ull, 5046781316270497187ull, 11331600777945452802ull, 8920298079412249256ull}}, {{8726350078495912439ull, 7765924341096448646ull, 7082250486215908001ull, 5575186299632655785ull}}, {{1684565561265114740ull, 14319091444797948712ull, 13464499126197272905ull, 6968982874540819731ull}}, {{2105706951581393425ull, 4063806250715272178ull, 12218937889319203228ull, 8711228593176024664ull}}, {{5927752863165758795ull, 11763250943551820919ull, 7636836180824502017ull, 5444517870735015415ull}}, {{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull, 6805647338418769269ull}}, {{8109192344089651141ull, 10309629067051791354ull, 10779635027931437426ull, 8507059173023461586ull}}, {{9679931233483419867ull, 11055204185334757500ull, 11348957910884536295ull, 5316911983139663491ull}}, {{12099914041854274834ull, 9207319213241058971ull, 9574511370178282465ull, 6646139978924579364ull}}, {{10513206533890455638ull, 16120835034978711618ull, 11968139212722853081ull, 8307674973655724205ull}}, {{11182440102108922678ull, 3157992869220612905ull, 9785930017165477128ull, 5192296858534827628ull}}, {{142992072353989635ull, 3947491086525766132ull, 12232412521456846410ull, 6490371073168534535ull}}, {{178740090442487044ull, 14157735895011983473ull, 10678829633393670108ull, 8112963841460668169ull}}, {{11640927602595024163ull, 18071956971237265478ull, 18203483566939513577ull, 5070602400912917605ull}}, {{5327787466389004395ull, 8754888158764418136ull, 8919296403392228260ull, 6338253001141147007ull}}, {{6659734332986255494ull, 10943610198455522670ull, 6537434485812897421ull, 7922816251426433759ull}}, {{17997392013398573396ull, 9145599383248395620ull, 11003425581274142744ull, 4951760157141521099ull}}, {{4049995943038665129ull, 11431999229060494526ull, 9142595958165290526ull, 6189700196426901374ull}}, {{14285866965653107219ull, 5066626999470842349ull, 2204872910851837350ull, 7737125245533626718ull}}, {{11234509862746885964ull, 17001699929951440180ull, 15213103624564562055ull, 4835703278458516698ull}}, {{14043137328433607455ull, 16640438894011912321ull, 9793007493850926761ull, 6044629098073145873ull}}, {{3718863605259845606ull, 6965490562232726690ull, 16852945385741046356ull, 7555786372591432341ull}}, {{6935975771714791408ull, 13576803638250229989ull, 12838933875301847924ull, 4722366482869645213ull}}, {{13281655733070877164ull, 16971004547812787486ull, 2213609288845146193ull, 5902958103587056517ull}}, {{7378697629483820647ull, 7378697629483820646ull, 7378697629483820646ull, 7378697629483820646ull}}, {{0ull, 0ull, 0ull, 9223372036854775808ull}}, {{0ull, 0ull, 0ull, 5764607523034234880ull}}, {{0ull, 0ull, 0ull, 7205759403792793600ull}}, {{0ull, 0ull, 0ull, 9007199254740992000ull}}, {{0ull, 0ull, 0ull, 5629499534213120000ull}}, {{0ull, 0ull, 0ull, 7036874417766400000ull}}, {{0ull, 0ull, 0ull, 8796093022208000000ull}}, {{0ull, 0ull, 0ull, 5497558138880000000ull}}, {{0ull, 0ull, 0ull, 6871947673600000000ull}}, {{0ull, 0ull, 0ull, 8589934592000000000ull}}, {{0ull, 0ull, 0ull, 5368709120000000000ull}}, {{0ull, 0ull, 0ull, 6710886400000000000ull}}, {{0ull, 0ull, 0ull, 8388608000000000000ull}}, {{0ull, 0ull, 0ull, 5242880000000000000ull}}, {{0ull, 0ull, 0ull, 6553600000000000000ull}}, {{0ull, 0ull, 0ull, 8192000000000000000ull}}, {{0ull, 0ull, 0ull, 5120000000000000000ull}}, {{0ull, 0ull, 0ull, 6400000000000000000ull}}, {{0ull, 0ull, 0ull, 8000000000000000000ull}}, {{0ull, 0ull, 0ull, 5000000000000000000ull}}, {{0ull, 0ull, 0ull, 6250000000000000000ull}}, {{0ull, 0ull, 0ull, 7812500000000000000ull}}, {{0ull, 0ull, 0ull, 4882812500000000000ull}}, {{0ull, 0ull, 0ull, 6103515625000000000ull}}, {{0ull, 0ull, 0ull, 7629394531250000000ull}}, {{0ull, 0ull, 0ull, 4768371582031250000ull}}, {{0ull, 0ull, 0ull, 5960464477539062500ull}}, {{0ull, 0ull, 0ull, 7450580596923828125ull}}, {{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}}, {{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}}, {{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}}, {{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}}, {{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}}, {{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}}, {{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}}, {{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}}, {{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}}, {{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}}, {{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}}, {{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}}, {{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}}, {{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}}, {{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}}, {{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}}, {{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}}, {{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}}, {{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}}, {{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}}, {{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}}, {{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}}, {{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}}, {{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}}, {{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}}, {{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}}, {{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}}, {{0ull, 9223372036854775808ull, 18445154669448718262ull, 7523163845262640050ull}}, {{0ull, 1152921504606846976ull, 16139907686832836818ull, 4701977403289150031ull}}, {{0ull, 10664523917613334528ull, 15563198590113658118ull, 5877471754111437539ull}}, {{0ull, 4107282860161892352ull, 14842312219214684744ull, 7346839692639296924ull}}, {{0ull, 5134103575202365440ull, 106146200308804314ull, 9183549615799121156ull}}, {{0ull, 7820500752928866304ull, 9289713412047778504ull, 5739718509874450722ull}}, {{0ull, 9775625941161082880ull, 2388769728204947322ull, 7174648137343063403ull}}, {{0ull, 2996160389596577792ull, 16821020215538347865ull, 8968310171678829253ull}}, {{0ull, 13401815289566330880ull, 12818980643925161367ull, 5605193857299268283ull}}, {{0ull, 12140583093530525696ull, 11412039786479063805ull, 7006492321624085354ull}}, {{0ull, 1340670811630993408ull, 5041677696244053949ull, 8758115402030106693ull}}, {{0ull, 3143762266483064832ull, 5456891569366227670ull, 5473822126268816683ull}}, {{0ull, 13153074869958606848ull, 2209428443280396683ull, 6842277657836020854ull}}, {{0ull, 11829657569020870656ull, 11985157590955271662ull, 8552847072295026067ull}}, {{0ull, 2781849962210656256ull, 5184880485133350837ull, 5345529420184391292ull}}, {{0ull, 8088998471190708224ull, 6481100606416688546ull, 6681911775230489115ull}}, {{0ull, 887876052133609472ull, 3489689739593472779ull, 8352389719038111394ull}}, {{0ull, 16695823597079363584ull, 6792742105673308390ull, 5220243574398819621ull}}, {{0ull, 11646407459494428672ull, 13102613650519023392ull, 6525304467998524526ull}}, {{0ull, 14558009324368035840ull, 7154895026294003432ull, 8156630584998155658ull}}, {{0ull, 9098755827730022400ull, 9083495409861140049ull, 5097894115623847286ull}}, {{0ull, 15985130803089915904ull, 2130997225471649253ull, 6372367644529809108ull}}, {{0ull, 6146355448580231168ull, 2663746531839561567ull, 7965459555662261385ull}}, {{0ull, 10759001183003726336ull, 13194056628468195739ull, 4978412222288913365ull}}, {{0ull, 8837065460327270016ull, 2657512730303080962ull, 6223015277861141707ull}}, {{0ull, 1822959788554311712ull, 17156948968161014915ull, 7778769097326427133ull}}, {{0ull, 17280250932342302484ull, 13028936114314328273ull, 4861730685829016958ull}}, {{0ull, 7765255610145714393ull, 7062798106038134534ull, 6077163357286271198ull}}, {{4611686018427387904ull, 483197475827367183ull, 18051869669402443976ull, 7596454196607838997ull}}, {{9799832789158199296ull, 301998422392104489ull, 13588261552590221437ull, 4747783872879899373ull}}, {{16861477004875137024ull, 4989184046417518515ull, 3150268885455613084ull, 5934729841099874217ull}}, {{16465160237666533376ull, 6236480058021898144ull, 8549522125246904259ull, 7418412301374842771ull}}, {{10290725148541583360ull, 1591957027049992388ull, 3037608319065621210ull, 4636507688359276732ull}}, {{12863406435676979200ull, 11213318320667266293ull, 3797010398832026512ull, 5795634610449095915ull}}, {{2244199989314060288ull, 14016647900834082867ull, 134576980112645236ull, 7244543263061369894ull}}, {{16640308041924739072ull, 17520809876042603583ull, 9391593261995582353ull, 9055679078826712367ull}}, {{17317721553844043776ull, 4032977144885545383ull, 12787274816388320827ull, 5659799424266695229ull}}, {{17035465923877666816ull, 429535412679543825ull, 2149035465203237322ull, 7074749280333369037ull}}, {{7459274349564919808ull, 9760291302704205590ull, 7297980349931434556ull, 8843436600416711296ull}}, {{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull, 5527147875260444560ull}}, {{9286322599418134528ull, 5319384571023966665ull, 5701547148383933247ull, 6908934844075555700ull}}, {{16219589267700056064ull, 2037544695352570427ull, 7126933935479916559ull, 8636168555094444625ull}}, {{7831400283098841088ull, 8190994462236438373ull, 15983548755743417609ull, 5397605346934027890ull}}, {{14400936372300939264ull, 14850429096222935870ull, 10756063907824496203ull, 6747006683667534863ull}}, {{8777798428521398272ull, 13951350351851281934ull, 8833393866353232350ull, 8433758354584418579ull}}, {{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull, 5271098971615261612ull}}, {{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull, 6588873714519077015ull}}, {{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull, 8236092143148846269ull}}, {{6186205317594251264ull, 3867513670791002824ull, 2563215182517940054ull, 5147557589468028918ull}}, {{7732756646992814080ull, 14057764125343529338ull, 12427391015002200875ull, 6434446986835036147ull}}, {{442573771886241792ull, 12960519138252023769ull, 10922552750325363190ull, 8043058733543795184ull}}, {{11805823653497370880ull, 3488638442980126951ull, 6826595468953351994ull, 5026911708464871990ull}}, {{10145593548444325696ull, 13584170090579934497ull, 17756616373046465800ull, 6283639635581089987ull}}, {{17293677953982795024ull, 16980212613224918121ull, 17584084447880694346ull, 7854549544476362484ull}}, {{3891019693598165034ull, 15224318901692961730ull, 1766680743070658158ull, 4909093465297726553ull}}, {{14087146653852482101ull, 9807026590261426354ull, 6820036947265710602ull, 6136366831622158191ull}}, {{8385561280460826818ull, 3035411200972007135ull, 3913360165654750349ull, 7670458539527697739ull}}, {{12158504827929098618ull, 4202975009821198411ull, 140007094320525016ull, 4794036587204811087ull}}, {{10586445016483985368ull, 5253718762276498014ull, 14010066923182819982ull, 5992545734006013858ull}}, {{4009684233750205902ull, 15790520489700398326ull, 8289211617123749169ull, 7490682167507517323ull}}, {{16341110701376042401ull, 2951546278421667097ull, 2874914251488649279ull, 4681676354692198327ull}}, {{6591330321437889289ull, 17524490903309247584ull, 17428700869642975310ull, 5852095443365247908ull}}, {{8239162901797361611ull, 12682241592281783672ull, 3339132013344167522ull, 7315119304206559886ull}}, {{10298953627246702013ull, 6629429953497453782ull, 13397287053534985211ull, 9143899130258199857ull}}, {{1825159998601800855ull, 1837550711722214662ull, 1455775380818283901ull, 5714936956411374911ull}}, {{11504822035107026876ull, 6908624408080156231ull, 15654777281305018588ull, 7143671195514218638ull}}, {{9769341525456395691ull, 8635780510100195289ull, 10345099564776497427ull, 8929588994392773298ull}}, {{17635053499478717067ull, 3091519809598928103ull, 11077373246412698796ull, 5580993121495483311ull}}, {{17432130855921008430ull, 3864399761998660129ull, 9235030539588485591ull, 6976241401869354139ull}}, {{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull, 8720301752336692674ull}}, {{9583626965064323420ull, 2442601561758029738ull, 8944249865963774832ull, 5450188595210432921ull}}, {{2756161669475628467ull, 3053251952197537173ull, 15791998350882106444ull, 6812735744013041151ull}}, {{8056888105271923487ull, 3816564940246921466ull, 15128311920175245151ull, 8515919680016301439ull}}, {{9647241084222340084ull, 9302882115295407772ull, 16372723977750610075ull, 5322449800010188399ull}}, {{12059051355277925104ull, 7016916625691871811ull, 15854218953760874690ull, 6653062250012735499ull}}, {{10462128175670018476ull, 17994517818969615572ull, 15206087673773705458ull, 8316327812515919374ull}}, {{15762202146648537356ull, 15858259655283397636ull, 4892118777681178007ull, 5197704882822449609ull}}, {{1256008609601120079ull, 15211138550676859142ull, 10726834490528860413ull, 6497131103528062011ull}}, {{10793382798856175906ull, 5178865133063910215ull, 8796857094733687613ull, 8121413879410077514ull}}, {{13663393276926191798ull, 5542633717378637836ull, 10109721702635942662ull, 5075883674631298446ull}}, {{17079241596157739747ull, 16151664183578073103ull, 3413780091440152519ull, 6344854593289123058ull}}, {{16737365976769786780ull, 15577894211045203475ull, 13490597151154966457ull, 7931068241611403822ull}}, {{8155010726267422785ull, 2818654854262170316ull, 3819937201044466132ull, 4956917651007127389ull}}, {{10193763407834278482ull, 3523318567827712895ull, 9386607519732970569ull, 6196147063758909236ull}}, {{8130518241365460198ull, 9015834228212029023ull, 11733259399666213211ull, 7745183829698636545ull}}, {{11999102928494494480ull, 3329053383418824187ull, 415758097150301401ull, 4840739893561647841ull}}, {{10387192642190730196ull, 8773002747700918138ull, 5131383639865264655ull, 6050924866952059801ull}}, {{3760618765883636937ull, 6354567416198759769ull, 11025915568258968723ull, 7563656083690074751ull}}, {{13879601774745742846ull, 1665761625910530903ull, 13808726257802937308ull, 4727285052306296719ull}}, {{12737816200004790653ull, 2082202032388163629ull, 12649221803826283731ull, 5909106315382870899ull}}, {{2087212194723824604ull, 16437810595767368249ull, 11199841236355466759ull, 7386382894228588624ull}}, {{12833722667770860138ull, 17191160649995687011ull, 6999900772722166724ull, 4616489308892867890ull}}, {{11430467316286187268ull, 3042206738785057148ull, 17973248002757484214ull, 5770611636116084862ull}}, {{14288084145357734085ull, 13026130460336097243ull, 13243187966592079459ull, 7213264545145106078ull}}, {{13248419163269779702ull, 11670977056992733650ull, 7330612921385323516ull, 9016580681431382598ull}}, {{12891947995471000218ull, 16517732697475234339ull, 18416691131147990909ull, 5635362925894614123ull}}, {{11503248975911362368ull, 6812107816561879212ull, 18409177895507600733ull, 7044203657368267654ull}}, {{14379061219889202960ull, 13126820789129736919ull, 13788100332529725108ull, 8805254571710334568ull}}, {{15904442290071833706ull, 17427635030060861382ull, 8617562707831078192ull, 5503284107318959105ull}}, {{10657180825735016325ull, 3337799713866525112ull, 15383639403216235645ull, 6879105134148698881ull}}, {{13321476032168770406ull, 8783935660760544294ull, 5394491198738130844ull, 8598881417685873602ull}}, {{3714236501678093600ull, 14713331824830115992ull, 7983243017638719681ull, 5374300886053671001ull}}, {{4642795627097617000ull, 4556606725755481278ull, 14590739790475787506ull, 6717876107567088751ull}}, {{15026866570726797057ull, 14919130444049127405ull, 13626738719667346478ull, 8397345134458860939ull}}, {{11697634615917942113ull, 4712770509103316724ull, 6210868690578397597ull, 5248340709036788087ull}}, {{14622043269897427641ull, 10502649154806533809ull, 3151899844795609092ull, 6560425886295985109ull}}, {{4442496032089620839ull, 13128311443508167262ull, 8551560824421899269ull, 8200532357869981386ull}}, {{16611618075338176737ull, 10511037661406298490ull, 9956411533691074947ull, 5125332723668738366ull}}, {{11541150557317945113ull, 8527111058330485209ull, 3222142380259067876ull, 6406665904585922958ull}}, {{591380141365267679ull, 10658888822913106512ull, 13251050012178610653ull, 8008332380732403697ull}}, {{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull, 5005207737957752311ull}}, {{9685387772296391182ull, 1986188617563206094ull, 15540529592745350965ull, 6256509672447190388ull}}, {{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull, 7820637090558987986ull}}, {{6413787692499708635ull, 9045699637415760105ull, 5223509716691223585ull, 4887898181599367491ull}}, {{12628920634052023698ull, 15918810565197088035ull, 1917701127436641577ull, 6109872726999209364ull}}, {{11174464774137641718ull, 6063455151214196332ull, 2397126409295801972ull, 7637340908749011705ull}}, {{16207412520690801882ull, 13013031506363648515ull, 13027419051878345992ull, 4773338067968132315ull}}, {{15647579632436114448ull, 16266289382954560644ull, 11672587796420544586ull, 5966672584960165394ull}}, {{1112730466835591444ull, 11109489691838424998ull, 5367362708670904925ull, 7458340731200206743ull}}, {{14530514597054408365ull, 9249274066612709575ull, 10272130720560397434ull, 4661462957000129214ull}}, {{13551457227890622552ull, 2338220546411111161ull, 3616791363845720985ull, 5826828696250161518ull}}, {{3104263479581114478ull, 7534461701441276856ull, 13744361241661927039ull, 7283535870312701897ull}}, {{3880329349476393097ull, 4806391108374208166ull, 3345393496795245087ull, 9104419837890877372ull}}, {{16260263898704909398ull, 9921523470374961959ull, 11314242972351803987ull, 5690262398681798357ull}}, {{15713643854953748843ull, 7790218319541314545ull, 307745660157591272ull, 7112827998352247947ull}}, {{5806996763410022342ull, 9737772899426643182ull, 14219740130479152802ull, 8891034997940309933ull}}, {{17464431032413427676ull, 10697794080569039892ull, 11193180590763164453ull, 5556896873712693708ull}}, {{3383794716807232979ull, 17983928619138687770ull, 13991475738453955566ull, 6946121092140867135ull}}, {{13453115432863817032ull, 13256538737068583904ull, 12877658654640056554ull, 8682651365176083919ull}}, {{8408197145539885645ull, 12897022729095252844ull, 14966065686791117202ull, 5426657103235052449ull}}, {{10510246431924857056ull, 6897906374514290247ull, 4872524053206732791ull, 6783321379043815562ull}}, {{8526122021478683416ull, 4010696949715474905ull, 15314027103363191797ull, 8479151723804769452ull}}, {{16858041309492646895ull, 4812528602785865767ull, 347894902747219065ull, 5299469827377980908ull}}, {{16460865618438420715ull, 10627346771909720113ull, 434868628434023831ull, 6624337284222476135ull}}, {{6741023967765862181ull, 8672497446459762238ull, 14378643840824693501ull, 8280421605278095168ull}}, {{18048198035135827576ull, 7726153913251045350ull, 8986652400515433438ull, 5175263503298809480ull}}, {{13336875507065008661ull, 434320354709030880ull, 11233315500644291798ull, 6469079379123511850ull}}, {{16671094383831260826ull, 9766272480241064408ull, 4818272338950588939ull, 8086349223904389813ull}}, {{10419433989894538017ull, 3798077290936971303ull, 5317263221057812039ull, 5053968264940243633ull}}, {{8412606468940784617ull, 135910595243826225ull, 11258265044749652953ull, 6317460331175304541ull}}, {{15127444104603368675ull, 4781574262482170685ull, 237773250654902479ull, 7896825413969130677ull}}, {{11760495574590799374ull, 9906012941692438534ull, 2454451290873008001ull, 4935515883730706673ull}}, {{5477247431383723409ull, 16994202195542936072ull, 7679750132018647905ull, 6169394854663383341ull}}, {{6846559289229654262ull, 7407694689146506378ull, 14211373683450697786ull, 7711743568329229176ull}}, {{8890785574195921818ull, 9241495199143954390ull, 8882108552156686116ull, 4819839730205768235ull}}, {{1890109930890126464ull, 11551868998929942988ull, 6490949671768469741ull, 6024799662757210294ull}}, {{2362637413612658080ull, 604778193380265023ull, 17337059126565362985ull, 7530999578446512867ull}}, {{8394177411148993156ull, 11907201416931135399ull, 8529818944889657913ull, 4706874736529070542ull}}, {{5881035745508853541ull, 1048943715881755537ull, 1438901644257296584ull, 5883593420661338178ull}}, {{11962980700313454830ull, 1311179644852194421ull, 11021999092176396538ull, 7354491775826672722ull}}, {{1118667820109654825ull, 10862346592920018835ull, 4554126828365719864ull, 9193114719783340903ull}}, {{16840068452064391930ull, 6788966620575011771ull, 9763858295369656771ull, 5745696699864588064ull}}, {{16438399546653102009ull, 3874522257291376810ull, 12204822869212070964ull, 7182120874830735080ull}}, {{11324627396461601703ull, 4843152821614221013ull, 15256028586515088705ull, 8977651093538418850ull}}, {{9383735132002195016ull, 14556185559577357893ull, 14146703884999318344ull, 5611031933461511781ull}}, {{16341354933430131674ull, 18195231949471697366ull, 3848321800966984218ull, 7013789916826889727ull}}, {{11203321629932888785ull, 13520667899984845900ull, 198716232781342369ull, 8767237396033612159ull}}, {{16225448055562831299ull, 1532888409849446831ull, 7041726673129420837ull, 5479523372521007599ull}}, {{15670124051026151219ull, 6527796530739196443ull, 4190472322984388142ull, 6849404215651259499ull}}, {{14975969045355301120ull, 17383117700278771362ull, 626404385303097273ull, 8561755269564074374ull}}, {{13971666671774451104ull, 3946919535033150245ull, 14226560796096599508ull, 5351097043477546483ull}}, {{3629525284435900168ull, 4933649418791437807ull, 13171514976693361481ull, 6688871304346933104ull}}, {{18371964660827038922ull, 10778747791916685162ull, 16464393720866701851ull, 8361089130433666380ull}}, {{16094163931444287230ull, 4430874360734234274ull, 1066874038686912849ull, 5225680706521041488ull}}, {{10894332877450583230ull, 10150278969345180747ull, 1333592548358641061ull, 6532100883151301860ull}}, {{9006230078385841133ull, 17299534730108863838ull, 1666990685448301326ull, 8165126103939127325ull}}, {{1017207780563762804ull, 6200523187890651995ull, 3347712187618882281ull, 5103203814961954578ull}}, {{15106567780986867217ull, 12362340003290702897ull, 13408012271378378659ull, 6379004768702443222ull}}, {{5048151670951420310ull, 10841238985685990718ull, 7536643302368197516ull, 7973755960878054028ull}}, {{16990152849626801406ull, 15999146402908520006ull, 13933774100834899255ull, 4983597475548783767ull}}, {{12014319025178725949ull, 15387246985208262104ull, 12805531607616236165ull, 6229496844435979709ull}}, {{15017898781473407436ull, 5399000676228163918ull, 2171856454238131495ull, 7786871055544974637ull}}, {{4774500719993491744ull, 10291904450283684305ull, 3663253293112526136ull, 4866794409715609148ull}}, {{10579811918419252584ull, 12864880562854605381ull, 4579066616390657670ull, 6083493012144511435ull}}, {{17836450916451453633ull, 6857728666713480918ull, 1112147252060934184ull, 7604366265180639294ull}}, {{6536095804354770617ull, 4286080416695925574ull, 14530150087820247577ull, 4752728915737899558ull}}, {{17393491792298239079ull, 9969286539297294871ull, 8939315572920533663ull, 5940911144672374448ull}}, {{17130178721945410945ull, 7849922155694230685ull, 11174144466150667079ull, 7426138930840468060ull}}, {{13012204710429575793ull, 11823730374949976034ull, 16207212328198942732ull, 4641336831775292537ull}}, {{7041883851182193933ull, 14779662968687470043ull, 6423957354966514703ull, 5801671039719115672ull}}, {{4190668795550354512ull, 13862892692431949650ull, 8029946693708143379ull, 7252088799648894590ull}}, {{14461708031292718948ull, 12716929847112549158ull, 814061330280403416ull, 9065110999561118238ull}}, {{4426881501130561438ull, 7948081154445343224ull, 14343846386707415847ull, 5665694374725698898ull}}, {{5533601876413201798ull, 5323415424629291126ull, 8706435946529494001ull, 7082117968407123623ull}}, {{16140374382371278055ull, 11265955299214001811ull, 6271358914734479597ull, 8852647460508904529ull}}, {{7781890979768354833ull, 9347065071222445084ull, 15448814367777519508ull, 5532904662818065330ull}}, {{9727363724710443541ull, 11683831339028056355ull, 10087645922867123577ull, 6916130828522581663ull}}, {{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull, 8645163535653227079ull}}, {{13940571185267692384ull, 481081949064316707ull, 11916198643363904711ull, 5403227209783266924ull}}, {{12814027963157227576ull, 14436410491612559596ull, 14895248304204880888ull, 6754034012229083655ull}}, {{16017534953946534470ull, 18045513114515699495ull, 14007374361828713206ull, 8442542515286354569ull}}, {{16928488373857665900ull, 6666759678144924280ull, 1837079948501863898ull, 5276589072053971606ull}}, {{2713866393612530759ull, 17556821634535931159ull, 11519721972482105680ull, 6595736340067464507ull}}, {{17227391047297827161ull, 3499282969460362332ull, 9787966447175244197ull, 8244670425084330634ull}}, {{1543747367706366168ull, 4492894865126420410ull, 10729165047911915527ull, 5152919015677706646ull}}, {{11153056246487733517ull, 1004432562980637608ull, 4188084273035118601ull, 6441148769597133308ull}}, {{13941320308109666897ull, 5867226722153184914ull, 5235105341293898251ull, 8051435961996416635ull}}, {{13325011210995929715ull, 1361173692132046619ull, 966097829094992455ull, 5032147476247760397ull}}, {{12044577995317524239ull, 15536525170447221986ull, 5819308304796128472ull, 6290184345309700496ull}}, {{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull, 7862730431637125620ull}}, {{1339376026593886980ull, 7526224270984504273ull, 13769706649976751177ull, 4914206519773203512ull}}, {{6285906051669746629ull, 14019466357158018245ull, 17212133312470938971ull, 6142758149716504390ull}}, {{12469068583014571190ull, 12912646928020134902ull, 12291794603733897906ull, 7678447687145630488ull}}, {{3181481845956719090ull, 12682090348439972218ull, 7682371627333686191ull, 4799029804466019055ull}}, {{13200224344300674670ull, 11240926917122577368ull, 4991278515739719835ull, 5998787255582523819ull}}, {{16500280430375843337ull, 9439472627975833806ull, 1627412126247261890ull, 7498484069478154774ull}}, {{5700989250557514182ull, 10511356410912284033ull, 14852190634186702393ull, 4686552543423846733ull}}, {{11737922581624280632ull, 17750881532067742945ull, 4730180237451214279ull, 5858190679279808417ull}}, {{837345171748187077ull, 17576915896657290778ull, 10524411315241405753ull, 7322738349099760521ull}}, {{10270053501540009654ull, 8136086815539449760ull, 17767200162479145096ull, 9153422936374700651ull}}, {{6418783438462506034ull, 5085054259712156100ull, 8798657092335771733ull, 5720889335234187907ull}}, {{8023479298078132543ull, 10968003843067583029ull, 6386635346992326762ull, 7151111669042734884ull}}, {{14641035141025053582ull, 4486632766979702978ull, 7983294183740408453ull, 8938889586303418605ull}}, {{13762332981568046393ull, 5109988488576008313ull, 7295401874051449235ull, 5586805991439636628ull}}, {{3367858171677894279ull, 1775799592292622488ull, 9119252342564311544ull, 6983507489299545785ull}}, {{4209822714597367849ull, 2219749490365778110ull, 16010751446632777334ull, 8729384361624432231ull}}, {{16466197251905518618ull, 15222401486760775030ull, 16924248681786567689ull, 5455865226015270144ull}}, {{11359374528027122464ull, 5192943803168805076ull, 2708566778523657996ull, 6819831532519087681ull}}, {{14199218160033903080ull, 6491179753961006345ull, 7997394491581960399ull, 8524789415648859601ull}}, {{1956982322380107569ull, 10974516373866710822ull, 16527586603307195009ull, 5327993384780537250ull}}, {{11669599939829910269ull, 18329831485760776431ull, 11436111217279217953ull, 6659991730975671563ull}}, {{9975313906359999932ull, 9077231301918806827ull, 9683453003171634538ull, 8324989663719589454ull}}, {{3928728182261306006ull, 10284955582126642171ull, 1440472108554883682ull, 5203118539824743409ull}}, {{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull, 6503898174780929261ull}}, {{9597402298603831562ull, 18376086106286572344ull, 12627031211078628537ull, 8129872718476161576ull}}, {{5998376436627394726ull, 4567524788788025859ull, 7891894506924142836ull, 5081170449047600985ull}}, {{2886284527356855504ull, 5709405985985032324ull, 14476554152082566449ull, 6351463061309501231ull}}, {{3607855659196069380ull, 11748443500908678309ull, 13484006671675820157ull, 7939328826636876539ull}}, {{4560752796211237315ull, 9648620197281617895ull, 6121661160583693646ull, 4962080516648047837ull}}, {{1089254976836658739ull, 2837403209747246561ull, 12263762469157004962ull, 6202600645810059796ull}}, {{5973254739473211328ull, 12770126049038834009ull, 15329703086446256202ull, 7753250807262574745ull}}, {{15262499258239226840ull, 12593014799076659159ull, 2663535401387828270ull, 4845781754539109216ull}}, {{14466438054371645646ull, 6517896461991048141ull, 3329419251734785338ull, 6057227193173886520ull}}, {{4247989512682393345ull, 17370742614343585985ull, 4161774064668481672ull, 7571533991467358150ull}}, {{14184208491494965601ull, 10856714133964741240ull, 16436166845699964757ull, 4732208744667098843ull}}, {{17730260614368707001ull, 18182578685883314454ull, 15933522538697568042ull, 5915260930833873554ull}}, {{12939453731106107943ull, 13504851320499367260ull, 10693531136517184245ull, 7394076163542341943ull}}, {{17310530618796093273ull, 10746375084525798489ull, 13600985987964322009ull, 4621297602213963714ull}}, {{7803105218212952879ull, 18044654874084636016ull, 7777860448100626703ull, 5776622002767454643ull}}, {{9753881522766191098ull, 17944132574178407116ull, 5110639541698395475ull, 7220777503459318304ull}}, {{12192351903457738873ull, 17818479699295620991ull, 6388299427122994344ull, 9025971879324147880ull}}, {{14537748967302168652ull, 11136549812059763119ull, 3992687141951871465ull, 5641232424577592425ull}}, {{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull, 7051540530721990531ull}}, {{12338939219948015734ull, 107036512240675234ull, 7391495163906646141ull, 8814425663402488164ull}}, {{12323523030894897738ull, 2372740829364115973ull, 13843056514296429646ull, 5509016039626555102ull}}, {{1569345733336458460ull, 12189298073559920775ull, 8080448606015761249ull, 6886270049533193878ull}}, {{15796740221952736787ull, 1401564536667737256ull, 877188720664925754ull, 8607837561916492348ull}}, {{9872962638720460492ull, 5487663853844723689ull, 9771614987270354404ull, 5379898476197807717ull}}, {{16952889316827963519ull, 6859579817305904611ull, 16826204752515330909ull, 6724873095247259646ull}}, {{16579425627607566495ull, 13186160790059768668ull, 11809383903789387828ull, 8406091369059074558ull}}, {{1138768980399953251ull, 17464722530642131226ull, 2769178921440979488ull, 5253807105661921599ull}}, {{10646833262354717372ull, 3384159089593112416ull, 17296531707083388073ull, 6567258882077401998ull}}, {{13308541577943396715ull, 8841884880418778424ull, 12397292596999459283ull, 8209073602596752498ull}}, {{8317838486214622947ull, 3220335041048042563ull, 12359993891552049956ull, 5130671001622970311ull}}, {{5785612089340890780ull, 4025418801310053204ull, 10838306346012674541ull, 6413338752028712889ull}}, {{7232015111676113475ull, 9643459520064954409ull, 18159568950943231080ull, 8016673440035891111ull}}, {{16049224490866040682ull, 6027162200040596505ull, 18267259621980601281ull, 5010420900022431944ull}}, {{6226472558300387140ull, 12145638768478133536ull, 4387330453766199985ull, 6263026125028039931ull}}, {{7783090697875483925ull, 1346990405315503208ull, 872477048780362078ull, 7828782656285049914ull}}, {{4864431686172177453ull, 14676927058604353217ull, 5156984173915114202ull, 4892989160178156196ull}}, {{10692225626142609721ull, 9122786786400665713ull, 6446230217393892753ull, 6116236450222695245ull}}, {{17976968051105650055ull, 16015169501428220045ull, 12669473790169753845ull, 7645295562778369056ull}}, {{13541448041154725236ull, 12315323947606331480ull, 7918421118856096153ull, 4778309726736480660ull}}, {{16926810051443406545ull, 1559096879225750638ull, 9898026398570120192ull, 5972887158420600825ull}}, {{11935140527449482373ull, 1948871099032188298ull, 16984219016640038144ull, 7466108948025751031ull}}, {{12071148848083314388ull, 1218044436895117686ull, 17532665913041105696ull, 4666318092516094394ull}}, {{5865564023249367176ull, 1522555546118897108ull, 12692460354446606312ull, 5832897615645117993ull}}, {{7331955029061708970ull, 1903194432648621385ull, 2030517387776094178ull, 7291122019556397492ull}}, {{13776629804754524117ull, 11602365077665552539ull, 2538146734720117722ull, 9113902524445496865ull}}, {{6304550618757883621ull, 11863164191968358241ull, 13115556755268543336ull, 5696189077778435540ull}}, {{12492374291874742430ull, 14828955239960447801ull, 16394445944085679170ull, 7120236347223044425ull}}, {{1780409809561264326ull, 9312822013095783944ull, 6657999374824935251ull, 8900295434028805532ull}}, {{1112756130975790204ull, 3514670748971171013ull, 13384621646120360340ull, 5562684646268003457ull}}, {{6002631182147125659ull, 4393338436213963766ull, 2895719002368286713ull, 6953355807835004322ull}}, {{16726661014538682881ull, 10103359063694842611ull, 12843020789815134199ull, 8691694759793755402ull}}, {{8148320124872982849ull, 13232128442450358488ull, 12638574012061846778ull, 5432309224871097126ull}}, {{10185400156091228561ull, 7316788516208172302ull, 6574845478222532665ull, 6790386531088871408ull}}, {{3508378158259259893ull, 13757671663687603282ull, 8218556847778165831ull, 8487983163861089260ull}}, {{6804422367339425337ull, 15516073817445833907ull, 14359970066716129452ull, 5304989477413180787ull}}, {{3893841940746893768ull, 948348198097740768ull, 13338276564967773912ull, 6631236846766475984ull}}, {{4867302425933617209ull, 1185435247622175960ull, 16672845706209717390ull, 8289046058458094980ull}}, {{3042064016208510756ull, 14575955085046023687ull, 1197156529526297560ull, 5180653786536309363ull}}, {{17637638075542802157ull, 18219943856307529608ull, 15331503717190035662ull, 6475817233170386703ull}}, {{3600303520718951080ull, 13551557783529636203ull, 14552693628060156674ull, 8094771541462983379ull}}, {{18391090764945202089ull, 13081409633133410530ull, 6789590508323903969ull, 5059232213414364612ull}}, {{13765491419326726803ull, 2516703986134599451ull, 8486988135404879962ull, 6324040266767955765ull}}, {{12595178255731020600ull, 12369252019523025122ull, 15220421187683487856ull, 7905050333459944706ull}}, {{12483672428259275779ull, 7730782512201890701ull, 14124449260729567814ull, 4940656458412465441ull}}, {{1769532480041931012ull, 440106103397587569ull, 3820503520629796056ull, 6175820573015581802ull}}, {{6823601618479801669ull, 550132629246984461ull, 13999001437642020878ull, 7719775716269477252ull}}, {{6570594020763569995ull, 14178890948561529000ull, 17972747935381038856ull, 4824859822668423282ull}}, {{8213242525954462494ull, 17723613685701911250ull, 13242562882371522762ull, 6031074778335529103ull}}, {{1043181120588302309ull, 12931145070272613255ull, 11941517584537015549ull, 7538843472919411379ull}}, {{7569517228008770799ull, 10387808678134077236ull, 5157605481121940766ull, 4711777170574632112ull}}, {{9461896535010963499ull, 3761388810812820737ull, 6447006851402425958ull, 5889721463218290140ull}}, {{16439056687191092278ull, 13925108050370801729ull, 8058758564253032447ull, 7362151829022862675ull}}, {{6713762803706701635ull, 12794699044536114258ull, 5461762186888902655ull, 9202689786278578344ull}}, {{8807787770744076426ull, 14914215930476153267ull, 3413601366805564159ull, 5751681116424111465ull}}, {{6398048695002707629ull, 14031083894667803680ull, 8878687726934343103ull, 7189601395530139331ull}}, {{7997560868753384536ull, 12927168849907366696ull, 6486673640240540975ull, 8987001744412674164ull}}, {{4998475542970865335ull, 14997009558833186041ull, 13277543062005113917ull, 5616876090257921352ull}}, {{10859780447140969573ull, 4911203893259318839ull, 16596928827506392397ull, 7021095112822401690ull}}, {{8963039540498824062ull, 10750690885001536453ull, 11522788997528214688ull, 8776368891028002113ull}}, {{7907742722025458991ull, 6719181803125960283ull, 284214095814052324ull, 5485230556892501321ull}}, {{5272992384104435834ull, 8398977253907450354ull, 4966953638194953309ull, 6856538196115626651ull}}, {{15814612516985320601ull, 15110407585811700846ull, 1597006029316303732ull, 8570672745144533314ull}}, {{5272446804688437472ull, 220632704277537221ull, 5609814786750077737ull, 5356670465715333321ull}}, {{11202244524287934743ull, 4887476898774309430ull, 11623954501864985075ull, 6695838082144166651ull}}, {{4779433618505142621ull, 1497660105040498884ull, 9918257108903843440ull, 8369797602680208314ull}}, {{12210518048420489946ull, 936037565650311802ull, 10810596711492290054ull, 5231123501675130196ull}}, {{6039775523670836625ull, 10393418993917665561ull, 13513245889365362567ull, 6538904377093912745ull}}, {{12161405423015933685ull, 8380087723969694047ull, 3056499306424539497ull, 8173630471367390932ull}}, {{14518407417026040409ull, 16766769873549528539ull, 11133684103370112993ull, 5108519044604619332ull}}, {{13536323252855162607ull, 7123404286654746962ull, 13917105129212641242ull, 6385648805755774165ull}}, {{7697032029214177451ull, 18127627395173209511ull, 3561323356233637840ull, 7982061007194717707ull}}, {{11728174045899942763ull, 11329767121983255944ull, 18366728162141881314ull, 4988788129496698566ull}}, {{14660217557374928454ull, 4938836865624294122ull, 13735038165822575835ull, 6235985161870873208ull}}, {{9101899909863884759ull, 1561860063602979749ull, 17168797707278219794ull, 7794981452338591510ull}}, {{7994530452878621927ull, 5587848558179250247ull, 6118812548621499467ull, 4871863407711619694ull}}, {{5381477047670889504ull, 2373124679296674905ull, 16871887722631650142ull, 6089829259639524617ull}}, {{11338532328015999784ull, 12189777885975619439ull, 7254801598007398965ull, 7612286574549405772ull}}, {{14004111732651081721ull, 9924454187948456101ull, 13757623035609400161ull, 4757679109093378607ull}}, {{3670081610531688440ull, 17017253753362958031ull, 12585342776084362297ull, 5947098886366723259ull}}, {{18422660068446774261ull, 7436509136421533826ull, 11119992451678064968ull, 7433873607958404074ull}}, {{16125848561206621817ull, 4647818210263458641ull, 11561681300726178509ull, 4646171004974002546ull}}, {{6322252646226113560ull, 10421458781256711206ull, 5228729589052947328ull, 5807713756217503183ull}}, {{17126187844637417758ull, 13026823476570889007ull, 1924225967888796256ull, 7259642195271878979ull}}, {{16796048787369384293ull, 16283529345713611259ull, 16240340515143159032ull, 9074552744089848723ull}}, {{8191687482892171231ull, 10177205841071007037ull, 7844369812750780443ull, 5671595465056155452ull}}, {{14851295372042601943ull, 8109821282911370892ull, 9805462265938475554ull, 7089494331320194315ull}}, {{117375141343700812ull, 913904566784437808ull, 7645141813995706539ull, 8861867914150242894ull}}, {{73359463339813008ull, 16712091418736131294ull, 166527615319928682ull, 5538667446343901809ull}}, {{9315071366029542068ull, 11666742236565388309ull, 4819845537577298757ull, 6923334307929877261ull}}, {{16255525225964315489ull, 748369740424571674ull, 10636492940399011351ull, 8654167884912346576ull}}, {{14771389284655085085ull, 7385260115406439152ull, 6647808087749382094ull, 5408854928070216610ull}}, {{17492532109304740ull, 8203107403273133ull, 17533132146541503426ull, 6761068660087770762ull}}, {{4633551683564018828ull, 9233625921108867224ull, 12693043146322103474ull, 8451335825109713453ull}}, {{2895969802227511768ull, 10382702219120429919ull, 10238994975665008623ull, 5282084890693570908ull}}, {{17455020308066553422ull, 8366691755473149494ull, 12798743719581260779ull, 6602606113366963635ull}}, {{12595403348228415969ull, 5846678675914048964ull, 11386743631049188070ull, 8253257641708704544ull}}, {{17095499129497535789ull, 17489232227728444314ull, 7116714769405742543ull, 5158286026067940340ull}}, {{12146001875017143928ull, 17249854266233167489ull, 8895893461757178179ull, 6447857532584925425ull}}, {{1347444288489266198ull, 16950631814364071458ull, 15731552845623860628ull, 8059821915731156781ull}}, {{5453838698733179278ull, 1370772847122768853ull, 12138063537728606845ull, 5037388697331972988ull}}, {{11428984391843862001ull, 6325152077330848970ull, 15172579422160758556ull, 6296735871664966235ull}}, {{5062858452950051693ull, 7906440096663561213ull, 14354038259273560291ull, 7870919839581207794ull}}, {{5470129542307476261ull, 2635682051201031806ull, 13582959930473363086ull, 4919324899738254871ull}}, {{16061033964739121134ull, 12517974600856065565ull, 12367013894664315953ull, 6149156124672818589ull}}, {{6241234400641737705ull, 1812410195787918245ull, 1623709313048231230ull, 7686445155841023237ull}}, {{6206614509614780018ull, 14967814427649612615ull, 3320661329868838470ull, 4804028222400639523ull}}, {{3146582118591087118ull, 9486395997707239961ull, 17985884717618211800ull, 6005035278000799403ull}}, {{8544913666666246801ull, 11857994997134049951ull, 17870669878595376846ull, 7506294097500999254ull}}, {{12258100069307486107ull, 2799560854781393315ull, 6557482655694722625ull, 4691433810938124534ull}}, {{10710939068206969730ull, 8111137086904129548ull, 17420225356473179089ull, 5864292263672655667ull}}, {{13388673835258712162ull, 14750607377057549839ull, 17163595677164085957ull, 7330365329590819584ull}}, {{12124156275646002298ull, 4603201166039773587ull, 3007750522745555831ull, 9162956661988524481ull}}, {{5271754663065057485ull, 9794529756415940348ull, 13409059122784442154ull, 5726847913742827800ull}}, {{6589693328831321856ull, 3019790158665149627ull, 16761323903480552693ull, 7158559892178534750ull}}, {{3625430642611764415ull, 8386423716758824938ull, 11728282842495915058ull, 8948199865223168438ull}}, {{6877580170059740664ull, 9853200841401653490ull, 2718490758132559007ull, 5592624915764480274ull}}, {{17820347249429451638ull, 7704815033324678958ull, 12621485484520474567ull, 6990781144705600342ull}}, {{13052062024932038739ull, 5019332773228460794ull, 6553484818795817401ull, 8738476430882000428ull}}, {{12769224784009912116ull, 14666298029336257756ull, 13319300048602161683ull, 5461547769301250267ull}}, {{15961530980012390145ull, 13721186518242934291ull, 12037439042325314200ull, 6826934711626562834ull}}, {{15340227706588099777ull, 17151483147803667864ull, 5823426766051866942ull, 8533668389533203543ull}}, {{9587642316617562361ull, 6107990948949904511ull, 10557170756423498695ull, 5333542743458252214ull}}, {{7372866877344565047ull, 3023302667759992735ull, 3973091408674597561ull, 6666928429322815268ull}}, {{4604397578253318405ull, 8390814353127378823ull, 4966364260843246951ull, 8333660536653519085ull}}, {{9795277514049405859ull, 12161787998345693620ull, 5409820672240723296ull, 5208537835408449428ull}}, {{12244096892561757324ull, 15202234997932117025ull, 6762275840300904120ull, 6510672294260561785ull}}, {{1470063060420032942ull, 556049673705594666ull, 13064530818803518055ull, 8138340367825702231ull}}, {{5530475431189908493ull, 7265060073707078522ull, 15082860789393280640ull, 5086462729891063894ull}}, {{16136466325842161424ull, 9081325092133848152ull, 9630203949886824992ull, 6358078412363829868ull}}, {{1723838833593150164ull, 11351656365167310191ull, 12037754937358531240ull, 7947598015454787335ull}}, {{7994928298636800709ull, 7094785228229568869ull, 14441125863490163881ull, 4967248759659242084ull}}, {{14605346391723388790ull, 13480167553714348990ull, 18051407329362704851ull, 6209060949574052605ull}}, {{9033310952799460179ull, 12238523423715548334ull, 8729201106421217352ull, 7761326186967565757ull}}, {{1034133327072274708ull, 7649077139822217709ull, 7761593700726954797ull, 4850828866854728598ull}}, {{5904352677267731289ull, 14173032443205160040ull, 478620089053917688ull, 6063536083568410748ull}}, {{7380440846584664111ull, 17716290554006450050ull, 598275111317397110ull, 7579420104460513435ull}}, {{9224461547542802974ull, 6460995577826643377ull, 16514823009069230858ull, 4737137565287820896ull}}, {{16142262952855891621ull, 17299616509138080029ull, 2196784687626986956ull, 5921421956609776121ull}}, {{6342770635787700814ull, 3177776562713048421ull, 7357666877961121600ull, 7401777445762220151ull}}, {{6270074656581006961ull, 1986110351695655263ull, 11516070826366782856ull, 4626110903601387594ull}}, {{3225907302298870797ull, 2482637939619569079ull, 5171716496103702762ull, 5782638629501734493ull}}, {{17867442183155752209ull, 12326669461379237156ull, 11076331638557016356ull, 7228298286877168116ull}}, {{3887558655235138645ull, 15408336826724046446ull, 13845414548196270445ull, 9035372858596460145ull}}, {{16264782214804125365ull, 11936053525916222980ull, 1735855064981587172ull, 5647108036622787591ull}}, {{1884233694795605090ull, 14920066907395278726ull, 16004876886509147677ull, 7058885045778484488ull}}, {{11578664155349282171ull, 4815025578961934695ull, 1559352034426882981ull, 8823606307223105611ull}}, {{14154194124734383213ull, 5315233996064903136ull, 17115496086012659527ull, 5514753942014441006ull}}, {{17692742655917979016ull, 2032356476653741016ull, 12170998070661048601ull, 6893442427518051258ull}}, {{3669184246187922154ull, 7152131614244564175ull, 5990375551471534943ull, 8616803034397564073ull}}, {{9210769181508533202ull, 11387611286543934465ull, 15273199765738179099ull, 5385501896498477545ull}}, {{16125147495313054407ull, 9622828089752530177ull, 5256441651890560162ull, 6731877370623096932ull}}, {{6321376313859154296ull, 2805163075335886914ull, 6570552064863200203ull, 8414846713278871165ull}}, {{8562546214589359339ull, 17894127986580786985ull, 6412438049753194078ull, 5259279195799294478ull}}, {{15314868786664087078ull, 13144287946371207923ull, 17238919599046268406ull, 6574098994749118097ull}}, {{14531899964902720943ull, 7206987896109234096ull, 7713591443525671796ull, 8217623743436397622ull}}, {{9082437478064200590ull, 13727739471923047118ull, 209308633776156968ull, 5136014839647748514ull}}, {{2129674810725474929ull, 17159674339903808898ull, 9485007829074972018ull, 6420018549559685642ull}}, {{11885465550261619469ull, 12226220888024985314ull, 2632887749488939215ull, 8025023186949607053ull}}, {{12040101987340900073ull, 14558917082656697677ull, 3951397852644280961ull, 5015639491843504408ull}}, {{1215069428893961379ull, 4363588298038708385ull, 4939247315805351202ull, 6269549364804380510ull}}, {{6130522804544839627ull, 14677857409403161289ull, 15397431181611464810ull, 7836936706005475637ull}}, {{15360791798908994527ull, 13785346899304363709ull, 11929237497720859458ull, 4898085441253422273ull}}, {{5365931693354079447ull, 8008311587275678829ull, 1076488816868910611ull, 6122606801566777842ull}}, {{11319100635119987212ull, 5398703465667210632ull, 10568983057940914072ull, 7653258501958472302ull}}, {{7074437896949992008ull, 3374189666042006645ull, 1993928392785683391ull, 4783286563724045189ull}}, {{13454733389614877914ull, 18052795137834672018ull, 7104096509409492142ull, 5979108204655056486ull}}, {{7595044700163821584ull, 13342621885438564215ull, 18103492673616640986ull, 7473885255818820607ull}}, {{11664431965243470346ull, 12950824696826490538ull, 18232211948651482472ull, 4671178284886762879ull}}, {{5357167919699562125ull, 16188530871033113173ull, 18178578917386965186ull, 5838972856108453599ull}}, {{11308145918051840560ull, 11012291551936615658ull, 18111537628306318579ull, 7298716070135566999ull}}, {{4911810360710024891ull, 9153678421493381669ull, 18027736016955510320ull, 9123395087669458749ull}}, {{5375724484657459509ull, 5721049013433363543ull, 13573178019810887902ull, 5702121929793411718ull}}, {{2107969587394436483ull, 16374683303646480237ull, 7743100487908834069ull, 7127652412241764648ull}}, {{7246648002670433507ull, 6633296074275936584ull, 9678875609886042587ull, 8909565515302205810ull}}, {{4529155001669020942ull, 1839967037208766413ull, 10660983274606164521ull, 5568478447063878631ull}}, {{10273129770513664082ull, 6911644814938345920ull, 8714543074830317747ull, 6960598058829848289ull}}, {{12841412213142080102ull, 4027870000245544496ull, 15504864861965285088ull, 8700747573537310361ull}}, {{8025882633213800064ull, 2517418750153465310ull, 2773011511087221324ull, 5437967233460818976ull}}, {{808981254662474272ull, 3146773437691831638ull, 3466264388859026655ull, 6797459041826023720ull}}, {{10234598605182868647ull, 17768524852396953259ull, 4332830486073783318ull, 8496823802282529650ull}}, {{4090781119025598953ull, 6493642014320707883ull, 7319705072223502478ull, 5310514876426581031ull}}, {{501790380354610787ull, 17340424554755660662ull, 4537945321851990193ull, 6638143595533226289ull}}, {{9850610012298039291ull, 7840472638162412115ull, 10284117670742375646ull, 8297679494416532861ull}}, {{3850788248472580605ull, 288609380424119668ull, 8733416553427678731ull, 5186049684010333038ull}}, {{4813485310590725757ull, 14195819780812313297ull, 1693398654929822605ull, 6482562105012916298ull}}, {{10628542656665795100ull, 3909716670733227909ull, 11340120355517054065ull, 8103202631266145372ull}}, {{8948682169629815889ull, 13972787965276737203ull, 16310947259052934598ull, 5064501644541340857ull}}, {{6574166693609881958ull, 8242612919741145696ull, 6553626018534004536ull, 6330627055676676072ull}}, {{8217708367012352447ull, 10303266149676432120ull, 8192032523167505670ull, 7913283819595845090ull}}, {{5136067729382720280ull, 1827855325120382171ull, 9731706345407078948ull, 4945802387247403181ull}}, {{1808398643301012445ull, 2284819156400477714ull, 16776318950186236589ull, 6182252984059253976ull}}, {{11483870340981041365ull, 7467709963927985046ull, 2523654614023244120ull, 7727816230074067471ull}}, {{2565732944685762949ull, 4667318727454990654ull, 8494813161405609431ull, 4829885143796292169ull}}, {{12430538217711979494ull, 1222462390891350413ull, 15230202470184399693ull, 6037356429745365211ull}}, {{1703114716857810656ull, 6139764007041575921ull, 14426067069303111712ull, 7546695537181706514ull}}, {{12593661744104601420ull, 3837352504400984950ull, 13627977936741832724ull, 4716684710738566571ull}}, {{6518705143275975967ull, 4796690630501231188ull, 12423286402499903001ull, 5895855888423208214ull}}, {{8148381429094969958ull, 10607549306553926889ull, 6305735966270102943ull, 7369819860529010268ull}}, {{14797162804796100352ull, 8647750614765020707ull, 7882169957837628679ull, 9212274825661262835ull}}, {{6942383743783868768ull, 12322373161869219798ull, 2620513214434823972ull, 5757671766038289272ull}}, {{17901351716584611768ull, 15402966452336524747ull, 3275641518043529965ull, 7197089707547861590ull}}, {{17765003627303376806ull, 5418650010138492222ull, 13317923934409188265ull, 8996362134434826987ull}}, {{6491441248637222600ull, 14915871302405027399ull, 6017859449792048713ull, 5622726334021766867ull}}, {{3502615542369140346ull, 4809781072724120537ull, 2910638293812672988ull, 7028407917527208584ull}}, {{8989955446388813336ull, 6012226340905150671ull, 3638297867265841235ull, 8785509896909010730ull}}, {{12536251181634090191ull, 1451798453852025217ull, 6885622185468538676ull, 5490943685568131706ull}}, {{1835255921760449027ull, 1814748067315031522ull, 17830399768690449153ull, 6863679606960164632ull}}, {{11517441939055337091ull, 6880121102571177306ull, 3841255637153509825ull, 8579599508700205791ull}}, {{11810087230336973586ull, 15829290735175455576ull, 9318313800862025496ull, 5362249692937628619ull}}, {{14762609037921216983ull, 1339869345259767854ull, 7036206232650143967ull, 6702812116172035774ull}}, {{9229889260546745420ull, 15509894736856873530ull, 18018629827667455766ull, 8378515145215044717ull}}, {{10380366806269103792ull, 5081998192108158052ull, 13567486651505853806ull, 5236571965759402948ull}}, {{12975458507836379740ull, 15575869776989973373ull, 16959358314382317257ull, 6545714957199253685ull}}, {{2384265079513310963ull, 5634779165955303005ull, 7364139837695732860ull, 8182143696499067107ull}}, {{3796008683909513304ull, 12745109015576840186ull, 2296744389346139085ull, 5113839810311916942ull}}, {{13968382891741667438ull, 2096328214188886520ull, 12094302523537449665ull, 6392299762889896177ull}}, {{17460478614677084297ull, 7232096286163496054ull, 1282820099139648369ull, 7990374703612370222ull}}, {{6301113115745789782ull, 16049275224920654794ull, 14636820617244443942ull, 4993984189757731388ull}}, {{17099763431537013035ull, 10838221994296042684ull, 18296025771555554928ull, 6242480237197164235ull}}, {{2927960215711714678ull, 13547777492870053356ull, 18258346196017055756ull, 7803100296496455294ull}}, {{11053347171674597482ull, 17690732969898559155ull, 6799780354083271943ull, 4876937685310284559ull}}, {{9204997946165858948ull, 17501730193945811040ull, 3888039424176702025ull, 6096172106637855699ull}}, {{11506247432707323685ull, 8042104687150100088ull, 248363261793489628ull, 7620215133297319624ull}}, {{7191404645442077303ull, 14249687466323588363ull, 155227038620931017ull, 4762634458310824765ull}}, {{4377569788375208725ull, 3977051277622321742ull, 4805719816703551676ull, 5953293072888530956ull}}, {{14695334272323786714ull, 4971314097027902177ull, 6007149770879439595ull, 7441616341110663695ull}}, {{2267054892561284840ull, 801228301428744909ull, 10671997634440731603ull, 4651010213194164809ull}}, {{7445504634128993954ull, 14836593432068094848ull, 17951683061478302407ull, 5813762766492706011ull}}, {{9306880792661242443ull, 13934055771657730656ull, 17827917808420490105ull, 7267203458115882514ull}}, {{11633600990826553054ull, 3582511659289999608ull, 13061525223670836824ull, 9084004322644853143ull}}, {{7271000619266595659ull, 2239069787056249755ull, 15080982292435354871ull, 5677502701653033214ull}}, {{4477064755655856669ull, 16633895289102475906ull, 9627855828689417780ull, 7096878377066291518ull}}, {{14819702981424596644ull, 2345625037668543266ull, 2811447749006996418ull, 8871097971332864398ull}}, {{13874000381817760807ull, 6077701666970227445ull, 15592212898411536473ull, 5544436232083040248ull}}, {{3507442421990037297ull, 12208813102140172211ull, 1043522049304868975ull, 6930545290103800311ull}}, {{18219361082769710333ull, 10649330359247827359ull, 15139460616913249931ull, 8663181612629750388ull}}, {{18304629704372150814ull, 4349988465316198147ull, 238790848716005399ull, 5414488507893593993ull}}, {{18269101112037800613ull, 825799563217859780ull, 4910174579322394653ull, 6768110634866992491ull}}, {{4389632316337699151ull, 5643935472449712630ull, 1526032205725605412ull, 8460138293583740614ull}}, {{16578578252993225681ull, 12750831707135846201ull, 14788828183860667094ull, 5287586433489837883ull}}, {{6888164760959368390ull, 6715167597065031944ull, 13874349211398445964ull, 6609483041862297354ull}}, {{8610205951199210487ull, 8393959496331289930ull, 8119564477393281647ull, 8261853802327871693ull}}, {{9993064737926894458ull, 12163753712848138062ull, 7380570807584494981ull, 5163658626454919808ull}}, {{3267958885553842265ull, 1369634085778008866ull, 9225713509480618727ull, 6454573283068649760ull}}, {{13308320643797078639ull, 15547100662504674794ull, 11532141886850773408ull, 8068216603835812200ull}}, {{12929386420800562054ull, 9716937914065421746ull, 7207588679281733380ull, 5042635377397382625ull}}, {{6938360989145926759ull, 12146172392581777183ull, 13621171867529554629ull, 6303294221746728281ull}}, {{4061265218005020544ull, 1347657435445057767ull, 3191406779129779575ull, 7879117777183410352ull}}, {{9455819788894219696ull, 7759814924794242960ull, 1994629236956112234ull, 4924448610739631470ull}}, {{11819774736117774620ull, 476396619138027892ull, 11716658583049916101ull, 6155560763424539337ull}}, {{14774718420147218275ull, 5207181792349922769ull, 810765173530231414ull, 7694450954280674172ull}}, {{2316669984950929566ull, 17089546675500865443ull, 9730100270311170441ull, 4809031846425421357ull}}, {{16730895536470825670ull, 7526875289093918091ull, 16774311356316350956ull, 6011289808031776696ull}}, {{16301933402161144183ull, 9408594111367397614ull, 2521145121685887079ull, 7514112260039720871ull}}, {{5577022357923327211ull, 12797900347245705365ull, 8493244728694761280ull, 4696320162524825544ull}}, {{11582963965831546917ull, 15997375434057131706ull, 10616555910868451600ull, 5870400203156031930ull}}, {{5255332920434657838ull, 1549975218861863017ull, 4047322851730788693ull, 7338000253945039913ull}}, {{11180852168970710202ull, 6549155042004716675ull, 9670839583090873770ull, 9172500317431299891ull}}, {{4682189596392999924ull, 8704907919680335826ull, 3738431730218102154ull, 5732812698394562432ull}}, {{15076109032346025713ull, 1657762862745643974ull, 4673039662772627693ull, 7166015872993203040ull}}, {{9621764253577756333ull, 6683889596859442872ull, 5841299578465784616ull, 8957519841241503800ull}}, {{6013602658486097709ull, 4177430998037151795ull, 3650812236541115385ull, 5598449900775939875ull}}, {{2905317304680234232ull, 9833474765973827648ull, 18398573350958557943ull, 6998062375969924843ull}}, {{3631646630850292789ull, 7680157439039896656ull, 18386530670270809525ull, 8747577969962406054ull}}, {{2269779144281432994ull, 7105941408613629362ull, 6879895650491868049ull, 5467236231226503784ull}}, {{12060595967206567050ull, 13494112779194424606ull, 8599869563114835061ull, 6834045289033129730ull}}, {{5852372922153433004ull, 3032582918710867046ull, 1526464917038768019ull, 8542556611291412163ull}}, {{17492791131628059340ull, 18036265388690149567ull, 17094941637645087675ull, 5339097882057132601ull}}, {{17254302896107686271ull, 17933645717435299055ull, 7533618991774195882ull, 6673872352571415752ull}}, {{16956192601707219934ull, 13193685109939348011ull, 9417023739717744853ull, 8342340440714269690ull}}, {{8291777366853318507ull, 10551896202925786459ull, 10497325855750978437ull, 5213962775446418556ull}}, {{5753035690139260230ull, 17801556272084620978ull, 13121657319688723046ull, 6517453469308023195ull}}, {{16414666649528851095ull, 13028573303251000414ull, 11790385631183515904ull, 8146816836635028994ull}}, {{5647480637528144031ull, 8142858314531875259ull, 11980677037917085344ull, 5091760522896893121ull}}, {{2447664778482792134ull, 10178572893164844074ull, 1140788242114192968ull, 6364700653621116402ull}}, {{12282953009958265975ull, 12723216116456055092ull, 10649357339497517018ull, 7955875817026395502ull}}, {{16900217668078692043ull, 12563696091212422336ull, 2044162318758560232ull, 4972422385641497189ull}}, {{2678528011388813437ull, 15704620114015527921ull, 7166888916875588194ull, 6215527982051871486ull}}, {{7959846032663404701ull, 10407403105664634093ull, 18181983182949261051ull, 7769409977564839357ull}}, {{7280746779628321890ull, 4198783931826702356ull, 13669582498556982109ull, 4855881235978024598ull}}, {{9100933474535402362ull, 9860165933210765849ull, 7863606086341451828ull, 6069851544972530748ull}}, {{15987852861596640857ull, 12325207416513457311ull, 9829507607926814785ull, 7587314431215663435ull}}, {{16909937066138982392ull, 785725607679828963ull, 3837599245740565289ull, 4742071519509789647ull}}, {{16525735314246340086ull, 5593843028027174108ull, 185313038748318707ull, 5927589399387237059ull}}, {{2210425069098373491ull, 2380617766606579732ull, 14066699353717562096ull, 7409486749234046323ull}}, {{10604887705041259240ull, 1487886104129112332ull, 6485844086859782358ull, 4630929218271278952ull}}, {{13256109631301574050ull, 11083229667016166223ull, 8107305108574727947ull, 5788661522839098690ull}}, {{11958451020699579658ull, 9242351065342819875ull, 910759348863634126ull, 7235826903548873363ull}}, {{10336377757447086669ull, 2329566794823749036ull, 14973507241361706370ull, 9044783629436091703ull}}, {{15683608135259204976ull, 6067665265192231051ull, 16275971053492148337ull, 5652989768397557314ull}}, {{14992824150646618316ull, 12196267599917676718ull, 11121591780010409613ull, 7066237210496946643ull}}, {{9517658151453497087ull, 1410276444614932186ull, 9290303706585624113ull, 8832796513121183304ull}}, {{10560222363085823583ull, 12410637823952802376ull, 5806439816616015070ull, 5520497820700739565ull}}, {{13200277953857279479ull, 6289925243086227162ull, 11869735789197406742ull, 6900622275875924456ull}}, {{7276975405466823541ull, 17085778590712559761ull, 14837169736496758427ull, 8625777844844905570ull}}, {{16077324674485234473ull, 8372768609981655898ull, 13884917103737861921ull, 5391111153028065981ull}}, {{10873283806251767283ull, 15077646780904457777ull, 3521088324390163689ull, 6738888941285082477ull}}, {{18203290776242097008ull, 5012000420848408509ull, 9013046423915092516ull, 8423611176606353096ull}}, {{13682899744365004582ull, 12355872299885031126ull, 5633154014946932822ull, 5264756985378970685ull}}, {{7880252643601479920ull, 6221468338001513100ull, 11653128537111053932ull, 6580946231723713356ull}}, {{9850315804501849900ull, 7776835422501891375ull, 14566410671388817415ull, 8226182789654641695ull}}, {{13073976405454738043ull, 11778051166704763965ull, 16021535697259092740ull, 5141364243534151059ull}}, {{2507412451536258842ull, 14722563958380954957ull, 15415233603146478021ull, 6426705304417688824ull}}, {{7745951582847711457ull, 4568146892694029984ull, 822297930223545911ull, 8033381630522111031ull}}, {{4841219739279819661ull, 9772620835574850596ull, 7431465234030798050ull, 5020863519076319394ull}}, {{6051524674099774576ull, 2992404007613787437ull, 65959505683721755ull, 6276079398845399243ull}}, {{12176091861052106123ull, 17575563064799398008ull, 13917507437386815905ull, 7845099248556749053ull}}, {{7610057413157566327ull, 4067197887858541899ull, 11004285157580453893ull, 4903187030347968158ull}}, {{4900885748019570005ull, 9695683378250565278ull, 4531984410120791558ull, 6128983787934960198ull}}, {{15349479221879238314ull, 2896232185958430789ull, 14888352549505765256ull, 7661229734918700247ull}}, {{11899267522888217898ull, 1810145116224019243ull, 16222749371082185141ull, 4788268584324187654ull}}, {{10262398385182884469ull, 6874367413707411958ull, 11055064676997955618ull, 5985335730405234568ull}}, {{3604625944623829778ull, 17816331303989040756ull, 13818830846247444522ull, 7481669663006543210ull}}, {{11476263252244669419ull, 15746893083420538376ull, 13248455297332040730ull, 4676043539379089506ull}}, {{14345329065305836774ull, 10460244317420897162ull, 7337197084810275105ull, 5845054424223861883ull}}, {{8708289294777520160ull, 17686991415203509357ull, 4559810337585455977ull, 7306318030279827354ull}}, {{15497047636899288103ull, 8273681213722222984ull, 14923134958836595780ull, 9132897537849784192ull}}, {{9685654773062055065ull, 14394422795431165173ull, 9326959349272872362ull, 5708060961156115120ull}}, {{16718754484754956735ull, 8769656457434180658ull, 11658699186591090453ull, 7135076201445143900ull}}, {{11675071069088920111ull, 15573756590220113727ull, 14573373983238863066ull, 8918845251806429875ull}}, {{14214448445821656925ull, 14345283887314958983ull, 6802515730310595464ull, 5574278282379018672ull}}, {{13156374538849683252ull, 17931604859143698729ull, 8503144662888244330ull, 6967847852973773340ull}}, {{2610410118279940353ull, 13191134037074847604ull, 10628930828610305413ull, 8709809816217216675ull}}, {{10854878360779738529ull, 10550301782385473704ull, 4337238758667746931ull, 5443631135135760422ull}}, {{13568597950974673161ull, 8576191209554454226ull, 14644920485189459472ull, 6804538918919700527ull}}, {{7737375401863565643ull, 10720239011943067783ull, 13694464588059436436ull, 8505673648649625659ull}}, {{11753388653805810383ull, 15923521419319193172ull, 6253197358323453820ull, 5316046030406016037ull}}, {{14691735817257262979ull, 1457657700439439849ull, 12428182716331705180ull, 6645057538007520046ull}}, {{4529611716289415012ull, 1822072125549299812ull, 6311856358559855667ull, 8306321922509400058ull}}, {{12054379359535660190ull, 17279696142964170046ull, 8556596242527297695ull, 5191451201568375036ull}}, {{5844602162564799430ull, 16987934160277824654ull, 10695745303159122119ull, 6489314001960468795ull}}, {{16529124740060775095ull, 16623231681919892913ull, 8757995610521514745ull, 8111642502450585994ull}}, {{3413173934896902579ull, 3471990773558851215ull, 10085433275003334620ull, 5069776564031616246ull}}, {{18101525473903291935ull, 4339988466948564018ull, 3383419556899392467ull, 6337220705039520308ull}}, {{13403534805524339111ull, 813299565258317119ull, 4229274446124240584ull, 7921525881299400385ull}}, {{15294738281093793801ull, 508312228286448199ull, 14172511574896120125ull, 4950953675812125240ull}}, {{14506736832939854347ull, 5247076303785448153ull, 17715639468620150156ull, 6188692094765156550ull}}, {{4298362985892654221ull, 6558845379731810192ull, 12921177298920411887ull, 7735865118456445688ull}}, {{2686476866182908888ull, 11016807389973463226ull, 8075735811825257429ull, 4834915699035278555ull}}, {{12581468119583411918ull, 18382695255894216936ull, 5482983746354183882ull, 6043644623794098194ull}}, {{15726835149479264898ull, 13754997033012995362ull, 16077101719797505661ull, 7554555779742622742ull}}, {{14440957986851928465ull, 10902716154846816053ull, 5436502556446053134ull, 4721597362339139214ull}}, {{4216139428282746870ull, 4405023156703744259ull, 16019000232412342226ull, 5901996702923924017ull}}, {{658488266926045683ull, 14729650982734456132ull, 6188692235233264070ull, 7377495878654905022ull}}, {{823110333657557103ull, 9188691691563294357ull, 16959237330896355896ull, 9221869848318631277ull}}, {{2820286967749667142ull, 5742932307227058973ull, 12905366341023916387ull, 5763668655199144548ull}}, {{8137044728114471831ull, 2566979365606435812ull, 16131707926279895484ull, 7204585818998930685ull}}, {{10171305910143089789ull, 3208724207008044765ull, 6329576852567705643ull, 9005732273748663357ull}}, {{8662909203053125070ull, 18146353693875885642ull, 6261828542068509978ull, 5628582671092914598ull}}, {{1605264466961630530ull, 13459570080490081245ull, 17050657714440413281ull, 7035728338866143247ull}}, {{6618266602129426066ull, 2989404545330437844ull, 16701636124623128698ull, 8794660423582679059ull}}, {{13359788663185667099ull, 6480063859258911556ull, 8132679568675761484ull, 5496662764739174412ull}}, {{16699735828982083874ull, 8100079824073639445ull, 10165849460844701855ull, 6870828455923968015ull}}, {{7039611730945441131ull, 5513413761664661403ull, 8095625807628489415ull, 8588535569904960019ull}}, {{2093914322627206755ull, 10363412628681495233ull, 2753923120554111932ull, 5367834731190600012ull}}, {{7229078921711396347ull, 12954265785851869041ull, 3442403900692639915ull, 6709793413988250015ull}}, {{13648034670566633338ull, 11581146213887448397ull, 18138062931147963606ull, 8387241767485312518ull}}, {{10835864678317839788ull, 2626530365252267344ull, 6724603313540089350ull, 5242026104678320324ull}}, {{13544830847897299735ull, 12506534993420109988ull, 8405754141925111687ull, 6552532630847900405ull}}, {{16931038559871624669ull, 11021482723347749581ull, 15118878695833777513ull, 8190665788559875506ull}}, {{12887742109133459370ull, 18417641748160813248ull, 14060985203323498849ull, 5119166117849922191ull}}, {{16109677636416824213ull, 9186994129918852848ull, 12964545485726985658ull, 6398957647312402739ull}}, {{1690352971811478650ull, 2260370625543790253ull, 11593995838731344169ull, 7998697059140503424ull}}, {{3362313616595868108ull, 12941946687033338668ull, 7246247399207090105ull, 4999185661962814640ull}}, {{4202892020744835135ull, 2342375303509509623ull, 9057809249008862632ull, 6248982077453518300ull}}, {{641929007503656015ull, 2927969129386887029ull, 11322261561261078290ull, 7811227596816897875ull}}, {{2707048638903478962ull, 6441666724294192297ull, 4770570466574479979ull, 4882017248010561172ull}}, {{7995496817056736606ull, 3440397386940352467ull, 5963213083218099974ull, 6102521560013201465ull}}, {{5382685002893532853ull, 13523868770530216392ull, 12065702372450012871ull, 7628151950016501831ull}}, {{3364178126808458034ull, 15369947009222467101ull, 14458593010422339900ull, 4767594968760313644ull}}, {{8816908676937960446ull, 765689687818532260ull, 18073241263027924876ull, 5959493710950392055ull}}, {{11021135846172450557ull, 957112109773165325ull, 17979865560357518191ull, 7449367138687990069ull}}, {{9194052913071475550ull, 7515724096249310184ull, 13543258984437142821ull, 4655854461679993793ull}}, {{11492566141339344438ull, 14006341138739025634ull, 3094015675264264814ull, 5819818077099992242ull}}, {{5142335639819404739ull, 8284554386569006235ull, 13090891630935106826ull, 7274772596374990302ull}}, {{1816233531346868020ull, 1132320946356481986ull, 7140242501814107725ull, 9093465745468737878ull}}, {{5746831975519180417ull, 3013543600686495193ull, 18297709618915981040ull, 5683416090917961173ull}}, {{11795225987826363425ull, 3766929500858118991ull, 9037078968362812588ull, 7104270113647451467ull}}, {{10132346466355566377ull, 4708661876072648739ull, 6684662692026127831ull, 8880337642059314334ull}}, {{4026873532258535034ull, 9860442700186487318ull, 18012972237798493606ull, 5550211026287071458ull}}, {{14256963952177944600ull, 3102181338378333339ull, 13292843260393341200ull, 6937763782858839323ull}}, {{13209518921795042846ull, 3877726672972916674ull, 12004368057064288596ull, 8672204728573549154ull}}, {{12867635344549289683ull, 11646951207462848729ull, 12114416054092568276ull, 5420127955358468221ull}}, {{2249486125404448391ull, 14558689009328560912ull, 1307962012333546633ull, 6775159944198085277ull}}, {{2811857656755560489ull, 4363303206378537428ull, 6246638533844321196ull, 8468949930247606596ull}}, {{10980783072327001114ull, 11950436540841361700ull, 13127521120507476555ull, 5293093706404754122ull}}, {{13725978840408751392ull, 10326359657624314221ull, 7186029363779569886ull, 6616367133005942653ull}}, {{3322415495228775528ull, 3684577535175616969ull, 13594222723151850262ull, 8270458916257428316ull}}, {{13605724730586454465ull, 16137919014766924317ull, 17719761238824682221ull, 5169036822660892697ull}}, {{3172097857950904369ull, 6337340713176491685ull, 8314643493248689065ull, 6461296028326115872ull}}, {{8576808340866018366ull, 12533361909898002510ull, 10393304366560861331ull, 8076620035407644840ull}}, {{748819194613873575ull, 5527508184472557617ull, 6495815229100538332ull, 5047887522129778025ull}}, {{5547710011694729872ull, 6909385230590697021ull, 12731455054803060819ull, 6309859402662222531ull}}, {{11546323533045800244ull, 4025045519810983372ull, 11302632800076438120ull, 7887324253327778164ull}}, {{16439824245008400961ull, 2515653449881864607ull, 16287517536902549633ull, 4929577658329861352ull}}, {{15938094287833113297ull, 7756252830779718663ull, 1912652847418635425ull, 6161972072912326691ull}}, {{15310931841364003717ull, 14307002056902036233ull, 16225874114555457993ull, 7702465091140408363ull}}, {{2651803373211420467ull, 2024347257922690790ull, 7835328312383467294ull, 4814040681962755227ull}}, {{12538126253369051392ull, 11753806109258139295ull, 5182474372051946213ull, 6017550852453444034ull}}, {{11060971798283926336ull, 857199581290510407ull, 15701465001919708575ull, 7521938565566805042ull}}, {{13830636401568535816ull, 7453278765947650860ull, 14425101644627205763ull, 4701211603479253151ull}}, {{17288295501960669770ull, 4704912439007175671ull, 13419691037356619300ull, 5876514504349066439ull}}, {{16998683359023449308ull, 5881140548758969589ull, 12162927778268386221ull, 7345643130436333049ull}}, {{7413296143497147923ull, 11963111704376099891ull, 1368601667553319064ull, 9182053913045416312ull}}, {{2327467080472023500ull, 7476944815235062432ull, 855376042220824415ull, 5738783695653385195ull}}, {{2909333850590029375ull, 4734495000616440136ull, 14904278108058194231ull, 7173479619566731493ull}}, {{3636667313237536719ull, 1306432732343162266ull, 4795289579790579077ull, 8966849524458414367ull}}, {{6884603089200848354ull, 3122363466928170368ull, 9914585015010193779ull, 5604280952786508979ull}}, {{8605753861501060442ull, 17738012388942376672ull, 7781545250335354319ull, 7005351190983136224ull}}, {{10757192326876325552ull, 17560829467750582936ull, 9726931562919192899ull, 8756688988728920280ull}}, {{6723245204297703470ull, 8669675408130420383ull, 6079332226824495562ull, 5472930617955575175ull}}, {{3792370486944741434ull, 1613722223308249671ull, 2987479265103231549ull, 6841163272444468969ull}}, {{128777090253538888ull, 6628838797562699993ull, 8346035099806427340ull, 8551454090555586211ull}}, {{11609700727476931565ull, 13366396285331463303ull, 2910428928165323135ull, 5344658806597241382ull}}, {{9900439890918776552ull, 12096309338236941225ull, 12861408197061429727ull, 6680823508246551727ull}}, {{16987235882075858594ull, 10508700654368788627ull, 11465074227899399255ull, 8351029385308189659ull}}, {{8311179417083717670ull, 13485466936621574748ull, 4859828383223430582ull, 5219393365817618537ull}}, {{10388974271354647087ull, 7633461633922192627ull, 10686471497456676132ull, 6524241707272023171ull}}, {{8374531820765920954ull, 9541827042402740784ull, 8746403353393457261ull, 8155302134090028964ull}}, {{5234082387978700597ull, 8269484910715406942ull, 14689874132725686596ull, 5097063833806268102ull}}, {{15765975021828151554ull, 10336856138394258677ull, 9138970629052332437ull, 6371329792257835128ull}}, {{5872410722003025730ull, 17532756191420211251ull, 11423713286315415546ull, 7964162240322293910ull}}, {{1364413692038197130ull, 15569658638065019936ull, 2528134785519746812ull, 4977601400201433694ull}}, {{1705517115047746412ull, 1015329223871723304ull, 12383540518754459324ull, 6222001750251792117ull}}, {{2131896393809683015ull, 1269161529839654130ull, 1644367593160910443ull, 7777502187814740147ull}}, {{5944121264558439788ull, 16934127020645641495ull, 17168630810221426690ull, 4860938867384212591ull}}, {{2818465562270661831ull, 11944286738952276061ull, 16849102494349395459ull, 6076173584230265739ull}}, {{8134767971265715193ull, 10318672405262957172ull, 16449692099509356420ull, 7595216980287832174ull}}, {{14307602018895847804ull, 15672542290144124040ull, 5669371543765959858ull, 4747010612679895109ull}}, {{17884502523619809755ull, 10367305825825379242ull, 11698400448134837727ull, 5933763265849868886ull}}, {{13132256117669986385ull, 8347446263854336149ull, 5399628523313771351ull, 7417204082312336108ull}}, {{10513503082757435443ull, 12134682942550041949ull, 12598139863925882902ull, 4635752551445210067ull}}, {{17753564871874182207ull, 5944981641332776628ull, 11135988811479965724ull, 5794690689306512584ull}}, {{3745212016133176143ull, 7431227051665970786ull, 13919986014349957155ull, 7243363361633140730ull}}, {{13904887057021245987ull, 4677347796155075578ull, 8176610481082670636ull, 9054204202041425913ull}}, {{13302240429065666646ull, 12146714409451698044ull, 16639596596745138907ull, 5658877626275891195ull}}, {{16627800536332083307ull, 10571706993387234651ull, 16187809727504035730ull, 7073597032844863994ull}}, {{16173064651987716230ull, 3991261704879267506ull, 11011390122525268855ull, 8841996291056079993ull}}, {{14719851425919710548ull, 9412067593190624047ull, 18411333872646762794ull, 5526247681910049995ull}}, {{13788128263972250281ull, 2541712454633504251ull, 18402481322381065589ull, 6907809602387562494ull}}, {{12623474311537924947ull, 7788826586719268218ull, 13779729616121556178ull, 8634762002984453118ull}}, {{12501357463138590996ull, 9479702635126930540ull, 4000644991648584707ull, 5396726251865283199ull}}, {{15626696828923238745ull, 7237942275481275271ull, 389120221133342980ull, 6745907814831603999ull}}, {{14921685017726660527ull, 9047427844351594089ull, 14321458331698842437ull, 8432384768539504998ull}}, {{2408524108438080974ull, 7960485411933440258ull, 4339225438884388619ull, 5270240480337190624ull}}, {{12234027172402377025ull, 5338920746489412418ull, 5424031798605485774ull, 6587800600421488280ull}}, {{6069161928648195473ull, 15897022969966541331ull, 6780039748256857217ull, 8234750750526860350ull}}, {{1487383196191428219ull, 3018110328588006476ull, 18072582897942699473ull, 5146719219079287718ull}}, {{1859228995239285273ull, 8384323929162395999ull, 13367356585573598533ull, 6433399023849109648ull}}, {{16159094299331270304ull, 15092090929880382902ull, 16709195731966998166ull, 8041748779811387060ull}}, {{5487747918654656036ull, 4820870812747851410ull, 1219875295624598046ull, 5026092987382116913ull}}, {{16083056935173095853ull, 15249460552789590070ull, 6136530137958135461ull, 6282616234227646141ull}}, {{10880449132111594008ull, 5226767635704823876ull, 12282348690875057231ull, 7853270292784557676ull}}, {{16023652744424522063ull, 10184258799956596778ull, 16899839968651686577ull, 4908293932990348547ull}}, {{10806193893675876771ull, 17342009518373133877ull, 16513113942387220317ull, 6135367416237935684ull}}, {{18119428385522233867ull, 7842453842684253634ull, 2194648354274473781ull, 7669209270297419606ull}}, {{15936328759378784071ull, 7207376660891352473ull, 15206713276703709825ull, 4793255793935887253ull}}, {{6085352893941316377ull, 13620906844541578496ull, 5173333540597473569ull, 5991569742419859067ull}}, {{7606691117426645471ull, 3191075500394809408ull, 1854980907319454058ull, 7489462178024823834ull}}, {{4754181948391653420ull, 6606108206174143784ull, 5771049085502046690ull, 4680913861265514896ull}}, {{5942727435489566774ull, 17481007294572455538ull, 7213811356877558362ull, 5851142326581893620ull}}, {{16651781331216734276ull, 12627887081360793614ull, 9017264196096947953ull, 7313927908227367025ull}}, {{11591354627166142037ull, 1949800796418828306ull, 15883266263548572846ull, 9142409885284208781ull}}, {{11856282660406226677ull, 15053683553043931403ull, 12232884423931551980ull, 5714006178302630488ull}}, {{10208667307080395442ull, 370360367595362638ull, 15291105529914439976ull, 7142507722878288110ull}}, {{3537462096995718495ull, 462950459494203298ull, 9890509875538274162ull, 8928134653597860138ull}}, {{6822599829049711963ull, 4901030055611264965ull, 10793254690638809255ull, 5580084158498662586ull}}, {{13139935804739527858ull, 1514601551086693302ull, 4268196326443735761ull, 6975105198123328233ull}}, {{7201547719069634014ull, 6504937957285754532ull, 9946931426482057605ull, 8718881497654160291ull}}, {{13724339361273297067ull, 6371429232517290534ull, 3910989132337592051ull, 5449300936033850182ull}}, {{7932052164736845526ull, 3352600522219225264ull, 14112108452276765872ull, 6811626170042312727ull}}, {{9915065205921056907ull, 4190750652774031580ull, 13028449546918569436ull, 8514532712552890909ull}}, {{15420287790555436375ull, 11842591194838545545ull, 10448623976037799849ull, 5321582945345556818ull}}, {{5440301682912131757ull, 968180938266018220ull, 3837407933192474004ull, 6651978681681946023ull}}, {{6800377103640164696ull, 1210226172832522775ull, 185073898063204601ull, 8314973352102432529ull}}, {{11167764717416184791ull, 12285606404088796494ull, 11644886232357972635ull, 5196858345064020330ull}}, {{4736333859915455181ull, 10745321986683607714ull, 5332735753592689986ull, 6496072931330025413ull}}, {{15143789361749094784ull, 4208280446499733834ull, 11277605710418250387ull, 8120091164162531766ull}}, {{14076554369520572144ull, 324332269848639694ull, 2436817550584018588ull, 5075056977601582354ull}}, {{8372320925045939372ull, 405415337310799618ull, 12269393975084799043ull, 6343821222001977942ull}}, {{1242029119452648407ull, 14341827226920663235ull, 6113370432001222995ull, 7929776527502472428ull}}, {{16917169264153762919ull, 6657799007611720569ull, 13044228556855540180ull, 4956110329689045267ull}}, {{7311403524910039936ull, 8322248759514650712ull, 11693599677642037321ull, 6195137912111306584ull}}, {{9139254406137549920ull, 15014496967820701294ull, 14616999597052546651ull, 7743922390139133230ull}}, {{1100347985408580796ull, 7078217595674244357ull, 4523938729730453753ull, 4839951493836958269ull}}, {{5987121000188113899ull, 13459458013020193350ull, 10266609430590455095ull, 6049939367296197836ull}}, {{16707273287089918182ull, 12212636497847853783ull, 12833261788238068869ull, 7562424209120247295ull}}, {{17359574832072280720ull, 9938740820368602566ull, 14938317645289874899ull, 4726515130700154559ull}}, {{12476096503235575092ull, 7811740007033365304ull, 14061211038184955720ull, 5908143913375193199ull}}, {{15595120629044468864ull, 9764675008791706630ull, 12964827779303806746ull, 7385179891718991499ull}}, {{5135264374725405136ull, 10714607898922204548ull, 5797174352851185264ull, 4615737432324369687ull}}, {{6419080468406756420ull, 13393259873652755685ull, 2634781922636593676ull, 5769671790405462109ull}}, {{12635536603935833429ull, 16741574842065944606ull, 7905163421723129999ull, 7212089738006827636ull}}, {{6571048718065015979ull, 16315282534155042854ull, 9881454277153912499ull, 9015112172508534545ull}}, {{17941963504072798699ull, 7891208574633207831ull, 17705123969289665072ull, 5634445107817834090ull}}, {{17815768361663610469ull, 9864010718291509789ull, 12908032924757305532ull, 7043056384772292613ull}}, {{8434652396797349375ull, 12330013397864387237ull, 2299983100664468203ull, 8803820480965365767ull}}, {{7577500757212037311ull, 5400415364451548071ull, 8355018465556374483ull, 5502387800603353604ull}}, {{4860189928087658735ull, 2138833187137047185ull, 10443773081945468104ull, 6877984750754192005ull}}, {{10686923428536961323ull, 2673541483921308981ull, 17666402370859223034ull, 8597480938442740006ull}}, {{8985170152049294779ull, 6282649445878206017ull, 6429815463359626492ull, 5373425586526712504ull}}, {{15843148708489006377ull, 7853311807347757521ull, 8037269329199533115ull, 6716781983158390630ull}}, {{5968877830329094260ull, 5204953740757308998ull, 823214624644640586ull, 8395977478947988288ull}}, {{17565606699237847624ull, 7864782106400706027ull, 514509140402900366ull, 5247485924342492680ull}}, {{17345322355619921626ull, 607605596146106726ull, 643136425503625458ull, 6559357405428115850ull}}, {{12458280907670126225ull, 9982879032037409216ull, 10027292568734307630ull, 8199196756785144812ull}}, {{7786425567293828891ull, 1627613376595992856ull, 15490429892313718077ull, 5124497972990715507ull}}, {{9733031959117286113ull, 6646202739172378974ull, 14751351346964759692ull, 6405622466238394384ull}}, {{2942917912041831834ull, 8307753423965473718ull, 18439189183705949615ull, 8007028082797992980ull}}, {{15674381750308308608ull, 12109874917619502929ull, 2301121202961442701ull, 5004392551748745613ull}}, {{5757919132603222048ull, 1302285591742214950ull, 7488087522129191281ull, 6255490689685932016ull}}, {{16420770952608803368ull, 6239543008105156591ull, 9360109402661489101ull, 7819363362107415020ull}}, {{17180510873021583961ull, 6205557389279416821ull, 15073440413518206496ull, 4887102101317134387ull}}, {{7640580535994816239ull, 7756946736599271027ull, 14230114498470370216ull, 6108877626646417984ull}}, {{4939039651566132395ull, 9696183420749088784ull, 17787643123087962770ull, 7636097033308022480ull}}, {{3086899782228832747ull, 10671800656395568394ull, 11117276951929976731ull, 4772560645817514050ull}}, {{13081996764640816742ull, 8728064802067072588ull, 4673224153057695106ull, 5965700807271892563ull}}, {{16352495955801020927ull, 1686708965729064927ull, 1229844172894730979ull, 7457126009089865704ull}}, {{17137839000016719936ull, 17195094168076523243ull, 768652608059206861ull, 4660703755681166065ull}}, {{16810612731593512015ull, 7658809654813490342ull, 5572501778501396481ull, 5825879694601457581ull}}, {{11789893877637114211ull, 14185198086944250832ull, 11577313241554133505ull, 7282349618251821976ull}}, {{14737367347046392764ull, 3896439553398149828ull, 14471641551942666882ull, 9102937022814777470ull}}, {{18434226628758771286ull, 7046960739301231546ull, 4433089951536778897ull, 5689335639259235919ull}}, {{13819411249093688299ull, 13420386942553927337ull, 929676420993585717ull, 7111669549074044899ull}}, {{3439206006084946661ull, 2940425622910245460ull, 14997153581524145859ull, 8889586936342556123ull}}, {{11372875790657867472ull, 17978667078814761076ull, 7067377979238897209ull, 5555991835214097577ull}}, {{14216094738322334339ull, 8638275793236287633ull, 13445908492476009416ull, 6944989794017621971ull}}, {{3935060367620754212ull, 10797844741545359542ull, 12195699597167623866ull, 8681237242522027464ull}}, {{16294470785045135095ull, 11360338981893237617ull, 7622312248229764916ull, 5425773276576267165ull}}, {{6533030426024255156ull, 14200423727366547022ull, 14139576328714594049ull, 6782216595720333956ull}}, {{17389660069385094753ull, 3915471603926020065ull, 17674470410893242562ull, 8477770744650417445ull}}, {{3951008515724602365ull, 7058855770881150445ull, 13352387016021970553ull, 5298606715406510903ull}}, {{9550446663083140860ull, 13435255732028825960ull, 12078797751600075287ull, 6623258394258138629ull}}, {{11938058328853926075ull, 12182383646608644546ull, 1263439134217930397ull, 8279072992822673287ull}}, {{12072972473961091701ull, 9919832788344096793ull, 7707178486527288354ull, 5174420620514170804ull}}, {{1256157537169200914ull, 3176418948575345184ull, 9633973108159110443ull, 6468025775642713505ull}}, {{1570196921461501143ull, 17805581741001345192ull, 16654152403626275957ull, 8085032219553391881ull}}, {{981373075913438214ull, 13434331597339534697ull, 3491316224625340617ull, 5053145137220869926ull}}, {{5838402363319185672ull, 2957856441392254659ull, 13587517317636451580ull, 6316431421526087407ull}}, {{2686316935721594185ull, 3697320551740318324ull, 12372710628618176571ull, 7895539276907609259ull}}, {{10902320121680772174ull, 4982335624005000ull, 5427101133672666405ull, 4934712048067255787ull}}, {{13627900152100965218ull, 4617913937957394154ull, 2172190398663445102ull, 6168390060084069734ull}}, {{7811503153271430714ull, 14995764459301518501ull, 11938610035184082185ull, 7710487575105087167ull}}, {{7188032480008338148ull, 2454823759422367207ull, 14379160299631133222ull, 4819054734440679479ull}}, {{4373354581583034781ull, 12291901736132734817ull, 13362264356111528623ull, 6023818418050849349ull}}, {{10078379245406181380ull, 10753191151738530617ull, 2867772389857247067ull, 7529773022563561687ull}}, {{17828202074447333123ull, 4414901460622887683ull, 8709886771301861273ull, 4706108139102226054ull}}, {{17673566574631778500ull, 10130312844205997508ull, 1663986427272550783ull, 5882635173877782568ull}}, {{3645214144580171508ull, 8051205036830108982ull, 2079983034090688479ull, 7353293967347228210ull}}, {{13779889717579990193ull, 5452320277610248323ull, 11823350829468136407ull, 9191617459184035262ull}}, {{6306588064273799919ull, 10325229201147487058ull, 2777908249990197350ull, 5744760911990022039ull}}, {{17106607117197025707ull, 3683164464579583014ull, 17307443367769910400ull, 7180951139987527548ull}}, {{12159886859641506325ull, 4603955580724478768ull, 3187560136002836384ull, 8976188924984409436ull}}, {{7599929287275941453ull, 2877472237952799230ull, 11215597121856548548ull, 5610118078115255897ull}}, {{276539572240151009ull, 3596840297440999038ull, 184438347038521973ull, 7012647597644069872ull}}, {{9569046502154964569ull, 9107736390228636701ull, 230547933798152466ull, 8765809497055087340ull}}, {{8286497073060546808ull, 10304021262320285842ull, 9367464495478621099ull, 5478630935659429587ull}}, {{1134749304470907701ull, 8268340559472969399ull, 7097644600920888470ull, 6848288669574286984ull}}, {{15253494685870798339ull, 1112053662486435940ull, 8872055751151110588ull, 8560360836967858730ull}}, {{310062141814473154ull, 9918405575908798271ull, 10156720862896832021ull, 5350225523104911706ull}}, {{14222635732550255154ull, 17009692988313385742ull, 3472529041766264218ull, 6687781903881139633ull}}, {{8554922628833043135ull, 12038744198536956370ull, 8952347320635218177ull, 8359727379851424541ull}}, {{9958512661448039863ull, 606686096444515875ull, 7901060084610705313ull, 5224829612407140338ull}}, {{7836454808382661925ull, 5370043638983032748ull, 652953068908605833ull, 6531037015508925423ull}}, {{9795568510478327406ull, 11324240567156178839ull, 14651249391417921003ull, 8163796269386156778ull}}, {{13039759346690036485ull, 4771807345258917822ull, 13768716888063588531ull, 5102372668366347986ull}}, {{7076327146507769798ull, 1353073163146259374ull, 7987524073224709856ull, 6377965835457934983ull}}, {{18068780969989488056ull, 1691341453932824217ull, 5372719073103499416ull, 7972457294322418729ull}}, {{4375459078602348179ull, 1057088408708015136ull, 14887164466758156895ull, 4982785808951511705ull}}, {{5469323848252935223ull, 15156418566167182632ull, 4773897528165532406ull, 6228482261189389632ull}}, {{6836654810316169029ull, 9722151170854202482ull, 5967371910206915508ull, 7785602826486737040ull}}, {{8884595274874993547ull, 15299716518638652359ull, 3729607443879322192ull, 4866001766554210650ull}}, {{6494058075166354030ull, 677901574588763833ull, 13885381341703928549ull, 6082502208192763312ull}}, {{12729258612385330442ull, 5459062986663342695ull, 17356726677129910686ull, 7603127760240954140ull}}, {{14873315660381913382ull, 17246972421946752896ull, 1624582136351418370ull, 4751954850150596338ull}}, {{144900501767840112ull, 12335343490578665313ull, 11254099707294048771ull, 5939943562688245422ull}}, {{4792811645637188043ull, 10807493344795943737ull, 4844252597262785156ull, 7424929453360306778ull}}, {{14524722324591712287ull, 15978055377352240643ull, 7639343891716628626ull, 4640580908350191736ull}}, {{13544216887312252455ull, 10749197184835524996ull, 9549179864645785783ull, 5800726135437739670ull}}, {{16930271109140315569ull, 8824810462617018341ull, 2713102793952456421ull, 7250907669297174588ull}}, {{7327780831143230749ull, 15642699096698660831ull, 3391378492440570526ull, 9063634586621468235ull}}, {{11497392047105601074ull, 5165000917009275115ull, 18260512622271214243ull, 5664771616638417646ull}}, {{9760054040454613439ull, 1844565127834205990ull, 13602268740984241996ull, 7080964520798022058ull}}, {{2976695513713490990ull, 2305706409792757488ull, 7779463889375526687ull, 8851205650997527573ull}}, {{1860434696070931869ull, 8358595533761555286ull, 7168007940073398131ull, 5532003531873454733ull}}, {{11548915406943440644ull, 5836558398774556203ull, 13571695943519135568ull, 6915004414841818416ull}}, {{9824458240251912901ull, 7295697998468195254ull, 16964619929398919460ull, 8643755518552273020ull}}, {{1528600381730057659ull, 13783183285897397842ull, 1379515419019548854ull, 5402347199095170638ull}}, {{11134122514017347882ull, 8005607070516971494ull, 10947766310629211876ull, 6752933998868963297ull}}, {{4694281105666909044ull, 10007008838146214368ull, 18296393906713902749ull, 8441167498586204121ull}}, {{2933925691041818153ull, 8560223533055077932ull, 4517717164055107362ull, 5275729686616377576ull}}, {{3667407113802272691ull, 1476907379464071607ull, 5647146455068884203ull, 6594662108270471970ull}}, {{18419316947535004576ull, 15681192279612253220ull, 16282305105690881061ull, 8243327635338089962ull}}, {{2288701055354602052ull, 12106588183971352215ull, 14788126709484188567ull, 5152079772086306226ull}}, {{16695934374475416277ull, 10521549211536802364ull, 9261786350000459901ull, 6440099715107882783ull}}, {{2423173894384718730ull, 17763622532848390860ull, 6965546919073186972ull, 8050124643884853479ull}}, {{10737855720845225014ull, 1878892046175468479ull, 11270995852061823714ull, 5031327902428033424ull}}, {{8810633632629143364ull, 11571987094574111407ull, 14088744815077279642ull, 6289159878035041780ull}}, {{6401606022359041301ull, 5241611831362863451ull, 17610931018846599553ull, 7861449847543802225ull}}, {{1695160754760706861ull, 14805222440670259417ull, 4089302859138042864ull, 4913406154714876391ull}}, {{6730636961878271480ull, 59783977128272655ull, 499942555495165677ull, 6141757693393595489ull}}, {{3801610183920451446ull, 4686415989837728723ull, 5236614212796345000ull, 7677197116741994361ull}}, {{70163355736588202ull, 2929009993648580452ull, 14802098929066185385ull, 4798248197963746475ull}}, {{87704194670735252ull, 8272948510488113469ull, 13890937642905343827ull, 5997810247454683094ull}}, {{4721316261765806969ull, 5729499619682753932ull, 8140300016776903976ull, 7497262809318353868ull}}, {{12174194700458405164ull, 3580937262301721207ull, 14311059547340340793ull, 4685789255823971167ull}}, {{10606057357145618551ull, 9087857596304539413ull, 13277138415748038087ull, 5857236569779963959ull}}, {{17869257714859411093ull, 6748135976953286362ull, 11984737001257659705ull, 7321545712224954949ull}}, {{13113200106719488058ull, 13046855989618995857ull, 1145863196289910919ull, 9151932140281193687ull}}, {{1278221039058598180ull, 15071814021152954267ull, 7633693525322276180ull, 5719957587675746054ull}}, {{15432834354105411437ull, 393023452731641217ull, 318744869798069418ull, 7149946984594682568ull}}, {{5455984887349600584ull, 9714651352769327330ull, 398431087247586772ull, 8937433730743353210ull}}, {{8021676573020888269ull, 15295029132335605389ull, 4860705447957129636ull, 5585896081714595756ull}}, {{14638781734703498241ull, 672042341709955120ull, 6075881809946412046ull, 6982370102143244695ull}}, {{18298477168379372801ull, 10063424963992219708ull, 2983166244005627153ull, 8727962627679055869ull}}, {{2213176193382332193ull, 17818855648563607078ull, 4170321911717210922ull, 5454976642299409918ull}}, {{11989842278582691049ull, 13050197523849733039ull, 14436274426501289461ull, 6818720802874262397ull}}, {{10375616829800975907ull, 2477688849530002587ull, 4210284977844448115ull, 8523401003592827997ull}}, {{4178917509411915990ull, 17689456595452109281ull, 4937271120366474023ull, 5327125627245517498ull}}, {{9835332905192282891ull, 17500134725887748697ull, 15394960937312868337ull, 6658907034056896872ull}}, {{16905852149917741518ull, 8040110352077522159ull, 796957097931533806ull, 8323633792571121091ull}}, {{17483686621339670305ull, 413382951621063445ull, 16638999250703066293ull, 5202271120356950681ull}}, {{8019550221392424169ull, 5128414707953717211ull, 6963691008096669154ull, 6502838900446188352ull}}, {{5412751758313142307ull, 15633890421796922322ull, 8704613760120836442ull, 8128548625557735440ull}}, {{7994655867373101846ull, 14382867532050464355ull, 5440383600075522776ull, 5080342890973584650ull}}, {{5381633815788989403ull, 17978584415063080444ull, 16023851536949179278ull, 6350428613716980812ull}}, {{6727042269736236754ull, 13249858481974074747ull, 1583070347476922482ull, 7938035767146226016ull}}, {{1898558409371454020ull, 12892847569661184621ull, 989418967173076551ull, 4961272354466391260ull}}, {{6984884030141705428ull, 11504373443649092872ull, 1236773708966345689ull, 6201590443082989075ull}}, {{8731105037677131785ull, 545408749279202378ull, 15381025191490095824ull, 7751988053853736343ull}}, {{10068626666975595270ull, 340880468299501486ull, 16530669772322391746ull, 4844992533658585214ull}}, {{3362411296864718279ull, 9649472622229152666ull, 11439965178548213874ull, 6056240667073231518ull}}, {{13426386157935673657ull, 2838468740931665024ull, 5076584436330491535ull, 7570300833841539398ull}}, {{8391491348709796036ull, 8691571990723372496ull, 17007923327988720921ull, 4731438021150962123ull}}, {{10489364185887245045ull, 15476151006831603524ull, 16648218141558513247ull, 5914297526438702654ull}}, {{13111705232359056306ull, 14733502740112116501ull, 11586900640093365751ull, 7392871908048378318ull}}, {{10500658779438104143ull, 16125968240211154669ull, 2630126881630965690ull, 4620544942530236449ull}}, {{17737509492725018083ull, 10934088263409167528ull, 7899344620466095017ull, 5775681178162795561ull}}, {{3725142792196720988ull, 18279296347688847315ull, 14485866794010006675ull, 7219601472703494451ull}}, {{44742471818513330ull, 18237434416183671240ull, 13495647474085120440ull, 9024501840879368064ull}}, {{27964044886570832ull, 11398396510114794525ull, 8434779671303200275ull, 5640313650549605040ull}}, {{4646641074535601443ull, 9636309619216105252ull, 10543474589129000344ull, 7050392063187006300ull}}, {{5808301343169501804ull, 12045387024020131565ull, 13179343236411250430ull, 8812990078983757875ull}}, {{5936031348694632580ull, 2916680871585194324ull, 5931246513543337567ull, 5508118799364848672ull}}, {{7420039185868290725ull, 17480909144763656617ull, 7414058141929171958ull, 6885148499206060840ull}}, {{13886735000762751310ull, 12627764394099794963ull, 9267572677411464948ull, 8606435624007576050ull}}, {{6373366366263025617ull, 17115724783167147660ull, 10403918941809553496ull, 5379022265004735031ull}}, {{7966707957828782021ull, 2947911905249382959ull, 8393212658834553967ull, 6723777831255918789ull}}, {{5346698928858589622ull, 17519947936843892411ull, 15103201841970580362ull, 8404722289069898486ull}}, {{1035843821322924562ull, 15561653478954820661ull, 4827815132804224822ull, 5252951430668686554ull}}, {{5906490795081043606ull, 10228694811838750018ull, 15258140952860056836ull, 6566189288335858192ull}}, {{16606485530706080316ull, 12785868514798437522ull, 625932117365519429ull, 8207736610419822741ull}}, {{14990739475118688101ull, 10297010830962717403ull, 2697050582567143595ull, 5129835381512389213ull}}, {{14126738325470972223ull, 8259577520276008850ull, 7982999246636317398ull, 6412294226890486516ull}}, {{8435050869983939470ull, 1101099863490235255ull, 9978749058295396748ull, 8015367783613108145ull}}, {{12189435821381044025ull, 9911559451536172842ull, 17765933207503092727ull, 5009604864758192590ull}}, {{6013422739871529223ull, 7777763295992828149ull, 12984044472524090101ull, 6262006080947740738ull}}, {{12128464443266799433ull, 14333890138418423090ull, 7006683553800336818ull, 7827507601184675923ull}}, {{12191976295469137550ull, 13570367354938902335ull, 2073334211911516559ull, 4892192250740422452ull}}, {{10628284350909034033ull, 12351273175246240015ull, 2591667764889395699ull, 6115240313425528065ull}}, {{8673669420208904637ull, 10827405450630412115ull, 7851270724539132528ull, 7644050391781910081ull}}, {{3115200378416871446ull, 6767128406644007572ull, 16436259248905427590ull, 4777531494863693800ull}}, {{3894000473021089308ull, 17682282545159785273ull, 2098579987422232871ull, 5971914368579617251ull}}, {{9479186609703749539ull, 17491167163022343687ull, 16458283039559954801ull, 7464892960724521563ull}}, {{12842020658705925318ull, 4014450449247882948ull, 7980583890511277799ull, 4665558100452825977ull}}, {{16052525823382406647ull, 406377043132465781ull, 14587415881566485153ull, 5831947625566032471ull}}, {{6230599223945844597ull, 5119657322342970131ull, 13622583833530718537ull, 7289934531957540589ull}}, {{3176563011504917842ull, 11011257671356100568ull, 3193171736631234459ull, 9112418164946925737ull}}, {{1985351882190573652ull, 4576193035383868903ull, 13524947381462991297ull, 5695261353091828585ull}}, {{16316747908020380776ull, 10331927312657224032ull, 3071126171546575409ull, 7119076691364785732ull}}, {{1949190811315924354ull, 17526595159248917945ull, 3838907714433219261ull, 8898845864205982165ull}}, {{12747459303140922482ull, 13259964983744267667ull, 4705160330734455990ull, 5561778665128738853ull}}, {{11322638110498765198ull, 7351584192825558776ull, 10493136431845457892ull, 6952223331410923566ull}}, {{14153297638123456497ull, 9189480241031948470ull, 3893048502952046557ull, 8690279164263654458ull}}, {{4234125005399772407ull, 8049268159858661746ull, 7044841332772417002ull, 5431424477664784036ull}}, {{14516028293604491317ull, 838213162968551374ull, 8806051665965521253ull, 6789280597080980045ull}}, {{8921663330150838338ull, 5659452472138077122ull, 15619250600884289470ull, 8486600746351225056ull}}, {{10187725599771661865ull, 17372215850368461913ull, 9762031625552680918ull, 5304125466469515660ull}}, {{17346343018141965235ull, 12491897776105801583ull, 12202539531940851148ull, 6630156833086894575ull}}, {{17071242754250068640ull, 15614872220132251979ull, 10641488396498676031ull, 8287696041358618219ull}}, {{8363683712192598948ull, 16676824165223739343ull, 4345087238597978567ull, 5179810025849136387ull}}, {{5842918621813360781ull, 16234344188102286275ull, 819673029820085305ull, 6474762532311420484ull}}, {{2691962258839313072ull, 6457872179845694132ull, 1024591287275106632ull, 8093453165389275605ull}}, {{10905848448629346478ull, 4036170112403558832ull, 2946212563760635597ull, 5058408228368297253ull}}, {{13632310560786683098ull, 9656898658931836444ull, 8294451723128182400ull, 6323010285460371566ull}}, {{17040388200983353872ull, 12071123323664795555ull, 1144692617055452192ull, 7903762856825464458ull}}, {{8344399616400902218ull, 7544452077290497222ull, 5327118904087045524ull, 4939851785515915286ull}}, {{1207127483646351965ull, 9430565096613121528ull, 15882270666963582713ull, 6174814731894894107ull}}, {{1508909354557939956ull, 16399892389193789814ull, 15241152315277090487ull, 7718518414868617634ull}}, {{14778126401880876185ull, 17167461770887200489ull, 14137406215475569458ull, 4824074009292886021ull}}, {{4637599947068931519ull, 12235955176754224804ull, 3836699714062298111ull, 6030092511616107527ull}}, {{5796999933836164398ull, 10683257952515393101ull, 184188624150484735ull, 7537615639520134409ull}}, {{5928967967861296701ull, 13594565247963202544ull, 11644332936162522719ull, 4711009774700084005ull}}, {{7411209959826620876ull, 12381520541526615276ull, 720358114920989687ull, 5888762218375105007ull}}, {{9264012449783276095ull, 10865214658480881191ull, 14735505698933400821ull, 7360952772968881258ull}}, {{6968329543801707215ull, 18193204341528489393ull, 9196010086811975218ull, 9201190966211101573ull}}, {{15884421010944536769ull, 15982438731882693774ull, 8053349313471178463ull, 5750744353881938483ull}}, {{10632154226825895154ull, 15366362396425979314ull, 5455000623411585175ull, 7188430442352423104ull}}, {{4066820746677593134ull, 14596266977105086239ull, 6818750779264481469ull, 8985538052940528880ull}}, {{9459291994314577565ull, 11428509869904372851ull, 4261719237040300918ull, 5615961283087830550ull}}, {{7212428974465834052ull, 5062265300525690256ull, 14550521083155151956ull, 7019951603859788187ull}}, {{9015536218082292565ull, 6327831625657112820ull, 13576465335516552041ull, 8774939504824735234ull}}, {{14858082173156208661ull, 15484109812104165272ull, 13096976853125232929ull, 5484337190515459521ull}}, {{125858642735709210ull, 5520079209848042879ull, 2536163011124377450ull, 6855421488144324402ull}}, {{13992381358701800225ull, 16123471049164829406ull, 12393575800760247620ull, 8569276860180405502ull}}, {{4133552330761237237ull, 853797368873242571ull, 3134298857047766859ull, 5355798037612753439ull}}, {{555254395024158642ull, 14902304766373716926ull, 17752931626591872285ull, 6694747547015941798ull}}, {{9917440030634974110ull, 4792822902684982445ull, 12967792496385064549ull, 8368434433769927248ull}}, {{8504243028360552771ull, 5301357323391807980ull, 8104870310240665343ull, 5230271521106204530ull}}, {{10630303785450690964ull, 2015010635812372071ull, 907715850946055871ull, 6537839401382755663ull}}, {{8676193713385975800ull, 16353821350047628801ull, 14969702868964733550ull, 8172299251728444578ull}}, {{16951836116934704635ull, 5609452325352380096ull, 13967750311530346373ull, 5107687032330277861ull}}, {{2743051072458829178ull, 11623501425117863025ull, 3624629834130769254ull, 6384608790412847327ull}}, {{8040499859000924377ull, 5306004744542552973ull, 18365845347945625280ull, 7980760988016059158ull}}, {{7331155421089271688ull, 3316252965339095608ull, 6866967324038627896ull, 4987975617510036974ull}}, {{9163944276361589609ull, 4145316206673869510ull, 17807081191903060678ull, 6234969521887546217ull}}, {{2231558308597211203ull, 14405017295197112696ull, 8423793434596662135ull, 7793711902359432772ull}}, {{1394723942873257002ull, 15920664837139277291ull, 14488242933477689642ull, 4871069938974645482ull}}, {{15578462983873734965ull, 10677459009569320805ull, 8886931629992336245ull, 6088837423718306853ull}}, {{5638020674560004994ull, 17958509780389038911ull, 15720350555917808210ull, 7611046779647883566ull}}, {{10441291949241084977ull, 15835754631170537223ull, 5213533079021242227ull, 4756904237279927229ull}}, {{8439928918123968318ull, 15183007270535783625ull, 11128602367203940688ull, 5946130296599909036ull}}, {{15161597166082348301ull, 532015014460177915ull, 13910752959004925861ull, 7432662870749886295ull}}, {{7170155219587773736ull, 2638352393251305149ull, 15611749627019160519ull, 4645414294218678934ull}}, {{13574380042912105074ull, 17132998546846295148ull, 10291314996919174840ull, 5806767867773348668ull}}, {{16967975053640131343ull, 2969504109848317319ull, 12864143746148968551ull, 7258459834716685835ull}}, {{16598282798622776274ull, 17546938192592560361ull, 11468493664258822784ull, 9073074793395857294ull}}, {{3456397721498153315ull, 10966836370370350226ull, 2556122521734376336ull, 5670671745872410809ull}}, {{13543869188727467452ull, 13708545462962937782ull, 7806839170595358324ull, 7088339682340513511ull}}, {{7706464449054558507ull, 17135681828703672228ull, 5146862944816810001ull, 8860424602925641889ull}}, {{14039912317513874875ull, 3792272115298713286ull, 14746004386578976011ull, 5537765376828526180ull}}, {{8326518360037567786ull, 128654125696003704ull, 18432505483223720014ull, 6922206721035657725ull}}, {{10408147950046959732ull, 9384189693974780438ull, 9205573798747486305ull, 8652758401294572157ull}}, {{1893406450351961929ull, 17394333604802707534ull, 8059326633430872892ull, 5407974000809107598ull}}, {{11590130099794728219ull, 3296172932293832801ull, 850786254933815308ull, 6759967501011384498ull}}, {{652604569461246561ull, 4120216165367291002ull, 10286854855522044943ull, 8449959376264230622ull}}, {{5019563874340667005ull, 9492664130995638732ull, 1817598266273890185ull, 5281224610165144139ull}}, {{6274454842925833756ull, 16477516182171936319ull, 16107055888124526443ull, 6601530762706430173ull}}, {{3231382535229904291ull, 15985209209287532495ull, 6298761804873494342ull, 8251913453383037717ull}}, {{8937143112159772038ull, 5379069737377319905ull, 6242569137259627916ull, 5157445908364398573ull}}, {{15783114908627102952ull, 6723837171721649881ull, 12414897440001922799ull, 6446807385455498216ull}}, {{5893835580501714977ull, 3793110446224674448ull, 15518621800002403499ull, 8058509231819372770ull}}, {{3683647237813571861ull, 64851019676727578ull, 14310824643428890091ull, 5036568269887107981ull}}, {{13827931084121740634ull, 13916121829878073184ull, 4053472749003948901ull, 6295710337358884977ull}}, {{17284913855152175793ull, 3560094232065427768ull, 9678526954682324031ull, 7869637921698606221ull}}, {{10803071159470109871ull, 9142587922681974211ull, 8354922355890146471ull, 4918523701061628888ull}}, {{8892152930910249434ull, 6816548884925079860ull, 10443652944862683089ull, 6148154626327036110ull}}, {{11115191163637811792ull, 13132372124583737729ull, 3831194144223578053ull, 7685193282908795138ull}}, {{29465449632550514ull, 10513575587078530033ull, 7006182358567124187ull, 4803245801817996961ull}}, {{4648517830468076047ull, 8530283465420774637ull, 13369413966636293138ull, 6004057252272496201ull}}, {{10422333306512482963ull, 1439482294921192488ull, 2876709403013202711ull, 7505071565340620252ull}}, {{6513958316570301852ull, 7817205461966827161ull, 11021315413738027502ull, 4690669728337887657ull}}, {{12754133914140265219ull, 548134790603758143ull, 18388330285599922282ull, 5863337160422359571ull}}, {{11330981374247943619ull, 9908540525109473487ull, 18373726838572514948ull, 7329171450527949464ull}}, {{9552040699382541620ull, 12385675656386841859ull, 4520414474506092069ull, 9161464313159936831ull}}, {{3664182427900394561ull, 10046890294455470114ull, 9742788074207389399ull, 5725915195724960519ull}}, {{13803600071730269009ull, 7946926849641949738ull, 7566799074331848845ull, 7157393994656200649ull}}, {{8031128052808060453ull, 14545344580479825077ull, 14070184861342198960ull, 8946742493320250811ull}}, {{7325298042218731735ull, 9090840362799890673ull, 6488022529125180398ull, 5591714058325156757ull}}, {{13768308571200802573ull, 2140178416645087533ull, 12721714179833863402ull, 6989642572906445946ull}}, {{3375327658718839504ull, 11898595057661135225ull, 6678770687937553444ull, 8737053216133057433ull}}, {{13638794832767744450ull, 16659993947892985323ull, 15703446726029440662ull, 5460658260083160895ull}}, {{12436807522532292658ull, 11601620398011455846ull, 15017622389109412924ull, 6825822825103951119ull}}, {{6322637366310590015ull, 14502025497514319808ull, 14160341967959378251ull, 8532278531379938899ull}}, {{3951648353944118760ull, 6757922926732755928ull, 6544370720760917455ull, 5332674082112461812ull}}, {{4939560442430148449ull, 3835717639988557006ull, 8180463400951146819ull, 6665842602640577265ull}}, {{15397822589892461369ull, 182961031558308353ull, 14837265269616321428ull, 8332303253300721581ull}}, {{2706110091041706500ull, 9337722681578718529ull, 11579133802723894844ull, 5207689533312950988ull}}, {{7994323632229521029ull, 11672153351973398161ull, 14473917253404868555ull, 6509611916641188735ull}}, {{14604590558714289190ull, 9978505671539359797ull, 13480710548328697790ull, 8137014895801485919ull}}, {{11433712108410124696ull, 1624880026284711969ull, 15342973120346517975ull, 5085634309875928699ull}}, {{457082080230492158ull, 15866158088138053674ull, 14567030382005759564ull, 6357042887344910874ull}}, {{9794724637142891005ull, 1385953536463015476ull, 8985415940652423648ull, 7946303609181138593ull}}, {{15345074935069082686ull, 866220960289384672ull, 17145100008976234540ull, 4966439755738211620ull}}, {{734599595126801742ull, 1082776200361730841ull, 2984630937510741559ull, 6208049694672764526ull}}, {{5529935512335890081ull, 15188528305734327263ull, 12954160708743202756ull, 7760062118340955657ull}}, {{10373738722851013157ull, 269458154229178731ull, 1178821415323419867ull, 4850038823963097286ull}}, {{8355487385136378542ull, 14171880748068637126ull, 10696898806009050641ull, 6062548529953871607ull}}, {{1220987194565697370ull, 3879792879803632696ull, 8759437489083925398ull, 7578185662442339509ull}}, {{763116996603560856ull, 16259928605159434147ull, 7780491439891147325ull, 4736366039026462193ull}}, {{14788954301036614782ull, 6489852701167128971ull, 14337300318291322061ull, 5920457548783077741ull}}, {{13874506857868380573ull, 12724001894886299118ull, 4086567342581988864ull, 7400571935978847177ull}}, {{4059880767740349955ull, 7952501184303936949ull, 14083319635182212800ull, 4625357459986779485ull}}, {{9686536978102825347ull, 9940626480379921186ull, 3769091488695602288ull, 5781696824983474357ull}}, {{2884799185773755876ull, 12425783100474901483ull, 9323050379296890764ull, 7227121031229342946ull}}, {{17441057037499358557ull, 15532228875593626853ull, 2430440937266337647ull, 9033901289036678683ull}}, {{13206503657650793050ull, 16625172074887098639ull, 17659926650287318693ull, 5646188305647924176ull}}, {{11896443553636103408ull, 6946407038326709587ull, 3628164239149596751ull, 7057735382059905221ull}}, {{10258868423617741356ull, 4071322779480999080ull, 9146891317364383843ull, 8822169227574881526ull}}, {{6411792764761088348ull, 238733727961930473ull, 1105121054925351998ull, 5513855767234300954ull}}, {{12626426974378748339ull, 9521789196807188899ull, 10604773355511465805ull, 6892319709042876192ull}}, {{11171347699546047519ull, 16513922514436374028ull, 13255966694389332256ull, 8615399636303595240ull}}, {{16205464349071055508ull, 10321201571522733767ull, 8284979183993332660ull, 5384624772689747025ull}}, {{15645144417911431481ull, 12901501964403417209ull, 14967909998419053729ull, 6730780965862183781ull}}, {{5721372467107125639ull, 2291819400222107800ull, 4874829442741653450ull, 8413476207327729727ull}}, {{3575857791941953524ull, 6044073143566205279ull, 9964297429354615262ull, 5258422629579831079ull}}, {{18304880295209605617ull, 16778463466312532406ull, 7843685768265881173ull, 6573028286974788849ull}}, {{13657728332157231214ull, 7138021277608501796ull, 14416293228759739371ull, 8216285358718486061ull}}, {{17759452244453045317ull, 2155420289291619670ull, 11316026277188531059ull, 5135178349199053788ull}}, {{12975943268711530838ull, 16529333416896688300ull, 14145032846485663823ull, 6418972936498817235ull}}, {{16219929085889413547ull, 16049980752693472471ull, 13069605039679691875ull, 8023716170623521544ull}}, {{17054984706321965323ull, 7725394961219726342ull, 8168503149799807422ull, 5014822606639700965ull}}, {{12095358846047680846ull, 433371664669882120ull, 14822314955677147182ull, 6268528258299626206ull}}, {{15119198557559601057ull, 9765086617692128458ull, 9304521657741658169ull, 7835660322874532758ull}}, {{14061185116902138565ull, 17632394182126050046ull, 1203640017661148451ull, 4897287701796582974ull}}, {{8353109359272897398ull, 17428806709230174654ull, 10727922058931211372ull, 6121609627245728717ull}}, {{1218014662236345939ull, 3339264312828166702ull, 18021588592091402120ull, 7652012034057160896ull}}, {{14596317219179879924ull, 2087040195517604188ull, 11263492870057126325ull, 4782507521285725560ull}}, {{18245396523974849905ull, 7220486262824393139ull, 14079366087571407906ull, 5978134401607156950ull}}, {{18195059636541174477ull, 18248979865385267232ull, 8375835572609484074ull, 7472668002008946188ull}}, {{11371912272838234049ull, 16017298434293179924ull, 14458269269735703354ull, 4670417501255591367ull}}, {{14214890341047792561ull, 10798251006011699097ull, 13461150568742241289ull, 5838021876569489209ull}}, {{3933554871027576989ull, 18109499775942011776ull, 2991380155645637899ull, 7297527345711861512ull}}, {{4916943588784471236ull, 18025188701500126816ull, 3739225194557047374ull, 9121909182139826890ull}}, {{3073089742990294522ull, 6654056920010191356ull, 6948701765025542513ull, 5701193238837391806ull}}, {{3841362178737868153ull, 12929257168440127099ull, 17909249243136703949ull, 7126491548546739757ull}}, {{190016704994947287ull, 2326513405267995162ull, 8551503498638716225ull, 8908114435683424697ull}}, {{4730446459049229959ull, 12983285924360966736ull, 16873904732717667400ull, 5567571522302140435ull}}, {{5913058073811537448ull, 16229107405451208420ull, 16480694897469696346ull, 6959464402877675544ull}}, {{7391322592264421810ull, 11063012219959234717ull, 2154124548127568817ull, 8699330503597094431ull}}, {{6925419629378957583ull, 18443597683542991458ull, 8263856870220812366ull, 5437081564748184019ull}}, {{17880146573578472787ull, 13831125067573963514ull, 5718135069348627554ull, 6796351955935230024ull}}, {{13126811180118315176ull, 8065534297612678585ull, 7147668836685784443ull, 8495439944919037530ull}}, {{1286727959932865129ull, 2735115926794230164ull, 9078979041356003181ull, 5309649965574398456ull}}, {{1608409949916081411ull, 8030580926920175609ull, 11348723801695003976ull, 6637062456967998070ull}}, {{6622198455822489668ull, 10038226158650219511ull, 4962532715263979162ull, 8296328071209997588ull}}, {{11056403062530137899ull, 10885577367583775098ull, 12324954983894762784ull, 5185205044506248492ull}}, {{4597131791307896565ull, 13606971709479718873ull, 15406193729868453480ull, 6481506305632810615ull}}, {{10358100757562258610ull, 17008714636849648591ull, 14646056143908178946ull, 8101882882041013269ull}}, {{13391342001117493488ull, 15242132666458418273ull, 11459628099156305793ull, 5063676801275633293ull}}, {{2904119446114703147ull, 5217607777790859130ull, 489477068663218530ull, 6329596001594541617ull}}, {{12853521344498154742ull, 15745381759093349720ull, 5223532354256411066ull, 7911995001993177021ull}}, {{8033450840311346714ull, 14452549617860731479ull, 5570550730623950868ull, 4944996876245735638ull}}, {{5430127531961795488ull, 18065687022325914349ull, 16186560450134714393ull, 6181246095307169547ull}}, {{11399345433379632264ull, 8747050722625229224ull, 15621514544241005088ull, 7726557619133961934ull}}, {{7124590895862270165ull, 5466906701640768265ull, 5151760571723240276ull, 4829098511958726209ull}}, {{13517424638255225611ull, 6833633377050960331ull, 11051386733081438249ull, 6036373139948407761ull}}, {{12285094779391644109ull, 13153727739741088318ull, 18425919434779185715ull, 7545466424935509701ull}}, {{3066498218692389664ull, 5915236828124486247ull, 13822042655950685024ull, 4715916515584693563ull}}, {{17668180828647650792ull, 7394046035155607808ull, 12665867301510968376ull, 5894895644480866954ull}}, {{3638481962100011874ull, 9242557543944509761ull, 6608962090033934662ull, 7368619555601083693ull}}, {{9159788471052402747ull, 2329824893075861393ull, 12872888630969806232ull, 9210774444501354616ull}}, {{17254082840476221477ull, 1456140558172413370ull, 8045555394356128895ull, 5756734027813346635ull}}, {{12344231513740501038ull, 15655233752997680425ull, 5445258224517773214ull, 7195917534766683294ull}}, {{1595231336893462585ull, 10345670154392324724ull, 16029944817501992326ull, 8994896918458354117ull}}, {{10220391622413189924ull, 1854357828067815048ull, 12324558520152439156ull, 5621810574036471323ull}}, {{12775489528016487405ull, 2317947285084768810ull, 10794012131763161041ull, 7027263217545589154ull}}, {{6745989873165833448ull, 7509120124783348917ull, 4269143127849175493ull, 8784079021931986443ull}}, {{6522086679942339857ull, 6999043087203287025ull, 362371445692040731ull, 5490049388707491527ull}}, {{12764294368355312725ull, 4137117840576720877ull, 14288022362397214626ull, 6862561735884364408ull}}, {{2120309905161977195ull, 14394769337575676905ull, 17860027952996518282ull, 8578202169855455510ull}}, {{12854408736794705507ull, 13608416854412185969ull, 6550831452195436022ull, 5361376356159659694ull}}, {{2232952865711218171ull, 7787149031160456654ull, 17411911352099070836ull, 6701720445199574617ull}}, {{12014563118993798522ull, 9733936288950570817ull, 7929831134841674833ull, 8377150556499468272ull}}, {{591572921730042221ull, 17612925226662576521ull, 4956144459276046770ull, 5235719097812167670ull}}, {{5351152170589940680ull, 12792784496473444843ull, 15418552610949834271ull, 6544648872265209587ull}}, {{2077254194810037945ull, 11379294602164418150ull, 14661504745259904935ull, 8180811090331511984ull}}, {{15133341927038437428ull, 14029588153993843199ull, 9163440465787440584ull, 5113006931457194990ull}}, {{14304991390370658881ull, 17536985192492303999ull, 2230928545379524922ull, 6391258664321493738ull}}, {{13269553219535935697ull, 12697859453760604191ull, 12012032718579181961ull, 7989073330401867172ull}}, {{15210999789851041667ull, 1018633130959295763ull, 16730892485966764534ull, 4993170831501166982ull}}, {{14402063718886414179ull, 10496663450553895512ull, 11690243570603679859ull, 6241463539376458728ull}}, {{18002579648608017724ull, 8509143294764981486ull, 14612804463254599824ull, 7801829424220573410ull}}, {{6639926261952623174ull, 5318214559228113429ull, 13744688807961512794ull, 4876143390137858381ull}}, {{12911593845868166871ull, 15871140235889917594ull, 3345802954669727280ull, 6095179237672322977ull}}, {{6916120270480432781ull, 1392181221152845377ull, 8793939711764547005ull, 7618974047090403721ull}}, {{15851790215118740248ull, 3175956272434222312ull, 17025427365921311638ull, 4761858779431502325ull}}, {{1367993695188873694ull, 13193317377397553699ull, 7446726152119475835ull, 5952323474289377907ull}}, {{15545050174268255829ull, 11879960703319554219ull, 4696721671721956890ull, 7440404342861722384ull}}, {{7409813349703965942ull, 12036661458002109291ull, 2935451044826223056ull, 4650252714288576490ull}}, {{4650580668702569523ull, 15045826822502636614ull, 12892685842887554628ull, 5812815892860720612ull}}, {{15036597872732987711ull, 360539454418744151ull, 16115857303609443286ull, 7266019866075900765ull}}, {{14184061322488846735ull, 9674046354878205997ull, 6309763574229640395ull, 9082524832594875957ull}}, {{11170881335769223162ull, 3740435962585184796ull, 6249445243107219199ull, 5676578020371797473ull}}, {{13963601669711528952ull, 63858934804093091ull, 12423492572311411903ull, 7095722525464746841ull}}, {{12842816068712023286ull, 13914881723787280076ull, 1694307660107101166ull, 8869653156830933552ull}}, {{17250132079799790362ull, 4085115058939662143ull, 1058942287566938229ull, 5543533223019333470ull}}, {{16950979081322350048ull, 9718079842101965583ull, 10547049896313448594ull, 6929416528774166837ull}}, {{16577037833225549656ull, 2924227765772681171ull, 17795498388819198647ull, 8661770660967708546ull}}, {{8054805636552274583ull, 8745171381249007588ull, 15733872511439387058ull, 5413606663104817841ull}}, {{10068507045690343229ull, 1708092189706483677ull, 5832282584017070111ull, 6767008328881022302ull}}, {{17197319825540316940ull, 15970173292415268308ull, 16513725266876113446ull, 8458760411101277877ull}}, {{1524952854107922280ull, 5369672289332154789ull, 12626921301011264856ull, 5286725256938298673ull}}, {{6517877086062290754ull, 6712090361665193486ull, 1948593570981917358ull, 6608406571172873342ull}}, {{17370718394432639250ull, 17613484988936267665ull, 11659114000582172505ull, 8260508213966091677ull}}, {{3939169968879317675ull, 4090899090444085435ull, 9592789259577551768ull, 5162817633728807298ull}}, {{312276442671759190ull, 5113623863055106794ull, 2767614537617163902ull, 6453522042161009123ull}}, {{9613717590194474795ull, 15615401865673659300ull, 17294576227303618589ull, 8066902552701261403ull}}, {{15231945530726322555ull, 12065469175259731014ull, 8503267132851067666ull, 5041814095438288377ull}}, {{9816559876553127386ull, 5858464432219887960ull, 15240769934491222487ull, 6302267619297860471ull}}, {{12270699845691409232ull, 2711394521847472046ull, 14439276399686640205ull, 7877834524122325589ull}}, {{3057501385129742866ull, 4000464585368363981ull, 11330390759017844080ull, 4923646577576453493ull}}, {{8433562749839566487ull, 5000580731710454976ull, 327930393490141388ull, 6154558221970566867ull}}, {{10541953437299458108ull, 6250725914638068720ull, 14244971047144840447ull, 7693197777463208583ull}}, {{6588720898312161318ull, 10824232724289874806ull, 15820635932106607135ull, 4808248610914505364ull}}, {{17459273159744977455ull, 8918604886934955603ull, 1329050841423707303ull, 6010310763643131706ull}}, {{17212405431253833915ull, 6536570090241306600ull, 10884685588634409937ull, 7512888454553914632ull}}, {{10757753394533646197ull, 15614571352469286385ull, 6802928492896506210ull, 4695555284096196645ull}}, {{18058877761594445650ull, 10294842153731832173ull, 13115346634548020667ull, 5869444105120245806ull}}, {{8738539146710893351ull, 8256866673737402313ull, 7170811256330250026ull, 7336805131400307258ull}}, {{15534859951816004592ull, 1097711305316977083ull, 18186886107267588341ull, 9171006414250384072ull}}, {{7403444460671308918ull, 2991912575036804629ull, 11366803817042242713ull, 5731879008906490045ull}}, {{13865991594266524052ull, 8351576737223393690ull, 373446716020639679ull, 7164848761133112557ull}}, {{8109117455978379257ull, 5827784903101854209ull, 5078494413453187503ull, 8956060951416390696ull}}, {{16597413456054956796ull, 10559894592079740736ull, 3174059008408242189ull, 5597538094635244185ull}}, {{2300022746359144378ull, 17811554258527063825ull, 8579259778937690640ull, 6996922618294055231ull}}, {{7486714451376318377ull, 3817698749449278165ull, 6112388705244725397ull, 8746153272867569039ull}}, {{6985039541323892938ull, 4691904727619492805ull, 10737771968419035229ull, 5466345795542230649ull}}, {{13342985445082254076ull, 10476566927951753910ull, 18033900978951181940ull, 6832932244427788311ull}}, {{7455359769498041787ull, 13095708659939692388ull, 17930690205261589521ull, 8541165305534735389ull}}, {{13882971892791051925ull, 1267288884821225886ull, 13512524387502187403ull, 5338228315959209618ull}}, {{8130342829134039098ull, 15419169161308696070ull, 7667283447522958445ull, 6672785394949012023ull}}, {{939556499562773065ull, 5438903396353706376ull, 4972418290976310153ull, 8340981743686265029ull}}, {{587222812226733166ull, 14928529668789536245ull, 5413604441073887797ull, 5213113589803915643ull}}, {{5345714533710804361ull, 4825604030704756594ull, 2155319532914971843ull, 6516391987254894554ull}}, {{15905515203993281259ull, 1420319019953557838ull, 11917521452998490612ull, 8145489984068618192ull}}, {{5329260984068412883ull, 10111071424325749457ull, 7448450908124056632ull, 5090931240042886370ull}}, {{11273262248512904008ull, 12638839280407186821ull, 87191598300294982ull, 6363664050053607963ull}}, {{256519755358966297ull, 6575177063654207719ull, 13944047553157532440ull, 7954580062567009953ull}}, {{7077853874740435792ull, 4109485664783879824ull, 1797500693082375919ull, 4971612539104381221ull}}, {{8847317343425544740ull, 525171062552461876ull, 6858561884780357803ull, 6214515673880476526ull}}, {{11059146679281930925ull, 14491521883472741057ull, 17796574392830223061ull, 7768144592350595657ull}}, {{18441181720619676588ull, 11363044186384157112ull, 4205329967877807557ull, 4855090370219122286ull}}, {{4604733077065044119ull, 368747177698032679ull, 14480034496702035255ull, 6068862962773902857ull}}, {{1144230327903917245ull, 14295992027404704561ull, 4264985065595380356ull, 7586078703467378572ull}}, {{12244359001008418038ull, 18158367053982716158ull, 11888987702851888530ull, 4741299189667111607ull}}, {{6082076714405746740ull, 13474586780623619390ull, 10249548610137472759ull, 5926623987083889509ull}}, {{16825967929861959232ull, 12231547457352136333ull, 17423621781099228853ull, 7408279983854861886ull}}, {{12822072965377418472ull, 9950560170058779160ull, 6278077594759630129ull, 4630174989909288679ull}}, {{16027591206721773090ull, 17049886231000861854ull, 3235910975022149757ull, 5787718737386610849ull}}, {{10811116971547440555ull, 7477299733468913606ull, 8656574737205075101ull, 7234648421733263561ull}}, {{4290524177579524885ull, 13958310685263529912ull, 15432404439933731780ull, 9043310527166579451ull}}, {{2681577610987203054ull, 17947316215144482003ull, 7339409765744888410ull, 5652069079479112157ull}}, {{17187030069016167529ull, 13210773232075826695ull, 13785948225608498417ull, 7065086349348890196ull}}, {{16872101567842821507ull, 2678408484812619657ull, 17232435282010623022ull, 8831357936686112745ull}}, {{3627534452260681586ull, 15509063358290050998ull, 3852743023615557532ull, 5519598710428820466ull}}, {{13757790102180627790ull, 939585124153012131ull, 14039300816374222724ull, 6899498388036025582ull}}, {{12585551609298396834ull, 1174481405191265164ull, 8325753983613002597ull, 8624372985045031978ull}}, {{17089341792666273829ull, 3039893887458234679ull, 9815282258185514527ull, 5390233115653144986ull}}, {{16749991222405454383ull, 17634925414604957061ull, 3045730785877117350ull, 6737791394566431233ull}}, {{7102430972724654266ull, 12820284731401420519ull, 8418849500773784592ull, 8422239243208039041ull}}, {{11356548385593990772ull, 8012677957125887824ull, 16790995984052085130ull, 5263899527005024400ull}}, {{14195685481992488465ull, 792475409552583972ull, 2542000906355554797ull, 6579874408756280501ull}}, {{17744606852490610582ull, 5602280280368117869ull, 7789187151371831400ull, 8224843010945350626ull}}, {{13396222292020325566ull, 3501425175230073668ull, 9479927988034782529ull, 5140526881840844141ull}}, {{16745277865025406957ull, 8988467487464979989ull, 16461596003470866065ull, 6425658602301055176ull}}, {{7096539275999594984ull, 15847270377758612891ull, 2130250930629030965ull, 8032073252876318971ull}}, {{2129494038286052913ull, 12210386995312827009ull, 17472307896139002017ull, 5020045783047699356ull}}, {{7273553566284954046ull, 1427925688858870049ull, 3393640796464200906ull, 6275057228809624196ull}}, {{13703627976283580461ull, 11008279147928363369ull, 4242050995580251132ull, 7843821536012030245ull}}, {{1647238457536155932ull, 16103546504310002914ull, 4957124881451350909ull, 4902388460007518903ull}}, {{11282420108774970723ull, 6294375075105339930ull, 1584720083386800733ull, 6127985575009398629ull}}, {{4879653099113937596ull, 12479654862309062817ull, 6592586122660888820ull, 7659981968761748286ull}}, {{14578998233014680758ull, 17023156325797940068ull, 17955424381945219224ull, 4787488730476092678ull}}, {{18223747791268350947ull, 2832201333537873469ull, 13220908440576748223ull, 5984360913095115848ull}}, {{8944626683803274971ull, 17375309722204505549ull, 16526135550720935278ull, 7480451141368894810ull}}, {{7896234686590740809ull, 6247882557950428064ull, 14940520737627972453ull, 4675281963355559256ull}}, {{9870293358238426011ull, 12421539215865422984ull, 228906848325413950ull, 5844102454194449071ull}}, {{12337866697798032514ull, 6303551982977002922ull, 14121191615688931150ull, 7305128067743061338ull}}, {{6198961335392764835ull, 17102812015576029461ull, 8428117482756388129ull, 9131410084678826673ull}}, {{6180193843834171974ull, 3771728482093936557ull, 16796788472791212341ull, 5707131302924266670ull}}, {{12336928323220102871ull, 9326346621044808600ull, 11772613554134239618ull, 7133914128655333338ull}}, {{15421160404025128589ull, 2434561239451234942ull, 5492394905813023715ull, 8917392660819166673ull}}, {{5026539234088317464ull, 17662501839152879503ull, 14961961862201609581ull, 5573370413011979170ull}}, {{1671488024183008926ull, 8243069243658935667ull, 9479080290897236169ull, 6966713016264973963ull}}, {{15924418085510924870ull, 14915522573001057487ull, 7237164345194157307ull, 8708391270331217454ull}}, {{16870290331085409900ull, 7016358598911966977ull, 18358285771028512029ull, 5442744543957010908ull}}, {{7252804858574598662ull, 13382134267067346626ull, 4501113140076088420ull, 6803430679946263636ull}}, {{18289378110073024136ull, 16727667833834183282ull, 5626391425095110525ull, 8504288349932829545ull}}, {{16042547337223027989ull, 12760635405360058503ull, 15045709686752913838ull, 5315180218708018465ull}}, {{15441498153101397082ull, 6727422219845297321ull, 4972079053158978586ull, 6643975273385023082ull}}, {{5466814636094582641ull, 17632649811661397460ull, 15438470853303499040ull, 8304969091731278852ull}}, {{12640131184413889959ull, 11020406132288373412ull, 425672246459911092ull, 5190605682332049283ull}}, {{15800163980517362448ull, 13775507665360466765ull, 14367148363357052577ull, 6488257102915061603ull}}, {{5915146920364539348ull, 3384326526418419745ull, 13347249435768927818ull, 8110321378643827004ull}}, {{15226181871296306853ull, 6726890097438900244ull, 17565402934210355694ull, 5068950861652391877ull}}, {{585983265410831950ull, 17631984658653401114ull, 8121695612480780905ull, 6336188577065489847ull}}, {{9955851118618315745ull, 8204922768034587680ull, 5540433497173588228ull, 7920235721331862309ull}}, {{6222406949136447341ull, 14351448766876393108ull, 5768613944947186594ull, 4950147325832413943ull}}, {{7778008686420559176ull, 8715938921740715577ull, 2599081412756595339ull, 6187684157290517429ull}}, {{14334196876453086874ull, 6283237633748506567ull, 7860537784373132078ull, 7734605196613146786ull}}, {{15876402075424261152ull, 17762081576374980316ull, 9524522133660595452ull, 4834128247883216741ull}}, {{1398758520570774824ull, 3755857896759173780ull, 16517338685503132220ull, 6042660309854020926ull}}, {{1748448150713468530ull, 4694822370948967225ull, 11423301320024139467ull, 7553325387317526158ull}}, {{12621995140264387592ull, 628420972629410563ull, 2527877306587699263ull, 4720828367073453849ull}}, {{11165807906903096585ull, 14620584271068926916ull, 7771532651662011982ull, 5901035458841817311ull}}, {{13957259883628870732ull, 9052358301981382837ull, 5102729796150127074ull, 7376294323552271639ull}}, {{3611516799253924702ull, 2092075840621952739ull, 1766726226760270939ull, 9220367904440339549ull}}, {{18398099064029560603ull, 17448448464884578125ull, 3410046900938863288ull, 5762729940275212218ull}}, {{9162565774754787042ull, 3363816507396171041ull, 13485930663028354919ull, 7203412425344015272ull}}, {{16064893236870871706ull, 18039828689527377513ull, 16857413328785443648ull, 9004265531680019090ull}}, {{3123029245403212961ull, 11274892930954610946ull, 15147569348918290184ull, 5627665957300011931ull}}, {{13127158593608792009ull, 14093616163693263682ull, 14322775667720474826ull, 7034582446625014914ull}}, {{7185576205156214203ull, 8393648167761803795ull, 8680097547795817725ull, 8793228058281268643ull}}, {{2185142119008939925ull, 7551873114064821324ull, 3119217958158692126ull, 5495767536425792902ull}}, {{2731427648761174906ull, 216469355726250847ull, 13122394484553140966ull, 6869709420532241127ull}}, {{17249342616233632344ull, 9493958731512589366ull, 11791307087264038303ull, 8587136775665301409ull}}, {{6169153116718632311ull, 12851253234836450210ull, 452037901898942083ull, 5366960484790813381ull}}, {{16934813432753066197ull, 11452380525118174858ull, 5176733395801065508ull, 6708700605988516726ull}}, {{11945144754086556938ull, 14315475656397718573ull, 15694288781606107693ull, 8385875757485645907ull}}, {{9771558480517792039ull, 11253015294462268060ull, 7503087479290123356ull, 5241172348428528692ull}}, {{12214448100647240048ull, 14066269118077835075ull, 9378859349112654195ull, 6551465435535660865ull}}, {{10656374107381662156ull, 12971150379169905940ull, 16335260204818205648ull, 8189331794419576081ull}}, {{15883605853968314656ull, 8106968986981191212ull, 3292008600370296674ull, 5118332371512235051ull}}, {{1407763243750841703ull, 910339196871713208ull, 17950068805745034555ull, 6397915464390293813ull}}, {{1759704054688552129ull, 14972982051371805222ull, 8602527951899129481ull, 7997394330487867267ull}}, {{14934873089462508793ull, 2440584754466296407ull, 3070736960723261974ull, 4998371456554917042ull}}, {{14056905343400748087ull, 12274102979937646317ull, 13061793237758853275ull, 6247964320693646302ull}}, {{3736073623968771397ull, 10730942706494669993ull, 7103869510343790786ull, 7809955400867057878ull}}, {{13864261061048951883ull, 11318525209986556649ull, 18274976499247032953ull, 4881222125541911173ull}}, {{3495268271029026142ull, 313098457201032100ull, 9008662568776627480ull, 6101527656927388967ull}}, {{4369085338786282677ull, 391373071501290125ull, 6649142192543396446ull, 7626909571159236209ull}}, {{5036521345955120625ull, 14079666224970470040ull, 15684928916408092538ull, 4766818481974522630ull}}, {{6295651682443900782ull, 8376210744358311742ull, 10382789108655339865ull, 5958523102468153288ull}}, {{17092936639909651785ull, 15081949448875277581ull, 12978486385819174831ull, 7448153878085191610ull}}, {{12988928409157226318ull, 16343747433188130344ull, 12723240009564372173ull, 4655096173803244756ull}}, {{16236160511446532897ull, 6594626236202999218ull, 15904050011955465217ull, 5818870217254055945ull}}, {{11071828602453390313ull, 12854968813681136927ull, 6045004459662167809ull, 7273587771567569932ull}}, {{9228099734639349987ull, 2233652961819257447ull, 7556255574577709762ull, 9091984714459462415ull}}, {{12685091361790675598ull, 6007719119564423808ull, 11640188761752150457ull, 5682490446537164009ull}}, {{15856364202238344498ull, 12121334917882917664ull, 715177896908024359ull, 7103113058171455012ull}}, {{1373711179088379006ull, 10539982628926259177ull, 893972371135030449ull, 8878891322714318765ull}}, {{12387784532998706639ull, 18116704189147381745ull, 2864575741173087982ull, 5549307076696449228ull}}, {{1649672610966219587ull, 13422508199579451374ull, 3580719676466359978ull, 6936633845870561535ull}}, {{11285462800562550291ull, 7554763212619538409ull, 18310957650865113685ull, 8670792307338201918ull}}, {{135885222710512076ull, 7027570017100905458ull, 6832662513363308149ull, 5419245192086376199ull}}, {{9393228565242915903ull, 13396148539803519726ull, 3929142123276747282ull, 6774056490107970249ull}}, {{2518163669698869071ull, 7521813637899623850ull, 9523113672523322007ull, 8467570612634962811ull}}, {{6185538311989181073ull, 11618662551328346762ull, 3646103036113382302ull, 5292231632896851757ull}}, {{16955294926841252150ull, 5299956152305657644ull, 9169314813569115782ull, 6615289541121064696ull}}, {{2747374584842013571ull, 15848317227236847864ull, 11461643516961394727ull, 8269111926401330870ull}}, {{1717109115526258482ull, 16822727294664111771ull, 2551841179673483800ull, 5168194954000831794ull}}, {{15981444449689986814ull, 2581665044620588097ull, 12413173511446630559ull, 6460243692501039742ull}}, {{6141747506830319806ull, 17062139361057898834ull, 6293094852453512390ull, 8075304615626299678ull}}, {{8450278210196337783ull, 6052151082233798867ull, 17768242338065608956ull, 5047065384766437298ull}}, {{5951161744318034324ull, 7565188852792248584ull, 12986930885727235387ull, 6308831730958046623ull}}, {{7438952180397542905ull, 4844800047562922826ull, 11621977588731656330ull, 7886039663697558279ull}}, {{9261031131175852220ull, 7639686048154214670ull, 14181265020598367062ull, 4928774789810973924ull}}, {{2352916877115039467ull, 326235523337992530ull, 17726581275747958828ull, 6160968487263717405ull}}, {{12164518133248575142ull, 407794404172490662ull, 8323168539402784823ull, 7701210609079646757ull}}, {{2991137814852971560ull, 7172400530248888520ull, 7507823346340434466ull, 4813256630674779223ull}}, {{3738922268566214449ull, 18188872699665886458ull, 4773093164498155178ull, 6016570788343474029ull}}, {{13897024872562543870ull, 13512718837727582264ull, 10578052474050081877ull, 7520713485429342536ull}}, {{8685640545351589919ull, 10751292282793432867ull, 6611282796281301173ull, 4700445928393339085ull}}, {{6245364663262099494ull, 18050801371919178988ull, 12875789513779014370ull, 5875557410491673856ull}}, {{7806705829077624368ull, 13340129678044197927ull, 16094736892223767963ull, 7344446763114592320ull}}, {{5146696267919642556ull, 12063476079127859505ull, 1671677041570158338ull, 9180558453893240401ull}}, {{14745900213518246357ull, 12151358567882300094ull, 12574013197049818721ull, 5737849033683275250ull}}, {{9209003230043032139ull, 1354140154570711406ull, 6494144459457497594ull, 7172311292104094063ull}}, {{2287882000699014365ull, 10916047230068165066ull, 3505994555894484088ull, 8965389115130117579ull}}, {{6041612268864271882ull, 6822529518792603166ull, 18332147661929910219ull, 5603368196956323486ull}}, {{16775387372935115661ull, 3916475880063366053ull, 13691812540557611966ull, 7004210246195404358ull}}, {{7134176160886730864ull, 14118966886933983375ull, 7891393638842239149ull, 8755262807744255448ull}}, {{11376389128195288646ull, 11130197313547433561ull, 4932121024276399468ull, 5472039254840159655ull}}, {{385428354961947096ull, 13912746641934291952ull, 1553465261918111431ull, 6840049068550199569ull}}, {{481785443702433869ull, 12779247283990477036ull, 6553517595825027193ull, 8550061335687749461ull}}, {{9524487939168796977ull, 1069500524852966291ull, 6401791506604335948ull, 5343788334804843413ull}}, {{7293923905533608317ull, 1336875656066207864ull, 12613925401682807839ull, 6679735418506054266ull}}, {{9117404881917010396ull, 15506152625364923542ull, 6544034715248733990ull, 8349669273132567833ull}}, {{1086692032770743593ull, 5079659372425689310ull, 15619236743098928504ull, 5218543295707854895ull}}, {{10581737077818205300ull, 6349574215532111637ull, 14912359910446272726ull, 6523179119634818619ull}}, {{17838857365700144528ull, 17160339806269915354ull, 14028763869630453003ull, 8153973899543523274ull}}, {{15760971871989978234ull, 8419369369705003144ull, 13379663436946421031ull, 5096233687214702046ull}}, {{1254470766277921177ull, 5912525693703866027ull, 7501207259328250481ull, 6370292109018377558ull}}, {{15403146513129565183ull, 12002343135557220437ull, 153137037305537293ull, 7962865136272971948ull}}, {{11932809579919672192ull, 9807307468936956725ull, 9319082685170736616ull, 4976790710170607467ull}}, {{1080953919617426527ull, 12259134336171195907ull, 7037167338036032866ull, 6220988387713259334ull}}, {{15186250454803946871ull, 6100545883359219075ull, 18019831209399816891ull, 7776235484641574167ull}}, {{7185563525038772843ull, 1506998167885817970ull, 18179923533515967413ull, 4860147177900983854ull}}, {{18205326443153241861ull, 6495433728284660366ull, 13501532380040183458ull, 6075183972376229818ull}}, {{13533286017086776518ull, 17342664197210601266ull, 7653543438195453514ull, 7593979965470287273ull}}, {{13069989779106623228ull, 15450851141684013695ull, 16312679694940628206ull, 4746237478418929545ull}}, {{11725801205455891131ull, 10090191890250241311ull, 6555791563393621546ull, 5932796848023661932ull}}, {{10045565488392476010ull, 3389367825958025831ull, 8194739454242026933ull, 7415996060029577415ull}}, {{13196007457886379362ull, 4424197900437460096ull, 12039241186542348689ull, 4634997537518485884ull}}, {{16495009322357974203ull, 10141933393974213024ull, 15049051483177935861ull, 5793746921898107355ull}}, {{2172017579237916137ull, 17289102760895154185ull, 14199628335545031922ull, 7242183652372634194ull}}, {{7326707992474783075ull, 12388006414264166923ull, 8526163382576514095ull, 9052729565465792743ull}}, {{2273349486083045470ull, 14660033036556186183ull, 12246381141751403165ull, 5657955978416120464ull}}, {{16676744912885970550ull, 4489983240413069016ull, 15307976427189253957ull, 7072444973020150580ull}}, {{2399187067397911571ull, 10224165068943724175ull, 688226460277015830ull, 8840556216275188226ull}}, {{8417020944764776588ull, 1778417149662439705ull, 5041827556100522798ull, 5525347635171992641ull}}, {{15132962199383358639ull, 11446393473932825439ull, 10913970463553041401ull, 6906684543964990801ull}}, {{14304516730801810395ull, 472933787133868087ull, 18254149097868689656ull, 8633355679956238501ull}}, {{15857851984392213353ull, 295583616958667554ull, 13714686195381624987ull, 5395847299972649063ull}}, {{10598942943635490883ull, 14204537576480498155ull, 12531671725799643329ull, 6744809124965811329ull}}, {{8636992661116975699ull, 3920613915318458982ull, 1829531601967390450ull, 8431011406207264162ull}}, {{786434394770721908ull, 7062069715501424768ull, 5755143269657006935ull, 5269382128879540101ull}}, {{983042993463402385ull, 4215901125949393056ull, 11805615105498646573ull, 6586727661099425126ull}}, {{1228803741829252982ull, 9881562425864129224ull, 5533646845018532408ull, 8233409576374281408ull}}, {{768002338643283114ull, 6175976516165080765ull, 3458529278136582755ull, 5145880985233925880ull}}, {{5571688941731491796ull, 3108284626778963052ull, 4323161597670728444ull, 6432351231542407350ull}}, {{6964611177164364745ull, 3885355783473703815ull, 14627324033943186363ull, 8040439039428009187ull}}, {{11270411013368809822ull, 122504355457370932ull, 6836234512000797525ull, 5025274399642505742ull}}, {{14088013766711012277ull, 4764816462749101569ull, 17768665176855772714ull, 6281592999553132177ull}}, {{3774959153106601634ull, 15179392615291152770ull, 8375773415787552180ull, 7851991249441415222ull}}, {{6971035489119013926ull, 263748347702194673ull, 623172366439832209ull, 4907494530900884514ull}}, {{13325480379826155311ull, 4941371453055131245ull, 10002337494904566069ull, 6134368163626105642ull}}, {{2821792419500530426ull, 10788400334746301961ull, 3279549831775931778ull, 7667960204532632053ull}}, {{13292835308256301277ull, 11354436227643826629ull, 4355561654073651313ull, 4792475127832895033ull}}, {{2780986080038212884ull, 357987229272619575ull, 10056138086019452046ull, 5990593909791118791ull}}, {{17311290655329929816ull, 9670856073445550276ull, 7958486589096927153ull, 7488242387238898489ull}}, {{1596184622726430327ull, 17573500091971938683ull, 16503269164254049230ull, 4680151492024311555ull}}, {{15830288833690201621ull, 12743503078110147545ull, 16017400436890173634ull, 5850189365030389444ull}}, {{5952802986830588314ull, 6706006810782908624ull, 1575006472403165427ull, 7312736706287986806ull}}, {{7441003733538235393ull, 3770822495051247876ull, 11192130127358732592ull, 9140920882859983507ull}}, {{13873999370316172929ull, 2356764059407029922ull, 4689238320385513918ull, 5713075551787489692ull}}, {{8119127176040440353ull, 12169327111113563211ull, 5861547900481892397ull, 7141344439734362115ull}}, {{5537222951623162537ull, 1376600833609790302ull, 2715248857174977593ull, 8926680549667952644ull}}, {{17295822400046640298ull, 12389590567074588698ull, 10920402572589136803ull, 5579175343542470402ull}}, {{12396405963203524564ull, 10875302190415847969ull, 4427131178881645196ull, 6973969179428088003ull}}, {{1660449398722241993ull, 13594127738019809962ull, 922227955174668591ull, 8717461474285110004ull}}, {{5649466892628789150ull, 15413858863903463082ull, 9799764508838943677ull, 5448413421428193752ull}}, {{16285205652640762245ull, 5432265524597165140ull, 12249705636048679597ull, 6810516776785242190ull}}, {{1909762992091401190ull, 11402017924173844330ull, 6088760008206073688ull, 8513145970981552738ull}}, {{5805287888484513648ull, 7126261202608652706ull, 8417161023556183959ull, 5320716231863470461ull}}, {{16479981897460417868ull, 4296140484833427978ull, 15133137297872617853ull, 6650895289829338076ull}}, {{11376605334970746527ull, 9981861624469172877ull, 469677548631220700ull, 8313619112286672596ull}}, {{9416221343570410531ull, 15462035552148008856ull, 9516920504749288745ull, 5196011945179170372ull}}, {{11770276679463013164ull, 5492486384902847358ull, 11896150630936610932ull, 6495014931473962965ull}}, {{5489473812473990647ull, 6865607981128559198ull, 1035130233388599953ull, 8118768664342453707ull}}, {{17265979188078407867ull, 15820220034273819258ull, 16787857460363732634ull, 5074230415214033566ull}}, {{12359101948243234025ull, 10551903005987498265ull, 11761449788599889985ull, 6342788019017541958ull}}, {{1613819380021878819ull, 17801564775911760736ull, 5478440198895086673ull, 7928485023771927448ull}}, {{1008637112513674262ull, 4208448957303768604ull, 3424025124309429171ull, 4955303139857454655ull}}, {{1260796390642092828ull, 648875178202322851ull, 18115089460668950176ull, 6194128924821818318ull}}, {{15411053543584779747ull, 811093972752903563ull, 13420489788981411912ull, 7742661156027272898ull}}, {{7326065455526793390ull, 506933732970564727ull, 12999492136540770349ull, 4839163222517045561ull}}, {{4545895800981103833ull, 5245353184640593813ull, 2414307115393799224ull, 6048954028146306952ull}}, {{10294055769653767695ull, 6556691480800742266ull, 3017883894242249030ull, 7561192535182883690ull}}, {{11045470874460992714ull, 17932990230782627628ull, 6497863452328793547ull, 4725745334489302306ull}}, {{13806838593076240892ull, 17804551770050896631ull, 17345701352265767742ull, 5907181668111627882ull}}, {{12646862222917913211ull, 13032317675708844981ull, 12458754653477433870ull, 7383977085139534853ull}}, {{10210131898537389709ull, 3533512528890640209ull, 10092564667637090121ull, 4614985678212209283ull}}, {{17374350891599125040ull, 9028576679540688165ull, 8004019816118974747ull, 5768732097765261604ull}}, {{7882880559216742588ull, 6674034830998472303ull, 10005024770148718434ull, 7210915122206577005ull}}, {{5241914680593540331ull, 17565915575602866187ull, 17117966981113285946ull, 9013643902758221256ull}}, {{970353666157268755ull, 15590383253179179271ull, 10698729363195803716ull, 5633527439223888285ull}}, {{15048000137978749656ull, 1041234992764422472ull, 17985097722422142550ull, 7041909299029860356ull}}, {{363256098763885453ull, 10524915777810303899ull, 4034628079318126571ull, 8802386623787325446ull}}, {{16367936126223286073ull, 4272229351917745984ull, 16356700604855992819ull, 5501491639867078403ull}}, {{2013176084069555975ull, 728600671469794577ull, 15834189737642603120ull, 6876864549833848004ull}}, {{7128156123514332872ull, 910750839337243221ull, 1345993098343702284ull, 8596080687292310006ull}}, {{6760940586410151997ull, 9792591311440552821ull, 14676303741746977639ull, 5372550429557693753ull}}, {{13062861751440077900ull, 7629053120873303122ull, 4510321621901558337ull, 6715688036947117192ull}}, {{7105205152445321567ull, 14148002419519016807ull, 5637902027376947921ull, 8394610046183896490ull}}, {{11358282247919407836ull, 1924972484558303648ull, 8135374785537980355ull, 5246631278864935306ull}}, {{14197852809899259795ull, 16241273660980043272ull, 945846445067699635ull, 6558289098581169133ull}}, {{17747316012374074743ull, 15689906057797666186ull, 5793994074762012448ull, 8197861373226461416ull}}, {{15703758526161184619ull, 9806191286123541366ull, 3621246296726257780ull, 5123663358266538385ull}}, {{10406326120846704965ull, 12257739107654426708ull, 9138243889335210129ull, 6404579197833172981ull}}, {{13007907651058381206ull, 1487115829285869673ull, 16034490880096400566ull, 8005723997291466226ull}}, {{1212413254270406398ull, 14764505448585832258ull, 14633242818487638257ull, 5003577498307166391ull}}, {{10738888604692783806ull, 4620573755450126610ull, 13679867504682159918ull, 6254471872883957989ull}}, {{4200238719011203949ull, 14999089231167434071ull, 3264776325570536185ull, 7818089841104947487ull}}, {{9542678227023084324ull, 2456901741838564438ull, 8958014231122666972ull, 4886306150690592179ull}}, {{2704975746924079597ull, 3071127177298205548ull, 6585831770475945811ull, 6107882688363240224ull}}, {{3381219683655099496ull, 17673967026904920647ull, 8232289713094932263ull, 7634853360454050280ull}}, {{9030791329925519041ull, 17963758419456657260ull, 5145181070684332664ull, 4771783350283781425ull}}, {{11288489162406898802ull, 4007953950611269959ull, 11043162356782803735ull, 5964729187854726781ull}}, {{9498925434581235598ull, 398256419836699545ull, 18415638964405892573ull, 7455911484818408476ull}}, {{17466043442681742009ull, 2554753271611631167ull, 2286402315898907050ull, 4659944678011505298ull}}, {{17220868284924789607ull, 12416813626369314767ull, 12081374931728409620ull, 5824930847514381622ull}}, {{16914399337728599105ull, 15521017032961643459ull, 5878346627805736217ull, 7281163559392977028ull}}, {{16531313153733360977ull, 5566213235919890612ull, 7347933284757170272ull, 9101454449241221285ull}}, {{1108698684228574803ull, 3478883272449931633ull, 6898301312186925372ull, 5688409030775763303ull}}, {{5997559373713106407ull, 4348604090562414541ull, 4011190621806268811ull, 7110511288469704129ull}}, {{12108635235568770913ull, 824069094775630272ull, 9625674295685223918ull, 8888139110587130161ull}}, {{7567897022230481821ull, 14350101239516932632ull, 17545261480871734708ull, 5555086944116956350ull}}, {{9459871277788102276ull, 17937626549396165790ull, 12708204814234892577ull, 6943858680146195438ull}}, {{2601467060380352037ull, 8586975131463043526ull, 6661883980938839914ull, 8679823350182744298ull}}, {{15460974968019883735ull, 9978545475591790107ull, 8775363506514162850ull, 5424889593864215186ull}}, {{14714532691597466765ull, 3249809807634961826ull, 1745832346287927755ull, 6781111992330268983ull}}, {{9169793827642057648ull, 17897320314825865995ull, 16017348488142073405ull, 8476389990412836228ull}}, {{3425278133062592078ull, 13491668205979860199ull, 787470768234020070ull, 5297743744008022643ull}}, {{18116655721610403809ull, 7641213220620049440ull, 14819396515574688800ull, 6622179680010028303ull}}, {{4199075578303453146ull, 9551516525775061801ull, 13912559626040973096ull, 8277724600012535379ull}}, {{14153637282508127976ull, 5969697828609413625ull, 6389506757061914233ull, 5173577875007834612ull}}, {{3856988547852996258ull, 12073808304189154936ull, 7986883446327392791ull, 6466972343759793265ull}}, {{4821235684816245322ull, 10480574361809055766ull, 14595290326336628893ull, 8083715429699741581ull}}, {{16848330358292317039ull, 8856201985344353805ull, 11427899463174087010ull, 5052322143562338488ull}}, {{7225354892583232586ull, 1846880444825666449ull, 14284874328967608763ull, 6315402679452923110ull}}, {{13643379634156428637ull, 16143658611314246773ull, 8632720874354735145ull, 7894253349316153888ull}}, {{10832955280561461850ull, 3172257604430322377ull, 5395450546471709466ull, 4933908343322596180ull}}, {{18152880119129215217ull, 13188694042392678779ull, 6744313183089636832ull, 6167385429153245225ull}}, {{18079414130484131117ull, 16485867552990848474ull, 13042077497289433944ull, 7709231786441556531ull}}, {{15911319849979969852ull, 10303667220619280296ull, 5845455426592202263ull, 4818269866525972832ull}}, {{1442405738765410699ull, 8267898007346712467ull, 7306819283240252829ull, 6022837333157466040ull}}, {{15638065228738927086ull, 14946558527610778487ull, 9133524104050316036ull, 7528546666446832550ull}}, {{16691319795602911285ull, 118227042901960746ull, 1096766546604059619ull, 4705341666529270344ull}}, {{11640777707648863298ull, 13982841858909614645ull, 1370958183255074523ull, 5881677083161587930ull}}, {{715914079278915410ull, 12866866305209630403ull, 10937069765923618962ull, 7352096353951984912ull}}, {{14729950654380807974ull, 6860210844657262195ull, 13671337207404523703ull, 9190120442439981140ull}}, {{6900376149774311032ull, 11205160805551870728ull, 17767957791482603122ull, 5743825276524988212ull}}, {{8625470187217888790ull, 4783078970085062602ull, 3763203165643702287ull, 7179781595656235266ull}}, {{1558465697167585179ull, 1367162694178940349ull, 13927375993909403667ull, 8974726994570294082ull}}, {{3279884069943434689ull, 16995377748357695382ull, 13316296014620765195ull, 5609204371606433801ull}}, {{13323227124284069170ull, 16632536167019731323ull, 2810311962993792782ull, 7011505464508042252ull}}, {{12042347886927698558ull, 11567298171919888346ull, 3512889953742240978ull, 8764381830635052815ull}}, {{12138153447757199503ull, 11841247375877318120ull, 9113085248729982467ull, 5477738644146908009ull}}, {{15172691809696499378ull, 10189873201419259746ull, 16003042579339865988ull, 6847173305183635011ull}}, {{9742492725265848415ull, 12737341501774074683ull, 15392117205747444581ull, 8558966631479543764ull}}, {{3783214944077461308ull, 10266681447822490629ull, 396701216737377055ull, 5349354144674714853ull}}, {{9340704698524214538ull, 8221665791350725382ull, 5107562539349109223ull, 6686692680843393566ull}}, {{2452508836300492365ull, 5665396220761018824ull, 15607825211041162337ull, 8358365851054241957ull}}, {{1532818022687807728ull, 15070087684044106525ull, 12060733766114420412ull, 5223978656908901223ull}}, {{6527708546787147564ull, 390865531345581540ull, 10464231189215637612ull, 6529973321136126529ull}}, {{8159635683483934455ull, 488581914181976925ull, 17691975004946934919ull, 8162466651420158161ull}}, {{7405615311391152987ull, 7222892724004817434ull, 4139955350450752468ull, 5101541657137598851ull}}, {{33647102384165425ull, 9028615905006021793ull, 563258169636052681ull, 6376927071421998564ull}}, {{4653744896407594685ull, 15897455899684915145ull, 704072712045065851ull, 7971158839277498205ull}}, {{14437805606323216438ull, 7630066928089378013ull, 2745888454241860109ull, 4981974274548436378ull}}, {{4212198952621856836ull, 14149269678539110421ull, 12655732604657100944ull, 6227467843185545472ull}}, {{9876934709204708949ull, 17686587098173888026ull, 15819665755821376180ull, 7784334803981931840ull}}, {{10784770211680330997ull, 1830744899503904208ull, 9887291097388360113ull, 4865209252488707400ull}}, {{13480962764600413746ull, 6900117142807268164ull, 12359113871735450141ull, 6081511565610884250ull}}, {{16851203455750517183ull, 13236832446936473109ull, 6225520302814536868ull, 7601889457013605313ull}}, {{12837845169057767191ull, 17496392316190071501ull, 15420165235327555302ull, 4751180910633503320ull}}, {{2212248406040045277ull, 12647118358382813569ull, 828462470449892512ull, 5938976138291879151ull}}, {{7376996525977444500ull, 15808897947978516961ull, 14870636143344529352ull, 7423720172864848938ull}}, {{16139837874804372573ull, 9880561217486573100ull, 13905833608017718749ull, 4639825108040530586ull}}, {{1728053269795914100ull, 16962387540285604280ull, 8158919973167372628ull, 5799781385050663233ull}}, {{2160066587244892625ull, 2756240351647453734ull, 14810335984886603690ull, 7249726731313329041ull}}, {{11923455270910891589ull, 12668672476414092975ull, 4677861925826090900ull, 9062158414141661302ull}}, {{14369688571960389099ull, 17141292334613583917ull, 16758721758923470524ull, 5663849008838538313ull}}, {{4127052659668322662ull, 2979871344557428281ull, 7113344143372174444ull, 7079811261048172892ull}}, {{9770501843012791231ull, 3724839180696785351ull, 8891680179215218055ull, 8849764076310216115ull}}, {{13024092679524076376ull, 9245553515576572700ull, 3251457102795817332ull, 5531102547693885072ull}}, {{16280115849405095470ull, 11556941894470715875ull, 4064321378494771665ull, 6913878184617356340ull}}, {{15738458793328981433ull, 611119312806231132ull, 5080401723118464582ull, 8642347730771695425ull}}, {{613164708975837588ull, 14217007625786058170ull, 14704466123017510123ull, 5401467331732309640ull}}, {{9989827923074572793ull, 13159573513805184808ull, 18380582653771887654ull, 6751834164665387050ull}}, {{12487284903843215991ull, 7226094855401705202ull, 13752356280360083760ull, 8439792705831733813ull}}, {{12416239083329397898ull, 4516309284626065751ull, 10901065684438746302ull, 5274870441144833633ull}}, {{10908612835734359469ull, 14868758642637357997ull, 18238018123975820781ull, 6593588051431042041ull}}, {{18247452063095337240ull, 4750890248014533784ull, 8962464599687612265ull, 8241985064288802552ull}}, {{11404657539434585775ull, 14498521451077553375ull, 5601540374804757665ull, 5151240665180501595ull}}, {{9644135905865844315ull, 4288093758564778007ull, 2390239450078559178ull, 6439050831475626994ull}}, {{7443483863904917489ull, 14583489235060748317ull, 12211171349452974780ull, 8048813539344533742ull}}, {{6958020424154267383ull, 18338052808767743506ull, 3020296074980721333ull, 5030508462090333589ull}}, {{17920897567047610037ull, 9087507955677515670ull, 8387056112153289571ull, 6288135577612916986ull}}, {{13177749921954736738ull, 6747698926169506684ull, 1260448103336836156ull, 7860169472016146233ull}}, {{17459465738076486269ull, 13440683865710717485ull, 12316995110653992357ull, 4912605920010091395ull}}, {{7989274117313444124ull, 2965796776856233145ull, 10784557869890102543ull, 6140757400012614244ull}}, {{14598278665069193059ull, 17542304026352455143ull, 13480697337362628178ull, 7675946750015767805ull}}, {{16041453193309327518ull, 15575626034897672368ull, 10731278845065336563ull, 4797466718759854878ull}}, {{1605072417927107782ull, 14857846525194702557ull, 4190726519476894896ull, 5996833398449818598ull}}, {{6618026540836272631ull, 125564082783826580ull, 14461780186200894429ull, 7496041748062273247ull}}, {{13359638624877446203ull, 2384320560953585564ull, 15956141644016640874ull, 4685026092538920779ull}}, {{16699548281096807753ull, 12203772738046757763ull, 15333491036593413188ull, 5856282615673650974ull}}, {{16262749332943621787ull, 15254715922558447204ull, 9943491758886990677ull, 7320353269592063718ull}}, {{1881692592469975618ull, 5233336847915895294ull, 3205992661753962539ull, 9150441586990079648ull}}, {{15011115925575898473ull, 964992520733740606ull, 2003745413596226587ull, 5719025991868799780ull}}, {{9540522870115097284ull, 15041298706199339470ull, 2504681766995283233ull, 7148782489835999725ull}}, {{2702281550789095796ull, 4966565327467010626ull, 7742538227171491946ull, 8935978112294999656ull}}, {{6300611987670572777ull, 7715789348094269545ull, 4839086391982182466ull, 5584986320184374785ull}}, {{12487451003015603875ull, 421364648263061123ull, 10660544008405115987ull, 6981232900230468481ull}}, {{10997627735342116940ull, 14361763865610990116ull, 17937366028933782887ull, 8726541125288085601ull}}, {{16096889371443598895ull, 15893631443647950678ull, 4293324740442532448ull, 5454088203305053501ull}}, {{10897739677449722811ull, 1420295230850386732ull, 9978341943980553465ull, 6817610254131316876ull}}, {{13622174596812153514ull, 6387055056990371319ull, 12472927429975691831ull, 8522012817664146095ull}}, {{15431388150648677802ull, 10909438438260063930ull, 14713108671375889250ull, 5326258011040091309ull}}, {{10065863151456071445ull, 4413426010970304105ull, 4556327783937697851ull, 6657822513800114137ull}}, {{17194014957747477210ull, 905096495285492227ull, 10307095748349510218ull, 8322278142250142671ull}}, {{8440416339378479304ull, 5177371327980820546ull, 13359463870359525742ull, 5201423838906339169ull}}, {{1327148387368323322ull, 15695086196830801491ull, 2864271782667243465ull, 6501779798632923962ull}}, {{15493993539492567865ull, 5783799690756338151ull, 12803711765188830140ull, 8127224748291154952ull}}, {{16601274989823936772ull, 12838246843577487152ull, 8002319853243018837ull, 5079515467681971845ull}}, {{2304849663570369348ull, 2212750499189695229ull, 14614585834981161451ull, 6349394334602464806ull}}, {{7492748097890349589ull, 16600996179269282748ull, 9044860256871676005ull, 7936742918253081008ull}}, {{13906339598036244302ull, 12681465621256995669ull, 5653037660544797503ull, 4960464323908175630ull}}, {{3547866442263141665ull, 11240146008143856683ull, 16289669112535772687ull, 6200580404885219537ull}}, {{18269891108111090793ull, 9438496491752432949ull, 6527028335387552147ull, 7750725506106524422ull}}, {{13724524951783125698ull, 3593217298131576641ull, 17914450764899383804ull, 4844203441316577763ull}}, {{3320598134446743410ull, 4491521622664470802ull, 17781377437696841851ull, 6055254301645722204ull}}, {{13374119704913205071ull, 1002716009903200598ull, 3779977723411500698ull, 7569067877057152756ull}}, {{3747138797143365265ull, 5238383524616888278ull, 11585858113986963744ull, 4730667423160720472ull}}, {{13907295533283982389ull, 6547979405771110347ull, 14482322642483704680ull, 5913334278950900590ull}}, {{12772433398177590083ull, 8184974257213887934ull, 8879531266249855042ull, 7391667848688625738ull}}, {{3371084855433605898ull, 9727294929186067863ull, 10161393059833547305ull, 4619792405430391086ull}}, {{18048914124574171084ull, 16770804679909972732ull, 3478369287937158323ull, 5774740506787988858ull}}, {{4114398582008162239ull, 16351819831460078012ull, 13571333646776223712ull, 7218425633484986072ull}}, {{5142998227510202799ull, 1993030715615545899ull, 16964167058470279641ull, 9023032041856232590ull}}, {{908530882980182797ull, 12774859243328185947ull, 5990918393116536871ull, 5639395026160145369ull}}, {{14970721659007392209ull, 11356888035732844529ull, 12100334009823058993ull, 7049243782700181711ull}}, {{4878344018477076549ull, 361051989383891950ull, 10513731493851435838ull, 8811554728375227139ull}}, {{16884023066830336555ull, 14060715548647096180ull, 4265239174443453446ull, 5507221705234516962ull}}, {{2658284759828369078ull, 8352522398954094418ull, 14554921004909092616ull, 6884027131543146202ull}}, {{12546227986640237155ull, 10440652998692618022ull, 8970279219281589962ull, 8605033914428932753ull}}, {{3229706473222760318ull, 11137094142610274168ull, 17135639558119463486ull, 5378146196518082970ull}}, {{4037133091528450398ull, 4697995641408066902ull, 12196177410794553550ull, 6722682745647603713ull}}, {{14269788401265338805ull, 15095866588614859435ull, 1410163708211028225ull, 8403353432059504642ull}}, {{6612774741577142801ull, 2517387590243205291ull, 5493038336059280545ull, 5252095895037190401ull}}, {{3654282408544040597ull, 7758420506231394518ull, 11477983938501488585ull, 6565119868796488001ull}}, {{13791225047534826555ull, 14309711651216631051ull, 512421867844697019ull, 8206399835995610002ull}}, {{6313672645495572645ull, 6637726772796700455ull, 4931949685830323541ull, 5128999897497256251ull}}, {{3280404788442077902ull, 12908844484423263473ull, 1553251088860516522ull, 6411249871871570314ull}}, {{8712192003979985281ull, 6912683568674303533ull, 11164935897930421461ull, 8014062339839462892ull}}, {{7750963011701184753ull, 6626270239635133660ull, 16201456973061289221ull, 5008788962399664307ull}}, {{9688703764626480941ull, 12894523817971304979ull, 15640135197899223622ull, 6260986202999580384ull}}, {{7499193687355713272ull, 6894782735609355416ull, 1103424923664477912ull, 7826232753749475481ull}}, {{4686996054597320795ull, 4309239209755847135ull, 12218855623358768455ull, 4891395471093422175ull}}, {{1247059049819263090ull, 774862993767421015ull, 10661883510771072665ull, 6114244338866777719ull}}, {{15393881867556242574ull, 5580264760636664172ull, 8715668370036452927ull, 7642805423583472149ull}}, {{397804130367875801ull, 10405194503038996964ull, 7753135740486477031ull, 4776753389739670093ull}}, {{497255162959844751ull, 8394807110371358301ull, 14303105694035484193ull, 5970941737174587616ull}}, {{5233254972127193843ull, 15105194906391585780ull, 17878882117544355241ull, 7463677171468234520ull}}, {{12494156394434271960ull, 2523217788853659256ull, 11174301323465222026ull, 4664798232167646575ull}}, {{15617695493042839950ull, 12377394272921849878ull, 9356190635904139628ull, 5830997790209558219ull}}, {{10298747329448774129ull, 15471742841152312348ull, 7083552276452786631ull, 7288747237761947774ull}}, {{12873434161810967662ull, 14727992533013002531ull, 18077812382420759097ull, 9110934047202434717ull}}, {{5740053341918160837ull, 2287466305492044726ull, 13604475748226668388ull, 5694333779501521698ull}}, {{16398438714252476854ull, 2859332881865055907ull, 7782222648428559677ull, 7117917224376902123ull}}, {{15886362374388208163ull, 8185852120758707788ull, 5116092292108311692ull, 8897396530471127654ull}}, {{705604447137854294ull, 14339529612328968176ull, 17032615737849858519ull, 5560872831544454783ull}}, {{882005558922317867ull, 13312725996983822316ull, 16679083653884935245ull, 6951091039430568479ull}}, {{1102506948652897334ull, 2805849440947614183ull, 16237168548928781153ull, 8688863799288210599ull}}, {{7606595870549142690ull, 13282870946660728624ull, 17065759370721570076ull, 5430539874555131624ull}}, {{9508244838186428362ull, 16603588683325910780ull, 2885455139692410979ull, 6788174843193914531ull}}, {{11885306047733035453ull, 16142799835730000571ull, 17441876979897677436ull, 8485218553992393163ull}}, {{5122473270619453206ull, 865877860476474549ull, 8595330103222354446ull, 5303261596245245727ull}}, {{11014777606701704412ull, 10305719362450368994ull, 6132476610600555153ull, 6629076995306557159ull}}, {{4545099971522354707ull, 17493835221490349147ull, 3053909744823306037ull, 8286346244133196449ull}}, {{534844472987777740ull, 13239490022645162169ull, 13437908636583036033ull, 5178966402583247780ull}}, {{5280241609662110079ull, 2714304473024288999ull, 16797385795728795042ull, 6473708003229059725ull}}, {{1988615993650249694ull, 12616252628135137057ull, 7161674189378830090ull, 8092135004036324657ull}}, {{12772100042099875819ull, 12496843911011848564ull, 16005261414430238566ull, 5057584377522702910ull}}, {{15965125052624844774ull, 6397682851910034897ull, 10783204731183022400ull, 6321980471903378638ull}}, {{6121348260498892255ull, 7997103564887543622ull, 4255633877124002192ull, 7902475589879223298ull}}, {{17660900718093971372ull, 4998189728054714763ull, 7271457191629889274ull, 4939047243674514561ull}}, {{17464439879190076310ull, 15471109196923169262ull, 13701007507964749496ull, 6173809054593143201ull}}, {{12607177812132819580ull, 892142422444409962ull, 3291201329673773159ull, 7717261318241429002ull}}, {{12491172151010400142ull, 7475118041668838082ull, 6668686849473496128ull, 4823288323900893126ull}}, {{6390593151908224369ull, 9343897552086047603ull, 17559230598696645968ull, 6029110404876116407ull}}, {{3376555421457892557ull, 11679871940107559504ull, 17337352229943419556ull, 7536388006095145509ull}}, {{2110347138411182848ull, 16523291999422000498ull, 13141688152928331174ull, 4710242503809465943ull}}, {{11861305959868754368ull, 11430742962422724814ull, 11815424172733026064ull, 5887803129761832429ull}}, {{5603260412981167152ull, 14288428703028406018ull, 934222160634118868ull, 7359753912202290537ull}}, {{16227447553081234748ull, 17860535878785507522ull, 5779463719220036489ull, 9199692390252863171ull}}, {{14753840739103159622ull, 4245305896599860345ull, 1306321815298828854ull, 5749807743908039482ull}}, {{4607242868596785815ull, 14530004407604601240ull, 10856274305978311875ull, 7187259679885049352ull}}, {{5759053585745982269ull, 13550819491078363646ull, 13570342882472889844ull, 8984074599856311690ull}}, {{17434466546373402630ull, 17692634218778753086ull, 13093150319972944056ull, 5615046624910194806ull}}, {{12569711146111977479ull, 3669048699763889742ull, 7143065863111404263ull, 7018808281137743508ull}}, {{6488766895785196041ull, 18421368929987025890ull, 8928832328889255328ull, 8773510351422179385ull}}, {{8667165328293135430ull, 11513355581241891181ull, 17109735251624254340ull, 5483443969638862115ull}}, {{15445642678793807191ull, 14391694476552363976ull, 16775483046102930021ull, 6854304962048577644ull}}, {{860309274782707373ull, 4154560040408291259ull, 2522609733919110911ull, 8567881202560722056ull}}, {{16678594361235049772ull, 9514129052896263892ull, 1576631083699444319ull, 5354925751600451285ull}}, {{2401498877834260599ull, 7280975297692941962ull, 6582474873051693303ull, 6693657189500564106ull}}, {{12225245634147601557ull, 4489533103688789548ull, 17451465628169392437ull, 8367071486875705132ull}}, {{16864150558197026781ull, 5111801199019187419ull, 1683793980751094465ull, 5229419679297315708ull}}, {{16468502179318895572ull, 11001437517201372178ull, 2104742475938868081ull, 6536774599121644635ull}}, {{11362255687293843657ull, 18363482914929103127ull, 16465986150205748813ull, 8170968248902055793ull}}, {{14018938832199734142ull, 13783019831044383406ull, 3373712316237511152ull, 5106855155563784871ull}}, {{8300301503394891869ull, 17228774788805479258ull, 18052198450579052652ull, 6383568944454731088ull}}, {{1152004842388839029ull, 3089224412297297457ull, 4118503989514264200ull, 7979461180568413861ull}}, {{12249218072561494153ull, 1930765257685810910ull, 4879908002660109077ull, 4987163237855258663ull}}, {{6088150553847091883ull, 7025142590534651542ull, 1488198984897748442ull, 6233954047319073329ull}}, {{16833560229163640662ull, 18004800275023090235ull, 6471934749549573456ull, 7792442559148841661ull}}, {{8215132134013581462ull, 11253000171889431397ull, 6350802227682177362ull, 4870276599468026038ull}}, {{14880601185944364731ull, 4842878178007013438ull, 17161874821457497511ull, 6087845749335032547ull}}, {{9377379445575680106ull, 1441911704081378894ull, 16840657508394483985ull, 7609807186668790684ull}}, {{1249176135057412162ull, 12430409861119331569ull, 1302038905891776682ull, 4756129491667994178ull}}, {{6173156187249153107ull, 6314640289544388653ull, 10850920669219496661ull, 5945161864584992722ull}}, {{12328131252488829288ull, 12504986380357873720ull, 4340278799669595018ull, 7431452330731240903ull}}, {{7705082032805518305ull, 12427302506151058979ull, 9630203277434578742ull, 4644657706707025564ull}}, {{5019666522579509977ull, 6310756095834047916ull, 12037754096793223428ull, 5805822133383781955ull}}, {{6274583153224387471ull, 7888445119792559895ull, 10435506602564141381ull, 7257277666729727444ull}}, {{3231542923103096435ull, 14472242418168087773ull, 13044383253205176726ull, 9071597083412159305ull}}, {{4325557336153129224ull, 4433465492927666954ull, 1235210505612153598ull, 5669748177132599566ull}}, {{14630318707046187338ull, 14765203903014359500ull, 10767385168869967805ull, 7087185221415749457ull}}, {{18287898383807734172ull, 4621446823485785663ull, 18070917479514847661ull, 8858981526769686821ull}}, {{18347465517520915714ull, 5194247273892309991ull, 13600166433910473740ull, 5536863454231054263ull}}, {{18322645878473756738ull, 6492809092365387489ull, 12388522023960704271ull, 6921079317788817829ull}}, {{9068249292810032210ull, 3504325347029346458ull, 1650594474668716627ull, 8651349147236022287ull}}, {{10279341826433658036ull, 18331104406389199200ull, 7949150574309029747ull, 5407093217022513929ull}}, {{12849177283042072545ull, 18302194489559111096ull, 14548124236313675088ull, 6758866521278142411ull}}, {{16061471603802590681ull, 4430999038239337254ull, 13573469276964705957ull, 8448583151597678014ull}}, {{5426733733949231272ull, 5075217408113279736ull, 3871732279675553319ull, 5280364469748548759ull}}, {{6783417167436539089ull, 1732335741714211766ull, 227979331167053745ull, 6600455587185685949ull}}, {{17702643496150449669ull, 6777105695570152611ull, 4896660182386205085ull, 8250569483982107436ull}}, {{8758309175880337092ull, 6541534068945039334ull, 12283784650846153986ull, 5156605927488817147ull}}, {{1724514432995645556ull, 17400289623036074976ull, 10743044795130304578ull, 6445757409361021434ull}}, {{2155643041244556945ull, 12526989991940317912ull, 4205433957058104915ull, 8057196761701276793ull}}, {{1347276900777848091ull, 5523525735749004743ull, 14157611269229785332ull, 5035747976063297995ull}}, {{15519154181254473826ull, 6904407169686255928ull, 13085328068109843761ull, 6294684970079122494ull}}, {{952198652858540666ull, 13242194980535207815ull, 7133288048282528893ull, 7868356212598903118ull}}, {{7512653185677669772ull, 10582214872048198836ull, 18293363085458744270ull, 4917722632874314448ull}}, {{9390816482097087215ull, 4004396553205472737ull, 4419959783113878722ull, 6147153291092893061ull}}, {{16350206621048746923ull, 14228867728361616729ull, 10136635747319736306ull, 7683941613866116326ull}}, {{3301350110514384971ull, 13504728348653398360ull, 1723711323647447287ull, 4802463508666322704ull}}, {{4126687638142981214ull, 12269224417389360046ull, 2154639154559309109ull, 6003079385832903380ull}}, {{14381731584533502325ull, 1501472466454536345ull, 2693298943199136387ull, 7503849232291129225ull}}, {{2071053212692357097ull, 17079321356029942880ull, 13212526885567930001ull, 4689905770181955765ull}}, {{2588816515865446372ull, 7514093639755264888ull, 2680600551677748790ull, 5862382212727444707ull}}, {{3236020644831807964ull, 169245012839305302ull, 17185808744879349700ull, 7327977765909305883ull}}, {{13268397842894535763ull, 211556266049131627ull, 16870574912671799221ull, 9159972207386632354ull}}, {{5986905642595390900ull, 2438065675494401219ull, 15155795338847262417ull, 5724982629616645221ull}}, {{2871946034816850721ull, 7659268112795389428ull, 5109686118276914309ull, 7156228287020806527ull}}, {{3589932543521063401ull, 14185771159421624689ull, 1775421629418754982ull, 8945285358776008159ull}}, {{13772922885769134386ull, 4254420956211127526ull, 8027167546027803720ull, 5590803349235005099ull}}, {{7992781570356642174ull, 5318026195263909408ull, 5422273414107366746ull, 6988504186543756374ull}}, {{9990976962945802718ull, 15870904780934662568ull, 16001213804488984240ull, 8735630233179695467ull}}, {{6244360601841126699ull, 9919315488084164105ull, 7694915618591921198ull, 5459768895737309667ull}}, {{12417136770728796277ull, 3175772323250429323ull, 5006958504812513594ull, 6824711119671637084ull}}, {{10909734944983607443ull, 13193087440917812462ull, 6258698131015641992ull, 8530888899589546355ull}}, {{2206898322187366748ull, 8245679650573632789ull, 1605843322671082293ull, 5331805562243466472ull}}, {{7370308921161596339ull, 14918785581644428890ull, 2007304153338852866ull, 6664756952804333090ull}}, {{18436258188306771231ull, 9425109940200760304ull, 11732502228528341891ull, 8330946191005416362ull}}, {{11522661367691732020ull, 3584850703411781238ull, 11944499911257601586ull, 5206841369378385226ull}}, {{5179954672759889217ull, 13704435416119502356ull, 5707252852217226174ull, 6508551711722981533ull}}, {{6474943340949861521ull, 7907172233294602137ull, 11745752083698920622ull, 8135689639653726916ull}}, {{15576054634162133211ull, 330296627381738431ull, 16564467089166601197ull, 5084806024783579322ull}}, {{14858382274275278609ull, 5024556802654560943ull, 11482211824603475688ull, 6356007530979474153ull}}, {{13961291824416710357ull, 6280696003318201179ull, 517706725472180898ull, 7945009413724342692ull}}, {{6419964381046750021ull, 8537121020501263641ull, 9546938740274888869ull, 4965630883577714182ull}}, {{12636641494735825431ull, 15283087294053967455ull, 2710301388488835278ull, 6207038604472142728ull}}, {{11184115849992393884ull, 9880487080712683511ull, 3387876735611044098ull, 7758798255590178410ull}}, {{13907601433886328034ull, 10786990443872815098ull, 6729108978184290465ull, 4849248909743861506ull}}, {{8161129755503134234ull, 18095424073268406777ull, 17634758259585138889ull, 6061561137179826882ull}}, {{14813098212806305697ull, 8784222036303344759ull, 12820075787626647804ull, 7576951421474783603ull}}, {{16175715410645022917ull, 14713510809544366282ull, 5706704358052960925ull, 4735594638421739752ull}}, {{10996272226451502838ull, 4556830456648294141ull, 7133380447566201157ull, 5919493298027174690ull}}, {{18357026301491766451ull, 10307724089237755580ull, 18140097596312527254ull, 7399366622533968362ull}}, {{2249769401577578224ull, 1830641537346209334ull, 15949247016122717438ull, 4624604139083730226ull}}, {{12035583788826748588ull, 11511673958537537475ull, 10713186733298620989ull, 5780755173854662783ull}}, {{10432793717606047831ull, 554534392889758132ull, 8779797398195888333ull, 7225943967318328479ull}}, {{13040992147007559788ull, 5304854009539585569ull, 6363060729317472512ull, 9032429959147910599ull}}, {{1233091064238643012ull, 3315533755962240981ull, 10894441983464502176ull, 5645268724467444124ull}}, {{6153049848725691669ull, 4144417194952801226ull, 13618052479330627720ull, 7056585905584305155ull}}, {{16914684347761890394ull, 5180521493691001532ull, 12410879580735896746ull, 8820732381980381444ull}}, {{1348305680496405688ull, 7849511951984263862ull, 16980171774814711274ull, 5512957738737738402ull}}, {{10908754137475282918ull, 588517903125554019ull, 12001842681663613285ull, 6891197173422173003ull}}, {{9024256653416715744ull, 5347333397334330428ull, 10390617333652128702ull, 8613996466777716254ull}}, {{14863532445240223148ull, 17177141428616120229ull, 1882449815105192534ull, 5383747791736072659ull}}, {{4744357501268115223ull, 12248054748915374479ull, 16188120324163654380ull, 6729684739670090823ull}}, {{1318760858157756124ull, 15310068436144218099ull, 15623464386777180071ull, 8412105924587613529ull}}, {{16965126600844455242ull, 16486321800231218167ull, 2847136214094655688ull, 5257566202867258456ull}}, {{16594722232628181148ull, 2161158176579471093ull, 3558920267618319611ull, 6571957753584073070ull}}, {{6908344735503062723ull, 16536505776006502579ull, 13672022371377675321ull, 8214947191980091337ull}}, {{2011872450475720250ull, 3417787082362982256ull, 1627484954469965220ull, 5134341994987557086ull}}, {{2514840563094650313ull, 4272233852953727820ull, 11257728229942232333ull, 6417927493734446357ull}}, {{3143550703868312891ull, 9951978334619547679ull, 237102232145626704ull, 8022409367168057947ull}}, {{8882248217558777413ull, 6219986459137217299ull, 16289089959586874354ull, 5014005854480036216ull}}, {{6491124253521083862ull, 16998355110776297432ull, 1914618375774041326ull, 6267507318100045271ull}}, {{8113905316901354827ull, 12024571851615595982ull, 16228331024999715370ull, 7834384147625056588ull}}, {{459504804635958863ull, 12127043425687135393ull, 919334853770046298ull, 4896490092265660368ull}}, {{5186067024222336483ull, 5935432245254143433ull, 1149168567212557873ull, 6120612615332075460ull}}, {{11094269798705308508ull, 12030976324995067195ull, 1436460709015697341ull, 7650765769165094325ull}}, {{4628075614977123865ull, 9825203212335610949ull, 3203630952348504790ull, 4781728605728183953ull}}, {{10396780537148792736ull, 3058131978564737878ull, 8616224708863018892ull, 5977160757160229941ull}}, {{3772603634581215111ull, 3822664973205922348ull, 15381966904506161519ull, 7471450946450287426ull}}, {{11581249308468035253ull, 9306694635894783323ull, 14225415333743738853ull, 4669656841531429641ull}}, {{9864875617157656162ull, 16245054313295867058ull, 3946711111897509854ull, 5837071051914287052ull}}, {{3107722484592294394ull, 11082945854765058015ull, 4933388889871887318ull, 7296338814892858815ull}}, {{17719711161022531705ull, 4630310281601546710ull, 1555050093912471244ull, 9120423518616073519ull}}, {{6463133457211694412ull, 12117315962855742502ull, 7889435336336376383ull, 5700264699135045949ull}}, {{17302288858369393822ull, 10534958935142290223ull, 14473480188847858383ull, 7125330873918807436ull}}, {{17016175054534354374ull, 8557012650500474875ull, 18091850236059822979ull, 8906663592398509295ull}}, {{8329266399870277532ull, 3042289897349102845ull, 18224935425178471218ull, 5566664745249068309ull}}, {{15023269018265234819ull, 13026234408541154364ull, 8946111226190925310ull, 6958330931561335387ull}}, {{332342199121991907ull, 7059420973821667148ull, 6570953014311268734ull, 8697913664451669234ull}}, {{9431085911306020750ull, 18247196163920705679ull, 8718531652371930862ull, 5436196040282293271ull}}, {{7177171370705138034ull, 13585623168046106291ull, 6286478547037525674ull, 6795245050352866589ull}}, {{4359778194954034638ull, 7758656923202857056ull, 12469784202224294997ull, 8494056312941083236ull}}, {{2724861371846271649ull, 7155003586215479612ull, 17016987163244960181ull, 5308785195588177022ull}}, {{3406076714807839561ull, 13555440501196737419ull, 12047861917201424418ull, 6635981494485221278ull}}, {{18092653948791963163ull, 7720928589641145965ull, 5836455359647004715ull, 8294976868106526598ull}}, {{13613751727208670929ull, 2519737359312022276ull, 17482842655061541659ull, 5184360542566579123ull}}, {{17017189659010838661ull, 16984729754422191557ull, 17241867300399539169ull, 6480450678208223904ull}}, {{7436429018481384614ull, 7395854137745575735ull, 3105590051789872346ull, 8100563347760279881ull}}, {{11565297164191947240ull, 9234094854518372738ull, 13470208828437139976ull, 5062852092350174925ull}}, {{5233249418385158242ull, 11542618568147965923ull, 3002702980264261258ull, 6328565115437718657ull}}, {{1929875754554059899ull, 5204901173330181596ull, 8365064743757714477ull, 7910706394297148321ull}}, {{10429544383451063245ull, 5558906242545057449ull, 16757380510917041308ull, 4944191496435717700ull}}, {{17648616497741216960ull, 6948632803181321811ull, 2499981564936750019ull, 6180239370544647126ull}}, {{17449084603749133296ull, 4074104985549264360ull, 12348348993025713332ull, 7725299213180808907ull}}, {{10905677877343208310ull, 11769687652823066033ull, 5411875111427376880ull, 4828312008238005567ull}}, {{18243783365106398291ull, 14712109566028832541ull, 2153157870856833196ull, 6035390010297506959ull}}, {{8969671151100834152ull, 18390136957536040677ull, 16526505393853205207ull, 7544237512871883698ull}}, {{7911887478651715297ull, 18411364626101107279ull, 14940751889585641158ull, 4715148445544927311ull}}, {{5278173329887256217ull, 13790833745771608291ull, 14064253843554663544ull, 5893935556931159139ull}}, {{1986030643931682368ull, 17238542182214510364ull, 12968631286015941526ull, 7367419446163948924ull}}, {{2482538304914602959ull, 12324805690913362147ull, 16210789107519926908ull, 9209274307704936155ull}}, {{17692487505067484514ull, 16926375593675627149ull, 7825900182986260365ull, 5755796442315585097ull}}, {{8280551326052191930ull, 7322911436812370225ull, 14394061247160213361ull, 7194745552894481371ull}}, {{14962375175992627817ull, 13765325314442850685ull, 13380890540522878797ull, 8993431941118101714ull}}, {{11657327494209086338ull, 10909171330740475630ull, 12974742606254187152ull, 5620894963198813571ull}}, {{5348287330906582114ull, 13636464163425594538ull, 11606742239390346036ull, 7026118703998516964ull}}, {{15908731200488003450ull, 17045580204281993172ull, 14508427799237932545ull, 8782648379998146205ull}}, {{719584963450226349ull, 3735958600035163877ull, 11373610383737401793ull, 5489155237498841378ull}}, {{5511167222740170840ull, 9281634268471342750ull, 4993640942816976433ull, 6861444046873551723ull}}, {{16112331065279989357ull, 16213728854016566341ull, 1630365160093832637ull, 8576805058591939654ull}}, {{12376049925013687301ull, 12439423542974047915ull, 14854036280340809110ull, 5360503161619962283ull}}, {{10858376387839721222ull, 6325907391862784086ull, 13955859331998623484ull, 6700628952024952854ull}}, {{4349598447944875719ull, 7907384239828480108ull, 8221452128143503547ull, 8375786190031191068ull}}, {{11941871066820323132ull, 2636272140679106115ull, 14361779616944465525ull, 5234866368769494417ull}}, {{10315652815098016011ull, 7907026194276270548ull, 4117166465898418194ull, 6543582960961868022ull}}, {{12894566018872520014ull, 660410705990562377ull, 14369830119227798551ull, 8179478701202335027ull}}, {{1141574734154243153ull, 7330285718885183342ull, 6675300815303680142ull, 5112174188251459392ull}}, {{10650340454547579749ull, 18386229185461254985ull, 8344126019129600177ull, 6390217735314324240ull}}, {{17924611586611862590ull, 9147728426544405019ull, 10430157523912000222ull, 7987772169142905300ull}}, {{8897039232418720167ull, 1105644248162865233ull, 15742220489299775947ull, 4992357605714315812ull}}, {{15732985058950788113ull, 15217113365485745253ull, 1231031537915168317ull, 6240447007142894766ull}}, {{5831173268406321429ull, 5186333651575017855ull, 10762161459248736205ull, 7800558758928618457ull}}, {{10562012320395032749ull, 5547301541448080111ull, 18255565958098929888ull, 4875349224330386535ull}}, {{8590829382066403032ull, 6934126926810100139ull, 18207771429196274456ull, 6094186530412983169ull}}, {{6126850709155615886ull, 8667658658512625174ull, 8924656231213179358ull, 7617733163016228962ull}}, {{17664339748504423641ull, 805600643143002829ull, 10189596162935625003ull, 4761083226885143101ull}}, {{8245366630348365839ull, 14842058859210917249ull, 17348681222096919157ull, 5951354033606428876ull}}, {{14918394306362845203ull, 4717515518731482849ull, 3239107453911597331ull, 7439192542008036096ull}}, {{2406467413835696396ull, 642604189993482829ull, 2024442158694748332ull, 4649495338755022560ull}}, {{7619770285722008399ull, 803255237491853536ull, 2530552698368435415ull, 5811869173443778200ull}}, {{9524712857152510499ull, 14839127102146980632ull, 3163190872960544268ull, 7264836466804722750ull}}, {{11905891071440638123ull, 102164803974174174ull, 13177360628055456144ull, 9081045583505903437ull}}, {{2829495901223010923ull, 63853002483858859ull, 10541693401748354042ull, 5675653489691189648ull}}, {{17371927931810927366ull, 9303188289959599381ull, 13177116752185442552ull, 7094566862113987060ull}}, {{7879851859481495495ull, 11628985362449499227ull, 16471395940231803190ull, 8868208577642483825ull}}, {{2619064402962240733ull, 2656429833103549113ull, 3377093435003795138ull, 5542630361026552391ull}}, {{7885516522130188820ull, 12543909328234212199ull, 18056424849036907634ull, 6928287951283190488ull}}, {{5245209634235348120ull, 6456514623437989441ull, 4123786987586582927ull, 8660359939103988111ull}}, {{14807471067465562335ull, 10952850667289825256ull, 9494895894882696185ull, 5412724961939992569ull}}, {{62594760622401303ull, 18302749352539669475ull, 16480305887030758135ull, 6765906202424990711ull}}, {{13913301506060165341ull, 18266750672247198939ull, 15988696340361059765ull, 8457382753031238389ull}}, {{6389970432073909386ull, 13722562179368193289ull, 12298778221939356305ull, 5285864220644523993ull}}, {{12599149058519774637ull, 3318144668928077899ull, 1538414722142031670ull, 6607330275805654992ull}}, {{11137250304722330392ull, 13371052873014873182ull, 1923018402677539587ull, 8259162844757068740ull}}, {{2349095422024068591ull, 6051065036420601787ull, 10425258538528238050ull, 5161976777973167962ull}}, {{16771427332812249451ull, 16787203332380528041ull, 3808201136305521754ull, 6452470972466459953ull}}, {{7129226110733148101ull, 11760632128620884244ull, 9371937438809290097ull, 8065588715583074941ull}}, {{13679138356062993371ull, 432866052746970796ull, 8163303908469500263ull, 5040992947239421838ull}}, {{17098922945078741714ull, 14376140621215877207ull, 980757848732099520ull, 6301241184049277298ull}}, {{16761967662921039239ull, 17970175776519846509ull, 10449319347769900208ull, 7876551480061596622ull}}, {{12782072798539343476ull, 11231359860324904068ull, 1919138573928799726ull, 4922844675038497889ull}}, {{15977590998174179345ull, 4815827788551354277ull, 7010609235838387562ull, 6153555843798122361ull}}, {{6136930692435560469ull, 15243156772543968655ull, 13374947563225372356ull, 7691944804747652951ull}}, {{10753110710413307150ull, 303600945985204601ull, 15276871254656939579ull, 4807465502967283094ull}}, {{18053074406444021841ull, 14214559237763669463ull, 9872717031466398665ull, 6009331878709103868ull}}, {{17954656989627639397ull, 3933140991922423117ull, 12340896289332998332ull, 7511664848386379835ull}}, {{13527503627730968575ull, 11681585156806290256ull, 5407217171619430005ull, 4694790530241487397ull}}, {{16909379534663710719ull, 766923390725699108ull, 11370707482951675411ull, 5868488162801859246ull}}, {{2689980344620086783ull, 14793712293689287598ull, 4990012316834818455ull, 7335610203502324058ull}}, {{12585847467629884286ull, 13880454348684221593ull, 15460887432898298877ull, 9169512754377905072ull}}, {{948625639627595823ull, 10981126977141332448ull, 9663054645561436798ull, 5730945471486190670ull}}, {{1185782049534494779ull, 4503036684571889752ull, 2855446270097020190ull, 7163681839357738338ull}}, {{1482227561918118473ull, 14852167892569637998ull, 12792679874476051045ull, 8954602299197172922ull}}, {{14761450281480987758ull, 11588447942069717700ull, 12607110939974919807ull, 5596626436998233076ull}}, {{5068778141683081ull, 9873873909159759222ull, 15758888674968649759ull, 6995783046247791345ull}}, {{9229708009531879659ull, 7730656368022311123ull, 5863552788428648487ull, 8744728807809739182ull}}, {{3462724496743730835ull, 11749189257655026308ull, 17499778548050069016ull, 5465455504881086988ull}}, {{4328405620929663544ull, 14686486572068782885ull, 3427979111353034654ull, 6831819381101358736ull}}, {{10022193044589467334ull, 9134736178231202798ull, 4284973889191293318ull, 8539774226376698420ull}}, {{1652184634441029180ull, 1097524092967113845ull, 11901480717599334132ull, 5337358891485436512ull}}, {{6676916811478674379ull, 1371905116208892306ull, 14876850896999167665ull, 6671698614356795640ull}}, {{17569518051203118781ull, 6326567413688503286ull, 149319547539407965ull, 8339623267945994551ull}}, {{6369262763574561335ull, 6259947642769008506ull, 7010853744853211834ull, 5212264542466246594ull}}, {{17184950491322977476ull, 17048306590316036440ull, 17986939217921290600ull, 6515330678082808242ull}}, {{3034444040444170229ull, 2863639164185493935ull, 13260301985546837443ull, 8144163347603510303ull}}, {{8814056552918688249ull, 17930675542111791373ull, 15205217768607855257ull, 5090102092252193939ull}}, {{15629256709575748215ull, 8578286372357575504ull, 14394836192332431168ull, 6362627615315242424ull}}, {{1089826813260133653ull, 10722857965446969381ull, 17993545240415538960ull, 7953284519144053030ull}}, {{2986984767501277485ull, 6701786228404355863ull, 6634279756832323946ull, 4970802824465033144ull}}, {{17568789014658760569ull, 17600604822360220636ull, 8292849696040404932ull, 6213503530581291430ull}}, {{3514242194613899095ull, 3554011954240724180ull, 1142690083195730358ull, 7766879413226614288ull}}, {{11419773408488462742ull, 16056315526682616324ull, 714181301997331473ull, 4854299633266633930ull}}, {{14274716760610578428ull, 6235336353071106693ull, 10116098664351440150ull, 6067874541583292412ull}}, {{4008337895481059323ull, 17017542478193659175ull, 12645123330439300187ull, 7584843176979115515ull}}, {{9422740212316743933ull, 8330121039657343032ull, 5597359072310868665ull, 4740526985611947197ull}}, {{11778425265395929916ull, 15024337317999066694ull, 11608384858815973735ull, 5925658732014933996ull}}, {{5499659544890136587ull, 14168735629071445464ull, 14510481073519967169ull, 7407073415018667495ull}}, {{3437287215556335367ull, 1937930740528571559ull, 15986579698591061337ull, 4629420884386667184ull}}, {{18131667074727582921ull, 7034099444088102352ull, 1536480549529275055ull, 5786776105483333981ull}}, {{4217839769699927035ull, 4180938286682740037ull, 6532286705338981723ull, 7233470131854167476ull}}, {{9883985730552296697ull, 614486839926037142ull, 8165358381673727154ull, 9041837664817709345ull}}, {{1565805063167797532ull, 4995740293381161118ull, 16632564034614549231ull, 5651148540511068340ull}}, {{11180628365814522723ull, 1632989348299063493ull, 2343960969558634923ull, 7063935675638835426ull}}, {{140727401985989691ull, 15876294740655993079ull, 12153323248803069461ull, 8829919594548544282ull}}, {{7005483653882325413ull, 12228527222123689626ull, 12207513048929306317ull, 5518699746592840176ull}}, {{17980226604207682574ull, 1450600972372448320ull, 15259391311161632897ull, 6898374683241050220ull}}, {{4028539181550051602ull, 6424937233892948305ull, 627495065242489505ull, 8622968354051312776ull}}, {{14047052034537252011ull, 15544800817251562450ull, 392184415776555940ull, 5389355221282070485ull}}, {{8335443006316789206ull, 984256947854901447ull, 5101916538148082830ull, 6736694026602588106ull}}, {{5807617739468598603ull, 10453693221673402617ull, 15600767709539879345ull, 8420867533253235132ull}}, {{15158976133236343887ull, 18062773309614346395ull, 527107781607648782ull, 5263042208283271958ull}}, {{14337034148118041955ull, 13355094600163157186ull, 9882256763864336786ull, 6578802760354089947ull}}, {{8697920648292776636ull, 7470496213349170675ull, 7741134936403033079ull, 8223503450442612434ull}}, {{3130357395969291446ull, 11586589160984313528ull, 9449895353679283578ull, 5139689656526632771ull}}, {{3912946744961614307ull, 5259864414375616102ull, 7200683173671716569ull, 6424612070658290964ull}}, {{14114555468056793691ull, 11186516536396908031ull, 9000853967089645711ull, 8030765088322863705ull}}, {{15739126195176577913ull, 13909101862889149375ull, 17154748775499498329ull, 5019228180201789815ull}}, {{15062221725543334487ull, 3551319273329273007ull, 16831749950946985008ull, 6274035225252237269ull}}, {{14216091138501780205ull, 4439149091661591259ull, 7204629383401567548ull, 7842544031565296587ull}}, {{6579213952349918676ull, 11997840219143270345ull, 2197050355412285765ull, 4901590019728310367ull}}, {{12835703458864786249ull, 1162242218646924219ull, 16581370999547520919ull, 6126987524660387958ull}}, {{11432943305153594908ull, 15287860828590818986ull, 11503341712579625340ull, 7658734405825484948ull}}, {{11757275584148384721ull, 331540981014486058ull, 16412960607217041646ull, 4786709003640928092ull}}, {{5473222443330705094ull, 9637798263122883381ull, 2069456685311750441ull, 5983386254551160116ull}}, {{11453214072590769271ull, 16658933847330992130ull, 2586820856639688051ull, 7479232818188950145ull}}, {{11769944813796618699ull, 8105990645368176129ull, 13145978081468274792ull, 4674520511368093840ull}}, {{877372961963609661ull, 10132488306710220162ull, 16432472601835343490ull, 5843150639210117300ull}}, {{10320088239309287884ull, 3442238346532999394ull, 2093846678584627747ull, 7303938299012646626ull}}, {{3676738262281834047ull, 18137855988448412955ull, 11840680385085560491ull, 9129922873765808282ull}}, {{18438862478422003944ull, 9030316983566564144ull, 12012111259105863211ull, 5706201796103630176ull}}, {{4601834024317953313ull, 6676210211030817277ull, 15015139073882329014ull, 7132752245129537720ull}}, {{10363978548824829546ull, 17568634800643297404ull, 322179768643359651ull, 8915940306411922151ull}}, {{15700858629870294274ull, 8674553741188366925ull, 7118891383043181638ull, 5572462691507451344ull}}, {{5791015232055704131ull, 1619820139630682849ull, 8898614228803977048ull, 6965578364384314180ull}}, {{11850455058497018067ull, 2024775174538353561ull, 11123267786004971310ull, 8706972955480392725ull}}, {{489005383919554436ull, 15100542539368634688ull, 9257885375466801020ull, 5441858097175245453ull}}, {{611256729899443045ull, 428934100501241744ull, 16184042737760889180ull, 6802322621469056816ull}}, {{764070912374303806ull, 536167625626552180ull, 1783309348491559859ull, 8502903276836321021ull}}, {{9700916357088715687ull, 16476005830512452776ull, 3420411352020918863ull, 5314314548022700638ull}}, {{12126145446360894609ull, 15983321269713178066ull, 13498886226880924387ull, 6642893185028375797ull}}, {{5934309771096342453ull, 15367465568714084679ull, 3038549728318991772ull, 8303616481285469747ull}}, {{10626472634576295889ull, 381293943591527116ull, 18039994644695227522ull, 5189760300803418591ull}}, {{13283090793220369861ull, 9699989466344184703ull, 17938307287441646498ull, 6487200376004273239ull}}, {{11992177473098074423ull, 2901614796075455071ull, 17811198090874670219ull, 8109000470005341549ull}}, {{14412639948327378370ull, 17954410312043017083ull, 13437841816010362838ull, 5068125293753338468ull}}, {{13404113916981835059ull, 13219640853198995546ull, 16797302270012953548ull, 6335156617191673085ull}}, {{7531770359372518015ull, 16524551066498744433ull, 7161569782234028223ull, 7918945771489591357ull}}, {{16236571520676293520ull, 17245373444202797126ull, 6781824123109961591ull, 4949341107180994598ull}}, {{11072342363990591092ull, 16945030786826108504ull, 17700652190742227797ull, 6186676383976243247ull}}, {{13840427954988238864ull, 7346230428250471918ull, 17514129220000396843ull, 7733345479970304059ull}}, {{4038581453440261386ull, 2285551008442850997ull, 8640487753286554075ull, 4833340924981440037ull}}, {{9659912835227714637ull, 16691996815835727458ull, 15412295710035580497ull, 6041676156226800046ull}}, {{2851519007179867488ull, 7029937964512495611ull, 10041997600689699814ull, 7552095195283500058ull}}, {{17923100443983274844ull, 18228769283102473468ull, 10887934518858450287ull, 4720059497052187536ull}}, {{3957131481269541939ull, 18174275585450703932ull, 13609918148573062859ull, 5900074371315234420ull}}, {{4946414351586927424ull, 18106158463385992011ull, 17012397685716328574ull, 7375092964144043025ull}}, {{1571331921056271376ull, 13409326042377714206ull, 7430439051863247006ull, 9218866205180053782ull}}, {{14817140505942333322ull, 3769142758058683474ull, 32338388987141475ull, 5761791378237533614ull}}, {{9298053595573140844ull, 99742429145966439ull, 9263795023088702652ull, 7202239222796917017ull}}, {{7010880976039038151ull, 124678036432458049ull, 16191429797288266219ull, 9002799028496146271ull}}, {{15911015656092868605ull, 16218824837266143944ull, 17037172650946248242ull, 5626749392810091419ull}}, {{1442025496406534140ull, 11050159009727904123ull, 16684779795255422399ull, 7033436741012614274ull}}, {{15637589925790331387ull, 9201012743732492249ull, 11632602707214502191ull, 8791795926265767843ull}}, {{2855964675977875261ull, 12668161992473889512ull, 4964533682795369917ull, 5494872453916104902ull}}, {{3569955844972344076ull, 2000144435310198178ull, 15429039140348988205ull, 6868590567395131127ull}}, {{13685816843070205903ull, 7111866562565135626ull, 14674612907008847352ull, 8585738209243913909ull}}, {{13165321545346266593ull, 4444916601603209766ull, 11477476076094223547ull, 5366086380777446193ull}}, {{7233279894828057434ull, 944459733576624304ull, 511787039835615722ull, 6707607975971807742ull}}, {{9041599868535071792ull, 10403946703825556188ull, 9863105836649295460ull, 8384509969964759677ull}}, {{14874371954689195678ull, 15725838726745748425ull, 8470284157119503614ull, 5240318731227974798ull}}, {{4757906888079330886ull, 10433926371577409724ull, 1364483159544603710ull, 6550398414034968498ull}}, {{5947383610099163607ull, 3819035927616986347ull, 10928975986285530446ull, 8187998017543710622ull}}, {{1411271747098283302ull, 16221955510042780179ull, 2218923973001068624ull, 5117498760964819139ull}}, {{15599147739155017840ull, 1830700313843923607ull, 16608713021533499493ull, 6396873451206023923ull}}, {{14887248655516384396ull, 6900061410732292413ull, 16149205258489486462ull, 7996091814007529904ull}}, {{11610373418911434200ull, 18147596436989846470ull, 10093253286555929038ull, 4997557383754706190ull}}, {{5289594736784516941ull, 13461123509382532280ull, 3393194571340135490ull, 6246946729693382738ull}}, {{6611993420980646177ull, 7603032349873389542ull, 13464865251029945171ull, 7808683412116728422ull}}, {{17967553943395067573ull, 2446052209457174511ull, 3803854763466327828ull, 4880427132572955264ull}}, {{17847756410816446562ull, 3057565261821468139ull, 4754818454332909785ull, 6100533915716194080ull}}, {{17698009495093170298ull, 8433642595704223078ull, 5943523067916137231ull, 7625667394645242600ull}}, {{6449569916005843532ull, 12188555649956221280ull, 3714701917447585769ull, 4766042121653276625ull}}, {{8061962395007304415ull, 1400636507163112888ull, 9255063415236870116ull, 5957552652066595781ull}}, {{10077452993759130519ull, 1750795633953891110ull, 16180515287473475549ull, 7446940815083244726ull}}, {{1686722102672068671ull, 3400090280434875896ull, 5501136036243534314ull, 4654338009427027954ull}}, {{2108402628340085838ull, 13473484887398370678ull, 16099792082159193700ull, 5817922511783784942ull}}, {{11858875322279883105ull, 16841856109247963347ull, 10901368065844216317ull, 7272403139729731178ull}}, {{10211908134422465978ull, 7217262081277790472ull, 4403338045450494589ull, 9090503924662163973ull}}, {{6382442584014041236ull, 6816631810012312997ull, 5057929287620253070ull, 5681564952913852483ull}}, {{12589739248444939449ull, 17744161799370167054ull, 1710725591097928433ull, 7101956191142315604ull}}, {{6513802023701398503ull, 8345144193930545106ull, 2138406988872410542ull, 8877445238927894505ull}}, {{8682812283240761969ull, 604029102779202787ull, 12865719414113726349ull, 5548403274329934065ull}}, {{6241829335623564557ull, 5366722396901391388ull, 2247091212359994224ull, 6935504092912417582ull}}, {{7802286669529455696ull, 6708402996126739235ull, 12032236052304768588ull, 8669380116140521977ull}}, {{2570586159242215858ull, 13416123909433987830ull, 602618505049398511ull, 5418362572587826236ull}}, {{12436604735907545631ull, 12158468868365096883ull, 753273131311748139ull, 6772953215734782795ull}}, {{10934069901457044134ull, 10586400067028983200ull, 14776649469421848886ull, 8466191519668478493ull}}, {{6833793688410652584ull, 2004814023465726596ull, 11541248927602349506ull, 5291369699792799058ull}}, {{8542242110513315730ull, 11729389566186934053ull, 5203189122648161074ull, 6614212124740998823ull}}, {{15289488656569032566ull, 5438364920878891758ull, 1892300384882813439ull, 8267765155926248529ull}}, {{4944244391928257450ull, 10316507103190389205ull, 12711902786620228159ull, 5167353222453905330ull}}, {{10791991508337709716ull, 8283947860560598602ull, 6666506446420509391ull, 6459191528067381663ull}}, {{4266617348567361337ull, 5743248807273360349ull, 3721447039598248835ull, 8073989410084227079ull}}, {{4972478852068294788ull, 1283687495332156266ull, 9243433427389987378ull, 5046243381302641924ull}}, {{15438970601940144293ull, 10827981406019971140ull, 11554291784237484222ull, 6307804226628302405ull}}, {{851969178715628750ull, 4311604720670188118ull, 607806675014691566ull, 7884755283285378007ull}}, {{14367538791979431681ull, 16529811005701031285ull, 7297408199525264084ull, 4927972052053361254ull}}, {{4124365434692125889ull, 2215519683416737491ull, 18345132286261355914ull, 6159965065066701567ull}}, {{543770774937769457ull, 11992771641125697672ull, 18319729339399306988ull, 7699956331333376959ull}}, {{339856734336105911ull, 16718854312558336853ull, 18367359864765648723ull, 4812472707083360599ull}}, {{5036506936347520293ull, 16286881872270533162ull, 18347513812529673000ull, 6015590883854200749ull}}, {{15519005707289176174ull, 1911858266628614836ull, 9099334210379927539ull, 7519488604817750937ull}}, {{476006530200959301ull, 17335812481138741937ull, 17216298927555924471ull, 4699680378011094335ull}}, {{5206694181178587030ull, 17058079582996039517ull, 16908687641017517685ull, 5874600472513867919ull}}, {{11120053744900621691ull, 7487541423462885684ull, 16524173532844509203ull, 7343250590642334899ull}}, {{13900067181125777114ull, 4747740760901219201ull, 16043530897628248600ull, 9179063238302918624ull}}, {{1770012960562528840ull, 2967337975563262001ull, 10027206811017655375ull, 5736914523939324140ull}}, {{6824202219130548954ull, 17544230524736241213ull, 12534008513772069218ull, 7171143154924155175ull}}, {{13141938792340574097ull, 12706916119065525708ull, 11055824623787698619ull, 8963928943655193969ull}}, {{17437083782067634619ull, 5635979565202259615ull, 18439105435935781397ull, 5602455589784496230ull}}, {{17184668709157155369ull, 11656660474930212423ull, 13825509758064950938ull, 7003069487230620288ull}}, {{16869149868019056307ull, 5347453556807989721ull, 17281887197581188673ull, 8753836859038275360ull}}, {{3625689639870828336ull, 14871373519073463336ull, 10801179498488242920ull, 5471148036898922100ull}}, {{4532112049838535420ull, 142472825132277554ull, 13501474373110303651ull, 6838935046123652625ull}}, {{14888512099152945083ull, 14013149086697510654ull, 3041784911105715851ull, 8548668807654565782ull}}, {{4693634043543202773ull, 6452375169972250207ull, 15736173624723236119ull, 5342918004784103613ull}}, {{1255356536001615562ull, 3453782944037924855ull, 5835158975621881437ull, 6678647505980129517ull}}, {{15404253725284183165ull, 8928914698474793972ull, 11905634737954739700ull, 8348309382475161896ull}}, {{404286541447838670ull, 14803943723401522041ull, 7441021711221712312ull, 5217693364046976185ull}}, {{5117044195237186241ull, 58185580542350935ull, 13912963157454528295ull, 6522116705058720231ull}}, {{1784619225619094898ull, 13907790030960102381ull, 12779517928390772464ull, 8152645881323400289ull}}, {{3421230025225628263ull, 8692368769350063988ull, 1069669677603150934ull, 5095403675827125181ull}}, {{4276537531532035329ull, 1642088924832804177ull, 5948773115431326572ull, 6369254594783906476ull}}, {{9957357932842432065ull, 2052611156041005221ull, 7435966394289158215ull, 7961568243479883095ull}}, {{8529191717240213993ull, 8200411000166710119ull, 11565008024071805740ull, 4975980152174926934ull}}, {{6049803628122879587ull, 10250513750208387649ull, 5232887993234981367ull, 6219975190218658668ull}}, {{12173940553580987388ull, 8201456169333096657ull, 6541109991543726709ull, 7774968987773323335ull}}, {{691183818347035261ull, 7431753115046879363ull, 11005722772355911049ull, 4859355617358327084ull}}, {{14699037828215957789ull, 13901377412235987107ull, 13757153465444888811ull, 6074194521697908855ull}}, {{13762111266842559332ull, 12765035746867595980ull, 12584755813378723110ull, 7592743152122386069ull}}, {{17824691578631375390ull, 3366461323364859583ull, 10171315392575395896ull, 4745464470076491293ull}}, {{17669178454861831334ull, 4208076654206074479ull, 17325830259146632774ull, 5931830587595614116ull}}, {{17474787050149901263ull, 14483467854612368907ull, 3210543750223739351ull, 7414788234494517646ull}}, {{8615898897129994338ull, 15969696436773812423ull, 15841647899172000806ull, 4634242646559073528ull}}, {{6158187602985105018ull, 10738748509112489721ull, 1355315800255449392ull, 5792803308198841911ull}}, {{12309420522158769176ull, 13423435636390612151ull, 15529202805601475452ull, 7241004135248552388ull}}, {{10775089634271073566ull, 16779294545488265189ull, 964759433292292699ull, 9051255169060690486ull}}, {{9040274030633114931ull, 8181216081716471791ull, 14438032701089846649ull, 5657034480662931553ull}}, {{6688656519864005760ull, 14838206120572977643ull, 4212482821080144599ull, 7071293100828664442ull}}, {{3749134631402619296ull, 13936071632288834150ull, 14488975563204956557ull, 8839116376035830552ull}}, {{16178267199908800772ull, 11015887779394215295ull, 9055609727003097848ull, 5524447735022394095ull}}, {{15611147981458613061ull, 13769859724242769119ull, 6707826140326484406ull, 6905559668777992619ull}}, {{14902248958395878422ull, 7988952618448685591ull, 3773096656980717604ull, 8631949585972490774ull}}, {{16231434626638505870ull, 14216467423385204302ull, 16193243465895112214ull, 5394968491232806733ull}}, {{11065921246443356529ull, 8547212242376729570ull, 6406496277086726556ull, 6743710614041008417ull}}, {{4609029521199419854ull, 10684015302970911963ull, 12619806364785796099ull, 8429638267551260521ull}}, {{574800441535943457ull, 4371666555143126025ull, 969849950350040706ull, 5268523917219537826ull}}, {{5330186570347317225ull, 14687955230783683339ull, 10435684474792326690ull, 6585654896524422282ull}}, {{2051047194506758627ull, 9136572001624828366ull, 3821233556635632555ull, 8232068620655527853ull}}, {{15116962551848887854ull, 3404514491801823776ull, 4694113982110964299ull, 5145042887909704908ull}}, {{449459116101558201ull, 18090701170034443433ull, 5867642477638705373ull, 6431303609887131135ull}}, {{5173509913554335655ull, 8778318407260890579ull, 2722867078620993813ull, 8039129512358913919ull}}, {{927600686757765833ull, 7792292013751750564ull, 8619320951779202989ull, 5024455945224321199ull}}, {{1159500858447207291ull, 14352051035617076109ull, 6162465171296615832ull, 6280569931530401499ull}}, {{6061062091486397018ull, 17940063794521345136ull, 3091395445693381886ull, 7850712414413001874ull}}, {{3788163807178998136ull, 6600853853148452806ull, 6543808171985751583ull, 4906695259008126171ull}}, {{13958576795828523478ull, 3639381298008178103ull, 3568074196554801575ull, 6133369073760157714ull}}, {{12836534976358266443ull, 18384284677792386341ull, 13683464782548277776ull, 7666711342200197142ull}}, {{10328677369437610479ull, 11490177923620241463ull, 3940479470665285706ull, 4791694588875123214ull}}, {{8299160693369625195ull, 5139350367670526021ull, 14148971375186382941ull, 5989618236093904017ull}}, {{14985636885139419398ull, 11035873978015545430ull, 3851156163700814964ull, 7487022795117380022ull}}, {{4754337034784749220ull, 16120793273114491702ull, 16242030657595173064ull, 4679389246948362513ull}}, {{15166293330335712333ull, 1704247517683563011ull, 6467480266711802619ull, 5849236558685453142ull}}, {{14346180644492252512ull, 15965367452386617476ull, 17307722370244529081ull, 7311545698356816427ull}}, {{17932725805615315639ull, 6121651260201108133ull, 17022966944378273448ull, 9139432122946020534ull}}, {{13513796637723266227ull, 3826032037625692583ull, 6027668321809033001ull, 5712145076841262834ull}}, {{12280559778726694879ull, 9394226065459503633ull, 16757957439116067059ull, 7140181346051578542ull}}, {{1515641668126204887ull, 7131096563396991638ull, 11724074762040308016ull, 8925226682564473178ull}}, {{14782334097861041767ull, 4456935352123119773ull, 11939232744702580414ull, 5578266676602795736ull}}, {{4642859567044138496ull, 14794541227008675525ull, 14924040930878225517ull, 6972833345753494670ull}}, {{10415260477232561024ull, 4658118478478680694ull, 9431679126743006089ull, 8716041682191868338ull}}, {{1897851779842962736ull, 14440539095117645194ull, 10506485472641766709ull, 5447526051369917711ull}}, {{11595686761658479228ull, 4215615813614892780ull, 8521420822374820483ull, 6809407564212397139ull}}, {{14494608452073099035ull, 657833748591228071ull, 6040090009541137700ull, 8511759455265496424ull}}, {{15976659310186768753ull, 9634518129724293352ull, 3775056255963211062ull, 5319849659540935265ull}}, {{1524080064023909325ull, 2819775625300590883ull, 9330506338381401732ull, 6649812074426169081ull}}, {{15740158135312050368ull, 3524719531625738603ull, 16274818941404140069ull, 8312265093032711351ull}}, {{7531755825356337528ull, 4508792716479780579ull, 17089290866018669399ull, 5195165683145444594ull}}, {{4803008763268034006ull, 1024304877172337820ull, 12138241545668560941ull, 6493957103931805743ull}}, {{6003760954085042508ull, 5892067114892810179ull, 10561115913658313272ull, 8117446379914757179ull}}, {{1446507587089457616ull, 3682541946808006362ull, 4294854436822751843ull, 5073403987446723237ull}}, {{11031506520716597827ull, 18438235488792171664ull, 9980254064455827707ull, 6341754984308404046ull}}, {{13789383150895747284ull, 18436108342562826676ull, 3251945543715008826ull, 7927193730385505058ull}}, {{17841736506164617861ull, 16134253732529154576ull, 6644151983249268420ull, 4954496081490940661ull}}, {{3855426558996220710ull, 1721073091951891605ull, 12916875997488973430ull, 6193120101863675826ull}}, {{9430969217172663791ull, 11374713401794640314ull, 6922722960006440979ull, 7741400127329594783ull}}, {{10506041779160302774ull, 4803352866907956244ull, 11244230877645107468ull, 4838375079580996739ull}}, {{13132552223950378467ull, 6004191083634945305ull, 9443602578628996431ull, 6047968849476245924ull}}, {{2580632224655809372ull, 2893552836116293728ull, 11804503223286245539ull, 7559961061845307405ull}}, {{1612895140409880857ull, 17949371587068541244ull, 9683657523767597413ull, 4724975663653317128ull}}, {{2016118925512351072ull, 8601656428553512843ull, 12104571904709496767ull, 5906219579566646410ull}}, {{16355206712172602551ull, 6140384517264503149ull, 5907342844032095151ull, 7382774474458308013ull}}, {{12527847204321570547ull, 10755269350931396324ull, 5997932286733753421ull, 4614234046536442508ull}}, {{15659809005401963183ull, 18055772707091633309ull, 7497415358417191776ull, 5767792558170553135ull}}, {{5739703201470290267ull, 4122971810154990021ull, 4760083179594101817ull, 7209740697713191419ull}}, {{11786315020265250738ull, 9765400781121125430ull, 1338417956065239367ull, 9012175872141489274ull}}, {{2754760869238393807ull, 13020904515841785250ull, 5448197240968162508ull, 5632609920088430796ull}}, {{12666823123402768067ull, 16276130644802231562ull, 6810246551210203135ull, 7040762400110538495ull}}, {{6610156867398684276ull, 15733477287575401549ull, 3901122170585366015ull, 8800953000138173119ull}}, {{6437191051337871624ull, 16750952332375707824ull, 9355730384256935615ull, 5500595625086358199ull}}, {{8046488814172339530ull, 16327004397042246876ull, 7082976961893781615ull, 6875744531357947749ull}}, {{10058111017715424413ull, 15797069477875420691ull, 13465407220794614923ull, 8594680664197434686ull}}, {{3980476376858446306ull, 7567325414458443980ull, 3804193494569246423ull, 5371675415123396679ull}}, {{4975595471073057883ull, 4847470749645667071ull, 143555849784170125ull, 6714594268904245849ull}}, {{1607808320413934449ull, 10671024455484471743ull, 4791130830657600560ull, 8393242836130307311ull}}, {{7922409227899790887ull, 6669390284677794839ull, 9911985796802082206ull, 5245776772581442069ull}}, {{5291325516447350705ull, 17560109892702019357ull, 17001668264429990661ull, 6557220965726802586ull}}, {{11225842913986576285ull, 8115079310595360484ull, 12028713293682712519ull, 8196526207158503233ull}}, {{16239523858096385986ull, 11989453596763182158ull, 600416780910613468ull, 5122828879474064521ull}}, {{11076032785765706675ull, 14986816995953977698ull, 5362206994565654739ull, 6403536099342580651ull}}, {{4621668945352357535ull, 14121835226515084219ull, 2091072724779680520ull, 8004420124178225814ull}}, {{582700081631529508ull, 8826147016571927637ull, 15141978508269464037ull, 5002762577611391133ull}}, {{5340061120466799788ull, 15644369789142297450ull, 5092415080054666334ull, 6253453222014238917ull}}, {{15898448437438275543ull, 10332090199573096004ull, 10977204868495720822ull, 7816816527517798646ull}}, {{713158236544146407ull, 1845870356305797099ull, 2249067024382437610ull, 4885510329698624154ull}}, {{14726505850962346720ull, 11530709982237022181ull, 12034705817332822820ull, 6106887912123280192ull}}, {{4573074258420769688ull, 14413387477796277727ull, 15043382271666028525ull, 7633609890154100240ull}}, {{9775700439154062911ull, 11314210182836367531ull, 9402113919791267828ull, 4771006181346312650ull}}, {{7607939530515190735ull, 14142762728545459414ull, 2529270362884308977ull, 5963757726682890813ull}}, {{286552376289212611ull, 3843395355399660556ull, 7773273972032774126ull, 7454697158353613516ull}}, {{9402467272035533690ull, 16237180152406951559ull, 14081668269375259636ull, 4659185723971008447ull}}, {{7141398071617029208ull, 1849731116799137833ull, 12990399318291686642ull, 5823982154963760559ull}}, {{13538433607948674414ull, 11535535932853698099ull, 11626313129437220398ull, 7279977693704700699ull}}, {{12311355991508455114ull, 5196047879212346816ull, 9921205393369137594ull, 9099972117130875874ull}}, {{7694597494692784446ull, 7859215942935104664ull, 10812439389283098900ull, 5687482573206797421ull}}, {{9618246868365980558ull, 9824019928668880830ull, 18127235255031261529ull, 7109353216508496776ull}}, {{2799436548602699889ull, 16891710929263488942ull, 4212299995079525295ull, 8886691520635620971ull}}, {{15584705898158851143ull, 17474848358430762444ull, 326844487711009357ull, 5554182200397263107ull}}, {{1034138298989012312ull, 8008502392756289344ull, 14243613664920925409ull, 6942727750496578883ull}}, {{1292672873736265390ull, 14622314009372749584ull, 13192831062723768857ull, 8678409688120723604ull}}, {{807920546085165869ull, 2221417228216886634ull, 17468891451057131344ull, 5424006055075452252ull}}, {{10233272719461233144ull, 2776771535271108292ull, 3389370240111862564ull, 6780007568844315316ull}}, {{12791590899326541430ull, 3470964419088885365ull, 4236712800139828205ull, 8475009461055394145ull}}, {{10300587321292782346ull, 4475195771144247305ull, 14177160546155862388ull, 5296880913159621340ull}}, {{17487420170043365836ull, 5593994713930309131ull, 17721450682694827985ull, 6621101141449526675ull}}, {{17247589194126819391ull, 11604179410840274318ull, 17540127334941147077ull, 8276376426811908344ull}}, {{6168057227901874216ull, 9558455140988865401ull, 10962579584338216923ull, 5172735266757442715ull}}, {{12321757553304730674ull, 7336382907808693847ull, 9091538461995383250ull, 6465919083446803394ull}}, {{10790510923203525438ull, 18393850671615643117ull, 2141051040639453254ull, 8082398854308504243ull}}, {{9049912336215897351ull, 6884470651332389044ull, 17479057964895515948ull, 5051499283942815151ull}}, {{11312390420269871688ull, 8605588314165486305ull, 17237136437692007031ull, 6314374104928518939ull}}, {{305429970055175898ull, 6145299374279469978ull, 16934734528687620885ull, 7892967631160648674ull}}, {{4802579749711872841ull, 6146655118138362688ull, 15195895098857150957ull, 4933104769475405421ull}}, {{6003224687139841051ull, 12295004916100341264ull, 5159810818289274984ull, 6166380961844256777ull}}, {{7504030858924801313ull, 15368756145125426580ull, 11061449541288981634ull, 7707976202305320971ull}}, {{13913391323682776629ull, 14217158609130779516ull, 4607562954091919569ull, 4817485126440825607ull}}, {{17391739154603470786ull, 3936390206131310683ull, 1147767674187511558ull, 6021856408051032009ull}}, {{17127987924826950579ull, 14143859794518914162ull, 6046395611161777351ull, 7527320510063790011ull}}, {{15316678471444232016ull, 15757441399215403207ull, 1473154247762416892ull, 4704575318789868757ull}}, {{14534162070877902116ull, 1250057675309702393ull, 6453128828130409020ull, 5880719148487335946ull}}, {{4332644533315213932ull, 1562572094137127992ull, 17289783072017787083ull, 7350898935609169932ull}}, {{5415805666644017415ull, 15788273172953573702ull, 3165484766312682237ull, 9188623669511462416ull}}, {{17219936596934674597ull, 12173513742309677515ull, 1978427978945426398ull, 5742889793444664010ull}}, {{16913234727740955342ull, 5993520141032321086ull, 11696407010536558806ull, 7178612241805830012ull}}, {{11918171372821418369ull, 16715272213145177166ull, 14620508763170698507ull, 8973265302257287515ull}}, {{2837171089585998577ull, 8141202124002041777ull, 6831974967767992615ull, 5608290813910804697ull}}, {{8158149880409886125ull, 5564816636575164317ull, 13151654728137378673ull, 7010363517388505871ull}}, {{14809373368939745560ull, 11567706814146343300ull, 11827882391744335437ull, 8762954396735632339ull}}, {{32486318732565167ull, 9535659768055158515ull, 5086583485626515696ull, 5476846497959770212ull}}, {{13875665953697870171ull, 11919574710068948143ull, 6358229357033144620ull, 6846058122449712765ull}}, {{12732896423694949810ull, 14899468387586185179ull, 12559472714718818679ull, 8557572653062140956ull}}, {{5652217255595649679ull, 16229696769882447593ull, 17073042483554037482ull, 5348482908163838097ull}}, {{11676957587921950003ull, 11063748925498283683ull, 7506245049160383141ull, 6685603635204797622ull}}, {{9984510966475049600ull, 18441372175300242508ull, 159434274595703118ull, 8357004544005997028ull}}, {{15463691390901681808ull, 6914171591135263663ull, 9323018458477090257ull, 5223127840003748142ull}}, {{14717928220199714356ull, 13254400507346467483ull, 2430401036241587013ull, 6528909800004685178ull}}, {{13785724256822255041ull, 2732942578900920642ull, 12261373332156759575ull, 8161137250005856472ull}}, {{13227763678941297305ull, 8625618139454157257ull, 7663358332597974734ull, 5100710781253660295ull}}, {{2699646543394457919ull, 1558650637462920764ull, 4967511897320080514ull, 6375888476567075369ull}}, {{3374558179243072398ull, 11171685333683426763ull, 10821075890077488546ull, 7969860595708844211ull}}, {{18249999926522777913ull, 11593989351979529630ull, 4457329422084736389ull, 4981162872318027632ull}}, {{13589127871298696583ull, 657428634692248326ull, 5571661777605920487ull, 6226453590397534540ull}}, {{7763037802268594921ull, 14656843848647474120ull, 6964577222007400608ull, 7783066987996918175ull}}, {{4851898626417871826ull, 9160527405404671325ull, 11270389791395707236ull, 4864416867498073859ull}}, {{10676559301449727686ull, 11450659256755839156ull, 9476301220817246141ull, 6080521084372592324ull}}, {{13345699126812159607ull, 478266015662635233ull, 11845376526021557677ull, 7600651355465740405ull}}, {{1423532926616517899ull, 2604759269002840973ull, 9709203337977167500ull, 4750407097166087753ull}}, {{6391102176698035277ull, 3255949086253551216ull, 16748190190898847279ull, 5938008871457609691ull}}, {{7988877720872544096ull, 17904994413099102732ull, 16323551720196171194ull, 7422511089322012114ull}}, {{14216420612400115868ull, 15802307526614327111ull, 14813905843549994900ull, 4639069430826257571ull}}, {{13158839747072756931ull, 1306140334558357273ull, 13905696286010105722ull, 5798836788532821964ull}}, {{2613491628558782452ull, 10856047455052722400ull, 17382120357512632152ull, 7248545985666027455ull}}, {{3266864535698478065ull, 13570059318815903000ull, 17115964428463402286ull, 9060682482082534319ull}}, {{2041790334811548791ull, 3869601055832551471ull, 17615006795430708285ull, 5662926551301583949ull}}, {{16387295973796599701ull, 9448687338218077242ull, 8183700439006221644ull, 7078658189126979937ull}}, {{11260747930390973818ull, 11810859172772596553ull, 14841311567185164959ull, 8848322736408724921ull}}, {{120438428853276780ull, 14299316010623954702ull, 2358290701849646243ull, 5530201710255453076ull}}, {{9373920072921371783ull, 13262458994852555473ull, 2947863377312057804ull, 6912752137819316345ull}}, {{16329086109579102633ull, 16578073743565694341ull, 8296515240067460159ull, 8640940172274145431ull}}, {{12511521827700633098ull, 17278825117369640819ull, 12102851052683244455ull, 5400587607671340894ull}}, {{11027716266198403468ull, 16986845378284663120ull, 5905191778999279761ull, 6750734509589176118ull}}, {{13784645332748004335ull, 7398498667573665188ull, 16604861760603875510ull, 8438418136986470147ull}}, {{17838775369822278517ull, 12375648806152838ull, 8072195591163728242ull, 5274011335616543842ull}}, {{13075097175423072339ull, 9238841597862466856ull, 866872452099884494ull, 6592514169520679803ull}}, {{16343871469278840423ull, 2325179960473307762ull, 14918648620407019330ull, 8240642711900849753ull}}, {{14826605686726663169ull, 6064923493723205255ull, 2406626360113305225ull, 5150401694938031096ull}}, {{13921571089980941057ull, 12192840385581394473ull, 3008282950141631531ull, 6438002118672538870ull}}, {{3566905807194012609ull, 10629364463549355188ull, 12983725724531815222ull, 8047502648340673587ull}}, {{11452688166351033689ull, 2031666771290959088ull, 5808985568618690562ull, 5029689155212920992ull}}, {{14315860207938792111ull, 11762955500968474668ull, 7261231960773363202ull, 6287111444016151240ull}}, {{17894825259923490138ull, 5480322339355817527ull, 9076539950966704003ull, 7858889305020189050ull}}, {{18101794815093263193ull, 1119358452883692002ull, 10284523487781577906ull, 4911805815637618156ull}}, {{13403871482011803183ull, 10622570102959390811ull, 12855654359726972382ull, 6139757269547022695ull}}, {{12143153334087366074ull, 4054840591844462706ull, 11457881931231327574ull, 7674696586933778369ull}}, {{12201156852231991701ull, 16369333425184952903ull, 243647179378497877ull, 4796685366833611481ull}}, {{10639760046862601722ull, 6626608726199027417ull, 4916244992650510251ull, 5995856708542014351ull}}, {{17911386077005640056ull, 3671574889321396367ull, 1533620222385749910ull, 7494820885677517939ull}}, {{18112145325769606891ull, 16129792361108036441ull, 17099413703486951357ull, 4684263053548448711ull}}, {{8805123601929844902ull, 6327182396102881840ull, 16762581110931301293ull, 5855328816935560889ull}}, {{11006404502412306127ull, 12520664013555990204ull, 7118168333381962904ull, 7319161021169451112ull}}, {{13758005628015382659ull, 15650830016944987755ull, 8897710416727453630ull, 9148951276461813890ull}}, {{6292910508295920210ull, 5170082742163229443ull, 10172755028882046423ull, 5718094547788633681ull}}, {{3254452116942512358ull, 1850917409276648900ull, 17327629804529945933ull, 7147618184735792101ull}}, {{4068065146178140448ull, 6925332780023199029ull, 7824479200380268704ull, 8934522730919740127ull}}, {{4848383725575031732ull, 4328332987514499393ull, 11807828527878749796ull, 5584076706824837579ull}}, {{10672165675396177569ull, 5410416234393124241ull, 10148099641421049341ull, 6980095883531046974ull}}, {{17951893112672609865ull, 11374706311418793205ull, 3461752514921535868ull, 8725119854413808718ull}}, {{13525776204634075118ull, 16332563481491521561ull, 15998653377108123629ull, 5453199909008630448ull}}, {{3072162200510430185ull, 6580646296582238240ull, 1551572647675602921ull, 6816499886260788061ull}}, {{3840202750638037731ull, 12837493889155185704ull, 6551151828021891555ull, 8520624857825985076ull}}, {{2400126719148773582ull, 5717590671508297113ull, 13317841929368458030ull, 5325390536141240672ull}}, {{7611844417363354882ull, 16370360376240147199ull, 16647302411710572537ull, 6656738170176550840ull}}, {{4903119503276805698ull, 6627892415018020287ull, 2362383940928664056ull, 8320922712720688551ull}}, {{9981978717189085417ull, 4142432759386262679ull, 8394018990721496891ull, 5200576695450430344ull}}, {{7865787378058968868ull, 566354930805440445ull, 10492523738401871114ull, 6500720869313037930ull}}, {{14443920241001098988ull, 9931315700361576364ull, 3892282636147563084ull, 8125901086641297413ull}}, {{18250822187480462676ull, 15430444349580761035ull, 4738519656805920879ull, 5078688179150810883ull}}, {{18201841715923190441ull, 14676369418548563390ull, 1311463552580013195ull, 6348360223938513604ull}}, {{13528930108049212243ull, 13733775754758316334ull, 1639329440725016494ull, 7935450279923142005ull}}, {{3843895299103369748ull, 3971923828296559805ull, 3330423909666829261ull, 4959656424951963753ull}}, {{9416555142306600089ull, 9576590803798087660ull, 8774715905510924480ull, 6199570531189954691ull}}, {{11770693927883250111ull, 11970738504747609575ull, 6356708863461267696ull, 7749463163987443364ull}}, {{14274212732568113175ull, 7481711565467255984ull, 13196315076518068118ull, 4843414477492152102ull}}, {{17842765915710141469ull, 128767419979294172ull, 7272021808792809340ull, 6054268096865190128ull}}, {{3856713320928125220ull, 160959274974117716ull, 9090027260991011675ull, 7567835121081487660ull}}, {{11633817862434854071ull, 16241500611354681236ull, 14904639074974158104ull, 4729896950675929787ull}}, {{14542272328043567589ull, 1855131690483799929ull, 14019112825290309727ull, 5912371188344912234ull}}, {{4342782354772295774ull, 16153972668386913624ull, 8300518994758111350ull, 7390463985431140293ull}}, {{2714238971732684859ull, 5484546899314433111ull, 7493667380937513546ull, 4619039990894462683ull}}, {{17227856769948019785ull, 16079055660997817196ull, 4755398207744504028ull, 5773799988618078354ull}}, {{3088076888725473115ull, 1652075502537719880ull, 15167619796535405844ull, 7217249985772597942ull}}, {{3860096110906841394ull, 2065094378172149850ull, 9736152708814481497ull, 9021562482215747428ull}}, {{7024246087744163775ull, 12819899032426063416ull, 15308467479863826743ull, 5638476551384842142ull}}, {{8780307609680204719ull, 11413187772105191366ull, 9912212312975007621ull, 7048095689231052678ull}}, {{1752012475245480091ull, 431426659849325496ull, 3166893354363983719ull, 8810119611538815848ull}}, {{1095007797028425057ull, 7187170690046910291ull, 1979308346477489824ull, 5506324757211759905ull}}, {{15203817801567695033ull, 8983963362558637863ull, 7085821451524250184ull, 6882905946514699881ull}}, {{14393086233532230887ull, 11229954203198297329ull, 13468962832832700634ull, 8603632433143374851ull}}, {{2078149868316562449ull, 11630407395426323735ull, 6112258761306743944ull, 5377270270714609282ull}}, {{16432745390677866773ull, 14538009244282904668ull, 16863695488488205738ull, 6721587838393261602ull}}, {{2094187664637781850ull, 8949139518498855028ull, 11856247323755481365ull, 8401984797991577003ull}}, {{10532239327253389464ull, 7899055208275478344ull, 5104311568133481901ull, 5251240498744735627ull}}, {{13165299159066736830ull, 14485505028771735834ull, 1768703441739464472ull, 6564050623430919534ull}}, {{7233251911978645230ull, 18106881285964669793ull, 11434251339029106398ull, 8205063279288649417ull}}, {{16049997491055123029ull, 6705114785300530716ull, 228878059252109643ull, 5128164549555405886ull}}, {{1615752790109352170ull, 3769707463198275492ull, 9509469610919912862ull, 6410205686944257357ull}}, {{2019690987636690212ull, 13935506365852620173ull, 16498523032077278981ull, 8012757108680321696ull}}, {{3568149876486625335ull, 11015534487871581560ull, 10311576895048299363ull, 5007973192925201060ull}}, {{4460187345608281668ull, 9157732091412089046ull, 12889471118810374204ull, 6259966491156501325ull}}, {{14798606218865127893ull, 11447165114265111307ull, 2276780843230804043ull, 7824958113945626657ull}}, {{6943285877577010982ull, 4848635187202000615ull, 12952203073087722287ull, 4890598821216016660ull}}, {{4067421328543875823ull, 1449107965575112865ull, 16190253841359652859ull, 6113248526520020825ull}}, {{9695962679107232682ull, 15646443012251054793ull, 6402759246417402361ull, 7641560658150026032ull}}, {{17589191720510490187ull, 2861497855015827389ull, 4001724529010876476ull, 4775975411343766270ull}}, {{8151431595355949021ull, 3576872318769784237ull, 14225527698118371403ull, 5969969264179707837ull}}, {{14800975512622324180ull, 18306148453744394008ull, 3946851567365800541ull, 7462461580224634797ull}}, {{9250609695388952613ull, 13747185792803940207ull, 4772625238817319290ull, 4664038487640396748ull}}, {{6951576100808802862ull, 7960610204150149451ull, 5965781548521649113ull, 5830048109550495935ull}}, {{4077784107583615673ull, 14562448773615074718ull, 2845540917224673487ull, 7287560136938119919ull}}, {{14320602171334295400ull, 13591374948591455493ull, 17391984201813005571ull, 9109450171172649898ull}}, {{11256219366297628577ull, 6188766333655965731ull, 15481676144560516386ull, 5693406356982906186ull}}, {{9458588189444647817ull, 16959329953924732972ull, 10128723143845869674ull, 7116757946228632733ull}}, {{11823235236805809771ull, 11975790405551140407ull, 17272589948234724997ull, 8895947432785790916ull}}, {{14307051050644712963ull, 9790712012683156706ull, 1571996680791927315ull, 5559967145491119323ull}}, {{8660441776451115396ull, 7626703997426557979ull, 15800053906272072856ull, 6949958931863899153ull}}, {{6213866202136506341ull, 9533379996783197474ull, 5915009327557927358ull, 8687448664829873942ull}}, {{8495352394762704367ull, 1346676479562110517ull, 17531938885005868311ull, 5429655415518671213ull}}, {{15230876511880768363ull, 15518403654734801858ull, 8079865550975171676ull, 6787069269398339017ull}}, {{9815223602996184645ull, 951260494708950707ull, 14711517957146352500ull, 8483836586747923771ull}}, {{3828671742658921452ull, 9817909846047870000ull, 6888855714002776360ull, 5302397866717452357ull}}, {{4785839678323651814ull, 12272387307559837500ull, 13222755660930858354ull, 6627997333396815446ull}}, {{5982299597904564768ull, 6117112097595021067ull, 7305072539308797135ull, 8284996666746019308ull}}, {{1433094239476659028ull, 10740724088637970023ull, 13789042373922774017ull, 5178122916716262067ull}}, {{15626425854627987497ull, 18037591129224850432ull, 12624616948976079617ull, 6472653645895327584ull}}, {{1086288244575432755ull, 8711930856248899329ull, 15780771186220099522ull, 8090817057369159480ull}}, {{12208145198928115232ull, 10056642803582949984ull, 9862981991387562201ull, 5056760660855724675ull}}, {{15260181498660144040ull, 17182489522906075384ull, 7717041470807064847ull, 6320950826069655844ull}}, {{628482799615628434ull, 16866425885205206327ull, 9646301838508831059ull, 7901188532587069805ull}}, {{7310330777400849627ull, 8235673169039560002ull, 8334781658281713364ull, 4938242832866918628ull}}, {{18361285508605837842ull, 10294591461299450002ull, 10418477072852141705ull, 6172803541083648285ull}}, {{13728234848902521494ull, 17479925345051700407ull, 17634782359492565035ull, 7716004426354560356ull}}, {{15497675808205157790ull, 8619110331443618802ull, 1798366937828077339ull, 4822502766471600223ull}}, {{10148722723401671430ull, 6162201895877135599ull, 16083016727567260386ull, 6028128458089500278ull}}, {{8074217385824701383ull, 16926124406701195307ull, 10880398872604299674ull, 7535160572611875348ull}}, {{2740542856926744413ull, 15190513772615634971ull, 16023621332232463104ull, 4709475357882422092ull}}, {{17260736626440594228ull, 541398142059992097ull, 1582782591581027265ull, 5886844197353027616ull}}, {{7740862727768579072ull, 5288433696002378026ull, 1978478239476284081ull, 7358555246691284520ull}}, {{452706372855948032ull, 11222228138430360437ull, 2473097799345355101ull, 9198194058364105650ull}}, {{2588784492248661472ull, 9319735595732669225ull, 6157372143018234842ull, 5748871286477566031ull}}, {{7847666633738214744ull, 2426297457811060723ull, 3085029160345405649ull, 7186089108096957539ull}}, {{5197897273745380526ull, 7644557840691213808ull, 17691344505713920773ull, 8982611385121196923ull}}, {{3248685796090862829ull, 7083691659645702582ull, 8751247306857506531ull, 5614132115700748077ull}}, {{13284229281968354344ull, 4242928556129740323ull, 15550745151999271068ull, 7017665144625935096ull}}, {{11993600584033055026ull, 5303660695162175404ull, 991687366289537219ull, 8772081430782418871ull}}, {{16719372401875435200ull, 1008944925262665675ull, 7537333631572042618ull, 5482550894239011794ull}}, {{16287529483916906095ull, 10484553193433107902ull, 198295002610277464ull, 6853188617798764743ull}}, {{11136039818041356811ull, 13105691491791384878ull, 14082926808545010542ull, 8566485772248455928ull}}, {{2348338867848460103ull, 3579371163942227645ull, 8801829255340631589ull, 5354053607655284955ull}}, {{7547109603237963033ull, 9085899973355172460ull, 6390600550748401582ull, 6692567009569106194ull}}, {{9433887004047453791ull, 2134002929839189767ull, 17211622725290277786ull, 8365708761961382742ull}}, {{12813708405170740475ull, 5945437849576881508ull, 6145578184879035712ull, 5228567976225864214ull}}, {{16017135506463425594ull, 7431797311971101885ull, 16905344767953570448ull, 6535709970282330267ull}}, {{6186361327797118281ull, 9289746639963877357ull, 16519994941514575156ull, 8169637462852912834ull}}, {{6172318839086892878ull, 15029463686832199156ull, 14936682856873997376ull, 5106023414283070521ull}}, {{7715398548858616097ull, 340085534830697329ull, 4835795515810333009ull, 6382529267853838152ull}}, {{14255934204500658025ull, 5036792936965759565ull, 6044744394762916261ull, 7978161584817297690ull}}, {{11215801887026605218ull, 5453838594817293680ull, 8389651265154210567ull, 4986350990510811056ull}}, {{14019752358783256522ull, 2205612225094229196ull, 10487064081442763209ull, 6232938738138513820ull}}, {{17524690448479070652ull, 7368701299795174399ull, 13108830101803454011ull, 7791173422673142275ull}}, {{17870460557940501014ull, 2299595303158290047ull, 5887175804413464805ull, 4869483389170713922ull}}, {{17726389678998238363ull, 7486180147375250463ull, 16582341792371606814ull, 6086854236463392402ull}}, {{17546301080320410050ull, 134353147364287271ull, 11504555203609732710ull, 7608567795579240503ull}}, {{17883967202841338137ull, 13919028772384843256ull, 14107876029897164799ull, 4755354872237025314ull}}, {{3908214929842121056ull, 12787099947053666167ull, 8411473000516680191ull, 5944193590296281643ull}}, {{273582643875263416ull, 11372188915389694805ull, 5902655232218462335ull, 7430241987870352054ull}}, {{2476832161635733587ull, 14025147099759641109ull, 17524217575418702671ull, 4643901242418970033ull}}, {{7707726220472054887ull, 12919747856272163482ull, 8070213913991214627ull, 5804876553023712542ull}}, {{411285738735292801ull, 11537998801912816449ull, 864395355634242476ull, 7256095691279640678ull}}, {{5125793191846503905ull, 14422498502391020561ull, 10303866231397578903ull, 9070119614099550847ull}}, {{14732835790972534701ull, 15931590591635469706ull, 13357445422264568670ull, 5668824758812219279ull}}, {{9192672701860892568ull, 10691116202689561325ull, 12085120759403322934ull, 7086030948515274099ull}}, {{16102526895753503614ull, 4140523216507175848ull, 10494714930826765764ull, 8857538685644092624ull}}, {{10064079309845939759ull, 11811199047171760713ull, 6559196831766728602ull, 5535961678527557890ull}}, {{17191785155734812603ull, 5540626772109925083ull, 17422368076563186561ull, 6919952098159447362ull}}, {{16878045426241127849ull, 11537469483564794258ull, 12554588058849207393ull, 8649940122699309203ull}}, {{15160464409828092810ull, 293389399586914555ull, 5540774527567060669ull, 5406212576687068252ull}}, {{14338894493857728108ull, 4978422767911031098ull, 6925968159458825836ull, 6757765720858835315ull}}, {{8700246080467384327ull, 6223028459888788873ull, 4045774180896144391ull, 8447207151073544144ull}}, {{16966868846360584965ull, 10806921815071574901ull, 2528608863060090244ull, 5279504469420965090ull}}, {{7373528002668567494ull, 13508652268839468627ull, 12384133115679888613ull, 6599380586776206362ull}}, {{4605223984908321463ull, 3050757280767172072ull, 6256794357745084959ull, 8249225733470257953ull}}, {{2878264990567700915ull, 8824252328120564401ull, 15439711519659147859ull, 5155766083418911220ull}}, {{8209517256637014047ull, 6418629391723317597ull, 852895325864383208ull, 6444707604273639026ull}}, {{14873582589223655463ull, 8023286739654146996ull, 10289491194185254818ull, 8055884505342048782ull}}, {{72617081410008856ull, 9626240230711229777ull, 1819245977938396357ull, 5034927815838780489ull}}, {{4702457370189898974ull, 16644486306816425125ull, 6885743490850383350ull, 6293659769798475611ull}}, {{10489757731164761622ull, 11582235846665755598ull, 3995493345135591284ull, 7867074712248094514ull}}, {{1944412563550588110ull, 16462269441020873057ull, 7108869359137132456ull, 4916921695155059071ull}}, {{7042201722865623041ull, 2131092727566539705ull, 4274400680494027667ull, 6146152118943823839ull}}, {{13414438172009416705ull, 16498923964740338343ull, 731314832190146679ull, 7682690148679779799ull}}, {{15301552885146967297ull, 17229356505603793320ull, 7374600797759923530ull, 4801681342924862374ull}}, {{680197032724157505ull, 12313323595149965843ull, 18441623034054680221ull, 6002101678656077967ull}}, {{14685304346187360593ull, 1556596438655293591ull, 18440342774140962373ull, 7502627098320097459ull}}, {{16095844244008182227ull, 3278715783373252446ull, 9219371224624407531ull, 4689141936450060912ull}}, {{10896433268155451976ull, 17933452784498729270ull, 11524214030780509413ull, 5861427420562576140ull}}, {{4397169548339539161ull, 8581757925341247876ull, 14405267538475636767ull, 7326784275703220175ull}}, {{5496461935424423952ull, 6115511388249171941ull, 13394898404667158055ull, 9158480344629025219ull}}, {{5741131718853958922ull, 10739723645296814319ull, 6065968493703279832ull, 5724050215393140762ull}}, {{2564728630140060748ull, 13424654556621017899ull, 16805832653983875598ull, 7155062769241425952ull}}, {{17040968842957239647ull, 7557446158921496565ull, 2560546743770292882ull, 8943828461551782441ull}}, {{12956448536061968732ull, 9335089867753323257ull, 13129556760924902811ull, 5589892788469864025ull}}, {{2360502614795297203ull, 7057176316264266168ull, 2576887895873964802ull, 6987365985587330032ull}}, {{2950628268494121503ull, 18044842432185108518ull, 3221109869842456002ull, 8734207481984162540ull}}, {{15679200723090989652ull, 15889712538543080727ull, 11236565705506310809ull, 5458879676240101587ull}}, {{14987314885436349160ull, 6027082617896687197ull, 9434021113455500608ull, 6823599595300126984ull}}, {{4899085551513272738ull, 7533853272370858997ull, 11792526391819375760ull, 8529499494125158730ull}}, {{5367771478909489414ull, 4708658295231786873ull, 11982015013314497754ull, 5330937183828224206ull}}, {{11321400367064249671ull, 15109194905894509399ull, 5754146729788346384ull, 6663671479785280258ull}}, {{9540064440402924185ull, 439749558658585133ull, 16416055449090208789ull, 8329589349731600322ull}}, {{8268383284465521568ull, 2580686483375309660ull, 14871720674108768397ull, 5205993343582250201ull}}, {{10335479105581901959ull, 7837544122646524979ull, 4754592787353796784ull, 6507491679477812752ull}}, {{8307662863549989545ull, 9796930153308156224ull, 5943240984192245980ull, 8134364599347265940ull}}, {{5192289289718743466ull, 15346453382672373448ull, 12937897651974929545ull, 5083977874592041212ull}}, {{6490361612148429332ull, 5348008673058303098ull, 16172372064968661932ull, 6354972343240051515ull}}, {{17336324052040312473ull, 6685010841322878872ull, 15603779062783439511ull, 7943715429050064394ull}}, {{10835202532525195296ull, 11095660803467881151ull, 14364047932667037598ull, 4964822143156290246ull}}, {{8932317147229106216ull, 4646203967480075631ull, 8731687878979021190ull, 6206027678945362808ull}}, {{6553710415608994866ull, 15031126996204870347ull, 10914609848723776487ull, 7757534598681703510ull}}, {{1790226000541927839ull, 16311983400269125823ull, 2209945137024972400ull, 4848459124176064694ull}}, {{16072840555959573511ull, 1943235176626855662ull, 11985803458135991309ull, 6060573905220080867ull}}, {{10867678658094691080ull, 7040729989210957482ull, 10370568304242601232ull, 7575717381525101084ull}}, {{11403985179736569829ull, 4400456243256848426ull, 15704977227006401578ull, 4734823363453188177ull}}, {{5031609437815936479ull, 14723942340925836341ull, 5796163478475838260ull, 5918529204316485222ull}}, {{10901197815697308502ull, 18404927926157295426ull, 16468576384949573633ull, 7398161505395606527ull}}, {{11424934653238205718ull, 4585550926207227785ull, 17210389268234565377ull, 4623850940872254079ull}}, {{446110261265593435ull, 10343624676186422636ull, 16901300566865818817ull, 5779813676090317599ull}}, {{557637826581991794ull, 17541216863660416199ull, 16514939690154885617ull, 7224767095112896999ull}}, {{14532105338509653455ull, 8091463024293356536ull, 16031988594266219118ull, 9030958868891121249ull}}, {{9082565836568533409ull, 445478371755959931ull, 3102463843775305093ull, 5644349293056950781ull}}, {{6741521277283278858ull, 5168533983122337818ull, 8489765823146519270ull, 7055436616321188476ull}}, {{17650273633458874380ull, 15684039515757698080ull, 10612207278933149087ull, 8819295770401485595ull}}, {{11031421020911796488ull, 16720053724989643156ull, 4326786540119524227ull, 5512059856500928497ull}}, {{13789276276139745609ull, 16288381137809666041ull, 10020169193576793188ull, 6890074820626160621ull}}, {{3401537289892518300ull, 1913732348552530936ull, 17136897510398379390ull, 8612593525782700776ull}}, {{2125960806182823937ull, 15031140773127495547ull, 10710560943998987118ull, 5382870953614187985ull}}, {{16492509063010693634ull, 9565553929554593625ull, 17999887198426121802ull, 6728588692017734981ull}}, {{6780578273481203330ull, 2733570375088466224ull, 8664800942750488541ull, 8410735865022168727ull}}, {{4237861420925752081ull, 4014324493643985342ull, 12333029616860137194ull, 5256709915638855454ull}}, {{14520698813011965910ull, 14241277653909757485ull, 6192914984220395684ull, 6570887394548569318ull}}, {{4315815460982793675ull, 17801597067387196857ull, 16964515767130270413ull, 8213609243185711647ull}}, {{14226599709182715807ull, 13431841176330691987ull, 17520351382097500864ull, 5133505776991069779ull}}, {{13171563618051006855ull, 16789801470413364984ull, 17288753209194488176ull, 6416882221238837224ull}}, {{16464454522563758568ull, 2540507764307154614ull, 3164197437783558605ull, 8021102776548546531ull}}, {{5678598058174961201ull, 3893660361905665586ull, 18118524463110581792ull, 5013189235342841581ull}}, {{16321619609573477309ull, 4867075452382081982ull, 8813097523606063528ull, 6266486544178551977ull}}, {{11178652475112070829ull, 6083844315477602478ull, 15628057922934967314ull, 7833108180223189971ull}}, {{2374971778517656364ull, 8414088715600889453ull, 7461693192620660619ull, 4895692612639493732ull}}, {{7580400741574458359ull, 5905924876073723912ull, 9327116490775825774ull, 6119615765799367165ull}}, {{9475500926968072949ull, 16605778131946930698ull, 16270581631897170121ull, 7649519707249208956ull}}, {{10533874097782433497ull, 3461082304825749830ull, 945741483080955518ull, 4780949817030755598ull}}, {{3943970585373266063ull, 13549724917886963096ull, 10405548890705970205ull, 5976187271288444497ull}}, {{4929963231716582579ull, 3102098092076540158ull, 17618622131809850661ull, 7470234089110555621ull}}, {{16916285075105027824ull, 4244654316761531550ull, 13317481841594850615ull, 4668896305694097263ull}}, {{11921984307026508972ull, 694131877524526534ull, 12035166283566175365ull, 5836120382117621579ull}}, {{5679108346928360407ull, 5479350865333046072ull, 10432271836030331302ull, 7295150477647026974ull}}, {{7098885433660450508ull, 16072560618521083398ull, 3816967758183138319ull, 9118938097058783718ull}}, {{18271861451319945280ull, 16962879414216758979ull, 16220662904146625161ull, 5699336310661739823ull}}, {{18228140795722543696ull, 7368541212488785012ull, 15664142611755893548ull, 7124170388327174779ull}}, {{4338431920943628004ull, 9210676515610981266ull, 14968492246267479031ull, 8905212985408968474ull}}, {{7323205969017155406ull, 12674201849897945147ull, 13966993672344562298ull, 5565758115880605296ull}}, {{4542321442844056354ull, 6619380275517655626ull, 17458742090430702873ull, 6957197644850756620ull}}, {{14901273840409846250ull, 12885911362824457436ull, 3376683539328826975ull, 8696497056063445776ull}}, {{89924113401378099ull, 14971223629406367754ull, 2110427212080516859ull, 5435310660039653610ull}}, {{9335777178606498431ull, 14102343518330571788ull, 11861406051955421882ull, 6794138325049567012ull}}, {{11669721473258123039ull, 8404557361058438927ull, 14826757564944277353ull, 8492672906311958765ull}}, {{14211104948427408755ull, 16782063396729994089ull, 11572566487303867297ull, 5307920566444974228ull}}, {{3928823130252097232ull, 7142521190630328900ull, 14465708109129834122ull, 6634900708056217785ull}}, {{4911028912815121540ull, 18151523525142686933ull, 4247077081130128940ull, 8293625885070272232ull}}, {{5375236079723144915ull, 2121330166359403525ull, 2654423175706330588ull, 5183516178168920145ull}}, {{11330731118081319047ull, 2651662707949254406ull, 7929714988060301139ull, 6479395222711150181ull}}, {{4940041860746873001ull, 17149636440218731720ull, 14523829753502764327ull, 8099244028388937726ull}}, {{3087526162966795626ull, 17636051802777789181ull, 4465707577511839800ull, 5062027517743086079ull}}, {{8471093722135882436ull, 3598320679762684860ull, 970448453462411847ull, 6327534397178857599ull}}, {{10588867152669853045ull, 18332958904985519787ull, 15048118622110178520ull, 7909417996473571998ull}}, {{4312198961204964201ull, 11458099315615949867ull, 4793388120391473671ull, 4943386247795982499ull}}, {{778562683078817348ull, 9710938126092549430ull, 1380049132061954185ull, 6179232809744978124ull}}, {{10196575390703297492ull, 16750358676043074691ull, 1725061415077442731ull, 7724041012181222655ull}}, {{4067016609975866981ull, 8163131163313227730ull, 7995692412064483563ull, 4827525632613264159ull}}, {{14307142799324609534ull, 5592227935714146758ull, 5382929496653216550ull, 6034407040766580199ull}}, {{8660556462300986109ull, 16213656956497459256ull, 2116975852389132783ull, 7543008800958225249ull}}, {{5412847788938116319ull, 17051064625451993891ull, 12852324953811677749ull, 4714380500598890780ull}}, {{2154373717745257494ull, 7478772726532828652ull, 16065406192264597187ull, 5892975625748613475ull}}, {{2692967147181571867ull, 4736779889738647911ull, 15470071721903358580ull, 7366219532185766844ull}}, {{17201266989259128546ull, 5920974862173309888ull, 890845578669646609ull, 9207774415232208556ull}}, {{10750791868286955342ull, 15229824334926788440ull, 9780150523523304938ull, 5754859009520130347ull}}, {{13438489835358694177ull, 9813908381803709742ull, 7613502135976743269ull, 7193573761900162934ull}}, {{7574740257343591913ull, 16879071495682025082ull, 293505633116153278ull, 8991967202375203668ull}}, {{9345898679267132850ull, 5937733666373877772ull, 9406813057552371607ull, 5619979501484502292ull}}, {{11682373349083916062ull, 2810481064539959311ull, 11758516321940464509ull, 7024974376855627865ull}}, {{9991280667927507173ull, 8124787349102337043ull, 863087347143416924ull, 8781217971069534832ull}}, {{3938707408240998032ull, 14301364130043736460ull, 539429591964635577ull, 5488261231918459270ull}}, {{4923384260301247539ull, 4041647107272506863ull, 9897659026810570280ull, 6860326539898074087ull}}, {{1542544306949171520ull, 5052058884090633579ull, 7760387765085824946ull, 8575408174872592609ull}}, {{17104991256339089864ull, 7769222820984033890ull, 16379457399247110351ull, 5359630109295370380ull}}, {{12157867033569086522ull, 5099842507802654459ull, 2027577675349336323ull, 6699537636619212976ull}}, {{10585647773533970249ull, 1763117116325930170ull, 2534472094186670404ull, 8374422045774016220ull}}, {{11227715876886119310ull, 10325320234558482164ull, 10807417095721444810ull, 5234013778608760137ull}}, {{14034644846107649137ull, 3683278256343326897ull, 18120957388079193917ull, 6542517223260950171ull}}, {{3708248002352397709ull, 9215783838856546526ull, 18039510716671604492ull, 8178146529076187714ull}}, {{16152713056752412280ull, 14983236936140117386ull, 15886380216347140711ull, 5111341580672617321ull}}, {{10967519284085739542ull, 14117360151747758829ull, 6022917215151762177ull, 6389176975840771652ull}}, {{18321085123534562332ull, 3811642134402534824ull, 7528646518939702722ull, 7986471219800964565ull}}, {{11450678202209101457ull, 6993962352428972169ull, 7011247083551008153ull, 4991544512375602853ull}}, {{478289697479213110ull, 13354138958963603116ull, 13375744872866148095ull, 6239430640469503566ull}}, {{597862121849016387ull, 12080987680277115991ull, 7496309054227909311ull, 7799288300586879458ull}}, {{7291192853796717098ull, 14468146327814279350ull, 9296879177319831223ull, 4874555187866799661ull}}, {{18337363104100672180ull, 13473496891340461283ull, 16232784990077176933ull, 6093193984833499576ull}}, {{18310017861698452321ull, 3006813058893412892ull, 1844237163886919551ull, 7616492481041874471ull}}, {{2220389126706756893ull, 8796787189449464914ull, 8070177255070406575ull, 4760307800651171544ull}}, {{11998858445238221924ull, 6384297968384443238ull, 10087721568838008219ull, 5950384750813964430ull}}, {{5775201019693001597ull, 3368686442053166144ull, 3386279924192734466ull, 7437980938517455538ull}}, {{3609500637308125998ull, 6717115044710616744ull, 6728110971047846945ull, 4648738086573409711ull}}, {{4511875796635157498ull, 13008079824315658834ull, 3798452695382420777ull, 5810922608216762139ull}}, {{14863216782648722680ull, 2425041725112409830ull, 136379850800638068ull, 7263653260270952674ull}}, {{9355648941456127542ull, 3031302156390512288ull, 9393846850355573393ull, 9079566575338690842ull}}, {{5847280588410079714ull, 13423778893812539940ull, 10482840299899621274ull, 5674729109586681776ull}}, {{7309100735512599642ull, 7556351580410899117ull, 13103550374874526593ull, 7093411386983352220ull}}, {{13748061937818137457ull, 14057125493941011800ull, 16379437968593158241ull, 8866764233729190275ull}}, {{8592538711136335911ull, 1868174406072050519ull, 7931305721157029949ull, 5541727646080743922ull}}, {{6128987370493031984ull, 6946904026017451053ull, 690760114591511628ull, 6927159557600929903ull}}, {{12272920231543677884ull, 8683630032521813816ull, 14698508198521553247ull, 8658949447001162378ull}}, {{7670575144714798678ull, 12344797797967215491ull, 13798253642503358683ull, 5411843404375726486ull}}, {{4976532912466110443ull, 10819311229031631460ull, 8024445016274422546ull, 6764804255469658108ull}}, {{6220666140582638054ull, 4300766999434763517ull, 10030556270343028183ull, 8456005319337072635ull}}, {{6193759347077842736ull, 9605508402287809054ull, 3963254659750698662ull, 5285003324585670397ull}}, {{16965571220702079228ull, 2783513466004985509ull, 9565754343115761232ull, 6606254155732087996ull}}, {{7371905970595435322ull, 3479391832506231887ull, 11957192928894701540ull, 8257817694665109995ull}}, {{11524970259263228933ull, 11397991932171170737ull, 5167402571345494510ull, 5161136059165693747ull}}, {{571154768796872454ull, 5024117878359187614ull, 1847567195754480234ull, 6451420073957117184ull}}, {{9937315497850866375ull, 15503519384803760325ull, 2309458994693100292ull, 8064275092446396480ull}}, {{8516665195370485437ull, 466327578647574395ull, 1443411871683187683ull, 5040171932778997800ull}}, {{6034145475785718892ull, 14417967528591631706ull, 1804264839603984603ull, 6300214915973747250ull}}, {{16766053881586924422ull, 13410773392312151728ull, 11478703086359756562ull, 7875268644967184062ull}}, {{10478783675991827764ull, 12993419388622482734ull, 2562503410547459947ull, 4922042903104490039ull}}, {{3875107558135008897ull, 11630088217350715514ull, 17038187318466488646ull, 6152553628880612548ull}}, {{14067256484523536929ull, 5314238234833618584ull, 2850990074373559192ull, 7690692036100765686ull}}, {{8792035302827210581ull, 3321398896771011615ull, 15616926851765638207ull, 4806682522562978553ull}}, {{6378358110106625322ull, 17986806676245928231ull, 5686100509424884046ull, 6008353153203723192ull}}, {{3361261619205893748ull, 13260136308452634481ull, 7107625636781105058ull, 7510441441504653990ull}}, {{13630003558072153353ull, 12899271211210284454ull, 18277324078270354373ull, 4694025900940408743ull}}, {{7814132410735415883ull, 2289030958730691856ull, 18234969079410555063ull, 5867532376175510929ull}}, {{9767665513419269854ull, 16696346753695528532ull, 8958653293981030116ull, 7334415470219388662ull}}, {{12209581891774087317ull, 2423689368409859049ull, 1974944580621511838ull, 9168019337774235828ull}}, {{713459654717722717ull, 15349863910538325618ull, 10457712399743220706ull, 5730012086108897392ull}}, {{10115196605251929205ull, 9963957851318131214ull, 13072140499679025883ull, 7162515107636121740ull}}, {{3420623719710135698ull, 7843261295720276114ull, 16340175624598782354ull, 8953143884545152175ull}}, {{6749575843246222715ull, 9513724328252560475ull, 17130138793015320827ull, 5595714927840720109ull}}, {{3825283785630390490ull, 7280469391888312690ull, 7577615435986987322ull, 6994643659800900137ull}}, {{14004976768892763920ull, 18323958776715166670ull, 14083705313411122056ull, 8743304574751125171ull}}, {{4141424462130589546ull, 11452474235446979169ull, 6496472811668257333ull, 5464565359219453232ull}}, {{9788466596090624837ull, 480534739026560249ull, 8120591014585321667ull, 6830706699024316540ull}}, {{16847269263540668950ull, 14435726479065364023ull, 10150738768231652083ull, 8538383373780395675ull}}, {{17447072317353999950ull, 6716486040202158562ull, 4038368720931088600ull, 5336489608612747297ull}}, {{12585468359837724129ull, 8395607550252698203ull, 9659646919591248654ull, 6670612010765934121ull}}, {{11120149431369767257ull, 1271137400961096946ull, 16686244667916448722ull, 8338265013457417651ull}}, {{11561779413033492440ull, 5406146894028073495ull, 8123059908234086499ull, 5211415633410886032ull}}, {{9840538247864477646ull, 2145997599107703965ull, 10153824885292608124ull, 6514269541763607540ull}}, {{16912358828257984961ull, 2682496998884629956ull, 12692281106615760155ull, 8142836927204509425ull}}, {{1346852230806464793ull, 17817461688798751387ull, 1015146663993768240ull, 5089273079502818391ull}}, {{15518623343790244703ull, 3825083037288887617ull, 15103991385274374013ull, 6361591349378522988ull}}, {{5563221124455642167ull, 9393039815038497426ull, 433245157883415900ull, 7951989186723153736ull}}, {{8088699221212164258ull, 15094021921253836699ull, 270778223677134937ull, 4969993241701971085ull}}, {{5499188008087817419ull, 5032469346285132162ull, 4950158798023806576ull, 6212491552127463856ull}}, {{16097357046964547581ull, 6290586682856415202ull, 6187698497529758220ull, 7765614440159329820ull}}, {{14672534172780230143ull, 13154988713640035309ull, 13090683597810874695ull, 4853509025099581137ull}}, {{4505609660693123966ull, 11832049873622656233ull, 2528296441981429657ull, 6066886281374476422ull}}, {{10243698094293792862ull, 955004286746156579ull, 12383742589331562880ull, 7583607851718095527ull}}, {{4096468299719926587ull, 596877679216347862ull, 14657368145973308656ull, 4739754907323809704ull}}, {{14343957411504684041ull, 746097099020434827ull, 18321710182466635820ull, 5924693634154762130ull}}, {{13318260745953467147ull, 932621373775543534ull, 13678765691228518967ull, 7405867042693452663ull}}, {{3712226947793529063ull, 7500417386250796565ull, 15466757584658906210ull, 4628666901683407914ull}}, {{9251969703169299233ull, 152149695958719898ull, 10110074943968856955ull, 5785833627104259893ull}}, {{2341590092106848233ull, 14025245175230563585ull, 17249279698388459097ull, 7232292033880324866ull}}, {{7538673633560948195ull, 3696498413756040769ull, 12338227586130798064ull, 9040365042350406083ull}}, {{16240886067044062382ull, 2310311508597525480ull, 5405549232118054838ull, 5650228151469003802ull}}, {{1854363510095526362ull, 12111261422601682659ull, 15980308577002344355ull, 7062785189336254752ull}}, {{16153012442901571664ull, 10527390759824715419ull, 1528641647543378828ull, 8828481486670318441ull}}, {{7789789767599788338ull, 15802991261745222945ull, 12484616075783081527ull, 5517800929168949025ull}}, {{14348923227927123327ull, 15142053058754140777ull, 1770712039446688197ull, 6897251161461186282ull}}, {{4101095979626740446ull, 5092508268160512260ull, 11436762086163136055ull, 8621563951826482852ull}}, {{11786557024121488587ull, 10100346695241402018ull, 16371348340706735842ull, 5388477469891551782ull}}, {{5509824243297084926ull, 3402061332196976715ull, 11240813389028643995ull, 6735596837364439728ull}}, {{2275594285693968253ull, 18087634720528384606ull, 14051016736285804993ull, 8419496046705549660ull}}, {{15257304483840893870ull, 4387242672689158522ull, 18005257497033403929ull, 5262185029190968537ull}}, {{9848258567946341530ull, 10095739359288836057ull, 8671513816009591199ull, 6577731286488710672ull}}, {{16922009228360314816ull, 8007988180683657167ull, 10839392270011988999ull, 8222164108110888340ull}}, {{17493784795366278616ull, 11922521640568367585ull, 15997992205612268932ull, 5138852567569305212ull}}, {{8032172938925684558ull, 14903152050710459482ull, 1550746183305784549ull, 6423565709461631516ull}}, {{816844136802329889ull, 4793882008105910641ull, 1938432729132230687ull, 8029457136827039395ull}}, {{12039742631569925941ull, 9913705282707276006ull, 17352421520203501843ull, 5018410710516899621ull}}, {{5826306252607631618ull, 7780445584956707104ull, 7855468844972213592ull, 6273013388146124527ull}}, {{7282882815759539523ull, 9725556981195883880ull, 5207650037787879086ull, 7841266735182655659ull}}, {{4551801759849712202ull, 1466787094820039521ull, 948938264403730477ull, 4900791709489159787ull}}, {{10301438218239528156ull, 6445169886952437305ull, 15021230885786826808ull, 6125989636861449733ull}}, {{17488483791226798099ull, 8056462358690546631ull, 4941480551951369798ull, 7657487046076812167ull}}, {{17847831397157830668ull, 423602955754203740ull, 10005954372610687980ull, 4785929403798007604ull}}, {{3863045172737736719ull, 529503694692754676ull, 12507442965763359975ull, 5982411754747509505ull}}, {{4828806465922170899ull, 14496937673648107057ull, 1799245651922036256ull, 7478014693434386882ull}}, {{14547219087269826572ull, 9060586046030066910ull, 5736214550878660564ull, 4673759183396491801ull}}, {{8960651822232507407ull, 11325732557537583638ull, 11781954207025713609ull, 5842198979245614751ull}}, {{1977442740935858450ull, 322107641639815836ull, 10115756740354754108ull, 7302748724057018439ull}}, {{2471803426169823063ull, 402634552049769795ull, 8033009907016054731ull, 9128435905071273049ull}}, {{17685778205851997078ull, 16392547659526963785ull, 16549846237953503966ull, 5705272440669545655ull}}, {{8272164702032832636ull, 11267312537553928924ull, 16075621779014492054ull, 7131590550836932069ull}}, {{10340205877541040795ull, 4860768635087635347ull, 6259469168485951356ull, 8914488188546165087ull}}, {{4156785664249456545ull, 12261352433784547900ull, 10829697257944801453ull, 5571555117841353179ull}}, {{5195982080311820681ull, 1491632486948521163ull, 8925435554003613913ull, 6964443897301691474ull}}, {{1883291581962387947ull, 6476226627113039358ull, 1933422405649741583ull, 8705554871627114343ull}}, {{15012115294008656179ull, 10965170669586731454ull, 8125918031172170345ull, 5440971794766946464ull}}, {{9541772080656044416ull, 18318149355410802222ull, 10157397538965212931ull, 6801214743458683080ull}}, {{2703843063965279712ull, 18286000675836114874ull, 12696746923706516164ull, 8501518429323353850ull}}, {{6301587933405687724ull, 2205378385542795988ull, 12547152845743960507ull, 5313449018327096156ull}}, {{7876984916757109655ull, 16591781037210658697ull, 15683941057179950633ull, 6641811272908870195ull}}, {{14457917164373774972ull, 6904668241231159659ull, 14993240303047550388ull, 8302264091136087744ull}}, {{6730355218519915406ull, 13538789687624250595ull, 9370775189404718992ull, 5188915056960054840ull}}, {{3801258004722506353ull, 16923487109530313244ull, 11713468986755898740ull, 6486143821200068550ull}}, {{4751572505903132941ull, 2707614813203339939ull, 5418464196590097618ull, 8107679776500085688ull}}, {{663889806975764137ull, 6303945276679475366ull, 3386540122868811011ull, 5067299860312553555ull}}, {{10053234295574480979ull, 3268245577421956303ull, 18068233208868177476ull, 6334124825390691943ull}}, {{7954856851040713319ull, 4085306971777445379ull, 17973605492657833941ull, 7917656031738364929ull}}, {{2665942522686751873ull, 4859159866574597314ull, 4315974405270064357ull, 4948535019836478081ull}}, {{12555800190213215649ull, 10685635851645634546ull, 10006654025014968350ull, 6185668774795597601ull}}, {{6471378200911743753ull, 4133672777702267375ull, 17120003549696098342ull, 7732085968494497001ull}}, {{10962140403210921702ull, 16418603541346080821ull, 3782473190918979607ull, 4832553730309060626ull}}, {{18314361522441040031ull, 15911568408255213122ull, 13951463525503500317ull, 6040692162886325782ull}}, {{13669579866196524231ull, 6054402455036852691ull, 8215957370024599589ull, 7550865203607907228ull}}, {{6237644407159133692ull, 6089844543611726884ull, 14358345393120150551ull, 4719290752254942017ull}}, {{7797055508948917115ull, 3000619661087270701ull, 4112873686118024477ull, 5899113440318677522ull}}, {{14358005404613534298ull, 8362460594786476280ull, 14364464144502306404ull, 7373891800398346902ull}}, {{17947506755766917872ull, 10453075743483095350ull, 8732208143773107197ull, 9217364750497933628ull}}, {{6605505703926935766ull, 8839015348890628546ull, 14681002126712967806ull, 5760852969061208517ull}}, {{17480254166763445516ull, 1825397149258509874ull, 4516194603109046046ull, 7201066211326510647ull}}, {{12626945671599531087ull, 11505118473427913151ull, 1033557235458919653ull, 9001332764158138309ull}}, {{14809370072390788785ull, 9496542055106139671ull, 2951816281375518735ull, 5625832977598836443ull}}, {{13900026572061098078ull, 7258991550455286685ull, 17524828407001562131ull, 7032291221998545553ull}}, {{3539975159794208885ull, 4462053419641720453ull, 8070977453469788952ull, 8790364027498181942ull}}, {{4518327484085074505ull, 2788783387276075283ull, 432674889991230191ull, 5493977517186363714ull}}, {{1036223336678955227ull, 17321037289377257816ull, 9764215649343813546ull, 6867471896482954642ull}}, {{1295279170848694034ull, 12427924574866796462ull, 2981897524824991125ull, 8584339870603693303ull}}, {{14644607537062597484ull, 10073295868505441740ull, 8781214980656701309ull, 5365212419127308314ull}}, {{18305759421328246854ull, 17203305854059190079ull, 1753146688966100828ull, 6706515523909135393ull}}, {{18270513258232920664ull, 3057388243864435983ull, 6803119379635013940ull, 8383144404886419241ull}}, {{18336599814036657271ull, 11134239689270048297ull, 15781164658340353472ull, 5239465253054012025ull}}, {{9085691712263657877ull, 13917799611587560372ull, 5891397767643278128ull, 6549331566317515032ull}}, {{11357114640329572346ull, 17397249514484450465ull, 7364247209554097660ull, 8186664457896893790ull}}, {{180667622564900860ull, 1649908909698005733ull, 18437712561253474750ull, 5116665286185558618ull}}, {{4837520546633513979ull, 11285758173977282974ull, 13823768664712067629ull, 6395831607731948273ull}}, {{15270272720146668282ull, 272139662189440005ull, 3444652775607920825ull, 7994789509664935342ull}}, {{11849763459305361628ull, 11699302334936869763ull, 15987966040037114227ull, 4996743443540584588ull}}, {{10200518305704314131ull, 10012441900243699300ull, 1538213476336841168ull, 6245929304425730736ull}}, {{12750647882130392664ull, 12515552375304624125ull, 1922766845421051460ull, 7807411630532163420ull}}, {{10274997935545189367ull, 17045592271420165886ull, 10425101315242932970ull, 4879632269082602137ull}}, {{3620375382576710901ull, 12083618302420431550ull, 17643062662481054117ull, 6099540336353252671ull}}, {{13748841265075664434ull, 1269464822743375725ull, 17442142309673929743ull, 7624425420441565839ull}}, {{10898868799885984223ull, 7710944541855691684ull, 17818867971187287945ull, 4765265887775978649ull}}, {{13623585999857480279ull, 14250366695747002509ull, 8438526908701946219ull, 5956582359719973312ull}}, {{3194424444539686637ull, 13201272351256365233ull, 10548158635877432774ull, 7445727949649966640ull}}, {{13525730323905773908ull, 3639109201107840366ull, 6592599147423395484ull, 4653579968531229150ull}}, {{7683790868027441577ull, 4548886501384800458ull, 17464120971134020163ull, 5816974960664036437ull}}, {{381366548179526163ull, 1074422108303612669ull, 7995093158635361492ull, 7271218700830045547ull}}, {{5088394203651795608ull, 1343027635379515836ull, 5382180429866813961ull, 9089023376037556934ull}}, {{12403618414137148063ull, 12368607318180667157ull, 17198920823948922437ull, 5680639610023473083ull}}, {{1669464962389271367ull, 1625701092443670235ull, 16886965011508765143ull, 7100799512529341354ull}}, {{15921889258268752920ull, 15867184420836751505ull, 11885334227531180620ull, 8875999390661676693ull}}, {{3033651758776888719ull, 693618226168193883ull, 9734176901420681840ull, 5547499619163547933ull}}, {{17627122753753274611ull, 867022782710242353ull, 16779407145203240204ull, 6934374523954434916ull}}, {{8198845386909429552ull, 1083778478387802942ull, 2527514857794498639ull, 8667968154943043646ull}}, {{512592348391005566ull, 7594890576633458695ull, 15414754841403725361ull, 5417480096839402278ull}}, {{14475798490770920669ull, 14105299239219211272ull, 10045071514899880893ull, 6771850121049252848ull}}, {{18094748113463650837ull, 3796565993741850378ull, 12556339393624851117ull, 8464812651311566060ull}}, {{15920903589342169677ull, 4678696755302350438ull, 17071084157870307756ull, 5290507907069728787ull}}, {{10677757449822936288ull, 5848370944127938048ull, 16727169178910496791ull, 6613134883837160984ull}}, {{13347196812278670360ull, 2698777661732534656ull, 2462217399928569373ull, 8266418604796451231ull}}, {{8341998007674168975ull, 3992579047796528112ull, 8456414902596437714ull, 5166511627997782019ull}}, {{10427497509592711219ull, 14214095846600435948ull, 5958832609818159238ull, 6458139534997227524ull}}, {{13034371886990889024ull, 8544247771395769127ull, 7448540762272699048ull, 8072674418746534405ull}}, {{15064011457010387496ull, 5340154857122355704ull, 6961180985634130857ull, 5045421511716584003ull}}, {{383270247553432754ull, 11286879589830332535ull, 4089790213615275667ull, 6306776889645730004ull}}, {{14314145864723954654ull, 9496913468860527764ull, 5112237767019094584ull, 7883471112057162505ull}}, {{18169713202307247467ull, 5935570918037829852ull, 14724363650455403875ull, 4927169445035726565ull}}, {{4265397429174507718ull, 2807777629119899412ull, 4570396507787091132ull, 6158961806294658207ull}}, {{5331746786468134647ull, 3509722036399874265ull, 1101309616306476011ull, 7698702257868322759ull}}, {{14861556787611053915ull, 18334477337245779079ull, 7605847537832629362ull, 4811688911167701724ull}}, {{13965259966086429489ull, 13694724634702448041ull, 9507309422290786703ull, 6014611138959627155ull}}, {{3621516902325873149ull, 12506719774950672148ull, 7272450759436095475ull, 7518263923699533944ull}}, {{11486820100808446526ull, 5510856850130476140ull, 4545281724647559672ull, 4698914952312208715ull}}, {{14358525126010558158ull, 6888571062663095175ull, 1069916137382061686ull, 5873643690390260894ull}}, {{13336470389085809793ull, 17834085865183644777ull, 10560767208582352915ull, 7342054612987826117ull}}, {{2835529931075098529ull, 17680921313052168068ull, 17812645029155329048ull, 9177568266234782646ull}}, {{10995578243776712389ull, 11050575820657605042ull, 6521217124794692751ull, 5735980166396739154ull}}, {{4521100767866114678ull, 9201533757394618399ull, 17374893442848141747ull, 7169975207995923942ull}}, {{1039689941405255444ull, 6890231178315885095ull, 12495244766705401376ull, 8962469009994904928ull}}, {{7567335241019366509ull, 4306394486447428184ull, 7809527979190875860ull, 5601543131246815580ull}}, {{9459169051274208136ull, 5382993108059285230ull, 9761909973988594825ull, 7001928914058519475ull}}, {{2600589277237984361ull, 11340427403501494442ull, 7590701449058355627ull, 8752411142573149344ull}}, {{6237054316701128130ull, 4781924117974740074ull, 4744188405661472267ull, 5470256964108218340ull}}, {{17019689932731185970ull, 1365719129041037188ull, 5930235507076840334ull, 6837821205135272925ull}}, {{2827868342204430847ull, 10930520948156072294ull, 12024480402273438321ull, 8547276506419091156ull}}, {{15602475769159932991ull, 18360790638666014943ull, 16738672288275674758ull, 5342047816511931972ull}}, {{14891408693022528335ull, 13727616261477742871ull, 2476596286635041832ull, 6677559770639914966ull}}, {{14002574847850772515ull, 17159520326847178589ull, 12319117395148578098ull, 8346949713299893707ull}}, {{11057452289120426774ull, 15336386222706874522ull, 5393605362754167359ull, 5216843570812433567ull}}, {{4598443324545757659ull, 14558796759956205249ull, 2130320685015321295ull, 6521054463515541959ull}}, {{10359740174109584978ull, 13586809931517868657ull, 16497958911551315331ull, 8151318079394427448ull}}, {{18004052654886960371ull, 6185913197984973958ull, 10311224319719572082ull, 5094573799621517155ull}}, {{13281693781753924656ull, 16955763534335993256ull, 8277344381222077198ull, 6368217249526896444ull}}, {{16602117227192405820ull, 11971332381065215762ull, 10346680476527596498ull, 7960271561908620555ull}}, {{14988009285422641542ull, 12093768756593147755ull, 4160832288616053859ull, 4975169726192887847ull}}, {{14123325588350914023ull, 10505524927314046790ull, 589354342342679420ull, 6218962157741109809ull}}, {{8430784948583866721ull, 13131906159142558488ull, 5348378946355737179ull, 7773702697176387261ull}}, {{5269240592864916701ull, 5901598340250405103ull, 5648579850686029689ull, 4858564185735242038ull}}, {{1974864722653757972ull, 11988683943740394283ull, 16284096850212312919ull, 6073205232169052547ull}}, {{16303638958599361176ull, 10374168911248104949ull, 15743435044338003245ull, 7591506540211315684ull}}, {{12495617358338294687ull, 8789698578743759545ull, 616274865856476220ull, 4744691587632072303ull}}, {{1784463642640704647ull, 10987123223429699432ull, 14605401637602758987ull, 5930864484540090378ull}}, {{2230579553300880809ull, 9122218010859736386ull, 9033380010148672926ull, 7413580605675112973ull}}, {{6005798239240438410ull, 1089700238359947337ull, 7951705515556614531ull, 4633487878546945608ull}}, {{12118933817477935916ull, 15197183353232097883ull, 9939631894445768163ull, 5791859848183682010ull}}, {{10536981253420031991ull, 14384793173112734450ull, 3201167831202434396ull, 7239824810229602513ull}}, {{3947854529920264181ull, 17980991466390918063ull, 8613145807430430899ull, 9049781012787003141ull}}, {{9384938108841246969ull, 8932276657280629837ull, 7689059138857713264ull, 5656113132991876963ull}}, {{16342858654478946615ull, 11165345821600787296ull, 4999637905144753676ull, 7070141416239846204ull}}, {{1981829244389131653ull, 13956682277000984121ull, 6249547381430942095ull, 8837676770299807755ull}}, {{12767858323811677043ull, 15640455450766696931ull, 1600124104180644857ull, 5523547981437379847ull}}, {{11348136886337208400ull, 5715511258176207452ull, 15835213185507969784ull, 6904434976796724808ull}}, {{14185171107921510500ull, 7144389072720259315ull, 1347272408175410614ull, 8630543720995906011ull}}, {{6559888933237250111ull, 18300301225732325784ull, 16982946319605489297ull, 5394089825622441256ull}}, {{8199861166546562638ull, 9040318476883243518ull, 2781938825797310006ull, 6742612282028051571ull}}, {{1026454421328427489ull, 2077026059249278590ull, 17312481587528801220ull, 8428265352535064463ull}}, {{14476592068612430893ull, 10521513323885574926ull, 17737830019846582618ull, 5267665845334415289ull}}, {{8872368048910762808ull, 3928519618002192850ull, 8337229469526064561ull, 6584582306668019112ull}}, {{1867088024283677702ull, 9522335540930128967ull, 10421536836907580701ull, 8230727883335023890ull}}, {{8084459042818380420ull, 8257302722295024556ull, 11125146541494625842ull, 5144204927084389931ull}}, {{10105573803522975525ull, 1098256366014004887ull, 9294747158440894399ull, 6430256158855487414ull}}, {{8020281235976331502ull, 15207878512799669821ull, 2395061911196342190ull, 8037820198569359268ull}}, {{7318518781698901141ull, 4893238052072405734ull, 10720285731352489677ull, 5023637624105849542ull}}, {{18371520513978402234ull, 10728233583517895071ull, 4176985127335836288ull, 6279547030132311928ull}}, {{18352714624045614888ull, 13410291979397368839ull, 5221231409169795360ull, 7849433787665389910ull}}, {{18387975667669591161ull, 8381432487123355524ull, 17098327686013285812ull, 4905896117290868693ull}}, {{4538225510877437336ull, 10476790608904194406ull, 7537851552234443553ull, 6132370146613585867ull}}, {{14896153925451572478ull, 17707674279557630911ull, 4810628421865666537ull, 7665462683266982334ull}}, {{16227625231048314655ull, 4149767397082437463ull, 16841700818948205298ull, 4790914177041863958ull}}, {{15672845520383005414ull, 14410581283207822637ull, 11828753986830480814ull, 5988642721302329948ull}}, {{5755998845196593056ull, 8789854567155002489ull, 14785942483538101018ull, 7485803401627912435ull}}, {{15126714324316340420ull, 10105345122899264459ull, 6935371042997619184ull, 4678627126017445272ull}}, {{14296706886968037621ull, 12631681403624080574ull, 8669213803747023980ull, 5848283907521806590ull}}, {{8647511571855271218ull, 15789601754530100718ull, 1613145217829004167ull, 7310354884402258238ull}}, {{1586017427964313214ull, 15125316174735237994ull, 11239803559141031017ull, 9137943605502822797ull}}, {{5602946910905083663ull, 2535793581568441890ull, 9330720233676838338ull, 5711214753439264248ull}}, {{16227055675486130387ull, 12393114013815328170ull, 11663400292096047922ull, 7139018441799080310ull}}, {{11060447557502887175ull, 6268020480414384405ull, 5355878328265284095ull, 8923773052248850388ull}}, {{9218622732652998437ull, 10835041827900072109ull, 12570795992020578367ull, 5577358157655531492ull}}, {{16134964434243635950ull, 8932116266447702232ull, 15713494990025722959ull, 6971697697069414365ull}}, {{1721961469094993321ull, 6553459314632239887ull, 5806810682249989987ull, 8714622121336767957ull}}, {{7993754945825452682ull, 1790069062431455977ull, 5935099685619937694ull, 5446638825835479973ull}}, {{14603879700709203756ull, 11460958364894095779ull, 12030560625452310021ull, 6808298532294349966ull}}, {{13643163607459116791ull, 491139900835456012ull, 5814828744960611719ull, 8510373165367937458ull}}, {{17750349291516723803ull, 7224491465663241863ull, 8245953984027770228ull, 5318983228354960911ull}}, {{17576250595968516849ull, 9030614332079052329ull, 5695756461607324881ull, 6648729035443701139ull}}, {{8135255189678482349ull, 15899953933526203316ull, 2508009558581768197ull, 8310911294304626424ull}}, {{14307906530403827277ull, 12243314217667571024ull, 1567505974113605123ull, 5194319558940391515ull}}, {{17884883163004784096ull, 10692456753657075876ull, 15794440522924170116ull, 6492899448675489393ull}}, {{3909359880046428503ull, 13365570942071344846ull, 5907992598373048933ull, 8116124310844361742ull}}, {{16278407980311181527ull, 10659324848008284480ull, 17527553429265319295ull, 5072577694277726088ull}}, {{1901265901679425292ull, 8712470041582967697ull, 3462697712872097503ull, 6340722117847157611ull}}, {{6988268395526669519ull, 6278901533551321717ull, 18163430196372285591ull, 7925902647308947013ull}}, {{6673510756417862402ull, 10841842486110657929ull, 13657986881946372446ull, 4953689154568091883ull}}, {{12953574463949715906ull, 4328931070783546603ull, 12460797584005577654ull, 6192111443210114854ull}}, {{11580282061509756978ull, 14634535875334209062ull, 6352624943152196259ull, 7740139304012643568ull}}, {{2625990270016210208ull, 6840741912870186712ull, 3970390589470122662ull, 4837587065007902230ull}}, {{3282487837520262760ull, 17774299427942509198ull, 14186360273692429135ull, 6046983831259877787ull}}, {{13326481833755104257ull, 17606188266500748593ull, 13121264323688148515ull, 7558729789074847234ull}}, {{1411522118455858305ull, 8698024657349273919ull, 12812476220732480726ull, 4724206118171779521ull}}, {{15599460703351986593ull, 1649158784831816590ull, 2180537220633437196ull, 5905257647714724402ull}}, {{10275953842335207433ull, 2061448481039770738ull, 11949043562646572303ull, 7381572059643405502ull}}, {{11034157169886892550ull, 8205934328290938567ull, 2856466208226719785ull, 4613482537277128439ull}}, {{9181010443931227783ull, 14869103928791061113ull, 17405640815565563443ull, 5766853171596410548ull}}, {{16087949073341422633ull, 13974693892561438487ull, 3310306945747402688ull, 7208566464495513186ull}}, {{15498250323249390387ull, 17468367365701798109ull, 13361255719039029168ull, 9010708080619391482ull}}, {{11992249461244562944ull, 10917729603563623818ull, 12962470842826781134ull, 5631692550387119676ull}}, {{5766939789700927872ull, 4423789967599753965ull, 16203088553533476418ull, 7039615687983899595ull}}, {{11820360755553547744ull, 14753109496354468264ull, 15642174673489457618ull, 8799519609979874494ull}}, {{7387725472220967340ull, 13832379453648930569ull, 5164673152503523107ull, 5499699756237421559ull}}, {{13846342858703597079ull, 12678788298633775307ull, 1844155422202015980ull, 6874624695296776949ull}}, {{12696242554952108445ull, 15848485373292219134ull, 6916880296179907879ull, 8593280869120971186ull}}, {{3323465578417679874ull, 16822832385948718815ull, 8934736203539830328ull, 5370800543200606991ull}}, {{17989390028304263555ull, 2581796408726346902ull, 6556734235997400007ull, 6713500679000758739ull}}, {{13263365498525553635ull, 17062303566190097340ull, 3584231776569362104ull, 8391875848750948424ull}}, {{17512975473433246830ull, 10663939728868810837ull, 2240144860355851315ull, 5244922405469342765ull}}, {{8056161286509394826ull, 8718238642658625643ull, 7411867093872202048ull, 6556153006836678456ull}}, {{5458515589709355628ull, 10897798303323282054ull, 9264833867340252560ull, 8195191258545848070ull}}, {{17246630298850510980ull, 6811123939577051283ull, 1178835148660269946ull, 5121994536591155044ull}}, {{16946601855135750820ull, 17737276961326089912ull, 1473543935825337432ull, 6402493170738943805ull}}, {{2736508245210136909ull, 3724852127948060775ull, 6453615938209059695ull, 8003116463423679756ull}}, {{8627846680897417424ull, 9245561607608619840ull, 13256881998235438117ull, 5001947789639799847ull}}, {{10784808351121771780ull, 16168638027938162704ull, 11959416479366909742ull, 6252434737049749809ull}}, {{13481010438902214725ull, 10987425498067927572ull, 1114212543926473466ull, 7815543421312187262ull}}, {{17649003561168660012ull, 11478826954719842636ull, 14531440895236209628ull, 4884714638320117038ull}}, {{3614510377751273398ull, 14348533693399803296ull, 8940929082190486227ull, 6105893297900146298ull}}, {{4518137972189091748ull, 13323981098322366216ull, 1952789315883331976ull, 7632366622375182873ull}}, {{2823836232618182343ull, 8327488186451478885ull, 12749708368495552245ull, 4770229138984489295ull}}, {{8141481309200115832ull, 15021046251491736510ull, 11325449442192052402ull, 5962786423730611619ull}}, {{953479599645368982ull, 9552935777509894830ull, 9545125784312677599ull, 7453483029663264524ull}}, {{14430982805060519326ull, 12888113888584766124ull, 15189075652050199307ull, 4658426893539540327ull}}, {{18038728506325649157ull, 11498456342303569751ull, 14374658546635361230ull, 5823033616924425409ull}}, {{17936724614479673543ull, 5149698391024686381ull, 4133265128012037826ull, 7278792021155531762ull}}, {{8585847712817428216ull, 15660495025635633785ull, 14389953446869823090ull, 9098490026444414702ull}}, {{16895369866579362395ull, 14399495409449659019ull, 4382034885866251527ull, 5686556266527759189ull}}, {{16507526314796815090ull, 13387683243384685870ull, 10089229625760202313ull, 7108195333159698986ull}}, {{11411035856641243054ull, 2899545998948693626ull, 3388164995345477084ull, 8885244166449623733ull}}, {{11743583428828164813ull, 11035588286197709324ull, 4423446131304617129ull, 5553277604031014833ull}}, {{14679479286035206016ull, 18406171376174524559ull, 10140993682558159315ull, 6941597005038768541ull}}, {{13737663089116619616ull, 18396028201790767795ull, 17287928121625087048ull, 8676996256298460676ull}}, {{6280196421484193308ull, 11497517626119229872ull, 1581583039160903597ull, 5423122660186537923ull}}, {{7850245526855241635ull, 536838977366873628ull, 15812036854233293209ull, 6778903325233172403ull}}, {{9812806908569052044ull, 5282734740135979939ull, 15153360049364228607ull, 8473629156541465504ull}}, {{3827161308641963576ull, 10219238240226069318ull, 9470850030852642879ull, 5296018222838415940ull}}, {{14007323672657230277ull, 8162361781855198743ull, 11838562538565803599ull, 6620022778548019925ull}}, {{12897468572394149943ull, 5591266208891610525ull, 963145117925090787ull, 8275028473185024907ull}}, {{10366760866960037666ull, 1188698371343562626ull, 16742866763199039406ull, 5171892795740640566ull}}, {{3735079046845271275ull, 10709245001034229091ull, 11705211417144023449ull, 6464865994675800708ull}}, {{57162790129201189ull, 17998242269720174268ull, 14631514271430029311ull, 8081082493344750885ull}}, {{9259098780685526552ull, 18166430446216190773ull, 11450539428857462271ull, 5050676558340469303ull}}, {{16185559494284296093ull, 18096352039342850562ull, 9701488267644439935ull, 6313345697925586629ull}}, {{11008577331000594309ull, 18008754030751175299ull, 16738546352982937823ull, 7891682122406983286ull}}, {{4574517822661677491ull, 18173000296860566418ull, 5849905452186948235ull, 4932301326504364554ull}}, {{14941519315181872672ull, 18104564352648320118ull, 16535753852088461102ull, 6165376658130455692ull}}, {{9453527107122565031ull, 13407333403955624340ull, 2222948241401024762ull, 7706720822663069616ull}}, {{15131826478806378953ull, 12991269395899653116ull, 1389342650875640476ull, 4816700514164418510ull}}, {{468039024798422075ull, 16239086744874566396ull, 10960050350449326403ull, 6020875642705523137ull}}, {{585048780998027594ull, 15687172412665820091ull, 18311748956489045908ull, 7526094553381903921ull}}, {{16506556552619624910ull, 581110721061361748ull, 4527314070164571837ull, 4703809095863689951ull}}, {{2186451617064979522ull, 5338074419754090090ull, 1047456569278326892ull, 5879761369829612439ull}}, {{11956436558186000210ull, 6672593024692612612ull, 15144378766880072327ull, 7349701712287015548ull}}, {{14945545697732500262ull, 3729055262438377861ull, 483729384890538793ull, 9187127140358769436ull}}, {{11646809070296506616ull, 13859874585092455923ull, 9525702902411362553ull, 5741954462724230897ull}}, {{9946825319443245366ull, 3489785176083406192ull, 16518814646441591096ull, 7177443078405288621ull}}, {{12433531649304056707ull, 4362231470104257740ull, 6813460252769825158ull, 8971803848006610777ull}}, {{16994329317669811250ull, 16561452724097324799ull, 15787627704049610483ull, 5607377405004131735ull}}, {{16631225628659876159ull, 16090129886694268095ull, 15122848611634625200ull, 7009221756255164669ull}}, {{16177346017397457294ull, 1665918284658283503ull, 5068502709261117789ull, 8761527195318955837ull}}, {{17028370288514492665ull, 3347041937125121141ull, 5473657202501892570ull, 5475954497074347398ull}}, {{7450404805360952119ull, 13407174458261177235ull, 16065443539982141520ull, 6844943121342934247ull}}, {{4701319988273802245ull, 16758968072826471544ull, 15470118406550288996ull, 8556178901678667809ull}}, {{2938324992671126403ull, 1250983008661768907ull, 2751294976452848767ull, 5347611813549167381ull}}, {{17507964296121071716ull, 15398786816109374845ull, 8050804738993448862ull, 6684514766936459226ull}}, {{8049897314869175933ull, 10025111483281942749ull, 840133886887035270ull, 8355643458670574033ull}}, {{7337028831006928910ull, 1654008658623826314ull, 12054298725372866804ull, 5222277161669108770ull}}, {{18394658075613436946ull, 2067510823279782892ull, 5844501369861307697ull, 6527846452086385963ull}}, {{4546578520807244566ull, 7196074547527116520ull, 2693940693899246717ull, 8159808065107982454ull}}, {{2841611575504527854ull, 6803389601418141777ull, 15518770988969192910ull, 5099880040692489033ull}}, {{8163700487808047721ull, 17727609038627453029ull, 5563405680929327425ull, 6374850050865611292ull}}, {{14816311628187447555ull, 8324453243002152574ull, 6954257101161659282ull, 7968562563582014115ull}}, {{4648508749189766818ull, 9814469295303733263ull, 2040567679012343099ull, 4980351602238758822ull}}, {{1198949918059820619ull, 7656400600702278675ull, 11774081635620204682ull, 6225439502798448527ull}}, {{15333745452856939485ull, 347128714023072535ull, 10105916026097867949ull, 7781799378498060659ull}}, {{16501119935676669034ull, 2522798455478114286ull, 4010354507097473516ull, 4863624611561287912ull}}, {{11403027882741060485ull, 3153498069347642858ull, 5012943133871841895ull, 6079530764451609890ull}}, {{5030412816571549798ull, 17776930641966717285ull, 15489550954194578176ull, 7599413455564512362ull}}, {{5449851019570912576ull, 11110581651229198303ull, 14292655364798999264ull, 4749633409727820226ull}}, {{2200627756036252816ull, 13888227064036497879ull, 8642447169143973272ull, 5937041762159775283ull}}, {{16585842750327479732ull, 17360283830045622348ull, 6191372943002578686ull, 7421302202699719104ull}}, {{1142779682099899025ull, 6238491375351126064ull, 3869608089376611679ull, 4638313876687324440ull}}, {{1428474602624873781ull, 3186428200761519676ull, 4837010111720764599ull, 5797892345859155550ull}}, {{1785593253281092226ull, 17818093306234063307ull, 15269634676505731556ull, 7247365432323944437ull}}, {{16067049621883528994ull, 3825872559083027517ull, 5251985290350000734ull, 9059206790404930547ull}}, {{12347749022890899573ull, 16226228404709055910ull, 976647797255056506ull, 5662004244003081592ull}}, {{6211314241758848658ull, 11059413469031544080ull, 1220809746568820633ull, 7077505305003851990ull}}, {{7764142802198560823ull, 18435952854716818004ull, 10749384220065801599ull, 8846881631254814987ull}}, {{14075961288228876323ull, 18439999561839093108ull, 4412522128327432047ull, 5529301019534259367ull}}, {{17594951610286095403ull, 18438313433871478481ull, 903966641981902155ull, 6911626274417824209ull}}, {{8158631457575455542ull, 18436205773911960198ull, 5741644320904765598ull, 8639532843022280261ull}}, {{487458642557271810ull, 6910942590267587220ull, 5894370709779172451ull, 5399708026888925163ull}}, {{609323303196589762ull, 4026992219407096121ull, 2756277368796577660ull, 6749635033611156454ull}}, {{5373340147423125106ull, 5033740274258870151ull, 12668718747850497883ull, 8437043792013945567ull}}, {{10275866619780535048ull, 840244662198099892ull, 14835478245047643033ull, 5273152370008715979ull}}, {{12844833274725668810ull, 5661991846175012769ull, 13932661787882165887ull, 6591440462510894974ull}}, {{2220983538124922300ull, 2465803789291378058ull, 8192455197997931551ull, 8239300578138618718ull}}, {{5999800729755464342ull, 8458656395948193142ull, 508598480321319315ull, 5149562861336636699ull}}, {{16723122949049106235ull, 5961634476507853523ull, 14470806155683812856ull, 6436953576670795873ull}}, {{16292217667883994889ull, 7452043095634816904ull, 4253449639322602358ull, 8046191970838494842ull}}, {{10182636042427496806ull, 45840916344372661ull, 7270092043004014378ull, 5028869981774059276ull}}, {{17339981071461758911ull, 9280673182285241634ull, 9087615053755017972ull, 6286087477217574095ull}}, {{12451604302472422831ull, 11600841477856552043ull, 6747832798766384561ull, 7857609346521967619ull}}, {{5476409679831570318ull, 332996896019263171ull, 1911552490015296399ull, 4911005841576229762ull}}, {{2233826081362074993ull, 14251304175306242676ull, 11612812649373896306ull, 6138757301970287202ull}}, {{2792282601702593741ull, 8590758182278027537ull, 5292643774862594575ull, 7673446627462859003ull}}, {{13274391672132590848ull, 12286752891564849066ull, 1002059350075427657ull, 4795904142164286877ull}}, {{7369617553310962752ull, 1523383059173897621ull, 5864260206021672476ull, 5994880177705358596ull}}, {{13823707960066091344ull, 1904228823967372026ull, 7330325257527090595ull, 7493600222131698245ull}}, {{13251503493468694994ull, 17331044079475465180ull, 6887296295168125573ull, 4683500138832311403ull}}, {{16564379366835868743ull, 7828747044062167763ull, 3997434350532769063ull, 5854375173540389254ull}}, {{16093788190117448024ull, 5174247786650321800ull, 14220164975020737137ull, 7317968966925486567ull}}, {{1670491163937258414ull, 11079495751740290155ull, 13163520200348533517ull, 9147461208656858209ull}}, {{17184958041956644173ull, 9230527854051375298ull, 1309671097576751592ull, 5717163255410536381ull}}, {{12257825515591029408ull, 11538159817564219123ull, 6248774890398327394ull, 7146454069263170476ull}}, {{10710595876061398856ull, 5199327735100498096ull, 7810968612997909243ull, 8933067586578963095ull}}, {{6694122422538374285ull, 943736825224117358ull, 11799384410764775133ull, 5583167241611851934ull}}, {{17591025065027743665ull, 5791357049957534601ull, 5525858476601193108ull, 6978959052014814918ull}}, {{8153723276002515869ull, 7239196312446918252ull, 16130695132606267193ull, 8723698815018518647ull}}, {{14319449084356348226ull, 16053712741347793667ull, 16999213485519998851ull, 5452311759386574154ull}}, {{13287625337018047378ull, 15455454908257354180ull, 12025644820045222756ull, 6815389699233217693ull}}, {{16609531671272559223ull, 872574561612141109ull, 1196997969774364734ull, 8519237124041522117ull}}, {{12686800303759043467ull, 14380417156289751905ull, 3053966740322671910ull, 5324523202525951323ull}}, {{2023442324416640621ull, 8752149408507414074ull, 17652516480685503600ull, 6655654003157439153ull}}, {{11752674942375576584ull, 10940186760634267592ull, 8230587545574715788ull, 8319567503946798942ull}}, {{7345421838984735365ull, 16060988762251193053ull, 532431197556809463ull, 5199729689966749339ull}}, {{13793463317158307111ull, 15464549934386603412ull, 14500597052228175541ull, 6499662112458436673ull}}, {{17241829146447883888ull, 5495629362701090553ull, 4290688260003055715ull, 8124577640573045842ull}}, {{3858614188888845574ull, 1128925342474487644ull, 7293366180929297726ull, 5077861025358153651ull}}, {{4823267736111056968ull, 10634528714947885363ull, 4505021707734234253ull, 6347326281697692064ull}}, {{1417398651711433305ull, 17904846912112244608ull, 5631277134667792816ull, 7934157852122115080ull}}, {{885874157319645816ull, 11190529320070152880ull, 3519548209167370510ull, 4958848657576321925ull}}, {{1107342696649557270ull, 4764789613232915292ull, 9011121279886601042ull, 6198560821970402406ull}}, {{1384178370811946587ull, 15179359053395919923ull, 2040529563003475494ull, 7748201027463003008ull}}, {{17006012546253324281ull, 4875413389945062047ull, 1275330976877172184ull, 4842625642164376880ull}}, {{16645829664389267447ull, 6094266737431327559ull, 1594163721096465230ull, 6053282052705471100ull}}, {{16195601062059196405ull, 16841205458643935257ull, 1992704651370581537ull, 7566602565881838875ull}}, {{3204721636145915897ull, 3608224384011377680ull, 17386341471602471125ull, 4729126603676149296ull}}, {{4005902045182394872ull, 9121966498441610004ull, 3286182765793537290ull, 5911408254595186621ull}}, {{5007377556477993589ull, 2179086086197236697ull, 8719414475669309517ull, 7389260318243983276ull}}, {{14658826018867215754ull, 3667771813086966887ull, 14673006084148094256ull, 4618287698902489547ull}}, {{13711846505156631788ull, 4584714766358708609ull, 13729571586757729916ull, 5772859623628111934ull}}, {{3304750076163626023ull, 5730893457948385762ull, 7938592446592386587ull, 7216074529535139918ull}}, {{13354309632059308336ull, 2551930804008094298ull, 699868521385707426ull, 9020093161918924898ull}}, {{12958129538464455614ull, 6206642770932446840ull, 5049103844293455045ull, 5637558226199328061ull}}, {{16197661923080569518ull, 12369989482092946454ull, 10923065823794206710ull, 7046947782749160076ull}}, {{11023705366995936089ull, 6239114815761407260ull, 13653832279742758388ull, 8808684728436450095ull}}, {{16113187891227235864ull, 13122818796705655345ull, 15451174202480305848ull, 5505427955272781309ull}}, {{6306426808751881118ull, 16403523495882069182ull, 5478909697818218598ull, 6881784944090976637ull}}, {{17106405547794627205ull, 11281032332997810669ull, 11460323140700161152ull, 8602231180113720796ull}}, {{12997346476585335955ull, 7050645208123631668ull, 16386073999792376528ull, 5376394487571075497ull}}, {{16246683095731669944ull, 8813306510154539585ull, 6647534444458306948ull, 6720493109463844372ull}}, {{6473295814382423718ull, 11016633137693174482ull, 8309418055572883685ull, 8400616386829805465ull}}, {{8657495902416402728ull, 9191238720271928003ull, 16722601330801522063ull, 5250385241768628415ull}}, {{6210183859593115506ull, 6877362381912522100ull, 16291565645074514675ull, 6562981552210785519ull}}, {{7762729824491394382ull, 3985016958963264721ull, 15752771037915755440ull, 8203726940263481899ull}}, {{16380921186375591249ull, 2490635599352040450ull, 7539638889483653198ull, 5127329337664676187ull}}, {{11252779446114713253ull, 12336666536044826371ull, 4812862593427178593ull, 6409161672080845234ull}}, {{9454288289216003662ull, 1585775114773869252ull, 15239450278638749050ull, 8011452090101056542ull}}, {{15132302217614778097ull, 5602795465161056186ull, 4912970405721830252ull, 5007157556313160339ull}}, {{9692005735163696813ull, 7003494331451320233ull, 1529526988724899911ull, 6258946945391450424ull}}, {{16726693187382008920ull, 4142681895886762387ull, 1911908735906124889ull, 7823683681739313030ull}}, {{8148340232900061623ull, 14118391230997696252ull, 15030001015223491767ull, 4889802301087070643ull}}, {{10185425291125077029ull, 13036303020319732411ull, 14175815250601976805ull, 6112252876358838304ull}}, {{8120095595478958382ull, 2460320720117501802ull, 17719769063252471007ull, 7640316095448547880ull}}, {{9686745765601736893ull, 8455229477714520482ull, 11074855664532794379ull, 4775197559655342425ull}}, {{2885060170147395308ull, 5957350828715762699ull, 8511525383829262ull, 5968996949569178032ull}}, {{17441383267966407847ull, 16670060572749479181ull, 10639406729786577ull, 7461246186961472540ull}}, {{13206707551692698857ull, 3501258830327342632ull, 9230021666060892419ull, 4663278866850920337ull}}, {{16508384439615873571ull, 18211631593191342002ull, 16149213101003503427ull, 5829098583563650421ull}}, {{11412108512665066155ull, 18152853473061789599ull, 6351458320972215572ull, 7286373229454563027ull}}, {{9653449622403944790ull, 4244322767617685383ull, 3327636882787881562ull, 9107966536818203784ull}}, {{12950935041643547350ull, 7264387748188441268ull, 2079773051742425976ull, 5692479085511377365ull}}, {{16188668802054434187ull, 9080484685235551585ull, 7211402333105420374ull, 7115598856889221706ull}}, {{6400777947285879022ull, 2127233819689663674ull, 18237624953236551276ull, 8894498571111527132ull}}, {{8612172235481062293ull, 10552893174160815604ull, 2175143558918068739ull, 5559061606944704458ull}}, {{10765215294351327866ull, 8579430449273631601ull, 11942301485502361732ull, 6948827008680880572ull}}, {{18068205136366547737ull, 10724288061592039501ull, 14927876856877952165ull, 8686033760851100715ull}}, {{13598471219442786288ull, 9008523047708718640ull, 7024080026335026151ull, 5428771100531937947ull}}, {{16998089024303482859ull, 6648967791208510396ull, 4168414014491394785ull, 6785963875664922434ull}}, {{2800867206669801958ull, 12922895757438025900ull, 14433889554969019289ull, 8482454844581153042ull}}, {{10973914041023402032ull, 1159280820757684331ull, 13632866990283024960ull, 5301534277863220651ull}}, {{9105706532851864636ull, 1449101025947105414ull, 12429397719426393296ull, 6626917847329025814ull}}, {{2158761129210054987ull, 1811376282433881768ull, 6313375112428215812ull, 8283647309161282268ull}}, {{1349225705756284367ull, 10355482213375951913ull, 13169231482122410690ull, 5177279568225801417ull}}, {{6298218150622743362ull, 3720980729865164083ull, 2626481297370849651ull, 6471599460282251772ull}}, {{3261086669851041299ull, 39539893904067200ull, 3283101621713562064ull, 8089499325352814715ull}}, {{2038179168656900812ull, 24712433690042000ull, 18192839578066833954ull, 5055937078345509196ull}}, {{2547723960821126015ull, 9254262578967328308ull, 4294305398873990826ull, 6319921347931886496ull}}, {{3184654951026407518ull, 2344456186854384577ull, 5367881748592488533ull, 7899901684914858120ull}}, {{13519624390459974459ull, 3771128125997684312ull, 3354926092870305333ull, 4937438553071786325ull}}, {{16899530488074968074ull, 9325596175924493294ull, 8805343634515269570ull, 6171798191339732906ull}}, {{11901041073238934284ull, 2433623183050840810ull, 1783307506289311155ull, 7714747739174666133ull}}, {{12049836689201721832ull, 17661915553902633170ull, 3420410200644513423ull, 4821717336984166333ull}}, {{5838923824647376482ull, 17465708423950903559ull, 8887198769233029683ull, 6027146671230207916ull}}, {{2686968762381832698ull, 17220449511511241545ull, 11108998461541287104ull, 7533933339037759895ull}}, {{13208570522557115196ull, 10762780944694525965ull, 13860653066104386296ull, 4708708336898599934ull}}, {{2675655097914230283ull, 13453476180868157457ull, 8102444295775707062ull, 5885885421123249918ull}}, {{7956254890820175758ull, 7593473189230421013ull, 904683332864858020ull, 7357356776404062398ull}}, {{14557004631952607602ull, 9491841486538026266ull, 10354226202935848333ull, 9196695970505077997ull}}, {{13709813913397767655ull, 8238243938299960368ull, 8777234386048599160ull, 5747934981565673748ull}}, {{17137267391747209569ull, 10297804922874950460ull, 10971542982560748950ull, 7184918726957092185ull}}, {{2974840165974460345ull, 3648884116738912268ull, 18326114746628324092ull, 8981148408696365231ull}}, {{11082647140588813524ull, 11503924609816595975ull, 18371350744283784413ull, 5613217755435228269ull}}, {{9241622907308629001ull, 544847706988581257ull, 9129130375072566805ull, 7016522194294035337ull}}, {{16163714652563174155ull, 5292745652163114475ull, 16023098987268096410ull, 8770652742867544171ull}}, {{7796478648638289895ull, 7919652051029334451ull, 7708593857828866304ull, 5481657964292215107ull}}, {{5133912292370474464ull, 9899565063786668064ull, 5024056303858694976ull, 6852072455365268884ull}}, {{6417390365463093080ull, 12374456329733335080ull, 6280070379823368720ull, 8565090569206586105ull}}, {{4010868978414433175ull, 7734035206083334425ull, 15454259033458075210ull, 5353181605754116315ull}}, {{9625272241445429373ull, 444171970749392223ull, 14706137773395206109ull, 6691477007192645394ull}}, {{7419904283379398812ull, 5166900981864128183ull, 9159300179889231828ull, 8364346258990806743ull}}, {{11554969204753206114ull, 12452685150519855922ull, 12642091640071851748ull, 5227716411869254214ull}}, {{5220339469086731834ull, 15565856438149819903ull, 6579242513235038877ull, 6534645514836567768ull}}, {{1913738317931026889ull, 5622262492405111167ull, 8224053141543798597ull, 8168306893545709710ull}}, {{8113615476347973662ull, 5819757066966888431ull, 528347195037486219ull, 5105191808466068569ull}}, {{5530333327007579173ull, 2663010315281222635ull, 5272120012224245678ull, 6381489760582585711ull}}, {{2301230640332086062ull, 12552134930956304102ull, 1978463996852919193ull, 7976862200728232139ull}}, {{15273327205489717501ull, 927555304206608207ull, 17377441062528932160ull, 4985538875455145086ull}}, {{14479972988434758972ull, 1159444130258260259ull, 12498429291306389392ull, 6231923594318931358ull}}, {{13488280217116060811ull, 1449305162822825324ull, 6399664577278210932ull, 7789904492898664198ull}}, {{17653547172552313815ull, 10129187763619041635ull, 17834848416081045544ull, 4868690308061665123ull}}, {{17455247947263004365ull, 12661484704523802044ull, 17681874501673919026ull, 6085862885077081404ull}}, {{3372315860369203840ull, 6603483843799976748ull, 3655599053382847167ull, 7607328606346351756ull}}, {{11331069449585528208ull, 11044706430016067323ull, 11508121445219055287ull, 4754580378966469847ull}}, {{9552150793554522356ull, 9194197019092696250ull, 9773465788096431205ull, 5943225473708087309ull}}, {{2716816455088377137ull, 16104432292293258217ull, 16828518253547926910ull, 7429031842135109136ull}}, {{13227225330498705471ull, 5453584164255898481ull, 10517823908467454319ull, 4643144901334443210ull}}, {{2698973607841218126ull, 2205294186892485198ull, 3923907848729542091ull, 5803931126668054013ull}}, {{12597089046656298466ull, 16591675788897770209ull, 9516570829339315517ull, 7254913908335067516ull}}, {{1911303253038209370ull, 6904536680840049050ull, 11895713536674144397ull, 9068642385418834395ull}}, {{5806250551576268760ull, 6621178434738724608ull, 5128977951207646296ull, 5667901490886771497ull}}, {{7257813189470335950ull, 8276473043423405760ull, 11022908457436945774ull, 7084876863608464371ull}}, {{9072266486837919938ull, 1122219267424481392ull, 9166949553368794314ull, 8856096079510580464ull}}, {{5670166554273699961ull, 5313073060567688774ull, 5729343470855496446ull, 5535060049694112790ull}}, {{16311080229696900759ull, 15864713362564386775ull, 16385051375424146365ull, 6918825062117640987ull}}, {{15777164268693738045ull, 5995833647923319757ull, 15869628200852795053ull, 8648531327647051234ull}}, {{12166570677147280230ull, 6053239039165768800ull, 14530203643960384812ull, 5405332079779407021ull}}, {{15208213346434100288ull, 7566548798957211000ull, 4327696499668317303ull, 6756665099724258777ull}}, {{563522609333073744ull, 4846499980269125847ull, 10021306643012784533ull, 8445831374655323471ull}}, {{7269730658474252946ull, 5334905496881897606ull, 13180845679524072189ull, 5278644609159577169ull}}, {{18310535359947591990ull, 11280317889529759911ull, 2640999044122926524ull, 6598305761449471462ull}}, {{18276483181507102084ull, 14100397361912199889ull, 12524620842008433963ull, 8247882201811839327ull}}, {{4505272960800856947ull, 6506905341981430979ull, 14745417053896353083ull, 5154926376132399579ull}}, {{1019905182573683279ull, 3521945659049400820ull, 13820085298943053450ull, 6443657970165499474ull}}, {{1274881478217104099ull, 13625804110666526833ull, 8051734586824041004ull, 8054572462706874343ull}}, {{12326015969954159822ull, 17739499606021355078ull, 11949863144406107483ull, 5034107789191796464ull}}, {{6184147925587923969ull, 17562688489099305944ull, 14937328930507634354ull, 6292634736489745580ull}}, {{7730184906984904961ull, 12729988574519356622ull, 224917089424991327ull, 7865793420612181976ull}}, {{219679548438177697ull, 14873771886715679745ull, 140573180890619579ull, 4916120887882613735ull}}, {{4886285453975110025ull, 13980528839967211777ull, 14010774531395438186ull, 6145151109853267168ull}}, {{10719542835896275435ull, 8252289013104238913ull, 17513468164244297733ull, 7681438887316583960ull}}, {{18228929318503641907ull, 7463523642403843272ull, 10945917602652686083ull, 4800899304572864975ull}}, {{4339417574420000768ull, 4717718534577416187ull, 9070710984888469700ull, 6001124130716081219ull}}, {{812585949597613056ull, 5897148168221770234ull, 6726702712683199221ull, 7501405163395101524ull}}, {{5119552236925896064ull, 5991560614352300348ull, 13427561232281775321ull, 4688378227121938452ull}}, {{6399440296157370080ull, 12101136786367763339ull, 16784451540352219151ull, 5860472783902423065ull}}, {{3387614351769324696ull, 10514734964532316270ull, 7145506370158110227ull, 7325590979878028832ull}}, {{13457889976566431678ull, 8531732687238007433ull, 8931882962697637784ull, 9156988724847536040ull}}, {{1493652207712937943ull, 5332332929523754646ull, 5582426851686023615ull, 5723117953029710025ull}}, {{11090437296495948236ull, 2053730143477305403ull, 11589719583034917423ull, 7153897441287137531ull}}, {{9251360602192547391ull, 16402220734628795466ull, 9875463460366258874ull, 8942371801608921914ull}}, {{10393786394797730024ull, 14863073977570385070ull, 10783850681156299700ull, 5588982376005576196ull}}, {{3768860956642386722ull, 132098398253429722ull, 13479813351445374626ull, 6986227970006970245ull}}, {{13934448232657759210ull, 9388495034671562960ull, 3014708634024554570ull, 8732784962508712807ull}}, {{8709030145411099506ull, 10479495415097114754ull, 8801721923906428462ull, 5457990601567945504ull}}, {{1662915644909098575ull, 3875997232016617635ull, 11002152404883035578ull, 6822488251959931880ull}}, {{15913702611418536930ull, 14068368576875547851ull, 13752690506103794472ull, 8528110314949914850ull}}, {{7640221122922891630ull, 8792730360547217407ull, 13207117584742259449ull, 5330068946843696781ull}}, {{4938590385226226633ull, 15602598969111409663ull, 2673838925645660599ull, 6662586183554620977ull}}, {{1561551963105395387ull, 14891562692961874175ull, 7953984675484463653ull, 8328232729443276221ull}}, {{7893499004581953973ull, 11613069692314865311ull, 7277083431391483735ull, 5205145455902047638ull}}, {{5255187737300054562ull, 9904651096966193735ull, 18319726326094130477ull, 6506431819877559547ull}}, {{1957298653197680299ull, 16992499889635130073ull, 18287971889190275192ull, 8133039774846949434ull}}, {{12752526704317019947ull, 10620312431021956295ull, 16041668449171309899ull, 5083149859279343396ull}}, {{11328972361968887030ull, 8663704520350057465ull, 1605341487754585758ull, 6353937324099179246ull}}, {{326157397178945075ull, 1606258613582796024ull, 11230048896548008006ull, 7942421655123974057ull}}, {{203848373236840672ull, 14838969688771411227ull, 101251532701423147ull, 4964013534452483786ull}}, {{14089868521828214552ull, 13937026092536876129ull, 9349936452731554742ull, 6205016918065604732ull}}, {{3777277597003104478ull, 8197910578816319354ull, 11687420565914443428ull, 7756271147582005915ull}}, {{6972484516554328203ull, 14347066148614975404ull, 4998794844482833190ull, 4847669467238753697ull}}, {{8715605645692910253ull, 8710460648913943447ull, 10860179574030929392ull, 6059586834048442121ull}}, {{6282821038688749912ull, 10888075811142429309ull, 18186910485966049644ull, 7574483542560552651ull}}, {{6232606158394162647ull, 16028419418818794126ull, 9060976044515087075ull, 4734052214100345407ull}}, {{17014129734847479117ull, 15423838255096104753ull, 6714534037216470940ull, 5917565267625431759ull}}, {{7432604113277185184ull, 833053745160579326ull, 3781481528093200772ull, 7396956584531789699ull}}, {{33691552370852836ull, 9744030627580137887ull, 57582945844556530ull, 4623097865332368562ull}}, {{13877172495745729757ull, 2956666247620396550ull, 9295350719160471471ull, 5778872331665460702ull}}, {{8123093582827386389ull, 17530890864807659400ull, 2395816362095813530ull, 7223590414581825878ull}}, {{10153866978534232986ull, 12690241544154798442ull, 12218142489474542721ull, 9029488018227282347ull}}, {{10957852880011283520ull, 1013871937455667170ull, 5330496046707895249ull, 5643430011392051467ull}}, {{4473944063159328592ull, 5879025940246971867ull, 2051434039957481157ull, 7054287514240064334ull}}, {{980744060521772836ull, 11960468443736102738ull, 11787664586801627254ull, 8817859392800080417ull}}, {{5224651056253495927ull, 2863606758907676307ull, 449761339109935178ull, 5511162120500050261ull}}, {{1919127801889482004ull, 12802880485489371192ull, 5173887692314806876ull, 6888952650625062826ull}}, {{2398909752361852505ull, 16003600606861713990ull, 15690731652248284403ull, 8611190813281328532ull}}, {{15334376650508321528ull, 7696407370074877291ull, 583335245800401944ull, 5381994258300830333ull}}, {{14556284794708014006ull, 9620509212593596614ull, 5340855075677890334ull, 6727492822876037916ull}}, {{8971983956530241699ull, 2802264478887219960ull, 6676068844597362918ull, 8409366028595047395ull}}, {{5607489972831401062ull, 15586473354586676187ull, 1866700018659657871ull, 5255853767871904622ull}}, {{2397676447611863424ull, 14871405674805957330ull, 11556747060179348147ull, 6569817209839880777ull}}, {{12220467596369605087ull, 13977571075080058758ull, 610875769942021472ull, 8212271512299850972ull}}, {{3026106229303615276ull, 8735981921925036724ull, 9605169393068539228ull, 5132669695187406857ull}}, {{3782632786629519095ull, 10919977402406295905ull, 16618147759763061939ull, 6415837118984258571ull}}, {{9339977001714286772ull, 9038285734580481977ull, 16160998681276439520ull, 8019796398730323214ull}}, {{17366700672139898993ull, 5648928584112801235ull, 5488938157370386796ull, 5012372749206452009ull}}, {{17096689821747485837ull, 7061160730141001544ull, 11472858715140371399ull, 6265465936508065011ull}}, {{2924118203474805680ull, 4214764894248864027ull, 9729387375498076345ull, 7831832420635081264ull}}, {{17968474941667611214ull, 14163443104974009776ull, 6080867109686297715ull, 4894895262896925790ull}}, {{4013849603374962402ull, 13092617862790124317ull, 16824455923962647952ull, 6118619078621157237ull}}, {{9628998022646090906ull, 16365772328487655396ull, 7195511849671146228ull, 7648273848276446547ull}}, {{15241495801008582624ull, 1005235668450008814ull, 2191351896830772441ull, 4780171155172779092ull}}, {{9828497714405952472ull, 5868230603989898922ull, 2739189871038465551ull, 5975213943965973865ull}}, {{3062250106152664782ull, 2723602236559985749ull, 8035673357225469843ull, 7469017429957467331ull}}, {{4219749325559109441ull, 17843152462345848757ull, 2716452839052224699ull, 4668135893723417082ull}}, {{9886372675376274705ull, 17692254559504923042ull, 12618938085670056682ull, 5835169867154271352ull}}, {{3134593807365567573ull, 12891946162526377995ull, 15773672607087570853ull, 7293962333942839190ull}}, {{17753300314489123179ull, 2279874647875808781ull, 10493718722004687759ull, 9117452917428548988ull}}, {{13401655705769395939ull, 8342450682563462344ull, 15781946238107705657ull, 5698408073392843117ull}}, {{16752069632211744923ull, 15039749371631715834ull, 5892374742352468359ull, 7123010091741053897ull}}, {{11716715003409905346ull, 14188000696112256889ull, 11977154446367973353ull, 8903762614676317371ull}}, {{405417849490108986ull, 1949971407429078700ull, 5179878519766289394ull, 5564851634172698357ull}}, {{506772311862636232ull, 11660836296141124183ull, 11086534168135249646ull, 6956064542715872946ull}}, {{14468523445110459002ull, 5352673333321629420ull, 4634795673314286250ull, 8695080678394841183ull}}, {{18266199190048812684ull, 7957106851753406291ull, 9814276323462510762ull, 5434425423996775739ull}}, {{18221062969133627951ull, 723011527836982056ull, 7656159385900750549ull, 6793031779995969674ull}}, {{4329584637707483323ull, 5515450428223615475ull, 346827195521162378ull, 8491289724994962093ull}}, {{400147389353483125ull, 8058842536067147576ull, 2522610006414420438ull, 5307056078121851308ull}}, {{500184236691853906ull, 850181133229158662ull, 3153262508018025548ull, 6633820097652314135ull}}, {{9848602332719593190ull, 1062726416536448327ull, 17776636190304695647ull, 8292275122065392668ull}}, {{13072905485590827600ull, 7581733037976362060ull, 1887025582085658971ull, 5182671951290870418ull}}, {{16341131856988534500ull, 4865480279043064671ull, 11582154014461849522ull, 6478339939113588022ull}}, {{15814728802808280221ull, 15305222385658606647ull, 5254320481222536094ull, 8097924923891985028ull}}, {{16801734529396256994ull, 4954077972609241250ull, 12507322337618860867ull, 5061203077432490642ull}}, {{11778796124890545435ull, 1580911447334163659ull, 6410780885168800276ull, 6326503846790613303ull}}, {{10111809137685793889ull, 1976139309167704574ull, 3401790088033612441ull, 7908129808488266629ull}}, {{1708194692626233277ull, 12764302114298285119ull, 4431961814234701727ull, 4942581130305166643ull}}, {{15970301421064955308ull, 11343691624445468494ull, 928266249365989255ull, 6178226412881458304ull}}, {{10739504739476418327ull, 9567928512129447714ull, 1160332811707486569ull, 7722783016101822880ull}}, {{11323876480600149359ull, 17509170366149374581ull, 725208007317179105ull, 4826739385063639300ull}}, {{319787545468022986ull, 8051404902404554515ull, 906510009146473882ull, 6033424231329549125ull}}, {{14234792487117192445ull, 840884091150917335ull, 5744823529860480257ull, 7541780289161936406ull}}, {{15814274332089327134ull, 12054767603037793094ull, 17425572761444963872ull, 4713612680726210253ull}}, {{10544470878256883109ull, 15068459503797241368ull, 7946907896524041128ull, 5892015850907762817ull}}, {{13180588597821103887ull, 388830306037000094ull, 14545320889082439315ull, 7365019813634703521ull}}, {{7252363710421604050ull, 14321095937828413830ull, 4346593056070885431ull, 9206274767043379402ull}}, {{18367785374295666244ull, 15868213988783840499ull, 7328306678471691298ull, 5753921729402112126ull}}, {{18348045699442194900ull, 10611895449125024816ull, 18383755384944389931ull, 7192402161752640157ull}}, {{4488313050593192009ull, 8653183292978893117ull, 9144636175898323702ull, 8990502702190800197ull}}, {{5111038665834438958ull, 796553539684420294ull, 8021240619150146266ull, 5619064188869250123ull}}, {{15612170369147824505ull, 10219063961460301175ull, 5414864755510294928ull, 7023830236086562654ull}}, {{14903526943007392728ull, 12773829951825376469ull, 15991952981242644468ull, 8779787795108203317ull}}, {{11620547348593314407ull, 17207015756745636101ull, 12300813622490346744ull, 5487367371942627073ull}}, {{690626130459479296ull, 3062025622222493511ull, 1540958972830769719ull, 6859209214928283842ull}}, {{14698340718356512832ull, 17662590083060280600ull, 11149570752893237956ull, 8574011518660354802ull}}, {{9186462948972820520ull, 1815746765057899567ull, 11580167738985661627ull, 5358757199162721751ull}}, {{6871392667788637746ull, 16104741511604538171ull, 9863523655304689129ull, 6698446498953402189ull}}, {{3977554816308409279ull, 6295868834223509002ull, 16941090587558249316ull, 8373058123691752736ull}}, {{7097657778620143704ull, 13158290058244468934ull, 10588181617223905822ull, 5233161327307345460ull}}, {{18095444260129955437ull, 7224490535950810359ull, 13235227021529882278ull, 6541451659134181825ull}}, {{18007619306735056393ull, 18253985206793288757ull, 2708975721630189135ull, 8176814573917727282ull}}, {{13560605075923104198ull, 18326269781886887329ull, 6304795844446256113ull, 5110509108698579551ull}}, {{3115698289621716535ull, 9072779172076445450ull, 3269308787130432238ull, 6388136385873224439ull}}, {{13117994898881921476ull, 2117601928240781004ull, 17921694039195204010ull, 7985170482341530548ull}}, {{17422118848655976731ull, 5935187223577876031ull, 1977686737642226698ull, 4990731551463456593ull}}, {{17165962542392583010ull, 16642356066327120847ull, 7083794440480171276ull, 6238414439329320741ull}}, {{16845767159563340858ull, 2356201009199349443ull, 13466429069027602000ull, 7798018049161650926ull}}, {{8222761465513394084ull, 1472625630749593402ull, 3804832149714863346ull, 4873761280726031829ull}}, {{1055079795036966797ull, 11064154075291767561ull, 9367726205570967086ull, 6092201600907539786ull}}, {{5930535762223596400ull, 4606820557259933643ull, 2486285720108933050ull, 7615252001134424733ull}}, {{1400741842176053798ull, 7490948866714846431ull, 3859771584281777108ull, 4759532500709015458ull}}, {{15585985358002230960ull, 9363686083393558038ull, 14048086517206997193ull, 5949415625886269322ull}}, {{10259109660648012892ull, 16316293622669335452ull, 8336736109653970683ull, 7436769532357836653ull}}, {{15635315574759783866ull, 7891840504954640705ull, 7516303077747425629ull, 4647980957723647908ull}}, {{5709086413167566120ull, 14476486649620688786ull, 9395378847184282036ull, 5809976197154559885ull}}, {{16359730053314233458ull, 18095608312025860982ull, 16355909577407740449ull, 7262470246443199856ull}}, {{11226290529788016014ull, 8784452334750162516ull, 1998142898050123946ull, 9078087808053999821ull}}, {{16239803617972285817ull, 10101968727646239476ull, 3554682320495021418ull, 5673804880033749888ull}}, {{1853010448755805655ull, 3404088872703023538ull, 4443352900618776773ull, 7092256100042187360ull}}, {{11539635097799532877ull, 8866797109306167326ull, 5554191125773470966ull, 8865320125052734200ull}}, {{2600585917697320144ull, 930062174888966675ull, 3471369453608419354ull, 5540825078157958875ull}}, {{17085790452403813892ull, 10385949755465984151ull, 18174269872292687904ull, 6926031347697448593ull}}, {{16745552047077379461ull, 12982437194332480189ull, 8882779285083696168ull, 8657539184621810742ull}}, {{12771813038637056115ull, 8114023246457800118ull, 940051034749922201ull, 5410961990388631714ull}}, {{6741394261441544336ull, 14754215076499638052ull, 10398435830292178559ull, 6763702487985789642ull}}, {{8426742826801930420ull, 13831082827197159661ull, 3774672751010447391ull, 8454628109982237053ull}}, {{7572557275964900465ull, 15561955794639306644ull, 4665013478595223571ull, 5284142568738898158ull}}, {{9465696594956125581ull, 14840758724871745401ull, 15054638885098805272ull, 6605178210923622697ull}}, {{16443806762122544880ull, 104204332380130135ull, 4983240551091342879ull, 8256472763654528372ull}}, {{17194908253967672406ull, 6982656735378663190ull, 12337897381286865107ull, 5160295477284080232ull}}, {{12270263280604814699ull, 4116634900795941084ull, 15422371726608581384ull, 6450369346605100290ull}}, {{15337829100756018374ull, 5145793625994926355ull, 10054592621405950922ull, 8062961683256375363ull}}, {{7280300178758817532ull, 7827807034674216876ull, 3978277379165025374ull, 5039351052035234602ull}}, {{9100375223448521915ull, 561386756487995287ull, 14196218760811057526ull, 6299188815044043252ull}}, {{6763783010883264489ull, 9925105482464769917ull, 17745273451013821907ull, 7873986018805054065ull}}, {{6533207391015734258ull, 3897347917326787246ull, 4173266879242556836ull, 4921241261753158791ull}}, {{17389881275624443630ull, 4871684896658484057ull, 604897580625808141ull, 6151551577191448489ull}}, {{7902293539248390826ull, 10701292139250492976ull, 5367807994209648080ull, 7689439471489310611ull}}, {{4938933462030244266ull, 6688307587031558110ull, 1049036987167336098ull, 4805899669680819132ull}}, {{15397038864392581141ull, 17583756520644223445ull, 1311296233959170122ull, 6007374587101023915ull}}, {{5411240525208562714ull, 12756323613950503499ull, 15474178347731126365ull, 7509218233876279893ull}}, {{1076182319041657744ull, 10278545267932758639ull, 11977204476545647930ull, 4693261396172674933ull}}, {{15180285954084235892ull, 3624809548061172490ull, 1136447540399896201ull, 5866576745215843667ull}}, {{9751985405750519057ull, 9142697953503853517ull, 15255617480782033963ull, 7333220931519804583ull}}, {{16801667775615536725ull, 6816686423452428992ull, 14457835832550154550ull, 9166526164399755729ull}}, {{10501042359759710454ull, 18095487069939931832ull, 2118618367702764737ull, 5729078852749847331ull}}, {{13126302949699638067ull, 8784300782142751078ull, 16483331014910619634ull, 7161348565937309163ull}}, {{7184506650269771775ull, 1757003940823663040ull, 15992477750210886639ull, 8951685707421636454ull}}, {{4490316656418607360ull, 8015656490655871256ull, 5383612575454416245ull, 5594803567138522784ull}}, {{5612895820523259200ull, 14631256631747226974ull, 6729515719318020306ull, 6993504458923153480ull}}, {{16239491812508849808ull, 9065698752829257909ull, 8411894649147525383ull, 8741880573653941850ull}}, {{12455525392031725082ull, 12583590748159368049ull, 9869120174144591268ull, 5463675358533713656ull}}, {{1734348684757492640ull, 15729488435199210062ull, 12336400217680739085ull, 6829594198167142070ull}}, {{11391307892801641608ull, 5826802488716848865ull, 6197128235246148049ull, 8536992747708927588ull}}, {{202038405359944149ull, 15170966601516500301ull, 13096577183883618338ull, 5335620467318079742ull}}, {{4864234025127318090ull, 9740336215040849568ull, 7147349442999747115ull, 6669525584147599678ull}}, {{6080292531409147613ull, 7563734250373674056ull, 18157558840604459702ull, 8336906980184499597ull}}, {{3800182832130717258ull, 115647888056158381ull, 13654317284591481266ull, 5210566862615312248ull}}, {{9361914558590784477ull, 9367931896924973784ull, 17067896605739351582ull, 6513208578269140310ull}}, {{11702393198238480596ull, 2486542834301441422ull, 12111498720319413670ull, 8141510722836425388ull}}, {{2702309730471662469ull, 15389147326720564601ull, 16793058737054409351ull, 5088444201772765867ull}}, {{7989573181516965990ull, 14624748139973317847ull, 16379637402890623785ull, 6360555252215957334ull}}, {{5375280458468819583ull, 4445877119684483597ull, 11251174716758503924ull, 7950694065269946668ull}}, {{5665393295756706191ull, 12002045236657578056ull, 16255356234828840760ull, 4969183790793716667ull}}, {{7081741619695882739ull, 15002556545821972570ull, 15707509275108663046ull, 6211479738492145834ull}}, {{18075549061474629232ull, 9529823645422689904ull, 10411014557031053000ull, 7764349673115182293ull}}, {{11297218163421643270ull, 5956139778389181190ull, 8812727107358102077ull, 4852718545696988933ull}}, {{4898150667422278280ull, 12056860741413864392ull, 15627594902625015500ull, 6065898182121236166ull}}, {{6122688334277847849ull, 15071075926767330490ull, 10311121591426493567ull, 7582372727651545208ull}}, {{8438366227351042810ull, 16336951481870663412ull, 6444450994641558479ull, 4738982954782215755ull}}, {{10547957784188803512ull, 15809503333910941361ull, 3443877724874560195ull, 5923728693477769694ull}}, {{17796633248663392294ull, 15150193148961288797ull, 13528219192947976052ull, 7404660866847212117ull}}, {{13428738789628314136ull, 245498681246029690ull, 10760980004806178985ull, 4627913041779507573ull}}, {{7562551450180616862ull, 4918559369984925017ull, 18062911024435111635ull, 5784891302224384466ull}}, {{14064875331153158981ull, 1536513194053768367ull, 13355266743689113736ull, 7231114127780480583ull}}, {{12969408145514060823ull, 1920641492567210459ull, 12082397411184004266ull, 9038892659725600729ull}}, {{5800037081732594062ull, 5812086951281894441ull, 633969354348920810ull, 5649307912328500456ull}}, {{11861732370593130482ull, 16488480725957143859ull, 792461692936151012ull, 7061634890410625570ull}}, {{10215479444814025198ull, 2163856833736878208ull, 10213949153024964574ull, 8827043613013281962ull}}, {{6384674653008765749ull, 15187468576367712592ull, 10995404239067990762ull, 5516902258133301226ull}}, {{7980843316260957186ull, 9760963683604864932ull, 4520883261980212645ull, 6896127822666626533ull}}, {{9976054145326196483ull, 16812890622933469069ull, 10262790095902653710ull, 8620159778333283166ull}}, {{8540876850042566754ull, 5896370620906030264ull, 1802557791511770665ull, 5387599861458301979ull}}, {{10676096062553208442ull, 11982149294559925734ull, 16088255294671877043ull, 6734499826822877473ull}}, {{4121748041336734745ull, 10366000599772519264ull, 6275261063057682592ull, 8418124783528596842ull}}, {{2576092525835459216ull, 6478750374857824540ull, 8533724182838439524ull, 5261327989705373026ull}}, {{3220115657294324019ull, 8098437968572280675ull, 1443783191693273597ull, 6576659987131716283ull}}, {{17860202626900068736ull, 14734733479142738747ull, 15639787044898755708ull, 8220824983914645353ull}}, {{8856783632598849008ull, 18432580461318987525ull, 2857337875420640461ull, 5138015614946653346ull}}, {{15682665559175949164ull, 9205667521366570694ull, 12795044381130576385ull, 6422519518683316682ull}}, {{10379959912115160647ull, 16118770420135601272ull, 6770433439558444673ull, 8028149398354145853ull}}, {{6487474945071975405ull, 3156702484943668939ull, 6537363908937721873ull, 5017593373971341158ull}}, {{3497657662912581352ull, 8557564124606974078ull, 17395076923026928149ull, 6271991717464176447ull}}, {{13595444115495502497ull, 15308641174186105501ull, 17132160135356272282ull, 7839989646830220559ull}}, {{10802995581398383013ull, 14179586752293703842ull, 17625129112238752032ull, 4899993529268887849ull}}, {{4280372439893202958ull, 17724483440367129803ull, 8196353335016276328ull, 6124991911586109812ull}}, {{738779531439115794ull, 3708860226749360638ull, 10245441668770345411ull, 7656239889482637265ull}}, {{14296795262431611083ull, 12194632504656446ull, 17932616089049935642ull, 4785149930926648290ull}}, {{8647622041184738046ull, 9238615327485596366ull, 13192398074457643744ull, 5981437413658310363ull}}, {{1586155514626146749ull, 11548269159356995458ull, 11878811574644666776ull, 7476796767072887954ull}}, {{5603033215068729622ull, 7217668224598122161ull, 12035943252580304639ull, 4672997979420554971ull}}, {{11615477537263299932ull, 4410399262320264797ull, 10433243047297992895ull, 5841247474275693714ull}}, {{684288866296961203ull, 901313059472943093ull, 3818181772267715311ull, 7301559342844617143ull}}, {{5467047101298589407ull, 14961699379623342578ull, 161041196907256234ull, 9126949178555771429ull}}, {{8028590456739006284ull, 13962748130691977015ull, 2406493757280729098ull, 5704343236597357143ull}}, {{5424052052496369951ull, 8230063126510195461ull, 16843175251883075085ull, 7130429045746696428ull}}, {{11391751084047850342ull, 14899264926565132230ull, 2607224991144292240ull, 8913036307183370536ull}}, {{2508158409102518560ull, 9312040579103207644ull, 1629515619465182650ull, 5570647691989606585ull}}, {{3135198011378148200ull, 2416678687024233747ull, 6648580542758866217ull, 6963309614987008231ull}}, {{17754055569504848962ull, 7632534377207680087ull, 3699039660021194867ull, 8704137018733760289ull}}, {{18013813758581612457ull, 2464490976541106102ull, 13841114833581716552ull, 5440085636708600180ull}}, {{13293895161372239763ull, 3080613720676382628ull, 17301393541977145690ull, 6800107045885750225ull}}, {{16617368951715299704ull, 13074139187700254093ull, 7791683872189268400ull, 8500133807357187782ull}}, {{12691698604035756267ull, 8171336992312658808ull, 258116401690904846ull, 5312583629598242364ull}}, {{15864623255044695334ull, 990799203536047702ull, 322645502113631058ull, 6640729536997802955ull}}, {{10607407031951093359ull, 10461871041274835436ull, 14238364932924202534ull, 8300911921247253693ull}}, {{15853001431824209158ull, 1926983382369384243ull, 11204821092291320536ull, 5188069950779533558ull}}, {{15204565771352873543ull, 2408729227961730304ull, 4782654328509374862ull, 6485087438474416948ull}}, {{558963140481540313ull, 12234283571806938689ull, 5978317910636718577ull, 8106359298093021185ull}}, {{11878567008869432456ull, 728898204738254824ull, 15265663740216418871ull, 5066474561308138240ull}}, {{14848208761086790569ull, 14746180811204982242ull, 635335601560971972ull, 6333093201635172801ull}}, {{9336888914503712404ull, 18432726014006227803ull, 5405855520378602869ull, 7916366502043966001ull}}, {{3529712562351126301ull, 13826296767967586329ull, 14907874746305096553ull, 4947729063777478750ull}}, {{9023826721366295780ull, 3447812904677319199ull, 9411471396026594884ull, 6184661329721848438ull}}, {{6668097383280481820ull, 4309766130846648999ull, 2540967208178467797ull, 7730826662152310548ull}}, {{11085089892191382994ull, 4999446840992849576ull, 10811476541966318181ull, 4831766663845194092ull}}, {{13856362365239228742ull, 10860994569668449874ull, 13514345677457897726ull, 6039708329806492615ull}}, {{8097080919694260120ull, 4352871175230786535ull, 12281246078394984254ull, 7549635412258115769ull}}, {{11978204602449994431ull, 16555602539801405296ull, 758249771355783302ull, 4718522132661322356ull}}, {{14972755753062493039ull, 11471131137896980812ull, 947812214194729128ull, 5898152665826652945ull}}, {{269200617618564682ull, 14338913922371226016ull, 5796451286170799314ull, 7372690832283316181ull}}, {{336500772023205852ull, 8700270366109256712ull, 11857250126140887047ull, 9215863540354145226ull}}, {{210312982514503658ull, 12355198006459367301ull, 12022467347265442308ull, 5759914712721340766ull}}, {{4874577246570517476ull, 15443997508074209126ull, 5804712147227027077ull, 7199893390901675958ull}}, {{15316593595067922653ull, 5469938829810597695ull, 16479262220888559655ull, 8999866738627094947ull}}, {{16490400024558533514ull, 10336240796272705415ull, 7993695878841655832ull, 5624916711641934342ull}}, {{16001314012270778989ull, 12920300995340881769ull, 768747811697293982ull, 7031145889552417928ull}}, {{6166584460056310024ull, 6927004207321326404ull, 960934764621617478ull, 8788932361940522410ull}}, {{13077487324389969573ull, 18164435684857992714ull, 5212270246315898827ull, 5493082726212826506ull}}, {{7123487118632686158ull, 18093858587645102989ull, 15738709844749649342ull, 6866353407766033132ull}}, {{13516044916718245602ull, 13393951197701602928ull, 1226643232227510062ull, 8582941759707541416ull}}, {{8447528072948903501ull, 3759533480136113926ull, 766652020142193789ull, 5364338599817213385ull}}, {{1336038054331353569ull, 9311102868597530312ull, 5570001043605130140ull, 6705423249771516731ull}}, {{1670047567914191961ull, 11638878585746912890ull, 2350815286079024771ull, 8381779062214395914ull}}, {{5655465748373757880ull, 4968456106878126604ull, 6080945572226778386ull, 5238611913883997446ull}}, {{7069332185467197349ull, 15433942170452434063ull, 16824554002138248790ull, 6548264892354996807ull}}, {{4224979213406608783ull, 10069055676210766771ull, 16419006484245423084ull, 8185331115443746009ull}}, {{334768999165436537ull, 15516531834486505040ull, 3344350025012307571ull, 5115831947152341256ull}}, {{418461248956795672ull, 14783978774680743396ull, 4180437531265384464ull, 6394789933940426570ull}}, {{523076561195994589ull, 33229394641377629ull, 14448918950936506389ull, 7993487417425533212ull}}, {{2632765859961190570ull, 2326611380864554970ull, 18253946381190092301ull, 4995929635890958257ull}}, {{12514329361806264021ull, 7519950244508081616ull, 8982374921205451664ull, 6244912044863697822ull}}, {{15642911702257830026ull, 9399937805635102020ull, 2004596614652038772ull, 7806140056079622278ull}}, {{553447777056367958ull, 15098333165376714571ull, 15087930939439687944ull, 4878837535049763923ull}}, {{14526867776602623660ull, 426172383011341597ull, 14248227655872222027ull, 6098546918812204904ull}}, {{4323526665471115863ull, 14367773534046340709ull, 17810284569840277533ull, 7623183648515256130ull}}, {{5008047175133141366ull, 11285701467992656895ull, 15743113874577561362ull, 4764489780322035081ull}}, {{1648372950489038804ull, 4883754798136045311ull, 5843834287939787991ull, 5955612225402543852ull}}, {{15895524243393462217ull, 1493007479242668734ull, 7304792859924734989ull, 7444515281753179815ull}}, {{5323016633693525982ull, 3238972683740361911ull, 11483024565094041224ull, 4652822051095737384ull}}, {{2042084773689519573ull, 4048715854675452389ull, 14353780706367551530ull, 5816027563869671730ull}}, {{7164291985539287370ull, 14284266855199091294ull, 8718853846104663604ull, 7270034454837089663ull}}, {{18178737018778885021ull, 17855333568998864117ull, 6286881289203441601ull, 9087543068546362079ull}}, {{13667553645950497090ull, 4242054452983208217ull, 10846829833393232857ull, 5679714417841476299ull}}, {{3249384002155957650ull, 9914254084656398176ull, 8946851273314153167ull, 7099643022301845374ull}}, {{4061730002694947063ull, 7781131587393109816ull, 1960192054787915651ull, 8874553777877306718ull}}, {{2538581251684341914ull, 2557364232906999683ull, 15060178089524610994ull, 5546596111173316698ull}}, {{17008284619887591105ull, 12420077327988525411ull, 9601850575050987934ull, 6933245138966645873ull}}, {{16648669756432100977ull, 6301724623130880956ull, 16613999237241122822ull, 8666556423708307341ull}}, {{1182046560915287303ull, 17773635944738964310ull, 12689592532489395715ull, 5416597764817692088ull}}, {{10700930237998884936ull, 17605358912496317483ull, 15861990665611744644ull, 6770747206022115110ull}}, {{8764476779071218266ull, 3559954566910845238ull, 10604116295159904998ull, 8463434007527643888ull}}, {{866111968492123513ull, 16060029659601441986ull, 6627572684474940623ull, 5289646254704777430ull}}, {{10306011997469930199ull, 15463351056074414578ull, 17507837892448451587ull, 6612057818380971787ull}}, {{3659142959982636940ull, 14717502801665630319ull, 17273111347133176580ull, 8265072272976214734ull}}, {{9204493377630229944ull, 18421811287895794757ull, 6184008573530847458ull, 5165670170610134209ull}}, {{16117302740465175334ull, 13803892073014967638ull, 12341696735340947227ull, 6457087713262667761ull}}, {{10923256388726693359ull, 12643179072841321644ull, 1592062863894020322ull, 8071359641578334702ull}}, {{16050407279808959158ull, 12513672938953213931ull, 14830097345215926413ull, 5044599775986459188ull}}, {{15451323081333811043ull, 1807033118409353702ull, 90877607810356401ull, 6305749719983073986ull}}, {{10090781814812487996ull, 6870477416439080032ull, 9336969046617721309ull, 7882187149978842482ull}}, {{6306738634257804997ull, 6599891394488118972ull, 10447291672563463722ull, 4926366968736776551ull}}, {{7883423292822256247ull, 17473236279964924523ull, 8447428572276941748ull, 6157958710920970689ull}}, {{5242593097600432404ull, 3394801276246604038ull, 15170971733773565090ull, 7697448388651213361ull}}, {{17111678741282433965ull, 6733436816081515427ull, 2564328305967396325ull, 4810905242907008351ull}}, {{16777912408175654552ull, 13028482038529282188ull, 17040468437741409118ull, 6013631553633760438ull}}, {{2525646436510016574ull, 7062230511306826928ull, 12077213510321985590ull, 7517039442042200548ull}}, {{1578529022818760359ull, 18248952124848930542ull, 16771630480806016801ull, 4698149651276375342ull}}, {{11196533315378226256ull, 8976132100778999465ull, 11741166064152745194ull, 5872687064095469178ull}}, {{160608588940619108ull, 1996793089118973524ull, 5453085543336155685ull, 7340858830119336473ull}}, {{200760736175773885ull, 7107677379826104809ull, 11428042947597582510ull, 9176073537649170591ull}}, {{11654690506178328438ull, 18277356417673479217ull, 14060055869889570924ull, 5735045961030731619ull}}, {{733305077440746836ull, 4399951448382297406ull, 12963383818934575752ull, 7168807451288414524ull}}, {{10140003383655709353ull, 5499939310477871757ull, 16204229773668219690ull, 8961009314110518155ull}}, {{8643345123998512298ull, 8049148087476057752ull, 7821800599328943354ull, 5600630821319073847ull}}, {{10804181404998140372ull, 838063072490296382ull, 5165564730733791289ull, 7000788526648842309ull}}, {{4281854719392899657ull, 5659264859040258382ull, 11068641931844627015ull, 8750985658311052886ull}}, {{16511217254902725998ull, 10454569564541243344ull, 2306215188975503980ull, 5469366036444408054ull}}, {{2192277494918855881ull, 13068211955676554181ull, 12106141023074155783ull, 6836707545555510067ull}}, {{7352032887075957755ull, 11723578926168304822ull, 10520990260415306825ull, 8545884431944387584ull}}, {{18430078609704637309ull, 409707801214108657ull, 6575618912759566766ull, 5341177769965242240ull}}, {{9202540206848632924ull, 9735506788372411630ull, 8219523640949458457ull, 6676472212456552800ull}}, {{2279803221706015347ull, 16781069503892902442ull, 10274404551186823071ull, 8345590265570691000ull}}, {{6036563031993647496ull, 17405697467574145882ull, 6421502844491764419ull, 5215993915981681875ull}}, {{16769075826846835178ull, 17145435816040294448ull, 3415192537187317620ull, 6519992394977102344ull}}, {{2514600709848992357ull, 2985050696340816445ull, 4268990671484147026ull, 8149990493721377930ull}}, {{3877468452869314175ull, 6477342703640398182ull, 7279805188104979795ull, 5093744058575861206ull}}, {{14070207602941418527ull, 3484992361123109823ull, 18323128521986000552ull, 6367180073219826507ull}}, {{12976073485249385254ull, 4356240451403887279ull, 18292224634055112786ull, 7958975091524783134ull}}, {{15027574955921947640ull, 7334336300554817453ull, 6820954377857057587ull, 4974359432202989459ull}}, {{4949410639620270838ull, 4556234357266133913ull, 3914506953893934080ull, 6217949290253736824ull}}, {{10798449317952726451ull, 5695292946582667391ull, 4893133692367417600ull, 7772436612817171030ull}}, {{13666559851361535888ull, 3559558091614167119ull, 16893266613011799712ull, 4857772883010731893ull}}, {{12471513795774531956ull, 4449447614517708899ull, 7281525210982585928ull, 6072216103763414867ull}}, {{10977706226290777041ull, 5561809518147136124ull, 4490220495300844506ull, 7590270129704268584ull}}, {{16084438428286511459ull, 8087816967269347981ull, 2806387809563027816ull, 4743918831065167865ull}}, {{6270489980075975611ull, 10109771209086684977ull, 8119670780381172674ull, 5929898538831459831ull}}, {{12449798493522357418ull, 3413841974503580413ull, 5537902457049077939ull, 7412373173539324789ull}}, {{10086967067665167339ull, 18274552298560595422ull, 5767032044869367663ull, 4632733233462077993ull}}, {{3385336797726683365ull, 18231504354773356374ull, 11820476074514097483ull, 5790916541827597491ull}}, {{13455043034013130014ull, 18177694425039307563ull, 10163909074715233950ull, 7238645677284496864ull}}, {{12207117774089024614ull, 13498745994444358646ull, 12704886343394042438ull, 9048307096605621080ull}}, {{3017762590378252480ull, 3825030228100336250ull, 7940553964621276524ull, 5655191935378513175ull}}, {{12995575274827591408ull, 4781287785125420312ull, 5314006437349207751ull, 7068989919223141469ull}}, {{16244469093534489259ull, 1364923712979387486ull, 11254194065113897593ull, 8836237399028926836ull}}, {{5541107165031667883ull, 12382292366680586939ull, 16257243327550961803ull, 5522648374393079272ull}}, {{2314697937862196950ull, 10866179439923345770ull, 1874810085729150638ull, 6903310467991349091ull}}, {{12116744459182521995ull, 4359352263049406404ull, 16178570662443602010ull, 8629138084989186363ull}}, {{16796337323843852055ull, 7336281182833266906ull, 7805763654813557304ull, 5393211303118241477ull}}, {{11772049617950039261ull, 9170351478541583633ull, 14368890586944334534ull, 6741514128897801846ull}}, {{880003967155385364ull, 2239567311322203734ull, 8737741196825642360ull, 8426892661122252308ull}}, {{14385060534754279565ull, 1399729569576377333ull, 14684460284870802283ull, 5266807913201407692ull}}, {{4146267613160685744ull, 15584720017252635379ull, 18355575356088502853ull, 6583509891501759615ull}}, {{571148498023469276ull, 5645841966283630512ull, 18332783176683240663ull, 8229387364377199519ull}}, {{356967811264668297ull, 10446180256568350926ull, 18375518513068107270ull, 5143367102735749699ull}}, {{9669581800935611180ull, 3834353283855662849ull, 18357712122907746184ull, 6429208878419687124ull}}, {{16698663269596901878ull, 4792941604819578561ull, 4500396079925131114ull, 8036511098024608906ull}}, {{3519135515856981818ull, 7607274521439624505ull, 7424433568380594850ull, 5022819436265380566ull}}, {{9010605413248615177ull, 285721114944754823ull, 57169923620967755ull, 6278524295331725708ull}}, {{6651570748133381067ull, 14192209448963107241ull, 71462404526209693ull, 7848155369164657135ull}}, {{15686446763651832927ull, 11175973914815635977ull, 6962193030469962914ull, 4905097105727910709ull}}, {{5773000399282627446ull, 4746595356664769164ull, 13314427306514841547ull, 6131371382159888386ull}}, {{7216250499103284308ull, 1321558177403573551ull, 7419662096288776126ull, 7664214227699860483ull}}, {{11427685589580634549ull, 14661031916159397181ull, 2331445800966791126ull, 4790133892312412802ull}}, {{449548931693629474ull, 9102917858344470669ull, 12137679288063264716ull, 5987667365390516002ull}}, {{5173622183044424746ull, 11378647322930588336ull, 5948727073224305087ull, 7484584206738145003ull}}, {{3233513864402765466ull, 14029183604472699566ull, 1412111411551496727ull, 4677865129211340627ull}}, {{13265264367358232641ull, 12924793487163486553ull, 15600197319721534621ull, 5847331411514175783ull}}, {{2746522403915627089ull, 2320933803672194480ull, 14888560631224530373ull, 7309164264392719729ull}}, {{3433153004894533861ull, 7512853273017631004ull, 4775642733748499254ull, 9136455330490899662ull}}, {{11369092664913859471ull, 83847277208631473ull, 16819834763874975746ull, 5710284581556812288ull}}, {{376307775860160627ull, 9328181133365565150ull, 2578049381134168066ull, 7137855726946015361ull}}, {{9693756756679976592ull, 2436854379852180629ull, 7834247744845097987ull, 8922319658682519201ull}}, {{8364440982138679322ull, 17663935051903470557ull, 16425619886596656001ull, 5576449786676574500ull}}, {{15067237246100737056ull, 8244860759597174484ull, 2085280784536268386ull, 6970562233345718126ull}}, {{387302483916369704ull, 1082703912641692298ull, 11829973017525111291ull, 8713202791682147657ull}}, {{4853750070875118969ull, 16817591009896915350ull, 476204108312112700ull, 5445751744801342286ull}}, {{15290559625448674520ull, 2575244688661592571ull, 9818627172244916684ull, 6807189681001677857ull}}, {{14501513513383455246ull, 3219055860826990714ull, 16884969983733533759ull, 8508987101252097321ull}}, {{13675131964292047433ull, 8929438940657951052ull, 3635577212192376743ull, 5318116938282560826ull}}, {{17093914955365059291ull, 6550112657395050911ull, 13767843552095246737ull, 6647646172853201032ull}}, {{16755707675778936209ull, 12799326840171201543ull, 17209804440119058421ull, 8309557716066501290ull}}, {{17389846325002916987ull, 10305422284320694916ull, 15367813793501799417ull, 5193473572541563306ull}}, {{3290563832544094618ull, 17493463873828256550ull, 9986395205022473463ull, 6491841965676954133ull}}, {{13336576827534894080ull, 17255143823857932783ull, 17094680024705479733ull, 8114802457096192666ull}}, {{15252889544850390656ull, 13090307899124901941ull, 15295861033868312737ull, 5071751535685120416ull}}, {{5231053875780824608ull, 2527826818623963715ull, 673082218625839306ull, 6339689419606400521ull}}, {{1927131326298642856ull, 12383155560134730452ull, 5453038791709687036ull, 7924611774508000651ull}}, {{10427829115791427593ull, 16962844261938982340ull, 1102306235604860445ull, 4952882359067500407ull}}, {{13034786394739284491ull, 7368497272141564213ull, 15212940849788239269ull, 6191102948834375508ull}}, {{2458424938141941902ull, 13822307608604343171ull, 569431988525747470ull, 7738878686042969386ull}}, {{17677416650834571353ull, 4027256236950326577ull, 4967581011255980073ull, 4836799178776855866ull}}, {{8261712758261050479ull, 9645756314615296126ull, 15432848300924750899ull, 6045998973471069832ull}}, {{1103768910971537291ull, 7445509374841732254ull, 844316302446387008ull, 7557498716838837291ull}}, {{14524913624639374519ull, 4653443359276082658ull, 16668598753524849544ull, 4723436698024273306ull}}, {{8932769993944442340ull, 5816804199095103323ull, 11612376405051286122ull, 5904295872530341633ull}}, {{6554276474003165021ull, 16494377285723654962ull, 680412451031943940ull, 7380369840662927042ull}}, {{8708108814679366043ull, 1085613766722508543ull, 5036943800322352867ull, 4612731150414329401ull}}, {{6273449999921819649ull, 15192075263685299391ull, 10907865768830328987ull, 5765913938017911751ull}}, {{3230126481474886657ull, 14378408061179236335ull, 9023146192610523330ull, 7207392422522389689ull}}, {{17872716157125772033ull, 8749638039619269610ull, 15890618759190542067ull, 9009240528152987111ull}}, {{15782133616630995425ull, 3162680765548349554ull, 16849165752135170648ull, 5630775330095616944ull}}, {{10504294983933968473ull, 3953350956935436943ull, 2614713116459411694ull, 7038469162619521181ull}}, {{8518682711490072687ull, 14165060733024071987ull, 7880077414001652521ull, 8798086453274401476ull}}, {{3018333685467601478ull, 1935633930498963136ull, 14148420420605808634ull, 5498804033296500922ull}}, {{3772917106834501847ull, 11642914449978479728ull, 8462153488902484984ull, 6873505041620626153ull}}, {{4716146383543127309ull, 14553643062473099660ull, 15189377879555494134ull, 8591881302025782691ull}}, {{12170963526569230376ull, 4484340895618299383ull, 7187518165508489882ull, 5369925813766114182ull}}, {{10602018389784150066ull, 14828798156377650037ull, 18207769743740388160ull, 6712407267207642727ull}}, {{17864209005657575486ull, 89253621762510930ull, 18148026161248097297ull, 8390509084009553409ull}}, {{15776816646963372583ull, 11584998559670039091ull, 4424987323138978954ull, 5244068177505970881ull}}, {{15109334790276827825ull, 5257876162732773056ull, 10142920172351111597ull, 6555085221882463601ull}}, {{439924414136483165ull, 11184031221843354225ull, 17290336233866277400ull, 8193856527353079501ull}}, {{11804167804903771738ull, 6990019513652096390ull, 13112303155380117327ull, 5121160329595674688ull}}, {{5531837719274938865ull, 4125838373637732584ull, 16390378944225146659ull, 6401450411994593360ull}}, {{6914797149093673581ull, 545611948619777826ull, 2041229606571881708ull, 8001813014993241701ull}}, {{8933434236610933892ull, 9564379504742136949ull, 3581611513321120019ull, 5001133134370776063ull}}, {{15778478814191055269ull, 7343788362500283282ull, 18312072446933563736ull, 6251416417963470078ull}}, {{10499726480884043278ull, 9179735453125354103ull, 13666718521812178862ull, 7814270522454337598ull}}, {{13479858078193608905ull, 1125648639775958410ull, 3930013057705223885ull, 4883919076533960999ull}}, {{7626450560887235323ull, 6018746818147335917ull, 300830303704141952ull, 6104898845667451249ull}}, {{14144749219536432058ull, 7523433522684169896ull, 4987723898057565344ull, 7631123557084314061ull}}, {{8840468262210270036ull, 4702145951677606185ull, 5423170445499672292ull, 4769452223177696288ull}}, {{15662271346190225449ull, 5877682439597007731ull, 6778963056874590365ull, 5961815278972120360ull}}, {{14966153164310393908ull, 11958789067923647568ull, 8473703821093237956ull, 7452269098715150450ull}}, {{9353845727693996192ull, 16697615204307055538ull, 9907750906610661626ull, 4657668186696969031ull}}, {{2468935122762719432ull, 11648646968529043615ull, 7773002614835939129ull, 5822085233371211289ull}}, {{16921226958735563002ull, 725750655379140806ull, 14327939286972311816ull, 7277606541714014111ull}}, {{11928161661564677945ull, 907188319223926008ull, 13298238090288001866ull, 9097008177142517639ull}}, {{7455101038477923716ull, 5178678717942341659ull, 15228927834071083022ull, 5685630110714073524ull}}, {{4707190279670016741ull, 15696720434282702882ull, 589415718879302161ull, 7107037638392591906ull}}, {{15107359886442296734ull, 5785842487571214890ull, 9960141685453903510ull, 8883797047990739882ull}}, {{14053785947453823363ull, 17451209610014173018ull, 10836774571836077597ull, 5552373154994212426ull}}, {{8343860397462503395ull, 7978953957235552561ull, 4322596177940321189ull, 6940466443742765533ull}}, {{15041511515255517148ull, 14585378464971828605ull, 10014931240852789390ull, 8675583054678456916ull}}, {{11706787706248392170ull, 4504175522180004974ull, 15482704062387769177ull, 5422239409174035572ull}}, {{5410112595955714404ull, 10241905421152394122ull, 906636004275159855ull, 6777799261467544466ull}}, {{15986012781799418813ull, 8190695758013104748ull, 10356667042198725627ull, 8472249076834430582ull}}, {{767885951769860950ull, 2813341839544496516ull, 1861230882946815613ull, 5295155673021519114ull}}, {{959857439712326188ull, 8128363317858008549ull, 11549910640538295324ull, 6618944591276898892ull}}, {{5811507818067795638ull, 10160454147322510686ull, 14437388300672869155ull, 8273680739096123615ull}}, {{17467250441574535986ull, 4044440832862875226ull, 15940896715561625078ull, 5171050461935077259ull}}, {{12610691015113394175ull, 14278923077933369841ull, 15314434876024643443ull, 6463813077418846574ull}}, {{1928305713609579006ull, 13236967828989324398ull, 9919671558176028496ull, 8079766346773558218ull}}, {{15040249126288150591ull, 8273104893118327748ull, 10811480742287405714ull, 5049853966733473886ull}}, {{353567334150636623ull, 1118009079543133878ull, 4290978891004481335ull, 6312317458416842358ull}}, {{9665331204543071586ull, 15232569404711081059ull, 14587095650610377476ull, 7890396823021052947ull}}, {{3734988993625725790ull, 296983841089649854ull, 6811091772417791971ull, 4931498014388158092ull}}, {{13892108278886933045ull, 14206287856644226029ull, 8513864715522239963ull, 6164372517985197615ull}}, {{3530077293326502594ull, 13146173802377894633ull, 6030644875975412050ull, 7705465647481497019ull}}, {{13735513354397533881ull, 12828044644913572049ull, 1463310038270938579ull, 4815916029675935637ull}}, {{3334333637714753640ull, 11423369787714577158ull, 6440823566266061128ull, 6019895037094919546ull}}, {{13391289083998217857ull, 14279212234643221447ull, 17274401494687352218ull, 7524868796368649432ull}}, {{15287084705139968017ull, 13536193665079401308ull, 10796500934179595136ull, 4703042997730405895ull}}, {{662111807715408405ull, 16920242081349251636ull, 8883940149297106016ull, 5878803747163007369ull}}, {{827639759644260506ull, 2703558527977012929ull, 15716611205048770425ull, 7348504683953759211ull}}, {{5646235717982713537ull, 7991134178398654065ull, 15034077987883575127ull, 9185630854942199014ull}}, {{15058112369807665721ull, 11911987889140240646ull, 4784612723999846550ull, 5741019284338874384ull}}, {{9599268425404806343ull, 5666612824570525000ull, 5980765904999808188ull, 7176274105423592980ull}}, {{11999085531756007928ull, 7083266030713156250ull, 7475957381249760235ull, 8970342631779491225ull}}, {{12111114475774892859ull, 2121198259982028704ull, 16201688409349569907ull, 5606464144862182015ull}}, {{15138893094718616074ull, 16486555880259699592ull, 15640424493259574479ull, 7008080181077727519ull}}, {{476872294688718476ull, 15996508831897236587ull, 14938844598147080195ull, 8760100226347159399ull}}, {{16438946248676306712ull, 7691975010722078914ull, 16254306901483006978ull, 5475062641466974624ull}}, {{11325310773990607582ull, 391596726547822835ull, 1871139553144207107ull, 6843828301833718281ull}}, {{9544952449060871573ull, 14324553963466942256ull, 6950610459857646787ull, 8554785377292147851ull}}, {{5965595280663044733ull, 6647003217953144958ull, 2038288528197335290ull, 5346740860807592407ull}}, {{16680366137683581725ull, 17532126059296207005ull, 16382918715528832824ull, 6683426076009490508ull}}, {{7015399616822313444ull, 3468413500410707141ull, 2031904320701489415ull, 8354282595011863136ull}}, {{6690467769727639854ull, 9085287465397773819ull, 1269940200438430884ull, 5221426621882414460ull}}, {{3751398693732161914ull, 11356609331747217274ull, 1587425250548038605ull, 6526783277353018075ull}}, {{13912620404019978200ull, 360703609401857880ull, 15819339618467211969ull, 8158479096691272593ull}}, {{8695387752512486375ull, 11754654801944630935ull, 2969558233900925624ull, 5099049435432045371ull}}, {{6257548672213220065ull, 14693318502430788669ull, 17547005847658320742ull, 6373811794290056713ull}}, {{12433621858693912985ull, 9143276091183710028ull, 8098699254290737216ull, 7967264742862570892ull}}, {{16994385698538471424ull, 5714547556989818767ull, 14285059070786486568ull, 4979540464289106807ull}}, {{16631296104745701376ull, 7143184446237273459ull, 13244637820055720306ull, 6224425580361383509ull}}, {{16177434112504738816ull, 18152352594651367632ull, 2720739219787486670ull, 7780531975451729387ull}}, {{10110896320315461760ull, 6733534353229716866ull, 17841363076863036833ull, 4862832484657330866ull}}, {{3415248363539551392ull, 13028603959964533987ull, 13078331809224020233ull, 6078540605821663583ull}}, {{18104118509706602952ull, 2450696894673503771ull, 11736228743102637388ull, 7598175757277079479ull}}, {{9009231059352932893ull, 10755057596025715665ull, 14252671992080230223ull, 4748859848298174674ull}}, {{15873224842618554020ull, 8832135976604756677ull, 8592467953245511971ull, 5936074810372718343ull}}, {{6006472997991028813ull, 6428483952328557943ull, 6128898923129502060ull, 7420093512965897929ull}}, {{10671574651385474864ull, 13241174507060124522ull, 15359776873024408547ull, 4637558445603686205ull}}, {{4116096277377067772ull, 11939782115397767749ull, 5364663035998346972ull, 5796948057004607757ull}}, {{9756806365148722619ull, 14924727644247209686ull, 11317514813425321619ull, 7246185071255759696ull}}, {{2972635919581127466ull, 14044223536881624204ull, 14146893516781652024ull, 9057731339069699620ull}}, {{11081269486592980474ull, 8777639710551015127ull, 18065180484843308323ull, 5661082086918562262ull}}, {{9239900839813837689ull, 6360363619761381005ull, 13358103569199359596ull, 7076352608648202828ull}}, {{16161562068194685015ull, 7950454524701726256ull, 16697629461499199495ull, 8845440760810253535ull}}, {{10100976292621678135ull, 11886563105579660766ull, 17353547441078081540ull, 5528400475506408459ull}}, {{3402848328922321860ull, 14858203881974575958ull, 17080248282920214021ull, 6910500594383010574ull}}, {{13476932448007678133ull, 4737696797186056235ull, 12126938316795491719ull, 8638125742978763218ull}}, {{6117239770791104881ull, 9878589525882367003ull, 12191022466424570228ull, 5398828589361727011ull}}, {{3034863695061493197ull, 12348236907352958754ull, 10627092064603324881ull, 6748535736702158764ull}}, {{13016951655681642305ull, 1600238078909034730ull, 13283865080754156102ull, 8435669670877698455ull}}, {{12747280803228414345ull, 14835206854600310418ull, 15219944703112429419ull, 5272293544298561534ull}}, {{6710728967180742123ull, 13932322549823000119ull, 9801558842035760966ull, 6590366930373201918ull}}, {{3776725190548539749ull, 8192031150423974341ull, 3028576515689925400ull, 8237958662966502398ull}}, {{4666296253306531295ull, 5120019469014983963ull, 15727918377588367087ull, 5148724164354063998ull}}, {{1221184298205776215ull, 1788338317841342050ull, 10436525935130683051ull, 6435905205442579998ull}}, {{10749852409611996077ull, 16070480952583841274ull, 3822285382058578005ull, 8044881506803224998ull}}, {{11330343774434885452ull, 12349893604578594748ull, 16223986419068774965ull, 5028050941752015623ull}}, {{14162929718043606815ull, 1602308950441079723ull, 15668297005408580803ull, 6285063677190019529ull}}, {{13091976129127120615ull, 15837944243333513366ull, 5750313201478562291ull, 7856329596487524412ull}}, {{3570799062277062480ull, 7592872142869751902ull, 12817317787778877240ull, 4910205997804702757ull}}, {{13686870864701103908ull, 9491090178587189877ull, 2186589179441432838ull, 6137757497255878447ull}}, {{3273530525594216173ull, 2640490686379211539ull, 16568294529583954760ull, 7672196871569848058ull}}, {{18186857642992242773ull, 1650306678987007211ull, 14966870099417359629ull, 4795123044731155036ull}}, {{18121886035312915562ull, 6674569367161146918ull, 261843550562147920ull, 5993903805913943796ull}}, {{13428985507286368644ull, 8343211708951433648ull, 327304438202684900ull, 7492379757392429745ull}}, {{8393115942053980403ull, 14437879354949421838ull, 11733780319945147822ull, 4682737348370268590ull}}, {{1268022890712699695ull, 8823977156832001490ull, 5443853363076658970ull, 5853421685462835738ull}}, {{10808400650245650427ull, 1806599409185226054ull, 16028188740700599521ull, 7316777106828544672ull}}, {{4287128775952287225ull, 6869935279908920472ull, 1588491852166197785ull, 9145971383535680841ull}}, {{2679455484970179516ull, 15822924596011545055ull, 12522022453672343375ull, 5716232114709800525ull}}, {{17184377411494888107ull, 15166969726587043414ull, 1817470011808265507ull, 7145290143387250657ull}}, {{12257099727513834326ull, 14347026139806416364ull, 6883523533187719788ull, 8931612679234063321ull}}, {{16884059366550922262ull, 18190263374233786035ull, 15831417254310794627ull, 5582257924521289575ull}}, {{16493388189761264923ull, 18126143199364844640ull, 15177585549461105380ull, 6977822405651611969ull}}, {{2169991163492029538ull, 4210934925496504185ull, 5136923881544218014ull, 8722278007064514962ull}}, {{12885459523250988221ull, 16466892383717478827ull, 7822263444392524162ull, 5451423754415321851ull}}, {{11495138385636347372ull, 11360243442792072726ull, 5166143287063267299ull, 6814279693019152314ull}}, {{5145550945190658407ull, 9588618285062703004ull, 15681051145683859932ull, 8517849616273940392ull}}, {{12439341377598937313ull, 15216258465018965185ull, 9800656966052412457ull, 5323656010171212745ull}}, {{1714118666716507929ull, 5185265025991542770ull, 16862507225992903476ull, 6654570012714015931ull}}, {{11366020370250410719ull, 6481581282489428462ull, 16466448014063741441ull, 8318212515892519914ull}}, {{2492076712979118795ull, 15580203347624362549ull, 14903216027217226304ull, 5198882822432824946ull}}, {{7726781909651286398ull, 1028510110820901570ull, 9405647997166757073ull, 6498603528041031183ull}}, {{435105350209332190ull, 5897323656953514867ull, 7145373978031058437ull, 8123254410051288979ull}}, {{16412841908376690283ull, 5991670294809640743ull, 2160015727055717571ull, 5077034006282055612ull}}, {{15904366367043474949ull, 2877901850084663025ull, 2700019658819646964ull, 6346292507852569515ull}}, {{6045399903522179974ull, 3597377312605828782ull, 17210082628806722417ull, 7932865634815711893ull}}, {{17613432994983526196ull, 13777575866447112748ull, 13062144652217895462ull, 4958041021759819933ull}}, {{3570047170019856129ull, 7998597796204115128ull, 2492622759990205616ull, 6197551277199774917ull}}, {{4462558962524820161ull, 9998247245255143910ull, 7727464468415144924ull, 7746939096499718646ull}}, {{16624157406860176313ull, 15472276565139240751ull, 217979274332077673ull, 4841836935312324154ull}}, {{16168510740147832487ull, 5505287651141887227ull, 9495846129769872900ull, 6052296169140405192ull}}, {{15598952406757402705ull, 6881609563927359034ull, 11869807662212341125ull, 7565370211425506490ull}}, {{14361031272650764595ull, 6606848986668293348ull, 12030315807310101107ull, 4728356382140941556ull}}, {{17951289090813455743ull, 3646875214907978781ull, 15037894759137626384ull, 5910445477676176945ull}}, {{8604053308234655967ull, 4558594018634973477ull, 4962310393639869268ull, 7388056847095221182ull}}, {{7683376326860353932ull, 12072493298501634231ull, 16936502051307082004ull, 4617535529434513238ull}}, {{4992534390148054510ull, 15090616623127042789ull, 11947255527279076697ull, 5771919411793141548ull}}, {{10852354006112456042ull, 5028212723626639774ull, 14934069409098845872ull, 7214899264741426935ull}}, {{4342070470785794244ull, 6285265904533299718ull, 14055900742946169436ull, 9018624080926783669ull}}, {{16548852099523285115ull, 13151663227188088131ull, 11090780973555049849ull, 5636640050579239793ull}}, {{16074379105976718489ull, 2604520978702946452ull, 28418161661648600ull, 7045800063224049742ull}}, {{1646229808761346495ull, 3255651223378683066ull, 9258894738931836558ull, 8807250079030062177ull}}, {{5640579648903229464ull, 15869840069893840628ull, 17316024257900867608ull, 5504531299393788860ull}}, {{7050724561129036830ull, 1390556013657749169ull, 3198286248666532895ull, 6880664124242236076ull}}, {{13425091719838683941ull, 15573253072354350173ull, 3997857810833166118ull, 8600830155302795095ull}}, {{10696525334112871415ull, 5121597151794080954ull, 9416190159411810680ull, 5375518847064246934ull}}, {{4147284630786313461ull, 6401996439742601193ull, 2546865662409987542ull, 6719398558830308668ull}}, {{9795791806910279730ull, 17225867586533027299ull, 3183582078012484427ull, 8399248198537885835ull}}, {{3816526870105230879ull, 8460324232369448110ull, 18130639863253660431ull, 5249530124086178646ull}}, {{13994030624486314407ull, 5963719272034422233ull, 13439927792212299731ull, 6561912655107723308ull}}, {{3657480225325729297ull, 2842963071615639888ull, 16799909740265374664ull, 8202390818884654135ull}}, {{2285925140828580811ull, 1776851919759774930ull, 17417472615306941021ull, 5126494261802908834ull}}, {{12080778462890501821ull, 6832750918127106566ull, 12548468732278900468ull, 6408117827253636043ull}}, {{5877601041758351469ull, 8540938647658883208ull, 11073899896921237681ull, 8010147284067045054ull}}, {{3673500651098969668ull, 16867301700855271765ull, 2309501417148385646ull, 5006342052541903159ull}}, {{9203561832301099989ull, 11860755089214313898ull, 16721934826717645770ull, 6257927565677378948ull}}, {{2281080253521599178ull, 5602571824663116565ull, 2455674459687505597ull, 7822409457096723686ull}}, {{3731518167664693438ull, 5807450399628141805ull, 15369854592586854710ull, 4889005910685452303ull}}, {{9276083728008254702ull, 16482685036389953064ull, 14600632222306180483ull, 6111257388356815379ull}}, {{11595104660010318377ull, 15991670277060053426ull, 13639104259455337700ull, 7639071735446019224ull}}, {{11858626430933836890ull, 771421886307757583ull, 8524440162159586063ull, 4774419834653762015ull}}, {{10211597020239908208ull, 14799335413166860691ull, 6043864184272094674ull, 5968024793317202519ull}}, {{8152810256872497356ull, 9275797229603800056ull, 2943144211912730439ull, 7460030991646503149ull}}, {{5095506410545310848ull, 12714902296143456891ull, 4145308141659150476ull, 4662519369779064468ull}}, {{1757696994754250656ull, 15893627870179321114ull, 5181635177073938095ull, 5828149212223830585ull}}, {{11420493280297589128ull, 15255348819296763488ull, 11088729989769810523ull, 7285186515279788231ull}}, {{14275616600371986409ull, 14457500005693566456ull, 9249226468784875250ull, 9106483144099735289ull}}, {{8922260375232491506ull, 13647623521985866939ull, 17309981589059016791ull, 5691551965062334555ull}}, {{6541139450613226478ull, 12447843384054945770ull, 17025790967896383085ull, 7114439956327918194ull}}, {{17399796350121308906ull, 1724746174786518500ull, 12058866673015703049ull, 8893049945409897743ull}}, {{1651500681971042258ull, 12607181405310043823ull, 14454320698275896261ull, 5558156215881186089ull}}, {{15899433907745966535ull, 1923918701355391066ull, 4232842817562706615ull, 6947695269851482612ull}}, {{10650920347827682360ull, 16239956431976402545ull, 5291053521953383268ull, 8684619087314353265ull}}, {{18186040263460771235ull, 926600733130475782ull, 14836123497289334303ull, 5427886929571470790ull}}, {{13509178292471188236ull, 14993308971695258440ull, 9321782334756892070ull, 6784858661964338488ull}}, {{16886472865588985295ull, 9518264177764297242ull, 11652227918446115088ull, 8481073327455423110ull}}, {{15165731559420503714ull, 5948915111102685776ull, 2670956430601434026ull, 5300670829659639444ull}}, {{510420375566078026ull, 16659515925733133029ull, 3338695538251792532ull, 6625838537074549305ull}}, {{5249711487884985436ull, 2377650833456864670ull, 8785055441242128570ull, 8282298171343186631ull}}, {{17116127735210279610ull, 6097717789337928322ull, 12408188678417412212ull, 5176436357089491644ull}}, {{12171787632158073704ull, 7622147236672410403ull, 15510235848021765265ull, 6470545446361864555ull}}, {{10603048521770204226ull, 14139370064267900908ull, 14776108791599818677ull, 8088181807952330694ull}}, {{15850277362961153449ull, 11142949299381132019ull, 4623381976322498769ull, 5055113629970206684ull}}, {{15201160685274053908ull, 93628568944251312ull, 5779227470403123462ull, 6318892037462758355ull}}, {{554706782883015769ull, 9340407748035089949ull, 2612348319576516423ull, 7898615046828447944ull}}, {{2652534748515578808ull, 12755283870163013074ull, 1632717699735322764ull, 4936634404267779965ull}}, {{12539040472499249317ull, 15944104837703766342ull, 6652583143096541359ull, 6170793005334724956ull}}, {{6450428553769285838ull, 15318445028702320024ull, 8315728928870676699ull, 7713491256668406195ull}}, {{4031517846105803649ull, 7268185133725256063ull, 2891487571330478985ull, 4820932035417753872ull}}, {{427711289204866657ull, 13696917435583957983ull, 3614359464163098731ull, 6026165044272192340ull}}, {{14369697166788247034ull, 12509460776052559574ull, 4517949330203873414ull, 7532706305340240425ull}}, {{4369374710815266492ull, 3206726966605461830ull, 14352933377445890644ull, 4707941440837650265ull}}, {{14685090425373858923ull, 4008408708256827287ull, 4106108666525199593ull, 5884926801047062832ull}}, {{13744677013289935750ull, 9622196903748422013ull, 5132635833156499491ull, 7356158501308828540ull}}, {{3345788211330255975ull, 7416060111258139613ull, 6415794791445624364ull, 9195198126636035675ull}}, {{4396960641295103937ull, 13858409606391113066ull, 1704028735439821275ull, 5746998829147522297ull}}, {{14719572838473655729ull, 12711325989561503428ull, 6741721937727164498ull, 7183748536434402871ull}}, {{18399466048092069661ull, 6665785450097103477ull, 3815466403731567719ull, 8979685670543003589ull}}, {{13805509289271237490ull, 11083644933951771529ull, 4690509511545923776ull, 5612303544089377243ull}}, {{3421828556306883151ull, 13854556167439714412ull, 1251450871005016816ull, 7015379430111721554ull}}, {{4277285695383603938ull, 17318195209299643015ull, 10787685625611046828ull, 8769224287639651942ull}}, {{9590832587255834317ull, 1600499968957501076ull, 2130617497579516364ull, 5480765179774782464ull}}, {{11988540734069792897ull, 2000624961196876345ull, 2663271871974395455ull, 6850956474718478080ull}}, {{1150617862305077409ull, 16335839256778259144ull, 3329089839967994318ull, 8563695593398097600ull}}, {{719136163940673381ull, 5598213517059024061ull, 2080681149979996449ull, 5352309745873811000ull}}, {{5510606223353229630ull, 11609452914751167980ull, 2600851437474995561ull, 6690387182342263750ull}}, {{6888257779191537037ull, 676758088156796263ull, 12474436333698520260ull, 8362983977927829687ull}}, {{11222690139635792504ull, 9646345841952773472ull, 14714051736202657018ull, 5226864986204893554ull}}, {{14028362674544740630ull, 2834560265586191032ull, 9169192633398545465ull, 6533581232756116943ull}}, {{17535453343180925788ull, 8154886350410126694ull, 6849804773320793927ull, 8166976540945146179ull}}, {{6347972321060690714ull, 12014332996647411040ull, 1975284974111802252ull, 5104360338090716362ull}}, {{7934965401325863392ull, 15017916245809263800ull, 11692478254494528623ull, 6380450422613395452ull}}, {{9918706751657329240ull, 14160709288834191846ull, 14615597818118160779ull, 7975563028266744315ull}}, {{1587505701358442871ull, 6544600296307675952ull, 6828905627110156535ull, 4984726892666715197ull}}, {{1984382126698053589ull, 3569064351957207036ull, 13147818052315083573ull, 6230908615833393996ull}}, {{2480477658372566986ull, 9073016458373896699ull, 16434772565393854466ull, 7788635769791742495ull}}, {{17691199600978712030ull, 10282321304911073340ull, 17189261881012240897ull, 4867897356119839059ull}}, {{3667255427513838422ull, 17464587649566229580ull, 16874891332837913217ull, 6084871695149798824ull}}, {{4584069284392298027ull, 7995676506675623263ull, 2646870092337839906ull, 7606089618937248531ull}}, {{9782572330386268123ull, 9608983835099652443ull, 17795194872207007605ull, 4753806011835780331ull}}, {{7616529394555447250ull, 16622915812301953458ull, 17632307571831371602ull, 5942257514794725414ull}}, {{297289706339533254ull, 11555272728522666015ull, 12817012427934438695ull, 7427821893493406768ull}}, {{7103335094103290140ull, 14139574482967748115ull, 8010632767459024184ull, 4642388683433379230ull}}, {{4267482849201724771ull, 17674468103709685144ull, 789918922469004422ull, 5802985854291724038ull}}, {{5334353561502155963ull, 12869713092782330622ull, 10210770689941031336ull, 7253732317864655047ull}}, {{15891313988732470762ull, 16087141365977913277ull, 8151777343998901266ull, 9067165397330818809ull}}, {{12237914252171488178ull, 14666149372163583702ull, 16624075886067783051ull, 5666978373331761755ull}}, {{6074020778359584415ull, 13721000696777091724ull, 16168408839157340910ull, 7083722966664702194ull}}, {{7592525972949480518ull, 7927878834116588847ull, 10987139012091900330ull, 8854653708330877743ull}}, {{11662857760734507180ull, 9566610289750255933ull, 13784490910198519562ull, 5534158567706798589ull}}, {{743514145635970263ull, 2734890825333044109ull, 3395555582465985741ull, 6917698209633498237ull}}, {{5541078700472350733ull, 8030299550093693040ull, 8856130496509870080ull, 8647122762041872796ull}}, {{3463174187795219208ull, 5018937218808558150ull, 14758453597173444608ull, 5404451726276170497ull}}, {{13552339771598799818ull, 6273671523510697687ull, 4613008941184642048ull, 6755564657845213122ull}}, {{12328738696071111869ull, 7842089404388372109ull, 14989633213335578368ull, 8444455822306516402ull}}, {{10011304694258138870ull, 4901305877742732568ull, 13980206776762124384ull, 5277784888941572751ull}}, {{12514130867822673587ull, 6126632347178415710ull, 12863572452525267576ull, 6597231111176965939ull}}, {{6419291547923566176ull, 7658290433973019638ull, 11467779547229196566ull, 8246538888971207424ull}}, {{17847115272734392572ull, 174745502805749369ull, 7167362217018247854ull, 5154086805607004640ull}}, {{8473836035635827003ull, 9441803915361962520ull, 8959202771272809817ull, 6442608507008755800ull}}, {{10592295044544783754ull, 16413940912629841054ull, 11199003464091012271ull, 8053260633760944750ull}}, {{2008498384413101942ull, 17176242098034732515ull, 2387691146629494765ull, 5033287896100590469ull}}, {{16345681035798541140ull, 7635244567261251931ull, 7596299951714256361ull, 6291609870125738086ull}}, {{15820415276320788521ull, 14155741727503952818ull, 272002902788044643ull, 7864512337657172608ull}}, {{14499445566127880730ull, 6541495570476276559ull, 170001814242527902ull, 4915320211035732880ull}}, {{13512620939232463008ull, 17400241499950121507ull, 212502267803159877ull, 6144150263794666100ull}}, {{12279090155613190856ull, 7915243819655488172ull, 265627834753949847ull, 7680187829743332625ull}}, {{16897803384113020093ull, 11864556414925761963ull, 11695232442789688414ull, 4800117393589582890ull}}, {{16510568211713887212ull, 5607323481802426646ull, 5395668516632334710ull, 6000146741986978613ull}}, {{11414838227787583207ull, 16232526389107809116ull, 11356271664217806291ull, 7500183427483723266ull}}, {{16357645929222015313ull, 7839485983978686745ull, 11709355808563516836ull, 4687614642177327041ull}}, {{6611999356245355429ull, 9799357479973358432ull, 801636705422232333ull, 5859518302721658802ull}}, {{8264999195306694286ull, 16860882868394085944ull, 10225417918632566224ull, 7324397878402073502ull}}, {{10331248994133367857ull, 2629359511783055814ull, 3558400361435931973ull, 9155497348002591878ull}}, {{1845344602905967007ull, 3949192704078103836ull, 16059058281179621195ull, 5722185842501619923ull}}, {{2306680753632458758ull, 324804861670241891ull, 15462136833047138590ull, 7152732303127024904ull}}, {{16718408997322737160ull, 9629378113942578171ull, 880926967599371621ull, 8940915378908781131ull}}, {{8143162614113016773ull, 8324204330427805309ull, 16691480419245464927ull, 5588072111817988206ull}}, {{14790639286068658870ull, 5793569394607368732ull, 11640978487202055351ull, 6985090139772485258ull}}, {{41555033876271972ull, 2630275724831823012ull, 5327851072147793381ull, 8731362674715606573ull}}, {{9249343933027445790ull, 3949765337233583334ull, 5635749929306064815ull, 5457101671697254108ull}}, {{2338307879429531430ull, 325520653114591264ull, 7044687411632581019ull, 6821377089621567635ull}}, {{2922884849286914287ull, 14241958871675402792ull, 4194173246113338369ull, 8526721362026959544ull}}, {{1826803030804321430ull, 1983695267156044889ull, 2621358278820836481ull, 5329200851266849715ull}}, {{6895189806932789691ull, 7091305102372444015ull, 17111755903808209313ull, 6661501064083562143ull}}, {{4007301240238599210ull, 13475817396392942923ull, 16778008861332873737ull, 8326876330104452679ull}}, {{198720265935430554ull, 1504856845104507471ull, 17403784565974127942ull, 5204297706315282924ull}}, {{14083458387701451905ull, 11104443093235410146ull, 3307986633758108311ull, 6505372132894103656ull}}, {{8380950947772039073ull, 9268867848116874779ull, 4134983292197635389ull, 8131715166117629570ull}}, {{2932251333143830469ull, 8098885414286740689ull, 7196050576050910022ull, 5082321978823518481ull}}, {{8277000184857175990ull, 900234731003650053ull, 13606749238491025432ull, 6352902473529398101ull}}, {{14957936249498857891ull, 1125293413754562566ull, 3173378492831618078ull, 7941128091911747627ull}}, {{4737024137509398278ull, 14538366438878765316ull, 18124262622515618962ull, 4963205057444842266ull}}, {{5921280171886747847ull, 8949586011743680837ull, 13431956241289747895ull, 6204006321806052833ull}}, {{12013286233285822713ull, 6575296496252213142ull, 2954887246330021157ull, 7755007902257566042ull}}, {{2896617877376251292ull, 6415403319371327166ull, 6458490547383651127ull, 4846879938910978776ull}}, {{12844144383575089923ull, 3407568130786771053ull, 8073113184229563909ull, 6058599923638723470ull}}, {{2220122424186698691ull, 8871146181910851721ull, 868019443432179078ull, 7573249904548404338ull}}, {{12916791561185156442ull, 932780345266894421ull, 5154198170572499828ull, 4733281190342752711ull}}, {{2310931396199281841ull, 1165975431583618027ull, 1831061694788236881ull, 5916601487928440889ull}}, {{16723722300531266013ull, 6069155307906910437ull, 6900513136912684005ull, 7395751859910551111ull}}, {{12758169447045735210ull, 6099065076655512975ull, 11230349738211509359ull, 4622344912444094444ull}}, {{11336025790379781109ull, 3012145327392003315ull, 14037937172764386699ull, 5777931140555118055ull}}, {{9558346219547338482ull, 17600239714522167856ull, 12935735447528095469ull, 7222413925693897569ull}}, {{11947932774434173102ull, 8165241587870546108ull, 2334611254127955625ull, 9028017407117371962ull}}, {{16690830020876133997ull, 16632491038487561077ull, 6070818052257360169ull, 5642510879448357476ull}}, {{7028479470813003784ull, 6955555742827287635ull, 7588522565321700212ull, 7053138599310446845ull}}, {{4173913320088866826ull, 8694444678534109544ull, 14097339225079513169ull, 8816423249138058556ull}}, {{2608695825055541766ull, 16963242970152288225ull, 18034209052529471538ull, 5510264530711286597ull}}, {{7872555799746815112ull, 11980681675835584473ull, 8707703260379675711ull, 6887830663389108247ull}}, {{14452380768110906794ull, 10364166076367092687ull, 6272943057047206735ull, 8609788329236385309ull}}, {{15950267007710398602ull, 13395132825370514785ull, 6226432419868198161ull, 5381117705772740818ull}}, {{6102775704355834541ull, 2908857976430979770ull, 17006412561690023510ull, 6726397132215926022ull}}, {{16851841667299568984ull, 12859444507393500520ull, 12034643665257753579ull, 8407996415269907528ull}}, {{10532401042062230615ull, 5731309807907243873ull, 7521652290786095987ull, 5254997759543692205ull}}, {{17777187321005176173ull, 2552451241456666937ull, 14013751381910007888ull, 6568747199429615256ull}}, {{8386426095974306504ull, 3190564051820833672ull, 17517189227387509860ull, 8210933999287019070ull}}, {{5241516309983941565ull, 11217474569242796853ull, 6336557248689805758ull, 5131833749554386919ull}}, {{11163581405907314860ull, 4798471174698720258ull, 3309010542434869294ull, 6414792186942983649ull}}, {{4731104720529367767ull, 15221461005228176131ull, 8747949196470974521ull, 8018490233678729561ull}}, {{651097441117160903ull, 2595884100626528226ull, 16996683293862828836ull, 5011556396049205975ull}}, {{10037243838251226936ull, 3244855125783160282ull, 16634168098901148141ull, 6264445495061507469ull}}, {{3323182760959257862ull, 8667754925656338257ull, 6957652068344271464ull, 7830556868826884337ull}}, {{13606204271668005924ull, 5417346828535211410ull, 15877747588783639425ull, 4894098043016802710ull}}, {{7784383302730231597ull, 11383369554096402167ull, 10623812449124773473ull, 6117622553771003388ull}}, {{5118793109985401592ull, 394153887338338997ull, 13279765561405966842ull, 7647028192213754235ull}}, {{5505088702954569947ull, 4858032198013849777ull, 5994010466665035324ull, 4779392620133596397ull}}, {{11493046897120600338ull, 6072540247517312221ull, 12104199101758682059ull, 5974240775166995496ull}}, {{531250566118586710ull, 2978989290969252373ull, 15130248877198352574ull, 7467800968958744370ull}}, {{2637874613037810646ull, 15696926362137946445ull, 14068091566676358262ull, 4667375605599215231ull}}, {{7909029284724651211ull, 10397785915817657248ull, 12973428439918059924ull, 5834219506999019039ull}}, {{9886286605905814014ull, 12997232394772071560ull, 11605099531470187001ull, 7292774383748773799ull}}, {{12357858257382267517ull, 2411482438182925738ull, 9894688395910345848ull, 9115967979685967249ull}}, {{12335347429291305103ull, 1507176523864328586ull, 17713395293512435915ull, 5697479987303729530ull}}, {{6195812249759355570ull, 15719028710112574445ull, 12918372080035769085ull, 7121849984129661913ull}}, {{12356451330626582366ull, 5813727832358554344ull, 2312907044762547645ull, 8902312480162077392ull}}, {{7722782081641613979ull, 5939422904437790417ull, 1445566902976592278ull, 5563945300101298370ull}}, {{14265163620479405378ull, 16647650667402013829ull, 11030330665575516155ull, 6954931625126622962ull}}, {{3996396470317093010ull, 16197877315825129383ull, 4564541295114619386ull, 8693664531408278703ull}}, {{9415276821589264988ull, 14735359340818093768ull, 9770367337087718972ull, 5433540332130174189ull}}, {{11769096026986581234ull, 18419199176022617210ull, 16824645189787036619ull, 6791925415162717736ull}}, {{5487997996878450735ull, 18412312951600883609ull, 2584062413524244158ull, 8489906768953397171ull}}, {{14959213794117501469ull, 6896009576323164351ull, 17755940072948510263ull, 5306191730595873231ull}}, {{14087331224219488933ull, 4008325951976567535ull, 17583239072758249925ull, 6632739663244841539ull}}, {{12997478011846973262ull, 9622093458398097323ull, 17367362822520424502ull, 8290924579056051924ull}}, {{5817580748190664337ull, 1402122393071422923ull, 1631229727220489506ull, 5181827861910032453ull}}, {{2660289916810942517ull, 10976025028194054462ull, 6650723177452999786ull, 6477284827387540566ull}}, {{12548734432868453954ull, 4496659248387792269ull, 17536776008671025541ull, 8096606034234425707ull}}, {{10148802029756477673ull, 5116255039456064120ull, 8654641996205697011ull, 5060378771396516067ull}}, {{12686002537195597092ull, 1783632780892692246ull, 6206616476829733360ull, 6325473464245645084ull}}, {{6634131134639720556ull, 2229540976115865308ull, 7758270596037166700ull, 7906841830307056355ull}}, {{13369703996004601156ull, 10616835146927191625ull, 2543076113309535235ull, 4941776143941910222ull}}, {{2877071939723587733ull, 8659357915231601628ull, 12402217178491694852ull, 6177220179927387777ull}}, {{3596339924654484666ull, 10824197394039502035ull, 1667713417832454853ull, 7721525224909234722ull}}, {{18388613517404910580ull, 9070966380488382723ull, 5654006904572672187ull, 4825953265568271701ull}}, {{18374080878328750321ull, 6727021957183090500ull, 11679194649143228138ull, 6032441581960339626ull}}, {{4520857024201386286ull, 17632149483333638934ull, 5375621274574259364ull, 7540551977450424533ull}}, {{16660593695408030141ull, 1796721390228748525ull, 5665606305822606055ull, 4712844985906515333ull}}, {{6990684063977873964ull, 16080959793068099369ull, 11693693900705645472ull, 5891056232383144166ull}}, {{13350041098399730358ull, 1654455667625572595ull, 5393745339027281033ull, 7363820290478930208ull}}, {{12075865354572275044ull, 6679755602959353648ull, 6742181673784101291ull, 9204775363098662760ull}}, {{7547415846607671903ull, 1869004242635902078ull, 4213863546115063307ull, 5752984601936664225ull}}, {{210897771404814070ull, 16171313358577041310ull, 9879015451071217037ull, 7191230752420830281ull}}, {{9486994251110793396ull, 6379083642939137925ull, 16960455332266409201ull, 8989038440526037851ull}}, {{8235214416157939824ull, 15516142322905430963ull, 8294441573452811798ull, 5618149025328773657ull}}, {{5682332001770036876ull, 10171805866777012896ull, 14979737985243402652ull, 7022686281660967071ull}}, {{7102915002212546095ull, 12714757333471266120ull, 14112986463126865411ull, 8778357852076208839ull}}, {{4439321876382841310ull, 5640880324205847373ull, 15738145567095372738ull, 5486473657547630524ull}}, {{10160838363905939541ull, 16274472442112085024ull, 1225937885159664306ull, 6858092071934538156ull}}, {{12701047954882424426ull, 11119718515785330472ull, 1532422356449580383ull, 8572615089918172695ull}}, {{7938154971801515267ull, 13867353100006913401ull, 7875293000422069595ull, 5357884431198857934ull}}, {{14534379733179281987ull, 12722505356581253847ull, 620744213672811186ull, 6697355538998572418ull}}, {{13556288648046714580ull, 6679759658871791501ull, 9999302303945789791ull, 8371694423748215522ull}}, {{10778523414242890565ull, 11092378814435951544ull, 10861249958393506523ull, 5232309014842634701ull}}, {{13473154267803613206ull, 9253787499617551526ull, 18188248466419271058ull, 6540386268553293376ull}}, {{7618070797899740699ull, 2343862337667163600ull, 4288566509314537207ull, 8175482835691616721ull}}, {{4761294248687337937ull, 8382442988683059106ull, 14209569114390055514ull, 5109676772307260450ull}}, {{15174989847713948229ull, 1254681698999048074ull, 8538589356132793585ull, 6387095965384075563ull}}, {{9745365272787659478ull, 6180038142176197997ull, 6061550676738604077ull, 7983869956730094454ull}}, {{8396696304705981126ull, 6168366848073817700ull, 17623527228243791260ull, 4989918722956309033ull}}, {{10495870380882476408ull, 7710458560092272125ull, 8194350980022575363ull, 6237398403695386292ull}}, {{17731523994530483413ull, 5026387181687952252ull, 10242938725028219204ull, 7796748004619232865ull}}, {{1858830459726776325ull, 12364864025409745966ull, 17931051749211106762ull, 4872967502887020540ull}}, {{11546910111513246215ull, 6232707994907406649ull, 3967070612804331837ull, 6091209378608775676ull}}, {{598579584109394056ull, 12402571012061646216ull, 4958838266005414796ull, 7614011723260969595ull}}, {{374112240068371285ull, 16974978919393304693ull, 793430907039690295ull, 4758757327038105997ull}}, {{5079326318512852011ull, 16607037630814242962ull, 5603474652227000773ull, 5948446658797632496ull}}, {{15572529934995840821ull, 6923738983235639990ull, 7004343315283750967ull, 7435558323497040620ull}}, {{5121145190945012609ull, 11244865892163356850ull, 13601086608907120162ull, 4647223952185650387ull}}, {{15624803525536041570ull, 4832710328349420254ull, 12389672242706512299ull, 5809029940232062984ull}}, {{10307632370065276154ull, 1429201892009387414ull, 15487090303383140374ull, 7261287425290078730ull}}, {{3661168425726819384ull, 11009874401866510076ull, 10135490842374149659ull, 9076609281612598413ull}}, {{11511602302934037923ull, 4575328491952874845ull, 8640524785697537489ull, 5672880801007874008ull}}, {{554444823385383692ull, 10330846633368481461ull, 10800655982121921861ull, 7091101001259842510ull}}, {{5304742047659117519ull, 17525244310137989730ull, 4277447940797626518ull, 8863876251574803138ull}}, {{7927149798214336353ull, 6341591675408855677ull, 7285090981425904478ull, 5539922657234251961ull}}, {{14520623266195308346ull, 17150361631115845404ull, 13718049745209768501ull, 6924903321542814951ull}}, {{18150779082744135432ull, 7602893983612643043ull, 12535876163084822723ull, 8656129151928518689ull}}, {{9038393917501390693ull, 2445965730544207950ull, 917393574286932346ull, 5410080719955324181ull}}, {{2074620360021962558ull, 12280829200035035746ull, 5758427986286053336ull, 6762600899944155226ull}}, {{11816647486882229006ull, 15351036500043794682ull, 16421407019712342478ull, 8453251124930194032ull}}, {{11997090697728781033ull, 4982711794099983772ull, 10263379387320214049ull, 5283281953081371270ull}}, {{14996363372160976291ull, 10840075761052367619ull, 3605852197295491753ull, 6604102441351714088ull}}, {{14133768196773832460ull, 18161780719742847428ull, 4507315246619364691ull, 8255128051689642610ull}}, {{18056977159838421095ull, 9045269940625585690ull, 7428758047564490836ull, 5159455032306026631ull}}, {{13347849412943250561ull, 11306587425781982113ull, 4674261541028225641ull, 6449318790382533289ull}}, {{2849753710896899489ull, 298176226945313930ull, 10454512944712669956ull, 8061648487978166611ull}}, {{6392782087737950085ull, 9409732178695597014ull, 4228227581231724770ull, 5038530304986354132ull}}, {{17214349646527213414ull, 2538793186514720459ull, 5285284476539655963ull, 6298162881232942665ull}}, {{16906251039731628864ull, 17008549538425564286ull, 11218291614101957857ull, 7872703601541178331ull}}, {{5954720881404880136ull, 3712814433874895823ull, 4705589249600029709ull, 4920439750963236457ull}}, {{2831715083328712266ull, 9252704060771007683ull, 10493672580427425040ull, 6150549688704045571ull}}, {{17374701909443054044ull, 11565880075963759603ull, 8505404707106893396ull, 7688187110880056964ull}}, {{8553345684188214826ull, 16452047084332125560ull, 14539249978796584180ull, 4805116944300035602ull}}, {{10691682105235268532ull, 2118314781705605334ull, 8950690436640954418ull, 6006396180375044503ull}}, {{4141230594689309857ull, 11871265513986782476ull, 6576677027373805118ull, 7507995225468805629ull}}, {{11811641158535594469ull, 2807854927814351143ull, 6416266151322322151ull, 4692497015918003518ull}}, {{10152865429742105182ull, 17344876715050102641ull, 17243704726007678496ull, 5865621269897504397ull}}, {{17302767805605019381ull, 3234351820103076685ull, 7719572852227434409ull, 7332026587371880497ull}}, {{7793401701724110514ull, 8654625793556233761ull, 14261152083711680915ull, 9165033234214850621ull}}, {{16400091109646038832ull, 3103298111758952148ull, 11219063061533494524ull, 5728145771384281638ull}}, {{2053369813347996923ull, 3879122639698690186ull, 4800456790062092347ull, 7160182214230352048ull}}, {{11790084303539771962ull, 237217281195974828ull, 6000570987577615434ull, 8950227767787940060ull}}, {{16592174726567133285ull, 4759946819174872171ull, 12973728904090785454ull, 5593892354867462537ull}}, {{16128532389781528702ull, 15173305560823366022ull, 2382103074831318105ull, 6992365443584328172ull}}, {{10937293450372135069ull, 5131573895747043816ull, 2977628843539147632ull, 8740456804480410215ull}}, {{6835808406482584418ull, 3207233684841902385ull, 8778547054853049126ull, 5462785502800256384ull}}, {{13156446526530618427ull, 13232414142907153789ull, 10973183818566311407ull, 6828481878500320480ull}}, {{2610500102881109321ull, 11928831660206554333ull, 13716479773207889259ull, 8535602348125400600ull}}, {{3937405573514387278ull, 5149676778415402506ull, 8572799858254930787ull, 5334751467578375375ull}}, {{14145129003747759905ull, 1825409954591865228ull, 6104313804391275580ull, 6668439334472969219ull}}, {{17681411254684699881ull, 2281762443239831535ull, 3018706237061706571ull, 8335549168091211524ull}}, {{17968411061819019282ull, 17567002591520752373ull, 11110063435018342414ull, 5209718230057007202ull}}, {{8625455771991610390ull, 12735381202546164659ull, 4664207256918152210ull, 6512147787571259003ull}}, {{6170133696562125084ull, 6695854466327930016ull, 1218573052720302359ull, 8140184734464073754ull}}, {{3856333560351328178ull, 11102438069096038116ull, 5373294176377576878ull, 5087615459040046096ull}}, {{4820416950439160222ull, 4654675549515271837ull, 6716617720471971098ull, 6359519323800057620ull}}, {{10637207206476338181ull, 15041716473748865604ull, 8395772150589963872ull, 7949399154750072025ull}}, {{15871626540902487172ull, 9401072796093041002ull, 16776572640187197180ull, 4968374471718795015ull}}, {{10616161139273333156ull, 11751340995116301253ull, 16359029781806608571ull, 6210468089648493769ull}}, {{17881887442519054349ull, 10077490225467988662ull, 6613729171976097002ull, 7763085112060617212ull}}, {{6564493633147021064ull, 10910117409344880818ull, 13356952769339836434ull, 4851928195037885757ull}}, {{17428989078288552138ull, 4414274724826325214ull, 2861132906392631831ull, 6064910243797357197ull}}, {{12562864311005914365ull, 906157387605518614ull, 8188102151418177693ull, 7581137804746696496ull}}, {{3240104175951308574ull, 2872191376467143086ull, 5117563844636361058ull, 4738211127966685310ull}}, {{13273502256793911526ull, 12813611257438704665ull, 15620326842650227130ull, 5922763909958356637ull}}, {{2756819765710225695ull, 6793642034943605024ull, 5690350498030620201ull, 7403454887447945797ull}}, {{1723012353568891060ull, 15775241317908222900ull, 5862312070482831577ull, 4627159304654966123ull}}, {{2153765441961113824ull, 5883993592103114913ull, 2716204069676151568ull, 5783949130818707654ull}}, {{7303892820878780184ull, 7354991990128893641ull, 12618627123949965268ull, 7229936413523384567ull}}, {{13741552044525863134ull, 9193739987661117051ull, 11161597886510068681ull, 9037420516904230709ull}}, {{6282627018614970507ull, 17275302538356667917ull, 9281841688282486877ull, 5648387823065144193ull}}, {{12464969791696101038ull, 7759070117663671184ull, 16213988128780496501ull, 7060484778831430241ull}}, {{15581212239620126297ull, 14310523665506976884ull, 6432427105693456914ull, 8825605973539287802ull}}, {{514885612907803128ull, 13555763309369248457ull, 8631952959485798475ull, 5516003733462054876ull}}, {{5255293034562141814ull, 12333018118284172667ull, 10789941199357248094ull, 6895004666827568595ull}}, {{1957430274775289363ull, 6192900611000440026ull, 8875740480769172214ull, 8618755833534460744ull}}, {{5835079940161943756ull, 17705620937157438728ull, 5547337800480732633ull, 5386722395959037965ull}}, {{7293849925202429695ull, 8296968116164634698ull, 11545858269028303696ull, 6733402994948797456ull}}, {{18340684443357812927ull, 10371210145205793372ull, 14432322836285379620ull, 8416753743685996820ull}}, {{2239555740243857271ull, 15705378377608396666ull, 18243573809533138070ull, 5260471089803748012ull}}, {{12022816712159597397ull, 10408350935155720024ull, 4357723188206870972ull, 6575588862254685016ull}}, {{15028520890199496746ull, 13010438668944650030ull, 5447153985258588715ull, 8219486077818356270ull}}, {{4781139537947297562ull, 5825681158876712317ull, 17239529296068781659ull, 5137178798636472668ull}}, {{10588110440861509857ull, 2670415430168502492ull, 3102667546376425458ull, 6421473498295590836ull}}, {{13235138051076887321ull, 12561391324565403923ull, 3878334432970531822ull, 8026841872869488545ull}}, {{5966118272709360624ull, 3239183559425989548ull, 13953174066675052149ull, 5016776170543430340ull}}, {{7457647840886700780ull, 8660665467709874839ull, 17441467583343815186ull, 6270970213179287925ull}}, {{4710373782680988071ull, 1602459797782567741ull, 7966776423897605271ull, 7838712766474109907ull}}, {{5249826623389311496ull, 7919066401255186694ull, 2673392255722309342ull, 4899195479046318692ull}}, {{15785655316091415178ull, 675460964714207559ull, 3341740319652886678ull, 6123994348807898365ull}}, {{15120383126686881069ull, 10067698242747535257ull, 8788861417993496251ull, 7654992936009872956ull}}, {{2532710426538218812ull, 3986468392503515584ull, 14716410423100710965ull, 4784370585006170597ull}}, {{3165888033172773515ull, 9594771509056782384ull, 4560454973593724994ull, 5980463231257713247ull}}, {{3957360041465966894ull, 2770092349466202172ull, 1088882698564768339ull, 7475579039072141559ull}}, {{11696722062771005117ull, 17872208782912234021ull, 7598080714244062067ull, 4672236899420088474ull}}, {{785844523181592684ull, 17728574960212904623ull, 274228855950301776ull, 5840296124275110593ull}}, {{14817363709259154567ull, 3713974626556579162ull, 4954472088365265125ull, 7300370155343888241ull}}, {{9298332599719167400ull, 9254154301623111857ull, 10804776128883969310ull, 9125462694179860301ull}}, {{17340672920892949385ull, 1172160420087057006ull, 9058828089766174771ull, 5703414183862412688ull}}, {{12452469114261410923ull, 15300258580390984970ull, 11323535112207718463ull, 7129267729828015860ull}}, {{6342214355971987846ull, 14513637207061343309ull, 14154418890259648079ull, 8911584662285019825ull}}, {{6269726981696186356ull, 15988552282054421424ull, 1928982778771198193ull, 5569740413928137391ull}}, {{7837158727120232945ull, 6150632297285863068ull, 16246286528746161454ull, 6962175517410171738ull}}, {{9796448408900291181ull, 16911662408462104643ull, 11084486124077926009ull, 8702719396762714673ull}}, {{3816937246348988036ull, 3652259977647733546ull, 10274799907621900ull, 5439199622976696671ull}}, {{13994543594791010853ull, 4565324972059666932ull, 13847901555166691087ull, 6798999528720870838ull}}, {{17493179493488763566ull, 1094970196647195761ull, 8086504907103588051ull, 8498749410901088548ull}}, {{4015708155789395373ull, 16825257437400355015ull, 14277437603794518339ull, 5311718381813180342ull}}, {{407949176309356312ull, 16419885778323055865ull, 8623424967888372116ull, 6639647977266475428ull}}, {{5121622488814083294ull, 2078113149194268215ull, 10779281209860465146ull, 8299559971583094285ull}}, {{10118543083149883915ull, 5910506736673805538ull, 9042893765376484668ull, 5187224982239433928ull}}, {{3424806817082579086ull, 7388133420842256923ull, 11303617206720605835ull, 6484031227799292410ull}}, {{18116066576635387569ull, 4623480757625433249ull, 4906149471545981486ull, 8105039034749115513ull}}, {{4405012582756035375ull, 16724733528798059493ull, 14595558465784708188ull, 5065649396718197195ull}}, {{10117951746872432123ull, 2459172837288022750ull, 13632762063803497332ull, 6332061745897746494ull}}, {{3424067646735764345ull, 3073966046610028438ull, 7817580542899595857ull, 7915077182372183118ull}}, {{15975100334492016428ull, 13450443825199737533ull, 274301820884859506ull, 4946923238982614449ull}}, {{6133817362832856823ull, 7589682744644896109ull, 4954563294533462287ull, 6183654048728268061ull}}, {{12278957721968458932ull, 4875417412378732232ull, 10804890136594215763ull, 7729567560910335076ull}}, {{7674348576230286833ull, 741292873523013693ull, 15976428372226160660ull, 4830979725568959422ull}}, {{14204621738715246445ull, 926616091903767116ull, 10747163428427925017ull, 6038724656961199278ull}}, {{17755777173394058056ull, 5769956133307096799ull, 4210582248680130463ull, 7548405821201499098ull}}, {{18014889761012368141ull, 10523751610958017355ull, 7243299923852469443ull, 4717753638250936936ull}}, {{17906926182838072272ull, 8543003495270133790ull, 9054124904815586804ull, 5897192047813671170ull}}, {{13160285691692814532ull, 10678754369087667238ull, 2094284094164707697ull, 7371490059767088963ull}}, {{7226985077761242357ull, 17960128979786971952ull, 16452913172988048333ull, 9214362574708861203ull}}, {{4516865673600776473ull, 13530923621580551422ull, 7977227723903836256ull, 5758976609193038252ull}}, {{14869454128855746400ull, 16913654526975689277ull, 9971534654879795320ull, 7198720761491297815ull}}, {{4751759605787519288ull, 2695324085010059981ull, 7852732300172356247ull, 8998400951864122269ull}}, {{5275692762830893507ull, 8602106580772369344ull, 7213800696821416606ull, 5624000594915076418ull}}, {{6594615953538616883ull, 1529261189110685872ull, 18240622907881546566ull, 7030000743643845522ull}}, {{8243269941923271104ull, 11134948523243133148ull, 13577406597997157399ull, 8787500929554806903ull}}, {{14375415750556820248ull, 13876871854668040073ull, 15403408151389305230ull, 5492188080971754314ull}}, {{4134211632913861598ull, 8122717781480274284ull, 10030888152381855730ull, 6865235101214692893ull}}, {{5167764541142326998ull, 930025189995567047ull, 17150296208904707567ull, 8581543876518366116ull}}, {{10147381865855036230ull, 7498794771388311260ull, 1495563093710666421ull, 5363464922823978823ull}}, {{12684227332318795287ull, 13985179482662776979ull, 15704511922420496738ull, 6704331153529973528ull}}, {{11243598146971106205ull, 8258102316473695416ull, 1183895829316069307ull, 8380413941912466911ull}}, {{7027248841856941378ull, 2855470938582365683ull, 7657463920963625173ull, 5237758713695291819ull}}, {{4172375033893788819ull, 8181024691655345008ull, 4960143882777143562ull, 6547198392119114774ull}}, {{5215468792367236023ull, 1002908827714405452ull, 15423551890326205261ull, 8183997990148893467ull}}, {{12483040032084298323ull, 2932661026535197359ull, 7333876922240184336ull, 5114998743843058417ull}}, {{10992114021677984999ull, 3665826283168996699ull, 13779032171227618324ull, 6393748429803823021ull}}, {{9128456508670093345ull, 4582282853961245874ull, 3388732158752359193ull, 7992185537254778777ull}}, {{10316971336346196245ull, 14393141829794248431ull, 13647172645288694255ull, 4995115960784236735ull}}, {{8284528152005357402ull, 13379741268815422635ull, 12447279788183479915ull, 6243894950980295919ull}}, {{5743974171579308848ull, 12112990567591890390ull, 10947413716801961990ull, 7804868688725369899ull}}, {{17425041912519231742ull, 2958933086317543589ull, 4536290563787532292ull, 4878042930453356187ull}}, {{7946244335366875966ull, 3698666357896929487ull, 1058677186307027461ull, 6097553663066695234ull}}, {{5321119400781207053ull, 9235018965798549763ull, 10546718519738560134ull, 7621942078833369042ull}}, {{1019856616274560456ull, 1160200835196705698ull, 11203385093263987988ull, 4763713799270855651ull}}, {{10498192807197976378ull, 1450251043995882122ull, 9392545348152597081ull, 5954642249088569564ull}}, {{3899368972142694665ull, 6424499823422240557ull, 11740681685190746351ull, 7443302811360711955ull}}, {{4742948616802878118ull, 10932841417279982204ull, 5032083044030522517ull, 4652064257100444972ull}}, {{5928685771003597647ull, 18277737790027365659ull, 6290103805038153146ull, 5815080321375556215ull}}, {{2799171195327109154ull, 13623800200679431266ull, 3250943737870303529ull, 7268850401719445269ull}}, {{12722336031013662251ull, 3194692195567125370ull, 8675365690765267316ull, 9086063002149306586ull}}, {{12563146037810926811ull, 11220054659084229164ull, 10033789575155679976ull, 5678789376343316616ull}}, {{15703932547263658514ull, 14025068323855286455ull, 12542236968944599970ull, 7098486720429145770ull}}, {{15018229665652185238ull, 8307963367964332261ull, 6454424174325974155ull, 8873108400536432213ull}}, {{11692236550246309726ull, 2886634095764013711ull, 6339858118167427799ull, 5545692750335270133ull}}, {{10003609669380499253ull, 17443350674987180851ull, 12536508666136672652ull, 6932115937919087666ull}}, {{7892826068298236162ull, 3357444270024424448ull, 6447263795816065008ull, 8665144922398859583ull}}, {{4933016292686397602ull, 2098402668765265280ull, 10947068900026122486ull, 5415715576499287239ull}}, {{6166270365857997002ull, 11846375372811357408ull, 9072150106605265203ull, 6769644470624109049ull}}, {{7707837957322496252ull, 10196283197586808856ull, 15951873651683969408ull, 8462055588280136311ull}}, {{4817398723326560158ull, 6372676998491755535ull, 16887450059943562736ull, 5288784742675085194ull}}, {{1410062385730812293ull, 7965846248114694419ull, 11885940538074677612ull, 6610980928343856493ull}}, {{15597636037445679079ull, 9957307810143368023ull, 1022367617311183303ull, 8263726160429820617ull}}, {{16666051551044631280ull, 13140846408980686870ull, 12168194806887959324ull, 5164828850268637885ull}}, {{11609192401951013292ull, 16426058011225858588ull, 1375185453327785443ull, 6456036062835797357ull}}, {{14511490502438766615ull, 15920886495604935331ull, 6330667835087119708ull, 8070045078544746696ull}}, {{6763838554810535183ull, 727182022898308774ull, 3956667396929449818ull, 5043778174090466685ull}}, {{17678170230367944786ull, 10132349565477661775ull, 9557520264589200176ull, 6304722717613083356ull}}, {{17486026769532543079ull, 12665436956847077219ull, 11946900330736500220ull, 7880903397016354195ull}}, {{8622923721744145472ull, 17139270134884199070ull, 5160969697496618685ull, 4925564623135221372ull}}, {{1555282615325406032ull, 7589029613323085126ull, 6451212121870773357ull, 6156955778919026715ull}}, {{11167475306011533348ull, 14097973035081244311ull, 3452329133911078792ull, 7696194723648783394ull}}, {{13897201093898290199ull, 8811233146925777694ull, 6769391727121812149ull, 4810121702280489621ull}}, {{8148129330518086940ull, 15625727452084610022ull, 13073425677329653090ull, 6012652127850612026ull}}, {{961789626292832867ull, 10308787278250986720ull, 7118410059807290555ull, 7515815159813265033ull}}, {{601118516433020542ull, 4137149039693172748ull, 15978221333448026357ull, 4697384474883290645ull}}, {{751398145541275678ull, 9783122318043853839ull, 6137718611527869234ull, 5871730593604113307ull}}, {{14774305737208758309ull, 3005530860700041490ull, 3060462245982448639ull, 7339663242005141634ull}}, {{9244510134656172078ull, 17591971631157215575ull, 13048949844332836606ull, 9174579052506427042ull}}, {{12695347861801189405ull, 6383296251045871830ull, 12767279671135410783ull, 5734111907816516901ull}}, {{6645812790396710948ull, 3367434295379951884ull, 2124041533637099767ull, 7167639884770646127ull}}, {{8307265987995888685ull, 18044350924507103567ull, 16490109972328538420ull, 8959549855963307658ull}}, {{12109570270138512284ull, 2054347290962163921ull, 14918004751132724417ull, 5599718659977067286ull}}, {{1301904782390976643ull, 7179620132130092806ull, 9424133902061129713ull, 6999648324971334108ull}}, {{10850753014843496612ull, 13586211183590003911ull, 11780167377576412141ull, 8749560406214167635ull}}, {{13699249661918267239ull, 10797224998957446396ull, 5056761601771563636ull, 5468475253883854772ull}}, {{17124062077397834048ull, 13496531248696807995ull, 6320952002214454545ull, 6835594067354818465ull}}, {{16793391578319904656ull, 3035606005588846282ull, 12512876021195456086ull, 8544492584193523081ull}}, {{15107555754877328314ull, 15732311808775192638ull, 903018485606078197ull, 5340307865120951926ull}}, {{9661072656741884585ull, 5830331705686827086ull, 10352145143862373555ull, 6675384831401189907ull}}, {{2852968784072579923ull, 2676228613681145954ull, 8328495411400579040ull, 8344231039251487384ull}}, {{6394791508472750356ull, 1672642883550716221ull, 5205309632125361900ull, 5215144399532179615ull}}, {{12605175404018325849ull, 2090803604438395276ull, 1894951021729314471ull, 6518930499415224519ull}}, {{15756469255022907311ull, 16448562560830157807ull, 16203746832443806800ull, 8148663124269030648ull}}, {{16765322312030398926ull, 10280351600518848629ull, 10127341770277379250ull, 5092914452668144155ull}}, {{7121594834755834945ull, 3627067463793784979ull, 8047491194419336159ull, 6366143065835180194ull}}, {{4290307525017405777ull, 18368892385024394936ull, 835991956169394390ull, 7957678832293975243ull}}, {{2681442203135878611ull, 6868871722212858931ull, 16663396037101729158ull, 4973549270183734526ull}}, {{17186860809202011975ull, 17809461689620849471ull, 11605873009522385639ull, 6216936587729668158ull}}, {{16871889993075127065ull, 17650141093598673935ull, 5283969225048206241ull, 7771170734662085198ull}}, {{17462460273313036272ull, 4113809155858089353ull, 17137538820937292613ull, 4856981709163803248ull}}, {{7993017286359131628ull, 9753947463249999596ull, 2975179452462064150ull, 6071227136454754061ull}}, {{9991271607948914534ull, 2969062292207723687ull, 8330660334004968092ull, 7589033920568442576ull}}, {{13162073782609153440ull, 11079035969484603112ull, 5206662708753105057ull, 4743146200355276610ull}}, {{16452592228261441800ull, 13736906573590178ull, 15731700422796157130ull, 5928932750444095762ull}}, {{11342368248472026442ull, 9240543170071763531ull, 10441253491640420604ull, 7411165938055119703ull}}, {{4783137146081322574ull, 14998711518149628015ull, 13443312459916344733ull, 4631978711284449814ull}}, {{1367235414174265314ull, 4913331342404871307ull, 7580768538040655109ull, 5789973389105562268ull}}, {{15544102322999995354ull, 10753350196433477037ull, 9475960672550818886ull, 7237466736381952835ull}}, {{5595069848467830481ull, 4218315708687070489ull, 7233264822261135704ull, 9046833420477441044ull}}, {{15026133701360863811ull, 2636447317929419055ull, 13744162550767985623ull, 5654270887798400652ull}}, {{14170981108273691859ull, 17130617202693937531ull, 17180203188459982028ull, 7067838609748000815ull}}, {{13102040366914726920ull, 2966527429657870298ull, 16863567967147589632ull, 8834798262185001019ull}}, {{12800461247749092229ull, 1854079643536168936ull, 8233886970253549568ull, 5521748913865625637ull}}, {{16000576559686365286ull, 2317599554420211170ull, 14904044731244324864ull, 6902186142332032046ull}}, {{10777348662753180800ull, 2896999443025263963ull, 9406683877200630272ull, 8627732677915040058ull}}, {{4429999905007044048ull, 1810624651890789977ull, 10490863441677781824ull, 5392332923696900036ull}}, {{10149185899686192964ull, 2263280814863487471ull, 13113579302097227280ull, 6740416154621125045ull}}, {{8074796356180353301ull, 2829101018579359339ull, 2556916072339370388ull, 8425520193276406307ull}}, {{2740904713399026861ull, 10991560173466875395ull, 17738973609707964156ull, 5265950120797753941ull}}, {{17261188947030947288ull, 13739450216833594243ull, 8338658956852791483ull, 6582437650997192427ull}}, {{16964800165361296206ull, 12562626752614604900ull, 5811637677638601450ull, 8228047063746490534ull}}, {{1379628066496034321ull, 12463327738811515967ull, 17467331603806289618ull, 5142529414841556583ull}}, {{15559593138402206613ull, 6355787636659619150ull, 17222478486330474119ull, 6428161768551945729ull}}, {{10226119386147982458ull, 3333048527397136034ull, 7693040052630928937ull, 8035202210689932162ull}}, {{11003010634769876941ull, 13612370375691679781ull, 9419836051321718489ull, 5022001381681207601ull}}, {{18365449311889734080ull, 3180404914332436014ull, 16386481082579536016ull, 6277501727101509501ull}}, {{13733439603007391792ull, 3975506142915545018ull, 6648043297942256308ull, 7846877158876886877ull}}, {{13195085770307007774ull, 11708063376176991444ull, 6460870070427604144ull, 4904298224298054298ull}}, {{16493857212883759717ull, 14635079220221239305ull, 17299459624889280988ull, 6130372780372567872ull}}, {{6782263460822535934ull, 18293849025276549132ull, 3177580457402049619ull, 7662965975465709841ull}}, {{13462286699868860767ull, 9127812631584149255ull, 13515202831944750772ull, 4789353734666068650ull}}, {{12216172356408688055ull, 11409765789480186569ull, 7670631503076162657ull, 5986692168332585813ull}}, {{1435157390228696356ull, 427149181568069500ull, 14199975397272591226ull, 7483365210415732266ull}}, {{10120345405747711031ull, 4878654256907431341ull, 13486670641722757420ull, 4677103256509832666ull}}, {{17262117775612026693ull, 6098317821134289176ull, 7634966265298670967ull, 5846379070637290833ull}}, {{3130903145805481750ull, 3011211257990473567ull, 14155393850050726613ull, 7307973838296613541ull}}, {{17748686987539015899ull, 8375700090915479862ull, 3859184257281244554ull, 9134967297870766927ull}}, {{6481243348784497033ull, 9846498575249562818ull, 9329519188441859702ull, 5709354561169229329ull}}, {{17324926222835397099ull, 3084751182207177714ull, 16273585003979712532ull, 7136693201461536661ull}}, {{12432785741689470566ull, 3855938977758972143ull, 6506923199692476953ull, 8920866501826920827ull}}, {{14688020116197000960ull, 13939176907167827349ull, 1760983990594104143ull, 5575541563641825517ull}}, {{4524967089964087488ull, 12812285115532396283ull, 6812916006670018083ull, 6969426954552281896ull}}, {{1044522844027721455ull, 11403670375988107450ull, 8516145008337522604ull, 8711783693190352370ull}}, {{5264512795944713814ull, 16350666021847342964ull, 9934276648638339531ull, 5444864808243970231ull}}, {{6580640994930892267ull, 15826646508881790801ull, 7806159792370536510ull, 6806081010304962789ull}}, {{12837487262091003238ull, 10559936099247462693ull, 14369385758890558542ull, 8507601262881203486ull}}, {{10329272548020570976ull, 1988274043602276279ull, 4369180080879211185ull, 5317250789300752179ull}}, {{8299904666598325816ull, 7097028572930233253ull, 849789082671626077ull, 6646563486625940224ull}}, {{14986566851675295173ull, 13482971734590179470ull, 1062236353339532596ull, 8308204358282425280ull}}, {{4754918263869671580ull, 17650229370973637977ull, 663897720837207872ull, 5192627723926515800ull}}, {{10555333848264477378ull, 3616042640007495855ull, 829872151046509841ull, 6490784654908144750ull}}, {{8582481291903208819ull, 9131739318436757723ull, 10260712225662913109ull, 8113480818635180937ull}}, {{3058207798225811560ull, 8013180083236667529ull, 17942160187107790453ull, 5070925511646988085ull}}, {{8434445766209652354ull, 14628161122473222315ull, 8592642178602574354ull, 6338656889558735107ull}}, {{5931371189334677538ull, 9061829366236752086ull, 6129116704825830039ull, 7923321111948418884ull}}, {{17542165048616337174ull, 12581172381539051909ull, 13054069977370919582ull, 4952075694967761802ull}}, {{8092648255488257755ull, 6503093440069039079ull, 7094215434858873670ull, 6190094618709702253ull}}, {{5504124300932934289ull, 17352238836941074657ull, 13479455312000979991ull, 7737618273387127816ull}}, {{14969292734151553691ull, 17762678300729253516ull, 8424659570000612494ull, 4836011420866954885ull}}, {{264871843979890498ull, 12979975839056791088ull, 15142510480928153522ull, 6045014276083693606ull}}, {{331089804974863122ull, 7001597761966213052ull, 9704766064305416095ull, 7556267845104617008ull}}, {{9430303164964065259ull, 11293527628869965013ull, 6065478790190885059ull, 4722667403190385630ull}}, {{16399564974632469478ull, 9505223517660068362ull, 16805220524593382132ull, 5903334253987982037ull}}, {{11276084181435811040ull, 11881529397075085453ull, 7171467600459563953ull, 7379167817484977547ull}}, {{9353395622611075852ull, 508426845530846552ull, 2176324241073533519ull, 4611979885928110967ull}}, {{11691744528263844815ull, 14470591612195721902ull, 16555463356624080610ull, 5764974857410138708ull}}, {{5391308623475030210ull, 8864867478389876570ull, 2247585122070549147ull, 7206218571762673386ull}}, {{15962507816198563571ull, 6469398329559957808ull, 12032853439442962242ull, 9007773214703341732ull}}, {{9976567385124102232ull, 8655059974402361534ull, 16743905436506627209ull, 5629858259189588582ull}}, {{3247337194550351982ull, 15430510986430339822ull, 11706509758778508203ull, 7037322823986985728ull}}, {{13282543530042715785ull, 14676452714610536873ull, 14633137198473135254ull, 8796653529983732160ull}}, {{1384060678635615510ull, 4561096928204197642ull, 9145710749045709534ull, 5497908456239832600ull}}, {{10953447885149295195ull, 14924743197110022860ull, 11432138436307136917ull, 6872385570299790750ull}}, {{13691809856436618994ull, 4820870941105364863ull, 5066801008529145339ull, 8590481962874738438ull}}, {{15474910187913968727ull, 707201328977159087ull, 17001808685612879549ull, 5369051226796711523ull}}, {{14731951716465073005ull, 5495687679648836763ull, 16640574838588711532ull, 6711314033495889404ull}}, {{13803253627153953352ull, 6869609599561045954ull, 2353974474526337799ull, 8389142541869861756ull}}, {{13238719535398608749ull, 11211035027366735577ull, 10694606083433736932ull, 5243214088668663597ull}}, {{2713341363966097225ull, 14013793784208419472ull, 17979943622719559069ull, 6554017610835829496ull}}, {{3391676704957621531ull, 3682184174978360628ull, 4028185454689897221ull, 8192522013544786871ull}}, {{11343169977453289265ull, 4607208118575169344ull, 9435144936822267619ull, 5120326258465491794ull}}, {{14178962471816611581ull, 1147324129791573776ull, 2570559134173058716ull, 6400407823081864743ull}}, {{17723703089770764476ull, 1434155162239467220ull, 17048256972998487107ull, 8000509778852330928ull}}, {{1853942394251951990ull, 17037248040895524677ull, 10655160608124054441ull, 5000318611782706830ull}}, {{6929114011242327891ull, 7461501995837242134ull, 4095578723300292244ull, 6250398264728383538ull}}, {{17884764550907685672ull, 9326877494796552667ull, 14342845440980141113ull, 7812997830910479422ull}}, {{8872134835103609593ull, 17358513480316315177ull, 4352592382185200291ull, 4883123644319049639ull}}, {{15701854562306899895ull, 17086455831968006067ull, 829054459304112460ull, 6103904555398812049ull}}, {{15015632184456236965ull, 2911325716250455968ull, 5648004092557528480ull, 7629880694248515061ull}}, {{9384770115285148103ull, 1819578572656534980ull, 5835845567062149252ull, 4768675433905321913ull}}, {{11730962644106435129ull, 2274473215820668725ull, 11906492977255074469ull, 5960844292381652391ull}}, {{828645249850880199ull, 7454777538203223811ull, 10271430203141455182ull, 7451055365477065489ull}}, {{16658804345652657788ull, 47549942949626977ull, 17948858923031879249ull, 4656909603423165930ull}}, {{6988447376783658523ull, 4671123447114421626ull, 13212701616935073253ull, 5821137004278957413ull}}, {{17958931257834348962ull, 10450590327320414936ull, 2680818965886677854ull, 7276421255348696767ull}}, {{4001919998583384587ull, 3839865872295742863ull, 17186081762640511030ull, 9095526569185870958ull}}, {{9418729026755697223ull, 16234974225467003001ull, 6129615083222931489ull, 5684704105741169349ull}}, {{16385097301872009432ull, 6458659726551590039ull, 12273704872456052266ull, 7105880132176461686ull}}, {{15869685608912623886ull, 17296696695044263357ull, 6118759053715289524ull, 8882350165220577108ull}}, {{12224396514784083881ull, 1587063397547888790ull, 13047596445426831761ull, 5551468853262860692ull}}, {{6057123606625329043ull, 6595515265362248892ull, 16309495556783539701ull, 6939336066578575865ull}}, {{7571404508281661304ull, 12856080100130199019ull, 6551811390697260914ull, 8674170083223219832ull}}, {{2426284808462344363ull, 12646736081008762291ull, 4094882119185788071ull, 5421356302014512395ull}}, {{16867914065860094166ull, 11196734082833564959ull, 506916630554847185ull, 6776695377518140494ull}}, {{16473206563897729803ull, 160859548259792487ull, 9857017825048334790ull, 8470869221897675617ull}}, {{17213283130077162983ull, 13935595272944534016ull, 17689851186723679003ull, 5294293263686047260ull}}, {{3069859838886902113ull, 12807808072753279617ull, 3665569909695047138ull, 6617866579607559076ull}}, {{8449010817036015545ull, 6786388054086823713ull, 4581962387118808923ull, 8272333224509448845ull}}, {{16809846806715979476ull, 1935649524590570868ull, 5169569501162949529ull, 5170208265318405528ull}}, {{2565564434685422729ull, 7031247924165601490ull, 6461961876453686911ull, 6462760331648006910ull}}, {{12430327580211554219ull, 4177373886779613958ull, 17300824382421884447ull, 8078450414560008637ull}}, {{3157268719204833483ull, 9528387706878340580ull, 13118858248227371731ull, 5049031509100005398ull}}, {{3946585899006041853ull, 7298798615170537821ull, 7175200773429438856ull, 6311289386375006748ull}}, {{9544918392184940221ull, 9123498268963172276ull, 8969000966786798570ull, 7889111732968758435ull}}, {{15188946031970363446ull, 10313872436529370576ull, 3299782595028055154ull, 4930694833105474022ull}}, {{539438466253402691ull, 3668968508806937413ull, 13348100280639844751ull, 6163368541381842527ull}}, {{5285984101244141268ull, 18421268691290835478ull, 12073439332372418034ull, 7704210676727303159ull}}, {{17138798118559752005ull, 16124978950484160077ull, 14463428610373843127ull, 4815131672954564474ull}}, {{7588439592917526294ull, 15544537669677812193ull, 8855913726112528101ull, 6018914591193205593ull}}, {{14097235509574295771ull, 5595614031815101529ull, 15681578176068048031ull, 7523643238991506991ull}}, {{1893243165842853001ull, 10414787797525520312ull, 16718515387683611875ull, 4702277024369691869ull}}, {{2366553957303566251ull, 8406798728479512486ull, 7063086179322351132ull, 5877846280462114837ull}}, {{12181564483484233622ull, 10508498410599390607ull, 13440543742580326819ull, 7347307850577643546ull}}, {{10615269585927904124ull, 8523936994821850355ull, 7577307641370632716ull, 9184134813222054433ull}}, {{4328700481991246125ull, 14550832658618432280ull, 16265032321925115207ull, 5740084258263784020ull}}, {{5410875602489057657ull, 13576854804845652446ull, 1884546328696842393ull, 7175105322829730026ull}}, {{15986966539966097879ull, 3136010450774901845ull, 11579054947725828800ull, 8968881653537162532ull}}, {{12297697096692505126ull, 1960006531734313653ull, 16460281379183418808ull, 5605551033460726582ull}}, {{1537063315583467696ull, 2450008164667892067ull, 11351979687124497702ull, 7006938791825908228ull}}, {{15756387199761498332ull, 12285882242689640891ull, 14189974608905622127ull, 8758673489782385285ull}}, {{7541898990637242505ull, 14596205429322107413ull, 11174577139779707781ull, 5474170931113990803ull}}, {{14039059756723941036ull, 4410198731370470554ull, 9356535406297246823ull, 6842713663892488504ull}}, {{8325452659050150487ull, 901062395785700289ull, 11695669257871558529ull, 8553392079865610630ull}}, {{16732622957974813814ull, 12092379043434532440ull, 2698107267742336176ull, 5345870049916006644ull}}, {{2469034623758965652ull, 15115473804293165551ull, 3372634084677920220ull, 6682337562395008305ull}}, {{16921351334980870776ull, 447598181656905322ull, 8827478624274788180ull, 8352921952993760381ull}}, {{15187530602790432139ull, 9503120900390341634ull, 7823017149385436564ull, 5220576220621100238ull}}, {{9761041216633264366ull, 11878901125487927043ull, 555399399877019897ull, 6525720275776375298ull}}, {{7589615502364192554ull, 1013568351577745092ull, 9917621286701050680ull, 8157150344720469122ull}}, {{13966881725832396154ull, 633480219736090682ull, 10810199322615544579ull, 5098218965450293201ull}}, {{8235230120435719385ull, 14626908329952277065ull, 18124435171696818627ull, 6372773706812866501ull}}, {{14905723668972037135ull, 13671949394012958427ull, 8820485909338859572ull, 7965967133516083127ull}}, {{7010234283893829257ull, 17768340408112874825ull, 12430332720977869088ull, 4978729458447551954ull}}, {{13374478873294674476ull, 3763681436431541915ull, 6314543864367560553ull, 6223411823059439943ull}}, {{12106412573190955190ull, 9316287813966815298ull, 3281493812032062787ull, 7779264778824299929ull}}, {{12178193876671734898ull, 3516836874515565609ull, 13580148678588509002ull, 4862040486765187455ull}}, {{1387684290557504911ull, 13619418129999232820ull, 12363499829808248348ull, 6077550608456484319ull}}, {{1734605363196881138ull, 17024272662499041025ull, 10842688768832922531ull, 7596938260570605399ull}}, {{12613343398066520472ull, 8334327404848206688ull, 13694209508161658438ull, 4748086412856628374ull}}, {{15766679247583150589ull, 1194537219205482552ull, 7894389848347297240ull, 5935108016070785468ull}}, {{1261604985769386620ull, 1493171524006853191ull, 9867987310434121550ull, 7418885020088481835ull}}, {{7706032143746948494ull, 14768290257786446956ull, 3861649059807632016ull, 4636803137555301147ull}}, {{9632540179683685617ull, 13618748523507079ull, 215375306332152117ull, 5796003921944126434ull}}, {{7428989206177219118ull, 4628709454081771753ull, 9492591169769965954ull, 7245004902430158042ull}}, {{13897922526148911801ull, 15009258854456990499ull, 2642366925357681634ull, 9056256128037697553ull}}, {{6380358569629375924ull, 13992472802463006966ull, 13180694374417020781ull, 5660160080023560970ull}}, {{17198820248891495712ull, 3655532947796594995ull, 7252495931166500169ull, 7075200100029451213ull}}, {{16886839292686981736ull, 9181102203173131648ull, 13677305932385513115ull, 8844000125036814016ull}}, {{10554274557929363585ull, 3432345867769513328ull, 8548316207740945697ull, 5527500078148008760ull}}, {{13192843197411704482ull, 8902118353139279564ull, 10685395259676182121ull, 6909375097685010950ull}}, {{16491053996764630602ull, 15739333959851487359ull, 4133372037740451843ull, 8636718872106263688ull}}, {{17224437775618975982ull, 7531240715693485647ull, 2583357523587782402ull, 5397949295066414805ull}}, {{16918861201096332074ull, 190678857762081251ull, 7840882922912115907ull, 6747436618833018506ull}}, {{16536890482943027188ull, 14073406627484765276ull, 577731616785369075ull, 8434295773541273133ull}}, {{1112184514984616185ull, 6490036132964284346ull, 2666925269704549624ull, 5271434858463295708ull}}, {{10613602680585546039ull, 8112545166205355432ull, 3333656587130687030ull, 6589293573079119635ull}}, {{13267003350731932549ull, 917309420901918482ull, 18002128789195522500ull, 8236616966348899543ull}}, {{12903563112634845747ull, 9796690424918474859ull, 18168859520888283418ull, 5147885603968062214ull}}, {{11517767872366169280ull, 3022490994293317766ull, 13487702364255578465ull, 6434857004960077768ull}}, {{5173837803602935792ull, 8389799761294035112ull, 16859627955319473081ull, 8043571256200097210ull}}, {{3233648627251834870ull, 16772839896877241705ull, 15148953490502058579ull, 5027232035125060756ull}}, {{8653746802492181491ull, 16354363852669164227ull, 489447789418021608ull, 6284040043906325946ull}}, {{6205497484687838960ull, 1996210742126903668ull, 9835181773627302819ull, 7855050054882907432ull}}, {{13101807964784675158ull, 17388532778325172456ull, 6146988608517064261ull, 4909406284301817145ull}}, {{16377259955980843948ull, 7900607917624301858ull, 12295421779073718231ull, 6136757855377271431ull}}, {{11248202908121279126ull, 5264073878602989419ull, 10757591205414759885ull, 7670947319221589289ull}}, {{4724283808362105502ull, 5595889183340562339ull, 18252709549452694688ull, 4794342074513493305ull}}, {{1293668742025243974ull, 6994861479175702924ull, 8980828881533704648ull, 5992927593141866632ull}}, {{1617085927531554967ull, 8743576848969628655ull, 11226036101917130810ull, 7491159491427333290ull}}, {{7928207732348303710ull, 10076421549033405813ull, 11627958582125594660ull, 4681974682142083306ull}}, {{14521945683862767542ull, 12595526936291757266ull, 5311576190802217517ull, 5852468352677604133ull}}, {{8929060067973683619ull, 1909350615082532871ull, 11251156256930159801ull, 7315585440847005166ull}}, {{6549639066539716620ull, 6998374287280553993ull, 4840573284307923943ull, 9144481801058756458ull}}, {{15622739462655792648ull, 11291512957191428101ull, 7637044321119840368ull, 5715301125661722786ull}}, {{5693366273037577097ull, 14114391196489285127ull, 322933364545024652ull, 7144126407077153483ull}}, {{2505021822869583468ull, 17642988995611606409ull, 14238724760963444527ull, 8930158008846441853ull}}, {{13094853685361959428ull, 17944397149898335861ull, 11205045984815846781ull, 5581348755529026158ull}}, {{2533509051420285572ull, 8595438382090756115ull, 4782935444165032669ull, 6976685944411282698ull}}, {{17001944369557520677ull, 15355983996040833047ull, 15202041342061066644ull, 8720857430514103372ull}}, {{17543744258614532279ull, 374117960670744846ull, 277903801933390845ull, 5450535894071314608ull}}, {{12706308286413389541ull, 5079333469265818962ull, 347379752416738556ull, 6813169867589143260ull}}, {{6659513321161961118ull, 6349166836582273703ull, 434224690520923195ull, 8516462334486429075ull}}, {{11079724853367307555ull, 1662386263650227112ull, 16412291496071434661ull, 5322788959054018171ull}}, {{13849656066709134444ull, 6689668847990171794ull, 15903678351661905422ull, 6653486198817522714ull}}, {{8088698046531642247ull, 17585458096842490551ull, 10656225902722605969ull, 8316857748521903393ull}}, {{11972965306723358260ull, 4073382282885474738ull, 18189356235270098491ull, 5198036092826189620ull}}, {{5742834596549422017ull, 480041835179455519ull, 4289951220378071498ull, 6497545116032737026ull}}, {{2566857227259389617ull, 9823424330829095207ull, 14585811062327365180ull, 8121931395040921282ull}}, {{8521814794678200367ull, 15363012243622960312ull, 13727817932381991141ull, 5076207121900575801ull}}, {{10652268493347750459ull, 5368707249246536678ull, 3324714360195325215ull, 6345258902375719752ull}}, {{4091963579829912265ull, 2099198043130782944ull, 4155892950244156519ull, 7931573627969649690ull}}, {{2557477237393695166ull, 8229527804597821196ull, 7209119112329985728ull, 4957233517481031056ull}}, {{3196846546742118957ull, 10286909755747276495ull, 9011398890412482160ull, 6196541896851288820ull}}, {{17831116238709812409ull, 12858637194684095618ull, 11264248613015602700ull, 7745677371064111025ull}}, {{15756133667621020660ull, 17260020283532335569ull, 122626355493669831ull, 4841048356915069391ull}}, {{5860109029244112112ull, 16963339335988031558ull, 13988340999649251001ull, 6051310446143836738ull}}, {{16548508323409915948ull, 7369116114702875735ull, 8262054212706787944ull, 7564138057679795923ull}}, {{17260346729772279324ull, 4605697571689297334ull, 2857940873728048513ull, 4727586286049872452ull}}, {{12352061375360573347ull, 10368807983039009572ull, 3572426092160060641ull, 5909482857562340565ull}}, {{15440076719200716683ull, 17572695997226149869ull, 9077218633627463705ull, 7386853571952925706ull}}, {{11955890958714141879ull, 4065405970625261812ull, 10284947664444552720ull, 4616783482470578566ull}}, {{14944863698392677349ull, 5081757463281577265ull, 3632812543700915092ull, 5770979353088223208ull}}, {{4846021567708682974ull, 6352196829101971582ull, 4541015679626143865ull, 7213724191360279010ull}}, {{15280898996490629525ull, 12551932054804852381ull, 14899641636387455639ull, 9017155239200348762ull}}, {{11856404882020337406ull, 14762486561894114594ull, 13923962041169547678ull, 5635722024500217976ull}}, {{5597134065670645949ull, 9229736165512867435ull, 17404952551461934598ull, 7044652530625272470ull}}, {{2384731563660919532ull, 2313798170036308486ull, 12532818652472642440ull, 8805815663281590588ull}}, {{15325515282570238420ull, 1446123856272692803ull, 17056383694650177333ull, 5503634789550994117ull}}, {{14545208084785410120ull, 6419340838768253908ull, 7485421563030557954ull, 6879543486938742647ull}}, {{18181510105981762650ull, 17247548085315093193ull, 4745090935360809538ull, 8599429358673428309ull}}, {{4445914788597519801ull, 15391403571749321150ull, 5271524843814199913ull, 5374643349170892693ull}}, {{14780765522601675559ull, 5404196409404487725ull, 11201092073195137796ull, 6718304186463615866ull}}, {{4640898847969930736ull, 6755245511755609657ull, 4777993054639146437ull, 8397880233079519833ull}}, {{14429776826049676470ull, 6527871454060949987ull, 14515460705217936283ull, 5248675145674699895ull}}, {{13425535014134707684ull, 3548153299148799580ull, 13532639863095032450ull, 6560843932093374869ull}}, {{16781918767668384605ull, 13658563660790775283ull, 3080741773586626850ull, 8201054915116718587ull}}, {{8182856220579046426ull, 13148288306421622456ull, 18066364672987499445ull, 5125659321947949116ull}}, {{10228570275723808033ull, 2600302327744864358ull, 4136211767524822691ull, 6407074152434936396ull}}, {{3562340807799984233ull, 17085435964963244160ull, 5170264709406028363ull, 8008842690543670495ull}}, {{2226463004874990146ull, 8372554468888333648ull, 10148944471019849583ull, 5005526681589794059ull}}, {{2783078756093737682ull, 5854007067683029156ull, 8074494570347424075ull, 6256908351987242574ull}}, {{3478848445117172102ull, 2705822816176398541ull, 869746176079504286ull, 7821135439984053218ull}}, {{4480123287411926516ull, 15526197315392412800ull, 5155277378477078082ull, 4888209649990033261ull}}, {{5600154109264908145ull, 10184374607385740192ull, 11055782741523735507ull, 6110262062487541576ull}}, {{7000192636581135181ull, 8118782240804787336ull, 13819728426904669384ull, 7637827578109426970ull}}, {{4375120397863209488ull, 5074238900502992085ull, 13249016285242806269ull, 4773642236318391856ull}}, {{10080586515756399764ull, 10954484644056128010ull, 16561270356553507836ull, 5967052795397989820ull}}, {{3377361107840723897ull, 13693105805070160013ull, 2254843871982333179ull, 7458815994247487276ull}}, {{4416693701614146388ull, 6252348118955156056ull, 10632649456843734045ull, 4661759996404679547ull}}, {{5520867127017682985ull, 12427121167121332974ull, 8679125802627279652ull, 5827199995505849434ull}}, {{16124455945626879539ull, 15533901458901666217ull, 1625535216429323757ull, 7283999994382311793ull}}, {{6320511876751435711ull, 5582318768344919060ull, 6643605038964042601ull, 9104999992977889741ull}}, {{13173691959824423128ull, 15018164276284044172ull, 6458096158566220577ull, 5690624995611181088ull}}, {{16467114949780528910ull, 4937647290072891503ull, 8072620198207775722ull, 7113281244513976360ull}}, {{15972207668798273233ull, 15395431149445890187ull, 10090775247759719652ull, 8891601555642470450ull}}, {{7676786783785226819ull, 398772431548905559ull, 10918420548277212687ull, 5557250972276544031ull}}, {{4984297461304145619ull, 14333523594718295661ull, 9036339666919127954ull, 6946563715345680039ull}}, {{10842057845057569928ull, 8693532456543093768ull, 6683738565221522039ull, 8683204644182100049ull}}, {{6776286153160981205ull, 12350986812980515461ull, 15706551649331921034ull, 5427002902613812530ull}}, {{13082043709878614410ull, 6215361479370868518ull, 10409817524810125485ull, 6783753628267265663ull}}, {{7129182600493492205ull, 12380887867640973552ull, 8400585887585268952ull, 8479692035334082079ull}}, {{4455739125308432628ull, 7738054917275608470ull, 12167895207381874951ull, 5299807522083801299ull}}, {{14793045943490316593ull, 5060882628167122683ull, 10598182990799955785ull, 6624759402604751624ull}}, {{13879621410935507837ull, 10937789303636291258ull, 13247728738499944731ull, 8280949253255939530ull}}, {{13286449400262080303ull, 4530275305558988084ull, 12891516479989853361ull, 5175593283284962206ull}}, {{16608061750327600378ull, 10274530150376123009ull, 6891023563132540893ull, 6469491604106202758ull}}, {{6925019132627336760ull, 17454848706397541666ull, 17837151490770451924ull, 8086864505132753447ull}}, {{8939822976319473379ull, 1685908404643687733ull, 18065748709372614309ull, 5054290315707970904ull}}, {{15786464738826729628ull, 6719071524231997570ull, 4135441813006216270ull, 6317862894634963631ull}}, {{10509708886678636227ull, 17622211442144772771ull, 557616247830382433ull, 7897328618293704539ull}}, {{4262725044960453690ull, 4096353123699401126ull, 16489411219389846685ull, 4935830386433565336ull}}, {{14551778343055342921ull, 9732127423051639311ull, 2165019950527756740ull, 6169787983041956671ull}}, {{13578036910391790747ull, 12165159278814549139ull, 16541332993441859637ull, 7712234978802445838ull}}, {{6180430059781175265ull, 9909067558472787164ull, 5726647102473774369ull, 4820146861751528649ull}}, {{7725537574726469081ull, 16998020466518371859ull, 11769994896519605865ull, 6025183577189410811ull}}, {{5045235949980698447ull, 7412467527865801112ull, 10100807602222119428ull, 7531479471486763514ull}}, {{3153272468737936530ull, 13856164241770901503ull, 10924690769816212546ull, 4707174669679227196ull}}, {{17776648641204584374ull, 8096833265358851070ull, 13655863462270265683ull, 5883968337099033995ull}}, {{12997438764650954659ull, 5509355563271175934ull, 12458143309410444200ull, 7354960421373792494ull}}, {{7023426418958917516ull, 6886694454088969918ull, 6349307099908279442ull, 9193700526717240618ull}}, {{18224699567131487160ull, 8915870052232994102ull, 8580002955870062555ull, 5746062829198275386ull}}, {{13557502422059583141ull, 6533151546863854724ull, 1501631657982802386ull, 7182578536497844233ull}}, {{16946878027574478926ull, 17389811470434594213ull, 6488725590905890886ull, 8978223170622305291ull}}, {{12897641776447743281ull, 6256946150594233479ull, 1749610485102487852ull, 5611389481638940807ull}}, {{11510366202132291197ull, 7821182688242791849ull, 16022071161660273527ull, 7014236852048676008ull}}, {{552899697383200285ull, 5164792341876101908ull, 1580844878365790293ull, 8767796065060845011ull}}, {{9568934347719275986ull, 5533838222886257644ull, 17128929113474476597ull, 5479872540663028131ull}}, {{11961167934649094982ull, 11528983797035209959ull, 16799475373415707842ull, 6849840675828785164ull}}, {{10339773899883980824ull, 5187857709439236641ull, 2552600143060083187ull, 8562300844785981456ull}}, {{17991573733495957775ull, 936568059185828948ull, 1595375089412551992ull, 5351438027991238410ull}}, {{4042723093160395603ull, 1170710073982286186ull, 11217590898620465798ull, 6689297534989048012ull}}, {{14276775903305270311ull, 10686759629332633540ull, 14021988623275582247ull, 8361621918736310015ull}}, {{18146356976420569753ull, 13596753795973977818ull, 15681271917188320760ull, 5226013699210193759ull}}, {{13459574183670936383ull, 16995942244967472273ull, 14989903878058013046ull, 6532517124012742199ull}}, {{2989409674306506767ull, 12021555769354564534ull, 14125693829145128404ull, 8165646405015927749ull}}, {{15703439101723730441ull, 16736844392701378641ull, 11134401652429399204ull, 5103529003134954843ull}}, {{5794240821872499339ull, 2474311417167171686ull, 9306316047109361102ull, 6379411253918693554ull}}, {{16466173064195399982ull, 12316261308313740415ull, 2409523022031925569ull, 7974264067398366943ull}}, {{17208887192763206845ull, 780134290055005903ull, 8423480916411035337ull, 4983915042123979339ull}}, {{16899422972526620652ull, 5586853880996145283ull, 5917665127086406267ull, 6229893802654974174ull}}, {{16512592697230887911ull, 2371881332817793700ull, 16620453445712783642ull, 7787367253318717717ull}}, {{1096998398914529137ull, 6094111851438508967ull, 12693626412784183728ull, 4867104533324198573ull}}, {{15206306053925325133ull, 7617639814298136208ull, 2031974960698065948ull, 6083880666655248217ull}}, {{561138493697104800ull, 9522049767872670261ull, 7151654719299970339ull, 7604850833319060271ull}}, {{2656554567774384452ull, 3645438095706724961ull, 11387313227203563318ull, 4753031770824412669ull}}, {{7932379228145368469ull, 13780169656488182009ull, 399083478722290435ull, 5941289713530515837ull}}, {{14527160053609098490ull, 12613526052182839607ull, 5110540366830250948ull, 7426612141913144796ull}}, {{15997004061146768412ull, 17106825819469050562ull, 12417459766123682650ull, 4641632588695715497ull}}, {{10772883039578684707ull, 12160160237481537395ull, 1686766652372439601ull, 5802040735869644372ull}}, {{8854417781045967980ull, 1365142241569758032ull, 2108458315465549502ull, 7252550919837055465ull}}, {{11068022226307459975ull, 10929799838816973348ull, 7247258912759324781ull, 9065688649796319331ull}}, {{16140885928296938293ull, 9136967908474302294ull, 2223693811260884036ull, 5666055406122699582ull}}, {{10952735373516397058ull, 11421209885592877868ull, 12002989300930880853ull, 7082569257653374477ull}}, {{13690919216895496322ull, 441454301708933623ull, 1168678570881437355ull, 8853211572066718097ull}}, {{15474353538200767057ull, 16416810003063941178ull, 12259639152869368106ull, 5533257232541698810ull}}, {{10119569885896183014ull, 11297640466975150665ull, 6101176904231934325ull, 6916571540677123513ull}}, {{17261148375797616671ull, 286992528436774619ull, 12238157148717305811ull, 8645714425846404391ull}}, {{8482374725659816467ull, 16320271394768841801ull, 14566377245589397987ull, 5403571516154002744ull}}, {{15214654425502158488ull, 15788653225033664347ull, 18207971556986747484ull, 6754464395192503430ull}}, {{14406632013450310206ull, 1289072457582528818ull, 13536592409378658548ull, 8443080493990629288ull}}, {{13615831026833831783ull, 10029042322843856319ull, 8460370255861661592ull, 5276925308744143305ull}}, {{12408102765114901825ull, 12536302903554820399ull, 15187148838254464894ull, 6596156635930179131ull}}, {{10898442437966239377ull, 6447006592588749691ull, 14372250029390693214ull, 8245195794912723914ull}}, {{4505683514515205659ull, 17864437175650132269ull, 13594342286796571162ull, 5153247371820452446ull}}, {{10243790411571394977ull, 13107174432707889528ull, 7769555821640938145ull, 6441559214775565558ull}}, {{12804738014464243721ull, 2548909985602698198ull, 488572740196396874ull, 8051949018469456948ull}}, {{3391275240612764422ull, 6204754759429074278ull, 9528729999477523854ull, 5032468136543410592ull}}, {{13462466087620731335ull, 16979315486141118655ull, 11910912499346904817ull, 6290585170679263240ull}}, {{12216396591098526265ull, 7389086302394234607ull, 14888640624183631022ull, 7863231463349079050ull}}, {{14552776897077660772ull, 6492920569008725ull, 13917086408542157293ull, 4914519664593174406ull}}, {{4355913066064912253ull, 4619802169138648811ull, 8172985973822920808ull, 6143149580741468008ull}}, {{833205314153752412ull, 5774752711423311014ull, 10216232467278651010ull, 7678936975926835010ull}}, {{14355811376628258970ull, 8220906463066957287ull, 10996831310476544785ull, 4799335609954271881ull}}, {{13333078202357935808ull, 14887819097261084513ull, 18357725156523068885ull, 5999169512442839851ull}}, {{2831289697665256048ull, 4774715816294191930ull, 18335470427226448203ull, 7498961890553549814ull}}, {{6381242079468172934ull, 678354375970176004ull, 6847982998589142223ull, 4686851181595968634ull}}, {{7976552599335216167ull, 14683001025244883717ull, 17783350785091203586ull, 5858563976994960792ull}}, {{14582376767596408113ull, 9130379244701328838ull, 3782444407654452867ull, 7323204971243700991ull}}, {{9004598922640734333ull, 6801288037449273144ull, 116369491140678180ull, 9154006214054626239ull}}, {{5627874326650458958ull, 13474177060260571523ull, 6990259959604005718ull, 5721253883784141399ull}}, {{2423156889885685794ull, 7619349288470938596ull, 4126138931077619244ull, 7151567354730176749ull}}, {{3028946112357107242ull, 9524186610588673245ull, 9769359682274411959ull, 8939459193412720936ull}}, {{4198934329436885979ull, 12870145659259002634ull, 6105849801421507474ull, 5587161995882950585ull}}, {{14472039948650883281ull, 6864310037218977484ull, 12243998270204272247ull, 6983952494853688231ull}}, {{18090049935813604101ull, 3968701528096333951ull, 10693311819327952405ull, 8729940618567110289ull}}, {{18223810237524584419ull, 4786281464273902671ull, 18212534933148440013ull, 5456212886604443930ull}}, {{18168076778478342620ull, 10594537848769766243ull, 13542296629580774208ull, 6820266108255554913ull}}, {{18098409954670540371ull, 13243172310962207804ull, 3092812731693804048ull, 8525332635319443642ull}}, {{2088134184814311924ull, 8276982694351379878ull, 6544693975736015434ull, 5328332897074652276ull}}, {{11833539767872665713ull, 1122856331084449039ull, 8180867469670019293ull, 6660416121343315345ull}}, {{10180238691413444237ull, 6015256432282949203ull, 14837770355514912020ull, 8325520151679144181ull}}, {{4056806172919708696ull, 12982907307031619060ull, 11579449481410513964ull, 5203450094799465113ull}}, {{5071007716149635870ull, 16228634133789523825ull, 639253796480978743ull, 6504312618499331392ull}}, {{10950445663614432742ull, 15674106648809516877ull, 799067245601223429ull, 8130390773124164240ull}}, {{9149871548972714416ull, 12102159664719642000ull, 499417028500764643ull, 5081494233202602650ull}}, {{11437339436215893020ull, 10516013562472164596ull, 9847643322480731612ull, 6351867791503253312ull}}, {{14296674295269866275ull, 13145016953090205745ull, 12309554153100914515ull, 7939834739379066640ull}}, {{2017892406902584566ull, 5909792586467684639ull, 7693471345688071572ull, 4962396712111916650ull}}, {{16357423563910394419ull, 7387240733084605798ull, 393467145255313657ull, 6202995890139895813ull}}, {{11223407418033217216ull, 13845736934783145152ull, 5103519949996529975ull, 7753744862674869766ull}}, {{7014629636270760760ull, 15571114611880547576ull, 17024758024029994946ull, 4846090539171793603ull}}, {{8768287045338450950ull, 10240521227995908662ull, 16669261511610105779ull, 6057613173964742004ull}}, {{1736986769818287879ull, 8188965516567497924ull, 2389832815803080608ull, 7572016467455927506ull}}, {{10308988767991205733ull, 5118103447854686202ull, 6105331528304313284ull, 4732510292159954691ull}}, {{3662863923134231358ull, 6397629309818357753ull, 3019978391953003701ull, 5915637865199943364ull}}, {{9190265922345177101ull, 12608722655700335095ull, 3774972989941254626ull, 7394547331499929205ull}}, {{12661445229106817544ull, 12492137678240097338ull, 4665201127926978093ull, 4621592082187455753ull}}, {{6603434499528746122ull, 1780114042517957961ull, 10443187428336110521ull, 5776990102734319691ull}}, {{12865979142838320557ull, 6836828571574835355ull, 8442298266992750247ull, 7221237628417899614ull}}, {{11470787910120512792ull, 3934349696041156290ull, 1329500796886162001ull, 9026547035522374518ull}}, {{11780928462252708399ull, 13988183606094192441ull, 14665996053336014962ull, 5641591897201484073ull}}, {{891102522533721787ull, 8261857470762964744ull, 4497437011387854991ull, 7051989871501855092ull}}, {{1113878153167152233ull, 5715635820026318026ull, 5621796264234818739ull, 8814987339377318865ull}}, {{5307859864156858050ull, 1266429378302754814ull, 15042837711215231472ull, 5509367087110824290ull}}, {{15858196867050848370ull, 1583036722878443517ull, 9580175102164263532ull, 6886708858888530363ull}}, {{5987688028531396751ull, 1978795903598054397ull, 7363532859277941511ull, 8608386073610662954ull}}, {{6048148027045816922ull, 8154276467389865854ull, 9213894055476101348ull, 5380241296006664346ull}}, {{16783557070662046960ull, 10192845584237332317ull, 2293995532490350877ull, 6725301620008330433ull}}, {{7144388283045394988ull, 17352742998724053301ull, 7479180434040326500ull, 8406627025010413041ull}}, {{6771085686117065819ull, 1622092337347757505ull, 16203702817343673823ull, 5254141890631508150ull}}, {{13075543126073720178ull, 15862673476966860593ull, 11031256484824816470ull, 6567677363289385188ull}}, {{2509370852309986511ull, 10604969809353799934ull, 13789070606031020588ull, 8209596704111731485ull}}, {{15403414837975905281ull, 15851478167700900766ull, 10924012137983081819ull, 5130997940069832178ull}}, {{10030896510615105793ull, 15202661691198738054ull, 4431643135624076466ull, 6413747425087290223ull}}, {{3315248601414106434ull, 9779955077143646760ull, 927867901102707679ull, 8017184281359112779ull}}, {{2072030375883816521ull, 13030000950855861081ull, 16720818502685049963ull, 5010740175849445486ull}}, {{7201723988282158555ull, 11675815170142438447ull, 11677651091501536646ull, 6263425219811806858ull}}, {{4390468966925310290ull, 5371396925823272251ull, 5373691827522145000ull, 7829281524764758573ull}}, {{438200095114624980ull, 3357123078639545157ull, 5664400401415034577ull, 4893300952977974108ull}}, {{5159436137320669128ull, 8808089866726819350ull, 7080500501768793221ull, 6116626191222467635ull}}, {{15672667208505612218ull, 15621798351835912091ull, 4238939608783603622ull, 7645782739028084544ull}}, {{7489573996102313685ull, 5151937951470057153ull, 2649337255489752264ull, 4778614211892552840ull}}, {{13973653513555280010ull, 6439922439337571441ull, 3311671569362190330ull, 5973267764865691050ull}}, {{3632008836661936300ull, 17273275086026740110ull, 13362961498557513720ull, 7466584706082113812ull}}, {{16105063578195873900ull, 10795796928766712568ull, 17575222973453221883ull, 4666615441301321132ull}}, {{1684585399035290758ull, 8883060142531002807ull, 3522284643106975738ull, 5833269301626651416ull}}, {{15940789804076277160ull, 1880453141308977700ull, 4402855803883719673ull, 7291586627033314270ull}}, {{1479243181385794834ull, 6962252445063610030ull, 14726941791709425399ull, 9114483283791642837ull}}, {{14759585043648285483ull, 11268936805805838124ull, 11510181629032084826ull, 5696552052369776773ull}}, {{2737230850805238ull, 4862798970402521848ull, 552668981007942321ull, 7120690065462220967ull}}, {{3421538563506547ull, 10690184731430540214ull, 14525894281542091613ull, 8900862581827776208ull}}, {{13837196516884355304ull, 8987208466357781585ull, 9078683925963807258ull, 5563039113642360130ull}}, {{3461437590823280418ull, 2010638546092451174ull, 2124982870599983265ull, 6953798892052950163ull}}, {{13550169025383876331ull, 7124984201042951871ull, 16491286643532142793ull, 8692248615066187703ull}}, {{15386384668506004563ull, 15982330171720314679ull, 17224583179848671101ull, 5432655384416367314ull}}, {{14621294817205117799ull, 6142854659368229637ull, 12307356937956063069ull, 6790819230520459143ull}}, {{4441560466224233537ull, 12290254342637674951ull, 10772510154017690932ull, 8488524038150573929ull}}, {{9693504319031227817ull, 16904781001003322652ull, 18262033892329526592ull, 5305327523844108705ull}}, {{12116880398789034771ull, 2684232177544601699ull, 8992484310129744529ull, 6631659404805135882ull}}, {{10534414480058905560ull, 7966976240358140028ull, 2017233350807404853ull, 8289574256006419853ull}}, {{15807381086891591783ull, 7285203159437531469ull, 3566613853468321985ull, 5180983910004012408ull}}, {{5924168303332326017ull, 13718189967724302241ull, 4458267316835402481ull, 6476229887505015510ull}}, {{12016896397592795425ull, 3312679404373214089ull, 14796206182899028910ull, 8095287359381269387ull}}, {{593031220854415285ull, 15905482683015422518ull, 6941785855098199116ull, 5059554599613293367ull}}, {{9964661062922794914ull, 1435109280059726531ull, 4065546300445360992ull, 6324443249516616709ull}}, {{7844140310226105738ull, 1793886600074658164ull, 9693618893984089144ull, 7905554061895770886ull}}, {{14125959730746091894ull, 1121179125046661352ull, 1446825790312667811ull, 4940971288684856804ull}}, {{17657449663432614868ull, 15236531961590490402ull, 1808532237890834763ull, 6176214110856071005ull}}, {{12848440042435992777ull, 14433978933560725099ull, 6872351315790931358ull, 7720267638570088756ull}}, {{5724432017308801534ull, 4409550815048065283ull, 13518591609224107907ull, 4825167274106305472ull}}, {{2543854003208614013ull, 900252500382693700ull, 16898239511530134884ull, 6031459092632881840ull}}, {{3179817504010767516ull, 1125315625478367125ull, 2676055315703116989ull, 7539323865791102301ull}}, {{4293228949220423650ull, 3009165275137673405ull, 3978377581528142070ull, 4712077416119438938ull}}, {{9978222204952917466ull, 12984828630776867564ull, 14196344013764953395ull, 5890096770149298672ull}}, {{12472777756191146832ull, 11619349770043696551ull, 17745430017206191744ull, 7362620962686623340ull}}, {{10979286176811545636ull, 14524187212554620689ull, 3735043447798188064ull, 9203276203358279176ull}}, {{18391268906575685783ull, 9077617007846637930ull, 2334402154873867540ull, 5752047627098924485ull}}, {{13765714096364831420ull, 11347021259808297413ull, 7529688712019722329ull, 7190059533873655606ull}}, {{3372084565173875563ull, 348718519478208055ull, 188738853169877104ull, 8987574417342069508ull}}, {{9025081880874754083ull, 217949074673880034ull, 9341333820085948998ull, 5617234010838793442ull}}, {{2057980314238666796ull, 9495808380197125851ull, 2453295238252660439ull, 7021542513548491803ull}}, {{16407533448080497207ull, 7258074456819019409ull, 16901677103097989261ull, 8776928141935614753ull}}, {{3337179377409228899ull, 6842139544725581083ull, 3646019161795161432ull, 5485580088709759221ull}}, {{18006532277043699835ull, 8552674430906976353ull, 9169209970671339694ull, 6856975110887199026ull}}, {{8673107291022461082ull, 1467471001778944634ull, 2238140426484398810ull, 8571218888608998783ull}}, {{10032378075316426080ull, 5528855394539228300ull, 8316366794193831112ull, 5357011805380624239ull}}, {{12540472594145532600ull, 6911069243174035375ull, 5783772474314900986ull, 6696264756725780299ull}}, {{11063904724254527846ull, 17862208590822320027ull, 2618029574466238328ull, 8370330945907225374ull}}, {{4609097443445385952ull, 11163880369263950017ull, 15471326539323562667ull, 5231456841192015858ull}}, {{10373057822734120344ull, 9343164443152549617ull, 10115786137299677526ull, 6539321051490019823ull}}, {{17578008296845038334ull, 2455583517085911213ull, 8033046653197209004ull, 8174151314362524779ull}}, {{13292098194741842911ull, 10758111735033470316ull, 2714811149034561675ull, 5108844571476577987ull}}, {{16615122743427303638ull, 8835953650364449991ull, 17228571991575365806ull, 6386055714345722483ull}}, {{16157217410856741644ull, 1821570026100786681ull, 16924028971041819354ull, 7982569642932153104ull}}, {{3180731854144381672ull, 5750167284740379580ull, 10577518106901137096ull, 4989106026832595690ull}}, {{3975914817680477089ull, 7187709105925474475ull, 3998525596771645562ull, 6236382533540744613ull}}, {{358207503673208457ull, 18208008419261618902ull, 9609843014391944856ull, 7795478166925930766ull}}, {{14058937745077918998ull, 11380005262038511813ull, 1394465865567577631ull, 4872173854328706729ull}}, {{3738614126065235036ull, 9613320559120751863ull, 6354768350386859943ull, 6090217317910883411ull}}, {{61581639154155890ull, 7404964680473551925ull, 3331774419556187025ull, 7612771647388604264ull}}, {{2344331533685041384ull, 16157317971364439713ull, 2082359012222616890ull, 4757982279617877665ull}}, {{7542100435533689633ull, 10973275427350773833ull, 7214634783705659017ull, 5947477849522347081ull}}, {{14039311562844499946ull, 18328280302615855195ull, 13629979498059461675ull, 7434347311902933851ull}}, {{6468726717564118514ull, 9149332179921215545ull, 6212894177073469595ull, 4646467069939333657ull}}, {{12697594415382536047ull, 6824979206474131527ull, 12377803739769224898ull, 5808083837424167071ull}}, {{11260307000800782154ull, 17754596044947440217ull, 10860568656284143218ull, 7260104796780208839ull}}, {{240325695718813981ull, 12969873019329524464ull, 8964024801927791119ull, 9075130995975261049ull}}, {{150203559824258738ull, 15023699664722034646ull, 17131730547273339209ull, 5671956872484538155ull}}, {{9411126486635099230ull, 4944566525620379595ull, 16802977165664286108ull, 7089946090605672694ull}}, {{7152222089866486134ull, 6180708157025474494ull, 11780349420225581827ull, 8862432613257090868ull}}, {{18305196861448717546ull, 1557099588927227606ull, 16586090424495764450ull, 5539020383285681792ull}}, {{13658124039956121124ull, 11169746523013810316ull, 2285868956910153946ull, 6923775479107102241ull}}, {{17072655049945151405ull, 4738811116912487087ull, 7469022214565080337ull, 8654719348883877801ull}}, {{17587938433856801484ull, 14490971994138774189ull, 16197353930171644970ull, 5409199593052423625ull}}, {{8149864987038838143ull, 8890342955818691929ull, 6411634357432392501ull, 6761499491315529532ull}}, {{14799017252225935583ull, 15724614713200752815ull, 8014542946790490626ull, 8451874364144411915ull}}, {{16166914810282291596ull, 14439570214177858413ull, 2703246332530362689ull, 5282421477590257447ull}}, {{6373585457570700782ull, 4214404712440159305ull, 17214115970945117074ull, 6603026846987821808ull}}, {{12578667840390763882ull, 14491377927404974939ull, 3070900889971844726ull, 8253783558734777261ull}}, {{5555824391030533474ull, 4445425186200721433ull, 4225156065446096906ull, 5158614724209235788ull}}, {{11556466507215554747ull, 14780153519605677599ull, 5281445081807621132ull, 6448268405261544735ull}}, {{9833897115592055529ull, 28447825797545383ull, 1990120333832138512ull, 8060335506576930919ull}}, {{13063714724886116562ull, 17779891123465864ull, 8161354236286168426ull, 5037709691610581824ull}}, {{16329643406107645702ull, 9245596900759108138ull, 10201692795357710532ull, 6297137114513227280ull}}, {{11188682220779781320ull, 11556996125948885173ull, 12752115994197138165ull, 7871421393141534100ull}}, {{9298769397201057277ull, 9528965587931747185ull, 17193444533227987161ull, 4919638370713458812ull}}, {{16235147764928709500ull, 16522893003342071885ull, 3045061592825432335ull, 6149547963391823516ull}}, {{6458876650878723163ull, 16041930235750201953ull, 3806326991031790419ull, 7686934954239779395ull}}, {{15566012952867671737ull, 7720363388130182268ull, 73111360181175060ull, 4804334346399862122ull}}, {{1010772117375038055ull, 9650454235162727836ull, 9314761237081244633ull, 6005417932999827652ull}}, {{1263465146718797569ull, 16674753812380797699ull, 11643451546351555791ull, 7506772416249784565ull}}, {{16930566781195106145ull, 17339250160379080417ull, 9583000225683416321ull, 4691732760156115353ull}}, {{7328150421211718969ull, 7839004645191686810ull, 16590436300531658306ull, 5864665950195144191ull}}, {{18383560063369424519ull, 575383769634832704ull, 16126359357237184979ull, 7330832437743930239ull}}, {{4532706005502229033ull, 14554287767325704593ull, 15546263178119093319ull, 9163540547179912799ull}}, {{14362156299507362906ull, 16013958882219647226ull, 16633943513965515180ull, 5727212841987445499ull}}, {{8729323337529427824ull, 1570704529065007417ull, 16180743374029506072ull, 7159016052484306874ull}}, {{15523340190339172684ull, 1963380661331259271ull, 11002557180682106782ull, 8948770065605383593ull}}, {{16619616646603064784ull, 15062170968614200756ull, 18405813283994786498ull, 5592981291003364745ull}}, {{2327776734544279363ull, 9604341673912975138ull, 9172208549711319411ull, 6991226613754205932ull}}, {{12133092955035125012ull, 7393741073963831018ull, 11465260687139149264ull, 8739033267192757415ull}}, {{12194869115324341037ull, 4621088171227394386ull, 14083316957103050146ull, 5461895791995473384ull}}, {{6020214357300650488ull, 14999732250889018791ull, 17604146196378812682ull, 6827369739994341730ull}}, {{2913581928198425206ull, 9526293276756497681ull, 12781810708618740045ull, 8534212174992927163ull}}, {{13350203751192485514ull, 8259776307186505002ull, 5682788683673018576ull, 5333882609370579477ull}}, {{7464382652135831084ull, 10324720383983131253ull, 11715171873018661124ull, 6667353261713224346ull}}, {{13942164333597176759ull, 12905900479978914066ull, 5420592804418550597ull, 8334191577141530433ull}}, {{13325538726925623378ull, 10372030809200515243ull, 14917085548830063883ull, 5208869735713456520ull}}, {{12045237390229641319ull, 8353352493073256150ull, 199612862328028238ull, 6511087169641820651ull}}, {{5833174700932275841ull, 1218318579486794380ull, 14084574133192199010ull, 8138858962052275813ull}}, {{12869106224937448209ull, 5373135130606634391ull, 11108701842458818333ull, 5086786851282672383ull}}, {{11474696762744422357ull, 11328104931685680893ull, 9274191284646135012ull, 6358483564103340479ull}}, {{508312898148364234ull, 14160131164607101117ull, 6981053087380280861ull, 7948104455129175599ull}}, {{2623538570556421598ull, 11155924987093132150ull, 11280687207253757394ull, 4967565284455734749ull}}, {{12502795250050302806ull, 4721534197011639379ull, 265800953785033031ull, 6209456605569668437ull}}, {{11016808044135490603ull, 1290231727837161320ull, 4943937210658679193ull, 7761820756962085546ull}}, {{6885505027584681627ull, 12335609875966695585ull, 7701646775089062399ull, 4851137973101303466ull}}, {{13218567302908239938ull, 10807826326530981577ull, 403686432006552191ull, 6063922466376629333ull}}, {{2688151073353136210ull, 8898096889736339068ull, 5116294058435578143ull, 7579903082970786666ull}}, {{10903466457700485939ull, 12478839583726293773ull, 7809369804949624243ull, 4737439426856741666ull}}, {{18241019090552995328ull, 10986863461230479312ull, 538340219332254496ull, 5921799283570927083ull}}, {{4354529789481692544ull, 13733579326538099141ull, 14507983329447481832ull, 7402249104463658853ull}}, {{5027424127639751792ull, 8583487079086311963ull, 11373332590118370097ull, 4626405690289786783ull}}, {{1672594141122301836ull, 15341044867285277858ull, 9604979719220574717ull, 5783007112862233479ull}}, {{11314114713257653103ull, 5341248028824433610ull, 7394538630598330493ull, 7228758891077791849ull}}, {{4919271354717290571ull, 11288246054457929917ull, 13854859306675301020ull, 9035948613847239811ull}}, {{5380387605912000559ull, 16278525820890982006ull, 6353444057458369185ull, 5647467883654524882ull}}, {{15948856544244776506ull, 6513099220831563795ull, 17165177108677737290ull, 7059334854568156102ull}}, {{15324384661878582729ull, 17364746062894230552ull, 12233099348992395804ull, 8824168568210195128ull}}, {{9577740413674114206ull, 1629594252454118287ull, 7645687093120247378ull, 5515105355131371955ull}}, {{7360489498665254853ull, 11260364852422423667ull, 4945422847972921318ull, 6893881693914214944ull}}, {{4588925854904180662ull, 4852084028673253776ull, 6181778559966151648ull, 8617352117392768680ull}}, {{2868078659315112914ull, 3032552517920783610ull, 3863611599978844780ull, 5385845073370480425ull}}, {{12808470360998666950ull, 3790690647400979512ull, 9441200518400943879ull, 6732306341713100531ull}}, {{16010587951248333688ull, 126677290823836486ull, 7189814629573791945ull, 8415382927141375664ull}}, {{5394931451102820651ull, 11608388352833367564ull, 4493634143483619965ull, 5259614329463359790ull}}, {{6743664313878525814ull, 675427385759545743ull, 14840414716209300765ull, 6574517911829199737ull}}, {{3817894373920769363ull, 5455970250626820083ull, 4715460339979462244ull, 8218147389786499672ull}}, {{80340974486786900ull, 12633353443496538360ull, 2947162712487163902ull, 5136342118616562295ull}}, {{100426218108483625ull, 6568319767515897142ull, 17519011445891118590ull, 6420427648270702868ull}}, {{9348904809490380339ull, 17433771746249647235ull, 3452020233654346621ull, 8025534560338378586ull}}, {{3537222496717793760ull, 13201950350619723474ull, 6769198664461354542ull, 5015959100211486616ull}}, {{13644900157752018008ull, 7279065901419878534ull, 8461498330576693178ull, 6269948875264358270ull}}, {{7832753160335246702ull, 18322204413629623976ull, 1353500876366090664ull, 7837436094080447838ull}}, {{4895470725209529189ull, 11451377758518514985ull, 14680996103010970377ull, 4898397558800279898ull}}, {{10731024424939299390ull, 479164142865980019ull, 9127873091908937164ull, 6122996948500349873ull}}, {{8802094512746736333ull, 598955178582475024ull, 16021527383313559359ull, 7653746185625437341ull}}, {{5501309070466710209ull, 7291876014255128746ull, 12319297623784668551ull, 4783591366015898338ull}}, {{16100008374938163569ull, 4503158999391523028ull, 6175749992876059881ull, 5979489207519872923ull}}, {{1678266394963152845ull, 10240634767666791690ull, 3108001472667686947ull, 7474361509399841154ull}}, {{5660602515279358432ull, 4094553720578050854ull, 6554186938844692246ull, 4671475943374900721ull}}, {{16299125180953973848ull, 14341564187577339375ull, 12804419691983253211ull, 5839344929218625901ull}}, {{15762220457765079406ull, 13315269216044286315ull, 2170466559696902802ull, 7299181161523282377ull}}, {{15091089553778961353ull, 7420714483200582086ull, 7324769218048516407ull, 9123976451904102971ull}}, {{4820244952684462942ull, 11555475579641445660ull, 2272137752066628802ull, 5702485282440064357ull}}, {{6025306190855578677ull, 5220972437697031267ull, 7451858208510673907ull, 7128106603050080446ull}}, {{2919946720142085442ull, 1914529528693901180ull, 91450723783566576ull, 8910133253812600558ull}}, {{11048338736943579210ull, 1196580955433688237ull, 13892214757646892822ull, 5568833283632875348ull}}, {{18422109439606861916ull, 10719098231146886104ull, 17365268447058616027ull, 6961041604541094185ull}}, {{4580892725799025779ull, 8787186770506219727ull, 7871527503541106322ull, 8701302005676367732ull}}, {{9780586981265472968ull, 10103677749993775233ull, 14143076726567967259ull, 5438313753547729832ull}}, {{16837419745009229114ull, 8017911169064831137ull, 17678845908209959074ull, 6797892191934662290ull}}, {{7211716625979372680ull, 799016924476263114ull, 12875185348407673035ull, 8497365239918327863ull}}, {{9119008909664495829ull, 16640286642293522110ull, 14964519870395877502ull, 5310853274948954914ull}}, {{2175389100225843979ull, 11576986266012126830ull, 9482277801140071070ull, 6638566593686193643ull}}, {{11942608412137080781ull, 5247860795660382729ull, 7241161232997700934ull, 8298208242107742054ull}}, {{546601229944593632ull, 17114971052569902918ull, 18360783825905726795ull, 5186380151317338783ull}}, {{9906623574285517848ull, 16782027797284990743ull, 18339293763954770590ull, 6482975189146673479ull}}, {{7771593449429509406ull, 11754162709751462621ull, 18312431186516075334ull, 8103718986433341849ull}}, {{7163088915107137331ull, 2734665675167276234ull, 4527740463931465228ull, 5064824366520838656ull}}, {{18177233180738697472ull, 3418332093959095292ull, 5659675579914331535ull, 6331030458151048320ull}}, {{4274797402213820224ull, 18107973172731032828ull, 7074594474892914418ull, 7913788072688810400ull}}, {{11895120413238413448ull, 15929169251384283421ull, 4421621546808071511ull, 4946117545430506500ull}}, {{1033842461265853098ull, 15299775545802966373ull, 5527026933510089389ull, 6182646931788133125ull}}, {{5903989095009704276ull, 5289661376971544254ull, 11520469685314999641ull, 7728308664735166406ull}}, {{17525051239663228885ull, 14835253406675684918ull, 2588607534894486871ull, 4830192915459479004ull}}, {{12682942012724260298ull, 13932380739917218244ull, 3235759418618108589ull, 6037741144324348755ull}}, {{15853677515905325372ull, 3580417869614359093ull, 17879757328554799449ull, 7547176430405435943ull}}, {{12214391456654522310ull, 13766976214577444193ull, 18092377357987831511ull, 4716985269003397464ull}}, {{1432931265535989175ull, 12597034249794417338ull, 4168727623775237773ull, 5896231586254246831ull}}, {{11014536118774762277ull, 1911234756960857960ull, 599223511291659313ull, 7370289482817808539ull}}, {{13768170148468452846ull, 7000729464628460354ull, 14584087444396737853ull, 9212861853522260673ull}}, {{13216792361220170933ull, 6681298924606481673ull, 2197525625106879302ull, 5758038658451412921ull}}, {{2685932396243049954ull, 17574995692612877900ull, 7358593049810987031ull, 7197548323064266151ull}}, {{3357415495303812442ull, 17357058597338709471ull, 4586555293836345885ull, 8996935403830332689ull}}, {{9015913712205964633ull, 13154004632550387371ull, 14395812104716185938ull, 5623084627393957930ull}}, {{6658206121830067887ull, 7219133753833208406ull, 8771393094040456615ull, 7028855784242447413ull}}, {{17546129689142360666ull, 4412231173864122603ull, 15575927385977958673ull, 8786069730303059266ull}}, {{8660488046500281465ull, 14286859529733546387ull, 14346640634663612074ull, 5491293581439412041ull}}, {{6213924039697963927ull, 8635202375312157176ull, 4098242738047351381ull, 6864116976799265052ull}}, {{7767405049622454908ull, 15405688987567584374ull, 5122803422559189226ull, 8580146220999081315ull}}, {{242942137586646414ull, 14240241635657128138ull, 895909129885799314ull, 5362591388124425822ull}}, {{9527049708838083825ull, 8576930007716634364ull, 10343258449212024951ull, 6703239235155532277ull}}, {{11908812136047604781ull, 6109476491218405051ull, 17540759079942419093ull, 8379049043944415346ull}}, {{5137164575816059036ull, 6124265816225197109ull, 15574660443391399837ull, 5236905652465259591ull}}, {{11033141738197461699ull, 12267018288708884290ull, 14856639535811861892ull, 6546132065581574489ull}}, {{4568055135892051316ull, 15333772860886105363ull, 4735741364482663653ull, 8182665081976968112ull}}, {{549191450718838121ull, 11889451047267509804ull, 2959838352801664783ull, 5114165676235605070ull}}, {{686489313398547651ull, 10250127790656999351ull, 12923169977856856787ull, 6392707095294506337ull}}, {{14693169697030348275ull, 8200973719893861284ull, 2318904417038907272ull, 7990883869118132922ull}}, {{18406603097498743480ull, 5125608574933663302ull, 6061001279076704949ull, 4994302418198833076ull}}, {{13784881835018653542ull, 11018696737094467032ull, 7576251598845881186ull, 6242878022748541345ull}}, {{17231102293773316928ull, 4549998884513307982ull, 14082000516984739387ull, 7803597528435676681ull}}, {{6157752915180935176ull, 537906293607123537ull, 1883721295474380261ull, 4877248455272297926ull}}, {{12308877162403556874ull, 5284068885436292325ull, 11578023656197751134ull, 6096560569090372407ull}}, {{1551038397722282380ull, 15828458143650141215ull, 9860843551819801013ull, 7620700711362965509ull}}, {{7886928026217508344ull, 12198629348995032211ull, 8468870229101069585ull, 4762937944601853443ull}}, {{5246974014344497526ull, 1413228630961626552ull, 5974401767948949078ull, 5953672430752316804ull}}, {{6558717517930621907ull, 10989907825556808998ull, 7468002209936186347ull, 7442090538440396005ull}}, {{17934256503988802404ull, 4562849381759311671ull, 6973344390423810419ull, 4651306586525247503ull}}, {{17806134611558615101ull, 1091875708771751685ull, 4104994469602375120ull, 5814133233156559379ull}}, {{8422610209166105164ull, 1364844635964689607ull, 519557068575580996ull, 7267666541445699224ull}}, {{5916576743030243551ull, 1706055794955862009ull, 649446335719476245ull, 9084583176807124030ull}}, {{15227075510462371979ull, 3372127881061107707ull, 14240962015106836365ull, 5677864485504452518ull}}, {{14422158369650577070ull, 8826845869753772538ull, 8577830482028769648ull, 7097330606880565648ull}}, {{8804325925208445530ull, 11033557337192215673ull, 10722288102535962060ull, 8871663258600707060ull}}, {{17031918749323748216ull, 16119345372599910603ull, 15924802100939752095ull, 5544789536625441912ull}}, {{16678212418227297366ull, 15537495697322500350ull, 1459258552465138503ull, 6930986920781802391ull}}, {{11624393485929345900ull, 14810183603225737534ull, 15659131245863586841ull, 8663733650977252988ull}}, {{2653559910278453283ull, 2338835724375004103ull, 563584991809965968ull, 5414833531860783118ull}}, {{17152007943130230316ull, 2923544655468755128ull, 9927853276617233268ull, 6768541914825978897ull}}, {{2993265855203236279ull, 3654430819335943911ull, 17021502614198929489ull, 8460677393532473621ull}}, {{8788320187143104531ull, 13813234308153434704ull, 12944282143088024882ull, 5287923370957796013ull}}, {{10985400233928880663ull, 8043170848337017572ull, 2345294623577867391ull, 6609904213697245017ull}}, {{13731750292411100829ull, 5442277541993884061ull, 7543304297899722143ull, 8262380267121556271ull}}, {{10888186941970631970ull, 10318952491387259394ull, 11632094213828408195ull, 5163987666950972669ull}}, {{4386861640608514155ull, 8287004595806686339ull, 705059712003346532ull, 6454984583688715837ull}}, {{871891032333254789ull, 10358755744758357924ull, 5493010658431571069ull, 8068730729610894796ull}}, {{9768303932063060051ull, 8780065349687667654ull, 12656503698374507726ull, 5042956706006809247ull}}, {{2987007878224049256ull, 1751709650254808760ull, 11208943604540746754ull, 6303695882508511559ull}}, {{3733759847780061570ull, 11413009099673286758ull, 9399493487248545538ull, 7879619853135639449ull}}, {{16168657960144702193ull, 11744816705723192127ull, 17403898475598810721ull, 4924762408209774655ull}}, {{15599136431753489838ull, 845962826871826447ull, 17143187076071125498ull, 6155953010262218319ull}}, {{14887234521264474393ull, 10280825570444558867ull, 16817297826661518968ull, 7694941262827772899ull}}, {{6998678566576602544ull, 6425515981527849292ull, 8204968132449755403ull, 4809338289267358062ull}}, {{8748348208220753180ull, 3420208958482423711ull, 1032838128707418446ull, 6011672861584197578ull}}, {{6323749241848553570ull, 13498633234957805447ull, 10514419697739048865ull, 7514591076980246972ull}}, {{10869872303796427838ull, 1519116744207546548ull, 15794884347941681349ull, 4696619423112654357ull}}, {{13587340379745534797ull, 6510581948686821089ull, 5908547379644937974ull, 5870774278890817947ull}}, {{3149117419399754784ull, 17361599472713302170ull, 2773998206128784563ull, 7338467848613522434ull}}, {{13159768811104469288ull, 17090313322464239808ull, 12690869794515756512ull, 9173084810766903042ull}}, {{8224855506940293305ull, 10681445826540149880ull, 12543479639999735724ull, 5733178006729314401ull}}, {{10281069383675366631ull, 13351807283175187350ull, 1844291494717505943ull, 7166472508411643002ull}}, {{3627964692739432481ull, 12078073085541596284ull, 11528736405251658237ull, 8958090635514553752ull}}, {{11490849969816921109ull, 9854638687677191629ull, 7205460253282286398ull, 5598806647196596095ull}}, {{528504406988987674ull, 3094926322741713729ull, 4395139298175470094ull, 6998508308995745119ull}}, {{5272316527163622496ull, 13092029940281917969ull, 882238104291949713ull, 8748135386244681399ull}}, {{14824412875545733820ull, 1264989685035116874ull, 7468927842823550427ull, 5467584616402925874ull}}, {{9307144057577391467ull, 15416295161576059805ull, 112787766674662225ull, 6834480770503657343ull}}, {{16245616090399127238ull, 5435310896687911044ull, 13976042763625491494ull, 8543100963129571678ull}}, {{930138019644678716ull, 17232127365712108115ull, 4123340708838544279ull, 5339438101955982299ull}}, {{14997730579838012107ull, 16928473188712747239ull, 542489867620792445ull, 6674297627444977874ull}}, {{14135477206370127229ull, 7325533430608770337ull, 9901484371380766365ull, 8342872034306222342ull}}, {{1917144226340247663ull, 6884301403344175413ull, 1576741713685591074ull, 5214295021441388964ull}}, {{7008116301352697482ull, 17828748791034995074ull, 1970927142106988842ull, 6517868776801736205ull}}, {{17983517413545647661ull, 13062563951938968034ull, 7075344946061123957ull, 8147335971002170256ull}}, {{15851384401893417692ull, 10469945479175548973ull, 4422090591288202473ull, 5092084981876356410ull}}, {{5979172447084608403ull, 17699117867396824121ull, 14750985275965028899ull, 6365106227345445512ull}}, {{12085651577283148407ull, 17512211315818642247ull, 18438731594956286124ull, 7956382784181806890ull}}, {{14471061263443049611ull, 1721760035531875596ull, 16135893265275066732ull, 4972739240113629306ull}}, {{18088826579303812013ull, 2152200044414844495ull, 10946494544739057607ull, 6215924050142036633ull}}, {{17999347205702377113ull, 16525308110800719331ull, 18294804199351209912ull, 7769905062677545791ull}}, {{8943748994350291744ull, 10328317569250449582ull, 18351781652235588051ull, 4856190664173466119ull}}, {{1956314206083088871ull, 8298710943135674074ull, 18328041046867097160ull, 6070238330216832649ull}}, {{11668764794458636897ull, 10373388678919592592ull, 9074993253301707738ull, 7587797912771040812ull}}, {{7292977996536648061ull, 11095053942752133274ull, 14895242820168343144ull, 4742373695481900507ull}}, {{18339594532525585884ull, 13868817428440166592ull, 14007367506783041026ull, 5927967119352375634ull}}, {{4477749091947430739ull, 8112649748695432433ull, 8285837346624025475ull, 7409958899190469543ull}}, {{14327808228535613972ull, 2764563083720951318ull, 12096177369281097778ull, 4631224311994043464ull}}, {{8686388248814741657ull, 12679075891505964956ull, 15120221711601372222ull, 5789030389992554330ull}}, {{10857985311018427071ull, 6625472827527680387ull, 9676905102646939470ull, 7236287987490692913ull}}, {{8960795620345645935ull, 17505213071264376292ull, 16707817396736062241ull, 9045359984363366141ull}}, {{14823869299570804517ull, 4023229141899153326ull, 12748228882173732853ull, 5653349990227103838ull}}, {{9306464587608729838ull, 9640722445801329562ull, 6711914065862390258ull, 7066687487783879798ull}}, {{2409708697656136490ull, 2827531020396886145ull, 17613264619182763631ull, 8833359359729849747ull}}, {{13035282982103555066ull, 8684735915389135696ull, 8702447377775533317ull, 5520849599831156092ull}}, {{16294103727629443833ull, 15467605912663807524ull, 10878059222219416646ull, 6901061999788945115ull}}, {{1920885585827253175ull, 10111135353974983598ull, 8985888009346882904ull, 8626327499736181394ull}}, {{15035611546424196947ull, 6319459596234364748ull, 10227866024269189719ull, 5391454687335113371ull}}, {{347770359320694567ull, 3287638476865568032ull, 8173146511909099245ull, 6739318359168891714ull}}, {{434712949150868209ull, 8721234114509347944ull, 993061103031598248ull, 8424147948961114643ull}}, {{271695593219292631ull, 5450771321568342465ull, 16761564253890606569ull, 5265092468100696651ull}}, {{4951305509951503692ull, 11425150170387815985ull, 16340269298935870307ull, 6581365585125870814ull}}, {{10800817905866767519ull, 9669751694557382077ull, 11201964586815062076ull, 8226706981407338518ull}}, {{9056354200380423652ull, 15266966845953139606ull, 2389541848332025893ull, 5141691863379586574ull}}, {{2097070713620753756ull, 5248650502159260796ull, 12210299347269808175ull, 6427114829224483217ull}}, {{2621338392025942195ull, 1949127109271688091ull, 1427816128805096507ull, 8033893536530604022ull}}, {{17779237559512071536ull, 17359105507790662720ull, 14727443135785349028ull, 5021183460331627513ull}}, {{3777302875680537804ull, 3252137811028776785ull, 4574245864449522574ull, 6276479325414534392ull}}, {{9333314613028060159ull, 13288544300640746789ull, 5717807330561903217ull, 7845599156768167990ull}}, {{8139164642356231552ull, 1387811160259384887ull, 17408687636883353223ull, 4903499472980104993ull}}, {{5562269784517901535ull, 15569822005606394821ull, 7925801490822027816ull, 6129374341225131242ull}}, {{11564523249074764823ull, 1015533433298441910ull, 683879826672758963ull, 7661717926531414053ull}}, {{2616141012244340111ull, 16775609460307383858ull, 2733267900884168303ull, 4788573704082133783ull}}, {{12493548302160200946ull, 16357825806956841918ull, 17251642931387374091ull, 5985717130102667228ull}}, {{6393563340845475375ull, 15835596240268664494ull, 3117809590524665998ull, 7482146412628334036ull}}, {{17831035143310585821ull, 5285561631740527404ull, 11172003030932692057ull, 4676341507892708772ull}}, {{3842049855428680661ull, 11218638058103047160ull, 13965003788665865071ull, 5845426884865885965ull}}, {{4802562319285850826ull, 9411611554201421046ull, 3621196680550167627ull, 7306783606082357457ull}}, {{15226574935962089340ull, 7152828424324388403ull, 9138181869115097438ull, 9133479507602946821ull}}, {{7210766325762611886ull, 18305575820484906464ull, 8017206677410629850ull, 5708424692251841763ull}}, {{9013457907203264857ull, 13658597738751357272ull, 5409822328335899409ull, 7135530865314802204ull}}, {{11266822384004081071ull, 3238189118157032878ull, 6762277910419874262ull, 8919413581643502755ull}}, {{2430077971575162766ull, 15858926254130309261ull, 1920580684798727461ull, 5574633488527189222ull}}, {{7649283482896341361ull, 5988599762380722864ull, 11624097892853185135ull, 6968291860658986527ull}}, {{9561604353620426701ull, 2874063684548515676ull, 9918436347639093515ull, 8710364825823733159ull}}, {{15199374757867542496ull, 17937190867338679961ull, 13116551744915515302ull, 5443978016139833224ull}}, {{5164160392052264408ull, 13198116547318574144ull, 16395689681144394128ull, 6804972520174791530ull}}, {{6455200490065330510ull, 16497645684148217680ull, 11271240064575716852ull, 8506215650218489413ull}}, {{4034500306290831569ull, 1087656515737860242ull, 9350368049573516985ull, 5316384781386555883ull}}, {{14266497419718315269ull, 5971256663099713206ull, 7076274043539508327ull, 6645480976733194854ull}}, {{8609749737793118278ull, 2852384810447253604ull, 18068714591279161217ull, 8306851220916493567ull}}, {{14604465622975474732ull, 13311955552598003262ull, 18210475647190557616ull, 5191782013072808479ull}}, {{9032209991864567607ull, 16639944440747504078ull, 18151408540560809116ull, 6489727516341010599ull}}, {{2066890452975933701ull, 2353186477224828482ull, 18077574657273623492ull, 8112159395426263249ull}}, {{5903492551537346467ull, 10694113585120293609ull, 4380955133154932826ull, 5070099622141414531ull}}, {{11991051707849070988ull, 4144269944545591203ull, 864507898016278129ull, 6337624527676768164ull}}, {{10377128616383950831ull, 9792023449109376908ull, 1080634872520347661ull, 7922030659595960205ull}}, {{15709077422094745077ull, 8425857664907054519ull, 2981239804538911240ull, 4951269162247475128ull}}, {{15024660759191043442ull, 10532322081133818149ull, 3726549755673639050ull, 6189086452809343910ull}}, {{4945767893706640591ull, 3942030564562496879ull, 13881559231446824621ull, 7736358066011679887ull}}, {{10008633961207732226ull, 4769612112065254501ull, 15593503547295347244ull, 4835223791257299929ull}}, {{17122478469937053186ull, 5962015140081568126ull, 5656821378837020343ull, 6044029739071624912ull}}, {{12179726050566540674ull, 2840832906674572254ull, 7071026723546275429ull, 7555037173839531140ull}}, {{3000642763176700018ull, 4081363575885301611ull, 13642763739071197951ull, 4721898233649706962ull}}, {{17585861509253038734ull, 490018451429239109ull, 7830082636984221631ull, 5902372792062133703ull}}, {{8147268831284134705ull, 14447581119568712599ull, 5175917277802889134ull, 7377965990077667129ull}}, {{5572400020677780477ull, 8836104362606114941ull, 11081582615680999322ull, 9222457487597083911ull}}, {{5788593022137306750ull, 10134251245056209742ull, 13843518162441706432ull, 5764035929748177444ull}}, {{16459113314526409246ull, 12667814056320262177ull, 17304397703052133040ull, 7205044912185221805ull}}, {{6738833587875847845ull, 15834767570400327722ull, 7795439073533002588ull, 9006306140231527257ull}}, {{8823457010849792808ull, 673357694645429018ull, 16401364467026596378ull, 5628941337644704535ull}}, {{1805949226707465201ull, 10065069155161562081ull, 15890019565355857568ull, 7036176672055880669ull}}, {{6869122551811719405ull, 12581336443951952601ull, 6027466401412658248ull, 8795220840069850837ull}}, {{15822416640950794389ull, 7863335277469970375ull, 6073009510096605357ull, 5497013025043656773ull}}, {{15166334782761105082ull, 14440855115264850873ull, 12202947906048144600ull, 6871266281304570966ull}}, {{5122860423169217640ull, 18051068894081063592ull, 6030312845705404942ull, 8589082851630713708ull}}, {{3201787764480761025ull, 6670232040373276841ull, 12992317565420653897ull, 5368176782269196067ull}}, {{8613920724028339185ull, 12949476068893983955ull, 11628710938348429467ull, 6710220977836495084ull}}, {{6155714886608036077ull, 11575159067690092040ull, 14535888672935536834ull, 8387776222295618855ull}}, {{3847321804130022549ull, 11846160435733695429ull, 16002459448225792377ull, 5242360138934761784ull}}, {{9420838273589916090ull, 972642489384955574ull, 1556330236572688856ull, 6552950173668452231ull}}, {{2552675805132619304ull, 1215803111731194468ull, 15780470850998024782ull, 8191187717085565288ull}}, {{10818794415062662873ull, 14594935000114160254ull, 9862794281873765488ull, 5119492323178478305ull}}, {{4300120981973552783ull, 18243668750142700318ull, 16940178870769594764ull, 6399365403973097881ull}}, {{14598523264321716787ull, 4357841863968823781ull, 7340165533179829744ull, 7999206754966372352ull}}, {{11429920049414766944ull, 2723651164980514863ull, 4587603458237393590ull, 4999504221853982720ull}}, {{9675714043341070776ull, 12627935993080419387ull, 5734504322796741987ull, 6249380277317478400ull}}, {{7482956535748950566ull, 11173233972923136330ull, 7168130403495927484ull, 7811725346646848000ull}}, {{9288533853270482008ull, 16206643269931736014ull, 4480081502184954677ull, 4882328341654280000ull}}, {{2387295279733326702ull, 6423246032132506306ull, 5600101877731193347ull, 6102910427067850000ull}}, {{12207491136521434185ull, 3417371521738244978ull, 7000127347163991684ull, 7628638033834812500ull}}, {{12241367978753284270ull, 11359229237941178919ull, 13598451628832270610ull, 4767898771146757812ull}}, {{10690023955014217433ull, 4975664510571697841ull, 16998064536040338263ull, 5959873463933447265ull}}, {{17974215962195159695ull, 1607894619787234397ull, 7412522614768259117ull, 7449841829916809082ull}}, {{13539727985585668762ull, 3310777146580715450ull, 9244512652657549852ull, 4656151143698005676ull}}, {{7701287945127310144ull, 4138471433225894313ull, 11555640815821937315ull, 5820188929622507095ull}}, {{14238295949836525584ull, 561403273104979987ull, 9832865001350033740ull, 7275236162028133869ull}}, {{13186183918868269076ull, 701754091381224984ull, 16902767270114930079ull, 9094045202535167336ull}}, {{8241364949292668173ull, 7356125334754347471ull, 10564229543821831299ull, 5683778251584479585ull}}, {{5690020168188447312ull, 4583470650015546435ull, 17816972948204677028ull, 7104722814480599481ull}}, {{2500839191808171235ull, 5729338312519433044ull, 8436158129973682573ull, 8880903518100749352ull}}, {{10786396531734882830ull, 5886679454538339604ull, 5272598831233551608ull, 5550564698812968345ull}}, {{13482995664668603538ull, 7358349318172924505ull, 11202434557469327414ull, 6938205873516210431ull}}, {{3018686525553590710ull, 18421308684570931440ull, 9391357178409271363ull, 8672757341895263039ull}}, {{1886679078470994194ull, 9207474918643138198ull, 12787127264146876458ull, 5420473338684539399ull}}, {{11581720884943518550ull, 2285971611449146939ull, 11372223061756207669ull, 6775591673355674249ull}}, {{9865465087752010284ull, 7469150532738821578ull, 380220771913095874ull, 8469489591694592812ull}}, {{10777601698272394332ull, 9279905101389151390ull, 9461010019300460729ull, 5293430994809120507ull}}, {{4248630085985717106ull, 16211567395163827142ull, 7214576505698188007ull, 6616788743511400634ull}}, {{14534159644336922191ull, 15652773225527396023ull, 18241592668977510817ull, 8270985929389250792ull}}, {{16001378805351658225ull, 2865454238313540658ull, 11400995418110944261ull, 5169366205868281745ull}}, {{10778351469834796974ull, 8193503816319313727ull, 416186217356516614ull, 6461707757335352182ull}}, {{8861253318866108313ull, 1018507733544366351ull, 9743604808550421576ull, 8077134696669190227ull}}, {{12455812351932399552ull, 636567333465228969ull, 3783909996130319533ull, 5048209185418243892ull}}, {{1734707384633335728ull, 5407395185258924116ull, 4729887495162899416ull, 6310261481772804865ull}}, {{2168384230791669659ull, 6759243981573655145ull, 10524045387381012174ull, 7887826852216006081ull}}, {{12884455190313263297ull, 18059585543765698177ull, 18106743413181602368ull, 4929891782635003800ull}}, {{2270510932609415409ull, 4127737855997571106ull, 4186685192767451345ull, 6162364728293754751ull}}, {{12061510702616545070ull, 9771358338424351786ull, 621670472531926277ull, 7702955910367193439ull}}, {{12150130207562728573ull, 8412941970728913818ull, 7306073072973535779ull, 4814347443979495899ull}}, {{5964290722598634908ull, 5904491444983754369ull, 4520905322789531820ull, 6017934304974369874ull}}, {{12067049421675681539ull, 7380614306229692961ull, 14874503690341690583ull, 7522417881217962342ull}}, {{624376860906219106ull, 11530412969034639957ull, 4684878788036168710ull, 4701511175761226464ull}}, {{5392157094560161786ull, 5189644174438524138ull, 5856098485045210888ull, 5876888969701533080ull}}, {{15963568405054978041ull, 6487055218048155172ull, 7320123106306513610ull, 7346111212126916350ull}}, {{1507716432609170935ull, 17332191059414969774ull, 18373525919737917820ull, 9182639015158645437ull}}, {{14777380825662895546ull, 1609247375279580300ull, 13789296709049892590ull, 5739149384474153398ull}}, {{24981958369067817ull, 11234931255954251184ull, 8013248849457589929ull, 7173936730592691748ull}}, {{31227447961334771ull, 208606014660650268ull, 10016561061821987412ull, 8967420913240864685ull}}, {{9242889191830610040ull, 9353750796017682225ull, 8566193672852436084ull, 5604638070775540428ull}}, {{16165297508215650454ull, 11692188495022102781ull, 10707742091065545105ull, 7005797588469425535ull}}, {{6371563829987399355ull, 780177563495464765ull, 8772991595404543478ull, 8757246985586781919ull}}, {{6288070402955818549ull, 14322669032466829190ull, 12400648774768921529ull, 5473279365991738699ull}}, {{17083460040549548994ull, 4068278235301372775ull, 10889124950033764008ull, 6841599207489673374ull}}, {{16742639032259548339ull, 5085347794126715969ull, 4388034150687429202ull, 8551999009362091718ull}}, {{3546620367521135856ull, 7790028389756585385ull, 16577579399461806963ull, 5344999380851307323ull}}, {{9044961477828807724ull, 5125849468768343827ull, 16110288230899870800ull, 6681249226064134154ull}}, {{6694515828858621751ull, 6407311835960429784ull, 10914488251770062692ull, 8351561532580167693ull}}, {{4184072393036638594ull, 13227941934330044423ull, 9127398166569983134ull, 5219725957862604808ull}}, {{618404472868410339ull, 7311555381057779721ull, 11409247708212478918ull, 6524657447328256010ull}}, {{5384691609512900827ull, 18362816263177000459ull, 5038187598410822839ull, 8155821809160320013ull}}, {{1059589246731869065ull, 18394289192126707143ull, 5454710258220458226ull, 5097388630725200008ull}}, {{15159544613697000043ull, 13769489453303608120ull, 6818387822775572783ull, 6371735788406500010ull}}, {{502686693411698438ull, 12600175798202122247ull, 17746356815324241787ull, 7964669735508125012ull}}, {{7231708211023393380ull, 5569266864662632452ull, 1868100972722875309ull, 4977918584692578133ull}}, {{9039635263779241725ull, 11573269599255678469ull, 6946812234330982040ull, 6222398230865722666ull}}, {{15911230098151440060ull, 14466586999069598086ull, 17906887329768503358ull, 7777997788582153332ull}}, {{5332832792917262134ull, 4429930855991110900ull, 1968432544250538791ull, 4861248617863845833ull}}, {{6666040991146577667ull, 925727551561500721ull, 7072226698740561393ull, 6076560772329807291ull}}, {{12944237257360609988ull, 5768845457879263805ull, 4228597354998313837ull, 7595700965412259114ull}}, {{10395991295064075194ull, 5911371420388233830ull, 7254559365301334052ull, 4747313103382661946ull}}, {{3771617081975318185ull, 7389214275485292288ull, 18291571243481443373ull, 5934141379228327432ull}}, {{4714521352469147731ull, 13848203862784003264ull, 4417719980642252600ull, 7417676724035409291ull}}, {{2946575845293217332ull, 8655127414240002040ull, 455231978687713923ull, 4636047952522130807ull}}, {{3683219806616521665ull, 6207223249372614646ull, 14404098028641806116ull, 5795059940652663508ull}}, {{13827396795125427889ull, 7759029061715768307ull, 18005122535802257645ull, 7243824925815829385ull}}, {{12672559975479396957ull, 14310472345572098288ull, 8671345114470658344ull, 9054781157269786732ull}}, {{7920349984674623099ull, 8944045215982561430ull, 14642962733398937273ull, 5659238223293616707ull}}, {{677065443988503065ull, 15791742538405589692ull, 13692017398321283687ull, 7074047779117020884ull}}, {{846331804985628831ull, 15127992154579599211ull, 17115021747901604609ull, 8842559723896276105ull}}, {{16669858442611875684ull, 2537466068971167650ull, 3779359564797421025ull, 5526599827435172566ull}}, {{11613951016410068796ull, 7783518604641347467ull, 13947571492851552089ull, 6908249784293965707ull}}, {{9905752752085198091ull, 14341084274229072238ull, 12822778347637052207ull, 8635312230367457134ull}}, {{1579409451625860903ull, 15880706699034252005ull, 3402550448845769725ull, 5397070143979660709ull}}, {{6585947832959714033ull, 6015825318510651294ull, 8864874079484600061ull, 6746337679974575886ull}}, {{17455806828054418349ull, 12131467666565702021ull, 1857720562500974268ull, 8432922099968219858ull}}, {{13215722276747705420ull, 16805539328458339571ull, 5772761369990496821ull, 5270576312480137411ull}}, {{11907966827507243871ull, 7171866105290760752ull, 2604265694060733123ull, 6588220390600171764ull}}, {{14884958534384054839ull, 4353146613186063036ull, 3255332117575916404ull, 8235275488250214705ull}}, {{79727047135258467ull, 11944088670096065206ull, 13563797619553417512ull, 5147047180156384190ull}}, {{9323030845773848891ull, 14930110837620081507ull, 7731374987586996082ull, 6433808975195480238ull}}, {{7042102538789923210ull, 9439266510170326076ull, 440846697628969295ull, 8042261218994350298ull}}, {{13624686123598477814ull, 12817070596497535653ull, 4887215204445493713ull, 5026413261871468936ull}}, {{3195799599215933556ull, 2186280190339755855ull, 6109019005556867142ull, 6283016577339336170ull}}, {{17829807554302080657ull, 11956222274779470626ull, 16859645793800859735ull, 7853770721674170212ull}}, {{15755315739866188315ull, 14390167949378250997ull, 1313906584270761526ull, 4908606701046356383ull}}, {{5859086619550571681ull, 8764337899868037939ull, 15477441285620615620ull, 6135758376307945478ull}}, {{2712172256010826697ull, 10955422374835047424ull, 10123429570170993717ull, 7669697970384931848ull}}, {{1695107660006766686ull, 9152981993485598592ull, 6327143481356871073ull, 4793561231490582405ull}}, {{2118884575008458357ull, 16052913510284386144ull, 12520615370123476745ull, 5991951539363228006ull}}, {{2648605718760572947ull, 6231083832573318968ull, 6427397175799570124ull, 7489939424204035008ull}}, {{1655378574225358092ull, 13117799432213100163ull, 4017123234874731327ull, 4681212140127521880ull}}, {{15904281273063861327ull, 11785563271838987299ull, 5021404043593414159ull, 5851515175159402350ull}}, {{15268665572902438754ull, 10120268071371346220ull, 15500127091346543507ull, 7314393968949252937ull}}, {{639087892418496827ull, 8038649070786794872ull, 5540100808901015672ull, 9142992461186566172ull}}, {{399429932761560517ull, 5024155669241746795ull, 12685935042417910603ull, 5714370288241603857ull}}, {{14334345471234114358ull, 1668508568124795589ull, 2022360747740224542ull, 7142962860302004822ull}}, {{4082873783760479235ull, 11309007747010770295ull, 11751322971530056485ull, 8928703575377506027ull}}, {{9469325142491381378ull, 9373972851095425386ull, 5038733847992591351ull, 5580439734610941267ull}}, {{2613284391259450915ull, 7105780045441893829ull, 1686731291563351285ull, 6975549668263676584ull}}, {{7878291507501701547ull, 13493911075229755190ull, 2108414114454189106ull, 8719437085329595730ull}}, {{312246173761175563ull, 13045380440445984898ull, 5929444839961256095ull, 5449648178330997331ull}}, {{9613679754056245262ull, 11695039532130093218ull, 2800120031524182215ull, 6812060222913746664ull}}, {{2793727655715530769ull, 10007113396735228619ull, 3500150039405227769ull, 8515075278642183330ull}}, {{17886980849318064395ull, 17783660919027987646ull, 6799279793055655259ull, 5321922049151364581ull}}, {{13135354024792804685ull, 17617890130357596654ull, 13110785759746956978ull, 6652402561439205726ull}}, {{7195820494136230049ull, 12798990626092220010ull, 7165110162828920415ull, 8315503201799007158ull}}, {{9109073827262531685ull, 14916898168948719362ull, 18313251907050238971ull, 5197189501124379473ull}}, {{2162970247223388798ull, 14034436692758511299ull, 9056506828530635002ull, 6496486876405474342ull}}, {{16538770864311399709ull, 8319673829093363315ull, 2097261498808517945ull, 8120608595506842928ull}}, {{8030888780980930866ull, 16729011189251821832ull, 1310788436755323715ull, 5075380372191776830ull}}, {{10038610976226163583ull, 16299577968137389386ull, 10861857582798930452ull, 6344225465239721037ull}}, {{3324891683427928670ull, 1927728386462185117ull, 18189007996926050970ull, 7930281831549651296ull}}, {{4383900311356149371ull, 5816516259966253602ull, 11368129998078781856ull, 4956426144718532060ull}}, {{14703247426049962522ull, 7270645324957817002ull, 14210162497598477320ull, 6195532680898165075ull}}, {{9155687245707677344ull, 9088306656197271253ull, 13151017103570708746ull, 7744415851122706344ull}}, {{8028147537780992292ull, 10291877678550682437ull, 8219385689731692966ull, 4840259906951691465ull}}, {{14646870440653628269ull, 3641475061333577238ull, 14885918130592004112ull, 6050324883689614331ull}}, {{9085216013962259528ull, 4551843826666971548ull, 13995711644812617236ull, 7562906104612017914ull}}, {{14901632045581188013ull, 12068274428521633025ull, 13359005796435273676ull, 4726816315382511196ull}}, {{4791982001694321305ull, 15085343035652041282ull, 16698757245544092095ull, 5908520394228138995ull}}, {{15213349538972677439ull, 14244992776137663698ull, 16261760538502727215ull, 7385650492785173744ull}}, {{14120029480285311303ull, 15820649512727121667ull, 10163600336564204509ull, 4616031557990733590ull}}, {{13038350831929251225ull, 5940753835626738372ull, 3481128383850479829ull, 5770039447488416988ull}}, {{16297938539911564031ull, 12037628312960810869ull, 4351410479813099786ull, 7212549309360521235ull}}, {{6537365119607291327ull, 5823663354346237779ull, 827577081338986829ull, 9015686636700651544ull}}, {{1780010190540863127ull, 5945632605680092564ull, 517235675836866768ull, 5634804147937907215ull}}, {{2225012738176078909ull, 7432040757100115705ull, 14481602650078247172ull, 7043505184922384018ull}}, {{7392951941147486540ull, 9290050946375144631ull, 8878631275743033157ull, 8804381481152980023ull}}, {{11538123990858260944ull, 8112124850698159346ull, 12466673574980477579ull, 5502738425720612514ull}}, {{5199282951718050372ull, 5528470044945311279ull, 6359969931870821166ull, 6878423032150765643ull}}, {{1887417671220175061ull, 16133959593036414907ull, 3338276396411138553ull, 8598028790188457054ull}}, {{17320537109008467077ull, 3166195718006677460ull, 15921480803039125308ull, 5373767993867785658ull}}, {{3203927312551032230ull, 3957744647508346826ull, 10678478966944130827ull, 6717209992334732073ull}}, {{13228281177543566096ull, 335494790958045628ull, 17959784727107551438ull, 8396512490418415091ull}}, {{17491047772819504618ull, 14044742299630942229ull, 8919022445228525696ull, 5247820306511509432ull}}, {{8028751660742217060ull, 17555927874538677787ull, 11148778056535657120ull, 6559775383139386790ull}}, {{5424253557500383421ull, 3498165769463795618ull, 4712600533814795593ull, 8199719228924233488ull}}, {{8001844491865127543ull, 13715568651983342021ull, 2945375333634247245ull, 5124824518077645930ull}}, {{14613991633258797332ull, 3309402759697013814ull, 12905091203897584865ull, 6406030647597057412ull}}, {{9044117504718720857ull, 8748439468048655172ull, 16131364004871981081ull, 8007538309496321765ull}}, {{14875945477303976344ull, 16996989713598879242ull, 12387945512258682127ull, 5004711443435201103ull}}, {{9371559809775194622ull, 16634551123571211149ull, 10873245871895964755ull, 6255889304294001379ull}}, {{16326135780646381181ull, 16181502886036626032ull, 8979871321442568040ull, 7819861630367501724ull}}, {{10203834862903988238ull, 10113439303772891270ull, 14835791612756380833ull, 4887413518979688577ull}}, {{3531421541775209490ull, 17253485148143501992ull, 4709681460663312329ull, 6109266898724610722ull}}, {{4414276927219011862ull, 7731798379897213778ull, 15110473862683916220ull, 7636583623405763402ull}}, {{7370609097939270318ull, 14055746024290534419ull, 14055732182604835541ull, 4772864764628602126ull}}, {{4601575353996699993ull, 3734624475081004312ull, 8346293191401268619ull, 5966080955785752658ull}}, {{5751969192495874991ull, 56594575423867486ull, 1209494452396809966ull, 7457601194732190823ull}}, {{17430038800592085582ull, 13870429664922080890ull, 7673463060389088084ull, 4661000746707619264ull}}, {{12564176463885331169ull, 17338037081152601113ull, 9591828825486360105ull, 5826250933384524080ull}}, {{1870162524574500249ull, 7837488296158587680ull, 11989786031857950132ull, 7282813666730655100ull}}, {{2337703155718125312ull, 9796860370198234600ull, 14987232539822437665ull, 9103517083413318875ull}}, {{1461064472323828320ull, 17652252777442366385ull, 7061177328175329588ull, 5689698177133324297ull}}, {{6438016608832173304ull, 3618571898093406365ull, 13438157678646549890ull, 7112122721416655371ull}}, {{12659206779467604534ull, 13746586909471533764ull, 12186011079880799458ull, 8890153401770819214ull}}, {{17135376274022028642ull, 13203302836847096506ull, 3004570906498111757ull, 5556345876106762009ull}}, {{12195848305672759994ull, 2669070490776706921ull, 8367399651550027601ull, 6945432345133452511ull}}, {{1409752326808786280ull, 7948024131898271556ull, 5847563546010146597ull, 8681790431416815639ull}}, {{10104467241110267233ull, 7273358091650113674ull, 10572256243897423479ull, 5426119019635509774ull}}, {{3407212014533058234ull, 4480011596135254189ull, 3991948268017003541ull, 6782648774544387218ull}}, {{8870701036593710696ull, 10211700513596455640ull, 14213307371876030234ull, 8478310968180484022ull}}, {{5544188147871069185ull, 10993998839425172679ull, 4271631088995130992ull, 5298944355112802514ull}}, {{2318549166411448577ull, 13742498549281465849ull, 14562910898098689548ull, 6623680443891003142ull}}, {{7509872476441698625ull, 17178123186601832311ull, 8980266585768586127ull, 8279600554863753928ull}}, {{11611199325417143497ull, 17653856019267227050ull, 5612666616105366329ull, 5174750346789846205ull}}, {{5290627119916653563ull, 8232261968801870101ull, 11627519288559095816ull, 6468437933487307756ull}}, {{11224969918323204858ull, 10290327461002337626ull, 14534399110698869770ull, 8085547416859134695ull}}, {{11627292217379390940ull, 11043140681553848920ull, 16001528471827875462ull, 5053467135536959184ull}}, {{14534115271724238675ull, 4580553815087535342ull, 1555166516075292712ull, 6316833919421198981ull}}, {{8944272052800522536ull, 5725692268859419178ull, 6555644163521503794ull, 7896042399276498726ull}}, {{10201856051427714489ull, 8190243686464524890ull, 17932335657483103583ull, 4935026499547811703ull}}, {{3528948027429867303ull, 5626118589653268209ull, 17803733553426491575ull, 6168783124434764629ull}}, {{9022871052714722033ull, 2420962218639197357ull, 8419608886500950757ull, 7710978905543455787ull}}, {{7945137417160395223ull, 3818944395863192300ull, 2956412544849400271ull, 4819361815964659867ull}}, {{9931421771450494029ull, 161994476401602471ull, 17530573736343914051ull, 6024202269955824833ull}}, {{7802591195885729632ull, 14037551150784166801ull, 8078159115147728851ull, 7530252837444781042ull}}, {{16405834543497050780ull, 6467626460026410298ull, 9660535465394718436ull, 4706408023402988151ull}}, {{11283921142516537667ull, 8084533075033012873ull, 7463983313316010141ull, 5883010029253735189ull}}, {{269843372863508371ull, 14717352362218653996ull, 13941665160072400580ull, 7353762536567168986ull}}, {{337304216079385464ull, 18396690452773317495ull, 8203709413235724917ull, 9192203170708961233ull}}, {{7128344162690697771ull, 13803774542197017386ull, 16656533429340797833ull, 5745126981693100770ull}}, {{18133802240218148022ull, 3419660122464108020ull, 11597294749821221484ull, 7181408727116375963ull}}, {{4220508726563133411ull, 4274575153080135026ull, 9884932418849138951ull, 8976760908895469954ull}}, {{7249503972529346286ull, 9589138498316166247ull, 10789768780208099748ull, 5610475568059668721ull}}, {{4450193947234294954ull, 11986423122895207809ull, 18098896993687512589ull, 7013094460074585901ull}}, {{10174428452470256596ull, 1147970848336846049ull, 8788563186827227025ull, 8766368075093232377ull}}, {{17888232828862380133ull, 12246696826278998540ull, 17022067037835486650ull, 5478980046933270235ull}}, {{3913546962368423550ull, 6084998995993972368ull, 16665897778866970409ull, 6848725058666587794ull}}, {{4891933702960529437ull, 12217934763419853364ull, 11609000186728937203ull, 8560906323333234743ull}}, {{12280830601205106706ull, 5330366217923714400ull, 14173154144346667608ull, 5350566452083271714ull}}, {{15351038251506383383ull, 6662957772404643000ull, 8493070643578558702ull, 6688208065104089643ull}}, {{742053740673427612ull, 17552069252360579559ull, 6004652286045810473ull, 8360260081380112054ull}}, {{7381312615561974114ull, 4052514255084280368ull, 17587965734060795258ull, 5225162550862570033ull}}, {{9226640769452467642ull, 14289014855710126268ull, 8149899112293830360ull, 6531453188578212542ull}}, {{11533300961815584553ull, 17861268569637657835ull, 964001853512512142ull, 8164316485722765678ull}}, {{4902470091921046394ull, 6551606837596148243ull, 14437559213727483801ull, 5102697803576728548ull}}, {{1516401596473920088ull, 12801194565422573208ull, 18046949017159354751ull, 6378372254470910685ull}}, {{1895501995592400110ull, 11389807188350828606ull, 8723628216167029727ull, 7972965318088638357ull}}, {{15019746802527413781ull, 14036158520360349734ull, 7758110644318087531ull, 4983103323805398973ull}}, {{9551311466304491418ull, 12933512132023049264ull, 14309324323824997318ull, 6228879154756748716ull}}, {{11939139332880614272ull, 6943518128174035772ull, 17886655404781246648ull, 7786098943445935895ull}}, {{16685334119905159728ull, 4339698830108772357ull, 18096688655629361011ull, 4866311839653709934ull}}, {{7021609594599285948ull, 812937519208577543ull, 13397488782681925456ull, 6082889799567137418ull}}, {{4165325974821719531ull, 1016171899010721929ull, 7523488941497631012ull, 7603612249458921773ull}}, {{14132543780332044467ull, 9858479473736477013ull, 7008023597649713334ull, 4752257655911826108ull}}, {{3830621670132891872ull, 3099727305315820459ull, 8760029497062141668ull, 5940322069889782635ull}}, {{176591069238726936ull, 3874659131644775574ull, 6338350852900289181ull, 7425402587362228294ull}}, {{13945427473556368047ull, 4727504966491678685ull, 17796527338344844450ull, 4640876617101392683ull}}, {{3596726286663296347ull, 15132753244969374165ull, 17633973154503667658ull, 5801095771376740854ull}}, {{9107593876756508337ull, 9692569519356941898ull, 12819094406274808765ull, 7251369714220926068ull}}, {{2161120309090859613ull, 16727397917623565277ull, 16023868007843510956ull, 9064212142776157585ull}}, {{3656543202395481210ull, 1231251661659952490ull, 3097388477261112492ull, 5665132589235098491ull}}, {{13794051039849127321ull, 1539064577074940612ull, 17706793651858554327ull, 7081415736543873113ull}}, {{17242563799811409151ull, 15758888776625839477ull, 8298434009541029196ull, 8851769670679841392ull}}, {{13082445384095824672ull, 625933448536373865ull, 5186521255963143248ull, 5532356044174900870ull}}, {{2517998674837617127ull, 782416810670467332ull, 15706523606808704868ull, 6915445055218626087ull}}, {{3147498343547021409ull, 978021013338084165ull, 15021468490083493181ull, 8644306319023282609ull}}, {{4273029473930582333ull, 2917106142549996555ull, 2470888778661101382ull, 5402691449389551631ull}}, {{729600823985840012ull, 12869754715042271502ull, 16923669028608540439ull, 6753364311736939538ull}}, {{10135373066837075823ull, 11475507375375451473ull, 11931214248905899741ull, 8441705389671174423ull}}, {{17863823212841642149ull, 9478035118823351122ull, 14374537933207269194ull, 5276065868544484014ull}}, {{13106406979197276879ull, 2624171861674413095ull, 8744800379654310685ull, 6595082335680605018ull}}, {{11771322705569208194ull, 7891900845520404273ull, 1707628437713112548ull, 8243852919600756273ull}}, {{439547663339673266ull, 14155810065305028479ull, 12596482819639165102ull, 5152408074750472670ull}}, {{14384492634456755294ull, 8471390544776509790ull, 6522231487694180570ull, 6440510093438090838ull}}, {{8757243756216168309ull, 1365866144115861430ull, 17376161396472501521ull, 8050637616797613547ull}}, {{861591329207717289ull, 12382881386140883154ull, 8554257863581619498ull, 5031648510498508467ull}}, {{10300361198364422420ull, 6255229695821328134ull, 6081136311049636469ull, 6289560638123135584ull}}, {{3652079461100752216ull, 12430723138204048072ull, 7601420388812045586ull, 7861950797653919480ull}}, {{2282549663187970135ull, 12380887979804917949ull, 4750887743007528491ull, 4913719248533699675ull}}, {{7464873097412350573ull, 10864423956328759532ull, 1326923660332022710ull, 6142149060667124594ull}}, {{9331091371765438216ull, 4357157908556173607ull, 10882026612269804196ull, 7677686325833905742ull}}, {{12749461134994480741ull, 11946595729702384312ull, 2189580614241239718ull, 4798553953646191089ull}}, {{15936826418743100927ull, 5709872625273204582ull, 7348661786228937552ull, 5998192442057738861ull}}, {{10697660986574100350ull, 7137340781591505728ull, 13797513251213559844ull, 7497740552572173576ull}}, {{6686038116608812719ull, 13684210025349466888ull, 8623445782008474902ull, 4686087845357608485ull}}, {{8357547645761015899ull, 7881890494832057802ull, 15390993245937981532ull, 5857609806697010606ull}}, {{1223562520346494065ull, 9852363118540072253ull, 10015369520567701107ull, 7322012258371263258ull}}, {{6141139168860505485ull, 7703767879747702412ull, 3295839863854850576ull, 9152515322964079073ull}}, {{13061584017392591737ull, 4814854924842314007ull, 13589114960977751370ull, 5720322076852549420ull}}, {{11715294003313351767ull, 15241940692907668317ull, 16986393701222189212ull, 7150402596065686775ull}}, {{809059448859525996ull, 605681792425033781ull, 16621306108100348612ull, 8938003245082108469ull}}, {{2811505164750897700ull, 9601923157120421921ull, 12694159326776411834ull, 5586252028176317793ull}}, {{8126067474366010029ull, 2779031909545751593ull, 2032641103188351081ull, 6982815035220397242ull}}, {{14769270361384900440ull, 8085475905359577395ull, 11764173415840214659ull, 8728518794025496552ull}}, {{6924950966651868823ull, 2747579431636041920ull, 7352608384900134162ull, 5455324246265935345ull}}, {{8656188708314836029ull, 12657846326399828208ull, 13802446499552555606ull, 6819155307832419181ull}}, {{10820235885393545036ull, 6598935871145009452ull, 3418000069158530796ull, 8523944134790523977ull}}, {{15986019465225741455ull, 13347706956320406715ull, 13665465089292551507ull, 5327465084244077485ull}}, {{15370838313104788915ull, 12072947676973120490ull, 3246773306333525672ull, 6659331355305096857ull}}, {{9990175854526210336ull, 15091184596216400613ull, 8670152651344294994ull, 8324164194131371071ull}}, {{8549702918292575412ull, 14043676391062638287ull, 12336374434731266227ull, 5202602621332106919ull}}, {{6075442629438331361ull, 12942909470400909955ull, 10808782024986694880ull, 6503253276665133649ull}}, {{2982617268370526297ull, 16178636838001137444ull, 18122663549660756504ull, 8129066595831417061ull}}, {{11087507829586354744ull, 10111648023750710902ull, 13632507727751666767ull, 5080666622394635663ull}}, {{4636012750128167622ull, 8027874011261000724ull, 12428948641262195555ull, 6350833277993294579ull}}, {{5795015937660209527ull, 5423156495648863001ull, 10924499783150356540ull, 7938541597491618224ull}}, {{15151100007106100715ull, 12612844846635315183ull, 6827812364468972837ull, 4961588498432261390ull}}, {{14327188990455237989ull, 1930998003011980267ull, 17758137492440991855ull, 6201985623040326737ull}}, {{13297300219641659582ull, 16248805559047139046ull, 8362613810269076106ull, 7752482028800408422ull}}, {{3699126618848649335ull, 14767189492831849808ull, 614947612990784662ull, 4845301268000255264ull}} }; static const UINT256 multipliers2_binary80[] = { {{6207925045053820451ull, 7278732838564269635ull, 11692571226397904350ull, 2627592000557903659ull}}, {{3148220287889887660ull, 18321788085060112852ull, 10004028014569992533ull, 3284490000697379574ull}}, {{3935275359862359575ull, 9067177051042977353ull, 3281662981357714859ull, 4105612500871724468ull}}, {{13988762145982444495ull, 3361142647688166893ull, 11274411400203347595ull, 2566007813044827792ull}}, {{3650894627195891906ull, 18036486364892372329ull, 14093014250254184493ull, 3207509766306034740ull}}, {{9175304302422252786ull, 8710549900833301699ull, 17616267812817730617ull, 4009387207882543425ull}}, {{3428722179800214040ull, 16973308734089283322ull, 4092638355369999779ull, 2505867004926589641ull}}, {{13509274761605043357ull, 16604949899184216248ull, 9727483962639887628ull, 3132333756158237051ull}}, {{16886593452006304197ull, 2309443300270718694ull, 7547668934872471632ull, 3915417195197796314ull}}, {{5942434889076552219ull, 1443402062669199184ull, 9328979102722682674ull, 2447135746998622696ull}}, {{7428043611345690274ull, 11027624615191274788ull, 11661223878403353342ull, 3058919683748278370ull}}, {{9285054514182112842ull, 4561158732134317677ull, 5353157811149415870ull, 3823649604685347963ull}}, {{8109002080577514479ull, 16685782262866112260ull, 1039880622754690966ull, 2389781002928342477ull}}, {{10136252600721893098ull, 11633855791727864517ull, 5911536796870751612ull, 2987226253660428096ull}}, {{17282001769329754276ull, 14542319739659830646ull, 7389420996088439515ull, 3734032817075535120ull}}, {{6189565087403708519ull, 6783106828073700202ull, 4618388122555274697ull, 2333770510672209450ull}}, {{16960328396109411457ull, 13090569553519513156ull, 14996357190048869179ull, 2917213138340261812ull}}, {{2753666421427212705ull, 11751525923472003542ull, 298702413851534858ull, 3646516422925327266ull}}, {{12665455063638791689ull, 5466035367485228619ull, 9596750054169194381ull, 4558145528656659082ull}}, {{5610066405560550854ull, 5722115113891961839ull, 10609654802283134392ull, 2848840955410411926ull}}, {{2400896988523300663ull, 7152643892364952299ull, 4038696465999142182ull, 3561051194263014908ull}}, {{16836179290936289540ull, 18164176902310966181ull, 5048370582498927727ull, 4451313992828768635ull}}, {{12828455066048874915ull, 18270139591585435719ull, 849388604848135877ull, 2782071245517980397ull}}, {{11423882814133705740ull, 9002616434199630937ull, 5673421774487557751ull, 3477589056897475496ull}}, {{444795462384968462ull, 6641584524322150768ull, 7091777218109447189ull, 4346986321121844370ull}}, {{277997163990605289ull, 6456833336915038182ull, 9044046779745792397ull, 2716866450701152731ull}}, {{9570868491843032419ull, 12682727689571185631ull, 6693372456254852592ull, 3396083063376440914ull}}, {{7351899596376402620ull, 15853409611963982039ull, 17590087607173341548ull, 4245103829220551142ull}}, {{11512466275376333494ull, 685008970622712966ull, 6382118736055950564ull, 2653189893262844464ull}}, {{5167210807365641059ull, 856261213278391208ull, 7977648420069938205ull, 3316487366578555580ull}}, {{6459013509207051324ull, 5682012535025376914ull, 9972060525087422756ull, 4145609208223194475ull}}, {{8648569461681794981ull, 12774629871245636379ull, 3926694818965945270ull, 2591005755139496547ull}}, {{6199025808674855823ull, 6744915302202269666ull, 296682505280043684ull, 3238757193924370684ull}}, {{16972154297698345586ull, 8431144127752837082ull, 370853131600054605ull, 4048446492405463355ull}}, {{15219282454488853896ull, 7575308089059217128ull, 16372684271745891792ull, 2530279057753414596ull}}, {{577358994401515753ull, 9469135111324021411ull, 2019111265972813124ull, 3162848822191768246ull}}, {{14556756798284058404ull, 11836418889155026763ull, 11747261119320792213ull, 3953561027739710307ull}}, {{6792129989713842550ull, 9703604814935585679ull, 5036195190361801181ull, 2470975642337318942ull}}, {{3878476468714915284ull, 16741192037096870003ull, 15518616024807027284ull, 3088719552921648677ull}}, {{236409567466256201ull, 2479745972661535888ull, 5563211975726620394ull, 3860899441152060847ull}}, {{147755979666410126ull, 6161527251340847834ull, 10394536512470219602ull, 2413062150720038029ull}}, {{9408067011437788465ull, 16925281101030835600ull, 17604856659015162406ull, 3016327688400047536ull}}, {{11760083764297235581ull, 11933229339433768692ull, 3559326750059401392ull, 3770409610500059421ull}}, {{16573424389540548046ull, 7458268337146105432ull, 4530422228000819822ull, 2356506006562537138ull}}, {{2270036413216133442ull, 99463384577855983ull, 14886399821855800586ull, 2945632508203171422ull}}, {{16672603571802330514ull, 9347701267577095786ull, 9384627740464974924ull, 3682040635253964278ull}}, {{11617382427898137335ull, 11684626584471369733ull, 2507412638726442847ull, 4602550794067455348ull}}, {{9566707026650029786ull, 14220420642935687939ull, 10790504936058802587ull, 2876594246292159592ull}}, {{7346697764885149329ull, 13163839785242222020ull, 13488131170073503234ull, 3595742807865199490ull}}, {{9183372206106436661ull, 7231427694698001717ull, 7636791925737103235ull, 4494678509831499363ull}}, {{8045450638030216865ull, 2213799299972557121ull, 2467151944371995570ull, 2809174068644687102ull}}, {{14668499315965158985ull, 11990621161820472209ull, 12307311967319770270ull, 3511467585805858877ull}}, {{4500566089674285020ull, 5764904415420814454ull, 1549081903867549126ull, 4389334482257323597ull}}, {{16647911861328591849ull, 17438123314920172745ull, 3274019199130912155ull, 2743334051410827248ull}}, {{6974831771378576100ull, 17185968125222828028ull, 4092523998913640194ull, 3429167564263534060ull}}, {{8718539714223220124ull, 12259088119673759227ull, 5115654998642050243ull, 4286459455329417575ull}}, {{3143244312175818626ull, 5356087065582405565ull, 10114813401792363258ull, 2679037159580885984ull}}, {{8540741408647161186ull, 15918480868832782764ull, 12643516752240454072ull, 3348796449476107480ull}}, {{10675926760808951483ull, 1451357012331426839ull, 15804395940300567591ull, 4185995561845134350ull}}, {{13589983253146676533ull, 7824627160348223630ull, 5266061444260466840ull, 2616247226153208969ull}}, {{7764107029578569858ull, 9780783950435279538ull, 11194262823752971454ull, 3270309032691511211ull}}, {{481761750118436514ull, 3002607901189323615ull, 9381142511263826414ull, 4087886290864389014ull}}, {{7218630121465104678ull, 15711687993525490971ull, 1251528051112503604ull, 2554928931790243134ull}}, {{4411601633403992943ull, 1192865918197312098ull, 10787782100745405314ull, 3193661164737803917ull}}, {{14737874078609766987ull, 10714454434601415930ull, 18096413644359144546ull, 3992076455922254896ull}}, {{13822857317558492271ull, 11308220040053272860ull, 11310258527724465341ull, 2495047784951409310ull}}, {{17278571646948115338ull, 300216994784427363ull, 4914451122800805869ull, 3118809731189261638ull}}, {{16986528540257756269ull, 4986957261907922108ull, 15366435940355783144ull, 3898512163986577047ull}}, {{1393208300806321860ull, 3116848288692451318ull, 16521551490363446321ull, 2436570102491610654ull}}, {{10964882412862678133ull, 8507746379292952051ull, 11428567326099532093ull, 3045712628114513318ull}}, {{9094416997650959762ull, 15246368992543577968ull, 5062337120769639308ull, 3807140785143141648ull}}, {{5684010623531849852ull, 305608583484960422ull, 3163960700481024568ull, 2379462990714463530ull}}, {{16328385316269588122ull, 382010729356200527ull, 13178322912456056518ull, 2974328738393079412ull}}, {{15798795626909597249ull, 9700885448550026467ull, 16472903640570070647ull, 3717910922991349265ull}}, {{7568404257604804329ull, 12980582432984848398ull, 3378035747715212298ull, 2323694326869593291ull}}, {{237133285151229603ull, 7002356004376284690ull, 18057602739926179085ull, 2904617908586991613ull}}, {{9519788643293812811ull, 13364631023897743766ull, 8736945369625560144ull, 3630772385733739517ull}}, {{2676363767262490206ull, 16705788779872179708ull, 15532867730459338084ull, 4538465482167174396ull}}, {{10896099391393832187ull, 1217745950565336509ull, 484670294682310495ull, 2836540926354483998ull}}, {{18231810257669678138ull, 15357240493488834348ull, 9829209905207663926ull, 3545676157943104997ull}}, {{4343018748377546056ull, 9973178580006267128ull, 16898198399936967812ull, 4432095197428881246ull}}, {{2714386717735966285ull, 15456608649358692763ull, 5949687981533216978ull, 2770059498393050779ull}}, {{17228041452452121568ull, 10097388774843590145ull, 2825423958489133319ull, 3462574372991313474ull}}, {{7699993760282988248ull, 8010049950127099778ull, 12755151984966192457ull, 4328217966239141842ull}}, {{9424182118604255559ull, 16535496264897907121ull, 12583656009031258189ull, 2705136228899463651ull}}, {{16391913666682707353ull, 6834312275840220189ull, 11117883992861684833ull, 3381420286124329564ull}}, {{6654834028071220479ull, 13154576363227663141ull, 13897354991077106041ull, 4226775357655411955ull}}, {{6465114276758206752ull, 1304081199376207607ull, 6380003860209497324ull, 2641734598534632472ull}}, {{3469706827520370535ull, 1630101499220259509ull, 7975004825261871655ull, 3302168248168290590ull}}, {{8948819552827851073ull, 15872684929307488098ull, 745383994722563760ull, 4127710310210363238ull}}, {{10204698238944794825ull, 9920428080817180061ull, 14300923051983766062ull, 2579818943881477023ull}}, {{17367558817108381435ull, 3177163064166699268ull, 13264467796552319674ull, 3224773679851846279ull}}, {{3262704447675925178ull, 13194825867063149894ull, 11968898727263011688ull, 4030967099814807849ull}}, {{15874248335079616948ull, 8246766166914468683ull, 563032676898300449ull, 2519354437384254906ull}}, {{15231124400422133281ull, 14920143727070473758ull, 9927162882977651369ull, 3149193046730318632ull}}, {{9815533463672890793ull, 4815121603555928486ull, 12408953603722064212ull, 3936491308412898290ull}}, {{1523022396368168842ull, 12232823039077231112ull, 12367282020753678036ull, 2460307067758061431ull}}, {{1903777995460211052ull, 15291028798846538890ull, 10847416507514709641ull, 3075383834697576789ull}}, {{11603094531180039623ull, 5278727943276009900ull, 18170956652820774956ull, 3844229793371970986ull}}, {{16475306118842300573ull, 12522577001402281995ull, 15968533926440372251ull, 2402643620857481866ull}}, {{15982446630125487812ull, 11041535233325464590ull, 10737295371195689506ull, 3003304526071852333ull}}, {{10754686250802083957ull, 4578547004802054930ull, 18033305232421999787ull, 3754130657589815416ull}}, {{11333364925178690377ull, 555748868787590379ull, 11270815770263749867ull, 2346331660993634635ull}}, {{9555020138045975067ull, 14529744141266651686ull, 9476833694402299429ull, 2932914576242043294ull}}, {{2720403135702693026ull, 4327122121301150896ull, 2622670081148098479ull, 3666143220302554118ull}}, {{3400503919628366282ull, 797216633199050716ull, 12501709638289898907ull, 4582679025378192647ull}}, {{11348686986622504735ull, 16639161460245264361ull, 14731097551572268672ull, 2864174390861370404ull}}, {{350800677995967206ull, 2352207751597028836ull, 18413871939465335841ull, 3580217988576713005ull}}, {{438500847494959008ull, 7551945707923673949ull, 9182281869049506089ull, 4475272485720891257ull}}, {{2579906038898043332ull, 16249181113520765978ull, 17268141214224411065ull, 2797045303575557035ull}}, {{12448254585477329973ull, 6476418336618793760ull, 16973490499353125928ull, 3496306629469446294ull}}, {{15560318231846662466ull, 8095522920773492200ull, 11993491087336631602ull, 4370383286836807868ull}}, {{9725198894904164041ull, 9671387843910820529ull, 16719303966440170559ull, 2731489554273004917ull}}, {{16768184637057592956ull, 7477548786461137757ull, 7064071902768049487ull, 3414361942841256147ull}}, {{7125172741039827482ull, 4735249964649034293ull, 4218403860032673955ull, 4267952428551570184ull}}, {{6759075972363586129ull, 653688218691952481ull, 2636502412520421222ull, 2667470267844731365ull}}, {{13060530983881870565ull, 10040482310219716409ull, 7907314034077914431ull, 3334337834805914206ull}}, {{2490605674570174494ull, 7938916869347257608ull, 660770505742617231ull, 4167922293507392758ull}}, {{1556628546606359059ull, 11879352070983117861ull, 14248039621371299481ull, 2604951433442120473ull}}, {{6557471701685336727ull, 1014132033446733614ull, 3974991471431960640ull, 3256189291802650592ull}}, {{17420211663961446717ull, 1267665041808417017ull, 4968739339289950800ull, 4070236614753313240ull}}, {{3970103262334822342ull, 792290651130260636ull, 3105462087056219250ull, 2543897884220820775ull}}, {{4962629077918527928ull, 10213735350767601603ull, 17716885664102437774ull, 3179872355276025968ull}}, {{1591600328970772006ull, 3543797151604726196ull, 3699363006418495602ull, 3974840444095032461ull}}, {{10218122242461508312ull, 6826559238180341776ull, 4617944888225253703ull, 2484275277559395288ull}}, {{12772652803076885390ull, 3921513029298039316ull, 5772431110281567129ull, 3105344096949244110ull}}, {{15965816003846106737ull, 9513577305049937049ull, 16438910924706734719ull, 3881680121186555137ull}}, {{3061105974762734855ull, 12863514843297292512ull, 3356790300300627343ull, 2426050075741596961ull}}, {{3826382468453418568ull, 11467707535694227736ull, 8807673893803172083ull, 3032562594676996201ull}}, {{4782978085566773210ull, 9722948401190396766ull, 15621278385681353008ull, 3790703243346245251ull}}, {{16824419358761396969ull, 6076842750743997978ull, 7457455981837151678ull, 2369189527091403282ull}}, {{11807152161596970403ull, 16819425475284773281ull, 98447940441663789ull, 2961486908864254103ull}}, {{923882146714049291ull, 7189223788823802890ull, 13958117980834243449ull, 3701858636080317628ull}}, {{5189112360123668711ull, 16022479914083346566ull, 17947195774876177963ull, 2313661647550198517ull}}, {{15709762487009361697ull, 15416413874176795303ull, 8598936663313058742ull, 2892077059437748147ull}}, {{15025517090334314217ull, 10047145305866218321ull, 6136984810713935524ull, 3615096324297185184ull}}, {{4946838307635729059ull, 12558931632332772902ull, 7671231013392419405ull, 4518870405371481480ull}}, {{16926831997554494374ull, 10155175279421677015ull, 4794519383370262128ull, 2824294003357175925ull}}, {{16546853978515730063ull, 12693969099277096269ull, 10604835247640215564ull, 3530367504196469906ull}}, {{6848509417862498867ull, 15867461374096370337ull, 4032672022695493647ull, 4412959380245587383ull}}, {{15809533432232531552ull, 16834692386451313316ull, 9437949041825765385ull, 2758099612653492114ull}}, {{1315172716581112824ull, 7208307427781977934ull, 2574064265427430924ull, 3447624515816865143ull}}, {{10867337932581166838ull, 9010384284727472417ull, 17052638387066452367ull, 4309530644771081428ull}}, {{18321301253931699034ull, 12549019205595752116ull, 1434526955061756921ull, 2693456652981925893ull}}, {{4454882493705072176ull, 1851215951712526434ull, 6404844712254584056ull, 3366820816227407366ull}}, {{14791975153986116028ull, 2314019939640658042ull, 17229427927173005878ull, 4208526020284259207ull}}, {{13856670489668710422ull, 15281320517557574988ull, 17685921482124210529ull, 2630328762677662004ull}}, {{17320838112085888027ull, 5266592591664805023ull, 3660657778945711546ull, 3287910953347077506ull}}, {{17039361621679972130ull, 15806612776435782087ull, 13799194260536915240ull, 4109888691683846882ull}}, {{17567130041191064437ull, 9879132985272363804ull, 13236182431262959929ull, 2568680432302404301ull}}, {{3512168477779278930ull, 16960602250017842660ull, 2710169983796536199ull, 3210850540378005377ull}}, {{4390210597224098663ull, 16589066794094915421ull, 7999398498173058153ull, 4013563175472506721ull}}, {{5049724632478755617ull, 3450637718668240282ull, 16528839107426631106ull, 2508476984670316700ull}}, {{15535527827453220329ull, 13536669185190076160ull, 2214304810573737266ull, 3135596230837895876ull}}, {{972665710606973795ull, 7697464444632819393ull, 2767881013217171583ull, 3919495288547369845ull}}, {{12137131115197828382ull, 11728444305536593976ull, 4035768642474426191ull, 2449684555342106153ull}}, {{15171413893997285477ull, 10048869363493354566ull, 9656396821520420643ull, 3062105694177632691ull}}, {{9740895330641831038ull, 7949400685939305304ull, 7458810008473137900ull, 3827632117722040864ull}}, {{6088059581651144399ull, 14191747465566841623ull, 4661756255295711187ull, 2392270073576275540ull}}, {{2998388458636542595ull, 13127998313531164125ull, 5827195319119638984ull, 2990337591970344425ull}}, {{8359671591723066147ull, 16409997891913955156ull, 11895680167326936634ull, 3737921989962930531ull}}, {{14448166781681692150ull, 14867934700873609876ull, 5128957095365641444ull, 2336201243726831582ull}}, {{18060208477102115188ull, 138174302382460729ull, 15634568406061827614ull, 2920251554658539477ull}}, {{8740202541095480273ull, 9396089914832851720ull, 5708152452295120805ull, 3650314443323174347ull}}, {{10925253176369350341ull, 16356798411968452554ull, 2523504546941513102ull, 4562893054153967934ull}}, {{11439969253658231867ull, 5611312989052894942ull, 15412248397120609401ull, 2851808158846229958ull}}, {{5076589530218014026ull, 11625827254743506582ull, 10041938459545985943ull, 3564760198557787448ull}}, {{15569108949627293340ull, 9920598050001995323ull, 12552423074432482429ull, 4455950248197234310ull}}, {{7424850084303364386ull, 8506216790464941029ull, 3233578403092913614ull, 2784968905123271444ull}}, {{13892748623806593386ull, 1409398951226400478ull, 4041973003866142018ull, 3481211131404089305ull}}, {{8142563742903465924ull, 10985120725887776406ull, 9664152273260065426ull, 4351513914255111631ull}}, {{477416320887278299ull, 11477386472107248158ull, 12957624198428622747ull, 2719696196409444769ull}}, {{9820142437963873681ull, 9735047071706672293ull, 2361972192753614722ull, 3399620245511805962ull}}, {{16886864065882230006ull, 2945436802778564558ull, 12175837277796794211ull, 4249525306889757452ull}}, {{5942604022749005850ull, 17981799066232460513ull, 16833270335477772189ull, 2655953316806098407ull}}, {{12039941046863645216ull, 8642190777508411929ull, 16429901900919827333ull, 3319941646007623009ull}}, {{1214868253297392808ull, 15414424490312902816ull, 6702319320867620454ull, 4149927057509528762ull}}, {{759292658310870505ull, 5022329288018176356ull, 8800635593969650688ull, 2593704410943455476ull}}, {{949115822888588131ull, 6277911610022720445ull, 11000794492462063360ull, 3242130513679319345ull}}, {{5798080797038123068ull, 7847389512528400556ull, 18362679134004967104ull, 4052663142099149181ull}}, {{12847172535003602726ull, 4904618445330250347ull, 13782517467966798392ull, 2532914463811968238ull}}, {{11447279650327115503ull, 6130773056662812934ull, 8004774798103722182ull, 3166143079764960298ull}}, {{5085727526054118571ull, 16886838357683291976ull, 782596460774876919ull, 3957678849706200373ull}}, {{3178579703783824107ull, 17471803001193139341ull, 2794965797197992026ull, 2473549281066375233ull}}, {{8584910648157168037ull, 12616381714636648368ull, 8105393264924877937ull, 3091936601332969041ull}}, {{10731138310196460047ull, 1935419088013646748ull, 14743427599583485326ull, 3864920751666211301ull}}, {{15930333480727563337ull, 15044694985290692929ull, 11520485258953372280ull, 2415575469791382063ull}}, {{6077858795627290460ull, 359124657903814546ull, 9788920555264327447ull, 3019469337239227579ull}}, {{16820695531388888882ull, 14283963877661931894ull, 7624464675653021404ull, 3774336671549034474ull}}, {{5901248688690667648ull, 18150849460393483242ull, 9376976440710526281ull, 2358960419718146546ull}}, {{16599932897718110367ull, 8853503770209690340ull, 2497848514033382044ull, 2948700524647683183ull}}, {{2303172048438086343ull, 11066879712762112926ull, 16957368697823891267ull, 3685875655809603978ull}}, {{12102337097402383737ull, 9221913622525253253ull, 11973338835425088276ull, 4607344569762004973ull}}, {{9869803695090183788ull, 14987068050933059091ull, 9789179781354374124ull, 2879590356101253108ull}}, {{7725568600435341830ull, 287090989956772248ull, 12236474726692967656ull, 3599487945126566385ull}}, {{9656960750544177288ull, 358863737445965310ull, 1460535353084045858ull, 4499359931408207982ull}}, {{1423914450662722901ull, 4835975854331116223ull, 14747892650959692373ull, 2812099957130129988ull}}, {{15614951118610567338ull, 10656655836341283182ull, 18434865813699615466ull, 3515124946412662485ull}}, {{10295316861408433365ull, 4097447758571828170ull, 9208524211842355621ull, 4393906183015828107ull}}, {{11046259056807658757ull, 4866747858321086558ull, 3449484623187778311ull, 2746191364384892567ull}}, {{4584451784154797638ull, 1471748804473970294ull, 18146913834266886601ull, 3432739205481115708ull}}, {{14953936767048272856ull, 6451372024019850771ull, 4236898219124056635ull, 4290924006851394636ull}}, {{7040367470191476583ull, 1726264505798712780ull, 11871433423807311205ull, 2681827504282121647ull}}, {{8800459337739345729ull, 6769516650675778879ull, 10227605761331751102ull, 3352284380352652059ull}}, {{6388888153746794257ull, 17685267850199499407ull, 8172821183237300973ull, 4190355475440815074ull}}, {{10910584123732828267ull, 13359135415588381081ull, 9719699257950701012ull, 2618972172150509421ull}}, {{18249916173093423237ull, 16698919269485476351ull, 16761310090865764169ull, 3273715215188136776ull}}, {{18200709197939391142ull, 7038591031574681727ull, 2504893539872653596ull, 4092144018985170971ull}}, {{18292972276353201320ull, 13622491431588951887ull, 17706459526916266161ull, 2557590011865731856ull}}, {{18254529327014113746ull, 3193056234204026147ull, 3686330334935781086ull, 3196987514832164821ull}}, {{18206475640340254279ull, 13214692329609808492ull, 9219598937097114261ull, 3996234393540206026ull}}, {{2155675238357883116ull, 10565025715219824260ull, 10373935354113084317ull, 2497646495962628766ull}}, {{2694594047947353895ull, 17817968162452168229ull, 3744047155786579588ull, 3122058119953285958ull}}, {{7979928578361580273ull, 3825716129355658670ull, 13903430981588000294ull, 3902572649941607447ull}}, {{375769343048599767ull, 16226130636129450381ull, 15607173391133582039ull, 2439107906213504654ull}}, {{5081397697238137612ull, 15670977276734425072ull, 10285594702062201741ull, 3048884882766880818ull}}, {{6351747121547672015ull, 5753663540635867628ull, 3633621340722976369ull, 3811106103458601023ull}}, {{13193213987822070818ull, 15125254758965887027ull, 9188542365592942086ull, 2381941314661625639ull}}, {{11879831466350200618ull, 9683196411852582976ull, 6873991938563789704ull, 2977426643327032049ull}}, {{14849789332937750772ull, 12103995514815728720ull, 13204175941632125034ull, 3721783304158790061ull}}, {{9281118333086094233ull, 12176683215187218354ull, 10558452972733772098ull, 2326114565099243788ull}}, {{2378025879502841983ull, 5997481982129247135ull, 13198066215917215123ull, 2907643206374054735ull}}, {{16807590404660716191ull, 2885166459234171014ull, 11885896751469131000ull, 3634554007967568419ull}}, {{11786115968971119430ull, 3606458074042713768ull, 10245684920909025846ull, 4543192509959460524ull}}, {{7366322480606949644ull, 16089094351558859817ull, 15626925112422916961ull, 2839495318724662827ull}}, {{13819589119186074959ull, 6276309884166411059ull, 14921970372101258298ull, 3549369148405828534ull}}, {{12662800380555205795ull, 17068759392062789632ull, 9429090928271797064ull, 4436711435507285668ull}}, {{7914250237847003622ull, 10667974620039243520ull, 15116553867024648973ull, 2772944647192053542ull}}, {{9892812797308754527ull, 17946654293476442304ull, 9672320296926035408ull, 3466180808990066928ull}}, {{12366015996635943159ull, 3986573793136001264ull, 12090400371157544261ull, 4332726011237583660ull}}, {{7728759997897464474ull, 4797451629923694742ull, 16779872268828240971ull, 2707953757023489787ull}}, {{437577960517054785ull, 1385128518977230524ull, 16363154317607913310ull, 3384942196279362234ull}}, {{546972450646318481ull, 10954782685576313963ull, 11230570860155115829ull, 4231177745349202793ull}}, {{16482758846149806715ull, 9152582187698890178ull, 101577759955865537ull, 2644486090843251746ull}}, {{11380076520832482585ull, 16052413753051000627ull, 9350344236799607729ull, 3305607613554064682ull}}, {{9613409632613215328ull, 6230459136031587072ull, 2464558259144733854ull, 4132009516942580853ull}}, {{6008381020383259580ull, 17729095015301905632ull, 3846191921179152610ull, 2582505948089113033ull}}, {{7510476275479074475ull, 12937996732272606232ull, 9419425919901328667ull, 3228132435111391291ull}}, {{9388095344348843093ull, 11560809896913369886ull, 7162596381449272930ull, 4035165543889239114ull}}, {{1255873571790639030ull, 11837192203998244083ull, 9088308756833183485ull, 2521978464930774446ull}}, {{15404900020020462499ull, 961432199715641391ull, 2137013909186703549ull, 3152473081163468058ull}}, {{14644439006598190219ull, 5813476268071939643ull, 11894639423338155244ull, 3940591351454335072ull}}, {{6846931369910174935ull, 12856794704399738085ull, 7434149639586347027ull, 2462869594658959420ull}}, {{13170350230815106573ull, 11459307362072284702ull, 9292687049482933784ull, 3078586993323699275ull}}, {{7239565751664107408ull, 14324134202590355878ull, 7004172793426279326ull, 3848233741654624094ull}}, {{18359786650072230842ull, 4340897858191584519ull, 18212666051173588291ull, 2405146088534140058ull}}, {{18338047294162900649ull, 814436304312092745ull, 13542460527112209556ull, 3006432610667675073ull}}, {{9087501062421462099ull, 1018045380390115932ull, 3093017603608098233ull, 3758040763334593842ull}}, {{14903060200868189620ull, 12165493408812292217ull, 6544822020682449299ull, 2348775477084121151ull}}, {{4793767195803073313ull, 10595180742587977368ull, 3569341507425673720ull, 2935969346355151439ull}}, {{5992208994753841641ull, 13243975928234971710ull, 18296734939564255862ull, 3669961682943939298ull}}, {{16713633280297077859ull, 7331597873438938829ull, 13647546637600544020ull, 4587452103679924123ull}}, {{12751863809399367614ull, 13805620707754112576ull, 6223873639286646060ull, 2867157564799952577ull}}, {{15939829761749209517ull, 17257025884692640720ull, 12391528067535695479ull, 3583946955999940721ull}}, {{1478043128476960281ull, 16959596337438412997ull, 1654352029137455637ull, 4479933694999925902ull}}, {{3229619964511794128ull, 12905590720112702075ull, 14869028073493073485ull, 2799958559374953688ull}}, {{17872083010921906371ull, 2296930344858713881ull, 139541018156790241ull, 3499948199218692111ull}}, {{8505045708370219252ull, 7482848949500780256ull, 14009484327978151513ull, 4374935249023365138ull}}, {{5315653567731387033ull, 16205995639506457420ull, 13367613723413732599ull, 2734334530639603211ull}}, {{6644566959664233791ull, 15645808530955683871ull, 12097831135839777845ull, 3417918163299504014ull}}, {{3694022681152904334ull, 5722202608412441127ull, 5898916882944946499ull, 4272397704124380018ull}}, {{9226293203361647065ull, 1270533621044081752ull, 8298509070267979466ull, 2670248565077737511ull}}, {{11532866504202058831ull, 10811539063159877998ull, 5761450319407586428ull, 3337810706347171889ull}}, {{5192711093397797731ull, 13514423828949847498ull, 11813498917686870939ull, 4172263382933964861ull}}, {{7857130451801011486ull, 6140671883879960734ull, 9689279832767988289ull, 2607664614333728038ull}}, {{598041027896488549ull, 12287525873277338822ull, 2888227754105209553ull, 3259580767917160048ull}}, {{9970923321725386495ull, 1524349286314509815ull, 3610284692631511942ull, 4074475959896450060ull}}, {{13149356103719448415ull, 14787776359228732346ull, 11479799969749470771ull, 2546547474935281287ull}}, {{7213323092794534711ull, 13873034430608527529ull, 9738063943759450560ull, 3183184343669101609ull}}, {{13628339884420556293ull, 17341293038260659411ull, 16784265948126701104ull, 3978980429586377011ull}}, {{6211869418549153731ull, 10838308148912912132ull, 8184323208365494238ull, 2486862768491485632ull}}, {{7764836773186442164ull, 4324513149286364357ull, 10230404010456867798ull, 3108578460614357040ull}}, {{14317731984910440609ull, 14629013473462731254ull, 12788005013071084747ull, 3885723075767946300ull}}, {{4336896472141637477ull, 6837290411700513082ull, 17215875170024203775ull, 2428576922354966437ull}}, {{14644492627031822654ull, 3934926996198253448ull, 7684785907248091007ull, 3035721152943708047ull}}, {{18305615783789778317ull, 306972726820428906ull, 4994296365632725855ull, 3794651441179635059ull}}, {{16052695883295999352ull, 7109386981903849922ull, 815592219306759707ull, 2371657150737271912ull}}, {{10842497817265223382ull, 4275047708952424499ull, 1019490274133449634ull, 2964571438421589890ull}}, {{8941436253154141324ull, 14567181673045306432ull, 10497734879521587850ull, 3705714298026987362ull}}, {{5588397658221338327ull, 13716174564080704424ull, 11172770318128380310ull, 2316071436266867101ull}}, {{6985497072776672909ull, 7921846168246104722ull, 130904842378311676ull, 2895089295333583877ull}}, {{17955243377825616944ull, 9902307710307630902ull, 4775317071400277499ull, 3618861619166979846ull}}, {{13220682185427245372ull, 7766198619457150724ull, 15192518376105122682ull, 4523577023958724807ull}}, {{17486298402746804166ull, 9465560155588107106ull, 16412853012706783532ull, 2827235639974203004ull}}, {{12634500966578729399ull, 11831950194485133883ull, 2069322192173927799ull, 3534044549967753756ull}}, {{11181440189796023845ull, 10178251724679029450ull, 2586652740217409749ull, 4417555687459692195ull}}, {{11600086137049902807ull, 8667250337138087358ull, 17757559027131738757ull, 2760972304662307621ull}}, {{5276735634457602701ull, 15445748939849997102ull, 8361890728632509734ull, 3451215380827884527ull}}, {{15819291579926779184ull, 10083814137957720569ull, 5840677392363249264ull, 4314019226034855659ull}}, {{2969528209813155134ull, 6302383836223575356ull, 1344580361013336838ull, 2696262016271784787ull}}, {{3711910262266443918ull, 17101351832134245003ull, 15515783506548834759ull, 3370327520339730983ull}}, {{28201809405666993ull, 16765003771740418350ull, 14783043364758655545ull, 4212909400424663729ull}}, {{13852684186160705583ull, 3560598329696679612ull, 2321873075333077860ull, 2633068375265414831ull}}, {{17315855232700881978ull, 4450747912120849515ull, 16737399399448511037ull, 3291335469081768538ull}}, {{17033133022448714569ull, 10175120908578449798ull, 11698377212455862988ull, 4114169336352210673ull}}, {{6034022120603058702ull, 15582822604716306932ull, 393956730143832511ull, 2571355835220131671ull}}, {{7542527650753823377ull, 14866842237467995761ull, 14327503967961954351ull, 3214194794025164588ull}}, {{14039845581869667125ull, 13971866778407606797ull, 17909379959952442939ull, 4017743492531455735ull}}, {{11080746497882235905ull, 6426573727291060296ull, 18110891502611358693ull, 2511089682832159834ull}}, {{13850933122352794882ull, 12644903177541213274ull, 13415242341409422558ull, 3138862103540199793ull}}, {{8090294366086217794ull, 6582756935071740785ull, 2933994871479614486ull, 3923577629425249742ull}}, {{16585649024872355881ull, 17949281139702001702ull, 15668804849956922765ull, 2452236018390781088ull}}, {{11508689244235669044ull, 8601543369345338416ull, 1139261988736601841ull, 3065295022988476361ull}}, {{14385861555294586304ull, 15363615230109060924ull, 6035763504348140205ull, 3831618778735595451ull}}, {{18214535508913892248ull, 11908102528031857029ull, 1466509181003893676ull, 2394761736709747157ull}}, {{8933111330860201598ull, 14885128160039821287ull, 6444822494682254999ull, 2993452170887183946ull}}, {{6554703145147864094ull, 13994724181622388705ull, 17279400155207594557ull, 3741815213608979932ull}}, {{15625904511785884819ull, 11052545622727686892ull, 1576253060149970790ull, 2338634508505612458ull}}, {{1085636566022804407ull, 4592309991554832808ull, 11193688362042239296ull, 2923293135632015572ull}}, {{1357045707528505509ull, 5740387489443541010ull, 13992110452552799120ull, 3654116419540019465ull}}, {{10919679171265407694ull, 7175484361804426262ull, 3655080010408835188ull, 4567645524425024332ull}}, {{2213113463613491905ull, 13708049762982542222ull, 11507797043360297800ull, 2854778452765640207ull}}, {{11989763866371640689ull, 17135062203728177777ull, 9773060285772984346ull, 3568473065957050259ull}}, {{1152146777682387150ull, 12195455717805446414ull, 7604639338788842529ull, 4460591332446312824ull}}, {{14555149791333655681ull, 704630795987322152ull, 4752899586743026581ull, 2787869582778945515ull}}, {{18193937239167069601ull, 5492474513411540594ull, 1329438465001395322ull, 3484836978473681894ull}}, {{13519049512104061193ull, 16088965178619201551ull, 10885170118106519960ull, 4356046223092102367ull}}, {{15366934972706120102ull, 10055603236637000969ull, 13720760351457656831ull, 2722528889432563979ull}}, {{5373610660600486415ull, 7957818027368863308ull, 12539264420894683135ull, 3403161111790704974ull}}, {{6717013325750608019ull, 5335586515783691231ull, 6450708489263578111ull, 4253951389738381218ull}}, {{11115662356235211868ull, 10252270600005888875ull, 8643378824217124223ull, 2658719618586488261ull}}, {{9282891926866626931ull, 8203652231579973190ull, 15415909548698793183ull, 3323399523233110326ull}}, {{2380242871728507855ull, 5642879271047578584ull, 10046514899018715671ull, 4154249404041387908ull}}, {{1487651794830317410ull, 10444328572045818471ull, 15502443848741473102ull, 2596405877525867442ull}}, {{15694622798820060474ull, 3832038678202497280ull, 10154682774072065570ull, 3245507346907334303ull}}, {{1171534424815523976ull, 14013420384607897409ull, 8081667449162694058ull, 4056884183634167879ull}}, {{12261424061578172245ull, 13370073758807323784ull, 11968571183367765642ull, 2535552614771354924ull}}, {{15326780076972715307ull, 7489220161654378922ull, 14960713979209707053ull, 3169440768464193655ull}}, {{9935103059361118325ull, 13973211220495361557ull, 14089206455584745912ull, 3961800960580242069ull}}, {{8515282421314392905ull, 8733257012809600973ull, 11111597043954160147ull, 2476125600362651293ull}}, {{15255789045070379036ull, 6304885247584613312ull, 54438249660536472ull, 3095157000453314117ull}}, {{622992232628422178ull, 7881106559480766641ull, 4679733830503058494ull, 3868946250566642646ull}}, {{11918585191461233622ull, 314005581248091246ull, 16759891699346575271ull, 2418091406604151653ull}}, {{5674859452471766219ull, 14227565031842277770ull, 7114806568901055376ull, 3022614258255189567ull}}, {{16316946352444483582ull, 17784456289802847212ull, 4281822192698931316ull, 3778267822818986959ull}}, {{974719433423026431ull, 1891913144272003700ull, 9593667898077913929ull, 2361417389261866849ull}}, {{1218399291778783038ull, 6976577448767392529ull, 16603770891024780315ull, 2951771736577333561ull}}, {{6134685133150866702ull, 4109035792531852757ull, 6919655558498811682ull, 3689714670721666952ull}}, {{6140021217432985641ull, 7179833388759795877ull, 4324784724061757301ull, 2306071669201041845ull}}, {{12286712540218619955ull, 13586477754377132750ull, 10017666923504584530ull, 2882589586501302306ull}}, {{6135018638418499135ull, 7759725156116640130ull, 3298711617525954855ull, 3603236983126627883ull}}, {{16892145334877899727ull, 5087970426718412258ull, 17958447577189607281ull, 4504046228908284853ull}}, {{15169276852726075234ull, 14709196562767477421ull, 13529872744957198502ull, 2815028893067678033ull}}, {{5126538010625430330ull, 9163123666604570969ull, 3077282875914334416ull, 3518786116334597542ull}}, {{11019858531709175816ull, 11453904583255713711ull, 13069975631747693828ull, 4398482645418246927ull}}, {{13804940609959316741ull, 16382062401389596877ull, 15086263797483390498ull, 2749051653386404329ull}}, {{3421117707166982215ull, 11254205964882220289ull, 5022771691572074411ull, 3436314566733005412ull}}, {{8888083152386115672ull, 9456071437675387457ull, 6278464614465093014ull, 4295393208416256765ull}}, {{17084267016309792055ull, 1298358630119729256ull, 6229883393254377086ull, 2684620755260160478ull}}, {{2908589696677688453ull, 10846320324504437379ull, 17010726278422747165ull, 3355775944075200597ull}}, {{17470795176129274278ull, 18169586424057934627ull, 7428349792746270244ull, 4194719930094000747ull}}, {{8613403975867102472ull, 2132619478181433334ull, 2336875611252724951ull, 2621699956308750467ull}}, {{1543382932979102282ull, 16500832403008955380ull, 16756152569348069900ull, 3277124945385938083ull}}, {{1929228666223877852ull, 2179296430051642609ull, 16333504693257699472ull, 4096406181732422604ull}}, {{12734982962458393418ull, 1362060268782276630ull, 985068396431286362ull, 2560253863582764128ull}}, {{6695356666218215964ull, 10925947372832621596ull, 1231335495539107952ull, 3200317329478455160ull}}, {{8369195832772769955ull, 13657434216040776995ull, 1539169369423884940ull, 4000396661848068950ull}}, {{2924904386269287270ull, 17759268421880261430ull, 14797038911172091799ull, 2500247913655043093ull}}, {{12879502519691384895ull, 17587399508922938883ull, 4661240583682951037ull, 3125309892068803867ull}}, {{11487692131186843215ull, 8149191330871509892ull, 1214864711176300893ull, 3906637365086004834ull}}, {{16403179618846552818ull, 7399087591008387634ull, 5370976462912575962ull, 2441648353178753021ull}}, {{11280602486703415214ull, 25487451905708735ull, 11325406597068107857ull, 3052060441473441276ull}}, {{9489067089951881113ull, 4643545333309523823ull, 14156758246335134821ull, 3815075551841801595ull}}, {{12848195958861007552ull, 5208058842532146341ull, 6542130894745765311ull, 2384422219901125997ull}}, {{2225186893294095728ull, 1898387534737795023ull, 12789349636859594543ull, 2980527774876407496ull}}, {{16616541671899783372ull, 16208042473704407490ull, 15986687046074493178ull, 3725659718595509370ull}}, {{14997024563364752511ull, 14741712564492642585ull, 14603365422223946140ull, 2328537324122193356ull}}, {{4911222648923776927ull, 18427140705615803232ull, 18254206777779932675ull, 2910671655152741695ull}}, {{6139028311154721159ull, 18422239863592366136ull, 18206072453797527940ull, 3638339568940927119ull}}, {{7673785388943401449ull, 4581055755780906054ull, 18145904548819522022ull, 4547924461176158899ull}}, {{184429849662238002ull, 16698217902645229996ull, 9035347333798507311ull, 2842452788235099312ull}}, {{230537312077797502ull, 16261086359879149591ull, 11294184167248134139ull, 3553065985293874140ull}}, {{14123229695379410589ull, 15714671931421549084ull, 14117730209060167674ull, 4441332481617342675ull}}, {{18050390596466907426ull, 14433355975565856081ull, 6517738371448910844ull, 2775832801010839172ull}}, {{8727930190301470571ull, 18041694969457320102ull, 8147172964311138555ull, 3469791001263548965ull}}, {{1686540701022062405ull, 17940432693394262224ull, 14795652223816311098ull, 4337238751579436206ull}}, {{1054087938138789004ull, 15824456451798801794ull, 4635596621457806532ull, 2710774219737147629ull}}, {{10540981959528262062ull, 1333826491038950626ull, 10406181795249646070ull, 3388467774671434536ull}}, {{3952855412555551770ull, 10890655150653464091ull, 13007727244062057587ull, 4235584718339293170ull}}, {{164691623633525904ull, 4500816459944721105ull, 12741515545966173896ull, 2647240448962058231ull}}, {{4817550547969295284ull, 5626020574930901381ull, 11315208414030329466ull, 3309050561202572789ull}}, {{10633624203389007009ull, 16255897755518402534ull, 308952462255748120ull, 4136313201503215987ull}}, {{2034329108690741477ull, 10159936097199001584ull, 16333996353405700239ull, 2585195750939509991ull}}, {{2542911385863426846ull, 8088234103071364076ull, 15805809423329737395ull, 3231494688674387489ull}}, {{3178639232329283557ull, 5498606610411817191ull, 5922203723880008032ull, 4039368360842984362ull}}, {{8904178547846884080ull, 3436629131507385744ull, 8313063345852392924ull, 2524605225526865226ull}}, {{11130223184808605099ull, 4295786414384232180ull, 1167957145460715347ull, 3155756531908581533ull}}, {{13912778981010756374ull, 758046999552902321ull, 6071632450253282088ull, 3944695664885726916ull}}, {{1777957835490640878ull, 473779374720563951ull, 13018142318263077113ull, 2465434790553579322ull}}, {{16057505349645464809ull, 5203910236828092842ull, 7049305860974070583ull, 3081793488191974153ull}}, {{10848509650202055204ull, 1893201777607728149ull, 13423318344644976133ull, 3852241860239967691ull}}, {{9086161540589978454ull, 3489094120218524045ull, 6083730956189416131ull, 2407651162649979807ull}}, {{15969387944164860972ull, 18196425705555318768ull, 2992977676809382259ull, 3009563953312474759ull}}, {{1514990856496524599ull, 18133846113516760557ull, 17576280151293891536ull, 3761954941640593448ull}}, {{3252712294524021826ull, 11333653820947975348ull, 10985175094558682210ull, 2351221838525370905ull}}, {{4065890368155027283ull, 4943695239330193377ull, 18343154886625740667ull, 2939027298156713631ull}}, {{9694048978621172007ull, 1567933030735353817ull, 18317257589854787930ull, 3673784122695892039ull}}, {{16729247241703852913ull, 11183288325273968079ull, 18284885968891097008ull, 4592230153369865049ull}}, {{17373308553705989927ull, 6989555203296230049ull, 4510524702915853774ull, 2870143845856165656ull}}, {{7881577636850323697ull, 17960316040975063370ull, 5638155878644817217ull, 3587679807320207070ull}}, {{628600009208128813ull, 8615336995936665501ull, 16271066885160797330ull, 4484599759150258837ull}}, {{2698718014968774460ull, 9996271640887803842ull, 12475259812439192283ull, 2802874849468911773ull}}, {{12596769555565743883ull, 7883653532682366898ull, 1759016710266826642ull, 3503593561836139717ull}}, {{6522589907602404046ull, 631194878998182815ull, 6810456906260921207ull, 4379491952295174646ull}}, {{10994147719892584385ull, 7312025827014946115ull, 18091593621695239466ull, 2737182470184484153ull}}, {{9130998631438342577ull, 18363404320623458452ull, 8779433971836885620ull, 3421478087730605192ull}}, {{11413748289297928221ull, 4507511327069771449ull, 10974292464796107026ull, 4276847609663256490ull}}, {{216063653170123282ull, 7428880597845995060ull, 11470618808924954795ull, 2673029756039535306ull}}, {{270079566462654103ull, 4674414728880105921ull, 5114901474301417686ull, 3341287195049419133ull}}, {{4949285476505705532ull, 15066390447954908209ull, 11005312861304160011ull, 4176608993811773916ull}}, {{14622518468884535718ull, 7110651020758123678ull, 16101692575169875815ull, 2610380621132358697ull}}, {{9054776049250893839ull, 4276627757520266694ull, 6292057663680181057ull, 3262975776415448372ull}}, {{2095098024708841491ull, 9957470715327721272ull, 7865072079600226321ull, 4078719720519310465ull}}, {{1309436265443025932ull, 17752634243148295555ull, 16444885095818611210ull, 2549199825324569040ull}}, {{15471853387085946127ull, 12967420767080593635ull, 2109362296063712397ull, 3186499781655711301ull}}, {{14728130715430044754ull, 2374217903568578332ull, 7248388888507028401ull, 3983124727069639126ull}}, {{18428453733998553780ull, 13013101235798831217ull, 18365301110599056462ull, 2489452954418524453ull}}, {{9200509112216028512ull, 7043004507893763214ull, 9121568332966656866ull, 3111816193023155567ull}}, {{2277264353415259832ull, 18027127671721979826ull, 6790274397780933178ull, 3889770241278944459ull}}, {{6034976239311925299ull, 15878640813253625295ull, 1938078489399389284ull, 2431106400799340287ull}}, {{2932034280712518720ull, 1401556942857480003ull, 16257656167031400318ull, 3038883000999175358ull}}, {{17500100906172812112ull, 10975318215426625811ull, 11098698171934474589ull, 3798603751248969198ull}}, {{8631720057144313618ull, 9165416893855335084ull, 2325000339031658714ull, 2374127344530605749ull}}, {{10789650071430392023ull, 2233399080464393047ull, 7517936442216961297ull, 2967659180663257186ull}}, {{8875376570860602124ull, 7403434869007879213ull, 174048515916425813ull, 3709573975829071483ull}}, {{7852953366001570280ull, 6932989802343618460ull, 16249681386943623797ull, 2318483734893169676ull}}, {{9816191707501962850ull, 13277923271356910979ull, 1865357659969978130ull, 2898104668616462096ull}}, {{7658553615950065658ull, 7374032052341362916ull, 2331697074962472663ull, 3622630835770577620ull}}, {{9573192019937582072ull, 4605854046999315741ull, 2914621343703090829ull, 4528288544713222025ull}}, {{8289088021674682747ull, 5184501788588266290ull, 13350853385882901528ull, 2830180340445763765ull}}, {{1137987990238577626ull, 6480627235735332863ull, 2853508677071463198ull, 3537725425557204707ull}}, {{15257543043080385744ull, 17324156081523941886ull, 17401943901621492709ull, 4422156781946505883ull}}, {{4924278383497853186ull, 13133440560166157631ull, 8570371929299738991ull, 2763847988716566177ull}}, {{1543661960944928579ull, 11805114681780309135ull, 15324650930052061643ull, 3454809985895707721ull}}, {{15764635506463324436ull, 10144707333797998514ull, 5320755607282913342ull, 4318512482369634652ull}}, {{14464583209966965676ull, 1728756065196361167ull, 12548844291406596647ull, 2699070301481021657ull}}, {{13469042994031319191ull, 15996003136777615171ull, 1850997308976082096ull, 3373837876851277072ull}}, {{12224617724111761085ull, 1548259847262467348ull, 2313746636220102621ull, 4217297346064096340ull}}, {{16863758114424626486ull, 3273505413752736044ull, 10669463684492339946ull, 2635810841290060212ull}}, {{2632953569321231492ull, 13315253804045695864ull, 13336829605615424932ull, 3294763551612575265ull}}, {{3291191961651539365ull, 16644067255057119830ull, 2835978951737117453ull, 4118454439515719082ull}}, {{15892053031314375815ull, 12708385043624393845ull, 6384172863263086312ull, 2574034024697324426ull}}, {{6030008233860806057ull, 15885481304530492307ull, 17203588115933633698ull, 3217542530871655532ull}}, {{2925824273898619667ull, 10633479593808339576ull, 3057741071207490507ull, 4021928163589569416ull}}, {{1828640171186637292ull, 4340081736916518283ull, 1911088169504681567ull, 2513705102243480885ull}}, {{16120858269265460327ull, 813416152718259949ull, 7000546230308239863ull, 3142131377804351106ull}}, {{6316014781299661696ull, 14851828246179988649ull, 17974054824740075636ull, 3927664222255438882ull}}, {{15476724284380758320ull, 59020617007717097ull, 15845470283889935177ull, 2454790138909649301ull}}, {{5510847300193784188ull, 4685461789687034276ull, 5971779799580255259ull, 3068487673637061627ull}}, {{6888559125242230235ull, 1245141218681404941ull, 2853038731047931170ull, 3835609592046327034ull}}, {{6611192462490087849ull, 5389899280103265992ull, 6394835225332344885ull, 2397255995028954396ull}}, {{8263990578112609812ull, 11349060118556470394ull, 7993544031665431106ull, 2996569993786192995ull}}, {{1106616185785986456ull, 4962953111340812185ull, 5380244021154400979ull, 3745712492232741244ull}}, {{12220850162184711295ull, 796002685374313663ull, 12586024550076276420ull, 2341070307645463277ull}}, {{10664376684303501215ull, 995003356717892079ull, 1897472632313181813ull, 2926337884556829097ull}}, {{8718784836951988615ull, 5855440214324753003ull, 6983526808818865170ull, 3657922355696036371ull}}, {{6286795027762597864ull, 16542672304760717062ull, 4117722492596193558ull, 4572402944620045464ull}}, {{17764304947633787377ull, 5727484172048060259ull, 2573576557872620974ull, 2857751840387528415ull}}, {{17593695166114846318ull, 16382727251914851132ull, 17052028752622939929ull, 3572189800484410518ull}}, {{3545374883934006281ull, 6643351009611400204ull, 12091663903923899104ull, 4465237250605513148ull}}, {{11439231339313529734ull, 4152094381007125127ull, 16780661976807212748ull, 2790773281628445717ull}}, {{9687353155714524263ull, 5190117976258906409ull, 7140769415726852223ull, 3488466602035557147ull}}, {{16720877463070543233ull, 1875961451896245107ull, 4314275751231177375ull, 4360583252544446434ull}}, {{8144705405205395569ull, 8090004935076235048ull, 7308108362946873763ull, 2725364532840279021ull}}, {{10180881756506744461ull, 5500820150417905906ull, 13746821472110980108ull, 3406705666050348776ull}}, {{3502730158778654768ull, 6876025188022382383ull, 17183526840138725135ull, 4258382082562935970ull}}, {{9106735376877741086ull, 11215044770155070845ull, 15351390293514091113ull, 2661488801601834981ull}}, {{15995105239524564261ull, 183747907411674844ull, 5354179811610450180ull, 3326861002002293727ull}}, {{1547137475696153711ull, 229684884264593556ull, 2081038746085674821ull, 4158576252502867159ull}}, {{10190332959164871877ull, 2449396061879064924ull, 8218178243944628619ull, 2599110157814291974ull}}, {{12737916198956089846ull, 16896803132630994867ull, 1049350768076009965ull, 3248887697267864968ull}}, {{11310709230267724404ull, 7285945860506579872ull, 1311688460095012457ull, 4061109621584831210ull}}, {{7069193268917327753ull, 16082931208885082180ull, 5431491305986770689ull, 2538193513490519506ull}}, {{8836491586146659691ull, 6268605955824189013ull, 16012736169338239170ull, 3172741891863149382ull}}, {{15657300501110712517ull, 17059129481635012074ull, 10792548174818023154ull, 3965927364828936728ull}}, {{14397498831621583227ull, 15273641944449270450ull, 6745342609261264471ull, 2478704603018085455ull}}, {{8773501502672203226ull, 14480366412134200159ull, 3819992243149192685ull, 3098380753772606819ull}}, {{6355190859912866129ull, 4265399959885586487ull, 163304285509102953ull, 3872975942215758524ull}}, {{10889523315086623187ull, 14195090020996961314ull, 9325437215297965153ull, 2420609963884849077ull}}, {{4388532107003503175ull, 3908804470964037931ull, 16268482537549844346ull, 3025762454856061346ull}}, {{873979115326991065ull, 14109377625559823222ull, 11112231135082529624ull, 3782203068570076683ull}}, {{14381295002361533128ull, 8818361015974889513ull, 4639301450212887063ull, 2363876917856297927ull}}, {{4141560697669752697ull, 6411265251541223988ull, 1187440794338720925ull, 2954846147320372409ull}}, {{5176950872087190872ull, 12625767582853917889ull, 6095987011350789060ull, 3693557684150465511ull}}, {{14764809341122964055ull, 17114476776138474488ull, 10727520909735325018ull, 2308473552594040944ull}}, {{9267602694153453ull, 12169723933318317303ull, 13409401137169156273ull, 2885591940742551180ull}}, {{13846642558649855528ull, 1377096861365732916ull, 16761751421461445342ull, 3606989925928188975ull}}, {{17308303198312319409ull, 10944743113561941953ull, 16340503258399418773ull, 4508737407410236219ull}}, {{3900160471304117775ull, 9146307455189907673ull, 7906971527285942781ull, 2817960879631397637ull}}, {{9486886607557535123ull, 16044570337414772495ull, 14495400427534816380ull, 3522451099539247046ull}}, {{7246922241019530999ull, 1608968848058914003ull, 8895878497563744668ull, 4403063874424058808ull}}, {{2223483391423512923ull, 10228977566891597060ull, 5559924060977340417ull, 2751914921515036755ull}}, {{2779354239279391153ull, 17397907977041884229ull, 2338219057794287617ull, 3439893651893795944ull}}, {{8085878817526626846ull, 7912326916020191574ull, 2922773822242859522ull, 4299867064867244930ull}}, {{441988242526753875ull, 9556890340940007638ull, 6438419657329175105ull, 2687416915542028081ull}}, {{9775857340013218151ull, 16557798944602397451ull, 12659710590088856785ull, 3359271144427535101ull}}, {{7608135656589134785ull, 6862190625470833102ull, 1989580182328907270ull, 4199088930534418877ull}}, {{143398766940821337ull, 18123927196201434401ull, 3549330623169260995ull, 2624430581584011798ull}}, {{4790934477103414575ull, 18043222976824405097ull, 13660035315816352052ull, 3280538226980014747ull}}, {{10600354114806656122ull, 4107284647320954755ull, 12463358126343052162ull, 4100672783725018434ull}}, {{4319378312540466125ull, 7178738923002984626ull, 12401284847391795505ull, 2562920489828136521ull}}, {{14622594927530358464ull, 13585109672181118686ull, 1666548003957580669ull, 3203650612285170652ull}}, {{9054871622558172271ull, 3146329034944234646ull, 2083185004946975837ull, 4004563265356463315ull}}, {{1047608745671469766ull, 4272298656053840606ull, 17442891692587717562ull, 2502852040847789571ull}}, {{10532882968944113015ull, 14563745356922076565ull, 17191928597307259048ull, 3128565051059736964ull}}, {{17777789729607529173ull, 18204681696152595706ull, 3043166672924522194ull, 3910706313824671206ull}}, {{15722804599432093637ull, 15989612078522760220ull, 15737037225859990083ull, 2444191446140419503ull}}, {{1206761675580565430ull, 15375329079726062372ull, 15059610513897599700ull, 3055239307675524379ull}}, {{1508452094475706788ull, 772417275948026349ull, 14212827123944611722ull, 3819049134594405474ull}}, {{3248625568261010695ull, 5094446815894904372ull, 13494702970892770230ull, 2386905709121503421ull}}, {{4060781960326263368ull, 15591430556723406273ull, 3033320658333799075ull, 2983632136401879277ull}}, {{9687663468835217114ull, 14877602177476869937ull, 8403336841344636748ull, 3729540170502349096ull}}, {{17584004714090480456ull, 75129324068267902ull, 5252085525840397968ull, 2330962606563968185ull}}, {{12756633855758324762ull, 93911655085334878ull, 11176792925727885364ull, 2913703258204960231ull}}, {{6722420282843130145ull, 117389568856668598ull, 9359305138732468801ull, 3642129072756200289ull}}, {{17626397390408688489ull, 4758422979498223651ull, 16310817441842973905ull, 4552661340945250361ull}}, {{8710655359791736354ull, 14503229408254859542ull, 3276731873510776834ull, 2845413338090781476ull}}, {{1664947162884894634ull, 8905664723463798620ull, 4095914841888471043ull, 3556766672613476845ull}}, {{2081183953606118293ull, 6520394885902360371ull, 9731579570787976708ull, 4445958340766846056ull}}, {{17441641035499681597ull, 13298618840543751039ull, 6082237231742485442ull, 2778723962979278785ull}}, {{17190365275947214092ull, 7399901513824912991ull, 12214482558105494707ull, 3473404953724098481ull}}, {{16876270576506629711ull, 4638190873853753335ull, 1433045142349704672ull, 4341756192155123102ull}}, {{17465198137957725426ull, 2898869296158595834ull, 14730711269250729132ull, 2713597620096951938ull}}, {{12608125635592380974ull, 3623586620198244793ull, 9190017049708635607ull, 3391997025121189923ull}}, {{1925098989208312505ull, 18364541330529969704ull, 6875835293708406604ull, 4239996281401487404ull}}, {{1203186868255195316ull, 2254466294726455257ull, 13520769095422529936ull, 2649997675875929627ull}}, {{6115669603746382049ull, 2818082868408069071ull, 12289275350850774516ull, 3312497094844912034ull}}, {{3032900986255589657ull, 3522603585510086339ull, 6138222151708692337ull, 4140621368556140043ull}}, {{18036464180905601200ull, 13730842287012273721ull, 1530545835604238758ull, 2587888355347587527ull}}, {{8710522170849837788ull, 7940180821910566344ull, 15748240349787462160ull, 3234860444184484408ull}}, {{10888152713562297234ull, 9925226027388207930ull, 1238556363524776084ull, 4043575555230605511ull}}, {{11416781464403823676ull, 15426638303972405764ull, 7691626754844066908ull, 2527234722019128444ull}}, {{14270976830504779595ull, 836553806255955589ull, 9614533443555083636ull, 3159043402523910555ull}}, {{4003662982848810781ull, 1045692257819944487ull, 7406480786016466641ull, 3948804253154888194ull}}, {{9419818391921588594ull, 12182772707205935064ull, 9240736509687679554ull, 2468002658221805121ull}}, {{11774772989901985743ull, 6005093847152643022ull, 16162606655536987347ull, 3085003322777256401ull}}, {{5495094200522706370ull, 2894681290513415874ull, 6368200264139070472ull, 3856254153471570502ull}}, {{8046119893754079386ull, 1809175806570884921ull, 17815183220369082757ull, 2410158845919731563ull}}, {{14669335885619987136ull, 6873155776640994055ull, 17657293007033965542ull, 3012698557399664454ull}}, {{13724983838597596016ull, 17814816757656018377ull, 12848244221937681119ull, 3765873196749580568ull}}, {{1660585871482415654ull, 18051789501176093342ull, 8030152638711050699ull, 2353670747968487855ull}}, {{11299104376207795375ull, 17953050858042728773ull, 5426004779961425470ull, 2942088434960609819ull}}, {{288822414977580507ull, 13217941535698635159ull, 2170819956524393934ull, 3677610543700762274ull}}, {{14196086074004139346ull, 7299054882768518140ull, 11936896982510268226ull, 4597013179625952842ull}}, {{18095925833107362899ull, 9173595320157711741ull, 12072246632496305545ull, 2873133237266220526ull}}, {{8784849236102039912ull, 16078680168624527581ull, 5866936253765606123ull, 3591416546582775658ull}}, {{15592747563554937794ull, 15486664192353271572ull, 16557042354061783462ull, 4489270683228469572ull}}, {{522095190367060313ull, 5067479101793406829ull, 1124779434433838856ull, 2805794177017793483ull}}, {{5264305006386213296ull, 6334348877241758536ull, 15241032348324462282ull, 3507242721272241853ull}}, {{6580381257982766619ull, 17141308133406973978ull, 5216232380123414140ull, 4384053401590302317ull}}, {{8724424304666617041ull, 1489945546524582928ull, 5565988246790827790ull, 2740033375993938948ull}}, {{10905530380833271302ull, 11085803970010504468ull, 6957485308488534737ull, 3425041719992423685ull}}, {{13631912976041589127ull, 22196907230966873ull, 13308542654038056326ull, 4281302149990529606ull}}, {{1602416582384911348ull, 13848931122301518008ull, 3706153140346397299ull, 2675813843744081004ull}}, {{2003020727981139185ull, 12699477884449509606ull, 4632691425432996624ull, 3344767304680101255ull}}, {{11727147946831199790ull, 15874347355561887007ull, 1179178263363857876ull, 4180959130850126569ull}}, {{14246996494410581725ull, 698095060371403571ull, 12266201460670880933ull, 2613099456781329105ull}}, {{13197059599585839252ull, 5484304843891642368ull, 1497693770556437454ull, 3266374320976661382ull}}, {{16496324499482299065ull, 16078753091719328768ull, 11095489250050322625ull, 4082967901220826727ull}}, {{10310202812176436916ull, 3131691654683498624ull, 13852209808922533497ull, 2551854938263016704ull}}, {{12887753515220546144ull, 8526300586781761184ull, 17315262261153166871ull, 3189818672828770880ull}}, {{16109691894025682680ull, 6046189715049813576ull, 3197333752731906973ull, 3987273341035963601ull}}, {{10068557433766051675ull, 6084711581119827437ull, 13527548641525911618ull, 2492045838147477250ull}}, {{17197382810634952498ull, 16829261513254560104ull, 7686063765052613714ull, 3115057297684346563ull}}, {{3049984439584139006ull, 11813204854713424323ull, 4995893687888379239ull, 3893821622105433204ull}}, {{18047141339235944543ull, 14300782061836972057ull, 12345805591785012832ull, 2433638513815895752ull}}, {{8723868618762766967ull, 17875977577296215072ull, 15432256989731266040ull, 3042048142269869690ull}}, {{10904835773453458709ull, 3898227897910717224ull, 10066949200309306743ull, 3802560177837337113ull}}, {{6815522358408411693ull, 9353921463835280121ull, 17821058296261786474ull, 2376600111148335695ull}}, {{13131088966437902520ull, 2469029792939324343ull, 17664636851899845189ull, 2970750138935419619ull}}, {{11802175189619990246ull, 7697973259601543333ull, 17469110046447418582ull, 3713437673669274524ull}}, {{9682202502726187856ull, 199547268823576679ull, 1694821742174860806ull, 2320898546043296578ull}}, {{7491067109980346916ull, 9472806122884246657ull, 11341899214573351815ull, 2901123182554120722ull}}, {{13975519905902821549ull, 7229321635177920417ull, 4954001981361913961ull, 3626403978192650903ull}}, {{3634341827096363224ull, 13648338062399788426ull, 1580816458275004547ull, 4533004972740813629ull}}, {{6883149660362614919ull, 6224368279786173814ull, 3293853295635571794ull, 2833128107963008518ull}}, {{17827309112308044457ull, 17003832386587493075ull, 13340688656399240550ull, 3541410134953760647ull}}, {{17672450371957667667ull, 12031418446379590536ull, 12064174802071662784ull, 4426762668692200809ull}}, {{11045281482473542292ull, 7519636528987244085ull, 622580223653707384ull, 2766726667932625506ull}}, {{18418287871519315769ull, 9399545661234055106ull, 10001597316421910038ull, 3458408334915781882ull}}, {{13799487802544368903ull, 2526060039687793075ull, 3278624608672611740ull, 4323010418644727353ull}}, {{6318836867376536612ull, 10802159561659646480ull, 13578355426488852097ull, 2701881511652954595ull}}, {{7898546084220670765ull, 18114385470501946004ull, 12361258264683677217ull, 3377351889566193244ull}}, {{9873182605275838457ull, 8807923782845268793ull, 15451572830854596522ull, 4221689861957741555ull}}, {{17699954174365868796ull, 10116638382705680899ull, 7351390010070428874ull, 2638556163723588472ull}}, {{17513256699529948090ull, 3422425941527325316ull, 9189237512588036093ull, 3298195204654485590ull}}, {{3444826800702883497ull, 8889718445336544550ull, 2263174853880269308ull, 4122744005818106988ull}}, {{15988074805721465898ull, 14779446065190116151ull, 10637856320529944125ull, 2576715003636316867ull}}, {{15373407488724444468ull, 4639249526205481477ull, 8685634382235042253ull, 3220893754545396084ull}}, {{5381701305623391873ull, 10410747926184239751ull, 10857042977793802816ull, 4026117193181745105ull}}, {{10281092343655701777ull, 6506717453865149844ull, 18314866907189596520ull, 2516323245738590690ull}}, {{12851365429569627221ull, 8133396817331437305ull, 13670211597132219842ull, 3145404057173238363ull}}, {{2229148731679870314ull, 943373984809520824ull, 12476078477987886899ull, 3931755071466547954ull}}, {{1393217957299918946ull, 16730509805001808179ull, 12409235067169817215ull, 2457346919666592471ull}}, {{15576580501907062395ull, 16301451237824872319ull, 10899857815534883615ull, 3071683649583240589ull}}, {{14859039608956440089ull, 15765128028853702495ull, 18236508287845992423ull, 3839604561979050736ull}}, {{16204428783238856912ull, 16770734045674645915ull, 11397817679903745264ull, 2399752851236906710ull}}, {{15643849960621183236ull, 2516673483383755778ull, 5023900063024905773ull, 2999691064046133388ull}}, {{10331440413921703237ull, 7757527872657082627ull, 6279875078781132216ull, 3749613830057666735ull}}, {{4151307249487370571ull, 4848454920410676642ull, 10842450951879289491ull, 2343508643786041709ull}}, {{14412506098713989022ull, 1448882632085957898ull, 18164749708276499768ull, 2929385804732552136ull}}, {{8792260586537710469ull, 1811103290107447373ull, 4259193061636073094ull, 3661732255915690171ull}}, {{15602011751599525990ull, 11487251149489085024ull, 712305308617703463ull, 4577165319894612714ull}}, {{9751257344749703744ull, 14097060996071759996ull, 5056876836313452568ull, 2860728324934132946ull}}, {{12189071680937129680ull, 17621326245089699995ull, 15544468082246591518ull, 3575910406167666182ull}}, {{10624653582744024196ull, 12803285769507349186ull, 10207213065953463590ull, 4469888007709582728ull}}, {{11252094507642403027ull, 3390367587514705337ull, 6379508166220914744ull, 2793680004818489205ull}}, {{230060079270840071ull, 4237959484393381672ull, 12586071226203531334ull, 3492100006023111506ull}}, {{287575099088550089ull, 14520821392346502898ull, 6509216995899638359ull, 4365125007528889383ull}}, {{4791420455357731710ull, 15993042397857646167ull, 10985789650078355830ull, 2728203129705555864ull}}, {{1377589550769776733ull, 10767930960467281901ull, 13732237062597944788ull, 3410253912131944830ull}}, {{6333672956889608820ull, 13459913700584102376ull, 7941924291392655177ull, 4262817390164931038ull}}, {{3958545598056005513ull, 1494917035223982129ull, 352016663693021582ull, 2664260868853081899ull}}, {{9559868015997394795ull, 11092018330884753469ull, 14275078884898440689ull, 3330326086066352373ull}}, {{16561521038424131397ull, 29964858323778124ull, 4008790550840887150ull, 4162907607582940467ull}}, {{1127578612160306316ull, 13853786091734525040ull, 199651085061860516ull, 2601817254739337792ull}}, {{1409473265200382894ull, 17317232614668156300ull, 249563856327325645ull, 3252271568424172240ull}}, {{1761841581500478618ull, 7811482713053031663ull, 311954820409157057ull, 4065339460530215300ull}}, {{8018680016078880992ull, 16411391741726614549ull, 9418343799610498968ull, 2540837162831384562ull}}, {{14635036038525989144ull, 2067495603448716570ull, 2549557712658347903ull, 3176046453539230703ull}}, {{9070423011302710622ull, 16419427559593059425ull, 17022005196105098590ull, 3970058066924038378ull}}, {{17198229428132663899ull, 5650456206318274236ull, 15250439265993074523ull, 2481286291827523986ull}}, {{3051042711456278258ull, 2451384239470454892ull, 9839677045636567346ull, 3101607864784404983ull}}, {{3813803389320347822ull, 12287602336192844423ull, 7687910288618321278ull, 3877009830980506229ull}}, {{9301156145966299245ull, 3068065441693139860ull, 7110786939600144751ull, 2423131144362816393ull}}, {{11626445182457874056ull, 17670139857398588537ull, 13500169692927568842ull, 3028913930453520491ull}}, {{697998422790178858ull, 12864302784893459864ull, 12263526097732073149ull, 3786142413066900614ull}}, {{436249014243861786ull, 10346032249772106367ull, 3053017792655157814ull, 2366339008166812884ull}}, {{14380369323086990945ull, 3709168275360357150ull, 3816272240818947268ull, 2957923760208516105ull}}, {{8752089617003962873ull, 4636460344200446438ull, 9382026319451071989ull, 3697404700260645131ull}}, {{858369992200088892ull, 5203630724338972976ull, 3557923440443226041ull, 2310877937662903207ull}}, {{1072962490250111115ull, 11116224423851104124ull, 18282462355836196263ull, 2888597422078629008ull}}, {{1341203112812638893ull, 9283594511386492251ull, 4406333871085693713ull, 3610746777598286261ull}}, {{15511561946297962328ull, 16216179157660503217ull, 10119603357284505045ull, 4513433471997857826ull}}, {{2777197188795144599ull, 12440954982751508463ull, 10936438116730203557ull, 2820895919998661141ull}}, {{17306554541276094461ull, 1716135673157221866ull, 18282233664340142351ull, 3526119899998326426ull}}, {{12409821139740342268ull, 15980227646728691045ull, 13629420043570402130ull, 4407649874997908033ull}}, {{10061981221551407870ull, 14599328297632819807ull, 1600858499590419475ull, 2754781171873692521ull}}, {{7965790508511871933ull, 13637474353613636855ull, 6612759142915412248ull, 3443476464842115651ull}}, {{5345552117212452012ull, 17046842942017046069ull, 3654262910216877406ull, 4304345581052644564ull}}, {{5646813082471476460ull, 6042590820333265889ull, 11507286355740324187ull, 2690215988157902852ull}}, {{11670202371516733479ull, 2941552506989194457ull, 14384107944675405234ull, 3362769985197378565ull}}, {{752694909113753136ull, 12900312670591268880ull, 4145076875562092830ull, 4203462481496723207ull}}, {{470434318196095710ull, 3451009400692155146ull, 9508202074867389875ull, 2627164050935452004ull}}, {{9811414934599895446ull, 18148819806147357644ull, 11885252593584237343ull, 3283955063669315005ull}}, {{12264268668249869307ull, 18074338739256809151ull, 1021507686698132967ull, 4104943829586643757ull}}, {{14582696945297250173ull, 18213990739676587575ull, 2944285313400027056ull, 2565589893491652348ull}}, {{13616685163194174812ull, 4320744350886182853ull, 3680356641750033821ull, 3206987366864565435ull}}, {{3185798398710554803ull, 10012616457035116471ull, 18435503857469705988ull, 4008734208580706793ull}}, {{8908653026835178608ull, 15481257322501723602ull, 4604660883277484386ull, 2505458880362941746ull}}, {{1912444246689197452ull, 10128199616272378695ull, 14979198140951631291ull, 3131823600453677182ull}}, {{16225613363643660527ull, 8048563501913085464ull, 9500625639334763306ull, 3914779500567096478ull}}, {{10141008352277287830ull, 9642038207123066319ull, 1326205006156839162ull, 2446737187854435299ull}}, {{8064574421919221883ull, 2829175722049057091ull, 15492814312978212665ull, 3058421484818044123ull}}, {{5469032008971639450ull, 8148155670988709268ull, 14754331872795377927ull, 3823026856022555154ull}}, {{12641517042462050464ull, 12010126322009025148ull, 13833143438924499108ull, 2389391785014096971ull}}, {{15801896303077563080ull, 15012657902511281435ull, 12679743280228235981ull, 2986739731267621214ull}}, {{15140684360419565946ull, 4930764322856938082ull, 6626307063430519169ull, 3733424664084526518ull}}, {{14074613743689616620ull, 14610942747854056061ull, 17976499969926238192ull, 2333390415052829073ull}}, {{3758209124329857063ull, 18263678434817570077ull, 8635566907125634028ull, 2916738018816036342ull}}, {{9309447423839709233ull, 4382853969812410980ull, 1571086597052266728ull, 3645922523520045428ull}}, {{11636809279799636541ull, 5478567462265513725ull, 1963858246315333410ull, 4557403154400056785ull}}, {{9578848809088466791ull, 8035790682343333982ull, 12756626450015553141ull, 2848376971500035490ull}}, {{2750188974505807680ull, 14656424371356555382ull, 6722411025664665618ull, 3560471214375044363ull}}, {{12661108254987035408ull, 9097158427340918419ull, 3791327763653444119ull, 4450589017968805454ull}}, {{5607349650153203178ull, 12603253044729155868ull, 16204637907565566286ull, 2781618136230503408ull}}, {{7009187062691503973ull, 6530694269056669027ull, 1809053310747406242ull, 3477022670288129261ull}}, {{4149797809936992062ull, 17386739873175612092ull, 6873002656861645706ull, 4346278337860161576ull}}, {{11816995668065395847ull, 15478398439162145461ull, 4295626660538528566ull, 2716423961162600985ull}}, {{936186529799581096ull, 10124626012097906019ull, 9981219344100548612ull, 3395529951453251231ull}}, {{15005291217531640082ull, 12655782515122382523ull, 7864838161698297861ull, 4244412439316564039ull}}, {{7072464001743581099ull, 10215707081165183029ull, 11833052878702518019ull, 2652757774572852524ull}}, {{13452266020606864278ull, 8157947833029090882ull, 14791316098378147524ull, 3315947218216065655ull}}, {{7591960488903804540ull, 10197434791286363603ull, 13877459104545296501ull, 4144934022770082069ull}}, {{2439132296351183885ull, 8679239753767671204ull, 10979254949554504265ull, 2590583764231301293ull}}, {{3048915370438979857ull, 15460735710636976909ull, 18335754705370518235ull, 3238229705289126616ull}}, {{8422830231476112725ull, 14714233619868833232ull, 4472949308003596178ull, 4047787131611408271ull}}, {{5264268894672570453ull, 13808082030845408674ull, 9713122345143329467ull, 2529866957257130169ull}}, {{15803708155195488874ull, 12648416520129372938ull, 16753088949856549738ull, 3162333696571412711ull}}, {{10531263157139585285ull, 6587148613306940365ull, 16329675168893299269ull, 3952917120714265889ull}}, {{8887882482425934755ull, 6422810892530531680ull, 3288517952917230187ull, 2470573200446416181ull}}, {{11109853103032418444ull, 3416827597235776696ull, 8722333459573925638ull, 3088216500558020226ull}}, {{13887316378790523055ull, 13494406533399496678ull, 1679544787612631239ull, 3860270625697525283ull}}, {{4067886718316689005ull, 15351533111015767280ull, 17190616556753752188ull, 2412669141060953301ull}}, {{5084858397895861257ull, 742672315060157484ull, 7653212640660026524ull, 3015836426326191627ull}}, {{6356072997369826571ull, 928340393825196855ull, 4954829782397645251ull, 3769795532907739534ull}}, {{10890074650997223463ull, 16721113810636605698ull, 16931826669280691993ull, 2356122208067337208ull}}, {{4389221276891753520ull, 7066334208013593411ull, 2718039262891313376ull, 2945152760084171511ull}}, {{874840577687303996ull, 8832917760016991764ull, 17232607133896305432ull, 3681440950105214388ull}}, {{1093550722109129995ull, 11041147200021239705ull, 3094014843660830174ull, 4601801187631517986ull}}, {{12212684247386676007ull, 2289030981585886911ull, 6545445295715406763ull, 2876125742269698741ull}}, {{10654169290805957105ull, 16696346782264522351ull, 12793492638071646357ull, 3595157177837123426ull}}, {{8706025595080058477ull, 7035375422548489227ull, 6768493760734782139ull, 4493946472296404283ull}}, {{3135422987711342596ull, 2091266629879111815ull, 1924465591245544885ull, 2808716545185252677ull}}, {{17754336789921341957ull, 7225769305776277672ull, 7017268007484319010ull, 3510895681481565846ull}}, {{3746176913692125831ull, 18255583669075122899ull, 17994957046210174570ull, 4388619601851957307ull}}, {{35517561843884692ull, 16021425811599339716ull, 8941005144667665154ull, 2742887251157473317ull}}, {{44396952304855865ull, 10803410227644398837ull, 15787942449261969347ull, 3428609063946841646ull}}, {{4667182208808457735ull, 8892576766128110642ull, 10511556024722685876ull, 4285761329933552058ull}}, {{7528674898932673989ull, 14781232515684844959ull, 11181408533879066576ull, 2678600831208470036ull}}, {{4799157605238454582ull, 29796570896504583ull, 13976760667348833221ull, 3348251039010587545ull}}, {{1387260988120680323ull, 4648931732048018633ull, 3635892778903877814ull, 4185313798763234432ull}}, {{12396253163643894962ull, 16740640387812175357ull, 2272432986814923633ull, 2615821124227021520ull}}, {{1660258399272704991ull, 7090742429483055485ull, 2840541233518654542ull, 3269776405283776900ull}}, {{6687009017518269142ull, 18086800073708595164ull, 3550676541898318177ull, 4087220506604721125ull}}, {{13402752672803694022ull, 4386721018426790121ull, 4525015847900142813ull, 2554512816627950703ull}}, {{2918382785722453815ull, 10095087291460875556ull, 1044583791447790612ull, 3193141020784938379ull}}, {{3647978482153067269ull, 12618859114326094445ull, 15140787794591901977ull, 3991426275981172973ull}}, {{4585829560559360995ull, 969257918812727172ull, 11768835380833632688ull, 2494641422488233108ull}}, {{5732286950699201244ull, 1211572398515908965ull, 14711044226042040860ull, 3118301778110291385ull}}, {{11777044706801389459ull, 1514465498144886206ull, 4553747227270387363ull, 3897877222637864232ull}}, {{2748966923323480508ull, 17087442000836411543ull, 2846092017043992101ull, 2436173264148665145ull}}, {{17271266709436514347ull, 7524244445763350716ull, 8169301039732378031ull, 3045216580185831431ull}}, {{3142339313086091318ull, 4793619538776800492ull, 5599940281238084635ull, 3806520725232289289ull}}, {{11187334107533582882ull, 690169202521806355ull, 15029177721842272657ull, 2379075453270180805ull}}, {{9372481615989590698ull, 5474397521579645848ull, 4951414097020677109ull, 2973844316587726007ull}}, {{11715602019986988372ull, 11454682920401945214ull, 1577581602848458482ull, 3717305395734657509ull}}, {{2710565244064479829ull, 11770862843678603663ull, 3291831510993980503ull, 2323315872334160943ull}}, {{17223264610362763498ull, 10101892536170866674ull, 17949847444024639341ull, 2904144840417701178ull}}, {{12305708726098678564ull, 17239051688640971247ull, 13213937268176023368ull, 3630181050522126473ull}}, {{10770449889195960301ull, 3102070537091662443ull, 2682363529937865499ull, 4537726313152658092ull}}, {{4425688171533781237ull, 18079695150178146691ull, 10899849243065941744ull, 2836078945720411307ull}}, {{920424195989838642ull, 4152874864013131748ull, 9013125535405039277ull, 3545098682150514134ull}}, {{1150530244987298302ull, 9802779598443802589ull, 2043034882401523288ull, 4431373352688142668ull}}, {{3024924412330755391ull, 6126737249027376618ull, 10500268838355727863ull, 2769608345430089167ull}}, {{13004527552268220046ull, 3046735542856832868ull, 8513650029517271925ull, 3462010431787611459ull}}, {{16255659440335275058ull, 8420105446998428989ull, 6030376518469202002ull, 4327513039734514324ull}}, {{12465630159423240863ull, 9874251922801406022ull, 12992357360898027059ull, 2704695649834071452ull}}, {{6358665662424275271ull, 7731128885074369624ull, 16240446701122533824ull, 3380869562292589315ull}}, {{7948332078030344089ull, 9663911106342962030ull, 15688872357975779376ull, 4226086952865736644ull}}, {{356021530341577152ull, 6039944441464351269ull, 582173186880086302ull, 2641304345541085403ull}}, {{5056712931354359343ull, 16773302588685214894ull, 14562774538882271589ull, 3301630431926356753ull}}, {{15544263201047724987ull, 7131570180574354905ull, 4368410118320675775ull, 4127038039907945942ull}}, {{2797635473013746261ull, 11374760390500053672ull, 16565314379232586071ull, 2579398774942466213ull}}, {{3497044341267182826ull, 9606764469697679186ull, 6871584918758568877ull, 3224248468678082767ull}}, {{13594677463438754341ull, 16620141605549486886ull, 3977795130020823192ull, 4030310585847603459ull}}, {{3884987396221833559ull, 10387588503468429304ull, 180278947049320543ull, 2518944116154752162ull}}, {{4856234245277291949ull, 8372799610908148726ull, 9448720720666426487ull, 3148680145193440202ull}}, {{15293664843451390744ull, 5854313495207798003ull, 2587528863978257301ull, 3935850181491800253ull}}, {{7252697517943425263ull, 5964788943718567704ull, 3923048549200104765ull, 2459906363432375158ull}}, {{9065871897429281579ull, 12067672198075597534ull, 14127182723354906764ull, 3074882954290468947ull}}, {{2108967834931826165ull, 15084590247594496918ull, 13047292385766245551ull, 3843603692863086184ull}}, {{15153162952114555066ull, 16345397932387642429ull, 8154557741103903469ull, 2402252308039428865ull}}, {{5106395634861030120ull, 6596689360202389325ull, 14804883194807267241ull, 3002815385049286081ull}}, {{10994680562003675554ull, 12857547718680374560ull, 4671045938226920339ull, 3753519231311607602ull}}, {{6871675351252297221ull, 5730124314961540148ull, 7531089729819213116ull, 2345949519569754751ull}}, {{8589594189065371526ull, 7162655393701925185ull, 4802176143846628491ull, 2932436899462193439ull}}, {{15348678754759102312ull, 4341633223700018577ull, 1391034161380897710ull, 3665546124327741799ull}}, {{5350790388166714178ull, 14650413566479799030ull, 15573850757008285849ull, 4581932655409677248ull}}, {{17179302047886360073ull, 2238979451408792537ull, 9733656723130178656ull, 2863707909631048280ull}}, {{7639069504575786379ull, 2798724314260990672ull, 12167070903912723320ull, 3579634887038810350ull}}, {{9548836880719732974ull, 3498405392826238340ull, 5985466593036128342ull, 4474543608798512938ull}}, {{15191395087304608917ull, 16021561425798562674ull, 8352602639074968117ull, 2796589755499070586ull}}, {{9765871822275985338ull, 6191893726966039631ull, 1217381261988934339ull, 3495737194373838233ull}}, {{7595653759417593769ull, 3128181140280161635ull, 6133412595913555828ull, 4369671492967297791ull}}, {{2441440590422302154ull, 11178485249529876830ull, 10750911900087054248ull, 2731044683104561119ull}}, {{12275172774882653500ull, 13973106561912346037ull, 8826953856681429906ull, 3413805853880701399ull}}, {{1508907913321153163ull, 8243011165535656739ull, 6422006302424399479ull, 4267257317350876749ull}}, {{17083968510321578391ull, 12069411006100867317ull, 6319596948228943626ull, 2667035823344297968ull}}, {{7519902582619809276ull, 5863391720771308339ull, 7899496185286179533ull, 3333794779180372460ull}}, {{4788192209847373691ull, 11940925669391523328ull, 9874370231607724416ull, 4167243473975465575ull}}, {{2992620131154608557ull, 7463078543369702080ull, 13089010422395909616ull, 2604527171234665984ull}}, {{3740775163943260697ull, 9328848179212127600ull, 16361263027994887020ull, 3255658964043332480ull}}, {{4675968954929075871ull, 11661060224015159500ull, 2004834711284057159ull, 4069573705054165601ull}}, {{12145852633685448227ull, 14205691667650556543ull, 12782236740621005484ull, 2543483565658853500ull}}, {{10570629773679422380ull, 17757114584563195679ull, 15977795925776256855ull, 3179354457073566875ull}}, {{8601601198671890071ull, 17584707212276606695ull, 15360558888792933165ull, 3974193071341958594ull}}, {{12293529776811013150ull, 13296285016886573136ull, 14212035323922971132ull, 2483870669588724121ull}}, {{15366912221013766438ull, 16620356271108216420ull, 3929986099621550203ull, 3104838336985905152ull}}, {{761896202557656431ull, 16163759320457882622ull, 4912482624526937754ull, 3881047921232381440ull}}, {{14311243181880698982ull, 14714035593713564542ull, 3070301640329336096ull, 2425654950770238400ull}}, {{8665681940496097919ull, 18392544492141955678ull, 3837877050411670120ull, 3032068688462798000ull}}, {{1608730388765346591ull, 4543936541467892982ull, 4797346313014587651ull, 3790085860578497500ull}}, {{14840514548260505331ull, 534117329203739161ull, 12221713482488893090ull, 2368803662861560937ull}}, {{4715585130043467952ull, 9891018698359449760ull, 1442083797828952650ull, 2961004578576951172ull}}, {{5894481412554334940ull, 3140401336094536392ull, 1802604747286190813ull, 3701255723221188965ull}}, {{3684050882846459338ull, 4268593844272779197ull, 3432470976267563210ull, 2313284827013243103ull}}, {{9216749621985462076ull, 14559114342195749804ull, 18125646775616617724ull, 2891606033766553878ull}}, {{11520937027481827595ull, 18198892927744687255ull, 13433686432665996347ull, 3614507542208192348ull}}, {{9789485265924896590ull, 18136930141253471165ull, 16792108040832495434ull, 4518134427760240435ull}}, {{8424271300416754321ull, 15947267356710807382ull, 8189224516306615694ull, 2823834017350150272ull}}, {{1306967088666167093ull, 10710712159033733420ull, 10236530645383269618ull, 3529792521687687840ull}}, {{1633708860832708866ull, 4165018161937390967ull, 12795663306729087023ull, 4412240652109609800ull}}, {{7938597065661524897ull, 9520665378851951210ull, 7997289566705679389ull, 2757650407568506125ull}}, {{699874295222130313ull, 16512517741992326917ull, 14608297976809487140ull, 3447063009460632656ull}}, {{5486528887455050796ull, 2193903103780857030ull, 18260372471011858926ull, 4308828761825790820ull}}, {{17264138609941570459ull, 15206247495145199355ull, 2189360757527636020ull, 2693017976141119263ull}}, {{16968487243999575170ull, 561065295221947578ull, 16571759002191708738ull, 3366272470176399078ull}}, {{11987237018144693155ull, 9924703655882210281ull, 11491326715884860114ull, 4207840587720498848ull}}, {{574494108699351366ull, 10814625803353769330ull, 7182079197428037571ull, 2629900367325311780ull}}, {{9941489672728965015ull, 8906596235764823758ull, 8977598996785046964ull, 3287375459156639725ull}}, {{3203490054056430461ull, 11133245294706029698ull, 15833684764408696609ull, 4109219323945799656ull}}, {{6613867302212656942ull, 40749281550186705ull, 9896052977755435381ull, 2568262077466124785ull}}, {{12879020146193209082ull, 4662622620365121285ull, 16981752240621682130ull, 3210327596832655981ull}}, {{2263717127459347640ull, 15051650312311177415ull, 7392132245494938950ull, 4012909496040819977ull}}, {{8332352232303174131ull, 4795595426767097980ull, 16149297699502806604ull, 2508068435025512485ull}}, {{10415440290378967664ull, 5994494283458872475ull, 6351564069096344543ull, 3135085543781890607ull}}, {{8407614344546321676ull, 2881431835896202690ull, 3327769067943042775ull, 3918856929727363259ull}}, {{9866444983768838951ull, 8718423925076208537ull, 18220756731960259398ull, 2449285581079602036ull}}, {{16944742248138436593ull, 1674657869490484863ull, 4329201841240772632ull, 3061606976349502546ull}}, {{16569241791745657837ull, 2093322336863106079ull, 14634874338405741598ull, 3827008720436878182ull}}, {{17273305147482118005ull, 15143384515821605011ull, 4535110443076200594ull, 2391880450273048864ull}}, {{16979945415925259602ull, 9705858607922230456ull, 5668888053845250743ull, 2989850562841311080ull}}, {{2778187696197022886ull, 7520637241475400167ull, 7086110067306563429ull, 3737313203551638850ull}}, {{8653896337764221160ull, 7006241285135819056ull, 9040504810493990047ull, 2335820752219774281ull}}, {{10817370422205276450ull, 4146115587992385916ull, 15912317031544875463ull, 2919775940274717851ull}}, {{13521713027756595562ull, 570958466563094491ull, 15278710271003706425ull, 3649719925343397314ull}}, {{12290455266268356548ull, 5325384101631256018ull, 9875015801899857223ull, 4562149906679246643ull}}, {{12293220559845110747ull, 10245894091160616867ull, 3866041866973716812ull, 2851343691674529152ull}}, {{10754839681379000529ull, 12807367613950771084ull, 4832552333717146015ull, 3564179614593161440ull}}, {{13443549601723750662ull, 11397523499011075951ull, 6040690417146432519ull, 4455224518241451800ull}}, {{15319747528718426020ull, 14040981214523004325ull, 3775431510716520324ull, 2784515323900907375ull}}, {{5314626355615868813ull, 17551226518153755407ull, 107603369968262501ull, 3480644154876134219ull}}, {{2031596926092448112ull, 8103975092410030547ull, 13969562267742491839ull, 4350805193595167773ull}}, {{17410649143303637734ull, 11982513460397350947ull, 11036819426552751351ull, 2719253245996979858ull}}, {{17151625410702159263ull, 10366455807069300780ull, 4572652246336163381ull, 3399066557496224823ull}}, {{2992787689668147463ull, 17569755777264013880ull, 1104129289492816322ull, 4248833196870281029ull}}, {{1870492306042592165ull, 15592783379217396579ull, 2995923815146704153ull, 2655520748043925643ull}}, {{16173173437835403918ull, 5655921168739582011ull, 17579962824215543904ull, 3319400935054907053ull}}, {{15604780778866866993ull, 7069901460924477514ull, 8139895474987266168ull, 4149251168818633817ull}}, {{14364674005219179775ull, 4418688413077798446ull, 16616649717935511115ull, 2593281980511646135ull}}, {{8732470469669198910ull, 911674497919860154ull, 16159126128992000990ull, 3241602475639557669ull}}, {{1692216050231722830ull, 10362965159254601001ull, 6363849605957837525ull, 4052003094549447087ull}}, {{12586850077463296529ull, 8782696233747819577ull, 10894935031364730309ull, 2532501934093404429ull}}, {{1898504541546956949ull, 15590056310612162376ull, 18230354807633300790ull, 3165627417616755536ull}}, {{2373130676933696186ull, 10264198351410427162ull, 4341199435832074372ull, 3957034272020944421ull}}, {{6094892691510948020ull, 15638496006486292784ull, 5019092656608740434ull, 2473146420013090263ull}}, {{7618615864388685025ull, 10324747971253090172ull, 1662179802333537639ull, 3091433025016362829ull}}, {{9523269830485856282ull, 8294248945638974811ull, 6689410771344309953ull, 3864291281270453536ull}}, {{3646200634839966224ull, 16713120637092829017ull, 4180881732090193720ull, 2415182050794033460ull}}, {{9169436811977345684ull, 2444656722656484655ull, 5226102165112742151ull, 3018977563492541825ull}}, {{6850109996544294201ull, 16890878958602769531ull, 11144313724818315592ull, 3773721954365677281ull}}, {{1975475738626489924ull, 10556799349126730957ull, 47667050370365389ull, 2358576221478548301ull}}, {{7081030691710500309ull, 17807685204835801600ull, 4671269831390344640ull, 2948220276848185376ull}}, {{8851288364638125386ull, 3812862432335200384ull, 5839087289237930801ull, 3685275346060231720ull}}, {{11064110455797656732ull, 9377764058846388384ull, 7298859111547413501ull, 4606594182575289650ull}}, {{6915069034873535458ull, 8166945545992686692ull, 9173472963144521342ull, 2879121364109556031ull}}, {{8643836293591919322ull, 985309895636082557ull, 6855155185503263774ull, 3598901705136945039ull}}, {{15416481385417287056ull, 10455009406399879004ull, 3957257963451691813ull, 4498627131421181299ull}}, {{411928829031028602ull, 8840223888213618330ull, 167443217943613431ull, 2811641957138238312ull}}, {{9738283073143561561ull, 6438593841839635008ull, 209304022429516789ull, 3514552446422797890ull}}, {{12172853841429451951ull, 12659928320726931664ull, 9485002064891671794ull, 4393190558028497362ull}}, {{7608033650893407470ull, 12524141218881720194ull, 10539812308984682775ull, 2745744098767810851ull}}, {{286670026761983529ull, 11043490505174762339ull, 8563079367803465565ull, 3432180123459763564ull}}, {{14193395588734643123ull, 18416049149895840827ull, 10703849209754331956ull, 4290225154324704455ull}}, {{6565029233745458000ull, 2286658681830124709ull, 13607434783737539329ull, 2681390721452940284ull}}, {{12817972560609210404ull, 7470009370715043790ull, 17009293479671924161ull, 3351738401816175355ull}}, {{6799093663906737197ull, 13949197731821192642ull, 16649930831162517297ull, 4189673002270219194ull}}, {{8861119558369098652ull, 1800719554747163545ull, 15017892787903961215ull, 2618545626418886996ull}}, {{15688085466388761219ull, 16085957498716118143ull, 325621911170399902ull, 3273182033023608746ull}}, {{14998420814558563620ull, 10884074836540371871ull, 9630399425817775686ull, 4091477541279510932ull}}, {{16291542036740184118ull, 2190860754410344515ull, 15242371677990885612ull, 2557173463299694332ull}}, {{15752741527497842244ull, 2738575943012930644ull, 606220523779055399ull, 3196466829124617916ull}}, {{1244182835662751189ull, 17258277984048327018ull, 757775654723819248ull, 3995583536405772395ull}}, {{5389300290716607397ull, 10786423740030204386ull, 16614510848698244694ull, 2497239710253607746ull}}, {{15959997400250535054ull, 4259657638182979674ull, 11544766524018030060ull, 3121549637817009683ull}}, {{10726624713458393010ull, 5324572047728724593ull, 9819272136595149671ull, 3901937047271262104ull}}, {{18233355491979965391ull, 10245386557471534726ull, 6137045085371968544ull, 2438710654544538815ull}}, {{13568322328120180931ull, 12806733196839418408ull, 3059620338287572776ull, 3048388318180673519ull}}, {{16960402910150226164ull, 16008416496049273010ull, 17659583478141629682ull, 3810485397725841898ull}}, {{15211937837271279256ull, 14616946328458183535ull, 15648925692265906455ull, 2381553373578651186ull}}, {{14403236278161711166ull, 13659496892145341515ull, 10337785078477607261ull, 2976941716973313983ull}}, {{13392359329274751054ull, 3239313059899513182ull, 8310545329669621173ull, 3721177146216642479ull}}, {{3758538562369331505ull, 4330413671650889691ull, 12111619858684595089ull, 2325735716385401549ull}}, {{86487184534276477ull, 10024703107991000018ull, 1304466768073580149ull, 2907169645481751937ull}}, {{9331481017522621404ull, 17142564903416137926ull, 6242269478519363090ull, 3633962056852189921ull}}, {{2440979235048500947ull, 12204834092415396600ull, 12414522866576591767ull, 4542452571065237401ull}}, {{1525612021905313092ull, 14545550335400704731ull, 841547763969287998ull, 2839032856915773376ull}}, {{15742073082663805077ull, 8958565882396105105ull, 1051934704961609998ull, 3548791071144716720ull}}, {{5842533298047592634ull, 1974835316140355574ull, 1314918381202012498ull, 4435988838930895900ull}}, {{17486641366561909109ull, 5845958091015110137ull, 10045196025106033619ull, 2772493024331809937ull}}, {{8023243652920222674ull, 2695761595341499768ull, 17168181049809929928ull, 3465616280414762421ull}}, {{10029054566150278342ull, 3369701994176874710ull, 7625168256980248698ull, 4332020350518453027ull}}, {{1656473085416536060ull, 6717749764787934598ull, 2459887151398961484ull, 2707512719074033142ull}}, {{11293963393625445883ull, 8397187205984918247ull, 12298230976103477663ull, 3384390898842541427ull}}, {{9505768223604419449ull, 5884797989053759905ull, 10761102701701959175ull, 4230488623553176784ull}}, {{17470320185821231916ull, 10595527770799681796ull, 6725689188563724484ull, 2644055389720735490ull}}, {{3391156158566988279ull, 13244409713499602246ull, 17630483522559431413ull, 3305069237150919362ull}}, {{13462317235063511156ull, 2720454086592339095ull, 12814732366344513459ull, 4131336546438649203ull}}, {{15331477299555776329ull, 17841184868616069598ull, 5703364719751626959ull, 2582085341524155752ull}}, {{9940974587589944603ull, 17689795067342699094ull, 7129205899689533699ull, 3227606676905194690ull}}, {{3202846197632654946ull, 17500557815750985964ull, 18134879411466692932ull, 4034508346131493362ull}}, {{11225150910375185149ull, 1714476597989590419ull, 15945985650594070987ull, 2521567716332183351ull}}, {{9419752619541593532ull, 15978153802769151736ull, 15320796044815200829ull, 3151959645415229189ull}}, {{11774690774426991915ull, 6137634198179275958ull, 5315937000736837325ull, 3939949556769036487ull}}, {{2747495715589482043ull, 6141864383075741426ull, 10239989653101605184ull, 2462468472980647804ull}}, {{12657741681341628362ull, 7677330478844676782ull, 12799987066377006480ull, 3078085591225809755ull}}, {{6598805064822259644ull, 9596663098555845978ull, 11388297814543870196ull, 3847606989032262194ull}}, {{8735939183941300182ull, 15221286473452179544ull, 11729372152517306776ull, 2404754368145163871ull}}, {{10919923979926625227ull, 579864018105672814ull, 10050029172219245567ull, 3005942960181454839ull}}, {{4426532938053505726ull, 14559888077914254730ull, 7950850446846669054ull, 3757428700226818549ull}}, {{7378269104710828983ull, 4488244030269021302ull, 7275124538492862111ull, 2348392937641761593ull}}, {{18446208417743312037ull, 998619019408888723ull, 13705591691543465543ull, 2935491172052201991ull}}, {{18446074503751752142ull, 15083331829543274616ull, 12520303596001944024ull, 3669363965065252489ull}}, {{4610849055980138561ull, 407420713219541655ull, 1815321439720266319ull, 4586704956331565612ull}}, {{9799309687628668457ull, 7172166973403295390ull, 10357947936679942257ull, 2866690597707228507ull}}, {{3025765072681059763ull, 13576894735181507142ull, 8335748902422539917ull, 3583363247134035634ull}}, {{13005578377706100511ull, 3136060363694720215ull, 1196314091173399089ull, 4479204058917544543ull}}, {{15046015513707394676ull, 13489252773377669894ull, 7665225334624456286ull, 2799502536823465339ull}}, {{9584147355279467537ull, 7638193929867311560ull, 4969845649853182454ull, 3499378171029331674ull}}, {{11980184194099334421ull, 324370375479363642ull, 15435679099171253876ull, 4374222713786664592ull}}, {{12099301139739471917ull, 9426103521529378084ull, 9647299436982033672ull, 2733889196116665370ull}}, {{15124126424674339896ull, 11782629401911722605ull, 2835752259372766282ull, 3417361495145831713ull}}, {{5070099975560761158ull, 5504914715534877449ull, 8156376342643345757ull, 4271701868932289641ull}}, {{14698027530793945484ull, 5746414706422992357ull, 16626950260220560858ull, 2669813668082681025ull}}, {{4537476358210268143ull, 16406390419883516255ull, 6948629769993537360ull, 3337267085103351282ull}}, {{1060159429335447274ull, 2061243951144843703ull, 17909159249346697509ull, 4171583856379189102ull}}, {{7580128670975736403ull, 3594120478679221266ull, 6581538512414298039ull, 2607239910236993189ull}}, {{251788801864894695ull, 18327708653631190295ull, 12838609158945260452ull, 3259049887796241486ull}}, {{14149794057613282081ull, 4462891743329436252ull, 6824889411826799758ull, 4073812359745301858ull}}, {{18066993322863077109ull, 16624365394863061369ull, 8877241900819137752ull, 2546132724840813661ull}}, {{8748683598296682674ull, 2333712669869275096ull, 15708238394451310095ull, 3182665906051017076ull}}, {{10935854497870853342ull, 16752198892618757582ull, 1188553919354586002ull, 3978332382563771346ull}}, {{2223223042741895435ull, 15081810326314111393ull, 5354532218024004155ull, 2486457739102357091ull}}, {{7390714821854757198ull, 14240576889465251337ull, 2081479254102617290ull, 3108072173877946364ull}}, {{13850079545745834401ull, 8577349074976788363ull, 2601849067628271613ull, 3885090217347432955ull}}, {{6350456706877452549ull, 7666686181074186679ull, 17767056731763527422ull, 2428181385842145596ull}}, {{3326384865169427782ull, 359985689487957541ull, 3762076840994857662ull, 3035226732302681996ull}}, {{8769667099889172631ull, 9673354148714722734ull, 4702596051243572077ull, 3794033415378352495ull}}, {{869355919003344991ull, 8351689352160395661ull, 9856651559668314404ull, 2371270884611470309ull}}, {{5698380917181569142ull, 10439611690200494576ull, 16932500468012780909ull, 2964088605764337886ull}}, {{7122976146476961428ull, 17661200631178006124ull, 11942253548161200328ull, 3705110757205422358ull}}, {{13675232128402876700ull, 11038250394486253827ull, 2852222449173362301ull, 2315694223253388974ull}}, {{12482354142076207971ull, 18409499011535205188ull, 12788650098321478684ull, 2894617779066736217ull}}, {{15602942677595259964ull, 4565129690709454869ull, 2150754567619684644ull, 3618272223833420272ull}}, {{5668620291711911243ull, 5706412113386818587ull, 2688443209524605805ull, 4522840279791775340ull}}, {{1237044673106250575ull, 5872350580080455569ull, 10903649042807654436ull, 2826775174869859587ull}}, {{6157991859810201123ull, 7340438225100569461ull, 9017875285082180141ull, 3533468968587324484ull}}, {{12309175843190139307ull, 13787233799803099730ull, 11272344106352725176ull, 4416836210734155605ull}}, {{12304920920421224971ull, 8617021124876937331ull, 9351058075684147187ull, 2760522631708847253ull}}, {{10769465132099143310ull, 6159590387668783760ull, 16300508613032571888ull, 3450653289636059066ull}}, {{13461831415123929137ull, 7699487984585979700ull, 11152263729435939052ull, 4313316612045073833ull}}, {{17637016671307231519ull, 14035552027221013120ull, 52635803256380051ull, 2695822882528171146ull}}, {{3599526765424487783ull, 12932754015598878497ull, 9289166790925250872ull, 3369778603160213932ull}}, {{9111094475207997632ull, 16165942519498598121ull, 11611458488656563590ull, 4212223253950267415ull}}, {{17223649093073468280ull, 5492028056259235921ull, 14174690583051434100ull, 2632639533718917134ull}}, {{7694503311059671638ull, 6865035070324044902ull, 8494991191959516817ull, 3290799417148646418ull}}, {{394757101969813740ull, 13192979856332444032ull, 1395366953094620213ull, 4113499271435808023ull}}, {{246723188731133588ull, 10551455419421471472ull, 7789633373325219489ull, 2570937044647380014ull}}, {{308403985913916984ull, 17801005292704227244ull, 513669679801748553ull, 3213671305809225018ull}}, {{385504982392396230ull, 8416198560598120343ull, 9865459136606961500ull, 4017089132261531272ull}}, {{7158469641636329500ull, 14483496137228601022ull, 6165911960379350937ull, 2510680707663457045ull}}, {{18171459088900187683ull, 4269312116253587565ull, 12319075968901576576ull, 3138350884579321306ull}}, {{8879265805843070892ull, 5336640145316984457ull, 6175472924272194912ull, 3922938605724151633ull}}, {{17078756174720389067ull, 3335400090823115285ull, 15388885623738591580ull, 2451836628577594770ull}}, {{7513387163118322622ull, 4169250113528894107ull, 10012734992818463667ull, 3064795785721993463ull}}, {{4780047935470515374ull, 599876623483729730ull, 7904232722595691680ull, 3830994732152491829ull}}, {{7599215978096460013ull, 374922889677331081ull, 7245988460836001252ull, 2394371707595307393ull}}, {{14110705991047962920ull, 468653612096663851ull, 13669171594472389469ull, 2992964634494134241ull}}, {{13026696470382565746ull, 5197503033548217718ull, 3251406437808323124ull, 3741205793117667802ull}}, {{3529999275561715687ull, 12471811432822411882ull, 6643815042057589856ull, 2338253620698542376ull}}, {{13635871131306920417ull, 15589764291028014852ull, 8304768802571987320ull, 2922817025873177970ull}}, {{17044838914133650521ull, 1040461290075466949ull, 1157588966360208343ull, 3653521282341472463ull}}, {{7470990587384899439ull, 15135634667876497399ull, 15282044263232424140ull, 4566901602926840578ull}}, {{11586898144756644006ull, 236399630568035066ull, 14162963682947652992ull, 2854313501829275361ull}}, {{5260250644091029199ull, 295499538210043833ull, 3868646548402402528ull, 3567891877286594202ull}}, {{11186999323541174402ull, 369374422762554791ull, 14059180222357778968ull, 4459864846608242752ull}}, {{13909403604854315858ull, 230859014226596744ull, 8786987638973611855ull, 2787415529130151720ull}}, {{17386754506067894822ull, 14123631823065409642ull, 10983734548717014818ull, 3484269411412689650ull}}, {{12510071095730092719ull, 8431167741976986245ull, 4506296149041492715ull, 4355336764265862063ull}}, {{10124637444045001902ull, 2963636829521922451ull, 9733964120792014803ull, 2722085477666163789ull}}, {{8044110786628864473ull, 17539604092184566776ull, 16779141169417406407ull, 3402606847082704736ull}}, {{10055138483286080591ull, 17312819096803320566ull, 2527182388062206393ull, 4253258558853380921ull}}, {{1672775533626412466ull, 3902982907860993498ull, 13108704038607348756ull, 2658286599283363075ull}}, {{11314341453887791390ull, 4878728634826241872ull, 11774194029831798041ull, 3322858249104203844ull}}, {{14142926817359739237ull, 10710096811960190244ull, 14717742537289747551ull, 4153572811380254805ull}}, {{18062701297704612832ull, 13611339535116200758ull, 11504432095019786171ull, 2595983007112659253ull}}, {{13355004585275990231ull, 12402488400467863044ull, 545482063492569002ull, 3244978758890824067ull}}, {{16693755731594987789ull, 6279738463730052997ull, 14516910634647874965ull, 4056223448613530083ull}}, {{12739440341460561320ull, 6230679549044977075ull, 6767226137441227901ull, 2535139655383456302ull}}, {{11312614408398313746ull, 12400035454733609248ull, 17682404708656310684ull, 3168924569229320377ull}}, {{14140768010497892183ull, 15500044318417011560ull, 8267947830538224643ull, 3961155711536650472ull}}, {{8837980006561182614ull, 7381684689796938273ull, 5167467394086390402ull, 2475722319710406545ull}}, {{15659161026628866172ull, 3733825391397033ull, 11071020261035375907ull, 3094652899638008181ull}}, {{5738893228003919003ull, 13839725337021410004ull, 3717271012056171ull, 3868316124547510227ull}}, {{12810180304357225185ull, 6343985326424687300ull, 16143224358878392771ull, 2417697577842193891ull}}, {{16012725380446531481ull, 3318295639603471221ull, 15567344430170603060ull, 3022121972302742364ull}}, {{6180848670276000639ull, 4147869549504339027ull, 1012436464003702209ull, 3777652465378427956ull}}, {{1557187409708806448ull, 14121633514508681652ull, 9856144826857089688ull, 2361032790861517472ull}}, {{1946484262136008059ull, 17652041893135852065ull, 12320181033571362110ull, 2951290988576896840ull}}, {{7044791346097397978ull, 12841680329565039273ull, 15400226291964202638ull, 3689113735721121050ull}}, {{13417675201049135377ull, 6828728375101523283ull, 10026910828100477490ull, 4611392169651401313ull}}, {{6080203991442015659ull, 8879641252865839956ull, 17796034313631268191ull, 2882120106032125820ull}}, {{7600254989302519573ull, 6487865547654912041ull, 3798298818329533623ull, 3602650132540157276ull}}, {{14112004755055537370ull, 3498145916141252147ull, 4747873522911917029ull, 4503312665675196595ull}}, {{6514159962696016905ull, 4492184206801976544ull, 661577942606254191ull, 2814570416046997872ull}}, {{8142699953370021131ull, 1003544240075082776ull, 826972428257817739ull, 3518213020058747340ull}}, {{10178374941712526413ull, 15089488355376017182ull, 1033715535322272173ull, 4397766275073434175ull}}, {{1749798320142941104ull, 11736773231323704691ull, 7563601237217501964ull, 2748603921920896359ull}}, {{16022305955460840092ull, 14670966539154630863ull, 4842815528094489551ull, 3435754902401120449ull}}, {{15416196425898662211ull, 13727022155515900675ull, 10665205428545499843ull, 4294693628001400561ull}}, {{7329279756972969930ull, 6273545837983743970ull, 18194968438909407162ull, 2684183517500875350ull}}, {{18384971733070988221ull, 17065304334334455770ull, 13520338511781983144ull, 3355229396876094188ull}}, {{13757842629483959468ull, 2884886344208518097ull, 16900423139727478931ull, 4194036746095117735ull}}, {{1681122615786392812ull, 17943955029626181475ull, 17480293489970756187ull, 2621272966309448584ull}}, {{15936461325015154726ull, 17818257768605338939ull, 3403622788753893618ull, 3276591207886810731ull}}, {{15308890637841555504ull, 13049450173901897866ull, 18089586541224530735ull, 4095739009858513413ull}}, {{14179742667078360094ull, 15073435386329768022ull, 13611834597479025661ull, 2559836881161570883ull}}, {{8501306296993174309ull, 5006736177630046316ull, 12403107228421394173ull, 3199796101451963604ull}}, {{10626632871241467887ull, 10870106240464945799ull, 15503884035526742716ull, 3999745126814954505ull}}, {{13559174572166999285ull, 16017188437145366932ull, 2772398494563132341ull, 2499840704259346566ull}}, {{16948968215208749107ull, 6186427491149544953ull, 12688870155058691235ull, 3124800880324183207ull}}, {{7351152213728772671ull, 3121348345509543288ull, 11249401675395976140ull, 3906001100405229009ull}}, {{4594470133580482920ull, 11174214752798240363ull, 113347019481403231ull, 2441250687753268131ull}}, {{1131401648548215745ull, 9356082422570412550ull, 13976741829633917751ull, 3051563359691585163ull}}, {{10637624097540045490ull, 7083417009785627783ull, 12859241268615009285ull, 3814454199614481454ull}}, {{13566044088603610287ull, 6732978640329711316ull, 3425339774456992899ull, 2384033874759050909ull}}, {{16957555110754512859ull, 3804537281984751241ull, 8893360736498629028ull, 2980042343448813636ull}}, {{7361885833160977361ull, 4755671602480939052ull, 11116700920623286285ull, 3725052929311017045ull}}, {{13824550682580386659ull, 5278137760764280859ull, 9253781084603247880ull, 2328158080819385653ull}}, {{12669002334798095420ull, 6597672200955351074ull, 16178912374181447754ull, 2910197601024232066ull}}, {{6612880881642843467ull, 17470462288048964651ull, 11000268430872033884ull, 3637747001280290083ull}}, {{3654415083626166429ull, 3391333786351654198ull, 9138649520162654452ull, 4547183751600362604ull}}, {{16119067482548517730ull, 11342955653324559681ull, 14935027986956434840ull, 2841989844750226627ull}}, {{6313776297903483451ull, 14178694566655699602ull, 14057098965268155646ull, 3552487305937783284ull}}, {{17115592409234130121ull, 8499996171464848694ull, 17571373706585194558ull, 4440609132422229105ull}}, {{6085559237343943422ull, 700811588738142530ull, 4064579538974664743ull, 2775380707763893191ull}}, {{16830321083534705085ull, 14711072541204841874ull, 469038405290943024ull, 3469225884704866489ull}}, {{11814529317563605549ull, 18388840676506052343ull, 5197984025041066684ull, 4336532355881083111ull}}, {{14301609851118335324ull, 2269653385961506906ull, 10166269043291748534ull, 2710332722425676944ull}}, {{8653640277043143347ull, 12060438769306659441ull, 12707836304114685667ull, 3387915903032096180ull}}, {{15428736364731317088ull, 10463862443205936397ull, 15884795380143357084ull, 4234894878790120225ull}}, {{11948803237170767132ull, 15763286063858486056ull, 3010468084948516321ull, 2646809299243825141ull}}, {{14936004046463458915ull, 5869049524540943858ull, 8374771124613033306ull, 3308511624054781426ull}}, {{9446633021224547835ull, 16559683942530955631ull, 1245091868911515824ull, 4135639530068476783ull}}, {{12821674665906424253ull, 10349802464081847269ull, 7695711445710779246ull, 2584774706292797989ull}}, {{2192035277100866605ull, 3713881043247533279ull, 14231325325565861962ull, 3230968382865997486ull}}, {{16575102151658246968ull, 13865723340914192406ull, 8565784620102551644ull, 4038710478582496858ull}}, {{5747752826359016451ull, 17889449124926146062ull, 9965301405991482681ull, 2524194049114060536ull}}, {{16408063069803546371ull, 8526753350875518865ull, 12456626757489353352ull, 3155242561392575670ull}}, {{6675020781972269252ull, 10658441688594398582ull, 6347411410006915882ull, 3944053201740719588ull}}, {{18006946044014831995ull, 11273212073798887017ull, 13190504168109098234ull, 2465033251087949742ull}}, {{8673624499736376281ull, 4868143055393832964ull, 7264758173281596985ull, 3081291563859937178ull}}, {{10842030624670470352ull, 10696864837669679109ull, 18304319753456772039ull, 3851614454824921472ull}}, {{9082112149632737922ull, 13603069551184631299ull, 11440199845910482524ull, 2407259034265575920ull}}, {{6740954168613534498ull, 17003836938980789124ull, 14300249807388103155ull, 3009073792831969900ull}}, {{8426192710766918123ull, 16643110155298598501ull, 17875312259235128944ull, 3761342241039962375ull}}, {{7572213453443017779ull, 10401943847061624063ull, 18089599189663037446ull, 2350838900649976484ull}}, {{4853580798376384320ull, 3779057771972254271ull, 4165254913369245192ull, 2938548625812470606ull}}, {{1455289979543092495ull, 4723822214965317839ull, 14429940678566332298ull, 3673185782265588257ull}}, {{15654170529711029331ull, 15128149805561423106ull, 4202367792925751660ull, 4591482227831985322ull}}, {{14395542599496781236ull, 231721591621113633ull, 7238165889005982692ull, 2869676392394990826ull}}, {{4159370194088812833ull, 289651989526392042ull, 18271079398112254173ull, 3587095490493738532ull}}, {{14422584779465791849ull, 4973751005335377956ull, 4392105173930766100ull, 4483869363117173166ull}}, {{18237487524020895714ull, 12331966415189387030ull, 16580123788988892524ull, 2802418351948233228ull}}, {{13573487368171343834ull, 15414958018986733788ull, 2278410662526564039ull, 3503022939935291536ull}}, {{16966859210214179793ull, 14657011505306029331ull, 2848013328158205049ull, 4378778674919114420ull}}, {{8298443997170168419ull, 2243103163175186476ull, 11003380366953653964ull, 2736736671824446512ull}}, {{10373054996462710523ull, 2803878953968983095ull, 13754225458692067455ull, 3420920839780558140ull}}, {{8354632727151000250ull, 17339906747743392581ull, 17192781823365084318ull, 4276151049725697675ull}}, {{7527488463683069108ull, 6225755698912232459ull, 8439645630389483747ull, 2672594406078561047ull}}, {{4797674561176448481ull, 3170508605212902670ull, 5937871019559466780ull, 3340743007598201309ull}}, {{15220465238325336409ull, 3963135756516128337ull, 12034024792876721379ull, 4175928759497751636ull}}, {{2595261746312253400ull, 171116838608886259ull, 16744637532402726670ull, 2609955474686094772ull}}, {{17079135238172480462ull, 9437268085115883631ull, 2484052841793856721ull, 3262444343357618466ull}}, {{16737233029288212673ull, 16408271124822242443ull, 12328438089097096709ull, 4078055429197023082ull}}, {{8154927634091438969ull, 12561012462227595479ull, 12316959824113073347ull, 2548784643248139426ull}}, {{5581973524186910807ull, 11089579559357106445ull, 6172827743286565876ull, 3185980804060174283ull}}, {{11589152923661026413ull, 13861974449196383056ull, 3104348660680819441ull, 3982476005075217854ull}}, {{7243220577288141508ull, 1746205003106657554ull, 15775275968207675863ull, 2489047503172011158ull}}, {{18277397758464952693ull, 16017814309165485654ull, 10495722923404819020ull, 3111309378965013948ull}}, {{13623375161226415058ull, 1575523812747305452ull, 13119653654256023776ull, 3889136723706267435ull}}, {{17737981512621285220ull, 984702382967065907ull, 5893940524696320908ull, 2430710452316417147ull}}, {{17560790872349218620ull, 1230877978708832384ull, 2755739637443013231ull, 3038388065395521434ull}}, {{3504244516726971659ull, 15373655528668204193ull, 12668046583658542346ull, 3797985081744401792ull}}, {{13719367869022827047ull, 14220220723845015524ull, 7917529114786588966ull, 2373740676090251120ull}}, {{17149209836278533809ull, 8551903867951493597ull, 9896911393483236208ull, 2967175845112813900ull}}, {{7601454240066003549ull, 10689879834939366997ull, 12371139241854045260ull, 3708969806391017375ull}}, {{7056751909254946170ull, 15904546933691880181ull, 14649491053799860143ull, 2318106128994385859ull}}, {{13432625904996070617ull, 15268997648687462322ull, 13700177798822437275ull, 2897632661242982324ull}}, {{7567410344390312463ull, 14474561042431939999ull, 17125222248528046594ull, 3622040826553727905ull}}, {{4847576912060502675ull, 8869829266185149191ull, 7571469755377894531ull, 4527551033192159882ull}}, {{9947264597678896028ull, 3237800282152024292ull, 9343854615538571986ull, 2829719395745099926ull}}, {{12434080747098620035ull, 13270622389544806173ull, 2456446232568439174ull, 3537149244681374908ull}}, {{1707542878591111331ull, 7364905950076231909ull, 3070557790710548968ull, 4421436555851718635ull}}, {{3373057308333138534ull, 4603066218797644943ull, 18059999683689950769ull, 2763397847407324146ull}}, {{18051379690698586880ull, 10365518791924444082ull, 13351627567757662653ull, 3454247309259155183ull}}, {{13340852576518457791ull, 17568584508332943007ull, 12077848441269690412ull, 4317809136573943979ull}}, {{15255561887965117976ull, 1756993280853313571ull, 5242812266579862556ull, 2698630710358714987ull}}, {{14457766341529009566ull, 2196241601066641964ull, 1941829314797440291ull, 3373288387948393734ull}}, {{18072207926911261957ull, 16580360056615466167ull, 11650658680351576171ull, 4216610484935492167ull}}, {{18212658981960620579ull, 8056882026170972402ull, 14199190702860816963ull, 2635381553084682604ull}}, {{13542451690595999916ull, 5459416514286327599ull, 17748988378576021204ull, 3294226941355853255ull}}, {{12316378594817611991ull, 6824270642857909499ull, 17574549454792638601ull, 4117783676694816569ull}}, {{5391893612547313542ull, 15794384197854663197ull, 4066564381604317269ull, 2573614797934260356ull}}, {{11351553034111529832ull, 5907922192036165284ull, 5083205477005396587ull, 3217018497417825445ull}}, {{14189441292639412290ull, 2773216721617818701ull, 10965692864684133638ull, 4021273121772281806ull}}, {{11174243817113326633ull, 15568318506293300400ull, 2241872022000195619ull, 2513295701107676129ull}}, {{13967804771391658291ull, 14848712114439237596ull, 7414026045927632428ull, 3141619626384595161ull}}, {{17459755964239572864ull, 114146069339495379ull, 13879218575836928440ull, 3927024532980743951ull}}, {{8606504468436039088ull, 71341293337184612ull, 15592040637539162131ull, 2454390333112964969ull}}, {{10758130585545048860ull, 13924234671953644477ull, 5654992741641788951ull, 3067987916391206212ull}}, {{18059349250358698979ull, 12793607321514667692ull, 7068740927052236189ull, 3834984895489007765ull}}, {{2063721244619411054ull, 10301847585160361260ull, 6723806088621341570ull, 2396865559680629853ull}}, {{2579651555774263818ull, 3653937444595675767ull, 13016443629204064867ull, 2996081949600787316ull}}, {{17059622499999993484ull, 18402479861026758420ull, 16270554536505081083ull, 3745102437000984145ull}}, {{1438892025645220120ull, 9195706903928030061ull, 3251567557674593821ull, 2340689023125615091ull}}, {{6410301050483913053ull, 16106319648337425480ull, 17899517502375405988ull, 2925861278907018863ull}}, {{8012876313104891317ull, 1686155486712230234ull, 17762710859541869582ull, 3657326598633773579ull}}, {{792723354526338338ull, 11331066395245063601ull, 17591702555999949073ull, 4571658248292216974ull}}, {{12024667142647431221ull, 164387469387082894ull, 6383128079072580267ull, 2857286405182635609ull}}, {{5807461891454513218ull, 14040542392016017330ull, 12590596117268113237ull, 3571608006478294511ull}}, {{16482699401172917331ull, 3715619934737857950ull, 11126559128157753643ull, 4464510008097868139ull}}, {{5690001107305685428ull, 16419449997467267ull, 4648256445884902075ull, 2790318755061167587ull}}, {{2500815365704718881ull, 13855582367778997796ull, 1198634538928739689ull, 3487898443826459484ull}}, {{3126019207130898601ull, 3484419904441583533ull, 1498293173660924612ull, 4359873054783074355ull}}, {{4259605013670505578ull, 11401134477130765516ull, 17077334298033935546ull, 2724920659239421471ull}}, {{5324506267088131972ull, 5028046059558681087ull, 16734981854115031529ull, 3406150824049276839ull}}, {{2043946815432777061ull, 10896743592875739263ull, 16307041299216401507ull, 4257688530061596049ull}}, {{8194995787286567519ull, 4504621736333643087ull, 3274371784369169086ull, 2661055331288497531ull}}, {{5632058715680821495ull, 14854149207271829667ull, 17928022785743625069ull, 3326319164110621913ull}}, {{2428387376173638965ull, 4732628453807623372ull, 8574970426897367625ull, 4157898955138277392ull}}, {{10741114146963300161ull, 14487107829698234367ull, 5359356516810854765ull, 2598686846961423370ull}}, {{8814706665276737297ull, 4273826731840629247ull, 15922567682868344265ull, 3248358558701779212ull}}, {{6406697313168533717ull, 9953969433228174463ull, 1456465529875878715ull, 4060448198377224016ull}}, {{10921714848371415430ull, 3915387886553915087ull, 910290956172424197ull, 2537780123985765010ull}}, {{9040457542036881383ull, 9505920876619781763ull, 10361235732070306054ull, 3172225154982206262ull}}, {{6688885909118713824ull, 2659029058919951396ull, 3728172628233106760ull, 3965281443727757828ull}}, {{13403925730053971948ull, 1661893161824969622ull, 11553479929500467533ull, 2478300902329848642ull}}, {{7531535125712689127ull, 6689052470708599932ull, 5218477875020808608ull, 3097876127912310803ull}}, {{9414418907140861409ull, 8361315588385749915ull, 1911411325348622856ull, 3872345159890388504ull}}, {{3578168807749344429ull, 5225822242741093697ull, 1194632078342889285ull, 2420215724931492815ull}}, {{9084397028114068440ull, 11143963821853755025ull, 15328348153210775318ull, 3025269656164366018ull}}, {{15967182303569973454ull, 4706582740462417973ull, 9937063154658693340ull, 3781587070205457523ull}}, {{12285331948944927361ull, 12164986249643787041ull, 3904821462447989385ull, 2363491918878410952ull}}, {{1521606880898995489ull, 1371174756772570090ull, 4881026828059986732ull, 2954364898598013690ull}}, {{11125380637978520169ull, 1713968445965712612ull, 15324655571929759223ull, 3692956123247517112ull}}, {{16176734935591350914ull, 7988759306369652238ull, 9577909732456099514ull, 2308097577029698195ull}}, {{10997546632634412834ull, 762577096107289490ull, 7360701147142736489ull, 2885121971287122744ull}}, {{4523561253938240235ull, 5564907388561499767ull, 9200876433928420611ull, 3606402464108903430ull}}, {{1042765548995412389ull, 2344448217274486805ull, 2277723505555749956ull, 4508003080136129288ull}}, {{2957571477335826695ull, 10688652172651330061ull, 1423577190972343722ull, 2817501925085080805ull}}, {{8308650365097171273ull, 4137443178959386768ull, 6391157507142817557ull, 3521877406356351006ull}}, {{10385812956371464091ull, 9783489992126621364ull, 17212318920783297754ull, 4402346757945438757ull}}, {{15714505134586940865ull, 10726367263506526256ull, 13063542334703255048ull, 2751466723715899223ull}}, {{1196387344524124465ull, 13407959079383157821ull, 11717741899951680906ull, 3439333404644874029ull}}, {{6107170199082543486ull, 7536576812374171468ull, 812119319657437421ull, 4299166755806092537ull}}, {{13040353411281365487ull, 7016203516947551119ull, 12036789620854368148ull, 2686979222378807835ull}}, {{11688755745674318954ull, 8770254396184438899ull, 10434301007640572281ull, 3358724027973509794ull}}, {{9999258663665510789ull, 15574504013657936528ull, 3819504222695939543ull, 4198405034966887243ull}}, {{6249536664790944243ull, 16651594036177292186ull, 81347129971268262ull, 2624003146854304527ull}}, {{17035292867843456112ull, 11591120508366839424ull, 13936741967746249040ull, 3280003933567880658ull}}, {{2847372011094768524ull, 14488900635458549281ull, 8197555422828035492ull, 4100004916959850823ull}}, {{13308822553002700087ull, 18278934934016369108ull, 12041001166908604038ull, 2562503073099906764ull}}, {{16636028191253375109ull, 13625296630665685577ull, 15051251458635755048ull, 3203128841374883455ull}}, {{6959977183784555174ull, 17031620788332106972ull, 14202378304867305906ull, 4003911051718604319ull}}, {{13573357776720122792ull, 15256449011134954761ull, 15794015468183148047ull, 2502444407324127699ull}}, {{3131639165617989778ull, 14458875245491305548ull, 15130833316801547155ull, 3128055509155159624ull}}, {{3914548957022487222ull, 13461908038436744031ull, 466797572292382328ull, 3910069386443949531ull}}, {{9364122125780136370ull, 8413692524022965019ull, 16432649547178596619ull, 2443793366527468456ull}}, {{7093466638797782559ull, 5905429636601318370ull, 2094067860263694158ull, 3054741708159335571ull}}, {{18090205335352004006ull, 16605159082606423770ull, 16452642880611781409ull, 3818427135199169463ull}}, {{15918064353022390408ull, 3460695398987933000ull, 17200430828023445237ull, 2386516959499480914ull}}, {{1450836367568436394ull, 8937555267162304155ull, 12277166498174530738ull, 2983146199374351143ull}}, {{15648603514742709204ull, 1948572047098104385ull, 10734772104290775519ull, 3728932749217938929ull}}, {{2862848169073111397ull, 8135386557077397097ull, 18238447611250204459ull, 2330582968261211830ull}}, {{8190246229768777150ull, 5557547177919358467ull, 13574687477207979766ull, 2913228710326514788ull}}, {{5626121768783583533ull, 16170306009253973892ull, 16968359346509974707ull, 3641535887908143485ull}}, {{7032652210979479417ull, 15601196493140079461ull, 7375391127855304672ull, 4551919859885179357ull}}, {{6701250641075868588ull, 9750747808212549663ull, 6915462464123259372ull, 2844949912428237098ull}}, {{3764877282917447830ull, 12188434760265687079ull, 17867700117008850023ull, 3556187390535296372ull}}, {{94410585219421884ull, 10623857431904720945ull, 3887881072551510913ull, 4445234238169120466ull}}, {{11588221661830608438ull, 18169125941008920350ull, 7041611688772082224ull, 2778271398855700291ull}}, {{5261905040433484739ull, 4264663352551598822ull, 4190328592537714877ull, 3472839248569625364ull}}, {{15800753337396631731ull, 9942515209116886431ull, 5237910740672143596ull, 4341049060712031705ull}}, {{16792999863513976688ull, 15437444042552829827ull, 14802909258988559507ull, 2713155662945019815ull}}, {{16379563810965082956ull, 14685119034763649380ull, 13891950555308311480ull, 3391444578681274769ull}}, {{2027710689996802079ull, 18356398793454561726ull, 3529880138853225638ull, 4239305723351593462ull}}, {{15102377236530165012ull, 6861063227481713174ull, 16041233142065429736ull, 2649566077094745913ull}}, {{9654599508807930456ull, 8576329034352141468ull, 6216483372299623458ull, 3311957596368432392ull}}, {{12068249386009913070ull, 1497039256085401027ull, 7770604215374529323ull, 4139946995460540490ull}}, {{5236812857042501717ull, 17076550599549233306ull, 9468313653036468730ull, 2587466872162837806ull}}, {{15769388108157902954ull, 12122316212581765824ull, 2612020029440810105ull, 3234333590203547258ull}}, {{1264991061487827077ull, 1317837210445043569ull, 12488397073655788440ull, 4042916987754434072ull}}, {{12319834459498361683ull, 823648256528152230ull, 7805248171034867775ull, 2526823117346521295ull}}, {{6176421037518176296ull, 14864618375942354000ull, 5144874195366196814ull, 3158528896683151619ull}}, {{7720526296897720370ull, 9357400933073166692ull, 1819406725780358114ull, 3948161120853939524ull}}, {{14048700972415851039ull, 10460061601598117086ull, 10360501240467499629ull, 2467600700533712202ull}}, {{8337504178665037991ull, 17686763020425034262ull, 3727254513729598728ull, 3084500875667140253ull}}, {{1198508186476521681ull, 3661709701821741212ull, 9270754160589386315ull, 3855626094583925316ull}}, {{9972439653402601859ull, 18429469628134445921ull, 15017593387223142254ull, 2409766309114953322ull}}, {{17077235585180640227ull, 13813464998313281593ull, 9548619697174152010ull, 3012207886393691653ull}}, {{7511486426193636572ull, 8043459211036826184ull, 16547460639895077917ull, 3765259857992114566ull}}, {{4694679016371022858ull, 7333005016111710317ull, 5730476881507035794ull, 2353287411245071604ull}}, {{10480034788891166476ull, 18389628306994413704ull, 7163096101883794742ull, 2941609264056339505ull}}, {{13100043486113958095ull, 13763663346888241322ull, 13565556145782131332ull, 3677011580070424381ull}}, {{7151682320787671810ull, 17204579183610301653ull, 3121887126945500453ull, 4596264475088030477ull}}, {{6775644459705988834ull, 13058704998970132485ull, 4257022463554631735ull, 2872665296930019048ull}}, {{13081241593059873946ull, 11711695230285277702ull, 5321278079443289669ull, 3590831621162523810ull}}, {{7128179954470066624ull, 804560982574433416ull, 15874969636158887895ull, 4488539526453154762ull}}, {{4455112471543791640ull, 7420379641750102741ull, 14533542041026692838ull, 2805337204033221726ull}}, {{10180576607857127454ull, 52102515332852618ull, 8943555514428590240ull, 3506671505041527158ull}}, {{3502348722966633510ull, 65128144166065773ull, 1956072356180961992ull, 4383339381301908948ull}}, {{4494810961067839896ull, 40705090103791108ull, 10445917259467877053ull, 2739587113313693092ull}}, {{5618513701334799869ull, 4662567381057126789ull, 13057396574334846316ull, 3424483891642116365ull}}, {{11634828145095887741ull, 5828209226321408486ull, 2486687662636394183ull, 4280604864552645457ull}}, {{2660081572257541934ull, 10560159794091962160ull, 13083394835216216124ull, 2675378040345403410ull}}, {{3325101965321927418ull, 13200199742614952700ull, 7130871507165494347ull, 3344222550431754263ull}}, {{4156377456652409272ull, 11888563659841302971ull, 4301903365529480030ull, 4180278188039692829ull}}, {{291892901194061843ull, 2818666268973426453ull, 4994532612669618971ull, 2612673867524808018ull}}, {{4976552144919965208ull, 17358390891498946778ull, 15466537802691799521ull, 3265842334406010022ull}}, {{15444062218004732318ull, 7862930559091519760ull, 10109800216509973594ull, 4082302918007512528ull}}, {{9652538886252957699ull, 9526017617859587754ull, 6318625135318733496ull, 2551439323754695330ull}}, {{2842301570961421315ull, 11907522022324484693ull, 17121653456003192678ull, 3189299154693369162ull}}, {{8164562982129164548ull, 5661030491050830058ull, 12178694783149215040ull, 3986623943366711453ull}}, {{9714537882258115747ull, 3538144056906768786ull, 9917527248681953352ull, 2491639964604194658ull}}, {{2919800315967868875ull, 4422680071133460983ull, 3173537023997665882ull, 3114549955755243323ull}}, {{17484808450241999806ull, 14751722125771602036ull, 17801979335279246064ull, 3893187444694054153ull}}, {{1704633244546474071ull, 9219826328607251273ull, 4208708056908446934ull, 2433242152933783846ull}}, {{6742477574110480492ull, 2301410873904288283ull, 14484257107990334476ull, 3041552691167229807ull}}, {{3816410949210712711ull, 2876763592380360354ull, 13493635366560530191ull, 3801940863959037259ull}}, {{6996942861684083349ull, 8715506272878807077ull, 6127679094886637417ull, 2376213039974398287ull}}, {{13357864595532492090ull, 15506068859525896750ull, 3047912850180908867ull, 2970266299967997859ull}}, {{7473958707560839304ull, 14770900055979983034ull, 17644949118008299796ull, 3712832874959997323ull}}, {{9282910210652912469ull, 8440498132713588ull, 8722250189541493421ull, 2320520546849998327ull}}, {{11603637763316140587ull, 4622236641093279889ull, 6291126718499478872ull, 2900650683562497909ull}}, {{669489148863012021ull, 5777795801366599862ull, 12475594416551736494ull, 3625813354453122386ull}}, {{10060233472933540834ull, 16445616788563025635ull, 6371120983834894809ull, 4532266693066402983ull}}, {{3981802911369769070ull, 3360981465210809166ull, 10899479642537891112ull, 2832666683166501864ull}}, {{14200625676066987145ull, 4201226831513511457ull, 13624349553172363890ull, 3540833353958127330ull}}, {{3915724039801570219ull, 14474905576246665130ull, 7807064904610679054ull, 4426041692447659163ull}}, {{7059013543303369291ull, 4435129966726777802ull, 2573572556167980457ull, 2766276057779786977ull}}, {{18047138965983987422ull, 10155598476835860156ull, 7828651713637363475ull, 3457845072224733721ull}}, {{4112179633770432661ull, 8082812077617437292ull, 14397500660474092248ull, 4322306340280917151ull}}, {{11793484307961296221ull, 5051757548510898307ull, 15915966940437389511ull, 2701441462675573219ull}}, {{10130169366524232372ull, 1703010917211234980ull, 15283272657119348985ull, 3376801828344466524ull}}, {{12662711708155290465ull, 6740449664941431629ull, 657346747689634615ull, 4221002285430583156ull}}, {{10220037826810750493ull, 11130310068229476624ull, 9634213754160797442ull, 2638126428394114472ull}}, {{12775047283513438116ull, 4689515548432069972ull, 12042767192700996803ull, 3297658035492643090ull}}, {{15968809104391797645ull, 1250208417112699561ull, 5830086954021470196ull, 4122072544365803863ull}}, {{3062976662603791672ull, 10004752297550213034ull, 10561333373904500728ull, 2576295340228627414ull}}, {{13052092865109515398ull, 12505940371937766292ull, 3978294680525850102ull, 3220369175285784268ull}}, {{16315116081386894248ull, 6409053428067432057ull, 4972868350657312628ull, 4025461469107230335ull}}, {{3279418523225727049ull, 13229030429396920844ull, 10025571746801902248ull, 2515913418192018959ull}}, {{4099273154032158811ull, 16536288036746151055ull, 7920278665074989906ull, 3144891772740023699ull}}, {{512405424112810610ull, 11446988009077913011ull, 5288662312916349479ull, 3931114715925029624ull}}, {{16461154454566364295ull, 14071896533314777487ull, 3305413945572718424ull, 2456946697453143515ull}}, {{15964757049780567465ull, 17589870666643471859ull, 17966825487248061742ull, 3071183371816429393ull}}, {{15344260293798321427ull, 12763966296449564016ull, 8623473803777913466ull, 3838979214770536742ull}}, {{9590162683623950892ull, 12589164953708365414ull, 777985108933808012ull, 2399362009231585464ull}}, {{2764331317675162807ull, 15736456192135456768ull, 972481386167260015ull, 2999202511539481830ull}}, {{3455414147093953509ull, 15058884221741933056ull, 10438973769563850827ull, 3749003139424352287ull}}, {{2159633841933720943ull, 7105959629375014208ull, 13441887633618488623ull, 2343126962140220179ull}}, {{2699542302417151179ull, 4270763518291379856ull, 12190673523595722875ull, 2928908702675275224ull}}, {{3374427878021438973ull, 726768379436836916ull, 15238341904494653594ull, 3661135878344094030ull}}, {{4218034847526798717ull, 10131832511150821953ull, 9824555343763541184ull, 4576419847930117538ull}}, {{14165486825772718958ull, 6332395319469263720ull, 10752033108279601144ull, 2860262404956323461ull}}, {{17706858532215898698ull, 7915494149336579650ull, 18051727403776889334ull, 3575328006195404326ull}}, {{12910201128415097564ull, 670995649815948755ull, 13341287217866335860ull, 4469160007744255408ull}}, {{5763032696045742026ull, 9642744317989743780ull, 8338304511166459912ull, 2793225004840159630ull}}, {{7203790870057177532ull, 12053430397487179725ull, 1199508602103299082ull, 3491531256050199538ull}}, {{13616424605998859819ull, 5843415960004198848ull, 10722757789483899661ull, 4364414070062749422ull}}, {{8510265378749287387ull, 5957977984216318232ull, 2090037600000049384ull, 2727758793789218389ull}}, {{10637831723436609233ull, 7447472480270397790ull, 7224233018427449634ull, 3409698492236522986ull}}, {{4073917617440985734ull, 85968563483221430ull, 18253663309889087851ull, 4262123115295653732ull}}, {{16381256566182779796ull, 16194631416672871057ull, 2185167531825904098ull, 2663826947059783583ull}}, {{6641512652446311033ull, 11019917233986313014ull, 16566517470064543835ull, 3329783683824729478ull}}, {{17525262852412664599ull, 9163210524055503363ull, 11484774800725903986ull, 4162229604780911848ull}}, {{8647446273544221422ull, 10338692595962077506ull, 7177984250453689991ull, 2601393502988069905ull}}, {{1585935805075500970ull, 8311679726525208979ull, 13584166331494500393ull, 3251741878735087381ull}}, {{15817477811626539924ull, 15001285676583899127ull, 3145149859085961779ull, 4064677348418859227ull}}, {{16803452659907669309ull, 7069960538651243002ull, 18106619726424583776ull, 2540423342761787016ull}}, {{11780943788029810828ull, 8837450673314053753ull, 4186530584321178104ull, 3175529178452233771ull}}, {{891121679755099823ull, 11046813341642567192ull, 621477211974084726ull, 3969411473065292214ull}}, {{556951049846937389ull, 2292572320099216591ull, 14223481312765966666ull, 2480882170665807633ull}}, {{14531246867590835448ull, 12089087436978796546ull, 3944293585675294620ull, 3101102713332259542ull}}, {{8940686547633768502ull, 15111359296223495683ull, 14153739018948894083ull, 3876378391665324427ull}}, {{3282086083057411362ull, 7138756550925990850ull, 6540243877629364850ull, 2422736494790827767ull}}, {{13325979640676540011ull, 18146817725512264370ull, 3563618828609318158ull, 3028420618488534709ull}}, {{7434102513990899205ull, 13460150120035554655ull, 9066209554189035602ull, 3785525773110668386ull}}, {{11563843098885393859ull, 13024279843449609563ull, 10278066989795535155ull, 2365953608194167741ull}}, {{9843117855179354420ull, 11668663785884624050ull, 17459269755671806848ull, 2957442010242709676ull}}, {{3080525282119417217ull, 14585829732355780063ull, 3377343120880206944ull, 3696802512803387096ull}}, {{8842857328965717617ull, 9116143582722362539ull, 2110839450550129340ull, 2310501570502116935ull}}, {{6441885642779759117ull, 11395179478402953174ull, 16473607368469825387ull, 2888126963127646168ull}}, {{17275729090329474704ull, 9632288329576303563ull, 2145265136877730118ull, 3610158703909557711ull}}, {{16982975344484455476ull, 2816988375115603646ull, 16516639476379326360ull, 4512698379886947138ull}}, {{6002673571875396769ull, 1760617734447252279ull, 14934585691164466879ull, 2820436487429341961ull}}, {{2891655946416858057ull, 16035830223341229061ull, 4833174058673419886ull, 3525545609286677452ull}}, {{8226255951448460475ull, 10821415742321760518ull, 6041467573341774858ull, 4406932011608346815ull}}, {{529723951227899893ull, 11375070857378488228ull, 10693446260979691142ull, 2754332507255216759ull}}, {{662154939034874866ull, 4995466534868334477ull, 8755121807797226024ull, 3442915634069020949ull}}, {{5439379692220981486ull, 6244333168585418096ull, 15555588278173920434ull, 4303644542586276186ull}}, {{3399612307638113429ull, 8514394248793274214ull, 14333928692286088175ull, 2689777839116422616ull}}, {{13472887421402417594ull, 6031306792564204863ull, 17917410865357610219ull, 3362222298895528270ull}}, {{12229423258325634089ull, 2927447472277868175ull, 13173391544842236966ull, 4202777873619410338ull}}, {{14560918564094603162ull, 15664712725455831321ull, 12845055733953786007ull, 2626736171012131461ull}}, {{4366090149836090240ull, 14969204888392401248ull, 2221261612160068797ull, 3283420213765164327ull}}, {{5457612687295112800ull, 4876448055208337848ull, 16611635070482249709ull, 4104275267206455408ull}}, {{3411007929559445500ull, 5353623043718905107ull, 10382271919051406068ull, 2565172042004034630ull}}, {{18098817967231470587ull, 6692028804648631383ull, 3754467861959481777ull, 3206465052505043288ull}}, {{18011836440611950330ull, 12976722024238177133ull, 4693084827449352221ull, 4008081315631304110ull}}, {{13563240784596162908ull, 10416294274362554660ull, 16768236072438008850ull, 2505050822269565068ull}}, {{16954050980745203635ull, 3796995806098417517ull, 2513551016837959447ull, 3131313527836956336ull}}, {{7357505670649340832ull, 134558739195633993ull, 3141938771047449309ull, 3914141909796195420ull}}, {{16127656090224307780ull, 2389942221210965197ull, 11187083768759431626ull, 2446338693622622137ull}}, {{6324512057498221013ull, 12210799813368482305ull, 148796655667125820ull, 3057923367028277672ull}}, {{12517326090300164170ull, 15263499766710602881ull, 185995819583907275ull, 3822404208785347090ull}}, {{905799778796520750ull, 7233844344980432849ull, 4727933405667329951ull, 2389002630490841931ull}}, {{5743935741923038842ull, 4430619412798153157ull, 1298230738656774535ull, 2986253288113552414ull}}, {{11791605695831186456ull, 926588247570303542ull, 10846160460175743977ull, 3732816610141940517ull}}, {{2758067541467103631ull, 12108332700799909474ull, 9084693296823533937ull, 2333010381338712823ull}}, {{12670956463688655347ull, 1300357820717723130ull, 6744180602602029518ull, 2916262976673391029ull}}, {{6615323542756043376ull, 10848819312751929721ull, 13041911771679924801ull, 3645328720841738786ull}}, {{12880840446872442124ull, 18172710159367300055ull, 7079017677745130193ull, 4556660901052173483ull}}, {{14968054306936358183ull, 4440414821963480678ull, 2118543039377012419ull, 2847913063157608427ull}}, {{9486695846815671921ull, 938832509026962944ull, 16483236854503429236ull, 3559891328947010533ull}}, {{11858369808519589901ull, 1173540636283703680ull, 6768988012847122833ull, 4449864161183763167ull}}, {{7411481130324743689ull, 12262677943745784560ull, 11148146535670533626ull, 2781165100739851979ull}}, {{9264351412905929611ull, 6104975392827454892ull, 9323497151160779129ull, 3476456375924814974ull}}, {{11580439266132412013ull, 12242905259461706519ull, 2430999402096198103ull, 4345570469906018718ull}}, {{14155303568973839364ull, 14569344814804648430ull, 15354432681592287526ull, 2715981543691261698ull}}, {{8470757424362523397ull, 8988308981651034730ull, 9969668815135583600ull, 3394976929614077123ull}}, {{1365074743598378438ull, 11235386227063793413ull, 7850400000492091596ull, 4243721162017596404ull}}, {{3159014723962680476ull, 16245488428769646691ull, 14129872037162333055ull, 2652325726260997752ull}}, {{17783826460235514307ull, 15695174517534670459ull, 17662340046452916319ull, 3315407157826247190ull}}, {{17618097056867004980ull, 15007282128490950170ull, 12854553021211369591ull, 4144258947282808988ull}}, {{15622996678969266017ull, 16297080357947925712ull, 17257467675111881802ull, 2590161842051755617ull}}, {{1082001775002030905ull, 11147978410580131333ull, 7736776538607688541ull, 3237702302564694522ull}}, {{5964188237179926535ull, 99914957943000454ull, 447598636404834869ull, 4047127878205868153ull}}, {{17562675703519617796ull, 2368289857928069235ull, 11808964193821491553ull, 2529454923878667595ull}}, {{17341658610972134341ull, 7572048340837474448ull, 10149519223849476537ull, 3161818654848334494ull}}, {{3230329190005616311ull, 14076746444474230965ull, 3463526992957069863ull, 3952273318560418118ull}}, {{4324798752967204146ull, 15715495555437476209ull, 15999762425880332376ull, 2470170824100261323ull}}, {{10017684459636393087ull, 1197625370587293645ull, 15388017013923027567ull, 3087713530125326654ull}}, {{17133791592972879262ull, 15332089768516280768ull, 10011649230549008650ull, 3859641912656658318ull}}, {{10708619745608049539ull, 14194242123750063384ull, 1645594750665742502ull, 2412276195410411449ull}}, {{13385774682010061924ull, 8519430617832803422ull, 6668679456759566032ull, 3015345244263014311ull}}, {{7508846315657801597ull, 10649288272291004278ull, 3724163302522069636ull, 3769181555328767889ull}}, {{81342928858738094ull, 15879177207036653482ull, 13856817110144763282ull, 2355738472080479930ull}}, {{9325050697928198425ull, 10625599471941041044ull, 8097649350826178295ull, 2944673090100599913ull}}, {{11656313372410248032ull, 8670313321498913401ull, 14733747706960110773ull, 3680841362625749891ull}}, {{735333660230646327ull, 15449577670301029656ull, 13805498615272750562ull, 4601051703282187364ull}}, {{459583537644153955ull, 14267672062365531439ull, 17851808671400244909ull, 2875657314551367102ull}}, {{14409537477337356155ull, 3999532022674750586ull, 13091388802395530329ull, 3594571643189208878ull}}, {{8788549809816919386ull, 9611101046770826137ull, 7140863966139637103ull, 4493214553986511098ull}}, {{17022058677204044377ull, 12924467181872848191ull, 9074725997264661093ull, 2808259096241569436ull}}, {{16665887328077667567ull, 2320525922058896527ull, 11343407496580826367ull, 3510323870301961795ull}}, {{16220673141669696554ull, 16735715457855784371ull, 9567573352298645054ull, 4387904837877452244ull}}, {{7832077704329866394ull, 5848136142732477328ull, 15203105382041428967ull, 2742440523673407652ull}}, {{9790097130412332993ull, 2698484159988208756ull, 557137653842234593ull, 3428050654591759566ull}}, {{12237621413015416241ull, 7984791218412648849ull, 9919794104157569049ull, 4285063318239699457ull}}, {{730984355493553295ull, 16519709557576375291ull, 17729086361166950415ull, 2678164573899812160ull}}, {{14748788499649105330ull, 16037950928543081209ull, 3714613877749136403ull, 3347705717374765201ull}}, {{4600927569279217951ull, 15435752642251463608ull, 9254953365613808408ull, 4184632146718456501ull}}, {{2875579730799511220ull, 9647345401407164755ull, 8090188862722324207ull, 2615395091699035313ull}}, {{17429532718781552736ull, 7447495733331568039ull, 14724422096830293163ull, 3269243864623794141ull}}, {{17175229880049553016ull, 4697683648237072145ull, 4570469565755702742ull, 4086554830779742677ull}}, {{3816989647389888779ull, 16771110335430333803ull, 5162386487811008165ull, 2554096769237339173ull}}, {{159551040809973070ull, 7128829864005753542ull, 11064669128191148111ull, 3192620961546673966ull}}, {{9422810837867242145ull, 4299351311579804023ull, 4607464373384159331ull, 3990776201933342458ull}}, {{12806785801308108197ull, 381251560523683562ull, 7491351251792487486ull, 2494235126208339036ull}}, {{6785110214780359438ull, 9699936487509380261ull, 9364189064740609357ull, 3117793907760423795ull}}, {{13093073786902837202ull, 16736606627814113230ull, 7093550312498373792ull, 3897242384700529744ull}}, {{3571485098386885347ull, 10460379142383820769ull, 4433468945311483620ull, 2435776490437831090ull}}, {{9076042391410994588ull, 13075473927979775961ull, 14765208218494130333ull, 3044720613047288862ull}}, {{15956739007691131139ull, 2509284354692556239ull, 9233138236262887109ull, 3805900766309111078ull}}, {{16890490907448038818ull, 3874145730896541601ull, 1159025379236916539ull, 2378687978943194424ull}}, {{7278055579027884810ull, 230996145193289098ull, 1448781724046145674ull, 2973359973678993030ull}}, {{18320941510639631821ull, 9512117218346387180ull, 11034349191912457900ull, 3716699967098741287ull}}, {{2227216407294994080ull, 15168445298321267796ull, 13813997272586368043ull, 2322937479436713304ull}}, {{2784020509118742600ull, 14348870604474196841ull, 17267496590732960054ull, 2903671849295891630ull}}, {{8091711654825816154ull, 8712716218737970243ull, 12360998701561424260ull, 3629589811619864538ull}}, {{5502953550104882288ull, 10890895273422462804ull, 6227876340097004517ull, 4536987264524830673ull}}, {{12662718005670327238ull, 9112652555102733204ull, 15421637758629097583ull, 2835617040328019170ull}}, {{15828397507087909048ull, 6779129675451028601ull, 10053675161431596171ull, 3544521300410023963ull}}, {{5950438828577722598ull, 3862226075886397848ull, 7955407933362107310ull, 4430651625512529954ull}}, {{3719024267861076624ull, 16248949352711162367ull, 9583815976778704972ull, 2769157265945331221ull}}, {{37094316398957876ull, 1864442617179401343ull, 16591455989400769120ull, 3461446582431664026ull}}, {{13881425950780861056ull, 2330553271474251678ull, 11515947949896185592ull, 4326808228039580033ull}}, {{4064205200810650256ull, 1456595794671407299ull, 279938441044034139ull, 2704255142524737521ull}}, {{468570482585924916ull, 15655802798621422836ull, 4961609069732430577ull, 3380318928155921901ull}}, {{585713103232406145ull, 5734695442994614833ull, 10813697355592926126ull, 4225398660194902376ull}}, {{11895285735588723601ull, 17419242707153797982ull, 6758560847245578828ull, 2640874162621813985ull}}, {{5645735132631128693ull, 3327309310232695862ull, 13059887077484361440ull, 3301092703277267481ull}}, {{16280540952643686674ull, 4159136637790869827ull, 2489800791573288088ull, 4126365879096584352ull}}, {{7869495086188610220ull, 2599460398619293642ull, 1556125494733305055ull, 2578978674435365220ull}}, {{613496820880986966ull, 17084383553556280765ull, 1945156868416631318ull, 3223723343044206525ull}}, {{5378557044528621612ull, 12132107405090575148ull, 7043132103948177052ull, 4029654178805258156ull}}, {{12584970189685164316ull, 16805939165036385275ull, 13625329601822386465ull, 2518533861753286347ull}}, {{11119526718679067490ull, 7172365901013317882ull, 12419975983850595178ull, 3148167327191607934ull}}, {{4676036361494058555ull, 18188829413121423161ull, 6301597942958468164ull, 3935209158989509918ull}}, {{14451737772002256357ull, 2144646346346113667ull, 17773556769631206315ull, 2459505724368443698ull}}, {{13452986196575432542ull, 16515865988214805796ull, 12993573925184232085ull, 3074382155460554623ull}}, {{16816232745719290677ull, 6809774429986343533ull, 11630281388052902203ull, 3842977694325693279ull}}, {{12815988475288250626ull, 1950266009527770756ull, 14186454895174145733ull, 2401861058953558299ull}}, {{16019985594110313282ull, 7049518530337101349ull, 13121382600540294262ull, 3002326323691947874ull}}, {{6189923937355727890ull, 18035270199776152495ull, 7178356213820592019ull, 3752907904614934843ull}}, {{10786231488488411788ull, 8966200865646401357ull, 2180629624424176060ull, 2345567440384334277ull}}, {{18094475379037902638ull, 11207751082058001696ull, 7337473048957607979ull, 2931959300480417846ull}}, {{4171350150087826682ull, 9398002834145114217ull, 18395213348051785782ull, 3664949125600522307ull}}, {{9825873706037171256ull, 2524131505826616963ull, 18382330666637344324ull, 4581186407000652884ull}}, {{3835328057059538083ull, 10800954227996411410ull, 2265584629793564394ull, 2863241504375408053ull}}, {{14017532108179198412ull, 4277820748140738454ull, 7443666805669343397ull, 3579051880469260066ull}}, {{8298543098369222207ull, 9958961953603310972ull, 81211470231903438ull, 4473814850586575083ull}}, {{14409961473335539687ull, 1612665202574681453ull, 16191658233390797313ull, 2796134281616609426ull}}, {{4177393786387260897ull, 6627517521645739721ull, 11016200754883720833ull, 3495167852020761783ull}}, {{9833428251411464025ull, 12896082920484562555ull, 9158564925177263137ull, 4368959815025952229ull}}, {{3840049647918471064ull, 1142522797661769741ull, 8029946087449483413ull, 2730599884391220143ull}}, {{9411748078325476734ull, 6039839515504600080ull, 5425746590884466362ull, 3413249855489025179ull}}, {{11764685097906845917ull, 16773171431235525908ull, 2170497220178195048ull, 4266562319361281474ull}}, {{16576300223046554506ull, 10483232144522203692ull, 5968246781038759809ull, 2666601449600800921ull}}, {{2273631205098641517ull, 17715726199080142520ull, 12071994494725837665ull, 3333251812001001151ull}}, {{2842039006373301896ull, 8309599693568014438ull, 10478307099979909178ull, 4166564765001251439ull}}, {{15611332434265477397ull, 9805185826907396927ull, 13466470965128525092ull, 2604102978125782149ull}}, {{14902479524404458842ull, 12256482283634246159ull, 2998030651128492653ull, 3255128722657227687ull}}, {{14016413387078185649ull, 1485544799260643987ull, 17582596369192779529ull, 4068910903321534608ull}}, {{6454415357710172079ull, 12457680545606372252ull, 10989122730745487205ull, 2543069314575959130ull}}, {{8068019197137715098ull, 1737042626725801603ull, 4513031376577083199ull, 3178836643219948913ull}}, {{5473337977994755969ull, 16006361338689415716ull, 10252975239148741902ull, 3973545804024936141ull}}, {{12644208273101498289ull, 5392289818253496918ull, 8713952533681657641ull, 2483466127515585088ull}}, {{6581888304522097053ull, 11352048291244259052ull, 10892440667102072051ull, 3104332659394481360ull}}, {{8227360380652621316ull, 9578374345627935911ull, 13615550833877590064ull, 3880415824243101700ull}}, {{12059629265548970179ull, 5986483966017459944ull, 17733091308028269598ull, 2425259890151938562ull}}, {{15074536581936212723ull, 16706476994376600738ull, 12942992098180561189ull, 3031574862689923203ull}}, {{9619798690565490096ull, 7048038187688587211ull, 11567054104298313583ull, 3789468578362404004ull}}, {{3706531172389737358ull, 11322552894946448863ull, 16452780852041221797ull, 2368417861476502502ull}}, {{21477947059783793ull, 318133063400897367ull, 11342604028196751439ull, 2960522326845628128ull}}, {{13861905489106893454ull, 14232724384533285420ull, 14178255035245939298ull, 3700652908557035160ull}}, {{17887062967546584217ull, 13507138758760691291ull, 8861409397028712061ull, 2312908067848146975ull}}, {{17747142691005842367ull, 3048865393168700402ull, 6465075727858502173ull, 2891135084810183719ull}}, {{12960556326902527150ull, 8422767759888263407ull, 3469658641395739812ull, 3613918856012729649ull}}, {{11589009390200771034ull, 10528459699860329259ull, 8948759320172062669ull, 4517398570015912061ull}}, {{4937287859661787944ull, 8886130321626399739ull, 7898817584321233120ull, 2823374106259945038ull}}, {{1559923806149847026ull, 11107662902032999674ull, 650149943546765592ull, 3529217632824931298ull}}, {{11173276794542084591ull, 13884578627541249592ull, 10036059466288232798ull, 4411522041031164122ull}}, {{6983297996588802869ull, 4066175623785893091ull, 10884223184857533403ull, 2757201275644477576ull}}, {{4117436477308615683ull, 471033511304978460ull, 13605278981071916754ull, 3446501594555596970ull}}, {{5146795596635769603ull, 9812163925985998883ull, 7783226689485120134ull, 4308126993194496213ull}}, {{910904238683662050ull, 1520916435313861398ull, 7170359690141894036ull, 2692579370746560133ull}}, {{10362002335209353370ull, 1901145544142326747ull, 13574635631104755449ull, 3365724213433200166ull}}, {{8340816900584303809ull, 6988117948605296338ull, 7744922502026168503ull, 4207155266791500208ull}}, {{9824696581292577785ull, 11285102745519392067ull, 4840576563766355314ull, 2629472041744687630ull}}, {{7669184708188334327ull, 4883006395044464276ull, 15274092741562719951ull, 3286840052180859537ull}}, {{9586480885235417908ull, 1492071975378192441ull, 5257557871671236227ull, 4108550065226074422ull}}, {{17520765599340605953ull, 17073446049107227939ull, 17121031725076686353ull, 2567843790766296513ull}}, {{17289270980748369537ull, 7506749506101871212ull, 7566231601063694230ull, 3209804738457870642ull}}, {{3164844652225910305ull, 160064845772563208ull, 234417464474841980ull, 4012255923072338303ull}}, {{1978027907641193941ull, 9323412565462627813ull, 7064039942937858093ull, 2507659951920211439ull}}, {{7084220902978880330ull, 16265951725255672670ull, 4218363910244934712ull, 3134574939900264299ull}}, {{18078648165578376220ull, 1885695582860039221ull, 661268869378780487ull, 3918218674875330374ull}}, {{13604998112700179090ull, 8096088766928606369ull, 14248351098643901516ull, 2448886671797081483ull}}, {{3171189585593060150ull, 10120110958660757962ull, 13198752854877488991ull, 3061108339746351854ull}}, {{13187359018846100996ull, 8038452679898559548ull, 7275069031742085431ull, 3826385424682939818ull}}, {{17465471423633588931ull, 11941561952577681573ull, 9158604163266191298ull, 2391490890426837386ull}}, {{7996781224259822451ull, 5703580403867326159ull, 2224883167227963315ull, 2989363613033546733ull}}, {{5384290511897390160ull, 2517789486406769795ull, 7392789977462342048ull, 3736704516291933416ull}}, {{1059338560722174898ull, 1573618429004231122ull, 4620493735913963780ull, 2335440322682458385ull}}, {{10547545237757494430ull, 1967023036255288902ull, 10387303188319842629ull, 2919300403353072981ull}}, {{3961059510342092230ull, 7070464813746499032ull, 17595815003827191190ull, 3649125504191341226ull}}, {{4951324387927615287ull, 18061453054037899598ull, 12771396717929213179ull, 4561406880239176533ull}}, {{16929635797736923267ull, 8982565149559993296ull, 10287965957919452189ull, 2850879300149485333ull}}, {{2715300673461602467ull, 15839892455377379525ull, 17471643465826703140ull, 3563599125186856666ull}}, {{8005811860254390988ull, 1353121495512172790ull, 12616182295428603118ull, 4454498906483570833ull}}, {{391946394231606464ull, 14680758989977271706ull, 967584907001795092ull, 2784061816552231771ull}}, {{9713305029644283887ull, 18350948737471589632ull, 15044539189034407577ull, 3480077270690289713ull}}, {{12141631287055354859ull, 9103627866557323328ull, 4970615931010845760ull, 4350096588362862142ull}}, {{7588519554409596787ull, 5689767416598327080ull, 16941693012163942312ull, 2718810367726788838ull}}, {{9485649443011995984ull, 7112209270747908850ull, 11953744228350152082ull, 3398512959658486048ull}}, {{2633689766910219172ull, 18113633625289661871ull, 14942180285437690102ull, 4248141199573107560ull}}, {{8563585131959968839ull, 6709334997378650765ull, 9338862678398556314ull, 2655088249733192225ull}}, {{15316167433377348952ull, 17610040783578089264ull, 16285264366425583296ull, 3318860312166490281ull}}, {{698465218012134574ull, 3565806905763059965ull, 6521522402749815409ull, 4148575390208112852ull}}, {{2742383770471278061ull, 13757844362170382238ull, 13299323538573410438ull, 2592859618880070532ull}}, {{12651351749943873384ull, 7973933415858201989ull, 16624154423216763048ull, 3241074523600088165ull}}, {{1979131632147678018ull, 9967416769822752487ull, 6945134973738790098ull, 4051343154500110207ull}}, {{8154486297733380617ull, 10841321499566608208ull, 11258238386227825667ull, 2532089471562568879ull}}, {{10193107872166725772ull, 8939965856030872356ull, 9461111964357394180ull, 3165111839453211099ull}}, {{12741384840208407214ull, 11174957320038590445ull, 7214703937019354821ull, 3956389799316513874ull}}, {{10269208534343948461ull, 9290191334237812980ull, 9120875979064484667ull, 2472743624572821171ull}}, {{12836510667929935576ull, 7001053149369878321ull, 6789408955403217930ull, 3090929530716026464ull}}, {{2210580279630255758ull, 17974688473567123710ull, 8486761194254022412ull, 3863661913395033080ull}}, {{15216670730051073561ull, 2010808259124676510ull, 5304225746408764008ull, 2414788695871895675ull}}, {{9797466375709066143ull, 2513510323905845638ull, 2018596164583567106ull, 3018485869839869594ull}}, {{3023460932781556871ull, 12365259941737082856ull, 11746617242584234690ull, 3773107337299836992ull}}, {{1889663082988473044ull, 12339973482013064689ull, 7341635776615146681ull, 2358192085812398120ull}}, {{6973764872162979209ull, 1589908797234167149ull, 9177044720768933352ull, 2947740107265497650ull}}, {{13328892108631111916ull, 1987385996542708936ull, 2247933864106390882ull, 3684675134081872063ull}}, {{16661115135788889895ull, 11707604532533161978ull, 16644975385415152314ull, 4605843917602340078ull}}, {{15024882978295444088ull, 11928938851260614140ull, 5791423597457082292ull, 2878652448501462549ull}}, {{334359649159753494ull, 14911173564075767676ull, 11850965515248740769ull, 3598315560626828186ull}}, {{417949561449691868ull, 4803908899812545883ull, 5590334857206150154ull, 4497894450783535233ull}}, {{16402119540401915081ull, 7614129080810229080ull, 15023174331822313606ull, 2811184031739709520ull}}, {{2055905351792842236ull, 294289314158010543ull, 332223841068340392ull, 3513980039674636901ull}}, {{16404939745023216507ull, 367861642697513178ull, 5026965819762813394ull, 4392475049593296126ull}}, {{14864773359066898221ull, 4841599545113333640ull, 16976911692633922083ull, 2745296905995810078ull}}, {{134222625124071160ull, 1440313412964279147ull, 11997767578937626796ull, 3431621132494762598ull}}, {{14002836336687252662ull, 1800391766205348933ull, 5773837436817257687ull, 4289526415618453248ull}}, {{11057615719643226866ull, 8042773881519424939ull, 3608648398010786054ull, 2680954009761533280ull}}, {{9210333631126645678ull, 830095315044505366ull, 4510810497513482568ull, 3351192512201916600ull}}, {{2289545002053531289ull, 1037619143805631708ull, 5638513121891853210ull, 4188990640252395750ull}}, {{10654337663138232864ull, 5260197983305907721ull, 17359128756464571968ull, 2618119150157747343ull}}, {{17929608097350178984ull, 6575247479132384651ull, 17087224927153327056ull, 3272648937697184179ull}}, {{17800324103260335826ull, 8219059348915480814ull, 16747345140514270916ull, 4090811172121480224ull}}, {{6513516546110321987ull, 14360284129926951317ull, 10467090712821419322ull, 2556756982575925140ull}}, {{12753581701065290388ull, 8726983125553913338ull, 13083863391026774153ull, 3195946228219906425ull}}, {{6718605089476837177ull, 15520414925369779577ull, 2519771183501303979ull, 3994932785274883032ull}}, {{15728343226991492996ull, 7394416319142418283ull, 1574856989688314987ull, 2496832990796801895ull}}, {{15048743015311978341ull, 4631334380500634950ull, 15803629292392557446ull, 3121041238496002368ull}}, {{9587556732285197118ull, 15012540012480569496ull, 1307792541781145191ull, 3901301548120002961ull}}, {{5992222957678248199ull, 16300366535441437791ull, 12346585384681685504ull, 2438313467575001850ull}}, {{2878592678670422344ull, 1928714095592245623ull, 6209859693997331073ull, 3047891834468752313ull}}, {{17433298903620191642ull, 7022578637917694932ull, 12374010635924051745ull, 3809864793085940391ull}}, {{1672439777907843969ull, 15918326694767029093ull, 14651285675093614196ull, 2381165495678712744ull}}, {{6702235740812192865ull, 1451164294749234750ull, 18314107093867017746ull, 2976456869598390930ull}}, {{17601166712870016889ull, 11037327405291319245ull, 13669261830478996374ull, 3720571086997988663ull}}, {{13306572204757454508ull, 2286643609879686624ull, 15460817671690454590ull, 2325356929373742914ull}}, {{16633215255946818134ull, 12081676549204384088ull, 10102650052758292429ull, 2906696161717178643ull}}, {{2344774996223971052ull, 1267037631223316399ull, 8016626547520477633ull, 3633370202146473304ull}}, {{16766026800562127527ull, 6195483057456533402ull, 10020783184400597041ull, 4541712752683091630ull}}, {{15090452768778717608ull, 15401391956978803136ull, 1651303471822985246ull, 2838570470426932269ull}}, {{416321887263845394ull, 10028367909368728113ull, 6675815358206119462ull, 3548213088033665336ull}}, {{5132088377507194647ull, 3312087849856134333ull, 8344769197757649328ull, 4435266360042081670ull}}, {{5513398245155690606ull, 2070054906160083958ull, 603794730171142926ull, 2772041475026301044ull}}, {{16115119843299389066ull, 11810940669554880755ull, 754743412713928657ull, 3465051843782876305ull}}, {{15532213785696848428ull, 928617781661437232ull, 5555115284319798726ull, 4331314804728595381ull}}, {{9707633616060530268ull, 14415444168820561982ull, 5777790061913568155ull, 2707071752955372113ull}}, {{2911169983220887027ull, 13407619192598314574ull, 11833923595819348098ull, 3383839691194215141ull}}, {{12862334515880884591ull, 7536151953893117409ull, 957346439492021411ull, 4229799613992768927ull}}, {{1121430044784471014ull, 2404251961969504429ull, 7515870552323595238ull, 2643624758745480579ull}}, {{6013473574407976671ull, 12228686989316656344ull, 4783152171977106143ull, 3304530948431850724ull}}, {{7516841968009970839ull, 10674172718218432526ull, 5978940214971382679ull, 4130663685539813405ull}}, {{86340211578843870ull, 13588886976527602185ull, 6042680643570808126ull, 2581664803462383378ull}}, {{4719611282900942742ull, 7762736683804726923ull, 16776722841318285966ull, 3227081004327979222ull}}, {{1287828085198790523ull, 480048817901132846ull, 11747531514793081650ull, 4033851255409974028ull}}, {{14639950608531407789ull, 4911716529615595932ull, 16565579233600451839ull, 2521157034631233767ull}}, {{18299938260664259736ull, 1527959643592107011ull, 16095288023573176895ull, 3151446293289042209ull}}, {{18263236807402936766ull, 15745007609772297476ull, 6284051974184307406ull, 3939307866611302762ull}}, {{2191150967772059671ull, 5228943737680298019ull, 8539218502292580033ull, 2462067416632064226ull}}, {{16573996764997238301ull, 11147865690527760427ull, 1450651091010949233ull, 3077584270790080283ull}}, {{16105809937819159972ull, 99774057877536822ull, 15648371919045850254ull, 3846980338487600353ull}}, {{5454445192709587079ull, 13897416841455624226ull, 2862703421762574552ull, 2404362711554750221ull}}, {{16041428527741759656ull, 17371771051819530282ull, 8190065295630606094ull, 3005453389443437776ull}}, {{10828413622822423762ull, 12491341777919637045ull, 10237581619538257618ull, 3756816736804297220ull}}, {{9073601523477708803ull, 12418774629627161057ull, 15621860549066186819ull, 2348010460502685762ull}}, {{15953687922774523908ull, 10911782268606563417ull, 10303953649477957716ull, 2935013075628357203ull}}, {{6107051848185991173ull, 13639727835758204272ull, 8268256043420059241ull, 3668766344535446504ull}}, {{7633814810232488966ull, 3214601739415591628ull, 10335320054275074052ull, 4585957930669308130ull}}, {{13994506293250081412ull, 11232498123989520575ull, 11071261052349309186ull, 2866223706668317581ull}}, {{12881446848135213861ull, 4817250618132124911ull, 4018260154472771ull, 3582779633335396977ull}}, {{11490122541741629422ull, 1409877254237768235ull, 4616708843620478868ull, 4478474541669246221ull}}, {{4875483579374824437ull, 10104545320753380955ull, 5191286036476493244ull, 2799046588543278888ull}}, {{1482668455791142642ull, 12630681650941726194ull, 6489107545595616555ull, 3498808235679098610ull}}, {{11076707606593704110ull, 11176666045249769838ull, 17334756468849296502ull, 4373510294598873262ull}}, {{2311256235693677165ull, 2373730259853718245ull, 6222536774603422410ull, 2733443934124295789ull}}, {{7500756313044484360ull, 12190534861671923614ull, 12389856986681665916ull, 3416804917655369736ull}}, {{152573354450829642ull, 15238168577089904518ull, 15487321233352082395ull, 4271006147069212170ull}}, {{13930416401813932239ull, 7218012351467496371ull, 14291261789272439401ull, 2669378841918257606ull}}, {{12801334483840027394ull, 13634201457761758368ull, 8640705199735773443ull, 3336723552397822008ull}}, {{16001668104800034243ull, 12431065803774810056ull, 10800881499669716804ull, 4170904440497277510ull}}, {{10001042565500021402ull, 16992788164214032093ull, 2138864918866185098ull, 2606815275310798444ull}}, {{17112989225302414656ull, 12017613168412764308ull, 2673581148582731373ull, 3258519094138498055ull}}, {{2944492457918466704ull, 1186958405233791674ull, 17177034491010577929ull, 4073148867673122568ull}}, {{6451993804626429594ull, 12271064049339589556ull, 10735646556881611205ull, 2545718042295701605ull}}, {{8064992255783036993ull, 1503772006392323233ull, 18031244214529401911ull, 3182147552869627006ull}}, {{14692926338156184145ull, 15714773063272567753ull, 13315683231306976580ull, 3977684441087033758ull}}, {{2265549933706533235ull, 598361127690579038ull, 3710616001139472459ull, 2486052775679396099ull}}, {{12055309453987942351ull, 14583009464895387509ull, 26583982996952669ull, 3107565969599245124ull}}, {{1234078762202764227ull, 4393703775837070675ull, 33229978746190837ull, 3884457461999056405ull}}, {{16912200290872585306ull, 5051907869111863123ull, 2326611745930063225ull, 2427785913749410253ull}}, {{16528564345163343728ull, 10926570854817216808ull, 7519950700839966935ull, 3034732392186762816ull}}, {{2213961357744628044ull, 9046527550094133107ull, 9399938376049958669ull, 3793415490233453520ull}}, {{17524626913086250192ull, 7959922728022527143ull, 5874961485031224168ull, 2370884681395908450ull}}, {{17294097622930424836ull, 9949903410028158929ull, 16567073893143806018ull, 2963605851744885562ull}}, {{7782563973380867332ull, 3214007225680422854ull, 11485470329574981715ull, 3704507314681106953ull}}, {{252416464935654179ull, 18149655580546121948ull, 260889928343281715ull, 2315317071675691846ull}}, {{315520581169567724ull, 18075383457255264531ull, 9549484447283877952ull, 2894146339594614807ull}}, {{14229458781744123366ull, 4147485247859529047ull, 7325169540677459537ull, 3617682924493268509ull}}, {{13175137458752766304ull, 9796042578251799213ull, 13768147944274212325ull, 4522103655616585636ull}}, {{10540303920934172892ull, 8428369620621068460ull, 17828464502026158511ull, 2826314784760366022ull}}, {{13175379901167716115ull, 5923776007348947671ull, 13062208590677922331ull, 3532893480950457528ull}}, {{11857538858032257240ull, 2793033990758796685ull, 16327760738347402914ull, 4416116851188071910ull}}, {{9716804795483854727ull, 6357332262651635832ull, 5593164443039738917ull, 2760073031992544944ull}}, {{12146005994354818409ull, 12558351346741932694ull, 6991455553799673646ull, 3450091289990681180ull}}, {{5959135456088747203ull, 6474567146572640060ull, 8739319442249592058ull, 4312614112488351475ull}}, {{12947831696910242810ull, 8658290485035287941ull, 3156231642192301084ull, 2695383820305219672ull}}, {{2349731565855639800ull, 10822863106294109927ull, 3945289552740376355ull, 3369229775381524590ull}}, {{16772222512601713462ull, 8916892864440249504ull, 14154983977780246252ull, 4211537219226905737ull}}, {{10482639070376070914ull, 14796430077129931748ull, 1929335958471572051ull, 2632210762016816086ull}}, {{13103298837970088642ull, 13883851577985026781ull, 11635041984944240872ull, 3290263452521020107ull}}, {{2544065492180447091ull, 17354814472481283477ull, 9932116462752913186ull, 4112829315651275134ull}}, {{3895883941826473384ull, 15458445063728190077ull, 1595886770793182837ull, 2570518322282046959ull}}, {{9481540945710479634ull, 5487998274378073884ull, 15829916518773642259ull, 3213147902852558698ull}}, {{11851926182138099542ull, 2248311824545204451ull, 10564023611612277016ull, 4016434878565698373ull}}, {{5101610854622618262ull, 1405194890340752782ull, 8908357766471367087ull, 2510271799103561483ull}}, {{15600385605133048635ull, 15591551668208104689ull, 6523761189661820954ull, 3137839748879451854ull}}, {{5665423951134147082ull, 10266067548405355054ull, 17378073523932052001ull, 3922299686099314817ull}}, {{17375948024741005638ull, 17945507263821816668ull, 3943766924816450644ull, 2451437303812071761ull}}, {{3273190957216705432ull, 3985140006067719220ull, 9541394674447951210ull, 3064296629765089701ull}}, {{4091488696520881790ull, 14204797044439424833ull, 16538429361487326916ull, 3830370787206362126ull}}, {{14086395481394020879ull, 18101370189629416328ull, 5724832332502191418ull, 2393981742003976329ull}}, {{17607994351742526098ull, 13403340700181994602ull, 11767726434055127177ull, 2992477177504970411ull}}, {{12786620902823381815ull, 2919117819945329541ull, 10097972024141521068ull, 3740596471881213014ull}}, {{10297481073478307587ull, 11047820674320606771ull, 1699546496661062763ull, 2337872794925758134ull}}, {{8260165323420496579ull, 9198089824473370560ull, 11347805157681104262ull, 2922340993657197667ull}}, {{10325206654275620724ull, 2274240243736937392ull, 9573070428673992424ull, 3652926242071497084ull}}, {{12906508317844525904ull, 2842800304671171740ull, 11966338035842490530ull, 4566157802589371355ull}}, {{17289939735507604498ull, 6388436208846870241ull, 5173118263187862629ull, 2853848626618357097ull}}, {{7777366614102341911ull, 12597231279485975706ull, 11078083847412216190ull, 3567310783272946371ull}}, {{498336230773151581ull, 6523167062502693825ull, 9235918790837882334ull, 4459138479091182964ull}}, {{11840675190301689498ull, 17912037469346347352ull, 14995821281128452266ull, 2786961549431989352ull}}, {{14800843987877111872ull, 13166674799828158382ull, 298032527701013717ull, 3483701936789986691ull}}, {{9277682947991614032ull, 2623285444503034266ull, 14207598714908430859ull, 4354627420987483363ull}}, {{10410237860922146674ull, 17780454467310254080ull, 6573906187604075334ull, 2721642138117177102ull}}, {{13012797326152683343ull, 13002196047283041792ull, 17440754771359869976ull, 3402052672646471377ull}}, {{16265996657690854179ull, 16252745059103802240ull, 7965885408917673758ull, 4252565840808089222ull}}, {{10166247911056783862ull, 5546279643512488496ull, 366992362146158195ull, 2657853650505055764ull}}, {{12707809888820979827ull, 2321163535963222716ull, 458740452682697744ull, 3322317063131319705ull}}, {{15884762361026224784ull, 2901454419954028395ull, 5185111584280760084ull, 4152896328914149631ull}}, {{7622133466427696538ull, 11036781049326043555ull, 10158223767816556908ull, 2595560205571343519ull}}, {{4915980814607232768ull, 13795976311657554444ull, 8086093691343308231ull, 3244450256964179399ull}}, {{6144976018259040960ull, 12633284371144555151ull, 5495931095751747385ull, 4055562821205224249ull}}, {{10758139039052982456ull, 978273704324265113ull, 14964171980913311876ull, 2534726763253265155ull}}, {{18059359817243615974ull, 1222842130405331391ull, 14093528957714251941ull, 3168408454066581444ull}}, {{17962513753127132064ull, 6140238681434052143ull, 17616911197142814926ull, 3960510567583226805ull}}, {{18144100123345539396ull, 17672707231178446301ull, 13316412507427953280ull, 2475319104739516753ull}}, {{8845067098899760533ull, 3644139965263506261ull, 2810457579002777889ull, 3094148880924395942ull}}, {{15668019892052088570ull, 9166860975006770730ull, 12736444010608248169ull, 3867686101155494927ull}}, {{14404198450959943261ull, 17258503155447701466ull, 14877806534271236961ull, 2417303813222184329ull}}, {{8781876026845153268ull, 7738070889027463121ull, 4762200112556882490ull, 3021629766527730412ull}}, {{15589031051983829488ull, 449216574429553093ull, 5952750140696103113ull, 3777037208159663015ull}}, {{12048987416703587382ull, 11809975405086940443ull, 10637997865576146301ull, 2360648255099789384ull}}, {{10449548252452096324ull, 927411201076511842ull, 13297497331970182877ull, 2950810318874736730ull}}, {{3838563278710344597ull, 5770950019773027707ull, 7398499628107952788ull, 3688512898593420913ull}}, {{186518079960542842ull, 7213687524716284634ull, 13859810553562328889ull, 4610641123241776141ull}}, {{4728259818402727180ull, 16037769749016147656ull, 10968224605190149507ull, 2881650702026110088ull}}, {{5910324773003408975ull, 15435526167842796666ull, 13710280756487686884ull, 3602063377532637610ull}}, {{16611278003109037027ull, 847663636093944216ull, 7914478908754832798ull, 4502579221915797013ull}}, {{10382048751943148142ull, 14364847827840878847ull, 7252392327185464450ull, 2814112013697373133ull}}, {{8365874921501547273ull, 8732687747946322751ull, 13677176427409218467ull, 3517640017121716416ull}}, {{5845657633449546188ull, 6304173666505515535ull, 17096470534261523084ull, 4397050021402145520ull}}, {{10571065048547048223ull, 13163480578420723017ull, 10685294083913451927ull, 2748156263376340950ull}}, {{17825517329111198183ull, 11842664704598515867ull, 4133245568037039101ull, 3435195329220426188ull}}, {{17670210642961609825ull, 968272825465981122ull, 5166556960046298877ull, 4293994161525532735ull}}, {{15655567670278394045ull, 2911013525129932153ull, 10146627127670018654ull, 2683746350953457959ull}}, {{5734401532565828844ull, 12862138943267191000ull, 8071597891160135413ull, 3354682938691822449ull}}, {{7168001915707286055ull, 2242615623801825038ull, 14701183382377557171ull, 4193353673364778061ull}}, {{18315059252599217496ull, 17542535829371998312ull, 11494082623199667183ull, 2620846045852986288ull}}, {{4447079992039470254ull, 17316483768287609987ull, 14367603278999583979ull, 3276057557316232860ull}}, {{947163971621949914ull, 17033918691932124580ull, 17959504098749479974ull, 4095071946645291075ull}}, {{9815349519118494504ull, 6034513164030189958ull, 8918847052504731032ull, 2559419966653306922ull}}, {{3045814862043342322ull, 7543141455037737448ull, 1925186778776137982ull, 3199274958316633653ull}}, {{3807268577554177903ull, 205554781942396002ull, 7018169491897560382ull, 3999093697895792066ull}}, {{6991228879398749093ull, 13963529793996161213ull, 8998041950863363142ull, 2499433561184870041ull}}, {{13350722117675824270ull, 8231040205640425708ull, 15859238457006591832ull, 3124291951481087551ull}}, {{16688402647094780338ull, 10288800257050532135ull, 15212362052830851886ull, 3905364939351359439ull}}, {{17347780682075319567ull, 1818814142229194680ull, 16425255310660364285ull, 2440853087094599649ull}}, {{3237981778884597843ull, 6885203696213881255ull, 6696511083043291644ull, 3051066358868249562ull}}, {{17882535278887911016ull, 8606504620267351568ull, 17594010890658890363ull, 3813832948585311952ull}}, {{11176584549304944385ull, 3073222378453400778ull, 10996256806661806477ull, 2383645592865819970ull}}, {{4747358649776404673ull, 8453213991494138877ull, 4521948971472482288ull, 2979556991082274963ull}}, {{10545884330647893745ull, 10566517489367673596ull, 1040750195913214956ull, 3724446238852843704ull}}, {{15814549743509709399ull, 15827445467709571805ull, 650468872445759347ull, 2327778899283027315ull}}, {{5933129124104973037ull, 15172620816209576853ull, 14648144145839362896ull, 2909723624103784143ull}}, {{12028097423558604200ull, 519031946552419450ull, 13698494163871815717ull, 3637154530129730179ull}}, {{5811749742593479442ull, 5260475951617912217ull, 12511431686412381742ull, 4546443162662162724ull}}, {{15161558635189394411ull, 17122855525043358847ull, 17043016840862514396ull, 2841526976663851702ull}}, {{14340262275559355110ull, 2956825332594646943ull, 12080399014223367188ull, 3551908720829814628ull}}, {{13313641826021805983ull, 3696031665743308679ull, 15100498767779208985ull, 4439885901037268285ull}}, {{15238555168904710596ull, 13839234837158037684ull, 11743654739075699567ull, 2774928688148292678ull}}, {{601449887421336628ull, 12687357528020159202ull, 5456196386989848651ull, 3468660860185365848ull}}, {{9975184396131446593ull, 11247510891597811098ull, 6820245483737310814ull, 4335826075231707310ull}}, {{10846176266009542025ull, 2418008288821244032ull, 18097711482617982971ull, 2709891297019817068ull}}, {{13557720332511927531ull, 16857568416308718752ull, 4175395279562927097ull, 3387364121274771336ull}}, {{16947150415639909414ull, 7236902465103734728ull, 5219244099453658872ull, 4234205151593464170ull}}, {{10591969009774943384ull, 4523064040689834205ull, 7873713580585924699ull, 2646378219745915106ull}}, {{17851647280646067134ull, 1042144032434904852ull, 618769938877630066ull, 3307972774682393883ull}}, {{3867815027098032301ull, 10526052077398406874ull, 14608520478879201294ull, 4134965968352992353ull}}, {{7029070410363658092ull, 1967096529946616392ull, 2212796271658418953ull, 2584353730220620221ull}}, {{8786338012954572615ull, 7070556680860658394ull, 7377681358000411595ull, 3230442162775775276ull}}, {{1759550479338439961ull, 4226509832648435089ull, 9222101697500514494ull, 4038052703469719095ull}}, {{12628934095654994736ull, 16476626700687435642ull, 12681342588578903414ull, 2523782939668574434ull}}, {{6562795582713967612ull, 11372411339004518745ull, 6628306198868853460ull, 3154728674585718043ull}}, {{12815180496819847418ull, 14215514173755648431ull, 3673696730158678921ull, 3943410843232147554ull}}, {{14927016838153486493ull, 1967167330956198413ull, 6907746474776562230ull, 2464631777020092221ull}}, {{4823712992409694404ull, 11682331200550023825ull, 13246369111898090691ull, 3080789721275115276ull}}, {{10641327258939505909ull, 9991227982260141877ull, 16557961389872613364ull, 3850987151593894095ull}}, {{8956672546050885145ull, 15467889525767364481ull, 17266254896311465208ull, 2406866969746183809ull}}, {{15807526700990994335ull, 888117833499653985ull, 7747760565107167799ull, 3008583712182729762ull}}, {{5924350320956579207ull, 14945205347156731194ull, 461328669529183940ull, 3760729640228412203ull}}, {{8314404969025249908ull, 117381305118181188ull, 16429231482951597627ull, 2350456025142757626ull}}, {{10393006211281562385ull, 13981784686679890197ull, 11313167316834721225ull, 2938070031428447033ull}}, {{17602943782529340886ull, 3642172803067699034ull, 306401090761237820ull, 3672587539285558792ull}}, {{12780307691306900299ull, 4552716003834623793ull, 383001363451547275ull, 4590734424106948490ull}}, {{1070163279425730831ull, 539604493182945919ull, 4851061870584604951ull, 2869209015066842806ull}}, {{15172762154564327251ull, 14509563671760846110ull, 15287199375085531996ull, 3586511268833553507ull}}, {{9742580656350633255ull, 18136954589701057638ull, 14497313200429527091ull, 4483139086041941884ull}}, {{1477426891791757881ull, 9029753609349467072ull, 18284192787123230240ull, 2801961928776213677ull}}, {{1846783614739697351ull, 11287192011686833840ull, 9020182928621874088ull, 3502452410970267097ull}}, {{2308479518424621688ull, 14108990014608542300ull, 15886914679204730514ull, 4378065513712833871ull}}, {{10666171735870164363ull, 13429804777557726841ull, 16846850702144038427ull, 2736290946070521169ull}}, {{17944400688265093358ull, 12175569953519770647ull, 7223505322397884322ull, 3420363682588151462ull}}, {{17818814841903978794ull, 5996090405044937501ull, 18252753689852131211ull, 4275454603235189327ull}}, {{13442602285403680698ull, 1441713493939391986ull, 18325500083798663863ull, 2672159127021993329ull}}, {{7579880819899825065ull, 15637199922706403695ull, 9071817049466166116ull, 3340198908777491662ull}}, {{4863165006447393427ull, 1099755829673453003ull, 2116399274977931838ull, 4175248635971864578ull}}, {{733635119815926940ull, 14522405448828071839ull, 5934435565288595302ull, 2609530397482415361ull}}, {{14752101955052072387ull, 8929634774180313990ull, 12029730475038132032ull, 3261912996853019201ull}}, {{9216755406960314675ull, 11162043467725392488ull, 1202105038515501328ull, 4077391246066274002ull}}, {{5760472129350196672ull, 6976277167328370305ull, 5363001667499576234ull, 2548369528791421251ull}}, {{11812276180115133744ull, 17943718496015238689ull, 2092066065947082388ull, 3185461910989276564ull}}, {{930287169861753468ull, 3982904046309496746ull, 2615082582433852986ull, 3981827388736595705ull}}, {{5193115499590983822ull, 7101001047370823370ull, 13163641660089627876ull, 2488642117960372315ull}}, {{15714766411343505585ull, 8876251309213529212ull, 11842866056684646941ull, 3110802647450465394ull}}, {{1196713940469830365ull, 15707000154944299420ull, 5580210534001032868ull, 3888503309313081743ull}}, {{9971318249648419786ull, 593503059985411329ull, 10405160611391727399ull, 2430314568320676089ull}}, {{17075833830487912637ull, 14576936880263927873ull, 17618136782667047152ull, 3037893210400845111ull}}, {{7509734232827727084ull, 18221171100329909842ull, 17410984959906421036ull, 3797366513001056389ull}}, {{9305269913944717332ull, 2164859900851417843ull, 13187708609155207100ull, 2373354070625660243ull}}, {{7019901374003508760ull, 2706074876064272304ull, 11872949743016620971ull, 2966692588282075304ull}}, {{8774876717504385950ull, 17217651650362504092ull, 14841187178770776213ull, 3708365735352594130ull}}, {{14707669985295017027ull, 13066875290690259009ull, 13887428005159123037ull, 2317728584595371331ull}}, {{4549529426336607572ull, 2498536058080660050ull, 12747598988021515893ull, 2897160730744214164ull}}, {{14910283819775535273ull, 7734856091028212966ull, 15934498735026894866ull, 3621450913430267705ull}}, {{9414482737864643283ull, 445198076930490400ull, 6083065363501454871ull, 4526813641787834632ull}}, {{5884051711165402052ull, 7195777825722638356ull, 3801915852188409294ull, 2829258526117396645ull}}, {{7355064638956752565ull, 18218094319008073753ull, 9364080833662899521ull, 3536573157646745806ull}}, {{13805516817123328610ull, 8937559843477928479ull, 2481729005223848594ull, 4420716447058432258ull}}, {{15545977038343162237ull, 10197660920601093203ull, 6162766646692293275ull, 2762947779411520161ull}}, {{14820785279501564893ull, 8135390132323978600ull, 12315144326792754498ull, 3453684724264400201ull}}, {{79237525667404500ull, 945865628550197443ull, 1558872353208779411ull, 4317105905330500252ull}}, {{16190424518037985476ull, 16732067082339731065ull, 10197667257610262939ull, 2698191190831562657ull}}, {{6402972592265318133ull, 16303397834497275928ull, 17358770090440216578ull, 3372738988539453321ull}}, {{8003715740331647667ull, 11155875256266819102ull, 7863404557768107011ull, 4215923735674316652ull}}, {{390636319279891888ull, 4666579025953067987ull, 14137999885459842690ull, 2634952334796447907ull}}, {{14323353454382028572ull, 15056595819296110791ull, 13060813838397415458ull, 3293690418495559884ull}}, {{13292505799550147810ull, 9597372737265362681ull, 16326017297996769323ull, 4117113023119449855ull}}, {{1390287097077760526ull, 3692514951577157724ull, 17121289838889062683ull, 2573195639449656159ull}}, {{1737858871347200657ull, 3957671044059251ull, 16789926280183940450ull, 3216494549312070199ull}}, {{16007381644466164533ull, 9228319125659849871ull, 16375721831802537658ull, 4020618186640087749ull}}, {{16922142555432434689ull, 10379385471964794073ull, 12540669154090279988ull, 2512886366650054843ull}}, {{7317620139008379650ull, 12974231839955992592ull, 11064150424185462081ull, 3141107958312568554ull}}, {{9147025173760474562ull, 2382731744662827028ull, 4606815993377051794ull, 3926384947890710693ull}}, {{14940262770455072409ull, 6100893358841654796ull, 5185103005074351323ull, 2453990592431694183ull}}, {{228584389359288896ull, 3014430680124680592ull, 1869692737915551250ull, 3067488240539617729ull}}, {{285730486699111119ull, 12991410387010626548ull, 6948801940821826966ull, 3834360300674522161ull}}, {{9401953591041720258ull, 3507945473454253688ull, 15872216259082111614ull, 2396475187921576350ull}}, {{11752441988802150322ull, 13608303878672592918ull, 10616898286997863709ull, 2995593984901970438ull}}, {{5467180449147912095ull, 3175321793058577436ull, 4047750821892553829ull, 3744492481127463048ull}}, {{12640359817572220867ull, 4290419129875304849ull, 2529844263682846143ull, 2340307800704664405ull}}, {{1965391716683112372ull, 751337893916743158ull, 7773991348030945583ull, 2925384750880830506ull}}, {{11680111682708666273ull, 14774230422678092659ull, 494117148183906170ull, 3656730938601038133ull}}, {{9988453584958444937ull, 9244415991492840016ull, 5229332453657270617ull, 4570913673251297666ull}}, {{6242783490599028086ull, 17306975040751494770ull, 7880018801963182039ull, 2856821045782061041ull}}, {{17026851400103560915ull, 17022032782511980558ull, 14461709520881365453ull, 3571026307227576301ull}}, {{12060192213274675336ull, 7442482922857811986ull, 4242078845819543105ull, 4463782884034470377ull}}, {{12149306151724059989ull, 16180766872854602251ull, 14180514324705684200ull, 2789864302521543985ull}}, {{10574946671227687082ull, 1779214517358701198ull, 3890584850599941539ull, 3487330378151929982ull}}, {{3995311302179833045ull, 16059076201980540210ull, 14086603100104702731ull, 4359162972689912477ull}}, {{7108755582289783557ull, 7731079617024143679ull, 11109969946779133159ull, 2724476857931195298ull}}, {{4274258459434841542ull, 5052163502852791695ull, 4664090396619140641ull, 3405596072413994123ull}}, {{731137055866164024ull, 10926890396993377523ull, 1218426977346537897ull, 4256995090517492654ull}}, {{16597861724412210179ull, 18358521544189330711ull, 14596574916123749897ull, 2660621931573432908ull}}, {{16135641137087874820ull, 9113093874954499677ull, 18245718645154687372ull, 3325777414466791135ull}}, {{6334493366077679812ull, 11391367343693124597ull, 18195462288015971311ull, 4157221768083488919ull}}, {{6264901363012243835ull, 14037133617449284729ull, 18289692957651063925ull, 2598263605052180574ull}}, {{12442812722192692697ull, 3711358966529442199ull, 13638744160209054099ull, 3247829506315225718ull}}, {{10941829884313477968ull, 27512689734414845ull, 7825058163406541816ull, 4059786882894032148ull}}, {{9144486686909617682ull, 17195431084009278ull, 14114033388983864443ull, 2537366801808770092ull}}, {{2207236321782246294ull, 13856552344137175310ull, 17642541736229830553ull, 3171708502260962615ull}}, {{11982417439082583676ull, 3485632374889305425ull, 17441491151859900288ull, 3964635627826203269ull}}, {{571481871785532942ull, 2178520234305815891ull, 13206774979126131632ull, 2477897267391377043ull}}, {{14549410395014079889ull, 2723150292882269863ull, 11896782705480276636ull, 3097371584239221304ull}}, {{13575076975340211957ull, 3403937866102837329ull, 14870978381850345795ull, 3871714480299026630ull}}, {{1566894081946550617ull, 18268362230810130995ull, 4682675470229078217ull, 2419821550186891644ull}}, {{15793675657715351983ull, 9000394733230500031ull, 5853344337786347772ull, 3024776937733614555ull}}, {{15130408553716802075ull, 11250493416538125039ull, 2704994403805546811ull, 3780971172167018194ull}}, {{16374034373714083153ull, 4725715376122634197ull, 6302307520805854661ull, 2363106982604386371ull}}, {{6632484911860440229ull, 10518830238580680651ull, 3266198382579930422ull, 2953883728255482964ull}}, {{3678920121398162383ull, 3925165761371075006ull, 4082747978224913028ull, 3692354660319353705ull}}, {{16134383131156015201ull, 11676600637711697686ull, 14080932532459040402ull, 2307721662699596065ull}}, {{10944606877090243193ull, 5372378760284846300ull, 3766107610291636791ull, 2884652078374495082ull}}, {{13680758596362803992ull, 2103787431928669971ull, 13931006549719321797ull, 3605815097968118852ull}}, {{12489262227026117086ull, 7241420308338225368ull, 17413758187149152246ull, 4507268872460148565ull}}, {{7805788891891323179ull, 18360945747993554567ull, 13189441876181914105ull, 2817043045287592853ull}}, {{5145550096436766069ull, 9116124129709779497ull, 2651744289945228920ull, 3521303806609491067ull}}, {{11043623638973345490ull, 11395155162137224371ull, 17149738417713699862ull, 4401629758261863833ull}}, {{4596421765144646980ull, 2510285957908377328ull, 3801057483429980558ull, 2751018598913664896ull}}, {{5745527206430808724ull, 12361229484240247468ull, 4751321854287475697ull, 3438773248642081120ull}}, {{7181909008038510905ull, 1616478800018145623ull, 5939152317859344622ull, 4298466560802601400ull}}, {{11406222157665151172ull, 14845357305293504726ull, 3711970198662090388ull, 2686541600501625875ull}}, {{5034405660226663157ull, 109952557907329292ull, 28276729900225082ull, 3358177000627032344ull}}, {{6293007075283328946ull, 9360812734238937423ull, 35345912375281352ull, 4197721250783790430ull}}, {{10850658449693162448ull, 5850507958899335889ull, 13857149250516714557ull, 2623575781739869018ull}}, {{18175009080543840963ull, 11924820967051557765ull, 8098064526291117388ull, 3279469727174836273ull}}, {{8883703295397637492ull, 14906026208814447207ull, 14734266676291284639ull, 4099337158968545341ull}}, {{12469843587264605289ull, 16233795408150111360ull, 11514759681895746851ull, 2562085724355340838ull}}, {{15587304484080756611ull, 15680558241760251296ull, 5170077565514907756ull, 3202607155444176048ull}}, {{1037386531391394147ull, 1153953728490762505ull, 6462596956893634696ull, 4003258944305220060ull}}, {{12177581628188091102ull, 721221080306726565ull, 13262495134913297493ull, 2502036840190762537ull}}, {{1386918979952950166ull, 5513212368810796111ull, 2743060863359458154ull, 3127546050238453172ull}}, {{15568706780223351419ull, 16114887497868270946ull, 3428826079199322692ull, 3909432562798066465ull}}, {{14342127756066982541ull, 848432649312893533ull, 13672231345568046443ull, 2443395351748791540ull}}, {{4092601639801564464ull, 14895598866923280629ull, 17090289181960058053ull, 3054244189685989425ull}}, {{9727438068179343484ull, 4784440528371937074ull, 7527803422167908855ull, 3817805237107486782ull}}, {{10691334811039477582ull, 9907804357873542527ull, 93191120427555130ull, 2386128273192179239ull}}, {{8752482495371959073ull, 3161383410487152351ull, 13951546955816607625ull, 2982660341490224048ull}}, {{6328917100787560937ull, 8563415281536328343ull, 17439433694770759531ull, 3728325426862780060ull}}, {{10873102215633307442ull, 3046291541746511262ull, 1676274022376948899ull, 2330203391789237538ull}}, {{4368005732686858494ull, 17642922482465302790ull, 11318714564825961931ull, 2912754239736546922ull}}, {{14683379202713348926ull, 17441967084654240583ull, 4925021169177676606ull, 3640942799670683653ull}}, {{13742537984964298253ull, 12579086818963024921ull, 10767962479899483662ull, 4551178499588354566ull}}, {{1671557212961604552ull, 3250243243424502672ull, 2118290531509789385ull, 2844486562242721604ull}}, {{2089446516202005690ull, 8674490072708016244ull, 2647863164387236731ull, 3555608202803402005ull}}, {{2611808145252507113ull, 6231426572457632401ull, 7921514973911433818ull, 4444510253504252506ull}}, {{13161595136851286706ull, 8506327626213408154ull, 9562632877122034040ull, 2777818908440157816ull}}, {{7228621884209332574ull, 10632909532766760193ull, 11953291096402542550ull, 3472273635550197270ull}}, {{13647463373689053621ull, 4067764879103674433ull, 5718241833648402380ull, 4340342044437746588ull}}, {{1612135580914576657ull, 11765725086294572329ull, 12797273182885027295ull, 2712713777773591617ull}}, {{6626855494570608726ull, 10095470339440827507ull, 2161533423324120407ull, 3390892222216989522ull}}, {{3671883349785873003ull, 8007651905873646480ull, 11925288816009926317ull, 4238615277771236902ull}}, {{2294927093616170627ull, 7310625450384723002ull, 2841619491578816044ull, 2649134548607023064ull}}, {{12092030903874989092ull, 9138281812980903752ull, 3552024364473520055ull, 3311418185758778830ull}}, {{15115038629843736365ull, 6811166247798741786ull, 13663402492446675877ull, 4139272732198473537ull}}, {{14058585162079723132ull, 6562821914087907568ull, 1622097530138090567ull, 2587045457624045961ull}}, {{17573231452599653915ull, 3591841374182496556ull, 6639307931100001113ull, 3233806822030057451ull}}, {{3519795242040015778ull, 9101487736155508600ull, 3687448895447613487ull, 4042258527537571814ull}}, {{2199872026275009861ull, 12605958862738274731ull, 16139713614936922141ull, 2526411579710982383ull}}, {{16584898088125926038ull, 1922390523140679701ull, 15562956000243764773ull, 3158014474638727979ull}}, {{6896064554875243836ull, 7014674172353237531ull, 14842008981877318062ull, 3947518093298409974ull}}, {{2004197337583333446ull, 18219229413002937169ull, 4664569595245935884ull, 2467198808311506234ull}}, {{7116932690406554711ull, 4327292692544119845ull, 15054084030912195664ull, 3083998510389382792ull}}, {{13507851881435581292ull, 5409115865680149806ull, 370860964930692964ull, 3854998137986728491ull}}, {{3830721407469850404ull, 12604069452904869437ull, 16372689167577540766ull, 2409373836241705306ull}}, {{9400087777764700909ull, 6531714779276310988ull, 11242489422617150150ull, 3011717295302131633ull}}, {{11750109722205876136ull, 17388015510950164543ull, 218053722989273975ull, 3764646619127664542ull}}, {{14261347604019754441ull, 17785038721984934695ull, 13971341632150459946ull, 2352904136954790338ull}}, {{13214998486597305147ull, 13007926365626392561ull, 8240805003333299125ull, 2941130171193487923ull}}, {{2683690052964467722ull, 2424849901750826990ull, 5689320235739236003ull, 3676412713991859904ull}}, {{12577984603060360460ull, 16866120432470697449ull, 7111650294674045003ull, 4595515892489824880ull}}, {{943711349271643432ull, 8235482261080491954ull, 4444781434171278127ull, 2872197432806140550ull}}, {{10403011223444330098ull, 5682666807923227038ull, 14779348829568873467ull, 3590246791007675687ull}}, {{3780391992450636814ull, 2491647491476645894ull, 13862500018533703930ull, 4487808488759594609ull}}, {{16197803050563811721ull, 6168965700600291587ull, 1746533483942483100ull, 2804880305474746631ull}}, {{15635567794777376747ull, 7711207125750364484ull, 16018224910210267587ull, 3506100381843433288ull}}, {{1097715669762169318ull, 5027322888760567702ull, 1576037064053282868ull, 4382625477304291611ull}}, {{14521130348883519536ull, 12365448842330130621ull, 17125924229529159456ull, 2739140923315182256ull}}, {{4316354880822235708ull, 15456811052912663277ull, 2960661213201897704ull, 3423926154143977821ull}}, {{10007129619455182538ull, 874269742431277480ull, 8312512534929760035ull, 4279907692679972276ull}}, {{6254456012159489087ull, 16687319653515406089ull, 14418692371185875829ull, 2674942307924982672ull}}, {{12429756033626749262ull, 7024091511612093899ull, 18023365463982344787ull, 3343677884906228340ull}}, {{10925509023606048674ull, 4168428371087729470ull, 4082462756268379368ull, 4179597356132785426ull}}, {{2216757121326392517ull, 2605267731929830919ull, 7163225241095125009ull, 2612248347582990891ull}}, {{16606004456940154358ull, 7868270683339676552ull, 4342345532941518357ull, 3265310434478738614ull}}, {{2310761497465641332ull, 14447024372601983595ull, 14651303953031673754ull, 4081638043098423267ull}}, {{17585127000411883497ull, 13641076251303627650ull, 6851221961431102144ull, 2551023776936514542ull}}, {{12758036713660078563ull, 17051345314129534563ull, 17787399488643653488ull, 3188779721170643177ull}}, {{11335859873647710299ull, 2867437568952366588ull, 8399191305522403149ull, 3985974651463303972ull}}, {{16308284457884594745ull, 4097991489808923069ull, 14472866602806277776ull, 2491234157164564982ull}}, {{6550297517073579719ull, 5122489362261153837ull, 8867711216653071412ull, 3114042696455706228ull}}, {{12799557914769362553ull, 6403111702826442296ull, 11084639020816339265ull, 3892553370569632785ull}}, {{7999723696730851596ull, 15531159860334996195ull, 10370360369130184ull, 2432845856606020491ull}}, {{5387968602486176591ull, 967205751709193628ull, 13848021005743576443ull, 3041057320757525613ull}}, {{6734960753107720738ull, 15044065244918655747ull, 3474968201897306841ull, 3801321650946907017ull}}, {{1903507461478631510ull, 2485011750433077986ull, 13701070172254286536ull, 2375826031841816885ull}}, {{11602756363703065195ull, 3106264688041347482ull, 3291279660035694458ull, 2969782539802271107ull}}, {{5280073417774055685ull, 13106202896906460161ull, 17949157630326781784ull, 3712228174752838883ull}}, {{14829260932177254564ull, 8191376810566537600ull, 8912380509740544663ull, 2320142609220524302ull}}, {{89832091512016588ull, 5627534994780784097ull, 1917103600320905021ull, 2900178261525655378ull}}, {{4723976132817408639ull, 11646104761903368025ull, 11619751537255907084ull, 3625222826907069222ull}}, {{10516656184449148703ull, 14557630952379210031ull, 5301317384715108047ull, 4531528533633836528ull}}, {{13490439142921799796ull, 16016048372878088125ull, 3313323365446942529ull, 2832205333521147830ull}}, {{3027990873370086032ull, 6185002410815446445ull, 13365026243663453970ull, 3540256666901434787ull}}, {{8396674610139995444ull, 16954625050374083864ull, 12094596786151929558ull, 4425320833626793484ull}}, {{5247921631337497153ull, 5984954638056414511ull, 16782495028199731782ull, 2765825521016745927ull}}, {{1948216020744483537ull, 16704565334425293947ull, 16366432766822276823ull, 3457281901270932409ull}}, {{16270328081212768133ull, 16269020649604229529ull, 6622982903245682317ull, 4321602376588665512ull}}, {{3251426023116898227ull, 12473980915216337408ull, 4139364314528551448ull, 2701001485367915945ull}}, {{4064282528896122784ull, 15592476144020421760ull, 9785891411588077214ull, 3376251856709894931ull}}, {{5080353161120153480ull, 10267223143170751392ull, 7620678246057708614ull, 4220314820887368664ull}}, {{3175220725700095925ull, 1805328446054331716ull, 4762923903786067884ull, 2637696763054605415ull}}, {{3969025907125119906ull, 2256660557567914645ull, 1341968861305196951ull, 3297120953818256769ull}}, {{9572968402333787787ull, 16655883752242057018ull, 6289147095058884092ull, 4121401192272820961ull}}, {{10594791269886005271ull, 1186555308296509828ull, 15459931980480272318ull, 2575875745170513100ull}}, {{13243489087357506588ull, 10706566172225413093ull, 878170901890788781ull, 3219844681463141376ull}}, {{2719303303914719523ull, 17994893733709154271ull, 1097713627363485976ull, 4024805851828926720ull}}, {{8617093592587781558ull, 11246808583568221419ull, 686071017102178735ull, 2515503657393079200ull}}, {{6159680972307339044ull, 9446824711032888870ull, 857588771377723419ull, 3144379571741349000ull}}, {{16922973252238949613ull, 7196844870363723183ull, 1071985964222154274ull, 3930474464676686250ull}}, {{17494387310290425364ull, 9109714062404714893ull, 5281677246066234325ull, 2456546540422928906ull}}, {{8032926082580867993ull, 15998828596433281521ull, 15825468594437568714ull, 3070683175528661132ull}}, {{14652843621653472895ull, 10775163708686826093ull, 1335091669337409277ull, 3838353969410826416ull}}, {{11463870272747114512ull, 9040320327142960260ull, 834432293335880798ull, 2398971230881766510ull}}, {{14329837840933893139ull, 2077028372073924517ull, 10266412403524626806ull, 2998714038602208137ull}}, {{4077239245885202712ull, 11819657501947181455ull, 17444701522833171411ull, 3748392548252760171ull}}, {{9465803556319333551ull, 5081442929503294457ull, 8597095442557038180ull, 2342745342657975107ull}}, {{16443940463826554843ull, 6351803661879118071ull, 6134683284768909821ull, 2928431678322468884ull}}, {{15943239561355805650ull, 12551440595776285493ull, 7668354105961137276ull, 3660539597903086105ull}}, {{6093991396412593350ull, 15689300744720356867ull, 14197128650878809499ull, 4575674497378857631ull}}, {{1502901613544176892ull, 7499969956236529090ull, 15790734434440337793ull, 2859796560861786019ull}}, {{11101999053784996923ull, 13986648463723049266ull, 15126732024623034337ull, 3574745701077232524ull}}, {{4654126780376470345ull, 3648252524371647871ull, 461670957069241306ull, 4468432126346540656ull}}, {{9826358265376375822ull, 6891843846159667823ull, 288544348168275816ull, 2792770078966587910ull}}, {{7671261813293081873ull, 8614804807699584779ull, 9584052472065120578ull, 3490962598708234887ull}}, {{4977391248188964438ull, 1545133972769705166ull, 7368379571654012819ull, 4363703248385293609ull}}, {{16945927585400266486ull, 17106609797476923392ull, 16134452278352227771ull, 2727314530240808505ull}}, {{2735665408040781491ull, 16771576228418766337ull, 6333007292658121002ull, 3409143162801010632ull}}, {{8031267778478364768ull, 11741098248668682113ull, 7916259115822651253ull, 4261428953501263290ull}}, {{16548757407617447740ull, 9644029414631620272ull, 9559347965816544937ull, 2663393095938289556ull}}, {{2239202685812258059ull, 16666722786716913245ull, 11949184957270681171ull, 3329241369922861945ull}}, {{7410689375692710477ull, 16221717464968753652ull, 1101423141306187752ull, 4161551712403577432ull}}, {{13855052896662719857ull, 10138573415605471032ull, 688389463316367345ull, 2600969820252235895ull}}, {{17318816120828399821ull, 17284902787934226694ull, 14695544884427622893ull, 3251212275315294868ull}}, {{12425148114180723968ull, 7771070429635619656ull, 18369431105534528617ull, 4064015344144118585ull}}, {{7765717571362952480ull, 16386134064590732045ull, 4563365413317998529ull, 2540009590090074116ull}}, {{14318832982631078504ull, 6647609525456251344ull, 5704206766647498162ull, 3175011987612592645ull}}, {{17898541228288848130ull, 17532883943675089988ull, 11741944476736760606ull, 3968764984515740806ull}}, {{1963216230825754273ull, 6346366446369543339ull, 2727029279533087475ull, 2480478115322338004ull}}, {{16289078343814356553ull, 3321272039534541269ull, 3408786599416359344ull, 3100597644152922505ull}}, {{6526289874485781980ull, 4151590049418176587ull, 8872669267697837084ull, 3875747055191153131ull}}, {{1773088162339919785ull, 11818115817741136175ull, 3239575283097454225ull, 2422341909494470707ull}}, {{16051418258207063444ull, 937586716894256506ull, 17884527159153981494ull, 3027927386868088383ull}}, {{10840900785904053496ull, 10395355432972596441ull, 17743972930515088963ull, 3784909233585110479ull}}, {{18304778037258503195ull, 4191254136394178823ull, 18007512109213012458ull, 2365568270990694049ull}}, {{18269286528145741090ull, 14462439707347499337ull, 8674332081234101860ull, 2956960338738367562ull}}, {{9001550104900012651ull, 18078049634184374172ull, 1619543064687851517ull, 3696200423422959453ull}}, {{14849340852417283715ull, 13604624030578927809ull, 3318057424643601150ull, 2310125264639349658ull}}, {{4726618010239440931ull, 7782408001368883954ull, 13370943817659277246ull, 2887656580799187072ull}}, {{15131644549654076972ull, 504637964856329134ull, 16713679772074096558ull, 3609570725998983840ull}}, {{9691183650212820407ull, 9854169492925187226ull, 2445355641383069081ull, 4511963407498729801ull}}, {{10668675799810400659ull, 17688070979146711776ull, 13057562321932887935ull, 2819977129686706125ull}}, {{13335844749763000823ull, 17498402705506001816ull, 2486894847133946207ull, 3524971412108382657ull}}, {{16669805937203751029ull, 17261317363455114366ull, 7720304577344820663ull, 4406214265135478321ull}}, {{5806942692324956489ull, 17705852379800528335ull, 16354405406908982674ull, 2753883915709673950ull}}, {{2646992346978807707ull, 12908943437895884611ull, 11219634721781452535ull, 3442354894637092438ull}}, {{17143798489005673346ull, 11524493278942467859ull, 4801171365372039861ull, 4302943618296365548ull}}, {{8409031046414851889ull, 9508651308552736364ull, 12224104140212300721ull, 2689339761435228467ull}}, {{10511288808018564862ull, 16497500154118308359ull, 10668444156837987997ull, 3361674701794035584ull}}, {{8527424991595818173ull, 6786817137365721737ull, 13335555196047484997ull, 4202093377242544480ull}}, {{16858855665815856118ull, 6547603720067270037ull, 8334721997529678123ull, 2626308360776590300ull}}, {{7238511526987656436ull, 3572818631656699643ull, 10418402496912097654ull, 3282885450970737875ull}}, {{4436453390307182641ull, 13689395326425650362ull, 8411317102712734163ull, 4103606813713422344ull}}, {{7384469387369377055ull, 6250029069802337524ull, 5257073189195458852ull, 2564754258570888965ull}}, {{9230586734211721318ull, 7812536337252921905ull, 11183027504921711469ull, 3205942823213611206ull}}, {{16149919436192039551ull, 14377356439993540285ull, 4755412344297363528ull, 4007428529017014008ull}}, {{12399542656833718672ull, 8985847774995962678ull, 2972132715185852205ull, 2504642830635633755ull}}, {{6276056284187372532ull, 15843995737172341252ull, 17550223949264478968ull, 3130803538294542193ull}}, {{7845070355234215664ull, 1358250597755874949ull, 8102721881298434999ull, 3913504422868177742ull}}, {{7209011981235078742ull, 7766435651238503699ull, 452515157384133970ull, 2445940264292611089ull}}, {{4399578958116460524ull, 484672527193353816ull, 5177329965157555367ull, 3057425330365763861ull}}, {{5499473697645575655ull, 14440898714273855982ull, 11083348474874332112ull, 3821781662957204826ull}}, {{17272229116310648496ull, 9025561696421159988ull, 11538778815223845474ull, 2388613539348253016ull}}, {{3143542321678759004ull, 2058580083671674178ull, 14423473519029806843ull, 2985766924185316270ull}}, {{13152799938953224563ull, 16408283159871756434ull, 8805969861932482745ull, 3732208655231645338ull}}, {{12832185980273153256ull, 3337647947278765915ull, 10115417182135189620ull, 2332630409519778336ull}}, {{11428546456914053666ull, 4172059934098457394ull, 12644271477668987025ull, 2915788011899722920ull}}, {{5062311034287791275ull, 9826760936050459647ull, 15805339347086233781ull, 3644735014874653650ull}}, {{1716202774432351189ull, 16895137188490462463ull, 10533302147003016418ull, 4555918768593317063ull}}, {{7990155761661301349ull, 15171146761233926943ull, 13500842869517967117ull, 2847449230370823164ull}}, {{5376008683649238783ull, 5128875396260244967ull, 16876053586897458897ull, 3559311537963528955ull}}, {{2108324836134160574ull, 11022780263752694113ull, 16483380965194435717ull, 4449139422454411194ull}}, {{12846918068652320119ull, 9195080674059127772ull, 14913799121673910227ull, 2780712139034006996ull}}, {{16058647585815400149ull, 6882164824146521811ull, 195504828382836168ull, 3475890173792508746ull}}, {{15461623463841862282ull, 8602706030183152264ull, 9467753072333321018ull, 4344862717240635932ull}}, {{9663514664901163926ull, 9988377287291858069ull, 15140717707063101444ull, 2715539198275397457ull}}, {{16691079349553842812ull, 12485471609114822586ull, 5090839078546713093ull, 3394423997844246822ull}}, {{11640477150087527707ull, 1771781456111364521ull, 15586920885038167175ull, 4243029997305308527ull}}, {{357769191163622961ull, 8024892437710684682ull, 16659354580789936340ull, 2651893748315817829ull}}, {{9670583525809304509ull, 10031115547138355852ull, 6989135170705256713ull, 3314867185394772287ull}}, {{12088229407261630636ull, 17150580452350332719ull, 4124732944954182987ull, 4143583981743465359ull}}, {{14472672407179601004ull, 8413269773505263997ull, 9495487118237446223ull, 2589739988589665849ull}}, {{4255782453692337542ull, 5904901198454192093ull, 16481044916224195683ull, 3237174985737082311ull}}, {{9931414085542809832ull, 2769440479640352212ull, 15989620126852856700ull, 4046468732171352889ull}}, {{15430505840319031953ull, 10954272336629995940ull, 3075983551641953581ull, 2529042957607095556ull}}, {{841388226689238325ull, 18304526439214882830ull, 3844979439552441976ull, 3161303697008869445ull}}, {{10275107320216323715ull, 4433913975309051921ull, 9417910317867940375ull, 3951629621261086806ull}}, {{17951157121203672082ull, 9688725262209239306ull, 1274507930240074830ull, 2469768513288179254ull}}, {{13215574364649814294ull, 2887534540906773325ull, 10816506949654869346ull, 3087210641610224067ull}}, {{2684409900530104156ull, 12832790212988242465ull, 8908947668641198778ull, 3859013302012780084ull}}, {{13206971233899784857ull, 12632179901545039444ull, 14791464329755525044ull, 2411883313757987552ull}}, {{16508714042374731072ull, 15790224876931299305ull, 42586338484854689ull, 3014854142197484441ull}}, {{6800834497686250127ull, 5902723040881960420ull, 4664918941533456266ull, 3768567677746855551ull}}, {{13473893597908682138ull, 8300887918978613166ull, 9833103366099492022ull, 2355354798591784719ull}}, {{7618994960531076864ull, 1152737861868490650ull, 7679693189196977124ull, 2944193498239730899ull}}, {{300371663809070272ull, 1440922327335613313ull, 4987930468068833501ull, 3680241872799663624ull}}, {{4987150598188725744ull, 6412838927596904545ull, 6234913085086041876ull, 4600302340999579530ull}}, {{14646184169936423350ull, 13231396366602841148ull, 8508506696606164076ull, 2875188963124737206ull}}, {{18307730212420529188ull, 16539245458253551435ull, 1412261333902929287ull, 3593986203905921508ull}}, {{18272976747098273580ull, 16062370804389551390ull, 1765326667378661609ull, 4492482754882401885ull}}, {{6808924448509033084ull, 3121452725102387763ull, 3409172176325357458ull, 2807801721801501178ull}}, {{3899469542208903451ull, 13125187943232760512ull, 13484837257261472630ull, 3509752152251876472ull}}, {{4874336927761129313ull, 7183112892186174832ull, 16856046571576840788ull, 4387190190314845590ull}}, {{3046460579850705821ull, 13712817594471135078ull, 5923343088808137588ull, 2741993868946778494ull}}, {{13031447761668158084ull, 17141021993088918847ull, 16627550897864947793ull, 3427492336183473117ull}}, {{11677623683657809701ull, 7591219436078984847ull, 6949380567049021030ull, 4284365420229341397ull}}, {{14216043829927212919ull, 132826129121977625ull, 6649205863619332096ull, 2677728387643338373ull}}, {{3934996732126852437ull, 166032661402472032ull, 12923193347951553024ull, 3347160484554172966ull}}, {{4918745915158565546ull, 207540826753090040ull, 6930619648084665472ull, 4183950605692716208ull}}, {{3074216196974103467ull, 129713016720681275ull, 4331637280052915920ull, 2614969128557947630ull}}, {{17677828301499793045ull, 162141270900851593ull, 14637918636920920708ull, 3268711410697434537ull}}, {{8262227321592577594ull, 202676588626064492ull, 4462340240868987173ull, 4085889263371793172ull}}, {{14387264112850136805ull, 2432515877104984259ull, 12012334687397892791ull, 2553680789607370732ull}}, {{13372394122635283102ull, 16875702901663394036ull, 15015418359247365988ull, 3192100987009213415ull}}, {{16715492653294103877ull, 2647884553369690929ull, 14157586930631819582ull, 3990126233761516769ull}}, {{3529653880667733067ull, 15489985901138220543ull, 1930962804003805382ull, 2493828896100947981ull}}, {{18247125406116830046ull, 10139110339567999870ull, 7025389523432144632ull, 3117286120126184976ull}}, {{13585534720791261749ull, 12673887924459999838ull, 8781736904290180790ull, 3896607650157731220ull}}, {{3879273182067150689ull, 3309493934360111995ull, 14711957602036138802ull, 2435379781348582012ull}}, {{237405459156550458ull, 13360239454804915802ull, 18389947002545173502ull, 3044224726685727515ull}}, {{9520128860800463880ull, 7476927281651368944ull, 18375747734754078974ull, 3805280908357159394ull}}, {{5950080538000289925ull, 61393532604717686ull, 16096528352648687263ull, 2378300567723224621ull}}, {{16660972709355138214ull, 13911799971038060819ull, 6285602385528695366ull, 2972875709654030777ull}}, {{16214529868266534864ull, 8166377926942800216ull, 12468689000338257112ull, 3716094637067538471ull}}, {{10134081167666584290ull, 5103986204339250135ull, 14710459652852492551ull, 2322559148167211544ull}}, {{8055915441155842458ull, 1768296736996674765ull, 18388074566065615689ull, 2903198935209014430ull}}, {{14681580319872190977ull, 6822056939673231360ull, 13761721170727243803ull, 3628998669011268038ull}}, {{18351975399840238721ull, 3915885156164151296ull, 7978779426554278946ull, 4536248336264085048ull}}, {{11469984624900149201ull, 7059114241029982464ull, 4986737141596424341ull, 2835155210165053155ull}}, {{14337480781125186501ull, 13435578819714865984ull, 1621735408568142522ull, 3543944012706316444ull}}, {{17921850976406483126ull, 7571101487788806672ull, 2027169260710178153ull, 4429930015882895555ull}}, {{11201156860254051954ull, 16261153475936473930ull, 17407881852439719009ull, 2768706259926809721ull}}, {{4778074038462789134ull, 6491383789638428701ull, 7924794260267485050ull, 3460882824908512152ull}}, {{10584278566505874322ull, 17337601773902811684ull, 9905992825334356312ull, 4326103531135640190ull}}, {{15838546140920947259ull, 10836001108689257302ull, 1579559497406584791ull, 2703814706959775119ull}}, {{10574810639296408266ull, 8933315367434183724ull, 15809507427040394701ull, 3379768383699718898ull}}, {{13218513299120510332ull, 15778330227720117559ull, 10538512246945717568ull, 4224710479624648623ull}}, {{15179099839591400814ull, 9861456392325073474ull, 13504099181982155336ull, 2640444049765405389ull}}, {{9750502762634475209ull, 12326820490406341843ull, 3045065922195530458ull, 3300555062206756737ull}}, {{7576442434865706107ull, 6185153576153151496ull, 8418018421171800977ull, 4125693827758445921ull}}, {{4735276521791066317ull, 15394936031164189445ull, 16790476559300845370ull, 2578558642349028700ull}}, {{10530781670666220801ull, 10020298002100460998ull, 2541351625416505097ull, 3223198302936285876ull}}, {{3940105051478000193ull, 17137058521052964152ull, 3176689531770631371ull, 4028997878670357345ull}}, {{2462565657173750121ull, 8404818566444408643ull, 13514646003425114367ull, 2518123674168973340ull}}, {{16913265126749351363ull, 5894337189628122899ull, 16893307504281392959ull, 3147654592711216675ull}}, {{16529895390009301299ull, 2756235468607765720ull, 16504948361924353295ull, 3934568240889020844ull}}, {{10331184618755813312ull, 8640176195520935431ull, 1092220689347945001ull, 2459105150555638028ull}}, {{8302294755017378736ull, 15411906262828557193ull, 1365275861684931251ull, 3073881438194547535ull}}, {{14989554462199111324ull, 14653196810108308587ull, 15541652882388327776ull, 3842351797743184418ull}}, {{7062628529660750626ull, 9158248006317692867ull, 14325219069920092764ull, 2401469873589490261ull}}, {{4216599643648550378ull, 11447810007897116084ull, 4071465782117952243ull, 3001837341986862827ull}}, {{5270749554560687972ull, 9698076491444007201ull, 477646209220052400ull, 3752296677483578534ull}}, {{14823433517668899743ull, 6061297807152504500ull, 14133586936044696462ull, 2345185423427236583ull}}, {{82547823376573062ull, 16799994295795406434ull, 13055297651628482673ull, 2931481779284045729ull}}, {{9326556816075492136ull, 7164934814462094330ull, 2484064009253439630ull, 3664352224105057162ull}}, {{2434823983239589362ull, 18179540554932393721ull, 12328452048421575345ull, 4580440280131321452ull}}, {{13050980035593213111ull, 4444683819191664219ull, 16928654567118260399ull, 2862775175082075907ull}}, {{11702039026064128485ull, 944168755562192370ull, 16549132190470437595ull, 3578468968852594884ull}}, {{5404176745725384798ull, 15015268999734904175ull, 2239671164378495377ull, 4473086211065743606ull}}, {{10295139493719447355ull, 2467014097193233253ull, 15234852533018723323ull, 2795678881916089753ull}}, {{17480610385576697098ull, 16918825676773705278ull, 5208507610991240441ull, 3494598602395112192ull}}, {{12627390945116095564ull, 7313474040684967886ull, 6510634513739050552ull, 4368248252993890240ull}}, {{3280433322270171824ull, 4570921275428104929ull, 4069146571086906595ull, 2730155158121181400ull}}, {{8712227671265102683ull, 1101965575857743257ull, 5086433213858633244ull, 3412693947651476750ull}}, {{15501970607508766258ull, 1377456969822179071ull, 15581413554178067363ull, 4265867434564345937ull}}, {{16606260657334060768ull, 17001811670634719583ull, 2820854443720210245ull, 2666167146602716211ull}}, {{16146139803240188055ull, 7417206533011235767ull, 17361126109932426519ull, 3332708933253395263ull}}, {{15570988735622847165ull, 4659822147836656805ull, 17089721618988145245ull, 4165886166566744079ull}}, {{12037710968977973430ull, 5218231851611604455ull, 17598605039508672634ull, 2603678854104215049ull}}, {{10435452692795078884ull, 15746161851369281377ull, 8163198244103677080ull, 3254598567630268812ull}}, {{17656001884421236509ull, 1235958240502050105ull, 10203997805129596351ull, 4068248209537836015ull}}, {{4117472150122190962ull, 7690002927954863172ull, 13295027655847079575ull, 2542655130961147509ull}}, {{5146840187652738702ull, 5000817641516191061ull, 2783726514526685757ull, 3178318913701434387ull}}, {{11045236252993311282ull, 10862708070322626730ull, 17314716198440520908ull, 3972898642126792983ull}}, {{11514958676548207455ull, 16012564580806417514ull, 17739226651666407423ull, 2483061651329245614ull}}, {{5170326308830483511ull, 15404019707580633989ull, 12950661277728233471ull, 3103827064161557018ull}}, {{11074593904465492293ull, 14643338616048404582ull, 6964954560305516031ull, 3879783830201946273ull}}, {{2309935171863544779ull, 16069615662671334720ull, 15882311646259417279ull, 2424864893876216420ull}}, {{2887418964829430974ull, 15475333559911780496ull, 1406145484114719983ull, 3031081117345270526ull}}, {{3609273706036788717ull, 14732480931462337716ull, 10981053891998175787ull, 3788851396681588157ull}}, {{11479168103127768756ull, 6901957572950267120ull, 9169001691712553819ull, 2368032122925992598ull}}, {{14348960128909710945ull, 4015760947760445996ull, 2237880077785916466ull, 2960040153657490748ull}}, {{17936200161137138682ull, 14243073221555333303ull, 2797350097232395582ull, 3700050192071863435ull}}, {{18127654128351793532ull, 4290234745044695410ull, 17889244875266104903ull, 2312531370044914646ull}}, {{13436195623584966107ull, 751107412878481359ull, 13138184057227855321ull, 2890664212556143308ull}}, {{12183558511053819730ull, 5550570284525489603ull, 16422730071534819151ull, 3613330265695179135ull}}, {{10617762120389886758ull, 2326526837229474100ull, 15916726570991136035ull, 4516662832118973919ull}}, {{15859473362098455032ull, 17594980337764278976ull, 16865483134510541877ull, 2822914270074358699ull}}, {{1377597628913517174ull, 8158667366923185009ull, 16470167899710789443ull, 3528642837592948374ull}}, {{6333683054569284371ull, 5586648190226593357ull, 11364337837783710996ull, 4410803546991185468ull}}, {{6264394918319496684ull, 12715027155746396656ull, 16326083185469595180ull, 2756752216869490917ull}}, {{7830493647899370855ull, 15893783944682995820ull, 6572545926554830263ull, 3445940271086863647ull}}, {{9788117059874213569ull, 15255543912426356871ull, 3603996389766149925ull, 4307425338858579559ull}}, {{13035102190062465337ull, 11840557954480166996ull, 9170026771244925559ull, 2692140836786612224ull}}, {{16293877737578081671ull, 10189011424672820841ull, 11462533464056156949ull, 3365176045983265280ull}}, {{6532289116690438376ull, 17347950299268413956ull, 14328166830070196186ull, 4206470057479081600ull}}, {{13306052734786299793ull, 15454154955470146626ull, 8955104268793872616ull, 2629043785924426000ull}}, {{7409193881628098934ull, 870949620628131667ull, 11193880335992340771ull, 3286304732405532500ull}}, {{4649806333607735763ull, 14923745081067328296ull, 13992350419990425963ull, 4107880915506915625ull}}, {{2906128958504834852ull, 7021497666453386233ull, 1827689984852934371ull, 2567425572191822266ull}}, {{8244347216558431469ull, 4165186064639344887ull, 11507984517920943772ull, 3209281965239777832ull}}, {{5693748002270651432ull, 5206482580799181109ull, 14384980647401179715ull, 4011602456549722290ull}}, {{5864435510632851097ull, 948208603785794241ull, 13602298923053125226ull, 2507251535343576431ull}}, {{11942230406718451775ull, 10408632791587018609ull, 12391187635389018628ull, 3134064419179470539ull}}, {{1092729953115901007ull, 13010790989483773262ull, 10877298525808885381ull, 3917580523974338174ull}}, {{14518014275979601842ull, 10437587377641052240ull, 2186625560203165459ull, 2448487827483961359ull}}, {{18147517844974502302ull, 8435298203623927396ull, 16568340005536120536ull, 3060609784354951698ull}}, {{4237653232508576261ull, 10544122754529909246ull, 11487052970065374862ull, 3825762230443689623ull}}, {{16483591325600023875ull, 1978390703153805374ull, 14096937133931941145ull, 2391101394027306014ull}}, {{11381117120145254036ull, 7084674397369644622ull, 8397799380560150623ull, 2988876742534132518ull}}, {{5003024363326791737ull, 4244156978284667874ull, 1273877188845412471ull, 3736095928167665648ull}}, {{7738576245506632740ull, 9570127139068999277ull, 796173243028382794ull, 2335059955104791030ull}}, {{14284906325310678829ull, 2739286886981473288ull, 10218588590640254301ull, 2918824943880988787ull}}, {{17856132906638348536ull, 8035794627154229514ull, 8161549719872929972ull, 3648531179851235984ull}}, {{13096794096443159862ull, 10044743283942786893ull, 10201937149841162465ull, 4560663974814044980ull}}, {{10491339319490668866ull, 17807179598532711568ull, 15599582755505502348ull, 2850414984258778112ull}}, {{13114174149363336082ull, 3812230424456337844ull, 1052734370672326320ull, 3563018730323472641ull}}, {{16392717686704170102ull, 4765288030570422305ull, 5927603981767795804ull, 4453773412904340801ull}}, {{3327919526549024458ull, 12201677055961289749ull, 15233967534673342137ull, 2783608383065213000ull}}, {{8771585426613668477ull, 1417038264669448474ull, 595715344632126056ull, 3479510478831516251ull}}, {{1741109746412309788ull, 1771297830836810593ull, 14579702236072321282ull, 4349388098539395313ull}}, {{12617408637576163377ull, 5718747162700394524ull, 2194784869904118945ull, 2718367561587122071ull}}, {{15771760796970204222ull, 11760119971802881059ull, 16578539142662312393ull, 3397959451983902588ull}}, {{15103014977785367373ull, 865091909471437612ull, 2276429854618338876ull, 4247449314979878236ull}}, {{216012324261078800ull, 9764054480274424316ull, 10646140695991237605ull, 2654655821862423897ull}}, {{270015405326348500ull, 16816754118770418299ull, 17919361888416434910ull, 3318319777328029871ull}}, {{14172577311940099337ull, 11797570611608247065ull, 17787516342093155734ull, 4147899721660037339ull}}, {{1940331792321480230ull, 2761795613827766512ull, 8811354704594528382ull, 2592437326037523337ull}}, {{2425414740401850287ull, 12675616554139483948ull, 15625879399170548381ull, 3240546657546904171ull}}, {{3031768425502312859ull, 2009462637392191223ull, 14920663230535797573ull, 4050683321933630214ull}}, {{8812384293580027393ull, 3561757157583813466ull, 4713728500657485579ull, 2531677076208518884ull}}, {{1792108330120258433ull, 18287254502261930545ull, 5892160625821856973ull, 3164596345260648605ull}}, {{6851821431077710945ull, 9024010072545249469ull, 11976886800704709121ull, 3955745431575810756ull}}, {{6588231403637263293ull, 17169221341409250678ull, 16708926287295219008ull, 2472340894734881722ull}}, {{17458661291401354924ull, 3014782603052011731ull, 11662785822264247953ull, 3090426118418602153ull}}, {{17211640595824305751ull, 8380164272242402568ull, 743424222548146229ull, 3863032648023252692ull}}, {{10757275372390191095ull, 7543445679365195557ull, 9688012175947367201ull, 2414395405014532932ull}}, {{18058280233915126772ull, 14040993117633882350ull, 12110015219934209001ull, 3017994256268166165ull}}, {{13349478255539132657ull, 3716183341760189226ull, 1302460969635597540ull, 3772492820335207707ull}}, {{12955109928139345815ull, 11545986625454894074ull, 16954939170518106126ull, 2357808012709504816ull}}, {{6970515373319406460ull, 5209111244963841785ull, 2746929889438081042ull, 2947260015886881021ull}}, {{13324830235076645979ull, 15734761093059578039ull, 8045348380224989206ull, 3684075019858601276ull}}, {{12044351775418419570ull, 10445079329469696741ull, 10056685475281236508ull, 4605093774823251595ull}}, {{9833562868850206183ull, 15751546617773336271ull, 3979585412837078865ull, 2878183609264532247ull}}, {{7680267567635369825ull, 5854375216934506627ull, 362795747618960678ull, 3597729511580665309ull}}, {{4988648441116824377ull, 16541341058022909092ull, 5065180702951088751ull, 4497161889475831636ull}}, {{12341277312552791044ull, 17255867188905400038ull, 12389109976199206277ull, 2810726180922394772ull}}, {{6203224603836212997ull, 7734775930849586336ull, 15486387470249007847ull, 3513407726152993465ull}}, {{7754030754795266246ull, 5056783895134595016ull, 5522926282529096097ull, 4391759657691241832ull}}, {{4846269221747041404ull, 14689704980527591645ull, 3451828926580685060ull, 2744849786057026145ull}}, {{10669522545611189659ull, 18362131225659489556ull, 8926472176653244229ull, 3431062232571282681ull}}, {{13336903182013987073ull, 9117605976792198233ull, 15769776239243943191ull, 4288827790714103351ull}}, {{1418035461117660065ull, 12616032763136205752ull, 16773639177168546350ull, 2680517369196314594ull}}, {{1772544326397075081ull, 6546668917065481382ull, 11743676934605907130ull, 3350646711495393243ull}}, {{11439052444851119659ull, 17406708183186627535ull, 10067910149829996008ull, 4188308389369241554ull}}, {{14066936805673031643ull, 10879192614491642209ull, 10904129862071135409ull, 2617692743355775971ull}}, {{3748612951809125842ull, 18210676786541940666ull, 9018476309161531357ull, 3272115929194719964ull}}, {{13909138226616183110ull, 8928287927895262120ull, 11273095386451914197ull, 4090144911493399955ull}}, {{8693211391635114444ull, 7886022964148232777ull, 4739841607318752421ull, 2556340569683374972ull}}, {{15478200257971280959ull, 14469214723612678875ull, 5924802009148440526ull, 3195425712104218715ull}}, {{14736064304036713295ull, 8863146367661072786ull, 2794316493008162754ull, 3994282140130273394ull}}, {{13821726208450333713ull, 10151152498215558395ull, 6358133826557489625ull, 2496426337581420871ull}}, {{12665471742135529238ull, 17300626641196835898ull, 3335981264769474127ull, 3120532921976776089ull}}, {{6608467640814635739ull, 17014097283068656969ull, 8781662599389230563ull, 3900666152470970111ull}}, {{15659507321577617097ull, 8327967792704216653ull, 12406068152259350958ull, 2437916345294356319ull}}, {{5739326096689857659ull, 1186587704025495009ull, 10895899171896800794ull, 3047395431617945399ull}}, {{11785843639289709978ull, 10706606666886644569ull, 9008187946443613088ull, 3809244289522431749ull}}, {{448623246914986880ull, 6691629166804152856ull, 7935960475740952132ull, 2380777680951519843ull}}, {{560779058643733600ull, 8364536458505191070ull, 5308264576248802261ull, 2975972101189399804ull}}, {{9924345860159442808ull, 15067356591558876741ull, 6635330720311002826ull, 3719965126486749755ull}}, {{8508559171813345707ull, 14028783888151685867ull, 1841238690980682814ull, 2324978204054218597ull}}, {{6024012946339294230ull, 8312607823334831526ull, 6913234382153241422ull, 2906222755067773246ull}}, {{16753388219778893595ull, 1167387742313763599ull, 17864915014546327586ull, 3632778443834716557ull}}, {{16330049256296229090ull, 10682606714746980307ull, 8496085712900745770ull, 4540973054793395697ull}}, {{7900437775971449230ull, 11288315215144250596ull, 16839268616631435866ull, 2838108159245872310ull}}, {{9875547219964311537ull, 4887021982075537437ull, 11825713733934519025ull, 3547635199057340388ull}}, {{16956120043382777325ull, 10720463496021809700ull, 14782142167418148781ull, 4434543998821675485ull}}, {{1374202990259460020ull, 9006132694227325015ull, 11544681863850036940ull, 2771589999263547178ull}}, {{15552811793106488737ull, 11257665867784156268ull, 5207480292957770367ull, 3464487499079433973ull}}, {{994270667673559305ull, 9460396316302807432ull, 11121036384624600863ull, 4330609373849292466ull}}, {{621419167295974566ull, 12830276725330336501ull, 11562333758817763443ull, 2706630858655807791ull}}, {{5388459977547356111ull, 11426159888235532722ull, 9841231180094816400ull, 3383288573319759739ull}}, {{15958947008788970947ull, 14282699860294415902ull, 7689852956691132596ull, 4229110716649699674ull}}, {{5362655862065718938ull, 18150059449538785747ull, 9417844116359345776ull, 2643194197906062296ull}}, {{2091633809154760769ull, 4240830238213930568ull, 11772305145449182221ull, 3303992747382577870ull}}, {{2614542261443450961ull, 9912723816194801114ull, 5492009394956701968ull, 4129990934228222338ull}}, {{6245774931829544755ull, 6195452385121750696ull, 8044191890275326634ull, 2581244333892638961ull}}, {{7807218664786930943ull, 16967687518256964178ull, 14666925881271546196ull, 3226555417365798701ull}}, {{535651294128887871ull, 2762865324111653607ull, 4498599296307269034ull, 4033194271707248377ull}}, {{7252311086471636775ull, 6338476845997171408ull, 14340839606260512906ull, 2520746419817030235ull}}, {{9065388858089545969ull, 17146468094351240068ull, 13314363489398253228ull, 3150933024771287794ull}}, {{11331736072611932461ull, 2986341044229498469ull, 7419582324893040728ull, 3938666280964109743ull}}, {{9388178054596151740ull, 1866463152643436543ull, 11554767980699232311ull, 2461666425602568589ull}}, {{7123536549817801771ull, 16168136996086459391ull, 608401920591876676ull, 3077083032003210737ull}}, {{4292734668844864310ull, 1763427171398522623ull, 5372188419167233750ull, 3846353790004013421ull}}, {{9600488195669122050ull, 14937200037406240351ull, 5663460771193215045ull, 2403971118752508388ull}}, {{7388924226159014658ull, 4836441991475636727ull, 7079325963991518807ull, 3004963898440635485ull}}, {{4624469264271380419ull, 1433866470917158005ull, 13460843473416786413ull, 3756204873050794356ull}}, {{5196136299383306714ull, 3202009553536917705ull, 17636399207740267316ull, 2347628045656746472ull}}, {{11106856392656521296ull, 4002511941921147131ull, 3598754935965782529ull, 2934535057070933091ull}}, {{9271884472393263716ull, 9614825945828821818ull, 18333501725239391873ull, 3668168821338666363ull}}, {{2366483553636803837ull, 16630218450713415177ull, 18305191138121851937ull, 4585211026673332954ull}}, {{13008267267091472159ull, 3476357504054802629ull, 16052430479753545365ull, 2865756891670833096ull}}, {{2425276028582176486ull, 8957132898495891191ull, 1618794025982380090ull, 3582196114588541371ull}}, {{16866653091009884319ull, 1973044086265088180ull, 15858550587760138825ull, 4477745143235676713ull}}, {{1318286145026401892ull, 12762367599984149873ull, 2994065089709004909ull, 2798590714522297946ull}}, {{6259543699710390269ull, 2117901444698023629ull, 12965953398991031945ull, 3498238393152872432ull}}, {{12436115643065375740ull, 7259062824299917440ull, 16207441748738789931ull, 4372797991441090540ull}}, {{7772572276915859837ull, 2231071255973754448ull, 906279056106967899ull, 2732998744650681588ull}}, {{9715715346144824797ull, 16623897125249356772ull, 1132848820133709873ull, 3416248430813351985ull}}, {{12144644182681030996ull, 6944813351279532253ull, 6027747043594525246ull, 4270310538516689981ull}}, {{9896245623389338325ull, 18175566399831871370ull, 6073184911460272230ull, 2668944086572931238ull}}, {{3146934992381897098ull, 13496085962935063405ull, 16814853176180116096ull, 3336180108216164047ull}}, {{8545354758904759276ull, 16870107453668829256ull, 16406880451797757216ull, 4170225135270205059ull}}, {{5340846724315474548ull, 10543817158543018285ull, 7948457273159904308ull, 2606390709543878162ull}}, {{11287744423821731088ull, 13179771448178772856ull, 712199554595104577ull, 3257988386929847703ull}}, {{14109680529777163860ull, 2639656254941302358ull, 14725307498526044434ull, 4072485483662309628ull}}, {{4206864312683339509ull, 6261471177765701878ull, 18426689223433553579ull, 2545303427288943517ull}}, {{14481952427708950194ull, 3215152953779739443ull, 9198303474009778262ull, 3181629284111179397ull}}, {{13490754516208799838ull, 13242313229079450112ull, 16109565360939610731ull, 3977036605138974246ull}}, {{8431721572630499899ull, 5970602758960962368ull, 5456792332159868803ull, 2485647878211858904ull}}, {{10539651965788124874ull, 2851567430273815056ull, 6820990415199836004ull, 3107059847764823630ull}}, {{13174564957235156092ull, 3564459287842268820ull, 17749610055854570813ull, 3883824809706029537ull}}, {{17457475135126748366ull, 4533630064115111964ull, 4175977257268024902ull, 2427390506066268461ull}}, {{3375099845198883841ull, 14890409616998665764ull, 9831657590012419031ull, 3034238132582835576ull}}, {{4218874806498604801ull, 14001326002820944301ull, 12289571987515523789ull, 3792797665728544470ull}}, {{4942639763275321953ull, 11056671760976784140ull, 3069296473769814464ull, 2370498541080340294ull}}, {{6178299704094152441ull, 13820839701220980175ull, 13059992629067043888ull, 2963123176350425367ull}}, {{3111188611690302647ull, 17276049626526225219ull, 11713304767906416956ull, 3703903970438031709ull}}, {{18085393946802296819ull, 1574158979724114953ull, 9626658489155204550ull, 2314939981523769818ull}}, {{8771684378220707311ull, 11191070761509919500ull, 2809951074589229879ull, 2893674976904712273ull}}, {{10964605472775884139ull, 9377152433460011471ull, 8124124861663925253ull, 3617093721130890341ull}}, {{9094070822542467270ull, 16333126560252402243ull, 14766842095507294470ull, 4521367151413612926ull}}, {{3377951254875348092ull, 5596518081730363498ull, 4617590291264671140ull, 2825854469633508079ull}}, {{13445811105448960922ull, 6995647602162954372ull, 1160301845653451021ull, 3532318087041885099ull}}, {{16807263881811201153ull, 13356245521131080869ull, 15285435362348977488ull, 4415397608802356373ull}}, {{12810382935345694673ull, 8347653450706925543ull, 11859240110681804882ull, 2759623505501472733ull}}, {{11401292650754730437ull, 1211194776528881121ull, 988992083070092391ull, 3449529381876840917ull}}, {{416557758161249334ull, 15349051525943265114ull, 5847926122265003392ull, 4311911727346051146ull}}, {{4872034617278168738ull, 9593157203714540696ull, 8266639844843015024ull, 2694944829591281966ull}}, {{6090043271597710922ull, 11991446504643175870ull, 1109927769198992972ull, 3368681036989102458ull}}, {{16835926126351914461ull, 14989308130803969837ull, 10610781748353517023ull, 4210851296236378072ull}}, {{12828296838183640490ull, 16285846609393563004ull, 6631738592720948139ull, 2631782060147736295ull}}, {{16035371047729550613ull, 15745622243314565851ull, 3677987222473797270ull, 3289727575184670369ull}}, {{15432527791234550362ull, 10458655767288431506ull, 9209170046519634492ull, 4112159468980837961ull}}, {{14257015887948981880ull, 15760031891410045499ull, 17284946325143241317ull, 2570099668113023725ull}}, {{13209583841508839446ull, 5864981808980393162ull, 7771124851146887935ull, 3212624585141279657ull}}, {{7288607765031273499ull, 2719541242798103549ull, 14325592082360997823ull, 4015780731426599571ull}}, {{6861222862358239889ull, 8617242304389896574ull, 6647652042261929687ull, 2509862957141624732ull}}, {{17799900614802575670ull, 6159866862059982813ull, 8309565052827412109ull, 3137328696427030915ull}}, {{8414817713221055875ull, 12311519596002366421ull, 5775270297606877232ull, 3921660870533788644ull}}, {{7565104079976853874ull, 7694699747501479013ull, 12832915972859074078ull, 2451038044083617902ull}}, {{14068066118398455246ull, 395002647522072958ull, 6817772929219066790ull, 3063797555104522378ull}}, {{8361710611143293250ull, 9717125346257367006ull, 17745588198378609295ull, 3829746943880652972ull}}, {{614383113537170377ull, 12990732369051936235ull, 1867620587131855001ull, 2393591839925408108ull}}, {{14603036947203626683ull, 2403357406032756581ull, 2334525733914818752ull, 2991989799906760135ull}}, {{4418738128722369642ull, 3004196757540945727ull, 16753215222675687152ull, 3739987249883450168ull}}, {{9679240358092562883ull, 1877622973463091079ull, 10470759514172304470ull, 2337492031177156355ull}}, {{7487364429188315699ull, 11570400753683639657ull, 8476763374287992683ull, 2921865038971445444ull}}, {{13970891554912782528ull, 9851314923677161667ull, 10595954217859990854ull, 3652331298714306805ull}}, {{12851928425213590256ull, 3090771617741676276ull, 17856628790752376472ull, 4565414123392883506ull}}, {{17255827302613269718ull, 1931732261088547672ull, 15772079012647623199ull, 2853383827120552191ull}}, {{3123040054557035531ull, 16249723381642848303ull, 15103412747382141094ull, 3566729783900690239ull}}, {{17738858123478458126ull, 11088782190198784570ull, 14267579915800288464ull, 4458412229875862799ull}}, {{15698472345601424233ull, 6930488868874240356ull, 15834766475016262146ull, 2786507643672414249ull}}, {{1176346358292228675ull, 17886483122947576254ull, 5958400038488163970ull, 3483134554590517812ull}}, {{10693804984720061652ull, 13134731866829694509ull, 7448000048110204963ull, 4353918193238147265ull}}, {{8989471124663732484ull, 5903364407554865116ull, 16184215076137347862ull, 2721198870773842040ull}}, {{11236838905829665605ull, 16602577546298357203ull, 1783524771462133211ull, 3401498588467302551ull}}, {{9434362613859694103ull, 16141535914445558600ull, 16064464019609830226ull, 4251873235584128188ull}}, {{5896476633662308814ull, 14700145964955862029ull, 816917975401368083ull, 2657420772240080118ull}}, {{11982281810505273922ull, 13763496437767439632ull, 10244519506106485912ull, 3321775965300100147ull}}, {{14977852263131592402ull, 17204370547209299540ull, 8193963364205719486ull, 4152219956625125184ull}}, {{137785627602469444ull, 6141045573578424309ull, 5121227102628574679ull, 2595137472890703240ull}}, {{4783918052930474708ull, 3064620948545642482ull, 6401533878285718349ull, 3243921841113379050ull}}, {{15203269603017869193ull, 8442462204109441006ull, 17225289384711923744ull, 4054902301391723812ull}}, {{4890357483458780342ull, 5276538877568400629ull, 1542433828590176532ull, 2534313938369827383ull}}, {{10724632872750863331ull, 6595673596960500786ull, 15763100341019884377ull, 3167892422962284228ull}}, {{4182419054083803356ull, 12856278014628013887ull, 1257131352565303855ull, 3959865528702855286ull}}, {{9531540936443458954ull, 14952702786783590535ull, 14620765150635478621ull, 2474915955439284553ull}}, {{7302740152126935788ull, 4855820428197324457ull, 4440898383012184565ull, 3093644944299105692ull}}, {{13740111208586057639ull, 10681461553674043475ull, 5551122978765230706ull, 3867056180373882115ull}}, {{6281726496152592073ull, 11287599489473665076ull, 1163608852514575239ull, 2416910112733676322ull}}, {{7852158120190740091ull, 9497813343414693441ull, 10677883102497994857ull, 3021137640917095402ull}}, {{14426883668665813017ull, 16483952697695754705ull, 4123981841267717763ull, 3776422051146369253ull}}, {{2099273265275051280ull, 7996627426846152739ull, 4883331660006017554ull, 2360263781966480783ull}}, {{16459149636875977812ull, 772412246702915115ull, 1492478556580134039ull, 2950329727458100979ull}}, {{15962251027667584360ull, 14800573363660807606ull, 15700656251007331260ull, 3687912159322626223ull}}, {{10729441747729704642ull, 53972630866457892ull, 15014134295331776172ull, 4609890199153282779ull}}, {{15929273129185841210ull, 9257104931146311990ull, 7077990925368666155ull, 2881181374470801737ull}}, {{10688219374627525704ull, 6959695145505502084ull, 13459174675138220598ull, 3601476718088502171ull}}, {{13360274218284407130ull, 17922990968736653413ull, 12212282325495387843ull, 4501845897610627714ull}}, {{10656014395641448408ull, 8896026346246714431ull, 12244362471862005306ull, 2813653686006642321ull}}, {{8708331976124422606ull, 1896660895953617231ull, 1470395034545342921ull, 3517067107508302902ull}}, {{6273728951728140354ull, 6982512138369409443ull, 11061365830036454459ull, 4396333884385378627ull}}, {{1615237585616393769ull, 2058227077267186950ull, 4607510634559090085ull, 2747708677740861642ull}}, {{11242419018875268019ull, 7184469865011371591ull, 14982760330053638414ull, 3434635847176077052ull}}, {{9441337755166697120ull, 18203959368118990297ull, 281706338857496401ull, 4293294808970096316ull}}, {{17430051143047655460ull, 4459945577433287079ull, 9399438498640711059ull, 2683309255606310197ull}}, {{17175877910382181421ull, 963245953364220945ull, 16360984141728276728ull, 3354136569507887746ull}}, {{7634789332695563064ull, 1204057441705276182ull, 11227858140305570102ull, 4192670711884859683ull}}, {{160057314507339011ull, 14587593956347961326ull, 4711568328477287361ull, 2620419194928037302ull}}, {{9423443679988949572ull, 4399434390152787945ull, 15112832447451385010ull, 3275523993660046627ull}}, {{16390990618413574869ull, 14722665024545760739ull, 14279354540886843358ull, 4094404992075058284ull}}, {{7938526127294790341ull, 4589979621913712558ull, 18147968624909052907ull, 2559003120046911427ull}}, {{699785622263712119ull, 1125788508964752794ull, 18073274762708928230ull, 3198753900058639284ull}}, {{10098104064684415956ull, 10630607673060716800ull, 4144849379676608671ull, 3998442375073299106ull}}, {{6311315040427759973ull, 13561658823304029856ull, 7202216880725268323ull, 2499026484420811941ull}}, {{7889143800534699966ull, 12340387510702649416ull, 13614457119333973308ull, 3123783105526014926ull}}, {{9861429750668374957ull, 15425484388378311770ull, 7794699362312690827ull, 3904728881907518658ull}}, {{10775079612595122252ull, 7335084733522750904ull, 9483373119872819671ull, 2440455551192199161ull}}, {{13468849515743902815ull, 4557169898476050726ull, 16465902418268412493ull, 3050569438990248951ull}}, {{7612689857825102711ull, 10308148391522451312ull, 15970692004408127712ull, 3813211798737811189ull}}, {{4757931161140689195ull, 6442592744701532070ull, 12287525511968773772ull, 2383257374211131993ull}}, {{15170785988280637301ull, 8053240930876915087ull, 1524348834678803503ull, 2979071717763914992ull}}, {{14351796466923408722ull, 5454865145168755955ull, 1905436043348504379ull, 3723839647204893740ull}}, {{6664029782613436500ull, 1103447706516778520ull, 10414269563947591045ull, 2327399779503058587ull}}, {{8330037228266795624ull, 5990995651573361054ull, 8406150936507100902ull, 2909249724378823234ull}}, {{1189174498478718722ull, 16712116601321477126ull, 1284316633779100319ull, 3636562155473529043ull}}, {{10709840159953174211ull, 16278459733224458503ull, 15440453847506039111ull, 4545702694341911303ull}}, {{13611179127611815738ull, 17091566360906368420ull, 16567812682332356300ull, 2841064183963694564ull}}, {{17013973909514769672ull, 2917713877423408909ull, 2263021779205893760ull, 3551330229954618206ull}}, {{7432409331611298378ull, 3647142346779261137ull, 12052149260862143008ull, 4439162787443272757ull}}, {{16174470878325531247ull, 2279463966737038210ull, 9838436297252533332ull, 2774476742152045473ull}}, {{10994716561052138250ull, 2849329958421297763ull, 16909731389993054569ull, 3468095927690056841ull}}, {{9131709682887784909ull, 8173348466454010108ull, 7302106182209154499ull, 4335119909612571052ull}}, {{14930690588659641376ull, 2802499782320062365ull, 13787188400735497370ull, 2709449943507856907ull}}, {{4828305180542388008ull, 12726496764754853765ull, 12622299482491983808ull, 3386812429384821134ull}}, {{10647067494105372914ull, 15908120955943567206ull, 6554502316260203952ull, 4233515536731026418ull}}, {{2042731165388470167ull, 9942575597464729504ull, 8708249966090015374ull, 2645947210456891511ull}}, {{2553413956735587709ull, 3204847459976136072ull, 6273626439185131314ull, 3307434013071114389ull}}, {{3191767445919484636ull, 13229431361824945898ull, 12453719067408802046ull, 4134292516338892986ull}}, {{6606540672127065802ull, 3656708582713203282ull, 12395260435557889183ull, 2583932822711808116ull}}, {{17481547877013608060ull, 18405943783673667814ull, 15494075544447361478ull, 3229916028389760145ull}}, {{12628562809412234267ull, 13784057692737308960ull, 5532536375277038136ull, 4037395035487200182ull}}, {{7892851755882646417ull, 8615036057960818100ull, 17292893289830312547ull, 2523371897179500113ull}}, {{9866064694853308021ull, 6157109054023634721ull, 7781058557005726972ull, 3154214871474375142ull}}, {{16944266886994022930ull, 7696386317529543401ull, 502951159402382907ull, 3942768589342968928ull}}, {{3672637776730182476ull, 2504398439242270674ull, 314344474626489317ull, 2464230368339355580ull}}, {{13814169257767503903ull, 7742184067480226246ull, 392930593283111646ull, 3080287960424194475ull}}, {{8044339535354604070ull, 454358047495507000ull, 14326221296886053270ull, 3850359950530243093ull}}, {{5027712209596627544ull, 14119031834966855587ull, 11259731319767477245ull, 2406474969081401933ull}}, {{1672954243568396526ull, 3813731738426405772ull, 239606094427182845ull, 3008093711351752417ull}}, {{2091192804460495657ull, 9378850691460395119ull, 4911193636461366460ull, 3760117139189690521ull}}, {{8224524530428891642ull, 15085153719017522757ull, 14598711068856823797ull, 2350073211993556575ull}}, {{14892341681463502456ull, 5021384093489739734ull, 13636702817643641843ull, 2937591514991945719ull}}, {{9392055064974602262ull, 1665044098434786764ull, 12434192503627164400ull, 3671989393739932149ull}}, {{11740068831218252828ull, 2081305123043483455ull, 1707682574251791788ull, 4589986742174915187ull}}, {{14255072047152489873ull, 10524187738756952967ull, 17208202673403227531ull, 2868741713859321991ull}}, {{13207154040513224438ull, 8543548655018803305ull, 16898567323326646510ull, 3585927142324152489ull}}, {{2673884495359366835ull, 1456063781918728324ull, 7288151098876144426ull, 4482408927905190612ull}}, {{10894549846454380080ull, 5521725882126593106ull, 13778466473652366074ull, 2801505579940744132ull}}, {{4394815271213199292ull, 16125529389513017191ull, 17223083092065457592ull, 3501881974925930165ull}}, {{881833070589111211ull, 1710167663181719873ull, 7693795809799658279ull, 4377352468657412707ull}}, {{12080360715186664267ull, 7986383817129656776ull, 2502779371911092472ull, 2735845292910882942ull}}, {{15100450893983330334ull, 9982979771412070970ull, 12351846251743641398ull, 3419806616138603677ull}}, {{9652191580624387109ull, 3255352677410312905ull, 1604749759397388036ull, 4274758270173254597ull}}, {{17561834783958711703ull, 11257967460236221373ull, 3308811608837061474ull, 2671723918858284123ull}}, {{8117235424666225917ull, 4849087288440500909ull, 17971072566328490555ull, 3339654898572855153ull}}, {{14758230299260170300ull, 1449673092123238232ull, 8628782652628449482ull, 4174568623216068942ull}}, {{9223893937037606438ull, 5517731701004411799ull, 781303139465393022ull, 2609105389510043089ull}}, {{6918181402869620143ull, 16120536663110290557ull, 5588314942759129181ull, 3261381736887553861ull}}, {{13259412772014413083ull, 6315612773605699484ull, 11597079696876299381ull, 4076727171109442326ull}}, {{17510505019363783985ull, 6253100992717256129ull, 2636488792120299209ull, 2547954481943401454ull}}, {{8053073218922566269ull, 12428062259323958066ull, 12518983027005149819ull, 3184943102429251817ull}}, {{842969486798432028ull, 10923391805727559679ull, 1813670728474273562ull, 3981178878036564772ull}}, {{7444384956890101874ull, 11438805897007112703ull, 10356916242151196784ull, 2488236798772852982ull}}, {{4693795177685239438ull, 14298507371258890879ull, 3722773265834220172ull, 3110295998466066228ull}}, {{1255557953679161393ull, 17873134214073613599ull, 4653466582292775215ull, 3887869998082582785ull}}, {{7702252748690557727ull, 18088237911437090355ull, 14437631660001454269ull, 2429918748801614240ull}}, {{5016129917435809255ull, 8775239334014199232ull, 18047039575001817837ull, 3037398436002017800ull}}, {{6270162396794761568ull, 15580735185945136944ull, 4112055395042720680ull, 3796748045002522251ull}}, {{3918851497996725980ull, 9737959491215710590ull, 264191612688006473ull, 2372967528126576407ull}}, {{14121936409350683283ull, 16784135382447026141ull, 14165297571142171803ull, 2966209410158220508ull}}, {{3817362456406190392ull, 16368483209631394773ull, 17706621963927714754ull, 3707761762697775635ull}}, {{4691694544467562947ull, 14841988024447009637ull, 8760795718241127769ull, 2317351101686109772ull}}, {{10476304199011841588ull, 4717426975276598334ull, 10950994647801409712ull, 2896688877107637215ull}}, {{3872008211910026177ull, 5896783719095747918ull, 9077057291324374236ull, 3620861096384546519ull}}, {{14063382301742308529ull, 7370979648869684897ull, 6734635595728079891ull, 4526076370480683149ull}}, {{1872084910947860975ull, 2301019271329859109ull, 6514990256543743884ull, 2828797731550426968ull}}, {{6951792157112214122ull, 2876274089162323886ull, 8143737820679679855ull, 3535997164438033710ull}}, {{17913112233245043461ull, 17430400666735068569ull, 956300238994824010ull, 4419996455547542138ull}}, {{4278166118137070307ull, 15505686435136805760ull, 5209373667799152910ull, 2762497784717213836ull}}, {{5347707647671337884ull, 10158736007066231392ull, 6511717084748941138ull, 3453122230896517295ull}}, {{6684634559589172354ull, 3475047971978013432ull, 3527960337508788519ull, 4316402788620646619ull}}, {{4177896599743232722ull, 9089434010127340251ull, 18345876275438850488ull, 2697751742887904136ull}}, {{610684731251652998ull, 11361792512659175314ull, 4485601270589011494ull, 3372189678609880171ull}}, {{9986727950919342055ull, 4978868603969193334ull, 995315569808876464ull, 4215237098262350214ull}}, {{1630018950897200881ull, 3111792877480745834ull, 14457130286412711502ull, 2634523186413968883ull}}, {{11260895725476276909ull, 13113113133705708100ull, 13459726839588501473ull, 3293153983017461104ull}}, {{14076119656845346136ull, 2556333361849971413ull, 16824658549485626842ull, 4116442478771826380ull}}, {{11103417794742035287ull, 6209394369583620037ull, 1292039556573740968ull, 2572776549232391488ull}}, {{44214188145380397ull, 7761742961979525047ull, 1615049445717176210ull, 3215970686540489360ull}}, {{13890325790463889208ull, 478806665619630500ull, 2018811807146470263ull, 4019963358175611700ull}}, {{17904825655894706563ull, 7216783193653350918ull, 10485129416321319722ull, 2512477098859757312ull}}, {{13157660033013607396ull, 18244351028921464456ull, 13106411770401649652ull, 3140596373574696640ull}}, {{16447075041267009245ull, 4358694712442278954ull, 16383014713002062066ull, 3925745466968370800ull}}, {{14891107919219268682ull, 7335870213703812250ull, 10239384195626288791ull, 2453590916855231750ull}}, {{9390512862169310044ull, 4558151748702377409ull, 3575858207678085181ull, 3066988646069039688ull}}, {{16349827096139025459ull, 10309375704305359665ull, 4469822759597606476ull, 3833735807586299610ull}}, {{3301112907445809056ull, 15666731852045625599ull, 7405325243175891951ull, 2396084879741437256ull}}, {{17961449189589425032ull, 14971728796629644094ull, 9256656553969864939ull, 2995106099676796570ull}}, {{13228439450132005482ull, 14102974977359667214ull, 2347448655607555366ull, 3743882624595995713ull}}, {{3656088637905115523ull, 4202673342422404105ull, 12996370455823191864ull, 2339926640372497320ull}}, {{9181796815808782307ull, 5253341678028005131ull, 16245463069778989830ull, 2924908300465621650ull}}, {{6865560001333589980ull, 15790049134389782222ull, 11083456800368961479ull, 3656135375582027063ull}}, {{17805322038521763283ull, 15125875399559839873ull, 9242634982033813945ull, 4570169219477533829ull}}, {{4210797246435020196ull, 2536143097083818065ull, 8082489872984827668ull, 2856355762173458643ull}}, {{9875182576471163149ull, 3170178871354772581ull, 5491426322803646681ull, 3570444702716823304ull}}, {{16955664239016341840ull, 8574409607620853630ull, 6864282903504558351ull, 4463055878396029130ull}}, {{5985604130957825746ull, 12276535032404115375ull, 8901862833117736873ull, 2789409923997518206ull}}, {{2870319145269894278ull, 1510610735222980507ull, 1903956504542395284ull, 3486762404996897758ull}}, {{17422956986869531560ull, 1888263419028725633ull, 11603317667532769913ull, 4358453006246122197ull}}, {{3971819089152375369ull, 12709379682961423281ull, 9557916551421675147ull, 2724033128903826373ull}}, {{9576459879867857115ull, 11275038585274391197ull, 16559081707704481838ull, 3405041411129782966ull}}, {{16582260868262209298ull, 4870426194738213188ull, 11475480097775826490ull, 4256301763912228708ull}}, {{1140541005809105003ull, 7655702390138771147ull, 16395547097964667364ull, 2660188602445142942ull}}, {{15260734312543544966ull, 9569627987673463933ull, 11271061835601058397ull, 3325235753056428678ull}}, {{5240859835397267496ull, 16573721003019217821ull, 4865455257646547188ull, 4156544691320535848ull}}, {{5581380406336986137ull, 1135203590032235330ull, 3040909536029091993ull, 2597840432075334905ull}}, {{16200097544776008479ull, 6030690505967682066ull, 8412822938463752895ull, 3247300540094168631ull}}, {{11026749894115234791ull, 2926677114032214679ull, 5904342654652303215ull, 4059125675117710789ull}}, {{13809247711463103600ull, 8746702223911216030ull, 5996057168371383461ull, 2536953546948569243ull}}, {{8038187602474103692ull, 15545063798316407942ull, 2883385442036841422ull, 3171191933685711554ull}}, {{824362466237853807ull, 10207957711040734120ull, 12827603839400827586ull, 3963989917107139442ull}}, {{515226541398658630ull, 10991659587827846729ull, 12628938418052905145ull, 2477493698191962151ull}}, {{5255719195175711191ull, 18351260503212196315ull, 11174487004138743527ull, 3096867122739952689ull}}, {{1957962975542251085ull, 18327389610587857490ull, 133050699891265697ull, 3871083903424940862ull}}, {{5835412878141294832ull, 4537089478976329075ull, 13918214742714204773ull, 2419427439640588038ull}}, {{2682580079249230636ull, 10283047867147799248ull, 8174396391537980158ull, 3024284299550735048ull}}, {{3353225099061538295ull, 3630437797079973252ull, 10217995489422475198ull, 3780355374438418810ull}}, {{11319137723768237242ull, 16104081678457146994ull, 10997933199316434902ull, 2362722109024011756ull}}, {{4925550117855520745ull, 10906730061216657935ull, 13747416499145543628ull, 2953402636280014695ull}}, {{1545251628892013027ull, 13633412576520822419ull, 12572584605504541631ull, 3691753295350018369ull}}, {{17106683332553365806ull, 15438411887966595867ull, 940336350799256663ull, 2307345809593761481ull}}, {{16771668147264319354ull, 14686328841530856930ull, 5787106456926458733ull, 2884182261992201851ull}}, {{11741213147225623384ull, 4522852996631407451ull, 2622197052730685513ull, 3605227827490252314ull}}, {{10064830415604641326ull, 10265252264216647218ull, 12501118352768132699ull, 4506534784362815392ull}}, {{10902205028180288733ull, 4109939655921710559ull, 7813198970480082937ull, 2816584240226759620ull}}, {{9016070266797973012ull, 9749110588329526103ull, 9766498713100103671ull, 3520730300283449525ull}}, {{6658401815070078361ull, 7574702216984519725ull, 16819809409802517493ull, 4400912875354311906ull}}, {{6467344143632492928ull, 7040031894829018780ull, 15124066899553961337ull, 2750570547096444941ull}}, {{8084180179540616159ull, 13411725886963661379ull, 5070025569160287959ull, 3438213183870556177ull}}, {{5493539205998382295ull, 12152971340277188820ull, 10949217979877747853ull, 4297766479838195221ull}}, {{12656834040603764743ull, 9901450096886936964ull, 9149104246637286360ull, 2686104049898872013ull}}, {{15821042550754705928ull, 12376812621108671205ull, 16048066326723995854ull, 3357630062373590016ull}}, {{5941245133161218698ull, 6247643739531063199ull, 1613338834695443202ull, 4197037577966987521ull}}, {{10630807235866843542ull, 8516463355634302403ull, 12537551817753121761ull, 2623148486229367200ull}}, {{8676823026406166524ull, 15257265212970265908ull, 15671939772191402201ull, 3278935607786709000ull}}, {{10846028783007708155ull, 5236523460930668673ull, 1143180641529701136ull, 4098669509733386251ull}}, {{18307983035448287357ull, 3272827163081667920ull, 16855388965451920874ull, 2561668443583366406ull}}, {{4438234720600807580ull, 13314405990706860709ull, 11845864169960125284ull, 3202085554479208008ull}}, {{10159479419178397379ull, 16643007488383575886ull, 14807330212450156605ull, 4002606943099010010ull}}, {{1737988618559110458ull, 12707722689453428881ull, 13866267401208735782ull, 2501629339436881256ull}}, {{6784171791626275976ull, 6661281324962010293ull, 17332834251510919728ull, 3127036674296101570ull}}, {{13091900757960232874ull, 8326601656202512866ull, 12442670777533873852ull, 3908795842870126963ull}}, {{12794123992152533451ull, 14427498071981346349ull, 5470826226744977205ull, 2442997401793829352ull}}, {{2157596934908503101ull, 4199314534694519225ull, 6838532783431221507ull, 3053746752242286690ull}}, {{7308682187063016780ull, 637457149940761127ull, 17771538016143802692ull, 3817183440302858362ull}}, {{11485455394555467344ull, 9621782755567751512ull, 15718897278517264586ull, 2385739650189286476ull}}, {{14356819243194334180ull, 2803856407604913582ull, 1201877524437029117ull, 2982174562736608096ull}}, {{8722652017138141917ull, 8116506527933529882ull, 1502346905546286396ull, 3727718203420760120ull}}, {{10063343529138726602ull, 14296188616813231984ull, 938966815966428997ull, 2329823877137975075ull}}, {{12579179411423408252ull, 4035177715734376268ull, 15008766575240199959ull, 2912279846422468843ull}}, {{15723974264279260315ull, 432286126240582431ull, 14149272200622862045ull, 3640349808028086054ull}}, {{15043281811921687490ull, 5152043676228115943ull, 8463218213923801748ull, 4550437260035107568ull}}, {{16319580160092136537ull, 12443399334497348272ull, 5289511383702376092ull, 2844023287521942230ull}}, {{1952731126405619056ull, 15554249168121685341ull, 15835261266482745923ull, 3555029109402427787ull}}, {{7052599926434411724ull, 14831125441724718772ull, 15182390564676044500ull, 4443786386753034734ull}}, {{13631246990876283135ull, 46081364223173424ull, 4877308084495139909ull, 2777366491720646709ull}}, {{17039058738595353919ull, 4669287723706354684ull, 10708321124046312790ull, 3471708114650808386ull}}, {{2852079349534640783ull, 15059981691487719164ull, 4162029368203115179ull, 4339635143313510483ull}}, {{11005921630313926297ull, 7106645547966130525ull, 295425345913253035ull, 2712271964570944052ull}}, {{18369088056319795776ull, 4271620916530275252ull, 369281682391566294ull, 3390339955713680065ull}}, {{4514615996690193103ull, 14562898182517619874ull, 5073288121416845771ull, 4237924944642100081ull}}, {{7433321016358758594ull, 6795968354859818469ull, 14700020121953998367ull, 2648703090401312550ull}}, {{13903337288875836146ull, 3883274425147385182ull, 9151653115587722151ull, 3310878863001640688ull}}, {{8155799574240019375ull, 242407013006843574ull, 11439566394484652689ull, 4138598578752050860ull}}, {{485688715472624205ull, 11680719429197746994ull, 16373101033407683738ull, 2586624111720031787ull}}, {{9830482931195556065ull, 5377527249642407934ull, 15854690273332216769ull, 3233280139650039734ull}}, {{3064731627139669273ull, 11333595080480397822ull, 10594990804810495153ull, 4041600174562549668ull}}, {{15750515322244457008ull, 165967897659166782ull, 15845241289861335279ull, 2526000109101593542ull}}, {{10464772115950795451ull, 14042517927356122190ull, 10583179575471893290ull, 3157500136376991928ull}}, {{3857593108083718506ull, 8329775372340376930ull, 13228974469339866613ull, 3946875170471239910ull}}, {{7022681710979711970ull, 7511952616926429533ull, 3656423024910028729ull, 2466796981544524944ull}}, {{13390038157152027867ull, 14001626789585424820ull, 4570528781137535911ull, 3083496226930656180ull}}, {{16737547696440034834ull, 12890347468554393121ull, 5713160976421919889ull, 3854370283663320225ull}}, {{3543438282633939915ull, 1138938140205413845ull, 15099940656332169691ull, 2408981427289575140ull}}, {{9040983871719812798ull, 15258730730538931018ull, 428181746705660497ull, 3011226784111968926ull}}, {{2077857802794990189ull, 5238355357891500061ull, 9758599220236851430ull, 3764033480139961157ull}}, {{3604504135960562820ull, 17109030153964351250ull, 8404967521861726095ull, 2352520925087475723ull}}, {{13729002206805479333ull, 16774601674028051158ull, 5894523383899769715ull, 2940651156359344654ull}}, {{7937880721652073359ull, 16356566074107676044ull, 16591526266729487952ull, 3675813945449180817ull}}, {{9922350902065091698ull, 1998963518925043439ull, 6904349778129696229ull, 4594767431811476022ull}}, {{13118998341431764167ull, 3555195208541846101ull, 18150276666613223855ull, 2871729644882172513ull}}, {{2563689871507541497ull, 18279052065959471339ull, 8852787777984366106ull, 3589662056102715642ull}}, {{17039670394666590583ull, 13625443045594563365ull, 1842612685625681825ull, 4487077570128394553ull}}, {{12955637005880313067ull, 1598372875855520247ull, 12680847974584520901ull, 2804423481330246595ull}}, {{11582860238923003429ull, 6609652113246788213ull, 11239373949803263222ull, 3505529351662808244ull}}, {{643517243371590575ull, 17485437178413261075ull, 14049217437254079027ull, 4381911689578510305ull}}, {{16543099341603101773ull, 8622555227294594219ull, 1863231870642717536ull, 2738694805986568941ull}}, {{16067188158576489313ull, 10778194034118242774ull, 6940725856730784824ull, 3423368507483211176ull}}, {{10860613161365835833ull, 13472742542647803468ull, 8675907320913481030ull, 4279210634354013970ull}}, {{16011255262708423204ull, 3808778070727489263ull, 10034128093998313548ull, 2674506646471258731ull}}, {{15402383059958141100ull, 4760972588409361579ull, 7930974099070504031ull, 3343133308089073414ull}}, {{14641292806520288471ull, 1339529717084314070ull, 690345586983354231ull, 4178916635111341768ull}}, {{4539121985647792391ull, 7754735100818778150ull, 431465991864596394ull, 2611822896944588605ull}}, {{14897274518914516296ull, 470046839168696879ull, 5151018508258133397ull, 3264778621180735756ull}}, {{14009907130215757466ull, 5199244567388259003ull, 6438773135322666746ull, 4080973276475919695ull}}, {{6450348947171154465ull, 7861213873045049781ull, 10941762237217748572ull, 2550608297797449809ull}}, {{12674622202391330985ull, 9826517341306312226ull, 18288888814949573619ull, 3188260372246812261ull}}, {{6619905716134387923ull, 7671460658205502379ull, 9026052963404803312ull, 3985325465308515327ull}}, {{1831598063370298500ull, 4794662911378438987ull, 12558812129769083926ull, 2490828415817822079ull}}, {{16124555634495036837ull, 15216700676077824541ull, 11086829143783967003ull, 3113535519772277599ull}}, {{6320636487836632334ull, 14409189826669892773ull, 9246850411302570850ull, 3891919399715346999ull}}, {{6256240814111589161ull, 13617429660096070887ull, 12696810534705188637ull, 2432449624822091874ull}}, {{3208614999212098547ull, 3186729019837924897ull, 6647641131526709989ull, 3040562031027614843ull}}, {{8622454767442511087ull, 8595097293224794025ull, 3697865395980999582ull, 3800702538784518554ull}}, {{16918249275720039190ull, 760249789838108361ull, 6922851890915512643ull, 2375439086740324096ull}}, {{7312753539367885275ull, 14785370292579799164ull, 8653564863644390803ull, 2969298858425405120ull}}, {{9140941924209856594ull, 13870026847297361051ull, 10816956079555488504ull, 3711623573031756400ull}}, {{3407245693417466419ull, 8668766779560850657ull, 6760597549722180315ull, 2319764733144847750ull}}, {{8870743135199220928ull, 6224272456023675417ull, 17674118974007501202ull, 2899705916431059687ull}}, {{15700114937426414064ull, 17003712606884370079ull, 17480962699081988598ull, 3624632395538824609ull}}, {{15013457653355629676ull, 12031268721750686791ull, 8016145318570322036ull, 4530790494423530762ull}}, {{16300940060988350403ull, 16742914987948955052ull, 9621776842533839176ull, 2831744059014706726ull}}, {{1929431002525886388ull, 2481899661226642200ull, 2803849016312523163ull, 3539680073768383408ull}}, {{2411788753157357985ull, 16937432631815466462ull, 3504811270390653953ull, 4424600092210479260ull}}, {{15342426026005512453ull, 3668366367243584682ull, 11413879080848934529ull, 2765375057631549537ull}}, {{9954660495652114758ull, 9197143977481868757ull, 432290795779004449ull, 3456718822039436922ull}}, {{17055011637992531351ull, 16108115990279723850ull, 9763735531578531369ull, 4320898527549296152ull}}, {{15271068292172719999ull, 3150043466283745550ull, 6102334707236582106ull, 2700561579718310095ull}}, {{9865463328361124190ull, 13160926369709457746ull, 3016232365618339728ull, 3375701974647887619ull}}, {{3108457123596629430ull, 16451157962136822183ull, 17605348512305088372ull, 4219627468309859523ull}}, {{8860314729888975250ull, 1058601689480738056ull, 8697499810976986281ull, 2637267167693662202ull}}, {{11075393412361219062ull, 5934938130278310474ull, 1648502726866457043ull, 3296583959617077753ull}}, {{4620869728596748020ull, 2806986644420500189ull, 6672314427010459208ull, 4120729949521347191ull}}, {{5193886589586661464ull, 1754366652762812618ull, 11087725544522618861ull, 2575456218450841994ull}}, {{15715730273838102638ull, 6804644334380903676ull, 4636284893798497768ull, 3219320273063552493ull}}, {{1197918768588076682ull, 8505805417976129596ull, 10407042135675510114ull, 4024150341329440616ull}}, {{9972071267222323734ull, 9927814404662468901ull, 6504401334797193821ull, 2515093963330900385ull}}, {{17076775102455292572ull, 17021454024255474030ull, 12742187686923880180ull, 3143867454163625481ull}}, {{12122596841214339907ull, 2830073456609790922ull, 2092676553372686514ull, 3929834317704531852ull}}, {{12188309044186350346ull, 6380481928808507230ull, 10531294882712704879ull, 2456146448565332407ull}}, {{6012014268378162124ull, 3363916392583246134ull, 8552432584963493195ull, 3070183060706665509ull}}, {{16738389872327478463ull, 18039953546011221379ull, 15302226749631754397ull, 3837728825883331886ull}}, {{8155650660990980088ull, 13580813975470707314ull, 4952205700092458594ull, 2398580516177082429ull}}, {{971191289383949301ull, 7752645432483608335ull, 10801943143542961147ull, 2998225645221353036ull}}, {{15049047167012100339ull, 5079120772177122514ull, 13502428929428701434ull, 3747782056526691295ull}}, {{14017340497809950616ull, 7786136501038089475ull, 15356547108534020252ull, 2342363785329182059ull}}, {{12909989603835050366ull, 9732670626297611844ull, 14583997867240137411ull, 2927954731661477574ull}}, {{16137487004793812957ull, 7554152264444626901ull, 9006625297195395956ull, 3659943414576846968ull}}, {{6336800700710102484ull, 9442690330555783627ull, 11258281621494244945ull, 4574929268221058710ull}}, {{1654657428730120101ull, 17430896502665834527ull, 2424739995006515186ull, 2859330792638161694ull}}, {{15903379841194813838ull, 12565248591477517350ull, 12254297030612919791ull, 3574163490797702117ull}}, {{10655852764638741489ull, 11094874720919508784ull, 1482813232983986027ull, 4467704363497127647ull}}, {{6659907977899213431ull, 4628453691360999038ull, 7844287298256073123ull, 2792315227185704779ull}}, {{17548257009228792597ull, 1173881095773860893ull, 5193673104392703500ull, 3490394033982130974ull}}, {{8100263206253827034ull, 1467351369717326117ull, 15715463417345655183ull, 4362992542477663717ull}}, {{7368507513122335848ull, 7834623633714410679ull, 12128007645054728441ull, 2726870339048539823ull}}, {{4598948372975531906ull, 14404965560570401253ull, 10548323537891022647ull, 3408587923810674779ull}}, {{10360371484646802786ull, 13394520932285613662ull, 8573718403936390405ull, 4260734904763343474ull}}, {{1863546159476863838ull, 10677418591892202491ull, 9970260020887631907ull, 2662959315477089671ull}}, {{16164490754628243509ull, 8735087221437865209ull, 7851139007682151980ull, 3328699144346362089ull}}, {{6370555388003140674ull, 10918859026797331512ull, 14425609778030077879ull, 4160873930432952611ull}}, {{3981597117501962922ull, 13741815919389414051ull, 6710163102055104722ull, 2600546206520595382ull}}, {{365310378450065748ull, 7953897862381991756ull, 17611075914423656711ull, 3250682758150744227ull}}, {{456637973062582185ull, 5330686309550101791ull, 17402158874602182985ull, 4063353447688430284ull}}, {{7202927760805195722ull, 14860893989537283379ull, 1652977259771588557ull, 2539595904805268928ull}}, {{4391973682579106748ull, 4741059431639440512ull, 2066221574714485697ull, 3174494881006586160ull}}, {{5489967103223883435ull, 10538010307976688544ull, 2582776968393107121ull, 3968118601258232700ull}}, {{3431229439514927147ull, 18115471488553900100ull, 10837607642100467758ull, 2480074125786395437ull}}, {{4289036799393658933ull, 13420967323837599317ull, 18158695571052972602ull, 3100092657232994296ull}}, {{9972982017669461571ull, 7552837117942223338ull, 4251625390106664137ull, 3875115821541242871ull}}, {{10844799779470801386ull, 16249738244782359346ull, 9574794896457746941ull, 2421947388463276794ull}}, {{4332627687483725924ull, 6477114750695785471ull, 2745121583717407869ull, 3027434235579095993ull}}, {{804098590927269501ull, 12708079456797119743ull, 8043087998074147740ull, 3784292794473869991ull}}, {{7420090646970625294ull, 17165921697352975647ull, 11944459026437424193ull, 2365182996546168744ull}}, {{4663427290285893714ull, 7622344066409055847ull, 14930573783046780242ull, 2956478745682710930ull}}, {{1217598094429979238ull, 304558046156544001ull, 9439845191953699495ull, 3695598432103388663ull}}, {{12290213855087206784ull, 7107877806488921856ull, 12817432272612144040ull, 2309749020064617914ull}}, {{15362767318859008480ull, 8884847258111152320ull, 6798418303910404242ull, 2887186275080772393ull}}, {{756715074864208984ull, 1882687035784164593ull, 13109708898315393207ull, 3608982843850965491ull}}, {{5557579862007649134ull, 16188416850012369453ull, 11775450104466853604ull, 4511228554813706864ull}}, {{5779330422968474661ull, 894388494402955100ull, 7359656315291783503ull, 2819517846758566790ull}}, {{7224163028710593326ull, 14953043673285857587ull, 18422942430969505186ull, 3524397308448208487ull}}, {{4418517767460853753ull, 9467932554752546176ull, 18416992020284493579ull, 4405496635560260609ull}}, {{2761573604663033596ull, 3611614837506647408ull, 4593090985036726631ull, 2753435397225162881ull}}, {{3451967005828791995ull, 18349576602165472972ull, 10353049749723296192ull, 3441794246531453601ull}}, {{4314958757285989993ull, 4490226678997289599ull, 17552998205581508145ull, 4302242808164317001ull}}, {{9614378250944825602ull, 14335606720441775759ull, 4053094850847360734ull, 2688901755102698126ull}}, {{7406286795253644098ull, 8696136363697443891ull, 14289740600413976726ull, 3361127193878372657ull}}, {{4646172475639667219ull, 1646798417767029056ull, 4027117695235307196ull, 4201408992347965822ull}}, {{2903857797274792012ull, 10252621047959168968ull, 16352006614804230709ull, 2625880620217478638ull}}, {{3629822246593490015ull, 17427462328376349114ull, 11216636231650512578ull, 3282350775271848298ull}}, {{13760649845096638326ull, 12560955873615660584ull, 4797423252708364915ull, 4102938469089810373ull}}, {{8600406153185398954ull, 5544754411796093913ull, 5304232542156422024ull, 2564336543181131483ull}}, {{15362193709909136597ull, 6930943014745117391ull, 2018604659268139626ull, 3205420678976414354ull}}, {{14591056118959032842ull, 17887050805286172547ull, 11746627860939950340ull, 4006775848720517942ull}}, {{6813567065135701574ull, 1956034716449082034ull, 2729956394660081059ull, 2504234905450323714ull}}, {{17740330868274402776ull, 16280101450843516254ull, 12635817530179877131ull, 3130293631812904642ull}}, {{12952041548488227661ull, 15738440795127007414ull, 6571399875870070606ull, 3912867039766130803ull}}, {{3483339949377754385ull, 5224839478526991730ull, 1801281913205100177ull, 2445541899853831752ull}}, {{13577546973576968789ull, 11142735366586127566ull, 2251602391506375221ull, 3056927374817289690ull}}, {{7748561680116435178ull, 93361152950495746ull, 12037875026237744835ull, 3821159218521612112ull}}, {{9454537068500159890ull, 16199251785089917505ull, 7523671891398590521ull, 2388224511576007570ull}}, {{16429857354052587767ull, 6414006676080233169ull, 181217827393462344ull, 2985280639470009463ull}}, {{6702263637283570996ull, 8017508345100291462ull, 14061580339523991642ull, 3731600799337511828ull}}, {{18023972828584395585ull, 9622628734115070067ull, 18011859749057270584ull, 2332250499585944892ull}}, {{17918280017303106577ull, 12028285917643837584ull, 4068080612612036614ull, 2915313124482431116ull}}, {{3951105947919331605ull, 5811985360200021173ull, 5085100765765045768ull, 3644141405603038895ull}}, {{9550568453326552410ull, 7264981700250026466ull, 1744689938778919306ull, 4555176757003798619ull}}, {{10580791301756483160ull, 9152299581083654445ull, 17231332276232682230ull, 2846985473127374136ull}}, {{17837675145622991854ull, 2217002439499792248ull, 3092421271581301172ull, 3558731841409217671ull}}, {{3850349858319188202ull, 2771253049374740311ull, 17700584644758790177ull, 4448414801761522088ull}}, {{9323997689090574482ull, 13261248201927682454ull, 11062865402974243860ull, 2780259251100951305ull}}, {{2431625074508442295ull, 16576560252409603068ull, 18440267772145192729ull, 3475324063876189131ull}}, {{3039531343135552868ull, 6885642260229840123ull, 18438648696754103008ull, 4344155079845236414ull}}, {{18040608153955578207ull, 4303526412643650076ull, 6912469417043926476ull, 2715096924903272759ull}}, {{4104016118734921143ull, 5379408015804562596ull, 4028900752877520191ull, 3393871156129090949ull}}, {{5130020148418651428ull, 2112574001328315341ull, 9647811959524288143ull, 4242338945161363686ull}}, {{5512105601975351095ull, 8237887778471278944ull, 1418196456275292185ull, 2651461840725852304ull}}, {{6890132002469188868ull, 14909045741516486584ull, 1772745570344115231ull, 3314327300907315380ull}}, {{8612665003086486085ull, 14024621158468220326ull, 2215931962930144039ull, 4142909126134144225ull}}, {{771229608501665900ull, 15682917251683719560ull, 12914172522899809784ull, 2589318203833840140ull}}, {{964037010627082374ull, 1156902490895097834ull, 16142715653624762231ull, 3236647754792300175ull}}, {{10428418300138628776ull, 15281186168901036004ull, 15566708548603564884ull, 4045809693490375219ull}}, {{15741133474441418793ull, 327369318708371694ull, 7423349833663534101ull, 2528631058431484512ull}}, {{10453044806196997683ull, 5020897666812852522ull, 9279187292079417626ull, 3160788823039355640ull}}, {{3842933970891471296ull, 15499494120370841461ull, 11598984115099272032ull, 3950986028799194550ull}}, {{4707676741020863512ull, 9687183825231775913ull, 2637679053509657116ull, 2469366267999496594ull}}, {{10496281944703467294ull, 12108979781539719891ull, 12520470853741847203ull, 3086707834999370742ull}}, {{8508666412451946213ull, 10524538708497261960ull, 6427216530322533196ull, 3858384793749213428ull}}, {{5317916507782466383ull, 15801208729665564533ull, 13240382368306359055ull, 2411490496093258392ull}}, {{11259081653155470883ull, 15139824893654567762ull, 16550477960382948819ull, 3014363120116572990ull}}, {{4850480029589562796ull, 14313095098640821799ull, 11464725413623910216ull, 3767953900145716238ull}}, {{9949079046134558604ull, 8945684436650513624ull, 2553767365087555981ull, 2354971187591072649ull}}, {{12436348807668198254ull, 15793791564240529934ull, 7803895224786832880ull, 2943713984488840811ull}}, {{6322063972730472010ull, 1295495381591110802ull, 5143183012556153197ull, 3679642480611051014ull}}, {{17125952002767865820ull, 6231055245416276406ull, 15652350802549967304ull, 4599553100763813767ull}}, {{6092033983302528234ull, 3894409528385172754ull, 16700248279234811421ull, 2874720687977383604ull}}, {{16838414515982936100ull, 9479697928908853846ull, 2428566275333962660ull, 3593400859971729506ull}}, {{11824646108123894317ull, 11849622411136067308ull, 12259079881022229133ull, 4491751074964661882ull}}, {{16613775854432209756ull, 9711857016173736019ull, 12273610944066281112ull, 2807344421852913676ull}}, {{16155533799612874291ull, 12139821270217170024ull, 15342013680082851390ull, 3509180527316142095ull}}, {{1747673175806541248ull, 5951404550916686723ull, 14565831081676176334ull, 4386475659145177619ull}}, {{17233196799374945944ull, 17554685899605092913ull, 6797801416833916256ull, 2741547286965736012ull}}, {{7706437943936518718ull, 3496613300796814526ull, 8497251771042395321ull, 3426934108707170015ull}}, {{409675393065872590ull, 8982452644423406062ull, 6009878695375606247ull, 4283667635883962519ull}}, {{14091105175948334081ull, 12531561930405710644ull, 10673703212250835760ull, 2677292272427476574ull}}, {{17613881469935417601ull, 15664452413007138305ull, 4118756978458768892ull, 3346615340534345718ull}}, {{8182293782137108289ull, 1133821442549371266ull, 14371818259928236924ull, 4183269175667932147ull}}, {{9725619632263080585ull, 9932010438448132849ull, 6676543403241454125ull, 2614543234792457592ull}}, {{16768710558756238635ull, 17026699066487553965ull, 8345679254051817656ull, 3268179043490571990ull}}, {{7125830143163134581ull, 2836629759399890841ull, 1208727030709996263ull, 4085223804363214988ull}}, {{15982858885545428873ull, 8690422627266013631ull, 9978826431048523472ull, 2553264877727009367ull}}, {{15366887588504398188ull, 10863028284082517039ull, 7861847020383266436ull, 3191581097158761709ull}}, {{14596923467203109831ull, 13578785355103146299ull, 14438994793906470949ull, 3989476371448452136ull}}, {{6817234157788249692ull, 10792583856153160389ull, 9024371746191544343ull, 2493422732155282585ull}}, {{13133228715662700019ull, 8879043801764062582ull, 15892150701166818333ull, 3116778415194103231ull}}, {{7193163857723599216ull, 15710490770632466132ull, 15253502358031135012ull, 3895973018992629039ull}}, {{13719099447932025318ull, 595684694790515524ull, 16450968001410541239ull, 2434983136870393149ull}}, {{17148874309915031648ull, 14579663923770308117ull, 6728651946481012836ull, 3043728921087991437ull}}, {{7601034832111625847ull, 18224579904712885147ull, 13022500951528653949ull, 3804661151359989296ull}}, {{2444803760856072203ull, 13696205449659247169ull, 8139063094705408718ull, 2377913219599993310ull}}, {{7667690719497478157ull, 7896884775219283153ull, 950456831526985090ull, 2972391524499991638ull}}, {{14196299417799235600ull, 647733932169328133ull, 10411443076263507171ull, 3715489405624989547ull}}, {{11178530145338216202ull, 16545734772101687747ull, 4201308913450998029ull, 2322180878515618467ull}}, {{9361476663245382349ull, 6847110409844945972ull, 639950123386359633ull, 2902726098144523084ull}}, {{11701845829056727936ull, 13170574030733570369ull, 799937654232949541ull, 3628407622680653855ull}}, {{792249231038746208ull, 2628159483134799250ull, 14834980123073350639ull, 4535509528350817318ull}}, {{5106841787826604284ull, 8560128704600331387ull, 4660176558493456245ull, 2834693455219260824ull}}, {{1771866216355867451ull, 15311846899177802138ull, 5825220698116820306ull, 3543366819024076030ull}}, {{11438204807299610122ull, 9916436587117476864ull, 16504897909500801191ull, 4429208523780095037ull}}, {{7148878004562256326ull, 13115301894589504896ull, 12621404202651694696ull, 2768255327362559398ull}}, {{8936097505702820408ull, 16394127368236881120ull, 6553383216459842562ull, 3460319159203199248ull}}, {{11170121882128525510ull, 11269287173441325592ull, 8191729020574803203ull, 4325398949003999060ull}}, {{6981326176330328444ull, 4737461474187134543ull, 14343202674714027810ull, 2703374343127499412ull}}, {{4114971701985522650ull, 15145198879588693987ull, 17929003343392534762ull, 3379217928909374265ull}}, {{532028609054515409ull, 9708126562631091676ull, 8576196123958504741ull, 4224022411136717832ull}}, {{9555889917513847939ull, 8373422110858126249ull, 5360122577474065463ull, 2640014006960448645ull}}, {{16556548415319697827ull, 5855091620145269907ull, 11311839240269969733ull, 3300017508700560806ull}}, {{16083999500722234380ull, 11930550543608975288ull, 4916427013482686358ull, 4125021885875701008ull}}, {{10052499687951396488ull, 2844908071328221651ull, 3072766883426678974ull, 2578138678672313130ull}}, {{7953938591511857706ull, 12779507126015052872ull, 13064330641138124525ull, 3222673348340391412ull}}, {{9942423239389822132ull, 2139325852236652378ull, 16330413301422655657ull, 4028341685425489265ull}}, {{10825700543046026737ull, 12866293703716377496ull, 3288979285748077929ull, 2517713553390930791ull}}, {{13532125678807533421ull, 2247809074363308158ull, 17946282162467261124ull, 3147141941738663488ull}}, {{7691785061654640968ull, 2809761342954135198ull, 3986108629374524789ull, 3933927427173329361ull}}, {{195679645106762701ull, 4061943848560028451ull, 14020532939427547753ull, 2458704641983330850ull}}, {{14079657611665617088ull, 9689115829127423467ull, 8302294137429658883ull, 3073380802479163563ull}}, {{12987885996154633456ull, 7499708767981891430ull, 5766181653359685700ull, 3841726003098954454ull}}, {{3505742729169258006ull, 13910690016843457952ull, 17438921588631967274ull, 2401078751936846533ull}}, {{4382178411461572508ull, 8164990484199546632ull, 7963593930507795381ull, 3001348439921058167ull}}, {{5477723014326965634ull, 14817924123676821194ull, 5342806394707356322ull, 3751685549901322709ull}}, {{8035262902381741426ull, 13872888595725401150ull, 5645097005905791653ull, 2344803468688326693ull}}, {{820706591122400974ull, 3506052689374587726ull, 11668057275809627471ull, 2931004335860408366ull}}, {{10249255275757777025ull, 18217623917000398369ull, 5361699557907258530ull, 3663755419825510458ull}}, {{17423255113124609185ull, 13548657859395722153ull, 15925496484238848971ull, 4579694274781888072ull}}, {{3972005418061798885ull, 6162068152908632394ull, 9953435302649280607ull, 2862308921738680045ull}}, {{14188378809432024414ull, 3090899172708402588ull, 17053480146738988663ull, 3577886152173350056ull}}, {{17735473511790030518ull, 17698682021167666947ull, 2870106109714184212ull, 4472357690216687571ull}}, {{8778827935655075122ull, 1838304226375016034ull, 17934717383067222797ull, 2795223556385429731ull}}, {{1750162882714068094ull, 6909566301396157947ull, 17806710710406640592ull, 3494029445481787164ull}}, {{16022761658674748829ull, 8636957876745197433ull, 3811644314298749124ull, 4367536806852233956ull}}, {{3096697009030636163ull, 14621470709820524204ull, 11605649733291494010ull, 2729710504282646222ull}}, {{3870871261288295203ull, 9053466350420879447ull, 5283690129759591705ull, 3412138130353307778ull}}, {{226903058182981100ull, 15928518956453487213ull, 15827984699054265439ull, 4265172662941634722ull}}, {{2447657420578057140ull, 16872853375424511364ull, 14504176455336303803ull, 2665732914338521701ull}}, {{3059571775722571424ull, 16479380700853251301ull, 4295162513888216042ull, 3332166142923152127ull}}, {{8436150738080602184ull, 11375853839211788318ull, 757267123932882149ull, 4165207678653940159ull}}, {{660908192872988461ull, 9415751658721061651ull, 7390820980099133199ull, 2603254799158712599ull}}, {{14661193296373399289ull, 7158003554973939159ull, 4626840206696528595ull, 3254068498948390749ull}}, {{13714805602039361207ull, 4335818425290036045ull, 10395236276798048648ull, 4067585623685488436ull}}, {{10877596510488294706ull, 2709886515806272528ull, 15720394709853556213ull, 2542241014803430272ull}}, {{13596995638110368383ull, 7999044163185228564ull, 1203749313607393650ull, 3177801268504287841ull}}, {{16996244547637960478ull, 775433167126759897ull, 6116372660436629967ull, 3972251585630359801ull}}, {{3705123814632643443ull, 7402174757095306792ull, 15351947958841363489ull, 2482657241018974875ull}}, {{4631404768290804304ull, 13864404464796521394ull, 14578248930124316457ull, 3103321551273718594ull}}, {{15012627997218281188ull, 3495447525713488030ull, 8999439125800619764ull, 3879151939092148243ull}}, {{4771206479834037838ull, 11408026740425705827ull, 3318806444411693400ull, 2424469961932592652ull}}, {{1352322081365159394ull, 14260033425532132284ull, 4148508055514616750ull, 3030587452415740815ull}}, {{1690402601706449242ull, 8601669745060389547ull, 573949050965883034ull, 3788234315519676019ull}}, {{17197402690562388441ull, 9987729609090131370ull, 16499619221349534560ull, 2367646447199797511ull}}, {{12273381326348209743ull, 12484662011362664213ull, 16012838008259530296ull, 2959558058999746889ull}}, {{1506668602653098466ull, 15605827514203330267ull, 6180989455042249158ull, 3699447573749683612ull}}, {{17082568941154044206ull, 5141956177949693512ull, 13086490446256181532ull, 2312154733593552257ull}}, {{2906467102733003641ull, 6427445222437116891ull, 2523055002538063203ull, 2890193416991940322ull}}, {{17468141933698418263ull, 3422620509619008209ull, 12377190790027354812ull, 3612741771239925402ull}}, {{8000119361840859116ull, 4278275637023760262ull, 6248116450679417707ull, 4515927214049906753ull}}, {{388388582723149044ull, 368079263926156212ull, 15434287827743105827ull, 2822454508781191720ull}}, {{485485728403936305ull, 14295157135189858977ull, 846115710969330667ull, 3528068135976489651ull}}, {{5218543178932308285ull, 13257260400559935817ull, 14892702693993827046ull, 4410085169970612063ull}}, {{14790804532901162438ull, 3674101731922571981ull, 16225468211387223760ull, 2756303231231632539ull}}, {{4653447610844289336ull, 4592627164903214977ull, 15670149245806641796ull, 3445379039039540674ull}}, {{10428495531982749574ull, 5740783956129018721ull, 10364314520403526437ull, 4306723798799425843ull}}, {{18047024753557688244ull, 5893832981794330652ull, 4171853566038510071ull, 2691702374249641152ull}}, {{4112036868237558688ull, 2755605208815525412ull, 5214816957548137589ull, 3364627967812051440ull}}, {{5140046085296948360ull, 8056192529446794669ull, 6518521196935171986ull, 4205784959765064300ull}}, {{5518371812524286677ull, 9646806349331634572ull, 13297447784939258299ull, 2628615599853165187ull}}, {{6897964765655358347ull, 7446821918237155311ull, 12010123712746684970ull, 3285769499816456484ull}}, {{4010769938641810029ull, 85155360941668331ull, 15012654640933356213ull, 4107211874770570605ull}}, {{200888202437437316ull, 2359065109802236659ull, 11688752159797041585ull, 2567007421731606628ull}}, {{14086168308328960357ull, 7560517405680183727ull, 14610940199746301981ull, 3208759277164508285ull}}, {{12996024366983812543ull, 14062332775527617563ull, 4428617194400713764ull, 4010949096455635357ull}}, {{5816672220151188887ull, 18012330021559536785ull, 5073728755714140054ull, 2506843185284772098ull}}, {{11882526293616374013ull, 13292040490094645173ull, 15565532981497450876ull, 3133553981605965122ull}}, {{1018099811738303804ull, 16615050612618306467ull, 10233544190017037787ull, 3916942477007456403ull}}, {{16777213446832297542ull, 8078563623672747589ull, 4090122109546954665ull, 2448089048129660252ull}}, {{7136458753258208215ull, 14709890548018322391ull, 5112652636933693331ull, 3060111310162075315ull}}, {{4308887423145372365ull, 13775677166595515085ull, 1779129777739728760ull, 3825139137702594144ull}}, {{4998897648679551680ull, 8609798229122196928ull, 1111956111087330475ull, 2390711961064121340ull}}, {{6248622060849439600ull, 6150561767975358256ull, 1389945138859163094ull, 2988389951330151675ull}}, {{7810777576061799500ull, 16911574246823973628ull, 15572489478856117579ull, 3735487439162689593ull}}, {{14105108021893400496ull, 8263890895051289565ull, 2815276896643991631ull, 2334679649476680996ull}}, {{3796326972084586908ull, 5718177600386724053ull, 3519096120804989539ull, 2918349561845851245ull}}, {{9357094733533121538ull, 2536035982056017162ull, 9010556169433624828ull, 3647936952307314056ull}}, {{2472996380061626115ull, 3170044977570021453ull, 11263195211792031035ull, 4559921190384142570ull}}, {{3851465746752210274ull, 18122179175477121072ull, 11651183025797407300ull, 2849950743990089106ull}}, {{4814332183440262842ull, 4205979895636849724ull, 5340606745391983318ull, 3562438429987611383ull}}, {{6017915229300328553ull, 14480846906400837963ull, 2064072413312591243ull, 4453048037484514229ull}}, {{1455354009099011394ull, 6744686307286829775ull, 3595888267534063479ull, 2783155023427821393ull}}, {{15654250566655927954ull, 3819171865681149314ull, 9106546352844967253ull, 3478943779284776741ull}}, {{10344441171465134134ull, 9385650850528824547ull, 15994868959483596970ull, 4348679724105970926ull}}, {{4159432722952014882ull, 10477717800007903246ull, 5385107081249860202ull, 2717924827566231829ull}}, {{14422662940544794410ull, 3873775213155103249ull, 11343069869989713157ull, 3397406034457789786ull}}, {{4193270620398829301ull, 9453905034871266966ull, 4955465300632365638ull, 4246757543072237233ull}}, {{16455852193031432025ull, 1297004628367153949ull, 14626380858963698284ull, 2654223464420148270ull}}, {{6734757186007126319ull, 1621255785458942437ull, 9059604036849847047ull, 3317779330525185338ull}}, {{13030132500936295803ull, 15861627787105841758ull, 2101133009207533000ull, 4147224163156481673ull}}, {{3532146794657796973ull, 9913517366941151099ull, 12842423176823177885ull, 2592015101972801045ull}}, {{18250241548604409928ull, 17003582727103826777ull, 2217970915746808644ull, 3240018877466001307ull}}, {{8977743880473348698ull, 2807734335170231856ull, 16607521699965674518ull, 4050023596832501633ull}}, {{5611089925295842937ull, 15589892014763558622ull, 3462172034837464717ull, 2531264748020313521ull}}, {{16237234443474579479ull, 5652306963172284565ull, 8939401061974218801ull, 3164080935025391901ull}}, {{6461484999061060636ull, 11677069722392743611ull, 15785937345895161405ull, 3955101168781739876ull}}, {{1732585115199468946ull, 9604011585709158709ull, 642838804329700070ull, 2471938230488587423ull}}, {{6777417412426724086ull, 2781642445281672578ull, 14638606560694288800ull, 3089922788110734278ull}}, {{17695143802388180916ull, 3477053056602090722ull, 9074886164013085192ull, 3862403485138417848ull}}, {{15671150894920000976ull, 2173158160376306701ull, 5671803852508178245ull, 2414002178211511155ull}}, {{5753880563367837508ull, 7328133718897771281ull, 2478068797207834902ull, 3017502722764388944ull}}, {{11804036722637184789ull, 18383539185476989909ull, 3097585996509793627ull, 3771878403455486180ull}}, {{9683365960861934446ull, 9183868981709424741ull, 11159363284673396825ull, 2357424002159678862ull}}, {{16715893469504805961ull, 16091522245564168830ull, 4725832068986970223ull, 2946780002699598578ull}}, {{11671494800026231643ull, 15502716788527823134ull, 15130662123088488587ull, 3683475003374498222ull}}, {{5365996463178013746ull, 14766709967232391014ull, 9689955617005834926ull, 4604343754218122778ull}}, {{17188805844768422303ull, 4617507711092856479ull, 10667908279056034733ull, 2877714846386326736ull}}, {{16874321287533139975ull, 10383570657293458503ull, 13334885348820043416ull, 3597143557982908420ull}}, {{16481215590989037064ull, 12979463321616823129ull, 16668606686025054270ull, 4496429447478635525ull}}, {{3383230716727066309ull, 3500478557583126552ull, 12723722187979352871ull, 2810268404674147203ull}}, {{4229038395908832887ull, 18210656252261071902ull, 11292966716546803184ull, 3512835505842684004ull}}, {{14509670031740816916ull, 4316576241616788261ull, 14116208395683503981ull, 4391044382303355005ull}}, {{11374386779051704525ull, 5003703160224186615ull, 11128473256515883940ull, 2744402738939596878ull}}, {{9606297455387242752ull, 6254628950280233269ull, 4687219533790079117ull, 3430503423674496098ull}}, {{16619557837661441344ull, 12429972206277679490ull, 15082396454092374704ull, 4288129279593120122ull}}, {{14998909666965788744ull, 7768732628923549681ull, 14038183802235122094ull, 2680080799745700076ull}}, {{4913579028425072218ull, 487543749299661294ull, 17547729752793902618ull, 3350100999682125095ull}}, {{15365345822386116080ull, 9832801723479352425ull, 17322976172564990368ull, 4187626249602656369ull}}, {{2685812111350240694ull, 6145501077174595266ull, 3909331080212037124ull, 2617266406001660231ull}}, {{12580637176042576676ull, 7681876346468244082ull, 274977831837658501ull, 3271583007502075289ull}}, {{6502424433198445037ull, 14214031451512693007ull, 4955408308224461030ull, 4089478759377594111ull}}, {{10981544298390110004ull, 4272083638768045225ull, 10014659220281370000ull, 2555924224610996319ull}}, {{18338616391415025409ull, 5340104548460056531ull, 7906638006924324596ull, 3194905280763745399ull}}, {{18311584470841393857ull, 6675130685575070664ull, 5271611490228017841ull, 3993631600954681749ull}}, {{11444740294275871161ull, 15701171724552888925ull, 5600600190606205102ull, 2496019750596676093ull}}, {{470867312562675239ull, 10403092618836335349ull, 11612436256685144282ull, 3120024688245845116ull}}, {{5200270159130731953ull, 3780493736690643378ull, 14515545320856430353ull, 3900030860307306395ull}}, {{7861854867884095375ull, 13892023631500121871ull, 6766372816321575018ull, 2437519287692066497ull}}, {{5215632566427731314ull, 8141657502520376531ull, 13069652038829356677ull, 3046899109615083121ull}}, {{1907854689607276238ull, 14788757896577858568ull, 2502006993254532134ull, 3808623887018853902ull}}, {{1192409181004547649ull, 4631287666933773701ull, 15398812426066246296ull, 2380389929386783688ull}}, {{6102197494683072465ull, 5789109583667217126ull, 801771458873256254ull, 2975487411733479611ull}}, {{16851118905208616390ull, 16459759016438797215ull, 14837272378873734029ull, 3719359264666849513ull}}, {{17449478343396467100ull, 12593192394487942211ull, 2355766209155001912ull, 2324599540416780946ull}}, {{17200161910818195970ull, 15741490493109927764ull, 12168079798298528198ull, 2905749425520976182ull}}, {{3053458314813193347ull, 10453491079532633898ull, 5986727711018384440ull, 3632186781901220228ull}}, {{13040194930371267492ull, 13066863849415792372ull, 7483409638772980550ull, 4540233477376525285ull}}, {{17373493868336817990ull, 3555103887457482328ull, 6982974033446806796ull, 2837645923360328303ull}}, {{3270123261711470872ull, 4443879859321852911ull, 4117031523381120591ull, 3547057404200410379ull}}, {{17922712132421502302ull, 943163805724928234ull, 534603385799012835ull, 4433821755250512974ull}}, {{15813381101190826843ull, 16730378443073937810ull, 14169185171406546733ull, 2771138597031570608ull}}, {{10543354339633757745ull, 7077914998560258551ull, 17711481464258183417ull, 3463923246289463260ull}}, {{8567506906114809278ull, 13459079766627711093ull, 3692607756613177655ull, 4329904057861829076ull}}, {{7660534825535449751ull, 15329453881783401289ull, 11531251884738011842ull, 2706190036163643172ull}}, {{14187354550346700092ull, 9938445315374475803ull, 14414064855922514803ull, 3382737545204553965ull}}, {{13122507169505987211ull, 7811370625790706850ull, 4182523014620979792ull, 4228421931505692457ull}}, {{12813252999368629911ull, 4882106641119191781ull, 14143291930206582130ull, 2642763707191057785ull}}, {{2181508193928623677ull, 15326005338253765535ull, 3844056857476063950ull, 3303454633988822232ull}}, {{16561943297692943308ull, 9934134635962431110ull, 4805071071845079938ull, 4129318292486027790ull}}, {{5739528542630701664ull, 10820520165903907348ull, 16838227475185338673ull, 2580823932803767368ull}}, {{7174410678288377079ull, 18137336225807272089ull, 2601040270272121725ull, 3226029916004709211ull}}, {{13579699366287859253ull, 8836612226976926399ull, 17086358393122315869ull, 4032537395005886513ull}}, {{15404841131570993889ull, 7828725651074272951ull, 3761444968060365562ull, 2520335871878679071ull}}, {{14644365396036354458ull, 562535026988065381ull, 90120191648069049ull, 3150419839848348839ull}}, {{4470398689763279360ull, 5314854802162469631ull, 13947708294842250023ull, 3938024799810436048ull}}, {{9711528208743131456ull, 10239313278992625375ull, 8717317684276406264ull, 2461265499881522530ull}}, {{7527724242501526416ull, 12799141598740781719ull, 1673275068490732022ull, 3076581874851903163ull}}, {{4797969284699520116ull, 6775554961571201341ull, 15926651890895578740ull, 3845727343564878953ull}}, {{5304573812150894025ull, 13458093887836776646ull, 3036628404168654856ull, 2403579589728049346ull}}, {{15854089302043393339ull, 16822617359795970807ull, 13019157542065594378ull, 3004474487160061682ull}}, {{15205925609126853769ull, 11804899662890187701ull, 7050574890727217165ull, 3755593108950077103ull}}, {{11809546514917977558ull, 9683905298520061265ull, 11324138334345592584ull, 2347245693093798189ull}}, {{926875088365308235ull, 12104881623150076582ull, 320114862649827018ull, 2934057116367247737ull}}, {{10381965897311411102ull, 5907729992082819919ull, 5011829596739671677ull, 3667571395459059671ull}}, {{8365771353211875973ull, 11996348508530912803ull, 1653100977497201692ull, 4584464244323824589ull}}, {{2922764086543728532ull, 16721089854686596310ull, 3339031120149445009ull, 2865290152702390368ull}}, {{12876827145034436472ull, 7066304263076081675ull, 4173788900186806262ull, 3581612690877987960ull}}, {{11484347912865657686ull, 18056252365699877902ull, 5217236125233507827ull, 4477015863597484950ull}}, {{2566031427113648150ull, 8979314719348729737ull, 17095830633553106104ull, 2798134914748428093ull}}, {{7819225302319448092ull, 11224143399185912171ull, 7534730236659218918ull, 3497668643435535117ull}}, {{5162345609471922210ull, 4806807212127614406ull, 14030098814251411552ull, 4372085804294418896ull}}, {{17061524061202115094ull, 3004254507579759003ull, 8768811758907132220ull, 2732553627684011810ull}}, {{16715219058075255963ull, 3755318134474698754ull, 1737642661779139467ull, 3415692034605014763ull}}, {{11670651785739294145ull, 82461649665985539ull, 16007111382506088046ull, 4269615043256268453ull}}, {{4988314356873364889ull, 13886596586323404674ull, 12310287623279998980ull, 2668509402035167783ull}}, {{15458764982946481919ull, 17358245732904255842ull, 10776173510672610821ull, 3335636752543959729ull}}, {{10100084191828326591ull, 7862749110848156091ull, 18081902906768151431ull, 4169545940679949661ull}}, {{4006709610679010168ull, 11831747221921179413ull, 13607032325943788596ull, 2605966212924968538ull}}, {{9620073031776150613ull, 14789684027401474266ull, 7785418370574959937ull, 3257457766156210673ull}}, {{2801719252865412459ull, 4652046978969679121ull, 14343458981646087826ull, 4071822207695263341ull}}, {{13280289579109352547ull, 7519215380283437354ull, 11270504872742498843ull, 2544888879809539588ull}}, {{7376989937031914875ull, 4787333206926908789ull, 14088131090928123554ull, 3181111099761924485ull}}, {{13832923439717281498ull, 15207538545513411794ull, 3775105808377990730ull, 3976388874702405607ull}}, {{13257263168250688840ull, 14116397609373270275ull, 9276970157877326062ull, 2485243046689003504ull}}, {{11959892941885973146ull, 8422124974861812036ull, 11596212697346657578ull, 3106553808361254380ull}}, {{14949866177357466433ull, 1304284181722489237ull, 14495265871683321973ull, 3883192260451567975ull}}, {{11649509370062110473ull, 3121020622790249725ull, 15977070197443158089ull, 2426995162782229984ull}}, {{726828657295474379ull, 8512961796915200061ull, 1524593673094395995ull, 3033743953477787481ull}}, {{5520221840046730877ull, 6029516227716612172ull, 6517428109795382898ull, 3792179941847234351ull}}, {{12673510686883982607ull, 8380133660750270511ull, 10990921596263196167ull, 2370112463654521469ull}}, {{11230202340177590354ull, 5863481057510450235ull, 18350338013756383113ull, 2962640579568151836ull}}, {{9426066906794600038ull, 11941037340315450698ull, 4491178443485927275ull, 3703300724460189796ull}}, {{10502977835174012928ull, 5157305328483462734ull, 12030358564033480355ull, 2314562952787618622ull}}, {{3905350257112740352ull, 1834945642176940514ull, 5814576168187074636ull, 2893203690984523278ull}}, {{14105059858245701248ull, 2293682052721175642ull, 16491592247088619103ull, 3616504613730654097ull}}, {{8407952785952350752ull, 16702160621183633265ull, 6779432253578610166ull, 4520630767163317622ull}}, {{16784185537288688980ull, 5827164369812382886ull, 18072203213768795066ull, 2825394229477073513ull}}, {{11756859884756085417ull, 16507327499120254416ull, 8755195961928830120ull, 3531742786846341892ull}}, {{14696074855945106771ull, 2187415300190766404ull, 10943994952411037651ull, 4414678483557927365ull}}, {{18408418821820467540ull, 17508035627115086666ull, 9145839854470592483ull, 2759174052223704603ull}}, {{13787151490420808617ull, 17273358515466470429ull, 6820613799660852700ull, 3448967565279630754ull}}, {{3398881307743847059ull, 3144954070623536421ull, 17749139286430841684ull, 4311209456599538442ull}}, {{4430143826553598364ull, 11188968330994486071ull, 15704898072446663956ull, 2694505910374711526ull}}, {{925993764764610051ull, 13986210413743107589ull, 10407750553703554137ull, 3368132387968389408ull}}, {{5769178224383150468ull, 3647704961896720774ull, 13009688192129442672ull, 4210165484960486760ull}}, {{17440794445521632755ull, 2279815601185450483ull, 8131055120080901670ull, 2631353428100304225ull}}, {{17189307038474653039ull, 12073141538336588912ull, 14775504918528514991ull, 3289191785125380281ull}}, {{3039889724383764683ull, 10479740904493348237ull, 4634323092878480027ull, 4111489731406725352ull}}, {{4205774086953546879ull, 4243995056094648696ull, 2896451933049050017ull, 2569681082129203345ull}}, {{5257217608691933599ull, 9916679838545698774ull, 8232250934738700425ull, 3212101352661504181ull}}, {{15794894047719692806ull, 17007535816609511371ull, 14901999686850763435ull, 4015126690826880226ull}}, {{7565965770611114052ull, 8323866876167250655ull, 13925435822709115051ull, 2509454181766800141ull}}, {{4845771194836504661ull, 5793147576781675415ull, 3571736723104230102ull, 3136817727208500177ull}}, {{1445527975118242922ull, 16464806507831870077ull, 9076356922307675531ull, 3921022159010625221ull}}, {{3209297993662595778ull, 7984661058181224846ull, 7978566085655991159ull, 2450638849381640763ull}}, {{13234994528933020531ull, 5369140304299143153ull, 5361521588642601045ull, 3063298561727050954ull}}, {{2708685105884111951ull, 11323111398801316846ull, 15925274022658027114ull, 3829123202158813692ull}}, {{15527986246459733682ull, 11688630642678210932ull, 729924227306491138ull, 2393202001349258558ull}}, {{963238734365115486ull, 5387416266492987858ull, 10135777320987889731ull, 2991502501686573197ull}}, {{10427420454811170166ull, 2122584314688846918ull, 17281407669662250068ull, 3739378127108216496ull}}, {{1905451765829593450ull, 10549987233535305132ull, 10800879793538906292ull, 2337111329442635310ull}}, {{2381814707286991812ull, 13187484041919131415ull, 4277727705068857057ull, 2921389161803294138ull}}, {{16812326439390903477ull, 2649296997116750556ull, 14570531668190847130ull, 3651736452254117672ull}}, {{2568663975529077730ull, 12534993283250714004ull, 18213164585238558912ull, 4564670565317647090ull}}, {{10828787021560449389ull, 7834370802031696252ull, 15994913884201487224ull, 2852919103323529431ull}}, {{13535983776950561737ull, 9792963502539620315ull, 15381956336824471126ull, 3566148879154411789ull}}, {{12308293702760814267ull, 3017832341319749586ull, 5392387365748425196ull, 4457686098943014737ull}}, {{12304369582652896821ull, 11109517250179619299ull, 14899457149661235507ull, 2786053811839384210ull}}, {{10768775959888733122ull, 9275210544297136220ull, 9400949400221768576ull, 3482567264799230263ull}}, {{13460969949860916402ull, 11594013180371420275ull, 7139500731849822816ull, 4353209080999037829ull}}, {{6107263209449378800ull, 7246258237732137672ull, 6768030966619833212ull, 2720755675624398643ull}}, {{7634079011811723499ull, 9057822797165172090ull, 3848352689847403611ull, 3400944594530498304ull}}, {{319226727909878566ull, 6710592478029077209ull, 4810440862309254514ull, 4251180743163122880ull}}, {{11728731751012143864ull, 8805806317195561159ull, 3006525538943284071ull, 2656987964476951800ull}}, {{10049228670337791926ull, 6395571878067063545ull, 3758156923679105089ull, 3321234955596189750ull}}, {{17173221856349627811ull, 12606150866011217335ull, 13921068191453657169ull, 4151543694495237187ull}}, {{17650792687859599238ull, 961315263615928978ull, 6394824610444841779ull, 2594714809059523242ull}}, {{12840118822969723240ull, 15036702134802074935ull, 17216902799910828031ull, 3243393511324404052ull}}, {{11438462510284766145ull, 14184191650075205765ull, 3074384426178983423ull, 4054241889155505066ull}}, {{9454882078141672793ull, 15782648808938085459ull, 6533176284789252543ull, 2533901180722190666ull}}, {{7206916579249703087ull, 15116624992745218920ull, 17389842392841341487ull, 3167376475902738332ull}}, {{9008645724062128859ull, 14284095222504135746ull, 3290558917342125243ull, 3959220594878422916ull}}, {{10242089595966218441ull, 6621716504851390889ull, 11279971360193604085ull, 2474512871799014322ull}}, {{17414298013385160955ull, 12888831649491626515ull, 4876592163387229298ull, 3093141089748767903ull}}, {{17156186498304063290ull, 6887667525009757336ull, 1484054185806648719ull, 3866426362185959879ull}}, {{10722616561440039556ull, 11222321230772180191ull, 7845062893770237305ull, 2416516476366224924ull}}, {{8791584683372661541ull, 192843483183061527ull, 9806328617212796632ull, 3020645595457781155ull}}, {{6377794835788439022ull, 241054353978826909ull, 7646224753088607886ull, 3775806994322226444ull}}, {{6291964781581468341ull, 13985717026518930530ull, 14002262507535155736ull, 2359879371451391527ull}}, {{17088328013831611234ull, 17482146283148663162ull, 12891142115991556766ull, 2949849214314239409ull}}, {{12137037980434738235ull, 12629310817081053145ull, 2278869589707282246ull, 3687311517892799262ull}}, {{1336239420261259081ull, 6563266484496540624ull, 12071959023988878616ull, 4609139397365999077ull}}, {{835149637663286926ull, 4102041552810337890ull, 9850817399206743087ull, 2880712123353749423ull}}, {{10267309083933884466ull, 515865922585534458ull, 7701835730581040955ull, 3600890154192186779ull}}, {{3610764318062579774ull, 14479890458514081785ull, 5015608644798913289ull, 4501112692740233474ull}}, {{13785942744857582119ull, 2132402508930219259ull, 7746441421426708710ull, 2813195432962645921ull}}, {{12620742412644589744ull, 11888875173017549882ull, 14294737795210773791ull, 3516494291203307401ull}}, {{6552555978950961372ull, 10249407947844549449ull, 4033364188731303527ull, 4395617864004134252ull}}, {{15624562532912820618ull, 13323408995043925261ull, 11744224654811840512ull, 2747261165002583907ull}}, {{5695645110858862060ull, 16654261243804906577ull, 10068594800087412736ull, 3434076456253229884ull}}, {{11731242407000965479ull, 2371082481046581605ull, 12585743500109265921ull, 4292595570316537355ull}}, {{9637869513589297377ull, 13011141596722583263ull, 5560246678354597248ull, 2682872231447835847ull}}, {{7435650873559233817ull, 16263926995903229079ull, 2338622329515858656ull, 3353590289309794809ull}}, {{4682877573521654367ull, 1883164671169484733ull, 7534963930322211225ull, 4191987861637243511ull}}, {{5232641492664727931ull, 12706192965549397718ull, 11626881484092463871ull, 2619992413523277194ull}}, {{15764173902685685722ull, 11271055188509359243ull, 5310229818260804031ull, 3274990516904096493ull}}, {{15093531359929719249ull, 9477132967209311150ull, 11249473291253392943ull, 4093738146130120616ull}}, {{4821771081528686627ull, 12840737132146901325ull, 7030920807033370589ull, 2558586341331325385ull}}, {{10638899870338246187ull, 2215863359901462944ull, 13400337027219101141ull, 3198232926664156731ull}}, {{13298624837922807734ull, 7381515218304216584ull, 12138735265596488522ull, 3997791158330195914ull}}, {{8311640523701754834ull, 9225133029867523269ull, 12198395559425193230ull, 2498619473956372446ull}}, {{15001236673054581446ull, 2308044250479628278ull, 6024622412426715730ull, 3123274342445465558ull}}, {{9528173804463450999ull, 12108427349954311156ull, 16754150052388170470ull, 3904092928056831947ull}}, {{15178480664644432683ull, 2956081075294056568ull, 8165500773528912592ull, 2440058080035519967ull}}, {{526356757095989237ull, 3695101344117570711ull, 5595189948483752836ull, 3050072600044399959ull}}, {{14493004001652150259ull, 4618876680146963388ull, 2382301417177303141ull, 3812590750055499949ull}}, {{18281499537887369720ull, 5192640934305546069ull, 3794781394949508415ull, 2382869218784687468ull}}, {{9016816367077048438ull, 1879115149454544683ull, 4743476743686885519ull, 2978586523480859335ull}}, {{6659334440418922643ull, 16183951992100344566ull, 1317659911181218994ull, 3723233154351074169ull}}, {{17997142080543990364ull, 14726656013490103257ull, 12352752490556731631ull, 2327020721469421355ull}}, {{8661369545397824243ull, 13796633998435241168ull, 10829254594768526635ull, 2908775901836776694ull}}, {{10826711931747280304ull, 12634106479616663556ull, 4313196206605882486ull, 3635969877295970868ull}}, {{13533389914684100379ull, 6569261062666053637ull, 5391495258257353108ull, 4544962346619963585ull}}, {{10764211705891256689ull, 13329160201021059331ull, 14898899582479315452ull, 2840601466637477240ull}}, {{8843578613936682957ull, 16661450251276324164ull, 176880404389592699ull, 3550751833296846551ull}}, {{11054473267420853697ull, 16215126795668017301ull, 14056158560769154586ull, 4438439791621058188ull}}, {{9214888801351727513ull, 14746140265719898717ull, 18008471137335497424ull, 2774024869763161367ull}}, {{16130297020117047295ull, 18432675332149873396ull, 17898902903241983876ull, 3467531087203951709ull}}, {{1716127201436757502ull, 4594100091477790130ull, 8538570573770316134ull, 4334413859004939637ull}}, {{5684265519325361343ull, 16706370612455782543ull, 7642449617820141535ull, 2709008661878087273ull}}, {{2493645880729313775ull, 16271277247142340275ull, 14164748040702564823ull, 3386260827347609091ull}}, {{16952115406193805930ull, 15727410540500537439ull, 13094249032450818125ull, 4232826034184511364ull}}, {{17512601156512210563ull, 12135474597026529851ull, 17407277682136537136ull, 2645516271365319602ull}}, {{17279065427212875299ull, 15169343246283162314ull, 12535725065815895612ull, 3306895339206649503ull}}, {{12375459747161318316ull, 514934984144401277ull, 11057970313842481612ull, 4133619174008311879ull}}, {{10040505351189517900ull, 9545206401945026606ull, 13828760473792632863ull, 2583511983755194924ull}}, {{3327259652132121566ull, 7319821984003895354ull, 17285950592240791079ull, 3229389979693993655ull}}, {{13382446602019927766ull, 4538091461577481288ull, 16995752221873600945ull, 4036737474617492069ull}}, {{8364029126262454854ull, 14365522209554395565ull, 12928188147884694542ull, 2522960921635932543ull}}, {{15066722426255456471ull, 8733530725088218648ull, 11548549166428480274ull, 3153701152044915679ull}}, {{386658959109768973ull, 1693541369505497503ull, 9824000439608212439ull, 3942126440056144599ull}}, {{7159190877084687464ull, 7975992383582017795ull, 13057529302396214630ull, 2463829025035090374ull}}, {{4337302577928471426ull, 746618442622746436ull, 7098539591140492480ull, 3079786281293862968ull}}, {{5421628222410589282ull, 933273053278433045ull, 8873174488925615600ull, 3849732851617328710ull}}, {{5694360648220312254ull, 583295658299020653ull, 934048037151121846ull, 2406083032260830444ull}}, {{11729636828702778221ull, 9952491609728551624ull, 1167560046438902307ull, 3007603790326038055ull}}, {{14662046035878472776ull, 7828928493733301626ull, 15294508113330791596ull, 3759504737907547568ull}}, {{13775464790851433389ull, 14116452345438089324ull, 9559067570831744747ull, 2349690461192217230ull}}, {{17219330988564291736ull, 13033879413370223751ull, 2725462426684905126ull, 2937113076490271538ull}}, {{16912477717277976766ull, 7068977229858003881ull, 12630200070210907216ull, 3671391345612839422ull}}, {{7305539091315307246ull, 8836221537322504852ull, 6564378050908858212ull, 4589239182016049278ull}}, {{13789333968926842837ull, 14746010497681341340ull, 17937794337100200094ull, 2868274488760030798ull}}, {{17236667461158553546ull, 9209141085246900867ull, 13198870884520474310ull, 3585343110950038498ull}}, {{16934148308020804028ull, 2288054319703850276ull, 7275216568795817080ull, 4481678888687548123ull}}, {{1360470655658226710ull, 1430033949814906423ull, 2241167346283691723ull, 2801049305429717577ull}}, {{15535646374854947099ull, 15622600492550796740ull, 7413145201282002557ull, 3501311631787146971ull}}, {{972813894859132258ull, 5693192560406332214ull, 4654745483175115293ull, 4376639539733933714ull}}, {{14443066739569121373ull, 5864088359467651585ull, 7520901945411834962ull, 2735399712333708571ull}}, {{4218775369179238005ull, 16553482486189340290ull, 4789441413337405798ull, 3419249640417135714ull}}, {{14496841248328823314ull, 11468481070881899554ull, 15210173803526533056ull, 4274062050521419642ull}}, {{13672211798632902475ull, 7167800669301187221ull, 14118044645631471064ull, 2671288781575887276ull}}, {{3255206693008964382ull, 8959750836626484027ull, 17647555807039338830ull, 3339110976969859095ull}}, {{17904066421543369189ull, 1976316508928329225ull, 17447758740371785634ull, 4173888721212323869ull}}, {{4272512485823523887ull, 5846883836507593670ull, 13210692221946059973ull, 2608680450757702418ull}}, {{14564012644134180667ull, 11920290814061879991ull, 7289993240577799158ull, 3260850563447128023ull}}, {{13593329786740337930ull, 5676991480722574181ull, 4500805532294861044ull, 4076063204308910029ull}}, {{10801674125926405158ull, 12771491712306384671ull, 5118846466897982104ull, 2547539502693068768ull}}, {{8890406638980618544ull, 15964364640382980839ull, 6398558083622477630ull, 3184424378366335960ull}}, {{6501322280298385276ull, 10732083763623950241ull, 7998197604528097038ull, 3980530472957919950ull}}, {{15592541471254960558ull, 2095866333837580996ull, 387187484402672745ull, 2487831545598699969ull}}, {{1043932765359149081ull, 7231518935724364150ull, 5095670373930728835ull, 3109789431998374961ull}}, {{10528287993553712159ull, 4427712651228067283ull, 10981273985840798948ull, 3887236789997968701ull}}, {{4274336986757376147ull, 11990692443872317860ull, 9169139250364193294ull, 2429522993748730438ull}}, {{5342921233446720184ull, 5764993517985621517ull, 2238052026100465810ull, 3036903742185913048ull}}, {{11290337560235788134ull, 16429613934336802704ull, 2797565032625582262ull, 3796129677732391310ull}}, {{7056460975147367584ull, 5656822690533113786ull, 15583536200673152626ull, 2372581048582744568ull}}, {{18043948255788985288ull, 16294400400021168040ull, 1032676177131889166ull, 2965726310728430711ull}}, {{4108191246026679994ull, 11144628463171684243ull, 15125903276697025170ull, 3707157888410538388ull}}, {{261776519552981044ull, 11577078807909690556ull, 230317511080864923ull, 2316973680256586493ull}}, {{327220649441226305ull, 9859662491459725291ull, 4899582907278469058ull, 2896217100320733116ull}}, {{14244083867083696593ull, 3101206077469880805ull, 6124478634098086323ull, 3620271375400916395ull}}, {{3970046778572457030ull, 17711565652119514719ull, 3043912274195219999ull, 4525339219251145494ull}}, {{9398808264248867500ull, 17987257560215778555ull, 15737503226654176211ull, 2828337012031965933ull}}, {{7136824311883696470ull, 17872385931842335290ull, 5836820978035556552ull, 3535421265039957417ull}}, {{18144402426709396396ull, 3893738341093367496ull, 11907712240971833595ull, 4419276581299946771ull}}, {{11340251516693372748ull, 127743453969660733ull, 5136477141393702045ull, 2762047863312466732ull}}, {{340256340584552222ull, 4771365335889463821ull, 6420596426742127556ull, 3452559829140583415ull}}, {{5037006444158078182ull, 5964206669861829776ull, 3414059515000271541ull, 4315699786425729269ull}}, {{3148129027598798864ull, 6033472177877337562ull, 4439630206088863665ull, 2697312366516080793ull}}, {{13158533321353274388ull, 12153526240774059856ull, 10161223776038467485ull, 3371640458145100991ull}}, {{16448166651691592985ull, 1356849745685411108ull, 8089843701620696453ull, 4214550572681376239ull}}, {{1056732120452469808ull, 3153874100267075895ull, 11973681341154017139ull, 2634094107925860149ull}}, {{15155973205847750971ull, 17777400680616008580ull, 1132043621160357711ull, 3292617634907325187ull}}, {{498222433600137098ull, 17610064832342622822ull, 15250112581732610851ull, 4115772043634156483ull}}, {{14146447076282249398ull, 8700447511000445311ull, 7225477354369187830ull, 2572357527271347802ull}}, {{13071372826925423844ull, 1652187351895780831ull, 18255218729816260596ull, 3215446909089184752ull}}, {{11727530015229391901ull, 2065234189869726039ull, 4372279338560774129ull, 4019308636361480941ull}}, {{14247235287159451794ull, 12819986414737048534ull, 5038517595814177782ull, 2512067897725925588ull}}, {{8585672072094538935ull, 6801610981566534860ull, 6298146994767722228ull, 3140084872157406985ull}}, {{10732090090118173668ull, 8502013726958168575ull, 12484369761887040689ull, 3925106090196758731ull}}, {{13625085333964940399ull, 16842973625417325119ull, 5496888091965706478ull, 2453191306372974207ull}}, {{12419670649028787594ull, 11830344994916880591ull, 2259424096529745194ull, 3066489132966217759ull}}, {{10912902292858596589ull, 5564559206791324931ull, 16659338175944345205ull, 3833111416207772198ull}}, {{4514720923822928916ull, 5783692513458272034ull, 5800400341537827849ull, 2395694635129857624ull}}, {{14866773191633436953ull, 11841301660250227946ull, 7250500426922284811ull, 2994618293912322030ull}}, {{9360094452687020383ull, 10189941056885397029ull, 18286497570507631822ull, 3743272867390402537ull}}, {{8155902042143081692ull, 1757027142125985239ull, 4511531953926188033ull, 2339545542119001586ull}}, {{5583191534251464211ull, 6807969946084869453ull, 14862786979262510849ull, 2924431927648751982ull}}, {{11590675436241718167ull, 13121648451033474720ull, 9355111687223362753ull, 3655539909560939978ull}}, {{14488344295302147709ull, 2567002508509679688ull, 2470517572174427634ull, 4569424886951174973ull}}, {{9055215184563842318ull, 6216062586245937709ull, 3849916491822711223ull, 2855890554344484358ull}}, {{15930704999132190802ull, 3158392214380034232ull, 14035767651633164837ull, 3569863192930605447ull}}, {{1466637175205686886ull, 8559676286402430695ull, 12933023546114068142ull, 4462328991163256809ull}}, {{7834177262144636160ull, 738111660574131280ull, 1165610688680210733ull, 2788955619477035506ull}}, {{9792721577680795200ull, 5534325594145052004ull, 10680385397705039224ull, 3486194524346294382ull}}, {{12240901972100993999ull, 6917906992681315005ull, 4127109710276523222ull, 4357743155432867978ull}}, {{9956406741776815202ull, 18158749925707985590ull, 7191129587350214917ull, 2723589472145542486ull}}, {{3222136390366243194ull, 8863379351852818276ull, 18212284021042544455ull, 3404486840181928107ull}}, {{4027670487957803993ull, 6467538171388634941ull, 18153669007875792665ull, 4255608550227410134ull}}, {{4823137064187321448ull, 15571426403186366598ull, 6734357111494982511ull, 2659755343892131334ull}}, {{15252293367088927617ull, 14852596985555570343ull, 17641318426223503947ull, 3324694179865164167ull}}, {{14453680690433771617ull, 13954060213517075025ull, 17439962014351992030ull, 4155867724831455209ull}}, {{2116021403880025405ull, 4109601615020783987ull, 3982447231328913163ull, 2597417328019659506ull}}, {{16480084810132195468ull, 525316000348592079ull, 14201431076015917262ull, 3246771660024574382ull}}, {{15988419994237856431ull, 9880017037290515907ull, 8528416808165120769ull, 4058464575030717978ull}}, {{7686919487184966318ull, 17704225694375042202ull, 9941946523530588384ull, 2536540359394198736ull}}, {{385277322126432089ull, 3683538044259251137ull, 12427433154413235481ull, 3170675449242748420ull}}, {{5093282671085428015ull, 9216108573751451825ull, 15534291443016544351ull, 3963344311553435525ull}}, {{14712516715496862270ull, 12677596886235739246ull, 12014775161099034171ull, 2477090194720897203ull}}, {{9167273857516302029ull, 11235310089367286154ull, 10406782932946404810ull, 3096362743401121504ull}}, {{2235720285040601728ull, 4820765574854331885ull, 13008478666183006013ull, 3870453429251401880ull}}, {{3703168187364070032ull, 5318821493497651380ull, 8130299166364378758ull, 2419033393282126175ull}}, {{4628960234205087540ull, 15871898903726840033ull, 5551187939528085543ull, 3023791741602657719ull}}, {{10397886311183747329ull, 15228187611231162137ull, 2327298905982719025ull, 3779739677003322149ull}}, {{18027893990558311841ull, 2600088229378394479ull, 3760404825452893343ull, 2362337298127076343ull}}, {{17923181469770501897ull, 17085168342005156811ull, 88820013388728774ull, 2952921622658845429ull}}, {{17792290818785739467ull, 12133088390651670206ull, 4722711035163298872ull, 3691152028323556786ull}}, {{6508495743313699263ull, 7583180244157293879ull, 7563380415404449699ull, 2306970017702222991ull}}, {{3523933660714736175ull, 4867289286769229445ull, 4842539500828174220ull, 2883712522127778739ull}}, {{9016603094320808122ull, 6084111608461536806ull, 1441488357607829871ull, 3604640652659723424ull}}, {{2047381831046234345ull, 2993453492149533104ull, 1801860447009787339ull, 4505800815824654280ull}}, {{1279613644403896466ull, 18011809497089315854ull, 1126162779381117086ull, 2816125509890408925ull}}, {{10822889092359646390ull, 13291389834506869009ull, 6019389492653784262ull, 3520156887363011156ull}}, {{18140297383876945891ull, 7390865256278810453ull, 7524236865817230328ull, 4400196109203763945ull}}, {{13643528874136785134ull, 4619290785174256533ull, 16231863087204238715ull, 2750122568252352465ull}}, {{3219353037388817706ull, 1162427463040432763ull, 6454770803723134682ull, 3437653210315440582ull}}, {{17859249352018185844ull, 10676406365655316761ull, 17291835541508694160ull, 4297066512894300727ull}}, {{4244501817370284297ull, 6672753978534572976ull, 17724926241084015706ull, 2685666570558937954ull}}, {{5305627271712855371ull, 17564314510022992028ull, 12932785764500243824ull, 3357083213198672443ull}}, {{6632034089641069213ull, 3508649063819188419ull, 11554296187197916877ull, 4196354016498340554ull}}, {{1839178296811974306ull, 4498748674100686714ull, 11833121135426085952ull, 2622721260311462846ull}}, {{11522344907869743691ull, 5623435842625858392ull, 5568029382427831632ull, 3278401575389328558ull}}, {{14402931134837179614ull, 7029294803282322990ull, 16183408764889565348ull, 4098001969236660697ull}}, {{4390145940845849355ull, 13616681288906227677ull, 3197101450414896486ull, 2561251230772912936ull}}, {{10099368444484699597ull, 7797479574278008788ull, 3996376813018620608ull, 3201564038466141170ull}}, {{12624210555605874496ull, 9746849467847510985ull, 14218843053128051568ull, 4001955048082676462ull}}, {{972602569612589704ull, 6091780917404694366ull, 4275090889777644326ull, 2501221905051672789ull}}, {{10439125248870512938ull, 16838098183610643765ull, 9955549630649443311ull, 3126527381314590986ull}}, {{17660592579515529077ull, 16435936711085916802ull, 3221065001457028331ull, 3908159226643238733ull}}, {{15649556380624593577ull, 7966617435215004049ull, 4319008635124336659ull, 2442599516652024208ull}}, {{5726887420498578259ull, 5346585775591367158ull, 5398760793905420824ull, 3053249395815030260ull}}, {{16381981312477998632ull, 6683232219489208947ull, 6748450992381776030ull, 3816561744768787825ull}}, {{7932895311085055193ull, 18012078192462919304ull, 15746996916307079778ull, 2385351090480492390ull}}, {{9916119138856318992ull, 13291725703723873322ull, 10460374108529073915ull, 2981688863100615488ull}}, {{3171776886715622931ull, 12002971111227453749ull, 13075467635661342394ull, 3727111078875769360ull}}, {{4288203563410958284ull, 12113542962944546497ull, 8172167272288338996ull, 2329444424297355850ull}}, {{9971940472691085759ull, 15141928703680683121ull, 991837053505647937ull, 2911805530371694813ull}}, {{17076611609291245103ull, 5092352824318690189ull, 5851482335309447826ull, 3639756912964618516ull}}, {{7510706456331892666ull, 15588813067253138545ull, 7314352919136809782ull, 4549696141205773145ull}}, {{16223406581275902677ull, 5131322148605823686ull, 16100685620528975874ull, 2843560088253608215ull}}, {{11055886189740102538ull, 15637524722612055416ull, 15514171007233831938ull, 3554450110317010269ull}}, {{13819857737175128172ull, 10323533866410293462ull, 5557655703760126211ull, 4443062637896262837ull}}, {{4025725067307067204ull, 4146365657292739462ull, 5779377824063772834ull, 2776914148685164273ull}}, {{14255528370988609813ull, 14406329108470700135ull, 11835908298507103946ull, 3471142685856455341ull}}, {{13207724445308374362ull, 8784539348733599361ull, 959827317851716221ull, 4338928357320569177ull}}, {{1337298750676652120ull, 7796180102172193553ull, 12129107119725792398ull, 2711830223325355735ull}}, {{6283309456773203054ull, 521853090860466133ull, 10549697881229852594ull, 3389787779156694669ull}}, {{12465822839393891721ull, 9875688400430358474ull, 17798808369964703646ull, 4237234723945868336ull}}, {{12402825293048570230ull, 1560619231841586142ull, 11124255231227939779ull, 2648271702466167710ull}}, {{6280159579455936979ull, 15785832095084146390ull, 4681947002180148915ull, 3310339628082709638ull}}, {{17073571511174697032ull, 15120604100427795083ull, 15075805789579961952ull, 4137924535103387047ull}}, {{8365139185270491693ull, 9450377562767371927ull, 16339907646128558076ull, 2586202834439616904ull}}, {{5844737963160726713ull, 11812971953459214909ull, 1978140483951145979ull, 3232753543049521131ull}}, {{11917608472378296295ull, 10154528923396630732ull, 16307733660221096186ull, 4040941928811901413ull}}, {{16671877332091210992ull, 10958266595550282111ull, 12498176546851879068ull, 2525588705507438383ull}}, {{16228160646686625836ull, 13697833244437852639ull, 11011034665137460931ull, 3156985881884297979ull}}, {{15673514789930894391ull, 12510605537119927895ull, 9152107312994438260ull, 3946232352355372474ull}}, {{16713475771347890851ull, 17042500497554730742ull, 10331753089048911816ull, 2466395220222107796ull}}, {{11668472677330087755ull, 2856381548233861812ull, 12914691361311139771ull, 3082994025277634745ull}}, {{14585590846662609694ull, 17405534990574490977ull, 2308306146356761001ull, 3853742531597043432ull}}, {{2198465251523049203ull, 3960930341467975005ull, 1442691341472975626ull, 2408589082248152145ull}}, {{7359767582831199407ull, 14174534963689744564ull, 6415050195268607436ull, 3010736352810190181ull}}, {{9199709478538999259ull, 17718168704612180705ull, 12630498762513147199ull, 3763420441012737726ull}}, {{17279033470155344297ull, 17991384468023694796ull, 3282375708143329095ull, 2352137775632961079ull}}, {{3152047763984628755ull, 17877544566602230592ull, 17938027690461325081ull, 2940172219541201348ull}}, {{3940059704980785944ull, 8511872652970624528ull, 3975790539367104736ull, 3675215274426501686ull}}, {{4925074631225982430ull, 10639840816213280660ull, 14193110211063656728ull, 4594019093033127107ull}}, {{12301543681371014827ull, 6649900510133300412ull, 6564850872701091503ull, 2871261933145704442ull}}, {{15376929601713768534ull, 3700689619239237611ull, 17429435627731140187ull, 3589077416432130552ull}}, {{14609475983714822763ull, 14176005621659110ull, 3340050460954373618ull, 4486346770540163191ull}}, {{4519236471394376323ull, 4620546021940924848ull, 9005060565737565367ull, 2803966731587601994ull}}, {{5649045589242970404ull, 1163996508998768156ull, 2032953670317180901ull, 3504958414484502493ull}}, {{7061306986553713004ull, 6066681654675848099ull, 7152878106323864030ull, 4381198018105628116ull}}, {{2107473857382376676ull, 17626734089454568774ull, 13693920853307190826ull, 2738248761316017572ull}}, {{11857714358582746653ull, 12810045574963435159ull, 17117401066633988533ull, 3422810951645021965ull}}, {{10210456929801045412ull, 2177498913422130237ull, 7561693278010321955ull, 4278513689556277457ull}}, {{8687378590339347335ull, 17501837885384689062ull, 16255273344824920981ull, 2674071055972673410ull}}, {{1635851201069408360ull, 8042239301448697616ull, 11095719644176375419ull, 3342588819965841763ull}}, {{2044814001336760450ull, 5441113108383484116ull, 9257963536793081370ull, 4178236024957302204ull}}, {{10501380787690251089ull, 8012381711167065476ull, 15009599247350451664ull, 2611397515598313877ull}}, {{13126725984612813862ull, 10015477138958831845ull, 4926941003905900868ull, 3264246894497892347ull}}, {{2573349425483853615ull, 12519346423698539807ull, 1546990236454988181ull, 4080308618122365434ull}}, {{8525872418568490365ull, 10130434524025281331ull, 5578554916211755517ull, 2550192886326478396ull}}, {{6045654504783225053ull, 17274729173458989568ull, 6973193645264694396ull, 3187741107908097995ull}}, {{7557068130979031316ull, 3146667393114185344ull, 4104806038153480092ull, 3984676384885122494ull}}, {{4723167581861894573ull, 11190039157551141648ull, 16400561829128088769ull, 2490422740553201558ull}}, {{5903959477327368216ull, 152490891656763348ull, 11277330249555335154ull, 3113028425691501948ull}}, {{7379949346659210269ull, 9413985651425729993ull, 14096662811944168942ull, 3891285532114377435ull}}, {{16141683387730476179ull, 1272055013713693341ull, 6504571248251411637ull, 2432053457571485897ull}}, {{6342046179380931511ull, 6201754785569504581ull, 12742400078741652450ull, 3040066821964357371ull}}, {{12539243742653552293ull, 16975565518816656534ull, 11316314079999677658ull, 3800083527455446714ull}}, {{3225341320731082279ull, 15221414467687798238ull, 11684382318427186440ull, 2375052204659654196ull}}, {{13255048687768628657ull, 580024010900196181ull, 14605477898033983051ull, 2968815255824567745ull}}, {{2733752804428622109ull, 14560088068907408939ull, 4421789317260315101ull, 3711019069780709682ull}}, {{17849496567263746482ull, 11405898052280824538ull, 7375304341715084842ull, 2319386918612943551ull}}, {{13088498672224907295ull, 5034000528496254865ull, 4607444408716468149ull, 2899233648266179439ull}}, {{2525565284998970406ull, 10904186679047706486ull, 1147619492468197282ull, 3624042060332724299ull}}, {{12380328643103488816ull, 4406861311954857299ull, 15269582420867410315ull, 4530052575415905373ull}}, {{5431862392725986558ull, 448445310758091860ull, 11849332022255825399ull, 2831282859634940858ull}}, {{6789827990907483197ull, 14395614693729778537ull, 5588292990965005940ull, 3539103574543676073ull}}, {{13098971007061741900ull, 17994518367162223171ull, 11597052257133645329ull, 4423879468179595091ull}}, {{5881013870199894736ull, 4329044951835307626ull, 4942314651494834379ull, 2764924667612246932ull}}, {{16574639374604644228ull, 799620171366746628ull, 6177893314368542974ull, 3456155834515308665ull}}, {{2271555144546253669ull, 10222897251063209094ull, 12334052661388066621ull, 4320194793144135831ull}}, {{15254780020623572255ull, 8695153791128199635ull, 14626311941008623494ull, 2700121745715084894ull}}, {{14456789007352077415ull, 1645570202055473736ull, 9059517889406003560ull, 3375152182143856118ull}}, {{18070986259190096768ull, 2056962752569342170ull, 2101025324902728642ull, 4218940227679820148ull}}, {{15906052430421198384ull, 5897287738783226760ull, 10536512864918981209ull, 2636837642299887592ull}}, {{1435821464316946364ull, 11983295691906421355ull, 13170641081148726511ull, 3296047052874859490ull}}, {{15629834885678346667ull, 10367433596455638789ull, 7239929314581132331ull, 4120058816093574363ull}}, {{12074489812762660619ull, 4173802988571080291ull, 2219112812399513755ull, 2575036760058483977ull}}, {{10481426247525937870ull, 605567717286462460ull, 7385577033926780098ull, 3218795950073104971ull}}, {{13101782809407422337ull, 9980331683462853883ull, 4620285273981087218ull, 4023494937591381214ull}}, {{5882771246665945009ull, 10849393320591671581ull, 16722736351520343223ull, 2514684335994613258ull}}, {{11965150076759819165ull, 8950055632312201572ull, 11680048402545653221ull, 3143355419993266573ull}}, {{14956437595949773956ull, 15799255558817639869ull, 765002447899902814ull, 3929194274991583217ull}}, {{11653616506682302675ull, 5262848705833637014ull, 12007341576005909019ull, 2455746421869739510ull}}, {{5343648596498102535ull, 1966874863864658364ull, 5785804933152610466ull, 3069683027337174388ull}}, {{6679560745622628169ull, 11681965616685598763ull, 7232256166440763082ull, 3837103784171467985ull}}, {{1868882456800448654ull, 11912914528855887131ull, 16049375150093946686ull, 2398189865107167490ull}}, {{16171161126282724529ull, 5667771124215083105ull, 10838346900762657550ull, 2997737331383959363ull}}, {{6378893352571241950ull, 16308085942123629690ull, 8936247607525934033ull, 3747171664229949204ull}}, {{8598494363784414123ull, 3275024686186186700ull, 14808526791558484579ull, 2341982290143718252ull}}, {{10748117954730517653ull, 17928838913014897087ull, 63914415738554107ull, 2927477862679647816ull}}, {{8823461424985759162ull, 17799362622841233455ull, 79893019673192634ull, 3659347328349559770ull}}, {{6417640762804811049ull, 13025831241696766011ull, 9323238311446266601ull, 4574184160436949712ull}}, {{1705182467539312954ull, 1223615498419396901ull, 5827023944653916626ull, 2858865100273093570ull}}, {{6743164102851529096ull, 10752891409879021934ull, 16507151967672171590ull, 3573581375341366962ull}}, {{17652327165419187178ull, 4217742225494001609ull, 11410567922735438680ull, 4466976719176708703ull}}, {{4115175450745910130ull, 2636088890933751006ull, 14049133979350731031ull, 2791860449485442939ull}}, {{14367341350287163471ull, 17130169168949352469ull, 12949731455761025884ull, 3489825561856803674ull}}, {{4124118632576790626ull, 2965967387477138971ull, 6963792282846506548ull, 4362281952321004593ull}}, {{271731136146800190ull, 11077101654027987665ull, 15881585222847536352ull, 2726426220200627870ull}}, {{4951349938610888141ull, 13846377067534984581ull, 10628609491704644632ull, 3408032775250784838ull}}, {{10800873441690998080ull, 17307971334418730726ull, 4062389827776029982ull, 4260040969063481048ull}}, {{2138859882629485896ull, 6205796065584318800ull, 2538993642360018739ull, 2662525605664675655ull}}, {{2673574853286857370ull, 3145559063553010596ull, 17008800108232187136ull, 3328157007080844568ull}}, {{3341968566608571713ull, 3931948829441263245ull, 2814256061580682304ull, 4160196258851055711ull}}, {{4394573363344051273ull, 2457468018400789528ull, 8676439066129008296ull, 2600122661781909819ull}}, {{5493216704180064091ull, 3071835023000986910ull, 6233862814233872466ull, 3250153327227387274ull}}, {{16089892917079855921ull, 13063165815606009445ull, 17015700554647116390ull, 4062691659034234092ull}}, {{12362026082388603903ull, 3552792616326367999ull, 1411440809799671936ull, 2539182286896396308ull}}, {{10840846584558366974ull, 4440990770407959999ull, 1764301012249589920ull, 3173977858620495385ull}}, {{8939372212270570814ull, 5551238463009949999ull, 6817062283739375304ull, 3967472323275619231ull}}, {{12504636660310188615ull, 3469524039381218749ull, 11178192954978191421ull, 2479670202047262019ull}}, {{1795737770105572057ull, 8948591067653911341ull, 9361055175295351372ull, 3099587752559077524ull}}, {{6856358231059352975ull, 11185738834567389176ull, 11701318969119189215ull, 3874484690698846905ull}}, {{4285223894412095609ull, 13908615799245700091ull, 395795328058411403ull, 2421552931686779316ull}}, {{744843849587731607ull, 12774083730629737210ull, 494744160073014254ull, 3026941164608474145ull}}, {{10154426848839440317ull, 6744232626432395704ull, 5230116218518655722ull, 3783676455760592681ull}}, {{6346516780524650198ull, 8826831409947635219ull, 14798037682642629586ull, 2364797784850370425ull}}, {{3321459957228424844ull, 1810167225579768216ull, 4662489048021123271ull, 2955997231062963032ull}}, {{4151824946535531055ull, 16097767087256873982ull, 5828111310026404088ull, 3694996538828703790ull}}, {{16429948646866870621ull, 10061104429535546238ull, 17477627624048666267ull, 2309372836767939868ull}}, {{11314063771728812469ull, 7964694518492044894ull, 3400290456351281218ull, 2886716045959924836ull}}, {{4919207677806239778ull, 732496111260280310ull, 4250363070439101523ull, 3608395057449906045ull}}, {{15372381634112575530ull, 14750678194357514099ull, 9924639856476264807ull, 4510493821812382556ull}}, {{7301895512106665754ull, 16136702899114528168ull, 15426271947152441312ull, 2819058638632739097ull}}, {{9127369390133332193ull, 1724134550183608594ull, 5447781878658387929ull, 3523823298290923872ull}}, {{2185839700811889433ull, 6766854206156898647ull, 6809727348322984911ull, 4404779122863654840ull}}, {{8283678840648512752ull, 11146812906489143510ull, 4256079592701865569ull, 2752986951789784275ull}}, {{1131226513955865132ull, 98458077829265676ull, 708413472449944058ull, 3441233689737230344ull}}, {{1414033142444831414ull, 9346444634141357903ull, 885516840562430072ull, 4301542112171537930ull}}, {{7801299741669101490ull, 5841527896338348689ull, 5165134043778906699ull, 2688463820107211206ull}}, {{14363310695513764767ull, 2690223851995547957ull, 15679789591578409182ull, 3360579775134014007ull}}, {{4119080314110042246ull, 12586151851849210755ull, 14988050971045623573ull, 4200724718917517509ull}}, {{268582187105082452ull, 10172187916619450674ull, 11673374866117208685ull, 2625452949323448443ull}}, {{9559099770736128873ull, 17326920914201701246ull, 9980032564219122952ull, 3281816186654310554ull}}, {{2725502676565385283ull, 3211907069042574942ull, 3251668668419127883ull, 4102270233317888193ull}}, {{15538497228135529514ull, 18148342982647467002ull, 13561507963830424686ull, 2563918895823680120ull}}, {{10199749498314636084ull, 13462056691454557945ull, 16951884954788030858ull, 3204898619779600150ull}}, {{17361372891320683009ull, 7604198827463421623ull, 11966484156630262765ull, 4006123274724500188ull}}, {{17768387084716508737ull, 7058467276378332466ull, 16702424634748690036ull, 2503827046702812617ull}}, {{12987111819040860113ull, 8823084095472915583ull, 7042972738153698833ull, 3129783808378515772ull}}, {{11622203755373687237ull, 15640541137768532383ull, 8803715922692123541ull, 3912229760473144715ull}}, {{14181406374749636380ull, 12081181220319026691ull, 3196479442468883261ull, 2445143600295715447ull}}, {{13115071950009657570ull, 1266418470116619652ull, 17830657358368267789ull, 3056429500369644308ull}}, {{16393839937512071963ull, 6194709106073162469ull, 3841577624250783120ull, 3820536875462055386ull}}, {{12551992970158738929ull, 3871693191295726543ull, 7012672033584127354ull, 2387835547163784616ull}}, {{11078305194271035757ull, 14062988525974433987ull, 8765840041980159192ull, 2984794433954730770ull}}, {{9236195474411406792ull, 17578735657468042484ull, 1733928015620423182ull, 3730993042443413463ull}}, {{14995994208361905053ull, 6375023767490138648ull, 8001234037403846345ull, 2331870651527133414ull}}, {{298248686742829701ull, 12580465727790061215ull, 778170509900032123ull, 2914838314408916768ull}}, {{14207868913710700838ull, 11113896141310188614ull, 972713137375040154ull, 3643547893011145960ull}}, {{8536464105283600239ull, 4668998139782959960ull, 1215891421718800193ull, 4554434866263932450ull}}, {{5335290065802250149ull, 14447338883432819735ull, 5371618157001638024ull, 2846521791414957781ull}}, {{2057426563825424783ull, 18059173604291024669ull, 11326208714679435434ull, 3558152239268697226ull}}, {{7183469223209168882ull, 13350594968509005028ull, 4934388856494518485ull, 4447690299085871533ull}}, {{13713040301360506360ull, 10649964864531822094ull, 5389836044522768005ull, 2779806436928669708ull}}, {{7917928339845857141ull, 17924142099092165522ull, 6737295055653460006ull, 3474758046160837135ull}}, {{674038387952545619ull, 13181805587010431095ull, 3809932801139437104ull, 4343447557701046419ull}}, {{7338803020111422868ull, 8238628491881519434ull, 75364991498454238ull, 2714654723563154012ull}}, {{18396875811994054393ull, 1074913577997123484ull, 94206239373067798ull, 3393318404453942515ull}}, {{4549350691283016375ull, 10567014009351180164ull, 13952815854498498459ull, 4241648005567428143ull}}, {{12066716218906661042ull, 4298540746630793650ull, 15638038936702643393ull, 2651030003479642589ull}}, {{5860023236778550495ull, 9984861951715879967ull, 5712490615596140529ull, 3313787504349553237ull}}, {{2713343027545800214ull, 17092763458072237863ull, 11752299287922563565ull, 4142234380436941546ull}}, {{8613368419857206990ull, 12988820170508842616ull, 11956873073378990132ull, 2588896487773088466ull}}, {{10766710524821508738ull, 16236025213136053270ull, 5722719304868961857ull, 3236120609716360583ull}}, {{4235016119172110114ull, 6459973461137902876ull, 2541713112658814418ull, 4045150762145450729ull}}, {{11870257111337344629ull, 8649169431638577201ull, 13117785741480228771ull, 2528219226340906705ull}}, {{1002763333889517075ull, 6199775771120833598ull, 2562174121568122252ull, 3160274032926133382ull}}, {{10476826204216672151ull, 7749719713901041997ull, 12426089688814928623ull, 3950342541157666727ull}}, {{8853859386849114047ull, 11761103848829233104ull, 14683835083150412245ull, 2468964088223541704ull}}, {{11067324233561392558ull, 866321755754377668ull, 18354793853938015307ull, 3086205110279427130ull}}, {{13834155291951740698ull, 14917960249975135797ull, 13720120280567743325ull, 3857756387849283913ull}}, {{10952190066683531888ull, 11629568165448153825ull, 1657546147713757722ull, 2411097742405802446ull}}, {{18301923601781802764ull, 5313588169955416473ull, 11295304721496972961ull, 3013872178007253057ull}}, {{9042346446945089743ull, 11253671230871658496ull, 284072846589052489ull, 3767340222509066322ull}}, {{5651466529340681090ull, 116015491653704704ull, 4789231547545545710ull, 2354587639068166451ull}}, {{7064333161675851362ull, 9368391401421906688ull, 1374853416004544233ull, 2943234548835208064ull}}, {{8830416452094814202ull, 16322175270204771264ull, 1718566770005680291ull, 3679043186044010080ull}}, {{11038020565118517753ull, 15791033069328576176ull, 2148208462507100364ull, 4598803982555012600ull}}, {{6898762853199073596ull, 646023631475584302ull, 1342630289066937728ull, 2874252489096882875ull}}, {{17846825603353617802ull, 807529539344480377ull, 15513345916615835872ull, 3592815611371103593ull}}, {{8473473948909858541ull, 1009411924180600472ull, 5556624340487631128ull, 4491019514213879492ull}}, {{5295921218068661588ull, 630882452612875295ull, 12696262249659545263ull, 2806887196383674682ull}}, {{2008215504158439081ull, 14623661121048257831ull, 6646955775219655770ull, 3508608995479593353ull}}, {{16345327435480212563ull, 9056204364455546480ull, 12920380737451957617ull, 4385761244349491691ull}}, {{10215829647175132852ull, 17189342773853186310ull, 5769394951693779558ull, 2741100777718432307ull}}, {{3546415022114140257ull, 12263306430461707080ull, 2600057671189836544ull, 3426375972148040384ull}}, {{4433018777642675321ull, 15329133038077133850ull, 3250072088987295680ull, 4282969965185050480ull}}, {{7382322754454059980ull, 9580708148798208656ull, 2031295055617059800ull, 2676856228240656550ull}}, {{9227903443067574975ull, 11975885185997760820ull, 11762490856376100558ull, 3346070285300820687ull}}, {{11534879303834468718ull, 5746484445642425217ull, 10091427552042737794ull, 4182587856626025859ull}}, {{291770537255461093ull, 8203238796953903665ull, 4001299210813017169ull, 2614117410391266162ull}}, {{4976399189996714270ull, 14865734514619767485ull, 14224996050371047269ull, 3267646762989082702ull}}, {{10832185005923280742ull, 4747110087992545644ull, 8557873026109033279ull, 4084558453736353378ull}}, {{15993487665556826272ull, 9884472832636422883ull, 9960356659745533703ull, 2552849033585220861ull}}, {{15380173563518644936ull, 7743905022368140700ull, 17062131843109305033ull, 3191061291981526076ull}}, {{778472880688754553ull, 14291567296387563780ull, 2880920730177079675ull, 3988826614976907596ull}}, {{9709917587285247404ull, 6626386551028533410ull, 11023947493215450605ull, 2493016634360567247ull}}, {{2914024947251783447ull, 12894669207213054667ull, 9168248348091925352ull, 3116270792950709059ull}}, {{17477589239346893021ull, 16118336509016318333ull, 6848624416687518786ull, 3895338491188386324ull}}, {{13229336283805502090ull, 14685646336562586862ull, 13503762297284475049ull, 2434586556992741452ull}}, {{7313298317902101804ull, 4521999865421069866ull, 16879702871605593812ull, 3043233196240926815ull}}, {{18364994934232403063ull, 5652499831776337332ull, 16487942571079604361ull, 3804041495301158519ull}}, {{2254749797040476107ull, 15062027440928680593ull, 17222493134565834581ull, 2377525934563224074ull}}, {{7430123264727983037ull, 4992476245878687029ull, 12304744381352517419ull, 2971907418204030093ull}}, {{13899340099337366701ull, 1628909288920970882ull, 1545872421408483062ull, 3714884272755037617ull}}, {{13298773580513242092ull, 14853126360857770513ull, 12495385309448771673ull, 2321802670471898510ull}}, {{2788408920359388903ull, 4731349895790049430ull, 6395859599956188784ull, 2902253338089873138ull}}, {{12708883187304011937ull, 5914187369737561787ull, 17218196536800011788ull, 3627816672612341422ull}}, {{11274417965702627017ull, 7392734212171952234ull, 12299373634145238927ull, 4534770840765426778ull}}, {{11658197246991529790ull, 11537987910248552002ull, 12298794539768162233ull, 2834231775478391736ull}}, {{5349374521884636429ull, 587426832528526291ull, 15373493174710202792ull, 3542789719347989670ull}}, {{2075032133928407632ull, 734283540660657864ull, 9993494431532977682ull, 4428487149184987088ull}}, {{1296895083705254770ull, 5070613231340299069ull, 6245934019708111051ull, 2767804468240616930ull}}, {{6232804873058956367ull, 1726580520747985932ull, 17030789561489914622ull, 3459755585300771162ull}}, {{7791006091323695458ull, 11381597687789758223ull, 12065114915007617469ull, 4324694481625963953ull}}, {{11786907834718391518ull, 9419341564082292841ull, 623167794238679062ull, 2702934051016227471ull}}, {{898576738115825685ull, 2550804918248090244ull, 14614017798080512540ull, 3378667563770284338ull}}, {{1123220922644782106ull, 3188506147810112805ull, 9044150210745864867ull, 4223334454712855423ull}}, {{3007856085866682768ull, 18133717406877178167ull, 12570122909357247397ull, 2639584034195534639ull}}, {{17594878162615517172ull, 8832088703314308996ull, 11100967618269171343ull, 3299480042744418299ull}}, {{3546853629559844849ull, 6428424860715498342ull, 9264523504409076275ull, 4124350053430522874ull}}, {{16051841573757066743ull, 1711922528733492511ull, 10402013208683060576ull, 2577718783394076796ull}}, {{15453115948768945525ull, 2139903160916865639ull, 13002516510853825720ull, 3222148479242595995ull}}, {{14704708917533794002ull, 2674878951146082049ull, 11641459620139894246ull, 4027685599053244994ull}}, {{2272914045817539395ull, 15506857399748464993ull, 11887598281014821807ull, 2517303499408278121ull}}, {{7452828575699312148ull, 14771885731258193337ull, 1024439795986363547ull, 3146629374260347652ull}}, {{13927721738051528089ull, 13853171145645353767ull, 1280549744982954434ull, 3933286717825434565ull}}, {{15622355113923286912ull, 13269917984455734008ull, 3106186599828040473ull, 2458304198640896603ull}}, {{1081199818694557023ull, 2752339425287503799ull, 17717791305067214304ull, 3072880248301120753ull}}, {{15186557828650359991ull, 3440424281609379748ull, 8312181076051854168ull, 3841100310376400942ull}}, {{268226606051699187ull, 2150265176005862343ull, 583427154105020951ull, 2400687693985250589ull}}, {{14170341312846787695ull, 16522889525289491640ull, 5340969961058664092ull, 3000859617481563236ull}}, {{17712926641058484619ull, 2206867832902312934ull, 6676212451323330116ull, 3751074521851954045ull}}, {{6458893132234164983ull, 10602664432418721392ull, 6478475791290775274ull, 2344421576157471278ull}}, {{8073616415292706229ull, 4029958503668625932ull, 17321466775968244901ull, 2930526970196839097ull}}, {{10092020519115882786ull, 9649134148013170319ull, 7816775414678142414ull, 3663158712746048872ull}}, {{8003339630467465578ull, 2838045648161687091ull, 9770969268347678018ull, 4578948390932561090ull}}, {{2696244259828472034ull, 6385464548528442336ull, 10718541811144686665ull, 2861842744332850681ull}}, {{3370305324785590043ull, 12593516704087940824ull, 18009863282358246235ull, 3577303430416063351ull}}, {{4212881655981987553ull, 11130209861682538126ull, 17900643084520419890ull, 4471629288020079189ull}}, {{16468109090270905933ull, 11568067181978974232ull, 13493744937038956383ull, 2794768305012549493ull}}, {{2138392289129080800ull, 9848397959046329887ull, 3032123116016531767ull, 3493460381265686867ull}}, {{16508048416693514712ull, 7698811430380524454ull, 17625211950302828421ull, 4366825476582108583ull}}, {{5705844242006058791ull, 7117600153201521736ull, 17933286496580349619ull, 2729265922863817864ull}}, {{7132305302507573489ull, 4285314173074514266ull, 3969864047015885408ull, 3411582403579772331ull}}, {{18138753664989242669ull, 5356642716343142832ull, 350644040342468856ull, 4264478004474715414ull}}, {{11336721040618276668ull, 3347901697714464270ull, 14054210580496206747ull, 2665298752796697133ull}}, {{4947529263918070027ull, 18019935177425244050ull, 3732705170338094721ull, 3331623440995871417ull}}, {{15407783616752363342ull, 8689860916499391350ull, 9277567481350006306ull, 4164529301244839271ull}}, {{5018178742042839185ull, 10042849091239507498ull, 12716008703484835797ull, 2602830813278024544ull}}, {{15496095464408324789ull, 17165247382476772276ull, 15895010879356044746ull, 3253538516597530680ull}}, {{923375256800854370ull, 12233187191241189538ull, 1422019525485504317ull, 4066923145746913351ull}}, {{5188795553927921886ull, 9951585003739437413ull, 7806291231069522054ull, 2541826966091820844ull}}, {{11097680460837290261ull, 3216109217819520958ull, 9757864038836902568ull, 3177283707614776055ull}}, {{4648728539191837018ull, 4020136522274401198ull, 7585644030118740306ull, 3971604634518470069ull}}, {{16740513392277061848ull, 7124271344848888652ull, 7046870528037906643ull, 2482252896574043793ull}}, {{2478897666636775694ull, 4293653162633722912ull, 13420274178474771208ull, 3102816120717554741ull}}, {{3098622083295969618ull, 5367066453292153640ull, 2940284667811300298ull, 3878520150896943427ull}}, {{1936638802059981011ull, 7966102551734983929ull, 17978578981877920350ull, 2424075094310589641ull}}, {{7032484521002364168ull, 734256152813954103ull, 8638165672065236726ull, 3030093867888237052ull}}, {{4178919632825567306ull, 10141192227872218437ull, 10797707090081545907ull, 3787617334860296315ull}}, {{4917667779729673518ull, 4032402133206442571ull, 4442723922087272240ull, 2367260834287685197ull}}, {{1535398706234703994ull, 5040502666508053214ull, 10165090921036478204ull, 2959076042859606496ull}}, {{11142620419648155800ull, 6300628333135066517ull, 12706363651295597755ull, 3698845053574508120ull}}, {{9269980771493791327ull, 1632049698995722621ull, 7941477282059748597ull, 2311778158484067575ull}}, {{16199161982794627063ull, 6651748142172041180ull, 5315160584147297842ull, 2889722698105084469ull}}, {{1802208404783732213ull, 17538057214569827284ull, 11255636748611510206ull, 3612153372631355586ull}}, {{2252760505979665266ull, 12699199481357508297ull, 4846173898909611950ull, 4515191715789194483ull}}, {{12937190362305760551ull, 3325313657421054781ull, 723015677604813517ull, 2821994822368246552ull}}, {{2336429897600036977ull, 8768328090203706381ull, 903769597006016896ull, 3527493527960308190ull}}, {{7532223390427434125ull, 10960410112754632976ull, 10353084033112296928ull, 4409366909950385237ull}}, {{4707639619017146328ull, 6850256320471645610ull, 8776520529908879532ull, 2755854318718990773ull}}, {{15107921560626208718ull, 8562820400589557012ull, 15582336680813487319ull, 3444817898398738466ull}}, {{438157877073209282ull, 6091839482309558362ull, 10254548814162083341ull, 4306022372998423083ull}}, {{4885534691598143705ull, 6113242685657167928ull, 4103249999637608136ull, 2691263983124014427ull}}, {{6106918364497679631ull, 7641553357071459910ull, 517376481119622266ull, 3364079978905018034ull}}, {{16857019992476875347ull, 328569659484549079ull, 9870092638254303641ull, 4205099973631272542ull}}, {{17453166522939128948ull, 11734571083246312934ull, 1557121880481551871ull, 2628187483519545339ull}}, {{12593086116819135377ull, 10056527835630503264ull, 15781460405884103551ull, 3285234354399431673ull}}, {{15741357646023919221ull, 7958973776110741176ull, 5891767452072965727ull, 4106542942999289592ull}}, {{9838348528764949513ull, 11891887637710295091ull, 3682354657545603579ull, 2566589339374555995ull}}, {{7686249642528798988ull, 10253173528710480960ull, 18438001377214168186ull, 3208236674218194993ull}}, {{9607812053160998735ull, 3593094874033325392ull, 9212443666235546521ull, 4010295842772743742ull}}, {{6004882533225624209ull, 13774899342339298130ull, 1146091272969828671ull, 2506434901732964839ull}}, {{16729475203386806069ull, 12606938159496734758ull, 15267672146494449551ull, 3133043627166206048ull}}, {{11688471967378731779ull, 11146986680943530544ull, 637846109408510323ull, 3916304533957757561ull}}, {{7305294979611707362ull, 4661023666376012638ull, 11927868864448788712ull, 2447690333723598475ull}}, {{18354990761369410010ull, 5826279582970015797ull, 10298150062133597986ull, 3059612917154498094ull}}, {{9108680396429598801ull, 16506221515567295555ull, 3649315540812221674ull, 3824516146443122618ull}}, {{3387082238554805299ull, 14928074465656947626ull, 6892508231435026450ull, 2390322591526951636ull}}, {{13457224835048282431ull, 9436721045216408724ull, 8615635289293783063ull, 2987903239408689545ull}}, {{16821531043810353039ull, 7184215288093123001ull, 15381230130044616733ull, 3734879049260861931ull}}, {{3595927874740388793ull, 6795977564271895828ull, 7307425822064191506ull, 2334299405788038707ull}}, {{4494909843425485992ull, 17718343992194645593ull, 4522596259152851478ull, 2917874257235048384ull}}, {{10230323322709245393ull, 12924557953388531183ull, 5653245323941064348ull, 3647342821543810480ull}}, {{8176218134959168838ull, 16155697441735663979ull, 7066556654926330435ull, 4559178526929763100ull}}, {{2804293325135786572ull, 7791467891871096035ull, 13639969946183732330ull, 2849486579331101937ull}}, {{17340424711701896927ull, 515962827984094235ull, 3214904377447501701ull, 3561858224163877422ull}}, {{17063844871199983254ull, 5256639553407505698ull, 13242002508664152934ull, 4452322780204846777ull}}, {{15276589062927377438ull, 17120457776161854773ull, 1358722540274013727ull, 2782701737628029236ull}}, {{5260678273377058085ull, 16788886201774930563ull, 1698403175342517159ull, 3478377172035036545ull}}, {{1964161823293934703ull, 16374421733791275300ull, 6734689987605534353ull, 4347971465043795681ull}}, {{10450973176413484997ull, 3316484555978465206ull, 15738396288321928731ull, 2717482165652372300ull}}, {{3840344433662080438ull, 17980663750255245220ull, 1226251286692859297ull, 3396852707065465376ull}}, {{4800430542077600548ull, 8640771632536892813ull, 1532814108366074122ull, 4246065883831831720ull}}, {{5306112098012194295ull, 10012168288762945912ull, 958008817728796326ull, 2653791177394894825ull}}, {{6632640122515242868ull, 3291838324098906582ull, 5809197040588383312ull, 3317238971743618531ull}}, {{17514172189998829393ull, 4114797905123633227ull, 2649810282308091236ull, 4146548714679523164ull}}, {{8640514609535574419ull, 11795120727557046575ull, 10879503463297332830ull, 2591592946674701977ull}}, {{6188957243492080119ull, 5520528872591532411ull, 18211065347549053942ull, 3239491183343377471ull}}, {{3124510535937712245ull, 16124033127594191322ull, 18152145666008929523ull, 4049363979179221839ull}}, {{6564505103388458057ull, 7771677695532675624ull, 18262620068896662808ull, 2530852486987013649ull}}, {{8205631379235572572ull, 9714597119415844530ull, 8993217030838664798ull, 3163565608733767062ull}}, {{1033667187189689907ull, 2919874362415029855ull, 2018149251693555190ull, 3954457010917208828ull}}, {{7563571019634638048ull, 15659979531791557371ull, 10484715319163247801ull, 2471535631823255517ull}}, {{4842777756115909656ull, 5739916359457283002ull, 17717580167381447656ull, 3089419539779069396ull}}, {{15276844231999662877ull, 7174895449321603752ull, 3700231135517257954ull, 3861774424723836746ull}}, {{9548027644999789299ull, 9095995674253390249ull, 6924330478125674125ull, 2413609015452397966ull}}, {{16546720574677124527ull, 15981680611244125715ull, 17878785134511868464ull, 3017011269315497457ull}}, {{16071714699919017755ull, 1530356690345605528ull, 8513423362857671869ull, 3771264086644371822ull}}, {{10044821687449386097ull, 3262315940679697407ull, 709203583358657014ull, 2357040054152732389ull}}, {{7944341090884344717ull, 13301266962704397567ull, 5498190497625709171ull, 2946300067690915486ull}}, {{5318740345178042992ull, 12014897684953109055ull, 16096110158886912272ull, 3682875084613644357ull}}, {{2036739413045165836ull, 15018622106191386319ull, 6285079643326476628ull, 4603593855767055447ull}}, {{8190491160794310504ull, 163266779514840641ull, 10845703804720129749ull, 2877246159854409654ull}}, {{14849799969420276033ull, 4815769492820938705ull, 4333757719045386378ull, 3596557699818012068ull}}, {{4727191906493181330ull, 15243083902880949190ull, 5417197148806732972ull, 4495697124772515085ull}}, {{16789552996840402043ull, 303555402445817435ull, 5691591227217902060ull, 2809810702982821928ull}}, {{16375255227623114650ull, 379444253057271794ull, 7114489034022377575ull, 3512263378728527410ull}}, {{11245696997674117504ull, 14309363371603753455ull, 18116483329382747776ull, 4390329223410659262ull}}, {{13946089651187405296ull, 8943352107252345909ull, 6711116062436829456ull, 2743955764631662039ull}}, {{3597554008702092908ull, 11179190134065432387ull, 3777209059618648916ull, 3429944705789577549ull}}, {{18332000566159779847ull, 13973987667581790483ull, 9333197342950699049ull, 4287430882236971936ull}}, {{9151657344636168453ull, 1816213264597537196ull, 5833248339344186906ull, 2679644301398107460ull}}, {{11439571680795210566ull, 11493638617601697303ull, 7291560424180233632ull, 3349555376747634325ull}}, {{9687778582566625303ull, 14367048272002121629ull, 13726136548652679944ull, 4186944220934542906ull}}, {{8360704623317834767ull, 8979405170001326018ull, 13190521361335312869ull, 2616840138084089316ull}}, {{1227508742292517650ull, 15835942480929045427ull, 16488151701669141086ull, 3271050172605111645ull}}, {{15369443983147810775ull, 10571556064306530975ull, 6775131571804262646ull, 4088812715756389557ull}}, {{16523431517108463590ull, 1995536521764193955ull, 6540300241591358106ull, 2555507947347743473ull}}, {{16042603377958191584ull, 11717792689060018252ull, 12787061320416585536ull, 3194384934184679341ull}}, {{1606510148738187864ull, 14647240861325022816ull, 2148768595238568208ull, 3992981167730849177ull}}, {{1004068842961367415ull, 9154525538328139260ull, 12872195418092574890ull, 2495613229831780735ull}}, {{1255086053701709269ull, 2219784886055398267ull, 11478558254188330709ull, 3119516537289725919ull}}, {{15403915622409300298ull, 7386417125996635737ull, 9736511799308025482ull, 3899395671612157399ull}}, {{2709918236364730830ull, 9228196722175285240ull, 13002848902208597782ull, 2437122294757598374ull}}, {{3387397795455913538ull, 2311873865864330742ull, 7030189090905971420ull, 3046402868446997968ull}}, {{13457619281174667730ull, 2889842332330413427ull, 8787736363632464275ull, 3808003585558747460ull}}, {{6105169041520473379ull, 17947052522202366056ull, 14715707264125065979ull, 2380002240974217162ull}}, {{7631461301900591724ull, 17822129634325569666ull, 9171262043301556666ull, 2975002801217771453ull}}, {{315954590520963847ull, 13054290006052186275ull, 16075763572554333737ull, 3718753501522214316ull}}, {{16338372683571460069ull, 1241402226141534565ull, 823980195991682778ull, 2324220938451383948ull}}, {{6587907799182161374ull, 10775124819531694015ull, 1029975244989603472ull, 2905276173064229935ull}}, {{3623198730550313813ull, 13468906024414617519ull, 15122527111519168052ull, 3631595216330287418ull}}, {{18364056468470055978ull, 16836132530518271898ull, 9679786852544184257ull, 4539494020412859273ull}}, {{16089221311221172890ull, 3605053803932838080ull, 17579081828908584921ull, 2837183762758037045ull}}, {{1664782565316914497ull, 9118003273343435505ull, 8138794230853567439ull, 3546479703447546307ull}}, {{6692664225073531025ull, 6785818073251906477ull, 5561806770139571395ull, 4433099629309432884ull}}, {{6488758149884650843ull, 1935293286568747596ull, 12699501268192007930ull, 2770687268318395552ull}}, {{8110947687355813553ull, 11642488645065710303ull, 15874376585240009912ull, 3463359085397994440ull}}, {{5526998590767379037ull, 14553110806332137879ull, 1396226657840460774ull, 4329198856747493051ull}}, {{10371903146870693755ull, 4484008235530198270ull, 17013542725646145648ull, 2705749285467183156ull}}, {{3741506896733591385ull, 5605010294412747838ull, 2820184333348130444ull, 3382186606833978946ull}}, {{13900255657771765039ull, 7006262868015934797ull, 12748602453539938863ull, 4227733258542473682ull}}, {{10993502795321047102ull, 11296443320151041104ull, 12579562551889849693ull, 2642333286589046051ull}}, {{13741878494151308877ull, 285496094906637668ull, 11112767171434924213ull, 3302916608236307564ull}}, {{17177348117689136096ull, 4968556137060684989ull, 13890958964293655266ull, 4128645760295384455ull}}, {{13041685582769404012ull, 7717033604090316022ull, 15599378380324616397ull, 2580403600184615284ull}}, {{7078734941606979207ull, 14257978023540282932ull, 1052478901696218880ull, 3225504500230769106ull}}, {{8848418677008724009ull, 17822472529425353665ull, 10538970663975049408ull, 4031880625288461382ull}}, {{17059476719198922266ull, 11139045330890846040ull, 1975170646557017976ull, 2519925390805288364ull}}, {{2877601825289101216ull, 13923806663613557551ull, 2468963308196272470ull, 3149906738506610455ull}}, {{17432060336893540232ull, 8181386292662171130ull, 16921262190527504300ull, 3937383423133263068ull}}, {{15506723728985850549ull, 14336738469768632764ull, 1352416832224914379ull, 2460864639458289418ull}}, {{936660587522761570ull, 13309237068783403052ull, 10913893077135918782ull, 3076080799322861772ull}}, {{1170825734403451963ull, 7413174299124478007ull, 13642366346419898478ull, 3845100999153577215ull}}, {{7649295111643239333ull, 21547918525410850ull, 15444007994153518405ull, 2403188124470985759ull}}, {{338246852699273358ull, 4638620916584151467ull, 14693323974264510102ull, 3003985155588732199ull}}, {{14257866621156255409ull, 15021648182584965141ull, 13754968949403249723ull, 3754981444485915249ull}}, {{11217009647436353583ull, 7082687104901909261ull, 1679326565735949221ull, 2346863402803697031ull}}, {{186204004013278267ull, 13465044899554774481ull, 15934216262452100238ull, 2933579253504621288ull}}, {{4844441023443985737ull, 7607934087588692293ull, 1471026254355573682ull, 3666974066880776611ull}}, {{10667237297732370076ull, 286545572631089558ull, 15673840873226630815ull, 4583717583600970763ull}}, {{2055337292655343393ull, 7096620010535512830ull, 7490307536552950307ull, 2864823489750606727ull}}, {{11792543652673955050ull, 4259088994742003133ull, 4751198402263799980ull, 3581029362188258409ull}}, {{905621510560280100ull, 5323861243427503917ull, 10550684021257137879ull, 4476286702735323011ull}}, {{2871856453313869015ull, 10244942304783271804ull, 4288334504072017222ull, 2797679189209576882ull}}, {{3589820566642336268ull, 3582805844124313947ull, 14583790166944797336ull, 3497098986511971102ull}}, {{18322333763585084047ull, 4478507305155392433ull, 9006365671826220862ull, 4371373733139963878ull}}, {{4533929574599595674ull, 16634125121004283983ull, 1017292526464000134ull, 2732108583212477424ull}}, {{1055725949822106688ull, 11569284364400579171ull, 1271615658080000168ull, 3415135729015596780ull}}, {{15154715492559797072ull, 14461605455500723963ull, 1589519572600000210ull, 4268919661269495975ull}}, {{7165854173636179218ull, 13650189428115340381ull, 7910978760516081987ull, 2668074788293434984ull}}, {{13569003735472611926ull, 12451050766716787572ull, 9888723450645102484ull, 3335093485366793730ull}}, {{16961254669340764908ull, 15563813458395984465ull, 3137532276451602297ull, 4168866856708492163ull}}, {{3683255140696896212ull, 2809854383856408435ull, 18101858737278109100ull, 2605541785442807601ull}}, {{18439126981153283976ull, 3512317979820510543ull, 8792265366315472663ull, 3256927231803509502ull}}, {{18437222708014217066ull, 18225455530057801891ull, 1766959671039565020ull, 4071159039754386878ull}}, {{9217421183295191715ull, 2167537669431350374ull, 14939407849681891850ull, 2544474399846491798ull}}, {{2298404442264213835ull, 11932794123643963776ull, 9450887775247589004ull, 3180592999808114748ull}}, {{2873005552830267294ull, 14915992654554954720ull, 11813609719059486255ull, 3975741249760143435ull}}, {{1795628470518917059ull, 16240024436737928556ull, 5077663065198484957ull, 2484838281100089647ull}}, {{2244535588148646323ull, 6464972490640246983ull, 1735392813070718293ull, 3106047851375112059ull}}, {{16640727540467971616ull, 12692901631727696632ull, 16004299071620561578ull, 3882559814218890073ull}}, {{10400454712792482260ull, 12544749538257198299ull, 3085157892121769130ull, 2426599883886806296ull}}, {{8388882372563214921ull, 6457564885966722066ull, 3856447365152211413ull, 3033249854858507870ull}}, {{1262730928849242843ull, 12683642125885790487ull, 14043931243295040074ull, 3791562318573134837ull}}, {{7706735858171858633ull, 12538962347106006958ull, 11083300036273093998ull, 2369726449108209273ull}}, {{410047785860047484ull, 6450330897027732890ull, 19066990059203786ull, 2962158061385261592ull}}, {{9735931769179835162ull, 17286285658139441920ull, 23833737574004732ull, 3702697576731576990ull}}, {{6084957355737396977ull, 1580556499482375392ull, 13849954141265916670ull, 2314185985457235618ull}}, {{7606196694671746221ull, 11199067661207745048ull, 8089070639727620029ull, 2892732481821544523ull}}, {{9507745868339682776ull, 163776521227517598ull, 5499652281232137133ull, 3615915602276930654ull}}, {{2661310298569827661ull, 4816406669961784902ull, 16097937388394947224ull, 4519894502846163317ull}}, {{15498376991888306001ull, 3010254168726115563ull, 12367053876960535967ull, 2824934064278852073ull}}, {{14761285221432994597ull, 17597875766189808166ull, 1623759290918506246ull, 3531167580348565092ull}}, {{9228234489936467438ull, 12773972670882484400ull, 2029699113648132808ull, 4413959475435706365ull}}, {{5767646556210292149ull, 7983732919301552750ull, 3574404955243776957ull, 2758724672147316478ull}}, {{16432930232117640994ull, 14591352167554328841ull, 13691378230909497004ull, 3448405840184145597ull}}, {{6706104734864887530ull, 18239190209442911052ull, 3279164733354707543ull, 4310507300230181997ull}}, {{13414687496145330515ull, 18317022908542901263ull, 4355320967560386166ull, 2694067062643863748ull}}, {{12156673351754275239ull, 13672906598823850771ull, 5444151209450482708ull, 3367583828304829685ull}}, {{10584155671265456145ull, 17091133248529813464ull, 11416875030240491289ull, 4209479785381037106ull}}, {{6615097294540910091ull, 3764429252690051559ull, 11747232912327694960ull, 2630924865863148191ull}}, {{3657185599748749709ull, 4705536565862564449ull, 10072355121982230796ull, 3288656082328935239ull}}, {{9183168018113325040ull, 5881920707328205561ull, 7978757884050400591ull, 4110820102911169049ull}}, {{17268695057389297910ull, 10593729469721210331ull, 16515938723599970129ull, 2569262564319480655ull}}, {{16974182803309234484ull, 17853847855578900818ull, 16033237386072574757ull, 3211578205399350819ull}}, {{11994356467281767297ull, 8482251764191462311ull, 15429860714163330543ull, 4014472756749188524ull}}, {{14414001819692186417ull, 12218936380260745800ull, 420290909497305781ull, 2509045472968242828ull}}, {{18017502274615233021ull, 1438612420043768538ull, 525363636871632227ull, 3136306841210303535ull}}, {{13298505806414265468ull, 15633323580336874385ull, 14491762601371703995ull, 3920383551512879418ull}}, {{1394037101367834061ull, 7464984228496852539ull, 13669037644284702901ull, 2450239719695549636ull}}, {{15577604431991956289ull, 13942916304048453577ull, 17086297055355878626ull, 3062799649619437045ull}}, {{5636947484707781649ull, 8205273343205791164ull, 7522813263912684571ull, 3828499562024296307ull}}, {{12746464214797139339ull, 2822452830289925525ull, 2395915280731733905ull, 2392812226265185192ull}}, {{2098022213214260461ull, 8139752056289794811ull, 2994894100914667381ull, 2991015282831481490ull}}, {{16457585821799989288ull, 14786376088789631417ull, 12966989662998110034ull, 3738769103539351862ull}}, {{3368462110983911449ull, 13853171073920907540ull, 3492682520946430867ull, 2336730689712094914ull}}, {{4210577638729889312ull, 12704777823973746521ull, 13589225188037814392ull, 2920913362140118642ull}}, {{9874908066839749543ull, 15880972279967183151ull, 7763159448192492182ull, 3651141702675148303ull}}, {{7731949065122299025ull, 10627843313104203131ull, 5092263291813227324ull, 4563927128343935379ull}}, {{2526625156487742939ull, 15865774107544902765ull, 876821548169573125ull, 2852454455214959612ull}}, {{7769967464037066578ull, 5997159579148964744ull, 1096026935211966407ull, 3565568069018699515ull}}, {{9712459330046333222ull, 2884763455508818026ull, 15205091724297121721ull, 4456960086273374393ull}}, {{10681973099706346168ull, 13332192205761481026ull, 2585653300044619219ull, 2785600053920858996ull}}, {{4129094337778156902ull, 12053554238774463379ull, 3232066625055774024ull, 3482000067401073745ull}}, {{549681903795308223ull, 15066942798468079224ull, 8651769299747105434ull, 4352500084251342181ull}}, {{343551189872067640ull, 14028525267469937419ull, 7713198821555634848ull, 2720312552657088863ull}}, {{14264497042622248261ull, 17535656584337421773ull, 5029812508517155656ull, 3400390690821361079ull}}, {{3995563247995646614ull, 3472826656712225601ull, 1675579617219056667ull, 4250488363526701349ull}}, {{14026442076065748894ull, 18311417724940998664ull, 3353080269975604368ull, 2656555227204188343ull}}, {{17533052595082186118ull, 4442528082466696714ull, 18026408392751669173ull, 3320694034005235428ull}}, {{12692943706997956839ull, 10164846121510758797ull, 4086266417230034850ull, 4150867542506544286ull}}, {{10238932826087416977ull, 10964714844371612152ull, 16388974566050935493ull, 2594292214066590178ull}}, {{12798666032609271221ull, 18317579573891903094ull, 11262846170708893558ull, 3242865267583237723ull}}, {{6774960503906813218ull, 13673602430510103060ull, 9466871694958729044ull, 4053581584479047154ull}}, {{13457722351796534069ull, 17769373555923590220ull, 10528480827776593556ull, 2533488490299404471ull}}, {{16822152939745667586ull, 3764972871194936159ull, 8548915016293354042ull, 3166860612874255589ull}}, {{16416005156254696579ull, 13929588125848446007ull, 15297829788794080456ull, 3958575766092819486ull}}, {{17177532250300267218ull, 8705992578655278754ull, 4949457599568912381ull, 2474109853808012179ull}}, {{12248543276020558214ull, 15494176741746486347ull, 1575135981033752572ull, 3092637317260015224ull}}, {{10698993076598309864ull, 920976853473556318ull, 1968919976292190716ull, 3865796646575019030ull}}, {{2075184654446555761ull, 9798982570275748507ull, 15065633040464782909ull, 2416122904109386893ull}}, {{16429038873340358413ull, 16860414231272073537ull, 4996983245298814924ull, 3020153630136733617ull}}, {{6701240536393284304ull, 2628773715380540306ull, 10857915075050906560ull, 3775192037670917021ull}}, {{8799961353673190594ull, 1642983572112837691ull, 9092039931120510552ull, 2359495023544323138ull}}, {{6388265673664100339ull, 2053729465141047114ull, 2141677877045862382ull, 2949368779430403923ull}}, {{17208704128934901231ull, 11790533868281084700ull, 16512155401589491689ull, 3686710974288004903ull}}, {{3064136087459074923ull, 903109280069192164ull, 16028508233559476708ull, 4608388717860006129ull}}, {{11138457091516697635ull, 9787815336898020910ull, 3100288618333591086ull, 2880242948662503831ull}}, {{4699699327541096236ull, 3011397134267750330ull, 17710418828199152570ull, 3600303685828129788ull}}, {{15097996196281146103ull, 12987618454689463720ull, 3691279461539389096ull, 4500379607285162236ull}}, {{9436247622675716314ull, 8117261534180914825ull, 11530421700316893993ull, 2812737254553226397ull}}, {{16406995546772033297ull, 14758262936153531435ull, 577969070113953779ull, 3515921568191532997ull}}, {{15897058415037653717ull, 13836142651764526390ull, 5334147356069830128ull, 4394901960239416246ull}}, {{5323975490971145669ull, 8647589157352828994ull, 17168900152825807542ull, 2746813725149635153ull}}, {{15878341400568707894ull, 1586114409836260434ull, 7626067135750095716ull, 3433517156437043942ull}}, {{10624554713856109060ull, 1982643012295325543ull, 309211882832843837ull, 4291896445546304928ull}}, {{13557875723801150019ull, 3544994891898272416ull, 193257426770527398ull, 2682435278466440580ull}}, {{16947344654751437523ull, 13654615651727616328ull, 241571783463159247ull, 3353044098083050725ull}}, {{2737436744729745288ull, 12456583546232132507ull, 4913650747756336963ull, 4191305122603813406ull}}, {{17851799029951948469ull, 5479521707181388864ull, 16906089772629874314ull, 2619565701627383378ull}}, {{3868004713730383970ull, 16072774170831511889ull, 11909240178932567084ull, 3274457127034229223ull}}, {{9446691910590367867ull, 1644223639829838245ull, 10274864205238320952ull, 4093071408792786529ull}}, {{8210025453332673869ull, 1027639774893648903ull, 17951005174342420355ull, 2558169630495491580ull}}, {{5650845798238454432ull, 15119607773899224841ull, 3992012394218473827ull, 3197712038119364476ull}}, {{11675243266225455944ull, 14287823698946643147ull, 4990015492773092284ull, 3997140047649205595ull}}, {{4991184032177216013ull, 18153261848696427775ull, 812916673769488725ull, 2498212529780753497ull}}, {{1627294021794132112ull, 8856519255588371007ull, 5627831860639248811ull, 3122765662225941871ull}}, {{15869175582524828852ull, 6458963051058075854ull, 2423103807371673110ull, 3903457077782427339ull}}, {{5306548720650630129ull, 17871909962193461121ull, 17655340944103153357ull, 2439660673614017086ull}}, {{11244871919240675565ull, 8504829397459662689ull, 12845804143274165889ull, 3049575842017521358ull}}, {{221031843768680744ull, 15242722765251966266ull, 6833883142237931553ull, 3811969802521901698ull}}, {{4749830920782813369ull, 2609172700641397060ull, 8882862982326095125ull, 2382481126576188561ull}}, {{5937288650978516711ull, 7873151894229134229ull, 15715264746335006810ull, 2978101408220235701ull}}, {{12033296832150533793ull, 618067830931641978ull, 5809022877636594801ull, 3722626760275294627ull}}, {{12132496538521471525ull, 11915507440400745996ull, 1324796289309177798ull, 2326641725172059142ull}}, {{15165620673151839406ull, 5671012263646156687ull, 10879367398491248056ull, 2908302156465073927ull}}, {{14345339823012411353ull, 7088765329557695859ull, 8987523229686672166ull, 3635377695581342409ull}}, {{13319988760338126287ull, 18084328698801895632ull, 15846090055535728111ull, 4544222119476678011ull}}, {{8324992975211328930ull, 18220234464392266626ull, 7597963275496136117ull, 2840138824672923757ull}}, {{1182869182159385354ull, 8940235025208169571ull, 14109140112797558051ull, 3550173530841154696ull}}, {{15313644532981395405ull, 6563607763082824059ull, 17636425140996947564ull, 4437716913551443370ull}}, {{7265184823899678176ull, 13325626888781540845ull, 15634451731550480131ull, 2773573070969652106ull}}, {{13693167048301985624ull, 12045347592549538152ull, 10319692627583324356ull, 3466966338712065133ull}}, {{17116458810377482030ull, 15056684490686922690ull, 17511301802906543349ull, 4333707923390081416ull}}, {{15309472774913314173ull, 11716270815893020633ull, 10944563626816589593ull, 2708567452118800885ull}}, {{5301782913359479004ull, 810280464584112080ull, 18292390551948124896ull, 3385709315148501106ull}}, {{6627228641699348755ull, 1012850580730140100ull, 13642116153080380312ull, 4232136643935626383ull}}, {{13365389937916868780ull, 633031612956337562ull, 15443851623316319551ull, 2645085402459766489ull}}, {{7483365385541310167ull, 14626347571477585665ull, 5469756473863235726ull, 3306356753074708112ull}}, {{13965892750354025612ull, 9059562427492206273ull, 6837195592329044658ull, 4132945941343385140ull}}, {{1811153941330184152ull, 10273912535610016825ull, 13496619282060428719ull, 2583091213339615712ull}}, {{6875628445090118094ull, 8230704651085133127ull, 16870774102575535899ull, 3228864016674519640ull}}, {{3982849537935259713ull, 5676694795429028505ull, 2641723554509868258ull, 4036080020843149551ull}}, {{14018496007278007081ull, 8159620265570530719ull, 8568606249209749517ull, 2522550013026968469ull}}, {{12911433990670120947ull, 14811211350390551303ull, 15322443829939574800ull, 3153187516283710586ull}}, {{11527606469910263279ull, 67270114278637513ull, 9929682750569692693ull, 3941484395354638233ull}}, {{287225016052832694ull, 2347886830637842398ull, 17735266765174527693ull, 2463427747096648895ull}}, {{9582403306920816675ull, 7546544556724690901ull, 17557397438040771712ull, 3079284683870811119ull}}, {{16589690152078408748ull, 9433180695905863626ull, 17335060779123576736ull, 3849105854838513899ull}}, {{14980242363476393372ull, 5895737934941164766ull, 8528569977738541508ull, 2405691159274071187ull}}, {{9501930917490715906ull, 7369672418676455958ull, 6049026453745788981ull, 3007113949092588984ull}}, {{2654041610008619075ull, 13823776541772957852ull, 7561283067182236226ull, 3758892436365736230ull}}, {{10882148043110162730ull, 13251546357035486561ull, 114115898561509737ull, 2349307772728585144ull}}, {{18214371072315091316ull, 2729374891012194489ull, 142644873201887172ull, 2936634715910731430ull}}, {{8932905785111700433ull, 3411718613765243112ull, 9401678128357134773ull, 3670793394888414287ull}}, {{11166132231389625542ull, 8876334285633941794ull, 7140411642019030562ull, 4588491743610517859ull}}, {{11590518663045903868ull, 10159394946948601525ull, 2156914267048200149ull, 2867807339756573662ull}}, {{653090273525216122ull, 17310929702113139811ull, 11919514870665025994ull, 3584759174695717077ull}}, {{14651420897188683865ull, 12415290090786648955ull, 1064335533049118781ull, 4480948968369646347ull}}, {{6851295051529233464ull, 10065399315955349549ull, 16806110772651556902ull, 2800593105231028966ull}}, {{13175804832838929734ull, 3358377108089411128ull, 11784266428959670320ull, 3500741381538786208ull}}, {{16469756041048662167ull, 4197971385111763910ull, 14730333036199587900ull, 4375926726923482760ull}}, {{5681911507228025950ull, 11847104152549628252ull, 9206458147624742437ull, 2734954204327176725ull}}, {{7102389384035032438ull, 973822135404871603ull, 16119758702958315951ull, 3418692755408970906ull}}, {{4266300711616402643ull, 15052335724538253216ull, 10926326341843119130ull, 4273365944261213633ull}}, {{2666437944760251652ull, 14019395846263796164ull, 18358169009720419216ull, 2670853715163258520ull}}, {{3333047430950314565ull, 17524244807829745205ull, 4500967188440972404ull, 3338567143954073151ull}}, {{8777995307115281110ull, 3458561936077629890ull, 1014522967123827602ull, 4173208929942591439ull}}, {{10097933085374438598ull, 6773287228475906585ull, 7551605882093474107ull, 2608255581214119649ull}}, {{17234102375145436152ull, 3854923017167495327ull, 14051193371044230538ull, 3260319476517649561ull}}, {{16930941950504407285ull, 14042025808314144967ull, 3728933658523124460ull, 4075399345647061952ull}}, {{17499367746706336410ull, 17999638167051116412ull, 2330583536576952787ull, 2547124591029413720ull}}, {{3427465609673368896ull, 17887861690386507612ull, 2913229420721190984ull, 3183905738786767150ull}}, {{4284332012091711120ull, 3913083039273582899ull, 12864908812756264539ull, 3979882173483458937ull}}, {{371864498343625498ull, 139833890332295360ull, 1123038980331583481ull, 2487426358427161836ull}}, {{464830622929531872ull, 4786478381342757104ull, 1403798725414479351ull, 3109282948033952295ull}}, {{581038278661914840ull, 1371411958251058476ull, 15589806462050262901ull, 3886603685042440368ull}}, {{9586520961018472583ull, 3162975483120605499ull, 9743629038781414313ull, 2429127303151525230ull}}, {{7371465182845702825ull, 8565405372328144778ull, 2956164261621992083ull, 3036409128939406538ull}}, {{18437703515411904339ull, 6095070696982793068ull, 12918577363882265912ull, 3795511411174258172ull}}, {{2300192660277664404ull, 3809419185614245668ull, 17297482889281192003ull, 2372194631983911357ull}}, {{2875240825347080505ull, 150087963590419181ull, 7786795556319326292ull, 2965243289979889197ull}}, {{8205737050111238535ull, 187609954488023976ull, 14345180463826545769ull, 3706554112474861496ull}}, {{5128585656319524085ull, 11646471267623484745ull, 8965737789891591105ull, 2316596320296788435ull}}, {{11022418088826793010ull, 723031029247192219ull, 6595486218937100978ull, 2895745400370985544ull}}, {{9166336592606103358ull, 10127160823413766082ull, 8244357773671376222ull, 3619681750463731930ull}}, {{2234548703902853390ull, 3435578992412431795ull, 1082075180234444470ull, 4524602188079664913ull}}, {{17537494004435141033ull, 15982294925539933583ull, 12205512033714997553ull, 2827876367549790570ull}}, {{17310181487116538387ull, 6142810601642753267ull, 6033518005288971134ull, 3534845459437238213ull}}, {{17026040840468285079ull, 16901885288908217392ull, 12153583525038601821ull, 4418556824296547766ull}}, {{10641275525292678175ull, 12869521314781329822ull, 2984303684721738234ull, 2761598015185342354ull}}, {{4078222369761071910ull, 6863529606621886470ull, 12953751642756948601ull, 3451997518981677942ull}}, {{14321149999056115696ull, 13191098026704745991ull, 6968817516591409943ull, 4314996898727097428ull}}, {{15868247777051154166ull, 15161965294331548100ull, 13578882984724407022ull, 2696873061704435892ull}}, {{1388565647604391091ull, 9729084581059659318ull, 16973603730905508778ull, 3371091327130544865ull}}, {{10959079096360264672ull, 2937983689469798339ull, 7381946608349722261ull, 4213864158913181082ull}}, {{4543581426011471468ull, 4142082815132317914ull, 9225402648645964317ull, 2633665099320738176ull}}, {{14902848819369115143ull, 9789289537342785296ull, 11531753310807455396ull, 3292081374150922720ull}}, {{181816950501842313ull, 12236611921678481621ull, 14414691638509319245ull, 4115101717688653400ull}}, {{2419478603277345398ull, 9953725460262744965ull, 9009182274068324528ull, 2571938573555408375ull}}, {{7636034272524069651ull, 12442156825328431206ull, 6649791824158017756ull, 3214923216944260469ull}}, {{321670803800311256ull, 15552696031660539008ull, 12923925798624910099ull, 4018654021180325586ull}}, {{201044252375194535ull, 7414592010574142928ull, 12689139642567956716ull, 2511658763237703491ull}}, {{251305315468993169ull, 9268240013217678660ull, 11249738534782557991ull, 3139573454047129364ull}}, {{314131644336241461ull, 6973613998094710421ull, 14062173168478197489ull, 3924466817558911705ull}}, {{2502175286923844865ull, 15887723794877663773ull, 1871329202657791574ull, 2452791760974319816ull}}, {{7739405127082193985ull, 10636282706742303908ull, 2339161503322239468ull, 3065989701217899770ull}}, {{9674256408852742481ull, 13295353383427879885ull, 12147323916007575143ull, 3832487126522374712ull}}, {{8352253264746658003ull, 15227124892283506784ull, 7592077447504734464ull, 2395304454076484195ull}}, {{10440316580933322504ull, 587162041644831864ull, 4878410790953530177ull, 2994130567595605244ull}}, {{13050395726166653129ull, 5345638570483427734ull, 6098013488691912721ull, 3742663209494506555ull}}, {{3544811310426770302ull, 14870239152620612094ull, 1505415421218751498ull, 2339164505934066597ull}}, {{13654386174888238686ull, 9364426903920989309ull, 6493455294950827277ull, 2923955632417583246ull}}, {{3232924663328134645ull, 16317219648328624541ull, 17340191155543309904ull, 3654944540521979057ull}}, {{8652841847587556210ull, 1949780486701229060ull, 7840180889146973669ull, 4568680675652473822ull}}, {{14631398191596998439ull, 3524455813401962114ull, 288427037289470639ull, 2855425422282796139ull}}, {{9065875702641472241ull, 18240627822034616355ull, 14195591851894002010ull, 3569281777853495173ull}}, {{6720658609874452397ull, 13577412740688494636ull, 3909431759585338801ull, 4461602222316868967ull}}, {{13423783668026308556ull, 1568353935289227291ull, 9360923877381918607ull, 2788501388948043104ull}}, {{12168043566605497791ull, 15795500474393697826ull, 11701154846727398258ull, 3485626736185053880ull}}, {{5986682421402096431ull, 10521003556137346475ull, 14626443558409247823ull, 4357033420231317350ull}}, {{1435833504162616318ull, 13493156250226923403ull, 4529841205578391985ull, 2723145887644573344ull}}, {{15629849935485434109ull, 3031387257501490541ull, 5662301506972989982ull, 3403932359555716680ull}}, {{5702254364074628924ull, 13012606108731638985ull, 7077876883716237477ull, 4254915449444645850ull}}, {{15093124023615112838ull, 10438721827170968317ull, 9035359070750036327ull, 2659322155902903656ull}}, {{5031346974236727335ull, 8436716265536322493ull, 11294198838437545409ull, 3324152694878629570ull}}, {{10900869736223297073ull, 15157581350347791020ull, 4894376511192155953ull, 4155190868598286963ull}}, {{16036415621994336479ull, 2555959316326287531ull, 753142310281403519ull, 2596994292873929352ull}}, {{15433833509065532694ull, 17030007200690023126ull, 941427887851754398ull, 3246242866092411690ull}}, {{10068919849477140060ull, 12064136964007753100ull, 10400156896669468806ull, 4057803582615514612ull}}, {{15516446942777988345ull, 2928399584077457783ull, 15723470097273193812ull, 2536127239134696632ull}}, {{14783872660045097528ull, 3660499480096822229ull, 1207593547881940649ull, 3170159048918370791ull}}, {{4644782769774208197ull, 9187310368548415691ull, 15344549990134589523ull, 3962698811147963488ull}}, {{597146221895186172ull, 3436225971129065855ull, 9590343743834118452ull, 2476686756967477180ull}}, {{14581490832651146426ull, 4295282463911332318ull, 11987929679792648065ull, 3095858446209346475ull}}, {{9003491503959157225ull, 9980789098316553302ull, 10373226081313422177ull, 3869823057761683094ull}}, {{1015496171547085362ull, 17767208232516315574ull, 1871580282393500956ull, 2418639411101051934ull}}, {{10492742251288632510ull, 3762266216935842851ull, 11562847389846652004ull, 3023299263876314917ull}}, {{8504241795683402733ull, 4702832771169803564ull, 618501182026151293ull, 3779124079845393647ull}}, {{14538523159156902517ull, 5245113491194821179ull, 7304092266407426414ull, 2361952549903371029ull}}, {{13561467930518740242ull, 15779763900848302282ull, 13741801351436670921ull, 2952440687379213786ull}}, {{7728462876293649494ull, 5889646820778214141ull, 7953879652441062844ull, 3690550859224017233ull}}, {{7136132306897224886ull, 12904401299841159646ull, 16500389828844134037ull, 2306594287015010770ull}}, {{18143537420476306915ull, 2295443569519285845ull, 11402115249200391739ull, 2883242858768763463ull}}, {{8844363720313219932ull, 16704362517181271019ull, 9640958043073101769ull, 3604053573460954329ull}}, {{6443768631964137011ull, 7045395091194425062ull, 16662883572268765116ull, 4505066966826192911ull}}, {{17862413450259749344ull, 13626743968851291471ull, 17331831260309060053ull, 2815666854266370569ull}}, {{17716330794397298776ull, 3198371905781950627ull, 7829731020104161355ull, 3519583567832963212ull}}, {{17533727474569235565ull, 17833022937509601996ull, 9787163775130201693ull, 4399479459791204015ull}}, {{1735207634750996421ull, 13451482345157195200ull, 13034506387097457914ull, 2749674662369502509ull}}, {{2169009543438745526ull, 7590980894591718192ull, 2458074928589658681ull, 3437093327961878137ull}}, {{2711261929298431907ull, 14100412136667035644ull, 7684279679164461255ull, 4296366659952347671ull}}, {{10917910742666295750ull, 15730286613057979133ull, 11720203827118870140ull, 2685229162470217294ull}}, {{18259074446760257591ull, 1216114192612922300ull, 5426882747043811868ull, 3356536453087771618ull}}, {{4377098984740770373ull, 1520142740766152876ull, 16006975470659540643ull, 4195670566359714522ull}}, {{11959058902317757291ull, 17090990277474703211ull, 14616045687589600805ull, 2622294103974821576ull}}, {{10337137609469808710ull, 7528679791561215302ull, 18270057109487001007ull, 3277867629968526970ull}}, {{3698049974982485079ull, 4799163721024131224ull, 13614199350003975451ull, 4097334537460658713ull}}, {{2311281234364053175ull, 693634316426388063ull, 1591345566111402801ull, 2560834085912911696ull}}, {{16724159598237230180ull, 5478728913960372982ull, 1989181957639253501ull, 3201042607391139620ull}}, {{11681827460941761917ull, 11460097160877854132ull, 2486477447049066876ull, 4001303259238924525ull}}, {{16524514199943377007ull, 16385932762403434640ull, 3859891413619360749ull, 2500814537024327828ull}}, {{2208898676219669642ull, 6647357897722129589ull, 4824864267024200937ull, 3126018171280409785ull}}, {{7372809363701974956ull, 12920883390580049890ull, 10642766352207639075ull, 3907522714100512231ull}}, {{9219691870741122252ull, 5769709109898837229ull, 13569257997770856278ull, 2442201696312820144ull}}, {{16136300856853790719ull, 16435508424228322344ull, 16961572497213570347ull, 3052752120391025180ull}}, {{1723631997357686782ull, 15932699511858015027ull, 2755221547807411318ull, 3815940150488781476ull}}, {{17218171062844411903ull, 5346251176483871487ull, 10945385504234407882ull, 2384962594055488422ull}}, {{16911027810128126975ull, 15906186007459615167ull, 4458359843438234044ull, 2981203242569360528ull}}, {{16527098744232770815ull, 1435988435614967343ull, 5572949804297792556ull, 3726504053211700660ull}}, {{17246965742786563615ull, 10120864809114130397ull, 12706465664540896155ull, 2329065033257312912ull}}, {{7723649123201040807ull, 8039394992965275093ull, 15883082080676120194ull, 2911331291571641140ull}}, {{14266247422428688913ull, 825871704351818058ull, 1407108527135598627ull, 3639164114464551426ull}}, {{8609437241181085333ull, 14867397685721936285ull, 10982257695774274091ull, 4548955143080689282ull}}, {{7686741284951872285ull, 6986280544362516226ull, 11475597078286309211ull, 2843096964425430801ull}}, {{385054569335064548ull, 4121164662025757379ull, 509438292575722802ull, 3553871205531788502ull}}, {{14316376266950994397ull, 14374827864386972531ull, 9860169902574429310ull, 4442339006914735627ull}}, {{6641892157630677546ull, 4372581396814469928ull, 3856763179895324367ull, 2776461879321709767ull}}, {{8302365197038346933ull, 854040727590699506ull, 209267956441767555ull, 3470577349152137209ull}}, {{1154584459443157858ull, 14902608964770538095ull, 4873270963979597347ull, 4338221686440171511ull}}, {{7639144314793055517ull, 7008287593767892357ull, 9963323380128330198ull, 2711388554025107194ull}}, {{14160616411918707301ull, 17983731529064641254ull, 3230782188305636939ull, 3389235692531383993ull}}, {{8477398478043608318ull, 17867978392903413664ull, 8650163753809434078ull, 4236544615664229991ull}}, {{5298374048777255199ull, 6555800477137245636ull, 12323881373771978155ull, 2647840384790143744ull}}, {{6622967560971568998ull, 3583064577994169141ull, 15404851717214972694ull, 3309800480987679680ull}}, {{12890395469641849152ull, 13702202759347487234ull, 809320572809164251ull, 4137250601234599601ull}}, {{12668183186953543624ull, 6258033715378485569ull, 12035040404074197417ull, 2585781625771624750ull}}, {{2000170928409765818ull, 12434228162650494866ull, 5820428468237970963ull, 3232227032214530938ull}}, {{11723585697366983080ull, 10931099184885730678ull, 16498907622152239512ull, 4040283790268163672ull}}, {{2715555042426976521ull, 6831936990553581674ull, 10311817263845149695ull, 2525177368917602295ull}}, {{12617815839888496460ull, 3928235219764589188ull, 8278085561379049215ull, 3156471711147002869ull}}, {{15772269799860620574ull, 298608006278348581ull, 14959292970151199423ull, 3945589638933753586ull}}, {{12163511634126581811ull, 7104159031565049719ull, 13961244124771887543ull, 2465993524333595991ull}}, {{10592703524230839360ull, 4268512771028924245ull, 12839869137537471525ull, 3082491905416994989ull}}, {{17852565423715937104ull, 9947326982213543210ull, 2214778366639675694ull, 3853114881771243737ull}}, {{15769539408249848594ull, 1605393345456076602ull, 12913451525218267069ull, 2408196801107027335ull}}, {{10488552223457534934ull, 6618427700247483657ull, 11530128388095445932ull, 3010246001383784169ull}}, {{17722376297749306572ull, 8273034625309354571ull, 577602429837143703ull, 3762807501729730212ull}}, {{8770642176879622656ull, 12088175668459428463ull, 9584373555502990622ull, 2351754688581081382ull}}, {{6351616702672140415ull, 5886847548719509771ull, 2757094907523962470ull, 2939693360726351728ull}}, {{3327834859912787615ull, 16581931472754163022ull, 3446368634404953087ull, 3674616700907939660ull}}, {{13383165611745760327ull, 16115728322515315873ull, 4307960793006191359ull, 4593270876134924575ull}}, {{1446949479700018348ull, 16989859229213154277ull, 9610004523269951455ull, 2870794297584327859ull}}, {{6420372868052410839ull, 16625638018089054942ull, 7400819635660051415ull, 3588492871980409824ull}}, {{17248838121920289357ull, 16170361504183930773ull, 9251024544575064269ull, 4485616089975512280ull}}, {{13086366835413874800ull, 12412318949328650685ull, 5781890340359415168ull, 2803510056234695175ull}}, {{2522900488985179788ull, 15515398686660813357ull, 2615676907021881056ull, 3504387570293368969ull}}, {{7765311629658862639ull, 947504284616465080ull, 7881282152204739225ull, 4380484462866711211ull}}, {{4853319768536789150ull, 12121405223953760435ull, 2619958335914268063ull, 2737802789291694507ull}}, {{1454963692243598533ull, 10540070511514812640ull, 17110005975174998791ull, 3422253486614618133ull}}, {{1818704615304498166ull, 8563402120966127896ull, 7552449413686584777ull, 4277816858268272667ull}}, {{1136690384565311354ull, 16881341371672299695ull, 2414437874340421533ull, 2673635536417670417ull}}, {{15255921035988802904ull, 7266618659308210906ull, 7629733361352914821ull, 3342044420522088021ull}}, {{9846529258131227822ull, 13694959342562651537ull, 14148852720118531430ull, 4177555525652610026ull}}, {{17683295832400487149ull, 3947663570674269306ull, 13454718968501470048ull, 2610972203532881266ull}}, {{12880747753645833128ull, 4934579463342836633ull, 7595026673772061752ull, 3263715254416101583ull}}, {{2265876636775127698ull, 6168224329178545792ull, 4882097323787689286ull, 4079644068020126979ull}}, {{1416172897984454812ull, 17690198261018754832ull, 745467818153611851ull, 2549777542512579362ull}}, {{1770216122480568514ull, 17501061807846055636ull, 10155206809546790622ull, 3187221928140724202ull}}, {{2212770153100710643ull, 12652955222952793737ull, 3470636475078712470ull, 3984027410175905253ull}}, {{12912196391756413912ull, 3296410995918108181ull, 4474990806137889246ull, 2490017131359940783ull}}, {{2305187434413353678ull, 13343885781752411035ull, 982052489244973653ull, 3112521414199925979ull}}, {{16716542348298855809ull, 2844799171908350081ull, 15062623666838380779ull, 3890651767749907473ull}}, {{3530309940045703025ull, 17918900546938576465ull, 2496610764132906130ull, 2431657354843692171ull}}, {{9024573443484516685ull, 13175253646818444773ull, 16955821510448296375ull, 3039571693554615213ull}}, {{15892402822783033760ull, 11857381040095668062ull, 7359718832778206757ull, 3799464616943269017ull}}, {{5321065745812008196ull, 9716706159273486491ull, 16129039316554848983ull, 2374665385589543135ull}}, {{2039646163837622341ull, 7534196680664470210ull, 15549613127266173325ull, 2968331731986928919ull}}, {{11772929741651803734ull, 14029431869257975666ull, 14825330390655328752ull, 3710414664983661149ull}}, {{11969767106959765238ull, 8768394918286234791ull, 11571674503373274422ull, 2319009165614788218ull}}, {{10350522865272318644ull, 1737121611003017681ull, 5241221092361817220ull, 2898761457018485273ull}}, {{17549839600017786208ull, 2171402013753772101ull, 11163212383879659429ull, 3623451821273106591ull}}, {{8102241444740069048ull, 7325938535619603031ull, 9342329461422186382ull, 4529314776591383239ull}}, {{11981429930603625011ull, 18413769640044415606ull, 12756484941029948344ull, 2830821735369614524ull}}, {{5753415376399755456ull, 4570467976345967892ull, 15945606176287435431ull, 3538527169212018155ull}}, {{7191769220499694320ull, 1101398952005071961ull, 15320321701931906385ull, 4423158961515022694ull}}, {{16024070808880778710ull, 12217589391071639735ull, 4963515045280053586ull, 2764474350946889184ull}}, {{15418402492673585484ull, 6048614701984773861ull, 6204393806600066983ull, 3455592938683611480ull}}, {{5437945060559818142ull, 2949082359053579423ull, 7755492258250083729ull, 4319491173354514350ull}}, {{10316244690490968195ull, 13372391520476956899ull, 235496642978914426ull, 2699681983346571469ull}}, {{8283619844686322340ull, 7492117363741420316ull, 4906056822151030937ull, 3374602479183214336ull}}, {{10354524805857902925ull, 13976832723104163299ull, 6132571027688788671ull, 4218253098979017920ull}}, {{4165734994447495376ull, 15653049479581183918ull, 3832856892305492919ull, 2636408186861886200ull}}, {{14430540779914145028ull, 14954625831049091993ull, 4791071115381866149ull, 3295510233577357750ull}}, {{4203117919610517573ull, 4858224233529201280ull, 15212210931082108495ull, 4119387791971697187ull}}, {{2626948699756573483ull, 9953919173596832656ull, 7201788822712623857ull, 2574617369982310742ull}}, {{3283685874695716854ull, 17054084985423428724ull, 18225608065245555629ull, 3218271712477888427ull}}, {{4104607343369646067ull, 7482548176497122193ull, 18170324063129556633ull, 4022839640597360534ull}}, {{14094594635674498552ull, 16205807656379171130ull, 6744766521028584991ull, 2514274775373350334ull}}, {{8394871257738347382ull, 15645573552046576009ull, 17654330188140507047ull, 3142843469216687917ull}}, {{15105275090600322132ull, 14945280921630832107ull, 8232854679893470097ull, 3928554336520859897ull}}, {{7134953922411507380ull, 2423271548378188211ull, 16674749221001888571ull, 2455346460325537435ull}}, {{4307006384586996321ull, 16864147490754898976ull, 16231750507824972809ull, 3069183075406921794ull}}, {{5383757980733745402ull, 7245126308161460008ull, 11066316097926440204ull, 3836478844258652243ull}}, {{3364848737958590876ull, 13751575979455688313ull, 4610604551990331175ull, 2397799277661657652ull}}, {{8817746940875626499ull, 12577783955892222487ull, 5763255689987913969ull, 2997249097077072065ull}}, {{6410497657667145220ull, 1887171889583114397ull, 11815755630912280366ull, 3746561371346340081ull}}, {{6312404045255659715ull, 15014540486271610210ull, 467318241679093372ull, 2341600857091462551ull}}, {{17113877093424350451ull, 321431534129961146ull, 14419205857381030428ull, 2927001071364328188ull}}, {{12168974329925662256ull, 401789417662451433ull, 18024007321726288035ull, 3658751339205410235ull}}, {{1376159857124914108ull, 14337294827360228004ull, 17918323133730472139ull, 4573439174006762794ull}}, {{10083471947557847125ull, 6654966257886448550ull, 15810637977008932991ull, 2858399483754226746ull}}, {{3380967897592533099ull, 3707021803930672784ull, 10539925434406390431ull, 3572999354692783433ull}}, {{4226209871990666373ull, 22091236485953076ull, 17786592811435375943ull, 4466249193365979291ull}}, {{11864753206848942291ull, 6931336050444802528ull, 8810777497933416012ull, 2791405745853737057ull}}, {{14830941508561177864ull, 8664170063056003160ull, 15625157890844157919ull, 3489257182317171321ull}}, {{91932811991920714ull, 6218526560392616047ull, 5696389308273033687ull, 4361571477896464152ull}}, {{6974987035136032302ull, 10804108127886466885ull, 3560243317670646054ull, 2725982173685290095ull}}, {{13330419812347428282ull, 4281763123003307798ull, 18285362202370471280ull, 3407477717106612618ull}}, {{7439652728579509544ull, 5352203903754134748ull, 13633330716108313292ull, 4259347146383265773ull}}, {{13873154992216969273ull, 12568499476701110025ull, 10826674706781389759ull, 2662091966489541108ull}}, {{3506385684989047880ull, 11098938327448999628ull, 13533343383476737199ull, 3327614958111926385ull}}, {{4382982106236309849ull, 9261986890883861631ull, 3081621174063757787ull, 4159518697639907982ull}}, {{9656892844038775512ull, 3482898797588719567ull, 15761071289072012329ull, 2599699186024942488ull}}, {{7459430036621081486ull, 8965309515413287363ull, 1254595037630463795ull, 3249623982531178111ull}}, {{4712601527348963953ull, 6594950875839221300ull, 15403301852320243456ull, 4062029978163972638ull}}, {{12168747991447878279ull, 4121844297399513312ull, 5015377639272764256ull, 2538768736352482899ull}}, {{15210934989309847849ull, 5152305371749391640ull, 1657536030663567416ull, 3173460920440603624ull}}, {{566924662927758195ull, 6440381714686739551ull, 2071920038329459270ull, 3966826150550754530ull}}, {{7271856941970930728ull, 17860296626961375931ull, 5906636042383299947ull, 2479266344094221581ull}}, {{4478135159036275506ull, 17713684765274332010ull, 11994981071406512838ull, 3099082930117776976ull}}, {{14821040985650120190ull, 12918733919738139204ull, 14993726339258141048ull, 3873853662647221220ull}}, {{39778579176549311ull, 8074208699836337003ull, 147706925181562347ull, 2421158539154513263ull}}, {{13884781279252850351ull, 5481074856368033349ull, 14019691711759116646ull, 3026448173943141578ull}}, {{3520918543783899226ull, 16074715607314817495ull, 8301242602844119999ull, 3783060217428926973ull}}, {{9118103117506018872ull, 16964226282212842790ull, 7494119635991268951ull, 2364412635893079358ull}}, {{2174256860027747782ull, 16593596834338665584ull, 144277508134310381ull, 2955515794866349198ull}}, {{2717821075034684728ull, 6906937987641168268ull, 9403718922022663785ull, 3694394743582936497ull}}, {{10922010208751453763ull, 15846051288344199927ull, 17406539372332634625ull, 2308996714739335310ull}}, {{9040826742511929300ull, 5972506055148086197ull, 12534802178561017474ull, 2886245893424169138ull}}, {{15912719446567299529ull, 16689004605789883554ull, 6445130686346496034ull, 3607807366780211423ull}}, {{10667527271354348603ull, 11637883720382578635ull, 3444727339505732139ull, 4509759208475264279ull}}, {{4361361535382773925ull, 4967834316025417695ull, 9070483614832164443ull, 2818599505297040174ull}}, {{840015900801079502ull, 1598106876604384215ull, 2114732481685429746ull, 3523249381621300218ull}}, {{14885077931283513089ull, 11221005632610256076ull, 11866787638961562990ull, 4404061727026625272ull}}, {{79801670197419873ull, 2401442501954022144ull, 7416742274350976869ull, 2752538579391640795ull}}, {{99752087746774841ull, 7613489145869915584ull, 4659241824511333182ull, 3440673224239550994ull}}, {{124690109683468551ull, 293489395482618672ull, 15047424317493942286ull, 4300841530299438742ull}}, {{77931318552167845ull, 14018488927458800382ull, 4792954180006326024ull, 2688025956437149214ull}}, {{9320786185044985614ull, 17523111159323500477ull, 15214564761862683338ull, 3360032445546436517ull}}, {{16262668749733619921ull, 12680516912299599788ull, 5183147897046190461ull, 4200040556933045647ull}}, {{940795931728736643ull, 10231166079400943820ull, 10156996463294950894ull, 2625025348083153529ull}}, {{1175994914660920804ull, 3565585562396403967ull, 17307931597546076522ull, 3281281685103941911ull}}, {{15305051698608314716ull, 13680353989850280766ull, 17023228478505207748ull, 4101602106379927389ull}}, {{4953971293202808794ull, 17773593280511201287ull, 12945360808279448794ull, 2563501316487454618ull}}, {{1580778098076123088ull, 12993619563784225801ull, 6958328973494535185ull, 3204376645609318273ull}}, {{6587658641022541764ull, 2406966399448118539ull, 13309597235295556886ull, 4005470807011647841ull}}, {{1811443641425394651ull, 15339412054937237799ull, 1400969244418641197ull, 2503419254382279901ull}}, {{16099362607063907025ull, 5339207013389383536ull, 6362897573950689401ull, 3129274067977849876ull}}, {{1677459185120332166ull, 11285694785164117325ull, 7953621967438361751ull, 3911592584972312345ull}}, {{3354254999913901556ull, 13971088268368655184ull, 16500228775717445854ull, 2444745365607695215ull}}, {{4192818749892376944ull, 8240488298606043172ull, 16013599951219419414ull, 3055931707009619019ull}}, {{5241023437365471180ull, 1077238336402778157ull, 15405313920596886364ull, 3819914633762023774ull}}, {{5581482657567113440ull, 9896645997106512156ull, 5016635181945666073ull, 2387446646101264859ull}}, {{6976853321958891800ull, 16982493514810528099ull, 1659107959004694687ull, 2984308307626581074ull}}, {{4109380634021226846ull, 16616430875085772220ull, 11297256985610644167ull, 3730385384533226342ull}}, {{11791734933118042587ull, 17302798324569689493ull, 2449099597579264700ull, 2331490865333266464ull}}, {{904610611115389521ull, 3181753832002560251ull, 3061374496974080876ull, 2914363581666583080ull}}, {{14965821319176400613ull, 3977192290003200313ull, 3826718121217601095ull, 3642954477083228850ull}}, {{4872218593688337055ull, 359804344076612488ull, 14006769688376777177ull, 4553693096354036062ull}}, {{3045136621055210659ull, 11754092761116352565ull, 4142545036808097831ull, 2846058185221272539ull}}, {{8418106794746401228ull, 10080929932968052802ull, 566495277582734385ull, 3557572731526590674ull}}, {{1299261456578225727ull, 17212848434637453907ull, 9931491133833193789ull, 4446965914408238342ull}}, {{16952939474857248744ull, 13063873280862102643ull, 1595495940218358214ull, 2779353696505148964ull}}, {{16579488325144173025ull, 7106469564222852496ull, 1994369925272947768ull, 3474192120631436205ull}}, {{2277616332720664666ull, 8883086955278565621ull, 7104648425018572614ull, 4342740150789295256ull}}, {{3729353217164109368ull, 940243328621715609ull, 4440405265636607884ull, 2714212594243309535ull}}, {{9273377539882524614ull, 1175304160777144511ull, 938820563618371951ull, 3392765742804136919ull}}, {{6980035906425767863ull, 15304188256253594351ull, 15008583759805128650ull, 4240957178505171148ull}}, {{11280051469157186771ull, 14176803678585884373ull, 156992813023429598ull, 2650598236565731968ull}}, {{265006281164319751ull, 8497632561377579659ull, 196241016279286998ull, 3313247795707164960ull}}, {{14166315906737563401ull, 1398668664867198765ull, 245301270349108748ull, 4141559744633956200ull}}, {{11159790450924671078ull, 10097539952396775036ull, 153313293968192967ull, 2588474840396222625ull}}, {{13949738063655838847ull, 8010238922068580891ull, 4803327635887629113ull, 3235593550495278281ull}}, {{12825486561142410655ull, 14624484671013114018ull, 10615845563286924295ull, 4044491938119097851ull}}, {{12627615119141394564ull, 16057831947024278117ull, 4329060467840633732ull, 2527807461324436157ull}}, {{1949460843644579492ull, 1625545860070796031ull, 10023011603228180070ull, 3159759326655545196ull}}, {{16271884109837888077ull, 11255304361943270846ull, 12528764504035225087ull, 3949699158319431495ull}}, {{5558241550221292144ull, 13952094253855626135ull, 14748006842663097535ull, 2468561973949644684ull}}, {{2336115919349227276ull, 12828431798892144765ull, 18435008553328871919ull, 3085702467437055855ull}}, {{7531830917613921999ull, 11423853730187793052ull, 18432074673233701995ull, 3857128084296319819ull}}, {{13930766360363477058ull, 4834065572153676705ull, 9214203661557369795ull, 2410705052685199887ull}}, {{3578399895172182610ull, 1430895946764707978ull, 6906068558519324340ull, 3013381315856499859ull}}, {{13696371905820004071ull, 1788619933455884972ull, 4020899679721767521ull, 3766726644820624824ull}}, {{17783604477992278352ull, 12647102504478397867ull, 2513062299826104700ull, 2354204153012890515ull}}, {{17617819579062960036ull, 15808878130597997334ull, 16976385930064794587ull, 2942755191266113143ull}}, {{12798902436973924237ull, 15149411644820108764ull, 16608796394153605330ull, 3678443989082641429ull}}, {{15998628046217405296ull, 9713392519170360147ull, 6925937437409842951ull, 4598054986353301787ull}}, {{7693299519672184358ull, 12988399352122556948ull, 2022867889167457892ull, 2873784366470813617ull}}, {{9616624399590230448ull, 16235499190153196185ull, 7140270879886710269ull, 3592230458088517021ull}}, {{16632466517915175964ull, 6459315932409331519ull, 13537024618285775741ull, 4490288072610646276ull}}, {{17312820601338066834ull, 6342915466969526151ull, 17684012423283385646ull, 2806430045381653922ull}}, {{17029339733245195638ull, 17152016370566683497ull, 12881643492249456249ull, 3508037556727067403ull}}, {{7451616611274330835ull, 7604962407926190660ull, 11490368346884432408ull, 4385046945908834254ull}}, {{13880632418901232580ull, 4753101504953869162ull, 2569794198375382351ull, 2740654341193021409ull}}, {{8127418486771764917ull, 1329690862764948549ull, 7823928766396615843ull, 3425817926491276761ull}}, {{14770959126892094050ull, 15497171633738349398ull, 14391596976423157707ull, 4282272408114095951ull}}, {{4620163435880170878ull, 7379889261872774422ull, 15912277137905555423ull, 2676420255071309969ull}}, {{14998576331704989405ull, 4613175558913580123ull, 6055288367099780567ull, 3345525318839137462ull}}, {{14136534396203848852ull, 1154783430214587250ull, 16792482495729501517ull, 4181906648548921827ull}}, {{13447020016054793437ull, 3027582653097810983ull, 8189458550617244496ull, 2613691655343076142ull}}, {{12197089001641103892ull, 3784478316372263729ull, 1013451151416779812ull, 3267114569178845178ull}}, {{1411303196769216152ull, 4730597895465329662ull, 10490185976125750573ull, 4083893211473556472ull}}, {{14717122553262923807ull, 5262466693879524990ull, 6556366235078594108ull, 2552433257170972795ull}}, {{9173031154723878951ull, 6578083367349406238ull, 3583771775420854731ull, 3190541571463715994ull}}, {{2242916906550072881ull, 3610918190759369894ull, 13703086756130844222ull, 3988176964329644992ull}}, {{15236881121875959263ull, 16091881924506769895ull, 8564429222581777638ull, 2492610602706028120ull}}, {{14434415383917561174ull, 10891480368778686561ull, 10705536528227222048ull, 3115763253382535150ull}}, {{4207961174614787756ull, 13614350460973358202ull, 4158548623429251752ull, 3894704066728168938ull}}, {{7241661752561630252ull, 8508969038108348876ull, 7210778908070670249ull, 2434190041705105586ull}}, {{9052077190702037814ull, 15247897316062823999ull, 18236845671943113619ull, 3042737552131381982ull}}, {{6703410469950159364ull, 14448185626651142095ull, 13572685053074116216ull, 3803421940164227478ull}}, {{11107160571359931459ull, 9030116016656963809ull, 3871242139743934731ull, 2377138712602642174ull}}, {{48892658917750611ull, 6675959002393816858ull, 14062424711534694222ull, 2971423390753302717ull}}, {{9284487860501964072ull, 17568320789847046880ull, 3742972834136204065ull, 3714279238441628397ull}}, {{5802804912813727545ull, 4062671466013322444ull, 4645201030548821493ull, 2321424524026017748ull}}, {{7253506141017159431ull, 9690025350944040959ull, 5806501288186026866ull, 2901780655032522185ull}}, {{4455196657844061385ull, 2889159651825275391ull, 11869812628659921487ull, 3627225818790652731ull}}, {{957309803877688827ull, 17446507620063757951ull, 10225579767397513954ull, 4534032273488315914ull}}, {{7515847655064637373ull, 15515753280967236623ull, 11002673373050834125ull, 2833770170930197446ull}}, {{4783123550403408812ull, 5559633545926882067ull, 4529969679458766849ull, 3542212713662746808ull}}, {{1367218419576873111ull, 11561227950835990488ull, 5662462099323458561ull, 4427765892078433510ull}}, {{854511512235545695ull, 308238441631412199ull, 17374096867359325313ull, 2767353682549020943ull}}, {{14903197445576595830ull, 4996984070466653152ull, 17105935065771768737ull, 3459192103186276179ull}}, {{182252733261193171ull, 10857916106510704345ull, 16770732813787323017ull, 4323990128982845224ull}}, {{11643123004356715492ull, 18315412612637659975ull, 10481708008617076885ull, 2702493830614278265ull}}, {{9942217737018506461ull, 9059207710514911257ull, 17713821029198734011ull, 3378117288267847831ull}}, {{17039458189700520980ull, 6712323619716251167ull, 17530590268071029610ull, 4222646610334809789ull}}, {{17567190396203907469ull, 8806888280750044883ull, 13262461926758087458ull, 2639154131459256118ull}}, {{17347301976827496432ull, 1785238314082780296ull, 7354705371592833515ull, 3298942664324070148ull}}, {{3237383397324818924ull, 16066605947885639083ull, 9193381714491041893ull, 4123678330405087685ull}}, {{18164265687823869492ull, 12347471726642218378ull, 8051706580770595135ull, 2577298956503179803ull}}, {{13481960072925061056ull, 10822653639875385069ull, 5452947207535856015ull, 3221623695628974754ull}}, {{3017392035874162608ull, 8916631031416843433ull, 16039556046274595827ull, 4027029619536218442ull}}, {{13415085068489821390ull, 3267051385421833193ull, 14636408547349010296ull, 2516893512210136526ull}}, {{2933798280330113026ull, 4083814231777291492ull, 9072138647331487062ull, 3146116890262670658ull}}, {{3667247850412641282ull, 14328139826576390173ull, 2116801272309583019ull, 3932646112828338323ull}}, {{4597872915721594754ull, 6649244382396549906ull, 17463901859689347051ull, 2457903820517711451ull}}, {{14970713181506769250ull, 3699869459568299478ull, 17218191306184295910ull, 3072379775647139314ull}}, {{9490019440028685754ull, 13848208861315150156ull, 12299367095875594079ull, 3840474719558924143ull}}, {{15154634186872704405ull, 15572659565963050703ull, 14604633462563328155ull, 2400296699724327589ull}}, {{14331606715163492602ull, 14854138439026425475ull, 4420733772921996482ull, 3000370874655409487ull}}, {{13302822375526977848ull, 9344301011928256036ull, 914231197725107699ull, 3750463593319261859ull}}, {{17537636021559136963ull, 3534345123241466070ull, 16712295563074049976ull, 2344039745824538661ull}}, {{12698672990094145396ull, 4417931404051832588ull, 7055311398560398758ull, 2930049682280673327ull}}, {{15873341237617681745ull, 14745786291919566543ull, 4207453229773110543ull, 3662562102850841659ull}}, {{15229990528594714277ull, 13820546846472070275ull, 647630518789000275ull, 4578202628563552074ull}}, {{7212901071158002471ull, 6331998769831349970ull, 5016455092670513076ull, 2861376642852220046ull}}, {{18239498375802278897ull, 7914998462289187462ull, 15493940902692917153ull, 3576720803565275057ull}}, {{13576000932898072813ull, 14505434096288872232ull, 5532368073083982729ull, 4470901004456593822ull}}, {{8485000583061295508ull, 2148367282539463289ull, 17292788100959652918ull, 2794313127785371138ull}}, {{15217936747254007289ull, 11908831140029104919ull, 12392613089344790339ull, 3492891409731713923ull}}, {{14410734915640121207ull, 10274352906608993245ull, 10879080343253600020ull, 4366114262164642404ull}}, {{11312552331488769707ull, 15644842603485396586ull, 16022797251388275820ull, 2728821413852901502ull}}, {{4917318377506186325ull, 1109309180647194117ull, 10805124527380568968ull, 3411026767316126878ull}}, {{10758333990310120811ull, 1386636475808992646ull, 4283033622370935402ull, 4263783459145158598ull}}, {{2112272725516437603ull, 5478333815808008308ull, 16511954069263998338ull, 2664864661965724123ull}}, {{2640340906895547003ull, 16071289306614786193ull, 16028256568152610018ull, 3331080827457155154ull}}, {{7912112152046821658ull, 10865739596413706933ull, 10811948673335986715ull, 4163851034321443943ull}}, {{7250913104242957488ull, 4485244238544872881ull, 13674996948476073553ull, 2602406896450902464ull}}, {{13675327398731084764ull, 10218241316608479005ull, 17093746185595091941ull, 3253008620563628080ull}}, {{3259101193131692243ull, 17384487664187986661ull, 2920438658284313310ull, 4066260775704535101ull}}, {{4342781254921001604ull, 6253618771690103759ull, 4131117170641389771ull, 2541412984815334438ull}}, {{816790550223864101ull, 3205337446185241795ull, 14387268500156513022ull, 3176766231019168047ull}}, {{14856046243061993839ull, 13230043844586328051ull, 13372399606768253373ull, 3970957788773960059ull}}, {{6979185892700052197ull, 10574620412080148984ull, 6051906745016464406ull, 2481848617983725037ull}}, {{8723982365875065246ull, 3994903478245410422ull, 12176569449697968412ull, 3102310772479656296ull}}, {{1681605920489055750ull, 4993629347806763028ull, 15220711812122460515ull, 3877888465599570370ull}}, {{10274375737160435652ull, 815175333165532940ull, 14124630901003925726ull, 2423680290999731481ull}}, {{12842969671450544565ull, 10242341203311691983ull, 3820730570972743445ull, 3029600363749664352ull}}, {{11442026070885792802ull, 17414612522567002883ull, 4775913213715929306ull, 3787000454687080440ull}}, {{4845423285089926549ull, 15495818845031764706ull, 2984945758572455816ull, 2366875284179425275ull}}, {{15280151143217183995ull, 923029482580154266ull, 17566240253497733483ull, 2958594105224281593ull}}, {{9876816892166704185ull, 14988844908507356545ull, 8122742261590003141ull, 3698242631530351992ull}}, {{17702225603672659876ull, 11673871077030791792ull, 5076713913493751963ull, 2311401644706469995ull}}, {{3681037930881273229ull, 9980652827861101837ull, 1734206373439802050ull, 2889252055883087494ull}}, {{9212983432028979440ull, 3252443997971601488ull, 11391130003654528371ull, 3611565069853859367ull}}, {{11516229290036224299ull, 17900613052746665572ull, 9627226486140772559ull, 4514456337317324209ull}}, {{16421015343127415995ull, 18105412185607747838ull, 17546231599906452609ull, 2821535210823327630ull}}, {{11302897142054494186ull, 8796707176727521086ull, 12709417463028289954ull, 3526919013529159538ull}}, {{4905249390713341924ull, 1772511934054625550ull, 6663399791930586635ull, 4408648766911449423ull}}, {{16900838924478002415ull, 17248721023279998632ull, 11082153897597698502ull, 2755405479319655889ull}}, {{2679304581887951403ull, 12337529242245222483ull, 17634316714959416ull, 3444256849149569862ull}}, {{17184188782642102965ull, 15421911552806528103ull, 9245414932748475078ull, 4305321061436962327ull}}, {{17657647016792396209ull, 5027008702076692160ull, 12695913360608878780ull, 2690825663398101454ull}}, {{3625314697280943646ull, 6283760877595865201ull, 6646519663906322667ull, 3363532079247626818ull}}, {{9143329390028567461ull, 3243015078567443597ull, 17531521616737679142ull, 4204415099059533522ull}}, {{8020423877981548615ull, 15861942479386815960ull, 15568887028888437367ull, 2627759436912208451ull}}, {{10025529847476935769ull, 15215742080806132046ull, 14849422767683158805ull, 3284699296140260564ull}}, {{3308540272491393903ull, 5184619545725501346ull, 115034385894396891ull, 4105874120175325706ull}}, {{6679523688734509094ull, 934544206864744389ull, 4683582509611385961ull, 2566171325109578566ull}}, {{12961090629345524271ull, 5779866277008318390ull, 15077850173869008259ull, 3207714156386973207ull}}, {{6977991249827129530ull, 2613146827833010084ull, 14235626698908872420ull, 4009642695483716509ull}}, {{13584616567996731765ull, 10856588804250407110ull, 11203109696031739214ull, 2506026684677322818ull}}, {{7757398673141138898ull, 4347363968458233080ull, 4780515083184898210ull, 3132533355846653523ull}}, {{9696748341426423622ull, 14657576997427567158ull, 1363957835553734858ull, 3915666694808316904ull}}, {{1448781694964126860ull, 13772671641819617378ull, 852473647221084286ull, 2447291684255198065ull}}, {{11034349155559934383ull, 7992467515419745914ull, 5677278077453743262ull, 3059114605318997581ull}}, {{4569564407595142170ull, 767212357419906585ull, 11708283615244566982ull, 3823893256648746976ull}}, {{14385192800815433617ull, 14314565778669605327ull, 7317677259527854363ull, 2389933285405466860ull}}, {{13369804982591904117ull, 13281521204909618755ull, 9147096574409817954ull, 2987416606756833575ull}}, {{12100570209812492242ull, 7378529469282247636ull, 6822184699584884539ull, 3734270758446041969ull}}, {{16786228417987583459ull, 2305737909087710820ull, 15793080483309022597ull, 2333919224028776230ull}}, {{2536041448774927708ull, 7493858404787026430ull, 10517978567281502438ull, 2917399030035970288ull}}, {{12393423847823435443ull, 143950969129007229ull, 13147473209101878048ull, 3646748787544962860ull}}, {{1656721754497130592ull, 179938711411259037ull, 16434341511377347560ull, 4558435984431203575ull}}, {{3341294105774400572ull, 112461694632036898ull, 17188992472251924081ull, 2849022490269502234ull}}, {{13399989669072776523ull, 4752263136717434026ull, 12262868553460129293ull, 3561278112836877793ull}}, {{7526615049486194845ull, 10552014939324180437ull, 1493527636542997904ull, 4451597641046097242ull}}, {{7009977415142565731ull, 6595009337077612773ull, 5545140791266761594ull, 2782248525653810776ull}}, {{13374157787355595067ull, 17467133708201791774ull, 6931425989083451992ull, 3477810657067263470ull}}, {{7494325197339718026ull, 3387173061542688102ull, 17887654523209090799ull, 4347263321334079337ull}}, {{72267229909935862ull, 9034512191105261920ull, 4262255049364599893ull, 2717039575833799586ull}}, {{90334037387419828ull, 15904826257308965304ull, 14551190848560525674ull, 3396299469792249482ull}}, {{112917546734274784ull, 10657660784781430822ull, 8965616523845881285ull, 4245374337240311853ull}}, {{13905631521991085452ull, 8966880999702088215ull, 7909353336617369755ull, 2653358960775194908ull}}, {{12770353384061468911ull, 6596915231200222365ull, 9886691670771712194ull, 3316698700968993635ull}}, {{2127883674794672427ull, 17469516075855053765ull, 7746678570037252338ull, 4145873376211242044ull}}, {{3635770305960364219ull, 15530133565836796507ull, 14065046143128058519ull, 2591170860132026277ull}}, {{18379770937732618986ull, 14800980938868607729ull, 3746249623627909437ull, 3238963575165032847ull}}, {{9139655616883610020ull, 4666168118303595950ull, 71126011107498893ull, 4048704468956291059ull}}, {{1100598742124868359ull, 5222198083153441421ull, 16185354821438044472ull, 2530440293097681911ull}}, {{5987434446083473352ull, 6527747603941801776ull, 15620007508370167686ull, 3163050366372102389ull}}, {{7484293057604341690ull, 17383056541782028028ull, 5689951330180545895ull, 3953812957965127987ull}}, {{13901055197857489365ull, 17781939366254849373ull, 1250376572149147232ull, 2471133098728204992ull}}, {{3541260942039697994ull, 3780680134109010101ull, 1562970715186434041ull, 3088916373410256240ull}}, {{9038262195977010396ull, 9337536186063650530ull, 1953713393983042551ull, 3861145466762820300ull}}, {{10260599890913019402ull, 12753489143930863437ull, 10444442908094177402ull, 2413215916726762687ull}}, {{17437435882068662156ull, 6718489393058803488ull, 8443867616690333849ull, 3016519895908453359ull}}, {{3350050778876276079ull, 13009797759750892265ull, 5943148502435529407ull, 3770649869885566699ull}}, {{13622996782866142309ull, 15048652627485389521ull, 1408624804808511927ull, 2356656168678479187ull}}, {{3193687923300514175ull, 14199129765929348998ull, 15595839061292803621ull, 2945820210848098983ull}}, {{13215481940980418526ull, 3913854152129522535ull, 14883112808188616623ull, 3682275263560123729ull}}, {{11907666407798135254ull, 280631671734515265ull, 4768832954953607067ull, 4602844079450154662ull}}, {{524762477232752678ull, 16316295859329929705ull, 16815578652128168128ull, 2876777549656346663ull}}, {{5267639114968328751ull, 1948625750452860515ull, 16407787296732822257ull, 3595971937070433329ull}}, {{1972862875283023035ull, 7047468206493463548ull, 6674676065633864109ull, 4494964921338041662ull}}, {{10456411333906665205ull, 6710510638272108669ull, 18006730596303328780ull, 2809353075836276038ull}}, {{17682200185810719410ull, 8388138297840135836ull, 13285041208524385167ull, 3511691344795345048ull}}, {{3656006158553847646ull, 5873486853872781892ull, 16606301510655481459ull, 4389614180994181310ull}}, {{11508375885950930587ull, 1365086274456794730ull, 5767252425732288008ull, 2743508863121363319ull}}, {{5162097820583887426ull, 1706357843070993413ull, 2597379513737972106ull, 3429386078901704149ull}}, {{11064308294157247186ull, 11356319340693517574ull, 7858410410599853036ull, 4286732598627130186ull}}, {{2303506665420891588ull, 16321071624788224292ull, 9523192525052296051ull, 2679207874141956366ull}}, {{2879383331776114484ull, 15789653512557892461ull, 2680618619460594256ull, 3349009842677445458ull}}, {{8210915183147531009ull, 1290322816987813960ull, 12574145311180518629ull, 4186262303346806822ull}}, {{5131821989467206881ull, 3112294769831077677ull, 3247154801060436239ull, 2616413939591754264ull}}, {{11026463505261396505ull, 17725426517571010808ull, 4058943501325545298ull, 3270517424489692830ull}}, {{13783079381576745631ull, 12933411110108987702ull, 14297051413511707431ull, 4088146780612116037ull}}, {{4002738595058078116ull, 15000910971459199170ull, 11241500142658511096ull, 2555091737882572523ull}}, {{14226795280677373453ull, 304394640614447346ull, 9440189159895750967ull, 3193864672353215654ull}}, {{8560122063991941008ull, 14215551356050222895ull, 2576864413014912900ull, 3992330840441519568ull}}, {{12267605317636044986ull, 18108091634386165117ull, 1610540258134320562ull, 2495206775275949730ull}}, {{1499448591762892520ull, 13411742506127930589ull, 11236547359522676511ull, 3119008469094937162ull}}, {{6485996758131003554ull, 12152992114232525332ull, 4822312162548569831ull, 3898760586368671453ull}}, {{13277120010686653030ull, 14513149099036410188ull, 5319788110806550096ull, 2436725366480419658ull}}, {{16596400013358316287ull, 18141436373795512735ull, 15873107175362963428ull, 3045906708100524572ull}}, {{16133813998270507454ull, 4230051393534839303ull, 1394639895494152670ull, 3807383385125655716ull}}, {{17001162776560149015ull, 16478840176241438276ull, 10095021971538621226ull, 2379614615703534822ull}}, {{2804709396990634653ull, 11375178183447022038ull, 3395405427568500725ull, 2974518269629418528ull}}, {{12729258783093069124ull, 383914674026613835ull, 4244256784460625907ull, 3718147837036773160ull}}, {{5649943730219474251ull, 16380847735762491311ull, 2652660490287891191ull, 2323842398147983225ull}}, {{2450743644346954909ull, 15864373651275726235ull, 7927511631287251893ull, 2904802997684979031ull}}, {{16898487610715857348ull, 5995409008812494081ull, 5297703520681676963ull, 3631003747106223789ull}}, {{7288051458112657973ull, 2882575242588229698ull, 11233815419279484108ull, 4538754683882779736ull}}, {{9166718179747799137ull, 11024981563472419369ull, 7021134637049677567ull, 2836721677426737335ull}}, {{16070083743112136826ull, 9169540935913136307ull, 4164732277884709055ull, 3545902096783421669ull}}, {{15475918660462783128ull, 6850240151464032480ull, 9817601365783274223ull, 4432377620979277086ull}}, {{9672449162789239455ull, 11198929122306102156ull, 1524314835187158485ull, 2770236013112048179ull}}, {{12090561453486549319ull, 163603347600463983ull, 15740451599266111819ull, 3462795016390060223ull}}, {{10501515798430798745ull, 14039562239782743691ull, 15063878480655251869ull, 4328493770487575279ull}}, {{4257604364805555264ull, 11080569409077908759ull, 16332453078050614274ull, 2705308606554734549ull}}, {{710319437579556175ull, 4627339724492610141ull, 6580508292281104131ull, 3381635758193418187ull}}, {{5499585315401833123ull, 1172488637188374772ull, 3613949346923992260ull, 4227044697741772734ull}}, {{12660612858980921510ull, 9956177435097510040ull, 16093776397109658874ull, 2641902936088607958ull}}, {{15825766073726151887ull, 3221849757017111742ull, 10893848459532297785ull, 3302378670110759948ull}}, {{10558835555302914051ull, 8638998214698777582ull, 13617310574415372231ull, 4127973337638449935ull}}, {{1987586203636933378ull, 12316902911827817845ull, 15428348136650689500ull, 2579983336024031209ull}}, {{7096168772973554627ull, 15396128639784772306ull, 5450377115531198163ull, 3224979170030039012ull}}, {{18093583003071719091ull, 14633474781303577478ull, 6812971394413997704ull, 4031223962537548765ull}}, {{6696803358492436528ull, 9145921738314735924ull, 6563950130722442517ull, 2519514976585967978ull}}, {{8371004198115545660ull, 16044088191320807809ull, 17428309700257828954ull, 3149393720732459972ull}}, {{15075441266071819979ull, 10831738202296233953ull, 3338643051612734577ull, 3936742150915574966ull}}, {{2504621763653805631ull, 18299051422503615981ull, 15921709962540122822ull, 2460463844322234353ull}}, {{7742463222994644943ull, 13650442241274744168ull, 6067079397892989816ull, 3075579805402792942ull}}, {{9678079028743306178ull, 17063052801593430210ull, 16807221284221013078ull, 3844474756753491177ull}}, {{10660485411391954266ull, 6052721982568505977ull, 3586984274997051318ull, 2402796722970931986ull}}, {{17937292782667330736ull, 16789274515065408279ull, 13707102380601089955ull, 3003495903713664982ull}}, {{17809929959906775516ull, 16374907125404372445ull, 7910505938896586636ull, 3754369879642081228ull}}, {{13437049234155428649ull, 1010944916522956970ull, 14167438248665142456ull, 2346481174776300767ull}}, {{7572939505839510004ull, 1263681145653696213ull, 13097611792404040166ull, 2933101468470375959ull}}, {{14077860400726775408ull, 10802973468921896074ull, 11760328722077662303ull, 3666376835587969949ull}}, {{8373953464053693452ull, 8892030817724982189ull, 865352847314914167ull, 4582971044484962437ull}}, {{7539563924247252360ull, 12475048288719195724ull, 2846688538785515306ull, 2864356902803101523ull}}, {{9424454905309065450ull, 6370438324044218847ull, 17393418728764057845ull, 3580446128503876903ull}}, {{7168882613208943908ull, 12574733923482661463ull, 17130087392527684402ull, 4475557660629846129ull}}, {{11398080660896671799ull, 12470894720604051318ull, 3788775592688720895ull, 2797223537893653831ull}}, {{5024228789266063940ull, 10976932382327676244ull, 124283472433513215ull, 3496529422367067289ull}}, {{6280285986582579925ull, 9109479459482207401ull, 4767040358969279423ull, 4370661777958834111ull}}, {{15454393787682582214ull, 12610953689817461481ull, 9896929251996881495ull, 2731663611224271319ull}}, {{5482934179321064055ull, 11152006093844438948ull, 7759475546568713965ull, 3414579514030339149ull}}, {{6853667724151330068ull, 104949562023384973ull, 14311030451638280361ull, 4268224392537923936ull}}, {{6589385336808275245ull, 11594808522333085368ull, 8944394032273925225ull, 2667640245336202460ull}}, {{8236731671010344056ull, 658452597634192998ull, 11180492540342406532ull, 3334550306670253075ull}}, {{1072542551908154262ull, 823065747042741248ull, 9363929657000620261ull, 4168187883337816344ull}}, {{670339094942596414ull, 2820259101115407232ull, 5852456035625387663ull, 2605117427086135215ull}}, {{837923868678245517ull, 17360381931676422752ull, 2703884026104346674ull, 3256396783857669019ull}}, {{1047404835847806896ull, 12477105377740752632ull, 17214913087912597055ull, 4070495979822086273ull}}, {{654628022404879310ull, 14715719888729052251ull, 3841791652304291303ull, 2544059987388803921ull}}, {{14653343083288262850ull, 13782963842483927409ull, 9413925583807752033ull, 3180074984236004901ull}}, {{4481620798828164850ull, 3393646747822745550ull, 16379092998187077946ull, 3975093730295006126ull}}, {{16636071054549766744ull, 6732715235816603872ull, 5625247105439535812ull, 2484433581434378829ull}}, {{2348344744477656813ull, 8415894044770754841ull, 11643244900226807669ull, 3105541976792973536ull}}, {{7547116949024458921ull, 15131553574390831455ull, 14554056125283509586ull, 3881927470991216920ull}}, {{11634477120781368682ull, 14068907002421657563ull, 9096285078302193491ull, 2426204669369510575ull}}, {{9931410382549322948ull, 12974447734599684050ull, 6758670329450353960ull, 3032755836711888219ull}}, {{3190890941331877877ull, 16218059668249605063ull, 3836651893385554546ull, 3790944795889860274ull}}, {{8911835865973505529ull, 14747973311083391068ull, 7009593451793359495ull, 2369340497431162671ull}}, {{11139794832466881911ull, 13823280620426850931ull, 4150305796314311465ull, 2961675621788953339ull}}, {{9313057522156214485ull, 3444042720251399952ull, 576196226965501428ull, 3702094527236191674ull}}, {{5820660951347634053ull, 11375898737011900778ull, 4971808660280826296ull, 2313809079522619796ull}}, {{16499198226039318374ull, 14219873421264875972ull, 6214760825351032870ull, 2892261349403274745ull}}, {{2177253708839596352ull, 8551469739726319158ull, 12380137050116178992ull, 3615326686754093431ull}}, {{11944939172904271248ull, 10689337174657898947ull, 10863485294217835836ull, 4519158358442616789ull}}, {{5159743973851475578ull, 15904207771015962650ull, 9095521318099841349ull, 2824473974026635493ull}}, {{15673052004169120280ull, 6045201658487789600ull, 15981087666052189591ull, 3530592467533294366ull}}, {{1144570931501848734ull, 2944816054682349097ull, 10752987545710461181ull, 4413240584416617958ull}}, {{12244571878257125219ull, 4146353043390162137ull, 2108931197641650334ull, 2758275365260386224ull}}, {{1470656792539242812ull, 14406313341092478480ull, 2636163997052062917ull, 3447844206575482780ull}}, {{1838320990674053515ull, 4172833621083434388ull, 3295204996315078647ull, 4309805258219353475ull}}, {{10372322656026059255ull, 9525550040818228348ull, 18200404187192781818ull, 2693628286387095921ull}}, {{12965403320032574069ull, 2683565514168009627ull, 8915447178708813561ull, 3367035357983869902ull}}, {{11595068131613329682ull, 7966142911137399938ull, 1920936936531241143ull, 4208794197479837378ull}}, {{11858603600685718955ull, 11896368347101956817ull, 5812271603759413618ull, 2630496373424898361ull}}, {{988196445574984982ull, 5647088397022670214ull, 11877025523126654927ull, 3288120466781122951ull}}, {{10458617593823507035ull, 2447174477850949863ull, 10234595885480930755ull, 4110150583476403689ull}}, {{13454165023780773753ull, 17670385113152701328ull, 17925837474494051481ull, 2568844114672752305ull}}, {{16817706279725967191ull, 8252923336158712948ull, 8572238787835400640ull, 3211055143340940382ull}}, {{2575388775947907373ull, 10316154170198391186ull, 1491926447939474992ull, 4013818929176175478ull}}, {{6221304003394830012ull, 6447596356373994491ull, 14767512085244335582ull, 2508636830735109673ull}}, {{3164943985816149611ull, 17282867482322268922ull, 4624332051273255765ull, 3135796038418887092ull}}, {{13179552019124962822ull, 7768526297620672440ull, 5780415064091569707ull, 3919745048023608865ull}}, {{8237220011953101764ull, 2549485926799226323ull, 15141974461125700827ull, 2449840655014755540ull}}, {{5684838996513989301ull, 17021915463781196616ull, 480724002697574417ull, 3062300818768444426ull}}, {{7106048745642486626ull, 7442336274444332058ull, 9824277040226743830ull, 3827876023460555532ull}}, {{9052966484453942045ull, 39774153100319632ull, 15363545186996490702ull, 2392422514662847207ull}}, {{11316208105567427557ull, 9273089728230175348ull, 14592745465318225473ull, 2990528143328559009ull}}, {{14145260131959284446ull, 16203048178715107089ull, 4405873776365618129ull, 3738160179160698762ull}}, {{1923258554833470923ull, 3209376084055860075ull, 7365357128655899235ull, 2336350111975436726ull}}, {{16239131248824002365ull, 17846778160351988805ull, 18430068447674649851ull, 2920437639969295907ull}}, {{6463856005747839244ull, 17696786682012598103ull, 18425899541165924410ull, 3650547049961619884ull}}, {{3468133988757411151ull, 12897611315660971821ull, 4585630352747853897ull, 4563183812452024856ull}}, {{4473426752187075922ull, 1143478044647025532ull, 2866018970467408686ull, 2851989882782515535ull}}, {{5591783440233844902ull, 10652719592663557723ull, 17417581768366424569ull, 3564987353478144418ull}}, {{2378043281864918223ull, 17927585509256835058ull, 12548605173603254903ull, 4456234191847680523ull}}, {{6097963069592961794ull, 18122269970926603767ull, 5537035224288340362ull, 2785146369904800327ull}}, {{3010767818563814338ull, 13429465426803478901ull, 2309608011933037549ull, 3481432962381000409ull}}, {{8375145791632155827ull, 2951773728222184914ull, 7498696033343684841ull, 4351791202976250511ull}}, {{9846152138197485296ull, 13374073626207335331ull, 11604214048480884881ull, 2719869501860156569ull}}, {{7696004154319468716ull, 2882533977477005452ull, 670209505318942390ull, 3399836877325195712ull}}, {{9620005192899335894ull, 12826539508701032623ull, 837761881648677987ull, 4249796096656494640ull}}, {{12930032273203166790ull, 5710744183724451437ull, 523601176030423742ull, 2656122560410309150ull}}, {{2327482286221794776ull, 16361802266510340105ull, 9877873506892805485ull, 3320153200512886437ull}}, {{7521038876204631373ull, 6617194777855761419ull, 16959027902043394761ull, 4150191500641108046ull}}, {{2394806288414200657ull, 15664961782228320647ull, 5987706420349733821ull, 2593869687900692529ull}}, {{16828565915799914533ull, 5746144172503237096ull, 12096319043864555181ull, 3242337109875865661ull}}, {{2588963321040341550ull, 11794366234056434275ull, 1285340749548530264ull, 4052921387344832077ull}}, {{17759003140146071133ull, 7371478896285271421ull, 3109180977681525367ull, 2533075867090520048ull}}, {{8363695869900425204ull, 4602662601929201373ull, 3886476222101906709ull, 3166344833863150060ull}}, {{15066305855802919409ull, 10365014270838889620ull, 4858095277627383386ull, 3957931042328937575ull}}, {{193069123022048823ull, 11089819937701693917ull, 9953838576158196472ull, 2473706901455585984ull}}, {{4853022422204948932ull, 13862274922127117396ull, 12442298220197745590ull, 3092133626819482480ull}}, {{6066278027756186165ull, 8104471615804120937ull, 15552872775247181988ull, 3865167033524353100ull}}, {{15320638813416086113ull, 14288666796732351393ull, 497173447674712934ull, 2415729395952720688ull}}, {{5315740461487943929ull, 8637461459060663434ull, 621466809593391168ull, 3019661744940900860ull}}, {{15868047613714705720ull, 10796826823825829292ull, 776833511991738960ull, 3774577181176126075ull}}, {{694157721716915267ull, 6748016764891143308ull, 16626422009490694514ull, 2359110738235078796ull}}, {{867697152146144084ull, 17658392992968704943ull, 2336283438153816526ull, 2948888422793848496ull}}, {{14919679495464843816ull, 12849619204356105370ull, 2920354297692270658ull, 3686110528492310620ull}}, {{9426227332476278962ull, 6838651968590355905ull, 3650442872115338323ull, 4607638160615388275ull}}, {{17420607128866144112ull, 1968314471155278488ull, 18422427859567944116ull, 2879773850384617671ull}}, {{3329014837373128523ull, 2460393088944098111ull, 18416348806032542241ull, 3599717312980772089ull}}, {{17996326601998574366ull, 7687177379607510542ull, 9185377952258514089ull, 4499646641225965112ull}}, {{6636018107821721075ull, 16333700908323163849ull, 5740861220161571305ull, 2812279150766228195ull}}, {{12906708653204539248ull, 6582068080121791099ull, 2564390506774576228ull, 3515348938457785244ull}}, {{11521699798078286156ull, 8227585100152238874ull, 3205488133468220285ull, 4394186173072231555ull}}, {{11812748392226316751ull, 7448083696808843248ull, 18144331147913495342ull, 2746366358170144721ull}}, {{14765935490282895939ull, 86732584156278252ull, 8845355879609705466ull, 3432957947712680902ull}}, {{10675289144068308ull, 9331787767050123624ull, 1833322812657356024ull, 4291197434640851128ull}}, {{6672055715042693ull, 5832367354406327265ull, 1145826757910847515ull, 2681998396650531955ull}}, {{4620026088071191270ull, 2678773174580521177ull, 15267341502670723106ull, 3352497995813164943ull}}, {{10386718628516376991ull, 12571838505080427279ull, 14472490859911015978ull, 4190622494766456179ull}}, {{13409228170463817475ull, 12469085084102654953ull, 6739463778230691034ull, 2619139059229035112ull}}, {{2926477157797608132ull, 6362984318273542884ull, 8424329722788363793ull, 3273923824036293890ull}}, {{3658096447247010165ull, 12565416416269316509ull, 1307040116630678933ull, 4092404780045367363ull}}, {{4592153288743075305ull, 10159228269382016770ull, 16957801137390031997ull, 2557752987528354601ull}}, {{14963563647783619940ull, 17310721355154908866ull, 7362193366455376284ull, 3197191234410443252ull}}, {{9481082522874749116ull, 3191657620234084467ull, 9202741708069220356ull, 3996489043013054065ull}}, {{3619833567583024246ull, 11218158049501078600ull, 17280928613611732482ull, 2497805651883158790ull}}, {{4524791959478780307ull, 4799325525021572442ull, 12377788730159889795ull, 3122257064853948488ull}}, {{14879361986203251192ull, 1387470887849577648ull, 15472235912699862244ull, 3902821331067435610ull}}, {{9299601241377031995ull, 10090541341760761838ull, 14281833463864801806ull, 2439263331917147256ull}}, {{2401129514866514186ull, 3389804640346176490ull, 17852291829831002258ull, 3049079164896434070ull}}, {{12224783930437918540ull, 13460627837287496420ull, 13091992750433977014ull, 3811348956120542588ull}}, {{16863861993378474896ull, 3801206379877297358ull, 17405867505876011442ull, 2382093097575339117ull}}, {{11856455454868317812ull, 13974880011701397506ull, 7922276327062850590ull, 2977616371969173897ull}}, {{5597197281730621456ull, 8245227977771971075ull, 14514531427255951142ull, 3722020464961467371ull}}, {{1192405291867944458ull, 541581467680094018ull, 6765739132821275512ull, 2326262790600917107ull}}, {{10713878651689706381ull, 676976834600117522ull, 3845487897599206486ull, 2907828488251146384ull}}, {{4168976277757357168ull, 10069593080104922711ull, 4806859871999008107ull, 3634785610313932980ull}}, {{599534328769308556ull, 7975305331703765485ull, 6008574839998760134ull, 4543482012892416225ull}}, {{2680551964694511800ull, 372879813887465524ull, 15284574321067694844ull, 2839676258057760140ull}}, {{3350689955868139749ull, 466099767359331905ull, 658973827625066939ull, 3549595322572200176ull}}, {{8800048463262562591ull, 14417682764481328593ull, 823717284531333673ull, 4436994153215250220ull}}, {{17029245335607571379ull, 2093522700159748514ull, 9738195339686859354ull, 2773121345759531387ull}}, {{12063184632654688416ull, 11840275412054461451ull, 7561058156181186288ull, 3466401682199414234ull}}, {{10467294772390972616ull, 14800344265068076814ull, 227950658371707052ull, 4333002102749267793ull}}, {{1930373214316969981ull, 26843128812772201ull, 11671684207550786668ull, 2708126314218292370ull}}, {{7024652536323600380ull, 33553911015965251ull, 5366233222583707527ull, 3385157892772865463ull}}, {{4169129651977112571ull, 13877000444052120276ull, 2096105509802246504ull, 4231447365966081829ull}}, {{11829078069340471165ull, 8673125277532575172ull, 3615908952840098017ull, 2644654603728801143ull}}, {{14786347586675588956ull, 15453092615343106869ull, 18354944246332286233ull, 3305818254661001428ull}}, {{4647876428062322483ull, 5481307713896719875ull, 4496936234205806176ull, 4132272818326251786ull}}, {{599079758325257600ull, 3425817321185449922ull, 7422271164806016764ull, 2582670511453907366ull}}, {{9972221734761347808ull, 4282271651481812402ull, 54466919152745147ull, 3228338139317384208ull}}, {{3241905131596908952ull, 741153545924877599ull, 68083648940931434ull, 4035422674146730260ull}}, {{8943719734889149951ull, 5074906984630436403ull, 9265924317442857954ull, 2522139171341706412ull}}, {{6567963650184049535ull, 15567005767642821312ull, 11582405396803572442ull, 3152673964177133015ull}}, {{8209954562730061919ull, 10235385172698750832ull, 9866320727577077649ull, 3940842455221416269ull}}, {{5131221601706288699ull, 17926330779005189030ull, 8472293463949367482ull, 2463026534513385168ull}}, {{15637399038987636682ull, 13184541436901710479ull, 10590366829936709353ull, 3078783168141731460ull}}, {{14935062780307157948ull, 2645618740844974387ull, 13237958537420886692ull, 3848478960177164325ull}}, {{7028571228478279766ull, 10876883749882884800ull, 10579567095101748134ull, 2405299350110727703ull}}, {{8785714035597849707ull, 4372732650498830192ull, 8612772850449797264ull, 3006624187638409629ull}}, {{10982142544497312134ull, 5465915813123537740ull, 15377652081489634484ull, 3758280234548012036ull}}, {{16087211127165595892ull, 12639569420056986895ull, 387660514076245744ull, 2348925146592507523ull}}, {{15497327890529606961ull, 15799461775071233619ull, 14319633697877470892ull, 2936156433240634403ull}}, {{14759973844734620797ull, 1302583145129490408ull, 13287856103919450712ull, 3670195541550793004ull}}, {{3223232208724380ull, 1628228931411863011ull, 16609820129899313390ull, 4587744426938491255ull}}, {{16142915584626310402ull, 14852701137414578093ull, 17298666608828152724ull, 2867340266836557034ull}}, {{6343586425500724290ull, 119132348058671001ull, 12399961224180415098ull, 3584175333545696293ull}}, {{12541169050303293266ull, 9372287471928114559ull, 1664893474943355160ull, 4480219166932120367ull}}, {{14755759684080640148ull, 5857679669955071599ull, 7958087449480678831ull, 2800136979332575229ull}}, {{13833013586673412280ull, 2710413569016451595ull, 14559295330278236443ull, 3500171224165719036ull}}, {{12679580964914377446ull, 17223075016552728206ull, 18199119162847795553ull, 4375214030207148795ull}}, {{3313052084644098000ull, 3846892857704373273ull, 9068606467566178269ull, 2734508768879467997ull}}, {{8753001124232510404ull, 9420302090557854495ull, 15947444102885110740ull, 3418135961099334996ull}}, {{6329565386863250101ull, 11775377613197318119ull, 1487561054896836809ull, 4272669951374168746ull}}, {{10873507394430613169ull, 442081980607241968ull, 5541411677737910910ull, 2670418719608855466ull}}, {{13591884243038266462ull, 9775974512613828268ull, 16150136634027164445ull, 3338023399511069332ull}}, {{16989855303797833077ull, 16831654159194673239ull, 1740926718824403940ull, 4172529249388836666ull}}, {{17536188592514727529ull, 1296411812641894966ull, 5699765217692640367ull, 2607830780868022916ull}}, {{12696863703788633603ull, 15455572821084532420ull, 7124706522115800458ull, 3259788476085028645ull}}, {{15871079629735792004ull, 10096093989500889717ull, 13517569171072138477ull, 4074735595106285806ull}}, {{12225267777798563955ull, 8615901752651750025ull, 3836794713492698644ull, 2546709746941428629ull}}, {{1446526666966041231ull, 10769877190814687532ull, 9407679410293261209ull, 3183387183676785786ull}}, {{1808158333707551539ull, 18074032506945747319ull, 2536227226011800703ull, 3979233979595982233ull}}, {{8047627986208301568ull, 18213799344482173930ull, 13114357062325845199ull, 2487021237247488895ull}}, {{836162945905601152ull, 18155563162175329509ull, 11781260309479918595ull, 3108776546559361119ull}}, {{5656889700809389344ull, 18082767934291773982ull, 10114889368422510340ull, 3885970683199201399ull}}, {{17370614118288032052ull, 2078357922077582930ull, 13239334882905150819ull, 2428731676999500874ull}}, {{12489895611005264257ull, 16433005457879142375ull, 7325796566776662715ull, 3035914596249376093ull}}, {{11000683495329192417ull, 15929570803921540065ull, 13768931726898216298ull, 3794893245311720116ull}}, {{18404642230649215021ull, 14567667770878350444ull, 17828954366166160994ull, 2371808278319825072ull}}, {{4559058714601967160ull, 8986212676743162248ull, 3839448883998149627ull, 2964760347899781341ull}}, {{5698823393252458950ull, 6621079827501564906ull, 9410997123425074938ull, 3705950434874726676ull}}, {{8173450639210174748ull, 8749860910615865970ull, 15105245238995447644ull, 2316219021796704172ull}}, {{993441262157942627ull, 10937326138269832463ull, 434812475034757939ull, 2895273777245880216ull}}, {{15076859632979591995ull, 9059971654409902674ull, 543515593793447424ull, 3619092221557350270ull}}, {{9622702504369714186ull, 11324964568012378343ull, 9902766529096585088ull, 4523865276946687837ull}}, {{12931718092872153222ull, 7078102855007736464ull, 8495072089899059632ull, 2827415798091679898ull}}, {{16164647616090191528ull, 8847628568759670580ull, 1395468075519048732ull, 3534269747614599873ull}}, {{1759065446403187794ull, 11059535710949588226ull, 6356021112826198819ull, 4417837184518249841ull}}, {{5711101922429380275ull, 4606366810129798689ull, 15501728241584844022ull, 2761148240323906150ull}}, {{11750563421464113248ull, 14981330549517024169ull, 10153788265126279219ull, 3451435300404882688ull}}, {{853146221547977848ull, 14114977168468892308ull, 12692235331407849024ull, 4314294125506103360ull}}, {{9756588425322261963ull, 8821860730293057692ull, 7932647082129905640ull, 2696433828441314600ull}}, {{12195735531652827454ull, 11027325912866322115ull, 9915808852662382050ull, 3370542285551643250ull}}, {{10632983396138646413ull, 4560785354228126836ull, 3171389028973201755ull, 4213177856939554063ull}}, {{15868986659441429816ull, 544647837178885320ull, 8899647170749332953ull, 2633236160587221289ull}}, {{1389489250592235654ull, 5292495814900994555ull, 15736244981864054095ull, 3291545200734026611ull}}, {{15571919618522458280ull, 2003933750198855289ull, 15058620208902679715ull, 4114431500917533264ull}}, {{2814920733935454569ull, 17393359658370142220ull, 9411637630564174821ull, 2571519688073458290ull}}, {{3518650917419318211ull, 7906641517680514063ull, 2541175001350442719ull, 3214399610091822863ull}}, {{18233371702056311476ull, 5271615878673254674ull, 17011526806970217111ull, 4017999512614778578ull}}, {{16007543332212582577ull, 10212288951811866027ull, 15243890272783773598ull, 2511249695384236611ull}}, {{15397743146838340317ull, 3541989152910056726ull, 14443176822552329094ull, 3139062119230295764ull}}, {{10023806896693149588ull, 13650858477992346716ull, 18053971028190411367ull, 3923827649037869705ull}}, {{15488251347287994300ull, 15449315576386298553ull, 4366202864977925248ull, 2452392280648668566ull}}, {{5525256128827829163ull, 864900396773321576ull, 14681125618077182369ull, 3065490350810835707ull}}, {{6906570161034786454ull, 5692811514394039874ull, 13739721004169090057ull, 3831862938513544634ull}}, {{8928292369074129438ull, 15087222242564744681ull, 13199011646033069189ull, 2394914336570965396ull}}, {{15772051479770049701ull, 5023969747923767139ull, 16498764557541336487ull, 2993642920713706745ull}}, {{15103378331285174223ull, 1668276166477321020ull, 6788397641644506897ull, 3742053650892133432ull}}, {{216239420198458081ull, 12571887650116795398ull, 4242748526027816810ull, 2338783531807583395ull}}, {{9493671312102848410ull, 6491487525791218439ull, 691749639107383109ull, 2923479414759479244ull}}, {{7255403121701172608ull, 12726045425666410953ull, 864687048884228886ull, 3654349268449349055ull}}, {{13680939920553853664ull, 6684184745228237883ull, 14915916866387449820ull, 4567936585561686318ull}}, {{6244744441132464588ull, 13400987502622424485ull, 4710762023064768233ull, 2854960365976053949ull}}, {{12417616569842968639ull, 2916176322995866894ull, 10500138547258348196ull, 3568700457470067436ull}}, {{6298648675448934990ull, 3645220403744833618ull, 13125173184072935245ull, 4460875571837584295ull}}, {{8548341440582972273ull, 4584105761554214963ull, 15120762267686666384ull, 2788047232398490184ull}}, {{6073740782301327437ull, 5730132201942768704ull, 454208760898781364ull, 3485059040498112731ull}}, {{7592175977876659297ull, 7162665252428460880ull, 14402819006405640417ull, 4356323800622640913ull}}, {{4745109986172912061ull, 16005880828836257810ull, 2084232851362443404ull, 2722702375389150571ull}}, {{15154759519570915884ull, 1560606962335770646ull, 16440349119485217968ull, 3403377969236438213ull}}, {{9720077362608869046ull, 1950758702919713308ull, 6715378344074358748ull, 4254222461545547767ull}}, {{15298420388485318962ull, 10442596226179596625ull, 11114640492687556073ull, 2658889038465967354ull}}, {{5287967430324484991ull, 17664931301151883686ull, 4669928579004669283ull, 3323611298082459193ull}}, {{15833331324760382046ull, 17469478108012466703ull, 10449096742183224508ull, 4154514122603073991ull}}, {{16813361105616320635ull, 1695051780653015881ull, 13448214491505597174ull, 2596571326626921244ull}}, {{7181643326738237082ull, 11342186762671045660ull, 16810268114381996467ull, 3245714158283651555ull}}, {{8977054158422796352ull, 9566047434911419171ull, 16401149124550107680ull, 4057142697854564444ull}}, {{3304815839800553768ull, 5978779646819636982ull, 1027346165989041492ull, 2535714186159102778ull}}, {{13354391836605468018ull, 7473474558524546227ull, 10507554744341077673ull, 3169642732698878472ull}}, {{12081303777329447118ull, 13953529216583070688ull, 13134443430426347091ull, 3962053415873598090ull}}, {{7550814860830904449ull, 6415112751150725228ull, 12820713162443854836ull, 2476283384920998806ull}}, {{9438518576038630561ull, 8018890938938406535ull, 6802519416200042737ull, 3095354231151248508ull}}, {{7186462201620900298ull, 14635299692100396073ull, 8503149270250053421ull, 3869192788939060635ull}}, {{16020753922081532446ull, 11452905316776441497ull, 3008625284692589436ull, 2418245493086912897ull}}, {{6190884347319751846ull, 14316131645970551872ull, 8372467624293124699ull, 3022806866358641121ull}}, {{7738605434149689807ull, 13283478539035801936ull, 15077270548793793778ull, 3778508582948301401ull}}, {{4836628396343556129ull, 12913860105324764114ull, 2505765065355039255ull, 2361567864342688376ull}}, {{15269157532284220970ull, 11530639113228567238ull, 3132206331693799069ull, 2951959830428360470ull}}, {{9863074878500500404ull, 578240836253545336ull, 13138629951472024645ull, 3689949788035450587ull}}, {{6164421799062812753ull, 2667243531872159787ull, 5905800710456321451ull, 2306218617522156617ull}}, {{3093841230401128037ull, 17169112470122363446ull, 11993936906497789717ull, 2882773271902695771ull}}, {{13090673574856185854ull, 7626332532370790595ull, 10380735114694849243ull, 3603466589878369714ull}}, {{11751655950142844413ull, 4921229647036100340ull, 3752546856513785746ull, 4504333237347962143ull}}, {{16568157005694053566ull, 7687454547824950616ull, 9262870812962197947ull, 2815208273342476339ull}}, {{2263452183408015342ull, 4997632166353800367ull, 6966902497775359530ull, 3519010341678095424ull}}, {{16664373284542182889ull, 15470412244797026266ull, 8708628122219199412ull, 4398762927097619280ull}}, {{15026919321266252210ull, 445635616143365608ull, 5442892576386999633ull, 2749226829436012050ull}}, {{336905077873263646ull, 5168730538606594915ull, 16026987757338525349ull, 3436533536795015062ull}}, {{14256189402623743270ull, 11072599191685631547ull, 10810362659818380878ull, 4295666920993768828ull}}, {{6604275367426145592ull, 2308688476376131813ull, 15979848699241263857ull, 2684791825621105517ull}}, {{12867030227710069894ull, 7497546613897552670ull, 6139752818769416109ull, 3355989782026381897ull}}, {{6860415747782811559ull, 13983619285799328742ull, 12286377041889158040ull, 4194987227532977371ull}}, {{18122817897646420936ull, 8739762053624580463ull, 5373142641967029823ull, 2621867017208110857ull}}, {{18041836353630638266ull, 6313016548603337675ull, 11328114320886175183ull, 3277333771510138571ull}}, {{17940609423610909929ull, 3279584667326784190ull, 9548456882680331075ull, 4096667214387673214ull}}, {{6601194871329430802ull, 18190641481575097783ull, 1356099533247819017ull, 2560417008992295759ull}}, {{3639807570734400598ull, 8903243796686708517ull, 15530182471841937484ull, 3200521261240369698ull}}, {{9161445481845388652ull, 11129054745858385646ull, 10189356052947646047ull, 4000651576550462123ull}}, {{1114217407725980003ull, 13873188243802572885ull, 4062504523878584827ull, 2500407235344038827ull}}, {{6004457778084862908ull, 12729799286325828202ull, 466444636420843130ull, 3125509044180048534ull}}, {{16728944259460854443ull, 6688877071052509444ull, 9806427832380829721ull, 3906886305225060667ull}}, {{1232218125308258219ull, 15709763215476288163ull, 3823174386024324623ull, 2441803940765662917ull}}, {{15375330711917486486ull, 15025518000917972299ull, 9390654000957793683ull, 3052254925957078646ull}}, {{14607477371469470203ull, 14170211482720077470ull, 2514945464342466296ull, 3815318657446348308ull}}, {{4517987338741030973ull, 8856382176700048419ull, 10795212952068817243ull, 2384574160903967692ull}}, {{1035798154998900812ull, 6458791702447672620ull, 13494016190086021554ull, 2980717701129959615ull}}, {{1294747693748626015ull, 17296861664914366583ull, 12255834219180139038ull, 3725897126412449519ull}}, {{7726746336233973116ull, 6198852522144091210ull, 14577425414628668755ull, 2328685704007780949ull}}, {{435060883437690586ull, 3136879634252726109ull, 4386723713003672232ull, 2910857130009726187ull}}, {{5155512122724501137ull, 3921099542815907636ull, 871718622827202386ull, 3638571412512157734ull}}, {{6444390153405626421ull, 14124746465374660353ull, 10313020315388778790ull, 4548214265640197167ull}}, {{15556958891946986273ull, 4216280522431774816ull, 13363166724759068600ull, 2842633916025123229ull}}, {{999454541224181226ull, 5270350653039718521ull, 2868900350666672038ull, 3553292395031404037ull}}, {{5861004194957614436ull, 15811310353154423959ull, 8197811456760727951ull, 4441615493789255046ull}}, {{10580656649489590879ull, 16799597998362596830ull, 511946142048067065ull, 2776009683618284404ull}}, {{4002448775007212790ull, 7164439442671082326ull, 639932677560083832ull, 3470012104522855505ull}}, {{14226433005613791795ull, 8955549303338852907ull, 5411601865377492694ull, 4337515130653569381ull}}, {{6585677619294925920ull, 985532296159395163ull, 5688094175074626886ull, 2710946956658480863ull}}, {{3620411005691269496ull, 10455287407054019762ull, 2498431700415895703ull, 3388683695823101079ull}}, {{13748885793968862678ull, 8457423240390136798ull, 16958097680802033341ull, 4235854619778876348ull}}, {{3981367602803151270ull, 7591732534457529451ull, 1375439013646495030ull, 2647409137361797718ull}}, {{365023485076551183ull, 266293631217136006ull, 10942670803912894596ull, 3309261421702247147ull}}, {{9679651393200464787ull, 332867039021420007ull, 9066652486463730341ull, 4136576777127808934ull}}, {{12967311148391372348ull, 2513884908602081456ull, 1054971785612443559ull, 2585360485704880584ull}}, {{16209138935489215435ull, 16977414191034765532ull, 1318714732015554448ull, 3231700607131100730ull}}, {{1814679595651967678ull, 2775023665083905300ull, 10871765451874218869ull, 4039625758913875912ull}}, {{10357546784137255607ull, 4040232799891134764ull, 6794853407421386793ull, 2524766099321172445ull}}, {{12946933480171569508ull, 9661977018291306359ull, 13105252777704121395ull, 3155957624151465556ull}}, {{11571980831787073981ull, 7465785254436745045ull, 16381565972130151744ull, 3944947030189331945ull}}, {{9538331029080615191ull, 4666115784022965653ull, 3320949704940262984ull, 2465591893868332466ull}}, {{16534599804778156892ull, 5832644730028707066ull, 13374559168030104538ull, 3081989867335415582ull}}, {{11444877719117920307ull, 16514177949390659641ull, 7494826923182854864ull, 3852487334169269478ull}}, {{235519546807618336ull, 10321361218369162276ull, 72580808561896386ull, 2407804583855793424ull}}, {{294399433509522920ull, 3678329486106677037ull, 90726010702370483ull, 3009755729819741780ull}}, {{4979685310314291554ull, 18432969912915510008ull, 113407513377963103ull, 3762194662274677225ull}}, {{3112303318946432221ull, 18438135223213275611ull, 11600094741929696699ull, 2351371663921673265ull}}, {{17725437203965203988ull, 18435983010589206609ull, 665060372129957162ull, 2939214579902091582ull}}, {{8321738449674341273ull, 13821606726381732454ull, 10054697502017222261ull, 3674018224877614477ull}}, {{1178801025238150784ull, 3441950352695001856ull, 17180057895948915731ull, 4592522781097018096ull}}, {{736750640773844240ull, 18292120034930233824ull, 10737536184968072331ull, 2870326738185636310ull}}, {{920938300967305300ull, 18253464025235404376ull, 4198548194355314606ull, 3587908422732045388ull}}, {{1151172876209131625ull, 13593457994689479662ull, 5248185242944143258ull, 4484885528415056735ull}}, {{14554541102912870978ull, 13107597265108312692ull, 10197644804481171392ull, 2803053455259410459ull}}, {{18193176378641088722ull, 16384496581385390865ull, 8135369987174076336ull, 3503816819074263074ull}}, {{8906412418019197190ull, 2033876653022186966ull, 945840447112819613ull, 4379771023842828843ull}}, {{954821742834610340ull, 3577015917352560806ull, 16732051343941369922ull, 2737356889901768026ull}}, {{10416899215398038733ull, 13694641933545476815ull, 11691692143071936594ull, 3421696112377210033ull}}, {{8409438000820160512ull, 7894930380077070211ull, 779557123557757031ull, 4277120140471512542ull}}, {{2950055741298906368ull, 11851860515189250738ull, 14322281257505761856ull, 2673200087794695338ull}}, {{12910941713478408768ull, 14814825643986563422ull, 8679479535027426512ull, 3341500109743369173ull}}, {{6915305104993235152ull, 71787981273652662ull, 15461035437211671045ull, 4176875137179211466ull}}, {{18157123745902935682ull, 2350710497509726865ull, 14274833166684682307ull, 2610546960737007166ull}}, {{8861346627096505891ull, 16773446177169322294ull, 8620169421501077075ull, 3263183700921258958ull}}, {{1853311247015856555ull, 16355121703034264964ull, 1551839740021570536ull, 4078979626151573698ull}}, {{10381691566239686155ull, 10221951064396415602ull, 5581585855940869489ull, 2549362266344733561ull}}, {{3753742420944831886ull, 17389124848922907407ull, 11588668338353474765ull, 3186702832930916951ull}}, {{80492007753651953ull, 7901348005871470547ull, 9874149404514455553ull, 3983378541163646189ull}}, {{16191208569341890135ull, 16467557549738138851ull, 8477186387035228672ull, 2489611588227278868ull}}, {{15627324693249974765ull, 2137702863463121948ull, 10596482983794035841ull, 3112014485284098585ull}}, {{1087411792852916840ull, 7283814597756290340ull, 17857289748169932705ull, 3890018106605123231ull}}, {{9903004407387848833ull, 16081599169666151222ull, 18078335120247289796ull, 2431261316628202019ull}}, {{3155383472380035233ull, 1655254888373137412ull, 17986232881881724342ull, 3039076645785252524ull}}, {{3944229340475044041ull, 11292440647321197573ull, 4036047028642603811ull, 3798845807231565656ull}}, {{4770986347010596478ull, 4751932395362054531ull, 2522529392901627382ull, 2374278629519728535ull}}, {{1352046915335857693ull, 15163287531057343972ull, 16988219796409197939ull, 2967848286899660668ull}}, {{1690058644169822117ull, 14342423395394292061ull, 2788530671801945808ull, 3709810358624575836ull}}, {{3362129661819832775ull, 8964014622121432538ull, 10966203706730991938ull, 2318631474140359897ull}}, {{13426034114129566777ull, 1981646240797014864ull, 18319440651841127827ull, 2898289342675449871ull}}, {{16782542642661958471ull, 16312115856278432292ull, 18287614796374021879ull, 3622861678344312339ull}}, {{2531434229617896472ull, 15778458801920652462ull, 18247832477040139445ull, 4528577097930390424ull}}, {{15417204448793349007ull, 12167379760414101740ull, 11404895298150087153ull, 2830360686206494015ull}}, {{824761487282134643ull, 1374166645235463464ull, 9644433104260221038ull, 3537950857758117519ull}}, {{1030951859102668304ull, 10941080343399105138ull, 7443855361897888393ull, 4422438572197646899ull}}, {{5256030930366555594ull, 18367390260692910471ull, 2346566591972486293ull, 2764024107623529312ull}}, {{1958352644530806588ull, 9124179770583974377ull, 2933208239965607867ull, 3455030134529411640ull}}, {{7059626824090896139ull, 6793538694802580067ull, 3666510299957009834ull, 4318787668161764550ull}}, {{2106423755843116135ull, 8857647702679000446ull, 16126626992755294858ull, 2699242292601102843ull}}, {{11856401731658670977ull, 1848687591493974749ull, 15546597722516730669ull, 3374052865751378554ull}}, {{985444109291175009ull, 6922545507794856341ull, 10209875116291137528ull, 4217566082189223193ull}}, {{2921745577520678333ull, 4326590942371785213ull, 17910386993750430715ull, 2635978801368264495ull}}, {{8263867990328235820ull, 796552659537343612ull, 17776297723760650490ull, 3294973501710330619ull}}, {{10329834987910294775ull, 10219062861276455323ull, 17608686136273425208ull, 4118716877137913274ull}}, {{4150303858230240282ull, 6386914288297784577ull, 15617114853598278659ull, 2574198048211195796ull}}, {{9799565841215188257ull, 3371956841944842817ull, 1074649493288296708ull, 3217747560263994746ull}}, {{16861143319946373225ull, 4214946052431053521ull, 10566683903465146693ull, 4022184450329993432ull}}, {{3620685547325401410ull, 4940184291983102403ull, 6604177439665716683ull, 2513865281456245895ull}}, {{18360914989438915474ull, 1563544346551490099ull, 3643535781154757950ull, 3142331601820307369ull}}, {{18339457718371256439ull, 11177802470044138432ull, 9166105744870835341ull, 3927914502275384211ull}}, {{11462161073982035274ull, 9291969552991280472ull, 3422973081330578136ull, 2454946563922115132ull}}, {{14327701342477544093ull, 11614961941239100590ull, 4278716351663222670ull, 3068683204902643915ull}}, {{8686254641242154308ull, 5295330389694099930ull, 736709421151640434ull, 3835854006128304894ull}}, {{10040595169203734347ull, 7921267511986200360ull, 14295501443501938983ull, 2397408753830190558ull}}, {{12550743961504667933ull, 5289898371555362546ull, 8646004767522647921ull, 2996760942287738198ull}}, {{6465057915026059108ull, 11224058982871591087ull, 1584133922548534093ull, 3745951177859672748ull}}, {{10958190224532368799ull, 9320879873508438381ull, 10213455738447609616ull, 2341219486162295467ull}}, {{18309423799092848902ull, 11651099841885547976ull, 8155133654632124116ull, 2926524357702869334ull}}, {{4440035675156509512ull, 14563874802356934971ull, 970545031435379337ull, 3658155447128586668ull}}, {{938358575518248986ull, 4369785447664005002ull, 1213181289294224172ull, 4572694308910733335ull}}, {{5198160128126293520ull, 11954487941644778934ull, 7675767333449971963ull, 2857933943069208334ull}}, {{15721072197012642708ull, 10331423908628585763ull, 371337129957689146ull, 3572417428836510418ull}}, {{15039654227838415481ull, 3690907848930956396ull, 9687543449301887241ull, 4465521786045638022ull}}, {{176411855544233868ull, 13836032451650317508ull, 1443028637386291621ull, 2790951116278523764ull}}, {{220514819430292335ull, 3459982509280733173ull, 1803785796732864527ull, 3488688895348154705ull}}, {{4887329542715253322ull, 18160036191883080178ull, 6866418264343468562ull, 4360861119185193381ull}}, {{7666266982624421231ull, 15961708638354313015ull, 6597354424428361803ull, 2725538199490745863ull}}, {{4971147709853138634ull, 15340449779515503365ull, 3635007012108064350ull, 3406922749363432329ull}}, {{10825620655743811197ull, 9952190187539603398ull, 9155444783562468342ull, 4258653436704290411ull}}, {{2154326891412494094ull, 1608432848784864220ull, 3416309980512848762ull, 2661658397940181507ull}}, {{2692908614265617617ull, 11233913097835856083ull, 18105445530923224664ull, 3327072997425226883ull}}, {{17201193823114185734ull, 14042391372294820103ull, 18020120895226642926ull, 4158841246781533604ull}}, {{17668275167087447940ull, 4164808589256874660ull, 2039203522661876021ull, 2599275779238458503ull}}, {{3638599885149758309ull, 9817696754998481230ull, 16384062458609508738ull, 3249094724048073128ull}}, {{13771621893291973694ull, 3048748906893325729ull, 2033333999552334307ull, 4061368405060091411ull}}, {{1689734655666401703ull, 18046369131304186245ull, 17411734814216066605ull, 2538355253162557131ull}}, {{6723854338010390032ull, 8722903358848069094ull, 17152982499342695353ull, 3172944066453196414ull}}, {{17628189959367763348ull, 15515315216987474271ull, 12217856087323593383ull, 3966180083066495518ull}}, {{17935147752245933949ull, 16614601038258253275ull, 3024474036149857960ull, 2478862551916559699ull}}, {{17807248671880029532ull, 2321507224113264978ull, 17615650600469486163ull, 3098578189895699623ull}}, {{13035688802995261107ull, 16736942085423744935ull, 17407877232159469799ull, 3873222737369624529ull}}, {{15064834529513120048ull, 17378117831030922440ull, 3962394242458586768ull, 2420764210856015331ull}}, {{384299088181848444ull, 3275903215079101435ull, 341306784645845557ull, 3025955263570019164ull}}, {{14315431915509474267ull, 8706565037276264697ull, 426633480807306946ull, 3782444079462523955ull}}, {{2029615919552339561ull, 10053289166725053340ull, 16407546990000424505ull, 2364027549664077471ull}}, {{2537019899440424451ull, 17178297476833704579ull, 15897747719073142727ull, 2955034437080096839ull}}, {{17006332929582694275ull, 16861185827614742819ull, 15260498630414040505ull, 3693793046350121049ull}}, {{8323115071775489970ull, 3620712114618132406ull, 2620282616367693460ull, 2308620653968825656ull}}, {{1180521802864586655ull, 4525890143272665508ull, 3275353270459616825ull, 2885775817461032070ull}}, {{1475652253580733318ull, 10269048697518219789ull, 13317563624929296839ull, 3607219771826290087ull}}, {{6456251335403304552ull, 8224624853470386832ull, 12035268512734233145ull, 4509024714782862609ull}}, {{4035157084627065345ull, 16669605579487461530ull, 604513792817813859ull, 2818140446739289131ull}}, {{14267318392638607489ull, 16225320955931939008ull, 14590700296304431036ull, 3522675558424111413ull}}, {{17834147990798259361ull, 1834907121205372144ull, 4403317315098375084ull, 4403344448030139267ull}}, {{11146342494248912101ull, 10370188987608133398ull, 446230312722790475ull, 2752090280018837042ull}}, {{4709556080956364318ull, 8351050216082778844ull, 9781159927758263902ull, 3440112850023546302ull}}, {{5886945101195455398ull, 1215440733248697747ull, 3003077872843054070ull, 4300141062529432878ull}}, {{1373497679033465672ull, 14594708513562599804ull, 15711981725809072505ull, 2687588164080895548ull}}, {{1716872098791832089ull, 4408327586671086043ull, 1193233083551789016ull, 3359485205101119436ull}}, {{15981148178771953824ull, 5510409483338857553ull, 1491541354439736270ull, 4199356506376399295ull}}, {{3070688584091389284ull, 17279063982368949683ull, 7849742374165917024ull, 2624597816485249559ull}}, {{17673418785396400317ull, 3152085904251635487ull, 5200491949280008377ull, 3280747270606561949ull}}, {{17480087463318112492ull, 8551793398741932263ull, 11112300955027398375ull, 4100934088258202436ull}}, {{17842583692214902164ull, 12262399901854789520ull, 16168560133746899792ull, 2563083805161376522ull}}, {{3856485541559076088ull, 15327999877318486901ull, 10987328130328848932ull, 3203854756451720653ull}}, {{9432292945376233014ull, 713255772938557010ull, 18345846181338449070ull, 4004818445564650816ull}}, {{10506869109287533538ull, 14280842913368761843ull, 11466153863336530668ull, 2503011528477906760ull}}, {{8521900368182029019ull, 17851053641710952304ull, 14332692329170663335ull, 3128764410597383450ull}}, {{10652375460227536273ull, 17702131033711302476ull, 8692493374608553361ull, 3910955513246729313ull}}, {{15881106699496985979ull, 4146302868428482191ull, 16962023405198815611ull, 2444347195779205820ull}}, {{15239697355943844570ull, 571192567108214835ull, 2755785182788967898ull, 3055433994724007276ull}}, {{14437935676502417808ull, 9937362745740044352ull, 3444731478486209872ull, 3819292493405009095ull}}, {{9023709797814011130ull, 6210851716087527720ull, 9070486201694963026ull, 2387057808378130684ull}}, {{11279637247267513912ull, 16986936681964185458ull, 11338107752118703782ull, 2983822260472663355ull}}, {{4876174522229616582ull, 12010298815600456015ull, 9560948671720991824ull, 3729777825590829194ull}}, {{9965138104034592220ull, 7506436759750285009ull, 10587278938253007794ull, 2331111140994268246ull}}, {{17068108648470628179ull, 159673912833080453ull, 4010726635961483935ull, 2913888926242835308ull}}, {{7500077755306121512ull, 14034650446323514279ull, 5013408294951854918ull, 3642361157803544135ull}}, {{4763411175705263986ull, 8319941021049617041ull, 1655074350262430744ull, 4552951447254430169ull}}, {{14506347030884259751ull, 5199963138156010650ull, 12563636514982488975ull, 2845594654534018855ull}}, {{8909561751750548881ull, 1888267904267625409ull, 11092859625300723315ull, 3556993318167523569ull}}, {{15748638208115574005ull, 16195392935616695473ull, 31016476343740431ull, 4446241647709404462ull}}, {{2925369852431151897ull, 17039649612401516527ull, 13854443352997001481ull, 2778901029818377788ull}}, {{17491770370821103584ull, 7464503960219731946ull, 17318054191246251852ull, 3473626287272972235ull}}, {{12641340926671603671ull, 9330629950274664933ull, 17035881720630426911ull, 4342032859091215294ull}}, {{10206681088383446247ull, 12749172746562747439ull, 6035740056966628915ull, 2713770536932009559ull}}, {{8146665342051919904ull, 11324779914776046395ull, 2932989052780898240ull, 3392213171165011949ull}}, {{5571645659137511976ull, 14155974893470057994ull, 8277922334403510704ull, 4240266463956264936ull}}, {{8093964555388332889ull, 8847484308418786246ull, 5173701459002194190ull, 2650166539972665585ull}}, {{894083657380640304ull, 1835983348668707000ull, 11078812842180130642ull, 3312708174965831981ull}}, {{1117604571725800379ull, 11518351222690659558ull, 13457997442999590ull, 4140885218707289977ull}}, {{14533560912610788949ull, 2587283495754274319ull, 11537626294470344504ull, 2588053261692056235ull}}, {{13555265122336098282ull, 3234104369692842899ull, 9810346849660542726ull, 3235066577115070294ull}}, {{12332395384492734949ull, 13266002498970829432ull, 3039561525220902599ull, 4043833221393837868ull}}, {{7707747115307959343ull, 15208780589497850251ull, 11123097990117839932ull, 2527395763371148667ull}}, {{5022997875707561275ull, 564231663162761198ull, 9292186469219912012ull, 3159244704213935834ull}}, {{15502119381489227402ull, 705289578953451497ull, 2391861049670114207ull, 3949055880267419793ull}}, {{2771295585789685270ull, 7358335014486989042ull, 13024128202112291139ull, 2468159925167137370ull}}, {{12687491519091882396ull, 4586232749681348398ull, 7056788215785588116ull, 3085199906458921713ull}}, {{6635992362010077186ull, 5732790937101685498ull, 13432671288159373049ull, 3856499883073652141ull}}, {{8759181244683686146ull, 15112209381757023196ull, 10701262564313302107ull, 2410312426921032588ull}}, {{10948976555854607682ull, 14278575708768891091ull, 13376578205391627634ull, 3012890533651290735ull}}, {{9074534676390871698ull, 8624847599106338056ull, 12109036738312146639ull, 3766113167064113419ull}}, {{5671584172744294812ull, 12308058777082543141ull, 5262304952231397697ull, 2353820729415070887ull}}, {{11701166234357756418ull, 1550015416071015214ull, 1966195171861859218ull, 2942275911768838609ull}}, {{5403085756092419715ull, 11160891306943544826ull, 7069429983254711926ull, 3677844889711048261ull}}, {{15977229231970300451ull, 4727742096824655224ull, 13448473497495777812ull, 4597306112138810326ull}}, {{9985768269981437782ull, 12178210847370185323ull, 3793609917507473228ull, 2873316320086756454ull}}, {{7870524319049409324ull, 15222763559212731654ull, 13965384433739117343ull, 3591645400108445567ull}}, {{614783361956985847ull, 14416768430588526664ull, 12845044523746508775ull, 4489556750135556959ull}}, {{384239601223116154ull, 15928009296758911021ull, 14945681854982649840ull, 2805972968834723099ull}}, {{5091985519956283097ull, 1463267547239087160ull, 14070416300300924397ull, 3507466211043403874ull}}, {{6364981899945353871ull, 6440770452476246854ull, 8364648338521379688ull, 4384332763804254843ull}}, {{17813171742748009882ull, 4025481532797654283ull, 2922062202362168353ull, 2740207977377659277ull}}, {{17654778660007624448ull, 9643537934424455758ull, 8264263771380098345ull, 3425259971722074096ull}}, {{12845101288154754752ull, 16666108436457957602ull, 10330329714225122931ull, 4281574964652592620ull}}, {{12639874323524109624ull, 8110474763572529549ull, 15679828108245477640ull, 2675984352907870387ull}}, {{1964784849122973318ull, 10138093454465661937ull, 14988099116879459146ull, 3344980441134837984ull}}, {{7067667079831104551ull, 3449244781227301613ull, 288379822389772317ull, 4181225551418547481ull}}, {{6723134934108134297ull, 4461620997480757460ull, 11709452435062077458ull, 2613265969636592175ull}}, {{8403918667635167871ull, 14800398283705722633ull, 10025129525400208918ull, 3266582462045740219ull}}, {{15116584352971347742ull, 9277125817777377483ull, 7919725888322873244ull, 4083228077557175274ull}}, {{7142022211393398387ull, 15021575672965636735ull, 9561514698629183681ull, 2552017548473234546ull}}, {{4315841745814360080ull, 4941911535924882207ull, 2728521336431703794ull, 3190021935591543183ull}}, {{783116163840562195ull, 15400761456760878567ull, 17245709725821793454ull, 3987527419489428978ull}}, {{7406976630041433228ull, 5013789892048161200ull, 15390254597066008813ull, 2492204637180893111ull}}, {{9258720787551791535ull, 10878923383487589404ull, 14626132227905123112ull, 3115255796476116389ull}}, {{11573400984439739419ull, 13598654229359486755ull, 4447607229599240178ull, 3894069745595145487ull}}, {{4927532606061143185ull, 13110844911777067126ull, 9697283546140606967ull, 2433793590996965929ull}}, {{15382787794431204789ull, 11776870121293946003ull, 16733290451103146613ull, 3042241988746207411ull}}, {{14616798724611618082ull, 886029596335268792ull, 16304927045451545363ull, 3802802485932759264ull}}, {{9135499202882261302ull, 16694669562205400659ull, 10190579403407215851ull, 2376751553707974540ull}}, {{6807687985175438723ull, 16256650934329362920ull, 12738224254259019814ull, 2970939442134968175ull}}, {{8509609981469298404ull, 11097441631056927842ull, 11311094299396386864ull, 3713674302668710219ull}}, {{9930192256845699406ull, 6935901019410579901ull, 4763590927909047838ull, 2321046439167943887ull}}, {{17024426339484512162ull, 17893248311118000684ull, 1342802641458921893ull, 2901308048959929859ull}}, {{2833788850646088586ull, 8531502333615337144ull, 15513561357105816079ull, 3626635061199912323ull}}, {{3542236063307610733ull, 6052691898591783526ull, 14780265677954882195ull, 4533293826499890404ull}}, {{16048955594849420420ull, 1477089427406170751ull, 14294011867025564ull, 2833308641562431503ull}}, {{15449508475134387621ull, 1846361784257713439ull, 13852925570115945667ull, 3541635801953039378ull}}, {{14700199575490596622ull, 16143010285604305511ull, 8092784925790156275ull, 4427044752441299223ull}}, {{16105153762322704745ull, 7783538419288996992ull, 11975519606259929528ull, 2766902970275812014ull}}, {{1684698129193829315ull, 9729423024111246241ull, 5746027470970136102ull, 3458628712844765018ull}}, {{6717558679919674548ull, 2938406743284281993ull, 16405906375567445936ull, 4323285891055956272ull}}, {{15727689221018266353ull, 1836504214552676245ull, 10253691484729653710ull, 2702053681909972670ull}}, {{5824553470990669229ull, 11519002305045621115ull, 3593742319057291329ull, 3377567102387465838ull}}, {{2669005820310948632ull, 563694826024862682ull, 13715549935676389970ull, 4221958877984332297ull}}, {{6279814656121730799ull, 4963995284692927080ull, 1654689682156661875ull, 2638724298740207686ull}}, {{7849768320152163499ull, 1593308087438770946ull, 11291734139550603152ull, 3298405373425259607ull}}, {{588838363335428565ull, 1991635109298463683ull, 9502981656010866036ull, 4123006716781574509ull}}, {{16508925041580500517ull, 10468143980166315609ull, 8245206544220485224ull, 2576879197988484068ull}}, {{6801098246693461935ull, 13085179975207894512ull, 10306508180275606530ull, 3221098997485605085ull}}, {{8501372808366827418ull, 7133102932155092332ull, 17494821243771896067ull, 4026373746857006356ull}}, {{14536730042084042945ull, 2152346323383238755ull, 1710891240502659234ull, 2516483591785628973ull}}, {{13559226534177665777ull, 11913804941083824252ull, 6750300069055711946ull, 3145604489732036216ull}}, {{16949033167722082221ull, 5668884139500004507ull, 8437875086319639933ull, 3932005612165045270ull}}, {{8287302720612607436ull, 5848895596401196769ull, 661985910522387054ull, 2457503507603153294ull}}, {{14970814419193147199ull, 16534491532356271769ull, 10050854425007759625ull, 3071879384503941617ull}}, {{4878459968709270287ull, 6833056360163176000ull, 17175254049687087436ull, 3839849230629927021ull}}, {{3049037480443293929ull, 13494032261956760808ull, 13040376790268123599ull, 2399905769143704388ull}}, {{3811296850554117411ull, 12255854309018563106ull, 16300470987835154499ull, 2999882211429630485ull}}, {{13987493100047422572ull, 10708131867845815978ull, 6540530679511779412ull, 3749852764287038107ull}}, {{13353869205957027012ull, 15915954454258410794ull, 1781988665481168180ull, 2343657977679398817ull}}, {{7468964470591507957ull, 1448198994113461877ull, 6839171850278848130ull, 2929572472099248521ull}}, {{13947891606666772850ull, 11033620779496603154ull, 13160650831275948066ull, 3661965590124060651ull}}, {{8211492471478690254ull, 4568653937515978135ull, 11839127520667547179ull, 4577456987655075814ull}}, {{12049711822315263265ull, 549565701733792382ull, 2787768681989829083ull, 2860910617284422384ull}}, {{5838767741039303273ull, 14522015182449404190ull, 3484710852487286353ull, 3576138271605527980ull}}, {{16521831713153904899ull, 4317460922779591525ull, 4355888565609107942ull, 4470172839506909975ull}}, {{12631987829934884514ull, 16533471132019408415ull, 9639959381146774319ull, 2793858024691818734ull}}, {{11178298768991217739ull, 16055152896596872615ull, 2826577189578692091ull, 3492322530864773418ull}}, {{9361187442811634269ull, 15457255102318702865ull, 12756593523828140922ull, 4365403163580966772ull}}, {{17379957197825741178ull, 14272470457376577194ull, 17196242989247363884ull, 2728376977238104232ull}}, {{12501574460427400665ull, 17840588071720721493ull, 3048559662849653239ull, 3410471221547630291ull}}, {{1791910020252087119ull, 17689049071223513963ull, 17645757633844230261ull, 4263089026934537863ull}}, {{17260844827153412114ull, 13361498678728390178ull, 17946127548793725769ull, 2664430641834086164ull}}, {{12352683997086989334ull, 2866815293128324011ull, 3985915362282605596ull, 3330538302292607706ull}}, {{10829168977931348763ull, 3583519116410405014ull, 14205766239708032803ull, 4163172877865759632ull}}, {{2156544592779705073ull, 18380600512252360798ull, 8878603899817520501ull, 2601983048666099770ull}}, {{11919052777829407149ull, 9140692585033287285ull, 1874882837917124819ull, 3252478810832624713ull}}, {{1063757917004595224ull, 6814179712864221203ull, 6955289565823793928ull, 4065598513540780891ull}}, {{16805749762623729679ull, 4258862320540138251ull, 2041212969426177253ull, 2540999070962988057ull}}, {{16395501184852274195ull, 9935263919102560718ull, 7163202230210109470ull, 3176248838703735071ull}}, {{11271004444210566936ull, 3195707862023425090ull, 4342316769335248934ull, 3970311048379668839ull}}, {{11656063796058992239ull, 15832375469046804393ull, 9631477008475612439ull, 2481444405237293024ull}}, {{735021689791576587ull, 15178783317881117588ull, 12039346260594515549ull, 3101805506546616280ull}}, {{918777112239470733ull, 5138421092069233273ull, 15049182825743144437ull, 3877256883183270350ull}}, {{12103450741218138969ull, 5517356191756964747ull, 4794053247662077369ull, 2423285551989543969ull}}, {{10517627408095285807ull, 11508381258123593838ull, 10604252578004984615ull, 3029106939986929961ull}}, {{3923662223264331450ull, 9773790554227104394ull, 17867001740933618673ull, 3786383674983662451ull}}, {{7063974907967595060ull, 17637834142460410006ull, 8861033078869817718ull, 2366489796864789032ull}}, {{18053340671814269633ull, 12823920641220736699ull, 11076291348587272148ull, 2958112246080986290ull}}, {{17954989821340449138ull, 16029900801525920874ull, 4621992148879314377ull, 3697640307601232863ull}}, {{15833554656765168615ull, 3101158973312618690ull, 9806274120690653342ull, 2311025192250770539ull}}, {{10568571284101684961ull, 13099820753495549171ull, 7646156632435928773ull, 2888781490313463174ull}}, {{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull, 3610976862891828968ull}}, {{10748785108374647871ull, 17009705413516254652ull, 417904692112668948ull, 4513721078614786210ull}}, {{15941362729588930728ull, 1407693846592883349ull, 4872876450997805997ull, 2821075674134241381ull}}, {{6091645356703999697ull, 6371303326668492091ull, 10702781582174645400ull, 3526344592667801726ull}}, {{3002870677452611718ull, 7964129158335615114ull, 4155104940863530942ull, 4407930740834752158ull}}, {{6488480191835270228ull, 365894705532371542ull, 16431998643321870551ull, 2754956713021720098ull}}, {{17333972276648863593ull, 14292426437197628139ull, 11316626267297562380ull, 3443695891277150123ull}}, {{17055779327383691587ull, 17865533046497035174ull, 9534096815694565071ull, 4304619864096437654ull}}, {{6048176061187419338ull, 18083487181701728840ull, 1347124491381715265ull, 2690387415060273534ull}}, {{7560220076484274172ull, 8769300921844997338ull, 10907277651081919890ull, 3362984268825341917ull}}, {{226903058750566907ull, 1738254115451470865ull, 18245783082279787767ull, 4203730336031677396ull}}, {{11671029457787574077ull, 8003937849798251146ull, 2180242389570091546ull, 2627331460019798373ull}}, {{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull, 3284164325024747966ull}}, {{11318454500152002639ull, 5588623862668685560ull, 18394608293592278729ull, 4105205406280934957ull}}, {{7074034062595001650ull, 15022104960236398235ull, 13802473192708868157ull, 2565753378925584348ull}}, {{4230856559816364158ull, 4942573145013334082ull, 17253091490886085197ull, 3207191723656980435ull}}, {{14511942736625231005ull, 10789902449694055506ull, 16954678345180218592ull, 4008989654571225544ull}}, {{13681650228818157283ull, 6743689031058784691ull, 10596673965737636620ull, 2505618534107015965ull}}, {{12490376767595308699ull, 8429611288823480864ull, 17857528475599433679ull, 3132023167633769956ull}}, {{15612970959494135874ull, 5925328092601963176ull, 3875166520789740483ull, 3915028959542212446ull}}, {{9758106849683834921ull, 1397487048662533033ull, 16257037130775751514ull, 2446893099713882778ull}}, {{16809319580532181555ull, 10970230847682942099ull, 11097924376614913584ull, 3058616374642353473ull}}, {{16399963457237839040ull, 13712788559603677624ull, 37347415486478268ull, 3823270468302941842ull}}, {{10249977160773649400ull, 17793864886607074323ull, 4635028153106436821ull, 2389544042689338651ull}}, {{8200785432539673846ull, 8407273052976679192ull, 1182099172955658123ull, 2986930053361673314ull}}, {{10250981790674592308ull, 5897405297793461086ull, 10700996003049348462ull, 3733662566702091642ull}}, {{1795177600744232288ull, 17520936366403076891ull, 11299808520333230692ull, 2333539104188807276ull}}, {{16079030056212454072ull, 3454426384294294497ull, 14124760650416538366ull, 2916923880236009095ull}}, {{6263729514983403878ull, 13541405017222643930ull, 13044264794593285053ull, 3646154850295011369ull}}, {{17053033930584030656ull, 3091698216246141200ull, 2470272937959442605ull, 4557693562868764212ull}}, {{10658146206615019160ull, 4238154394367532202ull, 10767292623079427436ull, 2848558476792977632ull}}, {{4099310721413998142ull, 5297692992959415253ull, 13459115778849284295ull, 3560698095991222040ull}}, {{9735824420194885581ull, 2010430222771881162ull, 16823894723561605369ull, 4450872619989027550ull}}, {{10696576281049191393ull, 12785733935300895486ull, 5903248183798615451ull, 2781795387493142219ull}}, {{4147348314456713433ull, 11370481400698731454ull, 2767374211320881410ull, 3477244234366427774ull}}, {{14407557429925667599ull, 4989729714018638509ull, 12682589801005877571ull, 4346555292958034717ull}}, {{11310566402917236201ull, 812738062047955116ull, 10232461634842367434ull, 2716597058098771698ull}}, {{14138208003646545252ull, 10239294614414719703ull, 3567205006698183484ull, 3395746322623464623ull}}, {{13061073986130793660ull, 12799118268018399629ull, 18294064313654893067ull, 4244682903279330778ull}}, {{10469014250545439990ull, 5693605908297805816ull, 16045476214461696071ull, 2652926814549581736ull}}, {{13086267813181799987ull, 2505321366944869366ull, 1610101194367568473ull, 3316158518186977171ull}}, {{7134462729622474176ull, 7743337727108474612ull, 15847684548241624303ull, 4145198147733721463ull}}, {{13682411242868822168ull, 11757115107083878488ull, 16822331870292097045ull, 2590748842333575914ull}}, {{17103014053586027710ull, 861335828572684398ull, 11804542801010345499ull, 3238436052916969893ull}}, {{12155395530127758829ull, 14911727840998019210ull, 920620445980768161ull, 4048045066146212367ull}}, {{12208808224757237173ull, 2402300872982680150ull, 7492916806379061957ull, 2530028166341382729ull}}, {{6037638244091770658ull, 7614562109655738092ull, 13977832026401215350ull, 3162535207926728411ull}}, {{7547047805114713322ull, 294830600214896807ull, 12860604014574131284ull, 3953169009908410514ull}}, {{11634433905837777682ull, 9407641161989086312ull, 12649563527536219956ull, 2470730631192756571ull}}, {{14543042382297222103ull, 11759551452486357890ull, 11200268390992887041ull, 3088413288990945714ull}}, {{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull, 3860516611238682143ull}}, {{3291301328921775936ull, 5151924306131002686ull, 9903131185070039977ull, 2412822882024176339ull}}, {{13337498698006995728ull, 11051591401091141261ull, 7767227962910162067ull, 3016028602530220424ull}}, {{2836815317226580948ull, 9202803232936538673ull, 9709034953637702584ull, 3770035753162775530ull}}, {{13302224619335082852ull, 5751752020585336670ull, 10679832864450952019ull, 2356272345726734706ull}}, {{7404408737314077757ull, 2578004007304282934ull, 4126419043708914216ull, 2945340432158418383ull}}, {{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull, 3681675540198022979ull}}, {{40173605984776736ull, 13251503298267717893ull, 14517980288043107294ull, 4602094425247528723ull}}, {{2330951512954179412ull, 3670503542989935779ull, 6767894670813248107ull, 2876309015779705452ull}}, {{16748747446474887977ull, 18423187484019583435ull, 8459868338516560133ull, 3595386269724631815ull}}, {{16324248289666222067ull, 9193926299742315582ull, 5963149404718312263ull, 4494232837155789769ull}}, {{5590969162614000888ull, 12663732964980029095ull, 15256183424017414924ull, 2808895523222368605ull}}, {{2377025434840113206ull, 15829666206225036369ull, 5235171224739604943ull, 3511119404027960757ull}}, {{7582967811977529411ull, 15175396739353907557ull, 11155650049351894083ull, 4388899255034950946ull}}, {{7045197891699649834ull, 7178779952882498271ull, 11583967299272321706ull, 2743062034396844341ull}}, {{4194811346197174389ull, 18196846977957898647ull, 644901068808238420ull, 3428827542996055427ull}}, {{631828164319080082ull, 4299314648737821693ull, 14641184391292461738ull, 4286034428745069283ull}}, {{2700735611913119003ull, 7298757673888526462ull, 6844897235344094634ull, 2678771517965668302ull}}, {{12599291551746174562ull, 18346819129215433885ull, 17779493581034894100ull, 3348464397457085377ull}}, {{1914056384400554490ull, 4486779837809740741ull, 8389308921011453914ull, 4185580496821356722ull}}, {{3502128249464040509ull, 7415923417058475867ull, 9855004094059546600ull, 2615987810513347951ull}}, {{18212718367112214348ull, 9269904271323094833ull, 7707069099147045346ull, 3269984763141684939ull}}, {{8930839903608104222ull, 2364008302299092734ull, 5022150355506418779ull, 4087480953927106174ull}}, {{970088921327677235ull, 17618406253432790623ull, 16973902027473675448ull, 2554675596204441358ull}}, {{15047669206941760256ull, 3576263743081436662ull, 11994005497487318503ull, 3193344495255551698ull}}, {{9586214471822424512ull, 18305387734133959540ull, 5769134835004372320ull, 3991680619069439623ull}}, {{15214756081743791128ull, 11440867333833724712ull, 10523238299518814556ull, 2494800386918399764ull}}, {{571701028470187294ull, 14301084167292155891ull, 13154047874398518195ull, 3118500483647999705ull}}, {{14549684340869897829ull, 13264669190687806959ull, 2607501787715984032ull, 3898125604559999632ull}}, {{16011081740684767999ull, 8290418244179879349ull, 1629688617322490020ull, 2436328502849999770ull}}, {{6178794120573796287ull, 10363022805224849187ull, 11260482808507888333ull, 3045410628562499712ull}}, {{3111806632289857455ull, 17565464524958449388ull, 14075603510634860416ull, 3806763285703124640ull}}, {{11168251182035936718ull, 10978415328099030867ull, 8797252194146787760ull, 2379227053564452900ull}}, {{9348627959117532993ull, 13723019160123788584ull, 10996565242683484700ull, 2974033816955566125ull}}, {{11685784948896916241ull, 17153773950154735730ull, 18357392571781743779ull, 3717542271194457656ull}}, {{11915301611487960555ull, 8415265709633015879ull, 11473370357363589862ull, 2323463919496536035ull}}, {{10282440995932562789ull, 1295710100186494041ull, 9730026928277099424ull, 2904329899370670044ull}}, {{17464737263343091390ull, 1619637625233117551ull, 12162533660346374280ull, 3630412374213337555ull}}, {{17219235560751476334ull, 2024547031541396939ull, 10591481057005579946ull, 4538015467766671944ull}}, {{8456179216255978757ull, 5877027913140760991ull, 6619675660628487466ull, 2836259667354169965ull}}, {{5958538001892585542ull, 16569656928280727047ull, 12886280594212997236ull, 3545324584192712456ull}}, {{2836486483938344023ull, 2265327086641357193ull, 16107850742766246546ull, 4431655730240890570ull}}, {{13302019098529934775ull, 6027515447578236149ull, 14679092732656291995ull, 2769784831400556606ull}}, {{2792465817880254756ull, 2922708291045407283ull, 9125493878965589186ull, 3462231039250695758ull}}, {{17325640327632482157ull, 12876757400661534911ull, 2183495311852210674ull, 4327788799063369698ull}}, {{17746054232411383205ull, 12659659393840847223ull, 5976370588335019575ull, 2704867999414606061ull}}, {{17570881772086841102ull, 11212888223873671125ull, 12082149253846162373ull, 3381084999268257576ull}}, {{8128544159826387665ull, 181052224559925195ull, 15102686567307702967ull, 4226356249085321970ull}}, {{2774497090677798339ull, 7030686667991035103ull, 14050865122994702258ull, 2641472655678326231ull}}, {{17303179418629411635ull, 18011730371843569686ull, 12951895385315989918ull, 3301840819597907789ull}}, {{12405602236431988736ull, 13291290927949686300ull, 2354811176362823686ull, 4127301024497384737ull}}, {{16976873434624768768ull, 3695370811541166033ull, 13000972031295234564ull, 2579563140310865460ull}}, {{7386033737998797248ull, 4619213514426457542ull, 16251215039119043205ull, 3224453925388581825ull}}, {{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull, 4030567406735727282ull}}, {{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull, 2519104629209829551ull}}, {{13842222223753820550ull, 2349222876544249363ull, 6214609585557347206ull, 3148880786512286939ull}}, {{12691091761264887783ull, 12159900632535087512ull, 3156575963519296103ull, 3936100983140358674ull}}, {{7931932350790554864ull, 14517466922975511551ull, 6584545995626947968ull, 2460063114462724171ull}}, {{5303229420060805676ull, 18146833653719389439ull, 3618996476106297056ull, 3075078893078405214ull}}, {{2017350756648619191ull, 4236797993439685183ull, 13747117631987647129ull, 3843848616348006517ull}}, {{8178373250546468851ull, 14177213791968272999ull, 10897791529205973407ull, 2402405385217504073ull}}, {{5611280544755698159ull, 13109831221532953345ull, 18233925429934854663ull, 3003006731521880091ull}}, {{11625786699372010603ull, 11775603008488803777ull, 18180720768991180425ull, 3753758414402350114ull}}, {{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull, 2346099009001468821ull}}, {{5047420592760418868ull, 9776150602685301439ull, 6133237568526430875ull, 2932623761251836027ull}}, {{1697589722523135681ull, 7608502234929238895ull, 3054860942230650690ull, 3665779701564795034ull}}, {{15957045208436083313ull, 287255756806772810ull, 13041948214643089171ull, 4582224626955993792ull}}, {{14584839273699939975ull, 16320435912500090670ull, 8151217634151930731ull, 2863890391847496120ull}}, {{9007677055270149160ull, 15788858872197725434ull, 10189022042689913414ull, 3579862989809370150ull}}, {{2036224282232910642ull, 10512701553392380985ull, 3512905516507615960ull, 4474828737261712688ull}}, {{12801855222464038911ull, 6570438470870238115ull, 2195565947817259975ull, 2796767960788570430ull}}, {{11390633009652660735ull, 3601362070160409740ull, 11967829471626350777ull, 3495959950985713037ull}}, {{14238291262065825919ull, 9113388606127900079ull, 1124728784250774759ull, 4369949938732141297ull}}, {{15816461066432223055ull, 12613396906471019405ull, 12232170536225203984ull, 2731218711707588310ull}}, {{5935518277758115107ull, 15766746133088774257ull, 6066841133426729172ull, 3414023389634485388ull}}, {{12031083865625031788ull, 1261688592651416205ull, 7583551416783411466ull, 4267529237043106735ull}}, {{9825270425229338820ull, 5400241388834523032ull, 11657248663130714022ull, 2667205773151941709ull}}, {{12281588031536673524ull, 15973673772897929598ull, 736502773631228815ull, 3334007216439927137ull}}, {{6128613002566066097ull, 15355406197695024094ull, 5532314485466423923ull, 4167509020549908921ull}}, {{17665441181885955023ull, 7291285864345696106ull, 14986911599484984712ull, 2604693137843693075ull}}, {{12858429440502667971ull, 9114107330432120133ull, 14121953480928842986ull, 3255866422304616344ull}}, {{2237978745346171251ull, 2169262126185374359ull, 17652441851161053733ull, 4069833027880770430ull}}, {{8316265743482438888ull, 3661631838079552926ull, 6421090138548270679ull, 2543645642425481519ull}}, {{1171960142498272802ull, 18412097852881604870ull, 3414676654757950444ull, 3179557053031851899ull}}, {{10688322214977616811ull, 4568378242392454471ull, 18103403873729601768ull, 3974446316289814873ull}}, {{13597730412002092363ull, 2855236401495284044ull, 4397098393439919249ull, 2484028947681134296ull}}, {{16997163015002615453ull, 8180731520296492959ull, 5496372991799899061ull, 3105036184601417870ull}}, {{16634767750325881413ull, 14837600418798004103ull, 16093838276604649634ull, 3881295230751772337ull}}, {{17314258871594757739ull, 13885186280176140468ull, 3141119895236824165ull, 2425809519219857711ull}}, {{3196079515783895558ull, 3521424794938011874ull, 17761457924328193919ull, 3032261899024822138ull}}, {{13218471431584645255ull, 18236839048954678554ull, 12978450368555466590ull, 3790327373781027673ull}}, {{12873230663167791189ull, 6786338387169286192ull, 1194002452706084763ull, 2368954608613142296ull}}, {{16091538328959738986ull, 3871236965534219836ull, 1492503065882605954ull, 2961193260766427870ull}}, {{1667678837490122116ull, 14062418243772550604ull, 11089000869208033250ull, 3701491575958034837ull}}, {{10265671310286102131ull, 13400697420785232031ull, 9236468552468714733ull, 2313432234973771773ull}}, {{8220403119430239759ull, 2915813720699376327ull, 16157271709013281321ull, 2891790293717214716ull}}, {{5663817880860411795ull, 8256453169301608313ull, 1749845562557050035ull, 3614737867146518396ull}}, {{11691458369502902647ull, 5708880443199622487ull, 2187306953196312544ull, 4518422333933147995ull}}, {{14224690508580396011ull, 3568050276999764054ull, 17507967910243553004ull, 2824013958708217496ull}}, {{8557491098870719205ull, 4460062846249705068ull, 3438215814094889639ull, 3530017448385271871ull}}, {{10696863873588399007ull, 963392539384743431ull, 18132827822900775761ull, 4412521810481589838ull}}, {{13603068948633831235ull, 12131335383183934404ull, 6721331370885596946ull, 2757826131550993649ull}}, {{17003836185792289044ull, 5940797192125142197ull, 13013350232034384087ull, 3447282664438742061ull}}, {{7419737176958197593ull, 2814310471729039843ull, 2431629734760816397ull, 4309103330548427577ull}}, {{2331492726385179544ull, 4064787054044343854ull, 13048983630293980008ull, 2693189581592767235ull}}, {{12137737944836250237ull, 5080983817555429817ull, 11699543519440087106ull, 3366486976990959044ull}}, {{1337114375763149085ull, 15574601808799063080ull, 14624429399300108882ull, 4208108721238698805ull}}, {{835696484851968178ull, 14345812148926802329ull, 11446111383776262003ull, 2630067950774186753ull}}, {{5656306624492348127ull, 13320579167731115007ull, 472581174438163792ull, 3287584938467733442ull}}, {{2458697262188047254ull, 16650723959663893759ull, 9814098504902480548ull, 4109481173084666802ull}}, {{8454214816508611390ull, 1183330437935157791ull, 10745497583991438247ull, 2568425733177916751ull}}, {{5956082502208376333ull, 15314221102701110951ull, 8820185961561909904ull, 3210532166472395939ull}}, {{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull, 4013165208090494924ull}}, {{13300100739401646331ull, 2740863199630467122ull, 13231838557807900481ull, 2508228255056559327ull}}, {{7401753887397282105ull, 8037765017965471807ull, 11928112178832487697ull, 3135285318820699159ull}}, {{4640506340819214727ull, 14658892290884227663ull, 10298454205113221717ull, 3919106648525873949ull}}, {{9817845490653091061ull, 11467650691016336241ull, 8742376887409457525ull, 2449441655328671218ull}}, {{16883992881743751730ull, 499505308488256589ull, 1704599072407046099ull, 3061802069160839023ull}}, {{7269933046897525950ull, 14459439690892484449ull, 15965806895790971335ull, 3827252586451048778ull}}, {{16072923200379423479ull, 15954678834448884636ull, 14590315328296744988ull, 2392032866531905486ull}}, {{1644409926764727733ull, 1496604469351554180ull, 9014522123516155428ull, 2990041083164881858ull}}, {{2055512408455909666ull, 1870755586689442725ull, 2044780617540418477ull, 3737551353956102323ull}}, {{3590538264498637493ull, 3475065250894595655ull, 17418888950458619212ull, 2335969596222563951ull}}, {{18323230885905460578ull, 4343831563618244568ull, 17161925169645886111ull, 2919961995278204939ull}}, {{4457294533672274107ull, 818103436095417807ull, 16840720443629969735ull, 3649952494097756174ull}}, {{959932148662954729ull, 14857687350401435971ull, 11827528517682686360ull, 4562440617622195218ull}}, {{16740858657410204370ull, 9286054594000897481ull, 12003891341979066879ull, 2851525386013872011ull}}, {{7091015266480591750ull, 6995882224073733948ull, 10393178159046445695ull, 3564406732517340014ull}}, {{8863769083100739688ull, 4133166761664779531ull, 3768100661953281311ull, 4455508415646675018ull}}, {{3234012667724268353ull, 9500758253681569063ull, 6966748932148188723ull, 2784692759779171886ull}}, {{17877573889937499153ull, 7264261798674573424ull, 17931808202040011712ull, 3480865949723964857ull}}, {{3900223288712322326ull, 9080327248343216781ull, 8579702197267850928ull, 4351082437154956072ull}}, {{4743482564658895406ull, 5675204530214510488ull, 5362313873292406830ull, 2719426523221847545ull}}, {{5929353205823619257ull, 16317377699622913918ull, 11314578360042896441ull, 3399283154027309431ull}}, {{16635063544134299879ull, 6561664069246478685ull, 9531536931626232648ull, 4249103942534136789ull}}, {{12702757724297631377ull, 4101040043279049178ull, 8263053591480089357ull, 2655689964083835493ull}}, {{6655075118517263413ull, 9737986072526199377ull, 14940503007777499600ull, 3319612455104794366ull}}, {{12930529916573967170ull, 12172482590657749221ull, 9452256722867098692ull, 4149515568880992958ull}}, {{10387424207072423433ull, 16831173656015869071ull, 1295974433364548778ull, 2593447230550620599ull}}, {{8372594240413141387ull, 11815595033165060531ull, 15455026096987849685ull, 3241809038188275748ull}}, {{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull, 4052261297735344686ull}}, {{3658785488805649269ull, 16724923399604708884ull, 14380082147485451518ull, 2532663311084590428ull}}, {{4573481861007061586ull, 11682782212651110297ull, 17975102684356814398ull, 3165829138855738035ull}}, {{10328538344686214887ull, 5380105728959112063ull, 17857192337018630094ull, 3957286423569672544ull}}, {{13372865493069966160ull, 17197624135881608751ull, 11160745210636643808ull, 2473304014731045340ull}}, {{12104395847910069796ull, 3050286096142459323ull, 13950931513295804761ull, 3091630018413806675ull}}, {{10518808791460199341ull, 8424543638605462058ull, 12826978373192368047ull, 3864537523017258344ull}}, {{11185941513090012492ull, 12182868801769495642ull, 8016861483245230029ull, 2415335951885786465ull}}, {{4759054854507739807ull, 1393527946929705841ull, 14632762872483925441ull, 3019169939857233081ull}}, {{10560504586562062663ull, 6353595952089520205ull, 4455895535322743089ull, 3773962424821541352ull}}, {{8906158375814983117ull, 15500212516124419888ull, 2784934709576714430ull, 2358726515513463345ull}}, {{11132697969768728896ull, 10151893608300749052ull, 8092854405398280942ull, 2948408144391829181ull}}, {{13915872462210911119ull, 3466494973521160507ull, 14727754025175239082ull, 3685510180489786476ull}}, {{12783154559336250995ull, 13556490753756226442ull, 18409692531469048852ull, 4606887725612233095ull}}, {{12601157618012544776ull, 17696178757952417334ull, 18423586859809237388ull, 2879304828507645684ull}}, {{6528074985660905162ull, 3673479373730970052ull, 4582739501051995120ull, 3599131035634557106ull}}, {{8160093732076131452ull, 4591849217163712565ull, 14951796413169769708ull, 4498913794543196382ull}}, {{7405901591761276110ull, 12093277797582096161ull, 4733186739803718163ull, 2811821121589497739ull}}, {{13869063008128983041ull, 10504911228550232297ull, 1304797406327259800ull, 3514776401986872174ull}}, {{3501270704879065090ull, 13131139035687790372ull, 10854368794763850558ull, 4393470502483590217ull}}, {{11411666227404191489ull, 3595275878877481078ull, 18313195542795876359ull, 2745919064052243885ull}}, {{5041210747400463553ull, 18329152903879015060ull, 9056436373212681736ull, 3432398830065304857ull}}, {{6301513434250579442ull, 4464697056139217209ull, 15932231484943240075ull, 4290498537581631071ull}}, {{15467660942475081911ull, 484592650873316803ull, 16875173705730606903ull, 2681561585988519419ull}}, {{14722890159666464485ull, 14440798868873809716ull, 16482281113735870724ull, 3351951982485649274ull}}, {{18403612699583080606ull, 18050998586092262145ull, 11379479355315062597ull, 4189939978107061593ull}}, {{4584728909598343523ull, 13587717125521357793ull, 194645569430832267ull, 2618712486316913496ull}}, {{10342597155425317307ull, 12372960388474309337ull, 243306961788540334ull, 3273390607896141870ull}}, {{17539932462709034538ull, 6242828448738110863ull, 9527505739090451226ull, 4091738259870177337ull}}, {{17879986816834228443ull, 8513453798888707193ull, 17483906133000001776ull, 2557336412418860835ull}}, {{8514925465760621841ull, 10641817248610883992ull, 17243196647822614316ull, 3196670515523576044ull}}, {{10643656832200777301ull, 13302271560763604990ull, 3107251736068716279ull, 3995838144404470056ull}}, {{2040599501698097909ull, 15231448753118334975ull, 1942032335042947674ull, 2497398840252793785ull}}, {{16385807432404786099ull, 9815938904543142910ull, 7039226437231072497ull, 3121748550315992231ull}}, {{11258887253651206815ull, 16881609649106316542ull, 4187347028111452717ull, 3902185687894990289ull}}, {{2425118515104616356ull, 12856849039905141791ull, 14146306938638127708ull, 2438866054934368930ull}}, {{16866456199162934157ull, 16071061299881427238ull, 8459511636442883827ull, 3048582568667961163ull}}, {{11859698212098891888ull, 15477140606424396144ull, 5962703527126216880ull, 3810728210834951454ull}}, {{7412311382561807430ull, 9673212879015247590ull, 17561747759736049262ull, 2381705131771844658ull}}, {{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull, 2977131414714805823ull}}, {{52521489184354349ull, 12808552114247630408ull, 11299329810091719308ull, 3721414268393507279ull}}, {{32825930740221468ull, 17228717108259544813ull, 13979610158948406423ull, 2325883917745942049ull}}, {{4652718431852664739ull, 16924210366897043112ull, 3639454643403344317ull, 2907354897182427562ull}}, {{5815898039815830924ull, 7320204903339140178ull, 13772690341108956205ull, 3634193621478034452ull}}, {{16493244586624564463ull, 13761942147601313126ull, 17215862926386195256ull, 4542742026847543065ull}}, {{5696591848212964885ull, 8601213842250820704ull, 3842385301350290179ull, 2839213766779714416ull}}, {{7120739810266206107ull, 6139831284386137976ull, 4802981626687862724ull, 3549017208474643020ull}}, {{8900924762832757633ull, 7674789105482672470ull, 6003727033359828405ull, 4436271510593303775ull}}, {{951391958343085617ull, 7102586200140364246ull, 10669858423490974609ull, 2772669694120814859ull}}, {{10412611984783632829ull, 13489918768602843211ull, 8725637010936330357ull, 3465837117651018574ull}}, {{8404078962552153132ull, 3027340405471390302ull, 1683674226815637139ull, 4332296397063773218ull}}, {{640863333167707804ull, 18032988817915476603ull, 5663982410187161115ull, 2707685248164858261ull}}, {{14636137221741798467ull, 17929550003966957849ull, 11691664031161339298ull, 3384606560206072826ull}}, {{4460113471895084371ull, 13188565468103921504ull, 5391208002096898315ull, 4230758200257591033ull}}, {{2787570919934427732ull, 5937010408351256988ull, 14898720047379031207ull, 2644223875160994395ull}}, {{3484463649918034665ull, 2809576992011683331ull, 14011714040796401105ull, 3305279843951242994ull}}, {{18190637617679707043ull, 8123657258441992067ull, 8291270514140725573ull, 4131599804939053743ull}}, {{9063305501836122950ull, 7383128795739938994ull, 12099573098979035339ull, 2582249878086908589ull}}, {{2105759840440377880ull, 4617224976247535839ull, 1289408318441630462ull, 3227812347608635737ull}}, {{16467257855832636061ull, 14994903257164195606ull, 6223446416479425981ull, 4034765434510794671ull}}, {{5680350141468009635ull, 11677657544941316206ull, 10807183037940723094ull, 2521728396569246669ull}}, {{16323809713689787851ull, 5373699894321869449ull, 18120664815853291772ull, 3152160495711558336ull}}, {{6569704086830071102ull, 6717124867902336812ull, 4204086946107063099ull, 3940200619639447921ull}}, {{13329437091123570247ull, 1892360033225266555ull, 14156769387385384197ull, 2462625387274654950ull}}, {{12050110345477074904ull, 6977136059958971098ull, 8472589697376954438ull, 3078281734093318688ull}}, {{5839265894991567822ull, 17944792111803489681ull, 10590737121721193047ull, 3847852167616648360ull}}, {{15178756230438199649ull, 18133024097518262906ull, 6619210701075745654ull, 2404907604760405225ull}}, {{9750073251192973753ull, 13442908085043052825ull, 12885699394772069972ull, 3006134505950506531ull}}, {{16799277582418605095ull, 16803635106303816031ull, 11495438225037699561ull, 3757668132438133164ull}}, {{17417077516652710041ull, 3584742913798803163ull, 16408020927503338034ull, 2348542582773833227ull}}, {{17159660877388499647ull, 13704300679103279762ull, 15898340140951784638ull, 2935678228467291534ull}}, {{12226204059880848751ull, 7907003812024323895ull, 10649553139334954990ull, 3669597785584114418ull}}, {{10671069056423673034ull, 660382728175629061ull, 4088569387313917930ull, 4586997231980143023ull}}, {{8975261169478489598ull, 5024425223537156067ull, 9472884894712280562ull, 2866873269987589389ull}}, {{6607390443420724094ull, 15503903566276220892ull, 16452792136817738606ull, 3583591587484486736ull}}, {{8259238054275905117ull, 10156507420990500307ull, 2119246097312621642ull, 4479489484355608421ull}}, {{2856180774708746746ull, 10959503156546450596ull, 3630371820034082478ull, 2799680927722255263ull}}, {{3570225968385933433ull, 4476006908828287437ull, 18373022830324766810ull, 3499601159652819078ull}}, {{9074468478909804695ull, 14818380672890135104ull, 13742906501051182704ull, 4374501449566023848ull}}, {{5671542799318627935ull, 9261487920556334440ull, 8589316563156989190ull, 2734063405978764905ull}}, {{7089428499148284918ull, 2353487863840642242ull, 15348331722373624392ull, 3417579257473456131ull}}, {{18085157660790131956ull, 2941859829800802802ull, 14573728634539642586ull, 4271974071841820164ull}}, {{15914909556421220376ull, 6450348412052889655ull, 18331952433442052424ull, 2669983794901137602ull}}, {{15281950927099137566ull, 8062935515066112069ull, 13691568504947789722ull, 3337479743626422003ull}}, {{5267380603591758246ull, 855297356977864279ull, 12502774612757349249ull, 4171849679533027504ull}}, {{10209641904885930760ull, 12063775894179634934ull, 7814234132973343280ull, 2607406049708142190ull}}, {{3538680344252637642ull, 15079719867724543668ull, 544420629361903292ull, 3259257562135177738ull}}, {{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull, 4074071952668972172ull}}, {{14293809065015842918ull, 9475188137446105788ull, 15413308176577997635ull, 2546294970418107607ull}}, {{17867261331269803647ull, 7232299153380244331ull, 14654949202295109140ull, 3182868713022634509ull}}, {{17722390645659866655ull, 9040373941725305414ull, 4483628447586722713ull, 3978585891278293137ull}}, {{6464808135110028755ull, 17179448759646785644ull, 14331482825810171455ull, 2486616182048933210ull}}, {{8081010168887535944ull, 16862624931131094151ull, 8690981495407938511ull, 3108270227561166513ull}}, {{5489576692682032026ull, 16466595145486479785ull, 15475412887687311043ull, 3885337784451458141ull}}, {{14960200478994739776ull, 7985778956715355913ull, 11977976064018263354ull, 2428336115282161338ull}}, {{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull, 3035420144102701673ull}}, {{6081490679326576260ull, 5560250592226661759ull, 11798058572387454635ull, 3794275180128377091ull}}, {{10718460702220192019ull, 1169313610927969647ull, 5067943598528465195ull, 2371421987580235682ull}}, {{8786389859347852119ull, 15296700068942125771ull, 15558301535015357301ull, 2964277484475294602ull}}, {{6371301305757427245ull, 5285817030895493502ull, 10224504881914420819ull, 3705346855594118253ull}}, {{17817121371380555740ull, 997792635095989486ull, 8696158560410206964ull, 2315841784746323908ull}}, {{13048029677370918867ull, 1247240793869986858ull, 10870198200512758705ull, 2894802230932904885ull}}, {{7086665059858872776ull, 6170737010764871477ull, 18199433769068336285ull, 3618502788666131106ull}}, {{13470017343250978874ull, 12325107281883477250ull, 13525920174480644548ull, 4523128485832663883ull}}, {{13030446857959249701ull, 16926564088031949089ull, 6147857099836708890ull, 2826955303645414927ull}}, {{2453000517166898414ull, 11934833073185160554ull, 3073135356368498209ull, 3533694129556768659ull}}, {{12289622683313398825ull, 1083483286199286980ull, 17676477250742786474ull, 4417117661945960823ull}}, {{16904386213925650074ull, 5288863072301942266ull, 17965327309355323402ull, 2760698538716225514ull}}, {{11907110730552286784ull, 15834450877232203641ull, 13233287099839378444ull, 3450873173395281893ull}}, {{1048830357908194768ull, 1346319522830702936ull, 2706550819517059344ull, 4313591466744102367ull}}, {{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull, 2695994666715063979ull}}, {{14654456772397940874ull, 10275184164066262476ull, 6149718093871667028ull, 3369993333393829974ull}}, {{18318070965497426093ull, 12843980205082828095ull, 16910519654194359593ull, 4212491666742287467ull}}, {{18366323381076973164ull, 1109958600535685703ull, 8263231774657780794ull, 2632807291713929667ull}}, {{18346218207918828551ull, 10610820287524382937ull, 5717353699894838088ull, 3291009114642412084ull}}, {{9097714704616371977ull, 13263525359405478672ull, 7146692124868547610ull, 4113761393303015105ull}}, {{5686071690385232486ull, 12901389368055812074ull, 15995897624111312016ull, 2571100870814384440ull}}, {{16330961649836316415ull, 16126736710069765092ull, 1548127956429588404ull, 3213876088517980551ull}}, {{1966957988585843903ull, 1711676813877654750ull, 15770218000819149218ull, 4017345110647475688ull}}, {{15064406798148316151ull, 5681484027100922122ull, 9856386250511968261ull, 2510840694154672305ull}}, {{9607136460830619381ull, 11713541052303540557ull, 16932168831567348230ull, 3138550867693340381ull}}, {{16620606594465662130ull, 5418554278524649888ull, 7330152984177021576ull, 3923188584616675477ull}}, {{10387879121541038832ull, 3386596424077906180ull, 6887188624324332437ull, 2451992865385422173ull}}, {{12984848901926298539ull, 8844931548524770629ull, 13220671798832803450ull, 3064991081731777716ull}}, {{2396003072125709462ull, 1832792398801187479ull, 16525839748541004313ull, 3831238852164722145ull}}, {{8415030947719650270ull, 12674710295319211934ull, 3411120815197045839ull, 2394524282602951341ull}}, {{1295416647794787029ull, 11231701850721627014ull, 8875587037423695203ull, 2993155353253689176ull}}, {{10842642846598259595ull, 9427941294974645863ull, 11094483796779619004ull, 3741444191567111470ull}}, {{13694180806764994103ull, 15115835346213929472ull, 2322366354559873973ull, 2338402619729444669ull}}, {{17117726008456242628ull, 5059736127485248128ull, 7514643961627230371ull, 2923003274661805836ull}}, {{2950413436860751669ull, 1712984140929172257ull, 9393304952034037964ull, 3653754093327257295ull}}, {{8299702814503327491ull, 2141230176161465321ull, 7129945171615159551ull, 4567192616659071619ull}}, {{16716529305133049442ull, 8255797887741997681ull, 2150372723045780767ull, 2854495385411919762ull}}, {{7060603576134148090ull, 5708061341250109198ull, 11911337940662001767ull, 3568119231764899702ull}}, {{18049126507022460921ull, 2523390658135248593ull, 5665800388972726401ull, 4460149039706124628ull}}, {{4363175039247956220ull, 13106334207403000131ull, 12764497279962729808ull, 2787593149816327892ull}}, {{842282780632557370ull, 16382917759253750164ull, 15955621599953412260ull, 3484491437270409865ull}}, {{1052853475790696713ull, 2031903125357636089ull, 6109468944659601614ull, 4355614296588012332ull}}, {{12187248468437655206ull, 15104997508630686267ull, 13041790127267026816ull, 2722258935367507707ull}}, {{10622374567119681103ull, 434502812078806218ull, 11690551640656395617ull, 3402823669209384634ull}}, {{4054596172044825571ull, 5154814533525895677ull, 5389817513965718713ull, 4253529586511730793ull}}, {{4839965616741709934ull, 14750974129522154558ull, 14897850992297043955ull, 2658455991569831745ull}}, {{15273329057781913225ull, 13827031643475305293ull, 4787255685089141232ull, 3323069989462289682ull}}, {{5256603266945227819ull, 17283789554344131617ull, 15207441643216202348ull, 4153837486827862102ull}}, {{14814592087909237147ull, 1578996434610306452ull, 4892965008582738564ull, 2596148429267413814ull}}, {{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull, 3245185536584267267ull}}, {{9312742082076019330ull, 7078867947505991736ull, 14562786853551610862ull, 4056481920730334084ull}}, {{5820463801297512082ull, 18259350522473408547ull, 18325113820324532596ull, 2535301200456458802ull}}, {{2663893733194502198ull, 4377444079382209068ull, 13683020238550889938ull, 3169126500570573503ull}}, {{3329867166493127747ull, 14695177136082537143ull, 12492089279761224518ull, 3961408125713216879ull}}, {{8998696006699286698ull, 4572799691624197810ull, 14725084827491847180ull, 2475880078570760549ull}}, {{2024997971519332565ull, 5715999614530247263ull, 4571297979082645263ull, 3094850098213450687ull}}, {{16366305519681329418ull, 2533313499735421174ull, 1102436455425918675ull, 3868562622766813359ull}}, {{5617254931373442982ull, 17724222001830495898ull, 7606551812282281027ull, 2417851639229258349ull}}, {{16244940701071579536ull, 17543591483860731968ull, 14119875783780239188ull, 3022314549036572936ull}}, {{1859431802629922803ull, 3482745281116363345ull, 17649844729725298986ull, 3777893186295716170ull}}, {{12691359922712171512ull, 6788401819125114994ull, 15642838974505699770ull, 2361183241434822606ull}}, {{6640827866535438582ull, 17708874310761169551ull, 10330176681277348904ull, 2951479051793528258ull}}, {{3689348814741910324ull, 3689348814741910323ull, 3689348814741910323ull, 3689348814741910323ull}}, {{0ull, 0ull, 0ull, 4611686018427387904ull}}, {{0ull, 0ull, 0ull, 2882303761517117440ull}}, {{0ull, 0ull, 0ull, 3602879701896396800ull}}, {{0ull, 0ull, 0ull, 4503599627370496000ull}}, {{0ull, 0ull, 0ull, 2814749767106560000ull}}, {{0ull, 0ull, 0ull, 3518437208883200000ull}}, {{0ull, 0ull, 0ull, 4398046511104000000ull}}, {{0ull, 0ull, 0ull, 2748779069440000000ull}}, {{0ull, 0ull, 0ull, 3435973836800000000ull}}, {{0ull, 0ull, 0ull, 4294967296000000000ull}}, {{0ull, 0ull, 0ull, 2684354560000000000ull}}, {{0ull, 0ull, 0ull, 3355443200000000000ull}}, {{0ull, 0ull, 0ull, 4194304000000000000ull}}, {{0ull, 0ull, 0ull, 2621440000000000000ull}}, {{0ull, 0ull, 0ull, 3276800000000000000ull}}, {{0ull, 0ull, 0ull, 4096000000000000000ull}}, {{0ull, 0ull, 0ull, 2560000000000000000ull}}, {{0ull, 0ull, 0ull, 3200000000000000000ull}}, {{0ull, 0ull, 0ull, 4000000000000000000ull}}, {{0ull, 0ull, 0ull, 2500000000000000000ull}}, {{0ull, 0ull, 0ull, 3125000000000000000ull}}, {{0ull, 0ull, 0ull, 3906250000000000000ull}}, {{0ull, 0ull, 0ull, 2441406250000000000ull}}, {{0ull, 0ull, 0ull, 3051757812500000000ull}}, {{0ull, 0ull, 0ull, 3814697265625000000ull}}, {{0ull, 0ull, 0ull, 2384185791015625000ull}}, {{0ull, 0ull, 0ull, 2980232238769531250ull}}, {{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}}, {{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}}, {{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}}, {{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}}, {{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}}, {{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}}, {{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}}, {{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}}, {{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}}, {{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}}, {{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}}, {{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}}, {{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}}, {{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}}, {{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}}, {{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}}, {{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}}, {{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}}, {{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}}, {{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}}, {{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}}, {{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}}, {{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}}, {{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}}, {{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}}, {{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}}, {{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}}, {{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}}, {{0ull, 4611686018427387904ull, 9222577334724359131ull, 3761581922631320025ull}}, {{0ull, 576460752303423488ull, 17293325880271194217ull, 2350988701644575015ull}}, {{0ull, 5332261958806667264ull, 17004971331911604867ull, 2938735877055718769ull}}, {{0ull, 2053641430080946176ull, 7421156109607342372ull, 3673419846319648462ull}}, {{0ull, 2567051787601182720ull, 53073100154402157ull, 4591774807899560578ull}}, {{0ull, 3910250376464433152ull, 4644856706023889252ull, 2869859254937225361ull}}, {{0ull, 4887812970580541440ull, 10417756900957249469ull, 3587324068671531701ull}}, {{0ull, 10721452231653064704ull, 17633882144623949740ull, 4484155085839414626ull}}, {{0ull, 15924279681637941248ull, 15632862358817356491ull, 2802596928649634141ull}}, {{0ull, 15293663583620038656ull, 5706019893239531902ull, 3503246160812042677ull}}, {{0ull, 9893707442670272512ull, 11744210884976802782ull, 4379057701015053346ull}}, {{0ull, 1571881133241532416ull, 11951817821537889643ull, 2736911063134408341ull}}, {{0ull, 15799909471834079232ull, 1104714221640198341ull, 3421138828918010427ull}}, {{0ull, 5914828784510435328ull, 15215950832332411639ull, 4276423536147513033ull}}, {{0ull, 10614297017960103936ull, 2592440242566675418ull, 2672764710092195646ull}}, {{0ull, 4044499235595354112ull, 12463922340063120081ull, 3340955887615244557ull}}, {{0ull, 9667310062921580544ull, 1744844869796736389ull, 4176194859519055697ull}}, {{0ull, 8347911798539681792ull, 12619743089691430003ull, 2610121787199409810ull}}, {{0ull, 5823203729747214336ull, 6551306825259511696ull, 3262652233999262263ull}}, {{0ull, 7279004662184017920ull, 3577447513147001716ull, 4078315292499077829ull}}, {{0ull, 13772749950719787008ull, 4541747704930570024ull, 2548947057811923643ull}}, {{0ull, 17215937438399733760ull, 1065498612735824626ull, 3186183822264904554ull}}, {{0ull, 12296549761144891392ull, 10555245302774556591ull, 3982729777831130692ull}}, {{0ull, 14602872628356638976ull, 15820400351088873677ull, 2489206111144456682ull}}, {{0ull, 4418532730163635008ull, 10552128402006316289ull, 3111507638930570853ull}}, {{0ull, 10134851931131931664ull, 17801846520935283265ull, 3889384548663213566ull}}, {{0ull, 17863497503025927050ull, 6514468057157164136ull, 2430865342914508479ull}}, {{9223372036854775808ull, 3882627805072857196ull, 3531399053019067267ull, 3038581678643135599ull}}, {{11529215046068469760ull, 241598737913683591ull, 18249306871555997796ull, 3798227098303919498ull}}, {{14123288431433875456ull, 9374371248050828052ull, 16017502813149886526ull, 2373891936439949686ull}}, {{17654110539292344320ull, 2494592023208759257ull, 10798506479582582350ull, 2967364920549937108ull}}, {{8232580118833266688ull, 12341612065865724880ull, 13498133099478227937ull, 3709206150687421385ull}}, {{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull, 2318253844179638366ull}}, {{15655075254693265408ull, 5606659160333633146ull, 11121877236270789064ull, 2897817305224547957ull}}, {{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull, 3622271631530684947ull}}, {{17543526057817145344ull, 17983776974876077599ull, 13919168667852566984ull, 4527839539413356183ull}}, {{17882232813776797696ull, 11239860609297548499ull, 15617009445048936221ull, 2829899712133347614ull}}, {{17741104998793609216ull, 214767706339771912ull, 10297889769456394469ull, 3537374640166684518ull}}, {{3729637174782459904ull, 4880145651352102795ull, 3648990174965717278ull, 4421718300208355648ull}}, {{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull, 2763573937630222280ull}}, {{13866533336563843072ull, 11883064322366759140ull, 2850773574191966623ull, 3454467422037777850ull}}, {{17333166670704803840ull, 10242144384531061021ull, 12786839004594734087ull, 4318084277547222312ull}}, {{13139072178404196352ull, 13318869267972994994ull, 7991774377871708804ull, 2698802673467013945ull}}, {{7200468186150469632ull, 16648586584966243743ull, 14601403990767023909ull, 3373503341833767431ull}}, {{4388899214260699136ull, 6975675175925640967ull, 13640068970031391983ull, 4216879177292209289ull}}, {{9660591036554018816ull, 11277326012594607460ull, 1607514078628538133ull, 2635549485807630806ull}}, {{12075738795692523520ull, 261599460461095613ull, 11232764635140448475ull, 3294436857259538507ull}}, {{1259615439333490688ull, 14162057380858533229ull, 9429269775498172689ull, 4118046071574423134ull}}, {{3093102658797125632ull, 1933756835395501412ull, 1281607591258970027ull, 2573778794734014459ull}}, {{3866378323496407040ull, 16252254099526540477ull, 15437067544355876245ull, 3217223493417518073ull}}, {{9444658922797896704ull, 6480259569126011884ull, 5461276375162681595ull, 4021529366771897592ull}}, {{15126283863603461248ull, 1744319221490063475ull, 3413297734476675997ull, 2513455854232435995ull}}, {{14296168811076938656ull, 6792085045289967248ull, 18101680223378008708ull, 3141819817790544993ull}}, {{17870211013846173320ull, 8490106306612459060ull, 8792042223940347173ull, 3927274772238181242ull}}, {{1945509846799082517ull, 7612159450846480865ull, 10106712408390104887ull, 2454546732648863276ull}}, {{7043573326926241051ull, 4903513295130713177ull, 12633390510487631109ull, 3068183415811079095ull}}, {{13416152677085189217ull, 10741077637340779375ull, 11180052119682150982ull, 3835229269763848869ull}}, {{15302624450819325117ull, 2101487504910599205ull, 9293375584015038316ull, 2397018293602405543ull}}, {{5293222508241992684ull, 2626859381138249007ull, 7005033461591409991ull, 2996272867003006929ull}}, {{2004842116875102951ull, 17118632281704974971ull, 13367977845416650392ull, 3745341083753758661ull}}, {{17393927387542797009ull, 10699145176065609356ull, 10660829162599100447ull, 2340838177346099163ull}}, {{3295665160718944645ull, 8762245451654623792ull, 8714350434821487655ull, 2926047721682623954ull}}, {{4119581450898680806ull, 6341120796140891836ull, 1669566006672083761ull, 3657559652103279943ull}}, {{5149476813623351007ull, 12538087013603502699ull, 15922015563622268413ull, 4571949565129099928ull}}, {{912579999300900428ull, 10142147392715883139ull, 9951259727263917758ull, 2857468478205687455ull}}, {{14975783054408289246ull, 3454312204040078115ull, 7827388640652509294ull, 3571835597757109319ull}}, {{14108042799582973654ull, 13541262291904873452ull, 5172549782388248713ull, 4464794497196386649ull}}, {{18040898786594134342ull, 1545759904799464051ull, 14762058660061125206ull, 2790496560747741655ull}}, {{17939437464815280023ull, 11155571917854105872ull, 13840887306649018603ull, 3488120700934677069ull}}, {{3977552757309548413ull, 9332778878890244437ull, 3466051078029109542ull, 4360150876168346337ull}}, {{4791813482532161710ull, 1221300780879014869ull, 13695496969836663224ull, 2725094297605216460ull}}, {{10601452871592590042ull, 1526625976098768586ull, 17119371212295829030ull, 3406367872006520575ull}}, {{4028444052635961744ull, 11131654506978236541ull, 16787527996942398383ull, 4257959840008150719ull}}, {{4823620542111170042ull, 13874813094502479694ull, 17409734025730080845ull, 2661224900005094199ull}}, {{15252897714493738360ull, 3508458312845935905ull, 17150481513735213153ull, 3326531125006367749ull}}, {{5231064087835009238ull, 8997258909484807786ull, 7603043836886852729ull, 4158163906257959687ull}}, {{7881101073324268678ull, 17152501864496474626ull, 11669431425695364811ull, 2598852441411224804ull}}, {{628004304800560040ull, 16828941312193205379ull, 14586789282119206014ull, 3248565551764031005ull}}, {{14620063436282863761ull, 11812804603386730915ull, 4398428547366843806ull, 4060706939705038757ull}}, {{6831696638463095899ull, 2771316858689318918ull, 5054860851317971331ull, 2537941837315649223ull}}, {{17762992834933645682ull, 17299204128643812359ull, 1706890045720076259ull, 3172427296644561529ull}}, {{17592055025239669198ull, 17012319142377377545ull, 6745298575577483228ull, 3965534120805701911ull}}, {{4077505363133711393ull, 1409327427131085158ull, 11133340637377008874ull, 2478458825503563694ull}}, {{14320253740771915049ull, 10985031320768632255ull, 4693303759866485284ull, 3098073531879454618ull}}, {{13288631157537505907ull, 13731289150960790319ull, 15090001736687882413ull, 3872591914849318272ull}}, {{15222923501102023048ull, 10887898728564187901ull, 9431251085429926508ull, 2420369946780823920ull}}, {{5193596321095365098ull, 13609873410705234877ull, 11789063856787408135ull, 3025462433476029900ull}}, {{11103681419796594277ull, 12400655744954155692ull, 14736329820984260169ull, 3781828041845037375ull}}, {{16163172924227647231ull, 832880812955265451ull, 16127735165756244462ull, 2363642526153148359ull}}, {{15592280136857171135ull, 10264473053048857622ull, 15547982938767917673ull, 2954553157691435449ull}}, {{10266978134216688110ull, 17442277334738459932ull, 5599920618177733379ull, 3693191447114294312ull}}, {{15640233370740205877ull, 8595580324997843505ull, 3499950386361083362ull, 2308244654446433945ull}}, {{5715233658143093634ull, 1521103369392528574ull, 8986624001378742107ull, 2885305818058042431ull}}, {{16367414109533642851ull, 15736437267022824429ull, 6621593983296039729ull, 3606632272572553039ull}}, {{6624209581634889851ull, 5835488528496366825ull, 3665306460692661758ull, 4508290340715691299ull}}, {{15669346034590275917ull, 17482238385592392977ull, 18431717602428771262ull, 2817681462947307061ull}}, {{5751624487955681184ull, 12629425945135715414ull, 9204588947753800366ull, 3522101828684133827ull}}, {{16412902646799377288ull, 6563410394564868459ull, 6894050166264862554ull, 4402627285855167284ull}}, {{7952221145035916853ull, 8713817515030430691ull, 13532153390770314904ull, 2751642053659479552ull}}, {{5328590412867508163ull, 10892271893788038364ull, 16915191738462893630ull, 3439552567074349440ull}}, {{6660738016084385203ull, 4391967830380272147ull, 2697245599369065422ull, 4299440708842936801ull}}, {{1857118250839046800ull, 16580037949269833804ull, 13214993545674135648ull, 2687150443026835500ull}}, {{2321397813548808500ull, 2278303362877740639ull, 16518741932092669561ull, 3358938053783544375ull}}, {{16736805322218174337ull, 7459565222024563702ull, 16036741396688449047ull, 4198672567229430469ull}}, {{5848817307958971057ull, 11579757291406434170ull, 12328806382143974606ull, 2624170354518394043ull}}, {{16534393671803489629ull, 5251324577403266904ull, 10799321959252580354ull, 3280212943147992554ull}}, {{2221248016044810420ull, 15787527758608859439ull, 4275780412210949634ull, 4100266178934990693ull}}, {{8305809037669088369ull, 14478890867557925053ull, 4978205766845537473ull, 2562666361834369183ull}}, {{14993947315513748365ull, 4263555529165242604ull, 1611071190129533938ull, 3203332952292961479ull}}, {{295690070682633840ull, 14552816448311329064ull, 15848897042944081134ull, 4004166190366201848ull}}, {{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull, 2502603868978876155ull}}, {{4842693886148195591ull, 10216466345636378855ull, 7770264796372675482ull, 3128254836223595194ull}}, {{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull, 3910318545279493993ull}}, {{12430265883104630126ull, 13746221855562655860ull, 11835126895200387600ull, 2443949090799683745ull}}, {{15537832353880787657ull, 17182777319453319825ull, 958850563718320788ull, 3054936363499604682ull}}, {{5587232387068820859ull, 3031727575607098166ull, 10421935241502676794ull, 3818670454374505852ull}}, {{17327078297200176749ull, 6506515753181824257ull, 15737081562793948804ull, 2386669033984066157ull}}, {{7823789816218057224ull, 8133144691477280322ull, 5836293898210272293ull, 2983336292480082697ull}}, {{556365233417795722ull, 14778116882773988307ull, 11907053391190228270ull, 3729170365600103371ull}}, {{16488629335381979991ull, 4624637033306354787ull, 5136065360280198717ull, 2330731478500064607ull}}, {{15999100650800087084ull, 10392482310060331388ull, 1808395681922860492ull, 2913414348125080759ull}}, {{1552131739790557239ull, 12990602887575414236ull, 16095552657685739327ull, 3641767935156350948ull}}, {{1940164674738196549ull, 11626567591041879891ull, 1672696748397622543ull, 4552209918945438686ull}}, {{17353503986207230507ull, 14184133772042256787ull, 14880493523030677801ull, 2845131199340899178ull}}, {{17080193964331650230ull, 3895109159770657272ull, 9377244866933571444ull, 3556413999176123973ull}}, {{2903498381705011171ull, 4868886449713321591ull, 16333242102094352209ull, 4445517498970154966ull}}, {{8732215516206713838ull, 14572269077139295754ull, 5596590295381582226ull, 2778448436856346854ull}}, {{1691897358403616490ull, 8991964309569343885ull, 16219109906081753591ull, 3473060546070433567ull}}, {{6726557716431908516ull, 6628269368534291952ull, 15662201364174804085ull, 4341325682588041959ull}}, {{4204098572769942823ull, 6448511364547626422ull, 16706404880250334409ull, 2713328551617526224ull}}, {{14478495252817204336ull, 12672325224111920931ull, 2436262026603366395ull, 3391660689521907781ull}}, {{13486433047594117516ull, 11228720511712513260ull, 7657013551681595898ull, 4239575861902384726ull}}, {{17652392691601099256ull, 11629636338247708691ull, 173947451373609532ull, 2649734913688990454ull}}, {{17453804846073986166ull, 14537045422809635864ull, 9440806351071787723ull, 3312168642111238067ull}}, {{3370511983882931091ull, 13559620760084656927ull, 7189321920412346750ull, 4140210802639047584ull}}, {{9024099017567913788ull, 3863076956625522675ull, 4493326200257716719ull, 2587631751649404740ull}}, {{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull, 3234539689561755925ull}}, {{8335547191915630413ull, 14106508276975308012ull, 11632508206330070277ull, 4043174611952194906ull}}, {{14433089031802044817ull, 11122410682323261459ull, 11882003647383681827ull, 2526984132470121816ull}}, {{13429675271325168117ull, 9291327334476688920ull, 14852504559229602284ull, 3158730165587652270ull}}, {{16787094089156460146ull, 11614159168095861150ull, 9342258662182227047ull, 3948412706984565338ull}}, {{5880247787295399687ull, 14176378507700995075ull, 10450597682291279808ull, 2467757941865353336ull}}, {{2738623715691861705ull, 17720473134626243844ull, 13063247102864099760ull, 3084697427331691670ull}}, {{3423279644614827131ull, 3703847344573253189ull, 7105686841725348893ull, 3855871784164614588ull}}, {{4445392787097960909ull, 4620747599571977195ull, 13664426312933118866ull, 2409919865102884117ull}}, {{945054965445063232ull, 14999306536319747302ull, 3245474835884234870ull, 3012399831378605147ull}}, {{10404690743661104848ull, 9525761133544908319ull, 17891901600137457300ull, 3765499789223256433ull}}, {{13420460742429272386ull, 15176972745320343507ull, 4264909472444828956ull, 2353437368264535271ull}}, {{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull, 2941796710330669089ull}}, {{15204862387011503223ull, 655589822426097210ull, 5510999546088198269ull, 3677245887913336361ull}}, {{9782705946909603221ull, 5431173296460009417ull, 11500435451037635740ull, 4596557359891670451ull}}, {{17643406262886971773ull, 12617855347142281693ull, 4881929147684828385ull, 2872848349932294032ull}}, {{8219199773326551005ull, 1937261128645688405ull, 6102411434606035482ull, 3591060437415367540ull}}, {{14885685735085576660ull, 11644948447661886314ull, 7628014293257544352ull, 4488825546769209425ull}}, {{13915239602855873316ull, 7278092779788678946ull, 16296723979354434980ull, 2805515966730755890ull}}, {{8170677466715065837ull, 9097615974735848683ull, 11147532937338267917ull, 3506894958413444863ull}}, {{5601660814966444393ull, 15983705986847198758ull, 9322730153245446992ull, 4383618698016806079ull}}, {{17336096064636191458ull, 9989816241779499223ull, 12744235373419486226ull, 2739761686260503799ull}}, {{17058434062367851418ull, 3263898265369598221ull, 11318608198346969879ull, 3424702107825629749ull}}, {{7487984522677650560ull, 17914930886994161489ull, 313202192651548636ull, 4280877634782037187ull}}, {{16209205372742001360ull, 1973459767516575122ull, 16336652434903075562ull, 2675548521738773241ull}}, {{11038134679072725892ull, 11690196746250494711ull, 6585757488346680740ull, 3344435652173466552ull}}, {{9185982330413519461ull, 14612745932813118389ull, 8232196860433350925ull, 4180544565216833190ull}}, {{8047081965722143615ull, 11438809217221892945ull, 533437019343456424ull, 2612840353260520744ull}}, {{14670538475580067423ull, 14298511521527366181ull, 666796274179320530ull, 3266050441575650930ull}}, {{4503115039192920567ull, 8649767365054431919ull, 10056867379578926471ull, 4082563051969563662ull}}, {{9731975927136657210ull, 12323633630800101805ull, 1673856093809441140ull, 2551601907480977289ull}}, {{16776655927348209417ull, 15404542038500127256ull, 6704006135689189329ull, 3189502384351221611ull}}, {{2524075835475710155ull, 5420619492842995359ull, 3768321651184098758ull, 3986877980439027014ull}}, {{8495076424813400703ull, 17222945238309035811ull, 16190259087272225435ull, 2491798737774391883ull}}, {{6007159512589362975ull, 16916995529458906860ull, 15626137840662893890ull, 3114748422217989854ull}}, {{7508949390736703718ull, 11922872374968857767ull, 10309300263973841555ull, 3893435527772487318ull}}, {{11610622396851521680ull, 5145952225141842152ull, 1831626646556263068ull, 2433397204857804574ull}}, {{14513277996064402100ull, 6432440281427302690ull, 11512905345050104643ull, 3041746506072255717ull}}, {{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull, 3802183132590319647ull}}, {{3268047902177385309ull, 11366412245202738595ull, 7265075043910123788ull, 2376364457868949779ull}}, {{17920117933003895348ull, 14208015306503423243ull, 4469657786460266831ull, 2970455572336187224ull}}, {{17788461397827481281ull, 13148333114701891150ull, 5587072233075333539ull, 3713069465420234030ull}}, {{6506102355214787897ull, 5911865187474988017ull, 17326978200954247174ull, 2320668415887646268ull}}, {{12744313962445872775ull, 16613203521198510829ull, 3211978677483257351ull, 2900835519859557836ull}}, {{2095334397775177256ull, 16154818383070750633ull, 4014973346854071689ull, 3626044399824447295ull}}, {{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull, 4532555499780559119ull}}, {{2213440750565280719ull, 13197412614077447420ull, 7171923193353707923ull, 2832847187362849449ull}}, {{2766800938206600899ull, 11885079749169421371ull, 13576590010119522808ull, 3541058984203561811ull}}, {{17293559228040414836ull, 14856349686461776713ull, 12359051494222015606ull, 4426323730254452264ull}}, {{3890945489884177417ull, 4673532535611222542ull, 7724407183888759754ull, 2766452331409032665ull}}, {{14087053899209997579ull, 15065287706368803985ull, 14267194998288337596ull, 3458065414261290831ull}}, {{3773759318730333261ull, 384865559251453366ull, 13222307729433034092ull, 4322581767826613539ull}}, {{16193657629488622000ull, 9463913011386934161ull, 5958099321681952355ull, 2701613604891633462ull}}, {{6407013981578613788ull, 7218205245806279798ull, 16670996188957216252ull, 3377017006114541827ull}}, {{17232139513828043043ull, 9022756557257849747ull, 16227059217769132411ull, 4221271257643177284ull}}, {{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull, 2638294536026985803ull}}, {{10580305233661041188ull, 8778410817267965579ull, 14983233023095828648ull, 3297868170033732253ull}}, {{8613695523648913581ull, 10973013521584956974ull, 4893983223587622098ull, 4122335212542165317ull}}, {{771873683853183084ull, 11469819469417986013ull, 5364582523955957763ull, 2576459507838853323ull}}, {{5576528123243866759ull, 9725588318345094612ull, 2094042136517559300ull, 3220574384798566654ull}}, {{6970660154054833449ull, 12156985397931368265ull, 11840924707501724933ull, 4025717980998208317ull}}, {{15885877642352740666ull, 9903958882920799117ull, 9706420951402272035ull, 2516073738123880198ull}}, {{6022288997658762120ull, 7768262585223610993ull, 2909654152398064236ull, 3145092172654850248ull}}, {{12139547265500840554ull, 9710328231529513741ull, 3637067690497580295ull, 3931365215818562810ull}}, {{9893060050151719298ull, 12986484172347027944ull, 6884853324988375588ull, 2457103259886601756ull}}, {{12366325062689649123ull, 16233105215433784930ull, 8606066656235469485ull, 3071379074858252195ull}}, {{6234534291507285595ull, 6456323464010067451ull, 6145897301866948953ull, 3839223843572815244ull}}, {{1590740922978359545ull, 15564417211074761917ull, 13064557850521618903ull, 2399514902233009527ull}}, {{6600112172150337335ull, 14843835495416064492ull, 11719011294724635725ull, 2999393627791261909ull}}, {{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull, 3749242034739077387ull}}, {{12073866662133532899ull, 14479050242310917824ull, 16649467353948127004ull, 2343276271711923366ull}}, {{15092333327666916124ull, 18098812802888647280ull, 11588462155580382947ull, 2929095339639904208ull}}, {{418672585874093539ull, 18011829985183421197ull, 14485577694475478684ull, 3661369174549880260ull}}, {{5135026750770004827ull, 4068043407769724880ull, 18106972118094348356ull, 4576711468187350325ull}}, {{3209391719231253017ull, 11765899166710853858ull, 13622700583022661674ull, 2860444667617093953ull}}, {{13235111685893842080ull, 5484001921533791514ull, 3193317673496163381ull, 3575555834521367442ull}}, {{7320517570512526791ull, 11466688420344627297ull, 13215019128724980034ull, 4469444793151709302ull}}, {{16104538527638799005ull, 11778366281142779964ull, 3647700937025724617ull, 2793402995719818314ull}}, {{1683929085838947140ull, 887899796146311244ull, 13782998208136931580ull, 3491753744649772892ull}}, {{2104911357298683925ull, 1109874745182889055ull, 17228747760171164475ull, 4364692180812216115ull}}, {{8233098625952759309ull, 16834572780235163323ull, 8462124340893283844ull, 2727932613007635072ull}}, {{5679687264013561232ull, 2596471901584402538ull, 10577655426116604806ull, 3409915766259543840ull}}, {{16322981116871727348ull, 12468961913835278980ull, 13222069282645756007ull, 4262394707824429800ull}}, {{978491161190053785ull, 14710630223788131219ull, 8263793301653597504ull, 2663996692390268625ull}}, {{15058172006769730943ull, 18388287779735164023ull, 14941427645494384784ull, 3329995865487835781ull}}, {{14211028990034775774ull, 4538615650959403413ull, 4841726501585817269ull, 4162494831859794727ull}}, {{11187736127985428811ull, 5142477791063321085ull, 9943608091132217649ull, 2601559269912371704ull}}, {{149612104699622302ull, 11039783257256539261ull, 12429510113915272061ull, 3251949087390464630ull}}, {{4798701149301915781ull, 18411415089998061980ull, 6313515605539314268ull, 4064936359238080788ull}}, {{12222560255168473171ull, 2283762394394012929ull, 13169319290316847226ull, 2540585224523800492ull}}, {{1443142263678427752ull, 12078075029847291970ull, 16461649112896059032ull, 3175731530654750615ull}}, {{11027299866452810498ull, 15097593787309114962ull, 15965375372692685886ull, 3969664413318438269ull}}, {{11503748434960394466ull, 4824310098640808947ull, 12284202617146622631ull, 2481040258324023918ull}}, {{9767999525273105178ull, 1418701604873623280ull, 6131881234578502481ull, 3101300322905029898ull}}, {{12209999406591381472ull, 6385063024519417004ull, 16888223580077903909ull, 3876625403631287372ull}}, {{16854621665974389228ull, 6296507399538329579ull, 1331767700693914135ull, 2422890877269554608ull}}, {{16456591064040598631ull, 3258948230995524070ull, 1664709625867392669ull, 3028613596586943260ull}}, {{11347366793195972481ull, 8685371307171792992ull, 2080887032334240836ull, 3785766995733679075ull}}, {{7092104245747482801ull, 14651729103837146428ull, 17441455459704758186ull, 2366104372333549421ull}}, {{8865130307184353501ull, 9091289342941657227ull, 7966761269348784021ull, 2957630465416936777ull}}, {{6469726865553053972ull, 15975797697104459438ull, 14570137605113367930ull, 3697038081771170971ull}}, {{17878637346252822445ull, 14596559579117675052ull, 6800492993982161004ull, 2310648801106981857ull}}, {{3901552609106476440ull, 18245699473897093816ull, 13112302260905089159ull, 2888311001383727321ull}}, {{4876940761383095549ull, 18195438323943979366ull, 2555319770849197737ull, 3610388751729659152ull}}, {{15319547988583645245ull, 8909239849647810495ull, 3194149713561497172ull, 4512985939662073940ull}}, {{16492246520505860134ull, 14791646942884657367ull, 11219715607830711540ull, 2820616212288796212ull}}, {{16003622132204937264ull, 42814604896270093ull, 14024644509788389426ull, 3525770265360995265ull}}, {{6169469609974007867ull, 9276890292975113425ull, 3695747581953323070ull, 4407212831701244082ull}}, {{15385133552302224677ull, 1186370414682057986ull, 6921528257148214823ull, 2754508019813277551ull}}, {{10008044903523005038ull, 15318021073634736195ull, 4040224303007880624ull, 3443135024766596939ull}}, {{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull, 4303918780958246174ull}}, {{14159853356215006054ull, 2743831926922361844ull, 14109179530489953010ull, 2689949238098903858ull}}, {{17699816695268757568ull, 12653161945507728113ull, 8413102376257665454ull, 3362436547623629823ull}}, {{8289712813803783248ull, 6593080395029884334ull, 5904691951894693914ull, 4203045684529537279ull}}, {{569384490199976626ull, 8732361265321065613ull, 10607961497575265552ull, 2626903552830960799ull}}, {{5323416631177358686ull, 10915451581651332016ull, 8648265853541694036ull, 3283629441038700999ull}}, {{6654270788971698358ull, 13644314477064165020ull, 6198646298499729641ull, 4104536801298376249ull}}, {{13382291279962087282ull, 1610167520524021281ull, 15403368982630800786ull, 2565335500811485155ull}}, {{2892806044670445390ull, 11236081437509802410ull, 14642525209861113078ull, 3206669376014356444ull}}, {{12839379592692832546ull, 4821729760032477204ull, 18303156512326391348ull, 4008336720017945555ull}}, {{17247984282287796149ull, 12236953136875074060ull, 9133629810990300640ull, 2505210450011215972ull}}, {{3113236279150193570ull, 15296191421093842576ull, 11417037263737875800ull, 3131513062514019965ull}}, {{3891545348937741963ull, 673495202657751604ull, 436238524390181039ull, 3914391328142524957ull}}, {{11655587879940864535ull, 7338463529302176608ull, 2578492086957557101ull, 2446494580089078098ull}}, {{14569484849926080669ull, 13784765430055108664ull, 12446487145551722184ull, 3058118225111347622ull}}, {{18211856062407600836ull, 17230956787568885830ull, 6334736895084876922ull, 3822647781389184528ull}}, {{6770724020577362618ull, 15381034010657941548ull, 3959210559428048076ull, 2389154863368240330ull}}, {{8463405025721703273ull, 779548439612875319ull, 14172385236139835904ull, 2986443579210300412ull}}, {{5967570263724741187ull, 974435549516094149ull, 17715481545174794880ull, 3733054474012875515ull}}, {{6035574424041657194ull, 609022218447558843ull, 8766332956520552848ull, 2333159046258047197ull}}, {{2932782011624683588ull, 761277773059448554ull, 15569602214078078964ull, 2916448807822558996ull}}, {{12889349551385630293ull, 951597216324310692ull, 1015258693888047089ull, 3645561009778198746ull}}, {{16111686939232037867ull, 5801182538832776269ull, 10492445404214834669ull, 4556951262222748432ull}}, {{12375647346233717619ull, 5931582095984179120ull, 6557778377634271668ull, 2848094538889217770ull}}, {{15469559182792147023ull, 7414477619980223900ull, 17420595008897615393ull, 3560118173611522212ull}}, {{890204904780632163ull, 13879783043402667780ull, 3328999687412467625ull, 4450147717014402766ull}}, {{9779750102342670910ull, 1757335374485585506ull, 15915682859914955978ull, 2781342323134001728ull}}, {{3001315591073562830ull, 11420041254961757691ull, 1447859501184143356ull, 3476677903917502161ull}}, {{17586702544124117249ull, 14275051568702197113ull, 6421510394907567099ull, 4345847379896877701ull}}, {{4074160062436491425ull, 6616064221225179244ull, 6319287006030923389ull, 2716154612435548563ull}}, {{5092700078045614281ull, 12881766294958861959ull, 3287422739111266332ull, 3395193265544435704ull}}, {{1754189079129629947ull, 16102207868698577449ull, 4109278423889082915ull, 4243991581930544630ull}}, {{12625583220524488477ull, 7758036908722916953ull, 16403357070212840534ull, 2652494738706590393ull}}, {{1946920970373446884ull, 474174099048870384ull, 6669138282483886956ull, 3315618423383237992ull}}, {{2433651212966808605ull, 592717623811087980ull, 8336422853104858695ull, 4144523029229047490ull}}, {{10744404044959031186ull, 7287977542523011843ull, 9821950301617924588ull, 2590326893268154681ull}}, {{8818819037771401079ull, 9109971928153764804ull, 16889123895449793639ull, 3237908616585193351ull}}, {{11023523797214251348ull, 6775778891764818101ull, 16499718850884854145ull, 4047385770731491689ull}}, {{9195545382472601045ull, 15764076853421481073ull, 3394795254161951984ull, 2529616106707182306ull}}, {{16106117746518139210ull, 1258351993067299725ull, 13466866104557215789ull, 3162020133383977882ull}}, {{6297589127865510300ull, 6184626009761512561ull, 7610210593841743928ull, 3952525166729972353ull}}, {{15465208250984413698ull, 3865391256100945350ull, 16285596667219559715ull, 2470328229206232720ull}}, {{10108138276875741314ull, 220053051698793784ull, 1910251760314898028ull, 3087910286507790901ull}}, {{12635172846094676643ull, 275066314623492230ull, 6999500718821010439ull, 3859887858134738626ull}}, {{3285297010381784998ull, 7089445474280764500ull, 8986373967690519428ull, 2412429911334211641ull}}, {{4106621262977231247ull, 8861806842850955625ull, 15844653478040537189ull, 3015537389167764551ull}}, {{9744962597148926963ull, 15688944571991082435ull, 15194130829123283582ull, 3769421736459705689ull}}, {{3784758614004385400ull, 5193904339067038618ull, 2578802740560970383ull, 2355888585287316056ull}}, {{13954320304360257558ull, 1880694405406410368ull, 3223503425701212979ull, 2944860731609145070ull}}, {{17442900380450321947ull, 16185926062040176672ull, 13252751318981292031ull, 3681075914511431337ull}}, {{3356881401853350818ull, 15620721559122832937ull, 2730881093444451327ull, 4601344893139289172ull}}, {{13627265922226814021ull, 16680480002092852441ull, 10930172720257557887ull, 2875840558212055732ull}}, {{3199024347501353815ull, 16238913984188677648ull, 13662715900321947359ull, 3594800697765069665ull}}, {{3998780434376692268ull, 15686956461808459156ull, 3243336820120270487ull, 4493500872206337082ull}}, {{11722609808340208476ull, 16721876816271368828ull, 6638771531002556958ull, 2808438045128960676ull}}, {{14653262260425260595ull, 11678973983484435227ull, 8298464413753196198ull, 3510547556411200845ull}}, {{13704891807104187839ull, 5375345442500768226ull, 14984766535618883152ull, 4388184445514001056ull}}, {{13177243397867505304ull, 3359590901562980141ull, 9365479084761801970ull, 2742615278446250660ull}}, {{2636496192052217917ull, 13422860663808500985ull, 11706848855952252462ull, 3428269098057813325ull}}, {{7907306258492660301ull, 7555203792905850423ull, 798503014658151866ull, 4285336372572266657ull}}, {{11859595439198994544ull, 9333688388993544418ull, 12028279430229814676ull, 2678335232857666660ull}}, {{5601122262143967372ull, 11667110486241930523ull, 15035349287787268345ull, 3347919041072083325ull}}, {{2389716809252571311ull, 748830052520249442ull, 4959128554451921720ull, 4184898801340104157ull}}, {{6105259024210244973ull, 468018782825155901ull, 5405298355746145027ull, 2615561750837565098ull}}, {{12243259798690194121ull, 14420081533813608588ull, 15979994981537457091ull, 3269452188546956372ull}}, {{15304074748362742651ull, 13413415898839622831ull, 1528249653212269748ull, 4086815235683695466ull}}, {{16482575745367796013ull, 17606756973629540077ull, 5566842051685056496ull, 2554259522302309666ull}}, {{6768161626427581304ull, 3561702143327373481ull, 16181924601461096429ull, 3192824402877887082ull}}, {{13071888051461864534ull, 9063813697586604755ull, 11004033714971594728ull, 3991030503597358853ull}}, {{5864087022949971382ull, 5664883560991627972ull, 9183364081070940657ull, 2494394064748349283ull}}, {{7330108778687464227ull, 11692790469666922869ull, 6867519082911287917ull, 3117992580935436604ull}}, {{13774321991786718188ull, 780930031801489874ull, 8584398853639109897ull, 3897490726169295755ull}}, {{13220637263294086772ull, 12017296315944400931ull, 3059406274310749733ull, 2435931703855809847ull}}, {{11914110560690220560ull, 1186562339648337452ull, 17659315898170600879ull, 3044914629819762308ull}}, {{14892638200862775700ull, 15318260979842585527ull, 3627400799003699482ull, 3806143287274702886ull}}, {{16225427903180316669ull, 14185599130829003858ull, 16102183554659475888ull, 2378839554546689303ull}}, {{11058412842120620028ull, 17731998913536254823ull, 15516043424896956956ull, 2973549443183361629ull}}, {{9211330034223387131ull, 3718254568210766913ull, 5559996225839032484ull, 3716936803979202037ull}}, {{17286296317458086717ull, 11547281141986505128ull, 5780840650363089254ull, 2323085502487001273ull}}, {{3161126323113056780ull, 5210729390628355603ull, 11837736831381249472ull, 2903856878108751591ull}}, {{17786465959173484687ull, 6513411738285444503ull, 10185485020799173936ull, 3629821097635939489ull}}, {{17621396430539467955ull, 8141764672856805629ull, 17343542294426355324ull, 4537276372044924361ull}}, {{13319215778300861424ull, 14311974957390279326ull, 3922184906375390221ull, 2835797732528077726ull}}, {{7425647686021300972ull, 4054910641455685446ull, 14126103169824013585ull, 3544747165660097157ull}}, {{58687570671850406ull, 9680324320246994712ull, 3822570906997853269ull, 4430933957075121447ull}}, {{36679731669906504ull, 8356045709368065647ull, 9306635844514740149ull, 2769333723171950904ull}}, {{13880907719869546842ull, 15056743155137469962ull, 11633294805643425186ull, 3461667153964938630ull}}, {{8127762612982157745ull, 9597556907067061645ull, 5318246470199505675ull, 4327083942456173288ull}}, {{7385694642327542543ull, 3692630057703219576ull, 3323904043874691047ull, 2704427464035108305ull}}, {{9232118302909428178ull, 4101553701636566ull, 8766566073270751713ull, 3380534330043885381ull}}, {{2316775841782009414ull, 4616812960554433612ull, 15569893610015827545ull, 4225667912554856726ull}}, {{10671356937968531692ull, 14414723146414990767ull, 5119497487832504311ull, 2641042445346785454ull}}, {{8727510154033276711ull, 13406717914591350555ull, 15622743896645406197ull, 3301303056683481817ull}}, {{6297701674114207985ull, 2923339337957024482ull, 5693371815524594035ull, 4126628820854352272ull}}, {{8547749564748767895ull, 17967988150718997965ull, 3558357384702871271ull, 2579143013033970170ull}}, {{15296372974363347772ull, 17848299169971359552ull, 13671318767733364897ull, 3223928766292462712ull}}, {{673722144244633099ull, 8475315907182035729ull, 17089148459666706122ull, 4029910957865578390ull}}, {{11950291386221365447ull, 9908758460416160234ull, 6069031768864303422ull, 2518694348665986494ull}}, {{5714492195921931001ull, 3162576038665424485ull, 16809661747935155086ull, 3148367935832483117ull}}, {{11754801263329801655ull, 13176592085186556414ull, 7177019129636780145ull, 3935459919790603897ull}}, {{2735064771153738131ull, 1317841025600515903ull, 16014852002091457351ull, 2459662449869127435ull}}, {{17253889019224336375ull, 15482359337282808590ull, 15406878984186933784ull, 3074578062336409294ull}}, {{12343989237175644661ull, 906205097893959122ull, 10035226693378891423ull, 3843222577920511618ull}}, {{12326679291662165817ull, 7483907213824806307ull, 10883702701789195043ull, 2402014111200319761ull}}, {{10796663096150319367ull, 4743197998853619980ull, 18216314395663881708ull, 3002517639000399701ull}}, {{13495828870187899209ull, 5928997498567024975ull, 8935334939297688423ull, 3753147048750499627ull}}, {{15352422071508518862ull, 10623152464245472465ull, 3278741327847361312ull, 2345716905469062267ull}}, {{5355469534103484865ull, 13278940580306840582ull, 17933484715091365352ull, 2932146131836327833ull}}, {{15917708954484131889ull, 16598675725383550727ull, 8581797838582042978ull, 3665182664795409792ull}}, {{15285450174677776957ull, 11524972619874662601ull, 10727247298227553723ull, 4581478330994262240ull}}, {{2635877331532528743ull, 4897264878207970174ull, 6704529561392221077ull, 2863423956871413900ull}}, {{12518218701270436736ull, 10733267116187350621ull, 8380661951740276346ull, 3579279946089267375ull}}, {{1812715321305882208ull, 4193211858379412469ull, 5864141421247957529ull, 4474099932611584219ull}}, {{3438790085029870332ull, 14149972457555602553ull, 1359245379066279503ull, 2796312457882240137ull}}, {{8910173624714725819ull, 13075779553517115287ull, 6310742742260237283ull, 3495390572352800171ull}}, {{6526031012466019370ull, 11733038423469006205ull, 3276742409397908700ull, 4369238215441000214ull}}, {{6384612392004956058ull, 16556521051522904686ull, 15883022061155856649ull, 2730773884650625133ull}}, {{17204137526860970881ull, 6860593259121467145ull, 6018719521162657100ull, 3413467355813281417ull}}, {{7670113853294049889ull, 8575741573901833932ull, 12135085419880709279ull, 4266834194766601771ull}}, {{14017193195163556989ull, 12277367511329728063ull, 5278585378211749347ull, 2666771371729126107ull}}, {{12909805475527058332ull, 10735023370734772175ull, 1986545704337298780ull, 3333464214661407634ull}}, {{11525570825981435011ull, 13418779213418465219ull, 11706554167276399283ull, 4166830268326759542ull}}, {{4897638757024702930ull, 6080893999172846810ull, 2704910336120361648ull, 2604268917704224714ull}}, {{15345420483135654470ull, 7601117498966058512ull, 12604509957005227868ull, 3255336147130280892ull}}, {{735031530210016471ull, 9501396873707573141ull, 15755637446256534835ull, 4069170183912851115ull}}, {{2765237715594954247ull, 3632530036853539261ull, 7541430394696640320ull, 2543231364945531947ull}}, {{8068233162921080712ull, 4540662546066924076ull, 4815101974943412496ull, 3179039206181914934ull}}, {{10085291453651350890ull, 5675828182583655095ull, 15242249505534041428ull, 3973799007727393667ull}}, {{13220836186173176163ull, 12770764650969560242ull, 7220562931745081940ull, 2483624379829621042ull}}, {{7302673195861694395ull, 15963455813711950303ull, 18249075701536128233ull, 3104530474787026302ull}}, {{4516655476399730090ull, 6119261711857774167ull, 13587972590065384484ull, 3880663093483782878ull}}, {{9740438700390913162ull, 13047910606765884662ull, 3880796850363477398ull, 2425414433427364299ull}}, {{2952176338633865645ull, 7086516221602580020ull, 239310044526958844ull, 3031768041784205374ull}}, {{3690220423292332056ull, 8858145277003225025ull, 9522509592513474363ull, 3789710052230256717ull}}, {{13835602810626177295ull, 3230497788913321688ull, 8257411504534615429ull, 2368568782643910448ull}}, {{17294503513282721619ull, 8649808254569040014ull, 10321764380668269286ull, 2960710978304888060ull}}, {{12394757354748626215ull, 1588888281356524210ull, 12902205475835336608ull, 3700888722881110075ull}}, {{12358409365145279289ull, 993055175847827631ull, 5758035413183391428ull, 2313055451800693797ull}}, {{10836325688004211207ull, 1241318969809784539ull, 11809230284906627189ull, 2891319314750867246ull}}, {{8933721091577876105ull, 6163334730689618578ull, 5538165819278508178ull, 3614149143438584058ull}}, {{1943779327617569323ull, 16927540450216799031ull, 16146079310952911030ull, 4517686429298230072ull}}, {{8132391107402062683ull, 5968026762958111490ull, 10091299569345569394ull, 2823554018311393795ull}}, {{942116847397802545ull, 16683405490552415171ull, 8002438443254573838ull, 3529442522889242244ull}}, {{15012704114529416894ull, 11630884826335743155ull, 10003048054068217298ull, 4411803153611552805ull}}, {{7077097062367191607ull, 11880989034887227376ull, 8557748043006329763ull, 2757376971007220503ull}}, {{8846371327958989508ull, 10239550275181646316ull, 6085499035330524300ull, 3446721213759025629ull}}, {{11057964159948736885ull, 12799437843977057895ull, 12218559812590543279ull, 4308401517198782036ull}}, {{13828756627609042409ull, 14917177680126743040ull, 16859971919723865357ull, 2692750948249238772ull}}, {{17285945784511303012ull, 4811414044876265088ull, 2628220825945280081ull, 3365938685311548466ull}}, {{3160688156929577148ull, 10625953574522719265ull, 12508648069286375909ull, 4207423356639435582ull}}, {{13504645144149455478ull, 8947063993290393492ull, 3206219024876597039ull, 2629639597899647239ull}}, {{16880806430186819347ull, 6572143973185603961ull, 17842831836377910011ull, 3287049497374559048ull}}, {{7265949982451360472ull, 3603493948054617048ull, 3856795721762835898ull, 4108811871718198811ull}}, {{4541218739032100295ull, 6863869735961523559ull, 104654316888078484ull, 2568007419823874257ull}}, {{1064837405362737465ull, 8579837169951904449ull, 4742503914537486009ull, 3210009274779842821ull}}, {{5942732775130809735ull, 15336482480867268465ull, 10539815911599245415ull, 4012511593474803526ull}}, {{15243423030525225845ull, 16502830578183124646ull, 1975698926322140480ull, 2507819745921752204ull}}, {{9830906751301756498ull, 2181794149019354192ull, 2469623657902675601ull, 3134774682402190255ull}}, {{12288633439127195622ull, 7338928704701580644ull, 16922087627660508213ull, 3918468353002737818ull}}, {{16903767936309273072ull, 6892673449652181854ull, 15187990785715205537ull, 2449042720626711136ull}}, {{11906337883531815532ull, 13227527830492615222ull, 538244408434455305ull, 3061303400783388921ull}}, {{5659550317559993606ull, 2699351732833605316ull, 5284491528970457036ull, 3826629250979236151ull}}, {{12760590985329771812ull, 10910466869875779130ull, 10220336233247617503ull, 2391643281862022594ull}}, {{6727366694807438957ull, 9026397568917336009ull, 3552048254704746071ull, 2989554102327528243ull}}, {{13020894386936686600ull, 6671310942719282107ull, 18275118373663096301ull, 3736942627909410303ull}}, {{5832215982621735173ull, 6475412348413245269ull, 18339478011180517044ull, 2335589142443381439ull}}, {{11901955996704556871ull, 8094265435516556586ull, 18312661495548258401ull, 2919486428054226799ull}}, {{5654072959025920280ull, 14729517812823083637ull, 18279140851007935097ull, 3649358035067783499ull}}, {{11679277217209788254ull, 4576839210746690834ull, 18237240045332530968ull, 4561697543834729374ull}}, {{11911234279183505563ull, 2860524506716681771ull, 6786589009905443951ull, 2851060964896705859ull}}, {{10277356830551994050ull, 17410713688678015926ull, 3871550243954417034ull, 3563826206120882324ull}}, {{3623324001335216754ull, 12540020073992744100ull, 4839437804943021293ull, 4454782757651102905ull}}, {{11487949537689286279ull, 10143355555459159014ull, 14553863674157858068ull, 2784239223531939315ull}}, {{5136564885256832041ull, 12679194444323948768ull, 13580643574269934681ull, 3480299029414924144ull}}, {{6420706106571040051ull, 2013935000122772248ull, 16975804467837418352ull, 4350373786768655180ull}}, {{4012941316606900032ull, 1258709375076732655ull, 1386505755543610662ull, 2718983616730409488ull}}, {{404490627331237136ull, 10796758755700691627ull, 1733132194429513327ull, 3398729520913011860ull}}, {{14340671339446210132ull, 8884262426198476629ull, 2166415243036891659ull, 4248411901141264825ull}}, {{11268762596367575285ull, 3246821007160353941ull, 12883224572966527047ull, 2655257438213290515ull}}, {{250895190177305394ull, 17893584314232606139ull, 11492344697780770904ull, 3319071797766613144ull}}, {{14148677043003795454ull, 3920236319081206057ull, 14365430872225963631ull, 4148839747208266430ull}}, {{1925394124236290303ull, 9367676727066835642ull, 4366708276713839365ull, 2593024842005166519ull}}, {{11630114692150138687ull, 16321281927260932456ull, 846699327464911302ull, 3241281052506458149ull}}, {{14537643365187673358ull, 11178230372221389762ull, 5670060177758527032ull, 4051601315633072686ull}}, {{13697713121669683753ull, 6986393982638368601ull, 17378845666381243107ull, 2532250822270670428ull}}, {{3287083346804940979ull, 4121306459870572848ull, 3276813009267002268ull, 3165313527838338036ull}}, {{4108854183506176224ull, 5151633074838216060ull, 4096016261583752835ull, 3956641909797922545ull}}, {{11791405901546135948ull, 913927662560191085ull, 14089225209558315282ull, 2472901193623701590ull}}, {{904199321650506223ull, 10365781615055014665ull, 8388159475093118294ull, 3091126492029626988ull}}, {{5741935170490520683ull, 3733854981963992523ull, 10485199343866397868ull, 3863908115037033735ull}}, {{1282866472342881475ull, 11557031400582271135ull, 13470778617557580523ull, 2414942571898146084ull}}, {{15438641145710765555ull, 9834603232300451014ull, 16838473271946975654ull, 3018678214872682605ull}}, {{10074929395283681136ull, 3069882003520787960ull, 7213033534651555856ull, 3773347768590853257ull}}, {{6296830872052300710ull, 1918676252200492475ull, 16037361005225692170ull, 2358342355369283285ull}}, {{3259352571637987984ull, 11621717352105391402ull, 6211643201249951500ull, 2947927944211604107ull}}, {{13297562751402260787ull, 14527146690131739252ull, 3152867983135051471ull, 3684909930264505134ull}}, {{16621953439252825984ull, 13547247344237286161ull, 13164457015773590147ull, 4606137412830631417ull}}, {{3471191871891934384ull, 6161186580934609899ull, 1310256607217411986ull, 2878835883019144636ull}}, {{18174047895147081692ull, 16924855263023038181ull, 1637820759021764982ull, 3598544853773930795ull}}, {{8882501813651688403ull, 11932697041924021919ull, 15882334004059369940ull, 4498181067217413493ull}}, {{12469092661173387108ull, 16681307688057289507ull, 12232301761750800164ull, 2811363167010883433ull}}, {{10974679808039345981ull, 2404890536362060268ull, 1455319146906336494ull, 3514203958763604292ull}}, {{13718349760049182476ull, 12229485207307351143ull, 1819148933632920617ull, 4392754948454505365ull}}, {{15491497627671820904ull, 725899226926012608ull, 3442811092734269338ull, 2745471842784065853ull}}, {{917627960880224514ull, 10130746070512291569ull, 8915199884345224576ull, 3431839803480082316ull}}, {{5758720969527668546ull, 12663432588140364461ull, 11143999855431530720ull, 4289799754350102895ull}}, {{5905043615168486793ull, 7914645367587727788ull, 13882528937285788556ull, 2681124846468814309ull}}, {{7381304518960608492ull, 9893306709484659735ull, 3518103116325071983ull, 3351406058086017887ull}}, {{4614944630273372710ull, 7754947368428436765ull, 18232686950688503691ull, 4189257572607522358ull}}, {{5190183403134551896ull, 2540999096054079026ull, 6783743325752926903ull, 2618285982879701474ull}}, {{15711101290772965678ull, 17011306925349762494ull, 17703051194045934436ull, 3272857478599626842ull}}, {{10415504576611431290ull, 2817389582977651502ull, 12905441955702642238ull, 4091071848249533553ull}}, {{1898004341954756652ull, 15595926544643195901ull, 1148372194673069542ull, 2556919905155958471ull}}, {{6984191445870833719ull, 10271536143949219068ull, 15270523298623500640ull, 3196149881444948088ull}}, {{8730239307338542149ull, 12839420179936523835ull, 641410049569824184ull, 3995187351806185111ull}}, {{3150556557872894891ull, 8024637612460327397ull, 7318410308622221971ull, 2496992094878865694ull}}, {{8549881715768506518ull, 5419110997148021342ull, 18371384922632553272ull, 3121240118598582117ull}}, {{1463980107855857339ull, 6773888746435026678ull, 9129173098008527878ull, 3901550148248227647ull}}, {{14750045622692074549ull, 18068738521804055385ull, 12623262213896411779ull, 2438468842655142279ull}}, {{4602498973082929474ull, 17974237133827681328ull, 11167391748943126820ull, 3048086053318927849ull}}, {{5753123716353661843ull, 4021052343575050044ull, 124181630896744814ull, 3810107566648659812ull}}, {{12819074359575814460ull, 16348215770016569989ull, 9300985556165241316ull, 2381317229155412382ull}}, {{2188784894187604363ull, 1988525638811160871ull, 2402859908351775838ull, 2976646536444265478ull}}, {{16571039173016669165ull, 11709029085368726896ull, 12226946922294495605ull, 3720808170555331847ull}}, {{10356899483135418228ull, 9623986187569148262ull, 14559370854075141609ull, 2325505106597082404ull}}, {{3722752317064496977ull, 16641668752888823232ull, 18199213567593927011ull, 2906881383246353005ull}}, {{4653440396330621222ull, 16190399922683641136ull, 8913958904210245052ull, 3633601729057941257ull}}, {{5816800495413276527ull, 1791255829644999804ull, 15754134648690194220ull, 4542002161322426571ull}}, {{12858872346488073638ull, 10342906930382900685ull, 7540491146217677435ull, 2838751350826516607ull}}, {{2238532377827928335ull, 8316947644551237953ull, 4813927914344708890ull, 3548439188533145759ull}}, {{7409851490712298322ull, 1172812518834271633ull, 1405723874503498209ull, 4435548985666432199ull}}, {{16160372227763656212ull, 12262222870339889530ull, 7796106449205768236ull, 2772218116041520124ull}}, {{10977093247849794457ull, 15327778587924861913ull, 9745133061507210295ull, 3465272645051900155ull}}, {{18333052578239630975ull, 14548037216478689487ull, 7569730308456624965ull, 4331590806314875194ull}}, {{18375686889040851215ull, 11398366269512874881ull, 9342767461212778507ull, 2707244253946796996ull}}, {{9134550556018900307ull, 9636271818463705698ull, 11678459326515973134ull, 3384055317433496245ull}}, {{2194816158168849576ull, 2821967736224856315ull, 763016102862802706ull, 4230069146791870307ull}}, {{17512661163351388649ull, 6375415853567923100ull, 16617786128785109355ull, 2643793216744918941ull}}, {{3444082380479684195ull, 3357583798532515972ull, 6937174605699222982ull, 3304741520931148677ull}}, {{4305102975599605244ull, 13420351785020420773ull, 13283154275551416631ull, 4130926901163935846ull}}, {{4996532368963447229ull, 15305248893278844839ull, 3690285403792247490ull, 2581829313227459904ull}}, {{1633979442776921133ull, 9908189079743780241ull, 4612856754740309363ull, 3227286641534324880ull}}, {{6654160321898539320ull, 7773550331252337397ull, 5766070943425386704ull, 4034108301917906100ull}}, {{6464693210400281027ull, 4858468957032710873ull, 12827166376495642498ull, 2521317688698691312ull}}, {{12692552531427739188ull, 15296458233145664399ull, 16033957970619553122ull, 3151647110873364140ull}}, {{11254004645857286080ull, 9897200754577304691ull, 1595703389564889787ull, 3939558888591705176ull}}, {{4727909894447109848ull, 3879907462397121480ull, 997314618478056117ull, 2462224305369815735ull}}, {{5909887368058887310ull, 9461570346423789754ull, 15081701328379733858ull, 3077780381712269668ull}}, {{16610731246928384946ull, 2603590896174961384ull, 405382586765115707ull, 3847225477140337086ull}}, {{10381707029330240591ull, 17768145374605208529ull, 14088422172010361028ull, 2404515923212710678ull}}, {{17588819805090188643ull, 3763437644546959045ull, 8387155678158175478ull, 3005644904015888348ull}}, {{8150966701080572092ull, 13927669092538474615ull, 10483944597697719347ull, 3757056130019860435ull}}, {{12011883215816439414ull, 6398950173622852682ull, 4246622364347380640ull, 2348160081262412772ull}}, {{5791481982915773459ull, 7998687717028565853ull, 5308277955434225800ull, 2935200101578015965ull}}, {{11851038497072104727ull, 9998359646285707316ull, 11247033462720170154ull, 3669000126972519956ull}}, {{14813798121340130909ull, 3274577521002358337ull, 14058791828400212693ull, 4586250158715649945ull}}, {{2341094798196499962ull, 4352453959840167913ull, 1869215865109051077ull, 2866406349197281216ull}}, {{7538054516173012857ull, 10052253468227597795ull, 2336519831386313846ull, 3583007936496601520ull}}, {{4810882126788878167ull, 3341944798429721436ull, 2920649789232892308ull, 4478759920620751900ull}}, {{12230173366097824663ull, 11312087535873351705ull, 11048778155125333500ull, 2799224950387969937ull}}, {{1452658652340117116ull, 14140109419841689632ull, 18422658712334054779ull, 3499031187984962421ull}}, {{1815823315425146395ull, 13063450756374724136ull, 9193265335135404762ull, 4373788984981203027ull}}, {{1134889572140716497ull, 12776342741161590489ull, 3439947825245934024ull, 2733618115613251892ull}}, {{6030297983603283525ull, 15970428426451988111ull, 4299934781557417530ull, 3417022644516564865ull}}, {{2926186461076716502ull, 10739663496210209331ull, 9986604495374159817ull, 4271278305645706081ull}}, {{17969767602668805478ull, 18241504731199850591ull, 17770842855677319645ull, 2669548941028566300ull}}, {{17850523484908618944ull, 8966822858717649527ull, 3766809495887097941ull, 3336936176285707876ull}}, {{17701468337708385775ull, 15820214591824449813ull, 4708511869858872426ull, 4171170220357134845ull}}, {{13369260720281435062ull, 14499320138317669037ull, 5248662927875489218ull, 2606981387723209278ull}}, {{2876517845069630115ull, 8900778136042310489ull, 15784200696699137331ull, 3258726734654011597ull}}, {{8207333324764425548ull, 6514286651625500207ull, 5895192815591757952ull, 4073408418317514497ull}}, {{12047112355618847824ull, 4071429157265937629ull, 15213710555813318480ull, 2545880261448446560ull}}, {{1223832389241396067ull, 5089286446582422037ull, 570394121057096484ull, 3182350326810558201ull}}, {{6141476504979132988ull, 6361608058228027546ull, 5324678669748758509ull, 3977937908513197751ull}}, {{8450108834039346022ull, 6281848045606211168ull, 10245453196234055924ull, 2486211192820748594ull}}, {{10562636042549182527ull, 7852310057007763960ull, 3583444458437794097ull, 3107763991025935743ull}}, {{13203295053186478159ull, 14427073589687092854ull, 18314363628329406333ull, 3884704988782419678ull}}, {{3640373389814160945ull, 11322764002768126986ull, 6834791249278491054ull, 2427940617989012299ull}}, {{13773838774122476989ull, 4930082966605382924ull, 3931803043170725914ull, 3034925772486265374ull}}, {{17217298467653096237ull, 15385975745111504463ull, 14138125840818183200ull, 3793657215607831717ull}}, {{17678340569924267004ull, 9616234840694690289ull, 11142171659725058452ull, 2371035759754894823ull}}, {{8262867657123170043ull, 12020293550868362862ull, 9316028556228935161ull, 2963794699693618529ull}}, {{1105212534549186746ull, 1190308883303289866ull, 16256721713713556856ull, 3704743374617023161ull}}, {{5302443852520629620ull, 743943052064556166ull, 3242922043429891179ull, 2315464609135639476ull}}, {{15851426852505562833ull, 14764986870362858919ull, 4053652554287363973ull, 2894330761419549345ull}}, {{15202597547204565637ull, 4621175532671409937ull, 9678751711286592871ull, 3617913451774436681ull}}, {{5168188878723543335ull, 1164783397411874518ull, 16710125657535628993ull, 4522391814718045851ull}}, {{17065176104484378296ull, 12257204669450891333ull, 8137985526746074168ull, 2826494884198778657ull}}, {{7496412075323309158ull, 15321505836813614167ull, 14784167926859980614ull, 3533118605248473321ull}}, {{4758829075726748544ull, 9928510259162241901ull, 4645151853292812056ull, 4416398256560591652ull}}, {{5280111181542911792ull, 6205318911976401188ull, 12126591945162783343ull, 2760248910350369782ull}}, {{6600138976928639740ull, 3144962621543113581ull, 5934867894598703371ull, 3450311137937962228ull}}, {{12861859739588187579ull, 17766261332211055688ull, 7418584868248379213ull, 4312888922422452785ull}}, {{8038662337242617237ull, 13409756341845603757ull, 16165830588723706768ull, 2695555576514032990ull}}, {{14660013939980659450ull, 16762195427307004696ull, 10983916199049857652ull, 3369444470642541238ull}}, {{18325017424975824312ull, 2506000210424204254ull, 4506523211957546258ull, 4211805588303176548ull}}, {{6841449872182502291ull, 6177936149942515563ull, 12039949044328242219ull, 2632378492689485342ull}}, {{3940126321800739960ull, 3110734169000756550ull, 5826564268555526966ull, 3290473115861856678ull}}, {{14148529939105700758ull, 13111789748105721495ull, 16506577372549184515ull, 4113091394827320847ull}}, {{15760360239582144830ull, 5889025583352381982ull, 17234139885484322178ull, 2570682121767075529ull}}, {{10477078262622905229ull, 16584654016045253286ull, 7707616801573239010ull, 3213352652208844412ull}}, {{3872975791423855729ull, 11507445483201790800ull, 9634521001966548763ull, 4016690815261055515ull}}, {{2420609869639909831ull, 4886310417787425298ull, 3715732617015399025ull, 2510431759538159697ull}}, {{12249134373904663096ull, 10719574040661669526ull, 9256351789696636685ull, 3138039699422699621ull}}, {{6088045930526053062ull, 18011153569254474812ull, 16182125755548183760ull, 3922549624278374526ull}}, {{13028400743433558972ull, 11256970980784046757ull, 5502142578790226946ull, 2451593515173984079ull}}, {{2450442874009785003ull, 4847841689125282639ull, 2265992205060395779ull, 3064491893967480099ull}}, {{16898111647794394965ull, 1448116092979215394ull, 16667548311607658436ull, 3830614867459350123ull}}, {{15173005798298884757ull, 10128444594966785429ull, 8111374685541092570ull, 2394134292162093827ull}}, {{5131199192591442235ull, 3437183706853705979ull, 5527532338498977809ull, 2992667865202617284ull}}, {{1802312972311914889ull, 8908165651994520378ull, 6909415423123722261ull, 3740834831503271605ull}}, {{5738131626122334710ull, 7873446541710269188ull, 6624227648666020365ull, 2338021769689544753ull}}, {{7172664532652918387ull, 14453494195565224389ull, 12891970579259913360ull, 2922527212111930941ull}}, {{13577516684243535888ull, 18066867744456530486ull, 2279905168792727988ull, 3653159015139913677ull}}, {{7748523818449644052ull, 4136840606861111492ull, 7461567479418297890ull, 4566448768924892096ull}}, {{14066199423385803341ull, 7197211397715582586ull, 4663479674636436181ull, 2854030480578057560ull}}, {{8359377242377478368ull, 13608200265571866137ull, 5829349593295545226ull, 3567538100722571950ull}}, {{15060907571399235864ull, 7786878295110056863ull, 16510059028474207341ull, 4459422625903214937ull}}, {{16330596259765604271ull, 7172641943657479491ull, 3401257865155297732ull, 2787139141189509336ull}}, {{15801559306279617434ull, 8965802429571849364ull, 4251572331444122165ull, 3483923926486886670ull}}, {{1305205059139970177ull, 15818939055392199610ull, 14537837451159928514ull, 4354904908108608337ull}}, {{5427439180389869265ull, 14498522928047512660ull, 2168619379333873465ull, 2721815567567880211ull}}, {{6784298975487336581ull, 4288095604777227113ull, 16545832279449505544ull, 3402269459459850263ull}}, {{13092059737786558630ull, 5360119505971533891ull, 16070604330884494026ull, 4252836824324812829ull}}, {{5876694326902905192ull, 7961760709659596586ull, 12349970716016502718ull, 2658023015203008018ull}}, {{16569239945483407298ull, 728828850219719924ull, 6214091358165852590ull, 3322528769003760023ull}}, {{2264805858144707506ull, 10134408099629425714ull, 3155928179279927833ull, 4153160961254700029ull}}, {{6027189679767830095ull, 17863220108336860831ull, 4278298121263648847ull, 2595725600784187518ull}}, {{2922301081282399715ull, 17717339116993688135ull, 14571244688434336867ull, 3244657000980234397ull}}, {{17487934406885163356ull, 17534987877814722264ull, 4378997805260757372ull, 4055821251225292997ull}}, {{10929959004303227098ull, 1735995386779425607ull, 5042716637501667310ull, 2534888282015808123ull}}, {{9050762736951645968ull, 11393366270329057817ull, 1691709778449696233ull, 3168610352519760154ull}}, {{15925139439616945364ull, 406649782629158559ull, 11338009259916896100ull, 3960762940649700192ull}}, {{16870741177401672709ull, 9477528150997999907ull, 7086255787448060062ull, 2475476837906062620ull}}, {{16476740453324702982ull, 2623538151892724076ull, 8857819734310075078ull, 3094346047382578275ull}}, {{2149181492946327111ull, 12502794726720680904ull, 6460588649460205943ull, 3867932559228222844ull}}, {{1343238433091454444ull, 14731775731841507421ull, 13261239942767404522ull, 2417457849517639277ull}}, {{6290734059791705959ull, 9191347627947108468ull, 2741491873177091941ull, 3021822311897049097ull}}, {{7863417574739632449ull, 16100870553361273489ull, 8038550859898752830ull, 3777277889871311371ull}}, {{16443851030280740041ull, 5451358077423408026ull, 2718251278223026567ull, 2360798681169569607ull}}, {{11331441750996149243ull, 2202511578351872129ull, 17232872153060946921ull, 2950998351461962008ull}}, {{329244133463022842ull, 7364825491367228066ull, 3094346117616632035ull, 3688747939327452511ull}}, {{9634927203683554360ull, 4594345845781647178ull, 17702990702302953756ull, 4610934924159315638ull}}, {{10633515520729609379ull, 12094838190468305294ull, 6452683170511958193ull, 2881834327599572274ull}}, {{4068522364057235916ull, 1283489682803217906ull, 17289225999994723550ull, 3602292909499465342ull}}, {{14309024991926320703ull, 10827734140358798190ull, 12388160463138628629ull, 4502866136874331678ull}}, {{4331454601526562535ull, 9073176846937942821ull, 3130914271034254989ull, 2814291335546457299ull}}, {{10026004270335591073ull, 15953157077099816430ull, 17748700894074982448ull, 3517864169433071623ull}}, {{3309133301064713033ull, 1494702272665218922ull, 17574190099166340157ull, 4397330211791339529ull}}, {{6679894331592833550ull, 3240031929629455778ull, 4066339784337880742ull, 2748331382369587206ull}}, {{17573239951345817745ull, 13273411948891595530ull, 14306296767277126735ull, 3435414227961984007ull}}, {{12743177902327496374ull, 11980078917687106509ull, 13271184940669020515ull, 4294267784952480009ull}}, {{10270329198168379186ull, 5181706314340747616ull, 1376961560277055966ull, 2683917365595300006ull}}, {{12837911497710473982ull, 15700504929780710328ull, 10944573987201095765ull, 3354896706994125007ull}}, {{16047389372138092477ull, 5790573106943724198ull, 9069031465573981803ull, 4193620883742656259ull}}, {{5417932339158919894ull, 1313265182626133672ull, 3362301656770044675ull, 2621013052339160162ull}}, {{6772415423948649868ull, 15476639533564830802ull, 13426249107817331651ull, 3276266315423950202ull}}, {{17688891316790588143ull, 14734113398528650598ull, 7559439347916888756ull, 4095332894279937753ull}}, {{6443871054566729685ull, 18432192910935182432ull, 16253864638516525232ull, 2559583058924961095ull}}, {{8054838818208412107ull, 4593497064959426424ull, 15705644779718268637ull, 3199478823656201369ull}}, {{10068548522760515133ull, 10353557349626670934ull, 5796997919365672084ull, 3999348529570251712ull}}, {{1681156808297934054ull, 15694345380371445142ull, 3623123699603545052ull, 2499592830981407320ull}}, {{11324818047227193376ull, 1171187651754754811ull, 4528904624504431316ull, 3124491038726759150ull}}, {{9544336540606603816ull, 1463984564693443514ull, 14884502817485314953ull, 3905613798408448937ull}}, {{10576896356306515289ull, 12444205399001871956ull, 2385285233287239989ull, 2441008624005280586ull}}, {{13221120445383144111ull, 1720198693470176233ull, 12204978578463825795ull, 3051260780006600732ull}}, {{2691342501446766427ull, 15985306422119884004ull, 15256223223079782243ull, 3814075975008250915ull}}, {{10905461100259004825ull, 7684973504611233550ull, 7229296505211169950ull, 2383797484380156822ull}}, {{4408454338468980223ull, 382844843909266130ull, 18259992668368738246ull, 2979746855475196027ull}}, {{14733939959941001087ull, 9701928091741358470ull, 18213304817033534903ull, 3724683569343995034ull}}, {{4597026456535737775ull, 12981234084979430900ull, 15995001529073347218ull, 2327927230839996896ull}}, {{5746283070669672219ull, 7003170569369512817ull, 1547007837632132407ull, 2909909038549996121ull}}, {{11794539856764478178ull, 4142277193284503117ull, 6545445815467553413ull, 3637386298187495151ull}}, {{908116765673434010ull, 9789532510033016801ull, 3570121250907053862ull, 4546732872734368939ull}}, {{12096788024614366017ull, 1506771800343247596ull, 18372226846312766328ull, 2841708045458980586ull}}, {{15120985030767957521ull, 1883464750429059495ull, 13741911521036182102ull, 3552135056823725733ull}}, {{14289545270032558997ull, 11577702974891100177ull, 3342331346013063915ull, 4440168821029657167ull}}, {{2013436766129267517ull, 4930221350093243659ull, 9006486118899246803ull, 2775105513143535729ull}}, {{16351854012943748108ull, 1551090669189166669ull, 15869793667051446408ull, 3468881891429419661ull}}, {{6604759460897521423ull, 1938863336486458337ull, 6002184028532144298ull, 4336102364286774577ull}}, {{15657189709129420650ull, 5823475603731424364ull, 15280580063901059946ull, 2710063977679234110ull}}, {{1124743062702224196ull, 16502716541519056264ull, 9877353043021549124ull, 3387579972099042638ull}}, {{1405928828377780245ull, 2181651603189268714ull, 3123319266922160598ull, 4234474965123803298ull}}, {{5490391536163500557ull, 15198590307275456658ull, 6563760560253738277ull, 2646546853202377061ull}}, {{16086361457059151504ull, 5163179828812157110ull, 12816386718744560751ull, 3308183566502971326ull}}, {{10884579784469163572ull, 1842288767587808484ull, 6797111361575925131ull, 4135229458128714158ull}}, {{16026234402148003041ull, 17292331544238237966ull, 18083252656267116918ull, 2584518411330446348ull}}, {{10809420965830227993ull, 12392042393443021650ull, 4157321746624344532ull, 3230648014163057936ull}}, {{4288404170433009183ull, 15490052991803777063ull, 5196652183280430665ull, 4038310017703822420ull}}, {{9597781634161712596ull, 2763754092236278808ull, 12471279651405044974ull, 2523943761064889012ull}}, {{11997227042702140744ull, 12678064652150124318ull, 15589099564256306217ull, 3154929701331111265ull}}, {{5773161766522900122ull, 2012522759905491686ull, 5651316400038219060ull, 3943662126663889082ull}}, {{17443284159358976289ull, 10481198761795708111ull, 8143758768451274816ull, 2464788829164930676ull}}, {{17192419180771332457ull, 13101498452244635139ull, 10179698460564093520ull, 3080986036456163345ull}}, {{16878837957536777667ull, 16376873065305793924ull, 17336309094132504804ull, 3851232545570204181ull}}, {{1325901686605710234ull, 1012173628961345395ull, 13141036193046509455ull, 2407020340981377613ull}}, {{15492435163539301504ull, 15100275091483845455ull, 2591237186025973106ull, 3008775426226722017ull}}, {{14753857935996738976ull, 9651971827500031011ull, 7850732500959854287ull, 3760969282783402521ull}}, {{6915318200784267908ull, 12950011419828601238ull, 16435922859168378689ull, 2350605801739626575ull}}, {{17867519787835110693ull, 2352456219503587835ull, 15933217555533085458ull, 2938257252174533219ull}}, {{17722713716366500462ull, 12163942311234260602ull, 15304835925988968918ull, 3672821565218166524ull}}, {{12930020108603349770ull, 5981555852188049945ull, 684300833776659532ull, 4591026956522708156ull}}, {{1163733540236011750ull, 12961844444472307024ull, 9651060057965188015ull, 2869391847826692597ull}}, {{1454666925295014688ull, 11590619537162995876ull, 16675511090883872923ull, 3586739809783365746ull}}, {{1818333656618768360ull, 9876588403026356941ull, 11621016826750065346ull, 4483424762229207183ull}}, {{3442301544600424177ull, 10784553770318860992ull, 14180664544359872697ull, 2802140476393254489ull}}, {{4302876930750530221ull, 18092378231325964144ull, 3890772625167677159ull, 3502675595491568112ull}}, {{5378596163438162776ull, 18003786770730067276ull, 4863465781459596449ull, 4378344494364460140ull}}, {{12584994639003627543ull, 4334837704065210191ull, 12263038150267023589ull, 2736465308977787587ull}}, {{11119557280327146525ull, 10030233148508900643ull, 10717111669406391582ull, 3420581636222234484ull}}, {{9287760581981545252ull, 3314419398781349996ull, 13396389586757989478ull, 4275727045277793105ull}}, {{15028222400593241591ull, 15906570179520507459ull, 1455214464082661567ull, 2672329403298620691ull}}, {{14173591982314164084ull, 15271526705973246420ull, 15654076135385490671ull, 3340411754123275863ull}}, {{17716989977892705105ull, 14477722364039170121ull, 14955909150804475435ull, 4175514692654094829ull}}, {{4155589708541858835ull, 6742733468310787374ull, 11653286228466491099ull, 2609696682908809268ull}}, {{14417859172532099352ull, 3816730816961096313ull, 14566607785583113874ull, 3262120853636011585ull}}, {{4187265910382960477ull, 13994285558056146200ull, 4373201676696728630ull, 4077651067045014482ull}}, {{2617041193989350299ull, 4134742455357703471ull, 7344937066362843298ull, 2548531916903134051ull}}, {{17106359547768851585ull, 14391800106051905146ull, 4569485314526166218ull, 3185664896128917564ull}}, {{12159577397856288673ull, 8766378095710105625ull, 5711856643157707773ull, 3982081120161146955ull}}, {{682206846019098565ull, 7784829319032509968ull, 1264067392759873406ull, 2488800700100716847ull}}, {{852758557523873206ull, 507664611935861652ull, 15415142296232005470ull, 3111000875125896058ull}}, {{1065948196904841508ull, 9857952801774602873ull, 10045555833435231029ull, 3888751093907370073ull}}, {{12195432669133995702ull, 8467063510322820747ull, 17807687441965489153ull, 2430469433692106295ull}}, {{10632604817990106724ull, 15195515406330913838ull, 17647923284029473537ull, 3038086792115132869ull}}, {{4067383985632857597ull, 5159336202631478586ull, 8224846049754678210ull, 3797608490143916087ull}}, {{7153801009447923902ull, 7836271145072062020ull, 12058057808737755737ull, 2373505306339947554ull}}, {{8942251261809904878ull, 14407024949767465429ull, 5849200224067418863ull, 2966881632924934443ull}}, {{15789500095689769001ull, 13397095168781943882ull, 2699814261656885675ull, 3708602041156168054ull}}, {{14480123578233493530ull, 6067341471275020974ull, 15522441968817717259ull, 2317876275722605033ull}}, {{8876782435937091104ull, 2972490820666388314ull, 5567994405739982862ull, 2897345344653256292ull}}, {{1872606008066588072ull, 12938985562687761201ull, 6959993007174978577ull, 3621681680816570365ull}}, {{6952443528510622994ull, 2338673898077537789ull, 13311677277396111126ull, 4527102101020712956ull}}, {{6651120214532833323ull, 15296729241580624830ull, 17543170335227345261ull, 2829438813137945597ull}}, {{17537272305020817462ull, 5285853496693617325ull, 8093904863752017865ull, 3536798516422431997ull}}, {{8086532325993858115ull, 11219002889294409561ull, 14729067098117410235ull, 4420998145528039996ull}}, {{16583297749814631082ull, 4706033796595312023ull, 18429038973178157205ull, 2763123840955024997ull}}, {{16117436168840900949ull, 10494228264171527933ull, 9201240661190532794ull, 3453904801193781247ull}}, {{6311737155768962474ull, 3894413293359634109ull, 6889864808060778089ull, 4317381001492226559ull}}, {{6250678731569295498ull, 13963223354418241078ull, 11223694532679068161ull, 2698363125932641599ull}}, {{17036720451316395181ull, 3618971137740637635ull, 9417932147421447298ull, 3372953907415801999ull}}, {{16684214545718106072ull, 13747085959030572852ull, 7160729165849421218ull, 4216192384269752499ull}}, {{1204262054219040487ull, 13203614742821495937ull, 2169612719442194309ull, 2635120240168595312ull}}, {{6117013586201188513ull, 2669460373244706209ull, 2712015899302742887ull, 3293900300210744140ull}}, {{12257953001178873545ull, 17171883521838046473ull, 3390019874128428608ull, 4117375375263430175ull}}, {{743691598095714110ull, 10732427201148779046ull, 9036291448971349736ull, 2573359609539643859ull}}, {{10152986534474418445ull, 13415534001435973807ull, 6683678292786799266ull, 3216699511924554824ull}}, {{8079547149665635152ull, 7546045464940191451ull, 8354597865983499083ull, 4020874389905693530ull}}, {{2743873959327328018ull, 2410435406373925705ull, 9833309684667074831ull, 2513046493691058456ull}}, {{8041528467586547927ull, 16848102313249570843ull, 12291637105833843538ull, 3141308117113823070ull}}, {{5440224566055797004ull, 11836755854707187746ull, 6141174345437528615ull, 3926635146392278838ull}}, {{8011826372212261032ull, 14315501436833074197ull, 17673292021180619096ull, 2454146966495174273ull}}, {{14626468983692714194ull, 17894376796041342746ull, 8256556971193610158ull, 3067683708118967842ull}}, {{9059714192761116934ull, 13144598958196902625ull, 1097324177137236890ull, 3834604635148709803ull}}, {{17191536416544167844ull, 12827060367300452044ull, 16826728675206630720ull, 2396627896967943626ull}}, {{3042676446970658189ull, 16033825459125565056ull, 11810038807153512592ull, 2995784871209929533ull}}, {{3803345558713322736ull, 1595537750197404704ull, 927490453659727029ull, 3744731089012411917ull}}, {{2377090974195826710ull, 3303054103087071892ull, 2885524542751023345ull, 2340456930632757448ull}}, {{2971363717744783387ull, 8740503647286227769ull, 3606905678438779181ull, 2925571163290946810ull}}, {{8325890665608367138ull, 15537315577535172615ull, 13732004134903249784ull, 3656963954113683512ull}}, {{5795677313583071019ull, 974900398209414153ull, 17165005168629062231ull, 4571204942642104390ull}}, {{15151513367057889147ull, 7526841776521965701ull, 6116442211965775990ull, 2857003089151315244ull}}, {{5104333653540197721ull, 185180183797681319ull, 7645552764957219988ull, 3571253861439144055ull}}, {{1768731048497859248ull, 231475229747101649ull, 4945254937769137081ull, 4464067326798930069ull}}, {{12634671951379631790ull, 11673887064660408290ull, 5396627345319404627ull, 2790042079249331293ull}}, {{6569967902369763929ull, 9980672812398122459ull, 11357470200076643688ull, 3487552599061664116ull}}, {{3600773859534817007ull, 12475841015497653074ull, 14196837750095804610ull, 4359440748827080145ull}}, {{6862169680636648534ull, 12409086653113421075ull, 1955494566168796025ull, 2724650468016925091ull}}, {{3966026082368422763ull, 1676300261109612632ull, 16279426262993158744ull, 3405813085021156363ull}}, {{4957532602960528454ull, 2095375326387015790ull, 15737596810314060526ull, 4257266356276445454ull}}, {{16933515932132493996ull, 15144667634274048580ull, 5224311988018899924ull, 2660791472672778409ull}}, {{2720150841456065879ull, 484090469133009110ull, 11142076003451012810ull, 3325989340840973011ull}}, {{12623560588674858156ull, 9828485123271037195ull, 9315908985886378108ull, 4157486676051216264ull}}, {{5583882358708092396ull, 15366175238899174055ull, 5822443116178986317ull, 2598429172532010165ull}}, {{2368166929957727591ull, 5372660993341803857ull, 11889739913651120801ull, 3248036465665012706ull}}, {{7571894680874547392ull, 11327512260104642725ull, 5638802855209125193ull, 4060045582081265883ull}}, {{7038277184760286072ull, 162166134924319847ull, 1218408775292009294ull, 2537528488800791177ull}}, {{4186160462522969686ull, 9426079705510175617ull, 6134696987542399521ull, 3171910611000988971ull}}, {{9844386596581100012ull, 16394285650315107425ull, 3056685216000611497ull, 3964888263751236214ull}}, {{17681956668931657268ull, 3328899503805860284ull, 15745486315282545898ull, 2478055164844522633ull}}, {{3655701762455019968ull, 13384496416612101164ull, 5846799838821018660ull, 3097568956055653292ull}}, {{4569627203068774960ull, 16730620520765126455ull, 7308499798526273325ull, 3871961195069566615ull}}, {{9773546029559066206ull, 12762480834691897986ull, 11485341401720002684ull, 2419975746918479134ull}}, {{2993560500094056950ull, 15953101043364872483ull, 5133304715295227547ull, 3024969683648098918ull}}, {{17577008680399734899ull, 15329690285778702699ull, 15640002930973810242ull, 3781212104560123647ull}}, {{8679787416036140360ull, 14192742447039077091ull, 16692530859499713257ull, 2363257565350077279ull}}, {{6238048251617787546ull, 3905870003516682652ull, 16253977555947253668ull, 2954071956687596599ull}}, {{7797560314522234432ull, 4882337504395853315ull, 15705785926506679181ull, 3692589945859495749ull}}, {{2567632187362702568ull, 5357303949461102274ull, 12121959213280368440ull, 2307868716162184843ull}}, {{12432912271058154018ull, 6696629936826377842ull, 10540762998173072646ull, 2884835895202731054ull}}, {{6317768301967916715ull, 17594159457887748111ull, 3952581710861564999ull, 3606044869003413818ull}}, {{3285524359032507990ull, 17381013303932297235ull, 14164099175431732057ull, 4507556086254267272ull}}, {{18194353788891175158ull, 3945604287316603915ull, 8852561984644832536ull, 2817222553908917045ull}}, {{18131256217686581043ull, 4932005359145754894ull, 15677388499233428574ull, 3521528192386146306ull}}, {{13440698235253450496ull, 15388378735786969426ull, 10373363587187009909ull, 4401910240482682883ull}}, {{13012122415460794464ull, 11923579719080549843ull, 4177509232778187241ull, 2751193900301676802ull}}, {{11653467000898605176ull, 1069416593568523592ull, 14445258577827509860ull, 3438992375377096002ull}}, {{14566833751123256470ull, 1336770741960654490ull, 8833201185429611517ull, 4298740469221370003ull}}, {{13715957112879423198ull, 3141324722939103008ull, 3214907731679813246ull, 2686712793263356252ull}}, {{17144946391099278997ull, 13150027940528654568ull, 4018634664599766557ull, 3358390991579195315ull}}, {{2984438915164547130ull, 2602476870378654499ull, 411607312322320293ull, 4197988739473994144ull}}, {{18006175386473699620ull, 3932391053200353013ull, 257254570201450183ull, 2623742962171246340ull}}, {{8672661177809960813ull, 303802798073053363ull, 321568212751812729ull, 3279678702714057925ull}}, {{6229140453835063113ull, 4991439516018704608ull, 5013646284367153815ull, 4099598378392572406ull}}, {{3893212783646914446ull, 10037178725152772236ull, 16968586983011634846ull, 2562248986495357753ull}}, {{4866515979558643057ull, 3323101369586189487ull, 7375675673482379846ull, 3202811233119197192ull}}, {{1471458956020915917ull, 13377248748837512667ull, 9219594591852974807ull, 4003514041398996490ull}}, {{17060562912008930112ull, 15278309495664527272ull, 10373932638335497158ull, 2502196275874372806ull}}, {{2878959566301611024ull, 9874514832725883283ull, 3744043761064595640ull, 3127745344842966008ull}}, {{17433757513159177492ull, 12343143540907354103ull, 4680054701330744550ull, 3909681681053707510ull}}, {{17813627473365567789ull, 3102778694639708410ull, 16760092243613879056ull, 2443551050658567193ull}}, {{13043662304852183928ull, 3878473368299635513ull, 7115057249235185108ull, 3054438813323208992ull}}, {{2469519825783066198ull, 4848091710374544392ull, 8893821561543981385ull, 3818048516654011240ull}}, {{1543449891114416374ull, 14559272365052560005ull, 5558638475964988365ull, 2386280322908757025ull}}, {{6540998382320408371ull, 4364032401033536294ull, 11559984113383623361ull, 2982850403635946281ull}}, {{17399620014755286272ull, 10066726519719308271ull, 614922086447365489ull, 3728563004544932852ull}}, {{17792291536863135776ull, 17820919120893037429ull, 9607698340884379238ull, 2330351877840583032ull}}, {{8405306365796756008ull, 13052776864261520979ull, 12009622926105474048ull, 2912939847300728790ull}}, {{5894946938818557106ull, 16315971080326901224ull, 5788656620777066752ull, 3641174809125910988ull}}, {{7368683673523196382ull, 1948219776699074914ull, 7235820775971333441ull, 4551468511407388735ull}}, {{9217113314379385643ull, 12746852406505391581ull, 11439917012623165256ull, 2844667819629617959ull}}, {{16133077661401619958ull, 15933565508131739476ull, 9688210247351568666ull, 3555834774537022449ull}}, {{1719603003042473331ull, 10693584848309898538ull, 16721948827616848737ull, 4444793468171278061ull}}, {{5686437895328933736ull, 18212705576262156346ull, 12757061026474224412ull, 2777995917607048788ull}}, {{16331419406015942978ull, 4319137896618143816ull, 15946326283092780516ull, 3472494897008810985ull}}, {{1967530183810377106ull, 5398922370772679771ull, 6097849798583811933ull, 4340618621261013732ull}}, {{17370607429377343356ull, 5680169490946618808ull, 13034528160969658266ull, 2712886638288133582ull}}, {{3266515213012127578ull, 16323583900538049319ull, 7069788164357297024ull, 3391108297860166978ull}}, {{17918202071547323185ull, 1957735801963010032ull, 18060607242301397089ull, 4238885372325208722ull}}, {{11198876294717076991ull, 12752799922295351030ull, 15899565544865761084ull, 2649303357703255451ull}}, {{4775223331541570430ull, 15940999902869188788ull, 15262770912654813451ull, 3311629197129069314ull}}, {{5969029164426963038ull, 15314563860159098081ull, 9855091603963741006ull, 4139536496411336643ull}}, {{15259858273835321659ull, 4959916394172048396ull, 3853589243263644177ull, 2587210310257085402ull}}, {{628078768584600457ull, 10811581511142448400ull, 14040358590934331029ull, 3234012887821356752ull}}, {{785098460730750572ull, 18126162907355448404ull, 17550448238667913786ull, 4042516109776695940ull}}, {{9714058574811494915ull, 15940537835524543156ull, 1745658112312670308ull, 2526572568610434963ull}}, {{12142573218514368644ull, 1478928220696127329ull, 16017130695673001598ull, 3158215710763043703ull}}, {{1343158467860797093ull, 11072032312724934970ull, 15409727351163864093ull, 3947769638453804629ull}}, {{5451160060840386087ull, 9225863204666778308ull, 11936922603691109010ull, 2467356024033627893ull}}, {{6813950076050482609ull, 2308956968978697077ull, 1086095199331722551ull, 3084195030042034867ull}}, {{13129123613490491165ull, 16721254266505535058ull, 15192677054446816900ull, 3855243787552543583ull}}, {{12817388276858944882ull, 1227411879711183603ull, 16412952186670342419ull, 2409527367220339739ull}}, {{11410049327646293199ull, 15369322904921143216ull, 15904504214910540119ull, 3011909209025424674ull}}, {{14262561659557866498ull, 14599967612724041116ull, 10657258231783399341ull, 3764886511281780843ull}}, {{18137473074078442370ull, 11430822767166219649ull, 4354943385650930636ull, 2353054069551113027ull}}, {{8836783287315889250ull, 14288528458957774562ull, 831993213636275391ull, 2941317586938891284ull}}, {{1822607072290085754ull, 13248974555269830299ull, 1039991517045344239ull, 3676646983673614105ull}}, {{16113316895644770905ull, 11949532175659899969ull, 5911675414734068203ull, 4595808729592017631ull}}, {{3153294032136899960ull, 5162614600573743529ull, 10612326161849874483ull, 2872380455995011019ull}}, {{8553303558598512854ull, 1841582232289791507ull, 8653721683884955200ull, 3590475569993763774ull}}, {{6079943429820753163ull, 2301977790362239384ull, 1593780068001418192ull, 4488094462492204718ull}}, {{3799964643637970727ull, 1438736118976399615ull, 14831170597783050082ull, 2805059039057627948ull}}, {{138269786120075505ull, 11021792185575275327ull, 92219173519260986ull, 3506323798822034936ull}}, {{14007895287932258093ull, 4553868195114318350ull, 115273966899076233ull, 4382904748527543670ull}}, {{4143248536530273404ull, 14375382668014918729ull, 13907104284594086357ull, 2739315467829714793ull}}, {{9790746689090229659ull, 4134170279736484699ull, 3548822300460444235ull, 3424144334787143492ull}}, {{7626747342935399170ull, 556026831243217970ull, 4436027875575555294ull, 4280180418483929365ull}}, {{9378403107762012385ull, 14182574824809174943ull, 5078360431448416010ull, 2675112761552455853ull}}, {{7111317866275127577ull, 8504846494156692871ull, 10959636557737907917ull, 3343890951940569816ull}}, {{4277461314416521568ull, 15242744136123253993ull, 13699545697172384896ull, 4179863689925712270ull}}, {{14202628367578795740ull, 9526715085077033745ull, 3950530042305352656ull, 2612414806203570169ull}}, {{3918227404191330963ull, 11908393856346292182ull, 9549848571309078724ull, 3265518507754462711ull}}, {{14121156292093939511ull, 14885492320432865227ull, 7325624695708960501ull, 4081898134693078389ull}}, {{6519879673345018243ull, 11609275709484234719ull, 6884358444031794265ull, 2551186334183173993ull}}, {{3538163573253884899ull, 676536581573129687ull, 13217134073467130736ull, 3188982917728967491ull}}, {{18257762521849519836ull, 845670726966412108ull, 11909731573406525516ull, 3986228647161209364ull}}, {{2187729539301174090ull, 9751916241208783376ull, 16666954270233854255ull, 2491392904475755852ull}}, {{2734661924126467612ull, 7578209283083591316ull, 2386948764082766203ull, 3114241130594694816ull}}, {{3418327405158084515ull, 4861075585427101241ull, 2983685955103457754ull, 3892801413243368520ull}}, {{13665669674292272582ull, 7649858259319326179ull, 1864803721939661096ull, 2433000883277105325ull}}, {{12470401074437952823ull, 9562322824149157724ull, 6942690670851964274ull, 3041251104096381656ull}}, {{15588001343047441029ull, 2729531493331671347ull, 8678363338564955343ull, 3801563880120477070ull}}, {{7436657830190956691ull, 8623486210973376448ull, 812291068175709185ull, 2375977425075298169ull}}, {{9295822287738695864ull, 15391043782144108464ull, 5627049853647024385ull, 2969971781344122711ull}}, {{11619777859673369830ull, 5403746672397971868ull, 2422126298631392578ull, 3712464726680153389ull}}, {{16485733199150631952ull, 7989027688676120321ull, 3819671945858314313ull, 2320290454175095868ull}}, {{6772108443656126228ull, 14597970629272538306ull, 4774589932322892891ull, 2900363067718869835ull}}, {{17688507591424933593ull, 13635777268163284978ull, 1356551396976228210ull, 3625453834648587294ull}}, {{12887262452426391183ull, 7821349548349330415ull, 10919061283075061071ull, 4531817293310734117ull}}, {{14972068060407576345ull, 11805872495359413365ull, 9130256311135607121ull, 2832385808319208823ull}}, {{4880027020227306720ull, 922282563917102995ull, 6801134370492120998ull, 3540482260399011029ull}}, {{1488347756856745495ull, 10376225241751154552ull, 13113103981542539151ull, 4425602825498763786ull}}, {{930217348035465935ull, 13402669803735553451ull, 12807376006891474873ull, 2766001765936727366ull}}, {{14997829740326496130ull, 2918279199387278101ull, 6785847971759567784ull, 3457502207420909208ull}}, {{4912229120125956451ull, 3647848999234097627ull, 8482309964699459730ull, 4321877759276136510ull}}, {{764300190865028830ull, 6891591642948698921ull, 689757709509774427ull, 2701173599547585319ull}}, {{5567061257008673941ull, 4002803535258485747ull, 14697255192169381746ull, 3376466999434481648ull}}, {{2347140552833454522ull, 14226876455927882992ull, 18371568990211727182ull, 4220583749293102060ull}}, {{1466962845520909077ull, 4280111766527538966ull, 2258858582027553681ull, 2637864843308188788ull}}, {{11057075593755912154ull, 9961825726586811611ull, 2823573227534442101ull, 3297331054135235985ull}}, {{9209658473767502288ull, 17063968176660902418ull, 8141152552845440530ull, 4121663817669044981ull}}, {{10367722564532076834ull, 15276666128840451915ull, 7394063354742094283ull, 2576039886043153113ull}}, {{8347967187237708139ull, 14484146642623176990ull, 13854265211855005758ull, 3220049857553941391ull}}, {{1211586947192359365ull, 8881811266424195430ull, 12706145496391369294ull, 4025062321942426739ull}}, {{14592299897277388315ull, 939446023087734239ull, 5635497926030911857ull, 2515663951214016712ull}}, {{13628688853169347490ull, 5785993547287055703ull, 7044372407538639821ull, 3144579939017520890ull}}, {{12424175048034296459ull, 11844177952536207533ull, 18028837546278075584ull, 3930724923771901112ull}}, {{10070952414235129239ull, 7402611220335129708ull, 11268023466423797240ull, 2456703077357438195ull}}, {{12588690517793911548ull, 9253264025418912135ull, 9473343314602358646ull, 3070878846696797744ull}}, {{11124177128815001531ull, 2343207994918864361ull, 11841679143252948308ull, 3838598558370997180ull}}, {{35081677868294101ull, 10687877033679066034ull, 16624421501387868500ull, 2399124098981873237ull}}, {{9267224134190143434ull, 13359846292098832542ull, 6945468821452671913ull, 2998905123727341547ull}}, {{2360658130882903485ull, 2864749809841376966ull, 4070150008388451988ull, 3748631404659176934ull}}, {{15310469387083978390ull, 11013840668005636411ull, 16378901810524946204ull, 2342894627911985583ull}}, {{14526400715427585084ull, 13767300835007045514ull, 15861941244728794851ull, 2928618284889981979ull}}, {{8934628857429705547ull, 12597440025331418989ull, 15215740537483605660ull, 3660772856112477474ull}}, {{15779972090214519837ull, 15746800031664273736ull, 9796303634999731267ull, 4575966070140596843ull}}, {{9862482556384074898ull, 7535907010576477133ull, 3816846762661138090ull, 2859978793837873027ull}}, {{16939789213907481527ull, 196511726365820608ull, 159372434899034709ull, 3574973492297341284ull}}, {{2727992443674800292ull, 4857325676384663665ull, 199215543623793386ull, 4468716865371676605ull}}, {{13234210323365219943ull, 7647514566167802694ull, 2430352723978564818ull, 2792948040857297878ull}}, {{7319390867351749121ull, 336021170854977560ull, 12261312941827981831ull, 3491185051071622347ull}}, {{9149238584189686401ull, 14255084518850885662ull, 10714955158857589384ull, 4363981313839527934ull}}, {{1106588096691166097ull, 8909427824281803539ull, 2085160955858605461ull, 2727488321149704959ull}}, {{15218293176146121333ull, 15748470798779642327ull, 16441509250105420538ull, 3409360401437131198ull}}, {{14411180451755263762ull, 10462216461619777101ull, 11328514525776999865ull, 4261700501796413998ull}}, {{11312830791560733803ull, 18068100334580830448ull, 2468635560183237011ull, 2663562813622758749ull}}, {{14141038489450917254ull, 17973439399798650156ull, 7697480468656434168ull, 3329453517028448436ull}}, {{17676298111813646567ull, 4020055176038761079ull, 9621850585820542711ull, 4161816896285560545ull}}, {{17965215347524610961ull, 9430063512665307530ull, 17542871662206308954ull, 2601135560178475340ull}}, {{13233147147550987893ull, 2564207353976858605ull, 3481845504048334577ull, 3251419450223094176ull}}, {{2706375879156571154ull, 7816945210898461161ull, 4352306880060418221ull, 4064274312778867720ull}}, {{13220699970541326731ull, 7191433766025232177ull, 2720191800037761388ull, 2540171445486792325ull}}, {{2690816907894494702ull, 8989292207531540222ull, 8011925768474589639ull, 3175214306858490406ull}}, {{12586893171722894185ull, 6624929240987037373ull, 791535173738461241ull, 3969017883573113008ull}}, {{10172651241540502818ull, 15669795821685368118ull, 494709483586538275ull, 2480636177233195630ull}}, {{3492442015070852714ull, 14975558758679322244ull, 9841758891337948652ull, 3100795221541494537ull}}, {{4365552518838565893ull, 272704374639601189ull, 16913884632599823720ull, 3875994026926868171ull}}, {{5034313333487797635ull, 170440234149750743ull, 8265334886161195873ull, 2422496266829292607ull}}, {{1681205648432359140ull, 4824736311114576333ull, 5719982589274106937ull, 3028120333536615759ull}}, {{6713193078967836829ull, 10642606407320608320ull, 2538292218165245767ull, 3785150416920769699ull}}, {{4195745674354898018ull, 13569158032216462056ull, 17727333700849136268ull, 2365719010575481061ull}}, {{5244682092943622523ull, 16961447540270577570ull, 8324109070779256623ull, 2957148763219351327ull}}, {{15779224653034303961ull, 16590123406910834058ull, 5793450320046682875ull, 3696435954024189159ull}}, {{14473701426573827880ull, 8062984120105577334ull, 10538435477670258653ull, 2310272471265118224ull}}, {{8868754746362509042ull, 14690416168559359572ull, 13173044347087823316ull, 2887840589081397780ull}}, {{11085943432953136302ull, 18363020210699199465ull, 16466305433859779145ull, 3609800736351747225ull}}, {{22371235909256665ull, 9118717208091835620ull, 6747823737042560220ull, 4512250920439684032ull}}, {{9237354059298061224ull, 14922570291912173070ull, 4217389835651600137ull, 2820156825274802520ull}}, {{2323320537267800722ull, 4818154809608052626ull, 5271737294564500172ull, 3525196031593503150ull}}, {{12127522708439526710ull, 6022693512010065782ull, 15813043655060401023ull, 4406495039491878937ull}}, {{2968015674347316290ull, 10681712472647372970ull, 2965623256771668783ull, 2754059399682424336ull}}, {{12933391629788921171ull, 8740454572381828308ull, 3707029070964585979ull, 3442574249603030420ull}}, {{16166739537236151463ull, 6313882197049897481ull, 4633786338705732474ull, 4303217812003788025ull}}, {{3186683183131512809ull, 8557862391583573830ull, 14425331507759552556ull, 2689511132502367515ull}}, {{13206726015769166819ull, 10697327989479467287ull, 13419978366272052791ull, 3361888915627959394ull}}, {{11896721501284070619ull, 8759973968421946205ull, 7551600920985290181ull, 4202361144534949243ull}}, {{9741293947516238089ull, 7780826739477410330ull, 2413907566402112411ull, 2626475715334343277ull}}, {{2953245397540521803ull, 5114347405919375009ull, 7629070476430028418ull, 3283094644167929096ull}}, {{8303242765353040158ull, 15616306294253994569ull, 9536338095537535522ull, 4103868305209911370ull}}, {{16718741774414119859ull, 14371877452336134509ull, 10571897328138347605ull, 2564917690756194606ull}}, {{7063369162735486112ull, 4129788760138004425ull, 3991499623318158699ull, 3206147113445243258ull}}, {{13440897471846745543ull, 550549931745117627ull, 14212746566002474182ull, 4007683891806554072ull}}, {{6094717910690522013ull, 14179151762622862229ull, 8882966603751546363ull, 2504802432379096295ull}}, {{12230083406790540420ull, 13112253684851189882ull, 6492022236262045050ull, 3131003040473870369ull}}, {{6064232221633399717ull, 7166945069209211545ull, 12726713813754944217ull, 3913753800592337961ull}}, {{15319360184589344583ull, 16008555714324226975ull, 1036667105955758279ull, 2446096125370211226ull}}, {{14537514212309292825ull, 15399008624477895815ull, 10519205919299473657ull, 3057620156712764032ull}}, {{13560206746959228127ull, 5413702725315206057ull, 13149007399124342072ull, 3822025195890955040ull}}, {{1557600189208435723ull, 3383564203322003786ull, 8218129624452713795ull, 2388765747431846900ull}}, {{11170372273365320462ull, 18064513309434668444ull, 10272662030565892243ull, 2985957184289808625ull}}, {{13962965341706650578ull, 17968955618365947651ull, 17452513556634753208ull, 3732446480362260781ull}}, {{6421010329352962659ull, 11230597261478717282ull, 13213663982110414707ull, 2332779050226412988ull}}, {{17249634948545979132ull, 9426560558421008698ull, 16517079977638018384ull, 2915973812783016235ull}}, {{12338671648827698107ull, 11783200698026260873ull, 16034663953620135076ull, 3644967265978770294ull}}, {{1588281505752458921ull, 14729000872532826092ull, 10819957905170393037ull, 4556209082473462868ull}}, {{10216047977950062634ull, 11511468554546710259ull, 15985845727586271456ull, 2847630676545914292ull}}, {{8158373954010190388ull, 14389335693183387824ull, 1535563085773287704ull, 3559538345682392866ull}}, {{10197967442512737985ull, 17986669616479234780ull, 11142825894071385438ull, 4449422932102991082ull}}, {{15597101688425237049ull, 6629982491872133833ull, 11575952202222003803ull, 2780889332564369426ull}}, {{5661319055249382599ull, 3675792096412779388ull, 5246568215922728946ull, 3476111665705461783ull}}, {{7076648819061728249ull, 13818112157370750043ull, 1946524251476023278ull, 4345139582131827229ull}}, {{2117062502699886204ull, 4024634079929330873ull, 3522420666386208501ull, 2715712238832392018ull}}, {{7258014146802245659ull, 9642478618339051495ull, 13626397869837536434ull, 3394640298540490022ull}}, {{4460831665075419169ull, 2829726236069038561ull, 7809625300442144735ull, 4243300373175612528ull}}, {{14317234836740606741ull, 8686107925184230956ull, 4881015812776340459ull, 2652062733234757830ull}}, {{17896543545925758426ull, 6245948888052900791ull, 15324641802825201382ull, 3315078416543447287ull}}, {{17758993413979810128ull, 17030808146920901797ull, 14544116235104113823ull, 4143848020679309109ull}}, {{13405213892951075282ull, 17561784119466645479ull, 11395915656153765091ull, 2589905012924568193ull}}, {{12144831347761456199ull, 17340544130905918945ull, 409836514910042652ull, 3237381266155710242ull}}, {{1345981129419656536ull, 3228936089922847066ull, 9735667680492329124ull, 4046726582694637802ull}}, {{5452924224314673239ull, 11241457093056555224ull, 10696478318735093606ull, 2529204114184148626ull}}, {{6816155280393341549ull, 4828449329465918222ull, 4147225861564091200ull, 3161505142730185783ull}}, {{17743566137346452744ull, 6035561661832397777ull, 572346308527726096ull, 3951881428412732229ull}}, {{4172199808200451109ull, 3772226038645248611ull, 2663559452043522762ull, 2469925892757957643ull}}, {{603563741823175983ull, 13938654585161336572ull, 17164507370336567164ull, 3087407365947447053ull}}, {{754454677278969978ull, 17423318231451670715ull, 7620576157638545243ull, 3859259207434308817ull}}, {{16612435237795213901ull, 8583730885443600244ull, 16292075144592560537ull, 2412037004646443010ull}}, {{2318799973534465760ull, 15341349625231888210ull, 11141721893885924863ull, 3015046255808053763ull}}, {{12121872003772858007ull, 14565001013112472358ull, 9315466348930018175ull, 3768807819760067204ull}}, {{2964483983930648351ull, 16020654660836377080ull, 15045538504936037167ull, 2355504887350042002ull}}, {{3705604979913310438ull, 15414132307618083446ull, 9583551094315270651ull, 2944381109187552503ull}}, {{13855378261746413856ull, 14655979366095216403ull, 7367752849466700410ull, 3680476386484440629ull}}, {{12707536808755629416ull, 9096602170764244696ull, 13821377080260763417ull, 4600595483105550786ull}}, {{7942210505472268385ull, 17214591402796122695ull, 13250046693590365039ull, 2875372176940969241ull}}, {{5316077113412947577ull, 16906553235067765465ull, 2727500311705792587ull, 3594215221176211552ull}}, {{11256782410193572375ull, 16521505525407318927ull, 3409375389632240734ull, 4492769026470264440ull}}, {{13953018034012064591ull, 5714254934952186425ull, 2130859618520150459ull, 2807980641543915275ull}}, {{3606214487232917026ull, 2531132650262845128ull, 16498632578432351786ull, 3509975801929894093ull}}, {{4507768109041146283ull, 12387287849683332218ull, 6788232667758276020ull, 4387469752412367617ull}}, {{7429041086578104331ull, 16965426942906858444ull, 15771860463417392272ull, 2742168595257729760ull}}, {{9286301358222630413ull, 2760039604924021439ull, 1268081505562188725ull, 3427710744072162201ull}}, {{6996190679350900113ull, 8061735524582414703ull, 6196787900380123810ull, 4284638430090202751ull}}, {{11290148202235394427ull, 9650270721291397093ull, 10790521465378659237ull, 2677899018806376719ull}}, {{277627197512079321ull, 16674524420041634271ull, 8876465813295936142ull, 3347373773507970899ull}}, {{14182092052172262863ull, 11619783488197267030ull, 6483896248192532274ull, 4184217216884963624ull}}, {{4252121514180276386ull, 11874050698550679798ull, 4052435155120332671ull, 2615135760553102265ull}}, {{14538523929580121290ull, 10230877354760961843ull, 9677229962327803743ull, 3268919700691377831ull}}, {{13561468893547763708ull, 8176910675023814400ull, 7484851434482366775ull, 4086149625864222289ull}}, {{8475918058467352318ull, 12028098199530965856ull, 16207247192619948994ull, 2553843516165138930ull}}, {{10594897573084190397ull, 5811750712558931512ull, 11035686953920160435ull, 3192304395206423663ull}}, {{13243621966355237997ull, 2653002372271276486ull, 9182922673972812640ull, 3990380494008029579ull}}, {{3665577710544635844ull, 1658126482669547804ull, 3433483662019313948ull, 2493987808755018487ull}}, {{4581972138180794805ull, 2072658103336934755ull, 18126912632806306147ull, 3117484760943773108ull}}, {{1115779154298605602ull, 16425880684453332156ull, 4211896717298331067ull, 3896855951179716386ull}}, {{9920734008291404309ull, 7960332418569638645ull, 7244121466738844821ull, 2435534969487322741ull}}, {{17012603528791643291ull, 14562101541639436210ull, 13666837851850943930ull, 3044418711859153426ull}}, {{12042382374134778305ull, 8979254890194519455ull, 7860175277958904105ull, 3805523389823941783ull}}, {{14444018011475318297ull, 17141249352440044419ull, 11830138576365396921ull, 2378452118639963614ull}}, {{13443336495916759967ull, 7591503635267891812ull, 5564301183601970344ull, 2973065148299954518ull}}, {{16804170619895949959ull, 9489379544084864765ull, 16178748516357238738ull, 3716331435374943147ull}}, {{12808449646648662676ull, 10542548233480428382ull, 7805874813509580259ull, 2322707147109339467ull}}, {{6787190021456052537ull, 8566499273423147574ull, 5145657498459587420ull, 2903383933886674334ull}}, {{17707359563674841480ull, 10708124091778934467ull, 15655443909929260083ull, 3629229917358342917ull}}, {{17522513436166163945ull, 8773469096296280180ull, 5734246832129411392ull, 4536537396697928647ull}}, {{1728198860749076658ull, 5483418185185175113ull, 10501433297721963976ull, 2835335872936205404ull}}, {{6771934594363733726ull, 6854272731481468891ull, 13126791622152454970ull, 3544169841170256755ull}}, {{3853232224527279254ull, 17791212951206611922ull, 11796803509263180808ull, 4430212301462820944ull}}, {{7019956158756937438ull, 11119508094504132451ull, 7373002193289488005ull, 2768882688414263090ull}}, {{4163259180018783893ull, 64327062848001852ull, 18439624778466635815ull, 3461103360517828862ull}}, {{5204073975023479866ull, 13915466883842166027ull, 13826158936228518960ull, 4326379200647286078ull}}, {{946703225175980965ull, 8697166802401353767ull, 4029663316715436446ull, 2703987000404553799ull}}, {{15018437086752139918ull, 1648086466146916400ull, 425393127466907654ull, 3379983750505692249ull}}, {{326302284730623281ull, 11283480119538421309ull, 5143427427761022471ull, 4224979688132115311ull}}, {{2509781937170333503ull, 13969704102352595174ull, 10132171169991720900ull, 2640612305082572069ull}}, {{12360599458317692686ull, 17462130127940743967ull, 17276899980917039029ull, 3300765381353215086ull}}, {{10839063304469727954ull, 7992604604643766247ull, 12372752939291522979ull, 4125956726691518858ull}}, {{13691943592934661827ull, 2689534868688659952ull, 12344656605484589766ull, 2578722954182199286ull}}, {{17114929491168327284ull, 12585290622715600748ull, 6207448720000961399ull, 3223403692727749108ull}}, {{2946917790250857489ull, 11119927259967113032ull, 7759310900001201749ull, 4029254615909686385ull}}, {{1841823618906785931ull, 9255797546693139597ull, 16378784358569220853ull, 2518284134943553990ull}}, {{6913965542060870317ull, 16181432951793812400ull, 11250108411356750258ull, 3147855168679442488ull}}, {{8642456927576087897ull, 11003419152887489692ull, 14062635514195937823ull, 3934818960849303110ull}}, {{14624907616589830744ull, 13794665998195762913ull, 4177461177945073235ull, 2459261850530814444ull}}, {{4446076465455124717ull, 12631646479317315738ull, 5221826472431341544ull, 3074077313163518055ull}}, {{14780967618673681704ull, 15789558099146644672ull, 1915597072111789026ull, 3842596641454397569ull}}, {{9238104761671051065ull, 14480159830394040824ull, 12726463216138337901ull, 2401622900908998480ull}}, {{11547630952088813832ull, 4265141732710387318ull, 15908079020172922377ull, 3002028626136248100ull}}, {{5211166653256241482ull, 9943113184315372052ull, 1438354701506601355ull, 3752535782670310126ull}}, {{12480351195139926734ull, 3908602730983413580ull, 14734029743723789559ull, 2345334864168943828ull}}, {{15600438993924908418ull, 274067395301879071ull, 18417537179654736949ull, 2931668580211179785ull}}, {{14888862723978747618ull, 4954270262554736743ull, 9186863419286257474ull, 3664585725263974732ull}}, {{13999392386546046618ull, 15416209865048196737ull, 11483579274107821842ull, 4580732156579968415ull}}, {{1832091213950197281ull, 14246817184082510865ull, 14094766073958470507ull, 2862957597862480259ull}}, {{6901800035865134505ull, 13196835461675750677ull, 13006771574020700230ull, 3578696997328100324ull}}, {{13238936063258806035ull, 7272672290239912538ull, 16258464467525875288ull, 4473371246660125405ull}}, {{12886021057964141676ull, 4545420181399945336ull, 12467383301417366007ull, 2795857029162578378ull}}, {{16107526322455177095ull, 1070089208322543766ull, 6360857089916931701ull, 3494821286453222973ull}}, {{10911035866214195560ull, 5949297528830567612ull, 12562757380823552530ull, 4368526608066528716ull}}, {{16042769453238648033ull, 8329996973946492661ull, 17075095399869496139ull, 2730329130041580447ull}}, {{6218403761266146329ull, 5800810199005727923ull, 16732183231409482270ull, 3412911412551975559ull}}, {{3161318683155295008ull, 16474384785611935712ull, 16303543020834464933ull, 4266139265689969449ull}}, {{1975824176972059380ull, 12602333500221153772ull, 3272185360380458727ull, 2666337041056230906ull}}, {{2469780221215074225ull, 11141230856849054311ull, 13313603737330349217ull, 3332921301320288632ull}}, {{16922283331801006493ull, 91480515779154176ull, 16642004671662936522ull, 4166151626650360790ull}}, {{10576427082375629058ull, 4668861340789359264ull, 5789566901361947422ull, 2603844766656475494ull}}, {{13220533852969536323ull, 15059448712841474888ull, 16460330663557210085ull, 3254805958320594367ull}}, {{16525667316211920403ull, 4989252835769679898ull, 15963727311019124703ull, 4068507447900742959ull}}, {{14940228091059838156ull, 10035812049997131792ull, 16894858597028034795ull, 2542817154937964349ull}}, {{228541040115246079ull, 7933079044069026837ull, 7283515191002879782ull, 3178521443672455437ull}}, {{4897362318571445503ull, 692976768231507738ull, 13716080007180987632ull, 3973151804590569296ull}}, {{7672537467534541343ull, 433110480144692336ull, 8572550004488117270ull, 2483219877869105810ull}}, {{9590671834418176679ull, 9764760137035641228ull, 1492315468755370779ull, 3104024847336382263ull}}, {{11988339793022720849ull, 7594264152867163631ull, 15700452391226377186ull, 3880031059170477828ull}}, {{14410241398280282387ull, 9358101113969365173ull, 589410707661709933ull, 2425019411981548643ull}}, {{4177743692568189271ull, 16309312410889094371ull, 14571821439859301128ull, 3031274264976935803ull}}, {{610493597282848685ull, 1939896439901816348ull, 13603090781396738507ull, 3789092831221169754ull}}, {{9604930535156556236ull, 17353336339434492881ull, 13113617756800349470ull, 2368183019513231096ull}}, {{16617849187373083199ull, 12468298387438340293ull, 16392022196000436838ull, 2960228774391538870ull}}, {{6937253428934190287ull, 6362000947443149559ull, 11266655708145770240ull, 3700285967989423588ull}}, {{11253312420724950786ull, 3976250592151968474ull, 16265031854445882208ull, 2312678729993389742ull}}, {{4843268489051412674ull, 4970313240189960593ull, 11107917781202576952ull, 2890848412491737178ull}}, {{10665771629741653746ull, 6212891550237450741ull, 4661525189648445382ull, 3613560515614671473ull}}, {{17943900555604455087ull, 16989486474651589234ull, 10438592505487944631ull, 4516950644518339341ull}}, {{15826623865680172333ull, 17535958074298325127ull, 8829963325143659346ull, 2823094152823962088ull}}, {{15171593813672827512ull, 12696575556018130601ull, 11037454156429574183ull, 3528867691029952610ull}}, {{5129434211808870678ull, 11259033426595275348ull, 4573445658682191921ull, 4411084613787440763ull}}, {{12429268419235319982ull, 119366863980965236ull, 552560527462675999ull, 2756927883617150477ull}}, {{15536585524044149978ull, 13984266635258370257ull, 5302386677755732902ull, 3446159854521438096ull}}, {{5585673849773023760ull, 8256961257218187014ull, 6627983347194666128ull, 4307699818151797620ull}}, {{17326104211390303562ull, 5160600785761366883ull, 13365861628851442138ull, 2692312386344873512ull}}, {{17045944245810491549ull, 15674123019056484412ull, 16707327036064302672ull, 3365390482931091890ull}}, {{2860686233553562820ull, 1145909700111053900ull, 11660786758225602533ull, 4206738103663864863ull}}, {{11011300932825752570ull, 3022036571783102639ull, 14205520751532083439ull, 2629211314789915539ull}}, {{9152440147604802809ull, 17612603770011042011ull, 13145214920987716394ull, 3286514143487394424ull}}, {{6828864166078615607ull, 12792382675659026706ull, 16431518651234645493ull, 4108142679359243030ull}}, {{8879726122226522659ull, 10301082181500585643ull, 5658013138594265529ull, 2567589174599526894ull}}, {{6487971634355765419ull, 17488038745303119958ull, 16295888460097607719ull, 3209486468249408617ull}}, {{17333336579799482582ull, 17248362413201512043ull, 6534802519839845937ull, 4011858085311760772ull}}, {{8527492353160982662ull, 3862697480609863171ull, 13307623611754679519ull, 2507411303319850482ull}}, {{6047679423023840423ull, 216685832334941060ull, 7411157477838573591ull, 3134264129149813103ull}}, {{7559599278779800529ull, 14105915345700840037ull, 4652260828870829084ull, 3917830161437266379ull}}, {{7030592558451069283ull, 18039569127917800831ull, 601820008830574225ull, 2448643850898291487ull}}, {{4176554679636448699ull, 8714403354615087327ull, 14587333066320381494ull, 3060804813622864358ull}}, {{609007331118172970ull, 1669632156414083351ull, 9010794296045701060ull, 3826006017028580448ull}}, {{7298158609589939962ull, 10266892134613577902ull, 5631746435028563162ull, 2391253760642862780ull}}, {{18346070298842200761ull, 3610243131412196569ull, 7039683043785703953ull, 2989067200803578475ull}}, {{9097529818270587239ull, 9124489932692633616ull, 4187917786304742037ull, 3736334001004473094ull}}, {{5685956136419117025ull, 8008649217146589962ull, 16452506671722627485ull, 2335208750627795683ull}}, {{16330817207378672089ull, 14622497539860625356ull, 15953947321225896452ull, 2919010938284744604ull}}, {{1966777435513788495ull, 18278121924825781696ull, 1495690077822818949ull, 3648763672855930756ull}}, {{2458471794392235618ull, 9012594350750063408ull, 1869612597278523687ull, 4560954591069913445ull}}, {{1536544871495147261ull, 12550400496859871486ull, 3474350882512771256ull, 2850596619418695903ull}}, {{11144053126223709885ull, 15688000621074839357ull, 18177996658423127782ull, 3563245774273369878ull}}, {{95008352497473644ull, 10386628739488773389ull, 13499123786174133920ull, 4454057217841712348ull}}, {{2365223229524614980ull, 6491642962180483368ull, 17660324403213609508ull, 2783785761151070217ull}}, {{2956529036905768724ull, 8114553702725604210ull, 8240347448734848173ull, 3479732201438837772ull}}, {{12919033332986986713ull, 14754878146834393166ull, 10300434310918560216ull, 4349665251798547215ull}}, {{3462709814689478792ull, 9221798841771495729ull, 13355300471965181991ull, 2718540782374092009ull}}, {{8940073286789236394ull, 6915562533786981757ull, 2859067534674313777ull, 3398175977967615012ull}}, {{15786777626913933396ull, 13256139185661115100ull, 3573834418342892221ull, 4247719972459518765ull}}, {{643363979966432565ull, 10590930000251890890ull, 4539489520678001590ull, 2654824982787199228ull}}, {{10027577011812816514ull, 4015290463460087804ull, 5674361900847501988ull, 3318531228483999035ull}}, {{12534471264766020642ull, 5019113079325109755ull, 2481266357631989581ull, 4148164035604998794ull}}, {{5528201531265068950ull, 5442788683791887549ull, 6162477491947381392ull, 2592602522253124246ull}}, {{11521937932508724091ull, 6803485854739859436ull, 16926468901789002548ull, 3240753152816405307ull}}, {{14402422415635905113ull, 8504357318424824295ull, 16546400108808865281ull, 4050941441020506634ull}}, {{15919043037413522552ull, 16844438370083984944ull, 14953186086432928704ull, 2531838400637816646ull}}, {{1452059723057351574ull, 2608803888895429565ull, 9468110571186385073ull, 3164798000797270808ull}}, {{6426760672249077371ull, 7872690879546674860ull, 11835138213982981341ull, 3955997500996588510ull}}, {{13240097457010449165ull, 7226274808930365739ull, 2785275365311975434ull, 2472498438122867819ull}}, {{11938435802835673552ull, 18256215548017732982ull, 17316652261922133004ull, 3090623047653584773ull}}, {{5699672716689816132ull, 4373525361312614612ull, 7810757272120502544ull, 3863278809566980967ull}}, {{12785667484785910891ull, 2733453350820384132ull, 11799252322716395946ull, 2414549255979363104ull}}, {{15982084355982388614ull, 12640188725380255973ull, 14749065403395494932ull, 3018186569974203880ull}}, {{6142547389695822055ull, 15800235906725319967ull, 18436331754244368665ull, 3772733212467754850ull}}, {{10756621146200970640ull, 2957618414062243123ull, 16134393364830118320ull, 2357958257792346781ull}}, {{8834090414323825396ull, 3697023017577803904ull, 6332933650755484188ull, 2947447822240433477ull}}, {{11042613017904781745ull, 4621278771972254880ull, 12527853081871743139ull, 3684309777800541846ull}}, {{13803266272380977182ull, 1164912446537930696ull, 6436444315484903116ull, 4605387222250677308ull}}, {{8627041420238110739ull, 9951442315940982493ull, 13246149734032840255ull, 2878367013906673317ull}}, {{15395487793725026327ull, 7827616876498840212ull, 2722629112258886607ull, 3597958767383341647ull}}, {{797615668446731293ull, 5172835077196162362ull, 17238344445605771971ull, 4497448459229177058ull}}, {{5110195811206594962ull, 927178914033907524ull, 15385651296930995386ull, 2810905287018235661ull}}, {{6387744764008243703ull, 10382345679397160213ull, 5397006065881580520ull, 3513631608772794577ull}}, {{12596366973437692532ull, 12977932099246450266ull, 11357943600779363554ull, 4392039510965993221ull}}, {{12484415376825945737ull, 12722893580456419320ull, 9404557759700796173ull, 2745024694353745763ull}}, {{15605519221032432171ull, 2068558920288360438ull, 7144011181198607313ull, 3431280867942182204ull}}, {{10283526989435764406ull, 7197384668787838452ull, 8930013976498259141ull, 4289101084927727755ull}}, {{15650576405252128562ull, 6804208427206092984ull, 3275415726097718011ull, 2680688178079829847ull}}, {{1116476432855609086ull, 3893574515580228327ull, 17929327712904311226ull, 3350860222599787308ull}}, {{15230653596351675069ull, 14090340181330061216ull, 3964915567420837416ull, 4188575278249734136ull}}, {{9519158497719796919ull, 8806462613331288260ull, 2478072229638023385ull, 2617859548906083835ull}}, {{11898948122149746148ull, 15619764285091498229ull, 16932648342329692943ull, 3272324436132604793ull}}, {{1038627097405018973ull, 14913019337936984883ull, 7330752372629952467ull, 4090405545165755992ull}}, {{16790043000373994522ull, 7014794076996921599ull, 4581720232893720292ull, 2556503465728597495ull}}, {{16375867732040105249ull, 8768492596246151999ull, 1115464272689762461ull, 3195629332160746869ull}}, {{15858148646622743657ull, 15572301763735077903ull, 6006016359289590980ull, 3994536665200933586ull}}, {{16828871931780296642ull, 509316565479647881ull, 8365446242983382267ull, 2496585415750583491ull}}, {{7201031859443207090ull, 14471703762131723564ull, 5845121785301839929ull, 3120731769688229364ull}}, {{9001289824304008862ull, 4254571647382490743ull, 7306402231627299912ull, 3900914712110286705ull}}, {{12543335167831087395ull, 2659107279614056714ull, 16095716440835532205ull, 2438071695068929190ull}}, {{6455796922934083436ull, 7935570117944958797ull, 10896273514189639448ull, 3047589618836161488ull}}, {{12681432172094992199ull, 9919462647431198496ull, 13620341892737049310ull, 3809487023545201860ull}}, {{7925895107559370124ull, 1587978136217111156ull, 17736085719815431627ull, 2380929389715751162ull}}, {{9907368884449212655ull, 15820030725553552657ull, 12946735112914513725ull, 2976161737144688953ull}}, {{16995897123988903723ull, 5939980351659777109ull, 2348360835860978445ull, 3720202171430861192ull}}, {{12928278711706758779ull, 6018330729001054645ull, 1467725522413111528ull, 2325126357144288245ull}}, {{2325290334351284762ull, 7522913411251318307ull, 6446342921443777314ull, 2906407946430360306ull}}, {{16741670973221269664ull, 180269727209372075ull, 17281300688659497451ull, 3633009933037950382ull}}, {{16315402698099199176ull, 14060395214293878806ull, 12378253823969596005ull, 4541262416297437978ull}}, {{5585440667884611581ull, 11093590018147368206ull, 12348094658408385407ull, 2838289010185898736ull}}, {{16205172871710540284ull, 9255301504256822353ull, 15435118323010481759ull, 3547861262732373420ull}}, {{6421408034356011643ull, 6957440861893640038ull, 847153830053550583ull, 4434826578415466776ull}}, {{17848438076754670989ull, 11265929566324606879ull, 529471143783469114ull, 2771766611509666735ull}}, {{17698861577515950832ull, 4859039921050982791ull, 14496896985011500105ull, 3464708264387083418ull}}, {{17511890953467550636ull, 10685485919741116393ull, 8897749194409599323ull, 4330885330483854273ull}}, {{4027402818276137292ull, 4372585690624503794ull, 17090308292574469337ull, 2706803331552408920ull}}, {{14257625559699947423ull, 10077418131708017646ull, 2916141292008535055ull, 3383504164440511151ull}}, {{8598659912770158470ull, 7985086646207634154ull, 17480234670292832531ull, 4229380205550638938ull}}, {{9985848463908736948ull, 2684836144666077394ull, 15536832687360408236ull, 2643362628469149336ull}}, {{3258938543031145377ull, 3356045180832596743ull, 974296785490958679ull, 3304203285586436671ull}}, {{17908731234071095433ull, 18030114531322909640ull, 15052929037145862060ull, 4130254106983045838ull}}, {{11192957021294434646ull, 2045449545222042717ull, 4796394629788775884ull, 2581408816864403649ull}}, {{156138221335879595ull, 2556811931527553397ull, 10607179305663357759ull, 3226761021080504561ull}}, {{4806858795097237398ull, 17031072969691605458ull, 17870660150506585102ull, 4033451276350630701ull}}, {{7615972765363161278ull, 6032734587629865507ull, 13475005603280309641ull, 2520907047719144188ull}}, {{4908279938276563693ull, 12152604252964719788ull, 16843757004100387051ull, 3151133809648930235ull}}, {{6135349922845704616ull, 10579069297778511831ull, 16443010236698095910ull, 3938917262061162794ull}}, {{10752122729419647241ull, 2000232292684181990ull, 14888567416363697848ull, 2461823288788226746ull}}, {{4216781374919783244ull, 2500290365855227488ull, 9387337233599846502ull, 3077279110985283433ull}}, {{5270976718649729054ull, 12348734994173810168ull, 16345857560427196031ull, 3846598888731604291ull}}, {{3294360449156080659ull, 14635488398999713211ull, 7910317966053303567ull, 2404124305457252682ull}}, {{17953008616727264536ull, 13682674480322253609ull, 664525420711853651ull, 3005155381821565853ull}}, {{8606202715626916958ull, 12491657081975429108ull, 5442342794317204968ull, 3756444227276957316ull}}, {{14602248734121598907ull, 7807285676234643192ull, 12624836283303028913ull, 2347777642048098322ull}}, {{18252810917651998633ull, 14370793113720691894ull, 6557673317274010333ull, 2934722052560122903ull}}, {{13592641610210222484ull, 4128433336868701156ull, 3585405628165125013ull, 3668402565700153629ull}}, {{16990802012762778104ull, 9772227689513264349ull, 9093443053633794170ull, 4585503207125192036ull}}, {{12925094267190430267ull, 10719328324373178122ull, 14906773945375897164ull, 2865939504453245022ull}}, {{6932995797133262026ull, 13399160405466472653ull, 9410095394865095647ull, 3582424380566556278ull}}, {{13277930764843965437ull, 12137264488405702912ull, 2539247206726593751ull, 4478030475708195348ull}}, {{8298706728027478398ull, 14503319332894646176ull, 10810401541058896902ull, 2798769047317622092ull}}, {{10373383410034347997ull, 8905777129263531912ull, 13513001926323621128ull, 3498461309147027615ull}}, {{12966729262542934997ull, 11132221411579414890ull, 12279566389477138506ull, 4373076636433784519ull}}, {{12715891807516722277ull, 11569324400664522210ull, 14592258021064293422ull, 2733172897771115324ull}}, {{6671492722541127038ull, 5238283463975876955ull, 18240322526330366778ull, 3416466122213894155ull}}, {{3727679884749020894ull, 15771226366824622002ull, 18188717139485570568ull, 4270582652767367694ull}}, {{6941485946395525963ull, 9857016479265388751ull, 6756262193751093701ull, 2669114157979604809ull}}, {{4065171414567019549ull, 16932956617509123843ull, 13057013760616255030ull, 3336392697474506011ull}}, {{469778249781386533ull, 11942823735031628996ull, 11709581182342930884ull, 4170490871843132514ull}}, {{9516983442968142391ull, 16687636871249543930ull, 11930174257391719706ull, 2606556794901957821ull}}, {{2672857266855402181ull, 11636174052207154105ull, 1077659766457485921ull, 3258195993627447277ull}}, {{7952757601996640630ull, 710159509976778919ull, 5958760726499245306ull, 4072744992034309096ull}}, {{11888002528888982250ull, 5055535712162874728ull, 3724225454062028316ull, 2545465620021443185ull}}, {{14860003161111227812ull, 6319419640203593410ull, 9266967836004923299ull, 3181832025026803981ull}}, {{9351631914534258957ull, 3287588531827103859ull, 16195395813433542028ull, 3977290031283504976ull}}, {{3538926937370217896ull, 11278114869246715720ull, 10122122383395963767ull, 2485806269552190610ull}}, {{4423658671712772370ull, 9485957568131006746ull, 3429280942390178901ull, 3107257836940238263ull}}, {{14752945376495741271ull, 16469132978591146336ull, 18121659233269887338ull, 3884072296175297828ull}}, {{9220590860309838294ull, 14904894130046854364ull, 2102664983938903778ull, 2427545185109561143ull}}, {{11525738575387297868ull, 9407745625703792147ull, 16463389285205793435ull, 3034431481386951428ull}}, {{9795487200806734431ull, 7147996013702352280ull, 2132492532797690178ull, 3793039351733689286ull}}, {{6122179500504209019ull, 9079183526991358079ull, 15167865888280720073ull, 2370649594833555803ull}}, {{3041038357202873370ull, 15960665427166585503ull, 14348146341923512187ull, 2963311993541944754ull}}, {{17636356001785755424ull, 15339145765530843974ull, 8711810890549614426ull, 3704139991927430943ull}}, {{6411036482688709236ull, 14198652121884165388ull, 12362410834234590872ull, 2315087494954644339ull}}, {{8013795603360886545ull, 17748315152355206735ull, 10841327524365850686ull, 2893859368693305424ull}}, {{5405558485773720278ull, 12962021903589232611ull, 13551659405457313358ull, 3617324210866631780ull}}, {{2145262088789762443ull, 6979155342631764956ull, 16939574256821641698ull, 4521655263583289725ull}}, {{10564160842348377335ull, 8973658107572241001ull, 12893076919727220013ull, 2826034539739556078ull}}, {{17816887071362859573ull, 15828758652892689155ull, 6892974112804249208ull, 3532543174674445098ull}}, {{17659422820776186562ull, 1339204242406309828ull, 17839589677860087319ull, 4415678968343056372ull}}, {{1813767226130340793ull, 7754531679145025499ull, 1926371511807778766ull, 2759799355214410233ull}}, {{16102267087945089703ull, 469792562076506065ull, 7019650408187111362ull, 3449749194018012791ull}}, {{6292775804649198417ull, 9810612739450408390ull, 4162876991806501298ull, 4312186492522515989ull}}, {{17768042933187912723ull, 10743318980583893147ull, 4907641129092757263ull, 2695116557826572493ull}}, {{17598367648057503000ull, 8817462707302478530ull, 10746237429793334483ull, 3368895697283215616ull}}, {{12774587523217102941ull, 6410142365700710259ull, 13432796787241668104ull, 4211119621604019520ull}}, {{5678274192796995386ull, 4006338978562943912ull, 8395497992026042565ull, 2631949763502512200ull}}, {{7097842740996244233ull, 9619609741631067794ull, 10494372490032553206ull, 3289937204378140250ull}}, {{18095675463100081099ull, 2801140140184058934ull, 3894593575685915700ull, 4112421505472675313ull}}, {{6698111146010162783ull, 10974084624469812642ull, 13963336030872167072ull, 2570263440920422070ull}}, {{17596010969367479287ull, 13717605780587265802ull, 8230798001735433032ull, 3212829301150527588ull}}, {{12771641674854573300ull, 17147007225734082253ull, 10288497502169291290ull, 4016036626438159485ull}}, {{10288119055997802265ull, 15328565534511189312ull, 8736153948069501008ull, 2510022891523849678ull}}, {{12860148819997252831ull, 713962844429435024ull, 1696820398232100453ull, 3137528614404812098ull}}, {{16075186024996566039ull, 5504139573964181684ull, 11344397534644901374ull, 3921910768006015122ull}}, {{823619228768077966ull, 17275145289009777265ull, 11701934477580451262ull, 2451194230003759451ull}}, {{5641210054387485362ull, 12370559574407445773ull, 10015732078548176174ull, 3063992787504699314ull}}, {{11663198586411744606ull, 6239827431154531408ull, 3296293061330444410ull, 3829990984380874143ull}}, {{7289499116507340379ull, 8511578162898970034ull, 8977712190972609612ull, 2393744365238046339ull}}, {{18335245932488951282ull, 10639472703623712542ull, 6610454220288374111ull, 2992180456547557924ull}}, {{13695685378756413294ull, 8687654861102252774ull, 8263067775360467639ull, 3740225570684447405ull}}, {{3948117343295370405ull, 12347313315829989840ull, 7470260368813986226ull, 2337640981677779628ull}}, {{4935146679119213006ull, 6210769607932711492ull, 9337825461017482783ull, 2922051227097224535ull}}, {{6168933348899016257ull, 3151775991488501461ull, 7060595807844465575ull, 3652564033871530669ull}}, {{12322852704551158226ull, 17774778044642790538ull, 13437430778232969872ull, 4565705042339413336ull}}, {{12313468958771861795ull, 11109236277901744086ull, 8398394236395606170ull, 2853565651462133335ull}}, {{6168464161610051436ull, 4663173310522404300ull, 5886306777067119809ull, 3566957064327666669ull}}, {{7710580202012564295ull, 10440652656580393279ull, 11969569489761287665ull, 4458696330409583336ull}}, {{11736641653898934540ull, 18054622956431215559ull, 7480980931100804790ull, 2786685206505989585ull}}, {{10059116048946280271ull, 13344906658684243641ull, 13962912182303393892ull, 3483356508132486981ull}}, {{17185581079610238243ull, 16681133323355304551ull, 3618582172597078653ull, 4354195635165608727ull}}, {{17658517202397480758ull, 12731551336310759296ull, 9179142885514256014ull, 2721372271978505454ull}}, {{3626402429287299331ull, 6691067133533673313ull, 2250556570038044210ull, 3401715339973131818ull}}, {{9144689055036512068ull, 17587205953771867449ull, 12036567749402331070ull, 4252144174966414772ull}}, {{17244645705466289803ull, 6380317702680029251ull, 16746226880231232727ull, 2657590109354009232ull}}, {{16944121113405474349ull, 3363711109922648660ull, 2486039526579489293ull, 3321987636692511541ull}}, {{2733407318047291321ull, 8816324905830698730ull, 7719235426651749520ull, 4152484545865639426ull}}, {{6320065592206944980ull, 5510203066144186706ull, 9436208160084731354ull, 2595302841166024641ull}}, {{17123454027113457032ull, 16111125869535009190ull, 16406946218533302096ull, 3244128551457530801ull}}, {{12180945497037045482ull, 1692163263209209872ull, 6673624717884463909ull, 4055160689321913502ull}}, {{7613090935648153427ull, 3363445048719450122ull, 18006073503959953655ull, 2534475430826195938ull}}, {{292991632705415975ull, 18039364366181476365ull, 13284219843095166260ull, 3168094288532744923ull}}, {{4977925559309157873ull, 4102461384017293840ull, 11993588785441569922ull, 3960117860665931154ull}}, {{3111203474568223671ull, 7175724383438196554ull, 12107679009328369105ull, 2475073662916206971ull}}, {{13112376380065055396ull, 13581341497725133596ull, 10522912743233073477ull, 3093842078645258714ull}}, {{16390470475081319245ull, 3141618816874253283ull, 3930268892186566039ull, 3867302598306573393ull}}, {{7938201037712130576ull, 8881040788187490158ull, 13985633103685073534ull, 2417064123941608370ull}}, {{699379260285387412ull, 1877928948379586890ull, 8258669342751566110ull, 3021330154927010463ull}}, {{10097596112211510073ull, 11570783222329259420ull, 5711650660012069733ull, 3776662693658763079ull}}, {{15534369606986969604ull, 9537582523169481089ull, 10487310690148625439ull, 2360414183536726924ull}}, {{5582903953451548293ull, 7310292135534463458ull, 13109138362685781799ull, 2950517729420908655ull}}, {{16202001978669211174ull, 4526179150990691418ull, 11774736934929839345ull, 3688147161776135819ull}}, {{11029130436481738159ull, 10269409957165752177ull, 10106735150234911277ull, 4610183952220169774ull}}, {{18422421568869556110ull, 8724224232442289062ull, 1705023450469431644ull, 2881364970137606109ull}}, {{13804654924232169329ull, 10905280290552861328ull, 6742965331514177459ull, 3601706212672007636ull}}, {{17255818655290211661ull, 9019914344763688756ull, 8428706664392721824ull, 4502132765840009545ull}}, {{1561514622701606481ull, 5637446465477305473ull, 16797156711313920900ull, 2813832978650005965ull}}, {{6563579296804396005ull, 7046808081846631841ull, 7161387833860237413ull, 3517291223312507457ull}}, {{12816160139432882910ull, 13420196120735677705ull, 13563420810752684670ull, 4396614029140634321ull}}, {{1092571059504469963ull, 3775936557032410662ull, 1559608979079346063ull, 2747883768212896451ull}}, {{10589085861235363261ull, 108234677863125423ull, 15784569279131346291ull, 3434854710266120563ull}}, {{8624671308116816172ull, 13970351402611070491ull, 15119025580486794959ull, 4293568387832650704ull}}, {{3084576558359316156ull, 15648998654273000913ull, 9449390987804246849ull, 2683480242395406690ull}}, {{8467406716376533099ull, 5726190262559087429ull, 2588366697900532754ull, 3354350302994258363ull}}, {{15195944413898054277ull, 16381109865053635094ull, 17070516427657829654ull, 4192937878742822953ull}}, {{4885779240258896020ull, 5626507647231134030ull, 3751543739645061678ull, 2620586174214264346ull}}, {{15330596087178395832ull, 16256506595893693345ull, 13912801711411102905ull, 3275732717767830432ull}}, {{5328187053690831078ull, 6485575189584952970ull, 17391002139263878632ull, 4094665897209788040ull}}, {{7941802926984157328ull, 4053484493490595606ull, 10869376337039924145ull, 2559166185756117525ull}}, {{703881621875420852ull, 9678541635290632412ull, 18198406439727293085ull, 3198957732195146906ull}}, {{879852027344276065ull, 16709863062540678419ull, 13524636012804340548ull, 3998697165243933633ull}}, {{16690808581586030205ull, 1220292377233148203ull, 1535368480361630987ull, 2499185728277458521ull}}, {{16251824708555149852ull, 15360423526823598966ull, 6530896618879426637ull, 3123982160346823151ull}}, {{11091408848839161507ull, 5365471353247334996ull, 3551934755171895393ull, 3904977700433528939ull}}, {{16155502567379251750ull, 14882634641848054132ull, 18360860286478292284ull, 2440611062770955586ull}}, {{1747634135514513071ull, 156549228600516050ull, 13727703321243089548ull, 3050763828463694483ull}}, {{11407914706247917147ull, 195686535750645062ull, 12547943133126474031ull, 3813454785579618104ull}}, {{2518260672977560313ull, 7039833112485235020ull, 7842464458204046269ull, 2383409240987261315ull}}, {{3147825841221950391ull, 13411477409033931679ull, 5191394554327669932ull, 2979261551234076644ull}}, {{17769840356809601701ull, 16764346761292414598ull, 6489243192909587415ull, 3724076939042595805ull}}, {{6494464204578613159ull, 17395245753448840980ull, 6361620004782186086ull, 2327548086901622378ull}}, {{8118080255723266449ull, 12520685154956275417ull, 17175397042832508416ull, 2909435108627027972ull}}, {{14759286338081470965ull, 15650856443695344271ull, 3022502229831083904ull, 3636793885783784966ull}}, {{13837421904174450802ull, 1116826480909628723ull, 13001499824143630689ull, 4545992357229731207ull}}, {{6342545680895337799ull, 12227231596636987712ull, 15043466417730851036ull, 2841245223268582004ull}}, {{7928182101119172249ull, 15284039495796234640ull, 357588948454012179ull, 3551556529085727506ull}}, {{9910227626398965311ull, 14493363351317905396ull, 9670358222422291032ull, 4439445661357159382ull}}, {{15417264303354129128ull, 9058352094573690872ull, 1432287870586543991ull, 2774653538348224614ull}}, {{824836305483109794ull, 6711254099789725687ull, 11013731875087955797ull, 3468316922935280767ull}}, {{14866103437136050954ull, 13000753643164545012ull, 9155478825432556842ull, 4335396153669100959ull}}, {{67942611355256038ull, 12737157045405228537ull, 12639703293536429882ull, 2709622596043188099ull}}, {{4696614282621457952ull, 6698074269901759863ull, 11187943098493149449ull, 3387028245053985124ull}}, {{1259081834849434536ull, 12984278855804587733ull, 13984928873116436811ull, 4233785306317481405ull}}, {{3092769155994590537ull, 5809331275664173381ull, 11046423554911466959ull, 2646115816448425878ull}}, {{8477647463420626075ull, 2649978076152828822ull, 4584657406784557891ull, 3307644770560532348ull}}, {{1373687292421006786ull, 17147530650473199740ull, 5730821758480697363ull, 4134555963200665435ull}}, {{10081926594617905049ull, 8411363647332055885ull, 1275920589836741900ull, 2584097477000415897ull}}, {{17214094261699769215ull, 10514204559165069856ull, 6206586755723315279ull, 3230121846250519871ull}}, {{3070873753415159903ull, 8531069680528949417ull, 3146547426226756195ull, 4037652307813149839ull}}, {{13448511141952944700ull, 3026075541116899433ull, 8884121169032804478ull, 2523532692383218649ull}}, {{2975580872159017162ull, 13005966463250900100ull, 15716837479718393501ull, 3154415865479023311ull}}, {{3719476090198771453ull, 2422400023781461413ull, 15034360831220603973ull, 3943019831848779139ull}}, {{4630515565587926110ull, 3819843024077107335ull, 7090632510299183531ull, 2464387394905486962ull}}, {{1176458438557519734ull, 163117761668996265ull, 18086662674728755222ull, 3080484243631858702ull}}, {{6082259066624287571ull, 9427269238941021139ull, 13384956306556168219ull, 3850605304539823378ull}}, {{1495568907426485780ull, 3586200265124444260ull, 12977283710024993041ull, 2406628315337389611ull}}, {{1869461134283107225ull, 9094436349832943229ull, 11609918619103853397ull, 3008285394171737014ull}}, {{6948512436281271935ull, 15979731455718566940ull, 5289026237025040938ull, 3760356742714671268ull}}, {{13566192309530570768ull, 14599018178251492241ull, 12529013434995426394ull, 2350222964196669542ull}}, {{3122682331631049747ull, 9025400685959589494ull, 6437894756889507185ull, 2937778705245836928ull}}, {{13126724951393587992ull, 15893436875876874771ull, 8047368446111883981ull, 3672223381557296160ull}}, {{11796720170814597086ull, 6031738039563929752ull, 10059210557639854977ull, 4590279226946620200ull}}, {{7372950106759123179ull, 15299051320795925855ull, 6287006598524909360ull, 2868924516841637625ull}}, {{4604501615021516070ull, 677070077285355703ull, 12470444266583524605ull, 3586155646052047031ull}}, {{1143941000349507183ull, 5458023615034082533ull, 10976369314802017852ull, 4482694557565058789ull}}, {{3020806134432135941ull, 12634636796251077391ull, 9166073830964955109ull, 2801684098478161743ull}}, {{17611065723322333639ull, 1958237940031683026ull, 6845906270278805983ull, 3502105123097702179ull}}, {{12790460117298141240ull, 16282855480321767495ull, 3945696819421119574ull, 4377631403872127724ull}}, {{14911566600952420131ull, 5565098656773716780ull, 11689432548992975542ull, 2736019627420079827ull}}, {{192714177480973548ull, 16179745357821921784ull, 10000104667813831523ull, 3420024534275099784ull}}, {{240892721851216935ull, 15612995678850014326ull, 12500130834767289404ull, 4275030667843874730ull}}, {{13985616006439174297ull, 534750262426483145ull, 12424267790156943782ull, 2671894167402421706ull}}, {{3646961952766804159ull, 9891809864887879740ull, 6306962700841403919ull, 3339867709253027133ull}}, {{4558702440958505198ull, 7753076312682461771ull, 12495389394479142803ull, 4174834636566283916ull}}, {{543346016385371797ull, 2539829686212844655ull, 17032990408404240060ull, 2609271647853927447ull}}, {{14514240575763878458ull, 3174787107766055818ull, 16679551992077912171ull, 3261589559817409309ull}}, {{8919428682850072264ull, 17803541939989733485ull, 7014381934815226501ull, 4076986949771761637ull}}, {{7880485935994989117ull, 13433056721707277380ull, 6689831718473210515ull, 2548116843607351023ull}}, {{9850607419993736397ull, 12179634883706708821ull, 3750603629664125240ull, 3185146054509188779ull}}, {{16924945293419558400ull, 15224543604633386026ull, 76568518652768646ull, 3981432568136485974ull}}, {{15189776826814611904ull, 4903653734468478362ull, 13882913379440144116ull, 2488395355085303733ull}}, {{9763848996663489072ull, 6129567168085597953ull, 3518583669018016433ull, 3110494193856629667ull}}, {{16816497264256749244ull, 12273644978534385345ull, 18233287641554684253ull, 3888117742320787083ull}}, {{3592781762519386422ull, 9976871120797684793ull, 9089961766757983706ull, 2430073588950491927ull}}, {{9102663221576620931ull, 3247716864142330183ull, 6750766190020091729ull, 3037591986188114909ull}}, {{6766643008543388259ull, 8671332098605300633ull, 13050143755952502565ull, 3796989982735143636ull}}, {{15758366926408087422ull, 7725425570842006847ull, 17379711884325089911ull, 2373118739209464772ull}}, {{15086272639582721374ull, 5045095945125120655ull, 3277895781696810773ull, 2966398424011830966ull}}, {{14246154781051013813ull, 10918055949833788723ull, 13320741763975789274ull, 3707998030014788707ull}}, {{6598003728943189681ull, 11435470987073505856ull, 6019620593271174344ull, 2317498768759242942ull}}, {{8247504661178987102ull, 14294338733841882320ull, 16747897778443743738ull, 2896873460949053677ull}}, {{10309380826473733877ull, 8644551380447577092ull, 7099814167772515961ull, 3621091826186317097ull}}, {{12886726033092167346ull, 15417375243986859269ull, 13486453728143032855ull, 4526364782732896371ull}}, {{10360046779896298543ull, 16553388555132868899ull, 6123190570875701582ull, 2828977989208060232ull}}, {{8338372456442985275ull, 11468363657061310316ull, 7653988213594626978ull, 3536222486510075290ull}}, {{10422965570553731594ull, 5112082534471862087ull, 344113230138507915ull, 4420278108137594113ull}}, {{13431882509237164102ull, 889208574831219852ull, 11744285814905037207ull, 2762673817585996320ull}}, {{16789853136546455128ull, 14946568773821188527ull, 14680357268631296508ull, 3453342271982495400ull}}, {{16375630402255681006ull, 236466893566934043ull, 18350446585789120636ull, 4316677839978119250ull}}, {{7928925992196106677ull, 9371163845334109585ull, 16080715134545588301ull, 2697923649986324531ull}}, {{14522843508672521250ull, 16325640825095024885ull, 15489207899754597472ull, 3372404562482905664ull}}, {{4318496330558487850ull, 1960306957659229491ull, 914765800983695225ull, 4215505703103632081ull}}, {{393217197385360954ull, 12754406894605488192ull, 12100943671683279275ull, 2634691064439770050ull}}, {{491521496731701193ull, 11331322599829472336ull, 5902807552749323286ull, 3293363830549712563ull}}, {{614401870914626491ull, 4940781212932064612ull, 2766823422509266204ull, 4116704788187140704ull}}, {{9607373206176417365ull, 12311360294937316190ull, 1729264639068291377ull, 2572940492616962940ull}}, {{2785844470865745898ull, 1554142313389481526ull, 2161580798835364222ull, 3216175615771203675ull}}, {{12705677625436958181ull, 11166049928591627715ull, 16537034053826368989ull, 4020219519714004593ull}}, {{5635205506684404911ull, 9284624214583461274ull, 3418117256000398762ull, 2512637199821252871ull}}, {{16267378920210281947ull, 2382408231374550784ull, 18107704625282662165ull, 3140796499776566088ull}}, {{1887479576553300817ull, 7589696307645576385ull, 4187886707893776090ull, 3925995624720707611ull}}, {{12708889781414282771ull, 9355246210705873144ull, 311586183219916104ull, 2453747265450442257ull}}, {{15886112226767853464ull, 11694057763382341430ull, 5001168747452283034ull, 3067184081813052821ull}}, {{10634268246605041021ull, 5394200167373150980ull, 10863146952742741697ull, 3833980102266316026ull}}, {{15869789690982926447ull, 14900590150676689122ull, 11401152863891601464ull, 2396237563916447516ull}}, {{10613865076873882250ull, 178993614636309787ull, 14251441079864501831ull, 2995296954895559395ull}}, {{8655645327664964908ull, 14058800073577550946ull, 13202615331403239384ull, 3744121193619449244ull}}, {{10021464348217990972ull, 8786750045985969341ull, 17475006618981800423ull, 2340075746012155777ull}}, {{17138516453699876619ull, 6371751539055073772ull, 8008700218445086817ull, 2925094682515194722ull}}, {{2976401493415294157ull, 12576375442246230120ull, 787503236201582713ull, 3656368353143993403ull}}, {{3720501866769117697ull, 1885411247525623938ull, 14819437100534142104ull, 4570460441429991753ull}}, {{6936999685158086465ull, 1178382029703514961ull, 2344619160192756959ull, 2856537775893744846ull}}, {{13282935624874995985ull, 15308035592411557413ull, 12154145987095722006ull, 3570672219867181057ull}}, {{2768611475811581269ull, 9911672453659670959ull, 1357624428587488796ull, 4463340274833976322ull}}, {{8647911200023320149ull, 15418167320392070157ull, 5460201286294568401ull, 2789587671771235201ull}}, {{15421575018456538090ull, 5437651095207923984ull, 11436937626295598406ull, 3486984589714044001ull}}, {{830224699361120997ull, 16020435905864680789ull, 461113977587334295ull, 4358730737142555002ull}}, {{2824733446314394575ull, 16930301468806507349ull, 4899882254419471838ull, 2724206710714096876ull}}, {{8142602826320381123ull, 11939504799153358378ull, 6124852818024339798ull, 3405258388392621095ull}}, {{954881496045700595ull, 5701008962086922165ull, 3044380004103036844ull, 4256572985490776369ull}}, {{2902643944242256824ull, 12786502638159102161ull, 13431952548632867787ull, 2660358115931735230ull}}, {{8239990948730208934ull, 11371442279271489797ull, 7566568648936308926ull, 3325447644914669038ull}}, {{14911674704340149072ull, 4990930812234586438ull, 234838774315610350ull, 4156809556143336298ull}}, {{4708110671785205266ull, 16954389812928780236ull, 4758460252374644372ull, 2598005972589585186ull}}, {{5885138339731506582ull, 2746243192451423679ull, 15171447352323081274ull, 3247507465736981482ull}}, {{2744736906236995324ull, 12656176027419055407ull, 9740937153549075784ull, 4059384332171226853ull}}, {{8632989594039203934ull, 7910110017136909629ull, 8393928730181866317ull, 2537115207607016783ull}}, {{15402923010976392821ull, 14499323539848524940ull, 5880724894299944992ull, 3171394009508770979ull}}, {{806909690010939410ull, 18124154424810656176ull, 2739220099447543336ull, 3964242511885963724ull}}, {{504318556256837131ull, 11327596515506660110ull, 10935384599009490393ull, 2477651569928727327ull}}, {{9853770232175822222ull, 324437589101161425ull, 9057544730334475088ull, 3097064462410909159ull}}, {{16928898808647165682ull, 405546986376451781ull, 6710244894490705956ull, 3871330578013636449ull}}, {{12886404764618172503ull, 9476838903340058171ull, 15723118105125160982ull, 2419581611258522780ull}}, {{11496319937345327725ull, 2622676592320296906ull, 1207153557696899612ull, 3024477014073153476ull}}, {{5147027884826883848ull, 3278345740400371133ull, 1508941947121124515ull, 3780596267591441845ull}}, {{5522735437230496357ull, 18189867152246089622ull, 3248931726164396773ull, 2362872667244651153ull}}, {{16126791333392896254ull, 8902275885025448315ull, 8672850676132883871ull, 2953590834055813941ull}}, {{15546803148313732414ull, 6516158837854422490ull, 15452749363593492743ull, 3691988542569767426ull}}, {{14328437986123470663ull, 10990128301300095912ull, 14269654370673320868ull, 2307492839106104641ull}}, {{17910547482654338328ull, 13737660376625119890ull, 4002009908059487373ull, 2884366048882630802ull}}, {{13164812316463147102ull, 3337017415499236151ull, 14225884421929135025ull, 3605457561103288502ull}}, {{11844329377151545974ull, 8782957787801433093ull, 8558983490556642973ull, 4506821951379110628ull}}, {{9708548869933410186ull, 7795191626589589635ull, 14572736718452677666ull, 2816763719611944142ull}}, {{7524000068989374828ull, 520617496382211236ull, 8992548861211071275ull, 3520954649514930178ull}}, {{9405000086236718535ull, 14485829925759927757ull, 2017314039659063285ull, 4401193311893662723ull}}, {{8183968063111643037ull, 11359486712813648800ull, 17401722339282772217ull, 2750745819933539201ull}}, {{10229960078889553796ull, 364300335734897288ull, 7917094868821301560ull, 3438432274916924002ull}}, {{12787450098611942244ull, 455375419668621610ull, 672996549171851142ull, 4298040343646155003ull}}, {{12603842330059851807ull, 14119667692575052218ull, 16561523907728264627ull, 2686275214778846876ull}}, {{6531430875720038950ull, 13037898597291427369ull, 2255160810950779168ull, 3357844018473558596ull}}, {{12775974613077436592ull, 16297373246614284211ull, 2818951013688473960ull, 4197305023091948245ull}}, {{5679141123959703918ull, 10185858279133927632ull, 4067687392768990177ull, 2623315639432467653ull}}, {{7098926404949629898ull, 17344008867344797444ull, 9696295259388625625ull, 3279144549290584566ull}}, {{8873658006187037372ull, 7844953028898833093ull, 2896997037381006224ull, 4098930686613230708ull}}, {{7851879263080592310ull, 4903095643061770683ull, 11033995185217904698ull, 2561831679133269192ull}}, {{5203163060423352483ull, 15352241590681989162ull, 13792493981522380872ull, 3202289598916586490ull}}, {{15727325862383966411ull, 743557914642934836ull, 8017245440048200283ull, 4002861998645733113ull}}, {{606206627135203199ull, 16605624761147691937ull, 16539993446098594936ull, 2501788749153583195ull}}, {{5369444302346391903ull, 2310286877725063305ull, 16063305789195855767ull, 3127235936441978994ull}}, {{11323491396360377783ull, 16722916652438492843ull, 10855760199640043900ull, 3909044920552473743ull}}, {{4771339113511542162ull, 1228450870919282219ull, 13702379152416109294ull, 2443153075345296089ull}}, {{1352487873462039799ull, 10758935625503878582ull, 3292915885237972905ull, 3053941344181620112ull}}, {{10913981878682325556ull, 18060355550307236131ull, 4116144856547466131ull, 3817426680227025140ull}}, {{4515395664962759521ull, 8981879209728328630ull, 11795962572196942140ull, 2385891675141890712ull}}, {{14867616618058225209ull, 11227349012160410787ull, 14744953215246177675ull, 2982364593927363390ull}}, {{13972834754145393607ull, 9422500246773125580ull, 9207819482202946286ull, 3727955742409204238ull}}, {{17956393758195646813ull, 1277376635805815583ull, 1143201157949453525ull, 2329972339005752649ull}}, {{17833806179317170612ull, 6208406813184657383ull, 6040687465864204810ull, 2912465423757190811ull}}, {{17680571705719075361ull, 16983880553335597537ull, 2939173313902868108ull, 3640581779696488514ull}}, {{8265656576866680489ull, 2783106617959945306ull, 12897338679233360944ull, 4550727224620610642ull}}, {{9777721378969063210ull, 1739441636224965816ull, 12672522692948238494ull, 2844204515387881651ull}}, {{12222151723711329012ull, 11397674082135983078ull, 11228967347757910213ull, 3555255644234852064ull}}, {{6054317617784385457ull, 412034547387815136ull, 14036209184697387767ull, 4444069555293565080ull}}, {{3783948511115240911ull, 7175050619758466316ull, 8772630740435867354ull, 2777543472058478175ull}}, {{4729935638894051138ull, 18192185311552858703ull, 6354102407117446288ull, 3471929340073097719ull}}, {{1300733530190176019ull, 4293487565731521763ull, 3330941990469419957ull, 4339911675091372149ull}}, {{16953859520864717676ull, 4989272737795895053ull, 4387681753257081425ull, 2712444796932107593ull}}, {{7357266345798733383ull, 10848276940672256721ull, 10096288209998739685ull, 3390555996165134491ull}}, {{13808268950675804632ull, 18172032194267708805ull, 8008674244071036702ull, 4238194995206418114ull}}, {{10936011103386071847ull, 6745834102989930099ull, 9617107420971785843ull, 2648871872004011321ull}}, {{9058327860805201905ull, 3820606610310024720ull, 16633070294642120208ull, 3311089840005014151ull}}, {{11322909826006502381ull, 4775758262887530900ull, 16179651849875262356ull, 4138862300006267689ull}}, {{16300190678108839796ull, 12208220951159482620ull, 3194753378530957116ull, 2586788937503917306ull}}, {{1928494273926498129ull, 15260276188949353276ull, 13216813760018472203ull, 3233486171879896632ull}}, {{2410617842408122661ull, 14463659217759303691ull, 16521017200023090254ull, 4041857714849870790ull}}, {{17647537216000934328ull, 4428100992672176902ull, 5713949731587043505ull, 2526161071781169244ull}}, {{12836049483146392101ull, 10146812259267609032ull, 7142437164483804381ull, 3157701339726461555ull}}, {{16045061853932990127ull, 17295201342511899194ull, 4316360437177367572ull, 3947126674658076944ull}}, {{14639849677135506733ull, 1586128802215161188ull, 2697725273235854733ull, 2466954171661298090ull}}, {{18299812096419383417ull, 6594347021196339389ull, 12595528628399594224ull, 3083692714576622612ull}}, {{9039707065242065559ull, 8242933776495424237ull, 15744410785499492780ull, 3854615893220778265ull}}, {{7955659924989984926ull, 14375205647164415956ull, 2922727713296101131ull, 2409134933262986416ull}}, {{9944574906237481158ull, 13357321040528132041ull, 3653409641620126414ull, 3011418666578733020ull}}, {{17042404651224239351ull, 7473279263805389243ull, 4566762052025158018ull, 3764273333223416275ull}}, {{8345659897801455643ull, 9282485558305756181ull, 548383273302029809ull, 2352670833264635172ull}}, {{15043760890679207457ull, 16214792966309583130ull, 685479091627537261ull, 2940838541580793965ull}}, {{9581329076494233513ull, 6433433152604815201ull, 5468534882961809481ull, 3676048176975992456ull}}, {{16588347364045179795ull, 12653477459183406905ull, 6835668603702261851ull, 4595060221219990570ull}}, {{3450188074887155516ull, 5602580402775935364ull, 8883978895741301561ull, 2871912638262494106ull}}, {{4312735093608944395ull, 11614911521897307109ull, 1881601582821851143ull, 3589890797828117633ull}}, {{10002604885438568398ull, 9906953383944245982ull, 6963687996954701833ull, 4487363497285147041ull}}, {{1639942034971717345ull, 17721060911033623499ull, 15881520044165158405ull, 2804602185803216900ull}}, {{15884985598996810393ull, 8316268083509865661ull, 1405155981496896391ull, 3505752732254021126ull}}, {{6021173943463849279ull, 5783649085959944173ull, 10979817013725896297ull, 4382190915317526407ull}}, {{6069076723878599752ull, 15143995724793434868ull, 13779914661219767041ull, 2738869322073454004ull}}, {{7586345904848249689ull, 5094936600709629873ull, 17224893326524708802ull, 3423586652591817505ull}}, {{14094618399487700016ull, 15592042787741813149ull, 7696058602873722290ull, 4279483315739771882ull}}, {{11114979508893506462ull, 14356712760766021122ull, 9421722645223464335ull, 2674677072337357426ull}}, {{4670352349262107269ull, 13334204932530138499ull, 2553781269674554611ull, 3343346340421696783ull}}, {{1226254418150246183ull, 12056070147235285220ull, 17027284642375356976ull, 4179182925527120978ull}}, {{9989781048198679672ull, 7535043842022053262ull, 15253738919911986014ull, 2611989328454450611ull}}, {{3263854273393573782ull, 195432765672790770ull, 14455487631462594614ull, 3264986660568063264ull}}, {{13303189878596743036ull, 9467662993945764270ull, 18069359539328243267ull, 4081233325710079080ull}}, {{3702807655695576494ull, 3611446362002408717ull, 11293349712080152042ull, 2550770828568799425ull}}, {{9240195588046858521ull, 13737679989357786704ull, 281629084818026340ull, 3188463535710999282ull}}, {{11550244485058573151ull, 17172099986697233380ull, 9575408392877308733ull, 3985579419638749102ull}}, {{16442274840016384027ull, 13038405500899464814ull, 1372944227120930054ull, 2490987137274218189ull}}, {{11329471513165704226ull, 7074634839269555210ull, 6327866302328550472ull, 3113733921592772736ull}}, {{4938467354602354475ull, 8843293549086944013ull, 7909832877910688090ull, 3892167401990965920ull}}, {{5392385105840165499ull, 10138744486606727912ull, 4943645548694180056ull, 2432604626244353700ull}}, {{6740481382300206873ull, 12673430608258409890ull, 6179556935867725070ull, 3040755782805442125ull}}, {{17648973764730034400ull, 6618416223468236554ull, 12336132188262044242ull, 3800944728506802656ull}}, {{15642294621383659404ull, 8748196158095035750ull, 7710082617663777651ull, 2375590455316751660ull}}, {{10329496239874798447ull, 6323559179191406784ull, 9637603272079722064ull, 2969488069145939575ull}}, {{12911870299843498058ull, 7904448973989258480ull, 7435318071672264676ull, 3711860086432424469ull}}, {{8069918937402186287ull, 14163652645598062358ull, 6952916804008859374ull, 2319912554020265293ull}}, {{864026634897957050ull, 8481193770142802140ull, 13302832023438462122ull, 2899890692525331616ull}}, {{1080033293622446313ull, 1378120175823726867ull, 16628540029298077653ull, 3624863365656664520ull}}, {{15185099672310221603ull, 6334336238207046487ull, 2338930962913045450ull, 4531079207070830651ull}}, {{16408216322834970358ull, 8570646167306791958ull, 17602732916316511070ull, 2831924504419269156ull}}, {{11286898366688937139ull, 1489935672278714140ull, 3556672071686087222ull, 3539905630524086446ull}}, {{14108622958361171424ull, 11085791627203168483ull, 13669212126462384835ull, 4424882038155108057ull}}, {{6512046339762038188ull, 4622776757788286350ull, 1625728551397908666ull, 2765551273846942536ull}}, {{17363429961557323543ull, 15001842984090133745ull, 2032160689247385832ull, 3456939092308678170ull}}, {{7869229396664490717ull, 305559656403115566ull, 11763572898414008099ull, 4321173865385847712ull}}, {{306582354487918794ull, 16331875849747804893ull, 7352233061508755061ull, 2700733665866154820ull}}, {{4994913961537286397ull, 6579786756902592404ull, 9190291326885943827ull, 3375917082332693525ull}}, {{6243642451921607996ull, 3613047427700852601ull, 16099550177034817688ull, 4219896352915866906ull}}, {{15431491578519474757ull, 2258154642313032875ull, 14673904879074148959ull, 2637435220572416816ull}}, {{14677678454721955543ull, 16657751358173454806ull, 18342381098842686198ull, 3296794025715521020ull}}, {{9123726031547668620ull, 11598817160862042700ull, 4481232299843806132ull, 4120992532144401276ull}}, {{14925700806572068696ull, 16472632762393552495ull, 12024142224257154640ull, 2575620332590250797ull}}, {{14045439989787697966ull, 2144046879282389003ull, 1195119725039279589ull, 3219525415737813497ull}}, {{12945113968807234553ull, 7291744617530374158ull, 6105585674726487390ull, 4024406769672266871ull}}, {{3479010212077133692ull, 18392398441238647561ull, 10733520074345136474ull, 2515254231045166794ull}}, {{8960448783523805019ull, 13767126014693533643ull, 4193528056076644785ull, 3144067788806458493ull}}, {{6588874960977368369ull, 3373849463084753342ull, 9853596088523193886ull, 3930084736008073116ull}}, {{17953104905893018943ull, 15943713969710134550ull, 15381869592181771986ull, 2456302960005045697ull}}, {{13218009095511497870ull, 10706270425282892380ull, 5392278934945051271ull, 3070378700006307122ull}}, {{16522511369389372338ull, 8771152013176227571ull, 15963720705536089897ull, 3837973375007883902ull}}, {{8020726596654663759ull, 17011185054303611992ull, 5365639422532668281ull, 2398733359379927439ull}}, {{10025908245818329699ull, 7428923262597351278ull, 2095363259738447448ull, 2998416699224909299ull}}, {{3309013270418136316ull, 9286154078246689098ull, 16454262129955223022ull, 3748020874031136623ull}}, {{6679819312438723102ull, 1192160280476792782ull, 17201442858863096245ull, 2342513046269460389ull}}, {{17573146177403179685ull, 6101886369023378881ull, 7666745518296706594ull, 2928141307836825487ull}}, {{8131374666471810894ull, 16850729998133999410ull, 4971745879443495338ull, 3660176634796031859ull}}, {{940846296234987809ull, 11840040460812723455ull, 1602996330876981269ull, 4575220793495039824ull}}, {{7505557962787949237ull, 9705868297221646111ull, 1001872706798113293ull, 2859512995934399890ull}}, {{4770261435057548642ull, 16744021389954445543ull, 10475712920352417424ull, 3574391244917999862ull}}, {{1351140775394547898ull, 2483282663733505313ull, 3871269113585745973ull, 4467989056147499828ull}}, {{12373678030690062197ull, 3857894674047134772ull, 11642915232845867041ull, 2792493160092187392ull}}, {{15467097538362577746ull, 9434054360986306369ull, 14553644041057333801ull, 3490616450115234240ull}}, {{5498813867671058470ull, 16404253969660270866ull, 18192055051321667251ull, 4363270562644042800ull}}, {{8048444685721799448ull, 7946815721823975339ull, 11370034407076042032ull, 2727044101652526750ull}}, {{5448869838724861406ull, 9933519652279969174ull, 4989170971990276732ull, 3408805127065658438ull}}, {{16034459335260852565ull, 12416899565349961467ull, 15459835751842621723ull, 4261006408832073047ull}}, {{7715694075324338901ull, 5454719219130031965ull, 16579926372542720433ull, 2663129005520045654ull}}, {{14256303612582811531ull, 11430085042339927860ull, 11501535928823624733ull, 3328911256900057068ull}}, {{17820379515728514413ull, 452548247642746113ull, 14376919911029530917ull, 4161139071125071335ull}}, {{4220208169689239652ull, 2588685663990410273ull, 15903103972034538679ull, 2600711919453169584ull}}, {{9886946230538937469ull, 17070915135270176553ull, 1432135891333621732ull, 3250889899316461981ull}}, {{16970368806601059741ull, 2891899845378169075ull, 6401855882594415070ull, 4063612374145577476ull}}, {{8300637494911968386ull, 15642495458643519384ull, 13224531963476285226ull, 2539757733840985922ull}}, {{10375796868639960482ull, 10329747286449623422ull, 7307292917490580725ull, 3174697167301232403ull}}, {{3746374048945174795ull, 17523870126489417182ull, 4522430128435838002ull, 3968371459126540504ull}}, {{16176541835872897959ull, 15564104847483273642ull, 2826518830272398751ull, 2480232161954087815ull}}, {{10997305257986346641ull, 14843445040926704149ull, 17368206593122662151ull, 3100290202442609768ull}}, {{18358317590910321205ull, 13942620282730992282ull, 3263514167693776073ull, 3875362753053262211ull}}, {{16085634512746338657ull, 1796608649065788320ull, 18180597419304467710ull, 2422101720658288881ull}}, {{1660299067223371705ull, 11469132848187011209ull, 8890688718848420925ull, 3027627150822861102ull}}, {{6687059852456602536ull, 501358004951600299ull, 1889988861705750349ull, 3784533938528576378ull}}, {{1873569398571682633ull, 2619191762308444139ull, 5792929056993481872ull, 2365333711580360236ull}}, {{16177019803496767003ull, 3273989702885555173ull, 7241161321241852340ull, 2956667139475450295ull}}, {{6386216699088795042ull, 4092487128606943967ull, 4439765633124927521ull, 3695833924344312869ull}}, {{10908914464571578757ull, 14087019501447809739ull, 5080696529916773652ull, 2309896202715195543ull}}, {{9024457062287085542ull, 17608774376809762174ull, 1739184643968579161ull, 2887370253393994429ull}}, {{2057199291004081120ull, 8175909915730039006ull, 6785666823388111856ull, 3609212816742493036ull}}, {{11794871150609877208ull, 10219887394662548757ull, 8482083529235139820ull, 4511516020928116295ull}}, {{9677637478344867207ull, 15610801658518868781ull, 12218831233413044243ull, 2819697513080072684ull}}, {{16708732866358471913ull, 14901816054721198072ull, 15273539041766305304ull, 3524621891350090855ull}}, {{2439172009238538275ull, 180525994691945975ull, 14480237783780493727ull, 4405777364187613569ull}}, {{8442011533415168278ull, 7030357774323548090ull, 2132619587221726723ull, 2753610852617258481ull}}, {{1329142379914184539ull, 4176261199477047209ull, 7277460502454546308ull, 3442013565771573101ull}}, {{6273113993320118578ull, 5220326499346309011ull, 13708511646495570789ull, 4302516957214466376ull}}, {{1614853236611380159ull, 5568547071305137084ull, 8567819779059731743ull, 2689073098259041485ull}}, {{2018566545764225199ull, 2348997820704033451ull, 15321460742252052583ull, 3361341372823801856ull}}, {{16358266237487445211ull, 16771305331162205525ull, 705081854105514112ull, 4201676716029752321ull}}, {{12529759407643347209ull, 10482065831976378453ull, 11969891204884416080ull, 2626047947518595200ull}}, {{1827141204272020299ull, 13102582289970473067ull, 14962364006105520100ull, 3282559934398244000ull}}, {{16118984560622189086ull, 16378227862463091333ull, 256210933922348509ull, 4103199917997805001ull}}, {{12380208359602562131ull, 12542235423253126035ull, 11689346879769937578ull, 2564499948748628125ull}}, {{10863574431075814759ull, 6454422242211631736ull, 776625544430258261ull, 3205624935935785157ull}}, {{13579468038844768449ull, 12679713821191927574ull, 5582467948965210730ull, 4007031169919731446ull}}, {{3875481505850592377ull, 12536507156672342638ull, 17324100523385420418ull, 2504394481199832153ull}}, {{14067723919168016279ull, 6447261908985652489ull, 7820067598949611811ull, 3130493101499790192ull}}, {{3749596843677856636ull, 3447391367804677708ull, 9775084498687014764ull, 3913116376874737740ull}}, {{11566870064153436206ull, 11377991641732699375ull, 15332799848534160035ull, 2445697735546711087ull}}, {{9846901561764407353ull, 9610803533738486315ull, 14554313792240312140ull, 3057122169433388859ull}}, {{7696940933778121287ull, 12013504417173107894ull, 13581206221873002271ull, 3821402711791736074ull}}, {{198902065183937901ull, 14425969288374274290ull, 13099939907098014323ull, 2388376694869835046ull}}, {{9471999618334698184ull, 13420775592040454958ull, 7151552847017742096ull, 2985470868587293808ull}}, {{2616627486063596922ull, 16775969490050568698ull, 8939441058772177620ull, 3731838585734117260ull}}, {{6247078197217135980ull, 1261608894426829628ull, 14810522698587386821ull, 2332399116083823287ull}}, {{7808847746521419975ull, 6188697136460924939ull, 13901467354806845622ull, 2915498895104779109ull}}, {{5149373664724387065ull, 16959243457430931982ull, 3541776138226393315ull, 3644373618880973887ull}}, {{15660089117760259639ull, 16587368303361277073ull, 18262278228065155356ull, 4555467023601217358ull}}, {{2870026670959080419ull, 1143733152746022363ull, 6802237874113334194ull, 2847166889750760849ull}}, {{17422591393981014235ull, 10653038477787303761ull, 13114483361069055646ull, 3558958612188451061ull}}, {{7943181187194104082ull, 4092926060379353894ull, 2558046146054155846ull, 4448698265235563827ull}}, {{352802223568927147ull, 16393136843019259896ull, 17739679905779705067ull, 2780436415772227391ull}}, {{441002779461158934ull, 15879735035346686966ull, 17562913863797243430ull, 3475545519715284239ull}}, {{9774625511181224475ull, 10626296757328582899ull, 17341956311319166384ull, 4344431899644105299ull}}, {{3803297935274571345ull, 6641435473330364312ull, 8532879685360785038ull, 2715269937277565812ull}}, {{4754122419093214181ull, 17525166378517731198ull, 10666099606700981297ull, 3394087421596957265ull}}, {{15166025060721293535ull, 8071399917865000285ull, 17944310526803614526ull, 4242609276996196581ull}}, {{11784608672164502411ull, 432938930238237274ull, 13521037088465953031ull, 2651630798122622863ull}}, {{5507388803350852206ull, 14376231718079960305ull, 12289610342155053384ull, 3314538497653278579ull}}, {{11495922022615953162ull, 17970289647599950381ull, 10750326909266428826ull, 4143173122066598224ull}}, {{9490794273348664678ull, 15843117048177356892ull, 6718954318291518016ull, 2589483201291623890ull}}, {{11863492841685830848ull, 1357152236512144499ull, 17622064934719173329ull, 3236854001614529862ull}}, {{10217680033679900655ull, 6308126314067568528ull, 12804209131544190853ull, 4046067502018162328ull}}, {{6386050021049937910ull, 6248421955505924282ull, 8002630707215119283ull, 2528792188761351455ull}}, {{17205934563167198195ull, 3198841425955017448ull, 5391602365591511200ull, 3160990235951689319ull}}, {{3060674130249446128ull, 3998551782443771811ull, 2127816938562001096ull, 3951237794939611649ull}}, {{18053822395901761494ull, 2499094864027357381ull, 12859100632669720445ull, 2469523621837257280ull}}, {{8732219939595038155ull, 7735554598461584631ull, 16073875790837150556ull, 3086904527296571600ull}}, {{6303588906066409790ull, 9669443248076980789ull, 1645600664836886579ull, 3858630659120714501ull}}, {{6245586075505200071ull, 3737559020834419041ull, 3334343424736748064ull, 2411644161950446563ull}}, {{12418668612808887993ull, 4671948776043023801ull, 18002987336203098792ull, 3014555202438058203ull}}, {{1688277710728946279ull, 5839935970053779752ull, 17892048151826485586ull, 3768194003047572754ull}}, {{1055173569205591424ull, 8261645999711000249ull, 15794216113318941395ull, 2355121251904732971ull}}, {{5930652979934377184ull, 5715371481211362407ull, 15131084123221288840ull, 2943901564880916214ull}}, {{2801630206490583576ull, 7144214351514203009ull, 9690483117171835242ull, 3679876956101145268ull}}, {{8113723776540617374ull, 18153639976247529569ull, 12113103896464794052ull, 4599846195126431585ull}}, {{16600292406406355619ull, 2122652948299930172ull, 653160907649414427ull, 2874903871954019741ull}}, {{2303621434298392908ull, 16488374240657076428ull, 5428137152989155937ull, 3593629839942524676ull}}, {{2879526792872991135ull, 6775409745539181823ull, 6785171441236444922ull, 4492037299928155845ull}}, {{8717233273186701315ull, 8846317109389376543ull, 6546575159986472028ull, 2807523312455097403ull}}, {{6284855573055988740ull, 11057896386736720679ull, 3571532931555702131ull, 3509404140568871754ull}}, {{3244383447892598021ull, 9210684464993512945ull, 13687788201299403472ull, 4386755175711089692ull}}, {{13556954701001343523ull, 5756677790620945590ull, 17778239662666902978ull, 2741721984819431057ull}}, {{7722821339396903596ull, 16419219275130957796ull, 8387741523051465010ull, 3427152481024288822ull}}, {{9653526674246129495ull, 11300652057058921437ull, 1261304866959555455ull, 4283940601280361028ull}}, {{8339297180617524886ull, 13980436563302907754ull, 10011687578704497967ull, 2677462875800225642ull}}, {{1200749438917130300ull, 12863859685701246789ull, 3291237436525846651ull, 3346828594750282053ull}}, {{6112622817073800779ull, 11468138588699170582ull, 8725732814084696218ull, 4183535743437852566ull}}, {{17655447315953289199ull, 11779272636364369517ull, 841896990375547232ull, 2614709839648657854ull}}, {{8234251089659447786ull, 14724090795455461897ull, 10275743274824209848ull, 3268387299560822317ull}}, {{14904499880501697637ull, 18405113494319327371ull, 17456365111957650214ull, 4085484124451027896ull}}, {{7009469416099867071ull, 6891509915522191703ull, 10910228194973531384ull, 2553427577781892435ull}}, {{4150150751697445935ull, 8614387394402739629ull, 9026099225289526326ull, 3191784472227365544ull}}, {{9799374458049195323ull, 1544612206148648728ull, 11282624031611907908ull, 3989730590284206930ull}}, {{6124609036280747077ull, 10188754665697681263ull, 11663326038184830346ull, 2493581618927629331ull}}, {{3044075276923545942ull, 3512571295267325771ull, 9967471529303650029ull, 3116977023659536664ull}}, {{17640152151436596139ull, 9002400137511545117ull, 12459339411629562536ull, 3896221279574420830ull}}, {{13330938103861566539ull, 5626500085944715698ull, 3175401113841088681ull, 2435138299734013019ull}}, {{7440300592972182366ull, 11644811125858282527ull, 17804309447583524563ull, 3043922874667516273ull}}, {{4688689722787840053ull, 9944327888895465255ull, 8420328754197241992ull, 3804903593334395342ull}}, {{9847960104383481889ull, 6215204930559665784ull, 651019452945888341ull, 2378064745833997089ull}}, {{12309950130479352362ull, 12380692181626970134ull, 5425460334609748330ull, 2972580932292496361ull}}, {{6164065626244414644ull, 6252493190178936860ull, 11393511436689573317ull, 3715726165365620451ull}}, {{13075913053257534961ull, 6213651253075529489ull, 4815101638717289371ull, 2322328853353512782ull}}, {{2509833261289754989ull, 3155378047917023958ull, 15242249085251387522ull, 2902911066691890977ull}}, {{12360663613466969544ull, 13167594596751055755ull, 5217753301282070690ull, 3628638833364863722ull}}, {{10839143498406324026ull, 7236121209084043886ull, 15745563663457364171ull, 4535798541706079652ull}}, {{2162778668076564612ull, 2216732746463833477ull, 617605252806076799ull, 2834874088566299783ull}}, {{7315159353523093669ull, 16605973988361955558ull, 14607064621289759710ull, 3543592610707874728ull}}, {{18367321228758642894ull, 11534095448597668639ull, 18258830776612199638ull, 4429490763384843410ull}}, {{18397104795615233665ull, 2597123636946154995ull, 16023455253810012678ull, 2768431727115527131ull}}, {{18384694976091654177ull, 12469776583037469552ull, 15417633048835127943ull, 3460539658894408914ull}}, {{4534124646405016105ull, 10975534710369449037ull, 10048669274189134121ull, 4325674573618011143ull}}, {{5139670913216829018ull, 18388924240049375408ull, 13197947324009290681ull, 2703546608511256964ull}}, {{6424588641521036273ull, 9151097244779555548ull, 16497434155011613352ull, 3379433260639071205ull}}, {{8030735801901295341ull, 11438871555974444435ull, 6786734638482352978ull, 4224291575798839007ull}}, {{2713366866974615636ull, 11760980740911415676ull, 11159238176692552467ull, 2640182234874274379ull}}, {{3391708583718269545ull, 10089539907711881691ull, 9337361702438302680ull, 3300227793592842974ull}}, {{18074693784930000643ull, 12611924884639852113ull, 2448330091193102542ull, 4125284741991053718ull}}, {{4379154587940168546ull, 3270767034472519667ull, 15365264362277852801ull, 2578302963744408573ull}}, {{862257216497822778ull, 8700144811518037488ull, 5371522397565152289ull, 3222878704680510717ull}}, {{1077821520622278473ull, 15486867032824934764ull, 11326089015383828265ull, 4028598380850638396ull}}, {{9897010487243699854ull, 2761762867874502371ull, 16302177671469668474ull, 2517873988031648997ull}}, {{7759577090627236913ull, 12675575621697903772ull, 6542664034054921880ull, 3147342485039561247ull}}, {{9699471363284046141ull, 15844469527122379715ull, 3566644024141264446ull, 3934178106299451559ull}}, {{3756326592838834886ull, 5291107436024099418ull, 9146681542729372135ull, 2458861316437157224ull}}, {{13918780277903319416ull, 2002198276602736368ull, 11433351928411715169ull, 3073576645546446530ull}}, {{17398475347379149270ull, 7114433864180808364ull, 5068317873659868153ull, 3841970806933058163ull}}, {{1650675055257192486ull, 15975736211181474988ull, 861855661823723643ull, 2401231754333161352ull}}, {{2063343819071490607ull, 15357984245549455831ull, 1077319577279654554ull, 3001539692916451690ull}}, {{16414237829121526971ull, 9974108270082043980ull, 10570021508454344001ull, 3751924616145564612ull}}, {{1035526606346178549ull, 17763032714869747248ull, 15829635479638740808ull, 2344952885090977882ull}}, {{1294408257932723186ull, 3757046819877632444ull, 10563672312693650203ull, 2931191106363722353ull}}, {{1618010322415903982ull, 84622506419652651ull, 17816276409294450658ull, 3663988882954652941ull}}, {{15857570958302043690ull, 9329150169879341621ull, 8435287456335899610ull, 4579986103693316177ull}}, {{12216824858152471258ull, 10442404874601976417ull, 16801269706278407016ull, 2862491314808322610ull}}, {{1435973017408425361ull, 13053006093252470522ull, 11778215095993232962ull, 3578114143510403263ull}}, {{11018338308615307509ull, 7092885579710812344ull, 10111082851564153299ull, 4472642679388004079ull}}, {{6886461442884567193ull, 2127210478105563763ull, 13236955809868677668ull, 2795401674617502549ull}}, {{3996390785178321087ull, 2659013097631954704ull, 2711136707053683373ull, 3494252093271878187ull}}, {{4995488481472901359ull, 7935452390467331284ull, 17223978939099267928ull, 4367815116589847733ull}}, {{12345552337775339158ull, 4959657744042082052ull, 13070829846150736407ull, 2729884447868654833ull}}, {{15431940422219173947ull, 1587886161625214661ull, 2503479252406256797ull, 3412355559835818542ull}}, {{5454867472491803722ull, 6596543720458906231ull, 12352721102362596804ull, 4265444449794773177ull}}, {{10326821197948459182ull, 13346211862141592202ull, 802921661335541146ull, 2665902781121733236ull}}, {{3685154460580798170ull, 7459392790822214445ull, 1003652076669426433ull, 3332378476402166545ull}}, {{9218129094153385616ull, 13935927006955155960ull, 5866251114264170945ull, 4165473095502708181ull}}, {{5761330683845866010ull, 1792425351705890619ull, 5972249955628800793ull, 2603420684689192613ull}}, {{2589977336379944609ull, 6852217708059751178ull, 12076998462963388895ull, 3254275855861490766ull}}, {{12460843707329706569ull, 3953586116647301068ull, 5872876041849460311ull, 4067844819826863458ull}}, {{17011399353935842414ull, 9388520350545645023ull, 8282233544583300598ull, 2542403012391789661ull}}, {{16652563173992415113ull, 2512278401327280471ull, 14964477949156513652ull, 3178003765489737076ull}}, {{16204017949063130987ull, 3140348001659100589ull, 258853362736090449ull, 3972504706862171346ull}}, {{12433354227378150819ull, 13491932547105407628ull, 4773469370137444434ull, 2482815441788857091ull}}, {{15541692784222688524ull, 7641543647026983727ull, 1355150694244417639ull, 3103519302236071364ull}}, {{14815429961850972750ull, 4940243540356341755ull, 1693938367805522049ull, 3879399127795089205ull}}, {{6953800716943164017ull, 14616867258791183357ull, 3364554489092145232ull, 2424624454871930753ull}}, {{13303936914606342925ull, 18271084073488979196ull, 8817379129792569444ull, 3030780568589913441ull}}, {{16629921143257928657ull, 4392111018151672379ull, 15633409930668099710ull, 3788475710737391801ull}}, {{8087857705322511459ull, 16580127441626958949ull, 2853352179026480462ull, 2367797319210869876ull}}, {{14721508150080527227ull, 11501787265178922878ull, 3566690223783100578ull, 2959746649013587345ull}}, {{9178513150745883226ull, 5153862044618877790ull, 9070048798156263627ull, 3699683311266984181ull}}, {{1124884700788789112ull, 915320768673104667ull, 7974623508061358719ull, 2312302069541865113ull}}, {{15241163931268150102ull, 14979209016123544545ull, 14579965403504086302ull, 2890377586927331391ull}}, {{5216396858803023916ull, 9500639233299654874ull, 13613270735952719974ull, 3612971983659164239ull}}, {{15743868110358555702ull, 2652427004769792784ull, 12404902401513512064ull, 4516214979573955299ull}}, {{9839917568974097314ull, 1657766877981120490ull, 5447220991732251088ull, 2822634362233722062ull}}, {{3076524924362845835ull, 2072208597476400613ull, 16032398276520089668ull, 3528292952792152577ull}}, {{8457342173880945197ull, 2590260746845500766ull, 6205439790367948373ull, 4410366190990190722ull}}, {{674152840248202844ull, 3924755975992131931ull, 8490085887407355637ull, 2756478869368869201ull}}, {{14677749105592417267ull, 9517630988417552817ull, 15224293377686582450ull, 3445598586711086501ull}}, {{4512128326708357872ull, 2673666698667165214ull, 5195308666826064351ull, 4306998233388858127ull}}, {{16655138259474887382ull, 8588570714308060114ull, 10164596944407372075ull, 2691873895868036329ull}}, {{11595550787488833420ull, 6124027374457687239ull, 17317432198936602998ull, 3364842369835045411ull}}, {{9882752465933653870ull, 16878406254926884857ull, 17035104230243365843ull, 4206052962293806764ull}}, {{17705935337277003429ull, 8243160900115609083ull, 1423568107047327844ull, 2628783101433629228ull}}, {{17520733153168866382ull, 10303951125144511354ull, 1779460133809159805ull, 3285978876792036535ull}}, {{12677544404606307170ull, 17491624924858027097ull, 16059383222543613468ull, 4107473595990045668ull}}, {{1005936225237860125ull, 1708893541181491128ull, 813742477234982610ull, 2567170997493778543ull}}, {{1257420281547325157ull, 11359488963331639718ull, 14852236151825891974ull, 3208963746867223178ull}}, {{10795147388788932254ull, 4975989167309773839ull, 9341923152927589160ull, 4011204683584028973ull}}, {{13664496145634164515ull, 3109993229568608649ull, 8144544979793437177ull, 2507002927240018108ull}}, {{3245562126760541931ull, 8499177555388148716ull, 10180681224741796471ull, 3133753659050022635ull}}, {{4056952658450677414ull, 6012285925807797991ull, 8114165512499857685ull, 3917192073812528294ull}}, {{9453124439172755240ull, 6063521712843567696ull, 459667426885023149ull, 2448245046132830184ull}}, {{11816405548965944050ull, 12191088159481847524ull, 574584283606278936ull, 3060306307666037730ull}}, {{14770506936207430062ull, 15238860199352309405ull, 9941602391362624478ull, 3825382884582547162ull}}, {{11537409844343337741ull, 4912601606167805474ull, 10825187513029028203ull, 2390864302864091976ull}}, {{5198390268574396368ull, 1529065989282368939ull, 13531484391286285254ull, 2988580378580114970ull}}, {{1886301817290607556ull, 11134704523457736982ull, 7690983452253080759ull, 3735725473225143713ull}}, {{15013996691088793435ull, 13876719354802167469ull, 16336079703726645234ull, 2334828420765714820ull}}, {{4932437808578828081ull, 8122527156647933529ull, 1973355555948754927ull, 2918535525957143526ull}}, {{10777233279150923005ull, 5541472927382529007ull, 11690066481790719467ull, 3648169407446429407ull}}, {{8859855580511265853ull, 2315155140800773355ull, 10000897083811011430ull, 4560211759308036759ull}}, {{3231566728605847206ull, 15282030018282647059ull, 13168089705022963999ull, 2850132349567522974ull}}, {{17874516466039472719ull, 14490851504425920919ull, 7236740094423929191ull, 3562665436959403718ull}}, {{17731459564121952995ull, 13501878362105013245ull, 18269297154884687297ull, 4453331796199254647ull}}, {{13388005236789914574ull, 1521144948674551422ull, 18335839749444011417ull, 2783332372624534154ull}}, {{7511634509132617410ull, 6513117204270577182ull, 13696427649950238463ull, 3479165465780667693ull}}, {{166171099560995954ull, 3529710486910833574ull, 3285476507155634367ull, 4348956832225834617ull}}, {{13938914992507786183ull, 9123598081960352839ull, 13582637863040741239ull, 2718098020141146635ull}}, {{12811957722207344825ull, 6792811584023053145ull, 12366611310373538645ull, 3397622525176433294ull}}, {{2179889097477017319ull, 13102700498456204336ull, 6234892101112147498ull, 4247028156470541618ull}}, {{1362430685923135825ull, 12800873829962515614ull, 8508493581622480090ull, 2654392597794088511ull}}, {{10926410394258695589ull, 6777720250598368709ull, 6023930958600712209ull, 3317990747242610639ull}}, {{18269699011250757390ull, 13083836331675348790ull, 2918227679823502357ull, 4147488434053263299ull}}, {{6806875863604335465ull, 10483240716510786946ull, 17964793364385546637ull, 2592180271283289561ull}}, {{17731966866360195139ull, 17715736914065871586ull, 8620933650199769584ull, 3240225339104111952ull}}, {{12941586546095468115ull, 3697927068872787867ull, 10776167062749711981ull, 4050281673880139940ull}}, {{5782648582095973620ull, 4617047427259186369ull, 15958476451073345796ull, 2531426046175087462ull}}, {{11839996746047354929ull, 5771309284073982961ull, 10724723526986906437ull, 3164282557718859328ull}}, {{964937877277029950ull, 11825822623519866606ull, 13405904408733633046ull, 3955353197148574160ull}}, {{14438144228580307431ull, 2779453121272528724ull, 8378690255458520654ull, 2472095748217858850ull}}, {{18047680285725384288ull, 12697688438445436713ull, 1249990782468375009ull, 3090119685272323563ull}}, {{8724542301874566648ull, 2037052492774632180ull, 15397546533367632474ull, 3862649606590404453ull}}, {{14676210975526379963ull, 5884843826411533016ull, 11929309592568464248ull, 2414156004119002783ull}}, {{18345263719407974954ull, 7356054783014416270ull, 10299950972283192406ull, 3017695005148753479ull}}, {{13708207612405192884ull, 18418440515622796146ull, 8263252696926602603ull, 3772118756435941849ull}}, {{13179315776180633457ull, 9205682313050553639ull, 16693747981647596387ull, 2357574222772463655ull}}, {{11862458701798403917ull, 6895416872885804145ull, 16255498958632107580ull, 2946967778465579569ull}}, {{993015321965841184ull, 8619271091107255182ull, 6484315643007970763ull, 3683709723081974462ull}}, {{10464641189312077288ull, 6162402845456681073ull, 17328766590614739262ull, 4604637153852468077ull}}, {{18069615789388518065ull, 17686559833692589382ull, 13136322128347905990ull, 2877898221157792548ull}}, {{13363647699880871773ull, 12884827755260960920ull, 16420402660434882488ull, 3597372776447240685ull}}, {{16704559624851089717ull, 16106034694076201150ull, 6690445270261439398ull, 4496715970559050857ull}}, {{5828663747104543169ull, 5454585665370237815ull, 15710743339981869384ull, 2810447481599406785ull}}, {{2674143665453291057ull, 6818232081712797269ull, 5803371119695173018ull, 3513059351999258482ull}}, {{7954365600244001725ull, 17746162138995772394ull, 16477585936473742080ull, 4391324189999073102ull}}, {{9583164518579888983ull, 11091351336872357746ull, 5686805191868700896ull, 2744577618749420689ull}}, {{2755583611370085420ull, 13864189171090447183ull, 11720192508263264024ull, 3430722023436775861ull}}, {{17279537569494770487ull, 17330236463863058978ull, 815182580046916318ull, 4288402529295969827ull}}, {{15411396999361619459ull, 6219711771487023957ull, 16650390177025180363ull, 2680251580809981141ull}}, {{5429188193919860611ull, 3162953695931392043ull, 6977929665999311742ull, 3350314476012476427ull}}, {{2174799223972437860ull, 13177064156769015862ull, 4110726064071751773ull, 4187893095015595534ull}}, {{15194307570264937374ull, 10541508107194328865ull, 16404261845327008570ull, 2617433184384747208ull}}, {{5157826407549008006ull, 3953513097138135274ull, 2058583232949209097ull, 3271791480480934011ull}}, {{15670655046291035815ull, 9553577389850056996ull, 16408287096468675083ull, 4089739350601167513ull}}, {{570787367077121577ull, 3665142859442591671ull, 3337650407651840071ull, 2556087094125729696ull}}, {{14548542264128565683ull, 18416486629585403300ull, 4172063009564800088ull, 3195108867657162120ull}}, {{18185677830160707103ull, 4573864213272202509ull, 5215078761956000111ull, 3993886084571452650ull}}, {{13671891653064135892ull, 9776194160936208424ull, 7871110244649887973ull, 2496178802857157906ull}}, {{17089864566330169865ull, 16831928719597648434ull, 615515768957584158ull, 3120223503571447383ull}}, {{12138958671057936523ull, 11816538862642284735ull, 14604452766479143910ull, 3900279379464309228ull}}, {{14504378197052292183ull, 2773650770724040055ull, 18351155015904240752ull, 2437674612165193267ull}}, {{13518786727887977324ull, 3467063463405050069ull, 18327257751452913036ull, 3047093265206491584ull}}, {{3063425354577807943ull, 4333829329256312587ull, 4462328115606589679ull, 3808866581508114481ull}}, {{18055541911106987629ull, 9626172358426277222ull, 14318170118322588309ull, 2380541613442571550ull}}, {{13346055352028958728ull, 16644401466460234432ull, 8674340611048459578ull, 2975677016803214438ull}}, {{16682569190036198410ull, 11582129796220517232ull, 1619553726955798665ull, 3719596271004018048ull}}, {{10426605743772624006ull, 321302094996741414ull, 1012221079347374166ull, 2324747669377511280ull}}, {{3809885142861004200ull, 9624999655600702576ull, 1265276349184217707ull, 2905934586721889100ull}}, {{4762356428576255250ull, 7419563551073490316ull, 1581595436480272134ull, 3632418233402361375ull}}, {{5952945535720319062ull, 51082401987087087ull, 15812052350882503880ull, 4540522791752951718ull}}, {{10638119987466281270ull, 31926501241929429ull, 5270846700874177021ull, 2837826744845594824ull}}, {{17909336002760239491ull, 4651594144979799690ull, 6588558376092721276ull, 3547283431056993530ull}}, {{13163297966595523556ull, 5814492681224749613ull, 17459070006970677403ull, 4434104288821241912ull}}, {{10532904238335896175ull, 1328214916551774556ull, 10911918754356673377ull, 2771315180513276195ull}}, {{13166130297919870218ull, 6271954664117106099ull, 9028212424518453817ull, 3464143975641595244ull}}, {{11845976853972449868ull, 12451629348573770528ull, 11285265530648067271ull, 4330179969551994055ull}}, {{7403735533732781168ull, 14699797370499688436ull, 13970819984296123900ull, 2706362480969996284ull}}, {{9254669417165976460ull, 18374746713124610545ull, 17463524980370154875ull, 3382953101212495355ull}}, {{16180022789884858479ull, 18356747372978375277ull, 17217720207035305690ull, 4228691376515619194ull}}, {{12418357252891730501ull, 16084653126538872452ull, 15372761147824453960ull, 2642932110322261996ull}}, {{15522946566114663127ull, 1659072334464038949ull, 769207361071015835ull, 3303665137902827496ull}}, {{5568625152361165196ull, 15908898473362212399ull, 961509201338769793ull, 4129581422378534370ull}}, {{10397919747866810104ull, 3025532518210300893ull, 5212629269264119025ull, 2580988388986583981ull}}, {{17609085703260900534ull, 8393601666190264020ull, 11127472605007536685ull, 3226235486233229976ull}}, {{3564613055366574051ull, 15103688101165217930ull, 13909340756259420856ull, 4032794357791537470ull}}, {{6839569178031496686ull, 9439805063228261206ull, 4081651954234750131ull, 2520496473619710919ull}}, {{17772833509394146665ull, 7188070310607938603ull, 490378924366049760ull, 3150620592024638649ull}}, {{17604355868315295428ull, 8985087888259923254ull, 5224659673884950104ull, 3938275740030798311ull}}, {{6391036399269671738ull, 5615679930162452034ull, 10182941323819175671ull, 2461422337519248944ull}}, {{17212167535941865481ull, 2407913894275677138ull, 12728676654773969589ull, 3076777921899061180ull}}, {{12291837383072556043ull, 7621578386271984327ull, 15910845818467461986ull, 3845972402373826475ull}}, {{14599927392061429383ull, 9375172509847378108ull, 7638435627328469789ull, 2403732751483641547ull}}, {{18249909240076786729ull, 16330651655736610539ull, 4936358515733199332ull, 3004665939354551934ull}}, {{18200700531668595507ull, 1966570495961211558ull, 15393820181521274974ull, 3755832424193189917ull}}, {{6763751813865484288ull, 15064164615257920936ull, 11926980622664490810ull, 2347395265120743698ull}}, {{8454689767331855360ull, 9606833732217625362ull, 5685353741475837705ull, 2934244081400929623ull}}, {{1344990172310043392ull, 16620228183699419607ull, 2495006158417409227ull, 3667805101751162029ull}}, {{15516295770669717951ull, 16163599211196886604ull, 7730443716449149438ull, 4584756377188952536ull}}, {{474312819813797912ull, 5490563488570666224ull, 4831527322780718399ull, 2865472735743095335ull}}, {{592891024767247390ull, 2251518342285944876ull, 1427723135048510095ull, 3581840919678869169ull}}, {{741113780959059237ull, 16649455983139594807ull, 6396339937238025522ull, 4477301149598586461ull}}, {{7380725140740493879ull, 15017596007889634658ull, 6303555469987459903ull, 2798313218499116538ull}}, {{2534389070841541ull, 14160308991434655419ull, 17102816374339100687ull, 3497891523123895672ull}}, {{13838226041620715638ull, 13088700220865931369ull, 2931776394214324243ull, 4372364403904869591ull}}, {{1731362248371865418ull, 5874594628827513154ull, 8749889274025034508ull, 2732727752440543494ull}}, {{11387574847319607580ull, 7343243286034391442ull, 1713989555676517327ull, 3415909690550679368ull}}, {{5011096522294733667ull, 4567368089115601399ull, 2142486944595646659ull, 4269887113188349210ull}}, {{10049464354075290398ull, 548762046483556922ull, 5950740358799667066ull, 2668679445742718256ull}}, {{3338458405739337190ull, 9909324594959221961ull, 7438425448499583832ull, 3335849307178397820ull}}, {{8784759025601559391ull, 12386655743699027451ull, 9298031810624479790ull, 4169811633972997275ull}}, {{3184631381787280668ull, 3129973821384504253ull, 3505426872426605917ull, 2606132271233123297ull}}, {{8592475245661488738ull, 8524153295158018220ull, 8993469608960645300ull, 3257665339041404121ull}}, {{10740594057076860923ull, 10655191618947522775ull, 15853523029628194529ull, 4072081673801755151ull}}, {{13630400313314119933ull, 18188709807910671494ull, 16825980921158703436ull, 2545051046126096969ull}}, {{7814628354787874108ull, 4289143186178787752ull, 7197418096166215584ull, 3181313807657621212ull}}, {{9768285443484842635ull, 5361428982723484690ull, 8996772620207769480ull, 3976642259572026515ull}}, {{10716864420605414551ull, 3350893114202177931ull, 3317139878416161973ull, 2485401412232516572ull}}, {{8784394507329380285ull, 8800302411180110318ull, 4146424848020202466ull, 3106751765290645715ull}}, {{1757121097306949548ull, 1777005977120362090ull, 571345041597865179ull, 3883439706613307144ull}}, {{5709886704244231371ull, 17251529800196083970ull, 357090650998665736ull, 2427149816633316965ull}}, {{16360730417160065022ull, 3117668176535553346ull, 5058049332175720075ull, 3033937270791646206ull}}, {{11227540984595305470ull, 17732143275951605395ull, 15545933702074425901ull, 3792421588489557757ull}}, {{4711370106158371967ull, 13388432556683447324ull, 12022051573010210140ull, 2370263492805973598ull}}, {{5889212632697964958ull, 16735540695854309155ull, 5804192429407986867ull, 2962829366007466998ull}}, {{2749829772445068294ull, 16307739851390498540ull, 16478612573614759392ull, 3703536707509333747ull}}, {{10942015644632943492ull, 10192337407119061587ull, 7993289849295530668ull, 2314710442193333592ull}}, {{9065833537363791461ull, 12740421758898826984ull, 9991612311619413335ull, 2893388052741666990ull}}, {{11332291921704739326ull, 11313841180196145826ull, 3266143352669490861ull, 3616735065927083738ull}}, {{4941992865276148349ull, 307243419963018571ull, 13306051227691639385ull, 4520918832408854672ull}}, {{782902531583898766ull, 11721242183545356367ull, 8316282017307274615ull, 2825574270255534170ull}}, {{14813686219762037170ull, 10039866711004307554ull, 1171980484779317461ull, 3531967837819417713ull}}, {{9293735737847770654ull, 17161519407182772347ull, 6076661624401534730ull, 4414959797274272141ull}}, {{3502741826941162707ull, 15337635647916620621ull, 6103756524464653158ull, 2759349873296420088ull}}, {{8990113302103841287ull, 9948672523040999968ull, 7629695655580816448ull, 3449187341620525110ull}}, {{11237641627629801609ull, 12435840653801249960ull, 313747532621244752ull, 4311484177025656388ull}}, {{7023526017268626006ull, 7772400408625781225ull, 9419464244743053778ull, 2694677610641035242ull}}, {{13391093540013170411ull, 492128473927450723ull, 2550958269074041415ull, 3368347013301294053ull}}, {{12127180906589075110ull, 14450218647691477116ull, 7800383854769939672ull, 4210433766626617566ull}}, {{16802860103472947752ull, 9031386654807173197ull, 263553890803824391ull, 2631521104141635979ull}}, {{7168517074059020978ull, 6677547300081578593ull, 14164500418786944201ull, 3289401380177044973ull}}, {{13572332361001164126ull, 12958620143529361145ull, 3870567468201516539ull, 4111751725221306217ull}}, {{1565178697984645723ull, 5793294580492156764ull, 13948319713694417597ull, 2569844828263316385ull}}, {{1956473372480807154ull, 11853304244042583859ull, 3600341586835858284ull, 3212306035329145482ull}}, {{16280649770883172654ull, 14816630305053229823ull, 13723799020399598663ull, 4015382544161431852ull}}, {{17092935134443064765ull, 16177922968299350495ull, 17800746424604524972ull, 2509614090100894907ull}}, {{16754482899626443052ull, 1775659636664636503ull, 17639247012328268312ull, 3137017612626118634ull}}, {{16331417606105665911ull, 2219574545830795629ull, 12825686728555559582ull, 3921272015782648293ull}}, {{12512979013029735146ull, 15222292146426410980ull, 10321897214560918690ull, 2450795009864155183ull}}, {{15641223766287168933ull, 9804493146178237917ull, 8290685499773760459ull, 3063493762330193979ull}}, {{5716471652576797454ull, 7643930414295409493ull, 5751670856289812670ull, 3829367202912742474ull}}, {{5878637792074192361ull, 165770490507243029ull, 8206480303608520823ull, 2393354501820464046ull}}, {{11959983258520128355ull, 14042271168416217498ull, 1034728342655875220ull, 2991693127275580058ull}}, {{5726607036295384636ull, 17552838960520271873ull, 10516782465174619833ull, 3739616409094475072ull}}, {{15108344443753085158ull, 4052995322684088064ull, 6572989040734137396ull, 2337260255684046920ull}}, {{438686480981804831ull, 5066244153355110081ull, 8216236300917671745ull, 2921575319605058650ull}}, {{5160044119654643942ull, 10944491210121275505ull, 1046923339292313873ull, 3651969149506323313ull}}, {{11061741167995692832ull, 18292300031078982285ull, 5920340192542780245ull, 4564961436882904141ull}}, {{9219431239211001972ull, 13738530528638057880ull, 6006055629552931605ull, 2853100898051815088ull}}, {{11524289049013752465ull, 3338105105515408638ull, 7507569536941164507ull, 3566376122564768860ull}}, {{5181989274412414773ull, 18007689437176424510ull, 9384461921176455633ull, 4457970153205961075ull}}, {{17073801351789922945ull, 4337276870594183462ull, 3559445691521590819ull, 2786231345753725672ull}}, {{12118879652882627874ull, 809910069815341424ull, 4449307114401988524ull, 3482789182192157090ull}}, {{15148599566103284842ull, 1012387587269176780ull, 14785005929857261463ull, 4353486477740196362ull}}, {{244502691959777218ull, 7550271269684317344ull, 13852314724588176318ull, 2720929048587622726ull}}, {{305628364949721523ull, 214467050250620872ull, 8092021368880444590ull, 3401161310734528408ull}}, {{382035456187151903ull, 9491455849668051898ull, 10115026711100555737ull, 4251451638418160510ull}}, {{4850458178544357844ull, 17461374952111002196ull, 1710205676010459431ull, 2657157274011350319ull}}, {{6063072723180447305ull, 17215032671711364841ull, 15972815150295238001ull, 3321446592514187898ull}}, {{12190526922402947035ull, 7683732784357042339ull, 10742646901014271694ull, 4151808240642734873ull}}, {{5313236317288147945ull, 190646971795763558ull, 18243369359202389569ull, 2594880150401709295ull}}, {{15864917433464960739ull, 4849994733172092351ull, 18192525680575599057ull, 3243600188002136619ull}}, {{15219460773403813020ull, 10674179434892503343ull, 18128971082292110917ull, 4054500235002670774ull}}, {{16429692011018464993ull, 8977205156021508541ull, 6718920908005181419ull, 2534062646876669234ull}}, {{6702056958490917530ull, 6609820426599497773ull, 17622023171861252582ull, 3167578308595836542ull}}, {{12989257216541034816ull, 17485647570104148024ull, 12804156927971789919ull, 3959472885744795678ull}}, {{8118285760338146760ull, 17846058758956174371ull, 3390912061554980795ull, 2474670553590497299ull}}, {{5536171181995295546ull, 17695887430267830060ull, 18073698132225889706ull, 3093338191988121623ull}}, {{6920213977494119432ull, 12896487250980011767ull, 17980436646854974229ull, 3866672739985152029ull}}, {{11242662763574906501ull, 10366147541076201306ull, 13543615913498052845ull, 2416670462490720018ull}}, {{4829956417613857319ull, 17569370444772639537ull, 7706147855017790248ull, 3020838078113400023ull}}, {{10649131540444709552ull, 3514968982256247805ull, 5020998800344849907ull, 3776047597641750029ull}}, {{8961550221991637422ull, 18337756678406012542ull, 5443967259429225143ull, 2360029748526093768ull}}, {{1978565740634770970ull, 18310509829580127774ull, 6804959074286531429ull, 2950037185657617210ull}}, {{11696579212648239520ull, 9053079231692996005ull, 17729570879712940095ull, 3687546482072021512ull}}, {{785665960528135688ull, 6704663021188857103ull, 3715219525931623503ull, 4609433102590026891ull}}, {{7408570252971166661ull, 11107943415884117545ull, 16169194493570737ull, 2880895689118766807ull}}, {{13872398834641346230ull, 49871214572983219ull, 13855269548399127134ull, 3601119611398458508ull}}, {{12728812524874294884ull, 9285711055071004832ull, 17319086935498908917ull, 4501399514248073135ull}}, {{7955507828046434303ull, 8109412418633071972ull, 17741958362327899929ull, 2813374696405045709ull}}, {{9944384785058042878ull, 14748451541718727869ull, 8342389897627711199ull, 3516718370506307137ull}}, {{17042166999749941502ull, 13823878408721021932ull, 15039673390462026903ull, 4395897963132883921ull}}, {{1427982337988937631ull, 15557453033091720564ull, 2482266841397684958ull, 2747436226958052451ull}}, {{1784977922486172038ull, 10223444254509874897ull, 16937891607029269910ull, 3434295283697565563ull}}, {{6842908421535102952ull, 3555933281282567813ull, 16560678490359199484ull, 4292869104621956954ull}}, {{6582660772673133297ull, 11445830337656380691ull, 14962110074901887581ull, 2683043190388723096ull}}, {{3616639947414028717ull, 472229866788312152ull, 255893519917807861ull, 3353803987985903871ull}}, {{4520799934267535896ull, 5201973351912778094ull, 14154924955179423538ull, 4192254984982379838ull}}, {{16660558014199373647ull, 7862919363372874212ull, 4235142078559751807ull, 2620159365613987399ull}}, {{2378953444039665443ull, 5216963185788704862ull, 682241579772301855ull, 3275199207017484249ull}}, {{12197063841904357612ull, 1909517963808493173ull, 5464487993142765223ull, 4093999008771855311ull}}, {{9929007910403917459ull, 8110977755021390089ull, 10332834023355310120ull, 2558749380482409569ull}}, {{17022945906432284728ull, 10138722193776737611ull, 17527728547621525554ull, 3198436725603011961ull}}, {{16666996364612968006ull, 3450030705366146206ull, 8074602629244743231ull, 3998045907003764952ull}}, {{5805186709455717100ull, 9073798218494923235ull, 5046626643277964519ull, 2498778691877353095ull}}, {{2644797368392258471ull, 6730561754691266140ull, 1696597285670067745ull, 3123473364846691369ull}}, {{3305996710490323089ull, 13024888211791470579ull, 6732432625514972585ull, 3904341706058364211ull}}, {{18207149008552309595ull, 1223026104728587255ull, 1901927381733163914ull, 2440213566286477632ull}}, {{18147250242262999089ull, 10752154667765509877ull, 2377409227166454892ull, 3050266957858097040ull}}, {{8849004747546585149ull, 13440193334706887347ull, 2971761533958068615ull, 3812833697322621300ull}}, {{3224784958002921766ull, 15317649861832886448ull, 11080722995578568692ull, 2383021060826638312ull}}, {{4030981197503652208ull, 700318253581556444ull, 13850903744473210866ull, 2978776326033297890ull}}, {{5038726496879565260ull, 10098769853831721363ull, 8090257643736737774ull, 3723470407541622363ull}}, {{843361051336034336ull, 1700045140217437948ull, 2750568018121767157ull, 2327169004713513977ull}}, {{1054201314170042919ull, 6736742443699185339ull, 8049896041079596850ull, 2908961255891892471ull}}, {{15152809697994717361ull, 17644300091478757481ull, 5450684032922108158ull, 3636201569864865589ull}}, {{5105954067211232989ull, 12832003077493671044ull, 11425041059580023102ull, 4545251962331081986ull}}, {{12414593328861796426ull, 3408315905006156498ull, 11752336680664902343ull, 2840782476456926241ull}}, {{6294869624222469725ull, 18095452936539859335ull, 855362795548964216ull, 3550978095571157802ull}}, {{3256901011850699252ull, 4172572096965272553ull, 10292575531290981079ull, 4438722619463947252ull}}, {{13564778178475156793ull, 9525386588244377201ull, 15656231743911638982ull, 2774201637164967032ull}}, {{3120914667811782279ull, 2683361198450695694ull, 1123545606179997112ull, 3467752046456208791ull}}, {{13124515371619503656ull, 3354201498063369617ull, 15239490063007160102ull, 4334690058070260988ull}}, {{1285293079621107929ull, 15931433991571769723ull, 301309252524699255ull, 2709181286293913118ull}}, {{15441674404808548624ull, 15302606471037324249ull, 9600008602510649877ull, 3386476607867391397ull}}, {{5467034950728522067ull, 5293200033514491600ull, 16611696771565700251ull, 4233095759834239246ull}}, {{3416896844205326292ull, 1002407011732863298ull, 5770624463801174753ull, 2645684849896399529ull}}, {{13494493092111433673ull, 5864694783093467026ull, 11824966598178856345ull, 3307106062370499411ull}}, {{7644744328284516283ull, 11942554497294221687ull, 10169522229296182527ull, 4133882577963124264ull}}, {{11695494232818904533ull, 14381625588449970410ull, 6355951393310114079ull, 2583676611226952665ull}}, {{5395995754168854858ull, 13365345967135075109ull, 12556625260065030503ull, 3229595764033690831ull}}, {{11356680711138456477ull, 12094996440491455982ull, 11084095556653900225ull, 4036994705042113539ull}}, {{2486239426034147394ull, 641843747666078133ull, 4621716713694993689ull, 2523121690651320962ull}}, {{7719485300970072147ull, 5413990703009985570ull, 15000517928973517919ull, 3153902113314151202ull}}, {{425984589357814375ull, 2155802360335094059ull, 9527275374362121591ull, 3942377641642689003ull}}, {{16407141432844491649ull, 8264905502850515642ull, 3648704099762632042ull, 2463986026026680627ull}}, {{11285554754200838753ull, 1107759841708368745ull, 18395938179985453765ull, 3079982532533350783ull}}, {{271885387468884729ull, 5996385820562848836ull, 18383236706554429302ull, 3849978165666688479ull}}, {{9393300404022828764ull, 17582799193133944234ull, 18407051969237600169ull, 2406236353541680299ull}}, {{2518253468173760147ull, 8143440936135266581ull, 18397128943119612308ull, 3007795441927100374ull}}, {{7759502853644588087ull, 10179301170169083226ull, 13773039142044739577ull, 3759744302408875468ull}}, {{9461375301955255459ull, 17891278277424146776ull, 17831521500632738043ull, 2349840189005547167ull}}, {{11826719127444069323ull, 17752411828352795566ull, 17677715857363534650ull, 2937300236256933959ull}}, {{5560026872450310846ull, 12967142748586218650ull, 17485458803277030409ull, 3671625295321167449ull}}, {{16173405627417664365ull, 2373870380450609600ull, 8021765448814124300ull, 4589531619151459312ull}}, {{10108378517136040228ull, 10707041024636406808ull, 5013603405508827687ull, 2868457261969662070ull}}, {{12635473146420050285ull, 8772115262368120606ull, 15490376293740810417ull, 3585571577462077587ull}}, {{6570969396170287049ull, 15576830096387538662ull, 14751284348748625117ull, 4481964471827596984ull}}, {{17941913927888593118ull, 12041361819455905615ull, 9219552717967890698ull, 2801227794892248115ull}}, {{17815706391433353493ull, 5828330237465106211ull, 6912754879032475469ull, 3501534743615310144ull}}, {{17657946970864303962ull, 11897098815258770668ull, 8640943598790594336ull, 4376918429519137680ull}}, {{1812844819935414168ull, 7435686759536731668ull, 5400589749244121460ull, 2735574018449461050ull}}, {{2266056024919267710ull, 9294608449420914585ull, 15974109223409927633ull, 3419467523061826312ull}}, {{7444256049576472542ull, 16229946580203531135ull, 1520892455552857925ull, 4274334403827282891ull}}, {{11570189058626377195ull, 12449559621840900911ull, 17091458849216393867ull, 2671459002392051806ull}}, {{9851050304855583589ull, 10950263508873738235ull, 12140951524665716526ull, 3339323752990064758ull}}, {{7702126862642091583ull, 4464457349237396986ull, 5952817368977369850ull, 4174154691237580948ull}}, {{9425515307578695143ull, 7401971861700761020ull, 12943882892465631964ull, 2608846682023488092ull}}, {{11781894134473368929ull, 9252464827125951275ull, 16179853615582039955ull, 3261058352529360115ull}}, {{10115681649664323257ull, 6953895015480051190ull, 15613131001050162040ull, 4076322940661700144ull}}, {{1710615012612814132ull, 4346184384675031994ull, 9758206875656351275ull, 2547701837913562590ull}}, {{11361640802620793473ull, 821044462416402088ull, 2974386557715663286ull, 3184627297391953238ull}}, {{14202051003275991841ull, 10249677614875278418ull, 12941355233999354915ull, 3980784121739941547ull}}, {{13487967895474882805ull, 4100205500083355059ull, 5782504012035902870ull, 2487990076087463467ull}}, {{12248273850916215602ull, 14348628911958969632ull, 2616443996617490683ull, 3109987595109329334ull}}, {{15310342313645269502ull, 13324100121521324136ull, 12493927032626639162ull, 3887484493886661667ull}}, {{9568963946028293439ull, 12939248594378215489ull, 5502861386177955524ull, 2429677808679163542ull}}, {{16572890950962754703ull, 16174060742972769361ull, 16101948769577220213ull, 3037097260848954427ull}}, {{6881055633421279666ull, 6382517873433797990ull, 15515749943544137363ull, 3796371576061193034ull}}, {{18135717826170463503ull, 1683230661682429791ull, 14309029733142473756ull, 2372732235038245646ull}}, {{18057961264285691475ull, 2104038327103037239ull, 8662915129573316387ull, 2965915293797807058ull}}, {{17960765561929726440ull, 16465105964160960261ull, 1605271875111869675ull, 3707394117247258823ull}}, {{13531321485419772977ull, 7984848218386906211ull, 7920823949586000403ull, 2317121323279536764ull}}, {{12302465838347328317ull, 5369374254556244860ull, 9901029936982500504ull, 2896401654099420955ull}}, {{15378082297934160396ull, 6711717818195306075ull, 7764601402800737726ull, 3620502067624276194ull}}, {{14610916853990312591ull, 17613019309598908402ull, 482379716646146349ull, 4525627584530345243ull}}, {{13743509052171333274ull, 13313980077713011703ull, 16442388387399699132ull, 2828517240331465776ull}}, {{12567700296786778688ull, 16642475097141264629ull, 2106241410540072299ull, 3535646550414332221ull}}, {{1874567315701309648ull, 16191407852999192883ull, 7244487781602478278ull, 4419558188017915276ull}}, {{17312505636809176194ull, 5507943889697107647ull, 13751176900356324732ull, 2762223867511197047ull}}, {{17028946027584082339ull, 6884929862121384559ull, 12577285107018018011ull, 3452779834388996309ull}}, {{16674496516052715019ull, 3994476309224342795ull, 1886548328490358802ull, 4315974792986245387ull}}, {{8115717313319252935ull, 7108233711692602151ull, 17319993769802331915ull, 2697484245616403366ull}}, {{5532960623221678265ull, 4273606121188364785ull, 12426620175398139086ull, 3371855307020504208ull}}, {{11527886797454485735ull, 14565379688340231789ull, 15533275219247673857ull, 4214819133775630260ull}}, {{9510772257622747537ull, 2185833277571563012ull, 484924975175020353ull, 2634261958609768913ull}}, {{11888465322028434421ull, 7343977615391841669ull, 5217842237396163345ull, 3292827448262211141ull}}, {{1025523597253379314ull, 13791658037667189991ull, 11133988815172592085ull, 4116034310327763926ull}}, {{7558481275924443927ull, 10925629282755687696ull, 2347056991055482149ull, 2572521443954852454ull}}, {{9448101594905554909ull, 18268722621871997524ull, 12157193275674128494ull, 3215651804943565567ull}}, {{11810126993631943636ull, 13612531240485221097ull, 10584805576165272714ull, 4019564756179456959ull}}, {{463800343378882917ull, 13119518043730651090ull, 13533032512744377302ull, 2512227972612160599ull}}, {{9803122466078379454ull, 7176025517808538054ull, 12304604622503083724ull, 3140284965765200749ull}}, {{3030531045743198509ull, 8970031897260672568ull, 1545697722846690943ull, 3925356207206500937ull}}, {{1894081903589499068ull, 12523798963429002211ull, 12495276122847651599ull, 2453347629504063085ull}}, {{16202660434769037547ull, 11043062685858864859ull, 1784037098277400787ull, 3066684536880078857ull}}, {{15641639525033909030ull, 9192142338896193170ull, 6841732391274138888ull, 3833355671100098571ull}}, {{14387710721573581048ull, 5745088961810120731ull, 1970239735332642853ull, 2395847294437561607ull}}, {{13372952383539588406ull, 11793047220690038818ull, 16297857724447967278ull, 2994809118046952008ull}}, {{7492818442569709699ull, 5517936989007772715ull, 1925578081850407482ull, 3743511397558690011ull}}, {{2377168517392374610ull, 8060396636557245851ull, 17344387365652362340ull, 2339694623474181256ull}}, {{16806518702022631975ull, 10075495795696557313ull, 3233740133355901309ull, 2924618279342726571ull}}, {{7173090322246126256ull, 17206055763048084546ull, 17877233221977040348ull, 3655772849178408213ull}}, {{18189734939662433628ull, 3060825630100554066ull, 8511483472189136724ull, 4569716061473010267ull}}, {{15980270355716408922ull, 11136388055667622099ull, 3013834160904516500ull, 2856072538420631417ull}}, {{15363651926218123248ull, 13920485069584527624ull, 8378978719558033529ull, 3570090673025789271ull}}, {{757820834063102444ull, 3565548281698495819ull, 5862037381020154008ull, 4462613341282236589ull}}, {{16614539085785296692ull, 2228467676061559886ull, 5969616372351290207ull, 2789133338301397868ull}}, {{11544801820376845056ull, 16620642650359113570ull, 7462020465439112758ull, 3486416672876747335ull}}, {{5207630238616280512ull, 11552431276094116155ull, 4715839563371503044ull, 4358020841095934169ull}}, {{948925889921481368ull, 16443641584413598405ull, 14476614773175659162ull, 2723763025684958855ull}}, {{5797843380829239614ull, 11331179943662222198ull, 13484082448042186049ull, 3404703782106198569ull}}, {{16470676262891325326ull, 328916874295614035ull, 3020045004770568850ull, 4255879727632748212ull}}, {{7988329655093384377ull, 4817259064862146676ull, 11110900164836381339ull, 2659924829770467632ull}}, {{9985412068866730471ull, 1409887812650295441ull, 13888625206045476674ull, 3324906037213084540ull}}, {{17093451104510800992ull, 10985731802667645109ull, 17360781507556845842ull, 4156132546516355675ull}}, {{12989249949532944572ull, 11477768395094666097ull, 8544645433009334699ull, 2597582841572722297ull}}, {{2401504381634017003ull, 9735524475440944718ull, 15292492809689056278ull, 3246978551965902871ull}}, {{12225252513897297062ull, 2946033557446405089ull, 14503929993683932444ull, 4058723189957378589ull}}, {{723253793544728808ull, 11064643010258778989ull, 11370799255266151729ull, 2536701993723361618ull}}, {{5515753260358298914ull, 18442489781250861640ull, 4990127032227913853ull, 3170877492154202023ull}}, {{6894691575447873642ull, 9218054171281413338ull, 1625972771857504413ull, 3963596865192752529ull}}, {{8920868253082308931ull, 8067126866264577288ull, 12545448028479410018ull, 2477248040745470330ull}}, {{11151085316352886163ull, 860536545975945802ull, 6458437998744486715ull, 3096560050931837913ull}}, {{4715484608586331896ull, 14910728737752095965ull, 12684733516857996297ull, 3870700063664797391ull}}, {{5253020889580151387ull, 2401676433453978122ull, 14845487475677329542ull, 2419187539790498369ull}}, {{15789648148829965042ull, 12225467578672248460ull, 4721801289314498215ull, 3023984424738122962ull}}, {{1290316112327904686ull, 10670148454912922672ull, 15125623648497898577ull, 3779980530922653702ull}}, {{806447570204940429ull, 18198057830389046430ull, 4841828761883798706ull, 2362487831826658564ull}}, {{10231431499610951344ull, 13524200251131532229ull, 6052285952354748383ull, 2953109789783323205ull}}, {{17400975392941077084ull, 12293564295487027382ull, 12177043458870823383ull, 3691387237229154006ull}}, {{6263923602160785274ull, 14601006712320473970ull, 2998966143366876710ull, 2307117023268221254ull}}, {{17053276539555757400ull, 9027886353545816654ull, 12972079716063371696ull, 2883896279085276567ull}}, {{12093223637589920942ull, 11284857941932270818ull, 11603413626651826716ull, 3604870348856595709ull}}, {{5893157510132625369ull, 14106072427415338523ull, 669208978032619683ull, 4506087936070744637ull}}, {{1377380434619196904ull, 6510452257920892625ull, 2724098620484081254ull, 2816304960044215398ull}}, {{6333411561701384034ull, 17361437359255891589ull, 12628495312459877375ull, 3520381200055269247ull}}, {{12528450470554117946ull, 17090110680642476582ull, 11173933122147458815ull, 4400476500069086559ull}}, {{3218595525668935812ull, 17598848203042629720ull, 13901237228983243615ull, 2750297812543179099ull}}, {{4023244407086169765ull, 17386874235375899246ull, 12764860517801666615ull, 3437872265678973874ull}}, {{14252427545712488015ull, 17121906775792486153ull, 6732703610397307461ull, 4297340332098717343ull}}, {{1990238188429223153ull, 13007034744083997798ull, 11125468784139399019ull, 2685837707561698339ull}}, {{11711169772391304750ull, 11647107411677609343ull, 9295149961746860870ull, 3357297134452122924ull}}, {{10027276197061743033ull, 5335512227742235871ull, 11618937452183576088ull, 4196621418065153655ull}}, {{13184576650804671252ull, 3334695142338897419ull, 14179364935255816911ull, 2622888386290721034ull}}, {{11869034795078451161ull, 18003426983205785486ull, 8500834132214995330ull, 3278610482863401293ull}}, {{5612921456993288143ull, 13280911692152456050ull, 15237728683696132067ull, 4098263103579251616ull}}, {{8119761929048192993ull, 5994726798381591079ull, 9523580427310082542ull, 2561414439737032260ull}}, {{5538016392882853338ull, 16716780534831764657ull, 11904475534137603177ull, 3201768049671290325ull}}, {{11534206509530954576ull, 7060917613257542109ull, 1045536362389840260ull, 4002210062089112907ull}}, {{9514722077670540562ull, 13636445545140739626ull, 16794361290989507826ull, 2501381288805695566ull}}, {{2670030560233399894ull, 7822184894571148725ull, 11769579576882108975ull, 3126726611007119458ull}}, {{7949224218719137772ull, 5166045099786548002ull, 5488602434247860411ull, 3908408263758899323ull}}, {{9579951155126849012ull, 922935178152898549ull, 1124533512191218805ull, 2442755164849312077ull}}, {{16586624962335949168ull, 5765354991118511090ull, 6017352908666411410ull, 3053443956061640096ull}}, {{11509909166065160652ull, 16430065775752914671ull, 7521691135833014262ull, 3816804945077050120ull}}, {{14111222256431807264ull, 5657105091418183765ull, 4701056959895633914ull, 2385503090673156325ull}}, {{3803969765257595368ull, 16294753401127505515ull, 10488007218296930296ull, 2981878863341445406ull}}, {{143276188144606306ull, 1921697677699830278ull, 3886636986016387063ull, 3727348579176806758ull}}, {{13924605672872542653ull, 8118590076203475779ull, 16264206171542405626ull, 2329592861985504223ull}}, {{12794071072663290412ull, 924865558399568916ull, 15718571696000619129ull, 2911991077481880279ull}}, {{15992588840829113015ull, 5767767966426849049ull, 15036528601573386007ull, 3639988846852350349ull}}, {{6155677995754227557ull, 2598023939606173408ull, 4960602696684568797ull, 4549986058565437937ull}}, {{3847298747346392223ull, 3929607971467552332ull, 14629591731496325258ull, 2843741286603398710ull}}, {{4809123434182990279ull, 14135382001189216223ull, 9063617627515630764ull, 3554676608254248388ull}}, {{1399718274301349945ull, 17669227501486520279ull, 11329522034394538455ull, 4443345760317810485ull}}, {{7792352949079425572ull, 17960796216070157030ull, 9386794280710280486ull, 2777091100198631553ull}}, {{517069149494506156ull, 13227623233232920480ull, 16345178869315238512ull, 3471363875248289441ull}}, {{646336436868132695ull, 16534529041541150600ull, 6596415531361884428ull, 4339204844060361802ull}}, {{403960273042582935ull, 1110708614108443317ull, 8734445725528565672ull, 2712003027537726126ull}}, {{5116636359730616572ull, 1388385767635554146ull, 1694685120055931282ull, 3390003784422157658ull}}, {{15619167486518046523ull, 10958854246399218490ull, 11341728436924689910ull, 4237504730527697072ull}}, {{14373665697501166981ull, 2237597885572123652ull, 7088580273077931194ull, 2648440456579810670ull}}, {{17967082121876458726ull, 12020369393819930373ull, 18084097378202189800ull, 3310550570724763337ull}}, {{8623794597063409696ull, 15025461742274912967ull, 8770063667470573538ull, 4138188213405954172ull}}, {{12307400650805712916ull, 14002599607349208508ull, 14704661829023884269ull, 2586367633378721357ull}}, {{15384250813507141145ull, 3668191453904346923ull, 4545769230997691625ull, 3232959541723401697ull}}, {{14618627498456538527ull, 9196925335807821558ull, 10293897557174502435ull, 4041199427154252121ull}}, {{4524956168107948676ull, 3442235325666194522ull, 17962901019302533782ull, 2525749641971407575ull}}, {{14879567246989711652ull, 13526166193937518960ull, 17841940255700779323ull, 3157187052464259469ull}}, {{152714985027587949ull, 12296021723994510797ull, 8467367264343810442ull, 3946483815580324337ull}}, {{2401289874855936421ull, 12296699595923957152ull, 16821319586283351286ull, 2466552384737702710ull}}, {{3001612343569920526ull, 6147502458050170632ull, 11803277445999413300ull, 3083190480922128388ull}}, {{3752015429462400657ull, 7684378072562713290ull, 14754096807499266625ull, 3853988101152660485ull}}, {{6956695661841388315ull, 16331951341420165566ull, 11527153513900735592ull, 2408742563220412803ull}}, {{17919241614156511201ull, 1968195103065655341ull, 9797255873948531587ull, 3010928204025516004ull}}, {{8563993962413475290ull, 16295301934114232889ull, 12246569842435664483ull, 3763660255031895005ull}}, {{16881711272576891816ull, 7878720699607701603ull, 9959949160735984254ull, 2352287659394934378ull}}, {{16490453072293726866ull, 625028837654851196ull, 3226564414065204510ull, 2940359574243667973ull}}, {{2166322266657606966ull, 10004658083923339804ull, 8644891536008893541ull, 3675449467804584966ull}}, {{2707902833322008708ull, 17117508623331562659ull, 1582742383156341118ull, 4594311834755731208ull}}, {{17833340335322113107ull, 6086756871154838757ull, 989213989472713199ull, 2871444896722332005ull}}, {{8456617363870477671ull, 2996760070516160543ull, 5848203505268279403ull, 3589306120902915006ull}}, {{5959085686410709185ull, 17581008143427364391ull, 16533626418440125061ull, 4486632651128643757ull}}, {{10641957581647775097ull, 13293973098855796696ull, 12639359520738772115ull, 2804145406955402348ull}}, {{13302446977059718871ull, 12005780355142357966ull, 15799199400923465144ull, 3505181758694252935ull}}, {{7404686684469872780ull, 15007225443927947458ull, 15137313232726943526ull, 4381477198367816169ull}}, {{9239615196221058392ull, 4767829884027579257ull, 2543291742813257848ull, 2738423248979885106ull}}, {{16161205013703710894ull, 5959787355034474071ull, 12402486715371348118ull, 3423029061224856382ull}}, {{15589820248702250713ull, 16673106230647868397ull, 6279736357359409339ull, 4278786326531070478ull}}, {{12049480664652600648ull, 8114848384941223796ull, 17759893278631794549ull, 2674241454081919048ull}}, {{15061850830815750810ull, 14755246499603917649ull, 3753122524580191570ull, 3342801817602398811ull}}, {{4992255483237524800ull, 9220686087650121254ull, 79717137297851559ull, 4178502272002998514ull}}, {{16955217732305616712ull, 12680457832422407639ull, 4661509229238545128ull, 2611563920001874071ull}}, {{16582336146954632986ull, 15850572290528009549ull, 1215200518120793506ull, 3264454900002342589ull}}, {{6892862128411127521ull, 10589843326305236129ull, 6130686666078379787ull, 4080568625002928236ull}}, {{15837253876325424461ull, 4312809069727078628ull, 13055051203153763175ull, 2550355390626830147ull}}, {{1349823271697228960ull, 779325318731460382ull, 11707127985514816065ull, 3187944238283537684ull}}, {{10910651126476312007ull, 5585842666841713381ull, 14633909981893520081ull, 3984930297854422105ull}}, {{9124999963261388957ull, 15020366712844540623ull, 2228664711042368194ull, 2490581436159013816ull}}, {{6794563935649348292ull, 9552086354200899971ull, 2785830888802960243ull, 3113226795198767270ull}}, {{3881518901134297461ull, 7328421924323737060ull, 12705660647858476112ull, 3891533493998459087ull}}, {{11649321350063711721ull, 4580263702702335662ull, 14858566932552629426ull, 2432208433749036929ull}}, {{5338279650724863843ull, 14948701665232695386ull, 4738150610408623070ull, 3040260542186296162ull}}, {{15896221600260855612ull, 9462505044686093424ull, 15146060299865554646ull, 3800325677732870202ull}}, {{9935138500163034758ull, 1302379634501420486ull, 14077973705843359558ull, 2375203548583043876ull}}, {{3195551088349017639ull, 10851346579981551416ull, 17597467132304199447ull, 2969004435728804845ull}}, {{3994438860436272048ull, 8952497206549551366ull, 8161775860098085597ull, 3711255544661006057ull}}, {{16331582343054833742ull, 7901153763307163555ull, 16630324958629773258ull, 2319534715413128785ull}}, {{15802791910391154274ull, 653070167279178636ull, 6952848143005052861ull, 2899418394266410982ull}}, {{1306745814279391226ull, 5428023727526361200ull, 17914432215611091884ull, 3624272992833013727ull}}, {{1633432267849239033ull, 6785029659407951500ull, 17781354251086476951ull, 4530341241041267159ull}}, {{10244267204260550204ull, 11158172564771051543ull, 18030875434570129950ull, 2831463275650791974ull}}, {{8193647986898299851ull, 4724343669109038621ull, 13315222256357886630ull, 3539329094563489968ull}}, {{14853746002050262717ull, 15128801623241074084ull, 16644027820447358287ull, 4424161368204362460ull}}, {{60219214426638390ull, 16373030042166753159ull, 1179145350924823121ull, 2765100855127726538ull}}, {{13910332073315461700ull, 6631229497426277736ull, 10697303725510804710ull, 3456376068909658172ull}}, {{17387915091644327125ull, 17512408908637622978ull, 13371629656888505887ull, 4320470086137072715ull}}, {{15479132950705092357ull, 17862784595539596217ull, 6051425526341622227ull, 2700293803835670447ull}}, {{5513858133099201734ull, 17716794725997107368ull, 2952595889499639880ull, 3375367254794588059ull}}, {{6892322666374002168ull, 3699249333786832594ull, 17525802917156713563ull, 4219209068493235073ull}}, {{8919387684911139259ull, 6187824403076419ull, 4036097795581864121ull, 2637005667808271921ull}}, {{6537548587711536170ull, 4619420798931233428ull, 9656808262904718055ull, 3296257084760339901ull}}, {{8171935734639420212ull, 1162589980236653881ull, 16682696347058285473ull, 4120321355950424876ull}}, {{16636674880218107393ull, 12255833783716378435ull, 1203313180056652612ull, 2575200847469015548ull}}, {{16184157581845246337ull, 15319792229645473044ull, 1504141475070815765ull, 3219001059336269435ull}}, {{1783452903597006305ull, 5314682231774677594ull, 15715234899120683419ull, 4023751324170336793ull}}, {{5726344083175516845ull, 1015833385645479544ull, 2904492784309345281ull, 2514844577606460496ull}}, {{7157930103969396056ull, 5881477750484237334ull, 3630615980386681601ull, 3143555722008075620ull}}, {{18170784666816520877ull, 11963533206532684571ull, 4538269975483352001ull, 3929444652510094525ull}}, {{9050897407546631597ull, 559679226441846001ull, 5142261743890788953ull, 2455902907818809078ull}}, {{15925307777860677400ull, 5311285051479695405ull, 15651199216718261999ull, 3069878634773511347ull}}, {{6071576667043683037ull, 2027420295922231353ull, 14952313002470439595ull, 3837348293466889184ull}}, {{15323950462970771659ull, 17408038749447252259ull, 9345195626544024746ull, 2398342683416805740ull}}, {{14543252060286076669ull, 12536676399954289516ull, 11681494533180030933ull, 2997928354271007175ull}}, {{18179065075357595836ull, 1835787444660698183ull, 9990182148047650763ull, 3747410442838758969ull}}, {{18279444699739579254ull, 17288268217408794028ull, 17773078888598251486ull, 2342131526774224355ull}}, {{4402561800964922451ull, 12386963234906216728ull, 17604662592320426454ull, 2927664408467780444ull}}, {{5503202251206153064ull, 6260332006777995102ull, 3559084166690981452ull, 3659580510584725556ull}}, {{16102374850862467138ull, 7825415008472493877ull, 4448855208363726815ull, 4574475638230906945ull}}, {{12369827291002735913ull, 11808413407936390529ull, 14309749551295799019ull, 2859047273894316840ull}}, {{1627226058471256179ull, 10148830741493100258ull, 17887186939119748774ull, 3573809092367896050ull}}, {{11257404609943846032ull, 3462666390011599514ull, 13135611637044910160ull, 4467261365459870063ull}}, {{11647563899642291674ull, 2164166493757249696ull, 15127286300794150706ull, 2792038353412418789ull}}, {{14559454874552864593ull, 11928580154051337928ull, 5074049820710524670ull, 3490047941765523487ull}}, {{18199318593191080741ull, 5687353155709396602ull, 1730876257460767934ull, 4362559927206904359ull}}, {{15986260139171813367ull, 17389653777600536588ull, 7999326688554061814ull, 2726599954504315224ull}}, {{1536081100255215093ull, 12513695185145894928ull, 9999158360692577268ull, 3408249943130394030ull}}, {{1920101375319018866ull, 15642118981432368660ull, 3275575914010945777ull, 4260312428912992538ull}}, {{10423435396429162599ull, 2858795335754148556ull, 6658920964684229015ull, 2662695268070620336ull}}, {{13029294245536453249ull, 17408552224974849407ull, 8323651205855286268ull, 3328369085088275420ull}}, {{11674931788493178657ull, 3313946207509010143ull, 10404564007319107836ull, 4160461356360344275ull}}, {{14214361395449318517ull, 11294588416547907147ull, 4197009495360748445ull, 2600288347725215172ull}}, {{13156265725884260242ull, 283177465402720222ull, 5246261869200935557ull, 3250360434656518965ull}}, {{7221960120500549494ull, 4965657850180788182ull, 11169513354928557350ull, 4062950543320648706ull}}, {{18348783130595007146ull, 16938594211645156325ull, 11592631865257736247ull, 2539344089575405441ull}}, {{9100920857961595221ull, 16561556746129057503ull, 655731776290006597ull, 3174180111969256802ull}}, {{6764465054024606122ull, 6866887877379158167ull, 10043036757217284055ull, 3967725139961571002ull}}, {{11145319686406460682ull, 11209333951003055710ull, 10888583991688190438ull, 2479828212475981876ull}}, {{4708277571153300045ull, 4788295401899043830ull, 13610729989610238048ull, 3099785265594977345ull}}, {{15108719000796400864ull, 5985369252373804787ull, 3178354431730633848ull, 3874731581993721682ull}}, {{7137106366284056588ull, 3740855782733627992ull, 6598157538259034059ull, 2421707238746076051ull}}, {{8921382957855070735ull, 64383709989647086ull, 3636010904396404670ull, 3027134048432595064ull}}, {{1928356660464062610ull, 9303851674341834666ull, 4545013630495505837ull, 3783917560540743830ull}}, {{5816908931217427036ull, 8120750305677340618ull, 16675691574341854860ull, 2364948475337964893ull}}, {{16494508200876559603ull, 10150937882096675772ull, 7009556412645154863ull, 2956185594172456117ull}}, {{2171391177386147887ull, 8076986334193456812ull, 13373631534233831483ull, 3695231992715570146ull}}, {{10580491522721118238ull, 2742273449657216555ull, 12970205727323532581ull, 2309519995447231341ull}}, {{8613928384974009893ull, 8039527830498908598ull, 2377699103872252014ull, 2886899994309039177ull}}, {{1544038444362736558ull, 826037751268859940ull, 7583809898267702922ull, 3608624992886298971ull}}, {{1930048055453420697ull, 10255919225940850733ull, 4868076354407240748ull, 4510781241107873714ull}}, {{3512123043872081888ull, 15633321553067807516ull, 7654233739931913371ull, 2819238275692421071ull}}, {{4390153804840102360ull, 14929965922907371491ull, 4956106156487503810ull, 3524047844615526339ull}}, {{876006237622740046ull, 9439085366779438556ull, 1583446677181991859ull, 4405059805769407924ull}}, {{9770875935368988337ull, 3593585345023455145ull, 10213026210093520720ull, 2753162378605879952ull}}, {{16825280937638623325ull, 4491981681279318931ull, 12766282762616900900ull, 3441452973257349940ull}}, {{16419915153620891252ull, 5614977101599148664ull, 15957853453271126125ull, 4301816216571687425ull}}, {{10262446971013057033ull, 5815203697713161867ull, 3056129380653371972ull, 2688635135357304641ull}}, {{8216372695338933387ull, 7269004622141452334ull, 8431847744244102869ull, 3360793919196630801ull}}, {{1047093832318890925ull, 13697941796104203322ull, 15151495698732516490ull, 4200992398995788501ull}}, {{5266119663626694732ull, 13172899640992514980ull, 11775527820921516758ull, 2625620249372367813ull}}, {{6582649579533368415ull, 7242752514385867917ull, 884351720869732236ull, 3282025311715459767ull}}, {{12839997992844098423ull, 9053440642982334896ull, 14940497706369329007ull, 4102531639644324708ull}}, {{8024998745527561515ull, 12575929429505041166ull, 114439029626054821ull, 2564082274777702943ull}}, {{807876395054676085ull, 1884853731599137746ull, 13978106842314732239ull, 3205102843472128678ull}}, {{10233217530673120914ull, 16191125219781085894ull, 8249261516038639490ull, 4006378554340160848ull}}, {{1784074938243312668ull, 14731139280790566588ull, 5155788447524149681ull, 2503986596462600530ull}}, {{2230093672804140834ull, 4578866045706044523ull, 15668107596259962910ull, 3129983245578250662ull}}, {{16622675146287339755ull, 14946954593987331461ull, 10361762458470177829ull, 3912479056972813328ull}}, {{12695014975643281299ull, 11647689630455776115ull, 6476101536543861143ull, 2445299410608008330ull}}, {{11257082701126713720ull, 9947926019642332240ull, 17318498957534602237ull, 3056624263260010412ull}}, {{14071353376408392149ull, 17046593542980303204ull, 3201379623208701180ull, 3820780329075013016ull}}, {{18017967897110020902ull, 1430748927507913694ull, 2000862264505438238ull, 2387987705671883135ull}}, {{13299087834532750319ull, 11011808196239667926ull, 16336135885913961509ull, 2984984632089853918ull}}, {{7400487756311162090ull, 18376446263726972812ull, 11196797820537676078ull, 3731230790112317398ull}}, {{13848676884549252115ull, 6873592896401970103ull, 2386312619408659645ull, 2332019243820198374ull}}, {{12699160087259177239ull, 13203677138929850533ull, 12206262811115600364ull, 2915024054775247967ull}}, {{2038892053791807837ull, 16504596423662313167ull, 10646142495467112551ull, 3643780068469059959ull}}, {{16383673122521923508ull, 16019059511150503554ull, 8695992100906502785ull, 4554725085586324949ull}}, {{14851481720003590097ull, 3094383166827982865ull, 7740838072280258193ull, 2846703178491453093ull}}, {{4729294094722323909ull, 8479664976962366486ull, 14287733608777710645ull, 3558378973114316366ull}}, {{15134989655257680694ull, 15211267239630346011ull, 8636294974117362498ull, 4447973716392895458ull}}, {{7153525525322356482ull, 14118728043196354161ull, 10009370377250739465ull, 2779983572745559661ull}}, {{13553592925080333506ull, 3813351998713278989ull, 17123398989990812236ull, 3474979465931949576ull}}, {{3106933101068253171ull, 4766689998391598737ull, 2957504663778963679ull, 4343724332414936971ull}}, {{13471048234236127992ull, 9896710276635831066ull, 17989341479357709963ull, 2714827707759335606ull}}, {{7615438255940384182ull, 7759201827367400929ull, 13263304812342361646ull, 3393534634699169508ull}}, {{14130983838352868131ull, 475630247354475353ull, 16579131015427952058ull, 4241918293373961885ull}}, {{1914335871329460726ull, 4908954923023935000ull, 12667799893856163988ull, 2651198933358726178ull}}, {{2392919839161825907ull, 6136193653779918750ull, 6611377830465429177ull, 3313998666698407723ull}}, {{12214521835807058192ull, 12281928085652286341ull, 3652536269654398567ull, 4142498333373009654ull}}, {{9939919156593105322ull, 14593734081173760819ull, 16117893223816162816ull, 2589061458358131033ull}}, {{7813212927313993749ull, 18242167601467201024ull, 6312308474488039808ull, 3236326822947663792ull}}, {{9766516159142492186ull, 4355965428124449664ull, 7890385593110049761ull, 4045408528684579740ull}}, {{6104072599464057616ull, 14251693438646250800ull, 14154863032548556908ull, 2528380330427862337ull}}, {{7630090749330072020ull, 17814616798307813500ull, 3858520735403532423ull, 3160475413034827922ull}}, {{9537613436662590025ull, 17656584979457378971ull, 14046522956109191337ull, 3950594266293534902ull}}, {{3655165388700424814ull, 4117836584519780001ull, 4167390829140856682ull, 2469121416433459314ull}}, {{9180642754302918921ull, 14370667767504500809ull, 14432610573280846660ull, 3086401770541824142ull}}, {{16087489461306036555ull, 17963334709380626011ull, 8817391179746282517ull, 3858002213177280178ull}}, {{7748837904102578895ull, 13532927202576585209ull, 10122555505768814477ull, 2411251383235800111ull}}, {{14297733398555611523ull, 3081100947938567799ull, 8041508363783630193ull, 3014064229044750139ull}}, {{13260480729767126500ull, 8463062203350597653ull, 5440199436302149837ull, 3767580286305937674ull}}, {{10593643465318148015ull, 7595256886307817485ull, 8011810666116231552ull, 2354737678941211046ull}}, {{17853740350075072922ull, 9494071107884771856ull, 791391295790513632ull, 2943422098676513808ull}}, {{3870431363884289536ull, 11867588884855964821ull, 989239119738142040ull, 3679277623345642260ull}}, {{9449725223282749824ull, 14834486106069956026ull, 1236548899672677550ull, 4599097029182052825ull}}, {{10517764282979106544ull, 4659867797866334612ull, 12302058108363893229ull, 2874435643238783015ull}}, {{13147205353723883180ull, 10436520765760306169ull, 10765886617027478632ull, 3593044554048478769ull}}, {{2598948636872690263ull, 13045650957200382712ull, 18069044289711736194ull, 4491305692560598461ull}}, {{1624342898045431415ull, 12765217866677627099ull, 13598995690283529073ull, 2807066057850374038ull}}, {{15865486677838952980ull, 2121464278064870161ull, 7775372575999635534ull, 3508832572312967548ull}}, {{5996800292016527513ull, 11875202384435863510ull, 9719215719999544417ull, 4386040715391209435ull}}, {{17583058237792493408ull, 504472462631332837ull, 3768666815786021309ull, 2741275447119505897ull}}, {{8143764741958453048ull, 5242276596716553951ull, 9322519538159914540ull, 3426594308899382371ull}}, {{5568019909020678406ull, 6552845745895692439ull, 7041463404272505271ull, 4283242886124227964ull}}, {{10397541470779005860ull, 11013057618825889630ull, 13624286664525091602ull, 2677026803827642477ull}}, {{3773554801618981517ull, 4542949986677586230ull, 3195300275374200791ull, 3346283504784553097ull}}, {{13940315538878502704ull, 1067001464919594883ull, 8605811362645138893ull, 4182854380980691371ull}}, {{6406854202585370238ull, 2972718924788440754ull, 3072789092439517856ull, 2614283988112932107ull}}, {{17231939790086488605ull, 3715898655985550942ull, 17676044420831561032ull, 3267854985141165133ull}}, {{12316552700753334949ull, 4644873319981938678ull, 8259997470757287578ull, 4084818731426456417ull}}, {{3086159419543446439ull, 7514731843416099578ull, 16691713465291774496ull, 2553011707141535260ull}}, {{13081071311284083857ull, 9393414804270124472ull, 2417897757905166504ull, 3191264633926919076ull}}, {{16351339139105104821ull, 11741768505337655590ull, 3022372197381458130ull, 3989080792408648845ull}}, {{5607900943513302609ull, 11950291334263422648ull, 4194825632577105283ull, 2493175495255405528ull}}, {{7009876179391628261ull, 10326178149401890406ull, 5243532040721381604ull, 3116469369069256910ull}}, {{17985717261094311134ull, 12907722686752363007ull, 15777787087756502813ull, 3895586711336571137ull}}, {{18158602315825026315ull, 10373169688433920831ull, 2943587902206732402ull, 2434741694585356961ull}}, {{18086566876353894990ull, 3743090073687625231ull, 8291170896185803407ull, 3043427118231696201ull}}, {{17996522577014980833ull, 67176573682143635ull, 14975649638659642163ull, 3804283897789620251ull}}, {{8941983601420669069ull, 16182886423047197436ull, 7053938014948582399ull, 2377677436118512657ull}}, {{11177479501775836336ull, 15616922010381608891ull, 13429108537113115903ull, 2972096795148140821ull}}, {{9360163358792407516ull, 14909466494549623210ull, 2951327616109231167ull, 3715120993935176027ull}}, {{10461788117672642602ull, 16235945586734596362ull, 17985480824564127143ull, 2321950621209485016ull}}, {{3853863110236027444ull, 15683245964990857549ull, 4035106956995607313ull, 2902438276511856271ull}}, {{9429014906222422209ull, 5768999400956408224ull, 432197677817121238ull, 3628047845639820339ull}}, {{11786268632778027761ull, 16434621288050286088ull, 14375305152553565259ull, 4535059807049775423ull}}, {{7366417895486267351ull, 7965795295817734853ull, 15902094747987060143ull, 2834412379406109639ull}}, {{13819708387785222092ull, 5345558101344780662ull, 15265932416556437275ull, 3543015474257637049ull}}, {{8051263447876751807ull, 2070261608253587924ull, 5247357465413382882ull, 4428769342822046312ull}}, {{14255411691777745688ull, 5905599523585880356ull, 3279598415883364301ull, 2767980839263778945ull}}, {{17819264614722182110ull, 11993685422909738349ull, 8711184038281593280ull, 3459976049079723681ull}}, {{8439022713120563925ull, 14992106778637172937ull, 15500666066279379504ull, 4324970061349654601ull}}, {{16803604241768822213ull, 9370066736648233085ull, 2770387263783530334ull, 2703106288343534126ull}}, {{7169447246928864054ull, 2489211383955515549ull, 12686356116584188726ull, 3378882860429417657ull}}, {{13573495077088467972ull, 12334886266799170244ull, 2022887090448072195ull, 4223603575536772072ull}}, {{17706806460035068291ull, 5403460907535787450ull, 1264304431530045122ull, 2639752234710482545ull}}, {{12910136038189059555ull, 15977698171274510121ull, 6192066557839944306ull, 3299690293388103181ull}}, {{2302611992454160732ull, 10748750677238361844ull, 12351769215727318287ull, 4124612866735128976ull}}, {{10662504532138626266ull, 13635498200915058008ull, 7719855759829573929ull, 2577883041709455610ull}}, {{13328130665173282832ull, 3209314695861658798ull, 426447662932191604ull, 3222353802136819513ull}}, {{7436791294611827732ull, 4011643369827073498ull, 5144745597092627409ull, 4027942252671024391ull}}, {{9259680577559780236ull, 14036492152210390696ull, 10132995025823973986ull, 2517463907919390244ull}}, {{11574600721949725295ull, 8322243153408212562ull, 12666243782279967483ull, 3146829884899237805ull}}, {{5244878865582380811ull, 5791117923332877799ull, 1997746672567795642ull, 3933537356124047257ull}}, {{10195578318630069863ull, 8231134720510436528ull, 12777806716423342036ull, 2458460847577529535ull}}, {{12744472898287587329ull, 10288918400638045660ull, 11360572377101789641ull, 3073076059471911919ull}}, {{15930591122859484161ull, 17472834019224944979ull, 9589029452949849147ull, 3841345074339889899ull}}, {{7650776442573483649ull, 8614678252801896660ull, 3687300398879961765ull, 2400840671462431187ull}}, {{9563470553216854561ull, 15380033834429758729ull, 18444183553882115918ull, 3001050839328038983ull}}, {{16566024209948456105ull, 10001670256182422603ull, 18443543423925256994ull, 3751313549160048729ull}}, {{8047922122004091114ull, 10862729928541402031ull, 4609685612312203765ull, 2344570968225030456ull}}, {{5448216634077725988ull, 18190098429104140443ull, 5762107015390254706ull, 2930713710281288070ull}}, {{2198584774169769581ull, 13514250999525399746ull, 16426005806092594191ull, 3663392137851610087ull}}, {{11971603004566987784ull, 12281127730979361778ull, 15920821239188354835ull, 4579240172314512609ull}}, {{12093937896281755269ull, 5369861822648407159ull, 3032984246851639916ull, 2862025107696570381ull}}, {{10505736351924806182ull, 6712327278310508949ull, 8402916326991937799ull, 3577531384620712976ull}}, {{17743856458333395632ull, 3778723079460748282ull, 10503645408739922249ull, 4471914230775891220ull}}, {{15701596304885760174ull, 13890916970731437436ull, 15788150417317227213ull, 2794946394234932012ull}}, {{1180251307397648602ull, 3528588158132133084ull, 1288443947936982401ull, 3493682992793665016ull}}, {{1475314134247060752ull, 9022421216092554259ull, 1610554934921228001ull, 4367103740992081270ull}}, {{17062972398400270634ull, 17168228306126316171ull, 14841654889607931212ull, 2729439838120050793ull}}, {{16717029479572950388ull, 3013541308948343598ull, 4717010556727750304ull, 3411799797650063492ull}}, {{11672914812611412177ull, 3766926636185429498ull, 5896263195909687880ull, 4264749747062579365ull}}, {{11907257776309520515ull, 2354329147615893436ull, 5991007506657248877ull, 2665468591914112103ull}}, {{14884072220386900644ull, 7554597452947254699ull, 2877073364894173192ull, 3331835739892640129ull}}, {{13993404257056237901ull, 9443246816184068374ull, 8208027724545104394ull, 4164794674865800161ull}}, {{4134191642232760784ull, 10513715278542430638ull, 16659232373909160006ull, 2602996671791125100ull}}, {{14391111589645726788ull, 3918772061323262489ull, 2377296393676898392ull, 3253745839738906376ull}}, {{4153831431774994773ull, 4898465076654078112ull, 2971620492096122990ull, 4067182299673632970ull}}, {{2596144644859371733ull, 16896598728190962532ull, 6468948825987464772ull, 2541988937296020606ull}}, {{3245180806074214666ull, 2674004336529151549ull, 17309558069339106774ull, 3177486171620025757ull}}, {{8668162026020156237ull, 12565877457516215244ull, 7801889531391719755ull, 3971857714525032197ull}}, {{14640973303117373456ull, 5547830401733940575ull, 7182023966333518799ull, 2482411071578145123ull}}, {{13689530610469328916ull, 2323101983740037815ull, 4365843939489510595ull, 3103013839472681404ull}}, {{12500227244659273241ull, 16738935534957210981ull, 5457304924361888243ull, 3878767299340851755ull}}, {{10118485037125739728ull, 8155991700134562911ull, 1104972568512486200ull, 2424229562088032347ull}}, {{8036420277979786756ull, 10194989625168203639ull, 15216273765922771462ull, 3030286952610040433ull}}, {{5433839329047345540ull, 3520364994605478741ull, 5185284152121300616ull, 3787858690762550542ull}}, {{5701992589868284915ull, 2200228121628424213ull, 17075860650357976597ull, 2367411681726594088ull}}, {{11739176755762744048ull, 7361971170462918170ull, 2898081739237919130ull, 2959264602158242611ull}}, {{5450598907848654251ull, 18425835999933423521ull, 17457660229329562624ull, 3699080752697803263ull}}, {{14935839363473878667ull, 11516147499958389700ull, 17828566670972058496ull, 2311925470436127039ull}}, {{223055130632796718ull, 14395184374947987126ull, 17674022320287685216ull, 2889906838045158799ull}}, {{9502190950145771705ull, 17993980468684983907ull, 17480841881932218616ull, 3612383547556448499ull}}, {{7266052669254826728ull, 4045731512146678268ull, 17239366333987885367ull, 4515479434445560624ull}}, {{13764654955139042513ull, 9446111222732755773ull, 10774603958742428354ull, 2822174646528475390ull}}, {{3370760638641639429ull, 2584266991561168909ull, 4244882911573259635ull, 3527718308160594238ull}}, {{8825136816729437190ull, 17065391794733624848ull, 14529475676321350351ull, 4409647885200742797ull}}, {{5515710510455898244ull, 17583398899349597386ull, 11386765306914537921ull, 2756029928250464248ull}}, {{16118010174924648613ull, 8144190568904833020ull, 14233456633643172402ull, 3445037410313080310ull}}, {{1700768644946259150ull, 956866174276265468ull, 8568448755199189695ull, 4306296762891350388ull}}, {{10286352439946187777ull, 7515570386563747773ull, 14578652508854269367ull, 2691435476807093992ull}}, {{17469626568360122625ull, 4782776964777296812ull, 18223315636067836709ull, 3364294346008867490ull}}, {{3390289136740601665ull, 10590157224399008920ull, 13555772508230020078ull, 4205367932511084363ull}}, {{2118930710462876041ull, 2007162246821992671ull, 6166514808430068597ull, 2628354957819427727ull}}, {{16483721443360758763ull, 7120638826954878742ull, 3096457492110197842ull, 3285443697274284659ull}}, {{11381279767346172646ull, 18124170570548374236ull, 17705629920419911014ull, 4106804621592855823ull}}, {{16336671891446133712ull, 6715920588165345993ull, 17983547727903526240ull, 2566752888495534889ull}}, {{6585781809025503428ull, 8394900735206682492ull, 8644376604597244088ull, 3208441110619418612ull}}, {{8232227261281879284ull, 10493625919008353115ull, 10805470755746555110ull, 4010551388274273265ull}}, {{2839299029087480601ull, 1946830180952832793ull, 18282634268410066704ull, 2506594617671420790ull}}, {{8160809804786738655ull, 2433537726191040991ull, 13629920798657807572ull, 3133243272089275988ull}}, {{5589326237556035415ull, 3041922157738801239ull, 17037400998322259465ull, 3916554090111594985ull}}, {{10410857926113603990ull, 13430416394655220534ull, 3730846596310330309ull, 2447846306319746866ull}}, {{3790200370787229180ull, 2952962438036861956ull, 13886930282242688695ull, 3059807882899683582ull}}, {{4737750463484036475ull, 17526261102828241157ull, 8135290815948585060ull, 3824759853624604478ull}}, {{5266937048891216749ull, 1730541152412874915ull, 472870741540477759ull, 2390474908515377799ull}}, {{1971985292686633032ull, 15998234495798257356ull, 14426146482207760910ull, 2988093635644222248ull}}, {{2464981615858291290ull, 10774421082893045887ull, 18032683102759701138ull, 3735117044555277810ull}}, {{8458142537552513912ull, 11345699195235541583ull, 15882112957652201115ull, 2334448152847048631ull}}, {{5960992153513254486ull, 9570437975617039075ull, 15240955178637863490ull, 2918060191058810789ull}}, {{2839554173464180204ull, 2739675432666523036ull, 5216135918015165651ull, 3647575238823513487ull}}, {{3549442716830225254ull, 17259652346115317507ull, 1908483879091569159ull, 4559469048529391859ull}}, {{18359302762514748448ull, 17704811743963155297ull, 17333703488928088388ull, 2849668155330869911ull}}, {{9114070397861271848ull, 3684270606244392506ull, 17055443342732722582ull, 3562085194163587389ull}}, {{2169215960471814002ull, 13828710294660266441ull, 7484246123133739515ull, 4452606492704484237ull}}, {{12884975021363353511ull, 6337100924948972573ull, 6983496836172281149ull, 2782879057940302648ull}}, {{2271160721422028177ull, 12533062174613603621ull, 8729371045215351436ull, 3478598822425378310ull}}, {{7450636920204923125ull, 15666327718267004526ull, 1688341769664413487ull, 4348248528031722888ull}}, {{44962056700689050ull, 16708983851557959685ull, 1055213606040258429ull, 2717655330019826805ull}}, {{4667888589303249216ull, 7051171759165285894ull, 5930703025977710941ull, 3397069162524783506ull}}, {{15058232773483837328ull, 13425650717383995271ull, 16636750819326914484ull, 4246336453155979382ull}}, {{16328924511068480186ull, 17614403735219772852ull, 5786283243651933648ull, 2653960283222487114ull}}, {{1964411565126048616ull, 3571260595315164450ull, 16456226091419692869ull, 3317450354028108892ull}}, {{11678886493262336578ull, 9075761762571343466ull, 2123538540565064470ull, 4146812942535136116ull}}, {{11910990076716348266ull, 1060665083179701762ull, 10550583624707941102ull, 2591758089084460072ull}}, {{5665365559040659524ull, 10549203390829403011ull, 13188229530884926377ull, 3239697611355575090ull}}, {{2470020930373436501ull, 17798190256964141668ull, 7261914876751382163ull, 4049622014194468863ull}}, {{10767135118338173621ull, 8818025901388894590ull, 11456225825610695708ull, 2531013758871543039ull}}, {{4235546861067941218ull, 11022532376736118238ull, 9708596263585981731ull, 3163767198589428799ull}}, {{14517805613189702331ull, 9166479452492759893ull, 7524059311055089260ull, 3954708998236785999ull}}, {{11379471517457257909ull, 14952421694662750741ull, 11620066097050512643ull, 2471693123897991249ull}}, {{389281341539408674ull, 14078841099901050523ull, 690024566030977092ull, 3089616404872489062ull}}, {{14321659732206424554ull, 17598551374876313153ull, 10085902744393497173ull, 3862020506090611327ull}}, {{2033508304987933491ull, 13304937618511389673ull, 13221218242887017589ull, 2413762816306632079ull}}, {{7153571399662304767ull, 2796113967857073379ull, 11914836785181384083ull, 3017203520383290099ull}}, {{4330278231150493055ull, 17330200515103505436ull, 10281859963049342199ull, 3771504400479112624ull}}, {{11929795931323833968ull, 17748904349580772753ull, 6426162476905838874ull, 2357190250299445390ull}}, {{1077186858872628747ull, 12962758400121190134ull, 17256075132987074401ull, 2946487812874306737ull}}, {{10569855610445561742ull, 2368389944869323955ull, 7735035860951679290ull, 3683109766092883422ull}}, {{8600633494629564273ull, 12183859467941430752ull, 445422789334823304ull, 4603887207616104278ull}}, {{5375395934143477671ull, 7614912167463394220ull, 14113447298616428277ull, 2877429504760065173ull}}, {{6719244917679347089ull, 14130326227756630679ull, 3806751067988371634ull, 3596786880950081467ull}}, {{3787370128671795957ull, 8439535747841012541ull, 146752816558076639ull, 4495983601187601834ull}}, {{4672949339633566425ull, 12192238870041714694ull, 4703406528776185803ull, 2809989750742251146ull}}, {{15064558711396733839ull, 10628612569124755463ull, 15102630197825008062ull, 3512487188427813932ull}}, {{14219012370818529395ull, 4062393674551168521ull, 431543673571708462ull, 4390608985534767416ull}}, {{1969353704120499016ull, 16374054101876644038ull, 269714795982317788ull, 2744130615959229635ull}}, {{11685064167005399578ull, 2020823553636253431ull, 14172201550260060948ull, 3430163269949037043ull}}, {{9994644190329361568ull, 2526029442045316789ull, 13103565919397688281ull, 4287704087436296304ull}}, {{8552495628169544932ull, 13107983447346792753ull, 8189728699623555175ull, 2679815054647685190ull}}, {{15302305553639319069ull, 11773293290756103037ull, 1013788837674668161ull, 3349768818309606488ull}}, {{5292823886766985125ull, 881558558162965085ull, 1267236047093335202ull, 4187211022887008110ull}}, {{5613857938443059655ull, 5162660117279241082ull, 14627080584715498213ull, 2617006889304380068ull}}, {{16240694459908600377ull, 11065011165026439256ull, 18283850730894372766ull, 3271258611630475085ull}}, {{1854124001176198855ull, 4607891919428273263ull, 9019755358335802246ull, 4089073264538093857ull}}, {{8076356528376206140ull, 16714990504924834501ull, 17166562145028346163ull, 2555670790336308660ull}}, {{14707131678897645579ull, 16282052112728655222ull, 3011458607575881088ull, 3194588487920385826ull}}, {{9160542561767281166ull, 1905821067201267412ull, 12987695296324627169ull, 3993235609900482282ull}}, {{14948711137959326537ull, 12720353213069261892ull, 12728995578630279884ull, 2495772256187801426ull}}, {{239144848739606555ull, 15900441516336577366ull, 6687872436433074047ull, 3119715320234751783ull}}, {{9522303097779284002ull, 15263865876993333803ull, 3748154527113954655ull, 3899644150293439729ull}}, {{3645596426898358549ull, 16457445200761915483ull, 13871811625514691419ull, 2437277593933399830ull}}, {{18392053588905111898ull, 15960120482525006449ull, 8116392495038588466ull, 3046596992416749788ull}}, {{9155008930849226161ull, 10726778566301482254ull, 10145490618798235583ull, 3808246240520937235ull}}, {{1110194563353378447ull, 13621765631579508265ull, 4035088627535203287ull, 2380153900325585772ull}}, {{5999429222619110962ull, 12415521021046997427ull, 5043860784419004109ull, 2975192375406982215ull}}, {{2887600509846500799ull, 1684343221026583072ull, 1693139962096367233ull, 3718990469258727769ull}}, {{1804750318654062999ull, 12581929559210084180ull, 12587427522378699280ull, 2324369043286704855ull}}, {{2255937898317578749ull, 15727411949012605225ull, 11122598384545986196ull, 2905461304108381069ull}}, {{7431608391324361340ull, 1212520862556204915ull, 68189925400319034ull, 3631826630135476337ull}}, {{4677824470728063771ull, 10739023115050031952ull, 4696923425177786696ull, 4539783287669345421ull}}, {{2923640294205039857ull, 6711889446906269970ull, 5241420149949810637ull, 2837364554793340888ull}}, {{12877922404611075629ull, 13001547827060225366ull, 6551775187437263296ull, 3546705693491676110ull}}, {{6874030968909068729ull, 16251934783825281708ull, 17413091021151354928ull, 4433382116864595137ull}}, {{13519641392422943764ull, 10157459239890801067ull, 3965652860578514974ull, 2770863823040371961ull}}, {{12287865722101291800ull, 3473452013008725526ull, 9568752094150531622ull, 3463579778800464951ull}}, {{6136460115771838942ull, 13565187053115682716ull, 7349254099260776623ull, 4329474723500581189ull}}, {{13058659609212175147ull, 15395770935838383553ull, 6899126821251679341ull, 2705921702187863243ull}}, {{2488266456233055222ull, 5409655614515815730ull, 4012222508137211273ull, 3382402127734829054ull}}, {{12333705107146094835ull, 11373755536572157566ull, 14238650172026289899ull, 4228002659668536317ull}}, {{3096879673538921368ull, 4802754201143904527ull, 11204999366730125139ull, 2642501662292835198ull}}, {{17706157647205815422ull, 1391756733002492754ull, 4782877171557880616ull, 3303127077866043998ull}}, {{12909325022152493469ull, 1739695916253115943ull, 15201968501302126578ull, 4128908847332554997ull}}, {{14985857166486390275ull, 5698995966085585368ull, 11807073322527523063ull, 2580568029582846873ull}}, {{285577384398436227ull, 2512058939179593807ull, 923783597877240117ull, 3225710036978558592ull}}, {{14192029785780208996ull, 7751759692401880162ull, 1154729497346550146ull, 4032137546223198240ull}}, {{13481704634540018527ull, 9456535826178563005ull, 721705935841593841ull, 2520085966389498900ull}}, {{3017072737892859446ull, 16432355801150591661ull, 902132419801992301ull, 3150107457986873625ull}}, {{8383026940793462211ull, 6705386696156075864ull, 5739351543179878281ull, 3937634322483592031ull}}, {{5239391837995913882ull, 15720081731166017175ull, 10504623742128505781ull, 2461021451552245019ull}}, {{1937553779067504449ull, 5815044108675357757ull, 8519093659233244323ull, 3076276814440306274ull}}, {{7033628242261768465ull, 2657119117416809292ull, 1425495037186779596ull, 3845346018050382843ull}}, {{13619389688268381099ull, 10884071485240281615ull, 17031835462737594911ull, 2403341261281489276ull}}, {{12412551091908088469ull, 8993403338122964115ull, 2843050254712442023ull, 3004176576601861596ull}}, {{10904002846457722682ull, 6630068154226317240ull, 3553812818390552529ull, 3755220720752326995ull}}, {{6815001779036076677ull, 15673007642459918035ull, 18362034075989952994ull, 2347012950470204371ull}}, {{3907066205367707942ull, 10367887516220121736ull, 18340856576560053339ull, 2933766188087755464ull}}, {{4883832756709634927ull, 8348173376847764266ull, 4479326646990515058ull, 3667207735109694331ull}}, {{15328162982741819467ull, 1211844684204929524ull, 987472290310755919ull, 4584009668887117914ull}}, {{356729827358861359ull, 7674931955269162809ull, 5228856199871610353ull, 2865006043054448696ull}}, {{5057598302625964603ull, 14205350962513841415ull, 6536070249839512941ull, 3581257553818060870ull}}, {{1710311859855067849ull, 3921630647860138057ull, 17393459849154166985ull, 4476571942272576087ull}}, {{12598159958477887166ull, 13980234200981056045ull, 17788441433362436221ull, 2797857463920360054ull}}, {{1912641892815195245ull, 3640234695944156345ull, 13012179754848269469ull, 3497321829900450068ull}}, {{7002488384446381960ull, 9161979388357583335ull, 16265224693560336836ull, 4371652287375562585ull}}, {{11294084267920070581ull, 14949609154578265392ull, 3248236405834128666ull, 2732282679609726616ull}}, {{14117605334900088227ull, 9463639406368055932ull, 4060295507292660833ull, 3415353349512158270ull}}, {{17647006668625110283ull, 16441235276387457819ull, 14298741420970601849ull, 4269191686890197837ull}}, {{8723536158676999975ull, 3358243020101079281ull, 11242556397320320108ull, 2668244804306373648ull}}, {{15516106216773637873ull, 4197803775126349101ull, 14053195496650400135ull, 3335306005382967060ull}}, {{5560074715684883629ull, 635568700480548473ull, 17566494370813000169ull, 4169132506728708825ull}}, {{15004261743371522028ull, 11926445483868812555ull, 4061529954117043249ull, 2605707816705443016ull}}, {{14143641160787014631ull, 1072998799553851982ull, 5076912442646304062ull, 3257134770881803770ull}}, {{8456179414128992481ull, 10564620536297090786ull, 15569512590162655885ull, 4071418463602254712ull}}, {{9896798152258008205ull, 8908730844399375693ull, 9730945368851659928ull, 2544636539751409195ull}}, {{16982683708749898160ull, 11135913555499219616ull, 7551995692637187006ull, 3180795674689261494ull}}, {{2781610562227821084ull, 4696519907519248713ull, 216622578941707950ull, 3975994593361576868ull}}, {{13267721647460857937ull, 16770382997481694157ull, 9358761148693343276ull, 2484996620850985542ull}}, {{2749594004043908710ull, 2516234673142566081ull, 2475079399011903288ull, 3106245776063731928ull}}, {{8048678523482273791ull, 3145293341428207601ull, 3093849248764879110ull, 3882807220079664910ull}}, {{16559639123244890880ull, 15800866393674793462ull, 15768713835760213155ull, 2426754512549790568ull}}, {{11476176867201337791ull, 15139396973666103924ull, 1264148220990714828ull, 3033443140687238211ull}}, {{14345221084001672239ull, 477502143373078289ull, 15415243331520557248ull, 3791803925859047763ull}}, {{2048234149859963294ull, 298438839608173931ull, 7328684072986654328ull, 2369877453661904852ull}}, {{16395350742607117829ull, 373048549510217413ull, 9160855091233317910ull, 2962346817077381065ull}}, {{6659130372976733574ull, 9689682723742547575ull, 16062754882469035291ull, 3702933521346726331ull}}, {{11079485510751540340ull, 3750208693125398282ull, 7733378792329453105ull, 2314333450841703957ull}}, {{4625984851584649617ull, 9299446884834135757ull, 14278409508839204285ull, 2892916813552129946ull}}, {{10394167082908199925ull, 16235994624470057600ull, 8624639849194229548ull, 3616146016940162433ull}}, {{12992708853635249906ull, 1848249206878020384ull, 15392485829920174840ull, 4520182521175203041ull}}, {{8120443033522031191ull, 1155155754298762740ull, 2702774616059027419ull, 2825114075734501901ull}}, {{10150553791902538989ull, 15279002748155617137ull, 7990154288501172177ull, 3531392594668127376ull}}, {{17299878258305561640ull, 5263695379912357709ull, 9987692860626465222ull, 4414240743335159220ull}}, {{13118266920654669977ull, 17124867667727387280ull, 15465680074746316571ull, 2758900464584474512ull}}, {{16397833650818337472ull, 16794398566231846196ull, 885356019723344098ull, 3448625580730593141ull}}, {{2050547989813370223ull, 11769626170935031938ull, 5718381043081568027ull, 4310781975913241426ull}}, {{5893278512060744294ull, 5050173347620701009ull, 8185674170353367921ull, 2694238734945775891ull}}, {{11978284158503318271ull, 10924402702953264165ull, 5620406694514321997ull, 3367798418682219864ull}}, {{1137797142846984127ull, 18267189397118968111ull, 7025508368142902496ull, 4209748023352774830ull}}, {{7628652241920446935ull, 11416993373199355069ull, 18226000785371477772ull, 2631092514595484268ull}}, {{14147501320827946573ull, 14271241716499193836ull, 4335756908004795599ull, 3288865643244355336ull}}, {{17684376651034933216ull, 13227366127196604391ull, 5419696135005994499ull, 4111082054055444170ull}}, {{17970264434537915116ull, 5961260820284183792ull, 7998996102806134466ull, 2569426283784652606ull}}, {{4016086469462842279ull, 16674948062210005549ull, 775373091652892274ull, 3211782854730815758ull}}, {{9631794105255940753ull, 11620313040907731128ull, 10192588401420891151ull, 4014728568413519697ull}}, {{6019871315784962971ull, 14180224678208413811ull, 17899582796956526729ull, 2509205355258449810ull}}, {{2913153126303815809ull, 3890222792478353552ull, 13151106459340882604ull, 3136506694073062263ull}}, {{3641441407879769762ull, 4862778490597941940ull, 11827197055748715351ull, 3920633367591327829ull}}, {{11499272916779631909ull, 9956765584264795568ull, 9697841169056641046ull, 2450395854744579893ull}}, {{14374091145974539886ull, 3222584943476218652ull, 16733987479748189212ull, 3062994818430724866ull}}, {{17967613932468174858ull, 4028231179345273315ull, 11694112312830460707ull, 3828743523038406083ull}}, {{8923915698578915334ull, 211801477877101870ull, 5002977186305343990ull, 2392964701899003802ull}}, {{1931522586368868360ull, 9488123884201153146ull, 15477093519736455795ull, 2991205877373754752ull}}, {{11637775269815861258ull, 7248468836824053528ull, 899622825961018128ull, 3739007346717193441ull}}, {{7273609543634913286ull, 4530293023015033455ull, 12091479312294106090ull, 2336879591698245900ull}}, {{4480325911116253704ull, 14886238315623567627ull, 15114349140367632612ull, 2921099489622807375ull}}, {{988721370467929225ull, 161053820819907918ull, 14281250407032152862ull, 3651374362028509219ull}}, {{10459273749939687340ull, 9424689312879660705ull, 13239876990362803173ull, 4564217952535636524ull}}, {{18066261139780774347ull, 8196273829763481892ull, 17498295155831527791ull, 2852636220334772827ull}}, {{4136082351016416318ull, 5633656268776964462ull, 17261182926362021835ull, 3565795275418466034ull}}, {{14393474975625296206ull, 2430384317543817673ull, 12353106621097751486ull, 4457244094273082543ull}}, {{2078392832124728273ull, 15354048253747049758ull, 14638220665827176534ull, 2785777558920676589ull}}, {{11821363077010686149ull, 9969188280329036389ull, 4462717777001806956ull, 3482221948650845737ull}}, {{941645790981193974ull, 12461485350411295487ull, 10190083239679646599ull, 4352777435813557171ull}}, {{7506057647004328090ull, 14705957371648141535ull, 4062959015586085172ull, 2720485897383473232ull}}, {{4770886040328022208ull, 18382446714560176919ull, 5078698769482606465ull, 3400607371729341540ull}}, {{1351921531982639856ull, 9143000337918057437ull, 6348373461853258082ull, 4250759214661676925ull}}, {{3150793966702843862ull, 10326061229626173802ull, 6273576422871980253ull, 2656724509163548078ull}}, {{13161864495233330636ull, 17519262555460105156ull, 17065342565444751124ull, 3320905636454435097ull}}, {{16452330619041663294ull, 3452334120615579829ull, 7496620151523775194ull, 4151132045568043872ull}}, {{12588549646114733511ull, 6769394843812125297ull, 4685387594702359496ull, 2594457528480027420ull}}, {{1900629002361253177ull, 8461743554765156622ull, 5856734493377949370ull, 3243071910600034275ull}}, {{11599158289806342279ull, 1353807406601669969ull, 2709232098295048809ull, 4053839888250042844ull}}, {{331944903487882069ull, 12375344675194513491ull, 10916642098289181313ull, 2533649930156276777ull}}, {{14249989184642016298ull, 1634122788710978151ull, 18257488641288864546ull, 3167062412695345971ull}}, {{13200800462375132468ull, 11266025522743498497ull, 18210174783183692778ull, 3958828015869182464ull}}, {{1332971261343375937ull, 11652951970142074465ull, 11381359239489807986ull, 2474267509918239040ull}}, {{6277900095106607825ull, 5342817925822817273ull, 14226699049362259983ull, 3092834387397798800ull}}, {{12459061137310647685ull, 2066836388851133687ull, 17783373811702824979ull, 3866042984247248500ull}}, {{14704442238460236659ull, 17432673807527816218ull, 1891236595459489803ull, 2416276865154530313ull}}, {{9157180761220520016ull, 17179156240982382369ull, 6975731762751750158ull, 3020346081443162891ull}}, {{16058161969953037924ull, 12250573264373202153ull, 4107978685012299794ull, 3775432601803953614ull}}, {{3118822203579566846ull, 12268294308660639250ull, 16402544733414851083ull, 2359645376127471008ull}}, {{13121899791329234366ull, 10723681867398411158ull, 2056436843059012238ull, 2949556720159338761ull}}, {{7179002702306767149ull, 4181230297393238140ull, 7182232072251153202ull, 3686945900199173451ull}}, {{8973753377883458936ull, 14449909908596323483ull, 4366104071886553598ull, 4608682375248966814ull}}, {{3302752851963467883ull, 4419507674445314273ull, 16563873100211259711ull, 2880426484530604258ull}}, {{8740127083381722758ull, 912698574629254937ull, 11481469338409298831ull, 3600533105663255323ull}}, {{15536844872654541352ull, 14975931273568732383ull, 9740150654584235634ull, 4500666382079069154ull}}, {{16628057073050170201ull, 13971643064407845643ull, 10699280177542535175ull, 2812916488799418221ull}}, {{16173385322885324847ull, 12852867812082419150ull, 17985786240355556873ull, 3516145610999272776ull}}, {{10993359616751880251ull, 2231026709820860226ull, 4035488726734894476ull, 4395182013749090971ull}}, {{11482535778897313061ull, 10617763730492813449ull, 216337444995615095ull, 2746988758593181857ull}}, {{518111668339477614ull, 8660518644688628908ull, 4882107824671906773ull, 3433735948241477321ull}}, {{647639585424347017ull, 15437334324288174039ull, 10714320799267271370ull, 4292169935301846651ull}}, {{7322303768531298742ull, 14260019971107496678ull, 4390607490328350654ull, 2682606209563654157ull}}, {{18376251747518899235ull, 8601652927029595039ull, 10099945381337826222ull, 3353257761954567696ull}}, {{18358628665971236140ull, 1528694121932217991ull, 12624931726672282778ull, 4191572202443209620ull}}, {{18391671943873104444ull, 5567119844635024148ull, 17113954366024952544ull, 2619732626527006012ull}}, {{4542845856131828939ull, 6958899805793780186ull, 2945698883821639064ull, 3274665783158757516ull}}, {{14901929357019561981ull, 8698624757242225232ull, 3682123604777048830ull, 4093332228948446895ull}}, {{9313705848137226238ull, 824954454849002866ull, 9218856280626737375ull, 2558332643092779309ull}}, {{2418760273316756990ull, 14866251123843417295ull, 16135256369210809622ull, 3197915803865974136ull}}, {{16858508396928109949ull, 9359441867949495810ull, 1722326387803960412ull, 3997394754832467671ull}}, {{15148253766507456622ull, 15073023204323210689ull, 7993983020018557113ull, 2498371721770292294ull}}, {{5100259152852157066ull, 5006220950121849650ull, 769106738168420584ull, 3122964652212865368ull}}, {{15598695977919972140ull, 6257776187652312062ull, 961383422710525730ull, 3903705815266081710ull}}, {{5137498967772594684ull, 8522796135710082943ull, 14435922694476242293ull, 2439816134541301068ull}}, {{1810187691288355451ull, 15265181188064991583ull, 18044903368095302866ull, 3049770168176626335ull}}, {{16097792669392608025ull, 9858104448226463670ull, 17944443191691740679ull, 3812212710220782919ull}}, {{5449434399942992112ull, 13078844307782621650ull, 18132806022448419780ull, 2382632943887989324ull}}, {{16035165036783515948ull, 16348555384728277062ull, 4219263454350973109ull, 2978291179859986656ull}}, {{10820584259124619127ull, 6600636175628182616ull, 5274079317938716387ull, 3722863974824983320ull}}, {{6762865161952886954ull, 1819554600553920183ull, 3296299573711697742ull, 2326789984265614575ull}}, {{3841895434013720789ull, 11497815287547176037ull, 17955432522421785889ull, 2908487480332018218ull}}, {{9414055310944538890ull, 537211054151806334ull, 13220918616172456554ull, 3635609350415022773ull}}, {{2544197101825897804ull, 9894885854544533726ull, 2691090214933406980ull, 4544511688018778467ull}}, {{15425181243923349840ull, 15407675695945109386ull, 17822832448829237026ull, 2840319805011736541ull}}, {{10058104518049411492ull, 10036222583076610925ull, 8443482505754382571ull, 3550399756264670677ull}}, {{17184316665989152268ull, 7933592210418375752ull, 15166039150620366118ull, 4437999695330838346ull}}, {{10740197916243220168ull, 346809113084096941ull, 14090460487565116728ull, 2773749809581773966ull}}, {{18036933413731413114ull, 433511391355121176ull, 8389703572601620102ull, 3467187261977217458ull}}, {{4099422693454714776ull, 9765261276048677279ull, 1263757428897249319ull, 4333984077471521823ull}}, {{9479668211050278591ull, 13020817325171505155ull, 7707377420701862680ull, 2708740048419701139ull}}, {{7237899245385460335ull, 16276021656464381444ull, 5022535757449940446ull, 3385925060524626424ull}}, {{9047374056731825419ull, 11121655033725700997ull, 6278169696812425558ull, 4232406325655783030ull}}, {{7960451794671084839ull, 2339348377651175219ull, 17758914115789929686ull, 2645253953534864393ull}}, {{5338878724911468144ull, 12147557508918744832ull, 8363584589455248395ull, 3306567441918580492ull}}, {{6673598406139335180ull, 10572760867721043136ull, 10454480736819060494ull, 4133209302398225615ull}}, {{4170999003837084488ull, 1996289523898264056ull, 13451579488152994665ull, 2583255813998891009ull}}, {{5213748754796355610ull, 7107047923300217974ull, 2979416304909079619ull, 3229069767498613762ull}}, {{15740557980350220320ull, 4272123885697884563ull, 12947642417991125332ull, 4036337209373267202ull}}, {{7532005728505193748ull, 11893449465415953660ull, 12703962529671841236ull, 2522710755858292001ull}}, {{9415007160631492185ull, 14866811831769942075ull, 2044895106807637833ull, 3153388444822865002ull}}, {{7157072932361977327ull, 4748456734430263882ull, 11779490920364323100ull, 3941735556028581252ull}}, {{9084856601153623734ull, 12191157495873690734ull, 16585553862082477745ull, 2463584722517863282ull}}, {{2132698714587253859ull, 1403888814559949706ull, 11508570290748321374ull, 3079480903147329103ull}}, {{11889245430088843132ull, 10978233055054712940ull, 9774026845008013813ull, 3849351128934161379ull}}, {{16654150430660302766ull, 9167238668622889539ull, 3802923768916314681ull, 2405844455583850862ull}}, {{16206002019897990553ull, 16070734354205999828ull, 13977026748000169159ull, 3007305569479813577ull}}, {{1810758451162936575ull, 15476731924330111882ull, 3636225379718047737ull, 3759131961849766972ull}}, {{5743410050404223263ull, 2755428425065238070ull, 11496012899178555644ull, 2349457476156104357ull}}, {{16402634599860054887ull, 3444285531331547587ull, 534958068691030843ull, 2936821845195130447ull}}, {{15891607231397680705ull, 18140414969446598196ull, 14503755641145952265ull, 3671027306493913058ull}}, {{1417764965537549265ull, 8840460656526084034ull, 8906322514577664524ull, 4588784133117391323ull}}, {{5497789121888356195ull, 14748659947183578329ull, 3260608562397346375ull, 2867990083198369577ull}}, {{11483922420787833147ull, 13824138915552085007ull, 8687446721424070873ull, 3584987603997961971ull}}, {{9743217007557403530ull, 3445115589157942547ull, 6247622383352700688ull, 4481234504997452464ull}}, {{3783667620509683255ull, 2153197243223714092ull, 3904763989595437930ull, 2800771565623407790ull}}, {{4729584525637104068ull, 11914868590884418423ull, 14104327023849073220ull, 3500964457029259737ull}}, {{1300294638618992181ull, 14893585738605523029ull, 3795350724529177813ull, 4376205571286574672ull}}, {{3118527158350564065ull, 11614334095842145845ull, 2372094202830736133ull, 2735128482054109170ull}}, {{8509844966365592985ull, 682859564520518594ull, 12188489790393195975ull, 3418910602567636462ull}}, {{1413934171102215424ull, 14688632510932811955ull, 6012240201136719160ull, 4273638253209545578ull}}, {{17024609921434742304ull, 9180395319333007471ull, 8369336144137837379ull, 2671023908255965986ull}}, {{16669076383366039976ull, 6863808130738871435ull, 1238298143317520916ull, 3338779885319957483ull}}, {{16224659460780162066ull, 8579760163423589294ull, 15382930734429064857ull, 4173474856649946853ull}}, {{5528726144560213387ull, 16891565148208213069ull, 11920174718231859487ull, 2608421785406216783ull}}, {{11522593699127654638ull, 16502770416832878432ull, 10288532379362436455ull, 3260527231757770979ull}}, {{14403242123909568297ull, 16016777002613710136ull, 8248979455775657665ull, 4075659039697213724ull}}, {{9002026327443480186ull, 3092956598992486979ull, 14378984196714561849ull, 2547286899810758577ull}}, {{6640846890876962328ull, 8477881767167996628ull, 4138672190611038599ull, 3184108624763448222ull}}, {{8301058613596202910ull, 5985666190532607881ull, 14396712275118574057ull, 3980135780954310277ull}}, {{16717376679566096579ull, 15270256415151349685ull, 11303788181162802737ull, 2487584863096443923ull}}, {{7061662794175457012ull, 5252762463657023395ull, 9518049208026115518ull, 3109481078870554904ull}}, {{4215392474291933361ull, 15789325116426055052ull, 11897561510032644397ull, 3886851348588193630ull}}, {{11857992333287234159ull, 12174171206979978359ull, 2824289925343014844ull, 2429282092867621019ull}}, {{10210804398181654794ull, 15217714008724972949ull, 17365420461960932267ull, 3036602616084526273ull}}, {{17375191516154456396ull, 14410456492478828282ull, 7871717522169001622ull, 3795753270105657842ull}}, {{15471180716023923152ull, 4394849289371879772ull, 9531509469783013918ull, 2372345793816036151ull}}, {{892231821320352324ull, 14716933648569625524ull, 7302700818801379493ull, 2965432242270045189ull}}, {{1115289776650440405ull, 4561109005429868193ull, 13740062041929112271ull, 3706790302837556486ull}}, {{12226271156474995013ull, 9768222156034749476ull, 3975852757778307265ull, 2316743939273472804ull}}, {{15282838945593743766ull, 16821963713470824749ull, 4969815947222884081ull, 2895929924091841005ull}}, {{5268490626710015996ull, 7192396586556367225ull, 10823955952455993006ull, 3619912405114801256ull}}, {{11197299301814907899ull, 18213867770050234839ull, 13529944940569991257ull, 4524890506393501570ull}}, {{13915841091275399293ull, 4466138328640314918ull, 13067901606283632440ull, 2828056566495938481ull}}, {{8171429327239473308ull, 5582672910800393648ull, 2499818952572376838ull, 3535070708119923102ull}}, {{10214286659049341635ull, 16201713175355267868ull, 12348145727570246855ull, 4418838385149903877ull}}, {{15607301198760614330ull, 17043599762238124273ull, 10023434088945098236ull, 2761773990718689923ull}}, {{5674068443168604200ull, 2857755629088103726ull, 7917606592753984892ull, 3452217488398362404ull}}, {{16315957590815531058ull, 3572194536360129657ull, 9897008240942481115ull, 4315271860497953005ull}}, {{3279944466618625056ull, 18373522649720938700ull, 8491473159802744648ull, 2697044912811220628ull}}, {{4099930583273281319ull, 4520159238441621759ull, 10614341449753430811ull, 3371306141014025785ull}}, {{513227210664213745ull, 1038513029624639295ull, 17879612830619176418ull, 4214132676267532231ull}}, {{7238296034306215447ull, 5260756661942787463ull, 18092287046778067117ull, 2633832922667207644ull}}, {{4436184024455381404ull, 11187631845855872233ull, 4168614734763032280ull, 3292291153334009556ull}}, {{10156916048996614659ull, 13984539807319840291ull, 5210768418453790350ull, 4115363941667511945ull}}, {{4042229521409190210ull, 4128651361147512278ull, 14785945307602088729ull, 2572102463542194965ull}}, {{14276158938616263571ull, 9772500219861778251ull, 4647373579220447199ull, 3215128079427743707ull}}, {{13233512654842941559ull, 7603939256399834910ull, 1197530955598171095ull, 4018910099284679634ull}}, {{3659259390849450571ull, 11669991062890978675ull, 5360142865676244838ull, 2511818812052924771ull}}, {{18409132293843976925ull, 5364116791758947535ull, 2088492563667918144ull, 3139773515066155964ull}}, {{18399729348877583252ull, 6705145989698684419ull, 2610615704584897680ull, 3924716893832694955ull}}, {{9193987833834795581ull, 4190716243561677762ull, 17772535879861418714ull, 2452948058645434346ull}}, {{2269112755438718668ull, 14461767341306873011ull, 12992297812971997584ull, 3066185073306792933ull}}, {{16671448999580562047ull, 18077209176633591263ull, 2405314210932833268ull, 3832731341633491167ull}}, {{17337184652378933136ull, 2074883698541218731ull, 8420850409474102649ull, 2395457088520931979ull}}, {{17059794797046278515ull, 7205290641603911318ull, 5914376993415240407ull, 2994321360651164974ull}}, {{12101371459453072336ull, 4394927283577501244ull, 16616343278623826317ull, 3742901700813956217ull}}, {{16786729199012946018ull, 5052672561449632229ull, 3467685521498809592ull, 2339313563008722636ull}}, {{7148353443484018811ull, 6315840701812040287ull, 4334606901873511990ull, 2924141953760903295ull}}, {{4323755785927635609ull, 17118172914119826167ull, 806572608914502083ull, 3655177442201129119ull}}, {{793008713982156607ull, 16786030124222394805ull, 14843273816425291316ull, 4568971802751411398ull}}, {{2801473455452541832ull, 1267896790784220945ull, 4665360116838419169ull, 2855607376719632124ull}}, {{8113527837743065194ull, 6196557006907664085ull, 5831700146048023961ull, 3569509220899540155ull}}, {{14753595815606219396ull, 12357382277061968010ull, 2677939164132642047ull, 4461886526124425194ull}}, {{13832683403181275027ull, 14640892950804811862ull, 6285397996010289183ull, 2788679078827765746ull}}, {{8067482217121817975ull, 13689430170078626924ull, 17080119531867637287ull, 3485848848534707182ull}}, {{10084352771402272469ull, 12500101694170895751ull, 12126777377979770801ull, 4357311060668383978ull}}, {{13220249509767502149ull, 895034531215727988ull, 12190921879664744655ull, 2723319412917739986ull}}, {{16525311887209377686ull, 14953851219301823697ull, 6015280312726155010ull, 3404149266147174983ull}}, {{6821581803729558396ull, 9468941987272503814ull, 2907414372480305859ull, 4255186582683968729ull}}, {{18098546682613137710ull, 3612245732831620931ull, 13346349028868660922ull, 2659491614177480455ull}}, {{18011497334839034233ull, 13738679202894301972ull, 12071250267658438248ull, 3324364517721850569ull}}, {{4067627594839241175ull, 17173349003617877466ull, 1254004779290884098ull, 4155455647152313212ull}}, {{7153953265201913639ull, 15345029145688561320ull, 10007125023911578369ull, 2597159779470195757ull}}, {{8942441581502392048ull, 5346228376828537938ull, 17120592298316860866ull, 3246449724337744696ull}}, {{1954679940023214252ull, 15906157507890448231ull, 2953996299186524466ull, 4058062155422180871ull}}, {{8139203990155590764ull, 14553034460858918048ull, 8763776714632659647ull, 2536288847138863044ull}}, {{10174004987694488454ull, 13579607057646259656ull, 10954720893290824559ull, 3170361058923578805ull}}, {{12717506234618110568ull, 12362822803630436666ull, 18305087135040918603ull, 3962951323654473506ull}}, {{12560127415063707009ull, 5420921243055328964ull, 16052365477827962031ull, 2476844577284045941ull}}, {{15700159268829633761ull, 2164465535391773301ull, 6230398792002788827ull, 3096055721605057427ull}}, {{5790141030754878489ull, 16540639974521880339ull, 3176312471576098129ull, 3870069652006321784ull}}, {{1312995135008105104ull, 3420370956435093356ull, 1985195294735061331ull, 2418793532503951115ull}}, {{1641243918760131380ull, 18110521750826030407ull, 16316552173700990375ull, 3023491915629938893ull}}, {{15886612953732327937ull, 18026466170105150104ull, 6560632161844074257ull, 3779364894537423617ull}}, {{9929133096082704961ull, 4349012328674636959ull, 15629610147221016171ull, 2362103059085889760ull}}, {{7799730351675993297ull, 824579392415908295ull, 1090268610316718598ull, 2952628823857362201ull}}, {{5137976921167603717ull, 10254096277374661177ull, 5974521781323286151ull, 3690786029821702751ull}}, {{14740450621798222083ull, 13326339201000245091ull, 10651605140968135700ull, 2306741268638564219ull}}, {{13813877258820389700ull, 16657924001250306364ull, 8702820407782781721ull, 2883426585798205274ull}}, {{17267346573525487125ull, 6987346946280719243ull, 1655153472873701344ull, 3604283232247756593ull}}, {{16972497198479471002ull, 8734183682850899054ull, 6680627859519514584ull, 4505354040309695741ull}}, {{5996124730622281472ull, 5458864801781811909ull, 6481235421413390567ull, 2815846275193559838ull}}, {{12106841931705239744ull, 2211894983799876982ull, 17324916313621514017ull, 3519807843991949797ull}}, {{5910180377776773872ull, 7376554748177234132ull, 7821087336744728809ull, 4399759804989937247ull}}, {{12917234772965259478ull, 16139561763679241092ull, 11805708613106537361ull, 2749849878118710779ull}}, {{16146543466206574348ull, 6339394149316887653ull, 10145449747955783798ull, 3437312347648388474ull}}, {{6348121277476054223ull, 17147614723500885375ull, 3458440148089953939ull, 4296640434560485593ull}}, {{10885104826063615745ull, 8411416192974359407ull, 13690740138624690972ull, 2685400271600303495ull}}, {{8994695014152131778ull, 10514270241217949259ull, 12501739154853475811ull, 3356750339500379369ull}}, {{6631682749262776818ull, 8531151783095048670ull, 1792115888284681052ull, 4195937924375474212ull}}, {{17979859773571399223ull, 14555341901289181226ull, 10343444467032701465ull, 2622461202734671382ull}}, {{13251452680109473221ull, 4359119321329312821ull, 3705933546936101024ull, 3278076503418339228ull}}, {{2729257794854677814ull, 5448899151661641027ull, 4632416933670126280ull, 4097595629272924035ull}}, {{17846687186280031298ull, 3405561969788525641ull, 589417574330134973ull, 2560997268295577522ull}}, {{8473300927567875410ull, 8868638480663044956ull, 9960144004767444524ull, 3201246585369471902ull}}, {{10591626159459844263ull, 11085798100828806195ull, 3226807969104529847ull, 4001558231711839878ull}}, {{4313923340448708712ull, 13846152840659085728ull, 15851813035972494866ull, 2500973894819899923ull}}, {{5392404175560885890ull, 8084319013969081352ull, 15203080276538230679ull, 3126217368524874904ull}}, {{6740505219451107363ull, 5493712749033963786ull, 557106271963236733ull, 3907771710656093631ull}}, {{8824501780584330006ull, 5739413477359921318ull, 7265720447618104814ull, 2442357319160058519ull}}, {{1807255188875636699ull, 16397638883554677456ull, 4470464541095243113ull, 3052946648950073149ull}}, {{2259068986094545874ull, 6661990549161183108ull, 10199766694796441796ull, 3816183311187591436ull}}, {{10635290153163866980ull, 13387116130080515250ull, 15598226221102551930ull, 2385114569492244647ull}}, {{4070740654600057916ull, 7510523125745868255ull, 14886096757950802009ull, 2981393211865305809ull}}, {{476739799822684491ull, 13999839925609723223ull, 4772562892156338799ull, 3726741514831632262ull}}, {{7215491402530259663ull, 15667428981147158870ull, 16817909862879875461ull, 2329213446769770163ull}}, {{18242736290017600387ull, 5749228171151784875ull, 16410701310172456423ull, 2911516808462212704ull}}, {{18191734344094612580ull, 2574849195512343190ull, 2066632564006018913ull, 3639396010577765881ull}}, {{13516295893263489916ull, 7830247512817816892ull, 7194976723434911545ull, 4549245013222207351ull}}, {{17671056970144457006ull, 16423119741579605317ull, 11414389479787901571ull, 2843278133263879594ull}}, {{8253763157398407545ull, 15917213658547118743ull, 5044614812880101156ull, 3554097666579849493ull}}, {{5705517928320621527ull, 1449772999474346813ull, 10917454534527514350ull, 4442622083224811866ull}}, {{5871791714414082407ull, 14741166179953630470ull, 11435095102507084372ull, 2776638802015507416ull}}, {{16563111679872378816ull, 18426457724942038087ull, 14293868878133855465ull, 3470798502519384270ull}}, {{16092203581413085616ull, 9198014100895383897ull, 8643964060812543524ull, 4338498128149230338ull}}, {{3140098210742096654ull, 14972130849914390744ull, 10014163556435227606ull, 2711561330093268961ull}}, {{3925122763427620818ull, 9491791525538212622ull, 17129390463971422412ull, 3389451662616586201ull}}, {{14129775491139301830ull, 11864739406922765777ull, 7576680024682114303ull, 4236814578270732752ull}}, {{1913580654320981788ull, 14332991156967810467ull, 4735425015426321439ull, 2648009111419207970ull}}, {{16227033873183390947ull, 13304552927782375179ull, 15142653306137677607ull, 3310011389274009962ull}}, {{15672106323051850780ull, 12019005141300581070ull, 9704944595817321201ull, 4137514236592512453ull}}, {{5183380433480018833ull, 594349185671781313ull, 8371433381599519703ull, 2585946397870320283ull}}, {{11090911560277411446ull, 14577994537371890353ull, 5852605708572011724ull, 3232432997337900354ull}}, {{28581395064600595ull, 18222493171714862942ull, 16539129172569790463ull, 4040541246672375442ull}}, {{13852921427197539084ull, 18306587259962871194ull, 14948641751283506943ull, 2525338279170234651ull}}, {{8092779747142148047ull, 18271548056526201089ull, 14074116170676995775ull, 3156672848962793314ull}}, {{14727660702355072963ull, 18227749052230363457ull, 8369273176491468911ull, 3945841061203491643ull}}, {{2287258911330838746ull, 18309872185285059017ull, 2924952726093474117ull, 2466150663252182277ull}}, {{7470759657590936336ull, 9052282176324160059ull, 8267876926044230551ull, 3082688329065227846ull}}, {{4726763553561282516ull, 6703666701977812170ull, 1111474120700512381ull, 3853360411331534808ull}}, {{7565913239403189477ull, 6495634697949826558ull, 694671325437820238ull, 2408350257082209255ull}}, {{234019512399211038ull, 17342915409292059006ull, 14703397212079439009ull, 3010437821352761568ull}}, {{9515896427353789605ull, 7843586206332910045ull, 18379246515099298762ull, 3763047276690951960ull}}, {{8253278276309812455ull, 9513927397385456682ull, 11487029071937061726ull, 2351904547931844975ull}}, {{1093225808532489761ull, 2669037209877045045ull, 9747100321493939254ull, 2939880684914806219ull}}, {{5978218279093000105ull, 12559668549201082114ull, 7572189383440036163ull, 3674850856143507774ull}}, {{16696144885721025939ull, 11087899668073964738ull, 241864692445269396ull, 4593563570179384718ull}}, {{15046776572003029116ull, 16153309329401003769ull, 13986223488060457084ull, 2870977231362115448ull}}, {{4973412659721622683ull, 1744892588041703096ull, 17482779360075571356ull, 3588721539202644310ull}}, {{6216765824652028354ull, 2181115735052128870ull, 12630102163239688387ull, 4485901924003305388ull}}, {{17720536695689681433ull, 17504098398903438207ull, 17117185888879581049ull, 2803688702502065867ull}}, {{17538984851184713888ull, 8045064943347134047ull, 16784796342672088408ull, 3504610878127582334ull}}, {{17312045045553504455ull, 10056331179183917559ull, 11757623391485334702ull, 4380763597659477918ull}}, {{17737557181112022141ull, 1673520968562560570ull, 2736828601250946285ull, 2737977248537173699ull}}, {{12948574439535251868ull, 6703587229130588617ull, 17256093806845846568ull, 3422471560671467123ull}}, {{2350659994136901123ull, 8379484036413235772ull, 16958431240129920306ull, 4278089450839333904ull}}, {{10692534533190339010ull, 9848863541185660261ull, 10599019525081200191ull, 2673805906774583690ull}}, {{17977354184915311666ull, 7699393408054687422ull, 4025402369496724431ull, 3342257383468229613ull}}, {{13248320694289363775ull, 5012555741640971374ull, 9643438980298293443ull, 4177821729335287016ull}}, {{3668514415503464455ull, 827004329311913157ull, 6027149362686433402ull, 2611138580834554385ull}}, {{9197329037806718473ull, 10257127448494667254ull, 12145622721785429656ull, 3263923226043192981ull}}, {{2273289260403622283ull, 12821409310618334068ull, 1346970346949623358ull, 4079904032553991227ull}}, {{10644177824607039735ull, 3401694800709070888ull, 16982757531339372263ull, 2549940020346244516ull}}, {{13305222280758799669ull, 18087176556168502322ull, 2781702840464663712ull, 3187425025432805646ull}}, {{7408155814093723778ull, 4162226621501076287ull, 12700500587435605449ull, 3984281281791007057ull}}, {{11547626411449659217ull, 14130606684506642439ull, 1020283839506171549ull, 2490175801119379411ull}}, {{9822846995884686118ull, 3828200300351139337ull, 15110412854664878149ull, 3112719751399224263ull}}, {{16890244763283245551ull, 9396936393866312075ull, 14276330049903709782ull, 3890899689249030329ull}}, {{8250559967838334517ull, 1261399227739057143ull, 2005177253548736758ull, 2431812305780643956ull}}, {{5701513941370530243ull, 10800121071528597237ull, 2506471566935920947ull, 3039765382225804945ull}}, {{11738578445140550707ull, 8888465320983358642ull, 7744775477097289088ull, 3799706727782256181ull}}, {{11948297546640232096ull, 5555290825614599151ull, 7146327682399499632ull, 2374816704863910113ull}}, {{10323685914872902216ull, 6944113532018248939ull, 13544595621426762444ull, 2968520881079887641ull}}, {{8292921375163739866ull, 8680141915022811174ull, 3095686471501289343ull, 3710651101349859552ull}}, {{571389841049949513ull, 12342617724530338840ull, 1934804044688305839ull, 2319156938343662220ull}}, {{714237301312436891ull, 10816586137235535646ull, 2418505055860382299ull, 2898946172929577775ull}}, {{10116168663495321921ull, 8909046653117031653ull, 16858189375107641586ull, 3623682716161972218ull}}, {{17256896847796540305ull, 1912936279541513758ull, 11849364682029776175ull, 4529603395202465273ull}}, {{6173874511445449787ull, 8113114202354527955ull, 488323898627528253ull, 2831002122001540796ull}}, {{3105657120879424329ull, 14753078771370547848ull, 610404873284410316ull, 3538752652501925995ull}}, {{3882071401099280412ull, 18441348464213184810ull, 14598064146887676607ull, 4423440815627407493ull}}, {{7037980644114438162ull, 18443371817774322362ull, 11429633101018491831ull, 2764650509767129683ull}}, {{18020847841997823510ull, 18442528753790515048ull, 9675355357845726885ull, 3455813137208912104ull}}, {{4079315728787727771ull, 9218102886955980099ull, 12094194197307158607ull, 4319766421511140130ull}}, {{243729321278635905ull, 12678843331988569418ull, 12170557391744362033ull, 2699854013444462581ull}}, {{9528033688453070689ull, 2013496109703548060ull, 1378138684398288830ull, 3374817516805578227ull}}, {{11910042110566338361ull, 11740242173984210883ull, 15557731410780024749ull, 4218521896006972783ull}}, {{5137933309890267524ull, 9643494367953825754ull, 16641111159378597324ull, 2636576185004357989ull}}, {{15645788674217610213ull, 12054367959942282192ull, 6966330893941082943ull, 3295720231255447487ull}}, {{1110491769062461150ull, 10456273931500464837ull, 4096227598998965775ull, 4119650289069309359ull}}, {{2999900364877732171ull, 13452700234828872379ull, 9477671277015435465ull, 2574781430668318349ull}}, {{17584933511379328926ull, 2980817238253926761ull, 16458775114696682236ull, 3218476788335397936ull}}, {{8146108833941997445ull, 3726021547817408452ull, 2126724819661301179ull, 4023095985419247421ull}}, {{14314690058068524211ull, 22920458172186330ull, 3635046021502007189ull, 2514434990887029638ull}}, {{8669990535730879456ull, 4640336591142620817ull, 13767179563732284794ull, 3143043738608787047ull}}, {{15449174188090987224ull, 15023792775783051829ull, 12597288436237968088ull, 3928804673260983809ull}}, {{11961576876770560967ull, 9389870484864407393ull, 955776245007648199ull, 2455502920788114881ull}}, {{1116913040681037497ull, 7125652087653121338ull, 5806406324686948153ull, 3069378650985143601ull}}, {{10619513337706072679ull, 13518751127993789576ull, 11869693924286073095ull, 3836723313731429501ull}}, {{6637195836066295424ull, 15366748482637200341ull, 9724401711892489636ull, 2397952071082143438ull}}, {{12908180813510257184ull, 761691529586948810ull, 2932130103010836238ull, 2997440088852679298ull}}, {{6911853980033045672ull, 10175486448838461821ull, 12888534665618321105ull, 3746800111065849122ull}}, {{6625751746734347497ull, 17888894076592508398ull, 12667020184438838594ull, 2341750069416155701ull}}, {{17505561720272710180ull, 13137745558885859689ull, 1998717175266384531ull, 2927187586770194627ull}}, {{8046894095058724012ull, 11810495930179936708ull, 16333454524365144376ull, 3658984483462743283ull}}, {{10058617618823405015ull, 14763119912724920885ull, 15805132137029042566ull, 4573730604328429104ull}}, {{8592479020978322087ull, 4615263927025687649ull, 9878207585643151604ull, 2858581627705268190ull}}, {{15352284794650290512ull, 5769079908782109561ull, 3124387445199163697ull, 3573227034631585238ull}}, {{5355297938030699428ull, 11823035904405024856ull, 13128856343353730429ull, 4466533793289481547ull}}, {{3347061211269187143ull, 9695240449466834487ull, 5899692205382387566ull, 2791583620805925967ull}}, {{18018884569368647641ull, 2895678524978767300ull, 2762929238300596554ull, 3489479526007407459ull}}, {{4076861638001257935ull, 12842970193078234934ull, 17288719603157909404ull, 4361849407509259323ull}}, {{16383096579032949921ull, 17250228407528672641ull, 8499606742759999425ull, 2726155879693287077ull}}, {{6643812668509023689ull, 7727727454128677090ull, 15236194446877387186ull, 3407694849616608846ull}}, {{17528137872491055420ull, 436287280806070554ull, 9821871021741958175ull, 4259618562020761058ull}}, {{15566772188734297542ull, 7190208578144875952ull, 10750355407016111763ull, 2662261601262975661ull}}, {{1011721162208320311ull, 4376074704253707037ull, 18049630277197527608ull, 3327827001578719576ull}}, {{5876337471187788292ull, 5470093380317133796ull, 4115293772787357894ull, 4159783751973399471ull}}, {{12896082956347143491ull, 17253866417980372334ull, 9489587635633180539ull, 2599864844983374669ull}}, {{6896731658579153556ull, 16955647004048077514ull, 16473670562968863578ull, 3249831056229218336ull}}, {{17844286610078717752ull, 11971186718205321084ull, 2145344130001527857ull, 4062288820286522921ull}}, {{1929307094444422787ull, 564462671237243822ull, 12870055127319424671ull, 2538930512679076825ull}}, {{11635005904910304292ull, 14540636394328718489ull, 2252510853867117126ull, 3173663140848846032ull}}, {{708699325855716653ull, 8952423456056122304ull, 2815638567333896408ull, 3967078926061057540ull}}, {{442937078659822908ull, 5595264660035076440ull, 10983146141438461063ull, 2479424328788160962ull}}, {{553671348324778635ull, 2382394806616457646ull, 4505560639943300521ull, 3099280410985201203ull}}, {{9915461222260749102ull, 7589679526697959961ull, 1020264781501737747ull, 3874100513731501504ull}}, {{17726378309981437949ull, 2437706694972531023ull, 637665488438586092ull, 2421312821082188440ull}}, {{17546286869049409532ull, 3047133368715663779ull, 797081860548232615ull, 3026641026352735550ull}}, {{17321172567884374011ull, 17643974766176743436ull, 10219724362540066576ull, 3783301282940919437ull}}, {{1602360818072957949ull, 11027484228860464648ull, 8693170735801235562ull, 2364563301838074648ull}}, {{2002951022591197436ull, 4560983249220805002ull, 10866463419751544453ull, 2955704127297593310ull}}, {{11727060815093772603ull, 10312915079953394156ull, 4359707237834654758ull, 3694630159121991638ull}}, {{16552785046288383685ull, 1833885906543483443ull, 16559875078928822936ull, 2309143849451244773ull}}, {{16079295289433091702ull, 2292357383179354304ull, 6864785793378864958ull, 2886429811814055967ull}}, {{1652375038081813012ull, 12088818765828968689ull, 3969296223296193293ull, 3608037264767569959ull}}, {{6677154816029654168ull, 1275965402004047149ull, 349934260692853713ull, 4510046580959462449ull}}, {{6479064769232227807ull, 12326693422320999228ull, 11747923959001503330ull, 2818779113099664030ull}}, {{8098830961540284759ull, 6184994741046473227ull, 5461532911897103355ull, 3523473891374580038ull}}, {{5511852683497968045ull, 3119557407880703630ull, 16050288176726155002ull, 4404342364218225047ull}}, {{17279965982468393740ull, 6561409398352827672ull, 16948959138094928732ull, 2752713977636390654ull}}, {{3153213404375940559ull, 8201761747941034591ull, 11962826885763885107ull, 3440892472045488318ull}}, {{17776574810752089411ull, 5640516166498905334ull, 5730161570350080576ull, 4301115590056860398ull}}, {{6498673238292667978ull, 3525322604061815834ull, 17416409036750964072ull, 2688197243785537748ull}}, {{17346713584720610780ull, 4406653255077269792ull, 3323767222229153474ull, 3360246554731922186ull}}, {{3236647907191211859ull, 14731688605701363049ull, 13378081064641217650ull, 4200308193414902732ull}}, {{13552119988062977172ull, 13818991396990739809ull, 17584672702255536839ull, 2625192620884314207ull}}, {{3105091929796557753ull, 12662053227811036858ull, 17369154859392033145ull, 3281490776105392759ull}}, {{13104736949100472999ull, 1992508479481632360ull, 17099757555812653528ull, 4101863470131740949ull}}, {{8190460593187795625ull, 1245317799676020225ull, 12993191481596602407ull, 2563664668832338093ull}}, {{14849761759912132435ull, 15391705304877188993ull, 2406431296713589296ull, 3204580836040422617ull}}, {{4727144144608001831ull, 792887557386934626ull, 7619725139319374525ull, 4005726045050528271ull}}, {{7566151108807389049ull, 2801397732580528093ull, 11679857239715690934ull, 2503578778156580169ull}}, {{14069374904436624215ull, 12725119202580435924ull, 764763494362449955ull, 3129473472695725212ull}}, {{17586718630545780268ull, 11294712984798157001ull, 955954367953062444ull, 3911841840869656515ull}}, {{4074170116450030812ull, 16282567652353623934ull, 16738372544466521691ull, 2444901150543535321ull}}, {{14316084682417314323ull, 15741523547014642013ull, 7087907625300988402ull, 3056126438179419152ull}}, {{4060047797739479191ull, 10453532396913526709ull, 8859884531626235503ull, 3820158047724273940ull}}, {{4843372882800868447ull, 13450986775712036049ull, 14760799869121172997ull, 2387598779827671212ull}}, {{10665902121928473462ull, 2978675414357881349ull, 4255762691914631ull, 2984498474784589016ull}}, {{17944063670837979732ull, 17558402323229515398ull, 5319703364893288ull, 3730623093480736270ull}}, {{6603353775846349429ull, 10974001452018447124ull, 13838382869885222017ull, 2331639433425460168ull}}, {{8254192219807936786ull, 18329187833450446809ull, 17297978587356527521ull, 2914549291781825210ull}}, {{14929426293187308886ull, 9076426736530894799ull, 12399101197340883594ull, 3643186614727281513ull}}, {{14050096848056748203ull, 2122161383808842691ull, 1663818441393940781ull, 4553983268409101892ull}}, {{6475467520821773675ull, 3632193874094220634ull, 10263258562725988796ull, 2846239542755688682ull}}, {{17317706437881992902ull, 4540242342617775792ull, 3605701166552710187ull, 3557799428444610853ull}}, {{3200388973642939511ull, 1063616909844831837ull, 9118812476618275638ull, 4447249285555763566ull}}, {{4306086117740531147ull, 14499818623935183610ull, 1087571779459034369ull, 2779530803472352229ull}}, {{14605979684030439741ull, 4289715224636815800ull, 5971150742751180866ull, 3474413504340440286ull}}, {{18257474605038049677ull, 14585516067650795558ull, 16687310465293751890ull, 4343016880425550357ull}}, {{6799235609721393144ull, 13727633560709135128ull, 12735412050022288883ull, 2714385550265968973ull}}, {{8499044512151741430ull, 12547855932459031006ull, 2084207007245697392ull, 3392981937832461217ull}}, {{1400433603334900979ull, 15684819915573788758ull, 7216944777484509644ull, 4241227422290576521ull}}, {{14710329057366476824ull, 579640410378842165ull, 16039805531996288288ull, 2650767138931610325ull}}, {{4552853266425932318ull, 724550512973552707ull, 6214698859713196648ull, 3313458923664512907ull}}, {{1079380564605027494ull, 905688141216940884ull, 3156687556214107906ull, 4141823654580641134ull}}, {{9897984889732917992ull, 5177741106687975956ull, 15807987777915981153ull, 2588639784112900708ull}}, {{12372481112166147489ull, 11083862401787357849ull, 1313240648685424825ull, 3235799730141125886ull}}, {{1630543334925520650ull, 19769946952033600ull, 10864922847711556840ull, 4044749662676407357ull}}, {{1019089584328450406ull, 12356216845021000ull, 9096419789033416977ull, 2527968539172754598ull}}, {{1273861980410563008ull, 4627131289483664154ull, 2147152699436995413ull, 3159960673965943248ull}}, {{10815699512367979567ull, 10395600130281968096ull, 2683940874296244266ull, 3949950842457429060ull}}, {{6759812195229987230ull, 11108936099853617964ull, 10900835083289928474ull, 2468719276535893162ull}}, {{8449765244037484037ull, 4662798087962246647ull, 4402671817257634785ull, 3085899095669866453ull}}, {{5950520536619467142ull, 10440183628380196213ull, 10115025789999431385ull, 3857373869587333066ull}}, {{6024918344600860916ull, 18054329813806092393ull, 10933577137177032519ull, 2410858668492083166ull}}, {{12142833949178464049ull, 17956226248830227587ull, 4443599384616514841ull, 3013573335615103958ull}}, {{10566856418045692157ull, 8610224755755620772ull, 14777871267625419360ull, 3766966669518879947ull}}, {{15827657298133333406ull, 5381390472347262982ull, 6930326533052193148ull, 2354354168449299967ull}}, {{10561199585811890950ull, 6726738090434078728ull, 4051222147887853531ull, 2942942710561624959ull}}, {{13201499482264863687ull, 3796736594615210506ull, 452341666432429010ull, 3678678388202031199ull}}, {{7278502315976303801ull, 13969292780123788941ull, 14400485138322699974ull, 4598347985252538998ull}}, {{6854906956698883828ull, 4119121969149980184ull, 4388617193024299580ull, 2873967490782836874ull}}, {{8568633695873604785ull, 5148902461437475230ull, 14709143528135150283ull, 3592459363478546092ull}}, {{1487420082987230173ull, 1824442058369456134ull, 18386429410168937854ull, 4490574204348182615ull}}, {{14764695607149182570ull, 14975334341763073795ull, 18409047408996668014ull, 2806608877717614134ull}}, {{13844183490509090309ull, 9495795890349066436ull, 13787937224391059210ull, 3508261097147017668ull}}, {{17305229363136362886ull, 2646372826081557237ull, 17234921530488824013ull, 4385326371433772085ull}}, {{13121611361173920756ull, 3959826025514667225ull, 13077668965769208960ull, 2740828982146107553ull}}, {{2566956146185237232ull, 4949782531893334032ull, 2512028151929347488ull, 3426036227682634442ull}}, {{3208695182731546540ull, 6187228164866667540ull, 12363407226766460168ull, 4282545284603293052ull}}, {{11228806526061992396ull, 3867017603041667212ull, 16950501553583813413ull, 2676590802877058157ull}}, {{14036008157577490495ull, 9445458022229471919ull, 7353068886697603054ull, 3345738503596322697ull}}, {{12933324178544475214ull, 2583450490932064091ull, 13803022126799391722ull, 4182173129495403371ull}}, {{5777484602376603057ull, 6226342575259927961ull, 6321045820035925874ull, 2613858205934627107ull}}, {{11833541771398141725ull, 17006300255929685759ull, 3289621256617519438ull, 3267322757418283884ull}}, {{10180241195820289253ull, 12034503283057331391ull, 4112026570771899298ull, 4084153446772854855ull}}, {{13280179775028762639ull, 12133250570338220023ull, 9487545634373518917ull, 2552595904233034284ull}}, {{11988538700358565395ull, 1331505157640611317ull, 11859432042966898647ull, 3190744880291292855ull}}, {{1150615320166043031ull, 15499439502332927859ull, 10212604035281235404ull, 3988431100364116069ull}}, {{16860035639599634559ull, 463777652103304103ull, 8688720531264466080ull, 2492769437727572543ull}}, {{16463358531072155294ull, 579722065129130129ull, 6249214645653194696ull, 3115961797159465679ull}}, {{6744140108558030406ull, 724652581411412662ull, 3199832288639105466ull, 3894952246449332099ull}}, {{18050145623130932716ull, 5064593881809520817ull, 18140796244895298580ull, 2434345154030832561ull}}, {{8727623973631502183ull, 6330742352261901022ull, 8840937250836959513ull, 3042931442538540702ull}}, {{1686157930184601920ull, 12525113958754764182ull, 1827799526691423583ull, 3803664303173175878ull}}, {{14888906761647539912ull, 14745725251862809469ull, 14977432759464303451ull, 2377290189483234923ull}}, {{4776075396777261178ull, 13820470546401123933ull, 14110104930902991410ull, 2971612736854043654ull}}, {{10581780264398964377ull, 8052216146146629108ull, 8414259126773963455ull, 3714515921067554568ull}}, {{15836984702104128544ull, 11950164118982725048ull, 5258911954233727159ull, 2321572450667221605ull}}, {{1349486803920609063ull, 10326019130301018407ull, 11185325961219546853ull, 2901965563334027006ull}}, {{15521916560182925041ull, 17519209931303660912ull, 4758285414669657758ull, 3627456954167533758ull}}, {{955651626519104685ull, 12675640377274800333ull, 15171228805191848006ull, 4534321192709417197ull}}, {{2903125275788134380ull, 3310589217369362304ull, 11787861012458598956ull, 2833950745443385748ull}}, {{3628906594735167975ull, 4138236521711702880ull, 14734826265573248695ull, 3542438431804232185ull}}, {{4536133243418959969ull, 561109633712240696ull, 4583474776684397157ull, 4428048039755290232ull}}, {{2835083277136849981ull, 2656536530283844387ull, 2864671735427748223ull, 2767530024847056395ull}}, {{17378912151703226188ull, 17155728718136969195ull, 17415897724566848990ull, 3459412531058820493ull}}, {{17111954171201644831ull, 12221288860816435686ull, 7934814100426397526ull, 4324265663823525617ull}}, {{6083285338573640115ull, 3026619519582884400ull, 16488473858834968214ull, 2702666039889703510ull}}, {{7604106673217050144ull, 13006646436333381308ull, 11387220286688934459ull, 3378332549862129388ull}}, {{9505133341521312680ull, 11646622026989338731ull, 14234025358361168074ull, 4222915687327661735ull}}, {{3634865329237126473ull, 11890824785295724611ull, 15813794876616811902ull, 2639322304579788584ull}}, {{18378639716828571803ull, 5640158944764879955ull, 1320499522061463262ull, 3299152880724735731ull}}, {{18361613627608326850ull, 16273570717810875752ull, 15485682457858992789ull, 4123941100905919663ull}}, {{11476008517255204282ull, 12476824707845491297ull, 16596080563802952349ull, 2577463188066199789ull}}, {{509952591286841640ull, 1760972829524700410ull, 6910042649471526725ull, 3221828985082749737ull}}, {{9860812775963327858ull, 6812902055333263416ull, 13249239330266796310ull, 4027286231353437171ull}}, {{6163007984977079911ull, 18093121839865453347ull, 5974931572203053741ull, 2517053894595898232ull}}, {{3092073962793961985ull, 8781344244549652972ull, 7468664465253817177ull, 3146317368244872790ull}}, {{3865092453492452481ull, 15588366324114454119ull, 112458544712495663ull, 3932896710306090988ull}}, {{9333211811073864657ull, 16660257980212615680ull, 9293658627300085597ull, 2458060443941306867ull}}, {{11666514763842330821ull, 6990264419983605888ull, 7005387265697719093ull, 3072575554926633584ull}}, {{14583143454802913526ull, 13349516543406895264ull, 8756734082122148866ull, 3840719443658291980ull}}, {{9114464659251820954ull, 12955133858056697444ull, 14696330838181118849ull, 2400449652286432487ull}}, {{11393080824064776192ull, 2358859267288708093ull, 13758727529299010658ull, 3000562065358040609ull}}, {{406292974798806528ull, 12171946120965660925ull, 3363351356341599610ull, 3750702581697550762ull}}, {{2559776118462948032ull, 12219152344030925982ull, 6713780616140887660ull, 2344189113560969226ull}}, {{12423092184933460848ull, 15273940430038657477ull, 17615597807030885383ull, 2930236391951211532ull}}, {{1693807175884662348ull, 14480739519120933943ull, 3572753185079055113ull, 3662795489939014416ull}}, {{15952317025137991647ull, 4265866343619003716ull, 4465941481348818892ull, 4578494362423768020ull}}, {{746826103856468972ull, 11889538501616653131ull, 12014585462697787615ull, 2861558976514855012ull}}, {{14768590685102749926ull, 10250237108593428509ull, 15018231828372234519ull, 3576948720643568765ull}}, {{4625680301096273696ull, 8201110367314397733ull, 4937731730183129437ull, 4471185900804460957ull}}, {{5196893197398865012ull, 7431536988785192535ull, 5391925340578149850ull, 2794491188002788098ull}}, {{1884430478321193361ull, 66049199126714861ull, 15963278712577463121ull, 3493113985003485122ull}}, {{6967224116328879605ull, 4694247517335781480ull, 10730726353867053093ull, 4366392481254356403ull}}, {{4354515072705549753ull, 5239747707548557377ull, 4400860961953214231ull, 2728995300783972752ull}}, {{10054829859309325096ull, 1937998616008308817ull, 5501076202441517789ull, 3411244125979965940ull}}, {{17180223342564044273ull, 7034184288437773925ull, 6876345253051897236ull, 4264055157474957425ull}}, {{13043482598316221623ull, 13619737217128384511ull, 15826930829225905532ull, 2665034473421848390ull}}, {{11692667229467889125ull, 17024671521410480639ull, 10560291499677606107ull, 3331293091777310488ull}}, {{10004148018407473502ull, 16669153383335712895ull, 13200364374597007634ull, 4164116364721638110ull}}, {{13170121539145752795ull, 15029906883012208463ull, 3638541715695741867ull, 2602572727951023819ull}}, {{11850965905504803089ull, 14175697585337872675ull, 18383235199901841046ull, 3253215909938779773ull}}, {{10202021363453615958ull, 8496249944817565036ull, 9143985944595137596ull, 4066519887423474717ull}}, {{15599635389013285782ull, 14533528252365753955ull, 8020834224585654949ull, 2541574929639671698ull}}, {{14887858217839219323ull, 4331852260175028732ull, 802670743877292879ull, 3176968662049589623ull}}, {{163078698589472538ull, 803129306791398012ull, 14838396485128779811ull, 3971210827561987028ull}}, {{9325296223473196144ull, 16642856881240481421ull, 50625766350711573ull, 2482006767226241893ull}}, {{16268306297768883084ull, 6968513046268438064ull, 4674968226365777371ull, 3102508459032802366ull}}, {{1888638798501552239ull, 4098955289408159677ull, 15067082319811997522ull, 3878135573791002957ull}}, {{3486242258277164102ull, 7173533074307487702ull, 11722769459096192403ull, 2423834733619376848ull}}, {{13581174859701230935ull, 4355230324456971723ull, 14653461823870240504ull, 3029793417024221060ull}}, {{12364782556199150764ull, 5444037905571214654ull, 18316827279837800630ull, 3787241771280276325ull}}, {{3116303079197081324ull, 17237581746264172871ull, 13753860059112319345ull, 2367026107050172703ull}}, {{17730436904278515367ull, 7711919127548052376ull, 12580639055463011278ull, 2958782633812715879ull}}, {{3716302056638592592ull, 416526872580289663ull, 11114112800901376194ull, 3698478292265894849ull}}, {{9240217813040202226ull, 4872015313790068943ull, 28791472922278265ull, 2311548932666184281ull}}, {{6938586247872864879ull, 10701705160664974083ull, 4647675359580235735ull, 2889436165832730351ull}}, {{4061546791413693195ull, 8765445432403829700ull, 1197908181047906765ull, 3611795207290912939ull}}, {{5076933489267116493ull, 15568492808932175029ull, 15332443281592047168ull, 4514744009113641173ull}}, {{5478926440005641760ull, 9730308005582609393ull, 11888620060208723432ull, 2821715005696025733ull}}, {{11460344068434440104ull, 12162885006978261741ull, 1025717019978740578ull, 3527143757120032167ull}}, {{490372030260886418ull, 5980234221868051369ull, 15117204330255589435ull, 4408929696400040208ull}}, {{11835697564981523772ull, 1431803379453838153ull, 9448252706409743397ull, 2755581060250025130ull}}, {{959563900944741002ull, 6401440242744685596ull, 2586943846157403438ull, 3444476325312531413ull}}, {{1199454876180926253ull, 17225172340285632803ull, 7845365826124142201ull, 4305595406640664266ull}}, {{16890560362108936572ull, 3848203685037438645ull, 9515039659754976780ull, 2690997129150415166ull}}, {{7278142397354007003ull, 4810254606296798307ull, 2670427537838945167ull, 3363746411438018958ull}}, {{4485991978265120850ull, 1401132239443609980ull, 12561406459153457267ull, 4204683014297523697ull}}, {{12027117023270476339ull, 17016608714148113901ull, 933350009329828935ull, 2627926883935952311ull}}, {{1198838223805931712ull, 16659074874257754473ull, 15001745566944449881ull, 3284908604919940388ull}}, {{6110233798184802544ull, 6988785537540029379ull, 305437884971010736ull, 4106135756149925486ull}}, {{1513053114651807638ull, 4367990960962518362ull, 14025956733389045422ull, 2566334847593703428ull}}, {{11114688430169535356ull, 14683360738057923760ull, 17532445916736306777ull, 3207918559492129285ull}}, {{13893360537711919194ull, 4519142867290240988ull, 8080499340638219760ull, 4009898199365161607ull}}, {{17906722372924725305ull, 2824464292056400617ull, 11967841115539969206ull, 2506186374603226004ull}}, {{8548344910873742919ull, 12753952401925276580ull, 14959801394424961507ull, 3132732968254032505ull}}, {{10685431138592178648ull, 11330754483979207821ull, 4864693687749038172ull, 3915916210317540632ull}}, {{8984237470833805607ull, 16305093589341780696ull, 3040433554843148857ull, 2447447631448462895ull}}, {{11230296838542257009ull, 6546308931395062158ull, 17635599998836099784ull, 3059309539310578618ull}}, {{4814499011323045453ull, 8182886164243827698ull, 12821127961690348922ull, 3824136924138223273ull}}, {{7620747900504291312ull, 9725989871079780215ull, 1095675948415386220ull, 2390085577586389546ull}}, {{4914248857202976236ull, 12157487338849725269ull, 10592966972374008583ull, 2987606971982986932ull}}, {{10754497089931108199ull, 10585173155134768682ull, 13241208715467510729ull, 3734508714978733665ull}}, {{11333246699634330529ull, 18144948268027700186ull, 1358226419526112349ull, 2334067946861708541ull}}, {{4943186337688137353ull, 8846127279752461521ull, 6309469042835028341ull, 2917584933577135676ull}}, {{10790668940537559595ull, 15669345118117964805ull, 7886836303543785426ull, 3646981166971419595ull}}, {{18100022194099337398ull, 10363309360792680198ull, 5246859361002343879ull, 4558726458714274494ull}}, {{6700827852884697970ull, 13394597378136506980ull, 17114345155908628636ull, 2849204036696421558ull}}, {{8376034816105872462ull, 16743246722670633725ull, 12169559408031009987ull, 3561505045870526948ull}}, {{15081729538559728481ull, 16317372384910904252ull, 15211949260038762484ull, 4451881307338158685ull}}, {{202708924745054493ull, 974985703714539350ull, 11813311296737920505ull, 2782425817086349178ull}}, {{9476758192786093924ull, 5830418148070562091ull, 5543267084067624823ull, 3478032271357936473ull}}, {{7234261722555229501ull, 2676336666660814710ull, 11540769873511918933ull, 4347540339197420591ull}}, {{18356471631879182150ull, 3978553425876703145ull, 14130510198586031189ull, 2717212711998387869ull}}, {{9110531484566813976ull, 9584877800773266836ull, 3828079692950375274ull, 3396515889997984837ull}}, {{11388164355708517470ull, 2757725214111807737ull, 9396785634615356997ull, 4245644862497481046ull}}, {{200073694676741563ull, 4029421268033573788ull, 1261305003207210219ull, 2653528039060925654ull}}, {{250092118345926953ull, 425090566614579331ull, 10800003290863788582ull, 3316910048826157067ull}}, {{14147673203214572403ull, 9754735245122999971ull, 8888318095152347823ull, 4146137561032696334ull}}, {{6536452742795413800ull, 13014238555842956838ull, 943512791042829485ull, 2591335975645435209ull}}, {{17393937965349043058ull, 2432740139521532335ull, 5791077007230924761ull, 3239169969556794011ull}}, {{17130736438258915919ull, 7652611192829303323ull, 2627160240611268047ull, 4048962461945992514ull}}, {{8400867264698128497ull, 11700411023159396433ull, 6253661168809430433ull, 2530601538716245321ull}}, {{15112770099300048526ull, 790455723667081829ull, 12428762479439175946ull, 3163251923395306651ull}}, {{5055904568842896945ull, 10211441691438628095ull, 10924267080871582028ull, 3954064904244133314ull}}, {{10077469383167892447ull, 15605523094003918367ull, 11439352943972126671ull, 2471290565152583321ull}}, {{7985150710532477654ull, 14895217849077510055ull, 464133124682994627ull, 3089113206440729152ull}}, {{5369752369738209164ull, 14007336292919499665ull, 580166405853743284ull, 3861391508050911440ull}}, {{14885310277154850488ull, 17977957219929463098ull, 362604003658589552ull, 2413369692531819650ull}}, {{9383265809588787301ull, 4025702451202277257ull, 9676627041428012749ull, 3016712115664774562ull}}, {{16340768280413372031ull, 9643814082430234475ull, 2872411764930240128ull, 3770890144580968203ull}}, {{7907137166044663567ull, 6027383801518896547ull, 17936158417577257744ull, 2356806340363105126ull}}, {{5272235439128441555ull, 7534229751898620684ull, 13196825985116796372ull, 2946007925453881408ull}}, {{6590294298910551944ull, 9417787189873275855ull, 16496032481395995465ull, 3682509906817351760ull}}, {{3626181855210802025ull, 16383920005768982723ull, 2173296528035442715ull, 4603137383521689701ull}}, {{18407264724002608930ull, 7934106994391920249ull, 3664153339235845649ull, 2876960864701056063ull}}, {{9174022849721097450ull, 14529319761417288216ull, 18415249729326970773ull, 3596201080876320078ull}}, {{11467528562151371813ull, 4326591646489446558ull, 13795690124803937659ull, 4495251351095400098ull}}, {{2555519332917219479ull, 398276769842210147ull, 13233992346429848941ull, 2809532094434625061ull}}, {{17029457221428688061ull, 5109531980730150587ull, 2707432377755147464ull, 3511915118043281327ull}}, {{16675135508358472172ull, 6386914975912688234ull, 17219348527476098042ull, 4389893897554101658ull}}, {{15033645711151433012ull, 8603507878372818050ull, 15373778848099949180ull, 2743683685971313536ull}}, {{9568685102084515456ull, 10754384847966022563ull, 770479486415384859ull, 3429604607464141921ull}}, {{7349170359178256416ull, 8831295041530140300ull, 5574785376446618978ull, 4287005759330177401ull}}, {{13816603511341186068ull, 10131245419383725591ull, 15013455906347606621ull, 2679378599581360875ull}}, {{12659068370749094681ull, 17275742792657044893ull, 14155133864507120372ull, 3349223249476701094ull}}, {{1988777408154204640ull, 3147934417111754501ull, 8470545293779124658ull, 4186529061845876368ull}}, {{3548828889310071852ull, 6579145029122234467ull, 5294090808611952911ull, 2616580663653672730ull}}, {{18271094166919753527ull, 3612245267975405179ull, 15840985547619716947ull, 3270725829567090912ull}}, {{18227181690222304005ull, 18350364640251420186ull, 1354487860815094567ull, 4088407286958863641ull}}, {{16003674574816327907ull, 18386506927798219472ull, 12375769959077903864ull, 2555254554349289775ull}}, {{1557849144810858268ull, 4536389586038222725ull, 10858026430419991927ull, 3194068192936612219ull}}, {{6558997449440960738ull, 1058800964120390502ull, 8960847019597602005ull, 3992585241170765274ull}}, {{17934431461182764174ull, 2967593611788938015ull, 10212215405675889157ull, 2495365775731728296ull}}, {{17806353308051067313ull, 8321178033163560423ull, 12765269257094861446ull, 3119207219664660370ull}}, {{17646255616636446237ull, 1178100504599674721ull, 6733214534513801000ull, 3899009024580825463ull}}, {{4111380732756697042ull, 736312815374796701ull, 11125788111712207481ull, 2436880640363015914ull}}, {{9750911934373259207ull, 5532077037645883780ull, 4683863102785483543ull, 3046100800453769893ull}}, {{12188639917966574008ull, 2303410278629966821ull, 10466514896909242333ull, 3807626000567212366ull}}, {{9923742957942802707ull, 3745474433357423215ull, 1929885792140888554ull, 2379766250354507729ull}}, {{7792992679001115480ull, 13905215078551554827ull, 7024043258603498596ull, 2974707812943134661ull}}, {{5129554830324006446ull, 17381518848189443534ull, 13391740091681761149ull, 3718384766178918326ull}}, {{17041029824234667741ull, 13169292289332096160ull, 3758151538873712814ull, 2323990478861823954ull}}, {{2854543206583783060ull, 7238243324810344393ull, 13921061460446916826ull, 2904988098577279942ull}}, {{8179865026657116729ull, 18271176192867706299ull, 8177954788703870224ull, 3631235123221599928ull}}, {{5613145264894008007ull, 4392226167375081258ull, 10222443485879837781ull, 4539043904026999910ull}}, {{8119901808986142909ull, 5050984363823119738ull, 1777341160247510709ull, 2836902440016874944ull}}, {{926505224377902828ull, 10925416473206287577ull, 2221676450309388386ull, 3546128050021093680ull}}, {{5769817548899766439ull, 4433398554653083663ull, 2777095562886735483ull, 4432660062526367100ull}}, {{10523664995703435880ull, 465031087444483337ull, 10959056763658985485ull, 2770412539078979437ull}}, {{17766267263056682754ull, 5192974877732992075ull, 18310506973001119760ull, 3463015673848724296ull}}, {{17596148060393465539ull, 6491218597166240094ull, 4441389642541848084ull, 4328769592310905371ull}}, {{6385906519318528058ull, 13280383660083675867ull, 470025517374961100ull, 2705480995194315857ull}}, {{3370697130720772168ull, 16600479575104594834ull, 5199217915146089279ull, 3381851243992894821ull}}, {{13436743450255741018ull, 16138913450453355638ull, 11110708412359999503ull, 4227314054991118526ull}}, {{3786278637982450233ull, 17004349934174429130ull, 2332506739297611785ull, 2642071284369449079ull}}, {{13956220334332838599ull, 7420379362435872700ull, 16750691479404178444ull, 3302589105461811348ull}}, {{17445275417916048248ull, 9275474203044840875ull, 2491620275545671439ull, 4128236381827264186ull}}, {{8597454126983836203ull, 12714700404544107403ull, 6168948690643432553ull, 2580147738642040116ull}}, {{6135131640302407350ull, 2058317450397970542ull, 7711185863304290692ull, 3225184673302550145ull}}, {{16892286587232784995ull, 2572896812997463177ull, 14250668347557751269ull, 4031480841628187681ull}}, {{3640150089379408766ull, 3913903517337108438ull, 1989138689582512687ull, 2519675526017617301ull}}, {{13773559648579036766ull, 280693378243997643ull, 7098109380405528763ull, 3149594407522021626ull}}, {{12605263542296408053ull, 14185924778087160766ull, 18096008762361686761ull, 3936993009402527032ull}}, {{3266603695507867129ull, 1948673958663393623ull, 11310005476476054226ull, 2460620630876579395ull}}, {{17918312674666997623ull, 11659214485184017836ull, 9525820827167679878ull, 3075775788595724244ull}}, {{3951146769624195413ull, 5350646069625246488ull, 11907276033959599848ull, 3844719735744655305ull}}, {{2469466731015122133ull, 3344153793515779055ull, 524518493583668049ull, 2402949834840409566ull}}, {{16921891469051066379ull, 8791878260322111722ull, 9879020153834360869ull, 3003687293550511957ull}}, {{11928992299459057165ull, 15601533843830027557ull, 16960461210720338990ull, 3754609116938139946ull}}, {{9761463196375604680ull, 5139272633966379319ull, 15211974275127599773ull, 2346630698086337466ull}}, {{7590142977042117946ull, 11035776810885362053ull, 9791595807054723908ull, 2933288372607921833ull}}, {{14099364739730035337ull, 13794721013606702566ull, 16851180777245792789ull, 3666610465759902291ull}}, {{8400833887807768363ull, 3408343211726214496ull, 16452289953129853083ull, 4583263082199877864ull}}, {{5250521179879855227ull, 18271115571824741724ull, 10282681220706158176ull, 2864539426374923665ull}}, {{6563151474849819034ull, 4392150391071375539ull, 17465037544310085625ull, 3580674282968654581ull}}, {{3592253325134885888ull, 10101874007266607328ull, 7996238875105443319ull, 4475842853710818227ull}}, {{2245158328209303680ull, 13231200282182711436ull, 2691806287727208122ull, 2797401783569261392ull}}, {{2806447910261629600ull, 7315628315873613487ull, 3364757859659010153ull, 3496752229461576740ull}}, {{17343117943109200712ull, 13756221413269404762ull, 4205947324573762691ull, 4370940286826970925ull}}, {{15451134732870638349ull, 6291795374079684024ull, 4934560087072295634ull, 2731837679266856828ull}}, {{867174342378746320ull, 17088116254454380839ull, 6168200108840369542ull, 3414797099083571035ull}}, {{14919025983255596612ull, 12136773281213200240ull, 3098564117623074024ull, 4268496373854463794ull}}, {{9324391239534747883ull, 7585483300758250150ull, 6548288591941809169ull, 2667810233659039871ull}}, {{2432117012563659045ull, 14093540144375200592ull, 3573674721499873557ull, 3334762792073799839ull}}, {{3040146265704573807ull, 3781867125186837028ull, 18302151457157005659ull, 4168453490092249798ull}}, {{11123463452920134437ull, 57823944028079190ull, 6827158642295740633ull, 2605283431307656124ull}}, {{4680957279295392239ull, 4683965948462486892ull, 8533948302869675791ull, 3256604289134570155ull}}, {{5851196599119240298ull, 1243271417150720711ull, 6055749360159706835ull, 4070755361418212694ull}}, {{10574526902090607043ull, 16917945700215058108ull, 17619901405381980483ull, 2544222100886382933ull}}, {{13218158627613258803ull, 16535746106841434731ull, 8189818701445311892ull, 3180277626107978667ull}}, {{11911012266089185600ull, 2222938559842241798ull, 5625587358379251962ull, 3975347032634973334ull}}, {{2832696647878353096ull, 6001022618328789028ull, 17351050154269196188ull, 2484591895396858333ull}}, {{3540870809847941370ull, 7501278272910986285ull, 7853754637554331523ull, 3105739869246072917ull}}, {{9037774530737314616ull, 4764911822711344952ull, 14428879315370302308ull, 3882174836557591146ull}}, {{5648609081710821635ull, 12201441926049366403ull, 13629735590533826846ull, 2426359272848494466ull}}, {{2449075333711139140ull, 6028430370706932196ull, 7813797451312507750ull, 3032949091060618083ull}}, {{3061344167138923925ull, 16758910000238441053ull, 5155560795713246783ull, 3791186363825772604ull}}, {{4219183113675521405ull, 17391847777790107514ull, 12445597534175555047ull, 2369491477391107877ull}}, {{14497350928949177564ull, 17128123703810246488ull, 1721938862437280097ull, 2961864346738884847ull}}, {{18121688661186471955ull, 7575096574480644398ull, 15987481633328763834ull, 3702330433423606058ull}}, {{6714369394814157068ull, 9346121377477790653ull, 14603862039257865300ull, 2313956520889753786ull}}, {{13004647761945084239ull, 11682651721847238316ull, 9031455512217555817ull, 2892445651112192233ull}}, {{16255809702431355299ull, 768256597026884183ull, 15901005408699332676ull, 3615557063890240291ull}}, {{15708076109611806220ull, 960320746283605229ull, 15264570742446777941ull, 4519446329862800364ull}}, {{12123390577721072839ull, 2906043475640947220ull, 316984677174460405ull, 2824653956164250228ull}}, {{15154238222151341049ull, 8244240362978571929ull, 396230846468075506ull, 3530817445205312785ull}}, {{5107739722407012599ull, 1081928416868439104ull, 5106974576512482287ull, 4413521806506640981ull}}, {{3192337326504382875ull, 7593734288183856296ull, 5497702119533995381ull, 2758451129066650613ull}}, {{3990421658130478593ull, 14103853878657208274ull, 11483813667844882130ull, 3448063911333313266ull}}, {{14211399109517874050ull, 8406445311466734534ull, 5131395047951326855ull, 4310079889166641583ull}}, {{4270438425021283377ull, 12171557347307790940ull, 10124650932610661140ull, 2693799930729150989ull}}, {{5338048031276604221ull, 15214446684134738675ull, 17267499684190714329ull, 3367249913411438736ull}}, {{2060874020668367373ull, 5183000299886259632ull, 3137630531528841296ull, 4209062391764298421ull}}, {{1288046262917729608ull, 3239375187428912270ull, 4266862091419219762ull, 2630663994852686513ull}}, {{10833429865501937818ull, 13272591021140916145ull, 9945263632701412606ull, 3288329993565858141ull}}, {{18153473350304810176ull, 7367366739571369373ull, 17043265559304153662ull, 4110412491957322676ull}}, {{13651763853154200312ull, 18439662267514269570ull, 1428668937710320230ull, 2569007807473326673ull}}, {{7841332779587974582ull, 13826205797538061155ull, 6397522190565288192ull, 3211259759341658341ull}}, {{5189979956057580324ull, 17282757246922576444ull, 12608588756633998144ull, 4014074699177072926ull}}, {{12467109509390763511ull, 10801723279326610277ull, 3268681954468860936ull, 2508796686985670579ull}}, {{1748828831456290676ull, 13502154099158262847ull, 17920910498368239882ull, 3135995858732088223ull}}, {{16021094094602527057ull, 7654320587093052750ull, 17789452104532911949ull, 3919994823415110279ull}}, {{5401497790699191507ull, 7089793376146851921ull, 18035936592974151824ull, 2449996764634443924ull}}, {{11363558256801377287ull, 8862241720183564901ull, 4098176667508138164ull, 3062495955793054906ull}}, {{369389765719557897ull, 11077802150229456127ull, 14346092871239948513ull, 3828119944741318632ull}}, {{7148397631215805542ull, 6097316252328223ull, 8966308044524967821ull, 2392574965463324145ull}}, {{4323811020592369023ull, 4619307663742798183ull, 15819571074083597680ull, 2990718706829155181ull}}, {{793077757313073375ull, 5774134579678497729ull, 5939405787322333388ull, 3738398383536443977ull}}, {{12024888644389140619ull, 12832206149153836888ull, 15241343663144928127ull, 2336498989710277485ull}}, {{15031110805486425774ull, 11428571668014908206ull, 5216621523648996447ull, 2920623737137846857ull}}, {{9565516470003256410ull, 9674028566591247354ull, 11132462922988633463ull, 3650779671422308571ull}}, {{2733523550649294704ull, 7480849689811671289ull, 9303892635308403925ull, 4563474589277885714ull}}, {{13237667265224278950ull, 6981374065345988507ull, 10426618915495140357ull, 2852171618298678571ull}}, {{11935398063102960784ull, 13338403600109873538ull, 8421587625941537542ull, 3565214522873348214ull}}, {{5695875542023925171ull, 7449632463282566115ull, 1303612495572146120ull, 4456518153591685268ull}}, {{1254079204551259280ull, 4656020289551603822ull, 10038129846587367133ull, 2785323845994803292ull}}, {{10790971042543849908ull, 10431711380366892681ull, 12547662308234208916ull, 3481654807493504115ull}}, {{18100399821607200289ull, 13039639225458615851ull, 11072891866865373241ull, 4352068509366880144ull}}, {{9006906879290806229ull, 1232245488270553051ull, 6920557416790858276ull, 2720042818354300090ull}}, {{6646947580686119882ull, 1540306860338191314ull, 17874068807843348653ull, 3400053522942875112ull}}, {{17532056512712425660ull, 6537069593850127046ull, 3895841936094634200ull, 4250066903678593891ull}}, {{6345849302017878134ull, 4085668496156329404ull, 129058200845452423ull, 2656291814799121182ull}}, {{7932311627522347667ull, 495399601768023851ull, 9384694787911591337ull, 3320364768498901477ull}}, {{5303703515975546680ull, 5230935520637417718ull, 16342554503316877075ull, 4150455960623626846ull}}, {{17149872752766880387ull, 963491691184692121ull, 5602410546145660268ull, 2594034975389766779ull}}, {{7602282885676436772ull, 1204364613980865152ull, 2391327164254687431ull, 3242543719237208474ull}}, {{9502853607095545965ull, 15340513822758245152ull, 12212530992173135096ull, 4053179649046510592ull}}, {{5939283504434716228ull, 9587821139223903220ull, 7632831870108209435ull, 2533237280654069120ull}}, {{7424104380543395285ull, 7373090405602491121ull, 9541039837635261794ull, 3166546600817586400ull}}, {{13891816494106632010ull, 18439735043857889709ull, 11926299797044077242ull, 3958183251021983000ull}}, {{10988228318030338959ull, 16136520420838568972ull, 7453937373152548276ull, 2473864531888739375ull}}, {{13735285397537923698ull, 1723906452338659599ull, 4705735698013297442ull, 3092330664860924219ull}}, {{12557420728495016718ull, 11378255102278100307ull, 1270483604089233898ull, 3865413331076155274ull}}, {{5542544946095691497ull, 11723095457351200596ull, 5405738270983159090ull, 2415883331922597046ull}}, {{6928181182619614371ull, 5430497284834224937ull, 15980544875583724671ull, 3019854164903246307ull}}, {{13271912496701905868ull, 2176435587615393267ull, 15363995076052267935ull, 3774817706129057884ull}}, {{5989102301224997216ull, 8277801269900702648ull, 379124885677891651ull, 2359261066330661178ull}}, {{7486377876531246520ull, 5735565568948490406ull, 9697278143952140372ull, 2949076332913326472ull}}, {{134600308809282341ull, 7169456961185613008ull, 12121597679940175465ull, 3686345416141658090ull}}, {{168250386011602926ull, 13573507219909404164ull, 5928625063070443523ull, 4607931770177072613ull}}, {{9328528528112027637ull, 6177599003229683650ull, 6011233673632721154ull, 2879957356360670383ull}}, {{2437288623285258738ull, 16945370790891880371ull, 2902356073613513538ull, 3599946695450837979ull}}, {{16881668834388737135ull, 11958341451760074655ull, 17463003147299055635ull, 4499933369313547473ull}}, {{17468572049134042565ull, 5168120398136352707ull, 3996847939420827916ull, 2812458355820967171ull}}, {{17224029042990165303ull, 6460150497670440884ull, 384373905848646991ull, 3515572944776208964ull}}, {{3083292230028155012ull, 3463502103660663202ull, 480467382310808739ull, 4394466180970261205ull}}, {{6538743662194984787ull, 18305589879283772165ull, 2606135123157949413ull, 2746541363106413253ull}}, {{12785115596171118887ull, 9046929293822551494ull, 7869354922374824671ull, 3433176703883016566ull}}, {{6758022458359122801ull, 6696975598850801464ull, 613321616113755031ull, 4291470879853770708ull}}, {{4223764036474451751ull, 11103138776922832771ull, 9606698046925872702ull, 2682169299908606692ull}}, {{668019027165676785ull, 4655551434298765156ull, 12008372558657340878ull, 3352711624885758365ull}}, {{835023783957095981ull, 15042811329728232253ull, 1175407643039512385ull, 4190889531107197957ull}}, {{2827732874186878940ull, 2484228053439063302ull, 3040472786113389193ull, 2619305956941998723ull}}, {{12758038129588374483ull, 7716971085226217031ull, 17635649037923900203ull, 3274132446177498403ull}}, {{11335861643558080200ull, 5034527838105383385ull, 17432875278977487350ull, 4092665557721873004ull}}, {{167384499582718269ull, 16981637954098028328ull, 1672175012506153785ull, 2557915973576170628ull}}, {{209230624478397836ull, 7391989387340371698ull, 2090218765632692232ull, 3197394966970213285ull}}, {{9484910317452773103ull, 9239986734175464622ull, 7224459475468253194ull, 3996743708712766606ull}}, {{1316382929980595285ull, 10386677727287053293ull, 18350345227449821958ull, 2497964817945479128ull}}, {{6257164680903132011ull, 3759975122254040808ull, 4491187460602725832ull, 3122456022431848911ull}}, {{7821455851128915013ull, 4699968902817551010ull, 1002298307326019386ull, 3903070028039811139ull}}, {{9500095925382959787ull, 7549166582688357285ull, 16767337506574619780ull, 2439418767524881961ull}}, {{16486805925156087638ull, 9436458228360446606ull, 7124113827936111013ull, 3049273459406102452ull}}, {{11385135369590333740ull, 16407258803877946162ull, 8905142284920138766ull, 3811591824257628065ull}}, {{11727395624421346491ull, 5642850733996328447ull, 17094928974143556489ull, 2382244890161017540ull}}, {{10047558512099295210ull, 11665249435922798463ull, 2921917143969893995ull, 2977806112701271926ull}}, {{7947762121696731109ull, 9969875776476110175ull, 12875768466817143302ull, 3722257640876589907ull}}, {{11884880353701538799ull, 1619486341870180955ull, 5741512282547020612ull, 2326411025547868692ull}}, {{10244414423699535595ull, 2024357927337726194ull, 7176890353183775765ull, 2908013781934835865ull}}, {{3582145992769643685ull, 7142133427599545647ull, 13582798959907107610ull, 3635017227418544831ull}}, {{18312740546244218319ull, 18151038821354207866ull, 12366812681456496608ull, 4543771534273181039ull}}, {{16057148859830024353ull, 11344399263346379916ull, 14646786953551392236ull, 2839857208920738149ull}}, {{1624692001077978825ull, 14180499079182974896ull, 4473425636657076583ull, 3549821511150922687ull}}, {{2030865001347473532ull, 13113937830551330716ull, 980096027393957825ull, 4437276888938653359ull}}, {{10492662662696946765ull, 1278682116453499841ull, 7530089044762305497ull, 2773298055586658349ull}}, {{17727514346798571361ull, 6210038663994262705ull, 14024297324380269775ull, 3466622569483322936ull}}, {{8324334878216050489ull, 3150862311565440478ull, 17530371655475337219ull, 4333278211854153670ull}}, {{591023280457643652ull, 18110190009224257963ull, 6344796266244697857ull, 2708298882408846044ull}}, {{14573837155854218276ull, 8802679456248158741ull, 7930995332805872322ull, 3385373603011057555ull}}, {{4382238389535609133ull, 1779977283455422619ull, 5302058147579952499ull, 4231717003763821944ull}}, {{433055984246061757ull, 17253386866655496801ull, 3313786342237470311ull, 2644823127352388715ull}}, {{5153005998734965100ull, 16955047564891983097ull, 17977290983079001601ull, 3306028909190485893ull}}, {{11052943516846094278ull, 7358751400832815159ull, 8636555673566588290ull, 4132536136488107367ull}}, {{13825618725669890780ull, 9210905643947897378ull, 12315376323620199537ull, 2582835085305067104ull}}, {{8058651370232587667ull, 16125318073362259627ull, 15394220404525249421ull, 3228543856631333880ull}}, {{5461628194363346680ull, 6321589536420660822ull, 796031431947010161ull, 4035679820789167351ull}}, {{17248575676759255387ull, 15480208506331382773ull, 7415048672607963206ull, 2522299887993229594ull}}, {{7725661540666905522ull, 10126888596059452659ull, 45438803905178200ull, 3152874859991536993ull}}, {{5045390907406243998ull, 12658610745074315824ull, 4668484523308860654ull, 3941093574989421241ull}}, {{3153369317128902499ull, 3299945697244059486ull, 14447017873136507669ull, 2463183484368388275ull}}, {{13165083683265903932ull, 8736618139982462261ull, 13447086322993246682ull, 3078979355460485344ull}}, {{2621296548800216202ull, 1697400638123302019ull, 16808857903741558353ull, 3848724194325606680ull}}, {{17779211407495992791ull, 12590090444895533521ull, 10505536189838473970ull, 2405452621453504175ull}}, {{8388956204087827276ull, 6514241019264641094ull, 8520234218870704559ull, 3006815776816880219ull}}, {{1262823218255008287ull, 3531115255653413464ull, 6038606755160992795ull, 3758519721021100274ull}}, {{789264511409380180ull, 18347848099279241079ull, 8385815240403008400ull, 2349074825638187671ull}}, {{14821638694543888936ull, 4488066050389499732ull, 5870583032076372597ull, 2936343532047734589ull}}, {{80304294470309554ull, 10221768581414262570ull, 11949914808522853650ull, 3670429415059668236ull}}, {{9323752404942662751ull, 3553838689913052404ull, 14937393510653567063ull, 4588036768824585295ull}}, {{15050717289943940027ull, 9138678208836739608ull, 16253399971799561270ull, 2867522980515365809ull}}, {{366652538720373418ull, 2199975724191148703ull, 6481691909467287876ull, 3584403725644207262ull}}, {{14293373728682630485ull, 2749969655238935878ull, 17325486923688885653ull, 4480504657055259077ull}}, {{4321672561999256149ull, 4024574043738028876ull, 13134272336519247485ull, 2800315410659536923ull}}, {{5402090702499070186ull, 9642403573099923999ull, 11806154402221671452ull, 3500394263324421154ull}}, {{2140927359696449829ull, 12053004466374904999ull, 5534320965922313507ull, 4375492829155526443ull}}, {{8255608627451362999ull, 5227284782270621672ull, 1153107594487751990ull, 2734683018222204027ull}}, {{10319510784314203749ull, 15757478014693052898ull, 15276442548391853699ull, 3418353772777755033ull}}, {{3676016443537978878ull, 15085161499938928219ull, 5260495130207653412ull, 4272942215972193792ull}}, {{18438411341707094463ull, 204853900607054328ull, 3287809456379783383ull, 2670588884982621120ull}}, {{4601270103424316462ull, 14091125431040981623ull, 4109761820474729228ull, 3338236106228276400ull}}, {{1139901610853007674ull, 17613906788801227029ull, 5137202275593411535ull, 4172795132785345500ull}}, {{3018281515996823748ull, 17926220770641848749ull, 12434123459100658017ull, 2607996957990840937ull}}, {{8384537913423417589ull, 8572717908020147224ull, 1707596268593658810ull, 3259996197488551172ull}}, {{10480672391779271987ull, 1492525348170408222ull, 2134495335742073513ull, 4074995246860688965ull}}, {{1938734226434657088ull, 12462043388674974899ull, 3639902594052489897ull, 2546872029287930603ull}}, {{16258475838325485072ull, 1742496180561554911ull, 18384936297847776084ull, 3183590036609913253ull}}, {{15711408779479468435ull, 2178120225701943639ull, 9146112317027556393ull, 3979487545762391567ull}}, {{16737159514815749628ull, 12890540187132184534ull, 12633849225783304601ull, 2487179716101494729ull}}, {{11698077356664911227ull, 2278117178633066956ull, 1957253476946967040ull, 3108974645126868412ull}}, {{14622596695831139034ull, 2847646473291333695ull, 2446566846183708800ull, 3886218306408585515ull}}, {{16056651962535543752ull, 1779779045807083559ull, 17670005343360675664ull, 2428886441505365946ull}}, {{15459128934742041786ull, 2224723807258854449ull, 12864134642346068772ull, 3036108051881707433ull}}, {{5488853113145388521ull, 2780904759073568062ull, 2245110247650422253ull, 3795135064852134292ull}}, {{17265591250998031538ull, 4043908483634673990ull, 10626565941636289716ull, 2371959415532583932ull}}, {{12358617026892763614ull, 5054885604543342488ull, 13283207427045362145ull, 2964949269415729915ull}}, {{15448271283615954517ull, 10930293024106566014ull, 11992323265379314777ull, 3706186586769662394ull}}, {{5043483533832583670ull, 18360648186135073519ull, 12106888059289459639ull, 2316366616731038996ull}}, {{1692668398863341683ull, 18339124214241453995ull, 15133610074111824549ull, 2895458270913798745ull}}, {{15950893553861340815ull, 9088847212519653781ull, 5081954537357616975ull, 3619322838642248432ull}}, {{6103558887044512307ull, 6749372997222179323ull, 6352443171697021219ull, 4524153548302810540ull}}, {{1508881295189126240ull, 1912515114050168125ull, 13193649019165414070ull, 2827595967689256587ull}}, {{6497787637413795704ull, 11614015929417485964ull, 11880375255529379683ull, 3534494959611570734ull}}, {{8122234546767244630ull, 9905833893344469551ull, 5627097032556948796ull, 4418118699514463418ull}}, {{11993925619370609750ull, 15414518220195069277ull, 8128621663775480901ull, 2761324187196539636ull}}, {{1157348968931098475ull, 5433089719961672885ull, 10160777079719351127ull, 3451655233995674545ull}}, {{6058372229591260998ull, 2179676131524703202ull, 17312657368076576813ull, 4314569042494593181ull}}, {{8398168661921926028ull, 3668140591416633453ull, 13126253864261554460ull, 2696605651559120738ull}}, {{15109396845829795439ull, 4585175739270791816ull, 7184445293472167267ull, 3370757064448900923ull}}, {{440001983577692682ull, 1119783655661101867ull, 4368870598412821180ull, 4213446330561126154ull}}, {{16415902304231915591ull, 9923236821642964474ull, 7342230142435401141ull, 2633403956600703846ull}}, {{11296505843435118680ull, 17015732045481093497ull, 18401159714899027234ull, 3291754945750879807ull}}, {{285574249011734638ull, 12046293019996591064ull, 18389763625196396139ull, 4114693682188599759ull}}, {{178483905632334149ull, 5223090128284175463ull, 18411131293388829443ull, 2571683551367874849ull}}, {{14058162937322581398ull, 1917176641927831424ull, 9178856061453873092ull, 3214604439209843562ull}}, {{17572703671653226747ull, 2396470802409789280ull, 2250198039962565557ull, 4018255549012304453ull}}, {{10982939794783266717ull, 3803637260719812252ull, 3712216784190297425ull, 2511409718132690283ull}}, {{13728674743479083397ull, 9366232594327153219ull, 28584961810483877ull, 3139262147665862854ull}}, {{12549157410921466342ull, 16319476761336329428ull, 9259103239117880654ull, 3924077684582328567ull}}, {{17066595418680692272ull, 5587986957407817988ull, 12704468552089757265ull, 2452548552863955354ull}}, {{2886500199641313723ull, 11596669715187160390ull, 6657213653257420773ull, 3065685691079944193ull}}, {{12831497286406417962ull, 660779088701786775ull, 12933203084999163871ull, 3832107113849930241ull}}, {{14937214831645093083ull, 7330515958079698590ull, 1165722900483395563ull, 2395066946156206401ull}}, {{9448146502701590545ull, 4551458929172235334ull, 6068839644031632358ull, 2993833682695258001ull}}, {{2586811091522212373ull, 14912695698320069976ull, 12197735573466928351ull, 3742292103369072501ull}}, {{1616756932201382733ull, 16237963839091125591ull, 9929427742630524171ull, 2338932564605670313ull}}, {{15856004220533892129ull, 15685768780436519084ull, 17023470696715543118ull, 2923665705757087891ull}}, {{1373261201957813545ull, 10383838938690873048ull, 16667652352467040994ull, 3654582132196359864ull}}, {{1716576502447266931ull, 3756426636508815502ull, 2387821366874249627ull, 4568227665245449831ull}}, {{14907918369311705544ull, 41923638604315736ull, 8409917381937487873ull, 2855142290778406144ull}}, {{188153887930080314ull, 4664090566682782575ull, 10512396727421859841ull, 3568927863473007680ull}}, {{14070250415194764104ull, 10441799226780866122ull, 13140495909277324801ull, 4461159829341259600ull}}, {{13405592527924115469ull, 18055339562806511086ull, 8212809943298328000ull, 2788224893338287250ull}}, {{7533618623050368528ull, 4122430379798587242ull, 1042640392268134193ull, 3485281116672859063ull}}, {{193651241958184852ull, 9764723993175621957ull, 15138358545617331453ull, 4356601395841073828ull}}, {{2426875035437559485ull, 8408795504948457675ull, 238102054156056350ull, 2722875872400671143ull}}, {{16868651849579113068ull, 1287622344330796285ull, 14132685622977234150ull, 3403594840500838928ull}}, {{7250756756691727623ull, 10832899967268271165ull, 17665857028721542687ull, 4254493550626048660ull}}, {{6837565982146023717ull, 13688091507183751334ull, 1817788606096188371ull, 2659058469141280413ull}}, {{17770329514537305454ull, 12498428365552301263ull, 6883921776047623368ull, 3323823086426600516ull}}, {{17601225874744243913ull, 15623035456940376579ull, 8604902220059529210ull, 4154778858033250645ull}}, {{8694923162501458494ull, 14376083179015123266ull, 7683906896750899708ull, 2596736786270781653ull}}, {{1645281916272047309ull, 17970103973768904083ull, 14216569639366012539ull, 3245920982838477066ull}}, {{15891660450622222848ull, 17850943948783742199ull, 8547340012352739866ull, 4057401228548096333ull}}, {{16849816809279971136ull, 15768525986417226778ull, 7647930516934156368ull, 2535875767842560208ull}}, {{11838898974745188112ull, 1263913409311981857ull, 9559913146167695461ull, 3169844709803200260ull}}, {{963565663149321428ull, 6191577780067365226ull, 11949891432709619326ull, 3962305887254000325ull}}, {{5213914557895713797ull, 17704794167824266978ull, 9774525154657206030ull, 2476441179533750203ull}}, {{15740765234224418054ull, 12907620672925557914ull, 7606470424894119634ull, 3095551474417187754ull}}, {{10452584505925746759ull, 6911153804302171585ull, 284715994262873735ull, 3869439343021484693ull}}, {{18062080362272061485ull, 11237000155329939096ull, 2483790505627990036ull, 2418399589388427933ull}}, {{4130856379130525240ull, 14046250194162423871ull, 7716424150462375449ull, 3022999486735534916ull}}, {{551884455485768646ull, 3722754687420866127ull, 9645530188077969312ull, 3778749358419418645ull}}, {{7262456812319687260ull, 2326721679638041329ull, 8334299376762424772ull, 2361718349012136653ull}}, {{13689757033826996978ull, 2908402099547551661ull, 15029560239380418869ull, 2952147936265170816ull}}, {{3277138237001582511ull, 8247188642861827481ull, 340206225515971970ull, 3690184920331463521ull}}, {{13577426444194458830ull, 9766178920216030079ull, 11741843937015952241ull, 2306365575207164700ull}}, {{12360097036815685633ull, 16819409668697425503ull, 14677304921269940301ull, 2882956969008955875ull}}, {{10838435277592219137ull, 7189204030589618167ull, 13734945133160037473ull, 3603696211261194844ull}}, {{8936358078562886017ull, 13598191056664410613ull, 17168681416450046841ull, 4504620264076493555ull}}, {{7891066808315497713ull, 1581340382774174777ull, 8424582876067585324ull, 2815387665047808472ull}}, {{14475519528821760045ull, 1976675478467718471ull, 10530728595084481655ull, 3519234581309760590ull}}, {{13482713392599812152ull, 16305902403366811801ull, 3940038707000826260ull, 4399043226637200738ull}}, {{1509166842733800739ull, 967816965249481568ull, 7074210210302904317ull, 2749402016648250461ull}}, {{1886458553417250924ull, 5821457224989239864ull, 13454448781306018300ull, 3436752520810313076ull}}, {{2358073191771563655ull, 7276821531236549830ull, 16818060976632522875ull, 4295940651012891345ull}}, {{15308853800139390996ull, 2242170447809149691ull, 3593759082754244941ull, 2684962906883057091ull}}, {{14524381231746850841ull, 7414399078188825018ull, 18327256908724969888ull, 3356203633603821363ull}}, {{8932104502828787743ull, 9267998847736031273ull, 18297385117478824456ull, 4195254542004776704ull}}, {{17111780360336462100ull, 5792499279835019545ull, 11435865698424265285ull, 2622034088752985440ull}}, {{7554667395138413913ull, 11852310118221162336ull, 14294832123030331606ull, 3277542610941231800ull}}, {{9443334243923017391ull, 5592015610921677112ull, 17868540153787914508ull, 4096928263676539750ull}}, {{5902083902451885869ull, 12718381793680824003ull, 6556151577690058663ull, 2560580164797837344ull}}, {{2765918859637469433ull, 11286291223673642100ull, 8195189472112573329ull, 3200725205997296680ull}}, {{3457398574546836791ull, 272805974309888913ull, 10243986840140716662ull, 4000906507496620850ull}}, {{13690089155160242754ull, 14005561789225844282ull, 11014177793515335817ull, 2500566567185388031ull}}, {{7889239407095527635ull, 3671894181250141641ull, 9156036223466781868ull, 3125708208981735039ull}}, {{14473235277296797447ull, 4589867726562677051ull, 6833359260906089431ull, 3907135261227168799ull}}, {{6739929039096804453ull, 9786196356742755013ull, 11188378565707387750ull, 2441959538266980499ull}}, {{13036597317298393470ull, 3009373409073667958ull, 9373787188706846784ull, 3052449422833725624ull}}, {{7072374609768216029ull, 3761716761342084948ull, 11717233985883558480ull, 3815561778542157030ull}}, {{13643606167959910826ull, 2351072975838803092ull, 2711585222749836146ull, 2384726111588848144ull}}, {{17054507709949888533ull, 12162213256653279673ull, 3389481528437295182ull, 2980907639486060180ull}}, {{7483076582155196954ull, 5979394533961823784ull, 4236851910546618978ull, 3726134549357575225ull}}, {{4676922863846998096ull, 8348807602153527769ull, 14177247490160106621ull, 2328834093348484515ull}}, {{10457839598236135524ull, 15047695521119297615ull, 13109873344272745372ull, 2911042616685605644ull}}, {{8460613479367781501ull, 362875327689570403ull, 16387341680340931716ull, 3638803270857007055ull}}, {{5964080830782338973ull, 453594159611963004ull, 15872491081998776741ull, 4548504088571258819ull}}, {{12950922556093737666ull, 2589339358971170829ull, 7614463917035541511ull, 2842815055357036762ull}}, {{2353595139835008371ull, 17071732253996127249ull, 294707859439651080ull, 3553518819196295953ull}}, {{7553679943221148367ull, 2892921243785607445ull, 4980070842726951755ull, 4441898523995369941ull}}, {{7026892973726911682ull, 17948976841861862317ull, 5418387285918038798ull, 2776186577497106213ull}}, {{13395302235586027506ull, 13212849015472552088ull, 11384670125824936402ull, 3470233221871382766ull}}, {{16744127794482534382ull, 7292689232485914302ull, 5007465620426394695ull, 4337791527339228458ull}}, {{5853393853124196085ull, 11475459797944778295ull, 7741352031193884588ull, 2711119704587017786ull}}, {{2705056297977857202ull, 14344324747430972869ull, 453318002137579927ull, 3388899630733772233ull}}, {{7993006390899709407ull, 13318719915861328182ull, 5178333521099362813ull, 4236124538417215291ull}}, {{383942975884930475ull, 10630042956627024066ull, 930615441473407806ull, 2647577836510759557ull}}, {{9703300756710938902ull, 4064181658929004274ull, 5774955320269147662ull, 3309472295638449446ull}}, {{2905753909033897819ull, 14303599110516031151ull, 16442066187191210385ull, 4136840369548061807ull}}, {{8733625220787267993ull, 2022220416431437613ull, 17193820394635588347ull, 2585525230967538629ull}}, {{15528717544411472896ull, 16362833575821460728ull, 7657217438012321721ull, 3231906538709423287ull}}, {{964152856804789503ull, 6618483914494662199ull, 4959835779088014248ull, 4039883173386779109ull}}, {{7520124563144075296ull, 4136552446559163874ull, 5405740371143702857ull, 2524926983366736943ull}}, {{176783667075318312ull, 9782376576626342747ull, 2145489445502240667ull, 3156158729208421179ull}}, {{14056037639126311601ull, 7616284702355540529ull, 16516919862159964546ull, 3945198411510526473ull}}, {{1867494496812862895ull, 9371863957399600735ull, 3405545886208895985ull, 2465749007194079046ull}}, {{16169426176298242331ull, 16326515965176888822ull, 13480304394615895789ull, 3082186258992598807ull}}, {{10988410683518027105ull, 6573086901188947316ull, 12238694474842481833ull, 3852732823740748509ull}}, {{16091128714053542749ull, 15637394359311561832ull, 9955027055990245097ull, 2407958014837967818ull}}, {{1667166818857376820ull, 5711684893857288579ull, 3220411783133030564ull, 3009947518547459773ull}}, {{15919016578853884737ull, 7139606117321610723ull, 8637200747343676109ull, 3762434398184324716ull}}, {{7643542352569984009ull, 6768096832539700654ull, 14621622503944573376ull, 2351521498865202947ull}}, {{331055903857704203ull, 8460121040674625818ull, 13665342111503328816ull, 2939401873581503684ull}}, {{9637191916676906061ull, 10575151300843282272ull, 17081677639379161020ull, 3674252341976879605ull}}, {{12046489895846132577ull, 13218939126054102840ull, 7517038993941787563ull, 4592815427471099507ull}}, {{7529056184903832861ull, 5955993944570120323ull, 2392306361999923275ull, 2870509642169437192ull}}, {{4799634212702403172ull, 2833306412285262500ull, 2990382952499904094ull, 3588137052711796490ull}}, {{5999542765878003964ull, 12765005052211353933ull, 12961350727479655925ull, 4485171315889745612ull}}, {{6055557237887446430ull, 10283971166845790160ull, 17324216241529560761ull, 2803232072431091007ull}}, {{7569446547359308037ull, 17466649976984625604ull, 17043584283484563047ull, 3504040090538863759ull}}, {{9461808184199135046ull, 17221626452803394101ull, 16692794335928315905ull, 4380050113173579699ull}}, {{8219473124338153356ull, 3845987505361039457ull, 8127153450741503489ull, 2737531320733487312ull}}, {{14886027423850079599ull, 9419170400128687225ull, 10158941813426879361ull, 3421914150916859140ull}}, {{4772476224530435787ull, 16385649018588246936ull, 12698677266783599201ull, 4277392688646073925ull}}, {{2982797640331522367ull, 3323501608976572479ull, 10242516300953443453ull, 2673370430403796203ull}}, {{17563555105696566671ull, 8766063029648103502ull, 8191459357764416412ull, 3341713038004745254ull}}, {{12731071845265932530ull, 10957578787060129378ull, 1015952160350744707ull, 4177141297505931568ull}}, {{12568605921718595735ull, 4542643732698886909ull, 634970100219215442ull, 2610713310941207230ull}}, {{1875699346866080957ull, 14901676702728384445ull, 10017084662128795110ull, 3263391638676509037ull}}, {{6956310202009989100ull, 9403723841555704748ull, 17133041846088381792ull, 4079239548345636296ull}}, {{13571065913111018996ull, 5877327400972315467ull, 10708151153805238620ull, 2549524717716022685ull}}, {{12352146372961385841ull, 7346659251215394334ull, 17996874960683936179ull, 3186905897145028356ull}}, {{6216810929346956493ull, 4571638045591855014ull, 4049349627145368608ull, 3983632371431285446ull}}, {{17720564886124011520ull, 2857273778494909383ull, 16365901572248019092ull, 2489770232144553403ull}}, {{17539020089227626496ull, 3571592223118636729ull, 15845690946882635961ull, 3112212790180691754ull}}, {{8088717056252369408ull, 9076176297325683816ull, 10583741646748519143ull, 3890265987725864693ull}}, {{5055448160157730880ull, 12590139213469634241ull, 8920681538431518416ull, 2431416242328665433ull}}, {{10930996218624551504ull, 15737674016837042801ull, 15762537941466785924ull, 3039270302910831791ull}}, {{18275431291708077284ull, 1225348447336751885ull, 15091486408406094502ull, 3799087878638539739ull}}, {{13727987566531242255ull, 14600900834867633640ull, 7126335996040115111ull, 2374429924149087337ull}}, {{17159984458164052818ull, 13639440025157154146ull, 13519606013477531793ull, 2968037405186359171ull}}, {{12226608535850290215ull, 3214241976164278971ull, 12287821498419526838ull, 3710046756482948964ull}}, {{5335787325692737432ull, 15843959290384838069ull, 16903260473366980081ull, 2318779222801843102ull}}, {{11281420175543309694ull, 5969891057698883874ull, 11905703554853949294ull, 2898474028502303878ull}}, {{4878403182574361310ull, 16685735858978380651ull, 5658757406712660809ull, 3623092535627879848ull}}, {{1486317959790563733ull, 7022111768440812102ull, 7073446758390826012ull, 4528865669534849810ull}}, {{14764006780151266045ull, 13612191892130283371ull, 9032590242421654161ull, 2830541043459281131ull}}, {{13843322456761694653ull, 3180181809880690502ull, 6679051784599679798ull, 3538176304324101414ull}}, {{8080781034097342508ull, 13198599299205638936ull, 17572186767604375555ull, 4422720380405126767ull}}, {{5050488146310839068ull, 5943281552789830383ull, 17900145757393816578ull, 2764200237753204229ull}}, {{1701424164461160930ull, 16652473977842063787ull, 8540124141460107010ull, 3455250297191505287ull}}, {{15961838260858614875ull, 11592220435447803925ull, 6063469158397745859ull, 4319062871489381609ull}}, {{12281991922250328249ull, 4939294762941183501ull, 15318883270067060922ull, 2699414294680863505ull}}, {{1517431847530746599ull, 15397490490531255185ull, 5313546032301662440ull, 3374267868351079382ull}}, {{6508475827840821153ull, 800119039454517365ull, 15865304577231853859ull, 4217834835438849227ull}}, {{6373640401614207173ull, 16640975464154931017ull, 7609972351556214709ull, 2636146772149280767ull}}, {{12578736520445146870ull, 6966161274911500059ull, 4900779421017880483ull, 3295183465186600959ull}}, {{11111734632129045683ull, 4096015575211987170ull, 1514288257844962700ull, 4118979331483251199ull}}, {{11556520163508041456ull, 11783381771362267789ull, 7863959188794183543ull, 2574362082177031999ull}}, {{610592149102888108ull, 10117541195775446833ull, 5218262967565341525ull, 3217952602721289999ull}}, {{5374926204805998039ull, 17258612513146696445ull, 1911142691029289002ull, 4022440753401612499ull}}, {{5665171887217442726ull, 15398318839144073182ull, 17335365246389163290ull, 2514025470876007811ull}}, {{16304836895876579216ull, 10024526512075315669ull, 17057520539559066209ull, 3142531838595009764ull}}, {{6545988064563560308ull, 17142344158521532491ull, 2875156600739281145ull, 3928164798243762206ull}}, {{1785399531138531240ull, 3796436071434875951ull, 15632030930744214428ull, 2455102998902351378ull}}, {{16066807469205327762ull, 4745545089293594938ull, 10316666626575492227ull, 3068878748627939223ull}}, {{10860137299651883895ull, 1320245343189605769ull, 8284147264791977380ull, 3836098435784924029ull}}, {{18316800858350897195ull, 10048525376348279413ull, 7483435049708679814ull, 2397561522365577518ull}}, {{9060943017656457781ull, 3337284683580573459ull, 130921775281073960ull, 2996951902956971898ull}}, {{6714492753643184322ull, 4171605854475716824ull, 9387024255956118258ull, 3746189878696214872ull}}, {{4196557971026990202ull, 7218939677474710919ull, 5866890159972573911ull, 2341368674185134295ull}}, {{634011445356349848ull, 4411988578416000745ull, 2721926681538329485ull, 2926710842731417869ull}}, {{5404200325122825214ull, 10126671741447388835ull, 8014094370350299760ull, 3658388553414272336ull}}, {{2143564387976143613ull, 12658339676809236044ull, 10017617962937874700ull, 4572985691767840420ull}}, {{10563099779339865566ull, 17134834334860548335ull, 15484383263690947495ull, 2858116057354900262ull}}, {{8592188705747444054ull, 16806856900148297515ull, 10132107042758908561ull, 3572645071693625328ull}}, {{6128549863756917163ull, 7173513069903208182ull, 12665133803448635702ull, 4465806339617031660ull}}, {{17665401720130236939ull, 18318503723971668825ull, 17139080664010173121ull, 2791128962260644787ull}}, {{8246694094880632462ull, 9063071599682422320ull, 16812164811585328498ull, 3488911202825805984ull}}, {{10308367618600790577ull, 2105467462748252092ull, 2568461940772109007ull, 4361139003532257481ull}}, {{15666101798480269919ull, 8233446191858739413ull, 13134503759051037889ull, 2725711877207660925ull}}, {{5747569192818173686ull, 14903493758250812171ull, 2583071643531633649ull, 3407139846509576157ull}}, {{2572775472595329204ull, 4794309142531351502ull, 7840525572841929966ull, 4258924808136970196ull}}, {{15443042725654244465ull, 16831501269364258400ull, 14123700519880982036ull, 2661828005085606372ull}}, {{857059333358253965ull, 2592632512995771385ull, 17654625649851227546ull, 3327285006357007965ull}}, {{5683010185125205360ull, 12464162678099490039ull, 8233224007031870720ull, 4159106257946259957ull}}, {{10469410393344335206ull, 7790101673812181274ull, 7451608013608613152ull, 2599441411216412473ull}}, {{3863390954825643199ull, 9737627092265226593ull, 13926196035438154344ull, 3249301764020515591ull}}, {{9440924711959441903ull, 12172033865331533241ull, 12796059025870305026ull, 4061627205025644489ull}}, {{17429792991043120950ull, 12219207184259596179ull, 1080007863527858785ull, 2538517003141027806ull}}, {{17175555220376513283ull, 1438950925042331512ull, 10573381866264599290ull, 3173146253926284757ull}}, {{3022699951761089987ull, 11022060693157690199ull, 17828413351258137016ull, 3966432817407855946ull}}, {{8806716497491763098ull, 6888787933223556374ull, 15754444362963723539ull, 2479020510879909966ull}}, {{1785023585009928065ull, 3999298898102057564ull, 10469683416849878616ull, 3098775638599887458ull}}, {{2231279481262410081ull, 4999123622627571955ull, 3863732234207572462ull, 3873469548249859323ull}}, {{17535450740284863965ull, 16959510319424396183ull, 108989637166038836ull, 2420918467656162077ull}}, {{17307627406928692052ull, 2752643825570943613ull, 4747923064884936450ull, 3026148084570202596ull}}, {{7799476203378701353ull, 12664176818818455325ull, 5934903831106170562ull, 3782685105712753245ull}}, {{7180515636325382298ull, 12526796530188922482ull, 6015157903655050553ull, 2364178191070470778ull}}, {{18199016582261503680ull, 1823437607453989390ull, 16742319416423589000ull, 2955222738838088472ull}}, {{13525398690972103792ull, 2279297009317486738ull, 2481155196819934634ull, 3694028423547610591ull}}, {{13065060200284952774ull, 6036246649250817115ull, 8468251025653541002ull, 2308767764717256619ull}}, {{11719639231928803063ull, 16768680348418297202ull, 5973627763639538348ull, 2885959705896570774ull}}, {{5426177003056228021ull, 2514106361813319887ull, 16690406741404198744ull, 3607449632370713467ull}}, {{2171035235392897122ull, 3142632952266649859ull, 16251322408327860526ull, 4509312040463391834ull}}, {{17497798086616418366ull, 15799203650448819873ull, 14768762523632300732ull, 2818320025289619896ull}}, {{8037189552988359245ull, 1302260489351473226ull, 14209080830824300ull, 3522900031612024871ull}}, {{823114904380673248ull, 1627825611689341533ull, 13852819406320694087ull, 4403625039515031088ull}}, {{2820289824451614732ull, 7934920034946920314ull, 8658012128950433804ull, 2752265649696894430ull}}, {{12748734317419294223ull, 9918650043683650392ull, 1599143124333266447ull, 3440332062121118038ull}}, {{15935917896774117779ull, 7786626536177175086ull, 11222300942271358867ull, 4300415077651397547ull}}, {{5348262667056435708ull, 2560798575897040477ull, 4708095079705905340ull, 2687759423532123467ull}}, {{11297014352247932539ull, 3200998219871300596ull, 1273432831204993771ull, 3359699279415154334ull}}, {{14121267940309915673ull, 17836305830121289457ull, 10815163075861018021ull, 4199624099268942917ull}}, {{1908263435052615440ull, 13453534153039499863ull, 9065319931626830215ull, 2624765062043089323ull}}, {{16220387349097933012ull, 12205231672871986924ull, 6719963896106149865ull, 3280956327553861654ull}}, {{1828740112662864649ull, 1421481535807819944ull, 17623326906987463140ull, 4101195409442327067ull}}, {{1142962570414290406ull, 10111797996734663273ull, 8708736307653470510ull, 2563247130901454417ull}}, {{6040389231445250911ull, 3416375459063553283ull, 15497606402994226042ull, 3204058913626818021ull}}, {{2938800520879175735ull, 13493841360684217412ull, 5536949948460618840ull, 4005073642033522527ull}}, {{11060122362404260642ull, 8433650850427635882ull, 10378122745428968631ull, 2503171026270951579ull}}, {{4601780916150549995ull, 5930377544607156949ull, 8360967413358822885ull, 3128963782838689474ull}}, {{10363912163615575397ull, 12024657949186334090ull, 1227837229843752798ull, 3911204728548361843ull}}, {{11089131120687122527ull, 2903725199814070902ull, 16908299333148203163ull, 2444502955342726151ull}}, {{4638041864004127351ull, 17464714555049752340ull, 16523688148007866049ull, 3055628694178407689ull}}, {{5797552330005159189ull, 7995835138530026713ull, 6819552129727668850ull, 3819535867723009612ull}}, {{15152685252321694253ull, 9609082980008654599ull, 13485592117934568839ull, 2387209917326881007ull}}, {{14329170546974729912ull, 7399667706583430345ull, 12245304128990823145ull, 2984012396658601259ull}}, {{4076405128436248678ull, 13861270651656675836ull, 10694944142811141027ull, 3730015495823251574ull}}, {{11771125242127431232ull, 6357451148071728445ull, 2072654070829575238ull, 2331259684889532234ull}}, {{878848497377125328ull, 17170185971944436365ull, 11814189625391744855ull, 2914074606111915292ull}}, {{5710246640148794564ull, 16851046446503157552ull, 14767737031739681069ull, 3642593257639894115ull}}, {{7137808300185993205ull, 7228750002846783228ull, 13847985271247213433ull, 4553241572049867644ull}}, {{13684502224471021561ull, 16047183797847709277ull, 17878362831384284203ull, 2845775982531167277ull}}, {{3270569725306613239ull, 15447293728882248693ull, 8512895483948191542ull, 3557219978163959097ull}}, {{8699898175060654453ull, 10085745124248035058ull, 15252805373362627332ull, 4446524972704948871ull}}, {{10049122377840296937ull, 15526962739509797719ull, 16450532385992723938ull, 2779078107940593044ull}}, {{7949716953872983268ull, 10185331387532471341ull, 2116421408781353307ull, 3473847634925741306ull}}, {{14548832210768616988ull, 8119978215988201272ull, 11868898797831467442ull, 4342309543657176632ull}}, {{9093020131730385618ull, 9686672403420013699ull, 7418061748644667151ull, 2713943464785735395ull}}, {{6754589146235594118ull, 7496654485847629220ull, 4660891167378446035ull, 3392429330982169244ull}}, {{8443236432794492648ull, 4759132088882148621ull, 5826113959223057544ull, 4240536663727711555ull}}, {{7582865779710251857ull, 2974457555551342888ull, 1335478215300717013ull, 2650335414829819722ull}}, {{9478582224637814821ull, 8329757962866566514ull, 10892719805980672074ull, 3312919268537274652ull}}, {{2624855743942492718ull, 1188825416728432335ull, 13615899757475840093ull, 4141149085671593315ull}}, {{8558063867605139805ull, 3048858894668964161ull, 6204094339208706106ull, 2588218178544745822ull}}, {{15309265852933812660ull, 13034445655190981009ull, 16978489960865658440ull, 3235272723180932277ull}}, {{5301524260885102113ull, 16293057068988726262ull, 7388054395799909338ull, 4044090903976165347ull}}, {{17148510718335352533ull, 14794846686545341817ull, 2311690988161249384ull, 2527556814985103342ull}}, {{7600580342637026954ull, 46814284472125656ull, 12112985772056337539ull, 3159446018731379177ull}}, {{9500725428296283693ull, 13893575910872320782ull, 1306174159788258211ull, 3949307523414223972ull}}, {{1326267374257789404ull, 6377641935081506537ull, 10039730886722437190ull, 2468317202133889982ull}}, {{6269520236249624659ull, 17195424455706658979ull, 3326291571548270679ull, 3085396502667362478ull}}, {{3225214276884642919ull, 16882594551205935820ull, 13381236501290114157ull, 3856745628334203097ull}}, {{11239130959907677633ull, 12857464603717403839ull, 1445743785665239492ull, 2410466017708876936ull}}, {{9437227681457209137ull, 16071830754646754799ull, 1807179732081549365ull, 3013082522136096170ull}}, {{7184848583394123517ull, 6254730388026279787ull, 11482346701956712515ull, 3766353152670120212ull}}, {{2184687355407633246ull, 1603363483302730915ull, 16399838725577721130ull, 2353970720418825132ull}}, {{16565917249541705270ull, 11227576390983189451ull, 2053054333262599796ull, 2942463400523531416ull}}, {{16095710543499743683ull, 14034470488728986814ull, 2566317916578249745ull, 3678079250654414270ull}}, {{10896266142519903796ull, 3708030055629069806ull, 12431269432577587990ull, 4597599063318017837ull}}, {{2198480320647551969ull, 16152576840050332341ull, 10075386404574686445ull, 2873499414573761148ull}}, {{7359786419236827865ull, 6355662994780751714ull, 12594233005718358057ull, 3591874268217201435ull}}, {{18423105060900810639ull, 12556264761903327546ull, 11131105238720559667ull, 4489842835271501794ull}}, {{16126126681490394553ull, 5541822466975885764ull, 11568626792627737696ull, 2806151772044688621ull}}, {{1710914278153441576ull, 6927278083719857206ull, 625725435502508408ull, 3507689715055860777ull}}, {{11362014884546577777ull, 8659097604649821507ull, 5393842812805523414ull, 4384612143819825971ull}}, {{4795416293627917159ull, 800249984478750538ull, 1065308748789758182ull, 2740382589887391232ull}}, {{15217642403889672257ull, 10223684517453213980ull, 1331635935987197727ull, 3425478237359239040ull}}, {{575308931152538705ull, 8167919628389129572ull, 1664544919983997159ull, 4281847796699048800ull}}, {{9582940118825112499ull, 12022478795384287838ull, 1040340574989998224ull, 2676154872936905500ull}}, {{2755303111676614815ull, 15028098494230359798ull, 1300425718737497780ull, 3345193591171131875ull}}, {{12667500926450544327ull, 338379044078398131ull, 15460590203704035938ull, 4181491988963914843ull}}, {{5611345069817896252ull, 4823172920976386736ull, 7357025868101328509ull, 2613432493102446777ull}}, {{7014181337272370315ull, 10640652169647871324ull, 13807968353554048540ull, 3266790616378058471ull}}, {{8767726671590462894ull, 13300815212059839155ull, 12648274423515172771ull, 4083488270472573089ull}}, {{3173986160530345357ull, 6007166498323705520ull, 987642487055901126ull, 2552180169045358181ull}}, {{3967482700662931696ull, 16732330159759407708ull, 5846239127247264311ull, 3190225211306697726ull}}, {{4959353375828664620ull, 16303726681271871731ull, 16531170945913856197ull, 3987781514133372157ull}}, {{793752850679221436ull, 12495672185008613784ull, 12637824850409854075ull, 2492363446333357598ull}}, {{992191063349026795ull, 11007904212833379326ull, 6573909026157541786ull, 3115454307916696998ull}}, {{10463610866041059301ull, 4536508229186948349ull, 17440758319551703041ull, 3894317884895871247ull}}, {{8845599800489356015ull, 14364532689310312478ull, 17818002977360896256ull, 2433948678059919529ull}}, {{1833627713756919211ull, 17955665861637890598ull, 8437445666418956608ull, 3042435847574899412ull}}, {{11515406679050924822ull, 3997838253337811631ull, 10546807083023695761ull, 3803044809468624265ull}}, {{14114658202047909870ull, 14027863954404602029ull, 18120969472958279610ull, 2376903005917890165ull}}, {{3808264697277723625ull, 8311457906150976729ull, 8816153785915685801ull, 2971128757397362707ull}}, {{9372016890024542435ull, 15001008401116108815ull, 6408506213967219347ull, 3713910946746703384ull}}, {{12775039583906420878ull, 7069787241483874057ull, 4005316383729512092ull, 2321194341716689615ull}}, {{2133741424600862386ull, 8837234051854842572ull, 394959461234502211ull, 2901492927145862019ull}}, {{2667176780751077982ull, 6434856546391165311ull, 14328757381825291476ull, 3626866158932327523ull}}, {{17169029031221011189ull, 8043570682988956638ull, 13299260708854226441ull, 4533582698665409404ull}}, {{6118957126085744089ull, 16556446722936567659ull, 17535409979888667333ull, 2833489186665880877ull}}, {{3037010389179792208ull, 6860500348388545862ull, 8084204419578670455ull, 3541861483332351097ull}}, {{13019635023329516067ull, 3963939417058294423ull, 14716941542900725973ull, 4427326854165438871ull}}, {{15054800917222029398ull, 4783305144875127966ull, 16115617491954035589ull, 2767079283853399294ull}}, {{9595129109672760940ull, 10590817449521297862ull, 10921149828087768678ull, 3458849104816749118ull}}, {{2770539350236175367ull, 4015149775046846520ull, 4428065248254935040ull, 4323561381020936398ull}}, {{1731587093897609604ull, 2509468609404279075ull, 16602598835441498112ull, 2702225863138085248ull}}, {{15999541922654175717ull, 3136835761755348843ull, 2306504470592321024ull, 3377782328922606561ull}}, {{15387741384890331743ull, 3921044702194186054ull, 7494816606667789184ull, 4222227911153258201ull}}, {{5005652347129069435ull, 2450652938871366284ull, 16213475425235838000ull, 2638892444470786375ull}}, {{6257065433911336794ull, 3063316173589207855ull, 15655158263117409596ull, 3298615555588482969ull}}, {{3209645773961783088ull, 3829145216986509819ull, 5733889773614598283ull, 4123269444485603712ull}}, {{18146929673221972094ull, 87372751402874684ull, 3583681108509123927ull, 2577043402803502320ull}}, {{4236918017817913502ull, 13944273994535757068ull, 4479601385636404908ull, 3221304253504377900ull}}, {{5296147522272391877ull, 17430342493169696335ull, 5599501732045506135ull, 4026630316880472375ull}}, {{10227621229061326779ull, 17811493085872142065ull, 10417217610169523190ull, 2516643948050295234ull}}, {{17396212554754046378ull, 13040994320485401773ull, 3798149975857128180ull, 3145804935062869043ull}}, {{7910207638160394261ull, 16301242900606752217ull, 136001451394022321ull, 3932256168828586304ull}}, {{16473094819918716173ull, 3270747785238138279ull, 85000907121263951ull, 2457660105517866440ull}}, {{15979682506471007312ull, 17923492786829836561ull, 106251133901579938ull, 3072075131897333050ull}}, {{6139545077806595428ull, 13180993946682519894ull, 9356185954231750731ull, 3840093914871666312ull}}, {{17672273728911285855ull, 5932278207462880981ull, 5847616221394844207ull, 2400058696794791445ull}}, {{8255284105856943606ull, 2803661740901213323ull, 11921206295170943163ull, 3000073370993489306ull}}, {{5707419113893791604ull, 17339635231408680366ull, 5678135832108903145ull, 3750091713741861633ull}}, {{17402195001465783465ull, 3919742991989343372ull, 15078049941136534226ull, 2343807321088663520ull}}, {{3305999678122677715ull, 14123050776841455024ull, 400818352711116166ull, 2929759151360829401ull}}, {{4132499597653347143ull, 8430441434197042972ull, 5112708959316283112ull, 3662198939201036751ull}}, {{5165624497066683929ull, 10538051792746303715ull, 1779200180717965986ull, 4577748674001295939ull}}, {{922672301452983504ull, 11197968388893827726ull, 17252901177444586405ull, 2861092921250809961ull}}, {{10376712413671005187ull, 162402430835120945ull, 7731068416523569295ull, 3576366151563512452ull}}, {{17582576535516144388ull, 14038061093826064893ull, 9663835520654461618ull, 4470457689454390565ull}}, {{13294953343911284195ull, 13385474202068678462ull, 8345740209622732463ull, 2794036055908994103ull}}, {{7395319643034329435ull, 12120156734158460174ull, 5820489243601027675ull, 3492545069886242629ull}}, {{20777516938135986ull, 10538509899270687314ull, 11887297572928672498ull, 4365681337357803286ull}}, {{4624671966513722895ull, 11198254705471567475ull, 2817874964653032407ull, 2728550835848627054ull}}, {{1169153939714765715ull, 9386132363412071440ull, 12745715742671066317ull, 3410688544810783817ull}}, {{1461442424643457144ull, 16344351472692477204ull, 2097086623056669184ull, 4263360681013479772ull}}, {{10136773552256936523ull, 10215219670432798252ull, 10534051176265194048ull, 2664600425633424857ull}}, {{12670966940321170654ull, 12769024588040997815ull, 17779249988758880464ull, 3330750532041781071ull}}, {{11227022656974075413ull, 15961280735051247269ull, 17612376467521212676ull, 4163438165052226339ull}}, {{9322732169822491085ull, 752428422552253735ull, 8701892282987063971ull, 2602148853157641462ull}}, {{7041729193850725953ull, 14775593583472480881ull, 1653993316879054155ull, 3252686066447051828ull}}, {{13413847510740795345ull, 13857805960913213197ull, 2067491646098817694ull, 4065857583058814785ull}}, {{10689497703426691043ull, 4049442707143370344ull, 12821397324880230819ull, 2541160989411759240ull}}, {{13361872129283363803ull, 450117365501825026ull, 16026746656100288524ull, 3176451236764699050ull}}, {{7478968124749428946ull, 562646706877281283ull, 10810061283270584847ull, 3970564045955873813ull}}, {{2368512068754699139ull, 7269183219439382658ull, 9062131311257809481ull, 2481602528722421133ull}}, {{12184012122798149732ull, 13698165042726616226ull, 15939350157499649755ull, 3102003160903026416ull}}, {{6006643116642911357ull, 12511020284980882379ull, 1477443623165010578ull, 3877503951128783021ull}}, {{1448308938688125646ull, 12431073696540439391ull, 3229245273691825563ull, 2423439969455489388ull}}, {{15645444228642320770ull, 10927156102248161334ull, 4036556592114781954ull, 3029299961819361735ull}}, {{10333433248948125154ull, 4435573090955425860ull, 434009721716089539ull, 3786624952274202169ull}}, {{15681767817447354029ull, 466390172633447210ull, 11800471122141025722ull, 2366640595171376355ull}}, {{10378837734954416729ull, 9806359752646584821ull, 10138902884248894248ull, 2958300743964220444ull}}, {{17585233187120408815ull, 12257949690808231026ull, 12673628605311117810ull, 3697875929955275555ull}}, {{15602456760377643413ull, 12272904575182532295ull, 5615174869105754679ull, 2311172456222047222ull}}, {{14891384932044666363ull, 10729444700550777465ull, 16242340623236969157ull, 2888965570277559027ull}}, {{4779173109773669241ull, 18023491894115859736ull, 15691239760618823542ull, 3611206962846948784ull}}, {{5973966387217086551ull, 13305992830790048862ull, 1167305627063977812ull, 4514008703558685981ull}}, {{17568787047292842807ull, 17539617556098556346ull, 3035409026128680084ull, 2821255439724178738ull}}, {{12737611772261277700ull, 3477777871413643817ull, 13017633319515625914ull, 3526569299655223422ull}}, {{2086956660044433413ull, 13570594376121830580ull, 7048669612539756584ull, 4408211624569029278ull}}, {{10527719949382546691ull, 8481621485076144112ull, 18240476563119511577ull, 2755132265355643298ull}}, {{13159649936728183364ull, 15213712874772568044ull, 13577223667044613663ull, 3443915331694554123ull}}, {{16449562420910229205ull, 14405455075038322151ull, 12359843565378379175ull, 4304894164618192654ull}}, {{17198505540709975109ull, 15920938449540033200ull, 3113216209934099080ull, 2690558852886370409ull}}, {{3051387852177917271ull, 1454428988215489885ull, 8503206280845011755ull, 3363198566107963011ull}}, {{8425920833649784492ull, 15653094290551526068ull, 6017321832628876789ull, 4203998207634953764ull}}, {{14489572557885891116ull, 12089026940808397744ull, 12984198182247823801ull, 2627498879771846102ull}}, {{18111965697357363895ull, 1276225620728333468ull, 7006875690955003944ull, 3284373599714807628ull}}, {{4193213047987153252ull, 1595282025910416836ull, 8758594613693754930ull, 4105466999643509535ull}}, {{11844130191846746591ull, 5608737284621398426ull, 12391650661199678687ull, 2565916874777193459ull}}, {{5581790702953657430ull, 2399235587349360129ull, 10877877308072210455ull, 3207396093471491824ull}}, {{11588924397119459692ull, 16834102539468863873ull, 13597346635090263068ull, 4009245116839364780ull}}, {{325548720558580452ull, 1297942050313264113ull, 17721713683786190226ull, 2505778198024602987ull}}, {{5018621919125613468ull, 10845799599746355949ull, 17540456086305349878ull, 3132222747530753734ull}}, {{10884963417334404739ull, 4333877462828169128ull, 12702198071026911540ull, 3915278434413442168ull}}, {{6803102135834002962ull, 11932045451122381513ull, 7938873794391819712ull, 2447049021508401355ull}}, {{13115563688219891607ull, 14915056813902976891ull, 5311906224562386736ull, 3058811276885501694ull}}, {{11782768591847476604ull, 197076943669169498ull, 15863254817557759229ull, 3823514096106877117ull}}, {{11975916388332060782ull, 2429016099006924888ull, 12220377270187293470ull, 2389696310066798198ull}}, {{14969895485415075977ull, 12259642160613431918ull, 6052099550879341029ull, 2987120387583497748ull}}, {{9488997319914069163ull, 1489494645484626186ull, 7565124438599176287ull, 3733900484479372185ull}}, {{10542309343373681131ull, 7848463181068973222ull, 16257417820192954939ull, 2333687802799607615ull}}, {{3954514642362325606ull, 5198892957908828624ull, 15710086256813805770ull, 2917109753499509519ull}}, {{4943143302952907007ull, 15721988234240811588ull, 15025921802589869308ull, 3646387191874386899ull}}, {{6178929128691133759ull, 1205741219091462869ull, 14170716234809948732ull, 4557983989842983624ull}}, {{6167673714645652552ull, 9976960298786940101ull, 8856697646756217957ull, 2848739993651864765ull}}, {{12321278161734453593ull, 17082886391911063030ull, 15682558076872660350ull, 3560924992064830956ull}}, {{6178225665313291183ull, 12130235953034052980ull, 1156453522381273822ull, 4451156240081038696ull}}, {{13084763077675582798ull, 2969711452218895208ull, 722783451488296139ull, 2781972650050649185ull}}, {{16355953847094478497ull, 17547197370555782722ull, 5515165332787758077ull, 3477465812563311481ull}}, {{11221570272013322313ull, 8098938657912564691ull, 11505642684412085501ull, 4346832265704139351ull}}, {{4707638410794632494ull, 7367679670409046884ull, 14108555705398635294ull, 2716770166065087094ull}}, {{5884548013493290617ull, 18432971624866084413ull, 8412322594893518309ull, 3395962707581358868ull}}, {{11967371035294001176ull, 9206156475800441804ull, 10515403243616897887ull, 4244953384476698585ull}}, {{16702978933913526543ull, 12671376825016357983ull, 18101342073329030939ull, 2653095865297936615ull}}, {{16267037648964520275ull, 11227535012843059575ull, 18014991573233900770ull, 3316369831622420769ull}}, {{15722111042778262439ull, 4811046729199048661ull, 8683681411260212251ull, 4145462289528025962ull}}, {{12132162410950107977ull, 701061196535711461ull, 10038986900465020561ull, 2590913930955016226ull}}, {{1330144958405471259ull, 5488012514097027231ull, 3325361588726499893ull, 3238642413693770283ull}}, {{15497739253289002785ull, 11471701661048671942ull, 17991760041190288578ull, 4048303017117212853ull}}, {{5074401014878238837ull, 11781499556582807868ull, 13550693034957624313ull, 2530189385698258033ull}}, {{6343001268597798546ull, 891816390446346123ull, 3103308238414866680ull, 3162736732122822542ull}}, {{3317065567319860278ull, 1114770488057932654ull, 13102507334873359158ull, 3953420915153528177ull}}, {{15908224034857076386ull, 14531789610318371620ull, 1271538056654767617ull, 2470888071970955111ull}}, {{1438535969861793867ull, 4329678957615800814ull, 15424480626100623234ull, 3088610089963693888ull}}, {{11021541999182018141ull, 14635470733874526825ull, 833856708916227426ull, 3860762612454617361ull}}, {{18417678795557231098ull, 13758855227098967169ull, 12050375489141111901ull, 2412976632784135850ull}}, {{9187040439164375161ull, 3363510978591545250ull, 5839597324571614069ull, 3016220790980169813ull}}, {{2260428512100693143ull, 8816074741666819467ull, 11911182674141905490ull, 3770275988725212266ull}}, {{17553668884558790879ull, 10121732731969150070ull, 12056175189766078835ull, 2356422492953257666ull}}, {{12718714068843712790ull, 8040479896534049684ull, 5846846950352822736ull, 2945528116191572083ull}}, {{15898392586054640987ull, 10050599870667562105ull, 2696872669513640516ull, 3681910145239465104ull}}, {{6037932677286137522ull, 12563249838334452632ull, 3371090836892050645ull, 4602387681549331380ull}}, {{3773707923303835952ull, 10157874158172726847ull, 11330303809912307461ull, 2876492300968332112ull}}, {{105448885702407035ull, 17309028716143296463ull, 14162879762390384326ull, 3595615376210415140ull}}, {{13966869162410172506ull, 12412913858324344770ull, 17703599702987980408ull, 4494519220263018925ull}}, {{13340979244933745720ull, 7758071161452715481ull, 13370592823581181707ull, 2809074512664386828ull}}, {{2841166000885018438ull, 5085902933388506448ull, 16713241029476477134ull, 3511343140830483535ull}}, {{3551457501106273048ull, 15580750703590408868ull, 16279865268418208513ull, 4389178926038104419ull}}, {{11443032975046196463ull, 2820440162102923686ull, 7869072783547686369ull, 2743236828773815262ull}}, {{5080419181952969771ull, 8137236221056042512ull, 612968942579832153ull, 3429046035967269078ull}}, {{6350523977441212213ull, 14783231294747441044ull, 9989583215079565999ull, 4286307544959086347ull}}, {{13192449522755533442ull, 16157048586858232508ull, 3937646500211034797ull, 2678942215599428967ull}}, {{16490561903444416802ull, 6361252678290626923ull, 310372106836405593ull, 3348677769499286209ull}}, {{16001516360878133098ull, 12563251866290671558ull, 4999651151972894895ull, 4185847211874107761ull}}, {{5389261707121445283ull, 14769561444072751580ull, 14653997016051529069ull, 2616154507421317350ull}}, {{6736577133901806603ull, 4626893749808775763ull, 9094124233209635529ull, 3270193134276646688ull}}, {{3809035398949870350ull, 10395303205688357608ull, 11367655291512044411ull, 4087741417845808360ull}}, {{2380647124343668969ull, 4191221494341529553ull, 7104784557195027757ull, 2554838386153630225ull}}, {{7587494923856974115ull, 9850712886354299845ull, 13492666714921172600ull, 3193547982692037781ull}}, {{14096054673248605547ull, 12313391107942874806ull, 3030775338369302038ull, 3991934978365047227ull}}, {{4198348152352990563ull, 3084183424036908850ull, 18035135650976671438ull, 2494959361478154516ull}}, {{14471307227296014012ull, 13078601316900911870ull, 4097175490011287681ull, 3118699201847693146ull}}, {{8865761997265241707ull, 2513193590843976126ull, 14344841399368885410ull, 3898374002309616432ull}}, {{929415229863388163ull, 6182432012704872983ull, 8965525874605553381ull, 2436483751443510270ull}}, {{14996827092611398916ull, 12339726034308479132ull, 1983535306402165918ull, 3045604689304387838ull}}, {{299289792054697028ull, 6201285506030823108ull, 11702791169857483206ull, 3807005861630484797ull}}, {{9410428156888961451ull, 17710861496551428154ull, 9620087490374620955ull, 2379378663519052998ull}}, {{2539663159256426006ull, 17526890852261897289ull, 2801737326113500386ull, 2974223329398816248ull}}, {{7786264967497920411ull, 12685241528472595803ull, 3502171657641875483ull, 3717779161748520310ull}}, {{2560572595472506305ull, 5622432946081678425ull, 16023915341308335889ull, 2323611976092825193ull}}, {{7812401762768020785ull, 11639727201029485935ull, 6194836121353256149ull, 2904514970116031492ull}}, {{5153816185032638077ull, 714600946004693707ull, 7743545151691570187ull, 3630643712645039365ull}}, {{1830584212863409692ull, 14728309237788030846ull, 14291117458041850637ull, 4538304640806299206ull}}, {{14979173188321794770ull, 11511036282831213230ull, 4320262392848768744ull, 2836440400503937004ull}}, {{9500594448547467654ull, 14388795353539016538ull, 5400327991060960930ull, 3545550500629921255ull}}, {{2652371023829558760ull, 8762622155068994865ull, 2138723970398813259ull, 4431938125787401569ull}}, {{13186946935961943985ull, 3170795837704427838ull, 12865917527567728047ull, 2769961328617125980ull}}, {{7260311633097654173ull, 17798552852412698510ull, 16082396909459660058ull, 3462451660771407475ull}}, {{18298761578226843524ull, 13024819028661097329ull, 15491310118397187169ull, 4328064575964259344ull}}, {{4519196958750695347ull, 1222982865272103975ull, 9682068823998241981ull, 2705040359977662090ull}}, {{1037310180010981279ull, 6140414600017517873ull, 2879213993143026668ull, 3381300449972077613ull}}, {{5908323743441114503ull, 7675518250021897341ull, 8210703509856171239ull, 4226625562465097016ull}}, {{5998545348864390517ull, 11714727933904767694ull, 5131689693660107024ull, 2641640976540685635ull}}, {{16721553722935263954ull, 14643409917380959617ull, 1802926098647745876ull, 3302051220675857044ull}}, {{7066884098386916230ull, 18304262396726199522ull, 2253657623309682345ull, 4127564025844821305ull}}, {{9028488579919210548ull, 4522634970312792845ull, 12937751060637021226ull, 2579727516153013315ull}}, {{15897296743326401089ull, 14876665749745766864ull, 11560502807368888628ull, 3224659395191266644ull}}, {{1424876855448449745ull, 149088113472656965ull, 14450628509211110786ull, 4030824243989083305ull}}, {{3196391043868975043ull, 4704866089347798507ull, 2114113790615862385ull, 2519265152493177066ull}}, {{17830546860118382515ull, 10492768630112136037ull, 11866014275124603789ull, 3149081440616471332ull}}, {{8453125519865814432ull, 17727646806067557951ull, 14832517843905754736ull, 3936351800770589165ull}}, {{12200732477557215876ull, 11079779253792223719ull, 11576166661654790662ull, 2460219875481618228ull}}, {{10639229578519131941ull, 4626352030385503841ull, 14470208327068488328ull, 3075274844352022785ull}}, {{17910722991576302830ull, 5782940037981879801ull, 4252702353553446698ull, 3844093555440028482ull}}, {{4276672842094107413ull, 8226023542166062780ull, 7269624989398292090ull, 2402558472150017801ull}}, {{5345841052617634266ull, 1059157390852802667ull, 13698717255175253017ull, 3003198090187522251ull}}, {{2070615297344654929ull, 5935632756993391238ull, 12511710550541678367ull, 3753997612734402814ull}}, {{15129192616122573043ull, 10627299500761951379ull, 3208133075661161075ull, 2346248507959001759ull}}, {{14299804751725828399ull, 8672438357525051320ull, 17845224399858615056ull, 2932810634948752198ull}}, {{17874755939657285499ull, 10840547946906314150ull, 13083158462968493012ull, 3666013293685940248ull}}, {{13120072887716831065ull, 13550684933632892688ull, 16353948078710616265ull, 4582516617107425310ull}}, {{8200045554823019416ull, 1551649055879476074ull, 5609531530766747262ull, 2864072885692140819ull}}, {{1026684906673998462ull, 11162933356704120901ull, 2400228395031046173ull, 3580091107115176024ull}}, {{5895042151769885981ull, 118608640597987414ull, 3000285493788807717ull, 4475113883893970030ull}}, {{17519459400138342451ull, 2379973409587436085ull, 15710236488900168535ull, 2796946177433731268ull}}, {{8064266194890764351ull, 16810024817266458819ull, 1191051537415659052ull, 3496182721792164086ull}}, {{5468646725186067535ull, 2565786947873521908ull, 10712186458624349624ull, 4370228402240205107ull}}, {{12641276240096068017ull, 1603616842420951192ull, 4389273527426524563ull, 2731392751400128192ull}}, {{15801595300120085022ull, 15839579108308352702ull, 5486591909283155703ull, 3414240939250160240ull}}, {{10528622088295330469ull, 15187787866958052974ull, 6858239886603944629ull, 4267801174062700300ull}}, {{1968702786757193639ull, 11798210426062477061ull, 13509771965982241201ull, 2667375733789187687ull}}, {{7072564501873879953ull, 912704977295932614ull, 12275528939050413598ull, 3334219667236484609ull}}, {{18064077664197125749ull, 10364253258474691575ull, 1509353118530853285ull, 4167774584045605762ull}}, {{18207577567764285449ull, 8783501295760376186ull, 5555031717509171207ull, 2604859115028503601ull}}, {{13536099922850581003ull, 6367690601273082329ull, 11555475665313851913ull, 3256073893785629501ull}}, {{3085066848281062542ull, 12571299270018740816ull, 609286526360151179ull, 4070092367232036877ull}}, {{1928166780175664089ull, 5551219034548019058ull, 2686647088188788439ull, 2543807729520023048ull}}, {{11633580512074355919ull, 2327337774757635918ull, 3358308860235985549ull, 3179759661900028810ull}}, {{5318603603238169091ull, 7520858236874432802ull, 13421258112149757744ull, 3974699577375036012ull}}, {{7935813270451243586ull, 4700536398046520501ull, 17611658356948374398ull, 2484187235859397507ull}}, {{14531452606491442386ull, 15099042534412926434ull, 17402886927758080093ull, 3105234044824246884ull}}, {{8940943721259527175ull, 5038745112733994331ull, 3306864585988048501ull, 3881542556030308606ull}}, {{3282246816573510532ull, 5455058704672440409ull, 15901848421524694025ull, 2425964097518942878ull}}, {{8714494539144276069ull, 11430509399267938415ull, 10653938490051091723ull, 3032455121898678598ull}}, {{6281432155502957183ull, 9676450730657535115ull, 4094051075709088846ull, 3790568902373348248ull}}, {{1620052087975654287ull, 1436095688233571543ull, 2558781922318180529ull, 2369105563983342655ull}}, {{15860123165251731571ull, 6406805628719352332ull, 17033535458179889373ull, 2961381954979178318ull}}, {{1378409882855112848ull, 12620193054326578320ull, 12068547285870085908ull, 3701727443723972898ull}}, {{861506176784445530ull, 17110992695808887258ull, 12154528072096191596ull, 2313579652327483061ull}}, {{10300254757835332720ull, 2941996796051557456ull, 1358102034838075784ull, 2891974565409353827ull}}, {{12875318447294165900ull, 3677495995064446820ull, 15532685598829758442ull, 3614968206761692283ull}}, {{16094148059117707375ull, 13820242030685334333ull, 14804170980109810148ull, 4518710258452115354ull}}, {{12364685546162261062ull, 17861023306033109766ull, 13864292880996019246ull, 2824193911532572096ull}}, {{6232484895848050519ull, 13102907095686611400ull, 17330366101245024058ull, 3530242389415715120ull}}, {{7790606119810063149ull, 7155261832753488442ull, 3216213552846728457ull, 4412802986769643901ull}}, {{9480814843308677372ull, 16001253691539400036ull, 4315976479742899237ull, 2758001866731027438ull}}, {{11851018554135846715ull, 6166509059142086333ull, 14618342636533399855ull, 3447502333413784297ull}}, {{978715137387644682ull, 3096450305500220013ull, 4437870240384586107ull, 4309377916767230372ull}}, {{2917539970080971878ull, 18076182505433495172ull, 11997040937095142124ull, 2693361197979518982ull}}, {{3646924962601214848ull, 4148484058082317349ull, 5772929134514151848ull, 3366701497474398728ull}}, {{9170342221678906464ull, 5185605072602896686ull, 7216161418142689810ull, 4208376871842998410ull}}, {{1119777870121928636ull, 7852689188804198333ull, 9121786904766569035ull, 2630235544901874006ull}}, {{6011408356079798699ull, 5204175467577860012ull, 2178861594103435486ull, 3287794431127342508ull}}, {{7514260445099748373ull, 15728591371327100823ull, 2723576992629294357ull, 4109743038909178135ull}}, {{11613941805828424589ull, 12136212616293131966ull, 8619764648034390829ull, 2568589399318236334ull}}, {{5294055220430754929ull, 1335207715084251246ull, 1551333773188212729ull, 3210736749147795418ull}}, {{15840941062393219469ull, 6280695662282701961ull, 11162539253340041719ull, 4013420936434744272ull}}, {{2983059136354680312ull, 10842963816567770582ull, 6976587033337526074ull, 2508388085271715170ull}}, {{12952195957298126198ull, 4330332733854937419ull, 17944105828526683401ull, 3135485106589643962ull}}, {{11578558928195269844ull, 10024601935746059678ull, 13206760248803578443ull, 3919356383237054953ull}}, {{2624913311694655748ull, 3959533200627593347ull, 1336696127861154671ull, 2449597739523159346ull}}, {{17116199694900483397ull, 337730482357103779ull, 10894242196681219147ull, 3061997174403949182ull}}, {{16783563600198216343ull, 14257221158228543436ull, 4394430708996748125ull, 3827496468004936478ull}}, {{1266355213269109406ull, 11216606233106533600ull, 16581577248405131290ull, 2392185292503085298ull}}, {{1582944016586386758ull, 4797385754528391192ull, 11503599523651638305ull, 2990231615628856623ull}}, {{1978680020732983447ull, 10608418211587876894ull, 9767813386137159977ull, 3737789519536070779ull}}, {{15071733068240278367ull, 18159476428310892818ull, 3799040357122031033ull, 2336118449710044237ull}}, {{9616294298445572150ull, 8864287480106452311ull, 9360486464829926696ull, 2920148062137555296ull}}, {{7408681854629577284ull, 11080359350133065389ull, 11700608081037408370ull, 3650185077671944120ull}}, {{13872538336714359508ull, 4627077150811555928ull, 14625760101296760463ull, 4562731347089930150ull}}, {{8670336460446474693ull, 9809452246898304311ull, 4529414044883087385ull, 2851707091931206344ull}}, {{6226234557130705462ull, 16873501327050268293ull, 5661767556103859231ull, 3564633864914007930ull}}, {{12394479214840769731ull, 16480190640385447462ull, 16300581481984599847ull, 4455792331142509912ull}}, {{3134863490848093178ull, 17217648177881986520ull, 10187863426240374904ull, 2784870206964068695ull}}, {{3918579363560116473ull, 3075316148642931534ull, 8123143264373080727ull, 3481087758705085869ull}}, {{14121596241304921399ull, 17679203241085828129ull, 14765615098893738812ull, 4351359698381357336ull}}, {{1908468623174494018ull, 1826129988823866773ull, 9228509436808586758ull, 2719599811488348335ull}}, {{6997271797395505427ull, 11506034522884609274ull, 6923950777583345543ull, 3399499764360435419ull}}, {{17969961783599157591ull, 9770857135178373688ull, 4043252453551794025ull, 4249374705450544274ull}}, {{11231226114749473495ull, 17636000755554953315ull, 7138718801897259169ull, 2655859190906590171ull}}, {{9427346625009453964ull, 8209942889161527932ull, 4311712483944186058ull, 3319823988633237714ull}}, {{11784183281261817455ull, 1039056574597134107ull, 14613012641785008381ull, 4149779985791547142ull}}, {{5059271541574941958ull, 2955253368336902769ull, 4521446882688242334ull, 2593612491119716964ull}}, {{10935775445396065351ull, 12917438747275904269ull, 5651808603360302917ull, 3242015613899646205ull}}, {{18281405325172469593ull, 2311740378812716624ull, 11676446772627766551ull, 4052519517374557756ull}}, {{11425878328232793496ull, 8362366764399029746ull, 16521151269747129902ull, 2532824698359098597ull}}, {{5058975873436216062ull, 1229586418644011375ull, 6816381031901748666ull, 3166030872948873247ull}}, {{1712033823367882173ull, 10760355060159790027ull, 3908790271449797928ull, 3957538591186091559ull}}, {{17210922204100784022ull, 6725221912599868766ull, 9360522947297205561ull, 2473461619491307224ull}}, {{12290280718271204220ull, 13018213409177223862ull, 11700653684121506951ull, 3091827024364134030ull}}, {{6139478860984229466ull, 11661080743044141924ull, 5402445068297107881ull, 3864783780455167538ull}}, {{13060546324969919225ull, 370646436761506846ull, 7988214186113080330ull, 2415489862784479711ull}}, {{7102310869357623223ull, 9686680082806659366ull, 5373581714213962508ull, 3019362328480599639ull}}, {{18101260623551804836ull, 12108350103508324207ull, 2105291124340065231ull, 3774202910600749549ull}}, {{18230816917360959879ull, 14485247842333784485ull, 3621649961926234721ull, 2358876819125468468ull}}, {{8953463091419036136ull, 4271501747635066895ull, 4527062452407793402ull, 2948596023906835585ull}}, {{6580142845846407266ull, 14562749221398609427ull, 10270514083937129656ull, 3685745029883544481ull}}, {{3613492538880621179ull, 18203436526748261784ull, 17449828623348799974ull, 4607181287354430601ull}}, {{2258432836800388237ull, 6765461810790275711ull, 3988613861951918128ull, 2879488304596519126ull}}, {{16658099101282649008ull, 8456827263487844638ull, 14209139364294673468ull, 3599360380745648907ull}}, {{11599251839748535452ull, 10571034079359805798ull, 13149738186940953931ull, 4499200475932061134ull}}, {{2637846381415446754ull, 4301053290386184672ull, 3606900348410708303ull, 2812000297457538209ull}}, {{3297307976769308442ull, 764630594555342936ull, 9120311453940773283ull, 3515000371821922761ull}}, {{4121634970961635552ull, 14790846298476342382ull, 16012075335853354507ull, 4393750464777403451ull}}, {{16411079912133185932ull, 6938435927334020036ull, 7701704075694652615ull, 2746094040485877157ull}}, {{2067105816456930799ull, 4061358890740137142ull, 14238816113045703673ull, 3432617550607346446ull}}, {{11807254307425939307ull, 9688384631852559331ull, 8575148104452353783ull, 4290771938259183058ull}}, {{5073690932927518115ull, 12972769422548931438ull, 9971153583710109018ull, 2681732461411989411ull}}, {{15565485703014173452ull, 6992589741331388489ull, 7852255961210248369ull, 3352165576764986764ull}}, {{5621799073485553103ull, 13352423195091623516ull, 9815319951512810461ull, 4190206970956233455ull}}, {{12736996457783246497ull, 10651107506145958649ull, 13052103997336588394ull, 2618879356847645909ull}}, {{2086187516946894410ull, 4090512345827672504ull, 2480071941388571781ull, 3273599196059557387ull}}, {{2607734396183618012ull, 9724826450711978534ull, 16935147982017878438ull, 4091998995074446733ull}}, {{15464892052896924970ull, 1466330513267598679ull, 12890310497974867976ull, 2557499371921529208ull}}, {{14719429047693768308ull, 1832913141584498349ull, 16112888122468584970ull, 3196874214901911510ull}}, {{4564228254335046673ull, 11514513463835398745ull, 10917738116230955404ull, 3996092768627389388ull}}, {{14381857705027873931ull, 16419942951751900023ull, 16046958359499122935ull, 2497557980392118367ull}}, {{13365636112857454509ull, 15913242671262487125ull, 15447011930946515765ull, 3121947475490147959ull}}, {{2871987085789654424ull, 6056495283795945195ull, 14697078895255756803ull, 3902434344362684949ull}}, {{17935892993114391679ull, 1479466543158771794ull, 11491517318748541954ull, 2439021465226678093ull}}, {{13196494204538213791ull, 11072705215803240551ull, 529338593153513730ull, 3048776831533347617ull}}, {{11883931737245379335ull, 4617509482899274881ull, 5273359259869280067ull, 3810971039416684521ull}}, {{509928308137280228ull, 580100417598352849ull, 14825064583486769802ull, 2381856899635427825ull}}, {{5249096403598988189ull, 9948497558852716869ull, 4696272674076298540ull, 2977321124544284782ull}}, {{11173056522926123141ull, 12435621948565896086ull, 15093712879450148983ull, 3721651405680355977ull}}, {{2371474308401439059ull, 14689792745494766910ull, 2516041522015261258ull, 2326032128550222486ull}}, {{12187714922356574632ull, 9138868895013682829ull, 12368423939373852381ull, 2907540160687778107ull}}, {{1399585597663554577ull, 16035272137194491441ull, 10848843905789927572ull, 3634425200859722634ull}}, {{6361168015506831126ull, 1597346097783562685ull, 4337682845382633658ull, 4543031501074653293ull}}, {{6281573018905463406ull, 5610027329542114582ull, 5016894787577839988ull, 2839394688171658308ull}}, {{17075338310486605065ull, 7012534161927643227ull, 6271118484472299985ull, 3549243360214572885ull}}, {{16732486869680868427ull, 13377353720836941938ull, 12450584124017762885ull, 4436554200268216106ull}}, {{15069490311977930671ull, 10666689084736782663ull, 12393301095938489707ull, 2772846375167635066ull}}, {{14225176871545025435ull, 8721675337493590425ull, 6268254333068336326ull, 3466057968959543833ull}}, {{3946413034149118081ull, 1678722135012212224ull, 12447003934762808312ull, 4332572461199429791ull}}, {{2466508146343198801ull, 1049201334382632640ull, 14696906486867837051ull, 2707857788249643619ull}}, {{3083135182928998501ull, 15146559723260454512ull, 13759447090157408409ull, 3384822235312054524ull}}, {{3853918978661248126ull, 5098141598793404428ull, 17199308862696760512ull, 4231027794140068155ull}}, {{11632071398518055887ull, 3186338499245877767ull, 8443725029971781368ull, 2644392371337542597ull}}, {{9928403229720181955ull, 3982923124057347209ull, 15166342305892114614ull, 3305490464171928246ull}}, {{17022190055577615348ull, 14202025941926459819ull, 9734555845510367459ull, 4131863080214910308ull}}, {{8333025775522315640ull, 6570423204490343435ull, 15307469440298755470ull, 2582414425134318942ull}}, {{5804596200975506646ull, 17436401042467705102ull, 9910964763518668529ull, 3228018031417898678ull}}, {{16479117288074159116ull, 7960443247802467665ull, 3165333917543559854ull, 4035022539272373348ull}}, {{3381919277405267592ull, 363591011449154387ull, 11201705735319500717ull, 2521889087045233342ull}}, {{18062457152038748201ull, 5066174782738830887ull, 4778760132294600088ull, 3152361358806541678ull}}, {{17966385421621047348ull, 6332718478423538609ull, 15196822202223025918ull, 3940451698508177097ull}}, {{4311461860872072736ull, 17793007104296875343ull, 2580484848748309342ull, 2462782311567610686ull}}, {{777641307662703016ull, 13017886843516318371ull, 12448978097790162486ull, 3078477889459513357ull}}, {{14807109689860542482ull, 7048986517540622155ull, 1726164566955539396ull, 3848097361824391697ull}}, {{6948600546949145100ull, 13628988610317664655ull, 12608067900415681882ull, 2405060851140244810ull}}, {{4074064665259043470ull, 7812863726042305011ull, 6536712838664826545ull, 3006326063925306013ull}}, {{480894813146416434ull, 14377765675980269168ull, 12782577066758421085ull, 3757907579906632516ull}}, {{300559258216510271ull, 11291946556701362182ull, 17212482703578788986ull, 2348692237441645322ull}}, {{9599071109625413647ull, 4891561159021926919ull, 12292231342618710425ull, 2935865296802056653ull}}, {{7387152868604379155ull, 10726137467204796553ull, 1530231122991224319ull, 3669831621002570817ull}}, {{13845627104182861847ull, 8795985815578607787ull, 6524474922166418303ull, 4587289526253213521ull}}, {{6347673930900594703ull, 12415020162377711723ull, 15607011872422481199ull, 2867055953908258450ull}}, {{3322906395198355474ull, 10907089184544751750ull, 10285392803673325691ull, 3583819942385323063ull}}, {{13377005030852720151ull, 9022175462253551783ull, 8245054986164269210ull, 4479774927981653829ull}}, {{15278157171924031950ull, 10250545682335857768ull, 7459002375566362208ull, 2799859329988533643ull}}, {{650952391195488322ull, 12813182102919822211ull, 4712066951030564856ull, 3499824162485667054ull}}, {{14648748544276524114ull, 16016477628649777763ull, 15113455725642981878ull, 4374780203107083817ull}}, {{6849624830959133620ull, 5398612499478723198ull, 2528380800885781818ull, 2734237626941927386ull}}, {{17785403075553692832ull, 15971637661203179805ull, 12383848037962003080ull, 3417797033677409232ull}}, {{8396695789159952328ull, 1517803002794423141ull, 15479810047452503851ull, 4272246292096761540ull}}, {{7553777877438664157ull, 17089527941242372127ull, 451509242803039098ull, 2670153932560475963ull}}, {{4830536328370942293ull, 12138537889698189351ull, 14399444608785962585ull, 3337692415700594953ull}}, {{1426484392036289962ull, 1338114306840572977ull, 4164247705700289520ull, 4172115519625743692ull}}, {{12420767791091150986ull, 836321441775358110ull, 11826026852917456758ull, 2607572199766089807ull}}, {{6302587702009162925ull, 10268773839073973446ull, 10170847547719433043ull, 3259465249707612259ull}}, {{17101606664366229464ull, 8224281280415078903ull, 8101873416221903400ull, 4074331562134515324ull}}, {{17606033192869975271ull, 5140175800259424314ull, 14287042921993465433ull, 2546457226334072077ull}}, {{12784169454232693281ull, 11036905768751668297ull, 4023745597209668079ull, 3183071532917590097ull}}, {{2145153762508702889ull, 9184446192512197468ull, 9641368014939473003ull, 3978839416146987621ull}}, {{10564093138422715114ull, 3434435861106429465ull, 8331698018550864579ull, 2486774635091867263ull}}, {{17816802441455781796ull, 18128102881665200543ull, 5802936504761192819ull, 3108468293864834079ull}}, {{17659317033392339341ull, 18048442583654112775ull, 2641984612524103120ull, 3885585367331042599ull}}, {{17954602173511293944ull, 11280276614783820484ull, 8568769410468646306ull, 2428490854581901624ull}}, {{3996508643179565814ull, 4876973731624999798ull, 10710961763085807883ull, 3035613568227377030ull}}, {{14219007840829233075ull, 1484531146103861843ull, 4165330167002484046ull, 3794516960284221288ull}}, {{6581036891304576720ull, 14762890021597077364ull, 2603331354376552528ull, 2371573100177638305ull}}, {{8226296114130720900ull, 6868453286795089ull, 7865850211398078565ull, 2964466375222047881ull}}, {{14894556161090789029ull, 4620271585035881765ull, 14443998782674986110ull, 3705582969027559851ull}}, {{11614940609895437095ull, 16722727795929589815ull, 6721656229958172366ull, 2315989355642224907ull}}, {{9906989743941908465ull, 11680037708057211461ull, 3790384269020327554ull, 2894986694552781134ull}}, {{16995423198354773485ull, 5376675098216738518ull, 13961352373130185251ull, 3618733368190976417ull}}, {{12020906961088691049ull, 2109157854343535244ull, 3616632411130567852ull, 4523416710238720522ull}}, {{16736438887535207714ull, 10541595695819485335ull, 6872081275383992811ull, 2827135443899200326ull}}, {{16308862590991621738ull, 8565308601346968765ull, 17813473631084766822ull, 3533919304874000407ull}}, {{6551020183457363460ull, 1483263714828935149ull, 17655156020428570624ull, 4417399131092500509ull}}, {{6400230623874546115ull, 927039821768084468ull, 13340315521981550592ull, 2760874456932812818ull}}, {{8000288279843182643ull, 1158799777210105585ull, 7452022365622162432ull, 3451093071166016023ull}}, {{14612046368231366208ull, 1448499721512631981ull, 4703341938600315136ull, 4313866338957520029ull}}, {{11438371989358297832ull, 905312325945394988ull, 5245431720838890912ull, 2696166461848450018ull}}, {{14297964986697872290ull, 1131640407431743735ull, 15780161687903389448ull, 3370208077310562522ull}}, {{13260770214944952459ull, 1414550509289679669ull, 10501830073024461002ull, 4212760096638203153ull}}, {{10593824393554289239ull, 5495780086733437697ull, 18092858841708757886ull, 2632975060398876970ull}}, {{17853966510370249452ull, 16093097145271572929ull, 13392701515281171549ull, 3291218825498596213ull}}, {{8482400082680648103ull, 6281313376307302450ull, 2905818838819300725ull, 4114023531873245267ull}}, {{9913186070102792969ull, 6231663869405757983ull, 17957037838757920617ull, 2571264707420778291ull}}, {{7779796569201103307ull, 12401265855184585383ull, 17834611280020012867ull, 3214080884275972864ull}}, {{5113059693073991229ull, 10889896300553343825ull, 3846520026315464468ull, 4017601105344966081ull}}, {{14724877354239714279ull, 16029557224700615698ull, 13933290062515635052ull, 2511000690840603800ull}}, {{9182724655944867040ull, 1590202457166218007ull, 17416612578144543816ull, 3138750863550754750ull}}, {{6866719801503695896ull, 1987753071457772509ull, 12547393685825903962ull, 3923438579438443438ull}}, {{6597542885153503887ull, 5854031688088495722ull, 3230435035213802072ull, 2452149112149027149ull}}, {{17470300643296655667ull, 7317539610110619652ull, 8649729812444640494ull, 3065186390186283936ull}}, {{3391131730411267967ull, 18370296549493050374ull, 10812162265555800617ull, 3831482987732854920ull}}, {{15954515386789206192ull, 4563906315792074627ull, 6757601415972375386ull, 2394676867333034325ull}}, {{15331458215059119836ull, 14928254931594869092ull, 13058687788392857136ull, 2993346084166292906ull}}, {{717578695114348178ull, 213574590784034750ull, 7099987698636295613ull, 3741682605207866133ull}}, {{14283544739728631324ull, 2439327128453715670ull, 6743335320861378710ull, 2338551628254916333ull}}, {{8631058887806013347ull, 12272530947421920396ull, 13040855169504111291ull, 2923189535318645416ull}}, {{10788823609757516683ull, 10728977665850012591ull, 16301068961880139114ull, 3653986919148306770ull}}, {{8874343493769507950ull, 4187850045457739931ull, 11152964165495398085ull, 4567483648935383463ull}}, {{3240621674392248517ull, 4923249287624781409ull, 13888131631075705659ull, 2854677280584614664ull}}, {{8662463111417698550ull, 1542375591103588857ull, 17360164538844632074ull, 3568346600730768330ull}}, {{15439764907699511091ull, 11151341525734261879ull, 12476833636701014284ull, 4460433250913460413ull}}, {{16567382094953276288ull, 16192960490438689482ull, 10103864032151827879ull, 2787770781820912758ull}}, {{11485855581836819552ull, 15629514594620973949ull, 3406458003335009041ull, 3484713477276140948ull}}, {{522261422013860728ull, 5701835187994053725ull, 4258072504168761302ull, 4355891846595176185ull}}, {{2632256397972356907ull, 17398705047778447290ull, 14190510361173945573ull, 2722432404121985115ull}}, {{12513692534320221942ull, 7913323254440895400ull, 13126451933040044063ull, 3403040505152481394ull}}, {{15642115667900277427ull, 5279968049623731346ull, 7184692879445279271ull, 4253800631440601743ull}}, {{14388008310865061296ull, 10217509058655913947ull, 11407962077294381400ull, 2658625394650376089ull}}, {{13373324370153938716ull, 12771886323319892434ull, 424894541335813038ull, 3323281743312970112ull}}, {{7493283425837647587ull, 6741485867295089735ull, 531118176669766298ull, 4154102179141212640ull}}, {{11600831168789611598ull, 8825114685486818988ull, 331948860418603936ull, 2596313861963257900ull}}, {{14501038960987014497ull, 11031393356858523735ull, 414936075523254920ull, 3245392327454072375ull}}, {{13514612682806380218ull, 13789241696073154669ull, 14353728149686232362ull, 4056740409317590468ull}}, {{10752475935967681588ull, 13229962078473109572ull, 18194452130408671034ull, 2535462755823494042ull}}, {{13440594919959601985ull, 7314080561236611157ull, 13519693126156062985ull, 3169328444779367553ull}}, {{2965685594667338769ull, 13754286719973151851ull, 3064558352412915019ull, 3961660555974209442ull}}, {{17994454561162944395ull, 6290586190769525954ull, 6527034988685459791ull, 2476037847483880901ull}}, {{13269696164598904686ull, 3251546720034519539ull, 12770479754284212643ull, 3095047309354851126ull}}, {{11975434187321242953ull, 17899491455325313136ull, 6739727656000489995ull, 3868809136693563908ull}}, {{7484646367075776846ull, 8881339150364626758ull, 13435701821855082055ull, 2418005710433477442ull}}, {{132435921989945249ull, 6489987919528395544ull, 7571255240464076761ull, 3022507138041846803ull}}, {{165544902487431561ull, 12724170917837882334ull, 4852383032152708047ull, 3778133922552308504ull}}, {{13938523619336808438ull, 14870135851289758314ull, 3032739395095442529ull, 2361333701595192815ull}}, {{8199782487316234739ull, 4752611758830034181ull, 17625982299151466874ull, 2951667126993991018ull}}, {{14861414127572681328ull, 15164136735392318534ull, 12809105837084557784ull, 3689583908742488773ull}}, {{4676697811305537926ull, 9477585459620199084ull, 10311534157391542567ull, 2305989942964055483ull}}, {{5845872264131922408ull, 7235295806097860951ull, 8277731678312040305ull, 2882487428705069354ull}}, {{2695654311737515105ull, 13655805776049714093ull, 1123792561035274573ull, 3603109285881336693ull}}, {{7981253908099281786ull, 3234699164779978904ull, 6016426719721481121ull, 4503886607351670866ull}}, {{4988283692562051116ull, 13550902024055956575ull, 8371952718253313604ull, 2814929129594794291ull}}, {{1623668597275175991ull, 16938627530069945719ull, 5853254879389254101ull, 3518661411993492864ull}}, {{15864643801876133701ull, 7338226357305268436ull, 7316568599236567627ull, 4398326764991866080ull}}, {{692030339317807755ull, 2280548464102098821ull, 4572855374522854767ull, 2748954228119916300ull}}, {{5476723942574647598ull, 16685743635409787238ull, 5716069218153568458ull, 3436192785149895375ull}}, {{16069276965073085305ull, 11633807507407458239ull, 2533400504264572669ull, 4295240981437369219ull}}, {{16960827130811760172ull, 9576972701343355351ull, 17724276379661215582ull, 2684525613398355761ull}}, {{16589347895087312311ull, 2747843839824418381ull, 8320287419294355766ull, 3355657016747944702ull}}, {{6901626813576976676ull, 12658176836635298785ull, 1176987237263168899ull, 4194571270934930878ull}}, {{15842731804554080183ull, 5605517513683367788ull, 14570675078571644274ull, 2621607044334331798ull}}, {{1356670681983048613ull, 16230268928958985544ull, 8989971811359779534ull, 3277008805417914748ull}}, {{1695838352478810766ull, 11064464124343956122ull, 11237464764199724418ull, 4096261006772393435ull}}, {{5671584988726644633ull, 11526976096142360480ull, 4717572468411133809ull, 2560163129232745897ull}}, {{7089481235908305791ull, 573662064895786888ull, 10508651603941305166ull, 3200203911540932371ull}}, {{8861851544885382238ull, 9940449617974509418ull, 8524128486499243553ull, 4000254889426165464ull}}, {{10150343233980751803ull, 17741996057302538146ull, 5327580304062027220ull, 2500159305891353415ull}}, {{3464557005621163946ull, 3730750997918621067ull, 2047789361650146122ull, 3125199132364191769ull}}, {{18165754312308618644ull, 13886810784253052141ull, 7171422720490070556ull, 3906498915455239711ull}}, {{13659439454406580605ull, 17902628777012933396ull, 11399668227947375953ull, 2441561822159524819ull}}, {{17074299318008225756ull, 8543227915984003033ull, 9637899266506832038ull, 3051952277699406024ull}}, {{7507816092228118483ull, 1455662858125227984ull, 12047374083133540048ull, 3814940347124257530ull}}, {{4692385057642574052ull, 909789286328267490ull, 12141294820385850434ull, 2384337716952660956ull}}, {{15088853358907993373ull, 10360608644765110170ull, 15176618525482313042ull, 2980422146190826195ull}}, {{9637694661780215908ull, 3727388769101611905ull, 14359087138425503399ull, 3725527682738532744ull}}, {{17552774209681104702ull, 9247147008329589296ull, 8974429461515939624ull, 2328454801711582965ull}}, {{3494223688391829262ull, 11558933760411986621ull, 15829722845322312434ull, 2910568502139478706ull}}, {{8979465628917174481ull, 5225295163660207468ull, 10563781519798114735ull, 3638210627674348383ull}}, {{11224332036146468102ull, 1919932936147871431ull, 8593040881320255515ull, 4547763284592935479ull}}, {{13932736550232624420ull, 17340859149588277308ull, 12288179578466241552ull, 2842352052870584674ull}}, {{17415920687790780524ull, 3229329863275795019ull, 6136852436228026133ull, 3552940066088230843ull}}, {{17158214841311087751ull, 8648348347522131678ull, 3059379526857644762ull, 4441175082610288554ull}}, {{6112198257392041941ull, 10016903735628720203ull, 6523798222713415880ull, 2775734426631430346ull}}, {{3028561803312664522ull, 12521129669535900254ull, 17378119815246545658ull, 3469668033289287932ull}}, {{13009074290995606460ull, 6428040050065099509ull, 3275905695348630457ull, 4337085041611609916ull}}, {{10436514441085947990ull, 15546740077359156953ull, 11270813096447669843ull, 2710678151007256197ull}}, {{17657329069784822891ull, 14821739078271558287ull, 253458315277423592ull, 3388347688759070247ull}}, {{17459975318803640710ull, 80429774129896243ull, 14151880949378943203ull, 4235434610948837808ull}}, {{8606641565038581492ull, 16191169673327042816ull, 8844925593361839501ull, 2647146631843023630ull}}, {{10758301956298226865ull, 6403904036376639808ull, 1832784954847523569ull, 3308933289803779538ull}}, {{13447877445372783581ull, 12616566063898187664ull, 11514353230414180269ull, 4136166612254724422ull}}, {{8404923403357989738ull, 10191196799150061242ull, 2584784750581474764ull, 2585104132659202764ull}}, {{1282782217342711365ull, 12738995998937576553ull, 3230980938226843455ull, 3231380165824003455ull}}, {{6215163790105777110ull, 11312058980244582787ull, 17873784228065718031ull, 4039225207280004318ull}}, {{1578634359602416742ull, 13987565890293946098ull, 6559429124113685865ull, 2524515754550002699ull}}, {{11196664986357796735ull, 3649399307585268910ull, 3587600386714719428ull, 3155644693187503374ull}}, {{4772459196092470111ull, 4561749134481586138ull, 13707872520248175093ull, 3944555866484379217ull}}, {{7594473015985181723ull, 5156936218264685288ull, 1649891297514027577ull, 2465347416552737011ull}}, {{9493091269981477154ull, 11057856291258244514ull, 15897422177174698183ull, 3081684270690921263ull}}, {{2642992050622070634ull, 9210634345645417739ull, 15260091703040984825ull, 3852105338363651579ull}}, {{17792771096134651811ull, 17285861512096855846ull, 7231714305186921563ull, 2407565836477282237ull}}, {{13017591833313538955ull, 16995640871693681904ull, 13651328899911039858ull, 3009457295596602796ull}}, {{16271989791641923694ull, 12021179052762326572ull, 17064161124888799823ull, 3761821619495753495ull}}, {{946621582921426501ull, 14430765935617535964ull, 17582629730696581745ull, 2351138512184845934ull}}, {{1183276978651783126ull, 4203399364239756243ull, 12754915126515951374ull, 2938923140231057418ull}}, {{15314154278596892619ull, 14477621242154471111ull, 6720271871290163409ull, 3673653925288821773ull}}, {{14531006829818727870ull, 4261968497410925177ull, 13012025857540092166ull, 4592067406611027216ull}}, {{2164350240995623063ull, 16498788366163991948ull, 8132516160962557603ull, 2870042129131892010ull}}, {{2705437801244528829ull, 16011799439277602031ull, 942273164348421196ull, 3587552661414865013ull}}, {{17216855306837824748ull, 1568005225387450922ull, 5789527473862914400ull, 4484440826768581266ull}}, {{15372220585201028371ull, 980003265867156826ull, 8230140689591709404ull, 2802775516730363291ull}}, {{9991903694646509656ull, 1225004082333946033ull, 5675989843562248851ull, 3503469395912954114ull}}, {{17101565636735524974ull, 15366313158199596253ull, 16318359341307586871ull, 4379336744891192642ull}}, {{12994321532173397061ull, 16521474751515829514ull, 14810660606744629698ull, 2737085465556995401ull}}, {{7019529878361970518ull, 11428471402540011085ull, 4678267703148623411ull, 3421356831946244252ull}}, {{13386098366379851052ull, 9673903234747625952ull, 5847834628935779264ull, 4276696039932805315ull}}, {{8366311478987406907ull, 6046189521717266220ull, 1349053633871168088ull, 2672935024958003322ull}}, {{10457889348734258634ull, 7557736902146582775ull, 10909689079193735918ull, 3341168781197504152ull}}, {{8460675667490435388ull, 223799090828452661ull, 13637111348992169898ull, 4176460976496880190ull}}, {{7593765301395216070ull, 4751560450195170817ull, 3911508574692718282ull, 2610288110310550119ull}}, {{14103892645171407991ull, 15162822599598739329ull, 277699699938509948ull, 3262860137888187649ull}}, {{3794807751182096277ull, 506784175788872546ull, 4958810643350525340ull, 4078575172360234561ull}}, {{6983440862916198077ull, 9540112146722821149ull, 14628471698162548097ull, 2549109482725146600ull}}, {{13340987097072635501ull, 16536826201830914340ull, 18285589622703185121ull, 3186386853406433250ull}}, {{16676233871340794376ull, 6835974697006479213ull, 13633614991524205594ull, 3982983566758041563ull}}, {{12728489178801690437ull, 8884170204056437412ull, 6215166360488934544ull, 2489364729223775977ull}}, {{15910611473502113046ull, 11105212755070546765ull, 12380643969038556084ull, 3111705911529719971ull}}, {{6053206286595477595ull, 13881515943838183457ull, 10864118942870807201ull, 3889632389412149964ull}}, {{15312468975190643257ull, 1758418437257782804ull, 16013446376149030309ull, 2431020243382593727ull}}, {{693842145278752456ull, 6809709064999616410ull, 15405121951758899982ull, 3038775304228242159ull}}, {{10090674718453216377ull, 17735508368104296320ull, 14644716421271237073ull, 3798469130285302699ull}}, {{6306671699033260236ull, 4167163702424103344ull, 6847104754080829219ull, 2374043206428314187ull}}, {{7883339623791575295ull, 597268609602741276ull, 3947194924173648620ull, 2967554008035392734ull}}, {{9854174529739469118ull, 746585762003426595ull, 14157365692071836583ull, 3709442510044240917ull}}, {{3853016071873474247ull, 7384145128893223478ull, 11154196566758591816ull, 2318401568777650573ull}}, {{14039642126696618617ull, 9230181411116529347ull, 107687653166076058ull, 2898001960972063217ull}}, {{12937866639943385367ull, 2314354727040885876ull, 4746295584884982977ull, 3622502451215079021ull}}, {{16172333299929231709ull, 7504629427228495249ull, 10544555499533616625ull, 4528128064018848776ull}}, {{3190179284814687962ull, 16219608438086279291ull, 6590347187208510390ull, 2830080040011780485ull}}, {{17822782161300523664ull, 11051138510753073305ull, 12849620002438025892ull, 3537600050014725606ull}}, {{8443419646343490868ull, 13813923138441341632ull, 6838652966192756557ull, 4422000062518407008ull}}, {{5277137278964681793ull, 10939544970739532472ull, 4274158103870472848ull, 2763750039074004380ull}}, {{6596421598705852241ull, 13674431213424415590ull, 5342697629838091060ull, 3454687548842505475ull}}, {{17468899035237091109ull, 17093039016780519487ull, 2066686018870225921ull, 4318359436053131844ull}}, {{17835590924664263799ull, 3765620357846742823ull, 10515050798648667009ull, 2698974647533207402ull}}, {{17682802637402941845ull, 9318711465735816433ull, 3920441461456057953ull, 3373718309416509253ull}}, {{8268445241471513594ull, 16260075350597158446ull, 9512237845247460345ull, 4217147886770636566ull}}, {{556092257492308093ull, 3245018066482142173ull, 1333462634852274812ull, 2635717429231647854ull}}, {{5306801340292773020ull, 4056272583102677716ull, 10890200330420119323ull, 3294646786539559817ull}}, {{6633501675365966275ull, 458654710450959241ull, 18224436431452537058ull, 4118308483174449771ull}}, {{15675153593172198682ull, 4898345212459237429ull, 9084429760444141709ull, 2573942801984031107ull}}, {{5758883936183084640ull, 10734617534001434691ull, 6743851182127789232ull, 3217428502480038884ull}}, {{2586918901801467896ull, 13418271917501793364ull, 8429813977659736540ull, 4021785628100048605ull}}, {{10840196350480693243ull, 17609791985293396660ull, 7574476745251029289ull, 2513616017562530378ull}}, {{13550245438100866554ull, 8177181926334582113ull, 244723894709010804ull, 3142020021953162973ull}}, {{3102748742343919480ull, 10221477407918227642ull, 4917590886813651409ull, 3927525027441453716ull}}, {{6550903982392337579ull, 17917638426017362036ull, 12296866341113307938ull, 2454703142150908572ull}}, {{8188629977990421974ull, 13173675995666926737ull, 15371082926391634923ull, 3068378927688635715ull}}, {{14847473490915415371ull, 11855408976156270517ull, 14602167639562155750ull, 3835473659610794644ull}}, {{11585513941035828559ull, 2797944591670281169ull, 18349726811581123152ull, 2397171037256746652ull}}, {{646834371012621987ull, 3497430739587851462ull, 4490414440766852324ull, 2996463796570933316ull}}, {{10031915000620553292ull, 4371788424484814327ull, 5613018050958565405ull, 3745579745713666645ull}}, {{13187475903028927663ull, 5038210774516702906ull, 5813979291062797330ull, 2340987341071041653ull}}, {{7260972841931383771ull, 15521135505000654441ull, 11879160132255884566ull, 2926234176338802066ull}}, {{13687902070841617618ull, 10178047344396042243ull, 5625578128465079900ull, 3657792720423502583ull}}, {{12498191570124634118ull, 12722559180495052804ull, 2420286642153961971ull, 4572240900529378229ull}}, {{17034741768182672132ull, 5645756478595714050ull, 3818522160559920184ull, 2857650562830861393ull}}, {{12070055173373564357ull, 7057195598244642563ull, 9384838719127288134ull, 3572063203538576741ull}}, {{10475882948289567542ull, 18044866534660579012ull, 16342734417336498071ull, 4465079004423220926ull}}, {{15770798879535755522ull, 18195570611803943738ull, 5602522992407923390ull, 2790674377764513079ull}}, {{10490126562564918594ull, 13521091227900153865ull, 2391467722082516334ull, 3488342972205641349ull}}, {{17724344221633536147ull, 7677991998020416523ull, 7601020671030533322ull, 4360428715257051686ull}}, {{8771872129307266140ull, 9410431017190148231ull, 138951900966695422ull, 2725267947035657304ull}}, {{6353154143206694771ull, 2539666734632909481ull, 173689876208369278ull, 3406584933794571630ull}}, {{12553128697435756367ull, 12397955455145912659ull, 9440484382115237405ull, 4258231167243214537ull}}, {{5539862426683653778ull, 10054565168679889364ull, 17429517784890493138ull, 2661394479527009085ull}}, {{6924828033354567222ull, 3344834423995085897ull, 7951839175830952711ull, 3326743099408761357ull}}, {{13267721060120596932ull, 18016101085276021083ull, 14551484988216078792ull, 4158428874260951696ull}}, {{5986482653361679130ull, 11260063178297513177ull, 9094678117635049245ull, 2599018046413094810ull}}, {{12094789335129486817ull, 240020917589727759ull, 2144975610189035749ull, 3248772558016368513ull}}, {{10506800650484470617ull, 4911712165414547603ull, 7292905531163682590ull, 4060965697520460641ull}}, {{4260907397339100184ull, 16904878158666255964ull, 16087281003045771378ull, 2538103560950287900ull}}, {{5326134246673875230ull, 11907725661478044147ull, 1662357180097662607ull, 3172629451187859876ull}}, {{2045981789914956133ull, 10272971058420167280ull, 2077946475122078259ull, 3965786813984824845ull}}, {{1278738618696847583ull, 4114763902298910598ull, 3604559556164992864ull, 2478616758740515528ull}}, {{10821795310225835287ull, 5143454877873638247ull, 4505699445206241080ull, 3098270948425644410ull}}, {{8915558119354906205ull, 6429318597342047809ull, 14855496343362577158ull, 3872838685532055512ull}}, {{17101438870665286138ull, 17853382178620943592ull, 9284685214601610723ull, 2420524178457534695ull}}, {{2930054514622056056ull, 17705041704848791587ull, 6994170499824625500ull, 3025655223071918369ull}}, {{17497626198559733782ull, 3684558057351437867ull, 13354399143208169780ull, 3782069028839897961ull}}, {{8630173364886139662ull, 11526220822699424475ull, 1428970436864024256ull, 2363793143024936226ull}}, {{6176030687680286674ull, 14407776028374280594ull, 11009585082934806128ull, 2954741428781170282ull}}, {{16943410396455134150ull, 18009720035467850742ull, 4538609316813731852ull, 3693426785976462853ull}}, {{5977945479357070940ull, 2032702985312630906ull, 5142473832222276360ull, 2308391741235289283ull}}, {{16695803886051114483ull, 2540878731640788632ull, 1816406271850457546ull, 2885489676544111604ull}}, {{2423010783854341487ull, 12399470451405761599ull, 2270507839813071932ull, 3606862095680139505ull}}, {{16863821535100090571ull, 15499338064257201998ull, 7449820818193727819ull, 4508577619600174381ull}}, {{5928202441010168703ull, 7381243280947057297ull, 6961981020584773839ull, 2817861012250108988ull}}, {{12021939069690098783ull, 4614868082756433717ull, 8702476275730967299ull, 3522326265312636235ull}}, {{1192365781830459766ull, 1156899085018154243ull, 6266409326236321220ull, 4402907831640795294ull}}, {{16886129678139895018ull, 9946433964991122209ull, 17751563884179864474ull, 2751817394775497058ull}}, {{7272604042392705060ull, 3209670419384126954ull, 12966082818370054785ull, 3439771743469371323ull}}, {{18314127089845657133ull, 8623774042657546596ull, 11595917504535180577ull, 4299714679336714154ull}}, {{2222957394298759901ull, 16919073822729436383ull, 11859134458761875764ull, 2687321674585446346ull}}, {{16613754798155613588ull, 2702098204702243862ull, 5600546036597568898ull, 3359152093231807933ull}}, {{11543821460839741176ull, 12600994792732580636ull, 11612368564174349026ull, 4198940116539759916ull}}, {{16438260449879614043ull, 12487307763885250801ull, 16481102389463743949ull, 2624337572837349947ull}}, {{6712767507067353842ull, 1774076649574399790ull, 15989691968402292033ull, 3280421966046687434ull}}, {{17614331420688968111ull, 6829281830395387641ull, 10763742923648089233ull, 4100527457558359293ull}}, {{4091428110289523213ull, 15797516190065587036ull, 9033182336493749722ull, 2562829660973974558ull}}, {{5114285137861904017ull, 10523523200727207987ull, 2068105883762411345ull, 3203537076217468198ull}}, {{1781170403899992117ull, 17766090019336397888ull, 11808504391557789989ull, 4004421345271835247ull}}, {{1113231502437495073ull, 13409649271298942632ull, 14297844272364700599ull, 2502763340794897029ull}}, {{1391539378046868841ull, 12150375570696290386ull, 4037247285173712037ull, 3128454175993621287ull}}, {{10962796259413361859ull, 1352911408088199270ull, 434873088039752143ull, 3910567719992026609ull}}, {{2240061643705963258ull, 7763098657696206400ull, 11801010726093314849ull, 2444104824995016630ull}}, {{2800077054632454073ull, 14315559340547645904ull, 5527891370761867753ull, 3055131031243770788ull}}, {{3500096318290567591ull, 4059391120402393668ull, 6909864213452334692ull, 3818913789054713485ull}}, {{11410932235786380552ull, 11760491487106271850ull, 6624508142621403134ull, 2386821118159195928ull}}, {{5040293257878199882ull, 5477242322028064005ull, 8280635178276753918ull, 2983526397698994910ull}}, {{10912052590775137757ull, 16069924939389855814ull, 1127421935991166589ull, 3729407997123743638ull}}, {{2208346850807073194ull, 12349546096332353836ull, 14539696765276642830ull, 2330879998202339773ull}}, {{2760433563508841493ull, 6213560583560666487ull, 4339562901313639826ull, 2913599997752924717ull}}, {{17285600009668215578ull, 16990322766305608916ull, 10036139645069437686ull, 3641999997191155896ull}}, {{3160255938375717856ull, 12014531421027235338ull, 12545174556336797108ull, 4552499996488944870ull}}, {{6586845979912211564ull, 16732454174996797894ull, 3229048079283110288ull, 2845312497805590544ull}}, {{17456929511745040263ull, 2468823645036445751ull, 4036310099103887861ull, 3556640622256988180ull}}, {{17209475871253912425ull, 7697715574722945093ull, 5045387623879859826ull, 4445800777821235225ull}}, {{13061765428747389218ull, 9422758252629228587ull, 14682582310993382151ull, 2778625486138272015ull}}, {{11715520767506848618ull, 7166761797359147830ull, 13741541870314339785ull, 3473281857672840019ull}}, {{5421028922528784964ull, 13570138265126322692ull, 12565241319465536827ull, 4341602322091050024ull}}, {{12611515113435266411ull, 6175493406490257730ull, 7853275824665960517ull, 2713501451306906265ull}}, {{6541021854939307205ull, 12331052776540210067ull, 14428280799259838550ull, 3391876814133632831ull}}, {{3564591300246746103ull, 6190443933820486776ull, 13423664980647410284ull, 4239846017667041039ull}}, {{2227869562654216314ull, 13092399495492580043ull, 15307319640545713283ull, 2649903761041900649ull}}, {{16619895008599934105ull, 11753813350938337149ull, 5299091495399977892ull, 3312379701302375812ull}}, {{6939810705467753919ull, 14692266688672921437ull, 6623864369249972365ull, 4140474626627969765ull}}, {{6643224700131040152ull, 11488509689634269850ull, 6445758239994926680ull, 2587796641642481103ull}}, {{17527402912018575997ull, 14360637112042837312ull, 3445511781566270446ull, 3234745802053101379ull}}, {{3462509566313668380ull, 8727424353198770833ull, 18141947782240001770ull, 4043432252566376723ull}}, {{13693283525014512498ull, 10066326239176619674ull, 9032874354686307154ull, 2527145157853985452ull}}, {{7893232369413364814ull, 3359535762115998785ull, 11291092943357883943ull, 3158931447317481815ull}}, {{14478226480194093922ull, 18034477757927162193ull, 9502180160769967024ull, 3948664309146852269ull}}, {{2131362522480226845ull, 11271548598704476371ull, 8244705609694923342ull, 2467915193216782668ull}}, {{16499261208382447269ull, 4866063711525819655ull, 10305882012118654178ull, 3084893991520978335ull}}, {{16012390492050671182ull, 15305951676262050377ull, 8270666496720929818ull, 3856117489401222919ull}}, {{3090215029890587633ull, 14177905816091169390ull, 12086695588091662992ull, 2410073430875764324ull}}, {{13086140824218010349ull, 17722382270113961737ull, 15108369485114578740ull, 3012591788594705405ull}}, {{2522617974990349224ull, 3706233763932900556ull, 5050403801111059714ull, 3765739735743381757ull}}, {{10800008271223744073ull, 6928082120885450751ull, 5462345384908106273ull, 2353587334839613598ull}}, {{8888324320602292187ull, 13271788669534201343ull, 16051303767989908649ull, 2941984168549516997ull}}, {{6498719382325477330ull, 2754677781635587967ull, 6229071654705222100ull, 3677480210686896247ull}}, {{3511713209479458758ull, 3443347227044484959ull, 3174653549954139721ull, 4596850263358620309ull}}, {{9112349783565743580ull, 13681307062971272859ull, 4290001477935031277ull, 2873031414599137693ull}}, {{6778751211029791571ull, 3266575773431927362ull, 9974187865846177001ull, 3591289268248922116ull}}, {{17696811050642015271ull, 8694905735217297106ull, 12467734832307721251ull, 4489111585311152645ull}}, {{15672192925078647449ull, 3128473075297116739ull, 10098177279406019734ull, 2805694740819470403ull}}, {{14978555137920921407ull, 13133963380976171732ull, 8011035580830136763ull, 3507118426024338004ull}}, {{276449848691600143ull, 11805768207792826762ull, 10013794476037670954ull, 4383898032530422505ull}}, {{4784467173859637993ull, 11990291148297904630ull, 17787836593592014106ull, 2739936270331514065ull}}, {{15203956004179323299ull, 5764491898517604979ull, 8399737686707853921ull, 3424920337914392582ull}}, {{14393258986796766220ull, 11817300891574394128ull, 1276300071530041593ull, 4281150422392990728ull}}, {{8995786866747978888ull, 468284029592914474ull, 797687544706275996ull, 2675719013995619205ull}}, {{2021361546580197802ull, 585355036991143093ull, 5608795449310232899ull, 3344648767494524006ull}}, {{7138387951652635156ull, 14566751851521092578ull, 16234366348492566931ull, 4180810959368155007ull}}, {{9073178488210284877ull, 6798376897986988909ull, 17064007995448936188ull, 2613006849605096879ull}}, {{15953159128690244000ull, 8497971122483736136ull, 16718323975883782331ull, 3266258562006371099ull}}, {{1494704837153253384ull, 6010777884677282267ull, 16286218951427340010ull, 4082823202507963874ull}}, {{17075091587716641029ull, 8368422196350689320ull, 14790572863069475410ull, 2551764501567477421ull}}, {{2897120410936249670ull, 1237155708583585843ull, 4653158023554680551ull, 3189705626959346777ull}}, {{17456458568952475799ull, 15381502691011646015ull, 10428133547870738592ull, 3987132033699183471ull}}, {{17827815633236379231ull, 9613439181882278759ull, 13435112495060293476ull, 2491957521061989669ull}}, {{17673083523118086134ull, 12016798977352848449ull, 2958832563543203133ull, 3114946901327487087ull}}, {{8256296348615443956ull, 1185940666408896850ull, 17533598759711167629ull, 3893683626659358858ull}}, {{9771871236312040377ull, 3047055925719254483ull, 15570185243246867672ull, 2433552266662099286ull}}, {{7603153026962662567ull, 3808819907149068104ull, 10239359517203808782ull, 3041940333327624108ull}}, {{9503941283703328208ull, 13984396920791110938ull, 12799199396504760977ull, 3802425416659530135ull}}, {{10551649320741968034ull, 1822719047853362480ull, 14917028650456557467ull, 2376515885412206334ull}}, {{13189561650927460043ull, 16113456865098866812ull, 9422913776215921025ull, 2970644856765257918ull}}, {{16486952063659325053ull, 6306763026091419803ull, 2555270183415125474ull, 3713306070956572398ull}}, {{7998502030573384206ull, 8553412909734525281ull, 15432101919916617133ull, 2320816294347857748ull}}, {{14609813556644118162ull, 15303452155595544505ull, 843383326186219800ull, 2901020367934822186ull}}, {{4427208890522983990ull, 682571120784879016ull, 10277601194587550559ull, 3626275459918527732ull}}, {{5534011113153729988ull, 14688271956263262482ull, 12847001493234438198ull, 4532844324898159665ull}}, {{8070442964148469147ull, 4568483954237151147ull, 1111846905630442018ull, 2833027703061349791ull}}, {{5476367686758198529ull, 14933976979651214742ull, 15224866687320216234ull, 3541284628826687238ull}}, {{16068831645302523969ull, 9444099187709242619ull, 9807711322295494485ull, 4426605786033359048ull}}, {{7737176769100383529ull, 8208405001531970589ull, 6129819576434684053ull, 2766628616270849405ull}}, {{14283156979802867315ull, 14872192270342351140ull, 12273960488970742970ull, 3458285770338561756ull}}, {{17853946224753584144ull, 9366868301073163117ull, 15342450611213428713ull, 4322857212923202195ull}}, {{13464559399684684042ull, 17383507734239196708ull, 7283188622794698993ull, 2701785758077001372ull}}, {{16830699249605855052ull, 7894326612516832173ull, 9103985778493373742ull, 3377232197596251715ull}}, {{7203316006725155103ull, 644536228791264409ull, 6768296204689329274ull, 4221540246995314644ull}}, {{16031287550271691700ull, 5014521161421928159ull, 13453557164785606604ull, 2638462654372071652ull}}, {{15427423419412226721ull, 6268151451777410199ull, 16816946455982008255ull, 3298078317965089565ull}}, {{14672593255837895497ull, 3223503296294374845ull, 7186125014695346607ull, 4122597897456361957ull}}, {{11476213794112378638ull, 8932218587825066134ull, 6797171143398285581ull, 2576623685910226223ull}}, {{5121895205785697489ull, 15776959253208720572ull, 3884777910820469072ull, 3220779607387782779ull}}, {{6402369007232121861ull, 1274454992801349099ull, 244286370098198437ull, 4025974509234728474ull}}, {{1695637620306382211ull, 3102377379714537139ull, 4764364999738761927ull, 2516234068271705296ull}}, {{15954605080665141476ull, 17713029779925335135ull, 5955456249673452408ull, 3145292585339631620ull}}, {{15331570332404038941ull, 3694543151197117303ull, 7444320312091815511ull, 3931615731674539525ull}}, {{16499760485393606194ull, 9226618497139280170ull, 6958543204271078646ull, 2457259832296587203ull}}, {{11401328569887231935ull, 2309901084569324405ull, 4086492986911460404ull, 3071574790370734004ull}}, {{416602657076876206ull, 2887376355711655507ull, 5108116233639325505ull, 3839468487963417505ull}}, {{16401277725168905293ull, 13333825268388254451ull, 14721787692093048200ull, 2399667804977135940ull}}, {{15889911138033743712ull, 16667281585485318064ull, 18402234615116310250ull, 2999584756221419925ull}}, {{1415644848832628024ull, 11610729945001871773ull, 9167735213613224101ull, 3749480945276774907ull}}, {{3190621039734086467ull, 9562549224839863810ull, 3423991499294571111ull, 2343425590797984317ull}}, {{13211648336522383892ull, 7341500512622441858ull, 8891675392545601793ull, 2929281988497480396ull}}, {{7291188383798204057ull, 13788561659205440227ull, 11114594240682002241ull, 3661602485621850495ull}}, {{4502299461320367167ull, 3400644018724636572ull, 9281556782425114898ull, 4577003107027313119ull}}, {{12037309200180005287ull, 6737088530130285761ull, 12718502016656778667ull, 2860626941892070699ull}}, {{1211578444942842897ull, 3809674644235469298ull, 11286441502393585430ull, 3575783677365088374ull}}, {{10737845093033329429ull, 13985465342149112430ull, 4884679841137205979ull, 4469729596706360468ull}}, {{2099467164718442990ull, 6435072829629501317ull, 12276296937565529545ull, 2793580997941475292ull}}, {{7236019974325441641ull, 12655527055464264550ull, 15345371171956911931ull, 3491976247426844115ull}}, {{18268397004761577859ull, 11207722800902942783ull, 14570027946518752010ull, 4364970309283555144ull}}, {{18335277155617068018ull, 11616512768991727143ull, 9106267466574220006ull, 2728106443302221965ull}}, {{18307410426093947118ull, 5297268924384883121ull, 15994520351645162912ull, 3410133054127777456ull}}, {{9049204977335270186ull, 6621586155481103902ull, 1546406365846902024ull, 4262666317659721821ull}}, {{1044067092407155962ull, 4138491347175689939ull, 3272346987868007717ull, 2664166448537326138ull}}, {{15140141920791108665ull, 9784800202397000327ull, 13313805771689785454ull, 3330208060671657672ull}}, {{14313491382561497927ull, 3007628216141474601ull, 16642257214612231818ull, 4162760075839572090ull}}, {{2028403086459854348ull, 6491453653515809530ull, 15013096777560032790ull, 2601725047399732556ull}}, {{11758875894929593743ull, 17337689103749537720ull, 319626898240489371ull, 3252156309249665696ull}}, {{14698594868661992179ull, 17060425361259534246ull, 399533622800611714ull, 4065195386562082120ull}}, {{4574935774486357208ull, 15274451869214596808ull, 249708514250382321ull, 2540747116601301325ull}}, {{5718669718107946510ull, 5258006781236082298ull, 4923821661240365806ull, 3175933895751626656ull}}, {{16371709184489708946ull, 15795880513399878680ull, 6154777076550457257ull, 3969917369689533320ull}}, {{10232318240306068091ull, 2954896293233842319ull, 3846735672844035786ull, 2481198356055958325ull}}, {{8178711781955197210ull, 12916992403397078707ull, 9420105609482432636ull, 3101497945069947906ull}}, {{5611703709016608608ull, 16146240504246348384ull, 2551759974998264987ull, 3876872431337434883ull}}, {{3507314818135380380ull, 7785557305940273788ull, 17735751048869773281ull, 2423045269585896801ull}}, {{4384143522669225475ull, 14343632650852730139ull, 8334630755805052889ull, 3028806586982371002ull}}, {{868493384909143940ull, 4094482758283748962ull, 1194916407901540304ull, 3786008233727963753ull}}, {{5154494383995602867ull, 2559051723927343101ull, 12276037801006932450ull, 2366255146079977345ull}}, {{11054803998421891487ull, 12422186691763954684ull, 1509989195976501850ull, 2957818932599971682ull}}, {{13818504998027364359ull, 6304361327850167547ull, 11110858531825403121ull, 3697273665749964602ull}}, {{6330722614553408772ull, 15469440875974824477ull, 11555972600818264854ull, 2310796041093727876ull}}, {{12525089286619148869ull, 10113429058113754788ull, 14444965751022831068ull, 2888495051367159845ull}}, {{15656361608273936087ull, 12641786322642193485ull, 4221149133496375123ull, 3610618814208949807ull}}, {{5735393955060256396ull, 11190546884875353953ull, 664750398443081000ull, 4513273517761187259ull}}, {{15113836267981130008ull, 6994091803047096220ull, 16556370063522783289ull, 2820795948600742036ull}}, {{445551261266860894ull, 13354300772236258180ull, 2248718505693927495ull, 3525994935750927546ull}}, {{556939076583576117ull, 12081189946867934821ull, 12034270168972185177ull, 4407493669688659432ull}}, {{2653929932078429025ull, 633214689151377407ull, 7521418855607615736ull, 2754683543555412145ull}}, {{17152470470380199993ull, 791518361439221758ull, 14013459587936907574ull, 3443354429444265181ull}}, {{12217216051120474184ull, 10212769988653803006ull, 3681766429638970755ull, 4304193036805331477ull}}, {{3024074013522908461ull, 4077138233694932927ull, 4606947027738050674ull, 2690120648003332173ull}}, {{17615150572185799288ull, 14319794828973441966ull, 10370369803099951246ull, 3362650810004165216ull}}, {{12795566178377473302ull, 8676371499362026650ull, 12962962253874939058ull, 4203313512505206520ull}}, {{12608914879913308718ull, 10034418205528654560ull, 8101851408671836911ull, 2627070945315754075ull}}, {{15761143599891635897ull, 7931336738483430296ull, 5515628242412408235ull, 3283838681644692594ull}}, {{1254685426154993256ull, 5302484904676899967ull, 16117907339870286102ull, 4104798352055865742ull}}, {{7701707418987952641ull, 17149111120705226191ull, 5462006068991540909ull, 2565498970034916089ull}}, {{5015448255307552897ull, 7601330845599369027ull, 11439193604666814041ull, 3206873712543645111ull}}, {{1657624300707053217ull, 14113349575426599188ull, 9687305987406129647ull, 4008592140679556389ull}}, {{10259387224796684069ull, 15738372512282706348ull, 8360409251342524981ull, 2505370087924722743ull}}, {{12824234030995855086ull, 5837907585071219223ull, 5838825545750768323ull, 3131712609905903429ull}}, {{11418606520317430953ull, 2685698462911636125ull, 11910217950615848308ull, 3914640762382379286ull}}, {{9442472084412088298ull, 10901933576174548386ull, 2832200200707517288ull, 2446650476488987054ull}}, {{2579718068660334564ull, 13627416970218185483ull, 12763622287739172418ull, 3058313095611233817ull}}, {{17059705641107581917ull, 7810899175917956045ull, 2119469804391801811ull, 3822891369514042272ull}}, {{12968159034905932651ull, 2575968975735028576ull, 1324668627744876132ull, 2389307105946276420ull}}, {{16210198793632415813ull, 3219961219668785720ull, 1655835784681095165ull, 2986633882432845525ull}}, {{1816004418330968150ull, 8636637543013370055ull, 6681480749278756860ull, 3733292353041056906ull}}, {{8052531789097936950ull, 14621270501238132092ull, 8787611486726610941ull, 2333307720650660566ull}}, {{10065664736372421187ull, 4441530071265501403ull, 1761142321553487869ull, 2916634650813325708ull}}, {{7970394902038138580ull, 10163598607509264658ull, 2201427901941859836ull, 3645793313516657135ull}}, {{739621590692897417ull, 12704498259386580823ull, 16586842932709488507ull, 4557241641895821418ull}}, {{7379792521824142742ull, 5634468402902919062ull, 14978462851370818221ull, 2848276026184888386ull}}, {{1368615425402619ull, 11654771522056036732ull, 9499706527358746968ull, 3560345032731110483ull}}, {{1710769281753274ull, 14568464402570045915ull, 7262947140771045806ull, 4450431290913888104ull}}, {{16141970295296953460ull, 4493604233178890792ull, 4539341962981903629ull, 2781519556821180065ull}}, {{1730718795411640209ull, 10228691309901001395ull, 10285863472154767440ull, 3476899446026475081ull}}, {{15998456549546713974ull, 12785864137376251743ull, 17469015358620847204ull, 4346124307533093851ull}}, {{16916564371107778090ull, 17214537122714933147ull, 8612291589924335550ull, 2716327692208183657ull}}, {{16534019445457334708ull, 12294799366538890626ull, 15377050505832807342ull, 3395409615260229571ull}}, {{11444152269966892577ull, 6145127171318837475ull, 14609627113863621274ull, 4244262019075286964ull}}, {{4846752159515613909ull, 8452390500501661326ull, 18354388983019539104ull, 2652663761922054352ull}}, {{15281812236249293194ull, 10565488125627076657ull, 4496242155064872264ull, 3315829702402567941ull}}, {{5267207240029452780ull, 13206860157033845822ull, 10231988712258478234ull, 4144787128003209926ull}}, {{17127062580300571700ull, 12865973616573541542ull, 1783306926734160992ull, 2590491955002006204ull}}, {{12185456188520938817ull, 16082467020716926928ull, 2229133658417701240ull, 3238114943752507755ull}}, {{15231820235651173521ull, 1656339702186607044ull, 16621475128304290263ull, 4047643679690634693ull}}, {{296515610427207643ull, 7952741341507711259ull, 12694264964403875366ull, 2529777299806646683ull}}, {{14205702568316173265ull, 717554640029863265ull, 11256145187077456304ull, 3162221624758308354ull}}, {{3922070155113052869ull, 896943300037329082ull, 4846809446992044572ull, 3952777030947885443ull}}, {{7062979865373045947ull, 9783961599378106484ull, 723412895156333905ull, 2470485644342428402ull}}, {{8828724831716307434ull, 16841638017650021009ull, 10127638155800193189ull, 3088107055428035502ull}}, {{15647592058072772197ull, 7216989466780362549ull, 3436175657895465679ull, 3860133819285044378ull}}, {{12085588045509176575ull, 11428147444378808449ull, 6759295804612053953ull, 2412583637053152736ull}}, {{1271927001604307007ull, 450126250191346850ull, 8449119755765067442ull, 3015729546316440920ull}}, {{10813280788860159566ull, 9786029849593959370ull, 10561399694706334302ull, 3769661932895551150ull}}, {{11369986511464987633ull, 1504582637568836702ull, 1989188790764071035ull, 2356038708059719469ull}}, {{4989111102476458733ull, 15715786352243209590ull, 7098172006882476697ull, 2945048385074649336ull}}, {{15459760914950349224ull, 5809674885021848275ull, 8872715008603095872ull, 3681310481343311670ull}}, {{14713015125260548626ull, 7262093606277310344ull, 1867521723899094032ull, 4601638101679139588ull}}, {{9195634453287842892ull, 4538808503923318965ull, 10390573114291709578ull, 2876023813549462242ull}}, {{16106229085037191518ull, 14896882666758924514ull, 3764844356009861164ull, 3595029766936827803ull}}, {{10909414319441713590ull, 174359259739104027ull, 94369426584938552ull, 4493787208671034754ull}}, {{4512540940437377042ull, 108974537336940017ull, 4670666910042974499ull, 2808617005419396721ull}}, {{10252362193974109206ull, 13971276226953338733ull, 10450019655981106027ull, 3510771256774245901ull}}, {{17427138760895024412ull, 12852409265264285512ull, 17674210588403770438ull, 4388464070967807376ull}}, {{10891961725559390258ull, 3421069772362790541ull, 11046381617752356524ull, 2742790044354879610ull}}, {{18226638175376625726ull, 4276337215453488176ull, 4584604985335669847ull, 3428487555443599513ull}}, {{4336553645511230541ull, 733735500889472317ull, 10342442250096975213ull, 4285609444304499391ull}}, {{5016189037658213040ull, 2764427697269614150ull, 13381555433951691364ull, 2678505902690312119ull}}, {{15493608333927542108ull, 3455534621587017687ull, 12115258274012226301ull, 3348132378362890149ull}}, {{14755324398982039731ull, 8931104295411160013ull, 1309014787233119164ull, 4185165472953612687ull}}, {{11527920758577468784ull, 14805312221486750816ull, 7735663269661781333ull, 2615728420596007929ull}}, {{14409900948221835980ull, 4671582221576274808ull, 14281265105504614571ull, 3269660525745009911ull}}, {{18012376185277294975ull, 1227791758542955606ull, 13239895363453380310ull, 4087075657181262389ull}}, {{6646049097370921456ull, 14602427904371510966ull, 10580777611372056645ull, 2554422285738288993ull}}, {{17530933408568427627ull, 4417976825182224995ull, 17837658032642458711ull, 3193027857172861241ull}}, {{17301980742283146630ull, 910785013050393340ull, 8462014485520909677ull, 3991284821466076552ull}}, {{1590365927072190836ull, 2875083642370189790ull, 5288759053450568548ull, 2494553013416297845ull}}, {{11211329445695014353ull, 3593854552962737237ull, 11222634835240598589ull, 3118191266770372306ull}}, {{179103751836604229ull, 9104004209630809451ull, 4804921507195972428ull, 3897739083462965383ull}}, {{16252840909393735307ull, 14913374667874031714ull, 9920604969638564623ull, 2436086927164353364ull}}, {{11092679099887393326ull, 14030032316415151739ull, 12400756212048205779ull, 3045108658955441705ull}}, {{9254162856431853753ull, 12925854377091551770ull, 1665887209778093512ull, 3806385823694302132ull}}, {{10395537803697296500ull, 8078658985682219856ull, 10264551542966084253ull, 2378991139808938832ull}}, {{12994422254621620625ull, 14710009750530162724ull, 12830689428707605316ull, 2973738924761173540ull}}, {{16243027818277025781ull, 18387512188162703405ull, 16038361785884506645ull, 3717173655951466925ull}}, {{12457735395636835065ull, 13798038126815383580ull, 12329819125391510605ull, 2323233534969666828ull}}, {{15572169244546043832ull, 3412489603237065763ull, 15412273906739388257ull, 2904041918712083535ull}}, {{14853525537255166885ull, 8877298022473720108ull, 14653656364996847417ull, 3630052398390104419ull}}, {{120162847859406991ull, 15708308546519538040ull, 13705384437818671367ull, 4537565497987630524ull}}, {{75101779912129369ull, 16735221869215793131ull, 17789237310491445412ull, 2835978436242269077ull}}, {{13928935280172325423ull, 2472283262810189797ull, 8401488582832143054ull, 3544973045302836347ull}}, {{3576111044933243067ull, 12313726115367513055ull, 5890174710112790913ull, 4431216306628545434ull}}, {{9152598430724358773ull, 778549794463613803ull, 8293045212247882225ull, 2769510191642840896ull}}, {{6829062019978060562ull, 5584873261506905158ull, 10366306515309852781ull, 3461887739553551120ull}}, {{17759699561827351511ull, 11592777595311019351ull, 12957883144137315976ull, 4327359674441938900ull}}, {{18017341253783176550ull, 7245485997069387094ull, 17322049001940598293ull, 2704599796526211812ull}}, {{13298304530374194880ull, 13668543514764121772ull, 3205817178716196250ull, 3380749745657764766ull}}, {{16622880662967743600ull, 7862307356600376407ull, 13230643510250021121ull, 4225937182072205957ull}}, {{17306829441995921606ull, 16443157143943705014ull, 10574995203119957152ull, 2641210738795128723ull}}, {{12410164765640126199ull, 2107202356220079652ull, 8607057985472558537ull, 3301513423493910904ull}}, {{15512705957050157749ull, 7245688963702487469ull, 10758822481840698171ull, 4126891779367388630ull}}, {{12001284232370042545ull, 2222712593100360716ull, 2112578032723048453ull, 2579307362104617894ull}}, {{15001605290462553182ull, 7390076759802838799ull, 11864094577758586374ull, 3224134202630772367ull}}, {{14140320594650803573ull, 14223912898772691ull, 10218432203770845064ull, 4030167753288465459ull}}, {{6531857362443058281ull, 8889945561732932ull, 4080677118143084213ull, 2518854845805290912ull}}, {{8164821703053822851ull, 4622798450379554069ull, 5100846397678855266ull, 3148568557256613640ull}}, {{14817713147244666468ull, 15001870099829218394ull, 6376057997098569082ull, 3935710696570767050ull}}, {{13872756735455304447ull, 13987854830820649400ull, 8596722266613993580ull, 2459819185356729406ull}}, {{17340945919319130558ull, 17484818538525811750ull, 1522530796412716167ull, 3074773981695911758ull}}, {{12452810362294137390ull, 17244337154729876784ull, 11126535532370671017ull, 3843467477119889697ull}}, {{7783006476433835869ull, 3860181694065091134ull, 36555680090587530ull, 2402167173199931061ull}}, {{505386058687519028ull, 14048599154436139726ull, 4657380618540622316ull, 3002708966499913826ull}}, {{9855104610214174593ull, 17560748943045174657ull, 15045097810030553703ull, 3753386208124892282ull}}, {{17688655427452328881ull, 17892997117044316016ull, 14014872149696483968ull, 2345866380078057676ull}}, {{3664075210605859485ull, 3919502322595843405ull, 17518590187120604961ull, 2932332975097572095ull}}, {{9191780031684712260ull, 9511063921672192160ull, 17286551715473368297ull, 3665416218871965119ull}}, {{11489725039605890325ull, 16500515920517628104ull, 16996503625914322467ull, 4581770273589956399ull}}, {{7181078149753681453ull, 8006979441109823613ull, 17540343793837533398ull, 2863606420993722749ull}}, {{13588033705619489720ull, 785352264532503708ull, 8090371687014753036ull, 3579508026242153437ull}}, {{16985042132024362150ull, 981690330665629635ull, 14724650627195829199ull, 4474385032802691796ull}}, {{8309808323301532392ull, 7531085484307100378ull, 18426278678852169057ull, 2796490645501682372ull}}, {{1163888367272139682ull, 14025542873811263377ull, 4586104274855659705ull, 3495613306877102966ull}}, {{6066546477517562506ull, 3696870536981915509ull, 14956002380424350440ull, 4369516633596378707ull}}, {{6097434557662170519ull, 2310544085613697193ull, 7041658478551525073ull, 2730947895997736692ull}}, {{12233479215505101052ull, 7499866125444509395ull, 8802073098189406341ull, 3413684869997170865ull}}, {{10680163000953988411ull, 13986518675233024648ull, 15614277391164145830ull, 4267106087496463581ull}}, {{6675101875596242757ull, 4129888153593252501ull, 12064766378691285096ull, 2666941304685289738ull}}, {{12955563362922691350ull, 5162360191991565626ull, 5857585936509330562ull, 3333676630856612173ull}}, {{6971082166798588380ull, 15676322276844232841ull, 11933668439064051106ull, 4167095788570765216ull}}, {{15886141400317587497ull, 14409387441455033429ull, 7458542774415031941ull, 2604434867856728260ull}}, {{6022618695114820660ull, 4176676246536628075ull, 9323178468018789927ull, 3255543584820910325ull}}, {{2916587350466137921ull, 609159289743397190ull, 16265659103450875313ull, 4069429481026137906ull}}, {{15657925149323499913ull, 11909939602158093003ull, 14777722958084184974ull, 2543393425641336191ull}}, {{14960720418226986987ull, 5664052465842840446ull, 13860467679177843314ull, 3179241782051670239ull}}, {{9477528485928957925ull, 16303437619158326366ull, 12713898580544916238ull, 3974052227564587799ull}}, {{1311769285278210799ull, 5577962493546566075ull, 14863715640481654505ull, 2483782642227867374ull}}, {{15474769661879927211ull, 11584139135360595497ull, 9356272513747292323ull, 3104728302784834218ull}}, {{5508404022067745302ull, 9868487900773356468ull, 2471968605329339596ull, 3880910378481042773ull}}, {{12666124550647116622ull, 15391176974838123600ull, 3850823387544531199ull, 2425568986550651733ull}}, {{15832655688308895777ull, 14627285200120266596ull, 9425215252858051903ull, 3031961233188314666ull}}, {{1344075536676568105ull, 13672420481722945342ull, 2558147029217789071ull, 3789951541485393333ull}}, {{14675105265705018778ull, 15462791828717922694ull, 3904684902474812121ull, 2368719713428370833ull}}, {{9120509545276497664ull, 5493431730615239656ull, 9492542146520903056ull, 2960899641785463541ull}}, {{11400636931595622080ull, 6866789663269049570ull, 16477363701578516724ull, 3701124552231829426ull}}, {{11737084100674651704ull, 13515115576397931789ull, 14910038331913960856ull, 2313202845144893391ull}}, {{836297070561150918ull, 16893894470497414737ull, 14025861896465063166ull, 2891503556431116739ull}}, {{5657057356628826552ull, 11893996051266992613ull, 12920641352153941054ull, 3614379445538895924ull}}, {{11683007714213421094ull, 5644123027228964958ull, 16150801690192426318ull, 4517974306923619905ull}}, {{2690193802956000280ull, 17362634947300266811ull, 3176722028729184592ull, 2823733941827262441ull}}, {{17197800308977164061ull, 3256549610415781897ull, 8582588554338868645ull, 3529667427284078051ull}}, {{7662192330939291365ull, 8682373031447115276ull, 6116549674496197902ull, 4412084284105097564ull}}, {{14012242243691832911ull, 814797126227059143ull, 13046215583414899497ull, 2757552677565685977ull}}, {{12903616786187403235ull, 5630182426211211833ull, 2472711423986460659ull, 3446940846957107472ull}}, {{2294462927452090331ull, 2426042014336626888ull, 3090889279983075824ull, 4308676058696384340ull}}, {{1434039329657556457ull, 1516276258960391805ull, 11155177836844198198ull, 2692922536685240212ull}}, {{6404235180499333475ull, 11118717360555265564ull, 13943972296055247747ull, 3366153170856550265ull}}, {{8005293975624166844ull, 9286710682266694051ull, 3594907314786895972ull, 4207691463570687832ull}}, {{2697465725551410326ull, 15027566213271459590ull, 2246817071741809982ull, 2629807164731679895ull}}, {{12595204193794038715ull, 9561085729734548679ull, 16643579394959426190ull, 3287258955914599868ull}}, {{11132319223815160490ull, 2727985125313410041ull, 2357730169989731122ull, 4109073694893249836ull}}, {{40170487243393450ull, 6316676721748269180ull, 10696953393098357759ull, 2568171059308281147ull}}, {{50213109054241813ull, 3284159883757948571ull, 8759505722945559295ull, 3210213824135351434ull}}, {{13897824441599965978ull, 17940257909979599425ull, 1726010116827173310ull, 4012767280169189293ull}}, {{1768611248358896880ull, 6600975175309861737ull, 3384599332230677271ull, 2507979550105743308ull}}, {{6822450078876009004ull, 3639532950709939267ull, 4230749165288346589ull, 3134974437632179135ull}}, {{3916376580167623351ull, 9161102206814811988ull, 676750438183045332ull, 3918718047040223919ull}}, {{11671107399459540403ull, 14949060916114033300ull, 7340498051505485188ull, 2449198779400139949ull}}, {{14588884249324425503ull, 239582071432990009ull, 13787308582809244390ull, 3061498474250174936ull}}, {{4401047256373368167ull, 9522849626146013320ull, 17234135728511555487ull, 3826873092812718670ull}}, {{2750654535233355105ull, 12869310043982340181ull, 6159648811892334275ull, 2391795683007949169ull}}, {{8050004187469081785ull, 11474951536550537322ull, 12311247033292805748ull, 2989744603759936461ull}}, {{839133197481576423ull, 14343689420688171653ull, 1554000736333843473ull, 3737180754699920577ull}}, {{2830301257639679216ull, 2047276860289025427ull, 12500465506277121931ull, 2335737971687450360ull}}, {{17372934627331762732ull, 16394154130643445495ull, 15625581882846402413ull, 2919672464609312950ull}}, {{17104482265737315511ull, 6657634608022143157ull, 10308605316703227209ull, 3649590580761641188ull}}, {{7545544776889480677ull, 12933729278455066851ull, 12885756645879034011ull, 4561988225952051485ull}}, {{2410122476342231471ull, 5777737789820722830ull, 10359440912888090209ull, 2851242641220032178ull}}, {{12236025132282565147ull, 11833858255703291441ull, 3725929104255336953ull, 3564053301525040223ull}}, {{1459973360071042721ull, 957264764346950590ull, 45725361891783288ull, 4455066626906300279ull}}, {{14747541405326565413ull, 598290477716844118ull, 6946107378823446411ull, 2784416641816437674ull}}, {{9211054719803430958ull, 14582921152428218860ull, 17906006260384083821ull, 3480520802270547092ull}}, {{11513818399754288698ull, 4393593385253109863ull, 3935763751770553161ull, 4350651002838183866ull}}, {{14113665527487512292ull, 14275210911851663424ull, 7071538363283983629ull, 2719156876773864916ull}}, {{17642081909359390365ull, 4008955584532415568ull, 8839422954104979537ull, 3398946095967331145ull}}, {{3605858312989686340ull, 9622880499092907365ull, 15660964711058612325ull, 4248682619959163931ull}}, {{4559504454832247915ull, 8320143321146761055ull, 7482259935197938751ull, 2655426637474477457ull}}, {{1087694550112921990ull, 5788493133006063415ull, 13964510937424811343ull, 3319283296843096821ull}}, {{15194676242923316199ull, 2623930397830191364ull, 3620580616498850467ull, 4149104121053871027ull}}, {{273300614972296816ull, 17780857563139727267ull, 18403763949807639205ull, 2593190075658669391ull}}, {{14176683823997534732ull, 8391013898642495371ull, 18393018918832161103ull, 3241487594573336739ull}}, {{13109168761569530511ull, 5877081354875731310ull, 18379587630112813475ull, 4051859493216670924ull}}, {{3581544457553568666ull, 1367332837583638117ull, 2263870231965732614ull, 2532412183260419328ull}}, {{9088616590369348736ull, 10932538083834323454ull, 2829837789957165767ull, 3165515229075524160ull}}, {{2137398701106910112ull, 9053986586365516414ull, 3537297237446457209ull, 3956894036344405200ull}}, {{15170932243473982532ull, 17187956662546917518ull, 2210810773404035755ull, 2473058772715253250ull}}, {{9740293267487702357ull, 16873259809756258994ull, 11986885503609820502ull, 3091323465894066562ull}}, {{2951994547504852138ull, 11868202725340547935ull, 5760234842657499820ull, 3864154332367583203ull}}, {{8762525619831614443ull, 16640998740192618267ull, 1294303767447243435ull, 2415096457729739502ull}}, {{6341471006362130149ull, 16189562406813384930ull, 10841251746163830102ull, 3018870572162174377ull}}, {{17150210794807438494ull, 11013580971661955354ull, 18163250701132175532ull, 3773588215202717971ull}}, {{15330567765182036963ull, 16106860144143497904ull, 9046188678993915755ull, 2358492634501698732ull}}, {{716465632767994588ull, 15521889161751984477ull, 11307735848742394694ull, 2948115793127123415ull}}, {{5507268059387381139ull, 10178989415335204788ull, 9522983792500605464ull, 3685144741408904269ull}}, {{6884085074234226423ull, 12723736769169005985ull, 16515415759053144734ull, 4606430926761130336ull}}, {{15831768217464861275ull, 3340649462303240836ull, 10322134849408215459ull, 2879019329225706460ull}}, {{1342966198121524977ull, 18010869883161214758ull, 12902668561760269323ull, 3598774161532133075ull}}, {{10902079784506682029ull, 17901901335524130543ull, 11516649683772948750ull, 4498467701915166344ull}}, {{13731328892957758125ull, 6577002316275193685ull, 7197906052358092969ull, 2811542313696978965ull}}, {{3329103060915033944ull, 12832938913771380011ull, 13609068583875004115ull, 3514427892121223706ull}}, {{17996436881425956141ull, 11429487623786837109ull, 7787963692988979336ull, 4393034865151529633ull}}, {{13553616060104916541ull, 7143429764866773193ull, 16396692354186581845ull, 2745646790719706020ull}}, {{3106962019848981964ull, 13540973224510854396ull, 2049121369023675690ull, 3432058488399632526ull}}, {{3883702524811227454ull, 7702844493783792187ull, 11784773748134370421ull, 4290073110499540657ull}}, {{121471068793323207ull, 7120120817828564069ull, 447954564942899657ull, 2681295694062212911ull}}, {{4763524854419041913ull, 13511837040713092990ull, 14395001261460788283ull, 3351619617577766138ull}}, {{15177778104878578199ull, 12278110282463978333ull, 8770379539971209546ull, 4189524521972207673ull}}, {{11791954324762805326ull, 12285504944967374362ull, 17010702258550475726ull, 2618452826232629795ull}}, {{5516570869098730850ull, 6133509144354442145ull, 16651691804760706754ull, 3273066032790787244ull}}, {{11507399604800801466ull, 16890258467297828489ull, 2367870682241331826ull, 4091332540988484056ull}}, {{274595725359419061ull, 15168097560488530710ull, 1479919176400832391ull, 2557082838117802535ull}}, {{9566616693554049634ull, 14348435932183275483ull, 15684957025783204201ull, 3196353547647253168ull}}, {{7346584848515174138ull, 4100486859946930642ull, 1159452208519453636ull, 3995441934559066461ull}}, {{9203301548749371740ull, 11786176324321607459ull, 3030500639538352474ull, 2497151209099416538ull}}, {{6892440917509326771ull, 5509348368547233516ull, 13011497836277716401ull, 3121439011374270672ull}}, {{8615551146886658464ull, 11498371479111429799ull, 16264372295347145501ull, 3901798764217838340ull}}, {{12302248494445243396ull, 9492325183658337576ull, 941860647737190130ull, 2438624227636148963ull}}, {{15377810618056554245ull, 2642034442718146162ull, 15012383864953651375ull, 3048280284545186203ull}}, {{9998891235715916998ull, 17137601108679846415ull, 14153793812764676314ull, 3810350355681482754ull}}, {{13166836049963529980ull, 15322686711352291913ull, 13457807151405310600ull, 2381468972300926721ull}}, {{2623487007172248763ull, 706614315480813276ull, 2987200883974474539ull, 2976836215376158402ull}}, {{3279358758965310954ull, 14718325949633180307ull, 12957373141822868981ull, 3721045269220198002ull}}, {{18190500288849177010ull, 11504796727734431643ull, 12710044232066681017ull, 2325653293262623751ull}}, {{18126439342634083359ull, 545937854385875842ull, 11275869271655963368ull, 2907066616578279689ull}}, {{13434677141437828390ull, 682422317982344803ull, 259778534287790498ull, 3633833270722849612ull}}, {{12181660408369897584ull, 10076399934332706812ull, 324723167859738122ull, 4542291588403562015ull}}, {{16836909792085961798ull, 10909435977385329661ull, 7120481007553418182ull, 2838932242752226259ull}}, {{7211079184825288535ull, 4413422934876886269ull, 4288915241014384824ull, 3548665303440282824ull}}, {{13625534999458998573ull, 5516778668596107836ull, 5361144051267981030ull, 4435831629300353530ull}}, {{17739331411516649916ull, 17283044723154731109ull, 7962401050469876047ull, 2772394768312720956ull}}, {{8339106209113648683ull, 16992119885516025983ull, 9953001313087345059ull, 3465493460390901195ull}}, {{5812196742964672950ull, 16628463838467644575ull, 7829565622931793420ull, 4331866825488626494ull}}, {{10550151991994002450ull, 1169417862187502051ull, 281792495904982984ull, 2707416765930391559ull}}, {{8576003971565115158ull, 1461772327734377564ull, 14187298675163392442ull, 3384270957412989448ull}}, {{10720004964456393948ull, 11050587446522747763ull, 17734123343954240552ull, 4230338696766236810ull}}, {{4394160093571552266ull, 6906617154076717352ull, 15695513108398788249ull, 2643961685478898006ull}}, {{5492700116964440332ull, 13244957461023284594ull, 10396019348643709503ull, 3304952106848622508ull}}, {{16089247183060326223ull, 11944510807851717838ull, 12995024185804636879ull, 4131190133560778135ull}}, {{5444093470985315985ull, 14382848282548405505ull, 15039419143768979905ull, 2581993833475486334ull}}, {{11416802857159032886ull, 4143502297903343169ull, 9575901892856449074ull, 3227492291844357918ull}}, {{435945516166627395ull, 14402749909233954770ull, 2746505329215785534ull, 4034365364805447398ull}}, {{4884151966031530026ull, 4390032674843833827ull, 15551623886042029671ull, 2521478353003404623ull}}, {{1493503939112024628ull, 875854825127404380ull, 14827843839125149185ull, 3151847941254255779ull}}, {{1866879923890030785ull, 5706504549836643379ull, 13923118780479048577ull, 3939809926567819724ull}}, {{17307701016927126905ull, 15095780389716371871ull, 17925321274654181168ull, 2462381204104887327ull}}, {{17022940252731520727ull, 422981413435913223ull, 17794965574890338557ull, 3077976505131109159ull}}, {{16666989297487013005ull, 5140412785222279433ull, 17632020950185535292ull, 3847470631413886449ull}}, {{3499339283288301272ull, 12436130027618700454ull, 4102484066224877701ull, 2404669144633679031ull}}, {{13597546140965152398ull, 1710104479241211855ull, 516419064353709223ull, 3005836430792098789ull}}, {{12385246657779052593ull, 15972688654333678531ull, 5257209848869524432ull, 3757295538490123486ull}}, {{5434936151898213919ull, 9982930408958549082ull, 17120814210825616482ull, 2348309711556327178ull}}, {{16017042226727543207ull, 3255290974343410544ull, 12177645726677244795ull, 2935387139445408973ull}}, {{1574558709699877392ull, 17904171773211426893ull, 1386999103064392281ull, 3669233924306761217ull}}, {{6579884405552234644ull, 8545156661232119904ull, 6345434897257878256ull, 4586542405383451521ull}}, {{4112427753470146653ull, 5340722913270074940ull, 15495111856854643670ull, 2866589003364657200ull}}, {{5140534691837683316ull, 15899275678442369483ull, 922145747358752971ull, 3583236254205821501ull}}, {{1813982346369716241ull, 15262408579625573950ull, 5764368202625829118ull, 4479045317757276876ull}}, {{14968797021763236363ull, 4927319343838595814ull, 12826102163495919007ull, 2799403323598298047ull}}, {{9487624240349269645ull, 1547463161370856864ull, 11420941685942510855ull, 3499254154497872559ull}}, {{11859530300436587056ull, 15769387006995734792ull, 9664491089000750664ull, 4374067693122340699ull}}, {{7412206437772866910ull, 9855866879372334245ull, 3734463921411775213ull, 2733792308201462937ull}}, {{13876944065643471542ull, 16931519617642805710ull, 9279765920192106920ull, 3417240385251828671ull}}, {{8122808045199563619ull, 2717655448343955522ull, 6988021381812745747ull, 4271550481564785839ull}}, {{9688441046677115166ull, 17839435719710829865ull, 11285042391274047947ull, 2669719050977991149ull}}, {{16722237326773781862ull, 17687608631211149427ull, 271244933810396222ull, 3337148813722488937ull}}, {{16291110640039839423ull, 12886138752159160976ull, 4950742185690383182ull, 4171436017153111171ull}}, {{10181944150024899640ull, 3442150701672087706ull, 788370856842795537ull, 2607147510720694482ull}}, {{3504058150676348741ull, 8914374395517497537ull, 10208835607908270229ull, 3258934388400868102ull}}, {{8991758706772823831ull, 15754654012824259825ull, 3537672473030561978ull, 4073667985501085128ull}}, {{17149064237801484654ull, 14458344776442550294ull, 2211045295644101236ull, 2546042490938178205ull}}, {{12212958260397080010ull, 18072930970553187868ull, 7375492637982514449ull, 3182553113672722756ull}}, {{15266197825496350012ull, 8756105657909321123ull, 9219365797478143062ull, 3978191392090903445ull}}, {{7235530631721524806ull, 860880017765937798ull, 8067946632637533366ull, 2486369620056814653ull}}, {{18267785326506681815ull, 10299472059062198055ull, 14696619309224304611ull, 3107962025071018316ull}}, {{18223045639705964365ull, 8262654055400359665ull, 18370774136530380764ull, 3884952531338772895ull}}, {{4471874497175145872ull, 14387530821480000599ull, 18399262862972569833ull, 2428095332086733059ull}}, {{978157103041544436ull, 4149355471567837037ull, 18387392560288324388ull, 3035119165108416324ull}}, {{5834382397229318449ull, 5186694339459796296ull, 4537496626650853869ull, 3793898956385520406ull}}, {{3646488998268324031ull, 5547526971376066637ull, 16670993446938947380ull, 2371186847740950253ull}}, {{9169797266262792942ull, 6934408714220083296ull, 7003683753391520513ull, 2963983559676187817ull}}, {{11462246582828491178ull, 13279696911202492024ull, 13366290710166788545ull, 3704979449595234771ull}}, {{7163904114267806986ull, 1382281541860475659ull, 6048088684640548889ull, 2315612155997021732ull}}, {{4343194124407370829ull, 6339537945752982478ull, 7560110855800686111ull, 2894515194996277165ull}}, {{14652364692363989344ull, 3312736413763840193ull, 14061824588178245543ull, 3618143993745346456ull}}, {{4480397810172822968ull, 17975978572486963954ull, 17577280735222806928ull, 4522679992181683070ull}}, {{7411934649785402259ull, 11234986607804352471ull, 6374114441086866426ull, 2826674995113551919ull}}, {{4653232293804364919ull, 4820361222900664781ull, 3355957032931195129ull, 3533343743891939899ull}}, {{10428226385682844053ull, 10637137547053218880ull, 18030004346446157623ull, 4416679679864924873ull}}, {{6517641491051777533ull, 13565739994549343656ull, 4351223688887766658ull, 2760424799915578046ull}}, {{8147051863814721917ull, 7733802956331903762ull, 14662401647964484131ull, 3450530999894472557ull}}, {{960442792913626588ull, 5055567676987491799ull, 4492944004673441452ull, 4313163749868090697ull}}, {{7517805773212098474ull, 12383101834971958182ull, 14337305048989370667ull, 2695727343667556685ull}}, {{173885179660347284ull, 10867191275287559824ull, 4086573255954549622ull, 3369659179584445857ull}}, {{217356474575434105ull, 4360617057254673972ull, 9719902588370574932ull, 4212073974480557321ull}}, {{9359219833464422124ull, 11948757697638947040ull, 17604154163800079092ull, 2632546234050348325ull}}, {{11699024791830527654ull, 14935947122048683800ull, 8170134649467935153ull, 3290682792562935407ull}}, {{14623780989788159568ull, 4834875847278691038ull, 5600982293407531038ull, 4113353490703669259ull}}, {{4528177100190211826ull, 16856855459831345611ull, 1194770924166012946ull, 2570845931689793287ull}}, {{1048535356810376878ull, 11847697287934406206ull, 15328521710489679895ull, 3213557414612241608ull}}, {{10534041232867746906ull, 10197935591490619853ull, 713908064402548253ull, 4016946768265302011ull}}, {{8889618779756035768ull, 8679552753895331360ull, 16587093604747450322ull, 2510591730165813756ull}}, {{11112023474695044710ull, 1626068905514388392ull, 2287122932224761287ull, 3138239662707267196ull}}, {{13890029343368805888ull, 15867644187175149202ull, 2858903665280951608ull, 3922799578384083995ull}}, {{13292954358032891584ull, 9917277616984468251ull, 17927715855296452419ull, 2451749736490052496ull}}, {{12004506929113726576ull, 7784911002803197410ull, 3962900745411013908ull, 3064687170612565621ull}}, {{5782261624537382412ull, 9731138753503996763ull, 9565311950191155289ull, 3830858963265707026ull}}, {{1308070506122170056ull, 17611176767008467737ull, 10590005987296859959ull, 2394286852041066891ull}}, {{6246774151080100473ull, 17402284940333196767ull, 8625821465693687045ull, 2992858565051333614ull}}, {{3196781670422737688ull, 7917798120134332247ull, 1558904795262332999ull, 3741073206314167018ull}}, {{8915517571655292911ull, 11866152852725039510ull, 5586001515466346028ull, 2338170753946354386ull}}, {{1921024927714340331ull, 14832691065906299388ull, 16205873931187708343ull, 2922713442432942982ull}}, {{2401281159642925413ull, 13929177813955486331ull, 11033970377129859621ull, 3653391803041178728ull}}, {{16836659504835820478ull, 3576414212162194201ull, 13792462971412324527ull, 4566739753801473410ull}}, {{3605383162881305943ull, 9152787910242453232ull, 13231975375560090733ull, 2854212346125920881ull}}, {{4506728953601632429ull, 16052670906230454444ull, 2704911164167949704ull, 3567765432657401102ull}}, {{5633411192002040536ull, 1619094559078516439ull, 12604510992064712939ull, 4459706790821751377ull}}, {{10438411022642357191ull, 17152835163919930438ull, 960290342399363730ull, 2787316744263594611ull}}, {{3824641741448170681ull, 12217671918045137240ull, 15035420983281368375ull, 3484145930329493263ull}}, {{4780802176810213351ull, 10660403879129033646ull, 14182590210674322565ull, 4355182412911866579ull}}, {{16823059415788547056ull, 8968595433669339980ull, 6558275872457757651ull, 2721989008069916612ull}}, {{2582080196026132204ull, 6599058273659287072ull, 8197844840572197064ull, 3402486260087395765ull}}, {{3227600245032665255ull, 8248822842074108840ull, 14858992069142634234ull, 4253107825109244706ull}}, {{2017250153145415785ull, 9767200294723705929ull, 13898556061641534300ull, 2658192390693277941ull}}, {{7133248709859157635ull, 12209000368404632411ull, 3538137021769754163ull, 3322740488366597427ull}}, {{4304874868896559139ull, 10649564442078402610ull, 18257729332494356416ull, 4153425610458246783ull}}, {{7302232811487737366ull, 6655977776299001631ull, 18328609860450054616ull, 2595891006536404239ull}}, {{4516104995932283804ull, 8319972220373752039ull, 18299076307135180366ull, 3244863758170505299ull}}, {{1033445226487966851ull, 1176593238612414241ull, 18262159365491587554ull, 4056079697713131624ull}}, {{12175118312623449042ull, 5347056792560146804ull, 11413849603432242221ull, 2535049811070707265ull}}, {{15218897890779311302ull, 11295507009127571409ull, 432253949008139064ull, 3168812263838384082ull}}, {{5188564308191975416ull, 14119383761409464262ull, 9763689473114949638ull, 3961015329797980102ull}}, {{17077910747902148347ull, 4212928832453527259ull, 1490619902269455620ull, 2475634581123737564ull}}, {{16735702416450297529ull, 5266161040566909074ull, 1863274877836819525ull, 3094543226404671955ull}}, {{11696255983708096104ull, 11194387319136024247ull, 16164151652578188118ull, 3868179033005839943ull}}, {{14227689017458641921ull, 2384806056032627250ull, 17020123810502449430ull, 2417611895628649964ull}}, {{8561239234968526593ull, 12204379606895559871ull, 2828410689418510171ull, 3022014869535812456ull}}, {{6089863025283270337ull, 10643788490192061935ull, 3535513361773137714ull, 3777518586919765570ull}}, {{10723693418443125817ull, 11264053824797426613ull, 6821381869535598975ull, 2360949116824853481ull}}, {{18016302791481295175ull, 9468381262569395362ull, 13138413355346886623ull, 2951186396031066851ull}}, {{13297006452496843161ull, 7223790559784356299ull, 11811330675756220375ull, 3688982995038833564ull}}, {{12009572047193666047ull, 4418052181303057470ull, 14764163344695275469ull, 4611228743798541955ull}}, {{2894296511068653375ull, 5067125622528104871ull, 6921759081220853216ull, 2882017964874088722ull}}, {{17452928694117980431ull, 6333907028160131088ull, 17875570888380842328ull, 3602522456092610902ull}}, {{3369416793937923923ull, 7917383785200163861ull, 13121091573621277102ull, 4503153070115763628ull}}, {{4411728505424896404ull, 336678847322714509ull, 17424054270368073997ull, 2814470668822352267ull}}, {{10126346650208508409ull, 5032534577580781040ull, 17168381819532704592ull, 3518088336027940334ull}}, {{12657933312760635511ull, 6290668221975976300ull, 12237105237561104932ull, 4397610420034925418ull}}, {{17134580357330173003ull, 13155039675589760995ull, 12259876791903078486ull, 2748506512521828386ull}}, {{16806539428235328349ull, 7220427557632425436ull, 6101473953024072300ull, 3435633140652285483ull}}, {{2561430211584608820ull, 9025534447040531796ull, 3015156422852702471ull, 4294541425815356854ull}}, {{10824265919095156321ull, 12558488057041414228ull, 15719530819565102756ull, 2684088391134598033ull}}, {{13530332398868945401ull, 15698110071301767785ull, 5814355469174214733ull, 3355110488918247542ull}}, {{3077857443304018039ull, 5787579533845046020ull, 16491316373322544225ull, 4193888111147809427ull}}, {{11147032938919787083ull, 15146452254721623522ull, 8001229724112896188ull, 2621180069467380892ull}}, {{4710419136794958045ull, 486321244692477787ull, 10001537155141120236ull, 3276475086834226115ull}}, {{1276337902566309652ull, 607901555865597234ull, 7890235425499012391ull, 4095593858542782644ull}}, {{5409397207531331437ull, 7297467500057080127ull, 14154769177791658552ull, 2559746161589239152ull}}, {{2150060490986776392ull, 9121834375071350159ull, 17693461472239573190ull, 3199682701986548940ull}}, {{16522633669015634202ull, 2178920931984411890ull, 3670082766589914872ull, 3999603377483186176ull}}, {{14938332061562159280ull, 1361825582490257431ull, 2293801729118696795ull, 2499752110926991360ull}}, {{14061229058525311196ull, 15537340033394985501ull, 2867252161398370993ull, 3124690138658739200ull}}, {{3741478267874475283ull, 5586616986461568165ull, 3584065201747963742ull, 3905862673323424000ull}}, {{4644266926635241004ull, 17326693671820643815ull, 2240040751092477338ull, 2441164170827140000ull}}, {{1193647639866663351ull, 12434995052921028961ull, 2800050938865596673ull, 3051455213533925000ull}}, {{6103745568260717093ull, 1708685760869122489ull, 3500063673581995842ull, 3814319016917406250ull}}, {{15344056026231417943ull, 5679614618970589459ull, 6799225814416135305ull, 2383949385573378906ull}}, {{14568384014361884525ull, 11711204292140624728ull, 17722404304874944939ull, 2979936731966723632ull}}, {{18210480017952355656ull, 10027319346748393006ull, 3706261307384129558ull, 3724920914958404541ull}}, {{6769863992792834381ull, 1655388573290357725ull, 4622256326328774926ull, 2328075571849002838ull}}, {{13074016009418430880ull, 11292607753467722964ull, 15001192444765744465ull, 2910094464811253547ull}}, {{16342520011773038600ull, 280701636552489993ull, 14139804537529792678ull, 3637618081014066934ull}}, {{6593091959434134538ull, 9574249082545388300ull, 8451383635057465039ull, 4547022601267583668ull}}, {{13344054511501109895ull, 12901434704231949543ull, 14505486808765691457ull, 2841889125792239792ull}}, {{12068382120948999464ull, 2291735325007773217ull, 18131858510957114322ull, 3552361407240299740ull}}, {{1250419595904085618ull, 12088041193114492330ull, 4218079064986841286ull, 4440451759050374676ull}}, {{5393198265867441415ull, 2943339727269169802ull, 11859671452471551612ull, 2775282349406484172ull}}, {{15964869869189077577ull, 3679174659086462252ull, 14824589315589439515ull, 3469102936758105215ull}}, {{1509343262776795355ull, 18434026379140241528ull, 13919050626059411489ull, 4336378670947631519ull}}, {{943339539235497097ull, 4603737459321569099ull, 15616935668928214037ull, 2710236669342269699ull}}, {{15014232479326535083ull, 10366357842579349277ull, 14909483567732879642ull, 3387795836677837124ull}}, {{4932732543876005142ull, 3734575266369410789ull, 190110385956547937ull, 4234744795847296406ull}}, {{5388800849136197166ull, 13863324587549351503ull, 13953877046505006172ull, 2646715497404560253ull}}, {{2124315042992858553ull, 17329155734436689379ull, 3607288252849094003ull, 3308394371755700317ull}}, {{16490451859023236904ull, 17049758649618473819ull, 9120796334488755408ull, 4135492964694625396ull}}, {{8000689402675829113ull, 10656099156011546137ull, 14923869745910247938ull, 2584683102934140872ull}}, {{14612547771772174295ull, 4096751908159656863ull, 208093108678258307ull, 3230853878667676091ull}}, {{13653998696287829965ull, 509253866772183175ull, 14095174441129986596ull, 4038567348334595113ull}}, {{15451278212820975584ull, 9541655703587390292ull, 1891954998065159766ull, 2524104592709121946ull}}, {{867353692316667864ull, 2703697592629462058ull, 11588315784436225516ull, 3155130740886402432ull}}, {{10307564152250610638ull, 3379621990786827572ull, 14485394730545281895ull, 3943913426108003040ull}}, {{15665599632011407457ull, 9029792771882849088ull, 9053371706590801184ull, 2464945891317501900ull}}, {{1135255466304707705ull, 11287240964853561361ull, 11316714633238501480ull, 3081182364146877375ull}}, {{6030755351308272535ull, 14109051206066951701ull, 9534207273120738946ull, 3851477955183596719ull}}, {{6075065103781364287ull, 13429843022219232717ull, 12876408573341543697ull, 2407173721989747949ull}}, {{12205517398154093262ull, 2952245722491877184ull, 2260452661394765910ull, 3008967152487184937ull}}, {{15256896747692616578ull, 12913679189969622288ull, 7437251845170845291ull, 3761208940608981171ull}}, {{9535560467307885361ull, 5765206484517319978ull, 2342439394018084355ull, 2350755587880613232ull}}, {{2696078547280080893ull, 2594822087219262069ull, 2928049242522605444ull, 2938444484850766540ull}}, {{7981784202527489021ull, 3243527609024077586ull, 3660061553153256805ull, 3673055606063458175ull}}, {{753858216304585468ull, 8666095529707484887ull, 18410134996723734718ull, 4591319507579322718ull}}, {{7388690412831447773ull, 804623687639790150ull, 6894648354524946295ull, 2869574692237076699ull}}, {{12490979184533909ull, 14840837664831901400ull, 4006624424728794964ull, 3586968365296345874ull}}, {{15613723980667386ull, 104303007330325134ull, 14231652567765769514ull, 4483710456620432342ull}}, {{13844816632770080828ull, 4676875398008841112ull, 4283096836426218042ull, 2802319035387770214ull}}, {{17306020790962601035ull, 15069466284365827198ull, 14577243082387548360ull, 3502898794234712767ull}}, {{12409153951848475486ull, 390088781747732382ull, 13609867834557047547ull, 4378623492793390959ull}}, {{3144035201477909275ull, 16384706553088190403ull, 15423696424239236572ull, 2736639682995869349ull}}, {{17765102057129550305ull, 2034139117650686387ull, 5444562475016882004ull, 3420799603744836687ull}}, {{17594691552984549978ull, 2542673897063357984ull, 2194017075343714601ull, 4275999504681045859ull}}, {{10996682220615343736ull, 13118386231733068500ull, 17512161736585679289ull, 2672499690425653661ull}}, {{13745852775769179670ull, 2562924734384171913ull, 8055144115449935400ull, 3340624613032067077ull}}, {{3347257914429310876ull, 3203655917980214892ull, 14680616162739807154ull, 4175780766290083846ull}}, {{11315408233373095105ull, 6613970967165022211ull, 4563699083284991567ull, 2609862978931302404ull}}, {{9532574273288980978ull, 3655777690528889860ull, 5704623854106239459ull, 3262328723664128005ull}}, {{11915717841611226222ull, 18404780168443276037ull, 11742465836060187227ull, 4077910904580160006ull}}, {{9753166660220710341ull, 9197144596063353571ull, 2727355129110229113ull, 2548694315362600004ull}}, {{7579772306848500022ull, 16108116763506579868ull, 3409193911387786391ull, 3185867894203250005ull}}, {{9474715383560625027ull, 15523459935955836931ull, 8873178407662120893ull, 3982334867754062506ull}}, {{3615854105511696690ull, 12008005469186092034ull, 10157422523216213462ull, 2488959292346289066ull}}, {{13743189668744396671ull, 5786634799627839234ull, 3473406117165491020ull, 3111199115432861333ull}}, {{7955615049075720030ull, 7233293499534799043ull, 8953443664884251679ull, 3888998894291076666ull}}, {{2666416396458631067ull, 11438337464850331258ull, 10207588308980045203ull, 2430624308931922916ull}}, {{12556392532428064642ull, 9686235812635526168ull, 12759485386225056504ull, 3038280386164903645ull}}, {{15695490665535080802ull, 12107794765794407710ull, 2114298677499156918ull, 3797850482706129557ull}}, {{5197995647532037597ull, 2955685710194116915ull, 3627279682650667026ull, 2373656551691330973ull}}, {{1885808540987659093ull, 12917979174597421952ull, 9145785621740721686ull, 2967070689614163716ull}}, {{2357260676234573866ull, 6924101931392001632ull, 11432232027175902108ull, 3708838362017704645ull}}, {{1473287922646608666ull, 13550935743974776828ull, 9450988026198632769ull, 2318023976261065403ull}}, {{1841609903308260833ull, 3103611624686307323ull, 7202049014320903058ull, 2897529970326331754ull}}, {{16137070434417489753ull, 13102886567712659961ull, 18225933304755904630ull, 3621912462907914692ull}}, {{6336279987739698479ull, 7155236172786049144ull, 4335672557235329172ull, 4527390578634893366ull}}, {{3960174992337311550ull, 13695394644846056523ull, 16544853403554244444ull, 2829619111646808353ull}}, {{338532721994251533ull, 17119243306057570654ull, 6846008699160641843ull, 3537023889558510442ull}}, {{9646537939347590224ull, 16787368114144575413ull, 17780882910805578112ull, 4421279861948138052ull}}, {{8334929221305937842ull, 10492105071340359633ull, 1889679782398710512ull, 2763299913717586283ull}}, {{15030347545059810206ull, 13115131339175449541ull, 16197157783280551852ull, 3454124892146982853ull}}, {{4952876376042599046ull, 16393914173969311927ull, 6411389173818526103ull, 4317656115183728567ull}}, {{10013076762667706260ull, 17163725386371901810ull, 10924647261277660670ull, 2698535071989830354ull}}, {{3292973916479857017ull, 12231284696110101455ull, 4432437039742300030ull, 3373168839987287943ull}}, {{17951275450881984983ull, 6065733833282851010ull, 928860281250487134ull, 4216461049984109929ull}}, {{15831233175228628518ull, 17626141701083945593ull, 12109752721850024218ull, 2635288156240068705ull}}, {{5953983413753621936ull, 12809305089500156184ull, 1302132847030366561ull, 3294110195300085882ull}}, {{7442479267192027420ull, 2176573306593031518ull, 10851038095642734010ull, 4117637744125107352ull}}, {{39863523567629234ull, 5972044335048032603ull, 6781898809776708756ull, 2573523590078192095ull}}, {{13884887459741700254ull, 7465055418810040753ull, 3865687493793498041ull, 3216904487597740119ull}}, {{3521051269394961605ull, 13943005291939938846ull, 220423348814484647ull, 4021130609497175149ull}}, {{16035715098654014715ull, 15631907335103543634ull, 2443607602222746856ull, 2513206630935734468ull}}, {{10821271836462742586ull, 1093140095169877927ull, 3054509502778433571ull, 3141508288669668085ull}}, {{8914903777151040329ull, 15201483174244511121ull, 8429822896900429867ull, 3926885360837085106ull}}, {{17101029906787869966ull, 7195083974689125498ull, 9880325328990156571ull, 2454303350523178191ull}}, {{12152915346630061649ull, 4382168949934018969ull, 7738720642810307810ull, 3067879188153972739ull}}, {{1356086128005413349ull, 14701083224272299520ull, 5061714785085496858ull, 3834848985192465924ull}}, {{847553830003383343ull, 13799863033597575104ull, 12386943777533211344ull, 2396780615745291202ull}}, {{1059442287504229179ull, 17249828791996968880ull, 6260307685061738372ull, 2995975769681614003ull}}, {{1324302859380286474ull, 3115541916286659484ull, 3213698587899785062ull, 3744969712102017504ull}}, {{10051061323967454854ull, 15782271752961325889ull, 2008561617437365663ull, 2340606070063760940ull}}, {{17175512673386706472ull, 15116153672774269457ull, 2510702021796707079ull, 2925757587579701175ull}}, {{7634332786451219377ull, 14283506072540448918ull, 16973435582528047561ull, 3657196984474626468ull}}, {{319543946209248414ull, 4019324535393397436ull, 2770050404450507836ull, 4571496230593283086ull}}, {{9423087003235556067ull, 11735449871475649205ull, 15566339558063731109ull, 2857185144120801928ull}}, {{16390544772471832987ull, 834254284062397794ull, 1011180373870112271ull, 3571481430151002411ull}}, {{11264808928735015426ull, 14877875910360160955ull, 15099033522619804050ull, 4464351787688753013ull}}, {{4734662571245690689ull, 13910358462402488501ull, 11742738960851071483ull, 2790219867305470633ull}}, {{10530014232484501266ull, 12776262059575722722ull, 843365645781675642ull, 3487774834131838292ull}}, {{3939145753750850774ull, 6746955537614877595ull, 1054207057227094553ull, 4359718542664797865ull}}, {{156123086880587782ull, 15746062257077768257ull, 12188094456835403855ull, 2724824089165498665ull}}, {{4806839877028122631ull, 15070891802919822417ull, 1400060015762091107ull, 3406030111456873332ull}}, {{10620235864712541193ull, 14226928735222390117ull, 1750075019702613884ull, 4257537639321091665ull}}, {{8943490424659032198ull, 18115202496368769631ull, 12623011933382603437ull, 2660961024575682290ull}}, {{6567677012396402343ull, 8808945065178798327ull, 6555392879873478489ull, 3326201280719602863ull}}, {{3597910247068115025ull, 15622867349900885813ull, 3582555081414460207ull, 4157751600899503579ull}}, {{4554536913631265843ull, 16681821121329135489ull, 18379997990379895293ull, 2598594750562189736ull}}, {{10304857160466470207ull, 7017218346379255649ull, 4528253414265317501ull, 3248243438202737171ull}}, {{17492757469010475663ull, 13383208951401457465ull, 1048630749404258972ull, 4060304297753421464ull}}, {{4015444390490465433ull, 17587877631480686724ull, 655394218377661857ull, 2537690186095888415ull}}, {{5019305488113081792ull, 8149788984068694693ull, 14654300828254241034ull, 3172112732619860518ull}}, {{10885817878568740143ull, 963864193231092558ull, 9094503998463025485ull, 3965140915774825648ull}}, {{2191950155678074686ull, 2908258129983126801ull, 5684064999039390928ull, 2478213072359266030ull}}, {{7351623713024981261ull, 3635322662478908501ull, 16328453285654014468ull, 3097766340449082537ull}}, {{13801215659708614480ull, 4544153328098635626ull, 6575508551785354373ull, 3872207925561353172ull}}, {{13237445805745271954ull, 5145938839275341218ull, 13333064881720622291ull, 2420129953475845732ull}}, {{7323435220326814135ull, 1820737530666788619ull, 16666331102150777864ull, 3025162441844807165ull}}, {{4542608006981129764ull, 2275921913333485774ull, 6997855822406308618ull, 3781453052306008957ull}}, {{16674188059645369815ull, 6034137214260816512ull, 6679502898217636838ull, 2363408157691255598ull}}, {{2395991000847160653ull, 16766043554680796449ull, 17572750659626821855ull, 2954260197114069497ull}}, {{7606674769486338720ull, 16345868424923607657ull, 8130880269251363607ull, 3692825246392586872ull}}, {{16283386776997431460ull, 17133696793218336641ull, 5081800168282102254ull, 2308015778995366795ull}}, {{6519175415964625613ull, 12193748954668144994ull, 1740564191925239914ull, 2885019723744208494ull}}, {{17372341306810557824ull, 6018814156480405434ull, 11399077276761325701ull, 3606274654680260617ull}}, {{12492054596658421472ull, 12135203714027894697ull, 413788540669493414ull, 4507843318350325772ull}}, {{890005095270431564ull, 2972816302840046282ull, 9481989874773209192ull, 2817402073968953607ull}}, {{10335878405942815263ull, 3716020378550057852ull, 7240801325039123586ull, 3521752592461192009ull}}, {{12919848007428519078ull, 13868397510042348123ull, 13662687674726292386ull, 4402190740576490011ull}}, {{5769061995429130472ull, 13279434462203855481ull, 6233336787490238789ull, 2751369212860306257ull}}, {{11823013512713800994ull, 2764235022472655639ull, 12403357002790186391ull, 3439211516075382821ull}}, {{10167080872464863339ull, 17290351833372983261ull, 1669138198205569276ull, 4299014395094228527ull}}, {{8660268554504233539ull, 1583097859003338730ull, 7960740401519562654ull, 2686883996933892829ull}}, {{1601963656275516115ull, 11202244360608949221ull, 14562611520326841221ull, 3358604996167366036ull}}, {{6614140588771783048ull, 167747395479022814ull, 18203264400408551527ull, 4198256245209207545ull}}, {{17968895923264528117ull, 7022371149815471114ull, 4459511222614262848ull, 2623910153255754716ull}}, {{13237747867225884338ull, 8777963937269338893ull, 5574389028267828560ull, 3279887691569693395ull}}, {{2712126778750191711ull, 10972454921586673617ull, 2356300266907397796ull, 4099859614462116744ull}}, {{13224294282787339580ull, 16081156362846446818ull, 1472687666817123622ull, 2562412259038822965ull}}, {{7306995816629398666ull, 10878073416703282715ull, 6452545601948792432ull, 3203015323798528706ull}}, {{4522058752359360429ull, 13597591770879103394ull, 17289054039290766348ull, 4003769154748160882ull}}, {{7437972738651988172ull, 17721866893654215429ull, 15417344792984116871ull, 2502355721717600551ull}}, {{13909151941742373119ull, 17540647598640381382ull, 14659994972802758185ull, 3127944652147000689ull}}, {{8163067890323190591ull, 8090751443018313016ull, 4489935660721284020ull, 3909930815183750862ull}}, {{5101917431451994119ull, 14280091688741221443ull, 16641267843232966224ull, 2443706759489844288ull}}, {{1765710770887604745ull, 17850114610926526804ull, 2354840730331656164ull, 3054633449362305361ull}}, {{2207138463609505931ull, 3865899189948606889ull, 7555236931341958110ull, 3818291811702881701ull}}, {{12908676585824410967ull, 16251245049000043017ull, 7027866091302417770ull, 2386432382314301063ull}}, {{2300787676998349997ull, 11090684274395277964ull, 4173146595700634309ull, 2983040477892876329ull}}, {{2875984596247937496ull, 28297287711933743ull, 9828119263053180791ull, 3728800597366095411ull}}, {{8715019400296042791ull, 6935214832461040445ull, 3836731530194544042ull, 2330500373353809632ull}}, {{15505460268797441393ull, 17892390577431076364ull, 4795914412743180052ull, 2913125466692262040ull}}, {{935081262287250125ull, 3918744148079293840ull, 5994893015928975066ull, 3641406833365327550ull}}, {{1168851577859062656ull, 14121802221953893108ull, 16716988306765994640ull, 4551758541706659437ull}}, {{9953904273016689968ull, 8826126388721183192ull, 12753960700942440602ull, 2844849088566662148ull}}, {{12442380341270862460ull, 1809285949046703182ull, 15942450876178050753ull, 3556061360708327685ull}}, {{6329603389733802267ull, 6873293454735766882ull, 6093005539940399729ull, 4445076700885409607ull}}, {{8567688137011014321ull, 15825023455278324061ull, 10725657490103831686ull, 2778172938053381004ull}}, {{15321296189691155805ull, 10557907282243129268ull, 13407071862629789608ull, 3472716172566726255ull}}, {{704876163404393140ull, 13197384102803911586ull, 12147153809859849106ull, 4340895215708407819ull}}, {{5052233620555133617ull, 12860051082679832645ull, 5286128121948711739ull, 2713059509817754887ull}}, {{10926978044121304925ull, 11463377834922402902ull, 1995974134008501770ull, 3391324387272193609ull}}, {{4435350518296855348ull, 5105850256798227820ull, 7106653685938015117ull, 4239155484090242011ull}}, {{11995466110790310401ull, 5496999419712586339ull, 2135815544497565496ull, 2649472177556401257ull}}, {{10382646620060500097ull, 6871249274640732924ull, 7281455449049344774ull, 3311840221945501571ull}}, {{12978308275075625121ull, 17812433630155691963ull, 4490133292884293063ull, 4139800277431876964ull}}, {{5805599662708571749ull, 18050300046488389333ull, 12029705344907458972ull, 2587375173394923102ull}}, {{11868685596813102590ull, 4116130984400935050ull, 5813759644279547908ull, 3234218966743653878ull}}, {{5612484959161602429ull, 5145163730501168813ull, 16490571592204210693ull, 4042773708429567347ull}}, {{5813646108689695470ull, 5521570340776924460ull, 8000764235913937731ull, 2526733567768479592ull}}, {{7267057635862119338ull, 2290276907543767671ull, 10000955294892422164ull, 3158416959710599490ull}}, {{4472136026400261268ull, 2862846134429709589ull, 3277822081760751897ull, 3948021199638249363ull}}, {{5100928025713857245ull, 13318493880087038253ull, 18189539865596327599ull, 2467513249773905851ull}}, {{10987846050569709460ull, 12036431331681409912ull, 18125238813568021595ull, 3084391562217382314ull}}, {{13734807563212136825ull, 10433853146174374486ull, 13433176480105251186ull, 3855489452771727893ull}}, {{3972568708580197612ull, 11132844234786371958ull, 10701578309279475943ull, 2409680907982329933ull}}, {{14189082922580022823ull, 9304369275055577043ull, 17988658905026732833ull, 3012101134977912416ull}}, {{13124667634797640624ull, 16242147612246859208ull, 4039079557573864425ull, 3765126418722390521ull}}, {{8202917271748525390ull, 3233813230013205149ull, 14053639769552135026ull, 2353204011701494075ull}}, {{14865332608113044642ull, 13265638574371282244ull, 12955363693512780878ull, 2941505014626867594ull}}, {{134921686431754186ull, 7358676181109326998ull, 6970832580036200290ull, 3676881268283584493ull}}, {{9392024144894468540ull, 18421717263241434555ull, 13325226743472638266ull, 4596101585354480616ull}}, {{3564172081345348886ull, 16125259307953284501ull, 8328266714670398916ull, 2872563490846550385ull}}, {{9066901120109074011ull, 1709830061232054010ull, 15022019411765386550ull, 3590704363558187981ull}}, {{2110254363281566706ull, 11360659613394843321ull, 4942466209424569475ull, 4488380454447734977ull}}, {{12848124023119448951ull, 4794569249158083123ull, 14618256426958825682ull, 2805237784029834360ull}}, {{11448469010471923285ull, 15216583598302379712ull, 18272820533698532102ull, 3506547230037292950ull}}, {{14310586263089904106ull, 9797357461023198832ull, 13617653630268389320ull, 4383184037546616188ull}}, {{8944116414431190067ull, 6123348413139499270ull, 17734405555772519133ull, 2739490023466635117ull}}, {{1956773481184211775ull, 12265871534851761992ull, 8332948889433485204ull, 3424362529333293897ull}}, {{2445966851480264719ull, 15332339418564702490ull, 15027872130219244409ull, 4280453161666617371ull}}, {{6140415300602553353ull, 2665183108961857200ull, 7086577072173333804ull, 2675283226041635857ull}}, {{7675519125753191692ull, 3331478886202321500ull, 13469907358644055159ull, 3344104032552044821ull}}, {{9594398907191489614ull, 17999406663035065587ull, 3002326143022905236ull, 4180130040690056027ull}}, {{3690656307780987057ull, 2026257127542140184ull, 18017354903885173437ull, 2612581275431285016ull}}, {{4613320384726233821ull, 7144507427855063134ull, 4074949556146915180ull, 3265726594289106271ull}}, {{14990022517762568085ull, 8930634284818828917ull, 482000926756256071ull, 4082158242861382839ull}}, {{11674607082815299005ull, 12499175455652849929ull, 7218779606863741900ull, 2551348901788364274ull}}, {{758200798236960044ull, 15623969319566062412ull, 18246846545434453183ull, 3189186127235455342ull}}, {{947750997796200055ull, 14918275631030190111ull, 13585186144938290671ull, 3986482659044319178ull}}, {{7509873401263706891ull, 16241451297034950675ull, 13102427359013819573ull, 2491551661902699486ull}}, {{4775655733152245709ull, 6466756066011524632ull, 7154662161912498659ull, 3114439577378374358ull}}, {{5969569666440307136ull, 3471759064087017886ull, 18166699739245399132ull, 3893049471722967947ull}}, {{17566039096807355672ull, 11393221451909161986ull, 9048344327814680505ull, 2433155919826854967ull}}, {{12734176834154418782ull, 406468759604288771ull, 6698744391340962728ull, 3041444899783568709ull}}, {{11306035024265635574ull, 508085949505360964ull, 12985116507603591314ull, 3801806124729460886ull}}, {{16289643927020798042ull, 4929239736868238506ull, 3504011798824856667ull, 2376128827955913054ull}}, {{11138682871921221744ull, 1549863652657910229ull, 13603386785385846642ull, 2970161034944891317ull}}, {{88295534619363468ull, 11160701602677163595ull, 3169175426450144590ull, 3712701293681114147ull}}, {{16196085773632959832ull, 2363752483245839342ull, 18121635706027198033ull, 2320438308550696341ull}}, {{11021735180186423982ull, 7566376622484687082ull, 8816986577251833829ull, 2900547885688370427ull}}, {{4553796938378254169ull, 14069656796533246757ull, 6409547203137404382ull, 3625684857110463034ull}}, {{10303932191400205615ull, 8363698958811782638ull, 17235306040776531286ull, 4532106071388078792ull}}, {{1828271601197740605ull, 615625830829976245ull, 10772066275485332054ull, 2832566294617549245ull}}, {{6897025519924563661ull, 9992904325392246114ull, 18076768862784052971ull, 3540707868271936556ull}}, {{17844653936760480384ull, 7879444388312919738ull, 4149217004770514598ull, 4425884835339920696ull}}, {{15764594728902688144ull, 312966724268186932ull, 2593260627981571624ull, 2766178022087450435ull}}, {{1258999337418808564ull, 391208405335233666ull, 17076633840259128242ull, 3457722527609313043ull}}, {{10797121208628286513ull, 9712382543523817890ull, 16734106281896522398ull, 4322153159511641304ull}}, {{11359886773820066975ull, 1458553071274998277ull, 10458816426185326499ull, 2701345724694775815ull}}, {{364800411992920006ull, 15658249394375911559ull, 8461834514304270219ull, 3376682155868469769ull}}, {{14291058570273313720ull, 14961125724542501544ull, 15188979161307725678ull, 4220852694835587211ull}}, {{8931911606420821075ull, 4739017559411675561ull, 7187268966603634597ull, 2638032934272242007ull}}, {{15776575526453414248ull, 10535457967691982355ull, 4372400189827155342ull, 3297541167840302509ull}}, {{15109033389639379905ull, 3945950422760202136ull, 10077186255711332082ull, 4121926459800378136ull}}, {{9443145868524612441ull, 7077905032652514239ull, 6298241409819582551ull, 2576204037375236335ull}}, {{7192246317228377647ull, 4235695272388254895ull, 3261115743847090285ull, 3220255046719045419ull}}, {{4378621878108084155ull, 9906305108912706523ull, 17911452735091026568ull, 4025318808398806773ull}}, {{430795664603858645ull, 6191440693070441577ull, 13500500968645585557ull, 2515824255249254233ull}}, {{5150180599182211210ull, 12350986884765439875ull, 3040568155524818234ull, 3144780319061567792ull}}, {{1826039730550376108ull, 6215361569102024036ull, 3800710194406022793ull, 3930975398826959740ull}}, {{10364646868448760876ull, 15413816026757234782ull, 11598815908358540053ull, 2456859624266849837ull}}, {{3732436548706175287ull, 5432211978164379766ull, 663461830166011355ull, 3071074530333562297ull}}, {{13888917722737494916ull, 2178578954278086803ull, 5441013306134902098ull, 3838843162916952871ull}}, {{6374730567497240371ull, 5973297864851192156ull, 10318162343975395667ull, 2399276976823095544ull}}, {{7968413209371550464ull, 2854936312636602291ull, 12897702929969244584ull, 2999096221028869430ull}}, {{5348830493287050175ull, 3568670390795752864ull, 6898756625606779922ull, 3748870276286086788ull}}, {{3343019058304406360ull, 6842105012674733444ull, 13535094927859013259ull, 2343043922678804242ull}}, {{4178773822880507950ull, 3940945247416028901ull, 7695496622968990766ull, 2928804903348505303ull}}, {{9835153297028022841ull, 14149553596124811934ull, 5007684760283850553ull, 3661006129185631629ull}}, {{3070569584430252743ull, 3851883939873851206ull, 10871291968782201096ull, 4576257661482039536ull}}, {{15754164045551071677ull, 2407427462421157003ull, 6794557480488875685ull, 2860161038426274710ull}}, {{15081019038511451692ull, 7620970346453834158ull, 17716568887465870414ull, 3575201298032843387ull}}, {{9627901761284538806ull, 302840896212516890ull, 17534025090904950114ull, 4469001622541054234ull}}, {{10629124619230224658ull, 4800961578560210960ull, 15570451700242981725ull, 2793126014088158896ull}}, {{13286405774037780823ull, 10612887991627651604ull, 1016320551594175540ull, 3491407517610198621ull}}, {{16608007217547226028ull, 13266109989534564505ull, 5882086707920107329ull, 4364259397012748276ull}}, {{3462475483325934412ull, 1373789715818020960ull, 12899676229304842889ull, 2727662123132967672ull}}, {{4328094354157418015ull, 6328923163199914104ull, 16124595286631053611ull, 3409577653916209590ull}}, {{5410117942696772518ull, 3299467935572504726ull, 10932372071434041206ull, 4261972067395261988ull}}, {{17216381769467646536ull, 15897225515014979165ull, 16056104581501051561ull, 2663732542122038742ull}}, {{7685419156552394458ull, 6036473838486560245ull, 10846758690021538644ull, 3329665677652548428ull}}, {{14218459964117880976ull, 7545592298108200306ull, 13558448362526923305ull, 4162082097065685535ull}}, {{13498223496001063514ull, 16245210232386094951ull, 15391559254220408921ull, 2601301310666053459ull}}, {{12261093351573941489ull, 6471454735200454977ull, 14627763049348123248ull, 3251626638332566824ull}}, {{1491308634185263149ull, 8089318419000568722ull, 18284703811685154060ull, 4064533297915708530ull}}, {{5543753914793177372ull, 14279196048730131259ull, 16039625900730609191ull, 2540333311197317831ull}}, {{2318006375064083811ull, 13237309042485276170ull, 15437846357485873585ull, 3175416638996647289ull}}, {{12120880005684880572ull, 2711578247824431500ull, 5462249891575178270ull, 3969270798745809112ull}}, {{16798922040407826166ull, 15529794460172433399ull, 3413906182234486418ull, 2480794249216130695ull}}, {{16386966532082394803ull, 10188871038360765941ull, 18102440783075271735ull, 3100992811520163368ull}}, {{6648650109820829791ull, 8124402779523569523ull, 4181306905134538053ull, 3876241014400204211ull}}, {{1849563309424324668ull, 7383594746415924904ull, 307473806495392331ull, 2422650634000127632ull}} }; #endif // matches #if __ENABLE_BINARY80__ // ********************************************************************** static const UINT128 breakpoints_binary128[] = { {{2195700805160846264ull, 1755099732929698ull}}, {{9135258273612497656ull, 1404079786343758ull}}, {{10927064423038085928ull, 2246527658150013ull}}, {{16120349167914289388ull, 1797222126520010ull}}, {{12896279334331431512ull, 1437777701216008ull}}, {{17695721096948965856ull, 1150222160972806ull}}, {{2487712051924973104ull, 1840355457556491ull}}, {{16747564900507619776ull, 1472284366045192ull}}, {{6019354290922275176ull, 1177827492836154ull}}, {{17009664494959460928ull, 1884523988537846ull}}, {{9918382781225658420ull, 1507619190830277ull}}, {{556008595496706088ull, 1206095352664222ull}}, {{4578962567536640064ull, 1929752564262755ull}}, {{3663170054029312052ull, 1543802051410204ull}}, {{6619884857965359964ull, 1235041641128163ull}}, {{6902466958002665620ull, 1976066625805061ull}}, {{1832624751660222172ull, 1580853300644049ull}}, {{5155448616070088060ull, 1264682640515239ull}}, {{15627415415195961544ull, 2023492224824382ull}}, {{5123234702672948588ull, 1618793779859506ull}}, {{409238947396448548ull, 1295035023887605ull}}, {{654782315834317676ull, 2072056038220168ull}}, {{7902523482151274788ull, 1657644830576134ull}}, {{10011367600462930152ull, 1326115864460907ull}}, {{1260792901773046952ull, 2121785383137452ull}}, {{12076680765644168532ull, 1697428306509961ull}}, {{5971995797773424504ull, 1357942645207969ull}}, {{16933890905921299852ull, 2172708232332750ull}}, {{13547112724737039880ull, 1738166585866200ull}}, {{10837690179789631904ull, 1390533268692960ull}}, {{17340304287663411048ull, 2224853229908736ull}}, {{10182894615388818516ull, 1779882583926989ull}}, {{11835664507052965136ull, 1423906067141591ull}}, {{5779182790900461784ull, 1139124853713273ull}}, {{5557343650698828532ull, 1822599765941237ull}}, {{15513921364784793796ull, 1458079812752989ull}}, {{16100485906569745360ull, 1166463850202391ull}}, {{18382079821027771928ull, 1866342160323826ull}}, {{11016315042080307220ull, 1493073728259061ull}}, {{5123703218922335452ull, 1194458982607249ull}}, {{15576622779759557372ull, 1911134372171598ull}}, {{1393251779581914928ull, 1528907497737279ull}}, {{4803950238407442264ull, 1223125998189823ull}}, {{3996971566709997300ull, 1957001597103717ull}}, {{14265623697593728808ull, 1565601277682973ull}}, {{344452513849252076ull, 1252481022146379ull}}, {{7929821651642623972ull, 2003969635434206ull}}, {{2654508506572188852ull, 1603175708347365ull}}, {{2123606805257751084ull, 1282540566677892ull}}, {{7087119703154312056ull, 2052064906684627ull}}, {{16737742206749180616ull, 1641651925347701ull}}, {{9700844950657434168ull, 1313321540278161ull}}, {{8142654291568074024ull, 2101314464445058ull}}, {{13892821062738279864ull, 1681051571556046ull}}, {{7424908035448713568ull, 1344841257244837ull}}, {{15569201671459852032ull, 2151746011591739ull}}, {{16144710151909791948ull, 1721396809273391ull}}, {{9226419306785923236ull, 1377117447418713ull}}, {{11072922076115566856ull, 2203387915869941ull}}, {{5168988846150543160ull, 1762710332695953ull}}, {{11513888706404255176ull, 1410168266156762ull}}, {{1832413335639583492ull, 1128134612925410ull}}, {{2931861337023333592ull, 1805015380680656ull}}, {{17102884328586308164ull, 1444012304544524ull}}, {{17371656277610956856ull, 1155209843635619ull}}, {{16726603599951800000ull, 1848335749816991ull}}, {{9691934065219529676ull, 1478668599853593ull}}, {{15132244881659444388ull, 1182934879882874ull}}, {{13143545366429380048ull, 1892695807812599ull}}, {{14204185107885414364ull, 1514156646250079ull}}, {{15052696901050241812ull, 1211325317000063ull}}, {{1948222153228924964ull, 1938120507200102ull}}, {{12626624166808870940ull, 1550496405760081ull}}, {{6411950518705186428ull, 1240397124608065ull}}, {{10259120829928298284ull, 1984635399372904ull}}, {{11896645478684548952ull, 1587708319498323ull}}, {{16896014012431459808ull, 1270166655598658ull}}, {{4897529531438873752ull, 2032266648957854ull}}, {{7607372439893009324ull, 1625813319166283ull}}, {{13464595581398228108ull, 1300650655333026ull}}, {{14164655300753344324ull, 2081041048532842ull}}, {{3953026611118854812ull, 1664832838826274ull}}, {{6851770103636994172ull, 1331866271061019ull}}, {{18341529795303011324ull, 2130986033697630ull}}, {{14673223836242409060ull, 1704788826958104ull}}, {{15427927883735837572ull, 1363831061566483ull}}, {{2548591725525878176ull, 2182129698506374ull}}, {{5728222195162612864ull, 1745703758805099ull}}, {{8271926570872000612ull, 1396563007044079ull}}, {{2167036069169470012ull, 2234500811270527ull}}, {{12801675299561306980ull, 1787600649016421ull}}, {{6551991424907135260ull, 1430080519213137ull}}, {{16309639584151439176ull, 1144064415370509ull}}, {{15027376890416571716ull, 1830503064592815ull}}, {{12021901512333257372ull, 1464402451674252ull}}, {{2238823580382785252ull, 1171521961339402ull}}, {{7271466543354366724ull, 1874435138143043ull}}, {{13195870864167314024ull, 1499548110514434ull}}, {{14246045506075761544ull, 1199638488411547ull}}, {{8036277550753577176ull, 1919421581458476ull}}, {{2739673225860951420ull, 1535537265166781ull}}, {{16949133839656402428ull, 1228429812133424ull}}, {{16050567699224512916ull, 1965487699413479ull}}, {{16529802974121520656ull, 1572390159530783ull}}, {{2155795935071485556ull, 1257912127624627ull}}, {{7138622310856287212ull, 2012659404199403ull}}, {{13089595478168850416ull, 1610127523359522ull}}, {{3092978753051259684ull, 1288102018687618ull}}, {{1259417190140105172ull, 2060963229900189ull}}, {{4696882566853994460ull, 1648770583920151ull}}, {{68157238741285244ull, 1319016467136121ull}}, {{11177098026211787364ull, 2110426347417793ull}}, {{16320376050453250536ull, 1688341077934234ull}}, {{16745649655104510752ull, 1350672862347387ull}}, {{12035644189199575912ull, 2161076579755820ull}}, {{9628515351359660728ull, 1728861263804656ull}}, {{4013463466345818260ull, 1383089011043725ull}}, {{6421541546153309216ull, 2212942417669960ull}}, {{5137233236922647372ull, 1770353934135968ull}}, {{11488484219021938544ull, 1416283147308774ull}}, {{12880136189959461160ull, 1133026517847019ull}}, {{9540171459709406884ull, 1812842428555231ull}}, {{3942788353025615184ull, 1450273942844185ull}}, {{3154230682420492148ull, 1160219154275348ull}}, {{1357420277130877116ull, 1856350646840557ull}}, {{12153982665930432660ull, 1485080517472445ull}}, {{9723186132744346128ull, 1188064413977956ull}}, {{8178400182907133160ull, 1900903062364730ull}}, {{6542720146325706528ull, 1520722449891784ull}}, {{8923524931802475544ull, 1216577959913427ull}}, {{17966988705625871196ull, 1946524735861483ull}}, {{3305544520274965988ull, 1557219788689187ull}}, {{13712482060445703760ull, 1245775830951349ull}}, {{10871924852487395044ull, 1993241329522159ull}}, {{12386888696731826360ull, 1594593063617727ull}}, {{2530813327901640440ull, 1275674450894182ull}}, {{7738650139384535028ull, 2041079121430691ull}}, {{2501571296765717700ull, 1632863297144553ull}}, {{9379954666896394804ull, 1306290637715642ull}}, {{250532208066590396ull, 2090065020345028ull}}, {{7579123395937092964ull, 1672052016276022ull}}, {{17131345160975405340ull, 1337641613020817ull}}, {{12652756998593007252ull, 2140226580833308ull}}, {{17500903228358226448ull, 1712181264666646ull}}, {{10311373767944670836ull, 1369745011733317ull}}, {{1740802769743832044ull, 2191592018773308ull}}, {{8771339845278886280ull, 1753273615018646ull}}, {{3327723061481198700ull, 1402618892014917ull}}, {{9013705713111828248ull, 2244190227223867ull}}, {{18279011014715193568ull, 1795352181779093ull}}, {{3555162367546423884ull, 1436281745423275ull}}, {{2844129894037139108ull, 1149025396338620ull}}, {{4550607830459422572ull, 1838440634141792ull}}, {{14708532708593269028ull, 1470752507313433ull}}, {{698779722648884252ull, 1176602005850747ull}}, {{4807396370980125128ull, 1882563209361195ull}}, {{3845917096784100100ull, 1506050567488956ull}}, {{17834128936394921372ull, 1204840453991164ull}}, {{17466559854006143228ull, 1927744726385863ull}}, {{2905201438979183612ull, 1542195781108691ull}}, {{17081556410150988184ull, 1233756624886952ull}}, {{12573094997273939800ull, 1974010599819124ull}}, {{13747824812561062164ull, 1579208479855299ull}}, {{14687608664790760052ull, 1263366783884239ull}}, {{12432127419439485116ull, 2021386854214783ull}}, {{17324399565035408740ull, 1617109483371826ull}}, {{10170170837286416668ull, 1293687586697461ull}}, {{8893575710174446024ull, 2069900138715938ull}}, {{14493558197623377464ull, 1655920110972750ull}}, {{11594846558098701972ull, 1324736088778200ull}}, {{105010419248371540ull, 2119577742045121ull}}, {{14841403594366338524ull, 1695662193636096ull}}, {{8183774060751160496ull, 1356529754908877ull}}, {{16783387311943767116ull, 2170447607854203ull}}, {{2358663405329282724ull, 1736358086283363ull}}, {{9265628353747246824ull, 1389086469026690ull}}, {{14825005365995594920ull, 2222538350442704ull}}, {{15549353107538386260ull, 1778030680354163ull}}, {{1371436041804978036ull, 1422424544283331ull}}, {{15854544092411623724ull, 1137939635426664ull}}, {{14299224103632866988ull, 1820703416682663ull}}, {{371332838680562620ull, 1456562733346131ull}}, {{15054461529912091388ull, 1165250186676904ull}}, {{13019092003633615252ull, 1864400298683047ull}}, {{3036575973423071556ull, 1491520238946438ull}}, {{9807958408222277892ull, 1193216191157150ull}}, {{15692733453155644628ull, 1909145905851440ull}}, {{12554186762524515700ull, 1527316724681152ull}}, {{2664651780535791912ull, 1221853379744922ull}}, {{7952791663599177388ull, 1954965407591875ull}}, {{6362233330879341908ull, 1563972326073500ull}}, {{5089786664703473528ull, 1251177860858800ull}}, {{8143658663525557644ull, 2001884577374080ull}}, {{6514926930820446116ull, 1601507661899264ull}}, {{8901290359398267216ull, 1281206129519411ull}}, {{6863366945553406900ull, 2049929807231058ull}}, {{12869391185926546164ull, 1639943845784846ull}}, {{6606164133999326608ull, 1311955076627877ull}}, {{14259211429140832896ull, 2099128122604603ull}}, {{339322699086935348ull, 1679302498083683ull}}, {{7650155788753368924ull, 1343441998466946ull}}, {{4861551632521569632ull, 2149507197547114ull}}, {{7578590120759166028ull, 1719605758037691ull}}, {{2373523281865422500ull, 1375684606430153ull}}, {{108288436242765680ull, 2201095370288245ull}}, {{86630748994212544ull, 1760876296230596ull}}, {{14826699858163011328ull, 1408701036984476ull}}, {{8172011071788498736ull, 1126960829587581ull}}, {{5696520085377777336ull, 1803137327340130ull}}, {{4557216068302221868ull, 1442509861872104ull}}, {{7335121669383687816ull, 1154007889497683ull}}, {{8046845856271990184ull, 1846412623196293ull}}, {{13816174314501412792ull, 1477130098557034ull}}, {{14742288266343040556ull, 1181704078845627ull}}, {{8830265967181223600ull, 1890726526153004ull}}, {{10753561588486889204ull, 1512581220922403ull}}, {{15981546900273332008ull, 1210064976737922ull}}, {{10813079781469689924ull, 1936103962780676ull}}, {{4961115010433841616ull, 1548883170224541ull}}, {{279543193605162968ull, 1239106536179633ull}}, {{15204664368735902044ull, 1982570457887412ull}}, {{4785033865504900988ull, 1586056366309930ull}}, {{3828027092403920788ull, 1268845093047944ull}}, {{13503540977330093912ull, 2030152148876710ull}}, {{10802832781864075128ull, 1624121719101368ull}}, {{16020963854975080748ull, 1299297375281094ull}}, {{14565495723734398228ull, 2078875800449751ull}}, {{7963047764245608260ull, 1663100640359801ull}}, {{2681089396654576284ull, 1330480512287841ull}}, {{15357789478873053024ull, 2128768819660545ull}}, {{12286231583098442420ull, 1703015055728436ull}}, {{6139636451736843612ull, 1362412044582749ull}}, {{17202115952262770428ull, 2179859271332398ull}}, {{2693646317584485372ull, 1743887417065919ull}}, {{5844265868809498620ull, 1395109933652735ull}}, {{9350825390095197792ull, 2232175893844376ull}}, {{3791311497334247912ull, 1785740715075501ull}}, {{17790444456835039620ull, 1428592572060400ull}}, {{14232355565468031696ull, 1142874057648320ull}}, {{4325024831039299100ull, 1828598492237313ull}}, {{10838717494315259924ull, 1462878793789850ull}}, {{8670973995452207940ull, 1170303035031880ull}}, {{13873558392723532704ull, 1872484856051008ull}}, {{30800269953095196ull, 1497987884840807ull}}, {{11092686660188207124ull, 1198390307872645ull}}, {{17748298656301131400ull, 1917424492596232ull}}, {{6819941295557084476ull, 1533939594076986ull}}, {{1766604221703757256ull, 1227151675261589ull}}, {{10205264384209832256ull, 1963442680418542ull}}, {{785513877884045160ull, 1570754144334834ull}}, {{4317759917049146448ull, 1256603315467867ull}}, {{10597764682020544644ull, 2010565304748587ull}}, {{1099514116132615068ull, 1608452243798870ull}}, {{879611292906092056ull, 1286761795039096ull}}, {{12475424512875478256ull, 2058818872062553ull}}, {{17359037239784203252ull, 1647055097650042ull}}, {{6508532162343541956ull, 1317644078120034ull}}, {{17792349089233487776ull, 2108230524992054ull}}, {{17923228086128700544ull, 1686584419993643ull}}, {{3270536024677229464ull, 1349267535994915ull}}, {{5232857639483567144ull, 2158828057591864ull}}, {{7875634926328764040ull, 1727062446073491ull}}, {{2611159126321100908ull, 1381649956858793ull}}, {{488505787371851128ull, 2210639930974069ull}}, {{4080153444639391228ull, 1768511944779255ull}}, {{3264122755711512980ull, 1414809555823404ull}}, {{6300647019311120708ull, 1131847644658723ull}}, {{6391686416155882808ull, 1810956231453957ull}}, {{16181395577150437216ull, 1448764985163165ull}}, {{12945116461720349772ull, 1159011988130532ull}}, {{5954791079784918344ull, 1854419181008852ull}}, {{15831879308053665644ull, 1483535344807081ull}}, {{8976154631701022192ull, 1186828275845665ull}}, {{14361847410721635508ull, 1898925241353064ull}}, {{15178826743319218732ull, 1519140193082451ull}}, {{8453712579913464660ull, 1215312154465961ull}}, {{6147242498377722812ull, 1944499447145538ull}}, {{12296491628185998896ull, 1555599557716430ull}}, {{9837193302548799116ull, 1244479646173144ull}}, {{4671462839852347616ull, 1991167433877031ull}}, {{47821457139967772ull, 1592933947101625ull}}, {{38257165711974216ull, 1274347157681300ull}}, {{61211465139158748ull, 2038955452290080ull}}, {{48969172111326996ull, 1631164361832064ull}}, {{3728524152430971920ull, 1304931489465651ull}}, {{17033685088115286044ull, 2087890383145041ull}}, {{9937599255750318512ull, 1670312306516033ull}}, {{15328777034084075456ull, 1336249845212826ull}}, {{17147345625050700084ull, 2137999752340522ull}}, {{6339178870556739420ull, 1710399801872418ull}}, {{12450040725929212180ull, 1368319841497934ull}}, {{8852018717261008520ull, 2189311746396695ull}}, {{7081614973808806816ull, 1751449397117356ull}}, {{1975943164305135128ull, 1401159517693885ull}}, {{3161509062888216208ull, 2241855228310216ull}}, {{17286602509278214260ull, 1793484182648172ull}}, {{6450584377938750760ull, 1434787346118538ull}}, {{12539165131834821256ull, 1147829876894830ull}}, {{1615920137226162392ull, 1836527803031729ull}}, {{4982084924522840236ull, 1469222242425383ull}}, {{11364365569102092836ull, 1175377793940306ull}}, {{10804287281079527892ull, 1880604470304490ull}}, {{8643429824863622312ull, 1504483576243592ull}}, {{17982790304116628820ull, 1203586860994873ull}}, {{6636371598135144172ull, 1925738977591798ull}}, {{12687794907991935984ull, 1540591182073438ull}}, {{17528933555877369432ull, 1232472945658750ull}}, {{9599549615694239480ull, 1971956713054001ull}}, {{3990290877813481260ull, 1577565370443201ull}}, {{17949627961218426300ull, 1262052296354560ull}}, {{10272660664239930464ull, 2019283674167297ull}}, {{839430901908123724ull, 1615426939333838ull}}, {{8050242351010319628ull, 1292341551467070ull}}, {{12880387761616511404ull, 2067746482347312ull}}, {{2925612579809388476ull, 1654197185877850ull}}, {{2340490063847510780ull, 1323357748702280ull}}, {{3744784102156017252ull, 2117372397923648ull}}, {{10374524911208634448ull, 1693897918338918ull}}, {{15678317558450728204ull, 1355118334671134ull}}, {{14017261649295434156ull, 2168189335473815ull}}, {{11213809319436347324ull, 1734551468379052ull}}, {{1592349826065257212ull, 1387641174703242ull}}, {{6237108536446321864ull, 2220225879525187ull}}, {{16057733273382788460ull, 1776180703620149ull}}, {{16535535433448141092ull, 1420944562896119ull}}, {{16917777161500423196ull, 1136755650316895ull}}, {{8621699384691125500ull, 1818809040507033ull}}, {{14276057137236721044ull, 1455047232405626ull}}, {{7731496895047466512ull, 1164037785924501ull}}, {{4991697402592125776ull, 1862460457479202ull}}, {{15061404366299431588ull, 1489968365983361ull}}, {{8359774678297634948ull, 1191974692786689ull}}, {{2307593041050484948ull, 1907159508458703ull}}, {{9224772062324208604ull, 1525727606766962ull}}, {{1120020375546236ull, 1220582085413570ull}}, {{1792032600873980ull, 1952931336661712ull}}, {{11069480070306430152ull, 1562345069329369ull}}, {{12544932870987054444ull, 1249876055463495ull}}, {{1625148519869735496ull, 1999801688741593ull}}, {{8678816445379609044ull, 1599841350993274ull}}, {{10632401971045597560ull, 1279873080794619ull}}, {{5943796709447225124ull, 2047796929271391ull}}, {{1065688552815869776ull, 1638237543417113ull}}, {{8231248471736516468ull, 1310590034733690ull}}, {{13169997554778426348ull, 2096944055573904ull}}, {{14225346858564651400ull, 1677555244459123ull}}, {{312231042625990152ull, 1342044195567299ull}}, {{7878267297685404888ull, 2147270712907678ull}}, {{13681311467632144556ull, 1717816570326142ull}}, {{3566351544621895000ull, 1374253256260914ull}}, {{13084860100878852648ull, 2198805210017462ull}}, {{3089190451219261472ull, 1759044168013970ull}}, {{2471352360975409176ull, 1407235334411176ull}}, {{15022210221786385652ull, 2251576535057881ull}}, {{8328419362687198196ull, 1801261228046305ull}}, {{6662735490149758556ull, 1441008982437044ull}}, {{9019537206861717168ull, 1152807185949635ull}}, {{14431259530978747472ull, 1844491497519416ull}}, {{7855658810041087652ull, 1475593198015533ull}}, {{13663224677516690768ull, 1180474558412426ull}}, {{14482461854542884584ull, 1888759293459882ull}}, {{4207271854150487020ull, 1511007434767906ull}}, {{18123212742288030908ull, 1208805947814324ull}}, {{17929093943435118488ull, 1934089516502919ull}}, {{18032623969490005112ull, 1547271613202335ull}}, {{14426099175592004088ull, 1237817290561868ull}}, {{945665792495744604ull, 1980507664898990ull}}, {{756532633996595684ull, 1584406131919192ull}}, {{11673272551423007516ull, 1267524905535353ull}}, {{14987887267534901704ull, 2028039848856565ull}}, {{11990309814027921364ull, 1622431879085252ull}}, {{2213550221738516444ull, 1297945503268202ull}}, {{7231029169523536632ull, 2076712805229123ull}}, {{13163520965102649952ull, 1661370244183298ull}}, {{17909514401565940608ull, 1329096195346638ull}}, {{6519130154054043036ull, 2126553912554622ull}}, {{16283350567468965396ull, 1701243130043697ull}}, {{5647982824491351672ull, 1360994504034958ull}}, {{5347423704444252352ull, 2177591206455933ull}}, {{11656636593039222528ull, 1742072965164746ull}}, {{5635960459689467700ull, 1393658372131797ull}}, {{12706885550245058644ull, 2229853395410875ull}}, {{10165508440196046912ull, 1783882716328700ull}}, {{8132406752156837532ull, 1427106173062960ull}}, {{6505925401725470024ull, 1141684938450368ull}}, {{6720131828018841716ull, 1826695901520589ull}}, {{9065454277156983696ull, 1461356721216471ull}}, {{3563014606983676632ull, 1169085376973177ull}}, {{9390172185915792936ull, 1870536603157083ull}}, {{14890835378216454996ull, 1496429282525666ull}}, {{8223319487831253672ull, 1197143426020533ull}}, {{9467962365788095556ull, 1915429481632853ull}}, {{14953067522114297088ull, 1532343585306282ull}}, {{4583756388207617024ull, 1225874868245026ull}}, {{18402056665357918212ull, 1961399789192041ull}}, {{11032296517544424244ull, 1569119831353633ull}}, {{16204534843519360044ull, 1255295865082906ull}}, {{101814046437603808ull, 2008473384132651ull}}, {{14838846496117724336ull, 1606778707306120ull}}, {{11871077196894179468ull, 1285422965844896ull}}, {{11615025885546866504ull, 2056676745351834ull}}, {{12981369523179403528ull, 1645341396281467ull}}, {{3006397989059702176ull, 1316273117025174ull}}, {{12188934411979344128ull, 2106036987240278ull}}, {{17129845159067295948ull, 1684829589792222ull}}, {{6325178497770016112ull, 1347863671833778ull}}, {{6430936781690115456ull, 2156581874934045ull}}, {{5144749425352092364ull, 1725265499947236ull}}, {{426450725539763568ull, 1380212399957789ull}}, {{8061018790347442356ull, 2208339839932462ull}}, {{17516861476503684856ull, 1766671871945969ull}}, {{17702837995944858208ull, 1413337497556775ull}}, {{14162270396755886564ull, 1130669998045420ull}}, {{4212888561099866888ull, 1809071996872673ull}}, {{10749008478363714156ull, 1447257597498138ull}}, {{15977904412174791972ull, 1157806077998510ull}}, {{7117902985770115540ull, 1852489724797617ull}}, {{16762368832841823400ull, 1481991779838093ull}}, {{2341848622047727752ull, 1185593423870475ull}}, {{3746957795276364404ull, 1896949478192760ull}}, {{2997566236221091520ull, 1517559582554208ull}}, {{9776750618460693864ull, 1214047666043366ull}}, {{8264103360053289536ull, 1942476265669386ull}}, {{2921933873300721304ull, 1553981012535509ull}}, {{6026895913382487368ull, 1243184810028407ull}}, {{13332382276153890112ull, 1989095696045451ull}}, {{6976557006181201768ull, 1591276556836361ull}}, {{1891896790203051088ull, 1273021245469089ull}}, {{10405732493808702392ull, 2036833992750542ull}}, {{945888365563141264ull, 1629467194200434ull}}, {{4446059507192423336ull, 1303573755360347ull}}, {{10803044026249787660ull, 2085718008576555ull}}, {{8642435220999830128ull, 1668574406861244ull}}, {{10603296991541774424ull, 1334859525488995ull}}, {{16965275186466839080ull, 2135775240782392ull}}, {{6193522519689650620ull, 1708620192625914ull}}, {{8644166830493630816ull, 1366896154100731ull}}, {{6451969299305988664ull, 2187033846561170ull}}, {{5161575439444790932ull, 1749627077248936ull}}, {{439911536813922420ull, 1399701661799149ull}}, {{8082556088386096520ull, 2239522658878638ull}}, {{13844742500192697864ull, 1791618127102910ull}}, {{11075794000154158288ull, 1433294501682328ull}}, {{16239332829607147276ull, 1146635601345862ull}}, {{11225537268403794352ull, 1834616962153380ull}}, {{8980429814723035480ull, 1467693569722704ull}}, {{10873692666520338708ull, 1174154855778163ull}}, {{13708559451690631612ull, 1878647769245061ull}}, {{7277498746610594964ull, 1502918215396049ull}}, {{9511347812030386296ull, 1202334572316839ull}}, {{4150110055022887104ull, 1923735315706943ull}}, {{10698785673502130328ull, 1538988252565554ull}}, {{12248377353543614584ull, 1231190602052443ull}}, {{15908054950927873016ull, 1969904963283909ull}}, {{16415792775484208736ull, 1575923970627127ull}}, {{5753936590903546340ull, 1260739176501702ull}}, {{12895647360187584472ull, 2017182682402723ull}}, {{17695215517633888224ull, 1613746145922178ull}}, {{3088125969881379608ull, 1290996916737743ull}}, {{1251652737068297052ull, 2065595066780389ull}}, {{4690671004396547964ull, 1652476053424311ull}}, {{63187988775328048ull, 1321980842739449ull}}, {{7479798411524345524ull, 2115169348383118ull}}, {{13362536358703297064ull, 1692135478706494ull}}, {{14379377901704547976ull, 1353708382965195ull}}, {{4560260569017725144ull, 2165933412744313ull}}, {{11026906084698000760ull, 1732746730195450ull}}, {{8821524867758400608ull, 1386197384156360ull}}, {{14114439788413440976ull, 2217915814650176ull}}, {{7602203015988842456ull, 1774332651720141ull}}, {{2392413598049163640ull, 1419466121376113ull}}, {{9292628507923151560ull, 1135572897100890ull}}, {{14868205612677042496ull, 1816916635361424ull}}, {{15583913304883544320ull, 1453533308289139ull}}, {{16156479458648745780ull, 1162826646631311ull}}, {{24925430644620984ull, 1860522634610099ull}}, {{3709289159257607112ull, 1488418107688079ull}}, {{6656780142147996012ull, 1190734486150463ull}}, {{6961499412694883296ull, 1905175177840741ull}}, {{1879850715413996312ull, 1524140142272593ull}}, {{8882578201815017696ull, 1219312113818074ull}}, {{3144078678678297344ull, 1950899382108919ull}}, {{6204611757684548200ull, 1560719505687135ull}}, {{4963689406147638560ull, 1248575604549708ull}}, {{4252554235094311372ull, 1997720967279533ull}}, {{10780741017559269744ull, 1598176773823626ull}}, {{4935243999305505472ull, 1278541419058901ull}}, {{517692769404988108ull, 2045666270494242ull}}, {{11482200659749721456ull, 1636533016395393ull}}, {{16564458157283597812ull, 1309226413116314ull}}, {{15435086607428025528ull, 2094762260986103ull}}, {{1280022841716689452ull, 1675809808788883ull}}, {{8402715902857172208ull, 1340647847031106ull}}, {{6065647815087654888ull, 2145036555249770ull}}, {{4852518252070123912ull, 1716029244199816ull}}, {{192665786914188804ull, 1372823395359853ull}}, {{15065660518030343384ull, 2196517432575764ull}}, {{15741877229166185028ull, 1757213946060611ull}}, {{8904152968591037700ull, 1405771156848489ull}}, {{3178598305519929352ull, 2249233850957583ull}}, {{9921576273899764128ull, 1799387080766066ull}}, {{4247912204377900976ull, 1439509664612853ull}}, {{10777027392986141428ull, 1151607731690282ull}}, {{2485848569810184992ull, 1842572370704452ull}}, {{13056725300073878964ull, 1474057896563561ull}}, {{6756031425317192848ull, 1179246317250849ull}}, {{18188347909991329204ull, 1886794107601358ull}}, {{3482631883767332392ull, 1509435286081087ull}}, {{13854151951239596884ull, 1207548228864869ull}}, {{11098596677757624044ull, 1932077166183791ull}}, {{5189528527464188912ull, 1545661732947033ull}}, {{11530320451455171776ull, 1236529386357626ull}}, {{11069815092844454196ull, 1978447018172202ull}}, {{1477154444791742712ull, 1582757614537762ull}}, {{12249770000059125136ull, 1266206091630209ull}}, {{8531585555868869252ull, 2025929746608335ull}}, {{6825268444695095400ull, 1620743797286668ull}}, {{12838912385239896968ull, 1296595037829334ull}}, {{9474213372158104180ull, 2074552060526935ull}}, {{7579370697726483344ull, 1659641648421548ull}}, {{13442194187665007320ull, 1327713318737238ull}}, {{17818161885522101388ull, 2124341309979581ull}}, {{10565180693675770788ull, 1699473047983665ull}}, {{8452144554940616628ull, 1359578438386932ull}}, {{17212780102646896932ull, 2175325501419091ull}}, {{10080875267375607224ull, 1740260401135273ull}}, {{15443397843384306424ull, 1392208320908218ull}}, {{2573343660963428340ull, 2227533313453150ull}}, {{2058674928770742672ull, 1782026650762520ull}}, {{1646939943016594136ull, 1425621320610016ull}}, {{16074947213380916600ull, 1140497056488012ull}}, {{10962520282441825272ull, 1824795290380820ull}}, {{8770016225953460216ull, 1459836232304656ull}}, {{3326664166020857848ull, 1167868985843725ull}}, {{5322662665633372560ull, 1868590377349960ull}}, {{4258130132506698048ull, 1494872301879968ull}}, {{10785201735489179084ull, 1195897841503974ull}}, {{6188276332556955568ull, 1913436546406359ull}}, {{8639969880787474776ull, 1530749237125087ull}}, {{17980022348855710792ull, 1224599389700069ull}}, {{17699989313943406296ull, 1959359023520111ull}}, {{10470642636412814712ull, 1567487218816089ull}}, {{12065862923872162092ull, 1253989775052871ull}}, {{11926683048711638704ull, 2006383640084594ull}}, {{13230695253711221288ull, 1605106912067675ull}}, {{10584556202968977028ull, 1284085529654140ull}}, {{16935289924750363248ull, 2054536847446624ull}}, {{17237580754542200920ull, 1643629477957299ull}}, {{17479413418375671060ull, 1314903582365839ull}}, {{16899015025175342728ull, 2103845731785343ull}}, {{2451165575914543212ull, 1683076585428275ull}}, {{1960932460731634568ull, 1346461268342620ull}}, {{3137491937170615312ull, 2154338029348192ull}}, {{13578039993962223216ull, 1723470423478553ull}}, {{18241129624653599220ull, 1378776338782842ull}}, {{14428412140478117460ull, 2206042142052548ull}}, {{474683268156763000ull, 1764833713642039ull}}, {{4069095429267320720ull, 1411866970913631ull}}, {{18012671602381497868ull, 1129493576730904ull}}, {{17752228119584665624ull, 1807189722769447ull}}, {{6823084866183911852ull, 1445751778215558ull}}, {{12837165522430950128ull, 1156601422572446ull}}, {{13160767206405699560ull, 1850562276115914ull}}, {{14217962579866469968ull, 1480449820892731ull}}, {{7685021249151265652ull, 1184359856714185ull}}, {{12296033998642025044ull, 1894975770742696ull}}, {{6147478384171709712ull, 1515980616594157ull}}, {{15986029151563098740ull, 1212784493275325ull}}, {{7130902568791406368ull, 1940455189240521ull}}, {{2015373240291214772ull, 1552364151392417ull}}, {{12680345036458702784ull, 1241891321113933ull}}, {{16599203243592014136ull, 1987026113782293ull}}, {{2211316150647880336ull, 1589620891025835ull}}, {{1769052920518304268ull, 1271696712820668ull}}, {{17587879931796928124ull, 2034714740513068ull}}, {{3002257501211811532ull, 1627771792410455ull}}, {{2401806000969449224ull, 1302217433928364ull}}, {{11221587231034939408ull, 2083547894285382ull}}, {{1598572155344130880ull, 1666838315428306ull}}, {{16036252983242945996ull, 1333470652342644ull}}, {{14589958328962982624ull, 2133553043748231ull}}, {{7982617848428475776ull, 1706842434998585ull}}, {{6386094278742780620ull, 1365473947998868ull}}, {{6528402031246538668ull, 2184758316798189ull}}, {{8912070439739141260ull, 1747806653438551ull}}, {{3440307537049402684ull, 1398245322750841ull}}, {{16572538503504775264ull, 2237192516401345ull}}, {{13258030802803820212ull, 1789754013121076ull}}, {{6917075827501145844ull, 1431803210496861ull}}, {{1844311847259006352ull, 1145442568397489ull}}, {{10329596585098230812ull, 1832708109435982ull}}, {{884979638594764004ull, 1466166487548786ull}}, {{15465378969843452496ull, 1172933190039028ull}}, {{2608513463298062052ull, 1876693104062446ull}}, {{16844206029606090936ull, 1501354483249956ull}}, {{9786016008942962424ull, 1201083586599965ull}}, {{15657625614308739880ull, 1921733738559944ull}}, {{16215449306188902228ull, 1537386990847955ull}}, {{12972359444951121780ull, 1229909592678364ull}}, {{9687728667696063880ull, 1967855348285383ull}}, {{15128880563640671752ull, 1574284278628306ull}}, {{8413755636170627076ull, 1259427422902645ull}}, {{13462009017873003324ull, 2015083876644232ull}}, {{3390909584814582012ull, 1612067101315386ull}}, {{17470122926819306904ull, 1289653681052308ull}}, {{5816103794459429108ull, 2063445889683694ull}}, {{8342231850309453608ull, 1650756711746955ull}}, {{6673785480247562884ull, 1320605369397564ull}}, {{18056754397879921264ull, 2112968591036102ull}}, {{7066705888820116364ull, 1690374872828882ull}}, {{16721411155281824060ull, 1352299898263105ull}}, {{8307513774741366884ull, 2163679837220969ull}}, {{10335359834535003828ull, 1730943869776775ull}}, {{8268287867628003064ull, 1384755095821420ull}}, {{13229260588204804904ull, 2215608153314272ull}}, {{3204710841080023276ull, 1772486522651418ull}}, {{9942466302347839264ull, 1417989218121134ull}}, {{11643321856620181736ull, 1134391374496907ull}}, {{3871919711624649484ull, 1815026199195052ull}}, {{14165582213525450556ull, 1452020959356041ull}}, {{7643116956078450124ull, 1161616767484833ull}}, {{8539638314983609872ull, 1858586827975733ull}}, {{14210408281470708544ull, 1486869462380586ull}}, {{7678977810434656512ull, 1189495569904469ull}}, {{1218318052469719452ull, 1903192911847151ull}}, {{15732049700943416852ull, 1522554329477720ull}}, {{12585639760754733484ull, 1218043463582176ull}}, {{12758325987723752928ull, 1948869541731482ull}}, {{2827963160695181696ull, 1559095633385186ull}}, {{17019765787523786648ull, 1247276506708148ull}}, {{5095532371586596700ull, 1995642410733038ull}}, {{11455123526753098004ull, 1596513928586430ull}}, {{9164098821402478404ull, 1277211142869144ull}}, {{3594511670018234476ull, 2043537828590631ull}}, {{17633004594982228876ull, 1634830262872504ull}}, {{17795752490727693424ull, 1307864210298003ull}}, {{6337111096712847536ull, 2092582736476806ull}}, {{1380340062628367708ull, 1674066189181445ull}}, {{1104272050102694164ull, 1339252951345156ull}}, {{12834881724390041636ull, 2142804722152249ull}}, {{13957254194253943632ull, 1714243777721799ull}}, {{14855152170145065228ull, 1371395022177439ull}}, {{12700197028006373396ull, 2194232035483903ull}}, {{17538855251888919364ull, 1755385628387122ull}}, {{6652386572027314844ull, 1404308502709698ull}}, {{6954469700501793428ull, 2246893604335517ull}}, {{16631622204627165712ull, 1797514883468413ull}}, {{2237251319476001600ull, 1438011906774731ull}}, {{16547196314548442572ull, 1150409525419784ull}}, {{15407467659051777144ull, 1840655240671655ull}}, {{12325974127241421716ull, 1472524192537324ull}}, {{13550128116535047696ull, 1178019354029859ull}}, {{10612158542230345344ull, 1884830966447775ull}}, {{8489726833784276276ull, 1507864773158220ull}}, {{6791781467027421020ull, 1206291818526576ull}}, {{3488152717760052988ull, 1930066909642522ull}}, {{13858568618433773360ull, 1544053527714017ull}}, {{3708157265263198040ull, 1235242822171214ull}}, {{13311749253904937512ull, 1976388515473942ull}}, {{3270701773640129364ull, 1581110812379154ull}}, {{6305910233654013812ull, 1264888649903323ull}}, {{6400107559104511780ull, 2023821839845317ull}}, {{16188132491509340392ull, 1619057471876253ull}}, {{1882459548981741344ull, 1295245977501003ull}}, {{17769330537338427444ull, 2072393564001604ull}}, {{17904813244612652276ull, 1657914851201283ull}}, {{3255804151464390852ull, 1326331880961027ull}}, {{8898635457084935688ull, 2122131009537643ull}}, {{14497605995151769196ull, 1697704807630114ull}}, {{15287433610863325680ull, 1358163846104091ull}}, {{17081196147897500444ull, 2173062153766546ull}}, {{9975608103576090032ull, 1738449723013237ull}}, {{601788853377051376ull, 1390759778410590ull}}, {{962862165403282204ull, 2225215645456944ull}}, {{4459638547064536088ull, 1780172516365555ull}}, {{3567710837651628868ull, 1424138013092444ull}}, {{6543517484863213416ull, 1139310410473955ull}}, {{10469627975781141468ull, 1822896656758328ull}}, {{15754400010108733820ull, 1458317325406662ull}}, {{5224822378603166412ull, 1166653860325330ull}}, {{8359715805765066260ull, 1866646176520528ull}}, {{14066470274095873652ull, 1493316941216422ull}}, {{3874478589792878276ull, 1194653552973138ull}}, {{2509816928926694920ull, 1911445684757021ull}}, {{16765248802108997228ull, 1529156547805616ull}}, {{9722850226945287460ull, 1223325238244493ull}}, {{11867211548370549612ull, 1957320381191189ull}}, {{13183118053438350012ull, 1565856304952951ull}}, {{6857145628008769684ull, 1252685043962361ull}}, {{3592735375330210852ull, 2004296070339778ull}}, {{10252885929747989328ull, 1603436856271822ull}}, {{823611114314570816ull, 1282749485017458ull}}, {{16075173041870954600ull, 2052399176027932ull}}, {{5481440804012943032ull, 1641919340822346ull}}, {{695803828468444104ull, 1313535472657877ull}}, {{4802634940291420888ull, 2101656756252603ull}}, {{11220805581716957356ull, 1681325405002082ull}}, {{1597946835889745240ull, 1345060324001666ull}}, {{13624761381649323352ull, 2152096518402665ull}}, {{10899809105319458680ull, 1721677214722132ull}}, {{1341149654771746300ull, 1377341771777706ull}}, {{13213885891860525048ull, 2203746834844329ull}}, {{14260457528230330360ull, 1762997467875463ull}}, {{340319578358533320ull, 1410397974300371ull}}, {{15029650921654467948ull, 1128318379440296ull}}, {{16668743845163328072ull, 1805309407104474ull}}, {{17024343890872572780ull, 1444247525683579ull}}, {{17308823927439968548ull, 1155398020546863ull}}, {{5558025395452487736ull, 1848636832874982ull}}, {{15514466760587721156ull, 1478909466299985ull}}, {{12411573408470176924ull, 1183127573039988ull}}, {{16169168638810372760ull, 1893004116863981ull}}, {{9245986096306387884ull, 1514403293491185ull}}, {{7396788877045110308ull, 1211522634792948ull}}, {{8145513388530266168ull, 1938436215668717ull}}, {{17584457155049943904ull, 1550748972534973ull}}, {{2999519279814224152ull, 1240599178027979ull}}, {{12177928477186579292ull, 1984958684844766ull}}, {{6052993967007353112ull, 1587966947875813ull}}, {{12221092803089703136ull, 1270373558300650ull}}, {{1107004411233973400ull, 2032597693281041ull}}, {{15642998787954820012ull, 1626078154624832ull}}, {{5135701400880035364ull, 1300862523699866ull}}, {{838424611924235936ull, 2081380037919786ull}}, {{15428134948507030040ull, 1665104030335828ull}}, {{1274461514579893064ull, 1332083224268663ull}}, {{16796533682295470196ull, 2131333158829860ull}}, {{13437226945836376156ull, 1705066527063888ull}}, {{18128479186152921572ull, 1364053221651110ull}}, {{10558822624135122900ull, 2182485154641777ull}}, {{1068360469824277672ull, 1745988123713422ull}}, {{11922734820085153108ull, 1396790498970737ull}}, {{4318980453168603680ull, 2234864798353180ull}}, {{3455184362534882944ull, 1787891838682544ull}}, {{6453496304769816676ull, 1430313470946035ull}}, {{5162797043815853340ull, 1144250776756828ull}}, {{4571126455363455024ull, 1830801242810925ull}}, {{3656901164290764020ull, 1464640994248740ull}}, {{2925520931432611216ull, 1171712795398992ull}}, {{8370182305034088268ull, 1874740472638387ull}}, {{17764192288253001584ull, 1499792378110709ull}}, {{17900702645344311588ull, 1199833902488567ull}}, {{13883728973583257252ull, 1919734243981708ull}}, {{38936734640874832ull, 1535787395185367ull}}, {{11099195831938430836ull, 1228629916148293ull}}, {{14069364516359579012ull, 1965807865837269ull}}, {{14944840427829573532ull, 1572646292669815ull}}, {{11955872342263658828ull, 1258117034135852ull}}, {{4372000488654212832ull, 2012987254617364ull}}, {{7186949205665280588ull, 1610389803693891ull}}, {{2060210549790314144ull, 1288311842955113ull}}, {{18053732138632143928ull, 2061298948728180ull}}, {{14442985710905715140ull, 1649039158982544ull}}, {{15243737383466482436ull, 1319231327186035ull}}, {{5943235739836820284ull, 2110770123497657ull}}, {{15822635036095187196ull, 1688616098798125ull}}, {{12658108028876149756ull, 1350892879038500ull}}, {{1806228772492287996ull, 2161428606461601ull}}, {{16202378276961471688ull, 1729142885169280ull}}, {{12961902621569177352ull, 1383314308135424ull}}, {{9670997750284952792ull, 2213302893016679ull}}, {{11426147014969872556ull, 1770642314413343ull}}, {{16519615241459718692ull, 1416513851530674ull}}, {{16905041007909685276ull, 1133211081224539ull}}, {{15980019168429765472ull, 1813137729959263ull}}, {{1715968890518081408ull, 1450510183967411ull}}, {{16130170371382106420ull, 1160408147173928ull}}, {{3672179705759908332ull, 1856653035478286ull}}, {{17695139023575567960ull, 1485322428382628ull}}, {{3088064774634723396ull, 1188257942706103ull}}, {{1251554824673647112ull, 1901212708329765ull}}, {{1001243859738917688ull, 1520970166663812ull}}, {{11869041532016865120ull, 1216776133331049ull}}, {{7922420007001253224ull, 1946841813329679ull}}, {{10027284820342912904ull, 1557473450663743ull}}, {{15400525485758150968ull, 1245978760530994ull}}, {{13572794332987310580ull, 1993566016849591ull}}, {{7168886651647938140ull, 1594852813479673ull}}, {{13113806950802171160ull, 1275882250783738ull}}, {{17292742306541563532ull, 2041411601253981ull}}, {{10144845030491340504ull, 1633129281003185ull}}, {{8115876024393072400ull, 1306503424802548ull}}, {{9296052824287005520ull, 2090405479684077ull}}, {{58144629945783768ull, 1672324383747262ull}}, {{11114562148182357984ull, 1337859506997809ull}}, {{6715252992866041808ull, 2140575211196495ull}}, {{5372202394292833444ull, 1712460168957196ull}}, {{608413100692356432ull, 1369968135165757ull}}, {{4662809775849680616ull, 2191949016265211ull}}, {{40899005937834168ull, 1753559213012169ull}}, {{3722068019492177660ull, 1402847370409735ull}}, {{5955308831187484256ull, 2244555792655576ull}}, {{1074898250208077080ull, 1795644634124461ull}}, {{15617313859134102956ull, 1436515707299568ull}}, {{1425804643081551396ull, 1149212565839655ull}}, {{2281287428930482232ull, 1838740105343448ull}}, {{9203727572628206432ull, 1470992084274758ull}}, {{14741679687586385792ull, 1176793667419806ull}}, {{16207989870654396624ull, 1882869867871690ull}}, {{12966391896523517296ull, 1506295894297352ull}}, {{2994415887734993192ull, 1205036715437882ull}}, {{8480414235117899432ull, 1928058744700611ull}}, {{3094982573352409220ull, 1542446995760489ull}}, {{6165334873423837700ull, 1233957596608391ull}}, {{2485838167994319672ull, 1974332154573426ull}}, {{16746065793363097032ull, 1579465723658740ull}}, {{13396852634690477624ull, 1263572578926992ull}}, {{6677568956537122908ull, 2021716126283188ull}}, {{12720752794713518972ull, 1617372901026550ull}}, {{10176602235770815176ull, 1293898320821240ull}}, {{16282563577233304284ull, 2070237313313984ull}}, {{16715399676528553752ull, 1656189850651187ull}}, {{5993622111739022356ull, 1324951880520950ull}}, {{9589795378782435768ull, 2119923008833520ull}}, {{7671836303025948612ull, 1695938407066816ull}}, {{2448120227678848568ull, 1356750725653453ull}}, {{227643549544247384ull, 2170801161045525ull}}, {{182114839635397908ull, 1736640928836420ull}}, {{145691871708318328ull, 1389312743069136ull}}, {{11301153438959040292ull, 2222900388910617ull}}, {{1662225121683411588ull, 1778320311128494ull}}, {{5019128912088639592ull, 1422656248902795ull}}, {{4015303129670911672ull, 1138124999122236ull}}, {{17492531451699189648ull, 1820999998595577ull}}, {{6615327531875531072ull, 1456799998876462ull}}, {{16360308469726155828ull, 1165439999101169ull}}, {{15108447107336118356ull, 1864703998561871ull}}, {{8397408871126984360ull, 1491763198849497ull}}, {{17785973541127318456ull, 1193410559079597ull}}, {{13700162406836068240ull, 1909456894527356ull}}, {{7270781110726944268ull, 1527565515621885ull}}, {{5816624888581555416ull, 1222052412497508ull}}, {{5617251006988578340ull, 1955283859996013ull}}, {{11872498435074683320ull, 1564227087996810ull}}, {{9497998748059746656ull, 1251381670397448ull}}, {{11507449182153684324ull, 2002210672635917ull}}, {{1827261716239126812ull, 1601768538108734ull}}, {{5151158187733211772ull, 1281414830486987ull}}, {{11931201915115049164ull, 2050263728779179ull}}, {{13234310346833949652ull, 1640210983023343ull}}, {{17966145906950980368ull, 1312168786418674ull}}, {{17677787006895837620ull, 2099470058269879ull}}, {{17831578420258580420ull, 1679576046615903ull}}, {{3197216291981133364ull, 1343660837292723ull}}, {{1426197252427903064ull, 2149857339668357ull}}, {{12209004246168053420ull, 1719885871734685ull}}, {{9767203396934442736ull, 1375908697387748ull}}, {{11938176620353198056ull, 2201453915820397ull}}, {{2171843666798737796ull, 1761163132656318ull}}, {{9116172562922810884ull, 1408930506125054ull}}, {{10982286865080159028ull, 1127144404900043ull}}, {{13882310169386344124ull, 1803431047840069ull}}, {{14795196950250985624ull, 1442744838272055ull}}, {{11836157560200788496ull, 1154195870617644ull}}, {{7869805652095530628ull, 1846713392988231ull}}, {{2606495706934514180ull, 1477370714390585ull}}, {{2085196565547611344ull, 1181896571512468ull}}, {{18093709763843819444ull, 1891034514419948ull}}, {{3406921366849324584ull, 1512827611535959ull}}, {{6414885908221369988ull, 1210262089228767ull}}, {{13953166267896102308ull, 1936419342766027ull}}, {{3783835384833061200ull, 1549135474212822ull}}, {{14095114752092179928ull, 1239308379370257ull}}, {{7794788344379846596ull, 1982893406992412ull}}, {{17303877119729608244ull, 1586314725593929ull}}, {{17532450510525596920ull, 1269051780475143ull}}, {{5915827928389493132ull, 2030482848760230ull}}, {{4732662342711594504ull, 1624386279008184ull}}, {{7475478688911185928ull, 1299509023206547ull}}, {{15650114716999807808ull, 2079214437130475ull}}, {{12520091773599846244ull, 1663371549704380ull}}, {{10016073418879876996ull, 1330697239763504ull}}, {{4957671025982072224ull, 2129115583621607ull}}, {{15034183265011388748ull, 1703292466897285ull}}, {{12027346612009111000ull, 1362633973517828ull}}, {{15554405764472667276ull, 2180214357628525ull}}, {{12443524611578133820ull, 1744171486102820ull}}, {{9954819689262507056ull, 1395337188882256ull}}, {{8549013873336190644ull, 2232539502211610ull}}, {{6839211098668952516ull, 1786031601769288ull}}, {{12850066508418982660ull, 1428825281415430ull}}, {{10280053206735186128ull, 1143060225132344ull}}, {{5380038686550566836ull, 1828896360211751ull}}, {{614682134498543144ull, 1463117088169401ull}}, {{15249140966566475808ull, 1170493670535520ull}}, {{5951881472796809676ull, 1872789872856833ull}}, {{12140202807721268388ull, 1498231898285466ull}}, {{6022813431435104388ull, 1198585518628373ull}}, {{5947152675554256696ull, 1917736829805397ull}}, {{15825768584669136328ull, 1534189463844317ull}}, {{5281917238251488416ull, 1227351571075454ull}}, {{15829765210686202112ull, 1963762513720726ull}}, {{8974463353807051364ull, 1571010010976581ull}}, {{3490221868303730768ull, 1256808008781265ull}}, {{5584354989285969232ull, 2010892814050024ull}}, {{8156832806170685708ull, 1608714251240019ull}}, {{10214815059678458888ull, 1286971400992015ull}}, {{16343704095485534224ull, 2059154241587224ull}}, {{16764312091130337700ull, 1647323393269779ull}}, {{17100798487646180484ull, 1317858714615823ull}}, {{5225184691782426836ull, 2108573943385318ull}}, {{11558845382909762116ull, 1686859154708254ull}}, {{12936425121069720016ull, 1349487323766603ull}}, {{17008931378969641700ull, 2159179718026565ull}}, {{13607145103175713360ull, 1727343774421252ull}}, {{3507018453056750040ull, 1381875019537002ull}}, {{9300578339632710392ull, 2211000031259203ull}}, {{14819160301189988960ull, 1768800025007362ull}}, {{4476630611468170520ull, 1415040020005890ull}}, {{3581304489174536416ull, 1132032016004712ull}}, {{9419435997421168588ull, 1811251225607539ull}}, {{11224897612678845196ull, 1449000980486031ull}}, {{5290569275401165832ull, 1159200784388825ull}}, {{8464910840641865332ull, 1854721255022120ull}}, {{6771928672513492264ull, 1483777004017696ull}}, {{1728194123268883488ull, 1187021603214157ull}}, {{6454459411972123908ull, 1899234565142651ull}}, {{1474218714835788800ull, 1519387652114121ull}}, {{15936770230836272332ull, 1215510121691296ull}}, {{18120134739854215088ull, 1944816194706074ull}}, {{18185456606625282392ull, 1555852955764859ull}}, {{18237714100042136236ull, 1244682364611887ull}}, {{14422947301099776688ull, 1991491783379020ull}}, {{11538357840879821352ull, 1593193426703216ull}}, {{5541337457961946756ull, 1274554741362573ull}}, {{5176791117997204488ull, 2039287586180117ull}}, {{15209479338623494560ull, 1631430068944093ull}}, {{1099537026673064680ull, 1305144055155275ull}}, {{1759259242676903488ull, 2088230488248440ull}}, {{1407407394141522788ull, 1670584390598752ull}}, {{12193972359538949200ull, 1336467512479001ull}}, {{12131658145778498076ull, 2138348019966402ull}}, {{2326628887138977812ull, 1710678415973122ull}}, {{12929349553936913220ull, 1368542732778497ull}}, {{5929564027331419860ull, 2189668372445596ull}}, {{1054302407123225564ull, 1751734697956477ull}}, {{11911488369924311420ull, 1401387758365181ull}}, {{11679683762395077628ull, 2242220413384290ull}}, {{9343747009916062104ull, 1793776330707432ull}}, {{96299978449029036ull, 1435021064565946ull}}, {{14834435241726864520ull, 1148016851652756ull}}, {{16356398757279162588ull, 1836826962644410ull}}, {{13085119005823330068ull, 1469461570115528ull}}, {{17846792834142484700ull, 1175569256092422ull}}, {{13797473275660334232ull, 1880910809747876ull}}, {{7348629805786357060ull, 1504728647798301ull}}, {{2189555029887175324ull, 1203782918238641ull}}, {{14571334492045211492ull, 1926052669181825ull}}, {{11657067593636169192ull, 1540842135345460ull}}, {{9325654074908935352ull, 1232673708276368ull}}, {{11231697705112386244ull, 1972277933242189ull}}, {{12674706978831819316ull, 1577822346593751ull}}, {{6450416768323545132ull, 1262257877275001ull}}, {{2941969199833851564ull, 2019612603640002ull}}, {{13421621804092812220ull, 1615690082912001ull}}, {{7047948628532339452ull, 1292552066329601ull}}, {{3898020176167922480ull, 2068083306127362ull}}, {{14186462585160068952ull, 1654466644901889ull}}, {{15038518882869965484ull, 1323573315921511ull}}, {{16682932583108124132ull, 2117717305474418ull}}, {{2278299622260768336ull, 1694173844379535ull}}, {{1822639697808614668ull, 1355339075503628ull}}, {{17673618775461424760ull, 2168542520805804ull}}, {{17828243835111050132ull, 1734834016644643ull}}, {{3194548623863109136ull, 1387867213315715ull}}, {{5111277798180974620ull, 2220587541305144ull}}, {{7778371053286690016ull, 1776470033044115ull}}, {{6222696842629352012ull, 1421176026435292ull}}, {{16046203918329212580ull, 1136940821148233ull}}, {{3537833380875278188ull, 1819105313837174ull}}, {{6519615519442132876ull, 1455284251069739ull}}, {{8905041230295616624ull, 1164227400855791ull}}, {{6869368338989165952ull, 1862763841369266ull}}, {{1806145856449422436ull, 1490211073095413ull}}, {{8823614314643358596ull, 1192168858476330ull}}, {{14117782903429373756ull, 1907470173562128ull}}, {{226179878517768032ull, 1525976138849703ull}}, {{7559641532298035072ull, 1220780911079762ull}}, {{15784775266418766440ull, 1953249457727619ull}}, {{16317169027876923476ull, 1562599566182095ull}}, {{13053735222301538780ull, 1250079652945676ull}}, {{13507278726198641404ull, 2000127444713082ull}}, {{3427125351475092476ull, 1600101955770466ull}}, {{17499095540147715272ull, 1280081564616372ull}}, {{13241157605268703144ull, 2048130503386196ull}}, {{6903577269473052192ull, 1638504402708957ull}}, {{16590908259804172724ull, 1310803522167165ull}}, {{8098709141977124740ull, 2097285635467465ull}}, {{6478967313581699792ull, 1677828508373972ull}}, {{16251220295091090804ull, 1342262806699177ull}}, {{11244557213178103996ull, 2147620490718684ull}}, {{12684994585284393520ull, 1718096392574947ull}}, {{2769298038743694168ull, 1374477114059958ull}}, {{741528047248000348ull, 2199163382495933ull}}, {{7971920067282220924ull, 1759330705996746ull}}, {{2688187239083866416ull, 1407464564797397ull}}, {{13218596235492824100ull, 1125971651837917ull}}, {{6392358717820877272ull, 1801554642940668ull}}, {{12492584603740522464ull, 1441243714352534ull}}, {{13683416497734328292ull, 1152994971482027ull}}, {{7136071137407283976ull, 1844791954371244ull}}, {{9398205724667737504ull, 1475833563496995ull}}, {{7518564579734190004ull, 1180666850797596ull}}, {{4651005698090883360ull, 1889066961276154ull}}, {{7410153373214617012ull, 1511253569020923ull}}, {{13306820328055514256ull, 1209002855216738ull}}, {{17601563710146912484ull, 1934404568346781ull}}, {{10391902153375619664ull, 1547523654677425ull}}, {{8313521722700495732ull, 1238018923741940ull}}, {{13301634756320793172ull, 1980830277987104ull}}, {{14330656619798544860ull, 1584664222389683ull}}, {{396478851613104916ull, 1267731377911747ull}}, {{4323714977322878192ull, 2028370204658795ull}}, {{3458971981858302552ull, 1622696163727036ull}}, {{17524572844454283336ull, 1298156930981628ull}}, {{5903223662675391400ull, 2077051089570606ull}}, {{1033230115398402796ull, 1661640871656485ull}}, {{826584092318722236ull, 1329312697325188ull}}, {{16079929806677596872ull, 2126900315720300ull}}, {{12863943845342077496ull, 1701520252576240ull}}, {{10291155076273661996ull, 1361216202060992ull}}, {{1708452863070217904ull, 2177945923297588ull}}, {{8745459919939994968ull, 1742356738638070ull}}, {{6996367935951995976ull, 1393885390910456ull}}, {{3815491068039372912ull, 2230216625456730ull}}, {{3052392854431498332ull, 1784173300365384ull}}, {{6131263098287108988ull, 1427338640292307ull}}, {{15973056922855418160ull, 1141870912233845ull}}, {{7110147002859117440ull, 1826993459574153ull}}, {{13066815231771114596ull, 1461594767659322ull}}, {{3074754555933071032ull, 1169275814127458ull}}, {{1230258474751003328ull, 1870841302603933ull}}, {{8362904409284623308ull, 1496673042083146ull}}, {{3000974712685788324ull, 1197338433666517ull}}, {{8490908355039171640ull, 1915741493866427ull}}, {{17860773128257068284ull, 1532593195093141ull}}, {{10599269687863744304ull, 1226074556074513ull}}, {{13269482685840080560ull, 1961719289719221ull}}, {{6926237333930154124ull, 1569375431775377ull}}, {{16609036311369854268ull, 1255500345420301ull}}, {{749016394998394572ull, 2008800552672483ull}}, {{7977910745482536304ull, 1607040442137986ull}}, {{2692979781644118720ull, 1285632353710389ull}}, {{11687465280114410596ull, 2057011765936622ull}}, {{1971274594607707832ull, 1645609412749298ull}}, {{8955717305169986912ull, 1316487530199438ull}}, {{10639798873530068736ull, 2106380048319101ull}}, {{4822490284082144664ull, 1685104038655281ull}}, {{168643412523805408ull, 1348083230924225ull}}, {{269829460038088656ull, 2156933169478760ull}}, {{215863568030470924ull, 1725546535583008ull}}, {{7551388483908197384ull, 1380437228466406ull}}, {{4703523944769295168ull, 2208699565546250ull}}, {{3762819155815436136ull, 1766959652437000ull}}, {{3010255324652348908ull, 1413567721949600ull}}, {{2408204259721879124ull, 1130854177559680ull}}, {{3853126815555006604ull, 1809366684095488ull}}, {{10461199081927825928ull, 1447493347276390ull}}, {{8368959265542260744ull, 1157994677821112ull}}, {{17079683639609527512ull, 1852791484513779ull}}, {{17353095726429532332ull, 1482233187611023ull}}, {{2814430136917894896ull, 1185786550088819ull}}, {{11881785848552452480ull, 1897258480142110ull}}, {{9505428678841961984ull, 1517806784113688ull}}, {{14983040572557390232ull, 1214245427290950ull}}, {{5526120842382272760ull, 1942792683665521ull}}, {{731547859163907884ull, 1554234146932417ull}}, {{11653284731556857276ull, 1243387317545933ull}}, {{14955906755749061320ull, 1989419708073493ull}}, {{896678960373518084ull, 1591535766458795ull}}, {{717343168298814468ull, 1273228613167036ull}}, {{12215795513503834120ull, 2037165781067257ull}}, {{2393938781319246648ull, 1629732624853806ull}}, {{16672546284023038612ull, 1303786099883044ull}}, {{15608027610211130808ull, 2086057759812871ull}}, {{8797073273426994324ull, 1668846207850297ull}}, {{18105705062967326428ull, 1335076966280237ull}}, {{14211732841780080996ull, 2136123146048380ull}}, {{11369386273424064796ull, 1708898516838704ull}}, {{12784857833481162160ull, 1367118813470963ull}}, {{16766423718827949132ull, 2187390101553541ull}}, {{9723790160320448984ull, 1749912081242833ull}}, {{15157729757740179832ull, 1399929664994266ull}}, {{16873669982900467084ull, 2239887463990826ull}}, {{9809587171578463344ull, 1791909971192661ull}}, {{4158320922520860352ull, 1433527976954129ull}}, {{7016005552758598604ull, 1146822381563303ull}}, {{7536260069671847444ull, 1834915810501285ull}}, {{6029008055737477956ull, 1467932648401028ull}}, {{12201904074073803012ull, 1174346118720822ull}}, {{4765651259550443524ull, 1878953789953316ull}}, {{123172192898444496ull, 1503163031962653ull}}, {{7477235383802576244ull, 1202530425570122ull}}, {{15652925428826032312ull, 1924048680912195ull}}, {{12522340343060825852ull, 1539238944729756ull}}, {{6328523459706750356ull, 1231391155783805ull}}, {{10125637535530800572ull, 1970225849254088ull}}, {{15479207657908461104ull, 1576180679403270ull}}, {{12383366126326768884ull, 1260944543522616ull}}, {{12434688172639009568ull, 2017511269636186ull}}, {{6258401723369297332ull, 1614009015708949ull}}, {{8696070193437348188ull, 1291207212567159ull}}, {{2845665865274026132ull, 2065931540107455ull}}, {{2276532692219220904ull, 1652745232085964ull}}, {{5510574968517287048ull, 1322196185668771ull}}, {{1438222320143838628ull, 2115513897070034ull}}, {{4839926670856981224ull, 1692411117656027ull}}, {{14939987780911315948ull, 1353928894124821ull}}, {{16525282819974284876ull, 2166286230599714ull}}, {{16909575070721338224ull, 1733028984479771ull}}, {{9838311241835160256ull, 1386423187583817ull}}, {{983902727968615116ull, 2218277100134108ull}}, {{8165819811858712740ull, 1774621680107286ull}}, {{2843307034745059868ull, 1419697344085829ull}}, {{5963994442537958216ull, 1135757875268663ull}}, {{5853042293318822824ull, 1817212600429861ull}}, {{993085019913147936ull, 1453770080343889ull}}, {{4483816830672428672ull, 1163016064275111ull}}, {{18242153373301616844ull, 1860825702840177ull}}, {{7215025069157472828ull, 1488660562272142ull}}, {{16840066499551709232ull, 1190928449817713ull}}, {{4808013510831272836ull, 1905485519708342ull}}, {{14914457252890749236ull, 1524388415766673ull}}, {{863519358086868420ull, 1219510732613339ull}}, {{8760328602422810120ull, 1951217172181342ull}}, {{18076309326163979064ull, 1560973737745073ull}}, {{3393001016705452280ull, 1248778990196059ull}}, {{12807499256212544296ull, 1998046384313694ull}}, {{13935348219711945760ull, 1598437107450955ull}}, {{11148278575769556608ull, 1278749685960764ull}}, {{6769199277005559604ull, 2045999497537223ull}}, {{12794057051088268328ull, 1636799598029778ull}}, {{17613943270354435308ull, 1309439678423822ull}}, {{13424913973599455204ull, 2095103485478116ull}}, {{7050582364137653840ull, 1676082788382493ull}}, {{13019163520793943716ull, 1340866230705994ull}}, {{9762615189044578980ull, 2145385969129591ull}}, {{4120743336493752860ull, 1716308775303673ull}}, {{10675292298678822936ull, 1373047020242938ull}}, {{13391118863144206372ull, 2196875232388701ull}}, {{7023546275773454776ull, 1757500185910961ull}}, {{1929488205876853496ull, 1406000148728769ull}}, {{10465878758886786240ull, 2249600237966030ull}}, {{8372703007109428992ull, 1799680190372824ull}}, {{10387511220429453516ull, 1439744152298259ull}}, {{11999357791085473136ull, 1151795321838607ull}}, {{4441577206769115728ull, 1842872514941772ull}}, {{14621308209641023552ull, 1474298011953417ull}}, {{4318348938228998192ull, 1179438409562734ull}}, {{14288055930650217756ull, 1887101455300374ull}}, {{15119793559262084528ull, 1509681164240299ull}}, {{15785183662151577944ull, 1207744931392239ull}}, {{14188247415216793744ull, 1932391890227583ull}}, {{282551487947704024ull, 1545913512182067ull}}, {{11294087634583894188ull, 1236730809745653ull}}, {{14381191400592320380ull, 1978769295593045ull}}, {{11504953120473856304ull, 1583015436474436ull}}, {{5514613681637174720ull, 1266412349179549ull}}, {{16202079520103300200ull, 2026259758687278ull}}, {{1893617171856909192ull, 1621007806949823ull}}, {{8893591366969348000ull, 1296806245559858ull}}, {{10540397372409046476ull, 2074889992895773ull}}, {{15811015527411057824ull, 1659911994316618ull}}, {{1580765977703115292ull, 1327929595453295ull}}, {{2529225564324984468ull, 2124687352725272ull}}, {{13091426895685718544ull, 1699749882180217ull}}, {{3094443887064754188ull, 1359799905744174ull}}, {{12329807848787427348ull, 2175679849190678ull}}, {{17242543908513762524ull, 1740543879352542ull}}, {{6415337497327189372ull, 1392435103482034ull}}, {{17643237625207323644ull, 2227896165571254ull}}, {{17803938914907769236ull, 1782316932457003ull}}, {{3175104687700484420ull, 1425853545965603ull}}, {{9918781379644208180ull, 1140682836772482ull}}, {{1112654948463091800ull, 1825092538835972ull}}, {{11958170402996204408ull, 1460074031068777ull}}, {{2187838692913142880ull, 1168059224855022ull}}, {{7189890723402938932ull, 1868894759768035ull}}, {{5751912578722351144ull, 1495115807814428ull}}, {{11980227692461701564ull, 1196092646251542ull}}, {{4410969048971081208ull, 1913748234002468ull}}, {{10907472868660685612ull, 1530998587201974ull}}, {{12415327109670458812ull, 1224798869761579ull}}, {{8796476931247003132ull, 1959678191618527ull}}, {{18105227989223333476ull, 1567742553294821ull}}, {{10794833576636756456ull, 1254194042635857ull}}, {{2514338463651169040ull, 2006710468217372ull}}, {{13079517215146666200ull, 1605368374573897ull}}, {{3084916142633512312ull, 1284294699659118ull}}, {{1246517013471709380ull, 2054871519454589ull}}, {{4686562425519277828ull, 1643897215563671ull}}, {{59901125673511936ull, 1315117772450937ull}}, {{3785190615819529424ull, 2104188435921499ull}}, {{6717501307397533864ull, 1683350748737199ull}}, {{9063349860659937412ull, 1346680598989759ull}}, {{3433313332830168892ull, 2154688958383615ull}}, {{2746650666264135112ull, 1723751166706892ull}}, {{13265366977237039060ull, 1379000933365513ull}}, {{17535238348837352172ull, 2206401493384821ull}}, {{10338841864327971416ull, 1765121194707857ull}}, {{892375861978556484ull, 1412096955766286ull}}, {{15471295948550486480ull, 1129677564613028ull}}, {{2617980629229316432ull, 1807484103380846ull}}, {{16851779762351094436ull, 1445987282704676ull}}, {{9792074995138965228ull, 1156789826163741ull}}, {{8288622362738523716ull, 1850863721861986ull}}, {{2941549075448908648ull, 1480690977489589ull}}, {{6042588075101037244ull, 1184552781991671ull}}, {{2289443290677838944ull, 1895284451186674ull}}, {{5520903447284181476ull, 1516227560949339ull}}, {{8106071572569255504ull, 1212982048759471ull}}, {{5591016886626988160ull, 1940771278015154ull}}, {{8162162324043500852ull, 1552617022412123ull}}, {{13908427488718621328ull, 1242093617929698ull}}, {{117391093498332188ull, 1987349788687518ull}}, {{7472610504282486396ull, 1589879830950014ull}}, {{9667437218167899440ull, 1271903864760011ull}}, {{8089201919584818456ull, 2035046183616018ull}}, {{13850059165151675412ull, 1628036946892814ull}}, {{14769396146863250652ull, 1302429557514251ull}}, {{16252336205497380400ull, 2083887292022802ull}}, {{5623171334914083672ull, 1667109833618242ull}}, {{15566583512156997908ull, 1333687866894593ull}}, {{2770440730999734712ull, 2133900587031350ull}}, {{2216352584799787768ull, 1707120469625080ull}}, {{1773082067839830216ull, 1365696375700064ull}}, {{10215628938027548992ull, 2185114201120102ull}}, {{793805520938218548ull, 1748091360896082ull}}, {{11703090860976305808ull, 1398473088716865ull}}, {{278201303852537676ull, 2237556941946985ull}}, {{222561043082030140ull, 1790045553557588ull}}, {{7556746463949444760ull, 1432036442846070ull}}, {{6045397171159555808ull, 1145629154276856ull}}, {{2293937844371468644ull, 1833006646842970ull}}, {{1835150275497174916ull, 1466405317474376ull}}, {{16225515479365381224ull, 1173124253979500ull}}, {{7514080693275058344ull, 1876998806367201ull}}, {{2321915739878136352ull, 1501599045093761ull}}, {{16614927850870150376ull, 1201279236075008ull}}, {{4447791672940778660ull, 1922046777720014ull}}, {{7247582153094533252ull, 1537637422176011ull}}, {{2108716907733716276ull, 1230109937740809ull}}, {{10752644681857766692ull, 1968175900385294ull}}, {{12291464560228123676ull, 1574540720308235ull}}, {{9833171648182498940ull, 1259632576246588ull}}, {{12043725822350087984ull, 2015412121994541ull}}, {{5945631843138160064ull, 1612329697595633ull}}, {{12135203103994348696ull, 1289863758076506ull}}, {{12037627336907137268ull, 2063782012922410ull}}, {{9630101869525709816ull, 1651025610337928ull}}, {{15082779125104388496ull, 1320820488270342ull}}, {{9375051341199380304ull, 2113312781232548ull}}, {{14878738702443324888ull, 1690650224986038ull}}, {{834944517728928940ull, 1352520179988831ull}}, {{12403957672592017276ull, 2164032287982129ull}}, {{13612514952815524144ull, 1731225830385703ull}}, {{18268709591736239960ull, 1384980664308562ull}}, {{14472540087810342648ull, 2215969062893700ull}}, {{11578032070248274116ull, 1772775250314960ull}}, {{9262425656198619292ull, 1418220200251968ull}}, {{14788638154442716080ull, 1134576160201574ull}}, {{12593774602882614760ull, 1815321856322519ull}}, {{13764368497048002132ull, 1452257485058015ull}}, {{11011494797638401704ull, 1161805988046412ull}}, {{2860996417253801436ull, 1858889580874260ull}}, {{2288797133803041148ull, 1487111664699408ull}}, {{9209735336526253564ull, 1189689331759526ull}}, {{7356878908958185060ull, 1903502930815242ull}}, {{16953549571392279016ull, 1522802344652193ull}}, {{2494793212888092244ull, 1218241875721755ull}}, {{3991669140620947588ull, 1949187001154808ull}}, {{10572032941980578716ull, 1559349600923846ull}}, {{4768277538842552652ull, 1247479680739077ull}}, {{11318592876889994564ull, 1995967489182523ull}}, {{16433571930995816300ull, 1596773991346018ull}}, {{2078811100570922068ull, 1277419193076815ull}}, {{3326097760913475312ull, 2043870708922904ull}}, {{6350227023472690572ull, 1635096567138323ull}}, {{12458879248261973104ull, 1308077253710658ull}}, {{16244857982477246644ull, 2092923605937053ull}}, {{1927839941756066344ull, 1674338884749643ull}}, {{8920969582888673720ull, 1339471107799714ull}}, {{3205504888396146988ull, 2143153772479543ull}}, {{9943101540200738236ull, 1714523017983634ull}}, {{11643830046902500912ull, 1371618414386907ull}}, {{3872732816076360164ull, 2194589463019052ull}}, {{14166232697086819100ull, 1755671570415241ull}}, {{7643637342927544956ull, 1404537256332193ull}}, {{8540470933942161612ull, 2247259610131509ull}}, {{10521725561895639612ull, 1797807688105207ull}}, {{1038682820032691044ull, 1438246150484166ull}}, {{15588341514993794128ull, 1150596920387332ull}}, {{10183951165022429312ull, 1840955072619732ull}}, {{768463302534122800ull, 1472764058095786ull}}, {{15372165900994939532ull, 1178211246476628ull}}, {{2459372553140441316ull, 1885137994362606ull}}, {{16724893301479994344ull, 1508110395490084ull}}, {{17069263455925905800ull, 1206488316392067ull}}, {{12553426270513807988ull, 1930381306227308ull}}, {{17421438645894867036ull, 1544305044981846ull}}, {{10247802101973983304ull, 1235444035985477ull}}, {{1639088104190731996ull, 1976710457576764ull}}, {{5000619298094495920ull, 1581368366061411ull}}, {{311146623733686412ull, 1265094692849129ull}}, {{7876532227457718908ull, 2024151508558606ull}}, {{2611876967224264800ull, 1619321206846885ull}}, {{2089501573779411840ull, 1295456965477508ull}}, {{18100597777014700240ull, 2072731144764012ull}}, {{7101780592127939544ull, 1658184915811210ull}}, {{5681424473702351636ull, 1326547932648968ull}}, {{5400930343181852296ull, 2122476692238349ull}}, {{8010093089287392160ull, 1697981353790679ull}}, {{10097423286171824048ull, 1358385083032543ull}}, {{12466528443133008156ull, 2173416132852069ull}}, {{13662571569248316848ull, 1738732906281655ull}}, {{10930057255398653480ull, 1390986325025324ull}}, {{6420045164412114596ull, 2225578120040519ull}}, {{8825384946271602000ull, 1780462496032415ull}}, {{7060307957017281600ull, 1424369996825932ull}}, {{16716292809839556248ull, 1139495997460745ull}}, {{8299324422033738384ull, 1823193595937193ull}}, {{14018157167110811352ull, 1458554876749754ull}}, {{14903874548430559404ull, 1166843901399803ull}}, {{1710106389037433112ull, 1866950242239686ull}}, {{16125480370197587780ull, 1493560193791748ull}}, {{1832337851932339256ull, 1194848155033399ull}}, {{10310438192575563456ull, 1911757048053438ull}}, {{15627048183544271412ull, 1529405638442750ull}}, {{12501638546835417128ull, 1223524510754200ull}}, {{1555877601227115788ull, 1957639217206721ull}}, {{16002097339949333924ull, 1566111373765376ull}}, {{9112329057217556816ull, 1252889099012301ull}}, {{7201028862064270260ull, 2004622558419682ull}}, {{16828869533877147176ull, 1603698046735745ull}}, {{13463095627101717740ull, 1282958437388596ull}}, {{14162255373878927740ull, 2052733499821754ull}}, {{15019153113845052516ull, 1642186799857403ull}}, {{947276046850311044ull, 1313749439885923ull}}, {{16273036933928138960ull, 2101999103817476ull}}, {{9329080732400600844ull, 1681599283053981ull}}, {{3773915771178570352ull, 1345279426443185ull}}, {{6038265233885712568ull, 2152447082309096ull}}, {{1141263372366659728ull, 1721957665847277ull}}, {{11981057142119058752ull, 1377566132677821ull}}, {{11790993797906673360ull, 2204105812284514ull}}, {{13122143853067249008ull, 1763284649827611ull}}, {{6808366267711888884ull, 1410627719862089ull}}, {{9136041828911421432ull, 1128502175889671ull}}, {{7238969296774453644ull, 1805603481423474ull}}, {{9480524252161473236ull, 1444482785138779ull}}, {{11273768216471088912ull, 1155586228111023ull}}, {{14348680331611831940ull, 1848937964977637ull}}, {{4100246635805644904ull, 1479150371982110ull}}, {{3280197308644515924ull, 1183320297585688ull}}, {{1558966879089315156ull, 1893312476137101ull}}, {{16004568762239093416ull, 1514649980909680ull}}, {{12803655009791274732ull, 1211719984727744ull}}, {{9417801571440308604ull, 1938751975564391ull}}, {{3844892442410336560ull, 1551001580451513ull}}, {{10454611583412089892ull, 1240801264361210ull}}, {{16727378533459343832ull, 1985282022977936ull}}, {{9692554012025564740ull, 1588225618382349ull}}, {{11443392024362362116ull, 1270580494705879ull}}, {{7241380794754048416ull, 2032928791529407ull}}, {{16861151080028969704ull, 1626343033223525ull}}, {{13488920864023175760ull, 1301074426578820ull}}, {{3135529308727529604ull, 2081719082526113ull}}, {{9887121076465844328ull, 1665375266020890ull}}, {{7909696861172675464ull, 1332300212816712ull}}, {{16344863792618191064ull, 2131680340506739ull}}, {{16765239848836463176ull, 1705344272405391ull}}, {{9722843064327260216ull, 1364275417924313ull}}, {{11867200088181706024ull, 2182840668678901ull}}, {{5804411255803454496ull, 1746272534943121ull}}, {{954180189900853272ull, 1397018027954497ull}}, {{5216037118583275560ull, 2235228844727195ull}}, {{4172829694866620448ull, 1788183075781756ull}}, {{18095659014860937652ull, 1430546460625404ull}}, {{18165876026630660444ull, 1144437168500323ull}}, {{6929308754157594772ull, 1831099469600518ull}}, {{12922144632809896464ull, 1464879575680414ull}}, {{14027064520989827492ull, 1171903660544331ull}}, {{15064605604099903344ull, 1875045856870930ull}}, {{12051684483279922676ull, 1500036685496744ull}}, {{13330696401365848464ull, 1200029348397395ull}}, {{2882370168475805924ull, 1920046957435833ull}}, {{9684593764264465388ull, 1536037565948666ull}}, {{4058326196669661984ull, 1228830052758933ull}}, {{2803973099929548856ull, 1966128084414293ull}}, {{9621876109427459728ull, 1572902467531434ull}}, {{11386849702283878108ull, 1258321974025147ull}}, {{3461564264686563680ull, 2013315158440236ull}}, {{17526646670716892236ull, 1610652126752188ull}}, {{2953270892347782820ull, 1288521701401751ull}}, {{15793279871982183480ull, 2061634722242801ull}}, {{8945275082843836460ull, 1649307777794241ull}}, {{3466871251533158844ull, 1319446222235393ull}}, {{1857645187711143832ull, 2111113955576629ull}}, {{5175464964910825388ull, 1688891164461303ull}}, {{11519069601412480956ull, 1351112931569042ull}}, {{3673116103292328236ull, 2161780690510468ull}}, {{10317190512117683236ull, 1729424552408374ull}}, {{11943101224436056912ull, 1383539641926699ull}}, {{8040915514871960088ull, 2213663427082719ull}}, {{10122081226639478396ull, 1770930741666175ull}}, {{8097664981311582716ull, 1416744593332940ull}}, {{6478131985049266172ull, 1133395674666352ull}}, {{14054359990820736200ull, 1813433079466163ull}}, {{175441548430857988ull, 1450746463572931ull}}, {{14897748497712327684ull, 1160597170858344ull}}, {{12768351152113993324ull, 1856955473373351ull}}, {{6525332106949284336ull, 1485564378698681ull}}, {{1530916870817517148ull, 1188451502958945ull}}, {{2449466993308027436ull, 1901522404734312ull}}, {{13027620038872152916ull, 1521217923787449ull}}, {{14111444845839632656ull, 1216974339029959ull}}, {{11510265309117681284ull, 1947158942447935ull}}, {{9208212247294145024ull, 1557727153958348ull}}, {{14745267427319136668ull, 1246181723166678ull}}, {{1456334995259156728ull, 1993890757066686ull}}, {{15922463255174966676ull, 1595112605653348ull}}, {{1669924159914242368ull, 1276090084522679ull}}, {{10050576285346608440ull, 2041744135236286ull}}, {{4351112213535376428ull, 1633395308189029ull}}, {{7170238585570211464ull, 1306716246551223ull}}, {{7783032922170428024ull, 2090745994481957ull}}, {{17294472781962073388ull, 1672596795585565ull}}, {{13835578225569658708ull, 1338077436468452ull}}, {{7379529901943812644ull, 2140923898349524ull}}, {{9592972736296960436ull, 1712739118679619ull}}, {{11363727003779478672ull, 1370191294943695ull}}, {{18181963206047165876ull, 2192306071909912ull}}, {{7166872935353912056ull, 1753844857527930ull}}, {{5733498348283129644ull, 1403075886022344ull}}, {{16552294986736828076ull, 2244921417635750ull}}, {{13241835989389462460ull, 1795937134108600ull}}, {{10593468791511569968ull, 1436749707286880ull}}, {{8474775033209255976ull, 1149399765829504ull}}, {{2491593608909078592ull, 1839039625327207ull}}, {{13061321331352993844ull, 1471231700261765ull}}, {{10449057065082395072ull, 1176985360209412ull}}, {{1961096045164190824ull, 1883176576335060ull}}, {{1568876836131352660ull, 1506541261068048ull}}, {{8633799098388902776ull, 1205233008854438ull}}, {{10124729742680334116ull, 1928372814167101ull}}, {{4410434979402356968ull, 1542698251333681ull}}, {{18285743242489526868ull, 1234158601066944ull}}, {{18189142743757512020ull, 1974653761707111ull}}, {{10861965380264099292ull, 1579723009365689ull}}, {{12378921118953189756ull, 1263778407492551ull}}, {{12427576160841282968ull, 2022045451988082ull}}, {{2563363299189205728ull, 1617636361590466ull}}, {{16808085898319005872ull, 1294109089272372ull}}, {{12135542178342768104ull, 2070574542835796ull}}, {{6019084927932304160ull, 1656459634268637ull}}, {{15883314386571574296ull, 1325167707414909ull}}, {{14345256574288787908ull, 2120268331863855ull}}, {{11476205259431030328ull, 1696214665491084ull}}, {{12870313022286734584ull, 1356971732392867ull}}, {{5835105576691134044ull, 2171154771828588ull}}, {{12046782090836727880ull, 1736923817462870ull}}, {{9637425672669382304ull, 1389539053970296ull}}, {{8041183446787191040ull, 2223262486352474ull}}, {{10122295572171663156ull, 1778609989081979ull}}, {{11787185272479240848ull, 1422887991265583ull}}, {{16808445847467213324ull, 1138310393012466ull}}, {{1068071652754169056ull, 1821296628819947ull}}, {{11922503766429066216ull, 1457037303055957ull}}, {{2159305383659432324ull, 1165629842444766ull}}, {{14522935058080822692ull, 1865007747911625ull}}, {{11618348046464658152ull, 1492006198329300ull}}, {{9294678437171726520ull, 1193604958663440ull}}, {{14871485499474762436ull, 1909767933861504ull}}, {{15586537214321720272ull, 1527814347089203ull}}, {{1401183327231645248ull, 1222251477671363ull}}, {{16999288582538273688ull, 1955602364274180ull}}, {{13599430866030618952ull, 1564481891419344ull}}, {{14568893507566405484ull, 1251585513135475ull}}, {{4863485538396697160ull, 2002536821016761ull}}, {{201439615975447404ull, 1602029456813409ull}}, {{3850500507522268244ull, 1281623565450727ull}}, {{9850149626777539516ull, 2050597704721163ull}}, {{15258817330905852260ull, 1640478163776930ull}}, {{12207053864724681808ull, 1312382531021544ull}}, {{8463239739333759924ull, 2099812049634471ull}}, {{3081242976725097616ull, 1679849639707577ull}}, {{13533040825605809060ull, 1343879711766061ull}}, {{14274167691485473852ull, 2150207538825698ull}}, {{351287708962648112ull, 1720166031060559ull}}, {{3970378981912028812ull, 1376132824848447ull}}, {{10041955185801156424ull, 2201812519757515ull}}, {{8033564148640925140ull, 1761450015806012ull}}, {{17494897763138471080ull, 1409160012644809ull}}, {{17685267025252687188ull, 1127328010115847ull}}, {{13539031981436658208ull, 1803724816185356ull}}, {{7141876770407416244ull, 1442979852948285ull}}, {{5713501416325932992ull, 1154383882358628ull}}, {{5452253451379582468ull, 1847014211773805ull}}, {{4361802761103665972ull, 1477611369419044ull}}, {{7178791023624843100ull, 1182089095535235ull}}, {{11486065637799748964ull, 1891342552856376ull}}, {{5499503695497888848ull, 1513074042285101ull}}, {{710254141656400756ull, 1210459233828081ull}}, {{12204453070875972180ull, 1936734774124929ull}}, {{13452911271442688064ull, 1549387819299943ull}}, {{18141026646637971100ull, 1239510255439954ull}}, {{17957596190395022788ull, 1983216408703927ull}}, {{6987379322832197584ull, 1586573126963142ull}}, {{16657949902491489036ull, 1269258501570513ull}}, {{4516626955534920520ull, 2030813602512822ull}}, {{14681348008653667384ull, 1624650882010257ull}}, {{4366380777439113260ull, 1299720705608206ull}}, {{18054255688128312188ull, 2079553128973129ull}}, {{18132753365244560076ull, 1663642503178503ull}}, {{3438156247969917088ull, 1330914002542803ull}}, {{1811701182009957020ull, 2129462404068485ull}}, {{1449360945607965616ull, 1703569923254788ull}}, {{8538186385970193140ull, 1362855938603830ull}}, {{13661098217552309024ull, 2180569501766128ull}}, {{18307576203525667864ull, 1744455601412902ull}}, {{7267363333336713644ull, 1395564481130322ull}}, {{15317130148080652156ull, 2232903169808515ull}}, {{12253704118464521724ull, 1786322535846812ull}}, {{2424265665287796732ull, 1429058028677450ull}}, {{1939412532230237388ull, 1143246422941960ull}}, {{3103060051568379820ull, 1829194276707136ull}}, {{17239843300222345148ull, 1463355421365708ull}}, {{2723828195952145148ull, 1170684337092567ull}}, {{8047473928265342560ull, 1873094939348107ull}}, {{17506025586838005020ull, 1498475951478485ull}}, {{14004820469470404016ull, 1198780761182788ull}}, {{271619862701184484ull, 1918049217892462ull}}, {{11285342334386678556ull, 1534439374313969ull}}, {{12717622682251253168ull, 1227551499451175ull}}, {{1901452217892453456ull, 1964082399121881ull}}, {{16278557033281604056ull, 1571265919297504ull}}, {{16712194441367193568ull, 1257012735438003ull}}, {{4603418217736047772ull, 2011220376700806ull}}, {{18440129833156479508ull, 1608976301360644ull}}, {{18441452681267093928ull, 1287181041088515ull}}, {{11059580216317798672ull, 2059489665741625ull}}, {{8847664173054238940ull, 1647591732593300ull}}, {{7078131338443391152ull, 1318073386074640ull}}, {{11325010141509425840ull, 2108917417719424ull}}, {{12749356927949450996ull, 1687133934175539ull}}, {{13888834357101471120ull, 1349707147340431ull}}, {{14843437341878533148ull, 2159531435744690ull}}, {{11874749873502826516ull, 1727625148595752ull}}, {{2121102269318440568ull, 1382100118876602ull}}, {{7083112445651415232ull, 2211360190202563ull}}, {{13045187586004952832ull, 1769088152162050ull}}, {{10436150068803962264ull, 1415270521729640ull}}, {{8348920055043169812ull, 1132216417383712ull}}, {{17047620902810982020ull, 1811546267813939ull}}, {{17327445536990695940ull, 1449237014251151ull}}, {{10172607614850646428ull, 1159389611400921ull}}, {{8897474554277213640ull, 1855023378241474ull}}, {{10807328458163681236ull, 1484018702593179ull}}, {{12335211581272855312ull, 1187214962074543ull}}, {{16046989715294658176ull, 1899543939319269ull}}, {{16526940586977636864ull, 1519635151455415ull}}, {{13221552469582109492ull, 1215708121164332ull}}, {{6397088692363733892ull, 1945132993862932ull}}, {{16185717398116718084ull, 1556106395090345ull}}, {{12948573918493374468ull, 1244885116072276ull}}, {{13339020640105578500ull, 1991816185715642ull}}, {{3292518882600642152ull, 1593452948572514ull}}, {{6323363920822424044ull, 1274762358858011ull}}, {{2738684643832057828ull, 2039619774172818ull}}, {{9569645344549466908ull, 1631695819338254ull}}, {{11345065090381483848ull, 1305356655470603ull}}, {{14462755329868463836ull, 2088570648752965ull}}, {{11570204263894771068ull, 1670856519002372ull}}, {{1877465781631996208ull, 1336685215201898ull}}, {{17761340509578835228ull, 2138696344323036ull}}, {{10519723592921157860ull, 1710957075458429ull}}, {{12105127689078836608ull, 1368765660366743ull}}, {{15678855487784228252ull, 2190025056586789ull}}, {{16232433204969292924ull, 1752020045269431ull}}, {{9296597749233524016ull, 1401616036215545ull}}, {{14874556398773638428ull, 2242585657944872ull}}, {{4520947489535090096ull, 1794068526355898ull}}, {{10995455621111892724ull, 1435254821084718ull}}, {{16175062126373334824ull, 1148203856867774ull}}, {{14812052957971604752ull, 1837126170988439ull}}, {{15538991181119194124ull, 1469700936790751ull}}, {{8741844130153444976ull, 1175760749432601ull}}, {{6608252978761691316ull, 1881217199092162ull}}, {{16354648827235084020ull, 1504973759273729ull}}, {{16773067876529977540ull, 1203979007418983ull}}, {{4700815713996502124ull, 1926366411870374ull}}, {{7450001385939112024ull, 1541093129496299ull}}, {{9649349923493199940ull, 1232874503597039ull}}, {{4370913433363388936ull, 1972599205755263ull}}, {{10875428376174531796ull, 1578079364604210ull}}, {{8700342700939625436ull, 1262463491683368ull}}, {{10231199506761490376ull, 2019941586693389ull}}, {{11874308420151102624ull, 1615953269354711ull}}, {{5810097921378971776ull, 1292762615483769ull}}, {{16674854303690175488ull, 2068420184774030ull}}, {{13339883442952140392ull, 1654736147819224ull}}, {{14361255569103622636ull, 1323788918255379ull}}, {{11909962466340065248ull, 2118062269208607ull}}, {{2149272343588231552ull, 1694449815366886ull}}, {{16476813133838226532ull, 1355559852293508ull}}, {{4226808125689700516ull, 2168895763669614ull}}, {{7070795315293670736ull, 1735116610935691ull}}, {{1967287437493026264ull, 1388093288748553ull}}, {{17905055158956483316ull, 2220949261997684ull}}, {{18013392941907096976ull, 1776759409598147ull}}, {{7032016724041856936ull, 1421407527678518ull}}, {{13004311008717306192ull, 1137126022142814ull}}, {{9738851169721958940ull, 1819401635428503ull}}, {{15169778565261387800ull, 1455521308342802ull}}, {{4757125222725289592ull, 1164417046674242ull}}, {{11300749171102373672ull, 1863067274678787ull}}, {{1661901707398078292ull, 1490453819743030ull}}, {{1329521365918462632ull, 1192363055794424ull}}, {{9505931814953360860ull, 1907780889271078ull}}, {{14983443081446509332ull, 1526224711416862ull}}, {{4608056835673386820ull, 1220979769133490ull}}, {{7372890937077418912ull, 1953567630613584ull}}, {{9587661564403845452ull, 1562854104490867ull}}, {{291431622039255716ull, 1250283283592694ull}}, {{7844988224746629792ull, 2000453253748310ull}}, {{6275990579797303836ull, 1600362602998648ull}}, {{12399490093321663712ull, 1280290082398918ull}}, {{16149835334572751620ull, 2048464131838269ull}}, {{16609217082400111620ull, 1638771305470615ull}}, {{13287373665920089296ull, 1311017044376492ull}}, {{6502402606504501580ull, 2097627271002388ull}}, {{12580619714687421908ull, 1678101816801910ull}}, {{10064495771749937528ull, 1342481453441528ull}}, {{12413844420057989720ull, 2147970325506445ull}}, {{9931075536046391776ull, 1718376260405156ull}}, {{4255511614095203096ull, 1374701008324125ull}}, {{6808818582552324956ull, 2199521613318600ull}}, {{5447054866041859964ull, 1759617290654880ull}}, {{4357643892833487972ull, 1407693832523904ull}}, {{7175463929008700700ull, 1126155066019123ull}}, {{7791393471672010800ull, 1801848105630597ull}}, {{17301161221563339608ull, 1441478484504477ull}}, {{6462231347766851040ull, 1153182787603582ull}}, {{14028918971168871988ull, 1845092460165731ull}}, {{7533786362193187268ull, 1476073968132585ull}}, {{6027029089754549812ull, 1180859174506068ull}}, {{5953897728865369380ull, 1889374679209709ull}}, {{8452466997834205824ull, 1511499743367767ull}}, {{17830020042493095628ull, 1209199794694213ull}}, {{6391939179537491068ull, 1934719671510742ull}}, {{16181597787855723824ull, 1547775737208593ull}}, {{1877231786058848092ull, 1238220589766875ull}}, {{3003570857694156944ull, 1981152943627000ull}}, {{2402856686155325556ull, 1584922354901600ull}}, {{1922285348924260444ull, 1267937883921280ull}}, {{3075656558278816712ull, 2028700614274048ull}}, {{9839222876106874016ull, 1622960491419238ull}}, {{15250075930369319860ull, 1298368393135390ull}}, {{5953377414881360160ull, 2077389429016625ull}}, {{4762701931905088128ull, 1661911543213300ull}}, {{3810161545524070500ull, 1329529234570640ull}}, {{6096258472838512804ull, 2127246775313024ull}}, {{8566355593012720564ull, 1701797420250419ull}}, {{10542433289152086776ull, 1361437936200335ull}}, {{16867893262643338840ull, 2178300697920536ull}}, {{9804965795372760748ull, 1742640558336429ull}}, {{11533321451040118924ull, 1394112446669143ull}}, {{14763965506922279952ull, 2230579914670629ull}}, {{15500521220279734284ull, 1784463931736503ull}}, {{1332370531998056460ull, 1427571145389203ull}}, {{8444594055082265812ull, 1142056916311362ull}}, {{17200699302873535624ull, 1827291066098179ull}}, {{17449908257040738824ull, 1461832852878543ull}}, {{2891880161406860088ull, 1169466282302835ull}}, {{4627008258250976140ull, 1871146051684536ull}}, {{12257791858870588ull, 1496916841347629ull}}, {{3699155048229006796ull, 1197533473078103ull}}, {{2229299262424500548ull, 1916053556924965ull}}, {{1783439409939600440ull, 1532842845539972ull}}, {{12494797972177411320ull, 1226274276431977ull}}, {{5234281496516216820ull, 1962038842291164ull}}, {{7876774011954883780ull, 1569631073832931ull}}, {{2612070394821996700ull, 1255704859066345ull}}, {{4179312631715194720ull, 2009127774506152ull}}, {{14411496549597886748ull, 1607302219604921ull}}, {{7839848424936399072ull, 1285841775683937ull}}, {{16233106294640148844ull, 2057346841094299ull}}, {{16675833850454029396ull, 1645877472875439ull}}, {{17030015895105133840ull, 1316701978300351ull}}, {{1422583728974841884ull, 2106723165280563ull}}, {{8516764612663694152ull, 1685378532224450ull}}, {{6813411690130955320ull, 1348302825779560ull}}, {{10901458704209528516ull, 2157284521247296ull}}, {{5031818148625712488ull, 1725827616997837ull}}, {{15093500963126300960ull, 1380662093598269ull}}, {{13081555096776350568ull, 2209059349757231ull}}, {{6775895262679170132ull, 1767247479805785ull}}, {{5420716210143336104ull, 1413797983844628ull}}, {{11715270597598489528ull, 1131038387075702ull}}, {{3987037697189941956ull, 1809661419321124ull}}, {{6878978972493863888ull, 1447729135456899ull}}, {{9192531992737001432ull, 1158183308365519ull}}, {{3640004744153471324ull, 1853093293384831ull}}, {{17669399054290418352ull, 1482474634707864ull}}, {{17824868058174245004ull, 1185979707766291ull}}, {{2694347189885419744ull, 1897567532426067ull}}, {{13223524196134066764ull, 1518054025940853ull}}, {{17957516986391074060ull, 1214443220752682ull}}, {{13974631919258077200ull, 1943109153204292ull}}, {{3801007905922641116ull, 1554487322563434ull}}, {{6730155139480023216ull, 1243589858050747ull}}, {{14457597037909947468ull, 1989743772881195ull}}, {{11566077630327957972ull, 1591795018304956ull}}, {{5563513289520456056ull, 1273436014643965ull}}, {{8901621263232729688ull, 2037497623430344ull}}, {{10810645825328094076ull, 1629998098744275ull}}, {{8648516660262475260ull, 1303998478995420ull}}, {{13837626656419960416ull, 2086397566392672ull}}, {{3691403695652147684ull, 1669118053114138ull}}, {{10331820586005538796ull, 1335294442491310ull}}, {{16530912937608862072ull, 2136471107986096ull}}, {{9535381535345179336ull, 1709176886388877ull}}, {{249607598792322820ull, 1367341509111102ull}}, {{4088720972809626836ull, 2187746414577763ull}}, {{10649674407731522116ull, 1750197131662210ull}}, {{8519739526185217692ull, 1400157705329768ull}}, {{9942234427154437988ull, 2240252328527629ull}}, {{11643136356465460712ull, 1792201862822103ull}}, {{16693206714656189216ull, 1433761490257682ull}}, {{5975867742241130724ull, 1147009192206146ull}}, {{2182690758101988516ull, 1835214707529834ull}}, {{5435501421223501136ull, 1468171766023867ull}}, {{15416447581204531876ull, 1174537412819093ull}}, {{2530223241475789064ull, 1879259860510550ull}}, {{2024178593180631252ull, 1503407888408440ull}}, {{1619342874544505000ull, 1202726310726752ull}}, {{6280297414013118328ull, 1924362097162803ull}}, {{12402935560694315308ull, 1539489677730242ull}}, {{2543650819071631600ull, 1231591742184194ull}}, {{11448538939998431208ull, 1970546787494710ull}}, {{9158831151998744964ull, 1576437429995768ull}}, {{14705762551082816616ull, 1261149943996614ull}}, {{12461173637506775620ull, 2017839910394583ull}}, {{17347636539489241140ull, 1614271928315666ull}}, {{10188760416849482588ull, 1291417542652533ull}}, {{12612667852217261820ull, 2066268068244053ull}}, {{17468831911257630104ull, 1653014454595242ull}}, {{6596367899522283436ull, 1322411563676194ull}}, {{17932886268719474144ull, 2115858501881910ull}}, {{14346309014975579316ull, 1692686801505528ull}}, {{409000767754732484ull, 1354149441204423ull}}, {{15411796487375213264ull, 2166639105927076ull}}, {{8640088375158260288ull, 1733311284741661ull}}, {{3222721885384697908ull, 1386649027793329ull}}, {{12535052646099337300ull, 2218638444469326ull}}, {{6338693302137559516ull, 1774910755575461ull}}, {{1381605826968137288ull, 1419928604460369ull}}, {{4794633476316420156ull, 1135942883568295ull}}, {{7671413562106272248ull, 1817508613709272ull}}, {{17205177293910748768ull, 1454006890967417ull}}, {{6385444205644778368ull, 1163205512773934ull}}, {{17595408358515466036ull, 1861128820438294ull}}, {{17765675501554283152ull, 1488903056350635ull}}, {{14212540401243426520ull, 1191122445080508ull}}, {{603971753538020496ull, 1905795912128814ull}}, {{4172526217572326720ull, 1524636729703051ull}}, {{18095416233025502668ull, 1219709383762440ull}}, {{10505921899131252652ull, 1951535014019905ull}}, {{8404737519305002124ull, 1561228011215924ull}}, {{10413138830185912020ull, 1248982408972739ull}}, {{5592975684071728264ull, 1998371854356383ull}}, {{11853078176741203256ull, 1598697483485106ull}}, {{5793113726651052284ull, 1278957986788085ull}}, {{9268981962641683652ull, 2046332778860936ull}}, {{3725836755371436600ull, 1637066223088749ull}}, {{6670018219039059600ull, 1309652978470999ull}}, {{18050726779946316012ull, 2095444765553598ull}}, {{3372534979731321840ull, 1676355812442879ull}}, {{6387376798526967792ull, 1341084649954303ull}}, {{6530454062901238148ull, 2145735439926885ull}}, {{5224363250320990516ull, 1716588351941508ull}}, {{11558188229740613060ull, 1373270681553206ull}}, {{11114403538101160252ull, 2197233090485130ull}}, {{8891522830480928200ull, 1757786472388104ull}}, {{10802567079126652884ull, 1406229177910483ull}}, {{13594758511860734292ull, 2249966684656773ull}}, {{18254504438972408080ull, 1799973347725418ull}}, {{3535557106952195492ull, 1439978678180335ull}}, {{2828445685561756396ull, 1151982942544268ull}}, {{836164282156899908ull, 1843172708070829ull}}, {{4358280240467430248ull, 1474538166456663ull}}, {{10865321821857764844ull, 1179630533165330ull}}, {{17384514914972423756ull, 1887408853064528ull}}, {{2839565487752208032ull, 1509927082451623ull}}, {{9650350019685587072ull, 1207941665961298ull}}, {{11751211216755028996ull, 1932706665538077ull}}, {{2022271343920202548ull, 1546165332430462ull}}, {{12685863519361893008ull, 1236932265944369ull}}, {{9229335186753297844ull, 1979091625510991ull}}, {{3694119334660727952ull, 1583273300408793ull}}, {{10333993097212403008ull, 1266618640327034ull}}, {{5466342511314113844ull, 2026589824523255ull}}, {{4373074009051291076ull, 1621271859618604ull}}, {{7187808021982943184ull, 1297017487694883ull}}, {{7811144020430798772ull, 2075227980311813ull}}, {{13627612845828459664ull, 1660182384249450ull}}, {{10902090276662767728ull, 1328145907399560ull}}, {{17443344442660428368ull, 2125033451839296ull}}, {{10265326739386432372ull, 1700026761471437ull}}, {{833563762025325248ull, 1360021409177150ull}}, {{1333702019240520400ull, 2176034254683440ull}}, {{1066961615392416320ull, 1740827403746752ull}}, {{11921615736539664024ull, 1392661922997401ull}}, {{11695887548979641796ull, 2228259076795842ull}}, {{1978012409699892788ull, 1782607261436674ull}}, {{5271758742501824556ull, 1426085809149339ull}}, {{7906755808743369968ull, 1140868647319471ull}}, {{5272111664505571300ull, 1825389835711154ull}}, {{7907038146346367364ull, 1460311868568923ull}}, {{13704328146560914536ull, 1168249494855138ull}}, {{18237576219755552936ull, 1869199191768221ull}}, {{10900712161062532028ull, 1495359353414577ull}}, {{1341872099366204976ull, 1196287482731662ull}}, {{5836344173727838284ull, 1914059972370659ull}}, {{8358424153724180948ull, 1531247977896527ull}}, {{17754785767205075728ull, 1224998382317221ull}}, {{2582215524334748904ull, 1959997411707555ull}}, {{2065772419467799124ull, 1567997929366044ull}}, {{5341966750316149620ull, 1254398343492835ull}}, {{8547146800505839396ull, 2007037349588536ull}}, {{3148368625662761192ull, 1605629879670829ull}}, {{6208043715272119276ull, 1284503903736663ull}}, {{6243521129693480520ull, 2055206245978661ull}}, {{1305468089012874092ull, 1644164996782929ull}}, {{4733723285952209596ull, 1315331997426343ull}}, {{3884608442781625032ull, 2104531195882149ull}}, {{6797035568967210348ull, 1683624956705719ull}}, {{9126977269915678604ull, 1346899965364575ull}}, {{14603163631865085764ull, 2155039944583320ull}}, {{11682530905492068612ull, 1724031955666656ull}}, {{5656675909651744564ull, 1379225564533325ull}}, {{9050681455442791308ull, 2206760903253320ull}}, {{7240545164354233044ull, 1765408722602656ull}}, {{2103087316741476112ull, 1412326978082125ull}}, {{1682469853393180888ull, 1129861582465700ull}}, {{2691951765429089424ull, 1807778531945120ull}}, {{2153561412343271540ull, 1446222825556096ull}}, {{16480244388842258524ull, 1156978260444876ull}}, {{542949318954241376ull, 1851165216711803ull}}, {{7813057084647213748ull, 1480932173369442ull}}, {{17318492111943501968ull, 1184745738695553ull}}, {{5573494490658141208ull, 1895593181912886ull}}, {{769446777784602644ull, 1516474545530309ull}}, {{4304906236969592436ull, 1213179636424247ull}}, {{10577198793893258224ull, 1941087418278795ull}}, {{8461759035114606580ull, 1552869934623036ull}}, {{3080058413349774940ull, 1242295947698429ull}}, {{12306791090843460552ull, 1987673516317486ull}}, {{6156084057932858116ull, 1590138813053989ull}}, {{8614216061088196816ull, 1272111050443191ull}}, {{6404048068257294264ull, 2035377680709106ull}}, {{1433889639863925088ull, 1628302144567285ull}}, {{1147111711891140068ull, 1302641715653828ull}}, {{16592773997993465404ull, 2084226745046124ull}}, {{16963568013136682644ull, 1667381396036899ull}}, {{17260203225251256440ull, 1333905116829519ull}}, {{16548278716176279336ull, 2134248186927231ull}}, {{9549274158199113144ull, 1707398549541785ull}}, {{7639419326559290516ull, 1365918839633428ull}}, {{8533722107752954500ull, 2185470143413485ull}}, {{6826977686202363600ull, 1748376114730788ull}}, {{12840279778445711528ull, 1398700891784630ull}}, {{2097703571803586828ull, 2237921426855409ull}}, {{5367511672184779784ull, 1790337141484327ull}}, {{15362055781973554796ull, 1432269713187461ull}}, {{8600295810836933516ull, 1145815770549969ull}}, {{2692426853113362656ull, 1833305232879951ull}}, {{16911336741458331416ull, 1466644186303960ull}}, {{13529069393166665132ull, 1173315349043168ull}}, {{17957162214324753888ull, 1877304558469069ull}}, {{18055078586201713436ull, 1501843646775255ull}}, {{14444062868961370748ull, 1201474917420204ull}}, {{12042454146112462228ull, 1922359867872327ull}}, {{2255265687406149136ull, 1537887894297862ull}}, {{12872258994150650276ull, 1230310315438289ull}}, {{9527567946415309476ull, 1968496504701263ull}}, {{15000751986616068228ull, 1574797203761010ull}}, {{12000601589292854580ull, 1259837763008808ull}}, {{15511613728126657008ull, 2015740420814093ull}}, {{1341244538275594636ull, 1612592336651275ull}}, {{1072995630620475708ull, 1290073869321020ull}}, {{1716793008992761136ull, 2064118190913632ull}}, {{12441480851419939876ull, 1651294552730905ull}}, {{9953184681135951900ull, 1321035642184724ull}}, {{4857049045591792072ull, 2113657027495559ull}}, {{7574988051215343980ull, 1690925621996447ull}}, {{17128036885198006156ull, 1352740497597157ull}}, {{12647463757349168556ull, 2164384796155452ull}}, {{2739273376395514196ull, 1731507836924362ull}}, {{13259465145342142328ull, 1385206269539489ull}}, {{10147097788321696756ull, 2216330031263183ull}}, {{15496375860141178048ull, 1773064025010546ull}}, {{8707751873371032116ull, 1418451220008437ull}}, {{18034247942922556664ull, 1134760976006749ull}}, {{17786750264450359692ull, 1815617561610799ull}}, {{17918749026302198076ull, 1452494049288639ull}}, {{18024348035783668784ull, 1161995239430911ull}}, {{3013515154060497792ull, 1859192383089459ull}}, {{6100160937990308556ull, 1487353906471567ull}}, {{15948175194617977816ull, 1189883125177253ull}}, {{3380987422937302564ull, 1903813000283606ull}}, {{17462185197317483344ull, 1523050400226884ull}}, {{17659096972595897000ull, 1218440320181507ull}}, {{13497159897185793904ull, 1949504512290412ull}}, {{3419030288264814476ull, 1559603609832330ull}}, {{2735224230611851580ull, 1247682887865864ull}}, {{11755056398462783180ull, 1996292620585382ull}}, {{2025347489286405896ull, 1597034096468306ull}}, {{16377673250396766008ull, 1277627277174644ull}}, {{15136230756409094648ull, 2044203643479431ull}}, {{8419635790385365392ull, 1635362914783545ull}}, {{6735708632308292316ull, 1308290331826836ull}}, {{3398436182209447056ull, 2093264530922938ull}}, {{10097446575251378292ull, 1674611624738350ull}}, {{8077957260201102632ull, 1339689299790680ull}}, {{12924731616321764216ull, 2143502879665088ull}}, {{17718482922541232016ull, 1714802303732070ull}}, {{14174786338032985612ull, 1371841842985656ull}}, {{15300960511368956336ull, 2194946948777050ull}}, {{12240768409095165068ull, 1755957559021640ull}}, {{9792614727276132056ull, 1404766047217312ull}}, {{910788304674169996ull, 2247625675547700ull}}, {{728630643739335996ull, 1798100540438160ull}}, {{582904514991468796ull, 1438480432350528ull}}, {{7845021241476995684ull, 1150784345880422ull}}, {{16241382801105103416ull, 1841254953408675ull}}, {{12993106240884082732ull, 1473003962726940ull}}, {{10394484992707266188ull, 1178403170181552ull}}, {{1873780729363984608ull, 1885445072290484ull}}, {{5188373398233098008ull, 1508356057832387ull}}, {{15218745162812209376ull, 1206684846265909ull}}, {{13281945816273804032ull, 1930695754025455ull}}, {{10625556653019043228ull, 1544556603220364ull}}, {{12189794137157144904ull, 1235645282576291ull}}, {{12124972989967611200ull, 1977032452122066ull}}, {{6010629577232178636ull, 1581625961697653ull}}, {{12187201291269563556ull, 1265300769358122ull}}, {{4742126807063660396ull, 2024481230972996ull}}, {{104352630909017996ull, 1619584984778397ull}}, {{11151528548952945364ull, 1295667987822717ull}}, {{3085050419357071292ull, 2073068780516348ull}}, {{9846737964969477680ull, 1658455024413078ull}}, {{15256088001459402788ull, 1326764019530462ull}}, {{9652345543367403172ull, 2122822431248740ull}}, {{7721876434693922536ull, 1698257944998992ull}}, {{17245547591980869000ull, 1358606355999193ull}}, {{5456783258717928460ull, 2173770169598710ull}}, {{4365426606974342768ull, 1739016135678968ull}}, {{10871038915063294860ull, 1391212908543174ull}}, {{6325615819875540808ull, 2225940653669079ull}}, {{8749841470642342968ull, 1780752522935263ull}}, {{14378570805997695020ull, 1424602018348210ull}}, {{11502856644798156016ull, 1139681614678568ull}}, {{14715221816935139304ull, 1823490583485709ull}}, {{15461526268290021768ull, 1458792466788567ull}}, {{4990523385148196768ull, 1167033973430854ull}}, {{15363535045720935472ull, 1867254357489366ull}}, {{8601479221834838056ull, 1493803485991493ull}}, {{14259881006951691092ull, 1195042788793194ull}}, {{11747763166896974776ull, 1912068462069111ull}}, {{5708861718775669496ull, 1529654769655289ull}}, {{8256438189762445920ull, 1223723815724231ull}}, {{5831603474136092828ull, 1957958105158770ull}}, {{4665282779308874260ull, 1566366484127016ull}}, {{42877408705189084ull, 1253093187301613ull}}, {{14825999112895943832ull, 2004949099682580ull}}, {{11860799290316755064ull, 1603959279746064ull}}, {{13177988246995314376ull, 1283167423796851ull}}, {{13706083565708682356ull, 2053067878074962ull}}, {{3586169223083125236ull, 1642454302459970ull}}, {{2868935378466500188ull, 1313963441967976ull}}, {{15658343049772131272ull, 2102341507148761ull}}, {{8837325625075794696ull, 1681873205719009ull}}, {{10759209314802546080ull, 1345498564575207ull}}, {{2457339644716432436ull, 2152797703320332ull}}, {{13033918159998876916ull, 1722238162656265ull}}, {{10427134527999101532ull, 1377790530125012ull}}, {{1926019985830921160ull, 2204464848200020ull}}, {{1540815988664736928ull, 1763571878560016ull}}, {{15990048049899430836ull, 1410857502848012ull}}, {{5413340810435724020ull, 1128686002278410ull}}, {{8661345296697158436ull, 1805897603645456ull}}, {{3239727422615816424ull, 1444718082916365ull}}, {{2591781938092653140ull, 1155774466333092ull}}, {{7836199915690155348ull, 1849239146132947ull}}, {{17337006376777855248ull, 1479391316906357ull}}, {{6490907471938463552ull, 1183513053525086ull}}, {{3006754325617721036ull, 1893620885640138ull}}, {{9784101089977997476ull, 1514896708512110ull}}, {{7827280871982397980ull, 1211917366809688ull}}, {{8834300580429926444ull, 1939067786895501ull}}, {{3378091649602030832ull, 1551254229516401ull}}, {{17459868578649265960ull, 1241003383613120ull}}, {{9489045652129273920ull, 1985605413780993ull}}, {{14969934151187239780ull, 1588484331024794ull}}, {{15665296135691702148ull, 1270787464819835ull}}, {{6617729743397171820ull, 2033259943711737ull}}, {{16362230238943468428ull, 1626607954969389ull}}, {{16779133005896685064ull, 1301286363975511ull}}, {{1021171106241323840ull, 2082058182360819ull}}, {{4506285699734969396ull, 1665646545888655ull}}, {{3605028559787975516ull, 1332517236710924ull}}, {{13146743325144581472ull, 2132027578737478ull}}, {{17896092289599485824ull, 1705622062989982ull}}, {{6938176202195768012ull, 1364497650391986ull}}, {{3722384294029408176ull, 2183196240627178ull}}, {{10356605064707347188ull, 1746556992501742ull}}, {{906586422282057104ull, 1397245594001394ull}}, {{8829235905135112012ull, 2235592950402230ull}}, {{7063388724108089608ull, 1788474360321784ull}}, {{9340059794028382008ull, 1430779488257427ull}}, {{93350205738884960ull, 1144623590605942ull}}, {{3838709143924126260ull, 1831397744969507ull}}, {{14139013759365031980ull, 1465118195975605ull}}, {{11311211007492025584ull, 1172094556780484ull}}, {{7029891167761509964ull, 1875351290848775ull}}, {{5623912934209207972ull, 1500281032679020ull}}, {{4499130347367366376ull, 1200224826143216ull}}, {{18266655000013517172ull, 1920359721829145ull}}, {{14613324000010813736ull, 1536287777463316ull}}, {{8001310385266740668ull, 1229030221970653ull}}, {{9112747801684874744ull, 1966448355153045ull}}, {{7290198241347899796ull, 1573158684122436ull}}, {{2142809778336409512ull, 1258526947297949ull}}, {{10807193274822075868ull, 2013643115676718ull}}, {{16024452249341481340ull, 1610914492541374ull}}, {{16508910614215095396ull, 1288731594033099ull}}, {{15346210538518421664ull, 2061970550452959ull}}, {{15966317245556647652ull, 1649576440362367ull}}, {{5394356166961497476ull, 1319661152289894ull}}, {{16009667496622216608ull, 2111457843663830ull}}, {{12807733997297773288ull, 1689166274931064ull}}, {{13935536012580128952ull, 1351333019944851ull}}, {{14918159990644385680ull, 2162132831911762ull}}, {{4555830363031687896ull, 1729706265529410ull}}, {{3644664290425350316ull, 1383765012423528ull}}, {{2142114049938650184ull, 2214024019877645ull}}, {{1713691239950920148ull, 1771219215902116ull}}, {{16128348250928377408ull, 1416975372721692ull}}, {{5523980971258881280ull, 1133580298177354ull}}, {{16217067183498030696ull, 1813728477083766ull}}, {{9284304932056514236ull, 1450982781667013ull}}, {{14806141575129032032ull, 1160786225333610ull}}, {{5243082446496899640ull, 1857257960533777ull}}, {{15262512401423250680ull, 1485806368427021ull}}, {{8520661106396690220ull, 1188645094741617ull}}, {{17322406584976614676ull, 1901832151586587ull}}, {{6479227638497471096ull, 1521465721269270ull}}, {{5183382110797976876ull, 1217172577015416ull}}, {{914713747792942356ull, 1947476123224666ull}}, {{15489166257201995176ull, 1557980898579732ull}}, {{5012635376277775496ull, 1246384718863786ull}}, {{641518972560620148ull, 1994215550182058ull}}, {{7891912807532316764ull, 1595372440145646ull}}, {{2624181431283943088ull, 1276297952116517ull}}, {{7888039104796219264ull, 2042076723386427ull}}, {{17378477728062706380ull, 1633661378709141ull}}, {{10213433367708254780ull, 1306929102967313ull}}, {{12652144573591297328ull, 2091086564747701ull}}, {{6432366844131127536ull, 1672869251798161ull}}, {{1456544660562991708ull, 1338295401438529ull}}, {{9709169086384607380ull, 2141272642301646ull}}, {{4077986454365775580ull, 1713018113841317ull}}, {{14330435607718351432ull, 1370414491073053ull}}, {{792604083897900352ull, 2192663185716886ull}}, {{15391478526085961576ull, 1754130548573508ull}}, {{1245136376643038292ull, 1403304438858807ull}}, {{5681567017370771588ull, 2245287102174091ull}}, {{855904799154706948ull, 1796229681739273ull}}, {{8063421468807586204ull, 1436983745391418ull}}, {{13829434804529889608ull, 1149586996313134ull}}, {{11059049243022092408ull, 1839339194101015ull}}, {{8847239394417673924ull, 1471471355280812ull}}, {{18145837959759870108ull, 1177177084224649ull}}, {{17965294291390061204ull, 1883483334759439ull}}, {{18061584247853959288ull, 1506786667807551ull}}, {{10759918583541257108ull, 1205429334246041ull}}, {{9837172104182190724ull, 1928686934793666ull}}, {{4180388868603842256ull, 1542949547834933ull}}, {{10723008724366894452ull, 1234359638267946ull}}, {{9778116329503210476ull, 1974975421228714ull}}, {{11511841878344478704ull, 1579980336982971ull}}, {{5520124687933672640ull, 1263984269586377ull}}, {{12521548315435786548ull, 2022374831338203ull}}, {{17395936281832449884ull, 1617899865070562ull}}, {{6538051395982139260ull, 1294319892056450ull}}, {{10460882233571422820ull, 2070911827290320ull}}, {{8368705786857138256ull, 1656729461832256ull}}, {{3005615814743800280ull, 1325383569465805ull}}, {{4808985303590080448ull, 2120613711145288ull}}, {{11225885872355885004ull, 1696490968916230ull}}, {{8980708697884708004ull, 1357192775132984ull}}, {{3301087472389801836ull, 2171508440212775ull}}, {{2640869977911841468ull, 1737206752170220ull}}, {{2112695982329473176ull, 1389765401736176ull}}, {{14448360015952888052ull, 2223624642777881ull}}, {{7869339198020400116ull, 1778899714222305ull}}, {{6295471358416320092ull, 1423119771377844ull}}, {{8725725901474966396ull, 1138495817102275ull}}, {{13961161442359946236ull, 1821593307363640ull}}, {{11168929153887956988ull, 1457274645890912ull}}, {{1556445693626544944ull, 1165819716712730ull}}, {{2490313109802471912ull, 1865311546740368ull}}, {{9370948117325798176ull, 1492249237392294ull}}, {{11186107308602548864ull, 1193799389913835ull}}, {{17897771693764078184ull, 1910079023862136ull}}, {{10628868540269352224ull, 1528063219089709ull}}, {{12192443646957392100ull, 1222450575271767ull}}, {{4750514576164186072ull, 1955920920434828ull}}, {{11179109290415169504ull, 1564736736347862ull}}, {{1564589802848314956ull, 1251789389078290ull}}, {{2503343684557303928ull, 2002863022525264ull}}, {{5692023762387753468ull, 1602290418020211ull}}, {{864270195168292448ull, 1281832334416169ull}}, {{8761529941753088568ull, 2050931735065870ull}}, {{7009223953402470852ull, 1640745388052696ull}}, {{1918030347980066360ull, 1312596310442157ull}}, {{6758197371510016500ull, 2100154096707451ull}}, {{1717209082466102876ull, 1680123277365961ull}}, {{16131162524940523592ull, 1344098621892768ull}}, {{3673767151453375808ull, 2150557795028430ull}}, {{2939013721162700648ull, 1720446236022744ull}}, {{6040559791672070840ull, 1376356988818195ull}}, {{9664895666675313348ull, 2202171182109112ull}}, {{353218903856430032ull, 1761736945687290ull}}, {{282575123085144024ull, 1409389556549832ull}}, {{11294106542693846188ull, 1127511645239865ull}}, {{18070570468310153904ull, 1804018632383784ull}}, {{18145805189390033444ull, 1443214905907027ull}}, {{7137946522028206108ull, 1154571924725622ull}}, {{15110063249987040100ull, 1847315079560995ull}}, {{12088050599989632080ull, 1477852063648796ull}}, {{5981091665249795340ull, 1182281650919037ull}}, {{13259095479141582868ull, 1891650641470459ull}}, {{14296625198055176616ull, 1513320513176367ull}}, {{4058602528960320648ull, 1210656410541094ull}}, {{13872461675820333684ull, 1937050256865750ull}}, {{11097969340656266944ull, 1549640205492600ull}}, {{8878375472525013556ull, 1239712164394080ull}}, {{14205400756040021692ull, 1983539463030528ull}}, {{296274160606286384ull, 1586831570424423ull}}, {{7615716957968849752ull, 1269465256339538ull}}, {{8495798318008249280ull, 2031144410143261ull}}, {{3107289839664689100ull, 1624915528114609ull}}, {{6175180686473661604ull, 1299932422491687ull}}, {{13569637913099768892ull, 2079891875986699ull}}, {{14545059145221725436ull, 1663913500789359ull}}, {{15325396130919290672ull, 1331130800631487ull}}, {{9763238550503223780ull, 2129809281010380ull}}, {{7810590840402579024ull, 1703847424808304ull}}, {{9937821487063973544ull, 1363077939846643ull}}, {{12211165564560447348ull, 2180924703754629ull}}, {{13458281266390268200ull, 1744739763003703ull}}, {{18145322642596035208ull, 1395791810402962ull}}, {{14275120969186015040ull, 2233266896644740ull}}, {{11420096775348812032ull, 1786613517315792ull}}, {{1757379790795228976ull, 1429290813852634ull}}, {{5095252647378093504ull, 1143432651082107ull}}, {{11841753050546859932ull, 1829492241731371ull}}, {{5784053625695577620ull, 1463593793385097ull}}, {{15695289344782193068ull, 1170875034708077ull}}, {{10355067692683867616ull, 1873400055532924ull}}, {{11973402968889004416ull, 1498720044426339ull}}, {{13268071189853113856ull, 1198976035541071ull}}, {{13850216274281161524ull, 1918361656865714ull}}, {{14769521834166839540ull, 1534689325492571ull}}, {{8126268652591561308ull, 1227751460394057ull}}, {{16691378658888408420ull, 1964402336630491ull}}, {{9663754112368816412ull, 1571521869304393ull}}, {{15109700919378873776ull, 1257217495443514ull}}, {{13107475026780467072ull, 2011547992709623ull}}, {{17864677650908194304ull, 1609238394167698ull}}, {{3223695676500824472ull, 1287390715334159ull}}, {{12536610711885139804ull, 2059825144534654ull}}, {{13718637384250022164ull, 1647860115627723ull}}, {{18353607536883838380ull, 1318288092502178ull}}, {{7229679170562679468ull, 2109260948003486ull}}, {{2094394521708233252ull, 1687408758402789ull}}, {{5364864432108496924ull, 1349927006722231ull}}, {{1205085461889774432ull, 2159883210755570ull}}, {{964068369511819544ull, 1727906568604456ull}}, {{15528649954577096928ull, 1382325254883564ull}}, {{13777793483097624116ull, 2211720407813703ull}}, {{18400932415961919940ull, 1769376326250962ull}}, {{7342048303285715304ull, 1415501061000770ull}}, {{5873638642628572244ull, 1132400848800616ull}}, {{2019124198721894944ull, 1811841358080986ull}}, {{16372694617945157248ull, 1449473086464788ull}}, {{2030109250130394828ull, 1159578469171831ull}}, {{14316221244434362696ull, 1855325550674929ull}}, {{15142325810289400480ull, 1484260440539943ull}}, {{1045814204005789416ull, 1187408352431955ull}}, {{1673302726409263064ull, 1899853363891128ull}}, {{8717339810611231096ull, 1519882691112902ull}}, {{18041918292714715848ull, 1215906152890321ull}}, {{3041627565150173092ull, 1945449844624515ull}}, {{2433302052120138476ull, 1556359875699612ull}}, {{13014688085921841748ull, 1245087900559689ull}}, {{9755454493249215828ull, 1992140640895503ull}}, {{15183061224083193308ull, 1593712512716402ull}}, {{4767751349782734000ull, 1274970010173122ull}}, {{11317750974394284728ull, 2039952016276995ull}}, {{9054200779515427780ull, 1631961613021596ull}}, {{3554011808870431900ull, 1305569290417277ull}}, {{9375767708934601364ull, 2088910864667643ull}}, {{14879311796631501740ull, 1671128691734114ull}}, {{15592798252047111712ull, 1336902953387291ull}}, {{17569779573791558096ull, 2139044725419666ull}}, {{10366474844291336152ull, 1711235780335733ull}}, {{15671877504916889568ull, 1368988624268586ull}}, {{17696306378383202664ull, 2190381798829738ull}}, {{3088998658480831164ull, 1752305439063791ull}}, {{17228594185752306224ull, 1401844351251032ull}}, {{12808355438236048664ull, 2242950962001652ull}}, {{2867986721105018284ull, 1794360769601322ull}}, {{13362435821109745596ull, 1435488615681057ull}}, {{3311251027403975832ull, 1148390892544846ull}}, {{16366048088072092300ull, 1837425428071753ull}}, {{2024792026231942868ull, 1469940342457403ull}}, {{8998531250469374940ull, 1175952273965922ull}}, {{18086998815492910232ull, 1881523638345475ull}}, {{14469599052394328184ull, 1505218910676380ull}}, {{11575679241915462548ull, 1204175128541104ull}}, {{7453040342839009108ull, 1926680205665767ull}}, {{17030478718496938256ull, 1541344164532613ull}}, {{2556336530571819632ull, 1233075331626091ull}}, {{15158184893140642384ull, 1972920530601745ull}}, {{12126547914512513908ull, 1578336424481396ull}}, {{6011889516868100804ull, 1262669139585117ull}}, {{13308372041730871608ull, 2020270623336187ull}}, {{3268000003900876640ull, 1616216498668950ull}}, {{2614400003120701312ull, 1292973198935160ull}}, {{4183040004993122100ull, 2068757118296256ull}}, {{18103827262962138972ull, 1655005694637004ull}}, {{18172410625111621500ull, 1324004555709603ull}}, {{6939764111727132464ull, 2118407289135366ull}}, {{1862462474639795648ull, 1694725831308293ull}}, {{8868667609195657164ull, 1355780665046634ull}}, {{3121821730487320492ull, 2169249064074615ull}}, {{2497457384389856392ull, 1735399251259692ull}}, {{13066012351737616084ull, 1388319401007753ull}}, {{17216270948038275412ull, 2221311041612405ull}}, {{13773016758430620328ull, 1777048833289924ull}}, {{14707762221486406588ull, 1421639066631939ull}}, {{15455558591931035592ull, 1137311253305551ull}}, {{17350196117605836304ull, 1819698005288882ull}}, {{6501459264600848396ull, 1455758404231106ull}}, {{1511818596938768392ull, 1164606723384885ull}}, {{2418909755102029428ull, 1863370757415816ull}}, {{16692523063049264836ull, 1490696605932652ull}}, {{5975320820955591220ull, 1192557284746122ull}}, {{13249862128270856280ull, 1908091655593795ull}}, {{10599889702616685024ull, 1526473324475036ull}}, {{4790562947351437696ull, 1221178659580029ull}}, {{15043598345246120960ull, 1953885855328046ull}}, {{8345529861454986444ull, 1563108684262437ull}}, {{17744470333389720124ull, 1250486947409949ull}}, {{17323106089197821232ull, 2000779115855919ull}}, {{17547833686100167308ull, 1600623292684735ull}}, {{14038266948880133844ull, 1280498634147788ull}}, {{325134229756752216ull, 2048797814636462ull}}, {{11328153828031132740ull, 1639038251709169ull}}, {{12751871877166816516ull, 1311230601367335ull}}, {{1956250929757354808ull, 2097968962187737ull}}, {{12633047188031614816ull, 1678375169750189ull}}, {{13795786565167202176ull, 1342700135800151ull}}, {{14694560874783702836ull, 2148320217280242ull}}, {{4376951070343141624ull, 1718656173824194ull}}, {{7190909671016423620ull, 1374924939059355ull}}, {{11505455473626277796ull, 2199879902494968ull}}, {{16583062008384842880ull, 1759903921995974ull}}, {{16955798421449784628ull, 1407923137596779ull}}, {{17253987551901738024ull, 1126338510077423ull}}, {{5470287194591318904ull, 1802141616123878ull}}, {{11754927385156875768ull, 1441713292899102ull}}, {{2025244278641679968ull, 1153370634319282ull}}, {{6929739660568598272ull, 1845393014910851ull}}, {{1854442913712968296ull, 1476314411928681ull}}, {{16240949589938015928ull, 1181051529542944ull}}, {{14917472899675094516ull, 1889682447268711ull}}, {{8244629504998165288ull, 1511745957814969ull}}, {{10285052418740442556ull, 1209396766251975ull}}, {{16456083869984708088ull, 1935034826003160ull}}, {{13164867095987766472ull, 1548027860802528ull}}, {{17910591306274033824ull, 1238422288642022ull}}, {{13899550831070812824ull, 1981475661827236ull}}, {{7430291850114739936ull, 1585180529461789ull}}, {{9633582294833702272ull, 1268144423569431ull}}, {{8035034042250102988ull, 2029031077711090ull}}, {{6428027233800082392ull, 1623224862168872ull}}, {{16210468231265796880ull, 1298579889735097ull}}, {{11179353911057633720ull, 2077727823576156ull}}, {{5254134314104196652ull, 1662182258860925ull}}, {{4203307451283357320ull, 1329745807088740ull}}, {{6725291922053371716ull, 2127593291341984ull}}, {{9069582352384607696ull, 1702074633073587ull}}, {{18323712326133417124ull, 1361659706458869ull}}, {{18249893277587736432ull, 2178655530334191ull}}, {{10910565807328278820ull, 1742924424267353ull}}, {{16107150275346443704ull, 1394339539413882ull}}, {{11014045181586668632ull, 2230943263062212ull}}, {{1432538515785514260ull, 1784754610449770ull}}, {{1146030812628411408ull, 1427803688359816ull}}, {{15674219909070370420ull, 1142242950687852ull}}, {{10321356595544951380ull, 1827588721100564ull}}, {{11946434091177871424ull, 1462070976880451ull}}, {{5867798458200386816ull, 1169656781504361ull}}, {{2009779903636798260ull, 1871450850406978ull}}, {{8986521552393259256ull, 1497160680325582ull}}, {{18257263686140338372ull, 1197728544260465ull}}, {{10764877824114989784ull, 1916365670816745ull}}, {{8611902259291991824ull, 1533092536653396ull}}, {{3200172992691683136ull, 1226474029322717ull}}, {{8809625603048603344ull, 1962358446916347ull}}, {{18115746926664613644ull, 1569886757533077ull}}, {{7113899911847870268ull, 1255909406026462ull}}, {{15071588673698502752ull, 2009455049642339ull}}, {{15746619753700712524ull, 1607564039713871ull}}, {{8907946988218659696ull, 1286051231771097ull}}, {{17942063995891765840ull, 2057681970833755ull}}, {{14353651196713412672ull, 1646145576667004ull}}, {{15172269772112640460ull, 1316916461333603ull}}, {{2139538746928762796ull, 2107066338133766ull}}, {{16469026256510651532ull, 1685653070507012ull}}, {{5796523375724700576ull, 1348522456405610ull}}, {{9274437401159520924ull, 2157635930248976ull}}, {{3730201106185706416ull, 1726108744199181ull}}, {{17741556143916206424ull, 1380886995359344ull}}, {{17318443386040199312ull, 2209419192574951ull}}, {{10165405894090249128ull, 1767535354059961ull}}, {{4442975900530288976ull, 1414028283247969ull}}, {{7243729535166141504ull, 1131222626598375ull}}, {{11589967256265826408ull, 1809956202557400ull}}, {{9271973805012661128ull, 1447964962045920ull}}, {{7417579044010128900ull, 1158371969636736ull}}, {{4489428840932385596ull, 1853395151418778ull}}, {{10970240702229729124ull, 1482716121135022ull}}, {{1397494932299962652ull, 1186172896908018ull}}, {{16993387150647581536ull, 1897876635052828ull}}, {{2526663276292334260ull, 1518301308042263ull}}, {{9400028250517688052ull, 1214641046433810ull}}, {{15040045200828300888ull, 1943425674294096ull}}, {{8342687345920730388ull, 1554740539435277ull}}, {{17742196320962315280ull, 1243792431548221ull}}, {{2562072410346332184ull, 1990067890477155ull}}, {{2049657928277065748ull, 1592054312381724ull}}, {{5329075157363562920ull, 1273643449905379ull}}, {{15905217881265521320ull, 2037829519848606ull}}, {{9034825490270506732ull, 1630263615878885ull}}, {{7227860392216405384ull, 1304210892703108ull}}, {{7875227812804338296ull, 2086737428324973ull}}, {{13678879879727291280ull, 1669389942659978ull}}, {{18321801533265653672ull, 1335511954127982ull}}, {{14557487194257404584ull, 2136819126604772ull}}, {{4267292125922103020ull, 1709455301283818ull}}, {{10792531330221503060ull, 1367564241027054ull}}, {{6200003684128673928ull, 2188102785643287ull}}, {{16028049391528670112ull, 1750482228514629ull}}, {{16511788327964846412ull, 1400385782811703ull}}, {{4282768436292292324ull, 2240617252498726ull}}, {{18183610008001475152ull, 1792493801998980ull}}, {{14546888006401180120ull, 1433995041599184ull}}, {{15326859219862854420ull, 1147196033279347ull}}, {{9765579492812925780ull, 1835513653246956ull}}, {{4123114779508430300ull, 1468410922597565ull}}, {{3298491823606744240ull, 1174728738078052ull}}, {{8966935732512701108ull, 1879565980924883ull}}, {{14552246215493981532ull, 1503652784739906ull}}, {{7952448157653274900ull, 1202922227791925ull}}, {{12723917052245239844ull, 1924675564467080ull}}, {{10179133641796191876ull, 1539740451573664ull}}, {{11832655728178863824ull, 1231792361258931ull}}, {{11553551535602361472ull, 1970867778014290ull}}, {{9242841228481889176ull, 1576694222411432ull}}, {{15575353301690696ull, 1261355377929146ull}}, {{11092967009508436080ull, 2018168604686633ull}}, {{16253071237090569512ull, 1614534883749306ull}}, {{9313108174930545284ull, 1291627906999445ull}}, {{14900973079888872460ull, 2066604651199112ull}}, {{4542080834427277320ull, 1653283720959290ull}}, {{3633664667541821856ull, 1322626976767432ull}}, {{9503212282808825292ull, 2116203162827891ull}}, {{3913221011505149912ull, 1692962530262313ull}}, {{10509274438687940576ull, 1354370024209850ull}}, {{16814839101900704920ull, 2166992038735760ull}}, {{13451871281520563936ull, 1733593630988608ull}}, {{18140194654700271796ull, 1386874904790886ull}}, {{3198869744327062612ull, 2218999847665419ull}}, {{6248444610203560412ull, 1775199878132335ull}}, {{4998755688162848328ull, 1420159902505868ull}}, {{11377702180014099308ull, 1136127922004694ull}}, {{7136277043796827924ull, 1817804675207511ull}}, {{2019672820295552016ull, 1454243740166009ull}}, {{5305087070978351936ull, 1163394992132807ull}}, {{12177488128307273424ull, 1861431987412491ull}}, {{6052641687903908416ull, 1489145589929993ull}}, {{12220810979806947376ull, 1191316471943994ull}}, {{8485251123465384836ull, 1906106355110391ull}}, {{3098852084030397544ull, 1524885084088313ull}}, {{9857779296708138684ull, 1219908067270650ull}}, {{15772446874733021892ull, 1951852907633040ull}}, {{12617957499786417512ull, 1561482326106432ull}}, {{2715668370345313364ull, 1249185860885146ull}}, {{15413115836778232352ull, 1998697377416233ull}}, {{1262446225196854912ull, 1598957901932987ull}}, {{12078003424383214900ull, 1279166321546389ull}}, {{8256759034787412872ull, 2046666114474223ull}}, {{13984104857313750944ull, 1637332891579378ull}}, {{119237441625269784ull, 1309866313263503ull}}, {{14948175165568072948ull, 2095786101221604ull}}, {{15647888947196368680ull, 1676628880977283ull}}, {{1450264713531363976ull, 1341303104781827ull}}, {{6009772356392092684ull, 2146084967650923ull}}, {{12186515514597494792ull, 1716867974120738ull}}, {{17127910041161816480ull, 1373494379296590ull}}, {{8957911992149354756ull, 2197591006874545ull}}, {{7166329593719483804ull, 1758072805499636ull}}, {{2043714860233676720ull, 1406458244399709ull}}, {{10648641405857703400ull, 2250333191039534ull}}, {{12208261939428073040ull, 1800266552831627ull}}, {{2387911922058637788ull, 1440213242265302ull}}, {{12978375981872641200ull, 1152170593812241ull}}, {{13386703941512405272ull, 1843472950099586ull}}, {{7020014338468013896ull, 1474778360079669ull}}, {{9305360285516321440ull, 1179822688063735ull}}, {{14888576456826114304ull, 1887716300901976ull}}, {{8221512350718981120ull, 1510173040721581ull}}, {{2887861065833274572ull, 1208138432577265ull}}, {{4620577705333239316ull, 1933021492123624ull}}, {{7385810979008501776ull, 1546417193698899ull}}, {{9597997597948711744ull, 1237133754959119ull}}, {{4288749712492207820ull, 1979414007934591ull}}, {{18188395028961407548ull, 1583531206347672ull}}, {{7172018393685305392ull, 1266824965078138ull}}, {{7785880615154578304ull, 2026919944125021ull}}, {{2539355677381752320ull, 1621535955300017ull}}, {{13099530986131132824ull, 1297228764240013ull}}, {{17269900763067902200ull, 2075566022784021ull}}, {{10126571795712411436ull, 1660452818227217ull}}, {{722559807086108500ull, 1328362254581774ull}}, {{8534793320821594248ull, 2125379607330838ull}}, {{14206532286141096044ull, 1700303685864670ull}}, {{11365225828912876836ull, 1360242948691736ull}}, {{10805663696776782292ull, 2176388717906778ull}}, {{16023228586905246480ull, 1741110974325422ull}}, {{5439885240040376536ull, 1392888779460338ull}}, {{5014467569322692136ull, 2228622047136541ull}}, {{322225240716243388ull, 1782897637709233ull}}, {{7636477822056815356ull, 1426318110167386ull}}, {{2419833442903541960ull, 1141054488133909ull}}, {{11250431138129487784ull, 1825687181014254ull}}, {{12689693725245500552ull, 1460549744811403ull}}, {{17530452609680221088ull, 1168439795849122ull}}, {{13291328916520712448ull, 1869503673358596ull}}, {{6943714318474659632ull, 1495602938686877ull}}, {{16623017899005458676ull, 1196482350949501ull}}, {{771386935215361620ull, 1914371761519203ull}}, {{7995807177656109944ull, 1531497409215362ull}}, {{17464692186350618924ull, 1225197927372289ull}}, {{16875461053935259308ull, 1960316683795663ull}}, {{2432322398922476476ull, 1568253347036531ull}}, {{16703253178105622472ull, 1254602677629224ull}}, {{15657158640743264988ull, 2007364284206759ull}}, {{16215075727336522316ull, 1605891427365407ull}}, {{5593362952385397204ull, 1284713141892326ull}}, {{1570683094332814884ull, 2055541027027722ull}}, {{12324592919691982876ull, 1644432821622177ull}}, {{2480976706269765652ull, 1315546257297742ull}}, {{7658911544773535368ull, 2104874011676387ull}}, {{17195175680044559264ull, 1683899209341109ull}}, {{17445489358777557736ull, 1347119367472887ull}}, {{13155387715076451084ull, 2155390987956620ull}}, {{10524310172061160868ull, 1724312790365296ull}}, {{4730099322907018368ull, 1379450232292237ull}}, {{11257507731393139716ull, 2207120371667579ull}}, {{12695354999856422096ull, 1765696297334063ull}}, {{17534981629368958324ull, 1412557037867250ull}}, {{14027985303495166656ull, 1130045630293800ull}}, {{3998032411882715036ull, 1808073008470081ull}}, {{17955821188473813324ull, 1446458406776064ull}}, {{18054005765520960980ull, 1157166725420851ull}}, {{3060967521640165308ull, 1851466760673363ull}}, {{9827471646795952892ull, 1481173408538690ull}}, {{7861977317436762312ull, 1184938726830952ull}}, {{16268512522640730028ull, 1895901962929523ull}}, {{1946763573886853052ull, 1516721570343619ull}}, {{5246759673851392764ull, 1213377256274895ull}}, {{8394815478162228424ull, 1941403610039832ull}}, {{17783898826755513708ull, 1553122888031865ull}}, {{14227119061404410964ull, 1242498310425492ull}}, {{8005995239279416252ull, 1987997296680788ull}}, {{13783493820907353648ull, 1590397837344630ull}}, {{11026795056725882920ull, 1272318269875704ull}}, {{6574825646535681700ull, 2035709231801127ull}}, {{16327906961454276332ull, 1628567385440901ull}}, {{9372976754421510740ull, 1302853908352721ull}}, {{7618065177590596540ull, 2084566253364354ull}}, {{9783800956814387556ull, 1667653002691483ull}}, {{15205738394935330688ull, 1334122402153186ull}}, {{16950483802412708460ull, 2134595843445098ull}}, {{2492340597704435796ull, 1707676674756079ull}}, {{5683221292905458960ull, 1366141339804863ull}}, {{5403805253906824016ull, 2185826143687781ull}}, {{633695388383548888ull, 1748660914950225ull}}, {{506956310706839108ull, 1398928731960180ull}}, {{811130097130942576ull, 2238285971136288ull}}, {{8027601707188574708ull, 1790628776909030ull}}, {{6422081365750859764ull, 1432503021527224ull}}, {{8827013907342598136ull, 1146002417221779ull}}, {{3055175807522426048ull, 1833603867554847ull}}, {{13512187090243671808ull, 1466883094043877ull}}, {{3431052042711116800ull, 1173506475235102ull}}, {{9179032083079697204ull, 1877610360376163ull}}, {{14721923295947578408ull, 1502088288300930ull}}, {{11777538636758062728ull, 1201670630640744ull}}, {{7776015374587169392ull, 1922673009025191ull}}, {{2531463484927825192ull, 1538138407220153ull}}, {{9403868417426080800ull, 1230510725776122ull}}, {{288794208914087988ull, 1968817161241796ull}}, {{14988430626098911684ull, 1575053728993436ull}}, {{8301395686137219024ull, 1260042983194749ull}}, {{2214186653593819468ull, 2016068773111599ull}}, {{5460698137616965896ull, 1612855018489279ull}}, {{8057907324835483040ull, 1290284014791423ull}}, {{9203302904994862540ull, 2064454423666277ull}}, {{18430688768221621004ull, 1651563538933021ull}}, {{11055202199835386480ull, 1321250831146417ull}}, {{2930928260768977076ull, 2114001329834268ull}}, {{9723440238099002304ull, 1691201063867414ull}}, {{11468101005221112168ull, 1352960851093931ull}}, {{10970263978869958824ull, 2164737361750290ull}}, {{8776211183095967056ull, 1731789889400232ull}}, {{18089015390702504616ull, 1385431911520185ull}}, {{10495680551414455768ull, 2216691058432297ull}}, {{1017846811647743968ull, 1773352846745838ull}}, {{8192975078802015820ull, 1418682277396670ull}}, {{6554380063041612656ull, 1134945821917336ull}}, {{3108310471382759604ull, 1815913315067738ull}}, {{9865346006590028328ull, 1452730652054190ull}}, {{7892276805272022664ull, 1162184521643352ull}}, {{16316991703177146584ull, 1859495234629363ull}}, {{1985546918315986300ull, 1487596187703491ull}}, {{16345832793620430332ull, 1190076950162792ull}}, {{11395937210825047240ull, 1904123120260468ull}}, {{16495447398143858436ull, 1523298496208374ull}}, {{16885706733256997072ull, 1218638796966699ull}}, {{15949084328985464348ull, 1949822075146719ull}}, {{16448616277930281800ull, 1559857660117375ull}}, {{13158893022344225440ull, 1247886128093900ull}}, {{2607484762041209088ull, 1996617804950241ull}}, {{16843383068600608564ull, 1597294243960192ull}}, {{6096008825396666204ull, 1277835395168154ull}}, {{17132311750118486576ull, 2044536632269046ull}}, {{10016500585352878936ull, 1635629305815237ull}}, {{634502838798482504ull, 1308503444652190ull}}, {{1015204542077572004ull, 2093605511443504ull}}, {{4501512448403967928ull, 1674884409154803ull}}, {{10979907588206994988ull, 1339907527323842ull}}, {{2810456882163550688ull, 2143852043718148ull}}, {{9627063135214661196ull, 1715081634974518ull}}, {{15080348137655549604ull, 1372065307979614ull}}, {{13060510576023148396ull, 2195304492767383ull}}, {{17827106090302339364ull, 1756243594213906ull}}, {{10572336057499961168ull, 1404994875371125ull}}, {{16915737691999937868ull, 2247991800593800ull}}, {{13532590153599950296ull, 1798393440475040ull}}, {{10826072122879960236ull, 1438714752380032ull}}, {{1282160068820147540ull, 1150971801904026ull}}, {{13119502554337967036ull, 1841554883046441ull}}, {{6806253228728463304ull, 1473243906437153ull}}, {{12823700212466591292ull, 1178595125149722ull}}, {{5760525080978904772ull, 1885752200239556ull}}, {{919071250041213496ull, 1508601760191645ull}}, {{735257000032970796ull, 1206881408153316ull}}, {{12244457644278484244ull, 1931010253045305ull}}, {{9795566115422787396ull, 1544808202436244ull}}, {{11525801707080140240ull, 1235846561948995ull}}, {{18441282731328224384ull, 1977354499118392ull}}, {{7374328555578758860ull, 1581883599294714ull}}, {{9588811659204917412ull, 1265506879435771ull}}, {{7963401025244047212ull, 2024811007097234ull}}, {{10060069634937148092ull, 1619848805677787ull}}, {{669358078465897828ull, 1295879044542230ull}}, {{1070972925545436524ull, 2073406471267568ull}}, {{8235475969920169864ull, 1658725177014054ull}}, {{10277729590678046216ull, 1326980141611243ull}}, {{12755018530342963620ull, 2123168226577989ull}}, {{13893363639016281220ull, 1698534581262391ull}}, {{7425342096471114652ull, 1358827665009913ull}}, {{8191198539611873124ull, 2174124264015861ull}}, {{2863610016947588176ull, 1739299411212689ull}}, {{5980236828299980864ull, 1391439528970151ull}}, {{2189681295796148736ull, 2226303246352242ull}}, {{12819791480862649956ull, 1781042597081793ull}}, {{17634530814173940612ull, 1424834077665434ull}}, {{17796973466081062812ull, 1139867262132347ull}}, {{13717762286762059208ull, 1823787619411756ull}}, {{7284861014667737044ull, 1459030095529405ull}}, {{5827888811734189632ull, 1167224076423524ull}}, {{16703319728258524060ull, 1867558522277638ull}}, {{2294609338381088280ull, 1494046817822111ull}}, {{16593082729672511916ull, 1195237454257688ull}}, {{4412839479024557128ull, 1912379926812302ull}}, {{14598318027445376672ull, 1529903941449841ull}}, {{7989305607214391012ull, 1223923153159873ull}}, {{9093540156801115300ull, 1958277045055797ull}}, {{18342878569666623208ull, 1566621636044637ull}}, {{7295605226249477920ull, 1253297308835710ull}}, {{11672968361999164672ull, 2005275694137136ull}}, {{5649025874857421416ull, 1604220555309709ull}}, {{8208569514627847456ull, 1283376444247767ull}}, {{16823060038146466252ull, 2053402310796427ull}}, {{6079750401033352356ull, 1642721848637142ull}}, {{15931846765052412852ull, 1314177478909713ull}}, {{3354861935632398628ull, 2102683966255542ull}}, {{13751935992731649872ull, 1682147173004433ull}}, {{18380246423669140544ull, 1345717738403546ull}}, {{3582952574677252608ull, 2153148381445675ull}}, {{2866362059741802084ull, 1722518705156540ull}}, {{2293089647793441668ull, 1378014964125232ull}}, {{7358292251211416992ull, 2204823942600371ull}}, {{2197284986227223272ull, 1763859154080297ull}}, {{12825874433207509584ull, 1411087323264237ull}}, {{2882001917082187020ull, 1128869858611390ull}}, {{4611203067331499236ull, 1806191773778224ull}}, {{7378311268607109712ull, 1444953419022579ull}}, {{9591997829627598092ull, 1155962735218063ull}}, {{11657847712662246624ull, 1849540376348901ull}}, {{5636929355387886976ull, 1479632301079121ull}}, {{820194669568399256ull, 1183705840863297ull}}, {{5001660286051349136ull, 1893929345381275ull}}, {{4001328228841079308ull, 1515143476305020ull}}, {{3201062583072863448ull, 1212114781044016ull}}, {{16189746577142312484ull, 1939383649670425ull}}, {{12951797261713849988ull, 1551506919736340ull}}, {{10361437809371079988ull, 1241205535789072ull}}, {{1820905236026086692ull, 1985928857262516ull}}, {{16214119447788510648ull, 1588743085810012ull}}, {{5592597928746987872ull, 1270994468648010ull}}, {{8948156685995180592ull, 2033591149836816ull}}, {{3469176534054234152ull, 1626872919869453ull}}, {{10154038856727207968ull, 1301498335895562ull}}, {{1489066911795891456ull, 2082397337432900ull}}, {{1191253529436713164ull, 1665917869946320ull}}, {{953002823549370532ull, 1332734295957056ull}}, {{12592850961904723820ull, 2132374873531289ull}}, {{13763629584265689380ull, 1705899898825031ull}}, {{7321554852670641180ull, 1364719919060025ull}}, {{11714487764273025888ull, 2183551870496040ull}}, {{9371590211418420712ull, 1746841496396832ull}}, {{118574539650915920ull, 1397473197117466ull}}, {{11257765707667196444ull, 2235957115387945ull}}, {{9006212566133757156ull, 1788765692310356ull}}, {{3515621238165095400ull, 1431012553848285ull}}, {{2812496990532076320ull, 1144810043078628ull}}, {{810646370109411792ull, 1831696068925805ull}}, {{648517096087529432ull, 1465356855140644ull}}, {{4208162491611933868ull, 1172285484112515ull}}, {{6733059986579094192ull, 1875656774580024ull}}, {{9075796804005185676ull, 1500525419664019ull}}, {{10949986257946058864ull, 1200420335731215ull}}, {{17519978012713694180ull, 1920672537169944ull}}, {{17705331224912865668ull, 1536538029735955ull}}, {{14164264979930292536ull, 1229230423788764ull}}, {{11594777523662737088ull, 1966768678062023ull}}, {{16654519648414010316ull, 1573414942449618ull}}, {{2255569274505477284ull, 1258731953959695ull}}, {{3608910839208763652ull, 2013971126335512ull}}, {{13955175115592741892ull, 1611176901068409ull}}, {{14853488907216103836ull, 1288941520854727ull}}, {{9008186992578124844ull, 2062306433367564ull}}, {{10895898408804410200ull, 1649845146694051ull}}, {{5027369912301617836ull, 1319876117355241ull}}, {{665094230198767892ull, 2111801787768386ull}}, {{15289470643126655608ull, 1689441430214708ull}}, {{1163530070275593516ull, 1351553144171767ull}}, {{5550996927182859948ull, 2162485030674827ull}}, {{15508843985972018928ull, 1729988024539861ull}}, {{8717726374035704820ull, 1383990419631889ull}}, {{2880315754231396740ull, 2214384671411023ull}}, {{9682950232868938040ull, 1771507737128818ull}}, {{15125057815778971076ull, 1417206189703054ull}}, {{15789395067365087184ull, 1133764951762443ull}}, {{3126939219332677556ull, 1814023922819910ull}}, {{2501551375466142044ull, 1451219138255928ull}}, {{9379938729856734284ull, 1160975310604742ull}}, {{250506708803133560ull, 1857560496967588ull}}, {{7579102996526327496ull, 1486048397574070ull}}, {{6063282397221061996ull, 1188838718059256ull}}, {{2322554206069878548ull, 1902141948894810ull}}, {{1858043364855902836ull, 1521713559115848ull}}, {{8865132321368542916ull, 1217370847292678ull}}, {{10494862899447758344ull, 1947793355668285ull}}, {{8395890319558206676ull, 1558234684534628ull}}, {{14095409885130385984ull, 1246587747627702ull}}, {{7795260557240976284ull, 1994540396204324ull}}, {{9925557260534691352ull, 1595632316963459ull}}, {{11629794623169663404ull, 1276505853570767ull}}, {{3850276138103820152ull, 2042409365713228ull}}, {{10458918539966876768ull, 1633927492570582ull}}, {{988437202489680768ull, 1307141994056466ull}}, {{12649545968209220200ull, 2091427190490345ull}}, {{10119636774567376160ull, 1673141752392276ull}}, {{4406360604911990604ull, 1338513401913821ull}}, {{18118223412084915936ull, 2141621443062113ull}}, {{3426532285442201780ull, 1713297154449691ull}}, {{17498621087321402716ull, 1370637723559752ull}}, {{13240398480746603056ull, 2193020357695604ull}}, {{14281667599339192768ull, 1754416286156483ull}}, {{357287635245623244ull, 1403533028925187ull}}, {{4261009031134907512ull, 2245652846280299ull}}, {{7098156039649836332ull, 1796522277024239ull}}, {{9367873646461779388ull, 1437217821619391ull}}, {{3804950102427513188ull, 1149774257295513ull}}, {{2398571349142110780ull, 1839638811672821ull}}, {{16676252338281329916ull, 1471711049338256ull}}, {{9651653055883153608ull, 1177368839470605ull}}, {{15442644889413045776ull, 1883790143152968ull}}, {{1286069467304705652ull, 1507032114522375ull}}, {{1028855573843764520ull, 1205625691617900ull}}, {{1646168918150023232ull, 1929001106588640ull}}, {{1316935134520018588ull, 1543200885270912ull}}, {{12121594551841745840ull, 1234560708216729ull}}, {{8326504838721062372ull, 1975297133146767ull}}, {{17729250315202580868ull, 1580237706517413ull}}, {{3115353807936333724ull, 1264190165213931ull}}, {{16052612536923864928ull, 2022704264342289ull}}, {{16531438844281002264ull, 1618163411473831ull}}, {{9535802260682891488ull, 1294530729179065ull}}, {{15257283617092626384ull, 2071249166686504ull}}, {{15895175708416011428ull, 1656999333349203ull}}, {{1648094122507078172ull, 1325599466679363ull}}, {{17394345854978966372ull, 2120959146686980ull}}, {{13915476683983173096ull, 1696767317349584ull}}, {{14821730161928448800ull, 1357413853879667ull}}, {{8957373000117876788ull, 2171862166207468ull}}, {{14544596029578122076ull, 1737489732965974ull}}, {{15325025638404407984ull, 1389991786372779ull}}, {{13451994577221321808ull, 2223986858196447ull}}, {{3382898032293236800ull, 1779189486557158ull}}, {{10085016055318410084ull, 1423351589245726ull}}, {{4378664029512817744ull, 1138681271396581ull}}, {{18073908891446239364ull, 1821890034234529ull}}, {{18148475927898901812ull, 1457512027387623ull}}, {{3450734298093390480ull, 1166009621910099ull}}, {{12899872506433245416ull, 1865615395056158ull}}, {{17698595634630416980ull, 1492492316044926ull}}, {{10469527692962423260ull, 1193993852835941ull}}, {{9372546679256056568ull, 1910390164537506ull}}, {{3808688528662934932ull, 1528312131630005ull}}, {{3046950822930347944ull, 1222649705304004ull}}, {{12253818946172377360ull, 1956239528486406ull}}, {{6113706342195991564ull, 1564991622789125ull}}, {{4890965073756793252ull, 1251993298231300ull}}, {{7825544118010869204ull, 2003189277170080ull}}, {{6260435294408695360ull, 1602551421736064ull}}, {{8697697050268866612ull, 1282041137388851ull}}, {{6537617650946365936ull, 2051265819822162ull}}, {{16298140564982823716ull, 1641012655857729ull}}, {{16727861266728169296ull, 1312810124686183ull}}, {{4628485138313608936ull, 2100496199497894ull}}, {{7392136925392797472ull, 1680396959598315ull}}, {{5913709540314237976ull, 1344317567678652ull}}, {{13151284079244691088ull, 2150908108285843ull}}, {{17899724892879573516ull, 1720726486628674ull}}, {{18009128729045569136ull, 1376581189302939ull}}, {{17746559522247179648ull, 2202529902884703ull}}, {{3129201173572012748ull, 1762023922307763ull}}, {{9882058568341430844ull, 1409619137846210ull}}, {{7905646854673144676ull, 1127695310276968ull}}, {{8959686152735121160ull, 1804312496443149ull}}, {{10857097736930007252ull, 1443449997154519ull}}, {{12375027004285916124ull, 1154759997723615ull}}, {{1353299133147914180ull, 1847615996357785ull}}, {{1082639306518331344ull, 1478092797086228ull}}, {{8244809074698485720ull, 1182474237668982ull}}, {{16881043334259487480ull, 1891958780270371ull}}, {{9815485852665679660ull, 1513567024216297ull}}, {{473691052648723080ull, 1210853619373038ull}}, {{15515300943205598224ull, 1937365790996860ull}}, {{12412240754564478580ull, 1549892632797488ull}}, {{17308490233135403508ull, 1239914106237990ull}}, {{9246840299307094000ull, 1983862569980785ull}}, {{7397472239445675200ull, 1587090055984628ull}}, {{13296675421040360804ull, 1269672044787702ull}}, {{6517285414696935996ull, 2031475271660324ull}}, {{8903177146499459120ull, 1625180217328259ull}}, {{10811890531941477620ull, 1300144173862607ull}}, {{2541629592138722900ull, 2080230678180172ull}}, {{13101350117936709288ull, 1664184542544137ull}}, {{3102382464865546784ull, 1331347634035310ull}}, {{4963811943784874856ull, 2130156214456496ull}}, {{281700740285989560ull, 1704124971565197ull}}, {{11293407036454522616ull, 1363299977252157ull}}, {{3312055999359594896ull, 2181279963603452ull}}, {{13717691243713406888ull, 1745023970882761ull}}, {{7284804180228815184ull, 1396019176706209ull}}, {{587640244140373328ull, 2233630682729935ull}}, {{470112195312298664ull, 1786904546183948ull}}, {{7754787385733659576ull, 1429523636947158ull}}, {{13582527538070748308ull, 1143618909557726ull}}, {{14353346431429376644ull, 1829790255292362ull}}, {{4103979515659680668ull, 1463832204233890ull}}, {{3283183612527744536ull, 1171065763387112ull}}, {{8942442594786301580ull, 1873705221419379ull}}, {{10843302890570951588ull, 1498964177135503ull}}, {{16053339941940581916ull, 1199171341708402ull}}, {{10927948648137289776ull, 1918674146733444ull}}, {{12431707733251742144ull, 1534939317386755ull}}, {{9945366186601393712ull, 1227951453909404ull}}, {{4844539454336498972ull, 1964722326255047ull}}, {{14943678007694930148ull, 1571777861004037ull}}, {{4576244776672123472ull, 1257422288803230ull}}, {{7321991642675397556ull, 2011875662085168ull}}, {{13236290943624138692ull, 1609500529668134ull}}, {{14278381569641221276ull, 1287600423734507ull}}, {{8088015252458312748ull, 2060160677975212ull}}, {{17538458646192381168ull, 1648128542380169ull}}, {{17720115731695815256ull, 1318502833904135ull}}, {{9905441097003752796ull, 2109604534246617ull}}, {{545655248119181592ull, 1687683627397294ull}}, {{4125873013237255596ull, 1350146901917835ull}}, {{6601396821179608952ull, 2160235043068536ull}}, {{1591768642201776840ull, 1728188034454829ull}}, {{4962763728503331796ull, 1382550427563863ull}}, {{4251073150863420548ull, 2212080684102181ull}}, {{18158253779658377732ull, 1769664547281744ull}}, {{18215951838468612508ull, 1415731637825395ull}}, {{14572761470774890004ull, 1132585310260316ull}}, {{15937720723756003364ull, 1812136496416506ull}}, {{9060827764262892368ull, 1449709197133205ull}}, {{7248662211410313892ull, 1159767357706564ull}}, {{529813094030771260ull, 1855627772330503ull}}, {{7802548104708437656ull, 1484502217864402ull}}, {{17310084927992481092ull, 1187601774291521ull}}, {{1870694181594597488ull, 1900162838866435ull}}, {{1496555345275677992ull, 1520130271093148ull}}, {{8575941905704363040ull, 1216104216874518ull}}, {{10032158234385070540ull, 1945766746999229ull}}, {{11715075402249966756ull, 1556613397599383ull}}, {{16750757951283794048ull, 1245290718079506ull}}, {{975771018860698216ull, 1992465148927211ull}}, {{15538012074056199868ull, 1593972119141768ull}}, {{1362363215019228924ull, 1275177695313415ull}}, {{2179781144030766280ull, 2040284312501464ull}}, {{5433173729966523344ull, 1632227450001171ull}}, {{657190169231308352ull, 1305781960000937ull}}, {{4740853085512003688ull, 2089251136001499ull}}, {{7482031283151513276ull, 1671400908801199ull}}, {{9674973841263120944ull, 1337120727040959ull}}, {{4411911701795262540ull, 2139393163265535ull}}, {{3529529361436210032ull, 1711514530612428ull}}, {{10202321118632788672ull, 1369211624489942ull}}, {{1566318530844820580ull, 2190738599183908ull}}, {{8631752454159677112ull, 1752590879347126ull}}, {{3216053148585831364ull, 1402072703477701ull}}, {{16213731481963061156ull, 2243316325564321ull}}, {{9281636370828538600ull, 1794653060451457ull}}, {{46611467179010232ull, 1435722448361166ull}}, {{14794684432710849480ull, 1148577958688932ull}}, {{8914099833369717876ull, 1837724733902292ull}}, {{18199326310921505268ull, 1470179787121833ull}}, {{3491414604511473244ull, 1176143829697467ull}}, {{9275612181960267516ull, 1881830127515947ull}}, {{41792116084393368ull, 1505464102012758ull}}, {{7412131322351335340ull, 1204371281610206ull}}, {{4480712486278315900ull, 1926994050576330ull}}, {{3584569989022652720ull, 1541595240461064ull}}, {{6557004805960032496ull, 1233276192368851ull}}, {{3112510060052231352ull, 1973241907790162ull}}, {{13558054492267516048ull, 1578593526232129ull}}, {{14535792408555923164ull, 1262874820985703ull}}, {{1121174965238015120ull, 2020599713577126ull}}, {{15654335231158053388ull, 1616479770861700ull}}, {{12523468184926442712ull, 1293183816689360ull}}, {{1590805022172756724ull, 2069094106702977ull}}, {{12340690461963936348ull, 1655275285362381ull}}, {{6183203554829238756ull, 1324220228289905ull}}, {{9893125687726782008ull, 2118752365263848ull}}, {{15293198179665246252ull, 1695001892211078ull}}, {{1166512099506466032ull, 1356001513768863ull}}, {{16623814618177986948ull, 2169602422030180ull}}, {{13299051694542389556ull, 1735681937624144ull}}, {{14328590170375821968ull, 1388545550099315ull}}, {{4479000198891763536ull, 2221672880158905ull}}, {{3583200159113410828ull, 1777338304127124ull}}, {{6555908942032638984ull, 1421870643301699ull}}, {{8934075968368021512ull, 1137496514641359ull}}, {{3226475105163103448ull, 1819994423426175ull}}, {{2581180084130482756ull, 1455995538740940ull}}, {{2064944067304386204ull, 1164796430992752ull}}, {{6993259322428928252ull, 1863674289588403ull}}, {{12973305087426963248ull, 1490939431670722ull}}, {{2999946440457749952ull, 1192751545336578ull}}, {{1110565489990489604ull, 1908402472538525ull}}, {{888452391992391680ull, 1526721978030820ull}}, {{710761913593913344ull, 1221377582424656ull}}, {{12205265505975992324ull, 1954204131879449ull}}, {{13453561219522704180ull, 1563363305503559ull}}, {{14452197790360073668ull, 1250690644402847ull}}, {{8366121205608476576ull, 2001105031044556ull}}, {{3003548149744870936ull, 1600884024835645ull}}, {{2402838519795896748ull, 1280707219868516ull}}, {{14912588075899165768ull, 2049131551789625ull}}, {{11930070460719332616ull, 1639305241431700ull}}, {{9544056368575466092ull, 1311444193145360ull}}, {{15270490189720745748ull, 2098310709032576ull}}, {{8527043337034686276ull, 1678648567226061ull}}, {{3132285854885838696ull, 1342918853780849ull}}, {{12390354997301162560ull, 2148670166049358ull}}, {{17290981627324750696ull, 1718936132839486ull}}, {{10143436487117890232ull, 1375148906271589ull}}, {{5161451935162893404ull, 2200238250034543ull}}, {{11507859177614135368ull, 1760190600027634ull}}, {{12895636156833218620ull, 1408152480022107ull}}, {{2937811295982754248ull, 1126521984017686ull}}, {{15768544517798137768ull, 1802435174428297ull}}, {{5236137984754689568ull, 1441948139542638ull}}, {{11567608017287572300ull, 1153558511634110ull}}, {{61428753950564064ull, 1845693618614577ull}}, {{11117189447386182220ull, 1476554894891661ull}}, {{5204402743167035452ull, 1181243915913329ull}}, {{15705742018551077372ull, 1889990265461326ull}}, {{8875244800098951576ull, 1511992212369061ull}}, {{3410847025337250936ull, 1209593769895249ull}}, {{12836052870023422144ull, 1935350031832398ull}}, {{17647539925502558364ull, 1548280025465918ull}}, {{3049985496176315720ull, 1238624020372735ull}}, {{4879976793882105152ull, 1981798432596376ull}}, {{214632620363773800ull, 1585438746077101ull}}, {{14929101355258660332ull, 1268350996861680ull}}, {{5439818094704304916ull, 2029361594978689ull}}, {{8041203290505354256ull, 1623489275982951ull}}, {{2743613817662373080ull, 1298791420786361ull}}, {{15457828552485527900ull, 2078066273258177ull}}, {{4987565212504601672ull, 1662453018606542ull}}, {{15058098614229412308ull, 1329962414885233ull}}, {{1956864894315597752ull, 2127939863816374ull}}, {{5254840730194388524ull, 1702351891053099ull}}, {{7893221398897421144ull, 1361881512842479ull}}, {{1561107794010142860ull, 2179010420547967ull}}, {{12316932679433845260ull, 1743208336438373ull}}, {{17232243773030896852ull, 1394566669150698ull}}, {{5435497148397973024ull, 2231306670641118ull}}, {{11727095348202199068ull, 1785045336512894ull}}, {{13071025093303669576ull, 1428036269210315ull}}, {{10456820074642935660ull, 1142429015368252ull}}, {{1973516860461055764ull, 1827886424589204ull}}, {{5268162303110754936ull, 1462309139671363ull}}, {{11593227471972424596ull, 1169847311737090ull}}, {{102419881446327736ull, 1871755698779345ull}}, {{81935905157062188ull, 1497404559023476ull}}, {{14822943983093291044ull, 1197923647218780ull}}, {{5269966299239714052ull, 1916677835550049ull}}, {{7905321854133681564ull, 1533342268440039ull}}, {{10013606298048855576ull, 1226673814752031ull}}, {{8643072447394348276ull, 1962678103603250ull}}, {{6914457957915478620ull, 1570142482882600ull}}, {{5531566366332382896ull, 1256113986306080ull}}, {{8850506186131812636ull, 2009782378089728ull}}, {{14459102578389270752ull, 1607825902471782ull}}, {{4188584433227595956ull, 1286260721977426ull}}, {{17769781537389884500ull, 2058017155163881ull}}, {{10526476415169997276ull, 1646413724131105ull}}, {{8421181132135997820ull, 1317130979304884ull}}, {{2405843367191865544ull, 2107409566887815ull}}, {{1924674693753492436ull, 1685927653510252ull}}, {{12607786199228524916ull, 1348742122808201ull}}, {{12793760289281819224ull, 2157987396493122ull}}, {{2856310601941634732ull, 1726389917194498ull}}, {{9663746111037128432ull, 1381111933755598ull}}, {{11772644962917495168ull, 2209779094008957ull}}, {{2039418340850175488ull, 1767823275207166ull}}, {{16388929931647781684ull, 1414258620165732ull}}, {{5732446315834404700ull, 1131406896132586ull}}, {{1793216475851226872ull, 1810251033812138ull}}, {{8813270810164802144ull, 1448200827049710ull}}, {{7050616648131841716ull, 1158560661639768ull}}, {{7591637822269036424ull, 1853697058623629ull}}, {{9762659072557139460ull, 1482957646898903ull}}, {{15188824887529532216ull, 1186366117519122ull}}, {{9544724561079610252ull, 1898185788030596ull}}, {{3946430834121777880ull, 1518548630424477ull}}, {{14225191111523153272ull, 1214838904339581ull}}, {{15381608148953224588ull, 1943742246943330ull}}, {{12305286519162579672ull, 1554993797554664ull}}, {{13533578030071974060ull, 1243995038043731ull}}, {{14275027218631337852ull, 1990392060869970ull}}, {{11420021774905070280ull, 1592313648695976ull}}, {{5446668605182145900ull, 1273850918956781ull}}, {{1335972138807612796ull, 2038161470330850ull}}, {{1068777711046090236ull, 1630529176264680ull}}, {{855022168836872188ull, 1304423341011744ull}}, {{8746733099622816148ull, 2087077345618790ull}}, {{6997386479698252920ull, 1669661876495032ull}}, {{16665955627984333304ull, 1335729501196025ull}}, {{8218784931065381672ull, 2137167201913641ull}}, {{2885679130110395012ull, 1709733761530913ull}}, {{9687240933572136656ull, 1367787009224730ull}}, {{15499585493715418652ull, 2188459214759568ull}}, {{1331621950746603952ull, 1750767371807655ull}}, {{1065297560597283160ull, 1400613897446124ull}}, {{9083173726439473704ull, 2240982235913798ull}}, {{14645236610635399612ull, 1792785788731038ull}}, {{648142844282588720ull, 1434228630984831ull}}, {{15275909534393712268ull, 1147382904787864ull}}, {{13373408810804208660ull, 1835812647660583ull}}, {{18077424678127187572ull, 1468650118128466ull}}, {{10772590927759839736ull, 1174920094502773ull}}, {{13546796669673833252ull, 1879872151204437ull}}, {{3458739706255245956ull, 1503897720963550ull}}, {{2766991765004196764ull, 1203118176770840ull}}, {{4427186824006714824ull, 1924989082833344ull}}, {{7231098273947282184ull, 1539991266266675ull}}, {{5784878619157825744ull, 1231993013013340ull}}, {{9255805790652521196ull, 1971188820821344ull}}, {{11093993447263927280ull, 1576951056657075ull}}, {{8875194757811141824ull, 1261560845325660ull}}, {{14200311612497826916ull, 2018497352521056ull}}, {{7670900475256351208ull, 1614797882016845ull}}, {{6136720380205080968ull, 1291838305613476ull}}, {{2440054978844308904ull, 2066941288981562ull}}, {{13020090427301178092ull, 1653553031185249ull}}, {{14105421156582852796ull, 1322842424948199ull}}, {{11500627406306833504ull, 2116547879917119ull}}, {{12889850739787377128ull, 1693238303933695ull}}, {{10311880591829901700ull, 1354590643146956ull}}, {{9120311317444022076ull, 2167345029035130ull}}, {{7296249053955217660ull, 1733876023228104ull}}, {{9526348057906084452ull, 1387100818582483ull}}, {{11552808077907824800ull, 2219361309731973ull}}, {{16620944091810080488ull, 1775489047785578ull}}, {{2228708829222333420ull, 1420391238228463ull}}, {{9161664692861687380ull, 1136312990582770ull}}, {{14658663508578699812ull, 1818100784932432ull}}, {{4348233177379139200ull, 1454480627945946ull}}, {{18235981800870952652ull, 1163584502356756ull}}, {{3352129178200151984ull, 1861735203770811ull}}, {{17439098601527762880ull, 1489388163016648ull}}, {{2883232436996479336ull, 1191510530413319ull}}, {{11991869528678187584ull, 1906416848661310ull}}, {{9593495622942550064ull, 1525133478929048ull}}, {{15053494127837860700ull, 1220106783143238ull}}, {{1949497716089115180ull, 1952170853029182ull}}, {{12627644617097023112ull, 1561736682423345ull}}, {{10102115693677618492ull, 1249389345938676ull}}, {{8784687480400368940ull, 1999022953501882ull}}, {{18095796428546026120ull, 1599218362801505ull}}, {{14476637142836820896ull, 1279374690241204ull}}, {{12094572984313182464ull, 2046999504385927ull}}, {{2296960757966725324ull, 1637599603508742ull}}, {{12905615050599111228ull, 1310079682806993ull}}, {{16959635266216667644ull, 2096127492491189ull}}, {{17257057027715244440ull, 1676901993992951ull}}, {{10116296807430285228ull, 1341521595194361ull}}, {{8807377262404635720ull, 2146434552310978ull}}, {{14424599439407529220ull, 1717147641848782ull}}, {{4160981922042202728ull, 1373718113479026ull}}, {{17725617519493255340ull, 2197948981566441ull}}, {{10491145200852693948ull, 1758359185253153ull}}, {{15771613790165975804ull, 1406687348202522ull}}, {{10477186805297919996ull, 2250699757124036ull}}, {{4692400629496425672ull, 1800559805699229ull}}, {{7443269318339050860ull, 1440447844559383ull}}, {{13333313084155061336ull, 1152358275647506ull}}, {{13954603305164277488ull, 1843773241036010ull}}, {{11163682644131421992ull, 1475018592828808ull}}, {{16309643744788958240ull, 1180014874263046ull}}, {{269988288468960920ull, 1888023798820875ull}}, {{215990630775168736ull, 1510419039056700ull}}, {{172792504620134988ull, 1208335231245360ull}}, {{276468007392215984ull, 1933336369992576ull}}, {{14978569664881414080ull, 1546669095994060ull}}, {{11982855731905131264ull, 1237335276795248ull}}, {{15483220356306299700ull, 1979736442872397ull}}, {{5007878655561219112ull, 1583789154297918ull}}, {{11385000553932795936ull, 1267031323438334ull}}, {{7147954442066742528ull, 2027250117501335ull}}, {{5718363553653394024ull, 1621800094001068ull}}, {{11953388472406535864ull, 1297440075200854ull}}, {{8057375111624726416ull, 2075904120321367ull}}, {{17513946533525512100ull, 1660723296257093ull}}, {{2943110782594678712ull, 1328578637005675ull}}, {{4708977252151485936ull, 2125725819209080ull}}, {{3767181801721188748ull, 1700580655367264ull}}, {{6703094256118861324ull, 1360464524293811ull}}, {{3346253180306357472ull, 2176743238870098ull}}, {{10055700173728906624ull, 1741394591096078ull}}, {{15423257768466945944ull, 1393115672876862ull}}, {{9919817170579472220ull, 2228985076602980ull}}, {{7935853736463577776ull, 1783188061282384ull}}, {{10038031803912772544ull, 1426550449025907ull}}, {{651727813646397388ull, 1141240359220726ull}}, {{12110810946059966792ull, 1825984574753161ull}}, {{5999299942106063108ull, 1460787659802529ull}}, {{8488788768426760812ull, 1168630127842023ull}}, {{9892713214740906976ull, 1869808204547237ull}}, {{535472942308904932ull, 1495846563637790ull}}, {{428378353847123944ull, 1196677250910232ull}}, {{4374754180897308636ull, 1914683601456371ull}}, {{18257198603685488204ull, 1531746881165096ull}}, {{10916410068206480240ull, 1225397504932077ull}}, {{2708860850162727088ull, 1960636007891324ull}}, {{5856437494872091996ull, 1568508806313059ull}}, {{8374498810639583920ull, 1254807045050447ull}}, {{17088546911765244592ull, 2007691272080715ull}}, {{13670837529412195676ull, 1606153017664572ull}}, {{3557972394045935892ull, 1284922414131658ull}}, {{2003407015731587108ull, 2055875862610653ull}}, {{8981423242069090332ull, 1644700690088522ull}}, {{18253185037881003236ull, 1315760552070817ull}}, {{14447700801641963884ull, 2105216883313308ull}}, {{490114197087840136ull, 1684173506650647ull}}, {{11460137801896003080ull, 1347338805320517ull}}, {{3578825224065963632ull, 2155742088512828ull}}, {{10241757808736591552ull, 1724593670810262ull}}, {{814708617505452596ull, 1379674936648210ull}}, {{1303533788008724156ull, 2207479898637136ull}}, {{15800222289374620616ull, 1765983918909708ull}}, {{1572131387273965524ull, 1412787135127767ull}}, {{12325751554044903388ull, 1130229708102213ull}}, {{16031853671729935096ull, 1808367532963541ull}}, {{9136134122642037756ull, 1446694026370833ull}}, {{14687604927597450848ull, 1157355221096666ull}}, {{16121470254672100716ull, 1851768353754666ull}}, {{9207827388995770248ull, 1481414683003733ull}}, {{14744959540680436844ull, 1185131746402986ull}}, {{16213237635604878304ull, 1896210794244778ull}}, {{1902543664258171676ull, 1516968635395823ull}}, {{8900732560890357984ull, 1213574908316658ull}}, {{10551823282682662456ull, 1941719853306653ull}}, {{15820156255629950608ull, 1553375882645322ull}}, {{5277427375020139840ull, 1242700706116258ull}}, {{4754534985290313424ull, 1988321129786013ull}}, {{11182325617716071384ull, 1590656903828810ull}}, {{8945860494172857108ull, 1272525523063048ull}}, {{10624027975934661052ull, 2036040836900877ull}}, {{1120524751263908192ull, 1628832669520702ull}}, {{11964466245236857524ull, 1303066135616561ull}}, {{11764448362895151392ull, 2084905816986498ull}}, {{16790256319799941760ull, 1667924653589198ull}}, {{2364158611614222440ull, 1334339722871359ull}}, {{11161351408066576548ull, 2134943556594174ull}}, {{12618429941195171564ull, 1707954845275339ull}}, {{13784092767698047572ull, 1366363876220271ull}}, {{14675850798833055472ull, 2186182201952434ull}}, {{15430029453808354700ull, 1748945761561947ull}}, {{4965325933562863112ull, 1399156609249558ull}}, {{4255172678958670660ull, 2238650574799293ull}}, {{10782835772650757172ull, 1790920459839434ull}}, {{12315617432862516060ull, 1432736367871547ull}}, {{2473796316806192200ull, 1146189094297238ull}}, {{268725292147997200ull, 1833902550875581ull}}, {{14972375492686039052ull, 1467122040700464ull}}, {{15667249208890741564ull, 1173697632560371ull}}, {{17688901104741365860ull, 1877916212096594ull}}, {{17840469698535003012ull, 1502332969677275ull}}, {{14272375758828002408ull, 1201866375741820ull}}, {{4389057140415252236ull, 1922986201186913ull}}, {{10889943341816022436ull, 1538388960949530ull}}, {{8711954673452817948ull, 1230711168759624ull}}, {{2871081033298777748ull, 1969137870015399ull}}, {{5986213641380932524ull, 1575310296012319ull}}, {{8478319727846656340ull, 1260248236809855ull}}, {{13565311564554650148ull, 2016397178895768ull}}, {{18230946881127540764ull, 1613117743116614ull}}, {{18274106319643942932ull, 1290494194493291ull}}, {{3413128408236936432ull, 2064790711189267ull}}, {{13798549170815280116ull, 1651832568951413ull}}, {{18417536966136044736ull, 1321466055161130ull}}, {{11021315072108119964ull, 2114345688257809ull}}, {{12506400872428406296ull, 1691476550606247ull}}, {{2626423068458904388ull, 1353181240484998ull}}, {{512928094792336700ull, 2165089984775997ull}}, {{11478388920059600332ull, 1732071987820797ull}}, {{1804013506563859616ull, 1385657590256638ull}}, {{17643816869469816680ull, 2217052144410620ull}}, {{14115053495575853344ull, 1773641715528496ull}}, {{7602693981718772352ull, 1418913372422797ull}}, {{17150201629600748852ull, 1135130697938237ull}}, {{12682927348393556872ull, 1816209116701180ull}}, {{10146341878714845496ull, 1452967293360944ull}}, {{11806422317713786720ull, 1162373834688755ull}}, {{443531634632507136ull, 1859798135502009ull}}, {{4044174122447916032ull, 1487838508401607ull}}, {{14303385742184063796ull, 1190270806721285ull}}, {{4438673113784950456ull, 1904433290754057ull}}, {{14618984935253691336ull, 1523546632603245ull}}, {{11695187948202953068ull, 1218837306082596ull}}, {{11333603087640904264ull, 1950139689732154ull}}, {{12756231284854633732ull, 1560111751785723ull}}, {{17583682657367527632ull, 1248089401428578ull}}, {{5997799363336582272ull, 1996943042285726ull}}, {{1108890675927355496ull, 1597554433828581ull}}, {{15644507799709525688ull, 1278043547062864ull}}, {{13963166035309510132ull, 2044869675300583ull}}, {{102486384021877136ull, 1635895740240467ull}}, {{11150035551443232680ull, 1308716592192373ull}}, {{14150708067567261964ull, 2093946547507797ull}}, {{3941868824569988924ull, 1675157238006238ull}}, {{10532192689139811784ull, 1340125790404990ull}}, {{16851508302623698856ull, 2144201264647984ull}}, {{17170555456840869408ull, 1715361011718387ull}}, {{6357746735988874880ull, 1372288809374710ull}}, {{10172394777582199808ull, 2195662094999536ull}}, {{4448567007323849524ull, 1756529675999629ull}}, {{7248202420600989940ull, 1405223740799703ull}}, {{7907775058219673584ull, 2248357985279525ull}}, {{6326220046575738868ull, 1798686388223620ull}}, {{5060976037260591092ull, 1438949110578896ull}}, {{359432015066562552ull, 1151159288463117ull}}, {{4264440038848410408ull, 1841854861540987ull}}, {{14479598475304459296ull, 1473483889232789ull}}, {{15273027594985477760ull, 1178787111386231ull}}, {{17058146522492943768ull, 1886059378217970ull}}, {{13646517217994355016ull, 1508847502574376ull}}, {{7227864959653573688ull, 1207078002059501ull}}, {{4185886305961897256ull, 1931324803295202ull}}, {{14416755488995248772ull, 1545059842636161ull}}, {{7844055576454288696ull, 1236047874108929ull}}, {{1482442478101130944ull, 1977676598574287ull}}, {{12254000426706635724ull, 1582141278859429ull}}, {{13492549156107218904ull, 1265713023087543ull}}, {{17898729835029639920ull, 2025140836940069ull}}, {{18008332682765622260ull, 1620112669552055ull}}, {{14406666146212497808ull, 1296090135641644ull}}, {{11982619389714265524ull, 2073744217026631ull}}, {{5896746697029502096ull, 1658995373621305ull}}, {{4717397357623601676ull, 1327196298897044ull}}, {{14926533401681583328ull, 2123514078235270ull}}, {{11941226721345266664ull, 1698811262588216ull}}, {{5863632562334303008ull, 1359049010070573ull}}, {{5692463284992974488ull, 2174478416112917ull}}, {{15622017072220110560ull, 1739582732890333ull}}, {{1429567213550357480ull, 1391666186312267ull}}, {{5976656356422482288ull, 2226665898099627ull}}, {{15849371529363716800ull, 1781332718479701ull}}, {{8990148408749063116ull, 1425066174783761ull}}, {{3502769912257340168ull, 1140052939827009ull}}, {{12983129489095564920ull, 1824084703723214ull}}, {{14075852406018362260ull, 1459267762978571ull}}, {{7571333110072779484ull, 1167414210382857ull}}, {{15803481790858357496ull, 1867862736612571ull}}, {{8953436617944775676ull, 1494290189290057ull}}, {{18230795738581551508ull, 1195432151432045ull}}, {{10722529108020930800ull, 1912691442291273ull}}, {{15956720915900565284ull, 1530153153833018ull}}, {{1697330288494721260ull, 1224122523066415ull}}, {{2715728461591554016ull, 1958596036906264ull}}, {{5861931584015153536ull, 1566876829525011ull}}, {{1000196452470212504ull, 1253501463620009ull}}, {{8979011953436160652ull, 2005602341792014ull}}, {{10872558377490838844ull, 1604481873433611ull}}, {{5008697887250760752ull, 1283585498746889ull}}, {{15392614249085037852ull, 2053736797995022ull}}, {{4935393769784209636ull, 1642989438396018ull}}, {{11327012645311188356ull, 1314391550716814ull}}, {{7055173788272170400ull, 2103026481146903ull}}, {{13022836660101556964ull, 1682421184917522ull}}, {{3039571698597424924ull, 1345936947934018ull}}, {{1173965903013969556ull, 2153499116694429ull}}, {{4628521537153085968ull, 1722799293355543ull}}, {{11081514859206289420ull, 1378239434684434ull}}, {{6662377330504332104ull, 2205183095495095ull}}, {{5329901864403465684ull, 1764146476396076ull}}, {{574572676780862224ull, 1411317181116861ull}}, {{15217053400392331072ull, 1129053744893488ull}}, {{2211192552176267776ull, 1806485991829582ull}}, {{12837000485966745192ull, 1445188793463665ull}}, {{10269600388773396152ull, 1156151034770932ull}}, {{1673965363069792552ull, 1849841655633492ull}}, {{12407218734681565012ull, 1479873324506793ull}}, {{17304472617229072656ull, 1183898659605434ull}}, {{16619109743340785280ull, 1894237855368695ull}}, {{13295287794672628224ull, 1515390284294956ull}}, {{6946881420996192256ull, 1212312227435965ull}}, {{11115010273593907608ull, 1939699563897544ull}}, {{12581357033617036408ull, 1551759651118035ull}}, {{10065085626893629128ull, 1241407720894428ull}}, {{12414788188287896280ull, 1986252353431085ull}}, {{9931830550630317024ull, 1589001882744868ull}}, {{15324162069988074264ull, 1271201506195894ull}}, {{13450612867755187856ull, 2033922409913431ull}}, {{7071141479462239960ull, 1627137927930745ull}}, {{5656913183569791968ull, 1301710342344596ull}}, {{1672363464227846504ull, 2082736547751354ull}}, {{5027239586124187528ull, 1666189238201083ull}}, {{11400489298383170668ull, 1332951390560866ull}}, {{10862085247929252424ull, 2132722224897386ull}}, {{5000319383601491616ull, 1706177779917909ull}}, {{7689604321623103616ull, 1364942223934327ull}}, {{15992715729338876108ull, 2183907558294923ull}}, {{1726126139245369916ull, 1747126046635939ull}}, {{5070249726138206256ull, 1397700837308751ull}}, {{733701932337309364ull, 2236321339694002ull}}, {{11655007990095578460ull, 1789057071755201ull}}, {{5634657577334552444ull, 1431245657404161ull}}, {{818377247125731632ull, 1144996525923329ull}}, {{8688101224884991260ull, 1831994441477326ull}}, {{3261132165166082684ull, 1465595553181861ull}}, {{17366300991100507440ull, 1172476442545488ull}}, {{5649988697309349964ull, 1875962308072782ull}}, {{15588037402073210940ull, 1500769846458225ull}}, {{12470429921658568752ull, 1200615877166580ull}}, {{1505943800944158388ull, 1920985403466529ull}}, {{4894103855497237032ull, 1536788322773223ull}}, {{11293980713881610272ull, 1229430658218578ull}}, {{14381020327468666116ull, 1967089053149725ull}}, {{11504816261974932892ull, 1573671242519780ull}}, {{9203853009579946312ull, 1258936994015824ull}}, {{3658118371102183132ull, 2014299190425319ull}}, {{6615843511623656828ull, 1611439352340255ull}}, {{5292674809298925464ull, 1289151481872204ull}}, {{15846977324362101388ull, 2062642370995526ull}}, {{8988233044747770788ull, 1650113896796421ull}}, {{3501237621056306304ull, 1320091117437137ull}}, {{9291329008432000412ull, 2112145787899419ull}}, {{11122412021487510652ull, 1689716630319535ull}}, {{8897929617190008524ull, 1351773304255628ull}}, {{10547338572762103312ull, 2162837286809005ull}}, {{8437870858209682652ull, 1730269829447204ull}}, {{10439645501309656444ull, 1384215863557763ull}}, {{13014083987353539988ull, 2214745381692421ull}}, {{6721918375140921668ull, 1771796305353937ull}}, {{16445581144338468304ull, 1417437044283149ull}}, {{16845813730212684964ull, 1133949635426519ull}}, {{15885255524114564976ull, 1814319416682431ull}}, {{9018855604549741656ull, 1451455533345945ull}}, {{7215084483639793324ull, 1161164426676756ull}}, {{4165437544339848676ull, 1857863082682810ull}}, {{3332350035471878940ull, 1486290466146248ull}}, {{10044577657861323796ull, 1189032372916998ull}}, {{12381975437836207752ull, 1902451796667197ull}}, {{2526882720785145556ull, 1521961437333758ull}}, {{9400203806111937092ull, 1217569149867006ull}}, {{7661628460295278700ull, 1948110639787210ull}}, {{6129302768236222960ull, 1558488511829768ull}}, {{12282139844072799012ull, 1246790809463814ull}}, {{8583377306290747452ull, 1994865295142103ull}}, {{14245399474516418608ull, 1595892236113682ull}}, {{4017621950129314240ull, 1276713788890946ull}}, {{17496241564432633756ull, 2042742062225513ull}}, {{2928946807320376036ull, 1634193649780411ull}}, {{17100552704823942120ull, 1307354919824328ull}}, {{5224791439266845452ull, 2091767871718926ull}}, {{490484336671566040ull, 1673414297375141ull}}, {{15149782728304894124ull, 1338731437900112ull}}, {{9482257106320189308ull, 2141970300640180ull}}, {{7585805685056151444ull, 1713576240512144ull}}, {{9757993362786831480ull, 1370860992409715ull}}, {{15612789380458930368ull, 2193377587855544ull}}, {{16179580319109054616ull, 1754702070284435ull}}, {{12943664255287243692ull, 1403761656227548ull}}, {{17020513993717679588ull, 2246018649964077ull}}, {{6237713565490323024ull, 1796814919971262ull}}, {{16058217296617989388ull, 1437451935977009ull}}, {{16535922652036301832ull, 1149961548781607ull}}, {{11700080984290441640ull, 1839938478050572ull}}, {{1981367157948532664ull, 1471950782440458ull}}, {{8963791355842646780ull, 1177560625952366ull}}, {{6963368539864414200ull, 1884097001523786ull}}, {{1881346017149621036ull, 1507277601219029ull}}, {{5194425628461607152ull, 1205822080975223ull}}, {{4621732190796661120ull, 1929315329560357ull}}, {{14765432196863059868ull, 1543452263648285ull}}, {{11812345757490447892ull, 1234761810918628ull}}, {{15210404397242806304ull, 1975618897469805ull}}, {{12168323517794245044ull, 1580495117975844ull}}, {{13424007628977306360ull, 1264396094380675ull}}, {{3031668132654138560ull, 2023033751009081ull}}, {{17182729765090952140ull, 1618427000807264ull}}, {{17435532626814672036ull, 1294741600645811ull}}, {{2071410499710102992ull, 2071586561033299ull}}, {{5346477214509992716ull, 1657269248826639ull}}, {{7966530586349904496ull, 1325815399061311ull}}, {{5367751308676026548ull, 2121304638498098ull}}, {{11672898676424641884ull, 1697043710798478ull}}, {{16717016570623534156ull, 1357634968638782ull}}, {{11989831254030013356ull, 2172215949822052ull}}, {{2213167373740190036ull, 1737772759857642ull}}, {{12838580343217883000ull, 1390218207886113ull}}, {{16852379734406702476ull, 2224349132617781ull}}, {{9792554972783451660ull, 1779479306094225ull}}, {{7834043978226761328ull, 1423583444875380ull}}, {{6267235182581409060ull, 1138866755900304ull}}, {{17406273921614075144ull, 1822186809440486ull}}, {{10235670322549349792ull, 1457749447552389ull}}, {{11877885072781390156ull, 1166199558041911ull}}, {{11625918486966403604ull, 1865919292867058ull}}, {{16679432419056943528ull, 1492735434293646ull}}, {{9654197120503644500ull, 1194188347434917ull}}, {{689320133838189908ull, 1910701355895868ull}}, {{7930153736554372572ull, 1528561084716694ull}}, {{10033471803985408380ull, 1222848867773355ull}}, {{16053554886376653412ull, 1956558188437368ull}}, {{1774797464875591760ull, 1565246550749895ull}}, {{1419837971900473408ull, 1252197240599916ull}}, {{13339787199266488420ull, 2003515584959865ull}}, {{10671829759413190736ull, 1602812467967892ull}}, {{1158766178046731944ull, 1282249974374314ull}}, {{9232723514358591756ull, 2051599958998902ull}}, {{7481182003052760ull, 1641279967199122ull}}, {{11074031389828173176ull, 1313023973759297ull}}, {{2961054964757435788ull, 2100838358014876ull}}, {{17126239230773589924ull, 1680670686411900ull}}, {{13700991384618871940ull, 1344536549129520ull}}, {{3474842141680643488ull, 2151258478607233ull}}, {{10158571342828335436ull, 1721006782885786ull}}, {{4437508259520758024ull, 1376805426308629ull}}, {{14478710844717033488ull, 2202888682093806ull}}, {{7893619861031716468ull, 1762310945675045ull}}, {{6314895888825373172ull, 1409848756540036ull}}, {{1362567896318388216ull, 1127879005232029ull}}, {{9558806263593241792ull, 1804606408371246ull}}, {{3957696196132683108ull, 1443685126696997ull}}, {{14234203401131877456ull, 1154948101357597ull}}, {{8017330182843362640ull, 1847916962172156ull}}, {{2724515331532779788ull, 1478333569737725ull}}, {{2179612265226223828ull, 1182666855790180ull}}, {{3487379624361958128ull, 1892266969264288ull}}, {{10168601328973387148ull, 1513813575411430ull}}, {{8134881063178709720ull, 1211050860329144ull}}, {{1947763256860204580ull, 1937681376526631ull}}, {{16315605864455804956ull, 1550145101221304ull}}, {{16741833506306554288ull, 1240116080977043ull}}, {{4650840721639024924ull, 1984185729563270ull}}, {{3720672577311219940ull, 1587348583650616ull}}, {{17733933320816617244ull, 1269878866920492ull}}, {{13616898054338946300ull, 2031806187072788ull}}, {{18272216072954977684ull, 1625444949658230ull}}, {{14617772858363982148ull, 1300355959726584ull}}, {{12320390129156640468ull, 2080569535562535ull}}, {{9856312103325312372ull, 1664455628450028ull}}, {{15263747312144070544ull, 1331564502760022ull}}, {{9664600440462871580ull, 2130503204416036ull}}, {{4042331537628386940ull, 1704402563532829ull}}, {{6923214044844619876ull, 1363522050826263ull}}, {{7387793657009481480ull, 2181635281322021ull}}, {{2220886110865674860ull, 1745308225057617ull}}, {{12844755332918270856ull, 1396246580046093ull}}, {{16862259717927323048ull, 2233994528073749ull}}, {{17179156589083768760ull, 1787195622458999ull}}, {{17432674086008925332ull, 1429756497967199ull}}, {{17635488083549050588ull, 1143805198373759ull}}, {{17148734489452749972ull, 1830088317398015ull}}, {{13718987591562199976ull, 1464070653918412ull}}, {{3596492443765939336ull, 1171256523134730ull}}, {{5754387910025502936ull, 1874010437015568ull}}, {{11982207957504222996ull, 1499208349612454ull}}, {{13275115180745288720ull, 1199366679689963ull}}, {{17550835474450551628ull, 1918986687503941ull}}, {{10351319564818530980ull, 1535189350003153ull}}, {{15659753281338645432ull, 1228151480002522ull}}, {{10298209991174191396ull, 1965042368004036ull}}, {{4549219178197442792ull, 1572033894403229ull}}, {{7328724157299864556ull, 1257627115522583ull}}, {{8036609836937872972ull, 2012203384836133ull}}, {{13807985499034119024ull, 1609762707868906ull}}, {{7357039584485384896ull, 1287810166295125ull}}, {{11771263335176615832ull, 2060496266072200ull}}, {{9417010668141292664ull, 1648397012857760ull}}, {{7533608534513034132ull, 1318717610286208ull}}, {{8364424840478944288ull, 2109948176457933ull}}, {{14070237501866976076ull, 1687958541166346ull}}, {{7566841186751670540ull, 1350366832933077ull}}, {{15796294713544583184ull, 2160586932692923ull}}, {{1568989326609935580ull, 1728469546154339ull}}, {{4944540276029858784ull, 1382775636923471ull}}, {{532566812163953412ull, 2212441019077554ull}}, {{4115402264473073052ull, 1769952815262043ull}}, {{10671019441062279088ull, 1415962252209634ull}}, {{12226164367591733592ull, 1132769801767707ull}}, {{4804467729179132456ull, 1812431682828332ull}}, {{14911620627569036936ull, 1449945346262665ull}}, {{11929296502055229548ull, 1159956277010132ull}}, {{4329479144320725984ull, 1855930043216212ull}}, {{14531629759682311756ull, 1484744034572969ull}}, {{15314652622487759728ull, 1187795227658375ull}}, {{6056700122270863952ull, 1900472364253401ull}}, {{1156011283074780836ull, 1520377891402721ull}}, {{15682204285427465960ull, 1216302313122176ull}}, {{17712829227200124892ull, 1946083700995482ull}}, {{6791565752276279268ull, 1556866960796386ull}}, {{1743903787079113092ull, 1245493568637109ull}}, {{10168943688810401592ull, 1992789709819374ull}}, {{11824503765790231596ull, 1594231767855499ull}}, {{13148951827374095600ull, 1275385414284399ull}}, {{9970276479572821992ull, 2040616662855039ull}}, {{11665569998400167916ull, 1632493330284031ull}}, {{5643107183978224008ull, 1305994664227225ull}}, {{9028971494365158416ull, 2089591462763560ull}}, {{7223177195492126732ull, 1671673170210848ull}}, {{13157239385877522032ull, 1337338536168678ull}}, {{17362234202662124928ull, 2139741657869885ull}}, {{13889787362129699944ull, 1711793326295908ull}}, {{43783445478028984ull, 1369434661036727ull}}, {{3759402327506756700ull, 2191095457658763ull}}, {{10386219491489226008ull, 1752876366127010ull}}, {{8308975593191380804ull, 1402301092901608ull}}, {{9605012134364298964ull, 2243681748642573ull}}, {{15062707336975259820ull, 1794945398914058ull}}, {{982119425354476884ull, 1435956319131247ull}}, {{11853741984509312476ull, 1148765055304997ull}}, {{4208591916247258672ull, 1838024088487996ull}}, {{18124268791965448228ull, 1470419270790396ull}}, {{10810066218830448260ull, 1176335416632317ull}}, {{2538710691161075924ull, 1882136666611708ull}}, {{9409666182412681384ull, 1505709333289366ull}}, {{3838384131188234784ull, 1204567466631493ull}}, {{2452065795159265332ull, 1927307946610389ull}}, {{5651001450869322588ull, 1541846357288311ull}}, {{831452345953547748ull, 1233477085830649ull}}, {{8709021383009497044ull, 1973563337329038ull}}, {{14345914735891418280ull, 1578850669863230ull}}, {{11476731788713134624ull, 1263080535890584ull}}, {{7294724417715284432ull, 2020928857424935ull}}, {{5835779534172227544ull, 1616743085939948ull}}, {{12047321256821602680ull, 1293394468751958ull}}, {{15586365196172653968ull, 2069431150003133ull}}, {{1401045712712392204ull, 1655544920002507ull}}, {{12188883014395644732ull, 1324435936002005ull}}, {{1055468749323479960ull, 2119097497603209ull}}, {{4533723814200694288ull, 1695277998082567ull}}, {{14695025495586286400ull, 1356222398466053ull}}, {{1375947904486596304ull, 2169955837545686ull}}, {{15858153582556918336ull, 1735964670036548ull}}, {{1618476421819803700ull, 1388771736029239ull}}, {{9968259904395506564ull, 2222034777646782ull}}, {{595910294032584604ull, 1777627822117426ull}}, {{15234123494193708976ull, 1422102257693940ull}}, {{12187298795354967180ull, 1137681806155152ull}}, {{4742282813600306196ull, 1820290889848244ull}}, {{7483175065622155280ull, 1456232711878595ull}}, {{5986540052497724224ull, 1164986169502876ull}}, {{2199766454512538112ull, 1863977871204602ull}}, {{12827859607835761460ull, 1491182296963681ull}}, {{6572938871526698844ull, 1192945837570945ull}}, {{10516702194442718152ull, 1908713340113512ull}}, {{1034664126070353876ull, 1526970672090810ull}}, {{827731300856283100ull, 1221576537672648ull}}, {{16081765340337694252ull, 1954522460276236ull}}, {{9176063457528245080ull, 1563617968220989ull}}, {{11030199580764506388ull, 1250894374576791ull}}, {{10269621699739389572ull, 2001430999322866ull}}, {{4526348545049601336ull, 1601144799458293ull}}, {{10999776465523501712ull, 1280915839566634ull}}, {{6531595900611871772ull, 2049465343306615ull}}, {{5225276720489497420ull, 1639572274645292ull}}, {{15248267820617328904ull, 1311657819716233ull}}, {{2261135624536264308ull, 2098652511545974ull}}, {{5498257314370921768ull, 1678922009236779ull}}, {{8087954666238647740ull, 1343137607389423ull}}, {{9251378651239926060ull, 2149020171823077ull}}, {{22405291508120200ull, 1719216137458462ull}}, {{11085970677432227128ull, 1375372909966769ull}}, {{6669506639665832440ull, 2200596655946831ull}}, {{1646256496990755628ull, 1760477324757465ull}}, {{1317005197592604500ull, 1408381859805972ull}}, {{12121650602299814572ull, 1126705487844777ull}}, {{4637245704712062020ull, 1802728780551644ull}}, {{7399145378511559940ull, 1442183024441315ull}}, {{5919316302809247952ull, 1153746419553052ull}}, {{13160254899236707048ull, 1845994271284883ull}}, {{17906901548873186284ull, 1476795417027906ull}}, {{10636172424356638704ull, 1181436333622325ull}}, {{17017875878970621928ull, 1890298133795720ull}}, {{13614300703176497540ull, 1512238507036576ull}}, {{7202091747799287708ull, 1209790805629261ull}}, {{4144649166995039688ull, 1935665289006818ull}}, {{10694416963079852396ull, 1548532231205454ull}}, {{12244882385205792240ull, 1238825784964363ull}}, {{15902463001587357264ull, 1982121255942981ull}}, {{9032621586527975488ull, 1585697004754385ull}}, {{7226097269222380388ull, 1268557603803508ull}}, {{7872406816013898300ull, 2029692166085613ull}}, {{13676623082294939288ull, 1623753732868490ull}}, {{10941298465835951428ull, 1299002986294792ull}}, {{2748682286369880992ull, 2078404778071668ull}}, {{9577643458579725440ull, 1662723822457334ull}}, {{11351463581605690676ull, 1330179057965867ull}}, {{3404946471601463788ull, 2128286492745388ull}}, {{10102654806764991676ull, 1702629194196310ull}}, {{8082123845411993340ull, 1362103355357048ull}}, {{9242049337917279024ull, 2179365368571277ull}}, {{14941840850002572ull, 1743492294857022ull}}, {{11079999916905733028ull, 1394793835885617ull}}, {{2970604608081531552ull, 2231670137416988ull}}, {{9755181315949045888ull, 1785336109933590ull}}, {{7804145052759236712ull, 1428268887946872ull}}, {{17311362486433120336ull, 1142615110357497ull}}, {{12940784719325351248ull, 1828184176571996ull}}, {{6663278960718370676ull, 1462547341257597ull}}, {{16398669612800427508ull, 1170037873006077ull}}, {{11480476121513042724ull, 1872060596809724ull}}, {{12873729711952344500ull, 1497648477447779ull}}, {{13988332584303785924ull, 1198118781958223ull}}, {{245239246434595540ull, 1916990051133158ull}}, {{7574889026631497076ull, 1533592040906526ull}}, {{2370562406563287340ull, 1226873632725221ull}}, {{14860946294726990712ull, 1962997812360353ull}}, {{820710591555861600ull, 1570398249888283ull}}, {{8035266102728509928ull, 1256318599910626ull}}, {{5477728134881795236ull, 2010109759857002ull}}, {{15450228952131167160ull, 1608087807885601ull}}, {{8670834346963023404ull, 1286470246308481ull}}, {{6494637325657016800ull, 2058352394093570ull}}, {{5195709860525613440ull, 1646681915274856ull}}, {{467219073678580428ull, 1317345532219885ull}}, {{747550517885728688ull, 2107752851551816ull}}, {{15355435673276224240ull, 1686202281241452ull}}, {{4905650909137158748ull, 1348961824993162ull}}, {{11538390269361364320ull, 2158338919989059ull}}, {{12920061030231001776ull, 1726671135991247ull}}, {{2957351194700980776ull, 1381336908792998ull}}, {{1042413096779658920ull, 2210139054068797ull}}, {{11901976921649458104ull, 1768111243255037ull}}, {{2142883907835745836ull, 1414488994604030ull}}, {{1714307126268596668ull, 1131591195683224ull}}, {{10121589031513575316ull, 1810545913093158ull}}, {{15475968854694680900ull, 1448436730474526ull}}, {{8691426269013834396ull, 1158749384379621ull}}, {{6527584400938314388ull, 1853999015007394ull}}, {{8911416335492561832ull, 1483199212005915ull}}, {{7129133068394049468ull, 1186559369604732ull}}, {{15095961724172389472ull, 1898494991367571ull}}, {{8387420564596001252ull, 1518795993094057ull}}, {{17777982895902531972ull, 1215036794475245ull}}, {{9998028559734499540ull, 1944058871160393ull}}, {{15377120477271420280ull, 1555247096928314ull}}, {{15991045196559046544ull, 1244197677542651ull}}, {{18206974685010653828ull, 1990716284068242ull}}, {{7186882118524702416ull, 1592573027254594ull}}, {{9438854509561672256ull, 1274058421803675ull}}, {{15102167215298675608ull, 2038493474885880ull}}, {{12081733772238940488ull, 1630794779908704ull}}, {{13354735832533062712ull, 1304635823926963ull}}, {{17678228517310990016ull, 2087417318283141ull}}, {{10453233999106881692ull, 1669933854626513ull}}, {{15741284828769326000ull, 1335947083701210ull}}, {{6739311652321369984ull, 2137515333921937ull}}, {{16459495766082826956ull, 1710012267137549ull}}, {{16856945427608171888ull, 1368009813710039ull}}, {{15903066239947344052ull, 2188815701936063ull}}, {{1654406547732144272ull, 1751052561548851ull}}, {{16080920497153356708ull, 1400842049239080ull}}, {{7282728721735819120ull, 2241347278782529ull}}, {{9515531792130565620ull, 1793077823026023ull}}, {{14991123063188273140ull, 1434462258420818ull}}, {{924852006324887544ull, 1147569806736655ull}}, {{1479763210119820068ull, 1836111690778648ull}}, {{8562508197579676700ull, 1468889352622918ull}}, {{14228704187547562008ull, 1175111482098334ull}}, {{11697880255850368244ull, 1880178371357335ull}}, {{9358304204680294596ull, 1504142697085868ull}}, {{14865340993228056320ull, 1203314157668694ull}}, {{12716499144939159144ull, 1925302652269911ull}}, {{6483850501209416992ull, 1540242121815929ull}}, {{8876429215709443916ull, 1232193697452743ull}}, {{10512937930393199944ull, 1971509915924389ull}}, {{12099699159056470280ull, 1577207932739511ull}}, {{5990410512503265900ull, 1261766346191609ull}}, {{16963354449489046088ull, 2018826153906574ull}}, {{17260032374333147192ull, 1615060923125259ull}}, {{17497374714208428076ull, 1292048738500207ull}}, {{13238404283765843632ull, 2067277981600332ull}}, {{3212025797528854260ull, 1653822385280266ull}}, {{17327015896990724700ull, 1323057908224212ull}}, {{12965830176217518228ull, 2116892653158740ull}}, {{10372664140974014580ull, 1693514122526992ull}}, {{919433683295391016ull, 1354811298021594ull}}, {{8849791522756446276ull, 2167698076834550ull}}, {{7079833218205157020ull, 1734158461467640ull}}, {{5663866574564125616ull, 1387326769174112ull}}, {{12751535334044511312ull, 2219722830678579ull}}, {{13890577081977519372ull, 1775778264542863ull}}, {{44415221356284528ull, 1420622611634291ull}}, {{14792927436052668912ull, 1136498089307432ull}}, {{8911288638716628972ull, 1818396942891892ull}}, {{18197077355199034144ull, 1454717554313513ull}}, {{3489615439933496348ull, 1163774043450811ull}}, {{16651431148119325124ull, 1862038469521297ull}}, {{5942447289011639452ull, 1489630775617038ull}}, {{12132655460693132208ull, 1191704620493630ull}}, {{965504663399459920ull, 1906727392789809ull}}, {{4461752545461478260ull, 1525381914231847ull}}, {{14637448480594913576ull, 1220305531385477ull}}, {{8662522309984220428ull, 1952488850216764ull}}, {{10619366662729286668ull, 1561991080173411ull}}, {{4806144515441519008ull, 1249592864138729ull}}, {{15068528854190251064ull, 1999348582621966ull}}, {{8365474268610290528ull, 1599478866097573ull}}, {{14071077044372053068ull, 1279583092878058ull}}, {{377630382543822968ull, 2047332948604894ull}}, {{3991453120776968700ull, 1637866358883915ull}}, {{3193162496621574960ull, 1310293087107132ull}}, {{8798408809336430256ull, 2096468939371411ull}}, {{3349378232727233884ull, 1677175151497129ull}}, {{6368851400923697428ull, 1341740121197703ull}}, {{6500813426736005564ull, 2146784193916325ull}}, {{5200650741388804452ull, 1717427355133060ull}}, {{4160520593111043560ull, 1373941884106448ull}}, {{2967484134235759376ull, 2198307014570317ull}}, {{13442033751614338468ull, 1758645611656253ull}}, {{18132324630775291420ull, 1406916489325002ull}}, {{14254324150272824984ull, 2251066382920004ull}}, {{15092808134960170308ull, 1800853106336003ull}}, {{1006200063742405276ull, 1440682485068803ull}}, {{8183657680477744868ull, 1152545988055042ull}}, {{16783201103506302112ull, 1844073580888067ull}}, {{6047863253321221044ull, 1475258864710454ull}}, {{8527639417398887156ull, 1180207091768363ull}}, {{9954874253096309128ull, 1888331346829381ull}}, {{4274550587735136980ull, 1510665077463505ull}}, {{3419640470188109584ull, 1208532061970804ull}}, {{12850122381784795980ull, 1933651299153286ull}}, {{6590749090685926460ull, 1546921039322629ull}}, {{8961948087290651492ull, 1237536831458103ull}}, {{10649768124923132064ull, 1980058930332965ull}}, {{8519814499938505652ull, 1584047144266372ull}}, {{17883898044176535492ull, 1267237715413097ull}}, {{13856841611714815492ull, 2027580344660956ull}}, {{7396124474629942072ull, 1622064275728765ull}}, {{5916899579703953656ull, 1297651420583012ull}}, {{13156388142268236176ull, 2076242272932819ull}}, {{14214459328556499264ull, 1660993818346255ull}}, {{11371567462845199408ull, 1328795054677004ull}}, {{7126461496326588088ull, 2126072087483207ull}}, {{16769215641287001440ull, 1700857669986565ull}}, {{13415372513029601152ull, 1360686135989252ull}}, {{6707200761879720548ull, 2177097817582804ull}}, {{9055109424245686764ull, 1741678254066243ull}}, {{14622785168880370056ull, 1393342603252994ull}}, {{12328409825982861120ull, 2229348165204791ull}}, {{6173379046044378572ull, 1783478532163833ull}}, {{12317400866319323504ull, 1426782825731066ull}}, {{6164571878313548480ull, 1141426260584853ull}}, {{6173966190559767248ull, 1826282016935765ull}}, {{4939172952447813796ull, 1461025613548612ull}}, {{15019384806183982008ull, 1168820490838889ull}}, {{12962969245668640244ull, 1870112785342223ull}}, {{17749073026018732840ull, 1496090228273778ull}}, {{3131211976589255300ull, 1196872182619023ull}}, {{1320590347800898160ull, 1914995492190437ull}}, {{12124518722466449496ull, 1531996393752349ull}}, {{13388963792715069920ull, 1225597115001879ull}}, {{10354295624118380904ull, 1960955384003007ull}}, {{904738869810884076ull, 1568764307202406ull}}, {{15481186354816348556ull, 1255011445761924ull}}, {{13701851723480426720ull, 2008018313219079ull}}, {{14650830193526251696ull, 1606414650575263ull}}, {{652617710595270388ull, 1285131720460211ull}}, {{12112234781178163592ull, 2056210752736337ull}}, {{2311090195458710228ull, 1644968602189070ull}}, {{1848872156366968180ull, 1315974881751256ull}}, {{14026241894412880060ull, 2105559810802009ull}}, {{14910342330272214372ull, 1684447848641607ull}}, {{4549576234733950848ull, 1347558278913286ull}}, {{18347368419800052332ull, 2156093246261257ull}}, {{7299197106356221216ull, 1724874597009006ull}}, {{2150008870343066652ull, 1379899677607205ull}}, {{3440014192548906644ull, 2207839484171528ull}}, {{10130708983522945960ull, 1766271587337222ull}}, {{725869557334536120ull, 1413017269869778ull}}, {{7959393275351449544ull, 1130413815895822ull}}, {{16424378055304229592ull, 1808662105433315ull}}, {{13139502444243383672ull, 1446929684346652ull}}, {{3132904325910886292ull, 1157543747477322ull}}, {{8701995736199328392ull, 1852069995963715ull}}, {{6961596588959462712ull, 1481655996770972ull}}, {{16637323715393301140ull, 1185324797416777ull}}, {{11862322685661640532ull, 1896519675866844ull}}, {{13179206963271222748ull, 1517215740693475ull}}, {{10543365570616978200ull, 1213772592554780ull}}, {{16869384912987165120ull, 1942036148087648ull}}, {{2427461486164001124ull, 1553628918470119ull}}, {{5631318003673111224ull, 1242903134776095ull}}, {{9010108805876977956ull, 1988645015641752ull}}, {{18276133488927313336ull, 1590916012513401ull}}, {{10931557976399940344ull, 1272732810010721ull}}, {{10111795132756083908ull, 2036372496017154ull}}, {{11778784920946777448ull, 1629097996813723ull}}, {{16801725566241242604ull, 1303278397450978ull}}, {{4746668017534526228ull, 2085245435921566ull}}, {{107985599285710660ull, 1668196348737253ull}}, {{7465086108912389172ull, 1334557078989802ull}}, {{15633486589001733004ull, 2135291326383683ull}}, {{1438742826975655432ull, 1708233061106947ull}}, {{12219040705806255316ull, 1366586448885557ull}}, {{4793069870322367212ull, 2186538318216892ull}}, {{14902502340483624740ull, 1749230654573513ull}}, {{853955428161168820ull, 1399384523658811ull}}, {{12434375129283601084ull, 2239015237854097ull}}, {{2568802473943060220ull, 1791212190283278ull}}, {{9433739608638268824ull, 1432969752226622ull}}, {{168294057426794412ull, 1146375801781298ull}}, {{15026665750850512352ull, 1834201282850076ull}}, {{8331983785938499556ull, 1467361026280061ull}}, {{2976238214008889324ull, 1173888821024049ull}}, {{12140678771898043564ull, 1878222113638478ull}}, {{17091240647002255496ull, 1502577690910782ull}}, {{6294294888117983752ull, 1202062152728626ull}}, {{2692174191504953356ull, 1923299444365802ull}}, {{13221785797429693656ull, 1538639555492641ull}}, {{6888079823201844600ull, 1230911644394113ull}}, {{7331578902381041036ull, 1969458631030581ull}}, {{2175914307162922508ull, 1575566904824465ull}}, {{1740731445730338004ull, 1260453523859572ull}}, {{6474519127910451132ull, 2016725638175315ull}}, {{5179615302328360904ull, 1613380510540252ull}}, {{15211738686088419692ull, 1290704408432201ull}}, {{16960084268257650864ull, 2065127053491522ull}}, {{6189369785122300044ull, 1652101642793218ull}}, {{12330193457581660680ull, 1321681314234574ull}}, {{8660263087904926124ull, 2114690102775319ull}}, {{10617559285065851220ull, 1691752082220255ull}}, {{8494047428052680976ull, 1353401665776204ull}}, {{2522429440658558592ull, 2165442665241927ull}}, {{13085989996752577844ull, 1732354132193541ull}}, {{6779443182660151952ull, 1385883305754833ull}}, {{7157760277514332800ull, 2217413289207733ull}}, {{13104905851495286888ull, 1773930631366186ull}}, {{6794575866454319184ull, 1419144505092949ull}}, {{9125009507905365672ull, 1135315604074359ull}}, {{3531968768422854104ull, 1816504966518975ull}}, {{2825575014738283284ull, 1453203973215180ull}}, {{2260460011790626628ull, 1162563178572144ull}}, {{10995433648348823252ull, 1860101085715430ull}}, {{8796346918679058600ull, 1488080868572344ull}}, {{10726426349685157204ull, 1190464694857875ull}}, {{17162282159496251524ull, 1904743511772600ull}}, {{13729825727597001220ull, 1523794809418080ull}}, {{10983860582077600976ull, 1219035847534464ull}}, {{6506130487098430592ull, 1950457356055143ull}}, {{12583602019162565120ull, 1560365884844114ull}}, {{13756230430071962420ull, 1248292707875291ull}}, {{14631271058631319224ull, 1997268332600466ull}}, {{8015668032163145056ull, 1597814666080373ull}}, {{13791232055214336692ull, 1278251732864298ull}}, {{18376622473601028384ull, 2045202772582877ull}}, {{7322600349397002060ull, 1636162218066302ull}}, {{16926126723743332616ull, 1308929774453041ull}}, {{1256361054795959928ull, 2094287639124867ull}}, {{12073135288062498912ull, 1675430111299893ull}}, {{17037205859933819776ull, 1340344089039914ull}}, {{16191482931668380672ull, 2144550542463863ull}}, {{1885139901108973568ull, 1715640433971091ull}}, {{16265507179854820144ull, 1372512347176872ull}}, {{11267416228800070940ull, 2196019755482996ull}}, {{5324584168298146428ull, 1756815804386397ull}}, {{15327713778864248112ull, 1405452643509117ull}}, {{9766946787215155688ull, 2248724229614588ull}}, {{15192255059255945196ull, 1798979383691670ull}}, {{12153804047404756156ull, 1439183506953336ull}}, {{6033694423181894604ull, 1151346805562669ull}}, {{17032608706574852012ull, 1842154888900270ull}}, {{13626086965259881608ull, 1473723911120216ull}}, {{7211520757465994964ull, 1178979128896173ull}}, {{7849084397203681620ull, 1886366606233877ull}}, {{17347313961988676264ull, 1509093284987101ull}}, {{10188502354849030688ull, 1207274627989681ull}}, {{8922906138274628456ull, 1931639404783490ull}}, {{7138324910619702764ull, 1545311523826792ull}}, {{16778706372721493180ull, 1236249219061433ull}}, {{4709837307902927152ull, 1977998750498294ull}}, {{7457218661064252044ull, 1582399000398635ull}}, {{5965774928851401636ull, 1265919200318908ull}}, {{5855891071420332292ull, 2025470720510253ull}}, {{12063410486620086480ull, 1620376576408202ull}}, {{2272030759812248536ull, 1296301261126562ull}}, {{7324598030441507984ull, 2074082017802499ull}}, {{9549027239095116712ull, 1659265614241999ull}}, {{11328570606018003692ull, 1327412491393599ull}}, {{7057666525403074936ull, 2123859986229759ull}}, {{9335482035064370272ull, 1699087988983807ull}}, {{89687998567675572ull, 1359270391187046ull}}, {{11211547241934011884ull, 2174832625899273ull}}, {{16347935423031030152ull, 1739866100719418ull}}, {{2010301894199093152ull, 1391892880575535ull}}, {{3216483030718549048ull, 2227028608920856ull}}, {{17330581683542480528ull, 1781622887136684ull}}, {{17553814161575894748ull, 1425298309709347ull}}, {{6664353699776895152ull, 1140238647767478ull}}, {{6973617104901121920ull, 1824381836427965ull}}, {{5578893683920897536ull, 1459505469142372ull}}, {{15531161391362448996ull, 1167604375313897ull}}, {{10092462967212277104ull, 1868167000502236ull}}, {{4384621559027911360ull, 1494533600401789ull}}, {{7197046061964239408ull, 1195626880321431ull}}, {{4136576069658962412ull, 1913003008514290ull}}, {{3309260855727169928ull, 1530402406811432ull}}, {{13715455128807466912ull, 1224321925449145ull}}, {{3497984132382395444ull, 1958915080718633ull}}, {{10177084935389737000ull, 1567132064574906ull}}, {{4452319133569879276ull, 1253705651659925ull}}, {{7123710613711806844ull, 2005929042655880ull}}, {{5698968490969445476ull, 1604743234124704ull}}, {{8248523607517466704ull, 1283794587299763ull}}, {{9508288957286036404ull, 2054071339679621ull}}, {{3917282351086918800ull, 1643257071743697ull}}, {{14201872325095266008ull, 1314605657394957ull}}, {{7965600461184784320ull, 2103369051831932ull}}, {{17440526813173558428ull, 1682695241465545ull}}, {{13952421450538846740ull, 1346156193172436ull}}, {{14945176691378334140ull, 2153849909075898ull}}, {{888094908876936344ull, 1723079927260719ull}}, {{4399824741843459396ull, 1378463941808575ull}}, {{7039719586949535036ull, 2205542306893720ull}}, {{5631775669559628028ull, 1764433845514976ull}}, {{816071720905792100ull, 1411547076411981ull}}, {{15410252635692274972ull, 1129237661129584ull}}, {{13588357772881908984ull, 1806780257807335ull}}, {{10870686218305527188ull, 1445424206245868ull}}, {{16075246604128242396ull, 1156339364996694ull}}, {{14652348122379456868ull, 1850142983994711ull}}, {{8032529683161655168ull, 1480114387195769ull}}, {{10115372561271234460ull, 1184091509756615ull}}, {{16184596098033975136ull, 1894546415610584ull}}, {{16637025693169090432ull, 1515637132488467ull}}, {{5930922925051451696ull, 1212509705990774ull}}, {{16868174309566143364ull, 1940015529585238ull}}, {{2426493003427183720ull, 1552012423668191ull}}, {{16698589661709388268ull, 1241609938934552ull}}, {{11960348199767379940ull, 1986575902295284ull}}, {{13257627374555814272ull, 1589260721836227ull}}, {{3227404270160830772ull, 1271408577468982ull}}, {{8853195646999239560ull, 2034253723950371ull}}, {{3393207702857481324ull, 1627402979160297ull}}, {{13782612606511716028ull, 1301922383328237ull}}, {{7294784911451104356ull, 2083075813325180ull}}, {{5835827929160883484ull, 1666460650660144ull}}, {{8358011158070617108ull, 1333168520528115ull}}, {{13372817852912987376ull, 2133069632844984ull}}, {{14387603097072300224ull, 1706455706275987ull}}, {{4131384848174019532ull, 1365164565020790ull}}, {{6610215757078431252ull, 2184263304033264ull}}, {{8977521420404655324ull, 1747410643226611ull}}, {{3492668321581813936ull, 1397928514581289ull}}, {{12966966944014722944ull, 2236685623330062ull}}, {{2994875925727957708ull, 1789348498664050ull}}, {{2395900740582366168ull, 1431478798931240ull}}, {{1916720592465892932ull, 1145183039144992ull}}, {{6756101762687339020ull, 1832292862631987ull}}, {{16472927854375602184ull, 1465834290105589ull}}, {{16867691098242392068ull, 1172667432084471ull}}, {{1162864053994455052ull, 1876267891335155ull}}, {{930291243195564040ull, 1501014313068124ull}}, {{4433581809298361556ull, 1200811450454499ull}}, {{14472428524361199136ull, 1921298320727198ull}}, {{509896375263228340ull, 1537038656581759ull}}, {{4097265914952492992ull, 1229630925265407ull}}, {{10244974278665899112ull, 1967409480424651ull}}, {{4506630608190808968ull, 1573927584339721ull}}, {{18362699745520288468ull, 1259142067471776ull}}, {{3554877889639089284ull, 2014627307954843ull}}, {{10222599941195092072ull, 1611701846363874ull}}, {{11867428767697983980ull, 1289361477091099ull}}, {{7919839584091043404ull, 2062978363345759ull}}, {{10025220482014745044ull, 1650382690676607ull}}, {{641478756127975388ull, 1320306152541286ull}}, {{12094412454030491592ull, 2112489844066057ull}}, {{2296832333740572628ull, 1689991875252846ull}}, {{16594861125960099396ull, 1351993500202276ull}}, {{726336098342786772ull, 2163189600323643ull}}, {{7959766508158050064ull, 1730551680258914ull}}, {{10057162021268350372ull, 1384441344207131ull}}, {{8712761604545539952ull, 2215106150731410ull}}, {{6970209283636431960ull, 1772084920585128ull}}, {{12954865056392966216ull, 1417667936468102ull}}, {{2985194415630552324ull, 1134134349174482ull}}, {{8465659879750794044ull, 1814614958679171ull}}, {{3083179089058724912ull, 1451691966943337ull}}, {{13534589715472710900ull, 1161353573554669ull}}, {{10587297100530606468ull, 1858165717687471ull}}, {{4780488865682574852ull, 1486532574149977ull}}, {{14892437536771790852ull, 1189226059319981ull}}, {{16449202429351044716ull, 1902761694911970ull}}, {{13159361943480835772ull, 1522209355929576ull}}, {{6838140740042758296ull, 1217767484743661ull}}, {{3562327554584592624ull, 1948427975589858ull}}, {{10228559673151494748ull, 1558742380471886ull}}, {{4493498923779285472ull, 1246993904377509ull}}, {{14568295907530677404ull, 1995190247004014ull}}, {{15343985540766452248ull, 1596152197603211ull}}, {{8585839617871251472ull, 1276921758082569ull}}, {{2669296944368271388ull, 2043074812932111ull}}, {{16892832814462258404ull, 1634459850345688ull}}, {{2446219807344075752ull, 1307567880276551ull}}, {{14981998135976252176ull, 2092108608442481ull}}, {{8296249694039091416ull, 1673686886753985ull}}, {{6636999755231273132ull, 1338949509403188ull}}, {{6929850793628126692ull, 2142319215045101ull}}, {{1854531820160591028ull, 1713855372036081ull}}, {{16241020715096114116ull, 1371084297628864ull}}, {{14917586699928051616ull, 2193734876206183ull}}, {{866022915716710324ull, 1754987900964947ull}}, {{11760864776799099228ull, 1403990320771957ull}}, {{4059988383910917472ull, 2246384513235132ull}}, {{14316037151354464948ull, 1797107610588105ull}}, {{11452829721083571960ull, 1437686088470484ull}}, {{12851612591608767888ull, 1150148870776387ull}}, {{5805184887606387332ull, 1840238193242220ull}}, {{4644147910085109864ull, 1472190554593776ull}}, {{25969513326177568ull, 1177752443675021ull}}, {{11109597665547615080ull, 1884403909880033ull}}, {{16266375761921912708ull, 1507523127904026ull}}, {{9323751794795619844ull, 1206018502323221ull}}, {{7539305242189171104ull, 1929629603717154ull}}, {{9720793008493247208ull, 1543703682973723ull}}, {{15155332036278418412ull, 1234962946378978ull}}, {{2112438369594007520ull, 1975940714206366ull}}, {{16447345954642847308ull, 1580752571365092ull}}, {{5779179134230457200ull, 1264602057092074ull}}, {{16625384244252552168ull, 2023363291347318ull}}, {{2232260951176310764ull, 1618690633077855ull}}, {{1785808760941048612ull, 1294952506462284ull}}, {{10235991646989498424ull, 2071924010339654ull}}, {{11878142132333509064ull, 1657539208271723ull}}, {{16881211335350627896ull, 1326031366617378ull}}, {{4873845248109542696ull, 2121650186587806ull}}, {{209727383745723832ull, 1697320149270245ull}}, {{167781906996579068ull, 1357856119416196ull}}, {{11336497495420257476ull, 2172569791065913ull}}, {{16447895625820026628ull, 1738055832852730ull}}, {{13158316500656021304ull, 1390444666282184ull}}, {{9985259956823903116ull, 2224711466051495ull}}, {{7988207965459122492ull, 1779769172841196ull}}, {{2701217557625387668ull, 1423815338272957ull}}, {{13229020490326041104ull, 1139052270618365ull}}, {{2719688710812114152ull, 1822483632989385ull}}, {{2175750968649691324ull, 1457986906391508ull}}, {{9119298404403573704ull, 1166389525113206ull}}, {{7212179817561897280ull, 1866223240181130ull}}, {{5769743854049517824ull, 1492978592144904ull}}, {{8305143897981524584ull, 1194382873715923ull}}, {{9598881422028529008ull, 1911012597945477ull}}, {{300407508139002560ull, 1528810078356382ull}}, {{11308372450736933016ull, 1223048062685105ull}}, {{18093395921179092828ull, 1956876900296168ull}}, {{3406670292717543292ull, 1565501520236935ull}}, {{2725336234174034636ull, 1252401216189548ull}}, {{671189159936545092ull, 2003841945903277ull}}, {{11604997772174967044ull, 1603073556722621ull}}, {{5594649402998063312ull, 1282458845378097ull}}, {{12640787859538811624ull, 2051934152604955ull}}, {{10112630287631049296ull, 1641547322083964ull}}, {{11779453044846749760ull, 1313237857667171ull}}, {{11468427242270978972ull, 2101180572267474ull}}, {{12864090608558693500ull, 1680944457813979ull}}, {{13980621301588865124ull, 1344755566251183ull}}, {{232901194090722260ull, 2151608906001894ull}}, {{3875669770014488132ull, 1721287124801515ull}}, {{3100535816011590504ull, 1377029699841212ull}}, {{8650206120360455132ull, 2203247519745939ull}}, {{10609513711030274428ull, 1762598015796751ull}}, {{4798262154082309220ull, 1410078412637401ull}}, {{149260908523937052ull, 1128062730109921ull}}, {{11306863897864030252ull, 1804900368175873ull}}, {{16424188747775044848ull, 1443920294540698ull}}, {{2071304553994304908ull, 1155136235632559ull}}, {{10692784915874708500ull, 1848217977012094ull}}, {{12243576747441677124ull, 1478574381609675ull}}, {{9794861397953341700ull, 1182859505287740ull}}, {{15671778236725346720ull, 1892575208460384ull}}, {{16226771404122187696ull, 1514060166768307ull}}, {{5602719493813929512ull, 1211248133414646ull}}, {{1585653560618466572ull, 1937997013463434ull}}, {{4957871663236683580ull, 1550397610770747ull}}, {{15034343774815077836ull, 1240318088616597ull}}, {{9297554780736483244ull, 1984508941786556ull}}, {{3748695009847276272ull, 1587607153429245ull}}, {{2998956007877821016ull, 1270085722743396ull}}, {{15866376056830244596ull, 2032137156389433ull}}, {{1625054401238464708ull, 1625709725111547ull}}, {{12368089965216502736ull, 1300567780089237ull}}, {{5031548685378763084ull, 2080908448142780ull}}, {{4025238948303010468ull, 1664726758514224ull}}, {{6909539973384318696ull, 1331781406811379ull}}, {{18433961586898730564ull, 2130850250898206ull}}, {{11057820454777074128ull, 1704680200718565ull}}, {{8846256363821659300ull, 1363744160574852ull}}, {{17843358996856565204ull, 2181990656919763ull}}, {{3206640753259521196ull, 1745592525535811ull}}, {{17322707861575258248ull, 1396474020428648ull}}, {{5580239690068951260ull, 2234358432685838ull}}, {{11842889381538981652ull, 1787486746148670ull}}, {{9474311505231185320ull, 1429989396918936ull}}, {{3890100389443037932ull, 1143991517535149ull}}, {{13602858252592681340ull, 1830386428056238ull}}, {{18260984231557965720ull, 1464309142444990ull}}, {{14608787385246372576ull, 1171447313955992ull}}, {{8616664557426554828ull, 1874315702329588ull}}, {{14272029275425064508ull, 1499452561863670ull}}, {{11417623420340051608ull, 1199562049490936ull}}, {{10889499843060261924ull, 1919299279185498ull}}, {{16090297503932030188ull, 1535439423348398ull}}, {{1804191558919893180ull, 1228351538678719ull}}, {{10265404123755649736ull, 1965362461885950ull}}, {{8212323299004519788ull, 1572289969508760ull}}, {{6569858639203615828ull, 1257831975607008ull}}, {{6822425007983875004ull, 2012531160971213ull}}, {{12836637635870920648ull, 1610024928776970ull}}, {{10269310108696736520ull, 1288019943021576ull}}, {{9052198544430957784ull, 2060831908834522ull}}, {{18309805279770497196ull, 1648665527067617ull}}, {{7269146594332577112ull, 1318932421654094ull}}, {{562588106706392412ull, 2110291874646551ull}}, {{15207465744332755220ull, 1688233499717240ull}}, {{12165972595466204176ull, 1350586799773792ull}}, {{4708160893778285388ull, 2160938879638068ull}}, {{11145226344506448956ull, 1728751103710454ull}}, {{12605529890347069488ull, 1383000882968363ull}}, {{16479499009813400860ull, 2212801412749381ull}}, {{9494250393108810364ull, 1770241130199505ull}}, {{7595400314487048292ull, 1416192904159604ull}}, {{9765669066331548956ull, 1132954323327683ull}}, {{11935721691388568008ull, 1812726917324293ull}}, {{16927274982594675052ull, 1450181533859434ull}}, {{17231168800817650364ull, 1160145227087547ull}}, {{12812474822340599292ull, 1856232363340076ull}}, {{6560631043130569108ull, 1484985890672061ull}}, {{1559156019762544964ull, 1187988712537649ull}}, {{9873347261103892592ull, 1900781940060238ull}}, {{15277375438366934720ull, 1520625552048190ull}}, {{12221900350693547776ull, 1216500441638552ull}}, {{4797645302142035148ull, 1946400706621684ull}}, {{7527465056455538440ull, 1557120565297347ull}}, {{17090018489390161720ull, 1245696452237877ull}}, {{12586634324056617464ull, 1993114323580604ull}}, {{13758656273987204292ull, 1594491458864483ull}}, {{18385622648673584080ull, 1275593167091586ull}}, {{3591554534684362268ull, 2040949067346539ull}}, {{6562592442489400136ull, 1632759253877231ull}}, {{1560725139249609784ull, 1306207403101785ull}}, {{2497160222799375660ull, 2089931844962856ull}}, {{16755123437207141820ull, 1671945475970284ull}}, {{17093447564507623780ull, 1337556380776227ull}}, {{12592120844244556752ull, 2140090209241964ull}}, {{13763045490137555724ull, 1712072167393571ull}}, {{7321087577368134256ull, 1369657733914857ull}}, {{15403088938530925136ull, 2191452374263771ull}}, {{8633122336082829784ull, 1753161899411017ull}}, {{17974544313091994796ull, 1402529519528813ull}}, {{6623178012495729736ull, 2244047231246102ull}}, {{16366588854222314760ull, 1795237784996881ull}}, {{9403922268635941484ull, 1436190227997505ull}}, {{7523137814908753188ull, 1148952182398004ull}}, {{968974059628274128ull, 1838323491836807ull}}, {{11843225691928350272ull, 1470658793469445ull}}, {{9474580553542680220ull, 1176527034775556ull}}, {{7780631256184467704ull, 1882443255640890ull}}, {{6224505004947574164ull, 1505954604512712ull}}, {{16047650448183790300ull, 1204763683610169ull}}, {{14608194272868333512ull, 1927621893776271ull}}, {{7997206603552756484ull, 1542097515021017ull}}, {{17465811727067936156ull, 1233678012016813ull}}, {{5809205874857235912ull, 1973884819226902ull}}, {{15715411144111519700ull, 1579107855381521ull}}, {{8882980100547305436ull, 1263286284305217ull}}, {{17902116975617599024ull, 2021258054888347ull}}, {{6942995951010258572ull, 1617006443910678ull}}, {{12933094390292027504ull, 1293605155128542ull}}, {{5935555765499602712ull, 2069768248205668ull}}, {{12127142241883502816ull, 1655814598564534ull}}, {{13391062608248712576ull, 1324651678851627ull}}, {{6668304914230298828ull, 2119442686162604ull}}, {{9023992746126149388ull, 1695554148930083ull}}, {{14597891826384740156ull, 1356443319144066ull}}, {{15977929292731763604ull, 2170309310630506ull}}, {{9092994619443500560ull, 1736247448504405ull}}, {{7274395695554800448ull, 1388997958803524ull}}, {{570986668661949748ull, 2222396734085639ull}}, {{4146138149671470120ull, 1777917387268511ull}}, {{18074305778704817388ull, 1422333909814808ull}}, {{3391398178738122940ull, 1137867127851847ull}}, {{9115585900722907028ull, 1820587404562955ull}}, {{7292468720578325624ull, 1456469923650364ull}}, {{9523323791204570820ull, 1165175938920291ull}}, {{7858620436443492668ull, 1864281502272466ull}}, {{2597547534412883812ull, 1491425201817973ull}}, {{9456735657014127696ull, 1193140161454378ull}}, {{11441428236480693992ull, 1909024258327005ull}}, {{9153142589184555192ull, 1527219406661604ull}}, {{11011862886089554476ull, 1221775525329283ull}}, {{13929631803001376840ull, 1954840840526853ull}}, {{75658998175370504ull, 1563872672421483ull}}, {{7439224828024117048ull, 1251098137937186ull}}, {{4524062095354766632ull, 2001757020699498ull}}, {{10997947305767633952ull, 1601405616559598ull}}, {{16177055474097927808ull, 1281124493247678ull}}, {{3747195870105222552ull, 2049799189196286ull}}, {{17755151955051819336ull, 1639839351357028ull}}, {{3136075119815724496ull, 1311871481085623ull}}, {{1328371376963248876ull, 2098994369736997ull}}, {{12130743545796330068ull, 1679195495789597ull}}, {{2325897207153243408ull, 1343356396631678ull}}, {{32086716703279132ull, 2149370234610685ull}}, {{25669373362623304ull, 1719496187688548ull}}, {{7399233128173919288ull, 1375596950150838ull}}, {{8149424190336360540ull, 2200955120241341ull}}, {{2830190537527178108ull, 1760764096193073ull}}, {{9642850059505563132ull, 1408611276954458ull}}, {{15092977677088271152ull, 1126889021563566ull}}, {{16770066653857413200ull, 1803022434501706ull}}, {{9726704508344020236ull, 1442417947601365ull}}, {{7781363606675216188ull, 1153934358081092ull}}, {{16139530585422256224ull, 1846294972929747ull}}, {{5532926838853984332ull, 1477035978343798ull}}, {{11805039100567008112ull, 1181628782675038ull}}, {{15198713746165302660ull, 1890606052280061ull}}, {{8469622182190331804ull, 1512484841824049ull}}, {{10465046560494175764ull, 1209987873459239ull}}, {{5676028052564950256ull, 1935980597534783ull}}, {{11919520071535780852ull, 1548784478027826ull}}, {{5846267242486714356ull, 1239027582422261ull}}, {{1975329958494922328ull, 1982444131875618ull}}, {{8958961596279758508ull, 1585955305500494ull}}, {{10856518091765717128ull, 1268764244400395ull}}, {{17370428946825147408ull, 2030022791040632ull}}, {{6517645527976297280ull, 1624018232832506ull}}, {{1524767607639127500ull, 1299214586266005ull}}, {{2439628172222604000ull, 2078743338025608ull}}, {{9330400167261903848ull, 1662994670420486ull}}, {{3774971319067612752ull, 1330395736336389ull}}, {{13418651739992001052ull, 2128633178138222ull}}, {{3356223762509780196ull, 1702906542510578ull}}, {{10063676639491644804ull, 1362325234008462ull}}, {{1344487364218990392ull, 2179720374413540ull}}, {{1075589891375192312ull, 1743776299530832ull}}, {{11928518357325884820ull, 1395021039624665ull}}, {{638885298011864096ull, 2232033663399465ull}}, {{511108238409491276ull, 1785626930719572ull}}, {{11476933034953323992ull, 1428501544575657ull}}, {{1802848798478838548ull, 1142801235660526ull}}, {{13952604521791872644ull, 1828481977056841ull}}, {{7472734802691587792ull, 1462785581645473ull}}, {{13356885471637090880ull, 1170228465316378ull}}, {{17681667939877435084ull, 1872365544506205ull}}, {{14145334351901948068ull, 1497892435604964ull}}, {{15005616296263468776ull, 1198313948483971ull}}, {{16630288444537729400ull, 1917302317574354ull}}, {{16993579570372093840ull, 1533841854059483ull}}, {{2526817212071944104ull, 1227073483247587ull}}, {{7732256354057020888ull, 1963317573196139ull}}, {{9875153897987527036ull, 1570654058556911ull}}, {{4210774303648111304ull, 1256523246845529ull}}, {{14115936515320798732ull, 2010437194952846ull}}, {{7603400397514728664ull, 1608349755962277ull}}, {{17150766762237513900ull, 1286679804769821ull}}, {{1615785116386649980ull, 2058687687631715ull}}, {{1292628093109319984ull, 1646950150105372ull}}, {{12102148918713186956ull, 1317560120084297ull}}, {{4606043010973457836ull, 2108096192134876ull}}, {{18442229667746407560ull, 1686476953707900ull}}, {{14753783734197126048ull, 1349181562966320ull}}, {{5159309901005850064ull, 2158690500746113ull}}, {{11506145550288500696ull, 1726952400596890ull}}, {{9204916440230800556ull, 1381561920477512ull}}, {{18417215119111191216ull, 2210499072764019ull}}, {{18423120910030863296ull, 1768399258211215ull}}, {{14738496728024690636ull, 1414719406568972ull}}, {{4412099752935931864ull, 1131775525255178ull}}, {{3370010789955580656ull, 1810840840408285ull}}, {{2696008631964464524ull, 1448672672326628ull}}, {{9535504535055392268ull, 1158938137861302ull}}, {{499411997120986336ull, 1854301020578084ull}}, {{4088878412438699392ull, 1483440816462467ull}}, {{14339149174176690480ull, 1186752653169973ull}}, {{806545790231242832ull, 1898804245071958ull}}, {{8023934261668814912ull, 1519043396057566ull}}, {{2729798594593141604ull, 1215234716846053ull}}, {{678328936607116248ull, 1944375546953685ull}}, {{542663149285692996ull, 1555500437562948ull}}, {{7812828148912375044ull, 1244400350050358ull}}, {{8811176223517889748ull, 1991040560080573ull}}, {{14427638608298132444ull, 1592832448064458ull}}, {{474064442412774984ull, 1274265958451567ull}}, {{4447851922602350300ull, 2038825533522507ull}}, {{14626327982307611212ull, 1631060426818005ull}}, {{11701062385846088968ull, 1304848341454404ull}}, {{7653653373128011380ull, 2087757346327047ull}}, {{17190969142728140072ull, 1670205877061637ull}}, {{6374077684698691412ull, 1336164701649310ull}}, {{10198524295517906260ull, 2137863522638896ull}}, {{4469470621672414684ull, 1710290818111117ull}}, {{14643622941563662716ull, 1368232654488893ull}}, {{1293703818050398408ull, 2189172247182230ull}}, {{1034963054440318728ull, 1751337797745784ull}}, {{4517319258294165304ull, 1401070238196627ull}}, {{10917059628012574812ull, 2241712381114603ull}}, {{16112345331893880496ull, 1793369904891682ull}}, {{5511178636031283748ull, 1434695923913346ull}}, {{719594094083116676ull, 1147756739130677ull}}, {{4840699365274897004ull, 1836410782609083ull}}, {{11251257121703738252ull, 1469128626087266ull}}, {{5311656882621080276ull, 1175302900869813ull}}, {{4809302197451818120ull, 1880484641391701ull}}, {{158092943219544172ull, 1504387713113361ull}}, {{14883869613543276632ull, 1203510170490688ull}}, {{1678098493217780672ull, 1925616272785102ull}}, {{12410525238799955508ull, 1540493018228081ull}}, {{6239071376298054080ull, 1232394414582465ull}}, {{9982514202076886532ull, 1971831063331944ull}}, {{11675360176403419548ull, 1577464850665555ull}}, {{9340288141122735640ull, 1261971880532444ull}}, {{3876414581570646052ull, 2019155008851911ull}}, {{17858526924224158136ull, 1615324007081528ull}}, {{3218775095153595536ull, 1292259205665223ull}}, {{1460691337503842540ull, 2067614729064357ull}}, {{12236599514228805000ull, 1654091783251485ull}}, {{9789279611383044000ull, 1323273426601188ull}}, {{11973498563470960076ull, 2117237482561901ull}}, {{5889450036034857740ull, 1693789986049521ull}}, {{1022211214085975868ull, 1355031988839617ull}}, {{5324886757279471712ull, 2168051182143387ull}}, {{15327955850049308340ull, 1734440945714709ull}}, {{15951713494781356992ull, 1387552756571767ull}}, {{10765346332682529896ull, 2220084410514828ull}}, {{15990974695629844564ull, 1776067528411862ull}}, {{5414082127020055004ull, 1420854022729490ull}}, {{4331265701616044004ull, 1136683218183592ull}}, {{10619373937327580728ull, 1818693149093747ull}}, {{1116801520378243936ull, 1454954519274998ull}}, {{8272138845786415796ull, 1163963615419998ull}}, {{9546073338516354952ull, 1862341784671997ull}}, {{258161041329263312ull, 1489873427737598ull}}, {{7585226462547231296ull, 1191898742190078ull}}, {{8447013525333659752ull, 1907037987504125ull}}, {{6757610820266927804ull, 1525630390003300ull}}, {{5406088656213542240ull, 1220504312002640ull}}, {{8649741849941667588ull, 1952806899204224ull}}, {{10609142294695244392ull, 1562245519363379ull}}, {{12176662650498105836ull, 1249796415490703ull}}, {{15793311426055059016ull, 1999674264785125ull}}, {{12634649140844047212ull, 1599739411828100ull}}, {{10107719312675237772ull, 1279791529462480ull}}, {{16172350900280380432ull, 2047666447139968ull}}, {{1869834275998573376ull, 1638133157711975ull}}, {{1495867420798858700ull, 1310506526169580ull}}, {{2393387873278173924ull, 2096810441871328ull}}, {{9293407928106359784ull, 1677448353497062ull}}, {{56028713001267180ull, 1341958682797650ull}}, {{89645940802027492ull, 2147133892476240ull}}, {{71716752641621992ull, 1717707113980992ull}}, {{11125419846339028564ull, 1374165691184793ull}}, {{14111322939400535380ull, 2198665105895669ull}}, {{14978407166262338624ull, 1758932084716535ull}}, {{11982725733009870900ull, 1407145667773228ull}}, {{15483012358073883120ull, 2251433068437165ull}}, {{12386409886459106496ull, 1801146454749732ull}}, {{2530430279683464548ull, 1440917163799786ull}}, {{16781739482714412932ull, 1152733731039828ull}}, {{4714690283891598752ull, 1844373969663726ull}}, {{82403412371368676ull, 1475499175730981ull}}, {{14823317988864736236ull, 1180399340584784ull}}, {{12649262337957847008ull, 1888638944935655ull}}, {{10119409870366277604ull, 1510911155948524ull}}, {{11784876711034932408ull, 1208728924758819ull}}, {{7787756293430160884ull, 1933966279614111ull}}, {{2540856220002218384ull, 1547173023691289ull}}, {{5722033790743685028ull, 1237738418953031ull}}, {{1776556435706075400ull, 1980381470324850ull}}, {{1421245148564860320ull, 1584305176259880ull}}, {{1136996118851888256ull, 1267444141007904ull}}, {{9197891419646841856ull, 2027910625612646ull}}, {{3668964320975563164ull, 1622328500490117ull}}, {{14003217901006181500ull, 1297862800392093ull}}, {{269055753158428460ull, 2076580480627350ull}}, {{215244602526742768ull, 1661264384501880ull}}, {{172195682021394212ull, 1329011507601504ull}}, {{7654210720718051388ull, 2126418412162406ull}}, {{2434019761832530788ull, 1701134729729925ull}}, {{1947215809466024632ull, 1360907783783940ull}}, {{3115545295145639408ull, 2177452454054304ull}}, {{6181785050858421852ull, 1741961963243443ull}}, {{12324125670170558128ull, 1393569570594754ull}}, {{8650554628047162032ull, 2229711312951607ull}}, {{17988490146663460596ull, 1783769050361285ull}}, {{14390792117330768476ull, 1427015240289028ull}}, {{444587249638883812ull, 1141612192231223ull}}, {{15468734858389855392ull, 1826579507569956ull}}, {{8685639071969973992ull, 1461263606055965ull}}, {{6948511257575979192ull, 1169010884844772ull}}, {{14806966826863477032ull, 1870417415751635ull}}, {{11845573461490781624ull, 1496333932601308ull}}, {{16855156398676445944ull, 1197067146081046ull}}, {{1142808534688941252ull, 1915307433729675ull}}, {{914246827751153000ull, 1532245946983740ull}}, {{731397462200922400ull, 1225796757586992ull}}, {{4859584754263386164ull, 1961274812139187ull}}, {{14955714247636439900ull, 1569019849711349ull}}, {{15653920212851062244ull, 1255215879769079ull}}, {{13978225896335968620ull, 2008345407630527ull}}, {{3803883087584954252ull, 1606676326104422ull}}, {{14111152914293694368ull, 1285341060883537ull}}, {{7820449403902269700ull, 2056545697413660ull}}, {{6256359523121815760ull, 1645236557930928ull}}, {{12383785247981273252ull, 1316189246344742ull}}, {{5056661137802395912ull, 2105902794151588ull}}, {{11424026539725737376ull, 1684722235321270ull}}, {{9139221231780589900ull, 1347777788257016ull}}, {{7244056341365123196ull, 2156444461211226ull}}, {{2105896258350188232ull, 1725155568968981ull}}, {{16442112265647791880ull, 1380124455175184ull}}, {{15239333180810736040ull, 2208199128280295ull}}, {{12191466544648588832ull, 1766559302624236ull}}, {{6063824420976960740ull, 1413247442099389ull}}, {{8540408351523478916ull, 1130597953679511ull}}, {{6285955732953745620ull, 1808956725887218ull}}, {{12407462215846817140ull, 1447165380709774ull}}, {{13615318587419364036ull, 1157732304567819ull}}, {{10716463295645251488ull, 1852371687308511ull}}, {{4883821821774290868ull, 1481897349846809ull}}, {{7596406272161343016ull, 1185517879877447ull}}, {{15843598850200059152ull, 1896828607803915ull}}, {{12674879080160047320ull, 1517462886243132ull}}, {{2761205634644217212ull, 1213970308994506ull}}, {{15485975459656478508ull, 1942352494391209ull}}, {{16078129182467093128ull, 1553881995512967ull}}, {{5483805716489853856ull, 1243105596410374ull}}, {{16152786775867586816ull, 1988968954256598ull}}, {{1854182976468338484ull, 1591175163405279ull}}, {{5172695195916581108ull, 1272940130724223ull}}, {{4586963498724619452ull, 2036704209158757ull}}, {{14737617243205426532ull, 1629363367327005ull}}, {{11790093794564341224ull, 1303490693861604ull}}, {{7796103627077214992ull, 2085585110178567ull}}, {{17304929345887502964ull, 1668468088142853ull}}, {{2775897032484271400ull, 1334774470514283ull}}, {{752086437232923920ull, 2135639152822853ull}}, {{7980366779270159780ull, 1708511322258282ull}}, {{17452339867641858792ull, 1366809057806625ull}}, {{9476999714517422456ull, 2186894492490601ull}}, {{3892250956872027640ull, 1749515593992481ull}}, {{17871196024465263404ull, 1399612475193984ull}}, {{17525867194918690480ull, 2239379960310375ull}}, {{14020693755934952384ull, 1791503968248300ull}}, {{11216555004747961908ull, 1433203174598640ull}}, {{8973244003798369524ull, 1146562539678912ull}}, {{18046539220819301564ull, 1834500063486259ull}}, {{18126580191397351572ull, 1467600050789007ull}}, {{7122566523634060612ull, 1174080040631206ull}}, {{4017408808330676336ull, 1878528065009930ull}}, {{3213927046664541068ull, 1502822452007944ull}}, {{6260490452073543176ull, 1202257961606355ull}}, {{10016784723317669084ull, 1923612738570168ull}}, {{15392125408137955912ull, 1538890190856134ull}}, {{16003049141252275052ull, 1231112152684907ull}}, {{10847483367035998792ull, 1969779444295852ull}}, {{1299289064144978388ull, 1575823555436682ull}}, {{12107477695541713680ull, 1260658844349345ull}}, {{925220239157190272ull, 2017054150958953ull}}, {{8118873820809572864ull, 1613643320767162ull}}, {{17563145500873389260ull, 1290914656613729ull}}, {{17032986357171691848ull, 2065463450581967ull}}, {{6247691456253532832ull, 1652370760465574ull}}, {{8687501979744736588ull, 1321896608372459ull}}, {{2831956723365847572ull, 2115034573395935ull}}, {{2265565378692678056ull, 1692027658716748ull}}, {{9191149932437963092ull, 1353622126973398ull}}, {{11016491077158830624ull, 2165795403157437ull}}, {{1434495232243243852ull, 1732636322525950ull}}, {{1147596185794595084ull, 1386109058020760ull}}, {{1836153897271352132ull, 2217774492833216ull}}, {{16226318376784723000ull, 1774219594266572ull}}, {{5602357071943957752ull, 1419375675413258ull}}, {{11860583287038986848ull, 1135500540330606ull}}, {{11598235629778558312ull, 1816800864528970ull}}, {{9278588503822846648ull, 1453440691623176ull}}, {{3733521988316366996ull, 1162752553298541ull}}, {{17041681625531918164ull, 1860404085277665ull}}, {{13633345300425534532ull, 1488323268222132ull}}, {{3527978610856606976ull, 1190658614577706ull}}, {{16712812221596302136ull, 1905053783324329ull}}, {{17059598592018952032ull, 1524043026659463ull}}, {{2579632429389430656ull, 1219234421327571ull}}, {{15195458331248820016ull, 1950775074124113ull}}, {{1088320220773325044ull, 1560620059299291ull}}, {{15628051435586301328ull, 1248496047439432ull}}, {{10247487037970440832ull, 1997593675903092ull}}, {{819292000892532020ull, 1598074940722474ull}}, {{4344782415455935940ull, 1278459952577979ull}}, {{14330349494213318148ull, 2045535924124766ull}}, {{7774930780628744196ull, 1636428739299813ull}}, {{13598642253986816004ull, 1309142991439850ull}}, {{3311083532669353988ull, 2094628786303761ull}}, {{17406262085103124484ull, 1675703029043008ull}}, {{2856963223856768616ull, 1340562423234407ull}}, {{8260489972912740112ull, 2144899877175051ull}}, {{2919043163588281764ull, 1715919901740041ull}}, {{17092629789838266704ull, 1372735921392032ull}}, {{12590812404773585436ull, 2196377474227252ull}}, {{2693952294335047704ull, 1757101979381802ull}}, {{13223208279693769132ull, 1405681583505441ull}}, {{13778435618026209964ull, 2249090533608706ull}}, {{7333399679679057648ull, 1799272426886965ull}}, {{5866719743743246116ull, 1439417941509572ull}}, {{15761422239220327864ull, 1151534353207657ull}}, {{10460880323784883292ull, 1842454965132252ull}}, {{990006629544085984ull, 1473963972105802ull}}, {{11860051747860999756ull, 1179171177684641ull}}, {{11597385167093778968ull, 1886673884295426ull}}, {{5588559318933112848ull, 1509339107436341ull}}, {{781498640404579956ull, 1207471285949073ull}}, {{16007793083614969224ull, 1931954057518516ull}}, {{9116885652150065056ull, 1545563246014813ull}}, {{14672206151203872692ull, 1236450596811850ull}}, {{5028785768216644688ull, 1978320954898961ull}}, {{333679799831405428ull, 1582656763919169ull}}, {{3956292654607034664ull, 1266125411135335ull}}, {{6330068247371255464ull, 2025800657816536ull}}, {{1374705783155094048ull, 1620640526253229ull}}, {{4789113441265985564ull, 1296512421002583ull}}, {{3973232691283666576ull, 2074419873604133ull}}, {{10557283782510753908ull, 1659535898883306ull}}, {{4756478211266692804ull, 1327628719106645ull}}, {{7610365138026708484ull, 2124205950570632ull}}, {{17156338554647097756ull, 1699364760456505ull}}, {{13725070843717678204ull, 1359491808365204ull}}, {{10892066905722554160ull, 2175186893384327ull}}, {{1334955895094222680ull, 1740149514707462ull}}, {{12136011160301109116ull, 1392119611765969ull}}, {{8349571412256043616ull, 2227391378825551ull}}, {{2990308315062924568ull, 1781913103060441ull}}, {{17149641911017980948ull, 1425530482448352ull}}, {{6341015899330564112ull, 1140424385958682ull}}, {{13834974253670812900ull, 1824679017533891ull}}, {{7378630588194739996ull, 1459743214027113ull}}, {{13281602100039612644ull, 1167794571221690ull}}, {{2803819286353828616ull, 1868471313954705ull}}, {{2243055429083062892ull, 1494777051163764ull}}, {{5483793158008360636ull, 1195821640931011ull}}, {{1395371423329556372ull, 1913314625489618ull}}, {{8494994768147465744ull, 1530651700391694ull}}, {{10485344629259882920ull, 1224521360313355ull}}, {{16776551406815812672ull, 1959234176501368ull}}, {{2353194681226919168ull, 1567387341201095ull}}, {{1882555744981535332ull, 1253909872960876ull}}, {{14080135636196187504ull, 2006255796737401ull}}, {{7574759694215039680ull, 1605004637389921ull}}, {{2370458940630121420ull, 1284003709911937ull}}, {{7482083119750104596ull, 2054405935859099ull}}, {{9675015310541994000ull, 1643524748687279ull}}, {{11429361063175505524ull, 1314819798949823ull}}, {{14597628886338898516ull, 2103711678319717ull}}, {{4299405479587298164ull, 1682969342655774ull}}, {{7128873198411748856ull, 1346375474124619ull}}, {{338150673233067200ull, 2154200758599391ull}}, {{15027915797554095052ull, 1723360606879512ull}}, {{4643635008559455396ull, 1378688485503610ull}}, {{7429816013695128632ull, 2205901576805776ull}}, {{2254503996214192584ull, 1764721261444621ull}}, {{16560998455938995360ull, 1411777009155696ull}}, {{9559449950009285964ull, 1129421607324557ull}}, {{537724661047216248ull, 1807074571719292ull}}, {{11498226173063503968ull, 1445659657375433ull}}, {{16577278567934623820ull, 1156527725900346ull}}, {{698204005502025852ull, 1850444361440555ull}}, {{558563204401620680ull, 1480355489152444ull}}, {{4136199378263206868ull, 1184284391321955ull}}, {{6617919005221130988ull, 1894855026115128ull}}, {{12673032833660725436ull, 1515884020892102ull}}, {{2759728637444759704ull, 1212707216713682ull}}, {{8104914634653525848ull, 1940331546741891ull}}, {{2794582892980910356ull, 1552265237393513ull}}, {{9614363943868548932ull, 1241812189914810ull}}, {{15382982310189678292ull, 1986899503863696ull}}, {{8617037033409832308ull, 1589519603090957ull}}, {{17961676070953596816ull, 1271615682472765ull}}, {{10291937639816203292ull, 2034585091956425ull}}, {{8233550111852962632ull, 1627668073565140ull}}, {{6586840089482370104ull, 1302134458852112ull}}, {{14228292957913702492ull, 2083415134163379ull}}, {{15071983181072872316ull, 1666732107330703ull}}, {{989540100632566884ull, 1333385685864563ull}}, {{16340659419979748308ull, 2133417097383300ull}}, {{13072527535983798648ull, 1706733677906640ull}}, {{10458022028787038916ull, 1365386942325312ull}}, {{1975439987091620976ull, 2184619107720500ull}}, {{1580351989673296780ull, 1747695286176400ull}}, {{1264281591738637424ull, 1398156228941120ull}}, {{2022850546781819880ull, 2237049966305792ull}}, {{12686326881651186872ull, 1789639973044633ull}}, {{17527759134804770144ull, 1431711978435706ull}}, {{10332858493101905792ull, 1145369582748565ull}}, {{16532573588963049268ull, 1832591332397704ull}}, {{16915407685912349736ull, 1466073065918163ull}}, {{2464279704504148820ull, 1172858452734531ull}}, {{15010893971432369080ull, 1876573524375249ull}}, {{15698063991887805588ull, 1501258819500199ull}}, {{16247800008252154792ull, 1201007055600159ull}}, {{14928433568977716700ull, 1921611288960255ull}}, {{11942746855182173360ull, 1537289031168204ull}}, {{13243546298887649012ull, 1229831224934563ull}}, {{17500325263478328096ull, 1967729959895301ull}}, {{10310911396040752152ull, 1574183967916241ull}}, {{4559380302090691400ull, 1259347174332993ull}}, {{3605659668603195916ull, 2014955478932789ull}}, {{6573876549624467056ull, 1611964383146231ull}}, {{1569752424957663320ull, 1289571506516985ull}}, {{2511603879932261316ull, 2063314410427176ull}}, {{16766678362913450344ull, 1650651528341740ull}}, {{13413342690330760276ull, 1320521222673392ull}}, {{6703953045561575148ull, 2112833956277428ull}}, {{12741860065933080764ull, 1690267165021942ull}}, {{2814790423262643964ull, 1352213732017554ull}}, {{11882362306704050992ull, 2163541971228086ull}}, {{5816541030621330468ull, 1730833576982469ull}}, {{8342581639238974700ull, 1384666861585975ull}}, {{13348130622782359520ull, 2215466978537560ull}}, {{10678504498225887616ull, 1772373582830048ull}}, {{15921501228064530736ull, 1417898866264038ull}}, {{1669154538225893620ull, 1134319093011231ull}}, {{13738693705387160764ull, 1814910548817969ull}}, {{14680303779051638932ull, 1451928439054375ull}}, {{11744243023241311148ull, 1161542751243500ull}}, {{344044763476546220ull, 1858468401989601ull}}, {{15032631069748878268ull, 1486774721591680ull}}, {{12026104855799102612ull, 1189419777273344ull}}, {{8173721325052833212ull, 1903071643637351ull}}, {{2849628245300356248ull, 1522457314909881ull}}, {{17037097855207926292ull, 1217965851927904ull}}, {{16191310124106951096ull, 1948745363084647ull}}, {{5574350469801740228ull, 1558996290467718ull}}, {{11838178005325212828ull, 1247197032374174ull}}, {{7873038364294609560ull, 1995515251798679ull}}, {{9987779506177597972ull, 1596412201438943ull}}, {{15368921234425899024ull, 1277129761151154ull}}, {{13522227530855707468ull, 2043407617841847ull}}, {{3439084395200745328ull, 1634726094273478ull}}, {{10129965145644416908ull, 1307780875418782ull}}, {{1450548974063425760ull, 2092449400670052ull}}, {{12228485623476471576ull, 1673959520536041ull}}, {{6093439684039266940ull, 1339167616428833ull}}, {{6060154679720916780ull, 2142668186286133ull}}, {{12226821373260554068ull, 1714134549028906ull}}, {{6092108283866532932ull, 1371307639223125ull}}, {{9747373254186452692ull, 2194092222757000ull}}, {{7797898603349162152ull, 1755273778205600ull}}, {{6238318882679329724ull, 1404219022564480ull}}, {{9981310212286927556ull, 2246750436103168ull}}, {{15363745799313362692ull, 1797400348882534ull}}, {{15980345454192600476ull, 1437920279106027ull}}, {{5405578733870259736ull, 1150336223284822ull}}, {{12338274788934325900ull, 1840537957255715ull}}, {{9870619831147460720ull, 1472430365804572ull}}, {{517798235434147928ull, 1177944292643658ull}}, {{15585872435662277980ull, 1884710868229852ull}}, {{5090000319046001736ull, 1507768694583882ull}}, {{15140046699462532360ull, 1206214955667105ull}}, {{5777330645430500160ull, 1929943929067369ull}}, {{8311213331086310452ull, 1543955143253895ull}}, {{6648970664869048360ull, 1235164114603116ull}}, {{3259655434306656732ull, 1976262583364986ull}}, {{17365119606412966676ull, 1581010066691988ull}}, {{2824049240904642372ull, 1264808053353591ull}}, {{15586525229673158764ull, 2023692885365745ull}}, {{12469220183738527012ull, 1618954308292596ull}}, {{6286027332248911284ull, 1295163446634077ull}}, {{13746992546340168380ull, 2072261514614523ull}}, {{18376291666555955352ull, 1657809211691618ull}}, {{3632986889019033312ull, 1326247369353295ull}}, {{5812779022430453300ull, 2121995790965272ull}}, {{15718269662170093608ull, 1697596632772217ull}}, {{5195918100252254240ull, 1358077306217774ull}}, {{15692166589887427432ull, 2172923689948438ull}}, {{1485686827684210976ull, 1738338951958751ull}}, {{15945944721115010072ull, 1390671161567000ull}}, {{7066767480074464500ull, 2225073858507201ull}}, {{1964065169317661276ull, 1780059086805761ull}}, {{16328647394421770312ull, 1424047269444608ull}}, {{1994871471311685280ull, 1139237815555687ull}}, {{6881143168840606776ull, 1822780504889099ull}}, {{9194263349814395744ull, 1458224403911279ull}}, {{11044759494593426916ull, 1166579523129023ull}}, {{13982266376607572744ull, 1866527237006437ull}}, {{3807115471802237548ull, 1493221789605150ull}}, {{3045692377441790040ull, 1194577431684120ull}}, {{4873107803906864064ull, 1911323890694592ull}}, {{14966532687351222220ull, 1529059112555673ull}}, {{905179705655246804ull, 1223247290044539ull}}, {{8826985158532215536ull, 1957195664071262ull}}, {{18129634571051503400ull, 1565756531257009ull}}, {{18193056471583113040ull, 1252605225005607ull}}, {{14351495095565339576ull, 2004168360008972ull}}, {{4102498446968451012ull, 1603334688007178ull}}, {{10660696387058581456ull, 1282667750405742ull}}, {{2299718960326089040ull, 2052268400649188ull}}, {{9218472797744691876ull, 1641814720519350ull}}, {{7374778238195753500ull, 1313451776415480ull}}, {{11799645181113205604ull, 2101522842264768ull}}, {{16818413774374385128ull, 1681218273811814ull}}, {{17144079834241418424ull, 1344974619049451ull}}, {{1605086031592897220ull, 2151959390479123ull}}, {{8662766454758138424ull, 1721567512383298ull}}, {{14308910793290331384ull, 1377254009906638ull}}, {{758164380813068276ull, 2203606415850622ull}}, {{11674577948876185588ull, 1762885132680497ull}}, {{1960964729617127824ull, 1410308106144398ull}}, {{8947469413177522908ull, 1128246484915518ull}}, {{10626602246342126328ull, 1805194375864829ull}}, {{12190630611815611384ull, 1444155500691863ull}}, {{17131202118936309752ull, 1155324400553490ull}}, {{8963179316588543992ull, 1848519040885585ull}}, {{7170543453270835192ull, 1478815232708468ull}}, {{13115132392100488800ull, 1183052186166774ull}}, {{9916165383135051112ull, 1892883497866839ull}}, {{11622281121249951212ull, 1514306798293471ull}}, {{5608476082258050648ull, 1211445438634777ull}}, {{12662910546354791360ull, 1938312701815643ull}}, {{17509026066567653732ull, 1550650161452514ull}}, {{17696569667996033308ull, 1240520129162011ull}}, {{2489069765600281032ull, 1984832206659219ull}}, {{5680604627222135148ull, 1587865765327375ull}}, {{4544483701777708120ull, 1270292612261900ull}}, {{7271173922844332992ull, 2032468179619040ull}}, {{5816939138275466392ull, 1625974543695232ull}}, {{15721597754846104084ull, 1300779634956185ull}}, {{6707812334044214920ull, 2081247415929897ull}}, {{16434296311461102904ull, 1664997932743917ull}}, {{5768739419685061676ull, 1331998346195134ull}}, {{16608680700979919332ull, 2131197353912214ull}}, {{16976293375525845788ull, 1704957883129771ull}}, {{9891685885678766308ull, 1363966306503817ull}}, {{1069302158118384800ull, 2182346090406108ull}}, {{8234139355978528484ull, 1745876872324886ull}}, {{2897962670040912464ull, 1396701497859909ull}}, {{12015437901549280592ull, 2234722396575854ull}}, {{13301699135981334796ull, 1787777917260683ull}}, {{18020056938268888480ull, 1430222333808546ull}}, {{10726696735873200460ull, 1144177867046837ull}}, {{2405319518429479448ull, 1830684587274940ull}}, {{1924255614743583556ull, 1464547669819952ull}}, {{12607450936020597816ull, 1171638135855961ull}}, {{12793223868149135860ull, 1874621017369538ull}}, {{17613276724003129332ull, 1499696813895630ull}}, {{14090621379202503468ull, 1199757451116504ull}}, {{11476947762498274576ull, 1919611921786407ull}}, {{1802860580514799016ull, 1535689537429126ull}}, {{16199683723379480504ull, 1228551629943300ull}}, {{7472749883697617192ull, 1965682607909281ull}}, {{2288851092216183432ull, 1572546086327425ull}}, {{1831080873772946744ull, 1258036869061940ull}}, {{2929729398036714792ull, 2012858990499104ull}}, {{6033132333171282156ull, 1610287192399283ull}}, {{12205203496020846372ull, 1288229753919426ull}}, {{12149627964149533548ull, 2061167606271082ull}}, {{2341004741835806192ull, 1648934085016866ull}}, {{16630199052436286244ull, 1319147268013492ull}}, {{11850923224930416700ull, 2110635628821588ull}}, {{16859436209428154008ull, 1688508503057270ull}}, {{13487548967542523204ull, 1350806802445816ull}}, {{14201380718584216484ull, 2161290883913306ull}}, {{7671755760125462864ull, 1729032707130645ull}}, {{6137404608100370292ull, 1383226165704516ull}}, {{2441149743476771820ull, 2213161865127226ull}}, {{16710315053749058748ull, 1770529492101780ull}}, {{13368252042999246996ull, 1416423593681424ull}}, {{14383950449141307920ull, 1133138874945139ull}}, {{11946274274400361704ull, 1813022199912223ull}}, {{16935717049004110012ull, 1450417759929778ull}}, {{2480527194977557040ull, 1160334207943823ull}}, {{279494697222180940ull, 1856534732710117ull}}, {{11291642202003475720ull, 1485227786168093ull}}, {{16412011391086601224ull, 1188182228934474ull}}, {{15191171781512830988ull, 1901091566295159ull}}, {{15842286239952175112ull, 1520873253036127ull}}, {{5295131362477919444ull, 1216698602428902ull}}, {{12161558994706581432ull, 1946717763886243ull}}, {{17107944825249085792ull, 1557374211108994ull}}, {{17375704674941178956ull, 1245899368887195ull}}, {{9354383406196334716ull, 1993438990219513ull}}, {{14862204354440888420ull, 1594751192175610ull}}, {{11889763483552710736ull, 1275800953740488ull}}, {{15334272758942426856ull, 2041281525984781ull}}, {{8578069392412031160ull, 1633025220787825ull}}, {{6862455513929624928ull, 1306420176630260ull}}, {{10979928822287399884ull, 2090272282608416ull}}, {{5094594243088009584ull, 1672217826086733ull}}, {{11454373023954228312ull, 1337774260869386ull}}, {{10948299208842944656ull, 2140438817391018ull}}, {{16137336996558176372ull, 1712351053912814ull}}, {{16599218411988451420ull, 1369880843130251ull}}, {{733307755988150012ull, 2191809349008403ull}}, {{7965343834274340656ull, 1753447479206722ull}}, {{17440321511645203492ull, 1402757983365377ull}}, {{13147119159664684296ull, 2244412773384604ull}}, {{14207044142473657760ull, 1795530218707683ull}}, {{297588869753195240ull, 1436424174966147ull}}, {{11306117540028287160ull, 1149139339972917ull}}, {{3332392805077618164ull, 1838622943956668ull}}, {{10044611873545915176ull, 1470898355165334ull}}, {{11725038313578642464ull, 1176718684132267ull}}, {{4002666042758186652ull, 1882749894611628ull}}, {{10580830463690369968ull, 1506199915689302ull}}, {{1085966741468475328ull, 1204959932551442ull}}, {{5426895601091470848ull, 1927935892082307ull}}, {{15409562925098907648ull, 1542348713665845ull}}, {{12327650340079126116ull, 1233878970932676ull}}, {{12345542914642781144ull, 1974206353492282ull}}, {{2497736702230404268ull, 1579365082793826ull}}, {{16755584620751964708ull, 1263492066235060ull}}, {{8362191319493591916ull, 2021587305976097ull}}, {{17757799499820604500ull, 1617269844780877ull}}, {{6827541970372662956ull, 1293815875824702ull}}, {{14613415967338171052ull, 2070105401319523ull}}, {{622686329644805872ull, 1656084321055619ull}}, {{4187497878457755020ull, 1324867456844495ull}}, {{6699996605532408032ull, 2119787930951192ull}}, {{16428043728651657396ull, 1695830344760953ull}}, {{2074388538695594948ull, 1356664275808763ull}}, {{18076416920880593208ull, 2170662841294020ull}}, {{14461133536704474564ull, 1736530273035216ull}}, {{7879558014621669328ull, 1389224218428173ull}}, {{8917944008652760604ull, 2222758749485077ull}}, {{18202401651147939452ull, 1778206999588061ull}}, {{10872572506176441240ull, 1422565599670449ull}}, {{12387406819683063312ull, 1138052479736359ull}}, {{8751804467267170332ull, 1820883967578175ull}}, {{7001443573813736268ull, 1456707174062540ull}}, {{5601154859050989012ull, 1165365739250032ull}}, {{12651196589223492744ull, 1864585182800051ull}}, {{6431608456636883872ull, 1491668146240041ull}}, {{1455937950567596776ull, 1193334516992033ull}}, {{17086895979875796132ull, 1909335227187252ull}}, {{6290819154416816260ull, 1527468181749802ull}}, {{16100701767759183976ull, 1221974545399841ull}}, {{18382425198930873716ull, 1955159272639746ull}}, {{11016591344402788652ull, 1564127418111797ull}}, {{1434575446038410272ull, 1251301934489438ull}}, {{17052715972629097732ull, 2002083095183100ull}}, {{13642172778103278184ull, 1601666476146480ull}}, {{10913738222482622548ull, 1281333180917184ull}}, {{6393934711746465108ull, 2050133089467495ull}}, {{5115147769397172084ull, 1640106471573996ull}}, {{402769400775827344ull, 1312085177259197ull}}, {{4333779855983234076ull, 2099336283614715ull}}, {{3467023884786587260ull, 1679469026891772ull}}, {{13841665552055000776ull, 1343575221513417ull}}, {{7389269624320359952ull, 2149720354421468ull}}, {{13290113328940108608ull, 1719776283537174ull}}, {{14321439477893997208ull, 1375821026829739ull}}, {{11846256720404664568ull, 2201313642927583ull}}, {{16855703005807552300ull, 1761050914342066ull}}, {{9795213589904131516ull, 1408840731473653ull}}, {{15214868501407125860ull, 1127072585178922ull}}, {{9586394343283760084ull, 1803316136286276ull}}, {{3979766659885097744ull, 1442652909029021ull}}, {{17941208586875719488ull, 1154122327223216ull}}, {{2880492035807778916ull, 1846595723557147ull}}, {{13372440072871954104ull, 1477276578845717ull}}, {{3319254428813742636ull, 1181821263076574ull}}, {{12689504715585808864ull, 1890914020922518ull}}, {{17530301401952467736ull, 1512731216738014ull}}, {{17713589936303884512ull, 1210184973390411ull}}, {{2516302194892842960ull, 1936295957424659ull}}, {{5702390570656184688ull, 1549036765939727ull}}, {{15629958900750678720ull, 1239229412751781ull}}, {{17629236611717265308ull, 1982767060402850ull}}, {{14103389289373812248ull, 1586213648322280ull}}, {{11282711431499049796ull, 1268970918657824ull}}, {{6984291846172748708ull, 2030353469852519ull}}, {{9276782291680109288ull, 1624282775882015ull}}, {{7421425833344087432ull, 1299426220705612ull}}, {{15563630148092450212ull, 2079081953128979ull}}, {{16140252933215870492ull, 1663265562503183ull}}, {{1844155902346965424ull, 1330612450002547ull}}, {{6639998258497055004ull, 2128979920004075ull}}, {{5311998606797644004ull, 1703183936003260ull}}, {{4249598885438115200ull, 1362547148802608ull}}, {{3110009401959074000ull, 2180075438084173ull}}, {{9866705151051079848ull, 1744060350467338ull}}, {{15272061750324684524ull, 1395248280373870ull}}, {{5988554726809943620ull, 2232397248598193ull}}, {{12169541410931775544ull, 1785917798878554ull}}, {{13424981943487330756ull, 1428734239102843ull}}, {{18118683184273685252ull, 1142987391282274ull}}, {{17921846650612165436ull, 1828779826051639ull}}, {{18026826135231642672ull, 1463023860841311ull}}, {{10732112093443403812ull, 1170419088673049ull}}, {{6103332905283715132ull, 1872670541876879ull}}, {{8572015138968882428ull, 1498136433501503ull}}, {{14236309740658926588ull, 1198509146801202ull}}, {{8020700326086641252ull, 1917614634881924ull}}, {{10105909075611223324ull, 1534091707905539ull}}, {{11774076075230888980ull, 1227273366324431ull}}, {{11459824090885601724ull, 1963637386119090ull}}, {{9167859272708481380ull, 1570909908895272ull}}, {{18402333862392516072ull, 1256727927116217ull}}, {{14686338920860384424ull, 2010764683385948ull}}, {{681024692462576572ull, 1608611746708759ull}}, {{4234168568711971580ull, 1286889397367007ull}}, {{10464018524681064852ull, 2059023035787211ull}}, {{4681866005002941556ull, 1647218428629769ull}}, {{7434841618744263568ull, 1317774742903815ull}}, {{11895746589990821712ull, 2108439588646104ull}}, {{13205946086734567692ull, 1686751670916883ull}}, {{17943454498871474800ull, 1349401336733506ull}}, {{2884085495000987416ull, 2159042138773611ull}}, {{17064663654968431228ull, 1727233711018888ull}}, {{2583684479749014012ull, 1381786968815111ull}}, {{15201941611824153388ull, 2210859150104177ull}}, {{4782855659975502064ull, 1768687320083342ull}}, {{14894330972206132620ull, 1414949856066673ull}}, {{847418333539175128ull, 1131959884853339ull}}, {{8734566963146500848ull, 1811135815765342ull}}, {{18055700014742931648ull, 1448908652612273ull}}, {{3376513567568614348ull, 1159126922089819ull}}, {{12781119337593603608ull, 1854603075343710ull}}, {{10224895470074882884ull, 1483682460274968ull}}, {{15558614005543726952ull, 1186945968219974ull}}, {{13825735964644232156ull, 1899113549151959ull}}, {{14749937586457296048ull, 1519290839321567ull}}, {{4421252439682016192ull, 1215432671457254ull}}, {{14452701532975046556ull, 1944692274331606ull}}, {{7872812411638126920ull, 1555753819465285ull}}, {{6298249929310501536ull, 1244603055572228ull}}, {{6387851072154892136ull, 1991364888915565ull}}, {{5110280857723913708ull, 1593091911132452ull}}, {{15156271130404861936ull, 1274473528905961ull}}, {{16871336179163958452ull, 2039157646249538ull}}, {{2429022499105435792ull, 1631326116999631ull}}, {{16700613258251989924ull, 1305060893599704ull}}, {{15652934768977452912ull, 2088097429759527ull}}, {{5143650185698141684ull, 1670477943807622ull}}, {{15182966592784244316ull, 1336382355046097ull}}, {{9535351289487149612ull, 2138211768073756ull}}, {{3938932216847809368ull, 1710569414459005ull}}, {{3151145773478247492ull, 1368455531567204ull}}, {{12420530867049016636ull, 2189528850507526ull}}, {{6247075878897302984ull, 1751623080406021ull}}, {{1308311888375932064ull, 1401298464324817ull}}, {{5782647836143401628ull, 2242077542919707ull}}, {{15694164713140452272ull, 1793662034335765ull}}, {{12555331770512361816ull, 1434929627468612ull}}, {{2665567786926068808ull, 1147943701974890ull}}, {{4264908459081710092ull, 1836709923159824ull}}, {{7101275582007278396ull, 1469367938527859ull}}, {{9370369280347733040ull, 1175494350822287ull}}, {{235195589588731572ull, 1880790961315660ull}}, {{188156471670985256ull, 1504632769052528ull}}, {{7529222806820608852ull, 1203706215242022ull}}, {{15736105305654884488ull, 1925929944387235ull}}, {{12588884244523907588ull, 1540743955509788ull}}, {{17449805025102946716ull, 1232595164407830ull}}, {{9472943966455163132ull, 1972152263052529ull}}, {{11267703987906040828ull, 1577721810442023ull}}, {{16392860819808653308ull, 1262177448353618ull}}, {{4092484423242383356ull, 2019483917365790ull}}, {{3273987538593906684ull, 1615587133892632ull}}, {{13687236475100856316ull, 1292469707114105ull}}, {{3452834286451818492ull, 2067951531382569ull}}, {{6451616243903365116ull, 1654361225106055ull}}, {{5161292995122692092ull, 1323488980084844ull}}, {{15636766421680127996ull, 2117582368135750ull}}, {{12509413137344102396ull, 1694065894508600ull}}, {{10007530509875281916ull, 1355252715606880ull}}, {{16012048815800451068ull, 2168404344971008ull}}, {{1741592608414629884ull, 1734723475976807ull}}, {{12461320530957434876ull, 1387778780781445ull}}, {{1491368775822344188ull, 2220446049250313ull}}, {{8571792650141695996ull, 1776356839400250ull}}, {{6857434120113356796ull, 1421085471520200ull}}, {{5485947296090685436ull, 1136868377216160ull}}, {{8777515673745096700ull, 1818989403545856ull}}, {{3332663724254167036ull, 1455191522836685ull}}, {{2666130979403333628ull, 1164153218269348ull}}, {{576460752303423484ull, 1862645149230957ull}}, {{11529215046068469756ull, 1490116119384765ull}}, {{9223372036854775804ull, 1192092895507812ull}}, {{18446744073709551612ull, 1907348632812499ull}}, {{18446744073709551612ull, 1525878906249999ull}}, {{18446744073709551612ull, 1220703124999999ull}}, {{18446744073709551612ull, 1953124999999999ull}}, {{18446744073709551612ull, 1562499999999999ull}}, {{18446744073709551612ull, 1249999999999999ull}}, {{18446744073709551612ull, 1999999999999999ull}}, {{18446744073709551612ull, 1599999999999999ull}}, {{18446744073709551612ull, 1279999999999999ull}}, {{18446744073709551612ull, 2047999999999999ull}}, {{18446744073709551612ull, 1638399999999999ull}}, {{18446744073709551612ull, 1310719999999999ull}}, {{18446744073709551612ull, 2097151999999999ull}}, {{18446744073709551612ull, 1677721599999999ull}}, {{18446744073709551612ull, 1342177279999999ull}}, {{18446744073709551612ull, 2147483647999999ull}}, {{18446744073709551612ull, 1717986918399999ull}}, {{18446744073709551612ull, 1374389534719999ull}}, {{18446744073709551612ull, 2199023255551999ull}}, {{18446744073709551612ull, 1759218604441599ull}}, {{18446744073709551612ull, 1407374883553279ull}}, {{18446744073709551612ull, 1125899906842623ull}}, {{7378697629483820644ull, 1801439850948198ull}}, {{13281655733070877160ull, 1441151880758558ull}}, {{18004022215940522376ull, 1152921504606846ull}}, {{2980993842311463540ull, 1844674407370955ull}}, {{2384795073849170832ull, 1475739525896764ull}}, {{5597184873821246988ull, 1180591620717411ull}}, {{1576798168630174536ull, 1888946593147858ull}}, {{8640136164387960272ull, 1511157274518286ull}}, {{3222760116768457896ull, 1208925819614629ull}}, {{12535113816313353280ull, 1934281311383406ull}}, {{6338742238308772300ull, 1547425049106725ull}}, {{5070993790647017840ull, 1237940039285380ull}}, {{8113590065035228544ull, 1980704062856608ull}}, {{13869569681512003484ull, 1584563250285286ull}}, {{7406306930467692464ull, 1267650600228229ull}}, {{782044644522576972ull, 2028240960365167ull}}, {{11693682159843792548ull, 1622592768292133ull}}, {{16733643357358854684ull, 1298074214633706ull}}, {{948387668580795232ull, 2076918743413931ull}}, {{15516105393832277476ull, 1661534994731144ull}}, {{16102233129807732304ull, 1329227995784915ull}}, {{7316828933982820072ull, 2126764793255865ull}}, {{5853463147186256060ull, 1701411834604692ull}}, {{15750816961974735816ull, 1361129467683753ull}}, {{3065214250708115368ull, 2177807148294006ull}}, {{17209566659534133588ull, 1742245718635204ull}}, {{17457002142369217192ull, 1393796574908163ull}}, {{5795110539339285568ull, 2230074519853062ull}}, {{15704134875697159424ull, 1784059615882449ull}}, {{16252656715299637864ull, 1427247692705959ull}}, {{16691474186981620612ull, 1141798154164767ull}}, {{11948963440202951688ull, 1826877046663628ull}}, {{16937868381646181996ull, 1461501637330902ull}}, {{6171597075833124952ull, 1169201309864722ull}}, {{13563904136074910244ull, 1870722095783555ull}}, {{10851123308859928196ull, 1496577676626844ull}}, {{12370247461829852880ull, 1197262141301475ull}}, {{1345651865218212992ull, 1915619426082361ull}}, {{15833916751142211688ull, 1532495540865888ull}}, {{1599086956688038380ull, 1225996432692711ull}}, {{13626585574926592376ull, 1961594292308337ull}}, {{3522570830457453256ull, 1569275433846670ull}}, {{2818056664365962604ull, 1255420347077336ull}}, {{15576937107211271136ull, 2008672555323737ull}}, {{5082852056285196264ull, 1606938044258990ull}}, {{4066281645028157008ull, 1285550435407192ull}}, {{10195399446786961540ull, 2056880696651507ull}}, {{777621927945748584ull, 1645504557321206ull}}, {{15379492801324240160ull, 1316403645856964ull}}, {{13539142037893053288ull, 2106245833371143ull}}, {{18210011259798263276ull, 1684996666696914ull}}, {{18257357822580520944ull, 1347997333357531ull}}, {{3386330812935461248ull, 2156795733372051ull}}, {{17466459909316010292ull, 1725436586697640ull}}, {{13973167927452808232ull, 1380349269358112ull}}, {{7599673424956851880ull, 2208558830972980ull}}, {{6079738739965481504ull, 1766847064778384ull}}, {{8553139806714295528ull, 1413477651822707ull}}, {{17910558289597167392ull, 1130782121458165ull}}, {{10210149189645916208ull, 1809251394333065ull}}, {{8168119351716732968ull, 1447401115466452ull}}, {{17602541925599117344ull, 1157920892373161ull}}, {{2338625377765215488ull, 1852673427797059ull}}, {{5560249116954082712ull, 1482138742237647ull}}, {{15516245737788997140ull, 1185710993790117ull}}, {{10068597921494754132ull, 1897137590064188ull}}, {{15433575966679623952ull, 1517710072051350ull}}, {{12346860773343699160ull, 1214168057641080ull}}, {{1308233163640367044ull, 1942668892225729ull}}, {{4735935345654203956ull, 1554135113780583ull}}, {{11167445906007183812ull, 1243308091024466ull}}, {{10489215820127673452ull, 1989292945639146ull}}, {{4702023841360228440ull, 1591434356511317ull}}, {{14829665517313913720ull, 1273147485209053ull}}, {{1591371939250800016ull, 2037035976334486ull}}, {{16030492810368281304ull, 1629628781067588ull}}, {{1756347804068894072ull, 1303703024854071ull}}, {{13878202930735961488ull, 2085924839766513ull}}, {{34515900363038220ull, 1668739871813211ull}}, {{14785007979258071868ull, 1334991897450568ull}}, {{1519919878361453052ull, 2135987035920910ull}}, {{1215935902689162440ull, 1708789628736728ull}}, {{8351446351635150600ull, 1367031702989382ull}}, {{17051662977358151284ull, 2187250724783011ull}}, {{9951981567144610704ull, 1749800579826409ull}}, {{11650934068457598884ull, 1399840463861127ull}}, {{3884099250564516924ull, 2239744742177804ull}}, {{6796628215193523860ull, 1791795793742243ull}}, {{12816000201638639736ull, 1433436634993794ull}}, {{13942148976052822112ull, 1146749307995035ull}}, {{3860694287974963764ull, 1834798892792057ull}}, {{14156601874605701980ull, 1467839114233645ull}}, {{11325281499684561584ull, 1174271291386916ull}}, {{10741752770011477888ull, 1878834066219066ull}}, {{4904053401267271988ull, 1503067252975253ull}}, {{11301940350497638236ull, 1202453802380202ull}}, {{3325709301828579884ull, 1923926083808324ull}}, {{6349916256204774232ull, 1539140867046659ull}}, {{8769281819705729708ull, 1231312693637327ull}}, {{17720199726271077856ull, 1970100309819723ull}}, {{3108113336791131316ull, 1576080247855779ull}}, {{6175839484174815376ull, 1260864198284623ull}}, {{6191994359937794280ull, 2017382717255397ull}}, {{16021641932175966392ull, 1613906173804317ull}}, {{5438615916256952468ull, 1291124939043454ull}}, {{16080483095494944596ull, 2065799902469526ull}}, {{9175037661654045352ull, 1652639921975621ull}}, {{3650681314581325956ull, 1322111937580497ull}}, {{9530438918072031856ull, 2115379100128795ull}}, {{7624351134457625484ull, 1692303280103036ull}}, {{2410132092824190064ull, 1353842624082429ull}}, {{11234908978002524752ull, 2166148198531886ull}}, {{5298578367660109476ull, 1732918558825509ull}}, {{7928211508869997904ull, 1386334847060407ull}}, {{16374487228933906972ull, 2218135755296651ull}}, {{9410240968405215252ull, 1774508604237321ull}}, {{3838843959982261880ull, 1419606883389857ull}}, {{14139121612211540472ull, 1135685506711885ull}}, {{4175850505828913140ull, 1817096810739017ull}}, {{14408726848888861484ull, 1453677448591213ull}}, {{458935034885358216ull, 1162941958872971ull}}, {{11802342500042304116ull, 1860707134196753ull}}, {{16820571629517663940ull, 1488565707357402ull}}, {{6077759674130310504ull, 1190852565885922ull}}, {{13413764293350407132ull, 1905364105417475ull}}, {{10731011434680325704ull, 1524291284333980ull}}, {{8584809147744260564ull, 1219433027467184ull}}, {{2667648192165085932ull, 1951092843947495ull}}, {{2134118553732068744ull, 1560874275157996ull}}, {{16464690101953296288ull, 1248699420126396ull}}, {{518062459931901800ull, 1997919072202235ull}}, {{414449967945521440ull, 1598335257761788ull}}, {{7710257603840237800ull, 1278668206209430ull}}, {{12336412166144380480ull, 2045869129935088ull}}, {{17247827362399325028ull, 1636695303948070ull}}, {{13798261889919460024ull, 1309356243158456ull}}, {{14698521394387315392ull, 2094969989053530ull}}, {{11758817115509852312ull, 1675975991242824ull}}, {{13096402507149792172ull, 1340780792994259ull}}, {{9886197567213936508ull, 2145249268790815ull}}, {{7908958053771149208ull, 1716199415032652ull}}, {{17395212887242650336ull, 1372959532026121ull}}, {{2006898916394868272ull, 2196735251241795ull}}, {{1605519133115894620ull, 1757388200993436ull}}, {{16041810565460356988ull, 1405910560794748ull}}, {{3530804016285109240ull, 2249456897271598ull}}, {{10203340842511908040ull, 1799565517817278ull}}, {{15541370303493347076ull, 1439652414253822ull}}, {{5054398613310857016ull, 1151721931403058ull}}, {{4397688966555460904ull, 1842755090244893ull}}, {{10896848802728189368ull, 1474204072195914ull}}, {{12406827856924461816ull, 1179363257756731ull}}, {{12472226941595318260ull, 1886981212410770ull}}, {{9977781553276254608ull, 1509584969928616ull}}, {{4292876427879093364ull, 1207667975942893ull}}, {{3179253469864639060ull, 1932268761508629ull}}, {{6232751590633621572ull, 1545815009206903ull}}, {{12364898901990717904ull, 1236652007365522ull}}, {{5026442984217507352ull, 1978643211784836ull}}, {{331805572632095560ull, 1582914569427869ull}}, {{3954793272847586768ull, 1266331655542295ull}}, {{6327669236556138832ull, 2026130648867672ull}}, {{16130181833470642036ull, 1620904519094137ull}}, {{5525447837292692980ull, 1296723615275310ull}}, {{8840716539668308772ull, 2074757784440496ull}}, {{3383224416992736692ull, 1659806227552397ull}}, {{13774625977819920324ull, 1327844982041917ull}}, {{7282006305544231228ull, 2124551971267068ull}}, {{13204302673919205628ull, 1699641577013654ull}}, {{14252790953877274824ull, 1359713261610923ull}}, {{668372637752177780ull, 2175541218577478ull}}, {{7913395739685562872ull, 1740432974861982ull}}, {{17398763035974181268ull, 1392346379889585ull}}, {{9391276783849138412ull, 2227754207823337ull}}, {{134323797595490084ull, 1782203366258670ull}}, {{107459038076392064ull, 1425762693006936ull}}, {{14843362489428754944ull, 1140610154405548ull}}, {{1613287094634545972ull, 1824976247048878ull}}, {{8669327305191457424ull, 1459980997639102ull}}, {{18003508288378896908ull, 1167984798111281ull}}, {{2980171558212862792ull, 1868775676978051ull}}, {{17141532505537931528ull, 1495020541582440ull}}, {{13713226004430345220ull, 1196016433265952ull}}, {{7183766348120911064ull, 1913626293225524ull}}, {{9436361893238639172ull, 1530901034580419ull}}, {{11238438329332821660ull, 1224720827664335ull}}, {{17981501326932514660ull, 1959553324262936ull}}, {{10695852246804101404ull, 1567642659410349ull}}, {{12246030612185191444ull, 1254114127528279ull}}, {{8525602535270575344ull, 2006582604045247ull}}, {{17888528472442191244ull, 1605266083236197ull}}, {{6932125148469932348ull, 1284212866588958ull}}, {{7402051422809981436ull, 2054740586542333ull}}, {{13300338767731805796ull, 1643792469233866ull}}, {{6950922199443534312ull, 1315033975387093ull}}, {{7432126704367744576ull, 2104054360619349ull}}, {{9635050178236105984ull, 1683243488495479ull}}, {{11397388957330795112ull, 1346594790796383ull}}, {{14546473516987361856ull, 2154551665274213ull}}, {{569132369364158516ull, 1723641332219371ull}}, {{15212701154458968104ull, 1378913065775496ull}}, {{16961624217650528320ull, 2206260905240794ull}}, {{17258648188862332980ull, 1765008724192635ull}}, {{13806918551089866384ull, 1412006979354108ull}}, {{18424232470355713752ull, 1129605583483286ull}}, {{3653330249375769744ull, 1807368933573259ull}}, {{6612013014242526116ull, 1445895146858607ull}}, {{16357656855619751864ull, 1156716117486885ull}}, {{7725506895282051364ull, 1850745787979017ull}}, {{17248451960451372060ull, 1480596630383213ull}}, {{2730715124135366680ull, 1184477304306571ull}}, {{15437190642842317660ull, 1895163686890513ull}}, {{1281706070048123156ull, 1516130949512411ull}}, {{15782760115006139816ull, 1212904759609928ull}}, {{3116323295558361772ull, 1940647615375886ull}}, {{17250453895414330708ull, 1552518092300708ull}}, {{2732316672105733596ull, 1242014473840567ull}}, {{8061055490111084080ull, 1987223158144907ull}}, {{17516890836314598232ull, 1589778526515925ull}}, {{14013512669051678584ull, 1271822821212740ull}}, {{3974876196773134124ull, 2034916513940385ull}}, {{3179900957418507296ull, 1627933211152308ull}}, {{9922618395418626484ull, 1302346568921846ull}}, {{8497491803185981728ull, 2083754510274954ull}}, {{10487342257290695708ull, 1667003608219963ull}}, {{15768571435316377212ull, 1333602886575970ull}}, {{6782970222796651924ull, 2133764618521553ull}}, {{12805073807721142184ull, 1707011694817242ull}}, {{2865361416693093100ull, 1365609355853794ull}}, {{11963275896192769608ull, 2184974969366070ull}}, {{9570620716954215688ull, 1747979975492856ull}}, {{3967147758821462224ull, 1398383980394285ull}}, {{6347436414114339560ull, 2237414368630856ull}}, {{1388600316549561324ull, 1789931494904685ull}}, {{1110880253239649060ull, 1431945195923748ull}}, {{8267401832075539896ull, 1145556156738998ull}}, {{9538494116578953508ull, 1832889850782397ull}}, {{252097663779342160ull, 1466311880625918ull}}, {{7580375760507294376ull, 1173049504500734ull}}, {{1060554772585940032ull, 1876879207201175ull}}, {{848443818068752024ull, 1501503365760940ull}}, {{678755054455001620ull, 1201202692608752ull}}, {{4775356901869912916ull, 1921924308174003ull}}, {{11198983150979750976ull, 1537539446539202ull}}, {{1580488891299980136ull, 1230031557231362ull}}, {{6218131040821878540ull, 1968050491570179ull}}, {{8663853647399413156ull, 1574440393256143ull}}, {{14309780547403351172ull, 1259552314604914ull}}, {{11827602431619630904ull, 2015283703367863ull}}, {{16840779574779525368ull, 1612226962694290ull}}, {{13472623659823620296ull, 1289781570155432ull}}, {{6798802596750151180ull, 2063650512248692ull}}, {{16507088521625851912ull, 1650920409798953ull}}, {{2137624373074950560ull, 1320736327839163ull}}, {{18177594255887562192ull, 2113178124542660ull}}, {{14542075404710049752ull, 1690542499634128ull}}, {{565613879542308832ull, 1352433999707303ull}}, {{15662377466235335424ull, 2163894399531684ull}}, {{16219250787730178664ull, 1731115519625347ull}}, {{5596703000700322284ull, 1384892415700278ull}}, {{5265375986378605332ull, 2215827865120445ull}}, {{4212300789102884264ull, 1772662292096356ull}}, {{18127235890249948704ull, 1418129833677084ull}}, {{18191137526941869288ull, 1134503866941667ull}}, {{14348424784139349568ull, 1815206187106668ull}}, {{410693383085748684ull, 1452164949685335ull}}, {{328554706468598948ull, 1161731959748268ull}}, {{15283082789317399608ull, 1858771135597228ull}}, {{1158419787228188716ull, 1487016908477783ull}}, {{8305433459266371620ull, 1189613526782226ull}}, {{5909995905342373944ull, 1903381642851562ull}}, {{15796043168499630124ull, 1522705314281249ull}}, {{16326183349541614424ull, 1218164251424999ull}}, {{15053846915040852108ull, 1949062802279999ull}}, {{15732426346774592008ull, 1559250241823999ull}}, {{16275289892161583932ull, 1247400193459199ull}}, {{14972417383232803320ull, 1995840309534719ull}}, {{15667282721328152980ull, 1596672247627775ull}}, {{12533826177062522384ull, 1277337798102220ull}}, {{1607377809590484196ull, 2043740476963553ull}}, {{8664599877156208004ull, 1634992381570842ull}}, {{17999726345950697372ull, 1307993905256673ull}}, {{6663469265069653860ull, 2092790248410678ull}}, {{12709473041539543732ull, 1674232198728542ull}}, {{2788880803747814340ull, 1339385758982834ull}}, {{11840906915480323592ull, 2143017214372534ull}}, {{13162074347126169196ull, 1714413771498027ull}}, {{3150961848217114708ull, 1371531017198422ull}}, {{8730887771889293860ull, 2194449627517475ull}}, {{6984710217511435088ull, 1755559702013980ull}}, {{5587768174009148068ull, 1404447761611184ull}}, {{16319126707898457560ull, 2247116418577894ull}}, {{16744650181060676368ull, 1797693134862315ull}}, {{13395720144848541096ull, 1438154507889852ull}}, {{3337878486395012228ull, 1150523606311882ull}}, {{9029954392973929892ull, 1840837770099011ull}}, {{3534614699637233588ull, 1472670216079209ull}}, {{6517040574451697196ull, 1178136172863367ull}}, {{14116613733864625836ull, 1885017876581387ull}}, {{3914593357607880020ull, 1508014301265110ull}}, {{3131674686086304016ull, 1206411441012088ull}}, {{1321330682996176104ull, 1930258305619341ull}}, {{15814459805364582176ull, 1544206644495472ull}}, {{5272870214807845096ull, 1235365315596378ull}}, {{4747243528950641828ull, 1976584504954205ull}}, {{3797794823160513464ull, 1581267603963364ull}}, {{6727584673270321092ull, 1265014083170691ull}}, {{3385437847748693104ull, 2024022533073106ull}}, {{17465745537166595776ull, 1619218026458484ull}}, {{17661945244475186944ull, 1295374421166787ull}}, {{13501717132192657816ull, 2072599073866860ull}}, {{10801373705754126252ull, 1658079259093488ull}}, {{16019796594087121648ull, 1326463407274790ull}}, {{7184930476829843024ull, 2122341451639665ull}}, {{5747944381463874420ull, 1697873161311732ull}}, {{15666401949396830504ull, 1358298529049385ull}}, {{6619499045325377192ull, 2173277646479017ull}}, {{16363645680486032724ull, 1738622117183213ull}}, {{2022870100163095208ull, 1390897693746571ull}}, {{14304638604486683304ull, 2225436309994513ull}}, {{375664439363615672ull, 1780349047995611ull}}, {{15057926810458533832ull, 1424279238396488ull}}, {{978295004141096096ull, 1139423390717191ull}}, {{12633318450851484720ull, 1823077425147505ull}}, {{10106654760681187776ull, 1458461940118004ull}}, {{11774672623286860544ull, 1166769552094403ull}}, {{15150127382517066548ull, 1866831283351045ull}}, {{12120101906013653240ull, 1493465026680836ull}}, {{6006732710069012268ull, 1194772021344669ull}}, {{16989469965594240276ull, 1911635234151470ull}}, {{13591575972475392220ull, 1529308187321176ull}}, {{7183911963238403452ull, 1223446549856941ull}}, {{4115561511697624880ull, 1957514479771106ull}}, {{18049844468325741196ull, 1566011583816884ull}}, {{18129224389402503280ull, 1252809267053507ull}}, {{14249363764076363956ull, 2004494827285612ull}}, {{4020793381777270516ull, 1603595861828490ull}}, {{3216634705421816412ull, 1282876689462792ull}}, {{8835964343416816584ull, 2052602703140467ull}}, {{18136817918959184236ull, 1642082162512373ull}}, {{3441407890941616420ull, 1313665730009899ull}}, {{12884950254990406920ull, 2101865168015838ull}}, {{17686657833476146180ull, 1681492134412670ull}}, {{14149326266780916944ull, 1345193707530136ull}}, {{15260224397365646468ull, 2152309932048218ull}}, {{1140133073666786204ull, 1721847945638575ull}}, {{912106458933428964ull, 1377478356510860ull}}, {{1459370334293486340ull, 2203965370417376ull}}, {{15924891526402430364ull, 1763172296333900ull}}, {{12739913221121944292ull, 1410537837067120ull}}, {{10191930576897555432ull, 1128430269653696ull}}, {{8928391293552268048ull, 1805488431445914ull}}, {{10832061849583724760ull, 1444390745156731ull}}, {{4976300664925069484ull, 1155512596125385ull}}, {{7962081063880111176ull, 1848820153800616ull}}, {{2680316036362178620ull, 1479056123040493ull}}, {{9522950458573563540ull, 1183244898432394ull}}, {{4168674289491970696ull, 1893191837491831ull}}, {{18092334690561217848ull, 1514553469993464ull}}, {{18163216567190884604ull, 1211642775994771ull}}, {{3235704804312043104ull, 1938628441591635ull}}, {{2588563843449634484ull, 1550902753273308ull}}, {{9449548704243528232ull, 1240722202618646ull}}, {{7740580297305824524ull, 1985155524189834ull}}, {{9881813052586569944ull, 1588124419351867ull}}, {{526752812585435308ull, 1270499535481494ull}}, {{8221502129620517140ull, 2032799256770390ull}}, {{6577201703696413712ull, 1626239405416312ull}}, {{16329807807182861940ull, 1300991524333049ull}}, {{15059646047266848132ull, 2081586438932879ull}}, {{15737065652555388828ull, 1665269151146303ull}}, {{1521606077818580092ull, 1332215320917043ull}}, {{17191964983477369444ull, 2131544513467268ull}}, {{2685525542556164584ull, 1705235610773815ull}}, {{2148420434044931668ull, 1364188488619052ull}}, {{7126821509213800992ull, 2182701581790483ull}}, {{13080154836854861440ull, 1746161265432386ull}}, {{6774775054741978828ull, 1396929012345909ull}}, {{18218337717070986772ull, 2235086419753454ull}}, {{18264018988398699740ull, 1788069135802763ull}}, {{3543168746493228824ull, 1430455308642211ull}}, {{17591930256162224352ull, 1144364246913768ull}}, {{6010995521408097024ull, 1830982795062030ull}}, {{4808796417126477620ull, 1464786236049624ull}}, {{7536385948443092416ull, 1171828988839699ull}}, {{990171073283216900ull, 1874926382143519ull}}, {{4481485673368483844ull, 1499941105714815ull}}, {{3585188538694787072ull, 1199952884571852ull}}, {{9425650476653569640ull, 1919924615314963ull}}, {{14919218010806676360ull, 1535939692251970ull}}, {{11935374408645341088ull, 1228751753801576ull}}, {{11717901424348725096ull, 1966002806082522ull}}, {{1995623509995159428ull, 1572802244866018ull}}, {{8975196437479948188ull, 1258241795892814ull}}, {{3292267855742186132ull, 2013186873428503ull}}, {{10012511914077569552ull, 1610549498742802ull}}, {{631311901778234996ull, 1288439598994242ull}}, {{4699447857587086316ull, 2061503358390787ull}}, {{14827604730295400024ull, 1649202686712629ull}}, {{15551432598978230340ull, 1319362149370103ull}}, {{2746199269913706608ull, 2110979438992166ull}}, {{16954354674898606580ull, 1688783551193732ull}}, {{6184786110435064616ull, 1351026840954986ull}}, {{2516960147212282740ull, 2161642945527978ull}}, {{9392265747253646840ull, 1729314356422382ull}}, {{135114968319096824ull, 1383451485137906ull}}, {{11284230393536285888ull, 2213522376220649ull}}, {{12716733129570939036ull, 1770817900976519ull}}, {{13862735318398661552ull, 1416654320781215ull}}, {{11090188254718929240ull, 1133323456624972ull}}, {{2986905948582645492ull, 1813317530599956ull}}, {{17146920017833757688ull, 1450654024479964ull}}, {{17406884829008916472ull, 1160523219583971ull}}, {{2025574023220894092ull, 1856837151334355ull}}, {{1620459218576715276ull, 1485469721067484ull}}, {{4985716189603282544ull, 1188375776853987ull}}, {{11666494718107162392ull, 1901401242966379ull}}, {{13022544589227640236ull, 1521120994373103ull}}, {{17796733300865932836ull, 1216896795498482ull}}, {{13717378022417851244ull, 1947034872797572ull}}, {{3595204788450460348ull, 1557627898238058ull}}, {{10254861460244188924ull, 1246102318590446ull}}, {{9029080706906881636ull, 1993763709744714ull}}, {{10912613380267415632ull, 1595010967795771ull}}, {{5040741889472022180ull, 1276008774236617ull}}, {{11754535837897145816ull, 2041614038778587ull}}, {{2024931040833896004ull, 1633291231022870ull}}, {{1619944832667116804ull, 1306632984818296ull}}, {{13659958176493117856ull, 2090612775709273ull}}, {{18306664170678314932ull, 1672490220567418ull}}, {{3577284892316920976ull, 1337992176453935ull}}, {{5723655827707073560ull, 2140787482326296ull}}, {{889575847423748524ull, 1712629985861037ull}}, {{11779707122164729788ull, 1370103988688829ull}}, {{7779484951237836692ull, 2192166381902127ull}}, {{17291634405216000324ull, 1753733105521701ull}}, {{10143958709430889936ull, 1402986484417361ull}}, {{8851636305605603252ull, 2244778375067778ull}}, {{14460006673968303248ull, 1795822700054222ull}}, {{4189307709690821952ull, 1436658160043378ull}}, {{10730143797236478208ull, 1149326528034702ull}}, {{2410834816610723840ull, 1838922444855524ull}}, {{5618016668030489396ull, 1471137955884419ull}}, {{8183762149166301840ull, 1176910364707535ull}}, {{13094019438666082944ull, 1883056583532056ull}}, {{6785866736190956032ull, 1506445266825645ull}}, {{5428693388952764824ull, 1205156213460516ull}}, {{1307211792840603072ull, 1928249941536826ull}}, {{15803164693240123752ull, 1542599953229460ull}}, {{12642531754592099000ull, 1234079962583568ull}}, {{16538701992605448080ull, 1974527940133709ull}}, {{16920310408826268784ull, 1579622352106967ull}}, {{6157550697577194380ull, 1263697881685574ull}}, {{17230778745607331660ull, 2021916610696918ull}}, {{2716576552260134356ull, 1617533288557535ull}}, {{2173261241808107484ull, 1294026630846028ull}}, {{18234613245860613272ull, 2070442609353644ull}}, {{18277039411430400940ull, 1656354087482915ull}}, {{14621631529144320752ull, 1325083269986332ull}}, {{8637215187663271908ull, 2120133231978132ull}}, {{17977818594356348496ull, 1696106585582505ull}}, {{14382254875485078796ull, 1356885268466004ull}}, {{11943561356550395108ull, 2171016429545607ull}}, {{2176151455756495440ull, 1736813143636486ull}}, {{16498316423572837644ull, 1389450514909188ull}}, {{4261213389265078292ull, 2223120823854702ull}}, {{14477017155637793604ull, 1778496659083761ull}}, {{7892264909768324560ull, 1422797327267009ull}}, {{10003160742556569968ull, 1138237861813607ull}}, {{1247661929122870660ull, 1821180578901772ull}}, {{12066175987524027496ull, 1456944463121417ull}}, {{2274243160535401352ull, 1165555570497134ull}}, {{11017486686340462808ull, 1864888912795414ull}}, {{12503338163814280568ull, 1491911130236331ull}}, {{6313321716309514132ull, 1193528904189065ull}}, {{10101314746095222612ull, 1909646246702504ull}}, {{11770400611618088412ull, 1527716997362003ull}}, {{16795018118778291376ull, 1222173597889602ull}}, {{12114633731077624912ull, 1955477756623364ull}}, {{13381055799604010252ull, 1564382205298691ull}}, {{7015495824941297876ull, 1251505764238953ull}}, {{7535444505164166280ull, 2002409222782325ull}}, {{6028355604131333024ull, 1601927378225860ull}}, {{4822684483305066420ull, 1281541902580688ull}}, {{4026946358546195948ull, 2050467044129101ull}}, {{17978952345804598052ull, 1640373635303280ull}}, {{14383161876643678440ull, 1312298908242624ull}}, {{11945012558404154536ull, 2099678253188199ull}}, {{13245358861465233952ull, 1679742602550559ull}}, {{14285635903914097484ull, 1343794082040447ull}}, {{8099622187294914684ull, 2150070531264716ull}}, {{2790348935094021424ull, 1720056425011773ull}}, {{9610976777559037784ull, 1376045140009418ull}}, {{11688214029352550136ull, 2201672224015069ull}}, {{13039920038223950432ull, 1761337779212055ull}}, {{10431936030579160344ull, 1409070223369644ull}}, {{12034897639205238596ull, 1127256178695715ull}}, {{809092149018830140ull, 1803609885913145ull}}, {{647273719215064112ull, 1442887908730516ull}}, {{15275214234339692584ull, 1154310326984412ull}}, {{9682947515975866840ull, 1846896523175060ull}}, {{7746358012780693472ull, 1477517218540048ull}}, {{13575784039708375424ull, 1182013774832038ull}}, {{18031905648791490356ull, 1891222039731261ull}}, {{10736175704291281960ull, 1512977631785009ull}}, {{12278289378174935892ull, 1210382105428007ull}}, {{4887867746112256136ull, 1936611368684812ull}}, {{14978340641115535876ull, 1549289094947849ull}}, {{15672021327634339024ull, 1239431275958279ull}}, {{14007187679989211472ull, 1983090041533247ull}}, {{3827052514507548532ull, 1586472033226598ull}}, {{10440339641089859472ull, 1269177626581278ull}}, {{13015194611001864832ull, 2030684202530045ull}}, {{10412155688801491864ull, 1624547362024036ull}}, {{4640375736299283168ull, 1299637889619229ull}}, {{14803298807562673716ull, 2079420623390766ull}}, {{8153290231308228648ull, 1663536498712613ull}}, {{13901329814530403564ull, 1330829198970090ull}}, {{3795383629539094088ull, 2129326718352145ull}}, {{3036306903631275272ull, 1703461374681716ull}}, {{17186440781872661508ull, 1362769099745372ull}}, {{12740909992028617124ull, 2180430559592596ull}}, {{6503379178880983376ull, 1744344447674077ull}}, {{16270749787330517668ull, 1395475558139261ull}}, {{207757956535456008ull, 2232760893022819ull}}, {{3855555179970275132ull, 1786208714418255ull}}, {{3084444143976220104ull, 1428966971534604ull}}, {{6156904129922886404ull, 1143173577227683ull}}, {{6161697793134707928ull, 1829077723564293ull}}, {{12308055863991586988ull, 1463262178851434ull}}, {{13535793505935179912ull, 1170609743081147ull}}, {{6899874350528646568ull, 1872975588929836ull}}, {{1830550665681006932ull, 1498380471143869ull}}, {{5153789347286715868ull, 1198704376915095ull}}, {{8246062955658745392ull, 1917927003064152ull}}, {{17664896808752727280ull, 1534341602451321ull}}, {{10442568632260271500ull, 1227473281961057ull}}, {{1950714552648793112ull, 1963957251137692ull}}, {{12628618086344765460ull, 1571165800910153ull}}, {{17481592098559633012ull, 1256932640728122ull}}, {{13213152098727771528ull, 2011092225164996ull}}, {{6881172864240306900ull, 1608873780131997ull}}, {{16572984735617976488ull, 1287099024105597ull}}, {{11759380318021121088ull, 2059358438568956ull}}, {{5718155439674986548ull, 1647486750855165ull}}, {{4574524351739989240ull, 1317989400684132ull}}, {{11008587777525893104ull, 2108783041094611ull}}, {{5117521407278804160ull, 1687026432875689ull}}, {{7783365940564953652ull, 1349621146300551ull}}, {{5074687875420105196ull, 2159393834080882ull}}, {{15127796744561815128ull, 1727515067264705ull}}, {{12102237395649452100ull, 1382012053811764ull}}, {{8295533388813392392ull, 2211219286098823ull}}, {{14015124340534534560ull, 1768975428879058ull}}, {{144053028201896680ull, 1415180343103247ull}}, {{11183288866787248312ull, 1132144274482597ull}}, {{3135866927891956008ull, 1811430839172156ull}}, {{17266088801281206100ull, 1449144671337724ull}}, {{17502219855766875200ull, 1159315737070179ull}}, {{16935505325001269356ull, 1854905179312287ull}}, {{6169706630517194836ull, 1483924143449830ull}}, {{4935765304413755868ull, 1187139314759864ull}}, {{15275922116545830036ull, 1899422903615782ull}}, {{4842040063752843384ull, 1519538322892626ull}}, {{184283236260364384ull, 1215630658314101ull}}, {{11362899622242313984ull, 1945009053302561ull}}, {{5400970883051940864ull, 1556007242642049ull}}, {{8010125521183463012ull, 1244805794113639ull}}, {{1748154389667809852ull, 1991689270581823ull}}, {{8777221141218068528ull, 1593351416465458ull}}, {{14400474542458275468ull, 1274681133172366ull}}, {{15662061638449420104ull, 2039489813075786ull}}, {{8840300496017625760ull, 1631591850460629ull}}, {{10761589211556010932ull, 1305273480368503ull}}, {{13529193923747707168ull, 2088437568589605ull}}, {{10823355138998165736ull, 1670750054871684ull}}, {{12348032925940442912ull, 1336600043897347ull}}, {{4999457422537067364ull, 2138560070235756ull}}, {{310217123287743568ull, 1710848056188605ull}}, {{248173698630194852ull, 1368678444950884ull}}, {{7775775547292132412ull, 2189885511921414ull}}, {{9909969252575616252ull, 1751908409537131ull}}, {{4238626587318582680ull, 1401526727629705ull}}, {{6781802539709732288ull, 2242442764207528ull}}, {{12804139661251606476ull, 1793954211366022ull}}, {{2864614099517464536ull, 1435163369092818ull}}, {{9670388909097792272ull, 1148130695274254ull}}, {{4404575810330736668ull, 1837009112438807ull}}, {{14591707092490320304ull, 1469607289951045ull}}, {{11673365673992256244ull, 1175685831960836ull}}, {{11298687448903789344ull, 1881097331137338ull}}, {{16417647588606852120ull, 1504877864909870ull}}, {{13134118070885481696ull, 1203902291927896ull}}, {{13635891283932950068ull, 1926243667084634ull}}, {{14598061841888270380ull, 1540994933667707ull}}, {{4299751844026795656ull, 1232795946934166ull}}, {{17947649394668604020ull, 1972473515094665ull}}, {{14358119515734883216ull, 1577978812075732ull}}, {{4107797983104085924ull, 1262383049660586ull}}, {{17640523217192268452ull, 2019812879456937ull}}, {{6733720944269994116ull, 1615850303565550ull}}, {{5386976755415995292ull, 1292680242852440ull}}, {{8619162808665592468ull, 2068288388563904ull}}, {{10584679061674384296ull, 1654630710851123ull}}, {{15846440878823328084ull, 1323704568680898ull}}, {{3218212517665862996ull, 2117927309889438ull}}, {{9953267643616511044ull, 1694341847911550ull}}, {{7962614114893208832ull, 1355473478329240ull}}, {{12740182583829134136ull, 2168757565326784ull}}, {{13881494881805217632ull, 1735006052261427ull}}, {{3726498275960353456ull, 1388004841809142ull}}, {{9651746056278475856ull, 2220807746894627ull}}, {{342699215538960040ull, 1776646197515702ull}}, {{11342205816656899000ull, 1421316958012561ull}}, {{5384415838583608876ull, 1137053566410049ull}}, {{15993762971217594852ull, 1819285706256078ull}}, {{1726963932748344912ull, 1455428565004863ull}}, {{8760268775682496576ull, 1164342852003890ull}}, {{14016430041091994520ull, 1862948563206224ull}}, {{14902492847615505940ull, 1490358850564979ull}}, {{15611343092834315072ull, 1192287080451983ull}}, {{2842056060083442180ull, 1907659328723174ull}}, {{5962993662808664068ull, 1526127462978539ull}}, {{8459743744988841576ull, 1220901970382831ull}}, {{6156892362498325876ull, 1953443152612530ull}}, {{4925513889998660700ull, 1562754522090024ull}}, {{7629759926740838884ull, 1250203617672019ull}}, {{1139569438559611244ull, 2000325788275231ull}}, {{15669050809815330288ull, 1600260630620184ull}}, {{16224589462594174552ull, 1280208504496147ull}}, {{11201947881183037996ull, 2048333607193836ull}}, {{5272209490204520072ull, 1638666885755069ull}}, {{7907116406905526380ull, 1310933508604055ull}}, {{12651386251048842208ull, 2097493613766488ull}}, {{17499806630322894412ull, 1677994891013190ull}}, {{13999845304258315532ull, 1342395912810552ull}}, {{7642357227845663556ull, 2147833460496884ull}}, {{9803234597018441168ull, 1718266768397507ull}}, {{463890048130932288ull, 1374613414718006ull}}, {{11810270521235222632ull, 2199381463548809ull}}, {{13137565231730088428ull, 1759505170839047ull}}, {{3131354555900250096ull, 1407604136671238ull}}, {{9883781274204020724ull, 1126083309336990ull}}, {{15814050038726433156ull, 1801733294939184ull}}, {{16340588845723056848ull, 1441386635951347ull}}, {{5693773447094624832ull, 1153109308761078ull}}, {{5420688700609489408ull, 1844974894017725ull}}, {{4336550960487591528ull, 1475979915214180ull}}, {{3469240768390073220ull, 1180783932171344ull}}, {{12929482858907937800ull, 1889254291474150ull}}, {{10343586287126350240ull, 1511403433179320ull}}, {{8274869029701080192ull, 1209122746543456ull}}, {{5861092818037907664ull, 1934596394469530ull}}, {{4688874254430326128ull, 1547677115575624ull}}, {{7440448218286171228ull, 1238141692460499ull}}, {{836670705032142996ull, 1981026707936799ull}}, {{4358685378767624720ull, 1584821366349439ull}}, {{7176297117756010096ull, 1267857093079551ull}}, {{4103377758925795512ull, 2028571348927282ull}}, {{14350748651366367376ull, 1622857079141825ull}}, {{11480598921093093900ull, 1298285663313460ull}}, {{18368958273748950244ull, 2077257061301536ull}}, {{11005817804257249872ull, 1661805649041229ull}}, {{12494003058147710220ull, 1329444519232983ull}}, {{16301056078294426032ull, 2127111230772773ull}}, {{1972798418409809856ull, 1701688984618219ull}}, {{5267587549469758208ull, 1361351187694575ull}}, {{8428140079151613132ull, 2178161900311320ull}}, {{6742512063321290504ull, 1742529520249056ull}}, {{1704660835915122080ull, 1394023616199245ull}}, {{2727457337464195328ull, 2230437785918792ull}}, {{13250012314197087232ull, 1784350228735033ull}}, {{17978707480841490432ull, 1427480182988026ull}}, {{10693617169931282020ull, 1141984146390421ull}}, {{9731089842406230588ull, 1827174634224674ull}}, {{11474220688666894796ull, 1461739707379739ull}}, {{12868725365675426160ull, 1169391765903791ull}}, {{13211262955596861208ull, 1871026825446066ull}}, {{6879661549735578644ull, 1496821460356853ull}}, {{12882426869272283560ull, 1197457168285482ull}}, {{5854487731868012404ull, 1915931469256772ull}}, {{15751636629720140892ull, 1532745175405417ull}}, {{5222611674292292068ull, 1226196140324334ull}}, {{15734876308351487956ull, 1961913824518934ull}}, {{16277249861423100688ull, 1569531059615147ull}}, {{5643102259654659904ull, 1255624847692118ull}}, {{5339614800705545524ull, 2008999756307389ull}}, {{7961040655306346740ull, 1607199805045911ull}}, {{2679483709503167068ull, 1285759844036729ull}}, {{11665871564688887960ull, 2057215750458766ull}}, {{5643348437009200044ull, 1645772600367013ull}}, {{11893376379091180680ull, 1316618080293610ull}}, {{582658132836337476ull, 2106588928469777ull}}, {{11534172950494800948ull, 1685271142775821ull}}, {{5537989545653930436ull, 1348216914220657ull}}, {{12550132087788199020ull, 2157147062753051ull}}, {{6350756855488648892ull, 1725717650202441ull}}, {{1391256669649008792ull, 1380574120161953ull}}, {{16983405930406055360ull, 2208918592259124ull}}, {{17276073559066754612ull, 1767134873807299ull}}, {{17510207661995314012ull, 1413707899045839ull}}, {{17697514944338161532ull, 1130966319236671ull}}, {{2490582207747686188ull, 1809546110778675ull}}, {{1992465766198148952ull, 1447636888622940ull}}, {{1593972612958519160ull, 1158109510898352ull}}, {{6239704995475540980ull, 1852975217437363ull}}, {{12370461625864253432ull, 1482380173949890ull}}, {{9896369300691402744ull, 1185904139159912ull}}, {{1076795622138603100ull, 1897446622655860ull}}, {{861436497710882480ull, 1517957298124688ull}}, {{8067846827652526628ull, 1214365838499750ull}}, {{12908554924244042608ull, 1942985341599600ull}}, {{10326843939395234088ull, 1554388273279680ull}}, {{8261475151516187268ull, 1243510618623744ull}}, {{2150313798200168660ull, 1989616989797991ull}}, {{16477646297527776220ull, 1591693591838392ull}}, {{5803419408538400332ull, 1273354873470714ull}}, {{16664168683145261176ull, 2037367797553142ull}}, {{5952637317032388296ull, 1629894238042514ull}}, {{8451458668367820960ull, 1303915390434011ull}}, {{6143636239904692888ull, 2086264624694418ull}}, {{12293606621407574956ull, 1669011699755534ull}}, {{13524234111867970288ull, 1335209359804427ull}}, {{6881379320021111168ull, 2136334975687084ull}}, {{9194452270758799260ull, 1709067980549667ull}}, {{18423608260832770376ull, 1367254384439733ull}}, {{7341680328880970664ull, 2187607015103574ull}}, {{9562693077846686852ull, 1750085612082859ull}}, {{11339503277019259804ull, 1400068489666287ull}}, {{3385809984263174396ull, 2240109583466060ull}}, {{2708647987410539516ull, 1792087666772848ull}}, {{9545616019412252260ull, 1433670133418278ull}}, {{15015190445013622452ull, 1146936106734622ull}}, {{9266909453054154636ull, 1835097770775396ull}}, {{3724178747701413384ull, 1468078216620317ull}}, {{14047389442386861676ull, 1174462573296253ull}}, {{339730219367516744ull, 1879140117274006ull}}, {{15029179434461654688ull, 1503312093819204ull}}, {{15712692362311234072ull, 1202649675055363ull}}, {{3004214891246512580ull, 1924239480088582ull}}, {{13471418357222941032ull, 1539391584070865ull}}, {{10777134685778352824ull, 1231513267256692ull}}, {{2486020238277723228ull, 1970421227610708ull}}, {{9367513820105999228ull, 1576336982088566ull}}, {{3804662241342889060ull, 1261069585670853ull}}, {{2398110771406712172ull, 2017711337073365ull}}, {{1918488617125369740ull, 1614169069658692ull}}, {{12602837337926026760ull, 1291335255726953ull}}, {{16475190925939732496ull, 2066136409163125ull}}, {{13180152740751785996ull, 1652909127330500ull}}, {{10544122192601428796ull, 1322327301864400ull}}, {{16870595508162286076ull, 2115723682983040ull}}, {{13496476406529828860ull, 1692578946386432ull}}, {{3418483495740042440ull, 1354063157109146ull}}, {{16537620037409798876ull, 2166501051374633ull}}, {{2162049585702108132ull, 1733200841099707ull}}, {{12797686112787417472ull, 1386560672879765ull}}, {{2029553706750316344ull, 2218497076607625ull}}, {{1623642965400253072ull, 1774797661286100ull}}, {{1298914372320202460ull, 1419838129028880ull}}, {{1039131497856161968ull, 1135870503223104ull}}, {{9041308026053679792ull, 1817392805156966ull}}, {{3543697606101033512ull, 1453914244125573ull}}, {{10213655714364647456ull, 1163131395300458ull}}, {{12652500328241525608ull, 1861010232480733ull}}, {{17500697892077041132ull, 1488808185984586ull}}, {{10311209498919722580ull, 1191046548787669ull}}, {{5429888754045825160ull, 1905674478060271ull}}, {{654562188494749804ull, 1524539582448217ull}}, {{11591696195021530812ull, 1219631665958573ull}}, {{14857365097292538980ull, 1951410665533717ull}}, {{4507194448350210536ull, 1561128532426974ull}}, {{7295104373422078752ull, 1248902825941579ull}}, {{604120553249595036ull, 1998244521506527ull}}, {{11551342886825406996ull, 1598595617205221ull}}, {{5551725494718415276ull, 1278876493764177ull}}, {{12572109606291374764ull, 2046202390022683ull}}, {{17436385314516920456ull, 1636961912018146ull}}, {{10259759436871626044ull, 1309569529614517ull}}, {{1658219840026960376ull, 2095311247383228ull}}, {{8705273501505388948ull, 1676248997906582ull}}, {{18032265245430042128ull, 1340999198325265ull}}, {{10404880318978515788ull, 2145598717320425ull}}, {{8323904255182812628ull, 1716478973856340ull}}, {{6659123404146250104ull, 1373183179085072ull}}, {{14343946261375910488ull, 2197093086536115ull}}, {{11475157009100728392ull, 1757674469228892ull}}, {{1801427977796762068ull, 1406139575383114ull}}, {{10260982393958639952ull, 2249823320612982ull}}, {{830088285683091316ull, 1799858656490386ull}}, {{15421465887514114344ull, 1439886925192308ull}}, {{1269126265785560508ull, 1151909540153847ull}}, {{5719950839998807136ull, 1843055264246155ull}}, {{4575960671999045708ull, 1474444211396924ull}}, {{7350117352341146888ull, 1179555369117539ull}}, {{692141319520104052ull, 1887288590588063ull}}, {{7932410685099903888ull, 1509830872470450ull}}, {{6345928548079923112ull, 1207864697976360ull}}, {{10153485676927876976ull, 1932583516762176ull}}, {{4433439726800391260ull, 1546066813409741ull}}, {{18304147040407954300ull, 1236853450727792ull}}, {{14529240005685085588ull, 1978965521164468ull}}, {{555345560322337500ull, 1583172416931575ull}}, {{444276448257870000ull, 1266537933545260ull}}, {{710842317212592000ull, 2026460693672416ull}}, {{15326069112737714892ull, 1621168554937932ull}}, {{4882157660706351268ull, 1296934843950346ull}}, {{432754627646341384ull, 2075095750320554ull}}, {{4035552516858983428ull, 1660076600256443ull}}, {{10607139642971007388ull, 1328061280205154ull}}, {{5903376984527880856ull, 2124898048328247ull}}, {{15790748031848035652ull, 1699918438662597ull}}, {{5253900795994607876ull, 1359934750930078ull}}, {{4716892458849462280ull, 2175895601488125ull}}, {{3773513967079569824ull, 1740716481190500ull}}, {{3018811173663655856ull, 1392573184952400ull}}, {{4830097877861849372ull, 2228117095923840ull}}, {{3864078302289479500ull, 1782493676739072ull}}, {{14159309086057314568ull, 1425994941391257ull}}, {{3948749639362031008ull, 1140795953113006ull}}, {{17386045867204980584ull, 1825273524980809ull}}, {{17598185508505894788ull, 1460218819984647ull}}, {{6699850777320895184ull, 1168175055987718ull}}, {{7030412428971521972ull, 1869080089580349ull}}, {{9313678757919127900ull, 1495264071664279ull}}, {{11140291821077212644ull, 1196211257331423ull}}, {{14135118098981629908ull, 1913938011730277ull}}, {{3929396849701483280ull, 1531150409384222ull}}, {{14211563923986917592ull, 1224920327507377ull}}, {{7981107019411426856ull, 1959872524011804ull}}, {{10074234430271051808ull, 1567898019209443ull}}, {{15438085173700662092ull, 1254318415367554ull}}, {{13632889833695328380ull, 2006909464588087ull}}, {{3527614237472442056ull, 1605527571670470ull}}, {{2822091389977953644ull, 1284422057336376ull}}, {{15583392668190456804ull, 2055075291738201ull}}, {{8777365319810455120ull, 1644060233390561ull}}, {{3332543441106453772ull, 1315248186712449ull}}, {{12710767135254146680ull, 2104397098739918ull}}, {{17547311337687137992ull, 1683517678991934ull}}, {{17727197884891620716ull, 1346814143193547ull}}, {{13606121356858951856ull, 2154902629109676ull}}, {{7195548270745251160ull, 1723922103287741ull}}, {{2067089801854290604ull, 1379137682630193ull}}, {{18064738941934506260ull, 2206620292208308ull}}, {{3383744709321874040ull, 1765296233766647ull}}, {{13775042211683230200ull, 1412236987013317ull}}, {{3641336139862763512ull, 1129789589610654ull}}, {{13204835453264242268ull, 1807663343377046ull}}, {{6874519547869483492ull, 1446130674701637ull}}, {{16567662082521317764ull, 1156904539761309ull}}, {{15440212887808377452ull, 1851047263618095ull}}, {{12352170310246701960ull, 1480837810894476ull}}, {{6192387433455451244ull, 1184670248715581ull}}, {{2529122264044901348ull, 1895472397944930ull}}, {{2023297811235921076ull, 1516377918355944ull}}, {{5307987063730647184ull, 1213102334684755ull}}, {{8492779301969035496ull, 1940963735495608ull}}, {{14172921071059049044ull, 1552770988396486ull}}, {{7648988042105328912ull, 1242216790717189ull}}, {{1170334423142795288ull, 1987546865147503ull}}, {{8314965167998056876ull, 1590037492118002ull}}, {{17720018578624176472ull, 1272029993694401ull}}, {{2526588022605310092ull, 2035247989911043ull}}, {{9399968047568068720ull, 1628198391928834ull}}, {{11209323252796365300ull, 1302558713543067ull}}, {{3177521945506543188ull, 2084093941668908ull}}, {{9920715185889055196ull, 1667275153335126ull}}, {{4247223333969333832ull, 1333820122668101ull}}, {{17863603778576665104ull, 2134112196268961ull}}, {{10601534208119421760ull, 1707289757015169ull}}, {{12170576181237447728ull, 1365831805612135ull}}, {{1026177816270364752ull, 2185330888979417ull}}, {{11888988697242022772ull, 1748264711183533ull}}, {{16889888587277438864ull, 1398611768946826ull}}, {{1198380036450529920ull, 2237778830314923ull}}, {{8337401658644244580ull, 1790223064251938ull}}, {{14048618956399216312ull, 1432178451401550ull}}, {{11238895165119373048ull, 1145742761121240ull}}, {{17982232264190996880ull, 1833188417793984ull}}, {{18075134626094707824ull, 1466550734235187ull}}, {{7081410071391945612ull, 1173240587388150ull}}, {{11330256114227112984ull, 1877184939821040ull}}, {{9064204891381690388ull, 1501747951856832ull}}, {{18319410357331083280ull, 1201398361485465ull}}, {{10864312498020181632ull, 1922237378376745ull}}, {{8691449998416145304ull, 1537789902701396ull}}, {{3263811183991005920ull, 1230231922161117ull}}, {{8911446709127519796ull, 1968371075457787ull}}, {{18197203811527746804ull, 1574696860366229ull}}, {{18247111863964107768ull, 1259757488292983ull}}, {{7059286093891110488ull, 2015611981268774ull}}, {{9336777689854798716ull, 1612489585015019ull}}, {{11158770966625749296ull, 1289991668012015ull}}, {{17854033546601198872ull, 2063986668819224ull}}, {{17972575652022869420ull, 1651189335055379ull}}, {{18067409336360205860ull, 1320951468044303ull}}, {{6771762049724867436ull, 2113522348870886ull}}, {{1728060825037983628ull, 1690817879096709ull}}, {{5071797474772297224ull, 1352654303277367ull}}, {{11804224774377585884ull, 2164246885243787ull}}, {{2064682190018248060ull, 1731397508195030ull}}, {{1651745752014598448ull, 1385118006556024ull}}, {{10021490832707178164ull, 2216188810489638ull}}, {{15395890295649563176ull, 1772951048391710ull}}, {{12316712236519650540ull, 1418360838713368ull}}, {{17232067418699541080ull, 1134688670970694ull}}, {{16503261425693534756ull, 1815501873553111ull}}, {{9513260325812917480ull, 1452401498842489ull}}, {{11299957075392244308ull, 1161921199073991ull}}, {{10701233691143770248ull, 1859073918518386ull}}, {{4871638138173105876ull, 1487259134814709ull}}, {{7586659325280395024ull, 1189807307851767ull}}, {{15828003735190542360ull, 1903691692562827ull}}, {{5283705358668613240ull, 1522953354050262ull}}, {{15295010731160621564ull, 1218362683240209ull}}, {{13403970725631263532ull, 1949380293184335ull}}, {{10723176580505010824ull, 1559504234547468ull}}, {{15957238893887829308ull, 1247603387637974ull}}, {{14463535785994795920ull, 1996165420220759ull}}, {{15260177443537747060ull, 1596932336176607ull}}, {{4829444325346377000ull, 1277545868941286ull}}, {{348413291070382556ull, 2044073390306058ull}}, {{7657428262340126692ull, 1635258712244846ull}}, {{2436593795130191028ull, 1308206969795877ull}}, {{7587898886950215972ull, 2093131151673403ull}}, {{13449016739043993424ull, 1674504921338722ull}}, {{3380515761751374092ull, 1339603937070978ull}}, {{1719476404060288224ull, 2143366299313565ull}}, {{1375581123248230580ull, 1714693039450852ull}}, {{12168511342824315432ull, 1371754431560681ull}}, {{12090920519035084048ull, 2194807090497090ull}}, {{9672736415228067236ull, 1755845672397672ull}}, {{359491502698633144ull, 1404676537918138ull}}, {{15332581663285454324ull, 2247482460669020ull}}, {{12266065330628363456ull, 1797985968535216ull}}, {{6123503449760780444ull, 1438388774828173ull}}, {{12277500389292445000ull, 1150711019862538ull}}, {{15954651808126001680ull, 1841137631780061ull}}, {{9074372631758891020ull, 1472910105424049ull}}, {{10948846920149023140ull, 1178328084339239ull}}, {{6450108628012706052ull, 1885324934942783ull}}, {{12538784531893985488ull, 1508259947954226ull}}, {{6341678810773278068ull, 1206607958363381ull}}, {{2767988467753424260ull, 1930572733381410ull}}, {{2214390774202739408ull, 1544458186705128ull}}, {{9150210248846012172ull, 1235566549364102ull}}, {{18329685212895529800ull, 1976906478982563ull}}, {{3595701726090692872ull, 1581525183186051ull}}, {{17633956639840195588ull, 1265220146548840ull}}, {{9767586550034761328ull, 2024352234478145ull}}, {{7814069240027809064ull, 1619481787582516ull}}, {{2561906577280336928ull, 1295585430066013ull}}, {{409701708906628760ull, 2072936688105621ull}}, {{15085156626092944300ull, 1658349350484496ull}}, {{8378776486132445116ull, 1326679480387597ull}}, {{17095391192553822512ull, 2122687168620155ull}}, {{13676312954043058008ull, 1698149734896124ull}}, {{14630399177976356728ull, 1358519787916899ull}}, {{12340592240536439800ull, 2173631660667039ull}}, {{13561822607171062160ull, 1738905328533631ull}}, {{7160109270994939404ull, 1391124262826905ull}}, {{11456174833591903052ull, 2225798820523048ull}}, {{16543637496357343088ull, 1780639056418438ull}}, {{2166863552860143500ull, 1424511245134751ull}}, {{16490886101255756092ull, 1139608996107800ull}}, {{7938673688299658132ull, 1823374393772481ull}}, {{2661590135897816180ull, 1458699515017985ull}}, {{2129272108718252944ull, 1166959612014388ull}}, {{18164230632916846008ull, 1867135379223020ull}}, {{14531384506333476804ull, 1493708303378416ull}}, {{7935758790324871120ull, 1194966642702733ull}}, {{9007865249777883472ull, 1911946628324373ull}}, {{14584989829306127424ull, 1529557302659498ull}}, {{599945419219170968ull, 1223645842127599ull}}, {{8338610300234494196ull, 1957833347404158ull}}, {{14049585869671416004ull, 1566266677923326ull}}, {{7550319880995222480ull, 1253013342338661ull}}, {{4701814180108535320ull, 2004821347741858ull}}, {{11140148973570648904ull, 1603857078193486ull}}, {{5222770364114608800ull, 1283085662554789ull}}, {{15735130212067194724ull, 2052937060087662ull}}, {{5209406540169935132ull, 1642349648070130ull}}, {{4167525232135948108ull, 1313879718456104ull}}, {{14046738000901337616ull, 2102207549529766ull}}, {{7548041585979159772ull, 1681766039623813ull}}, {{13417130898267148464ull, 1345412831699050ull}}, {{3020665363517885924ull, 2152660530718481ull}}, {{17173927549781950032ull, 1722128424574784ull}}, {{17428490854567470348ull, 1377702739659827ull}}, {{13128190108340311268ull, 2204324383455724ull}}, {{14191900901414159336ull, 1763459506764579ull}}, {{15042869535873237792ull, 1410767605411663ull}}, {{966249184472859264ull, 1128614084329331ull}}, {{12614045139382305792ull, 1805782534926929ull}}, {{13780584926247754956ull, 1444626027941543ull}}, {{18403165570482024612ull, 1155700822353234ull}}, {{18377018468545508408ull, 1849121315765175ull}}, {{14701614774836406728ull, 1479297052612140ull}}, {{11761291819869125380ull, 1183437642089712ull}}, {{4060671652822959320ull, 1893500227343540ull}}, {{3248537322258367456ull, 1514800181874832ull}}, {{13666876302032424932ull, 1211840145499865ull}}, {{3420258009542328276ull, 1938944232799785ull}}, {{2736206407633862620ull, 1551155386239828ull}}, {{9567662755590910744ull, 1240924308991862ull}}, {{550865149977815896ull, 1985478894386980ull}}, {{440692119982252716ull, 1588383115509584ull}}, {{4041902510727712496ull, 1270706492407667ull}}, {{10156392831906250320ull, 2033130387852267ull}}, {{746416636041179608ull, 1626504310281814ull}}, {{4286482123574854008ull, 1301203448225451ull}}, {{17926417841945497388ull, 2081925517160721ull}}, {{10651785458814487584ull, 1665540413728577ull}}, {{1142730737567769420ull, 1332432330982862ull}}, {{5517717994850341400ull, 2131891729572579ull}}, {{8103523210622183440ull, 1705513383658063ull}}, {{13861516197981567400ull, 1364410706926450ull}}, {{3731681843060956224ull, 2183057131082321ull}}, {{17742740733416406272ull, 1746445704865856ull}}, {{10504843771991214692ull, 1397156563892685ull}}, {{16807750035185943512ull, 2235450502228296ull}}, {{9756851213406844484ull, 1788360401782637ull}}, {{426783341241654940ull, 1430688321426110ull}}, {{341426672993323952ull, 1144550657140888ull}}, {{15303677935756959620ull, 1831281051425420ull}}, {{12242942348605567696ull, 1465024841140336ull}}, {{6105005064142543832ull, 1172019872912269ull}}, {{17146705732111890780ull, 1875231796659630ull}}, {{13717364585689512624ull, 1500185437327704ull}}, {{14663240483293520420ull, 1200148349862163ull}}, {{1325091884818170736ull, 1920237359779462ull}}, {{12128119952080267556ull, 1536189887823569ull}}, {{13391844776406124368ull, 1228951910258855ull}}, {{2980207568540247376ull, 1966323056414169ull}}, {{6073514869574108224ull, 1573058445131335ull}}, {{4858811895659286580ull, 1258446756105068ull}}, {{4084750218312948204ull, 2013514809768109ull}}, {{6957148989392268884ull, 1610811847814487ull}}, {{16633765635739546076ull, 1288649478251589ull}}, {{15545978572957542756ull, 2061839165202543ull}}, {{1368736414140303236ull, 1649471332162035ull}}, {{1094989131312242588ull, 1319577065729628ull}}, {{16509377869067229432ull, 2111323305167404ull}}, {{16896851109995693868ull, 1689058644133923ull}}, {{2449434443770824124ull, 1351246915307139ull}}, {{11297792739517139248ull, 2161995064491422ull}}, {{1659536562129890752ull, 1729596051593138ull}}, {{8706326879187733248ull, 1383676841274510ull}}, {{13930123006700373196ull, 2213882946039216ull}}, {{7454749590618388236ull, 1771106356831373ull}}, {{13342497301978531232ull, 1416885085465098ull}}, {{18052695471066645632ull, 1133508068372078ull}}, {{6748219865255171076ull, 1813612909395326ull}}, {{1709227077462226536ull, 1450890327516261ull}}, {{16124776920937422520ull, 1160712262013008ull}}, {{3663550185048414096ull, 1857139619220814ull}}, {{6620188962780641600ull, 1485711695376651ull}}, {{1606802355482602956ull, 1188569356301321ull}}, {{13638930212997895700ull, 1901710970082113ull}}, {{18289841799882137208ull, 1521368776065690ull}}, {{14631873439905709764ull, 1217095020852552ull}}, {{8653602244881494332ull, 1947352033364084ull}}, {{10612230610647105788ull, 1557881626691267ull}}, {{1111086859033863984ull, 1246305301353014ull}}, {{9156436603938003020ull, 1994088482164822ull}}, {{18393195727376133388ull, 1595270785731857ull}}, {{7335858952417086064ull, 1276216628585486ull}}, {{4358676694383517056ull, 2041946605736778ull}}, {{10865638984990634288ull, 1633557284589422ull}}, {{1313813558508686784ull, 1306845827671538ull}}, {{16859496952581540148ull, 2090953324274460ull}}, {{13487597562065232120ull, 1672762659419568ull}}, {{18168775679136006340ull, 1338210127535654ull}}, {{18001994642391879180ull, 2141136204057047ull}}, {{7022898084429682696ull, 1712908963245638ull}}, {{12997016097027566804ull, 1370327170596510ull}}, {{2348481681534555268ull, 2192523472954417ull}}, {{12946831789453375184ull, 1754018778363533ull}}, {{17736163061046520792ull, 1403215022690826ull}}, {{2552419194481061008ull, 2245144036305323ull}}, {{9420632985068669452ull, 1796115229044258ull}}, {{14915204017538756208ull, 1436892183235406ull}}, {{8242814399289094644ull, 1149513746588325ull}}, {{13188503038862551432ull, 1839221994541320ull}}, {{10550802431090041144ull, 1471377595633056ull}}, {{4751293130130122592ull, 1177102076506445ull}}, {{7602069008208196148ull, 1883363322410312ull}}, {{17149701650792287888ull, 1506690657928249ull}}, {{17409110135375740632ull, 1205352526342599ull}}, {{16786529772375454044ull, 1928564042148159ull}}, {{17118572632642273556ull, 1542851233718527ull}}, {{6316160476629998200ull, 1234280986974822ull}}, {{13795205577349907444ull, 1974849579159715ull}}, {{11036164461879925956ull, 1579879663327772ull}}, {{1450233940020120116ull, 1263903730662218ull}}, {{17077769562999833480ull, 2022245969059548ull}}, {{2594169206174135816ull, 1617796775247639ull}}, {{5764684179681218976ull, 1294237420198111ull}}, {{1844797058006129712ull, 2070779872316978ull}}, {{8854535275888724416ull, 1656623897853582ull}}, {{18151674664936710504ull, 1325299118282865ull}}, {{10595935390189185188ull, 2120478589252585ull}}, {{8476748312151348152ull, 1696382871402068ull}}, {{14160096279204899168ull, 1357106297121654ull}}, {{11588107602502107700ull, 2171370075394647ull}}, {{1891788452517865512ull, 1737096060315718ull}}, {{8892128391498113056ull, 1389676848252574ull}}, {{3159358982171249920ull, 2223482957204119ull}}, {{6216836000478910260ull, 1778786365763295ull}}, {{4973468800383128208ull, 1423029092610636ull}}, {{289426225564592244ull, 1138423274088509ull}}, {{7841779590387168236ull, 1821477238541614ull}}, {{9962772487051644912ull, 1457181790833291ull}}, {{4280869174899405604ull, 1165745432666633ull}}, {{3160041865097138648ull, 1865192692266613ull}}, {{9906731121561531564ull, 1492154153813290ull}}, {{7925384897249225252ull, 1193723323050632ull}}, {{16369964650340670724ull, 1909957316881011ull}}, {{9406622905530626256ull, 1527965853504809ull}}, {{11214647139166411328ull, 1222372682803847ull}}, {{3186040163698616832ull, 1955796292486156ull}}, {{17306227389926534760ull, 1564637033988924ull}}, {{17534330726683138128ull, 1251709627191139ull}}, {{16986882718467290040ull, 2002735403505823ull}}, {{2521459730548101060ull, 1602188322804659ull}}, {{5706516599180391172ull, 1281750658243727ull}}, {{12819775373430536200ull, 2050801053189963ull}}, {{17634517928228249604ull, 1640640842551970ull}}, {{14107614342582599684ull, 1312512674041576ull}}, {{15193485318648338848ull, 2100020278466522ull}}, {{4776090625434850432ull, 1680016222773218ull}}, {{11199570129831700992ull, 1344012978218574ull}}, {{6851265763504990620ull, 2150420765149719ull}}, {{9170361425545902816ull, 1720336612119775ull}}, {{7336289140436722252ull, 1376269289695820ull}}, {{11738062624698755608ull, 2202030863513312ull}}, {{2011752470275183840ull, 1761624690810650ull}}, {{1609401976220147072ull, 1409299752648520ull}}, {{1287521580976117656ull, 1127439802118816ull}}, {{13128080973787519220ull, 1803903683390105ull}}, {{10502464779030015376ull, 1443122946712084ull}}, {{12091320637965922624ull, 1154498357369667ull}}, {{4588717761777834908ull, 1847197371791468ull}}, {{11049671838906088572ull, 1477757897433174ull}}, {{12529086285866781180ull, 1182206317946539ull}}, {{8978491613161118920ull, 1891530108714463ull}}, {{14561490920012715780ull, 1513224086971570ull}}, {{11649192736010172624ull, 1210579269577256ull}}, {{11260010748132455556ull, 1936926831323610ull}}, {{9008008598505964444ull, 1549541465058888ull}}, {{14585104508288592200ull, 1239633172047110ull}}, {{4889423139552195904ull, 1983413075275377ull}}, {{14979584955867487692ull, 1586730460220301ull}}, {{8294319149952079832ull, 1269384368176241ull}}, {{5892213010439507084ull, 2031014989081986ull}}, {{1024421593609695344ull, 1624811991265589ull}}, {{4508886089629666600ull, 1299849593012471ull}}, {{18282264187633197528ull, 2079759348819953ull}}, {{3557764905880827052ull, 1663807479055963ull}}, {{10224909554188482288ull, 1331045983244770ull}}, {{16359855286701571664ull, 2129673573191632ull}}, {{5709186599877436684ull, 1703738858553306ull}}, {{878000465160039024ull, 1362991086842645ull}}, {{1404800744256062436ull, 2180785738948232ull}}, {{12191887039630580920ull, 1744628591158585ull}}, {{9753509631704464736ull, 1395702872926868ull}}, {{11916266595985233256ull, 2233124596682989ull}}, {{13222362091530096928ull, 1786499677346391ull}}, {{6888540858482167216ull, 1429199741877113ull}}, {{12889530316269554420ull, 1143359793501690ull}}, {{2176504432321735456ull, 1829375669602705ull}}, {{1741203545857388364ull, 1463500535682164ull}}, {{5082311651427821016ull, 1170800428545731ull}}, {{753001012800692980ull, 1873280685673170ull}}, {{602400810240554384ull, 1498624548538536ull}}, {{15239315907160084800ull, 1198899638830828ull}}, {{2246812563004673740ull, 1918239422129326ull}}, {{16554845309371380284ull, 1534591537703460ull}}, {{13243876247497104228ull, 1227673230162768ull}}, {{17500853181253456440ull, 1964277168260429ull}}, {{17690031359744675476ull, 1571421734608343ull}}, {{3083978643570009412ull, 1257137387686675ull}}, {{4934365829712015056ull, 2011419820298680ull}}, {{3947492663769612044ull, 1609135856238944ull}}, {{6847342945757599960ull, 1287308684991155ull}}, {{10955748713212159936ull, 2059693895985848ull}}, {{16143296600053548596ull, 1647755116788678ull}}, {{1846590835817107908ull, 1318204093430943ull}}, {{17711940596275013944ull, 2109126549489508ull}}, {{3101506032794280184ull, 1687301239591607ull}}, {{13549251270461155116ull, 1349840991673285ull}}, {{3232057959028296572ull, 2159745586677257ull}}, {{13653692811448368228ull, 1727796469341805ull}}, {{10922954249158694580ull, 1382237175473444ull}}, {{6408680354428180360ull, 2211579480757511ull}}, {{1437595468800633964ull, 1769263584606009ull}}, {{4839425189782417496ull, 1415410867684807ull}}, {{14939586596051664964ull, 1132328694147845ull}}, {{5456594479973112332ull, 1811725910636553ull}}, {{11743973213462310512ull, 1449380728509242ull}}, {{2016480941286027760ull, 1159504582807394ull}}, {{10605067135541465064ull, 1855207332491830ull}}, {{8484053708433172052ull, 1484165865993464ull}}, {{10476591781488447964ull, 1187332692794771ull}}, {{9383849220897696100ull, 1899732308471634ull}}, {{11196428191460067200ull, 1519785846777307ull}}, {{1578444923684233116ull, 1215828677421846ull}}, {{13593558322120503952ull, 1945325883874953ull}}, {{18253544287180223808ull, 1556260707099962ull}}, {{7224137800260358400ull, 1245008565679970ull}}, {{11558620480416573440ull, 1992013705087952ull}}, {{1868198754849438108ull, 1593610964070362ull}}, {{12562605448105281456ull, 1274888771256289ull}}, {{9032122272742719360ull, 2039822034010063ull}}, {{14604395447677996132ull, 1631857627208050ull}}, {{11683516358142396904ull, 1305486101766440ull}}, {{246882099318283436ull, 2088777762826305ull}}, {{197505679454626748ull, 1671022210261044ull}}, {{3847353358305611720ull, 1336817768208835ull}}, {{6155765373288978756ull, 2138908429134136ull}}, {{1235263483889272680ull, 1711126743307309ull}}, {{4677559601853328468ull, 1368901394645847ull}}, {{11173444177707235872ull, 2190242231433355ull}}, {{8938755342165788696ull, 1752193785146684ull}}, {{10840353088474541280ull, 1401755028117347ull}}, {{2587169682591624756ull, 2242808044987756ull}}, {{16827131005040941096ull, 1794246435990204ull}}, {{17151053618774663200ull, 1435397148792163ull}}, {{2652796450793999592ull, 1148317719033731ull}}, {{15312520765496130316ull, 1837308350453969ull}}, {{15939365427138814576ull, 1469846680363175ull}}, {{12751492341711051660ull, 1175877344290540ull}}, {{1955643673028131040ull, 1881403750864865ull}}, {{1564514938422504832ull, 1505123000691892ull}}, {{12319658394963734836ull, 1204098400553513ull}}, {{16022104617200065416ull, 1926557440885621ull}}, {{9128334879018142008ull, 1541245952708497ull}}, {{18370714347440244576ull, 1232996762166797ull}}, {{14635747696936750028ull, 1972794819466876ull}}, {{8019249342807489700ull, 1578235855573501ull}}, {{2726050659504081436ull, 1262588684458801ull}}, {{15429727499432261268ull, 2020141895134081ull}}, {{8654433184803898692ull, 1616113516107265ull}}, {{6923546547843118952ull, 1292890812885812ull}}, {{14767023291290900648ull, 2068625300617299ull}}, {{15502967447774630840ull, 1654900240493839ull}}, {{16091722772961614996ull, 1323920192395071ull}}, {{18368058807254763348ull, 2118272307832114ull}}, {{18383795860545721000ull, 1694617846265691ull}}, {{11017687873694666476ull, 1355694277012553ull}}, {{13938951783169556044ull, 2169110843220085ull}}, {{11151161426535644832ull, 1735288674576068ull}}, {{16299626770712336512ull, 1388230939660854ull}}, {{15011356388914007452ull, 2221169503457367ull}}, {{4630387481647385316ull, 1776935602765894ull}}, {{7393658800059818576ull, 1421548482212715ull}}, {{5914927040047854860ull, 1137238785770172ull}}, {{13153232078818478100ull, 1819582057232275ull}}, {{10522585663054782480ull, 1455665645785820ull}}, {{8418068530443825984ull, 1164532516628656ull}}, {{6090212019226300928ull, 1863252026605850ull}}, {{4872169615381040740ull, 1490601621284680ull}}, {{3897735692304832592ull, 1192481297027744ull}}, {{13615074737171552796ull, 1907970075244390ull}}, {{10892059789737242236ull, 1526376060195512ull}}, {{1334950202305973144ull, 1221100848156410ull}}, {{2135920323689557028ull, 1953761357050256ull}}, {{16466131517919286916ull, 1563009085640204ull}}, {{16862254029077339856ull, 1250407268512163ull}}, {{4843513558072281832ull, 2000651629619462ull}}, {{14942857290683556432ull, 1600521303695569ull}}, {{15643634647288755468ull, 1280417042956455ull}}, {{6583071361952457136ull, 2048667268730329ull}}, {{8955805904303876032ull, 1638933814984263ull}}, {{14543342352926921472ull, 1311147051987410ull}}, {{4822603690973522740ull, 2097835283179857ull}}, {{14926129397004549160ull, 1678268226543885ull}}, {{11940903517603639328ull, 1342614581235108ull}}, {{15416096813423912604ull, 2148183329976173ull}}, {{1264831006513399112ull, 1718546663980939ull}}, {{4701213619952629612ull, 1374837331184751ull}}, {{143244162440386736ull, 2199739729895602ull}}, {{11182641774178040356ull, 1759791783916481ull}}, {{5256764604600521964ull, 1407833427133185ull}}, {{4205411683680417568ull, 1126266741706548ull}}, {{3039309879146757788ull, 1802026786730477ull}}, {{13499494347543137200ull, 1441621429384381ull}}, {{7110246663292599436ull, 1153297143507505ull}}, {{11376394661268159100ull, 1845275429612008ull}}, {{16479813358498347928ull, 1476220343689606ull}}, {{9494501872056768016ull, 1180976274951685ull}}, {{15191202995290828828ull, 1889562039922696ull}}, {{8463613581490752740ull, 1511649631938157ull}}, {{17838937309418333160ull, 1209319705550525ull}}, {{10095555621359781444ull, 1934911528880841ull}}, {{4387095682345914832ull, 1547929223104673ull}}, {{10888374175360552512ull, 1238343378483738ull}}, {{13732049865834973696ull, 1981349405573981ull}}, {{7296291077926068632ull, 1585079524459185ull}}, {{5837032862340854904ull, 1268063619567348ull}}, {{5649903765003457528ull, 2028901791307757ull}}, {{15587969456228496992ull, 1623121433046205ull}}, {{12470375564982797592ull, 1298497146436964ull}}, {{8884554459746745180ull, 2077595434299143ull}}, {{14486341197281216788ull, 1662076347439314ull}}, {{15278421772566883756ull, 1329661077951451ull}}, {{17066777206623193360ull, 2127457724722322ull}}, {{6274724135814734044ull, 1701966179777858ull}}, {{12398476938135607880ull, 1361572943822286ull}}, {{12458865471533151964ull, 2178516710115658ull}}, {{17345790006710342216ull, 1742813368092526ull}}, {{10187283190626363448ull, 1394250694474021ull}}, {{8920955475518360872ull, 2230801111158434ull}}, {{10826113195156599020ull, 1784640888926747ull}}, {{1282192926641458572ull, 1427712711141398ull}}, {{8404451970796987504ull, 1142170168913118ull}}, {{9757774338533269684ull, 1827472270260989ull}}, {{11495568285568526068ull, 1461977816208791ull}}, {{5507105813712910532ull, 1169582252967033ull}}, {{5122020487198746528ull, 1871331604747253ull}}, {{11476314019242817868ull, 1497065283797802ull}}, {{1802353585910433648ull, 1197652227038242ull}}, {{6573114552198604160ull, 1916243563261187ull}}, {{16326538085984614296ull, 1532994850608949ull}}, {{16750579283529601760ull, 1226395880487159ull}}, {{15732880409421631848ull, 1962233408779455ull}}, {{12586304327537305480ull, 1569786727023564ull}}, {{13758392276771754708ull, 1255829381618851ull}}, {{14634730013350986884ull, 2009327010590162ull}}, {{4329086381196968860ull, 1607461608472130ull}}, {{3463269104957575088ull, 1285969286777704ull}}, {{12919928197415940788ull, 2057550858844326ull}}, {{6646593743190842308ull, 1646040687075461ull}}, {{1627926179810763524ull, 1316832549660369ull}}, {{9983379517181042284ull, 2106932079456590ull}}, {{7986703613744833828ull, 1685545663565272ull}}, {{17457409335221598032ull, 1348436530852217ull}}, {{13174459677386915556ull, 2157498449363548ull}}, {{17918265371393353092ull, 1725998759490838ull}}, {{3266565852888951504ull, 1380799007592671ull}}, {{16294551808848053376ull, 2209278412148273ull}}, {{1967595002852711732ull, 1767422729718619ull}}, {{5263424817024079708ull, 1413938183774895ull}}, {{4210739853619263764ull, 1131150547019916ull}}, {{17805230210016552996ull, 1809840875231865ull}}, {{14244184168013242396ull, 1447872700185492ull}}, {{4016649704926773272ull, 1158298160148394ull}}, {{13805337157366657880ull, 1853277056237430ull}}, {{11044269725893326304ull, 1482621644989944ull}}, {{12524764595456571364ull, 1186097315991955ull}}, {{1592879279020962568ull, 1897755705587129ull}}, {{4963652237958680380ull, 1518204564469703ull}}, {{11349619419850764948ull, 1214563651575762ull}}, {{3401995812793582628ull, 1943301842521220ull}}, {{2721596650234866100ull, 1554641474016976ull}}, {{16934672579155534172ull, 1243713179213580ull}}, {{8648732052939303064ull, 1989941086741729ull}}, {{10608334457093352772ull, 1591952869393383ull}}, {{15865365195158502864ull, 1273562295514706ull}}, {{18005886682769783936ull, 2037699672823530ull}}, {{14404709346215827148ull, 1630159738258824ull}}, {{15213116291714572044ull, 1304127790607059ull}}, {{13272939622517584300ull, 2086604464971295ull}}, {{10618351698014067440ull, 1669283571977036ull}}, {{4805332543669343628ull, 1335426857581629ull}}, {{15067229699354770452ull, 2136682972130606ull}}, {{8364434944741906040ull, 1709346377704485ull}}, {{6691547955793524832ull, 1367477102163588ull}}, {{7017127914527729408ull, 2187963363461741ull}}, {{1924353516880273200ull, 1750370690769393ull}}, {{8918180442988039208ull, 1400296552615514ull}}, {{3201042264555131764ull, 2240474484184823ull}}, {{9939531441127926056ull, 1792379587347858ull}}, {{15330322782386161492ull, 1433903669878286ull}}, {{8574909411167018868ull, 1147122935902629ull}}, {{2651808613641499224ull, 1835396697444207ull}}, {{13189493335138930348ull, 1468317357955365ull}}, {{10551594668111144276ull, 1174653886364292ull}}, {{2125156210010189552ull, 1879446218182868ull}}, {{9078822597491972288ull, 1503556974546294ull}}, {{10952406892735488152ull, 1202845579637035ull}}, {{17523851028376781044ull, 1924552927419256ull}}, {{10329732007959514512ull, 1539642341935405ull}}, {{8263785606367611612ull, 1231713873548324ull}}, {{2154010525962447608ull, 1970742197677319ull}}, {{5412557235511868408ull, 1576593758141855ull}}, {{4330045788409494728ull, 1261275006513484ull}}, {{14306770890939012212ull, 2018040010421574ull}}, {{15134765527493120092ull, 1614432008337259ull}}, {{15797161236736406396ull, 1291545606669807ull}}, {{10518062719810608940ull, 2066472970671692ull}}, {{1035752546364666508ull, 1653178376537354ull}}, {{4517950851833643528ull, 1322542701229883ull}}, {{3539372548191919324ull, 2116068321967813ull}}, {{10210195668037356104ull, 1692854657574250ull}}, {{8168156534429884884ull, 1354283726059400ull}}, {{13069050455087815812ull, 2166853961695040ull}}, {{10455240364070252652ull, 1733483169356032ull}}, {{985494661772381472ull, 1386786535484826ull}}, {{12644837903061541328ull, 2218858456775721ull}}, {{6426521507707322740ull, 1775086765420577ull}}, {{16209263650391589160ull, 1420069412336461ull}}, {{9278062105571361004ull, 1136055529869169ull}}, {{3776852924688446640ull, 1817688847790671ull}}, {{17778877598718398604ull, 1454151078232536ull}}, {{10533753264232808560ull, 1163320862586029ull}}, {{5785958778546762728ull, 1861313380137647ull}}, {{15696813467063141152ull, 1489050704110117ull}}, {{5178753144166692272ull, 1191240563288094ull}}, {{15664702660150528284ull, 1905984901260950ull}}, {{12531762128120422628ull, 1524787921008760ull}}, {{10025409702496338104ull, 1219830336807008ull}}, {{12351306709252230640ull, 1951728538891213ull}}, {{17259742996885605160ull, 1561382831112970ull}}, {{13807794397508484128ull, 1249106264890376ull}}, {{14713773406529753956ull, 1998570023824602ull}}, {{4392321095739982520ull, 1598856019059682ull}}, {{14581903320817716984ull, 1279084815247745ull}}, {{4884301239598795560ull, 2046535704396393ull}}, {{11286138621162857096ull, 1637228563517114ull}}, {{12718259711672196000ull, 1309782850813691ull}}, {{12970517909191692952ull, 2095652561301906ull}}, {{6687065512611444040ull, 1676522049041525ull}}, {{5349652410089155232ull, 1341217639233220ull}}, {{8559443856142648368ull, 2145948222773152ull}}, {{17915601529139849664ull, 1716758578218521ull}}, {{10643132408569969408ull, 1373406862574817ull}}, {{2271616594744309760ull, 2197450980119708ull}}, {{9195990905279268456ull, 1757960784095766ull}}, {{3667443909481504440ull, 1406368627276613ull}}, {{2178561440428496784ull, 2250189803642581ull}}, {{16500244411310438720ull, 1800151842914064ull}}, {{16889544343790261296ull, 1440121474331251ull}}, {{9822286660290298716ull, 1152097179465001ull}}, {{8336961026980657300ull, 1843355487144002ull}}, {{17737615265810256808ull, 1474684389715201ull}}, {{10500743397906295124ull, 1179747511772161ull}}, {{9422491807166251552ull, 1887596018835458ull}}, {{14916691075216821888ull, 1510076815068366ull}}, {{8244004045431547184ull, 1208061452054693ull}}, {{9501057657948565176ull, 1932898323287509ull}}, {{11290194941100762464ull, 1546318658630007ull}}, {{1653458323396789324ull, 1237054926904006ull}}, {{13713579761660593888ull, 1979287883046409ull}}, {{14660212624070385432ull, 1583430306437127ull}}, {{4349472469772487700ull, 1266744245149702ull}}, {{10648504766377890644ull, 2026790792239523ull}}, {{15897501442586133160ull, 1621432633791618ull}}, {{1649954709843175560ull, 1297146107033295ull}}, {{2639927535749080896ull, 2075433771253272ull}}, {{13179988472824995688ull, 1660347017002617ull}}, {{3165293148776175904ull, 1328277613602094ull}}, {{12443166667525702092ull, 2125244181763350ull}}, {{9954533334020561672ull, 1700195345410680ull}}, {{7963626667216449336ull, 1360156276328544ull}}, {{1673756223320587972ull, 2176250042125671ull}}, {{16096400237624111668ull, 1741000033700536ull}}, {{9187771375357379012ull, 1392800026960429ull}}, {{3632387756346075452ull, 2228480043136687ull}}, {{13973956649302591332ull, 1782784034509349ull}}, {{14868514134183983388ull, 1426227227607479ull}}, {{15584160122089097032ull, 1140981782085983ull}}, {{2798563306891093312ull, 1825570851337574ull}}, {{5928199460254784972ull, 1460456681070059ull}}, {{8431908382945738300ull, 1168365344856047ull}}, {{17180402227455091608ull, 1869384551769675ull}}, {{13744321781964073284ull, 1495507641415740ull}}, {{10995457425571258628ull, 1196406113132592ull}}, {{2835336621946372512ull, 1914249781012148ull}}, {{9646966927040918656ull, 1531399824809718ull}}, {{15096271171116555572ull, 1225119859847774ull}}, {{13085987429560757944ull, 1960191775756439ull}}, {{14158138758390516680ull, 1568153420605151ull}}, {{7637162191970503020ull, 1254522736484121ull}}, {{4840761877668984188ull, 2007236378374594ull}}, {{7561958316877097672ull, 1605789102699675ull}}, {{6049566653501678136ull, 1284631282159740ull}}, {{9679306645602685020ull, 2055410051455584ull}}, {{11432794131224058340ull, 1644328041164467ull}}, {{1767537675495426024ull, 1315462432931574ull}}, {{10206757910276502288ull, 2104739892690518ull}}, {{15544103957705022476ull, 1683791914152414ull}}, {{16124631980905928304ull, 1347033531321931ull}}, {{18420713539965664640ull, 2155253650115090ull}}, {{14736570831972531712ull, 1724202920092072ull}}, {{4410559036094204724ull, 1379362336073658ull}}, {{3367545643008817236ull, 2206979737717853ull}}, {{10072734143890874432ull, 1765583790174282ull}}, {{679489685628878900ull, 1412467032139426ull}}, {{15300987007470744412ull, 1129973625711540ull}}, {{6034835138243639444ull, 1807957801138465ull}}, {{4827868110594911556ull, 1446366240910772ull}}, {{14930340932701660212ull, 1157092992728617ull}}, {{9131150233355015052ull, 1851348788365788ull}}, {{14683617816167832688ull, 1481079030692630ull}}, {{11746894252934266148ull, 1184863224554104ull}}, {{7726984360469094868ull, 1895781159286567ull}}, {{17249633932601006864ull, 1516624927429253ull}}, {{2731660701855074520ull, 1213299941943403ull}}, {{681308308226208912ull, 1941279907109445ull}}, {{545046646580967128ull, 1553023925687556ull}}, {{15193432576232414996ull, 1242419140550044ull}}, {{13241445677746133024ull, 1987870624880071ull}}, {{6903807727454996096ull, 1590296499904057ull}}, {{16591092626189727848ull, 1272237199923245ull}}, {{8099004128194012940ull, 2035579519877193ull}}, {{13857900932039030996ull, 1628463615901754ull}}, {{14775669560373135120ull, 1302770892721403ull}}, {{1504978408145554256ull, 2084433428354246ull}}, {{15961377985484084696ull, 1667546742683396ull}}, {{9079753573645357436ull, 1334037394146717ull}}, {{18216954532574482220ull, 2134459830634747ull}}, {{7194865996575765128ull, 1707567864507798ull}}, {{13134590426744432748ull, 1366054291606238ull}}, {{17325995868049182076ull, 2185686866569981ull}}, {{10171447879697435336ull, 1748549493255985ull}}, {{8137158303757948268ull, 1398839594604788ull}}, {{9330104471270806908ull, 2238143351367661ull}}, {{3774734762274735204ull, 1790514681094129ull}}, {{6709136624561698484ull, 1432411744875303ull}}, {{12746006929133179436ull, 1145929395900242ull}}, {{5636215827645445804ull, 1833487033440388ull}}, {{11887670291600177288ull, 1466789626752310ull}}, {{9510136233280141832ull, 1173431701401848ull}}, {{11526869158506316608ull, 1877490722242957ull}}, {{1842797697321232640ull, 1501992577794366ull}}, {{16231633416824627404ull, 1201594062235492ull}}, {{11213218207951762552ull, 1922550499576788ull}}, {{16349272195845230688ull, 1538040399661430ull}}, {{13079417756676184552ull, 1230432319729144ull}}, {{9859021966456164312ull, 1968691711566631ull}}, {{4197868758423021128ull, 1574953369253305ull}}, {{3358295006738416900ull, 1259962695402644ull}}, {{12751969640265287688ull, 2015940312644230ull}}, {{10201575712212230152ull, 1612752250115384ull}}, {{11850609384511694444ull, 1290201800092307ull}}, {{4203579756251069820ull, 2064322880147692ull}}, {{14430910249226586824ull, 1651458304118153ull}}, {{476681755155538488ull, 1321166643294523ull}}, {{15520086067216502876ull, 2113866629271236ull}}, {{8726720039031291976ull, 1691093303416989ull}}, {{10670724845966943904ull, 1352874642733591ull}}, {{9694462124063289604ull, 2164599428373746ull}}, {{4066220884508721360ull, 1731679542698997ull}}, {{14321023151832708056ull, 1385343634159197ull}}, {{8156241783964691596ull, 2216549814654716ull}}, {{2835644612429842956ull, 1773239851723773ull}}, {{9647213319427695008ull, 1418591881379018ull}}, {{15096468285025976652ull, 1134873505103214ull}}, {{13086302811815831676ull, 1815797608165143ull}}, {{17847739878936485988ull, 1452638086532114ull}}, {{17967540717891099112ull, 1162110469225691ull}}, {{2922623445432386320ull, 1859376750761107ull}}, {{13406145200571640024ull, 1487501400608885ull}}, {{10724916160457312020ull, 1190001120487108ull}}, {{13470517041989788908ull, 1904001792779373ull}}, {{18155111263075651772ull, 1523201434223498ull}}, {{3456042566234790448ull, 1218561147378799ull}}, {{12908365735459485368ull, 1949697835806078ull}}, {{17705390217851408940ull, 1559758268644862ull}}, {{6785614544797306504ull, 1247806614915890ull}}, {{10856983271675690408ull, 1996490583865424ull}}, {{12374935432082462648ull, 1597192467092339ull}}, {{13589297160407880444ull, 1277753973673871ull}}, {{14364177827168788064ull, 2044406357878194ull}}, {{15180691076476940772ull, 1635525086302555ull}}, {{12144552861181552616ull, 1308420069042044ull}}, {{8363238133664753220ull, 2093472110467271ull}}, {{3001241692189892252ull, 1674777688373817ull}}, {{13469039797977644772ull, 1339822150699053ull}}, {{17861114862022321312ull, 2143715441118485ull}}, {{14288891889617857048ull, 1714972352894788ull}}, {{363067067468554668ull, 1371977882315831ull}}, {{11648953752175418440ull, 2195164611705329ull}}, {{13008511816482245076ull, 1756131689364263ull}}, {{17785507082669616708ull, 1404905351491410ull}}, {{10010067258561835116ull, 2247848562386257ull}}, {{629356177365647448ull, 1798278849909006ull}}, {{15260880200860159248ull, 1438623079927204ull}}, {{15898052975430037724ull, 1150898463941763ull}}, {{3300791872236598416ull, 1841437542306822ull}}, {{13708679942015009704ull, 1473150033845457ull}}, {{3588246324128187116ull, 1178520027076366ull}}, {{16809240562830830356ull, 1885632043322185ull}}, {{13447392450264664284ull, 1508505634657748ull}}, {{18136611589695552072ull, 1206804507726198ull}}, {{6882485655061421380ull, 1930887212361918ull}}, {{12884686153532957748ull, 1544709769889534ull}}, {{13997097737568276524ull, 1235767815911627ull}}, {{7637961121141601144ull, 1977228505458604ull}}, {{9799717711655191240ull, 1581782804366883ull}}, {{15218471798807973636ull, 1265426243493506ull}}, {{16970857248608937172ull, 2024681989589610ull}}, {{13576685798887149740ull, 1619745591671688ull}}, {{18240046268593540436ull, 1295796473337350ull}}, {{10737329956040113084ull, 2073274357339761ull}}, {{4900515150090180144ull, 1658619485871809ull}}, {{7609760934814054436ull, 1326895588697447ull}}, {{15864966310444397424ull, 2123032941915915ull}}, {{12691973048355517940ull, 1698426353532732ull}}, {{2774880809200593704ull, 1358741082826186ull}}, {{15507855738946680900ull, 2173985732521897ull}}, {{5027586961673524072ull, 1739188586017518ull}}, {{11400767198822639904ull, 1391350868814014ull}}, {{7173181073890492876ull, 2226161390102423ull}}, {{13117242488596214948ull, 1780929112081938ull}}, {{17872491620360792604ull, 1424743289665550ull}}, {{14297993296288634084ull, 1139794631732440ull}}, {{4430045200352262920ull, 1823671410771905ull}}, {{3544036160281810336ull, 1458937128617524ull}}, {{6524577742967358592ull, 1167149702894019ull}}, {{17818022018231594392ull, 1867439524630430ull}}, {{14254417614585275512ull, 1493951619704344ull}}, {{15092882906410130732ull, 1195161295763475ull}}, {{5701868576546657560ull, 1912258073221561ull}}, {{872146046495415724ull, 1529806458577249ull}}, {{4387065651938242900ull, 1223845166861799ull}}, {{14398002672585009288ull, 1958152266978878ull}}, {{450355693842276460ull, 1566521813583103ull}}, {{7738982184557641816ull, 1253217450866482ull}}, {{16071720310034137228ull, 2005147921386371ull}}, {{9168027433285399460ull, 1604118337109097ull}}, {{18402468390854050536ull, 1283294669687277ull}}, {{14686554166398839568ull, 2053271471499644ull}}, {{15438592147860981976ull, 1642617177199715ull}}, {{12350873718288785580ull, 1314093741759772ull}}, {{5004002690294415636ull, 2102549986815636ull}}, {{313853337493622188ull, 1682039989452509ull}}, {{3940431484736808072ull, 1345631991562007ull}}, {{9994039190320803240ull, 2153011186499211ull}}, {{4305882537514732268ull, 1722408949199369ull}}, {{7134054844753696136ull, 1377927159359495ull}}, {{11414487751605913820ull, 2204683454975192ull}}, {{1752892571800910408ull, 1763746763980154ull}}, {{5091662872182638652ull, 1410997411184123ull}}, {{11452027927229931568ull, 1128797928947298ull}}, {{14633895868825980184ull, 1806076686315677ull}}, {{4328419065576963500ull, 1444861349052542ull}}, {{14530781696687301768ull, 1155889079242033ull}}, {{1113157826248220892ull, 1849422526787254ull}}, {{4579875075740487036ull, 1479538021429803ull}}, {{11042597690076210276ull, 1183630417143842ull}}, {{2910761045154295152ull, 1893808667430148ull}}, {{9707306465607256768ull, 1515046933944118ull}}, {{15144542801969626060ull, 1212037547155294ull}}, {{13163222038925670728ull, 1939260075448471ull}}, {{6841228816398626256ull, 1551408060358777ull}}, {{16541029497344631976ull, 1241126448287021ull}}, {{640205492558038900ull, 1985802317259235ull}}, {{512164394046431120ull, 1588641853807388ull}}, {{7788429144720965540ull, 1270913483045910ull}}, {{12461486631553544868ull, 2033461572873456ull}}, {{6279840490500925568ull, 1626769258298765ull}}, {{5023872392400740456ull, 1301415406639012ull}}, {{11727544642583095052ull, 2082264650622419ull}}, {{13071384528808386364ull, 1665811720497935ull}}, {{10457107623046709092ull, 1332649376398348ull}}, {{13042023382132824224ull, 2132239002237357ull}}, {{3054921076222438732ull, 1705791201789886ull}}, {{17201332119945592280ull, 1364632961431908ull}}, {{5386038503461485708ull, 2183412738291054ull}}, {{7998179617511098888ull, 1746730190632843ull}}, {{13777241323492699756ull, 1397384152506274ull}}, {{10975539673362588644ull, 2235814644010039ull}}, {{12469780553431981236ull, 1788651715208031ull}}, {{6286475628003674668ull, 1430921372166425ull}}, {{5029180502402939732ull, 1144737097733140ull}}, {{8046688803844703572ull, 1831579356373024ull}}, {{10126699857817673180ull, 1465263485098419ull}}, {{11790708700996048868ull, 1172210788078735ull}}, {{418389847884126576ull, 1875537260925977ull}}, {{11402758322533032228ull, 1500429808740781ull}}, {{5432857843284515460ull, 1200343846992625ull}}, {{8692572549255224736ull, 1920550155188200ull}}, {{6954058039404179788ull, 1536440124150560ull}}, {{5563246431523343832ull, 1229152099320448ull}}, {{5211845475695439808ull, 1966643358912717ull}}, {{15237522824782082816ull, 1573314687130173ull}}, {{1121971815599935280ull, 1258651749704139ull}}, {{9173852534443717100ull, 2013842799526622ull}}, {{18407128471780704648ull, 1611074239621297ull}}, {{7347005147940743072ull, 1288859391697038ull}}, {{8065859421963278592ull, 2062175026715261ull}}, {{2763338722828712552ull, 1649740021372209ull}}, {{5900019793004880364ull, 1319792017097767ull}}, {{13129380483549718904ull, 2111667227356427ull}}, {{3124806757355954476ull, 1689333781885142ull}}, {{13567891850110494552ull, 1351467025508113ull}}, {{18019278145434880960ull, 2162347240812981ull}}, {{10726073701605994444ull, 1729877792650385ull}}, {{8580858961284795556ull, 1383902234120308ull}}, {{10040025523313762564ull, 2214243574592493ull}}, {{15410718048134830700ull, 1771394859673994ull}}, {{16017923253249774880ull, 1417115887739195ull}}, {{12814338602599819904ull, 1133692710191356ull}}, {{13124244134675891204ull, 1813908336306170ull}}, {{10499395307740712960ull, 1451126669044936ull}}, {{4710167431450660044ull, 1160901335235949ull}}, {{14914965519804876720ull, 1857442136377518ull}}, {{863925971618170408ull, 1485953709102015ull}}, {{691140777294536324ull, 1188762967281612ull}}, {{4795174058413168444ull, 1902020747650579ull}}, {{7525488061472445080ull, 1521616598120463ull}}, {{13399088078661776708ull, 1217293278496370ull}}, {{2991796852149291120ull, 1947669245594193ull}}, {{9772135111203253540ull, 1558135396475354ull}}, {{11507056903704513156ull, 1246508317180283ull}}, {{14721942231185310728ull, 1994413307488453ull}}, {{709507340722517612ull, 1595530645990763ull}}, {{7946303502061834736ull, 1276424516792610ull}}, {{12714085603298935580ull, 2042279226868176ull}}, {{6481919667897238140ull, 1633823381494541ull}}, {{1496186919575880188ull, 1307058705195633ull}}, {{17151294330289049592ull, 2091293928313012ull}}, {{6342337834747419028ull, 1673035142650410ull}}, {{5073870267797935224ull, 1338428114120328ull}}, {{4428843613734786032ull, 2141484982592525ull}}, {{3543074890987828828ull, 1713187986074020ull}}, {{2834459912790263060ull, 1370550388859216ull}}, {{15603182304690151868ull, 2192880622174745ull}}, {{12482545843752121496ull, 1754304497739796ull}}, {{6296687860259786872ull, 1403443598191837ull}}, {{13764049391157569320ull, 2245509757106939ull}}, {{14700588327667965780ull, 1796407805685551ull}}, {{8071121847392462300ull, 1437126244548441ull}}, {{2767548663172059516ull, 1149700995638753ull}}, {{738729046333384904ull, 1839521593022005ull}}, {{590983237066707920ull, 1471617274417604ull}}, {{4162135404395276660ull, 1177293819534083ull}}, {{2970067832290532336ull, 1883670111254533ull}}, {{9754751895316246512ull, 1506936089003626ull}}, {{4114452701511086888ull, 1205548871202901ull}}, {{17651170766643469992ull, 1928878193924641ull}}, {{10431587798572865668ull, 1543102555139713ull}}, {{15723967868342113180ull, 1234482044111770ull}}, {{6711604515637829476ull, 1975171270578833ull}}, {{12747981241994084224ull, 1580137016463066ull}}, {{6509036178853357056ull, 1264109613170453ull}}, {{6725109071423460968ull, 2022575381072725ull}}, {{5380087257138768776ull, 1618060304858180ull}}, {{4304069805711015020ull, 1294448243886544ull}}, {{14265209318621444680ull, 2071117190218470ull}}, {{11412167454897155744ull, 1656893752174776ull}}, {{5440385149175814272ull, 1325515001739821ull}}, {{1325918609197482188ull, 2120824002783714ull}}, {{4750083702099896072ull, 1696659202226971ull}}, {{110718146938006536ull, 1357327361781577ull}}, {{3866497849842720780ull, 2171723778850523ull}}, {{10471895909357997272ull, 1737379023080418ull}}, {{15756214356970218464ull, 1389903218464334ull}}, {{14141896526926618572ull, 2223845149542935ull}}, {{11313517221541294856ull, 1779076119634348ull}}, {{16429511406716856532ull, 1423260895707478ull}}, {{2075562681147754256ull, 1138608716565983ull}}, {{18078295548804048100ull, 1821773946505572ull}}, {{7083938809559417836ull, 1457419157204458ull}}, {{13045848677131354912ull, 1165935325763566ull}}, {{13494660253926347216ull, 1865496521221706ull}}, {{7106379388399167448ull, 1492397216977365ull}}, {{5685103510719333960ull, 1193917773581892ull}}, {{12785514431892844660ull, 1910268437731027ull}}, {{2849713916030455080ull, 1528214750184822ull}}, {{13347817577050095032ull, 1222571800147857ull}}, {{6599112864312510764ull, 1956114880236572ull}}, {{16347336735675739580ull, 1564891904189257ull}}, {{5699171759056771016ull, 1251913523351406ull}}, {{1739977185007012980ull, 2003061637362250ull}}, {{1391981748005610384ull, 1602449309889800ull}}, {{1113585398404488308ull, 1281959447911840ull}}, {{1781736637447181292ull, 2051135116658944ull}}, {{5114738124699655356ull, 1640908093327155ull}}, {{4091790499759724284ull, 1312726474661724ull}}, {{13925562429099379504ull, 2100362359458758ull}}, {{72403499053772632ull, 1680289887567007ull}}, {{11125969243468749076ull, 1344231910053605ull}}, {{17801550789549998524ull, 2150771056085768ull}}, {{3173194187414267848ull, 1720616844868615ull}}, {{2538555349931414276ull, 1376493475894892ull}}, {{7751037374632173168ull, 2202389561431827ull}}, {{17268876343931469504ull, 1761911649145461ull}}, {{10125752260403265280ull, 1409529319316369ull}}, {{11789950623064522548ull, 1127623455453095ull}}, {{417176923193684460ull, 1804197528724953ull}}, {{7712439168038768216ull, 1443358022979962ull}}, {{17237997778656745540ull, 1154686418383969ull}}, {{16512750001625061896ull, 1847498269414351ull}}, {{9520851186558139192ull, 1477998615531481ull}}, {{3927332134504601032ull, 1182398892425185ull}}, {{6283731415207361652ull, 1891838227880296ull}}, {{1337636317423978996ull, 1513470582304237ull}}, {{12138155498164914168ull, 1210776465843389ull}}, {{8353002352838131700ull, 1937242345349423ull}}, {{14061099511754326004ull, 1549793876279538ull}}, {{180833165177729836ull, 1239835101023631ull}}, {{11357379508510098704ull, 1983736161637809ull}}, {{12775252421549989288ull, 1586988929310247ull}}, {{2841504307756170784ull, 1269591143448198ull}}, {{857058077667962932ull, 2031345829517117ull}}, {{11753692906360101312ull, 1625076663613693ull}}, {{16781651954571901696ull, 1300061330890954ull}}, {{15782596683089311748ull, 2080098129425527ull}}, {{5247379716987628752ull, 1664078503540422ull}}, {{15265950217815833968ull, 1331262802832337ull}}, {{9668125089537693060ull, 2130020484531740ull}}, {{7734500071630154448ull, 1704016387625392ull}}, {{17255646501529854528ull, 1363213110100313ull}}, {{5472941513996305304ull, 2181140976160502ull}}, {{15446399655422775212ull, 1744912780928401ull}}, {{8667770909596309848ull, 1395930224742721ull}}, {{6489735825870275112ull, 2233488359588354ull}}, {{8881137475438130412ull, 1786790687670683ull}}, {{14483607609834324976ull, 1429432550136546ull}}, {{7897537273125549656ull, 1143546040109237ull}}, {{16325408451742789776ull, 1829673664174779ull}}, {{16749675576136142144ull, 1463738931339823ull}}, {{2331694016683182744ull, 1170991145071859ull}}, {{11109408056176913036ull, 1873585832114974ull}}, {{12576875259683440752ull, 1498868665691979ull}}, {{13750849022488662924ull, 1199094932553583ull}}, {{18312009621239950360ull, 1918551892085733ull}}, {{3581561252766229316ull, 1534841513668587ull}}, {{13933295446438714424ull, 1227873210934869ull}}, {{11225226270076212108ull, 1964597137495791ull}}, {{5290832201319059364ull, 1571677709996633ull}}, {{11611363390539068136ull, 1257342167997306ull}}, {{11199483795378688372ull, 2011747468795690ull}}, {{8959587036302950696ull, 1609397975036552ull}}, {{18235716073268091528ull, 1287518380029241ull}}, {{3351704014035574184ull, 2060029408046787ull}}, {{13749409655454190316ull, 1648023526437429ull}}, {{14688876539105262576ull, 1318418821149943ull}}, {{1366109574116958180ull, 2109470113839910ull}}, {{1092887659293566544ull, 1687576091071928ull}}, {{8253007756918673884ull, 1350060872857542ull}}, {{16894161225811788536ull, 2160097396572067ull}}, {{6136631351165610180ull, 1728077917257654ull}}, {{8598653895674398468ull, 1382462333806123ull}}, {{10068497418337127228ull, 2211939734089797ull}}, {{676100305185881136ull, 1769551787271838ull}}, {{7919577873632525552ull, 1415641429817470ull}}, {{6335662298906020444ull, 1132513143853976ull}}, {{2758362048765812064ull, 1812021030166362ull}}, {{13274736083238380620ull, 1449616824133089ull}}, {{14309137681332614820ull, 1159693459306471ull}}, {{15515922660648363064ull, 1855509534890354ull}}, {{16102086943260600776ull, 1484407627912283ull}}, {{1813623110382749648ull, 1187526102329827ull}}, {{6591145791354309764ull, 1900041763727723ull}}, {{12651614262567268456ull, 1520033410982178ull}}, {{17499989039537635412ull, 1216026728785742ull}}, {{13242587204292575368ull, 1945642766057188ull}}, {{17972767392917880940ull, 1556514212845750ull}}, {{14378213914334304752ull, 1245211370276600ull}}, {{4558398189225335988ull, 1992338192442561ull}}, {{18404113810347910084ull, 1593870553954048ull}}, {{3655244604052597096ull, 1275096443163239ull}}, {{13227088995967976000ull, 2040154309061182ull}}, {{3202973567290560152ull, 1632123447248946ull}}, {{17319774112800089416ull, 1305698757799156ull}}, {{1886196877286770804ull, 2089118012478651ull}}, {{16266352760797057936ull, 1671294409982920ull}}, {{13013082208637646348ull, 1337035527986336ull}}, {{13442233904336413512ull, 2139256844778138ull}}, {{18132484752952951456ull, 1711405475822510ull}}, {{14505987802362361164ull, 1369124380658008ull}}, {{1073487595328315924ull, 2190599009052814ull}}, {{4548138891004563060ull, 1752479207242251ull}}, {{18395906371771291740ull, 1401983365793800ull}}, {{10986706121124515172ull, 2243173385270081ull}}, {{5100016082157701816ull, 1794538708216065ull}}, {{4080012865726161452ull, 1435630966572852ull}}, {{14332056736806660128ull, 1148504773258281ull}}, {{15552593149406835564ull, 1837607637213250ull}}, {{12442074519525468448ull, 1470086109770600ull}}, {{9953659615620374760ull, 1176068887816480ull}}, {{15925855384992599616ull, 1881710220506368ull}}, {{1672637863768348724ull, 1505368176405095ull}}, {{1338110291014678976ull, 1204294541124076ull}}, {{13209022909849217336ull, 1926871265798521ull}}, {{6877869513137463544ull, 1541497012638817ull}}, {{16570342054735701804ull, 1233197610111053ull}}, {{4376454399125660952ull, 1973116176177686ull}}, {{18258558778268170052ull, 1578492940942148ull}}, {{3538800578388805072ull, 1262794352753719ull}}, {{13040778554905908764ull, 2020470964405950ull}}, {{10432622843924727008ull, 1616376771524760ull}}, {{8346098275139781608ull, 1293101417219808ull}}, {{9664408425481740248ull, 2068962267551693ull}}, {{15110224369869212844ull, 1655169814041354ull}}, {{15777528310637280600ull, 1324135851233083ull}}, {{3107952408568187020ull, 2118617361972934ull}}, {{6175710741596459940ull, 1694893889578347ull}}, {{16008615037502898920ull, 1355915111662677ull}}, {{10856388801036996984ull, 2169464178660284ull}}, {{12374459855571507908ull, 1735571342928227ull}}, {{2520870254973385680ull, 1388457074342582ull}}, {{7722741222699327412ull, 2221531318948131ull}}, {{2488844163417551608ull, 1777225055158505ull}}, {{1991075330734041284ull, 1421780044126804ull}}, {{5282209079329143352ull, 1137424035301443ull}}, {{4762185712184719040ull, 1819878456482309ull}}, {{7499097384489685552ull, 1455902765185847ull}}, {{17067324351817479412ull, 1164722212148677ull}}, {{12550323703940325768ull, 1863555539437884ull}}, {{13729607777894170936ull, 1490844431550307ull}}, {{3604988592831516104ull, 1192675545240246ull}}, {{16836028192756156736ull, 1908280872384393ull}}, {{2400776109979194420ull, 1526624697907515ull}}, {{1920620887983355536ull, 1221299758326012ull}}, {{6762342235515279180ull, 1954079613321619ull}}, {{9099222603154133668ull, 1563263690657295ull}}, {{7279378082523306932ull, 1250610952525836ull}}, {{4268307302553470448ull, 2000977524041338ull}}, {{10793343471526597004ull, 1600782019233070ull}}, {{8634674777221277604ull, 1280625615386456ull}}, {{6436782014070223520ull, 2049000984618330ull}}, {{5149425611256178816ull, 1639200787694664ull}}, {{7808889303746853376ull, 1311360630155731ull}}, {{5115525256511144756ull, 2098177008249170ull}}, {{4092420205208915804ull, 1678541606599336ull}}, {{18031331423134773936ull, 1342833285279468ull}}, {{6714037388564176356ull, 2148533256447150ull}}, {{5371229910851341084ull, 1718826605157720ull}}, {{4296983928681072868ull, 1375061284126176ull}}, {{17943220730115447560ull, 2200098054601881ull}}, {{10665227769350447724ull, 1760078443681505ull}}, {{8532182215480358180ull, 1408062754945204ull}}, {{10515094587126196864ull, 1126450203956163ull}}, {{13134802524660004664ull, 1802320326329861ull}}, {{6818493204986093408ull, 1441856261063889ull}}, {{9144143378730785048ull, 1153485008851111ull}}, {{7251931776485435432ull, 1845576014161778ull}}, {{13180243050672168992ull, 1476460811329422ull}}, {{3165496811053914548ull, 1181168649063538ull}}, {{1375446082944352952ull, 1889869838501661ull}}, {{15857752125323123656ull, 1511895870801328ull}}, {{1618155256032767952ull, 1209516696641063ull}}, {{17346443668620070020ull, 1935226714625700ull}}, {{13877154934896056016ull, 1548181371700560ull}}, {{11101723947916844812ull, 1238545097360448ull}}, {{14073409501925041376ull, 1981672155776717ull}}, {{3880029972056212456ull, 1585337724621374ull}}, {{6793372792386880288ull, 1268270179697099ull}}, {{18248094097302829108ull, 2029232287515358ull}}, {{3530428833616532316ull, 1623385830012287ull}}, {{13892389511118956820ull, 1298708664009829ull}}, {{11159776773564599944ull, 2077933862415727ull}}, {{1549123789367859308ull, 1662347089932582ull}}, {{12307345475720018416ull, 1329877671946065ull}}, {{1245008687442477852ull, 2127804275113705ull}}, {{996006949953982280ull, 1702243420090964ull}}, {{4486154374705096148ull, 1361794736072771ull}}, {{18245893443753884808ull, 2178871577716433ull}}, {{3528668310777376876ull, 1743097262173147ull}}, {{13890981092847632472ull, 1394477809738517ull}}, {{7468174489588570660ull, 2231164495581628ull}}, {{13353237221154677176ull, 1784931596465302ull}}, {{3303892147439921092ull, 1427945277172242ull}}, {{13711160162177667844ull, 1142356221737793ull}}, {{18248507444742358228ull, 1827769954780469ull}}, {{18288154770535796904ull, 1462215963824375ull}}, {{14630523816428637524ull, 1169772771059500ull}}, {{4962094032576268424ull, 1871636433695201ull}}, {{280326411319104416ull, 1497309146956161ull}}, {{14981656388022924824ull, 1197847317564928ull}}, {{1834557332385217780ull, 1916555708103886ull}}, {{16225041124875815516ull, 1533244566483108ull}}, {{1911986455674921444ull, 1226595653186487ull}}, {{6748527143821784632ull, 1962553045098379ull}}, {{9088170529799338028ull, 1570042436078703ull}}, {{14649234053323291068ull, 1256033948862962ull}}, {{8681379226349624420ull, 2009654318180740ull}}, {{6945103381079699536ull, 1607723454544592ull}}, {{16624129149089490596ull, 1286178763635673ull}}, {{4462513750091723020ull, 2057886021817078ull}}, {{10948708629557199060ull, 1646308817453662ull}}, {{1380269274161938600ull, 1317047053962930ull}}, {{2208430838659101764ull, 2107275286340688ull}}, {{9145442300411102056ull, 1685820229072550ull}}, {{7316353840328881644ull, 1348656183258040ull}}, {{11706166144526210636ull, 2157849893212864ull}}, {{13054281730362878832ull, 1726279914570291ull}}, {{6754076569548392740ull, 1381023931656233ull}}, {{7117173696535518064ull, 2209638290649973ull}}, {{13072436586712235096ull, 1767710632519978ull}}, {{17836646898853608724ull, 1414168506015982ull}}, {{6890619889599066332ull, 1131334804812786ull}}, {{3646294193874685484ull, 1810135687700458ull}}, {{10295732984583569036ull, 1448108550160366ull}}, {{4547237572924944904ull, 1158486840128293ull}}, {{3586231301938001524ull, 1853578944205269ull}}, {{6558333856292311544ull, 1482863155364215ull}}, {{5246667085033849232ull, 1186290524291372ull}}, {{12084016150796069096ull, 1898064838866195ull}}, {{9667212920636855276ull, 1518451871092956ull}}, {{4044421521767573900ull, 1214761496874365ull}}, {{6471074434828118240ull, 1943618394998984ull}}, {{8866208362604404912ull, 1554894715999187ull}}, {{18161013134309254900ull, 1243915772799349ull}}, {{17989574570669076872ull, 1990265236478959ull}}, {{18081008471277171820ull, 1592212189183167ull}}, {{7086109147537916808ull, 1273769751346534ull}}, {{269728191834935928ull, 2038031602154455ull}}, {{215782553467948740ull, 1630425281723564ull}}, {{3861974857516269316ull, 1304340225378851ull}}, {{17247206216251761876ull, 2086944360606161ull}}, {{10108416158259499176ull, 1669555488484929ull}}, {{11776081741349509664ull, 1335644390787943ull}}, {{15152381971417305140ull, 2137031025260709ull}}, {{15811254391875754436ull, 1709624820208567ull}}, {{5270305884016782900ull, 1367699856166854ull}}, {{15811187043910673292ull, 2188319769866966ull}}, {{8959600820386628308ull, 1750655815893573ull}}, {{14546378285793123292ull, 1400524652714858ull}}, {{1138112368817535332ull, 2240839444343774ull}}, {{4599838709795938588ull, 1792671555475019ull}}, {{7369219782578661192ull, 1434137244380015ull}}, {{5895375826062928952ull, 1147309795504012ull}}, {{13121950136442596652ull, 1835695672806419ull}}, {{14186908923895987644ull, 1468556538245135ull}}, {{11349527139116790116ull, 1174845230596108ull}}, {{14469894607844953860ull, 1879752368953773ull}}, {{507869242050232120ull, 1503801895163019ull}}, {{4095644208382096016ull, 1203041516130415ull}}, {{6553030733411353628ull, 1924866425808664ull}}, {{8931773401470993228ull, 1539893140646931ull}}, {{3456069906434884256ull, 1231914512517545ull}}, {{5529711850295814812ull, 1971063220028072ull}}, {{15491815924462382820ull, 1576850576022457ull}}, {{5014755110086085608ull, 1261480460817966ull}}, {{644910546653916328ull, 2018368737308746ull}}, {{15273323696290774356ull, 1614694989846996ull}}, {{8529310142290709160ull, 1291755991877597ull}}, {{17336245042407044984ull, 2066809587004155ull}}, {{13868996033925635984ull, 1653447669603324ull}}, {{14784545641882419112ull, 1322758135682659ull}}, {{12587226582786139608ull, 2116413017092255ull}}, {{10069781266228911688ull, 1693130413673804ull}}, {{11745173827725039672ull, 1354504330939043ull}}, {{15102929309618153152ull, 2167206929502469ull}}, {{15771692262436432844ull, 1733765543601975ull}}, {{12617353809949146276ull, 1387012434881580ull}}, {{1741022022209082428ull, 2219219895810529ull}}, {{5082166432509176264ull, 1775375916648423ull}}, {{11444430775491161656ull, 1420300733318738ull}}, {{16534242249876749972ull, 1136240586654990ull}}, {{8008043526093248340ull, 1817984938647985ull}}, {{6406434820874598672ull, 1454387950918388ull}}, {{12503845486183499584ull, 1163510360734710ull}}, {{1559408704184047720ull, 1861616577175537ull}}, {{12315573407572969144ull, 1489293261740429ull}}, {{13541807540800285640ull, 1191434609392343ull}}, {{17977543250538546700ull, 1906295375027749ull}}, {{18071383415172747684ull, 1525036300022199ull}}, {{18146455546880108468ull, 1220029040017759ull}}, {{17966282430782442580ull, 1952046464028415ull}}, {{14373025944625954064ull, 1561637171222732ull}}, {{4119723126216942604ull, 1249309736978186ull}}, {{17659603446172839140ull, 1998895579165097ull}}, {{6748985127454450664ull, 1599116463332078ull}}, {{12777885731447381176ull, 1279293170665662ull}}, {{5687221911348168592ull, 2046869073065060ull}}, {{4549777529078534872ull, 1637495258452048ull}}, {{11018519652746648544ull, 1309996206761638ull}}, {{13940282629652727348ull, 2095993930818621ull}}, {{7462877288980271556ull, 1676795144654897ull}}, {{17038348275409948216ull, 1341436115723917ull}}, {{12503961981688275852ull, 2146297785158268ull}}, {{17381867214834441328ull, 1717038228126614ull}}, {{17594842586609463384ull, 1373630582501291ull}}, {{2326306435381769152ull, 2197808932002067ull}}, {{12929091592531146292ull, 1758247145601653ull}}, {{17721970903508737680ull, 1406597716481322ull}}, {{13597758186646338996ull, 2250556346370116ull}}, {{7188857734575160872ull, 1800445077096093ull}}, {{13129783817143949344ull, 1440356061676874ull}}, {{14193175868457069800ull, 1152284849341499ull}}, {{11641034945305580708ull, 1843655758946399ull}}, {{13002176770986374888ull, 1474924607157119ull}}, {{14091090231531010236ull, 1179939685725695ull}}, {{4099000296740064760ull, 1887903497161113ull}}, {{10657897866875872456ull, 1510322797728890ull}}, {{8526318293500697964ull, 1208258238183112ull}}, {{17331458084343027064ull, 1933213181092979ull}}, {{17554515282216331976ull, 1546570544874383ull}}, {{2975565781547334612ull, 1237256435899507ull}}, {{8450254065217645700ull, 1979610297439211ull}}, {{3070854437432206236ull, 1583688237951369ull}}, {{6146032364687675312ull, 1266950590361095ull}}, {{9833651783500280500ull, 2027120944577752ull}}, {{488223797316403756ull, 1621696755662202ull}}, {{11458625482078853972ull, 1297357404529761ull}}, {{10955103141842345712ull, 2075771847247618ull}}, {{16142780142957697216ull, 1660617477798094ull}}, {{16603572929108068096ull, 1328493982238475ull}}, {{8118972612863357336ull, 2125590371581561ull}}, {{2805829275548775544ull, 1700472297265249ull}}, {{5934012235180930760ull, 1360377837812199ull}}, {{16873117205773309864ull, 2176604540499518ull}}, {{2430447320392916920ull, 1741283632399615ull}}, {{1944357856314333536ull, 1393026905919692ull}}, {{6800321384844843980ull, 2228843049471507ull}}, {{16508303552101606156ull, 1783074439577205ull}}, {{13206642841681284924ull, 1426459551661764ull}}, {{14254663088086938260ull, 1141167641329411ull}}, {{15428763311455280572ull, 1825868226127058ull}}, {{1274964204938493488ull, 1460694580901647ull}}, {{12088017808176525760ull, 1168555664721317ull}}, {{4583433234114799924ull, 1869689063554108ull}}, {{11045444216775660584ull, 1495751250843286ull}}, {{5147006558678618144ull, 1196601000674629ull}}, {{15613908123369609680ull, 1914561601079406ull}}, {{8801777683953777420ull, 1531649280863525ull}}, {{7041422147163021936ull, 1225319424690820ull}}, {{11266275435460835096ull, 1960511079505312ull}}, {{1634322718884847432ull, 1568408863604250ull}}, {{1307458175107877944ull, 1254727090883400ull}}, {{2091933080172604712ull, 2007563345413440ull}}, {{1673546464138083768ull, 1606050676330752ull}}, {{12406883615536197984ull, 1284840541064601ull}}, {{12472316155374096132ull, 2055744865703362ull}}, {{2599155294815456256ull, 1644595892562690ull}}, {{2079324235852365004ull, 1315676714050152ull}}, {{7016267592105694332ull, 2105082742480243ull}}, {{12991711703168376112ull, 1684066193984194ull}}, {{14082718177276611212ull, 1347252955187355ull}}, {{4085605009933026324ull, 2155604728299769ull}}, {{6957832822688331384ull, 1724483782639815ull}}, {{5566266258150665108ull, 1379587026111852ull}}, {{12595374827782974496ull, 2207339241778963ull}}, {{17454997491710200240ull, 1765871393423170ull}}, {{13963997993368160192ull, 1412697114738536ull}}, {{7481849579952617832ull, 1130157691790829ull}}, {{902912883698457560ull, 1808252306865327ull}}, {{11790376751184497016ull, 1446601845492261ull}}, {{5742952586205687292ull, 1157281476393809ull}}, {{16567421767412920312ull, 1851650362230094ull}}, {{16943286228672246572ull, 1481320289784075ull}}, {{13554628982937797260ull, 1185056231827260ull}}, {{3240662298990924000ull, 1896089970923617ull}}, {{13660576283418470168ull, 1516871976738893ull}}, {{18307158656218596780ull, 1213497581391114ull}}, {{18223407405724023880ull, 1941596130225783ull}}, {{3510679480353488132ull, 1553276904180627ull}}, {{13876590028508521476ull, 1242621523344501ull}}, {{14823846416129813716ull, 1988194437351202ull}}, {{4480379503420030328ull, 1590555549880962ull}}, {{14652350046961755232ull, 1272444439904769ull}}, {{12375713630913077400ull, 2035911103847631ull}}, {{6211222089988551596ull, 1628728883078105ull}}, {{4968977671990841276ull, 1302983106462484ull}}, {{15329061904669166692ull, 2084772970339974ull}}, {{15952598338477243676ull, 1667818376271979ull}}, {{16451427485523705264ull, 1334254701017583ull}}, {{4186191088386466484ull, 2134807521628134ull}}, {{7038301685451083508ull, 1707846017302507ull}}, {{16698687792586597776ull, 1366276813842005ull}}, {{8271156394429004828ull, 2186042902147209ull}}, {{10306273930285114184ull, 1748834321717767ull}}, {{866321514744270700ull, 1399067457374214ull}}, {{8764812053074653768ull, 2238507931798742ull}}, {{18079896086685453984ull, 1790806345438993ull}}, {{3395870425122632216ull, 1432645076351195ull}}, {{2716696340098105772ull, 1146116061080956ull}}, {{15414760588382700208ull, 1833785697729529ull}}, {{16021157285448070492ull, 1467028558183623ull}}, {{1748879384132725424ull, 1173622846546899ull}}, {{10176904644096181324ull, 1877796554475038ull}}, {{15520221344760765704ull, 1502237243580030ull}}, {{12416177075808612564ull, 1201789794864024ull}}, {{8797836877068049132ull, 1922863671782439ull}}, {{10727618316396349628ull, 1538290937425951ull}}, {{4892745838375169380ull, 1230632749940761ull}}, {{449695711916450360ull, 1969012399905218ull}}, {{7738454199016980936ull, 1575209919924174ull}}, {{9880112173955495072ull, 1260167935939339ull}}, {{4740133034103061144ull, 2016268697502943ull}}, {{11170804056766269564ull, 1613014958002354ull}}, {{12625992060154925972ull, 1290411966401883ull}}, {{16512238481505971236ull, 2064659146243013ull}}, {{2141744340979046016ull, 1651727316994411ull}}, {{16470790731750878108ull, 1321381853595528ull}}, {{4217172282349943032ull, 2114210965752846ull}}, {{18131133084847595720ull, 1691368772602276ull}}, {{10815557653136166252ull, 1353095018081821ull}}, {{9926194615534045356ull, 2164952028930914ull}}, {{11630304507169146608ull, 1731961623144731ull}}, {{5614894790993406964ull, 1385569298515785ull}}, {{8983831665589451140ull, 2216910877625256ull}}, {{3497716517729650588ull, 1773528702100205ull}}, {{2798173214183720472ull, 1418822961680164ull}}, {{5927887386088886700ull, 1135058369344131ull}}, {{2105922188258398076ull, 1816093390950610ull}}, {{1684737750606718460ull, 1452874712760488ull}}, {{8726487829969195412ull, 1162299770208390ull}}, {{13962380527950712664ull, 1859679632333424ull}}, {{14859253237102480452ull, 1487743705866739ull}}, {{15576751404423894684ull, 1190194964693391ull}}, {{17544104617594410852ull, 1904311943509426ull}}, {{10345934879333618356ull, 1523449554807541ull}}, {{4587399088724984364ull, 1218759643846033ull}}, {{3650489727218064656ull, 1950015430153653ull}}, {{10299089411258272372ull, 1560012344122922ull}}, {{860573899522797252ull, 1248009875298338ull}}, {{16134313498204116896ull, 1996815800477340ull}}, {{12907450798563293516ull, 1597452640381872ull}}, {{2947263009366814164ull, 1277962112305498ull}}, {{1026272000244992344ull, 2044739379688797ull}}, {{11889064044421724844ull, 1635791503751037ull}}, {{2132553606053559228ull, 1308633203000830ull}}, {{3412085769685694768ull, 2093813124801328ull}}, {{10108366245232376460ull, 1675050499841062ull}}, {{707995366702080520ull, 1340040399872850ull}}, {{1132792586723328832ull, 2144064639796560ull}}, {{906234069378663068ull, 1715251711837248ull}}, {{8103684884986751100ull, 1372201369469798ull}}, {{9276547001236891436ull, 2195522191151677ull}}, {{42539971505692504ull, 1756417752921342ull}}, {{11102078421430284972ull, 1405134202337073ull}}, {{14073976659546545632ull, 2248214723739317ull}}, {{3880483698153415860ull, 1798571778991454ull}}, {{6793735773264643012ull, 1438857423193163ull}}, {{12813686248095535056ull, 1151085938554530ull}}, {{2055153923243304472ull, 1841737501687249ull}}, {{5333471953336553900ull, 1473390001349799ull}}, {{7956126377411153444ull, 1178712001079839ull}}, {{1661755759632114540ull, 1885939201727743ull}}, {{8708102237189512280ull, 1508751361382194ull}}, {{10655830604493520144ull, 1207001089105755ull}}, {{17049328967189632232ull, 1931201742569208ull}}, {{2571416729525974816ull, 1544961394055367ull}}, {{13125179827846510824ull, 1235969115244293ull}}, {{17310938909812506996ull, 1977550584390869ull}}, {{17538099942591915920ull, 1582040467512695ull}}, {{14030479954073532736ull, 1265632374010156ull}}, {{15070070297033831728ull, 2025011798416250ull}}, {{12056056237627065384ull, 1620009438733000ull}}, {{9644844990101652308ull, 1296007550986400ull}}, {{15431751984162643692ull, 2073612081578240ull}}, {{12345401587330114952ull, 1658889665262592ull}}, {{2497623640380271316ull, 1327111732210074ull}}, {{11374895454092254752ull, 2123378771536118ull}}, {{16478613992757624448ull, 1698703017228894ull}}, {{16872240008948009880ull, 1358962413783115ull}}, {{8548839940607264196ull, 2174339862052985ull}}, {{6839071952485811356ull, 1739471889642388ull}}, {{12849955191472469732ull, 1391577511713910ull}}, {{2113184232646399952ull, 2226524018742257ull}}, {{12758593830342850932ull, 1781219214993805ull}}, {{10206875064274280744ull, 1424975371995044ull}}, {{11854848866161334920ull, 1139980297596035ull}}, {{521014112148584256ull, 1823968476153657ull}}, {{11484857733944598372ull, 1459174780922925ull}}, {{9187886187155678700ull, 1167339824738340ull}}, {{14700617899449085920ull, 1867743719581344ull}}, {{15449843134301179056ull, 1494194975665075ull}}, {{12359874507440943244ull, 1195355980532060ull}}, {{1329055138195957580ull, 1912569568851297ull}}, {{12131290554782497032ull, 1530055655081037ull}}, {{2326334814342176980ull, 1224044524064830ull}}, {{3722135702947483168ull, 1958471238503728ull}}, {{10356406191841807180ull, 1566776990802982ull}}, {{906427323989625096ull, 1253421592642386ull}}, {{12518330162609131128ull, 2005474548227817ull}}, {{2635966500603484256ull, 1604379638582254ull}}, {{5798122015224697728ull, 1283503710865803ull}}, {{5587646409617606040ull, 2053605937385285ull}}, {{4470117127694084832ull, 1642884749908228ull}}, {{10954791331639088512ull, 1314307799926582ull}}, {{2770270871654900328ull, 2102892479882532ull}}, {{13284263141549651232ull, 1682313983906025ull}}, {{10627410513239720984ull, 1345851187124820ull}}, {{17003856821183553576ull, 2153361899399712ull}}, {{6224387827463022212ull, 1722689519519770ull}}, {{4979510261970417772ull, 1378151615615816ull}}, {{588518789668847788ull, 2205042584985306ull}}, {{15228210290702719524ull, 1764034067988244ull}}, {{15871917047304085940ull, 1411227254390595ull}}, {{12697533637843268752ull, 1128981803512476ull}}, {{12937356191065409360ull, 1806370885619962ull}}, {{2971187323368506840ull, 1445096708495970ull}}, {{2376949858694805472ull, 1156077366796776ull}}, {{14871166218137419724ull, 1849723786874841ull}}, {{8207584159768025456ull, 1479779029499873ull}}, {{13944764957298241012ull, 1183823223599898ull}}, {{175531043225723680ull, 1894117157759838ull}}, {{7519122464064399588ull, 1515293726207870ull}}, {{6015297971251519672ull, 1212234980966296ull}}, {{2245779124518610828ull, 1939575969546074ull}}, {{5485972114356798988ull, 1551660775636859ull}}, {{8078126506227349512ull, 1241328620509487ull}}, {{16614351224705669544ull, 1986125792815179ull}}, {{16980829794506445956ull, 1588900634252143ull}}, {{2516617391379425796ull, 1271120507401715ull}}, {{4026587826207081276ull, 2033792811842744ull}}, {{6910619075707575344ull, 1627034249474195ull}}, {{5528495260566060272ull, 1301627399579356ull}}, {{1466894787421875792ull, 2082603839326970ull}}, {{1173515829937500632ull, 1666083071461576ull}}, {{15696207922917641800ull, 1332866457169260ull}}, {{6667188602958675264ull, 2132586331470817ull}}, {{16401797326592671180ull, 1706069065176653ull}}, {{2053391417048405976ull, 1364855252141323ull}}, {{18042821526245090852ull, 2183768403426116ull}}, {{10744908406254162360ull, 1747014722740893ull}}, {{15974624354487150532ull, 1397611778192714ull}}, {{14491352522953709884ull, 2236178845108343ull}}, {{525035574137236936ull, 1788943076086675ull}}, {{420028459309789548ull, 1431154460869340ull}}, {{336022767447831640ull, 1144923568695472ull}}, {{4226985242658440948ull, 1831877709912755ull}}, {{3381588194126752756ull, 1465502167930204ull}}, {{6394619370043312528ull, 1172401734344163ull}}, {{6542042177327389724ull, 1875842774950661ull}}, {{1544284927120001456ull, 1500674219960529ull}}, {{4924776756437911488ull, 1200539375968423ull}}, {{4190293995558748056ull, 1920863001549477ull}}, {{14420281640672729416ull, 1536690401239581ull}}, {{7846876497796273208ull, 1229352320991665ull}}, {{12555002396474037136ull, 1966963713586664ull}}, {{13733350731921140032ull, 1573570970869331ull}}, {{7297331770795001700ull, 1258856776695465ull}}, {{11675730833272002724ull, 2014170842712744ull}}, {{13029933481359512500ull, 1611336674170195ull}}, {{10423946785087610000ull, 1289069339336156ull}}, {{9299617226656355356ull, 2062510942937850ull}}, {{7439693781325084284ull, 1650008754350280ull}}, {{5951755025060067428ull, 1320007003480224ull}}, {{16901505669579928532ull, 2112011205568358ull}}, {{2453158091438211856ull, 1689608964454687ull}}, {{13030572917376300452ull, 1351687171563749ull}}, {{9780870223576349756ull, 2162699474501999ull}}, {{11514044993602990128ull, 1730159579601599ull}}, {{12900584809624302424ull, 1384127663681279ull}}, {{9572889251173152912ull, 2214604261890047ull}}, {{279613771454701684ull, 1771683409512038ull}}, {{7602388646647581992ull, 1417346727609630ull}}, {{6081910917318065592ull, 1133877382087704ull}}, {{17109755097192725596ull, 1814203811340326ull}}, {{9998455263012270152ull, 1451363049072261ull}}, {{4309415395667905800ull, 1161090439257809ull}}, {{14273762262552469928ull, 1857744702812494ull}}, {{15108358624783886264ull, 1486195762249995ull}}, {{12086686899827109012ull, 1188956609799996ull}}, {{11960001410239553772ull, 1902330575679994ull}}, {{13257349942933553340ull, 1521864460543995ull}}, {{10605879954346842672ull, 1217491568435196ull}}, {{9590710297471127632ull, 1947986509496314ull}}, {{11361917052718812428ull, 1558389207597051ull}}, {{5400184827433139616ull, 1246711366077641ull}}, {{1261598094409202744ull, 1994738185724226ull}}, {{15766673734495003488ull, 1595790548579380ull}}, {{12613338987596002788ull, 1276632438863504ull}}, {{9113295935927873496ull, 2042611902181607ull}}, {{18358683192968029764ull, 1634089521745285ull}}, {{14686946554374423812ull, 1307271617396228ull}}, {{1363021598547616160ull, 2091634587833966ull}}, {{15847812537805734220ull, 1673307670267172ull}}, {{5299552400760766728ull, 1338646136213738ull}}, {{4789935026475316444ull, 2141833817941981ull}}, {{142599206438342832ull, 1713467054353585ull}}, {{114079365150674264ull, 1370773643482868ull}}, {{14939922243208720120ull, 2193237829572588ull}}, {{883891350341245124ull, 1754590263658071ull}}, {{15464508339240637392ull, 1403672210926456ull}}, {{17364515713301199184ull, 2245875537482330ull}}, {{13891612570640959348ull, 1796700429985864ull}}, {{14802638871254677800ull, 1437360343988691ull}}, {{8152762282261831916ull, 1149888275190953ull}}, {{9355070836877020744ull, 1839821240305525ull}}, {{7484056669501616596ull, 1471856992244420ull}}, {{5987245335601293276ull, 1177485593795536ull}}, {{2200894907478248596ull, 1883976950072858ull}}, {{9139413555466419524ull, 1507181560058286ull}}, {{3622182029631225296ull, 1205745248046629ull}}, {{13174188876893781120ull, 1929192396874606ull}}, {{6850002286773114572ull, 1543353917499685ull}}, {{5480001829418491656ull, 1234683133999748ull}}, {{5078654112327676328ull, 1975493014399597ull}}, {{15130969734087872032ull, 1580394411519677ull}}, {{4726078157786476980ull, 1264315529215742ull}}, {{11251073867200273492ull, 2022904846745187ull}}, {{1622161464276398144ull, 1618323877396150ull}}, {{1297729171421118516ull, 1294659101916920ull}}, {{2076366674273789628ull, 2071454563067072ull}}, {{12729139783644762672ull, 1657163650453657ull}}, {{2804614197431989488ull, 1325730920362926ull}}, {{15555429160116914156ull, 2121169472580681ull}}, {{8754994513351621000ull, 1696935578064545ull}}, {{7003995610681296800ull, 1357548462451636ull}}, {{3827695347606254236ull, 2172077539922618ull}}, {{10440853907568824032ull, 1737662031938094ull}}, {{12042031940796969548ull, 1390129625550475ull}}, {{820507031565599664ull, 2224207400880761ull}}, {{15413800884220121024ull, 1779365920704608ull}}, {{1262994263150365848ull, 1423492736563687ull}}, {{12078441854746023648ull, 1138794189250949ull}}, {{8257460523367906868ull, 1822070702801519ull}}, {{10295317233436235820ull, 1457656562241215ull}}, {{8236253786748988656ull, 1166125249792972ull}}, {{16867354873540292172ull, 1865800399668755ull}}, {{13493883898832233736ull, 1492640319735004ull}}, {{14484455933807697312ull, 1194112255788003ull}}, {{1039036605640853760ull, 1910579609260806ull}}, {{15588624543480324300ull, 1528463687408644ull}}, {{16160248449526169764ull, 1222770949926915ull}}, {{7409653445532320008ull, 1956433519883065ull}}, {{5927722756425856004ull, 1565146815906452ull}}, {{15810224649366415772ull, 1252117452725161ull}}, {{17917661809502444592ull, 2003387924360258ull}}, {{3266083003376224704ull, 1602710339488207ull}}, {{13680912846926710732ull, 1282168271590565ull}}, {{3442716481373185556ull, 2051469234544905ull}}, {{2754173185098548444ull, 1641175387635924ull}}, {{5892687362820749080ull, 1312940310108739ull}}, {{16806997409997019172ull, 2100704496173982ull}}, {{6066900298513794692ull, 1680563596939186ull}}, {{1164171424069125432ull, 1344450877551349ull}}, {{9241371907994421336ull, 2151121404082158ull}}, {{14771795155879357716ull, 1720897123265726ull}}, {{8128087309961575848ull, 1376717698612581ull}}, {{5626242066454700712ull, 2202748317780130ull}}, {{4500993653163760568ull, 1762198654224104ull}}, {{7290143737272918780ull, 1409758923379283ull}}, {{13210812619302155668ull, 1127807138703426ull}}, {{13758602561399628424ull, 1804491421925482ull}}, {{3628184419635882092ull, 1443593137540386ull}}, {{17659942794676346968ull, 1154874510032308ull}}, {{6119815583030693208ull, 1847799216051694ull}}, {{8585201281166464888ull, 1478239372841355ull}}, {{6868161024933171912ull, 1182591498273084ull}}, {{18367755269376895704ull, 1892146397236934ull}}, {{18383553030243426888ull, 1513717117789547ull}}, {{7328144794710920864ull, 1210973694231638ull}}, {{8035682856795563060ull, 1937557910770621ull}}, {{2739197470694540124ull, 1550046328616497ull}}, {{13259404420781363068ull, 1240037062893197ull}}, {{6457651814282539616ull, 1984059300629116ull}}, {{1476772636684121372ull, 1587247440503293ull}}, {{8560115738831117744ull, 1269797952402634ull}}, {{2628138737904057420ull, 2031676723844215ull}}, {{2102510990323245936ull, 1625341379075372ull}}, {{12750055236484327716ull, 1300273103260297ull}}, {{5642693119407283056ull, 2080436965216476ull}}, {{824805680783916120ull, 1664349572173181ull}}, {{15417239803594774188ull, 1331479657738544ull}}, {{13599537241525907736ull, 2130367452381671ull}}, {{7190280978478815864ull, 1704293961905337ull}}, {{16820271227008783660ull, 1363435169524269ull}}, {{15844387518988322888ull, 2181496271238831ull}}, {{8986161200448747988ull, 1745197016991065ull}}, {{7188928960358998388ull, 1396157613592852ull}}, {{15191635151316307748ull, 2233852181748563ull}}, {{1085261676827315228ull, 1787081745398851ull}}, {{15625604600429493476ull, 1429665396319080ull}}, {{12500483680343594780ull, 1143732317055264ull}}, {{8932727444324020680ull, 1829971707288423ull}}, {{14524879584943037188ull, 1463977365830738ull}}, {{551857223728698780ull, 1171181892664591ull}}, {{11951018002191649020ull, 1873891028263345ull}}, {{9560814401753319216ull, 1499112822610676ull}}, {{3959302706660745048ull, 1199290258088541ull}}, {{17402930774882923048ull, 1918864412941665ull}}, {{13922344619906338440ull, 1535091530353332ull}}, {{3759178066441250104ull, 1228073224282666ull}}, {{17082731350531731136ull, 1964917158852265ull}}, {{13666185080425384908ull, 1571933727081812ull}}, {{3554250434856487280ull, 1257546981665450ull}}, {{5686800695770379652ull, 2012075170664720ull}}, {{4549440556616303720ull, 1609660136531776ull}}, {{18396947704260684268ull, 1287728109225420ull}}, {{10988372253107543216ull, 2060364974760673ull}}, {{16169395431969855216ull, 1648291979808538ull}}, {{1867469901350153204ull, 1318633583846831ull}}, {{14055998286385976096ull, 2109813734154929ull}}, {{14934147443850691200ull, 1687850987323943ull}}, {{879271510854821992ull, 1350280789859155ull}}, {{1406834417367715188ull, 2160449263774648ull}}, {{8504165163377992796ull, 1728359411019718ull}}, {{14182029760186214884ull, 1382687528815774ull}}, {{11623201172072212844ull, 2212300046105239ull}}, {{12987909752399680596ull, 1769840036884191ull}}, {{6700978987177834156ull, 1415872029507353ull}}, {{12739480819226087968ull, 1132697623605882ull}}, {{5625774051794099460ull, 1812316197769412ull}}, {{15568665685661010536ull, 1449852958215529ull}}, {{16144281363270718752ull, 1159882366572423ull}}, {{3694757292781688064ull, 1855811786515878ull}}, {{10334503463709171100ull, 1484649429212702ull}}, {{888905141483516232ull, 1187719543370162ull}}, {{5111597041115536296ull, 1900351269392259ull}}, {{7778626447634339360ull, 1520281015513807ull}}, {{17290947602333202456ull, 1216224812411045ull}}, {{9218772090023572316ull, 1945959699857673ull}}, {{14753715301502678500ull, 1556767759886138ull}}, {{734925796976411828ull, 1245414207908911ull}}, {{12243927719387989896ull, 1992662732654257ull}}, {{2416444546026571272ull, 1594130186123406ull}}, {{16690550895788898308ull, 1275304148898724ull}}, {{15636834989036506324ull, 2040486638237959ull}}, {{16198816805971115384ull, 1632389310590367ull}}, {{5580355815293071660ull, 1305911448472294ull}}, {{16307266933952735304ull, 2089458317555670ull}}, {{13045813547162188244ull, 1671566654044536ull}}, {{6747302022987840272ull, 1337253323235629ull}}, {{18174380866264365080ull, 2139605317177006ull}}, {{10850155878269581740ull, 1711684253741605ull}}, {{8680124702615665392ull, 1369347402993284ull}}, {{2820153079959333660ull, 2190955844789255ull}}, {{2256122463967466928ull, 1752764675831404ull}}, {{5494246785915883864ull, 1402211740665123ull}}, {{5101446042723503860ull, 2243538785064197ull}}, {{15149203278404534056ull, 1794831028051357ull}}, {{4740664993239806600ull, 1435864822441086ull}}, {{103183179849934956ull, 1148691857952869ull}}, {{7543790717243716576ull, 1837906972724590ull}}, {{6035032573794973260ull, 1470325578179672ull}}, {{15896072503261709580ull, 1176260462543737ull}}, {{10676320746251094032ull, 1882016740069980ull}}, {{8541056597000875228ull, 1505613392055984ull}}, {{10522194092342610504ull, 1204490713644787ull}}, {{2078115288780535516ull, 1927185141831660ull}}, {{1662492231024428412ull, 1541748113465328ull}}, {{8708691414303363376ull, 1233398490772262ull}}, {{17623255077627291724ull, 1973437585235619ull}}, {{17787952876843743704ull, 1578750068188495ull}}, {{14230362301474994960ull, 1263000054550796ull}}, {{15389882052876171292ull, 2020800087281274ull}}, {{16001254457042847356ull, 1616640069825019ull}}, {{16490352380376188208ull, 1293312055860015ull}}, {{7937819734892349520ull, 2069299289376025ull}}, {{6350255787913879616ull, 1655439431500820ull}}, {{5080204630331103692ull, 1324351545200656ull}}, {{749629779045945260ull, 2118962472321050ull}}, {{599703823236756208ull, 1695169977856840ull}}, {{479763058589404968ull, 1356135982285472ull}}, {{4456969708484958272ull, 2169817571656755ull}}, {{3565575766787966616ull, 1735854057325404ull}}, {{6541809428172283616ull, 1388683245860323ull}}, {{6777546270333743464ull, 2221893193376517ull}}, {{16490083460492725740ull, 1777514554701213ull}}, {{2124020324168449620ull, 1422011643760971ull}}, {{16456611518302400988ull, 1137609315008776ull}}, {{505136726090469324ull, 1820174904014043ull}}, {{7782807010356196104ull, 1456139923211234ull}}, {{9915594423026867208ull, 1164911938568987ull}}, {{1107555817875346240ull, 1863859101710380ull}}, {{886044654300276992ull, 1491087281368304ull}}, {{4398184538182131916ull, 1192869825094643ull}}, {{3347746446349500740ull, 1908591720151429ull}}, {{6367545971821510916ull, 1526873376121143ull}}, {{12472734406941029380ull, 1221498700896914ull}}, {{8888328606879916040ull, 1954397921435063ull}}, {{14489360514987753476ull, 1563518337148050ull}}, {{11591488411990202780ull, 1250814669718440ull}}, {{99637385474772836ull, 2001303471549505ull}}, {{79709908379818268ull, 1601042777239604ull}}, {{3753116741445764936ull, 1280834221791683ull}}, {{2315637971571313576ull, 2049334754866693ull}}, {{9231208006740871508ull, 1639467803893354ull}}, {{11074315220134607528ull, 1311574243114683ull}}, {{14029555537473461724ull, 2098518788983493ull}}, {{155597985753038408ull, 1678815031186795ull}}, {{124478388602430728ull, 1343052024949436ull}}, {{11267211865989620132ull, 2148883239919097ull}}, {{1635071863307875460ull, 1719106591935278ull}}, {{8686755120130121012ull, 1375285273548222ull}}, {{17588157006950103948ull, 2200456437677155ull}}, {{14070525605560083156ull, 1760365150141724ull}}, {{14945769299189976848ull, 1408292120113379ull}}, {{15645964254093891800ull, 1126633696090703ull}}, {{2897449918098764944ull, 1802613913745126ull}}, {{17075355193446653248ull, 1442091130996100ull}}, {{13660284154757322596ull, 1153672904796880ull}}, {{3409710573902164540ull, 1845876647675009ull}}, {{6417117273863641956ull, 1476701318140007ull}}, {{16201740263316644536ull, 1181361054512005ull}}, {{7476040347597079640ull, 1890177687219209ull}}, {{9670181092819574036ull, 1512142149775367ull}}, {{357447244771838580ull, 1209713719820294ull}}, {{7950613221118762376ull, 1935541951712470ull}}, {{6360490576895009900ull, 1548433561369976ull}}, {{1399043646774097596ull, 1238746849095981ull}}, {{13306516279064287128ull, 1981994958553569ull}}, {{14334561837993340024ull, 1585595966842855ull}}, {{11467649470394672020ull, 1268476773474284ull}}, {{7280192708405744264ull, 2029562837558855ull}}, {{5824154166724595408ull, 1623650270047084ull}}, {{8348672148121586652ull, 1298920216037667ull}}, {{17047224251736448964ull, 2078272345660267ull}}, {{6259081771905338524ull, 1662617876528214ull}}, {{8696614232266181144ull, 1330094301222571ull}}, {{6535885142142069184ull, 2128150881956114ull}}, {{8918056928455565668ull, 1702520705564891ull}}, {{3445096728022542212ull, 1362016564451913ull}}, {{1822805950094157216ull, 2179226503123061ull}}, {{16215640019042967068ull, 1743381202498448ull}}, {{1904465571008642684ull, 1394704961998759ull}}, {{10425842543097648940ull, 2231527939198014ull}}, {{12030022849220029476ull, 1785222351358411ull}}, {{5934669464634113256ull, 1428177881086729ull}}, {{8437084386449200928ull, 1142542304869383ull}}, {{9809986203576811164ull, 1828067687791013ull}}, {{15226686592345269576ull, 1462454150232810ull}}, {{12181349273876215660ull, 1169963320186248ull}}, {{15800810023460034736ull, 1871941312297997ull}}, {{5261950389284207140ull, 1497553049838398ull}}, {{11588257940911186360ull, 1198042439870718ull}}, {{14851863890715987852ull, 1916867903793149ull}}, {{15570839927314700604ull, 1533494323034519ull}}, {{16146020756593670808ull, 1226795458427615ull}}, {{7386889136840321676ull, 1962872733484185ull}}, {{5909511309472257340ull, 1570298186787348ull}}, {{12106306677061626516ull, 1256238549429878ull}}, {{15680741868556692108ull, 2009981679087805ull}}, {{12544593494845353684ull, 1607985343270244ull}}, {{13725023610618193272ull, 1286388274616195ull}}, {{3513293703279557620ull, 2058221239385913ull}}, {{10189332592107466740ull, 1646576991508730ull}}, {{8151466073685973392ull, 1317261593206984ull}}, {{1974299273671826460ull, 2107618549131175ull}}, {{1579439418937461168ull, 1686094839304940ull}}, {{1263551535149968932ull, 1348875871443952ull}}, {{5711031270981860616ull, 2158201394310323ull}}, {{11947522646269309140ull, 1726561115448258ull}}, {{16936715746499267956ull, 1381248892358606ull}}, {{1273303491205456472ull, 2209998227773771ull}}, {{15776038051932006468ull, 1767998582219016ull}}, {{8931481626803694852ull, 1414398865775213ull}}, {{14523882930926776528ull, 1131519092620170ull}}, {{4791468615773290828ull, 1810430548192273ull}}, {{11211872522102453308ull, 1448344438553818ull}}, {{16348195647165783292ull, 1158675550843054ull}}, {{15089066591239522300ull, 1853880881348887ull}}, {{4692555643507797196ull, 1483104705079110ull}}, {{3754044514806237756ull, 1186483764063288ull}}, {{2317122408948070088ull, 1898374022501261ull}}, {{16611093186126097360ull, 1518699218001008ull}}, {{2220828104675146920ull, 1214959374400807ull}}, {{7242673782222145396ull, 1943934999041291ull}}, {{2104790211035805992ull, 1555147999233033ull}}, {{9062529798312465440ull, 1244118399386426ull}}, {{7121350047816124060ull, 1990589439018282ull}}, {{16765126482478630216ull, 1592471551214625ull}}, {{13412101185982904172ull, 1273977240971700ull}}, {{3012617823863095060ull, 2038363585554721ull}}, {{17167489518058117340ull, 1630690868443776ull}}, {{10044642799704583548ull, 1304552694755021ull}}, {{8692730850043513032ull, 2087284311608034ull}}, {{10643533494776720748ull, 1669827449286427ull}}, {{1136129166337555952ull, 1335861959429142ull}}, {{5507155480881999848ull, 2137379135086627ull}}, {{15473770828931330848ull, 1709903308069301ull}}, {{8689667848403154356ull, 1367922646455441ull}}, {{6524770927961226324ull, 2188676234328706ull}}, {{1530467927627070736ull, 1750940987462965ull}}, {{1224374342101656588ull, 1400752789970372ull}}, {{5648347762104560864ull, 2241204463952595ull}}, {{4518678209683648692ull, 1792963571162076ull}}, {{18372337826714560244ull, 1434370856929660ull}}, {{14697870261371648196ull, 1147496685543728ull}}, {{1380499529743175176ull, 1835994696869966ull}}, {{15861794882762181432ull, 1468795757495972ull}}, {{5310738276725924500ull, 1175036605996778ull}}, {{4807832428019568876ull, 1880058569594845ull}}, {{3846265942415655100ull, 1504046855675876ull}}, {{17834408012900165372ull, 1203237484540700ull}}, {{10088308746930712984ull, 1925179975265121ull}}, {{4381298182802660064ull, 1540143980212097ull}}, {{14573084990467859020ull, 1232115184169677ull}}, {{8559540725780933140ull, 1971384294671484ull}}, {{10536981395366656836ull, 1577107435737187ull}}, {{1050887486809504820ull, 1261685948589750ull}}, {{1681419978895207716ull, 2018697517743600ull}}, {{1345135983116166172ull, 1614958014194880ull}}, {{1076108786492932936ull, 1291966411355904ull}}, {{9100471687872513344ull, 2067146258169446ull}}, {{3591028535556100352ull, 1653717006535557ull}}, {{13940869272670611252ull, 1322973605228445ull}}, {{3858646762563426388ull, 2116757768365513ull}}, {{10465615039534561756ull, 1693406214692410ull}}, {{8372492031627649404ull, 1354724971753928ull}}, {{9706638435862328724ull, 2167559954806285ull}}, {{7765310748689862980ull, 1734047963845028ull}}, {{13590946228435711028ull, 1387238371076022ull}}, {{6988118706529496356ull, 2219581393721636ull}}, {{1901146150481686760ull, 1775665114977309ull}}, {{5210265735127259732ull, 1420532091981847ull}}, {{15236259032327538756ull, 1136425673585477ull}}, {{9620619192756420716ull, 1818281077736764ull}}, {{11385844168947046896ull, 1454624862189411ull}}, {{5419326520415727192ull, 1163699889751529ull}}, {{16049620062148984156ull, 1861919823602446ull}}, {{9150347234977277000ull, 1489535858881957ull}}, {{18388324232207552572ull, 1191628687105565ull}}, {{10974574697822532496ull, 1906605899368905ull}}, {{8779659758258025996ull, 1525284719495124ull}}, {{10713076621348331120ull, 1220227775596099ull}}, {{6072876149931598824ull, 1952364440953759ull}}, {{8547649734687189384ull, 1561891552763007ull}}, {{17906166231975482476ull, 1249513242210405ull}}, {{10203121897451220344ull, 1999221187536649ull}}, {{11851846332702886600ull, 1599376950029319ull}}, {{13170825880904219604ull, 1279501560023455ull}}, {{2626577335737199748ull, 2047202496037529ull}}, {{5790610683331670124ull, 1637761996830023ull}}, {{12011186176149156744ull, 1310209597464018ull}}, {{15528549067096740468ull, 2096335355942429ull}}, {{16112188068419302696ull, 1677068284753943ull}}, {{1821704010509711188ull, 1341654627803155ull}}, {{2914726416815537900ull, 2146647404485048ull}}, {{9710478762936250968ull, 1717317923588038ull}}, {{15147080639832821420ull, 1373854338870430ull}}, {{5788584950022962656ull, 2198166942192689ull}}, {{8320216774760280448ull, 1758533553754151ull}}, {{2966824605066314036ull, 1406826843003321ull}}, {{15814965812331833428ull, 2250922948805313ull}}, {{1583926205639735772ull, 1800738359044251ull}}, {{16024536223479429908ull, 1440590687235400ull}}, {{12819628978783543928ull, 1152472549788320ull}}, {{2064662292344118668ull, 1843956079661313ull}}, {{9030427463359115580ull, 1475164863729050ull}}, {{7224341970687292464ull, 1180131890983240ull}}, {{11558947153099667944ull, 1888211025573184ull}}, {{12936506537221644680ull, 1510568820458547ull}}, {{2970507600293495096ull, 1208455056366838ull}}, {{1063463345727681832ull, 1933528090186941ull}}, {{15608165935549786756ull, 1546822472149552ull}}, {{5107835118956008760ull, 1237457977719642ull}}, {{11861885005071524340ull, 1979932764351427ull}}, {{2110810374573398824ull, 1583946211481142ull}}, {{12756694743884450028ull, 1267156969184913ull}}, {{16721362775473209724ull, 2027451150695861ull}}, {{9687741405636657456ull, 1621960920556689ull}}, {{11439541939251236288ull, 1297568736445351ull}}, {{10924569473318157416ull, 2076109978312562ull}}, {{1360957949170705284ull, 1660887982650050ull}}, {{1088766359336564228ull, 1328710386120040ull}}, {{1742026174938502764ull, 2125936617792064ull}}, {{5082969754692712536ull, 1700749294233651ull}}, {{377026989012259704ull, 1360599435386921ull}}, {{11671289626645346496ull, 2176959096619073ull}}, {{16715729330800097844ull, 1741567277295258ull}}, {{2304537020414347304ull, 1393253821836207ull}}, {{7376608047404866012ull, 2229206114937931ull}}, {{2211937623181982488ull, 1783364891950345ull}}, {{1769550098545585988ull, 1426691913560276ull}}, {{16173035337804110084ull, 1141353530848220ull}}, {{7430112466777024520ull, 1826165649357153ull}}, {{13322787602905440260ull, 1460932519485722ull}}, {{3279532452840531564ull, 1168746015588578ull}}, {{1557903109802940176ull, 1869993624941725ull}}, {{1246322487842352140ull, 1495994899953380ull}}, {{997057990273881712ull, 1196795919962704ull}}, {{8973990413922031388ull, 1914873471940326ull}}, {{3489843516395714788ull, 1531898777552261ull}}, {{17549270072084213120ull, 1225519022041808ull}}, {{5942739226883279056ull, 1960830435266894ull}}, {{8443540196248533568ull, 1568664348213515ull}}, {{6754832156998826856ull, 1254931478570812ull}}, {{14497080265940033292ull, 2007890365713299ull}}, {{15287013027493936956ull, 1606312292570639ull}}, {{15918959236737059888ull, 1285049834056511ull}}, {{18091637149295475176ull, 2056079734490418ull}}, {{3405263275210649168ull, 1644863787592335ull}}, {{2724210620168519336ull, 1315891030073868ull}}, {{669388177527720616ull, 2105425648118189ull}}, {{4224859356764086816ull, 1684340518494551ull}}, {{18137282744378910744ull, 1347472414795640ull}}, {{10572908317296705576ull, 2155955863673025ull}}, {{8458326653837364460ull, 1724764690938420ull}}, {{6766661323069891568ull, 1379811752750736ull}}, {{3447960487428005864ull, 2207698804401178ull}}, {{10137066019426225336ull, 1766159043520942ull}}, {{730955186057159624ull, 1412927234816754ull}}, {{4274112963587638020ull, 1130341787853403ull}}, {{3149231926998310512ull, 1808546860565445ull}}, {{2519385541598648408ull, 1446837488452356ull}}, {{16772903692246560020ull, 1157469990761884ull}}, {{15768599463368765064ull, 1851951985219015ull}}, {{12614879570695012048ull, 1481561588175212ull}}, {{2713206027072188992ull, 1185249270540170ull}}, {{4341129643315502388ull, 1896398832864272ull}}, {{14540950158878132880ull, 1517119066291417ull}}, {{4254062497618685656ull, 1213695253033134ull}}, {{14185197625673717700ull, 1941912404853014ull}}, {{15037506915280884484ull, 1553529923882411ull}}, {{8340656717482797264ull, 1242823939105929ull}}, {{2277004303746744652ull, 1988518302569487ull}}, {{12889649887223126692ull, 1590814642055589ull}}, {{14001068724520411676ull, 1272651713644471ull}}, {{15023012329748838036ull, 2036242741831154ull}}, {{15707758678540980752ull, 1628994193464923ull}}, {{1498160498607053632ull, 1303195354771939ull}}, {{9775754427255106456ull, 2085112567635102ull}}, {{441905912320264520ull, 1668090054108082ull}}, {{11421571174081942584ull, 1334472043286465ull}}, {{18274513878531108136ull, 2135155269258344ull}}, {{18308959917566796832ull, 1708124215406675ull}}, {{14647167934053437464ull, 1366499372325340ull}}, {{4988724620775948328ull, 2186398995720545ull}}, {{3990979696620758664ull, 1749119196576436ull}}, {{17950179016264248224ull, 1399295357261148ull}}, {{6584193537571335220ull, 2238872571617838ull}}, {{12646052459540888820ull, 1791098057294270ull}}, {{10116841967632711056ull, 1432878445835416ull}}, {{4404124759364258520ull, 1146302756668333ull}}, {{3357250800240903312ull, 1834084410669333ull}}, {{10064498269676543296ull, 1467267528535466ull}}, {{4362249800999324312ull, 1173814022828373ull}}, {{3290250866857008580ull, 1878102436525397ull}}, {{13700247137711337832ull, 1502481949220317ull}}, {{3581500080685249620ull, 1201985559376254ull}}, {{13109097758580220040ull, 1923176895002006ull}}, {{6797929392122265708ull, 1538541516001605ull}}, {{5438343513697812564ull, 1230833212801284ull}}, {{16080047251400320752ull, 1969333140482054ull}}, {{16553386615862166924ull, 1575466512385643ull}}, {{2174662848464002568ull, 1260373209908515ull}}, {{3479460557542404112ull, 2016597135853624ull}}, {{6472917260775833612ull, 1613277708682899ull}}, {{8867682623362577212ull, 1290622166946319ull}}, {{3120245753154392572ull, 2064995467114111ull}}, {{17253591861491155352ull, 1651996373691288ull}}, {{2734827044967193312ull, 1321597098953031ull}}, {{15443769716173240268ull, 2114555358324849ull}}, {{16044364587680502536ull, 1691644286659879ull}}, {{16524840484886312352ull, 1353315429327903ull}}, {{4303651887366637824ull, 2165304686924646ull}}, {{18200316768860951552ull, 1732243749539716ull}}, {{10870904600346850920ull, 1385794999631773ull}}, {{13704098545813051148ull, 2217271999410837ull}}, {{3584581207166620272ull, 1773817599528670ull}}, {{2867664965733296216ull, 1419054079622936ull}}, {{17051527231554278264ull, 1135243263698348ull}}, {{5146350682035383288ull, 1816389221917358ull}}, {{11495778175112127276ull, 1453111377533886ull}}, {{5507273725347791496ull, 1162489102027109ull}}, {{16190335590040287044ull, 1859982563243374ull}}, {{16641617286774139956ull, 1487986050594699ull}}, {{17002642644161222288ull, 1190388840475759ull}}, {{16136181786432224692ull, 1904622144761215ull}}, {{12908945429145779752ull, 1523697715808972ull}}, {{2948458713832803156ull, 1218958172647178ull}}, {{1028185127390574728ull, 1950333076235485ull}}, {{822548101912459780ull, 1560266460988388ull}}, {{8036736111013788472ull, 1248213168790710ull}}, {{12858777777622061556ull, 1997141070065136ull}}, {{6597673407355738920ull, 1597712856052109ull}}, {{8967487540626501460ull, 1278170284841687ull}}, {{18037328879744312660ull, 2045072455746699ull}}, {{18119211918537360452ull, 1636057964597359ull}}, {{18184718349571798684ull, 1308846371677887ull}}, {{14338154100347236600ull, 2094154194684620ull}}, {{11470523280277789280ull, 1675323355747696ull}}, {{5487069809480321100ull, 1340258684598157ull}}, {{12468660509910424088ull, 2144413895357051ull}}, {{6285579593186428944ull, 1715531116285641ull}}, {{1339114859807232832ull, 1372424893028513ull}}, {{16899979034659213828ull, 2195879828845620ull}}, {{13519983227727371060ull, 1756703863076496ull}}, {{7126637767439986524ull, 1405363090461197ull}}, {{15091969242645888764ull, 2248580944737915ull}}, {{12073575394116711012ull, 1798864755790332ull}}, {{2280162685809548164ull, 1439091804632266ull}}, {{16581525407615279824ull, 1151273443705812ull}}, {{11773045393216806424ull, 1842037509929300ull}}, {{9418436314573445140ull, 1473630007943440ull}}, {{7534749051658756112ull, 1178904006354752ull}}, {{15744947297395920100ull, 1886246410167603ull}}, {{1527911393691005112ull, 1508997128134083ull}}, {{8601026744436624736ull, 1207197702507266ull}}, {{6382945161614778932ull, 1931516324011626ull}}, {{1417007314549912820ull, 1545213059209301ull}}, {{15891001110607571548ull, 1236170447367440ull}}, {{6978857703262562864ull, 1977872715787905ull}}, {{5583086162610050292ull, 1582298172630324ull}}, {{8155817744829950556ull, 1265838538104259ull}}, {{1981261947502189920ull, 2025341660966815ull}}, {{1585009558001751936ull, 1620273328773452ull}}, {{12336054090627132516ull, 1296218663018761ull}}, {{12358988915519591384ull, 2073949860830018ull}}, {{17265888761899493752ull, 1659159888664014ull}}, {{17502059824261505324ull, 1327327910931211ull}}, {{2177854015625036260ull, 2123724657489939ull}}, {{5431632027241939328ull, 1698979725991951ull}}, {{655956807051641140ull, 1359183780793561ull}}, {{12117577335508356796ull, 2174694049269697ull}}, {{2315364238922864788ull, 1739755239415758ull}}, {{9230989020622112476ull, 1391804191532606ull}}, {{7390884803511559320ull, 2226886706452170ull}}, {{5912707842809247456ull, 1781509365161736ull}}, {{1040817459505487640ull, 1425207492129389ull}}, {{4522002782346300436ull, 1140165993703511ull}}, {{18303250895979811668ull, 1824265589925617ull}}, {{7263903087300028688ull, 1459412471940494ull}}, {{9500471284581933272ull, 1167529977552395ull}}, {{15200754055331093236ull, 1868047964083832ull}}, {{4781905614781053940ull, 1494438371267066ull}}, {{136175677082932828ull, 1195550697013653ull}}, {{14975276342300333820ull, 1912881115221844ull}}, {{15669569888582177380ull, 1530304892177475ull}}, {{12535655910865741904ull, 1224243913741980ull}}, {{1610305383675635432ull, 1958790261987169ull}}, {{4977593121682418668ull, 1567032209589735ull}}, {{3982074497345934932ull, 1253625767671788ull}}, {{2681970381011585572ull, 2005801228274861ull}}, {{16902971563776909752ull, 1604640982619888ull}}, {{2454330806795796832ull, 1283712786095911ull}}, {{14994975735099005900ull, 2053940457753457ull}}, {{4617282958595384072ull, 1643152366202766ull}}, {{4477552134396936ull, 1314521892962213ull}}, {{14764559342382676388ull, 2103235028739540ull}}, {{11811647473906141112ull, 1682588022991632ull}}, {{2070620349641092240ull, 1346070418393306ull}}, {{14381039003651478556ull, 2153712669429289ull}}, {{15194180017663093168ull, 1722970135543431ull}}, {{8465995199388564212ull, 1378376108434745ull}}, {{13545592319021702740ull, 2205401773495592ull}}, {{3457776225733541544ull, 1764321418796474ull}}, {{6455569795328743560ull, 1411457135037179ull}}, {{8853804651004905168ull, 1129165708029743ull}}, {{10476738626865937948ull, 1806665132847589ull}}, {{12070739716234660684ull, 1445332106278071ull}}, {{5967242958245818224ull, 1156265685022457ull}}, {{13236937547935219480ull, 1850025096035931ull}}, {{6900201223606265260ull, 1480020076828745ull}}, {{5520160978885012208ull, 1184016061462996ull}}, {{1453559936732198888ull, 1894425698340794ull}}, {{4852196764127669432ull, 1515540558672635ull}}, {{3881757411302135544ull, 1212432446938108ull}}, {{2521463043341506552ull, 1939891915100973ull}}, {{9395868064157025888ull, 1551913532080778ull}}, {{14895392080809441356ull, 1241530825664622ull}}, {{9075232070327464876ull, 1986449321063396ull}}, {{3570836841520061580ull, 1589159456850717ull}}, {{13924715917441780232ull, 1271327565480573ull}}, {{143452579455386432ull, 2034124104768918ull}}, {{7493459693048129792ull, 1627299283815134ull}}, {{9684116569180414156ull, 1301839427052107ull}}, {{737191251721021360ull, 2082943083283372ull}}, {{11657799445602548056ull, 1666354466626697ull}}, {{1947541926998217800ull, 1333083573301358ull}}, {{17873462342164789772ull, 2132933717282172ull}}, {{6920072244248011172ull, 1706346973825738ull}}, {{12914755424882229584ull, 1365077579060590ull}}, {{2216864606102015716ull, 2184124126496945ull}}, {{1773491684881612572ull, 1747299301197556ull}}, {{16176188606872931352ull, 1397839440958044ull}}, {{14813855326770959192ull, 2236543105532871ull}}, {{8161735446674857032ull, 1789234484426297ull}}, {{17597434801565616596ull, 1431387587541037ull}}, {{6699250211768672628ull, 1145110070032830ull}}, {{10718800338829876208ull, 1832176112052528ull}}, {{15953737900547721612ull, 1465740889642022ull}}, {{5384292690954356644ull, 1172592711713618ull}}, {{4925519490785060304ull, 1876148338741789ull}}, {{7629764407369958568ull, 1500918670993431ull}}, {{2414462711154056532ull, 1200734936794745ull}}, {{3863140337846490448ull, 1921175898871592ull}}, {{14158558714502923328ull, 1536940719097273ull}}, {{258800527376607692ull, 1229552575277819ull}}, {{7792778473286392956ull, 1967284120444510ull}}, {{6234222778629114364ull, 1573827296355608ull}}, {{12366075852387112136ull, 1259061837084486ull}}, {{12407023734335558776ull, 2014498939335178ull}}, {{17304316616952267668ull, 1611599151468142ull}}, {{6464755664077993488ull, 1289279321174514ull}}, {{17722306692008610224ull, 2062846913879222ull}}, {{6799147724123067532ull, 1650277531103378ull}}, {{12818015808782274672ull, 1320222024882702ull}}, {{5751430035083998184ull, 2112355239812324ull}}, {{8290492842809108872ull, 1689884191849859ull}}, {{10321743088989197420ull, 1351907353479887ull}}, {{1757393683415074580ull, 2163051765567820ull}}, {{1405914946732059664ull, 1730441412454256ull}}, {{15882127216353289024ull, 1384353129963404ull}}, {{14343357101939531468ull, 2214965007941447ull}}, {{4095988052067804528ull, 1771972006353158ull}}, {{10655488071138064268ull, 1417577605082526ull}}, {{4835041642168541092ull, 1134062084066021ull}}, {{357368997985845100ull, 1814499334505634ull}}, {{3975244013130586404ull, 1451599467604507ull}}, {{14248241654730200092ull, 1161279574083605ull}}, {{4350442573858768532ull, 1858047318533769ull}}, {{7169702873828925148ull, 1486437854827015ull}}, {{5735762299063140120ull, 1189150283861612ull}}, {{12866568493242934512ull, 1902640454178579ull}}, {{13982603609336257932ull, 1522112363342863ull}}, {{118036443243275376ull, 1217689890674291ull}}, {{11256904753414971576ull, 1948303825078865ull}}, {{9005523802731977260ull, 1558643060063092ull}}, {{18272465486411312776ull, 1246914448050473ull}}, {{7099851889806638504ull, 1995063116880758ull}}, {{13058579141329131448ull, 1596050493504606ull}}, {{6757514498321394836ull, 1276840394803685ull}}, {{10812023197314231740ull, 2042944631685896ull}}, {{4960269743109475068ull, 1634355705348717ull}}, {{15036262238713311024ull, 1307484564278973ull}}, {{1921926693489835700ull, 2091975302846358ull}}, {{8916238984275689204ull, 1673580242277086ull}}, {{3443642372678641040ull, 1338864193821669ull}}, {{12888525425769646312ull, 2142182710114670ull}}, {{10310820340615717048ull, 1713746168091736ull}}, {{4559307457750663316ull, 1370996934473389ull}}, {{14673589561884881952ull, 2193595095157422ull}}, {{4360174020024084916ull, 1754876076125938ull}}, {{10866836845503088580ull, 1403900860900750ull}}, {{17386938952804941728ull, 2246241377441200ull}}, {{13909551162243953380ull, 1796993101952960ull}}, {{11127640929795162704ull, 1437594481562368ull}}, {{16280810373319950808ull, 1150075585249894ull}}, {{14981250153086190328ull, 1840120936399831ull}}, {{8295651307727041936ull, 1472096749119865ull}}, {{6636521046181633548ull, 1177677399295892ull}}, {{14307782488632524004ull, 1884283838873427ull}}, {{4067528361422198556ull, 1507427071098742ull}}, {{14322069133363489816ull, 1205941656878993ull}}, {{779217724930121764ull, 1929506651006390ull}}, {{623374179944097412ull, 1543605320805112ull}}, {{11566745788181008900ull, 1234884256644089ull}}, {{7438746816863883268ull, 1975814810630543ull}}, {{13329695082974927260ull, 1580651848504434ull}}, {{14353104881121852132ull, 1264521478803547ull}}, {{8207572550827322120ull, 2023234366085676ull}}, {{2876709225919947372ull, 1618587492868541ull}}, {{17058762639703599192ull, 1294869994294832ull}}, {{12536624964558117412ull, 2071791990871732ull}}, {{2650602342162673284ull, 1657433592697386ull}}, {{16877877132697779920ull, 1325946874157908ull}}, {{4868510523864985932ull, 2121514998652654ull}}, {{7584157233833899068ull, 1697211998922123ull}}, {{13446023416550939900ull, 1357769599137698ull}}, {{17824288651739593520ull, 2172431358620317ull}}, {{6880733291907854168ull, 1737945086896254ull}}, {{9193935448268193656ull, 1390356069517003ull}}, {{11020947902487199532ull, 2224569711227205ull}}, {{8816758321989759624ull, 1779655768981764ull}}, {{10742755472333718024ull, 1423724615185411ull}}, {{4904855563125064096ull, 1138979692148329ull}}, {{15226466530483923200ull, 1822367507437326ull}}, {{8491824409645228236ull, 1457894005949861ull}}, {{3104110712974272264ull, 1166315204759889ull}}, {{12345274770242656272ull, 1866104327615822ull}}, {{2497522186710304368ull, 1492883462092658ull}}, {{9376715378852064140ull, 1194306769674126ull}}, {{7624046976679481980ull, 1910890831478602ull}}, {{17167284025569316556ull, 1528712665182881ull}}, {{10044478405713542920ull, 1222970132146305ull}}, {{16071165449141668672ull, 1956752211434088ull}}, {{1788885915087603968ull, 1565401769147271ull}}, {{16188503991037724468ull, 1252321415317816ull}}, {{76164682466986888ull, 2003714264508507ull}}, {{11128978190199320480ull, 1602971411606805ull}}, {{8903182552159456384ull, 1282377129285444ull}}, {{3177045639229399244ull, 2051803406856711ull}}, {{17299031770351160688ull, 1641442725485368ull}}, {{2771178972055197580ull, 1313154180388295ull}}, {{4433886355288316128ull, 2101046688621272ull}}, {{14615155528456383872ull, 1680837350897017ull}}, {{4313426793281286452ull, 1344669880717614ull}}, {{14280180498733878968ull, 2151471809148182ull}}, {{4045446769503282528ull, 1721177447318546ull}}, {{17993752674570267316ull, 1376941957854836ull}}, {{2964562576119055444ull, 2203107132567739ull}}, {{6060998875637154676ull, 1762485706054191ull}}, {{1159450285767813416ull, 1409988564843353ull}}, {{8306257858098071380ull, 1127990851874682ull}}, {{16979361387698824532ull, 1804785362999491ull}}, {{9894140295417149304ull, 1443828290399593ull}}, {{15294009865817540088ull, 1155062632319674ull}}, {{13402369341082333172ull, 1848100211711479ull}}, {{14411244287607776860ull, 1478480169369183ull}}, {{460948985860490520ull, 1182784135495347ull}}, {{4426867192118695156ull, 1892454616792555ull}}, {{3541493753694956124ull, 1513963693434044ull}}, {{6522543817697875220ull, 1211170954747235ull}}, {{10436070108316600356ull, 1937873527595576ull}}, {{4659507271911369960ull, 1550298822076461ull}}, {{38257002787185644ull, 1240239057661169ull}}, {{7439908833943317680ull, 1984382492257870ull}}, {{5951927067154654144ull, 1587505993806296ull}}, {{1072192838981812992ull, 1270004795045037ull}}, {{5404857357112811108ull, 2032007672072059ull}}, {{8013234700432159212ull, 1625606137657647ull}}, {{17478634204571458336ull, 1300484910126117ull}}, {{13208419468346692048ull, 2080775856201788ull}}, {{17945433204161174284ull, 1664620684961430ull}}, {{14356346563328939428ull, 1331696547969144ull}}, {{11902108057100572116ull, 2130714476750631ull}}, {{5832337630938547368ull, 1704571581400505ull}}, {{4665870104750837896ull, 1363657265120404ull}}, {{14844089797085161280ull, 2181851624192646ull}}, {{8185923022926218700ull, 1745481299354117ull}}, {{17616784862566705928ull, 1396385039483293ull}}, {{6050762891655267548ull, 2234216063173270ull}}, {{4840610313324214040ull, 1787372850538616ull}}, {{183139435917460908ull, 1429898280430893ull}}, {{7525209178217789372ull, 1143918624344714ull}}, {{972288240922732028ull, 1830269798951543ull}}, {{8156528222222006268ull, 1464215839161234ull}}, {{10214571392519515336ull, 1171372671328987ull}}, {{1585918969063583248ull, 1874196274126380ull}}, {{1268735175250866596ull, 1499357019301104ull}}, {{4704336954942603600ull, 1199485615440883ull}}, {{3837590313166255440ull, 1919176984705413ull}}, {{10448769880016824996ull, 1535341587764330ull}}, {{8359015904013459996ull, 1228273270211464ull}}, {{2306379002195805028ull, 1965237232338343ull}}, {{9223800831240464668ull, 1572189785870674ull}}, {{11068389479734282056ull, 1257751828696539ull}}, {{6641376723349120324ull, 2012402925914463ull}}, {{12691799008163116904ull, 1609922340731570ull}}, {{10153439206530493524ull, 1287937872585256ull}}, {{8866805100964968992ull, 2060700596136410ull}}, {{7093444080771975192ull, 1648560476909128ull}}, {{13053452894101400800ull, 1318848381527302ull}}, {{6128129371594599988ull, 2110157410443684ull}}, {{8591852312017590312ull, 1688125928354947ull}}, {{17941528293839803220ull, 1350500742683957ull}}, {{13949050011176043860ull, 2160801188294332ull}}, {{3780542379457014440ull, 1728640950635466ull}}, {{17781829162533252844ull, 1382912760508372ull}}, {{13693531401085563260ull, 2212660416813396ull}}, {{7265476306126540284ull, 1770128333450717ull}}, {{16880427489126963196ull, 1416102666760573ull}}, {{2436295547075839588ull, 1132882133408459ull}}, {{11276770504805163988ull, 1812611413453534ull}}, {{12710765218586041512ull, 1450089130762827ull}}, {{2789914545385012564ull, 1160071304610262ull}}, {{8153212087357930428ull, 1856114087376419ull}}, {{10211918484628254664ull, 1484891269901135ull}}, {{8169534787702603732ull, 1187913015920908ull}}, {{9381906845582255648ull, 1900660825473453ull}}, {{14884223105949625164ull, 1520528660378762ull}}, {{4528680855275879484ull, 1216422928303010ull}}, {{7245889368441407176ull, 1946276685284816ull}}, {{2107362680011215416ull, 1557021348227853ull}}, {{9064587773492792980ull, 1245617078582282ull}}, {{18192689252330379092ull, 1992987325731651ull}}, {{10864802587122392952ull, 1594389860585321ull}}, {{5002493254956004036ull, 1275511888468257ull}}, {{11693338022671516784ull, 2040819021549211ull}}, {{5665321603395303104ull, 1632655217239369ull}}, {{8221606097458152804ull, 1306124173791495ull}}, {{13154569755933044488ull, 2089798678066392ull}}, {{3144958175262614944ull, 1671838942453114ull}}, {{6205315354952002280ull, 1337471153962491ull}}, {{2549806938439383000ull, 2139953846339986ull}}, {{16797240809719147692ull, 1711963077071988ull}}, {{2369746203549587184ull, 1369570461657591ull}}, {{14859640369905070468ull, 2191312738652145ull}}, {{11887712295924056372ull, 1753050190921716ull}}, {{5820821021997334776ull, 1402440152737373ull}}, {{5623964820453825316ull, 2243904244379797ull}}, {{15567218300588791224ull, 1795123395503837ull}}, {{5075077010987212332ull, 1436098716403070ull}}, {{4060061608789769864ull, 1148878973122456ull}}, {{17564145018289362756ull, 1838206356995929ull}}, {{17740664829373400528ull, 1470565085596743ull}}, {{3124485419272989452ull, 1176452068477395ull}}, {{4999176670836783124ull, 1882323309563832ull}}, {{15067387780895157468ull, 1505858647651065ull}}, {{12053910224716125972ull, 1204686918120852ull}}, {{4528861100578160268ull, 1927499068993364ull}}, {{7312437695204438536ull, 1541999255194691ull}}, {{2160601341421640504ull, 1233599404155753ull}}, {{18214357405242266104ull, 1973759046649204ull}}, {{18260834738935723204ull, 1579007237319363ull}}, {{3540621346922847592ull, 1263205789855491ull}}, {{16733040599302287120ull, 2021129263768785ull}}, {{13386432479441829696ull, 1616903411015028ull}}, {{18087843613037284404ull, 1293522728812022ull}}, {{14183154521892013752ull, 2069636366099236ull}}, {{7657174802771700680ull, 1655709092879389ull}}, {{9815088656959270864ull, 1324567274303511ull}}, {{8325444221651012740ull, 2119307638885618ull}}, {{14039053006804630836ull, 1695446111108494ull}}, {{14920591220185614992ull, 1356356888886795ull}}, {{5426201878587432376ull, 2170171022218873ull}}, {{11719659132353766544ull, 1736136817775098ull}}, {{16754424935366833884ull, 1388909454220078ull}}, {{4670987008135472272ull, 2222255126752126ull}}, {{47440791766467496ull, 1777804101401701ull}}, {{14795347892380815288ull, 1422243281121360ull}}, {{11836278313904652232ull, 1137794624897088ull}}, {{15248696487505533248ull, 1820471399835341ull}}, {{8509608375262516272ull, 1456377119868273ull}}, {{14186384329693833664ull, 1165101695894618ull}}, {{562122039058671928ull, 1864162713431390ull}}, {{449697631246937540ull, 1491330170745112ull}}, {{11427804549223281000ull, 1193064136596089ull}}, {{7216440834531518636ull, 1908902618553743ull}}, {{13151850297109035552ull, 1527122094842994ull}}, {{14210829052429138764ull, 1221697675874395ull}}, {{4290582410177070412ull, 1954716281399033ull}}, {{10811163557625476976ull, 1563773025119226ull}}, {{4959582031358471256ull, 1251018420095381ull}}, {{556633620689733364ull, 2001629472152610ull}}, {{445306896551786692ull, 1601303577722088ull}}, {{7734943146725250000ull, 1281042862177670ull}}, {{12375909034760400000ull, 2049668579484272ull}}, {{2522029598324499352ull, 1639734863587418ull}}, {{9396321308143420128ull, 1311787890869934ull}}, {{3966067648803741236ull, 2098860625391895ull}}, {{3172854119042992988ull, 1679088500313516ull}}, {{17295678554202035684ull, 1343270800250812ull}}, {{12915690427755615800ull, 2149233280401300ull}}, {{10332552342204492640ull, 1719386624321040ull}}, {{8266041873763594112ull, 1375509299456832ull}}, {{16915015812763660904ull, 2200814879130931ull}}, {{9842663835469018400ull, 1760651903304745ull}}, {{7874131068375214720ull, 1408521522643796ull}}, {{2609956039958261452ull, 1126817218115037ull}}, {{7865278478675128648ull, 1802907548984059ull}}, {{9981571597682013240ull, 1442326039187247ull}}, {{606559648661789944ull, 1153860831349798ull}}, {{15727890696826505208ull, 1846177330159676ull}}, {{8892963742719293844ull, 1476941864127741ull}}, {{3425022179433524752ull, 1181553491302193ull}}, {{1790686672351729280ull, 1890485586083509ull}}, {{5121898152623293744ull, 1512388468866807ull}}, {{15165564966324365964ull, 1209910775093445ull}}, {{5818159872409433928ull, 1935857240149513ull}}, {{12033225527411367788ull, 1548685792119610ull}}, {{9626580421929094232ull, 1238948633695688ull}}, {{11713179860344640448ull, 1982317813913101ull}}, {{5681195073533802036ull, 1585854251130481ull}}, {{855607244085131304ull, 1268683400904385ull}}, {{1368971590536210088ull, 2029893441447016ull}}, {{15852572531396609364ull, 1623914753157612ull}}, {{5303360395633466844ull, 1299131802526090ull}}, {{8485376633013546952ull, 2078610884041744ull}}, {{10477650121152747884ull, 1662888707233395ull}}, {{8382120096922198308ull, 1330310965786716ull}}, {{6032694525591696644ull, 2128497545258746ull}}, {{1136806805731446992ull, 1702798036206997ull}}, {{11977491888810888564ull, 1362238428965597ull}}, {{4406591763129780408ull, 2179581486344956ull}}, {{18282668669471465620ull, 1743665189075964ull}}, {{18315483750319082820ull, 1394932151260771ull}}, {{3479332297317160248ull, 2231891442017235ull}}, {{2783465837853728200ull, 1785513153613788ull}}, {{9605470299766803204ull, 1428410522891030ull}}, {{7684376239813442564ull, 1142728418312824ull}}, {{1226955539475777132ull, 1828365469300519ull}}, {{4670913246322532028ull, 1462692375440415ull}}, {{3736730597058025624ull, 1170153900352332ull}}, {{9668117770034751320ull, 1872246240563731ull}}, {{4045145401285890732ull, 1497796992450985ull}}, {{3236116321028712588ull, 1198237593960788ull}}, {{1488437298904029816ull, 1917180150337261ull}}, {{15948145098090865144ull, 1533744120269808ull}}, {{1690469634246961148ull, 1226995296215847ull}}, {{6394100229537048160ull, 1963192473945355ull}}, {{5115280183629638528ull, 1570553979156284ull}}, {{7781572961645621144ull, 1256443183325027ull}}, {{16139865553374904156ull, 2010309093320043ull}}, {{1843845998474192356ull, 1608247274656035ull}}, {{1475076798779353884ull, 1286597819724828ull}}, {{17117518137014607508ull, 2058556511559724ull}}, {{17383363324353596328ull, 1646845209247779ull}}, {{17596039474224787384ull, 1317476167398223ull}}, {{6017570270308197880ull, 2107961867837158ull}}, {{12192753845730378948ull, 1686369494269726ull}}, {{6064854261842392836ull, 1349095595415781ull}}, {{2325069189464007892ull, 2158552952665250ull}}, {{1860055351571206312ull, 1726842362132200ull}}, {{1488044281256965048ull, 1381473889705760ull}}, {{2380870850011144080ull, 2210358223529216ull}}, {{16662091938976556556ull, 1768286578823372ull}}, {{5950975921697424600ull, 1414629263058698ull}}, {{12139478366841760324ull, 1131703410446958ull}}, {{15733816572204906200ull, 1810725456715133ull}}, {{1519006813538193988ull, 1448580365372107ull}}, {{12283251895056286160ull, 1158864292297685ull}}, {{1206458958380506240ull, 1854182867676297ull}}, {{12033213610930135964ull, 1483346294141037ull}}, {{2247873259260288124ull, 1186677035312830ull}}, {{3596597214816460996ull, 1898683256500528ull}}, {{10255975401336989444ull, 1518946605200422ull}}, {{826082691585770908ull, 1215157284160338ull}}, {{16079127565504874748ull, 1944251654656540ull}}, {{12863302052403899796ull, 1555401323725232ull}}, {{2911944012439299192ull, 1244321058980186ull}}, {{15727156864128609676ull, 1990913694368297ull}}, {{5203027861819067096ull, 1592730955494638ull}}, {{11541119918939074320ull, 1274184764395710ull}}, {{19047796592967300ull, 2038695623033137ull}}, {{11083284681500104808ull, 1630956498426509ull}}, {{12555976559941994172ull, 1304765198741207ull}}, {{5332167236939549380ull, 2087624317985932ull}}, {{15333780233777370472ull, 1670099454388745ull}}, {{12267024187021896380ull, 1336079563510996ull}}, {{12248541069751213560ull, 2137727301617594ull}}, {{13488181670542881172ull, 1710181841294075ull}}, {{10790545336434304936ull, 1368145473035260ull}}, {{17264872538294887900ull, 2189032756856416ull}}, {{10122549215893999996ull, 1751226205485133ull}}, {{15476737002199020644ull, 1400980964388106ull}}, {{17384081574034612384ull, 2241569543020970ull}}, {{13907265259227689908ull, 1793255634416776ull}}, {{7436463392640241600ull, 1434604507533421ull}}, {{2259821899370282956ull, 1147683606026737ull}}, {{7305063853734363056ull, 1836293769642779ull}}, {{9533399897729400768ull, 1469035015714223ull}}, {{15005417547667341260ull, 1175228012571378ull}}, {{1872575187816284080ull, 1880364820114206ull}}, {{16255455409220668556ull, 1504291856091364ull}}, {{16693713142118445168ull, 1203433484873091ull}}, {{884499324196140008ull, 1925493575796947ull}}, {{11775645903582642976ull, 1540394860637557ull}}, {{2041819093382293732ull, 1232315888510046ull}}, {{14334956993637400944ull, 1971705421616073ull}}, {{399919150684189784ull, 1577364337292859ull}}, {{4009284135289262152ull, 1261891469834287ull}}, {{10104203431204729764ull, 2019026351734859ull}}, {{11772711559705694136ull, 1615221081387887ull}}, {{2039471618280734660ull, 1292176865110310ull}}, {{3263154589249175460ull, 2067482984176496ull}}, {{17367918930366981660ull, 1653986387341196ull}}, {{10204986329551675004ull, 1323189109872957ull}}, {{1570582868315038716ull, 2117102575796732ull}}, {{12324512738877761940ull, 1693682060637385ull}}, {{9859610191102209552ull, 1354945648509908ull}}, {{12086027491021624960ull, 2167913037615853ull}}, {{17047519622301120616ull, 1734330430092682ull}}, {{6259318068357075844ull, 1387464344074146ull}}, {{2636211279887500708ull, 2219942950518634ull}}, {{5798317838651910888ull, 1775954360414907ull}}, {{15706700715147259680ull, 1420763488331925ull}}, {{12565360572117807744ull, 1136610790665540ull}}, {{1657832841678940776ull, 1818577265064865ull}}, {{1326266273343152620ull, 1454861812051892ull}}, {{12129059462900253064ull, 1163889449641513ull}}, {{15717146325898494584ull, 1862223119426421ull}}, {{8884368245976885344ull, 1489778495541137ull}}, {{18175541041007239244ull, 1191822796432909ull}}, {{18012819221385851820ull, 1906916474292655ull}}, {{14410255377108681456ull, 1525533179434124ull}}, {{15217553116428855488ull, 1220426543547299ull}}, {{13280038542060437812ull, 1952682469675679ull}}, {{14313379648390260572ull, 1562145975740543ull}}, {{382657274486477488ull, 1249716780592435ull}}, {{612251639178363980ull, 1999546848947896ull}}, {{15247196570310332476ull, 1599637479158316ull}}, {{8508408441506355660ull, 1279709983326653ull}}, {{9924104691668258732ull, 2047535973322645ull}}, {{7939283753334606984ull, 1638028778658116ull}}, {{2662078187925775264ull, 1310423022926493ull}}, {{569976285939330100ull, 2096676836682389ull}}, {{4145329843493374404ull, 1677341469345911ull}}, {{18073659133762340816ull, 1341873175476728ull}}, {{6781761725568283368ull, 2146997080762766ull}}, {{1736060565712716368ull, 1717597664610213ull}}, {{8767546082053993740ull, 1374078131688170ull}}, {{14028073731286389988ull, 2198525010701072ull}}, {{3843761355545291344ull, 1758820008560858ull}}, {{10453706713920053720ull, 1407056006848686ull}}, {{9347233112788265308ull, 2251289610957898ull}}, {{14856484119714432892ull, 1801031688766318ull}}, {{817140851545815344ull, 1440825351013055ull}}, {{653712681236652276ull, 1152660280810444ull}}, {{8424637919462464288ull, 1844256449296710ull}}, {{6739710335569971428ull, 1475405159437368ull}}, {{12770465897939797788ull, 1180324127549894ull}}, {{9364698992477945496ull, 1888518604079831ull}}, {{3802410379240446072ull, 1510814883263865ull}}, {{3041928303392356856ull, 1208651906611092ull}}, {{8556434100169681296ull, 1933843050577747ull}}, {{17913193724361476008ull, 1547074440462197ull}}, {{6951857350005360160ull, 1237659552369758ull}}, {{7433622945266665932ull, 1980255283791613ull}}, {{13325595985697153392ull, 1584204227033290ull}}, {{10660476788557722712ull, 1267363381626632ull}}, {{2299367602724715048ull, 2027781410602612ull}}, {{12907540526405503008ull, 1622225128482089ull}}, {{14015381235866312728ull, 1297780102785671ull}}, {{15045912347902279720ull, 2076448164457074ull}}, {{15726078693063734100ull, 1661158531565659ull}}, {{16270211769192897604ull, 1328926825252527ull}}, {{11274943571740994872ull, 2126282920404044ull}}, {{12709303672134706220ull, 1701026336323235ull}}, {{10167442937707764976ull, 1360821069058588ull}}, {{12578559885590513640ull, 2177313710493741ull}}, {{6373499093730500588ull, 1741850968394993ull}}, {{12477496904468221116ull, 1393480774715994ull}}, {{8895948602923422820ull, 2229569239545591ull}}, {{3427410067596827932ull, 1783655391636473ull}}, {{10120625683561282992ull, 1426924313309178ull}}, {{15475198176332847040ull, 1141539450647342ull}}, {{10002921823164913972ull, 1826463121035748ull}}, {{15381035088015751824ull, 1461170496828598ull}}, {{1236781626186870488ull, 1168936397462879ull}}, {{9357548231382813428ull, 1870298235940606ull}}, {{3796689770364340420ull, 1496238588752485ull}}, {{3037351816291472336ull, 1196990871001988ull}}, {{1170414091324445412ull, 1915185393603181ull}}, {{15693726532027197624ull, 1532148314882544ull}}, {{16244330040363668420ull, 1225718651906035ull}}, {{7544183990872317860ull, 1961149843049657ull}}, {{17103393636923585256ull, 1568919874439725ull}}, {{13682714909538868204ull, 1255135899551780ull}}, {{3445599781552637512ull, 2008217439282849ull}}, {{6445828639984020332ull, 1606573951426279ull}}, {{8846011726729126588ull, 1285259161141023ull}}, {{10464269948024692220ull, 2056414657825637ull}}, {{992718328935933128ull, 1645131726260510ull}}, {{794174663148746504ull, 1316105381008408ull}}, {{16028074720005635700ull, 2105768609613452ull}}, {{5443762146520687912ull, 1684614887690762ull}}, {{15423056161442281300ull, 1347691910152609ull}}, {{13608843414081919112ull, 2156307056244175ull}}, {{10887074731265535288ull, 1725045644995340ull}}, {{8709659785012428232ull, 1380036515996272ull}}, {{17624804470761795492ull, 2208058425594035ull}}, {{14099843576609436392ull, 1766446740475228ull}}, {{211828417061818144ull, 1413157392380183ull}}, {{7548160363133275164ull, 1130525913904146ull}}, {{4698358951529419616ull, 1808841462246634ull}}, {{7448035975965446016ull, 1447073169797307ull}}, {{17026475224998087780ull, 1157658535837845ull}}, {{8795616286287388832ull, 1852253657340553ull}}, {{14415190658513731712ull, 1481802925872442ull}}, {{4153454897327164724ull, 1185442340697954ull}}, {{14024225465207284204ull, 1896707745116726ull}}, {{7530031557423917040ull, 1517366196093381ull}}, {{2334676431197223308ull, 1213892956874705ull}}, {{3735482289915557296ull, 1942228730999528ull}}, {{10367083461416266484ull, 1553782984799622ull}}, {{914969139649192540ull, 1243026387839698ull}}, {{16221345882406349356ull, 1988842220543516ull}}, {{9287727891183169160ull, 1591073776434813ull}}, {{14808879942430355976ull, 1272859021147850ull}}, {{5247463834179017944ull, 2036574433836561ull}}, {{508622252601304032ull, 1629259547069249ull}}, {{4096246616822953548ull, 1303407637655399ull}}, {{13932692216400546328ull, 2085452220248638ull}}, {{78107328894706092ull, 1668361776198911ull}}, {{14819881122083406164ull, 1334689420959128ull}}, {{1575716906881987928ull, 2135503073534606ull}}, {{16017968784473231632ull, 1708402458827684ull}}, {{16503723842320495628ull, 1366721967062147ull}}, {{11648562888745151716ull, 2186755147299436ull}}, {{5629501496254211048ull, 1749404117839549ull}}, {{8192950011745279164ull, 1399523294271639ull}}, {{2040673574566715692ull, 2239237270834623ull}}, {{9011236489137193200ull, 1791389816667698ull}}, {{14587686820793575204ull, 1433111853334158ull}}, {{602103012409129196ull, 1146489482667327ull}}, {{4652713634596517036ull, 1834383172267723ull}}, {{11100868537161034272ull, 1467506537814178ull}}, {{16259392459212648064ull, 1174005230251342ull}}, {{11257632675772595612ull, 1878408368402148ull}}, {{16384803770101897136ull, 1502726694721718ull}}, {{2039796571855786740ull, 1202181355777375ull}}, {{3263674514969258784ull, 1923490169243800ull}}, {{2610939611975407028ull, 1538792135395040ull}}, {{2088751689580325620ull, 1231033708316032ull}}, {{7031351518070431316ull, 1969653933305651ull}}, {{1935732399714434732ull, 1575723146644521ull}}, {{16305981178739189076ull, 1260578517315616ull}}, {{264128182789330260ull, 2016925627704987ull}}, {{11279348990457195180ull, 1613540502163989ull}}, {{12712828007107666464ull, 1290832401731191ull}}, {{12961827181888445700ull, 2065331842769906ull}}, {{6680112930768846236ull, 1652265474215925ull}}, {{5344090344615076988ull, 1321812379372740ull}}, {{8550544551384123184ull, 2114899806996384ull}}, {{10529784455849208868ull, 1691919845597107ull}}, {{1045129935195546448ull, 1353535876477686ull}}, {{12740254340538605288ull, 2165657402364297ull}}, {{2813505842947063584ull, 1732525921891438ull}}, {{9629502303841471512ull, 1386020737513150ull}}, {{15407203686146354424ull, 2217633180021040ull}}, {{12325762948917083536ull, 1774106544016832ull}}, {{2481912729649846184ull, 1419285235213466ull}}, {{16742925442687518240ull, 1135428188170772ull}}, {{12031285449332387892ull, 1816685101073236ull}}, {{5935679544723999988ull, 1453348080858589ull}}, {{8437892450521110312ull, 1162678464686871ull}}, {{6121930291349955856ull, 1860285543498994ull}}, {{8586893047821875008ull, 1488228434799195ull}}, {{6869514438257500008ull, 1190582747839356ull}}, {{3612525471728179364ull, 1904932396542970ull}}, {{2890020377382543492ull, 1523945917234376ull}}, {{17069411560873676084ull, 1219156733787500ull}}, {{8864314423688330124ull, 1950650774060001ull}}, {{3402102724208753776ull, 1560520619248001ull}}, {{17479077438334644312ull, 1248416495398400ull}}, {{9519779827625879284ull, 1997466392637441ull}}, {{3926475047358793104ull, 1597973114109953ull}}, {{10519877667370855128ull, 1278378491287962ull}}, {{2074409008825726916ull, 2045405586060740ull}}, {{1659527207060581532ull, 1636324468848592ull}}, {{12395668209874196196ull, 1309059575078873ull}}, {{16143720321056803588ull, 2094495320126197ull}}, {{5536278627361622224ull, 1675596256100958ull}}, {{11807720531373118424ull, 1340477004880766ull}}, {{11513655220713168836ull, 2144763207809226ull}}, {{5521575361828624744ull, 1715810566247381ull}}, {{727911474720989472ull, 1372648452997905ull}}, {{1164658359553583156ull, 2196237524796648ull}}, {{8310424317126687172ull, 1756990019837318ull}}, {{14027037083185170384ull, 1405592015869854ull}}, {{11375212888870541644ull, 2248947225391767ull}}, {{1721472681612612668ull, 1799157780313414ull}}, {{5066526960032000456ull, 1439326224250731ull}}, {{363872753283690044ull, 1151460979400585ull}}, {{582196405253904068ull, 1842337567040936ull}}, {{15223152383170764548ull, 1473870053632748ull}}, {{1110475462310880668ull, 1179096042906199ull}}, {{9155458369181229716ull, 1886553668649918ull}}, {{14703064324828804420ull, 1509242934919934ull}}, {{15451800274604953860ull, 1207394347935947ull}}, {{9965485180400284880ull, 1931830956697516ull}}, {{4283039329578317580ull, 1545464765358013ull}}, {{10805129093146474712ull, 1236371812286410ull}}, {{17288206549034359540ull, 1978194899658256ull}}, {{10141216424485577308ull, 1582555919726605ull}}, {{8112973139588461848ull, 1266044735781284ull}}, {{1912710579115807984ull, 2025671577250055ull}}, {{1530168463292646388ull, 1620537261800044ull}}, {{4913483585376027432ull, 1296429809440035ull}}, {{7861573736601643896ull, 2074287695104056ull}}, {{2599910174539404792ull, 1659430156083245ull}}, {{2079928139631523832ull, 1327544124866596ull}}, {{14395931467636169104ull, 2124070599786553ull}}, {{448698729883204312ull, 1699256479829243ull}}, {{7737656613390384096ull, 1359405183863394ull}}, {{1312204137198883584ull, 2175048294181431ull}}, {{15807158568726748160ull, 1740038635345144ull}}, {{16335075669723308852ull, 1392030908276115ull}}, {{7689376997847742548ull, 2227249453241785ull}}, {{6151501598278194036ull, 1781799562593428ull}}, {{12299898908106375876ull, 1425439650074742ull}}, {{2461221497001280056ull, 1140351720059794ull}}, {{11316652024685868736ull, 1824562752095670ull}}, {{9053321619748694988ull, 1459650201676536ull}}, {{3553308481057045664ull, 1167720161341229ull}}, {{13063991199175093712ull, 1868352258145966ull}}, {{6761844144598164648ull, 1494681806516773ull}}, {{12788172945162352364ull, 1195745445213418ull}}, {{16771727897517853460ull, 1913192712341469ull}}, {{17106731132756193092ull, 1530554169873175ull}}, {{13685384906204954472ull, 1224443335898540ull}}, {{3449871776218375540ull, 1959109337437665ull}}, {{2759897420974700432ull, 1567287469950132ull}}, {{13275964381005491316ull, 1253829975960105ull}}, {{2794798935899234488ull, 2006127961536169ull}}, {{5925187963461297912ull, 1604902369228935ull}}, {{4740150370769038332ull, 1283921895383148ull}}, {{3894891778488551008ull, 2054275032613037ull}}, {{14183959867016571776ull, 1643420026090429ull}}, {{15036516708355167744ull, 1314736020872343ull}}, {{1922333844916806452ull, 2103577633395750ull}}, {{1537867075933445160ull, 1682862106716600ull}}, {{1230293660746756128ull, 1346289685373280ull}}, {{1968469857194809804ull, 2154063496597248ull}}, {{8953473515239668492ull, 1723250797277798ull}}, {{14541476441675555440ull, 1378600637822238ull}}, {{1130269418229426764ull, 2205761020515582ull}}, {{11972261978809272380ull, 1764608816412465ull}}, {{9577809583047417904ull, 1411687053129972ull}}, {{283550036954113676ull, 1129349642503978ull}}, {{15211075318094223176ull, 1806959428006364ull}}, {{15858209069217288864ull, 1445567542405091ull}}, {{8997218440631920768ull, 1156454033924073ull}}, {{10706200690269162904ull, 1850326454278517ull}}, {{1186262922731509676ull, 1480261163422814ull}}, {{4638359152927118064ull, 1184208930738251ull}}, {{42677015199568260ull, 1894734289181202ull}}, {{11102188056385385576ull, 1515787431344961ull}}, {{5192401630366398136ull, 1212629945075969ull}}, {{15686540238070057668ull, 1940207912121550ull}}, {{12549232190456046132ull, 1552166329697240ull}}, {{10039385752364836904ull, 1241733063757792ull}}, {{1305621944816097756ull, 1986772902012468ull}}, {{8423195185336698852ull, 1589418321609974ull}}, {{10427904963011269404ull, 1271534657287979ull}}, {{5616601496592300080ull, 2034455451660767ull}}, {{15561327641499571032ull, 1627564361328613ull}}, {{1381015668973925856ull, 1302051489062891ull}}, {{13277671514584012340ull, 2083282382500625ull}}, {{10622137211667209872ull, 1666625906000500ull}}, {{8497709769333767896ull, 1333300724800400ull}}, {{13596335630934028636ull, 2133281159680640ull}}, {{10877068504747222908ull, 1706624927744512ull}}, {{1322957174313957680ull, 1365299942195610ull}}, {{2116731478902332288ull, 2184479907512976ull}}, {{16450780442089507124ull, 1747583926010380ull}}, {{13160624353671605700ull, 1398067140808304ull}}, {{9988952521648838148ull, 2236907425293287ull}}, {{612464387835249872ull, 1789525940234630ull}}, {{489971510268199900ull, 1431620752187704ull}}, {{4081326022956470240ull, 1145296601750163ull}}, {{2840772821988442064ull, 1832474562800261ull}}, {{17030013516558394944ull, 1465979650240208ull}}, {{2555964369020984984ull, 1172783720192167ull}}, {{7778891805175486300ull, 1876453952307467ull}}, {{17291159888366120008ull, 1501163161845973ull}}, {{2764881466467165036ull, 1200930529476779ull}}, {{11802507975831284708ull, 1921488847162846ull}}, {{5752657565923117444ull, 1537191077730277ull}}, {{15670172496964224924ull, 1229752862184221ull}}, {{17693578365658939232ull, 1967604579494754ull}}, {{17844211507269061708ull, 1574083663595803ull}}, {{3207322761589518396ull, 1259266930876643ull}}, {{1442367603801319112ull, 2014827089402629ull}}, {{4843242897782965612ull, 1611861671522103ull}}, {{11253291947710193136ull, 1289489337217682ull}}, {{3247871857368667728ull, 2063182939548292ull}}, {{13666343930120665152ull, 1650546351638633ull}}, {{18311772773580352768ull, 1320437081310906ull}}, {{3473394734535192164ull, 2112699330097451ull}}, {{17536111046595795024ull, 1690159464077960ull}}, {{14028888837276636020ull, 1352127571262368ull}}, {{310129251191155692ull, 2163404114019790ull}}, {{248103400952924552ull, 1730723291215832ull}}, {{11266529164988070612ull, 1384578632972665ull}}, {{18026446663980912980ull, 2215325812756264ull}}, {{18110506145926640708ull, 1772260650205011ull}}, {{10799056101999402244ull, 1417808520164009ull}}, {{12328593696341432116ull, 1134246816131207ull}}, {{4968354655178650096ull, 1814794905809932ull}}, {{15042730168368651044ull, 1451835924647945ull}}, {{12034184134694920836ull, 1161468739718356ull}}, {{11875996986028052692ull, 1858349983549370ull}}, {{9500797588822442152ull, 1486679986839496ull}}, {{3911289256316043400ull, 1189343989471597ull}}, {{9947411624847579764ull, 1902950383154555ull}}, {{7957929299878063808ull, 1522360306523644ull}}, {{10055692254644361372ull, 1217888245218915ull}}, {{16089107607430978196ull, 1948621192350264ull}}, {{16560634900686692880ull, 1558896953880211ull}}, {{9559159105807443980ull, 1247117563104169ull}}, {{4226608125066179396ull, 1995388100966671ull}}, {{18138681759020584812ull, 1596310480773336ull}}, {{10821596592474557524ull, 1277048384618669ull}}, {{6246508103733561072ull, 2043277415389871ull}}, {{1307857668244938532ull, 1634621932311897ull}}, {{12114332578821681796ull, 1307697545849517ull}}, {{4625536867147049584ull, 2092316073359228ull}}, {{11079127123201460312ull, 1673852858687382ull}}, {{1484604069077347604ull, 1339082286949906ull}}, {{13443412954749487136ull, 2142531659119849ull}}, {{14444079178541500032ull, 1714025327295879ull}}, {{15244612157575110348ull, 1371220261836703ull}}, {{2255286563668714616ull, 2193952418938726ull}}, {{16561624509902612988ull, 1755161935150980ull}}, {{13249299607922090388ull, 1404129548120784ull}}, {{10130832928449613652ull, 2246607276993255ull}}, {{8104666342759690924ull, 1797285821594604ull}}, {{10173081888949663060ull, 1437828657275683ull}}, {{15517163140643551096ull, 1150262925820546ull}}, {{17448763395545861108ull, 1840420681312874ull}}, {{17648359531178599208ull, 1472336545050299ull}}, {{17808036439684789688ull, 1177869236040239ull}}, {{17424811859269932536ull, 1884590777664383ull}}, {{2871803043190215056ull, 1507672622131507ull}}, {{13365488878777903016ull, 1206138097705205ull}}, {{2938038132335093208ull, 1929820956328329ull}}, {{6039779320609984892ull, 1543856765062663ull}}, {{12210521085971808560ull, 1235085412050130ull}}, {{1090089663845342080ull, 1976136659280209ull}}, {{4561420545818183984ull, 1580909327424167ull}}, {{14717182880880278156ull, 1264727461939333ull}}, {{1411399720956983116ull, 2023563939102934ull}}, {{4818468591507496816ull, 1618851151282347ull}}, {{14922821317431728420ull, 1295080921025877ull}}, {{9119118848923124180ull, 2072129473641404ull}}, {{10984643893880409668ull, 1657703578913123ull}}, {{16166412744588148380ull, 1326162863130498ull}}, {{3730167502889575472ull, 2121860581008798ull}}, {{10362831631795481024ull, 1697488464807038ull}}, {{15668962934920205464ull, 1357990771845630ull}}, {{6623596622162777128ull, 2172785234953009ull}}, {{8988226112472132024ull, 1738228187962407ull}}, {{18258627334203436588ull, 1390582550369925ull}}, {{10767059661015946928ull, 2224932080591881ull}}, {{4924298914070847220ull, 1779945664473505ull}}, {{3939439131256677776ull, 1423956531578804ull}}, {{6840900119747252544ull, 1139165225263043ull}}, {{7256091376853693744ull, 1822664360420869ull}}, {{9494221916224865320ull, 1458131488336695ull}}, {{7595377532979892256ull, 1166505190669356ull}}, {{4773906423284006964ull, 1866408305070970ull}}, {{3819125138627205568ull, 1493126644056776ull}}, {{17812695369869405748ull, 1194501315245420ull}}, {{10053568518081497584ull, 1911202104392673ull}}, {{15421552443949018712ull, 1528961683514138ull}}, {{1269195510933484000ull, 1223169346811311ull}}, {{13098759261719305372ull, 1957070954898097ull}}, {{3100309779891623648ull, 1565656763918478ull}}, {{9858945453397119564ull, 1252525411134782ull}}, {{1016917466467750012ull, 2004040657815652ull}}, {{11881580417399930980ull, 1603232526252521ull}}, {{5815915519178034460ull, 1282586021002017ull}}, {{12994813645426765460ull, 2052137633603227ull}}, {{3017153286857591720ull, 1641710106882582ull}}, {{13481769073711804348ull, 1313368085506065ull}}, {{3124086444229335340ull, 2101388936809705ull}}, {{2499269155383468272ull, 1681111149447764ull}}, {{5688764139048684940ull, 1344888919558211ull}}, {{1723324992994075260ull, 2151822271293138ull}}, {{8757357623879080852ull, 1721457817034510ull}}, {{7005886099103264680ull, 1377166253627608ull}}, {{7520068943823313168ull, 2203466005804173ull}}, {{13394752784542471180ull, 1762772804643338ull}}, {{18094499857117797592ull, 1410218243714670ull}}, {{14475599885694238072ull, 1128174594971736ull}}, {{15782262187626960272ull, 1805079351954778ull}}, {{1557763305875837248ull, 1444063481563823ull}}, {{8624908274184490444ull, 1155250785251058ull}}, {{10110504423953274388ull, 1848401256401693ull}}, {{15467101168646440156ull, 1478721005121354ull}}, {{16063029749659062448ull, 1182976804097083ull}}, {{3564754711003037976ull, 1892762886555334ull}}, {{6541152583544340704ull, 1514210309244267ull}}, {{16300968511061203532ull, 1211368247395413ull}}, {{3945456729246463716ull, 1938189195832662ull}}, {{14224411827622901940ull, 1550551356666129ull}}, {{15068878276840231876ull, 1240441085332903ull}}, {{1974112354492909064ull, 1984705736532646ull}}, {{16336685142561968544ull, 1587764589226116ull}}, {{9379999299307664512ull, 1270211671380893ull}}, {{11318650064150352896ull, 2032338674209429ull}}, {{12744268866062192640ull, 1625870939367543ull}}, {{17574112722333574756ull, 1300696751494034ull}}, {{17050533911507988644ull, 2081114802390455ull}}, {{13640427129206390916ull, 1664891841912364ull}}, {{14601690518107023056ull, 1331913473529891ull}}, {{15984007199487416240ull, 2131061557647826ull}}, {{9097856944848022668ull, 1704849246118261ull}}, {{3588936741136507812ull, 1363879396894609ull}}, {{13120996415302233148ull, 2182207035031374ull}}, {{14186145946983696840ull, 1745765628025099ull}}, {{15038265572328867796ull, 1396612502420079ull}}, {{12993178471500457504ull, 2234580003872127ull}}, {{3015845147716545356ull, 1787664003097702ull}}, {{13480722562398967256ull, 1430131202478161ull}}, {{7095229235177263480ull, 1144104961982529ull}}, {{284320332057890600ull, 1830567939172047ull}}, {{11295502709872043448ull, 1464454351337637ull}}, {{1657704538413814112ull, 1171563481070110ull}}, {{2652327261462102580ull, 1874501569712176ull}}, {{16879257068137323356ull, 1499601255769740ull}}, {{13503405654509858684ull, 1199681004615792ull}}, {{6848053788248132604ull, 1919489607385268ull}}, {{12857140660082326728ull, 1535591685908214ull}}, {{13975061342807771708ull, 1228473348726571ull}}, {{14981400519008614084ull, 1965557357962514ull}}, {{15674469229948801592ull, 1572445886370011ull}}, {{8850226569217130948ull, 1257956709096009ull}}, {{3092316066521678548ull, 2012730734553615ull}}, {{2473852853217342840ull, 1610184587642892ull}}, {{13047128726799605240ull, 1288147670114313ull}}, {{17186057148137458064ull, 2061036272182901ull}}, {{10059496903768056128ull, 1648829017746321ull}}, {{4358248708272534580ull, 1319063214197057ull}}, {{10662546747977965648ull, 2110501142715291ull}}, {{4840688583640462196ull, 1688400914172233ull}}, {{11251248496396190404ull, 1350720731337786ull}}, {{10623299964750084000ull, 2161153170140458ull}}, {{15877337601283887844ull, 1728922536112366ull}}, {{9012521266285199952ull, 1383138028889893ull}}, {{10730685211314409604ull, 2213020846223829ull}}, {{12273896983793438004ull, 1770416676979063ull}}, {{17197815216518571048ull, 1416333341583250ull}}, {{13758252173214856840ull, 1133066673266600ull}}, {{3566459403434219328ull, 1812906677226561ull}}, {{17610562781715016756ull, 1450325341781248ull}}, {{3020403781146282432ull, 1160260273424999ull}}, {{12211343679317872540ull, 1856416437479998ull}}, {{17147772572938118680ull, 1485133149983998ull}}, {{2650171614124763972ull, 1188106519987199ull}}, {{11618972212083443004ull, 1900970431979518ull}}, {{16673875399150575052ull, 1520776345583614ull}}, {{17028449134062370364ull, 1216621076466891ull}}, {{1420076911306420320ull, 1946593722347027ull}}, {{12204107973270867224ull, 1557274977877621ull}}, {{6073937563874783456ull, 1245819982302097ull}}, {{13407648916941563856ull, 1993311971683355ull}}, {{10726119133553251084ull, 1594649577346684ull}}, {{12270244121584511188ull, 1275719661877347ull}}, {{4874995335567576612ull, 2041151459003756ull}}, {{210647453712150964ull, 1632921167203005ull}}, {{168517962969720772ull, 1306336933762404ull}}, {{7648326370235373884ull, 2090139094019846ull}}, {{2429312281446388784ull, 1672111275215877ull}}, {{13011496269382841996ull, 1337689020172701ull}}, {{13439696401528726548ull, 2140302432276322ull}}, {{3373059491739160592ull, 1712241945821058ull}}, {{10077145222875149120ull, 1369793556656846ull}}, {{8744734727116417944ull, 2191669690650954ull}}, {{10685136596435044680ull, 1753335752520763ull}}, {{15926806906631856388ull, 1402668602016610ull}}, {{7036146976901418608ull, 2244269763226577ull}}, {{16696964025746865856ull, 1795415810581261ull}}, {{9668222405855582360ull, 1436332648465009ull}}, {{11423926739426376212ull, 1149066118772007ull}}, {{3520887524114560648ull, 1838505790035212ull}}, {{13884756463517379488ull, 1470804632028169ull}}, {{14797153985555813912ull, 1176643705622535ull}}, {{5228702303179750644ull, 1882629928996057ull}}, {{15251008286769531484ull, 1506103943196845ull}}, {{12200806629415625188ull, 1204883154557476ull}}, {{12142592977581179656ull, 1927813047291962ull}}, {{2335376752581123076ull, 1542250437833570ull}}, {{1868301402064898460ull, 1233800350266856ull}}, {{14057328687529568508ull, 1974080560426969ull}}, {{14935211764765565128ull, 1579264448341575ull}}, {{11948169411812452104ull, 1263411558673260ull}}, {{670326985190371752ull, 2021458493877217ull}}, {{11604308032378028368ull, 1617166795101773ull}}, {{16662144055386243340ull, 1293733436081418ull}}, {{4523337600166527408ull, 2069973497730270ull}}, {{3618670080133221928ull, 1655978798184216ull}}, {{17652331323074218832ull, 1324783038547372ull}}, {{13486334857951108844ull, 2119652861675796ull}}, {{7099719071618976752ull, 1695722289340637ull}}, {{16747821701520912368ull, 1356577831472509ull}}, {{15728468278207728824ull, 2170524530356015ull}}, {{12582774622566183056ull, 1736419624284812ull}}, {{2687522068569125800ull, 1389135699427850ull}}, {{4300035309710601280ull, 2222617119084560ull}}, {{3440028247768481024ull, 1778093695267648ull}}, {{10130720227698605464ull, 1422474956214118ull}}, {{15483273811642705016ull, 1137979964971294ull}}, {{13705191654402597060ull, 1820767943954071ull}}, {{7274804508780167324ull, 1456614355163257ull}}, {{16887890051249864828ull, 1165291484130605ull}}, {{8573880008290232112ull, 1864466374608969ull}}, {{10548452821374096012ull, 1491573099687175ull}}, {{8438762257099276808ull, 1193258479749740ull}}, {{13502019611358842896ull, 1909213567599584ull}}, {{14490964503828984640ull, 1527370854079667ull}}, {{4214073973579367064ull, 1221896683263734ull}}, {{14121215987210807952ull, 1955034693221974ull}}, {{14986321604510556684ull, 1564027754577579ull}}, {{15678406098350355668ull, 1251222203662063ull}}, {{2949356868909107132ull, 2001955525859302ull}}, {{13427531939353016676ull, 1601564420687441ull}}, {{7052676736740503016ull, 1281251536549953ull}}, {{7594933964042894504ull, 2050002458479925ull}}, {{6075947171234315604ull, 1640001966783940ull}}, {{4860757736987452484ull, 1312001573427152ull}}, {{11466561193921834296ull, 2099202517483443ull}}, {{16551946584621288084ull, 1679362013986754ull}}, {{16930906082438940788ull, 1343489611189403ull}}, {{4953356843450843324ull, 2149583377903046ull}}, {{273336660018764336ull, 1719666702322437ull}}, {{11286715772240742440ull, 1375733361857949ull}}, {{6990698791359456932ull, 2201173378972719ull}}, {{9281907847829475868ull, 1760938703178175ull}}, {{7425526278263580696ull, 1408750962542540ull}}, {{5940421022610864556ull, 1127000770034032ull}}, {{13194022450919293612ull, 1803201232054451ull}}, {{6865869145993524568ull, 1442560985643561ull}}, {{1803346502052909332ull, 1154048788514849ull}}, {{10264052032768475576ull, 1846478061623758ull}}, {{15589939255698601108ull, 1477182449299006ull}}, {{8782602589816970560ull, 1181745959439205ull}}, {{14052164143707152900ull, 1890793535102728ull}}, {{173684870739991352ull, 1512634828082183ull}}, {{7517645526075813728ull, 1210107862465746ull}}, {{4649535212237481316ull, 1936172579945194ull}}, {{7408976984531895376ull, 1548938063956155ull}}, {{5927181587625516300ull, 1239150451164924ull}}, {{16862188169684646728ull, 1982640721863878ull}}, {{2421704091521986412ull, 1586112577491103ull}}, {{9316060902701409776ull, 1268890061992882ull}}, {{148302185354614352ull, 2030224099188612ull}}, {{11186688192509422448ull, 1624179279350889ull}}, {{12638699368749448284ull, 1299343423480711ull}}, {{12843221360515296608ull, 2078949477569138ull}}, {{17653274717896057932ull, 1663159582055310ull}}, {{14122619774316846344ull, 1330527665644248ull}}, {{460098750455492212ull, 2128844265030798ull}}, {{7746776629848214416ull, 1703075412024638ull}}, {{13576118933362392180ull, 1362460329619710ull}}, {{3275046219670275872ull, 2179936527391537ull}}, {{13688083419961951668ull, 1743949221913229ull}}, {{14639815550711471656ull, 1395159377530583ull}}, {{1287611992686892712ull, 2232255004048934ull}}, {{4719438408891424492ull, 1785804003239147ull}}, {{14843597171338870564ull, 1428643202591317ull}}, {{4496180107587275804ull, 1142914562073054ull}}, {{14572585801623461932ull, 1828663299316886ull}}, {{7968719826556859224ull, 1462930639453509ull}}, {{10064324675987397700ull, 1170344511562807ull}}, {{1345524222612195032ull, 1872551218500492ull}}, {{12144465822315486992ull, 1498040974800393ull}}, {{17094270287336210240ull, 1198432779840314ull}}, {{16282786015512205416ull, 1917492447744503ull}}, {{1958182368184033364ull, 1533993958195603ull}}, {{8945243524031047336ull, 1227195166556482ull}}, {{18001738453191586064ull, 1963512266490371ull}}, {{10712041947811358528ull, 1570809813192297ull}}, {{1190935928765266176ull, 1256647850553838ull}}, {{16662892744992067176ull, 2010636560886140ull}}, {{13330314195993653740ull, 1608509248708912ull}}, {{3285553727311102344ull, 1286807398967130ull}}, {{5256885963697763752ull, 2058891838347408ull}}, {{11584206400442031648ull, 1647113470677926ull}}, {{5578016305611714996ull, 1317690776542341ull}}, {{1546128459494923348ull, 2108305242467746ull}}, {{15994298026563579968ull, 1686644193974196ull}}, {{9106089606508953652ull, 1349315355179357ull}}, {{18259092185156236168ull, 2158904568286971ull}}, {{10917924933383078612ull, 1727123654629577ull}}, {{1355642317222642240ull, 1381698923703662ull}}, {{5858376522298137912ull, 2210718277925859ull}}, {{8376050032580420652ull, 1768574622340687ull}}, {{17768886470290067492ull, 1414859697872549ull}}, {{17904457990973964316ull, 1131887758298039ull}}, {{17579086341332611936ull, 1811020413276863ull}}, {{2995222628840358580ull, 1448816330621491ull}}, {{17153573362039928156ull, 1159053064497192ull}}, {{12688322120296243756ull, 1854484903195508ull}}, {{17529355325720815652ull, 1483587922556406ull}}, {{10334135445834742196ull, 1186870338045125ull}}, {{16534616713335587516ull, 1898992540872200ull}}, {{13227693370668470012ull, 1519194032697760ull}}, {{10582154696534776012ull, 1215355226158208ull}}, {{13242098699713731296ull, 1944568361853133ull}}, {{17972376589254805680ull, 1555654689482506ull}}, {{10688552456661934220ull, 1244523751586005ull}}, {{17101683930659094756ull, 1991238002537608ull}}, {{2613300700301544836ull, 1592990402030087ull}}, {{13158687004466966836ull, 1274392321624069ull}}, {{9985852762921415972ull, 2039027714598511ull}}, {{4299333395595222452ull, 1631222171678809ull}}, {{7128815531218088284ull, 1304977737343047ull}}, {{15095453664690851580ull, 2087964379748875ull}}, {{12076362931752681264ull, 1670371503799100ull}}, {{9661090345402145012ull, 1336297203039280ull}}, {{15457744552643432020ull, 2138075524862848ull}}, {{1298149197889014644ull, 1710460419890279ull}}, {{4727868173053122040ull, 1368368335912223ull}}, {{3875240262143084940ull, 2189389337459557ull}}, {{14168238653940198920ull, 1751511469967645ull}}, {{11334590923152159136ull, 1401209175974116ull}}, {{10756647847559633972ull, 2241934681558586ull}}, {{4915969463305796856ull, 1793547745246869ull}}, {{7622124385386547808ull, 1434838196197495ull}}, {{6097699508309238244ull, 1147870556957996ull}}, {{2377621583810960548ull, 1836592891132794ull}}, {{5591446081790678760ull, 1469274312906235ull}}, {{4473156865432543008ull, 1175419450324988ull}}, {{3467702169950158492ull, 1880671120519981ull}}, {{17531556994927768084ull, 1504536896415984ull}}, {{17714594410684124792ull, 1203629517132787ull}}, {{13585955798126958372ull, 1925807227412460ull}}, {{10868764638501566700ull, 1540645781929968ull}}, {{16073709340285074004ull, 1232516625543974ull}}, {{14649888500230387440ull, 1972026600870359ull}}, {{15409259614926220276ull, 1577621280696287ull}}, {{4948710062457155572ull, 1262097024557030ull}}, {{7917936099931448916ull, 2019355239291248ull}}, {{13713046509428979780ull, 1615484191432998ull}}, {{18349134837027004468ull, 1292387353146398ull}}, {{7222522850791745212ull, 2067819765034238ull}}, {{13156715910117216816ull, 1654255812027390ull}}, {{10525372728093773452ull, 1323404649621912ull}}, {{2083201105982396232ull, 2117447439395060ull}}, {{1666560884785916988ull, 1693957951516048ull}}, {{8711946337312554236ull, 1355166361212838ull}}, {{10249765324958176456ull, 2168266177940541ull}}, {{4510463445224630840ull, 1734612942352433ull}}, {{10987068385663525316ull, 1387690353881946ull}}, {{10200611787577819864ull, 2220304566211114ull}}, {{11849838244804166212ull, 1776243652968891ull}}, {{5790521781101422648ull, 1420994922375113ull}}, {{12011115054364958764ull, 1136795937900090ull}}, {{771040013274382408ull, 1818873500640145ull}}, {{616832010619505924ull, 1455098800512116ull}}, {{15250860867463246032ull, 1164079040409692ull}}, {{9643982128973552360ull, 1862526464655508ull}}, {{15093883332662662536ull, 1490021171724406ull}}, {{8385757851388219704ull, 1192016937379525ull}}, {{13417212562221151528ull, 1907227099807240ull}}, {{10733770049776921220ull, 1525781679845792ull}}, {{1208318410337716332ull, 1220625343876634ull}}, {{9312007086024166776ull, 1953000550202614ull}}, {{11138954483561243744ull, 1562400440162091ull}}, {{5221814772107084672ull, 1249920352129673ull}}, {{4665554820629425152ull, 1999872563407477ull}}, {{14800490300729271092ull, 1599898050725981ull}}, {{8151043425841506548ull, 1279918440580785ull}}, {{13041669481346410480ull, 2047869504929256ull}}, {{6743986770335218060ull, 1638295603943405ull}}, {{5395189416268174448ull, 1310636483154724ull}}, {{16011000695512899764ull, 2097018373047558ull}}, {{1740754112184588840ull, 1677614698438047ull}}, {{12460649733973402044ull, 1342091758750437ull}}, {{5179644315389801976ull, 2147346814000700ull}}, {{4143715452311841580ull, 1717877451200560ull}}, {{3314972361849473264ull, 1374301960960448ull}}, {{1614606964217246900ull, 2198883137536717ull}}, {{12359732015599528488ull, 1759106510029373ull}}, {{17266483241963443436ull, 1407285208023498ull}}, {{5490280298690047564ull, 2251656332837598ull}}, {{11770921868435858696ull, 1801325066270078ull}}, {{16795435124232507604ull, 1441060053016062ull}}, {{6057650469902185436ull, 1152848042412850ull}}, {{9692240751843496696ull, 1844556867860560ull}}, {{7753792601474797356ull, 1475645494288448ull}}, {{13581731710663658532ull, 1180516395430758ull}}, {{18041421922319943328ull, 1888826232689213ull}}, {{3365091093630223692ull, 1511060986151371ull}}, {{17449468133871820248ull, 1208848788921096ull}}, {{2093707311001540136ull, 1934158062273755ull}}, {{1674965848801232108ull, 1547326449819004ull}}, {{5029321493782896008ull, 1237861159855203ull}}, {{4357565575310723292ull, 1980577855768325ull}}, {{3486052460248578632ull, 1584462284614660ull}}, {{2788841968198862904ull, 1267569827691728ull}}, {{772798334376270328ull, 2028111724306765ull}}, {{618238667501016260ull, 1622489379445412ull}}, {{11562637378226543980ull, 1297991503556329ull}}, {{7432173360936739396ull, 2076786405690127ull}}, {{17013785132975122488ull, 1661429124552101ull}}, {{9921679291638187664ull, 1329143299641681ull}}, {{8495989237137279620ull, 2126629279426690ull}}, {{6796791389709823696ull, 1701303423541352ull}}, {{16505479555993589924ull, 1361042738833081ull}}, {{583325586396371620ull, 2177668382132931ull}}, {{15224055728084738588ull, 1742134705706344ull}}, {{15868593397209701192ull, 1393707764565075ull}}, {{6943005361825970296ull, 2229932423304121ull}}, {{1865055474718865912ull, 1783945938643297ull}}, {{12560090824000823700ull, 1427156750914637ull}}, {{2669375029716838312ull, 1141725400731710ull}}, {{4271000047546941300ull, 1826760641170736ull}}, {{18174195297005194332ull, 1461408512936588ull}}, {{3471309793378424496ull, 1169126810349271ull}}, {{16622142113631210164ull, 1870602896558833ull}}, {{2229667246679237164ull, 1496482317247067ull}}, {{12851780241569120700ull, 1197185853797653ull}}, {{16873499571768682796ull, 1915497366076245ull}}, {{13498799657414946236ull, 1532397892860996ull}}, {{7109690911190046664ull, 1225918314288797ull}}, {{15064854272645984988ull, 1961469302862075ull}}, {{12051883418116787992ull, 1569175442289660ull}}, {{9641506734493430392ull, 1255340353831728ull}}, {{11737061960447578308ull, 2008544566130765ull}}, {{9389649568358062644ull, 1606835652904612ull}}, {{133022025202629468ull, 1285468522323690ull}}, {{212835240324207152ull, 2056749635717904ull}}, {{3859617007001276044ull, 1645399708574323ull}}, {{10466391235084841480ull, 1316319766859458ull}}, {{13056877161393836048ull, 2106111626975133ull}}, {{17824199358598889484ull, 1684889301580106ull}}, {{10570010672137201264ull, 1347911441264085ull}}, {{16912017075419522024ull, 2156658306022536ull}}, {{9840264845593707296ull, 1725326644818029ull}}, {{11561560691216876160ull, 1380261315854423ull}}, {{14809148291205091532ull, 2208418105367077ull}}, {{4468621003480252580ull, 1766734484293662ull}}, {{14642943247009933032ull, 1413387587434929ull}}, {{15403703412349856748ull, 1130710069947943ull}}, {{2509832571308308860ull, 1809136111916710ull}}, {{2007866057046647088ull, 1447308889533368ull}}, {{8984990475121138316ull, 1157847111626694ull}}, {{3307938315968090336ull, 1852555378602711ull}}, {{17403745911742113564ull, 1482044302882168ull}}, {{2854950285167959880ull, 1185635442305735ull}}, {{4567920456268735808ull, 1897016707689176ull}}, {{18411731623982629940ull, 1517613366151340ull}}, {{14729385299186103952ull, 1214090692921072ull}}, {{8809621219730125032ull, 1942545108673716ull}}, {{3358348161042189700ull, 1554036086938973ull}}, {{10065376158317572408ull, 1243228869551178ull}}, {{12415253038566205528ull, 1989166191281885ull}}, {{9932202430852964424ull, 1591332953025508ull}}, {{15324459574166192184ull, 1273066362420406ull}}, {{17140437689182086848ull, 2036906179872650ull}}, {{13712350151345669480ull, 1629524943898120ull}}, {{10969880121076535584ull, 1303619955118496ull}}, {{10173110564238636288ull, 2085791928189594ull}}, {{11827837266132819352ull, 1668633542551675ull}}, {{9462269812906255480ull, 1334906834041340ull}}, {{15139631700650008772ull, 2135850934466144ull}}, {{15801054175261917340ull, 1708680747572915ull}}, {{12640843340209533872ull, 1366944598058332ull}}, {{5467954085367612904ull, 2187111356893332ull}}, {{15442409712519821292ull, 1749689085514665ull}}, {{12353927770015857032ull, 1399751268411732ull}}, {{5008889173057729960ull, 2239602029458772ull}}, {{15075157782671914940ull, 1791681623567017ull}}, {{4681428596653711304ull, 1433345298853614ull}}, {{7434491692064879364ull, 1146676239082891ull}}, {{4516489077819986340ull, 1834681982532626ull}}, {{18370586521223630364ull, 1467745586026100ull}}, {{14696469216978904292ull, 1174196468820880ull}}, {{5067606673456695252ull, 1878714350113409ull}}, {{7743434153507266524ull, 1502971480090727ull}}, {{17262793767031544188ull, 1202377184072581ull}}, {{1795028324057098440ull, 1923803494516131ull}}, {{16193417918213320044ull, 1539042795612904ull}}, {{16644083149312566360ull, 1231234236490323ull}}, {{4494440150448644236ull, 1969974778384518ull}}, {{10974249749842736036ull, 1575979822707614ull}}, {{12468748614616099152ull, 1260783858166091ull}}, {{12571300153901937996ull, 2017254173065746ull}}, {{6367691308379640072ull, 1613803338452597ull}}, {{16162199490929443028ull, 1291042670762077ull}}, {{11102123926519467552ull, 2065668273219324ull}}, {{12571047955957484364ull, 1652534618575459ull}}, {{13746187179507897816ull, 1322027694860367ull}}, {{7236504228244995212ull, 2115244311776588ull}}, {{13167901012079816816ull, 1692195449421270ull}}, {{10534320809663853452ull, 1353756359537016ull}}, {{9476215665978344876ull, 2166010175259226ull}}, {{3891623718040765580ull, 1732808140207381ull}}, {{17870694233400253756ull, 1386246512165904ull}}, {{17525064329214675040ull, 2217994419465447ull}}, {{6641353833887919384ull, 1774395535572358ull}}, {{12691780696594156152ull, 1419516428457886ull}}, {{6464075742533414600ull, 1135613142766309ull}}, {{17721218817537284008ull, 1816981028426094ull}}, {{17866323868771737528ull, 1453584822740875ull}}, {{14293059095017390024ull, 1162867858192700ull}}, {{4422150478318272420ull, 1860588573108321ull}}, {{18295115641622259228ull, 1488470858486656ull}}, {{10946743698555897060ull, 1190776686789325ull}}, {{17514789917689435296ull, 1905242698862920ull}}, {{14011831934151548236ull, 1524194159090336ull}}, {{7520116732579328264ull, 1219355327272269ull}}, {{964140327901194256ull, 1950968523635631ull}}, {{15528707521288596696ull, 1560774818908504ull}}, {{16112314831772787680ull, 1248619855126803ull}}, {{3643610842384998352ull, 1997791768202886ull}}, {{17672283932875639972ull, 1598233414562308ull}}, {{3069780702074781008ull, 1278586731649847ull}}, {{8600997938061559940ull, 2045738770639755ull}}, {{6880798350449247952ull, 1636591016511804ull}}, {{9193987495101308684ull, 1309272813209443ull}}, {{11021031177420183572ull, 2094836501135109ull}}, {{12506173756678057180ull, 1675869200908087ull}}, {{2626241375858625096ull, 1340695360726470ull}}, {{4201986201373800156ull, 2145112577162352ull}}, {{14429635405324771096ull, 1716090061729881ull}}, {{7854359509517906552ull, 1372872049383905ull}}, {{12566975215228650484ull, 2196595279014248ull}}, {{17432277801666741032ull, 1757276223211398ull}}, {{2877775797107661856ull, 1405820978569119ull}}, {{11983138904856079620ull, 2249313565710590ull}}, {{9586511123884863696ull, 1799450852568472ull}}, {{290511269624070308ull, 1439560682054778ull}}, {{7611106645183076892ull, 1151648545643822ull}}, {{15867119447034833352ull, 1842637673030115ull}}, {{12693695557627866684ull, 1474110138424092ull}}, {{2776258816618472700ull, 1179288110739274ull}}, {{11820711736073376964ull, 1886860977182838ull}}, {{16835267018342522220ull, 1509488781746270ull}}, {{13468213614674017776ull, 1207591025397016ull}}, {{14170444153994607796ull, 1932145640635226ull}}, {{7647006508453775912ull, 1545716512508181ull}}, {{2428256392021110404ull, 1236573210006545ull}}, {{3885210227233776652ull, 1978517136010472ull}}, {{14176214626012752288ull, 1582813708808377ull}}, {{3962274071326381184ull, 1266250967046702ull}}, {{10028987328864120220ull, 2026001547274723ull}}, {{15401887492575116824ull, 1620801237819778ull}}, {{1253463549834362488ull, 1296640990255823ull}}, {{16762936938702621276ull, 2074625584409316ull}}, {{9721000736220186696ull, 1659700467527453ull}}, {{15155498218459970004ull, 1327760374021962ull}}, {{9491401890568310712ull, 2124416598435140ull}}, {{7593121512454648568ull, 1699533278748112ull}}, {{17142543654189449824ull, 1359626622998489ull}}, {{16360023402477388752ull, 2175402596797583ull}}, {{2019972277756180032ull, 1740322077438067ull}}, {{12684024266430674996ull, 1392257661950453ull}}, {{16605090011547169668ull, 2227612259120725ull}}, {{13284072009237735736ull, 1782089807296580ull}}, {{10627257607390188588ull, 1425671845837264ull}}, {{12191154900654061192ull, 1140537476669811ull}}, {{12127150211562677264ull, 1824859962671698ull}}, {{17080417798733962456ull, 1459887970137358ull}}, {{2596287794761438996ull, 1167910376109887ull}}, {{7843409286360212716ull, 1868656601775819ull}}, {{9964076243830080496ull, 1494925281420655ull}}, {{7971260995064064396ull, 1195940225136524ull}}, {{1685971147876772064ull, 1913504360218439ull}}, {{5038125733043327976ull, 1530803488174751ull}}, {{341151771692752056ull, 1224642790539801ull}}, {{11613889278934134260ull, 1959428464863681ull}}, {{5601762608405397084ull, 1567542771890945ull}}, {{4481410086724317668ull, 1254034217512756ull}}, {{18238302582984639240ull, 2006454748020409ull}}, {{18279990881129621716ull, 1605163798416327ull}}, {{7245295075419876724ull, 1284131038733062ull}}, {{15281820935413713084ull, 2054609661972899ull}}, {{15914805563072880792ull, 1643687729578319ull}}, {{16421193265200214956ull, 1314950183662655ull}}, {{7827165150610792312ull, 2103920293860249ull}}, {{9951080935230544172ull, 1683136235088199ull}}, {{11650213562926345660ull, 1346508988070559ull}}, {{7572295256456422092ull, 2154414380912895ull}}, {{6057836205165137672ull, 1723531504730316ull}}, {{1156920149390199812ull, 1378825203784253ull}}, {{16608467497991960996ull, 2206120326054804ull}}, {{16976122813135479120ull, 1764896260843843ull}}, {{2512851806282652324ull, 1411917008675075ull}}, {{2010281445026121860ull, 1129533606940060ull}}, {{3216450312041794976ull, 1807253771104096ull}}, {{17330555508601077276ull, 1445803016883276ull}}, {{10175095592138951496ull, 1156642413506621ull}}, {{8901455317938501748ull, 1850627861610594ull}}, {{10810513069092711720ull, 1480502289288475ull}}, {{8648410455274169376ull, 1184401831430780ull}}, {{13837456728438671004ull, 1895042930289248ull}}, {{1918938525205832ull, 1516034344231399ull}}, {{3690883965562074988ull, 1212827475385119ull}}, {{13284111974383140632ull, 1940523960616190ull}}, {{10627289579506512504ull, 1552419168492952ull}}, {{1123134034121389356ull, 1241935334794362ull}}, {{5486363269336133296ull, 1987096535670979ull}}, {{8078439430210816960ull, 1589677228536783ull}}, {{13841449173652474212ull, 1271741782829426ull}}, {{14767621048360138096ull, 2034786852527082ull}}, {{4435399209204289828ull, 1627829482021666ull}}, {{18305714626331073156ull, 1302263585617332ull}}, {{14531748143162075756ull, 2083621736987732ull}}, {{4246700885045839960ull, 1666897389590186ull}}, {{18154755967004313260ull, 1333517911672148ull}}, {{6911516658755439276ull, 2133628658675438ull}}, {{12907910956488172068ull, 1706902926940350ull}}, {{10326328765190537656ull, 1365522341552280ull}}, {{16522126024304860248ull, 2184835746483648ull}}, {{2149654375218157228ull, 1747868597186919ull}}, {{5409072314916436104ull, 1398294877749535ull}}, {{8654515703866297772ull, 2237271804399256ull}}, {{3234263748351127892ull, 1789817443519405ull}}, {{2587410998680902312ull, 1431853954815524ull}}, {{5759277613686632172ull, 1145483163852419ull}}, {{16593541811382432124ull, 1832773062163870ull}}, {{13274833449105945700ull, 1466218449731096ull}}, {{6930517944542846236ull, 1172974759784877ull}}, {{14778177526010464304ull, 1876759615655803ull}}, {{754495576582640472ull, 1501407692524643ull}}, {{7982294090749933024ull, 1201126154019714ull}}, {{1703624100974161868ull, 1921801846431543ull}}, {{8741596910263150140ull, 1537441477145234ull}}, {{10682626342952430436ull, 1229953181716187ull}}, {{2334806889756247408ull, 1967925090745900ull}}, {{1867845511804997924ull, 1574340072596720ull}}, {{1494276409443998340ull, 1259472058077376ull}}, {{13458888699336128312ull, 2015155292923801ull}}, {{7077762144726992328ull, 1612124234339041ull}}, {{1972860901039683540ull, 1289699387471233ull}}, {{17913972700631134956ull, 2063519019953972ull}}, {{6952480531021087316ull, 1650815215963178ull}}, {{12940682054300690500ull, 1320652172770542ull}}, {{5947696027913463508ull, 2113043476432868ull}}, {{12136854451814591452ull, 1690434781146294ull}}, {{13398832376193583484ull, 1352347824917035ull}}, {{2991387728200181960ull, 2163756519867257ull}}, {{13461156626785876536ull, 1731005215893805ull}}, {{10768925301428701228ull, 1384804172715044ull}}, {{6162234038060191000ull, 2215686676344071ull}}, {{1240438415706242476ull, 1772549341075257ull}}, {{12060397176790724948ull, 1418039472860205ull}}, {{9648317741432579960ull, 1134431578288164ull}}, {{4369261942066396968ull, 1815090525261063ull}}, {{10874107183136938220ull, 1452072420208850ull}}, {{8699285746509550576ull, 1161657936167080ull}}, {{13918857194415280920ull, 1858652697867328ull}}, {{67039311306493768ull, 1486922158293863ull}}, {{7432329078529015660ull, 1189537726635090ull}}, {{11891726525646425056ull, 1903260362616144ull}}, {{13202730035259050368ull, 1522608290092915ull}}, {{10562184028207240296ull, 1218086632074332ull}}, {{2142099186163943180ull, 1948938611318932ull}}, {{12781725793156885512ull, 1559150889055145ull}}, {{10225380634525508408ull, 1247320711244116ull}}, {{8981911385756992812ull, 1995713137990586ull}}, {{3496180293863683924ull, 1596570510392469ull}}, {{6486293049832857464ull, 1277256408313975ull}}, {{10378068879732571940ull, 2043610253302360ull}}, {{8302455103786057552ull, 1634888202641888ull}}, {{14020661712512666688ull, 1307910562113510ull}}, {{3986314666310715084ull, 2092656899381617ull}}, {{14257098177274303036ull, 1674125519505293ull}}, {{337632097593711460ull, 1339300415604235ull}}, {{540211356149938336ull, 2142880664966776ull}}, {{15189564343887591964ull, 1714304531973420ull}}, {{12151651475110073568ull, 1371443625578736ull}}, {{12063944730692297068ull, 2194309800925978ull}}, {{17029853414037658300ull, 1755447840740782ull}}, {{6245185101746305992ull, 1404358272592626ull}}, {{2613598533310268944ull, 2246973236148202ull}}, {{13158925270873946124ull, 1797578588918561ull}}, {{6837791401957246576ull, 1438062871134849ull}}, {{9159581936307707584ull, 1150450296907879ull}}, {{3587284653866601164ull, 1840720475052607ull}}, {{13937874167319011900ull, 1472576380042085ull}}, {{11150299333855209520ull, 1178061104033668ull}}, {{14151130119426424912ull, 1884897766453869ull}}, {{15010252910283050252ull, 1507918213163095ull}}, {{12008202328226440200ull, 1206334570530476ull}}, {{11834426095678483676ull, 1930135312848762ull}}, {{2088843247058966292ull, 1544108250279010ull}}, {{1671074597647173036ull, 1235286600223208ull}}, {{17431114615203118148ull, 1976458560357132ull}}, {{6566194062678673872ull, 1581166848285706ull}}, {{1563606435401028776ull, 1264933478628565ull}}, {{2501770296641646040ull, 2023893565805704ull}}, {{5690765052055227156ull, 1619114852644563ull}}, {{11931309671128002368ull, 1295291882115650ull}}, {{643351400095252176ull, 2072467011385041ull}}, {{15272076379043843036ull, 1657973609108032ull}}, {{4838963473751253780ull, 1326378887286426ull}}, {{363643928518185404ull, 2122206219658282ull}}, {{11358961587040279292ull, 1697764975726625ull}}, {{9087169269632223432ull, 1358211980581300ull}}, {{14539470831411557496ull, 2173139168930080ull}}, {{11631576665129245996ull, 1738511335144064ull}}, {{12994610146845307120ull, 1390809068115251ull}}, {{13412678605468670744ull, 2225294508984402ull}}, {{3351445254891115948ull, 1780235607187522ull}}, {{13749202648138623728ull, 1424188485750017ull}}, {{3620664489027078336ull, 1139350788600014ull}}, {{13171760811927145984ull, 1822961261760022ull}}, {{3158711020057896140ull, 1458369009408018ull}}, {{9905666445530137560ull, 1166695207526414ull}}, {{4781019868622489128ull, 1866712332042263ull}}, {{11203513524381811948ull, 1493369865633810ull}}, {{8962810819505449556ull, 1194695892507048ull}}, {{10651148496466808968ull, 1911513428011277ull}}, {{1142221167689626528ull, 1529210742409022ull}}, {{11981823378377432192ull, 1223368593927217ull}}, {{4413522146436250216ull, 1957389750283548ull}}, {{10909515346632820820ull, 1565911800226838ull}}, {{16106309906790077300ull, 1252729440181470ull}}, {{7323351777154572068ull, 2004367104290353ull}}, {{13237379051207478300ull, 1603493683432282ull}}, {{3211205611482161992ull, 1282794946745826ull}}, {{16205975422597190160ull, 2052471914793321ull}}, {{9275431523335841804ull, 1641977531834657ull}}, {{41647589184852796ull, 1313582025467726ull}}, {{11134682586921495444ull, 2101731240748361ull}}, {{5218397254795286032ull, 1681384992598689ull}}, {{7864066618578139148ull, 1345107994078951ull}}, {{5203808960241201992ull, 2152172790526322ull}}, {{15231093612418692564ull, 1721738232421057ull}}, {{4806177260451133404ull, 1377390585936846ull}}, {{311185987237992800ull, 2203824937498954ull}}, {{3938297604532304564ull, 1763059949999163ull}}, {{10529335713109664296ull, 1410447959999330ull}}, {{8423468570487731436ull, 1128358367999464ull}}, {{2409503268554639332ull, 1805373388799143ull}}, {{9306300244327532112ull, 1444298711039314ull}}, {{11134389010203936012ull, 1155438968831451ull}}, {{10436324786842476972ull, 1848702350130322ull}}, {{970362199990160932ull, 1478961880104258ull}}, {{8154987389475949392ull, 1183169504083406ull}}, {{5669282193677698380ull, 1893071206533450ull}}, {{4535425754942158704ull, 1514456965226760ull}}, {{3628340603953726964ull, 1211565572181408ull}}, {{2115996151584052820ull, 1938504915490253ull}}, {{9071494550751062900ull, 1550803932392202ull}}, {{18325242084826581288ull, 1240643145913761ull}}, {{3494945632529157804ull, 1985029033462019ull}}, {{6485305320765236564ull, 1588023226769615ull}}, {{5188244256612189252ull, 1270418581415692ull}}, {{11990539625321413128ull, 2032669730265107ull}}, {{2213734070773309856ull, 1626135784212086ull}}, {{16528382515586289176ull, 1300908627369668ull}}, {{4309319136486600744ull, 2081453803791470ull}}, {{3447455309189280596ull, 1665163043033176ull}}, {{17515359506319065768ull, 1332130434426540ull}}, {{9577831136400953616ull, 2131408695082465ull}}, {{7662264909120762892ull, 1705126956065972ull}}, {{17197858371522341284ull, 1364101564852777ull}}, {{12759178135468104760ull, 2182562503764444ull}}, {{13896691323116394132ull, 1746050003011555ull}}, {{11117353058493115304ull, 1396840002409244ull}}, {{6719718449363253520ull, 2234944003854791ull}}, {{1686425944748692492ull, 1787955203083833ull}}, {{8727838385282774640ull, 1430364162467066ull}}, {{3292921893484309388ull, 1144291329973653ull}}, {{1579326214832984696ull, 1830866127957845ull}}, {{1263460971866387756ull, 1464692902366276ull}}, {{15768164036460751500ull, 1171754321893020ull}}, {{6782318384627650784ull, 1874806915028833ull}}, {{12804552337185941272ull, 1499845532023066ull}}, {{6554293055006842696ull, 1199876425618453ull}}, {{6797520073269037988ull, 1919802280989525ull}}, {{5438016058615230392ull, 1535841824791620ull}}, {{4350412846892184312ull, 1228673459833296ull}}, {{18028706999253225872ull, 1965877535733273ull}}, {{3354919155176849728ull, 1572702028586619ull}}, {{6373284138883390104ull, 1258161622869295ull}}, {{10197254622213424168ull, 2013058596590872ull}}, {{779106068286918688ull, 1610446877272698ull}}, {{8001982484113355596ull, 1288357501818158ull}}, {{9113823159839458632ull, 2061372002909053ull}}, {{14669756157355387552ull, 1649097602327242ull}}, {{4357107296400489392ull, 1319278081861794ull}}, {{14350069303724603676ull, 2110844930978870ull}}, {{11480055442979682940ull, 1688675944783096ull}}, {{5494695539641836028ull, 1350940755826477ull}}, {{12480861678168847972ull, 2161505209322363ull}}, {{17363386972018899024ull, 1729204167457890ull}}, {{13890709577615119220ull, 1383363333966312ull}}, {{7467740065216549460ull, 2213381334346100ull}}, {{5974192052173239568ull, 1770705067476880ull}}, {{4779353641738591652ull, 1416564053981504ull}}, {{7512831728132783644ull, 1133251243185203ull}}, {{8331181950270543508ull, 1813201989096325ull}}, {{6664945560216434808ull, 1450561591277060ull}}, {{5331956448173147844ull, 1160449273021648ull}}, {{4841781502335126232ull, 1856718836834637ull}}, {{14941471646093831952ull, 1485375069467709ull}}, {{15642526131616975884ull, 1188300055574167ull}}, {{10270646551619520124ull, 1901280088918668ull}}, {{15595214870779436748ull, 1521024071134934ull}}, {{16165520711365459720ull, 1216819256907947ull}}, {{11107437879217094260ull, 1946910811052716ull}}, {{5196601488631765084ull, 1557528648842173ull}}, {{11535978820389232712ull, 1246022919073738ull}}, {{14768217297880862020ull, 1993636670517981ull}}, {{8125225023562779292ull, 1594909336414385ull}}, {{6500180018850223432ull, 1275927469131508ull}}, {{6710939215418447172ull, 2041483950610413ull}}, {{12747449001818578384ull, 1633187160488330ull}}, {{10197959201454862708ull, 1306549728390664ull}}, {{5248688278102049360ull, 2090479565425063ull}}, {{11577648251965460136ull, 1672383652340050ull}}, {{9262118601572368108ull, 1337906921872040ull}}, {{14819389762515788972ull, 2140651074995264ull}}, {{15544860624754541500ull, 1712520859996211ull}}, {{8746539685061722876ull, 1370016687996969ull}}, {{2926417051873025636ull, 2192026700795151ull}}, {{17098528900466061800ull, 1753621360636120ull}}, {{13678823120372849440ull, 1402897088508896ull}}, {{14507419363112738460ull, 2244635341614234ull}}, {{15295284305232101092ull, 1795708273291387ull}}, {{4857529814701860224ull, 1436566618633110ull}}, {{3886023851761488180ull, 1149253294906488ull}}, {{2528289348076470768ull, 1838805271850381ull}}, {{16780026737428817904ull, 1471044217480304ull}}, {{17113370204684964648ull, 1176835373984243ull}}, {{5245299439044481496ull, 1882936598374790ull}}, {{4196239551235585196ull, 1506349278699832ull}}, {{14425038085214199128ull, 1205079422959865ull}}, {{4633316862633166988ull, 1928127076735785ull}}, {{3706653490106533592ull, 1542501661388628ull}}, {{10344020421569047520ull, 1234001329110902ull}}, {{1793037415542834740ull, 1974402126577444ull}}, {{5123778747176178112ull, 1579521701261955ull}}, {{4099022997740942492ull, 1263617361009564ull}}, {{13937134425869328632ull, 2021787777615302ull}}, {{3771009911211642260ull, 1617430222092242ull}}, {{14084854373195044776ull, 1293944177673793ull}}, {{399674108660609704ull, 2070310684278070ull}}, {{319739286928487764ull, 1656248547422456ull}}, {{15013186688510431504ull, 1324998837937964ull}}, {{12953052257390959436ull, 2119998140700743ull}}, {{17741139435396588196ull, 1695998512560594ull}}, {{17882260363059180880ull, 1356798810048475ull}}, {{10164872507185137792ull, 2170878096077561ull}}, {{4442549191006199908ull, 1736702476862049ull}}, {{7243388167546870252ull, 1389361981489639ull}}, {{521374623849261432ull, 2222979170383423ull}}, {{7795797328563229792ull, 1778383336306738ull}}, {{13615335492334404480ull, 1422706669045390ull}}, {{10892268393867523584ull, 1138165335236312ull}}, {{2670234171220396440ull, 1821064536378100ull}}, {{2136187336976317152ull, 1456851629102480ull}}, {{1708949869581053720ull, 1165481303281984ull}}, {{10113017420813506600ull, 1864770085251174ull}}, {{11779762751392715604ull, 1491816068200939ull}}, {{13113159015856082808ull, 1193452854560751ull}}, {{13602356795885911844ull, 1909524567297202ull}}, {{3503187807224908828ull, 1527619653837762ull}}, {{13870596690005658032ull, 1222095723070209ull}}, {{11124908259783321884ull, 1955353156912335ull}}, {{8899926607826657508ull, 1564282525529868ull}}, {{14498638915745146652ull, 1251426020423894ull}}, {{12129775820966503672ull, 2002281632678231ull}}, {{6014471842031292616ull, 1601825306142585ull}}, {{4811577473625034092ull, 1281460244914068ull}}, {{4009175143058144224ull, 2050336391862509ull}}, {{6896688929188425704ull, 1640269113490007ull}}, {{16585397587576471532ull, 1312215290792005ull}}, {{8089892066412802836ull, 2099544465267209ull}}, {{10161262467872152592ull, 1679635572213767ull}}, {{750312344813901428ull, 1343708457771014ull}}, {{8579197381186062928ull, 2149933532433622ull}}, {{17931404349174581312ull, 1719946825946897ull}}, {{6966425849855844404ull, 1375957460757518ull}}, {{7456932545027440724ull, 2201531937212029ull}}, {{9654894850763862900ull, 1761225549769623ull}}, {{15102613510094910968ull, 1408980439815698ull}}, {{1014044363850197804ull, 1127184351852559ull}}, {{9001168611644137132ull, 1803494962964094ull}}, {{10890283704057220028ull, 1442795970371275ull}}, {{8712226963245776024ull, 1154236776297020ull}}, {{13939563141193241640ull, 1846778842075232ull}}, {{3772952883470772664ull, 1477423073660186ull}}, {{17775757565744259424ull, 1181938458928148ull}}, {{6305119216739353140ull, 1891101534285038ull}}, {{12422793002875303156ull, 1512881227428030ull}}, {{9938234402300242524ull, 1210304981942424ull}}, {{4833128599454657072ull, 1936487971107879ull}}, {{7555851694305635980ull, 1549190376886303ull}}, {{13423378984928329432ull, 1239352301509042ull}}, {{6720011116917685796ull, 1982963682414468ull}}, {{12754706523017969284ull, 1586370945931574ull}}, {{13893114033156285752ull, 1269096756745259ull}}, {{11160936008824326232ull, 2030554810792415ull}}, {{8928748807059460984ull, 1624443848633932ull}}, {{18211045489873299756ull, 1299555078907145ull}}, {{10690928710087727996ull, 2079288126251433ull}}, {{15931440597554003044ull, 1663430501001146ull}}, {{9055803663301292112ull, 1330744400800917ull}}, {{18178634676023977704ull, 2129191041281467ull}}, {{7164210111335361516ull, 1703352833025174ull}}, {{9420716903810199536ull, 1362682266420139ull}}, {{4005100601870588288ull, 2180291626272223ull}}, {{10582778110980291276ull, 1744233301017778ull}}, {{15844920118268053668ull, 1395386640814222ull}}, {{10594476930261244576ull, 2232618625302756ull}}, {{4786232729467085336ull, 1786094900242205ull}}, {{3828986183573668268ull, 1428875920193764ull}}, {{6752537761600844936ull, 1143100736155011ull}}, {{3425362789077531256ull, 1828961177848018ull}}, {{10118987860745845652ull, 1463168942278414ull}}, {{11784539103338586844ull, 1170535153822731ull}}, {{11476564935857918304ull, 1872856246116370ull}}, {{9181251948686334644ull, 1498284996893096ull}}, {{3655652744207157392ull, 1198627997514477ull}}, {{9538393205473362148ull, 1917804796023163ull}}, {{15009412193862510364ull, 1534243836818530ull}}, {{12007529755090008292ull, 1227395069454824ull}}, {{8144001163918282300ull, 1963832111127719ull}}, {{10204549745876536160ull, 1571065688902175ull}}, {{8163639796701228928ull, 1256852551121740ull}}, {{13061823674721966288ull, 2010964081794784ull}}, {{14138807754519483352ull, 1608771265435827ull}}, {{3932348574131766036ull, 1287017012348662ull}}, {{9981106533352735980ull, 2059227219757859ull}}, {{11674234041424099108ull, 1647381775806287ull}}, {{1960689603655458640ull, 1317905420645030ull}}, {{3137103365848733824ull, 2108648673032048ull}}, {{9888380322162807704ull, 1686918938425638ull}}, {{15289401887214066812ull, 1349535150740510ull}}, {{6016298945832955280ull, 2159256241184817ull}}, {{15881085600892095196ull, 1727404992947853ull}}, {{1636822036487945184ull, 1381923994358283ull}}, {{17376310517348353592ull, 2211078390973252ull}}, {{6522350784394862224ull, 1768862712778602ull}}, {{16285927071741620748ull, 1415090170222881ull}}, {{9339392842651386276ull, 1132072136178305ull}}, {{14943028548242218044ull, 1811315417885288ull}}, {{886376394368043464ull, 1449052334308231ull}}, {{15466496374462076064ull, 1159241867446584ull}}, {{13678347754913590736ull, 1854786987914535ull}}, {{10942678203930872588ull, 1483829590331628ull}}, {{16132840192628518716ull, 1187063672265302ull}}, {{11055149049237988652ull, 1899301875624484ull}}, {{12533468054132301244ull, 1519441500499587ull}}, {{2648076813822020348ull, 1215553200399670ull}}, {{4236922902115232560ull, 1944885120639472ull}}, {{14457584765917917016ull, 1555908096511577ull}}, {{4187370183250512968ull, 1244726477209262ull}}, {{10389141107942731072ull, 1991562363534819ull}}, {{12000661701096095180ull, 1593249890827855ull}}, {{9600529360876876144ull, 1274599912662284ull}}, {{4292800533177270860ull, 2039359860259655ull}}, {{3434240426541816688ull, 1631487888207724ull}}, {{6436741155975363676ull, 1305190310566179ull}}, {{17677483479044402528ull, 2088304496905886ull}}, {{10452637968493611696ull, 1670643597524709ull}}, {{12051459189536799680ull, 1336514878019767ull}}, {{4524939444291238196ull, 2138423804831628ull}}, {{10998649184916811204ull, 1710739043865302ull}}, {{1420221718449628316ull, 1368591235092242ull}}, {{5961703564261315632ull, 2189745976147587ull}}, {{15837409295634783472ull, 1751796780918069ull}}, {{16359276251249737100ull, 1401437424734455ull}}, {{7728097928290027748ull, 2242299879575129ull}}, {{9871827157373932520ull, 1793839903660103ull}}, {{15276159355382966664ull, 1435071922928082ull}}, {{4842229854822552684ull, 1148057538342466ull}}, {{368870138232263648ull, 1836892061347946ull}}, {{15052491369553452212ull, 1469513649078356ull}}, {{8352644280900851444ull, 1175610919262685ull}}, {{13364230849441362312ull, 1880977470820296ull}}, {{7002035864811179528ull, 1504781976656237ull}}, {{16669675136074674592ull, 1203825581324989ull}}, {{15603433773493748376ull, 1926120930119983ull}}, {{1414700574569267732ull, 1540896744095987ull}}, {{12199806903881145156ull, 1232717395276789ull}}, {{8451644601984101280ull, 1972347832442863ull}}, {{14140013311071101668ull, 1577878265954290ull}}, {{11312010648856881336ull, 1262302612763432ull}}, {{3341821779203368844ull, 2019684180421492ull}}, {{13741503867588426044ull, 1615747344337193ull}}, {{18371900723554561480ull, 1292597875469754ull}}, {{18326994713461567404ull, 2068156600751607ull}}, {{7282898141285433276ull, 1654525280601286ull}}, {{2136969698286436296ull, 1323620224481029ull}}, {{10797849146742118724ull, 2117792359169646ull}}, {{4948930502651784656ull, 1694233887335717ull}}, {{15027190846347158692ull, 1355387109868573ull}}, {{1907412465703991968ull, 2168619375789718ull}}, {{8904627602047014220ull, 1734895500631774ull}}, {{10813050896379521700ull, 1387916400505419ull}}, {{6232834989981503752ull, 2220666240808671ull}}, {{1296919177243292680ull, 1776532992646937ull}}, {{12105581786020365112ull, 1421226394117549ull}}, {{13373814243558202412ull, 1136981115294039ull}}, {{10330056345467392892ull, 1819169784470463ull}}, {{15642742705857734960ull, 1455335827576370ull}}, {{12514194164686187968ull, 1164268662061096ull}}, {{12644013034014080100ull, 1862829859297754ull}}, {{13804559241953174404ull, 1490263887438203ull}}, {{18422345023046360168ull, 1192211109950562ull}}, {{14718356777906534980ull, 1907537775920900ull}}, {{11774685422325227984ull, 1526030220736720ull}}, {{9419748337860182384ull, 1220824176589376ull}}, {{7692899711092471172ull, 1953318682543002ull}}, {{17222366213099707908ull, 1562654946034401ull}}, {{10088544155737856004ull, 1250123956827521ull}}, {{8762973019696748960ull, 2000198330924034ull}}, {{10699727230499309488ull, 1600158664739227ull}}, {{1181084154915626944ull, 1280126931791382ull}}, {{5579083462606913436ull, 2048203090866211ull}}, {{773917955343620424ull, 1638562472692969ull}}, {{4308483179016806664ull, 1310849978154375ull}}, {{6893573086426890660ull, 2097359965047000ull}}, {{5514858469141512528ull, 1677887972037600ull}}, {{4411886775313210024ull, 1342310377630080ull}}, {{7059018840501136036ull, 2147696604208128ull}}, {{13025912701884729476ull, 1718157283366502ull}}, {{3042032532023962936ull, 1374525826693202ull}}, {{8556600865980251020ull, 2199241322709123ull}}, {{14223978322268021460ull, 1759393058167298ull}}, {{311136213588686200ull, 1407514446533839ull}}, {{3938257785612859280ull, 1126011557227071ull}}, {{17369258901206305820ull, 1801618491563313ull}}, {{2827360676739313688ull, 1441294793250651ull}}, {{17019283800359092244ull, 1153035834600520ull}}, {{8784110006864995972ull, 1844857335360833ull}}, {{14405985634975817424ull, 1475885868288666ull}}, {{7835439693238743616ull, 1180708694630933ull}}, {{8847354694440079464ull, 1889133911409493ull}}, {{14456581385035884216ull, 1511307129127594ull}}, {{15254613922770617696ull, 1209045703302075ull}}, {{5960638202723436700ull, 1934473125283321ull}}, {{1079161747436839036ull, 1547578500226657ull}}, {{11931375842175202196ull, 1238062800181325ull}}, {{643457273770771900ull, 1980900480290121ull}}, {{15272161077984258812ull, 1584720384232096ull}}, {{8528380047645496728ull, 1267776307385677ull}}, {{17334756890974705088ull, 2028442091817083ull}}, {{2799759068554033100ull, 1622753673453667ull}}, {{13307853699068957448ull, 1298202938762933ull}}, {{17603217103768421596ull, 2077124702020693ull}}, {{3014527238789006308ull, 1661699761616555ull}}, {{2411621791031205044ull, 1329359809293244ull}}, {{11237292495133748720ull, 2126975694869190ull}}, {{8989833996106998976ull, 1701580555895352ull}}, {{18259913641111330152ull, 1361264444716281ull}}, {{3390420122584755980ull, 2178023111546051ull}}, {{17469731357035446076ull, 1742418489236840ull}}, {{13975785085628356860ull, 1393934791389472ull}}, {{7603860878037729684ull, 2230295666223156ull}}, {{2393739887688273424ull, 1784236532978525ull}}, {{1914991910150618740ull, 1427389226382820ull}}, {{1531993528120494992ull, 1141911381106256ull}}, {{13519236089218522956ull, 1827058209770009ull}}, {{14504737686116728688ull, 1461646567816007ull}}, {{4225092519409562304ull, 1169317254252806ull}}, {{17828194475281030656ull, 1870907606804489ull}}, {{17951904394966734848ull, 1496726085443591ull}}, {{10672174701231477556ull, 1197380868354873ull}}, {{13386130707228453764ull, 1915809389367797ull}}, {{3330206936298942364ull, 1532647511494238ull}}, {{10042863178522974540ull, 1226118009195390ull}}, {{16068581085636759264ull, 1961788814712624ull}}, {{16544213683251317732ull, 1569431051770099ull}}, {{16924719761342964508ull, 1255544841416079ull}}, {{16011505173923012248ull, 2008871746265727ull}}, {{5430506509654589152ull, 1607097397012582ull}}, {{15412451651949402288ull, 1285677917610065ull}}, {{6213178569409492048ull, 2057084668176105ull}}, {{4970542855527593640ull, 1645667734540884ull}}, {{7665783099163985232ull, 1316534187632707ull}}, {{15954601773404286696ull, 2106454700212331ull}}, {{9074332603981519036ull, 1685163760169865ull}}, {{7259466083185215228ull, 1348131008135892ull}}, {{15304494547838254688ull, 2157009613017427ull}}, {{4864898008786783104ull, 1725607690413942ull}}, {{14959964851255157452ull, 1380486152331153ull}}, {{1799850873556789984ull, 2208777843729846ull}}, {{16197275957813073280ull, 1767022274983876ull}}, {{9268471951508548300ull, 1413617819987101ull}}, {{3725428746464928316ull, 1130894255989681ull}}, {{17028732438569616280ull, 1809430809583489ull}}, {{17312334765597603344ull, 1447544647666791ull}}, {{10160518997736172352ull, 1158035718133433ull}}, {{12567481581635965444ull, 1852857149013493ull}}, {{17432682894792593000ull, 1482285719210794ull}}, {{17635495130575984724ull, 1185828575368635ull}}, {{9770048135212023940ull, 1897325720589817ull}}, {{437340878685798508ull, 1517860576471854ull}}, {{4039221517690549128ull, 1214288461177483ull}}, {{2773405613562968284ull, 1942861537883973ull}}, {{9597422120334195272ull, 1554289230307178ull}}, {{15056635325751176864ull, 1243431384245742ull}}, {{9333221262234241692ull, 1989490214793188ull}}, {{14845274639271214000ull, 1591592171834550ull}}, {{11876219711416971200ull, 1273273737467640ull}}, {{555207464557602304ull, 2037237979948225ull}}, {{444165971646081840ull, 1629790383958580ull}}, {{355332777316865472ull, 1303832307166864ull}}, {{7947230073190805404ull, 2086131691466982ull}}, {{17425830502778375292ull, 1668905353173585ull}}, {{13940664402222700232ull, 1335124282538868ull}}, {{168970155104858436ull, 2136198852062190ull}}, {{135176124083886748ull, 1708959081649752ull}}, {{11176187343492840368ull, 1367167265319801ull}}, {{10503202120104723944ull, 2187467624511682ull}}, {{1023864066599958508ull, 1749974099609346ull}}, {{15576486512247608100ull, 1399979279687476ull}}, {{17543680790112352312ull, 2239966847499962ull}}, {{6656247002606061204ull, 1791973477999970ull}}, {{5324997602084848964ull, 1433578782399976ull}}, {{570649266925968848ull, 1146863025919981ull}}, {{11981085271307281124ull, 1834980841471969ull}}, {{13274217031787735224ull, 1467984673177575ull}}, {{10619373625430188176ull, 1174387738542060ull}}, {{16990997800688301084ull, 1879020381667296ull}}, {{9903449425808730544ull, 1503216305333837ull}}, {{544061911163163788ull, 1202573044267070ull}}, {{870499057861062064ull, 1924116870827312ull}}, {{11764445690514580620ull, 1539293496661849ull}}, {{13100905367153574820ull, 1231434797329479ull}}, {{9893402143219988740ull, 1970295675727167ull}}, {{536024085092170348ull, 1576236540581734ull}}, {{4118168082815646600ull, 1260989232465387ull}}, {{10278417747246944884ull, 2017582771944619ull}}, {{11912083012539466232ull, 1614066217555695ull}}, {{9529666410031572984ull, 1291252974044556ull}}, {{7868768626566696128ull, 2066004758471290ull}}, {{6295014901253356904ull, 1652803806777032ull}}, {{16104058365228416492ull, 1322243045421625ull}}, {{7319749310655914772ull, 2115588872674601ull}}, {{2166450633782821492ull, 1692471098139681ull}}, {{16490555765993898488ull, 1353976878511744ull}}, {{15316842781364506612ull, 2166363005618791ull}}, {{8564125410349694964ull, 1733090404495033ull}}, {{14229997957763576620ull, 1386472323596026ull}}, {{15389299102937901944ull, 2218355717753642ull}}, {{4932741652866500908ull, 1774684574202914ull}}, {{7635542137035111048ull, 1419747659362331ull}}, {{2419084894886178516ull, 1135798127489865ull}}, {{3870535831817885628ull, 1817277003983784ull}}, {{6785777480196218824ull, 1453821603187027ull}}, {{16496668428382706028ull, 1163057282549621ull}}, {{569227782218957384ull, 1860891652079395ull}}, {{455382225775165908ull, 1488713321663516ull}}, {{15121701039587774020ull, 1190970657330812ull}}, {{9437326404372797136ull, 1905553051729300ull}}, {{7549861123498237708ull, 1524442441383440ull}}, {{6039888898798590168ull, 1219553953106752ull}}, {{13353171052819654592ull, 1951286324970803ull}}, {{18061234471739544320ull, 1561029059976642ull}}, {{7070289947907814808ull, 1248823247981314ull}}, {{244417472426772728ull, 1998117196770103ull}}, {{7574231607425238828ull, 1598493757416082ull}}, {{17127431730165922032ull, 1278795005932865ull}}, {{8957146694555923636ull, 2046072009492585ull}}, {{7165717355644738908ull, 1636857607594068ull}}, {{13111271513999611772ull, 1309486086075254ull}}, {{9909987978173647868ull, 2095177737720407ull}}, {{549292753055097648ull, 1676142190176326ull}}, {{15196829461411719408ull, 1340913752141060ull}}, {{5868183064549199440ull, 2145462003425697ull}}, {{15762592895865090520ull, 1716369602740557ull}}, {{5231376687208251772ull, 1373095682192446ull}}, {{991505070049382188ull, 2196953091507914ull}}, {{4482552870781416072ull, 1757562473206331ull}}, {{18343437555592774152ull, 1406049978565064ull}}, {{18281453644722707672ull, 2249679965704103ull}}, {{3557116471552435168ull, 1799743972563283ull}}, {{10224390806725768780ull, 1439795178050626ull}}, {{4490163830638704700ull, 1151836142440501ull}}, {{18252308573247658492ull, 1842937827904801ull}}, {{10912498043856216468ull, 1474350262323841ull}}, {{5040649620343062852ull, 1179480209859073ull}}, {{4375690577806990240ull, 1887168335774517ull}}, {{14568598906471323164ull, 1509734668619613ull}}, {{586832680951327560ull, 1207787734895691ull}}, {{12006978733747855068ull, 1932460375833105ull}}, {{9605582986998284052ull, 1545968300666484ull}}, {{11373815204340537564ull, 1236774640533187ull}}, {{3440709067977218812ull, 1978839424853100ull}}, {{2752567254381775048ull, 1583071539882480ull}}, {{2202053803505420040ull, 1266457231905984ull}}, {{10901983715092492712ull, 2026331571049574ull}}, {{12410935786815904492ull, 1621065256839659ull}}, {{13618097444194633916ull, 1296852205471727ull}}, {{7031560651743772972ull, 2074963528754764ull}}, {{9314597336136928700ull, 1659970823003811ull}}, {{3762329054167632636ull, 1327976658403049ull}}, {{13398424116152032868ull, 2124762653444878ull}}, {{18097436922405446940ull, 1699810122755902ull}}, {{7099251908440536904ull, 1359848098204722ull}}, {{15048151868246769372ull, 2175756957127555ull}}, {{12038521494597415500ull, 1740605565702044ull}}, {{13320166010419842720ull, 1392484452561635ull}}, {{2865521542962196740ull, 2227975124098617ull}}, {{13360463678595488360ull, 1782380099278893ull}}, {{18067068572360211336ull, 1425904079423114ull}}, {{18143003672630079392ull, 1140723263538491ull}}, {{3203364173014754764ull, 1825157221661587ull}}, {{13630737782637534780ull, 1460125777329269ull}}, {{14593939040851938148ull, 1168100621863415ull}}, {{4903558391653549420ull, 1868960994981465ull}}, {{3922846713322839536ull, 1495168795985172ull}}, {{14206323814884002596ull, 1196135036788137ull}}, {{7972722844846762864ull, 1913816058861020ull}}, {{6378178275877410292ull, 1531052847088816ull}}, {{1413193805960017908ull, 1224842277671053ull}}, {{17018505348503669948ull, 1959747644273684ull}}, {{17304153093544846284ull, 1567798115418947ull}}, {{6464624845352056380ull, 1254238492335158ull}}, {{6654050937821379884ull, 2006781587736253ull}}, {{12701938379740924552ull, 1605425270189002ull}}, {{2782853074308918996ull, 1284340216151202ull}}, {{8141913733636180720ull, 2054944345841923ull}}, {{13892228616392765220ull, 1643955476673538ull}}, {{45736448888481208ull, 1315164381338831ull}}, {{11141224762447300900ull, 2104263010142129ull}}, {{12602328624699751044ull, 1683410408113703ull}}, {{17460560529243621480ull, 1346728326490962ull}}, {{13179501587822153080ull, 2154765322385540ull}}, {{10543601270257722464ull, 1723812257908432ull}}, {{1056183386722357324ull, 1379049806326746ull}}, {{12757939862981502688ull, 2206479690122793ull}}, {{17585049519869022796ull, 1765183752098234ull}}, {{17757388430637128560ull, 1412147001678587ull}}, {{6827213115025882200ull, 1129717601342870ull}}, {{10923540984041411524ull, 1807548162148592ull}}, {{1360135157749308572ull, 1446038529718874ull}}, {{4777456940941357180ull, 1156830823775099ull}}, {{15022628734989992136ull, 1850929318040158ull}}, {{950056543766262740ull, 1480743454432127ull}}, {{11828091679238741160ull, 1184594763545701ull}}, {{11546249057298165212ull, 1895351621673122ull}}, {{1858301616354711520ull, 1516281297338498ull}}, {{8865338922567589864ull, 1213025037870798ull}}, {{10495193461366233460ull, 1940840060593277ull}}, {{1017457139609166120ull, 1552672048474622ull}}, {{11882012155913063864ull, 1242137638779697ull}}, {{4253824190493260892ull, 1987420222047516ull}}, {{18160454611362250008ull, 1589936177638012ull}}, {{7149666059605979360ull, 1271948942110410ull}}, {{11439465695369566976ull, 2035118307376656ull}}, {{5462223741553743256ull, 1628094645901325ull}}, {{4369778993242994604ull, 1302475716721060ull}}, {{6991646389188791368ull, 2083961146753696ull}}, {{1903968296609122772ull, 1667168917402957ull}}, {{12591221081513029188ull, 1333735133922365ull}}, {{1699209656711295084ull, 2133976214275785ull}}, {{1359367725369036068ull, 1707180971420628ull}}, {{8466191809779049500ull, 1365744777136502ull}}, {{17235255710388389524ull, 2185191643418403ull}}, {{2720158124084980648ull, 1748153314734723ull}}, {{9554824128751805164ull, 1398522651787778ull}}, {{11598369791260977940ull, 2237636242860445ull}}, {{9278695833008782352ull, 1790108994288356ull}}, {{3733607851665115560ull, 1432087195430685ull}}, {{2986886281332092448ull, 1145669756344548ull}}, {{1089669235389437592ull, 1833071610151277ull}}, {{11939781832537281044ull, 1466457288121021ull}}, {{5862476651287914512ull, 1173165830496817ull}}, {{13069311456802573544ull, 1877065328794907ull}}, {{3076751535958238188ull, 1501652263035926ull}}, {{17218796487734231840ull, 1201321810428740ull}}, {{9103330306665219332ull, 1922114896685985ull}}, {{7282664245332175464ull, 1537691917348788ull}}, {{13204829025749561020ull, 1230153533879030ull}}, {{2680982367489746016ull, 1968245654206449ull}}, {{5834134708733707136ull, 1574596523365159ull}}, {{8356656581728876032ull, 1259677218692127ull}}, {{17059999345508111972ull, 2015483549907403ull}}, {{2579953032180758608ull, 1612386839925923ull}}, {{9442660055228427532ull, 1289909471940738ull}}, {{11418907273623573732ull, 2063855155105181ull}}, {{5445777004156948660ull, 1651084124084145ull}}, {{4356621603325558928ull, 1320867299267316ull}}, {{18038641009546625256ull, 2113387678827705ull}}, {{14430912807637300204ull, 1690710143062164ull}}, {{15234079060851750488ull, 1352568114449731ull}}, {{16995828867878980132ull, 2164108983119570ull}}, {{13596663094303184104ull, 1731287186495656ull}}, {{7187981660700636960ull, 1385029749196525ull}}, {{11500770657121019140ull, 2216047598714440ull}}, {{9200616525696815312ull, 1772838078971552ull}}, {{18428539664783183216ull, 1418270463177241ull}}, {{11053482917084636252ull, 1134616370541793ull}}, {{13996223852593507680ull, 1815386192866869ull}}, {{14886327896816716464ull, 1452308954293495ull}}, {{11909062317453373172ull, 1161847163434796ull}}, {{11675802078441576432ull, 1858955461495674ull}}, {{13029990477495171468ull, 1487164369196539ull}}, {{14113341196738047496ull, 1189731495357231ull}}, {{15202648285297055348ull, 1903570392571570ull}}, {{12162118628237644280ull, 1522856314057256ull}}, {{6040346087848205100ull, 1218285051245805ull}}, {{9664553740557128160ull, 1949256081993288ull}}, {{15110340621929523176ull, 1559404865594630ull}}, {{12088272497543618540ull, 1247523892475704ull}}, {{8273189551844058696ull, 1996038227961127ull}}, {{17686598085700977924ull, 1596830582368901ull}}, {{10459929653818872016ull, 1277464465895121ull}}, {{9357189816626374580ull, 2043943145432194ull}}, {{11175100668043009988ull, 1635154516345755ull}}, {{8940080534434407988ull, 1308123613076604ull}}, {{3236082410869321816ull, 2092997780922567ull}}, {{13656912372921188420ull, 1674398224738053ull}}, {{18304227527820771384ull, 1339518579790442ull}}, {{14529368785545592920ull, 2143229727664708ull}} }; static const int exponents_binary128[] = { -115, -112, -108, -105, -102, -99, -95, -92, -89, -85, -82, -79, -75, -72, -69, -65, -62, -59, -55, -52, -49, -45, -42, -39, -35, -32, -29, -25, -22, -19, -15, -12, -9, -6, -2, 1, 4, 8, 11, 14, 18, 21, 24, 28, 31, 34, 38, 41, 44, 48, 51, 54, 58, 61, 64, 68, 71, 74, 78, 81, 84, 87, 91, 94, 97, 101, 104, 107, 111, 114, 117, 121, 124, 127, 131, 134, 137, 141, 144, 147, 151, 154, 157, 161, 164, 167, 171, 174, 177, 181, 184, 187, 190, 194, 197, 200, 204, 207, 210, 214, 217, 220, 224, 227, 230, 234, 237, 240, 244, 247, 250, 254, 257, 260, 264, 267, 270, 274, 277, 280, 283, 287, 290, 293, 297, 300, 303, 307, 310, 313, 317, 320, 323, 327, 330, 333, 337, 340, 343, 347, 350, 353, 357, 360, 363, 367, 370, 373, 377, 380, 383, 386, 390, 393, 396, 400, 403, 406, 410, 413, 416, 420, 423, 426, 430, 433, 436, 440, 443, 446, 450, 453, 456, 460, 463, 466, 470, 473, 476, 479, 483, 486, 489, 493, 496, 499, 503, 506, 509, 513, 516, 519, 523, 526, 529, 533, 536, 539, 543, 546, 549, 553, 556, 559, 563, 566, 569, 572, 576, 579, 582, 586, 589, 592, 596, 599, 602, 606, 609, 612, 616, 619, 622, 626, 629, 632, 636, 639, 642, 646, 649, 652, 656, 659, 662, 666, 669, 672, 675, 679, 682, 685, 689, 692, 695, 699, 702, 705, 709, 712, 715, 719, 722, 725, 729, 732, 735, 739, 742, 745, 749, 752, 755, 759, 762, 765, 768, 772, 775, 778, 782, 785, 788, 792, 795, 798, 802, 805, 808, 812, 815, 818, 822, 825, 828, 832, 835, 838, 842, 845, 848, 852, 855, 858, 862, 865, 868, 871, 875, 878, 881, 885, 888, 891, 895, 898, 901, 905, 908, 911, 915, 918, 921, 925, 928, 931, 935, 938, 941, 945, 948, 951, 955, 958, 961, 964, 968, 971, 974, 978, 981, 984, 988, 991, 994, 998, 1001, 1004, 1008, 1011, 1014, 1018, 1021, 1024, 1028, 1031, 1034, 1038, 1041, 1044, 1048, 1051, 1054, 1058, 1061, 1064, 1067, 1071, 1074, 1077, 1081, 1084, 1087, 1091, 1094, 1097, 1101, 1104, 1107, 1111, 1114, 1117, 1121, 1124, 1127, 1131, 1134, 1137, 1141, 1144, 1147, 1151, 1154, 1157, 1160, 1164, 1167, 1170, 1174, 1177, 1180, 1184, 1187, 1190, 1194, 1197, 1200, 1204, 1207, 1210, 1214, 1217, 1220, 1224, 1227, 1230, 1234, 1237, 1240, 1244, 1247, 1250, 1253, 1257, 1260, 1263, 1267, 1270, 1273, 1277, 1280, 1283, 1287, 1290, 1293, 1297, 1300, 1303, 1307, 1310, 1313, 1317, 1320, 1323, 1327, 1330, 1333, 1337, 1340, 1343, 1347, 1350, 1353, 1356, 1360, 1363, 1366, 1370, 1373, 1376, 1380, 1383, 1386, 1390, 1393, 1396, 1400, 1403, 1406, 1410, 1413, 1416, 1420, 1423, 1426, 1430, 1433, 1436, 1440, 1443, 1446, 1449, 1453, 1456, 1459, 1463, 1466, 1469, 1473, 1476, 1479, 1483, 1486, 1489, 1493, 1496, 1499, 1503, 1506, 1509, 1513, 1516, 1519, 1523, 1526, 1529, 1533, 1536, 1539, 1543, 1546, 1549, 1552, 1556, 1559, 1562, 1566, 1569, 1572, 1576, 1579, 1582, 1586, 1589, 1592, 1596, 1599, 1602, 1606, 1609, 1612, 1616, 1619, 1622, 1626, 1629, 1632, 1636, 1639, 1642, 1645, 1649, 1652, 1655, 1659, 1662, 1665, 1669, 1672, 1675, 1679, 1682, 1685, 1689, 1692, 1695, 1699, 1702, 1705, 1709, 1712, 1715, 1719, 1722, 1725, 1729, 1732, 1735, 1738, 1742, 1745, 1748, 1752, 1755, 1758, 1762, 1765, 1768, 1772, 1775, 1778, 1782, 1785, 1788, 1792, 1795, 1798, 1802, 1805, 1808, 1812, 1815, 1818, 1822, 1825, 1828, 1832, 1835, 1838, 1841, 1845, 1848, 1851, 1855, 1858, 1861, 1865, 1868, 1871, 1875, 1878, 1881, 1885, 1888, 1891, 1895, 1898, 1901, 1905, 1908, 1911, 1915, 1918, 1921, 1925, 1928, 1931, 1934, 1938, 1941, 1944, 1948, 1951, 1954, 1958, 1961, 1964, 1968, 1971, 1974, 1978, 1981, 1984, 1988, 1991, 1994, 1998, 2001, 2004, 2008, 2011, 2014, 2018, 2021, 2024, 2028, 2031, 2034, 2037, 2041, 2044, 2047, 2051, 2054, 2057, 2061, 2064, 2067, 2071, 2074, 2077, 2081, 2084, 2087, 2091, 2094, 2097, 2101, 2104, 2107, 2111, 2114, 2117, 2121, 2124, 2127, 2130, 2134, 2137, 2140, 2144, 2147, 2150, 2154, 2157, 2160, 2164, 2167, 2170, 2174, 2177, 2180, 2184, 2187, 2190, 2194, 2197, 2200, 2204, 2207, 2210, 2214, 2217, 2220, 2223, 2227, 2230, 2233, 2237, 2240, 2243, 2247, 2250, 2253, 2257, 2260, 2263, 2267, 2270, 2273, 2277, 2280, 2283, 2287, 2290, 2293, 2297, 2300, 2303, 2307, 2310, 2313, 2317, 2320, 2323, 2326, 2330, 2333, 2336, 2340, 2343, 2346, 2350, 2353, 2356, 2360, 2363, 2366, 2370, 2373, 2376, 2380, 2383, 2386, 2390, 2393, 2396, 2400, 2403, 2406, 2410, 2413, 2416, 2419, 2423, 2426, 2429, 2433, 2436, 2439, 2443, 2446, 2449, 2453, 2456, 2459, 2463, 2466, 2469, 2473, 2476, 2479, 2483, 2486, 2489, 2493, 2496, 2499, 2503, 2506, 2509, 2513, 2516, 2519, 2522, 2526, 2529, 2532, 2536, 2539, 2542, 2546, 2549, 2552, 2556, 2559, 2562, 2566, 2569, 2572, 2576, 2579, 2582, 2586, 2589, 2592, 2596, 2599, 2602, 2606, 2609, 2612, 2615, 2619, 2622, 2625, 2629, 2632, 2635, 2639, 2642, 2645, 2649, 2652, 2655, 2659, 2662, 2665, 2669, 2672, 2675, 2679, 2682, 2685, 2689, 2692, 2695, 2699, 2702, 2705, 2708, 2712, 2715, 2718, 2722, 2725, 2728, 2732, 2735, 2738, 2742, 2745, 2748, 2752, 2755, 2758, 2762, 2765, 2768, 2772, 2775, 2778, 2782, 2785, 2788, 2792, 2795, 2798, 2802, 2805, 2808, 2811, 2815, 2818, 2821, 2825, 2828, 2831, 2835, 2838, 2841, 2845, 2848, 2851, 2855, 2858, 2861, 2865, 2868, 2871, 2875, 2878, 2881, 2885, 2888, 2891, 2895, 2898, 2901, 2904, 2908, 2911, 2914, 2918, 2921, 2924, 2928, 2931, 2934, 2938, 2941, 2944, 2948, 2951, 2954, 2958, 2961, 2964, 2968, 2971, 2974, 2978, 2981, 2984, 2988, 2991, 2994, 2998, 3001, 3004, 3007, 3011, 3014, 3017, 3021, 3024, 3027, 3031, 3034, 3037, 3041, 3044, 3047, 3051, 3054, 3057, 3061, 3064, 3067, 3071, 3074, 3077, 3081, 3084, 3087, 3091, 3094, 3097, 3100, 3104, 3107, 3110, 3114, 3117, 3120, 3124, 3127, 3130, 3134, 3137, 3140, 3144, 3147, 3150, 3154, 3157, 3160, 3164, 3167, 3170, 3174, 3177, 3180, 3184, 3187, 3190, 3193, 3197, 3200, 3203, 3207, 3210, 3213, 3217, 3220, 3223, 3227, 3230, 3233, 3237, 3240, 3243, 3247, 3250, 3253, 3257, 3260, 3263, 3267, 3270, 3273, 3277, 3280, 3283, 3287, 3290, 3293, 3296, 3300, 3303, 3306, 3310, 3313, 3316, 3320, 3323, 3326, 3330, 3333, 3336, 3340, 3343, 3346, 3350, 3353, 3356, 3360, 3363, 3366, 3370, 3373, 3376, 3380, 3383, 3386, 3389, 3393, 3396, 3399, 3403, 3406, 3409, 3413, 3416, 3419, 3423, 3426, 3429, 3433, 3436, 3439, 3443, 3446, 3449, 3453, 3456, 3459, 3463, 3466, 3469, 3473, 3476, 3479, 3483, 3486, 3489, 3492, 3496, 3499, 3502, 3506, 3509, 3512, 3516, 3519, 3522, 3526, 3529, 3532, 3536, 3539, 3542, 3546, 3549, 3552, 3556, 3559, 3562, 3566, 3569, 3572, 3576, 3579, 3582, 3585, 3589, 3592, 3595, 3599, 3602, 3605, 3609, 3612, 3615, 3619, 3622, 3625, 3629, 3632, 3635, 3639, 3642, 3645, 3649, 3652, 3655, 3659, 3662, 3665, 3669, 3672, 3675, 3679, 3682, 3685, 3688, 3692, 3695, 3698, 3702, 3705, 3708, 3712, 3715, 3718, 3722, 3725, 3728, 3732, 3735, 3738, 3742, 3745, 3748, 3752, 3755, 3758, 3762, 3765, 3768, 3772, 3775, 3778, 3781, 3785, 3788, 3791, 3795, 3798, 3801, 3805, 3808, 3811, 3815, 3818, 3821, 3825, 3828, 3831, 3835, 3838, 3841, 3845, 3848, 3851, 3855, 3858, 3861, 3865, 3868, 3871, 3874, 3878, 3881, 3884, 3888, 3891, 3894, 3898, 3901, 3904, 3908, 3911, 3914, 3918, 3921, 3924, 3928, 3931, 3934, 3938, 3941, 3944, 3948, 3951, 3954, 3958, 3961, 3964, 3968, 3971, 3974, 3977, 3981, 3984, 3987, 3991, 3994, 3997, 4001, 4004, 4007, 4011, 4014, 4017, 4021, 4024, 4027, 4031, 4034, 4037, 4041, 4044, 4047, 4051, 4054, 4057, 4061, 4064, 4067, 4070, 4074, 4077, 4080, 4084, 4087, 4090, 4094, 4097, 4100, 4104, 4107, 4110, 4114, 4117, 4120, 4124, 4127, 4130, 4134, 4137, 4140, 4144, 4147, 4150, 4154, 4157, 4160, 4164, 4167, 4170, 4173, 4177, 4180, 4183, 4187, 4190, 4193, 4197, 4200, 4203, 4207, 4210, 4213, 4217, 4220, 4223, 4227, 4230, 4233, 4237, 4240, 4243, 4247, 4250, 4253, 4257, 4260, 4263, 4266, 4270, 4273, 4276, 4280, 4283, 4286, 4290, 4293, 4296, 4300, 4303, 4306, 4310, 4313, 4316, 4320, 4323, 4326, 4330, 4333, 4336, 4340, 4343, 4346, 4350, 4353, 4356, 4359, 4363, 4366, 4369, 4373, 4376, 4379, 4383, 4386, 4389, 4393, 4396, 4399, 4403, 4406, 4409, 4413, 4416, 4419, 4423, 4426, 4429, 4433, 4436, 4439, 4443, 4446, 4449, 4453, 4456, 4459, 4462, 4466, 4469, 4472, 4476, 4479, 4482, 4486, 4489, 4492, 4496, 4499, 4502, 4506, 4509, 4512, 4516, 4519, 4522, 4526, 4529, 4532, 4536, 4539, 4542, 4546, 4549, 4552, 4555, 4559, 4562, 4565, 4569, 4572, 4575, 4579, 4582, 4585, 4589, 4592, 4595, 4599, 4602, 4605, 4609, 4612, 4615, 4619, 4622, 4625, 4629, 4632, 4635, 4639, 4642, 4645, 4649, 4652, 4655, 4658, 4662, 4665, 4668, 4672, 4675, 4678, 4682, 4685, 4688, 4692, 4695, 4698, 4702, 4705, 4708, 4712, 4715, 4718, 4722, 4725, 4728, 4732, 4735, 4738, 4742, 4745, 4748, 4751, 4755, 4758, 4761, 4765, 4768, 4771, 4775, 4778, 4781, 4785, 4788, 4791, 4795, 4798, 4801, 4805, 4808, 4811, 4815, 4818, 4821, 4825, 4828, 4831, 4835, 4838, 4841, 4844, 4848, 4851, 4854, 4858, 4861, 4864, 4868, 4871, 4874, 4878, 4881, 4884, 4888, 4891, 4894, 4898, 4901, 4904, 4908, 4911, 4914, 4918, 4921, 4924, 4928, 4931, 4934, 4938, 4941, 4944, 4947, 4951, 4954, 4957, 4961, 4964, 4967, 4971, 4974, 4977, 4981, 4984, 4987, 4991, 4994, 4997, 5001, 5004, 5007, 5011, 5014, 5017, 5021, 5024, 5027, 5031, 5034, 5037, 5040, 5044, 5047, 5050, 5054, 5057, 5060, 5064, 5067, 5070, 5074, 5077, 5080, 5084, 5087, 5090, 5094, 5097, 5100, 5104, 5107, 5110, 5114, 5117, 5120, 5124, 5127, 5130, 5134, 5137, 5140, 5143, 5147, 5150, 5153, 5157, 5160, 5163, 5167, 5170, 5173, 5177, 5180, 5183, 5187, 5190, 5193, 5197, 5200, 5203, 5207, 5210, 5213, 5217, 5220, 5223, 5227, 5230, 5233, 5236, 5240, 5243, 5246, 5250, 5253, 5256, 5260, 5263, 5266, 5270, 5273, 5276, 5280, 5283, 5286, 5290, 5293, 5296, 5300, 5303, 5306, 5310, 5313, 5316, 5320, 5323, 5326, 5329, 5333, 5336, 5339, 5343, 5346, 5349, 5353, 5356, 5359, 5363, 5366, 5369, 5373, 5376, 5379, 5383, 5386, 5389, 5393, 5396, 5399, 5403, 5406, 5409, 5413, 5416, 5419, 5423, 5426, 5429, 5432, 5436, 5439, 5442, 5446, 5449, 5452, 5456, 5459, 5462, 5466, 5469, 5472, 5476, 5479, 5482, 5486, 5489, 5492, 5496, 5499, 5502, 5506, 5509, 5512, 5516, 5519, 5522, 5525, 5529, 5532, 5535, 5539, 5542, 5545, 5549, 5552, 5555, 5559, 5562, 5565, 5569, 5572, 5575, 5579, 5582, 5585, 5589, 5592, 5595, 5599, 5602, 5605, 5609, 5612, 5615, 5619, 5622, 5625, 5628, 5632, 5635, 5638, 5642, 5645, 5648, 5652, 5655, 5658, 5662, 5665, 5668, 5672, 5675, 5678, 5682, 5685, 5688, 5692, 5695, 5698, 5702, 5705, 5708, 5712, 5715, 5718, 5721, 5725, 5728, 5731, 5735, 5738, 5741, 5745, 5748, 5751, 5755, 5758, 5761, 5765, 5768, 5771, 5775, 5778, 5781, 5785, 5788, 5791, 5795, 5798, 5801, 5805, 5808, 5811, 5815, 5818, 5821, 5824, 5828, 5831, 5834, 5838, 5841, 5844, 5848, 5851, 5854, 5858, 5861, 5864, 5868, 5871, 5874, 5878, 5881, 5884, 5888, 5891, 5894, 5898, 5901, 5904, 5908, 5911, 5914, 5917, 5921, 5924, 5927, 5931, 5934, 5937, 5941, 5944, 5947, 5951, 5954, 5957, 5961, 5964, 5967, 5971, 5974, 5977, 5981, 5984, 5987, 5991, 5994, 5997, 6001, 6004, 6007, 6010, 6014, 6017, 6020, 6024, 6027, 6030, 6034, 6037, 6040, 6044, 6047, 6050, 6054, 6057, 6060, 6064, 6067, 6070, 6074, 6077, 6080, 6084, 6087, 6090, 6094, 6097, 6100, 6104, 6107, 6110, 6113, 6117, 6120, 6123, 6127, 6130, 6133, 6137, 6140, 6143, 6147, 6150, 6153, 6157, 6160, 6163, 6167, 6170, 6173, 6177, 6180, 6183, 6187, 6190, 6193, 6197, 6200, 6203, 6206, 6210, 6213, 6216, 6220, 6223, 6226, 6230, 6233, 6236, 6240, 6243, 6246, 6250, 6253, 6256, 6260, 6263, 6266, 6270, 6273, 6276, 6280, 6283, 6286, 6290, 6293, 6296, 6300, 6303, 6306, 6309, 6313, 6316, 6319, 6323, 6326, 6329, 6333, 6336, 6339, 6343, 6346, 6349, 6353, 6356, 6359, 6363, 6366, 6369, 6373, 6376, 6379, 6383, 6386, 6389, 6393, 6396, 6399, 6402, 6406, 6409, 6412, 6416, 6419, 6422, 6426, 6429, 6432, 6436, 6439, 6442, 6446, 6449, 6452, 6456, 6459, 6462, 6466, 6469, 6472, 6476, 6479, 6482, 6486, 6489, 6492, 6495, 6499, 6502, 6505, 6509, 6512, 6515, 6519, 6522, 6525, 6529, 6532, 6535, 6539, 6542, 6545, 6549, 6552, 6555, 6559, 6562, 6565, 6569, 6572, 6575, 6579, 6582, 6585, 6589, 6592, 6595, 6598, 6602, 6605, 6608, 6612, 6615, 6618, 6622, 6625, 6628, 6632, 6635, 6638, 6642, 6645, 6648, 6652, 6655, 6658, 6662, 6665, 6668, 6672, 6675, 6678, 6682, 6685, 6688, 6691, 6695, 6698, 6701, 6705, 6708, 6711, 6715, 6718, 6721, 6725, 6728, 6731, 6735, 6738, 6741, 6745, 6748, 6751, 6755, 6758, 6761, 6765, 6768, 6771, 6775, 6778, 6781, 6785, 6788, 6791, 6794, 6798, 6801, 6804, 6808, 6811, 6814, 6818, 6821, 6824, 6828, 6831, 6834, 6838, 6841, 6844, 6848, 6851, 6854, 6858, 6861, 6864, 6868, 6871, 6874, 6878, 6881, 6884, 6887, 6891, 6894, 6897, 6901, 6904, 6907, 6911, 6914, 6917, 6921, 6924, 6927, 6931, 6934, 6937, 6941, 6944, 6947, 6951, 6954, 6957, 6961, 6964, 6967, 6971, 6974, 6977, 6980, 6984, 6987, 6990, 6994, 6997, 7000, 7004, 7007, 7010, 7014, 7017, 7020, 7024, 7027, 7030, 7034, 7037, 7040, 7044, 7047, 7050, 7054, 7057, 7060, 7064, 7067, 7070, 7074, 7077, 7080, 7083, 7087, 7090, 7093, 7097, 7100, 7103, 7107, 7110, 7113, 7117, 7120, 7123, 7127, 7130, 7133, 7137, 7140, 7143, 7147, 7150, 7153, 7157, 7160, 7163, 7167, 7170, 7173, 7176, 7180, 7183, 7186, 7190, 7193, 7196, 7200, 7203, 7206, 7210, 7213, 7216, 7220, 7223, 7226, 7230, 7233, 7236, 7240, 7243, 7246, 7250, 7253, 7256, 7260, 7263, 7266, 7270, 7273, 7276, 7279, 7283, 7286, 7289, 7293, 7296, 7299, 7303, 7306, 7309, 7313, 7316, 7319, 7323, 7326, 7329, 7333, 7336, 7339, 7343, 7346, 7349, 7353, 7356, 7359, 7363, 7366, 7369, 7372, 7376, 7379, 7382, 7386, 7389, 7392, 7396, 7399, 7402, 7406, 7409, 7412, 7416, 7419, 7422, 7426, 7429, 7432, 7436, 7439, 7442, 7446, 7449, 7452, 7456, 7459, 7462, 7465, 7469, 7472, 7475, 7479, 7482, 7485, 7489, 7492, 7495, 7499, 7502, 7505, 7509, 7512, 7515, 7519, 7522, 7525, 7529, 7532, 7535, 7539, 7542, 7545, 7549, 7552, 7555, 7559, 7562, 7565, 7568, 7572, 7575, 7578, 7582, 7585, 7588, 7592, 7595, 7598, 7602, 7605, 7608, 7612, 7615, 7618, 7622, 7625, 7628, 7632, 7635, 7638, 7642, 7645, 7648, 7652, 7655, 7658, 7661, 7665, 7668, 7671, 7675, 7678, 7681, 7685, 7688, 7691, 7695, 7698, 7701, 7705, 7708, 7711, 7715, 7718, 7721, 7725, 7728, 7731, 7735, 7738, 7741, 7745, 7748, 7751, 7755, 7758, 7761, 7764, 7768, 7771, 7774, 7778, 7781, 7784, 7788, 7791, 7794, 7798, 7801, 7804, 7808, 7811, 7814, 7818, 7821, 7824, 7828, 7831, 7834, 7838, 7841, 7844, 7848, 7851, 7854, 7857, 7861, 7864, 7867, 7871, 7874, 7877, 7881, 7884, 7887, 7891, 7894, 7897, 7901, 7904, 7907, 7911, 7914, 7917, 7921, 7924, 7927, 7931, 7934, 7937, 7941, 7944, 7947, 7951, 7954, 7957, 7960, 7964, 7967, 7970, 7974, 7977, 7980, 7984, 7987, 7990, 7994, 7997, 8000, 8004, 8007, 8010, 8014, 8017, 8020, 8024, 8027, 8030, 8034, 8037, 8040, 8044, 8047, 8050, 8053, 8057, 8060, 8063, 8067, 8070, 8073, 8077, 8080, 8083, 8087, 8090, 8093, 8097, 8100, 8103, 8107, 8110, 8113, 8117, 8120, 8123, 8127, 8130, 8133, 8137, 8140, 8143, 8146, 8150, 8153, 8156, 8160, 8163, 8166, 8170, 8173, 8176, 8180, 8183, 8186, 8190, 8193, 8196, 8200, 8203, 8206, 8210, 8213, 8216, 8220, 8223, 8226, 8230, 8233, 8236, 8240, 8243, 8246, 8249, 8253, 8256, 8259, 8263, 8266, 8269, 8273, 8276, 8279, 8283, 8286, 8289, 8293, 8296, 8299, 8303, 8306, 8309, 8313, 8316, 8319, 8323, 8326, 8329, 8333, 8336, 8339, 8342, 8346, 8349, 8352, 8356, 8359, 8362, 8366, 8369, 8372, 8376, 8379, 8382, 8386, 8389, 8392, 8396, 8399, 8402, 8406, 8409, 8412, 8416, 8419, 8422, 8426, 8429, 8432, 8436, 8439, 8442, 8445, 8449, 8452, 8455, 8459, 8462, 8465, 8469, 8472, 8475, 8479, 8482, 8485, 8489, 8492, 8495, 8499, 8502, 8505, 8509, 8512, 8515, 8519, 8522, 8525, 8529, 8532, 8535, 8538, 8542, 8545, 8548, 8552, 8555, 8558, 8562, 8565, 8568, 8572, 8575, 8578, 8582, 8585, 8588, 8592, 8595, 8598, 8602, 8605, 8608, 8612, 8615, 8618, 8622, 8625, 8628, 8631, 8635, 8638, 8641, 8645, 8648, 8651, 8655, 8658, 8661, 8665, 8668, 8671, 8675, 8678, 8681, 8685, 8688, 8691, 8695, 8698, 8701, 8705, 8708, 8711, 8715, 8718, 8721, 8725, 8728, 8731, 8734, 8738, 8741, 8744, 8748, 8751, 8754, 8758, 8761, 8764, 8768, 8771, 8774, 8778, 8781, 8784, 8788, 8791, 8794, 8798, 8801, 8804, 8808, 8811, 8814, 8818, 8821, 8824, 8827, 8831, 8834, 8837, 8841, 8844, 8847, 8851, 8854, 8857, 8861, 8864, 8867, 8871, 8874, 8877, 8881, 8884, 8887, 8891, 8894, 8897, 8901, 8904, 8907, 8911, 8914, 8917, 8921, 8924, 8927, 8930, 8934, 8937, 8940, 8944, 8947, 8950, 8954, 8957, 8960, 8964, 8967, 8970, 8974, 8977, 8980, 8984, 8987, 8990, 8994, 8997, 9000, 9004, 9007, 9010, 9014, 9017, 9020, 9023, 9027, 9030, 9033, 9037, 9040, 9043, 9047, 9050, 9053, 9057, 9060, 9063, 9067, 9070, 9073, 9077, 9080, 9083, 9087, 9090, 9093, 9097, 9100, 9103, 9107, 9110, 9113, 9116, 9120, 9123, 9126, 9130, 9133, 9136, 9140, 9143, 9146, 9150, 9153, 9156, 9160, 9163, 9166, 9170, 9173, 9176, 9180, 9183, 9186, 9190, 9193, 9196, 9200, 9203, 9206, 9210, 9213, 9216, 9219, 9223, 9226, 9229, 9233, 9236, 9239, 9243, 9246, 9249, 9253, 9256, 9259, 9263, 9266, 9269, 9273, 9276, 9279, 9283, 9286, 9289, 9293, 9296, 9299, 9303, 9306, 9309, 9312, 9316, 9319, 9322, 9326, 9329, 9332, 9336, 9339, 9342, 9346, 9349, 9352, 9356, 9359, 9362, 9366, 9369, 9372, 9376, 9379, 9382, 9386, 9389, 9392, 9396, 9399, 9402, 9406, 9409, 9412, 9415, 9419, 9422, 9425, 9429, 9432, 9435, 9439, 9442, 9445, 9449, 9452, 9455, 9459, 9462, 9465, 9469, 9472, 9475, 9479, 9482, 9485, 9489, 9492, 9495, 9499, 9502, 9505, 9508, 9512, 9515, 9518, 9522, 9525, 9528, 9532, 9535, 9538, 9542, 9545, 9548, 9552, 9555, 9558, 9562, 9565, 9568, 9572, 9575, 9578, 9582, 9585, 9588, 9592, 9595, 9598, 9601, 9605, 9608, 9611, 9615, 9618, 9621, 9625, 9628, 9631, 9635, 9638, 9641, 9645, 9648, 9651, 9655, 9658, 9661, 9665, 9668, 9671, 9675, 9678, 9681, 9685, 9688, 9691, 9695, 9698, 9701, 9704, 9708, 9711, 9714, 9718, 9721, 9724, 9728, 9731, 9734, 9738, 9741, 9744, 9748, 9751, 9754, 9758, 9761, 9764, 9768, 9771, 9774, 9778, 9781, 9784, 9788, 9791, 9794, 9797, 9801, 9804, 9807, 9811, 9814, 9817, 9821, 9824, 9827, 9831, 9834, 9837, 9841, 9844, 9847, 9851, 9854, 9857, 9861, 9864, 9867, 9871, 9874, 9877, 9881, 9884, 9887, 9891, 9894, 9897, 9900, 9904, 9907, 9910, 9914, 9917, 9920, 9924, 9927, 9930, 9934, 9937, 9940, 9944, 9947, 9950, 9954, 9957, 9960, 9964, 9967, 9970, 9974, 9977, 9980, 9984, 9987, 9990, 9993, 9997, 10000, 10003, 10007, 10010, 10013, 10017, 10020, 10023, 10027, 10030, 10033, 10037, 10040, 10043, 10047, 10050, 10053, 10057, 10060, 10063, 10067, 10070, 10073, 10077, 10080, 10083, 10087, 10090, 10093, 10096, 10100, 10103, 10106, 10110, 10113, 10116, 10120, 10123, 10126, 10130, 10133, 10136, 10140, 10143, 10146, 10150, 10153, 10156, 10160, 10163, 10166, 10170, 10173, 10176, 10180, 10183, 10186, 10189, 10193, 10196, 10199, 10203, 10206, 10209, 10213, 10216, 10219, 10223, 10226, 10229, 10233, 10236, 10239, 10243, 10246, 10249, 10253, 10256, 10259, 10263, 10266, 10269, 10273, 10276, 10279, 10282, 10286, 10289, 10292, 10296, 10299, 10302, 10306, 10309, 10312, 10316, 10319, 10322, 10326, 10329, 10332, 10336, 10339, 10342, 10346, 10349, 10352, 10356, 10359, 10362, 10366, 10369, 10372, 10376, 10379, 10382, 10385, 10389, 10392, 10395, 10399, 10402, 10405, 10409, 10412, 10415, 10419, 10422, 10425, 10429, 10432, 10435, 10439, 10442, 10445, 10449, 10452, 10455, 10459, 10462, 10465, 10469, 10472, 10475, 10478, 10482, 10485, 10488, 10492, 10495, 10498, 10502, 10505, 10508, 10512, 10515, 10518, 10522, 10525, 10528, 10532, 10535, 10538, 10542, 10545, 10548, 10552, 10555, 10558, 10562, 10565, 10568, 10572, 10575, 10578, 10581, 10585, 10588, 10591, 10595, 10598, 10601, 10605, 10608, 10611, 10615, 10618, 10621, 10625, 10628, 10631, 10635, 10638, 10641, 10645, 10648, 10651, 10655, 10658, 10661, 10665, 10668, 10671, 10674, 10678, 10681, 10684, 10688, 10691, 10694, 10698, 10701, 10704, 10708, 10711, 10714, 10718, 10721, 10724, 10728, 10731, 10734, 10738, 10741, 10744, 10748, 10751, 10754, 10758, 10761, 10764, 10767, 10771, 10774, 10777, 10781, 10784, 10787, 10791, 10794, 10797, 10801, 10804, 10807, 10811, 10814, 10817, 10821, 10824, 10827, 10831, 10834, 10837, 10841, 10844, 10847, 10851, 10854, 10857, 10861, 10864, 10867, 10870, 10874, 10877, 10880, 10884, 10887, 10890, 10894, 10897, 10900, 10904, 10907, 10910, 10914, 10917, 10920, 10924, 10927, 10930, 10934, 10937, 10940, 10944, 10947, 10950, 10954, 10957, 10960, 10963, 10967, 10970, 10973, 10977, 10980, 10983, 10987, 10990, 10993, 10997, 11000, 11003, 11007, 11010, 11013, 11017, 11020, 11023, 11027, 11030, 11033, 11037, 11040, 11043, 11047, 11050, 11053, 11057, 11060, 11063, 11066, 11070, 11073, 11076, 11080, 11083, 11086, 11090, 11093, 11096, 11100, 11103, 11106, 11110, 11113, 11116, 11120, 11123, 11126, 11130, 11133, 11136, 11140, 11143, 11146, 11150, 11153, 11156, 11159, 11163, 11166, 11169, 11173, 11176, 11179, 11183, 11186, 11189, 11193, 11196, 11199, 11203, 11206, 11209, 11213, 11216, 11219, 11223, 11226, 11229, 11233, 11236, 11239, 11243, 11246, 11249, 11252, 11256, 11259, 11262, 11266, 11269, 11272, 11276, 11279, 11282, 11286, 11289, 11292, 11296, 11299, 11302, 11306, 11309, 11312, 11316, 11319, 11322, 11326, 11329, 11332, 11336, 11339, 11342, 11346, 11349, 11352, 11355, 11359, 11362, 11365, 11369, 11372, 11375, 11379, 11382, 11385, 11389, 11392, 11395, 11399, 11402, 11405, 11409, 11412, 11415, 11419, 11422, 11425, 11429, 11432, 11435, 11439, 11442, 11445, 11448, 11452, 11455, 11458, 11462, 11465, 11468, 11472, 11475, 11478, 11482, 11485, 11488, 11492, 11495, 11498, 11502, 11505, 11508, 11512, 11515, 11518, 11522, 11525, 11528, 11532, 11535, 11538, 11542, 11545, 11548, 11551, 11555, 11558, 11561, 11565, 11568, 11571, 11575, 11578, 11581, 11585, 11588, 11591, 11595, 11598, 11601, 11605, 11608, 11611, 11615, 11618, 11621, 11625, 11628, 11631, 11635, 11638, 11641, 11644, 11648, 11651, 11654, 11658, 11661, 11664, 11668, 11671, 11674, 11678, 11681, 11684, 11688, 11691, 11694, 11698, 11701, 11704, 11708, 11711, 11714, 11718, 11721, 11724, 11728, 11731, 11734, 11737, 11741, 11744, 11747, 11751, 11754, 11757, 11761, 11764, 11767, 11771, 11774, 11777, 11781, 11784, 11787, 11791, 11794, 11797, 11801, 11804, 11807, 11811, 11814, 11817, 11821, 11824, 11827, 11831, 11834, 11837, 11840, 11844, 11847, 11850, 11854, 11857, 11860, 11864, 11867, 11870, 11874, 11877, 11880, 11884, 11887, 11890, 11894, 11897, 11900, 11904, 11907, 11910, 11914, 11917, 11920, 11924, 11927, 11930, 11933, 11937, 11940, 11943, 11947, 11950, 11953, 11957, 11960, 11963, 11967, 11970, 11973, 11977, 11980, 11983, 11987, 11990, 11993, 11997, 12000, 12003, 12007, 12010, 12013, 12017, 12020, 12023, 12027, 12030, 12033, 12036, 12040, 12043, 12046, 12050, 12053, 12056, 12060, 12063, 12066, 12070, 12073, 12076, 12080, 12083, 12086, 12090, 12093, 12096, 12100, 12103, 12106, 12110, 12113, 12116, 12120, 12123, 12126, 12129, 12133, 12136, 12139, 12143, 12146, 12149, 12153, 12156, 12159, 12163, 12166, 12169, 12173, 12176, 12179, 12183, 12186, 12189, 12193, 12196, 12199, 12203, 12206, 12209, 12213, 12216, 12219, 12223, 12226, 12229, 12232, 12236, 12239, 12242, 12246, 12249, 12252, 12256, 12259, 12262, 12266, 12269, 12272, 12276, 12279, 12282, 12286, 12289, 12292, 12296, 12299, 12302, 12306, 12309, 12312, 12316, 12319, 12322, 12325, 12329, 12332, 12335, 12339, 12342, 12345, 12349, 12352, 12355, 12359, 12362, 12365, 12369, 12372, 12375, 12379, 12382, 12385, 12389, 12392, 12395, 12399, 12402, 12405, 12409, 12412, 12415, 12418, 12422, 12425, 12428, 12432, 12435, 12438, 12442, 12445, 12448, 12452, 12455, 12458, 12462, 12465, 12468, 12472, 12475, 12478, 12482, 12485, 12488, 12492, 12495, 12498, 12502, 12505, 12508, 12512, 12515, 12518, 12521, 12525, 12528, 12531, 12535, 12538, 12541, 12545, 12548, 12551, 12555, 12558, 12561, 12565, 12568, 12571, 12575, 12578, 12581, 12585, 12588, 12591, 12595, 12598, 12601, 12605, 12608, 12611, 12614, 12618, 12621, 12624, 12628, 12631, 12634, 12638, 12641, 12644, 12648, 12651, 12654, 12658, 12661, 12664, 12668, 12671, 12674, 12678, 12681, 12684, 12688, 12691, 12694, 12698, 12701, 12704, 12708, 12711, 12714, 12717, 12721, 12724, 12727, 12731, 12734, 12737, 12741, 12744, 12747, 12751, 12754, 12757, 12761, 12764, 12767, 12771, 12774, 12777, 12781, 12784, 12787, 12791, 12794, 12797, 12801, 12804, 12807, 12810, 12814, 12817, 12820, 12824, 12827, 12830, 12834, 12837, 12840, 12844, 12847, 12850, 12854, 12857, 12860, 12864, 12867, 12870, 12874, 12877, 12880, 12884, 12887, 12890, 12894, 12897, 12900, 12903, 12907, 12910, 12913, 12917, 12920, 12923, 12927, 12930, 12933, 12937, 12940, 12943, 12947, 12950, 12953, 12957, 12960, 12963, 12967, 12970, 12973, 12977, 12980, 12983, 12987, 12990, 12993, 12997, 13000, 13003, 13006, 13010, 13013, 13016, 13020, 13023, 13026, 13030, 13033, 13036, 13040, 13043, 13046, 13050, 13053, 13056, 13060, 13063, 13066, 13070, 13073, 13076, 13080, 13083, 13086, 13090, 13093, 13096, 13099, 13103, 13106, 13109, 13113, 13116, 13119, 13123, 13126, 13129, 13133, 13136, 13139, 13143, 13146, 13149, 13153, 13156, 13159, 13163, 13166, 13169, 13173, 13176, 13179, 13183, 13186, 13189, 13193, 13196, 13199, 13202, 13206, 13209, 13212, 13216, 13219, 13222, 13226, 13229, 13232, 13236, 13239, 13242, 13246, 13249, 13252, 13256, 13259, 13262, 13266, 13269, 13272, 13276, 13279, 13282, 13286, 13289, 13292, 13295, 13299, 13302, 13305, 13309, 13312, 13315, 13319, 13322, 13325, 13329, 13332, 13335, 13339, 13342, 13345, 13349, 13352, 13355, 13359, 13362, 13365, 13369, 13372, 13375, 13379, 13382, 13385, 13388, 13392, 13395, 13398, 13402, 13405, 13408, 13412, 13415, 13418, 13422, 13425, 13428, 13432, 13435, 13438, 13442, 13445, 13448, 13452, 13455, 13458, 13462, 13465, 13468, 13472, 13475, 13478, 13482, 13485, 13488, 13491, 13495, 13498, 13501, 13505, 13508, 13511, 13515, 13518, 13521, 13525, 13528, 13531, 13535, 13538, 13541, 13545, 13548, 13551, 13555, 13558, 13561, 13565, 13568, 13571, 13575, 13578, 13581, 13584, 13588, 13591, 13594, 13598, 13601, 13604, 13608, 13611, 13614, 13618, 13621, 13624, 13628, 13631, 13634, 13638, 13641, 13644, 13648, 13651, 13654, 13658, 13661, 13664, 13668, 13671, 13674, 13678, 13681, 13684, 13687, 13691, 13694, 13697, 13701, 13704, 13707, 13711, 13714, 13717, 13721, 13724, 13727, 13731, 13734, 13737, 13741, 13744, 13747, 13751, 13754, 13757, 13761, 13764, 13767, 13771, 13774, 13777, 13780, 13784, 13787, 13790, 13794, 13797, 13800, 13804, 13807, 13810, 13814, 13817, 13820, 13824, 13827, 13830, 13834, 13837, 13840, 13844, 13847, 13850, 13854, 13857, 13860, 13864, 13867, 13870, 13873, 13877, 13880, 13883, 13887, 13890, 13893, 13897, 13900, 13903, 13907, 13910, 13913, 13917, 13920, 13923, 13927, 13930, 13933, 13937, 13940, 13943, 13947, 13950, 13953, 13957, 13960, 13963, 13967, 13970, 13973, 13976, 13980, 13983, 13986, 13990, 13993, 13996, 14000, 14003, 14006, 14010, 14013, 14016, 14020, 14023, 14026, 14030, 14033, 14036, 14040, 14043, 14046, 14050, 14053, 14056, 14060, 14063, 14066, 14069, 14073, 14076, 14079, 14083, 14086, 14089, 14093, 14096, 14099, 14103, 14106, 14109, 14113, 14116, 14119, 14123, 14126, 14129, 14133, 14136, 14139, 14143, 14146, 14149, 14153, 14156, 14159, 14163, 14166, 14169, 14172, 14176, 14179, 14182, 14186, 14189, 14192, 14196, 14199, 14202, 14206, 14209, 14212, 14216, 14219, 14222, 14226, 14229, 14232, 14236, 14239, 14242, 14246, 14249, 14252, 14256, 14259, 14262, 14265, 14269, 14272, 14275, 14279, 14282, 14285, 14289, 14292, 14295, 14299, 14302, 14305, 14309, 14312, 14315, 14319, 14322, 14325, 14329, 14332, 14335, 14339, 14342, 14345, 14349, 14352, 14355, 14359, 14362, 14365, 14368, 14372, 14375, 14378, 14382, 14385, 14388, 14392, 14395, 14398, 14402, 14405, 14408, 14412, 14415, 14418, 14422, 14425, 14428, 14432, 14435, 14438, 14442, 14445, 14448, 14452, 14455, 14458, 14461, 14465, 14468, 14471, 14475, 14478, 14481, 14485, 14488, 14491, 14495, 14498, 14501, 14505, 14508, 14511, 14515, 14518, 14521, 14525, 14528, 14531, 14535, 14538, 14541, 14545, 14548, 14551, 14554, 14558, 14561, 14564, 14568, 14571, 14574, 14578, 14581, 14584, 14588, 14591, 14594, 14598, 14601, 14604, 14608, 14611, 14614, 14618, 14621, 14624, 14628, 14631, 14634, 14638, 14641, 14644, 14648, 14651, 14654, 14657, 14661, 14664, 14667, 14671, 14674, 14677, 14681, 14684, 14687, 14691, 14694, 14697, 14701, 14704, 14707, 14711, 14714, 14717, 14721, 14724, 14727, 14731, 14734, 14737, 14741, 14744, 14747, 14750, 14754, 14757, 14760, 14764, 14767, 14770, 14774, 14777, 14780, 14784, 14787, 14790, 14794, 14797, 14800, 14804, 14807, 14810, 14814, 14817, 14820, 14824, 14827, 14830, 14834, 14837, 14840, 14844, 14847, 14850, 14853, 14857, 14860, 14863, 14867, 14870, 14873, 14877, 14880, 14883, 14887, 14890, 14893, 14897, 14900, 14903, 14907, 14910, 14913, 14917, 14920, 14923, 14927, 14930, 14933, 14937, 14940, 14943, 14946, 14950, 14953, 14956, 14960, 14963, 14966, 14970, 14973, 14976, 14980, 14983, 14986, 14990, 14993, 14996, 15000, 15003, 15006, 15010, 15013, 15016, 15020, 15023, 15026, 15030, 15033, 15036, 15039, 15043, 15046, 15049, 15053, 15056, 15059, 15063, 15066, 15069, 15073, 15076, 15079, 15083, 15086, 15089, 15093, 15096, 15099, 15103, 15106, 15109, 15113, 15116, 15119, 15123, 15126, 15129, 15133, 15136, 15139, 15142, 15146, 15149, 15152, 15156, 15159, 15162, 15166, 15169, 15172, 15176, 15179, 15182, 15186, 15189, 15192, 15196, 15199, 15202, 15206, 15209, 15212, 15216, 15219, 15222, 15226, 15229, 15232, 15235, 15239, 15242, 15245, 15249, 15252, 15255, 15259, 15262, 15265, 15269, 15272, 15275, 15279, 15282, 15285, 15289, 15292, 15295, 15299, 15302, 15305, 15309, 15312, 15315, 15319, 15322, 15325, 15329, 15332, 15335, 15338, 15342, 15345, 15348, 15352, 15355, 15358, 15362, 15365, 15368, 15372, 15375, 15378, 15382, 15385, 15388, 15392, 15395, 15398, 15402, 15405, 15408, 15412, 15415, 15418, 15422, 15425, 15428, 15431, 15435, 15438, 15441, 15445, 15448, 15451, 15455, 15458, 15461, 15465, 15468, 15471, 15475, 15478, 15481, 15485, 15488, 15491, 15495, 15498, 15501, 15505, 15508, 15511, 15515, 15518, 15521, 15524, 15528, 15531, 15534, 15538, 15541, 15544, 15548, 15551, 15554, 15558, 15561, 15564, 15568, 15571, 15574, 15578, 15581, 15584, 15588, 15591, 15594, 15598, 15601, 15604, 15608, 15611, 15614, 15618, 15621, 15624, 15627, 15631, 15634, 15637, 15641, 15644, 15647, 15651, 15654, 15657, 15661, 15664, 15667, 15671, 15674, 15677, 15681, 15684, 15687, 15691, 15694, 15697, 15701, 15704, 15707, 15711, 15714, 15717, 15720, 15724, 15727, 15730, 15734, 15737, 15740, 15744, 15747, 15750, 15754, 15757, 15760, 15764, 15767, 15770, 15774, 15777, 15780, 15784, 15787, 15790, 15794, 15797, 15800, 15804, 15807, 15810, 15814, 15817, 15820, 15823, 15827, 15830, 15833, 15837, 15840, 15843, 15847, 15850, 15853, 15857, 15860, 15863, 15867, 15870, 15873, 15877, 15880, 15883, 15887, 15890, 15893, 15897, 15900, 15903, 15907, 15910, 15913, 15916, 15920, 15923, 15926, 15930, 15933, 15936, 15940, 15943, 15946, 15950, 15953, 15956, 15960, 15963, 15966, 15970, 15973, 15976, 15980, 15983, 15986, 15990, 15993, 15996, 16000, 16003, 16006, 16009, 16013, 16016, 16019, 16023, 16026, 16029, 16033, 16036, 16039, 16043, 16046, 16049, 16053, 16056, 16059, 16063, 16066, 16069, 16073, 16076, 16079, 16083, 16086, 16089, 16093, 16096, 16099, 16103, 16106, 16109, 16112, 16116, 16119, 16122, 16126, 16129, 16132, 16136, 16139, 16142, 16146, 16149, 16152, 16156, 16159, 16162, 16166, 16169, 16172, 16176, 16179, 16182, 16186, 16189, 16192, 16196, 16199, 16202, 16205, 16209, 16212, 16215, 16219, 16222, 16225, 16229, 16232, 16235, 16239, 16242, 16245, 16249, 16252, 16255, 16259, 16262, 16265, 16269, 16272, 16275, 16279, 16282, 16285, 16289, 16292, 16295, 16299, 16302, 16305, 16308, 16312, 16315, 16318, 16322, 16325, 16328, 16332, 16335, 16338, 16342, 16345, 16348, 16352, 16355, 16358, 16362, 16365, 16368, 16372, 16375, 16378, 16382, 16385, 16388, 16392, 16395, 16398, 16401, 16405, 16408, 16411, 16415, 16418, 16421, 16425, 16428, 16431, 16435, 16438, 16441, 16445, 16448, 16451, 16455, 16458, 16461, 16465, 16468, 16471, 16475, 16478, 16481, 16485, 16488, 16491, 16494, 16498, 16501, 16504, 16508, 16511, 16514, 16518, 16521, 16524, 16528, 16531, 16534, 16538, 16541, 16544, 16548, 16551, 16554, 16558, 16561, 16564, 16568, 16571, 16574, 16578, 16581, 16584, 16588, 16591, 16594, 16597, 16601, 16604, 16607, 16611, 16614, 16617, 16621, 16624, 16627, 16631, 16634, 16637, 16641, 16644, 16647, 16651, 16654, 16657, 16661, 16664, 16667, 16671, 16674, 16677, 16681, 16684, 16687, 16690, 16694, 16697, 16700, 16704, 16707, 16710, 16714, 16717, 16720, 16724, 16727, 16730, 16734, 16737, 16740, 16744, 16747, 16750, 16754, 16757, 16760, 16764, 16767, 16770, 16774, 16777, 16780, 16784, 16787, 16790, 16793, 16797, 16800, 16803, 16807, 16810, 16813, 16817, 16820, 16823, 16827, 16830, 16833, 16837, 16840, 16843, 16847, 16850, 16853, 16857, 16860, 16863, 16867, 16870, 16873, 16877, 16880, 16883, 16886, 16890, 16893, 16896, 16900, 16903, 16906, 16910, 16913, 16916, 16920, 16923, 16926, 16930, 16933, 16936, 16940, 16943, 16946, 16950, 16953, 16956, 16960, 16963, 16966, 16970, 16973, 16976, 16980, 16983, 16986, 16989, 16993, 16996, 16999, 17003, 17006, 17009, 17013, 17016, 17019, 17023, 17026, 17029, 17033, 17036, 17039, 17043, 17046, 17049, 17053, 17056, 17059, 17063, 17066, 17069, 17073, 17076, 17079, 17082, 17086, 17089, 17092, 17096, 17099, 17102, 17106, 17109, 17112, 17116, 17119, 17122, 17126, 17129, 17132, 17136, 17139, 17142, 17146, 17149, 17152, 17156, 17159, 17162, 17166, 17169, 17172, 17175, 17179, 17182, 17185, 17189, 17192, 17195, 17199, 17202, 17205, 17209, 17212, 17215, 17219, 17222, 17225, 17229, 17232, 17235, 17239, 17242, 17245, 17249, 17252, 17255, 17259, 17262, 17265, 17269, 17272, 17275, 17278, 17282, 17285, 17288, 17292, 17295, 17298, 17302, 17305, 17308, 17312, 17315, 17318, 17322, 17325, 17328, 17332, 17335, 17338, 17342, 17345, 17348, 17352, 17355, 17358, 17362, 17365, 17368, 17371, 17375, 17378, 17381, 17385, 17388, 17391, 17395, 17398, 17401, 17405, 17408, 17411, 17415, 17418, 17421, 17425, 17428, 17431, 17435, 17438, 17441, 17445, 17448, 17451, 17455, 17458, 17461, 17465, 17468, 17471, 17474, 17478, 17481, 17484, 17488, 17491, 17494, 17498, 17501, 17504, 17508, 17511, 17514, 17518, 17521, 17524, 17528, 17531, 17534, 17538, 17541, 17544, 17548, 17551, 17554, 17558, 17561, 17564, 17567, 17571, 17574, 17577, 17581, 17584, 17587, 17591, 17594, 17597, 17601, 17604, 17607, 17611, 17614, 17617, 17621, 17624, 17627, 17631, 17634, 17637, 17641, 17644, 17647, 17651, 17654, 17657, 17660, 17664, 17667, 17670, 17674, 17677, 17680, 17684, 17687, 17690, 17694, 17697, 17700, 17704, 17707, 17710, 17714, 17717, 17720, 17724, 17727, 17730, 17734, 17737, 17740, 17744, 17747, 17750, 17754, 17757, 17760, 17763, 17767, 17770, 17773, 17777, 17780, 17783, 17787, 17790, 17793, 17797, 17800, 17803, 17807, 17810, 17813, 17817, 17820, 17823, 17827, 17830, 17833, 17837, 17840, 17843, 17847, 17850, 17853, 17856, 17860, 17863, 17866, 17870, 17873, 17876, 17880, 17883, 17886, 17890, 17893, 17896, 17900, 17903, 17906, 17910, 17913, 17916, 17920, 17923, 17926, 17930, 17933, 17936, 17940, 17943, 17946, 17950, 17953, 17956, 17959, 17963, 17966, 17969, 17973, 17976, 17979, 17983, 17986, 17989, 17993, 17996, 17999, 18003, 18006, 18009, 18013, 18016, 18019, 18023, 18026, 18029, 18033, 18036, 18039, 18043, 18046, 18049, 18052, 18056, 18059, 18062, 18066, 18069, 18072, 18076, 18079, 18082, 18086, 18089, 18092, 18096, 18099, 18102, 18106, 18109, 18112, 18116, 18119, 18122, 18126, 18129, 18132, 18136, 18139, 18142, 18145, 18149, 18152, 18155, 18159, 18162, 18165, 18169, 18172, 18175, 18179, 18182, 18185, 18189, 18192, 18195, 18199, 18202, 18205, 18209, 18212, 18215, 18219, 18222, 18225, 18229, 18232, 18235, 18239, 18242, 18245, 18248, 18252, 18255, 18258, 18262, 18265, 18268, 18272, 18275, 18278, 18282, 18285, 18288, 18292, 18295, 18298, 18302, 18305, 18308, 18312, 18315, 18318, 18322, 18325, 18328, 18332, 18335, 18338, 18341, 18345, 18348, 18351, 18355, 18358, 18361, 18365, 18368, 18371, 18375, 18378, 18381, 18385, 18388, 18391, 18395, 18398, 18401, 18405, 18408, 18411, 18415, 18418, 18421, 18425, 18428, 18431, 18435, 18438, 18441, 18444, 18448, 18451, 18454, 18458, 18461, 18464, 18468, 18471, 18474, 18478, 18481, 18484, 18488, 18491, 18494, 18498, 18501, 18504, 18508, 18511, 18514, 18518, 18521, 18524, 18528, 18531, 18534, 18537, 18541, 18544, 18547, 18551, 18554, 18557, 18561, 18564, 18567, 18571, 18574, 18577, 18581, 18584, 18587, 18591, 18594, 18597, 18601, 18604, 18607, 18611, 18614, 18617, 18621, 18624, 18627, 18630, 18634, 18637, 18640, 18644, 18647, 18650, 18654, 18657, 18660, 18664, 18667, 18670, 18674, 18677, 18680, 18684, 18687, 18690, 18694, 18697, 18700, 18704, 18707, 18710, 18714, 18717, 18720, 18724, 18727, 18730, 18733, 18737, 18740, 18743, 18747, 18750, 18753, 18757, 18760, 18763, 18767, 18770, 18773, 18777, 18780, 18783, 18787, 18790, 18793, 18797, 18800, 18803, 18807, 18810, 18813, 18817, 18820, 18823, 18826, 18830, 18833, 18836, 18840, 18843, 18846, 18850, 18853, 18856, 18860, 18863, 18866, 18870, 18873, 18876, 18880, 18883, 18886, 18890, 18893, 18896, 18900, 18903, 18906, 18910, 18913, 18916, 18920, 18923, 18926, 18929, 18933, 18936, 18939, 18943, 18946, 18949, 18953, 18956, 18959, 18963, 18966, 18969, 18973, 18976, 18979, 18983, 18986, 18989, 18993, 18996, 18999, 19003, 19006, 19009, 19013, 19016, 19019, 19022, 19026, 19029, 19032, 19036, 19039, 19042, 19046, 19049, 19052, 19056, 19059, 19062, 19066, 19069, 19072, 19076, 19079, 19082, 19086, 19089, 19092, 19096, 19099, 19102, 19106, 19109, 19112, 19116, 19119, 19122, 19125, 19129, 19132, 19135, 19139, 19142, 19145, 19149, 19152, 19155, 19159, 19162, 19165, 19169, 19172, 19175, 19179, 19182, 19185, 19189, 19192, 19195, 19199, 19202, 19205, 19209, 19212, 19215, 19218, 19222, 19225, 19228, 19232, 19235, 19238, 19242, 19245, 19248, 19252, 19255, 19258, 19262, 19265, 19268, 19272, 19275, 19278, 19282, 19285, 19288, 19292, 19295, 19298, 19302, 19305, 19308, 19311, 19315, 19318, 19321, 19325, 19328, 19331, 19335, 19338, 19341, 19345, 19348, 19351, 19355, 19358, 19361, 19365, 19368, 19371, 19375, 19378, 19381, 19385, 19388, 19391, 19395, 19398, 19401, 19405, 19408, 19411, 19414, 19418, 19421, 19424, 19428, 19431, 19434, 19438, 19441, 19444, 19448, 19451, 19454, 19458, 19461, 19464, 19468, 19471, 19474, 19478, 19481, 19484, 19488, 19491, 19494, 19498, 19501, 19504, 19507, 19511, 19514, 19517, 19521, 19524, 19527, 19531, 19534, 19537, 19541, 19544, 19547, 19551, 19554, 19557, 19561, 19564, 19567, 19571, 19574, 19577, 19581, 19584, 19587, 19591, 19594, 19597, 19601, 19604, 19607, 19610, 19614, 19617, 19620, 19624, 19627, 19630, 19634, 19637, 19640, 19644, 19647, 19650, 19654, 19657, 19660, 19664, 19667, 19670, 19674, 19677, 19680, 19684, 19687, 19690, 19694, 19697, 19700, 19703, 19707, 19710, 19713, 19717, 19720, 19723, 19727, 19730, 19733, 19737, 19740, 19743, 19747, 19750, 19753, 19757, 19760, 19763, 19767, 19770, 19773, 19777, 19780, 19783, 19787, 19790, 19793, 19796, 19800, 19803, 19806, 19810, 19813, 19816, 19820, 19823, 19826, 19830, 19833, 19836, 19840, 19843, 19846, 19850, 19853, 19856, 19860, 19863, 19866, 19870, 19873, 19876, 19880, 19883, 19886, 19890, 19893, 19896, 19899, 19903, 19906, 19909, 19913, 19916, 19919, 19923, 19926, 19929, 19933, 19936, 19939, 19943, 19946, 19949, 19953, 19956, 19959, 19963, 19966, 19969, 19973, 19976, 19979, 19983, 19986, 19989, 19992, 19996, 19999, 20002, 20006, 20009, 20012, 20016, 20019, 20022, 20026, 20029, 20032, 20036, 20039, 20042, 20046, 20049, 20052, 20056, 20059, 20062, 20066, 20069, 20072, 20076, 20079, 20082, 20086, 20089, 20092, 20095, 20099, 20102, 20105, 20109, 20112, 20115, 20119, 20122, 20125, 20129, 20132, 20135, 20139, 20142, 20145, 20149, 20152, 20155, 20159, 20162, 20165, 20169, 20172, 20175, 20179, 20182, 20185, 20188, 20192, 20195, 20198, 20202, 20205, 20208, 20212, 20215, 20218, 20222, 20225, 20228, 20232, 20235, 20238, 20242, 20245, 20248, 20252, 20255, 20258, 20262, 20265, 20268, 20272, 20275, 20278, 20281, 20285, 20288, 20291, 20295, 20298, 20301, 20305, 20308, 20311, 20315, 20318, 20321, 20325, 20328, 20331, 20335, 20338, 20341, 20345, 20348, 20351, 20355, 20358, 20361, 20365, 20368, 20371, 20375, 20378, 20381, 20384, 20388, 20391, 20394, 20398, 20401, 20404, 20408, 20411, 20414, 20418, 20421, 20424, 20428, 20431, 20434, 20438, 20441, 20444, 20448, 20451, 20454, 20458, 20461, 20464, 20468, 20471, 20474, 20477, 20481, 20484, 20487, 20491, 20494, 20497, 20501, 20504, 20507, 20511, 20514, 20517, 20521, 20524, 20527, 20531, 20534, 20537, 20541, 20544, 20547, 20551, 20554, 20557, 20561, 20564, 20567, 20571, 20574, 20577, 20580, 20584, 20587, 20590, 20594, 20597, 20600, 20604, 20607, 20610, 20614, 20617, 20620, 20624, 20627, 20630, 20634, 20637, 20640, 20644, 20647, 20650, 20654, 20657, 20660, 20664, 20667, 20670, 20673, 20677, 20680, 20683, 20687, 20690, 20693, 20697, 20700, 20703, 20707, 20710, 20713, 20717, 20720, 20723, 20727, 20730, 20733, 20737, 20740, 20743, 20747, 20750, 20753, 20757, 20760, 20763, 20766, 20770, 20773, 20776, 20780, 20783, 20786, 20790, 20793, 20796, 20800, 20803, 20806, 20810, 20813, 20816, 20820, 20823, 20826, 20830, 20833, 20836, 20840, 20843, 20846, 20850, 20853, 20856, 20860, 20863, 20866, 20869, 20873, 20876, 20879, 20883, 20886, 20889, 20893, 20896, 20899, 20903, 20906, 20909, 20913, 20916, 20919, 20923, 20926, 20929, 20933, 20936, 20939, 20943, 20946, 20949, 20953, 20956, 20959, 20962, 20966, 20969, 20972, 20976, 20979, 20982, 20986, 20989, 20992, 20996, 20999, 21002, 21006, 21009, 21012, 21016, 21019, 21022, 21026, 21029, 21032, 21036, 21039, 21042, 21046, 21049, 21052, 21056, 21059, 21062, 21065, 21069, 21072, 21075, 21079, 21082, 21085, 21089, 21092, 21095, 21099, 21102, 21105, 21109, 21112, 21115, 21119, 21122, 21125, 21129, 21132, 21135, 21139, 21142, 21145, 21149, 21152, 21155, 21158, 21162, 21165, 21168, 21172, 21175, 21178, 21182, 21185, 21188, 21192, 21195, 21198, 21202, 21205, 21208, 21212, 21215, 21218, 21222, 21225, 21228, 21232, 21235, 21238, 21242, 21245, 21248, 21252, 21255, 21258, 21261, 21265, 21268, 21271, 21275, 21278, 21281, 21285, 21288, 21291, 21295, 21298, 21301, 21305, 21308, 21311, 21315, 21318, 21321, 21325, 21328, 21331, 21335, 21338, 21341, 21345, 21348, 21351, 21354, 21358, 21361, 21364, 21368, 21371, 21374, 21378, 21381, 21384, 21388, 21391, 21394, 21398, 21401, 21404, 21408, 21411, 21414, 21418, 21421, 21424, 21428, 21431, 21434, 21438, 21441, 21444, 21447, 21451, 21454, 21457, 21461, 21464, 21467, 21471, 21474, 21477, 21481, 21484, 21487, 21491, 21494, 21497, 21501, 21504, 21507, 21511, 21514, 21517, 21521, 21524, 21527, 21531, 21534, 21537, 21541, 21544, 21547, 21550, 21554, 21557, 21560, 21564, 21567, 21570, 21574, 21577, 21580, 21584, 21587, 21590, 21594, 21597, 21600, 21604, 21607, 21610, 21614, 21617, 21620, 21624, 21627, 21630, 21634, 21637, 21640, 21643, 21647, 21650, 21653, 21657, 21660, 21663, 21667, 21670, 21673, 21677, 21680, 21683, 21687, 21690, 21693, 21697, 21700, 21703, 21707, 21710, 21713, 21717, 21720, 21723, 21727, 21730, 21733, 21737, 21740, 21743, 21746, 21750, 21753, 21756, 21760, 21763, 21766, 21770, 21773, 21776, 21780, 21783, 21786, 21790, 21793, 21796, 21800, 21803, 21806, 21810, 21813, 21816, 21820, 21823, 21826, 21830, 21833, 21836, 21839, 21843, 21846, 21849, 21853, 21856, 21859, 21863, 21866, 21869, 21873, 21876, 21879, 21883, 21886, 21889, 21893, 21896, 21899, 21903, 21906, 21909, 21913, 21916, 21919, 21923, 21926, 21929, 21932, 21936, 21939, 21942, 21946, 21949, 21952, 21956, 21959, 21962, 21966, 21969, 21972, 21976, 21979, 21982, 21986, 21989, 21992, 21996, 21999, 22002, 22006, 22009, 22012, 22016, 22019, 22022, 22026, 22029, 22032, 22035, 22039, 22042, 22045, 22049, 22052, 22055, 22059, 22062, 22065, 22069, 22072, 22075, 22079, 22082, 22085, 22089, 22092, 22095, 22099, 22102, 22105, 22109, 22112, 22115, 22119, 22122, 22125, 22128, 22132, 22135, 22138, 22142, 22145, 22148, 22152, 22155, 22158, 22162, 22165, 22168, 22172, 22175, 22178, 22182, 22185, 22188, 22192, 22195, 22198, 22202, 22205, 22208, 22212, 22215, 22218, 22222, 22225, 22228, 22231, 22235, 22238, 22241, 22245, 22248, 22251, 22255, 22258, 22261, 22265, 22268, 22271, 22275, 22278, 22281, 22285, 22288, 22291, 22295, 22298, 22301, 22305, 22308, 22311, 22315, 22318, 22321, 22324, 22328, 22331, 22334, 22338, 22341, 22344, 22348, 22351, 22354, 22358, 22361, 22364, 22368, 22371, 22374, 22378, 22381, 22384, 22388, 22391, 22394, 22398, 22401, 22404, 22408, 22411, 22414, 22417, 22421, 22424, 22427, 22431, 22434, 22437, 22441, 22444, 22447, 22451, 22454, 22457, 22461, 22464, 22467, 22471, 22474, 22477, 22481, 22484, 22487, 22491, 22494, 22497, 22501, 22504, 22507, 22511, 22514, 22517, 22520, 22524, 22527, 22530, 22534, 22537, 22540, 22544, 22547, 22550, 22554, 22557, 22560, 22564, 22567, 22570, 22574, 22577, 22580, 22584, 22587, 22590, 22594, 22597, 22600, 22604, 22607, 22610, 22613, 22617, 22620, 22623, 22627, 22630, 22633, 22637, 22640, 22643, 22647, 22650, 22653, 22657, 22660, 22663, 22667, 22670, 22673, 22677, 22680, 22683, 22687, 22690, 22693, 22697, 22700, 22703, 22707, 22710, 22713, 22716, 22720, 22723, 22726, 22730, 22733, 22736, 22740, 22743, 22746, 22750, 22753, 22756, 22760, 22763, 22766, 22770, 22773, 22776, 22780, 22783, 22786, 22790, 22793, 22796, 22800, 22803, 22806, 22809, 22813, 22816, 22819, 22823, 22826, 22829, 22833, 22836, 22839, 22843, 22846, 22849, 22853, 22856, 22859, 22863, 22866, 22869, 22873, 22876, 22879, 22883, 22886, 22889, 22893, 22896, 22899, 22902, 22906, 22909, 22912, 22916, 22919, 22922, 22926, 22929, 22932, 22936, 22939, 22942, 22946, 22949, 22952, 22956, 22959, 22962, 22966, 22969, 22972, 22976, 22979, 22982, 22986, 22989, 22992, 22996, 22999, 23002, 23005, 23009, 23012, 23015, 23019, 23022, 23025, 23029, 23032, 23035, 23039, 23042, 23045, 23049, 23052, 23055, 23059, 23062, 23065, 23069, 23072, 23075, 23079, 23082, 23085, 23089, 23092, 23095, 23098, 23102, 23105, 23108, 23112, 23115, 23118, 23122, 23125, 23128, 23132, 23135, 23138, 23142, 23145, 23148, 23152, 23155, 23158, 23162, 23165, 23168, 23172, 23175, 23178, 23182, 23185, 23188, 23192, 23195, 23198, 23201, 23205, 23208, 23211, 23215, 23218, 23221, 23225, 23228, 23231, 23235, 23238, 23241, 23245, 23248, 23251, 23255, 23258, 23261, 23265, 23268, 23271, 23275, 23278, 23281, 23285, 23288, 23291, 23294, 23298, 23301, 23304, 23308, 23311, 23314, 23318, 23321, 23324, 23328, 23331, 23334, 23338, 23341, 23344, 23348, 23351, 23354, 23358, 23361, 23364, 23368, 23371, 23374, 23378, 23381, 23384, 23388, 23391, 23394, 23397, 23401, 23404, 23407, 23411, 23414, 23417, 23421, 23424, 23427, 23431, 23434, 23437, 23441, 23444, 23447, 23451, 23454, 23457, 23461, 23464, 23467, 23471, 23474, 23477, 23481, 23484, 23487, 23490, 23494, 23497, 23500, 23504, 23507, 23510, 23514, 23517, 23520, 23524, 23527, 23530, 23534, 23537, 23540, 23544, 23547, 23550, 23554, 23557, 23560, 23564, 23567, 23570, 23574, 23577, 23580, 23583, 23587, 23590, 23593, 23597, 23600, 23603, 23607, 23610, 23613, 23617, 23620, 23623, 23627, 23630, 23633, 23637, 23640, 23643, 23647, 23650, 23653, 23657, 23660, 23663, 23667, 23670, 23673, 23677, 23680, 23683, 23686, 23690, 23693, 23696, 23700, 23703, 23706, 23710, 23713, 23716, 23720, 23723, 23726, 23730, 23733, 23736, 23740, 23743, 23746, 23750, 23753, 23756, 23760, 23763, 23766, 23770, 23773, 23776, 23779, 23783, 23786, 23789, 23793, 23796, 23799, 23803, 23806, 23809, 23813, 23816, 23819, 23823, 23826, 23829, 23833, 23836, 23839, 23843, 23846, 23849, 23853, 23856, 23859, 23863, 23866, 23869, 23873, 23876, 23879, 23882, 23886, 23889, 23892, 23896, 23899, 23902, 23906, 23909, 23912, 23916, 23919, 23922, 23926, 23929, 23932, 23936, 23939, 23942, 23946, 23949, 23952, 23956, 23959, 23962, 23966, 23969, 23972, 23975, 23979, 23982, 23985, 23989, 23992, 23995, 23999, 24002, 24005, 24009, 24012, 24015, 24019, 24022, 24025, 24029, 24032, 24035, 24039, 24042, 24045, 24049, 24052, 24055, 24059, 24062, 24065, 24068, 24072, 24075, 24078, 24082, 24085, 24088, 24092, 24095, 24098, 24102, 24105, 24108, 24112, 24115, 24118, 24122, 24125, 24128, 24132, 24135, 24138, 24142, 24145, 24148, 24152, 24155, 24158, 24162, 24165, 24168, 24171, 24175, 24178, 24181, 24185, 24188, 24191, 24195, 24198, 24201, 24205, 24208, 24211, 24215, 24218, 24221, 24225, 24228, 24231, 24235, 24238, 24241, 24245, 24248, 24251, 24255, 24258, 24261, 24264, 24268, 24271, 24274, 24278, 24281, 24284, 24288, 24291, 24294, 24298, 24301, 24304, 24308, 24311, 24314, 24318, 24321, 24324, 24328, 24331, 24334, 24338, 24341, 24344, 24348, 24351, 24354, 24358, 24361, 24364, 24367, 24371, 24374, 24377, 24381, 24384, 24387, 24391, 24394, 24397, 24401, 24404, 24407, 24411, 24414, 24417, 24421, 24424, 24427, 24431, 24434, 24437, 24441, 24444, 24447, 24451, 24454, 24457, 24460, 24464, 24467, 24470, 24474, 24477, 24480, 24484, 24487, 24490, 24494, 24497, 24500, 24504, 24507, 24510, 24514, 24517, 24520, 24524, 24527, 24530, 24534, 24537, 24540, 24544, 24547, 24550, 24553, 24557, 24560, 24563, 24567, 24570, 24573, 24577, 24580, 24583, 24587, 24590, 24593, 24597, 24600, 24603, 24607, 24610, 24613, 24617, 24620, 24623, 24627, 24630, 24633, 24637, 24640, 24643, 24647, 24650, 24653, 24656, 24660, 24663, 24666, 24670, 24673, 24676, 24680, 24683, 24686, 24690, 24693, 24696, 24700, 24703, 24706, 24710, 24713, 24716, 24720, 24723, 24726, 24730, 24733, 24736, 24740, 24743, 24746, 24749, 24753, 24756, 24759, 24763, 24766, 24769, 24773, 24776, 24779, 24783, 24786, 24789, 24793, 24796, 24799, 24803, 24806, 24809, 24813, 24816, 24819, 24823, 24826, 24829, 24833, 24836, 24839, 24843, 24846, 24849, 24852, 24856, 24859, 24862, 24866, 24869, 24872, 24876, 24879, 24882, 24886, 24889, 24892, 24896, 24899, 24902, 24906, 24909, 24912, 24916, 24919, 24922, 24926, 24929, 24932, 24936, 24939, 24942, 24945, 24949, 24952, 24955, 24959, 24962, 24965, 24969, 24972, 24975, 24979, 24982, 24985, 24989, 24992, 24995, 24999, 25002, 25005, 25009, 25012, 25015, 25019, 25022, 25025, 25029, 25032, 25035, 25038, 25042, 25045, 25048, 25052, 25055, 25058, 25062, 25065, 25068, 25072, 25075, 25078, 25082, 25085, 25088, 25092, 25095, 25098, 25102, 25105, 25108, 25112, 25115, 25118, 25122, 25125, 25128, 25132, 25135, 25138, 25141, 25145, 25148, 25151, 25155, 25158, 25161, 25165, 25168, 25171, 25175, 25178, 25181, 25185, 25188, 25191, 25195, 25198, 25201, 25205, 25208, 25211, 25215, 25218, 25221, 25225, 25228, 25231, 25234, 25238, 25241, 25244, 25248, 25251, 25254, 25258, 25261, 25264, 25268, 25271, 25274, 25278, 25281, 25284, 25288, 25291, 25294, 25298, 25301, 25304, 25308, 25311, 25314, 25318, 25321, 25324, 25328, 25331, 25334, 25337, 25341, 25344, 25347, 25351, 25354, 25357, 25361, 25364, 25367, 25371, 25374, 25377, 25381, 25384, 25387, 25391, 25394, 25397, 25401, 25404, 25407, 25411, 25414, 25417, 25421, 25424, 25427, 25430, 25434, 25437, 25440, 25444, 25447, 25450, 25454, 25457, 25460, 25464, 25467, 25470, 25474, 25477, 25480, 25484, 25487, 25490, 25494, 25497, 25500, 25504, 25507, 25510, 25514, 25517, 25520, 25524, 25527, 25530, 25533, 25537, 25540, 25543, 25547, 25550, 25553, 25557, 25560, 25563, 25567, 25570, 25573, 25577, 25580, 25583, 25587, 25590, 25593, 25597, 25600, 25603, 25607, 25610, 25613, 25617, 25620, 25623, 25626, 25630, 25633, 25636, 25640, 25643, 25646, 25650, 25653, 25656, 25660, 25663, 25666, 25670, 25673, 25676, 25680, 25683, 25686, 25690, 25693, 25696, 25700, 25703, 25706, 25710, 25713, 25716, 25719, 25723, 25726, 25729, 25733, 25736, 25739, 25743, 25746, 25749, 25753, 25756, 25759, 25763, 25766, 25769, 25773, 25776, 25779, 25783, 25786, 25789, 25793, 25796, 25799, 25803, 25806, 25809, 25813, 25816, 25819, 25822, 25826, 25829, 25832, 25836, 25839, 25842, 25846, 25849, 25852, 25856, 25859, 25862, 25866, 25869, 25872, 25876, 25879, 25882, 25886, 25889, 25892, 25896, 25899, 25902, 25906, 25909, 25912, 25915, 25919, 25922, 25925, 25929, 25932, 25935, 25939, 25942, 25945, 25949, 25952, 25955, 25959, 25962, 25965, 25969, 25972, 25975, 25979, 25982, 25985, 25989, 25992, 25995, 25999, 26002, 26005, 26009, 26012, 26015, 26018, 26022, 26025, 26028, 26032, 26035, 26038, 26042, 26045, 26048, 26052, 26055, 26058, 26062, 26065, 26068, 26072, 26075, 26078, 26082, 26085, 26088, 26092, 26095, 26098, 26102, 26105, 26108, 26111, 26115, 26118, 26121, 26125, 26128, 26131, 26135, 26138, 26141, 26145, 26148, 26151, 26155, 26158, 26161, 26165, 26168, 26171, 26175, 26178, 26181, 26185, 26188, 26191, 26195, 26198, 26201, 26204, 26208, 26211, 26214, 26218, 26221, 26224, 26228, 26231, 26234, 26238, 26241, 26244, 26248, 26251, 26254, 26258, 26261, 26264, 26268, 26271, 26274, 26278, 26281, 26284, 26288, 26291, 26294, 26298, 26301, 26304, 26307, 26311, 26314, 26317, 26321, 26324, 26327, 26331, 26334, 26337, 26341, 26344, 26347, 26351, 26354, 26357, 26361, 26364, 26367, 26371, 26374, 26377, 26381, 26384, 26387, 26391, 26394, 26397, 26400, 26404, 26407, 26410, 26414, 26417, 26420, 26424, 26427, 26430, 26434, 26437, 26440, 26444, 26447, 26450, 26454, 26457, 26460, 26464, 26467, 26470, 26474, 26477, 26480, 26484, 26487, 26490, 26494, 26497, 26500, 26503, 26507, 26510, 26513, 26517, 26520, 26523, 26527, 26530, 26533, 26537, 26540, 26543, 26547, 26550, 26553, 26557, 26560, 26563, 26567, 26570, 26573, 26577, 26580, 26583, 26587, 26590, 26593, 26596, 26600, 26603, 26606, 26610, 26613, 26616, 26620, 26623, 26626, 26630, 26633, 26636, 26640, 26643, 26646, 26650, 26653, 26656, 26660, 26663, 26666, 26670, 26673, 26676, 26680, 26683, 26686, 26689, 26693, 26696, 26699, 26703, 26706, 26709, 26713, 26716, 26719, 26723, 26726, 26729, 26733, 26736, 26739, 26743, 26746, 26749, 26753, 26756, 26759, 26763, 26766, 26769, 26773, 26776, 26779, 26783, 26786, 26789, 26792, 26796, 26799, 26802, 26806, 26809, 26812, 26816, 26819, 26822, 26826, 26829, 26832, 26836, 26839, 26842, 26846, 26849, 26852, 26856, 26859, 26862, 26866, 26869, 26872, 26876, 26879, 26882, 26885, 26889, 26892, 26895, 26899, 26902, 26905, 26909, 26912, 26915, 26919, 26922, 26925, 26929, 26932, 26935, 26939, 26942, 26945, 26949, 26952, 26955, 26959, 26962, 26965, 26969, 26972, 26975, 26979, 26982, 26985, 26988, 26992, 26995, 26998, 27002, 27005, 27008, 27012, 27015, 27018, 27022, 27025, 27028, 27032, 27035, 27038, 27042, 27045, 27048, 27052, 27055, 27058, 27062, 27065, 27068, 27072, 27075, 27078, 27081, 27085, 27088, 27091, 27095, 27098, 27101, 27105, 27108, 27111, 27115, 27118, 27121, 27125, 27128, 27131, 27135, 27138, 27141, 27145, 27148, 27151, 27155, 27158, 27161, 27165, 27168, 27171, 27174, 27178, 27181, 27184, 27188, 27191, 27194, 27198, 27201, 27204, 27208, 27211, 27214, 27218, 27221, 27224, 27228, 27231, 27234, 27238, 27241, 27244, 27248, 27251, 27254, 27258, 27261, 27264, 27268, 27271, 27274, 27277, 27281, 27284, 27287, 27291, 27294, 27297, 27301, 27304, 27307, 27311, 27314, 27317, 27321, 27324, 27327, 27331, 27334, 27337, 27341, 27344, 27347, 27351, 27354, 27357, 27361, 27364, 27367, 27370, 27374, 27377, 27380, 27384, 27387, 27390, 27394, 27397, 27400, 27404, 27407, 27410, 27414, 27417, 27420, 27424, 27427, 27430, 27434, 27437, 27440, 27444, 27447, 27450, 27454, 27457, 27460, 27464, 27467, 27470, 27473, 27477, 27480, 27483, 27487, 27490, 27493, 27497, 27500, 27503, 27507, 27510, 27513, 27517, 27520, 27523, 27527, 27530, 27533, 27537, 27540, 27543, 27547, 27550, 27553, 27557, 27560, 27563, 27566, 27570, 27573, 27576, 27580, 27583, 27586, 27590, 27593, 27596, 27600, 27603, 27606, 27610, 27613, 27616, 27620, 27623, 27626, 27630, 27633, 27636, 27640, 27643, 27646, 27650, 27653, 27656, 27660, 27663, 27666, 27669, 27673, 27676, 27679, 27683, 27686, 27689, 27693, 27696, 27699, 27703, 27706, 27709, 27713, 27716, 27719, 27723, 27726, 27729, 27733, 27736, 27739, 27743, 27746, 27749, 27753, 27756, 27759, 27762, 27766, 27769, 27772, 27776, 27779, 27782, 27786, 27789, 27792, 27796, 27799, 27802, 27806, 27809, 27812, 27816, 27819, 27822, 27826, 27829, 27832, 27836, 27839, 27842, 27846, 27849, 27852, 27855, 27859, 27862, 27865, 27869, 27872, 27875, 27879, 27882, 27885, 27889, 27892, 27895, 27899, 27902, 27905, 27909, 27912, 27915, 27919, 27922, 27925, 27929, 27932, 27935, 27939, 27942, 27945, 27949, 27952, 27955, 27958, 27962, 27965, 27968, 27972, 27975, 27978, 27982, 27985, 27988, 27992, 27995, 27998, 28002, 28005, 28008, 28012, 28015, 28018, 28022, 28025, 28028, 28032, 28035, 28038, 28042, 28045, 28048, 28051, 28055, 28058, 28061, 28065, 28068, 28071, 28075, 28078, 28081, 28085, 28088, 28091, 28095, 28098, 28101, 28105, 28108, 28111, 28115, 28118, 28121, 28125, 28128, 28131, 28135, 28138, 28141, 28145, 28148, 28151, 28154, 28158, 28161, 28164, 28168, 28171, 28174, 28178, 28181, 28184, 28188, 28191, 28194, 28198, 28201, 28204, 28208, 28211, 28214, 28218, 28221, 28224, 28228, 28231, 28234, 28238, 28241, 28244, 28247, 28251, 28254, 28257, 28261, 28264, 28267, 28271, 28274, 28277, 28281, 28284, 28287, 28291, 28294, 28297, 28301, 28304, 28307, 28311, 28314, 28317, 28321, 28324, 28327, 28331, 28334, 28337, 28340, 28344, 28347, 28350, 28354, 28357, 28360, 28364, 28367, 28370, 28374, 28377, 28380, 28384, 28387, 28390, 28394, 28397, 28400, 28404, 28407, 28410, 28414, 28417, 28420, 28424, 28427, 28430, 28434, 28437, 28440, 28443, 28447, 28450, 28453, 28457, 28460, 28463, 28467, 28470, 28473, 28477, 28480, 28483, 28487, 28490, 28493, 28497, 28500, 28503, 28507, 28510, 28513, 28517, 28520, 28523, 28527, 28530, 28533, 28536, 28540, 28543, 28546, 28550, 28553, 28556, 28560, 28563, 28566, 28570, 28573, 28576, 28580, 28583, 28586, 28590, 28593, 28596, 28600, 28603, 28606, 28610, 28613, 28616, 28620, 28623, 28626, 28630, 28633, 28636, 28639, 28643, 28646, 28649, 28653, 28656, 28659, 28663, 28666, 28669, 28673, 28676, 28679, 28683, 28686, 28689, 28693, 28696, 28699, 28703, 28706, 28709, 28713, 28716, 28719, 28723, 28726, 28729, 28732, 28736, 28739, 28742, 28746, 28749, 28752, 28756, 28759, 28762, 28766, 28769, 28772, 28776, 28779, 28782, 28786, 28789, 28792, 28796, 28799, 28802, 28806, 28809, 28812, 28816, 28819, 28822, 28825, 28829, 28832, 28835, 28839, 28842, 28845, 28849, 28852, 28855, 28859, 28862, 28865, 28869, 28872, 28875, 28879, 28882, 28885, 28889, 28892, 28895, 28899, 28902, 28905, 28909, 28912, 28915, 28919, 28922, 28925, 28928, 28932, 28935, 28938, 28942, 28945, 28948, 28952, 28955, 28958, 28962, 28965, 28968, 28972, 28975, 28978, 28982, 28985, 28988, 28992, 28995, 28998, 29002, 29005, 29008, 29012, 29015, 29018, 29021, 29025, 29028, 29031, 29035, 29038, 29041, 29045, 29048, 29051, 29055, 29058, 29061, 29065, 29068, 29071, 29075, 29078, 29081, 29085, 29088, 29091, 29095, 29098, 29101, 29105, 29108, 29111, 29115, 29118, 29121, 29124, 29128, 29131, 29134, 29138, 29141, 29144, 29148, 29151, 29154, 29158, 29161, 29164, 29168, 29171, 29174, 29178, 29181, 29184, 29188, 29191, 29194, 29198, 29201, 29204, 29208, 29211, 29214, 29217, 29221, 29224, 29227, 29231, 29234, 29237, 29241, 29244, 29247, 29251, 29254, 29257, 29261, 29264, 29267, 29271, 29274, 29277, 29281, 29284, 29287, 29291, 29294, 29297, 29301, 29304, 29307, 29310, 29314, 29317, 29320, 29324, 29327, 29330, 29334, 29337, 29340, 29344, 29347, 29350, 29354, 29357, 29360, 29364, 29367, 29370, 29374, 29377, 29380, 29384, 29387, 29390, 29394, 29397, 29400, 29404, 29407, 29410, 29413, 29417, 29420, 29423, 29427, 29430, 29433, 29437, 29440, 29443, 29447, 29450, 29453, 29457, 29460, 29463, 29467, 29470, 29473, 29477, 29480, 29483, 29487, 29490, 29493, 29497, 29500, 29503, 29506, 29510, 29513, 29516, 29520, 29523, 29526, 29530, 29533, 29536, 29540, 29543, 29546, 29550, 29553, 29556, 29560, 29563, 29566, 29570, 29573, 29576, 29580, 29583, 29586, 29590, 29593, 29596, 29600, 29603, 29606, 29609, 29613, 29616, 29619, 29623, 29626, 29629, 29633, 29636, 29639, 29643, 29646, 29649, 29653, 29656, 29659, 29663, 29666, 29669, 29673, 29676, 29679, 29683, 29686, 29689, 29693, 29696, 29699, 29702, 29706, 29709, 29712, 29716, 29719, 29722, 29726, 29729, 29732, 29736, 29739, 29742, 29746, 29749, 29752, 29756, 29759, 29762, 29766, 29769, 29772, 29776, 29779, 29782, 29786, 29789, 29792, 29796, 29799, 29802, 29805, 29809, 29812, 29815, 29819, 29822, 29825, 29829, 29832, 29835, 29839, 29842, 29845, 29849, 29852, 29855, 29859, 29862, 29865, 29869, 29872, 29875, 29879, 29882, 29885, 29889, 29892, 29895, 29898, 29902, 29905, 29908, 29912, 29915, 29918, 29922, 29925, 29928, 29932, 29935, 29938, 29942, 29945, 29948, 29952, 29955, 29958, 29962, 29965, 29968, 29972, 29975, 29978, 29982, 29985, 29988, 29991, 29995, 29998, 30001, 30005, 30008, 30011, 30015, 30018, 30021, 30025, 30028, 30031, 30035, 30038, 30041, 30045, 30048, 30051, 30055, 30058, 30061, 30065, 30068, 30071, 30075, 30078, 30081, 30085, 30088, 30091, 30094, 30098, 30101, 30104, 30108, 30111, 30114, 30118, 30121, 30124, 30128, 30131, 30134, 30138, 30141, 30144, 30148, 30151, 30154, 30158, 30161, 30164, 30168, 30171, 30174, 30178, 30181, 30184, 30187, 30191, 30194, 30197, 30201, 30204, 30207, 30211, 30214, 30217, 30221, 30224, 30227, 30231, 30234, 30237, 30241, 30244, 30247, 30251, 30254, 30257, 30261, 30264, 30267, 30271, 30274, 30277, 30281, 30284, 30287, 30290, 30294, 30297, 30300, 30304, 30307, 30310, 30314, 30317, 30320, 30324, 30327, 30330, 30334, 30337, 30340, 30344, 30347, 30350, 30354, 30357, 30360, 30364, 30367, 30370, 30374, 30377, 30380, 30383, 30387, 30390, 30393, 30397, 30400, 30403, 30407, 30410, 30413, 30417, 30420, 30423, 30427, 30430, 30433, 30437, 30440, 30443, 30447, 30450, 30453, 30457, 30460, 30463, 30467, 30470, 30473, 30476, 30480, 30483, 30486, 30490, 30493, 30496, 30500, 30503, 30506, 30510, 30513, 30516, 30520, 30523, 30526, 30530, 30533, 30536, 30540, 30543, 30546, 30550, 30553, 30556, 30560, 30563, 30566, 30570, 30573, 30576, 30579, 30583, 30586, 30589, 30593, 30596, 30599, 30603, 30606, 30609, 30613, 30616, 30619, 30623, 30626, 30629, 30633, 30636, 30639, 30643, 30646, 30649, 30653, 30656, 30659, 30663, 30666, 30669, 30672, 30676, 30679, 30682, 30686, 30689, 30692, 30696, 30699, 30702, 30706, 30709, 30712, 30716, 30719, 30722, 30726, 30729, 30732, 30736, 30739, 30742, 30746, 30749, 30752, 30756, 30759, 30762, 30766, 30769, 30772, 30775, 30779, 30782, 30785, 30789, 30792, 30795, 30799, 30802, 30805, 30809, 30812, 30815, 30819, 30822, 30825, 30829, 30832, 30835, 30839, 30842, 30845, 30849, 30852, 30855, 30859, 30862, 30865, 30868, 30872, 30875, 30878, 30882, 30885, 30888, 30892, 30895, 30898, 30902, 30905, 30908, 30912, 30915, 30918, 30922, 30925, 30928, 30932, 30935, 30938, 30942, 30945, 30948, 30952, 30955, 30958, 30961, 30965, 30968, 30971, 30975, 30978, 30981, 30985, 30988, 30991, 30995, 30998, 31001, 31005, 31008, 31011, 31015, 31018, 31021, 31025, 31028, 31031, 31035, 31038, 31041, 31045, 31048, 31051, 31055, 31058, 31061, 31064, 31068, 31071, 31074, 31078, 31081, 31084, 31088, 31091, 31094, 31098, 31101, 31104, 31108, 31111, 31114, 31118, 31121, 31124, 31128, 31131, 31134, 31138, 31141, 31144, 31148, 31151, 31154, 31157, 31161, 31164, 31167, 31171, 31174, 31177, 31181, 31184, 31187, 31191, 31194, 31197, 31201, 31204, 31207, 31211, 31214, 31217, 31221, 31224, 31227, 31231, 31234, 31237, 31241, 31244, 31247, 31251, 31254, 31257, 31260, 31264, 31267, 31270, 31274, 31277, 31280, 31284, 31287, 31290, 31294, 31297, 31300, 31304, 31307, 31310, 31314, 31317, 31320, 31324, 31327, 31330, 31334, 31337, 31340, 31344, 31347, 31350, 31353, 31357, 31360, 31363, 31367, 31370, 31373, 31377, 31380, 31383, 31387, 31390, 31393, 31397, 31400, 31403, 31407, 31410, 31413, 31417, 31420, 31423, 31427, 31430, 31433, 31437, 31440, 31443, 31446, 31450, 31453, 31456, 31460, 31463, 31466, 31470, 31473, 31476, 31480, 31483, 31486, 31490, 31493, 31496, 31500, 31503, 31506, 31510, 31513, 31516, 31520, 31523, 31526, 31530, 31533, 31536, 31540, 31543, 31546, 31549, 31553, 31556, 31559, 31563, 31566, 31569, 31573, 31576, 31579, 31583, 31586, 31589, 31593, 31596, 31599, 31603, 31606, 31609, 31613, 31616, 31619, 31623, 31626, 31629, 31633, 31636, 31639, 31642, 31646, 31649, 31652, 31656, 31659, 31662, 31666, 31669, 31672, 31676, 31679, 31682, 31686, 31689, 31692, 31696, 31699, 31702, 31706, 31709, 31712, 31716, 31719, 31722, 31726, 31729, 31732, 31736, 31739, 31742, 31745, 31749, 31752, 31755, 31759, 31762, 31765, 31769, 31772, 31775, 31779, 31782, 31785, 31789, 31792, 31795, 31799, 31802, 31805, 31809, 31812, 31815, 31819, 31822, 31825, 31829, 31832, 31835, 31838, 31842, 31845, 31848, 31852, 31855, 31858, 31862, 31865, 31868, 31872, 31875, 31878, 31882, 31885, 31888, 31892, 31895, 31898, 31902, 31905, 31908, 31912, 31915, 31918, 31922, 31925, 31928, 31931, 31935, 31938, 31941, 31945, 31948, 31951, 31955, 31958, 31961, 31965, 31968, 31971, 31975, 31978, 31981, 31985, 31988, 31991, 31995, 31998, 32001, 32005, 32008, 32011, 32015, 32018, 32021, 32025, 32028, 32031, 32034, 32038, 32041, 32044, 32048, 32051, 32054, 32058, 32061, 32064, 32068, 32071, 32074, 32078, 32081, 32084, 32088, 32091, 32094, 32098, 32101, 32104, 32108, 32111, 32114, 32118, 32121, 32124, 32127, 32131, 32134, 32137, 32141, 32144, 32147, 32151, 32154, 32157, 32161, 32164, 32167, 32171, 32174, 32177, 32181, 32184, 32187, 32191, 32194, 32197, 32201, 32204, 32207, 32211, 32214, 32217, 32221, 32224, 32227, 32230, 32234, 32237, 32240, 32244, 32247, 32250, 32254, 32257, 32260, 32264, 32267, 32270, 32274, 32277, 32280, 32284, 32287, 32290, 32294, 32297, 32300, 32304, 32307, 32310, 32314, 32317, 32320, 32323, 32327, 32330, 32333, 32337, 32340, 32343, 32347, 32350, 32353, 32357, 32360, 32363, 32367, 32370, 32373, 32377, 32380, 32383, 32387, 32390, 32393, 32397, 32400, 32403, 32407, 32410, 32413, 32417, 32420, 32423, 32426, 32430, 32433, 32436, 32440, 32443, 32446, 32450, 32453, 32456, 32460, 32463, 32466, 32470, 32473, 32476, 32480, 32483, 32486, 32490, 32493, 32496, 32500, 32503, 32506, 32510, 32513, 32516, 32519, 32523, 32526, 32529, 32533, 32536, 32539, 32543, 32546, 32549, 32553, 32556, 32559, 32563, 32566, 32569, 32573, 32576, 32579, 32583, 32586, 32589, 32593, 32596, 32599, 32603, 32606, 32609, 32612, 32616, 32619, 32622, 32626, 32629, 32632, 32636, 32639, 32642, 32646, 32649, 32652, 32656, 32659, 32662, 32666, 32669, 32672, 32676, 32679, 32682, 32686, 32689, 32692, 32696, 32699, 32702, 32706, 32709, 32712, 32715, 32719, 32722, 32725, 32729, 32732, 32735, 32739, 32742, 32745, 32749, 32752, 32755, 32759, 32762, 32765, 32769, 32772, 32775, 32779, 32782, 32785, 32789, 32792, 32795, 32799, 32802, 32805, 32808, 32812, 32815, 32818, 32822, 32825, 32828, 32832, 32835, 32838, 32842, 32845, 32848, 32852, 32855, 32858, 32862, 32865, 32868, 32872, 32875, 32878, 32882, }; static const UINT256 multipliers1_binary128[] = { {{15420861665977618167ull, 8795339322986628986ull, 11692172791063221495ull, 5916811177297135519ull}}, {{10052705045617246901ull, 6382488135305898329ull, 10003529970401638965ull, 7396013971621419399ull}}, {{17812155699579249073ull, 6294898093779880407ull, 13169735259142106209ull, 4622508732263387124ull}}, {{17653508606046673438ull, 12480308635652238413ull, 16462169073927632761ull, 5778135915329233905ull}}, {{8231827702276178085ull, 1765327739283134305ull, 6742653287127377240ull, 7222669894161542382ull}}, {{14901470646272610510ull, 2206659674103917881ull, 17651688645763997358ull, 9028337367701927977ull}}, {{2395890126279299713ull, 15214220351597112388ull, 4114776375961416492ull, 5642710854813704986ull}}, {{2994862657849124641ull, 571031365786838869ull, 14366842506806546424ull, 7053388568517131232ull}}, {{8355264340738793705ull, 713789207233548586ull, 17958553133508183030ull, 8816735710646414040ull}}, {{9833726231389133970ull, 14281176309803131578ull, 11224095708442614393ull, 5510459819154008775ull}}, {{3068785752381641654ull, 4016412331971750761ull, 9418433617125880088ull, 6888074773942510969ull}}, {{8447668208904439972ull, 5020515414964688451ull, 16384728039834738014ull, 8610093467428138711ull}}, {{2973949621351581031ull, 16972880189635093994ull, 17157984052537793114ull, 5381308417142586694ull}}, {{12940809063544252096ull, 11992728200189091684ull, 12224108028817465585ull, 6726635521428233368ull}}, {{16176011329430315120ull, 1155852194954200893ull, 15280135036021831982ull, 8408294401785291710ull}}, {{12415850090107640902ull, 14557465677128539270ull, 4938398379086257084ull, 5255184001115807319ull}}, {{6296440575779775320ull, 18196832096410674088ull, 1561311955430433451ull, 6568980001394759149ull}}, {{7870550719724719149ull, 18134354102085954706ull, 6563325962715429718ull, 8211225001743448936ull}}, {{9530780218255337373ull, 6722285295376333787ull, 4102078726697143574ull, 5132015626089655585ull}}, {{7301789254391783812ull, 17626228656075193042ull, 9739284426798817371ull, 6415019532612069481ull}}, {{18350608604844505572ull, 17421099801666603398ull, 16785791551925909618ull, 8018774415765086851ull}}, {{6857444359600428079ull, 15499873394469015028ull, 8185276710739999559ull, 5011734009853179282ull}}, {{8571805449500535098ull, 14763155724658880881ull, 1008223851570223641ull, 6264667512316474103ull}}, {{15326442830303056777ull, 4618886600541437389ull, 15095337869744943264ull, 7830834390395592628ull}}, {{11884869778153104438ull, 2886804125338398368ull, 211214131735813732ull, 4894271493997245393ull}}, {{14856087222691380547ull, 3608505156672997960ull, 4875703683097155069ull, 6117839367496556741ull}}, {{123364954654674068ull, 9122317464268635355ull, 10706315622298831740ull, 7647299209370695926ull}}, {{16218004161155028957ull, 14924820452022672904ull, 2079761245509381933ull, 4779562005856684954ull}}, {{1825761127734234580ull, 4820967509746177419ull, 11823073593741503225ull, 5974452507320856192ull}}, {{16117259464949956936ull, 10637895405610109677ull, 14778841992176879031ull, 7468065634151070240ull}}, {{12379130174807417037ull, 13566213656147400404ull, 9236776245110549394ull, 4667541021344418900ull}}, {{15473912718509271297ull, 7734395033329474697ull, 11545970306388186743ull, 5834426276680523625ull}}, {{5507332842854425409ull, 5056307773234455468ull, 597404827703069717ull, 7293032845850654532ull}}, {{6884166053568031761ull, 10932070734970457239ull, 746756034628837146ull, 9116291057313318165ull}}, {{11220132811121101707ull, 11444230227783923678ull, 2772565530856717168ull, 5697681910820823853ull}}, {{4801793977046601325ull, 14305287784729904598ull, 8077392931998284364ull, 7122102388526029816ull}}, {{15225614508163027464ull, 17881609730912380747ull, 10096741164997855455ull, 8902627985657537270ull}}, {{7210166058388198213ull, 18093535109461319823ull, 1698777209696271755ull, 5564142491035960794ull}}, {{4401021554557859863ull, 18005232868399261875ull, 11346843548975115502ull, 6955178113794950992ull}}, {{889590924769936924ull, 13283169048644301536ull, 14183554436218894378ull, 8693972642243688740ull}}, {{555994327981210578ull, 12913666673830076364ull, 18088093559491584794ull, 5433732901402305462ull}}, {{694992909976513222ull, 6918711305432819647ull, 13386744912509705185ull, 6792166126752881828ull}}, {{14703799192752805239ull, 13260075150218412462ull, 16733431140637131481ull, 8490207658441102285ull}}, {{4578188477043115371ull, 1370017941245425933ull, 12764237472111901128ull, 5306379786525688928ull}}, {{10334421614731282117ull, 1712522426556782416ull, 15955296840139876410ull, 6632974733157111160ull}}, {{12918027018414102647ull, 11364025070050753828ull, 1497376976465293896ull, 8291218416446388951ull}}, {{17297138923363589962ull, 7102515668781721142ull, 7853389637931890541ull, 5182011510278993094ull}}, {{12398051617349711645ull, 13489830604404539332ull, 593365010560087368ull, 6477514387848741368ull}}, {{15497564521687139556ull, 16862288255505674165ull, 741706263200109210ull, 8096892984810926710ull}}, {{11991820835268156175ull, 15150616178118434257ull, 14298624469782231968ull, 5060558115506829193ull}}, {{1154717988803031506ull, 491526148938491206ull, 4038222531945626249ull, 6325697644383536492ull}}, {{10666769522858565191ull, 5226093704600501911ull, 5047778164932032811ull, 7907122055479420615ull}}, {{13584259979427685100ull, 960465556161619742ull, 10072390380723602363ull, 4941951284674637884ull}}, {{7756952937429830567ull, 15035640000484188390ull, 12590487975904502953ull, 6177439105843297355ull}}, {{472819134932512401ull, 4959491945323071776ull, 11126423951453240788ull, 7721798882304121694ull}}, {{295511959332820251ull, 12323054502681695668ull, 2342328951230887588ull, 4826124301440076059ull}}, {{369389949166025313ull, 15403818128352119585ull, 16762969244320773197ull, 6032655376800095073ull}}, {{5073423454884919546ull, 5419714605157985769ull, 7118653500118802785ull, 7540819221000118842ull}}, {{14700104705371544476ull, 14916536674292210865ull, 9060844456001639644ull, 4713012013125074276ull}}, {{4540072826432266883ull, 198926769155711966ull, 11326055570002049556ull, 5891265016406342845ull}}, {{14898463069895109412ull, 248658461444639957ull, 322511407220398233ull, 7364081270507928557ull}}, {{4788020782086723053ull, 4922509095233187851ull, 5014825277452885695ull, 9205101588134910696ull}}, {{686669979590507956ull, 9994097212161824263ull, 3134265798408053559ull, 5753188492584319185ull}}, {{14693395529770298657ull, 7880935496774892424ull, 8529518266437454853ull, 7191485615730398981ull}}, {{18366744412212873321ull, 14462855389396003434ull, 15273583851474206470ull, 8989357019662998726ull}}, {{16090901276060433730ull, 4427598599945114242ull, 4934303888743991140ull, 5618348137289374204ull}}, {{10890254558220766354ull, 5534498249931392803ull, 6167879860929988925ull, 7022935171611717755ull}}, {{9001132179348570039ull, 11529808830841628908ull, 3098163807735098252ull, 8778668964514647194ull}}, {{14849079648947632082ull, 16429502556130793875ull, 6548038398261824311ull, 5486668102821654496ull}}, {{13949663542757152199ull, 15925192176736104440ull, 8185047997827280389ull, 6858335128527068120ull}}, {{17437079428446440248ull, 6071432165637966838ull, 10231309997284100487ull, 8572918910658835150ull}}, {{6286488624351637251ull, 10712174131164811130ull, 1782882729875174900ull, 5358074319161771969ull}}, {{17081482817294322372ull, 13390217663956013912ull, 6840289430771356529ull, 6697592898952214961ull}}, {{2905109447908351349ull, 2902714024662853679ull, 13162047806891583566ull, 8371991123690268701ull}}, {{8733222432583801449ull, 15649254320696447261ull, 10532122888520933680ull, 5232494452306417938ull}}, {{15528214059157139716ull, 1114823827161007460ull, 3941781573796391293ull, 6540618065383022423ull}}, {{963523500236873028ull, 6005215802378647230ull, 315540948818101212ull, 8175772581728778029ull}}, {{14437260242930209355ull, 12976631913341430326ull, 2503056102225007209ull, 5109857863580486268ull}}, {{8823203266807985885ull, 2385731836394624196ull, 3128820127781259012ull, 6387322329475607835ull}}, {{11029004083509982357ull, 2982164795493280245ull, 17746083215008737477ull, 7984152911844509793ull}}, {{9198970561407432925ull, 4169696006396994105ull, 4173772981739379067ull, 4990095569902818621ull}}, {{16110399220186679060ull, 600433989568854727ull, 9828902245601611738ull, 6237619462378523276ull}}, {{15526313006805960921ull, 9973914523815844217ull, 12286127807002014672ull, 7797024327973154095ull}}, {{2786416601612643720ull, 6233696577384902636ull, 14596358907017341026ull, 4873140204983221309ull}}, {{3483020752015804650ull, 17015492758585904103ull, 4410390578489512570ull, 6091425256229026637ull}}, {{18188833995301919524ull, 12045993911377604320ull, 10124674241539278617ull, 7614281570286283296ull}}, {{11368021247063699703ull, 611217166969920844ull, 6327921400962049136ull, 4758925981428927060ull}}, {{14210026558829624628ull, 764021458712401055ull, 7909901751202561420ull, 5948657476786158825ull}}, {{13150847180109642881ull, 955026823390501319ull, 14499063207430589679ull, 7435821845982698531ull}}, {{15136808515209608657ull, 7514420792260145180ull, 6756071495430424597ull, 4647388653739186582ull}}, {{474266570302459205ull, 14004712008752569380ull, 17668461406142806554ull, 5809235817173983227ull}}, {{592833212878074006ull, 8282517974085935917ull, 17473890739251120289ull, 7261544771467479034ull}}, {{5352727534524980412ull, 14964833486034807800ull, 12618991387209124553ull, 9076930964334348793ull}}, {{3345454709078112758ull, 2435491901130673019ull, 969340589364620990ull, 5673081852708967996ull}}, {{18016876441629804659ull, 12267736913268117081ull, 1211675736705776237ull, 7091352315886209995ull}}, {{8686037496755092111ull, 1499613086302982640ull, 15349652726164384009ull, 8864190394857762493ull}}, {{5428773435471932570ull, 12466473225007833910ull, 11899375963066433957ull, 5540118996786101558ull}}, {{16009338831194691520ull, 1748033475977628675ull, 5650847916978266639ull, 6925148745982626948ull}}, {{15399987520565976496ull, 16020099900254199556ull, 7063559896222833298ull, 8656435932478283685ull}}, {{401620163498959502ull, 14624248456086262627ull, 6720567944352964763ull, 5410272457798927303ull}}, {{14337083259655863090ull, 13668624551680440379ull, 3789023912013818050ull, 6762840572248659129ull}}, {{13309668056142440958ull, 7862408652745774666ull, 9347965908444660467ull, 8453550715310823911ull}}, {{12930228553516413503ull, 2608162398752415214ull, 12760007720418994648ull, 5283469197069264944ull}}, {{6939413655040741070ull, 3260202998440519018ull, 15950009650523743310ull, 6604336496336581180ull}}, {{17897639105655702146ull, 13298625784905424580ull, 1490767989445127521ull, 8255420620420726476ull}}, {{1962652404180038033ull, 1394112087924808507ull, 10155102030257980509ull, 5159637887762954047ull}}, {{16288373560507211254ull, 6354326128333398537ull, 8082191519395087732ull, 6449547359703692559ull}}, {{6525408895351850355ull, 7942907660416748172ull, 5491053380816471761ull, 8061934199629615699ull}}, {{13301752596449682280ull, 16493532333828937367ull, 1126065353796600898ull, 5038708874768509812ull}}, {{12015504727134714946ull, 11393543380431395901ull, 1407581692245751123ull, 6298386093460637265ull}}, {{1184322853636229970ull, 9630243207111856973ull, 6371163133734576808ull, 7872982616825796581ull}}, {{3046044792736337684ull, 6018902004444910608ull, 6287819967797804457ull, 4920614135516122863ull}}, {{3807555990920422104ull, 12135313523983526164ull, 3248088941319867667ull, 6150767669395153579ull}}, {{4759444988650527630ull, 10557455886552019801ull, 17895169231931998296ull, 7688459586743941973ull}}, {{14503868163975049529ull, 6598409929095012375ull, 13490323779171192887ull, 4805287241714963733ull}}, {{13518149186541424007ull, 3636326392941377565ull, 3027846668681827397ull, 6006609052143704667ull}}, {{3062628427894616297ull, 9157094009604109861ull, 17619866391134447958ull, 7508261315179630833ull}}, {{4219985776647829138ull, 1111497737575180759ull, 4094887466817948118ull, 4692663321987269271ull}}, {{663296202382398518ull, 10612744208823751757ull, 506923315095047243ull, 5865829152484086589ull}}, {{5440806271405386052ull, 8654244242602301792ull, 5245340162296196958ull, 7332286440605108236ull}}, {{6801007839256732564ull, 1594433266398101432ull, 6556675202870246198ull, 9165358050756385295ull}}, {{4250629899535457853ull, 14831578846780977107ull, 11015451029434985729ull, 5728348781722740809ull}}, {{701601355991934412ull, 4704415503194057672ull, 18380999805221120066ull, 7160435977153426011ull}}, {{877001694989918015ull, 15103891415847347898ull, 18364563738099012178ull, 8950544971441782514ull}}, {{5159812077796086663ull, 14051618153331980340ull, 16089538354739270515ull, 5594090607151114071ull}}, {{6449765097245108329ull, 12952836673237587521ull, 15500236924996700240ull, 6992613258938892589ull}}, {{12673892389983773315ull, 16191045841546984401ull, 5540238100963711588ull, 8740766573673615737ull}}, {{1003653716098776466ull, 896031614112089443ull, 14991863859170789503ull, 5462979108546009835ull}}, {{15089625200405634295ull, 14955097572922275515ull, 14128143805536098974ull, 6828723885682512294ull}}, {{14250345482079654964ull, 9470499929298068586ull, 8436807720065347910ull, 8535904857103140368ull}}, {{13518151944727172257ull, 1307376437383904962ull, 5273004825040842444ull, 5334940535689462730ull}}, {{7674317894054189513ull, 1634220546729881203ull, 15814628068155828863ull, 6668675669611828412ull}}, {{4981211349140348987ull, 15877833738694515216ull, 1321541011485234462ull, 8335844587014785516ull}}, {{3113257093212718117ull, 5311960068256684106ull, 10049335169033047347ull, 5209902866884240947ull}}, {{13114943403370673454ull, 2028264066893467228ull, 7949982942863921280ull, 6512378583605301184ull}}, {{16393679254213341818ull, 2535330083616834035ull, 9937478678579901600ull, 8140473229506626480ull}}, {{7940206524669644684ull, 1584581302260521272ull, 6210924174112438500ull, 5087795768441641550ull}}, {{9925258155837055855ull, 1980726627825651590ull, 16987027254495323933ull, 6359744710552051937ull}}, {{3183200657941544011ull, 7087594303209452392ull, 7398726012836991204ull, 7949680888190064922ull}}, {{1989500411213465007ull, 13653118476360683553ull, 9235889776450507406ull, 4968550555118790576ull}}, {{7098561532444219163ull, 7843026058596078633ull, 11544862220563134258ull, 6210688193898488220ull}}, {{13484887933982661857ull, 580410536390322483ull, 14431077775703917823ull, 7763360242373110275ull}}, {{6122211949525469709ull, 7280285612885033408ull, 6713580600601254687ull, 4852100151483193922ull}}, {{7652764936906837136ull, 4488670997678903856ull, 17615347787606344167ull, 6065125189353992402ull}}, {{9565956171133546420ull, 999152728671241916ull, 12795812697653154401ull, 7581406486692490503ull}}, {{15202094643813242321ull, 12153685501487995957ull, 14914911963674303356ull, 4738379054182806564ull}}, {{5167560249484389189ull, 15192106876859994947ull, 196895880883327579ull, 5922973817728508206ull}}, {{1847764293428098582ull, 14378447577647605780ull, 9469491887958935282ull, 7403717272160635257ull}}, {{10378224720247337422ull, 13598215754457141516ull, 17447647476042804311ull, 4627323295100397035ull}}, {{12972780900309171777ull, 12386083674644038991ull, 17197873326626117485ull, 5784154118875496294ull}}, {{11604290106959076817ull, 1647546538022885027ull, 12273969621427871049ull, 7230192648594370368ull}}, {{9893676615271458117ull, 6671119190955994188ull, 15342462026784838811ull, 9037740810742962960ull}}, {{15406919921399437132ull, 1863606485133802415ull, 9589038766740524257ull, 5648588006714351850ull}}, {{14646963883321908510ull, 6941194124844640923ull, 2762926421570879513ull, 7060735008392939813ull}}, {{13697018835724997734ull, 13288178674483189058ull, 8065344045390987295ull, 8825918760491174766ull}}, {{13172322790755511488ull, 15222640699193075017ull, 429154009941979155ull, 5516199225306984229ull}}, {{2630345433162225648ull, 14416614855563955868ull, 5148128530854861848ull, 6895249031633730286ull}}, {{3287931791452782059ull, 18020768569454944835ull, 15658532700423353118ull, 8619061289542162857ull}}, {{18195858434153846451ull, 6651294337481952617ull, 2869053910123513843ull, 5386913305963851786ull}}, {{8909764987410144352ull, 3702431903425052868ull, 12809689424509168112ull, 6733641632454814732ull}}, {{11137206234262680440ull, 4628039879281316085ull, 16012111780636460140ull, 8417052040568518415ull}}, {{9266596905627869227ull, 12115896961405598361ull, 16925098890538869443ull, 5260657525355324009ull}}, {{16194932150462224438ull, 10533185183329610047ull, 7321315557891423092ull, 6575821906694155012ull}}, {{15631979169650392643ull, 13166481479162012559ull, 9151644447364278865ull, 8219777383367693765ull}}, {{16687516008672577258ull, 1311521896835175993ull, 8025620788816368243ull, 5137360864604808603ull}}, {{7024336955558557860ull, 15474460426326133704ull, 5420339967593072399ull, 6421701080756010754ull}}, {{8780421194448197325ull, 14731389514480279226ull, 15998796996346116307ull, 8027126350945013442ull}}, {{10099449264957511233ull, 6901275437336480564ull, 14610934141143710596ull, 5016953969340633401ull}}, {{12624311581196889041ull, 8626594296670600705ull, 4428609621147474533ull, 6271192461675791752ull}}, {{1945331421213947589ull, 15394928889265638786ull, 5535762026434343166ull, 7838990577094739690ull}}, {{5827518156686105147ull, 5010144537363636337ull, 8071537284948852383ull, 4899369110684212306ull}}, {{11896083714285019338ull, 1650994653277157517ull, 866049569331289671ull, 6124211388355265383ull}}, {{1035046587574110460ull, 15898801371878610609ull, 14917620016946275800ull, 7655264235444081728ull}}, {{12176119163302288798ull, 9936750857424131630ull, 9323512510591422375ull, 4784540147152551080ull}}, {{5996776917273085189ull, 7809252553352776634ull, 11654390638239277969ull, 5980675183940688850ull}}, {{16719343183446132294ull, 14373251710118358696ull, 5344616260944321653ull, 7475843979925861063ull}}, {{10449589489653832684ull, 11289125328037668137ull, 10257914190731282889ull, 4672402487453663164ull}}, {{17673672880494678759ull, 276348604764921459ull, 12822392738414103612ull, 5840503109317078955ull}}, {{17480405082190960545ull, 345435755956151824ull, 11416304904590241611ull, 7300628886646348694ull}}, {{3403762279029149065ull, 14266852750227353493ull, 5047009093883026205ull, 9125786108307935868ull}}, {{4433194433606912118ull, 11222625978105789885ull, 12377752720531667186ull, 5703616317692459917ull}}, {{10153179060436028051ull, 4804910435777461548ull, 1637132845382420271ull, 7129520397115574897ull}}, {{12691473825545035063ull, 1394452026294439031ull, 6658102075155413243ull, 8911900496394468621ull}}, {{14849700168606728771ull, 17012433580929882058ull, 6467156806185827228ull, 5569937810246542888ull}}, {{9338753173903635155ull, 2818797902452800957ull, 8083946007732284036ull, 6962422262808178610ull}}, {{16285127485806931848ull, 3523497378066001196ull, 881560472810579237ull, 8703027828510223263ull}}, {{954832641774556597ull, 4508028870504944700ull, 7468504323147693879ull, 5439392392818889539ull}}, {{1193540802218195746ull, 1023350069703792971ull, 4723944385507229445ull, 6799240491023611924ull}}, {{15326984058054908395ull, 5890873605557129117ull, 5904930481884036806ull, 8499050613779514905ull}}, {{11885208045498011699ull, 17516854058755369410ull, 15219796597245992763ull, 5311906633612196815ull}}, {{5633138020017738816ull, 17284381555016823859ull, 14413059728130103050ull, 6639883292015246019ull}}, {{2429736506594785615ull, 12382104906916254016ull, 13404638641735240909ull, 8299854115019057524ull}}, {{1518585316621741010ull, 10044658576036352712ull, 17601271187939301376ull, 5187408821886910952ull}}, {{1898231645777176262ull, 12555823220045440890ull, 3554844911214575104ull, 6484261027358638691ull}}, {{11596161594076246136ull, 15694779025056801112ull, 18278614194300382592ull, 8105326284198298363ull}}, {{7247600996297653835ull, 9809236890660500695ull, 9118290862224045168ull, 5065828927623936477ull}}, {{4447815226944679390ull, 12261546113325625869ull, 16009549596207444364ull, 6332286159529920596ull}}, {{10171455052108237141ull, 15326932641657032336ull, 1565192921549753839ull, 7915357699412400746ull}}, {{6357159407567648213ull, 16496861928676727066ull, 5589931594395984053ull, 4947098562132750466ull}}, {{17169821296314336074ull, 6786019355563745120ull, 16210786529849755875ull, 6183873202665938082ull}}, {{3015532546683368477ull, 3870838176027293497ull, 11040111125457419036ull, 7729841503332422603ull}}, {{13413922887745575058ull, 11642645896871834243ull, 4594226444197192945ull, 4831150939582764127ull}}, {{12155717591254580919ull, 718249315807629092ull, 1131097036819103278ull, 6038938674478455159ull}}, {{15194646989068226148ull, 10121183681614312173ull, 15248929351306042809ull, 7548673343098068948ull}}, {{11802497377381335295ull, 17854954847077414868ull, 307208807711500947ull, 4717920839436293093ull}}, {{14753121721726669118ull, 17707007540419380681ull, 4995697028066764088ull, 5897401049295366366ull}}, {{4606344096876172686ull, 3687015351814674236ull, 15467993321938230919ull, 7371751311619207957ull}}, {{5757930121095215857ull, 18443827245050506507ull, 5499933597140624936ull, 9214689139524009947ull}}, {{1292863316470815959ull, 11527392028156566567ull, 1131615488999196633ull, 5759180712202506217ull}}, {{15451137200870683660ull, 574181979913544496ull, 6026205379676383696ull, 7198975890253132771ull}}, {{867177427378802959ull, 717727474891930621ull, 2921070706168091716ull, 8998719862816415964ull}}, {{2847828901325445802ull, 9671951708662232446ull, 11049041228209833130ull, 5624199914260259977ull}}, {{12783158163511583060ull, 2866567598973014749ull, 18422987553689679317ull, 7030249892825324971ull}}, {{2143889649107315113ull, 8194895517143656341ull, 18417048423684711242ull, 8787812366031656214ull}}, {{3645774039905765898ull, 9733495716642173117ull, 6898969246375556622ull, 5492382728769785134ull}}, {{9168903568309595276ull, 2943497608947940588ull, 17847083594824221586ull, 6865478410962231417ull}}, {{11461129460386994095ull, 12902744048039701543ull, 8473796438248113270ull, 8581848013702789272ull}}, {{14080734940382953166ull, 3452529011597425560ull, 5296122773905070794ull, 5363655008564243295ull}}, {{17600918675478691457ull, 13539033301351557758ull, 2008467448953950588ull, 6704568760705304119ull}}, {{12777776307493588513ull, 16923791626689447198ull, 16345642366474601947ull, 8380710950881630148ull}}, {{3374424173756104917ull, 8271526757467210547ull, 992654442191850409ull, 5237944344301018843ull}}, {{18053088272477294858ull, 14951094465261401087ull, 15075876108021976723ull, 6547430430376273553ull}}, {{17954674322169230668ull, 14077182063149363455ull, 5009787079745307192ull, 8184288037970341942ull}}, {{18139200478996851024ull, 8798238789468352159ull, 16966174980122980707ull, 5115180023731463713ull}}, {{18062314580318675876ull, 6386112468408052295ull, 7372660669871562172ull, 6393975029664329642ull}}, {{17966207206970956941ull, 7982640585510065369ull, 18439197874194228523ull, 7992468787080412052ull}}, {{4311350476715766232ull, 2683307356730096904ull, 2301126634516617019ull, 4995292991925257533ull}}, {{5389188095894707790ull, 17189192251194784842ull, 7488094311573159177ull, 6244116239906571916ull}}, {{15959857156723160545ull, 7651432258711317340ull, 9360117889466448972ull, 7805145299883214895ull}}, {{751538686097199533ull, 14005517198549349146ull, 12767602708557612463ull, 4878215812427009309ull}}, {{10162795394476275224ull, 12895210479759298528ull, 2124445330414851867ull, 6097769765533761637ull}}, {{12703494243095344030ull, 11507327081271735256ull, 7267242681445952738ull, 7622212206917202046ull}}, {{7939683901934590019ull, 11803765444222222439ull, 18377084731185884173ull, 4763882629323251278ull}}, {{5312918858990849620ull, 919648749995614337ull, 13747983877127579409ull, 5954853286654064098ull}}, {{11252834592165949928ull, 5761246955921905825ull, 7961607809554698453ull, 7443566608317580123ull}}, {{115492592462636849ull, 5906622356664885093ull, 2670161871757992581ull, 4652229130198487577ull}}, {{4756051759005683966ull, 11994963964258494270ull, 7949388358124878630ull, 5815286412748109471ull}}, {{15168436735611880765ull, 5770332918468342029ull, 5325049429228710384ull, 7269108015935136839ull}}, {{5125487864232687244ull, 7212916148085427537ull, 2044625768108500076ull, 9086385019918921049ull}}, {{14732644961213899288ull, 13731444629408168018ull, 12807106151136282307ull, 5678990637449325655ull}}, {{9192434164662598301ull, 12552619768332822119ull, 11397196670492964980ull, 7098738296811657069ull}}, {{6878856687400859973ull, 15690774710416027649ull, 411437782834042513ull, 8873422871014571337ull}}, {{15828500475694007243ull, 2889205166368935424ull, 11786363660339746331ull, 5545889294384107085ull}}, {{1338881520907957438ull, 17446564513243332993ull, 897896520142519201ull, 6932361617980133857ull}}, {{6285287919562334701ull, 7973147586272002529ull, 5734056668605536906ull, 8665452022475167321ull}}, {{15457519995794928948ull, 9594903259847389484ull, 15113000463946930326ull, 5415907514046979575ull}}, {{875155921034109569ull, 2770257037954461048ull, 14279564561506275004ull, 6769884392558724469ull}}, {{1093944901292636962ull, 3462821297443076310ull, 4014397646600680043ull, 8462355490698405587ull}}, {{14518773618590061813ull, 18305164375397780357ull, 203155519911731074ull, 5288972181686503492ull}}, {{4313408967955413554ull, 13658083432392449639ull, 253944399889663843ull, 6611215227108129365ull}}, {{780075191516879039ull, 12460918272063174145ull, 4929116518289467708ull, 8264019033885161706ull}}, {{12016762040766519159ull, 17011445956894259648ull, 7692383842358305221ull, 5165011896178226066ull}}, {{15020952550958148949ull, 7429249390835660848ull, 392107766093105719ull, 6456264870222782583ull}}, {{329446614988134570ull, 4674875720117188157ull, 14325192762898545861ull, 8070331087778478228ull}}, {{2511747143581278059ull, 5227640334286936550ull, 18176617513666366971ull, 5043956929861548892ull}}, {{12363055966331373381ull, 1922864399431282783ull, 4274027818373407098ull, 6304946162326936116ull}}, {{10842133939486828822ull, 11626952536143879287ull, 5342534772966758872ull, 7881182702908670145ull}}, {{13693862739820349870ull, 7266845335089924554ull, 14868299279172694055ull, 4925739189317918840ull}}, {{7893956387920661530ull, 4471870650435017789ull, 138630025256315953ull, 6157173986647398551ull}}, {{14479131503328214816ull, 10201524331471160140ull, 14008345586852558653ull, 7696467483309248188ull}}, {{18272829226434910068ull, 8681795716383169039ull, 17978588028637624966ull, 4810292177068280117ull}}, {{18229350514616249681ull, 1628872608624185491ull, 8638176980514867496ull, 6012865221335350147ull}}, {{18175002124842924197ull, 2036090760780231864ull, 6186035207216196466ull, 7516081526669187684ull}}, {{11359376328026827623ull, 5884242743915032819ull, 13089644041364898599ull, 4697550954168242302ull}}, {{9587534391606146625ull, 2743617411466403120ull, 7138683014851347441ull, 5871938692710302878ull}}, {{11984417989507683281ull, 8041207782760391804ull, 18146725805418960109ull, 7339923365887878597ull}}, {{14980522486884604101ull, 14663195746877877659ull, 8848349201491536424ull, 9174904207359848247ull}}, {{7056983545089183612ull, 9164497341798673537ull, 12447747278573292121ull, 5734315129599905154ull}}, {{13432915449788867418ull, 16067307695675729825ull, 6336312061361839343ull, 7167893911999881443ull}}, {{2956086256953920561ull, 15472448601167274378ull, 3308704058274911275ull, 8959867389999851804ull}}, {{6459239929023588255ull, 7364437366515852534ull, 11291312073276595355ull, 5599917118749907377ull}}, {{17297421948134261126ull, 4593860689717427763ull, 279082036313580482ull, 6999896398437384222ull}}, {{17010091416740438504ull, 14965697899001560512ull, 9572224582246751410ull, 8749870498046730277ull}}, {{10631307135462774065ull, 13965247205303363224ull, 8288483373117913583ull, 5468669061279206423ull}}, {{13289133919328467581ull, 12844872988201816126ull, 5748918197970004075ull, 6835836326599008029ull}}, {{7388045362305808668ull, 11444405216824882254ull, 11797833765889892998ull, 8544795408248760036ull}}, {{5842333013742514ull, 2541067242088163505ull, 16597018140535958932ull, 5340497130155475022ull}}, {{4618988934694566046ull, 3176334052610204381ull, 11522900638815172857ull, 6675621412694343778ull}}, {{10385422186795595462ull, 8582103584190143380ull, 5180253761664190263ull, 8344526765867929723ull}}, {{15714260903602022972ull, 12281343767759921468ull, 931815591826424962ull, 5215329228667456077ull}}, {{1196082055792977098ull, 6128307672845126028ull, 5776455508210419107ull, 6519161535834320096ull}}, {{1495102569741221373ull, 3048698572629019631ull, 7220569385263023884ull, 8148951919792900120ull}}, {{7851968133729345214ull, 11128808644747913077ull, 4512855865789389927ull, 5093094949870562575ull}}, {{14426646185589069422ull, 9299324787507503442ull, 1029383813809349505ull, 6366368687338203219ull}}, {{8809935695131560969ull, 16235842002811767207ull, 15121787822543850593ull, 7957960859172754023ull}}, {{12423738837098307462ull, 3229872224116272648ull, 16368646416730988477ull, 4973725536982971264ull}}, {{15529673546372884327ull, 8649026298572728714ull, 2014063947204183980ull, 6217156921228714081ull}}, {{10188719896111329601ull, 10811282873215910893ull, 7129265952432617879ull, 7771446151535892601ull}}, {{8673792944283274953ull, 13674580823401026164ull, 15985006266338855934ull, 4857153844709932875ull}}, {{10842241180354093691ull, 7869853992396506897ull, 15369571814496182014ull, 6071442305887416094ull}}, {{18164487493870005017ull, 613945453640857813ull, 9988592731265451710ull, 7589302882359270118ull}}, {{13658647692882447088ull, 14218773963807699845ull, 1631184438613519414ull, 4743314301474543824ull}}, {{3238251560820895148ull, 8550095417904848999ull, 2038980548266899268ull, 5929142876843179780ull}}, {{17882872506308282647ull, 10687619272381061248ull, 2548725685333624085ull, 7411428596053974725ull}}, {{11176795316442676654ull, 8985605054451857232ull, 3898796562547209005ull, 4632142872533734203ull}}, {{13970994145553345818ull, 15843692336492209444ull, 261809684756623352ull, 5790178590667167754ull}}, {{17463742681941682272ull, 1357871346905710189ull, 9550634142800554999ull, 7237723238333959692ull}}, {{7994620297144939128ull, 15532397238914301449ull, 11938292678500693748ull, 9047154047917449615ull}}, {{16525852731784056715ull, 484376237466662597ull, 14378961951704015449ull, 5654471279948406009ull}}, {{6822257859447907182ull, 5217156315260716151ull, 4138644384347855599ull, 7068089099935507512ull}}, {{3916136305882496073ull, 1909759375648507285ull, 5173305480434819499ull, 8835111374919384390ull}}, {{4753428200390253998ull, 17334500674276174717ull, 17068373980553925898ull, 5521944609324615243ull}}, {{10553471268915205401ull, 12444753805990442588ull, 16723781457265019469ull, 6902430761655769054ull}}, {{13191839086144006752ull, 1720884202205889523ull, 11681354784726498529ull, 8628038452069711318ull}}, {{5939056419626310268ull, 12604767672447150712ull, 2689160722026673676ull, 5392524032543569574ull}}, {{7423820524532887835ull, 15755959590558938390ull, 12584822939388117903ull, 6740655040679461967ull}}, {{56403618811333985ull, 15083263469771285084ull, 11119342655807759475ull, 8425818800849327459ull}}, {{9258624298611859549ull, 7121196659393359225ull, 4643746150666155720ull, 5266136750530829662ull}}, {{16184966391692212340ull, 8901495824241699031ull, 15028054725187470458ull, 6582670938163537077ull}}, {{15619521971187877521ull, 1903497743447347981ull, 4950010351202174361ull, 8228338672704421347ull}}, {{12068044241206117403ull, 12718901135723062248ull, 787913460287665023ull, 5142711670440263342ull}}, {{15085055301507646754ull, 11286940401226439906ull, 10208263862214357087ull, 6428389588050329177ull}}, {{9632947090029782634ull, 9496989483105661979ull, 17372015846195334263ull, 8035486985062911471ull}}, {{3714748922054920194ull, 12853147454582120593ull, 17775038931513165770ull, 5022179365664319669ull}}, {{9255122170996038147ull, 6843062281372874933ull, 8383740609109293501ull, 6277724207080399587ull}}, {{16180588732172435587ull, 13165513870143481570ull, 5867989742959228972ull, 7847155258850499484ull}}, {{14724553976035160146ull, 17451818205694451789ull, 12890865626204293915ull, 4904472036781562177ull}}, {{4570634414761786471ull, 17203086738690676833ull, 2278523977473203682ull, 6130590045976952722ull}}, {{10324979036879620992ull, 12280486386508570233ull, 12071527008696280411ull, 7663237557471190902ull}}, {{17982326944118232880ull, 5369460982354162443ull, 2933018362007787353ull, 4789523473419494314ull}}, {{17866222661720403196ull, 11323512246370090958ull, 12889644989364509999ull, 5986904341774367892ull}}, {{13109406290295728187ull, 9542704289535225794ull, 16112056236705637499ull, 7483630427217959865ull}}, {{12805064949862218021ull, 3658347171745822169ull, 3152506120299941581ull, 4677269017011224916ull}}, {{2171273132045608814ull, 9184619983109665616ull, 3940632650374926976ull, 5846586271264031145ull}}, {{2714091415057011018ull, 11480774978887082020ull, 9537476831396046624ull, 7308232839080038931ull}}, {{3392614268821263772ull, 14350968723608852525ull, 7310160020817670376ull, 9135291048850048664ull}}, {{4426226927226983810ull, 8969355452255532828ull, 4568850013011043985ull, 5709556905531280415ull}}, {{5532783659033729762ull, 15823380333746803939ull, 1099376497836417077ull, 7136946131914100519ull}}, {{2304293555364774299ull, 5944167361901341212ull, 15209278677577685059ull, 8921182664892625648ull}}, {{10663555508957759745ull, 1409261591974644305ull, 9505799173486053162ull, 5575739165557891030ull}}, {{17941130404624587585ull, 10984949026823081189ull, 2658876930002790644ull, 6969673956947363788ull}}, {{8591354950498570769ull, 13731186283528851487ull, 3323596162503488305ull, 8712092446184204735ull}}, {{12287125871702688587ull, 1664462399564450323ull, 8994776629205762047ull, 5445057778865127959ull}}, {{10747221321200972829ull, 15915636054737726616ull, 6631784768079814654ull, 6806322223581409949ull}}, {{13434026651501216037ull, 10671173031567382462ull, 12901416978527156222ull, 8507902779476762436ull}}, {{3784580638760872119ull, 2057797126302226135ull, 17286757648434248447ull, 5317439237172976522ull}}, {{119039780023702245ull, 16407304463159946381ull, 12385075023688034750ull, 6646799046466220653ull}}, {{4760485743457015710ull, 11285758542095157168ull, 1646285724327879726ull, 8308498808082775817ull}}, {{2975303589660634819ull, 2441913070382085326ull, 12558143623773394589ull, 5192811755051734885ull}}, {{12942501523930569331ull, 7664077356404994561ull, 1862621474434579524ull, 6491014693814668607ull}}, {{2343068849631047952ull, 9580096695506243202ull, 16163334898325388117ull, 8113768367268335758ull}}, {{6076104049446792874ull, 8293403443905095953ull, 5490398293025979669ull, 5071105229542709849ull}}, {{12206816080235878997ull, 14978440323308757845ull, 11474683884709862490ull, 6338881536928387311ull}}, {{1423462045012685034ull, 9499678367281171499ull, 9731668837459940209ull, 7923601921160484139ull}}, {{17030564842628785810ull, 17466514025619201946ull, 3776450014198768678ull, 4952251200725302587ull}}, {{12064834016431206455ull, 12609770495169226625ull, 108876499321072944ull, 6190314000906628234ull}}, {{1245984465256844356ull, 15762213118961533282ull, 9359467661006116988ull, 7737892501133285292ull}}, {{5390426309212915627ull, 628011162496182493ull, 15073039324983598926ull, 4836182813208303307ull}}, {{11349718904943532437ull, 10008385989975003924ull, 14229613137802110753ull, 6045228516510379134ull}}, {{14187148631179415547ull, 17122168505896142809ull, 8563644385397862633ull, 7556535645637973918ull}}, {{1949438866846052861ull, 3783826288544007400ull, 740591722446276242ull, 4722834778523733699ull}}, {{2436798583557566076ull, 13953154897534785058ull, 14760797708340009014ull, 5903543473154667123ull}}, {{12269370266301733403ull, 8218071585063705514ull, 13839311116997623364ull, 7379429341443333904ull}}, {{12280042434865971281ull, 14359666777519591754ull, 8649569448123514602ull, 4612143338402083690ull}}, {{6126681006727688293ull, 8726211435044713885ull, 1588589773299617445ull, 5765179173002604613ull}}, {{12270037276836998270ull, 15519450312233280260ull, 6597423235051909710ull, 7206473966253255766ull}}, {{15337546596046247838ull, 10175940853436824517ull, 17470151080669662946ull, 9008092457816569707ull}}, {{11891809631742598851ull, 10971649051825403227ull, 8613001416204845389ull, 5630057786135356067ull}}, {{10253076021250860659ull, 18326247333209141938ull, 6154565751828668832ull, 7037572232669195084ull}}, {{3592972989708800016ull, 4461065092801875807ull, 7693207189785836041ull, 8796965290836493855ull}}, {{9163137146209081866ull, 14317380729069642139ull, 11725783521257229381ull, 5498103306772808659ull}}, {{6842235414333964429ull, 4061667856054888962ull, 10045543383144148823ull, 6872629133466010824ull}}, {{17776166304772231344ull, 465398801641223298ull, 12556929228930186029ull, 8590786416832513530ull}}, {{15721789958910032494ull, 2596717260239458513ull, 12459766786508754172ull, 5369241510520320956ull}}, {{5817179393355376905ull, 3245896575299323142ull, 15574708483135942715ull, 6711551888150401195ull}}, {{16494846278548996939ull, 17892428774406317639ull, 14856699585492540489ull, 8389439860188001494ull}}, {{17226807951734204943ull, 4265238956362866668ull, 4673751222505449902ull, 5243399912617500934ull}}, {{3086765865958204563ull, 14554920732308359144ull, 15065561064986588185ull, 6554249890771876167ull}}, {{3858457332447755704ull, 4358592860103285218ull, 14220265312805847328ull, 8192812363464845209ull}}, {{7023221851207235219ull, 2724120537564553261ull, 1970136792862572724ull, 5120507727165528256ull}}, {{13390713332436431928ull, 3405150671955691576ull, 2462670991078215905ull, 6400634658956910320ull}}, {{16738391665545539909ull, 8868124358372002374ull, 3078338738847769881ull, 8000793323696137900ull}}, {{5849808772538574540ull, 17071792770050971244ull, 11147333748634631983ull, 5000495827310086187ull}}, {{7312260965673218174ull, 16728054944136326151ull, 9322481167365902075ull, 6250619784137607734ull}}, {{4528640188664134814ull, 16298382661743019785ull, 2429729422352601786ull, 7813274730172009668ull}}, {{14359615163983554019ull, 14798175182016775269ull, 10741952925825151924ull, 4883296706357506042ull}}, {{4114460899697278811ull, 50974903811417471ull, 4204069120426664098ull, 6104120882946882553ull}}, {{531390106194210610ull, 9287090666619047647ull, 9866772418960718026ull, 7630151103683603191ull}}, {{7249647844012463487ull, 10416117685064292683ull, 13084261789491530622ull, 4768844439802251994ull}}, {{4450373786588191455ull, 3796775069475590046ull, 7131955200009637470ull, 5961055549752814993ull}}, {{14786339270090015127ull, 13969340873699263365ull, 13526630018439434741ull, 7451319437191018741ull}}, {{11547305053019953406ull, 11036681055275733555ull, 10759986770738340665ull, 4657074648244386713ull}}, {{9822445297847553854ull, 18407537337522054848ull, 18061669481850313735ull, 5821343310305483391ull}}, {{12278056622309442317ull, 18397735653475180656ull, 17965400833885504265ull, 7276679137881854239ull}}, {{15347570777886802897ull, 9162111511561812108ull, 17845065023929492428ull, 9095848922352317799ull}}, {{368859699324476003ull, 14949691731580908376ull, 18070694667597014623ull, 5684905576470198624ull}}, {{461074624155595003ull, 14075428646048747566ull, 4141624260786716663ull, 7106131970587748281ull}}, {{9799715317049269562ull, 12982599789133546553ull, 9788716344410783733ull, 8882664963234685351ull}}, {{17654037119224263236ull, 10419967877422160547ull, 13035476742897821689ull, 5551665602021678344ull}}, {{17455860380602941141ull, 17636645865205088588ull, 16294345928622277111ull, 6939582002527097930ull}}, {{3373081402044124810ull, 17434121313078972832ull, 11144560373923070581ull, 8674477503158872413ull}}, {{2108175876277578007ull, 13202168829888051972ull, 9271193242915613065ull, 5421548439474295258ull}}, {{2635219845346972508ull, 2667652982077901253ull, 2365619516789740524ull, 6776935549342869073ull}}, {{7905710825111103539ull, 3334566227597376566ull, 7568710414414563559ull, 8471169436678586341ull}}, {{329383247267051808ull, 9001632919889442210ull, 7036287018222796176ull, 5294480897924116463ull}}, {{9635101095938590568ull, 11252041149861802762ull, 4183672754351107316ull, 6618101122405145579ull}}, {{2820504333068462402ull, 14065051437327253453ull, 617904924511496241ull, 8272626403006431974ull}}, {{4068658217381482953ull, 1873128120688451552ull, 14221248633101848863ull, 5170391501879019983ull}}, {{5085822771726853692ull, 16176468206142728152ull, 13164874772949923174ull, 6462989377348774979ull}}, {{6357278464658567114ull, 10997213220823634382ull, 11844407447760016064ull, 8078736721685968724ull}}, {{17808357095693768159ull, 6873258263014771488ull, 16626126691704785848ull, 5049210451053730452ull}}, {{3813702295907658582ull, 8591572828768464361ull, 2335914290921430694ull, 6311513063817163066ull}}, {{9378813888311961132ull, 1516093999105804643ull, 12143264900506564176ull, 7889391329771453832ull}}, {{3555915670981281755ull, 947558749441127902ull, 7589540562816602610ull, 4930869581107158645ull}}, {{13668266625581378002ull, 10407820473656185685ull, 14098611721948141166ull, 6163586976383948306ull}}, {{3250275226694558791ull, 3786403555215456299ull, 8399892615580400650ull, 7704483720479935383ull}}, {{18172323081179956908ull, 6978188240437048090ull, 12167461912378832262ull, 4815302325299959614ull}}, {{13492031814620170327ull, 17946107337401085921ull, 5985955353618764519ull, 6019127906624949518ull}}, {{3029981712993049197ull, 17820948153323969498ull, 16705816228878231457ull, 7523909883281186897ull}}, {{6505424589048043652ull, 4220563568186399080ull, 3523606115407812805ull, 4702443677050741811ull}}, {{8131780736310054565ull, 9887390478660386754ull, 18239565699541929718ull, 5878054596313427263ull}}, {{941353883532792398ull, 3135866061470707635ull, 18187771106000024244ull, 7347568245391784079ull}}, {{15011750409698154210ull, 3919832576838384543ull, 18123027864072642401ull, 9184460306739730099ull}}, {{16299873033702428237ull, 13979110406592460099ull, 9021049405831707548ull, 5740287691712331312ull}}, {{15763155273700647393ull, 17473888008240575124ull, 11276311757289634435ull, 7175359614640414140ull}}, {{1257200018416257625ull, 17230673991873331002ull, 14095389696612043044ull, 8969199518300517675ull}}, {{5397436029937548920ull, 1545799208066056068ull, 6503775551168832951ull, 5605749698937823547ull}}, {{6746795037421936149ull, 15767307065364733797ull, 3518033420533653284ull, 7007187123672279434ull}}, {{13045179815204808091ull, 1262389757996365630ull, 13620913812521842414ull, 8758983904590349292ull}}, {{3541551366075617153ull, 14624051654029892231ull, 17736443169680927316ull, 5474364940368968307ull}}, {{18261997262876685153ull, 18280064567537365288ull, 17558867943673771241ull, 6842956175461210384ull}}, {{4380752504886304825ull, 9015022654139542899ull, 3501840855882662436ull, 8553695219326512981ull}}, {{432127306340246564ull, 14857761195691990120ull, 4494493544140357974ull, 5346059512079070613ull}}, {{540159132925308205ull, 9348829457760211842ull, 10229802948602835372ull, 6682574390098838266ull}}, {{9898570953011411064ull, 11686036822200264802ull, 3563881648898768407ull, 8353217987623547833ull}}, {{10798292864059519819ull, 14221302041516247357ull, 13756641076630200014ull, 5220761242264717395ull}}, {{18109552098501787678ull, 8553255515040533388ull, 12584115327360362114ull, 6525951552830896744ull}}, {{4190196049417682981ull, 1468197356945890928ull, 15730144159200452643ull, 8157439441038620930ull}}, {{2618872530886051863ull, 17058524412587039494ull, 14443026117927670805ull, 5098399650649138081ull}}, {{12496962700462340637ull, 7488097460451635655ull, 4218724592127424795ull, 6372999563311422602ull}}, {{11009517357150537892ull, 4748435807137156665ull, 14496777777014056802ull, 7966249454139278252ull}}, {{18410163394287555943ull, 7579458397888110819ull, 18283858147488561309ull, 4978905908837048907ull}}, {{18401018224432057024ull, 14086009015787526428ull, 18243136665933313732ull, 6223632386046311134ull}}, {{4554528706830519664ull, 17607511269734408036ull, 13580548795561866357ull, 7779540482557888918ull}}, {{12069952478623850598ull, 13310537552797698974ull, 3876156978798778569ull, 4862212801598680574ull}}, {{5864068561425037440ull, 2803113885714960006ull, 14068568260353249020ull, 6077766001998350717ull}}, {{16553457738636072608ull, 3503892357143700007ull, 3750652270159397563ull, 7597207502497938397ull}}, {{17263440114288627236ull, 18330833787710670168ull, 4650000678063317428ull, 4748254689061211498ull}}, {{3132556069151232429ull, 4466798160928786095ull, 15035872884433922594ull, 5935318361326514372ull}}, {{17750753141721204248ull, 14806869738015758426ull, 348097031832851626ull, 7419147951658142966ull}}, {{15705906732003140559ull, 13865979604687236920ull, 14052618700177695978ull, 4636967469786339353ull}}, {{1185639341294374083ull, 8109102469004270343ull, 3730715319939956261ull, 5796209337232924192ull}}, {{15317107231900131315ull, 14748064104682725832ull, 4663394149924945326ull, 7245261671541155240ull}}, {{699639966165612528ull, 9211708093998631483ull, 5829242687406181658ull, 9056577089426444050ull}}, {{16578176043349365494ull, 10369003577176532580ull, 8254962698056251440ull, 5660360680891527531ull}}, {{2275975980477155252ull, 12961254471470665726ull, 5707017354142926396ull, 7075450851114409414ull}}, {{12068342012451219872ull, 16201568089338332157ull, 16357143729533433803ull, 8844313563893011767ull}}, {{9848556766995706372ull, 7820137046622763646ull, 17140743858599477983ull, 5527695977433132354ull}}, {{3087323921889857157ull, 5163485289851066654ull, 12202557786394571671ull, 6909619971791415443ull}}, {{13082526939217097255ull, 1842670593886445413ull, 10641511214565826685ull, 8637024964739269304ull}}, {{10482422346224379736ull, 3457512130392722335ull, 6650944509103641678ull, 5398140602962043315ull}}, {{8491341914353086766ull, 13545262199845678727ull, 3701994617952164193ull, 6747675753702554144ull}}, {{6002491374513970554ull, 3096519694524934697ull, 4627493272440205242ull, 8434594692128192680ull}}, {{15280772155139701356ull, 6547010827505472089ull, 2892183295275128276ull, 5271621682580120425ull}}, {{5265907138642462983ull, 8183763534381840112ull, 8226915137521298249ull, 6589527103225150531ull}}, {{6582383923303078729ull, 14841390436404688044ull, 5671957903474234907ull, 8236908879031438164ull}}, {{13337361988919200014ull, 6970026013539236075ull, 12768345726526172625ull, 5148068049394648852ull}}, {{12060016467721612113ull, 13324218535351432998ull, 15960432158157715781ull, 6435085061743311065ull}}, {{5851648547797239333ull, 2820215113907127536ull, 6115482142414981015ull, 8043856327179138832ull}}, {{3657280342373274583ull, 8680163473833036566ull, 3822176339009363134ull, 5027410204486961770ull}}, {{13794972464821369037ull, 1626832305436519899ull, 14001092460616479726ull, 6284262755608702212ull}}, {{12632029562599323392ull, 11256912418650425682ull, 17501365575770599657ull, 7855328444510877765ull}}, {{12506704495051965024ull, 118041234015434195ull, 13244196494070318738ull, 4909580277819298603ull}}, {{11021694600387568376ull, 9370923579374068552ull, 11943559599160510518ull, 6136975347274123254ull}}, {{13777118250484460470ull, 2490282437362809882ull, 5706077462095862340ull, 7671219184092654068ull}}, {{13222384924980175698ull, 10779798560206531984ull, 12789670450664689770ull, 4794511990057908792ull}}, {{16527981156225219623ull, 4251376163403389172ull, 15987088063330862213ull, 5993139987572385990ull}}, {{2213232371571972912ull, 9925906222681624370ull, 10760488042308801958ull, 7491424984465482488ull}}, {{5994956250659870974ull, 1592005370748627327ull, 6725305026443001224ull, 4682140615290926555ull}}, {{2882009294897450814ull, 1990006713435784159ull, 3794945264626363626ull, 5852675769113658194ull}}, {{17437569673903977229ull, 11710880428649506006ull, 13967053617637730340ull, 7315844711392072742ull}}, {{12573590055525195728ull, 14638600535811882508ull, 8235444985192387117ull, 9144805889240090928ull}}, {{17081865821558023138ull, 11454968344096120519ull, 5147153115745241948ull, 5715503680775056830ull}}, {{16740646258520141019ull, 14318710430120150649ull, 15657313431536328243ull, 7144379600968821037ull}}, {{7090749767868012561ull, 13286702019222800408ull, 5736583734138246592ull, 8930474501211026297ull}}, {{4431718604917507851ull, 8304188762014250255ull, 15114579879904873880ull, 5581546563256891435ull}}, {{927962237719496910ull, 10380235952517812819ull, 14281538831453704446ull, 6976933204071114294ull}}, {{14995010852431534849ull, 3751922903792490215ull, 8628551502462354750ull, 8721166505088892868ull}}, {{16289410810410791137ull, 16180009870152470096ull, 14616216725893747526ull, 5450729065680558042ull}}, {{1915019439303937305ull, 11001640300835811813ull, 9046898870512408600ull, 6813411332100697553ull}}, {{7005460317557309535ull, 13752050376044764766ull, 15920309606567898654ull, 8516764165125871941ull}}, {{18213470753755482171ull, 3983345466600590074ull, 12256036513318630611ull, 5322977603203669963ull}}, {{13543466405339576906ull, 367495814823349689ull, 10708359623220900360ull, 6653722004004587454ull}}, {{3094274951392307421ull, 459369768529187112ull, 4162077492171349642ull, 8317152505005734318ull}}, {{1933921844620192138ull, 4898792123758129849ull, 16436356487889257238ull, 5198220315628583948ull}}, {{7029088324202628076ull, 15346862191552438119ull, 2098701536152019931ull, 6497775394535729936ull}}, {{4174674386825897191ull, 14571891721013159745ull, 2623376920190024914ull, 8122219243169662420ull}}, {{14138386537834655505ull, 13719118344060612744ull, 10862982611973541379ull, 5076387026981039012ull}}, {{17672983172293319381ull, 12537211911648378026ull, 13578728264966926724ull, 6345483783726298765ull}}, {{12867856928511873418ull, 15671514889560472533ull, 3138352275926494693ull, 7931854729657873457ull}}, {{10348253589533614838ull, 12100539815188989285ull, 13490685218522528943ull, 4957409206036170910ull}}, {{17547003005344406452ull, 10513988750558848702ull, 7639984486298385371ull, 6196761507545213638ull}}, {{12710381719825732257ull, 8530799919771172974ull, 326608571018205906ull, 7745951884431517048ull}}, {{3332302556463694757ull, 9943435968284371013ull, 204130356886378691ull, 4841219927769698155ull}}, {{8777064214007006350ull, 7817608941928075862ull, 14090221001390137076ull, 6051524909712122693ull}}, {{1747958230653982129ull, 9772011177410094828ull, 3777718196455507633ull, 7564406137140153367ull}}, {{10315845931013514639ull, 17636722031949779027ull, 9278602900425774126ull, 4727753835712595854ull}}, {{8283121395339505394ull, 12822530503082447976ull, 2374881588677441850ull, 5909692294640744818ull}}, {{10353901744174381743ull, 6804791091998284162ull, 12191974022701578121ull, 7387115368300931022ull}}, {{11082874608536376494ull, 15782209478567397361ull, 3008297745761098421ull, 4616947105188081889ull}}, {{18535205388306905ull, 5892703792927082990ull, 8372058200628760931ull, 5771183881485102361ull}}, {{9246541043590159439ull, 2754193722731465833ull, 15076758769213339068ull, 7213979851856377951ull}}, {{16169862322915087202ull, 3442742153414332291ull, 14234262443089285931ull, 9017474814820472439ull}}, {{7800320942608235550ull, 18292614910379815346ull, 15813943054571885562ull, 5635921759262795274ull}}, {{527029141405518629ull, 13642396601119993375ull, 10544056781360081145ull, 7044902199078494093ull}}, {{14493844482039061998ull, 3217937696117828006ull, 17791756995127489336ull, 8806127748848117616ull}}, {{4446966782847025845ull, 2011211060073642504ull, 11119848121954680835ull, 5503829843030073510ull}}, {{5558708478558782306ull, 16349071880374216842ull, 4676438115588575235ull, 6879787303787591888ull}}, {{16171757635053253691ull, 15824653832040383148ull, 5845547644485719044ull, 8599734129734489860ull}}, {{883976485053507749ull, 667036608170463660ull, 12876839314658350211ull, 5374833831084056162ull}}, {{1104970606316884686ull, 14668853815495243287ull, 6872677106468161955ull, 6718542288855070203ull}}, {{15216271313178269569ull, 13724381250941666204ull, 3979160364657814540ull, 8398177861068837754ull}}, {{286797533881642673ull, 17801110318693317186ull, 7098661246338521991ull, 5248861163168023596ull}}, {{9581868954206829149ull, 17639701879939258578ull, 8873326557923152489ull, 6561076453960029495ull}}, {{2753964155903760628ull, 8214569294641909511ull, 6479972178976552708ull, 8201345567450036869ull}}, {{8638756625080932249ull, 14357477846005969252ull, 6355825621074039394ull, 5125840979656273043ull}}, {{10798445781351165311ull, 8723475270652685757ull, 3333096007915161339ull, 6407301224570341304ull}}, {{18109743245116344542ull, 6292658069888469292ull, 4166370009893951674ull, 8009126530712926630ull}}, {{2095217491342939531ull, 8544597312107681212ull, 16439039311465883508ull, 5005704081695579143ull}}, {{2619021864178674414ull, 10680746640134601515ull, 15937113120904966481ull, 6257130102119473929ull}}, {{17108835385505506729ull, 17962619318595639797ull, 6086333345849044389ull, 7821412627649342412ull}}, {{12998865125154635658ull, 13532480083335968825ull, 13027330378010428551ull, 4888382892280839007ull}}, {{2413523351161130860ull, 12303914085742573128ull, 11672476954085647785ull, 6110478615351048759ull}}, {{3016904188951413575ull, 1544834551896052698ull, 9978910174179671828ull, 7638098269188810949ull}}, {{6497251136522021389ull, 10188893631789808744ull, 8542661868075988844ull, 4773811418243006843ull}}, {{8121563920652526736ull, 12736117039737260930ull, 6066641316667598151ull, 5967264272803758554ull}}, {{928582863960882612ull, 11308460281244188259ull, 16806673682689273497ull, 7459080341004698192ull}}, {{16721265354471409296ull, 150258648136535805ull, 10504171051680795936ull, 4661925213127936370ull}}, {{7066523637807097908ull, 187823310170669757ull, 3906841777746219112ull, 5827406516409920463ull}}, {{13444840565686260289ull, 234779137713337196ull, 271866203755385986ull, 7284258145512400579ull}}, {{16806050707107825362ull, 9516845958996447303ull, 14174890809976396194ull, 9105322681890500723ull}}, {{17421310719583472707ull, 10559714742800167468ull, 6553463747021553669ull, 5690826676181562952ull}}, {{3329894325769789268ull, 17811329446927597240ull, 8191829683776942086ull, 7113533345226953690ull}}, {{4162367907212236585ull, 13040789771804720742ull, 1016415067866401800ull, 8891916681533692113ull}}, {{16436537997289811578ull, 8150493607377950463ull, 12164474463484970885ull, 5557447925958557570ull}}, {{15933986478184876568ull, 14799803027649825983ull, 5982221042501437798ull, 6946809907448196963ull}}, {{15305797079303707806ull, 9276381747707506671ull, 2866090284699409344ull, 8683512384310246204ull}}, {{16483652202205899235ull, 5797738592317191669ull, 11014678464791906648ull, 5427195240193903877ull}}, {{6769507197475210331ull, 7247173240396489587ull, 18380034099417271214ull, 6783994050242379846ull}}, {{3850197978416625010ull, 18282338587350387792ull, 13751670587416813209ull, 8479992562802974808ull}}, {{2406373736510390632ull, 4508932589452910514ull, 8594794117135508256ull, 5299995351751859255ull}}, {{12231339207492764097ull, 5636165736816138142ull, 6131806627991997416ull, 6624994189689824069ull}}, {{6065801972511179314ull, 7045207171020172678ull, 12276444303417384674ull, 8281242737112280086ull}}, {{17626184288101650783ull, 9014940500314995827ull, 3061091671208477517ull, 5175776710695175054ull}}, {{17421044341699675575ull, 15880361643821132688ull, 13049736625865372704ull, 6469720888368968817ull}}, {{3329561353415042852ull, 1403707981066864245ull, 2477112727049552169ull, 8087151110461211022ull}}, {{4386818855098095735ull, 12406532534235259913ull, 15383253509688133817ull, 5054469444038256888ull}}, {{10095209587300007573ull, 1673107612511911179ull, 782322813400615656ull, 6318086805047821111ull}}, {{8007325965697621562ull, 2091384515639888974ull, 14812961572032933282ull, 7897608506309776388ull}}, {{392892710133625572ull, 5918801340702318513ull, 34728945665807493ull, 4936005316443610243ull}}, {{5102801906094419869ull, 12010187694305286045ull, 13878469237364423078ull, 6170006645554512803ull}}, {{10990188401045412740ull, 5789362581026831748ull, 12736400528278140944ull, 7712508306943141004ull}}, {{16092239787508158771ull, 3618351613141769842ull, 17183622367028613898ull, 4820317691839463127ull}}, {{10891927697530422655ull, 13746311553281988111ull, 16867841940358379468ull, 6025397114799328909ull}}, {{9003223603485640415ull, 17182889441602485139ull, 7249744370165810623ull, 7531746393499161137ull}}, {{3321171742964831308ull, 17656834928642635068ull, 16060305277422101399ull, 4707341495936975710ull}}, {{4151464678706039134ull, 17459357642375905931ull, 10852009559922850941ull, 5884176869921219638ull}}, {{577644829955161014ull, 7989138997687718702ull, 4341639913048787869ull, 7355221087401524548ull}}, {{9945428074298727075ull, 14598109765537036281ull, 5427049891310984836ull, 9194026359251905685ull}}, {{17745107592505174182ull, 18347190640315423483ull, 5697749191283059474ull, 5746266474532441053ull}}, {{17569698472204079824ull, 13710616263539503546ull, 11733872507531212247ull, 7182833093165551316ull}}, {{12738751053400323971ull, 12526584310996991529ull, 14667340634414015309ull, 8978541366456939145ull}}, {{1044190380734120626ull, 10134958203586813658ull, 2249558868867677712ull, 5611588354035586966ull}}, {{10528610012772426591ull, 12668697754483517072ull, 12035320622939372948ull, 7014485442544483707ull}}, {{13160762515965533238ull, 15835872193104396340ull, 10432464760246828281ull, 8768106803180604634ull}}, {{17448848609333234082ull, 2979891093049165856ull, 11131976493581655580ull, 5480066751987877896ull}}, {{3364316687956990987ull, 3724863866311457321ull, 13914970616977069475ull, 6850083439984847370ull}}, {{8817081878373626637ull, 44393814461933747ull, 8170341234366561036ull, 8562604299981059213ull}}, {{3204833164769822696ull, 9251118170893484400ull, 7412306280692794599ull, 5351627687488162008ull}}, {{4006041455962278370ull, 6952211695189467596ull, 9265382850865993249ull, 6689534609360202510ull}}, {{5007551819952847963ull, 13301950637414222399ull, 2358356526727715753ull, 8361918261700253138ull}}, {{10047248915111611833ull, 1396190120742807143ull, 6085658847632210250ull, 5226198913562658211ull}}, {{7947375125462126887ull, 10968609687783284737ull, 2995387541112874908ull, 6532748641953322764ull}}, {{14545904925255046513ull, 13710762109729105921ull, 3744234426391093635ull, 8165935802441653455ull}}, {{2173661550643322215ull, 6263383309366997249ull, 9257675544135515378ull, 5103709876526033409ull}}, {{7328762956731540672ull, 17052601173563522369ull, 16183780448596782126ull, 6379637345657541761ull}}, {{13772639714341813744ull, 12092379430099627153ull, 6394667505463813946ull, 7974546682071927202ull}}, {{1690370793822551734ull, 12169423162239654875ull, 8608353209342271620ull, 4984091676294954501ull}}, {{15948021547560353380ull, 15211778952799568593ull, 15372127530105227429ull, 6230114595368693126ull}}, {{6099968879168278012ull, 5179665635717297030ull, 9991787375776758479ull, 7787643244210866408ull}}, {{17647538604762337470ull, 10154820049964392499ull, 6244867109860474049ull, 4867277027631791505ull}}, {{17447737237525533933ull, 17305211080882878528ull, 12417769905752980465ull, 6084096284539739381ull}}, {{3362927473197365801ull, 7796455795821434449ull, 1687154326909061870ull, 7605120355674674227ull}}, {{13631044716816823386ull, 261098853961008626ull, 17195372518814021333ull, 4753200222296671391ull}}, {{7815433859166253424ull, 4938059585878648687ull, 16882529630090138762ull, 5941500277870839239ull}}, {{5157606305530428876ull, 15395946519203086667ull, 16491476019185285548ull, 7426875347338549049ull}}, {{917660931742824095ull, 399094537647153359ull, 3389643484349721612ull, 4641797092086593156ull}}, {{14982134219960693831ull, 498868172058941698ull, 4237054355437152015ull, 5802246365108241445ull}}, {{9504295738096091481ull, 14458643270355840835ull, 9908003962723827922ull, 7252807956385301806ull}}, {{7268683654192726447ull, 8849932051090025236ull, 3161632916550009095ull, 9066009945481627258ull}}, {{13766299320725229838ull, 12448736559572347628ull, 6587706591271143588ull, 5666256215926017036ull}}, {{17207874150906537297ull, 15560920699465434535ull, 8234633239088929485ull, 7082820269907521295ull}}, {{16898156670205783717ull, 5616092819049629457ull, 5681605530433773953ull, 8853525337384401619ull}}, {{3643818891237532967ull, 15039273057974488171ull, 1245160447307414768ull, 5533453335865251012ull}}, {{18389831669329079921ull, 352347248758558597ull, 1556450559134268461ull, 6916816669831563765ull}}, {{9152231531379186189ull, 5052120079375586151ull, 6557249217345223480ull, 8646020837289454706ull}}, {{12637673734753073224ull, 3157575049609741344ull, 8709966779268152579ull, 5403763023305909191ull}}, {{15797092168441341530ull, 17782026867294340392ull, 6275772455657802819ull, 6754703779132386489ull}}, {{1299621136842125297ull, 17615847565690537587ull, 12456401587999641428ull, 8443379723915483111ull}}, {{16953164275022185975ull, 1786532691701810183ull, 14702780020140857749ull, 5277112327447176944ull}}, {{16579769325350344564ull, 6844851883054650633ull, 18378475025176072186ull, 6596390409308971180ull}}, {{6889653601405766993ull, 17779436890673089100ull, 4526349707760538616ull, 8245488011636213976ull}}, {{13529405537733380179ull, 11112148056670680687ull, 2828968567350336635ull, 5153430007272633735ull}}, {{12300070903739337319ull, 9278499052410962955ull, 17371268764470084506ull, 6441787509090792168ull}}, {{10763402611246783745ull, 2374751778658927886ull, 3267341881878054017ull, 8052234386363490211ull}}, {{2115440613601851937ull, 13013434907730299689ull, 18182989740669641424ull, 5032646491477181381ull}}, {{7255986785429702825ull, 16266793634662874611ull, 8893679120554888068ull, 6290808114346476727ull}}, {{4458297463359740627ull, 1886747969619041648ull, 6505412882266222182ull, 7863510142933095909ull}}, {{2786435914599837892ull, 15014275536294064742ull, 6371726060630082815ull, 4914693839333184943ull}}, {{12706416930104573173ull, 14156158401940193023ull, 3352971557360215615ull, 6143367299166481179ull}}, {{11271335144203328562ull, 13083511983997853375ull, 18026272501982433231ull, 7679209123958101473ull}}, {{13962113492768162208ull, 15094724017639740215ull, 4348891286097938913ull, 4799505702473813421ull}}, {{12840955847532814855ull, 5033346966767511557ull, 10047800126049811546ull, 5999382128092266776ull}}, {{2216136754133854857ull, 15515055745314165255ull, 12559750157562264432ull, 7499227660115333470ull}}, {{8302614498974741142ull, 9696909840821353284ull, 3238157830049027366ull, 4687017287572083419ull}}, {{10378268123718426427ull, 2897765264171915797ull, 17882755342843447920ull, 5858771609465104273ull}}, {{17584521173075420938ull, 3622206580214894746ull, 8518386123272146188ull, 7323464511831380342ull}}, {{12757279429489500364ull, 4527758225268618433ull, 1424610617235406927ull, 9154330639789225428ull}}, {{1055770615789855872ull, 9747377918433968377ull, 10113753672626905137ull, 5721456649868265892ull}}, {{5931399288164707744ull, 16795908416469848375ull, 12642192090783631421ull, 7151820812335332365ull}}, {{2802563091778496775ull, 7159827465305146757ull, 1967682058197375565ull, 8939776015419165457ull}}, {{4057444941575254437ull, 6780735175029410675ull, 12759016332441829488ull, 5587360009636978410ull}}, {{460120158541680142ull, 8475918968786763344ull, 6725398378697511052ull, 6984200012046223013ull}}, {{575150198177100177ull, 10594898710983454180ull, 13018433991799276719ull, 8730250015057778766ull}}, {{9582840910715463419ull, 13539340722005740718ull, 3524835226447160045ull, 5456406259411111729ull}}, {{2755179101539553466ull, 3089117847225012186ull, 9017730051486337961ull, 6820507824263889661ull}}, {{12667345913779217640ull, 8473083327458653136ull, 15883848582785310355ull, 8525634780329862076ull}}, {{7917091196112011025ull, 2989834070447964258ull, 704033327386043164ull, 5328521737706163798ull}}, {{672991958285237973ull, 3737292588059955323ull, 10103413696087329763ull, 6660652172132704747ull}}, {{14676298003138711178ull, 59929716647556249ull, 8017581101681774300ull, 8325815215165880934ull}}, {{2255157224320612631ull, 9260828109759498464ull, 399302170123721033ull, 5203634509478675584ull}}, {{2818946530400765788ull, 16187721155626760984ull, 499127712654651291ull, 6504543136848344480ull}}, {{3523683163000957235ull, 15622965426106063326ull, 623909640818314114ull, 8130678921060430600ull}}, {{16037360032157761984ull, 14376039409743677482ull, 389943525511446321ull, 5081674325662769125ull}}, {{10823328003342426672ull, 4134991206897433141ull, 5099115425316695806ull, 6352092907078461406ull}}, {{18140846022605421244ull, 14392111045476567234ull, 15597266318500645565ull, 7940116133848076757ull}}, {{15949714782555776182ull, 11300912412636548473ull, 12054134458276597430ull, 4962572583655047973ull}}, {{6102085422912556515ull, 4902768478940909784ull, 1232610017563583076ull, 6203215729568809967ull}}, {{7627606778640695644ull, 6128460598676137230ull, 15375820577236642557ull, 7754019661961012458ull}}, {{155568218223046873ull, 6136130883386279721ull, 14221573879200289502ull, 4846262288725632786ull}}, {{4806146291206196496ull, 16893535641087625459ull, 8553595312145586069ull, 6057827860907040983ull}}, {{1395996845580357715ull, 7281861496077368112ull, 6080308121754594683ull, 7572284826133801229ull}}, {{872498028487723572ull, 2245320425834661118ull, 6106035585310315629ull, 4732678016333625768ull}}, {{10313994572464430273ull, 7418336550720714301ull, 7632544481637894536ull, 5915847520417032210ull}}, {{17504179234007925746ull, 9272920688400892876ull, 317308565192592362ull, 7394809400521290263ull}}, {{1716739984400177783ull, 10407261448677945952ull, 7115846880886452082ull, 4621755875325806414ull}}, {{2145924980500222229ull, 3785704773992656632ull, 18118180637962840911ull, 5777194844157258017ull}}, {{2682406225625277786ull, 120444949063432886ull, 8812667742171387427ull, 7221493555196572522ull}}, {{12576379818886373040ull, 13985614241611454819ull, 1792462640859458475ull, 9026866943995715653ull}}, {{5554394377590289198ull, 6435165891793465310ull, 3426132159750855499ull, 5641791839997322283ull}}, {{16166365008842637306ull, 3432271346314443733ull, 18117723254970733086ull, 7052239799996652853ull}}, {{6372898205771132920ull, 13513711219747830475ull, 8812096013431252645ull, 8815299749995816067ull}}, {{1677218369393264123ull, 10751912521556087999ull, 3201716999180838951ull, 5509562343747385042ull}}, {{15931581017023743866ull, 8828204633517722094ull, 13225518285830824497ull, 6886952929684231302ull}}, {{10691104234424904024ull, 15646941810324540522ull, 7308525820433754813ull, 8608691162105289128ull}}, {{11293626164942952919ull, 12085181640666531778ull, 4567828637771096758ull, 5380431976315805705ull}}, {{4893660669323915341ull, 5883105013978388915ull, 10321471815641258852ull, 6725539970394757131ull}}, {{1505389818227506272ull, 7353881267472986144ull, 8290153751124185661ull, 8406924962993446414ull}}, {{940868636392191420ull, 6902018801384310292ull, 569660076025228134ull, 5254328101870904009ull}}, {{1176085795490239275ull, 17850895538585163673ull, 5323761113458923071ull, 6567910127338630011ull}}, {{6081793262790186998ull, 17701933404804066687ull, 2043015373396265935ull, 8209887659173287514ull}}, {{10718649816884948730ull, 17981237405643623535ull, 5888570626800054113ull, 5131179786983304696ull}}, {{8786626252678798008ull, 8641488701772365707ull, 7360713283500067642ull, 6413974733729130870ull}}, {{6371596797421109606ull, 1578488840360681326ull, 18424263641229860361ull, 8017468417161413587ull}}, {{17817306053670357216ull, 12515770571293895588ull, 9209321766554968773ull, 5010917760725883492ull}}, {{3824888493378394904ull, 1809655158835205774ull, 11511652208193710967ull, 6263647200907354365ull}}, {{14004482653577769438ull, 16097127003826170929ull, 554507204959974996ull, 7829559001134192957ull}}, {{1835272630845024043ull, 837332340536581023ull, 2652410012313678325ull, 4893474375708870598ull}}, {{16129148843838443765ull, 5658351444098114182ull, 12538884552246873714ull, 6116842969636088247ull}}, {{10938064017943278899ull, 16296311341977418536ull, 11061919671881204238ull, 7646053712045110309ull}}, {{6836290011214549312ull, 5573508570308498681ull, 9219542804139446601ull, 4778783570028193943ull}}, {{13157048532445574544ull, 11578571731313011255ull, 6912742486746920347ull, 5973479462535242429ull}}, {{11834624647129580276ull, 9861528645713876165ull, 13252614126861038338ull, 7466849328169053036ull}}, {{9702483413669681624ull, 10775141421998560507ull, 17506255866142924769ull, 4666780830105658147ull}}, {{7516418248659714126ull, 18080612795925588538ull, 17271133814251268057ull, 5833476037632072684ull}}, {{172150773969866850ull, 8765707939624821961ull, 3142173194104533456ull, 7291845047040090856ull}}, {{4826874485889721466ull, 10957134924531027451ull, 3927716492630666820ull, 9114806308800113570ull}}, {{710953544467381965ull, 16071581364686667965ull, 7066508826321554666ull, 5696753943000070981ull}}, {{5500377949011615360ull, 10866104669003559148ull, 13444822051329331237ull, 7120942428750088726ull}}, {{6875472436264519199ull, 18194316854681836839ull, 7582655527306888238ull, 8901178035937610908ull}}, {{11214699300306406356ull, 6759762015748760120ull, 13962531741421580957ull, 5563236272461006817ull}}, {{14018374125383007945ull, 13061388538113338054ull, 3618106621494812484ull, 6954045340576258522ull}}, {{8299595619873984123ull, 16326735672641672568ull, 13746005313723291413ull, 8692556675720323152ull}}, {{5187247262421240077ull, 12510052804614739307ull, 8591253321077057133ull, 5432847922325201970ull}}, {{1872373059599162192ull, 1802507950486260422ull, 1515694614491545609ull, 6791059902906502463ull}}, {{11563838361353728548ull, 6864820956535213431ull, 15729676323396595723ull, 8488824878633128078ull}}, {{14144928003487162198ull, 1984670088620814442ull, 5219361683695484423ull, 5305515549145705049ull}}, {{8457787967504176940ull, 16315895666058181765ull, 11135888123046743432ull, 6631894436432131311ull}}, {{15183920977807609079ull, 1948125508863175590ull, 9308174135381041387ull, 8289868045540164139ull}}, {{4878264592702367770ull, 17358479507535342408ull, 3511765825399456914ull, 5181167528462602587ull}}, {{6097830740877959713ull, 12474727347564402202ull, 18224765337031484855ull, 6476459410578253233ull}}, {{16845660462952225449ull, 10981723166028114848ull, 8945898616007192357ull, 8095574263222816542ull}}, {{10528537789345140906ull, 9169419987981265732ull, 979500616577107319ull, 5059733914514260339ull}}, {{13160672236681426132ull, 6850088966549194261ull, 15059433826003547861ull, 6324667393142825423ull}}, {{2615782240569618953ull, 13174297226613880731ull, 14212606264077046922ull, 7905834241428531779ull}}, {{17775764964851869510ull, 12845621785061063360ull, 6577035905834460374ull, 4941146400892832362ull}}, {{3772962132355285271ull, 6833655194471553393ull, 17444666919147851276ull, 6176433001116040452ull}}, {{9327888683871494493ull, 8542068993089441741ull, 3359089575225262479ull, 7720541251395050566ull}}, {{8135773436633378010ull, 12256322148321982944ull, 15934489039797952761ull, 4825338282121906603ull}}, {{10169716795791722513ull, 1485344630120314968ull, 15306425281320053048ull, 6031672852652383254ull}}, {{12712145994739653141ull, 1856680787650393710ull, 9909659564795290502ull, 7539591065815479068ull}}, {{3333405228284895309ull, 14995483547563659781ull, 15416909264851832371ull, 4712244416134674417ull}}, {{8778442553783507040ull, 14132668416027186822ull, 5436078525782626752ull, 5890305520168343022ull}}, {{1749681155374607992ull, 17665835520033983528ull, 16018470194083059248ull, 7362881900210428777ull}}, {{2187101444218259990ull, 3635550326332927794ull, 6188029687321660349ull, 9203602375263035972ull}}, {{5978624421063800398ull, 4578061963171773823ull, 13090890591430813526ull, 5752251484539397482ull}}, {{2861594507902362593ull, 14945949490819493087ull, 7140241202433741099ull, 7190314355674246853ull}}, {{17412051190160116954ull, 14070750845096978454ull, 13536987521469564278ull, 8987892944592808566ull}}, {{6270845975422685192ull, 4182533259758223630ull, 3848931182491089770ull, 5617433090370505354ull}}, {{17061929506133132298ull, 14451538611552555345ull, 14034536014968638020ull, 7021791362963131692ull}}, {{7492353827384251661ull, 18064423264440694182ull, 17543170018710797525ull, 8777239203703914615ull}}, {{71035123687769384ull, 13596107549489127816ull, 17882010289335330309ull, 5485774502314946634ull}}, {{88793904609711730ull, 3160076381579246058ull, 13129140824814387079ull, 6857218127893683293ull}}, {{9334364417616915470ull, 17785153532256221284ull, 2576367975735820136ull, 8571522659867104117ull}}, {{15057349797865347977ull, 11115720957660138302ull, 3916072994048581537ull, 5357201662416940073ull}}, {{9598315210476909163ull, 59593141793009166ull, 9506777260988114826ull, 6696502078021175091ull}}, {{2774521976241360646ull, 9297863464096037266ull, 7271785557807755628ull, 8370627597526468864ull}}, {{6345762253578238308ull, 15034536701914799099ull, 4544865973629847267ull, 5231642248454043040ull}}, {{3320516798545409981ull, 14181484858966110970ull, 5681082467037309084ull, 6539552810567553800ull}}, {{13374018035036538284ull, 17726856073707638712ull, 7101353083796636355ull, 8174441013209442250ull}}, {{8358761271897836428ull, 8773442036853580243ull, 9050031695800285626ull, 5109025633255901406ull}}, {{5836765571444907630ull, 1743430509212199496ull, 2089167582895581225ull, 6386282041569876758ull}}, {{7295956964306134538ull, 6790974154942637274ull, 11834831515474252339ull, 7982852551962345947ull}}, {{9171659121118721990ull, 1938515837625454344ull, 5090926687957713760ull, 4989282844976466217ull}}, {{11464573901398402488ull, 2423144797031817930ull, 10975344378374530104ull, 6236603556220582771ull}}, {{5107345339893227302ull, 3028930996289772413ull, 9107494454540774726ull, 7795754445275728464ull}}, {{5497933846646961016ull, 15728139927963271470ull, 5692184034087984203ull, 4872346528297330290ull}}, {{16095789345163477078ull, 15048488891526701433ull, 16338602079464756062ull, 6090433160371662862ull}}, {{6284678626172182635ull, 9587239077553600984ull, 11199880562476169270ull, 7613041450464578578ull}}, {{3927924141357614147ull, 1380338405043612711ull, 11611611369974993698ull, 4758150906540361611ull}}, {{298219158269629780ull, 10948795043159291697ull, 9902828194041354218ull, 5947688633175452014ull}}, {{4984459966264425128ull, 4462621767094338813ull, 3155163205696916965ull, 7434610791469315018ull}}, {{5421130488128959657ull, 5094981613647655710ull, 6583663021987961007ull, 4646631744668321886ull}}, {{15999785147015975380ull, 1757040998632181733ull, 17452950814339727067ull, 5808289680835402357ull}}, {{6164673378487805512ull, 16031359303572390879ull, 7981130462642495121ull, 7260362101044252947ull}}, {{3094155704682368986ull, 6204141074183324887ull, 5364727059875730998ull, 9075452626305316184ull}}, {{8851376343067562473ull, 17712646226646741766ull, 3352954412422331873ull, 5672157891440822615ull}}, {{1840848391979677283ull, 8305749728026263496ull, 18026251070810078554ull, 7090197364301028268ull}}, {{2301060489974596603ull, 1158815123178053562ull, 4086069764803046577ull, 8862746705376285336ull}}, {{6049848824661510781ull, 12253474498054753236ull, 2553793603001904110ull, 5539216690860178335ull}}, {{7562311030826888476ull, 6093471085713665737ull, 17027300059034543850ull, 6924020863575222918ull}}, {{14064574806960998499ull, 16840210893996857979ull, 12060753036938404004ull, 8655026079469028648ull}}, {{6484516245136930110ull, 1301759771893260429ull, 7537970648086502503ull, 5409391299668142905ull}}, {{12717331324848550542ull, 15462257770148739248ull, 14034149328535516032ull, 6761739124585178631ull}}, {{15896664156060688177ull, 881078138976372444ull, 12931000642242007137ull, 8452173905731473289ull}}, {{712043060683154303ull, 12079888882928702538ull, 1164346373760172604ull, 5282608691082170806ull}}, {{10113425862708718686ull, 15099861103660878172ull, 10678805004054991563ull, 6603260863852713507ull}}, {{12641782328385898358ull, 14263140361148709811ull, 8736820236641351550ull, 8254076079815891884ull}}, {{5595270946027492522ull, 4302776707290555728ull, 14683884684755620527ull, 5158797549884932427ull}}, {{6994088682534365652ull, 766784865685806756ull, 13743169837517137755ull, 6448496937356165534ull}}, {{8742610853167957065ull, 14793539137389422157ull, 7955590260041646385ull, 8060621171695206918ull}}, {{7769974792443667118ull, 2328432933227306992ull, 360557894098641087ull, 5037888232309504324ull}}, {{9712468490554583897ull, 16745599221816297452ull, 450697367623301358ull, 6297360290386880405ull}}, {{12140585613193229871ull, 11708626990415596007ull, 5175057727956514602ull, 7871700362983600506ull}}, {{14505395035886850526ull, 11929577887437135408ull, 7846097098400209530ull, 4919812726864750316ull}}, {{18131743794858563157ull, 5688600322441643452ull, 9807621373000261913ull, 6149765908580937895ull}}, {{4217935669863652330ull, 11722436421479442220ull, 7647840697822939487ull, 7687207385726172369ull}}, {{11859581830519558515ull, 14244051791065733243ull, 16309115482207806939ull, 4804504616078857730ull}}, {{10212791269722060239ull, 13193378720404778650ull, 11163022315904982866ull, 6005630770098572163ull}}, {{3542617050297799491ull, 7268351363651197505ull, 9342091876453840679ull, 7507038462623215204ull}}, {{13743350702504594442ull, 11460248629923080296ull, 15062179459638426232ull, 4691899039139509502ull}}, {{17179188378130743052ull, 14325310787403850370ull, 9604352287693256982ull, 5864873798924386878ull}}, {{12250613435808653007ull, 8683266447400037155ull, 2782068322761795420ull, 7331092248655483598ull}}, {{10701580776333428355ull, 10854083059250046444ull, 12700957440307020083ull, 9163865310819354497ull}}, {{15911860022063168530ull, 4477958902817585075ull, 1020569372550805696ull, 5727415819262096561ull}}, {{15278139009151572758ull, 5597448628521981344ull, 5887397734115895024ull, 7159269774077620701ull}}, {{650929687729914332ull, 6996810785652476681ull, 11970933186072256684ull, 8949087217597025876ull}}, {{11936046100899666218ull, 13596378777887573733ull, 16705205278149936235ull, 5593179510998141172ull}}, {{1084999570842419060ull, 12383787453932079263ull, 2434762523977868678ull, 6991474388747676466ull}}, {{15191307518835187537ull, 6256362280560323270ull, 12266825191827111656ull, 8739342985934595582ull}}, {{4882881180844604307ull, 3910226425350202044ull, 3055079726464556881ull, 5462089366209122239ull}}, {{6103601476055755383ull, 9499469050115140459ull, 17653907713362859813ull, 6827611707761402798ull}}, {{3017815826642306325ull, 16486022331071313478ull, 12844012604848798958ull, 8534514634701753498ull}}, {{15721192946933605165ull, 5692077938492183019ull, 12639193896457887253ull, 5334071646688595936ull}}, {{15039805165239618552ull, 11726783441542616678ull, 15798992370572359066ull, 6667589558360744920ull}}, {{9576384419694747382ull, 5435107265073495040ull, 1301996389505897217ull, 8334486947950931151ull}}, {{5985240262309217114ull, 14926157086739404160ull, 7731276771082267616ull, 5209054342469331969ull}}, {{7481550327886521393ull, 210952284714703584ull, 14275781982280222425ull, 6511317928086664961ull}}, {{9351937909858151741ull, 4875376374320767384ull, 4009669422568114319ull, 8139147410108331202ull}}, {{5844961193661344838ull, 9964639261591561471ull, 7117729407532459353ull, 5086967131317707001ull}}, {{2694515473649293144ull, 17067485095416839743ull, 13508847777842962095ull, 6358708914147133751ull}}, {{17203202397343780141ull, 16722670350843661774ull, 12274373703876314715ull, 7948386142683917189ull}}, {{6140315479912474684ull, 8145825960063594657ull, 9977326574136390649ull, 4967741339177448243ull}}, {{12287080368317981259ull, 14793968468506881225ull, 7859972199243100407ull, 6209676673971810304ull}}, {{1523792405115312862ull, 13880774567206213628ull, 9824965249053875509ull, 7762095842464762880ull}}, {{10175742290051846347ull, 10981327113717577469ull, 6140603280658672193ull, 4851309901540476800ull}}, {{17331363880992195838ull, 18338344910574359740ull, 7675754100823340241ull, 6064137376925596000ull}}, {{3217460777530693181ull, 9087873082935785964ull, 9594692626029175302ull, 7580171721156995000ull}}, {{11234285022811459046ull, 1068234658407478323ull, 5996682891268234564ull, 4737607325723121875ull}}, {{9431170260086935904ull, 1335293323009347904ull, 2884167595657905301ull, 5922009157153902344ull}}, {{11788962825108669880ull, 6280802672189072784ull, 3605209494572381626ull, 7402511446442377930ull}}, {{7368101765692918675ull, 8537187688545558394ull, 6864941952535126420ull, 4626569654026486206ull}}, {{18433499243970924152ull, 10671484610681947992ull, 17804549477523683833ull, 5783212067533107757ull}}, {{4595129981254103573ull, 17951041781779822895ull, 8420628791622441079ull, 7229015084416384697ull}}, {{1132226458140241563ull, 17827116208797390715ull, 15137472007955439253ull, 9036268855520480871ull}}, {{16848542600833508641ull, 13447790639712063148ull, 16378449032613231389ull, 5647668034700300544ull}}, {{2613934177332334185ull, 2974680244357915224ull, 2026317217056987621ull, 7059585043375375681ull}}, {{3267417721665417731ull, 8330036323874781934ull, 7144582539748622430ull, 8824481304219219601ull}}, {{15877194131323049794ull, 594586683994350804ull, 15994579133411358779ull, 5515300815137012250ull}}, {{1399748590444260626ull, 14578291410275102218ull, 10769851879909422665ull, 6894126018921265313ull}}, {{10973057774910101591ull, 4387806207561714060ull, 18074000868314166236ull, 8617657523651581641ull}}, {{16081533146173589302ull, 11965750916580847095ull, 4378721515055272041ull, 5386035952282238526ull}}, {{15490230414289598724ull, 1122130590443895157ull, 14696773930673865860ull, 6732544940352798157ull}}, {{5527729962579834693ull, 1402663238054868947ull, 4535909358060168613ull, 8415681175440997697ull}}, {{1148988217398702731ull, 3182507532997987044ull, 14364158394856075143ull, 5259800734650623560ull}}, {{1436235271748378414ull, 17813192471529647517ull, 17955197993570093928ull, 6574750918313279450ull}}, {{6406980108112860921ull, 3819746515702507780ull, 13220625455107841603ull, 8218438647891599313ull}}, {{13227734604425313884ull, 81498563100373410ull, 1345361881801319146ull, 5136524154932249571ull}}, {{7311296218676866547ull, 9325245240730242571ull, 15516760407533812644ull, 6420655193665311963ull}}, {{4527434254918695279ull, 11656556550912803214ull, 14784264490989877901ull, 8025818992081639954ull}}, {{16664704464606348262ull, 9591190853534195960ull, 13851851325296061592ull, 5016136870051024971ull}}, {{2384136507048383711ull, 11988988566917744951ull, 12703128138192689086ull, 6270171087563781214ull}}, {{16815228689092643351ull, 5762863671792405380ull, 6655538135886085550ull, 7837713859454726518ull}}, {{1286145893828126286ull, 17436847850152417075ull, 17994769390210967180ull, 4898571162159204073ull}}, {{15442740422567321570ull, 3349315738980969727ull, 8658403682481545264ull, 6123213952699005092ull}}, {{14691739509781764058ull, 4186644673726212159ull, 10823004603101931580ull, 7654017440873756365ull}}, {{16099866221254684393ull, 11840024957933658407ull, 9070220886152401189ull, 4783760900546097728ull}}, {{15513146758140967587ull, 964973142134909297ull, 11337776107690501487ull, 5979701125682622160ull}}, {{5556375392394045771ull, 15041274482950800334ull, 14172220134613126858ull, 7474626407103277700ull}}, {{17307792675528442319ull, 14012482570271638112ull, 18081009620987980094ull, 4671641504439548562ull}}, {{3187996770701001283ull, 8292231175984771833ull, 13377889989380199310ull, 5839551880549435703ull}}, {{8596681981803639507ull, 1141916933126188983ull, 12110676468297861234ull, 7299439850686794629ull}}, {{6134166458827161480ull, 10650768203262512037ull, 1303287530090162830ull, 9124299813358493287ull}}, {{6139697045980669877ull, 2045044108611682119ull, 7732083733947433625ull, 5702687383349058304ull}}, {{3062935289048449442ull, 7167991154191990553ull, 9665104667434292031ull, 7128359229186322880ull}}, {{8440355129737949707ull, 4348302924312600287ull, 12081380834292865039ull, 8910449036482903600ull}}, {{12192750983727300423ull, 9635218355336457035ull, 7550863021433040649ull, 5569030647801814750ull}}, {{10629252711231737625ull, 16655708962597959198ull, 215206739936525003ull, 6961288309752268438ull}}, {{4063193852184896223ull, 16207950184820061094ull, 9492380461775432062ull, 8701610387190335547ull}}, {{16374554212897723851ull, 5518282847085150279ull, 3626894779395951087ull, 5438506491993959717ull}}, {{15856506747694766910ull, 2286167540429049945ull, 9145304492672326763ull, 6798133114992449646ull}}, {{5985575379336294926ull, 16692767480818476144ull, 2208258578985632645ull, 8497666393740562058ull}}, {{3740984612085184329ull, 12738822684725241542ull, 5991847630293408307ull, 5311041496087851286ull}}, {{13899602801961256219ull, 11311842337479164023ull, 16713181574721536192ull, 6638801870109814107ull}}, {{12762817484024182369ull, 14139802921848955029ull, 16279790949974532336ull, 8298502337637267634ull}}, {{10282603936728807933ull, 8837376826155596893ull, 14786555362161470614ull, 5186563961023292271ull}}, {{17464940939338397820ull, 1823348995839720308ull, 13871508184274450364ull, 6483204951279115339ull}}, {{3384432100463445659ull, 2279186244799650386ull, 12727699211915675051ull, 8104006189098894174ull}}, {{6726956081217041441ull, 17565392467495639155ull, 3343125989019909002ull, 5065003868186808859ull}}, {{3797009083093913897ull, 12733368547514773136ull, 18013965541557049965ull, 6331254835233511073ull}}, {{4746261353867392371ull, 2081652629111302708ull, 8682398871664148745ull, 7914068544041888842ull}}, {{12189785383021896040ull, 12830247939263033952ull, 10038185313217480869ull, 4946292840026180526ull}}, {{15237231728777370050ull, 2202751868796628728ull, 3324359604667075279ull, 6182866050032725658ull}}, {{599795587262160947ull, 16588497891277949623ull, 13378821542688619906ull, 7728582562540907072ull}}, {{7292401269679932448ull, 14979497200476106418ull, 8361763464180387441ull, 4830364101588066920ull}}, {{18338873623954691368ull, 4889313445312969310ull, 10452204330225484302ull, 6037955126985083650ull}}, {{13700219993088588401ull, 15335013843495987446ull, 3841883375927079569ull, 7547443908731354563ull}}, {{3950951477252979847ull, 2666854624543910298ull, 95334100740730779ull, 4717152442957096602ull}}, {{14162061383421000617ull, 17168626335962051584ull, 9342539662780689281ull, 5896440553696370752ull}}, {{17702576729276250771ull, 7625724864670400768ull, 11678174578475861602ull, 7370550692120463440ull}}, {{3681476837885761847ull, 308784043983225153ull, 14597718223094827003ull, 9213188365150579300ull}}, {{13830138069747070915ull, 16333891091985373384ull, 18346945926289042684ull, 5758242728219112062ull}}, {{17287672587183838643ull, 1970619791272165114ull, 13710310371006527548ull, 7197803410273890078ull}}, {{12386218697125022496ull, 2463274739090206393ull, 7914515926903383627ull, 8997254262842362598ull}}, {{823857658062057204ull, 17680447776427236660ull, 334886435887226862ull, 5623283914276476624ull}}, {{1029822072577571505ull, 12877187683679270017ull, 418608044859033578ull, 7029104892845595780ull}}, {{5898963609149352285ull, 6873112567744311713ull, 523260056073791973ull, 8786381116056994725ull}}, {{15216067301786814939ull, 6601538364053888772ull, 2632880544259813935ull, 5491488197535621703ull}}, {{573340053523967057ull, 3640236936639973062ull, 17126158735606931131ull, 6864360246919527128ull}}, {{9940047103759734629ull, 18385354226082130039ull, 2960954345799112297ull, 8580450308649408911ull}}, {{13130058467490915999ull, 4573317363660249418ull, 8768125493765527042ull, 5362781442905880569ull}}, {{7189201047508869191ull, 14940018741430087581ull, 15571842885634296706ull, 6703476803632350711ull}}, {{13598187327813474393ull, 9451651389932833668ull, 14853117588615482979ull, 8379346004540438389ull}}, {{17722239116738197304ull, 3601439109494327090ull, 11589041502098370814ull, 5237091252837773993ull}}, {{12929426859067970822ull, 13725170923722684671ull, 651243822340799805ull, 6546364066047217492ull}}, {{11550097555407575623ull, 3321405599371192127ull, 814054777925999757ull, 8182955082559021865ull}}, {{14136339999770816620ull, 4381721508820689031ull, 12037999282272219608ull, 5114346926599388665ull}}, {{13058738981286132871ull, 5477151886025861289ull, 1212441047558110798ull, 6392933658249235832ull}}, {{2488365671325502377ull, 16069811894387102420ull, 1515551309447638497ull, 7991167072811544790ull}}, {{10778600581433214794ull, 3126103406350857156ull, 14782277623686937773ull, 4994479420507215493ull}}, {{13473250726791518492ull, 8519315276365959349ull, 4642788974326508504ull, 6243099275634019367ull}}, {{3006505353207234403ull, 10649144095457449187ull, 1191800199480747726ull, 7803874094542524209ull}}, {{18019966910250379166ull, 2044029041233517837ull, 12274090170743937089ull, 4877421309089077630ull}}, {{8689900582530810246ull, 7166722319969285201ull, 6119240676575145553ull, 6096776636361347038ull}}, {{15474061746590900711ull, 13570088918388994405ull, 16872422882573707749ull, 7620970795451683797ull}}, {{11977131600833006896ull, 10787148583206815455ull, 12851107310822261295ull, 4763106747157302373ull}}, {{10359728482613870716ull, 8872249710581131415ull, 2228826083245662907ull, 5953883433946627967ull}}, {{8337974584839950491ull, 6478626119799026365ull, 16621090659339242346ull, 7442354292433284958ull}}, {{7517077124738663009ull, 8660827343301779382ull, 5776495643659638562ull, 4651471432770803099ull}}, {{172974369068552954ull, 1602662142272448420ull, 2608933536147160299ull, 5814339290963503874ull}}, {{216217961335691192ull, 15838385733122724237ull, 12484538957038726181ull, 7267924113704379842ull}}, {{4881958470097001894ull, 5962924111121241584ull, 6382301659443631919ull, 9084905142130474803ull}}, {{3051224043810626184ull, 10644356597091857846ull, 1683095527938575997ull, 5678065713831546752ull}}, {{13037402091618058538ull, 17917131764792210211ull, 2103869409923219996ull, 7097582142289433440ull}}, {{11685066596095185268ull, 3949670632280711148ull, 2629836762404024996ull, 8871977677861791800ull}}, {{16526538659414266601ull, 11691916182030220275ull, 1643647976502515622ull, 5544986048663619875ull}}, {{16046487305840445347ull, 5391523190682999536ull, 15889618025910308240ull, 6931232560829524843ull}}, {{1611365058591005067ull, 6739403988353749421ull, 15250336513960497396ull, 8664040701036906054ull}}, {{3312946170833072119ull, 13435499529575869196ull, 4919774302797922968ull, 5415025438148066284ull}}, {{4141182713541340149ull, 16794374411969836495ull, 6149717878497403710ull, 6768781797685082855ull}}, {{564792373499287282ull, 11769595978107519811ull, 3075461329694366734ull, 8460977247106353569ull}}, {{16493896297932912215ull, 2744311467889811977ull, 13451378377127448969ull, 5288110779441470980ull}}, {{6782312317133976557ull, 8042075353289652876ull, 16814222971409311211ull, 6610138474301838725ull}}, {{8477890396417470696ull, 5440908173184678191ull, 7182720658979475302ull, 8262673092877298407ull}}, {{12216210525402001041ull, 17235625663522587581ull, 11406729439503253919ull, 5164170683048311504ull}}, {{1435205101470337590ull, 16932846060975846573ull, 14258411799379067399ull, 6455213353810389380ull}}, {{6405692395265309891ull, 16554371557792420312ull, 17823014749223834249ull, 8069016692262986725ull}}, {{4003557747040818682ull, 3428953195979180839ull, 13445227227478590358ull, 5043135432664366703ull}}, {{392761165373635448ull, 13509563531828751857ull, 12194848015920850043ull, 6303919290830458379ull}}, {{5102637475144432214ull, 12275268396358551917ull, 10631874001473674650ull, 7879899113538072974ull}}, {{5494991431178964086ull, 12283728766151482852ull, 2033235232493658752ull, 4924936945961295609ull}}, {{6868739288973705107ull, 15354660957689353565ull, 7153230059044461344ull, 6156171182451619511ull}}, {{13197610129644519288ull, 746582123402140340ull, 4329851555378188777ull, 7695213978064524389ull}}, {{17471878367882600363ull, 11995828873194807472ull, 5012000231325061937ull, 4809508736290327743ull}}, {{3393103886143698838ull, 1159728036211345629ull, 1653314270728939518ull, 6011885920362909679ull}}, {{8853065876107011451ull, 10673032082118957844ull, 15901700893693338109ull, 7514857400453637098ull}}, {{14756538209421657965ull, 8976488060538042604ull, 14550249076985724222ull, 4696785875283523186ull}}, {{18445672761777072457ull, 1997238038817777447ull, 8964439309377379470ull, 5870982344104403983ull}}, {{18445404933793952667ull, 11719919585376997617ull, 6593863118294336433ull, 7338727930130504979ull}}, {{9221698111960277121ull, 814841426439083310ull, 3630642879440532638ull, 9173409912663131224ull}}, {{1151875301547785297ull, 14344333946806590781ull, 2269151799650332898ull, 5733381195414457015ull}}, {{6051530145362119525ull, 8707045396653462668ull, 16671497804845079835ull, 7166726494268071268ull}}, {{7564412681702649406ull, 6272120727389440431ull, 2392628182346798178ull, 8958408117835089086ull}}, {{11645286953705237735ull, 8531761473045788173ull, 15330450669248912573ull, 5599005073646930678ull}}, {{721550636849383457ull, 15276387859734623121ull, 9939691299706364908ull, 6998756342058663348ull}}, {{5513624314489117225ull, 648740750958727285ull, 12424614124632956136ull, 8748445427573329185ull}}, {{5751858205769392218ull, 405462969349204553ull, 847854800254515729ull, 5467778392233330741ull}}, {{11801508775639128176ull, 5118514730113893595ull, 5671504518745532565ull, 6834722990291663426ull}}, {{10140199951121522316ull, 11009829431069754898ull, 16312752685286691514ull, 8543403737864579282ull}}, {{10949310987878339351ull, 11492829412845984715ull, 14807156446731570100ull, 5339627336165362051ull}}, {{9074952716420536285ull, 14366036766057480894ull, 13897259539987074721ull, 6674534170206702564ull}}, {{2120318858670894548ull, 4122487902289687406ull, 17371574424983843402ull, 8343167712758378205ull}}, {{15160257341951472805ull, 7188240957358442532ull, 13163077024828596078ull, 5214479820473986378ull}}, {{503577603729789390ull, 18208673233552828974ull, 7230474244180969289ull, 6518099775592482973ull}}, {{9852844041517012545ull, 8925783486658872505ull, 13649778823653599516ull, 8147624719490603716ull}}, {{17687242572016602601ull, 14801986716016571123ull, 17754483801638275505ull, 5092265449681627322ull}}, {{17497367196593365347ull, 4667425339738550192ull, 12969732715193068574ull, 6365331812102034153ull}}, {{3424964922032155068ull, 15057653711527963549ull, 2377107838709172005ull, 7956664765127542692ull}}, {{4446446085483790870ull, 11716876578918671170ull, 10709064436048008311ull, 4972915478204714182ull}}, {{14781429643709514395ull, 10034409705220951058ull, 4162958508205234581ull, 6216144347755892728ull}}, {{9253415017782117185ull, 17154698149953576727ull, 5203698135256543226ull, 7770180434694865910ull}}, {{12700913413754905097ull, 15333372362148373358ull, 17087369389817503228ull, 4856362771684291193ull}}, {{6652769730338855563ull, 719971378975915082ull, 7524153681989715324ull, 6070453464605363992ull}}, {{17539334199778345262ull, 899964223719893852ull, 9405192102487144155ull, 7588066830756704990ull}}, {{1738711838006689981ull, 16703378704320791322ull, 1266559045627077192ull, 4742541769222940619ull}}, {{11396761834363138284ull, 2432479306691437536ull, 15418256862316010203ull, 5928177211528675773ull}}, {{14245952292953922855ull, 16875657188646460632ull, 5437763022612849041ull, 7410221514410844717ull}}, {{8903720183096201784ull, 3629756715262956039ull, 5704444898346724603ull, 4631388446506777948ull}}, {{6517964210442864326ull, 18372253949360858761ull, 7130556122933405753ull, 5789235558133472435ull}}, {{12759141281480968312ull, 9130259381418909739ull, 4301509135239369288ull, 7236544447666840544ull}}, {{11337240583423822486ull, 11412824226773637174ull, 5376886419049211610ull, 9045680559583550680ull}}, {{2474089346212501150ull, 11744701160160911138ull, 3360554011905757256ull, 5653550349739719175ull}}, {{12315983719620402245ull, 14680876450201138922ull, 18035750570164360282ull, 7066937937174648968ull}}, {{6171607612670726998ull, 9127723525896647845ull, 4097944138995898737ull, 8833672421468311211ull}}, {{6163097767132898326ull, 17234042249753874663ull, 255372077658742758ull, 5521045263417694507ull}}, {{3092186190488735004ull, 12319180775337567521ull, 14154273152355592160ull, 6901306579272118133ull}}, {{8476918756538306658ull, 15398975969171959401ull, 3857783385162326488ull, 8626633224090147667ull}}, {{16827289268904911422ull, 9624359980732474625ull, 105271606512760103ull, 5391645765056342292ull}}, {{7199053530848975565ull, 7418763957488205378ull, 131589508140950129ull, 6739557206320427865ull}}, {{18222188950415995264ull, 13885140965287644626ull, 4776172903603575565ull, 8424446507900534831ull}}, {{16000554112437384944ull, 10984056112518471843ull, 9902637092393316584ull, 5265279067437834269ull}}, {{15389006622119343276ull, 13730070140648089804ull, 16989982383919033634ull, 6581598834297292836ull}}, {{789514203939627479ull, 7939215638955336448ull, 2790733906189240427ull, 8226998542871616046ull}}, {{493446377462267175ull, 2656166765133391328ull, 15579266746650438979ull, 5141874089294760028ull}}, {{616807971827833968ull, 17155266511698902872ull, 1027339359603497107ull, 6427342611618450036ull}}, {{771009964784792460ull, 16832397121196240686ull, 1284174199504371384ull, 8034178264523062545ull}}, {{14316939283272659000ull, 10520248200747650428ull, 12331823920758701875ull, 5021361415326914090ull}}, {{17896174104090823750ull, 8538624232507175131ull, 6191407864093601536ull, 6276701769158642613ull}}, {{17758531611686141783ull, 10673280290633968914ull, 12350945848544389824ull, 7845877211448303266ull}}, {{15710768275731226518ull, 6670800181646230571ull, 12331027173767631544ull, 4903673257155189541ull}}, {{15026774326236645244ull, 8338500227057788214ull, 1578725911927375718ull, 6129591571443986927ull}}, {{9560095870941030747ull, 1199753246967459460ull, 15808465445191383360ull, 7661989464304983658ull}}, {{15198431956192920025ull, 749845779354662162ull, 14491976921672002504ull, 4788743415190614786ull}}, {{9774667908386374223ull, 937307224193327703ull, 8891599115235227322ull, 5985929268988268483ull}}, {{7606648867055579875ull, 10395006067096435437ull, 6502812875616646248ull, 7482411586235335604ull}}, {{7059998551123431374ull, 6496878791935272148ull, 13287630084115179713ull, 4676507241397084752ull}}, {{8824998188904289217ull, 12732784508346478089ull, 16609537605143974641ull, 5845634051746355940ull}}, {{15642933754557749425ull, 2080922580150933899ull, 2315177932720416686ull, 7307042564682944926ull}}, {{14941981174769798878ull, 11824525262043443182ull, 12117344452755296665ull, 9133803205853681157ull}}, {{4727052215803736395ull, 472799261136070133ull, 9879183292185754368ull, 5708627003658550723ull}}, {{10520501288182058397ull, 590999076420087666ull, 7737293096804805056ull, 7135783754573188404ull}}, {{3927254573372797188ull, 738748845525109583ull, 9671616371006006320ull, 8919729693216485505ull}}, {{9372063135999080099ull, 461718028453193489ull, 17573975277947223710ull, 5574831058260303440ull}}, {{16326764938426238028ull, 9800519572421267669ull, 3520725023724478021ull, 6968538822825379301ull}}, {{6573398117750633822ull, 16862335483953972491ull, 9012592298082985430ull, 8710673528531724126ull}}, {{1802530814380452187ull, 5927273659043844903ull, 1021184167874477990ull, 5444170955332327579ull}}, {{16088221573257728946ull, 16632464110659581936ull, 15111538265125261199ull, 6805213694165409473ull}}, {{1663532892862609566ull, 16178894119897089517ull, 5054364776124412787ull, 8506517117706761842ull}}, {{3345551067252824931ull, 7805965815721986996ull, 7770664003505145896ull, 5316573198566726151ull}}, {{4181938834066031164ull, 9757457269652483745ull, 5101643985954044466ull, 6645716498208407689ull}}, {{9839109561009926858ull, 2973449550210828873ull, 10988741000869943487ull, 8307145622760509611ull}}, {{17678658521699674047ull, 8775934996522849901ull, 4562120116330020727ull, 5191966014225318507ull}}, {{8263265096842428846ull, 6358232727226174473ull, 1090964126985138005ull, 6489957517781648134ull}}, {{14940767389480423962ull, 12559476927460105995ull, 10587077195586198314ull, 8112446897227060167ull}}, {{7032136609211571024ull, 12461359098089954151ull, 13534452274882455802ull, 5070279310766912604ull}}, {{4178484743087075876ull, 6353326835757666881ull, 16918065343603069753ull, 6337849138458640755ull}}, {{9834791947286232749ull, 12553344563124471505ull, 16535895661076449287ull, 7922311423073300944ull}}, {{17675960013122365228ull, 14763369379593876546ull, 10334934788172780804ull, 4951444639420813090ull}}, {{12871577979548180727ull, 7467650782794067ull, 3695296448361200198ull, 6189305799276016363ull}}, {{11477786456007838005ull, 9232706600333268392ull, 7434542024112343ull, 7736632249095020454ull}}, {{7173616535004898753ull, 12687970652849374601ull, 13839704644047233926ull, 4835395155684387783ull}}, {{13578706687183511346ull, 6636591279206942443ull, 12687944786631654504ull, 6044243944605484729ull}}, {{12361697340552001278ull, 8295739099008678054ull, 2024872928007404418ull, 7555304930756855912ull}}, {{3114374819417612895ull, 9796522955307811688ull, 1265545580004627761ull, 4722065581723034945ull}}, {{3892968524272016118ull, 16857339712562152514ull, 6193617993433172605ull, 5902581977153793681ull}}, {{14089582692194795956ull, 7236616585420526930ull, 12353708510218853661ull, 7378227471442242101ull}}, {{8388606328388719137ull, 13657456750203046567ull, 1607077582491403364ull, 9222784339302802627ull}}, {{12160407982884031317ull, 17759282505731679912ull, 17145324553552984766ull, 5764240212064251641ull}}, {{15200509978605039146ull, 12975731095309824082ull, 7596597636659067246ull, 7205300265080314552ull}}, {{9777265436401523124ull, 6996291832282504295ull, 9495747045823834058ull, 9006625331350393190ull}}, {{13028319925392033809ull, 8984368413603953088ull, 1323155885212508382ull, 5629140832093995744ull}}, {{16285399906740042261ull, 2007088480150165552ull, 1653944856515635478ull, 7036426040117494680ull}}, {{1910005809715501210ull, 11732232637042482749ull, 2067431070644544347ull, 8795532550146868350ull}}, {{3499596640285882208ull, 5026802388937857766ull, 15127202474435003929ull, 5497207843841792718ull}}, {{13597867837212128568ull, 10895189004599710111ull, 9685631056188979103ull, 6871509804802240898ull}}, {{12385648778087772806ull, 9007300237322249735ull, 2883666783381448071ull, 8589387256002801123ull}}, {{14658559513945939860ull, 12547091675967487940ull, 17943192804109262708ull, 5368367035001750701ull}}, {{18323199392432424825ull, 15683864594959359925ull, 8593932949854414673ull, 6710458793752188377ull}}, {{9068941185258367319ull, 5769772688417036195ull, 15354102205745406246ull, 8388073492190235471ull}}, {{3362245231572785623ull, 17441165985542811334ull, 16513842906231960759ull, 5242545932618897169ull}}, {{13426178576320757836ull, 17189771463501126263ull, 6807245577507787237ull, 6553182415773621462ull}}, {{12171037201973559391ull, 7652156274094244117ull, 17732429008739509855ull, 8191478019717026827ull}}, {{9912741260447168572ull, 11700126698949984429ull, 8776925121248499707ull, 5119673762323141767ull}}, {{17002612593986348618ull, 10013472355260092632ull, 6359470383133236730ull, 6399592202903927209ull}}, {{2806521668773384157ull, 3293468407220339983ull, 12561023997343933817ull, 7999490253629909011ull}}, {{8671605070624446954ull, 13587632800581182249ull, 5544796989126264683ull, 4999681408518693132ull}}, {{15451192356707946597ull, 12372854982299089907ull, 6930996236407830854ull, 6249601760648366415ull}}, {{14702304427457545342ull, 6242696691019086576ull, 4052059277082400664ull, 7812002200810458019ull}}, {{9188940267160965839ull, 3901685431886929110ull, 226694038962806463ull, 4882501375506536262ull}}, {{2262803297096431490ull, 265420771431273484ull, 9506739585558283887ull, 6103126719383170327ull}}, {{2828504121370539363ull, 14166834019571255567ull, 7271738463520466954ull, 7628908399228962909ull}}, {{8685344103497668958ull, 13465957280659422633ull, 6850679548913985798ull, 4768067749518101818ull}}, {{15468366147799474101ull, 7609074563969502483ull, 17786721472997258056ull, 5960084686897627272ull}}, {{14723771666321954722ull, 9511343204961878104ull, 3786657767537020954ull, 7450105858622034091ull}}, {{9202357291451221702ull, 10556275521528561719ull, 60818095496944144ull, 4656316161638771307ull}}, {{6891260595886639223ull, 13195344401910702149ull, 13911080674653343892ull, 5820395202048464133ull}}, {{13225761763285686933ull, 16494180502388377686ull, 3553792788034516153ull, 7275494002560580167ull}}, {{7308830167252332858ull, 6782667572703308396ull, 18277299040325308904ull, 9094367503200725208ull}}, {{13791390891387483844ull, 4239167232939567747ull, 11423311900203318065ull, 5683979689500453255ull}}, {{12627552595806966901ull, 9910645059601847588ull, 9667453856826759677ull, 7104974611875566569ull}}, {{15784440744758708626ull, 16999992342929697389ull, 16696003339460837500ull, 8881218264844458211ull}}, {{12171118474687886844ull, 1401623177476285060ull, 8129159077949329486ull, 5550761415527786382ull}}, {{15213898093359858554ull, 10975401008700132133ull, 938076810581886049ull, 6938451769409732978ull}}, {{5182314561417659481ull, 18330937279302553071ull, 10395968050082133369ull, 8673064711762166222ull}}, {{10156475628527119032ull, 4539306771923013813ull, 1885794012873945452ull, 5420665444851353889ull}}, {{17307280554086286694ull, 5674133464903767266ull, 6968928534519819719ull, 6775831806064192361ull}}, {{12410728655753082559ull, 2480980812702321179ull, 13322846686577162553ull, 8469789757580240451ull}}, {{5450862400631982647ull, 13079828054007420497ull, 6020936169897032643ull, 5293618598487650282ull}}, {{11425264019217366213ull, 11738099049081887717ull, 16749542249226066612ull, 6617023248109562852ull}}, {{446521968739544054ull, 14672623811352359647ull, 2490183737823031649ull, 8271279060136953566ull}}, {{7196605258103296890ull, 2252860854454142923ull, 15391422891421558493ull, 5169549412585595978ull}}, {{4384070554201733209ull, 7427762086495066558ull, 10015906577422172308ull, 6461936765731994973ull}}, {{14703460229606942319ull, 9284702608118833197ull, 17131569240205103289ull, 8077420957164993716ull}}, {{11495505652718032901ull, 17332154176142740508ull, 1483858738273413747ull, 5048388098228121073ull}}, {{14369382065897541126ull, 17053506701751037731ull, 6466509441269155088ull, 6310485122785151341ull}}, {{13350041563944538504ull, 2870139303479245548ull, 12694822820013831765ull, 7888106403481439176ull}}, {{17567148014320112373ull, 4099680073888222419ull, 7934264262508644853ull, 4930066502175899485ull}}, {{17347248999472752562ull, 9736286110787665928ull, 14529516346563193970ull, 6162583127719874356ull}}, {{3237317175631389087ull, 2946985601629806603ull, 18161895433203992463ull, 7703228909649842945ull}}, {{18164224299265475843ull, 8759395028659710982ull, 4433655618111413433ull, 4814518068531151841ull}}, {{13481908337227068996ull, 15560929804252026632ull, 10153755541066654695ull, 6018147585663939801ull}}, {{16852385421533836245ull, 14839476236887645386ull, 17303880444760706273ull, 7522684482079924751ull}}, {{15144426906886035557ull, 2357143620413696510ull, 17732454305616523277ull, 4701677801299952969ull}}, {{9707161596752768639ull, 7558115543944508542ull, 8330509826738490384ull, 5877097251624941212ull}}, {{2910579959086184990ull, 9447644429930635678ull, 10413137283423112980ull, 7346371564531176515ull}}, {{12861596985712507045ull, 11809555537413294597ull, 8404735585851503321ull, 9182964455663970644ull}}, {{10344341125284010856ull, 463443183242227267ull, 14476331778011965384ull, 5739352784789981652ull}}, {{8318740388177625665ull, 579303979052784084ull, 18095414722514956730ull, 7174190980987477065ull}}, {{10398425485222032082ull, 9947502010670755913ull, 8784210347861532200ull, 8967738726234346332ull}}, {{18028230974332239811ull, 6217188756669222445ull, 14713503504268233433ull, 5604836703896466457ull}}, {{8700230662633136052ull, 12383171964263915961ull, 4556821325053128079ull, 7006045879870583072ull}}, {{15486974346718807969ull, 10867278936902507047ull, 5696026656316410099ull, 8757557349838228840ull}}, {{16596887994340336837ull, 4486206326350372952ull, 3560016660197756312ull, 5473473343648893025ull}}, {{2299365919215869430ull, 5607757907937966191ull, 9061706843674583294ull, 6841841679561116281ull}}, {{16709265454302000499ull, 16233069421777233546ull, 15938819573020617021ull, 8552302099451395351ull}}, {{15054976927366138216ull, 12451511397824464918ull, 16879291260778967494ull, 5345188812157122094ull}}, {{9595349122352896962ull, 6341017210425805340ull, 11875742039118933560ull, 6681486015196402618ull}}, {{11994186402941121202ull, 7926271513032256675ull, 5621305512043891142ull, 8351857518995503273ull}}, {{5190523492624506800ull, 342233677217772518ull, 15042530991095901724ull, 5219910949372189545ull}}, {{15711526402635409307ull, 427792096522215647ull, 4968105683587713443ull, 6524888686715236932ull}}, {{15027721984866873730ull, 14369798175934933271ull, 6210132104484641803ull, 8156110858394046165ull}}, {{16309855268182877938ull, 6675280850745639342ull, 6187175574516595079ull, 5097569286496278853ull}}, {{11163947048373821614ull, 3732415045004661274ull, 12345655486573131753ull, 6371961608120348566ull}}, {{4731561773612501209ull, 9277204824683214497ull, 6208697321361638883ull, 7964952010150435708ull}}, {{14486441154576283016ull, 3492410006213315108ull, 13103807862705800110ull, 4978095006344022317ull}}, {{18108051443220353770ull, 13588884544621419693ull, 2544701773100086425ull, 6222618757930027897ull}}, {{8800006248743278500ull, 3151047625494610905ull, 7792563234802495936ull, 7778273447412534871ull}}, {{17029218951533018823ull, 1969404765934131815ull, 11787881049392641816ull, 4861420904632834294ull}}, {{16674837670988885624ull, 2461755957417664769ull, 5511479274886026462ull, 6076776130791042868ull}}, {{7008489033453943318ull, 12300566983626856770ull, 6889349093607533077ull, 7595970163488803585ull}}, {{8991991664336102478ull, 9993697373980479433ull, 15835058229573177933ull, 4747481352180502240ull}}, {{15851675598847516001ull, 17103807735902987195ull, 1347078713256920800ull, 5934351690225627801ull}}, {{15202908480132007098ull, 2933015596169182378ull, 6295534409998538905ull, 7417939612782034751ull}}, {{14113503818509892340ull, 13362349793674208746ull, 10852238033890168671ull, 4636212257988771719ull}}, {{8418507736282589617ull, 12091251223665373029ull, 8953611523935322935ull, 5795265322485964649ull}}, {{15134820688780624925ull, 10502378011154328382ull, 15803700423346541573ull, 7244081653107455811ull}}, {{9695153824121005349ull, 17739658532370298382ull, 15142939510755789062ull, 9055102066384319764ull}}, {{1447785121648240439ull, 6475600564304048585ull, 240965157367592356ull, 5659438791490199853ull}}, {{6421417420487688453ull, 8094500705380060731ull, 4912892465136878349ull, 7074298489362749816ull}}, {{3415085757182222662ull, 14729811900152463818ull, 6141115581421097936ull, 8842873111703437270ull}}, {{6746114616666277068ull, 9206132437595289886ull, 17673255293670349922ull, 5526795694814648293ull}}, {{17656015307687622143ull, 2284293510139336549ull, 8256511061805773691ull, 6908494618518310367ull}}, {{8234961079327363966ull, 16690424942956334399ull, 5708952808829829209ull, 8635618273147887959ull}}, {{12064379702220684335ull, 3513986561706627143ull, 10485624533159725112ull, 5397261420717429974ull}}, {{10468788609348467515ull, 4392483202133283929ull, 3883658629594880582ull, 6746576775896787468ull}}, {{17697671780112972297ull, 14713976039521380719ull, 4854573286993600727ull, 8433220969870984335ull}}, {{17978573890211689542ull, 16113764052341944805ull, 9951637332012082310ull, 5270763106169365209ull}}, {{8638159307482448215ull, 10918833028572655199ull, 17051232683442490792ull, 6588453882711706511ull}}, {{6186013115925672365ull, 13648541285715818999ull, 16702354835875725586ull, 8235567353389633139ull}}, {{10783787225094627084ull, 13142024321999774778ull, 8133128763208634539ull, 5147229595868520712ull}}, {{4256361994513508047ull, 11815844384072330569ull, 10166410954010793174ull, 6434036994835650890ull}}, {{9932138511569272963ull, 5546433443235637403ull, 3484641655658715660ull, 8042546243544563613ull}}, {{3901743560517101650ull, 12689892938877049185ull, 4483744044000391239ull, 5026591402215352258ull}}, {{9488865469073764966ull, 11250680155168923577ull, 14828052091855264857ull, 6283239252769190322ull}}, {{16472767854769594112ull, 228292138678990759ull, 9311693077964305264ull, 7854049065961487903ull}}, {{17213008936872078176ull, 142682586674369224ull, 12737337201368772646ull, 4908780666225929939ull}}, {{3069517097380546104ull, 9401725270197737339ull, 11309985483283577903ull, 6135975832782412424ull}}, {{17671954427007846342ull, 7140470569319783769ull, 14137481854104472379ull, 7669969790978015530ull}}, {{4127442489238822108ull, 2156951096611170904ull, 13447612177242683141ull, 4793731119361259706ull}}, {{5159303111548527635ull, 7307874889191351534ull, 7586143184698578118ull, 5992163899201574633ull}}, {{15672500926290435351ull, 18358215648343965225ull, 14094364999300610551ull, 7490204874001968291ull}}, {{2877784051290440239ull, 18391413807856060122ull, 6503135115349187642ull, 4681378046251230182ull}}, {{12820602100967826106ull, 13765895222965299344ull, 17352290931041260361ull, 5851722557814037727ull}}, {{16025752626209782633ull, 3372310973424460468ull, 17078677645374187548ull, 7314653197267547159ull}}, {{1585446709052676675ull, 4215388716780575586ull, 16736661038290346531ull, 9143316496584433949ull}}, {{5602590211585310826ull, 328774938774165789ull, 12766256158145160534ull, 5714572810365271218ull}}, {{11614923782909026436ull, 9634340710322483044ull, 6734448160826674859ull, 7143216012956589023ull}}, {{14518654728636283045ull, 7431239869475715901ull, 3806374182605955670ull, 8929020016195736279ull}}, {{11380002214611370855ull, 32838899994934534ull, 9296512891769804150ull, 5580637510122335174ull}}, {{5001630731409437761ull, 9264420661848443976ull, 2397269077857479379ull, 6975796887652918968ull}}, {{6252038414261797201ull, 6968839808883167066ull, 2996586347321849224ull, 8719746109566148710ull}}, {{8519210027341011155ull, 4355524880551979416ull, 15707924522358319477ull, 5449841318478842943ull}}, {{10649012534176263944ull, 10056092119117362174ull, 15023219634520511442ull, 6812301648098553679ull}}, {{4087893630865554121ull, 3346743112041926910ull, 14167338524723251399ull, 8515377060123192099ull}}, {{16389991574573135038ull, 9009243472667286174ull, 6548743568738338172ull, 5322110662576995062ull}}, {{11264117431361642989ull, 11261554340834107718ull, 17409301497777698523ull, 6652638328221243827ull}}, {{4856774752347277929ull, 9465256907615246744ull, 17149940853794735250ull, 8315797910276554784ull}}, {{3035484220217048706ull, 10527471585686917119ull, 10718713033621709531ull, 5197373693922846740ull}}, {{17629413330553474594ull, 8547653463681258494ull, 13398391292027136914ull, 6496717117403558425ull}}, {{12813394626337067434ull, 1461194792746797310ull, 2912931059751757431ull, 8120896396754448032ull}}, {{3396685623033279243ull, 7830775773107830175ull, 1820581912344848394ull, 5075560247971530020ull}}, {{18080915084073762765ull, 565097679530011910ull, 2275727390431060493ull, 6344450309964412525ull}}, {{13377771818237427648ull, 5318058117839902792ull, 7456345256466213520ull, 7930562887455515656ull}}, {{8361107386398392280ull, 3323786323649939245ull, 4660215785291383450ull, 4956601804659697285ull}}, {{15063070251425378254ull, 13378104941417199864ull, 10436955750041617216ull, 6195752255824621606ull}}, {{382093740572171202ull, 16722631176771499831ull, 3822822650697245712ull, 7744690319780777008ull}}, {{7156337615498688857ull, 10451644485482187394ull, 2389264156685778570ull, 4840431449862985630ull}}, {{18168794056228136880ull, 3841183569997958434ull, 12209952232711999021ull, 6050539312328732037ull}}, {{13487620533430395291ull, 9413165480924835947ull, 1427382235607835064ull, 7563174140410915047ull}}, {{6123919824180303105ull, 5883228425578022467ull, 7809642924895978771ull, 4726983837756821904ull}}, {{3043213761797990977ull, 2742349513545140180ull, 9762053656119973464ull, 5908729797196027380ull}}, {{3804017202247488722ull, 3427936891931425225ull, 12202567070149966830ull, 7385912246495034225ull}}, {{13906725797473150211ull, 15977518612739304477ull, 709075391202647412ull, 4616195154059396391ull}}, {{3548349191559274052ull, 1525154192214578981ull, 14721402294285472978ull, 5770243942574245488ull}}, {{9047122507876480469ull, 11129814777122999534ull, 18401752867856841222ull, 7212804928217806860ull}}, {{2085531097990824778ull, 4688896434548973610ull, 4555447011111499912ull, 9016006160272258576ull}}, {{5915142954671653390ull, 2930560271593108506ull, 2847154381944687445ull, 5635003850170161610ull}}, {{16617300730194342546ull, 8274886357918773536ull, 12782315014285635114ull, 7043754812712702012ull}}, {{2324881839033376566ull, 1120235910543691113ull, 15977893767857043893ull, 8804693515890877515ull}}, {{12982266195464330114ull, 3005990453303500897ull, 7680340595696958481ull, 5502933447431798447ull}}, {{2392774689048248930ull, 8369174085056764026ull, 4988739726193810197ull, 6878666809289748059ull}}, {{12214340398165086971ull, 15073153624748342936ull, 1624238639314874842ull, 8598333511612185074ull}}, {{7633962748853179357ull, 14032407033895102239ull, 5626835167999184680ull, 5373958444757615671ull}}, {{4930767417639086292ull, 17540508792368877799ull, 2421857941571592946ull, 6717448055947019589ull}}, {{1551773253621469961ull, 12702263953606321441ull, 7639008445391879087ull, 8396810069933774486ull}}, {{12499073329581888486ull, 14856443998645032756ull, 162694259942536525ull, 5248006293708609054ull}}, {{15623841661977360607ull, 4735496943024127233ull, 9426739861782946465ull, 6560007867135761317ull}}, {{5694744022189537047ull, 10531057197207546946ull, 16395110845656070985ull, 8200009833919701646ull}}, {{8170901032295848558ull, 18111125794323186601ull, 5635258260107656461ull, 5125006146199813529ull}}, {{14825312308797198602ull, 8803849187621819539ull, 11655758843561958481ull, 6406257682749766911ull}}, {{13919954367569110348ull, 15616497502954662328ull, 9958012536025060197ull, 8007822103437208639ull}}, {{8699971479730693968ull, 12066153948560357907ull, 13141286862656744479ull, 5004888814648255399ull}}, {{6263278331235979556ull, 10471006417273059480ull, 11814922559893542695ull, 6256111018310319249ull}}, {{7829097914044974444ull, 8477072003163936446ull, 933595144584764657ull, 7820138772887899062ull}}, {{281500177850721124ull, 16827385048045930039ull, 14418555020647641622ull, 4887586733054936913ull}}, {{14186933277595565117ull, 11810859273202636740ull, 4188135720527388316ull, 6109483416318671142ull}}, {{17733666596994456396ull, 14763574091503295925ull, 14458541687514011203ull, 7636854270398338927ull}}, {{13389384632335229200ull, 6921390797975866001ull, 15954117582337338858ull, 4773033918998961829ull}}, {{2901672735136872787ull, 17875110534324608310ull, 6107588922639509860ull, 5966292398748702287ull}}, {{12850462955775866792ull, 3897144094196208771ull, 3022800134871999422ull, 7457865498435877859ull}}, {{5725696338146222793ull, 16270773114154794194ull, 18030151148790857302ull, 4661165936522423661ull}}, {{16380492459537554299ull, 11115094355838716934ull, 8702630880706407916ull, 5826457420653029577ull}}, {{11252243537567167066ull, 13893867944798396168ull, 15489974619310397799ull, 7283071775816286971ull}}, {{14065304421958958833ull, 12755648912570607306ull, 14750782255710609345ull, 9103839719770358714ull}}, {{13402501282151737175ull, 1054751542715547710ull, 13830924928246518745ull, 5689899824856474196ull}}, {{7529754565834895660ull, 5930125446821822542ull, 17288656160308148431ull, 7112374781070592745ull}}, {{188821170438843767ull, 2800970790099890274ull, 7775762145103021827ull, 8890468476338240932ull}}, {{4729699249951665259ull, 17891507808308289085ull, 14083223377544164449ull, 5556542797711400582ull}}, {{10523810080866969477ull, 8529326705103197644ull, 8380657185075429754ull, 6945678497139250728ull}}, {{13154762601083711846ull, 1438286344524221247ull, 10475821481344287193ull, 8682098121424063410ull}}, {{15139255653318401760ull, 12428144011396108039ull, 11159074444267567399ull, 5426311325890039631ull}}, {{14312383548220614296ull, 10923493995817747145ull, 9337157036907071345ull, 6782889157362549539ull}}, {{4055421379993604158ull, 18266053513199571836ull, 7059760277706451277ull, 8478611446703186924ull}}, {{11758010399350778407ull, 13722126454963426349ull, 13635722210421307856ull, 5299132154189491827ull}}, {{862454943906309296ull, 17152658068704282937ull, 12432966744599246916ull, 6623915192736864784ull}}, {{5689754698310274524ull, 2994078512170802055ull, 15541208430749058646ull, 8279893990921080980ull}}, {{10473625714085003434ull, 15706357125388914996ull, 489883232363385845ull, 5174933744325675613ull}}, {{13092032142606254292ull, 5797888351453980033ull, 5224040058881620211ull, 6468667180407094516ull}}, {{2529982122975654153ull, 2635674420890087138ull, 6530050073602025264ull, 8085833975508868145ull}}, {{6192924845287171750ull, 1647296513056304461ull, 15610496342069735550ull, 5053646234693042590ull}}, {{12352842075036352591ull, 11282492678175156384ull, 10289748390732393629ull, 6317057793366303238ull}}, {{15441052593795440739ull, 268057792436781768ull, 3638813451560716229ull, 7896322241707879048ull}}, {{9650657871122150462ull, 2473379129486682557ull, 2274258407225447643ull, 4935201401067424405ull}}, {{16675008357330075982ull, 16926781967140516908ull, 7454509027459197457ull, 6169001751334280506ull}}, {{2397016372953043361ull, 7323419403643482424ull, 94764247469221014ull, 7711252189167850633ull}}, {{1498135233095652101ull, 18412195182559340227ull, 11588442700736732893ull, 4819532618229906645ull}}, {{15707727096651728838ull, 9180185922917011571ull, 650495320638752405ull, 6024415772787383307ull}}, {{15022972852387273143ull, 16086918422073652368ull, 14648177206080604218ull, 7530519715984229133ull}}, {{9389358032742045715ull, 14666010032223420634ull, 11460953763014071588ull, 4706574822490143208ull}}, {{2513325504072781335ull, 18332512540279275793ull, 14326192203767589485ull, 5883218528112679010ull}}, {{7753342898518364573ull, 9080582620066931029ull, 8684368217854711049ull, 7354023160140848763ull}}, {{14303364641575343620ull, 15962414293511051690ull, 6243774253891000907ull, 9192528950176060954ull}}, {{13551288919411977667ull, 7670665924230713354ull, 8514044927109263471ull, 5745330593860038096ull}}, {{7715739112410196275ull, 4976646386861003789ull, 10642556158886579339ull, 7181663242325047620ull}}, {{14256359908940133248ull, 1609121965148866832ull, 13303195198608224174ull, 8977079052906309525ull}}, {{8910224943087583280ull, 14840759283500205482ull, 10620340008343834060ull, 5610674408066443453ull}}, {{1914409142004703292ull, 104205030665705237ull, 17887111028857180480ull, 7013343010083054316ull}}, {{7004697445933267019ull, 130256288332131546ull, 3912144712361923984ull, 8766678762603817896ull}}, {{8989621922135679791ull, 81410180207582216ull, 2445090445226202490ull, 5479174226627386185ull}}, {{11237027402669599738ull, 9325134762114253578ull, 7668049074960141016ull, 6848967783284232731ull}}, {{4822912216482223865ull, 11656418452642816973ull, 4973375325272788366ull, 8561209729105290914ull}}, {{5320163144515083868ull, 2673575514474372704ull, 7720045596722880633ull, 5350756080690806821ull}}, {{6650203930643854835ull, 7953655411520353784ull, 14261743014330988695ull, 6688445100863508526ull}}, {{8312754913304818543ull, 5330383245973054326ull, 8603806731058960061ull, 8360556376079385658ull}}, {{583785802388123686ull, 5637332537946852906ull, 9989065225339237942ull, 5225347735049616036ull}}, {{9953104289839930415ull, 16270037709288341940ull, 12486331531674047427ull, 6531684668812020045ull}}, {{12441380362299913019ull, 15725861118183039521ull, 1772856359310395572ull, 8164605836015025057ull}}, {{858333698796363781ull, 605291162009623893ull, 12637250270637466993ull, 5102878647509390660ull}}, {{5684603141922842630ull, 5368299970939417770ull, 15796562838296833741ull, 6378598309386738325ull}}, {{16329125964258329095ull, 11322060982101660116ull, 5910645492588878464ull, 7973247886733422907ull}}, {{982331690806679877ull, 7076288113813537573ull, 1388310423654355088ull, 4983279929208389317ull}}, {{5839600631935737750ull, 8845360142266921966ull, 6347074047995331764ull, 6229099911510486646ull}}, {{16522872826774447995ull, 11056700177833652457ull, 17157214596848940513ull, 7786374889388108307ull}}, {{3409266489092948141ull, 18439652657214502546ull, 8417416113816893868ull, 4866484305867567692ull}}, {{13484955148220960984ull, 4602821747808576566ull, 10521770142271117336ull, 6083105382334459615ull}}, {{7632821898421425422ull, 5753527184760720708ull, 8540526659411508766ull, 7603881727918074519ull}}, {{13993885723368166697ull, 17431012545757614154ull, 12255358189773274834ull, 4752426079948796574ull}}, {{8268985117355432563ull, 12565393645342241885ull, 6095825700361817735ull, 5940532599935995718ull}}, {{14947917415121678608ull, 11095056038250414452ull, 16843154162307047977ull, 7425665749919994647ull}}, {{119076347596273322ull, 16880996265427177ull, 17444500379082986842ull, 4641041093699996654ull}}, {{4760531452922729557ull, 9244473282186559779ull, 12582253436998957744ull, 5801301367124995818ull}}, {{1338978297726024042ull, 11555591602733199724ull, 6504444759393921372ull, 7251626708906244773ull}}, {{1673722872157530052ull, 14444489503416499655ull, 12742241967669789619ull, 9064533386132805966ull}}, {{7963605822739538139ull, 6721962930421618332ull, 3352215211366230608ull, 5665333366333003729ull}}, {{9954507278424422673ull, 8402453663027022915ull, 8801955032635176164ull, 7081666707916254661ull}}, {{7831448079603140437ull, 10503067078783778644ull, 15614129809221358109ull, 8852083384895318326ull}}, {{14118027086606738581ull, 8870259933453555604ull, 5147145112335960914ull, 5532552115559573954ull}}, {{17647533858258423227ull, 1864452879962168697ull, 15657303427274726951ull, 6915690144449467442ull}}, {{8224359267540865321ull, 16165624155234874584ull, 10348257247238632880ull, 8644612680561834303ull}}, {{5140224542213040826ull, 10103515097021796615ull, 13385189807165227406ull, 5402882925351146439ull}}, {{1813594659338913128ull, 3406021834422469961ull, 12119801240529146354ull, 6753603656688933049ull}}, {{6878679342601029314ull, 13480899329882863259ull, 1314693495379269230ull, 8442004570861166312ull}}, {{1993331579911949370ull, 3813876062749401633ull, 821683434612043269ull, 5276252856788228945ull}}, {{7103350493317324616ull, 9379031096864139945ull, 5638790311692441990ull, 6595316070985286181ull}}, {{13490874135074043674ull, 2500416834225399123ull, 11660173908042940392ull, 8244145088731607726ull}}, {{6125953325207583344ull, 1562760521390874452ull, 2675922674099449841ull, 5152590680457254829ull}}, {{7657441656509479180ull, 6565136670165980969ull, 7956589361051700205ull, 6440738350571568536ull}}, {{14183488089064236879ull, 12818106856134864115ull, 9945736701314625256ull, 8050922938214460670ull}}, {{6558837046451454098ull, 8011316785084290072ull, 1604399419894252881ull, 5031826836384037919ull}}, {{8198546308064317622ull, 14625831999782750494ull, 15840557330149979813ull, 6289783545480047398ull}}, {{1024810848225621219ull, 4447231944446274406ull, 10577324625832698959ull, 7862229431850059248ull}}, {{14475564835423176974ull, 9697048992920003359ull, 6610827891145436849ull, 4913893394906287030ull}}, {{13482770025851583314ull, 16732997259577392103ull, 17486906900786571869ull, 6142366743632858787ull}}, {{12241776513887091238ull, 7081188519189576417ull, 17246947607555826933ull, 7677958429541073484ull}}, {{733581293538350168ull, 6731585833707179213ull, 1555970217867616025ull, 4798724018463170928ull}}, {{5528662635350325614ull, 13026168310561361920ull, 1944962772334520031ull, 5998405023078963660ull}}, {{6910828294187907017ull, 11671024369774314496ull, 2431203465418150039ull, 7498006278848704575ull}}, {{4319267683867441886ull, 14211919258750028416ull, 8437031193527425630ull, 4686253924280440359ull}}, {{5399084604834302357ull, 8541527036582759712ull, 5934602973481894134ull, 5857817405350550449ull}}, {{6748855756042877946ull, 1453536758873673832ull, 12029939735279755572ull, 7322271756688188061ull}}, {{8436069695053597433ull, 1816920948592092290ull, 1202366613817530753ull, 9152839695860235077ull}}, {{9884229577835886300ull, 12664790638938527441ull, 3057322142849650672ull, 5720524809912646923ull}}, {{16966972990722245779ull, 15830988298673159301ull, 17656710733844227052ull, 7150656012390808653ull}}, {{7373658183120643511ull, 1341991299631897511ull, 8235830362023120104ull, 8938320015488510817ull}}, {{11526065392091484051ull, 838744562269935944ull, 16676609022332919825ull, 5586450009680319260ull}}, {{14407581740114355063ull, 5660116721264807834ull, 2399017204206598165ull, 6983062512100399076ull}}, {{8786105138288168021ull, 11686831920008397697ull, 2998771505258247706ull, 8728828140125498845ull}}, {{17020530757498574773ull, 11915955968432636464ull, 4180075200000098768ull, 5455517587578436778ull}}, {{2828919373163666850ull, 14894944960540795581ull, 14448466036854899268ull, 6819396984473045972ull}}, {{8147835234881971467ull, 171937126966442860ull, 18060582546068624086ull, 8524246230591307465ull}}, {{14315769058656007975ull, 13942518759636190499ull, 4370335063651808197ull, 5327653894119567166ull}}, {{13283025304892622065ull, 3593090394263074412ull, 14686290866419536055ull, 6659567367649458957ull}}, {{16603781631115777581ull, 18326421048111006727ull, 4522805527742256356ull, 8324459209561823697ull}}, {{17294892547088442844ull, 2230641118214603396ull, 14355968500907379983ull, 5202787005976139810ull}}, {{3171871610151001939ull, 16623359453050417958ull, 8721588589279449170ull, 6503483757470174763ull}}, {{13188211549543528231ull, 11555827279458246639ull, 6290299718171923559ull, 8129354696837718454ull}}, {{15160161246105787001ull, 14139921077302486005ull, 17766495379139615936ull, 5080846685523574033ull}}, {{5115143502350070039ull, 17674901346628107507ull, 8373061168642356208ull, 6351058356904467542ull}}, {{1782243359510199645ull, 3646882609575582768ull, 1242954423948169453ull, 7938822946130584428ull}}, {{1113902099693874778ull, 4585144640198433182ull, 10000218551822381716ull, 4961764341331615267ull}}, {{10615749661472119280ull, 5731430800248041477ull, 7888587171350589241ull, 6202205426664519084ull}}, {{17881373095267537004ull, 11775974518737439750ull, 9860733964188236551ull, 7752756783330648855ull}}, {{6564172166114822724ull, 14277513101851981700ull, 13080487755258729700ull, 4845472989581655534ull}}, {{8205215207643528405ull, 17846891377314977125ull, 7127237657218636317ull, 6056841236977069418ull}}, {{14868205027981798410ull, 8473556166361557694ull, 18132419108378071205ull, 7571051546221336772ull}}, {{4680942124061236102ull, 7601815613189667511ull, 2109389905881518695ull, 4731907216388335483ull}}, {{1239491636649157224ull, 4890583498059696485ull, 16471795437634062081ull, 5914884020485419353ull}}, {{6161050564238834434ull, 10724915391002008510ull, 6754686241760413889ull, 7393605025606774192ull}}, {{17685714657931435233ull, 18232287165444725078ull, 4221678901100258680ull, 4621003141004233870ull}}, {{12883771285559518233ull, 4343614883096354732ull, 14500470663230099159ull, 5776253926255292337ull}}, {{16104714106949397792ull, 817832585443055511ull, 4290530273755460237ull, 7220317407819115422ull}}, {{15519206615259359335ull, 5633976750231207293ull, 14586534879049101104ull, 9025396759773894277ull}}, {{12005347143750793537ull, 3521235468894504558ull, 11422427308619382142ull, 5640872974858683923ull}}, {{5783311892833716113ull, 13624916372972906506ull, 9666348117346839773ull, 7051091218573354904ull}}, {{16452511902896920949ull, 3196087410933969420ull, 12082935146683549717ull, 8813864023216693630ull}}, {{1059447902455799785ull, 4303397641047424840ull, 2940148448249830669ull, 5508665014510433519ull}}, {{1324309878069749732ull, 9990933069736668954ull, 17510243615594452048ull, 6885831268138041898ull}}, {{10878759384441962972ull, 12488666337170836192ull, 12664432482638289252ull, 8607289085172552373ull}}, {{6799224615276226858ull, 17028788497586548428ull, 10221113310862624734ull, 5379555678232845233ull}}, {{8499030769095283572ull, 12062613585128409727ull, 17388077657005668822ull, 6724444597791056541ull}}, {{6012102442941716561ull, 5854894944555736351ull, 7900039015974922316ull, 8405555747238820677ull}}, {{10675093054479654707ull, 12882681377202111027ull, 7243367394198020399ull, 5253472342024262923ull}}, {{8732180299672180479ull, 11491665703075250880ull, 4442523224320137595ull, 6566840427530328654ull}}, {{10915225374590225599ull, 9752896110416675696ull, 14776526067254947802ull, 8208550534412910817ull}}, {{6822015859118891000ull, 10707246087437810214ull, 2317799764393260520ull, 5130344084008069261ull}}, {{17750891860753389558ull, 13384057609297262767ull, 7508935723918963554ull, 6412930105010086576ull}}, {{17576928807514349043ull, 7506699974766802651ull, 9386169654898704443ull, 8016162631262608220ull}}, {{8679737495482774200ull, 2385844475015557705ull, 15089728071166466085ull, 5010101644539130137ull}}, {{15461357887780855654ull, 7593991612196835035ull, 5027102033675918894ull, 6262627055673912672ull}}, {{14715011341298681663ull, 269117478391267986ull, 6283877542094898618ull, 7828283819592390840ull}}, {{13808568106739063944ull, 4779884442421930395ull, 3927423463809311636ull, 4892677387245244275ull}}, {{12649024114996442025ull, 5974855553027412994ull, 297593311334251641ull, 6115846734056555344ull}}, {{6587908106890776724ull, 12080255459711654147ull, 371991639167814551ull, 7644808417570694180ull}}, {{1811599557593041500ull, 14467688689960865698ull, 9455866811334659902ull, 4778005260981683862ull}}, {{11487871483846077683ull, 8861238825596306314ull, 2596461477313549070ull, 5972506576227104828ull}}, {{5136467317952821296ull, 1853176495140607085ull, 3245576846641936338ull, 7465633220283881035ull}}, {{5516135082934207262ull, 5769921327890267332ull, 18169386593647067875ull, 4666020762677425646ull}}, {{6895168853667759078ull, 2600715641435446261ull, 13488361205204059036ull, 5832525953346782058ull}}, {{13230647085512086751ull, 3250894551794307826ull, 7637079469650297987ull, 7290657441683477573ull}}, {{7314936820035332631ull, 17898676245025048495ull, 14158035355490260387ull, 9113321802104346966ull}}, {{11489364540163164750ull, 8880829643926961357ull, 4237086078754024838ull, 5695826126315216854ull}}, {{526647619921792226ull, 1877665018053925889ull, 14519729635297306856ull, 7119782657894021067ull}}, {{5269995543329628186ull, 2347081272567407361ull, 13537976025694245666ull, 8899728322367526334ull}}, {{14822962260649487377ull, 6078611813782017504ull, 3849548997631515637ull, 5562330201479703959ull}}, {{81958752102307605ull, 12209950785654909785ull, 200250228612006642ull, 6952912751849629949ull}}, {{4714134458555272410ull, 6039066445213861423ull, 4861998804192396207ull, 8691140939812037436ull}}, {{9863863064238127112ull, 10691945555899745245ull, 12262121289475023437ull, 5431963087382523397ull}}, {{16941514848725046794ull, 17976617963302069460ull, 1492593556561615584ull, 6789953859228154247ull}}, {{2730149487196756876ull, 4024028380418035210ull, 15700800000984183193ull, 8487442324035192808ull}}, {{6318029447925360952ull, 14044232783829741766ull, 9813000000615114495ull, 5304651452521995505ull}}, {{17120908846761476998ull, 12943604961359789303ull, 16877936019196281023ull, 6630814315652494381ull}}, {{16789450040024458343ull, 11567820183272348725ull, 7262361968713187567ull, 8288517894565617977ull}}, {{12799249284228980417ull, 14147416642186299809ull, 16068191276514211989ull, 5180323684103511235ull}}, {{2164003550004061809ull, 3849212747450711050ull, 15473553077215377083ull, 6475404605129389044ull}}, {{11928376474359853069ull, 199829915886000908ull, 895197272809669738ull, 8094255756411736306ull}}, {{16678607333329683976ull, 4736579715856138471ull, 5171184313933431490ull, 5058909847757335191ull}}, {{16236573148234717066ull, 15144096681674948897ull, 1852294373989401458ull, 6323637309696668989ull}}, {{6460658380011232621ull, 9706748815238910314ull, 6927053985914139727ull, 7904546637120836236ull}}, {{8649597505934408292ull, 12984247037165400802ull, 13552780778051113137ull, 4940341648200522647ull}}, {{1588624845563234557ull, 2395250741174587291ull, 12329289954136503518ull, 6175427060250653309ull}}, {{15820839112236206908ull, 12217435463323009921ull, 1576554387388465685ull, 7719283825313316637ull}}, {{2970495417506547462ull, 9941740173790575153ull, 3291189501331485005ull, 4824552390820822898ull}}, {{8324805290310572231ull, 17038861235665606845ull, 13337358913519132064ull, 6030690488526028622ull}}, {{15017692631315603193ull, 2851832470872456940ull, 7448326605044139273ull, 7538363110657535778ull}}, {{162685857717476188ull, 13311610340363755348ull, 9266890146579974949ull, 4711476944160959861ull}}, {{203357322146845234ull, 2804454870172530473ull, 16195298701652356591ull, 5889346180201199826ull}}, {{4865882671110944447ull, 17340626642997826803ull, 11020751340210669930ull, 7361682725251499783ull}}, {{1470667320461292654ull, 12452411266892507696ull, 9164253156835949509ull, 9202103406564374729ull}}, {{919167075288307909ull, 10088600051021511262ull, 17256873269090938203ull, 5751314629102734205ull}}, {{10372330880965160694ull, 7999064045349501173ull, 7736033531081509042ull, 7189143286378417757ull}}, {{17577099619633838772ull, 775458019832100658ull, 14281727932279274207ull, 8986429107973022196ull}}, {{15597373280698537137ull, 7402190290036144767ull, 18149451994529322187ull, 5616518192483138872ull}}, {{14885030582445783517ull, 4641051844117793055ull, 4240070919452101118ull, 7020647740603923591ull}}, {{13994602209629841492ull, 15024686842002017127ull, 688402630887738493ull, 8775809675754904489ull}}, {{15664155408659732788ull, 11696272285464954656ull, 11959466690373306318ull, 5484881047346815305ull}}, {{1133450187115114369ull, 5396968319976417513ull, 1114275307684469186ull, 6856101309183519132ull}}, {{6028498752321280866ull, 15969582436825297699ull, 1392844134605586482ull, 8570126636479398915ull}}, {{1461968710987106589ull, 14592675041443198966ull, 17011428648624349215ull, 5356329147799624321ull}}, {{11050832925588659044ull, 13629157783376610803ull, 7429227755498272807ull, 6695411434749530402ull}}, {{9201855138558435901ull, 12424761210793375600ull, 63162657518065201ull, 8369264293436913003ull}}, {{5751159461599022439ull, 847946729104777894ull, 16180377725444648415ull, 5230790183398070626ull}}, {{16412321363853553856ull, 14894991466663136079ull, 11002100119951034710ull, 6538487729247588283ull}}, {{15903715686389554416ull, 9395367296474144291ull, 9140939131511405484ull, 8173109661559485354ull}}, {{7633979294779777558ull, 15095476597151115990ull, 10324772975622016331ull, 5108193538474678346ull}}, {{319102081619946140ull, 14257659728011507084ull, 3682594182672744606ull, 6385241923093347933ull}}, {{398877602024932674ull, 8598702623159608047ull, 9214928746768318662ull, 7981552403866684916ull}}, {{7166827528906664778ull, 762503121047367125ull, 14982702503584974972ull, 4988470252416678072ull}}, {{13570220429560718876ull, 953128901309208906ull, 281634055771667099ull, 6235587815520847591ull}}, {{7739403500096122787ull, 15026469181918674845ull, 14187100624996747585ull, 7794484769401059488ull}}, {{7142970196773770694ull, 2474014211058089922ull, 8866937890622967241ull, 4871552980875662180ull}}, {{18152084782821989175ull, 7704203782250000306ull, 11083672363278709051ull, 6089441226094577725ull}}, {{13466733941672710661ull, 5018568709385112479ull, 19532398816222602ull, 7611801532618222157ull}}, {{15334237741186526019ull, 7748291461793083203ull, 2318050758473833078ull, 4757375957886388848ull}}, {{14556111158055769620ull, 461992290386578196ull, 2897563448092291348ull, 5946719947357986060ull}}, {{18195138947569712025ull, 577490362983222745ull, 3621954310115364185ull, 7433399934197482575ull}}, {{4454432814589988160ull, 11890146522932983976ull, 9181250471463184471ull, 4645874958873426609ull}}, {{5568041018237485200ull, 10250997135238842066ull, 16088249107756368493ull, 5807343698591783261ull}}, {{16183423309651632307ull, 17425432437475940486ull, 6275253329413296904ull, 7259179623239729077ull}}, {{11005907100209764576ull, 3335046473135373992ull, 12455752680194009035ull, 9073974529049661346ull}}, {{6878691937631102860ull, 18225305110205466409ull, 12396531443548643550ull, 5671234080656038341ull}}, {{13210050940466266479ull, 13558259350902057203ull, 1660606249153640726ull, 7089042600820047927ull}}, {{11900877657155445195ull, 7724452151772795696ull, 15910815866724214620ull, 8861303251025059908ull}}, {{7438048535722153247ull, 14051154631712773118ull, 720887879847858329ull, 5538314531890662443ull}}, {{74188632797915751ull, 3728885234358802686ull, 14736167905091986624ull, 6922893164863328053ull}}, {{9316107827852170496ull, 4661106542948503357ull, 4585151826082819568ull, 8653616456079160067ull}}, {{8128410401621300512ull, 2913191589342814598ull, 559876882088068278ull, 5408510285049475042ull}}, {{937140965171849832ull, 12864861523533294056ull, 9923218139464861155ull, 6760637856311843802ull}}, {{1171426206464812290ull, 11469390885989229666ull, 3180650637476300636ull, 8450797320389804753ull}}, {{5343827397467895585ull, 16391741340598044349ull, 13517121694491157657ull, 5281748325243627970ull}}, {{11291470265262257386ull, 6654618620465391724ull, 7673030081259171264ull, 6602185406554534963ull}}, {{14114337831577821732ull, 8318273275581739655ull, 4979601583146576176ull, 8252731758193168704ull}}, {{15738990172377220439ull, 5198920797238587284ull, 3112250989466610110ull, 5157957348870730440ull}}, {{1226993641761973932ull, 15722023033403009914ull, 3890313736833262637ull, 6447446686088413050ull}}, {{10757114089057243223ull, 5817470736471598680ull, 14086264207896354105ull, 8059308357610516312ull}}, {{6723196305660777015ull, 15165134256363218935ull, 8803915129935221315ull, 5037067723506572695ull}}, {{3792309363648583364ull, 14344731802026635765ull, 6393207893991638740ull, 6296334654383215869ull}}, {{9352072722988117109ull, 17930914752533294706ull, 12603195885916936329ull, 7870418317979019836ull}}, {{10456731470294961097ull, 4289292692692227335ull, 17100369465552861014ull, 4919011448736887397ull}}, {{8459228319441313468ull, 14584987902720059977ull, 7540403776658912555ull, 6148764310921109247ull}}, {{15185721417729029738ull, 13619548859972687067ull, 4813818702396252790ull, 7685955388651386559ull}}, {{7185232876866949635ull, 3900532019055541513ull, 9926165716638739850ull, 4803722117907116599ull}}, {{13593227114511074947ull, 14099037060674202699ull, 7796021127371036908ull, 6004652647383895749ull}}, {{12379847874711455780ull, 17623796325842753374ull, 14356712427641184039ull, 7505815809229869686ull}}, {{3125718903267271959ull, 17932401731292802715ull, 4361259248848352120ull, 4691134880768668554ull}}, {{17742206684366253660ull, 3968758090406451777ull, 14674946097915215959ull, 5863918600960835692ull}}, {{8342700300175653363ull, 349261594580676818ull, 18343682622394019949ull, 7329898251201044615ull}}, {{1205003338364790896ull, 5048263011653233927ull, 18317917259565137032ull, 9162372814001305769ull}}, {{7670656114119076166ull, 3155164382283271204ull, 4531169259587128789ull, 5726483008750816106ull}}, {{9588320142648845207ull, 8555641496281476909ull, 14887333611338686794ull, 7158103760938520132ull}}, {{16597086196738444413ull, 1471179833497070328ull, 162422940463806877ull, 8947629701173150166ull}}, {{10373178872961527758ull, 3225330405149362907ull, 13936572393072043010ull, 5592268563233218853ull}}, {{8354787572774521794ull, 13255035043291479442ull, 3585657436057890050ull, 6990335704041523567ull}}, {{1220112429113376434ull, 7345421767259573495ull, 18317129850354526275ull, 8737919630051904458ull}}, {{7680099295836942128ull, 2285045595323539482ull, 16059892174898966826ull, 5461199768782440286ull}}, {{376752082941401851ull, 12079679031009200161ull, 10851493181768932724ull, 6826499710978050358ull}}, {{5082626122104140218ull, 15099598788761500201ull, 4340994440356390097ull, 8533124638722562948ull}}, {{14705856372383557396ull, 2519720215334855769ull, 11936493562077519619ull, 5333202899201601842ull}}, {{4547262410197283033ull, 16984708324450733424ull, 5697244915742123715ull, 6666503624002002303ull}}, {{5684078012746603792ull, 16619199387136028876ull, 2509870126250266740ull, 8333129530002502879ull}}, {{12775920794821403178ull, 1163627580105242239ull, 8486197856547498569ull, 5208205956251564299ull}}, {{11358214975099366068ull, 6066220493558940703ull, 5996061302256985307ull, 6510257445314455374ull}}, {{9586082700446819681ull, 2971089598521287975ull, 16718448664676007442ull, 8137821806643069217ull}}, {{12908830715420344157ull, 6468617017503192888ull, 3531501387781422795ull, 5086138629151918261ull}}, {{16136038394275430196ull, 3474085253451603206ull, 9026062753154166398ull, 6357673286439897826ull}}, {{10946675955989511937ull, 13565978603669279816ull, 2059206404587932189ull, 7947091608049872283ull}}, {{6841672472493444961ull, 10784579636506993837ull, 17427905067363315282ull, 4966932255031170176ull}}, {{13163776609044194105ull, 4257352508778966488ull, 3338137260494592487ull, 6208665318788962721ull}}, {{16454720761305242631ull, 710004617546320206ull, 8784357594045628513ull, 7760831648486203401ull}}, {{5672514457388388741ull, 11972967932034919889ull, 17019438542346987580ull, 4850519780303877125ull}}, {{11702329090162873830ull, 14966209915043649861ull, 7439240122651570763ull, 6063149725379846407ull}}, {{792853307421428575ull, 14096076375377174423ull, 4687364134887075550ull, 7578937156724808009ull}}, {{7413062344779474715ull, 4198361716183346110ull, 14458817630372891979ull, 4736835722953005005ull}}, {{42955894119567586ull, 636266126801794734ull, 4238463982683951262ull, 5921044653691256257ull}}, {{9277066904504235291ull, 10018704695357019225ull, 9909765996782326981ull, 7401305817114070321ull}}, {{17327381861383616817ull, 8567533443811830967ull, 17722818794057424123ull, 4625816135696293950ull}}, {{17047541308302133117ull, 6097730786337400805ull, 12930151455717004346ull, 5782270169620367438ull}}, {{7474368580095502684ull, 16845535519776526815ull, 6939317282791479624ull, 7227837712025459298ull}}, {{4731274706691990451ull, 2610175326011106903ull, 17897518640344125339ull, 9034797140031824122ull}}, {{9874575719323575888ull, 17772260643252799478ull, 15797635168642466240ull, 5646748212519890076ull}}, {{3119847612299694052ull, 3768581730356447732ull, 1300299887093531185ull, 7058435265649862596ull}}, {{3899809515374617565ull, 9322413181372947569ull, 1625374858866913981ull, 8823044082062328245ull}}, {{13966595993177605738ull, 8132351247571786182ull, 3321702296005515190ull, 5514402551288955153ull}}, {{8234872954617231365ull, 942067022609956920ull, 8763813888434281892ull, 6893003189111193941ull}}, {{10293591193271539206ull, 1177583778262446150ull, 15566453378970240269ull, 8616253986388992426ull}}, {{1821808477367324100ull, 3041832870627722796ull, 14340719380283788072ull, 5385158741493120266ull}}, {{2277260596709155124ull, 3802291088284653495ull, 8702527188499959282ull, 6731448426866400333ull}}, {{16681633801168607617ull, 13976235897210592676ull, 15489845004052337006ull, 8414310533583000416ull}}, {{1202649088875603953ull, 4123461417329232519ull, 9681153127532710629ull, 5258944083489375260ull}}, {{15338369416376668653ull, 9766012790088928552ull, 12101441409415888286ull, 6573680104361719075ull}}, {{726217696761284200ull, 2984143950756384883ull, 10515115743342472454ull, 8217100130452148844ull}}, {{16594787124971660289ull, 15700148024504904263ull, 15795319376443821091ull, 5135687581532593027ull}}, {{16131797887787187458ull, 15013499012203742425ull, 15132463202127388460ull, 6419609476915741284ull}}, {{6329689304451820610ull, 320129691545126416ull, 468834928949683960ull, 8024511846144676606ull}}, {{3956055815282387881ull, 200081057215704010ull, 14128079885875716187ull, 5015319903840422878ull}}, {{14168441805957760660ull, 14085159376801793724ull, 8436727820489869425ull, 6269149879800528598ull}}, {{17710552257447200824ull, 3771391165720078443ull, 1322537738757560974ull, 7836437349750660748ull}}, {{8763252151690806563ull, 16192177533857212739ull, 10049958123578251416ull, 4897773343594162967ull}}, {{6342379171186120300ull, 1793477843611964308ull, 7950761636045426367ull, 6122216679492703709ull}}, {{7927973963982650375ull, 16076905359797119097ull, 14550138063484170862ull, 7652770849365879636ull}}, {{16484198773557626245ull, 5436379831445811531ull, 18317208326532382597ull, 4782981780853674772ull}}, {{15993562448519644902ull, 11407160807734652318ull, 4449766334455926630ull, 5978727226067093466ull}}, {{10768581023794780319ull, 5035578972813539590ull, 14785579954924684096ull, 7473409032583866832ull}}, {{2118677121444349796ull, 3147236858008462244ull, 9240987471827927560ull, 4670880645364916770ull}}, {{2648346401805437244ull, 3934046072510577805ull, 2327862302930133642ull, 5838600806706145963ull}}, {{7922119020684184459ull, 14140929627492998064ull, 16744885933944830764ull, 7298251008382682453ull}}, {{9902648775855230574ull, 17676162034366247580ull, 7096049362148874743ull, 9122813760478353067ull}}, {{15412527521764294917ull, 17965130299119986593ull, 2129187842129352762ull, 5701758600298970667ull}}, {{5430601346923204934ull, 13233040837045207434ull, 16496542857943854665ull, 7127198250373713333ull}}, {{16011623720508781975ull, 2706242991024345580ull, 6785620517147654620ull, 8908997812967141667ull}}, {{783892788463212927ull, 10914773906244991796ull, 1935169814003590185ull, 5568123633104463542ull}}, {{979865985579016158ull, 18255153401233627649ull, 11642334304359263539ull, 6960154541380579427ull}}, {{5836518500401158102ull, 18207255733114646657ull, 9941231862021691520ull, 8700193176725724284ull}}, {{15177039108819193574ull, 11379534833196654160ull, 15436641950618333008ull, 5437620735453577677ull}}, {{524554812314440351ull, 14224418541495817701ull, 5460744382990752548ull, 6797025919316972097ull}}, {{5267379533820438343ull, 17780523176869772126ull, 11437616497165828589ull, 8496282399146215121ull}}, {{17127170263919937677ull, 13418669994757301530ull, 230981283087561012ull, 5310176499466384451ull}}, {{12185590793045146288ull, 16773337493446626913ull, 14123784659141614977ull, 6637720624332980563ull}}, {{1396930436024269147ull, 7131613811526119930ull, 13043044805499630818ull, 8297150780416225704ull}}, {{5484767540942556121ull, 9068944650631212860ull, 8151903003437269261ull, 5185719237760141065ull}}, {{6855959426178195151ull, 15947866831716403979ull, 14801564772723974480ull, 6482149047200176331ull}}, {{3958263264295356035ull, 1488089465935953358ull, 13890269947477580197ull, 8102686309000220414ull}}, {{16308972595466761234ull, 3235898925423664800ull, 4069732698746099719ull, 5064178943125137759ull}}, {{1939471670623899927ull, 17879931712061744713ull, 475479855005236744ull, 6330223678906422199ull}}, {{7036025606707262812ull, 3903170566367629275ull, 14429407874038709643ull, 7912779598633027748ull}}, {{2091672994978345306ull, 133638594766074345ull, 18241751958128969335ull, 4945487249145642342ull}}, {{7226277262150319536ull, 14002106298739756643ull, 13578817910806435860ull, 6181859061432052928ull}}, {{4421160559260511516ull, 17502632873424695804ull, 16973522388508044825ull, 7727323826790066160ull}}, {{11986597386392595506ull, 4021616518249353021ull, 10608451492817528016ull, 4829577391743791350ull}}, {{1148188677708580670ull, 5027020647811691277ull, 4037192329167134212ull, 6036971739679739188ull}}, {{6046921865563113741ull, 6283775809764614096ull, 5046490411458917765ull, 7546214674599673985ull}}, {{3779326165976946088ull, 6233202890316577762ull, 14683271553230293363ull, 4716384171624796240ull}}, {{13947529744325958418ull, 3179817594468334298ull, 18354089441537866704ull, 5895480214530995300ull}}, {{8211040143552672215ull, 3974771993085417873ull, 4495867728212781764ull, 7369350268163744126ull}}, {{14875486197868228173ull, 4968464991356772341ull, 14843206697120753013ull, 9211687835204680157ull}}, {{11603021882881336560ull, 5411133628811676665ull, 11582847194914164585ull, 5757304897002925098ull}}, {{668719298319506988ull, 11375603054441983736ull, 5255186956787929923ull, 7196631121253656373ull}}, {{835899122899383735ull, 9607817799625091766ull, 11180669714412300308ull, 8995788901567070466ull}}, {{14357495007094278546ull, 15228258161620458161ull, 11599604589935075596ull, 5622368063479419041ull}}, {{4111810703585684471ull, 588578628316021086ull, 664447682136680784ull, 7027960079349273802ull}}, {{14363135416336881397ull, 735723285395026357ull, 10053931639525626788ull, 8784950099186592252ull}}, {{11282802644424244825ull, 9683199090226667281ull, 15507079311558292550ull, 5490593811991620157ull}}, {{268445250248142319ull, 2880626825928558294ull, 5548791084165701976ull, 6863242264989525197ull}}, {{9558928599664953707ull, 3600783532410697867ull, 11547674873634515374ull, 8579052831236906496ull}}, {{3668487365576902115ull, 16085547763038849879ull, 7217296796021572108ull, 5361908019523066560ull}}, {{18420667262253291356ull, 1660190630089010732ull, 9021620995026965136ull, 6702385024403833200ull}}, {{4579090004107062578ull, 2075238287611263416ull, 11277026243783706420ull, 8377981280504791500ull}}, {{2861931252566914112ull, 10520395966611815443ull, 16271513439219592320ull, 5236238300315494687ull}}, {{17412472120990806351ull, 13150494958264769303ull, 15727705780597102496ull, 6545297875394368359ull}}, {{17153904132811120035ull, 16438118697830961629ull, 15047946207318990216ull, 8181622344242960449ull}}, {{13027033092220643974ull, 10273824186144351018ull, 2487437351933287029ull, 5113513965151850281ull}}, {{7060419328421029160ull, 17453966251107826677ull, 7720982708343996690ull, 6391892456439812851ull}}, {{13437210178953674353ull, 12594085777030007538ull, 5039542367002607959ull, 7989865570549766064ull}}, {{13009942380273434375ull, 14788832638284836567ull, 3149713979376629974ull, 4993665981593603790ull}}, {{11650741956914405065ull, 9262668761001269901ull, 13160514511075563276ull, 6242082476992004737ull}}, {{728369390860842619ull, 11578335951251587377ull, 2615585083562290383ull, 7802603096240005922ull}}, {{11984445915356496397ull, 14153988997173323966ull, 6246426695653819393ull, 4876626935150003701ull}}, {{5757185357340844688ull, 3857428191184491246ull, 12419719387994662146ull, 6095783668937504626ull}}, {{16419853733530831668ull, 14045157275835389865ull, 6301277198138551874ull, 7619729586171880783ull}}, {{3344879555815687937ull, 13389909315824506570ull, 10855827276477676777ull, 4762330991357425489ull}}, {{13404471481624385729ull, 2902328589498469500ull, 18181470114024483876ull, 5952913739196781861ull}}, {{16755589352030482161ull, 3627910736873086875ull, 8891779587248441133ull, 7441142173995977327ull}}, {{8166400335805357399ull, 4573287219759373249ull, 12474891269671357564ull, 4650713858747485829ull}}, {{14819686438184084652ull, 5716609024699216561ull, 1758556031807033243ull, 5813392323434357287ull}}, {{4689549992447942103ull, 2534075262446632798ull, 16033253095040955266ull, 7266740404292946608ull}}, {{15085309527414703437ull, 12390966114913066805ull, 1594822295091642466ull, 9083425505366183261ull}}, {{11734161463847883600ull, 12356039840248054657ull, 3302606943645970493ull, 5677140940853864538ull}}, {{832643774527690788ull, 1609991745027904610ull, 13351630716412238925ull, 7096426176067330672ull}}, {{10264176755014389293ull, 6624175699712268666ull, 16689538395515298656ull, 8870532720084163340ull}}, {{11026796490311381212ull, 4140109812320167916ull, 1207589460342285852ull, 5544082950052602088ull}}, {{13783495612889226515ull, 5175137265400209895ull, 1509486825427857315ull, 6930103687565752610ull}}, {{12617683497684145240ull, 1857235563322874465ull, 11110230568639597452ull, 8662629609457190762ull}}, {{968523158411508919ull, 10384144263931572349ull, 11555580123827136311ull, 5414143505910744226ull}}, {{5822339966441774053ull, 8368494311487077532ull, 5221103117929144581ull, 6767679382388430283ull}}, {{7277924958052217566ull, 15072303907786234819ull, 1914692878984042822ull, 8459599227985537854ull}}, {{2242860089568942027ull, 4808503923939008858ull, 15031741104647190476ull, 5287249517490961158ull}}, {{12026947148815953341ull, 6010629904923761072ull, 9566304343954212287ull, 6609061896863701448ull}}, {{15033683936019941677ull, 2901601362727313436ull, 11957880429942765359ull, 8261327371079626810ull}}, {{172680423157687740ull, 8731029879345652754ull, 12085361287141616253ull, 5163329606924766756ull}}, {{9439222565801885483ull, 15525473367609453846ull, 15106701608927020316ull, 6454162008655958445ull}}, {{2575656170397581046ull, 960097635802265692ull, 5048318955876611684ull, 8067702510819948057ull}}, {{10833157143353263962ull, 9823433059231191865ull, 14684414393491352062ull, 5042314069262467535ull}}, {{18153132447618967856ull, 3055919287184214023ull, 13743831973436802174ull, 6302892586578084419ull}}, {{18079729541096321916ull, 13043271145835043337ull, 12568103948368614813ull, 7878615733222605524ull}}, {{4382301935544119342ull, 10457887475360596038ull, 17078437004585160066ull, 4924134833264128452ull}}, {{14701249456284924985ull, 3848987307345969239ull, 2901302182021898467ull, 6155168541580160566ull}}, {{13764875801928768327ull, 199548115755073645ull, 12849999764382148892ull, 7693960676975200707ull}}, {{10908890385419174157ull, 9348089609201696836ull, 5725406843525149105ull, 4808725423109500442ull}}, {{13636112981773967696ull, 16296798029929508949ull, 16380130591261212189ull, 6010906778886875552ull}}, {{3210083171935295907ull, 6535939482129722475ull, 2028419165366963621ull, 7513633473608594441ull}}, {{18147203046955417606ull, 6390805185544770498ull, 12796977024422822023ull, 4696020921005371525ull}}, {{13460631771839496200ull, 3376820463503575219ull, 2161163225246363817ull, 5870026151256714407ull}}, {{12214103696371982345ull, 8832711597806856928ull, 16536512086840118483ull, 7337532689070893008ull}}, {{15267629620464977932ull, 6429203478831183256ull, 2223896034840596488ull, 9171915861338616261ull}}, {{9542268512790611207ull, 4018252174269489535ull, 3695778030989066757ull, 5732447413336635163ull}}, {{7316149622560876105ull, 9634501236264249823ull, 8036520308945542ull, 7165559266670793954ull}}, {{4533501009773707227ull, 2819754508475536471ull, 9233417687240957736ull, 8956949083338492442ull}}, {{9750967158749648873ull, 1762346567797210294ull, 10382572072952986489ull, 5598093177086557776ull}}, {{2965336911582285284ull, 6814619228173900772ull, 12978215091191233111ull, 6997616471358197220ull}}, {{3706671139477856604ull, 3906588016789988061ull, 16222768863989041389ull, 8747020589197746525ull}}, {{4622512471387354330ull, 4747460519707436490ull, 12445073549206844820ull, 5466887868248591578ull}}, {{15001512626088968720ull, 5934325649634295612ull, 6332969899653780217ull, 6833609835310739473ull}}, {{305146708901659284ull, 12029593080470257420ull, 12527898392994613175ull, 8542012294138424341ull}}, {{9414088729918312861ull, 14436024702934992743ull, 10135779504835327186ull, 5338757683836515213ull}}, {{7155924893970503172ull, 8821658841813965121ull, 17281410399471546887ull, 6673447104795644016ull}}, {{13556592135890516869ull, 6415387533840068497ull, 3155018925629881993ull, 8341808880994555021ull}}, {{1555341057290491187ull, 15538832254718512571ull, 4277729837732370197ull, 5213630550621596888ull}}, {{15779234376895277696ull, 5588482263115977001ull, 5347162297165462747ull, 6517038188276996110ull}}, {{5888984915836933408ull, 2373916810467583348ull, 15907324908311604242ull, 8146297735346245137ull}}, {{12903987609252859188ull, 6095384024969627496ull, 3024549040053670795ull, 5091436084591403211ull}}, {{16129984511566073985ull, 3007544012784646466ull, 17615744355349252206ull, 6364295105739254013ull}}, {{10939108602602816673ull, 12982802052835583891ull, 8184622388904401545ull, 7955368882174067517ull}}, {{4531099867413066469ull, 1196722255381158076ull, 7421232002278944918ull, 4972105551358792198ull}}, {{5663874834266333086ull, 10719274856081223403ull, 53167965993905339ull, 6215131939198490248ull}}, {{2468157524405528453ull, 8787407551674141350ull, 66459957492381674ull, 7768914923998112810ull}}, {{15377656508035618995ull, 10103815738223726247ull, 4653223491860126450ull, 4855571827498820506ull}}, {{14610384616617135840ull, 3406397635924882001ull, 15039901401679933871ull, 6069464784373525632ull}}, {{4427922715489256088ull, 18093055100188266214ull, 353132678390365722ull, 7586830980466907041ull}}, {{16602509752462948767ull, 15919845456045054287ull, 11749922970062448336ull, 4741769362791816900ull}}, {{16141451172151298055ull, 1453062746346766243ull, 14687403712578060421ull, 5927211703489771125ull}}, {{15565127946761734664ull, 6428014451360845708ull, 4524196585440411814ull, 7409014629362213907ull}}, {{504832929871308357ull, 17852567087382692280ull, 521779856686563431ull, 4630634143351383692ull}}, {{631041162339135447ull, 17704022840800977446ull, 652224820858204289ull, 5788292679189229615ull}}, {{10012173489778695116ull, 8294970495719058095ull, 14650339081354919074ull, 7235365848986537018ull}}, {{7903530843795980991ull, 1145341082794046811ull, 9089551814838873035ull, 9044207311233171273ull}}, {{2633863768158794168ull, 16856739241242136921ull, 17210184930342765406ull, 5652629569520732045ull}}, {{7904015728625880613ull, 11847552014697895343ull, 7677673107646293046ull, 7065786961900915057ull}}, {{5268333642354962863ull, 5586067981517593371ull, 14208777402985254212ull, 8832233702376143821ull}}, {{986865517258157837ull, 12714664525303271665ull, 11186328886079477834ull, 5520146063985089888ull}}, {{5845267915000085201ull, 6669958619774313773ull, 13982911107599347293ull, 6900182579981362360ull}}, {{11918270912177494405ull, 12949134293145280120ull, 17478638884499184116ull, 8625228224976702950ull}}, {{7448919320110934003ull, 17316580970070575883ull, 6312463284384602168ull, 5390767640610439344ull}}, {{4699463131711279600ull, 3198982138878668238ull, 7890579105480752711ull, 6738459550763049180ull}}, {{15097700951493875308ull, 17833785728880499009ull, 9863223881850940888ull, 8423074438453811475ull}}, {{2518534067042590211ull, 11146116080550311881ull, 3858671916943144103ull, 5264421524033632172ull}}, {{7759853602230625668ull, 9320959082260501947ull, 4823339896178930129ull, 6580526905042040215ull}}, {{5088130984360894181ull, 16262884871253015338ull, 1417488851796274757ull, 8225658631302550269ull}}, {{7791767883652946767ull, 12470146053746828538ull, 3191773541586365675ull, 5141036644564093918ull}}, {{516337817711407651ull, 10975996548756147769ull, 13213088963837732902ull, 6426295805705117397ull}}, {{5257108290566647468ull, 4496623649090408903ull, 2681303149515002416ull, 8032869757131396747ull}}, {{10203221709245236523ull, 2810389780681505564ull, 17816715532942734174ull, 5020543598207122966ull}}, {{12754027136556545654ull, 12736359262706657763ull, 13047522379323641909ull, 6275679497758903708ull}}, {{11330847902268294164ull, 2085391023101158492ull, 16309402974154552387ull, 7844599372198629635ull}}, {{16305151975772459660ull, 17444270453934081721ull, 7887533849632901289ull, 4902874607624143522ull}}, {{6546381914433410863ull, 7970280012135438440ull, 636045275186350804ull, 6128593259530179403ull}}, {{8182977393041763579ull, 9962850015169298050ull, 14630114649265102217ull, 7660741574412724253ull}}, {{9726046889078490141ull, 17755996305549281041ull, 11449664665004382837ull, 4787963484007952658ull}}, {{16769244629775500580ull, 8359937326654437589ull, 5088708794400702739ull, 5984954355009940823ull}}, {{7126497731937212013ull, 5838235639890659083ull, 1749199974573490520ull, 7481192943762426029ull}}, {{2148218073247063557ull, 3648897274931661927ull, 3399092993322125527ull, 4675745589851516268ull}}, {{16520330646840993158ull, 18396179648946741120ull, 4248866241652656908ull, 5844681987314395335ull}}, {{2203669234841689831ull, 4548480487473874785ull, 699396783638433232ull, 7305852484142994169ull}}, {{7366272561979500192ull, 5685600609342343481ull, 5485931997975429444ull, 9132315605178742711ull}}, {{16133135397305657380ull, 12776872417693740483ull, 10346236526375725258ull, 5707697253236714194ull}}, {{15554733228204683821ull, 6747718485262399796ull, 3709423621114880765ull, 7134621566545892743ull}}, {{996672461546303161ull, 13046334125005387650ull, 25093507966213052ull, 8918276958182365929ull}}, {{5234606306893827380ull, 17377330864983143089ull, 11544898488547352917ull, 5573923098863978705ull}}, {{11154943902044672128ull, 7886605525946765149ull, 596065055402027435ull, 6967403873579973382ull}}, {{108621822273676448ull, 5246570889006068533ull, 9968453356107310102ull, 8709254841974966727ull}}, {{2373731648134741732ull, 17114164860910956545ull, 13147812375208150669ull, 5443284276234354204ull}}, {{7578850578595815069ull, 7557648020856531969ull, 16434765469010188337ull, 6804105345292942755ull}}, {{14085249241672156741ull, 14058746044498052865ull, 15931770817835347517ull, 8505131681616178444ull}}, {{1885751748404016107ull, 11092559287024976993ull, 733984724292316390ull, 5315707301010111528ull}}, {{6968875703932408038ull, 4642327071926445433ull, 917480905365395488ull, 6644634126262639410ull}}, {{13322780648342897951ull, 5802908839908056791ull, 10370223168561520168ull, 8305792657828299262ull}}, {{15244266932855393076ull, 3626818024942535494ull, 1869703461923562201ull, 5191120411142687039ull}}, {{9831961629214465536ull, 9145208549605557272ull, 16172187382686616463ull, 6488900513928358798ull}}, {{12289952036518081920ull, 6819824668579558686ull, 10991862191503494771ull, 8111125642410448498ull}}, {{3069534004396413296ull, 1956547408648530227ull, 11481599888117072136ull, 5069453526506530311ull}}, {{17671975560777680332ull, 2445684260810662783ull, 9740313841718952266ull, 6336816908133162889ull}}, {{17478283432544712511ull, 12280477362868104287ull, 16787078320576078236ull, 7921021135166453611ull}}, {{17841456172981527176ull, 16898670388647340987ull, 8186080941146354945ull, 4950638209479033507ull}}, {{17690134197799521066ull, 7288279930527012522ull, 5620915158005555778ull, 6188297761848791884ull}}, {{12889295710394625524ull, 18333721950013541461ull, 7026143947506944722ull, 7735372202310989855ull}}, {{10361652828210334905ull, 16070262237185851317ull, 11308868994832922307ull, 4834607626444368659ull}}, {{17563752053690306535ull, 15476141778054926242ull, 9524400225113764980ull, 6043259533055460824ull}}, {{12731318030258107360ull, 898433148859106187ull, 11905500281392206226ull, 7554074416319326030ull}}, {{5651230759697623148ull, 5173206736464329271ull, 2829251657442740987ull, 4721296510199578769ull}}, {{2452352431194641031ull, 1854822402153023685ull, 8148250590230814138ull, 5901620637749473461ull}}, {{7677126557420689193ull, 11541900039546055414ull, 14796999256215905576ull, 7377025797186841826ull}}, {{373036159921085683ull, 14427375049432569268ull, 9272877033415106162ull, 9221282246483552283ull}}, {{9456519636805454360ull, 13628795424322743696ull, 3489705136670747399ull, 5763301404052220177ull}}, {{11820649546006817950ull, 12424308261976041716ull, 8973817439265822153ull, 7204126755065275221ull}}, {{14775811932508522437ull, 1695327272187888433ull, 15828957817509665596ull, 9005158443831594026ull}}, {{2317353430176744667ull, 10282951581972206079ull, 14504784654370928901ull, 5628224027394746266ull}}, {{16731749843003094546ull, 17465375495892645502ull, 8907608781108885318ull, 7035280034243432833ull}}, {{11691315266899092375ull, 12608347333011031070ull, 15746196994813494552ull, 8794100042804291041ull}}, {{2695386023384544830ull, 7880217083131894419ull, 2923844094117352239ull, 5496312526752681901ull}}, {{17204290584512844750ull, 5238585335487480119ull, 8266491136074078203ull, 6870390658440852376ull}}, {{16893677212213668033ull, 1936545650931962245ull, 10333113920092597754ull, 8587988323051065470ull}}, {{12864391266847236473ull, 5822027050259864307ull, 1846510181630485692ull, 5367492701906915919ull}}, {{11468803065131657687ull, 7277533812824830384ull, 16143195782320270827ull, 6709365877383644898ull}}, {{14336003831414572109ull, 4485231247603650076ull, 10955622691045562726ull, 8386707346729556123ull}}, {{18183374431488883376ull, 16638327585034445009ull, 4541421172689782751ull, 5241692091705972577ull}}, {{8894159984078940508ull, 16186223462865668358ull, 10288462484289616343ull, 6552115114632465721ull}}, {{1894327943243899827ull, 15621093310154697544ull, 17472264123789408333ull, 8190143893290582151ull}}, {{1183954964527437392ull, 12069026328060379917ull, 17837694105009462064ull, 5118839933306613844ull}}, {{6091629724086684644ull, 15086282910075474896ull, 3850373557552275964ull, 6398549916633267306ull}}, {{7614537155108355805ull, 411109563884792004ull, 14036338983795120764ull, 7998187395791584132ull}}, {{13982457758797498186ull, 9480315514282770810ull, 17996083901726726285ull, 4998867122369740082ull}}, {{8254700161642096924ull, 16462080411280851417ull, 13271732840303632048ull, 6248583902962175103ull}}, {{14930061220480009059ull, 2130856440391512655ull, 11977980031952152157ull, 7810729878702718879ull}}, {{16248817290441087518ull, 3637628284458389361ull, 14403766547611176954ull, 4881706174189199299ull}}, {{6475963557769195686ull, 13770407392427762510ull, 13393022166086583288ull, 6102132717736499124ull}}, {{17318326484066270415ull, 17213009240534703137ull, 16741277707608229110ull, 7627665897170623905ull}}, {{3906425024900337154ull, 6146444756906801557ull, 3545769539614061338ull, 4767291185731639941ull}}, {{9494717299552809346ull, 16906427982988277754ull, 9043897942944964576ull, 5959113982164549926ull}}, {{2645024587586235874ull, 2686290905025795577ull, 2081500391826429913ull, 7448892477705687408ull}}, {{13182355413309867182ull, 13208146861709591995ull, 1300937744891518695ull, 4655557798566054630ull}}, {{11866258248209946073ull, 11898497558709602090ull, 10849544217969174177ull, 5819447248207568287ull}}, {{5609450773407656783ull, 1038063893104838901ull, 8950244254034079818ull, 7274309060259460359ull}}, {{11623499485186958883ull, 10520951903235824434ull, 6576119299115211868ull, 9092886325324325449ull}}, {{11876373196669237206ull, 15798966976377166079ull, 15639289608015477177ull, 5683053953327703405ull}}, {{10233780477409158603ull, 5913650665189293887ull, 5714053954737182760ull, 7103817441659629257ull}}, {{8180539578334060350ull, 7392063331486617359ull, 11754253461848866354ull, 8879771802074536571ull}}, {{12030366264099869575ull, 9231725600606523753ull, 5040565404441847519ull, 5549857376296585357ull}}, {{1202899774842673256ull, 6927970982330766788ull, 10912392773979697303ull, 6937321720370731696ull}}, {{1503624718553341570ull, 4048277709486070581ull, 13640490967474621629ull, 8671652150463414620ull}}, {{3245608458309532434ull, 4836016577642488065ull, 17748678891526414326ull, 5419782594039634137ull}}, {{8668696591314303446ull, 15268392758907885889ull, 8350790559125854195ull, 6774728242549542672ull}}, {{15447556757570267211ull, 14473804930207469457ull, 10438488198907317744ull, 8468410303186928340ull}}, {{2737193945840335151ull, 9046128081379668411ull, 15747427161171849398ull, 5292756439491830212ull}}, {{17256550487582582651ull, 2084288064869809705ull, 1237539877755260132ull, 6615945549364787766ull}}, {{7735630054196064602ull, 2605360081087262132ull, 10770296884048850973ull, 8269931936705984707ull}}, {{14058140820727316184ull, 3934193059893232784ull, 4425592543316837906ull, 5168707460441240442ull}}, {{17572676025909145230ull, 14141113361721316788ull, 14755362716000823190ull, 6460884325551550552ull}}, {{3519100958676879922ull, 8453019665296870178ull, 18444203395001028988ull, 8076105406939438190ull}}, {{6811124117600437855ull, 14506509327665319669ull, 6915941103448255213ull, 5047565879337148869ull}}, {{13125591165427935223ull, 4298078604299485874ull, 13256612397737706921ull, 6309457349171436086ull}}, {{7183616919930143220ull, 9984284273801745247ull, 7347393460317357843ull, 7886821686464295108ull}}, {{11407289602597421369ull, 3934334661912396827ull, 13815492949553124460ull, 4929263554040184442ull}}, {{9647425984819388807ull, 4917918327390496034ull, 8045994150086629767ull, 6161579442550230553ull}}, {{2835910444169460201ull, 1535711890810732139ull, 14669178706035675113ull, 7701974303187788191ull}}, {{17913345092101770290ull, 12489034977825177346ull, 16085765718913378801ull, 4813733939492367619ull}}, {{13168309328272437054ull, 1776235666999307971ull, 15495521130214335598ull, 6017167424365459524ull}}, {{11848700641913158413ull, 11443666620603910772ull, 922657339058367881ull, 7521459280456824406ull}}, {{16628809938050499816ull, 234762610236362376ull, 14411718892193643638ull, 4700912050285515253ull}}, {{2339268348853573154ull, 9516825299650228779ull, 4179590559959890835ull, 5876140062856894067ull}}, {{16759143491349130155ull, 7284345606135398069ull, 612802181522475640ull, 7345175078571117584ull}}, {{7113871308904248982ull, 9105432007669247587ull, 766002726903094550ull, 9181468848213896980ull}}, {{2140326558851461662ull, 1079208986365891838ull, 9702123741169209902ull, 5738418030133685612ull}}, {{11898780235419102885ull, 10572383269812140605ull, 12127654676461512377ull, 7173022537667107015ull}}, {{1038417238991714894ull, 17827165105692563661ull, 10547882327149502567ull, 8966278172083883769ull}}, {{2954853783583515761ull, 18059507218698934144ull, 18121641500536908864ull, 5603923857552427355ull}}, {{3693567229479394701ull, 4127639949664116064ull, 18040365857243748177ull, 7004904821940534194ull}}, {{4616959036849243376ull, 9771235955507532984ull, 13327085284699909413ull, 8756131027425667743ull}}, {{2885599398030777110ull, 8412865481405902067ull, 15246957330578525239ull, 5472581892141042339ull}}, {{17442057302820635100ull, 5904395833329989679ull, 14447010644795768645ull, 6840727365176302924ull}}, {{17190885610098405971ull, 11992180810089875003ull, 18058763305994710806ull, 8550909206470378655ull}}, {{8438460497097809780ull, 2883426987878783973ull, 18204256093887776110ull, 5344318254043986659ull}}, {{15159761639799650129ull, 12827655771703255774ull, 18143634098932332233ull, 6680397817554983324ull}}, {{9726330012894786853ull, 2199511659346906006ull, 4232798549955863676ull, 8350497271943729156ull}}, {{1467270239631853879ull, 10598066823946592062ull, 11868871130577190605ull, 5219060794964830722ull}}, {{11057459836394593157ull, 17859269548360627981ull, 5612716876366712448ull, 6523825993706038403ull}}, {{18433510813920629350ull, 3877342861741233360ull, 2404210077031002657ull, 8154782492132548004ull}}, {{11520944258700393344ull, 13952554334656740610ull, 10726003334999152468ull, 5096739057582842502ull}}, {{5177808286520715872ull, 17440692918320925763ull, 4184132131894164777ull, 6370923821978553128ull}}, {{1860574339723506935ull, 7965808092618993492ull, 5230165164867705972ull, 7963654777473191410ull}}, {{10386230999181967643ull, 14202002094741646740ull, 7880539246469704136ull, 4977284235920744631ull}}, {{12982788748977459553ull, 17752502618427058425ull, 5238988039659742266ull, 6221605294900930789ull}}, {{2393427880939660730ull, 12967256236179047224ull, 11160421068002065737ull, 7777006618626163486ull}}, {{1495892425587287956ull, 1187006119970822659ull, 2363577149073903182ull, 4860629136641352179ull}}, {{15704923587266273657ull, 10707129686818304131ull, 16789529491624542689ull, 6075786420801690223ull}}, {{15019468465655454167ull, 17995598126950268068ull, 16375225846103290457ull, 7594733026002112779ull}}, {{163795754179883047ull, 4329719801702835687ull, 7928673144600862584ull, 4746708141251320487ull}}, {{14039802748007017520ull, 5412149752128544608ull, 5299155412323690326ull, 5933385176564150609ull}}, {{17549753435008771900ull, 15988559227015456568ull, 11235630283832000811ull, 7416731470705188261ull}}, {{10968595896880482438ull, 7687006507670966403ull, 9328111936608694459ull, 4635457169190742663ull}}, {{9099058852673215143ull, 4997072116161320100ull, 7048453902333480170ull, 5794321461488428329ull}}, {{11373823565841518929ull, 15469712182056425933ull, 13422253396344238116ull, 7242901826860535411ull}}, {{382221402019734949ull, 890396153860980801ull, 12166130727002909742ull, 9053627283575669264ull}}, {{11768103422330804103ull, 14391555651445276712ull, 7603831704376818588ull, 5658517052234793290ull}}, {{14710129277913505129ull, 17989444564306595890ull, 281417593616247427ull, 7073146315293491613ull}}, {{9164289560537105603ull, 17875119686955856959ull, 4963458010447697188ull, 8841432894116864516ull}}, {{12645210002976772858ull, 1948577767492634791ull, 12325533293384586551ull, 5525895558823040322ull}}, {{11194826485293578169ull, 16270780264647957201ull, 6183544579875957380ull, 6907369448528800403ull}}, {{158475051334808999ull, 1891731257100394886ull, 3117744706417558822ull, 8634211810661000504ull}}, {{13934104962366419336ull, 15017390090969910515ull, 1948590441510974263ull, 5396382381663125315ull}}, {{12805945184530636266ull, 14160051595285000240ull, 16270796107170881541ull, 6745477977078906643ull}}, {{16007431480663295333ull, 3865006438824086588ull, 15726809115536214023ull, 8431847471348633304ull}}, {{781272638559783775ull, 9333158051906135974ull, 9829255697210133764ull, 5269904669592895815ull}}, {{10199962835054505527ull, 11666447564882669967ull, 7674883603085279301ull, 6587380836991119769ull}}, {{8138267525390744004ull, 748001400821173747ull, 14205290522283987031ull, 8234226046238899711ull}}, {{2780574194155521051ull, 7385029903154315448ull, 15795835604068573750ull, 5146391278899312319ull}}, {{3475717742694401313ull, 7915342088118502ull, 15133108486658329284ull, 6432989098624140399ull}}, {{13568019215222777450ull, 9894177610148127ull, 14304699589895523701ull, 8041236373280175499ull}}, {{15397541037155317762ull, 2312026870220036531ull, 6634594234471008361ull, 5025772733300109687ull}}, {{14635240278016759299ull, 7501719606202433568ull, 3681556774661372547ull, 6282215916625137109ull}}, {{18294050347520949123ull, 4765463489325654056ull, 9213631986754103588ull, 7852769895781421386ull}}, {{11433781467200593202ull, 12201786717683309593ull, 10370206010148702646ull, 4907981184863388366ull}}, {{457168778718577791ull, 6028861360249361184ull, 3739385475831102500ull, 6134976481079235458ull}}, {{571460973398222238ull, 7536076700311701480ull, 13897603881643653933ull, 7668720601349044322ull}}, {{357163108373888899ull, 7015890946908507377ull, 13297688444454671612ull, 4792950375843152701ull}}, {{5058139903894749028ull, 8769863683635634221ull, 2787052500286175803ull, 5991187969803940877ull}}, {{10934360898295824189ull, 6350643586117154872ull, 8095501643785107658ull, 7488984962254926096ull}}, {{6833975561434890118ull, 8580838259750609699ull, 5059688527365692286ull, 4680615601409328810ull}}, {{3930783433366224743ull, 1502675787833486316ull, 15547982696061891166ull, 5850769501761661012ull}}, {{4913479291707780929ull, 11101716771646633703ull, 988234296367812341ull, 7313461877202076266ull}}, {{1530163096207338257ull, 42087909276128417ull, 10458664907314541235ull, 9141827346502595332ull}}, {{12485566981198056171ull, 16167206007793437924ull, 15760037603926364079ull, 5713642091564122082ull}}, {{15606958726497570214ull, 15597321491314409501ull, 10476674968053179291ull, 7142052614455152603ull}}, {{5673640352839799055ull, 14884965845715623973ull, 8484157691639086210ull, 8927565768068940754ull}}, {{5851868229738568361ull, 13914789671999652887ull, 9914284575701816785ull, 5579728605043087971ull}}, {{2703149268745822548ull, 3558429034717402397ull, 7781169701199883078ull, 6974660756303859964ull}}, {{7990622604359666089ull, 13671408330251528804ull, 9726462126499853847ull, 8718325945379824955ull}}, {{14217511164579567114ull, 15462159234048287358ull, 3773195819848714702ull, 5448953715862390597ull}}, {{8548516918869683084ull, 10104327005705583390ull, 9328180793238281282ull, 6811192144827988246ull}}, {{1462274111732328047ull, 3407036720277203430ull, 2436853954693075795ull, 8513990181034985308ull}}, {{14748979375114868741ull, 18270299014669109807ull, 10746405758537948179ull, 5321243863146865817ull}}, {{13824538200466198023ull, 18226187749908999355ull, 18044693216599823128ull, 6651554828933582271ull}}, {{12668986732155359624ull, 4335990613676697578ull, 17944180502322391007ull, 8314443536166977839ull}}, {{12529802726024487669ull, 9627523161189017842ull, 18132641841592576235ull, 5196527210104361149ull}}, {{6438881370675833778ull, 7422717933058884399ull, 8830744246708556582ull, 6495659012630451437ull}}, {{3436915694917404319ull, 55025379468829691ull, 15650116326813083632ull, 8119573765788064296ull}}, {{18288973373819235363ull, 34390862168018556ull, 9781322704258177270ull, 5074733603617540185ull}}, {{4414472643564492588ull, 9266360614564799004ull, 16838339398750109491ull, 6343417004521925231ull}}, {{5518090804455615735ull, 6971264749778610851ull, 16436238230010248960ull, 7929271255652406539ull}}, {{1142963743571065883ull, 4357040468611631782ull, 7966805884542711648ull, 4955794534782754087ull}}, {{10652076716318608161ull, 5446300585764539727ull, 5346821337251001656ull, 6194743168478442609ull}}, {{8703409876970872297ull, 6807875732205674659ull, 11295212689991139974ull, 7743428960598053261ull}}, {{3133788163893101234ull, 18089980387910710374ull, 9365350940458156435ull, 4839643100373783288ull}}, {{13140607241721152350ull, 18000789466461000063ull, 11706688675572695544ull, 6049553875467229110ull}}, {{11814073033724052534ull, 4054242759366698463ull, 5409988807611093623ull, 7561942344334036388ull}}, {{14301324673718614690ull, 9451430752245268395ull, 12604615041611709322ull, 4726213965208772742ull}}, {{13264969823720880458ull, 2590916403451809686ull, 6532396765159860845ull, 5907767456510965928ull}}, {{7357840242796324765ull, 7850331522742150012ull, 8165495956449826056ull, 7384709320638707410ull}}, {{13822022188602478786ull, 4906457201713843757ull, 9715120991208529189ull, 4615443325399192131ull}}, {{3442469680470934770ull, 10744757520569692601ull, 7532215220583273582ull, 5769304156748990164ull}}, {{8914773119016056367ull, 4207574863857339943ull, 9415269025729091978ull, 7211630195936237705ull}}, {{6531780380342682555ull, 14482840616676450737ull, 16380772300588752876ull, 9014537744920297131ull}}, {{15611577783782646357ull, 18275147422277557518ull, 7932139678654276595ull, 5634086090575185707ull}}, {{10291100192873532138ull, 18232248259419558994ull, 5303488579890457840ull, 7042607613218982134ull}}, {{3640503204237139364ull, 4343566250564897127ull, 15852732761717848109ull, 8803259516523727667ull}}, {{9192843530289293959ull, 5020571915816754656ull, 7602114966859961116ull, 5502037197827329792ull}}, {{11491054412861617448ull, 6275714894770943320ull, 9502643708574951395ull, 6877546497284162240ull}}, {{14363818016077021810ull, 3232957600036291246ull, 11878304635718689244ull, 8596933121605202800ull}}, {{4365700241620750728ull, 11243970536877457837ull, 7423940397324180777ull, 5373083201003251750ull}}, {{10068811320453326313ull, 219905115814658584ull, 56553459800450164ull, 6716354001254064688ull}}, {{12586014150566657892ull, 274881394768323230ull, 70691824750562705ull, 8395442501567580860ull}}, {{3254572825676773279ull, 11701015917798671779ull, 9267554427323877498ull, 5247151563479738037ull}}, {{17903274087378130310ull, 5402897860393563915ull, 16196129052582234777ull, 6558939454349672546ull}}, {{17767406590795274983ull, 11365308343919342798ull, 11021789278873017663ull, 8198674317937090683ull}}, {{6492943100819658961ull, 14020846742590671105ull, 4582775290081942087ull, 5124171448710681677ull}}, {{12727864894451961605ull, 12914372409810950977ull, 10340155131029815513ull, 6405214310888352096ull}}, {{2074773062782788294ull, 2307907456981525010ull, 12925193913787269392ull, 8006517888610440120ull}}, {{5908419182666630588ull, 1442442160613453131ull, 8078246196117043370ull, 5004073680381525075ull}}, {{2773837959905900331ull, 11026424737621592222ull, 5486121726718916308ull, 6255092100476906344ull}}, {{12690669486737151221ull, 13783030922026990277ull, 6857652158398645385ull, 7818865125596132930ull}}, {{10237511438424413466ull, 1696865298625787067ull, 8897718617426541270ull, 4886790703497583081ull}}, {{8185203279603128928ull, 11344453660137009642ull, 15733834290210564491ull, 6108488379371978851ull}}, {{1008132062649135352ull, 9568881056743874149ull, 15055606844335817710ull, 7635610474214973564ull}}, {{2935925548369403547ull, 1368864642037533439ull, 186382240855110261ull, 4772256546384358478ull}}, {{17504964990743918146ull, 6322766820974304702ull, 9456349837923663634ull, 5965320682980448097ull}}, {{12657834201575121874ull, 17126830563072656686ull, 16432123315831967446ull, 7456650853725560121ull}}, {{3299460357557063267ull, 6092583083493022525ull, 3352548044753897798ull, 4660406783578475076ull}}, {{8736011465373716988ull, 16839100891221053964ull, 4190685055942372247ull, 5825508479473093845ull}}, {{10920014331717146235ull, 16437190095598929551ull, 9850042338355353213ull, 7281885599341367306ull}}, {{9038331896219044890ull, 6711429564216498227ull, 3089180886089415709ull, 9102356999176709133ull}}, {{3343114425923209104ull, 6500486486849005344ull, 4236581063019578770ull, 5688973124485443208ull}}, {{4178893032404011380ull, 17348980145416032488ull, 5295726328774473462ull, 7111216405606804010ull}}, {{5223616290505014225ull, 12462853144915264802ull, 15843029947822867636ull, 8889020507008505012ull}}, {{7876446199993021795ull, 17012655252426816309ull, 678521680534516464ull, 5555637816880315633ull}}, {{14457243768418665147ull, 2819074991823968770ull, 5459838119095533485ull, 6944547271100394541ull}}, {{8848182673668555626ull, 8135529758207348867ull, 11436483667296804760ull, 8680684088875493176ull}}, {{3224271161829153314ull, 5084706098879593042ull, 7147802292060502975ull, 5425427555547183235ull}}, {{13253710989141217451ull, 1744196605172103398ull, 4323066846648240815ull, 6781784444433979044ull}}, {{7343766699571746006ull, 16015303811747292960ull, 5403833558310301018ull, 8477230555542473805ull}}, {{4589854187232341254ull, 14621250900769446004ull, 5683238983157632088ull, 5298269097214046128ull}}, {{5737317734040426567ull, 18276563625961807505ull, 7104048728947040110ull, 6622836371517557660ull}}, {{11783333185977921113ull, 13622332495597483573ull, 8880060911183800138ull, 8278545464396947075ull}}, {{9670426250449894648ull, 13125643828175815137ull, 3244195060276181134ull, 5174090915248091922ull}}, {{16699718831489756213ull, 7183682748364993113ull, 13278615862200002226ull, 6467613644060114902ull}}, {{7039590484080031555ull, 18202975472311017200ull, 7374897790895226974ull, 8084517055075143628ull}}, {{4399744052550019722ull, 6765173651766997846ull, 13832683156164292667ull, 5052823159421964767ull}}, {{14723052102542300460ull, 3844781046281359403ull, 12679167926777977930ull, 6316028949277455959ull}}, {{13792129109750487671ull, 14029348344706475062ull, 11237273890045084508ull, 7895036186596819949ull}}, {{4008394675166666891ull, 17991714752296322722ull, 9329139190491871769ull, 4934397616623012468ull}}, {{14233865380813109421ull, 8654585385088239690ull, 11661423988114839712ull, 6167997020778765585ull}}, {{8568959689161610968ull, 10818231731360299613ull, 741721929861385928ull, 7709996275973456982ull}}, {{7661442814939700807ull, 6761394832100187258ull, 14298634261445529917ull, 4818747672483410613ull}}, {{353431481819850201ull, 13063429558552621977ull, 4038234771524748684ull, 6023434590604263267ull}}, {{5053475370702200655ull, 16329286948190777471ull, 436107445978547951ull, 7529293238255329084ull}}, {{10075951134329957266ull, 17123333370260317775ull, 9495939190591368277ull, 4705808273909580677ull}}, {{7983252899485058678ull, 7569108657543233507ull, 16481610006666598251ull, 5882260342386975846ull}}, {{5367380105928935443ull, 4849699803501653980ull, 11378640471478472006ull, 7352825427983719808ull}}, {{6709225132411169304ull, 15285496791231843283ull, 14223300589348090007ull, 9191031784979649760ull}}, {{1887422698543286863ull, 16470964522160983908ull, 8889562868342556254ull, 5744394865612281100ull}}, {{2359278373179108579ull, 11365333615846454077ull, 11111953585428195318ull, 7180493582015351375ull}}, {{7560783984901273627ull, 4983294982953291788ull, 9278255963357856244ull, 8975616977519189219ull}}, {{13948862027418071825ull, 12337931401200583175ull, 3493066967884966200ull, 5609760610949493262ull}}, {{12824391515845201878ull, 15422414251500728969ull, 13589705746710983558ull, 7012200763686866577ull}}, {{2195431339524338635ull, 10054645777521135404ull, 3152074128106565736ull, 8765250954608583222ull}}, {{10595516624057487455ull, 6284153610950709627ull, 15805104385348767297ull, 5478281846630364513ull}}, {{8632709761644471415ull, 12466878032115774938ull, 5921322426403795409ull, 6847852308287955642ull}}, {{1567515165200813460ull, 1748539484862554961ull, 16625025069859520070ull, 8559815385359944552ull}}, {{12508912024318978173ull, 14927895233321260562ull, 10390640668662200043ull, 5349884615849965345ull}}, {{6412767993543946908ull, 14048183023224187799ull, 17599986854255137958ull, 6687355769812456681ull}}, {{3404273973502545731ull, 8336856742175458941ull, 8164925512536758736ull, 8359194712265570852ull}}, {{4433514242652785034ull, 5210535463859661838ull, 14326450482190250018ull, 5224496695165981782ull}}, {{14765264840170757100ull, 15736541366679353105ull, 8684691065883036714ull, 6530620868957477228ull}}, {{4621522994931282663ull, 10447304671494415574ull, 10855863832353795893ull, 8163276086196846535ull}}, {{16723509927114215377ull, 8835408428897703685ull, 13702443922862204289ull, 5102047553873029084ull}}, {{7069329353610605509ull, 15655946554549517511ull, 17128054903577755361ull, 6377559442341286355ull}}, {{4224975673585868982ull, 5734875137904733177ull, 16798382611044806298ull, 7971949302926607944ull}}, {{14169824842059637874ull, 8195982979617846139ull, 10498989131903003936ull, 4982468314329129965ull}}, {{13100595034147159438ull, 10244978724522307674ull, 17735422433306142824ull, 6228085392911412456ull}}, {{7152371755829173489ull, 12806223405652884593ull, 3722533967923126914ull, 7785106741139265571ull}}, {{15999447393461703191ull, 12615575646960440774ull, 20740720738260369ull, 4865691713212040982ull}}, {{10775937204972353181ull, 1934411503418387256ull, 9249297937777601270ull, 6082114641515051227ull}}, {{13469921506215441476ull, 11641386416127759878ull, 6949936403794613683ull, 7602643301893814034ull}}, {{3807014922957263019ull, 4970023500866155972ull, 8955396270799021456ull, 4751652063683633771ull}}, {{4758768653696578773ull, 6212529376082694965ull, 6582559320071388916ull, 5939565079604542214ull}}, {{10560146835548111370ull, 7765661720103368706ull, 17451571186944011953ull, 7424456349505677767ull}}, {{11211777790644957511ull, 16382753621133075201ull, 17824761019481089326ull, 4640285218441048604ull}}, {{179664183024033176ull, 11255069989561568194ull, 3834207200641810042ull, 5800356523051310756ull}}, {{9447952265634817278ull, 4845465450097184434ull, 4792759000802262553ull, 7250445653814138445ull}}, {{2586568295188745789ull, 10668517831048868447ull, 10602634769430216095ull, 9063057067267673056ull}}, {{8534134212134047975ull, 13585352672046624635ull, 6626646730893885059ull, 5664410667042295660ull}}, {{6055981746740172064ull, 12370004821630892890ull, 8283308413617356324ull, 7080513333802869575ull}}, {{16793349220279990888ull, 15462506027038616112ull, 5742449498594307501ull, 8850641667253586969ull}}, {{10495843262674994305ull, 11969909276112829022ull, 15118245982689911948ull, 5531651042033491855ull}}, {{3896432041488967073ull, 14962386595141036278ull, 14286121459935002031ull, 6914563802541864819ull}}, {{14093912088715984649ull, 14091297225498907443ull, 13245965806491364635ull, 8643204753177331024ull}}, {{6502852046233796454ull, 6501217756723123200ull, 8278728629057102897ull, 5402002970735831890ull}}, {{8128565057792245568ull, 12738208214331291904ull, 1125038749466602813ull, 6752503713419789863ull}}, {{10160706322240306959ull, 2087702212631951168ull, 15241356492115417229ull, 8440629641774737328ull}}, {{6350441451400191850ull, 3610656892108663432ull, 9525847807572135768ull, 5275393526109210830ull}}, {{7938051814250239812ull, 4513321115135829290ull, 2683937722610393902ull, 6594241907636513538ull}}, {{699192730958023957ull, 14865023430774562421ull, 12578294190117768185ull, 8242802384545641922ull}}, {{2742838466062458925ull, 2373110616593019657ull, 12473119887250993020ull, 5151751490341026201ull}}, {{8040234101005461560ull, 2966388270741274571ull, 1756341803781577563ull, 6439689362926282752ull}}, {{5438606607829439046ull, 17543043393708756926ull, 2195427254726971953ull, 8049611703657853440ull}}, {{17234187185175563116ull, 4046873093426891222ull, 1372142034204357471ull, 5031007314786158400ull}}, {{12319361944614678087ull, 446905348356226124ull, 1715177542755446839ull, 6288759143482698000ull}}, {{15399202430768347609ull, 14393689740727446367ull, 2143971928444308548ull, 7860948929353372500ull}}, {{16542030546871299112ull, 18219428124809429787ull, 10563354492132468650ull, 4913093080845857812ull}}, {{16065852165161735985ull, 13550913119157011426ull, 13204193115165585813ull, 6141366351057322265ull}}, {{10858943169597394174ull, 3103583343664100571ull, 2670183338674818555ull, 7676707938821652832ull}}, {{4480996471784677407ull, 18080640654285920521ull, 1668864586671761596ull, 4797942461763533020ull}}, {{10212931608158234662ull, 4154056744147849035ull, 2086080733339701996ull, 5997428077204416275ull}}, {{8154478491770405424ull, 5192570930184811294ull, 16442658971956791207ull, 7496785096505520343ull}}, {{484863038929115486ull, 10162885859006588915ull, 17194190885114076360ull, 4685490685315950214ull}}, {{14441136853943558069ull, 12703607323758236143ull, 12269366569537819642ull, 5856863356644937768ull}}, {{13439735049002059683ull, 6656137117843019371ull, 15336708211922274553ull, 7321079195806172210ull}}, {{12187982792825186699ull, 12931857415731162118ull, 9947513228048067383ull, 9151348994757715263ull}}, {{3005803227088353783ull, 14999939912473058180ull, 13134724795171123970ull, 5719593121723572039ull}}, {{3757254033860442229ull, 9526552853736546917ull, 11806719975536517059ull, 7149491402154465049ull}}, {{9308253560752940690ull, 7296505048743295742ull, 923341914138482612ull, 8936864252693081312ull}}, {{1205972457043200027ull, 13783687692319335647ull, 577088696336551632ull, 5585540157933175820ull}}, {{15342523626586163746ull, 17229609615399169558ull, 721360870420689540ull, 6981925197416469775ull}}, {{9954782496377928875ull, 3090267945539410332ull, 14736759143308025638ull, 8727406496770587218ull}}, {{15445111097090981355ull, 15766475521244295169ull, 13822160482994903927ull, 5454629060481617011ull}}, {{5471330816081562981ull, 15096408383127981058ull, 12666014585316242005ull, 6818286325602021264ull}}, {{16062535556956729535ull, 5035452423627812610ull, 15832518231645302507ull, 8522857907002526580ull}}, {{14650770741525343863ull, 841314755553688929ull, 671951857923538259ull, 5326786191876579113ull}}, {{4478405371624516117ull, 14886701499724274874ull, 5451625840831810727ull, 6658482739845723891ull}}, {{14821378751385420954ull, 13996690856227955688ull, 2202846282612375505ull, 8323103424807154864ull}}, {{9263361719615888097ull, 1830402757501390449ull, 1376778926632734691ull, 5201939640504471790ull}}, {{16190888167947248025ull, 16123061502158901773ull, 10944345695145694171ull, 6502424550630589737ull}}, {{6403552154651896319ull, 15542140859271239313ull, 18292118137359505618ull, 8128030688288237171ull}}, {{15531435142725904959ull, 14325524055471912474ull, 9126730826635997059ull, 5080019180180148232ull}}, {{10190921891552605391ull, 13295219050912502689ull, 11408413533294996324ull, 6350023975225185290ull}}, {{17350338382868144643ull, 16619023813640628361ull, 5037144879763969597ull, 7937529969031481613ull}}, {{3926432461651508546ull, 12692732892739086678ull, 5454058559066174950ull, 4960956230644676008ull}}, {{14131412613919161490ull, 6642544079069082539ull, 6817573198832718688ull, 6201195288305845010ull}}, {{13052579748971563959ull, 8303180098836353174ull, 17745338535395674168ull, 7751494110382306262ull}}, {{3546176324679839570ull, 5189487561772720734ull, 6479150566194908451ull, 4844683818988941414ull}}, {{13656092442704575271ull, 1875173433788513013ull, 17322310244598411372ull, 6055854773736176767ull}}, {{3235057498098555376ull, 2343966792235641267ull, 17041201787320626311ull, 7569818467170220959ull}}, {{18162812000807454774ull, 8382508272788357647ull, 17568280144716473300ull, 4731136541981388099ull}}, {{18091828982581930564ull, 10478135340985447059ull, 17348664162468203721ull, 5913920677476735124ull}}, {{18003100209800025301ull, 17709355194659196728ull, 3239086129375703035ull, 7392400846845918906ull}}, {{11251937631125015813ull, 8762503987448304003ull, 6636114849287202301ull, 4620250529278699316ull}}, {{9453236020478881862ull, 15564816002737767908ull, 8295143561609002876ull, 5775313161598374145ull}}, {{11816545025598602328ull, 1009275929712658269ull, 14980615470438641500ull, 7219141451997967681ull}}, {{935623226716089197ull, 1261594912140822837ull, 4890711282766138163ull, 9023926814997459602ull}}, {{2890607525911249701ull, 16929397884583871937ull, 7668380570156224255ull, 5639954259373412251ull}}, {{8224945425816450030ull, 16550061337302452017ull, 4973789694267892415ull, 7049942824216765314ull}}, {{14892867800697950441ull, 16075890653200677117ull, 15440609154689641327ull, 8812428530270956642ull}}, {{11613885384649912978ull, 16964960685891505054ull, 14262066740108413733ull, 5507767831419347901ull}}, {{5293984693957615414ull, 7371142802082217606ull, 3992525369853353455ull, 6884709789274184877ull}}, {{15840852904301795075ull, 4602242484175384103ull, 9602342730744079723ull, 8605887236592731096ull}}, {{16818062092829703778ull, 570558543395921112ull, 6001464206715049827ull, 5378679522870456935ull}}, {{2575833542327578107ull, 14548256234527065103ull, 2890144239966424379ull, 6723349403588071169ull}}, {{17054849983191636345ull, 13573634274731443474ull, 8224366318385418378ull, 8404186754485088961ull}}, {{15270967257922160620ull, 13095207440134540075ull, 16669443995059356246ull, 5252616721553180600ull}}, {{14477023053975312871ull, 7145637263313399286ull, 2390060920114643692ull, 6565770901941475751ull}}, {{8872906780614365281ull, 8932046579141749108ull, 16822634205425468327ull, 8207213627426844688ull}}, {{14768938774738754109ull, 12500058139604675048ull, 10514146378390917704ull, 5129508517141777930ull}}, {{14429394713891020ull, 15625072674505843811ull, 3919310936133871322ull, 6411885646427222413ull}}, {{13853094798674527486ull, 10307968806277528955ull, 9510824688594727057ull, 8014857058034028016ull}}, {{6352341239957885727ull, 17971695549991925357ull, 5944265430371704410ull, 5009285661271267510ull}}, {{12552112568374745063ull, 13241247400635130888ull, 16653703824819406321ull, 6261607076589084387ull}}, {{15690140710468431328ull, 2716501195511749898ull, 16205443762596869998ull, 7827008845736355484ull}}, {{14418023962470157484ull, 15532871302477007398ull, 905030314768267940ull, 4891880528585222178ull}}, {{8799157916232921047ull, 969345054386707632ull, 10354659930315110734ull, 6114850660731527722ull}}, {{10998947395291151309ull, 10435053354838160348ull, 3719952876039112609ull, 7643563325914409653ull}}, {{16097714158911745376ull, 18051123392842319977ull, 4630813556738139332ull, 4777227078696506033ull}}, {{6287084643357518008ull, 4117160167343348356ull, 10400202964350062070ull, 5971533848370632541ull}}, {{7858855804196897510ull, 14369822246033961253ull, 17611939723864965491ull, 7464417310463290676ull}}, {{7217627886836754896ull, 6675295894557531831ull, 1784090290560827624ull, 4665260819039556673ull}}, {{4410348840118555716ull, 8344119868196914789ull, 6841798881628422434ull, 5831576023799445841ull}}, {{10124622068575582549ull, 1206777798391367678ull, 13163934620462915947ull, 7289470029749307301ull}}, {{3432405548864702378ull, 15343530303271373310ull, 2619860220296481221ull, 9111837537186634127ull}}, {{15980311523322602698ull, 11895549448758302270ull, 8554941665326382619ull, 5694898460741646329ull}}, {{10752017367298477565ull, 10257750792520489934ull, 15305363100085366178ull, 7118623075927057911ull}}, {{4216649672268321148ull, 3598816453795836610ull, 14520017856679319819ull, 8898278844908822389ull}}, {{7247092063595088622ull, 18390161348118255545ull, 11380854169638268838ull, 5561424278068013993ull}}, {{13670551097921248681ull, 13764329648293043623ull, 391009656765672336ull, 6951780347585017492ull}}, {{12476502853974172947ull, 17205412060366304529ull, 488762070957090420ull, 8689725434481271865ull}}, {{880285256092776236ull, 1530010500874164523ull, 11834691340416651273ull, 5431078396550794915ull}}, {{14935414625398134007ull, 6524199144520093557ull, 10181678157093426187ull, 6788847995688493644ull}}, {{4834210226465503797ull, 3543562912222729043ull, 12727097696366782734ull, 8486059994610617055ull}}, {{715538382327245921ull, 16049784875421369364ull, 14871965087870321064ull, 5303787496631635659ull}}, {{894422977909057401ull, 1615487020567160089ull, 13978270341410513427ull, 6629734370789544574ull}}, {{5729714740813709656ull, 15854416830991113823ull, 8249465889908365975ull, 8287167963486930718ull}}, {{10498600740649650391ull, 16826539547010527995ull, 544230162765340830ull, 5179479977179331699ull}}, {{8511564907384675084ull, 11809802396908384186ull, 14515345758738839750ull, 6474349971474164623ull}}, {{1416084097376068047ull, 5538880959280704425ull, 13532496179996161784ull, 8092937464342705779ull}}, {{12414267606928512290ull, 3461800599550440265ull, 6151967103283907163ull, 5058085915214191112ull}}, {{1682776453378476650ull, 18162308804720214044ull, 7689958879104883953ull, 6322607394017738890ull}}, {{2103470566723095813ull, 8867827950618103843ull, 389076562026329134ull, 7903259242522173613ull}}, {{17455570168697792547ull, 930706450708926997ull, 2549015860480149661ull, 4939537026576358508ull}}, {{7984404655590076972ull, 5775069081813546651ull, 3186269825600187076ull, 6174421283220448135ull}}, {{5368819801060208311ull, 7218836352266933314ull, 17817895337282397557ull, 7718026604025560168ull}}, {{7967198394090018098ull, 6817615729380527273ull, 11136184585801498473ull, 4823766627515975105ull}}, {{14570684011039910527ull, 13133705680153046995ull, 85172676969709379ull, 6029708284394968882ull}}, {{13601668995372500254ull, 11805446081763920840ull, 9329837883066912532ull, 7537135355493711102ull}}, {{8501043122107812659ull, 16601775837957226333ull, 1219462658489432428ull, 4710709597183569439ull}}, {{15237989921062153728ull, 2305475723736981300ull, 15359386378393954248ull, 5888386996479461798ull}}, {{600743327618140544ull, 2881844654671226626ull, 9975860936137667002ull, 7360483745599327248ull}}, {{9974301196377451487ull, 12825677855193809090ull, 12469826170172083752ull, 9200604681999159060ull}}, {{10845624266163295084ull, 8016048659496130681ull, 17017013393212328153ull, 5750377926249474412ull}}, {{18168716351131506759ull, 14631746842797551255ull, 2824522667805858575ull, 7187972407811843016ull}}, {{18099209420486995544ull, 13677997535069551165ull, 3530653334757323219ull, 8984965509764803770ull}}, {{13617848897018066167ull, 6242905450204775526ull, 6818344352650714916ull, 5615603443603002356ull}}, {{7798939084417806901ull, 7803631812755969408ull, 8522930440813393645ull, 7019504304503752945ull}}, {{9748673855522258626ull, 14366225784372349664ull, 15265349069444129960ull, 8774380380629691181ull}}, {{6092921159701411641ull, 8978891115232718540ull, 11846686177616275177ull, 5483987737893556988ull}}, {{7616151449626764552ull, 15835299912468286079ull, 14808357722020343971ull, 6854984672366946235ull}}, {{4908503293606067786ull, 15182438872157969695ull, 13898761134098042060ull, 8568730840458682794ull}}, {{9985343586144874222ull, 265652258243955251ull, 13298411727238664192ull, 5355456775286676746ull}}, {{7869993464253704874ull, 332065322804944064ull, 7399642622193554432ull, 6694320969108345933ull}}, {{9837491830317131092ull, 415081653506180080ull, 13861239296169330944ull, 8367901211385432416ull}}, {{6148432393948206933ull, 259426033441362550ull, 8663274560105831840ull, 5229938257115895260ull}}, {{16908912529290034474ull, 324282541801703187ull, 10829093200132289800ull, 6537422821394869075ull}}, {{16524454643185155188ull, 405353177252128984ull, 8924680481737974346ull, 8171778526743586344ull}}, {{10327784151990721993ull, 4865031754209968519ull, 5577925301086233966ull, 5107361579214741465ull}}, {{8298044171561014587ull, 15304661729617236457ull, 11584092644785180361ull, 6384201974018426831ull}}, {{14984241232878656137ull, 5295769106739381859ull, 9868429787554087548ull, 7980252467523033539ull}}, {{7059307761335466134ull, 12533227728566889470ull, 3861925608007610765ull, 4987657792201895962ull}}, {{18047506738524108475ull, 1831476605426448125ull, 14050779046864289265ull, 6234572240252369952ull}}, {{8724325367872971882ull, 6901031775210448061ull, 17563473808580361581ull, 7793215300315462440ull}}, {{7758546364134301378ull, 6618987868720223990ull, 10977171130362725988ull, 4870759562697164025ull}}, {{474810918313100915ull, 8273734835900279988ull, 18333149931380795389ull, 6088449453371455031ull}}, {{593513647891376143ull, 14953854563302737889ull, 18304751395798606332ull, 7610561816714318789ull}}, {{11900161076000579850ull, 122787065209435372ull, 13746312631587822910ull, 4756601135446449243ull}}, {{14875201345000724812ull, 9376855868366570023ull, 12571204771057390733ull, 5945751419308061554ull}}, {{13982315662823518111ull, 16332755853885600433ull, 6490633926966962608ull, 7432189274135076943ull}}, {{1821418261623616964ull, 10207972408678500271ull, 10974175231995433486ull, 4645118296334423089ull}}, {{16111830882311684916ull, 3536593473993349530ull, 18329405058421679762ull, 5806397870418028861ull}}, {{10916416566034830337ull, 13644113879346462721ull, 9076698267744935990ull, 7257997338022536077ull}}, {{18257206725970925826ull, 7831770312328302593ull, 15957558853108557892ull, 9072496672528170096ull}}, {{4493225176090746785ull, 14118228482059964929ull, 9973474283192848682ull, 5670310420330106310ull}}, {{10228217488540821385ull, 8424413565720180353ull, 3243470817136285045ull, 7087888025412632888ull}}, {{17396957879103414636ull, 15142202975577613345ull, 4054338521420356306ull, 8859860031765791110ull}}, {{3955569646798552291ull, 14075562878163396245ull, 16369019631169886403ull, 5537412519853619443ull}}, {{9556148076925578268ull, 12982767579276857402ull, 15849588520534970100ull, 6921765649817024304ull}}, {{2721813059302197027ull, 16228459474096071753ull, 1365241576959161009ull, 8652207062271280381ull}}, {{13230348208132342902ull, 3225258143668962989ull, 3159118994813169583ull, 5407629413919550238ull}}, {{2702877204883264916ull, 17866630734868367449ull, 13172270780371237786ull, 6759536767399437797ull}}, {{7990282524531469048ull, 13109916381730683503ull, 2630280420181883521ull, 8449420959249297247ull}}, {{11911455605473250011ull, 1276168710940595333ull, 8561454290254759057ull, 5280888099530810779ull}}, {{1054261451559398802ull, 6206896907103132071ull, 6090131844391060917ull, 6601110124413513474ull}}, {{15152884869731412214ull, 12370307152306302992ull, 16836036842343601954ull, 8251387655516891842ull}}, {{9470553043582132634ull, 12343127988618827274ull, 15134209044892139125ull, 5157117284698057401ull}}, {{2614819267622889985ull, 1593851930491370381ull, 5082703250833010195ull, 6446396605872571752ull}}, {{7880210102956000385ull, 15827372968396376688ull, 6353379063541262743ull, 8057995757340714690ull}}, {{4925131314347500241ull, 16809637132888817286ull, 8582547933140677118ull, 5036247348337946681ull}}, {{15379786179789151109ull, 11788674379256245799ull, 15339870934853234302ull, 6295309185422433351ull}}, {{14613046706309050982ull, 5512470937215531441ull, 14563152650139154974ull, 7869136481778041689ull}}, {{2215625163802075008ull, 17280352391041870863ull, 2184441378695890002ull, 4918210301111276056ull}}, {{16604589510034757472ull, 12377068451947562770ull, 2730551723369862503ull, 6147762876389095070ull}}, {{11532364850688671031ull, 10859649546507065559ull, 12636561691067103937ull, 7684703595486368837ull}}, {{14125257059321501251ull, 18316496012635385734ull, 10203694066130633912ull, 4802939747178980523ull}}, {{8433199287297100755ull, 4448875942084680552ull, 8142931564235904487ull, 6003674683973725654ull}}, {{10541499109121375944ull, 949408909178462786ull, 955292418440104801ull, 7504593354967157068ull}}, {{11200122961628247869ull, 12122595614305009001ull, 9820429798379841308ull, 4690370846854473167ull}}, {{165095646753146124ull, 15153244517881261252ull, 7663851229547413731ull, 5862963558568091459ull}}, {{206369558441432655ull, 14329869628924188661ull, 4968128018506879260ull, 7328704448210114324ull}}, {{4869647966479178723ull, 17912337036155235826ull, 6210160023133599075ull, 9160880560262642905ull}}, {{7655215997476874606ull, 8889367638383328439ull, 15410565060526969182ull, 5725550350164151815ull}}, {{4957333978418705354ull, 1888337511124384741ull, 14651520307231323574ull, 7156937937705189769ull}}, {{10808353491450769596ull, 11583793925760256734ull, 4479342328756990755ull, 8946172422131487212ull}}, {{2143534913729343094ull, 4934028194386466507ull, 12022960992327895030ull, 5591357763832179507ull}}, {{16514476697443842579ull, 15390907279837858941ull, 10417015221982480883ull, 6989197204790224384ull}}, {{6808037816522639511ull, 14626948081369935773ull, 13021269027478101104ull, 8736496505987780480ull}}, {{6560866644540343647ull, 9141842550856209858ull, 8138293142173813190ull, 5460310316242362800ull}}, {{17424455342530205366ull, 2203931151715486514ull, 10172866427717266488ull, 6825387895302953500ull}}, {{12557197141307980900ull, 2754913939644358143ull, 12716083034646583110ull, 8531734869128691875ull}}, {{14765777240958569919ull, 15556879267559887551ull, 5641708887440420491ull, 5332334293205432422ull}}, {{13845535532770824494ull, 14834413066022471535ull, 16275508146155301422ull, 6665417866506790527ull}}, {{12695233397536142714ull, 9319644295673313611ull, 15732699164266738874ull, 8331772333133488159ull}}, {{5628677864246395244ull, 10436463703223208911ull, 16750466005307793652ull, 5207357708208430099ull}}, {{2424161311880606151ull, 13045579629029011139ull, 16326396488207354161ull, 6509197135260537624ull}}, {{16865259695132921401ull, 2471916481004100211ull, 1961251536549641086ull, 8136496419075672031ull}}, {{8234944300244381924ull, 15380005855909726344ull, 8143311237984607534ull, 5085310261922295019ull}}, {{10293680375305477404ull, 10001635283032382122ull, 5567453029053371514ull, 6356637827402868774ull}}, {{3643728432277070947ull, 3278672066935701845ull, 16182688323171490201ull, 7945797284253585967ull}}, {{4583173279386863294ull, 13578385087903283413ull, 17031709229623263231ull, 4966123302658491229ull}}, {{10340652617660967022ull, 12361295341451716362ull, 7454578481746915327ull, 6207654128323114037ull}}, {{3702443735221432969ull, 10839933158387257549ull, 13929909120611032063ull, 7759567660403892546ull}}, {{4619870343727089558ull, 13692487251633117824ull, 13317879218809282943ull, 4849729787752432841ull}}, {{5774837929658861947ull, 12503923046114009376ull, 2812290968229439967ull, 6062162234690541052ull}}, {{7218547412073577434ull, 11018217789215123816ull, 3515363710286799959ull, 7577702793363176315ull}}, {{4511592132545985896ull, 13803915145900534241ull, 18338003383425107638ull, 4736064245851985196ull}}, {{10251176184109870274ull, 8031521895520891993ull, 4475760155571832932ull, 5920080307314981496ull}}, {{17425656248564725747ull, 10039402369401114991ull, 5594700194464791165ull, 7400100384143726870ull}}, {{17808564182994035448ull, 8580469490089390821ull, 17331745676822658190ull, 4625062740089829293ull}}, {{8425647173460380598ull, 1502214825756962719ull, 7829624040746159026ull, 5781328425112286617ull}}, {{5920372948398087843ull, 11101140569050979207ull, 14398716069360086686ull, 7226660531390358271ull}}, {{2788780167070221900ull, 4653053674458948201ull, 13386709068272720454ull, 9033325664237947839ull}}, {{13272202650487358448ull, 16743216601819006337ull, 15284222195311532139ull, 5645828540148717399ull}}, {{2755195257827034347ull, 16317334733846370018ull, 14493591725712027270ull, 7057285675185896749ull}}, {{12667366109138568742ull, 11173296380453186714ull, 4281931601857870376ull, 8821607093982370937ull}}, {{12528789836638993368ull, 6983310237783241696ull, 14205422297229638745ull, 5513504433738981835ull}}, {{15660987295798741710ull, 13340823815656440024ull, 13145091853109660527ull, 6891880542173727294ull}}, {{1129490046038875521ull, 12064343751143162127ull, 7207992779532299851ull, 8614850677717159118ull}}, {{7623460306415379057ull, 5234371835250782377ull, 18340053542489851119ull, 5384281673573224448ull}}, {{14141011401446611725ull, 1931278775636090067ull, 4478322854402762283ull, 6730352091966530561ull}}, {{13064578233380876752ull, 16249156524827276296ull, 10209589586430840757ull, 8412940114958163201ull}}, {{8165361395863047970ull, 12461565837230741637ull, 17910208537587745233ull, 5258087571848852000ull}}, {{14818387763256197867ull, 1741899241256263334ull, 3941016598275129926ull, 6572609464811065001ull}}, {{9299612667215471525ull, 11400746088425104976ull, 9537956766271300311ull, 8215761831013831251ull}}, {{5812257917009669703ull, 14042995332906772466ull, 3655379969705868742ull, 5134851144383644532ull}}, {{16488694433116862937ull, 8330372129278689774ull, 4569224962132335928ull, 6418563930479555665ull}}, {{11387496004541302863ull, 10412965161598362218ull, 10323217221092807814ull, 8023204913099444581ull}}, {{11728871021265702194ull, 1896417207571588482ull, 8757853772396698836ull, 5014503070687152863ull}}, {{5437716739727351934ull, 2370521509464485603ull, 6335631197068485641ull, 6268128838358941079ull}}, {{2185459906231802013ull, 7574837905257994908ull, 3307852977908219147ull, 7835161047948676349ull}}, {{10589284478249652067ull, 2428430681572552865ull, 4373251120406330919ull, 4896975654967922718ull}}, {{17848291616239452987ull, 16870596407247854793ull, 14689935937362689456ull, 6121219568709903397ull}}, {{8475306465017152522ull, 2641501435350266876ull, 4527361866421198109ull, 7651524460887379247ull}}, {{14520438577490496134ull, 3956781406307610749ull, 9747130194154330674ull, 4782202788054612029ull}}, {{4315490166580956456ull, 14169348794739289245ull, 16795598761120301246ull, 5977753485068265036ull}}, {{10006048726653583474ull, 8488313956569335748ull, 2547754377690824942ull, 7472191856335331296ull}}, {{15477152491013265479ull, 693510204428446938ull, 1592346486056765589ull, 4670119910209582060ull}}, {{10123068576911806041ull, 5478573773962946577ull, 1990433107570956986ull, 5837649887761977575ull}}, {{17265521739567145455ull, 16071589254308459029ull, 16323099439745859944ull, 7297062359702471968ull}}, {{7746844119176768107ull, 1642742494176022171ull, 1957130225972773315ull, 9121327949628089961ull}}, {{2535934565271786115ull, 17167615123355871521ull, 12752421437301453081ull, 5700829968517556225ull}}, {{7781604225017120547ull, 7624460848912675689ull, 2105468741344652640ull, 7126037460646945282ull}}, {{14338691299698788588ull, 9530576061140844611ull, 11855207963535591608ull, 8907546825808681602ull}}, {{6655839053098048916ull, 5956610038213027882ull, 12021190995637132659ull, 5567216766130426001ull}}, {{17543170853227336953ull, 2834076529338896948ull, 1191430689264252112ull, 6959020957663032502ull}}, {{3482219492824619575ull, 3542595661673621186ull, 10712660398435090948ull, 8698776197078790627ull}}, {{6788073201442775138ull, 11437494325400789049ull, 4389569739808237890ull, 5436735123174244142ull}}, {{13096777520230856827ull, 5073495869896210503ull, 14710334211615073171ull, 6795918903967805177ull}}, {{11759285881861183129ull, 1730183818942875225ull, 4552859709236677752ull, 8494898629959756472ull}}, {{432024648522157600ull, 1081364886839297016ull, 2845537318272923595ull, 5309311643724847795ull}}, {{540030810652697000ull, 15186764163831284982ull, 17391979703123318205ull, 6636639554656059743ull}}, {{9898410550170647058ull, 5148397149506942515ull, 17128288610476759853ull, 8295799443320074679ull}}, {{3880663584642960459ull, 5523591227655533024ull, 17622709409189056764ull, 5184874652075046674ull}}, {{4850829480803700574ull, 6904489034569416280ull, 12805014724631545147ull, 6481093315093808343ull}}, {{6063536851004625717ull, 4018925274784382446ull, 11394582387362043530ull, 8101366643867260429ull}}, {{17624768587160054785ull, 7123514315167626932ull, 9427457001314971158ull, 5063354152417037768ull}}, {{3584216660240516866ull, 18127764930814309474ull, 11784321251643713947ull, 6329192690521297210ull}}, {{13703642862155421890ull, 18048020145090498938ull, 5507029527699866626ull, 7911490863151621513ull}}, {{13176462807274526585ull, 15891698609108949740ull, 14971108500880886401ull, 4944681789469763445ull}}, {{16470578509093158232ull, 6029565206104023463ull, 4878827570818944290ull, 6180852236837204307ull}}, {{15976537117939059886ull, 16760328544484805137ull, 1486848445096292458ull, 7726065296046505384ull}}, {{3067806671070830573ull, 15086891358730391115ull, 929280278185182786ull, 4828790810029065865ull}}, {{17669816394120701928ull, 9635242161558213085ull, 5773286366158866387ull, 6035988512536332331ull}}, {{8252212437368713697ull, 7432366683520378453ull, 2604921939271195080ull, 7544985640670415414ull}}, {{7463475782569140013ull, 4645229177200236533ull, 15463134267326660637ull, 4715616025419009633ull}}, {{13941030746638812920ull, 10418222489927683570ull, 5493859778876162084ull, 5894520031773762042ull}}, {{8202916396443740342ull, 13022778112409604463ull, 16090696760449978413ull, 7368150039717202552ull}}, {{5641959477127287524ull, 2443414585229841867ull, 1666626876852921401ull, 9210187549646503191ull}}, {{1220381663990860750ull, 13056349161837120927ull, 7959170825674157731ull, 5756367218529064494ull}}, {{15360535135270739650ull, 11708750433869013254ull, 725591495237921356ull, 7195459023161330618ull}}, {{9977296882233648754ull, 14635938042336266568ull, 10130361405902177503ull, 8994323778951663272ull}}, {{6235810551396030472ull, 16064990304101248461ull, 6331475878688860939ull, 5621452361844789545ull}}, {{12406449207672425993ull, 15469551861699172672ull, 12526030866788464078ull, 7026815452305986931ull}}, {{15508061509590532492ull, 10113567790269190032ull, 11045852565058192194ull, 8783519315382483664ull}}, {{9692538443494082807ull, 10932665887345631674ull, 6903657853161370121ull, 5489699572114052290ull}}, {{2892301017512827701ull, 18277518377609427497ull, 17852944353306488459ull, 6862124465142565362ull}}, {{8227062290318422530ull, 18235211953584396467ull, 13092808404778334766ull, 8577655581428206703ull}}, {{2836070922235320130ull, 6785321452562859888ull, 15100534280627541085ull, 5361034738392629189ull}}, {{3545088652794150162ull, 13093337834130962764ull, 5040609795502262644ull, 6701293422990786487ull}}, {{4431360815992687702ull, 16366672292663703455ull, 1689076225950440401ull, 8376616778738483109ull}}, {{9687129537636511670ull, 3311641155273732803ull, 3361515650432719203ull, 5235385486711551943ull}}, {{7497225903618251684ull, 17974609499374329716ull, 18036952618323062715ull, 6544231858389439928ull}}, {{9371532379522814604ull, 17856575855790524241ull, 4099446699194276778ull, 8180289822986799911ull}}, {{17386422783270228888ull, 15772045928296465554ull, 9479683214637504842ull, 5112681139366749944ull}}, {{12509656442233010302ull, 10491685373515806135ull, 11849604018296881053ull, 6390851424208437430ull}}, {{11025384534363874973ull, 17726292735322145573ull, 5588632986016325508ull, 7988564280260546788ull}}, {{9196708343191115810ull, 1855560922721565175ull, 12716267653114979251ull, 4992852675162841742ull}}, {{6884199410561506859ull, 16154509208684120181ull, 6671962529538948255ull, 6241065843953552178ull}}, {{13216935281629271477ull, 15581450492427762322ull, 17563325198778461127ull, 7801332304941940222ull}}, {{12872270569445682578ull, 16655935585408433307ull, 6365392230809150300ull, 4875832690588712639ull}}, {{11478652193379715318ull, 2373175408050990018ull, 3345054270084049972ull, 6094790863235890799ull}}, {{5124943204869868339ull, 2966469260063737523ull, 18016375892887226177ull, 7618488579044863498ull}}, {{897246493829973760ull, 13383258333608305712ull, 15871920951481904264ull, 4761555361903039686ull}}, {{1121558117287467200ull, 16729072917010382140ull, 10616529152497604522ull, 5951944202378799608ull}}, {{1401947646609334000ull, 11687969109408201867ull, 13270661440622005653ull, 7439930252973499510ull}}, {{17017118343626691414ull, 9610823702593820118ull, 3682477381961365629ull, 4649956408108437194ull}}, {{12048025892678588460ull, 16625215646669663052ull, 13826468764306482844ull, 5812445510135546492ull}}, {{15060032365848235574ull, 2334775484627527199ull, 17283085955383103556ull, 7265556887669433115ull}}, {{14213354438882906564ull, 2918469355784408999ull, 16992171425801491541ull, 9081946109586791394ull}}, {{15800875551942898459ull, 4129886356578949576ull, 15231793159553320117ull, 5676216318491744621ull}}, {{1304350366219071457ull, 9774043964151074875ull, 5204683394159486434ull, 7095270398114680777ull}}, {{15465496013056003033ull, 2994182918334067785ull, 11117540261126745947ull, 8869087997643350971ull}}, {{2748405980518920040ull, 18012265388454650030ull, 4642619653990522264ull, 5543179998527094357ull}}, {{12658879512503425858ull, 4068587661858760921ull, 10414960585915540735ull, 6928974998158867946ull}}, {{1988541335347118610ull, 474048558896063248ull, 3795328695539650111ull, 8661218747698584933ull}}, {{1242838334591949132ull, 7213809376951121386ull, 4677923443925975271ull, 5413261717311615583ull}}, {{10776919955094712222ull, 4405575702761513828ull, 1235718286480081185ull, 6766577146639519479ull}}, {{13471149943868390278ull, 10118655646879280189ull, 15379705913382265193ull, 8458221433299399348ull}}, {{10725311724131437876ull, 17853374825368019878ull, 388944159009139937ull, 5286388395812124593ull}}, {{4183267618309521537ull, 8481660476427861136ull, 5097866217188812826ull, 6607985494765155741ull}}, {{5229084522886901921ull, 1378703558680050612ull, 10984018789913403937ull, 8259981868456444676ull}}, {{12491549863659089509ull, 12390904770243501392ull, 16088383780550653268ull, 5162488667785277922ull}}, {{15614437329573861886ull, 15488630962804376740ull, 10887107688833540777ull, 6453110834731597403ull}}, {{1071302588257775741ull, 5525730648223307214ull, 8997198592614538068ull, 8066388543414496754ull}}, {{14504622172943273550ull, 12676953691994342816ull, 10234935138811474196ull, 5041492839634060471ull}}, {{18130777716179091938ull, 15846192114992928520ull, 8181982905086954841ull, 6301866049542575589ull}}, {{4216728071514313306ull, 5972682088458996939ull, 14839164649786081456ull, 7877332561928219486ull}}, {{329612035482751864ull, 3732926305286873087ull, 4662791887688913006ull, 4923332851205137179ull}}, {{14247073099635603542ull, 13889529918463367166ull, 1216803841183753353ull, 6154166064006421474ull}}, {{8585469337689728620ull, 3526854342797045246ull, 10744376838334467500ull, 7692707580008026842ull}}, {{754232317628692484ull, 11427656001102929087ull, 11326921542386430091ull, 4807942237505016776ull}}, {{14777848452318029316ull, 9672883982951273454ull, 14158651927983037614ull, 6009927796881270970ull}}, {{9248938528542760837ull, 2867732941834316010ull, 8474942873124021210ull, 7512409746101588713ull}}, {{10392272598766613428ull, 6404019107073835410ull, 16826054341770983016ull, 4695256091313492945ull}}, {{3766968711603490976ull, 8005023883842294263ull, 7197509871931565058ull, 5869070114141866182ull}}, {{97024871076975816ull, 782907817948092021ull, 18220259376769232131ull, 7336337642677332727ull}}, {{4732967107273607674ull, 14813692827717278738ull, 18163638202534152259ull, 9170422053346665909ull}}, {{7569790460473392701ull, 6952715008109605259ull, 13658116885797539114ull, 5731513783341666193ull}}, {{4850552057164352972ull, 17914265796991782382ull, 3237588051964760180ull, 7164392229177082742ull}}, {{15286562108310217022ull, 3946088172530176361ull, 13270357101810726034ull, 8955490286471353427ull}}, {{2636572290052803783ull, 7077991126258748130ull, 5988130179418009819ull, 5597181429044595892ull}}, {{12519087399420780537ull, 4235802889396047258ull, 7485162724272512274ull, 6996476786305744865ull}}, {{6425487212421199863ull, 14518125648599834881ull, 13968139423768028246ull, 8745595982882181081ull}}, {{15545144553831719674ull, 4462142511947508896ull, 1812558112213935798ull, 5465997489301363176ull}}, {{984686618580097977ull, 14801050176789161929ull, 2265697640267419747ull, 6832496861626703970ull}}, {{5842544291652510375ull, 13889626702559064507ull, 12055494087189050492ull, 8540621077033379962ull}}, {{1345747173069125033ull, 17904388725954191125ull, 12146369822920544461ull, 5337888173145862476ull}}, {{6293869984763794195ull, 8545427852160575194ull, 15182962278650680577ull, 6672360216432328095ull}}, {{17090709517809518551ull, 15293470833628106896ull, 14367016829885962817ull, 8340450270540410119ull}}, {{10681693448630949095ull, 2640890243376484954ull, 15896914546319808617ull, 5212781419087756324ull}}, {{4128744773933910560ull, 7912798822647994097ull, 1424399109190209155ull, 6515976773859695406ull}}, {{9772616985844776104ull, 5279312509882604717ull, 11003870923342537252ull, 8144970967324619257ull}}, {{8413728625366679017ull, 12522942355531403756ull, 18406634373157555542ull, 5090606854577887035ull}}, {{10517160781708348771ull, 6430305907559478887ull, 18396606948019556524ull, 6363258568222358794ull}}, {{8534764958708048060ull, 8037882384449348609ull, 13772386648169669847ull, 7954073210277948493ull}}, {{16863443145260999798ull, 11941205517921924736ull, 10913584664319737606ull, 4971295756423717808ull}}, {{2632559857866698131ull, 5703134860547630113ull, 13641980830399672008ull, 6214119695529647260ull}}, {{7902385840760760568ull, 7128918575684537641ull, 17052476037999590010ull, 7767649619412059075ull}}, {{16468206196543945115ull, 9067260128230223929ull, 8351954514536049804ull, 4854781012132536922ull}}, {{6750199690397767682ull, 11334075160287779912ull, 1216571106315286447ull, 6068476265165671153ull}}, {{8437749612997209602ull, 9555907931932336986ull, 6132399901321495963ull, 7585595331457088941ull}}, {{9885279526550643905ull, 3666599448244016664ull, 6138592947539628929ull, 4740997082160680588ull}}, {{12356599408188304882ull, 9194935328732408734ull, 7673241184424536161ull, 5926246352700850735ull}}, {{6222377223380605294ull, 16105355179342898822ull, 4979865462103282297ull, 7407807940876063419ull}}, {{17724043819895042021ull, 3148317959448229907ull, 806572904600857484ull, 4629879963047539637ull}}, {{17543368756441414622ull, 3935397449310287384ull, 5619902149178459759ull, 5787349953809424546ull}}, {{3482466871842216661ull, 307560793210471327ull, 16248249723327850507ull, 7234187442261780682ull}}, {{18188141645084934539ull, 14219509046795252870ull, 11086940117305037325ull, 9042734302827225853ull}}, {{6755902509750696183ull, 11193036163460726996ull, 9235180582529342280ull, 5651708939267016158ull}}, {{8444878137188370228ull, 13991295204325908745ull, 2320603691306902042ull, 7064636174083770198ull}}, {{15167783689912850689ull, 8265746968552610123ull, 12124126650988403361ull, 8830795217604712747ull}}, {{7174021796981837729ull, 16695306901413851087ull, 5271736147654058148ull, 5519247011002945467ull}}, {{4355841227799909257ull, 2422389553057762243ull, 1977984166140184782ull, 6899058763753681834ull}}, {{833115516322498667ull, 12251358978176978612ull, 11695852244530006785ull, 8623823454692102292ull}}, {{9744069234556337475ull, 739570333719529776ull, 16533279689686030049ull, 5389889659182563932ull}}, {{12180086543195421844ull, 5536148935576800124ull, 2219855538397985945ull, 6737362073978204916ull}}, {{15225108178994277305ull, 11531872187898388059ull, 2774819422997482431ull, 8421702592472756145ull}}, {{7209849602657729364ull, 14124949145077574393ull, 13263477185441896279ull, 5263564120295472590ull}}, {{13623998021749549609ull, 13044500412919580087ull, 7355974444947594541ull, 6579455150369340738ull}}, {{12418311508759549107ull, 2470567460867311397ull, 18418340093039268985ull, 8224318937961675922ull}}, {{10067287702188412144ull, 13073319709110539383ull, 16123148576576931019ull, 5140199336226047451ull}}, {{7972423609308127276ull, 11729963617960786325ull, 15542249702293775870ull, 6425249170282559314ull}}, {{14577215530062546998ull, 5439082485596207098ull, 10204440091012444030ull, 8031561462853199143ull}}, {{13722445724716479778ull, 17234484608779793148ull, 13295304084523859374ull, 5019725914283249464ull}}, {{17153057155895599723ull, 12319733724119965627ull, 16619130105654824218ull, 6274657392854061830ull}}, {{16829635426442111749ull, 6176295118295181226ull, 11550540595213754465ull, 7843321741067577288ull}}, {{15130208159953707747ull, 15389399495002958026ull, 7219087872008596540ull, 4902076088167235805ull}}, {{9689388163087358876ull, 790005295044145917ull, 13635545858438133580ull, 6127595110209044756ull}}, {{16723421222286586499ull, 987506618805182396ull, 17044432323047666975ull, 7659493887761305945ull}}, {{1228766227074340754ull, 7534720664394320854ull, 3735241174263710003ull, 4787183679850816216ull}}, {{10759329820697701750ull, 4806714812065513163ull, 4669051467829637504ull, 5983979599813520270ull}}, {{8837476257444739284ull, 6008393515081891454ull, 15059686371641822688ull, 7479974499766900337ull}}, {{911736642475574149ull, 3755245946926182159ull, 2494774954635057324ull, 4674984062354312711ull}}, {{14974728858376631398ull, 4694057433657727698ull, 16953526748575985367ull, 5843730077942890888ull}}, {{9495039036116013439ull, 1255885773644771719ull, 2745164362010430093ull, 7304662597428613611ull}}, {{7257112776717628895ull, 6181543235483352553ull, 17266513507795201328ull, 9130828246785767013ull}}, {{16064910531516987819ull, 3863464522177095345ull, 13097413951585694782ull, 5706767654241104383ull}}, {{6246080109114071062ull, 14052702689576144990ull, 11760081421054730573ull, 7133459567801380479ull}}, {{17030972173247364635ull, 3730820306688017525ull, 10088415757891025313ull, 8916824459751725599ull}}, {{12950200617493296849ull, 13860977737748480713ull, 13222788876322972676ull, 5573015287344828499ull}}, {{2352692716584457350ull, 17326222172185600892ull, 11916800076976327941ull, 6966269109181035624ull}}, {{2940865895730571687ull, 7822719659949837403ull, 14896000096220409927ull, 8707836386476294530ull}}, {{17978942249327464968ull, 11806728815109730232ull, 13921686078565144108ull, 5442397741547684081ull}}, {{4026933737949779594ull, 14758411018887162791ull, 3567049542924266423ull, 6802997176934605102ull}}, {{421981154009836589ull, 13836327755181565585ull, 13682183965510108837ull, 8503746471168256377ull}}, {{11792953267324617628ull, 10953547856202172442ull, 1633835950802736167ull, 5314841544480160236ull}}, {{5517819547300996227ull, 9080248801825327649ull, 2042294938503420209ull, 6643551930600200295ull}}, {{11508960452553633188ull, 15961997020709047465ull, 16387926728411438973ull, 8304439913250250368ull}}, {{275571255204938887ull, 12282091147156848618ull, 10242454205257149358ull, 5190274945781406480ull}}, {{9567836105860949416ull, 6129241897091284964ull, 12803067756571436698ull, 6487843682226758100ull}}, {{11959795132326186770ull, 16884924408218882013ull, 16003834695714295872ull, 8109804602783447625ull}}, {{9780714966917560683ull, 10553077755136801258ull, 3084867657180353064ull, 5068627876739654766ull}}, {{3002521671792175046ull, 13191347193921001573ull, 13079456608330217138ull, 6335784845924568457ull}}, {{8364838108167606712ull, 7265811955546476158ull, 2514262705130607711ull, 7919731057405710572ull}}, {{616337799177366291ull, 11458661499857629455ull, 10794786227561405627ull, 4949831910878569107ull}}, {{14605480304253871576ull, 9711640856394648914ull, 8881796766024369130ull, 6187289888598211384ull}}, {{9033478343462563661ull, 2916179033638535335ull, 11102245957530461413ull, 7734112360747764230ull}}, {{12563452992305184145ull, 4128454905237778536ull, 2327217705029150479ull, 4833820225467352644ull}}, {{15704316240381480181ull, 548882613119835266ull, 2909022131286438099ull, 6042275281834190805ull}}, {{10407023263622074418ull, 14521161321681957795ull, 8247963682535435527ull, 7552844102292738506ull}}, {{4198546530550102559ull, 15993254853692305478ull, 9766663320012035108ull, 4720527563932961566ull}}, {{14471555200042404007ull, 1544824493405830231ull, 2984957113160268078ull, 5900659454916201958ull}}, {{13477757981625617104ull, 11154402653612063597ull, 12954568428305110905ull, 7375824318645252447ull}}, {{3012139421749857668ull, 107945261732915785ull, 11581524516954000728ull, 9219780398306565559ull}}, {{13411802184662130803ull, 67465788583072365ull, 14155981850737332311ull, 5762362748941603474ull}}, {{2929694675545499791ull, 13919390291011004169ull, 8471605276566889580ull, 7202953436177004343ull}}, {{8273804362859262643ull, 17399237863763755211ull, 5977820577281224071ull, 9003691795221255429ull}}, {{2865284717573345200ull, 17792052692493428863ull, 6041980870014458996ull, 5627307372013284643ull}}, {{17416663952248845212ull, 3793321791907234462ull, 2940790069090685842ull, 7034134215016605804ull}}, {{12547457903456280707ull, 13965024276738818886ull, 3675987586363357302ull, 8792667768770757255ull}}, {{3230475171232787538ull, 4116454154534373900ull, 9215021269118180170ull, 5495417355481723284ull}}, {{4038093964040984422ull, 14368939730022743183ull, 11518776586397725212ull, 6869271694352154105ull}}, {{435931436623842624ull, 17961174662528428979ull, 563412677714992803ull, 8586589617940192632ull}}, {{16413358212385759304ull, 8919891154866574159ull, 352132923571870502ull, 5366618511212620395ull}}, {{15905011747054811226ull, 1926491906728441891ull, 14275224209747001840ull, 6708273139015775493ull}}, {{15269578665391126128ull, 2408114883410552364ull, 4008972206901588588ull, 8385341423769719367ull}}, {{320114629014678022ull, 10728443838986371036ull, 9423136656954574723ull, 5240838389856074604ull}}, {{400143286268347528ull, 8798868780305575891ull, 11778920821193218404ull, 6551047987320093255ull}}, {{14335237163117598122ull, 10998585975381969863ull, 10111965008064135101ull, 8188809984150116569ull}}, {{15877052254589580682ull, 9179959243827425116ull, 17849193176108554198ull, 5118006240093822855ull}}, {{1399571244527424237ull, 2251577017929505588ull, 17699805451708304844ull, 6397507800117278569ull}}, {{1749464055659280296ull, 2814471272411881985ull, 8289698759353217343ull, 7996884750146598212ull}}, {{12622630080855519945ull, 8676573572898508096ull, 14404433761450536647ull, 4998052968841623882ull}}, {{15778287601069399931ull, 6234030947695747216ull, 8782170164958395001ull, 6247566211052029853ull}}, {{1276115427627198298ull, 12404224703047071925ull, 15589398724625381655ull, 7809457763815037316ull}}, {{3103415151480692888ull, 14670169467045501809ull, 520002166036087726ull, 4880911102384398323ull}}, {{8490954957778254014ull, 9114339796952101453ull, 14485060762827273370ull, 6101138877980497903ull}}, {{15225379715650205422ull, 2169552709335351008ull, 13494639935106703809ull, 7626423597475622379ull}}, {{9515862322281378389ull, 12885185489403064140ull, 6128306950227995928ull, 4766514748422263987ull}}, {{11894827902851722986ull, 16106481861753830175ull, 3048697669357607006ull, 5958143435527829984ull}}, {{10256848860137265828ull, 10909730290337511911ull, 3810872086697008758ull, 7447679294409787480ull}}, {{13328059565226872999ull, 2206895413033557040ull, 2381795054185630474ull, 4654799559006117175ull}}, {{16660074456533591248ull, 11981991303146722108ull, 16812301873014201804ull, 5818499448757646468ull}}, {{2378348996957437444ull, 14977489128933402636ull, 2568633267558200639ull, 7273124310947058086ull}}, {{2972936246196796805ull, 14110175392739365391ull, 12434163621302526607ull, 9091405388683822607ull}}, {{8775614181514079860ull, 15736388648103185225ull, 14688881290955160985ull, 5682128367927389129ull}}, {{15581203745319987728ull, 5835427754846817819ull, 4526043558411787520ull, 7102660459909236412ull}}, {{14864818663222596756ull, 7294284693558522274ull, 5657554448014734400ull, 8878325574886545515ull}}, {{13902197682941510877ull, 4558927933474076421ull, 1230128520795515048ull, 5548953484304090947ull}}, {{3542689048394724884ull, 5698659916842595527ull, 15372718706276557522ull, 6936191855380113683ull}}, {{18263419365775569817ull, 16346696932908020216ull, 14604212364418308998ull, 8670239819225142104ull}}, {{11414637103609731136ull, 5604999564640124731ull, 9127632727761443124ull, 5418899887015713815ull}}, {{9656610361084776016ull, 7006249455800155914ull, 6797854891274416001ull, 6773624858769642269ull}}, {{2847390914501194211ull, 13369497838177582797ull, 13109004632520407905ull, 8467031073462052836ull}}, {{4085462330776940334ull, 1438407121219907392ull, 17416499932180030749ull, 5291894420913783022ull}}, {{5106827913471175418ull, 6409694919952272144ull, 12547252878370262628ull, 6614868026142228778ull}}, {{6383534891838969272ull, 8012118649940340180ull, 6460694061108052477ull, 8268585032677785973ull}}, {{13213081344254131603ull, 7313417165426406564ull, 6343776797406226750ull, 5167865645423616233ull}}, {{16516351680317664504ull, 18365143493637784013ull, 12541407015185171341ull, 6459832056779520291ull}}, {{6810381545114916918ull, 9121371311765066305ull, 11065072750554076273ull, 8074790070974400364ull}}, {{15785703511765292834ull, 17230072115921636200ull, 16139042505951073478ull, 5046743794359000227ull}}, {{1285385315997064426ull, 12314218108047269443ull, 15562117114011453944ull, 6308429742948750284ull}}, {{15441789700278494244ull, 15392772635059086803ull, 1005902318804765814ull, 7885537178685937856ull}}, {{7345275553460364951ull, 5008796878484541348ull, 628688949252978634ull, 4928460736678711160ull}}, {{9181594441825456189ull, 15484368134960452493ull, 785861186566223292ull, 6160575920848388950ull}}, {{16088679070709208140ull, 908716094991014000ull, 10205698520062554924ull, 7700719901060486187ull}}, {{10055424419193255087ull, 9791319596224159558ull, 4072718565825402875ull, 4812949938162803867ull}}, {{3345908487136793051ull, 7627463476852811544ull, 479212188854365690ull, 6016187422703504834ull}}, {{4182385608920991314ull, 310957309211238622ull, 9822387272922732921ull, 7520234278379381042ull}}, {{16449049060857783283ull, 11723563364325493898ull, 10750678064004095979ull, 4700146423987113151ull}}, {{11337939289217453296ull, 10042768186979479469ull, 8826661561577732070ull, 5875183029983891439ull}}, {{337366056239652908ull, 3330088196869573529ull, 6421640933544777184ull, 7343978787479864299ull}}, {{5033393588726954039ull, 4162610246086966911ull, 3415365148503583576ull, 9179973484349830374ull}}, {{10063400020595428130ull, 2601631403804354319ull, 15969661273096903447ull, 5737483427718643983ull}}, {{7967564007316897259ull, 17087097310037606611ull, 15350390572943741404ull, 7171854284648304979ull}}, {{5347768990718733670ull, 2912127563837456648ull, 14576302197752288852ull, 8964817855810381224ull}}, {{3342355619199208544ull, 11043451764253186213ull, 9110188873595180532ull, 5603011159881488265ull}}, {{8789630542426398583ull, 13804314705316482766ull, 15999422110421363569ull, 7003763949851860331ull}}, {{1763666141178222421ull, 3420335326363439746ull, 15387591619599316558ull, 8754704937314825414ull}}, {{5713977356663776917ull, 15972767634259313553ull, 5005558743822184944ull, 5471690585821765884ull}}, {{11754157714257109051ull, 1519215469114590325ull, 6256948429777731181ull, 6839613232277207355ull}}, {{857639087539222601ull, 6510705354820625811ull, 3209499518794776072ull, 8549516540346509194ull}}, {{16676925494207871790ull, 4069190846762891131ull, 6617623217674122949ull, 5343447837716568246ull}}, {{16234470849332451833ull, 9698174576881001818ull, 17495401058947429494ull, 6679309797145710307ull}}, {{11069716524810788983ull, 2899346184246476465ull, 17257565305256898964ull, 8349137246432137884ull}}, {{1043800365661259ull, 11035463402008823599ull, 1562606278930786044ull, 5218210779020086178ull}}, {{13836362805739240285ull, 13794329252511029498ull, 11176629885518258363ull, 6522763473775107722ull}}, {{8072081470319274549ull, 12631225547211398969ull, 4747415320043047146ull, 8153454342218884653ull}}, {{16574265965018016353ull, 12506201985434512259ull, 5272977584240598418ull, 5095908963886802908ull}}, {{16106146437845132537ull, 6409380444938364516ull, 6591221980300748023ull, 6369886204858503635ull}}, {{1685938973596864055ull, 3400039537745567742ull, 3627341456948547125ull, 7962357756073129544ull}}, {{14888769913780203747ull, 4430867720304673790ull, 2267088410592841953ull, 4976473597545705965ull}}, {{9387590355370478875ull, 10150270668808230142ull, 7445546531668440345ull, 6220591996932132456ull}}, {{2511115907358322786ull, 17299524354437675582ull, 9306933164585550431ull, 7775739996165165570ull}}, {{15404505497381115454ull, 17729731749164629094ull, 10428519246293356923ull, 4859837497603228481ull}}, {{10032259834871618509ull, 17550478668028398464ull, 17647335076294084058ull, 6074796872004035601ull}}, {{12540324793589523136ull, 12714726298180722272ull, 8224110790085441361ull, 7593496090005044502ull}}, {{7837702995993451960ull, 1029174908721869564ull, 528383225376012947ull, 4745935056253152814ull}}, {{9797128744991814950ull, 15121526691184500667ull, 9883851068574791991ull, 5932418820316441017ull}}, {{7634724912812380783ull, 14290222345553237930ull, 16966499854145877893ull, 7415523525395551271ull}}, {{9383389088935125894ull, 11237231975184467658ull, 17521591436482255539ull, 4634702203372219544ull}}, {{2505864324314131559ull, 9434853950553196669ull, 3455245221893267808ull, 5793377754215274431ull}}, {{7744016423820052353ull, 11793567438191495836ull, 18154114582648748472ull, 7241722192769093038ull}}, {{9680020529775065441ull, 14741959297739369795ull, 13469271191456159782ull, 9052152740961366298ull}}, {{3744169821895721949ull, 4602038542659718218ull, 13029980513087487768ull, 5657595463100853936ull}}, {{13903584314224428244ull, 5752548178324647772ull, 16287475641359359710ull, 7071994328876067420ull}}, {{17379480392780535305ull, 16414057259760585523ull, 1912600477989648021ull, 8839992911095084276ull}}, {{8556332236274140614ull, 12564628796564059904ull, 10418747335598305821ull, 5524995569434427672ull}}, {{10695415295342675767ull, 1870727940422911168ull, 13023434169497882277ull, 6906244461793034590ull}}, {{13369269119178344708ull, 6950095943956026864ull, 7055920675017577038ull, 8632805577241293238ull}}, {{8355793199486465443ull, 18178868020254680502ull, 18245008477168149360ull, 5395503485775808273ull}}, {{1221369462503305996ull, 4276840951608799012ull, 8971202541178022989ull, 6744379357219760342ull}}, {{1526711828129132494ull, 9957737207938386669ull, 1990631139617752928ull, 8430474196524700428ull}}, {{3260037901794401761ull, 6223585754961491668ull, 10467516499115871388ull, 5269046372827937767ull}}, {{4075047377243002201ull, 7779482193701864585ull, 8472709605467451331ull, 6586307966034922209ull}}, {{9705495239981140656ull, 5112666723699942827ull, 15202573025261702068ull, 8232884957543652761ull}}, {{3760091515774518958ull, 12418788739167240075ull, 2584079113147481936ull, 5145553098464782976ull}}, {{88428376290760793ull, 15523485923959050094ull, 3230098891434352420ull, 6431941373080978720ull}}, {{9333907507218226799ull, 957613331239261001ull, 4037623614292940526ull, 8039926716351223400ull}}, {{17362907238079861510ull, 14433566387306701837ull, 2523514758933087828ull, 5024954197719514625ull}}, {{7868575992317663175ull, 18041957984133377297ull, 7766079467093747689ull, 6281192747149393281ull}}, {{14447406008824466873ull, 8717389424884557909ull, 14319285352294572516ull, 7851490933936741601ull}}, {{11335471764728985748ull, 14671740427407624501ull, 2032024317543025966ull, 4907181833710463501ull}}, {{334281650629068472ull, 9116303497404754819ull, 7151716415356170362ull, 6133977292138079376ull}}, {{14252910118568499302ull, 2172007334901167715ull, 8939645519195212953ull, 7667471615172599220ull}}, {{6602225814891618112ull, 12886719630381699582ull, 14810650486351783903ull, 4792169759482874512ull}}, {{17476154305469298448ull, 11496713519549736573ull, 66569034230178263ull, 5990212199353593141ull}}, {{8010134826554459348ull, 9759205881009782813ull, 4694897311215110733ull, 7487765249191991426ull}}, {{7312177275810231045ull, 8405346684844808210ull, 7545996837936832112ull, 4679853280744994641ull}}, {{18363593631617564614ull, 10506683356056010262ull, 14044182065848428044ull, 5849816600931243301ull}}, {{13731120002667179959ull, 13133354195070012828ull, 3720169527028371343ull, 7312270751164054127ull}}, {{17163900003333974949ull, 11805006725410128131ull, 38525890358076275ull, 9140338438955067659ull}}, {{8421594492870040391ull, 5072286194167636130ull, 16164979745969655336ull, 5712711524346917286ull}}, {{1303621079232774681ull, 6340357742709545163ull, 10982852645607293362ull, 7140889405433646608ull}}, {{15464584404323132063ull, 17148819215241707261ull, 13728565807009116702ull, 8926111756792058260ull}}, {{11971208261915651492ull, 6106325991098679134ull, 17803725666235473747ull, 5578819847995036412ull}}, {{5740638290539788556ull, 3021221470445961014ull, 3807913009084790568ull, 6973524809993795516ull}}, {{16399169900029511503ull, 3776526838057451267ull, 4759891261355988210ull, 8716906012492244395ull}}, {{7943638178304750738ull, 6972015292213294946ull, 669089029133798679ull, 5448066257807652747ull}}, {{706175686026162614ull, 4103333096839230779ull, 14671419341699412061ull, 6810082822259565933ull}}, {{14717777662814866979ull, 9740852389476426377ull, 4504216121842101364ull, 8512603527824457417ull}}, {{2281082011618210006ull, 15311404780277542294ull, 14344350122219783112ull, 5320377204890285885ull}}, {{12074724551377538316ull, 692511901637376251ull, 4095379597492565179ull, 6650471506112857357ull}}, {{10481719670794534991ull, 14700697932328884026ull, 9730910515293094377ull, 8313089382641071696ull}}, {{11162760812673972273ull, 2270407180064470660ull, 6081819072058183986ull, 5195680864150669810ull}}, {{13953451015842465341ull, 12061381011935364133ull, 16825645876927505790ull, 6494601080188337262ull}}, {{3606755714520917965ull, 5853354228064429359ull, 11808685309304606430ull, 8118251350235421578ull}}, {{9171751349216655584ull, 17493404447822432061ull, 11992114336742766922ull, 5073907093897138486ull}}, {{16076375204948207384ull, 12643383522923264268ull, 5766770884073682845ull, 6342383867371423108ull}}, {{1648724932475707614ull, 1969171348371916624ull, 7208463605092103557ull, 7927979834214278885ull}}, {{1030453082797317259ull, 3536575101946141842ull, 6811132762396258675ull, 4954987396383924303ull}}, {{10511438390351422382ull, 18255776932714841014ull, 3902229934567935439ull, 6193734245479905379ull}}, {{3915925951084502169ull, 18208035147466163364ull, 266101399782531395ull, 7742167806849881724ull}}, {{11670825756282589664ull, 9074178957952658150ull, 9389685411718857930ull, 4838854879281176077ull}}, {{5365160158498461271ull, 2119351660586046880ull, 16348792783075960317ull, 6048568599101470096ull}}, {{6706450198123076589ull, 7260875594159946504ull, 1989246905135398780ull, 7560710748876837621ull}}, {{4191531373826922868ull, 13761419283204742373ull, 3549122324923318189ull, 4725444218048023513ull}}, {{9851100235711041489ull, 3366716048723764254ull, 9048088924581535641ull, 5906805272560029391ull}}, {{3090503257784026054ull, 8820081079332093222ull, 6698425137299531647ull, 7383506590700036739ull}}, {{15766622591397179996ull, 12430079702223640119ull, 1880672701598513327ull, 4614691619187522962ull}}, {{15096592220819087091ull, 10925913609352162245ull, 11574212913852917467ull, 5768364523984403702ull}}, {{5035682220741695151ull, 9045705993262814903ull, 5244394105461371026ull, 7210455654980504628ull}}, {{1682916757499731035ull, 2083760454723742821ull, 6555492631826713783ull, 9013069568725630785ull}}, {{3357665982651025849ull, 8219879311843421119ull, 15626397940960165874ull, 5633168480453519240ull}}, {{18032140533595946023ull, 1051477102949500590ull, 1086253352490655727ull, 7041460600566899051ull}}, {{13316803630140156721ull, 15149404433969039450ull, 15192874745895483370ull, 8801825750708623813ull}}, {{12934688287264985855ull, 14080063789658037560ull, 11801389725398371058ull, 5501141094192889883ull}}, {{16168360359081232318ull, 8376707700217771142ull, 10140051138320575919ull, 6876426367741112354ull}}, {{10987078411996764589ull, 5859198606844826024ull, 3451691886045944091ull, 8595532959676390443ull}}, {{6866924007497977869ull, 1356156120064322313ull, 18298208493274572721ull, 5372208099797744026ull}}, {{13195341027799860240ull, 6306881168507790795ull, 13649388579738440093ull, 6715260124747180033ull}}, {{11882490266322437395ull, 12495287479062126398ull, 3226677669390886404ull, 8394075155933975042ull}}, {{2814870398024135468ull, 17032926711268604807ull, 6628359561796691906ull, 5246296972458734401ull}}, {{17353646052812333047ull, 12067786352230980200ull, 12897135470673252787ull, 6557871215573418001ull}}, {{3245313492305864693ull, 10473046921861337347ull, 2286361283059402272ull, 8197339019466772502ull}}, {{18169221997187023097ull, 6545654326163335841ull, 15264033857194290132ull, 5123336887166732813ull}}, {{8876469441201615159ull, 8182067907704169802ull, 5244984266210698953ull, 6404171108958416017ull}}, {{1872214764647243141ull, 14839270903057600157ull, 11167916351190761595ull, 8005213886198020021ull}}, {{3475977237118220915ull, 6968701305197306146ull, 9285790728707919949ull, 5003258678873762513ull}}, {{13568343583252551952ull, 13322562649924020586ull, 16218924429312287840ull, 6254073348592203141ull}}, {{7737057442210914132ull, 16653203312405025733ull, 6438597481358196088ull, 7817591685740253927ull}}, {{7141503910595515285ull, 10408252070253141083ull, 10941652453489954411ull, 4885994803587658704ull}}, {{4315193869817006202ull, 8398629069389038450ull, 13677065566862443014ull, 6107493504484573380ull}}, {{14617364374126033560ull, 1274914299881522254ull, 17096331958578053768ull, 7634366880605716725ull}}, {{4524166715401383071ull, 796821437425951409ull, 12991050483324977557ull, 4771479300378572953ull}}, {{10266894412679116743ull, 5607712815209827165ull, 2403755048874058234ull, 5964349125473216192ull}}, {{17445304034276283833ull, 16233013055867059764ull, 3004693811092572792ull, 7455436406841520240ull}}, {{1679942984567901588ull, 10145633159916912353ull, 1877933631932857995ull, 4659647754275950150ull}}, {{6711614749137264888ull, 8070355431468752537ull, 11570789076770848302ull, 5824559692844937687ull}}, {{13001204454848969014ull, 864572252481164863ull, 9851800327536172474ull, 7280699616056172109ull}}, {{11639819550133823364ull, 10304087352456231887ull, 16926436427847603496ull, 9100874520070215136ull}}, {{14192416246474721458ull, 6440054595285144929ull, 10579022767404752185ull, 5688046575043884460ull}}, {{3905462252811238111ull, 12661754262533819066ull, 13223778459255940231ull, 7110058218804855575ull}}, {{14105199852868823447ull, 11215506809739885928ull, 11918037055642537385ull, 8887572773506069469ull}}, {{8815749908043014654ull, 92162728446346849ull, 9754616168990279818ull, 5554732983441293418ull}}, {{15631373403481156222ull, 9338575447412709369ull, 2969898174383073964ull, 6943416229301616773ull}}, {{5704158699069281565ull, 11673219309265886712ull, 8324058736406230359ull, 8679270286627020966ull}}, {{3565099186918300978ull, 14213291095932261051ull, 590850691826506070ull, 5424543929141888104ull}}, {{18291432038930039935ull, 8543241833060550505ull, 738563364783132588ull, 6780679911427360130ull}}, {{9029231993380386206ull, 10679052291325688132ull, 10146576242833691543ull, 8475849889284200162ull}}, {{14866642032717517187ull, 13591936709719636938ull, 10953296170198445118ull, 5297406180802625101ull}}, {{9359930504042120676ull, 7766548850294770365ull, 18303306231175444302ull, 6621757726003281376ull}}, {{16311599148480038749ull, 484814026013687148ull, 4432388715259753762ull, 8277197157504101721ull}}, {{971377430945248410ull, 4914694784685942372ull, 14299457993105815861ull, 5173248223440063575ull}}, {{1214221788681560513ull, 10755054499284815869ull, 13262636472954881922ull, 6466560279300079469ull}}, {{6129463254279338545ull, 4220446087251244028ull, 2743237535911438691ull, 8083200349125099337ull}}, {{13054286570779362399ull, 331935795318333565ull, 13243738506013118942ull, 5052000218203187085ull}}, {{2482800158192039286ull, 9638291781002692765ull, 2719615077234234965ull, 6315000272753983857ull}}, {{7715186216167437011ull, 16659550744680753860ull, 8011204864970181610ull, 7893750340942479821ull}}, {{14045363421959423940ull, 15023905233852859066ull, 7312846049820057458ull, 4933593963089049888ull}}, {{8333332240594504117ull, 9556509505461298025ull, 9141057562275071823ull, 6166992453861312360ull}}, {{15028351319170518051ull, 7333950863399234627ull, 11426321952843839779ull, 7708740567326640450ull}}, {{7086876565267879830ull, 2277876280410827690ull, 11753137238954787766ull, 4817962854579150281ull}}, {{18081967743439625595ull, 12070717387368310420ull, 856363493411320995ull, 6022453568223937852ull}}, {{4155715605589980378ull, 10476710715783000122ull, 1070454366764151244ull, 7528066960279922315ull}}, {{7209008271921125640ull, 15771316234219150884ull, 16809935043723452191ull, 4705041850174951446ull}}, {{9011260339901407050ull, 15102459274346550701ull, 11789046767799539431ull, 5881302312718689308ull}}, {{15875761443304146717ull, 14266388074505800472ull, 14736308459749424289ull, 7351627890898361635ull}}, {{1397957730420631780ull, 3997927037850086879ull, 13808699556259392458ull, 9189534863622952044ull}}, {{7791252609153976718ull, 7110390417083692203ull, 17853809259516896094ull, 5743459289764345027ull}}, {{5127379743015082994ull, 18111360058209391062ull, 17705575555968732213ull, 7179324112205431284ull}}, {{15632596715623629550ull, 8804142017479575115ull, 3685225371251363651ull, 8974155140256789106ull}}, {{7464529938051074517ull, 3196745751711040495ull, 6914951875459490186ull, 5608846962660493191ull}}, {{4718976404136455242ull, 13219304226493576427ull, 4032003825896974828ull, 7011058703325616489ull}}, {{1287034486743181149ull, 16524130283116970534ull, 9651690800798606439ull, 8763823379157020611ull}}, {{14639454609496651930ull, 17245110454589188439ull, 3726463741285435072ull, 5477389611973137882ull}}, {{13687632243443427009ull, 3109643994526933933ull, 13881451713461569649ull, 6846737014966422352ull}}, {{3274482249022120049ull, 8498741011586055321ull, 17351814641826962061ull, 8558421268708027940ull}}, {{13575766451707294791ull, 7617556141454978527ull, 1621512114287075480ull, 5349013292942517463ull}}, {{12358022046206730584ull, 9521945176818723159ull, 15861948198141008062ull, 6686266616178146828ull}}, {{10835841539331025326ull, 2679059434168628141ull, 1380691173966708462ull, 8357833270222683536ull}}, {{9078243971295584781ull, 15509470201637556300ull, 862931983729192788ull, 5223645793889177210ull}}, {{11347804964119480976ull, 940093678337393759ull, 10302037016516266794ull, 6529557242361471512ull}}, {{9573070186721963316ull, 10398489134776518007ull, 12877546270645333492ull, 8161946552951839390ull}}, {{12900697894342308929ull, 15722427746090099562ull, 3436780400725945528ull, 5101216595594899619ull}}, {{6902500331073110353ull, 1206290608903072837ull, 18131033556189595623ull, 6376520744493624523ull}}, {{13239811432268775845ull, 15342921316411004758ull, 18052105926809606624ull, 7970650930617030654ull}}, {{3663196126740596999ull, 9589325822756877974ull, 6670880185828616236ull, 4981656831635644159ull}}, {{13802367195280522057ull, 11986657278446097467ull, 3726914213858382391ull, 6227071039544555199ull}}, {{12641272975673264667ull, 10371635579630233930ull, 46956748895590085ull, 7783838799430693999ull}}, {{12512481628223178321ull, 8788115246482590158ull, 6946876995700825659ull, 4864899249644183749ull}}, {{6417229998424197093ull, 6373458039675849794ull, 13295282263053419978ull, 6081124062055229686ull}}, {{17244909534885022174ull, 17190194586449588050ull, 7395730791961999164ull, 7601405077569037108ull}}, {{15389754477730526763ull, 1520499579676216723ull, 13845703781831025286ull, 4750878173480648192ull}}, {{14625507078735770550ull, 11123996511450046712ull, 17307129727288781607ull, 5938597716850810240ull}}, {{18281883848419713187ull, 9293309620885170486ull, 3187168085401425393ull, 7423247146063512801ull}}, {{6814491386834932838ull, 17337533559121701314ull, 13521195099444360630ull, 4639529466289695500ull}}, {{17741486270398441855ull, 12448544912047350834ull, 16901493874305450788ull, 5799411832862119375ull}}, {{12953485801143276511ull, 15560681140059188543ull, 16515181324454425581ull, 7249264791077649219ull}}, {{11580171233001707735ull, 5615793369791821967ull, 16032290637140644073ull, 9061580988847061524ull}}, {{14155136048267149190ull, 15039085902188358489ull, 796809611358126737ull, 5663488118029413453ull}}, {{3858862005051772776ull, 4963799322453284400ull, 5607698032625046326ull, 7079360147536766816ull}}, {{4823577506314715970ull, 15428121189921381308ull, 7009622540781307907ull, 8849200184420958520ull}}, {{12238107978301473289ull, 7336732734487169365ull, 4381014087988317442ull, 5530750115263099075ull}}, {{1462576917594677900ull, 18394287954963737515ull, 864581591558008898ull, 6913437644078873844ull}}, {{15663279202275511086ull, 13769487906849896085ull, 1080726989447511123ull, 8641797055098592305ull}}, {{12095392510635888381ull, 6300086932567491101ull, 12204669414473164212ull, 5401123159436620190ull}}, {{1284182583012696764ull, 7875108665709363877ull, 6032464731236679457ull, 6751403949295775238ull}}, {{6216914247193258859ull, 14455571850564092750ull, 16763952950900625129ull, 8439254936619719047ull}}, {{17720629459777950499ull, 2117203378961476112ull, 17394999621953972562ull, 5274534335387324404ull}}, {{3704042751012886508ull, 11869876260556620949ull, 3297005453732914086ull, 6593167919234155506ull}}, {{9241739457193496039ull, 5613973288841000378ull, 13344628854020918416ull, 8241459899042694382ull}}, {{10387773179173322928ull, 3508733305525625236ull, 3728707015335686106ull, 5150912436901683989ull}}, {{12984716473966653660ull, 13609288668761807353ull, 9272569787596995536ull, 6438640546127104986ull}}, {{2395837537176153363ull, 17011610835952259192ull, 2367340197641468612ull, 8048300682658881233ull}}, {{1497398460735095852ull, 1408884735615386187ull, 13008802669594387643ull, 5030187926661800770ull}}, {{15706806131201033527ull, 15596163974801396445ull, 7037631300138208745ull, 6287734908327250963ull}}, {{5798449608719128197ull, 5660146913219581845ull, 4185353106745373028ull, 7859668635409063704ull}}, {{5929874014663149075ull, 12760963857617014461ull, 2615845691715858142ull, 4912292897130664815ull}}, {{12024028536756324248ull, 6727832785166492268ull, 17104865169926986390ull, 6140366121413331018ull}}, {{15030035670945405310ull, 17633163018312891143ull, 12157709425553957179ull, 7675457651766663773ull}}, {{16311301321981960175ull, 8714883877231863012ull, 9904411400184917189ull, 4797161032354164858ull}}, {{1942382578767898602ull, 15505290864967216670ull, 3157142213376370678ull, 5996451290442706073ull}}, {{11651350260314649061ull, 10158241544354245029ull, 8558113785147851252ull, 7495564113053382591ull}}, {{9587936921910349615ull, 15572273002076178951ull, 12266350143358488888ull, 4684727570658364119ull}}, {{7373235133960549115ull, 1018597178885672073ull, 10721251660770723207ull, 5855909463322955149ull}}, {{13828229935878074298ull, 15108304528889253803ull, 18013250594390791912ull, 7319886829153693936ull}}, {{12673601401420204968ull, 438636587402015638ull, 4069819169278938275ull, 9149858536442117421ull}}, {{3309314857460240201ull, 16415048931622117438ull, 4849479990013030373ull, 5718661585276323388ull}}, {{13360015608680076059ull, 6683753109245483085ull, 6061849987516287967ull, 7148326981595404235ull}}, {{2864961455567931362ull, 3743005368129465953ull, 2965626465967972055ull, 8935408726994255294ull}}, {{13319815955798426861ull, 9256907382721998076ull, 15688574596512146246ull, 5584630454371409558ull}}, {{16649769944748033577ull, 2347762191547721787ull, 10387346208785407000ull, 6980788067964261948ull}}, {{16200526412507654067ull, 2934702739434652234ull, 12984182760981758750ull, 8725985084955327435ull}}, {{14737015026244671696ull, 15669247267428821358ull, 5809271216399905266ull, 5453740678097079647ull}}, {{9197896745951063812ull, 10363187047431250890ull, 2649903002072493679ull, 6817175847621349559ull}}, {{2273998895584053956ull, 8342297790861675709ull, 17147436807872780811ull, 8521469809526686948ull}}, {{3727092318953727675ull, 2908093110074853366ull, 1493775968065712199ull, 5325918630954179343ull}}, {{13882237435546935402ull, 17470174442875730419ull, 15702278015364303960ull, 6657398288692724178ull}}, {{12741110776006281348ull, 3390973979885111408ull, 10404475482350604143ull, 8321747860865905223ull}}, {{7963194235003925843ull, 9036887765069276486ull, 13420326204110209445ull, 5201092413041190764ull}}, {{730620756900131495ull, 15907795724763983512ull, 16775407755137761806ull, 6501365516301488455ull}}, {{913275946125164369ull, 10661372619100203582ull, 16357573675494814354ull, 8126706895376860569ull}}, {{14405855521610391443ull, 11275043905365015142ull, 3305954519543177115ull, 5079191809610537856ull}}, {{8783947365158213495ull, 9482118863278881024ull, 4132443149428971394ull, 6348989762013172320ull}}, {{10979934206447766869ull, 2629276542243825472ull, 5165553936786214243ull, 7936237202516465400ull}}, {{6862458879029854293ull, 17784198903398248584ull, 3228471210491383901ull, 4960148251572790875ull}}, {{8578073598787317866ull, 8395190573965647018ull, 17870647068396393589ull, 6200185314465988593ull}}, {{1499219961629371525ull, 15105674235884446677ull, 8503250780213328274ull, 7750231643082485742ull}}, {{3242855485232051155ull, 14052732415855167077ull, 702845719205942267ull, 4843894776926553589ull}}, {{8665255374967451848ull, 12954229501391570942ull, 5490243167434815738ull, 6054868471158191986ull}}, {{1608197181854539002ull, 6969414839884687870ull, 16086175996148295481ull, 7568585588947739982ull}}, {{14840181293941250588ull, 15885099320996399678ull, 5442173979165296771ull, 4730365993092337489ull}}, {{9326854580571787427ull, 15244688132818111694ull, 11414403492384008868ull, 5912957491365421861ull}}, {{2435196188859958476ull, 609116092313088002ull, 432946310197847374ull, 7391196864206777327ull}}, {{6133683636464861952ull, 14215755612977843713ull, 7188120471514736464ull, 4619498040129235829ull}}, {{12278790564008465343ull, 17769694516222304641ull, 13596836607820808484ull, 5774372550161544786ull}}, {{1513430149728417967ull, 3765374071568329186ull, 7772673722921234798ull, 7217965687701930983ull}}, {{11115159724015298267ull, 13930089626315187290ull, 5104156135224155593ull, 9022457109627413729ull}}, {{11558660845936949321ull, 1788776988805910200ull, 14719312630583567006ull, 5639035693517133580ull}}, {{14448326057421186651ull, 11459343272862163558ull, 18399140788229458757ull, 7048794616896416975ull}}, {{8837035534921707506ull, 489121035795540736ull, 18387239966859435543ull, 8810993271120521219ull}}, {{5523147209326067191ull, 7223229675013294816ull, 9186181970073453262ull, 5506870794450325762ull}}, {{6903934011657583989ull, 18252409130621394328ull, 2259355425737040769ull, 6883588493062907203ull}}, {{8629917514571979986ull, 8980453357994579198ull, 16659252337453464674ull, 8604485616328634003ull}}, {{782012428180099587ull, 10224469367173999903ull, 8106189701694721469ull, 5377803510205396252ull}}, {{14812573590507288196ull, 17392272727394887782ull, 10132737127118401836ull, 6722254387756745315ull}}, {{9292344951279334437ull, 3293596835534058112ull, 8054235390470614392ull, 8402817984695931644ull}}, {{5807715594549584023ull, 2058498022208786320ull, 14257269155898909803ull, 5251761240434957277ull}}, {{7259644493186980029ull, 16408180583043146612ull, 3986528389591473541ull, 6564701550543696597ull}}, {{9074555616483725036ull, 6675167673521769553ull, 9594846505416729831ull, 8205876938179620746ull}}, {{17200812306370797908ull, 11089508823592187826ull, 10608465084312844048ull, 5128673086362262966ull}}, {{12277643346108721577ull, 13861886029490234783ull, 4037209318536279252ull, 6410841357952828708ull}}, {{10735368164208514067ull, 17327357536862793479ull, 5046511648170349065ull, 8013551697441035885ull}}, {{13627134130271403148ull, 3912069432898164068ull, 5459912789320162118ull, 5008469810900647428ull}}, {{17033917662839253935ull, 14113458827977480893ull, 6824890986650202647ull, 6260587263625809285ull}}, {{7457339023266903706ull, 13030137516544463213ull, 13142799751740141213ull, 7825734079532261606ull}}, {{6966679898755508769ull, 10449678957053983460ull, 3602563826410200354ull, 4891083799707663504ull}}, {{8708349873444385961ull, 3838726659462703517ull, 4503204783012750443ull, 6113854749634579380ull}}, {{15497123360232870355ull, 186722305900991492ull, 5629005978765938054ull, 7642318437043224225ull}}, {{462330063290768164ull, 13951759496470283395ull, 15047343782797181043ull, 4776449023152015140ull}}, {{14412970634395623917ull, 12828013352160466339ull, 362435654786924688ull, 5970561278940018926ull}}, {{13404527274567141992ull, 16035016690200582924ull, 9676416605338431668ull, 7463201598675023657ull}}, {{17601201583459239553ull, 798513394520588519ull, 17576975424404989553ull, 4664500999171889785ull}}, {{17389815960896661537ull, 5609827761578123553ull, 8136161225224073229ull, 5830626248964862232ull}}, {{7902211895838663209ull, 11623970720400042346ull, 10170201531530091536ull, 7288282811206077790ull}}, {{654392832943553204ull, 14529963400500052933ull, 3489379877557838612ull, 9110353514007597238ull}}, {{2714838529803414704ull, 18304599162167308891ull, 16015920478755812844ull, 5693970946254748273ull}}, {{17228606217536432092ull, 4434004878999584497ull, 6184842543162602344ull, 7117463682818435342ull}}, {{7700699716638376403ull, 5542506098749480622ull, 16954425215808028738ull, 8896829603523044177ull}}, {{201251304471597348ull, 8075752330145813293ull, 3678986732238936105ull, 5560518502201902611ull}}, {{4863250149016884589ull, 14706376431109654520ull, 18433791470580833843ull, 6950648127752378263ull}}, {{6079062686271105736ull, 13771284520459680246ull, 18430553319798654400ull, 8688310159690472829ull}}, {{17634472234201604797ull, 8607052825287300153ull, 13824938834087852952ull, 5430193849806545518ull}}, {{8208032237469842285ull, 10758816031609125192ull, 8057801505755040382ull, 6787742312258181898ull}}, {{10260040296837302856ull, 4225148002656630682ull, 848879845339024670ull, 8484677890322727373ull}}, {{11024211203950702189ull, 16475775556942557888ull, 2836392912550584370ull, 5302923681451704608ull}}, {{13780264004938377736ull, 11371347409323421552ull, 3545491140688230463ull, 6628654601814630760ull}}, {{17225330006172972170ull, 9602498243226889036ull, 4431863925860288079ull, 8285818252268288450ull}}, {{1542459217003331799ull, 12919090429657887504ull, 7381600972090067953ull, 5178636407667680281ull}}, {{1928074021254164748ull, 2313804981790195668ull, 13838687233539972846ull, 6473295509584600351ull}}, {{2410092526567705935ull, 12115628264092520393ull, 12686673023497578153ull, 8091619386980750439ull}}, {{13035522875173285969ull, 654738637416743389ull, 14846699667327068202ull, 5057262116862969024ull}}, {{2459345538684443750ull, 10041795333625705045ull, 111630510449283636ull, 6321577646078711281ull}}, {{7685867941782942591ull, 12552244167032131306ull, 4751224156488992449ull, 7901972057598389101ull}}, {{9415353482041727024ull, 927623576754000210ull, 5275358107019314233ull, 4938732535998993188ull}}, {{2545819815697382971ull, 5771215489369888167ull, 6594197633774142791ull, 6173415669998741485ull}}, {{17017332824903892426ull, 2602333343284972304ull, 12854433060645066393ull, 7716769587498426856ull}}, {{10635833015564932766ull, 13155673385621577450ull, 8034020662903166495ull, 4822980992186516785ull}}, {{4071419232601390150ull, 11832905713599583909ull, 14654211847056346023ull, 6028726240233145981ull}}, {{9700960059179125591ull, 10179446123572091982ull, 4482706753538268817ull, 7535907800291432477ull}}, {{1451414018559565591ull, 17891368873301027249ull, 5107534730175111962ull, 4709942375182145298ull}}, {{6425953541626844892ull, 13140839054771508253ull, 15607790449573665761ull, 5887427968977681622ull}}, {{12644127945460944019ull, 2590990763182221604ull, 10286366025112306394ull, 7359284961222102028ull}}, {{15805159931826180024ull, 12462110490832552813ull, 12857957531390382992ull, 9199106201527627535ull}}, {{12184067966605056467ull, 7788819056770345508ull, 14953752484760071226ull, 5749441375954767209ull}}, {{15230084958256320584ull, 512651784108156077ull, 4857132550667925321ull, 7186801719943459012ull}}, {{5202548142538237018ull, 5252500748562583001ull, 6071415688334906651ull, 8983502149929323765ull}}, {{14780807635154867896ull, 976969958637920423ull, 6100477814423010609ull, 5614688843705827353ull}}, {{13864323525516196966ull, 5832898466724788433ull, 12237283286456151165ull, 7018361054632284191ull}}, {{3495346351613082496ull, 11902809101833373446ull, 10684918089642801052ull, 8772951318290355239ull}}, {{16019649525040340272ull, 16662627725500634211ull, 13595602833667832513ull, 5483094573931472024ull}}, {{15412875887873037436ull, 6993226601593629052ull, 16994503542084790642ull, 6853868217414340030ull}}, {{819350786131745179ull, 17964905288846812124ull, 12019757390751212494ull, 8567335271767925038ull}}, {{9735466278187116545ull, 6616379787101869673ull, 2900662350792119905ull, 5354584544854953149ull}}, {{16781018866161283585ull, 12882160752304724995ull, 8237513956917537785ull, 6693230681068691436ull}}, {{16364587564274216577ull, 2267642885098742532ull, 10296892446146922232ull, 8366538351335864295ull}}, {{1004495190816609553ull, 1417276803186714083ull, 13353086806482908251ull, 5229086469584915184ull}}, {{15090677043802925653ull, 15606654059265556315ull, 16691358508103635313ull, 6536358086981143980ull}}, {{14251660286326269162ull, 5673259518799781682ull, 2417454061419992526ull, 8170447608726429976ull}}, {{13518973697381306130ull, 17380845254532027263ull, 1510908788387495328ull, 5106529755454018735ull}}, {{12287031103299244759ull, 3279312494455482463ull, 15723694040766532873ull, 6383162194317523418ull}}, {{10747102860696668045ull, 8710826636496740983ull, 10431245514103390283ull, 7978952742896904273ull}}, {{13634468315576499384ull, 3138423638596769162ull, 18048743492383088687ull, 4986845464310565170ull}}, {{7819713357615848422ull, 17758087603528125165ull, 13337557328624085050ull, 6233556830388206463ull}}, {{14386327715447198431ull, 12974237467555380648ull, 12060260642352718409ull, 7791946037985258079ull}}, {{8991454822154499020ull, 1191369389581031049ull, 14455191929111530862ull, 4869966273740786299ull}}, {{15851004546120511679ull, 10712583773831064619ull, 13457303892962025673ull, 6087457842175982874ull}}, {{15202069664223251694ull, 18002415735716218678ull, 7598257829347756283ull, 7609322302719978593ull}}, {{4889607521712144405ull, 8945666825608942722ull, 16278126189410817437ull, 4755826439199986620ull}}, {{15335381438994956314ull, 15793769550438566306ull, 1900913663053970180ull, 5944783048999983276ull}}, {{9945854761888919584ull, 1295467864338656267ull, 2376142078817462726ull, 7430978811249979095ull}}, {{3910316216966880788ull, 14644725470493823879ull, 8402617826901996059ull, 4644361757031236934ull}}, {{276209252781213081ull, 13694220819689891945ull, 1279900246772719266ull, 5805452196289046168ull}}, {{4956947584403904256ull, 7894403987757589123ull, 1599875308465899083ull, 7256815245361307710ull}}, {{1584498462077492416ull, 5256318966269598500ull, 11223216172437149662ull, 9071019056701634637ull}}, {{10213683575653208568ull, 17120257409200662774ull, 9320353116986912490ull, 5669386910438521648ull}}, {{3543732432711734902ull, 12176949724646052660ull, 11650441396233640613ull, 7086733638048152060ull}}, {{4429665540889668627ull, 1386129100525402113ull, 14563051745292050767ull, 8858417047560190075ull}}, {{14297756009124512652ull, 7783859715469458176ull, 6796064331593837777ull, 5536510654725118797ull}}, {{17872195011405640815ull, 14341510662764210624ull, 13106766432919685125ull, 6920638318406398496ull}}, {{3893499690547499403ull, 4091830273173099569ull, 16383458041149606407ull, 8650797898007998120ull}}, {{13962652352660656887ull, 9474922948374269086ull, 10239661275718504004ull, 5406748686254998825ull}}, {{8229943403971045300ull, 11843653685467836358ull, 17411262613075517909ull, 6758435857818748531ull}}, {{1064057218109030817ull, 969509051552631736ull, 17152392247917009483ull, 8448044822273435664ull}}, {{665035761318144261ull, 16746844221716252499ull, 10720245154948130926ull, 5280028013920897290ull}}, {{14666352756929844038ull, 11710183240290539815ull, 4176934406830387850ull, 6600035017401121613ull}}, {{13721254927734917144ull, 5414357013508398961ull, 9832854026965372717ull, 8250043771751402016ull}}, {{1658255302193241359ull, 5689816142656443303ull, 6145533766853357948ull, 5156277357344626260ull}}, {{15907877183023715411ull, 7112270178320554128ull, 7681917208566697435ull, 6445346696680782825ull}}, {{1438102405070092647ull, 4278651704473304757ull, 14214082529135759698ull, 8056683370850978531ull}}, {{3204657012382501857ull, 7285843333723203377ull, 6577958571496155859ull, 5035427106781861582ull}}, {{8617507283905515225ull, 4495618148726616317ull, 17445820251224970632ull, 6294283883477326977ull}}, {{15383570123309281935ull, 5619522685908270396ull, 7972217258749049578ull, 7867854854346658722ull}}, {{391359290213525401ull, 8123887697120056902ull, 9594321805145543890ull, 4917409283966661701ull}}, {{9712571149621682560ull, 931487584545295319ull, 16604588274859317767ull, 6146761604958327126ull}}, {{7529027918599715295ull, 14999417535963782861ull, 11532363306719371400ull, 7683452006197908908ull}}, {{7011485458338516012ull, 9374635959977364288ull, 16431099103554382933ull, 4802157503873693067ull}}, {{8764356822923145015ull, 16329980968399093264ull, 15927187861015590762ull, 6002696879842116334ull}}, {{10955446028653931268ull, 11189104173644090772ull, 10685612789414712645ull, 7503371099802645418ull}}, {{16070525804763482851ull, 9299033117741250684ull, 11290194011811583307ull, 4689606937376653386ull}}, {{1641413182244801947ull, 7012105378749175452ull, 4889370477909703326ull, 5862008671720816733ull}}, {{2051766477806002434ull, 17988503760291245123ull, 10723399115814517061ull, 7327510839651020916ull}}, {{16399766152539666754ull, 8650571645081892691ull, 13404248894768146327ull, 9159388549563776145ull}}, {{7944010836123597770ull, 12324136305817264788ull, 1460126531589009598ull, 5724617843477360091ull}}, {{9930013545154497212ull, 6181798345416805177ull, 15660216219768425710ull, 7155772304346700113ull}}, {{17024202949870509419ull, 16950619968625782279ull, 5740212219428368425ull, 8944715380433375142ull}}, {{17557655871310150243ull, 3676608452750032068ull, 17422690692424893978ull, 5590447112770859463ull}}, {{3500325765428136188ull, 13819132602792315894ull, 17166677347103729568ull, 6988058890963574329ull}}, {{13598779243639946042ull, 17273915753490394867ull, 7623288628597498248ull, 8735073613704467912ull}}, {{6193394018061272325ull, 10796197345931496792ull, 4764555392873436405ull, 5459421008565292445ull}}, {{7741742522576590406ull, 18106932700841758894ull, 10567380259519183410ull, 6824276260706615556ull}}, {{453806116365962199ull, 13410293839197422810ull, 13209225324398979263ull, 8530345325883269445ull}}, {{4895314841156114279ull, 15298962677139471112ull, 10561608836963055991ull, 5331465828677043403ull}}, {{6119143551445142848ull, 14512017327996950986ull, 8590325027776432085ull, 6664332285846304254ull}}, {{16872301476161204368ull, 4304963604714025020ull, 1514534247865764299ull, 8330415357307880318ull}}, {{1321816385745976922ull, 384759243732571686ull, 14781641960198266399ull, 5206509598317425198ull}}, {{10875642519037246961ull, 14316007109947878319ull, 9253680413393057190ull, 6508136997896781498ull}}, {{8982867130369170797ull, 8671636850580072091ull, 2343728479886545680ull, 8135171247370976873ull}}, {{3308448947267037796ull, 5419773031612545057ull, 12994045345997560810ull, 5084482029606860545ull}}, {{8747247202511185149ull, 15998088326370457129ull, 2407498627214787300ull, 6355602537008575682ull}}, {{15545745021566369340ull, 1550866334253519795ull, 12232745320873259934ull, 7944503171260719602ull}}, {{7410247629265286886ull, 14804349514190613584ull, 12257151843973175362ull, 4965314482037949751ull}}, {{9262809536581608607ull, 9282064855883491172ull, 10709753786539081299ull, 6206643102547437189ull}}, {{11578511920727010759ull, 6990895051426976061ull, 17998878251601239528ull, 7758303878184296486ull}}, {{9542412959668075676ull, 4369309407141860038ull, 6637612888823386801ull, 4848939923865185304ull}}, {{2704644162730318787ull, 10073322777354712952ull, 8297016111029233501ull, 6061174904831481630ull}}, {{3380805203412898484ull, 17203339490120779094ull, 1147898101931766068ull, 7576468631039352038ull}}, {{15948061307415225265ull, 1528715144470711125ull, 14552494368989517505ull, 4735292894399595023ull}}, {{6100018578986867869ull, 6522579949015776811ull, 13578931942809508977ull, 5919116117999493779ull}}, {{3013337205306196932ull, 12764910954697108918ull, 12361978910084498317ull, 7398895147499367224ull}}, {{15718393808598536795ull, 10283912355899387025ull, 7726236818802811448ull, 4624309467187104515ull}}, {{5812934205466007281ull, 12854890444874233782ull, 5046110005076126406ull, 5780386833983880644ull}}, {{16489539793687284909ull, 6845241019238016419ull, 6307637506345158008ull, 7225483542479850805ull}}, {{16000238723681718232ull, 8556551274047520524ull, 12496232901358835414ull, 9031854428099813506ull}}, {{776777165446298087ull, 736158527852312424ull, 12421831581776660038ull, 5644909017562383441ull}}, {{970971456807872609ull, 10143570196670166338ull, 1692231421938661335ull, 7056136271952979302ull}}, {{10437086357864616569ull, 8067776727410320018ull, 11338661314278102477ull, 8820170339941224127ull}}, {{11134864992092773260ull, 7348203463845143963ull, 14004192349064895904ull, 5512606462463265079ull}}, {{9306895221688578671ull, 9185254329806429954ull, 12893554417903731976ull, 6890758078079081349ull}}, {{2410246990255947531ull, 11481567912258037443ull, 2281884967097501258ull, 8613447597598851687ull}}, {{17647305433405824871ull, 11787665963588661305ull, 8343707132077020142ull, 5383404748499282304ull}}, {{8224073736475117376ull, 5511210417631050824ull, 10429633915096275178ull, 6729255935624102880ull}}, {{10280092170593896720ull, 16112385058893589338ull, 13037042393870343972ull, 8411569919530128600ull}}, {{11036743625048573354ull, 846868624953717528ull, 8148151496168964983ull, 5257231199706330375ull}}, {{13795929531310716693ull, 14893643836474310622ull, 5573503351783818324ull, 6571538999632912969ull}}, {{8021539877283620058ull, 170310721883336662ull, 11578565208157160810ull, 8214423749541141211ull}}, {{401776404874874632ull, 4718130219604473318ull, 4930760245884531554ull, 5134014843463213257ull}}, {{9725592542948369098ull, 15121034811360367455ull, 10775136325783052346ull, 6417518554329016571ull}}, {{7545304660258073469ull, 9677921477345683511ull, 8857234388801427529ull, 8021898192911270714ull}}, {{11633344440302377774ull, 17577915969409521954ull, 10147457511428280109ull, 5013686370569544196ull}}, {{5318308513523196410ull, 8137336906479738731ull, 12684321889285350137ull, 6267107963211930245ull}}, {{2036199623476607608ull, 14783357151527061318ull, 2020344306324523959ull, 7833884954014912807ull}}, {{15107682819955043467ull, 16157127247345495179ull, 8180244219093909330ull, 4896178096259320504ull}}, {{14272917506516416430ull, 10973037022327093166ull, 10225305273867386663ull, 6120222620324150630ull}}, {{8617774846290744729ull, 9104610259481478554ull, 3558259555479457521ull, 7650278275405188288ull}}, {{9997795297359103360ull, 17219596458244393856ull, 2223912222174660950ull, 4781423922128242680ull}}, {{12497244121698879200ull, 12301123535950716512ull, 2779890277718326188ull, 5976779902660303350ull}}, {{15621555152123599000ull, 15376404419938395640ull, 12698234884002683543ull, 7470974878325379187ull}}, {{9763471970077249375ull, 16527781790102579131ull, 5630553793287983262ull, 4669359298953361992ull}}, {{7592653944169173815ull, 11436355200773448106ull, 7038192241609979078ull, 5836699123691702490ull}}, {{267445393356691460ull, 5072071964112034325ull, 18021112338867249656ull, 7295873904614628112ull}}, {{4945992760123252229ull, 6340089955140042906ull, 4079646349874510454ull, 9119842380768285141ull}}, {{7702931493504420547ull, 17797614277244690528ull, 4855621977885262985ull, 5699901487980178213ull}}, {{9628664366880525684ull, 8411959791273699448ull, 10681213490783966636ull, 7124876859975222766ull}}, {{12035830458600657105ull, 10514949739092124310ull, 4128144826625182487ull, 8906096074969028458ull}}, {{2910708018198022787ull, 13489372614573659550ull, 7191776535068126958ull, 5566310046855642786ull}}, {{12861757059602304291ull, 7638343731362298629ull, 18213092705689934506ull, 6957887558569553482ull}}, {{2242138269220716652ull, 324557627348097479ull, 13542993845257642325ull, 8697359448211941853ull}}, {{8318865445904029764ull, 2508691526306254876ull, 10770214162499720405ull, 5435849655132463658ull}}, {{10398581807380037204ull, 7747550426310206499ull, 4239395666269874698ull, 6794812068915579573ull}}, {{8386541240797658601ull, 461065996032982316ull, 9910930601264731277ull, 8493515086144474466ull}}, {{14464960312353312434ull, 2594009256734307899ull, 10806017644217844952ull, 5308446928840296541ull}}, {{13469514372014252638ull, 3242511570917884874ull, 18119208073699694094ull, 6635558661050370676ull}}, {{7613520928163039990ull, 13276511500502131901ull, 4202266018415066001ull, 8294448326312963346ull}}, {{7064293589315593946ull, 1380290660172750582ull, 7238102279936804155ull, 5184030203945602091ull}}, {{18053739023499268240ull, 15560421380498101939ull, 4435941831493617289ull, 6480037754932002614ull}}, {{17955487760946697396ull, 5615468670340463712ull, 14768299326221797420ull, 8100047193665003267ull}}, {{11222179850591685873ull, 12733039955817565628ull, 6924344069674929435ull, 5062529496040627042ull}}, {{14027724813239607341ull, 11304613926344569131ull, 17878802123948437602ull, 6328161870050783802ull}}, {{12922969998122121272ull, 4907395371075935606ull, 13125130618080771195ull, 7910202337563479753ull}}, {{3465170230398937891ull, 761279097708765802ull, 1285677608659400141ull, 4943876460977174846ull}}, {{13554834824853448172ull, 5563284890563345156ull, 10830469047679025984ull, 6179845576221468557ull}}, {{16943543531066810215ull, 6954106113204181445ull, 18149772328026170384ull, 7724806970276835696ull}}, {{12895557716130450336ull, 4346316320752613403ull, 11343607705016356490ull, 4828004356423022310ull}}, {{11507761126735675016ull, 14656267437795542562ull, 4956137594415669804ull, 6035005445528777888ull}}, {{5161329371564817962ull, 18320334297244428203ull, 6195171993019587255ull, 7543756806910972360ull}}, {{919987848014317275ull, 18367737963418849483ull, 3871982495637242034ull, 4714848004319357725ull}}, {{14985042865300060305ull, 13736300417418786045ull, 9451664137973940447ull, 5893560005399197156ull}}, {{4896245526342911669ull, 12558689503346094653ull, 11814580172467425559ull, 7366950006748996445ull}}, {{10731992926356027491ull, 11086675860755230412ull, 933167160302118237ull, 9208687508436245557ull}}, {{15930867615827292990ull, 9235015422185712959ull, 2889072484402517850ull, 5755429692772653473ull}}, {{15301898501356728333ull, 2320397240877365391ull, 8223026623930535217ull, 7194287115965816841ull}}, {{14515687108268522512ull, 7512182569524094643ull, 14890469298340556925ull, 8992858894957271051ull}}, {{6766461433454132618ull, 7000957115166253104ull, 7000700302249154126ull, 5620536809348294407ull}}, {{8458076791817665773ull, 17974568430812592188ull, 4139189359384054753ull, 7025671011685368009ull}}, {{10572595989772082216ull, 8633152483233576523ull, 9785672717657456346ull, 8782088764606710011ull}}, {{4302029484393857433ull, 10007406320448373231ull, 3810202439322216264ull, 5488805477879193757ull}}, {{765850837064933887ull, 12509257900560466539ull, 9374439067580158234ull, 6861006847348992196ull}}, {{14792371601613331071ull, 6413200338845807365ull, 11718048834475197793ull, 8576258559186240245ull}}, {{11551075260222025872ull, 15537465257847099363ull, 9629623530760692572ull, 5360161599491400153ull}}, {{9827158056850144435ull, 975087498599322588ull, 16648715431878253620ull, 6700201999364250191ull}}, {{12283947571062680544ull, 1218859373249153235ull, 16199208271420429121ull, 8375252499205312739ull}}, {{5371624222700481388ull, 12291002154349190532ull, 7818662160424074248ull, 5234532812003320462ull}}, {{6714530278375601735ull, 15363752692936488165ull, 549955663675317002ull, 6543166015004150578ull}}, {{13004848866396890073ull, 9981318829315834398ull, 9910816616448922061ull, 8178957518755188222ull}}, {{3516344523070668392ull, 8544167277536090451ull, 1582574366853188384ull, 5111848449221992639ull}}, {{18230488709120499201ull, 10680209096920113063ull, 15813276013848649192ull, 6389810561527490798ull}}, {{18176424867973236098ull, 13350261371150141329ull, 10543222980456035682ull, 7987263201909363498ull}}, {{4442736514842190705ull, 12955599375396226235ull, 11201200381212410205ull, 4992039501193352186ull}}, {{941734625125350477ull, 2359441163963119082ull, 4778128439660736949ull, 6240049376491690233ull}}, {{10400540318261463905ull, 7560987473381286756ull, 10584346568003309090ull, 7800061720614612791ull}}, {{15723709735768190749ull, 9337303189290692126ull, 13532745632643150037ull, 4875038575384132994ull}}, {{10431265132855462628ull, 16283315005040753062ull, 7692560003949161738ull, 6093798219230166243ull}}, {{3815709379214552476ull, 11130771719446165520ull, 5004013986509064269ull, 7617247774037707804ull}}, {{2384818362009095298ull, 9262575333867547402ull, 12350880778422940976ull, 4760779858773567377ull}}, {{12204394989366144930ull, 11578219167334434252ull, 1603542917746512508ull, 5950974823466959222ull}}, {{15255493736707681163ull, 14472773959168042815ull, 11227800684037916443ull, 7438718529333699027ull}}, {{16452212613083382583ull, 6739640715266332807ull, 4711532418310003825ull, 4649199080833561892ull}}, {{15953579747926840324ull, 13036236912510303913ull, 5889415522887504781ull, 5811498851041952365ull}}, {{6106916629626386693ull, 2460238085355716180ull, 11973455422036768881ull, 7264373563802440456ull}}, {{7633645787032983367ull, 7686983625122033129ull, 14966819277545961101ull, 9080466954753050570ull}}, {{16300243662964084364ull, 7110207774914964657ull, 13965948066893613592ull, 5675291846720656606ull}}, {{6540246523422941743ull, 8887759718643705822ull, 8234063046762241182ull, 7094114808400820758ull}}, {{17398680191133452987ull, 1886327611449856469ull, 1069206771598025670ull, 8867643510501025948ull}}, {{13180018128672102069ull, 15014012812438324005ull, 9891626269103541851ull, 5542277194063141217ull}}, {{2639964605557963874ull, 14155829997120517103ull, 16976218854806815218ull, 6927846492578926521ull}}, {{17135013812229618555ull, 8471415459545870570ull, 7385215513226355311ull, 8659808115723658152ull}}, {{15321069651070899501ull, 12212163689857250962ull, 4615759695766472069ull, 5412380072327286345ull}}, {{9927965026983848568ull, 1430146557039399991ull, 10381385638135477991ull, 6765475090409107931ull}}, {{7798270265302422806ull, 15622741251581413701ull, 8365046029241959584ull, 8456843863011384914ull}}, {{7179761925027708206ull, 9764213282238383563ull, 9839839786703612644ull, 5285527414382115571ull}}, {{4363016387857247353ull, 12205266602797979454ull, 7688113714952127901ull, 6606909267977644464ull}}, {{14677142521676334999ull, 1421525198215310605ull, 9610142143690159877ull, 8258636584972055580ull}}, {{11479057085261403327ull, 3194296258098263080ull, 15229710876661125731ull, 5161647865607534737ull}}, {{14348821356576754158ull, 17827928377904992562ull, 5202080540544243451ull, 6452059832009418422ull}}, {{8712654658866166890ull, 17673224453953852799ull, 15725972712535080122ull, 8065074790011773027ull}}, {{12362938189432436162ull, 15657451302148545903ull, 7522889936120731124ull, 5040671743757358142ull}}, {{10841986718363157299ull, 1125070053976130763ull, 180240383296138098ull, 6300839679696697678ull}}, {{8940797379526558719ull, 10629709604324939262ull, 9448672515974948430ull, 7876049599620872097ull}}, {{976312343776711296ull, 2031882484275699135ull, 17434635368552812529ull, 4922530999763045060ull}}, {{15055448485003052832ull, 7151539123772011822ull, 3346550136981464045ull, 6153163749703806326ull}}, {{9595938569399040231ull, 13551109923142402682ull, 13406559708081605864ull, 7691454687129757907ull}}, {{10609147624301788049ull, 8469443701964001676ull, 6073256808337309713ull, 4807159179456098692ull}}, {{13261434530377235061ull, 15198490645882389999ull, 7591571010421637141ull, 6008948974320123365ull}}, {{11965107144544155922ull, 5163055252070823787ull, 14101149781454434331ull, 7511186217900154206ull}}, {{5172348956126403499ull, 921066523330570915ull, 4201532594981633553ull, 4694491386187596379ull}}, {{1853750176730616470ull, 5763019172590601548ull, 640229725299654037ull, 5868114232734495474ull}}, {{2317187720913270588ull, 11815459984165639839ull, 10023659193479343354ull, 7335142790918119342ull}}, {{16731542706423751946ull, 5545952943352273990ull, 3306201954994403385ull, 9168928488647649178ull}}, {{5845528173087457063ull, 14995435635663641004ull, 6678062240298890019ull, 5730580305404780736ull}}, {{7306910216359321328ull, 14132608526152163351ull, 8347577800373612524ull, 7163225381755975920ull}}, {{4521951752021763756ull, 17665760657690204189ull, 10434472250467015655ull, 8954031727194969900ull}}, {{5132062854227296300ull, 17958629438697459474ull, 15744917193396660592ull, 5596269829496856187ull}}, {{15638450604638896183ull, 4001542724662272726ull, 15069460473318437837ull, 6995337286871070234ull}}, {{10324691218943844420ull, 9613614424255228812ull, 9613453554793271488ull, 8744171608588837793ull}}, {{15676304048694678571ull, 6008509015159518007ull, 17537623517814264440ull, 5465107255368023620ull}}, {{14983694042440960309ull, 7510636268949397509ull, 3475285323558278934ull, 6831384069210029526ull}}, {{4894559497769036674ull, 164923299331971079ull, 13567478691302624476ull, 8539230086512536907ull}}, {{9976628713746729778ull, 9326449098937257732ull, 6173831172850446345ull, 5337018804070335567ull}}, {{12470785892183412222ull, 16269747392098960069ull, 3105602947635670027ull, 6671273505087919459ull}}, {{1753424309947101565ull, 15725498221696312183ull, 17717061739826751246ull, 8339091881359899323ull}}, {{8013419221358020335ull, 5216750370132807210ull, 8767320578178025577ull, 5211932425849937077ull}}, {{793401989842749610ull, 11132623981093396917ull, 15570836741149919875ull, 6514915532312421346ull}}, {{5603438505730824917ull, 9304093957939358242ull, 10240173889582624036ull, 8143644415390526683ull}}, {{8113835084509153477ull, 15038430760566874709ull, 4094265671775446070ull, 5089777759619079177ull}}, {{14753979874063829750ull, 9574666413853817578ull, 9729518108146695492ull, 6362222199523848971ull}}, {{9219102805725011380ull, 11968333017317271973ull, 7550211616755981461ull, 7952777749404811214ull}}, {{8067782262791826064ull, 9786051145036988935ull, 107196242045100509ull, 4970486093378007009ull}}, {{5473041810062394676ull, 16844249949723624073ull, 4745681320983763540ull, 6213107616722508761ull}}, {{11452988281005381249ull, 2608568363444978475ull, 10543787669657092330ull, 7766384520903135951ull}}, {{4852274666414669329ull, 6242041245580499451ull, 13507396321176764562ull, 4853990325564459969ull}}, {{1453657314590948757ull, 17025923593830400122ull, 3049187346188791990ull, 6067487906955574962ull}}, {{11040443680093461754ull, 12059032455433224344ull, 13034856219590765796ull, 7584359883694468702ull}}, {{6900277300058413597ull, 16760267321500541023ull, 3535099118816840718ull, 4740224927309042939ull}}, {{4013660606645629092ull, 11726962115020900471ull, 18253931953803214610ull, 5925281159136303673ull}}, {{405389739879648460ull, 5435330606921349781ull, 8982356886971854551ull, 7406601448920379592ull}}, {{2559211596638474240ull, 10314610656966925469ull, 5613973054357409094ull, 4629125905575237245ull}}, {{7810700514225480704ull, 3669891284353881028ull, 11629152336374149272ull, 5786407381969046556ull}}, {{9763375642781850880ull, 4587364105442351285ull, 14536440420467686590ull, 7233009227461308195ull}}, {{16815905571904701503ull, 14957577168657714914ull, 13558864507157220333ull, 9041261534326635244ull}}, {{15121627000867826344ull, 11654328739624765773ull, 17697662353828038516ull, 5650788458954147027ull}}, {{5066975695802619218ull, 14567910924530957217ull, 17510391923857660241ull, 7063485573692683784ull}}, {{10945405638180661926ull, 4374830600381532809ull, 3441245831112523686ull, 8829356967115854731ull}}, {{18370093569931383464ull, 16569327180520621717ull, 18291679708941184967ull, 5518348104447409206ull}}, {{9127558907132065618ull, 16099972957223389243ull, 13641227599321705401ull, 6897935130559261508ull}}, {{6797762615487694118ull, 6289908141247072842ull, 17051534499152131752ull, 8622418913199076885ull}}, {{8860287653107196728ull, 3931192588279420526ull, 12963052071183776297ull, 5389011820749423053ull}}, {{1851987529529220102ull, 9525676753776663562ull, 2368757033697556659ull, 6736264775936778817ull}}, {{11538356448766300935ull, 7295409923793441548ull, 7572632310549333728ull, 8420330969920973521ull}}, {{16434844817333713893ull, 4559631202370900967ull, 16262110240161803340ull, 5262706856200608450ull}}, {{15931870003239754462ull, 5699539002963626209ull, 11104265763347478367ull, 6578383570250760563ull}}, {{6079779448767529365ull, 2512737735277144858ull, 9268646185756960055ull, 8222979462813450704ull}}, {{8411548173907093757ull, 8487990112189297392ull, 5792903866098100034ull, 5139362164258406690ull}}, {{10514435217383867197ull, 1386615603381845932ull, 16464501869477400851ull, 6424202705323008362ull}}, {{13143044021729833996ull, 15568327559509471127ull, 11357255299991975255ull, 8030253381653760453ull}}, {{15131931541222228103ull, 16647733752334501310ull, 9404127571708678486ull, 5018908363533600283ull}}, {{9691542389673009321ull, 11586295153563350830ull, 7143473446208460204ull, 6273635454417000354ull}}, {{2891055950236485843ull, 14482868941954188538ull, 18152713844615351063ull, 7842044318021250442ull}}, {{6418595987325191556ull, 15969322116362449692ull, 15957132171311982318ull, 4901277698763281526ull}}, {{8023244984156489445ull, 10738280608598286307ull, 10723043177285202090ull, 6126597123454101908ull}}, {{5417370211768223902ull, 4199478723893082076ull, 13403803971606502613ull, 7658246404317627385ull}}, {{12609228419209915747ull, 4930517211646870249ull, 1459848454612982277ull, 4786404002698517116ull}}, {{1926477468730230972ull, 10774832532985975716ull, 1824810568266227846ull, 5983005003373146395ull}}, {{2408096835912788715ull, 4245168629377693837ull, 16116071265614948520ull, 7478756254216432993ull}}, {{3810903531659186899ull, 2653230393361058648ull, 3155015513368260969ull, 4674222658885270621ull}}, {{4763629414573983623ull, 7928224010128711214ull, 8555455410137714115ull, 5842778323606588276ull}}, {{15177908805072255337ull, 5298593994233501113ull, 10694319262672142644ull, 7303472904508235345ull}}, {{5137327951058155459ull, 6623242492791876392ull, 17979585096767566209ull, 9129341130635294181ull}}, {{3210829969411347162ull, 15668741604063392505ull, 13543083694693422832ull, 5705838206647058863ull}}, {{8625223480191571857ull, 1139182931369689015ull, 12317168599939390637ull, 7132297758308823579ull}}, {{6169843331812076917ull, 6035664682639499173ull, 10784774731496850392ull, 8915372197886029474ull}}, {{6161995091596242025ull, 3772290426649686983ull, 11352170225612919399ull, 5572107623678768421ull}}, {{3090807846067914627ull, 103677014884720825ull, 355154726733985537ull, 6965134529598460527ull}}, {{8475195826012281188ull, 4741282287033288935ull, 14279001463699645633ull, 8706418161998075658ull}}, {{12214526418898757599ull, 14492516475464275344ull, 13536061933239666424ull, 5441511351248797286ull}}, {{15268158023623446998ull, 18115645594330344180ull, 7696705379694807222ull, 6801889189060996608ull}}, {{638453455819757132ull, 13421184956058154418ull, 9620881724618509028ull, 8502361486326245760ull}}, {{5010719428314736112ull, 17611612634391122319ull, 6013051077886568142ull, 5313975928953903600ull}}, {{1651713266966032235ull, 12791143756134127091ull, 7516313847358210178ull, 6642469911192379500ull}}, {{15899699638989704006ull, 6765557658312883055ull, 9395392309197762723ull, 8303087388990474375ull}}, {{16854841302009646860ull, 1922630527231857957ull, 12789649220889683558ull, 5189429618119046484ull}}, {{7233493572229894863ull, 11626660195894598255ull, 15987061526112104447ull, 6486787022648808105ull}}, {{4430180946859980674ull, 9921639226440859915ull, 6148768852357966847ull, 8108483778311010132ull}}, {{463020082573793970ull, 13118553544166619303ull, 13066352569578505087ull, 5067802361444381332ull}}, {{14413833158499406174ull, 11786505911780886224ull, 16332940711973131359ull, 6334752951805476665ull}}, {{18017291448124257717ull, 10121446371298719876ull, 6581117834684250487ull, 7918441189756845832ull}}, {{2037435118222885266ull, 13243433009702781779ull, 4113198646677656554ull, 4949025743598028645ull}}, {{16381851953060770294ull, 7330919225273701415ull, 9753184326774458597ull, 6186282179497535806ull}}, {{15865628922898574963ull, 13775335050019514673ull, 2968108371613297438ull, 7732852724371919758ull}}, {{2998489049170527496ull, 3997898387834808767ull, 15690125787540474611ull, 4833032952732449848ull}}, {{17583169366745323082ull, 385686966366123054ull, 1165913160716041648ull, 6041291190915562311ull}}, {{12755589671576878044ull, 482108707957653818ull, 15292449506177215772ull, 7551613988644452888ull}}, {{12583929563162936682ull, 9524689979328309444ull, 9557780941360759857ull, 4719758742902783055ull}}, {{15729911953953670852ull, 16517548492587774709ull, 7335540158273561917ull, 5899698428628478819ull}}, {{5827331887159924853ull, 6811877560452554675ull, 4557739179414564493ull, 7374623035785598524ull}}, {{2672478840522518162ull, 13126532968993081248ull, 5697173974268205616ull, 9218278794731998155ull}}, {{1670299275326573852ull, 8204083105620675780ull, 1254890724703934558ull, 5761424246707498847ull}}, {{2087874094158217315ull, 1031731845171068917ull, 15403671461162081910ull, 7201780308384373558ull}}, {{7221528636125159547ull, 10513036843318611954ull, 10031217289597826579ull, 9002225385480466948ull}}, {{9125141416005612621ull, 4264805017860438519ull, 15492882842853417420ull, 5626390865925291842ull}}, {{6794740751579627872ull, 5331006272325548149ull, 10142731516711995967ull, 7032988582406614803ull}}, {{13105111957901922744ull, 2052071821979547282ull, 8066728377462607055ull, 8791235728008268504ull}}, {{12802380992116089619ull, 8200073916378298907ull, 5041705235914129409ull, 5494522330005167815ull}}, {{11391290221717724120ull, 14861778413900261538ull, 1690445526465273857ull, 6868152912506459769ull}}, {{5015740740292379342ull, 4742164962093163211ull, 6724742926508980226ull, 8585191140633074711ull}}, {{828994953469043137ull, 7575539119735614911ull, 11120493356709194497ull, 5365744462895671694ull}}, {{14871301747118467633ull, 14081109918096906542ull, 4677244659031717313ull, 6707180578619589618ull}}, {{9365755147043308733ull, 3766329342338969466ull, 15069927860644422450ull, 8383975723274487022ull}}, {{10465282985329455862ull, 6965641857389243820ull, 4807018894475376127ull, 5239984827046554389ull}}, {{13081603731661819828ull, 4095366303309166871ull, 10620459636521608063ull, 6549981033808192986ull}}, {{11740318646149886881ull, 507521860709070685ull, 4052202508797234271ull, 8187476292260241233ull}}, {{9643542163057373253ull, 7234730190584251034ull, 14061841614066741179ull, 5117172682662650770ull}}, {{2831055666966940758ull, 4431726719802925889ull, 8353929980728650666ull, 6396465853328313463ull}}, {{8150505602136063851ull, 14763030436608433169ull, 5830726457483425428ull, 7995582316660391829ull}}, {{16623281047403509667ull, 3521986025494922ull, 5950047045140834845ull, 4997238947912744893ull}}, {{11555729272399611276ull, 4616088500959256557ull, 12049244824853431460ull, 6246548684890931116ull}}, {{609603535217350382ull, 5770110626199070697ull, 15061556031066789325ull, 7808185856113663895ull}}, {{11910217255579313749ull, 5912162150588113137ull, 16331001547057825184ull, 4880116160071039934ull}}, {{1052713514191978474ull, 7390202688235141422ull, 11190379896967505672ull, 6100145200088799918ull}}, {{10539263929594748901ull, 9237753360293926777ull, 4764602834354606282ull, 7625181500110999898ull}}, {{18116255002065187823ull, 10385281868611092139ull, 7589562789899016830ull, 4765738437569374936ull}}, {{18033632734154096875ull, 3758230298909089366ull, 9486953487373771038ull, 5957173046961718670ull}}, {{13318668880837845285ull, 13921159910491137516ull, 2635319822362437989ull, 7446466308702148338ull}}, {{17547540087378429112ull, 11006567953270654899ull, 6258760907403911647ull, 4654041442938842711ull}}, {{17322739090795648485ull, 9146523923160930720ull, 3211765115827501655ull, 5817551803673553389ull}}, {{3206679789785008991ull, 6821468885523775497ull, 8626392413211764973ull, 7271939754591941736ull}}, {{8620035755658649142ull, 13138522125332107275ull, 10782990516514706216ull, 9089924693239927170ull}}, {{3081679338072961762ull, 8211576328332567047ull, 11351055091249079289ull, 5681202933274954481ull}}, {{17687157227873365914ull, 14876156428843096712ull, 353760808779185399ull, 7101503666593693102ull}}, {{3662202461132155777ull, 13983509517626482987ull, 9665573047828757557ull, 8876879583242116377ull}}, {{18429777602703455025ull, 11045536457730245818ull, 17570198200961443233ull, 5548049739526322735ull}}, {{13813849966524542973ull, 18418606590590195177ull, 17351061732774416137ull, 6935062174407903419ull}}, {{3432254402873515004ull, 9188200182955580260ull, 17077141147540632268ull, 8668827718009879274ull}}, {{11368531038650722686ull, 14965997151202013470ull, 15284899235640283071ull, 5418017323756174546ull}}, {{4987291761458627549ull, 14095810420575128934ull, 9882752007695578031ull, 6772521654695218183ull}}, {{15457486738678060244ull, 13008077007291523263ull, 7741753991192084635ull, 8465652068369022729ull}}, {{16578458239314869509ull, 5824205120343508087ull, 16367811290563522657ull, 5291032542730639205ull}}, {{16111386780716198982ull, 11891942418856773013ull, 6624706057922239609ull, 6613790678413299007ull}}, {{6304175420613085015ull, 1029869968288802555ull, 3669196553975411608ull, 8267238348016623759ull}}, {{1634266628669484183ull, 643668730180501597ull, 9210776873875714111ull, 5167023967510389849ull}}, {{6654519304264243132ull, 14639643968007790708ull, 16125157110772030542ull, 6458779959387987311ull}}, {{8318149130330303915ull, 9076182923154962577ull, 15544760370037650274ull, 8073474949234984139ull}}, {{16728058252524909707ull, 10284300345399239514ull, 7409632222059837469ull, 5045921843271865087ull}}, {{11686700778801361326ull, 17467061450176437297ull, 4650354259147408932ull, 6307402304089831359ull}}, {{773317918219537945ull, 3387082739010995006ull, 1201256805506873262ull, 7884252880112289199ull}}, {{14318381754169374928ull, 15951984767164035590ull, 7668314531082877644ull, 4927658050070180749ull}}, {{8674605155856942852ull, 1493236885245492872ull, 14197079182280984960ull, 6159572562587725936ull}}, {{10843256444821178564ull, 1866546106556866090ull, 17746348977851231200ull, 7699465703234657420ull}}, {{11388721296440624507ull, 1166591316598041306ull, 1868096074302243692ull, 4812166064521660888ull}}, {{5012529583696004826ull, 1458239145747551633ull, 2335120092877804615ull, 6015207580652076110ull}}, {{10877347998047393936ull, 15657856987466603253ull, 12142272152952031576ull, 7519009475815095137ull}}, {{9104185507993315162ull, 9786160617166627033ull, 671391067953937879ull, 4699380922384434461ull}}, {{15991917903419031856ull, 7621014753030895887ull, 5450924853369810253ull, 5874226152980543076ull}}, {{15378211360846401916ull, 14137954459716007763ull, 6813656066712262816ull, 7342782691225678845ull}}, {{14611078182630614491ull, 17672443074645009704ull, 13128756101817716424ull, 9178478364032098556ull}}, {{9131923864144134057ull, 11045276921653131065ull, 17428844600490848573ull, 5736548977520061597ull}}, {{16026590848607555476ull, 18418282170493801735ull, 7950997695331397004ull, 7170686221900076997ull}}, {{15421552542332056440ull, 4576108639407700553ull, 14550433137591634160ull, 8963357777375096246ull}}, {{2720941311316453419ull, 2860067899629812846ull, 4482334692567383446ull, 5602098610859435154ull}}, {{12624548676000342582ull, 12798456911392041865ull, 14826290402564005115ull, 7002623263574293942ull}}, {{1945627789718264515ull, 11386385120812664428ull, 9309490966350230586ull, 8753279079467867428ull}}, {{10439389405428691130ull, 11728176718935303171ull, 15041803890823669924ull, 5470799424667417142ull}}, {{8437550738358476009ull, 14660220898669128964ull, 9578882826674811597ull, 6838499280834271428ull}}, {{10546938422948095011ull, 4490218068054247493ull, 11973603533343514497ull, 8548124101042839285ull}}, {{8897679523556253334ull, 14335601338602374443ull, 9789345217553390512ull, 5342577563151774553ull}}, {{6510413386017928763ull, 17919501673252968054ull, 16848367540369126044ull, 6678221953939718191ull}}, {{17361388769377186762ull, 3952633017856658451ull, 16448773407034019652ull, 8347777442424647739ull}}, {{8545024971647047774ull, 11693767673015187340ull, 7974640370182568330ull, 5217360901515404837ull}}, {{10681281214558809718ull, 5393837554414208367ull, 14579986481155598317ull, 6521701126894256046ull}}, {{8739915499771124243ull, 11353982961445148363ull, 9001611064589722088ull, 8152126408617820058ull}}, {{3156604178143258700ull, 7096239350903217727ull, 10237692933795964209ull, 5095079005386137536ull}}, {{17780813277961237087ull, 13481985207056410062ull, 12797116167244955261ull, 6368848756732671920ull}}, {{13002644560596770551ull, 3017423453538348866ull, 15996395209056194077ull, 7961060945915839900ull}}, {{12738338868800369499ull, 4191732667675161993ull, 774374968805345490ull, 4975663091197399938ull}}, {{2087865530718298161ull, 14463037871448728300ull, 10191340747861457670ull, 6219578863996749922ull}}, {{2609831913397872701ull, 8855425302456134567ull, 3515803897972046280ull, 7774473579995937403ull}}, {{8548673973514752294ull, 5534640814035084104ull, 18338278500728386589ull, 4859045987497460876ull}}, {{10685842466893440368ull, 11529987035971243034ull, 4476104052200931620ull, 6073807484371826096ull}}, {{4133931046762024652ull, 14412483794964053793ull, 5595130065251164525ull, 7592259355464782620ull}}, {{14112921950294735168ull, 11313645381066227572ull, 12720328327636753636ull, 4745162097165489137ull}}, {{17641152437868418959ull, 14142056726332784465ull, 2065352354263778333ull, 5931452621456861422ull}}, {{8216382492053359987ull, 3842512852633816870ull, 11805062479684498725ull, 7414315776821076777ull}}, {{523553039105962088ull, 4707413542109829496ull, 460635022161729847ull, 4633947360513172986ull}}, {{654441298882452610ull, 1272580909209898966ull, 9799165814556938117ull, 5792434200641466232ull}}, {{10041423660457841570ull, 6202412154939761611ull, 12248957268196172646ull, 7240542750801832790ull}}, {{7940093557144914059ull, 16976387230529477822ull, 6087824548390439999ull, 9050678438502290988ull}}, {{350872454788183383ull, 17527771046722005495ull, 13028262379598800807ull, 5656674024063931867ull}}, {{14273648623767392940ull, 17298027789975118964ull, 11673641956071113105ull, 7070842530079914834ull}}, {{17842060779709241175ull, 7787476682186734993ull, 5368680408234115574ull, 8838553162599893543ull}}, {{4233758959677193879ull, 255486907939321467ull, 10272954282787404090ull, 5524095726624933464ull}}, {{680512681169104444ull, 9542730671778927642ull, 12841192853484255112ull, 6905119658281166830ull}}, {{10074012888316156363ull, 11928413339723659552ull, 6828119030000543082ull, 8631399572851458538ull}}, {{6296258055197597727ull, 12066944355754675124ull, 8879260412177727330ull, 5394624733032161586ull}}, {{7870322568996997159ull, 5860308407838568097ull, 1875703478367383355ull, 6743280916290201983ull}}, {{14449589229673634353ull, 2713699491370822217ull, 16179687403241392906ull, 8429101145362752478ull}}, {{2113464240904939615ull, 6307748200534151790ull, 5500618608598482662ull, 5268188215851720299ull}}, {{11865202337985950326ull, 17108057287522465545ull, 2264087242320715423ull, 6585235269814650374ull}}, {{996444867200274196ull, 16773385590975694028ull, 12053481089755670087ull, 8231544087268312967ull}}, {{9846150078854947180ull, 17400895022000890623ull, 14450954708738375660ull, 5144715054542695604ull}}, {{7696001580141296071ull, 3304374703791561663ull, 18063693385922969576ull, 6430893818178369505ull}}, {{5008315956749232185ull, 4130468379739452079ull, 8744558677121548258ull, 8038617272722961882ull}}, {{10047726500609351972ull, 7193228755764545453ull, 10077035191628355565ull, 5024135795451851176ull}}, {{17171344144189077869ull, 13603221963133069720ull, 12596293989535444456ull, 6280169744314813970ull}}, {{3017436106526795720ull, 17004027453916337151ull, 6521995450064529762ull, 7850212180393517463ull}}, {{8803426594220329181ull, 15239203177125098623ull, 10993776183931412957ull, 4906382612745948414ull}}, {{6392597224348023572ull, 5213945916124209567ull, 4518848193059490389ull, 6132978265932435518ull}}, {{3379060512007641561ull, 11129118413582649863ull, 14871932278179138794ull, 7666222832415544397ull}}, {{9029441847645857832ull, 11567385026916544068ull, 11600800683075655698ull, 4791389270259715248ull}}, {{11286802309557322290ull, 5235859246790904277ull, 14501000853844569623ull, 5989236587824644060ull}}, {{273444831664489150ull, 1933138040061242443ull, 18126251067305712029ull, 7486545734780805075ull}}, {{16311804084286163383ull, 3514054284251970478ull, 9023063907852376066ull, 4679091084238003172ull}}, {{11166383068502928421ull, 13615939892169738906ull, 11278829884815470082ull, 5848863855297503965ull}}, {{4734606798773884718ull, 7796552828357397825ull, 263479300737173891ull, 7311079819121879957ull}}, {{10529944516894743801ull, 5134005017019359377ull, 4941035144348855268ull, 9138849773902349946ull}}, {{18110430369127684636ull, 12432125172491875418ull, 7699832983645422446ull, 5711781108688968716ull}}, {{13414665924554829987ull, 6316784428760068465ull, 9624791229556778058ull, 7139726385861210895ull}}, {{2933274350411373771ull, 17119352572804861390ull, 7419303018518584668ull, 8924657982326513619ull}}, {{15668354524289272319ull, 1476223321148262560ull, 2331221377360421466ull, 5577911238954071012ull}}, {{1138699081652038783ull, 11068651188290104009ull, 2914026721700526832ull, 6972389048692588765ull}}, {{6035059870492436382ull, 13835813985362630011ull, 8254219420553046444ull, 8715486310865735956ull}}, {{1466069409844078787ull, 17870755777706419565ull, 14382259174700429835ull, 5447178944291084972ull}}, {{6444272780732486388ull, 17726758703705636552ull, 17977823968375537294ull, 6808973680363856215ull}}, {{8055340975915607985ull, 12935076342777269882ull, 17860593942042033714ull, 8511217100454820269ull}}, {{9646274128374642895ull, 12696108732663181580ull, 13468714222989965023ull, 5319510687784262668ull}}, {{12057842660468303618ull, 11258449897401589071ull, 16835892778737456279ull, 6649388359730328335ull}}, {{10460617307157991618ull, 9461376353324598435ull, 16433179954994432445ull, 8311735449662910419ull}}, {{4232042807760050810ull, 8219203230041567974ull, 7964894462657826326ull, 5194834656039319012ull}}, {{14513425546554839320ull, 1050632000697184159ull, 9956118078322282908ull, 6493543320049148765ull}}, {{13530095914766161246ull, 1313290000871480199ull, 17056833616330241539ull, 8116929150061435956ull}}, {{15373838974369932635ull, 16961707315040532788ull, 1437148973351625153ull, 5073080718788397473ull}}, {{770554644252864178ull, 7367076088518502274ull, 6408122235116919346ull, 6341350898485496841ull}}, {{10186565342170856030ull, 18432217147502903650ull, 12621838812323537086ull, 7926688623106871051ull}}, {{10978289357284172923ull, 6908449698761926877ull, 5582806248488516727ull, 4954180389441794407ull}}, {{18334547715032604057ull, 4023876105025020692ull, 2366821792183258005ull, 6192725486802243009ull}}, {{4471440570081203456ull, 9641531149708663770ull, 7570213258656460410ull, 7740906858502803761ull}}, {{7406336374728140064ull, 10637642986995302760ull, 16260598332728757516ull, 4838066786564252350ull}}, {{9257920468410175080ull, 13297053733744128450ull, 11102375879056171087ull, 6047583483205315438ull}}, {{2349028548657943042ull, 12009631148752772659ull, 4654597811965438051ull, 7559479354006644298ull}}, {{17609043907407072065ull, 5200176458756788959ull, 7520809650905786686ull, 4724674596254152686ull}}, {{17399618865831452177ull, 15723592610300762007ull, 177640026777457549ull, 5905843245317690858ull}}, {{17137837563861927318ull, 5819432707593788797ull, 9445422070326597745ull, 7382304056647113572ull}}, {{13016991486627398526ull, 15166360488314587758ull, 15126760830808899398ull, 4613940035404445982ull}}, {{7047867321429472349ull, 9734578573538458890ull, 9685079001656348440ull, 5767425044255557478ull}}, {{18033206188641616244ull, 12168223216923073612ull, 2882976715215659742ull, 7209281305319446848ull}}, {{4094763662092468689ull, 5986906984299066208ull, 3603720894019574678ull, 9011601631649308560ull}}, {{2559227288807792931ull, 17576874920469080092ull, 2252325558762234173ull, 5632251019780817850ull}}, {{3199034111009741163ull, 8136035595304186403ull, 12038778985307568525ull, 7040313774726022312ull}}, {{17833850694044340166ull, 14781730512557620907ull, 15048473731634460656ull, 8800392218407527890ull}}, {{8840313674564018652ull, 9238581570348513067ull, 14016982100698925814ull, 5500245136504704931ull}}, {{6438706074777635411ull, 2324854926080865526ull, 12909541607446269364ull, 6875306420630881164ull}}, {{17271754630326820071ull, 2906068657601081907ull, 16136927009307836705ull, 8594133025788601455ull}}, {{8489003634740568593ull, 13345507957069145952ull, 17003108408458479796ull, 5371333141117875909ull}}, {{10611254543425710741ull, 16681884946336432440ull, 7418827455290936033ull, 6714166426397344887ull}}, {{13264068179282138426ull, 7017298127638376838ull, 4661848300686282138ull, 8392708032996681109ull}}, {{3678356593623948612ull, 8997497348201373428ull, 5219498197142620288ull, 5245442520622925693ull}}, {{4597945742029935765ull, 11246871685251716785ull, 11136058764855663264ull, 6556803150778657116ull}}, {{10359118195964807611ull, 14058589606564645981ull, 13920073456069579080ull, 8196003938473321395ull}}, {{8780291881691698709ull, 8786618504102903738ull, 6394202900829792973ull, 5122502461545825872ull}}, {{1751992815259847578ull, 15594959148556017577ull, 7992753626037241216ull, 6403128076932282340ull}}, {{6801677037502197376ull, 1046954861985470355ull, 9990942032546551521ull, 8003910096165352925ull}}, {{1945205139225179408ull, 12183561834809388732ull, 8550181779555288652ull, 5002443810103345578ull}}, {{2431506424031474260ull, 15229452293511735915ull, 1464355187589335007ull, 6253054762629181973ull}}, {{16874441085321506537ull, 14425129348462281989ull, 6442130002914056663ull, 7816318453286477466ull}}, {{12852368687539635538ull, 15933234870430008099ull, 8638017270248673318ull, 4885199033304048416ull}}, {{11453774840997156518ull, 10693171551182734316ull, 10797521587810841648ull, 6106498791630060520ull}}, {{14317218551246445648ull, 13366464438978417895ull, 13496901984763552060ull, 7633123489537575650ull}}, {{15865790622170110386ull, 17577412311216286992ull, 13047249758904607941ull, 4770702180960984781ull}}, {{1385494204003086367ull, 8136707333738195029ull, 2474004143348596215ull, 5963377726201230977ull}}, {{6343553773431245862ull, 5559198148745355882ull, 7704191197613133173ull, 7454222157751538721ull}}, {{8576407126821916568ull, 5780341852179541378ull, 16344334544576677993ull, 4658888848594711700ull}}, {{1497136871672619902ull, 11837113333651814627ull, 1983674107011295875ull, 5823611060743389626ull}}, {{15706479144872938589ull, 10184705648637380379ull, 11702964670618895652ull, 7279513825929237032ull}}, {{15021412912663785332ull, 12730882060796725474ull, 14628705838273619565ull, 9099392282411546290ull}}, {{14000069088842253737ull, 10262644297211647373ull, 13754627167348400132ull, 5687120176507216431ull}}, {{3665028305770653459ull, 12828305371514559217ull, 12581597940758112261ull, 7108900220634020539ull}}, {{9192971400640704728ull, 2200323659111035309ull, 11115311407520252423ull, 8886125275792525674ull}}, {{8051450134614134407ull, 8292731314585478924ull, 11558755648127545668ull, 5553828297370328546ull}}, {{10064312668267668009ull, 10365914143231848655ull, 5225072523304656277ull, 6942285371712910683ull}}, {{7968704816907197107ull, 17569078697467198723ull, 1919654635703432442ull, 8677856714641138354ull}}, {{2674597501353304240ull, 15592360204344387106ull, 5811470165742033180ull, 5423660446650711471ull}}, {{12566618913546406108ull, 1043706181720932266ull, 2652651688750153572ull, 6779575558313389339ull}}, {{6484901605078231826ull, 1304632727151165333ull, 17150872666219855677ull, 8474469447891736673ull}}, {{6358906512387588844ull, 3121238463683172285ull, 3801766388746327942ull, 5296543404932335421ull}}, {{12560319158911873958ull, 13124920116458741164ull, 9363894004360297831ull, 6620679256165419276ull}}, {{15700398948639842448ull, 11794464127146038551ull, 11704867505450372289ull, 8275849070206774095ull}}, {{16730278370540983386ull, 454011051825192238ull, 14233071218547564537ull, 5172405668879233809ull}}, {{11689475926321453425ull, 5179199833208878202ull, 3956280967902291959ull, 6465507086099042262ull}}, {{5388472871047040973ull, 1862313773083709849ull, 14168723246732640757ull, 8081883857623802827ull}}, {{14897010590472870368ull, 3469789117391012607ull, 6549609019994206521ull, 5051177411014876767ull}}, {{14009577219663700056ull, 8948922415166153663ull, 3575325256565370247ull, 6313971763768595959ull}}, {{12900285506152237166ull, 6574467000530304175ull, 18304214625988876521ull, 7892464704710744948ull}}, {{14980207468986230085ull, 15638256921399909869ull, 2216762104388272017ull, 4932790440444215593ull}}, {{4890201280950623894ull, 5712763096467723625ull, 7382638648912727926ull, 6165988050555269491ull}}, {{10724437619615667771ull, 16364325907439430339ull, 4616612292713522003ull, 7707485063194086864ull}}, {{4396930503046098405ull, 7921860682935950010ull, 2885382682945951252ull, 4817178164496304290ull}}, {{14719535165662398814ull, 9902325853669937512ull, 12830100390537214873ull, 6021472705620380362ull}}, {{18399418957077998518ull, 16989593335514809794ull, 6814253451316742783ull, 7526840882025475453ull}}, {{16111322866601136978ull, 17536024862337837977ull, 6564751416286658191ull, 4704275551265922158ull}}, {{6304095527969257510ull, 17308345059494909568ull, 17429311307213098547ull, 5880344439082402697ull}}, {{7880119409961571888ull, 17023745305941249056ull, 7951581078734209472ull, 7350430548853003372ull}}, {{9850149262451964859ull, 2832937558717009704ull, 9939476348417761841ull, 9188038186066254215ull}}, {{6156343289032478037ull, 13299801020266600825ull, 13129701745402183006ull, 5742523866291408884ull}}, {{12307115129717985451ull, 7401379238478475223ull, 16412127181752728758ull, 7178154832864261105ull}}, {{10772207893720093909ull, 28352011243318221ull, 6680100921908747236ull, 8972693541080326382ull}}, {{9038472942788752645ull, 9241092043881849696ull, 18010121131475130734ull, 5607933463175203988ull}}, {{11298091178485940807ull, 2327993017997536312ull, 4065907340634361802ull, 7009916828969004986ull}}, {{14122613973107426008ull, 12133363309351696198ull, 14305756212647728060ull, 8762396036211256232ull}}, {{4214947714764753351ull, 16806724105199585932ull, 8941097632904830037ull, 5476497522632035145ull}}, {{5268684643455941689ull, 7173347076217318703ull, 15788058059558425451ull, 6845621903290043931ull}}, {{1974169785892539207ull, 4354997826844260475ull, 15123386556020643910ull, 8557027379112554914ull}}, {{17374757180678694669ull, 16556931697059826508ull, 14063802615940290347ull, 5348142111945346821ull}}, {{3271702402138816720ull, 16084478602897395232ull, 3744695214643199222ull, 6685177639931683527ull}}, {{4089628002673520899ull, 10882226216766968232ull, 69182999876611124ull, 8356472049914604409ull}}, {{2556017501670950562ull, 16024763422334130953ull, 11572454420991351712ull, 5222795031196627755ull}}, {{7806707895516076107ull, 1584210204208112075ull, 9853882007811801737ull, 6528493788995784694ull}}, {{5146698850967707229ull, 6591948773687527998ull, 3093980472909976363ull, 8160617236244730868ull}}, {{17051744837136980730ull, 1814124974341011046ull, 11157109832423511035ull, 5100385772652956792ull}}, {{12091309009566450105ull, 16102714273208427520ull, 13946387290529388793ull, 6375482215816195990ull}}, {{15114136261958062631ull, 6293334786228370688ull, 8209612076306960184ull, 7969352769770244988ull}}, {{9446335163723789145ull, 3933334241392731680ull, 14354379584546625923ull, 4980845481106403117ull}}, {{11807918954654736431ull, 304981783313526696ull, 4107916425401118692ull, 6226056851383003897ull}}, {{14759898693318420538ull, 381227229141908370ull, 9746581550178786269ull, 7782571064228754871ull}}, {{13836622701751400741ull, 2544110027427386683ull, 13009142496502823274ull, 4864106915142971794ull}}, {{12684092358761863022ull, 12403509571139009162ull, 7038056083773753284ull, 6080133643928714743ull}}, {{6631743411597552969ull, 15504386963923761453ull, 4185884086289803701ull, 7600167054910893429ull}}, {{6450682641462164558ull, 11996084861666044860ull, 4922020563144821265ull, 4750104409319308393ull}}, {{8063353301827705697ull, 1160048021800392363ull, 10764211722358414486ull, 5937630511649135491ull}}, {{5467505608857244217ull, 10673432064105266262ull, 8843578634520630203ull, 7422038139561419364ull}}, {{17252249060817941348ull, 4365052030852097461ull, 14750608683430169685ull, 4638773837225887102ull}}, {{7730253270740262973ull, 10068001056992509731ull, 9214888817432936298ull, 5798467296532358878ull}}, {{5051130569997940812ull, 3361629284385861356ull, 2295238984936394565ull, 7248084120665448598ull}}, {{6313913212497426015ull, 8813722623909714599ull, 12092420768025269014ull, 9060105150831810747ull}}, {{10863724785451973115ull, 896890621516183720ull, 5251919970802099182ull, 5662565719269881717ull}}, {{13579655981814966394ull, 10344485313750005458ull, 11176585981930011881ull, 7078207149087352146ull}}, {{7751197940413932184ull, 17542292660614894727ull, 4747360440557739043ull, 8847758936359190183ull}}, {{11762027740399789471ull, 8658089903670615252ull, 9884629302989668758ull, 5529849335224493864ull}}, {{14702534675499736839ull, 1599240342733493257ull, 12355786628737085948ull, 6912311669030617330ull}}, {{4543110289092507337ull, 1999050428416866572ull, 6221361249066581627ull, 8640389586288271663ull}}, {{12062815967537592894ull, 17390307582256399271ull, 10805879808307695372ull, 5400243491430169789ull}}, {{10466833940994603213ull, 3291140404110947473ull, 18119035778812007120ull, 6750304364287712236ull}}, {{17695228444670641920ull, 4113925505138684341ull, 4202050649805457284ull, 8437880455359640296ull}}, {{13365360787132845152ull, 11794575477566453521ull, 2626281656128410802ull, 5273675284599775185ull}}, {{2871642928633892728ull, 5519847310103291094ull, 7894538088587901407ull, 6592094105749718981ull}}, {{12812925697647141718ull, 2288123119201725963ull, 14479858629162264663ull, 8240117632187148726ull}}, {{5702235551815769622ull, 8347605977142160583ull, 4438225624799027510ull, 5150073520116967954ull}}, {{2516108421342324123ull, 1211135434572924921ull, 14771154067853560196ull, 6437591900146209942ull}}, {{7756821545105293058ull, 1513919293216156151ull, 9240570547962174437ull, 8046989875182762428ull}}, {{11765542493331890018ull, 3252042567473791546ull, 14998728629331134831ull, 5029368671989226517ull}}, {{5483556079810086714ull, 17900111264624403145ull, 4913352731381754826ull, 6286710839986533147ull}}, {{11466131118189996296ull, 13151767043925728123ull, 1530004895799805629ull, 7858388549983166434ull}}, {{4860488939655053733ull, 10525697411667274029ull, 5567939078302266422ull, 4911492843739479021ull}}, {{10687297192996205070ull, 3933749727729316728ull, 11571609866305220932ull, 6139366054674348776ull}}, {{13359121491245256338ull, 4917187159661645910ull, 14464512332881526165ull, 7674207568342935970ull}}, {{3737764913600897307ull, 5379084984002222646ull, 13652006226478341757ull, 4796379730214334981ull}}, {{13895578178855897442ull, 11335542248430166211ull, 3229949727815763484ull, 5995474662767918727ull}}, {{12757786705142483899ull, 14169427810537707764ull, 17872495215051868067ull, 7494343328459898408ull}}, {{17196988727568828245ull, 6550049372372373400ull, 11170309509407417542ull, 4683964580287436505ull}}, {{3049491835751483690ull, 17410933752320242559ull, 127828831477108215ull, 5854955725359295632ull}}, {{17646922849971518324ull, 17151981171972915294ull, 159786039346385269ull, 7318694656699119540ull}}, {{12835281525609622097ull, 7604918409683980406ull, 199732549182981587ull, 9148368320873899425ull}}, {{3410364935078625907ull, 2447230996838793802ull, 11654047889307833252ull, 5717730200546187140ull}}, {{13486328205703058191ull, 3059038746048492252ull, 14567559861634791565ull, 7147162750682733925ull}}, {{16857910257128822739ull, 8435484450988003219ull, 4374391771761325744ull, 8933953438353417407ull}}, {{8230350901491820260ull, 5272177781867502012ull, 9651523884991910446ull, 5583720898970885879ull}}, {{10287938626864775325ull, 15813594264189153323ull, 7452718837812500153ull, 6979651123713607349ull}}, {{8248237265153581252ull, 5931934774954277942ull, 13927584565693013096ull, 8724563904642009186ull}}, {{543462272293600379ull, 3707459234346423714ull, 13316426371985521089ull, 5452852440401255741ull}}, {{9902699877221776281ull, 9246010061360417546ull, 2810474909699737649ull, 6816065550501569677ull}}, {{3155002809672444544ull, 16169198595127909837ull, 8124779655552059965ull, 8520081938126962096ull}}, {{4277719765258971792ull, 12411592131168637600ull, 5077987284720037478ull, 5325051211329351310ull}}, {{5347149706573714740ull, 6291118127106021192ull, 15570856142754822656ull, 6656314014161689137ull}}, {{6683937133217143425ull, 7863897658882526490ull, 5628512123161364608ull, 8320392517702111422ull}}, {{8789146726688102545ull, 4914936036801579056ull, 17352878132258016592ull, 5200245323563819638ull}}, {{10986433408360128181ull, 6143670046001973820ull, 12467725628467744932ull, 6500306654454774548ull}}, {{13733041760450160226ull, 7679587557502467275ull, 15584657035584681165ull, 8125383318068468185ull}}, {{6277308091067656189ull, 7105585232652735999ull, 2822881619599343872ull, 5078364573792792616ull}}, {{3234949095407182332ull, 8881981540815919999ull, 3528602024499179840ull, 6347955717240990770ull}}, {{17878744424541141627ull, 11102476926019899998ull, 13634124567478750608ull, 7934944646551238462ull}}, {{6562529246910825613ull, 6939048078762437499ull, 3909641836246831226ull, 4959340404094524039ull}}, {{3591475540211144113ull, 17897182135307822682ull, 275366276881151128ull, 6199175505118155049ull}}, {{13712716462118705949ull, 3924733595425226736ull, 4955893864528826815ull, 7748969381397693811ull}}, {{8570447788824191218ull, 9370487524781848566ull, 791590656116822807ull, 4843105863373558632ull}}, {{1489687699175463214ull, 7101423387549922804ull, 989488320146028509ull, 6053882329216948290ull}}, {{1862109623969329018ull, 13488465252864791409ull, 10460232437037311444ull, 7567352911521185362ull}}, {{12693033561049300396ull, 17653662819895270438ull, 11149331291575707556ull, 4729595569700740851ull}}, {{6642919914456849687ull, 3620334451159536432ull, 9324978096042246542ull, 5911994462125926064ull}}, {{8303649893071062109ull, 13748790100804196348ull, 11656222620052808177ull, 7389993077657407580ull}}, {{14413153220024189626ull, 1675464785361540861ull, 16508511174387780919ull, 4618745673535879737ull}}, {{4181383469748073321ull, 15929389036984089789ull, 6800580912702562436ull, 5773432091919849672ull}}, {{9838415355612479555ull, 1464992222520560620ull, 8500726140878203046ull, 7216790114899812090ull}}, {{12298019194515599443ull, 11054612315005476583ull, 1402535639242977999ull, 9020987643624765113ull}}, {{14603791024213331508ull, 13826661724519504720ull, 12405799820595331009ull, 5638117277265478195ull}}, {{18254738780266664385ull, 3448269100367217188ull, 10895563757316775858ull, 7047646596581847744ull}}, {{4371679401623778866ull, 13533708412313797294ull, 13619454696645969822ull, 8809558245727309680ull}}, {{16567357681297025503ull, 3846881739268735404ull, 8512159185403731139ull, 5505973903579568550ull}}, {{2262453027911730263ull, 196916155658531352ull, 1416826944899888116ull, 6882467379474460688ull}}, {{2828066284889662828ull, 246145194573164190ull, 1771033681124860145ull, 8603084224343075860ull}}, {{15602599483338202980ull, 11683055792676697378ull, 10330268087557813398ull, 5376927640214422412ull}}, {{10279877317317977917ull, 5380447703991095915ull, 12912835109447266748ull, 6721159550268028015ull}}, {{8238160628220084492ull, 6725559629988869894ull, 11529357868381695531ull, 8401449437835035019ull}}, {{537164374210164904ull, 1897631759529349732ull, 4900005658524865755ull, 5250905898646896887ull}}, {{671455467762706129ull, 16207097754693850877ull, 1513321054728694289ull, 6563632373308621109ull}}, {{5451005353130770566ull, 6423814138085149884ull, 6503337336838255766ull, 8204540466635776386ull}}, {{12630250382561507412ull, 17849941891585382389ull, 8676271853951297757ull, 5127837791647360241ull}}, {{1952754922919720552ull, 8477369309199564275ull, 15457025835866510101ull, 6409797239559200301ull}}, {{16276001708931814402ull, 15208397654926843247ull, 5486224239550973914ull, 8012246549449000377ull}}, {{17090030095723465858ull, 14116934552756664933ull, 14958105195787828456ull, 5007654093405625235ull}}, {{7527479564372168610ull, 17646168190945831167ull, 14085945476307397666ull, 6259567616757031544ull}}, {{4797663437037822858ull, 12834338201827513151ull, 17607431845384247083ull, 7824459520946289430ull}}, {{9916068675789721143ull, 5715618366928501767ull, 6392958884937766523ull, 4890287200591430894ull}}, {{7783399826309763524ull, 2532836940233239305ull, 17214570643026983962ull, 6112859000739288617ull}}, {{14340935801314592309ull, 12389418212146324939ull, 7683155248501566240ull, 7641073750924110772ull}}, {{6657241866607926241ull, 7743386382591453087ull, 14025344067168254708ull, 4775671094327569232ull}}, {{3709866314832519898ull, 9679232978239316359ull, 17531680083960318385ull, 5969588867909461540ull}}, {{25646875113261968ull, 16710727241226533353ull, 3467856031240846365ull, 7461986084886826926ull}}, {{11545244343014258490ull, 12750047534980277297ull, 16002468074807692690ull, 4663741303054266828ull}}, {{596497373485659401ull, 6714187381870570814ull, 1556341019800064247ull, 5829676628817833536ull}}, {{9968993753711850059ull, 3781048208910825613ull, 1945426274750080309ull, 7287095786022291920ull}}, {{17072928210567200477ull, 9337996279565919920ull, 2431782843437600386ull, 9108869732527864900ull}}, {{10670580131604500298ull, 10447933693156087854ull, 10743236314003276049ull, 5693043582829915562ull}}, {{4114853127650849565ull, 17671603134872497722ull, 4205673355649319253ull, 7116304478537394453ull}}, {{14366938446418337764ull, 8254445863308458440ull, 9868777712989036971ull, 8895380598171743066ull}}, {{8979336529011461103ull, 2853185655354092573ull, 10779672089045536011ull, 5559612873857339416ull}}, {{15835856679691714282ull, 17401540124474779428ull, 13474590111306920013ull, 6949516092321674270ull}}, {{1348076775905091237ull, 7916867100311310574ull, 7619865602278874209ull, 8686895115402092838ull}}, {{14677606040222845735ull, 16477256983763038868ull, 150729982996908476ull, 5429309447126308024ull}}, {{18347007550278557169ull, 2149827155994246969ull, 188412478746135596ull, 6786636808907885030ull}}, {{9098701382566032749ull, 2687283944992808712ull, 9458887635287445303ull, 8483296011134856287ull}}, {{5686688364103770468ull, 8597081493261587301ull, 12829333799695735170ull, 5302060006959285179ull}}, {{11720046473557100989ull, 1522979829722208318ull, 11424981231192281059ull, 6627575008699106474ull}}, {{5426686055091600428ull, 15738782842434924110ull, 5057854502135575515ull, 8284468760873883093ull}}, {{17226736839714413980ull, 7530896267308133616ull, 5467002073048428649ull, 5177792975546176933ull}}, {{3086676975933465859ull, 14025306352562554925ull, 11445438609737923715ull, 6472241219432721166ull}}, {{8470032238344220227ull, 12919946922275805752ull, 5083426225317628836ull, 8090301524290901458ull}}, {{5293770148965137642ull, 17298338863277154403ull, 7788827409250905926ull, 5056438452681813411ull}}, {{2005526667779034149ull, 12399551542241667196ull, 5124348243136244504ull, 6320548065852266764ull}}, {{2506908334723792686ull, 15499439427802083995ull, 6405435303920305630ull, 7900685082315333455ull}}, {{17707718773698228093ull, 5075463623948914592ull, 10920926092591272875ull, 4937928176447083409ull}}, {{3687904393413233500ull, 1732643511508755337ull, 18262843634166478998ull, 6172410220558854261ull}}, {{9221566510193929779ull, 11389176426240719979ull, 8993496487425935035ull, 7715512775698567827ull}}, {{3457636059657512160ull, 4812392257186756035ull, 3315092295427515445ull, 4822195484811604892ull}}, {{18157103129854053912ull, 10627176339910832947ull, 4143865369284394306ull, 6027744356014506115ull}}, {{18084692893890179485ull, 4060598388033765376ull, 568145693178104979ull, 7534680445018132644ull}}, {{11302933058681362179ull, 232030983307409408ull, 9578463095091091420ull, 4709175278136332902ull}}, {{14128666323351702723ull, 290038729134261760ull, 2749706832009088467ull, 5886469097670416128ull}}, {{17660832904189628404ull, 14197606466699990912ull, 3437133540011360583ull, 7358086372088020160ull}}, {{3629297056527483889ull, 13135322064947600737ull, 4296416925014200729ull, 9197607965110025200ull}}, {{13797525706398147191ull, 1292047262951168604ull, 2685260578133875456ull, 5748504978193765750ull}}, {{17246907132997683988ull, 1615059078688960755ull, 12579947759522120128ull, 7185631222742207187ull}}, {{16946947897819717081ull, 2018823848361200944ull, 11113248680975262256ull, 8982039028427758984ull}}, {{10591842436137323176ull, 1261764905225750590ull, 6945780425609538910ull, 5613774392767349365ull}}, {{4016431008316878162ull, 10800578168386964046ull, 13293911550439311541ull, 7017217990959186706ull}}, {{14243910797250873510ull, 18112408728911092961ull, 7394017401194363618ull, 8771522488698983383ull}}, {{1984915220640714088ull, 15931941473996821005ull, 11538789903387559117ull, 5482201555436864614ull}}, {{7092830044228280514ull, 6079868787213862544ull, 5200115342379673089ull, 6852751944296080768ull}}, {{8866037555285350642ull, 12211522002444716084ull, 6500144177974591361ull, 8565939930370100960ull}}, {{14764645508908119959ull, 714672223886865696ull, 4062590111234119601ull, 5353712456481313100ull}}, {{9062812425598333ull, 5505026298285970025ull, 5078237639042649501ull, 6692140570601641375ull}}, {{4623014533959385820ull, 11492968891284850435ull, 1736111030375923972ull, 8365175713252051719ull}}, {{583541074510922186ull, 16406477593907807330ull, 8002598421626034338ull, 5228234820782532324ull}}, {{9952798379993428540ull, 11284724955529983354ull, 10003248027032542923ull, 6535293525978165405ull}}, {{3217625938137009867ull, 9494220175985091289ull, 17115746052218066558ull, 8169116907472706756ull}}, {{13540231257404100927ull, 1322201591563294151ull, 1473969245781515791ull, 5105698067170441723ull}}, {{12313603053327738255ull, 15487810044736281401ull, 15677519612509058450ull, 6382122583963052153ull}}, {{1556945761377509106ull, 10136390519065575944ull, 5761841460354159351ull, 7977653229953815192ull}}, {{973091100860943192ull, 13252773102057066821ull, 3601150912721349594ull, 4986033268721134495ull}}, {{5828049894503566893ull, 7342594340716557718ull, 18336496696183850705ull, 6232541585901418118ull}}, {{16508434404984234425ull, 13789928944323085051ull, 13697248833375037573ull, 7790676982376772648ull}}, {{8011928493901452564ull, 10924548599415622109ull, 8560780520859398483ull, 4869173113985482905ull}}, {{14626596635804203608ull, 9043999730842139732ull, 15312661669501636008ull, 6086466392481853631ull}}, {{18283245794755254510ull, 11304999663552674665ull, 14529141068449657106ull, 7608082990602317039ull}}, {{4509499594080952213ull, 11677310808147809570ull, 15998242195422117547ull, 4755051869126448149ull}}, {{14860246529455966074ull, 9984952491757374058ull, 6162744688995483222ull, 5943814836408060187ull}}, {{9351936124965181785ull, 3257818577841941765ull, 3091744842816966124ull, 7429768545510075234ull}}, {{8150803087316932568ull, 11259508648005989411ull, 6544026545187991731ull, 4643605340943797021ull}}, {{5576817840718777806ull, 9462699791580098860ull, 12791719199912377568ull, 5804506676179746276ull}}, {{6971022300898472257ull, 11828374739475123575ull, 15989648999890471960ull, 7255633345224682845ull}}, {{4102091857695702417ull, 14785468424343904469ull, 6152003194580926238ull, 9069541681530853557ull}}, {{4869650420273507963ull, 4629231746787552389ull, 6150845005826772851ull, 5668463550956783473ull}}, {{10698749043769272857ull, 1174853665057052582ull, 12300242275710853968ull, 7085579438695979341ull}}, {{4150064267856815263ull, 1468567081321315728ull, 1540244789356403748ull, 8856974298369974177ull}}, {{2593790167410509540ull, 10141226462680598138ull, 12491868039416222102ull, 5535608936481233860ull}}, {{12465609746117912733ull, 3453161041495971864ull, 15614835049270277628ull, 6919511170601542325ull}}, {{15582012182647390916ull, 4316451301869964830ull, 5683485756305683323ull, 8649388963251927907ull}}, {{5127071595727231419ull, 391939054455034067ull, 1246335588477358125ull, 5405868102032454942ull}}, {{1797153476231651369ull, 5101609836496180488ull, 10781291522451473464ull, 6757335127540568677ull}}, {{2246441845289564211ull, 6377012295620225610ull, 18088300421491729734ull, 8446668909425710846ull}}, {{6015712171733365536ull, 17820690740044804718ull, 6693501745004943179ull, 5279168068391069279ull}}, {{16743012251521482728ull, 17664177406628617993ull, 3755191162828791070ull, 6598960085488836599ull}}, {{7093707259119689698ull, 12856849721430996684ull, 82302935108600934ull, 8248700106861045749ull}}, {{13656939073804581869ull, 3423845057466985023ull, 2357282343656569536ull, 5155437566788153593ull}}, {{12459487823828339433ull, 4279806321833731279ull, 7558288947998099824ull, 6444296958485191991ull}}, {{10962673761358036387ull, 5349757902292164099ull, 4836175166570236876ull, 8055371198106489989ull}}, {{4545828091635078790ull, 12566970725787378370ull, 5328452488320091999ull, 5034606998816556243ull}}, {{14905657151398624295ull, 11097027388806835058ull, 2048879591972727095ull, 6293258748520695304ull}}, {{9408699402393504561ull, 9259598217581155919ull, 2561099489965908869ull, 7866573435650869130ull}}, {{12797966154137022207ull, 8093091895201916401ull, 6212373199656080947ull, 4916608397281793206ull}}, {{2162399637389114046ull, 5504678850575007598ull, 16988838536424876992ull, 6145760496602241507ull}}, {{11926371583591168366ull, 6880848563218759497ull, 16624362152103708336ull, 7682200620752801884ull}}, {{536453212103398373ull, 4300530352011724686ull, 1166854308210041902ull, 4801375387970501178ull}}, {{9893938551984023774ull, 14599034976869431665ull, 10681939922117328185ull, 6001719234963126472ull}}, {{16979109208407417621ull, 4413735665804625869ull, 13352424902646660232ull, 7502149043703908090ull}}, {{12917786264468329965ull, 2758584791127891168ull, 12956951582581550549ull, 4688843152314942556ull}}, {{16147232830585412457ull, 8059917007337251864ull, 16196189478226938186ull, 5861053940393678195ull}}, {{1737296964522213955ull, 851524222316789023ull, 15633550829356284829ull, 7326317425492097744ull}}, {{16006679260934931155ull, 5676091296323374182ull, 1095194462985804420ull, 9157896781865122181ull}}, {{5392488519656944068ull, 12770929097056884672ull, 2990339548579821714ull, 5723685488665701363ull}}, {{6740610649571180085ull, 6740289334466330032ull, 17572982491006940855ull, 7154606860832126703ull}}, {{8425763311963975106ull, 3813675649655524636ull, 17354542095331288165ull, 8943258576040158379ull}}, {{14489474106832260250ull, 4689390290248396849ull, 8540745800368361151ull, 5589536610025098987ull}}, {{4276784578258161600ull, 1250051844383108158ull, 6064246232033063535ull, 6986920762531373734ull}}, {{14569352759677477808ull, 15397622860761048909ull, 16803679826896105226ull, 8733650953164217167ull}}, {{11411688484012117582ull, 14235200306403043472ull, 17419828919451147622ull, 5458531845727635729ull}}, {{14264610605015146977ull, 8570628346149028532ull, 7939728094031770816ull, 6823164807159544662ull}}, {{17830763256268933722ull, 10713285432686285665ull, 701288080684937712ull, 8528956008949430828ull}}, {{4226698007527001720ull, 6695803395428928541ull, 9661677087282861878ull, 5330597505593394267ull}}, {{9895058527836140054ull, 17593126281140936484ull, 7465410340676189443ull, 6663246881991742834ull}}, {{12368823159795175068ull, 17379721832998782701ull, 108390888990460996ull, 8329058602489678543ull}}, {{10036357484085678369ull, 1638954108769463380ull, 6985273333260119979ull, 5205661626556049089ull}}, {{12545446855107097962ull, 15883750691243992937ull, 13343277685002537877ull, 6507077033195061361ull}}, {{1846750513601708740ull, 6019630308772827460ull, 2844039050971008635ull, 8133846291493826702ull}}, {{10377591107855843771ull, 1456425933769323210ull, 15612582462139044109ull, 5083653932183641688ull}}, {{3748616847965028905ull, 6432218435639041917ull, 1068984003964253520ull, 6354567415229552111ull}}, {{9297457078383674035ull, 8040273044548802396ull, 15171288060237480612ull, 7943209269036940138ull}}, {{15034282710844572080ull, 14248542689697777305ull, 14093741056075813286ull, 4964505793148087586ull}}, {{4957795333273551388ull, 8587306325267445824ull, 8393804283239990800ull, 6205632241435109483ull}}, {{6197244166591939235ull, 10734132906584307280ull, 5880569335622600596ull, 7757040301793886854ull}}, {{3873277604119962022ull, 15932205103469967858ull, 17510413890046289084ull, 4848150188621179283ull}}, {{14064969042004728336ull, 1468512305627908206ull, 17276331344130473452ull, 6060187735776474104ull}}, {{8357839265651134611ull, 1835640382034885258ull, 3148670106453540199ull, 7575234669720592631ull}}, {{9835335559459347036ull, 8064804266412885142ull, 8885447844174544480ull, 4734521668575370394ull}}, {{3070797412469407987ull, 10081005333016106428ull, 1883437768363404792ull, 5918152085719212993ull}}, {{3838496765586759984ull, 12601256666270133035ull, 6965983228881643894ull, 7397690107149016241ull}}, {{93217469278031038ull, 3264099397991445243ull, 15882954564119497194ull, 4623556316968135150ull}}, {{13951579891879702510ull, 13303496284344082361ull, 10630321168294595684ull, 5779445396210168938ull}}, {{3604416809567464425ull, 16629370355430102952ull, 4064529423513468797ull, 7224306745262711173ull}}, {{4505521011959330531ull, 6951654889005464978ull, 9692347797819223901ull, 9030383431578388966ull}}, {{7427636650901969486ull, 6650627314842109563ull, 1446031355209627034ull, 5643989644736493104ull}}, {{4672859795200073953ull, 17536656180407412762ull, 1807539194012033792ull, 7054987055920616380ull}}, {{15064446780854868250ull, 3474076151799714336ull, 2259423992515042241ull, 8818733819900770475ull}}, {{9415279238034292656ull, 13700512640943291220ull, 17553041059817759064ull, 5511708637437981546ull}}, {{11769099047542865820ull, 17125640801179114025ull, 12717929287917423022ull, 6889635796797476933ull}}, {{876315754146418563ull, 12183678964619116724ull, 2062353554614615066ull, 8612044745996846167ull}}, {{9771069383196287410ull, 12226485371314335856ull, 8206499999275216272ull, 5382527966248028854ull}}, {{12213836728995359262ull, 15283106714142919820ull, 1034752962239244532ull, 6728159957810036068ull}}, {{15267295911244199078ull, 657139318969098159ull, 1293441202799055666ull, 8410199947262545085ull}}, {{16459588972168706280ull, 5022398092783074253ull, 3114243760963103743ull, 5256374967039090678ull}}, {{6739428159928719138ull, 1666311597551454913ull, 13116176738058655487ull, 6570468708798863347ull}}, {{13035971218338286826ull, 15917947552221482353ull, 11783534904145931454ull, 8213085885998579184ull}}, {{1229952983820347410ull, 5337031201711038567ull, 7364709315091207159ull, 5133178678749111990ull}}, {{15372499285057597975ull, 2059602983711410304ull, 18429258680718784757ull, 6416473348436389987ull}}, {{768880032612445853ull, 7186189748066650785ull, 18424887332471093042ull, 8020591685545487484ull}}, {{12009765066451248418ull, 9103054610969044644ull, 2292182545939657343ull, 5012869803465929678ull}}, {{15012206333064060522ull, 6767132245283917901ull, 12088600219279347487ull, 6266087254332412097ull}}, {{4930199861047911941ull, 3847229288177509473ull, 1275692218817020647ull, 7832609067915515122ull}}, {{14610589959223414723ull, 9322047332752025276ull, 5408993655188025808ull, 4895380667447196951ull}}, {{18263237449029268404ull, 11652559165940031595ull, 2149556050557644356ull, 6119225834308996189ull}}, {{18217360792859197601ull, 14565698957425039494ull, 7298631081624443349ull, 7649032292886245236ull}}, {{6774164477109610597ull, 11409404857604343636ull, 13785016462870052901ull, 4780645183053903272ull}}, {{8467705596387013246ull, 426698016723265833ull, 17231270578587566127ull, 5975806478817379090ull}}, {{15196318013911154461ull, 14368430576186246003ull, 12315716186379681850ull, 7469758098521723863ull}}, {{7191855749480777586ull, 13591955128543791656ull, 14614851644128383012ull, 4668598811576077414ull}}, {{8989819686850971983ull, 16989943910679739570ull, 9045192518305702957ull, 5835748514470096768ull}}, {{2013902571708939170ull, 7402371833067510751ull, 11306490647882128697ull, 7294685643087620960ull}}, {{16352436269918337675ull, 13864650809761776342ull, 14133113309852660871ull, 9118357053859526200ull}}, {{5608586650271573143ull, 15582935783742192070ull, 8833195818657913044ull, 5698973158662203875ull}}, {{16234105349694242237ull, 1031925655968188471ull, 6429808754895003402ull, 7123716448327754844ull}}, {{15680945668690414892ull, 10513279106815011397ull, 8037260943618754252ull, 8904645560409693555ull}}, {{12106434052145203259ull, 15794171478614157931ull, 2717445080548027455ull, 5565403475256058472ull}}, {{10521356546754116170ull, 15131028329840309510ull, 3396806350685034319ull, 6956754344070073090ull}}, {{3928323646587869405ull, 14302099393872998984ull, 13469379975211068707ull, 8695942930087591362ull}}, {{2455202279117418378ull, 6632969111956930413ull, 13030048502934305846ull, 5434964331304744601ull}}, {{7680688867324160876ull, 17514583426800938824ull, 2452502573385718595ull, 6793705414130930752ull}}, {{9600861084155201095ull, 17281543265073785626ull, 3065628216732148244ull, 8492131767663663440ull}}, {{10612224196024388589ull, 1577592503816340208ull, 1916017635457592653ull, 5307582354789789650ull}}, {{13265280245030485736ull, 6583676648197813164ull, 11618394081176766624ull, 6634477943487237062ull}}, {{16581600306288107170ull, 8229595810247266455ull, 5299620564616182472ull, 8293097429359046328ull}}, {{17281029219071148837ull, 5143497381404541534ull, 3312262852885114045ull, 5183185893349403955ull}}, {{12377914486984160238ull, 11041057745183064822ull, 17975386621388556268ull, 6478982366686754943ull}}, {{6249021071875424490ull, 13801322181478831028ull, 17857547258308307431ull, 8098727958358443679ull}}, {{13129010206776916114ull, 15543355391065351248ull, 18078496064083774000ull, 5061704973974027299ull}}, {{16411262758471145143ull, 982450165122137444ull, 17986434061677329597ull, 6327131217467534124ull}}, {{2067334374379379813ull, 5839748724830059710ull, 4036298503387110380ull, 7908914021834417656ull}}, {{15127142039269276095ull, 12873214989873563126ull, 2522686564616943987ull, 4943071263646511035ull}}, {{9685555512231819311ull, 11479832718914566004ull, 16988416261053343696ull, 6178839079558138793ull}}, {{12106944390289774138ull, 14349790898643207505ull, 7400462271034515908ull, 7723548849447673492ull}}, {{649311216290026981ull, 18191991348506780499ull, 13848660956251348250ull, 4827218030904795932ull}}, {{14646697075644697438ull, 13516617148778699815ull, 17310826195314185313ull, 6034022538630994915ull}}, {{13696685326128483893ull, 3060713380691211057ull, 17026846725715343738ull, 7542528173288743644ull}}, {{1642899301189220577ull, 6524631881359394815ull, 1418407166717314028ull, 4714080108305464778ull}}, {{15888682181768689433ull, 8155789851699243518ull, 10996380995251418343ull, 5892600135381830972ull}}, {{10637480690356085984ull, 5583051296196666494ull, 13745476244064272929ull, 7365750169227288715ull}}, {{4073478826090331671ull, 11590500138673221022ull, 12570159286652953257ull, 9207187711534110894ull}}, {{16380982321588621007ull, 326533559029681282ull, 3244663535730707882ull, 5754492319708819309ull}}, {{11252855865131000450ull, 9631538985641877411ull, 8667515438090772756ull, 7193115399636024136ull}}, {{9454383812986362659ull, 12039423732052346764ull, 10834394297613465945ull, 8991394249545030170ull}}, {{15132361919971252470ull, 607110804891634871ull, 11383182454435804120ull, 5619621405965643856ull}}, {{14303766381536677683ull, 758888506114543589ull, 14228978068044755150ull, 7024526757457054820ull}}, {{4044649921638683392ull, 10171982669497955295ull, 17786222585055943937ull, 8780658446821318525ull}}, {{9445435228665258976ull, 17886704214504691819ull, 13422232124873658912ull, 5487911529263324078ull}}, {{7195108017404185816ull, 3911636194421313158ull, 7554418119237297833ull, 6859889411579155098ull}}, {{18217257058610008078ull, 9501231261454029351ull, 219650612191846483ull, 8574861764473943873ull}}, {{18303314689272336905ull, 3632426529195074392ull, 11666496678688373812ull, 5359288602796214920ull}}, {{4432399287880869515ull, 4540533161493842991ull, 14583120848360467265ull, 6699110753495268650ull}}, {{928813091423698990ull, 10287352470294691643ull, 9005529023595808273ull, 8373888441869085813ull}}, {{16721409246635669533ull, 17958810340002652036ull, 7934298648961074122ull, 5233680276168178633ull}}, {{2455017484585035300ull, 13225140888148539238ull, 14529559329628730557ull, 6542100345210223291ull}}, {{12292143892586069933ull, 2696368054903510335ull, 13550263143608525293ull, 8177625431512779114ull}}, {{14600118960507375564ull, 3991073043528387911ull, 13080600483182716212ull, 5111015894695486946ull}}, {{13638462682206831551ull, 4988841304410484889ull, 7127378567123619457ull, 6388769868369358683ull}}, {{3213020297476375727ull, 10847737648940494016ull, 4297537190477136417ull, 7985962335461698354ull}}, {{2008137685922734829ull, 18309051076656278520ull, 7297646762475598164ull, 4991226459663561471ull}}, {{2510172107403418537ull, 4439569772110796534ull, 4510372434667109802ull, 6239033074579451839ull}}, {{12361087171109048979ull, 14772834251993271475ull, 1026279524906499348ull, 7798791343224314799ull}}, {{5419836472729461660ull, 9649370641018864ull, 7558953730707643949ull, 4874244589515196749ull}}, {{6774795590911827075ull, 4623747731728661484ull, 14060378181811942840ull, 6092805736893995936ull}}, {{8468494488639783843ull, 5779684664660826855ull, 17575472727264928550ull, 7616007171117494920ull}}, {{12210338083040946758ull, 17447360970695180496ull, 10984670454540580343ull, 4760004481948434325ull}}, {{15262922603801183448ull, 17197515194941587716ull, 18342524086603113333ull, 5950005602435542906ull}}, {{631909181041927693ull, 7661835938394820934ull, 13704783071399115859ull, 7437507003044428633ull}}, {{14230001293433368521ull, 2482804452283069131ull, 1647960391983365556ull, 4648441876902767896ull}}, {{13175815598364322747ull, 3103505565353836414ull, 2059950489979206945ull, 5810552346128459870ull}}, {{7246397461100627625ull, 8491067975119683422ull, 11798310149328784489ull, 7263190432660574837ull}}, {{18281368863230560339ull, 15225520987326992181ull, 912829631378816899ull, 9078988040825718547ull}}, {{13731698548732794164ull, 7210107607865676161ull, 16711419584107618226ull, 5674367525516074091ull}}, {{3329565130633828993ull, 18236006546686871010ull, 16277588461707134878ull, 7092959406895092614ull}}, {{13385328450147062049ull, 13571636146503812954ull, 11123613540279142790ull, 8866199258618865768ull}}, {{12977516299769301685ull, 3870586573137495192ull, 6952258462674464244ull, 5541374536636791105ull}}, {{16221895374711627106ull, 4838233216421868990ull, 13302009096770468209ull, 6926718170795988881ull}}, {{11053997181534758074ull, 10659477538954724142ull, 2792453315680921549ull, 8658397713494986102ull}}, {{2297062220031835893ull, 8968016471060396541ull, 15580341377582739680ull, 5411498570934366313ull}}, {{7483013793467182770ull, 11210020588825495676ull, 5640368666696260888ull, 6764373213667957892ull}}, {{9353767241833978462ull, 14012525736031869595ull, 7050460833370326110ull, 8455466517084947365ull}}, {{3540261516932542587ull, 4146142566592530593ull, 6712381030070147771ull, 5284666573178092103ull}}, {{9037012914593066138ull, 570992189813275337ull, 3778790269160296810ull, 6605833216472615129ull}}, {{15907952161668720576ull, 9937112274121369979ull, 9335173854877758916ull, 8257291520590768911ull}}, {{7636627091829256408ull, 15434067208180632045ull, 12752012686939681178ull, 5160807200369230569ull}}, {{14157469883213958414ull, 10069211973371014248ull, 2104957803392437761ull, 6451009000461538212ull}}, {{17696837354017448017ull, 17198200985141155714ull, 2631197254240547201ull, 8063761250576922765ull}}, {{15672209364688292915ull, 3831346588072140465ull, 3950341293114035953ull, 5039850781610576728ull}}, {{5755203650578202432ull, 9400869253517563486ull, 4937926616392544941ull, 6299813477013220910ull}}, {{16417376600077528847ull, 16362772585324342261ull, 15395780307345456984ull, 7874766846266526137ull}}, {{12566703384262149482ull, 10226732865827713913ull, 2704833664449828759ull, 4921729278916578836ull}}, {{1873321175045523140ull, 8171730063857254488ull, 3381042080562285949ull, 6152161598645723545ull}}, {{2341651468806903925ull, 14826348598248956014ull, 8837988619130245340ull, 7690201998307154431ull}}, {{15298590223286478665ull, 43095837050821700ull, 12441271914597485194ull, 4806376248941971519ull}}, {{676493705398546716ull, 9277241833168302934ull, 10939903874819468588ull, 6007970311177464399ull}}, {{10068989168602959202ull, 11596552291460378667ull, 9063193825096947831ull, 7509962888971830499ull}}, {{3987275221163155550ull, 14165374209803818523ull, 3358653131471898442ull, 4693726805607394062ull}}, {{372408008026556533ull, 8483345725399997346ull, 13421688451194648861ull, 5867158507009242577ull}}, {{9688882046887971474ull, 15215868175177384586ull, 2942052508711147364ull, 7333948133761553222ull}}, {{2887730521755188535ull, 573091145262179117ull, 12900937672743710014ull, 9167435167201941527ull}}, {{4110674585310686786ull, 14193240021071025660ull, 14980615073105900614ull, 5729646979501213454ull}}, {{5138343231638358483ull, 8518177989484006267ull, 9502396804527599960ull, 7162058724376516818ull}}, {{1811243021120560199ull, 10647722486855007834ull, 2654623968804724142ull, 8952573405470646023ull}}, {{5743712906627738029ull, 2043140535856991992ull, 8576669008144034445ull, 5595358378419153764ull}}, {{7179641133284672536ull, 7165611688248627894ull, 10720836260180043056ull, 6994197973023942205ull}}, {{18197923453460616478ull, 8957014610310784867ull, 18012731343652441724ull, 8742747466279927756ull}}, {{9067859149199191347ull, 14821506168299016350ull, 2034585052928000269ull, 5464217166424954848ull}}, {{2111451899644213375ull, 4691824655091606726ull, 2543231316160000337ull, 6830271458031193560ull}}, {{11862686911410042527ull, 10476466837291896311ull, 3179039145200000421ull, 8537839322538991950ull}}, {{14331708347272358436ull, 8853634782521129146ull, 15821957521032163975ull, 5336149576586869968ull}}, {{8691263397235672236ull, 6455357459724023529ull, 1330702827580653353ull, 6670186970733587461ull}}, {{15475765264971978199ull, 12680882843082417315ull, 6275064552903204595ull, 8337733713416984326ull}}, {{7366510281393792423ull, 5619708767712816870ull, 17756973400846666584ull, 5211083570885615203ull}}, {{18431509888597016336ull, 7024635959641021087ull, 17584530732630945326ull, 6513854463607019004ull}}, {{18427701342318882516ull, 18004166986406052167ull, 3533919342079130041ull, 8142318079508773756ull}}, {{18434842366590383429ull, 4335075338862700748ull, 11432071625654232084ull, 5088948799692983597ull}}, {{4596808884528427670ull, 5418844173578375936ull, 455031476785626393ull, 6361185999616229497ull}}, {{5746011105660534587ull, 11385241235400357824ull, 5180475364409420895ull, 7951482499520286871ull}}, {{3591256941037834117ull, 14033304799766305496ull, 10155326130396969915ull, 4969676562200179294ull}}, {{4489071176297292646ull, 12929944981280493966ull, 3470785626141436586ull, 6212095702750224118ull}}, {{14834711007226391616ull, 6939059189745841649ull, 13561854069531571541ull, 7765119628437780147ull}}, {{2354165351875412904ull, 6642755002804844983ull, 6170315784243538261ull, 4853199767773612592ull}}, {{16777764745126429842ull, 12915129771933444132ull, 7712894730304422826ull, 6066499709717015740ull}}, {{2525461857698485686ull, 6920540178062029358ull, 9641118412880528533ull, 7583124637146269675ull}}, {{15413471716343717266ull, 6631180620502462300ull, 3719855998836636381ull, 4739452898216418547ull}}, {{820095571720094967ull, 12900661794055465780ull, 38133980118407572ull, 5924316122770523184ull}}, {{1025119464650118708ull, 16125827242569332225ull, 47667475148009465ull, 7405395153463153980ull}}, {{12169914711474793953ull, 3161112998964750784ull, 9253164208822281724ull, 4628371970914471237ull}}, {{15212393389343492441ull, 3951391248705938480ull, 16178141279455240059ull, 5785464963643089046ull}}, {{568747662969813935ull, 327553042455035197ull, 10999304562464274266ull, 7231831204553861308ull}}, {{5322620597139655322ull, 9632813339923569804ull, 13749130703080342832ull, 9039789005692326635ull}}, {{12550009910067060385ull, 6020508337452231127ull, 6287363680211520318ull, 5649868128557704147ull}}, {{11075826369156437577ull, 16749007458670064717ull, 3247518581837012493ull, 7062335160697130184ull}}, {{9724906163383259ull, 7101201268055417185ull, 4059398227296265617ull, 8827918950871412730ull}}, {{11535293112420584297ull, 15967465838603105500ull, 7148809910487553914ull, 5517449344294632956ull}}, {{14419116390525730371ull, 10735960261399106067ull, 8936012388109442393ull, 6896811680368291195ull}}, {{13412209469729775060ull, 18031636345176270488ull, 6558329466709415087ull, 8621014600460363994ull}}, {{8382630918581109413ull, 18187301743376250911ull, 8710641935120772333ull, 5388134125287727496ull}}, {{5866602629798998862ull, 8899069123938149927ull, 10888302418900965417ull, 6735167656609659370ull}}, {{2721567268821360673ull, 15735522423350075313ull, 4387005986771430963ull, 8418959570762074213ull}}, {{13230194589081820181ull, 7528858505380103118ull, 5047721750945838304ull, 5261849731726296383ull}}, {{7314371199497499418ull, 9411073131725128898ull, 1697966170254909976ull, 6577312164657870479ull}}, {{18366336036226650080ull, 11763841414656411122ull, 15957515768100801182ull, 8221640205822338098ull}}, {{16090646041069044204ull, 2740714865732869047ull, 14585133373490388643ull, 5138525128638961311ull}}, {{15501621532908917351ull, 17260951637448250021ull, 13619730698435597899ull, 6423156410798701639ull}}, {{5541968860853982977ull, 16964503528382924623ull, 12412977354617109470ull, 8028945513498377049ull}}, {{10381259565674821217ull, 5991128686811939985ull, 840581818994611563ull, 5018090945936485656ull}}, {{17588260475520914425ull, 2877224840087537077ull, 1050727273743264454ull, 6272613682420607070ull}}, {{8150267539118979319ull, 12819903086964197155ull, 10536781129033856375ull, 7840767103025758837ull}}, {{2788074202735668122ull, 14929968456993705078ull, 8891331214859854186ull, 4900479439391099273ull}}, {{12708464790274360961ull, 9439088534387355539ull, 15725850037002205637ull, 6125599299238874091ull}}, {{11273894969415563297ull, 16410546686411582328ull, 15045626527825369142ull, 7656999124048592614ull}}, {{7046184355884727061ull, 5644905660579851051ull, 4791830561463467810ull, 4785624452530370384ull}}, {{4196044426428520922ull, 16279504112579589622ull, 5989788201829334762ull, 5982030565662962980ull}}, {{14468427569890426960ull, 11126008103869711219ull, 7487235252286668453ull, 7477538207078703725ull}}, {{6736924221967822898ull, 9259598074132263464ull, 6985365041892861735ull, 4673461379424189828ull}}, {{8421155277459778623ull, 6962811574237941426ull, 8731706302366077169ull, 5841826724280237285ull}}, {{1303072059969947470ull, 13315200486224814687ull, 15526318896384984365ull, 7302283405350296606ull}}, {{15463898130244598050ull, 2808942552498854646ull, 10184526583626454649ull, 9127854256687870758ull}}, {{5053250312975485877ull, 13284804141380253914ull, 1753643096339146251ull, 5704908910429919224ull}}, {{15539934928074133155ull, 11994319158297929488ull, 2192053870423932814ull, 7131136138037399030ull}}, {{978174586383114827ull, 5769526911017636053ull, 11963439374884691826ull, 8913920172546748787ull}}, {{2917202125703140719ull, 8217640337813410437ull, 5171306600089238439ull, 5571200107841717992ull}}, {{8258188675556313803ull, 5660364403839375142ull, 6464133250111548049ull, 6964000134802147490ull}}, {{1099363807590616445ull, 11687141523226606832ull, 17303538599494210869ull, 8705000168502684362ull}}, {{687102379744135279ull, 9610306461230323222ull, 15426397643111269697ull, 5440625105314177726ull}}, {{10082250011534944906ull, 16624569094965291931ull, 10059625017034311313ull, 6800781381642722158ull}}, {{7991126495991293228ull, 6945653313424451202ull, 3351159234438113334ull, 8500976727053402698ull}}, {{9606140078421946172ull, 18176091376172445713ull, 6706160539951208737ull, 5313110454408376686ull}}, {{16619361116454820619ull, 8885056164933393429ull, 17606072711793786730ull, 6641388068010470857ull}}, {{6939143340286362061ull, 1882948169311965979ull, 8172532834460069701ull, 8301735085013088572ull}}, {{2031121578465282337ull, 3482685615033672689ull, 14331205058392319371ull, 5188584428133180357ull}}, {{7150587991508990825ull, 18188415074074254573ull, 4078948267708235501ull, 6485730535166475447ull}}, {{13549921007813626435ull, 8900460787310654504ull, 486999316207906473ull, 8107163168958094309ull}}, {{8468700629883516522ull, 17092003038137628825ull, 2610217581843635497ull, 5066976980598808943ull}}, {{15197561805781783556ull, 7529945742389872319ull, 17097830032586708084ull, 6333721225748511178ull}}, {{14385266238799841541ull, 9412432177987340399ull, 12148915503878609297ull, 7917151532185638973ull}}, {{15908320426890982819ull, 17411985157310557509ull, 9898915199137824762ull, 4948219707616024358ull}}, {{6050342478331564812ull, 12541609409783421079ull, 3150271962067505145ull, 6185274634520030448ull}}, {{2951242079487068111ull, 1841953706947112637ull, 3937839952584381432ull, 7731593293150038060ull}}, {{4150369308893111522ull, 1151221066841945398ull, 11684522007220014203ull, 4832245808218773787ull}}, {{14411333672971165210ull, 15274084388834595459ull, 9993966490597629849ull, 6040307260273467234ull}}, {{13402481072786568608ull, 5257547430761080612ull, 3269086076392261504ull, 7550384075341834043ull}}, {{17599922707346381188ull, 3285967144225675382ull, 18184079862241021104ull, 4718990047088646276ull}}, {{12776531347328200677ull, 4107458930282094228ull, 4283355754091724764ull, 5898737558860807846ull}}, {{15970664184160250846ull, 5134323662852617785ull, 14577566729469431763ull, 7373421948576009807ull}}, {{6128272174918149846ull, 1806218560138384328ull, 13610272393409401800ull, 9216777435720012259ull}}, {{3830170109323843654ull, 1128886600086490205ull, 6200577236667182173ull, 5760485897325007662ull}}, {{9399398655082192471ull, 6022794268535500660ull, 16974093582688753524ull, 7200607371656259577ull}}, {{11749248318852740589ull, 7528492835669375825ull, 7382558923078778193ull, 9000759214570324472ull}}, {{425751171641881012ull, 16234523068361829651ull, 4614099326924236370ull, 5625474509106452795ull}}, {{14367247019834514977ull, 11069781798597511255ull, 1155938140227907559ull, 7031843136383065994ull}}, {{13347372756365755817ull, 9225541229819501165ull, 10668294712139660257ull, 8789803920478832492ull}}, {{10647950981942291338ull, 17295178314705657988ull, 15891056231942063468ull, 5493627450299270307ull}}, {{13309938727427864172ull, 3172228819672520869ull, 15252134271500191432ull, 6867034312874087884ull}}, {{2802365354002666503ull, 3965286024590651087ull, 618423765665687674ull, 8583792891092609856ull}}, {{8669007373892748421ull, 7089989783796544833ull, 386514853541054796ull, 5364870556932881160ull}}, {{15447945235793323430ull, 8862487229745681041ull, 483143566926318495ull, 6706088196166101450ull}}, {{5474873489459490575ull, 6466423018754713398ull, 9827301495512673927ull, 8382610245207626812ull}}, {{17256853986194345322ull, 10959043414362777729ull, 15365435471550197012ull, 5239131403254766757ull}}, {{7736009427460767940ull, 13698804267953472162ull, 5371736284155582553ull, 6548914254068458447ull}}, {{446639747471184117ull, 3288447279659676491ull, 2102984336767090288ull, 8186142817585573059ull}}, {{16420050906665347737ull, 2055279549787297806ull, 17455266274975289094ull, 5116339260990983161ull}}, {{11301691596476908863ull, 11792471474088898066ull, 7984024788436947655ull, 6395424076238728952ull}}, {{4903742458741360271ull, 10128903324183734679ull, 9980030985546184569ull, 7994280095298411190ull}}, {{9982368064354432026ull, 17859779623683303934ull, 1625833347538977451ull, 4996425059561506994ull}}, {{3254588043588264224ull, 17713038511176742014ull, 11255663721278497622ull, 6245531324451883742ull}}, {{13291607091340106088ull, 12917926102116151709ull, 4846207614743346220ull, 7806914155564854678ull}}, {{10613097441301260257ull, 17297075850677370626ull, 16863937814496755099ull, 4879321347228034173ull}}, {{4042999764771799513ull, 17009658794919325379ull, 7244864212838780162ull, 6099151684035042717ull}}, {{442063687537361487ull, 12038701456794380916ull, 13667766284475863107ull, 7623939605043803396ull}}, {{9499661841565626738ull, 5218345401282794120ull, 17765725964652190250ull, 4764962253152377122ull}}, {{11874577301957033422ull, 15746303788458268458ull, 12983785418960462004ull, 5956202816440471403ull}}, {{5619849590591515969ull, 1236135661863283957ull, 11618045755273189602ull, 7445253520550589254ull}}, {{5818249003333391433ull, 5384270807091940377ull, 2649592578618355597ull, 4653283450344118284ull}}, {{11884497272594127195ull, 11342024527292313375ull, 3311990723272944496ull, 5816604312930147855ull}}, {{10243935572315271090ull, 14177530659115391719ull, 17975046459373344332ull, 7270755391162684818ull}}, {{8193233446966700958ull, 17721913323894239649ull, 13245436037361904607ull, 9088444238953356023ull}}, {{16649985950422657859ull, 17993724855074981636ull, 15195926550992272235ull, 5680277649345847514ull}}, {{2365738364318770708ull, 17880470050416339142ull, 9771536151885564486ull, 7100347061682309393ull}}, {{12180544992253239193ull, 13127215526165648119ull, 16826106208284343512ull, 8875433827102886741ull}}, {{14530369647799356352ull, 8204509703853530074ull, 12822159389391408647ull, 5547146141939304213ull}}, {{8939590022894419631ull, 5643951111389524689ull, 2192641181457097097ull, 6933932677424130267ull}}, {{15786173547045412443ull, 11666624907664293765ull, 16575859532103535083ull, 8667415846780162833ull}}, {{12172201476117076729ull, 4985797558076489651ull, 3442383179923627571ull, 5417134904237601771ull}}, {{10603565826718958007ull, 1620560929168224160ull, 18138037030186698176ull, 6771418630297002213ull}}, {{13254457283398697509ull, 2025701161460280200ull, 8837488232451209008ull, 8464273287871252767ull}}, {{8284035802124185943ull, 1266063225912675125ull, 12440959172923087486ull, 5290170804919532979ull}}, {{14966730771082620333ull, 10805951069245619714ull, 10939512947726471453ull, 6612713506149416224ull}}, {{9485041426998499608ull, 18119124854984412547ull, 13674391184658089316ull, 8265891882686770280ull}}, {{3622307882660368303ull, 2101080997510482034ull, 8546494490411305823ull, 5166182426679231425ull}}, {{13751256890180236187ull, 16461409302170266254ull, 15294804131441520182ull, 6457728033349039281ull}}, {{7965699075870519426ull, 11353389590858057010ull, 5283447109019736516ull, 8072160041686299102ull}}, {{9590247940846462545ull, 16319240531141061439ull, 17137212498419499034ull, 5045100026053936938ull}}, {{7376123907630690277ull, 11175678627071550991ull, 12198143586169597985ull, 6306375032567421173ull}}, {{4608468866110974942ull, 134540228557275027ull, 1412621427429833770ull, 7882968790709276467ull}}, {{574450032105665387ull, 4695773661275684796ull, 17023789456639503770ull, 4926855494193297791ull}}, {{718062540132081734ull, 15093089113449381803ull, 16668050802371991808ull, 6158569367741622239ull}}, {{14732636230447265879ull, 419617318102175637ull, 16223377484537601857ull, 7698211709677027799ull}}, {{11513740653243235127ull, 11791475869882329533ull, 17057139955477083016ull, 4811382318548142374ull}}, {{557117761271880196ull, 14739344837352911917ull, 12098052907491577962ull, 6014227898185177968ull}}, {{5308083220017238149ull, 9200809009836364088ull, 15122566134364472453ull, 7517784872731472460ull}}, {{3317552012510773843ull, 8056348640361421507ull, 228231797123019475ull, 4698615545457170288ull}}, {{17981998070920631016ull, 5458749782024388979ull, 285289746403774344ull, 5873269431821462860ull}}, {{17865811570223400866ull, 6823437227530486224ull, 356612183004717930ull, 7341586789776828575ull}}, {{3885520389069699467ull, 17752668571267883589ull, 14280823284038061124ull, 9176983487221035718ull}}, {{4734293252382256119ull, 1872045820187651435ull, 4313828534096400299ull, 5735614679513147324ull}}, {{1306180547050432244ull, 16175115330516728006ull, 5392285667620500373ull, 7169518349391434155ull}}, {{10856097720667816113ull, 6383836107863746295ull, 2128671066098237563ull, 8961897936739292694ull}}, {{13702590103058466927ull, 1684054558201147482ull, 15165477471593562189ull, 5601186210462057933ull}}, {{7904865591968307851ull, 6716754216178822257ull, 5121788784209789024ull, 7001482763077572417ull}}, {{14492768008387772717ull, 8395942770223527821ull, 11013921998689624184ull, 8751853453846965521ull}}, {{11363823014456051900ull, 5247464231389704888ull, 18412916295249484875ull, 5469908408654353450ull}}, {{14204778768070064875ull, 1947644270809743206ull, 13792773332207080286ull, 6837385510817941813ull}}, {{8532601423232805286ull, 11657927375366954816ull, 3405908609976686645ull, 8546731888522427267ull}}, {{5332875889520503304ull, 9592047618818040712ull, 18269593945731286817ull, 5341707430326517041ull}}, {{6666094861900629130ull, 16601745541949938794ull, 9001934376881944809ull, 6677134287908146302ull}}, {{17555990614230562220ull, 6917123872155259780ull, 2029045934247655204ull, 8346417859885182878ull}}, {{1749122097039325580ull, 13546574456951813171ull, 15103211764186948214ull, 5216511162428239298ull}}, {{16021460676581320687ull, 7709846034334990655ull, 9655642668378909460ull, 6520638953035299123ull}}, {{15415139827299262954ull, 9637307542918738319ull, 7457867317046248921ull, 8150798691294123904ull}}, {{16551991419703121203ull, 17552532260392681209ull, 4661167073153905575ull, 5094249182058827440ull}}, {{6854931219346737791ull, 17328979307063463608ull, 5826458841442381969ull, 6367811477573534300ull}}, {{8568664024183422239ull, 7826166078547165798ull, 7283073551802977462ull, 7959764346966917875ull}}, {{743728996687250995ull, 279667780664590720ull, 2246077960663166962ull, 4974852716854323672ull}}, {{929661245859063744ull, 9572956762685514208ull, 2807597450828958702ull, 6218565896067904590ull}}, {{1162076557323829680ull, 2742823916502116952ull, 12732868850390974186ull, 7773207370084880737ull}}, {{726297848327393550ull, 6325950966241210999ull, 1040514003853277010ull, 4858254606303050461ull}}, {{14742930365691405650ull, 17130810744656289556ull, 5912328523243984166ull, 6072818257878813076ull}}, {{18428662957114257062ull, 12190141393965586137ull, 7390410654054980208ull, 7591022822348516345ull}}, {{4600385320555328808ull, 7618838371228491336ull, 16148221704852832390ull, 4744389263967822715ull}}, {{5750481650694161010ull, 300175927180838362ull, 15573591112638652584ull, 5930486579959778394ull}}, {{16411474100222477070ull, 375219908976047952ull, 10243616853943539922ull, 7413108224949722993ull}}, {{10257171312639048169ull, 4846198461537417874ull, 17931475579783182211ull, 4633192640593576870ull}}, {{3598092103944034403ull, 1446062058494384439ull, 13190972437874201956ull, 5791490800741971088ull}}, {{18332673185212206716ull, 1807577573117980548ull, 16488715547342752445ull, 7239363500927463860ull}}, {{4469097407805706779ull, 6871157984824863590ull, 2164150360468888940ull, 9049204376159329826ull}}, {{16628243935160730449ull, 13517845777370315551ull, 5964279993720443491ull, 5655752735099581141ull}}, {{16173618900523525157ull, 12285621203285506535ull, 12067036010577942268ull, 7069690918874476426ull}}, {{15605337607227018542ull, 15357026504106883169ull, 5860422976367652027ull, 8837113648593095533ull}}, {{2835806976875804733ull, 7292298555853108029ull, 5968607369443476469ull, 5523196030370684708ull}}, {{8156444739522143820ull, 13727059213243772940ull, 7460759211804345586ull, 6903995037963355885ull}}, {{10195555924402679775ull, 7935451979699940367ull, 13937635033182819887ull, 8629993797454194856ull}}, {{13289751480392756715ull, 11877186514953544585ull, 8711021895739262429ull, 5393746123408871785ull}}, {{2777131295208782182ull, 1011425088409767020ull, 15500463388101465941ull, 6742182654261089731ull}}, {{3471414119010977728ull, 5875967378939596679ull, 14763893216699444522ull, 8427728317826362164ull}}, {{9087162852022942936ull, 8284165630264635828ull, 4061223582377018ull, 5267330198641476353ull}}, {{11358953565028678670ull, 1131835000976018977ull, 4616762547905359177ull, 6584162748301845441ull}}, {{363633901003684625ull, 6026479769647411626ull, 10382639203309086875ull, 8230203435377306801ull}}, {{4838957206554690795ull, 1460706846815938314ull, 18018364548136649057ull, 5143877147110816750ull}}, {{15272068545048139302ull, 6437569576947310796ull, 13299583648316035513ull, 6429846433888520938ull}}, {{643341607600622511ull, 12658647989611526400ull, 7401107523540268583ull, 8037308042360651173ull}}, {{402088504750389069ull, 14829184021148285856ull, 6931535211426361816ull, 5023317526475406983ull}}, {{502610630937986337ull, 89735952725805704ull, 4052732995855564367ull, 6279146908094258729ull}}, {{628263288672482921ull, 13947227996189420842ull, 9677602263246843362ull, 7848933635117823411ull}}, {{5004350573847689730ull, 13328703516045775930ull, 3742658405315583149ull, 4905583521948639632ull}}, {{15478810254164387970ull, 2825821339775056200ull, 4678323006644478937ull, 6131979402435799540ull}}, {{901768743995933346ull, 8143962693146208155ull, 5847903758305598671ull, 7664974253044749425ull}}, {{16704506529493316006ull, 12007505710857461952ull, 15184154895009468929ull, 4790608908152968390ull}}, {{2433889088157093391ull, 1174324083289663729ull, 9756821581907060354ull, 5988261135191210488ull}}, {{7654047378623754642ull, 10691277140966855469ull, 12196026977383825442ull, 7485326418989013110ull}}, {{7089622620853540604ull, 11293734231531672572ull, 3010830842437502997ull, 4678329011868133194ull}}, {{8862028276066925755ull, 282109734132427003ull, 12986910589901654555ull, 5847911264835166492ull}}, {{6465849326656269289ull, 14187695222947697466ull, 16233638237377068193ull, 7309889081043958115ull}}, {{17305683695175112419ull, 3899560973402458120ull, 15680361778293947338ull, 9137361351304947644ull}}, {{10816052309484445262ull, 7048911626803924229ull, 576854074578941278ull, 5710850844565592278ull}}, {{18131751405282944482ull, 18034511570359681094ull, 9944439630078452405ull, 7138563555706990347ull}}, {{13441317219748904794ull, 8708081407667437656ull, 7818863519170677603ull, 8923204444633737934ull}}, {{8400823262343065496ull, 3136707870578454583ull, 275103681054285598ull, 5577002777896086209ull}}, {{5889343059501443966ull, 13144256875077844037ull, 4955565619745244901ull, 6971253472370107761ull}}, {{11973364842804192862ull, 2595263038565141334ull, 10806143043108944031ull, 8714066840462634701ull}}, {{2871667008325232635ull, 8539568426744295190ull, 9059682411156783971ull, 5446291775289146688ull}}, {{12812955797261316601ull, 6062774515002981083ull, 11324603013945979964ull, 6807864719111433360ull}}, {{11404508728149257848ull, 7578468143753726354ull, 14155753767432474955ull, 8509830898889291700ull}}, {{11739503973520674059ull, 2430699580632385019ull, 18070718141500072655ull, 5318644311805807312ull}}, {{10062693948473454670ull, 16873432531072644986ull, 4141653603165539202ull, 6648305389757259141ull}}, {{3354995398737042529ull, 11868418626986030425ull, 9788753022384311907ull, 8310381737196573926ull}}, {{13626087170279121341ull, 5111918632652575063ull, 1506284620562807038ull, 5193988585747858704ull}}, {{12420922944421513772ull, 15613270327670494637ull, 1882855775703508797ull, 6492485732184823380ull}}, {{1691095625244728503ull, 5681529854305954585ull, 2353569719629385997ull, 8115607165231029225ull}}, {{12586149811846425074ull, 5856799168154915567ull, 13000196120836836008ull, 5072254478269393265ull}}, {{11121001246380643439ull, 7320998960193644459ull, 2415187095763881298ull, 6340318097836741582ull}}, {{9289565539548416394ull, 18374620737096831382ull, 12242355906559627430ull, 7925397622295926977ull}}, {{1194292443790372343ull, 6872451942258131710ull, 733943413958685288ull, 4953373513934954361ull}}, {{10716237591592741236ull, 8590564927822664637ull, 5529115285875744514ull, 6191716892418692951ull}}, {{18006983007918314449ull, 1514834122923554988ull, 2299708088917292739ull, 7739646115523366189ull}}, {{2030992343094170723ull, 17087672391323079532ull, 3743160564787001913ull, 4837278822202103868ull}}, {{2538740428867713403ull, 7524532433871685703ull, 4678950705983752392ull, 6046598527752629835ull}}, {{17008483591366805466ull, 9405665542339607128ull, 1237002364052302586ull, 7558248159690787294ull}}, {{10630302244604253417ull, 10490226982389642359ull, 14608184532814852828ull, 4723905099806742058ull}}, {{8676191787327928867ull, 13112783727987052949ull, 9036858629163790227ull, 5904881374758427573ull}}, {{15456925752587298987ull, 11779293641556428282ull, 15907759304882125688ull, 7381101718448034466ull}}, {{14272264613794449771ull, 7362058525972767676ull, 14554035583978716459ull, 4613188574030021541ull}}, {{17840330767243062214ull, 4590887139038571691ull, 4357486424691231862ull, 5766485717537526927ull}}, {{17688727440626439863ull, 14961980960652990422ull, 835172012436651923ull, 7208107146921908659ull}}, {{12887537263928274021ull, 14090790182388850124ull, 14879023070827978616ull, 9010133933652385823ull}}, {{17278082826809947071ull, 8806743863993031327ull, 16216918446908568491ull, 5631333708532741139ull}}, {{16985917515085045935ull, 6396743811563901255ull, 15659462040208322710ull, 7039167135665926424ull}}, {{16620710875428919514ull, 17219301801309652377ull, 1127583476550851771ull, 8798958919582408031ull}}, {{3470415269501992841ull, 8456220616604838784ull, 7622268700485364213ull, 5499349324739005019ull}}, {{4338019086877491051ull, 15181961789183436384ull, 4916149857179317362ull, 6874186655923756274ull}}, {{5422523858596863813ull, 9754080199624519672ull, 15368559358328922511ull, 8592733319904695342ull}}, {{3389077411623039883ull, 13013829152406406651ull, 4993663580528188665ull, 5370458324940434589ull}}, {{18071404819810963566ull, 2432228385225844601ull, 10853765494087623736ull, 6713072906175543236ull}}, {{8754197969481540746ull, 3040285481532305752ull, 13567206867609529670ull, 8391341132719429045ull}}, {{5471373730925962966ull, 15735236481239854807ull, 10785347301469649995ull, 5244588207949643153ull}}, {{2227531145230065804ull, 15057359583122430605ull, 18093370145264450398ull, 6555735259937053941ull}}, {{7396099949964970158ull, 9598327442048262448ull, 8781654626298399286ull, 8194669074921317427ull}}, {{4622562468728106349ull, 1387268632852776126ull, 3182691132222805602ull, 5121668171825823392ull}}, {{15001575122764908744ull, 10957457827920745965ull, 3978363915278507002ull, 6402085214782279240ull}}, {{4916910848173972218ull, 4473450248046156649ull, 4972954894098133753ull, 8002606518477849050ull}}, {{14602284326177202397ull, 14325121451097317665ull, 7719782827238721499ull, 5001629074048655656ull}}, {{4417797352439339284ull, 13294715795444259178ull, 9649728534048401874ull, 6252036342560819570ull}}, {{14745618727403949912ull, 7395022707450548164ull, 2838788630705726535ull, 7815045428201024463ull}}, {{18439383741482244503ull, 11539418219797674458ull, 8691771921832160940ull, 4884403392625640289ull}}, {{13825857639998029821ull, 14424272774747093073ull, 15476400920717589079ull, 6105504240782050361ull}}, {{3447263994715373564ull, 13418654950006478438ull, 5510443095614822637ull, 7631880300977562952ull}}, {{15989598051979272190ull, 10692502352967742975ull, 3444026934759264148ull, 4769925188110976845ull}}, {{15375311546546702333ull, 13365627941209678719ull, 8916719686876468089ull, 5962406485138721056ull}}, {{14607453414755990013ull, 2871976871229934687ull, 11145899608595585112ull, 7453008106423401320ull}}, {{16047187411863575614ull, 1794985544518709179ull, 6966187255372240695ull, 4658130066514625825ull}}, {{15447298246402081613ull, 16078789985930550186ull, 13319420087642688772ull, 5822662583143282281ull}}, {{10085750771147826209ull, 1651743408703636117ull, 2814217054271197254ull, 7278328228929102852ull}}, {{17218874482362170665ull, 11288051297734320954ull, 3517771317838996567ull, 9097910286161378565ull}}, {{15373482569903744570ull, 13972561088725032452ull, 4504450082863066806ull, 5686193928850861603ull}}, {{770109138670129096ull, 8242329324051514758ull, 1018876585151445604ull, 7107742411063577004ull}}, {{10186008460192437178ull, 10302911655064393447ull, 1273595731439307005ull, 8884678013829471255ull}}, {{13283784315261355092ull, 8745162793628939856ull, 7713526359790648734ull, 5552923758643419534ull}}, {{16604730394076693865ull, 1708081455181399012ull, 418535912883535110ull, 6941154698304274418ull}}, {{2309168918886315715ull, 11358473855831524574ull, 9746541927959194695ull, 8676443372880343022ull}}, {{15278288629586111034ull, 14016575187535784714ull, 1479902686547108780ull, 5422777108050214389ull}}, {{9874488750127862985ull, 17520718984419730893ull, 6461564376611273879ull, 6778471385062767986ull}}, {{16954796956087216635ull, 17289212712097275712ull, 17300327507618868157ull, 8473089231328459982ull}}, {{10596748097554510397ull, 13111600954274491272ull, 6201018673834404694ull, 5295680769580287489ull}}, {{13245935121943137996ull, 7166129155988338282ull, 12362959360720393772ull, 6619600961975359361ull}}, {{7334046865574146687ull, 8957661444985422853ull, 1618641145618328503ull, 8274501202469199202ull}}, {{6889622300197535632ull, 12516067430756971139ull, 5623336734438843218ull, 5171563251543249501ull}}, {{4000341856819531635ull, 6421712251591438116ull, 11640856936475941927ull, 6464454064429061876ull}}, {{5000427321024414544ull, 3415454296061909741ull, 14551071170594927409ull, 8080567580536327345ull}}, {{5431110084853953042ull, 13663873981107163348ull, 2176890453980747774ull, 5050354737835204591ull}}, {{6788887606067441303ull, 7856470439529178377ull, 16556171122758098430ull, 6312943422294005738ull}}, {{13097795526011689532ull, 597216012556697163ull, 11471841866592847230ull, 7891179277867507173ull}}, {{5880279194543612006ull, 14208318063130099439ull, 9475744175834223470ull, 4931987048667191983ull}}, {{2738662974752127103ull, 8537025542057848491ull, 7232994201365391434ull, 6164983810833989979ull}}, {{17258386773722322591ull, 1447909890717534805ull, 4429556733279351389ull, 7706229763542487474ull}}, {{13092334742790145571ull, 3210786690912153205ull, 7380158976726982522ull, 4816393602214054671ull}}, {{2530360373205518252ull, 13236855400494967315ull, 4613512702481340248ull, 6020492002767568339ull}}, {{16998008521789061527ull, 16546069250618709143ull, 1155204859674287406ull, 7525615003459460424ull}}, {{17541284353759245311ull, 5729607263209305310ull, 722003037296429629ull, 4703509377162162765ull}}, {{12703233405344280830ull, 11773695097439019542ull, 5514189815047924940ull, 5879386721452703456ull}}, {{6655669719825575229ull, 14717118871798774428ull, 6892737268809906175ull, 7349233401815879320ull}}, {{8319587149781969037ull, 13784712571321080131ull, 8615921586012382719ull, 9186541752269849150ull}}, {{2893898959400036696ull, 15532974384716756938ull, 773264972830351295ull, 5741588595168655719ull}}, {{12840745736104821678ull, 14804531962468558268ull, 14801639271320102831ull, 7176985743960819648ull}}, {{16050932170131027097ull, 13893978934658309931ull, 55305015440576923ull, 8971232179951024561ull}}, {{7725989597118197984ull, 6377893824947749755ull, 11563780680718830337ull, 5607020112469390350ull}}, {{5045800977970359576ull, 12584053299612075098ull, 5231353814043762113ull, 7008775140586737938ull}}, {{15530623259317725278ull, 1895008569232930160ull, 15762564304409478450ull, 8760968925733422422ull}}, {{9706639537073578299ull, 5796066374197969254ull, 5239916671828536127ull, 5475605578583389014ull}}, {{2909927384487197065ull, 2633396949320073664ull, 15773267876640445967ull, 6844506973229236267ull}}, {{3637409230608996332ull, 17126804241932255792ull, 15104898827373169554ull, 8555633716536545334ull}}, {{2273380769130622707ull, 15315938669635047774ull, 4828875748680843067ull, 5347271072835340834ull}}, {{12065097998268054192ull, 14533237318616421813ull, 15259466722705829642ull, 6684088841044176042ull}}, {{1246314442552904028ull, 8943174611415751459ull, 9850961366527511245ull, 8355111051305220053ull}}, {{16919847591091422682ull, 7895327141348538613ull, 8462693863293388480ull, 5221944407065762533ull}}, {{7314751433582114640ull, 9869158926685673267ull, 15190053347544123504ull, 6527430508832203166ull}}, {{4531753273550255396ull, 12336448658357091584ull, 9764194647575378572ull, 8159288136040253958ull}}, {{2832345795968909623ull, 16933652448327958048ull, 1490935636307223703ull, 5099555085025158724ull}}, {{3540432244961137028ull, 16555379541982559656ull, 1863669545384029629ull, 6374443856281448405ull}}, {{4425540306201421285ull, 6859166372196035858ull, 6941272950157424941ull, 7968054820351810506ull}}, {{7377648709803276207ull, 6592821991836216363ull, 8949981612275778492ull, 4980034262719881566ull}}, {{4610374868826707355ull, 8241027489795270454ull, 1964104978489947307ull, 6225042828399851958ull}}, {{14986340622888160002ull, 5689598343816700163ull, 11678503259967209942ull, 7781303535499814947ull}}, {{7060619880091406049ull, 17391057020167601314ull, 4993221528265812261ull, 4863314709687384342ull}}, {{18049146886969033370ull, 7903763219927337930ull, 15464898947187041135ull, 6079143387109230427ull}}, {{13338061571856515904ull, 5268018006481784509ull, 14719437665556413515ull, 7598929233886538034ull}}, {{10642131491624016392ull, 986668244837421366ull, 13811334559400146351ull, 4749330771179086271ull}}, {{4079292327675244682ull, 15068393361328940420ull, 12652482180822795034ull, 5936663463973857839ull}}, {{5099115409594055852ull, 9612119664806399717ull, 11203916707601105889ull, 7420829329967322299ull}}, {{5492790140209978860ull, 17536789836572469583ull, 4696604933036997228ull, 4638018331229576437ull}}, {{2254301656835085671ull, 3474243222006035363ull, 10482442184723634440ull, 5797522914036970546ull}}, {{16652935126326020800ull, 4342804027507544203ull, 3879680694049767242ull, 7246903642546213183ull}}, {{16204482889480138096ull, 14651877071239206062ull, 237914849134821148ull, 9058629553182766479ull}}, {{5516115787497698406ull, 18380795206379279597ull, 7066225808350345073ull, 5661643470739229049ull}}, {{11506830752799510912ull, 9140935952691935784ull, 13444468278865319246ull, 7077054338424036311ull}}, {{14383538440999388640ull, 2202797904010143922ull, 12193899330154261154ull, 8846317923030045389ull}}, {{13601397544052005804ull, 5988434708433727855ull, 9927030090560107173ull, 5528948701893778368ull}}, {{12390060911637619351ull, 12097229403969547723ull, 12408787613200133966ull, 6911185877367222960ull}}, {{10875890121119636284ull, 5898164718107158846ull, 15510984516500167458ull, 8638982346709028700ull}}, {{2185745307272384774ull, 8298038967244362183ull, 470993285957828853ull, 5399363966693142938ull}}, {{16567239689372644679ull, 14984234727482840632ull, 9812113644302061874ull, 6749204958366428672ull}}, {{2262305538006254233ull, 9506921372498774983ull, 12265142055377577343ull, 8436506197958035840ull}}, {{8331469988894990752ull, 12859354885452816220ull, 7665713784610985839ull, 5272816373723772400ull}}, {{10414337486118738440ull, 11462507588388632371ull, 9582142230763732299ull, 6591020467154715500ull}}, {{8406235839221035145ull, 9716448467058402560ull, 11977677788454665374ull, 8238775583943394375ull}}, {{5253897399513146966ull, 1461094273484113696ull, 14403577645425247715ull, 5149234739964621484ull}}, {{6567371749391433707ull, 15661425897137305832ull, 18004472056781559643ull, 6436543424955776855ull}}, {{8209214686739292134ull, 14965096352994244386ull, 17893904052549561650ull, 8045679281194721069ull}}, {{9742445197639445488ull, 13964871239048790645ull, 13489533042057169983ull, 5028549550746700668ull}}, {{16789742515476694764ull, 12844403030383600402ull, 16861916302571462479ull, 6285686938433375835ull}}, {{11763806107491092647ull, 11443817769552112599ull, 16465709359786940195ull, 7857108673041719794ull}}, {{14269907844823014760ull, 4846543096756376422ull, 14902754368294225526ull, 4910692920651074871ull}}, {{8614012769173992642ull, 15281550907800246336ull, 14016756941940394003ull, 6138366150813843589ull}}, {{10767515961467490803ull, 14490252616322920016ull, 3685888122143328792ull, 7672957688517304487ull}}, {{6729697475917181752ull, 9056407885201825010ull, 9221209103980662351ull, 4795598555323315304ull}}, {{17635493881751252998ull, 6708823838074893358ull, 11526511379975827939ull, 5994498194154144130ull}}, {{12820995315334290439ull, 3774343779166228794ull, 5184767188115009116ull, 7493122742692680163ull}}, {{12624808090511319429ull, 11582336898833668804ull, 934636483358186745ull, 4683201714182925102ull}}, {{15781010113139149286ull, 642863068259922293ull, 10391667641052509240ull, 5854002142728656377ull}}, {{5891204586141772895ull, 803578835324902867ull, 17601270569743024454ull, 7317502678410820471ull}}, {{2752319714249828215ull, 10227845581010904392ull, 17389902193751392663ull, 9146878348013525589ull}}, {{1720199821406142634ull, 13309932515772897101ull, 13174531880308314366ull, 5716798967508453493ull}}, {{6761935795185066197ull, 7414043607861345568ull, 2633106795103229246ull, 7145998709385566867ull}}, {{8452419743981332746ull, 44182472971906152ull, 17126441549161200270ull, 8932498386731958583ull}}, {{5282762339988332966ull, 13862672100889605057ull, 17621554995866832024ull, 5582811491707474114ull}}, {{11215138943412804112ull, 17328340126112006321ull, 12803571707978764222ull, 6978514364634342643ull}}, {{183865623983841428ull, 12437053120785232094ull, 11392778616546067374ull, 8723142955792928304ull}}, {{13949974070272064604ull, 3161472182063382154ull, 7120486635341292109ull, 5451964347370580190ull}}, {{8214095550985304947ull, 8563526246006615597ull, 18123980331031390944ull, 6814955434213225237ull}}, {{14879305457159019088ull, 10704407807508269496ull, 8819917358507074968ull, 8518694292766531547ull}}, {{9299565910724386930ull, 6690254879692668435ull, 3206605339853227903ull, 5324183932979082217ull}}, {{7012771369978095759ull, 3751132581188447640ull, 8619942693243922783ull, 6655229916223852771ull}}, {{8765964212472619698ull, 77229708058171646ull, 6163242348127515575ull, 8319037395279815964ull}}, {{867041614367999408ull, 6965797595177439135ull, 13075398504434473042ull, 5199398372049884977ull}}, {{14918860073242162971ull, 17930619030826574726ull, 2509190075260927590ull, 6499247965062356222ull}}, {{9425203054697927906ull, 13189901751678442600ull, 12359859630930935296ull, 8124059956327945277ull}}, {{5890751909186204942ull, 8243688594799026625ull, 10030755278545528512ull, 5077537472704965798ull}}, {{11975125904910144081ull, 10304610743498783281ull, 3315072061327134832ull, 6346921840881207248ull}}, {{1133849325855516389ull, 12880763429373479102ull, 4143840076658918540ull, 7933652301101509060ull}}, {{14543713883941861455ull, 17273849180213200246ull, 11813272084766599895ull, 4958532688188443162ull}}, {{8956270318072551011ull, 16980625456839112404ull, 5543218069103474061ull, 6198165860235553953ull}}, {{11195337897590688764ull, 7390723765766726793ull, 11540708604806730481ull, 7747707325294442441ull}}, {{79557158353098621ull, 16148417399672674006ull, 295413850363124694ull, 4842317078309026526ull}}, {{9322818484796149085ull, 10962149712736066699ull, 9592639349808681676ull, 6052896347886283157ull}}, {{7041837087567798452ull, 13702687140920083374ull, 16602485205688239999ull, 7566120434857853946ull}}, {{18236206235012037744ull, 15481708490716133964ull, 14988239271982537903ull, 4728825271786158716ull}}, {{4348513720055495564ull, 14740449594967779552ull, 288555016268620763ull, 5911031589732698396ull}}, {{5435642150069369455ull, 13813875975282336536ull, 360693770335775954ull, 7388789487165872995ull}}, {{3397276343793355910ull, 13245358502978848239ull, 16366334670955717635ull, 4617993429478670621ull}}, {{18081653485023858599ull, 11945012110296172394ull, 6622860283412483332ull, 5772491786848338277ull}}, {{13378694819425047441ull, 14931265137870215493ull, 12890261372692992069ull, 7215614733560422846ull}}, {{2888310468999145589ull, 4829023367055605655ull, 6889454679011464279ull, 9019518416950528558ull}}, {{8722723070765547849ull, 9935668632050835390ull, 18140967229664328886ull, 5637199010594080348ull}}, {{1680031801602159003ull, 3196213753208768430ull, 4229464963370859492ull, 7046498763242600436ull}}, {{11323411788857474562ull, 3995267191510960537ull, 5286831204213574365ull, 8808123454053250545ull}}, {{159603340394839746ull, 4802885003908044288ull, 14833484548701953738ull, 5505077158783281590ull}}, {{199504175493549682ull, 15226978291739831168ull, 9318483649022666364ull, 6881346448479101988ull}}, {{249380219366937102ull, 586978790965237344ull, 11648104561278332956ull, 8601683060598877485ull}}, {{155862637104335689ull, 9590233781208049148ull, 9585908360012652049ull, 5376051912874298428ull}}, {{194828296380419611ull, 16599478244937449339ull, 11982385450015815061ull, 6720064891092873035ull}}, {{14078593425757688226ull, 6914289750889647961ull, 10366295794092380923ull, 8400081113866091294ull}}, {{1881591863457473285ull, 2015588085092336024ull, 1867248852880350173ull, 5250050696166307059ull}}, {{2351989829321841607ull, 7131171124792807934ull, 16169119121382601428ull, 6562563370207883823ull}}, {{12163359323507077816ull, 8913963905991009917ull, 15599712883300863881ull, 8203204212759854779ull}}, {{9907942586405617587ull, 17100442487312850958ull, 7443977542849345973ull, 5127002632974909237ull}}, {{3161556196152246176ull, 7540495053858899986ull, 13916657946989070371ull, 6408753291218636546ull}}, {{13175317282045083528ull, 4813932798896237078ull, 8172450396881562156ull, 8010941614023295683ull}}, {{3622887282850789301ull, 12232080036164923982ull, 2801938488837282395ull, 5006838508764559802ull}}, {{13751981140418262434ull, 10678414026778767073ull, 12725795147901378802ull, 6258548135955699752ull}}, {{3354918370240664331ull, 4124645496618683034ull, 15907243934876723503ull, 7823185169944624690ull}}, {{6708509999827803111ull, 9495432463027758752ull, 14553713477725340093ull, 4889490731215390431ull}}, {{8385637499784753888ull, 16480976597212086344ull, 13580455828729287212ull, 6111863414019238039ull}}, {{10482046874730942360ull, 2154476672805556314ull, 12363883767484221112ull, 7639829267524047549ull}}, {{11162965315134226879ull, 1346547920503472696ull, 10033270363891332147ull, 4774893292202529718ull}}, {{13953706643917783599ull, 15518242955911504582ull, 3318215918009389375ull, 5968616615253162148ull}}, {{8218761268042453691ull, 14786117676461992824ull, 4147769897511736719ull, 7460770769066452685ull}}, {{5136725792526533557ull, 16158852575429827371ull, 4898199195158529401ull, 4662981730666532928ull}}, {{1809221222230779042ull, 6363507664005120502ull, 6122748993948161752ull, 5828727163333166160ull}}, {{11484898564643249610ull, 7954384580006400627ull, 7653436242435202190ull, 7285908954166457700ull}}, {{9744437187376674109ull, 719608688153224976ull, 9566795303044002738ull, 9107386192708072125ull}}, {{6090273242110421318ull, 5061441448523153514ull, 8285090073616195663ull, 5692116370442545078ull}}, {{16836213589492802456ull, 1715115792226553988ull, 1132990555165468771ull, 7115145463053181348ull}}, {{2598522913156451454ull, 15978952795565356198ull, 1416238193956835963ull, 8893931828816476685ull}}, {{15459134876004945871ull, 7681002488014653671ull, 3190991880436716429ull, 5558707393010297928ull}}, {{14712232576578794434ull, 14212939128445704993ull, 3988739850545895536ull, 6948384241262872410ull}}, {{4555232665441329331ull, 17766173910557131242ull, 14209296850037145228ull, 8685480301578590512ull}}, {{7458706434328218736ull, 1880486657243431218ull, 8880810531273215768ull, 5428425188486619070ull}}, {{100011006055497612ull, 2350608321554289023ull, 1877641127236743902ull, 6785531485608273838ull}}, {{13960071812851535726ull, 12161632438797637086ull, 11570423445900705685ull, 8481914357010342297ull}}, {{4113358864604821925ull, 9906863283462217131ull, 313985626046859197ull, 5301196473131463936ull}}, {{530012562328639502ull, 16995265122755159318ull, 392482032558573996ull, 6626495591414329920ull}}, {{9885887739765575186ull, 2797337329734397531ull, 490602540698217496ull, 8283119489267912400ull}}, {{3872836828139790539ull, 1748335831083998457ull, 306626587936385935ull, 5176949680792445250ull}}, {{9452732053602126078ull, 16020477844137161783ull, 9606655271775258226ull, 6471187100990556562ull}}, {{7204229048575269693ull, 10802225268316676421ull, 2784947052864296975ull, 8088983876238195703ull}}, {{6808486164573237511ull, 13668919820339004619ull, 8658120935681267465ull, 5055614922648872314ull}}, {{3898921687289158984ull, 3251091720141592062ull, 1599279132746808524ull, 6319518653311090393ull}}, {{14097024145966224538ull, 4063864650176990077ull, 6610784934360898559ull, 7899398316638862991ull}}, {{11116483100442584288ull, 9457444434001700654ull, 11049269611616643455ull, 4937123947899289369ull}}, {{4672231838698454552ull, 7210119524074737914ull, 18423273032948192223ull, 6171404934874111711ull}}, {{15063661835227843998ull, 4400963386666034488ull, 18417405272757852375ull, 7714256168592639639ull}}, {{9414788647017402499ull, 9668131144307353411ull, 18428407323114739590ull, 4821410105370399774ull}}, {{7156799790344365220ull, 2861791893529415956ull, 13812137117038648680ull, 6026762631712999718ull}}, {{8945999737930456525ull, 3577239866911769945ull, 8041799359443535042ull, 7533453289641249648ull}}, {{17120464882275005088ull, 6847460935247244119ull, 5026124599652209401ull, 4708408306025781030ull}}, {{16788895084416368456ull, 13171012187486443053ull, 15506027786420037559ull, 5885510382532226287ull}}, {{7151060800238296858ull, 11852079215930665913ull, 14770848714597659045ull, 7356887978165282859ull}}, {{13550512018725258976ull, 980040964631168679ull, 13851874874819685903ull, 9196109972706603574ull}}, {{15386599039344368716ull, 7530054630535562280ull, 4045735778334915785ull, 5747568732941627234ull}}, {{786504725470909279ull, 14024254306596840755ull, 14280541759773420539ull, 7184460916177034042ull}}, {{14818188962120800311ull, 12918631864818663039ull, 8627305162861999866ull, 8980576145221292553ull}}, {{16178897128966582051ull, 12685830933939052303ull, 16921280772857219676ull, 5612860090763307845ull}}, {{15611935392780839659ull, 15857288667423815379ull, 7316542910789360883ull, 7016075113454134807ull}}, {{14903233222548661670ull, 15209924815852381320ull, 4533992620059313200ull, 8770093891817668509ull}}, {{9314520764092913544ull, 9506203009907738325ull, 5139588396750764702ull, 5481308682386042818ull}}, {{16254836973543529834ull, 2659381725529897098ull, 15647857532793231686ull, 6851635852982553522ull}}, {{11095174180074636484ull, 12547599193767147181ull, 10336449879136763799ull, 8564544816228191903ull}}, {{9240326871760341755ull, 14759778523745548844ull, 13377810202101559230ull, 5352840510142619939ull}}, {{11550408589700427193ull, 9226351117827160247ull, 12110576734199561134ull, 6691050637678274924ull}}, {{9826324718698146087ull, 2309566860429174501ull, 15138220917749451418ull, 8363813297097843655ull}}, {{8447295958400035257ull, 6055165306195621967ull, 16378917101234488992ull, 5227383310686152284ull}}, {{5947433929572656167ull, 7568956632744527459ull, 2026902302833559624ull, 6534229138357690356ull}}, {{2822606393538432304ull, 9461195790930659324ull, 2533627878541949530ull, 8167786422947112945ull}}, {{10987501032816295998ull, 10524933387759049981ull, 13112732470157188216ull, 5104866514341945590ull}}, {{18346062309447757902ull, 13156166734698812476ull, 7167543550841709462ull, 6381083142927431988ull}}, {{4485833813100145761ull, 7221836381518739788ull, 8959429438552136828ull, 7976353928659289985ull}}, {{12027018170042366909ull, 13737019775303988175ull, 17128858445163555277ull, 4985221205412056240ull}}, {{10422086694125570732ull, 3336216663847821507ull, 2964328982744892481ull, 6231526506765070301ull}}, {{8415922349229575511ull, 8781956848237164788ull, 8317097246858503505ull, 7789408133456337876ull}}, {{14483323505123260503ull, 17017938076216697752ull, 14421557816141340498ull, 4868380083410211172ull}}, {{18104154381404075628ull, 12049050558416096382ull, 18026947270176675623ull, 6085475104262763965ull}}, {{13406820939900318727ull, 10449627179592732574ull, 8698626032438680817ull, 7606843880328454957ull}}, {{3767577069010311301ull, 18060232033313927619ull, 7742484279487869462ull, 4754277425205284348ull}}, {{97785317835501222ull, 13351918004787633716ull, 9678105349359836828ull, 5942846781506605435ull}}, {{122231647294376527ull, 16689897505984542145ull, 7485945668272408131ull, 7428558476883256794ull}}, {{11605609825627455089ull, 8125342932026644888ull, 9290402061097642986ull, 4642849048052035496ull}}, {{14507012282034318862ull, 933306628178530302ull, 11613002576372053733ull, 5803561310065044370ull}}, {{8910393315688122769ull, 5778319303650550782ull, 5292881183610291358ull, 7254451637581305463ull}}, {{1914619607755377653ull, 16446271166417964286ull, 2004415461085476293ull, 9068064546976631829ull}}, {{15031695310129274745ull, 12584762488224921630ull, 3558602672392116635ull, 5667540341860394893ull}}, {{9566247100806817624ull, 11119267091853764134ull, 9059939358917533698ull, 7084425427325493616ull}}, {{2734436839153746221ull, 4675711827962429360ull, 11324924198646917123ull, 8855531784156867020ull}}, {{1709023024471091389ull, 616476883262824398ull, 16301449661009099010ull, 5534707365098041887ull}}, {{11359650817443640044ull, 9993968140933306305ull, 15765126057833985858ull, 6918384206372552359ull}}, {{364505466522386342ull, 3269088139311857074ull, 15094721553865094419ull, 8647980257965690449ull}}, {{4839501935003879368ull, 18184081151565768335ull, 2516671943524602155ull, 5404987661228556531ull}}, {{1437691400327461306ull, 18118415421029822515ull, 16980897984687916406ull, 6756234576535695663ull}}, {{15632172305691490344ull, 13424647239432502335ull, 16614436462432507604ull, 8445293220669619579ull}}, {{16687636718698263321ull, 17613776561500089767ull, 8078179779806623300ull, 5278308262918512237ull}}, {{16247859879945441248ull, 3570476628165560593ull, 14709410743185667030ull, 6597885328648140296ull}}, {{6474766794649637848ull, 13686467822061726550ull, 18386763428982083787ull, 8247356660810175370ull}}, {{17881787301938187367ull, 6248199379574885141ull, 16103413161541190271ull, 5154597913006359606ull}}, {{8517176072140570496ull, 3198563206041218523ull, 10905894415071712031ull, 6443247391257949508ull}}, {{6034784071748325216ull, 17833262062833686866ull, 13632368018839640038ull, 8054059239072436885ull}}, {{8383426063270091164ull, 6534102770843666387ull, 10826073020988468976ull, 5033787024420273053ull}}, {{5867596560660226051ull, 8167628463554582984ull, 18144277294662974124ull, 6292233780525341316ull}}, {{7334495700825282564ull, 10209535579443228730ull, 4233602544619166039ull, 7865292225656676646ull}}, {{9195745831443189507ull, 13298488764793099812ull, 16481059645669142486ull, 4915807641035422903ull}}, {{11494682289303986883ull, 7399738919136598957ull, 15989638538659040204ull, 6144759551294278629ull}}, {{533294806347819892ull, 9249673648920748697ull, 6151990118041636543ull, 7680949439117848287ull}}, {{11862524300035857193ull, 12698575058216549791ull, 10762522851417104695ull, 4800593399448655179ull}}, {{10216469356617433587ull, 11261532804343299335ull, 8841467545843992965ull, 6000741749310818974ull}}, {{8158900677344404079ull, 241857950146960457ull, 1828462395450215399ull, 7500927186638523718ull}}, {{16628527969408722310ull, 7068690246482932141ull, 14977847052438548336ull, 4688079491649077323ull}}, {{6950601906478739175ull, 8835862808103665177ull, 14110622797120797516ull, 5860099364561346654ull}}, {{13299938401525811873ull, 11044828510129581471ull, 8414906459546221087ull, 7325124205701683318ull}}, {{12013236983479876937ull, 9194349619234588935ull, 1295261037578000551ull, 9156405257127104148ull}}, {{14425802142316004942ull, 12663997539662699940ull, 10032910185341026152ull, 5722753285704440092ull}}, {{18032252677895006177ull, 15829996924578374925ull, 12541137731676282690ull, 7153441607130550115ull}}, {{8705257792086594009ull, 10564124118868192849ull, 11064736146167965459ull, 8941802008913187644ull}}, {{16970001166122591016ull, 4296734565078926578ull, 16138832128209754220ull, 5588626255570742277ull}}, {{11989129420798462962ull, 5370918206348658223ull, 6338482104980029063ull, 6985782819463427847ull}}, {{10374725757570690798ull, 2101961739508434875ull, 3311416612797648425ull, 8732228524329284809ull}}, {{4178360589267987797ull, 12842941133261241557ull, 13598850429067000025ull, 5457642827705803005ull}}, {{9834636755012372650ull, 2218618361294388234ull, 3163504981051586320ull, 6822053534632253757ull}}, {{3069923906910690005ull, 2773272951617985293ull, 8566067244741870804ull, 8527566918290317196ull}}, {{4224545451032875205ull, 10956667631616016616ull, 14577164064818445060ull, 5329729323931448247ull}}, {{5280681813791094006ull, 13695834539520020770ull, 13609769062595668421ull, 6662161654914310309ull}}, {{15824224304093643316ull, 3284735119117862250ull, 3177153272962421815ull, 8327702068642887887ull}}, {{14501826208485914976ull, 8970488477089745762ull, 8903249823242595490ull, 5204813792901804929ull}}, {{8903910723752617912ull, 1989738559507406395ull, 15740748297480632267ull, 6506017241127256161ull}}, {{6518202386263384486ull, 16322231254666421706ull, 5840877316568626621ull, 8132521551409070202ull}}, {{8685562509842003208ull, 12507237543380207518ull, 8262234341282779542ull, 5082825969630668876ull}}, {{1633581100447728202ull, 6410674892370483590ull, 10327792926603474428ull, 6353532462038336095ull}}, {{11265348412414436061ull, 8013343615463104487ull, 8298055139826955131ull, 7941915577547920119ull}}, {{13958371785400104394ull, 2702496750450746352ull, 12103813490032928813ull, 4963697235967450074ull}}, {{17447964731750130492ull, 7989806956490820844ull, 5906394825686385208ull, 6204621544959312593ull}}, {{3363211840978111499ull, 9987258695613526056ull, 11994679550535369414ull, 7755776931199140741ull}}, {{2102007400611319687ull, 1630350666331065881ull, 9802517728298299836ull, 4847360581999462963ull}}, {{7239195269191537513ull, 2037938332913832351ull, 7641461141945486891ull, 6059200727499328704ull}}, {{4437308068062033987ull, 16382480971424454151ull, 9551826427431858613ull, 7574000909374160880ull}}, {{9690846570179853098ull, 12544893616353977796ull, 5969891517144911633ull, 4733750568358850550ull}}, {{12113558212724816373ull, 1846058965160308533ull, 16685736433285915350ull, 5917188210448563187ull}}, {{1306889710623856754ull, 11530945743305161475ull, 16245484523180006283ull, 7396485263060703984ull}}, {{16957707133635768135ull, 4900998080352031969ull, 10153427826987503927ull, 4622803289412939990ull}}, {{7362075861762546457ull, 1514561582012652058ull, 3468412746879604101ull, 5778504111766174988ull}}, {{18425966864057958879ull, 6504887995943202976ull, 4335515933599505126ull, 7223130139707718735ull}}, {{4585714506362896982ull, 17354482031783779529ull, 807708898571993503ull, 9028912674634648419ull}}, {{14395286612545280374ull, 17764080297505944061ull, 16645719126103353603ull, 5643070421646655261ull}}, {{4159050210399436756ull, 17593414353455042173ull, 6972090852347028292ull, 7053838027058319077ull}}, {{9810498781426683848ull, 3545023868109251100ull, 13326799583861173270ull, 8817297533822898846ull}}, {{15354933775246453213ull, 16050697972850445649ull, 3717563721485845389ull, 5510810958639311779ull}}, {{5358609163775902805ull, 6228314410780893350ull, 35268633429918833ull, 6888513698299139724ull}}, {{15921633491574654314ull, 12397079031903504591ull, 44085791787398541ull, 8610642122873924655ull}}, {{16868549959875240802ull, 10054017404153384321ull, 6945082647508205944ull, 5381651326796202909ull}}, {{7250629394561887291ull, 12567521755191730402ull, 13293039327812645334ull, 6727064158495253636ull}}, {{18286658780057134921ull, 6486030157134887194ull, 16616299159765806668ull, 8408830198119067045ull}}, {{16040847755963097230ull, 13277140885064080304ull, 12691029984067323119ull, 5255518873824416903ull}}, {{1604315621244319921ull, 11984740087902712477ull, 11252101461656765995ull, 6569398592280521129ull}}, {{6617080544982787806ull, 10369239091451002692ull, 230068771788793782ull, 8211748240350651412ull}}, {{13359047377469018187ull, 1869088413729488778ull, 9367165019222771922ull, 5132342650219157132ull}}, {{7475437184981496925ull, 11559732554016636781ull, 11708956274028464902ull, 6415428312773946415ull}}, {{13955982499654259060ull, 5226293655666020168ull, 10024509324108193224ull, 8019285390967433019ull}}, {{8722489062283911913ull, 3266433534791262605ull, 3959475318353926813ull, 5012053369354645637ull}}, {{15514797346282277795ull, 8694727936916466160ull, 9561030166369796420ull, 6265066711693307046ull}}, {{946752609143295628ull, 10868409921145582701ull, 2727915671107469717ull, 7831333389616633808ull}}, {{2897563389928253720ull, 9098599209929683140ull, 1704947294442168573ull, 4894583368510396130ull}}, {{3621954237410317149ull, 15984935030839491829ull, 11354556154907486524ull, 6118229210637995162ull}}, {{9139128815190284340ull, 1534424714839813170ull, 4969823156779582348ull, 7647786513297493953ull}}, {{10323641527921315617ull, 10182387483629659039ull, 14635354519055708727ull, 4779866570810933720ull}}, {{8292865891474256617ull, 8116298336109685895ull, 18294193148819635909ull, 5974833213513667150ull}}, {{5754396345915432867ull, 14757058938564495273ull, 13644369399169769078ull, 7468541516892083938ull}}, {{15125712762265615302ull, 4611475818175421641ull, 13139416892908493578ull, 4667838448057552461ull}}, {{5072082897549855416ull, 14987716809574052860ull, 2589213060853453260ull, 5834798060071940577ull}}, {{6340103621937319269ull, 287901938258014459ull, 7848202344494204480ull, 7293497575089925721ull}}, {{3313443508994261183ull, 359877422822518074ull, 14421938949045143504ull, 9116871968862407151ull}}, {{6682588211548801143ull, 224923389264073796ull, 15931240870794296546ull, 5698044980539004469ull}}, {{8353235264436001429ull, 9504526273434868053ull, 6078993033210706970ull, 7122556225673755587ull}}, {{15053230098972389690ull, 2657285804938809258ull, 2987055273085995809ull, 8903195282092194484ull}}, {{14019954830285131461ull, 13190018674155225546ull, 11090281582533523188ull, 5564497051307621552ull}}, {{8301571501001638518ull, 16487523342694031933ull, 13862851978166903985ull, 6955621314134526940ull}}, {{14988650394679436051ull, 6774346123085376204ull, 17328564972708629982ull, 8694526642668158675ull}}, {{144534459819871724ull, 18069024382210523840ull, 8524510098729199786ull, 5434079151667599172ull}}, {{180668074774839655ull, 13362908440908378992ull, 10655637623411499733ull, 6792598939584498965ull}}, {{225835093468549568ull, 2868577495853310028ull, 17931233047691762571ull, 8490748674480623706ull}}, {{9364518970272619288ull, 17933761999404176431ull, 15818706673234739510ull, 5306717921550389816ull}}, {{7093962694413386206ull, 13193830462400444731ull, 1326639267833872772ull, 6633397401937987271ull}}, {{4255767349589344854ull, 16492288078000555914ull, 15493357140074504677ull, 8291746752422484088ull}}, {{7271540611920728438ull, 12613523057964041398ull, 9683348212546565423ull, 5182341720264052555ull}}, {{18312797801755686355ull, 11155217804027663843ull, 7492499247255818875ull, 6477927150330065694ull}}, {{18279311233767220040ull, 9332336236607191900ull, 142252022214997786ull, 8097408937912582118ull}}, {{2201197484249736717ull, 10444396166306882842ull, 13923965569166537328ull, 5060880586195363823ull}}, {{11974868892166946704ull, 13055495207883603552ull, 12793270943030783756ull, 6326100732744204779ull}}, {{14968586115208683380ull, 16319369009854504440ull, 11379902660361091791ull, 7907625915930255974ull}}, {{9355366322005427113ull, 17117134658800147131ull, 2500753144298294465ull, 4942266197456409984ull}}, {{7082521884079395987ull, 7561360268218020202ull, 3125941430372868082ull, 6177832746820512480ull}}, {{18076524391954020792ull, 228328298417749444ull, 3907426787966085103ull, 7722290933525640600ull}}, {{2074455708116487187ull, 7060234214152175259ull, 2442141742478803189ull, 4826431833453525375ull}}, {{16428127690427772695ull, 13436978786117606977ull, 16887735233380667698ull, 6033039791816906718ull}}, {{6700101557752552157ull, 7572851445792232914ull, 11886297004871058815ull, 7541299739771133398ull}}, {{8799249492022733002ull, 11650561181261227427ull, 2817249609617023855ull, 4713312337356958374ull}}, {{6387375846601028349ull, 9951515458149146380ull, 12744934048876055627ull, 5891640421696197967ull}}, {{7984219808251285436ull, 7827708304259045071ull, 11319481542667681630ull, 7364550527120247459ull}}, {{5368588741886718891ull, 561263343469030531ull, 9537665909907214134ull, 9205688158900309324ull}}, {{1049524954465505355ull, 14185847644950307794ull, 15184413230546784641ull, 5753555099312693327ull}}, {{10535278229936657502ull, 3897251500905721030ull, 14368830519756092898ull, 7191943874140866659ull}}, {{3945725750566046069ull, 14094936412986927096ull, 13349352131267728218ull, 8989929842676083324ull}}, {{2466078594103778793ull, 13421021276544217339ull, 17566717118897105944ull, 5618706151672552077ull}}, {{16917656297911887203ull, 16776276595680271673ull, 8123338343339218718ull, 7023382689590690097ull}}, {{7312012317107695292ull, 11746973707745563784ull, 14765858947601411302ull, 8779228361988362621ull}}, {{4570007698192309558ull, 2730172548913589461ull, 11534504851464576016ull, 5487017726242726638ull}}, {{10324195641167774851ull, 3412715686141986826ull, 5194759027475944212ull, 6858772157803408298ull}}, {{3681872514604942756ull, 4265894607677483533ull, 15716820821199706073ull, 8573465197254260372ull}}, {{4607013330841783175ull, 14195399175866896968ull, 599640976395040487ull, 5358415748283912733ull}}, {{5758766663552228968ull, 13132562951406233306ull, 5361237238921188513ull, 6698019685354890916ull}}, {{16421830366295062018ull, 2580645633975627920ull, 6701546548651485642ull, 8372524606693613645ull}}, {{10263643978934413761ull, 6224589539662155354ull, 6494309602120872478ull, 5232827879183508528ull}}, {{3606182936813241394ull, 17004108961432470001ull, 8117887002651090597ull, 6541034848979385660ull}}, {{9119414689443939646ull, 7420078146508423789ull, 10147358753313863247ull, 8176293561224232075ull}}, {{8005477190116156231ull, 11555077869208846724ull, 4036256211607470577ull, 5110183475765145047ull}}, {{10006846487645195289ull, 608789281228894693ull, 433634246081950318ull, 6387729344706431309ull}}, {{17120244127983882015ull, 9984358638390894174ull, 5153728826029825801ull, 7984661680883039136ull}}, {{6088466561562538355ull, 17769439195062778619ull, 3221080516268641125ull, 4990413550551899460ull}}, {{2998897183525785040ull, 8376740938546309562ull, 4026350645335801407ull, 6238016938189874325ull}}, {{12971993516262007108ull, 5859240154755499048ull, 9644624325097139663ull, 7797521172737342906ull}}, {{8107495947663754443ull, 10579554124363268761ull, 10639576221613100193ull, 4873450732960839316ull}}, {{14746055953007080957ull, 17836128673881473855ull, 13299470277016375241ull, 6091813416201049145ull}}, {{13820883922831463292ull, 8460102787069678607ull, 2789279790988305340ull, 7614766770251311432ull}}, {{15555581479410746414ull, 14510936278773324937ull, 1743299869367690837ull, 4759229231407069645ull}}, {{5609418793981269305ull, 4303612293184492460ull, 6790810855137001451ull, 5949036539258837056ull}}, {{7011773492476586631ull, 767829348053227671ull, 8488513568921251814ull, 7436295674073546320ull}}, {{11299887460438948501ull, 14314951397815431006ull, 5305320980575782383ull, 4647684796295966450ull}}, {{4901487288693909818ull, 13282003228841900854ull, 15855023262574503787ull, 5809605995369958062ull}}, {{15350231147722163080ull, 11990818017624988163ull, 10595407041363353926ull, 7262007494212447578ull}}, {{14576102916225315946ull, 5765150485176459396ull, 4020886764849416600ull, 9077509367765559473ull}}, {{18333436359495598274ull, 3603219053235287122ull, 14042269274099355135ull, 5673443354853474670ull}}, {{13693423412514722035ull, 18339081871826272615ull, 8329464555769418110ull, 7091804193566843338ull}}, {{12505093247216014640ull, 13700480302928064961ull, 1188458657856996830ull, 8864755241958554173ull}}, {{898154251868927294ull, 3951114170902652697ull, 3048629670374316971ull, 5540472026224096358ull}}, {{5734378833263547021ull, 327206695200927967ull, 13034159124822672022ull, 6925590032780120447ull}}, {{2556287523152045873ull, 9632380405855935767ull, 11681012887600952123ull, 8656987540975150559ull}}, {{8515208729611110527ull, 3714394744446265902ull, 14218162082391676933ull, 5410617213109469099ull}}, {{1420638875159112350ull, 9254679448985220282ull, 13161016584562208262ull, 6763271516386836374ull}}, {{10999170630803666245ull, 2344977274376749544ull, 7227898693847984520ull, 8454089395483545468ull}}, {{6874481644252291404ull, 1465610796485468465ull, 13740808720509766133ull, 5283805872177215917ull}}, {{13204788073742752158ull, 6443699514034223485ull, 3340952845355043954ull, 6604757340221519897ull}}, {{2670927036896276486ull, 17277996429397555165ull, 8787877075121192846ull, 8255946675276899871ull}}, {{3975172407273866756ull, 6187061749946084074ull, 12409952199591827385ull, 5159966672048062419ull}}, {{14192337545947109253ull, 12345513205859992996ull, 10900754231062396327ull, 6449958340060078024ull}}, {{17740421932433886566ull, 10820205488897603341ull, 13625942788827995409ull, 8062447925075097530ull}}, {{13393606716984873056ull, 18291843476629471848ull, 13127900261444885034ull, 5039029953171935956ull}}, {{16742008396231091320ull, 13641432308932064002ull, 16409875326806106293ull, 6298787441464919945ull}}, {{11704138458434088341ull, 3216732330882916291ull, 6677286103225469155ull, 7873484301831149932ull}}, {{5009243527307611261ull, 18151358771297680346ull, 13396675851370694029ull, 4920927688644468707ull}}, {{15484926445989289885ull, 8854140408839936720ull, 12134158795785979633ull, 6151159610805585884ull}}, {{909413983777060740ull, 15679361529477308805ull, 15167698494732474541ull, 7688949513506982355ull}}, {{2874226749074356915ull, 12105443965137011955ull, 7173968549994102636ull, 4805593445941863972ull}}, {{17427841491625109855ull, 15131804956421264943ull, 8967460687492628295ull, 6006991807427329965ull}}, {{17173115846103999415ull, 14303070177099193275ull, 15821011877793173273ull, 7508739759284162456ull}}, {{8427354394601305682ull, 2021889833045913941ull, 9888132423620733296ull, 4692962349552601535ull}}, {{15145879011679020007ull, 2527362291307392426ull, 7748479511098528716ull, 5866202936940751919ull}}, {{9708976727743999200ull, 3159202864134240533ull, 5073913370445772991ull, 7332753671175939899ull}}, {{16747906928107386904ull, 17784061635449964378ull, 1730705694629828334ull, 9165942088969924874ull}}, {{15079127848494504719ull, 6503352503728839832ull, 5693377077571030613ull, 5728713805606203046ull}}, {{402165736908579283ull, 12740876648088437695ull, 16340093383818564074ull, 7160892257007753807ull}}, {{14337765226417887816ull, 6702723773255771310ull, 15813430711345817189ull, 8951115321259692259ull}}, {{4349417248083791981ull, 6495045367498551021ull, 7577551185377441791ull, 5594447075787307662ull}}, {{10048457578532127880ull, 3507120690945800872ull, 248566944867026431ull, 6993058844734134578ull}}, {{12560571973165159850ull, 18218958918964414802ull, 9534080717938558846ull, 8741323555917668222ull}}, {{12462043501655612811ull, 6775163305925371347ull, 1347114430284211375ull, 5463327222448542639ull}}, {{10965868358642128109ull, 3857268113979326280ull, 15518951093137427931ull, 6829159028060678298ull}}, {{13707335448302660136ull, 209899124046769946ull, 10175316829567009106ull, 8536448785075847873ull}}, {{13178770673616550489ull, 4742872970956619120ull, 17888788064547850451ull, 5335280490672404920ull}}, {{16473463342020688112ull, 1316905195268385996ull, 3914241006975261448ull, 6669100613340506151ull}}, {{2145085103816308523ull, 1646131494085482496ull, 281115240291688906ull, 8336375766675632689ull}}, {{1340678189885192827ull, 5640518202230814464ull, 11704912071250775326ull, 5210234854172270430ull}}, {{1675847737356491034ull, 16274019789643293888ull, 5407768052208693349ull, 6512793567715338038ull}}, {{2094809671695613792ull, 6507466681771953648ull, 15983082102115642495ull, 8140991959644172547ull}}, {{1309256044809758620ull, 10984695703748552886ull, 7683583304608582607ull, 5088119974777607842ull}}, {{10859942092866974083ull, 9119183611258303203ull, 381107093905952451ull, 6360149968472009803ull}}, {{8963241597656329700ull, 6787293495645491100ull, 14311441922664604276ull, 7950187460590012253ull}}, {{14825398035389981871ull, 13465430471633207745ull, 11250494210879071624ull, 4968867162868757658ull}}, {{4696689488955313626ull, 16831788089541509682ull, 4839745726744063722ull, 6211083953585947073ull}}, {{15094233898048917841ull, 11816363075072111294ull, 10661368176857467557ull, 7763854941982433841ull}}, {{4822210167853185747ull, 9691069931133763511ull, 18192570156604386983ull, 4852409338739021150ull}}, {{1416076691389094279ull, 7502151395489816485ull, 13517340658900707921ull, 6065511673423776438ull}}, {{6381781882663755753ull, 13989375262789658510ull, 7673303786771109093ull, 7581889591779720548ull}}, {{17823671731947011058ull, 11049202548457230520ull, 14019186903586718991ull, 4738680994862325342ull}}, {{3832845591224212206ull, 9199817167144150247ull, 8300611592628622931ull, 5923351243577906678ull}}, {{179370970602877353ull, 6888085440502799905ull, 1152392453931002856ull, 7404189054472383348ull}}, {{11641321902695268106ull, 4305053400314249940ull, 9943617320561652593ull, 4627618159045239592ull}}, {{14551652378369085132ull, 9993002768820200329ull, 12429521650702065741ull, 5784522698806549490ull}}, {{4354507417679192703ull, 17102939479452638316ull, 6313530026522806368ull, 7230653373508186863ull}}, {{5443134272098990879ull, 2931930275606246279ull, 3280226514726120057ull, 9038316716885233579ull}}, {{10319487947702951156ull, 13361671468322373684ull, 18191042636199682699ull, 5648947948053270986ull}}, {{12899359934628688944ull, 12090403316975579201ull, 13515431258394827566ull, 7061184935066588733ull}}, {{2289141863003697468ull, 5889632109364698194ull, 3059231017711370746ull, 8826481168833235917ull}}, {{6042399682804698822ull, 8292706086780324275ull, 4217862395283300668ull, 5516550730520772448ull}}, {{2941313585078485623ull, 10365882608475405344ull, 5272327994104125835ull, 6895688413150965560ull}}, {{3676641981348107029ull, 8345667242166868776ull, 6590409992630157294ull, 8619610516438706950ull}}, {{2297901238342566893ull, 604356007926905081ull, 17954064300676012021ull, 5387256572774191843ull}}, {{7484062566355596521ull, 5367131028336019255ull, 17830894357417627122ull, 6734070715967739804ull}}, {{4743392189517107747ull, 15932285822274799877ull, 3841873873062482286ull, 8417588394959674756ull}}, {{5270463127661886294ull, 5345992620494362019ull, 11624543207518827237ull, 5260992746849796722ull}}, {{1976392891149969963ull, 11294176794045340428ull, 5307306972543758238ull, 6576240933562245903ull}}, {{2470491113937462454ull, 4894348955701899727ull, 2022447697252309894ull, 8220301166952807379ull}}, {{8461585973851995890ull, 16894026152595851041ull, 17404930875278551347ull, 5137688229345504611ull}}, {{15188668485742382766ull, 16505846672317425897ull, 17144477575670801280ull, 6422110286681880764ull}}, {{5150777551895814746ull, 2185564266687230756ull, 2983852895878949985ull, 8027637858352350956ull}}, {{12442608006789660024ull, 12895192712747988982ull, 11088280096779119548ull, 5017273661470219347ull}}, {{6329887971632299222ull, 16118990890934986228ull, 9248664102546511531ull, 6271592076837774184ull}}, {{7912359964540374027ull, 15537052595241344881ull, 11560830128183139414ull, 7839490096047217730ull}}, {{16474440023906203527ull, 5098971853598452646ull, 11837204848541850038ull, 4899681310029511081ull}}, {{11369677993027978601ull, 15597086853852841616ull, 961448005395148835ull, 6124601637536888852ull}}, {{14212097491284973251ull, 14884672548888664116ull, 1201810006743936044ull, 7655752046921111065ull}}, {{18105932968907884090ull, 79548306200639264ull, 12280346300283429788ull, 4784845029325694415ull}}, {{4185672137425303497ull, 99435382750799081ull, 10738746856926899331ull, 5981056286657118019ull}}, {{9843776190209017275ull, 13959352283720662563ull, 8811747552731236259ull, 7476320358321397524ull}}, {{3846517109666941845ull, 6418752168111720150ull, 14730714257311798470ull, 4672700223950873452ull}}, {{14031518423938453114ull, 17246812246994425995ull, 18413392821639748087ull, 5840875279938591815ull}}, {{12927712011495678488ull, 16946829290315644590ull, 18405055008622297205ull, 7301094099923239769ull}}, {{6936267977514822302ull, 7348478557612392026ull, 9171260705495707795ull, 9126367624904049712ull}}, {{8946853504374151843ull, 2286956089294051064ull, 5732037940934817372ull, 5703979765565031070ull}}, {{11183566880467689804ull, 2858695111617563830ull, 16388419463023297523ull, 7129974706956288837ull}}, {{4756086563729836446ull, 17408426944804118500ull, 6650466273496958191ull, 8912468383695361047ull}}, {{12195926139185923587ull, 17797795868143655918ull, 11074070448576680725ull, 5570292739809600654ull}}, {{6021535637127628676ull, 8412186779897406186ull, 4619216023866075099ull, 6962865924762000818ull}}, {{16750291583264311653ull, 5903547456444369828ull, 14997392066687369682ull, 8703582405952501022ull}}, {{1245560202685418975ull, 8301403178705119047ull, 4761684023252218147ull, 5439739003720313139ull}}, {{15392008308638937431ull, 5765067954954010904ull, 1340419010637884780ull, 6799673754650391424ull}}, {{793266312089120172ull, 7206334943692513631ull, 1675523763297355975ull, 8499592193312989280ull}}, {{7413320472696781964ull, 11421488367448902875ull, 1047202352060847484ull, 5312245120820618300ull}}, {{4654964572443589551ull, 14276860459311128594ull, 1309002940076059355ull, 6640306401025772875ull}}, {{15042077752409262746ull, 13234389555711522838ull, 15471311730377237906ull, 8300383001282216093ull}}, {{4789612576828401313ull, 12883179490747089678ull, 11975412840699467643ull, 5187739375801385058ull}}, {{15210387757890277449ull, 11492288345006474193ull, 5745894014019558746ull, 6484674219751731323ull}}, {{5177926642080683099ull, 5141988394403316934ull, 2570681499097060529ull, 8105842774689664154ull}}, {{17071262206582590649ull, 14742957792570542843ull, 6218361955363050734ull, 5066151734181040096ull}}, {{16727391739800850407ull, 9205325203858402746ull, 7772952444203813418ull, 6332689667726300120ull}}, {{11685867637896287201ull, 2283284467968227625ull, 9716190555254766773ull, 7915862084657875150ull}}, {{386138246044097645ull, 3732895801693836218ull, 1460933078606841329ull, 4947413802911171969ull}}, {{9706044844409897864ull, 9277805770544683176ull, 6437852366685939565ull, 6184267253638964961ull}}, {{12132556055512372329ull, 16208943231608241874ull, 12659001476784812360ull, 7730334067048706201ull}}, {{12194533553122620610ull, 10130589519755151171ull, 994346895349425869ull, 4831458791905441376ull}}, {{10631480922975887858ull, 17274922918121326868ull, 1242933619186782336ull, 6039323489881801720ull}}, {{13289351153719859823ull, 3146909573942106969ull, 1553667023983477921ull, 7549154362352252150ull}}, {{1388315443433830534ull, 13496033529782286616ull, 14806099945271837412ull, 4718221476470157593ull}}, {{1735394304292288167ull, 16870041912227858270ull, 4672566876307633053ull, 5897776845587696992ull}}, {{11392614917220136016ull, 7252494335002659125ull, 5840708595384541317ull, 7372221056984621240ull}}, {{405710591243006308ull, 13677303937180711811ull, 7300885744230676646ull, 9215276321230776550ull}}, {{16394470184022736607ull, 3936628942310556977ull, 18398111645426336616ull, 5759547700769235343ull}}, {{6658029674746257046ull, 4920786177888196222ull, 18385953538355532866ull, 7199434625961544179ull}}, {{17545909130287597116ull, 15374354759215021085ull, 18370755904517028178ull, 8999293282451930224ull}}, {{13272036215643442150ull, 14220657742936776082ull, 11481722440323142611ull, 5624558301532456390ull}}, {{7366673232699526879ull, 13164136160243582199ull, 5128781013549152456ull, 7030697876915570488ull}}, {{4596655522447020695ull, 16455170200304477749ull, 6410976266936440570ull, 8788372346144463110ull}}, {{5178752710743081886ull, 14896167393617686497ull, 17841918222117439068ull, 5492732716340289443ull}}, {{11085126906856240262ull, 173465168312556505ull, 17690711759219410932ull, 6865915895425361804ull}}, {{21350578288136615ull, 216831460390695632ull, 3666645625314712049ull, 8582394869281702256ull}}, {{13344111430085385ull, 11664734708812654530ull, 2291653515821695030ull, 5363996793301063910ull}}, {{9240052176142382539ull, 5357546349161042354ull, 12087938931631894596ull, 6704995991626329887ull}}, {{2326693183323202365ull, 6696932936451302943ull, 10498237646112480341ull, 8381244989532912359ull}}, {{8371712267218083334ull, 6491426094495758291ull, 13478927556461382069ull, 5238278118458070224ull}}, {{5852954315595216264ull, 12725968636547085768ull, 16848659445576727586ull, 6547847648072587780ull}}, {{7316192894494020330ull, 6684088758829081402ull, 2614080233261357867ull, 8184809560090734726ull}}, {{9184306577486150610ull, 1871712465054481924ull, 15468858201070512379ull, 5115505975056709203ull}}, {{11480383221857688263ull, 16174698636600266117ull, 14724386732910752569ull, 6394382468820886504ull}}, {{515420972039946616ull, 6383315240468168935ull, 18405483416138440712ull, 7992978086026108130ull}}, {{7239667135166048491ull, 3989572025292605584ull, 16115113153513913349ull, 4995611303766317581ull}}, {{9049583918957560614ull, 9598651050043144884ull, 6308833386610227974ull, 6244514129707896977ull}}, {{11311979898696950767ull, 2774941775699155297ull, 12497727751690172872ull, 7805642662134871221ull}}, {{152458409044512374ull, 1734338609811972061ull, 10116922854020051997ull, 4878526663834294513ull}}, {{4802259029733028371ull, 6779609280692352980ull, 17257839585952452900ull, 6098158329792868141ull}}, {{6002823787166285464ull, 8474511600865441225ull, 7737241427158402413ull, 7622697912241085177ull}}, {{15280979913047398175ull, 7602412759754594717ull, 16364990938042471268ull, 4764186195150678235ull}}, {{5266166836027084007ull, 9503015949693243397ull, 15844552654125701181ull, 5955232743938347794ull}}, {{11194394563461242912ull, 16490455955543942150ull, 10582318780802350668ull, 7444040929922934743ull}}, {{2384810583735888916ull, 1083162935360188036ull, 13531478265642551024ull, 4652525581201834214ull}}, {{2981013229669861145ull, 1353953669200235045ull, 7690975795198412972ull, 5815656976502292768ull}}, {{8337952555514714336ull, 1692442086500293806ull, 9613719743998016215ull, 7269571220627865960ull}}, {{1199068657538617111ull, 15950610663407530970ull, 12017149679997520268ull, 9086964025784832450ull}}, {{5361103929389023599ull, 745759627774931048ull, 12122404568425838072ull, 5679352516115520281ull}}, {{6701379911736279498ull, 932199534718663810ull, 1317947655250133878ull, 7099190645144400352ull}}, {{17600096926525125181ull, 10388621455253105570ull, 1647434569062667347ull, 8873988306430500440ull}}, {{15611746597505591142ull, 4187045400319497029ull, 1029646605664167092ull, 5546242691519062775ull}}, {{5679625191599825216ull, 5233806750399371287ull, 15122116312362372577ull, 6932803364398828468ull}}, {{2487845471072393615ull, 11153944456426602013ull, 455901316743414105ull, 8666004205498535586ull}}, {{3860746428633939962ull, 53686257625544402ull, 4896624341392021720ull, 5416252628436584741ull}}, {{14049305072647200760ull, 67107822031930502ull, 10732466445167415054ull, 6770315785545730926ull}}, {{8338259303954225142ull, 9307256814394688936ull, 4192211019604493009ull, 8462894731932163658ull}}, {{5211412064971390714ull, 17346250555065150345ull, 7231817905680196034ull, 5289309207457602286ull}}, {{11125951099641626296ull, 12459441156976662123ull, 18263144418955020851ull, 6611636509322002857ull}}, {{9295752856124644966ull, 10962615427793439750ull, 8993872468411612352ull, 8264545636652503572ull}}, {{1198159516650515200ull, 6851634642370899844ull, 14844542329612033528ull, 5165341022907814732ull}}, {{1497699395813144000ull, 8564543302963624805ull, 108933838305490294ull, 6456676278634768416ull}}, {{6483810263193817904ull, 1482307091849755198ull, 136167297881862868ull, 8070845348293460520ull}}, {{17887439469778299902ull, 10149813969260872806ull, 85104561176164292ull, 5044278342683412825ull}}, {{13135927300368099070ull, 12687267461576091008ull, 4718066719897593269ull, 6305347928354266031ull}}, {{16419909125460123837ull, 2024026271687950048ull, 1285897381444603683ull, 7881684910442832539ull}}, {{10262443203412577398ull, 17405917484300826444ull, 16944586927898734965ull, 4926053069026770336ull}}, {{12828054004265721748ull, 7922338800093869343ull, 2733989586163867091ull, 6157566336283462921ull}}, {{11423381486904764280ull, 5291237481689948775ull, 8029173001132221768ull, 7696957920354328651ull}}, {{14057142456956559531ull, 3307023426056217984ull, 2712390116493944653ull, 4810598700221455407ull}}, {{17571428071195699414ull, 8745465300997660384ull, 17225545700899594528ull, 6013248375276819258ull}}, {{3517541015285072652ull, 10931831626247075481ull, 12308560089269717352ull, 7516560469096024073ull}}, {{13727678180621640167ull, 6832394766404422175ull, 775321028152491489ull, 4697850293185015046ull}}, {{12547911707349662305ull, 13152179476432915623ull, 10192523322045390169ull, 5872312866481268807ull}}, {{11073203615759689977ull, 2605166290258980817ull, 8128968134129349808ull, 7340391083101586009ull}}, {{6446464417448760ull, 3256457862823726022ull, 14772896186089075164ull, 9175488853876982511ull}}, {{13839087095543069187ull, 11258658201119604571ull, 16150589143946753833ull, 5734680533673114069ull}}, {{12687172851001448579ull, 238264696117342002ull, 6353178374651278580ull, 7168350667091392587ull}}, {{6635594026897034916ull, 297830870146677503ull, 3329786949886710321ull, 8960438333864240734ull}}, {{11064775294451728679ull, 11715359339910143199ull, 15916174898961357662ull, 5600273958665150458ull}}, {{9219283099637272944ull, 5420827138032903191ull, 10671846586846921270ull, 7000342448331438073ull}}, {{6912417856119203276ull, 15999405959395904797ull, 17951494251986039491ull, 8750428060414297591ull}}, {{6626104169288196000ull, 7693785715408746546ull, 18137212935132356538ull, 5469017537758935994ull}}, {{17506002248465020808ull, 393860107406157374ull, 13448144132060669865ull, 6836271922198669993ull}}, {{12659130773726500202ull, 5104011152685084622ull, 2975122109793673619ull, 8545339902748337492ull}}, {{3300270715151674722ull, 884163961214483937ull, 11082823355475821820ull, 5340837439217710932ull}}, {{8737024412366981307ull, 1105204951518104921ull, 13853529194344777275ull, 6676046799022138665ull}}, {{15532966533886114537ull, 15216564244679794863ull, 3481853437648807881ull, 8345058498777673332ull}}, {{16625633111319903442ull, 2592823625283789933ull, 11399530435385280734ull, 5215661561736045832ull}}, {{6946983333867715590ull, 12464401568459513225ull, 14249413044231600917ull, 6519576952170057290ull}}, {{13295415185762032392ull, 1745443905292227819ull, 8588394268434725339ull, 8149471190212571613ull}}, {{6003791481887576293ull, 17231803505303500051ull, 7673589426985397288ull, 5093419493882857258ull}}, {{2893053333932082462ull, 3093010307919823448ull, 368614746876970803ull, 6366774367353571573ull}}, {{3616316667415103078ull, 17701320940181943022ull, 5072454452023601407ull, 7958467959191964466ull}}, {{16095255972416603136ull, 17980854615254796244ull, 7781970050942138783ull, 4974042474494977791ull}}, {{1672325891811202303ull, 17864382250641107402ull, 5115776545250285575ull, 6217553093118722239ull}}, {{11313779401618778687ull, 17718791794873996348ull, 1783034663135469065ull, 7771941366398402799ull}}, {{16294484162866512488ull, 4156715844155165861ull, 8031925692100750022ull, 4857463353999001749ull}}, {{6533047148300976897ull, 14419266842048733135ull, 14651593133553325431ull, 6071829192498752186ull}}, {{3554622916948833218ull, 13412397534133528515ull, 9091119380086880981ull, 7589786490623440233ull}}, {{18362540387588878425ull, 10688591468047149273ull, 17211164658622770373ull, 4743616556639650145ull}}, {{9118117429203934319ull, 17972425353486324496ull, 7678897767996299254ull, 5929520695799562682ull}}, {{11397646786504917899ull, 13242159655003129812ull, 375250173140598260ull, 7411900869749453353ull}}, {{16346901278420349495ull, 17499721821231731940ull, 11763746404281343672ull, 4632438043593408345ull}}, {{1986882524315885253ull, 3427908202830113310ull, 869624950069515879ull, 5790547554491760432ull}}, {{11706975192249632374ull, 18119943308819805349ull, 1087031187586894848ull, 7238184443114700540ull}}, {{798660935029876755ull, 4203185062315205071ull, 1358788984483618561ull, 9047730553893375675ull}}, {{7416692112034754828ull, 14156205710015472929ull, 16990144179798119264ull, 5654831596183359796ull}}, {{13882551158470831439ull, 17695257137519341161ull, 2790936151038097464ull, 7068539495229199746ull}}, {{3518130892806375587ull, 3672327348189624836ull, 12712042225652397639ull, 8835674369036499682ull}}, {{11422203844858760550ull, 9212733620259597378ull, 12556712409460136428ull, 5522296480647812301ull}}, {{5054382769218674879ull, 11515917025324496723ull, 1860832456543006823ull, 6902870600809765377ull}}, {{1706292443095955695ull, 9783210263228233000ull, 6937726589106146433ull, 8628588251012206721ull}}, {{1066432776934972310ull, 17643721460586115385ull, 15865294164259811280ull, 5392867656882629200ull}}, {{5944726989596103291ull, 3607907752023092615ull, 1384873631615212485ull, 6741084571103286501ull}}, {{2819222718567741209ull, 9121570708456253673ull, 6342778057946403510ull, 8426355713879108126ull}}, {{13291229245173308016ull, 1089295674357770641ull, 17799294341498665906ull, 5266472321174442578ull}}, {{2778978501184471308ull, 10584991629801989110ull, 13025745890018556574ull, 6583090401468053223ull}}, {{12697095163335364943ull, 4007867500397710579ull, 11670496344095807814ull, 8228863001835066529ull}}, {{5629841467870909137ull, 16339975243030732824ull, 376531187418798027ull, 5143039376146916581ull}}, {{7037301834838636422ull, 15813283035361028126ull, 5082350002700885438ull, 6428799220183645726ull}}, {{18019999330403071335ull, 10543231757346509349ull, 15576309540230882606ull, 8035999025229557157ull}}, {{13568342590715613537ull, 1977833829914180439ull, 12041036471857995581ull, 5022499390768473223ull}}, {{12348742219967129017ull, 7083978305820113453ull, 10439609571395106572ull, 6278124238460591529ull}}, {{1600869719676747559ull, 8854972882275141817ull, 17661197982671271119ull, 7847655298075739411ull}}, {{12529758620866436984ull, 12451887079063045491ull, 8732405729955850497ull, 4904784561297337132ull}}, {{11050512257655658326ull, 1729800793546643152ull, 10915507162444813122ull, 6130980701621671415ull}}, {{13813140322069572908ull, 11385623028788079748ull, 9032697934628628498ull, 7663725877027089269ull}}, {{17856584738148258876ull, 11727700411419937746ull, 7951279218356586763ull, 4789828673141930793ull}}, {{13097358885830547786ull, 10047939495847534279ull, 14550785041373121358ull, 5987285841427413491ull}}, {{11760012588860796829ull, 3336552332954642041ull, 13576795283289013794ull, 7484107301784266864ull}}, {{432478840396916162ull, 6697031226524039180ull, 8485497052055633621ull, 4677567063615166790ull}}, {{540598550496145203ull, 12982975051582436879ull, 1383499278214766218ull, 5846958829518958488ull}}, {{14510806243402345215ull, 7005346777623270290ull, 1729374097768457773ull, 7308698536898698110ull}}, {{8915135767398155711ull, 13368369490456475767ull, 11385089659065348024ull, 9135873171123372637ull}}, {{12489488882264929175ull, 8355230931535297354ull, 9421524046129536467ull, 5709920731952107898ull}}, {{6388489065976385661ull, 5832352645991733789ull, 2553533020807144776ull, 7137400914940134873ull}}, {{12597297350897869980ull, 7290440807489667236ull, 7803602294436318874ull, 8921751143675168591ull}}, {{17096682881165944546ull, 9168211523108429926ull, 11794780461663781152ull, 5576094464796980369ull}}, {{12147481564602654874ull, 11460264403885537408ull, 908417521797562728ull, 6970118080996225462ull}}, {{15184351955753318593ull, 14325330504856921760ull, 10358893939101729218ull, 8712647601245281827ull}}, {{9490219972345824121ull, 13565017583962964004ull, 4168465702724886809ull, 5445404750778301142ull}}, {{11862774965432280151ull, 3121213924671541293ull, 14433954165260884320ull, 6806755938472876427ull}}, {{993410651508186476ull, 3901517405839426617ull, 13430756688148717496ull, 8508444923091095534ull}}, {{12150096703261086308ull, 2438448378649641635ull, 3782536911665560531ull, 5317778076931934709ull}}, {{10575934860648969981ull, 16883118528594215756ull, 9339857158009338567ull, 6647222596164918386ull}}, {{13219918575811212476ull, 16492212142315381791ull, 2451449410656897401ull, 8309028245206147983ull}}, {{15179978137523089653ull, 3390103561306031763ull, 8449684909301642732ull, 5193142653253842489ull}}, {{14363286653476474163ull, 4237629451632539704ull, 15173792155054441319ull, 6491428316567303111ull}}, {{17954108316845592703ull, 685350796113286726ull, 14355554175390663745ull, 8114285395709128889ull}}, {{6609631679601107536ull, 11957559293639273964ull, 2054692331978082984ull, 5071428372318205556ull}}, {{8262039599501384419ull, 14946949117049092455ull, 2568365414972603730ull, 6339285465397756945ull}}, {{5715863480949342620ull, 9460314359456589761ull, 7822142787143142567ull, 7924106831747196181ull}}, {{15101629721661808898ull, 12830225502301450456ull, 7194682251178158056ull, 4952566769841997613ull}}, {{430293078367709506ull, 16037781877876813071ull, 13605038832400085474ull, 6190708462302497016ull}}, {{14372924403241800595ull, 10823855310491240530ull, 17006298540500106843ull, 7738385577878121270ull}}, {{13594763770453513276ull, 4459066559843331379ull, 6017250569385178873ull, 4836490986173825794ull}}, {{12381768694639503691ull, 10185519218231552128ull, 16744935248586249399ull, 6045613732717282242ull}}, {{15477210868299379613ull, 8120213004362052256ull, 11707797023878035941ull, 7557017165896602803ull}}, {{9673256792687112258ull, 7380976136939976612ull, 5011530130710078511ull, 4723135728685376752ull}}, {{12091570990858890323ull, 4614534152747582861ull, 6264412663387598139ull, 5903919660856720940ull}}, {{1279405683291449191ull, 1156481672507090673ull, 7830515829234497674ull, 7379899576070901175ull}}, {{12328843598125625505ull, 5334487063744319574ull, 11811601420912642902ull, 4612437235044313234ull}}, {{6187682460802256073ull, 15891480866535175276ull, 5541129739286027819ull, 5765546543805391543ull}}, {{7734603076002820091ull, 15252665064741581191ull, 2314726155680146870ull, 7206933179756739429ull}}, {{5056567826576137210ull, 9842459294072200681ull, 7505093713027571492ull, 9008666474695924286ull}}, {{14689569937678555516ull, 15374909095649901233ull, 78997552214844278ull, 5630416546684952679ull}}, {{4526904366816030683ull, 9995264332707600734ull, 13933804995550719060ull, 7038020683356190848ull}}, {{14882002495374814162ull, 12494080415884500917ull, 17417256244438398825ull, 8797525854195238560ull}}, {{11607094568822952803ull, 891271232286731217ull, 10885785152773999266ull, 5498453658872024100ull}}, {{673810155746527292ull, 10337461077213189830ull, 13607231440967499082ull, 6873067073590030125ull}}, {{10065634731537934923ull, 3698454309661711479ull, 3173981245927210141ull, 8591333841987537657ull}}, {{13208550734852291183ull, 4617376952752263626ull, 13512953324772976098ull, 5369583651242211035ull}}, {{7287316381710588171ull, 14995093227795105341ull, 12279505637538832218ull, 6711979564052763794ull}}, {{13720831495565623117ull, 9520494497889105868ull, 6126010010068764465ull, 8389974455065954743ull}}, {{17798891721583290256ull, 17479524107249160927ull, 10746285283934059646ull, 5243734034416221714ull}}, {{17636928633551724916ull, 12626033097206675351ull, 4209484568062798750ull, 6554667543020277143ull}}, {{17434474773512268241ull, 6559169334653568381ull, 650169691651110534ull, 8193334428775346429ull}}, {{13202389742658861603ull, 17934538889440643950ull, 2712199066495638035ull, 5120834017984591518ull}}, {{7279615141468801196ull, 17806487593373417034ull, 12613620869974323352ull, 6401042522480739397ull}}, {{18322890963690777303ull, 3811365418007219676ull, 1931968032185740479ull, 8001303153100924247ull}}, {{2228434815451960006ull, 9299632413895594154ull, 8125009047757169655ull, 5000814470688077654ull}}, {{12008915556169725816ull, 7012854498942104788ull, 932889272841686261ull, 6251018088360097068ull}}, {{15011144445212157269ull, 13377754142105018889ull, 1166111591052107826ull, 7813772610450121335ull}}, {{2464436250616516438ull, 12972782357243024710ull, 7646348772048649247ull, 4883607881531325834ull}}, {{12303917350125421355ull, 11604291928126392983ull, 334563928206035751ull, 6104509851914157293ull}}, {{10768210669229388789ull, 9893678891730603325ull, 5029890928684932593ull, 7630637314892696616ull}}, {{9035974677482061946ull, 17712764353400096838ull, 3143681830428082870ull, 4769148321807935385ull}}, {{2071596309997801624ull, 12917583404895345240ull, 8541288306462491492ull, 5961435402259919231ull}}, {{2589495387497252030ull, 16146979256119181550ull, 6064924364650726461ull, 7451794252824899039ull}}, {{15453492672467946231ull, 12397705044288182420ull, 10708106755547785894ull, 4657371408015561899ull}}, {{870121766875381172ull, 6273759268505452218ull, 8773447426007344464ull, 5821714260019452374ull}}, {{10311024245449002273ull, 7842199085631815272ull, 1743437245654404772ull, 7277142825024315468ull}}, {{12888780306811252842ull, 9802748857039769090ull, 2179296557068005965ull, 9096428531280394335ull}}, {{12667173710184420930ull, 8432561044863549633ull, 8279589375808585584ull, 5685267832050246459ull}}, {{1998909082448362451ull, 10540701306079437042ull, 5737800701333344076ull, 7106584790062808074ull}}, {{11722008389915228871ull, 13175876632599296302ull, 16395622913521455903ull, 8883230987578510092ull}}, {{2714569225269630141ull, 15152451923015642045ull, 1023892284096134131ull, 5552019367236568808ull}}, {{8004897550014425580ull, 14328878885342164652ull, 1279865355120167664ull, 6940024209045711010ull}}, {{10006121937518031974ull, 17911098606677705815ull, 10823203730754985388ull, 8675030261307138762ull}}, {{13171355238589851840ull, 1971064592318790326ull, 11376188350149253772ull, 5421893913316961726ull}}, {{7240822011382538992ull, 2463830740398487908ull, 4996863400831791407ull, 6777367391646202158ull}}, {{9051027514228173740ull, 16914846480780273597ull, 15469451287894515066ull, 8471709239557752697ull}}, {{7962735205606302540ull, 15183465068915058902ull, 2750878027292990060ull, 5294818274723595436ull}}, {{730046970153102366ull, 532587262434272012ull, 3438597534116237576ull, 6618522843404494295ull}}, {{912558712691377958ull, 665734078042840015ull, 18133304972927460682ull, 8273153554255617868ull}}, {{7487878223073193080ull, 5027769817204162913ull, 2109943571224887118ull, 5170720971409761168ull}}, {{13971533797268879254ull, 15508084308359979449ull, 2637429464031108897ull, 6463401214262201460ull}}, {{3629359191303935355ull, 5550047330167810600ull, 3296786830038886122ull, 8079251517827751825ull}}, {{2268349494564959597ull, 8080465599782269529ull, 13589706814842773586ull, 5049532198642344890ull}}, {{7447122886633587400ull, 877209962873061103ull, 7763761481698691175ull, 6311915248302931113ull}}, {{4697217589864596346ull, 14931570508873490091ull, 14316387870550751872ull, 7889894060378663891ull}}, {{629917984451678765ull, 9332231568045931307ull, 6641899409880525968ull, 4931183787736664932ull}}, {{14622455535846762168ull, 11665289460057414133ull, 8302374262350657460ull, 6163979734670831165ull}}, {{4443011364526288997ull, 14581611825071767667ull, 14989653846365709729ull, 7704974668338538956ull}}, {{471039093615236672ull, 2195978363028772936ull, 145161617123792773ull, 4815609167711586848ull}}, {{588798867019045839ull, 7356658972213354074ull, 181452021404740966ull, 6019511459639483560ull}}, {{9959370620628583107ull, 18419195752121468400ull, 226815026755926207ull, 7524389324549354450ull}}, {{6224606637892864442ull, 18429526372716999606ull, 4753445410149841783ull, 4702743327843346531ull}}, {{17004130334220856360ull, 18425221947468861603ull, 1330120744259914325ull, 5878429159804183164ull}}, {{16643476899348682546ull, 9196469379053913292ull, 1662650930324892907ull, 7348036449755228955ull}}, {{2357602050476301567ull, 6883900705390003712ull, 15913371718188279846ull, 9185045562194036193ull}}, {{1473501281547688480ull, 18137495996150916032ull, 3028328296226593047ull, 5740653476371272621ull}}, {{1841876601934610599ull, 18060183976761257136ull, 8397096388710629213ull, 7175816845464090776ull}}, {{2302345752418263249ull, 8740171915669407708ull, 10496370485888286517ull, 8969771056830113470ull}}, {{10662338132116190339ull, 7768450456507073769ull, 1948545535252791169ull, 5606106910518820919ull}}, {{17939608683572625827ull, 14322249089061230115ull, 16270739974348152673ull, 7007633638148526148ull}}, {{17812824836038394380ull, 4067753306044373932ull, 1891680894225639226ull, 8759542047685657686ull}}, {{1909643485669220680ull, 7154031834705121612ull, 15017358614173188228ull, 5474713779803536053ull}}, {{2387054357086525850ull, 8942539793381402015ull, 4936640212434321573ull, 6843392224754420067ull}}, {{16818876001640321024ull, 15789860760154140422ull, 1559114247115514062ull, 8554240280943025084ull}}, {{5900111482597812736ull, 5256976956668949860ull, 10197818441301972097ull, 5346400175589390677ull}}, {{7375139353247265920ull, 11182907214263575229ull, 17358959070054853025ull, 6683000219486738346ull}}, {{13830610209986470304ull, 143575962547305324ull, 12475326800713790474ull, 8353750274358422933ull}}, {{17867503418096319748ull, 4701420995019453731ull, 10102922259659812998ull, 5221093921474014333ull}}, {{17722693254193011781ull, 15100148280629092972ull, 17240338843002154151ull, 6526367401842517916ull}}, {{3706622494031713110ull, 14263499332358978312ull, 3103679480043141073ull, 8157959252303147396ull}}, {{2316639058769820694ull, 1997158055083279589ull, 11163171711881738979ull, 5098724532689467122ull}}, {{7507484841889663771ull, 16331505624136263198ull, 4730592602997397915ull, 6373405665861833903ull}}, {{160984015507303906ull, 15802696011742941094ull, 1301554735319359490ull, 7966757082327292379ull}}, {{13935673064974228654ull, 14488371025766726087ull, 16954372774070457345ull, 4979223176454557736ull}}, {{12807905312790397913ull, 4275405726926243897ull, 2746221893878520066ull, 6224028970568197171ull}}, {{2174823585705833679ull, 14567629195512580680ull, 17267835422630313794ull, 7780036213210246463ull}}, {{1359264741066146049ull, 13716454265622750829ull, 17709926166785027977ull, 4862522633256404039ull}}, {{6310766944760070466ull, 3310509776746274824ull, 17525721690053897068ull, 6078153291570505049ull}}, {{7888458680950088082ull, 4138137220932843530ull, 8072094057285207623ull, 7597691614463131312ull}}, {{9541972694021192955ull, 9503864790724109062ull, 5045058785803254764ull, 4748557259039457070ull}}, {{2704093830671715386ull, 11879830988405136328ull, 15529695519108844263ull, 5935696573799321337ull}}, {{3380117288339644233ull, 10238102717079032506ull, 5577061343603891617ull, 7419620717249151672ull}}, {{6724259323639665550ull, 17928029244242865076ull, 3485663339752432260ull, 4637262948280719795ull}}, {{8405324154549581937ull, 3963292481594029729ull, 18192137229972704038ull, 5796578685350899743ull}}, {{15118341211614365325ull, 14177487638847312969ull, 18128485519038492143ull, 7245723356688624679ull}}, {{5062868459235792944ull, 13110173530131753308ull, 18048920880370727275ull, 9057154195860780849ull}}, {{12387664823877146398ull, 5888015447118651865ull, 4363046522590622691ull, 5660721372412988031ull}}, {{1649522974564269286ull, 2748333290470926928ull, 842122134810890460ull, 7075901715516235039ull}}, {{2061903718205336607ull, 3435416613088658660ull, 14887710723795776787ull, 8844877144395293798ull}}, {{10512061860733111187ull, 18288036447676269326ull, 4693133183944972587ull, 5528048215247058624ull}}, {{3916705289061613176ull, 18248359541167948754ull, 5866416479931215734ull, 6910060269058823280ull}}, {{14119253648181792278ull, 13587077389605160134ull, 7333020599914019668ull, 8637575336323529100ull}}, {{4212847511686232270ull, 17715295405358000892ull, 13806509911801038100ull, 5398484585202205687ull}}, {{5266059389607790337ull, 3697375182987949499ull, 12646451371323909722ull, 6748105731502757109ull}}, {{1970888218582350018ull, 13845091015589712682ull, 1973006158872723440ull, 8435132164378446387ull}}, {{5843491155041356665ull, 8653181884743570426ull, 17374029913791309814ull, 5271957602736528991ull}}, {{16527735980656471639ull, 1593105319074687224ull, 17105851373811749364ull, 6589947003420661239ull}}, {{2212925902111037933ull, 1991381648843359031ull, 16770628198837298801ull, 8237433754275826549ull}}, {{8300607716460480564ull, 12773828576595569154ull, 12787485633487005702ull, 5148396096422391593ull}}, {{1152387608720824897ull, 6743913683889685635ull, 2149298986576593416ull, 6435495120527989492ull}}, {{15275542566183194834ull, 8429892104862107043ull, 2686623733220741770ull, 8044368900659986865ull}}, {{7241371094650802819ull, 9880368583966204806ull, 13208354879331433366ull, 5027730562912491790ull}}, {{18275085905168279332ull, 3127088693102980199ull, 7287071562309515900ull, 6284663203640614738ull}}, {{18232171363032961261ull, 3908860866378725249ull, 18332211489741670683ull, 7855829004550768422ull}}, {{4477578074254518932ull, 137195032273009329ull, 6845946162661156273ull, 4909893127844230264ull}}, {{10208658611245536569ull, 4783179808768649565ull, 8557432703326445341ull, 6137366409805287830ull}}, {{17372509282484308615ull, 10590660779388199860ull, 1473418842303280868ull, 7671708012256609788ull}}, {{1634446264697917077ull, 15842535023972400721ull, 10144258813294326350ull, 4794817507660381117ull}}, {{6654743849299784250ull, 10579796743110725093ull, 17292009535045295842ull, 5993521884575476396ull}}, {{12930115830052118216ull, 4001373892033630558ull, 3168267845097068187ull, 7491902355719345496ull}}, {{3469636375355185981ull, 195015673307325147ull, 1980167403185667617ull, 4682438972324590935ull}}, {{18172103524476146188ull, 4855455610061544337ull, 16310267309264248233ull, 5853048715405738668ull}}, {{8880071350313019023ull, 10681005531004318326ull, 1941090062870758675ull, 7316310894257173336ull}}, {{1876717151036497971ull, 8739570895328010004ull, 2426362578588448344ull, 9145388617821466670ull}}, {{10396320256252587040ull, 5462231809580006252ull, 15351534666899943927ull, 5715867886138416668ull}}, {{12995400320315733800ull, 2216103743547619911ull, 742674259915378293ull, 7144834857673020836ull}}, {{11632564381967279346ull, 7381815697861912793ull, 928342824894222866ull, 8931043572091276045ull}}, {{352823711088467735ull, 9225320829591083400ull, 2886057274772583243ull, 5581902232557047528ull}}, {{441029638860584669ull, 6919965018561466346ull, 3607571593465729054ull, 6977377790696309410ull}}, {{9774659085430506644ull, 17873328310056608740ull, 13732836528686937125ull, 8721722238370386762ull}}, {{15332533965248842461ull, 13476673202999074414ull, 13194708848856723607ull, 5451076398981491726ull}}, {{9942295419706277268ull, 12234155485321455114ull, 7270014024216128701ull, 6813845498726864658ull}}, {{3204497237778070777ull, 1457636301369655181ull, 18310889567124936685ull, 8517306873408580822ull}}, {{4308653782824988188ull, 3216865697569728440ull, 6832619961025697524ull, 5323316795880363014ull}}, {{5385817228531235234ull, 4021082121962160550ull, 17764146988136897713ull, 6654145994850453767ull}}, {{15955643572518819851ull, 9638038670880088591ull, 17593497716743734237ull, 8317682493563067209ull}}, {{16889806260465344263ull, 8329617178513749321ull, 4078407045323752042ull, 5198551558476917006ull}}, {{7277199770299516617ull, 1188649436287410844ull, 14321380843509465861ull, 6498189448096146257ull}}, {{9096499712874395771ull, 6097497813786651459ull, 4066667999104668614ull, 8122736810120182822ull}}, {{3379469311332803405ull, 17645994188898820874ull, 16376725554722581595ull, 5076710506325114263ull}}, {{13447708676020780064ull, 17445806717696138188ull, 15859220924975839090ull, 6345888132906392829ull}}, {{16809635845025975080ull, 12583886360265396927ull, 5988968100937635151ull, 7932360166132991037ull}}, {{17423551430782316281ull, 14782458002806954935ull, 6048948072299715921ull, 4957725103833119398ull}}, {{17167753270050507447ull, 4643014448226529957ull, 16784557127229420710ull, 6197156379791399247ull}}, {{7624633532280970597ull, 15027140097137938255ull, 16369010390609387983ull, 7746445474739249059ull}}, {{11682924985316688479ull, 16309491588352293265ull, 7924788484917173537ull, 4841528421712030662ull}}, {{768598176363696887ull, 6551806430158202870ull, 682613569291691114ull, 6051910527140038328ull}}, {{10184119757309396917ull, 17413130074552529395ull, 853266961614613892ull, 7564888158925047910ull}}, {{4059231839104679121ull, 1659834259740555064ull, 14368349906291297395ull, 4728055099328154943ull}}, {{5074039798880848901ull, 15909850879957857542ull, 13348751364436733839ull, 5910068874160193679ull}}, {{15565921785455836934ull, 15275627581519934023ull, 12074253187118529395ull, 7387586092700242099ull}}, {{16646230143550979940ull, 7241424229236264812ull, 5240565232735386920ull, 4617241307937651312ull}}, {{2361043605729173309ull, 9051780286545331016ull, 6550706540919233650ull, 5771551634922064140ull}}, {{2951304507161466636ull, 2091353321326887962ull, 8188383176149042063ull, 7214439543652580175ull}}, {{12912502670806609103ull, 16449249706940773664ull, 5623792951758914674ull, 9018049429565725219ull}}, {{8070314169254130690ull, 14892467085265371444ull, 1209027585635627719ull, 5636280893478578262ull}}, {{10087892711567663362ull, 14003897838154326401ull, 10734656518899310457ull, 7045351116848222827ull}}, {{17221551907886967106ull, 3669814242410744289ull, 8806634630196750168ull, 8806688896060278534ull}}, {{3845940914788272586ull, 2293633901506715181ull, 892460625445580951ull, 5504180560037674084ull}}, {{9419112161912728636ull, 16702100432165557688ull, 1115575781806976188ull, 6880225700047092605ull}}, {{11773890202390910795ull, 2430881466497395494ull, 6006155745686108140ull, 8600282125058865756ull}}, {{2746995358066931343ull, 10742672953415647992ull, 12977219377908593395ull, 5375176328161791097ull}}, {{3433744197583664178ull, 8816655173342172086ull, 2386466167103578032ull, 6718970410202238872ull}}, {{13515552283834356031ull, 11020818966677715107ull, 2983082708879472540ull, 8398713012752798590ull}}, {{6141377168182778568ull, 16111383891028347750ull, 15699484748331834049ull, 5249195632970499118ull}}, {{16900093497083249017ull, 6304171808503270975ull, 10400983898560016754ull, 6561494541213123898ull}}, {{16513430852926673367ull, 17103586797483864527ull, 3777857836345245134ull, 8201868176516404873ull}}, {{17238423310720252711ull, 6078055730000027425ull, 13890376193784247969ull, 5126167610322753045ull}}, {{7712971083118152176ull, 12209255680927422186ull, 3527912186948146249ull, 6407709512903441307ull}}, {{417841817042914412ull, 1426511545877114021ull, 18244948288967346524ull, 8009636891129301633ull}}, {{2566994144865515460ull, 10114941753027972071ull, 4485563652963509721ull, 5006023056955813521ull}}, {{17043800736364058037ull, 17255363209712352992ull, 10218640584631775055ull, 6257528821194766901ull}}, {{2858006846745520930ull, 16957517993713053337ull, 17384986749217106723ull, 7821911026493458626ull}}, {{13315469325284420341ull, 8292605736856964383ull, 15477302736688079606ull, 4888694391558411641ull}}, {{12032650638178137523ull, 1142385134216429671ull, 5511570365577935796ull, 6110867989448014552ull}}, {{10429127279295283999ull, 1427981417770537089ull, 6889462956972419745ull, 7638584986810018190ull}}, {{18047419595628022260ull, 12421703432175055440ull, 18140972403389926052ull, 4774115616756261368ull}}, {{4112530420825476208ull, 15527129290218819301ull, 4229471430527855949ull, 5967644520945326711ull}}, {{9752349044459233164ull, 5573853557491360414ull, 675153269732432033ull, 7459555651181658389ull}}, {{1483532134359632824ull, 15012873519500570019ull, 2727813802796463972ull, 4662222281988536493ull}}, {{15689473223231704742ull, 319347825666160907ull, 8021453271922967870ull, 5827777852485670616ull}}, {{15000155510612243023ull, 9622556818937476942ull, 10026816589903709837ull, 7284722315607088270ull}}, {{9526822351410527971ull, 16639882042099234082ull, 3310148700524861488ull, 9105902894508860338ull}}, {{10565949988058967886ull, 10399926276312021301ull, 6680528956255426334ull, 5691189309068037711ull}}, {{17819123503501097761ull, 3776535808535250818ull, 3738975176891895014ull, 7113986636335047139ull}}, {{13050532342521596393ull, 13944041797523839331ull, 62032952687480863ull, 8892483295418808924ull}}, {{5850739704862303794ull, 15632555151093481438ull, 9262142632284451347ull, 5557802059636755577ull}}, {{16536796667932655551ull, 14929007920439463893ull, 16189364308782952088ull, 6947252574545944471ull}}, {{6835937779633655726ull, 214515826839778251ull, 15625019367551302207ull, 8684065718182430589ull}}, {{1966618103057340877ull, 7051601419415943263ull, 12071480113933257831ull, 5427541073864019118ull}}, {{16293330684103839808ull, 4202815755842541174ull, 5865978105561796481ull, 6784426342330023898ull}}, {{11143291318275023952ull, 9865205713230564372ull, 16555844668807021409ull, 8480532927912529872ull}}, {{16187929110776665778ull, 17694968616837572492ull, 10347402918004388380ull, 5300333079945331170ull}}, {{1788167314761280607ull, 3671966697337414000ull, 3710881610650709668ull, 6625416349931663963ull}}, {{2235209143451600758ull, 4589958371671767500ull, 26915994885999181ull, 8281770437414579954ull}}, {{10620377751512026282ull, 5174566991508548639ull, 4628508515231137392ull, 5176106523384112471ull}}, {{8663786170962644948ull, 6468208739385685799ull, 1173949625611533836ull, 6470133154230140589ull}}, {{6218046695275918281ull, 8085260924232107249ull, 6079123050441805199ull, 8087666442787675736ull}}, {{15415494230615918686ull, 11970817105286148886ull, 3799451906526128249ull, 5054791526742297335ull}}, {{10045995751415122549ull, 1128463326325522396ull, 137628864730272408ull, 6318489408427871669ull}}, {{12557494689268903187ull, 1410579157906902995ull, 4783722099340228414ull, 7898111760534839586ull}}, {{5542591171579370540ull, 14716670028973978084ull, 7601512330515030662ull, 4936319850334274741ull}}, {{6928238964474213175ull, 9172465499362696797ull, 14113576431571176232ull, 6170399812917843426ull}}, {{13271984724020154372ull, 11465581874203370996ull, 8418598502609194482ull, 7712999766147304283ull}}, {{17518362489367372291ull, 11777674689804494776ull, 2955781054917052599ull, 4820624853842065177ull}}, {{3451209037999663747ull, 10110407343828230567ull, 8306412337073703653ull, 6025781067302581471ull}}, {{18149069352781743396ull, 17249695198212676112ull, 5771329402914741662ull, 7532226334128226839ull}}, {{11343168345488589623ull, 6169373480455534666ull, 10524609904462795395ull, 4707641458830141774ull}}, {{4955588395005961220ull, 3100030832142030429ull, 3932390343723718436ull, 5884551823537677218ull}}, {{10806171512184839429ull, 3875038540177538036ull, 14138859966509423853ull, 7355689779422096522ull}}, {{13507714390231049286ull, 9455484193649310449ull, 8450202921282004008ull, 9194612224277620653ull}}, {{1524792466253323948ull, 5909677621030819031ull, 7587219835014946457ull, 5746632640173512908ull}}, {{15741048638098818647ull, 11998783044715911692ull, 9484024793768683071ull, 7183290800216891135ull}}, {{1229566723913971693ull, 10386792787467501712ull, 7243344973783465935ull, 8979113500271113919ull}}, {{768479202446232308ull, 13409274519808270426ull, 11444619636255748065ull, 5611945937669446199ull}}, {{10183971039912566193ull, 2926535094478174320ull, 9694088526892297178ull, 7014932422086807749ull}}, {{12729963799890707741ull, 12881540904952493708ull, 16729296677042759376ull, 8768665527608509686ull}}, {{17179599411786468147ull, 8050963065595308567ull, 5844124404724336706ull, 5480415954755318554ull}}, {{16862813246305697279ull, 840331795139359901ull, 16528527542760196691ull, 6850519943444148192ull}}, {{7243458502599957887ull, 14885472799206363589ull, 2213915354740694247ull, 8563149929305185241ull}}, {{6833004573338667631ull, 16220949527145059099ull, 12912912142781403664ull, 5351968705815740775ull}}, {{3929569698245946635ull, 1829442835221772258ull, 11529454160049366677ull, 6689960882269675969ull}}, {{14135334159662209102ull, 6898489562454603226ull, 576759644779544634ull, 8362451102837094962ull}}, {{13446269868216268593ull, 8923241994961514920ull, 4972160796414603300ull, 5226531939273184351ull}}, {{16807837335270335741ull, 11154052493701893650ull, 1603514977090866221ull, 6533164924091480439ull}}, {{11786424632233143868ull, 107507561845203351ull, 15839451776645746489ull, 8166456155114350548ull}}, {{14284044422786796774ull, 11596407272221721854ull, 676285323548815747ull, 5104035096946469093ull}}, {{8631683491628720159ull, 9883823071849764414ull, 5457042672863407588ull, 6380043871183086366ull}}, {{1566232327681124390ull, 12354778839812205518ull, 16044675377934035293ull, 7975054838978857957ull}}, {{14813953260082866456ull, 10027579784096322400ull, 12333765120422466010ull, 4984409274361786223ull}}, {{70697501394031454ull, 3311102693265627193ull, 10805520382100694609ull, 6230511592952232779ull}}, {{4700057895169927222ull, 8750564385009421895ull, 8895214459198480357ull, 7788139491190290974ull}}, {{9855065212122286370ull, 7774945749844582636ull, 947823018571662319ull, 4867587181993931859ull}}, {{12318831515152857962ull, 5106996168878340391ull, 15019836828496741611ull, 6084483977492414823ull}}, {{10786853375513684548ull, 1772059192670537585ull, 14163110017193539110ull, 7605604971865518529ull}}, {{18270998405764522603ull, 14942595050701249702ull, 1934414733104880087ull, 4753503107415949081ull}}, {{13615375970350877446ull, 14066557794949174224ull, 7029704434808488013ull, 5941878884269936351ull}}, {{17019219962938596807ull, 3748139188404304068ull, 4175444525083222113ull, 7427348605337420439ull}}, {{1413640439981847196ull, 13871802038821159803ull, 9527181855818095676ull, 4642092878335887774ull}}, {{15602108605259472707ull, 17339752548526449753ull, 2685605282917843787ull, 5802616097919859718ull}}, {{5667577701292177172ull, 17063004667230674288ull, 12580378640502080542ull, 7253270122399824647ull}}, {{7084472126615221465ull, 12105383797183567052ull, 11113787282200212774ull, 9066587652999780809ull}}, {{13651167115989289224ull, 2954178854812341503ull, 28588023734051128ull, 5666617283124863006ull}}, {{12452272876559223626ull, 3692723568515426879ull, 9259107066522339718ull, 7083271603906078757ull}}, {{10953655077271641628ull, 13839276497499059407ull, 16185569851580312551ull, 8854089504882598446ull}}, {{13763563450935857874ull, 15567076838577993985ull, 5504295138810307440ull, 5533805940551624029ull}}, {{3369396258387658630ull, 1012101974512940866ull, 11492054941940272205ull, 6917257425689530036ull}}, {{13435117359839349095ull, 5876813486568563986ull, 14365068677425340256ull, 8646571782111912545ull}}, {{13008634368326981089ull, 3673008429105352491ull, 2060638895749755804ull, 5404107363819945341ull}}, {{11649106941981338457ull, 4591260536381690614ull, 7187484638114582659ull, 6755134204774931676ull}}, {{5338011640621897263ull, 1127389652049725364ull, 8984355797643228324ull, 8443917755968664595ull}}, {{12559629312243461597ull, 9927990569385854160ull, 3309379364313323750ull, 5277448597480415372ull}}, {{15699536640304326997ull, 3186616174877541892ull, 4136724205391654688ull, 6596810746850519215ull}}, {{1177676726670857130ull, 3983270218596927366ull, 559219238312180456ull, 8246013433563149019ull}}, {{14571106009451449418ull, 2489543886623079603ull, 16490413088440970449ull, 5153758395976968136ull}}, {{13602196493386923869ull, 7723615876706237408ull, 2166272286841661445ull, 6442197994971210171ull}}, {{17002745616733654836ull, 14266205864310184664ull, 16542898413834240518ull, 8052747493714012713ull}}, {{10626716010458534273ull, 4304692646766477511ull, 3421782481005318468ull, 5032967183571257946ull}}, {{8671708994645779937ull, 5380865808458096889ull, 13500600138111423893ull, 6291208979464072432ull}}, {{15451322261734612825ull, 11337768279000009015ull, 16875750172639279866ull, 7864011224330090540ull}}, {{16574605441225214872ull, 11697791192802393538ull, 1323971821044774108ull, 4915007015206306588ull}}, {{11494884764676742781ull, 14622238991002991923ull, 1654964776305967635ull, 6143758769007883235ull}}, {{9756919937418540573ull, 13666112720326352000ull, 15903764025664623256ull, 7679698461259854043ull}}, {{6098074960886587858ull, 8541320450203970000ull, 7634009506826695583ull, 4799811538287408777ull}}, {{7622593701108234822ull, 6064964544327574596ull, 14154197901960757383ull, 5999764422859260971ull}}, {{9528242126385293528ull, 2969519661982080341ull, 13081061359023558825ull, 7499705528574076214ull}}, {{8260994338204502407ull, 13385164834807269973ull, 3563977330962336361ull, 4687315955358797634ull}}, {{14937928941183015913ull, 2896397988226923754ull, 13678343700557696260ull, 5859144944198497042ull}}, {{9449039139623994083ull, 3620497485283654693ull, 7874557588842344517ull, 7323931180248121303ull}}, {{16422984942957380507ull, 9137307875031956270ull, 5231510967625542742ull, 9154913975310151629ull}}, {{5652679570920974913ull, 1099131403467584765ull, 5575537363979658166ull, 5721821234568844768ull}}, {{11677535482078606546ull, 10597286291189256764ull, 6969421704974572707ull, 7152276543211055960ull}}, {{14596919352598258182ull, 8634921845559183051ull, 8711777131218215884ull, 8940345679013819950ull}}, {{6817231586160217412ull, 14620198190329265215ull, 833174688583997023ull, 5587716049383637469ull}}, {{3909853464272883861ull, 13663561719484193615ull, 5653154379157384183ull, 6984645061729546836ull}}, {{275630811913716922ull, 12467766130927854115ull, 7066442973946730229ull, 8730806327161933545ull}}, {{16313170321941930740ull, 10098196841043602773ull, 15945741904785176153ull, 5456753954476208465ull}}, {{6556404847145249713ull, 17234432069731891371ull, 6097119325699306479ull, 6820942443095260582ull}}, {{3583820040504174237ull, 16931354068737476310ull, 16844771193978908907ull, 8526178053869075727ull}}, {{16074945580597272611ull, 8276253283747228741ull, 17445511023877899923ull, 5328861283668172329ull}}, {{6258623920464427051ull, 5733630586256648023ull, 7971830724565211192ull, 6661076604585215412ull}}, {{3211593882153145910ull, 7167038232820810029ull, 9964788405706513990ull, 8326345755731519265ull}}, {{4313089185559410146ull, 18314456950795169980ull, 17757207799635041003ull, 5203966097332199540ull}}, {{5391361481949262682ull, 18281385170066574571ull, 3749765675834249638ull, 6504957621665249426ull}}, {{2127515834009190448ull, 13628359425728442406ull, 13910579131647587856ull, 8131197027081561782ull}}, {{15164755451537907742ull, 8517724641080276503ull, 4082425938852354506ull, 5081998141925976114ull}}, {{14344258295994996774ull, 1423783764495569821ull, 14326404460420218941ull, 6352497677407470142ull}}, {{4095264814711582255ull, 6391415724046850181ull, 8684633538670497868ull, 7940622096759337678ull}}, {{4865383518408432862ull, 13218006864384057171ull, 816209943241673263ull, 4962888810474586049ull}}, {{1470043379583153173ull, 11910822562052683560ull, 5631948447479479483ull, 6203611013093232561ull}}, {{1837554224478941466ull, 10276842184138466546ull, 11651621577776737258ull, 7754513766366540701ull}}, {{5760157408726726321ull, 11034712383513929495ull, 9588106495324154738ull, 4846571103979087938ull}}, {{2588510742481019997ull, 4570018442537636061ull, 2761761082300417615ull, 6058213879973859923ull}}, {{7847324446528662900ull, 1100837034744657172ull, 17287259408157685731ull, 7572767349967324903ull}}, {{14127949815935190120ull, 16828924211211268396ull, 17722066157739635437ull, 4732979593729578064ull}}, {{17659937269918987650ull, 7201097208731921783ull, 3705838623464992681ull, 5916224492161972581ull}}, {{17463235568971346659ull, 13613057529342290133ull, 9243984297758628755ull, 7395280615202465726ull}}, {{13220365239820785614ull, 6202317946625237381ull, 1165804167671755068ull, 4622050384501541079ull}}, {{2690398494493818305ull, 7752897433281546727ull, 15292313264871857547ull, 5777562980626926348ull}}, {{17198056173399436594ull, 5079435773174545504ull, 668647507380270318ull, 7221953725783657936ull}}, {{3050826143039744126ull, 15572666753322957689ull, 835809384225337897ull, 9027442157229572420ull}}, {{13435981385468309839ull, 2815387693185766699ull, 9745752901995611994ull, 5642151348268482762ull}}, {{12183290713407999394ull, 12742606653336984182ull, 2958819090639739184ull, 7052689185335603453ull}}, {{6005741354905223435ull, 15928258316671230228ull, 8310209881727061884ull, 8815861481669504316ull}}, {{12976960383670540455ull, 731789411064743084ull, 14417253212934189486ull, 5509913426043440197ull}}, {{16221200479588175569ull, 10138108800685704663ull, 4186508460885573145ull, 6887391782554300247ull}}, {{15664814581057831557ull, 17284322019284518733ull, 621449557679578527ull, 8609239728192875309ull}}, {{12096352122374838675ull, 17720230289693906064ull, 2694248982763430531ull, 5380774830120547068ull}}, {{15120440152968548344ull, 17538601843689994676ull, 3367811228454288164ull, 6725968537650683835ull}}, {{453806117501133814ull, 3476508230902941730ull, 18044822090850023918ull, 8407460672063354793ull}}, {{4895314841865596538ull, 16007875699596502293ull, 4360484779140183092ull, 5254662920039596746ull}}, {{10730829570759383576ull, 1563100550786076250ull, 14673978010780004674ull, 6568328650049495932ull}}, {{4190164926594453662ull, 11177247725337371121ull, 18342472513475005842ull, 8210410812561869915ull}}, {{14148068125190003299ull, 11597465846763244854ull, 9158202311708184699ull, 5131506757851168697ull}}, {{8461713119632728315ull, 9885146290026668164ull, 16059438908062618778ull, 6414383447313960871ull}}, {{10577141399540910394ull, 3133060825678559397ull, 15462612616650885569ull, 8017979309142451089ull}}, {{8916556383926762949ull, 13487378062117569383ull, 2746603857765721624ull, 5011237068214031931ull}}, {{6534009461481065782ull, 16859222577646961729ull, 17268312877489315742ull, 6264046335267539913ull}}, {{12779197845278720131ull, 11850656185203926353ull, 7750333041579480966ull, 7830057919084424892ull}}, {{1069469625658118226ull, 2794974097325066067ull, 14067330187841951412ull, 4893786199427765557ull}}, {{15171895087354811494ull, 3493717621656332583ull, 3749104679520275553ull, 6117232749284706947ull}}, {{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull, 7646540936605883684ull}}, {{2053210247837747184ull, 17140985699504597031ull, 9270056306212873643ull, 4779088085378677302ull}}, {{16401570865079347692ull, 16814546105953358384ull, 2364198345911316246ull, 5973860106723346628ull}}, {{2055219507639632999ull, 11794810595586922173ull, 2955247932389145308ull, 7467325133404183285ull}}, {{3590355201488464576ull, 16595128659096602166ull, 4152872966956909769ull, 4667078208377614553ull}}, {{13711316038715356528ull, 6908852768588588995ull, 9802777227123525116ull, 5833847760472018191ull}}, {{12527459029966807756ull, 8636065960735736244ull, 7641785515477018491ull, 7292309700590022739ull}}, {{15659323787458509695ull, 6183396432492282401ull, 4940545875918885210ull, 9115387125737528424ull}}, {{2869548339520486704ull, 8476308788735064405ull, 3087841172449303256ull, 5697116953585955265ull}}, {{8198621442827996284ull, 10595385985918830506ull, 8471487483989016974ull, 7121396191982444081ull}}, {{1024904766680219546ull, 4020860445543762325ull, 15201045373413659122ull, 8901745239978055101ull}}, {{2946408488388831169ull, 7124723796892239357ull, 11806496367597230903ull, 5563590774986284438ull}}, {{8294696628913426865ull, 4294218727687911292ull, 5534748422641762821ull, 6954488468732855548ull}}, {{10368370786141783581ull, 9979459428037277019ull, 6918435528302203526ull, 8693110585916069435ull}}, {{4174388732124920786ull, 1625476124095910233ull, 2018179195975183252ull, 5433194116197543397ull}}, {{9829671933583538887ull, 2031845155119887791ull, 7134410013396366969ull, 6791492645246929246ull}}, {{7675403898552035704ull, 7151492462327247643ull, 18141384553600234519ull, 8489365806558661557ull}}, {{2491284427381328363ull, 11387211816595611633ull, 13644208355213840526ull, 5305853629099163473ull}}, {{7725791552654048358ull, 5010642733889738733ull, 3220202388735136946ull, 6632317036373954342ull}}, {{14268925459244948351ull, 15486675454216949224ull, 13248625022773696990ull, 8290396295467442927ull}}, {{8918078412028092720ull, 5067486140458205361ull, 15197919666874642475ull, 5181497684667151829ull}}, {{15759284033462503804ull, 1722671657145368797ull, 5162341528311139382ull, 6476872105833939787ull}}, {{5864046986545966042ull, 11376711608286486805ull, 1841240891961536323ull, 8096090132292424734ull}}, {{5970872375804922729ull, 4804601745965360301ull, 14985833612758123914ull, 5060056332682765458ull}}, {{12075276488183541315ull, 15229124219311476184ull, 9508919979092879084ull, 6325070415853456823ull}}, {{15094095610229426643ull, 589661200429793614ull, 7274463955438710952ull, 7906338019816821029ull}}, {{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull, 4941461262385513143ull}}, {{10639340690884892589ull, 5072358831263164165ull, 3953792708276222467ull, 6176826577981891429ull}}, {{17910861882033503640ull, 1728762520651567302ull, 9553926903772665988ull, 7721033222477364286ull}}, {{6582602657843551871ull, 10303848612262005372ull, 1359518296430528338ull, 4825645764048352679ull}}, {{8228253322304439839ull, 3656438728472730907ull, 15534455925820324135ull, 6032057205060440848ull}}, {{5673630634453161895ull, 18405606465873077346ull, 971325833565853552ull, 7540071506325551061ull}}, {{8157705164960614088ull, 11503504041170673341ull, 2912921655192352422ull, 4712544691453469413ull}}, {{14808817474628155514ull, 5156008014608565868ull, 8252838087417828432ull, 5890680864316836766ull}}, {{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull, 7363351080396045958ull}}, {{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull, 9204188850495057447ull}}, {{4661903025908358824ull, 7341007085979871558ull, 13535789341626496214ull, 5752618031559410904ull}}, {{15050750819240224337ull, 18399630894329615255ull, 16919736677033120267ull, 7190772539449263630ull}}, {{14201752505622892517ull, 18387852599484631165ull, 11926298809436624526ull, 8988465674311579538ull}}, {{11181938325228001776ull, 6880721856250506574ull, 12065622774325278233ull, 5617791046444737211ull}}, {{4754050869680226411ull, 13212588338740521122ull, 10470342449479209887ull, 7022238808055921514ull}}, {{15165935623955058822ull, 11904049404998263498ull, 3864556024994236551ull, 8777798510069901893ull}}, {{14090395783399299668ull, 14357559905764996542ull, 4721190524835091796ull, 5486124068793688683ull}}, {{8389622692394348777ull, 17946949882206245678ull, 1289802137616476841ull, 6857655085992110854ull}}, {{1263656328638160163ull, 8598629297475643386ull, 10835624708875371860ull, 8572068857490138567ull}}, {{5401471223826238006ull, 14597515347777052924ull, 13689794470688189268ull, 5357543035931336604ull}}, {{6751839029782797507ull, 18246894184721316155ull, 17112243088360236585ull, 6696928794914170755ull}}, {{3828112768801108980ull, 8973559675619481482ull, 16778617842022907828ull, 8371160993642713444ull}}, {{7004256498928081017ull, 14831846834116951734ull, 1263264114409541584ull, 5231975621026695903ull}}, {{17978692660514877079ull, 93064468936638051ull, 15414138198294090693ull, 6539969526283369878ull}}, {{17861679807216208444ull, 4728016604598185468ull, 10044300711012837558ull, 8174961907854212348ull}}, {{1940177842655354470ull, 16790068433156029630ull, 15501059981237799281ull, 5109351192408882717ull}}, {{11648594340173968895ull, 7152527486162873325ull, 5541266921265085390ull, 6386688990511103397ull}}, {{725684869935297407ull, 18164031394558367465ull, 11538269670008744641ull, 7983361238138879246ull}}, {{11982768089778030640ull, 4434990593957897809ull, 2599732525328077497ull, 4989600773836799529ull}}, {{1143402056940374587ull, 10155424260874760166ull, 7861351675087484775ull, 6237000967295999411ull}}, {{10652624608030244042ull, 8082594307666062303ull, 5215003575431968065ull, 7796251209119999264ull}}, {{13575419407659984382ull, 16580836488359758699ull, 3259377234644980040ull, 4872657005699999540ull}}, {{12357588241147592574ull, 2279301536740146758ull, 4074221543306225051ull, 6090821257124999425ull}}, {{6223613264579714909ull, 16684184976207347160ull, 9704462947560169217ull, 7613526571406249281ull}}, {{3889758290362321819ull, 3510086582488510119ull, 17594504388293575521ull, 4758454107128905800ull}}, {{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull, 5948067633911132251ull}}, {{4924825824084280865ull, 15860803826599919845ull, 18268041069853935943ull, 7435084542388915313ull}}, {{5383859149266369493ull, 16830531419266031759ull, 4499996641017628108ull, 4646927838993072071ull}}, {{2118137918155573962ull, 2591420200372988083ull, 1013309782844647232ull, 5808659798741340089ull}}, {{16482730452976631164ull, 3239275250466235103ull, 5878323246983196944ull, 7260824748426675111ull}}, {{15991727047793401051ull, 4049094063082793879ull, 2736218040301608276ull, 9076030935533343889ull}}, {{16912358432511957513ull, 11754055826281521982ull, 13239351321256974932ull, 5672519334708339930ull}}, {{11917076003785171083ull, 14692569782851902478ull, 7325817114716442857ull, 7090649168385424913ull}}, {{5672972967876688046ull, 4530654173282714386ull, 13768957411822941476ull, 8863311460481781141ull}}, {{8157294123350317933ull, 12055030895156472299ull, 10911441391603032374ull, 5539569662801113213ull}}, {{5584931635760509512ull, 5845416582090814566ull, 18250987757931178372ull, 6924462078501391516ull}}, {{16204536581555412698ull, 7306770727613518207ull, 4366990623704421349ull, 8655577598126739396ull}}, {{17045364391113214793ull, 6872574713972142831ull, 11952741176670039151ull, 5409735998829212122ull}}, {{16695019470464130587ull, 3979032374037790635ull, 5717554433982773131ull, 6762169998536515153ull}}, {{16257088319652775329ull, 362104449119850390ull, 11758629060905854318ull, 8452712498170643941ull}}, {{5548994181355596677ull, 14061373335982070206ull, 9654986172279852900ull, 5282945311356652463ull}}, {{16159614763549271654ull, 17576716669977587757ull, 7457046696922428221ull, 6603681639195815579ull}}, {{6364460399154425855ull, 8135837782189820985ull, 4709622352725647373ull, 8254602048994769474ull}}, {{15507002795539985920ull, 7390741623082332067ull, 7555199988880917512ull, 5159126280621730921ull}}, {{14772067475997594496ull, 9238427028852915084ull, 14055686004528534794ull, 6448907850777163651ull}}, {{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull, 8061134813471454564ull}}, {{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull, 5038209258419659102ull}}, {{9237700373798089483ull, 4698445753088498727ull, 12429219171114694412ull, 6297761573024573878ull}}, {{6935439448820223949ull, 5873057191360623409ull, 6313151927038592207ull, 7872201966280717348ull}}, {{15863864701581109728ull, 10588189772241471486ull, 13169091991253895937ull, 4920126228925448342ull}}, {{10606458840121611352ull, 17846923233729227262ull, 7237992952212594113ull, 6150157786156810428ull}}, {{4034701513297238382ull, 8473595986879370366ull, 9047491190265742642ull, 7687697232696013035ull}}, {{16356746501092937701ull, 9907683510226994382ull, 3348838984702395199ull, 4804810770435008147ull}}, {{11222561089511396318ull, 7772918369356355074ull, 18021106786160157711ull, 6006013463043760183ull}}, {{4804829325034469590ull, 5104461943268055939ull, 17914697464272809235ull, 7507516828804700229ull}}, {{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull, 4692198018002937643ull}}, {{10094841185520837735ull, 1105557131661051262ull, 12266475137052861751ull, 5865247522503672054ull}}, {{3395179445046271361ull, 15217004469858477790ull, 6109721884461301380ull, 7331559403129590068ull}}, {{13467346343162615009ull, 574511513613545621ull, 7637152355576626726ull, 9164449253911987585ull}}, {{10722934473690328333ull, 14194127751290629725ull, 16302435268303861463ull, 5727780783694992240ull}}, {{18015354110540298320ull, 13130973670685899252ull, 1931300011670275213ull, 7159725979618740301ull}}, {{4072448564465821284ull, 2578659033075210354ull, 7025811033015231921ull, 8949657474523425376ull}}, {{7156966371218526206ull, 13140876941740476231ull, 4391131895634519950ull, 5593535921577140860ull}}, {{4334521945595769854ull, 7202724140320819481ull, 5488914869543149938ull, 6991919901971426075ull}}, {{10029838450422100221ull, 18226777212255800159ull, 2249457568501549518ull, 8739899877464282594ull}}, {{13186178059154894494ull, 6780049739232487195ull, 6017596998740856353ull, 5462437423415176621ull}}, {{11871036555516230214ull, 13086748192467996898ull, 12133682266853458345ull, 6828046779268970776ull}}, {{5615423657540511959ull, 2523377185302832411ull, 15167102833566822932ull, 8535058474086213470ull}}, {{1203796776749126023ull, 10800482777669046065ull, 4867753252551876428ull, 5334411546303883419ull}}, {{6116431989363795432ull, 13500603472086307581ull, 1473005547262457631ull, 6668014432879854274ull}}, {{12257226005132132194ull, 12264068321680496572ull, 11064628970932847847ull, 8335018041099817842ull}}, {{16884138290062358430ull, 14582571728691392213ull, 11527079125260417808ull, 5209386275687386151ull}}, {{7270114807295784325ull, 18228214660864240267ull, 9797162888148134356ull, 6511732844609232689ull}}, {{4475957490692342502ull, 4338524252370748718ull, 16858139628612555850ull, 8139666055761540861ull}}, {{16632531486964877776ull, 7323263676159105852ull, 12842180277096541358ull, 5087291284850963038ull}}, {{2343920284996545604ull, 18377451632053658124ull, 6829353309515900889ull, 6359114106063703798ull}}, {{2929900356245682005ull, 9136756484784908943ull, 17760063673749651920ull, 7948892632579629747ull}}, {{8748716750294633109ull, 5710472802990568089ull, 8794196786879838498ull, 4968057895362268592ull}}, {{15547581956295679290ull, 16361463040592985919ull, 10992745983599798122ull, 6210072369202835740ull}}, {{14822791426942211209ull, 11228456763886456591ull, 13740932479499747653ull, 7762590461503544675ull}}, {{16181773669479963862ull, 9323628486642729321ull, 6282239790473648331ull, 4851619038439715422ull}}, {{6392159031567791115ull, 7042849589876023748ull, 17076171774946836222ull, 6064523798049644277ull}}, {{7990198789459738893ull, 18026934024199805493ull, 7510156663401381565ull, 7580654747562055347ull}}, {{7299717252626030761ull, 13572676774338572385ull, 2388004905412169526ull, 4737909217226284592ull}}, {{13736332584209926355ull, 7742473931068439673ull, 2985006131765211908ull, 5922386521532855740ull}}, {{3335357674980244231ull, 9678092413835549592ull, 3731257664706514885ull, 7402983151916069675ull}}, {{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull, 4626864469947543547ull}}, {{16440806238860479518ull, 5831627441398752654ull, 13867799344317011026ull, 5783580587434429433ull}}, {{11327635761720823589ull, 16512906338603216626ull, 3499691125114100070ull, 7229475734293036792ull}}, {{4936172665296253678ull, 11417760886399244975ull, 4374613906392625088ull, 9036844667866295990ull}}, {{10002636943451240405ull, 7136100553999528109ull, 16569191746777554392ull, 5648027917416434993ull}}, {{17114982197741438410ull, 8920125692499410136ull, 6876431628189779278ull, 7060034896770543742ull}}, {{2946983673467246397ull, 1926785078769486863ull, 17818911572091999906ull, 8825043620963179677ull}}, {{8759393823558110854ull, 5815926692658317193ull, 13442662741771193893ull, 5515652263101987298ull}}, {{15560928297875026471ull, 11881594384250284395ull, 7579956390359216558ull, 6894565328877484123ull}}, {{14839474353916395185ull, 5628620943458079686ull, 4863259469521632794ull, 8618206661096855154ull}}, {{4662985452770359087ull, 8129574108088687708ull, 7651223186878408400ull, 5386379163185534471ull}}, {{5828731815962948858ull, 10161967635110859635ull, 4952342965170622596ull, 6732973953981918089ull}}, {{2674228751526298169ull, 12702459543888574544ull, 10802114724890666149ull, 8416217442477397611ull}}, {{1671392969703936356ull, 10244880224144053042ull, 4445478693842972391ull, 5260135901548373507ull}}, {{11312613248984696253ull, 8194414261752678398ull, 945162348876327585ull, 6575169876935466884ull}}, {{4917394524376094508ull, 14854703845618235902ull, 1181452936095409481ull, 8218962346169333605ull}}, {{16908429633017222779ull, 2366660875870315582ull, 3044251094273324878ull, 5136851466355833503ull}}, {{11912165004416752666ull, 12181698131692670286ull, 17640371923123819809ull, 6421064332944791878ull}}, {{5666834218666165025ull, 1392064609333674146ull, 12827092867049998954ull, 8026330416180989848ull}}, {{8153457405093741045ull, 5481726399260934245ull, 8016933041906249346ull, 5016456510113118655ull}}, {{14803507774794564210ull, 16075530035930943614ull, 5409480283955423778ull, 6270570637641398319ull}}, {{9281012681638429454ull, 10871040508058903710ull, 2150164336516891819ull, 7838213297051747899ull}}, {{1188946907596630505ull, 4488557308323120867ull, 17484753774818915051ull, 4898883310657342436ull}}, {{15321241689777951843ull, 999010616976513179ull, 3409198144814092198ull, 6123604138321678046ull}}, {{14539866093795051900ull, 10472135308075417282ull, 13484869717872391055ull, 7654505172902097557ull}}, {{13699102327049295341ull, 13462613595188217657ull, 10733886582883938361ull, 4784065733063810973ull}}, {{3288819853529455465ull, 2993208938703108360ull, 18029044247032310856ull, 5980082166329763716ull}}, {{4111024816911819331ull, 3741511173378885450ull, 4089561235080836954ull, 7475102707912204646ull}}, {{7181076528997274986ull, 6950130501789191310ull, 16391033827207686808ull, 4671939192445127903ull}}, {{18199717698101369540ull, 8687663127236489137ull, 15877106265582220606ull, 5839923990556409879ull}}, {{8914589067344548213ull, 1636206872190835614ull, 15234696813550387854ull, 7299904988195512349ull}}, {{1919864297325909458ull, 11268630627093320326ull, 5208312961655821105ull, 9124881235244390437ull}}, {{15034973241110857124ull, 125365114292243347ull, 5561038610248582143ull, 5703050772027744023ull}}, {{14182030532961183500ull, 13991764448147467896ull, 2339612244383339774ull, 7128813465034680029ull}}, {{17727538166201479375ull, 8266333523329559062ull, 7536201323906562622ull, 8911016831293350036ull}}, {{6468025335448536706ull, 554772433653586510ull, 13933497864296377447ull, 5569385519558343772ull}}, {{17308403706165446690ull, 14528523597349146849ull, 17416872330370471808ull, 6961731899447929715ull}}, {{7800446577424644651ull, 18160654496686433562ull, 17159404394535701856ull, 8702164874309912144ull}}, {{9486965129317790811ull, 11350409060429020976ull, 10724627746584813660ull, 5438853046443695090ull}}, {{11858706411647238513ull, 14188011325536276220ull, 4182412646376241267ull, 6798566308054618863ull}}, {{14823383014559048142ull, 13123328138492957371ull, 616329789542913680ull, 8498207885068273579ull}}, {{6958771374885711137ull, 8202080086558098357ull, 16526107182960178714ull, 5311379928167670986ull}}, {{13310150237034526825ull, 1029228071342847138ull, 11434261941845447585ull, 6639224910209588733ull}}, {{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull, 8299031137761985917ull}}, {{2328104340435295250ull, 15215603238322186527ull, 2591948866729097557ull, 5186894461101241198ull}}, {{16745188480826282774ull, 5184445992620569446ull, 12463308120266147755ull, 6483618076376551497ull}}, {{11708113564178077660ull, 1868871472348323904ull, 1744077095050520982ull, 8104522595470689372ull}}, {{7317570977611298537ull, 15003102725499866152ull, 10313420221261351421ull, 5065326622169180857ull}}, {{9146963722014123172ull, 4918820351592668978ull, 17503461295004077181ull, 6331658277711476071ull}}, {{2210332615662878157ull, 10760211457918224127ull, 17267640600327708572ull, 7914572847139345089ull}}, {{8298986912430380704ull, 15948504198053665887ull, 3874746347563736001ull, 4946608029462090681ull}}, {{5762047622110587976ull, 6100572192284918647ull, 9455118952882057906ull, 6183260036827613351ull}}, {{2590873509210847066ull, 16849087277210924117ull, 7207212672675184478ull, 7729075046034516689ull}}, {{3925138952470473368ull, 5918993529829439669ull, 16033722966490460059ull, 4830671903771572930ull}}, {{9518109709015479614ull, 2787055893859411682ull, 10818781671258299266ull, 6038339879714466163ull}}, {{2674265099414573710ull, 12707191904179040411ull, 8911791070645486178ull, 7547924849643082704ull}}, {{17812316751629966233ull, 12553680958539288160ull, 5569869419153428861ull, 4717453031026926690ull}}, {{3818651865827906175ull, 1857043142891946489ull, 16185708810796561885ull, 5896816288783658362ull}}, {{9385000850712270622ull, 6932989947042321015ull, 11008763976640926548ull, 7371020360979572953ull}}, {{7119565044962950374ull, 8666237433802901269ull, 18372640989228546089ull, 9213775451224466191ull}}, {{6755571162315537936ull, 16945613442195283053ull, 18400429645908923161ull, 5758609657015291369ull}}, {{13056149971321810324ull, 7346958747461940104ull, 9165479002103990240ull, 7198262071269114212ull}}, {{16320187464152262904ull, 9183698434327425130ull, 11456848752629987800ull, 8997827589086392765ull}}, {{14811803183522552219ull, 5739811521454640706ull, 9466373479607436327ull, 5623642243178995478ull}}, {{9291381942548414466ull, 2563078383390912979ull, 2609594812654519601ull, 7029552803973744348ull}}, {{7002541409758130179ull, 7815533997666029128ull, 3261993515818149501ull, 8786941004967180435ull}}, {{4376588381098831362ull, 7190551757754962157ull, 18179647011882201102ull, 5491838128104487771ull}}, {{10082421494800927106ull, 18211561734048478504ull, 18112872746425363473ull, 6864797660130609714ull}}, {{12603026868501158883ull, 8929394112278434418ull, 13417718896176928534ull, 8580997075163262143ull}}, {{12488577811240612206ull, 969185301746633607ull, 15303603337751662190ull, 5363123171977038839ull}}, {{10999036245623377353ull, 10434853664038067817ull, 14517818153762189833ull, 6703903964971298549ull}}, {{18360481325456609595ull, 17655253098474972675ull, 4312214636920573579ull, 8379879956214123187ull}}, {{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull, 5237424972633826992ull}}, {{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull, 6546781215792283740ull}}, {{16633120851708517460ull, 12485656897476221727ull, 608267404471350836ull, 8183476519740354675ull}}, {{17313229559958905269ull, 17026907597777414387ull, 16521068192290451936ull, 5114672824837721671ull}}, {{17029850931521243682ull, 2836890423512216368ull, 16039649221935677017ull, 6393341031047152089ull}}, {{2840569590692002986ull, 8157799047817658365ull, 6214503472137432559ull, 7991676288808940112ull}}, {{4081199003396195818ull, 12016153432527118334ull, 3884064670085895349ull, 4994797680505587570ull}}, {{14324870791100020581ull, 1185133735376734205ull, 14078452874462144995ull, 6243497100631984462ull}}, {{4071030433592862014ull, 15316475224503081469ull, 8374694056222905435ull, 7804371375789980578ull}}, {{4850237030209232711ull, 7266954006100731966ull, 9845869803566703801ull, 4877732109868737861ull}}, {{15286168324616316697ull, 13695378526053302861ull, 16919023272885767655ull, 6097165137335922326ull}}, {{5272652350488232159ull, 12507537139139240673ull, 11925407054252433761ull, 7621456421669902908ull}}, {{14824622765123614859ull, 899681684320943564ull, 16676751445762546909ull, 4763410263543689317ull}}, {{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull, 5954262829429611647ull}}, {{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull, 7442828536787014559ull}}, {{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull, 4651767835491884099ull}}, {{9305436863705329478ull, 15401676660084534608ull, 7278909286806688635ull, 5814709794364855124ull}}, {{11631796079631661847ull, 14640409806678280356ull, 9098636608508360794ull, 7268387242956068905ull}}, {{14539745099539577309ull, 9077140221493074637ull, 15984981779062838897ull, 9085484053695086131ull}}, {{11393183696425929770ull, 17202427684501641408ull, 7684770602700580358ull, 5678427533559428832ull}}, {{14241479620532412213ull, 12279662568772275952ull, 9605963253375725448ull, 7098034416949286040ull}}, {{17801849525665515266ull, 15349578210965344940ull, 12007454066719656810ull, 8872543021186607550ull}}, {{1902783916686171233ull, 14205172400280728492ull, 2892972773272397602ull, 5545339388241629719ull}}, {{2378479895857714042ull, 8533093463496134807ull, 17451274021872660715ull, 6931674235302037148ull}}, {{16808157925104306264ull, 6054680810942780604ull, 3367348453631274278ull, 8664592794127546436ull}}, {{1281726666335415607ull, 17619233562121401590ull, 11327964820374322231ull, 5415370496329716522ull}}, {{10825530369774045317ull, 17412355934224364083ull, 4936583988613126981ull, 6769213120412145653ull}}, {{8920226943790168742ull, 7930386862498291392ull, 10782416004193796631ull, 8461516400515182066ull}}, {{5575141839868855464ull, 11874020816702513976ull, 11350696021048510798ull, 5288447750321988791ull}}, {{6968927299836069330ull, 5619153984023366662ull, 9576684007883250594ull, 6610559687902485989ull}}, {{17934531161649862470ull, 16247314516883984135ull, 16582541028281451146ull, 8263199609878107486ull}}, {{18126611003672245900ull, 14766257591479877988ull, 5752402124248519062ull, 5164499756173817179ull}}, {{4211519680880755759ull, 9234449952495071678ull, 2578816636883260924ull, 6455624695217271474ull}}, {{14487771637955720506ull, 11543062440618839597ull, 12446892832958851963ull, 8069530869021589342ull}}, {{11360700282936019269ull, 4908571016173080796ull, 3167622002171894573ull, 5043456793138493339ull}}, {{14200875353670024086ull, 10747399788643738899ull, 17794585557997031928ull, 6304320991423116673ull}}, {{13139408173660142203ull, 13434249735804673624ull, 8408173892214126198ull, 7880401239278895842ull}}, {{8212130108537588877ull, 3784720066450533111ull, 9866794701061216778ull, 4925250774549309901ull}}, {{5653476617244598192ull, 13954272119917942197ull, 16945179394753908876ull, 6156563468186637376ull}}, {{11678531789983135644ull, 17442840149897427746ull, 2734730169732834479ull, 7695704335233296721ull}}, {{11910768387166847682ull, 17819304121326974197ull, 13238421402151491309ull, 4809815209520810450ull}}, {{1053402428676395890ull, 8439072096376554035ull, 7324654715834588329ull, 6012269011901013063ull}}, {{15151811091127658574ull, 15160526138898080447ull, 4544132376365847507ull, 7515336264876266329ull}}, {{16387410959595868465ull, 7169485827597606327ull, 14369297781297124452ull, 4697085165547666455ull}}, {{15872577681067447677ull, 8961857284497007909ull, 13349936208194017661ull, 5871356456934583069ull}}, {{6005664046052145885ull, 15814007624048647791ull, 2852362204960358364ull, 7339195571168228837ull}}, {{2895394039137794452ull, 1320765456351258123ull, 8177138774627835860ull, 9173994463960286046ull}}, {{17950522338956979196ull, 10048850447074312134ull, 499025715715009508ull, 5733746539975178779ull}}, {{13214780886841448187ull, 12561063058842890168ull, 14458840199925925597ull, 7167183174968973473ull}}, {{16518476108551810234ull, 1866270768271448998ull, 4238492194625243285ull, 8958978968711216842ull}}, {{5712361549417493492ull, 3472262239383349576ull, 7260743640068164957ull, 5599361855444510526ull}}, {{7140451936771866865ull, 8952013817656574874ull, 18299301586939982004ull, 6999202319305638157ull}}, {{18148936957819609390ull, 11190017272070718592ull, 9039068928392813793ull, 8749002899132047697ull}}, {{11343085598637255869ull, 76231767403117264ull, 17178633126313978381ull, 5468126811957529810ull}}, {{14178856998296569836ull, 4706975727681284484ull, 12249919371037697168ull, 6835158514946912263ull}}, {{17723571247870712295ull, 5883719659601605605ull, 10700713195369733556ull, 8543948143683640329ull}}, {{13383075039132889136ull, 12900696824105779311ull, 18217160793174553232ull, 5339967589802275205ull}}, {{12117157780488723516ull, 16125871030132224139ull, 8936392936186027828ull, 6674959487252844007ull}}, {{10534761207183516491ull, 1710594713955728558ull, 6558805151805146882ull, 8343699359066055009ull}}, {{1972539736062309903ull, 5680807714649718253ull, 15628468265946686561ull, 5214812099416284380ull}}, {{7077360688505275283ull, 11712695661739535720ull, 1088841258723806585ull, 6518515124270355476ull}}, {{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull, 8148143905337944345ull}}, {{10140874056322134219ull, 503632201182659961ull, 12379872279446443655ull, 5092589940836215215ull}}, {{17287778588830055677ull, 14464598306760488663ull, 10863154330880666664ull, 6365737426045269019ull}}, {{16998037217610181693ull, 18080747883450610829ull, 8967256895173445426ull, 7957171782556586274ull}}, {{12929616270220057510ull, 15912153445584019672ull, 10216221577910791295ull, 4973232364097866421ull}}, {{16162020337775071888ull, 15278505788552636686ull, 17381962990815877023ull, 6216540455122333026ull}}, {{10979153385364064051ull, 14486446217263407954ull, 12504081701665070471ull, 7770675568902916283ull}}, {{11473656884279927936ull, 15971557913430711827ull, 5509208054326975092ull, 4856672230564322677ull}}, {{9730385086922522016ull, 1517703318078838168ull, 11498196086336106770ull, 6070840288205403346ull}}, {{12162981358653152520ull, 11120501184453323518ull, 5149373071065357654ull, 7588550360256754183ull}}, {{2990177330730832421ull, 2338627221855939295ull, 10135887197056930390ull, 4742843975160471364ull}}, {{17572779718695704238ull, 12146656064174699926ull, 12669858996321162987ull, 5928554968950589205ull}}, {{12742602611514854490ull, 10571634061790987004ull, 2002265690119290022ull, 7410693711188236507ull}}, {{17187498669051559864ull, 1995585270191978973ull, 17392317120820413928ull, 4631683569492647816ull}}, {{7649315281032286118ull, 2494481587739973717ull, 3293652327315965794ull, 5789604461865809771ull}}, {{14173330119717745552ull, 12341474021529742954ull, 17952123464427120954ull, 7237005577332262213ull}}, {{8493290612792406132ull, 6203470490057402885ull, 8605096275251737481ull, 9046256971665327767ull}}, {{7614149642208947785ull, 15406384102354346563ull, 12295714199673417781ull, 5653910607290829854ull}}, {{4906001034333796827ull, 5422922072660769492ull, 6146270712736996419ull, 7067388259113537318ull}}, {{6132501292917246033ull, 2166966572398573961ull, 16906210427776021332ull, 8834235323891921647ull}}, {{15362028354141748531ull, 10577726144603884533ull, 17483910545001095188ull, 5521397077432451029ull}}, {{5367477387395021951ull, 13222157680754855667ull, 8019830125969205273ull, 6901746346790563787ull}}, {{2097660715816389535ull, 2692639045661405872ull, 5413101639034118688ull, 8627182933488204734ull}}, {{1311037947385243460ull, 1682899403538378670ull, 17218246579678487892ull, 5391989333430127958ull}}, {{10862169471086330132ull, 2103624254422973337ull, 12299436187743334057ull, 6739986666787659948ull}}, {{18189397857285300569ull, 7241216336456104575ull, 15374295234679167571ull, 8424983333484574935ull}}, {{18285902688444394712ull, 2219917201071371407ull, 16526463549315561588ull, 5265614583427859334ull}}, {{18245692342128105486ull, 2774896501339214259ull, 11434707399789676177ull, 6582018229284824168ull}}, {{18195429409232743953ull, 8080306645101405728ull, 14293384249737095221ull, 8227522786606030210ull}}, {{11372143380770464971ull, 7356034662402072532ull, 13545051174513072417ull, 5142201741628768881ull}}, {{14215179225963081214ull, 13806729346429978569ull, 3096255912859176809ull, 6427752177035961102ull}}, {{3933915977171687805ull, 3423353627755309500ull, 13093691927928746820ull, 8034690221294951377ull}}, {{11682069522587080686ull, 11362968054201844245ull, 1266028427314384906ull, 5021681388309344611ull}}, {{767528847951687146ull, 4980338030897529499ull, 15417593589425144845ull, 6277101735386680763ull}}, {{14794469115221772644ull, 10837108557049299777ull, 14660305968354043152ull, 7846377169233350954ull}}, {{2329014169372526047ull, 6773192848155812361ull, 13774377248648664874ull, 4903985730770844346ull}}, {{7522953730143045462ull, 17689863097049541259ull, 7994599523956055284ull, 6129982163463555433ull}}, {{4792006144251418924ull, 3665584797602374958ull, 14604935423372457010ull, 7662477704329444291ull}}, {{16830061895439300539ull, 6902676516928872252ull, 6822241630394091679ull, 4789048565205902682ull}}, {{2590833295589574058ull, 4016659627733702412ull, 17751174074847390407ull, 5986310706507378352ull}}, {{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull, 7482888383134222941ull}}, {{8941617539820436589ull, 11784926618718307329ull, 4644732709119747947ull, 4676805239458889338ull}}, {{15788707943202933640ull, 10119472254970496257ull, 15029287923254460742ull, 5846006549323611672ull}}, {{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull, 7307508186654514591ull}}, {{16599405629006654981ull, 4282460352322930642ull, 14259890343230319102ull, 9134385233318143238ull}}, {{14986314536556547267ull, 16511595775483995363ull, 4300745446091561534ull, 5708990770823839524ull}}, {{14121207152268296180ull, 11416122682500218396ull, 5375931807614451918ull, 7136238463529799405ull}}, {{17651508940335370225ull, 5046781316270497187ull, 11331600777945452802ull, 8920298079412249256ull}}, {{8726350078495912439ull, 7765924341096448646ull, 7082250486215908001ull, 5575186299632655785ull}}, {{1684565561265114740ull, 14319091444797948712ull, 13464499126197272905ull, 6968982874540819731ull}}, {{2105706951581393425ull, 4063806250715272178ull, 12218937889319203228ull, 8711228593176024664ull}}, {{5927752863165758795ull, 11763250943551820919ull, 7636836180824502017ull, 5444517870735015415ull}}, {{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull, 6805647338418769269ull}}, {{8109192344089651141ull, 10309629067051791354ull, 10779635027931437426ull, 8507059173023461586ull}}, {{9679931233483419867ull, 11055204185334757500ull, 11348957910884536295ull, 5316911983139663491ull}}, {{12099914041854274834ull, 9207319213241058971ull, 9574511370178282465ull, 6646139978924579364ull}}, {{10513206533890455638ull, 16120835034978711618ull, 11968139212722853081ull, 8307674973655724205ull}}, {{11182440102108922678ull, 3157992869220612905ull, 9785930017165477128ull, 5192296858534827628ull}}, {{142992072353989635ull, 3947491086525766132ull, 12232412521456846410ull, 6490371073168534535ull}}, {{178740090442487044ull, 14157735895011983473ull, 10678829633393670108ull, 8112963841460668169ull}}, {{11640927602595024163ull, 18071956971237265478ull, 18203483566939513577ull, 5070602400912917605ull}}, {{5327787466389004395ull, 8754888158764418136ull, 8919296403392228260ull, 6338253001141147007ull}}, {{6659734332986255494ull, 10943610198455522670ull, 6537434485812897421ull, 7922816251426433759ull}}, {{17997392013398573396ull, 9145599383248395620ull, 11003425581274142744ull, 4951760157141521099ull}}, {{4049995943038665129ull, 11431999229060494526ull, 9142595958165290526ull, 6189700196426901374ull}}, {{14285866965653107219ull, 5066626999470842349ull, 2204872910851837350ull, 7737125245533626718ull}}, {{11234509862746885964ull, 17001699929951440180ull, 15213103624564562055ull, 4835703278458516698ull}}, {{14043137328433607455ull, 16640438894011912321ull, 9793007493850926761ull, 6044629098073145873ull}}, {{3718863605259845606ull, 6965490562232726690ull, 16852945385741046356ull, 7555786372591432341ull}}, {{6935975771714791408ull, 13576803638250229989ull, 12838933875301847924ull, 4722366482869645213ull}}, {{13281655733070877164ull, 16971004547812787486ull, 2213609288845146193ull, 5902958103587056517ull}}, {{7378697629483820647ull, 7378697629483820646ull, 7378697629483820646ull, 7378697629483820646ull}}, {{0ull, 0ull, 0ull, 9223372036854775808ull}}, {{0ull, 0ull, 0ull, 5764607523034234880ull}}, {{0ull, 0ull, 0ull, 7205759403792793600ull}}, {{0ull, 0ull, 0ull, 9007199254740992000ull}}, {{0ull, 0ull, 0ull, 5629499534213120000ull}}, {{0ull, 0ull, 0ull, 7036874417766400000ull}}, {{0ull, 0ull, 0ull, 8796093022208000000ull}}, {{0ull, 0ull, 0ull, 5497558138880000000ull}}, {{0ull, 0ull, 0ull, 6871947673600000000ull}}, {{0ull, 0ull, 0ull, 8589934592000000000ull}}, {{0ull, 0ull, 0ull, 5368709120000000000ull}}, {{0ull, 0ull, 0ull, 6710886400000000000ull}}, {{0ull, 0ull, 0ull, 8388608000000000000ull}}, {{0ull, 0ull, 0ull, 5242880000000000000ull}}, {{0ull, 0ull, 0ull, 6553600000000000000ull}}, {{0ull, 0ull, 0ull, 8192000000000000000ull}}, {{0ull, 0ull, 0ull, 5120000000000000000ull}}, {{0ull, 0ull, 0ull, 6400000000000000000ull}}, {{0ull, 0ull, 0ull, 8000000000000000000ull}}, {{0ull, 0ull, 0ull, 5000000000000000000ull}}, {{0ull, 0ull, 0ull, 6250000000000000000ull}}, {{0ull, 0ull, 0ull, 7812500000000000000ull}}, {{0ull, 0ull, 0ull, 4882812500000000000ull}}, {{0ull, 0ull, 0ull, 6103515625000000000ull}}, {{0ull, 0ull, 0ull, 7629394531250000000ull}}, {{0ull, 0ull, 0ull, 4768371582031250000ull}}, {{0ull, 0ull, 0ull, 5960464477539062500ull}}, {{0ull, 0ull, 0ull, 7450580596923828125ull}}, {{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}}, {{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}}, {{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}}, {{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}}, {{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}}, {{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}}, {{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}}, {{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}}, {{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}}, {{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}}, {{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}}, {{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}}, {{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}}, {{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}}, {{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}}, {{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}}, {{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}}, {{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}}, {{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}}, {{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}}, {{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}}, {{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}}, {{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}}, {{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}}, {{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}}, {{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}}, {{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}}, {{0ull, 9223372036854775808ull, 18445154669448718262ull, 7523163845262640050ull}}, {{0ull, 1152921504606846976ull, 16139907686832836818ull, 4701977403289150031ull}}, {{0ull, 10664523917613334528ull, 15563198590113658118ull, 5877471754111437539ull}}, {{0ull, 4107282860161892352ull, 14842312219214684744ull, 7346839692639296924ull}}, {{0ull, 5134103575202365440ull, 106146200308804314ull, 9183549615799121156ull}}, {{0ull, 7820500752928866304ull, 9289713412047778504ull, 5739718509874450722ull}}, {{0ull, 9775625941161082880ull, 2388769728204947322ull, 7174648137343063403ull}}, {{0ull, 2996160389596577792ull, 16821020215538347865ull, 8968310171678829253ull}}, {{0ull, 13401815289566330880ull, 12818980643925161367ull, 5605193857299268283ull}}, {{0ull, 12140583093530525696ull, 11412039786479063805ull, 7006492321624085354ull}}, {{0ull, 1340670811630993408ull, 5041677696244053949ull, 8758115402030106693ull}}, {{0ull, 3143762266483064832ull, 5456891569366227670ull, 5473822126268816683ull}}, {{0ull, 13153074869958606848ull, 2209428443280396683ull, 6842277657836020854ull}}, {{0ull, 11829657569020870656ull, 11985157590955271662ull, 8552847072295026067ull}}, {{0ull, 2781849962210656256ull, 5184880485133350837ull, 5345529420184391292ull}}, {{0ull, 8088998471190708224ull, 6481100606416688546ull, 6681911775230489115ull}}, {{0ull, 887876052133609472ull, 3489689739593472779ull, 8352389719038111394ull}}, {{0ull, 16695823597079363584ull, 6792742105673308390ull, 5220243574398819621ull}}, {{0ull, 11646407459494428672ull, 13102613650519023392ull, 6525304467998524526ull}}, {{0ull, 14558009324368035840ull, 7154895026294003432ull, 8156630584998155658ull}}, {{0ull, 9098755827730022400ull, 9083495409861140049ull, 5097894115623847286ull}}, {{0ull, 15985130803089915904ull, 2130997225471649253ull, 6372367644529809108ull}}, {{0ull, 6146355448580231168ull, 2663746531839561567ull, 7965459555662261385ull}}, {{0ull, 10759001183003726336ull, 13194056628468195739ull, 4978412222288913365ull}}, {{0ull, 8837065460327270016ull, 2657512730303080962ull, 6223015277861141707ull}}, {{0ull, 1822959788554311712ull, 17156948968161014915ull, 7778769097326427133ull}}, {{0ull, 17280250932342302484ull, 13028936114314328273ull, 4861730685829016958ull}}, {{0ull, 7765255610145714393ull, 7062798106038134534ull, 6077163357286271198ull}}, {{4611686018427387904ull, 483197475827367183ull, 18051869669402443976ull, 7596454196607838997ull}}, {{9799832789158199296ull, 301998422392104489ull, 13588261552590221437ull, 4747783872879899373ull}}, {{16861477004875137024ull, 4989184046417518515ull, 3150268885455613084ull, 5934729841099874217ull}}, {{16465160237666533376ull, 6236480058021898144ull, 8549522125246904259ull, 7418412301374842771ull}}, {{10290725148541583360ull, 1591957027049992388ull, 3037608319065621210ull, 4636507688359276732ull}}, {{12863406435676979200ull, 11213318320667266293ull, 3797010398832026512ull, 5795634610449095915ull}}, {{2244199989314060288ull, 14016647900834082867ull, 134576980112645236ull, 7244543263061369894ull}}, {{16640308041924739072ull, 17520809876042603583ull, 9391593261995582353ull, 9055679078826712367ull}}, {{17317721553844043776ull, 4032977144885545383ull, 12787274816388320827ull, 5659799424266695229ull}}, {{17035465923877666816ull, 429535412679543825ull, 2149035465203237322ull, 7074749280333369037ull}}, {{7459274349564919808ull, 9760291302704205590ull, 7297980349931434556ull, 8843436600416711296ull}}, {{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull, 5527147875260444560ull}}, {{9286322599418134528ull, 5319384571023966665ull, 5701547148383933247ull, 6908934844075555700ull}}, {{16219589267700056064ull, 2037544695352570427ull, 7126933935479916559ull, 8636168555094444625ull}}, {{7831400283098841088ull, 8190994462236438373ull, 15983548755743417609ull, 5397605346934027890ull}}, {{14400936372300939264ull, 14850429096222935870ull, 10756063907824496203ull, 6747006683667534863ull}}, {{8777798428521398272ull, 13951350351851281934ull, 8833393866353232350ull, 8433758354584418579ull}}, {{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull, 5271098971615261612ull}}, {{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull, 6588873714519077015ull}}, {{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull, 8236092143148846269ull}}, {{6186205317594251264ull, 3867513670791002824ull, 2563215182517940054ull, 5147557589468028918ull}}, {{7732756646992814080ull, 14057764125343529338ull, 12427391015002200875ull, 6434446986835036147ull}}, {{442573771886241792ull, 12960519138252023769ull, 10922552750325363190ull, 8043058733543795184ull}}, {{11805823653497370880ull, 3488638442980126951ull, 6826595468953351994ull, 5026911708464871990ull}}, {{10145593548444325696ull, 13584170090579934497ull, 17756616373046465800ull, 6283639635581089987ull}}, {{17293677953982795024ull, 16980212613224918121ull, 17584084447880694346ull, 7854549544476362484ull}}, {{3891019693598165034ull, 15224318901692961730ull, 1766680743070658158ull, 4909093465297726553ull}}, {{14087146653852482101ull, 9807026590261426354ull, 6820036947265710602ull, 6136366831622158191ull}}, {{8385561280460826818ull, 3035411200972007135ull, 3913360165654750349ull, 7670458539527697739ull}}, {{12158504827929098618ull, 4202975009821198411ull, 140007094320525016ull, 4794036587204811087ull}}, {{10586445016483985368ull, 5253718762276498014ull, 14010066923182819982ull, 5992545734006013858ull}}, {{4009684233750205902ull, 15790520489700398326ull, 8289211617123749169ull, 7490682167507517323ull}}, {{16341110701376042401ull, 2951546278421667097ull, 2874914251488649279ull, 4681676354692198327ull}}, {{6591330321437889289ull, 17524490903309247584ull, 17428700869642975310ull, 5852095443365247908ull}}, {{8239162901797361611ull, 12682241592281783672ull, 3339132013344167522ull, 7315119304206559886ull}}, {{10298953627246702013ull, 6629429953497453782ull, 13397287053534985211ull, 9143899130258199857ull}}, {{1825159998601800855ull, 1837550711722214662ull, 1455775380818283901ull, 5714936956411374911ull}}, {{11504822035107026876ull, 6908624408080156231ull, 15654777281305018588ull, 7143671195514218638ull}}, {{9769341525456395691ull, 8635780510100195289ull, 10345099564776497427ull, 8929588994392773298ull}}, {{17635053499478717067ull, 3091519809598928103ull, 11077373246412698796ull, 5580993121495483311ull}}, {{17432130855921008430ull, 3864399761998660129ull, 9235030539588485591ull, 6976241401869354139ull}}, {{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull, 8720301752336692674ull}}, {{9583626965064323420ull, 2442601561758029738ull, 8944249865963774832ull, 5450188595210432921ull}}, {{2756161669475628467ull, 3053251952197537173ull, 15791998350882106444ull, 6812735744013041151ull}}, {{8056888105271923487ull, 3816564940246921466ull, 15128311920175245151ull, 8515919680016301439ull}}, {{9647241084222340084ull, 9302882115295407772ull, 16372723977750610075ull, 5322449800010188399ull}}, {{12059051355277925104ull, 7016916625691871811ull, 15854218953760874690ull, 6653062250012735499ull}}, {{10462128175670018476ull, 17994517818969615572ull, 15206087673773705458ull, 8316327812515919374ull}}, {{15762202146648537356ull, 15858259655283397636ull, 4892118777681178007ull, 5197704882822449609ull}}, {{1256008609601120079ull, 15211138550676859142ull, 10726834490528860413ull, 6497131103528062011ull}}, {{10793382798856175906ull, 5178865133063910215ull, 8796857094733687613ull, 8121413879410077514ull}}, {{13663393276926191798ull, 5542633717378637836ull, 10109721702635942662ull, 5075883674631298446ull}}, {{17079241596157739747ull, 16151664183578073103ull, 3413780091440152519ull, 6344854593289123058ull}}, {{16737365976769786780ull, 15577894211045203475ull, 13490597151154966457ull, 7931068241611403822ull}}, {{8155010726267422785ull, 2818654854262170316ull, 3819937201044466132ull, 4956917651007127389ull}}, {{10193763407834278482ull, 3523318567827712895ull, 9386607519732970569ull, 6196147063758909236ull}}, {{8130518241365460198ull, 9015834228212029023ull, 11733259399666213211ull, 7745183829698636545ull}}, {{11999102928494494480ull, 3329053383418824187ull, 415758097150301401ull, 4840739893561647841ull}}, {{10387192642190730196ull, 8773002747700918138ull, 5131383639865264655ull, 6050924866952059801ull}}, {{3760618765883636937ull, 6354567416198759769ull, 11025915568258968723ull, 7563656083690074751ull}}, {{13879601774745742846ull, 1665761625910530903ull, 13808726257802937308ull, 4727285052306296719ull}}, {{12737816200004790653ull, 2082202032388163629ull, 12649221803826283731ull, 5909106315382870899ull}}, {{2087212194723824604ull, 16437810595767368249ull, 11199841236355466759ull, 7386382894228588624ull}}, {{12833722667770860138ull, 17191160649995687011ull, 6999900772722166724ull, 4616489308892867890ull}}, {{11430467316286187268ull, 3042206738785057148ull, 17973248002757484214ull, 5770611636116084862ull}}, {{14288084145357734085ull, 13026130460336097243ull, 13243187966592079459ull, 7213264545145106078ull}}, {{13248419163269779702ull, 11670977056992733650ull, 7330612921385323516ull, 9016580681431382598ull}}, {{12891947995471000218ull, 16517732697475234339ull, 18416691131147990909ull, 5635362925894614123ull}}, {{11503248975911362368ull, 6812107816561879212ull, 18409177895507600733ull, 7044203657368267654ull}}, {{14379061219889202960ull, 13126820789129736919ull, 13788100332529725108ull, 8805254571710334568ull}}, {{15904442290071833706ull, 17427635030060861382ull, 8617562707831078192ull, 5503284107318959105ull}}, {{10657180825735016325ull, 3337799713866525112ull, 15383639403216235645ull, 6879105134148698881ull}}, {{13321476032168770406ull, 8783935660760544294ull, 5394491198738130844ull, 8598881417685873602ull}}, {{3714236501678093600ull, 14713331824830115992ull, 7983243017638719681ull, 5374300886053671001ull}}, {{4642795627097617000ull, 4556606725755481278ull, 14590739790475787506ull, 6717876107567088751ull}}, {{15026866570726797057ull, 14919130444049127405ull, 13626738719667346478ull, 8397345134458860939ull}}, {{11697634615917942113ull, 4712770509103316724ull, 6210868690578397597ull, 5248340709036788087ull}}, {{14622043269897427641ull, 10502649154806533809ull, 3151899844795609092ull, 6560425886295985109ull}}, {{4442496032089620839ull, 13128311443508167262ull, 8551560824421899269ull, 8200532357869981386ull}}, {{16611618075338176737ull, 10511037661406298490ull, 9956411533691074947ull, 5125332723668738366ull}}, {{11541150557317945113ull, 8527111058330485209ull, 3222142380259067876ull, 6406665904585922958ull}}, {{591380141365267679ull, 10658888822913106512ull, 13251050012178610653ull, 8008332380732403697ull}}, {{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull, 5005207737957752311ull}}, {{9685387772296391182ull, 1986188617563206094ull, 15540529592745350965ull, 6256509672447190388ull}}, {{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull, 7820637090558987986ull}}, {{6413787692499708635ull, 9045699637415760105ull, 5223509716691223585ull, 4887898181599367491ull}}, {{12628920634052023698ull, 15918810565197088035ull, 1917701127436641577ull, 6109872726999209364ull}}, {{11174464774137641718ull, 6063455151214196332ull, 2397126409295801972ull, 7637340908749011705ull}}, {{16207412520690801882ull, 13013031506363648515ull, 13027419051878345992ull, 4773338067968132315ull}}, {{15647579632436114448ull, 16266289382954560644ull, 11672587796420544586ull, 5966672584960165394ull}}, {{1112730466835591444ull, 11109489691838424998ull, 5367362708670904925ull, 7458340731200206743ull}}, {{14530514597054408365ull, 9249274066612709575ull, 10272130720560397434ull, 4661462957000129214ull}}, {{13551457227890622552ull, 2338220546411111161ull, 3616791363845720985ull, 5826828696250161518ull}}, {{3104263479581114478ull, 7534461701441276856ull, 13744361241661927039ull, 7283535870312701897ull}}, {{3880329349476393097ull, 4806391108374208166ull, 3345393496795245087ull, 9104419837890877372ull}}, {{16260263898704909398ull, 9921523470374961959ull, 11314242972351803987ull, 5690262398681798357ull}}, {{15713643854953748843ull, 7790218319541314545ull, 307745660157591272ull, 7112827998352247947ull}}, {{5806996763410022342ull, 9737772899426643182ull, 14219740130479152802ull, 8891034997940309933ull}}, {{17464431032413427676ull, 10697794080569039892ull, 11193180590763164453ull, 5556896873712693708ull}}, {{3383794716807232979ull, 17983928619138687770ull, 13991475738453955566ull, 6946121092140867135ull}}, {{13453115432863817032ull, 13256538737068583904ull, 12877658654640056554ull, 8682651365176083919ull}}, {{8408197145539885645ull, 12897022729095252844ull, 14966065686791117202ull, 5426657103235052449ull}}, {{10510246431924857056ull, 6897906374514290247ull, 4872524053206732791ull, 6783321379043815562ull}}, {{8526122021478683416ull, 4010696949715474905ull, 15314027103363191797ull, 8479151723804769452ull}}, {{16858041309492646895ull, 4812528602785865767ull, 347894902747219065ull, 5299469827377980908ull}}, {{16460865618438420715ull, 10627346771909720113ull, 434868628434023831ull, 6624337284222476135ull}}, {{6741023967765862181ull, 8672497446459762238ull, 14378643840824693501ull, 8280421605278095168ull}}, {{18048198035135827576ull, 7726153913251045350ull, 8986652400515433438ull, 5175263503298809480ull}}, {{13336875507065008661ull, 434320354709030880ull, 11233315500644291798ull, 6469079379123511850ull}}, {{16671094383831260826ull, 9766272480241064408ull, 4818272338950588939ull, 8086349223904389813ull}}, {{10419433989894538017ull, 3798077290936971303ull, 5317263221057812039ull, 5053968264940243633ull}}, {{8412606468940784617ull, 135910595243826225ull, 11258265044749652953ull, 6317460331175304541ull}}, {{15127444104603368675ull, 4781574262482170685ull, 237773250654902479ull, 7896825413969130677ull}}, {{11760495574590799374ull, 9906012941692438534ull, 2454451290873008001ull, 4935515883730706673ull}}, {{5477247431383723409ull, 16994202195542936072ull, 7679750132018647905ull, 6169394854663383341ull}}, {{6846559289229654262ull, 7407694689146506378ull, 14211373683450697786ull, 7711743568329229176ull}}, {{8890785574195921818ull, 9241495199143954390ull, 8882108552156686116ull, 4819839730205768235ull}}, {{1890109930890126464ull, 11551868998929942988ull, 6490949671768469741ull, 6024799662757210294ull}}, {{2362637413612658080ull, 604778193380265023ull, 17337059126565362985ull, 7530999578446512867ull}}, {{8394177411148993156ull, 11907201416931135399ull, 8529818944889657913ull, 4706874736529070542ull}}, {{5881035745508853541ull, 1048943715881755537ull, 1438901644257296584ull, 5883593420661338178ull}}, {{11962980700313454830ull, 1311179644852194421ull, 11021999092176396538ull, 7354491775826672722ull}}, {{1118667820109654825ull, 10862346592920018835ull, 4554126828365719864ull, 9193114719783340903ull}}, {{16840068452064391930ull, 6788966620575011771ull, 9763858295369656771ull, 5745696699864588064ull}}, {{16438399546653102009ull, 3874522257291376810ull, 12204822869212070964ull, 7182120874830735080ull}}, {{11324627396461601703ull, 4843152821614221013ull, 15256028586515088705ull, 8977651093538418850ull}}, {{9383735132002195016ull, 14556185559577357893ull, 14146703884999318344ull, 5611031933461511781ull}}, {{16341354933430131674ull, 18195231949471697366ull, 3848321800966984218ull, 7013789916826889727ull}}, {{11203321629932888785ull, 13520667899984845900ull, 198716232781342369ull, 8767237396033612159ull}}, {{16225448055562831299ull, 1532888409849446831ull, 7041726673129420837ull, 5479523372521007599ull}}, {{15670124051026151219ull, 6527796530739196443ull, 4190472322984388142ull, 6849404215651259499ull}}, {{14975969045355301120ull, 17383117700278771362ull, 626404385303097273ull, 8561755269564074374ull}}, {{13971666671774451104ull, 3946919535033150245ull, 14226560796096599508ull, 5351097043477546483ull}}, {{3629525284435900168ull, 4933649418791437807ull, 13171514976693361481ull, 6688871304346933104ull}}, {{18371964660827038922ull, 10778747791916685162ull, 16464393720866701851ull, 8361089130433666380ull}}, {{16094163931444287230ull, 4430874360734234274ull, 1066874038686912849ull, 5225680706521041488ull}}, {{10894332877450583230ull, 10150278969345180747ull, 1333592548358641061ull, 6532100883151301860ull}}, {{9006230078385841133ull, 17299534730108863838ull, 1666990685448301326ull, 8165126103939127325ull}}, {{1017207780563762804ull, 6200523187890651995ull, 3347712187618882281ull, 5103203814961954578ull}}, {{15106567780986867217ull, 12362340003290702897ull, 13408012271378378659ull, 6379004768702443222ull}}, {{5048151670951420310ull, 10841238985685990718ull, 7536643302368197516ull, 7973755960878054028ull}}, {{16990152849626801406ull, 15999146402908520006ull, 13933774100834899255ull, 4983597475548783767ull}}, {{12014319025178725949ull, 15387246985208262104ull, 12805531607616236165ull, 6229496844435979709ull}}, {{15017898781473407436ull, 5399000676228163918ull, 2171856454238131495ull, 7786871055544974637ull}}, {{4774500719993491744ull, 10291904450283684305ull, 3663253293112526136ull, 4866794409715609148ull}}, {{10579811918419252584ull, 12864880562854605381ull, 4579066616390657670ull, 6083493012144511435ull}}, {{17836450916451453633ull, 6857728666713480918ull, 1112147252060934184ull, 7604366265180639294ull}}, {{6536095804354770617ull, 4286080416695925574ull, 14530150087820247577ull, 4752728915737899558ull}}, {{17393491792298239079ull, 9969286539297294871ull, 8939315572920533663ull, 5940911144672374448ull}}, {{17130178721945410945ull, 7849922155694230685ull, 11174144466150667079ull, 7426138930840468060ull}}, {{13012204710429575793ull, 11823730374949976034ull, 16207212328198942732ull, 4641336831775292537ull}}, {{7041883851182193933ull, 14779662968687470043ull, 6423957354966514703ull, 5801671039719115672ull}}, {{4190668795550354512ull, 13862892692431949650ull, 8029946693708143379ull, 7252088799648894590ull}}, {{14461708031292718948ull, 12716929847112549158ull, 814061330280403416ull, 9065110999561118238ull}}, {{4426881501130561438ull, 7948081154445343224ull, 14343846386707415847ull, 5665694374725698898ull}}, {{5533601876413201798ull, 5323415424629291126ull, 8706435946529494001ull, 7082117968407123623ull}}, {{16140374382371278055ull, 11265955299214001811ull, 6271358914734479597ull, 8852647460508904529ull}}, {{7781890979768354833ull, 9347065071222445084ull, 15448814367777519508ull, 5532904662818065330ull}}, {{9727363724710443541ull, 11683831339028056355ull, 10087645922867123577ull, 6916130828522581663ull}}, {{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull, 8645163535653227079ull}}, {{13940571185267692384ull, 481081949064316707ull, 11916198643363904711ull, 5403227209783266924ull}}, {{12814027963157227576ull, 14436410491612559596ull, 14895248304204880888ull, 6754034012229083655ull}}, {{16017534953946534470ull, 18045513114515699495ull, 14007374361828713206ull, 8442542515286354569ull}}, {{16928488373857665900ull, 6666759678144924280ull, 1837079948501863898ull, 5276589072053971606ull}}, {{2713866393612530759ull, 17556821634535931159ull, 11519721972482105680ull, 6595736340067464507ull}}, {{17227391047297827161ull, 3499282969460362332ull, 9787966447175244197ull, 8244670425084330634ull}}, {{1543747367706366168ull, 4492894865126420410ull, 10729165047911915527ull, 5152919015677706646ull}}, {{11153056246487733517ull, 1004432562980637608ull, 4188084273035118601ull, 6441148769597133308ull}}, {{13941320308109666897ull, 5867226722153184914ull, 5235105341293898251ull, 8051435961996416635ull}}, {{13325011210995929715ull, 1361173692132046619ull, 966097829094992455ull, 5032147476247760397ull}}, {{12044577995317524239ull, 15536525170447221986ull, 5819308304796128472ull, 6290184345309700496ull}}, {{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull, 7862730431637125620ull}}, {{1339376026593886980ull, 7526224270984504273ull, 13769706649976751177ull, 4914206519773203512ull}}, {{6285906051669746629ull, 14019466357158018245ull, 17212133312470938971ull, 6142758149716504390ull}}, {{12469068583014571190ull, 12912646928020134902ull, 12291794603733897906ull, 7678447687145630488ull}}, {{3181481845956719090ull, 12682090348439972218ull, 7682371627333686191ull, 4799029804466019055ull}}, {{13200224344300674670ull, 11240926917122577368ull, 4991278515739719835ull, 5998787255582523819ull}}, {{16500280430375843337ull, 9439472627975833806ull, 1627412126247261890ull, 7498484069478154774ull}}, {{5700989250557514182ull, 10511356410912284033ull, 14852190634186702393ull, 4686552543423846733ull}}, {{11737922581624280632ull, 17750881532067742945ull, 4730180237451214279ull, 5858190679279808417ull}}, {{837345171748187077ull, 17576915896657290778ull, 10524411315241405753ull, 7322738349099760521ull}}, {{10270053501540009654ull, 8136086815539449760ull, 17767200162479145096ull, 9153422936374700651ull}}, {{6418783438462506034ull, 5085054259712156100ull, 8798657092335771733ull, 5720889335234187907ull}}, {{8023479298078132543ull, 10968003843067583029ull, 6386635346992326762ull, 7151111669042734884ull}}, {{14641035141025053582ull, 4486632766979702978ull, 7983294183740408453ull, 8938889586303418605ull}}, {{13762332981568046393ull, 5109988488576008313ull, 7295401874051449235ull, 5586805991439636628ull}}, {{3367858171677894279ull, 1775799592292622488ull, 9119252342564311544ull, 6983507489299545785ull}}, {{4209822714597367849ull, 2219749490365778110ull, 16010751446632777334ull, 8729384361624432231ull}}, {{16466197251905518618ull, 15222401486760775030ull, 16924248681786567689ull, 5455865226015270144ull}}, {{11359374528027122464ull, 5192943803168805076ull, 2708566778523657996ull, 6819831532519087681ull}}, {{14199218160033903080ull, 6491179753961006345ull, 7997394491581960399ull, 8524789415648859601ull}}, {{1956982322380107569ull, 10974516373866710822ull, 16527586603307195009ull, 5327993384780537250ull}}, {{11669599939829910269ull, 18329831485760776431ull, 11436111217279217953ull, 6659991730975671563ull}}, {{9975313906359999932ull, 9077231301918806827ull, 9683453003171634538ull, 8324989663719589454ull}}, {{3928728182261306006ull, 10284955582126642171ull, 1440472108554883682ull, 5203118539824743409ull}}, {{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull, 6503898174780929261ull}}, {{9597402298603831562ull, 18376086106286572344ull, 12627031211078628537ull, 8129872718476161576ull}}, {{5998376436627394726ull, 4567524788788025859ull, 7891894506924142836ull, 5081170449047600985ull}}, {{2886284527356855504ull, 5709405985985032324ull, 14476554152082566449ull, 6351463061309501231ull}}, {{3607855659196069380ull, 11748443500908678309ull, 13484006671675820157ull, 7939328826636876539ull}}, {{4560752796211237315ull, 9648620197281617895ull, 6121661160583693646ull, 4962080516648047837ull}}, {{1089254976836658739ull, 2837403209747246561ull, 12263762469157004962ull, 6202600645810059796ull}}, {{5973254739473211328ull, 12770126049038834009ull, 15329703086446256202ull, 7753250807262574745ull}}, {{15262499258239226840ull, 12593014799076659159ull, 2663535401387828270ull, 4845781754539109216ull}}, {{14466438054371645646ull, 6517896461991048141ull, 3329419251734785338ull, 6057227193173886520ull}}, {{4247989512682393345ull, 17370742614343585985ull, 4161774064668481672ull, 7571533991467358150ull}}, {{14184208491494965601ull, 10856714133964741240ull, 16436166845699964757ull, 4732208744667098843ull}}, {{17730260614368707001ull, 18182578685883314454ull, 15933522538697568042ull, 5915260930833873554ull}}, {{12939453731106107943ull, 13504851320499367260ull, 10693531136517184245ull, 7394076163542341943ull}}, {{17310530618796093273ull, 10746375084525798489ull, 13600985987964322009ull, 4621297602213963714ull}}, {{7803105218212952879ull, 18044654874084636016ull, 7777860448100626703ull, 5776622002767454643ull}}, {{9753881522766191098ull, 17944132574178407116ull, 5110639541698395475ull, 7220777503459318304ull}}, {{12192351903457738873ull, 17818479699295620991ull, 6388299427122994344ull, 9025971879324147880ull}}, {{14537748967302168652ull, 11136549812059763119ull, 3992687141951871465ull, 5641232424577592425ull}}, {{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull, 7051540530721990531ull}}, {{12338939219948015734ull, 107036512240675234ull, 7391495163906646141ull, 8814425663402488164ull}}, {{12323523030894897738ull, 2372740829364115973ull, 13843056514296429646ull, 5509016039626555102ull}}, {{1569345733336458460ull, 12189298073559920775ull, 8080448606015761249ull, 6886270049533193878ull}}, {{15796740221952736787ull, 1401564536667737256ull, 877188720664925754ull, 8607837561916492348ull}}, {{9872962638720460492ull, 5487663853844723689ull, 9771614987270354404ull, 5379898476197807717ull}}, {{16952889316827963519ull, 6859579817305904611ull, 16826204752515330909ull, 6724873095247259646ull}}, {{16579425627607566495ull, 13186160790059768668ull, 11809383903789387828ull, 8406091369059074558ull}}, {{1138768980399953251ull, 17464722530642131226ull, 2769178921440979488ull, 5253807105661921599ull}}, {{10646833262354717372ull, 3384159089593112416ull, 17296531707083388073ull, 6567258882077401998ull}}, {{13308541577943396715ull, 8841884880418778424ull, 12397292596999459283ull, 8209073602596752498ull}}, {{8317838486214622947ull, 3220335041048042563ull, 12359993891552049956ull, 5130671001622970311ull}}, {{5785612089340890780ull, 4025418801310053204ull, 10838306346012674541ull, 6413338752028712889ull}}, {{7232015111676113475ull, 9643459520064954409ull, 18159568950943231080ull, 8016673440035891111ull}}, {{16049224490866040682ull, 6027162200040596505ull, 18267259621980601281ull, 5010420900022431944ull}}, {{6226472558300387140ull, 12145638768478133536ull, 4387330453766199985ull, 6263026125028039931ull}}, {{7783090697875483925ull, 1346990405315503208ull, 872477048780362078ull, 7828782656285049914ull}}, {{4864431686172177453ull, 14676927058604353217ull, 5156984173915114202ull, 4892989160178156196ull}}, {{10692225626142609721ull, 9122786786400665713ull, 6446230217393892753ull, 6116236450222695245ull}}, {{17976968051105650055ull, 16015169501428220045ull, 12669473790169753845ull, 7645295562778369056ull}}, {{13541448041154725236ull, 12315323947606331480ull, 7918421118856096153ull, 4778309726736480660ull}}, {{16926810051443406545ull, 1559096879225750638ull, 9898026398570120192ull, 5972887158420600825ull}}, {{11935140527449482373ull, 1948871099032188298ull, 16984219016640038144ull, 7466108948025751031ull}}, {{12071148848083314388ull, 1218044436895117686ull, 17532665913041105696ull, 4666318092516094394ull}}, {{5865564023249367176ull, 1522555546118897108ull, 12692460354446606312ull, 5832897615645117993ull}}, {{7331955029061708970ull, 1903194432648621385ull, 2030517387776094178ull, 7291122019556397492ull}}, {{13776629804754524117ull, 11602365077665552539ull, 2538146734720117722ull, 9113902524445496865ull}}, {{6304550618757883621ull, 11863164191968358241ull, 13115556755268543336ull, 5696189077778435540ull}}, {{12492374291874742430ull, 14828955239960447801ull, 16394445944085679170ull, 7120236347223044425ull}}, {{1780409809561264326ull, 9312822013095783944ull, 6657999374824935251ull, 8900295434028805532ull}}, {{1112756130975790204ull, 3514670748971171013ull, 13384621646120360340ull, 5562684646268003457ull}}, {{6002631182147125659ull, 4393338436213963766ull, 2895719002368286713ull, 6953355807835004322ull}}, {{16726661014538682881ull, 10103359063694842611ull, 12843020789815134199ull, 8691694759793755402ull}}, {{8148320124872982849ull, 13232128442450358488ull, 12638574012061846778ull, 5432309224871097126ull}}, {{10185400156091228561ull, 7316788516208172302ull, 6574845478222532665ull, 6790386531088871408ull}}, {{3508378158259259893ull, 13757671663687603282ull, 8218556847778165831ull, 8487983163861089260ull}}, {{6804422367339425337ull, 15516073817445833907ull, 14359970066716129452ull, 5304989477413180787ull}}, {{3893841940746893768ull, 948348198097740768ull, 13338276564967773912ull, 6631236846766475984ull}}, {{4867302425933617209ull, 1185435247622175960ull, 16672845706209717390ull, 8289046058458094980ull}}, {{3042064016208510756ull, 14575955085046023687ull, 1197156529526297560ull, 5180653786536309363ull}}, {{17637638075542802157ull, 18219943856307529608ull, 15331503717190035662ull, 6475817233170386703ull}}, {{3600303520718951080ull, 13551557783529636203ull, 14552693628060156674ull, 8094771541462983379ull}}, {{18391090764945202089ull, 13081409633133410530ull, 6789590508323903969ull, 5059232213414364612ull}}, {{13765491419326726803ull, 2516703986134599451ull, 8486988135404879962ull, 6324040266767955765ull}}, {{12595178255731020600ull, 12369252019523025122ull, 15220421187683487856ull, 7905050333459944706ull}}, {{12483672428259275779ull, 7730782512201890701ull, 14124449260729567814ull, 4940656458412465441ull}}, {{1769532480041931012ull, 440106103397587569ull, 3820503520629796056ull, 6175820573015581802ull}}, {{6823601618479801669ull, 550132629246984461ull, 13999001437642020878ull, 7719775716269477252ull}}, {{6570594020763569995ull, 14178890948561529000ull, 17972747935381038856ull, 4824859822668423282ull}}, {{8213242525954462494ull, 17723613685701911250ull, 13242562882371522762ull, 6031074778335529103ull}}, {{1043181120588302309ull, 12931145070272613255ull, 11941517584537015549ull, 7538843472919411379ull}}, {{7569517228008770799ull, 10387808678134077236ull, 5157605481121940766ull, 4711777170574632112ull}}, {{9461896535010963499ull, 3761388810812820737ull, 6447006851402425958ull, 5889721463218290140ull}}, {{16439056687191092278ull, 13925108050370801729ull, 8058758564253032447ull, 7362151829022862675ull}}, {{6713762803706701635ull, 12794699044536114258ull, 5461762186888902655ull, 9202689786278578344ull}}, {{8807787770744076426ull, 14914215930476153267ull, 3413601366805564159ull, 5751681116424111465ull}}, {{6398048695002707629ull, 14031083894667803680ull, 8878687726934343103ull, 7189601395530139331ull}}, {{7997560868753384536ull, 12927168849907366696ull, 6486673640240540975ull, 8987001744412674164ull}}, {{4998475542970865335ull, 14997009558833186041ull, 13277543062005113917ull, 5616876090257921352ull}}, {{10859780447140969573ull, 4911203893259318839ull, 16596928827506392397ull, 7021095112822401690ull}}, {{8963039540498824062ull, 10750690885001536453ull, 11522788997528214688ull, 8776368891028002113ull}}, {{7907742722025458991ull, 6719181803125960283ull, 284214095814052324ull, 5485230556892501321ull}}, {{5272992384104435834ull, 8398977253907450354ull, 4966953638194953309ull, 6856538196115626651ull}}, {{15814612516985320601ull, 15110407585811700846ull, 1597006029316303732ull, 8570672745144533314ull}}, {{5272446804688437472ull, 220632704277537221ull, 5609814786750077737ull, 5356670465715333321ull}}, {{11202244524287934743ull, 4887476898774309430ull, 11623954501864985075ull, 6695838082144166651ull}}, {{4779433618505142621ull, 1497660105040498884ull, 9918257108903843440ull, 8369797602680208314ull}}, {{12210518048420489946ull, 936037565650311802ull, 10810596711492290054ull, 5231123501675130196ull}}, {{6039775523670836625ull, 10393418993917665561ull, 13513245889365362567ull, 6538904377093912745ull}}, {{12161405423015933685ull, 8380087723969694047ull, 3056499306424539497ull, 8173630471367390932ull}}, {{14518407417026040409ull, 16766769873549528539ull, 11133684103370112993ull, 5108519044604619332ull}}, {{13536323252855162607ull, 7123404286654746962ull, 13917105129212641242ull, 6385648805755774165ull}}, {{7697032029214177451ull, 18127627395173209511ull, 3561323356233637840ull, 7982061007194717707ull}}, {{11728174045899942763ull, 11329767121983255944ull, 18366728162141881314ull, 4988788129496698566ull}}, {{14660217557374928454ull, 4938836865624294122ull, 13735038165822575835ull, 6235985161870873208ull}}, {{9101899909863884759ull, 1561860063602979749ull, 17168797707278219794ull, 7794981452338591510ull}}, {{7994530452878621927ull, 5587848558179250247ull, 6118812548621499467ull, 4871863407711619694ull}}, {{5381477047670889504ull, 2373124679296674905ull, 16871887722631650142ull, 6089829259639524617ull}}, {{11338532328015999784ull, 12189777885975619439ull, 7254801598007398965ull, 7612286574549405772ull}}, {{14004111732651081721ull, 9924454187948456101ull, 13757623035609400161ull, 4757679109093378607ull}}, {{3670081610531688440ull, 17017253753362958031ull, 12585342776084362297ull, 5947098886366723259ull}}, {{18422660068446774261ull, 7436509136421533826ull, 11119992451678064968ull, 7433873607958404074ull}}, {{16125848561206621817ull, 4647818210263458641ull, 11561681300726178509ull, 4646171004974002546ull}}, {{6322252646226113560ull, 10421458781256711206ull, 5228729589052947328ull, 5807713756217503183ull}}, {{17126187844637417758ull, 13026823476570889007ull, 1924225967888796256ull, 7259642195271878979ull}}, {{16796048787369384293ull, 16283529345713611259ull, 16240340515143159032ull, 9074552744089848723ull}}, {{8191687482892171231ull, 10177205841071007037ull, 7844369812750780443ull, 5671595465056155452ull}}, {{14851295372042601943ull, 8109821282911370892ull, 9805462265938475554ull, 7089494331320194315ull}}, {{117375141343700812ull, 913904566784437808ull, 7645141813995706539ull, 8861867914150242894ull}}, {{73359463339813008ull, 16712091418736131294ull, 166527615319928682ull, 5538667446343901809ull}}, {{9315071366029542068ull, 11666742236565388309ull, 4819845537577298757ull, 6923334307929877261ull}}, {{16255525225964315489ull, 748369740424571674ull, 10636492940399011351ull, 8654167884912346576ull}}, {{14771389284655085085ull, 7385260115406439152ull, 6647808087749382094ull, 5408854928070216610ull}}, {{17492532109304740ull, 8203107403273133ull, 17533132146541503426ull, 6761068660087770762ull}}, {{4633551683564018828ull, 9233625921108867224ull, 12693043146322103474ull, 8451335825109713453ull}}, {{2895969802227511768ull, 10382702219120429919ull, 10238994975665008623ull, 5282084890693570908ull}}, {{17455020308066553422ull, 8366691755473149494ull, 12798743719581260779ull, 6602606113366963635ull}}, {{12595403348228415969ull, 5846678675914048964ull, 11386743631049188070ull, 8253257641708704544ull}}, {{17095499129497535789ull, 17489232227728444314ull, 7116714769405742543ull, 5158286026067940340ull}}, {{12146001875017143928ull, 17249854266233167489ull, 8895893461757178179ull, 6447857532584925425ull}}, {{1347444288489266198ull, 16950631814364071458ull, 15731552845623860628ull, 8059821915731156781ull}}, {{5453838698733179278ull, 1370772847122768853ull, 12138063537728606845ull, 5037388697331972988ull}}, {{11428984391843862001ull, 6325152077330848970ull, 15172579422160758556ull, 6296735871664966235ull}}, {{5062858452950051693ull, 7906440096663561213ull, 14354038259273560291ull, 7870919839581207794ull}}, {{5470129542307476261ull, 2635682051201031806ull, 13582959930473363086ull, 4919324899738254871ull}}, {{16061033964739121134ull, 12517974600856065565ull, 12367013894664315953ull, 6149156124672818589ull}}, {{6241234400641737705ull, 1812410195787918245ull, 1623709313048231230ull, 7686445155841023237ull}}, {{6206614509614780018ull, 14967814427649612615ull, 3320661329868838470ull, 4804028222400639523ull}}, {{3146582118591087118ull, 9486395997707239961ull, 17985884717618211800ull, 6005035278000799403ull}}, {{8544913666666246801ull, 11857994997134049951ull, 17870669878595376846ull, 7506294097500999254ull}}, {{12258100069307486107ull, 2799560854781393315ull, 6557482655694722625ull, 4691433810938124534ull}}, {{10710939068206969730ull, 8111137086904129548ull, 17420225356473179089ull, 5864292263672655667ull}}, {{13388673835258712162ull, 14750607377057549839ull, 17163595677164085957ull, 7330365329590819584ull}}, {{12124156275646002298ull, 4603201166039773587ull, 3007750522745555831ull, 9162956661988524481ull}}, {{5271754663065057485ull, 9794529756415940348ull, 13409059122784442154ull, 5726847913742827800ull}}, {{6589693328831321856ull, 3019790158665149627ull, 16761323903480552693ull, 7158559892178534750ull}}, {{3625430642611764415ull, 8386423716758824938ull, 11728282842495915058ull, 8948199865223168438ull}}, {{6877580170059740664ull, 9853200841401653490ull, 2718490758132559007ull, 5592624915764480274ull}}, {{17820347249429451638ull, 7704815033324678958ull, 12621485484520474567ull, 6990781144705600342ull}}, {{13052062024932038739ull, 5019332773228460794ull, 6553484818795817401ull, 8738476430882000428ull}}, {{12769224784009912116ull, 14666298029336257756ull, 13319300048602161683ull, 5461547769301250267ull}}, {{15961530980012390145ull, 13721186518242934291ull, 12037439042325314200ull, 6826934711626562834ull}}, {{15340227706588099777ull, 17151483147803667864ull, 5823426766051866942ull, 8533668389533203543ull}}, {{9587642316617562361ull, 6107990948949904511ull, 10557170756423498695ull, 5333542743458252214ull}}, {{7372866877344565047ull, 3023302667759992735ull, 3973091408674597561ull, 6666928429322815268ull}}, {{4604397578253318405ull, 8390814353127378823ull, 4966364260843246951ull, 8333660536653519085ull}}, {{9795277514049405859ull, 12161787998345693620ull, 5409820672240723296ull, 5208537835408449428ull}}, {{12244096892561757324ull, 15202234997932117025ull, 6762275840300904120ull, 6510672294260561785ull}}, {{1470063060420032942ull, 556049673705594666ull, 13064530818803518055ull, 8138340367825702231ull}}, {{5530475431189908493ull, 7265060073707078522ull, 15082860789393280640ull, 5086462729891063894ull}}, {{16136466325842161424ull, 9081325092133848152ull, 9630203949886824992ull, 6358078412363829868ull}}, {{1723838833593150164ull, 11351656365167310191ull, 12037754937358531240ull, 7947598015454787335ull}}, {{7994928298636800709ull, 7094785228229568869ull, 14441125863490163881ull, 4967248759659242084ull}}, {{14605346391723388790ull, 13480167553714348990ull, 18051407329362704851ull, 6209060949574052605ull}}, {{9033310952799460179ull, 12238523423715548334ull, 8729201106421217352ull, 7761326186967565757ull}}, {{1034133327072274708ull, 7649077139822217709ull, 7761593700726954797ull, 4850828866854728598ull}}, {{5904352677267731289ull, 14173032443205160040ull, 478620089053917688ull, 6063536083568410748ull}}, {{7380440846584664111ull, 17716290554006450050ull, 598275111317397110ull, 7579420104460513435ull}}, {{9224461547542802974ull, 6460995577826643377ull, 16514823009069230858ull, 4737137565287820896ull}}, {{16142262952855891621ull, 17299616509138080029ull, 2196784687626986956ull, 5921421956609776121ull}}, {{6342770635787700814ull, 3177776562713048421ull, 7357666877961121600ull, 7401777445762220151ull}}, {{6270074656581006961ull, 1986110351695655263ull, 11516070826366782856ull, 4626110903601387594ull}}, {{3225907302298870797ull, 2482637939619569079ull, 5171716496103702762ull, 5782638629501734493ull}}, {{17867442183155752209ull, 12326669461379237156ull, 11076331638557016356ull, 7228298286877168116ull}}, {{3887558655235138645ull, 15408336826724046446ull, 13845414548196270445ull, 9035372858596460145ull}}, {{16264782214804125365ull, 11936053525916222980ull, 1735855064981587172ull, 5647108036622787591ull}}, {{1884233694795605090ull, 14920066907395278726ull, 16004876886509147677ull, 7058885045778484488ull}}, {{11578664155349282171ull, 4815025578961934695ull, 1559352034426882981ull, 8823606307223105611ull}}, {{14154194124734383213ull, 5315233996064903136ull, 17115496086012659527ull, 5514753942014441006ull}}, {{17692742655917979016ull, 2032356476653741016ull, 12170998070661048601ull, 6893442427518051258ull}}, {{3669184246187922154ull, 7152131614244564175ull, 5990375551471534943ull, 8616803034397564073ull}}, {{9210769181508533202ull, 11387611286543934465ull, 15273199765738179099ull, 5385501896498477545ull}}, {{16125147495313054407ull, 9622828089752530177ull, 5256441651890560162ull, 6731877370623096932ull}}, {{6321376313859154296ull, 2805163075335886914ull, 6570552064863200203ull, 8414846713278871165ull}}, {{8562546214589359339ull, 17894127986580786985ull, 6412438049753194078ull, 5259279195799294478ull}}, {{15314868786664087078ull, 13144287946371207923ull, 17238919599046268406ull, 6574098994749118097ull}}, {{14531899964902720943ull, 7206987896109234096ull, 7713591443525671796ull, 8217623743436397622ull}}, {{9082437478064200590ull, 13727739471923047118ull, 209308633776156968ull, 5136014839647748514ull}}, {{2129674810725474929ull, 17159674339903808898ull, 9485007829074972018ull, 6420018549559685642ull}}, {{11885465550261619469ull, 12226220888024985314ull, 2632887749488939215ull, 8025023186949607053ull}}, {{12040101987340900073ull, 14558917082656697677ull, 3951397852644280961ull, 5015639491843504408ull}}, {{1215069428893961379ull, 4363588298038708385ull, 4939247315805351202ull, 6269549364804380510ull}}, {{6130522804544839627ull, 14677857409403161289ull, 15397431181611464810ull, 7836936706005475637ull}}, {{15360791798908994527ull, 13785346899304363709ull, 11929237497720859458ull, 4898085441253422273ull}}, {{5365931693354079447ull, 8008311587275678829ull, 1076488816868910611ull, 6122606801566777842ull}}, {{11319100635119987212ull, 5398703465667210632ull, 10568983057940914072ull, 7653258501958472302ull}}, {{7074437896949992008ull, 3374189666042006645ull, 1993928392785683391ull, 4783286563724045189ull}}, {{13454733389614877914ull, 18052795137834672018ull, 7104096509409492142ull, 5979108204655056486ull}}, {{7595044700163821584ull, 13342621885438564215ull, 18103492673616640986ull, 7473885255818820607ull}}, {{11664431965243470346ull, 12950824696826490538ull, 18232211948651482472ull, 4671178284886762879ull}}, {{5357167919699562125ull, 16188530871033113173ull, 18178578917386965186ull, 5838972856108453599ull}}, {{11308145918051840560ull, 11012291551936615658ull, 18111537628306318579ull, 7298716070135566999ull}}, {{4911810360710024891ull, 9153678421493381669ull, 18027736016955510320ull, 9123395087669458749ull}}, {{5375724484657459509ull, 5721049013433363543ull, 13573178019810887902ull, 5702121929793411718ull}}, {{2107969587394436483ull, 16374683303646480237ull, 7743100487908834069ull, 7127652412241764648ull}}, {{7246648002670433507ull, 6633296074275936584ull, 9678875609886042587ull, 8909565515302205810ull}}, {{4529155001669020942ull, 1839967037208766413ull, 10660983274606164521ull, 5568478447063878631ull}}, {{10273129770513664082ull, 6911644814938345920ull, 8714543074830317747ull, 6960598058829848289ull}}, {{12841412213142080102ull, 4027870000245544496ull, 15504864861965285088ull, 8700747573537310361ull}}, {{8025882633213800064ull, 2517418750153465310ull, 2773011511087221324ull, 5437967233460818976ull}}, {{808981254662474272ull, 3146773437691831638ull, 3466264388859026655ull, 6797459041826023720ull}}, {{10234598605182868647ull, 17768524852396953259ull, 4332830486073783318ull, 8496823802282529650ull}}, {{4090781119025598953ull, 6493642014320707883ull, 7319705072223502478ull, 5310514876426581031ull}}, {{501790380354610787ull, 17340424554755660662ull, 4537945321851990193ull, 6638143595533226289ull}}, {{9850610012298039291ull, 7840472638162412115ull, 10284117670742375646ull, 8297679494416532861ull}}, {{3850788248472580605ull, 288609380424119668ull, 8733416553427678731ull, 5186049684010333038ull}}, {{4813485310590725757ull, 14195819780812313297ull, 1693398654929822605ull, 6482562105012916298ull}}, {{10628542656665795100ull, 3909716670733227909ull, 11340120355517054065ull, 8103202631266145372ull}}, {{8948682169629815889ull, 13972787965276737203ull, 16310947259052934598ull, 5064501644541340857ull}}, {{6574166693609881958ull, 8242612919741145696ull, 6553626018534004536ull, 6330627055676676072ull}}, {{8217708367012352447ull, 10303266149676432120ull, 8192032523167505670ull, 7913283819595845090ull}}, {{5136067729382720280ull, 1827855325120382171ull, 9731706345407078948ull, 4945802387247403181ull}}, {{1808398643301012445ull, 2284819156400477714ull, 16776318950186236589ull, 6182252984059253976ull}}, {{11483870340981041365ull, 7467709963927985046ull, 2523654614023244120ull, 7727816230074067471ull}}, {{2565732944685762949ull, 4667318727454990654ull, 8494813161405609431ull, 4829885143796292169ull}}, {{12430538217711979494ull, 1222462390891350413ull, 15230202470184399693ull, 6037356429745365211ull}}, {{1703114716857810656ull, 6139764007041575921ull, 14426067069303111712ull, 7546695537181706514ull}}, {{12593661744104601420ull, 3837352504400984950ull, 13627977936741832724ull, 4716684710738566571ull}}, {{6518705143275975967ull, 4796690630501231188ull, 12423286402499903001ull, 5895855888423208214ull}}, {{8148381429094969958ull, 10607549306553926889ull, 6305735966270102943ull, 7369819860529010268ull}}, {{14797162804796100352ull, 8647750614765020707ull, 7882169957837628679ull, 9212274825661262835ull}}, {{6942383743783868768ull, 12322373161869219798ull, 2620513214434823972ull, 5757671766038289272ull}}, {{17901351716584611768ull, 15402966452336524747ull, 3275641518043529965ull, 7197089707547861590ull}}, {{17765003627303376806ull, 5418650010138492222ull, 13317923934409188265ull, 8996362134434826987ull}}, {{6491441248637222600ull, 14915871302405027399ull, 6017859449792048713ull, 5622726334021766867ull}}, {{3502615542369140346ull, 4809781072724120537ull, 2910638293812672988ull, 7028407917527208584ull}}, {{8989955446388813336ull, 6012226340905150671ull, 3638297867265841235ull, 8785509896909010730ull}}, {{12536251181634090191ull, 1451798453852025217ull, 6885622185468538676ull, 5490943685568131706ull}}, {{1835255921760449027ull, 1814748067315031522ull, 17830399768690449153ull, 6863679606960164632ull}}, {{11517441939055337091ull, 6880121102571177306ull, 3841255637153509825ull, 8579599508700205791ull}}, {{11810087230336973586ull, 15829290735175455576ull, 9318313800862025496ull, 5362249692937628619ull}}, {{14762609037921216983ull, 1339869345259767854ull, 7036206232650143967ull, 6702812116172035774ull}}, {{9229889260546745420ull, 15509894736856873530ull, 18018629827667455766ull, 8378515145215044717ull}}, {{10380366806269103792ull, 5081998192108158052ull, 13567486651505853806ull, 5236571965759402948ull}}, {{12975458507836379740ull, 15575869776989973373ull, 16959358314382317257ull, 6545714957199253685ull}}, {{2384265079513310963ull, 5634779165955303005ull, 7364139837695732860ull, 8182143696499067107ull}}, {{3796008683909513304ull, 12745109015576840186ull, 2296744389346139085ull, 5113839810311916942ull}}, {{13968382891741667438ull, 2096328214188886520ull, 12094302523537449665ull, 6392299762889896177ull}}, {{17460478614677084297ull, 7232096286163496054ull, 1282820099139648369ull, 7990374703612370222ull}}, {{6301113115745789782ull, 16049275224920654794ull, 14636820617244443942ull, 4993984189757731388ull}}, {{17099763431537013035ull, 10838221994296042684ull, 18296025771555554928ull, 6242480237197164235ull}}, {{2927960215711714678ull, 13547777492870053356ull, 18258346196017055756ull, 7803100296496455294ull}}, {{11053347171674597482ull, 17690732969898559155ull, 6799780354083271943ull, 4876937685310284559ull}}, {{9204997946165858948ull, 17501730193945811040ull, 3888039424176702025ull, 6096172106637855699ull}}, {{11506247432707323685ull, 8042104687150100088ull, 248363261793489628ull, 7620215133297319624ull}}, {{7191404645442077303ull, 14249687466323588363ull, 155227038620931017ull, 4762634458310824765ull}}, {{4377569788375208725ull, 3977051277622321742ull, 4805719816703551676ull, 5953293072888530956ull}}, {{14695334272323786714ull, 4971314097027902177ull, 6007149770879439595ull, 7441616341110663695ull}}, {{2267054892561284840ull, 801228301428744909ull, 10671997634440731603ull, 4651010213194164809ull}}, {{7445504634128993954ull, 14836593432068094848ull, 17951683061478302407ull, 5813762766492706011ull}}, {{9306880792661242443ull, 13934055771657730656ull, 17827917808420490105ull, 7267203458115882514ull}}, {{11633600990826553054ull, 3582511659289999608ull, 13061525223670836824ull, 9084004322644853143ull}}, {{7271000619266595659ull, 2239069787056249755ull, 15080982292435354871ull, 5677502701653033214ull}}, {{4477064755655856669ull, 16633895289102475906ull, 9627855828689417780ull, 7096878377066291518ull}}, {{14819702981424596644ull, 2345625037668543266ull, 2811447749006996418ull, 8871097971332864398ull}}, {{13874000381817760807ull, 6077701666970227445ull, 15592212898411536473ull, 5544436232083040248ull}}, {{3507442421990037297ull, 12208813102140172211ull, 1043522049304868975ull, 6930545290103800311ull}}, {{18219361082769710333ull, 10649330359247827359ull, 15139460616913249931ull, 8663181612629750388ull}}, {{18304629704372150814ull, 4349988465316198147ull, 238790848716005399ull, 5414488507893593993ull}}, {{18269101112037800613ull, 825799563217859780ull, 4910174579322394653ull, 6768110634866992491ull}}, {{4389632316337699151ull, 5643935472449712630ull, 1526032205725605412ull, 8460138293583740614ull}}, {{16578578252993225681ull, 12750831707135846201ull, 14788828183860667094ull, 5287586433489837883ull}}, {{6888164760959368390ull, 6715167597065031944ull, 13874349211398445964ull, 6609483041862297354ull}}, {{8610205951199210487ull, 8393959496331289930ull, 8119564477393281647ull, 8261853802327871693ull}}, {{9993064737926894458ull, 12163753712848138062ull, 7380570807584494981ull, 5163658626454919808ull}}, {{3267958885553842265ull, 1369634085778008866ull, 9225713509480618727ull, 6454573283068649760ull}}, {{13308320643797078639ull, 15547100662504674794ull, 11532141886850773408ull, 8068216603835812200ull}}, {{12929386420800562054ull, 9716937914065421746ull, 7207588679281733380ull, 5042635377397382625ull}}, {{6938360989145926759ull, 12146172392581777183ull, 13621171867529554629ull, 6303294221746728281ull}}, {{4061265218005020544ull, 1347657435445057767ull, 3191406779129779575ull, 7879117777183410352ull}}, {{9455819788894219696ull, 7759814924794242960ull, 1994629236956112234ull, 4924448610739631470ull}}, {{11819774736117774620ull, 476396619138027892ull, 11716658583049916101ull, 6155560763424539337ull}}, {{14774718420147218275ull, 5207181792349922769ull, 810765173530231414ull, 7694450954280674172ull}}, {{2316669984950929566ull, 17089546675500865443ull, 9730100270311170441ull, 4809031846425421357ull}}, {{16730895536470825670ull, 7526875289093918091ull, 16774311356316350956ull, 6011289808031776696ull}}, {{16301933402161144183ull, 9408594111367397614ull, 2521145121685887079ull, 7514112260039720871ull}}, {{5577022357923327211ull, 12797900347245705365ull, 8493244728694761280ull, 4696320162524825544ull}}, {{11582963965831546917ull, 15997375434057131706ull, 10616555910868451600ull, 5870400203156031930ull}}, {{5255332920434657838ull, 1549975218861863017ull, 4047322851730788693ull, 7338000253945039913ull}}, {{11180852168970710202ull, 6549155042004716675ull, 9670839583090873770ull, 9172500317431299891ull}}, {{4682189596392999924ull, 8704907919680335826ull, 3738431730218102154ull, 5732812698394562432ull}}, {{15076109032346025713ull, 1657762862745643974ull, 4673039662772627693ull, 7166015872993203040ull}}, {{9621764253577756333ull, 6683889596859442872ull, 5841299578465784616ull, 8957519841241503800ull}}, {{6013602658486097709ull, 4177430998037151795ull, 3650812236541115385ull, 5598449900775939875ull}}, {{2905317304680234232ull, 9833474765973827648ull, 18398573350958557943ull, 6998062375969924843ull}}, {{3631646630850292789ull, 7680157439039896656ull, 18386530670270809525ull, 8747577969962406054ull}}, {{2269779144281432994ull, 7105941408613629362ull, 6879895650491868049ull, 5467236231226503784ull}}, {{12060595967206567050ull, 13494112779194424606ull, 8599869563114835061ull, 6834045289033129730ull}}, {{5852372922153433004ull, 3032582918710867046ull, 1526464917038768019ull, 8542556611291412163ull}}, {{17492791131628059340ull, 18036265388690149567ull, 17094941637645087675ull, 5339097882057132601ull}}, {{17254302896107686271ull, 17933645717435299055ull, 7533618991774195882ull, 6673872352571415752ull}}, {{16956192601707219934ull, 13193685109939348011ull, 9417023739717744853ull, 8342340440714269690ull}}, {{8291777366853318507ull, 10551896202925786459ull, 10497325855750978437ull, 5213962775446418556ull}}, {{5753035690139260230ull, 17801556272084620978ull, 13121657319688723046ull, 6517453469308023195ull}}, {{16414666649528851095ull, 13028573303251000414ull, 11790385631183515904ull, 8146816836635028994ull}}, {{5647480637528144031ull, 8142858314531875259ull, 11980677037917085344ull, 5091760522896893121ull}}, {{2447664778482792134ull, 10178572893164844074ull, 1140788242114192968ull, 6364700653621116402ull}}, {{12282953009958265975ull, 12723216116456055092ull, 10649357339497517018ull, 7955875817026395502ull}}, {{16900217668078692043ull, 12563696091212422336ull, 2044162318758560232ull, 4972422385641497189ull}}, {{2678528011388813437ull, 15704620114015527921ull, 7166888916875588194ull, 6215527982051871486ull}}, {{7959846032663404701ull, 10407403105664634093ull, 18181983182949261051ull, 7769409977564839357ull}}, {{7280746779628321890ull, 4198783931826702356ull, 13669582498556982109ull, 4855881235978024598ull}}, {{9100933474535402362ull, 9860165933210765849ull, 7863606086341451828ull, 6069851544972530748ull}}, {{15987852861596640857ull, 12325207416513457311ull, 9829507607926814785ull, 7587314431215663435ull}}, {{16909937066138982392ull, 785725607679828963ull, 3837599245740565289ull, 4742071519509789647ull}}, {{16525735314246340086ull, 5593843028027174108ull, 185313038748318707ull, 5927589399387237059ull}}, {{2210425069098373491ull, 2380617766606579732ull, 14066699353717562096ull, 7409486749234046323ull}}, {{10604887705041259240ull, 1487886104129112332ull, 6485844086859782358ull, 4630929218271278952ull}}, {{13256109631301574050ull, 11083229667016166223ull, 8107305108574727947ull, 5788661522839098690ull}}, {{11958451020699579658ull, 9242351065342819875ull, 910759348863634126ull, 7235826903548873363ull}}, {{10336377757447086669ull, 2329566794823749036ull, 14973507241361706370ull, 9044783629436091703ull}}, {{15683608135259204976ull, 6067665265192231051ull, 16275971053492148337ull, 5652989768397557314ull}}, {{14992824150646618316ull, 12196267599917676718ull, 11121591780010409613ull, 7066237210496946643ull}}, {{9517658151453497087ull, 1410276444614932186ull, 9290303706585624113ull, 8832796513121183304ull}}, {{10560222363085823583ull, 12410637823952802376ull, 5806439816616015070ull, 5520497820700739565ull}}, {{13200277953857279479ull, 6289925243086227162ull, 11869735789197406742ull, 6900622275875924456ull}}, {{7276975405466823541ull, 17085778590712559761ull, 14837169736496758427ull, 8625777844844905570ull}}, {{16077324674485234473ull, 8372768609981655898ull, 13884917103737861921ull, 5391111153028065981ull}}, {{10873283806251767283ull, 15077646780904457777ull, 3521088324390163689ull, 6738888941285082477ull}}, {{18203290776242097008ull, 5012000420848408509ull, 9013046423915092516ull, 8423611176606353096ull}}, {{13682899744365004582ull, 12355872299885031126ull, 5633154014946932822ull, 5264756985378970685ull}}, {{7880252643601479920ull, 6221468338001513100ull, 11653128537111053932ull, 6580946231723713356ull}}, {{9850315804501849900ull, 7776835422501891375ull, 14566410671388817415ull, 8226182789654641695ull}}, {{13073976405454738043ull, 11778051166704763965ull, 16021535697259092740ull, 5141364243534151059ull}}, {{2507412451536258842ull, 14722563958380954957ull, 15415233603146478021ull, 6426705304417688824ull}}, {{7745951582847711457ull, 4568146892694029984ull, 822297930223545911ull, 8033381630522111031ull}}, {{4841219739279819661ull, 9772620835574850596ull, 7431465234030798050ull, 5020863519076319394ull}}, {{6051524674099774576ull, 2992404007613787437ull, 65959505683721755ull, 6276079398845399243ull}}, {{12176091861052106123ull, 17575563064799398008ull, 13917507437386815905ull, 7845099248556749053ull}}, {{7610057413157566327ull, 4067197887858541899ull, 11004285157580453893ull, 4903187030347968158ull}}, {{4900885748019570005ull, 9695683378250565278ull, 4531984410120791558ull, 6128983787934960198ull}}, {{15349479221879238314ull, 2896232185958430789ull, 14888352549505765256ull, 7661229734918700247ull}}, {{11899267522888217898ull, 1810145116224019243ull, 16222749371082185141ull, 4788268584324187654ull}}, {{10262398385182884469ull, 6874367413707411958ull, 11055064676997955618ull, 5985335730405234568ull}}, {{3604625944623829778ull, 17816331303989040756ull, 13818830846247444522ull, 7481669663006543210ull}}, {{11476263252244669419ull, 15746893083420538376ull, 13248455297332040730ull, 4676043539379089506ull}}, {{14345329065305836774ull, 10460244317420897162ull, 7337197084810275105ull, 5845054424223861883ull}}, {{8708289294777520160ull, 17686991415203509357ull, 4559810337585455977ull, 7306318030279827354ull}}, {{15497047636899288103ull, 8273681213722222984ull, 14923134958836595780ull, 9132897537849784192ull}}, {{9685654773062055065ull, 14394422795431165173ull, 9326959349272872362ull, 5708060961156115120ull}}, {{16718754484754956735ull, 8769656457434180658ull, 11658699186591090453ull, 7135076201445143900ull}}, {{11675071069088920111ull, 15573756590220113727ull, 14573373983238863066ull, 8918845251806429875ull}}, {{14214448445821656925ull, 14345283887314958983ull, 6802515730310595464ull, 5574278282379018672ull}}, {{13156374538849683252ull, 17931604859143698729ull, 8503144662888244330ull, 6967847852973773340ull}}, {{2610410118279940353ull, 13191134037074847604ull, 10628930828610305413ull, 8709809816217216675ull}}, {{10854878360779738529ull, 10550301782385473704ull, 4337238758667746931ull, 5443631135135760422ull}}, {{13568597950974673161ull, 8576191209554454226ull, 14644920485189459472ull, 6804538918919700527ull}}, {{7737375401863565643ull, 10720239011943067783ull, 13694464588059436436ull, 8505673648649625659ull}}, {{11753388653805810383ull, 15923521419319193172ull, 6253197358323453820ull, 5316046030406016037ull}}, {{14691735817257262979ull, 1457657700439439849ull, 12428182716331705180ull, 6645057538007520046ull}}, {{4529611716289415012ull, 1822072125549299812ull, 6311856358559855667ull, 8306321922509400058ull}}, {{12054379359535660190ull, 17279696142964170046ull, 8556596242527297695ull, 5191451201568375036ull}}, {{5844602162564799430ull, 16987934160277824654ull, 10695745303159122119ull, 6489314001960468795ull}}, {{16529124740060775095ull, 16623231681919892913ull, 8757995610521514745ull, 8111642502450585994ull}}, {{3413173934896902579ull, 3471990773558851215ull, 10085433275003334620ull, 5069776564031616246ull}}, {{18101525473903291935ull, 4339988466948564018ull, 3383419556899392467ull, 6337220705039520308ull}}, {{13403534805524339111ull, 813299565258317119ull, 4229274446124240584ull, 7921525881299400385ull}}, {{15294738281093793801ull, 508312228286448199ull, 14172511574896120125ull, 4950953675812125240ull}}, {{14506736832939854347ull, 5247076303785448153ull, 17715639468620150156ull, 6188692094765156550ull}}, {{4298362985892654221ull, 6558845379731810192ull, 12921177298920411887ull, 7735865118456445688ull}}, {{2686476866182908888ull, 11016807389973463226ull, 8075735811825257429ull, 4834915699035278555ull}}, {{12581468119583411918ull, 18382695255894216936ull, 5482983746354183882ull, 6043644623794098194ull}}, {{15726835149479264898ull, 13754997033012995362ull, 16077101719797505661ull, 7554555779742622742ull}}, {{14440957986851928465ull, 10902716154846816053ull, 5436502556446053134ull, 4721597362339139214ull}}, {{4216139428282746870ull, 4405023156703744259ull, 16019000232412342226ull, 5901996702923924017ull}}, {{658488266926045683ull, 14729650982734456132ull, 6188692235233264070ull, 7377495878654905022ull}}, {{823110333657557103ull, 9188691691563294357ull, 16959237330896355896ull, 9221869848318631277ull}}, {{2820286967749667142ull, 5742932307227058973ull, 12905366341023916387ull, 5763668655199144548ull}}, {{8137044728114471831ull, 2566979365606435812ull, 16131707926279895484ull, 7204585818998930685ull}}, {{10171305910143089789ull, 3208724207008044765ull, 6329576852567705643ull, 9005732273748663357ull}}, {{8662909203053125070ull, 18146353693875885642ull, 6261828542068509978ull, 5628582671092914598ull}}, {{1605264466961630530ull, 13459570080490081245ull, 17050657714440413281ull, 7035728338866143247ull}}, {{6618266602129426066ull, 2989404545330437844ull, 16701636124623128698ull, 8794660423582679059ull}}, {{13359788663185667099ull, 6480063859258911556ull, 8132679568675761484ull, 5496662764739174412ull}}, {{16699735828982083874ull, 8100079824073639445ull, 10165849460844701855ull, 6870828455923968015ull}}, {{7039611730945441131ull, 5513413761664661403ull, 8095625807628489415ull, 8588535569904960019ull}}, {{2093914322627206755ull, 10363412628681495233ull, 2753923120554111932ull, 5367834731190600012ull}}, {{7229078921711396347ull, 12954265785851869041ull, 3442403900692639915ull, 6709793413988250015ull}}, {{13648034670566633338ull, 11581146213887448397ull, 18138062931147963606ull, 8387241767485312518ull}}, {{10835864678317839788ull, 2626530365252267344ull, 6724603313540089350ull, 5242026104678320324ull}}, {{13544830847897299735ull, 12506534993420109988ull, 8405754141925111687ull, 6552532630847900405ull}}, {{16931038559871624669ull, 11021482723347749581ull, 15118878695833777513ull, 8190665788559875506ull}}, {{12887742109133459370ull, 18417641748160813248ull, 14060985203323498849ull, 5119166117849922191ull}}, {{16109677636416824213ull, 9186994129918852848ull, 12964545485726985658ull, 6398957647312402739ull}}, {{1690352971811478650ull, 2260370625543790253ull, 11593995838731344169ull, 7998697059140503424ull}}, {{3362313616595868108ull, 12941946687033338668ull, 7246247399207090105ull, 4999185661962814640ull}}, {{4202892020744835135ull, 2342375303509509623ull, 9057809249008862632ull, 6248982077453518300ull}}, {{641929007503656015ull, 2927969129386887029ull, 11322261561261078290ull, 7811227596816897875ull}}, {{2707048638903478962ull, 6441666724294192297ull, 4770570466574479979ull, 4882017248010561172ull}}, {{7995496817056736606ull, 3440397386940352467ull, 5963213083218099974ull, 6102521560013201465ull}}, {{5382685002893532853ull, 13523868770530216392ull, 12065702372450012871ull, 7628151950016501831ull}}, {{3364178126808458034ull, 15369947009222467101ull, 14458593010422339900ull, 4767594968760313644ull}}, {{8816908676937960446ull, 765689687818532260ull, 18073241263027924876ull, 5959493710950392055ull}}, {{11021135846172450557ull, 957112109773165325ull, 17979865560357518191ull, 7449367138687990069ull}}, {{9194052913071475550ull, 7515724096249310184ull, 13543258984437142821ull, 4655854461679993793ull}}, {{11492566141339344438ull, 14006341138739025634ull, 3094015675264264814ull, 5819818077099992242ull}}, {{5142335639819404739ull, 8284554386569006235ull, 13090891630935106826ull, 7274772596374990302ull}}, {{1816233531346868020ull, 1132320946356481986ull, 7140242501814107725ull, 9093465745468737878ull}}, {{5746831975519180417ull, 3013543600686495193ull, 18297709618915981040ull, 5683416090917961173ull}}, {{11795225987826363425ull, 3766929500858118991ull, 9037078968362812588ull, 7104270113647451467ull}}, {{10132346466355566377ull, 4708661876072648739ull, 6684662692026127831ull, 8880337642059314334ull}}, {{4026873532258535034ull, 9860442700186487318ull, 18012972237798493606ull, 5550211026287071458ull}}, {{14256963952177944600ull, 3102181338378333339ull, 13292843260393341200ull, 6937763782858839323ull}}, {{13209518921795042846ull, 3877726672972916674ull, 12004368057064288596ull, 8672204728573549154ull}}, {{12867635344549289683ull, 11646951207462848729ull, 12114416054092568276ull, 5420127955358468221ull}}, {{2249486125404448391ull, 14558689009328560912ull, 1307962012333546633ull, 6775159944198085277ull}}, {{2811857656755560489ull, 4363303206378537428ull, 6246638533844321196ull, 8468949930247606596ull}}, {{10980783072327001114ull, 11950436540841361700ull, 13127521120507476555ull, 5293093706404754122ull}}, {{13725978840408751392ull, 10326359657624314221ull, 7186029363779569886ull, 6616367133005942653ull}}, {{3322415495228775528ull, 3684577535175616969ull, 13594222723151850262ull, 8270458916257428316ull}}, {{13605724730586454465ull, 16137919014766924317ull, 17719761238824682221ull, 5169036822660892697ull}}, {{3172097857950904369ull, 6337340713176491685ull, 8314643493248689065ull, 6461296028326115872ull}}, {{8576808340866018366ull, 12533361909898002510ull, 10393304366560861331ull, 8076620035407644840ull}}, {{748819194613873575ull, 5527508184472557617ull, 6495815229100538332ull, 5047887522129778025ull}}, {{5547710011694729872ull, 6909385230590697021ull, 12731455054803060819ull, 6309859402662222531ull}}, {{11546323533045800244ull, 4025045519810983372ull, 11302632800076438120ull, 7887324253327778164ull}}, {{16439824245008400961ull, 2515653449881864607ull, 16287517536902549633ull, 4929577658329861352ull}}, {{15938094287833113297ull, 7756252830779718663ull, 1912652847418635425ull, 6161972072912326691ull}}, {{15310931841364003717ull, 14307002056902036233ull, 16225874114555457993ull, 7702465091140408363ull}}, {{2651803373211420467ull, 2024347257922690790ull, 7835328312383467294ull, 4814040681962755227ull}}, {{12538126253369051392ull, 11753806109258139295ull, 5182474372051946213ull, 6017550852453444034ull}}, {{11060971798283926336ull, 857199581290510407ull, 15701465001919708575ull, 7521938565566805042ull}}, {{13830636401568535816ull, 7453278765947650860ull, 14425101644627205763ull, 4701211603479253151ull}}, {{17288295501960669770ull, 4704912439007175671ull, 13419691037356619300ull, 5876514504349066439ull}}, {{16998683359023449308ull, 5881140548758969589ull, 12162927778268386221ull, 7345643130436333049ull}}, {{7413296143497147923ull, 11963111704376099891ull, 1368601667553319064ull, 9182053913045416312ull}}, {{2327467080472023500ull, 7476944815235062432ull, 855376042220824415ull, 5738783695653385195ull}}, {{2909333850590029375ull, 4734495000616440136ull, 14904278108058194231ull, 7173479619566731493ull}}, {{3636667313237536719ull, 1306432732343162266ull, 4795289579790579077ull, 8966849524458414367ull}}, {{6884603089200848354ull, 3122363466928170368ull, 9914585015010193779ull, 5604280952786508979ull}}, {{8605753861501060442ull, 17738012388942376672ull, 7781545250335354319ull, 7005351190983136224ull}}, {{10757192326876325552ull, 17560829467750582936ull, 9726931562919192899ull, 8756688988728920280ull}}, {{6723245204297703470ull, 8669675408130420383ull, 6079332226824495562ull, 5472930617955575175ull}}, {{3792370486944741434ull, 1613722223308249671ull, 2987479265103231549ull, 6841163272444468969ull}}, {{128777090253538888ull, 6628838797562699993ull, 8346035099806427340ull, 8551454090555586211ull}}, {{11609700727476931565ull, 13366396285331463303ull, 2910428928165323135ull, 5344658806597241382ull}}, {{9900439890918776552ull, 12096309338236941225ull, 12861408197061429727ull, 6680823508246551727ull}}, {{16987235882075858594ull, 10508700654368788627ull, 11465074227899399255ull, 8351029385308189659ull}}, {{8311179417083717670ull, 13485466936621574748ull, 4859828383223430582ull, 5219393365817618537ull}}, {{10388974271354647087ull, 7633461633922192627ull, 10686471497456676132ull, 6524241707272023171ull}}, {{8374531820765920954ull, 9541827042402740784ull, 8746403353393457261ull, 8155302134090028964ull}}, {{5234082387978700597ull, 8269484910715406942ull, 14689874132725686596ull, 5097063833806268102ull}}, {{15765975021828151554ull, 10336856138394258677ull, 9138970629052332437ull, 6371329792257835128ull}}, {{5872410722003025730ull, 17532756191420211251ull, 11423713286315415546ull, 7964162240322293910ull}}, {{1364413692038197130ull, 15569658638065019936ull, 2528134785519746812ull, 4977601400201433694ull}}, {{1705517115047746412ull, 1015329223871723304ull, 12383540518754459324ull, 6222001750251792117ull}}, {{2131896393809683015ull, 1269161529839654130ull, 1644367593160910443ull, 7777502187814740147ull}}, {{5944121264558439788ull, 16934127020645641495ull, 17168630810221426690ull, 4860938867384212591ull}}, {{2818465562270661831ull, 11944286738952276061ull, 16849102494349395459ull, 6076173584230265739ull}}, {{8134767971265715193ull, 10318672405262957172ull, 16449692099509356420ull, 7595216980287832174ull}}, {{14307602018895847804ull, 15672542290144124040ull, 5669371543765959858ull, 4747010612679895109ull}}, {{17884502523619809755ull, 10367305825825379242ull, 11698400448134837727ull, 5933763265849868886ull}}, {{13132256117669986385ull, 8347446263854336149ull, 5399628523313771351ull, 7417204082312336108ull}}, {{10513503082757435443ull, 12134682942550041949ull, 12598139863925882902ull, 4635752551445210067ull}}, {{17753564871874182207ull, 5944981641332776628ull, 11135988811479965724ull, 5794690689306512584ull}}, {{3745212016133176143ull, 7431227051665970786ull, 13919986014349957155ull, 7243363361633140730ull}}, {{13904887057021245987ull, 4677347796155075578ull, 8176610481082670636ull, 9054204202041425913ull}}, {{13302240429065666646ull, 12146714409451698044ull, 16639596596745138907ull, 5658877626275891195ull}}, {{16627800536332083307ull, 10571706993387234651ull, 16187809727504035730ull, 7073597032844863994ull}}, {{16173064651987716230ull, 3991261704879267506ull, 11011390122525268855ull, 8841996291056079993ull}}, {{14719851425919710548ull, 9412067593190624047ull, 18411333872646762794ull, 5526247681910049995ull}}, {{13788128263972250281ull, 2541712454633504251ull, 18402481322381065589ull, 6907809602387562494ull}}, {{12623474311537924947ull, 7788826586719268218ull, 13779729616121556178ull, 8634762002984453118ull}}, {{12501357463138590996ull, 9479702635126930540ull, 4000644991648584707ull, 5396726251865283199ull}}, {{15626696828923238745ull, 7237942275481275271ull, 389120221133342980ull, 6745907814831603999ull}}, {{14921685017726660527ull, 9047427844351594089ull, 14321458331698842437ull, 8432384768539504998ull}}, {{2408524108438080974ull, 7960485411933440258ull, 4339225438884388619ull, 5270240480337190624ull}}, {{12234027172402377025ull, 5338920746489412418ull, 5424031798605485774ull, 6587800600421488280ull}}, {{6069161928648195473ull, 15897022969966541331ull, 6780039748256857217ull, 8234750750526860350ull}}, {{1487383196191428219ull, 3018110328588006476ull, 18072582897942699473ull, 5146719219079287718ull}}, {{1859228995239285273ull, 8384323929162395999ull, 13367356585573598533ull, 6433399023849109648ull}}, {{16159094299331270304ull, 15092090929880382902ull, 16709195731966998166ull, 8041748779811387060ull}}, {{5487747918654656036ull, 4820870812747851410ull, 1219875295624598046ull, 5026092987382116913ull}}, {{16083056935173095853ull, 15249460552789590070ull, 6136530137958135461ull, 6282616234227646141ull}}, {{10880449132111594008ull, 5226767635704823876ull, 12282348690875057231ull, 7853270292784557676ull}}, {{16023652744424522063ull, 10184258799956596778ull, 16899839968651686577ull, 4908293932990348547ull}}, {{10806193893675876771ull, 17342009518373133877ull, 16513113942387220317ull, 6135367416237935684ull}}, {{18119428385522233867ull, 7842453842684253634ull, 2194648354274473781ull, 7669209270297419606ull}}, {{15936328759378784071ull, 7207376660891352473ull, 15206713276703709825ull, 4793255793935887253ull}}, {{6085352893941316377ull, 13620906844541578496ull, 5173333540597473569ull, 5991569742419859067ull}}, {{7606691117426645471ull, 3191075500394809408ull, 1854980907319454058ull, 7489462178024823834ull}}, {{4754181948391653420ull, 6606108206174143784ull, 5771049085502046690ull, 4680913861265514896ull}}, {{5942727435489566774ull, 17481007294572455538ull, 7213811356877558362ull, 5851142326581893620ull}}, {{16651781331216734276ull, 12627887081360793614ull, 9017264196096947953ull, 7313927908227367025ull}}, {{11591354627166142037ull, 1949800796418828306ull, 15883266263548572846ull, 9142409885284208781ull}}, {{11856282660406226677ull, 15053683553043931403ull, 12232884423931551980ull, 5714006178302630488ull}}, {{10208667307080395442ull, 370360367595362638ull, 15291105529914439976ull, 7142507722878288110ull}}, {{3537462096995718495ull, 462950459494203298ull, 9890509875538274162ull, 8928134653597860138ull}}, {{6822599829049711963ull, 4901030055611264965ull, 10793254690638809255ull, 5580084158498662586ull}}, {{13139935804739527858ull, 1514601551086693302ull, 4268196326443735761ull, 6975105198123328233ull}}, {{7201547719069634014ull, 6504937957285754532ull, 9946931426482057605ull, 8718881497654160291ull}}, {{13724339361273297067ull, 6371429232517290534ull, 3910989132337592051ull, 5449300936033850182ull}}, {{7932052164736845526ull, 3352600522219225264ull, 14112108452276765872ull, 6811626170042312727ull}}, {{9915065205921056907ull, 4190750652774031580ull, 13028449546918569436ull, 8514532712552890909ull}}, {{15420287790555436375ull, 11842591194838545545ull, 10448623976037799849ull, 5321582945345556818ull}}, {{5440301682912131757ull, 968180938266018220ull, 3837407933192474004ull, 6651978681681946023ull}}, {{6800377103640164696ull, 1210226172832522775ull, 185073898063204601ull, 8314973352102432529ull}}, {{11167764717416184791ull, 12285606404088796494ull, 11644886232357972635ull, 5196858345064020330ull}}, {{4736333859915455181ull, 10745321986683607714ull, 5332735753592689986ull, 6496072931330025413ull}}, {{15143789361749094784ull, 4208280446499733834ull, 11277605710418250387ull, 8120091164162531766ull}}, {{14076554369520572144ull, 324332269848639694ull, 2436817550584018588ull, 5075056977601582354ull}}, {{8372320925045939372ull, 405415337310799618ull, 12269393975084799043ull, 6343821222001977942ull}}, {{1242029119452648407ull, 14341827226920663235ull, 6113370432001222995ull, 7929776527502472428ull}}, {{16917169264153762919ull, 6657799007611720569ull, 13044228556855540180ull, 4956110329689045267ull}}, {{7311403524910039936ull, 8322248759514650712ull, 11693599677642037321ull, 6195137912111306584ull}}, {{9139254406137549920ull, 15014496967820701294ull, 14616999597052546651ull, 7743922390139133230ull}}, {{1100347985408580796ull, 7078217595674244357ull, 4523938729730453753ull, 4839951493836958269ull}}, {{5987121000188113899ull, 13459458013020193350ull, 10266609430590455095ull, 6049939367296197836ull}}, {{16707273287089918182ull, 12212636497847853783ull, 12833261788238068869ull, 7562424209120247295ull}}, {{17359574832072280720ull, 9938740820368602566ull, 14938317645289874899ull, 4726515130700154559ull}}, {{12476096503235575092ull, 7811740007033365304ull, 14061211038184955720ull, 5908143913375193199ull}}, {{15595120629044468864ull, 9764675008791706630ull, 12964827779303806746ull, 7385179891718991499ull}}, {{5135264374725405136ull, 10714607898922204548ull, 5797174352851185264ull, 4615737432324369687ull}}, {{6419080468406756420ull, 13393259873652755685ull, 2634781922636593676ull, 5769671790405462109ull}}, {{12635536603935833429ull, 16741574842065944606ull, 7905163421723129999ull, 7212089738006827636ull}}, {{6571048718065015979ull, 16315282534155042854ull, 9881454277153912499ull, 9015112172508534545ull}}, {{17941963504072798699ull, 7891208574633207831ull, 17705123969289665072ull, 5634445107817834090ull}}, {{17815768361663610469ull, 9864010718291509789ull, 12908032924757305532ull, 7043056384772292613ull}}, {{8434652396797349375ull, 12330013397864387237ull, 2299983100664468203ull, 8803820480965365767ull}}, {{7577500757212037311ull, 5400415364451548071ull, 8355018465556374483ull, 5502387800603353604ull}}, {{4860189928087658735ull, 2138833187137047185ull, 10443773081945468104ull, 6877984750754192005ull}}, {{10686923428536961323ull, 2673541483921308981ull, 17666402370859223034ull, 8597480938442740006ull}}, {{8985170152049294779ull, 6282649445878206017ull, 6429815463359626492ull, 5373425586526712504ull}}, {{15843148708489006377ull, 7853311807347757521ull, 8037269329199533115ull, 6716781983158390630ull}}, {{5968877830329094260ull, 5204953740757308998ull, 823214624644640586ull, 8395977478947988288ull}}, {{17565606699237847624ull, 7864782106400706027ull, 514509140402900366ull, 5247485924342492680ull}}, {{17345322355619921626ull, 607605596146106726ull, 643136425503625458ull, 6559357405428115850ull}}, {{12458280907670126225ull, 9982879032037409216ull, 10027292568734307630ull, 8199196756785144812ull}}, {{7786425567293828891ull, 1627613376595992856ull, 15490429892313718077ull, 5124497972990715507ull}}, {{9733031959117286113ull, 6646202739172378974ull, 14751351346964759692ull, 6405622466238394384ull}}, {{2942917912041831834ull, 8307753423965473718ull, 18439189183705949615ull, 8007028082797992980ull}}, {{15674381750308308608ull, 12109874917619502929ull, 2301121202961442701ull, 5004392551748745613ull}}, {{5757919132603222048ull, 1302285591742214950ull, 7488087522129191281ull, 6255490689685932016ull}}, {{16420770952608803368ull, 6239543008105156591ull, 9360109402661489101ull, 7819363362107415020ull}}, {{17180510873021583961ull, 6205557389279416821ull, 15073440413518206496ull, 4887102101317134387ull}}, {{7640580535994816239ull, 7756946736599271027ull, 14230114498470370216ull, 6108877626646417984ull}}, {{4939039651566132395ull, 9696183420749088784ull, 17787643123087962770ull, 7636097033308022480ull}}, {{3086899782228832747ull, 10671800656395568394ull, 11117276951929976731ull, 4772560645817514050ull}}, {{13081996764640816742ull, 8728064802067072588ull, 4673224153057695106ull, 5965700807271892563ull}}, {{16352495955801020927ull, 1686708965729064927ull, 1229844172894730979ull, 7457126009089865704ull}}, {{17137839000016719936ull, 17195094168076523243ull, 768652608059206861ull, 4660703755681166065ull}}, {{16810612731593512015ull, 7658809654813490342ull, 5572501778501396481ull, 5825879694601457581ull}}, {{11789893877637114211ull, 14185198086944250832ull, 11577313241554133505ull, 7282349618251821976ull}}, {{14737367347046392764ull, 3896439553398149828ull, 14471641551942666882ull, 9102937022814777470ull}}, {{18434226628758771286ull, 7046960739301231546ull, 4433089951536778897ull, 5689335639259235919ull}}, {{13819411249093688299ull, 13420386942553927337ull, 929676420993585717ull, 7111669549074044899ull}}, {{3439206006084946661ull, 2940425622910245460ull, 14997153581524145859ull, 8889586936342556123ull}}, {{11372875790657867472ull, 17978667078814761076ull, 7067377979238897209ull, 5555991835214097577ull}}, {{14216094738322334339ull, 8638275793236287633ull, 13445908492476009416ull, 6944989794017621971ull}}, {{3935060367620754212ull, 10797844741545359542ull, 12195699597167623866ull, 8681237242522027464ull}}, {{16294470785045135095ull, 11360338981893237617ull, 7622312248229764916ull, 5425773276576267165ull}}, {{6533030426024255156ull, 14200423727366547022ull, 14139576328714594049ull, 6782216595720333956ull}}, {{17389660069385094753ull, 3915471603926020065ull, 17674470410893242562ull, 8477770744650417445ull}}, {{3951008515724602365ull, 7058855770881150445ull, 13352387016021970553ull, 5298606715406510903ull}}, {{9550446663083140860ull, 13435255732028825960ull, 12078797751600075287ull, 6623258394258138629ull}}, {{11938058328853926075ull, 12182383646608644546ull, 1263439134217930397ull, 8279072992822673287ull}}, {{12072972473961091701ull, 9919832788344096793ull, 7707178486527288354ull, 5174420620514170804ull}}, {{1256157537169200914ull, 3176418948575345184ull, 9633973108159110443ull, 6468025775642713505ull}}, {{1570196921461501143ull, 17805581741001345192ull, 16654152403626275957ull, 8085032219553391881ull}}, {{981373075913438214ull, 13434331597339534697ull, 3491316224625340617ull, 5053145137220869926ull}}, {{5838402363319185672ull, 2957856441392254659ull, 13587517317636451580ull, 6316431421526087407ull}}, {{2686316935721594185ull, 3697320551740318324ull, 12372710628618176571ull, 7895539276907609259ull}}, {{10902320121680772174ull, 4982335624005000ull, 5427101133672666405ull, 4934712048067255787ull}}, {{13627900152100965218ull, 4617913937957394154ull, 2172190398663445102ull, 6168390060084069734ull}}, {{7811503153271430714ull, 14995764459301518501ull, 11938610035184082185ull, 7710487575105087167ull}}, {{7188032480008338148ull, 2454823759422367207ull, 14379160299631133222ull, 4819054734440679479ull}}, {{4373354581583034781ull, 12291901736132734817ull, 13362264356111528623ull, 6023818418050849349ull}}, {{10078379245406181380ull, 10753191151738530617ull, 2867772389857247067ull, 7529773022563561687ull}}, {{17828202074447333123ull, 4414901460622887683ull, 8709886771301861273ull, 4706108139102226054ull}}, {{17673566574631778500ull, 10130312844205997508ull, 1663986427272550783ull, 5882635173877782568ull}}, {{3645214144580171508ull, 8051205036830108982ull, 2079983034090688479ull, 7353293967347228210ull}}, {{13779889717579990193ull, 5452320277610248323ull, 11823350829468136407ull, 9191617459184035262ull}}, {{6306588064273799919ull, 10325229201147487058ull, 2777908249990197350ull, 5744760911990022039ull}}, {{17106607117197025707ull, 3683164464579583014ull, 17307443367769910400ull, 7180951139987527548ull}}, {{12159886859641506325ull, 4603955580724478768ull, 3187560136002836384ull, 8976188924984409436ull}}, {{7599929287275941453ull, 2877472237952799230ull, 11215597121856548548ull, 5610118078115255897ull}}, {{276539572240151009ull, 3596840297440999038ull, 184438347038521973ull, 7012647597644069872ull}}, {{9569046502154964569ull, 9107736390228636701ull, 230547933798152466ull, 8765809497055087340ull}}, {{8286497073060546808ull, 10304021262320285842ull, 9367464495478621099ull, 5478630935659429587ull}}, {{1134749304470907701ull, 8268340559472969399ull, 7097644600920888470ull, 6848288669574286984ull}}, {{15253494685870798339ull, 1112053662486435940ull, 8872055751151110588ull, 8560360836967858730ull}}, {{310062141814473154ull, 9918405575908798271ull, 10156720862896832021ull, 5350225523104911706ull}}, {{14222635732550255154ull, 17009692988313385742ull, 3472529041766264218ull, 6687781903881139633ull}}, {{8554922628833043135ull, 12038744198536956370ull, 8952347320635218177ull, 8359727379851424541ull}}, {{9958512661448039863ull, 606686096444515875ull, 7901060084610705313ull, 5224829612407140338ull}}, {{7836454808382661925ull, 5370043638983032748ull, 652953068908605833ull, 6531037015508925423ull}}, {{9795568510478327406ull, 11324240567156178839ull, 14651249391417921003ull, 8163796269386156778ull}}, {{13039759346690036485ull, 4771807345258917822ull, 13768716888063588531ull, 5102372668366347986ull}}, {{7076327146507769798ull, 1353073163146259374ull, 7987524073224709856ull, 6377965835457934983ull}}, {{18068780969989488056ull, 1691341453932824217ull, 5372719073103499416ull, 7972457294322418729ull}}, {{4375459078602348179ull, 1057088408708015136ull, 14887164466758156895ull, 4982785808951511705ull}}, {{5469323848252935223ull, 15156418566167182632ull, 4773897528165532406ull, 6228482261189389632ull}}, {{6836654810316169029ull, 9722151170854202482ull, 5967371910206915508ull, 7785602826486737040ull}}, {{8884595274874993547ull, 15299716518638652359ull, 3729607443879322192ull, 4866001766554210650ull}}, {{6494058075166354030ull, 677901574588763833ull, 13885381341703928549ull, 6082502208192763312ull}}, {{12729258612385330442ull, 5459062986663342695ull, 17356726677129910686ull, 7603127760240954140ull}}, {{14873315660381913382ull, 17246972421946752896ull, 1624582136351418370ull, 4751954850150596338ull}}, {{144900501767840112ull, 12335343490578665313ull, 11254099707294048771ull, 5939943562688245422ull}}, {{4792811645637188043ull, 10807493344795943737ull, 4844252597262785156ull, 7424929453360306778ull}}, {{14524722324591712287ull, 15978055377352240643ull, 7639343891716628626ull, 4640580908350191736ull}}, {{13544216887312252455ull, 10749197184835524996ull, 9549179864645785783ull, 5800726135437739670ull}}, {{16930271109140315569ull, 8824810462617018341ull, 2713102793952456421ull, 7250907669297174588ull}}, {{7327780831143230749ull, 15642699096698660831ull, 3391378492440570526ull, 9063634586621468235ull}}, {{11497392047105601074ull, 5165000917009275115ull, 18260512622271214243ull, 5664771616638417646ull}}, {{9760054040454613439ull, 1844565127834205990ull, 13602268740984241996ull, 7080964520798022058ull}}, {{2976695513713490990ull, 2305706409792757488ull, 7779463889375526687ull, 8851205650997527573ull}}, {{1860434696070931869ull, 8358595533761555286ull, 7168007940073398131ull, 5532003531873454733ull}}, {{11548915406943440644ull, 5836558398774556203ull, 13571695943519135568ull, 6915004414841818416ull}}, {{9824458240251912901ull, 7295697998468195254ull, 16964619929398919460ull, 8643755518552273020ull}}, {{1528600381730057659ull, 13783183285897397842ull, 1379515419019548854ull, 5402347199095170638ull}}, {{11134122514017347882ull, 8005607070516971494ull, 10947766310629211876ull, 6752933998868963297ull}}, {{4694281105666909044ull, 10007008838146214368ull, 18296393906713902749ull, 8441167498586204121ull}}, {{2933925691041818153ull, 8560223533055077932ull, 4517717164055107362ull, 5275729686616377576ull}}, {{3667407113802272691ull, 1476907379464071607ull, 5647146455068884203ull, 6594662108270471970ull}}, {{18419316947535004576ull, 15681192279612253220ull, 16282305105690881061ull, 8243327635338089962ull}}, {{2288701055354602052ull, 12106588183971352215ull, 14788126709484188567ull, 5152079772086306226ull}}, {{16695934374475416277ull, 10521549211536802364ull, 9261786350000459901ull, 6440099715107882783ull}}, {{2423173894384718730ull, 17763622532848390860ull, 6965546919073186972ull, 8050124643884853479ull}}, {{10737855720845225014ull, 1878892046175468479ull, 11270995852061823714ull, 5031327902428033424ull}}, {{8810633632629143364ull, 11571987094574111407ull, 14088744815077279642ull, 6289159878035041780ull}}, {{6401606022359041301ull, 5241611831362863451ull, 17610931018846599553ull, 7861449847543802225ull}}, {{1695160754760706861ull, 14805222440670259417ull, 4089302859138042864ull, 4913406154714876391ull}}, {{6730636961878271480ull, 59783977128272655ull, 499942555495165677ull, 6141757693393595489ull}}, {{3801610183920451446ull, 4686415989837728723ull, 5236614212796345000ull, 7677197116741994361ull}}, {{70163355736588202ull, 2929009993648580452ull, 14802098929066185385ull, 4798248197963746475ull}}, {{87704194670735252ull, 8272948510488113469ull, 13890937642905343827ull, 5997810247454683094ull}}, {{4721316261765806969ull, 5729499619682753932ull, 8140300016776903976ull, 7497262809318353868ull}}, {{12174194700458405164ull, 3580937262301721207ull, 14311059547340340793ull, 4685789255823971167ull}}, {{10606057357145618551ull, 9087857596304539413ull, 13277138415748038087ull, 5857236569779963959ull}}, {{17869257714859411093ull, 6748135976953286362ull, 11984737001257659705ull, 7321545712224954949ull}}, {{13113200106719488058ull, 13046855989618995857ull, 1145863196289910919ull, 9151932140281193687ull}}, {{1278221039058598180ull, 15071814021152954267ull, 7633693525322276180ull, 5719957587675746054ull}}, {{15432834354105411437ull, 393023452731641217ull, 318744869798069418ull, 7149946984594682568ull}}, {{5455984887349600584ull, 9714651352769327330ull, 398431087247586772ull, 8937433730743353210ull}}, {{8021676573020888269ull, 15295029132335605389ull, 4860705447957129636ull, 5585896081714595756ull}}, {{14638781734703498241ull, 672042341709955120ull, 6075881809946412046ull, 6982370102143244695ull}}, {{18298477168379372801ull, 10063424963992219708ull, 2983166244005627153ull, 8727962627679055869ull}}, {{2213176193382332193ull, 17818855648563607078ull, 4170321911717210922ull, 5454976642299409918ull}}, {{11989842278582691049ull, 13050197523849733039ull, 14436274426501289461ull, 6818720802874262397ull}}, {{10375616829800975907ull, 2477688849530002587ull, 4210284977844448115ull, 8523401003592827997ull}}, {{4178917509411915990ull, 17689456595452109281ull, 4937271120366474023ull, 5327125627245517498ull}}, {{9835332905192282891ull, 17500134725887748697ull, 15394960937312868337ull, 6658907034056896872ull}}, {{16905852149917741518ull, 8040110352077522159ull, 796957097931533806ull, 8323633792571121091ull}}, {{17483686621339670305ull, 413382951621063445ull, 16638999250703066293ull, 5202271120356950681ull}}, {{8019550221392424169ull, 5128414707953717211ull, 6963691008096669154ull, 6502838900446188352ull}}, {{5412751758313142307ull, 15633890421796922322ull, 8704613760120836442ull, 8128548625557735440ull}}, {{7994655867373101846ull, 14382867532050464355ull, 5440383600075522776ull, 5080342890973584650ull}}, {{5381633815788989403ull, 17978584415063080444ull, 16023851536949179278ull, 6350428613716980812ull}}, {{6727042269736236754ull, 13249858481974074747ull, 1583070347476922482ull, 7938035767146226016ull}}, {{1898558409371454020ull, 12892847569661184621ull, 989418967173076551ull, 4961272354466391260ull}}, {{6984884030141705428ull, 11504373443649092872ull, 1236773708966345689ull, 6201590443082989075ull}}, {{8731105037677131785ull, 545408749279202378ull, 15381025191490095824ull, 7751988053853736343ull}}, {{10068626666975595270ull, 340880468299501486ull, 16530669772322391746ull, 4844992533658585214ull}}, {{3362411296864718279ull, 9649472622229152666ull, 11439965178548213874ull, 6056240667073231518ull}}, {{13426386157935673657ull, 2838468740931665024ull, 5076584436330491535ull, 7570300833841539398ull}}, {{8391491348709796036ull, 8691571990723372496ull, 17007923327988720921ull, 4731438021150962123ull}}, {{10489364185887245045ull, 15476151006831603524ull, 16648218141558513247ull, 5914297526438702654ull}}, {{13111705232359056306ull, 14733502740112116501ull, 11586900640093365751ull, 7392871908048378318ull}}, {{10500658779438104143ull, 16125968240211154669ull, 2630126881630965690ull, 4620544942530236449ull}}, {{17737509492725018083ull, 10934088263409167528ull, 7899344620466095017ull, 5775681178162795561ull}}, {{3725142792196720988ull, 18279296347688847315ull, 14485866794010006675ull, 7219601472703494451ull}}, {{44742471818513330ull, 18237434416183671240ull, 13495647474085120440ull, 9024501840879368064ull}}, {{27964044886570832ull, 11398396510114794525ull, 8434779671303200275ull, 5640313650549605040ull}}, {{4646641074535601443ull, 9636309619216105252ull, 10543474589129000344ull, 7050392063187006300ull}}, {{5808301343169501804ull, 12045387024020131565ull, 13179343236411250430ull, 8812990078983757875ull}}, {{5936031348694632580ull, 2916680871585194324ull, 5931246513543337567ull, 5508118799364848672ull}}, {{7420039185868290725ull, 17480909144763656617ull, 7414058141929171958ull, 6885148499206060840ull}}, {{13886735000762751310ull, 12627764394099794963ull, 9267572677411464948ull, 8606435624007576050ull}}, {{6373366366263025617ull, 17115724783167147660ull, 10403918941809553496ull, 5379022265004735031ull}}, {{7966707957828782021ull, 2947911905249382959ull, 8393212658834553967ull, 6723777831255918789ull}}, {{5346698928858589622ull, 17519947936843892411ull, 15103201841970580362ull, 8404722289069898486ull}}, {{1035843821322924562ull, 15561653478954820661ull, 4827815132804224822ull, 5252951430668686554ull}}, {{5906490795081043606ull, 10228694811838750018ull, 15258140952860056836ull, 6566189288335858192ull}}, {{16606485530706080316ull, 12785868514798437522ull, 625932117365519429ull, 8207736610419822741ull}}, {{14990739475118688101ull, 10297010830962717403ull, 2697050582567143595ull, 5129835381512389213ull}}, {{14126738325470972223ull, 8259577520276008850ull, 7982999246636317398ull, 6412294226890486516ull}}, {{8435050869983939470ull, 1101099863490235255ull, 9978749058295396748ull, 8015367783613108145ull}}, {{12189435821381044025ull, 9911559451536172842ull, 17765933207503092727ull, 5009604864758192590ull}}, {{6013422739871529223ull, 7777763295992828149ull, 12984044472524090101ull, 6262006080947740738ull}}, {{12128464443266799433ull, 14333890138418423090ull, 7006683553800336818ull, 7827507601184675923ull}}, {{12191976295469137550ull, 13570367354938902335ull, 2073334211911516559ull, 4892192250740422452ull}}, {{10628284350909034033ull, 12351273175246240015ull, 2591667764889395699ull, 6115240313425528065ull}}, {{8673669420208904637ull, 10827405450630412115ull, 7851270724539132528ull, 7644050391781910081ull}}, {{3115200378416871446ull, 6767128406644007572ull, 16436259248905427590ull, 4777531494863693800ull}}, {{3894000473021089308ull, 17682282545159785273ull, 2098579987422232871ull, 5971914368579617251ull}}, {{9479186609703749539ull, 17491167163022343687ull, 16458283039559954801ull, 7464892960724521563ull}}, {{12842020658705925318ull, 4014450449247882948ull, 7980583890511277799ull, 4665558100452825977ull}}, {{16052525823382406647ull, 406377043132465781ull, 14587415881566485153ull, 5831947625566032471ull}}, {{6230599223945844597ull, 5119657322342970131ull, 13622583833530718537ull, 7289934531957540589ull}}, {{3176563011504917842ull, 11011257671356100568ull, 3193171736631234459ull, 9112418164946925737ull}}, {{1985351882190573652ull, 4576193035383868903ull, 13524947381462991297ull, 5695261353091828585ull}}, {{16316747908020380776ull, 10331927312657224032ull, 3071126171546575409ull, 7119076691364785732ull}}, {{1949190811315924354ull, 17526595159248917945ull, 3838907714433219261ull, 8898845864205982165ull}}, {{12747459303140922482ull, 13259964983744267667ull, 4705160330734455990ull, 5561778665128738853ull}}, {{11322638110498765198ull, 7351584192825558776ull, 10493136431845457892ull, 6952223331410923566ull}}, {{14153297638123456497ull, 9189480241031948470ull, 3893048502952046557ull, 8690279164263654458ull}}, {{4234125005399772407ull, 8049268159858661746ull, 7044841332772417002ull, 5431424477664784036ull}}, {{14516028293604491317ull, 838213162968551374ull, 8806051665965521253ull, 6789280597080980045ull}}, {{8921663330150838338ull, 5659452472138077122ull, 15619250600884289470ull, 8486600746351225056ull}}, {{10187725599771661865ull, 17372215850368461913ull, 9762031625552680918ull, 5304125466469515660ull}}, {{17346343018141965235ull, 12491897776105801583ull, 12202539531940851148ull, 6630156833086894575ull}}, {{17071242754250068640ull, 15614872220132251979ull, 10641488396498676031ull, 8287696041358618219ull}}, {{8363683712192598948ull, 16676824165223739343ull, 4345087238597978567ull, 5179810025849136387ull}}, {{5842918621813360781ull, 16234344188102286275ull, 819673029820085305ull, 6474762532311420484ull}}, {{2691962258839313072ull, 6457872179845694132ull, 1024591287275106632ull, 8093453165389275605ull}}, {{10905848448629346478ull, 4036170112403558832ull, 2946212563760635597ull, 5058408228368297253ull}}, {{13632310560786683098ull, 9656898658931836444ull, 8294451723128182400ull, 6323010285460371566ull}}, {{17040388200983353872ull, 12071123323664795555ull, 1144692617055452192ull, 7903762856825464458ull}}, {{8344399616400902218ull, 7544452077290497222ull, 5327118904087045524ull, 4939851785515915286ull}}, {{1207127483646351965ull, 9430565096613121528ull, 15882270666963582713ull, 6174814731894894107ull}}, {{1508909354557939956ull, 16399892389193789814ull, 15241152315277090487ull, 7718518414868617634ull}}, {{14778126401880876185ull, 17167461770887200489ull, 14137406215475569458ull, 4824074009292886021ull}}, {{4637599947068931519ull, 12235955176754224804ull, 3836699714062298111ull, 6030092511616107527ull}}, {{5796999933836164398ull, 10683257952515393101ull, 184188624150484735ull, 7537615639520134409ull}}, {{5928967967861296701ull, 13594565247963202544ull, 11644332936162522719ull, 4711009774700084005ull}}, {{7411209959826620876ull, 12381520541526615276ull, 720358114920989687ull, 5888762218375105007ull}}, {{9264012449783276095ull, 10865214658480881191ull, 14735505698933400821ull, 7360952772968881258ull}}, {{6968329543801707215ull, 18193204341528489393ull, 9196010086811975218ull, 9201190966211101573ull}}, {{15884421010944536769ull, 15982438731882693774ull, 8053349313471178463ull, 5750744353881938483ull}}, {{10632154226825895154ull, 15366362396425979314ull, 5455000623411585175ull, 7188430442352423104ull}}, {{4066820746677593134ull, 14596266977105086239ull, 6818750779264481469ull, 8985538052940528880ull}}, {{9459291994314577565ull, 11428509869904372851ull, 4261719237040300918ull, 5615961283087830550ull}}, {{7212428974465834052ull, 5062265300525690256ull, 14550521083155151956ull, 7019951603859788187ull}}, {{9015536218082292565ull, 6327831625657112820ull, 13576465335516552041ull, 8774939504824735234ull}}, {{14858082173156208661ull, 15484109812104165272ull, 13096976853125232929ull, 5484337190515459521ull}}, {{125858642735709210ull, 5520079209848042879ull, 2536163011124377450ull, 6855421488144324402ull}}, {{13992381358701800225ull, 16123471049164829406ull, 12393575800760247620ull, 8569276860180405502ull}}, {{4133552330761237237ull, 853797368873242571ull, 3134298857047766859ull, 5355798037612753439ull}}, {{555254395024158642ull, 14902304766373716926ull, 17752931626591872285ull, 6694747547015941798ull}}, {{9917440030634974110ull, 4792822902684982445ull, 12967792496385064549ull, 8368434433769927248ull}}, {{8504243028360552771ull, 5301357323391807980ull, 8104870310240665343ull, 5230271521106204530ull}}, {{10630303785450690964ull, 2015010635812372071ull, 907715850946055871ull, 6537839401382755663ull}}, {{8676193713385975800ull, 16353821350047628801ull, 14969702868964733550ull, 8172299251728444578ull}}, {{16951836116934704635ull, 5609452325352380096ull, 13967750311530346373ull, 5107687032330277861ull}}, {{2743051072458829178ull, 11623501425117863025ull, 3624629834130769254ull, 6384608790412847327ull}}, {{8040499859000924377ull, 5306004744542552973ull, 18365845347945625280ull, 7980760988016059158ull}}, {{7331155421089271688ull, 3316252965339095608ull, 6866967324038627896ull, 4987975617510036974ull}}, {{9163944276361589609ull, 4145316206673869510ull, 17807081191903060678ull, 6234969521887546217ull}}, {{2231558308597211203ull, 14405017295197112696ull, 8423793434596662135ull, 7793711902359432772ull}}, {{1394723942873257002ull, 15920664837139277291ull, 14488242933477689642ull, 4871069938974645482ull}}, {{15578462983873734965ull, 10677459009569320805ull, 8886931629992336245ull, 6088837423718306853ull}}, {{5638020674560004994ull, 17958509780389038911ull, 15720350555917808210ull, 7611046779647883566ull}}, {{10441291949241084977ull, 15835754631170537223ull, 5213533079021242227ull, 4756904237279927229ull}}, {{8439928918123968318ull, 15183007270535783625ull, 11128602367203940688ull, 5946130296599909036ull}}, {{15161597166082348301ull, 532015014460177915ull, 13910752959004925861ull, 7432662870749886295ull}}, {{7170155219587773736ull, 2638352393251305149ull, 15611749627019160519ull, 4645414294218678934ull}}, {{13574380042912105074ull, 17132998546846295148ull, 10291314996919174840ull, 5806767867773348668ull}}, {{16967975053640131343ull, 2969504109848317319ull, 12864143746148968551ull, 7258459834716685835ull}}, {{16598282798622776274ull, 17546938192592560361ull, 11468493664258822784ull, 9073074793395857294ull}}, {{3456397721498153315ull, 10966836370370350226ull, 2556122521734376336ull, 5670671745872410809ull}}, {{13543869188727467452ull, 13708545462962937782ull, 7806839170595358324ull, 7088339682340513511ull}}, {{7706464449054558507ull, 17135681828703672228ull, 5146862944816810001ull, 8860424602925641889ull}}, {{14039912317513874875ull, 3792272115298713286ull, 14746004386578976011ull, 5537765376828526180ull}}, {{8326518360037567786ull, 128654125696003704ull, 18432505483223720014ull, 6922206721035657725ull}}, {{10408147950046959732ull, 9384189693974780438ull, 9205573798747486305ull, 8652758401294572157ull}}, {{1893406450351961929ull, 17394333604802707534ull, 8059326633430872892ull, 5407974000809107598ull}}, {{11590130099794728219ull, 3296172932293832801ull, 850786254933815308ull, 6759967501011384498ull}}, {{652604569461246561ull, 4120216165367291002ull, 10286854855522044943ull, 8449959376264230622ull}}, {{5019563874340667005ull, 9492664130995638732ull, 1817598266273890185ull, 5281224610165144139ull}}, {{6274454842925833756ull, 16477516182171936319ull, 16107055888124526443ull, 6601530762706430173ull}}, {{3231382535229904291ull, 15985209209287532495ull, 6298761804873494342ull, 8251913453383037717ull}}, {{8937143112159772038ull, 5379069737377319905ull, 6242569137259627916ull, 5157445908364398573ull}}, {{15783114908627102952ull, 6723837171721649881ull, 12414897440001922799ull, 6446807385455498216ull}}, {{5893835580501714977ull, 3793110446224674448ull, 15518621800002403499ull, 8058509231819372770ull}}, {{3683647237813571861ull, 64851019676727578ull, 14310824643428890091ull, 5036568269887107981ull}}, {{13827931084121740634ull, 13916121829878073184ull, 4053472749003948901ull, 6295710337358884977ull}}, {{17284913855152175793ull, 3560094232065427768ull, 9678526954682324031ull, 7869637921698606221ull}}, {{10803071159470109871ull, 9142587922681974211ull, 8354922355890146471ull, 4918523701061628888ull}}, {{8892152930910249434ull, 6816548884925079860ull, 10443652944862683089ull, 6148154626327036110ull}}, {{11115191163637811792ull, 13132372124583737729ull, 3831194144223578053ull, 7685193282908795138ull}}, {{29465449632550514ull, 10513575587078530033ull, 7006182358567124187ull, 4803245801817996961ull}}, {{4648517830468076047ull, 8530283465420774637ull, 13369413966636293138ull, 6004057252272496201ull}}, {{10422333306512482963ull, 1439482294921192488ull, 2876709403013202711ull, 7505071565340620252ull}}, {{6513958316570301852ull, 7817205461966827161ull, 11021315413738027502ull, 4690669728337887657ull}}, {{12754133914140265219ull, 548134790603758143ull, 18388330285599922282ull, 5863337160422359571ull}}, {{11330981374247943619ull, 9908540525109473487ull, 18373726838572514948ull, 7329171450527949464ull}}, {{9552040699382541620ull, 12385675656386841859ull, 4520414474506092069ull, 9161464313159936831ull}}, {{3664182427900394561ull, 10046890294455470114ull, 9742788074207389399ull, 5725915195724960519ull}}, {{13803600071730269009ull, 7946926849641949738ull, 7566799074331848845ull, 7157393994656200649ull}}, {{8031128052808060453ull, 14545344580479825077ull, 14070184861342198960ull, 8946742493320250811ull}}, {{7325298042218731735ull, 9090840362799890673ull, 6488022529125180398ull, 5591714058325156757ull}}, {{13768308571200802573ull, 2140178416645087533ull, 12721714179833863402ull, 6989642572906445946ull}}, {{3375327658718839504ull, 11898595057661135225ull, 6678770687937553444ull, 8737053216133057433ull}}, {{13638794832767744450ull, 16659993947892985323ull, 15703446726029440662ull, 5460658260083160895ull}}, {{12436807522532292658ull, 11601620398011455846ull, 15017622389109412924ull, 6825822825103951119ull}}, {{6322637366310590015ull, 14502025497514319808ull, 14160341967959378251ull, 8532278531379938899ull}}, {{3951648353944118760ull, 6757922926732755928ull, 6544370720760917455ull, 5332674082112461812ull}}, {{4939560442430148449ull, 3835717639988557006ull, 8180463400951146819ull, 6665842602640577265ull}}, {{15397822589892461369ull, 182961031558308353ull, 14837265269616321428ull, 8332303253300721581ull}}, {{2706110091041706500ull, 9337722681578718529ull, 11579133802723894844ull, 5207689533312950988ull}}, {{7994323632229521029ull, 11672153351973398161ull, 14473917253404868555ull, 6509611916641188735ull}}, {{14604590558714289190ull, 9978505671539359797ull, 13480710548328697790ull, 8137014895801485919ull}}, {{11433712108410124696ull, 1624880026284711969ull, 15342973120346517975ull, 5085634309875928699ull}}, {{457082080230492158ull, 15866158088138053674ull, 14567030382005759564ull, 6357042887344910874ull}}, {{9794724637142891005ull, 1385953536463015476ull, 8985415940652423648ull, 7946303609181138593ull}}, {{15345074935069082686ull, 866220960289384672ull, 17145100008976234540ull, 4966439755738211620ull}}, {{734599595126801742ull, 1082776200361730841ull, 2984630937510741559ull, 6208049694672764526ull}}, {{5529935512335890081ull, 15188528305734327263ull, 12954160708743202756ull, 7760062118340955657ull}}, {{10373738722851013157ull, 269458154229178731ull, 1178821415323419867ull, 4850038823963097286ull}}, {{8355487385136378542ull, 14171880748068637126ull, 10696898806009050641ull, 6062548529953871607ull}}, {{1220987194565697370ull, 3879792879803632696ull, 8759437489083925398ull, 7578185662442339509ull}}, {{763116996603560856ull, 16259928605159434147ull, 7780491439891147325ull, 4736366039026462193ull}}, {{14788954301036614782ull, 6489852701167128971ull, 14337300318291322061ull, 5920457548783077741ull}}, {{13874506857868380573ull, 12724001894886299118ull, 4086567342581988864ull, 7400571935978847177ull}}, {{4059880767740349955ull, 7952501184303936949ull, 14083319635182212800ull, 4625357459986779485ull}}, {{9686536978102825347ull, 9940626480379921186ull, 3769091488695602288ull, 5781696824983474357ull}}, {{2884799185773755876ull, 12425783100474901483ull, 9323050379296890764ull, 7227121031229342946ull}}, {{17441057037499358557ull, 15532228875593626853ull, 2430440937266337647ull, 9033901289036678683ull}}, {{13206503657650793050ull, 16625172074887098639ull, 17659926650287318693ull, 5646188305647924176ull}}, {{11896443553636103408ull, 6946407038326709587ull, 3628164239149596751ull, 7057735382059905221ull}}, {{10258868423617741356ull, 4071322779480999080ull, 9146891317364383843ull, 8822169227574881526ull}}, {{6411792764761088348ull, 238733727961930473ull, 1105121054925351998ull, 5513855767234300954ull}}, {{12626426974378748339ull, 9521789196807188899ull, 10604773355511465805ull, 6892319709042876192ull}}, {{11171347699546047519ull, 16513922514436374028ull, 13255966694389332256ull, 8615399636303595240ull}}, {{16205464349071055508ull, 10321201571522733767ull, 8284979183993332660ull, 5384624772689747025ull}}, {{15645144417911431481ull, 12901501964403417209ull, 14967909998419053729ull, 6730780965862183781ull}}, {{5721372467107125639ull, 2291819400222107800ull, 4874829442741653450ull, 8413476207327729727ull}}, {{3575857791941953524ull, 6044073143566205279ull, 9964297429354615262ull, 5258422629579831079ull}}, {{18304880295209605617ull, 16778463466312532406ull, 7843685768265881173ull, 6573028286974788849ull}}, {{13657728332157231214ull, 7138021277608501796ull, 14416293228759739371ull, 8216285358718486061ull}}, {{17759452244453045317ull, 2155420289291619670ull, 11316026277188531059ull, 5135178349199053788ull}}, {{12975943268711530838ull, 16529333416896688300ull, 14145032846485663823ull, 6418972936498817235ull}}, {{16219929085889413547ull, 16049980752693472471ull, 13069605039679691875ull, 8023716170623521544ull}}, {{17054984706321965323ull, 7725394961219726342ull, 8168503149799807422ull, 5014822606639700965ull}}, {{12095358846047680846ull, 433371664669882120ull, 14822314955677147182ull, 6268528258299626206ull}}, {{15119198557559601057ull, 9765086617692128458ull, 9304521657741658169ull, 7835660322874532758ull}}, {{14061185116902138565ull, 17632394182126050046ull, 1203640017661148451ull, 4897287701796582974ull}}, {{8353109359272897398ull, 17428806709230174654ull, 10727922058931211372ull, 6121609627245728717ull}}, {{1218014662236345939ull, 3339264312828166702ull, 18021588592091402120ull, 7652012034057160896ull}}, {{14596317219179879924ull, 2087040195517604188ull, 11263492870057126325ull, 4782507521285725560ull}}, {{18245396523974849905ull, 7220486262824393139ull, 14079366087571407906ull, 5978134401607156950ull}}, {{18195059636541174477ull, 18248979865385267232ull, 8375835572609484074ull, 7472668002008946188ull}}, {{11371912272838234049ull, 16017298434293179924ull, 14458269269735703354ull, 4670417501255591367ull}}, {{14214890341047792561ull, 10798251006011699097ull, 13461150568742241289ull, 5838021876569489209ull}}, {{3933554871027576989ull, 18109499775942011776ull, 2991380155645637899ull, 7297527345711861512ull}}, {{4916943588784471236ull, 18025188701500126816ull, 3739225194557047374ull, 9121909182139826890ull}}, {{3073089742990294522ull, 6654056920010191356ull, 6948701765025542513ull, 5701193238837391806ull}}, {{3841362178737868153ull, 12929257168440127099ull, 17909249243136703949ull, 7126491548546739757ull}}, {{190016704994947287ull, 2326513405267995162ull, 8551503498638716225ull, 8908114435683424697ull}}, {{4730446459049229959ull, 12983285924360966736ull, 16873904732717667400ull, 5567571522302140435ull}}, {{5913058073811537448ull, 16229107405451208420ull, 16480694897469696346ull, 6959464402877675544ull}}, {{7391322592264421810ull, 11063012219959234717ull, 2154124548127568817ull, 8699330503597094431ull}}, {{6925419629378957583ull, 18443597683542991458ull, 8263856870220812366ull, 5437081564748184019ull}}, {{17880146573578472787ull, 13831125067573963514ull, 5718135069348627554ull, 6796351955935230024ull}}, {{13126811180118315176ull, 8065534297612678585ull, 7147668836685784443ull, 8495439944919037530ull}}, {{1286727959932865129ull, 2735115926794230164ull, 9078979041356003181ull, 5309649965574398456ull}}, {{1608409949916081411ull, 8030580926920175609ull, 11348723801695003976ull, 6637062456967998070ull}}, {{6622198455822489668ull, 10038226158650219511ull, 4962532715263979162ull, 8296328071209997588ull}}, {{11056403062530137899ull, 10885577367583775098ull, 12324954983894762784ull, 5185205044506248492ull}}, {{4597131791307896565ull, 13606971709479718873ull, 15406193729868453480ull, 6481506305632810615ull}}, {{10358100757562258610ull, 17008714636849648591ull, 14646056143908178946ull, 8101882882041013269ull}}, {{13391342001117493488ull, 15242132666458418273ull, 11459628099156305793ull, 5063676801275633293ull}}, {{2904119446114703147ull, 5217607777790859130ull, 489477068663218530ull, 6329596001594541617ull}}, {{12853521344498154742ull, 15745381759093349720ull, 5223532354256411066ull, 7911995001993177021ull}}, {{8033450840311346714ull, 14452549617860731479ull, 5570550730623950868ull, 4944996876245735638ull}}, {{5430127531961795488ull, 18065687022325914349ull, 16186560450134714393ull, 6181246095307169547ull}}, {{11399345433379632264ull, 8747050722625229224ull, 15621514544241005088ull, 7726557619133961934ull}}, {{7124590895862270165ull, 5466906701640768265ull, 5151760571723240276ull, 4829098511958726209ull}}, {{13517424638255225611ull, 6833633377050960331ull, 11051386733081438249ull, 6036373139948407761ull}}, {{12285094779391644109ull, 13153727739741088318ull, 18425919434779185715ull, 7545466424935509701ull}}, {{3066498218692389664ull, 5915236828124486247ull, 13822042655950685024ull, 4715916515584693563ull}}, {{17668180828647650792ull, 7394046035155607808ull, 12665867301510968376ull, 5894895644480866954ull}}, {{3638481962100011874ull, 9242557543944509761ull, 6608962090033934662ull, 7368619555601083693ull}}, {{9159788471052402747ull, 2329824893075861393ull, 12872888630969806232ull, 9210774444501354616ull}}, {{17254082840476221477ull, 1456140558172413370ull, 8045555394356128895ull, 5756734027813346635ull}}, {{12344231513740501038ull, 15655233752997680425ull, 5445258224517773214ull, 7195917534766683294ull}}, {{1595231336893462585ull, 10345670154392324724ull, 16029944817501992326ull, 8994896918458354117ull}}, {{10220391622413189924ull, 1854357828067815048ull, 12324558520152439156ull, 5621810574036471323ull}}, {{12775489528016487405ull, 2317947285084768810ull, 10794012131763161041ull, 7027263217545589154ull}}, {{6745989873165833448ull, 7509120124783348917ull, 4269143127849175493ull, 8784079021931986443ull}}, {{6522086679942339857ull, 6999043087203287025ull, 362371445692040731ull, 5490049388707491527ull}}, {{12764294368355312725ull, 4137117840576720877ull, 14288022362397214626ull, 6862561735884364408ull}}, {{2120309905161977195ull, 14394769337575676905ull, 17860027952996518282ull, 8578202169855455510ull}}, {{12854408736794705507ull, 13608416854412185969ull, 6550831452195436022ull, 5361376356159659694ull}}, {{2232952865711218171ull, 7787149031160456654ull, 17411911352099070836ull, 6701720445199574617ull}}, {{12014563118993798522ull, 9733936288950570817ull, 7929831134841674833ull, 8377150556499468272ull}}, {{591572921730042221ull, 17612925226662576521ull, 4956144459276046770ull, 5235719097812167670ull}}, {{5351152170589940680ull, 12792784496473444843ull, 15418552610949834271ull, 6544648872265209587ull}}, {{2077254194810037945ull, 11379294602164418150ull, 14661504745259904935ull, 8180811090331511984ull}}, {{15133341927038437428ull, 14029588153993843199ull, 9163440465787440584ull, 5113006931457194990ull}}, {{14304991390370658881ull, 17536985192492303999ull, 2230928545379524922ull, 6391258664321493738ull}}, {{13269553219535935697ull, 12697859453760604191ull, 12012032718579181961ull, 7989073330401867172ull}}, {{15210999789851041667ull, 1018633130959295763ull, 16730892485966764534ull, 4993170831501166982ull}}, {{14402063718886414179ull, 10496663450553895512ull, 11690243570603679859ull, 6241463539376458728ull}}, {{18002579648608017724ull, 8509143294764981486ull, 14612804463254599824ull, 7801829424220573410ull}}, {{6639926261952623174ull, 5318214559228113429ull, 13744688807961512794ull, 4876143390137858381ull}}, {{12911593845868166871ull, 15871140235889917594ull, 3345802954669727280ull, 6095179237672322977ull}}, {{6916120270480432781ull, 1392181221152845377ull, 8793939711764547005ull, 7618974047090403721ull}}, {{15851790215118740248ull, 3175956272434222312ull, 17025427365921311638ull, 4761858779431502325ull}}, {{1367993695188873694ull, 13193317377397553699ull, 7446726152119475835ull, 5952323474289377907ull}}, {{15545050174268255829ull, 11879960703319554219ull, 4696721671721956890ull, 7440404342861722384ull}}, {{7409813349703965942ull, 12036661458002109291ull, 2935451044826223056ull, 4650252714288576490ull}}, {{4650580668702569523ull, 15045826822502636614ull, 12892685842887554628ull, 5812815892860720612ull}}, {{15036597872732987711ull, 360539454418744151ull, 16115857303609443286ull, 7266019866075900765ull}}, {{14184061322488846735ull, 9674046354878205997ull, 6309763574229640395ull, 9082524832594875957ull}}, {{11170881335769223162ull, 3740435962585184796ull, 6249445243107219199ull, 5676578020371797473ull}}, {{13963601669711528952ull, 63858934804093091ull, 12423492572311411903ull, 7095722525464746841ull}}, {{12842816068712023286ull, 13914881723787280076ull, 1694307660107101166ull, 8869653156830933552ull}}, {{17250132079799790362ull, 4085115058939662143ull, 1058942287566938229ull, 5543533223019333470ull}}, {{16950979081322350048ull, 9718079842101965583ull, 10547049896313448594ull, 6929416528774166837ull}}, {{16577037833225549656ull, 2924227765772681171ull, 17795498388819198647ull, 8661770660967708546ull}}, {{8054805636552274583ull, 8745171381249007588ull, 15733872511439387058ull, 5413606663104817841ull}}, {{10068507045690343229ull, 1708092189706483677ull, 5832282584017070111ull, 6767008328881022302ull}}, {{17197319825540316940ull, 15970173292415268308ull, 16513725266876113446ull, 8458760411101277877ull}}, {{1524952854107922280ull, 5369672289332154789ull, 12626921301011264856ull, 5286725256938298673ull}}, {{6517877086062290754ull, 6712090361665193486ull, 1948593570981917358ull, 6608406571172873342ull}}, {{17370718394432639250ull, 17613484988936267665ull, 11659114000582172505ull, 8260508213966091677ull}}, {{3939169968879317675ull, 4090899090444085435ull, 9592789259577551768ull, 5162817633728807298ull}}, {{312276442671759190ull, 5113623863055106794ull, 2767614537617163902ull, 6453522042161009123ull}}, {{9613717590194474795ull, 15615401865673659300ull, 17294576227303618589ull, 8066902552701261403ull}}, {{15231945530726322555ull, 12065469175259731014ull, 8503267132851067666ull, 5041814095438288377ull}}, {{9816559876553127386ull, 5858464432219887960ull, 15240769934491222487ull, 6302267619297860471ull}}, {{12270699845691409232ull, 2711394521847472046ull, 14439276399686640205ull, 7877834524122325589ull}}, {{3057501385129742866ull, 4000464585368363981ull, 11330390759017844080ull, 4923646577576453493ull}}, {{8433562749839566487ull, 5000580731710454976ull, 327930393490141388ull, 6154558221970566867ull}}, {{10541953437299458108ull, 6250725914638068720ull, 14244971047144840447ull, 7693197777463208583ull}}, {{6588720898312161318ull, 10824232724289874806ull, 15820635932106607135ull, 4808248610914505364ull}}, {{17459273159744977455ull, 8918604886934955603ull, 1329050841423707303ull, 6010310763643131706ull}}, {{17212405431253833915ull, 6536570090241306600ull, 10884685588634409937ull, 7512888454553914632ull}}, {{10757753394533646197ull, 15614571352469286385ull, 6802928492896506210ull, 4695555284096196645ull}}, {{18058877761594445650ull, 10294842153731832173ull, 13115346634548020667ull, 5869444105120245806ull}}, {{8738539146710893351ull, 8256866673737402313ull, 7170811256330250026ull, 7336805131400307258ull}}, {{15534859951816004592ull, 1097711305316977083ull, 18186886107267588341ull, 9171006414250384072ull}}, {{7403444460671308918ull, 2991912575036804629ull, 11366803817042242713ull, 5731879008906490045ull}}, {{13865991594266524052ull, 8351576737223393690ull, 373446716020639679ull, 7164848761133112557ull}}, {{8109117455978379257ull, 5827784903101854209ull, 5078494413453187503ull, 8956060951416390696ull}}, {{16597413456054956796ull, 10559894592079740736ull, 3174059008408242189ull, 5597538094635244185ull}}, {{2300022746359144378ull, 17811554258527063825ull, 8579259778937690640ull, 6996922618294055231ull}}, {{7486714451376318377ull, 3817698749449278165ull, 6112388705244725397ull, 8746153272867569039ull}}, {{6985039541323892938ull, 4691904727619492805ull, 10737771968419035229ull, 5466345795542230649ull}}, {{13342985445082254076ull, 10476566927951753910ull, 18033900978951181940ull, 6832932244427788311ull}}, {{7455359769498041787ull, 13095708659939692388ull, 17930690205261589521ull, 8541165305534735389ull}}, {{13882971892791051925ull, 1267288884821225886ull, 13512524387502187403ull, 5338228315959209618ull}}, {{8130342829134039098ull, 15419169161308696070ull, 7667283447522958445ull, 6672785394949012023ull}}, {{939556499562773065ull, 5438903396353706376ull, 4972418290976310153ull, 8340981743686265029ull}}, {{587222812226733166ull, 14928529668789536245ull, 5413604441073887797ull, 5213113589803915643ull}}, {{5345714533710804361ull, 4825604030704756594ull, 2155319532914971843ull, 6516391987254894554ull}}, {{15905515203993281259ull, 1420319019953557838ull, 11917521452998490612ull, 8145489984068618192ull}}, {{5329260984068412883ull, 10111071424325749457ull, 7448450908124056632ull, 5090931240042886370ull}}, {{11273262248512904008ull, 12638839280407186821ull, 87191598300294982ull, 6363664050053607963ull}}, {{256519755358966297ull, 6575177063654207719ull, 13944047553157532440ull, 7954580062567009953ull}}, {{7077853874740435792ull, 4109485664783879824ull, 1797500693082375919ull, 4971612539104381221ull}}, {{8847317343425544740ull, 525171062552461876ull, 6858561884780357803ull, 6214515673880476526ull}}, {{11059146679281930925ull, 14491521883472741057ull, 17796574392830223061ull, 7768144592350595657ull}}, {{18441181720619676588ull, 11363044186384157112ull, 4205329967877807557ull, 4855090370219122286ull}}, {{4604733077065044119ull, 368747177698032679ull, 14480034496702035255ull, 6068862962773902857ull}}, {{1144230327903917245ull, 14295992027404704561ull, 4264985065595380356ull, 7586078703467378572ull}}, {{12244359001008418038ull, 18158367053982716158ull, 11888987702851888530ull, 4741299189667111607ull}}, {{6082076714405746740ull, 13474586780623619390ull, 10249548610137472759ull, 5926623987083889509ull}}, {{16825967929861959232ull, 12231547457352136333ull, 17423621781099228853ull, 7408279983854861886ull}}, {{12822072965377418472ull, 9950560170058779160ull, 6278077594759630129ull, 4630174989909288679ull}}, {{16027591206721773090ull, 17049886231000861854ull, 3235910975022149757ull, 5787718737386610849ull}}, {{10811116971547440555ull, 7477299733468913606ull, 8656574737205075101ull, 7234648421733263561ull}}, {{4290524177579524885ull, 13958310685263529912ull, 15432404439933731780ull, 9043310527166579451ull}}, {{2681577610987203054ull, 17947316215144482003ull, 7339409765744888410ull, 5652069079479112157ull}}, {{17187030069016167529ull, 13210773232075826695ull, 13785948225608498417ull, 7065086349348890196ull}}, {{16872101567842821507ull, 2678408484812619657ull, 17232435282010623022ull, 8831357936686112745ull}}, {{3627534452260681586ull, 15509063358290050998ull, 3852743023615557532ull, 5519598710428820466ull}}, {{13757790102180627790ull, 939585124153012131ull, 14039300816374222724ull, 6899498388036025582ull}}, {{12585551609298396834ull, 1174481405191265164ull, 8325753983613002597ull, 8624372985045031978ull}}, {{17089341792666273829ull, 3039893887458234679ull, 9815282258185514527ull, 5390233115653144986ull}}, {{16749991222405454383ull, 17634925414604957061ull, 3045730785877117350ull, 6737791394566431233ull}}, {{7102430972724654266ull, 12820284731401420519ull, 8418849500773784592ull, 8422239243208039041ull}}, {{11356548385593990772ull, 8012677957125887824ull, 16790995984052085130ull, 5263899527005024400ull}}, {{14195685481992488465ull, 792475409552583972ull, 2542000906355554797ull, 6579874408756280501ull}}, {{17744606852490610582ull, 5602280280368117869ull, 7789187151371831400ull, 8224843010945350626ull}}, {{13396222292020325566ull, 3501425175230073668ull, 9479927988034782529ull, 5140526881840844141ull}}, {{16745277865025406957ull, 8988467487464979989ull, 16461596003470866065ull, 6425658602301055176ull}}, {{7096539275999594984ull, 15847270377758612891ull, 2130250930629030965ull, 8032073252876318971ull}}, {{2129494038286052913ull, 12210386995312827009ull, 17472307896139002017ull, 5020045783047699356ull}}, {{7273553566284954046ull, 1427925688858870049ull, 3393640796464200906ull, 6275057228809624196ull}}, {{13703627976283580461ull, 11008279147928363369ull, 4242050995580251132ull, 7843821536012030245ull}}, {{1647238457536155932ull, 16103546504310002914ull, 4957124881451350909ull, 4902388460007518903ull}}, {{11282420108774970723ull, 6294375075105339930ull, 1584720083386800733ull, 6127985575009398629ull}}, {{4879653099113937596ull, 12479654862309062817ull, 6592586122660888820ull, 7659981968761748286ull}}, {{14578998233014680758ull, 17023156325797940068ull, 17955424381945219224ull, 4787488730476092678ull}}, {{18223747791268350947ull, 2832201333537873469ull, 13220908440576748223ull, 5984360913095115848ull}}, {{8944626683803274971ull, 17375309722204505549ull, 16526135550720935278ull, 7480451141368894810ull}}, {{7896234686590740809ull, 6247882557950428064ull, 14940520737627972453ull, 4675281963355559256ull}}, {{9870293358238426011ull, 12421539215865422984ull, 228906848325413950ull, 5844102454194449071ull}}, {{12337866697798032514ull, 6303551982977002922ull, 14121191615688931150ull, 7305128067743061338ull}}, {{6198961335392764835ull, 17102812015576029461ull, 8428117482756388129ull, 9131410084678826673ull}}, {{6180193843834171974ull, 3771728482093936557ull, 16796788472791212341ull, 5707131302924266670ull}}, {{12336928323220102871ull, 9326346621044808600ull, 11772613554134239618ull, 7133914128655333338ull}}, {{15421160404025128589ull, 2434561239451234942ull, 5492394905813023715ull, 8917392660819166673ull}}, {{5026539234088317464ull, 17662501839152879503ull, 14961961862201609581ull, 5573370413011979170ull}}, {{1671488024183008926ull, 8243069243658935667ull, 9479080290897236169ull, 6966713016264973963ull}}, {{15924418085510924870ull, 14915522573001057487ull, 7237164345194157307ull, 8708391270331217454ull}}, {{16870290331085409900ull, 7016358598911966977ull, 18358285771028512029ull, 5442744543957010908ull}}, {{7252804858574598662ull, 13382134267067346626ull, 4501113140076088420ull, 6803430679946263636ull}}, {{18289378110073024136ull, 16727667833834183282ull, 5626391425095110525ull, 8504288349932829545ull}}, {{16042547337223027989ull, 12760635405360058503ull, 15045709686752913838ull, 5315180218708018465ull}}, {{15441498153101397082ull, 6727422219845297321ull, 4972079053158978586ull, 6643975273385023082ull}}, {{5466814636094582641ull, 17632649811661397460ull, 15438470853303499040ull, 8304969091731278852ull}}, {{12640131184413889959ull, 11020406132288373412ull, 425672246459911092ull, 5190605682332049283ull}}, {{15800163980517362448ull, 13775507665360466765ull, 14367148363357052577ull, 6488257102915061603ull}}, {{5915146920364539348ull, 3384326526418419745ull, 13347249435768927818ull, 8110321378643827004ull}}, {{15226181871296306853ull, 6726890097438900244ull, 17565402934210355694ull, 5068950861652391877ull}}, {{585983265410831950ull, 17631984658653401114ull, 8121695612480780905ull, 6336188577065489847ull}}, {{9955851118618315745ull, 8204922768034587680ull, 5540433497173588228ull, 7920235721331862309ull}}, {{6222406949136447341ull, 14351448766876393108ull, 5768613944947186594ull, 4950147325832413943ull}}, {{7778008686420559176ull, 8715938921740715577ull, 2599081412756595339ull, 6187684157290517429ull}}, {{14334196876453086874ull, 6283237633748506567ull, 7860537784373132078ull, 7734605196613146786ull}}, {{15876402075424261152ull, 17762081576374980316ull, 9524522133660595452ull, 4834128247883216741ull}}, {{1398758520570774824ull, 3755857896759173780ull, 16517338685503132220ull, 6042660309854020926ull}}, {{1748448150713468530ull, 4694822370948967225ull, 11423301320024139467ull, 7553325387317526158ull}}, {{12621995140264387592ull, 628420972629410563ull, 2527877306587699263ull, 4720828367073453849ull}}, {{11165807906903096585ull, 14620584271068926916ull, 7771532651662011982ull, 5901035458841817311ull}}, {{13957259883628870732ull, 9052358301981382837ull, 5102729796150127074ull, 7376294323552271639ull}}, {{3611516799253924702ull, 2092075840621952739ull, 1766726226760270939ull, 9220367904440339549ull}}, {{18398099064029560603ull, 17448448464884578125ull, 3410046900938863288ull, 5762729940275212218ull}}, {{9162565774754787042ull, 3363816507396171041ull, 13485930663028354919ull, 7203412425344015272ull}}, {{16064893236870871706ull, 18039828689527377513ull, 16857413328785443648ull, 9004265531680019090ull}}, {{3123029245403212961ull, 11274892930954610946ull, 15147569348918290184ull, 5627665957300011931ull}}, {{13127158593608792009ull, 14093616163693263682ull, 14322775667720474826ull, 7034582446625014914ull}}, {{7185576205156214203ull, 8393648167761803795ull, 8680097547795817725ull, 8793228058281268643ull}}, {{2185142119008939925ull, 7551873114064821324ull, 3119217958158692126ull, 5495767536425792902ull}}, {{2731427648761174906ull, 216469355726250847ull, 13122394484553140966ull, 6869709420532241127ull}}, {{17249342616233632344ull, 9493958731512589366ull, 11791307087264038303ull, 8587136775665301409ull}}, {{6169153116718632311ull, 12851253234836450210ull, 452037901898942083ull, 5366960484790813381ull}}, {{16934813432753066197ull, 11452380525118174858ull, 5176733395801065508ull, 6708700605988516726ull}}, {{11945144754086556938ull, 14315475656397718573ull, 15694288781606107693ull, 8385875757485645907ull}}, {{9771558480517792039ull, 11253015294462268060ull, 7503087479290123356ull, 5241172348428528692ull}}, {{12214448100647240048ull, 14066269118077835075ull, 9378859349112654195ull, 6551465435535660865ull}}, {{10656374107381662156ull, 12971150379169905940ull, 16335260204818205648ull, 8189331794419576081ull}}, {{15883605853968314656ull, 8106968986981191212ull, 3292008600370296674ull, 5118332371512235051ull}}, {{1407763243750841703ull, 910339196871713208ull, 17950068805745034555ull, 6397915464390293813ull}}, {{1759704054688552129ull, 14972982051371805222ull, 8602527951899129481ull, 7997394330487867267ull}}, {{14934873089462508793ull, 2440584754466296407ull, 3070736960723261974ull, 4998371456554917042ull}}, {{14056905343400748087ull, 12274102979937646317ull, 13061793237758853275ull, 6247964320693646302ull}}, {{3736073623968771397ull, 10730942706494669993ull, 7103869510343790786ull, 7809955400867057878ull}}, {{13864261061048951883ull, 11318525209986556649ull, 18274976499247032953ull, 4881222125541911173ull}}, {{3495268271029026142ull, 313098457201032100ull, 9008662568776627480ull, 6101527656927388967ull}}, {{4369085338786282677ull, 391373071501290125ull, 6649142192543396446ull, 7626909571159236209ull}}, {{5036521345955120625ull, 14079666224970470040ull, 15684928916408092538ull, 4766818481974522630ull}}, {{6295651682443900782ull, 8376210744358311742ull, 10382789108655339865ull, 5958523102468153288ull}}, {{17092936639909651785ull, 15081949448875277581ull, 12978486385819174831ull, 7448153878085191610ull}}, {{12988928409157226318ull, 16343747433188130344ull, 12723240009564372173ull, 4655096173803244756ull}}, {{16236160511446532897ull, 6594626236202999218ull, 15904050011955465217ull, 5818870217254055945ull}}, {{11071828602453390313ull, 12854968813681136927ull, 6045004459662167809ull, 7273587771567569932ull}}, {{9228099734639349987ull, 2233652961819257447ull, 7556255574577709762ull, 9091984714459462415ull}}, {{12685091361790675598ull, 6007719119564423808ull, 11640188761752150457ull, 5682490446537164009ull}}, {{15856364202238344498ull, 12121334917882917664ull, 715177896908024359ull, 7103113058171455012ull}}, {{1373711179088379006ull, 10539982628926259177ull, 893972371135030449ull, 8878891322714318765ull}}, {{12387784532998706639ull, 18116704189147381745ull, 2864575741173087982ull, 5549307076696449228ull}}, {{1649672610966219587ull, 13422508199579451374ull, 3580719676466359978ull, 6936633845870561535ull}}, {{11285462800562550291ull, 7554763212619538409ull, 18310957650865113685ull, 8670792307338201918ull}}, {{135885222710512076ull, 7027570017100905458ull, 6832662513363308149ull, 5419245192086376199ull}}, {{9393228565242915903ull, 13396148539803519726ull, 3929142123276747282ull, 6774056490107970249ull}}, {{2518163669698869071ull, 7521813637899623850ull, 9523113672523322007ull, 8467570612634962811ull}}, {{6185538311989181073ull, 11618662551328346762ull, 3646103036113382302ull, 5292231632896851757ull}}, {{16955294926841252150ull, 5299956152305657644ull, 9169314813569115782ull, 6615289541121064696ull}}, {{2747374584842013571ull, 15848317227236847864ull, 11461643516961394727ull, 8269111926401330870ull}}, {{1717109115526258482ull, 16822727294664111771ull, 2551841179673483800ull, 5168194954000831794ull}}, {{15981444449689986814ull, 2581665044620588097ull, 12413173511446630559ull, 6460243692501039742ull}}, {{6141747506830319806ull, 17062139361057898834ull, 6293094852453512390ull, 8075304615626299678ull}}, {{8450278210196337783ull, 6052151082233798867ull, 17768242338065608956ull, 5047065384766437298ull}}, {{5951161744318034324ull, 7565188852792248584ull, 12986930885727235387ull, 6308831730958046623ull}}, {{7438952180397542905ull, 4844800047562922826ull, 11621977588731656330ull, 7886039663697558279ull}}, {{9261031131175852220ull, 7639686048154214670ull, 14181265020598367062ull, 4928774789810973924ull}}, {{2352916877115039467ull, 326235523337992530ull, 17726581275747958828ull, 6160968487263717405ull}}, {{12164518133248575142ull, 407794404172490662ull, 8323168539402784823ull, 7701210609079646757ull}}, {{2991137814852971560ull, 7172400530248888520ull, 7507823346340434466ull, 4813256630674779223ull}}, {{3738922268566214449ull, 18188872699665886458ull, 4773093164498155178ull, 6016570788343474029ull}}, {{13897024872562543870ull, 13512718837727582264ull, 10578052474050081877ull, 7520713485429342536ull}}, {{8685640545351589919ull, 10751292282793432867ull, 6611282796281301173ull, 4700445928393339085ull}}, {{6245364663262099494ull, 18050801371919178988ull, 12875789513779014370ull, 5875557410491673856ull}}, {{7806705829077624368ull, 13340129678044197927ull, 16094736892223767963ull, 7344446763114592320ull}}, {{5146696267919642556ull, 12063476079127859505ull, 1671677041570158338ull, 9180558453893240401ull}}, {{14745900213518246357ull, 12151358567882300094ull, 12574013197049818721ull, 5737849033683275250ull}}, {{9209003230043032139ull, 1354140154570711406ull, 6494144459457497594ull, 7172311292104094063ull}}, {{2287882000699014365ull, 10916047230068165066ull, 3505994555894484088ull, 8965389115130117579ull}}, {{6041612268864271882ull, 6822529518792603166ull, 18332147661929910219ull, 5603368196956323486ull}}, {{16775387372935115661ull, 3916475880063366053ull, 13691812540557611966ull, 7004210246195404358ull}}, {{7134176160886730864ull, 14118966886933983375ull, 7891393638842239149ull, 8755262807744255448ull}}, {{11376389128195288646ull, 11130197313547433561ull, 4932121024276399468ull, 5472039254840159655ull}}, {{385428354961947096ull, 13912746641934291952ull, 1553465261918111431ull, 6840049068550199569ull}}, {{481785443702433869ull, 12779247283990477036ull, 6553517595825027193ull, 8550061335687749461ull}}, {{9524487939168796977ull, 1069500524852966291ull, 6401791506604335948ull, 5343788334804843413ull}}, {{7293923905533608317ull, 1336875656066207864ull, 12613925401682807839ull, 6679735418506054266ull}}, {{9117404881917010396ull, 15506152625364923542ull, 6544034715248733990ull, 8349669273132567833ull}}, {{1086692032770743593ull, 5079659372425689310ull, 15619236743098928504ull, 5218543295707854895ull}}, {{10581737077818205300ull, 6349574215532111637ull, 14912359910446272726ull, 6523179119634818619ull}}, {{17838857365700144528ull, 17160339806269915354ull, 14028763869630453003ull, 8153973899543523274ull}}, {{15760971871989978234ull, 8419369369705003144ull, 13379663436946421031ull, 5096233687214702046ull}}, {{1254470766277921177ull, 5912525693703866027ull, 7501207259328250481ull, 6370292109018377558ull}}, {{15403146513129565183ull, 12002343135557220437ull, 153137037305537293ull, 7962865136272971948ull}}, {{11932809579919672192ull, 9807307468936956725ull, 9319082685170736616ull, 4976790710170607467ull}}, {{1080953919617426527ull, 12259134336171195907ull, 7037167338036032866ull, 6220988387713259334ull}}, {{15186250454803946871ull, 6100545883359219075ull, 18019831209399816891ull, 7776235484641574167ull}}, {{7185563525038772843ull, 1506998167885817970ull, 18179923533515967413ull, 4860147177900983854ull}}, {{18205326443153241861ull, 6495433728284660366ull, 13501532380040183458ull, 6075183972376229818ull}}, {{13533286017086776518ull, 17342664197210601266ull, 7653543438195453514ull, 7593979965470287273ull}}, {{13069989779106623228ull, 15450851141684013695ull, 16312679694940628206ull, 4746237478418929545ull}}, {{11725801205455891131ull, 10090191890250241311ull, 6555791563393621546ull, 5932796848023661932ull}}, {{10045565488392476010ull, 3389367825958025831ull, 8194739454242026933ull, 7415996060029577415ull}}, {{13196007457886379362ull, 4424197900437460096ull, 12039241186542348689ull, 4634997537518485884ull}}, {{16495009322357974203ull, 10141933393974213024ull, 15049051483177935861ull, 5793746921898107355ull}}, {{2172017579237916137ull, 17289102760895154185ull, 14199628335545031922ull, 7242183652372634194ull}}, {{7326707992474783075ull, 12388006414264166923ull, 8526163382576514095ull, 9052729565465792743ull}}, {{2273349486083045470ull, 14660033036556186183ull, 12246381141751403165ull, 5657955978416120464ull}}, {{16676744912885970550ull, 4489983240413069016ull, 15307976427189253957ull, 7072444973020150580ull}}, {{2399187067397911571ull, 10224165068943724175ull, 688226460277015830ull, 8840556216275188226ull}}, {{8417020944764776588ull, 1778417149662439705ull, 5041827556100522798ull, 5525347635171992641ull}}, {{15132962199383358639ull, 11446393473932825439ull, 10913970463553041401ull, 6906684543964990801ull}}, {{14304516730801810395ull, 472933787133868087ull, 18254149097868689656ull, 8633355679956238501ull}}, {{15857851984392213353ull, 295583616958667554ull, 13714686195381624987ull, 5395847299972649063ull}}, {{10598942943635490883ull, 14204537576480498155ull, 12531671725799643329ull, 6744809124965811329ull}}, {{8636992661116975699ull, 3920613915318458982ull, 1829531601967390450ull, 8431011406207264162ull}}, {{786434394770721908ull, 7062069715501424768ull, 5755143269657006935ull, 5269382128879540101ull}}, {{983042993463402385ull, 4215901125949393056ull, 11805615105498646573ull, 6586727661099425126ull}}, {{1228803741829252982ull, 9881562425864129224ull, 5533646845018532408ull, 8233409576374281408ull}}, {{768002338643283114ull, 6175976516165080765ull, 3458529278136582755ull, 5145880985233925880ull}}, {{5571688941731491796ull, 3108284626778963052ull, 4323161597670728444ull, 6432351231542407350ull}}, {{6964611177164364745ull, 3885355783473703815ull, 14627324033943186363ull, 8040439039428009187ull}}, {{11270411013368809822ull, 122504355457370932ull, 6836234512000797525ull, 5025274399642505742ull}}, {{14088013766711012277ull, 4764816462749101569ull, 17768665176855772714ull, 6281592999553132177ull}}, {{3774959153106601634ull, 15179392615291152770ull, 8375773415787552180ull, 7851991249441415222ull}}, {{6971035489119013926ull, 263748347702194673ull, 623172366439832209ull, 4907494530900884514ull}}, {{13325480379826155311ull, 4941371453055131245ull, 10002337494904566069ull, 6134368163626105642ull}}, {{2821792419500530426ull, 10788400334746301961ull, 3279549831775931778ull, 7667960204532632053ull}}, {{13292835308256301277ull, 11354436227643826629ull, 4355561654073651313ull, 4792475127832895033ull}}, {{2780986080038212884ull, 357987229272619575ull, 10056138086019452046ull, 5990593909791118791ull}}, {{17311290655329929816ull, 9670856073445550276ull, 7958486589096927153ull, 7488242387238898489ull}}, {{1596184622726430327ull, 17573500091971938683ull, 16503269164254049230ull, 4680151492024311555ull}}, {{15830288833690201621ull, 12743503078110147545ull, 16017400436890173634ull, 5850189365030389444ull}}, {{5952802986830588314ull, 6706006810782908624ull, 1575006472403165427ull, 7312736706287986806ull}}, {{7441003733538235393ull, 3770822495051247876ull, 11192130127358732592ull, 9140920882859983507ull}}, {{13873999370316172929ull, 2356764059407029922ull, 4689238320385513918ull, 5713075551787489692ull}}, {{8119127176040440353ull, 12169327111113563211ull, 5861547900481892397ull, 7141344439734362115ull}}, {{5537222951623162537ull, 1376600833609790302ull, 2715248857174977593ull, 8926680549667952644ull}}, {{17295822400046640298ull, 12389590567074588698ull, 10920402572589136803ull, 5579175343542470402ull}}, {{12396405963203524564ull, 10875302190415847969ull, 4427131178881645196ull, 6973969179428088003ull}}, {{1660449398722241993ull, 13594127738019809962ull, 922227955174668591ull, 8717461474285110004ull}}, {{5649466892628789150ull, 15413858863903463082ull, 9799764508838943677ull, 5448413421428193752ull}}, {{16285205652640762245ull, 5432265524597165140ull, 12249705636048679597ull, 6810516776785242190ull}}, {{1909762992091401190ull, 11402017924173844330ull, 6088760008206073688ull, 8513145970981552738ull}}, {{5805287888484513648ull, 7126261202608652706ull, 8417161023556183959ull, 5320716231863470461ull}}, {{16479981897460417868ull, 4296140484833427978ull, 15133137297872617853ull, 6650895289829338076ull}}, {{11376605334970746527ull, 9981861624469172877ull, 469677548631220700ull, 8313619112286672596ull}}, {{9416221343570410531ull, 15462035552148008856ull, 9516920504749288745ull, 5196011945179170372ull}}, {{11770276679463013164ull, 5492486384902847358ull, 11896150630936610932ull, 6495014931473962965ull}}, {{5489473812473990647ull, 6865607981128559198ull, 1035130233388599953ull, 8118768664342453707ull}}, {{17265979188078407867ull, 15820220034273819258ull, 16787857460363732634ull, 5074230415214033566ull}}, {{12359101948243234025ull, 10551903005987498265ull, 11761449788599889985ull, 6342788019017541958ull}}, {{1613819380021878819ull, 17801564775911760736ull, 5478440198895086673ull, 7928485023771927448ull}}, {{1008637112513674262ull, 4208448957303768604ull, 3424025124309429171ull, 4955303139857454655ull}}, {{1260796390642092828ull, 648875178202322851ull, 18115089460668950176ull, 6194128924821818318ull}}, {{15411053543584779747ull, 811093972752903563ull, 13420489788981411912ull, 7742661156027272898ull}}, {{7326065455526793390ull, 506933732970564727ull, 12999492136540770349ull, 4839163222517045561ull}}, {{4545895800981103833ull, 5245353184640593813ull, 2414307115393799224ull, 6048954028146306952ull}}, {{10294055769653767695ull, 6556691480800742266ull, 3017883894242249030ull, 7561192535182883690ull}}, {{11045470874460992714ull, 17932990230782627628ull, 6497863452328793547ull, 4725745334489302306ull}}, {{13806838593076240892ull, 17804551770050896631ull, 17345701352265767742ull, 5907181668111627882ull}}, {{12646862222917913211ull, 13032317675708844981ull, 12458754653477433870ull, 7383977085139534853ull}}, {{10210131898537389709ull, 3533512528890640209ull, 10092564667637090121ull, 4614985678212209283ull}}, {{17374350891599125040ull, 9028576679540688165ull, 8004019816118974747ull, 5768732097765261604ull}}, {{7882880559216742588ull, 6674034830998472303ull, 10005024770148718434ull, 7210915122206577005ull}}, {{5241914680593540331ull, 17565915575602866187ull, 17117966981113285946ull, 9013643902758221256ull}}, {{970353666157268755ull, 15590383253179179271ull, 10698729363195803716ull, 5633527439223888285ull}}, {{15048000137978749656ull, 1041234992764422472ull, 17985097722422142550ull, 7041909299029860356ull}}, {{363256098763885453ull, 10524915777810303899ull, 4034628079318126571ull, 8802386623787325446ull}}, {{16367936126223286073ull, 4272229351917745984ull, 16356700604855992819ull, 5501491639867078403ull}}, {{2013176084069555975ull, 728600671469794577ull, 15834189737642603120ull, 6876864549833848004ull}}, {{7128156123514332872ull, 910750839337243221ull, 1345993098343702284ull, 8596080687292310006ull}}, {{6760940586410151997ull, 9792591311440552821ull, 14676303741746977639ull, 5372550429557693753ull}}, {{13062861751440077900ull, 7629053120873303122ull, 4510321621901558337ull, 6715688036947117192ull}}, {{7105205152445321567ull, 14148002419519016807ull, 5637902027376947921ull, 8394610046183896490ull}}, {{11358282247919407836ull, 1924972484558303648ull, 8135374785537980355ull, 5246631278864935306ull}}, {{14197852809899259795ull, 16241273660980043272ull, 945846445067699635ull, 6558289098581169133ull}}, {{17747316012374074743ull, 15689906057797666186ull, 5793994074762012448ull, 8197861373226461416ull}}, {{15703758526161184619ull, 9806191286123541366ull, 3621246296726257780ull, 5123663358266538385ull}}, {{10406326120846704965ull, 12257739107654426708ull, 9138243889335210129ull, 6404579197833172981ull}}, {{13007907651058381206ull, 1487115829285869673ull, 16034490880096400566ull, 8005723997291466226ull}}, {{1212413254270406398ull, 14764505448585832258ull, 14633242818487638257ull, 5003577498307166391ull}}, {{10738888604692783806ull, 4620573755450126610ull, 13679867504682159918ull, 6254471872883957989ull}}, {{4200238719011203949ull, 14999089231167434071ull, 3264776325570536185ull, 7818089841104947487ull}}, {{9542678227023084324ull, 2456901741838564438ull, 8958014231122666972ull, 4886306150690592179ull}}, {{2704975746924079597ull, 3071127177298205548ull, 6585831770475945811ull, 6107882688363240224ull}}, {{3381219683655099496ull, 17673967026904920647ull, 8232289713094932263ull, 7634853360454050280ull}}, {{9030791329925519041ull, 17963758419456657260ull, 5145181070684332664ull, 4771783350283781425ull}}, {{11288489162406898802ull, 4007953950611269959ull, 11043162356782803735ull, 5964729187854726781ull}}, {{9498925434581235598ull, 398256419836699545ull, 18415638964405892573ull, 7455911484818408476ull}}, {{17466043442681742009ull, 2554753271611631167ull, 2286402315898907050ull, 4659944678011505298ull}}, {{17220868284924789607ull, 12416813626369314767ull, 12081374931728409620ull, 5824930847514381622ull}}, {{16914399337728599105ull, 15521017032961643459ull, 5878346627805736217ull, 7281163559392977028ull}}, {{16531313153733360977ull, 5566213235919890612ull, 7347933284757170272ull, 9101454449241221285ull}}, {{1108698684228574803ull, 3478883272449931633ull, 6898301312186925372ull, 5688409030775763303ull}}, {{5997559373713106407ull, 4348604090562414541ull, 4011190621806268811ull, 7110511288469704129ull}}, {{12108635235568770913ull, 824069094775630272ull, 9625674295685223918ull, 8888139110587130161ull}}, {{7567897022230481821ull, 14350101239516932632ull, 17545261480871734708ull, 5555086944116956350ull}}, {{9459871277788102276ull, 17937626549396165790ull, 12708204814234892577ull, 6943858680146195438ull}}, {{2601467060380352037ull, 8586975131463043526ull, 6661883980938839914ull, 8679823350182744298ull}}, {{15460974968019883735ull, 9978545475591790107ull, 8775363506514162850ull, 5424889593864215186ull}}, {{14714532691597466765ull, 3249809807634961826ull, 1745832346287927755ull, 6781111992330268983ull}}, {{9169793827642057648ull, 17897320314825865995ull, 16017348488142073405ull, 8476389990412836228ull}}, {{3425278133062592078ull, 13491668205979860199ull, 787470768234020070ull, 5297743744008022643ull}}, {{18116655721610403809ull, 7641213220620049440ull, 14819396515574688800ull, 6622179680010028303ull}}, {{4199075578303453146ull, 9551516525775061801ull, 13912559626040973096ull, 8277724600012535379ull}}, {{14153637282508127976ull, 5969697828609413625ull, 6389506757061914233ull, 5173577875007834612ull}}, {{3856988547852996258ull, 12073808304189154936ull, 7986883446327392791ull, 6466972343759793265ull}}, {{4821235684816245322ull, 10480574361809055766ull, 14595290326336628893ull, 8083715429699741581ull}}, {{16848330358292317039ull, 8856201985344353805ull, 11427899463174087010ull, 5052322143562338488ull}}, {{7225354892583232586ull, 1846880444825666449ull, 14284874328967608763ull, 6315402679452923110ull}}, {{13643379634156428637ull, 16143658611314246773ull, 8632720874354735145ull, 7894253349316153888ull}}, {{10832955280561461850ull, 3172257604430322377ull, 5395450546471709466ull, 4933908343322596180ull}}, {{18152880119129215217ull, 13188694042392678779ull, 6744313183089636832ull, 6167385429153245225ull}}, {{18079414130484131117ull, 16485867552990848474ull, 13042077497289433944ull, 7709231786441556531ull}}, {{15911319849979969852ull, 10303667220619280296ull, 5845455426592202263ull, 4818269866525972832ull}}, {{1442405738765410699ull, 8267898007346712467ull, 7306819283240252829ull, 6022837333157466040ull}}, {{15638065228738927086ull, 14946558527610778487ull, 9133524104050316036ull, 7528546666446832550ull}}, {{16691319795602911285ull, 118227042901960746ull, 1096766546604059619ull, 4705341666529270344ull}}, {{11640777707648863298ull, 13982841858909614645ull, 1370958183255074523ull, 5881677083161587930ull}}, {{715914079278915410ull, 12866866305209630403ull, 10937069765923618962ull, 7352096353951984912ull}}, {{14729950654380807974ull, 6860210844657262195ull, 13671337207404523703ull, 9190120442439981140ull}}, {{6900376149774311032ull, 11205160805551870728ull, 17767957791482603122ull, 5743825276524988212ull}}, {{8625470187217888790ull, 4783078970085062602ull, 3763203165643702287ull, 7179781595656235266ull}}, {{1558465697167585179ull, 1367162694178940349ull, 13927375993909403667ull, 8974726994570294082ull}}, {{3279884069943434689ull, 16995377748357695382ull, 13316296014620765195ull, 5609204371606433801ull}}, {{13323227124284069170ull, 16632536167019731323ull, 2810311962993792782ull, 7011505464508042252ull}}, {{12042347886927698558ull, 11567298171919888346ull, 3512889953742240978ull, 8764381830635052815ull}}, {{12138153447757199503ull, 11841247375877318120ull, 9113085248729982467ull, 5477738644146908009ull}}, {{15172691809696499378ull, 10189873201419259746ull, 16003042579339865988ull, 6847173305183635011ull}}, {{9742492725265848415ull, 12737341501774074683ull, 15392117205747444581ull, 8558966631479543764ull}}, {{3783214944077461308ull, 10266681447822490629ull, 396701216737377055ull, 5349354144674714853ull}}, {{9340704698524214538ull, 8221665791350725382ull, 5107562539349109223ull, 6686692680843393566ull}}, {{2452508836300492365ull, 5665396220761018824ull, 15607825211041162337ull, 8358365851054241957ull}}, {{1532818022687807728ull, 15070087684044106525ull, 12060733766114420412ull, 5223978656908901223ull}}, {{6527708546787147564ull, 390865531345581540ull, 10464231189215637612ull, 6529973321136126529ull}}, {{8159635683483934455ull, 488581914181976925ull, 17691975004946934919ull, 8162466651420158161ull}}, {{7405615311391152987ull, 7222892724004817434ull, 4139955350450752468ull, 5101541657137598851ull}}, {{33647102384165425ull, 9028615905006021793ull, 563258169636052681ull, 6376927071421998564ull}}, {{4653744896407594685ull, 15897455899684915145ull, 704072712045065851ull, 7971158839277498205ull}}, {{14437805606323216438ull, 7630066928089378013ull, 2745888454241860109ull, 4981974274548436378ull}}, {{4212198952621856836ull, 14149269678539110421ull, 12655732604657100944ull, 6227467843185545472ull}}, {{9876934709204708949ull, 17686587098173888026ull, 15819665755821376180ull, 7784334803981931840ull}}, {{10784770211680330997ull, 1830744899503904208ull, 9887291097388360113ull, 4865209252488707400ull}}, {{13480962764600413746ull, 6900117142807268164ull, 12359113871735450141ull, 6081511565610884250ull}}, {{16851203455750517183ull, 13236832446936473109ull, 6225520302814536868ull, 7601889457013605313ull}}, {{12837845169057767191ull, 17496392316190071501ull, 15420165235327555302ull, 4751180910633503320ull}}, {{2212248406040045277ull, 12647118358382813569ull, 828462470449892512ull, 5938976138291879151ull}}, {{7376996525977444500ull, 15808897947978516961ull, 14870636143344529352ull, 7423720172864848938ull}}, {{16139837874804372573ull, 9880561217486573100ull, 13905833608017718749ull, 4639825108040530586ull}}, {{1728053269795914100ull, 16962387540285604280ull, 8158919973167372628ull, 5799781385050663233ull}}, {{2160066587244892625ull, 2756240351647453734ull, 14810335984886603690ull, 7249726731313329041ull}}, {{11923455270910891589ull, 12668672476414092975ull, 4677861925826090900ull, 9062158414141661302ull}}, {{14369688571960389099ull, 17141292334613583917ull, 16758721758923470524ull, 5663849008838538313ull}}, {{4127052659668322662ull, 2979871344557428281ull, 7113344143372174444ull, 7079811261048172892ull}}, {{9770501843012791231ull, 3724839180696785351ull, 8891680179215218055ull, 8849764076310216115ull}}, {{13024092679524076376ull, 9245553515576572700ull, 3251457102795817332ull, 5531102547693885072ull}}, {{16280115849405095470ull, 11556941894470715875ull, 4064321378494771665ull, 6913878184617356340ull}}, {{15738458793328981433ull, 611119312806231132ull, 5080401723118464582ull, 8642347730771695425ull}}, {{613164708975837588ull, 14217007625786058170ull, 14704466123017510123ull, 5401467331732309640ull}}, {{9989827923074572793ull, 13159573513805184808ull, 18380582653771887654ull, 6751834164665387050ull}}, {{12487284903843215991ull, 7226094855401705202ull, 13752356280360083760ull, 8439792705831733813ull}}, {{12416239083329397898ull, 4516309284626065751ull, 10901065684438746302ull, 5274870441144833633ull}}, {{10908612835734359469ull, 14868758642637357997ull, 18238018123975820781ull, 6593588051431042041ull}}, {{18247452063095337240ull, 4750890248014533784ull, 8962464599687612265ull, 8241985064288802552ull}}, {{11404657539434585775ull, 14498521451077553375ull, 5601540374804757665ull, 5151240665180501595ull}}, {{9644135905865844315ull, 4288093758564778007ull, 2390239450078559178ull, 6439050831475626994ull}}, {{7443483863904917489ull, 14583489235060748317ull, 12211171349452974780ull, 8048813539344533742ull}}, {{6958020424154267383ull, 18338052808767743506ull, 3020296074980721333ull, 5030508462090333589ull}}, {{17920897567047610037ull, 9087507955677515670ull, 8387056112153289571ull, 6288135577612916986ull}}, {{13177749921954736738ull, 6747698926169506684ull, 1260448103336836156ull, 7860169472016146233ull}}, {{17459465738076486269ull, 13440683865710717485ull, 12316995110653992357ull, 4912605920010091395ull}}, {{7989274117313444124ull, 2965796776856233145ull, 10784557869890102543ull, 6140757400012614244ull}}, {{14598278665069193059ull, 17542304026352455143ull, 13480697337362628178ull, 7675946750015767805ull}}, {{16041453193309327518ull, 15575626034897672368ull, 10731278845065336563ull, 4797466718759854878ull}}, {{1605072417927107782ull, 14857846525194702557ull, 4190726519476894896ull, 5996833398449818598ull}}, {{6618026540836272631ull, 125564082783826580ull, 14461780186200894429ull, 7496041748062273247ull}}, {{13359638624877446203ull, 2384320560953585564ull, 15956141644016640874ull, 4685026092538920779ull}}, {{16699548281096807753ull, 12203772738046757763ull, 15333491036593413188ull, 5856282615673650974ull}}, {{16262749332943621787ull, 15254715922558447204ull, 9943491758886990677ull, 7320353269592063718ull}}, {{1881692592469975618ull, 5233336847915895294ull, 3205992661753962539ull, 9150441586990079648ull}}, {{15011115925575898473ull, 964992520733740606ull, 2003745413596226587ull, 5719025991868799780ull}}, {{9540522870115097284ull, 15041298706199339470ull, 2504681766995283233ull, 7148782489835999725ull}}, {{2702281550789095796ull, 4966565327467010626ull, 7742538227171491946ull, 8935978112294999656ull}}, {{6300611987670572777ull, 7715789348094269545ull, 4839086391982182466ull, 5584986320184374785ull}}, {{12487451003015603875ull, 421364648263061123ull, 10660544008405115987ull, 6981232900230468481ull}}, {{10997627735342116940ull, 14361763865610990116ull, 17937366028933782887ull, 8726541125288085601ull}}, {{16096889371443598895ull, 15893631443647950678ull, 4293324740442532448ull, 5454088203305053501ull}}, {{10897739677449722811ull, 1420295230850386732ull, 9978341943980553465ull, 6817610254131316876ull}}, {{13622174596812153514ull, 6387055056990371319ull, 12472927429975691831ull, 8522012817664146095ull}}, {{15431388150648677802ull, 10909438438260063930ull, 14713108671375889250ull, 5326258011040091309ull}}, {{10065863151456071445ull, 4413426010970304105ull, 4556327783937697851ull, 6657822513800114137ull}}, {{17194014957747477210ull, 905096495285492227ull, 10307095748349510218ull, 8322278142250142671ull}}, {{8440416339378479304ull, 5177371327980820546ull, 13359463870359525742ull, 5201423838906339169ull}}, {{1327148387368323322ull, 15695086196830801491ull, 2864271782667243465ull, 6501779798632923962ull}}, {{15493993539492567865ull, 5783799690756338151ull, 12803711765188830140ull, 8127224748291154952ull}}, {{16601274989823936772ull, 12838246843577487152ull, 8002319853243018837ull, 5079515467681971845ull}}, {{2304849663570369348ull, 2212750499189695229ull, 14614585834981161451ull, 6349394334602464806ull}}, {{7492748097890349589ull, 16600996179269282748ull, 9044860256871676005ull, 7936742918253081008ull}}, {{13906339598036244302ull, 12681465621256995669ull, 5653037660544797503ull, 4960464323908175630ull}}, {{3547866442263141665ull, 11240146008143856683ull, 16289669112535772687ull, 6200580404885219537ull}}, {{18269891108111090793ull, 9438496491752432949ull, 6527028335387552147ull, 7750725506106524422ull}}, {{13724524951783125698ull, 3593217298131576641ull, 17914450764899383804ull, 4844203441316577763ull}}, {{3320598134446743410ull, 4491521622664470802ull, 17781377437696841851ull, 6055254301645722204ull}}, {{13374119704913205071ull, 1002716009903200598ull, 3779977723411500698ull, 7569067877057152756ull}}, {{3747138797143365265ull, 5238383524616888278ull, 11585858113986963744ull, 4730667423160720472ull}}, {{13907295533283982389ull, 6547979405771110347ull, 14482322642483704680ull, 5913334278950900590ull}}, {{12772433398177590083ull, 8184974257213887934ull, 8879531266249855042ull, 7391667848688625738ull}}, {{3371084855433605898ull, 9727294929186067863ull, 10161393059833547305ull, 4619792405430391086ull}}, {{18048914124574171084ull, 16770804679909972732ull, 3478369287937158323ull, 5774740506787988858ull}}, {{4114398582008162239ull, 16351819831460078012ull, 13571333646776223712ull, 7218425633484986072ull}}, {{5142998227510202799ull, 1993030715615545899ull, 16964167058470279641ull, 9023032041856232590ull}}, {{908530882980182797ull, 12774859243328185947ull, 5990918393116536871ull, 5639395026160145369ull}}, {{14970721659007392209ull, 11356888035732844529ull, 12100334009823058993ull, 7049243782700181711ull}}, {{4878344018477076549ull, 361051989383891950ull, 10513731493851435838ull, 8811554728375227139ull}}, {{16884023066830336555ull, 14060715548647096180ull, 4265239174443453446ull, 5507221705234516962ull}}, {{2658284759828369078ull, 8352522398954094418ull, 14554921004909092616ull, 6884027131543146202ull}}, {{12546227986640237155ull, 10440652998692618022ull, 8970279219281589962ull, 8605033914428932753ull}}, {{3229706473222760318ull, 11137094142610274168ull, 17135639558119463486ull, 5378146196518082970ull}}, {{4037133091528450398ull, 4697995641408066902ull, 12196177410794553550ull, 6722682745647603713ull}}, {{14269788401265338805ull, 15095866588614859435ull, 1410163708211028225ull, 8403353432059504642ull}}, {{6612774741577142801ull, 2517387590243205291ull, 5493038336059280545ull, 5252095895037190401ull}}, {{3654282408544040597ull, 7758420506231394518ull, 11477983938501488585ull, 6565119868796488001ull}}, {{13791225047534826555ull, 14309711651216631051ull, 512421867844697019ull, 8206399835995610002ull}}, {{6313672645495572645ull, 6637726772796700455ull, 4931949685830323541ull, 5128999897497256251ull}}, {{3280404788442077902ull, 12908844484423263473ull, 1553251088860516522ull, 6411249871871570314ull}}, {{8712192003979985281ull, 6912683568674303533ull, 11164935897930421461ull, 8014062339839462892ull}}, {{7750963011701184753ull, 6626270239635133660ull, 16201456973061289221ull, 5008788962399664307ull}}, {{9688703764626480941ull, 12894523817971304979ull, 15640135197899223622ull, 6260986202999580384ull}}, {{7499193687355713272ull, 6894782735609355416ull, 1103424923664477912ull, 7826232753749475481ull}}, {{4686996054597320795ull, 4309239209755847135ull, 12218855623358768455ull, 4891395471093422175ull}}, {{1247059049819263090ull, 774862993767421015ull, 10661883510771072665ull, 6114244338866777719ull}}, {{15393881867556242574ull, 5580264760636664172ull, 8715668370036452927ull, 7642805423583472149ull}}, {{397804130367875801ull, 10405194503038996964ull, 7753135740486477031ull, 4776753389739670093ull}}, {{497255162959844751ull, 8394807110371358301ull, 14303105694035484193ull, 5970941737174587616ull}}, {{5233254972127193843ull, 15105194906391585780ull, 17878882117544355241ull, 7463677171468234520ull}}, {{12494156394434271960ull, 2523217788853659256ull, 11174301323465222026ull, 4664798232167646575ull}}, {{15617695493042839950ull, 12377394272921849878ull, 9356190635904139628ull, 5830997790209558219ull}}, {{10298747329448774129ull, 15471742841152312348ull, 7083552276452786631ull, 7288747237761947774ull}}, {{12873434161810967662ull, 14727992533013002531ull, 18077812382420759097ull, 9110934047202434717ull}}, {{5740053341918160837ull, 2287466305492044726ull, 13604475748226668388ull, 5694333779501521698ull}}, {{16398438714252476854ull, 2859332881865055907ull, 7782222648428559677ull, 7117917224376902123ull}}, {{15886362374388208163ull, 8185852120758707788ull, 5116092292108311692ull, 8897396530471127654ull}}, {{705604447137854294ull, 14339529612328968176ull, 17032615737849858519ull, 5560872831544454783ull}}, {{882005558922317867ull, 13312725996983822316ull, 16679083653884935245ull, 6951091039430568479ull}}, {{1102506948652897334ull, 2805849440947614183ull, 16237168548928781153ull, 8688863799288210599ull}}, {{7606595870549142690ull, 13282870946660728624ull, 17065759370721570076ull, 5430539874555131624ull}}, {{9508244838186428362ull, 16603588683325910780ull, 2885455139692410979ull, 6788174843193914531ull}}, {{11885306047733035453ull, 16142799835730000571ull, 17441876979897677436ull, 8485218553992393163ull}}, {{5122473270619453206ull, 865877860476474549ull, 8595330103222354446ull, 5303261596245245727ull}}, {{11014777606701704412ull, 10305719362450368994ull, 6132476610600555153ull, 6629076995306557159ull}}, {{4545099971522354707ull, 17493835221490349147ull, 3053909744823306037ull, 8286346244133196449ull}}, {{534844472987777740ull, 13239490022645162169ull, 13437908636583036033ull, 5178966402583247780ull}}, {{5280241609662110079ull, 2714304473024288999ull, 16797385795728795042ull, 6473708003229059725ull}}, {{1988615993650249694ull, 12616252628135137057ull, 7161674189378830090ull, 8092135004036324657ull}}, {{12772100042099875819ull, 12496843911011848564ull, 16005261414430238566ull, 5057584377522702910ull}}, {{15965125052624844774ull, 6397682851910034897ull, 10783204731183022400ull, 6321980471903378638ull}}, {{6121348260498892255ull, 7997103564887543622ull, 4255633877124002192ull, 7902475589879223298ull}}, {{17660900718093971372ull, 4998189728054714763ull, 7271457191629889274ull, 4939047243674514561ull}}, {{17464439879190076310ull, 15471109196923169262ull, 13701007507964749496ull, 6173809054593143201ull}}, {{12607177812132819580ull, 892142422444409962ull, 3291201329673773159ull, 7717261318241429002ull}}, {{12491172151010400142ull, 7475118041668838082ull, 6668686849473496128ull, 4823288323900893126ull}}, {{6390593151908224369ull, 9343897552086047603ull, 17559230598696645968ull, 6029110404876116407ull}}, {{3376555421457892557ull, 11679871940107559504ull, 17337352229943419556ull, 7536388006095145509ull}}, {{2110347138411182848ull, 16523291999422000498ull, 13141688152928331174ull, 4710242503809465943ull}}, {{11861305959868754368ull, 11430742962422724814ull, 11815424172733026064ull, 5887803129761832429ull}}, {{5603260412981167152ull, 14288428703028406018ull, 934222160634118868ull, 7359753912202290537ull}}, {{16227447553081234748ull, 17860535878785507522ull, 5779463719220036489ull, 9199692390252863171ull}}, {{14753840739103159622ull, 4245305896599860345ull, 1306321815298828854ull, 5749807743908039482ull}}, {{4607242868596785815ull, 14530004407604601240ull, 10856274305978311875ull, 7187259679885049352ull}}, {{5759053585745982269ull, 13550819491078363646ull, 13570342882472889844ull, 8984074599856311690ull}}, {{17434466546373402630ull, 17692634218778753086ull, 13093150319972944056ull, 5615046624910194806ull}}, {{12569711146111977479ull, 3669048699763889742ull, 7143065863111404263ull, 7018808281137743508ull}}, {{6488766895785196041ull, 18421368929987025890ull, 8928832328889255328ull, 8773510351422179385ull}}, {{8667165328293135430ull, 11513355581241891181ull, 17109735251624254340ull, 5483443969638862115ull}}, {{15445642678793807191ull, 14391694476552363976ull, 16775483046102930021ull, 6854304962048577644ull}}, {{860309274782707373ull, 4154560040408291259ull, 2522609733919110911ull, 8567881202560722056ull}}, {{16678594361235049772ull, 9514129052896263892ull, 1576631083699444319ull, 5354925751600451285ull}}, {{2401498877834260599ull, 7280975297692941962ull, 6582474873051693303ull, 6693657189500564106ull}}, {{12225245634147601557ull, 4489533103688789548ull, 17451465628169392437ull, 8367071486875705132ull}}, {{16864150558197026781ull, 5111801199019187419ull, 1683793980751094465ull, 5229419679297315708ull}}, {{16468502179318895572ull, 11001437517201372178ull, 2104742475938868081ull, 6536774599121644635ull}}, {{11362255687293843657ull, 18363482914929103127ull, 16465986150205748813ull, 8170968248902055793ull}}, {{14018938832199734142ull, 13783019831044383406ull, 3373712316237511152ull, 5106855155563784871ull}}, {{8300301503394891869ull, 17228774788805479258ull, 18052198450579052652ull, 6383568944454731088ull}}, {{1152004842388839029ull, 3089224412297297457ull, 4118503989514264200ull, 7979461180568413861ull}}, {{12249218072561494153ull, 1930765257685810910ull, 4879908002660109077ull, 4987163237855258663ull}}, {{6088150553847091883ull, 7025142590534651542ull, 1488198984897748442ull, 6233954047319073329ull}}, {{16833560229163640662ull, 18004800275023090235ull, 6471934749549573456ull, 7792442559148841661ull}}, {{8215132134013581462ull, 11253000171889431397ull, 6350802227682177362ull, 4870276599468026038ull}}, {{14880601185944364731ull, 4842878178007013438ull, 17161874821457497511ull, 6087845749335032547ull}}, {{9377379445575680106ull, 1441911704081378894ull, 16840657508394483985ull, 7609807186668790684ull}}, {{1249176135057412162ull, 12430409861119331569ull, 1302038905891776682ull, 4756129491667994178ull}}, {{6173156187249153107ull, 6314640289544388653ull, 10850920669219496661ull, 5945161864584992722ull}}, {{12328131252488829288ull, 12504986380357873720ull, 4340278799669595018ull, 7431452330731240903ull}}, {{7705082032805518305ull, 12427302506151058979ull, 9630203277434578742ull, 4644657706707025564ull}}, {{5019666522579509977ull, 6310756095834047916ull, 12037754096793223428ull, 5805822133383781955ull}}, {{6274583153224387471ull, 7888445119792559895ull, 10435506602564141381ull, 7257277666729727444ull}}, {{3231542923103096435ull, 14472242418168087773ull, 13044383253205176726ull, 9071597083412159305ull}}, {{4325557336153129224ull, 4433465492927666954ull, 1235210505612153598ull, 5669748177132599566ull}}, {{14630318707046187338ull, 14765203903014359500ull, 10767385168869967805ull, 7087185221415749457ull}}, {{18287898383807734172ull, 4621446823485785663ull, 18070917479514847661ull, 8858981526769686821ull}}, {{18347465517520915714ull, 5194247273892309991ull, 13600166433910473740ull, 5536863454231054263ull}}, {{18322645878473756738ull, 6492809092365387489ull, 12388522023960704271ull, 6921079317788817829ull}}, {{9068249292810032210ull, 3504325347029346458ull, 1650594474668716627ull, 8651349147236022287ull}}, {{10279341826433658036ull, 18331104406389199200ull, 7949150574309029747ull, 5407093217022513929ull}}, {{12849177283042072545ull, 18302194489559111096ull, 14548124236313675088ull, 6758866521278142411ull}}, {{16061471603802590681ull, 4430999038239337254ull, 13573469276964705957ull, 8448583151597678014ull}}, {{5426733733949231272ull, 5075217408113279736ull, 3871732279675553319ull, 5280364469748548759ull}}, {{6783417167436539089ull, 1732335741714211766ull, 227979331167053745ull, 6600455587185685949ull}}, {{17702643496150449669ull, 6777105695570152611ull, 4896660182386205085ull, 8250569483982107436ull}}, {{8758309175880337092ull, 6541534068945039334ull, 12283784650846153986ull, 5156605927488817147ull}}, {{1724514432995645556ull, 17400289623036074976ull, 10743044795130304578ull, 6445757409361021434ull}}, {{2155643041244556945ull, 12526989991940317912ull, 4205433957058104915ull, 8057196761701276793ull}}, {{1347276900777848091ull, 5523525735749004743ull, 14157611269229785332ull, 5035747976063297995ull}}, {{15519154181254473826ull, 6904407169686255928ull, 13085328068109843761ull, 6294684970079122494ull}}, {{952198652858540666ull, 13242194980535207815ull, 7133288048282528893ull, 7868356212598903118ull}}, {{7512653185677669772ull, 10582214872048198836ull, 18293363085458744270ull, 4917722632874314448ull}}, {{9390816482097087215ull, 4004396553205472737ull, 4419959783113878722ull, 6147153291092893061ull}}, {{16350206621048746923ull, 14228867728361616729ull, 10136635747319736306ull, 7683941613866116326ull}}, {{3301350110514384971ull, 13504728348653398360ull, 1723711323647447287ull, 4802463508666322704ull}}, {{4126687638142981214ull, 12269224417389360046ull, 2154639154559309109ull, 6003079385832903380ull}}, {{14381731584533502325ull, 1501472466454536345ull, 2693298943199136387ull, 7503849232291129225ull}}, {{2071053212692357097ull, 17079321356029942880ull, 13212526885567930001ull, 4689905770181955765ull}}, {{2588816515865446372ull, 7514093639755264888ull, 2680600551677748790ull, 5862382212727444707ull}}, {{3236020644831807964ull, 169245012839305302ull, 17185808744879349700ull, 7327977765909305883ull}}, {{13268397842894535763ull, 211556266049131627ull, 16870574912671799221ull, 9159972207386632354ull}}, {{5986905642595390900ull, 2438065675494401219ull, 15155795338847262417ull, 5724982629616645221ull}}, {{2871946034816850721ull, 7659268112795389428ull, 5109686118276914309ull, 7156228287020806527ull}}, {{3589932543521063401ull, 14185771159421624689ull, 1775421629418754982ull, 8945285358776008159ull}}, {{13772922885769134386ull, 4254420956211127526ull, 8027167546027803720ull, 5590803349235005099ull}}, {{7992781570356642174ull, 5318026195263909408ull, 5422273414107366746ull, 6988504186543756374ull}}, {{9990976962945802718ull, 15870904780934662568ull, 16001213804488984240ull, 8735630233179695467ull}}, {{6244360601841126699ull, 9919315488084164105ull, 7694915618591921198ull, 5459768895737309667ull}}, {{12417136770728796277ull, 3175772323250429323ull, 5006958504812513594ull, 6824711119671637084ull}}, {{10909734944983607443ull, 13193087440917812462ull, 6258698131015641992ull, 8530888899589546355ull}}, {{2206898322187366748ull, 8245679650573632789ull, 1605843322671082293ull, 5331805562243466472ull}}, {{7370308921161596339ull, 14918785581644428890ull, 2007304153338852866ull, 6664756952804333090ull}}, {{18436258188306771231ull, 9425109940200760304ull, 11732502228528341891ull, 8330946191005416362ull}}, {{11522661367691732020ull, 3584850703411781238ull, 11944499911257601586ull, 5206841369378385226ull}}, {{5179954672759889217ull, 13704435416119502356ull, 5707252852217226174ull, 6508551711722981533ull}}, {{6474943340949861521ull, 7907172233294602137ull, 11745752083698920622ull, 8135689639653726916ull}}, {{15576054634162133211ull, 330296627381738431ull, 16564467089166601197ull, 5084806024783579322ull}}, {{14858382274275278609ull, 5024556802654560943ull, 11482211824603475688ull, 6356007530979474153ull}}, {{13961291824416710357ull, 6280696003318201179ull, 517706725472180898ull, 7945009413724342692ull}}, {{6419964381046750021ull, 8537121020501263641ull, 9546938740274888869ull, 4965630883577714182ull}}, {{12636641494735825431ull, 15283087294053967455ull, 2710301388488835278ull, 6207038604472142728ull}}, {{11184115849992393884ull, 9880487080712683511ull, 3387876735611044098ull, 7758798255590178410ull}}, {{13907601433886328034ull, 10786990443872815098ull, 6729108978184290465ull, 4849248909743861506ull}}, {{8161129755503134234ull, 18095424073268406777ull, 17634758259585138889ull, 6061561137179826882ull}}, {{14813098212806305697ull, 8784222036303344759ull, 12820075787626647804ull, 7576951421474783603ull}}, {{16175715410645022917ull, 14713510809544366282ull, 5706704358052960925ull, 4735594638421739752ull}}, {{10996272226451502838ull, 4556830456648294141ull, 7133380447566201157ull, 5919493298027174690ull}}, {{18357026301491766451ull, 10307724089237755580ull, 18140097596312527254ull, 7399366622533968362ull}}, {{2249769401577578224ull, 1830641537346209334ull, 15949247016122717438ull, 4624604139083730226ull}}, {{12035583788826748588ull, 11511673958537537475ull, 10713186733298620989ull, 5780755173854662783ull}}, {{10432793717606047831ull, 554534392889758132ull, 8779797398195888333ull, 7225943967318328479ull}}, {{13040992147007559788ull, 5304854009539585569ull, 6363060729317472512ull, 9032429959147910599ull}}, {{1233091064238643012ull, 3315533755962240981ull, 10894441983464502176ull, 5645268724467444124ull}}, {{6153049848725691669ull, 4144417194952801226ull, 13618052479330627720ull, 7056585905584305155ull}}, {{16914684347761890394ull, 5180521493691001532ull, 12410879580735896746ull, 8820732381980381444ull}}, {{1348305680496405688ull, 7849511951984263862ull, 16980171774814711274ull, 5512957738737738402ull}}, {{10908754137475282918ull, 588517903125554019ull, 12001842681663613285ull, 6891197173422173003ull}}, {{9024256653416715744ull, 5347333397334330428ull, 10390617333652128702ull, 8613996466777716254ull}}, {{14863532445240223148ull, 17177141428616120229ull, 1882449815105192534ull, 5383747791736072659ull}}, {{4744357501268115223ull, 12248054748915374479ull, 16188120324163654380ull, 6729684739670090823ull}}, {{1318760858157756124ull, 15310068436144218099ull, 15623464386777180071ull, 8412105924587613529ull}}, {{16965126600844455242ull, 16486321800231218167ull, 2847136214094655688ull, 5257566202867258456ull}}, {{16594722232628181148ull, 2161158176579471093ull, 3558920267618319611ull, 6571957753584073070ull}}, {{6908344735503062723ull, 16536505776006502579ull, 13672022371377675321ull, 8214947191980091337ull}}, {{2011872450475720250ull, 3417787082362982256ull, 1627484954469965220ull, 5134341994987557086ull}}, {{2514840563094650313ull, 4272233852953727820ull, 11257728229942232333ull, 6417927493734446357ull}}, {{3143550703868312891ull, 9951978334619547679ull, 237102232145626704ull, 8022409367168057947ull}}, {{8882248217558777413ull, 6219986459137217299ull, 16289089959586874354ull, 5014005854480036216ull}}, {{6491124253521083862ull, 16998355110776297432ull, 1914618375774041326ull, 6267507318100045271ull}}, {{8113905316901354827ull, 12024571851615595982ull, 16228331024999715370ull, 7834384147625056588ull}}, {{459504804635958863ull, 12127043425687135393ull, 919334853770046298ull, 4896490092265660368ull}}, {{5186067024222336483ull, 5935432245254143433ull, 1149168567212557873ull, 6120612615332075460ull}}, {{11094269798705308508ull, 12030976324995067195ull, 1436460709015697341ull, 7650765769165094325ull}}, {{4628075614977123865ull, 9825203212335610949ull, 3203630952348504790ull, 4781728605728183953ull}}, {{10396780537148792736ull, 3058131978564737878ull, 8616224708863018892ull, 5977160757160229941ull}}, {{3772603634581215111ull, 3822664973205922348ull, 15381966904506161519ull, 7471450946450287426ull}}, {{11581249308468035253ull, 9306694635894783323ull, 14225415333743738853ull, 4669656841531429641ull}}, {{9864875617157656162ull, 16245054313295867058ull, 3946711111897509854ull, 5837071051914287052ull}}, {{3107722484592294394ull, 11082945854765058015ull, 4933388889871887318ull, 7296338814892858815ull}}, {{17719711161022531705ull, 4630310281601546710ull, 1555050093912471244ull, 9120423518616073519ull}}, {{6463133457211694412ull, 12117315962855742502ull, 7889435336336376383ull, 5700264699135045949ull}}, {{17302288858369393822ull, 10534958935142290223ull, 14473480188847858383ull, 7125330873918807436ull}}, {{17016175054534354374ull, 8557012650500474875ull, 18091850236059822979ull, 8906663592398509295ull}}, {{8329266399870277532ull, 3042289897349102845ull, 18224935425178471218ull, 5566664745249068309ull}}, {{15023269018265234819ull, 13026234408541154364ull, 8946111226190925310ull, 6958330931561335387ull}}, {{332342199121991907ull, 7059420973821667148ull, 6570953014311268734ull, 8697913664451669234ull}}, {{9431085911306020750ull, 18247196163920705679ull, 8718531652371930862ull, 5436196040282293271ull}}, {{7177171370705138034ull, 13585623168046106291ull, 6286478547037525674ull, 6795245050352866589ull}}, {{4359778194954034638ull, 7758656923202857056ull, 12469784202224294997ull, 8494056312941083236ull}}, {{2724861371846271649ull, 7155003586215479612ull, 17016987163244960181ull, 5308785195588177022ull}}, {{3406076714807839561ull, 13555440501196737419ull, 12047861917201424418ull, 6635981494485221278ull}}, {{18092653948791963163ull, 7720928589641145965ull, 5836455359647004715ull, 8294976868106526598ull}}, {{13613751727208670929ull, 2519737359312022276ull, 17482842655061541659ull, 5184360542566579123ull}}, {{17017189659010838661ull, 16984729754422191557ull, 17241867300399539169ull, 6480450678208223904ull}}, {{7436429018481384614ull, 7395854137745575735ull, 3105590051789872346ull, 8100563347760279881ull}}, {{11565297164191947240ull, 9234094854518372738ull, 13470208828437139976ull, 5062852092350174925ull}}, {{5233249418385158242ull, 11542618568147965923ull, 3002702980264261258ull, 6328565115437718657ull}}, {{1929875754554059899ull, 5204901173330181596ull, 8365064743757714477ull, 7910706394297148321ull}}, {{10429544383451063245ull, 5558906242545057449ull, 16757380510917041308ull, 4944191496435717700ull}}, {{17648616497741216960ull, 6948632803181321811ull, 2499981564936750019ull, 6180239370544647126ull}}, {{17449084603749133296ull, 4074104985549264360ull, 12348348993025713332ull, 7725299213180808907ull}}, {{10905677877343208310ull, 11769687652823066033ull, 5411875111427376880ull, 4828312008238005567ull}}, {{18243783365106398291ull, 14712109566028832541ull, 2153157870856833196ull, 6035390010297506959ull}}, {{8969671151100834152ull, 18390136957536040677ull, 16526505393853205207ull, 7544237512871883698ull}}, {{7911887478651715297ull, 18411364626101107279ull, 14940751889585641158ull, 4715148445544927311ull}}, {{5278173329887256217ull, 13790833745771608291ull, 14064253843554663544ull, 5893935556931159139ull}}, {{1986030643931682368ull, 17238542182214510364ull, 12968631286015941526ull, 7367419446163948924ull}}, {{2482538304914602959ull, 12324805690913362147ull, 16210789107519926908ull, 9209274307704936155ull}}, {{17692487505067484514ull, 16926375593675627149ull, 7825900182986260365ull, 5755796442315585097ull}}, {{8280551326052191930ull, 7322911436812370225ull, 14394061247160213361ull, 7194745552894481371ull}}, {{14962375175992627817ull, 13765325314442850685ull, 13380890540522878797ull, 8993431941118101714ull}}, {{11657327494209086338ull, 10909171330740475630ull, 12974742606254187152ull, 5620894963198813571ull}}, {{5348287330906582114ull, 13636464163425594538ull, 11606742239390346036ull, 7026118703998516964ull}}, {{15908731200488003450ull, 17045580204281993172ull, 14508427799237932545ull, 8782648379998146205ull}}, {{719584963450226349ull, 3735958600035163877ull, 11373610383737401793ull, 5489155237498841378ull}}, {{5511167222740170840ull, 9281634268471342750ull, 4993640942816976433ull, 6861444046873551723ull}}, {{16112331065279989357ull, 16213728854016566341ull, 1630365160093832637ull, 8576805058591939654ull}}, {{12376049925013687301ull, 12439423542974047915ull, 14854036280340809110ull, 5360503161619962283ull}}, {{10858376387839721222ull, 6325907391862784086ull, 13955859331998623484ull, 6700628952024952854ull}}, {{4349598447944875719ull, 7907384239828480108ull, 8221452128143503547ull, 8375786190031191068ull}}, {{11941871066820323132ull, 2636272140679106115ull, 14361779616944465525ull, 5234866368769494417ull}}, {{10315652815098016011ull, 7907026194276270548ull, 4117166465898418194ull, 6543582960961868022ull}}, {{12894566018872520014ull, 660410705990562377ull, 14369830119227798551ull, 8179478701202335027ull}}, {{1141574734154243153ull, 7330285718885183342ull, 6675300815303680142ull, 5112174188251459392ull}}, {{10650340454547579749ull, 18386229185461254985ull, 8344126019129600177ull, 6390217735314324240ull}}, {{17924611586611862590ull, 9147728426544405019ull, 10430157523912000222ull, 7987772169142905300ull}}, {{8897039232418720167ull, 1105644248162865233ull, 15742220489299775947ull, 4992357605714315812ull}}, {{15732985058950788113ull, 15217113365485745253ull, 1231031537915168317ull, 6240447007142894766ull}}, {{5831173268406321429ull, 5186333651575017855ull, 10762161459248736205ull, 7800558758928618457ull}}, {{10562012320395032749ull, 5547301541448080111ull, 18255565958098929888ull, 4875349224330386535ull}}, {{8590829382066403032ull, 6934126926810100139ull, 18207771429196274456ull, 6094186530412983169ull}}, {{6126850709155615886ull, 8667658658512625174ull, 8924656231213179358ull, 7617733163016228962ull}}, {{17664339748504423641ull, 805600643143002829ull, 10189596162935625003ull, 4761083226885143101ull}}, {{8245366630348365839ull, 14842058859210917249ull, 17348681222096919157ull, 5951354033606428876ull}}, {{14918394306362845203ull, 4717515518731482849ull, 3239107453911597331ull, 7439192542008036096ull}}, {{2406467413835696396ull, 642604189993482829ull, 2024442158694748332ull, 4649495338755022560ull}}, {{7619770285722008399ull, 803255237491853536ull, 2530552698368435415ull, 5811869173443778200ull}}, {{9524712857152510499ull, 14839127102146980632ull, 3163190872960544268ull, 7264836466804722750ull}}, {{11905891071440638123ull, 102164803974174174ull, 13177360628055456144ull, 9081045583505903437ull}}, {{2829495901223010923ull, 63853002483858859ull, 10541693401748354042ull, 5675653489691189648ull}}, {{17371927931810927366ull, 9303188289959599381ull, 13177116752185442552ull, 7094566862113987060ull}}, {{7879851859481495495ull, 11628985362449499227ull, 16471395940231803190ull, 8868208577642483825ull}}, {{2619064402962240733ull, 2656429833103549113ull, 3377093435003795138ull, 5542630361026552391ull}}, {{7885516522130188820ull, 12543909328234212199ull, 18056424849036907634ull, 6928287951283190488ull}}, {{5245209634235348120ull, 6456514623437989441ull, 4123786987586582927ull, 8660359939103988111ull}}, {{14807471067465562335ull, 10952850667289825256ull, 9494895894882696185ull, 5412724961939992569ull}}, {{62594760622401303ull, 18302749352539669475ull, 16480305887030758135ull, 6765906202424990711ull}}, {{13913301506060165341ull, 18266750672247198939ull, 15988696340361059765ull, 8457382753031238389ull}}, {{6389970432073909386ull, 13722562179368193289ull, 12298778221939356305ull, 5285864220644523993ull}}, {{12599149058519774637ull, 3318144668928077899ull, 1538414722142031670ull, 6607330275805654992ull}}, {{11137250304722330392ull, 13371052873014873182ull, 1923018402677539587ull, 8259162844757068740ull}}, {{2349095422024068591ull, 6051065036420601787ull, 10425258538528238050ull, 5161976777973167962ull}}, {{16771427332812249451ull, 16787203332380528041ull, 3808201136305521754ull, 6452470972466459953ull}}, {{7129226110733148101ull, 11760632128620884244ull, 9371937438809290097ull, 8065588715583074941ull}}, {{13679138356062993371ull, 432866052746970796ull, 8163303908469500263ull, 5040992947239421838ull}}, {{17098922945078741714ull, 14376140621215877207ull, 980757848732099520ull, 6301241184049277298ull}}, {{16761967662921039239ull, 17970175776519846509ull, 10449319347769900208ull, 7876551480061596622ull}}, {{12782072798539343476ull, 11231359860324904068ull, 1919138573928799726ull, 4922844675038497889ull}}, {{15977590998174179345ull, 4815827788551354277ull, 7010609235838387562ull, 6153555843798122361ull}}, {{6136930692435560469ull, 15243156772543968655ull, 13374947563225372356ull, 7691944804747652951ull}}, {{10753110710413307150ull, 303600945985204601ull, 15276871254656939579ull, 4807465502967283094ull}}, {{18053074406444021841ull, 14214559237763669463ull, 9872717031466398665ull, 6009331878709103868ull}}, {{17954656989627639397ull, 3933140991922423117ull, 12340896289332998332ull, 7511664848386379835ull}}, {{13527503627730968575ull, 11681585156806290256ull, 5407217171619430005ull, 4694790530241487397ull}}, {{16909379534663710719ull, 766923390725699108ull, 11370707482951675411ull, 5868488162801859246ull}}, {{2689980344620086783ull, 14793712293689287598ull, 4990012316834818455ull, 7335610203502324058ull}}, {{12585847467629884286ull, 13880454348684221593ull, 15460887432898298877ull, 9169512754377905072ull}}, {{948625639627595823ull, 10981126977141332448ull, 9663054645561436798ull, 5730945471486190670ull}}, {{1185782049534494779ull, 4503036684571889752ull, 2855446270097020190ull, 7163681839357738338ull}}, {{1482227561918118473ull, 14852167892569637998ull, 12792679874476051045ull, 8954602299197172922ull}}, {{14761450281480987758ull, 11588447942069717700ull, 12607110939974919807ull, 5596626436998233076ull}}, {{5068778141683081ull, 9873873909159759222ull, 15758888674968649759ull, 6995783046247791345ull}}, {{9229708009531879659ull, 7730656368022311123ull, 5863552788428648487ull, 8744728807809739182ull}}, {{3462724496743730835ull, 11749189257655026308ull, 17499778548050069016ull, 5465455504881086988ull}}, {{4328405620929663544ull, 14686486572068782885ull, 3427979111353034654ull, 6831819381101358736ull}}, {{10022193044589467334ull, 9134736178231202798ull, 4284973889191293318ull, 8539774226376698420ull}}, {{1652184634441029180ull, 1097524092967113845ull, 11901480717599334132ull, 5337358891485436512ull}}, {{6676916811478674379ull, 1371905116208892306ull, 14876850896999167665ull, 6671698614356795640ull}}, {{17569518051203118781ull, 6326567413688503286ull, 149319547539407965ull, 8339623267945994551ull}}, {{6369262763574561335ull, 6259947642769008506ull, 7010853744853211834ull, 5212264542466246594ull}}, {{17184950491322977476ull, 17048306590316036440ull, 17986939217921290600ull, 6515330678082808242ull}}, {{3034444040444170229ull, 2863639164185493935ull, 13260301985546837443ull, 8144163347603510303ull}}, {{8814056552918688249ull, 17930675542111791373ull, 15205217768607855257ull, 5090102092252193939ull}}, {{15629256709575748215ull, 8578286372357575504ull, 14394836192332431168ull, 6362627615315242424ull}}, {{1089826813260133653ull, 10722857965446969381ull, 17993545240415538960ull, 7953284519144053030ull}}, {{2986984767501277485ull, 6701786228404355863ull, 6634279756832323946ull, 4970802824465033144ull}}, {{17568789014658760569ull, 17600604822360220636ull, 8292849696040404932ull, 6213503530581291430ull}}, {{3514242194613899095ull, 3554011954240724180ull, 1142690083195730358ull, 7766879413226614288ull}}, {{11419773408488462742ull, 16056315526682616324ull, 714181301997331473ull, 4854299633266633930ull}}, {{14274716760610578428ull, 6235336353071106693ull, 10116098664351440150ull, 6067874541583292412ull}}, {{4008337895481059323ull, 17017542478193659175ull, 12645123330439300187ull, 7584843176979115515ull}}, {{9422740212316743933ull, 8330121039657343032ull, 5597359072310868665ull, 4740526985611947197ull}}, {{11778425265395929916ull, 15024337317999066694ull, 11608384858815973735ull, 5925658732014933996ull}}, {{5499659544890136587ull, 14168735629071445464ull, 14510481073519967169ull, 7407073415018667495ull}}, {{3437287215556335367ull, 1937930740528571559ull, 15986579698591061337ull, 4629420884386667184ull}}, {{18131667074727582921ull, 7034099444088102352ull, 1536480549529275055ull, 5786776105483333981ull}}, {{4217839769699927035ull, 4180938286682740037ull, 6532286705338981723ull, 7233470131854167476ull}}, {{9883985730552296697ull, 614486839926037142ull, 8165358381673727154ull, 9041837664817709345ull}}, {{1565805063167797532ull, 4995740293381161118ull, 16632564034614549231ull, 5651148540511068340ull}}, {{11180628365814522723ull, 1632989348299063493ull, 2343960969558634923ull, 7063935675638835426ull}}, {{140727401985989691ull, 15876294740655993079ull, 12153323248803069461ull, 8829919594548544282ull}}, {{7005483653882325413ull, 12228527222123689626ull, 12207513048929306317ull, 5518699746592840176ull}}, {{17980226604207682574ull, 1450600972372448320ull, 15259391311161632897ull, 6898374683241050220ull}}, {{4028539181550051602ull, 6424937233892948305ull, 627495065242489505ull, 8622968354051312776ull}}, {{14047052034537252011ull, 15544800817251562450ull, 392184415776555940ull, 5389355221282070485ull}}, {{8335443006316789206ull, 984256947854901447ull, 5101916538148082830ull, 6736694026602588106ull}}, {{5807617739468598603ull, 10453693221673402617ull, 15600767709539879345ull, 8420867533253235132ull}}, {{15158976133236343887ull, 18062773309614346395ull, 527107781607648782ull, 5263042208283271958ull}}, {{14337034148118041955ull, 13355094600163157186ull, 9882256763864336786ull, 6578802760354089947ull}}, {{8697920648292776636ull, 7470496213349170675ull, 7741134936403033079ull, 8223503450442612434ull}}, {{3130357395969291446ull, 11586589160984313528ull, 9449895353679283578ull, 5139689656526632771ull}}, {{3912946744961614307ull, 5259864414375616102ull, 7200683173671716569ull, 6424612070658290964ull}}, {{14114555468056793691ull, 11186516536396908031ull, 9000853967089645711ull, 8030765088322863705ull}}, {{15739126195176577913ull, 13909101862889149375ull, 17154748775499498329ull, 5019228180201789815ull}}, {{15062221725543334487ull, 3551319273329273007ull, 16831749950946985008ull, 6274035225252237269ull}}, {{14216091138501780205ull, 4439149091661591259ull, 7204629383401567548ull, 7842544031565296587ull}}, {{6579213952349918676ull, 11997840219143270345ull, 2197050355412285765ull, 4901590019728310367ull}}, {{12835703458864786249ull, 1162242218646924219ull, 16581370999547520919ull, 6126987524660387958ull}}, {{11432943305153594908ull, 15287860828590818986ull, 11503341712579625340ull, 7658734405825484948ull}}, {{11757275584148384721ull, 331540981014486058ull, 16412960607217041646ull, 4786709003640928092ull}}, {{5473222443330705094ull, 9637798263122883381ull, 2069456685311750441ull, 5983386254551160116ull}}, {{11453214072590769271ull, 16658933847330992130ull, 2586820856639688051ull, 7479232818188950145ull}}, {{11769944813796618699ull, 8105990645368176129ull, 13145978081468274792ull, 4674520511368093840ull}}, {{877372961963609661ull, 10132488306710220162ull, 16432472601835343490ull, 5843150639210117300ull}}, {{10320088239309287884ull, 3442238346532999394ull, 2093846678584627747ull, 7303938299012646626ull}}, {{3676738262281834047ull, 18137855988448412955ull, 11840680385085560491ull, 9129922873765808282ull}}, {{18438862478422003944ull, 9030316983566564144ull, 12012111259105863211ull, 5706201796103630176ull}}, {{4601834024317953313ull, 6676210211030817277ull, 15015139073882329014ull, 7132752245129537720ull}}, {{10363978548824829546ull, 17568634800643297404ull, 322179768643359651ull, 8915940306411922151ull}}, {{15700858629870294274ull, 8674553741188366925ull, 7118891383043181638ull, 5572462691507451344ull}}, {{5791015232055704131ull, 1619820139630682849ull, 8898614228803977048ull, 6965578364384314180ull}}, {{11850455058497018067ull, 2024775174538353561ull, 11123267786004971310ull, 8706972955480392725ull}}, {{489005383919554436ull, 15100542539368634688ull, 9257885375466801020ull, 5441858097175245453ull}}, {{611256729899443045ull, 428934100501241744ull, 16184042737760889180ull, 6802322621469056816ull}}, {{764070912374303806ull, 536167625626552180ull, 1783309348491559859ull, 8502903276836321021ull}}, {{9700916357088715687ull, 16476005830512452776ull, 3420411352020918863ull, 5314314548022700638ull}}, {{12126145446360894609ull, 15983321269713178066ull, 13498886226880924387ull, 6642893185028375797ull}}, {{5934309771096342453ull, 15367465568714084679ull, 3038549728318991772ull, 8303616481285469747ull}}, {{10626472634576295889ull, 381293943591527116ull, 18039994644695227522ull, 5189760300803418591ull}}, {{13283090793220369861ull, 9699989466344184703ull, 17938307287441646498ull, 6487200376004273239ull}}, {{11992177473098074423ull, 2901614796075455071ull, 17811198090874670219ull, 8109000470005341549ull}}, {{14412639948327378370ull, 17954410312043017083ull, 13437841816010362838ull, 5068125293753338468ull}}, {{13404113916981835059ull, 13219640853198995546ull, 16797302270012953548ull, 6335156617191673085ull}}, {{7531770359372518015ull, 16524551066498744433ull, 7161569782234028223ull, 7918945771489591357ull}}, {{16236571520676293520ull, 17245373444202797126ull, 6781824123109961591ull, 4949341107180994598ull}}, {{11072342363990591092ull, 16945030786826108504ull, 17700652190742227797ull, 6186676383976243247ull}}, {{13840427954988238864ull, 7346230428250471918ull, 17514129220000396843ull, 7733345479970304059ull}}, {{4038581453440261386ull, 2285551008442850997ull, 8640487753286554075ull, 4833340924981440037ull}}, {{9659912835227714637ull, 16691996815835727458ull, 15412295710035580497ull, 6041676156226800046ull}}, {{2851519007179867488ull, 7029937964512495611ull, 10041997600689699814ull, 7552095195283500058ull}}, {{17923100443983274844ull, 18228769283102473468ull, 10887934518858450287ull, 4720059497052187536ull}}, {{3957131481269541939ull, 18174275585450703932ull, 13609918148573062859ull, 5900074371315234420ull}}, {{4946414351586927424ull, 18106158463385992011ull, 17012397685716328574ull, 7375092964144043025ull}}, {{1571331921056271376ull, 13409326042377714206ull, 7430439051863247006ull, 9218866205180053782ull}}, {{14817140505942333322ull, 3769142758058683474ull, 32338388987141475ull, 5761791378237533614ull}}, {{9298053595573140844ull, 99742429145966439ull, 9263795023088702652ull, 7202239222796917017ull}}, {{7010880976039038151ull, 124678036432458049ull, 16191429797288266219ull, 9002799028496146271ull}}, {{15911015656092868605ull, 16218824837266143944ull, 17037172650946248242ull, 5626749392810091419ull}}, {{1442025496406534140ull, 11050159009727904123ull, 16684779795255422399ull, 7033436741012614274ull}}, {{15637589925790331387ull, 9201012743732492249ull, 11632602707214502191ull, 8791795926265767843ull}}, {{2855964675977875261ull, 12668161992473889512ull, 4964533682795369917ull, 5494872453916104902ull}}, {{3569955844972344076ull, 2000144435310198178ull, 15429039140348988205ull, 6868590567395131127ull}}, {{13685816843070205903ull, 7111866562565135626ull, 14674612907008847352ull, 8585738209243913909ull}}, {{13165321545346266593ull, 4444916601603209766ull, 11477476076094223547ull, 5366086380777446193ull}}, {{7233279894828057434ull, 944459733576624304ull, 511787039835615722ull, 6707607975971807742ull}}, {{9041599868535071792ull, 10403946703825556188ull, 9863105836649295460ull, 8384509969964759677ull}}, {{14874371954689195678ull, 15725838726745748425ull, 8470284157119503614ull, 5240318731227974798ull}}, {{4757906888079330886ull, 10433926371577409724ull, 1364483159544603710ull, 6550398414034968498ull}}, {{5947383610099163607ull, 3819035927616986347ull, 10928975986285530446ull, 8187998017543710622ull}}, {{1411271747098283302ull, 16221955510042780179ull, 2218923973001068624ull, 5117498760964819139ull}}, {{15599147739155017840ull, 1830700313843923607ull, 16608713021533499493ull, 6396873451206023923ull}}, {{14887248655516384396ull, 6900061410732292413ull, 16149205258489486462ull, 7996091814007529904ull}}, {{11610373418911434200ull, 18147596436989846470ull, 10093253286555929038ull, 4997557383754706190ull}}, {{5289594736784516941ull, 13461123509382532280ull, 3393194571340135490ull, 6246946729693382738ull}}, {{6611993420980646177ull, 7603032349873389542ull, 13464865251029945171ull, 7808683412116728422ull}}, {{17967553943395067573ull, 2446052209457174511ull, 3803854763466327828ull, 4880427132572955264ull}}, {{17847756410816446562ull, 3057565261821468139ull, 4754818454332909785ull, 6100533915716194080ull}}, {{17698009495093170298ull, 8433642595704223078ull, 5943523067916137231ull, 7625667394645242600ull}}, {{6449569916005843532ull, 12188555649956221280ull, 3714701917447585769ull, 4766042121653276625ull}}, {{8061962395007304415ull, 1400636507163112888ull, 9255063415236870116ull, 5957552652066595781ull}}, {{10077452993759130519ull, 1750795633953891110ull, 16180515287473475549ull, 7446940815083244726ull}}, {{1686722102672068671ull, 3400090280434875896ull, 5501136036243534314ull, 4654338009427027954ull}}, {{2108402628340085838ull, 13473484887398370678ull, 16099792082159193700ull, 5817922511783784942ull}}, {{11858875322279883105ull, 16841856109247963347ull, 10901368065844216317ull, 7272403139729731178ull}}, {{10211908134422465978ull, 7217262081277790472ull, 4403338045450494589ull, 9090503924662163973ull}}, {{6382442584014041236ull, 6816631810012312997ull, 5057929287620253070ull, 5681564952913852483ull}}, {{12589739248444939449ull, 17744161799370167054ull, 1710725591097928433ull, 7101956191142315604ull}}, {{6513802023701398503ull, 8345144193930545106ull, 2138406988872410542ull, 8877445238927894505ull}}, {{8682812283240761969ull, 604029102779202787ull, 12865719414113726349ull, 5548403274329934065ull}}, {{6241829335623564557ull, 5366722396901391388ull, 2247091212359994224ull, 6935504092912417582ull}}, {{7802286669529455696ull, 6708402996126739235ull, 12032236052304768588ull, 8669380116140521977ull}}, {{2570586159242215858ull, 13416123909433987830ull, 602618505049398511ull, 5418362572587826236ull}}, {{12436604735907545631ull, 12158468868365096883ull, 753273131311748139ull, 6772953215734782795ull}}, {{10934069901457044134ull, 10586400067028983200ull, 14776649469421848886ull, 8466191519668478493ull}}, {{6833793688410652584ull, 2004814023465726596ull, 11541248927602349506ull, 5291369699792799058ull}}, {{8542242110513315730ull, 11729389566186934053ull, 5203189122648161074ull, 6614212124740998823ull}}, {{15289488656569032566ull, 5438364920878891758ull, 1892300384882813439ull, 8267765155926248529ull}}, {{4944244391928257450ull, 10316507103190389205ull, 12711902786620228159ull, 5167353222453905330ull}}, {{10791991508337709716ull, 8283947860560598602ull, 6666506446420509391ull, 6459191528067381663ull}}, {{4266617348567361337ull, 5743248807273360349ull, 3721447039598248835ull, 8073989410084227079ull}}, {{4972478852068294788ull, 1283687495332156266ull, 9243433427389987378ull, 5046243381302641924ull}}, {{15438970601940144293ull, 10827981406019971140ull, 11554291784237484222ull, 6307804226628302405ull}}, {{851969178715628750ull, 4311604720670188118ull, 607806675014691566ull, 7884755283285378007ull}}, {{14367538791979431681ull, 16529811005701031285ull, 7297408199525264084ull, 4927972052053361254ull}}, {{4124365434692125889ull, 2215519683416737491ull, 18345132286261355914ull, 6159965065066701567ull}}, {{543770774937769457ull, 11992771641125697672ull, 18319729339399306988ull, 7699956331333376959ull}}, {{339856734336105911ull, 16718854312558336853ull, 18367359864765648723ull, 4812472707083360599ull}}, {{5036506936347520293ull, 16286881872270533162ull, 18347513812529673000ull, 6015590883854200749ull}}, {{15519005707289176174ull, 1911858266628614836ull, 9099334210379927539ull, 7519488604817750937ull}}, {{476006530200959301ull, 17335812481138741937ull, 17216298927555924471ull, 4699680378011094335ull}}, {{5206694181178587030ull, 17058079582996039517ull, 16908687641017517685ull, 5874600472513867919ull}}, {{11120053744900621691ull, 7487541423462885684ull, 16524173532844509203ull, 7343250590642334899ull}}, {{13900067181125777114ull, 4747740760901219201ull, 16043530897628248600ull, 9179063238302918624ull}}, {{1770012960562528840ull, 2967337975563262001ull, 10027206811017655375ull, 5736914523939324140ull}}, {{6824202219130548954ull, 17544230524736241213ull, 12534008513772069218ull, 7171143154924155175ull}}, {{13141938792340574097ull, 12706916119065525708ull, 11055824623787698619ull, 8963928943655193969ull}}, {{17437083782067634619ull, 5635979565202259615ull, 18439105435935781397ull, 5602455589784496230ull}}, {{17184668709157155369ull, 11656660474930212423ull, 13825509758064950938ull, 7003069487230620288ull}}, {{16869149868019056307ull, 5347453556807989721ull, 17281887197581188673ull, 8753836859038275360ull}}, {{3625689639870828336ull, 14871373519073463336ull, 10801179498488242920ull, 5471148036898922100ull}}, {{4532112049838535420ull, 142472825132277554ull, 13501474373110303651ull, 6838935046123652625ull}}, {{14888512099152945083ull, 14013149086697510654ull, 3041784911105715851ull, 8548668807654565782ull}}, {{4693634043543202773ull, 6452375169972250207ull, 15736173624723236119ull, 5342918004784103613ull}}, {{1255356536001615562ull, 3453782944037924855ull, 5835158975621881437ull, 6678647505980129517ull}}, {{15404253725284183165ull, 8928914698474793972ull, 11905634737954739700ull, 8348309382475161896ull}}, {{404286541447838670ull, 14803943723401522041ull, 7441021711221712312ull, 5217693364046976185ull}}, {{5117044195237186241ull, 58185580542350935ull, 13912963157454528295ull, 6522116705058720231ull}}, {{1784619225619094898ull, 13907790030960102381ull, 12779517928390772464ull, 8152645881323400289ull}}, {{3421230025225628263ull, 8692368769350063988ull, 1069669677603150934ull, 5095403675827125181ull}}, {{4276537531532035329ull, 1642088924832804177ull, 5948773115431326572ull, 6369254594783906476ull}}, {{9957357932842432065ull, 2052611156041005221ull, 7435966394289158215ull, 7961568243479883095ull}}, {{8529191717240213993ull, 8200411000166710119ull, 11565008024071805740ull, 4975980152174926934ull}}, {{6049803628122879587ull, 10250513750208387649ull, 5232887993234981367ull, 6219975190218658668ull}}, {{12173940553580987388ull, 8201456169333096657ull, 6541109991543726709ull, 7774968987773323335ull}}, {{691183818347035261ull, 7431753115046879363ull, 11005722772355911049ull, 4859355617358327084ull}}, {{14699037828215957789ull, 13901377412235987107ull, 13757153465444888811ull, 6074194521697908855ull}}, {{13762111266842559332ull, 12765035746867595980ull, 12584755813378723110ull, 7592743152122386069ull}}, {{17824691578631375390ull, 3366461323364859583ull, 10171315392575395896ull, 4745464470076491293ull}}, {{17669178454861831334ull, 4208076654206074479ull, 17325830259146632774ull, 5931830587595614116ull}}, {{17474787050149901263ull, 14483467854612368907ull, 3210543750223739351ull, 7414788234494517646ull}}, {{8615898897129994338ull, 15969696436773812423ull, 15841647899172000806ull, 4634242646559073528ull}}, {{6158187602985105018ull, 10738748509112489721ull, 1355315800255449392ull, 5792803308198841911ull}}, {{12309420522158769176ull, 13423435636390612151ull, 15529202805601475452ull, 7241004135248552388ull}}, {{10775089634271073566ull, 16779294545488265189ull, 964759433292292699ull, 9051255169060690486ull}}, {{9040274030633114931ull, 8181216081716471791ull, 14438032701089846649ull, 5657034480662931553ull}}, {{6688656519864005760ull, 14838206120572977643ull, 4212482821080144599ull, 7071293100828664442ull}}, {{3749134631402619296ull, 13936071632288834150ull, 14488975563204956557ull, 8839116376035830552ull}}, {{16178267199908800772ull, 11015887779394215295ull, 9055609727003097848ull, 5524447735022394095ull}}, {{15611147981458613061ull, 13769859724242769119ull, 6707826140326484406ull, 6905559668777992619ull}}, {{14902248958395878422ull, 7988952618448685591ull, 3773096656980717604ull, 8631949585972490774ull}}, {{16231434626638505870ull, 14216467423385204302ull, 16193243465895112214ull, 5394968491232806733ull}}, {{11065921246443356529ull, 8547212242376729570ull, 6406496277086726556ull, 6743710614041008417ull}}, {{4609029521199419854ull, 10684015302970911963ull, 12619806364785796099ull, 8429638267551260521ull}}, {{574800441535943457ull, 4371666555143126025ull, 969849950350040706ull, 5268523917219537826ull}}, {{5330186570347317225ull, 14687955230783683339ull, 10435684474792326690ull, 6585654896524422282ull}}, {{2051047194506758627ull, 9136572001624828366ull, 3821233556635632555ull, 8232068620655527853ull}}, {{15116962551848887854ull, 3404514491801823776ull, 4694113982110964299ull, 5145042887909704908ull}}, {{449459116101558201ull, 18090701170034443433ull, 5867642477638705373ull, 6431303609887131135ull}}, {{5173509913554335655ull, 8778318407260890579ull, 2722867078620993813ull, 8039129512358913919ull}}, {{927600686757765833ull, 7792292013751750564ull, 8619320951779202989ull, 5024455945224321199ull}}, {{1159500858447207291ull, 14352051035617076109ull, 6162465171296615832ull, 6280569931530401499ull}}, {{6061062091486397018ull, 17940063794521345136ull, 3091395445693381886ull, 7850712414413001874ull}}, {{3788163807178998136ull, 6600853853148452806ull, 6543808171985751583ull, 4906695259008126171ull}}, {{13958576795828523478ull, 3639381298008178103ull, 3568074196554801575ull, 6133369073760157714ull}}, {{12836534976358266443ull, 18384284677792386341ull, 13683464782548277776ull, 7666711342200197142ull}}, {{10328677369437610479ull, 11490177923620241463ull, 3940479470665285706ull, 4791694588875123214ull}}, {{8299160693369625195ull, 5139350367670526021ull, 14148971375186382941ull, 5989618236093904017ull}}, {{14985636885139419398ull, 11035873978015545430ull, 3851156163700814964ull, 7487022795117380022ull}}, {{4754337034784749220ull, 16120793273114491702ull, 16242030657595173064ull, 4679389246948362513ull}}, {{15166293330335712333ull, 1704247517683563011ull, 6467480266711802619ull, 5849236558685453142ull}}, {{14346180644492252512ull, 15965367452386617476ull, 17307722370244529081ull, 7311545698356816427ull}}, {{17932725805615315639ull, 6121651260201108133ull, 17022966944378273448ull, 9139432122946020534ull}}, {{13513796637723266227ull, 3826032037625692583ull, 6027668321809033001ull, 5712145076841262834ull}}, {{12280559778726694879ull, 9394226065459503633ull, 16757957439116067059ull, 7140181346051578542ull}}, {{1515641668126204887ull, 7131096563396991638ull, 11724074762040308016ull, 8925226682564473178ull}}, {{14782334097861041767ull, 4456935352123119773ull, 11939232744702580414ull, 5578266676602795736ull}}, {{4642859567044138496ull, 14794541227008675525ull, 14924040930878225517ull, 6972833345753494670ull}}, {{10415260477232561024ull, 4658118478478680694ull, 9431679126743006089ull, 8716041682191868338ull}}, {{1897851779842962736ull, 14440539095117645194ull, 10506485472641766709ull, 5447526051369917711ull}}, {{11595686761658479228ull, 4215615813614892780ull, 8521420822374820483ull, 6809407564212397139ull}}, {{14494608452073099035ull, 657833748591228071ull, 6040090009541137700ull, 8511759455265496424ull}}, {{15976659310186768753ull, 9634518129724293352ull, 3775056255963211062ull, 5319849659540935265ull}}, {{1524080064023909325ull, 2819775625300590883ull, 9330506338381401732ull, 6649812074426169081ull}}, {{15740158135312050368ull, 3524719531625738603ull, 16274818941404140069ull, 8312265093032711351ull}}, {{7531755825356337528ull, 4508792716479780579ull, 17089290866018669399ull, 5195165683145444594ull}}, {{4803008763268034006ull, 1024304877172337820ull, 12138241545668560941ull, 6493957103931805743ull}}, {{6003760954085042508ull, 5892067114892810179ull, 10561115913658313272ull, 8117446379914757179ull}}, {{1446507587089457616ull, 3682541946808006362ull, 4294854436822751843ull, 5073403987446723237ull}}, {{11031506520716597827ull, 18438235488792171664ull, 9980254064455827707ull, 6341754984308404046ull}}, {{13789383150895747284ull, 18436108342562826676ull, 3251945543715008826ull, 7927193730385505058ull}}, {{17841736506164617861ull, 16134253732529154576ull, 6644151983249268420ull, 4954496081490940661ull}}, {{3855426558996220710ull, 1721073091951891605ull, 12916875997488973430ull, 6193120101863675826ull}}, {{9430969217172663791ull, 11374713401794640314ull, 6922722960006440979ull, 7741400127329594783ull}}, {{10506041779160302774ull, 4803352866907956244ull, 11244230877645107468ull, 4838375079580996739ull}}, {{13132552223950378467ull, 6004191083634945305ull, 9443602578628996431ull, 6047968849476245924ull}}, {{2580632224655809372ull, 2893552836116293728ull, 11804503223286245539ull, 7559961061845307405ull}}, {{1612895140409880857ull, 17949371587068541244ull, 9683657523767597413ull, 4724975663653317128ull}}, {{2016118925512351072ull, 8601656428553512843ull, 12104571904709496767ull, 5906219579566646410ull}}, {{16355206712172602551ull, 6140384517264503149ull, 5907342844032095151ull, 7382774474458308013ull}}, {{12527847204321570547ull, 10755269350931396324ull, 5997932286733753421ull, 4614234046536442508ull}}, {{15659809005401963183ull, 18055772707091633309ull, 7497415358417191776ull, 5767792558170553135ull}}, {{5739703201470290267ull, 4122971810154990021ull, 4760083179594101817ull, 7209740697713191419ull}}, {{11786315020265250738ull, 9765400781121125430ull, 1338417956065239367ull, 9012175872141489274ull}}, {{2754760869238393807ull, 13020904515841785250ull, 5448197240968162508ull, 5632609920088430796ull}}, {{12666823123402768067ull, 16276130644802231562ull, 6810246551210203135ull, 7040762400110538495ull}}, {{6610156867398684276ull, 15733477287575401549ull, 3901122170585366015ull, 8800953000138173119ull}}, {{6437191051337871624ull, 16750952332375707824ull, 9355730384256935615ull, 5500595625086358199ull}}, {{8046488814172339530ull, 16327004397042246876ull, 7082976961893781615ull, 6875744531357947749ull}}, {{10058111017715424413ull, 15797069477875420691ull, 13465407220794614923ull, 8594680664197434686ull}}, {{3980476376858446306ull, 7567325414458443980ull, 3804193494569246423ull, 5371675415123396679ull}}, {{4975595471073057883ull, 4847470749645667071ull, 143555849784170125ull, 6714594268904245849ull}}, {{1607808320413934449ull, 10671024455484471743ull, 4791130830657600560ull, 8393242836130307311ull}}, {{7922409227899790887ull, 6669390284677794839ull, 9911985796802082206ull, 5245776772581442069ull}}, {{5291325516447350705ull, 17560109892702019357ull, 17001668264429990661ull, 6557220965726802586ull}}, {{11225842913986576285ull, 8115079310595360484ull, 12028713293682712519ull, 8196526207158503233ull}}, {{16239523858096385986ull, 11989453596763182158ull, 600416780910613468ull, 5122828879474064521ull}}, {{11076032785765706675ull, 14986816995953977698ull, 5362206994565654739ull, 6403536099342580651ull}}, {{4621668945352357535ull, 14121835226515084219ull, 2091072724779680520ull, 8004420124178225814ull}}, {{582700081631529508ull, 8826147016571927637ull, 15141978508269464037ull, 5002762577611391133ull}}, {{5340061120466799788ull, 15644369789142297450ull, 5092415080054666334ull, 6253453222014238917ull}}, {{15898448437438275543ull, 10332090199573096004ull, 10977204868495720822ull, 7816816527517798646ull}}, {{713158236544146407ull, 1845870356305797099ull, 2249067024382437610ull, 4885510329698624154ull}}, {{14726505850962346720ull, 11530709982237022181ull, 12034705817332822820ull, 6106887912123280192ull}}, {{4573074258420769688ull, 14413387477796277727ull, 15043382271666028525ull, 7633609890154100240ull}}, {{9775700439154062911ull, 11314210182836367531ull, 9402113919791267828ull, 4771006181346312650ull}}, {{7607939530515190735ull, 14142762728545459414ull, 2529270362884308977ull, 5963757726682890813ull}}, {{286552376289212611ull, 3843395355399660556ull, 7773273972032774126ull, 7454697158353613516ull}}, {{9402467272035533690ull, 16237180152406951559ull, 14081668269375259636ull, 4659185723971008447ull}}, {{7141398071617029208ull, 1849731116799137833ull, 12990399318291686642ull, 5823982154963760559ull}}, {{13538433607948674414ull, 11535535932853698099ull, 11626313129437220398ull, 7279977693704700699ull}}, {{12311355991508455114ull, 5196047879212346816ull, 9921205393369137594ull, 9099972117130875874ull}}, {{7694597494692784446ull, 7859215942935104664ull, 10812439389283098900ull, 5687482573206797421ull}}, {{9618246868365980558ull, 9824019928668880830ull, 18127235255031261529ull, 7109353216508496776ull}}, {{2799436548602699889ull, 16891710929263488942ull, 4212299995079525295ull, 8886691520635620971ull}}, {{15584705898158851143ull, 17474848358430762444ull, 326844487711009357ull, 5554182200397263107ull}}, {{1034138298989012312ull, 8008502392756289344ull, 14243613664920925409ull, 6942727750496578883ull}}, {{1292672873736265390ull, 14622314009372749584ull, 13192831062723768857ull, 8678409688120723604ull}}, {{807920546085165869ull, 2221417228216886634ull, 17468891451057131344ull, 5424006055075452252ull}}, {{10233272719461233144ull, 2776771535271108292ull, 3389370240111862564ull, 6780007568844315316ull}}, {{12791590899326541430ull, 3470964419088885365ull, 4236712800139828205ull, 8475009461055394145ull}}, {{10300587321292782346ull, 4475195771144247305ull, 14177160546155862388ull, 5296880913159621340ull}}, {{17487420170043365836ull, 5593994713930309131ull, 17721450682694827985ull, 6621101141449526675ull}}, {{17247589194126819391ull, 11604179410840274318ull, 17540127334941147077ull, 8276376426811908344ull}}, {{6168057227901874216ull, 9558455140988865401ull, 10962579584338216923ull, 5172735266757442715ull}}, {{12321757553304730674ull, 7336382907808693847ull, 9091538461995383250ull, 6465919083446803394ull}}, {{10790510923203525438ull, 18393850671615643117ull, 2141051040639453254ull, 8082398854308504243ull}}, {{9049912336215897351ull, 6884470651332389044ull, 17479057964895515948ull, 5051499283942815151ull}}, {{11312390420269871688ull, 8605588314165486305ull, 17237136437692007031ull, 6314374104928518939ull}}, {{305429970055175898ull, 6145299374279469978ull, 16934734528687620885ull, 7892967631160648674ull}}, {{4802579749711872841ull, 6146655118138362688ull, 15195895098857150957ull, 4933104769475405421ull}}, {{6003224687139841051ull, 12295004916100341264ull, 5159810818289274984ull, 6166380961844256777ull}}, {{7504030858924801313ull, 15368756145125426580ull, 11061449541288981634ull, 7707976202305320971ull}}, {{13913391323682776629ull, 14217158609130779516ull, 4607562954091919569ull, 4817485126440825607ull}}, {{17391739154603470786ull, 3936390206131310683ull, 1147767674187511558ull, 6021856408051032009ull}}, {{17127987924826950579ull, 14143859794518914162ull, 6046395611161777351ull, 7527320510063790011ull}}, {{15316678471444232016ull, 15757441399215403207ull, 1473154247762416892ull, 4704575318789868757ull}}, {{14534162070877902116ull, 1250057675309702393ull, 6453128828130409020ull, 5880719148487335946ull}}, {{4332644533315213932ull, 1562572094137127992ull, 17289783072017787083ull, 7350898935609169932ull}}, {{5415805666644017415ull, 15788273172953573702ull, 3165484766312682237ull, 9188623669511462416ull}}, {{17219936596934674597ull, 12173513742309677515ull, 1978427978945426398ull, 5742889793444664010ull}}, {{16913234727740955342ull, 5993520141032321086ull, 11696407010536558806ull, 7178612241805830012ull}}, {{11918171372821418369ull, 16715272213145177166ull, 14620508763170698507ull, 8973265302257287515ull}}, {{2837171089585998577ull, 8141202124002041777ull, 6831974967767992615ull, 5608290813910804697ull}}, {{8158149880409886125ull, 5564816636575164317ull, 13151654728137378673ull, 7010363517388505871ull}}, {{14809373368939745560ull, 11567706814146343300ull, 11827882391744335437ull, 8762954396735632339ull}}, {{32486318732565167ull, 9535659768055158515ull, 5086583485626515696ull, 5476846497959770212ull}}, {{13875665953697870171ull, 11919574710068948143ull, 6358229357033144620ull, 6846058122449712765ull}}, {{12732896423694949810ull, 14899468387586185179ull, 12559472714718818679ull, 8557572653062140956ull}}, {{5652217255595649679ull, 16229696769882447593ull, 17073042483554037482ull, 5348482908163838097ull}}, {{11676957587921950003ull, 11063748925498283683ull, 7506245049160383141ull, 6685603635204797622ull}}, {{9984510966475049600ull, 18441372175300242508ull, 159434274595703118ull, 8357004544005997028ull}}, {{15463691390901681808ull, 6914171591135263663ull, 9323018458477090257ull, 5223127840003748142ull}}, {{14717928220199714356ull, 13254400507346467483ull, 2430401036241587013ull, 6528909800004685178ull}}, {{13785724256822255041ull, 2732942578900920642ull, 12261373332156759575ull, 8161137250005856472ull}}, {{13227763678941297305ull, 8625618139454157257ull, 7663358332597974734ull, 5100710781253660295ull}}, {{2699646543394457919ull, 1558650637462920764ull, 4967511897320080514ull, 6375888476567075369ull}}, {{3374558179243072398ull, 11171685333683426763ull, 10821075890077488546ull, 7969860595708844211ull}}, {{18249999926522777913ull, 11593989351979529630ull, 4457329422084736389ull, 4981162872318027632ull}}, {{13589127871298696583ull, 657428634692248326ull, 5571661777605920487ull, 6226453590397534540ull}}, {{7763037802268594921ull, 14656843848647474120ull, 6964577222007400608ull, 7783066987996918175ull}}, {{4851898626417871826ull, 9160527405404671325ull, 11270389791395707236ull, 4864416867498073859ull}}, {{10676559301449727686ull, 11450659256755839156ull, 9476301220817246141ull, 6080521084372592324ull}}, {{13345699126812159607ull, 478266015662635233ull, 11845376526021557677ull, 7600651355465740405ull}}, {{1423532926616517899ull, 2604759269002840973ull, 9709203337977167500ull, 4750407097166087753ull}}, {{6391102176698035277ull, 3255949086253551216ull, 16748190190898847279ull, 5938008871457609691ull}}, {{7988877720872544096ull, 17904994413099102732ull, 16323551720196171194ull, 7422511089322012114ull}}, {{14216420612400115868ull, 15802307526614327111ull, 14813905843549994900ull, 4639069430826257571ull}}, {{13158839747072756931ull, 1306140334558357273ull, 13905696286010105722ull, 5798836788532821964ull}}, {{2613491628558782452ull, 10856047455052722400ull, 17382120357512632152ull, 7248545985666027455ull}}, {{3266864535698478065ull, 13570059318815903000ull, 17115964428463402286ull, 9060682482082534319ull}}, {{2041790334811548791ull, 3869601055832551471ull, 17615006795430708285ull, 5662926551301583949ull}}, {{16387295973796599701ull, 9448687338218077242ull, 8183700439006221644ull, 7078658189126979937ull}}, {{11260747930390973818ull, 11810859172772596553ull, 14841311567185164959ull, 8848322736408724921ull}}, {{120438428853276780ull, 14299316010623954702ull, 2358290701849646243ull, 5530201710255453076ull}}, {{9373920072921371783ull, 13262458994852555473ull, 2947863377312057804ull, 6912752137819316345ull}}, {{16329086109579102633ull, 16578073743565694341ull, 8296515240067460159ull, 8640940172274145431ull}}, {{12511521827700633098ull, 17278825117369640819ull, 12102851052683244455ull, 5400587607671340894ull}}, {{11027716266198403468ull, 16986845378284663120ull, 5905191778999279761ull, 6750734509589176118ull}}, {{13784645332748004335ull, 7398498667573665188ull, 16604861760603875510ull, 8438418136986470147ull}}, {{17838775369822278517ull, 12375648806152838ull, 8072195591163728242ull, 5274011335616543842ull}}, {{13075097175423072339ull, 9238841597862466856ull, 866872452099884494ull, 6592514169520679803ull}}, {{16343871469278840423ull, 2325179960473307762ull, 14918648620407019330ull, 8240642711900849753ull}}, {{14826605686726663169ull, 6064923493723205255ull, 2406626360113305225ull, 5150401694938031096ull}}, {{13921571089980941057ull, 12192840385581394473ull, 3008282950141631531ull, 6438002118672538870ull}}, {{3566905807194012609ull, 10629364463549355188ull, 12983725724531815222ull, 8047502648340673587ull}}, {{11452688166351033689ull, 2031666771290959088ull, 5808985568618690562ull, 5029689155212920992ull}}, {{14315860207938792111ull, 11762955500968474668ull, 7261231960773363202ull, 6287111444016151240ull}}, {{17894825259923490138ull, 5480322339355817527ull, 9076539950966704003ull, 7858889305020189050ull}}, {{18101794815093263193ull, 1119358452883692002ull, 10284523487781577906ull, 4911805815637618156ull}}, {{13403871482011803183ull, 10622570102959390811ull, 12855654359726972382ull, 6139757269547022695ull}}, {{12143153334087366074ull, 4054840591844462706ull, 11457881931231327574ull, 7674696586933778369ull}}, {{12201156852231991701ull, 16369333425184952903ull, 243647179378497877ull, 4796685366833611481ull}}, {{10639760046862601722ull, 6626608726199027417ull, 4916244992650510251ull, 5995856708542014351ull}}, {{17911386077005640056ull, 3671574889321396367ull, 1533620222385749910ull, 7494820885677517939ull}}, {{18112145325769606891ull, 16129792361108036441ull, 17099413703486951357ull, 4684263053548448711ull}}, {{8805123601929844902ull, 6327182396102881840ull, 16762581110931301293ull, 5855328816935560889ull}}, {{11006404502412306127ull, 12520664013555990204ull, 7118168333381962904ull, 7319161021169451112ull}}, {{13758005628015382659ull, 15650830016944987755ull, 8897710416727453630ull, 9148951276461813890ull}}, {{6292910508295920210ull, 5170082742163229443ull, 10172755028882046423ull, 5718094547788633681ull}}, {{3254452116942512358ull, 1850917409276648900ull, 17327629804529945933ull, 7147618184735792101ull}}, {{4068065146178140448ull, 6925332780023199029ull, 7824479200380268704ull, 8934522730919740127ull}}, {{4848383725575031732ull, 4328332987514499393ull, 11807828527878749796ull, 5584076706824837579ull}}, {{10672165675396177569ull, 5410416234393124241ull, 10148099641421049341ull, 6980095883531046974ull}}, {{17951893112672609865ull, 11374706311418793205ull, 3461752514921535868ull, 8725119854413808718ull}}, {{13525776204634075118ull, 16332563481491521561ull, 15998653377108123629ull, 5453199909008630448ull}}, {{3072162200510430185ull, 6580646296582238240ull, 1551572647675602921ull, 6816499886260788061ull}}, {{3840202750638037731ull, 12837493889155185704ull, 6551151828021891555ull, 8520624857825985076ull}}, {{2400126719148773582ull, 5717590671508297113ull, 13317841929368458030ull, 5325390536141240672ull}}, {{7611844417363354882ull, 16370360376240147199ull, 16647302411710572537ull, 6656738170176550840ull}}, {{4903119503276805698ull, 6627892415018020287ull, 2362383940928664056ull, 8320922712720688551ull}}, {{9981978717189085417ull, 4142432759386262679ull, 8394018990721496891ull, 5200576695450430344ull}}, {{7865787378058968868ull, 566354930805440445ull, 10492523738401871114ull, 6500720869313037930ull}}, {{14443920241001098988ull, 9931315700361576364ull, 3892282636147563084ull, 8125901086641297413ull}}, {{18250822187480462676ull, 15430444349580761035ull, 4738519656805920879ull, 5078688179150810883ull}}, {{18201841715923190441ull, 14676369418548563390ull, 1311463552580013195ull, 6348360223938513604ull}}, {{13528930108049212243ull, 13733775754758316334ull, 1639329440725016494ull, 7935450279923142005ull}}, {{3843895299103369748ull, 3971923828296559805ull, 3330423909666829261ull, 4959656424951963753ull}}, {{9416555142306600089ull, 9576590803798087660ull, 8774715905510924480ull, 6199570531189954691ull}}, {{11770693927883250111ull, 11970738504747609575ull, 6356708863461267696ull, 7749463163987443364ull}}, {{14274212732568113175ull, 7481711565467255984ull, 13196315076518068118ull, 4843414477492152102ull}}, {{17842765915710141469ull, 128767419979294172ull, 7272021808792809340ull, 6054268096865190128ull}}, {{3856713320928125220ull, 160959274974117716ull, 9090027260991011675ull, 7567835121081487660ull}}, {{11633817862434854071ull, 16241500611354681236ull, 14904639074974158104ull, 4729896950675929787ull}}, {{14542272328043567589ull, 1855131690483799929ull, 14019112825290309727ull, 5912371188344912234ull}}, {{4342782354772295774ull, 16153972668386913624ull, 8300518994758111350ull, 7390463985431140293ull}}, {{2714238971732684859ull, 5484546899314433111ull, 7493667380937513546ull, 4619039990894462683ull}}, {{17227856769948019785ull, 16079055660997817196ull, 4755398207744504028ull, 5773799988618078354ull}}, {{3088076888725473115ull, 1652075502537719880ull, 15167619796535405844ull, 7217249985772597942ull}}, {{3860096110906841394ull, 2065094378172149850ull, 9736152708814481497ull, 9021562482215747428ull}}, {{7024246087744163775ull, 12819899032426063416ull, 15308467479863826743ull, 5638476551384842142ull}}, {{8780307609680204719ull, 11413187772105191366ull, 9912212312975007621ull, 7048095689231052678ull}}, {{1752012475245480091ull, 431426659849325496ull, 3166893354363983719ull, 8810119611538815848ull}}, {{1095007797028425057ull, 7187170690046910291ull, 1979308346477489824ull, 5506324757211759905ull}}, {{15203817801567695033ull, 8983963362558637863ull, 7085821451524250184ull, 6882905946514699881ull}}, {{14393086233532230887ull, 11229954203198297329ull, 13468962832832700634ull, 8603632433143374851ull}}, {{2078149868316562449ull, 11630407395426323735ull, 6112258761306743944ull, 5377270270714609282ull}}, {{16432745390677866773ull, 14538009244282904668ull, 16863695488488205738ull, 6721587838393261602ull}}, {{2094187664637781850ull, 8949139518498855028ull, 11856247323755481365ull, 8401984797991577003ull}}, {{10532239327253389464ull, 7899055208275478344ull, 5104311568133481901ull, 5251240498744735627ull}}, {{13165299159066736830ull, 14485505028771735834ull, 1768703441739464472ull, 6564050623430919534ull}}, {{7233251911978645230ull, 18106881285964669793ull, 11434251339029106398ull, 8205063279288649417ull}}, {{16049997491055123029ull, 6705114785300530716ull, 228878059252109643ull, 5128164549555405886ull}}, {{1615752790109352170ull, 3769707463198275492ull, 9509469610919912862ull, 6410205686944257357ull}}, {{2019690987636690212ull, 13935506365852620173ull, 16498523032077278981ull, 8012757108680321696ull}}, {{3568149876486625335ull, 11015534487871581560ull, 10311576895048299363ull, 5007973192925201060ull}}, {{4460187345608281668ull, 9157732091412089046ull, 12889471118810374204ull, 6259966491156501325ull}}, {{14798606218865127893ull, 11447165114265111307ull, 2276780843230804043ull, 7824958113945626657ull}}, {{6943285877577010982ull, 4848635187202000615ull, 12952203073087722287ull, 4890598821216016660ull}}, {{4067421328543875823ull, 1449107965575112865ull, 16190253841359652859ull, 6113248526520020825ull}}, {{9695962679107232682ull, 15646443012251054793ull, 6402759246417402361ull, 7641560658150026032ull}}, {{17589191720510490187ull, 2861497855015827389ull, 4001724529010876476ull, 4775975411343766270ull}}, {{8151431595355949021ull, 3576872318769784237ull, 14225527698118371403ull, 5969969264179707837ull}}, {{14800975512622324180ull, 18306148453744394008ull, 3946851567365800541ull, 7462461580224634797ull}}, {{9250609695388952613ull, 13747185792803940207ull, 4772625238817319290ull, 4664038487640396748ull}}, {{6951576100808802862ull, 7960610204150149451ull, 5965781548521649113ull, 5830048109550495935ull}}, {{4077784107583615673ull, 14562448773615074718ull, 2845540917224673487ull, 7287560136938119919ull}}, {{14320602171334295400ull, 13591374948591455493ull, 17391984201813005571ull, 9109450171172649898ull}}, {{11256219366297628577ull, 6188766333655965731ull, 15481676144560516386ull, 5693406356982906186ull}}, {{9458588189444647817ull, 16959329953924732972ull, 10128723143845869674ull, 7116757946228632733ull}}, {{11823235236805809771ull, 11975790405551140407ull, 17272589948234724997ull, 8895947432785790916ull}}, {{14307051050644712963ull, 9790712012683156706ull, 1571996680791927315ull, 5559967145491119323ull}}, {{8660441776451115396ull, 7626703997426557979ull, 15800053906272072856ull, 6949958931863899153ull}}, {{6213866202136506341ull, 9533379996783197474ull, 5915009327557927358ull, 8687448664829873942ull}}, {{8495352394762704367ull, 1346676479562110517ull, 17531938885005868311ull, 5429655415518671213ull}}, {{15230876511880768363ull, 15518403654734801858ull, 8079865550975171676ull, 6787069269398339017ull}}, {{9815223602996184645ull, 951260494708950707ull, 14711517957146352500ull, 8483836586747923771ull}}, {{3828671742658921452ull, 9817909846047870000ull, 6888855714002776360ull, 5302397866717452357ull}}, {{4785839678323651814ull, 12272387307559837500ull, 13222755660930858354ull, 6627997333396815446ull}}, {{5982299597904564768ull, 6117112097595021067ull, 7305072539308797135ull, 8284996666746019308ull}}, {{1433094239476659028ull, 10740724088637970023ull, 13789042373922774017ull, 5178122916716262067ull}}, {{15626425854627987497ull, 18037591129224850432ull, 12624616948976079617ull, 6472653645895327584ull}}, {{1086288244575432755ull, 8711930856248899329ull, 15780771186220099522ull, 8090817057369159480ull}}, {{12208145198928115232ull, 10056642803582949984ull, 9862981991387562201ull, 5056760660855724675ull}}, {{15260181498660144040ull, 17182489522906075384ull, 7717041470807064847ull, 6320950826069655844ull}}, {{628482799615628434ull, 16866425885205206327ull, 9646301838508831059ull, 7901188532587069805ull}}, {{7310330777400849627ull, 8235673169039560002ull, 8334781658281713364ull, 4938242832866918628ull}}, {{18361285508605837842ull, 10294591461299450002ull, 10418477072852141705ull, 6172803541083648285ull}}, {{13728234848902521494ull, 17479925345051700407ull, 17634782359492565035ull, 7716004426354560356ull}}, {{15497675808205157790ull, 8619110331443618802ull, 1798366937828077339ull, 4822502766471600223ull}}, {{10148722723401671430ull, 6162201895877135599ull, 16083016727567260386ull, 6028128458089500278ull}}, {{8074217385824701383ull, 16926124406701195307ull, 10880398872604299674ull, 7535160572611875348ull}}, {{2740542856926744413ull, 15190513772615634971ull, 16023621332232463104ull, 4709475357882422092ull}}, {{17260736626440594228ull, 541398142059992097ull, 1582782591581027265ull, 5886844197353027616ull}}, {{7740862727768579072ull, 5288433696002378026ull, 1978478239476284081ull, 7358555246691284520ull}}, {{452706372855948032ull, 11222228138430360437ull, 2473097799345355101ull, 9198194058364105650ull}}, {{2588784492248661472ull, 9319735595732669225ull, 6157372143018234842ull, 5748871286477566031ull}}, {{7847666633738214744ull, 2426297457811060723ull, 3085029160345405649ull, 7186089108096957539ull}}, {{5197897273745380526ull, 7644557840691213808ull, 17691344505713920773ull, 8982611385121196923ull}}, {{3248685796090862829ull, 7083691659645702582ull, 8751247306857506531ull, 5614132115700748077ull}}, {{13284229281968354344ull, 4242928556129740323ull, 15550745151999271068ull, 7017665144625935096ull}}, {{11993600584033055026ull, 5303660695162175404ull, 991687366289537219ull, 8772081430782418871ull}}, {{16719372401875435200ull, 1008944925262665675ull, 7537333631572042618ull, 5482550894239011794ull}}, {{16287529483916906095ull, 10484553193433107902ull, 198295002610277464ull, 6853188617798764743ull}}, {{11136039818041356811ull, 13105691491791384878ull, 14082926808545010542ull, 8566485772248455928ull}}, {{2348338867848460103ull, 3579371163942227645ull, 8801829255340631589ull, 5354053607655284955ull}}, {{7547109603237963033ull, 9085899973355172460ull, 6390600550748401582ull, 6692567009569106194ull}}, {{9433887004047453791ull, 2134002929839189767ull, 17211622725290277786ull, 8365708761961382742ull}}, {{12813708405170740475ull, 5945437849576881508ull, 6145578184879035712ull, 5228567976225864214ull}}, {{16017135506463425594ull, 7431797311971101885ull, 16905344767953570448ull, 6535709970282330267ull}}, {{6186361327797118281ull, 9289746639963877357ull, 16519994941514575156ull, 8169637462852912834ull}}, {{6172318839086892878ull, 15029463686832199156ull, 14936682856873997376ull, 5106023414283070521ull}}, {{7715398548858616097ull, 340085534830697329ull, 4835795515810333009ull, 6382529267853838152ull}}, {{14255934204500658025ull, 5036792936965759565ull, 6044744394762916261ull, 7978161584817297690ull}}, {{11215801887026605218ull, 5453838594817293680ull, 8389651265154210567ull, 4986350990510811056ull}}, {{14019752358783256522ull, 2205612225094229196ull, 10487064081442763209ull, 6232938738138513820ull}}, {{17524690448479070652ull, 7368701299795174399ull, 13108830101803454011ull, 7791173422673142275ull}}, {{17870460557940501014ull, 2299595303158290047ull, 5887175804413464805ull, 4869483389170713922ull}}, {{17726389678998238363ull, 7486180147375250463ull, 16582341792371606814ull, 6086854236463392402ull}}, {{17546301080320410050ull, 134353147364287271ull, 11504555203609732710ull, 7608567795579240503ull}}, {{17883967202841338137ull, 13919028772384843256ull, 14107876029897164799ull, 4755354872237025314ull}}, {{3908214929842121056ull, 12787099947053666167ull, 8411473000516680191ull, 5944193590296281643ull}}, {{273582643875263416ull, 11372188915389694805ull, 5902655232218462335ull, 7430241987870352054ull}}, {{2476832161635733587ull, 14025147099759641109ull, 17524217575418702671ull, 4643901242418970033ull}}, {{7707726220472054887ull, 12919747856272163482ull, 8070213913991214627ull, 5804876553023712542ull}}, {{411285738735292801ull, 11537998801912816449ull, 864395355634242476ull, 7256095691279640678ull}}, {{5125793191846503905ull, 14422498502391020561ull, 10303866231397578903ull, 9070119614099550847ull}}, {{14732835790972534701ull, 15931590591635469706ull, 13357445422264568670ull, 5668824758812219279ull}}, {{9192672701860892568ull, 10691116202689561325ull, 12085120759403322934ull, 7086030948515274099ull}}, {{16102526895753503614ull, 4140523216507175848ull, 10494714930826765764ull, 8857538685644092624ull}}, {{10064079309845939759ull, 11811199047171760713ull, 6559196831766728602ull, 5535961678527557890ull}}, {{17191785155734812603ull, 5540626772109925083ull, 17422368076563186561ull, 6919952098159447362ull}}, {{16878045426241127849ull, 11537469483564794258ull, 12554588058849207393ull, 8649940122699309203ull}}, {{15160464409828092810ull, 293389399586914555ull, 5540774527567060669ull, 5406212576687068252ull}}, {{14338894493857728108ull, 4978422767911031098ull, 6925968159458825836ull, 6757765720858835315ull}}, {{8700246080467384327ull, 6223028459888788873ull, 4045774180896144391ull, 8447207151073544144ull}}, {{16966868846360584965ull, 10806921815071574901ull, 2528608863060090244ull, 5279504469420965090ull}}, {{7373528002668567494ull, 13508652268839468627ull, 12384133115679888613ull, 6599380586776206362ull}}, {{4605223984908321463ull, 3050757280767172072ull, 6256794357745084959ull, 8249225733470257953ull}}, {{2878264990567700915ull, 8824252328120564401ull, 15439711519659147859ull, 5155766083418911220ull}}, {{8209517256637014047ull, 6418629391723317597ull, 852895325864383208ull, 6444707604273639026ull}}, {{14873582589223655463ull, 8023286739654146996ull, 10289491194185254818ull, 8055884505342048782ull}}, {{72617081410008856ull, 9626240230711229777ull, 1819245977938396357ull, 5034927815838780489ull}}, {{4702457370189898974ull, 16644486306816425125ull, 6885743490850383350ull, 6293659769798475611ull}}, {{10489757731164761622ull, 11582235846665755598ull, 3995493345135591284ull, 7867074712248094514ull}}, {{1944412563550588110ull, 16462269441020873057ull, 7108869359137132456ull, 4916921695155059071ull}}, {{7042201722865623041ull, 2131092727566539705ull, 4274400680494027667ull, 6146152118943823839ull}}, {{13414438172009416705ull, 16498923964740338343ull, 731314832190146679ull, 7682690148679779799ull}}, {{15301552885146967297ull, 17229356505603793320ull, 7374600797759923530ull, 4801681342924862374ull}}, {{680197032724157505ull, 12313323595149965843ull, 18441623034054680221ull, 6002101678656077967ull}}, {{14685304346187360593ull, 1556596438655293591ull, 18440342774140962373ull, 7502627098320097459ull}}, {{16095844244008182227ull, 3278715783373252446ull, 9219371224624407531ull, 4689141936450060912ull}}, {{10896433268155451976ull, 17933452784498729270ull, 11524214030780509413ull, 5861427420562576140ull}}, {{4397169548339539161ull, 8581757925341247876ull, 14405267538475636767ull, 7326784275703220175ull}}, {{5496461935424423952ull, 6115511388249171941ull, 13394898404667158055ull, 9158480344629025219ull}}, {{5741131718853958922ull, 10739723645296814319ull, 6065968493703279832ull, 5724050215393140762ull}}, {{2564728630140060748ull, 13424654556621017899ull, 16805832653983875598ull, 7155062769241425952ull}}, {{17040968842957239647ull, 7557446158921496565ull, 2560546743770292882ull, 8943828461551782441ull}}, {{12956448536061968732ull, 9335089867753323257ull, 13129556760924902811ull, 5589892788469864025ull}}, {{2360502614795297203ull, 7057176316264266168ull, 2576887895873964802ull, 6987365985587330032ull}}, {{2950628268494121503ull, 18044842432185108518ull, 3221109869842456002ull, 8734207481984162540ull}}, {{15679200723090989652ull, 15889712538543080727ull, 11236565705506310809ull, 5458879676240101587ull}}, {{14987314885436349160ull, 6027082617896687197ull, 9434021113455500608ull, 6823599595300126984ull}}, {{4899085551513272738ull, 7533853272370858997ull, 11792526391819375760ull, 8529499494125158730ull}}, {{5367771478909489414ull, 4708658295231786873ull, 11982015013314497754ull, 5330937183828224206ull}}, {{11321400367064249671ull, 15109194905894509399ull, 5754146729788346384ull, 6663671479785280258ull}}, {{9540064440402924185ull, 439749558658585133ull, 16416055449090208789ull, 8329589349731600322ull}}, {{8268383284465521568ull, 2580686483375309660ull, 14871720674108768397ull, 5205993343582250201ull}}, {{10335479105581901959ull, 7837544122646524979ull, 4754592787353796784ull, 6507491679477812752ull}}, {{8307662863549989545ull, 9796930153308156224ull, 5943240984192245980ull, 8134364599347265940ull}}, {{5192289289718743466ull, 15346453382672373448ull, 12937897651974929545ull, 5083977874592041212ull}}, {{6490361612148429332ull, 5348008673058303098ull, 16172372064968661932ull, 6354972343240051515ull}}, {{17336324052040312473ull, 6685010841322878872ull, 15603779062783439511ull, 7943715429050064394ull}}, {{10835202532525195296ull, 11095660803467881151ull, 14364047932667037598ull, 4964822143156290246ull}}, {{8932317147229106216ull, 4646203967480075631ull, 8731687878979021190ull, 6206027678945362808ull}}, {{6553710415608994866ull, 15031126996204870347ull, 10914609848723776487ull, 7757534598681703510ull}}, {{1790226000541927839ull, 16311983400269125823ull, 2209945137024972400ull, 4848459124176064694ull}}, {{16072840555959573511ull, 1943235176626855662ull, 11985803458135991309ull, 6060573905220080867ull}}, {{10867678658094691080ull, 7040729989210957482ull, 10370568304242601232ull, 7575717381525101084ull}}, {{11403985179736569829ull, 4400456243256848426ull, 15704977227006401578ull, 4734823363453188177ull}}, {{5031609437815936479ull, 14723942340925836341ull, 5796163478475838260ull, 5918529204316485222ull}}, {{10901197815697308502ull, 18404927926157295426ull, 16468576384949573633ull, 7398161505395606527ull}}, {{11424934653238205718ull, 4585550926207227785ull, 17210389268234565377ull, 4623850940872254079ull}}, {{446110261265593435ull, 10343624676186422636ull, 16901300566865818817ull, 5779813676090317599ull}}, {{557637826581991794ull, 17541216863660416199ull, 16514939690154885617ull, 7224767095112896999ull}}, {{14532105338509653455ull, 8091463024293356536ull, 16031988594266219118ull, 9030958868891121249ull}}, {{9082565836568533409ull, 445478371755959931ull, 3102463843775305093ull, 5644349293056950781ull}}, {{6741521277283278858ull, 5168533983122337818ull, 8489765823146519270ull, 7055436616321188476ull}}, {{17650273633458874380ull, 15684039515757698080ull, 10612207278933149087ull, 8819295770401485595ull}}, {{11031421020911796488ull, 16720053724989643156ull, 4326786540119524227ull, 5512059856500928497ull}}, {{13789276276139745609ull, 16288381137809666041ull, 10020169193576793188ull, 6890074820626160621ull}}, {{3401537289892518300ull, 1913732348552530936ull, 17136897510398379390ull, 8612593525782700776ull}}, {{2125960806182823937ull, 15031140773127495547ull, 10710560943998987118ull, 5382870953614187985ull}}, {{16492509063010693634ull, 9565553929554593625ull, 17999887198426121802ull, 6728588692017734981ull}}, {{6780578273481203330ull, 2733570375088466224ull, 8664800942750488541ull, 8410735865022168727ull}}, {{4237861420925752081ull, 4014324493643985342ull, 12333029616860137194ull, 5256709915638855454ull}}, {{14520698813011965910ull, 14241277653909757485ull, 6192914984220395684ull, 6570887394548569318ull}}, {{4315815460982793675ull, 17801597067387196857ull, 16964515767130270413ull, 8213609243185711647ull}}, {{14226599709182715807ull, 13431841176330691987ull, 17520351382097500864ull, 5133505776991069779ull}}, {{13171563618051006855ull, 16789801470413364984ull, 17288753209194488176ull, 6416882221238837224ull}}, {{16464454522563758568ull, 2540507764307154614ull, 3164197437783558605ull, 8021102776548546531ull}}, {{5678598058174961201ull, 3893660361905665586ull, 18118524463110581792ull, 5013189235342841581ull}}, {{16321619609573477309ull, 4867075452382081982ull, 8813097523606063528ull, 6266486544178551977ull}}, {{11178652475112070829ull, 6083844315477602478ull, 15628057922934967314ull, 7833108180223189971ull}}, {{2374971778517656364ull, 8414088715600889453ull, 7461693192620660619ull, 4895692612639493732ull}}, {{7580400741574458359ull, 5905924876073723912ull, 9327116490775825774ull, 6119615765799367165ull}}, {{9475500926968072949ull, 16605778131946930698ull, 16270581631897170121ull, 7649519707249208956ull}}, {{10533874097782433497ull, 3461082304825749830ull, 945741483080955518ull, 4780949817030755598ull}}, {{3943970585373266063ull, 13549724917886963096ull, 10405548890705970205ull, 5976187271288444497ull}}, {{4929963231716582579ull, 3102098092076540158ull, 17618622131809850661ull, 7470234089110555621ull}}, {{16916285075105027824ull, 4244654316761531550ull, 13317481841594850615ull, 4668896305694097263ull}}, {{11921984307026508972ull, 694131877524526534ull, 12035166283566175365ull, 5836120382117621579ull}}, {{5679108346928360407ull, 5479350865333046072ull, 10432271836030331302ull, 7295150477647026974ull}}, {{7098885433660450508ull, 16072560618521083398ull, 3816967758183138319ull, 9118938097058783718ull}}, {{18271861451319945280ull, 16962879414216758979ull, 16220662904146625161ull, 5699336310661739823ull}}, {{18228140795722543696ull, 7368541212488785012ull, 15664142611755893548ull, 7124170388327174779ull}}, {{4338431920943628004ull, 9210676515610981266ull, 14968492246267479031ull, 8905212985408968474ull}}, {{7323205969017155406ull, 12674201849897945147ull, 13966993672344562298ull, 5565758115880605296ull}}, {{4542321442844056354ull, 6619380275517655626ull, 17458742090430702873ull, 6957197644850756620ull}}, {{14901273840409846250ull, 12885911362824457436ull, 3376683539328826975ull, 8696497056063445776ull}}, {{89924113401378099ull, 14971223629406367754ull, 2110427212080516859ull, 5435310660039653610ull}}, {{9335777178606498431ull, 14102343518330571788ull, 11861406051955421882ull, 6794138325049567012ull}}, {{11669721473258123039ull, 8404557361058438927ull, 14826757564944277353ull, 8492672906311958765ull}}, {{14211104948427408755ull, 16782063396729994089ull, 11572566487303867297ull, 5307920566444974228ull}}, {{3928823130252097232ull, 7142521190630328900ull, 14465708109129834122ull, 6634900708056217785ull}}, {{4911028912815121540ull, 18151523525142686933ull, 4247077081130128940ull, 8293625885070272232ull}}, {{5375236079723144915ull, 2121330166359403525ull, 2654423175706330588ull, 5183516178168920145ull}}, {{11330731118081319047ull, 2651662707949254406ull, 7929714988060301139ull, 6479395222711150181ull}}, {{4940041860746873001ull, 17149636440218731720ull, 14523829753502764327ull, 8099244028388937726ull}}, {{3087526162966795626ull, 17636051802777789181ull, 4465707577511839800ull, 5062027517743086079ull}}, {{8471093722135882436ull, 3598320679762684860ull, 970448453462411847ull, 6327534397178857599ull}}, {{10588867152669853045ull, 18332958904985519787ull, 15048118622110178520ull, 7909417996473571998ull}}, {{4312198961204964201ull, 11458099315615949867ull, 4793388120391473671ull, 4943386247795982499ull}}, {{778562683078817348ull, 9710938126092549430ull, 1380049132061954185ull, 6179232809744978124ull}}, {{10196575390703297492ull, 16750358676043074691ull, 1725061415077442731ull, 7724041012181222655ull}}, {{4067016609975866981ull, 8163131163313227730ull, 7995692412064483563ull, 4827525632613264159ull}}, {{14307142799324609534ull, 5592227935714146758ull, 5382929496653216550ull, 6034407040766580199ull}}, {{8660556462300986109ull, 16213656956497459256ull, 2116975852389132783ull, 7543008800958225249ull}}, {{5412847788938116319ull, 17051064625451993891ull, 12852324953811677749ull, 4714380500598890780ull}}, {{2154373717745257494ull, 7478772726532828652ull, 16065406192264597187ull, 5892975625748613475ull}}, {{2692967147181571867ull, 4736779889738647911ull, 15470071721903358580ull, 7366219532185766844ull}}, {{17201266989259128546ull, 5920974862173309888ull, 890845578669646609ull, 9207774415232208556ull}}, {{10750791868286955342ull, 15229824334926788440ull, 9780150523523304938ull, 5754859009520130347ull}}, {{13438489835358694177ull, 9813908381803709742ull, 7613502135976743269ull, 7193573761900162934ull}}, {{7574740257343591913ull, 16879071495682025082ull, 293505633116153278ull, 8991967202375203668ull}}, {{9345898679267132850ull, 5937733666373877772ull, 9406813057552371607ull, 5619979501484502292ull}}, {{11682373349083916062ull, 2810481064539959311ull, 11758516321940464509ull, 7024974376855627865ull}}, {{9991280667927507173ull, 8124787349102337043ull, 863087347143416924ull, 8781217971069534832ull}}, {{3938707408240998032ull, 14301364130043736460ull, 539429591964635577ull, 5488261231918459270ull}}, {{4923384260301247539ull, 4041647107272506863ull, 9897659026810570280ull, 6860326539898074087ull}}, {{1542544306949171520ull, 5052058884090633579ull, 7760387765085824946ull, 8575408174872592609ull}}, {{17104991256339089864ull, 7769222820984033890ull, 16379457399247110351ull, 5359630109295370380ull}}, {{12157867033569086522ull, 5099842507802654459ull, 2027577675349336323ull, 6699537636619212976ull}}, {{10585647773533970249ull, 1763117116325930170ull, 2534472094186670404ull, 8374422045774016220ull}}, {{11227715876886119310ull, 10325320234558482164ull, 10807417095721444810ull, 5234013778608760137ull}}, {{14034644846107649137ull, 3683278256343326897ull, 18120957388079193917ull, 6542517223260950171ull}}, {{3708248002352397709ull, 9215783838856546526ull, 18039510716671604492ull, 8178146529076187714ull}}, {{16152713056752412280ull, 14983236936140117386ull, 15886380216347140711ull, 5111341580672617321ull}}, {{10967519284085739542ull, 14117360151747758829ull, 6022917215151762177ull, 6389176975840771652ull}}, {{18321085123534562332ull, 3811642134402534824ull, 7528646518939702722ull, 7986471219800964565ull}}, {{11450678202209101457ull, 6993962352428972169ull, 7011247083551008153ull, 4991544512375602853ull}}, {{478289697479213110ull, 13354138958963603116ull, 13375744872866148095ull, 6239430640469503566ull}}, {{597862121849016387ull, 12080987680277115991ull, 7496309054227909311ull, 7799288300586879458ull}}, {{7291192853796717098ull, 14468146327814279350ull, 9296879177319831223ull, 4874555187866799661ull}}, {{18337363104100672180ull, 13473496891340461283ull, 16232784990077176933ull, 6093193984833499576ull}}, {{18310017861698452321ull, 3006813058893412892ull, 1844237163886919551ull, 7616492481041874471ull}}, {{2220389126706756893ull, 8796787189449464914ull, 8070177255070406575ull, 4760307800651171544ull}}, {{11998858445238221924ull, 6384297968384443238ull, 10087721568838008219ull, 5950384750813964430ull}}, {{5775201019693001597ull, 3368686442053166144ull, 3386279924192734466ull, 7437980938517455538ull}}, {{3609500637308125998ull, 6717115044710616744ull, 6728110971047846945ull, 4648738086573409711ull}}, {{4511875796635157498ull, 13008079824315658834ull, 3798452695382420777ull, 5810922608216762139ull}}, {{14863216782648722680ull, 2425041725112409830ull, 136379850800638068ull, 7263653260270952674ull}}, {{9355648941456127542ull, 3031302156390512288ull, 9393846850355573393ull, 9079566575338690842ull}}, {{5847280588410079714ull, 13423778893812539940ull, 10482840299899621274ull, 5674729109586681776ull}}, {{7309100735512599642ull, 7556351580410899117ull, 13103550374874526593ull, 7093411386983352220ull}}, {{13748061937818137457ull, 14057125493941011800ull, 16379437968593158241ull, 8866764233729190275ull}}, {{8592538711136335911ull, 1868174406072050519ull, 7931305721157029949ull, 5541727646080743922ull}}, {{6128987370493031984ull, 6946904026017451053ull, 690760114591511628ull, 6927159557600929903ull}}, {{12272920231543677884ull, 8683630032521813816ull, 14698508198521553247ull, 8658949447001162378ull}}, {{7670575144714798678ull, 12344797797967215491ull, 13798253642503358683ull, 5411843404375726486ull}}, {{4976532912466110443ull, 10819311229031631460ull, 8024445016274422546ull, 6764804255469658108ull}}, {{6220666140582638054ull, 4300766999434763517ull, 10030556270343028183ull, 8456005319337072635ull}}, {{6193759347077842736ull, 9605508402287809054ull, 3963254659750698662ull, 5285003324585670397ull}}, {{16965571220702079228ull, 2783513466004985509ull, 9565754343115761232ull, 6606254155732087996ull}}, {{7371905970595435322ull, 3479391832506231887ull, 11957192928894701540ull, 8257817694665109995ull}}, {{11524970259263228933ull, 11397991932171170737ull, 5167402571345494510ull, 5161136059165693747ull}}, {{571154768796872454ull, 5024117878359187614ull, 1847567195754480234ull, 6451420073957117184ull}}, {{9937315497850866375ull, 15503519384803760325ull, 2309458994693100292ull, 8064275092446396480ull}}, {{8516665195370485437ull, 466327578647574395ull, 1443411871683187683ull, 5040171932778997800ull}}, {{6034145475785718892ull, 14417967528591631706ull, 1804264839603984603ull, 6300214915973747250ull}}, {{16766053881586924422ull, 13410773392312151728ull, 11478703086359756562ull, 7875268644967184062ull}}, {{10478783675991827764ull, 12993419388622482734ull, 2562503410547459947ull, 4922042903104490039ull}}, {{3875107558135008897ull, 11630088217350715514ull, 17038187318466488646ull, 6152553628880612548ull}}, {{14067256484523536929ull, 5314238234833618584ull, 2850990074373559192ull, 7690692036100765686ull}}, {{8792035302827210581ull, 3321398896771011615ull, 15616926851765638207ull, 4806682522562978553ull}}, {{6378358110106625322ull, 17986806676245928231ull, 5686100509424884046ull, 6008353153203723192ull}}, {{3361261619205893748ull, 13260136308452634481ull, 7107625636781105058ull, 7510441441504653990ull}}, {{13630003558072153353ull, 12899271211210284454ull, 18277324078270354373ull, 4694025900940408743ull}}, {{7814132410735415883ull, 2289030958730691856ull, 18234969079410555063ull, 5867532376175510929ull}}, {{9767665513419269854ull, 16696346753695528532ull, 8958653293981030116ull, 7334415470219388662ull}}, {{12209581891774087317ull, 2423689368409859049ull, 1974944580621511838ull, 9168019337774235828ull}}, {{713459654717722717ull, 15349863910538325618ull, 10457712399743220706ull, 5730012086108897392ull}}, {{10115196605251929205ull, 9963957851318131214ull, 13072140499679025883ull, 7162515107636121740ull}}, {{3420623719710135698ull, 7843261295720276114ull, 16340175624598782354ull, 8953143884545152175ull}}, {{6749575843246222715ull, 9513724328252560475ull, 17130138793015320827ull, 5595714927840720109ull}}, {{3825283785630390490ull, 7280469391888312690ull, 7577615435986987322ull, 6994643659800900137ull}}, {{14004976768892763920ull, 18323958776715166670ull, 14083705313411122056ull, 8743304574751125171ull}}, {{4141424462130589546ull, 11452474235446979169ull, 6496472811668257333ull, 5464565359219453232ull}}, {{9788466596090624837ull, 480534739026560249ull, 8120591014585321667ull, 6830706699024316540ull}}, {{16847269263540668950ull, 14435726479065364023ull, 10150738768231652083ull, 8538383373780395675ull}}, {{17447072317353999950ull, 6716486040202158562ull, 4038368720931088600ull, 5336489608612747297ull}}, {{12585468359837724129ull, 8395607550252698203ull, 9659646919591248654ull, 6670612010765934121ull}}, {{11120149431369767257ull, 1271137400961096946ull, 16686244667916448722ull, 8338265013457417651ull}}, {{11561779413033492440ull, 5406146894028073495ull, 8123059908234086499ull, 5211415633410886032ull}}, {{9840538247864477646ull, 2145997599107703965ull, 10153824885292608124ull, 6514269541763607540ull}}, {{16912358828257984961ull, 2682496998884629956ull, 12692281106615760155ull, 8142836927204509425ull}}, {{1346852230806464793ull, 17817461688798751387ull, 1015146663993768240ull, 5089273079502818391ull}}, {{15518623343790244703ull, 3825083037288887617ull, 15103991385274374013ull, 6361591349378522988ull}}, {{5563221124455642167ull, 9393039815038497426ull, 433245157883415900ull, 7951989186723153736ull}}, {{8088699221212164258ull, 15094021921253836699ull, 270778223677134937ull, 4969993241701971085ull}}, {{5499188008087817419ull, 5032469346285132162ull, 4950158798023806576ull, 6212491552127463856ull}}, {{16097357046964547581ull, 6290586682856415202ull, 6187698497529758220ull, 7765614440159329820ull}}, {{14672534172780230143ull, 13154988713640035309ull, 13090683597810874695ull, 4853509025099581137ull}}, {{4505609660693123966ull, 11832049873622656233ull, 2528296441981429657ull, 6066886281374476422ull}}, {{10243698094293792862ull, 955004286746156579ull, 12383742589331562880ull, 7583607851718095527ull}}, {{4096468299719926587ull, 596877679216347862ull, 14657368145973308656ull, 4739754907323809704ull}}, {{14343957411504684041ull, 746097099020434827ull, 18321710182466635820ull, 5924693634154762130ull}}, {{13318260745953467147ull, 932621373775543534ull, 13678765691228518967ull, 7405867042693452663ull}}, {{3712226947793529063ull, 7500417386250796565ull, 15466757584658906210ull, 4628666901683407914ull}}, {{9251969703169299233ull, 152149695958719898ull, 10110074943968856955ull, 5785833627104259893ull}}, {{2341590092106848233ull, 14025245175230563585ull, 17249279698388459097ull, 7232292033880324866ull}}, {{7538673633560948195ull, 3696498413756040769ull, 12338227586130798064ull, 9040365042350406083ull}}, {{16240886067044062382ull, 2310311508597525480ull, 5405549232118054838ull, 5650228151469003802ull}}, {{1854363510095526362ull, 12111261422601682659ull, 15980308577002344355ull, 7062785189336254752ull}}, {{16153012442901571664ull, 10527390759824715419ull, 1528641647543378828ull, 8828481486670318441ull}}, {{7789789767599788338ull, 15802991261745222945ull, 12484616075783081527ull, 5517800929168949025ull}}, {{14348923227927123327ull, 15142053058754140777ull, 1770712039446688197ull, 6897251161461186282ull}}, {{4101095979626740446ull, 5092508268160512260ull, 11436762086163136055ull, 8621563951826482852ull}}, {{11786557024121488587ull, 10100346695241402018ull, 16371348340706735842ull, 5388477469891551782ull}}, {{5509824243297084926ull, 3402061332196976715ull, 11240813389028643995ull, 6735596837364439728ull}}, {{2275594285693968253ull, 18087634720528384606ull, 14051016736285804993ull, 8419496046705549660ull}}, {{15257304483840893870ull, 4387242672689158522ull, 18005257497033403929ull, 5262185029190968537ull}}, {{9848258567946341530ull, 10095739359288836057ull, 8671513816009591199ull, 6577731286488710672ull}}, {{16922009228360314816ull, 8007988180683657167ull, 10839392270011988999ull, 8222164108110888340ull}}, {{17493784795366278616ull, 11922521640568367585ull, 15997992205612268932ull, 5138852567569305212ull}}, {{8032172938925684558ull, 14903152050710459482ull, 1550746183305784549ull, 6423565709461631516ull}}, {{816844136802329889ull, 4793882008105910641ull, 1938432729132230687ull, 8029457136827039395ull}}, {{12039742631569925941ull, 9913705282707276006ull, 17352421520203501843ull, 5018410710516899621ull}}, {{5826306252607631618ull, 7780445584956707104ull, 7855468844972213592ull, 6273013388146124527ull}}, {{7282882815759539523ull, 9725556981195883880ull, 5207650037787879086ull, 7841266735182655659ull}}, {{4551801759849712202ull, 1466787094820039521ull, 948938264403730477ull, 4900791709489159787ull}}, {{10301438218239528156ull, 6445169886952437305ull, 15021230885786826808ull, 6125989636861449733ull}}, {{17488483791226798099ull, 8056462358690546631ull, 4941480551951369798ull, 7657487046076812167ull}}, {{17847831397157830668ull, 423602955754203740ull, 10005954372610687980ull, 4785929403798007604ull}}, {{3863045172737736719ull, 529503694692754676ull, 12507442965763359975ull, 5982411754747509505ull}}, {{4828806465922170899ull, 14496937673648107057ull, 1799245651922036256ull, 7478014693434386882ull}}, {{14547219087269826572ull, 9060586046030066910ull, 5736214550878660564ull, 4673759183396491801ull}}, {{8960651822232507407ull, 11325732557537583638ull, 11781954207025713609ull, 5842198979245614751ull}}, {{1977442740935858450ull, 322107641639815836ull, 10115756740354754108ull, 7302748724057018439ull}}, {{2471803426169823063ull, 402634552049769795ull, 8033009907016054731ull, 9128435905071273049ull}}, {{17685778205851997078ull, 16392547659526963785ull, 16549846237953503966ull, 5705272440669545655ull}}, {{8272164702032832636ull, 11267312537553928924ull, 16075621779014492054ull, 7131590550836932069ull}}, {{10340205877541040795ull, 4860768635087635347ull, 6259469168485951356ull, 8914488188546165087ull}}, {{4156785664249456545ull, 12261352433784547900ull, 10829697257944801453ull, 5571555117841353179ull}}, {{5195982080311820681ull, 1491632486948521163ull, 8925435554003613913ull, 6964443897301691474ull}}, {{1883291581962387947ull, 6476226627113039358ull, 1933422405649741583ull, 8705554871627114343ull}}, {{15012115294008656179ull, 10965170669586731454ull, 8125918031172170345ull, 5440971794766946464ull}}, {{9541772080656044416ull, 18318149355410802222ull, 10157397538965212931ull, 6801214743458683080ull}}, {{2703843063965279712ull, 18286000675836114874ull, 12696746923706516164ull, 8501518429323353850ull}}, {{6301587933405687724ull, 2205378385542795988ull, 12547152845743960507ull, 5313449018327096156ull}}, {{7876984916757109655ull, 16591781037210658697ull, 15683941057179950633ull, 6641811272908870195ull}}, {{14457917164373774972ull, 6904668241231159659ull, 14993240303047550388ull, 8302264091136087744ull}}, {{6730355218519915406ull, 13538789687624250595ull, 9370775189404718992ull, 5188915056960054840ull}}, {{3801258004722506353ull, 16923487109530313244ull, 11713468986755898740ull, 6486143821200068550ull}}, {{4751572505903132941ull, 2707614813203339939ull, 5418464196590097618ull, 8107679776500085688ull}}, {{663889806975764137ull, 6303945276679475366ull, 3386540122868811011ull, 5067299860312553555ull}}, {{10053234295574480979ull, 3268245577421956303ull, 18068233208868177476ull, 6334124825390691943ull}}, {{7954856851040713319ull, 4085306971777445379ull, 17973605492657833941ull, 7917656031738364929ull}}, {{2665942522686751873ull, 4859159866574597314ull, 4315974405270064357ull, 4948535019836478081ull}}, {{12555800190213215649ull, 10685635851645634546ull, 10006654025014968350ull, 6185668774795597601ull}}, {{6471378200911743753ull, 4133672777702267375ull, 17120003549696098342ull, 7732085968494497001ull}}, {{10962140403210921702ull, 16418603541346080821ull, 3782473190918979607ull, 4832553730309060626ull}}, {{18314361522441040031ull, 15911568408255213122ull, 13951463525503500317ull, 6040692162886325782ull}}, {{13669579866196524231ull, 6054402455036852691ull, 8215957370024599589ull, 7550865203607907228ull}}, {{6237644407159133692ull, 6089844543611726884ull, 14358345393120150551ull, 4719290752254942017ull}}, {{7797055508948917115ull, 3000619661087270701ull, 4112873686118024477ull, 5899113440318677522ull}}, {{14358005404613534298ull, 8362460594786476280ull, 14364464144502306404ull, 7373891800398346902ull}}, {{17947506755766917872ull, 10453075743483095350ull, 8732208143773107197ull, 9217364750497933628ull}}, {{6605505703926935766ull, 8839015348890628546ull, 14681002126712967806ull, 5760852969061208517ull}}, {{17480254166763445516ull, 1825397149258509874ull, 4516194603109046046ull, 7201066211326510647ull}}, {{12626945671599531087ull, 11505118473427913151ull, 1033557235458919653ull, 9001332764158138309ull}}, {{14809370072390788785ull, 9496542055106139671ull, 2951816281375518735ull, 5625832977598836443ull}}, {{13900026572061098078ull, 7258991550455286685ull, 17524828407001562131ull, 7032291221998545553ull}}, {{3539975159794208885ull, 4462053419641720453ull, 8070977453469788952ull, 8790364027498181942ull}}, {{4518327484085074505ull, 2788783387276075283ull, 432674889991230191ull, 5493977517186363714ull}}, {{1036223336678955227ull, 17321037289377257816ull, 9764215649343813546ull, 6867471896482954642ull}}, {{1295279170848694034ull, 12427924574866796462ull, 2981897524824991125ull, 8584339870603693303ull}}, {{14644607537062597484ull, 10073295868505441740ull, 8781214980656701309ull, 5365212419127308314ull}}, {{18305759421328246854ull, 17203305854059190079ull, 1753146688966100828ull, 6706515523909135393ull}}, {{18270513258232920664ull, 3057388243864435983ull, 6803119379635013940ull, 8383144404886419241ull}}, {{18336599814036657271ull, 11134239689270048297ull, 15781164658340353472ull, 5239465253054012025ull}}, {{9085691712263657877ull, 13917799611587560372ull, 5891397767643278128ull, 6549331566317515032ull}}, {{11357114640329572346ull, 17397249514484450465ull, 7364247209554097660ull, 8186664457896893790ull}}, {{180667622564900860ull, 1649908909698005733ull, 18437712561253474750ull, 5116665286185558618ull}}, {{4837520546633513979ull, 11285758173977282974ull, 13823768664712067629ull, 6395831607731948273ull}}, {{15270272720146668282ull, 272139662189440005ull, 3444652775607920825ull, 7994789509664935342ull}}, {{11849763459305361628ull, 11699302334936869763ull, 15987966040037114227ull, 4996743443540584588ull}}, {{10200518305704314131ull, 10012441900243699300ull, 1538213476336841168ull, 6245929304425730736ull}}, {{12750647882130392664ull, 12515552375304624125ull, 1922766845421051460ull, 7807411630532163420ull}}, {{10274997935545189367ull, 17045592271420165886ull, 10425101315242932970ull, 4879632269082602137ull}}, {{3620375382576710901ull, 12083618302420431550ull, 17643062662481054117ull, 6099540336353252671ull}}, {{13748841265075664434ull, 1269464822743375725ull, 17442142309673929743ull, 7624425420441565839ull}}, {{10898868799885984223ull, 7710944541855691684ull, 17818867971187287945ull, 4765265887775978649ull}}, {{13623585999857480279ull, 14250366695747002509ull, 8438526908701946219ull, 5956582359719973312ull}}, {{3194424444539686637ull, 13201272351256365233ull, 10548158635877432774ull, 7445727949649966640ull}}, {{13525730323905773908ull, 3639109201107840366ull, 6592599147423395484ull, 4653579968531229150ull}}, {{7683790868027441577ull, 4548886501384800458ull, 17464120971134020163ull, 5816974960664036437ull}}, {{381366548179526163ull, 1074422108303612669ull, 7995093158635361492ull, 7271218700830045547ull}}, {{5088394203651795608ull, 1343027635379515836ull, 5382180429866813961ull, 9089023376037556934ull}}, {{12403618414137148063ull, 12368607318180667157ull, 17198920823948922437ull, 5680639610023473083ull}}, {{1669464962389271367ull, 1625701092443670235ull, 16886965011508765143ull, 7100799512529341354ull}}, {{15921889258268752920ull, 15867184420836751505ull, 11885334227531180620ull, 8875999390661676693ull}}, {{3033651758776888719ull, 693618226168193883ull, 9734176901420681840ull, 5547499619163547933ull}}, {{17627122753753274611ull, 867022782710242353ull, 16779407145203240204ull, 6934374523954434916ull}}, {{8198845386909429552ull, 1083778478387802942ull, 2527514857794498639ull, 8667968154943043646ull}}, {{512592348391005566ull, 7594890576633458695ull, 15414754841403725361ull, 5417480096839402278ull}}, {{14475798490770920669ull, 14105299239219211272ull, 10045071514899880893ull, 6771850121049252848ull}}, {{18094748113463650837ull, 3796565993741850378ull, 12556339393624851117ull, 8464812651311566060ull}}, {{15920903589342169677ull, 4678696755302350438ull, 17071084157870307756ull, 5290507907069728787ull}}, {{10677757449822936288ull, 5848370944127938048ull, 16727169178910496791ull, 6613134883837160984ull}}, {{13347196812278670360ull, 2698777661732534656ull, 2462217399928569373ull, 8266418604796451231ull}}, {{8341998007674168975ull, 3992579047796528112ull, 8456414902596437714ull, 5166511627997782019ull}}, {{10427497509592711219ull, 14214095846600435948ull, 5958832609818159238ull, 6458139534997227524ull}}, {{13034371886990889024ull, 8544247771395769127ull, 7448540762272699048ull, 8072674418746534405ull}}, {{15064011457010387496ull, 5340154857122355704ull, 6961180985634130857ull, 5045421511716584003ull}}, {{383270247553432754ull, 11286879589830332535ull, 4089790213615275667ull, 6306776889645730004ull}}, {{14314145864723954654ull, 9496913468860527764ull, 5112237767019094584ull, 7883471112057162505ull}}, {{18169713202307247467ull, 5935570918037829852ull, 14724363650455403875ull, 4927169445035726565ull}}, {{4265397429174507718ull, 2807777629119899412ull, 4570396507787091132ull, 6158961806294658207ull}}, {{5331746786468134647ull, 3509722036399874265ull, 1101309616306476011ull, 7698702257868322759ull}}, {{14861556787611053915ull, 18334477337245779079ull, 7605847537832629362ull, 4811688911167701724ull}}, {{13965259966086429489ull, 13694724634702448041ull, 9507309422290786703ull, 6014611138959627155ull}}, {{3621516902325873149ull, 12506719774950672148ull, 7272450759436095475ull, 7518263923699533944ull}}, {{11486820100808446526ull, 5510856850130476140ull, 4545281724647559672ull, 4698914952312208715ull}}, {{14358525126010558158ull, 6888571062663095175ull, 1069916137382061686ull, 5873643690390260894ull}}, {{13336470389085809793ull, 17834085865183644777ull, 10560767208582352915ull, 7342054612987826117ull}}, {{2835529931075098529ull, 17680921313052168068ull, 17812645029155329048ull, 9177568266234782646ull}}, {{10995578243776712389ull, 11050575820657605042ull, 6521217124794692751ull, 5735980166396739154ull}}, {{4521100767866114678ull, 9201533757394618399ull, 17374893442848141747ull, 7169975207995923942ull}}, {{1039689941405255444ull, 6890231178315885095ull, 12495244766705401376ull, 8962469009994904928ull}}, {{7567335241019366509ull, 4306394486447428184ull, 7809527979190875860ull, 5601543131246815580ull}}, {{9459169051274208136ull, 5382993108059285230ull, 9761909973988594825ull, 7001928914058519475ull}}, {{2600589277237984361ull, 11340427403501494442ull, 7590701449058355627ull, 8752411142573149344ull}}, {{6237054316701128130ull, 4781924117974740074ull, 4744188405661472267ull, 5470256964108218340ull}}, {{17019689932731185970ull, 1365719129041037188ull, 5930235507076840334ull, 6837821205135272925ull}}, {{2827868342204430847ull, 10930520948156072294ull, 12024480402273438321ull, 8547276506419091156ull}}, {{15602475769159932991ull, 18360790638666014943ull, 16738672288275674758ull, 5342047816511931972ull}}, {{14891408693022528335ull, 13727616261477742871ull, 2476596286635041832ull, 6677559770639914966ull}}, {{14002574847850772515ull, 17159520326847178589ull, 12319117395148578098ull, 8346949713299893707ull}}, {{11057452289120426774ull, 15336386222706874522ull, 5393605362754167359ull, 5216843570812433567ull}}, {{4598443324545757659ull, 14558796759956205249ull, 2130320685015321295ull, 6521054463515541959ull}}, {{10359740174109584978ull, 13586809931517868657ull, 16497958911551315331ull, 8151318079394427448ull}}, {{18004052654886960371ull, 6185913197984973958ull, 10311224319719572082ull, 5094573799621517155ull}}, {{13281693781753924656ull, 16955763534335993256ull, 8277344381222077198ull, 6368217249526896444ull}}, {{16602117227192405820ull, 11971332381065215762ull, 10346680476527596498ull, 7960271561908620555ull}}, {{14988009285422641542ull, 12093768756593147755ull, 4160832288616053859ull, 4975169726192887847ull}}, {{14123325588350914023ull, 10505524927314046790ull, 589354342342679420ull, 6218962157741109809ull}}, {{8430784948583866721ull, 13131906159142558488ull, 5348378946355737179ull, 7773702697176387261ull}}, {{5269240592864916701ull, 5901598340250405103ull, 5648579850686029689ull, 4858564185735242038ull}}, {{1974864722653757972ull, 11988683943740394283ull, 16284096850212312919ull, 6073205232169052547ull}}, {{16303638958599361176ull, 10374168911248104949ull, 15743435044338003245ull, 7591506540211315684ull}}, {{12495617358338294687ull, 8789698578743759545ull, 616274865856476220ull, 4744691587632072303ull}}, {{1784463642640704647ull, 10987123223429699432ull, 14605401637602758987ull, 5930864484540090378ull}}, {{2230579553300880809ull, 9122218010859736386ull, 9033380010148672926ull, 7413580605675112973ull}}, {{6005798239240438410ull, 1089700238359947337ull, 7951705515556614531ull, 4633487878546945608ull}}, {{12118933817477935916ull, 15197183353232097883ull, 9939631894445768163ull, 5791859848183682010ull}}, {{10536981253420031991ull, 14384793173112734450ull, 3201167831202434396ull, 7239824810229602513ull}}, {{3947854529920264181ull, 17980991466390918063ull, 8613145807430430899ull, 9049781012787003141ull}}, {{9384938108841246969ull, 8932276657280629837ull, 7689059138857713264ull, 5656113132991876963ull}}, {{16342858654478946615ull, 11165345821600787296ull, 4999637905144753676ull, 7070141416239846204ull}}, {{1981829244389131653ull, 13956682277000984121ull, 6249547381430942095ull, 8837676770299807755ull}}, {{12767858323811677043ull, 15640455450766696931ull, 1600124104180644857ull, 5523547981437379847ull}}, {{11348136886337208400ull, 5715511258176207452ull, 15835213185507969784ull, 6904434976796724808ull}}, {{14185171107921510500ull, 7144389072720259315ull, 1347272408175410614ull, 8630543720995906011ull}}, {{6559888933237250111ull, 18300301225732325784ull, 16982946319605489297ull, 5394089825622441256ull}}, {{8199861166546562638ull, 9040318476883243518ull, 2781938825797310006ull, 6742612282028051571ull}}, {{1026454421328427489ull, 2077026059249278590ull, 17312481587528801220ull, 8428265352535064463ull}}, {{14476592068612430893ull, 10521513323885574926ull, 17737830019846582618ull, 5267665845334415289ull}}, {{8872368048910762808ull, 3928519618002192850ull, 8337229469526064561ull, 6584582306668019112ull}}, {{1867088024283677702ull, 9522335540930128967ull, 10421536836907580701ull, 8230727883335023890ull}}, {{8084459042818380420ull, 8257302722295024556ull, 11125146541494625842ull, 5144204927084389931ull}}, {{10105573803522975525ull, 1098256366014004887ull, 9294747158440894399ull, 6430256158855487414ull}}, {{8020281235976331502ull, 15207878512799669821ull, 2395061911196342190ull, 8037820198569359268ull}}, {{7318518781698901141ull, 4893238052072405734ull, 10720285731352489677ull, 5023637624105849542ull}}, {{18371520513978402234ull, 10728233583517895071ull, 4176985127335836288ull, 6279547030132311928ull}}, {{18352714624045614888ull, 13410291979397368839ull, 5221231409169795360ull, 7849433787665389910ull}}, {{18387975667669591161ull, 8381432487123355524ull, 17098327686013285812ull, 4905896117290868693ull}}, {{4538225510877437336ull, 10476790608904194406ull, 7537851552234443553ull, 6132370146613585867ull}}, {{14896153925451572478ull, 17707674279557630911ull, 4810628421865666537ull, 7665462683266982334ull}}, {{16227625231048314655ull, 4149767397082437463ull, 16841700818948205298ull, 4790914177041863958ull}}, {{15672845520383005414ull, 14410581283207822637ull, 11828753986830480814ull, 5988642721302329948ull}}, {{5755998845196593056ull, 8789854567155002489ull, 14785942483538101018ull, 7485803401627912435ull}}, {{15126714324316340420ull, 10105345122899264459ull, 6935371042997619184ull, 4678627126017445272ull}}, {{14296706886968037621ull, 12631681403624080574ull, 8669213803747023980ull, 5848283907521806590ull}}, {{8647511571855271218ull, 15789601754530100718ull, 1613145217829004167ull, 7310354884402258238ull}}, {{1586017427964313214ull, 15125316174735237994ull, 11239803559141031017ull, 9137943605502822797ull}}, {{5602946910905083663ull, 2535793581568441890ull, 9330720233676838338ull, 5711214753439264248ull}}, {{16227055675486130387ull, 12393114013815328170ull, 11663400292096047922ull, 7139018441799080310ull}}, {{11060447557502887175ull, 6268020480414384405ull, 5355878328265284095ull, 8923773052248850388ull}}, {{9218622732652998437ull, 10835041827900072109ull, 12570795992020578367ull, 5577358157655531492ull}}, {{16134964434243635950ull, 8932116266447702232ull, 15713494990025722959ull, 6971697697069414365ull}}, {{1721961469094993321ull, 6553459314632239887ull, 5806810682249989987ull, 8714622121336767957ull}}, {{7993754945825452682ull, 1790069062431455977ull, 5935099685619937694ull, 5446638825835479973ull}}, {{14603879700709203756ull, 11460958364894095779ull, 12030560625452310021ull, 6808298532294349966ull}}, {{13643163607459116791ull, 491139900835456012ull, 5814828744960611719ull, 8510373165367937458ull}}, {{17750349291516723803ull, 7224491465663241863ull, 8245953984027770228ull, 5318983228354960911ull}}, {{17576250595968516849ull, 9030614332079052329ull, 5695756461607324881ull, 6648729035443701139ull}}, {{8135255189678482349ull, 15899953933526203316ull, 2508009558581768197ull, 8310911294304626424ull}}, {{14307906530403827277ull, 12243314217667571024ull, 1567505974113605123ull, 5194319558940391515ull}}, {{17884883163004784096ull, 10692456753657075876ull, 15794440522924170116ull, 6492899448675489393ull}}, {{3909359880046428503ull, 13365570942071344846ull, 5907992598373048933ull, 8116124310844361742ull}}, {{16278407980311181527ull, 10659324848008284480ull, 17527553429265319295ull, 5072577694277726088ull}}, {{1901265901679425292ull, 8712470041582967697ull, 3462697712872097503ull, 6340722117847157611ull}}, {{6988268395526669519ull, 6278901533551321717ull, 18163430196372285591ull, 7925902647308947013ull}}, {{6673510756417862402ull, 10841842486110657929ull, 13657986881946372446ull, 4953689154568091883ull}}, {{12953574463949715906ull, 4328931070783546603ull, 12460797584005577654ull, 6192111443210114854ull}}, {{11580282061509756978ull, 14634535875334209062ull, 6352624943152196259ull, 7740139304012643568ull}}, {{2625990270016210208ull, 6840741912870186712ull, 3970390589470122662ull, 4837587065007902230ull}}, {{3282487837520262760ull, 17774299427942509198ull, 14186360273692429135ull, 6046983831259877787ull}}, {{13326481833755104257ull, 17606188266500748593ull, 13121264323688148515ull, 7558729789074847234ull}}, {{1411522118455858305ull, 8698024657349273919ull, 12812476220732480726ull, 4724206118171779521ull}}, {{15599460703351986593ull, 1649158784831816590ull, 2180537220633437196ull, 5905257647714724402ull}}, {{10275953842335207433ull, 2061448481039770738ull, 11949043562646572303ull, 7381572059643405502ull}}, {{11034157169886892550ull, 8205934328290938567ull, 2856466208226719785ull, 4613482537277128439ull}}, {{9181010443931227783ull, 14869103928791061113ull, 17405640815565563443ull, 5766853171596410548ull}}, {{16087949073341422633ull, 13974693892561438487ull, 3310306945747402688ull, 7208566464495513186ull}}, {{15498250323249390387ull, 17468367365701798109ull, 13361255719039029168ull, 9010708080619391482ull}}, {{11992249461244562944ull, 10917729603563623818ull, 12962470842826781134ull, 5631692550387119676ull}}, {{5766939789700927872ull, 4423789967599753965ull, 16203088553533476418ull, 7039615687983899595ull}}, {{11820360755553547744ull, 14753109496354468264ull, 15642174673489457618ull, 8799519609979874494ull}}, {{7387725472220967340ull, 13832379453648930569ull, 5164673152503523107ull, 5499699756237421559ull}}, {{13846342858703597079ull, 12678788298633775307ull, 1844155422202015980ull, 6874624695296776949ull}}, {{12696242554952108445ull, 15848485373292219134ull, 6916880296179907879ull, 8593280869120971186ull}}, {{3323465578417679874ull, 16822832385948718815ull, 8934736203539830328ull, 5370800543200606991ull}}, {{17989390028304263555ull, 2581796408726346902ull, 6556734235997400007ull, 6713500679000758739ull}}, {{13263365498525553635ull, 17062303566190097340ull, 3584231776569362104ull, 8391875848750948424ull}}, {{17512975473433246830ull, 10663939728868810837ull, 2240144860355851315ull, 5244922405469342765ull}}, {{8056161286509394826ull, 8718238642658625643ull, 7411867093872202048ull, 6556153006836678456ull}}, {{5458515589709355628ull, 10897798303323282054ull, 9264833867340252560ull, 8195191258545848070ull}}, {{17246630298850510980ull, 6811123939577051283ull, 1178835148660269946ull, 5121994536591155044ull}}, {{16946601855135750820ull, 17737276961326089912ull, 1473543935825337432ull, 6402493170738943805ull}}, {{2736508245210136909ull, 3724852127948060775ull, 6453615938209059695ull, 8003116463423679756ull}}, {{8627846680897417424ull, 9245561607608619840ull, 13256881998235438117ull, 5001947789639799847ull}}, {{10784808351121771780ull, 16168638027938162704ull, 11959416479366909742ull, 6252434737049749809ull}}, {{13481010438902214725ull, 10987425498067927572ull, 1114212543926473466ull, 7815543421312187262ull}}, {{17649003561168660012ull, 11478826954719842636ull, 14531440895236209628ull, 4884714638320117038ull}}, {{3614510377751273398ull, 14348533693399803296ull, 8940929082190486227ull, 6105893297900146298ull}}, {{4518137972189091748ull, 13323981098322366216ull, 1952789315883331976ull, 7632366622375182873ull}}, {{2823836232618182343ull, 8327488186451478885ull, 12749708368495552245ull, 4770229138984489295ull}}, {{8141481309200115832ull, 15021046251491736510ull, 11325449442192052402ull, 5962786423730611619ull}}, {{953479599645368982ull, 9552935777509894830ull, 9545125784312677599ull, 7453483029663264524ull}}, {{14430982805060519326ull, 12888113888584766124ull, 15189075652050199307ull, 4658426893539540327ull}}, {{18038728506325649157ull, 11498456342303569751ull, 14374658546635361230ull, 5823033616924425409ull}}, {{17936724614479673543ull, 5149698391024686381ull, 4133265128012037826ull, 7278792021155531762ull}}, {{8585847712817428216ull, 15660495025635633785ull, 14389953446869823090ull, 9098490026444414702ull}}, {{16895369866579362395ull, 14399495409449659019ull, 4382034885866251527ull, 5686556266527759189ull}}, {{16507526314796815090ull, 13387683243384685870ull, 10089229625760202313ull, 7108195333159698986ull}}, {{11411035856641243054ull, 2899545998948693626ull, 3388164995345477084ull, 8885244166449623733ull}}, {{11743583428828164813ull, 11035588286197709324ull, 4423446131304617129ull, 5553277604031014833ull}}, {{14679479286035206016ull, 18406171376174524559ull, 10140993682558159315ull, 6941597005038768541ull}}, {{13737663089116619616ull, 18396028201790767795ull, 17287928121625087048ull, 8676996256298460676ull}}, {{6280196421484193308ull, 11497517626119229872ull, 1581583039160903597ull, 5423122660186537923ull}}, {{7850245526855241635ull, 536838977366873628ull, 15812036854233293209ull, 6778903325233172403ull}}, {{9812806908569052044ull, 5282734740135979939ull, 15153360049364228607ull, 8473629156541465504ull}}, {{3827161308641963576ull, 10219238240226069318ull, 9470850030852642879ull, 5296018222838415940ull}}, {{14007323672657230277ull, 8162361781855198743ull, 11838562538565803599ull, 6620022778548019925ull}}, {{12897468572394149943ull, 5591266208891610525ull, 963145117925090787ull, 8275028473185024907ull}}, {{10366760866960037666ull, 1188698371343562626ull, 16742866763199039406ull, 5171892795740640566ull}}, {{3735079046845271275ull, 10709245001034229091ull, 11705211417144023449ull, 6464865994675800708ull}}, {{57162790129201189ull, 17998242269720174268ull, 14631514271430029311ull, 8081082493344750885ull}}, {{9259098780685526552ull, 18166430446216190773ull, 11450539428857462271ull, 5050676558340469303ull}}, {{16185559494284296093ull, 18096352039342850562ull, 9701488267644439935ull, 6313345697925586629ull}}, {{11008577331000594309ull, 18008754030751175299ull, 16738546352982937823ull, 7891682122406983286ull}}, {{4574517822661677491ull, 18173000296860566418ull, 5849905452186948235ull, 4932301326504364554ull}}, {{14941519315181872672ull, 18104564352648320118ull, 16535753852088461102ull, 6165376658130455692ull}}, {{9453527107122565031ull, 13407333403955624340ull, 2222948241401024762ull, 7706720822663069616ull}}, {{15131826478806378953ull, 12991269395899653116ull, 1389342650875640476ull, 4816700514164418510ull}}, {{468039024798422075ull, 16239086744874566396ull, 10960050350449326403ull, 6020875642705523137ull}}, {{585048780998027594ull, 15687172412665820091ull, 18311748956489045908ull, 7526094553381903921ull}}, {{16506556552619624910ull, 581110721061361748ull, 4527314070164571837ull, 4703809095863689951ull}}, {{2186451617064979522ull, 5338074419754090090ull, 1047456569278326892ull, 5879761369829612439ull}}, {{11956436558186000210ull, 6672593024692612612ull, 15144378766880072327ull, 7349701712287015548ull}}, {{14945545697732500262ull, 3729055262438377861ull, 483729384890538793ull, 9187127140358769436ull}}, {{11646809070296506616ull, 13859874585092455923ull, 9525702902411362553ull, 5741954462724230897ull}}, {{9946825319443245366ull, 3489785176083406192ull, 16518814646441591096ull, 7177443078405288621ull}}, {{12433531649304056707ull, 4362231470104257740ull, 6813460252769825158ull, 8971803848006610777ull}}, {{16994329317669811250ull, 16561452724097324799ull, 15787627704049610483ull, 5607377405004131735ull}}, {{16631225628659876159ull, 16090129886694268095ull, 15122848611634625200ull, 7009221756255164669ull}}, {{16177346017397457294ull, 1665918284658283503ull, 5068502709261117789ull, 8761527195318955837ull}}, {{17028370288514492665ull, 3347041937125121141ull, 5473657202501892570ull, 5475954497074347398ull}}, {{7450404805360952119ull, 13407174458261177235ull, 16065443539982141520ull, 6844943121342934247ull}}, {{4701319988273802245ull, 16758968072826471544ull, 15470118406550288996ull, 8556178901678667809ull}}, {{2938324992671126403ull, 1250983008661768907ull, 2751294976452848767ull, 5347611813549167381ull}}, {{17507964296121071716ull, 15398786816109374845ull, 8050804738993448862ull, 6684514766936459226ull}}, {{8049897314869175933ull, 10025111483281942749ull, 840133886887035270ull, 8355643458670574033ull}}, {{7337028831006928910ull, 1654008658623826314ull, 12054298725372866804ull, 5222277161669108770ull}}, {{18394658075613436946ull, 2067510823279782892ull, 5844501369861307697ull, 6527846452086385963ull}}, {{4546578520807244566ull, 7196074547527116520ull, 2693940693899246717ull, 8159808065107982454ull}}, {{2841611575504527854ull, 6803389601418141777ull, 15518770988969192910ull, 5099880040692489033ull}}, {{8163700487808047721ull, 17727609038627453029ull, 5563405680929327425ull, 6374850050865611292ull}}, {{14816311628187447555ull, 8324453243002152574ull, 6954257101161659282ull, 7968562563582014115ull}}, {{4648508749189766818ull, 9814469295303733263ull, 2040567679012343099ull, 4980351602238758822ull}}, {{1198949918059820619ull, 7656400600702278675ull, 11774081635620204682ull, 6225439502798448527ull}}, {{15333745452856939485ull, 347128714023072535ull, 10105916026097867949ull, 7781799378498060659ull}}, {{16501119935676669034ull, 2522798455478114286ull, 4010354507097473516ull, 4863624611561287912ull}}, {{11403027882741060485ull, 3153498069347642858ull, 5012943133871841895ull, 6079530764451609890ull}}, {{5030412816571549798ull, 17776930641966717285ull, 15489550954194578176ull, 7599413455564512362ull}}, {{5449851019570912576ull, 11110581651229198303ull, 14292655364798999264ull, 4749633409727820226ull}}, {{2200627756036252816ull, 13888227064036497879ull, 8642447169143973272ull, 5937041762159775283ull}}, {{16585842750327479732ull, 17360283830045622348ull, 6191372943002578686ull, 7421302202699719104ull}}, {{1142779682099899025ull, 6238491375351126064ull, 3869608089376611679ull, 4638313876687324440ull}}, {{1428474602624873781ull, 3186428200761519676ull, 4837010111720764599ull, 5797892345859155550ull}}, {{1785593253281092226ull, 17818093306234063307ull, 15269634676505731556ull, 7247365432323944437ull}}, {{16067049621883528994ull, 3825872559083027517ull, 5251985290350000734ull, 9059206790404930547ull}}, {{12347749022890899573ull, 16226228404709055910ull, 976647797255056506ull, 5662004244003081592ull}}, {{6211314241758848658ull, 11059413469031544080ull, 1220809746568820633ull, 7077505305003851990ull}}, {{7764142802198560823ull, 18435952854716818004ull, 10749384220065801599ull, 8846881631254814987ull}}, {{14075961288228876323ull, 18439999561839093108ull, 4412522128327432047ull, 5529301019534259367ull}}, {{17594951610286095403ull, 18438313433871478481ull, 903966641981902155ull, 6911626274417824209ull}}, {{8158631457575455542ull, 18436205773911960198ull, 5741644320904765598ull, 8639532843022280261ull}}, {{487458642557271810ull, 6910942590267587220ull, 5894370709779172451ull, 5399708026888925163ull}}, {{609323303196589762ull, 4026992219407096121ull, 2756277368796577660ull, 6749635033611156454ull}}, {{5373340147423125106ull, 5033740274258870151ull, 12668718747850497883ull, 8437043792013945567ull}}, {{10275866619780535048ull, 840244662198099892ull, 14835478245047643033ull, 5273152370008715979ull}}, {{12844833274725668810ull, 5661991846175012769ull, 13932661787882165887ull, 6591440462510894974ull}}, {{2220983538124922300ull, 2465803789291378058ull, 8192455197997931551ull, 8239300578138618718ull}}, {{5999800729755464342ull, 8458656395948193142ull, 508598480321319315ull, 5149562861336636699ull}}, {{16723122949049106235ull, 5961634476507853523ull, 14470806155683812856ull, 6436953576670795873ull}}, {{16292217667883994889ull, 7452043095634816904ull, 4253449639322602358ull, 8046191970838494842ull}}, {{10182636042427496806ull, 45840916344372661ull, 7270092043004014378ull, 5028869981774059276ull}}, {{17339981071461758911ull, 9280673182285241634ull, 9087615053755017972ull, 6286087477217574095ull}}, {{12451604302472422831ull, 11600841477856552043ull, 6747832798766384561ull, 7857609346521967619ull}}, {{5476409679831570318ull, 332996896019263171ull, 1911552490015296399ull, 4911005841576229762ull}}, {{2233826081362074993ull, 14251304175306242676ull, 11612812649373896306ull, 6138757301970287202ull}}, {{2792282601702593741ull, 8590758182278027537ull, 5292643774862594575ull, 7673446627462859003ull}}, {{13274391672132590848ull, 12286752891564849066ull, 1002059350075427657ull, 4795904142164286877ull}}, {{7369617553310962752ull, 1523383059173897621ull, 5864260206021672476ull, 5994880177705358596ull}}, {{13823707960066091344ull, 1904228823967372026ull, 7330325257527090595ull, 7493600222131698245ull}}, {{13251503493468694994ull, 17331044079475465180ull, 6887296295168125573ull, 4683500138832311403ull}}, {{16564379366835868743ull, 7828747044062167763ull, 3997434350532769063ull, 5854375173540389254ull}}, {{16093788190117448024ull, 5174247786650321800ull, 14220164975020737137ull, 7317968966925486567ull}}, {{1670491163937258414ull, 11079495751740290155ull, 13163520200348533517ull, 9147461208656858209ull}}, {{17184958041956644173ull, 9230527854051375298ull, 1309671097576751592ull, 5717163255410536381ull}}, {{12257825515591029408ull, 11538159817564219123ull, 6248774890398327394ull, 7146454069263170476ull}}, {{10710595876061398856ull, 5199327735100498096ull, 7810968612997909243ull, 8933067586578963095ull}}, {{6694122422538374285ull, 943736825224117358ull, 11799384410764775133ull, 5583167241611851934ull}}, {{17591025065027743665ull, 5791357049957534601ull, 5525858476601193108ull, 6978959052014814918ull}}, {{8153723276002515869ull, 7239196312446918252ull, 16130695132606267193ull, 8723698815018518647ull}}, {{14319449084356348226ull, 16053712741347793667ull, 16999213485519998851ull, 5452311759386574154ull}}, {{13287625337018047378ull, 15455454908257354180ull, 12025644820045222756ull, 6815389699233217693ull}}, {{16609531671272559223ull, 872574561612141109ull, 1196997969774364734ull, 8519237124041522117ull}}, {{12686800303759043467ull, 14380417156289751905ull, 3053966740322671910ull, 5324523202525951323ull}}, {{2023442324416640621ull, 8752149408507414074ull, 17652516480685503600ull, 6655654003157439153ull}}, {{11752674942375576584ull, 10940186760634267592ull, 8230587545574715788ull, 8319567503946798942ull}}, {{7345421838984735365ull, 16060988762251193053ull, 532431197556809463ull, 5199729689966749339ull}}, {{13793463317158307111ull, 15464549934386603412ull, 14500597052228175541ull, 6499662112458436673ull}}, {{17241829146447883888ull, 5495629362701090553ull, 4290688260003055715ull, 8124577640573045842ull}}, {{3858614188888845574ull, 1128925342474487644ull, 7293366180929297726ull, 5077861025358153651ull}}, {{4823267736111056968ull, 10634528714947885363ull, 4505021707734234253ull, 6347326281697692064ull}}, {{1417398651711433305ull, 17904846912112244608ull, 5631277134667792816ull, 7934157852122115080ull}}, {{885874157319645816ull, 11190529320070152880ull, 3519548209167370510ull, 4958848657576321925ull}}, {{1107342696649557270ull, 4764789613232915292ull, 9011121279886601042ull, 6198560821970402406ull}}, {{1384178370811946587ull, 15179359053395919923ull, 2040529563003475494ull, 7748201027463003008ull}}, {{17006012546253324281ull, 4875413389945062047ull, 1275330976877172184ull, 4842625642164376880ull}}, {{16645829664389267447ull, 6094266737431327559ull, 1594163721096465230ull, 6053282052705471100ull}}, {{16195601062059196405ull, 16841205458643935257ull, 1992704651370581537ull, 7566602565881838875ull}}, {{3204721636145915897ull, 3608224384011377680ull, 17386341471602471125ull, 4729126603676149296ull}}, {{4005902045182394872ull, 9121966498441610004ull, 3286182765793537290ull, 5911408254595186621ull}}, {{5007377556477993589ull, 2179086086197236697ull, 8719414475669309517ull, 7389260318243983276ull}}, {{14658826018867215754ull, 3667771813086966887ull, 14673006084148094256ull, 4618287698902489547ull}}, {{13711846505156631788ull, 4584714766358708609ull, 13729571586757729916ull, 5772859623628111934ull}}, {{3304750076163626023ull, 5730893457948385762ull, 7938592446592386587ull, 7216074529535139918ull}}, {{13354309632059308336ull, 2551930804008094298ull, 699868521385707426ull, 9020093161918924898ull}}, {{12958129538464455614ull, 6206642770932446840ull, 5049103844293455045ull, 5637558226199328061ull}}, {{16197661923080569518ull, 12369989482092946454ull, 10923065823794206710ull, 7046947782749160076ull}}, {{11023705366995936089ull, 6239114815761407260ull, 13653832279742758388ull, 8808684728436450095ull}}, {{16113187891227235864ull, 13122818796705655345ull, 15451174202480305848ull, 5505427955272781309ull}}, {{6306426808751881118ull, 16403523495882069182ull, 5478909697818218598ull, 6881784944090976637ull}}, {{17106405547794627205ull, 11281032332997810669ull, 11460323140700161152ull, 8602231180113720796ull}}, {{12997346476585335955ull, 7050645208123631668ull, 16386073999792376528ull, 5376394487571075497ull}}, {{16246683095731669944ull, 8813306510154539585ull, 6647534444458306948ull, 6720493109463844372ull}}, {{6473295814382423718ull, 11016633137693174482ull, 8309418055572883685ull, 8400616386829805465ull}}, {{8657495902416402728ull, 9191238720271928003ull, 16722601330801522063ull, 5250385241768628415ull}}, {{6210183859593115506ull, 6877362381912522100ull, 16291565645074514675ull, 6562981552210785519ull}}, {{7762729824491394382ull, 3985016958963264721ull, 15752771037915755440ull, 8203726940263481899ull}}, {{16380921186375591249ull, 2490635599352040450ull, 7539638889483653198ull, 5127329337664676187ull}}, {{11252779446114713253ull, 12336666536044826371ull, 4812862593427178593ull, 6409161672080845234ull}}, {{9454288289216003662ull, 1585775114773869252ull, 15239450278638749050ull, 8011452090101056542ull}}, {{15132302217614778097ull, 5602795465161056186ull, 4912970405721830252ull, 5007157556313160339ull}}, {{9692005735163696813ull, 7003494331451320233ull, 1529526988724899911ull, 6258946945391450424ull}}, {{16726693187382008920ull, 4142681895886762387ull, 1911908735906124889ull, 7823683681739313030ull}}, {{8148340232900061623ull, 14118391230997696252ull, 15030001015223491767ull, 4889802301087070643ull}}, {{10185425291125077029ull, 13036303020319732411ull, 14175815250601976805ull, 6112252876358838304ull}}, {{8120095595478958382ull, 2460320720117501802ull, 17719769063252471007ull, 7640316095448547880ull}}, {{9686745765601736893ull, 8455229477714520482ull, 11074855664532794379ull, 4775197559655342425ull}}, {{2885060170147395308ull, 5957350828715762699ull, 8511525383829262ull, 5968996949569178032ull}}, {{17441383267966407847ull, 16670060572749479181ull, 10639406729786577ull, 7461246186961472540ull}}, {{13206707551692698857ull, 3501258830327342632ull, 9230021666060892419ull, 4663278866850920337ull}}, {{16508384439615873571ull, 18211631593191342002ull, 16149213101003503427ull, 5829098583563650421ull}}, {{11412108512665066155ull, 18152853473061789599ull, 6351458320972215572ull, 7286373229454563027ull}}, {{9653449622403944790ull, 4244322767617685383ull, 3327636882787881562ull, 9107966536818203784ull}}, {{12950935041643547350ull, 7264387748188441268ull, 2079773051742425976ull, 5692479085511377365ull}}, {{16188668802054434187ull, 9080484685235551585ull, 7211402333105420374ull, 7115598856889221706ull}}, {{6400777947285879022ull, 2127233819689663674ull, 18237624953236551276ull, 8894498571111527132ull}}, {{8612172235481062293ull, 10552893174160815604ull, 2175143558918068739ull, 5559061606944704458ull}}, {{10765215294351327866ull, 8579430449273631601ull, 11942301485502361732ull, 6948827008680880572ull}}, {{18068205136366547737ull, 10724288061592039501ull, 14927876856877952165ull, 8686033760851100715ull}}, {{13598471219442786288ull, 9008523047708718640ull, 7024080026335026151ull, 5428771100531937947ull}}, {{16998089024303482859ull, 6648967791208510396ull, 4168414014491394785ull, 6785963875664922434ull}}, {{2800867206669801958ull, 12922895757438025900ull, 14433889554969019289ull, 8482454844581153042ull}}, {{10973914041023402032ull, 1159280820757684331ull, 13632866990283024960ull, 5301534277863220651ull}}, {{9105706532851864636ull, 1449101025947105414ull, 12429397719426393296ull, 6626917847329025814ull}}, {{2158761129210054987ull, 1811376282433881768ull, 6313375112428215812ull, 8283647309161282268ull}}, {{1349225705756284367ull, 10355482213375951913ull, 13169231482122410690ull, 5177279568225801417ull}}, {{6298218150622743362ull, 3720980729865164083ull, 2626481297370849651ull, 6471599460282251772ull}}, {{3261086669851041299ull, 39539893904067200ull, 3283101621713562064ull, 8089499325352814715ull}}, {{2038179168656900812ull, 24712433690042000ull, 18192839578066833954ull, 5055937078345509196ull}}, {{2547723960821126015ull, 9254262578967328308ull, 4294305398873990826ull, 6319921347931886496ull}}, {{3184654951026407518ull, 2344456186854384577ull, 5367881748592488533ull, 7899901684914858120ull}}, {{13519624390459974459ull, 3771128125997684312ull, 3354926092870305333ull, 4937438553071786325ull}}, {{16899530488074968074ull, 9325596175924493294ull, 8805343634515269570ull, 6171798191339732906ull}}, {{11901041073238934284ull, 2433623183050840810ull, 1783307506289311155ull, 7714747739174666133ull}}, {{12049836689201721832ull, 17661915553902633170ull, 3420410200644513423ull, 4821717336984166333ull}}, {{5838923824647376482ull, 17465708423950903559ull, 8887198769233029683ull, 6027146671230207916ull}}, {{2686968762381832698ull, 17220449511511241545ull, 11108998461541287104ull, 7533933339037759895ull}}, {{13208570522557115196ull, 10762780944694525965ull, 13860653066104386296ull, 4708708336898599934ull}}, {{2675655097914230283ull, 13453476180868157457ull, 8102444295775707062ull, 5885885421123249918ull}}, {{7956254890820175758ull, 7593473189230421013ull, 904683332864858020ull, 7357356776404062398ull}}, {{14557004631952607602ull, 9491841486538026266ull, 10354226202935848333ull, 9196695970505077997ull}}, {{13709813913397767655ull, 8238243938299960368ull, 8777234386048599160ull, 5747934981565673748ull}}, {{17137267391747209569ull, 10297804922874950460ull, 10971542982560748950ull, 7184918726957092185ull}}, {{2974840165974460345ull, 3648884116738912268ull, 18326114746628324092ull, 8981148408696365231ull}}, {{11082647140588813524ull, 11503924609816595975ull, 18371350744283784413ull, 5613217755435228269ull}}, {{9241622907308629001ull, 544847706988581257ull, 9129130375072566805ull, 7016522194294035337ull}}, {{16163714652563174155ull, 5292745652163114475ull, 16023098987268096410ull, 8770652742867544171ull}}, {{7796478648638289895ull, 7919652051029334451ull, 7708593857828866304ull, 5481657964292215107ull}}, {{5133912292370474464ull, 9899565063786668064ull, 5024056303858694976ull, 6852072455365268884ull}}, {{6417390365463093080ull, 12374456329733335080ull, 6280070379823368720ull, 8565090569206586105ull}}, {{4010868978414433175ull, 7734035206083334425ull, 15454259033458075210ull, 5353181605754116315ull}}, {{9625272241445429373ull, 444171970749392223ull, 14706137773395206109ull, 6691477007192645394ull}}, {{7419904283379398812ull, 5166900981864128183ull, 9159300179889231828ull, 8364346258990806743ull}}, {{11554969204753206114ull, 12452685150519855922ull, 12642091640071851748ull, 5227716411869254214ull}}, {{5220339469086731834ull, 15565856438149819903ull, 6579242513235038877ull, 6534645514836567768ull}}, {{1913738317931026889ull, 5622262492405111167ull, 8224053141543798597ull, 8168306893545709710ull}}, {{8113615476347973662ull, 5819757066966888431ull, 528347195037486219ull, 5105191808466068569ull}}, {{5530333327007579173ull, 2663010315281222635ull, 5272120012224245678ull, 6381489760582585711ull}}, {{2301230640332086062ull, 12552134930956304102ull, 1978463996852919193ull, 7976862200728232139ull}}, {{15273327205489717501ull, 927555304206608207ull, 17377441062528932160ull, 4985538875455145086ull}}, {{14479972988434758972ull, 1159444130258260259ull, 12498429291306389392ull, 6231923594318931358ull}}, {{13488280217116060811ull, 1449305162822825324ull, 6399664577278210932ull, 7789904492898664198ull}}, {{17653547172552313815ull, 10129187763619041635ull, 17834848416081045544ull, 4868690308061665123ull}}, {{17455247947263004365ull, 12661484704523802044ull, 17681874501673919026ull, 6085862885077081404ull}}, {{3372315860369203840ull, 6603483843799976748ull, 3655599053382847167ull, 7607328606346351756ull}}, {{11331069449585528208ull, 11044706430016067323ull, 11508121445219055287ull, 4754580378966469847ull}}, {{9552150793554522356ull, 9194197019092696250ull, 9773465788096431205ull, 5943225473708087309ull}}, {{2716816455088377137ull, 16104432292293258217ull, 16828518253547926910ull, 7429031842135109136ull}}, {{13227225330498705471ull, 5453584164255898481ull, 10517823908467454319ull, 4643144901334443210ull}}, {{2698973607841218126ull, 2205294186892485198ull, 3923907848729542091ull, 5803931126668054013ull}}, {{12597089046656298466ull, 16591675788897770209ull, 9516570829339315517ull, 7254913908335067516ull}}, {{1911303253038209370ull, 6904536680840049050ull, 11895713536674144397ull, 9068642385418834395ull}}, {{5806250551576268760ull, 6621178434738724608ull, 5128977951207646296ull, 5667901490886771497ull}}, {{7257813189470335950ull, 8276473043423405760ull, 11022908457436945774ull, 7084876863608464371ull}}, {{9072266486837919938ull, 1122219267424481392ull, 9166949553368794314ull, 8856096079510580464ull}}, {{5670166554273699961ull, 5313073060567688774ull, 5729343470855496446ull, 5535060049694112790ull}}, {{16311080229696900759ull, 15864713362564386775ull, 16385051375424146365ull, 6918825062117640987ull}}, {{15777164268693738045ull, 5995833647923319757ull, 15869628200852795053ull, 8648531327647051234ull}}, {{12166570677147280230ull, 6053239039165768800ull, 14530203643960384812ull, 5405332079779407021ull}}, {{15208213346434100288ull, 7566548798957211000ull, 4327696499668317303ull, 6756665099724258777ull}}, {{563522609333073744ull, 4846499980269125847ull, 10021306643012784533ull, 8445831374655323471ull}}, {{7269730658474252946ull, 5334905496881897606ull, 13180845679524072189ull, 5278644609159577169ull}}, {{18310535359947591990ull, 11280317889529759911ull, 2640999044122926524ull, 6598305761449471462ull}}, {{18276483181507102084ull, 14100397361912199889ull, 12524620842008433963ull, 8247882201811839327ull}}, {{4505272960800856947ull, 6506905341981430979ull, 14745417053896353083ull, 5154926376132399579ull}}, {{1019905182573683279ull, 3521945659049400820ull, 13820085298943053450ull, 6443657970165499474ull}}, {{1274881478217104099ull, 13625804110666526833ull, 8051734586824041004ull, 8054572462706874343ull}}, {{12326015969954159822ull, 17739499606021355078ull, 11949863144406107483ull, 5034107789191796464ull}}, {{6184147925587923969ull, 17562688489099305944ull, 14937328930507634354ull, 6292634736489745580ull}}, {{7730184906984904961ull, 12729988574519356622ull, 224917089424991327ull, 7865793420612181976ull}}, {{219679548438177697ull, 14873771886715679745ull, 140573180890619579ull, 4916120887882613735ull}}, {{4886285453975110025ull, 13980528839967211777ull, 14010774531395438186ull, 6145151109853267168ull}}, {{10719542835896275435ull, 8252289013104238913ull, 17513468164244297733ull, 7681438887316583960ull}}, {{18228929318503641907ull, 7463523642403843272ull, 10945917602652686083ull, 4800899304572864975ull}}, {{4339417574420000768ull, 4717718534577416187ull, 9070710984888469700ull, 6001124130716081219ull}}, {{812585949597613056ull, 5897148168221770234ull, 6726702712683199221ull, 7501405163395101524ull}}, {{5119552236925896064ull, 5991560614352300348ull, 13427561232281775321ull, 4688378227121938452ull}}, {{6399440296157370080ull, 12101136786367763339ull, 16784451540352219151ull, 5860472783902423065ull}}, {{3387614351769324696ull, 10514734964532316270ull, 7145506370158110227ull, 7325590979878028832ull}}, {{13457889976566431678ull, 8531732687238007433ull, 8931882962697637784ull, 9156988724847536040ull}}, {{1493652207712937943ull, 5332332929523754646ull, 5582426851686023615ull, 5723117953029710025ull}}, {{11090437296495948236ull, 2053730143477305403ull, 11589719583034917423ull, 7153897441287137531ull}}, {{9251360602192547391ull, 16402220734628795466ull, 9875463460366258874ull, 8942371801608921914ull}}, {{10393786394797730024ull, 14863073977570385070ull, 10783850681156299700ull, 5588982376005576196ull}}, {{3768860956642386722ull, 132098398253429722ull, 13479813351445374626ull, 6986227970006970245ull}}, {{13934448232657759210ull, 9388495034671562960ull, 3014708634024554570ull, 8732784962508712807ull}}, {{8709030145411099506ull, 10479495415097114754ull, 8801721923906428462ull, 5457990601567945504ull}}, {{1662915644909098575ull, 3875997232016617635ull, 11002152404883035578ull, 6822488251959931880ull}}, {{15913702611418536930ull, 14068368576875547851ull, 13752690506103794472ull, 8528110314949914850ull}}, {{7640221122922891630ull, 8792730360547217407ull, 13207117584742259449ull, 5330068946843696781ull}}, {{4938590385226226633ull, 15602598969111409663ull, 2673838925645660599ull, 6662586183554620977ull}}, {{1561551963105395387ull, 14891562692961874175ull, 7953984675484463653ull, 8328232729443276221ull}}, {{7893499004581953973ull, 11613069692314865311ull, 7277083431391483735ull, 5205145455902047638ull}}, {{5255187737300054562ull, 9904651096966193735ull, 18319726326094130477ull, 6506431819877559547ull}}, {{1957298653197680299ull, 16992499889635130073ull, 18287971889190275192ull, 8133039774846949434ull}}, {{12752526704317019947ull, 10620312431021956295ull, 16041668449171309899ull, 5083149859279343396ull}}, {{11328972361968887030ull, 8663704520350057465ull, 1605341487754585758ull, 6353937324099179246ull}}, {{326157397178945075ull, 1606258613582796024ull, 11230048896548008006ull, 7942421655123974057ull}}, {{203848373236840672ull, 14838969688771411227ull, 101251532701423147ull, 4964013534452483786ull}}, {{14089868521828214552ull, 13937026092536876129ull, 9349936452731554742ull, 6205016918065604732ull}}, {{3777277597003104478ull, 8197910578816319354ull, 11687420565914443428ull, 7756271147582005915ull}}, {{6972484516554328203ull, 14347066148614975404ull, 4998794844482833190ull, 4847669467238753697ull}}, {{8715605645692910253ull, 8710460648913943447ull, 10860179574030929392ull, 6059586834048442121ull}}, {{6282821038688749912ull, 10888075811142429309ull, 18186910485966049644ull, 7574483542560552651ull}}, {{6232606158394162647ull, 16028419418818794126ull, 9060976044515087075ull, 4734052214100345407ull}}, {{17014129734847479117ull, 15423838255096104753ull, 6714534037216470940ull, 5917565267625431759ull}}, {{7432604113277185184ull, 833053745160579326ull, 3781481528093200772ull, 7396956584531789699ull}}, {{33691552370852836ull, 9744030627580137887ull, 57582945844556530ull, 4623097865332368562ull}}, {{13877172495745729757ull, 2956666247620396550ull, 9295350719160471471ull, 5778872331665460702ull}}, {{8123093582827386389ull, 17530890864807659400ull, 2395816362095813530ull, 7223590414581825878ull}}, {{10153866978534232986ull, 12690241544154798442ull, 12218142489474542721ull, 9029488018227282347ull}}, {{10957852880011283520ull, 1013871937455667170ull, 5330496046707895249ull, 5643430011392051467ull}}, {{4473944063159328592ull, 5879025940246971867ull, 2051434039957481157ull, 7054287514240064334ull}}, {{980744060521772836ull, 11960468443736102738ull, 11787664586801627254ull, 8817859392800080417ull}}, {{5224651056253495927ull, 2863606758907676307ull, 449761339109935178ull, 5511162120500050261ull}}, {{1919127801889482004ull, 12802880485489371192ull, 5173887692314806876ull, 6888952650625062826ull}}, {{2398909752361852505ull, 16003600606861713990ull, 15690731652248284403ull, 8611190813281328532ull}}, {{15334376650508321528ull, 7696407370074877291ull, 583335245800401944ull, 5381994258300830333ull}}, {{14556284794708014006ull, 9620509212593596614ull, 5340855075677890334ull, 6727492822876037916ull}}, {{8971983956530241699ull, 2802264478887219960ull, 6676068844597362918ull, 8409366028595047395ull}}, {{5607489972831401062ull, 15586473354586676187ull, 1866700018659657871ull, 5255853767871904622ull}}, {{2397676447611863424ull, 14871405674805957330ull, 11556747060179348147ull, 6569817209839880777ull}}, {{12220467596369605087ull, 13977571075080058758ull, 610875769942021472ull, 8212271512299850972ull}}, {{3026106229303615276ull, 8735981921925036724ull, 9605169393068539228ull, 5132669695187406857ull}}, {{3782632786629519095ull, 10919977402406295905ull, 16618147759763061939ull, 6415837118984258571ull}}, {{9339977001714286772ull, 9038285734580481977ull, 16160998681276439520ull, 8019796398730323214ull}}, {{17366700672139898993ull, 5648928584112801235ull, 5488938157370386796ull, 5012372749206452009ull}}, {{17096689821747485837ull, 7061160730141001544ull, 11472858715140371399ull, 6265465936508065011ull}}, {{2924118203474805680ull, 4214764894248864027ull, 9729387375498076345ull, 7831832420635081264ull}}, {{17968474941667611214ull, 14163443104974009776ull, 6080867109686297715ull, 4894895262896925790ull}}, {{4013849603374962402ull, 13092617862790124317ull, 16824455923962647952ull, 6118619078621157237ull}}, {{9628998022646090906ull, 16365772328487655396ull, 7195511849671146228ull, 7648273848276446547ull}}, {{15241495801008582624ull, 1005235668450008814ull, 2191351896830772441ull, 4780171155172779092ull}}, {{9828497714405952472ull, 5868230603989898922ull, 2739189871038465551ull, 5975213943965973865ull}}, {{3062250106152664782ull, 2723602236559985749ull, 8035673357225469843ull, 7469017429957467331ull}}, {{4219749325559109441ull, 17843152462345848757ull, 2716452839052224699ull, 4668135893723417082ull}}, {{9886372675376274705ull, 17692254559504923042ull, 12618938085670056682ull, 5835169867154271352ull}}, {{3134593807365567573ull, 12891946162526377995ull, 15773672607087570853ull, 7293962333942839190ull}}, {{17753300314489123179ull, 2279874647875808781ull, 10493718722004687759ull, 9117452917428548988ull}}, {{13401655705769395939ull, 8342450682563462344ull, 15781946238107705657ull, 5698408073392843117ull}}, {{16752069632211744923ull, 15039749371631715834ull, 5892374742352468359ull, 7123010091741053897ull}}, {{11716715003409905346ull, 14188000696112256889ull, 11977154446367973353ull, 8903762614676317371ull}}, {{405417849490108986ull, 1949971407429078700ull, 5179878519766289394ull, 5564851634172698357ull}}, {{506772311862636232ull, 11660836296141124183ull, 11086534168135249646ull, 6956064542715872946ull}}, {{14468523445110459002ull, 5352673333321629420ull, 4634795673314286250ull, 8695080678394841183ull}}, {{18266199190048812684ull, 7957106851753406291ull, 9814276323462510762ull, 5434425423996775739ull}}, {{18221062969133627951ull, 723011527836982056ull, 7656159385900750549ull, 6793031779995969674ull}}, {{4329584637707483323ull, 5515450428223615475ull, 346827195521162378ull, 8491289724994962093ull}}, {{400147389353483125ull, 8058842536067147576ull, 2522610006414420438ull, 5307056078121851308ull}}, {{500184236691853906ull, 850181133229158662ull, 3153262508018025548ull, 6633820097652314135ull}}, {{9848602332719593190ull, 1062726416536448327ull, 17776636190304695647ull, 8292275122065392668ull}}, {{13072905485590827600ull, 7581733037976362060ull, 1887025582085658971ull, 5182671951290870418ull}}, {{16341131856988534500ull, 4865480279043064671ull, 11582154014461849522ull, 6478339939113588022ull}}, {{15814728802808280221ull, 15305222385658606647ull, 5254320481222536094ull, 8097924923891985028ull}}, {{16801734529396256994ull, 4954077972609241250ull, 12507322337618860867ull, 5061203077432490642ull}}, {{11778796124890545435ull, 1580911447334163659ull, 6410780885168800276ull, 6326503846790613303ull}}, {{10111809137685793889ull, 1976139309167704574ull, 3401790088033612441ull, 7908129808488266629ull}}, {{1708194692626233277ull, 12764302114298285119ull, 4431961814234701727ull, 4942581130305166643ull}}, {{15970301421064955308ull, 11343691624445468494ull, 928266249365989255ull, 6178226412881458304ull}}, {{10739504739476418327ull, 9567928512129447714ull, 1160332811707486569ull, 7722783016101822880ull}}, {{11323876480600149359ull, 17509170366149374581ull, 725208007317179105ull, 4826739385063639300ull}}, {{319787545468022986ull, 8051404902404554515ull, 906510009146473882ull, 6033424231329549125ull}}, {{14234792487117192445ull, 840884091150917335ull, 5744823529860480257ull, 7541780289161936406ull}}, {{15814274332089327134ull, 12054767603037793094ull, 17425572761444963872ull, 4713612680726210253ull}}, {{10544470878256883109ull, 15068459503797241368ull, 7946907896524041128ull, 5892015850907762817ull}}, {{13180588597821103887ull, 388830306037000094ull, 14545320889082439315ull, 7365019813634703521ull}}, {{7252363710421604050ull, 14321095937828413830ull, 4346593056070885431ull, 9206274767043379402ull}}, {{18367785374295666244ull, 15868213988783840499ull, 7328306678471691298ull, 5753921729402112126ull}}, {{18348045699442194900ull, 10611895449125024816ull, 18383755384944389931ull, 7192402161752640157ull}}, {{4488313050593192009ull, 8653183292978893117ull, 9144636175898323702ull, 8990502702190800197ull}}, {{5111038665834438958ull, 796553539684420294ull, 8021240619150146266ull, 5619064188869250123ull}}, {{15612170369147824505ull, 10219063961460301175ull, 5414864755510294928ull, 7023830236086562654ull}}, {{14903526943007392728ull, 12773829951825376469ull, 15991952981242644468ull, 8779787795108203317ull}}, {{11620547348593314407ull, 17207015756745636101ull, 12300813622490346744ull, 5487367371942627073ull}}, {{690626130459479296ull, 3062025622222493511ull, 1540958972830769719ull, 6859209214928283842ull}}, {{14698340718356512832ull, 17662590083060280600ull, 11149570752893237956ull, 8574011518660354802ull}}, {{9186462948972820520ull, 1815746765057899567ull, 11580167738985661627ull, 5358757199162721751ull}}, {{6871392667788637746ull, 16104741511604538171ull, 9863523655304689129ull, 6698446498953402189ull}}, {{3977554816308409279ull, 6295868834223509002ull, 16941090587558249316ull, 8373058123691752736ull}}, {{7097657778620143704ull, 13158290058244468934ull, 10588181617223905822ull, 5233161327307345460ull}}, {{18095444260129955437ull, 7224490535950810359ull, 13235227021529882278ull, 6541451659134181825ull}}, {{18007619306735056393ull, 18253985206793288757ull, 2708975721630189135ull, 8176814573917727282ull}}, {{13560605075923104198ull, 18326269781886887329ull, 6304795844446256113ull, 5110509108698579551ull}}, {{3115698289621716535ull, 9072779172076445450ull, 3269308787130432238ull, 6388136385873224439ull}}, {{13117994898881921476ull, 2117601928240781004ull, 17921694039195204010ull, 7985170482341530548ull}}, {{17422118848655976731ull, 5935187223577876031ull, 1977686737642226698ull, 4990731551463456593ull}}, {{17165962542392583010ull, 16642356066327120847ull, 7083794440480171276ull, 6238414439329320741ull}}, {{16845767159563340858ull, 2356201009199349443ull, 13466429069027602000ull, 7798018049161650926ull}}, {{8222761465513394084ull, 1472625630749593402ull, 3804832149714863346ull, 4873761280726031829ull}}, {{1055079795036966797ull, 11064154075291767561ull, 9367726205570967086ull, 6092201600907539786ull}}, {{5930535762223596400ull, 4606820557259933643ull, 2486285720108933050ull, 7615252001134424733ull}}, {{1400741842176053798ull, 7490948866714846431ull, 3859771584281777108ull, 4759532500709015458ull}}, {{15585985358002230960ull, 9363686083393558038ull, 14048086517206997193ull, 5949415625886269322ull}}, {{10259109660648012892ull, 16316293622669335452ull, 8336736109653970683ull, 7436769532357836653ull}}, {{15635315574759783866ull, 7891840504954640705ull, 7516303077747425629ull, 4647980957723647908ull}}, {{5709086413167566120ull, 14476486649620688786ull, 9395378847184282036ull, 5809976197154559885ull}}, {{16359730053314233458ull, 18095608312025860982ull, 16355909577407740449ull, 7262470246443199856ull}}, {{11226290529788016014ull, 8784452334750162516ull, 1998142898050123946ull, 9078087808053999821ull}}, {{16239803617972285817ull, 10101968727646239476ull, 3554682320495021418ull, 5673804880033749888ull}}, {{1853010448755805655ull, 3404088872703023538ull, 4443352900618776773ull, 7092256100042187360ull}}, {{11539635097799532877ull, 8866797109306167326ull, 5554191125773470966ull, 8865320125052734200ull}}, {{2600585917697320144ull, 930062174888966675ull, 3471369453608419354ull, 5540825078157958875ull}}, {{17085790452403813892ull, 10385949755465984151ull, 18174269872292687904ull, 6926031347697448593ull}}, {{16745552047077379461ull, 12982437194332480189ull, 8882779285083696168ull, 8657539184621810742ull}}, {{12771813038637056115ull, 8114023246457800118ull, 940051034749922201ull, 5410961990388631714ull}}, {{6741394261441544336ull, 14754215076499638052ull, 10398435830292178559ull, 6763702487985789642ull}}, {{8426742826801930420ull, 13831082827197159661ull, 3774672751010447391ull, 8454628109982237053ull}}, {{7572557275964900465ull, 15561955794639306644ull, 4665013478595223571ull, 5284142568738898158ull}}, {{9465696594956125581ull, 14840758724871745401ull, 15054638885098805272ull, 6605178210923622697ull}}, {{16443806762122544880ull, 104204332380130135ull, 4983240551091342879ull, 8256472763654528372ull}}, {{17194908253967672406ull, 6982656735378663190ull, 12337897381286865107ull, 5160295477284080232ull}}, {{12270263280604814699ull, 4116634900795941084ull, 15422371726608581384ull, 6450369346605100290ull}}, {{15337829100756018374ull, 5145793625994926355ull, 10054592621405950922ull, 8062961683256375363ull}}, {{7280300178758817532ull, 7827807034674216876ull, 3978277379165025374ull, 5039351052035234602ull}}, {{9100375223448521915ull, 561386756487995287ull, 14196218760811057526ull, 6299188815044043252ull}}, {{6763783010883264489ull, 9925105482464769917ull, 17745273451013821907ull, 7873986018805054065ull}}, {{6533207391015734258ull, 3897347917326787246ull, 4173266879242556836ull, 4921241261753158791ull}}, {{17389881275624443630ull, 4871684896658484057ull, 604897580625808141ull, 6151551577191448489ull}}, {{7902293539248390826ull, 10701292139250492976ull, 5367807994209648080ull, 7689439471489310611ull}}, {{4938933462030244266ull, 6688307587031558110ull, 1049036987167336098ull, 4805899669680819132ull}}, {{15397038864392581141ull, 17583756520644223445ull, 1311296233959170122ull, 6007374587101023915ull}}, {{5411240525208562714ull, 12756323613950503499ull, 15474178347731126365ull, 7509218233876279893ull}}, {{1076182319041657744ull, 10278545267932758639ull, 11977204476545647930ull, 4693261396172674933ull}}, {{15180285954084235892ull, 3624809548061172490ull, 1136447540399896201ull, 5866576745215843667ull}}, {{9751985405750519057ull, 9142697953503853517ull, 15255617480782033963ull, 7333220931519804583ull}}, {{16801667775615536725ull, 6816686423452428992ull, 14457835832550154550ull, 9166526164399755729ull}}, {{10501042359759710454ull, 18095487069939931832ull, 2118618367702764737ull, 5729078852749847331ull}}, {{13126302949699638067ull, 8784300782142751078ull, 16483331014910619634ull, 7161348565937309163ull}}, {{7184506650269771775ull, 1757003940823663040ull, 15992477750210886639ull, 8951685707421636454ull}}, {{4490316656418607360ull, 8015656490655871256ull, 5383612575454416245ull, 5594803567138522784ull}}, {{5612895820523259200ull, 14631256631747226974ull, 6729515719318020306ull, 6993504458923153480ull}}, {{16239491812508849808ull, 9065698752829257909ull, 8411894649147525383ull, 8741880573653941850ull}}, {{12455525392031725082ull, 12583590748159368049ull, 9869120174144591268ull, 5463675358533713656ull}}, {{1734348684757492640ull, 15729488435199210062ull, 12336400217680739085ull, 6829594198167142070ull}}, {{11391307892801641608ull, 5826802488716848865ull, 6197128235246148049ull, 8536992747708927588ull}}, {{202038405359944149ull, 15170966601516500301ull, 13096577183883618338ull, 5335620467318079742ull}}, {{4864234025127318090ull, 9740336215040849568ull, 7147349442999747115ull, 6669525584147599678ull}}, {{6080292531409147613ull, 7563734250373674056ull, 18157558840604459702ull, 8336906980184499597ull}}, {{3800182832130717258ull, 115647888056158381ull, 13654317284591481266ull, 5210566862615312248ull}}, {{9361914558590784477ull, 9367931896924973784ull, 17067896605739351582ull, 6513208578269140310ull}}, {{11702393198238480596ull, 2486542834301441422ull, 12111498720319413670ull, 8141510722836425388ull}}, {{2702309730471662469ull, 15389147326720564601ull, 16793058737054409351ull, 5088444201772765867ull}}, {{7989573181516965990ull, 14624748139973317847ull, 16379637402890623785ull, 6360555252215957334ull}}, {{5375280458468819583ull, 4445877119684483597ull, 11251174716758503924ull, 7950694065269946668ull}}, {{5665393295756706191ull, 12002045236657578056ull, 16255356234828840760ull, 4969183790793716667ull}}, {{7081741619695882739ull, 15002556545821972570ull, 15707509275108663046ull, 6211479738492145834ull}}, {{18075549061474629232ull, 9529823645422689904ull, 10411014557031053000ull, 7764349673115182293ull}}, {{11297218163421643270ull, 5956139778389181190ull, 8812727107358102077ull, 4852718545696988933ull}}, {{4898150667422278280ull, 12056860741413864392ull, 15627594902625015500ull, 6065898182121236166ull}}, {{6122688334277847849ull, 15071075926767330490ull, 10311121591426493567ull, 7582372727651545208ull}}, {{8438366227351042810ull, 16336951481870663412ull, 6444450994641558479ull, 4738982954782215755ull}}, {{10547957784188803512ull, 15809503333910941361ull, 3443877724874560195ull, 5923728693477769694ull}}, {{17796633248663392294ull, 15150193148961288797ull, 13528219192947976052ull, 7404660866847212117ull}}, {{13428738789628314136ull, 245498681246029690ull, 10760980004806178985ull, 4627913041779507573ull}}, {{7562551450180616862ull, 4918559369984925017ull, 18062911024435111635ull, 5784891302224384466ull}}, {{14064875331153158981ull, 1536513194053768367ull, 13355266743689113736ull, 7231114127780480583ull}}, {{12969408145514060823ull, 1920641492567210459ull, 12082397411184004266ull, 9038892659725600729ull}}, {{5800037081732594062ull, 5812086951281894441ull, 633969354348920810ull, 5649307912328500456ull}}, {{11861732370593130482ull, 16488480725957143859ull, 792461692936151012ull, 7061634890410625570ull}}, {{10215479444814025198ull, 2163856833736878208ull, 10213949153024964574ull, 8827043613013281962ull}}, {{6384674653008765749ull, 15187468576367712592ull, 10995404239067990762ull, 5516902258133301226ull}}, {{7980843316260957186ull, 9760963683604864932ull, 4520883261980212645ull, 6896127822666626533ull}}, {{9976054145326196483ull, 16812890622933469069ull, 10262790095902653710ull, 8620159778333283166ull}}, {{8540876850042566754ull, 5896370620906030264ull, 1802557791511770665ull, 5387599861458301979ull}}, {{10676096062553208442ull, 11982149294559925734ull, 16088255294671877043ull, 6734499826822877473ull}}, {{4121748041336734745ull, 10366000599772519264ull, 6275261063057682592ull, 8418124783528596842ull}}, {{2576092525835459216ull, 6478750374857824540ull, 8533724182838439524ull, 5261327989705373026ull}}, {{3220115657294324019ull, 8098437968572280675ull, 1443783191693273597ull, 6576659987131716283ull}}, {{17860202626900068736ull, 14734733479142738747ull, 15639787044898755708ull, 8220824983914645353ull}}, {{8856783632598849008ull, 18432580461318987525ull, 2857337875420640461ull, 5138015614946653346ull}}, {{15682665559175949164ull, 9205667521366570694ull, 12795044381130576385ull, 6422519518683316682ull}}, {{10379959912115160647ull, 16118770420135601272ull, 6770433439558444673ull, 8028149398354145853ull}}, {{6487474945071975405ull, 3156702484943668939ull, 6537363908937721873ull, 5017593373971341158ull}}, {{3497657662912581352ull, 8557564124606974078ull, 17395076923026928149ull, 6271991717464176447ull}}, {{13595444115495502497ull, 15308641174186105501ull, 17132160135356272282ull, 7839989646830220559ull}}, {{10802995581398383013ull, 14179586752293703842ull, 17625129112238752032ull, 4899993529268887849ull}}, {{4280372439893202958ull, 17724483440367129803ull, 8196353335016276328ull, 6124991911586109812ull}}, {{738779531439115794ull, 3708860226749360638ull, 10245441668770345411ull, 7656239889482637265ull}}, {{14296795262431611083ull, 12194632504656446ull, 17932616089049935642ull, 4785149930926648290ull}}, {{8647622041184738046ull, 9238615327485596366ull, 13192398074457643744ull, 5981437413658310363ull}}, {{1586155514626146749ull, 11548269159356995458ull, 11878811574644666776ull, 7476796767072887954ull}}, {{5603033215068729622ull, 7217668224598122161ull, 12035943252580304639ull, 4672997979420554971ull}}, {{11615477537263299932ull, 4410399262320264797ull, 10433243047297992895ull, 5841247474275693714ull}}, {{684288866296961203ull, 901313059472943093ull, 3818181772267715311ull, 7301559342844617143ull}}, {{5467047101298589407ull, 14961699379623342578ull, 161041196907256234ull, 9126949178555771429ull}}, {{8028590456739006284ull, 13962748130691977015ull, 2406493757280729098ull, 5704343236597357143ull}}, {{5424052052496369951ull, 8230063126510195461ull, 16843175251883075085ull, 7130429045746696428ull}}, {{11391751084047850342ull, 14899264926565132230ull, 2607224991144292240ull, 8913036307183370536ull}}, {{2508158409102518560ull, 9312040579103207644ull, 1629515619465182650ull, 5570647691989606585ull}}, {{3135198011378148200ull, 2416678687024233747ull, 6648580542758866217ull, 6963309614987008231ull}}, {{17754055569504848962ull, 7632534377207680087ull, 3699039660021194867ull, 8704137018733760289ull}}, {{18013813758581612457ull, 2464490976541106102ull, 13841114833581716552ull, 5440085636708600180ull}}, {{13293895161372239763ull, 3080613720676382628ull, 17301393541977145690ull, 6800107045885750225ull}}, {{16617368951715299704ull, 13074139187700254093ull, 7791683872189268400ull, 8500133807357187782ull}}, {{12691698604035756267ull, 8171336992312658808ull, 258116401690904846ull, 5312583629598242364ull}}, {{15864623255044695334ull, 990799203536047702ull, 322645502113631058ull, 6640729536997802955ull}}, {{10607407031951093359ull, 10461871041274835436ull, 14238364932924202534ull, 8300911921247253693ull}}, {{15853001431824209158ull, 1926983382369384243ull, 11204821092291320536ull, 5188069950779533558ull}}, {{15204565771352873543ull, 2408729227961730304ull, 4782654328509374862ull, 6485087438474416948ull}}, {{558963140481540313ull, 12234283571806938689ull, 5978317910636718577ull, 8106359298093021185ull}}, {{11878567008869432456ull, 728898204738254824ull, 15265663740216418871ull, 5066474561308138240ull}}, {{14848208761086790569ull, 14746180811204982242ull, 635335601560971972ull, 6333093201635172801ull}}, {{9336888914503712404ull, 18432726014006227803ull, 5405855520378602869ull, 7916366502043966001ull}}, {{3529712562351126301ull, 13826296767967586329ull, 14907874746305096553ull, 4947729063777478750ull}}, {{9023826721366295780ull, 3447812904677319199ull, 9411471396026594884ull, 6184661329721848438ull}}, {{6668097383280481820ull, 4309766130846648999ull, 2540967208178467797ull, 7730826662152310548ull}}, {{11085089892191382994ull, 4999446840992849576ull, 10811476541966318181ull, 4831766663845194092ull}}, {{13856362365239228742ull, 10860994569668449874ull, 13514345677457897726ull, 6039708329806492615ull}}, {{8097080919694260120ull, 4352871175230786535ull, 12281246078394984254ull, 7549635412258115769ull}}, {{11978204602449994431ull, 16555602539801405296ull, 758249771355783302ull, 4718522132661322356ull}}, {{14972755753062493039ull, 11471131137896980812ull, 947812214194729128ull, 5898152665826652945ull}}, {{269200617618564682ull, 14338913922371226016ull, 5796451286170799314ull, 7372690832283316181ull}}, {{336500772023205852ull, 8700270366109256712ull, 11857250126140887047ull, 9215863540354145226ull}}, {{210312982514503658ull, 12355198006459367301ull, 12022467347265442308ull, 5759914712721340766ull}}, {{4874577246570517476ull, 15443997508074209126ull, 5804712147227027077ull, 7199893390901675958ull}}, {{15316593595067922653ull, 5469938829810597695ull, 16479262220888559655ull, 8999866738627094947ull}}, {{16490400024558533514ull, 10336240796272705415ull, 7993695878841655832ull, 5624916711641934342ull}}, {{16001314012270778989ull, 12920300995340881769ull, 768747811697293982ull, 7031145889552417928ull}}, {{6166584460056310024ull, 6927004207321326404ull, 960934764621617478ull, 8788932361940522410ull}}, {{13077487324389969573ull, 18164435684857992714ull, 5212270246315898827ull, 5493082726212826506ull}}, {{7123487118632686158ull, 18093858587645102989ull, 15738709844749649342ull, 6866353407766033132ull}}, {{13516044916718245602ull, 13393951197701602928ull, 1226643232227510062ull, 8582941759707541416ull}}, {{8447528072948903501ull, 3759533480136113926ull, 766652020142193789ull, 5364338599817213385ull}}, {{1336038054331353569ull, 9311102868597530312ull, 5570001043605130140ull, 6705423249771516731ull}}, {{1670047567914191961ull, 11638878585746912890ull, 2350815286079024771ull, 8381779062214395914ull}}, {{5655465748373757880ull, 4968456106878126604ull, 6080945572226778386ull, 5238611913883997446ull}}, {{7069332185467197349ull, 15433942170452434063ull, 16824554002138248790ull, 6548264892354996807ull}}, {{4224979213406608783ull, 10069055676210766771ull, 16419006484245423084ull, 8185331115443746009ull}}, {{334768999165436537ull, 15516531834486505040ull, 3344350025012307571ull, 5115831947152341256ull}}, {{418461248956795672ull, 14783978774680743396ull, 4180437531265384464ull, 6394789933940426570ull}}, {{523076561195994589ull, 33229394641377629ull, 14448918950936506389ull, 7993487417425533212ull}}, {{2632765859961190570ull, 2326611380864554970ull, 18253946381190092301ull, 4995929635890958257ull}}, {{12514329361806264021ull, 7519950244508081616ull, 8982374921205451664ull, 6244912044863697822ull}}, {{15642911702257830026ull, 9399937805635102020ull, 2004596614652038772ull, 7806140056079622278ull}}, {{553447777056367958ull, 15098333165376714571ull, 15087930939439687944ull, 4878837535049763923ull}}, {{14526867776602623660ull, 426172383011341597ull, 14248227655872222027ull, 6098546918812204904ull}}, {{4323526665471115863ull, 14367773534046340709ull, 17810284569840277533ull, 7623183648515256130ull}}, {{5008047175133141366ull, 11285701467992656895ull, 15743113874577561362ull, 4764489780322035081ull}}, {{1648372950489038804ull, 4883754798136045311ull, 5843834287939787991ull, 5955612225402543852ull}}, {{15895524243393462217ull, 1493007479242668734ull, 7304792859924734989ull, 7444515281753179815ull}}, {{5323016633693525982ull, 3238972683740361911ull, 11483024565094041224ull, 4652822051095737384ull}}, {{2042084773689519573ull, 4048715854675452389ull, 14353780706367551530ull, 5816027563869671730ull}}, {{7164291985539287370ull, 14284266855199091294ull, 8718853846104663604ull, 7270034454837089663ull}}, {{18178737018778885021ull, 17855333568998864117ull, 6286881289203441601ull, 9087543068546362079ull}}, {{13667553645950497090ull, 4242054452983208217ull, 10846829833393232857ull, 5679714417841476299ull}}, {{3249384002155957650ull, 9914254084656398176ull, 8946851273314153167ull, 7099643022301845374ull}}, {{4061730002694947063ull, 7781131587393109816ull, 1960192054787915651ull, 8874553777877306718ull}}, {{2538581251684341914ull, 2557364232906999683ull, 15060178089524610994ull, 5546596111173316698ull}}, {{17008284619887591105ull, 12420077327988525411ull, 9601850575050987934ull, 6933245138966645873ull}}, {{16648669756432100977ull, 6301724623130880956ull, 16613999237241122822ull, 8666556423708307341ull}}, {{1182046560915287303ull, 17773635944738964310ull, 12689592532489395715ull, 5416597764817692088ull}}, {{10700930237998884936ull, 17605358912496317483ull, 15861990665611744644ull, 6770747206022115110ull}}, {{8764476779071218266ull, 3559954566910845238ull, 10604116295159904998ull, 8463434007527643888ull}}, {{866111968492123513ull, 16060029659601441986ull, 6627572684474940623ull, 5289646254704777430ull}}, {{10306011997469930199ull, 15463351056074414578ull, 17507837892448451587ull, 6612057818380971787ull}}, {{3659142959982636940ull, 14717502801665630319ull, 17273111347133176580ull, 8265072272976214734ull}}, {{9204493377630229944ull, 18421811287895794757ull, 6184008573530847458ull, 5165670170610134209ull}}, {{16117302740465175334ull, 13803892073014967638ull, 12341696735340947227ull, 6457087713262667761ull}}, {{10923256388726693359ull, 12643179072841321644ull, 1592062863894020322ull, 8071359641578334702ull}}, {{16050407279808959158ull, 12513672938953213931ull, 14830097345215926413ull, 5044599775986459188ull}}, {{15451323081333811043ull, 1807033118409353702ull, 90877607810356401ull, 6305749719983073986ull}}, {{10090781814812487996ull, 6870477416439080032ull, 9336969046617721309ull, 7882187149978842482ull}}, {{6306738634257804997ull, 6599891394488118972ull, 10447291672563463722ull, 4926366968736776551ull}}, {{7883423292822256247ull, 17473236279964924523ull, 8447428572276941748ull, 6157958710920970689ull}}, {{5242593097600432404ull, 3394801276246604038ull, 15170971733773565090ull, 7697448388651213361ull}}, {{17111678741282433965ull, 6733436816081515427ull, 2564328305967396325ull, 4810905242907008351ull}}, {{16777912408175654552ull, 13028482038529282188ull, 17040468437741409118ull, 6013631553633760438ull}}, {{2525646436510016574ull, 7062230511306826928ull, 12077213510321985590ull, 7517039442042200548ull}}, {{1578529022818760359ull, 18248952124848930542ull, 16771630480806016801ull, 4698149651276375342ull}}, {{11196533315378226256ull, 8976132100778999465ull, 11741166064152745194ull, 5872687064095469178ull}}, {{160608588940619108ull, 1996793089118973524ull, 5453085543336155685ull, 7340858830119336473ull}}, {{200760736175773885ull, 7107677379826104809ull, 11428042947597582510ull, 9176073537649170591ull}}, {{11654690506178328438ull, 18277356417673479217ull, 14060055869889570924ull, 5735045961030731619ull}}, {{733305077440746836ull, 4399951448382297406ull, 12963383818934575752ull, 7168807451288414524ull}}, {{10140003383655709353ull, 5499939310477871757ull, 16204229773668219690ull, 8961009314110518155ull}}, {{8643345123998512298ull, 8049148087476057752ull, 7821800599328943354ull, 5600630821319073847ull}}, {{10804181404998140372ull, 838063072490296382ull, 5165564730733791289ull, 7000788526648842309ull}}, {{4281854719392899657ull, 5659264859040258382ull, 11068641931844627015ull, 8750985658311052886ull}}, {{16511217254902725998ull, 10454569564541243344ull, 2306215188975503980ull, 5469366036444408054ull}}, {{2192277494918855881ull, 13068211955676554181ull, 12106141023074155783ull, 6836707545555510067ull}}, {{7352032887075957755ull, 11723578926168304822ull, 10520990260415306825ull, 8545884431944387584ull}}, {{18430078609704637309ull, 409707801214108657ull, 6575618912759566766ull, 5341177769965242240ull}}, {{9202540206848632924ull, 9735506788372411630ull, 8219523640949458457ull, 6676472212456552800ull}}, {{2279803221706015347ull, 16781069503892902442ull, 10274404551186823071ull, 8345590265570691000ull}}, {{6036563031993647496ull, 17405697467574145882ull, 6421502844491764419ull, 5215993915981681875ull}}, {{16769075826846835178ull, 17145435816040294448ull, 3415192537187317620ull, 6519992394977102344ull}}, {{2514600709848992357ull, 2985050696340816445ull, 4268990671484147026ull, 8149990493721377930ull}}, {{3877468452869314175ull, 6477342703640398182ull, 7279805188104979795ull, 5093744058575861206ull}}, {{14070207602941418527ull, 3484992361123109823ull, 18323128521986000552ull, 6367180073219826507ull}}, {{12976073485249385254ull, 4356240451403887279ull, 18292224634055112786ull, 7958975091524783134ull}}, {{15027574955921947640ull, 7334336300554817453ull, 6820954377857057587ull, 4974359432202989459ull}}, {{4949410639620270838ull, 4556234357266133913ull, 3914506953893934080ull, 6217949290253736824ull}}, {{10798449317952726451ull, 5695292946582667391ull, 4893133692367417600ull, 7772436612817171030ull}}, {{13666559851361535888ull, 3559558091614167119ull, 16893266613011799712ull, 4857772883010731893ull}}, {{12471513795774531956ull, 4449447614517708899ull, 7281525210982585928ull, 6072216103763414867ull}}, {{10977706226290777041ull, 5561809518147136124ull, 4490220495300844506ull, 7590270129704268584ull}}, {{16084438428286511459ull, 8087816967269347981ull, 2806387809563027816ull, 4743918831065167865ull}}, {{6270489980075975611ull, 10109771209086684977ull, 8119670780381172674ull, 5929898538831459831ull}}, {{12449798493522357418ull, 3413841974503580413ull, 5537902457049077939ull, 7412373173539324789ull}}, {{10086967067665167339ull, 18274552298560595422ull, 5767032044869367663ull, 4632733233462077993ull}}, {{3385336797726683365ull, 18231504354773356374ull, 11820476074514097483ull, 5790916541827597491ull}}, {{13455043034013130014ull, 18177694425039307563ull, 10163909074715233950ull, 7238645677284496864ull}}, {{12207117774089024614ull, 13498745994444358646ull, 12704886343394042438ull, 9048307096605621080ull}}, {{3017762590378252480ull, 3825030228100336250ull, 7940553964621276524ull, 5655191935378513175ull}}, {{12995575274827591408ull, 4781287785125420312ull, 5314006437349207751ull, 7068989919223141469ull}}, {{16244469093534489259ull, 1364923712979387486ull, 11254194065113897593ull, 8836237399028926836ull}}, {{5541107165031667883ull, 12382292366680586939ull, 16257243327550961803ull, 5522648374393079272ull}}, {{2314697937862196950ull, 10866179439923345770ull, 1874810085729150638ull, 6903310467991349091ull}}, {{12116744459182521995ull, 4359352263049406404ull, 16178570662443602010ull, 8629138084989186363ull}}, {{16796337323843852055ull, 7336281182833266906ull, 7805763654813557304ull, 5393211303118241477ull}}, {{11772049617950039261ull, 9170351478541583633ull, 14368890586944334534ull, 6741514128897801846ull}}, {{880003967155385364ull, 2239567311322203734ull, 8737741196825642360ull, 8426892661122252308ull}}, {{14385060534754279565ull, 1399729569576377333ull, 14684460284870802283ull, 5266807913201407692ull}}, {{4146267613160685744ull, 15584720017252635379ull, 18355575356088502853ull, 6583509891501759615ull}}, {{571148498023469276ull, 5645841966283630512ull, 18332783176683240663ull, 8229387364377199519ull}}, {{356967811264668297ull, 10446180256568350926ull, 18375518513068107270ull, 5143367102735749699ull}}, {{9669581800935611180ull, 3834353283855662849ull, 18357712122907746184ull, 6429208878419687124ull}}, {{16698663269596901878ull, 4792941604819578561ull, 4500396079925131114ull, 8036511098024608906ull}}, {{3519135515856981818ull, 7607274521439624505ull, 7424433568380594850ull, 5022819436265380566ull}}, {{9010605413248615177ull, 285721114944754823ull, 57169923620967755ull, 6278524295331725708ull}}, {{6651570748133381067ull, 14192209448963107241ull, 71462404526209693ull, 7848155369164657135ull}}, {{15686446763651832927ull, 11175973914815635977ull, 6962193030469962914ull, 4905097105727910709ull}}, {{5773000399282627446ull, 4746595356664769164ull, 13314427306514841547ull, 6131371382159888386ull}}, {{7216250499103284308ull, 1321558177403573551ull, 7419662096288776126ull, 7664214227699860483ull}}, {{11427685589580634549ull, 14661031916159397181ull, 2331445800966791126ull, 4790133892312412802ull}}, {{449548931693629474ull, 9102917858344470669ull, 12137679288063264716ull, 5987667365390516002ull}}, {{5173622183044424746ull, 11378647322930588336ull, 5948727073224305087ull, 7484584206738145003ull}}, {{3233513864402765466ull, 14029183604472699566ull, 1412111411551496727ull, 4677865129211340627ull}}, {{13265264367358232641ull, 12924793487163486553ull, 15600197319721534621ull, 5847331411514175783ull}}, {{2746522403915627089ull, 2320933803672194480ull, 14888560631224530373ull, 7309164264392719729ull}}, {{3433153004894533861ull, 7512853273017631004ull, 4775642733748499254ull, 9136455330490899662ull}}, {{11369092664913859471ull, 83847277208631473ull, 16819834763874975746ull, 5710284581556812288ull}}, {{376307775860160627ull, 9328181133365565150ull, 2578049381134168066ull, 7137855726946015361ull}}, {{9693756756679976592ull, 2436854379852180629ull, 7834247744845097987ull, 8922319658682519201ull}}, {{8364440982138679322ull, 17663935051903470557ull, 16425619886596656001ull, 5576449786676574500ull}}, {{15067237246100737056ull, 8244860759597174484ull, 2085280784536268386ull, 6970562233345718126ull}}, {{387302483916369704ull, 1082703912641692298ull, 11829973017525111291ull, 8713202791682147657ull}}, {{4853750070875118969ull, 16817591009896915350ull, 476204108312112700ull, 5445751744801342286ull}}, {{15290559625448674520ull, 2575244688661592571ull, 9818627172244916684ull, 6807189681001677857ull}}, {{14501513513383455246ull, 3219055860826990714ull, 16884969983733533759ull, 8508987101252097321ull}}, {{13675131964292047433ull, 8929438940657951052ull, 3635577212192376743ull, 5318116938282560826ull}}, {{17093914955365059291ull, 6550112657395050911ull, 13767843552095246737ull, 6647646172853201032ull}}, {{16755707675778936209ull, 12799326840171201543ull, 17209804440119058421ull, 8309557716066501290ull}}, {{17389846325002916987ull, 10305422284320694916ull, 15367813793501799417ull, 5193473572541563306ull}}, {{3290563832544094618ull, 17493463873828256550ull, 9986395205022473463ull, 6491841965676954133ull}}, {{13336576827534894080ull, 17255143823857932783ull, 17094680024705479733ull, 8114802457096192666ull}}, {{15252889544850390656ull, 13090307899124901941ull, 15295861033868312737ull, 5071751535685120416ull}}, {{5231053875780824608ull, 2527826818623963715ull, 673082218625839306ull, 6339689419606400521ull}}, {{1927131326298642856ull, 12383155560134730452ull, 5453038791709687036ull, 7924611774508000651ull}}, {{10427829115791427593ull, 16962844261938982340ull, 1102306235604860445ull, 4952882359067500407ull}}, {{13034786394739284491ull, 7368497272141564213ull, 15212940849788239269ull, 6191102948834375508ull}}, {{2458424938141941902ull, 13822307608604343171ull, 569431988525747470ull, 7738878686042969386ull}}, {{17677416650834571353ull, 4027256236950326577ull, 4967581011255980073ull, 4836799178776855866ull}}, {{8261712758261050479ull, 9645756314615296126ull, 15432848300924750899ull, 6045998973471069832ull}}, {{1103768910971537291ull, 7445509374841732254ull, 844316302446387008ull, 7557498716838837291ull}}, {{14524913624639374519ull, 4653443359276082658ull, 16668598753524849544ull, 4723436698024273306ull}}, {{8932769993944442340ull, 5816804199095103323ull, 11612376405051286122ull, 5904295872530341633ull}}, {{6554276474003165021ull, 16494377285723654962ull, 680412451031943940ull, 7380369840662927042ull}}, {{8708108814679366043ull, 1085613766722508543ull, 5036943800322352867ull, 4612731150414329401ull}}, {{6273449999921819649ull, 15192075263685299391ull, 10907865768830328987ull, 5765913938017911751ull}}, {{3230126481474886657ull, 14378408061179236335ull, 9023146192610523330ull, 7207392422522389689ull}}, {{17872716157125772033ull, 8749638039619269610ull, 15890618759190542067ull, 9009240528152987111ull}}, {{15782133616630995425ull, 3162680765548349554ull, 16849165752135170648ull, 5630775330095616944ull}}, {{10504294983933968473ull, 3953350956935436943ull, 2614713116459411694ull, 7038469162619521181ull}}, {{8518682711490072687ull, 14165060733024071987ull, 7880077414001652521ull, 8798086453274401476ull}}, {{3018333685467601478ull, 1935633930498963136ull, 14148420420605808634ull, 5498804033296500922ull}}, {{3772917106834501847ull, 11642914449978479728ull, 8462153488902484984ull, 6873505041620626153ull}}, {{4716146383543127309ull, 14553643062473099660ull, 15189377879555494134ull, 8591881302025782691ull}}, {{12170963526569230376ull, 4484340895618299383ull, 7187518165508489882ull, 5369925813766114182ull}}, {{10602018389784150066ull, 14828798156377650037ull, 18207769743740388160ull, 6712407267207642727ull}}, {{17864209005657575486ull, 89253621762510930ull, 18148026161248097297ull, 8390509084009553409ull}}, {{15776816646963372583ull, 11584998559670039091ull, 4424987323138978954ull, 5244068177505970881ull}}, {{15109334790276827825ull, 5257876162732773056ull, 10142920172351111597ull, 6555085221882463601ull}}, {{439924414136483165ull, 11184031221843354225ull, 17290336233866277400ull, 8193856527353079501ull}}, {{11804167804903771738ull, 6990019513652096390ull, 13112303155380117327ull, 5121160329595674688ull}}, {{5531837719274938865ull, 4125838373637732584ull, 16390378944225146659ull, 6401450411994593360ull}}, {{6914797149093673581ull, 545611948619777826ull, 2041229606571881708ull, 8001813014993241701ull}}, {{8933434236610933892ull, 9564379504742136949ull, 3581611513321120019ull, 5001133134370776063ull}}, {{15778478814191055269ull, 7343788362500283282ull, 18312072446933563736ull, 6251416417963470078ull}}, {{10499726480884043278ull, 9179735453125354103ull, 13666718521812178862ull, 7814270522454337598ull}}, {{13479858078193608905ull, 1125648639775958410ull, 3930013057705223885ull, 4883919076533960999ull}}, {{7626450560887235323ull, 6018746818147335917ull, 300830303704141952ull, 6104898845667451249ull}}, {{14144749219536432058ull, 7523433522684169896ull, 4987723898057565344ull, 7631123557084314061ull}}, {{8840468262210270036ull, 4702145951677606185ull, 5423170445499672292ull, 4769452223177696288ull}}, {{15662271346190225449ull, 5877682439597007731ull, 6778963056874590365ull, 5961815278972120360ull}}, {{14966153164310393908ull, 11958789067923647568ull, 8473703821093237956ull, 7452269098715150450ull}}, {{9353845727693996192ull, 16697615204307055538ull, 9907750906610661626ull, 4657668186696969031ull}}, {{2468935122762719432ull, 11648646968529043615ull, 7773002614835939129ull, 5822085233371211289ull}}, {{16921226958735563002ull, 725750655379140806ull, 14327939286972311816ull, 7277606541714014111ull}}, {{11928161661564677945ull, 907188319223926008ull, 13298238090288001866ull, 9097008177142517639ull}}, {{7455101038477923716ull, 5178678717942341659ull, 15228927834071083022ull, 5685630110714073524ull}}, {{4707190279670016741ull, 15696720434282702882ull, 589415718879302161ull, 7107037638392591906ull}}, {{15107359886442296734ull, 5785842487571214890ull, 9960141685453903510ull, 8883797047990739882ull}}, {{14053785947453823363ull, 17451209610014173018ull, 10836774571836077597ull, 5552373154994212426ull}}, {{8343860397462503395ull, 7978953957235552561ull, 4322596177940321189ull, 6940466443742765533ull}}, {{15041511515255517148ull, 14585378464971828605ull, 10014931240852789390ull, 8675583054678456916ull}}, {{11706787706248392170ull, 4504175522180004974ull, 15482704062387769177ull, 5422239409174035572ull}}, {{5410112595955714404ull, 10241905421152394122ull, 906636004275159855ull, 6777799261467544466ull}}, {{15986012781799418813ull, 8190695758013104748ull, 10356667042198725627ull, 8472249076834430582ull}}, {{767885951769860950ull, 2813341839544496516ull, 1861230882946815613ull, 5295155673021519114ull}}, {{959857439712326188ull, 8128363317858008549ull, 11549910640538295324ull, 6618944591276898892ull}}, {{5811507818067795638ull, 10160454147322510686ull, 14437388300672869155ull, 8273680739096123615ull}}, {{17467250441574535986ull, 4044440832862875226ull, 15940896715561625078ull, 5171050461935077259ull}}, {{12610691015113394175ull, 14278923077933369841ull, 15314434876024643443ull, 6463813077418846574ull}}, {{1928305713609579006ull, 13236967828989324398ull, 9919671558176028496ull, 8079766346773558218ull}}, {{15040249126288150591ull, 8273104893118327748ull, 10811480742287405714ull, 5049853966733473886ull}}, {{353567334150636623ull, 1118009079543133878ull, 4290978891004481335ull, 6312317458416842358ull}}, {{9665331204543071586ull, 15232569404711081059ull, 14587095650610377476ull, 7890396823021052947ull}}, {{3734988993625725790ull, 296983841089649854ull, 6811091772417791971ull, 4931498014388158092ull}}, {{13892108278886933045ull, 14206287856644226029ull, 8513864715522239963ull, 6164372517985197615ull}}, {{3530077293326502594ull, 13146173802377894633ull, 6030644875975412050ull, 7705465647481497019ull}}, {{13735513354397533881ull, 12828044644913572049ull, 1463310038270938579ull, 4815916029675935637ull}}, {{3334333637714753640ull, 11423369787714577158ull, 6440823566266061128ull, 6019895037094919546ull}}, {{13391289083998217857ull, 14279212234643221447ull, 17274401494687352218ull, 7524868796368649432ull}}, {{15287084705139968017ull, 13536193665079401308ull, 10796500934179595136ull, 4703042997730405895ull}}, {{662111807715408405ull, 16920242081349251636ull, 8883940149297106016ull, 5878803747163007369ull}}, {{827639759644260506ull, 2703558527977012929ull, 15716611205048770425ull, 7348504683953759211ull}}, {{5646235717982713537ull, 7991134178398654065ull, 15034077987883575127ull, 9185630854942199014ull}}, {{15058112369807665721ull, 11911987889140240646ull, 4784612723999846550ull, 5741019284338874384ull}}, {{9599268425404806343ull, 5666612824570525000ull, 5980765904999808188ull, 7176274105423592980ull}}, {{11999085531756007928ull, 7083266030713156250ull, 7475957381249760235ull, 8970342631779491225ull}}, {{12111114475774892859ull, 2121198259982028704ull, 16201688409349569907ull, 5606464144862182015ull}}, {{15138893094718616074ull, 16486555880259699592ull, 15640424493259574479ull, 7008080181077727519ull}}, {{476872294688718476ull, 15996508831897236587ull, 14938844598147080195ull, 8760100226347159399ull}}, {{16438946248676306712ull, 7691975010722078914ull, 16254306901483006978ull, 5475062641466974624ull}}, {{11325310773990607582ull, 391596726547822835ull, 1871139553144207107ull, 6843828301833718281ull}}, {{9544952449060871573ull, 14324553963466942256ull, 6950610459857646787ull, 8554785377292147851ull}}, {{5965595280663044733ull, 6647003217953144958ull, 2038288528197335290ull, 5346740860807592407ull}}, {{16680366137683581725ull, 17532126059296207005ull, 16382918715528832824ull, 6683426076009490508ull}}, {{7015399616822313444ull, 3468413500410707141ull, 2031904320701489415ull, 8354282595011863136ull}}, {{6690467769727639854ull, 9085287465397773819ull, 1269940200438430884ull, 5221426621882414460ull}}, {{3751398693732161914ull, 11356609331747217274ull, 1587425250548038605ull, 6526783277353018075ull}}, {{13912620404019978200ull, 360703609401857880ull, 15819339618467211969ull, 8158479096691272593ull}}, {{8695387752512486375ull, 11754654801944630935ull, 2969558233900925624ull, 5099049435432045371ull}}, {{6257548672213220065ull, 14693318502430788669ull, 17547005847658320742ull, 6373811794290056713ull}}, {{12433621858693912985ull, 9143276091183710028ull, 8098699254290737216ull, 7967264742862570892ull}}, {{16994385698538471424ull, 5714547556989818767ull, 14285059070786486568ull, 4979540464289106807ull}}, {{16631296104745701376ull, 7143184446237273459ull, 13244637820055720306ull, 6224425580361383509ull}}, {{16177434112504738816ull, 18152352594651367632ull, 2720739219787486670ull, 7780531975451729387ull}}, {{10110896320315461760ull, 6733534353229716866ull, 17841363076863036833ull, 4862832484657330866ull}}, {{3415248363539551392ull, 13028603959964533987ull, 13078331809224020233ull, 6078540605821663583ull}}, {{18104118509706602952ull, 2450696894673503771ull, 11736228743102637388ull, 7598175757277079479ull}}, {{9009231059352932893ull, 10755057596025715665ull, 14252671992080230223ull, 4748859848298174674ull}}, {{15873224842618554020ull, 8832135976604756677ull, 8592467953245511971ull, 5936074810372718343ull}}, {{6006472997991028813ull, 6428483952328557943ull, 6128898923129502060ull, 7420093512965897929ull}}, {{10671574651385474864ull, 13241174507060124522ull, 15359776873024408547ull, 4637558445603686205ull}}, {{4116096277377067772ull, 11939782115397767749ull, 5364663035998346972ull, 5796948057004607757ull}}, {{9756806365148722619ull, 14924727644247209686ull, 11317514813425321619ull, 7246185071255759696ull}}, {{2972635919581127466ull, 14044223536881624204ull, 14146893516781652024ull, 9057731339069699620ull}}, {{11081269486592980474ull, 8777639710551015127ull, 18065180484843308323ull, 5661082086918562262ull}}, {{9239900839813837689ull, 6360363619761381005ull, 13358103569199359596ull, 7076352608648202828ull}}, {{16161562068194685015ull, 7950454524701726256ull, 16697629461499199495ull, 8845440760810253535ull}}, {{10100976292621678135ull, 11886563105579660766ull, 17353547441078081540ull, 5528400475506408459ull}}, {{3402848328922321860ull, 14858203881974575958ull, 17080248282920214021ull, 6910500594383010574ull}}, {{13476932448007678133ull, 4737696797186056235ull, 12126938316795491719ull, 8638125742978763218ull}}, {{6117239770791104881ull, 9878589525882367003ull, 12191022466424570228ull, 5398828589361727011ull}}, {{3034863695061493197ull, 12348236907352958754ull, 10627092064603324881ull, 6748535736702158764ull}}, {{13016951655681642305ull, 1600238078909034730ull, 13283865080754156102ull, 8435669670877698455ull}}, {{12747280803228414345ull, 14835206854600310418ull, 15219944703112429419ull, 5272293544298561534ull}}, {{6710728967180742123ull, 13932322549823000119ull, 9801558842035760966ull, 6590366930373201918ull}}, {{3776725190548539749ull, 8192031150423974341ull, 3028576515689925400ull, 8237958662966502398ull}}, {{4666296253306531295ull, 5120019469014983963ull, 15727918377588367087ull, 5148724164354063998ull}}, {{1221184298205776215ull, 1788338317841342050ull, 10436525935130683051ull, 6435905205442579998ull}}, {{10749852409611996077ull, 16070480952583841274ull, 3822285382058578005ull, 8044881506803224998ull}}, {{11330343774434885452ull, 12349893604578594748ull, 16223986419068774965ull, 5028050941752015623ull}}, {{14162929718043606815ull, 1602308950441079723ull, 15668297005408580803ull, 6285063677190019529ull}}, {{13091976129127120615ull, 15837944243333513366ull, 5750313201478562291ull, 7856329596487524412ull}}, {{3570799062277062480ull, 7592872142869751902ull, 12817317787778877240ull, 4910205997804702757ull}}, {{13686870864701103908ull, 9491090178587189877ull, 2186589179441432838ull, 6137757497255878447ull}}, {{3273530525594216173ull, 2640490686379211539ull, 16568294529583954760ull, 7672196871569848058ull}}, {{18186857642992242773ull, 1650306678987007211ull, 14966870099417359629ull, 4795123044731155036ull}}, {{18121886035312915562ull, 6674569367161146918ull, 261843550562147920ull, 5993903805913943796ull}}, {{13428985507286368644ull, 8343211708951433648ull, 327304438202684900ull, 7492379757392429745ull}}, {{8393115942053980403ull, 14437879354949421838ull, 11733780319945147822ull, 4682737348370268590ull}}, {{1268022890712699695ull, 8823977156832001490ull, 5443853363076658970ull, 5853421685462835738ull}}, {{10808400650245650427ull, 1806599409185226054ull, 16028188740700599521ull, 7316777106828544672ull}}, {{4287128775952287225ull, 6869935279908920472ull, 1588491852166197785ull, 9145971383535680841ull}}, {{2679455484970179516ull, 15822924596011545055ull, 12522022453672343375ull, 5716232114709800525ull}}, {{17184377411494888107ull, 15166969726587043414ull, 1817470011808265507ull, 7145290143387250657ull}}, {{12257099727513834326ull, 14347026139806416364ull, 6883523533187719788ull, 8931612679234063321ull}}, {{16884059366550922262ull, 18190263374233786035ull, 15831417254310794627ull, 5582257924521289575ull}}, {{16493388189761264923ull, 18126143199364844640ull, 15177585549461105380ull, 6977822405651611969ull}}, {{2169991163492029538ull, 4210934925496504185ull, 5136923881544218014ull, 8722278007064514962ull}}, {{12885459523250988221ull, 16466892383717478827ull, 7822263444392524162ull, 5451423754415321851ull}}, {{11495138385636347372ull, 11360243442792072726ull, 5166143287063267299ull, 6814279693019152314ull}}, {{5145550945190658407ull, 9588618285062703004ull, 15681051145683859932ull, 8517849616273940392ull}}, {{12439341377598937313ull, 15216258465018965185ull, 9800656966052412457ull, 5323656010171212745ull}}, {{1714118666716507929ull, 5185265025991542770ull, 16862507225992903476ull, 6654570012714015931ull}}, {{11366020370250410719ull, 6481581282489428462ull, 16466448014063741441ull, 8318212515892519914ull}}, {{2492076712979118795ull, 15580203347624362549ull, 14903216027217226304ull, 5198882822432824946ull}}, {{7726781909651286398ull, 1028510110820901570ull, 9405647997166757073ull, 6498603528041031183ull}}, {{435105350209332190ull, 5897323656953514867ull, 7145373978031058437ull, 8123254410051288979ull}}, {{16412841908376690283ull, 5991670294809640743ull, 2160015727055717571ull, 5077034006282055612ull}}, {{15904366367043474949ull, 2877901850084663025ull, 2700019658819646964ull, 6346292507852569515ull}}, {{6045399903522179974ull, 3597377312605828782ull, 17210082628806722417ull, 7932865634815711893ull}}, {{17613432994983526196ull, 13777575866447112748ull, 13062144652217895462ull, 4958041021759819933ull}}, {{3570047170019856129ull, 7998597796204115128ull, 2492622759990205616ull, 6197551277199774917ull}}, {{4462558962524820161ull, 9998247245255143910ull, 7727464468415144924ull, 7746939096499718646ull}}, {{16624157406860176313ull, 15472276565139240751ull, 217979274332077673ull, 4841836935312324154ull}}, {{16168510740147832487ull, 5505287651141887227ull, 9495846129769872900ull, 6052296169140405192ull}}, {{15598952406757402705ull, 6881609563927359034ull, 11869807662212341125ull, 7565370211425506490ull}}, {{14361031272650764595ull, 6606848986668293348ull, 12030315807310101107ull, 4728356382140941556ull}}, {{17951289090813455743ull, 3646875214907978781ull, 15037894759137626384ull, 5910445477676176945ull}}, {{8604053308234655967ull, 4558594018634973477ull, 4962310393639869268ull, 7388056847095221182ull}}, {{7683376326860353932ull, 12072493298501634231ull, 16936502051307082004ull, 4617535529434513238ull}}, {{4992534390148054510ull, 15090616623127042789ull, 11947255527279076697ull, 5771919411793141548ull}}, {{10852354006112456042ull, 5028212723626639774ull, 14934069409098845872ull, 7214899264741426935ull}}, {{4342070470785794244ull, 6285265904533299718ull, 14055900742946169436ull, 9018624080926783669ull}}, {{16548852099523285115ull, 13151663227188088131ull, 11090780973555049849ull, 5636640050579239793ull}}, {{16074379105976718489ull, 2604520978702946452ull, 28418161661648600ull, 7045800063224049742ull}}, {{1646229808761346495ull, 3255651223378683066ull, 9258894738931836558ull, 8807250079030062177ull}}, {{5640579648903229464ull, 15869840069893840628ull, 17316024257900867608ull, 5504531299393788860ull}}, {{7050724561129036830ull, 1390556013657749169ull, 3198286248666532895ull, 6880664124242236076ull}}, {{13425091719838683941ull, 15573253072354350173ull, 3997857810833166118ull, 8600830155302795095ull}}, {{10696525334112871415ull, 5121597151794080954ull, 9416190159411810680ull, 5375518847064246934ull}}, {{4147284630786313461ull, 6401996439742601193ull, 2546865662409987542ull, 6719398558830308668ull}}, {{9795791806910279730ull, 17225867586533027299ull, 3183582078012484427ull, 8399248198537885835ull}}, {{3816526870105230879ull, 8460324232369448110ull, 18130639863253660431ull, 5249530124086178646ull}}, {{13994030624486314407ull, 5963719272034422233ull, 13439927792212299731ull, 6561912655107723308ull}}, {{3657480225325729297ull, 2842963071615639888ull, 16799909740265374664ull, 8202390818884654135ull}}, {{2285925140828580811ull, 1776851919759774930ull, 17417472615306941021ull, 5126494261802908834ull}}, {{12080778462890501821ull, 6832750918127106566ull, 12548468732278900468ull, 6408117827253636043ull}}, {{5877601041758351469ull, 8540938647658883208ull, 11073899896921237681ull, 8010147284067045054ull}}, {{3673500651098969668ull, 16867301700855271765ull, 2309501417148385646ull, 5006342052541903159ull}}, {{9203561832301099989ull, 11860755089214313898ull, 16721934826717645770ull, 6257927565677378948ull}}, {{2281080253521599178ull, 5602571824663116565ull, 2455674459687505597ull, 7822409457096723686ull}}, {{3731518167664693438ull, 5807450399628141805ull, 15369854592586854710ull, 4889005910685452303ull}}, {{9276083728008254702ull, 16482685036389953064ull, 14600632222306180483ull, 6111257388356815379ull}}, {{11595104660010318377ull, 15991670277060053426ull, 13639104259455337700ull, 7639071735446019224ull}}, {{11858626430933836890ull, 771421886307757583ull, 8524440162159586063ull, 4774419834653762015ull}}, {{10211597020239908208ull, 14799335413166860691ull, 6043864184272094674ull, 5968024793317202519ull}}, {{8152810256872497356ull, 9275797229603800056ull, 2943144211912730439ull, 7460030991646503149ull}}, {{5095506410545310848ull, 12714902296143456891ull, 4145308141659150476ull, 4662519369779064468ull}}, {{1757696994754250656ull, 15893627870179321114ull, 5181635177073938095ull, 5828149212223830585ull}}, {{11420493280297589128ull, 15255348819296763488ull, 11088729989769810523ull, 7285186515279788231ull}}, {{14275616600371986409ull, 14457500005693566456ull, 9249226468784875250ull, 9106483144099735289ull}}, {{8922260375232491506ull, 13647623521985866939ull, 17309981589059016791ull, 5691551965062334555ull}}, {{6541139450613226478ull, 12447843384054945770ull, 17025790967896383085ull, 7114439956327918194ull}}, {{17399796350121308906ull, 1724746174786518500ull, 12058866673015703049ull, 8893049945409897743ull}}, {{1651500681971042258ull, 12607181405310043823ull, 14454320698275896261ull, 5558156215881186089ull}}, {{15899433907745966535ull, 1923918701355391066ull, 4232842817562706615ull, 6947695269851482612ull}}, {{10650920347827682360ull, 16239956431976402545ull, 5291053521953383268ull, 8684619087314353265ull}}, {{18186040263460771235ull, 926600733130475782ull, 14836123497289334303ull, 5427886929571470790ull}}, {{13509178292471188236ull, 14993308971695258440ull, 9321782334756892070ull, 6784858661964338488ull}}, {{16886472865588985295ull, 9518264177764297242ull, 11652227918446115088ull, 8481073327455423110ull}}, {{15165731559420503714ull, 5948915111102685776ull, 2670956430601434026ull, 5300670829659639444ull}}, {{510420375566078026ull, 16659515925733133029ull, 3338695538251792532ull, 6625838537074549305ull}}, {{5249711487884985436ull, 2377650833456864670ull, 8785055441242128570ull, 8282298171343186631ull}}, {{17116127735210279610ull, 6097717789337928322ull, 12408188678417412212ull, 5176436357089491644ull}}, {{12171787632158073704ull, 7622147236672410403ull, 15510235848021765265ull, 6470545446361864555ull}}, {{10603048521770204226ull, 14139370064267900908ull, 14776108791599818677ull, 8088181807952330694ull}}, {{15850277362961153449ull, 11142949299381132019ull, 4623381976322498769ull, 5055113629970206684ull}}, {{15201160685274053908ull, 93628568944251312ull, 5779227470403123462ull, 6318892037462758355ull}}, {{554706782883015769ull, 9340407748035089949ull, 2612348319576516423ull, 7898615046828447944ull}}, {{2652534748515578808ull, 12755283870163013074ull, 1632717699735322764ull, 4936634404267779965ull}}, {{12539040472499249317ull, 15944104837703766342ull, 6652583143096541359ull, 6170793005334724956ull}}, {{6450428553769285838ull, 15318445028702320024ull, 8315728928870676699ull, 7713491256668406195ull}}, {{4031517846105803649ull, 7268185133725256063ull, 2891487571330478985ull, 4820932035417753872ull}}, {{427711289204866657ull, 13696917435583957983ull, 3614359464163098731ull, 6026165044272192340ull}}, {{14369697166788247034ull, 12509460776052559574ull, 4517949330203873414ull, 7532706305340240425ull}}, {{4369374710815266492ull, 3206726966605461830ull, 14352933377445890644ull, 4707941440837650265ull}}, {{14685090425373858923ull, 4008408708256827287ull, 4106108666525199593ull, 5884926801047062832ull}}, {{13744677013289935750ull, 9622196903748422013ull, 5132635833156499491ull, 7356158501308828540ull}}, {{3345788211330255975ull, 7416060111258139613ull, 6415794791445624364ull, 9195198126636035675ull}}, {{4396960641295103937ull, 13858409606391113066ull, 1704028735439821275ull, 5746998829147522297ull}}, {{14719572838473655729ull, 12711325989561503428ull, 6741721937727164498ull, 7183748536434402871ull}}, {{18399466048092069661ull, 6665785450097103477ull, 3815466403731567719ull, 8979685670543003589ull}}, {{13805509289271237490ull, 11083644933951771529ull, 4690509511545923776ull, 5612303544089377243ull}}, {{3421828556306883151ull, 13854556167439714412ull, 1251450871005016816ull, 7015379430111721554ull}}, {{4277285695383603938ull, 17318195209299643015ull, 10787685625611046828ull, 8769224287639651942ull}}, {{9590832587255834317ull, 1600499968957501076ull, 2130617497579516364ull, 5480765179774782464ull}}, {{11988540734069792897ull, 2000624961196876345ull, 2663271871974395455ull, 6850956474718478080ull}}, {{1150617862305077409ull, 16335839256778259144ull, 3329089839967994318ull, 8563695593398097600ull}}, {{719136163940673381ull, 5598213517059024061ull, 2080681149979996449ull, 5352309745873811000ull}}, {{5510606223353229630ull, 11609452914751167980ull, 2600851437474995561ull, 6690387182342263750ull}}, {{6888257779191537037ull, 676758088156796263ull, 12474436333698520260ull, 8362983977927829687ull}}, {{11222690139635792504ull, 9646345841952773472ull, 14714051736202657018ull, 5226864986204893554ull}}, {{14028362674544740630ull, 2834560265586191032ull, 9169192633398545465ull, 6533581232756116943ull}}, {{17535453343180925788ull, 8154886350410126694ull, 6849804773320793927ull, 8166976540945146179ull}}, {{6347972321060690714ull, 12014332996647411040ull, 1975284974111802252ull, 5104360338090716362ull}}, {{7934965401325863392ull, 15017916245809263800ull, 11692478254494528623ull, 6380450422613395452ull}}, {{9918706751657329240ull, 14160709288834191846ull, 14615597818118160779ull, 7975563028266744315ull}}, {{1587505701358442871ull, 6544600296307675952ull, 6828905627110156535ull, 4984726892666715197ull}}, {{1984382126698053589ull, 3569064351957207036ull, 13147818052315083573ull, 6230908615833393996ull}}, {{2480477658372566986ull, 9073016458373896699ull, 16434772565393854466ull, 7788635769791742495ull}}, {{17691199600978712030ull, 10282321304911073340ull, 17189261881012240897ull, 4867897356119839059ull}}, {{3667255427513838422ull, 17464587649566229580ull, 16874891332837913217ull, 6084871695149798824ull}}, {{4584069284392298027ull, 7995676506675623263ull, 2646870092337839906ull, 7606089618937248531ull}}, {{9782572330386268123ull, 9608983835099652443ull, 17795194872207007605ull, 4753806011835780331ull}}, {{7616529394555447250ull, 16622915812301953458ull, 17632307571831371602ull, 5942257514794725414ull}}, {{297289706339533254ull, 11555272728522666015ull, 12817012427934438695ull, 7427821893493406768ull}}, {{7103335094103290140ull, 14139574482967748115ull, 8010632767459024184ull, 4642388683433379230ull}}, {{4267482849201724771ull, 17674468103709685144ull, 789918922469004422ull, 5802985854291724038ull}}, {{5334353561502155963ull, 12869713092782330622ull, 10210770689941031336ull, 7253732317864655047ull}}, {{15891313988732470762ull, 16087141365977913277ull, 8151777343998901266ull, 9067165397330818809ull}}, {{12237914252171488178ull, 14666149372163583702ull, 16624075886067783051ull, 5666978373331761755ull}}, {{6074020778359584415ull, 13721000696777091724ull, 16168408839157340910ull, 7083722966664702194ull}}, {{7592525972949480518ull, 7927878834116588847ull, 10987139012091900330ull, 8854653708330877743ull}}, {{11662857760734507180ull, 9566610289750255933ull, 13784490910198519562ull, 5534158567706798589ull}}, {{743514145635970263ull, 2734890825333044109ull, 3395555582465985741ull, 6917698209633498237ull}}, {{5541078700472350733ull, 8030299550093693040ull, 8856130496509870080ull, 8647122762041872796ull}}, {{3463174187795219208ull, 5018937218808558150ull, 14758453597173444608ull, 5404451726276170497ull}}, {{13552339771598799818ull, 6273671523510697687ull, 4613008941184642048ull, 6755564657845213122ull}}, {{12328738696071111869ull, 7842089404388372109ull, 14989633213335578368ull, 8444455822306516402ull}}, {{10011304694258138870ull, 4901305877742732568ull, 13980206776762124384ull, 5277784888941572751ull}}, {{12514130867822673587ull, 6126632347178415710ull, 12863572452525267576ull, 6597231111176965939ull}}, {{6419291547923566176ull, 7658290433973019638ull, 11467779547229196566ull, 8246538888971207424ull}}, {{17847115272734392572ull, 174745502805749369ull, 7167362217018247854ull, 5154086805607004640ull}}, {{8473836035635827003ull, 9441803915361962520ull, 8959202771272809817ull, 6442608507008755800ull}}, {{10592295044544783754ull, 16413940912629841054ull, 11199003464091012271ull, 8053260633760944750ull}}, {{2008498384413101942ull, 17176242098034732515ull, 2387691146629494765ull, 5033287896100590469ull}}, {{16345681035798541140ull, 7635244567261251931ull, 7596299951714256361ull, 6291609870125738086ull}}, {{15820415276320788521ull, 14155741727503952818ull, 272002902788044643ull, 7864512337657172608ull}}, {{14499445566127880730ull, 6541495570476276559ull, 170001814242527902ull, 4915320211035732880ull}}, {{13512620939232463008ull, 17400241499950121507ull, 212502267803159877ull, 6144150263794666100ull}}, {{12279090155613190856ull, 7915243819655488172ull, 265627834753949847ull, 7680187829743332625ull}}, {{16897803384113020093ull, 11864556414925761963ull, 11695232442789688414ull, 4800117393589582890ull}}, {{16510568211713887212ull, 5607323481802426646ull, 5395668516632334710ull, 6000146741986978613ull}}, {{11414838227787583207ull, 16232526389107809116ull, 11356271664217806291ull, 7500183427483723266ull}}, {{16357645929222015313ull, 7839485983978686745ull, 11709355808563516836ull, 4687614642177327041ull}}, {{6611999356245355429ull, 9799357479973358432ull, 801636705422232333ull, 5859518302721658802ull}}, {{8264999195306694286ull, 16860882868394085944ull, 10225417918632566224ull, 7324397878402073502ull}}, {{10331248994133367857ull, 2629359511783055814ull, 3558400361435931973ull, 9155497348002591878ull}}, {{1845344602905967007ull, 3949192704078103836ull, 16059058281179621195ull, 5722185842501619923ull}}, {{2306680753632458758ull, 324804861670241891ull, 15462136833047138590ull, 7152732303127024904ull}}, {{16718408997322737160ull, 9629378113942578171ull, 880926967599371621ull, 8940915378908781131ull}}, {{8143162614113016773ull, 8324204330427805309ull, 16691480419245464927ull, 5588072111817988206ull}}, {{14790639286068658870ull, 5793569394607368732ull, 11640978487202055351ull, 6985090139772485258ull}}, {{41555033876271972ull, 2630275724831823012ull, 5327851072147793381ull, 8731362674715606573ull}}, {{9249343933027445790ull, 3949765337233583334ull, 5635749929306064815ull, 5457101671697254108ull}}, {{2338307879429531430ull, 325520653114591264ull, 7044687411632581019ull, 6821377089621567635ull}}, {{2922884849286914287ull, 14241958871675402792ull, 4194173246113338369ull, 8526721362026959544ull}}, {{1826803030804321430ull, 1983695267156044889ull, 2621358278820836481ull, 5329200851266849715ull}}, {{6895189806932789691ull, 7091305102372444015ull, 17111755903808209313ull, 6661501064083562143ull}}, {{4007301240238599210ull, 13475817396392942923ull, 16778008861332873737ull, 8326876330104452679ull}}, {{198720265935430554ull, 1504856845104507471ull, 17403784565974127942ull, 5204297706315282924ull}}, {{14083458387701451905ull, 11104443093235410146ull, 3307986633758108311ull, 6505372132894103656ull}}, {{8380950947772039073ull, 9268867848116874779ull, 4134983292197635389ull, 8131715166117629570ull}}, {{2932251333143830469ull, 8098885414286740689ull, 7196050576050910022ull, 5082321978823518481ull}}, {{8277000184857175990ull, 900234731003650053ull, 13606749238491025432ull, 6352902473529398101ull}}, {{14957936249498857891ull, 1125293413754562566ull, 3173378492831618078ull, 7941128091911747627ull}}, {{4737024137509398278ull, 14538366438878765316ull, 18124262622515618962ull, 4963205057444842266ull}}, {{5921280171886747847ull, 8949586011743680837ull, 13431956241289747895ull, 6204006321806052833ull}}, {{12013286233285822713ull, 6575296496252213142ull, 2954887246330021157ull, 7755007902257566042ull}}, {{2896617877376251292ull, 6415403319371327166ull, 6458490547383651127ull, 4846879938910978776ull}}, {{12844144383575089923ull, 3407568130786771053ull, 8073113184229563909ull, 6058599923638723470ull}}, {{2220122424186698691ull, 8871146181910851721ull, 868019443432179078ull, 7573249904548404338ull}}, {{12916791561185156442ull, 932780345266894421ull, 5154198170572499828ull, 4733281190342752711ull}}, {{2310931396199281841ull, 1165975431583618027ull, 1831061694788236881ull, 5916601487928440889ull}}, {{16723722300531266013ull, 6069155307906910437ull, 6900513136912684005ull, 7395751859910551111ull}}, {{12758169447045735210ull, 6099065076655512975ull, 11230349738211509359ull, 4622344912444094444ull}}, {{11336025790379781109ull, 3012145327392003315ull, 14037937172764386699ull, 5777931140555118055ull}}, {{9558346219547338482ull, 17600239714522167856ull, 12935735447528095469ull, 7222413925693897569ull}}, {{11947932774434173102ull, 8165241587870546108ull, 2334611254127955625ull, 9028017407117371962ull}}, {{16690830020876133997ull, 16632491038487561077ull, 6070818052257360169ull, 5642510879448357476ull}}, {{7028479470813003784ull, 6955555742827287635ull, 7588522565321700212ull, 7053138599310446845ull}}, {{4173913320088866826ull, 8694444678534109544ull, 14097339225079513169ull, 8816423249138058556ull}}, {{2608695825055541766ull, 16963242970152288225ull, 18034209052529471538ull, 5510264530711286597ull}}, {{7872555799746815112ull, 11980681675835584473ull, 8707703260379675711ull, 6887830663389108247ull}}, {{14452380768110906794ull, 10364166076367092687ull, 6272943057047206735ull, 8609788329236385309ull}}, {{15950267007710398602ull, 13395132825370514785ull, 6226432419868198161ull, 5381117705772740818ull}}, {{6102775704355834541ull, 2908857976430979770ull, 17006412561690023510ull, 6726397132215926022ull}}, {{16851841667299568984ull, 12859444507393500520ull, 12034643665257753579ull, 8407996415269907528ull}}, {{10532401042062230615ull, 5731309807907243873ull, 7521652290786095987ull, 5254997759543692205ull}}, {{17777187321005176173ull, 2552451241456666937ull, 14013751381910007888ull, 6568747199429615256ull}}, {{8386426095974306504ull, 3190564051820833672ull, 17517189227387509860ull, 8210933999287019070ull}}, {{5241516309983941565ull, 11217474569242796853ull, 6336557248689805758ull, 5131833749554386919ull}}, {{11163581405907314860ull, 4798471174698720258ull, 3309010542434869294ull, 6414792186942983649ull}}, {{4731104720529367767ull, 15221461005228176131ull, 8747949196470974521ull, 8018490233678729561ull}}, {{651097441117160903ull, 2595884100626528226ull, 16996683293862828836ull, 5011556396049205975ull}}, {{10037243838251226936ull, 3244855125783160282ull, 16634168098901148141ull, 6264445495061507469ull}}, {{3323182760959257862ull, 8667754925656338257ull, 6957652068344271464ull, 7830556868826884337ull}}, {{13606204271668005924ull, 5417346828535211410ull, 15877747588783639425ull, 4894098043016802710ull}}, {{7784383302730231597ull, 11383369554096402167ull, 10623812449124773473ull, 6117622553771003388ull}}, {{5118793109985401592ull, 394153887338338997ull, 13279765561405966842ull, 7647028192213754235ull}}, {{5505088702954569947ull, 4858032198013849777ull, 5994010466665035324ull, 4779392620133596397ull}}, {{11493046897120600338ull, 6072540247517312221ull, 12104199101758682059ull, 5974240775166995496ull}}, {{531250566118586710ull, 2978989290969252373ull, 15130248877198352574ull, 7467800968958744370ull}}, {{2637874613037810646ull, 15696926362137946445ull, 14068091566676358262ull, 4667375605599215231ull}}, {{7909029284724651211ull, 10397785915817657248ull, 12973428439918059924ull, 5834219506999019039ull}}, {{9886286605905814014ull, 12997232394772071560ull, 11605099531470187001ull, 7292774383748773799ull}}, {{12357858257382267517ull, 2411482438182925738ull, 9894688395910345848ull, 9115967979685967249ull}}, {{12335347429291305103ull, 1507176523864328586ull, 17713395293512435915ull, 5697479987303729530ull}}, {{6195812249759355570ull, 15719028710112574445ull, 12918372080035769085ull, 7121849984129661913ull}}, {{12356451330626582366ull, 5813727832358554344ull, 2312907044762547645ull, 8902312480162077392ull}}, {{7722782081641613979ull, 5939422904437790417ull, 1445566902976592278ull, 5563945300101298370ull}}, {{14265163620479405378ull, 16647650667402013829ull, 11030330665575516155ull, 6954931625126622962ull}}, {{3996396470317093010ull, 16197877315825129383ull, 4564541295114619386ull, 8693664531408278703ull}}, {{9415276821589264988ull, 14735359340818093768ull, 9770367337087718972ull, 5433540332130174189ull}}, {{11769096026986581234ull, 18419199176022617210ull, 16824645189787036619ull, 6791925415162717736ull}}, {{5487997996878450735ull, 18412312951600883609ull, 2584062413524244158ull, 8489906768953397171ull}}, {{14959213794117501469ull, 6896009576323164351ull, 17755940072948510263ull, 5306191730595873231ull}}, {{14087331224219488933ull, 4008325951976567535ull, 17583239072758249925ull, 6632739663244841539ull}}, {{12997478011846973262ull, 9622093458398097323ull, 17367362822520424502ull, 8290924579056051924ull}}, {{5817580748190664337ull, 1402122393071422923ull, 1631229727220489506ull, 5181827861910032453ull}}, {{2660289916810942517ull, 10976025028194054462ull, 6650723177452999786ull, 6477284827387540566ull}}, {{12548734432868453954ull, 4496659248387792269ull, 17536776008671025541ull, 8096606034234425707ull}}, {{10148802029756477673ull, 5116255039456064120ull, 8654641996205697011ull, 5060378771396516067ull}}, {{12686002537195597092ull, 1783632780892692246ull, 6206616476829733360ull, 6325473464245645084ull}}, {{6634131134639720556ull, 2229540976115865308ull, 7758270596037166700ull, 7906841830307056355ull}}, {{13369703996004601156ull, 10616835146927191625ull, 2543076113309535235ull, 4941776143941910222ull}}, {{2877071939723587733ull, 8659357915231601628ull, 12402217178491694852ull, 6177220179927387777ull}}, {{3596339924654484666ull, 10824197394039502035ull, 1667713417832454853ull, 7721525224909234722ull}}, {{18388613517404910580ull, 9070966380488382723ull, 5654006904572672187ull, 4825953265568271701ull}}, {{18374080878328750321ull, 6727021957183090500ull, 11679194649143228138ull, 6032441581960339626ull}}, {{4520857024201386286ull, 17632149483333638934ull, 5375621274574259364ull, 7540551977450424533ull}}, {{16660593695408030141ull, 1796721390228748525ull, 5665606305822606055ull, 4712844985906515333ull}}, {{6990684063977873964ull, 16080959793068099369ull, 11693693900705645472ull, 5891056232383144166ull}}, {{13350041098399730358ull, 1654455667625572595ull, 5393745339027281033ull, 7363820290478930208ull}}, {{12075865354572275044ull, 6679755602959353648ull, 6742181673784101291ull, 9204775363098662760ull}}, {{7547415846607671903ull, 1869004242635902078ull, 4213863546115063307ull, 5752984601936664225ull}}, {{210897771404814070ull, 16171313358577041310ull, 9879015451071217037ull, 7191230752420830281ull}}, {{9486994251110793396ull, 6379083642939137925ull, 16960455332266409201ull, 8989038440526037851ull}}, {{8235214416157939824ull, 15516142322905430963ull, 8294441573452811798ull, 5618149025328773657ull}}, {{5682332001770036876ull, 10171805866777012896ull, 14979737985243402652ull, 7022686281660967071ull}}, {{7102915002212546095ull, 12714757333471266120ull, 14112986463126865411ull, 8778357852076208839ull}}, {{4439321876382841310ull, 5640880324205847373ull, 15738145567095372738ull, 5486473657547630524ull}}, {{10160838363905939541ull, 16274472442112085024ull, 1225937885159664306ull, 6858092071934538156ull}}, {{12701047954882424426ull, 11119718515785330472ull, 1532422356449580383ull, 8572615089918172695ull}}, {{7938154971801515267ull, 13867353100006913401ull, 7875293000422069595ull, 5357884431198857934ull}}, {{14534379733179281987ull, 12722505356581253847ull, 620744213672811186ull, 6697355538998572418ull}}, {{13556288648046714580ull, 6679759658871791501ull, 9999302303945789791ull, 8371694423748215522ull}}, {{10778523414242890565ull, 11092378814435951544ull, 10861249958393506523ull, 5232309014842634701ull}}, {{13473154267803613206ull, 9253787499617551526ull, 18188248466419271058ull, 6540386268553293376ull}}, {{7618070797899740699ull, 2343862337667163600ull, 4288566509314537207ull, 8175482835691616721ull}}, {{4761294248687337937ull, 8382442988683059106ull, 14209569114390055514ull, 5109676772307260450ull}}, {{15174989847713948229ull, 1254681698999048074ull, 8538589356132793585ull, 6387095965384075563ull}}, {{9745365272787659478ull, 6180038142176197997ull, 6061550676738604077ull, 7983869956730094454ull}}, {{8396696304705981126ull, 6168366848073817700ull, 17623527228243791260ull, 4989918722956309033ull}}, {{10495870380882476408ull, 7710458560092272125ull, 8194350980022575363ull, 6237398403695386292ull}}, {{17731523994530483413ull, 5026387181687952252ull, 10242938725028219204ull, 7796748004619232865ull}}, {{1858830459726776325ull, 12364864025409745966ull, 17931051749211106762ull, 4872967502887020540ull}}, {{11546910111513246215ull, 6232707994907406649ull, 3967070612804331837ull, 6091209378608775676ull}}, {{598579584109394056ull, 12402571012061646216ull, 4958838266005414796ull, 7614011723260969595ull}}, {{374112240068371285ull, 16974978919393304693ull, 793430907039690295ull, 4758757327038105997ull}}, {{5079326318512852011ull, 16607037630814242962ull, 5603474652227000773ull, 5948446658797632496ull}}, {{15572529934995840821ull, 6923738983235639990ull, 7004343315283750967ull, 7435558323497040620ull}}, {{5121145190945012609ull, 11244865892163356850ull, 13601086608907120162ull, 4647223952185650387ull}}, {{15624803525536041570ull, 4832710328349420254ull, 12389672242706512299ull, 5809029940232062984ull}}, {{10307632370065276154ull, 1429201892009387414ull, 15487090303383140374ull, 7261287425290078730ull}}, {{3661168425726819384ull, 11009874401866510076ull, 10135490842374149659ull, 9076609281612598413ull}}, {{11511602302934037923ull, 4575328491952874845ull, 8640524785697537489ull, 5672880801007874008ull}}, {{554444823385383692ull, 10330846633368481461ull, 10800655982121921861ull, 7091101001259842510ull}}, {{5304742047659117519ull, 17525244310137989730ull, 4277447940797626518ull, 8863876251574803138ull}}, {{7927149798214336353ull, 6341591675408855677ull, 7285090981425904478ull, 5539922657234251961ull}}, {{14520623266195308346ull, 17150361631115845404ull, 13718049745209768501ull, 6924903321542814951ull}}, {{18150779082744135432ull, 7602893983612643043ull, 12535876163084822723ull, 8656129151928518689ull}}, {{9038393917501390693ull, 2445965730544207950ull, 917393574286932346ull, 5410080719955324181ull}}, {{2074620360021962558ull, 12280829200035035746ull, 5758427986286053336ull, 6762600899944155226ull}}, {{11816647486882229006ull, 15351036500043794682ull, 16421407019712342478ull, 8453251124930194032ull}}, {{11997090697728781033ull, 4982711794099983772ull, 10263379387320214049ull, 5283281953081371270ull}}, {{14996363372160976291ull, 10840075761052367619ull, 3605852197295491753ull, 6604102441351714088ull}}, {{14133768196773832460ull, 18161780719742847428ull, 4507315246619364691ull, 8255128051689642610ull}}, {{18056977159838421095ull, 9045269940625585690ull, 7428758047564490836ull, 5159455032306026631ull}}, {{13347849412943250561ull, 11306587425781982113ull, 4674261541028225641ull, 6449318790382533289ull}}, {{2849753710896899489ull, 298176226945313930ull, 10454512944712669956ull, 8061648487978166611ull}}, {{6392782087737950085ull, 9409732178695597014ull, 4228227581231724770ull, 5038530304986354132ull}}, {{17214349646527213414ull, 2538793186514720459ull, 5285284476539655963ull, 6298162881232942665ull}}, {{16906251039731628864ull, 17008549538425564286ull, 11218291614101957857ull, 7872703601541178331ull}}, {{5954720881404880136ull, 3712814433874895823ull, 4705589249600029709ull, 4920439750963236457ull}}, {{2831715083328712266ull, 9252704060771007683ull, 10493672580427425040ull, 6150549688704045571ull}}, {{17374701909443054044ull, 11565880075963759603ull, 8505404707106893396ull, 7688187110880056964ull}}, {{8553345684188214826ull, 16452047084332125560ull, 14539249978796584180ull, 4805116944300035602ull}}, {{10691682105235268532ull, 2118314781705605334ull, 8950690436640954418ull, 6006396180375044503ull}}, {{4141230594689309857ull, 11871265513986782476ull, 6576677027373805118ull, 7507995225468805629ull}}, {{11811641158535594469ull, 2807854927814351143ull, 6416266151322322151ull, 4692497015918003518ull}}, {{10152865429742105182ull, 17344876715050102641ull, 17243704726007678496ull, 5865621269897504397ull}}, {{17302767805605019381ull, 3234351820103076685ull, 7719572852227434409ull, 7332026587371880497ull}}, {{7793401701724110514ull, 8654625793556233761ull, 14261152083711680915ull, 9165033234214850621ull}}, {{16400091109646038832ull, 3103298111758952148ull, 11219063061533494524ull, 5728145771384281638ull}}, {{2053369813347996923ull, 3879122639698690186ull, 4800456790062092347ull, 7160182214230352048ull}}, {{11790084303539771962ull, 237217281195974828ull, 6000570987577615434ull, 8950227767787940060ull}}, {{16592174726567133285ull, 4759946819174872171ull, 12973728904090785454ull, 5593892354867462537ull}}, {{16128532389781528702ull, 15173305560823366022ull, 2382103074831318105ull, 6992365443584328172ull}}, {{10937293450372135069ull, 5131573895747043816ull, 2977628843539147632ull, 8740456804480410215ull}}, {{6835808406482584418ull, 3207233684841902385ull, 8778547054853049126ull, 5462785502800256384ull}}, {{13156446526530618427ull, 13232414142907153789ull, 10973183818566311407ull, 6828481878500320480ull}}, {{2610500102881109321ull, 11928831660206554333ull, 13716479773207889259ull, 8535602348125400600ull}}, {{3937405573514387278ull, 5149676778415402506ull, 8572799858254930787ull, 5334751467578375375ull}}, {{14145129003747759905ull, 1825409954591865228ull, 6104313804391275580ull, 6668439334472969219ull}}, {{17681411254684699881ull, 2281762443239831535ull, 3018706237061706571ull, 8335549168091211524ull}}, {{17968411061819019282ull, 17567002591520752373ull, 11110063435018342414ull, 5209718230057007202ull}}, {{8625455771991610390ull, 12735381202546164659ull, 4664207256918152210ull, 6512147787571259003ull}}, {{6170133696562125084ull, 6695854466327930016ull, 1218573052720302359ull, 8140184734464073754ull}}, {{3856333560351328178ull, 11102438069096038116ull, 5373294176377576878ull, 5087615459040046096ull}}, {{4820416950439160222ull, 4654675549515271837ull, 6716617720471971098ull, 6359519323800057620ull}}, {{10637207206476338181ull, 15041716473748865604ull, 8395772150589963872ull, 7949399154750072025ull}}, {{15871626540902487172ull, 9401072796093041002ull, 16776572640187197180ull, 4968374471718795015ull}}, {{10616161139273333156ull, 11751340995116301253ull, 16359029781806608571ull, 6210468089648493769ull}}, {{17881887442519054349ull, 10077490225467988662ull, 6613729171976097002ull, 7763085112060617212ull}}, {{6564493633147021064ull, 10910117409344880818ull, 13356952769339836434ull, 4851928195037885757ull}}, {{17428989078288552138ull, 4414274724826325214ull, 2861132906392631831ull, 6064910243797357197ull}}, {{12562864311005914365ull, 906157387605518614ull, 8188102151418177693ull, 7581137804746696496ull}}, {{3240104175951308574ull, 2872191376467143086ull, 5117563844636361058ull, 4738211127966685310ull}}, {{13273502256793911526ull, 12813611257438704665ull, 15620326842650227130ull, 5922763909958356637ull}}, {{2756819765710225695ull, 6793642034943605024ull, 5690350498030620201ull, 7403454887447945797ull}}, {{1723012353568891060ull, 15775241317908222900ull, 5862312070482831577ull, 4627159304654966123ull}}, {{2153765441961113824ull, 5883993592103114913ull, 2716204069676151568ull, 5783949130818707654ull}}, {{7303892820878780184ull, 7354991990128893641ull, 12618627123949965268ull, 7229936413523384567ull}}, {{13741552044525863134ull, 9193739987661117051ull, 11161597886510068681ull, 9037420516904230709ull}}, {{6282627018614970507ull, 17275302538356667917ull, 9281841688282486877ull, 5648387823065144193ull}}, {{12464969791696101038ull, 7759070117663671184ull, 16213988128780496501ull, 7060484778831430241ull}}, {{15581212239620126297ull, 14310523665506976884ull, 6432427105693456914ull, 8825605973539287802ull}}, {{514885612907803128ull, 13555763309369248457ull, 8631952959485798475ull, 5516003733462054876ull}}, {{5255293034562141814ull, 12333018118284172667ull, 10789941199357248094ull, 6895004666827568595ull}}, {{1957430274775289363ull, 6192900611000440026ull, 8875740480769172214ull, 8618755833534460744ull}}, {{5835079940161943756ull, 17705620937157438728ull, 5547337800480732633ull, 5386722395959037965ull}}, {{7293849925202429695ull, 8296968116164634698ull, 11545858269028303696ull, 6733402994948797456ull}}, {{18340684443357812927ull, 10371210145205793372ull, 14432322836285379620ull, 8416753743685996820ull}}, {{2239555740243857271ull, 15705378377608396666ull, 18243573809533138070ull, 5260471089803748012ull}}, {{12022816712159597397ull, 10408350935155720024ull, 4357723188206870972ull, 6575588862254685016ull}}, {{15028520890199496746ull, 13010438668944650030ull, 5447153985258588715ull, 8219486077818356270ull}}, {{4781139537947297562ull, 5825681158876712317ull, 17239529296068781659ull, 5137178798636472668ull}}, {{10588110440861509857ull, 2670415430168502492ull, 3102667546376425458ull, 6421473498295590836ull}}, {{13235138051076887321ull, 12561391324565403923ull, 3878334432970531822ull, 8026841872869488545ull}}, {{5966118272709360624ull, 3239183559425989548ull, 13953174066675052149ull, 5016776170543430340ull}}, {{7457647840886700780ull, 8660665467709874839ull, 17441467583343815186ull, 6270970213179287925ull}}, {{4710373782680988071ull, 1602459797782567741ull, 7966776423897605271ull, 7838712766474109907ull}}, {{5249826623389311496ull, 7919066401255186694ull, 2673392255722309342ull, 4899195479046318692ull}}, {{15785655316091415178ull, 675460964714207559ull, 3341740319652886678ull, 6123994348807898365ull}}, {{15120383126686881069ull, 10067698242747535257ull, 8788861417993496251ull, 7654992936009872956ull}}, {{2532710426538218812ull, 3986468392503515584ull, 14716410423100710965ull, 4784370585006170597ull}}, {{3165888033172773515ull, 9594771509056782384ull, 4560454973593724994ull, 5980463231257713247ull}}, {{3957360041465966894ull, 2770092349466202172ull, 1088882698564768339ull, 7475579039072141559ull}}, {{11696722062771005117ull, 17872208782912234021ull, 7598080714244062067ull, 4672236899420088474ull}}, {{785844523181592684ull, 17728574960212904623ull, 274228855950301776ull, 5840296124275110593ull}}, {{14817363709259154567ull, 3713974626556579162ull, 4954472088365265125ull, 7300370155343888241ull}}, {{9298332599719167400ull, 9254154301623111857ull, 10804776128883969310ull, 9125462694179860301ull}}, {{17340672920892949385ull, 1172160420087057006ull, 9058828089766174771ull, 5703414183862412688ull}}, {{12452469114261410923ull, 15300258580390984970ull, 11323535112207718463ull, 7129267729828015860ull}}, {{6342214355971987846ull, 14513637207061343309ull, 14154418890259648079ull, 8911584662285019825ull}}, {{6269726981696186356ull, 15988552282054421424ull, 1928982778771198193ull, 5569740413928137391ull}}, {{7837158727120232945ull, 6150632297285863068ull, 16246286528746161454ull, 6962175517410171738ull}}, {{9796448408900291181ull, 16911662408462104643ull, 11084486124077926009ull, 8702719396762714673ull}}, {{3816937246348988036ull, 3652259977647733546ull, 10274799907621900ull, 5439199622976696671ull}}, {{13994543594791010853ull, 4565324972059666932ull, 13847901555166691087ull, 6798999528720870838ull}}, {{17493179493488763566ull, 1094970196647195761ull, 8086504907103588051ull, 8498749410901088548ull}}, {{4015708155789395373ull, 16825257437400355015ull, 14277437603794518339ull, 5311718381813180342ull}}, {{407949176309356312ull, 16419885778323055865ull, 8623424967888372116ull, 6639647977266475428ull}}, {{5121622488814083294ull, 2078113149194268215ull, 10779281209860465146ull, 8299559971583094285ull}}, {{10118543083149883915ull, 5910506736673805538ull, 9042893765376484668ull, 5187224982239433928ull}}, {{3424806817082579086ull, 7388133420842256923ull, 11303617206720605835ull, 6484031227799292410ull}}, {{18116066576635387569ull, 4623480757625433249ull, 4906149471545981486ull, 8105039034749115513ull}}, {{4405012582756035375ull, 16724733528798059493ull, 14595558465784708188ull, 5065649396718197195ull}}, {{10117951746872432123ull, 2459172837288022750ull, 13632762063803497332ull, 6332061745897746494ull}}, {{3424067646735764345ull, 3073966046610028438ull, 7817580542899595857ull, 7915077182372183118ull}}, {{15975100334492016428ull, 13450443825199737533ull, 274301820884859506ull, 4946923238982614449ull}}, {{6133817362832856823ull, 7589682744644896109ull, 4954563294533462287ull, 6183654048728268061ull}}, {{12278957721968458932ull, 4875417412378732232ull, 10804890136594215763ull, 7729567560910335076ull}}, {{7674348576230286833ull, 741292873523013693ull, 15976428372226160660ull, 4830979725568959422ull}}, {{14204621738715246445ull, 926616091903767116ull, 10747163428427925017ull, 6038724656961199278ull}}, {{17755777173394058056ull, 5769956133307096799ull, 4210582248680130463ull, 7548405821201499098ull}}, {{18014889761012368141ull, 10523751610958017355ull, 7243299923852469443ull, 4717753638250936936ull}}, {{17906926182838072272ull, 8543003495270133790ull, 9054124904815586804ull, 5897192047813671170ull}}, {{13160285691692814532ull, 10678754369087667238ull, 2094284094164707697ull, 7371490059767088963ull}}, {{7226985077761242357ull, 17960128979786971952ull, 16452913172988048333ull, 9214362574708861203ull}}, {{4516865673600776473ull, 13530923621580551422ull, 7977227723903836256ull, 5758976609193038252ull}}, {{14869454128855746400ull, 16913654526975689277ull, 9971534654879795320ull, 7198720761491297815ull}}, {{4751759605787519288ull, 2695324085010059981ull, 7852732300172356247ull, 8998400951864122269ull}}, {{5275692762830893507ull, 8602106580772369344ull, 7213800696821416606ull, 5624000594915076418ull}}, {{6594615953538616883ull, 1529261189110685872ull, 18240622907881546566ull, 7030000743643845522ull}}, {{8243269941923271104ull, 11134948523243133148ull, 13577406597997157399ull, 8787500929554806903ull}}, {{14375415750556820248ull, 13876871854668040073ull, 15403408151389305230ull, 5492188080971754314ull}}, {{4134211632913861598ull, 8122717781480274284ull, 10030888152381855730ull, 6865235101214692893ull}}, {{5167764541142326998ull, 930025189995567047ull, 17150296208904707567ull, 8581543876518366116ull}}, {{10147381865855036230ull, 7498794771388311260ull, 1495563093710666421ull, 5363464922823978823ull}}, {{12684227332318795287ull, 13985179482662776979ull, 15704511922420496738ull, 6704331153529973528ull}}, {{11243598146971106205ull, 8258102316473695416ull, 1183895829316069307ull, 8380413941912466911ull}}, {{7027248841856941378ull, 2855470938582365683ull, 7657463920963625173ull, 5237758713695291819ull}}, {{4172375033893788819ull, 8181024691655345008ull, 4960143882777143562ull, 6547198392119114774ull}}, {{5215468792367236023ull, 1002908827714405452ull, 15423551890326205261ull, 8183997990148893467ull}}, {{12483040032084298323ull, 2932661026535197359ull, 7333876922240184336ull, 5114998743843058417ull}}, {{10992114021677984999ull, 3665826283168996699ull, 13779032171227618324ull, 6393748429803823021ull}}, {{9128456508670093345ull, 4582282853961245874ull, 3388732158752359193ull, 7992185537254778777ull}}, {{10316971336346196245ull, 14393141829794248431ull, 13647172645288694255ull, 4995115960784236735ull}}, {{8284528152005357402ull, 13379741268815422635ull, 12447279788183479915ull, 6243894950980295919ull}}, {{5743974171579308848ull, 12112990567591890390ull, 10947413716801961990ull, 7804868688725369899ull}}, {{17425041912519231742ull, 2958933086317543589ull, 4536290563787532292ull, 4878042930453356187ull}}, {{7946244335366875966ull, 3698666357896929487ull, 1058677186307027461ull, 6097553663066695234ull}}, {{5321119400781207053ull, 9235018965798549763ull, 10546718519738560134ull, 7621942078833369042ull}}, {{1019856616274560456ull, 1160200835196705698ull, 11203385093263987988ull, 4763713799270855651ull}}, {{10498192807197976378ull, 1450251043995882122ull, 9392545348152597081ull, 5954642249088569564ull}}, {{3899368972142694665ull, 6424499823422240557ull, 11740681685190746351ull, 7443302811360711955ull}}, {{4742948616802878118ull, 10932841417279982204ull, 5032083044030522517ull, 4652064257100444972ull}}, {{5928685771003597647ull, 18277737790027365659ull, 6290103805038153146ull, 5815080321375556215ull}}, {{2799171195327109154ull, 13623800200679431266ull, 3250943737870303529ull, 7268850401719445269ull}}, {{12722336031013662251ull, 3194692195567125370ull, 8675365690765267316ull, 9086063002149306586ull}}, {{12563146037810926811ull, 11220054659084229164ull, 10033789575155679976ull, 5678789376343316616ull}}, {{15703932547263658514ull, 14025068323855286455ull, 12542236968944599970ull, 7098486720429145770ull}}, {{15018229665652185238ull, 8307963367964332261ull, 6454424174325974155ull, 8873108400536432213ull}}, {{11692236550246309726ull, 2886634095764013711ull, 6339858118167427799ull, 5545692750335270133ull}}, {{10003609669380499253ull, 17443350674987180851ull, 12536508666136672652ull, 6932115937919087666ull}}, {{7892826068298236162ull, 3357444270024424448ull, 6447263795816065008ull, 8665144922398859583ull}}, {{4933016292686397602ull, 2098402668765265280ull, 10947068900026122486ull, 5415715576499287239ull}}, {{6166270365857997002ull, 11846375372811357408ull, 9072150106605265203ull, 6769644470624109049ull}}, {{7707837957322496252ull, 10196283197586808856ull, 15951873651683969408ull, 8462055588280136311ull}}, {{4817398723326560158ull, 6372676998491755535ull, 16887450059943562736ull, 5288784742675085194ull}}, {{1410062385730812293ull, 7965846248114694419ull, 11885940538074677612ull, 6610980928343856493ull}}, {{15597636037445679079ull, 9957307810143368023ull, 1022367617311183303ull, 8263726160429820617ull}}, {{16666051551044631280ull, 13140846408980686870ull, 12168194806887959324ull, 5164828850268637885ull}}, {{11609192401951013292ull, 16426058011225858588ull, 1375185453327785443ull, 6456036062835797357ull}}, {{14511490502438766615ull, 15920886495604935331ull, 6330667835087119708ull, 8070045078544746696ull}}, {{6763838554810535183ull, 727182022898308774ull, 3956667396929449818ull, 5043778174090466685ull}}, {{17678170230367944786ull, 10132349565477661775ull, 9557520264589200176ull, 6304722717613083356ull}}, {{17486026769532543079ull, 12665436956847077219ull, 11946900330736500220ull, 7880903397016354195ull}}, {{8622923721744145472ull, 17139270134884199070ull, 5160969697496618685ull, 4925564623135221372ull}}, {{1555282615325406032ull, 7589029613323085126ull, 6451212121870773357ull, 6156955778919026715ull}}, {{11167475306011533348ull, 14097973035081244311ull, 3452329133911078792ull, 7696194723648783394ull}}, {{13897201093898290199ull, 8811233146925777694ull, 6769391727121812149ull, 4810121702280489621ull}}, {{8148129330518086940ull, 15625727452084610022ull, 13073425677329653090ull, 6012652127850612026ull}}, {{961789626292832867ull, 10308787278250986720ull, 7118410059807290555ull, 7515815159813265033ull}}, {{601118516433020542ull, 4137149039693172748ull, 15978221333448026357ull, 4697384474883290645ull}}, {{751398145541275678ull, 9783122318043853839ull, 6137718611527869234ull, 5871730593604113307ull}}, {{14774305737208758309ull, 3005530860700041490ull, 3060462245982448639ull, 7339663242005141634ull}}, {{9244510134656172078ull, 17591971631157215575ull, 13048949844332836606ull, 9174579052506427042ull}}, {{12695347861801189405ull, 6383296251045871830ull, 12767279671135410783ull, 5734111907816516901ull}}, {{6645812790396710948ull, 3367434295379951884ull, 2124041533637099767ull, 7167639884770646127ull}}, {{8307265987995888685ull, 18044350924507103567ull, 16490109972328538420ull, 8959549855963307658ull}}, {{12109570270138512284ull, 2054347290962163921ull, 14918004751132724417ull, 5599718659977067286ull}}, {{1301904782390976643ull, 7179620132130092806ull, 9424133902061129713ull, 6999648324971334108ull}}, {{10850753014843496612ull, 13586211183590003911ull, 11780167377576412141ull, 8749560406214167635ull}}, {{13699249661918267239ull, 10797224998957446396ull, 5056761601771563636ull, 5468475253883854772ull}}, {{17124062077397834048ull, 13496531248696807995ull, 6320952002214454545ull, 6835594067354818465ull}}, {{16793391578319904656ull, 3035606005588846282ull, 12512876021195456086ull, 8544492584193523081ull}}, {{15107555754877328314ull, 15732311808775192638ull, 903018485606078197ull, 5340307865120951926ull}}, {{9661072656741884585ull, 5830331705686827086ull, 10352145143862373555ull, 6675384831401189907ull}}, {{2852968784072579923ull, 2676228613681145954ull, 8328495411400579040ull, 8344231039251487384ull}}, {{6394791508472750356ull, 1672642883550716221ull, 5205309632125361900ull, 5215144399532179615ull}}, {{12605175404018325849ull, 2090803604438395276ull, 1894951021729314471ull, 6518930499415224519ull}}, {{15756469255022907311ull, 16448562560830157807ull, 16203746832443806800ull, 8148663124269030648ull}}, {{16765322312030398926ull, 10280351600518848629ull, 10127341770277379250ull, 5092914452668144155ull}}, {{7121594834755834945ull, 3627067463793784979ull, 8047491194419336159ull, 6366143065835180194ull}}, {{4290307525017405777ull, 18368892385024394936ull, 835991956169394390ull, 7957678832293975243ull}}, {{2681442203135878611ull, 6868871722212858931ull, 16663396037101729158ull, 4973549270183734526ull}}, {{17186860809202011975ull, 17809461689620849471ull, 11605873009522385639ull, 6216936587729668158ull}}, {{16871889993075127065ull, 17650141093598673935ull, 5283969225048206241ull, 7771170734662085198ull}}, {{17462460273313036272ull, 4113809155858089353ull, 17137538820937292613ull, 4856981709163803248ull}}, {{7993017286359131628ull, 9753947463249999596ull, 2975179452462064150ull, 6071227136454754061ull}}, {{9991271607948914534ull, 2969062292207723687ull, 8330660334004968092ull, 7589033920568442576ull}}, {{13162073782609153440ull, 11079035969484603112ull, 5206662708753105057ull, 4743146200355276610ull}}, {{16452592228261441800ull, 13736906573590178ull, 15731700422796157130ull, 5928932750444095762ull}}, {{11342368248472026442ull, 9240543170071763531ull, 10441253491640420604ull, 7411165938055119703ull}}, {{4783137146081322574ull, 14998711518149628015ull, 13443312459916344733ull, 4631978711284449814ull}}, {{1367235414174265314ull, 4913331342404871307ull, 7580768538040655109ull, 5789973389105562268ull}}, {{15544102322999995354ull, 10753350196433477037ull, 9475960672550818886ull, 7237466736381952835ull}}, {{5595069848467830481ull, 4218315708687070489ull, 7233264822261135704ull, 9046833420477441044ull}}, {{15026133701360863811ull, 2636447317929419055ull, 13744162550767985623ull, 5654270887798400652ull}}, {{14170981108273691859ull, 17130617202693937531ull, 17180203188459982028ull, 7067838609748000815ull}}, {{13102040366914726920ull, 2966527429657870298ull, 16863567967147589632ull, 8834798262185001019ull}}, {{12800461247749092229ull, 1854079643536168936ull, 8233886970253549568ull, 5521748913865625637ull}}, {{16000576559686365286ull, 2317599554420211170ull, 14904044731244324864ull, 6902186142332032046ull}}, {{10777348662753180800ull, 2896999443025263963ull, 9406683877200630272ull, 8627732677915040058ull}}, {{4429999905007044048ull, 1810624651890789977ull, 10490863441677781824ull, 5392332923696900036ull}}, {{10149185899686192964ull, 2263280814863487471ull, 13113579302097227280ull, 6740416154621125045ull}}, {{8074796356180353301ull, 2829101018579359339ull, 2556916072339370388ull, 8425520193276406307ull}}, {{2740904713399026861ull, 10991560173466875395ull, 17738973609707964156ull, 5265950120797753941ull}}, {{17261188947030947288ull, 13739450216833594243ull, 8338658956852791483ull, 6582437650997192427ull}}, {{16964800165361296206ull, 12562626752614604900ull, 5811637677638601450ull, 8228047063746490534ull}}, {{1379628066496034321ull, 12463327738811515967ull, 17467331603806289618ull, 5142529414841556583ull}}, {{15559593138402206613ull, 6355787636659619150ull, 17222478486330474119ull, 6428161768551945729ull}}, {{10226119386147982458ull, 3333048527397136034ull, 7693040052630928937ull, 8035202210689932162ull}}, {{11003010634769876941ull, 13612370375691679781ull, 9419836051321718489ull, 5022001381681207601ull}}, {{18365449311889734080ull, 3180404914332436014ull, 16386481082579536016ull, 6277501727101509501ull}}, {{13733439603007391792ull, 3975506142915545018ull, 6648043297942256308ull, 7846877158876886877ull}}, {{13195085770307007774ull, 11708063376176991444ull, 6460870070427604144ull, 4904298224298054298ull}}, {{16493857212883759717ull, 14635079220221239305ull, 17299459624889280988ull, 6130372780372567872ull}}, {{6782263460822535934ull, 18293849025276549132ull, 3177580457402049619ull, 7662965975465709841ull}}, {{13462286699868860767ull, 9127812631584149255ull, 13515202831944750772ull, 4789353734666068650ull}}, {{12216172356408688055ull, 11409765789480186569ull, 7670631503076162657ull, 5986692168332585813ull}}, {{1435157390228696356ull, 427149181568069500ull, 14199975397272591226ull, 7483365210415732266ull}}, {{10120345405747711031ull, 4878654256907431341ull, 13486670641722757420ull, 4677103256509832666ull}}, {{17262117775612026693ull, 6098317821134289176ull, 7634966265298670967ull, 5846379070637290833ull}}, {{3130903145805481750ull, 3011211257990473567ull, 14155393850050726613ull, 7307973838296613541ull}}, {{17748686987539015899ull, 8375700090915479862ull, 3859184257281244554ull, 9134967297870766927ull}}, {{6481243348784497033ull, 9846498575249562818ull, 9329519188441859702ull, 5709354561169229329ull}}, {{17324926222835397099ull, 3084751182207177714ull, 16273585003979712532ull, 7136693201461536661ull}}, {{12432785741689470566ull, 3855938977758972143ull, 6506923199692476953ull, 8920866501826920827ull}}, {{14688020116197000960ull, 13939176907167827349ull, 1760983990594104143ull, 5575541563641825517ull}}, {{4524967089964087488ull, 12812285115532396283ull, 6812916006670018083ull, 6969426954552281896ull}}, {{1044522844027721455ull, 11403670375988107450ull, 8516145008337522604ull, 8711783693190352370ull}}, {{5264512795944713814ull, 16350666021847342964ull, 9934276648638339531ull, 5444864808243970231ull}}, {{6580640994930892267ull, 15826646508881790801ull, 7806159792370536510ull, 6806081010304962789ull}}, {{12837487262091003238ull, 10559936099247462693ull, 14369385758890558542ull, 8507601262881203486ull}}, {{10329272548020570976ull, 1988274043602276279ull, 4369180080879211185ull, 5317250789300752179ull}}, {{8299904666598325816ull, 7097028572930233253ull, 849789082671626077ull, 6646563486625940224ull}}, {{14986566851675295173ull, 13482971734590179470ull, 1062236353339532596ull, 8308204358282425280ull}}, {{4754918263869671580ull, 17650229370973637977ull, 663897720837207872ull, 5192627723926515800ull}}, {{10555333848264477378ull, 3616042640007495855ull, 829872151046509841ull, 6490784654908144750ull}}, {{8582481291903208819ull, 9131739318436757723ull, 10260712225662913109ull, 8113480818635180937ull}}, {{3058207798225811560ull, 8013180083236667529ull, 17942160187107790453ull, 5070925511646988085ull}}, {{8434445766209652354ull, 14628161122473222315ull, 8592642178602574354ull, 6338656889558735107ull}}, {{5931371189334677538ull, 9061829366236752086ull, 6129116704825830039ull, 7923321111948418884ull}}, {{17542165048616337174ull, 12581172381539051909ull, 13054069977370919582ull, 4952075694967761802ull}}, {{8092648255488257755ull, 6503093440069039079ull, 7094215434858873670ull, 6190094618709702253ull}}, {{5504124300932934289ull, 17352238836941074657ull, 13479455312000979991ull, 7737618273387127816ull}}, {{14969292734151553691ull, 17762678300729253516ull, 8424659570000612494ull, 4836011420866954885ull}}, {{264871843979890498ull, 12979975839056791088ull, 15142510480928153522ull, 6045014276083693606ull}}, {{331089804974863122ull, 7001597761966213052ull, 9704766064305416095ull, 7556267845104617008ull}}, {{9430303164964065259ull, 11293527628869965013ull, 6065478790190885059ull, 4722667403190385630ull}}, {{16399564974632469478ull, 9505223517660068362ull, 16805220524593382132ull, 5903334253987982037ull}}, {{11276084181435811040ull, 11881529397075085453ull, 7171467600459563953ull, 7379167817484977547ull}}, {{9353395622611075852ull, 508426845530846552ull, 2176324241073533519ull, 4611979885928110967ull}}, {{11691744528263844815ull, 14470591612195721902ull, 16555463356624080610ull, 5764974857410138708ull}}, {{5391308623475030210ull, 8864867478389876570ull, 2247585122070549147ull, 7206218571762673386ull}}, {{15962507816198563571ull, 6469398329559957808ull, 12032853439442962242ull, 9007773214703341732ull}}, {{9976567385124102232ull, 8655059974402361534ull, 16743905436506627209ull, 5629858259189588582ull}}, {{3247337194550351982ull, 15430510986430339822ull, 11706509758778508203ull, 7037322823986985728ull}}, {{13282543530042715785ull, 14676452714610536873ull, 14633137198473135254ull, 8796653529983732160ull}}, {{1384060678635615510ull, 4561096928204197642ull, 9145710749045709534ull, 5497908456239832600ull}}, {{10953447885149295195ull, 14924743197110022860ull, 11432138436307136917ull, 6872385570299790750ull}}, {{13691809856436618994ull, 4820870941105364863ull, 5066801008529145339ull, 8590481962874738438ull}}, {{15474910187913968727ull, 707201328977159087ull, 17001808685612879549ull, 5369051226796711523ull}}, {{14731951716465073005ull, 5495687679648836763ull, 16640574838588711532ull, 6711314033495889404ull}}, {{13803253627153953352ull, 6869609599561045954ull, 2353974474526337799ull, 8389142541869861756ull}}, {{13238719535398608749ull, 11211035027366735577ull, 10694606083433736932ull, 5243214088668663597ull}}, {{2713341363966097225ull, 14013793784208419472ull, 17979943622719559069ull, 6554017610835829496ull}}, {{3391676704957621531ull, 3682184174978360628ull, 4028185454689897221ull, 8192522013544786871ull}}, {{11343169977453289265ull, 4607208118575169344ull, 9435144936822267619ull, 5120326258465491794ull}}, {{14178962471816611581ull, 1147324129791573776ull, 2570559134173058716ull, 6400407823081864743ull}}, {{17723703089770764476ull, 1434155162239467220ull, 17048256972998487107ull, 8000509778852330928ull}}, {{1853942394251951990ull, 17037248040895524677ull, 10655160608124054441ull, 5000318611782706830ull}}, {{6929114011242327891ull, 7461501995837242134ull, 4095578723300292244ull, 6250398264728383538ull}}, {{17884764550907685672ull, 9326877494796552667ull, 14342845440980141113ull, 7812997830910479422ull}}, {{8872134835103609593ull, 17358513480316315177ull, 4352592382185200291ull, 4883123644319049639ull}}, {{15701854562306899895ull, 17086455831968006067ull, 829054459304112460ull, 6103904555398812049ull}}, {{15015632184456236965ull, 2911325716250455968ull, 5648004092557528480ull, 7629880694248515061ull}}, {{9384770115285148103ull, 1819578572656534980ull, 5835845567062149252ull, 4768675433905321913ull}}, {{11730962644106435129ull, 2274473215820668725ull, 11906492977255074469ull, 5960844292381652391ull}}, {{828645249850880199ull, 7454777538203223811ull, 10271430203141455182ull, 7451055365477065489ull}}, {{16658804345652657788ull, 47549942949626977ull, 17948858923031879249ull, 4656909603423165930ull}}, {{6988447376783658523ull, 4671123447114421626ull, 13212701616935073253ull, 5821137004278957413ull}}, {{17958931257834348962ull, 10450590327320414936ull, 2680818965886677854ull, 7276421255348696767ull}}, {{4001919998583384587ull, 3839865872295742863ull, 17186081762640511030ull, 9095526569185870958ull}}, {{9418729026755697223ull, 16234974225467003001ull, 6129615083222931489ull, 5684704105741169349ull}}, {{16385097301872009432ull, 6458659726551590039ull, 12273704872456052266ull, 7105880132176461686ull}}, {{15869685608912623886ull, 17296696695044263357ull, 6118759053715289524ull, 8882350165220577108ull}}, {{12224396514784083881ull, 1587063397547888790ull, 13047596445426831761ull, 5551468853262860692ull}}, {{6057123606625329043ull, 6595515265362248892ull, 16309495556783539701ull, 6939336066578575865ull}}, {{7571404508281661304ull, 12856080100130199019ull, 6551811390697260914ull, 8674170083223219832ull}}, {{2426284808462344363ull, 12646736081008762291ull, 4094882119185788071ull, 5421356302014512395ull}}, {{16867914065860094166ull, 11196734082833564959ull, 506916630554847185ull, 6776695377518140494ull}}, {{16473206563897729803ull, 160859548259792487ull, 9857017825048334790ull, 8470869221897675617ull}}, {{17213283130077162983ull, 13935595272944534016ull, 17689851186723679003ull, 5294293263686047260ull}}, {{3069859838886902113ull, 12807808072753279617ull, 3665569909695047138ull, 6617866579607559076ull}}, {{8449010817036015545ull, 6786388054086823713ull, 4581962387118808923ull, 8272333224509448845ull}}, {{16809846806715979476ull, 1935649524590570868ull, 5169569501162949529ull, 5170208265318405528ull}}, {{2565564434685422729ull, 7031247924165601490ull, 6461961876453686911ull, 6462760331648006910ull}}, {{12430327580211554219ull, 4177373886779613958ull, 17300824382421884447ull, 8078450414560008637ull}}, {{3157268719204833483ull, 9528387706878340580ull, 13118858248227371731ull, 5049031509100005398ull}}, {{3946585899006041853ull, 7298798615170537821ull, 7175200773429438856ull, 6311289386375006748ull}}, {{9544918392184940221ull, 9123498268963172276ull, 8969000966786798570ull, 7889111732968758435ull}}, {{15188946031970363446ull, 10313872436529370576ull, 3299782595028055154ull, 4930694833105474022ull}}, {{539438466253402691ull, 3668968508806937413ull, 13348100280639844751ull, 6163368541381842527ull}}, {{5285984101244141268ull, 18421268691290835478ull, 12073439332372418034ull, 7704210676727303159ull}}, {{17138798118559752005ull, 16124978950484160077ull, 14463428610373843127ull, 4815131672954564474ull}}, {{7588439592917526294ull, 15544537669677812193ull, 8855913726112528101ull, 6018914591193205593ull}}, {{14097235509574295771ull, 5595614031815101529ull, 15681578176068048031ull, 7523643238991506991ull}}, {{1893243165842853001ull, 10414787797525520312ull, 16718515387683611875ull, 4702277024369691869ull}}, {{2366553957303566251ull, 8406798728479512486ull, 7063086179322351132ull, 5877846280462114837ull}}, {{12181564483484233622ull, 10508498410599390607ull, 13440543742580326819ull, 7347307850577643546ull}}, {{10615269585927904124ull, 8523936994821850355ull, 7577307641370632716ull, 9184134813222054433ull}}, {{4328700481991246125ull, 14550832658618432280ull, 16265032321925115207ull, 5740084258263784020ull}}, {{5410875602489057657ull, 13576854804845652446ull, 1884546328696842393ull, 7175105322829730026ull}}, {{15986966539966097879ull, 3136010450774901845ull, 11579054947725828800ull, 8968881653537162532ull}}, {{12297697096692505126ull, 1960006531734313653ull, 16460281379183418808ull, 5605551033460726582ull}}, {{1537063315583467696ull, 2450008164667892067ull, 11351979687124497702ull, 7006938791825908228ull}}, {{15756387199761498332ull, 12285882242689640891ull, 14189974608905622127ull, 8758673489782385285ull}}, {{7541898990637242505ull, 14596205429322107413ull, 11174577139779707781ull, 5474170931113990803ull}}, {{14039059756723941036ull, 4410198731370470554ull, 9356535406297246823ull, 6842713663892488504ull}}, {{8325452659050150487ull, 901062395785700289ull, 11695669257871558529ull, 8553392079865610630ull}}, {{16732622957974813814ull, 12092379043434532440ull, 2698107267742336176ull, 5345870049916006644ull}}, {{2469034623758965652ull, 15115473804293165551ull, 3372634084677920220ull, 6682337562395008305ull}}, {{16921351334980870776ull, 447598181656905322ull, 8827478624274788180ull, 8352921952993760381ull}}, {{15187530602790432139ull, 9503120900390341634ull, 7823017149385436564ull, 5220576220621100238ull}}, {{9761041216633264366ull, 11878901125487927043ull, 555399399877019897ull, 6525720275776375298ull}}, {{7589615502364192554ull, 1013568351577745092ull, 9917621286701050680ull, 8157150344720469122ull}}, {{13966881725832396154ull, 633480219736090682ull, 10810199322615544579ull, 5098218965450293201ull}}, {{8235230120435719385ull, 14626908329952277065ull, 18124435171696818627ull, 6372773706812866501ull}}, {{14905723668972037135ull, 13671949394012958427ull, 8820485909338859572ull, 7965967133516083127ull}}, {{7010234283893829257ull, 17768340408112874825ull, 12430332720977869088ull, 4978729458447551954ull}}, {{13374478873294674476ull, 3763681436431541915ull, 6314543864367560553ull, 6223411823059439943ull}}, {{12106412573190955190ull, 9316287813966815298ull, 3281493812032062787ull, 7779264778824299929ull}}, {{12178193876671734898ull, 3516836874515565609ull, 13580148678588509002ull, 4862040486765187455ull}}, {{1387684290557504911ull, 13619418129999232820ull, 12363499829808248348ull, 6077550608456484319ull}}, {{1734605363196881138ull, 17024272662499041025ull, 10842688768832922531ull, 7596938260570605399ull}}, {{12613343398066520472ull, 8334327404848206688ull, 13694209508161658438ull, 4748086412856628374ull}}, {{15766679247583150589ull, 1194537219205482552ull, 7894389848347297240ull, 5935108016070785468ull}}, {{1261604985769386620ull, 1493171524006853191ull, 9867987310434121550ull, 7418885020088481835ull}}, {{7706032143746948494ull, 14768290257786446956ull, 3861649059807632016ull, 4636803137555301147ull}}, {{9632540179683685617ull, 13618748523507079ull, 215375306332152117ull, 5796003921944126434ull}}, {{7428989206177219118ull, 4628709454081771753ull, 9492591169769965954ull, 7245004902430158042ull}}, {{13897922526148911801ull, 15009258854456990499ull, 2642366925357681634ull, 9056256128037697553ull}}, {{6380358569629375924ull, 13992472802463006966ull, 13180694374417020781ull, 5660160080023560970ull}}, {{17198820248891495712ull, 3655532947796594995ull, 7252495931166500169ull, 7075200100029451213ull}}, {{16886839292686981736ull, 9181102203173131648ull, 13677305932385513115ull, 8844000125036814016ull}}, {{10554274557929363585ull, 3432345867769513328ull, 8548316207740945697ull, 5527500078148008760ull}}, {{13192843197411704482ull, 8902118353139279564ull, 10685395259676182121ull, 6909375097685010950ull}}, {{16491053996764630602ull, 15739333959851487359ull, 4133372037740451843ull, 8636718872106263688ull}}, {{17224437775618975982ull, 7531240715693485647ull, 2583357523587782402ull, 5397949295066414805ull}}, {{16918861201096332074ull, 190678857762081251ull, 7840882922912115907ull, 6747436618833018506ull}}, {{16536890482943027188ull, 14073406627484765276ull, 577731616785369075ull, 8434295773541273133ull}}, {{1112184514984616185ull, 6490036132964284346ull, 2666925269704549624ull, 5271434858463295708ull}}, {{10613602680585546039ull, 8112545166205355432ull, 3333656587130687030ull, 6589293573079119635ull}}, {{13267003350731932549ull, 917309420901918482ull, 18002128789195522500ull, 8236616966348899543ull}}, {{12903563112634845747ull, 9796690424918474859ull, 18168859520888283418ull, 5147885603968062214ull}}, {{11517767872366169280ull, 3022490994293317766ull, 13487702364255578465ull, 6434857004960077768ull}}, {{5173837803602935792ull, 8389799761294035112ull, 16859627955319473081ull, 8043571256200097210ull}}, {{3233648627251834870ull, 16772839896877241705ull, 15148953490502058579ull, 5027232035125060756ull}}, {{8653746802492181491ull, 16354363852669164227ull, 489447789418021608ull, 6284040043906325946ull}}, {{6205497484687838960ull, 1996210742126903668ull, 9835181773627302819ull, 7855050054882907432ull}}, {{13101807964784675158ull, 17388532778325172456ull, 6146988608517064261ull, 4909406284301817145ull}}, {{16377259955980843948ull, 7900607917624301858ull, 12295421779073718231ull, 6136757855377271431ull}}, {{11248202908121279126ull, 5264073878602989419ull, 10757591205414759885ull, 7670947319221589289ull}}, {{4724283808362105502ull, 5595889183340562339ull, 18252709549452694688ull, 4794342074513493305ull}}, {{1293668742025243974ull, 6994861479175702924ull, 8980828881533704648ull, 5992927593141866632ull}}, {{1617085927531554967ull, 8743576848969628655ull, 11226036101917130810ull, 7491159491427333290ull}}, {{7928207732348303710ull, 10076421549033405813ull, 11627958582125594660ull, 4681974682142083306ull}}, {{14521945683862767542ull, 12595526936291757266ull, 5311576190802217517ull, 5852468352677604133ull}}, {{8929060067973683619ull, 1909350615082532871ull, 11251156256930159801ull, 7315585440847005166ull}}, {{6549639066539716620ull, 6998374287280553993ull, 4840573284307923943ull, 9144481801058756458ull}}, {{15622739462655792648ull, 11291512957191428101ull, 7637044321119840368ull, 5715301125661722786ull}}, {{5693366273037577097ull, 14114391196489285127ull, 322933364545024652ull, 7144126407077153483ull}}, {{2505021822869583468ull, 17642988995611606409ull, 14238724760963444527ull, 8930158008846441853ull}}, {{13094853685361959428ull, 17944397149898335861ull, 11205045984815846781ull, 5581348755529026158ull}}, {{2533509051420285572ull, 8595438382090756115ull, 4782935444165032669ull, 6976685944411282698ull}}, {{17001944369557520677ull, 15355983996040833047ull, 15202041342061066644ull, 8720857430514103372ull}}, {{17543744258614532279ull, 374117960670744846ull, 277903801933390845ull, 5450535894071314608ull}}, {{12706308286413389541ull, 5079333469265818962ull, 347379752416738556ull, 6813169867589143260ull}}, {{6659513321161961118ull, 6349166836582273703ull, 434224690520923195ull, 8516462334486429075ull}}, {{11079724853367307555ull, 1662386263650227112ull, 16412291496071434661ull, 5322788959054018171ull}}, {{13849656066709134444ull, 6689668847990171794ull, 15903678351661905422ull, 6653486198817522714ull}}, {{8088698046531642247ull, 17585458096842490551ull, 10656225902722605969ull, 8316857748521903393ull}}, {{11972965306723358260ull, 4073382282885474738ull, 18189356235270098491ull, 5198036092826189620ull}}, {{5742834596549422017ull, 480041835179455519ull, 4289951220378071498ull, 6497545116032737026ull}}, {{2566857227259389617ull, 9823424330829095207ull, 14585811062327365180ull, 8121931395040921282ull}}, {{8521814794678200367ull, 15363012243622960312ull, 13727817932381991141ull, 5076207121900575801ull}}, {{10652268493347750459ull, 5368707249246536678ull, 3324714360195325215ull, 6345258902375719752ull}}, {{4091963579829912265ull, 2099198043130782944ull, 4155892950244156519ull, 7931573627969649690ull}}, {{2557477237393695166ull, 8229527804597821196ull, 7209119112329985728ull, 4957233517481031056ull}}, {{3196846546742118957ull, 10286909755747276495ull, 9011398890412482160ull, 6196541896851288820ull}}, {{17831116238709812409ull, 12858637194684095618ull, 11264248613015602700ull, 7745677371064111025ull}}, {{15756133667621020660ull, 17260020283532335569ull, 122626355493669831ull, 4841048356915069391ull}}, {{5860109029244112112ull, 16963339335988031558ull, 13988340999649251001ull, 6051310446143836738ull}}, {{16548508323409915948ull, 7369116114702875735ull, 8262054212706787944ull, 7564138057679795923ull}}, {{17260346729772279324ull, 4605697571689297334ull, 2857940873728048513ull, 4727586286049872452ull}}, {{12352061375360573347ull, 10368807983039009572ull, 3572426092160060641ull, 5909482857562340565ull}}, {{15440076719200716683ull, 17572695997226149869ull, 9077218633627463705ull, 7386853571952925706ull}}, {{11955890958714141879ull, 4065405970625261812ull, 10284947664444552720ull, 4616783482470578566ull}}, {{14944863698392677349ull, 5081757463281577265ull, 3632812543700915092ull, 5770979353088223208ull}}, {{4846021567708682974ull, 6352196829101971582ull, 4541015679626143865ull, 7213724191360279010ull}}, {{15280898996490629525ull, 12551932054804852381ull, 14899641636387455639ull, 9017155239200348762ull}}, {{11856404882020337406ull, 14762486561894114594ull, 13923962041169547678ull, 5635722024500217976ull}}, {{5597134065670645949ull, 9229736165512867435ull, 17404952551461934598ull, 7044652530625272470ull}}, {{2384731563660919532ull, 2313798170036308486ull, 12532818652472642440ull, 8805815663281590588ull}}, {{15325515282570238420ull, 1446123856272692803ull, 17056383694650177333ull, 5503634789550994117ull}}, {{14545208084785410120ull, 6419340838768253908ull, 7485421563030557954ull, 6879543486938742647ull}}, {{18181510105981762650ull, 17247548085315093193ull, 4745090935360809538ull, 8599429358673428309ull}}, {{4445914788597519801ull, 15391403571749321150ull, 5271524843814199913ull, 5374643349170892693ull}}, {{14780765522601675559ull, 5404196409404487725ull, 11201092073195137796ull, 6718304186463615866ull}}, {{4640898847969930736ull, 6755245511755609657ull, 4777993054639146437ull, 8397880233079519833ull}}, {{14429776826049676470ull, 6527871454060949987ull, 14515460705217936283ull, 5248675145674699895ull}}, {{13425535014134707684ull, 3548153299148799580ull, 13532639863095032450ull, 6560843932093374869ull}}, {{16781918767668384605ull, 13658563660790775283ull, 3080741773586626850ull, 8201054915116718587ull}}, {{8182856220579046426ull, 13148288306421622456ull, 18066364672987499445ull, 5125659321947949116ull}}, {{10228570275723808033ull, 2600302327744864358ull, 4136211767524822691ull, 6407074152434936396ull}}, {{3562340807799984233ull, 17085435964963244160ull, 5170264709406028363ull, 8008842690543670495ull}}, {{2226463004874990146ull, 8372554468888333648ull, 10148944471019849583ull, 5005526681589794059ull}}, {{2783078756093737682ull, 5854007067683029156ull, 8074494570347424075ull, 6256908351987242574ull}}, {{3478848445117172102ull, 2705822816176398541ull, 869746176079504286ull, 7821135439984053218ull}}, {{4480123287411926516ull, 15526197315392412800ull, 5155277378477078082ull, 4888209649990033261ull}}, {{5600154109264908145ull, 10184374607385740192ull, 11055782741523735507ull, 6110262062487541576ull}}, {{7000192636581135181ull, 8118782240804787336ull, 13819728426904669384ull, 7637827578109426970ull}}, {{4375120397863209488ull, 5074238900502992085ull, 13249016285242806269ull, 4773642236318391856ull}}, {{10080586515756399764ull, 10954484644056128010ull, 16561270356553507836ull, 5967052795397989820ull}}, {{3377361107840723897ull, 13693105805070160013ull, 2254843871982333179ull, 7458815994247487276ull}}, {{4416693701614146388ull, 6252348118955156056ull, 10632649456843734045ull, 4661759996404679547ull}}, {{5520867127017682985ull, 12427121167121332974ull, 8679125802627279652ull, 5827199995505849434ull}}, {{16124455945626879539ull, 15533901458901666217ull, 1625535216429323757ull, 7283999994382311793ull}}, {{6320511876751435711ull, 5582318768344919060ull, 6643605038964042601ull, 9104999992977889741ull}}, {{13173691959824423128ull, 15018164276284044172ull, 6458096158566220577ull, 5690624995611181088ull}}, {{16467114949780528910ull, 4937647290072891503ull, 8072620198207775722ull, 7113281244513976360ull}}, {{15972207668798273233ull, 15395431149445890187ull, 10090775247759719652ull, 8891601555642470450ull}}, {{7676786783785226819ull, 398772431548905559ull, 10918420548277212687ull, 5557250972276544031ull}}, {{4984297461304145619ull, 14333523594718295661ull, 9036339666919127954ull, 6946563715345680039ull}}, {{10842057845057569928ull, 8693532456543093768ull, 6683738565221522039ull, 8683204644182100049ull}}, {{6776286153160981205ull, 12350986812980515461ull, 15706551649331921034ull, 5427002902613812530ull}}, {{13082043709878614410ull, 6215361479370868518ull, 10409817524810125485ull, 6783753628267265663ull}}, {{7129182600493492205ull, 12380887867640973552ull, 8400585887585268952ull, 8479692035334082079ull}}, {{4455739125308432628ull, 7738054917275608470ull, 12167895207381874951ull, 5299807522083801299ull}}, {{14793045943490316593ull, 5060882628167122683ull, 10598182990799955785ull, 6624759402604751624ull}}, {{13879621410935507837ull, 10937789303636291258ull, 13247728738499944731ull, 8280949253255939530ull}}, {{13286449400262080303ull, 4530275305558988084ull, 12891516479989853361ull, 5175593283284962206ull}}, {{16608061750327600378ull, 10274530150376123009ull, 6891023563132540893ull, 6469491604106202758ull}}, {{6925019132627336760ull, 17454848706397541666ull, 17837151490770451924ull, 8086864505132753447ull}}, {{8939822976319473379ull, 1685908404643687733ull, 18065748709372614309ull, 5054290315707970904ull}}, {{15786464738826729628ull, 6719071524231997570ull, 4135441813006216270ull, 6317862894634963631ull}}, {{10509708886678636227ull, 17622211442144772771ull, 557616247830382433ull, 7897328618293704539ull}}, {{4262725044960453690ull, 4096353123699401126ull, 16489411219389846685ull, 4935830386433565336ull}}, {{14551778343055342921ull, 9732127423051639311ull, 2165019950527756740ull, 6169787983041956671ull}}, {{13578036910391790747ull, 12165159278814549139ull, 16541332993441859637ull, 7712234978802445838ull}}, {{6180430059781175265ull, 9909067558472787164ull, 5726647102473774369ull, 4820146861751528649ull}}, {{7725537574726469081ull, 16998020466518371859ull, 11769994896519605865ull, 6025183577189410811ull}}, {{5045235949980698447ull, 7412467527865801112ull, 10100807602222119428ull, 7531479471486763514ull}}, {{3153272468737936530ull, 13856164241770901503ull, 10924690769816212546ull, 4707174669679227196ull}}, {{17776648641204584374ull, 8096833265358851070ull, 13655863462270265683ull, 5883968337099033995ull}}, {{12997438764650954659ull, 5509355563271175934ull, 12458143309410444200ull, 7354960421373792494ull}}, {{7023426418958917516ull, 6886694454088969918ull, 6349307099908279442ull, 9193700526717240618ull}}, {{18224699567131487160ull, 8915870052232994102ull, 8580002955870062555ull, 5746062829198275386ull}}, {{13557502422059583141ull, 6533151546863854724ull, 1501631657982802386ull, 7182578536497844233ull}}, {{16946878027574478926ull, 17389811470434594213ull, 6488725590905890886ull, 8978223170622305291ull}}, {{12897641776447743281ull, 6256946150594233479ull, 1749610485102487852ull, 5611389481638940807ull}}, {{11510366202132291197ull, 7821182688242791849ull, 16022071161660273527ull, 7014236852048676008ull}}, {{552899697383200285ull, 5164792341876101908ull, 1580844878365790293ull, 8767796065060845011ull}}, {{9568934347719275986ull, 5533838222886257644ull, 17128929113474476597ull, 5479872540663028131ull}}, {{11961167934649094982ull, 11528983797035209959ull, 16799475373415707842ull, 6849840675828785164ull}}, {{10339773899883980824ull, 5187857709439236641ull, 2552600143060083187ull, 8562300844785981456ull}}, {{17991573733495957775ull, 936568059185828948ull, 1595375089412551992ull, 5351438027991238410ull}}, {{4042723093160395603ull, 1170710073982286186ull, 11217590898620465798ull, 6689297534989048012ull}}, {{14276775903305270311ull, 10686759629332633540ull, 14021988623275582247ull, 8361621918736310015ull}}, {{18146356976420569753ull, 13596753795973977818ull, 15681271917188320760ull, 5226013699210193759ull}}, {{13459574183670936383ull, 16995942244967472273ull, 14989903878058013046ull, 6532517124012742199ull}}, {{2989409674306506767ull, 12021555769354564534ull, 14125693829145128404ull, 8165646405015927749ull}}, {{15703439101723730441ull, 16736844392701378641ull, 11134401652429399204ull, 5103529003134954843ull}}, {{5794240821872499339ull, 2474311417167171686ull, 9306316047109361102ull, 6379411253918693554ull}}, {{16466173064195399982ull, 12316261308313740415ull, 2409523022031925569ull, 7974264067398366943ull}}, {{17208887192763206845ull, 780134290055005903ull, 8423480916411035337ull, 4983915042123979339ull}}, {{16899422972526620652ull, 5586853880996145283ull, 5917665127086406267ull, 6229893802654974174ull}}, {{16512592697230887911ull, 2371881332817793700ull, 16620453445712783642ull, 7787367253318717717ull}}, {{1096998398914529137ull, 6094111851438508967ull, 12693626412784183728ull, 4867104533324198573ull}}, {{15206306053925325133ull, 7617639814298136208ull, 2031974960698065948ull, 6083880666655248217ull}}, {{561138493697104800ull, 9522049767872670261ull, 7151654719299970339ull, 7604850833319060271ull}}, {{2656554567774384452ull, 3645438095706724961ull, 11387313227203563318ull, 4753031770824412669ull}}, {{7932379228145368469ull, 13780169656488182009ull, 399083478722290435ull, 5941289713530515837ull}}, {{14527160053609098490ull, 12613526052182839607ull, 5110540366830250948ull, 7426612141913144796ull}}, {{15997004061146768412ull, 17106825819469050562ull, 12417459766123682650ull, 4641632588695715497ull}}, {{10772883039578684707ull, 12160160237481537395ull, 1686766652372439601ull, 5802040735869644372ull}}, {{8854417781045967980ull, 1365142241569758032ull, 2108458315465549502ull, 7252550919837055465ull}}, {{11068022226307459975ull, 10929799838816973348ull, 7247258912759324781ull, 9065688649796319331ull}}, {{16140885928296938293ull, 9136967908474302294ull, 2223693811260884036ull, 5666055406122699582ull}}, {{10952735373516397058ull, 11421209885592877868ull, 12002989300930880853ull, 7082569257653374477ull}}, {{13690919216895496322ull, 441454301708933623ull, 1168678570881437355ull, 8853211572066718097ull}}, {{15474353538200767057ull, 16416810003063941178ull, 12259639152869368106ull, 5533257232541698810ull}}, {{10119569885896183014ull, 11297640466975150665ull, 6101176904231934325ull, 6916571540677123513ull}}, {{17261148375797616671ull, 286992528436774619ull, 12238157148717305811ull, 8645714425846404391ull}}, {{8482374725659816467ull, 16320271394768841801ull, 14566377245589397987ull, 5403571516154002744ull}}, {{15214654425502158488ull, 15788653225033664347ull, 18207971556986747484ull, 6754464395192503430ull}}, {{14406632013450310206ull, 1289072457582528818ull, 13536592409378658548ull, 8443080493990629288ull}}, {{13615831026833831783ull, 10029042322843856319ull, 8460370255861661592ull, 5276925308744143305ull}}, {{12408102765114901825ull, 12536302903554820399ull, 15187148838254464894ull, 6596156635930179131ull}}, {{10898442437966239377ull, 6447006592588749691ull, 14372250029390693214ull, 8245195794912723914ull}}, {{4505683514515205659ull, 17864437175650132269ull, 13594342286796571162ull, 5153247371820452446ull}}, {{10243790411571394977ull, 13107174432707889528ull, 7769555821640938145ull, 6441559214775565558ull}}, {{12804738014464243721ull, 2548909985602698198ull, 488572740196396874ull, 8051949018469456948ull}}, {{3391275240612764422ull, 6204754759429074278ull, 9528729999477523854ull, 5032468136543410592ull}}, {{13462466087620731335ull, 16979315486141118655ull, 11910912499346904817ull, 6290585170679263240ull}}, {{12216396591098526265ull, 7389086302394234607ull, 14888640624183631022ull, 7863231463349079050ull}}, {{14552776897077660772ull, 6492920569008725ull, 13917086408542157293ull, 4914519664593174406ull}}, {{4355913066064912253ull, 4619802169138648811ull, 8172985973822920808ull, 6143149580741468008ull}}, {{833205314153752412ull, 5774752711423311014ull, 10216232467278651010ull, 7678936975926835010ull}}, {{14355811376628258970ull, 8220906463066957287ull, 10996831310476544785ull, 4799335609954271881ull}}, {{13333078202357935808ull, 14887819097261084513ull, 18357725156523068885ull, 5999169512442839851ull}}, {{2831289697665256048ull, 4774715816294191930ull, 18335470427226448203ull, 7498961890553549814ull}}, {{6381242079468172934ull, 678354375970176004ull, 6847982998589142223ull, 4686851181595968634ull}}, {{7976552599335216167ull, 14683001025244883717ull, 17783350785091203586ull, 5858563976994960792ull}}, {{14582376767596408113ull, 9130379244701328838ull, 3782444407654452867ull, 7323204971243700991ull}}, {{9004598922640734333ull, 6801288037449273144ull, 116369491140678180ull, 9154006214054626239ull}}, {{5627874326650458958ull, 13474177060260571523ull, 6990259959604005718ull, 5721253883784141399ull}}, {{2423156889885685794ull, 7619349288470938596ull, 4126138931077619244ull, 7151567354730176749ull}}, {{3028946112357107242ull, 9524186610588673245ull, 9769359682274411959ull, 8939459193412720936ull}}, {{4198934329436885979ull, 12870145659259002634ull, 6105849801421507474ull, 5587161995882950585ull}}, {{14472039948650883281ull, 6864310037218977484ull, 12243998270204272247ull, 6983952494853688231ull}}, {{18090049935813604101ull, 3968701528096333951ull, 10693311819327952405ull, 8729940618567110289ull}}, {{18223810237524584419ull, 4786281464273902671ull, 18212534933148440013ull, 5456212886604443930ull}}, {{18168076778478342620ull, 10594537848769766243ull, 13542296629580774208ull, 6820266108255554913ull}}, {{18098409954670540371ull, 13243172310962207804ull, 3092812731693804048ull, 8525332635319443642ull}}, {{2088134184814311924ull, 8276982694351379878ull, 6544693975736015434ull, 5328332897074652276ull}}, {{11833539767872665713ull, 1122856331084449039ull, 8180867469670019293ull, 6660416121343315345ull}}, {{10180238691413444237ull, 6015256432282949203ull, 14837770355514912020ull, 8325520151679144181ull}}, {{4056806172919708696ull, 12982907307031619060ull, 11579449481410513964ull, 5203450094799465113ull}}, {{5071007716149635870ull, 16228634133789523825ull, 639253796480978743ull, 6504312618499331392ull}}, {{10950445663614432742ull, 15674106648809516877ull, 799067245601223429ull, 8130390773124164240ull}}, {{9149871548972714416ull, 12102159664719642000ull, 499417028500764643ull, 5081494233202602650ull}}, {{11437339436215893020ull, 10516013562472164596ull, 9847643322480731612ull, 6351867791503253312ull}}, {{14296674295269866275ull, 13145016953090205745ull, 12309554153100914515ull, 7939834739379066640ull}}, {{2017892406902584566ull, 5909792586467684639ull, 7693471345688071572ull, 4962396712111916650ull}}, {{16357423563910394419ull, 7387240733084605798ull, 393467145255313657ull, 6202995890139895813ull}}, {{11223407418033217216ull, 13845736934783145152ull, 5103519949996529975ull, 7753744862674869766ull}}, {{7014629636270760760ull, 15571114611880547576ull, 17024758024029994946ull, 4846090539171793603ull}}, {{8768287045338450950ull, 10240521227995908662ull, 16669261511610105779ull, 6057613173964742004ull}}, {{1736986769818287879ull, 8188965516567497924ull, 2389832815803080608ull, 7572016467455927506ull}}, {{10308988767991205733ull, 5118103447854686202ull, 6105331528304313284ull, 4732510292159954691ull}}, {{3662863923134231358ull, 6397629309818357753ull, 3019978391953003701ull, 5915637865199943364ull}}, {{9190265922345177101ull, 12608722655700335095ull, 3774972989941254626ull, 7394547331499929205ull}}, {{12661445229106817544ull, 12492137678240097338ull, 4665201127926978093ull, 4621592082187455753ull}}, {{6603434499528746122ull, 1780114042517957961ull, 10443187428336110521ull, 5776990102734319691ull}}, {{12865979142838320557ull, 6836828571574835355ull, 8442298266992750247ull, 7221237628417899614ull}}, {{11470787910120512792ull, 3934349696041156290ull, 1329500796886162001ull, 9026547035522374518ull}}, {{11780928462252708399ull, 13988183606094192441ull, 14665996053336014962ull, 5641591897201484073ull}}, {{891102522533721787ull, 8261857470762964744ull, 4497437011387854991ull, 7051989871501855092ull}}, {{1113878153167152233ull, 5715635820026318026ull, 5621796264234818739ull, 8814987339377318865ull}}, {{5307859864156858050ull, 1266429378302754814ull, 15042837711215231472ull, 5509367087110824290ull}}, {{15858196867050848370ull, 1583036722878443517ull, 9580175102164263532ull, 6886708858888530363ull}}, {{5987688028531396751ull, 1978795903598054397ull, 7363532859277941511ull, 8608386073610662954ull}}, {{6048148027045816922ull, 8154276467389865854ull, 9213894055476101348ull, 5380241296006664346ull}}, {{16783557070662046960ull, 10192845584237332317ull, 2293995532490350877ull, 6725301620008330433ull}}, {{7144388283045394988ull, 17352742998724053301ull, 7479180434040326500ull, 8406627025010413041ull}}, {{6771085686117065819ull, 1622092337347757505ull, 16203702817343673823ull, 5254141890631508150ull}}, {{13075543126073720178ull, 15862673476966860593ull, 11031256484824816470ull, 6567677363289385188ull}}, {{2509370852309986511ull, 10604969809353799934ull, 13789070606031020588ull, 8209596704111731485ull}}, {{15403414837975905281ull, 15851478167700900766ull, 10924012137983081819ull, 5130997940069832178ull}}, {{10030896510615105793ull, 15202661691198738054ull, 4431643135624076466ull, 6413747425087290223ull}}, {{3315248601414106434ull, 9779955077143646760ull, 927867901102707679ull, 8017184281359112779ull}}, {{2072030375883816521ull, 13030000950855861081ull, 16720818502685049963ull, 5010740175849445486ull}}, {{7201723988282158555ull, 11675815170142438447ull, 11677651091501536646ull, 6263425219811806858ull}}, {{4390468966925310290ull, 5371396925823272251ull, 5373691827522145000ull, 7829281524764758573ull}}, {{438200095114624980ull, 3357123078639545157ull, 5664400401415034577ull, 4893300952977974108ull}}, {{5159436137320669128ull, 8808089866726819350ull, 7080500501768793221ull, 6116626191222467635ull}}, {{15672667208505612218ull, 15621798351835912091ull, 4238939608783603622ull, 7645782739028084544ull}}, {{7489573996102313685ull, 5151937951470057153ull, 2649337255489752264ull, 4778614211892552840ull}}, {{13973653513555280010ull, 6439922439337571441ull, 3311671569362190330ull, 5973267764865691050ull}}, {{3632008836661936300ull, 17273275086026740110ull, 13362961498557513720ull, 7466584706082113812ull}}, {{16105063578195873900ull, 10795796928766712568ull, 17575222973453221883ull, 4666615441301321132ull}}, {{1684585399035290758ull, 8883060142531002807ull, 3522284643106975738ull, 5833269301626651416ull}}, {{15940789804076277160ull, 1880453141308977700ull, 4402855803883719673ull, 7291586627033314270ull}}, {{1479243181385794834ull, 6962252445063610030ull, 14726941791709425399ull, 9114483283791642837ull}}, {{14759585043648285483ull, 11268936805805838124ull, 11510181629032084826ull, 5696552052369776773ull}}, {{2737230850805238ull, 4862798970402521848ull, 552668981007942321ull, 7120690065462220967ull}}, {{3421538563506547ull, 10690184731430540214ull, 14525894281542091613ull, 8900862581827776208ull}}, {{13837196516884355304ull, 8987208466357781585ull, 9078683925963807258ull, 5563039113642360130ull}}, {{3461437590823280418ull, 2010638546092451174ull, 2124982870599983265ull, 6953798892052950163ull}}, {{13550169025383876331ull, 7124984201042951871ull, 16491286643532142793ull, 8692248615066187703ull}}, {{15386384668506004563ull, 15982330171720314679ull, 17224583179848671101ull, 5432655384416367314ull}}, {{14621294817205117799ull, 6142854659368229637ull, 12307356937956063069ull, 6790819230520459143ull}}, {{4441560466224233537ull, 12290254342637674951ull, 10772510154017690932ull, 8488524038150573929ull}}, {{9693504319031227817ull, 16904781001003322652ull, 18262033892329526592ull, 5305327523844108705ull}}, {{12116880398789034771ull, 2684232177544601699ull, 8992484310129744529ull, 6631659404805135882ull}}, {{10534414480058905560ull, 7966976240358140028ull, 2017233350807404853ull, 8289574256006419853ull}}, {{15807381086891591783ull, 7285203159437531469ull, 3566613853468321985ull, 5180983910004012408ull}}, {{5924168303332326017ull, 13718189967724302241ull, 4458267316835402481ull, 6476229887505015510ull}}, {{12016896397592795425ull, 3312679404373214089ull, 14796206182899028910ull, 8095287359381269387ull}}, {{593031220854415285ull, 15905482683015422518ull, 6941785855098199116ull, 5059554599613293367ull}}, {{9964661062922794914ull, 1435109280059726531ull, 4065546300445360992ull, 6324443249516616709ull}}, {{7844140310226105738ull, 1793886600074658164ull, 9693618893984089144ull, 7905554061895770886ull}}, {{14125959730746091894ull, 1121179125046661352ull, 1446825790312667811ull, 4940971288684856804ull}}, {{17657449663432614868ull, 15236531961590490402ull, 1808532237890834763ull, 6176214110856071005ull}}, {{12848440042435992777ull, 14433978933560725099ull, 6872351315790931358ull, 7720267638570088756ull}}, {{5724432017308801534ull, 4409550815048065283ull, 13518591609224107907ull, 4825167274106305472ull}}, {{2543854003208614013ull, 900252500382693700ull, 16898239511530134884ull, 6031459092632881840ull}}, {{3179817504010767516ull, 1125315625478367125ull, 2676055315703116989ull, 7539323865791102301ull}}, {{4293228949220423650ull, 3009165275137673405ull, 3978377581528142070ull, 4712077416119438938ull}}, {{9978222204952917466ull, 12984828630776867564ull, 14196344013764953395ull, 5890096770149298672ull}}, {{12472777756191146832ull, 11619349770043696551ull, 17745430017206191744ull, 7362620962686623340ull}}, {{10979286176811545636ull, 14524187212554620689ull, 3735043447798188064ull, 9203276203358279176ull}}, {{18391268906575685783ull, 9077617007846637930ull, 2334402154873867540ull, 5752047627098924485ull}}, {{13765714096364831420ull, 11347021259808297413ull, 7529688712019722329ull, 7190059533873655606ull}}, {{3372084565173875563ull, 348718519478208055ull, 188738853169877104ull, 8987574417342069508ull}}, {{9025081880874754083ull, 217949074673880034ull, 9341333820085948998ull, 5617234010838793442ull}}, {{2057980314238666796ull, 9495808380197125851ull, 2453295238252660439ull, 7021542513548491803ull}}, {{16407533448080497207ull, 7258074456819019409ull, 16901677103097989261ull, 8776928141935614753ull}}, {{3337179377409228899ull, 6842139544725581083ull, 3646019161795161432ull, 5485580088709759221ull}}, {{18006532277043699835ull, 8552674430906976353ull, 9169209970671339694ull, 6856975110887199026ull}}, {{8673107291022461082ull, 1467471001778944634ull, 2238140426484398810ull, 8571218888608998783ull}}, {{10032378075316426080ull, 5528855394539228300ull, 8316366794193831112ull, 5357011805380624239ull}}, {{12540472594145532600ull, 6911069243174035375ull, 5783772474314900986ull, 6696264756725780299ull}}, {{11063904724254527846ull, 17862208590822320027ull, 2618029574466238328ull, 8370330945907225374ull}}, {{4609097443445385952ull, 11163880369263950017ull, 15471326539323562667ull, 5231456841192015858ull}}, {{10373057822734120344ull, 9343164443152549617ull, 10115786137299677526ull, 6539321051490019823ull}}, {{17578008296845038334ull, 2455583517085911213ull, 8033046653197209004ull, 8174151314362524779ull}}, {{13292098194741842911ull, 10758111735033470316ull, 2714811149034561675ull, 5108844571476577987ull}}, {{16615122743427303638ull, 8835953650364449991ull, 17228571991575365806ull, 6386055714345722483ull}}, {{16157217410856741644ull, 1821570026100786681ull, 16924028971041819354ull, 7982569642932153104ull}}, {{3180731854144381672ull, 5750167284740379580ull, 10577518106901137096ull, 4989106026832595690ull}}, {{3975914817680477089ull, 7187709105925474475ull, 3998525596771645562ull, 6236382533540744613ull}}, {{358207503673208457ull, 18208008419261618902ull, 9609843014391944856ull, 7795478166925930766ull}}, {{14058937745077918998ull, 11380005262038511813ull, 1394465865567577631ull, 4872173854328706729ull}}, {{3738614126065235036ull, 9613320559120751863ull, 6354768350386859943ull, 6090217317910883411ull}}, {{61581639154155890ull, 7404964680473551925ull, 3331774419556187025ull, 7612771647388604264ull}}, {{2344331533685041384ull, 16157317971364439713ull, 2082359012222616890ull, 4757982279617877665ull}}, {{7542100435533689633ull, 10973275427350773833ull, 7214634783705659017ull, 5947477849522347081ull}}, {{14039311562844499946ull, 18328280302615855195ull, 13629979498059461675ull, 7434347311902933851ull}}, {{6468726717564118514ull, 9149332179921215545ull, 6212894177073469595ull, 4646467069939333657ull}}, {{12697594415382536047ull, 6824979206474131527ull, 12377803739769224898ull, 5808083837424167071ull}}, {{11260307000800782154ull, 17754596044947440217ull, 10860568656284143218ull, 7260104796780208839ull}}, {{240325695718813981ull, 12969873019329524464ull, 8964024801927791119ull, 9075130995975261049ull}}, {{150203559824258738ull, 15023699664722034646ull, 17131730547273339209ull, 5671956872484538155ull}}, {{9411126486635099230ull, 4944566525620379595ull, 16802977165664286108ull, 7089946090605672694ull}}, {{7152222089866486134ull, 6180708157025474494ull, 11780349420225581827ull, 8862432613257090868ull}}, {{18305196861448717546ull, 1557099588927227606ull, 16586090424495764450ull, 5539020383285681792ull}}, {{13658124039956121124ull, 11169746523013810316ull, 2285868956910153946ull, 6923775479107102241ull}}, {{17072655049945151405ull, 4738811116912487087ull, 7469022214565080337ull, 8654719348883877801ull}}, {{17587938433856801484ull, 14490971994138774189ull, 16197353930171644970ull, 5409199593052423625ull}}, {{8149864987038838143ull, 8890342955818691929ull, 6411634357432392501ull, 6761499491315529532ull}}, {{14799017252225935583ull, 15724614713200752815ull, 8014542946790490626ull, 8451874364144411915ull}}, {{16166914810282291596ull, 14439570214177858413ull, 2703246332530362689ull, 5282421477590257447ull}}, {{6373585457570700782ull, 4214404712440159305ull, 17214115970945117074ull, 6603026846987821808ull}}, {{12578667840390763882ull, 14491377927404974939ull, 3070900889971844726ull, 8253783558734777261ull}}, {{5555824391030533474ull, 4445425186200721433ull, 4225156065446096906ull, 5158614724209235788ull}}, {{11556466507215554747ull, 14780153519605677599ull, 5281445081807621132ull, 6448268405261544735ull}}, {{9833897115592055529ull, 28447825797545383ull, 1990120333832138512ull, 8060335506576930919ull}}, {{13063714724886116562ull, 17779891123465864ull, 8161354236286168426ull, 5037709691610581824ull}}, {{16329643406107645702ull, 9245596900759108138ull, 10201692795357710532ull, 6297137114513227280ull}}, {{11188682220779781320ull, 11556996125948885173ull, 12752115994197138165ull, 7871421393141534100ull}}, {{9298769397201057277ull, 9528965587931747185ull, 17193444533227987161ull, 4919638370713458812ull}}, {{16235147764928709500ull, 16522893003342071885ull, 3045061592825432335ull, 6149547963391823516ull}}, {{6458876650878723163ull, 16041930235750201953ull, 3806326991031790419ull, 7686934954239779395ull}}, {{15566012952867671737ull, 7720363388130182268ull, 73111360181175060ull, 4804334346399862122ull}}, {{1010772117375038055ull, 9650454235162727836ull, 9314761237081244633ull, 6005417932999827652ull}}, {{1263465146718797569ull, 16674753812380797699ull, 11643451546351555791ull, 7506772416249784565ull}}, {{16930566781195106145ull, 17339250160379080417ull, 9583000225683416321ull, 4691732760156115353ull}}, {{7328150421211718969ull, 7839004645191686810ull, 16590436300531658306ull, 5864665950195144191ull}}, {{18383560063369424519ull, 575383769634832704ull, 16126359357237184979ull, 7330832437743930239ull}}, {{4532706005502229033ull, 14554287767325704593ull, 15546263178119093319ull, 9163540547179912799ull}}, {{14362156299507362906ull, 16013958882219647226ull, 16633943513965515180ull, 5727212841987445499ull}}, {{8729323337529427824ull, 1570704529065007417ull, 16180743374029506072ull, 7159016052484306874ull}}, {{15523340190339172684ull, 1963380661331259271ull, 11002557180682106782ull, 8948770065605383593ull}}, {{16619616646603064784ull, 15062170968614200756ull, 18405813283994786498ull, 5592981291003364745ull}}, {{2327776734544279363ull, 9604341673912975138ull, 9172208549711319411ull, 6991226613754205932ull}}, {{12133092955035125012ull, 7393741073963831018ull, 11465260687139149264ull, 8739033267192757415ull}}, {{12194869115324341037ull, 4621088171227394386ull, 14083316957103050146ull, 5461895791995473384ull}}, {{6020214357300650488ull, 14999732250889018791ull, 17604146196378812682ull, 6827369739994341730ull}}, {{2913581928198425206ull, 9526293276756497681ull, 12781810708618740045ull, 8534212174992927163ull}}, {{13350203751192485514ull, 8259776307186505002ull, 5682788683673018576ull, 5333882609370579477ull}}, {{7464382652135831084ull, 10324720383983131253ull, 11715171873018661124ull, 6667353261713224346ull}}, {{13942164333597176759ull, 12905900479978914066ull, 5420592804418550597ull, 8334191577141530433ull}}, {{13325538726925623378ull, 10372030809200515243ull, 14917085548830063883ull, 5208869735713456520ull}}, {{12045237390229641319ull, 8353352493073256150ull, 199612862328028238ull, 6511087169641820651ull}}, {{5833174700932275841ull, 1218318579486794380ull, 14084574133192199010ull, 8138858962052275813ull}}, {{12869106224937448209ull, 5373135130606634391ull, 11108701842458818333ull, 5086786851282672383ull}}, {{11474696762744422357ull, 11328104931685680893ull, 9274191284646135012ull, 6358483564103340479ull}}, {{508312898148364234ull, 14160131164607101117ull, 6981053087380280861ull, 7948104455129175599ull}}, {{2623538570556421598ull, 11155924987093132150ull, 11280687207253757394ull, 4967565284455734749ull}}, {{12502795250050302806ull, 4721534197011639379ull, 265800953785033031ull, 6209456605569668437ull}}, {{11016808044135490603ull, 1290231727837161320ull, 4943937210658679193ull, 7761820756962085546ull}}, {{6885505027584681627ull, 12335609875966695585ull, 7701646775089062399ull, 4851137973101303466ull}}, {{13218567302908239938ull, 10807826326530981577ull, 403686432006552191ull, 6063922466376629333ull}}, {{2688151073353136210ull, 8898096889736339068ull, 5116294058435578143ull, 7579903082970786666ull}}, {{10903466457700485939ull, 12478839583726293773ull, 7809369804949624243ull, 4737439426856741666ull}}, {{18241019090552995328ull, 10986863461230479312ull, 538340219332254496ull, 5921799283570927083ull}}, {{4354529789481692544ull, 13733579326538099141ull, 14507983329447481832ull, 7402249104463658853ull}}, {{5027424127639751792ull, 8583487079086311963ull, 11373332590118370097ull, 4626405690289786783ull}}, {{1672594141122301836ull, 15341044867285277858ull, 9604979719220574717ull, 5783007112862233479ull}}, {{11314114713257653103ull, 5341248028824433610ull, 7394538630598330493ull, 7228758891077791849ull}}, {{4919271354717290571ull, 11288246054457929917ull, 13854859306675301020ull, 9035948613847239811ull}}, {{5380387605912000559ull, 16278525820890982006ull, 6353444057458369185ull, 5647467883654524882ull}}, {{15948856544244776506ull, 6513099220831563795ull, 17165177108677737290ull, 7059334854568156102ull}}, {{15324384661878582729ull, 17364746062894230552ull, 12233099348992395804ull, 8824168568210195128ull}}, {{9577740413674114206ull, 1629594252454118287ull, 7645687093120247378ull, 5515105355131371955ull}}, {{7360489498665254853ull, 11260364852422423667ull, 4945422847972921318ull, 6893881693914214944ull}}, {{4588925854904180662ull, 4852084028673253776ull, 6181778559966151648ull, 8617352117392768680ull}}, {{2868078659315112914ull, 3032552517920783610ull, 3863611599978844780ull, 5385845073370480425ull}}, {{12808470360998666950ull, 3790690647400979512ull, 9441200518400943879ull, 6732306341713100531ull}}, {{16010587951248333688ull, 126677290823836486ull, 7189814629573791945ull, 8415382927141375664ull}}, {{5394931451102820651ull, 11608388352833367564ull, 4493634143483619965ull, 5259614329463359790ull}}, {{6743664313878525814ull, 675427385759545743ull, 14840414716209300765ull, 6574517911829199737ull}}, {{3817894373920769363ull, 5455970250626820083ull, 4715460339979462244ull, 8218147389786499672ull}}, {{80340974486786900ull, 12633353443496538360ull, 2947162712487163902ull, 5136342118616562295ull}}, {{100426218108483625ull, 6568319767515897142ull, 17519011445891118590ull, 6420427648270702868ull}}, {{9348904809490380339ull, 17433771746249647235ull, 3452020233654346621ull, 8025534560338378586ull}}, {{3537222496717793760ull, 13201950350619723474ull, 6769198664461354542ull, 5015959100211486616ull}}, {{13644900157752018008ull, 7279065901419878534ull, 8461498330576693178ull, 6269948875264358270ull}}, {{7832753160335246702ull, 18322204413629623976ull, 1353500876366090664ull, 7837436094080447838ull}}, {{4895470725209529189ull, 11451377758518514985ull, 14680996103010970377ull, 4898397558800279898ull}}, {{10731024424939299390ull, 479164142865980019ull, 9127873091908937164ull, 6122996948500349873ull}}, {{8802094512746736333ull, 598955178582475024ull, 16021527383313559359ull, 7653746185625437341ull}}, {{5501309070466710209ull, 7291876014255128746ull, 12319297623784668551ull, 4783591366015898338ull}}, {{16100008374938163569ull, 4503158999391523028ull, 6175749992876059881ull, 5979489207519872923ull}}, {{1678266394963152845ull, 10240634767666791690ull, 3108001472667686947ull, 7474361509399841154ull}}, {{5660602515279358432ull, 4094553720578050854ull, 6554186938844692246ull, 4671475943374900721ull}}, {{16299125180953973848ull, 14341564187577339375ull, 12804419691983253211ull, 5839344929218625901ull}}, {{15762220457765079406ull, 13315269216044286315ull, 2170466559696902802ull, 7299181161523282377ull}}, {{15091089553778961353ull, 7420714483200582086ull, 7324769218048516407ull, 9123976451904102971ull}}, {{4820244952684462942ull, 11555475579641445660ull, 2272137752066628802ull, 5702485282440064357ull}}, {{6025306190855578677ull, 5220972437697031267ull, 7451858208510673907ull, 7128106603050080446ull}}, {{2919946720142085442ull, 1914529528693901180ull, 91450723783566576ull, 8910133253812600558ull}}, {{11048338736943579210ull, 1196580955433688237ull, 13892214757646892822ull, 5568833283632875348ull}}, {{18422109439606861916ull, 10719098231146886104ull, 17365268447058616027ull, 6961041604541094185ull}}, {{4580892725799025779ull, 8787186770506219727ull, 7871527503541106322ull, 8701302005676367732ull}}, {{9780586981265472968ull, 10103677749993775233ull, 14143076726567967259ull, 5438313753547729832ull}}, {{16837419745009229114ull, 8017911169064831137ull, 17678845908209959074ull, 6797892191934662290ull}}, {{7211716625979372680ull, 799016924476263114ull, 12875185348407673035ull, 8497365239918327863ull}}, {{9119008909664495829ull, 16640286642293522110ull, 14964519870395877502ull, 5310853274948954914ull}}, {{2175389100225843979ull, 11576986266012126830ull, 9482277801140071070ull, 6638566593686193643ull}}, {{11942608412137080781ull, 5247860795660382729ull, 7241161232997700934ull, 8298208242107742054ull}}, {{546601229944593632ull, 17114971052569902918ull, 18360783825905726795ull, 5186380151317338783ull}}, {{9906623574285517848ull, 16782027797284990743ull, 18339293763954770590ull, 6482975189146673479ull}}, {{7771593449429509406ull, 11754162709751462621ull, 18312431186516075334ull, 8103718986433341849ull}}, {{7163088915107137331ull, 2734665675167276234ull, 4527740463931465228ull, 5064824366520838656ull}}, {{18177233180738697472ull, 3418332093959095292ull, 5659675579914331535ull, 6331030458151048320ull}}, {{4274797402213820224ull, 18107973172731032828ull, 7074594474892914418ull, 7913788072688810400ull}}, {{11895120413238413448ull, 15929169251384283421ull, 4421621546808071511ull, 4946117545430506500ull}}, {{1033842461265853098ull, 15299775545802966373ull, 5527026933510089389ull, 6182646931788133125ull}}, {{5903989095009704276ull, 5289661376971544254ull, 11520469685314999641ull, 7728308664735166406ull}}, {{17525051239663228885ull, 14835253406675684918ull, 2588607534894486871ull, 4830192915459479004ull}}, {{12682942012724260298ull, 13932380739917218244ull, 3235759418618108589ull, 6037741144324348755ull}}, {{15853677515905325372ull, 3580417869614359093ull, 17879757328554799449ull, 7547176430405435943ull}}, {{12214391456654522310ull, 13766976214577444193ull, 18092377357987831511ull, 4716985269003397464ull}}, {{1432931265535989175ull, 12597034249794417338ull, 4168727623775237773ull, 5896231586254246831ull}}, {{11014536118774762277ull, 1911234756960857960ull, 599223511291659313ull, 7370289482817808539ull}}, {{13768170148468452846ull, 7000729464628460354ull, 14584087444396737853ull, 9212861853522260673ull}}, {{13216792361220170933ull, 6681298924606481673ull, 2197525625106879302ull, 5758038658451412921ull}}, {{2685932396243049954ull, 17574995692612877900ull, 7358593049810987031ull, 7197548323064266151ull}}, {{3357415495303812442ull, 17357058597338709471ull, 4586555293836345885ull, 8996935403830332689ull}}, {{9015913712205964633ull, 13154004632550387371ull, 14395812104716185938ull, 5623084627393957930ull}}, {{6658206121830067887ull, 7219133753833208406ull, 8771393094040456615ull, 7028855784242447413ull}}, {{17546129689142360666ull, 4412231173864122603ull, 15575927385977958673ull, 8786069730303059266ull}}, {{8660488046500281465ull, 14286859529733546387ull, 14346640634663612074ull, 5491293581439412041ull}}, {{6213924039697963927ull, 8635202375312157176ull, 4098242738047351381ull, 6864116976799265052ull}}, {{7767405049622454908ull, 15405688987567584374ull, 5122803422559189226ull, 8580146220999081315ull}}, {{242942137586646414ull, 14240241635657128138ull, 895909129885799314ull, 5362591388124425822ull}}, {{9527049708838083825ull, 8576930007716634364ull, 10343258449212024951ull, 6703239235155532277ull}}, {{11908812136047604781ull, 6109476491218405051ull, 17540759079942419093ull, 8379049043944415346ull}}, {{5137164575816059036ull, 6124265816225197109ull, 15574660443391399837ull, 5236905652465259591ull}}, {{11033141738197461699ull, 12267018288708884290ull, 14856639535811861892ull, 6546132065581574489ull}}, {{4568055135892051316ull, 15333772860886105363ull, 4735741364482663653ull, 8182665081976968112ull}}, {{549191450718838121ull, 11889451047267509804ull, 2959838352801664783ull, 5114165676235605070ull}}, {{686489313398547651ull, 10250127790656999351ull, 12923169977856856787ull, 6392707095294506337ull}}, {{14693169697030348275ull, 8200973719893861284ull, 2318904417038907272ull, 7990883869118132922ull}}, {{18406603097498743480ull, 5125608574933663302ull, 6061001279076704949ull, 4994302418198833076ull}}, {{13784881835018653542ull, 11018696737094467032ull, 7576251598845881186ull, 6242878022748541345ull}}, {{17231102293773316928ull, 4549998884513307982ull, 14082000516984739387ull, 7803597528435676681ull}}, {{6157752915180935176ull, 537906293607123537ull, 1883721295474380261ull, 4877248455272297926ull}}, {{12308877162403556874ull, 5284068885436292325ull, 11578023656197751134ull, 6096560569090372407ull}}, {{1551038397722282380ull, 15828458143650141215ull, 9860843551819801013ull, 7620700711362965509ull}}, {{7886928026217508344ull, 12198629348995032211ull, 8468870229101069585ull, 4762937944601853443ull}}, {{5246974014344497526ull, 1413228630961626552ull, 5974401767948949078ull, 5953672430752316804ull}}, {{6558717517930621907ull, 10989907825556808998ull, 7468002209936186347ull, 7442090538440396005ull}}, {{17934256503988802404ull, 4562849381759311671ull, 6973344390423810419ull, 4651306586525247503ull}}, {{17806134611558615101ull, 1091875708771751685ull, 4104994469602375120ull, 5814133233156559379ull}}, {{8422610209166105164ull, 1364844635964689607ull, 519557068575580996ull, 7267666541445699224ull}}, {{5916576743030243551ull, 1706055794955862009ull, 649446335719476245ull, 9084583176807124030ull}}, {{15227075510462371979ull, 3372127881061107707ull, 14240962015106836365ull, 5677864485504452518ull}}, {{14422158369650577070ull, 8826845869753772538ull, 8577830482028769648ull, 7097330606880565648ull}}, {{8804325925208445530ull, 11033557337192215673ull, 10722288102535962060ull, 8871663258600707060ull}}, {{17031918749323748216ull, 16119345372599910603ull, 15924802100939752095ull, 5544789536625441912ull}}, {{16678212418227297366ull, 15537495697322500350ull, 1459258552465138503ull, 6930986920781802391ull}}, {{11624393485929345900ull, 14810183603225737534ull, 15659131245863586841ull, 8663733650977252988ull}}, {{2653559910278453283ull, 2338835724375004103ull, 563584991809965968ull, 5414833531860783118ull}}, {{17152007943130230316ull, 2923544655468755128ull, 9927853276617233268ull, 6768541914825978897ull}}, {{2993265855203236279ull, 3654430819335943911ull, 17021502614198929489ull, 8460677393532473621ull}}, {{8788320187143104531ull, 13813234308153434704ull, 12944282143088024882ull, 5287923370957796013ull}}, {{10985400233928880663ull, 8043170848337017572ull, 2345294623577867391ull, 6609904213697245017ull}}, {{13731750292411100829ull, 5442277541993884061ull, 7543304297899722143ull, 8262380267121556271ull}}, {{10888186941970631970ull, 10318952491387259394ull, 11632094213828408195ull, 5163987666950972669ull}}, {{4386861640608514155ull, 8287004595806686339ull, 705059712003346532ull, 6454984583688715837ull}}, {{871891032333254789ull, 10358755744758357924ull, 5493010658431571069ull, 8068730729610894796ull}}, {{9768303932063060051ull, 8780065349687667654ull, 12656503698374507726ull, 5042956706006809247ull}}, {{2987007878224049256ull, 1751709650254808760ull, 11208943604540746754ull, 6303695882508511559ull}}, {{3733759847780061570ull, 11413009099673286758ull, 9399493487248545538ull, 7879619853135639449ull}}, {{16168657960144702193ull, 11744816705723192127ull, 17403898475598810721ull, 4924762408209774655ull}}, {{15599136431753489838ull, 845962826871826447ull, 17143187076071125498ull, 6155953010262218319ull}}, {{14887234521264474393ull, 10280825570444558867ull, 16817297826661518968ull, 7694941262827772899ull}}, {{6998678566576602544ull, 6425515981527849292ull, 8204968132449755403ull, 4809338289267358062ull}}, {{8748348208220753180ull, 3420208958482423711ull, 1032838128707418446ull, 6011672861584197578ull}}, {{6323749241848553570ull, 13498633234957805447ull, 10514419697739048865ull, 7514591076980246972ull}}, {{10869872303796427838ull, 1519116744207546548ull, 15794884347941681349ull, 4696619423112654357ull}}, {{13587340379745534797ull, 6510581948686821089ull, 5908547379644937974ull, 5870774278890817947ull}}, {{3149117419399754784ull, 17361599472713302170ull, 2773998206128784563ull, 7338467848613522434ull}}, {{13159768811104469288ull, 17090313322464239808ull, 12690869794515756512ull, 9173084810766903042ull}}, {{8224855506940293305ull, 10681445826540149880ull, 12543479639999735724ull, 5733178006729314401ull}}, {{10281069383675366631ull, 13351807283175187350ull, 1844291494717505943ull, 7166472508411643002ull}}, {{3627964692739432481ull, 12078073085541596284ull, 11528736405251658237ull, 8958090635514553752ull}}, {{11490849969816921109ull, 9854638687677191629ull, 7205460253282286398ull, 5598806647196596095ull}}, {{528504406988987674ull, 3094926322741713729ull, 4395139298175470094ull, 6998508308995745119ull}}, {{5272316527163622496ull, 13092029940281917969ull, 882238104291949713ull, 8748135386244681399ull}}, {{14824412875545733820ull, 1264989685035116874ull, 7468927842823550427ull, 5467584616402925874ull}}, {{9307144057577391467ull, 15416295161576059805ull, 112787766674662225ull, 6834480770503657343ull}}, {{16245616090399127238ull, 5435310896687911044ull, 13976042763625491494ull, 8543100963129571678ull}}, {{930138019644678716ull, 17232127365712108115ull, 4123340708838544279ull, 5339438101955982299ull}}, {{14997730579838012107ull, 16928473188712747239ull, 542489867620792445ull, 6674297627444977874ull}}, {{14135477206370127229ull, 7325533430608770337ull, 9901484371380766365ull, 8342872034306222342ull}}, {{1917144226340247663ull, 6884301403344175413ull, 1576741713685591074ull, 5214295021441388964ull}}, {{7008116301352697482ull, 17828748791034995074ull, 1970927142106988842ull, 6517868776801736205ull}}, {{17983517413545647661ull, 13062563951938968034ull, 7075344946061123957ull, 8147335971002170256ull}}, {{15851384401893417692ull, 10469945479175548973ull, 4422090591288202473ull, 5092084981876356410ull}}, {{5979172447084608403ull, 17699117867396824121ull, 14750985275965028899ull, 6365106227345445512ull}}, {{12085651577283148407ull, 17512211315818642247ull, 18438731594956286124ull, 7956382784181806890ull}}, {{14471061263443049611ull, 1721760035531875596ull, 16135893265275066732ull, 4972739240113629306ull}}, {{18088826579303812013ull, 2152200044414844495ull, 10946494544739057607ull, 6215924050142036633ull}}, {{17999347205702377113ull, 16525308110800719331ull, 18294804199351209912ull, 7769905062677545791ull}}, {{8943748994350291744ull, 10328317569250449582ull, 18351781652235588051ull, 4856190664173466119ull}}, {{1956314206083088871ull, 8298710943135674074ull, 18328041046867097160ull, 6070238330216832649ull}}, {{11668764794458636897ull, 10373388678919592592ull, 9074993253301707738ull, 7587797912771040812ull}}, {{7292977996536648061ull, 11095053942752133274ull, 14895242820168343144ull, 4742373695481900507ull}}, {{18339594532525585884ull, 13868817428440166592ull, 14007367506783041026ull, 5927967119352375634ull}}, {{4477749091947430739ull, 8112649748695432433ull, 8285837346624025475ull, 7409958899190469543ull}}, {{14327808228535613972ull, 2764563083720951318ull, 12096177369281097778ull, 4631224311994043464ull}}, {{8686388248814741657ull, 12679075891505964956ull, 15120221711601372222ull, 5789030389992554330ull}}, {{10857985311018427071ull, 6625472827527680387ull, 9676905102646939470ull, 7236287987490692913ull}}, {{8960795620345645935ull, 17505213071264376292ull, 16707817396736062241ull, 9045359984363366141ull}}, {{14823869299570804517ull, 4023229141899153326ull, 12748228882173732853ull, 5653349990227103838ull}}, {{9306464587608729838ull, 9640722445801329562ull, 6711914065862390258ull, 7066687487783879798ull}}, {{2409708697656136490ull, 2827531020396886145ull, 17613264619182763631ull, 8833359359729849747ull}}, {{13035282982103555066ull, 8684735915389135696ull, 8702447377775533317ull, 5520849599831156092ull}}, {{16294103727629443833ull, 15467605912663807524ull, 10878059222219416646ull, 6901061999788945115ull}}, {{1920885585827253175ull, 10111135353974983598ull, 8985888009346882904ull, 8626327499736181394ull}}, {{15035611546424196947ull, 6319459596234364748ull, 10227866024269189719ull, 5391454687335113371ull}}, {{347770359320694567ull, 3287638476865568032ull, 8173146511909099245ull, 6739318359168891714ull}}, {{434712949150868209ull, 8721234114509347944ull, 993061103031598248ull, 8424147948961114643ull}}, {{271695593219292631ull, 5450771321568342465ull, 16761564253890606569ull, 5265092468100696651ull}}, {{4951305509951503692ull, 11425150170387815985ull, 16340269298935870307ull, 6581365585125870814ull}}, {{10800817905866767519ull, 9669751694557382077ull, 11201964586815062076ull, 8226706981407338518ull}}, {{9056354200380423652ull, 15266966845953139606ull, 2389541848332025893ull, 5141691863379586574ull}}, {{2097070713620753756ull, 5248650502159260796ull, 12210299347269808175ull, 6427114829224483217ull}}, {{2621338392025942195ull, 1949127109271688091ull, 1427816128805096507ull, 8033893536530604022ull}}, {{17779237559512071536ull, 17359105507790662720ull, 14727443135785349028ull, 5021183460331627513ull}}, {{3777302875680537804ull, 3252137811028776785ull, 4574245864449522574ull, 6276479325414534392ull}}, {{9333314613028060159ull, 13288544300640746789ull, 5717807330561903217ull, 7845599156768167990ull}}, {{8139164642356231552ull, 1387811160259384887ull, 17408687636883353223ull, 4903499472980104993ull}}, {{5562269784517901535ull, 15569822005606394821ull, 7925801490822027816ull, 6129374341225131242ull}}, {{11564523249074764823ull, 1015533433298441910ull, 683879826672758963ull, 7661717926531414053ull}}, {{2616141012244340111ull, 16775609460307383858ull, 2733267900884168303ull, 4788573704082133783ull}}, {{12493548302160200946ull, 16357825806956841918ull, 17251642931387374091ull, 5985717130102667228ull}}, {{6393563340845475375ull, 15835596240268664494ull, 3117809590524665998ull, 7482146412628334036ull}}, {{17831035143310585821ull, 5285561631740527404ull, 11172003030932692057ull, 4676341507892708772ull}}, {{3842049855428680661ull, 11218638058103047160ull, 13965003788665865071ull, 5845426884865885965ull}}, {{4802562319285850826ull, 9411611554201421046ull, 3621196680550167627ull, 7306783606082357457ull}}, {{15226574935962089340ull, 7152828424324388403ull, 9138181869115097438ull, 9133479507602946821ull}}, {{7210766325762611886ull, 18305575820484906464ull, 8017206677410629850ull, 5708424692251841763ull}}, {{9013457907203264857ull, 13658597738751357272ull, 5409822328335899409ull, 7135530865314802204ull}}, {{11266822384004081071ull, 3238189118157032878ull, 6762277910419874262ull, 8919413581643502755ull}}, {{2430077971575162766ull, 15858926254130309261ull, 1920580684798727461ull, 5574633488527189222ull}}, {{7649283482896341361ull, 5988599762380722864ull, 11624097892853185135ull, 6968291860658986527ull}}, {{9561604353620426701ull, 2874063684548515676ull, 9918436347639093515ull, 8710364825823733159ull}}, {{15199374757867542496ull, 17937190867338679961ull, 13116551744915515302ull, 5443978016139833224ull}}, {{5164160392052264408ull, 13198116547318574144ull, 16395689681144394128ull, 6804972520174791530ull}}, {{6455200490065330510ull, 16497645684148217680ull, 11271240064575716852ull, 8506215650218489413ull}}, {{4034500306290831569ull, 1087656515737860242ull, 9350368049573516985ull, 5316384781386555883ull}}, {{14266497419718315269ull, 5971256663099713206ull, 7076274043539508327ull, 6645480976733194854ull}}, {{8609749737793118278ull, 2852384810447253604ull, 18068714591279161217ull, 8306851220916493567ull}}, {{14604465622975474732ull, 13311955552598003262ull, 18210475647190557616ull, 5191782013072808479ull}}, {{9032209991864567607ull, 16639944440747504078ull, 18151408540560809116ull, 6489727516341010599ull}}, {{2066890452975933701ull, 2353186477224828482ull, 18077574657273623492ull, 8112159395426263249ull}}, {{5903492551537346467ull, 10694113585120293609ull, 4380955133154932826ull, 5070099622141414531ull}}, {{11991051707849070988ull, 4144269944545591203ull, 864507898016278129ull, 6337624527676768164ull}}, {{10377128616383950831ull, 9792023449109376908ull, 1080634872520347661ull, 7922030659595960205ull}}, {{15709077422094745077ull, 8425857664907054519ull, 2981239804538911240ull, 4951269162247475128ull}}, {{15024660759191043442ull, 10532322081133818149ull, 3726549755673639050ull, 6189086452809343910ull}}, {{4945767893706640591ull, 3942030564562496879ull, 13881559231446824621ull, 7736358066011679887ull}}, {{10008633961207732226ull, 4769612112065254501ull, 15593503547295347244ull, 4835223791257299929ull}}, {{17122478469937053186ull, 5962015140081568126ull, 5656821378837020343ull, 6044029739071624912ull}}, {{12179726050566540674ull, 2840832906674572254ull, 7071026723546275429ull, 7555037173839531140ull}}, {{3000642763176700018ull, 4081363575885301611ull, 13642763739071197951ull, 4721898233649706962ull}}, {{17585861509253038734ull, 490018451429239109ull, 7830082636984221631ull, 5902372792062133703ull}}, {{8147268831284134705ull, 14447581119568712599ull, 5175917277802889134ull, 7377965990077667129ull}}, {{5572400020677780477ull, 8836104362606114941ull, 11081582615680999322ull, 9222457487597083911ull}}, {{5788593022137306750ull, 10134251245056209742ull, 13843518162441706432ull, 5764035929748177444ull}}, {{16459113314526409246ull, 12667814056320262177ull, 17304397703052133040ull, 7205044912185221805ull}}, {{6738833587875847845ull, 15834767570400327722ull, 7795439073533002588ull, 9006306140231527257ull}}, {{8823457010849792808ull, 673357694645429018ull, 16401364467026596378ull, 5628941337644704535ull}}, {{1805949226707465201ull, 10065069155161562081ull, 15890019565355857568ull, 7036176672055880669ull}}, {{6869122551811719405ull, 12581336443951952601ull, 6027466401412658248ull, 8795220840069850837ull}}, {{15822416640950794389ull, 7863335277469970375ull, 6073009510096605357ull, 5497013025043656773ull}}, {{15166334782761105082ull, 14440855115264850873ull, 12202947906048144600ull, 6871266281304570966ull}}, {{5122860423169217640ull, 18051068894081063592ull, 6030312845705404942ull, 8589082851630713708ull}}, {{3201787764480761025ull, 6670232040373276841ull, 12992317565420653897ull, 5368176782269196067ull}}, {{8613920724028339185ull, 12949476068893983955ull, 11628710938348429467ull, 6710220977836495084ull}}, {{6155714886608036077ull, 11575159067690092040ull, 14535888672935536834ull, 8387776222295618855ull}}, {{3847321804130022549ull, 11846160435733695429ull, 16002459448225792377ull, 5242360138934761784ull}}, {{9420838273589916090ull, 972642489384955574ull, 1556330236572688856ull, 6552950173668452231ull}}, {{2552675805132619304ull, 1215803111731194468ull, 15780470850998024782ull, 8191187717085565288ull}}, {{10818794415062662873ull, 14594935000114160254ull, 9862794281873765488ull, 5119492323178478305ull}}, {{4300120981973552783ull, 18243668750142700318ull, 16940178870769594764ull, 6399365403973097881ull}}, {{14598523264321716787ull, 4357841863968823781ull, 7340165533179829744ull, 7999206754966372352ull}}, {{11429920049414766944ull, 2723651164980514863ull, 4587603458237393590ull, 4999504221853982720ull}}, {{9675714043341070776ull, 12627935993080419387ull, 5734504322796741987ull, 6249380277317478400ull}}, {{7482956535748950566ull, 11173233972923136330ull, 7168130403495927484ull, 7811725346646848000ull}}, {{9288533853270482008ull, 16206643269931736014ull, 4480081502184954677ull, 4882328341654280000ull}}, {{2387295279733326702ull, 6423246032132506306ull, 5600101877731193347ull, 6102910427067850000ull}}, {{12207491136521434185ull, 3417371521738244978ull, 7000127347163991684ull, 7628638033834812500ull}}, {{12241367978753284270ull, 11359229237941178919ull, 13598451628832270610ull, 4767898771146757812ull}}, {{10690023955014217433ull, 4975664510571697841ull, 16998064536040338263ull, 5959873463933447265ull}}, {{17974215962195159695ull, 1607894619787234397ull, 7412522614768259117ull, 7449841829916809082ull}}, {{13539727985585668762ull, 3310777146580715450ull, 9244512652657549852ull, 4656151143698005676ull}}, {{7701287945127310144ull, 4138471433225894313ull, 11555640815821937315ull, 5820188929622507095ull}}, {{14238295949836525584ull, 561403273104979987ull, 9832865001350033740ull, 7275236162028133869ull}}, {{13186183918868269076ull, 701754091381224984ull, 16902767270114930079ull, 9094045202535167336ull}}, {{8241364949292668173ull, 7356125334754347471ull, 10564229543821831299ull, 5683778251584479585ull}}, {{5690020168188447312ull, 4583470650015546435ull, 17816972948204677028ull, 7104722814480599481ull}}, {{2500839191808171235ull, 5729338312519433044ull, 8436158129973682573ull, 8880903518100749352ull}}, {{10786396531734882830ull, 5886679454538339604ull, 5272598831233551608ull, 5550564698812968345ull}}, {{13482995664668603538ull, 7358349318172924505ull, 11202434557469327414ull, 6938205873516210431ull}}, {{3018686525553590710ull, 18421308684570931440ull, 9391357178409271363ull, 8672757341895263039ull}}, {{1886679078470994194ull, 9207474918643138198ull, 12787127264146876458ull, 5420473338684539399ull}}, {{11581720884943518550ull, 2285971611449146939ull, 11372223061756207669ull, 6775591673355674249ull}}, {{9865465087752010284ull, 7469150532738821578ull, 380220771913095874ull, 8469489591694592812ull}}, {{10777601698272394332ull, 9279905101389151390ull, 9461010019300460729ull, 5293430994809120507ull}}, {{4248630085985717106ull, 16211567395163827142ull, 7214576505698188007ull, 6616788743511400634ull}}, {{14534159644336922191ull, 15652773225527396023ull, 18241592668977510817ull, 8270985929389250792ull}}, {{16001378805351658225ull, 2865454238313540658ull, 11400995418110944261ull, 5169366205868281745ull}}, {{10778351469834796974ull, 8193503816319313727ull, 416186217356516614ull, 6461707757335352182ull}}, {{8861253318866108313ull, 1018507733544366351ull, 9743604808550421576ull, 8077134696669190227ull}}, {{12455812351932399552ull, 636567333465228969ull, 3783909996130319533ull, 5048209185418243892ull}}, {{1734707384633335728ull, 5407395185258924116ull, 4729887495162899416ull, 6310261481772804865ull}}, {{2168384230791669659ull, 6759243981573655145ull, 10524045387381012174ull, 7887826852216006081ull}}, {{12884455190313263297ull, 18059585543765698177ull, 18106743413181602368ull, 4929891782635003800ull}}, {{2270510932609415409ull, 4127737855997571106ull, 4186685192767451345ull, 6162364728293754751ull}}, {{12061510702616545070ull, 9771358338424351786ull, 621670472531926277ull, 7702955910367193439ull}}, {{12150130207562728573ull, 8412941970728913818ull, 7306073072973535779ull, 4814347443979495899ull}}, {{5964290722598634908ull, 5904491444983754369ull, 4520905322789531820ull, 6017934304974369874ull}}, {{12067049421675681539ull, 7380614306229692961ull, 14874503690341690583ull, 7522417881217962342ull}}, {{624376860906219106ull, 11530412969034639957ull, 4684878788036168710ull, 4701511175761226464ull}}, {{5392157094560161786ull, 5189644174438524138ull, 5856098485045210888ull, 5876888969701533080ull}}, {{15963568405054978041ull, 6487055218048155172ull, 7320123106306513610ull, 7346111212126916350ull}}, {{1507716432609170935ull, 17332191059414969774ull, 18373525919737917820ull, 9182639015158645437ull}}, {{14777380825662895546ull, 1609247375279580300ull, 13789296709049892590ull, 5739149384474153398ull}}, {{24981958369067817ull, 11234931255954251184ull, 8013248849457589929ull, 7173936730592691748ull}}, {{31227447961334771ull, 208606014660650268ull, 10016561061821987412ull, 8967420913240864685ull}}, {{9242889191830610040ull, 9353750796017682225ull, 8566193672852436084ull, 5604638070775540428ull}}, {{16165297508215650454ull, 11692188495022102781ull, 10707742091065545105ull, 7005797588469425535ull}}, {{6371563829987399355ull, 780177563495464765ull, 8772991595404543478ull, 8757246985586781919ull}}, {{6288070402955818549ull, 14322669032466829190ull, 12400648774768921529ull, 5473279365991738699ull}}, {{17083460040549548994ull, 4068278235301372775ull, 10889124950033764008ull, 6841599207489673374ull}}, {{16742639032259548339ull, 5085347794126715969ull, 4388034150687429202ull, 8551999009362091718ull}}, {{3546620367521135856ull, 7790028389756585385ull, 16577579399461806963ull, 5344999380851307323ull}}, {{9044961477828807724ull, 5125849468768343827ull, 16110288230899870800ull, 6681249226064134154ull}}, {{6694515828858621751ull, 6407311835960429784ull, 10914488251770062692ull, 8351561532580167693ull}}, {{4184072393036638594ull, 13227941934330044423ull, 9127398166569983134ull, 5219725957862604808ull}}, {{618404472868410339ull, 7311555381057779721ull, 11409247708212478918ull, 6524657447328256010ull}}, {{5384691609512900827ull, 18362816263177000459ull, 5038187598410822839ull, 8155821809160320013ull}}, {{1059589246731869065ull, 18394289192126707143ull, 5454710258220458226ull, 5097388630725200008ull}}, {{15159544613697000043ull, 13769489453303608120ull, 6818387822775572783ull, 6371735788406500010ull}}, {{502686693411698438ull, 12600175798202122247ull, 17746356815324241787ull, 7964669735508125012ull}}, {{7231708211023393380ull, 5569266864662632452ull, 1868100972722875309ull, 4977918584692578133ull}}, {{9039635263779241725ull, 11573269599255678469ull, 6946812234330982040ull, 6222398230865722666ull}}, {{15911230098151440060ull, 14466586999069598086ull, 17906887329768503358ull, 7777997788582153332ull}}, {{5332832792917262134ull, 4429930855991110900ull, 1968432544250538791ull, 4861248617863845833ull}}, {{6666040991146577667ull, 925727551561500721ull, 7072226698740561393ull, 6076560772329807291ull}}, {{12944237257360609988ull, 5768845457879263805ull, 4228597354998313837ull, 7595700965412259114ull}}, {{10395991295064075194ull, 5911371420388233830ull, 7254559365301334052ull, 4747313103382661946ull}}, {{3771617081975318185ull, 7389214275485292288ull, 18291571243481443373ull, 5934141379228327432ull}}, {{4714521352469147731ull, 13848203862784003264ull, 4417719980642252600ull, 7417676724035409291ull}}, {{2946575845293217332ull, 8655127414240002040ull, 455231978687713923ull, 4636047952522130807ull}}, {{3683219806616521665ull, 6207223249372614646ull, 14404098028641806116ull, 5795059940652663508ull}}, {{13827396795125427889ull, 7759029061715768307ull, 18005122535802257645ull, 7243824925815829385ull}}, {{12672559975479396957ull, 14310472345572098288ull, 8671345114470658344ull, 9054781157269786732ull}}, {{7920349984674623099ull, 8944045215982561430ull, 14642962733398937273ull, 5659238223293616707ull}}, {{677065443988503065ull, 15791742538405589692ull, 13692017398321283687ull, 7074047779117020884ull}}, {{846331804985628831ull, 15127992154579599211ull, 17115021747901604609ull, 8842559723896276105ull}}, {{16669858442611875684ull, 2537466068971167650ull, 3779359564797421025ull, 5526599827435172566ull}}, {{11613951016410068796ull, 7783518604641347467ull, 13947571492851552089ull, 6908249784293965707ull}}, {{9905752752085198091ull, 14341084274229072238ull, 12822778347637052207ull, 8635312230367457134ull}}, {{1579409451625860903ull, 15880706699034252005ull, 3402550448845769725ull, 5397070143979660709ull}}, {{6585947832959714033ull, 6015825318510651294ull, 8864874079484600061ull, 6746337679974575886ull}}, {{17455806828054418349ull, 12131467666565702021ull, 1857720562500974268ull, 8432922099968219858ull}}, {{13215722276747705420ull, 16805539328458339571ull, 5772761369990496821ull, 5270576312480137411ull}}, {{11907966827507243871ull, 7171866105290760752ull, 2604265694060733123ull, 6588220390600171764ull}}, {{14884958534384054839ull, 4353146613186063036ull, 3255332117575916404ull, 8235275488250214705ull}}, {{79727047135258467ull, 11944088670096065206ull, 13563797619553417512ull, 5147047180156384190ull}}, {{9323030845773848891ull, 14930110837620081507ull, 7731374987586996082ull, 6433808975195480238ull}}, {{7042102538789923210ull, 9439266510170326076ull, 440846697628969295ull, 8042261218994350298ull}}, {{13624686123598477814ull, 12817070596497535653ull, 4887215204445493713ull, 5026413261871468936ull}}, {{3195799599215933556ull, 2186280190339755855ull, 6109019005556867142ull, 6283016577339336170ull}}, {{17829807554302080657ull, 11956222274779470626ull, 16859645793800859735ull, 7853770721674170212ull}}, {{15755315739866188315ull, 14390167949378250997ull, 1313906584270761526ull, 4908606701046356383ull}}, {{5859086619550571681ull, 8764337899868037939ull, 15477441285620615620ull, 6135758376307945478ull}}, {{2712172256010826697ull, 10955422374835047424ull, 10123429570170993717ull, 7669697970384931848ull}}, {{1695107660006766686ull, 9152981993485598592ull, 6327143481356871073ull, 4793561231490582405ull}}, {{2118884575008458357ull, 16052913510284386144ull, 12520615370123476745ull, 5991951539363228006ull}}, {{2648605718760572947ull, 6231083832573318968ull, 6427397175799570124ull, 7489939424204035008ull}}, {{1655378574225358092ull, 13117799432213100163ull, 4017123234874731327ull, 4681212140127521880ull}}, {{15904281273063861327ull, 11785563271838987299ull, 5021404043593414159ull, 5851515175159402350ull}}, {{15268665572902438754ull, 10120268071371346220ull, 15500127091346543507ull, 7314393968949252937ull}}, {{639087892418496827ull, 8038649070786794872ull, 5540100808901015672ull, 9142992461186566172ull}}, {{399429932761560517ull, 5024155669241746795ull, 12685935042417910603ull, 5714370288241603857ull}}, {{14334345471234114358ull, 1668508568124795589ull, 2022360747740224542ull, 7142962860302004822ull}}, {{4082873783760479235ull, 11309007747010770295ull, 11751322971530056485ull, 8928703575377506027ull}}, {{9469325142491381378ull, 9373972851095425386ull, 5038733847992591351ull, 5580439734610941267ull}}, {{2613284391259450915ull, 7105780045441893829ull, 1686731291563351285ull, 6975549668263676584ull}}, {{7878291507501701547ull, 13493911075229755190ull, 2108414114454189106ull, 8719437085329595730ull}}, {{312246173761175563ull, 13045380440445984898ull, 5929444839961256095ull, 5449648178330997331ull}}, {{9613679754056245262ull, 11695039532130093218ull, 2800120031524182215ull, 6812060222913746664ull}}, {{2793727655715530769ull, 10007113396735228619ull, 3500150039405227769ull, 8515075278642183330ull}}, {{17886980849318064395ull, 17783660919027987646ull, 6799279793055655259ull, 5321922049151364581ull}}, {{13135354024792804685ull, 17617890130357596654ull, 13110785759746956978ull, 6652402561439205726ull}}, {{7195820494136230049ull, 12798990626092220010ull, 7165110162828920415ull, 8315503201799007158ull}}, {{9109073827262531685ull, 14916898168948719362ull, 18313251907050238971ull, 5197189501124379473ull}}, {{2162970247223388798ull, 14034436692758511299ull, 9056506828530635002ull, 6496486876405474342ull}}, {{16538770864311399709ull, 8319673829093363315ull, 2097261498808517945ull, 8120608595506842928ull}}, {{8030888780980930866ull, 16729011189251821832ull, 1310788436755323715ull, 5075380372191776830ull}}, {{10038610976226163583ull, 16299577968137389386ull, 10861857582798930452ull, 6344225465239721037ull}}, {{3324891683427928670ull, 1927728386462185117ull, 18189007996926050970ull, 7930281831549651296ull}}, {{4383900311356149371ull, 5816516259966253602ull, 11368129998078781856ull, 4956426144718532060ull}}, {{14703247426049962522ull, 7270645324957817002ull, 14210162497598477320ull, 6195532680898165075ull}}, {{9155687245707677344ull, 9088306656197271253ull, 13151017103570708746ull, 7744415851122706344ull}}, {{8028147537780992292ull, 10291877678550682437ull, 8219385689731692966ull, 4840259906951691465ull}}, {{14646870440653628269ull, 3641475061333577238ull, 14885918130592004112ull, 6050324883689614331ull}}, {{9085216013962259528ull, 4551843826666971548ull, 13995711644812617236ull, 7562906104612017914ull}}, {{14901632045581188013ull, 12068274428521633025ull, 13359005796435273676ull, 4726816315382511196ull}}, {{4791982001694321305ull, 15085343035652041282ull, 16698757245544092095ull, 5908520394228138995ull}}, {{15213349538972677439ull, 14244992776137663698ull, 16261760538502727215ull, 7385650492785173744ull}}, {{14120029480285311303ull, 15820649512727121667ull, 10163600336564204509ull, 4616031557990733590ull}}, {{13038350831929251225ull, 5940753835626738372ull, 3481128383850479829ull, 5770039447488416988ull}}, {{16297938539911564031ull, 12037628312960810869ull, 4351410479813099786ull, 7212549309360521235ull}}, {{6537365119607291327ull, 5823663354346237779ull, 827577081338986829ull, 9015686636700651544ull}}, {{1780010190540863127ull, 5945632605680092564ull, 517235675836866768ull, 5634804147937907215ull}}, {{2225012738176078909ull, 7432040757100115705ull, 14481602650078247172ull, 7043505184922384018ull}}, {{7392951941147486540ull, 9290050946375144631ull, 8878631275743033157ull, 8804381481152980023ull}}, {{11538123990858260944ull, 8112124850698159346ull, 12466673574980477579ull, 5502738425720612514ull}}, {{5199282951718050372ull, 5528470044945311279ull, 6359969931870821166ull, 6878423032150765643ull}}, {{1887417671220175061ull, 16133959593036414907ull, 3338276396411138553ull, 8598028790188457054ull}}, {{17320537109008467077ull, 3166195718006677460ull, 15921480803039125308ull, 5373767993867785658ull}}, {{3203927312551032230ull, 3957744647508346826ull, 10678478966944130827ull, 6717209992334732073ull}}, {{13228281177543566096ull, 335494790958045628ull, 17959784727107551438ull, 8396512490418415091ull}}, {{17491047772819504618ull, 14044742299630942229ull, 8919022445228525696ull, 5247820306511509432ull}}, {{8028751660742217060ull, 17555927874538677787ull, 11148778056535657120ull, 6559775383139386790ull}}, {{5424253557500383421ull, 3498165769463795618ull, 4712600533814795593ull, 8199719228924233488ull}}, {{8001844491865127543ull, 13715568651983342021ull, 2945375333634247245ull, 5124824518077645930ull}}, {{14613991633258797332ull, 3309402759697013814ull, 12905091203897584865ull, 6406030647597057412ull}}, {{9044117504718720857ull, 8748439468048655172ull, 16131364004871981081ull, 8007538309496321765ull}}, {{14875945477303976344ull, 16996989713598879242ull, 12387945512258682127ull, 5004711443435201103ull}}, {{9371559809775194622ull, 16634551123571211149ull, 10873245871895964755ull, 6255889304294001379ull}}, {{16326135780646381181ull, 16181502886036626032ull, 8979871321442568040ull, 7819861630367501724ull}}, {{10203834862903988238ull, 10113439303772891270ull, 14835791612756380833ull, 4887413518979688577ull}}, {{3531421541775209490ull, 17253485148143501992ull, 4709681460663312329ull, 6109266898724610722ull}}, {{4414276927219011862ull, 7731798379897213778ull, 15110473862683916220ull, 7636583623405763402ull}}, {{7370609097939270318ull, 14055746024290534419ull, 14055732182604835541ull, 4772864764628602126ull}}, {{4601575353996699993ull, 3734624475081004312ull, 8346293191401268619ull, 5966080955785752658ull}}, {{5751969192495874991ull, 56594575423867486ull, 1209494452396809966ull, 7457601194732190823ull}}, {{17430038800592085582ull, 13870429664922080890ull, 7673463060389088084ull, 4661000746707619264ull}}, {{12564176463885331169ull, 17338037081152601113ull, 9591828825486360105ull, 5826250933384524080ull}}, {{1870162524574500249ull, 7837488296158587680ull, 11989786031857950132ull, 7282813666730655100ull}}, {{2337703155718125312ull, 9796860370198234600ull, 14987232539822437665ull, 9103517083413318875ull}}, {{1461064472323828320ull, 17652252777442366385ull, 7061177328175329588ull, 5689698177133324297ull}}, {{6438016608832173304ull, 3618571898093406365ull, 13438157678646549890ull, 7112122721416655371ull}}, {{12659206779467604534ull, 13746586909471533764ull, 12186011079880799458ull, 8890153401770819214ull}}, {{17135376274022028642ull, 13203302836847096506ull, 3004570906498111757ull, 5556345876106762009ull}}, {{12195848305672759994ull, 2669070490776706921ull, 8367399651550027601ull, 6945432345133452511ull}}, {{1409752326808786280ull, 7948024131898271556ull, 5847563546010146597ull, 8681790431416815639ull}}, {{10104467241110267233ull, 7273358091650113674ull, 10572256243897423479ull, 5426119019635509774ull}}, {{3407212014533058234ull, 4480011596135254189ull, 3991948268017003541ull, 6782648774544387218ull}}, {{8870701036593710696ull, 10211700513596455640ull, 14213307371876030234ull, 8478310968180484022ull}}, {{5544188147871069185ull, 10993998839425172679ull, 4271631088995130992ull, 5298944355112802514ull}}, {{2318549166411448577ull, 13742498549281465849ull, 14562910898098689548ull, 6623680443891003142ull}}, {{7509872476441698625ull, 17178123186601832311ull, 8980266585768586127ull, 8279600554863753928ull}}, {{11611199325417143497ull, 17653856019267227050ull, 5612666616105366329ull, 5174750346789846205ull}}, {{5290627119916653563ull, 8232261968801870101ull, 11627519288559095816ull, 6468437933487307756ull}}, {{11224969918323204858ull, 10290327461002337626ull, 14534399110698869770ull, 8085547416859134695ull}}, {{11627292217379390940ull, 11043140681553848920ull, 16001528471827875462ull, 5053467135536959184ull}}, {{14534115271724238675ull, 4580553815087535342ull, 1555166516075292712ull, 6316833919421198981ull}}, {{8944272052800522536ull, 5725692268859419178ull, 6555644163521503794ull, 7896042399276498726ull}}, {{10201856051427714489ull, 8190243686464524890ull, 17932335657483103583ull, 4935026499547811703ull}}, {{3528948027429867303ull, 5626118589653268209ull, 17803733553426491575ull, 6168783124434764629ull}}, {{9022871052714722033ull, 2420962218639197357ull, 8419608886500950757ull, 7710978905543455787ull}}, {{7945137417160395223ull, 3818944395863192300ull, 2956412544849400271ull, 4819361815964659867ull}}, {{9931421771450494029ull, 161994476401602471ull, 17530573736343914051ull, 6024202269955824833ull}}, {{7802591195885729632ull, 14037551150784166801ull, 8078159115147728851ull, 7530252837444781042ull}}, {{16405834543497050780ull, 6467626460026410298ull, 9660535465394718436ull, 4706408023402988151ull}}, {{11283921142516537667ull, 8084533075033012873ull, 7463983313316010141ull, 5883010029253735189ull}}, {{269843372863508371ull, 14717352362218653996ull, 13941665160072400580ull, 7353762536567168986ull}}, {{337304216079385464ull, 18396690452773317495ull, 8203709413235724917ull, 9192203170708961233ull}}, {{7128344162690697771ull, 13803774542197017386ull, 16656533429340797833ull, 5745126981693100770ull}}, {{18133802240218148022ull, 3419660122464108020ull, 11597294749821221484ull, 7181408727116375963ull}}, {{4220508726563133411ull, 4274575153080135026ull, 9884932418849138951ull, 8976760908895469954ull}}, {{7249503972529346286ull, 9589138498316166247ull, 10789768780208099748ull, 5610475568059668721ull}}, {{4450193947234294954ull, 11986423122895207809ull, 18098896993687512589ull, 7013094460074585901ull}}, {{10174428452470256596ull, 1147970848336846049ull, 8788563186827227025ull, 8766368075093232377ull}}, {{17888232828862380133ull, 12246696826278998540ull, 17022067037835486650ull, 5478980046933270235ull}}, {{3913546962368423550ull, 6084998995993972368ull, 16665897778866970409ull, 6848725058666587794ull}}, {{4891933702960529437ull, 12217934763419853364ull, 11609000186728937203ull, 8560906323333234743ull}}, {{12280830601205106706ull, 5330366217923714400ull, 14173154144346667608ull, 5350566452083271714ull}}, {{15351038251506383383ull, 6662957772404643000ull, 8493070643578558702ull, 6688208065104089643ull}}, {{742053740673427612ull, 17552069252360579559ull, 6004652286045810473ull, 8360260081380112054ull}}, {{7381312615561974114ull, 4052514255084280368ull, 17587965734060795258ull, 5225162550862570033ull}}, {{9226640769452467642ull, 14289014855710126268ull, 8149899112293830360ull, 6531453188578212542ull}}, {{11533300961815584553ull, 17861268569637657835ull, 964001853512512142ull, 8164316485722765678ull}}, {{4902470091921046394ull, 6551606837596148243ull, 14437559213727483801ull, 5102697803576728548ull}}, {{1516401596473920088ull, 12801194565422573208ull, 18046949017159354751ull, 6378372254470910685ull}}, {{1895501995592400110ull, 11389807188350828606ull, 8723628216167029727ull, 7972965318088638357ull}}, {{15019746802527413781ull, 14036158520360349734ull, 7758110644318087531ull, 4983103323805398973ull}}, {{9551311466304491418ull, 12933512132023049264ull, 14309324323824997318ull, 6228879154756748716ull}}, {{11939139332880614272ull, 6943518128174035772ull, 17886655404781246648ull, 7786098943445935895ull}}, {{16685334119905159728ull, 4339698830108772357ull, 18096688655629361011ull, 4866311839653709934ull}}, {{7021609594599285948ull, 812937519208577543ull, 13397488782681925456ull, 6082889799567137418ull}}, {{4165325974821719531ull, 1016171899010721929ull, 7523488941497631012ull, 7603612249458921773ull}}, {{14132543780332044467ull, 9858479473736477013ull, 7008023597649713334ull, 4752257655911826108ull}}, {{3830621670132891872ull, 3099727305315820459ull, 8760029497062141668ull, 5940322069889782635ull}}, {{176591069238726936ull, 3874659131644775574ull, 6338350852900289181ull, 7425402587362228294ull}}, {{13945427473556368047ull, 4727504966491678685ull, 17796527338344844450ull, 4640876617101392683ull}}, {{3596726286663296347ull, 15132753244969374165ull, 17633973154503667658ull, 5801095771376740854ull}}, {{9107593876756508337ull, 9692569519356941898ull, 12819094406274808765ull, 7251369714220926068ull}}, {{2161120309090859613ull, 16727397917623565277ull, 16023868007843510956ull, 9064212142776157585ull}}, {{3656543202395481210ull, 1231251661659952490ull, 3097388477261112492ull, 5665132589235098491ull}}, {{13794051039849127321ull, 1539064577074940612ull, 17706793651858554327ull, 7081415736543873113ull}}, {{17242563799811409151ull, 15758888776625839477ull, 8298434009541029196ull, 8851769670679841392ull}}, {{13082445384095824672ull, 625933448536373865ull, 5186521255963143248ull, 5532356044174900870ull}}, {{2517998674837617127ull, 782416810670467332ull, 15706523606808704868ull, 6915445055218626087ull}}, {{3147498343547021409ull, 978021013338084165ull, 15021468490083493181ull, 8644306319023282609ull}}, {{4273029473930582333ull, 2917106142549996555ull, 2470888778661101382ull, 5402691449389551631ull}}, {{729600823985840012ull, 12869754715042271502ull, 16923669028608540439ull, 6753364311736939538ull}}, {{10135373066837075823ull, 11475507375375451473ull, 11931214248905899741ull, 8441705389671174423ull}}, {{17863823212841642149ull, 9478035118823351122ull, 14374537933207269194ull, 5276065868544484014ull}}, {{13106406979197276879ull, 2624171861674413095ull, 8744800379654310685ull, 6595082335680605018ull}}, {{11771322705569208194ull, 7891900845520404273ull, 1707628437713112548ull, 8243852919600756273ull}}, {{439547663339673266ull, 14155810065305028479ull, 12596482819639165102ull, 5152408074750472670ull}}, {{14384492634456755294ull, 8471390544776509790ull, 6522231487694180570ull, 6440510093438090838ull}}, {{8757243756216168309ull, 1365866144115861430ull, 17376161396472501521ull, 8050637616797613547ull}}, {{861591329207717289ull, 12382881386140883154ull, 8554257863581619498ull, 5031648510498508467ull}}, {{10300361198364422420ull, 6255229695821328134ull, 6081136311049636469ull, 6289560638123135584ull}}, {{3652079461100752216ull, 12430723138204048072ull, 7601420388812045586ull, 7861950797653919480ull}}, {{2282549663187970135ull, 12380887979804917949ull, 4750887743007528491ull, 4913719248533699675ull}}, {{7464873097412350573ull, 10864423956328759532ull, 1326923660332022710ull, 6142149060667124594ull}}, {{9331091371765438216ull, 4357157908556173607ull, 10882026612269804196ull, 7677686325833905742ull}}, {{12749461134994480741ull, 11946595729702384312ull, 2189580614241239718ull, 4798553953646191089ull}}, {{15936826418743100927ull, 5709872625273204582ull, 7348661786228937552ull, 5998192442057738861ull}}, {{10697660986574100350ull, 7137340781591505728ull, 13797513251213559844ull, 7497740552572173576ull}}, {{6686038116608812719ull, 13684210025349466888ull, 8623445782008474902ull, 4686087845357608485ull}}, {{8357547645761015899ull, 7881890494832057802ull, 15390993245937981532ull, 5857609806697010606ull}}, {{1223562520346494065ull, 9852363118540072253ull, 10015369520567701107ull, 7322012258371263258ull}}, {{6141139168860505485ull, 7703767879747702412ull, 3295839863854850576ull, 9152515322964079073ull}}, {{13061584017392591737ull, 4814854924842314007ull, 13589114960977751370ull, 5720322076852549420ull}}, {{11715294003313351767ull, 15241940692907668317ull, 16986393701222189212ull, 7150402596065686775ull}}, {{809059448859525996ull, 605681792425033781ull, 16621306108100348612ull, 8938003245082108469ull}}, {{2811505164750897700ull, 9601923157120421921ull, 12694159326776411834ull, 5586252028176317793ull}}, {{8126067474366010029ull, 2779031909545751593ull, 2032641103188351081ull, 6982815035220397242ull}}, {{14769270361384900440ull, 8085475905359577395ull, 11764173415840214659ull, 8728518794025496552ull}}, {{6924950966651868823ull, 2747579431636041920ull, 7352608384900134162ull, 5455324246265935345ull}}, {{8656188708314836029ull, 12657846326399828208ull, 13802446499552555606ull, 6819155307832419181ull}}, {{10820235885393545036ull, 6598935871145009452ull, 3418000069158530796ull, 8523944134790523977ull}}, {{15986019465225741455ull, 13347706956320406715ull, 13665465089292551507ull, 5327465084244077485ull}}, {{15370838313104788915ull, 12072947676973120490ull, 3246773306333525672ull, 6659331355305096857ull}}, {{9990175854526210336ull, 15091184596216400613ull, 8670152651344294994ull, 8324164194131371071ull}}, {{8549702918292575412ull, 14043676391062638287ull, 12336374434731266227ull, 5202602621332106919ull}}, {{6075442629438331361ull, 12942909470400909955ull, 10808782024986694880ull, 6503253276665133649ull}}, {{2982617268370526297ull, 16178636838001137444ull, 18122663549660756504ull, 8129066595831417061ull}}, {{11087507829586354744ull, 10111648023750710902ull, 13632507727751666767ull, 5080666622394635663ull}}, {{4636012750128167622ull, 8027874011261000724ull, 12428948641262195555ull, 6350833277993294579ull}}, {{5795015937660209527ull, 5423156495648863001ull, 10924499783150356540ull, 7938541597491618224ull}}, {{15151100007106100715ull, 12612844846635315183ull, 6827812364468972837ull, 4961588498432261390ull}}, {{14327188990455237989ull, 1930998003011980267ull, 17758137492440991855ull, 6201985623040326737ull}}, {{13297300219641659582ull, 16248805559047139046ull, 8362613810269076106ull, 7752482028800408422ull}}, {{3699126618848649335ull, 14767189492831849808ull, 614947612990784662ull, 4845301268000255264ull}} }; static const UINT256 multipliers2_binary128[] = { {{7710430832988809084ull, 13621041698348090301ull, 15069458432386386555ull, 2958405588648567759ull}}, {{14249724559663399259ull, 12414616104507724972ull, 14225137022055595290ull, 3698006985810709699ull}}, {{18129449886644400345ull, 12370821083744716011ull, 6584867629571053104ull, 2311254366131693562ull}}, {{18050126339878112527ull, 15463526354680895014ull, 17454456573818592188ull, 2889067957664616952ull}}, {{13339285887992864851ull, 882663869641567152ull, 3371326643563688620ull, 3611334947080771191ull}}, {{16674107359991081063ull, 1103329837051958940ull, 18049216359736774487ull, 4514168683850963988ull}}, {{1197945063139649857ull, 7607110175798556194ull, 2057388187980708246ull, 2821355427406852493ull}}, {{10720803365779338129ull, 285515682893419434ull, 7183421253403273212ull, 3526694284258565616ull}}, {{4177632170369396853ull, 356894603616774293ull, 8979276566754091515ull, 4408367855323207020ull}}, {{4916863115694566985ull, 16363960191756341597ull, 14835419891076083004ull, 2755229909577004387ull}}, {{10757764913045596635ull, 2008206165985875380ull, 13932588845417715852ull, 3444037386971255484ull}}, {{13447206141306995794ull, 2510257707482344225ull, 17415736056772144815ull, 4305046733714069355ull}}, {{1486974810675790516ull, 8486440094817546997ull, 8578992026268896557ull, 2690654208571293347ull}}, {{6470404531772126048ull, 15219736136949321650ull, 6112054014408732792ull, 3363317760714116684ull}}, {{17311377701569933368ull, 577926097477100446ull, 7640067518010915991ull, 4204147200892645855ull}}, {{6207925045053820451ull, 7278732838564269635ull, 11692571226397904350ull, 2627592000557903659ull}}, {{3148220287889887660ull, 18321788085060112852ull, 10004028014569992533ull, 3284490000697379574ull}}, {{3935275359862359575ull, 9067177051042977353ull, 3281662981357714859ull, 4105612500871724468ull}}, {{13988762145982444495ull, 3361142647688166893ull, 11274411400203347595ull, 2566007813044827792ull}}, {{3650894627195891906ull, 18036486364892372329ull, 14093014250254184493ull, 3207509766306034740ull}}, {{9175304302422252786ull, 8710549900833301699ull, 17616267812817730617ull, 4009387207882543425ull}}, {{3428722179800214040ull, 16973308734089283322ull, 4092638355369999779ull, 2505867004926589641ull}}, {{13509274761605043357ull, 16604949899184216248ull, 9727483962639887628ull, 3132333756158237051ull}}, {{16886593452006304197ull, 2309443300270718694ull, 7547668934872471632ull, 3915417195197796314ull}}, {{5942434889076552219ull, 1443402062669199184ull, 9328979102722682674ull, 2447135746998622696ull}}, {{7428043611345690274ull, 11027624615191274788ull, 11661223878403353342ull, 3058919683748278370ull}}, {{9285054514182112842ull, 4561158732134317677ull, 5353157811149415870ull, 3823649604685347963ull}}, {{8109002080577514479ull, 16685782262866112260ull, 1039880622754690966ull, 2389781002928342477ull}}, {{10136252600721893098ull, 11633855791727864517ull, 5911536796870751612ull, 2987226253660428096ull}}, {{17282001769329754276ull, 14542319739659830646ull, 7389420996088439515ull, 3734032817075535120ull}}, {{6189565087403708519ull, 6783106828073700202ull, 4618388122555274697ull, 2333770510672209450ull}}, {{16960328396109411457ull, 13090569553519513156ull, 14996357190048869179ull, 2917213138340261812ull}}, {{2753666421427212705ull, 11751525923472003542ull, 298702413851534858ull, 3646516422925327266ull}}, {{12665455063638791689ull, 5466035367485228619ull, 9596750054169194381ull, 4558145528656659082ull}}, {{5610066405560550854ull, 5722115113891961839ull, 10609654802283134392ull, 2848840955410411926ull}}, {{2400896988523300663ull, 7152643892364952299ull, 4038696465999142182ull, 3561051194263014908ull}}, {{16836179290936289540ull, 18164176902310966181ull, 5048370582498927727ull, 4451313992828768635ull}}, {{12828455066048874915ull, 18270139591585435719ull, 849388604848135877ull, 2782071245517980397ull}}, {{11423882814133705740ull, 9002616434199630937ull, 5673421774487557751ull, 3477589056897475496ull}}, {{444795462384968462ull, 6641584524322150768ull, 7091777218109447189ull, 4346986321121844370ull}}, {{277997163990605289ull, 6456833336915038182ull, 9044046779745792397ull, 2716866450701152731ull}}, {{9570868491843032419ull, 12682727689571185631ull, 6693372456254852592ull, 3396083063376440914ull}}, {{7351899596376402620ull, 15853409611963982039ull, 17590087607173341548ull, 4245103829220551142ull}}, {{11512466275376333494ull, 685008970622712966ull, 6382118736055950564ull, 2653189893262844464ull}}, {{5167210807365641059ull, 856261213278391208ull, 7977648420069938205ull, 3316487366578555580ull}}, {{6459013509207051324ull, 5682012535025376914ull, 9972060525087422756ull, 4145609208223194475ull}}, {{8648569461681794981ull, 12774629871245636379ull, 3926694818965945270ull, 2591005755139496547ull}}, {{6199025808674855823ull, 6744915302202269666ull, 296682505280043684ull, 3238757193924370684ull}}, {{16972154297698345586ull, 8431144127752837082ull, 370853131600054605ull, 4048446492405463355ull}}, {{15219282454488853896ull, 7575308089059217128ull, 16372684271745891792ull, 2530279057753414596ull}}, {{577358994401515753ull, 9469135111324021411ull, 2019111265972813124ull, 3162848822191768246ull}}, {{14556756798284058404ull, 11836418889155026763ull, 11747261119320792213ull, 3953561027739710307ull}}, {{6792129989713842550ull, 9703604814935585679ull, 5036195190361801181ull, 2470975642337318942ull}}, {{3878476468714915284ull, 16741192037096870003ull, 15518616024807027284ull, 3088719552921648677ull}}, {{236409567466256201ull, 2479745972661535888ull, 5563211975726620394ull, 3860899441152060847ull}}, {{147755979666410126ull, 6161527251340847834ull, 10394536512470219602ull, 2413062150720038029ull}}, {{9408067011437788465ull, 16925281101030835600ull, 17604856659015162406ull, 3016327688400047536ull}}, {{11760083764297235581ull, 11933229339433768692ull, 3559326750059401392ull, 3770409610500059421ull}}, {{16573424389540548046ull, 7458268337146105432ull, 4530422228000819822ull, 2356506006562537138ull}}, {{2270036413216133442ull, 99463384577855983ull, 14886399821855800586ull, 2945632508203171422ull}}, {{16672603571802330514ull, 9347701267577095786ull, 9384627740464974924ull, 3682040635253964278ull}}, {{11617382427898137335ull, 11684626584471369733ull, 2507412638726442847ull, 4602550794067455348ull}}, {{9566707026650029786ull, 14220420642935687939ull, 10790504936058802587ull, 2876594246292159592ull}}, {{7346697764885149329ull, 13163839785242222020ull, 13488131170073503234ull, 3595742807865199490ull}}, {{9183372206106436661ull, 7231427694698001717ull, 7636791925737103235ull, 4494678509831499363ull}}, {{8045450638030216865ull, 2213799299972557121ull, 2467151944371995570ull, 2809174068644687102ull}}, {{14668499315965158985ull, 11990621161820472209ull, 12307311967319770270ull, 3511467585805858877ull}}, {{4500566089674285020ull, 5764904415420814454ull, 1549081903867549126ull, 4389334482257323597ull}}, {{16647911861328591849ull, 17438123314920172745ull, 3274019199130912155ull, 2743334051410827248ull}}, {{6974831771378576100ull, 17185968125222828028ull, 4092523998913640194ull, 3429167564263534060ull}}, {{8718539714223220124ull, 12259088119673759227ull, 5115654998642050243ull, 4286459455329417575ull}}, {{3143244312175818626ull, 5356087065582405565ull, 10114813401792363258ull, 2679037159580885984ull}}, {{8540741408647161186ull, 15918480868832782764ull, 12643516752240454072ull, 3348796449476107480ull}}, {{10675926760808951483ull, 1451357012331426839ull, 15804395940300567591ull, 4185995561845134350ull}}, {{13589983253146676533ull, 7824627160348223630ull, 5266061444260466840ull, 2616247226153208969ull}}, {{7764107029578569858ull, 9780783950435279538ull, 11194262823752971454ull, 3270309032691511211ull}}, {{481761750118436514ull, 3002607901189323615ull, 9381142511263826414ull, 4087886290864389014ull}}, {{7218630121465104678ull, 15711687993525490971ull, 1251528051112503604ull, 2554928931790243134ull}}, {{4411601633403992943ull, 1192865918197312098ull, 10787782100745405314ull, 3193661164737803917ull}}, {{14737874078609766987ull, 10714454434601415930ull, 18096413644359144546ull, 3992076455922254896ull}}, {{13822857317558492271ull, 11308220040053272860ull, 11310258527724465341ull, 2495047784951409310ull}}, {{17278571646948115338ull, 300216994784427363ull, 4914451122800805869ull, 3118809731189261638ull}}, {{16986528540257756269ull, 4986957261907922108ull, 15366435940355783144ull, 3898512163986577047ull}}, {{1393208300806321860ull, 3116848288692451318ull, 16521551490363446321ull, 2436570102491610654ull}}, {{10964882412862678133ull, 8507746379292952051ull, 11428567326099532093ull, 3045712628114513318ull}}, {{9094416997650959762ull, 15246368992543577968ull, 5062337120769639308ull, 3807140785143141648ull}}, {{5684010623531849852ull, 305608583484960422ull, 3163960700481024568ull, 2379462990714463530ull}}, {{16328385316269588122ull, 382010729356200527ull, 13178322912456056518ull, 2974328738393079412ull}}, {{15798795626909597249ull, 9700885448550026467ull, 16472903640570070647ull, 3717910922991349265ull}}, {{7568404257604804329ull, 12980582432984848398ull, 3378035747715212298ull, 2323694326869593291ull}}, {{237133285151229603ull, 7002356004376284690ull, 18057602739926179085ull, 2904617908586991613ull}}, {{9519788643293812811ull, 13364631023897743766ull, 8736945369625560144ull, 3630772385733739517ull}}, {{2676363767262490206ull, 16705788779872179708ull, 15532867730459338084ull, 4538465482167174396ull}}, {{10896099391393832187ull, 1217745950565336509ull, 484670294682310495ull, 2836540926354483998ull}}, {{18231810257669678138ull, 15357240493488834348ull, 9829209905207663926ull, 3545676157943104997ull}}, {{4343018748377546056ull, 9973178580006267128ull, 16898198399936967812ull, 4432095197428881246ull}}, {{2714386717735966285ull, 15456608649358692763ull, 5949687981533216978ull, 2770059498393050779ull}}, {{17228041452452121568ull, 10097388774843590145ull, 2825423958489133319ull, 3462574372991313474ull}}, {{7699993760282988248ull, 8010049950127099778ull, 12755151984966192457ull, 4328217966239141842ull}}, {{9424182118604255559ull, 16535496264897907121ull, 12583656009031258189ull, 2705136228899463651ull}}, {{16391913666682707353ull, 6834312275840220189ull, 11117883992861684833ull, 3381420286124329564ull}}, {{6654834028071220479ull, 13154576363227663141ull, 13897354991077106041ull, 4226775357655411955ull}}, {{6465114276758206752ull, 1304081199376207607ull, 6380003860209497324ull, 2641734598534632472ull}}, {{3469706827520370535ull, 1630101499220259509ull, 7975004825261871655ull, 3302168248168290590ull}}, {{8948819552827851073ull, 15872684929307488098ull, 745383994722563760ull, 4127710310210363238ull}}, {{10204698238944794825ull, 9920428080817180061ull, 14300923051983766062ull, 2579818943881477023ull}}, {{17367558817108381435ull, 3177163064166699268ull, 13264467796552319674ull, 3224773679851846279ull}}, {{3262704447675925178ull, 13194825867063149894ull, 11968898727263011688ull, 4030967099814807849ull}}, {{15874248335079616948ull, 8246766166914468683ull, 563032676898300449ull, 2519354437384254906ull}}, {{15231124400422133281ull, 14920143727070473758ull, 9927162882977651369ull, 3149193046730318632ull}}, {{9815533463672890793ull, 4815121603555928486ull, 12408953603722064212ull, 3936491308412898290ull}}, {{1523022396368168842ull, 12232823039077231112ull, 12367282020753678036ull, 2460307067758061431ull}}, {{1903777995460211052ull, 15291028798846538890ull, 10847416507514709641ull, 3075383834697576789ull}}, {{11603094531180039623ull, 5278727943276009900ull, 18170956652820774956ull, 3844229793371970986ull}}, {{16475306118842300573ull, 12522577001402281995ull, 15968533926440372251ull, 2402643620857481866ull}}, {{15982446630125487812ull, 11041535233325464590ull, 10737295371195689506ull, 3003304526071852333ull}}, {{10754686250802083957ull, 4578547004802054930ull, 18033305232421999787ull, 3754130657589815416ull}}, {{11333364925178690377ull, 555748868787590379ull, 11270815770263749867ull, 2346331660993634635ull}}, {{9555020138045975067ull, 14529744141266651686ull, 9476833694402299429ull, 2932914576242043294ull}}, {{2720403135702693026ull, 4327122121301150896ull, 2622670081148098479ull, 3666143220302554118ull}}, {{3400503919628366282ull, 797216633199050716ull, 12501709638289898907ull, 4582679025378192647ull}}, {{11348686986622504735ull, 16639161460245264361ull, 14731097551572268672ull, 2864174390861370404ull}}, {{350800677995967206ull, 2352207751597028836ull, 18413871939465335841ull, 3580217988576713005ull}}, {{438500847494959008ull, 7551945707923673949ull, 9182281869049506089ull, 4475272485720891257ull}}, {{2579906038898043332ull, 16249181113520765978ull, 17268141214224411065ull, 2797045303575557035ull}}, {{12448254585477329973ull, 6476418336618793760ull, 16973490499353125928ull, 3496306629469446294ull}}, {{15560318231846662466ull, 8095522920773492200ull, 11993491087336631602ull, 4370383286836807868ull}}, {{9725198894904164041ull, 9671387843910820529ull, 16719303966440170559ull, 2731489554273004917ull}}, {{16768184637057592956ull, 7477548786461137757ull, 7064071902768049487ull, 3414361942841256147ull}}, {{7125172741039827482ull, 4735249964649034293ull, 4218403860032673955ull, 4267952428551570184ull}}, {{6759075972363586129ull, 653688218691952481ull, 2636502412520421222ull, 2667470267844731365ull}}, {{13060530983881870565ull, 10040482310219716409ull, 7907314034077914431ull, 3334337834805914206ull}}, {{2490605674570174494ull, 7938916869347257608ull, 660770505742617231ull, 4167922293507392758ull}}, {{1556628546606359059ull, 11879352070983117861ull, 14248039621371299481ull, 2604951433442120473ull}}, {{6557471701685336727ull, 1014132033446733614ull, 3974991471431960640ull, 3256189291802650592ull}}, {{17420211663961446717ull, 1267665041808417017ull, 4968739339289950800ull, 4070236614753313240ull}}, {{3970103262334822342ull, 792290651130260636ull, 3105462087056219250ull, 2543897884220820775ull}}, {{4962629077918527928ull, 10213735350767601603ull, 17716885664102437774ull, 3179872355276025968ull}}, {{1591600328970772006ull, 3543797151604726196ull, 3699363006418495602ull, 3974840444095032461ull}}, {{10218122242461508312ull, 6826559238180341776ull, 4617944888225253703ull, 2484275277559395288ull}}, {{12772652803076885390ull, 3921513029298039316ull, 5772431110281567129ull, 3105344096949244110ull}}, {{15965816003846106737ull, 9513577305049937049ull, 16438910924706734719ull, 3881680121186555137ull}}, {{3061105974762734855ull, 12863514843297292512ull, 3356790300300627343ull, 2426050075741596961ull}}, {{3826382468453418568ull, 11467707535694227736ull, 8807673893803172083ull, 3032562594676996201ull}}, {{4782978085566773210ull, 9722948401190396766ull, 15621278385681353008ull, 3790703243346245251ull}}, {{16824419358761396969ull, 6076842750743997978ull, 7457455981837151678ull, 2369189527091403282ull}}, {{11807152161596970403ull, 16819425475284773281ull, 98447940441663789ull, 2961486908864254103ull}}, {{923882146714049291ull, 7189223788823802890ull, 13958117980834243449ull, 3701858636080317628ull}}, {{5189112360123668711ull, 16022479914083346566ull, 17947195774876177963ull, 2313661647550198517ull}}, {{15709762487009361697ull, 15416413874176795303ull, 8598936663313058742ull, 2892077059437748147ull}}, {{15025517090334314217ull, 10047145305866218321ull, 6136984810713935524ull, 3615096324297185184ull}}, {{4946838307635729059ull, 12558931632332772902ull, 7671231013392419405ull, 4518870405371481480ull}}, {{16926831997554494374ull, 10155175279421677015ull, 4794519383370262128ull, 2824294003357175925ull}}, {{16546853978515730063ull, 12693969099277096269ull, 10604835247640215564ull, 3530367504196469906ull}}, {{6848509417862498867ull, 15867461374096370337ull, 4032672022695493647ull, 4412959380245587383ull}}, {{15809533432232531552ull, 16834692386451313316ull, 9437949041825765385ull, 2758099612653492114ull}}, {{1315172716581112824ull, 7208307427781977934ull, 2574064265427430924ull, 3447624515816865143ull}}, {{10867337932581166838ull, 9010384284727472417ull, 17052638387066452367ull, 4309530644771081428ull}}, {{18321301253931699034ull, 12549019205595752116ull, 1434526955061756921ull, 2693456652981925893ull}}, {{4454882493705072176ull, 1851215951712526434ull, 6404844712254584056ull, 3366820816227407366ull}}, {{14791975153986116028ull, 2314019939640658042ull, 17229427927173005878ull, 4208526020284259207ull}}, {{13856670489668710422ull, 15281320517557574988ull, 17685921482124210529ull, 2630328762677662004ull}}, {{17320838112085888027ull, 5266592591664805023ull, 3660657778945711546ull, 3287910953347077506ull}}, {{17039361621679972130ull, 15806612776435782087ull, 13799194260536915240ull, 4109888691683846882ull}}, {{17567130041191064437ull, 9879132985272363804ull, 13236182431262959929ull, 2568680432302404301ull}}, {{3512168477779278930ull, 16960602250017842660ull, 2710169983796536199ull, 3210850540378005377ull}}, {{4390210597224098663ull, 16589066794094915421ull, 7999398498173058153ull, 4013563175472506721ull}}, {{5049724632478755617ull, 3450637718668240282ull, 16528839107426631106ull, 2508476984670316700ull}}, {{15535527827453220329ull, 13536669185190076160ull, 2214304810573737266ull, 3135596230837895876ull}}, {{972665710606973795ull, 7697464444632819393ull, 2767881013217171583ull, 3919495288547369845ull}}, {{12137131115197828382ull, 11728444305536593976ull, 4035768642474426191ull, 2449684555342106153ull}}, {{15171413893997285477ull, 10048869363493354566ull, 9656396821520420643ull, 3062105694177632691ull}}, {{9740895330641831038ull, 7949400685939305304ull, 7458810008473137900ull, 3827632117722040864ull}}, {{6088059581651144399ull, 14191747465566841623ull, 4661756255295711187ull, 2392270073576275540ull}}, {{2998388458636542595ull, 13127998313531164125ull, 5827195319119638984ull, 2990337591970344425ull}}, {{8359671591723066147ull, 16409997891913955156ull, 11895680167326936634ull, 3737921989962930531ull}}, {{14448166781681692150ull, 14867934700873609876ull, 5128957095365641444ull, 2336201243726831582ull}}, {{18060208477102115188ull, 138174302382460729ull, 15634568406061827614ull, 2920251554658539477ull}}, {{8740202541095480273ull, 9396089914832851720ull, 5708152452295120805ull, 3650314443323174347ull}}, {{10925253176369350341ull, 16356798411968452554ull, 2523504546941513102ull, 4562893054153967934ull}}, {{11439969253658231867ull, 5611312989052894942ull, 15412248397120609401ull, 2851808158846229958ull}}, {{5076589530218014026ull, 11625827254743506582ull, 10041938459545985943ull, 3564760198557787448ull}}, {{15569108949627293340ull, 9920598050001995323ull, 12552423074432482429ull, 4455950248197234310ull}}, {{7424850084303364386ull, 8506216790464941029ull, 3233578403092913614ull, 2784968905123271444ull}}, {{13892748623806593386ull, 1409398951226400478ull, 4041973003866142018ull, 3481211131404089305ull}}, {{8142563742903465924ull, 10985120725887776406ull, 9664152273260065426ull, 4351513914255111631ull}}, {{477416320887278299ull, 11477386472107248158ull, 12957624198428622747ull, 2719696196409444769ull}}, {{9820142437963873681ull, 9735047071706672293ull, 2361972192753614722ull, 3399620245511805962ull}}, {{16886864065882230006ull, 2945436802778564558ull, 12175837277796794211ull, 4249525306889757452ull}}, {{5942604022749005850ull, 17981799066232460513ull, 16833270335477772189ull, 2655953316806098407ull}}, {{12039941046863645216ull, 8642190777508411929ull, 16429901900919827333ull, 3319941646007623009ull}}, {{1214868253297392808ull, 15414424490312902816ull, 6702319320867620454ull, 4149927057509528762ull}}, {{759292658310870505ull, 5022329288018176356ull, 8800635593969650688ull, 2593704410943455476ull}}, {{949115822888588131ull, 6277911610022720445ull, 11000794492462063360ull, 3242130513679319345ull}}, {{5798080797038123068ull, 7847389512528400556ull, 18362679134004967104ull, 4052663142099149181ull}}, {{12847172535003602726ull, 4904618445330250347ull, 13782517467966798392ull, 2532914463811968238ull}}, {{11447279650327115503ull, 6130773056662812934ull, 8004774798103722182ull, 3166143079764960298ull}}, {{5085727526054118571ull, 16886838357683291976ull, 782596460774876919ull, 3957678849706200373ull}}, {{3178579703783824107ull, 17471803001193139341ull, 2794965797197992026ull, 2473549281066375233ull}}, {{8584910648157168037ull, 12616381714636648368ull, 8105393264924877937ull, 3091936601332969041ull}}, {{10731138310196460047ull, 1935419088013646748ull, 14743427599583485326ull, 3864920751666211301ull}}, {{15930333480727563337ull, 15044694985290692929ull, 11520485258953372280ull, 2415575469791382063ull}}, {{6077858795627290460ull, 359124657903814546ull, 9788920555264327447ull, 3019469337239227579ull}}, {{16820695531388888882ull, 14283963877661931894ull, 7624464675653021404ull, 3774336671549034474ull}}, {{5901248688690667648ull, 18150849460393483242ull, 9376976440710526281ull, 2358960419718146546ull}}, {{16599932897718110367ull, 8853503770209690340ull, 2497848514033382044ull, 2948700524647683183ull}}, {{2303172048438086343ull, 11066879712762112926ull, 16957368697823891267ull, 3685875655809603978ull}}, {{12102337097402383737ull, 9221913622525253253ull, 11973338835425088276ull, 4607344569762004973ull}}, {{9869803695090183788ull, 14987068050933059091ull, 9789179781354374124ull, 2879590356101253108ull}}, {{7725568600435341830ull, 287090989956772248ull, 12236474726692967656ull, 3599487945126566385ull}}, {{9656960750544177288ull, 358863737445965310ull, 1460535353084045858ull, 4499359931408207982ull}}, {{1423914450662722901ull, 4835975854331116223ull, 14747892650959692373ull, 2812099957130129988ull}}, {{15614951118610567338ull, 10656655836341283182ull, 18434865813699615466ull, 3515124946412662485ull}}, {{10295316861408433365ull, 4097447758571828170ull, 9208524211842355621ull, 4393906183015828107ull}}, {{11046259056807658757ull, 4866747858321086558ull, 3449484623187778311ull, 2746191364384892567ull}}, {{4584451784154797638ull, 1471748804473970294ull, 18146913834266886601ull, 3432739205481115708ull}}, {{14953936767048272856ull, 6451372024019850771ull, 4236898219124056635ull, 4290924006851394636ull}}, {{7040367470191476583ull, 1726264505798712780ull, 11871433423807311205ull, 2681827504282121647ull}}, {{8800459337739345729ull, 6769516650675778879ull, 10227605761331751102ull, 3352284380352652059ull}}, {{6388888153746794257ull, 17685267850199499407ull, 8172821183237300973ull, 4190355475440815074ull}}, {{10910584123732828267ull, 13359135415588381081ull, 9719699257950701012ull, 2618972172150509421ull}}, {{18249916173093423237ull, 16698919269485476351ull, 16761310090865764169ull, 3273715215188136776ull}}, {{18200709197939391142ull, 7038591031574681727ull, 2504893539872653596ull, 4092144018985170971ull}}, {{18292972276353201320ull, 13622491431588951887ull, 17706459526916266161ull, 2557590011865731856ull}}, {{18254529327014113746ull, 3193056234204026147ull, 3686330334935781086ull, 3196987514832164821ull}}, {{18206475640340254279ull, 13214692329609808492ull, 9219598937097114261ull, 3996234393540206026ull}}, {{2155675238357883116ull, 10565025715219824260ull, 10373935354113084317ull, 2497646495962628766ull}}, {{2694594047947353895ull, 17817968162452168229ull, 3744047155786579588ull, 3122058119953285958ull}}, {{7979928578361580273ull, 3825716129355658670ull, 13903430981588000294ull, 3902572649941607447ull}}, {{375769343048599767ull, 16226130636129450381ull, 15607173391133582039ull, 2439107906213504654ull}}, {{5081397697238137612ull, 15670977276734425072ull, 10285594702062201741ull, 3048884882766880818ull}}, {{6351747121547672015ull, 5753663540635867628ull, 3633621340722976369ull, 3811106103458601023ull}}, {{13193213987822070818ull, 15125254758965887027ull, 9188542365592942086ull, 2381941314661625639ull}}, {{11879831466350200618ull, 9683196411852582976ull, 6873991938563789704ull, 2977426643327032049ull}}, {{14849789332937750772ull, 12103995514815728720ull, 13204175941632125034ull, 3721783304158790061ull}}, {{9281118333086094233ull, 12176683215187218354ull, 10558452972733772098ull, 2326114565099243788ull}}, {{2378025879502841983ull, 5997481982129247135ull, 13198066215917215123ull, 2907643206374054735ull}}, {{16807590404660716191ull, 2885166459234171014ull, 11885896751469131000ull, 3634554007967568419ull}}, {{11786115968971119430ull, 3606458074042713768ull, 10245684920909025846ull, 4543192509959460524ull}}, {{7366322480606949644ull, 16089094351558859817ull, 15626925112422916961ull, 2839495318724662827ull}}, {{13819589119186074959ull, 6276309884166411059ull, 14921970372101258298ull, 3549369148405828534ull}}, {{12662800380555205795ull, 17068759392062789632ull, 9429090928271797064ull, 4436711435507285668ull}}, {{7914250237847003622ull, 10667974620039243520ull, 15116553867024648973ull, 2772944647192053542ull}}, {{9892812797308754527ull, 17946654293476442304ull, 9672320296926035408ull, 3466180808990066928ull}}, {{12366015996635943159ull, 3986573793136001264ull, 12090400371157544261ull, 4332726011237583660ull}}, {{7728759997897464474ull, 4797451629923694742ull, 16779872268828240971ull, 2707953757023489787ull}}, {{437577960517054785ull, 1385128518977230524ull, 16363154317607913310ull, 3384942196279362234ull}}, {{546972450646318481ull, 10954782685576313963ull, 11230570860155115829ull, 4231177745349202793ull}}, {{16482758846149806715ull, 9152582187698890178ull, 101577759955865537ull, 2644486090843251746ull}}, {{11380076520832482585ull, 16052413753051000627ull, 9350344236799607729ull, 3305607613554064682ull}}, {{9613409632613215328ull, 6230459136031587072ull, 2464558259144733854ull, 4132009516942580853ull}}, {{6008381020383259580ull, 17729095015301905632ull, 3846191921179152610ull, 2582505948089113033ull}}, {{7510476275479074475ull, 12937996732272606232ull, 9419425919901328667ull, 3228132435111391291ull}}, {{9388095344348843093ull, 11560809896913369886ull, 7162596381449272930ull, 4035165543889239114ull}}, {{1255873571790639030ull, 11837192203998244083ull, 9088308756833183485ull, 2521978464930774446ull}}, {{15404900020020462499ull, 961432199715641391ull, 2137013909186703549ull, 3152473081163468058ull}}, {{14644439006598190219ull, 5813476268071939643ull, 11894639423338155244ull, 3940591351454335072ull}}, {{6846931369910174935ull, 12856794704399738085ull, 7434149639586347027ull, 2462869594658959420ull}}, {{13170350230815106573ull, 11459307362072284702ull, 9292687049482933784ull, 3078586993323699275ull}}, {{7239565751664107408ull, 14324134202590355878ull, 7004172793426279326ull, 3848233741654624094ull}}, {{18359786650072230842ull, 4340897858191584519ull, 18212666051173588291ull, 2405146088534140058ull}}, {{18338047294162900649ull, 814436304312092745ull, 13542460527112209556ull, 3006432610667675073ull}}, {{9087501062421462099ull, 1018045380390115932ull, 3093017603608098233ull, 3758040763334593842ull}}, {{14903060200868189620ull, 12165493408812292217ull, 6544822020682449299ull, 2348775477084121151ull}}, {{4793767195803073313ull, 10595180742587977368ull, 3569341507425673720ull, 2935969346355151439ull}}, {{5992208994753841641ull, 13243975928234971710ull, 18296734939564255862ull, 3669961682943939298ull}}, {{16713633280297077859ull, 7331597873438938829ull, 13647546637600544020ull, 4587452103679924123ull}}, {{12751863809399367614ull, 13805620707754112576ull, 6223873639286646060ull, 2867157564799952577ull}}, {{15939829761749209517ull, 17257025884692640720ull, 12391528067535695479ull, 3583946955999940721ull}}, {{1478043128476960281ull, 16959596337438412997ull, 1654352029137455637ull, 4479933694999925902ull}}, {{3229619964511794128ull, 12905590720112702075ull, 14869028073493073485ull, 2799958559374953688ull}}, {{17872083010921906371ull, 2296930344858713881ull, 139541018156790241ull, 3499948199218692111ull}}, {{8505045708370219252ull, 7482848949500780256ull, 14009484327978151513ull, 4374935249023365138ull}}, {{5315653567731387033ull, 16205995639506457420ull, 13367613723413732599ull, 2734334530639603211ull}}, {{6644566959664233791ull, 15645808530955683871ull, 12097831135839777845ull, 3417918163299504014ull}}, {{3694022681152904334ull, 5722202608412441127ull, 5898916882944946499ull, 4272397704124380018ull}}, {{9226293203361647065ull, 1270533621044081752ull, 8298509070267979466ull, 2670248565077737511ull}}, {{11532866504202058831ull, 10811539063159877998ull, 5761450319407586428ull, 3337810706347171889ull}}, {{5192711093397797731ull, 13514423828949847498ull, 11813498917686870939ull, 4172263382933964861ull}}, {{7857130451801011486ull, 6140671883879960734ull, 9689279832767988289ull, 2607664614333728038ull}}, {{598041027896488549ull, 12287525873277338822ull, 2888227754105209553ull, 3259580767917160048ull}}, {{9970923321725386495ull, 1524349286314509815ull, 3610284692631511942ull, 4074475959896450060ull}}, {{13149356103719448415ull, 14787776359228732346ull, 11479799969749470771ull, 2546547474935281287ull}}, {{7213323092794534711ull, 13873034430608527529ull, 9738063943759450560ull, 3183184343669101609ull}}, {{13628339884420556293ull, 17341293038260659411ull, 16784265948126701104ull, 3978980429586377011ull}}, {{6211869418549153731ull, 10838308148912912132ull, 8184323208365494238ull, 2486862768491485632ull}}, {{7764836773186442164ull, 4324513149286364357ull, 10230404010456867798ull, 3108578460614357040ull}}, {{14317731984910440609ull, 14629013473462731254ull, 12788005013071084747ull, 3885723075767946300ull}}, {{4336896472141637477ull, 6837290411700513082ull, 17215875170024203775ull, 2428576922354966437ull}}, {{14644492627031822654ull, 3934926996198253448ull, 7684785907248091007ull, 3035721152943708047ull}}, {{18305615783789778317ull, 306972726820428906ull, 4994296365632725855ull, 3794651441179635059ull}}, {{16052695883295999352ull, 7109386981903849922ull, 815592219306759707ull, 2371657150737271912ull}}, {{10842497817265223382ull, 4275047708952424499ull, 1019490274133449634ull, 2964571438421589890ull}}, {{8941436253154141324ull, 14567181673045306432ull, 10497734879521587850ull, 3705714298026987362ull}}, {{5588397658221338327ull, 13716174564080704424ull, 11172770318128380310ull, 2316071436266867101ull}}, {{6985497072776672909ull, 7921846168246104722ull, 130904842378311676ull, 2895089295333583877ull}}, {{17955243377825616944ull, 9902307710307630902ull, 4775317071400277499ull, 3618861619166979846ull}}, {{13220682185427245372ull, 7766198619457150724ull, 15192518376105122682ull, 4523577023958724807ull}}, {{17486298402746804166ull, 9465560155588107106ull, 16412853012706783532ull, 2827235639974203004ull}}, {{12634500966578729399ull, 11831950194485133883ull, 2069322192173927799ull, 3534044549967753756ull}}, {{11181440189796023845ull, 10178251724679029450ull, 2586652740217409749ull, 4417555687459692195ull}}, {{11600086137049902807ull, 8667250337138087358ull, 17757559027131738757ull, 2760972304662307621ull}}, {{5276735634457602701ull, 15445748939849997102ull, 8361890728632509734ull, 3451215380827884527ull}}, {{15819291579926779184ull, 10083814137957720569ull, 5840677392363249264ull, 4314019226034855659ull}}, {{2969528209813155134ull, 6302383836223575356ull, 1344580361013336838ull, 2696262016271784787ull}}, {{3711910262266443918ull, 17101351832134245003ull, 15515783506548834759ull, 3370327520339730983ull}}, {{28201809405666993ull, 16765003771740418350ull, 14783043364758655545ull, 4212909400424663729ull}}, {{13852684186160705583ull, 3560598329696679612ull, 2321873075333077860ull, 2633068375265414831ull}}, {{17315855232700881978ull, 4450747912120849515ull, 16737399399448511037ull, 3291335469081768538ull}}, {{17033133022448714569ull, 10175120908578449798ull, 11698377212455862988ull, 4114169336352210673ull}}, {{6034022120603058702ull, 15582822604716306932ull, 393956730143832511ull, 2571355835220131671ull}}, {{7542527650753823377ull, 14866842237467995761ull, 14327503967961954351ull, 3214194794025164588ull}}, {{14039845581869667125ull, 13971866778407606797ull, 17909379959952442939ull, 4017743492531455735ull}}, {{11080746497882235905ull, 6426573727291060296ull, 18110891502611358693ull, 2511089682832159834ull}}, {{13850933122352794882ull, 12644903177541213274ull, 13415242341409422558ull, 3138862103540199793ull}}, {{8090294366086217794ull, 6582756935071740785ull, 2933994871479614486ull, 3923577629425249742ull}}, {{16585649024872355881ull, 17949281139702001702ull, 15668804849956922765ull, 2452236018390781088ull}}, {{11508689244235669044ull, 8601543369345338416ull, 1139261988736601841ull, 3065295022988476361ull}}, {{14385861555294586304ull, 15363615230109060924ull, 6035763504348140205ull, 3831618778735595451ull}}, {{18214535508913892248ull, 11908102528031857029ull, 1466509181003893676ull, 2394761736709747157ull}}, {{8933111330860201598ull, 14885128160039821287ull, 6444822494682254999ull, 2993452170887183946ull}}, {{6554703145147864094ull, 13994724181622388705ull, 17279400155207594557ull, 3741815213608979932ull}}, {{15625904511785884819ull, 11052545622727686892ull, 1576253060149970790ull, 2338634508505612458ull}}, {{1085636566022804407ull, 4592309991554832808ull, 11193688362042239296ull, 2923293135632015572ull}}, {{1357045707528505509ull, 5740387489443541010ull, 13992110452552799120ull, 3654116419540019465ull}}, {{10919679171265407694ull, 7175484361804426262ull, 3655080010408835188ull, 4567645524425024332ull}}, {{2213113463613491905ull, 13708049762982542222ull, 11507797043360297800ull, 2854778452765640207ull}}, {{11989763866371640689ull, 17135062203728177777ull, 9773060285772984346ull, 3568473065957050259ull}}, {{1152146777682387150ull, 12195455717805446414ull, 7604639338788842529ull, 4460591332446312824ull}}, {{14555149791333655681ull, 704630795987322152ull, 4752899586743026581ull, 2787869582778945515ull}}, {{18193937239167069601ull, 5492474513411540594ull, 1329438465001395322ull, 3484836978473681894ull}}, {{13519049512104061193ull, 16088965178619201551ull, 10885170118106519960ull, 4356046223092102367ull}}, {{15366934972706120102ull, 10055603236637000969ull, 13720760351457656831ull, 2722528889432563979ull}}, {{5373610660600486415ull, 7957818027368863308ull, 12539264420894683135ull, 3403161111790704974ull}}, {{6717013325750608019ull, 5335586515783691231ull, 6450708489263578111ull, 4253951389738381218ull}}, {{11115662356235211868ull, 10252270600005888875ull, 8643378824217124223ull, 2658719618586488261ull}}, {{9282891926866626931ull, 8203652231579973190ull, 15415909548698793183ull, 3323399523233110326ull}}, {{2380242871728507855ull, 5642879271047578584ull, 10046514899018715671ull, 4154249404041387908ull}}, {{1487651794830317410ull, 10444328572045818471ull, 15502443848741473102ull, 2596405877525867442ull}}, {{15694622798820060474ull, 3832038678202497280ull, 10154682774072065570ull, 3245507346907334303ull}}, {{1171534424815523976ull, 14013420384607897409ull, 8081667449162694058ull, 4056884183634167879ull}}, {{12261424061578172245ull, 13370073758807323784ull, 11968571183367765642ull, 2535552614771354924ull}}, {{15326780076972715307ull, 7489220161654378922ull, 14960713979209707053ull, 3169440768464193655ull}}, {{9935103059361118325ull, 13973211220495361557ull, 14089206455584745912ull, 3961800960580242069ull}}, {{8515282421314392905ull, 8733257012809600973ull, 11111597043954160147ull, 2476125600362651293ull}}, {{15255789045070379036ull, 6304885247584613312ull, 54438249660536472ull, 3095157000453314117ull}}, {{622992232628422178ull, 7881106559480766641ull, 4679733830503058494ull, 3868946250566642646ull}}, {{11918585191461233622ull, 314005581248091246ull, 16759891699346575271ull, 2418091406604151653ull}}, {{5674859452471766219ull, 14227565031842277770ull, 7114806568901055376ull, 3022614258255189567ull}}, {{16316946352444483582ull, 17784456289802847212ull, 4281822192698931316ull, 3778267822818986959ull}}, {{974719433423026431ull, 1891913144272003700ull, 9593667898077913929ull, 2361417389261866849ull}}, {{1218399291778783038ull, 6976577448767392529ull, 16603770891024780315ull, 2951771736577333561ull}}, {{6134685133150866702ull, 4109035792531852757ull, 6919655558498811682ull, 3689714670721666952ull}}, {{6140021217432985641ull, 7179833388759795877ull, 4324784724061757301ull, 2306071669201041845ull}}, {{12286712540218619955ull, 13586477754377132750ull, 10017666923504584530ull, 2882589586501302306ull}}, {{6135018638418499135ull, 7759725156116640130ull, 3298711617525954855ull, 3603236983126627883ull}}, {{16892145334877899727ull, 5087970426718412258ull, 17958447577189607281ull, 4504046228908284853ull}}, {{15169276852726075234ull, 14709196562767477421ull, 13529872744957198502ull, 2815028893067678033ull}}, {{5126538010625430330ull, 9163123666604570969ull, 3077282875914334416ull, 3518786116334597542ull}}, {{11019858531709175816ull, 11453904583255713711ull, 13069975631747693828ull, 4398482645418246927ull}}, {{13804940609959316741ull, 16382062401389596877ull, 15086263797483390498ull, 2749051653386404329ull}}, {{3421117707166982215ull, 11254205964882220289ull, 5022771691572074411ull, 3436314566733005412ull}}, {{8888083152386115672ull, 9456071437675387457ull, 6278464614465093014ull, 4295393208416256765ull}}, {{17084267016309792055ull, 1298358630119729256ull, 6229883393254377086ull, 2684620755260160478ull}}, {{2908589696677688453ull, 10846320324504437379ull, 17010726278422747165ull, 3355775944075200597ull}}, {{17470795176129274278ull, 18169586424057934627ull, 7428349792746270244ull, 4194719930094000747ull}}, {{8613403975867102472ull, 2132619478181433334ull, 2336875611252724951ull, 2621699956308750467ull}}, {{1543382932979102282ull, 16500832403008955380ull, 16756152569348069900ull, 3277124945385938083ull}}, {{1929228666223877852ull, 2179296430051642609ull, 16333504693257699472ull, 4096406181732422604ull}}, {{12734982962458393418ull, 1362060268782276630ull, 985068396431286362ull, 2560253863582764128ull}}, {{6695356666218215964ull, 10925947372832621596ull, 1231335495539107952ull, 3200317329478455160ull}}, {{8369195832772769955ull, 13657434216040776995ull, 1539169369423884940ull, 4000396661848068950ull}}, {{2924904386269287270ull, 17759268421880261430ull, 14797038911172091799ull, 2500247913655043093ull}}, {{12879502519691384895ull, 17587399508922938883ull, 4661240583682951037ull, 3125309892068803867ull}}, {{11487692131186843215ull, 8149191330871509892ull, 1214864711176300893ull, 3906637365086004834ull}}, {{16403179618846552818ull, 7399087591008387634ull, 5370976462912575962ull, 2441648353178753021ull}}, {{11280602486703415214ull, 25487451905708735ull, 11325406597068107857ull, 3052060441473441276ull}}, {{9489067089951881113ull, 4643545333309523823ull, 14156758246335134821ull, 3815075551841801595ull}}, {{12848195958861007552ull, 5208058842532146341ull, 6542130894745765311ull, 2384422219901125997ull}}, {{2225186893294095728ull, 1898387534737795023ull, 12789349636859594543ull, 2980527774876407496ull}}, {{16616541671899783372ull, 16208042473704407490ull, 15986687046074493178ull, 3725659718595509370ull}}, {{14997024563364752511ull, 14741712564492642585ull, 14603365422223946140ull, 2328537324122193356ull}}, {{4911222648923776927ull, 18427140705615803232ull, 18254206777779932675ull, 2910671655152741695ull}}, {{6139028311154721159ull, 18422239863592366136ull, 18206072453797527940ull, 3638339568940927119ull}}, {{7673785388943401449ull, 4581055755780906054ull, 18145904548819522022ull, 4547924461176158899ull}}, {{184429849662238002ull, 16698217902645229996ull, 9035347333798507311ull, 2842452788235099312ull}}, {{230537312077797502ull, 16261086359879149591ull, 11294184167248134139ull, 3553065985293874140ull}}, {{14123229695379410589ull, 15714671931421549084ull, 14117730209060167674ull, 4441332481617342675ull}}, {{18050390596466907426ull, 14433355975565856081ull, 6517738371448910844ull, 2775832801010839172ull}}, {{8727930190301470571ull, 18041694969457320102ull, 8147172964311138555ull, 3469791001263548965ull}}, {{1686540701022062405ull, 17940432693394262224ull, 14795652223816311098ull, 4337238751579436206ull}}, {{1054087938138789004ull, 15824456451798801794ull, 4635596621457806532ull, 2710774219737147629ull}}, {{10540981959528262062ull, 1333826491038950626ull, 10406181795249646070ull, 3388467774671434536ull}}, {{3952855412555551770ull, 10890655150653464091ull, 13007727244062057587ull, 4235584718339293170ull}}, {{164691623633525904ull, 4500816459944721105ull, 12741515545966173896ull, 2647240448962058231ull}}, {{4817550547969295284ull, 5626020574930901381ull, 11315208414030329466ull, 3309050561202572789ull}}, {{10633624203389007009ull, 16255897755518402534ull, 308952462255748120ull, 4136313201503215987ull}}, {{2034329108690741477ull, 10159936097199001584ull, 16333996353405700239ull, 2585195750939509991ull}}, {{2542911385863426846ull, 8088234103071364076ull, 15805809423329737395ull, 3231494688674387489ull}}, {{3178639232329283557ull, 5498606610411817191ull, 5922203723880008032ull, 4039368360842984362ull}}, {{8904178547846884080ull, 3436629131507385744ull, 8313063345852392924ull, 2524605225526865226ull}}, {{11130223184808605099ull, 4295786414384232180ull, 1167957145460715347ull, 3155756531908581533ull}}, {{13912778981010756374ull, 758046999552902321ull, 6071632450253282088ull, 3944695664885726916ull}}, {{1777957835490640878ull, 473779374720563951ull, 13018142318263077113ull, 2465434790553579322ull}}, {{16057505349645464809ull, 5203910236828092842ull, 7049305860974070583ull, 3081793488191974153ull}}, {{10848509650202055204ull, 1893201777607728149ull, 13423318344644976133ull, 3852241860239967691ull}}, {{9086161540589978454ull, 3489094120218524045ull, 6083730956189416131ull, 2407651162649979807ull}}, {{15969387944164860972ull, 18196425705555318768ull, 2992977676809382259ull, 3009563953312474759ull}}, {{1514990856496524599ull, 18133846113516760557ull, 17576280151293891536ull, 3761954941640593448ull}}, {{3252712294524021826ull, 11333653820947975348ull, 10985175094558682210ull, 2351221838525370905ull}}, {{4065890368155027283ull, 4943695239330193377ull, 18343154886625740667ull, 2939027298156713631ull}}, {{9694048978621172007ull, 1567933030735353817ull, 18317257589854787930ull, 3673784122695892039ull}}, {{16729247241703852913ull, 11183288325273968079ull, 18284885968891097008ull, 4592230153369865049ull}}, {{17373308553705989927ull, 6989555203296230049ull, 4510524702915853774ull, 2870143845856165656ull}}, {{7881577636850323697ull, 17960316040975063370ull, 5638155878644817217ull, 3587679807320207070ull}}, {{628600009208128813ull, 8615336995936665501ull, 16271066885160797330ull, 4484599759150258837ull}}, {{2698718014968774460ull, 9996271640887803842ull, 12475259812439192283ull, 2802874849468911773ull}}, {{12596769555565743883ull, 7883653532682366898ull, 1759016710266826642ull, 3503593561836139717ull}}, {{6522589907602404046ull, 631194878998182815ull, 6810456906260921207ull, 4379491952295174646ull}}, {{10994147719892584385ull, 7312025827014946115ull, 18091593621695239466ull, 2737182470184484153ull}}, {{9130998631438342577ull, 18363404320623458452ull, 8779433971836885620ull, 3421478087730605192ull}}, {{11413748289297928221ull, 4507511327069771449ull, 10974292464796107026ull, 4276847609663256490ull}}, {{216063653170123282ull, 7428880597845995060ull, 11470618808924954795ull, 2673029756039535306ull}}, {{270079566462654103ull, 4674414728880105921ull, 5114901474301417686ull, 3341287195049419133ull}}, {{4949285476505705532ull, 15066390447954908209ull, 11005312861304160011ull, 4176608993811773916ull}}, {{14622518468884535718ull, 7110651020758123678ull, 16101692575169875815ull, 2610380621132358697ull}}, {{9054776049250893839ull, 4276627757520266694ull, 6292057663680181057ull, 3262975776415448372ull}}, {{2095098024708841491ull, 9957470715327721272ull, 7865072079600226321ull, 4078719720519310465ull}}, {{1309436265443025932ull, 17752634243148295555ull, 16444885095818611210ull, 2549199825324569040ull}}, {{15471853387085946127ull, 12967420767080593635ull, 2109362296063712397ull, 3186499781655711301ull}}, {{14728130715430044754ull, 2374217903568578332ull, 7248388888507028401ull, 3983124727069639126ull}}, {{18428453733998553780ull, 13013101235798831217ull, 18365301110599056462ull, 2489452954418524453ull}}, {{9200509112216028512ull, 7043004507893763214ull, 9121568332966656866ull, 3111816193023155567ull}}, {{2277264353415259832ull, 18027127671721979826ull, 6790274397780933178ull, 3889770241278944459ull}}, {{6034976239311925299ull, 15878640813253625295ull, 1938078489399389284ull, 2431106400799340287ull}}, {{2932034280712518720ull, 1401556942857480003ull, 16257656167031400318ull, 3038883000999175358ull}}, {{17500100906172812112ull, 10975318215426625811ull, 11098698171934474589ull, 3798603751248969198ull}}, {{8631720057144313618ull, 9165416893855335084ull, 2325000339031658714ull, 2374127344530605749ull}}, {{10789650071430392023ull, 2233399080464393047ull, 7517936442216961297ull, 2967659180663257186ull}}, {{8875376570860602124ull, 7403434869007879213ull, 174048515916425813ull, 3709573975829071483ull}}, {{7852953366001570280ull, 6932989802343618460ull, 16249681386943623797ull, 2318483734893169676ull}}, {{9816191707501962850ull, 13277923271356910979ull, 1865357659969978130ull, 2898104668616462096ull}}, {{7658553615950065658ull, 7374032052341362916ull, 2331697074962472663ull, 3622630835770577620ull}}, {{9573192019937582072ull, 4605854046999315741ull, 2914621343703090829ull, 4528288544713222025ull}}, {{8289088021674682747ull, 5184501788588266290ull, 13350853385882901528ull, 2830180340445763765ull}}, {{1137987990238577626ull, 6480627235735332863ull, 2853508677071463198ull, 3537725425557204707ull}}, {{15257543043080385744ull, 17324156081523941886ull, 17401943901621492709ull, 4422156781946505883ull}}, {{4924278383497853186ull, 13133440560166157631ull, 8570371929299738991ull, 2763847988716566177ull}}, {{1543661960944928579ull, 11805114681780309135ull, 15324650930052061643ull, 3454809985895707721ull}}, {{15764635506463324436ull, 10144707333797998514ull, 5320755607282913342ull, 4318512482369634652ull}}, {{14464583209966965676ull, 1728756065196361167ull, 12548844291406596647ull, 2699070301481021657ull}}, {{13469042994031319191ull, 15996003136777615171ull, 1850997308976082096ull, 3373837876851277072ull}}, {{12224617724111761085ull, 1548259847262467348ull, 2313746636220102621ull, 4217297346064096340ull}}, {{16863758114424626486ull, 3273505413752736044ull, 10669463684492339946ull, 2635810841290060212ull}}, {{2632953569321231492ull, 13315253804045695864ull, 13336829605615424932ull, 3294763551612575265ull}}, {{3291191961651539365ull, 16644067255057119830ull, 2835978951737117453ull, 4118454439515719082ull}}, {{15892053031314375815ull, 12708385043624393845ull, 6384172863263086312ull, 2574034024697324426ull}}, {{6030008233860806057ull, 15885481304530492307ull, 17203588115933633698ull, 3217542530871655532ull}}, {{2925824273898619667ull, 10633479593808339576ull, 3057741071207490507ull, 4021928163589569416ull}}, {{1828640171186637292ull, 4340081736916518283ull, 1911088169504681567ull, 2513705102243480885ull}}, {{16120858269265460327ull, 813416152718259949ull, 7000546230308239863ull, 3142131377804351106ull}}, {{6316014781299661696ull, 14851828246179988649ull, 17974054824740075636ull, 3927664222255438882ull}}, {{15476724284380758320ull, 59020617007717097ull, 15845470283889935177ull, 2454790138909649301ull}}, {{5510847300193784188ull, 4685461789687034276ull, 5971779799580255259ull, 3068487673637061627ull}}, {{6888559125242230235ull, 1245141218681404941ull, 2853038731047931170ull, 3835609592046327034ull}}, {{6611192462490087849ull, 5389899280103265992ull, 6394835225332344885ull, 2397255995028954396ull}}, {{8263990578112609812ull, 11349060118556470394ull, 7993544031665431106ull, 2996569993786192995ull}}, {{1106616185785986456ull, 4962953111340812185ull, 5380244021154400979ull, 3745712492232741244ull}}, {{12220850162184711295ull, 796002685374313663ull, 12586024550076276420ull, 2341070307645463277ull}}, {{10664376684303501215ull, 995003356717892079ull, 1897472632313181813ull, 2926337884556829097ull}}, {{8718784836951988615ull, 5855440214324753003ull, 6983526808818865170ull, 3657922355696036371ull}}, {{6286795027762597864ull, 16542672304760717062ull, 4117722492596193558ull, 4572402944620045464ull}}, {{17764304947633787377ull, 5727484172048060259ull, 2573576557872620974ull, 2857751840387528415ull}}, {{17593695166114846318ull, 16382727251914851132ull, 17052028752622939929ull, 3572189800484410518ull}}, {{3545374883934006281ull, 6643351009611400204ull, 12091663903923899104ull, 4465237250605513148ull}}, {{11439231339313529734ull, 4152094381007125127ull, 16780661976807212748ull, 2790773281628445717ull}}, {{9687353155714524263ull, 5190117976258906409ull, 7140769415726852223ull, 3488466602035557147ull}}, {{16720877463070543233ull, 1875961451896245107ull, 4314275751231177375ull, 4360583252544446434ull}}, {{8144705405205395569ull, 8090004935076235048ull, 7308108362946873763ull, 2725364532840279021ull}}, {{10180881756506744461ull, 5500820150417905906ull, 13746821472110980108ull, 3406705666050348776ull}}, {{3502730158778654768ull, 6876025188022382383ull, 17183526840138725135ull, 4258382082562935970ull}}, {{9106735376877741086ull, 11215044770155070845ull, 15351390293514091113ull, 2661488801601834981ull}}, {{15995105239524564261ull, 183747907411674844ull, 5354179811610450180ull, 3326861002002293727ull}}, {{1547137475696153711ull, 229684884264593556ull, 2081038746085674821ull, 4158576252502867159ull}}, {{10190332959164871877ull, 2449396061879064924ull, 8218178243944628619ull, 2599110157814291974ull}}, {{12737916198956089846ull, 16896803132630994867ull, 1049350768076009965ull, 3248887697267864968ull}}, {{11310709230267724404ull, 7285945860506579872ull, 1311688460095012457ull, 4061109621584831210ull}}, {{7069193268917327753ull, 16082931208885082180ull, 5431491305986770689ull, 2538193513490519506ull}}, {{8836491586146659691ull, 6268605955824189013ull, 16012736169338239170ull, 3172741891863149382ull}}, {{15657300501110712517ull, 17059129481635012074ull, 10792548174818023154ull, 3965927364828936728ull}}, {{14397498831621583227ull, 15273641944449270450ull, 6745342609261264471ull, 2478704603018085455ull}}, {{8773501502672203226ull, 14480366412134200159ull, 3819992243149192685ull, 3098380753772606819ull}}, {{6355190859912866129ull, 4265399959885586487ull, 163304285509102953ull, 3872975942215758524ull}}, {{10889523315086623187ull, 14195090020996961314ull, 9325437215297965153ull, 2420609963884849077ull}}, {{4388532107003503175ull, 3908804470964037931ull, 16268482537549844346ull, 3025762454856061346ull}}, {{873979115326991065ull, 14109377625559823222ull, 11112231135082529624ull, 3782203068570076683ull}}, {{14381295002361533128ull, 8818361015974889513ull, 4639301450212887063ull, 2363876917856297927ull}}, {{4141560697669752697ull, 6411265251541223988ull, 1187440794338720925ull, 2954846147320372409ull}}, {{5176950872087190872ull, 12625767582853917889ull, 6095987011350789060ull, 3693557684150465511ull}}, {{14764809341122964055ull, 17114476776138474488ull, 10727520909735325018ull, 2308473552594040944ull}}, {{9267602694153453ull, 12169723933318317303ull, 13409401137169156273ull, 2885591940742551180ull}}, {{13846642558649855528ull, 1377096861365732916ull, 16761751421461445342ull, 3606989925928188975ull}}, {{17308303198312319409ull, 10944743113561941953ull, 16340503258399418773ull, 4508737407410236219ull}}, {{3900160471304117775ull, 9146307455189907673ull, 7906971527285942781ull, 2817960879631397637ull}}, {{9486886607557535123ull, 16044570337414772495ull, 14495400427534816380ull, 3522451099539247046ull}}, {{7246922241019530999ull, 1608968848058914003ull, 8895878497563744668ull, 4403063874424058808ull}}, {{2223483391423512923ull, 10228977566891597060ull, 5559924060977340417ull, 2751914921515036755ull}}, {{2779354239279391153ull, 17397907977041884229ull, 2338219057794287617ull, 3439893651893795944ull}}, {{8085878817526626846ull, 7912326916020191574ull, 2922773822242859522ull, 4299867064867244930ull}}, {{441988242526753875ull, 9556890340940007638ull, 6438419657329175105ull, 2687416915542028081ull}}, {{9775857340013218151ull, 16557798944602397451ull, 12659710590088856785ull, 3359271144427535101ull}}, {{7608135656589134785ull, 6862190625470833102ull, 1989580182328907270ull, 4199088930534418877ull}}, {{143398766940821337ull, 18123927196201434401ull, 3549330623169260995ull, 2624430581584011798ull}}, {{4790934477103414575ull, 18043222976824405097ull, 13660035315816352052ull, 3280538226980014747ull}}, {{10600354114806656122ull, 4107284647320954755ull, 12463358126343052162ull, 4100672783725018434ull}}, {{4319378312540466125ull, 7178738923002984626ull, 12401284847391795505ull, 2562920489828136521ull}}, {{14622594927530358464ull, 13585109672181118686ull, 1666548003957580669ull, 3203650612285170652ull}}, {{9054871622558172271ull, 3146329034944234646ull, 2083185004946975837ull, 4004563265356463315ull}}, {{1047608745671469766ull, 4272298656053840606ull, 17442891692587717562ull, 2502852040847789571ull}}, {{10532882968944113015ull, 14563745356922076565ull, 17191928597307259048ull, 3128565051059736964ull}}, {{17777789729607529173ull, 18204681696152595706ull, 3043166672924522194ull, 3910706313824671206ull}}, {{15722804599432093637ull, 15989612078522760220ull, 15737037225859990083ull, 2444191446140419503ull}}, {{1206761675580565430ull, 15375329079726062372ull, 15059610513897599700ull, 3055239307675524379ull}}, {{1508452094475706788ull, 772417275948026349ull, 14212827123944611722ull, 3819049134594405474ull}}, {{3248625568261010695ull, 5094446815894904372ull, 13494702970892770230ull, 2386905709121503421ull}}, {{4060781960326263368ull, 15591430556723406273ull, 3033320658333799075ull, 2983632136401879277ull}}, {{9687663468835217114ull, 14877602177476869937ull, 8403336841344636748ull, 3729540170502349096ull}}, {{17584004714090480456ull, 75129324068267902ull, 5252085525840397968ull, 2330962606563968185ull}}, {{12756633855758324762ull, 93911655085334878ull, 11176792925727885364ull, 2913703258204960231ull}}, {{6722420282843130145ull, 117389568856668598ull, 9359305138732468801ull, 3642129072756200289ull}}, {{17626397390408688489ull, 4758422979498223651ull, 16310817441842973905ull, 4552661340945250361ull}}, {{8710655359791736354ull, 14503229408254859542ull, 3276731873510776834ull, 2845413338090781476ull}}, {{1664947162884894634ull, 8905664723463798620ull, 4095914841888471043ull, 3556766672613476845ull}}, {{2081183953606118293ull, 6520394885902360371ull, 9731579570787976708ull, 4445958340766846056ull}}, {{17441641035499681597ull, 13298618840543751039ull, 6082237231742485442ull, 2778723962979278785ull}}, {{17190365275947214092ull, 7399901513824912991ull, 12214482558105494707ull, 3473404953724098481ull}}, {{16876270576506629711ull, 4638190873853753335ull, 1433045142349704672ull, 4341756192155123102ull}}, {{17465198137957725426ull, 2898869296158595834ull, 14730711269250729132ull, 2713597620096951938ull}}, {{12608125635592380974ull, 3623586620198244793ull, 9190017049708635607ull, 3391997025121189923ull}}, {{1925098989208312505ull, 18364541330529969704ull, 6875835293708406604ull, 4239996281401487404ull}}, {{1203186868255195316ull, 2254466294726455257ull, 13520769095422529936ull, 2649997675875929627ull}}, {{6115669603746382049ull, 2818082868408069071ull, 12289275350850774516ull, 3312497094844912034ull}}, {{3032900986255589657ull, 3522603585510086339ull, 6138222151708692337ull, 4140621368556140043ull}}, {{18036464180905601200ull, 13730842287012273721ull, 1530545835604238758ull, 2587888355347587527ull}}, {{8710522170849837788ull, 7940180821910566344ull, 15748240349787462160ull, 3234860444184484408ull}}, {{10888152713562297234ull, 9925226027388207930ull, 1238556363524776084ull, 4043575555230605511ull}}, {{11416781464403823676ull, 15426638303972405764ull, 7691626754844066908ull, 2527234722019128444ull}}, {{14270976830504779595ull, 836553806255955589ull, 9614533443555083636ull, 3159043402523910555ull}}, {{4003662982848810781ull, 1045692257819944487ull, 7406480786016466641ull, 3948804253154888194ull}}, {{9419818391921588594ull, 12182772707205935064ull, 9240736509687679554ull, 2468002658221805121ull}}, {{11774772989901985743ull, 6005093847152643022ull, 16162606655536987347ull, 3085003322777256401ull}}, {{5495094200522706370ull, 2894681290513415874ull, 6368200264139070472ull, 3856254153471570502ull}}, {{8046119893754079386ull, 1809175806570884921ull, 17815183220369082757ull, 2410158845919731563ull}}, {{14669335885619987136ull, 6873155776640994055ull, 17657293007033965542ull, 3012698557399664454ull}}, {{13724983838597596016ull, 17814816757656018377ull, 12848244221937681119ull, 3765873196749580568ull}}, {{1660585871482415654ull, 18051789501176093342ull, 8030152638711050699ull, 2353670747968487855ull}}, {{11299104376207795375ull, 17953050858042728773ull, 5426004779961425470ull, 2942088434960609819ull}}, {{288822414977580507ull, 13217941535698635159ull, 2170819956524393934ull, 3677610543700762274ull}}, {{14196086074004139346ull, 7299054882768518140ull, 11936896982510268226ull, 4597013179625952842ull}}, {{18095925833107362899ull, 9173595320157711741ull, 12072246632496305545ull, 2873133237266220526ull}}, {{8784849236102039912ull, 16078680168624527581ull, 5866936253765606123ull, 3591416546582775658ull}}, {{15592747563554937794ull, 15486664192353271572ull, 16557042354061783462ull, 4489270683228469572ull}}, {{522095190367060313ull, 5067479101793406829ull, 1124779434433838856ull, 2805794177017793483ull}}, {{5264305006386213296ull, 6334348877241758536ull, 15241032348324462282ull, 3507242721272241853ull}}, {{6580381257982766619ull, 17141308133406973978ull, 5216232380123414140ull, 4384053401590302317ull}}, {{8724424304666617041ull, 1489945546524582928ull, 5565988246790827790ull, 2740033375993938948ull}}, {{10905530380833271302ull, 11085803970010504468ull, 6957485308488534737ull, 3425041719992423685ull}}, {{13631912976041589127ull, 22196907230966873ull, 13308542654038056326ull, 4281302149990529606ull}}, {{1602416582384911348ull, 13848931122301518008ull, 3706153140346397299ull, 2675813843744081004ull}}, {{2003020727981139185ull, 12699477884449509606ull, 4632691425432996624ull, 3344767304680101255ull}}, {{11727147946831199790ull, 15874347355561887007ull, 1179178263363857876ull, 4180959130850126569ull}}, {{14246996494410581725ull, 698095060371403571ull, 12266201460670880933ull, 2613099456781329105ull}}, {{13197059599585839252ull, 5484304843891642368ull, 1497693770556437454ull, 3266374320976661382ull}}, {{16496324499482299065ull, 16078753091719328768ull, 11095489250050322625ull, 4082967901220826727ull}}, {{10310202812176436916ull, 3131691654683498624ull, 13852209808922533497ull, 2551854938263016704ull}}, {{12887753515220546144ull, 8526300586781761184ull, 17315262261153166871ull, 3189818672828770880ull}}, {{16109691894025682680ull, 6046189715049813576ull, 3197333752731906973ull, 3987273341035963601ull}}, {{10068557433766051675ull, 6084711581119827437ull, 13527548641525911618ull, 2492045838147477250ull}}, {{17197382810634952498ull, 16829261513254560104ull, 7686063765052613714ull, 3115057297684346563ull}}, {{3049984439584139006ull, 11813204854713424323ull, 4995893687888379239ull, 3893821622105433204ull}}, {{18047141339235944543ull, 14300782061836972057ull, 12345805591785012832ull, 2433638513815895752ull}}, {{8723868618762766967ull, 17875977577296215072ull, 15432256989731266040ull, 3042048142269869690ull}}, {{10904835773453458709ull, 3898227897910717224ull, 10066949200309306743ull, 3802560177837337113ull}}, {{6815522358408411693ull, 9353921463835280121ull, 17821058296261786474ull, 2376600111148335695ull}}, {{13131088966437902520ull, 2469029792939324343ull, 17664636851899845189ull, 2970750138935419619ull}}, {{11802175189619990246ull, 7697973259601543333ull, 17469110046447418582ull, 3713437673669274524ull}}, {{9682202502726187856ull, 199547268823576679ull, 1694821742174860806ull, 2320898546043296578ull}}, {{7491067109980346916ull, 9472806122884246657ull, 11341899214573351815ull, 2901123182554120722ull}}, {{13975519905902821549ull, 7229321635177920417ull, 4954001981361913961ull, 3626403978192650903ull}}, {{3634341827096363224ull, 13648338062399788426ull, 1580816458275004547ull, 4533004972740813629ull}}, {{6883149660362614919ull, 6224368279786173814ull, 3293853295635571794ull, 2833128107963008518ull}}, {{17827309112308044457ull, 17003832386587493075ull, 13340688656399240550ull, 3541410134953760647ull}}, {{17672450371957667667ull, 12031418446379590536ull, 12064174802071662784ull, 4426762668692200809ull}}, {{11045281482473542292ull, 7519636528987244085ull, 622580223653707384ull, 2766726667932625506ull}}, {{18418287871519315769ull, 9399545661234055106ull, 10001597316421910038ull, 3458408334915781882ull}}, {{13799487802544368903ull, 2526060039687793075ull, 3278624608672611740ull, 4323010418644727353ull}}, {{6318836867376536612ull, 10802159561659646480ull, 13578355426488852097ull, 2701881511652954595ull}}, {{7898546084220670765ull, 18114385470501946004ull, 12361258264683677217ull, 3377351889566193244ull}}, {{9873182605275838457ull, 8807923782845268793ull, 15451572830854596522ull, 4221689861957741555ull}}, {{17699954174365868796ull, 10116638382705680899ull, 7351390010070428874ull, 2638556163723588472ull}}, {{17513256699529948090ull, 3422425941527325316ull, 9189237512588036093ull, 3298195204654485590ull}}, {{3444826800702883497ull, 8889718445336544550ull, 2263174853880269308ull, 4122744005818106988ull}}, {{15988074805721465898ull, 14779446065190116151ull, 10637856320529944125ull, 2576715003636316867ull}}, {{15373407488724444468ull, 4639249526205481477ull, 8685634382235042253ull, 3220893754545396084ull}}, {{5381701305623391873ull, 10410747926184239751ull, 10857042977793802816ull, 4026117193181745105ull}}, {{10281092343655701777ull, 6506717453865149844ull, 18314866907189596520ull, 2516323245738590690ull}}, {{12851365429569627221ull, 8133396817331437305ull, 13670211597132219842ull, 3145404057173238363ull}}, {{2229148731679870314ull, 943373984809520824ull, 12476078477987886899ull, 3931755071466547954ull}}, {{1393217957299918946ull, 16730509805001808179ull, 12409235067169817215ull, 2457346919666592471ull}}, {{15576580501907062395ull, 16301451237824872319ull, 10899857815534883615ull, 3071683649583240589ull}}, {{14859039608956440089ull, 15765128028853702495ull, 18236508287845992423ull, 3839604561979050736ull}}, {{16204428783238856912ull, 16770734045674645915ull, 11397817679903745264ull, 2399752851236906710ull}}, {{15643849960621183236ull, 2516673483383755778ull, 5023900063024905773ull, 2999691064046133388ull}}, {{10331440413921703237ull, 7757527872657082627ull, 6279875078781132216ull, 3749613830057666735ull}}, {{4151307249487370571ull, 4848454920410676642ull, 10842450951879289491ull, 2343508643786041709ull}}, {{14412506098713989022ull, 1448882632085957898ull, 18164749708276499768ull, 2929385804732552136ull}}, {{8792260586537710469ull, 1811103290107447373ull, 4259193061636073094ull, 3661732255915690171ull}}, {{15602011751599525990ull, 11487251149489085024ull, 712305308617703463ull, 4577165319894612714ull}}, {{9751257344749703744ull, 14097060996071759996ull, 5056876836313452568ull, 2860728324934132946ull}}, {{12189071680937129680ull, 17621326245089699995ull, 15544468082246591518ull, 3575910406167666182ull}}, {{10624653582744024196ull, 12803285769507349186ull, 10207213065953463590ull, 4469888007709582728ull}}, {{11252094507642403027ull, 3390367587514705337ull, 6379508166220914744ull, 2793680004818489205ull}}, {{230060079270840071ull, 4237959484393381672ull, 12586071226203531334ull, 3492100006023111506ull}}, {{287575099088550089ull, 14520821392346502898ull, 6509216995899638359ull, 4365125007528889383ull}}, {{4791420455357731710ull, 15993042397857646167ull, 10985789650078355830ull, 2728203129705555864ull}}, {{1377589550769776733ull, 10767930960467281901ull, 13732237062597944788ull, 3410253912131944830ull}}, {{6333672956889608820ull, 13459913700584102376ull, 7941924291392655177ull, 4262817390164931038ull}}, {{3958545598056005513ull, 1494917035223982129ull, 352016663693021582ull, 2664260868853081899ull}}, {{9559868015997394795ull, 11092018330884753469ull, 14275078884898440689ull, 3330326086066352373ull}}, {{16561521038424131397ull, 29964858323778124ull, 4008790550840887150ull, 4162907607582940467ull}}, {{1127578612160306316ull, 13853786091734525040ull, 199651085061860516ull, 2601817254739337792ull}}, {{1409473265200382894ull, 17317232614668156300ull, 249563856327325645ull, 3252271568424172240ull}}, {{1761841581500478618ull, 7811482713053031663ull, 311954820409157057ull, 4065339460530215300ull}}, {{8018680016078880992ull, 16411391741726614549ull, 9418343799610498968ull, 2540837162831384562ull}}, {{14635036038525989144ull, 2067495603448716570ull, 2549557712658347903ull, 3176046453539230703ull}}, {{9070423011302710622ull, 16419427559593059425ull, 17022005196105098590ull, 3970058066924038378ull}}, {{17198229428132663899ull, 5650456206318274236ull, 15250439265993074523ull, 2481286291827523986ull}}, {{3051042711456278258ull, 2451384239470454892ull, 9839677045636567346ull, 3101607864784404983ull}}, {{3813803389320347822ull, 12287602336192844423ull, 7687910288618321278ull, 3877009830980506229ull}}, {{9301156145966299245ull, 3068065441693139860ull, 7110786939600144751ull, 2423131144362816393ull}}, {{11626445182457874056ull, 17670139857398588537ull, 13500169692927568842ull, 3028913930453520491ull}}, {{697998422790178858ull, 12864302784893459864ull, 12263526097732073149ull, 3786142413066900614ull}}, {{436249014243861786ull, 10346032249772106367ull, 3053017792655157814ull, 2366339008166812884ull}}, {{14380369323086990945ull, 3709168275360357150ull, 3816272240818947268ull, 2957923760208516105ull}}, {{8752089617003962873ull, 4636460344200446438ull, 9382026319451071989ull, 3697404700260645131ull}}, {{858369992200088892ull, 5203630724338972976ull, 3557923440443226041ull, 2310877937662903207ull}}, {{1072962490250111115ull, 11116224423851104124ull, 18282462355836196263ull, 2888597422078629008ull}}, {{1341203112812638893ull, 9283594511386492251ull, 4406333871085693713ull, 3610746777598286261ull}}, {{15511561946297962328ull, 16216179157660503217ull, 10119603357284505045ull, 4513433471997857826ull}}, {{2777197188795144599ull, 12440954982751508463ull, 10936438116730203557ull, 2820895919998661141ull}}, {{17306554541276094461ull, 1716135673157221866ull, 18282233664340142351ull, 3526119899998326426ull}}, {{12409821139740342268ull, 15980227646728691045ull, 13629420043570402130ull, 4407649874997908033ull}}, {{10061981221551407870ull, 14599328297632819807ull, 1600858499590419475ull, 2754781171873692521ull}}, {{7965790508511871933ull, 13637474353613636855ull, 6612759142915412248ull, 3443476464842115651ull}}, {{5345552117212452012ull, 17046842942017046069ull, 3654262910216877406ull, 4304345581052644564ull}}, {{5646813082471476460ull, 6042590820333265889ull, 11507286355740324187ull, 2690215988157902852ull}}, {{11670202371516733479ull, 2941552506989194457ull, 14384107944675405234ull, 3362769985197378565ull}}, {{752694909113753136ull, 12900312670591268880ull, 4145076875562092830ull, 4203462481496723207ull}}, {{470434318196095710ull, 3451009400692155146ull, 9508202074867389875ull, 2627164050935452004ull}}, {{9811414934599895446ull, 18148819806147357644ull, 11885252593584237343ull, 3283955063669315005ull}}, {{12264268668249869307ull, 18074338739256809151ull, 1021507686698132967ull, 4104943829586643757ull}}, {{14582696945297250173ull, 18213990739676587575ull, 2944285313400027056ull, 2565589893491652348ull}}, {{13616685163194174812ull, 4320744350886182853ull, 3680356641750033821ull, 3206987366864565435ull}}, {{3185798398710554803ull, 10012616457035116471ull, 18435503857469705988ull, 4008734208580706793ull}}, {{8908653026835178608ull, 15481257322501723602ull, 4604660883277484386ull, 2505458880362941746ull}}, {{1912444246689197452ull, 10128199616272378695ull, 14979198140951631291ull, 3131823600453677182ull}}, {{16225613363643660527ull, 8048563501913085464ull, 9500625639334763306ull, 3914779500567096478ull}}, {{10141008352277287830ull, 9642038207123066319ull, 1326205006156839162ull, 2446737187854435299ull}}, {{8064574421919221883ull, 2829175722049057091ull, 15492814312978212665ull, 3058421484818044123ull}}, {{5469032008971639450ull, 8148155670988709268ull, 14754331872795377927ull, 3823026856022555154ull}}, {{12641517042462050464ull, 12010126322009025148ull, 13833143438924499108ull, 2389391785014096971ull}}, {{15801896303077563080ull, 15012657902511281435ull, 12679743280228235981ull, 2986739731267621214ull}}, {{15140684360419565946ull, 4930764322856938082ull, 6626307063430519169ull, 3733424664084526518ull}}, {{14074613743689616620ull, 14610942747854056061ull, 17976499969926238192ull, 2333390415052829073ull}}, {{3758209124329857063ull, 18263678434817570077ull, 8635566907125634028ull, 2916738018816036342ull}}, {{9309447423839709233ull, 4382853969812410980ull, 1571086597052266728ull, 3645922523520045428ull}}, {{11636809279799636541ull, 5478567462265513725ull, 1963858246315333410ull, 4557403154400056785ull}}, {{9578848809088466791ull, 8035790682343333982ull, 12756626450015553141ull, 2848376971500035490ull}}, {{2750188974505807680ull, 14656424371356555382ull, 6722411025664665618ull, 3560471214375044363ull}}, {{12661108254987035408ull, 9097158427340918419ull, 3791327763653444119ull, 4450589017968805454ull}}, {{5607349650153203178ull, 12603253044729155868ull, 16204637907565566286ull, 2781618136230503408ull}}, {{7009187062691503973ull, 6530694269056669027ull, 1809053310747406242ull, 3477022670288129261ull}}, {{4149797809936992062ull, 17386739873175612092ull, 6873002656861645706ull, 4346278337860161576ull}}, {{11816995668065395847ull, 15478398439162145461ull, 4295626660538528566ull, 2716423961162600985ull}}, {{936186529799581096ull, 10124626012097906019ull, 9981219344100548612ull, 3395529951453251231ull}}, {{15005291217531640082ull, 12655782515122382523ull, 7864838161698297861ull, 4244412439316564039ull}}, {{7072464001743581099ull, 10215707081165183029ull, 11833052878702518019ull, 2652757774572852524ull}}, {{13452266020606864278ull, 8157947833029090882ull, 14791316098378147524ull, 3315947218216065655ull}}, {{7591960488903804540ull, 10197434791286363603ull, 13877459104545296501ull, 4144934022770082069ull}}, {{2439132296351183885ull, 8679239753767671204ull, 10979254949554504265ull, 2590583764231301293ull}}, {{3048915370438979857ull, 15460735710636976909ull, 18335754705370518235ull, 3238229705289126616ull}}, {{8422830231476112725ull, 14714233619868833232ull, 4472949308003596178ull, 4047787131611408271ull}}, {{5264268894672570453ull, 13808082030845408674ull, 9713122345143329467ull, 2529866957257130169ull}}, {{15803708155195488874ull, 12648416520129372938ull, 16753088949856549738ull, 3162333696571412711ull}}, {{10531263157139585285ull, 6587148613306940365ull, 16329675168893299269ull, 3952917120714265889ull}}, {{8887882482425934755ull, 6422810892530531680ull, 3288517952917230187ull, 2470573200446416181ull}}, {{11109853103032418444ull, 3416827597235776696ull, 8722333459573925638ull, 3088216500558020226ull}}, {{13887316378790523055ull, 13494406533399496678ull, 1679544787612631239ull, 3860270625697525283ull}}, {{4067886718316689005ull, 15351533111015767280ull, 17190616556753752188ull, 2412669141060953301ull}}, {{5084858397895861257ull, 742672315060157484ull, 7653212640660026524ull, 3015836426326191627ull}}, {{6356072997369826571ull, 928340393825196855ull, 4954829782397645251ull, 3769795532907739534ull}}, {{10890074650997223463ull, 16721113810636605698ull, 16931826669280691993ull, 2356122208067337208ull}}, {{4389221276891753520ull, 7066334208013593411ull, 2718039262891313376ull, 2945152760084171511ull}}, {{874840577687303996ull, 8832917760016991764ull, 17232607133896305432ull, 3681440950105214388ull}}, {{1093550722109129995ull, 11041147200021239705ull, 3094014843660830174ull, 4601801187631517986ull}}, {{12212684247386676007ull, 2289030981585886911ull, 6545445295715406763ull, 2876125742269698741ull}}, {{10654169290805957105ull, 16696346782264522351ull, 12793492638071646357ull, 3595157177837123426ull}}, {{8706025595080058477ull, 7035375422548489227ull, 6768493760734782139ull, 4493946472296404283ull}}, {{3135422987711342596ull, 2091266629879111815ull, 1924465591245544885ull, 2808716545185252677ull}}, {{17754336789921341957ull, 7225769305776277672ull, 7017268007484319010ull, 3510895681481565846ull}}, {{3746176913692125831ull, 18255583669075122899ull, 17994957046210174570ull, 4388619601851957307ull}}, {{35517561843884692ull, 16021425811599339716ull, 8941005144667665154ull, 2742887251157473317ull}}, {{44396952304855865ull, 10803410227644398837ull, 15787942449261969347ull, 3428609063946841646ull}}, {{4667182208808457735ull, 8892576766128110642ull, 10511556024722685876ull, 4285761329933552058ull}}, {{7528674898932673989ull, 14781232515684844959ull, 11181408533879066576ull, 2678600831208470036ull}}, {{4799157605238454582ull, 29796570896504583ull, 13976760667348833221ull, 3348251039010587545ull}}, {{1387260988120680323ull, 4648931732048018633ull, 3635892778903877814ull, 4185313798763234432ull}}, {{12396253163643894962ull, 16740640387812175357ull, 2272432986814923633ull, 2615821124227021520ull}}, {{1660258399272704991ull, 7090742429483055485ull, 2840541233518654542ull, 3269776405283776900ull}}, {{6687009017518269142ull, 18086800073708595164ull, 3550676541898318177ull, 4087220506604721125ull}}, {{13402752672803694022ull, 4386721018426790121ull, 4525015847900142813ull, 2554512816627950703ull}}, {{2918382785722453815ull, 10095087291460875556ull, 1044583791447790612ull, 3193141020784938379ull}}, {{3647978482153067269ull, 12618859114326094445ull, 15140787794591901977ull, 3991426275981172973ull}}, {{4585829560559360995ull, 969257918812727172ull, 11768835380833632688ull, 2494641422488233108ull}}, {{5732286950699201244ull, 1211572398515908965ull, 14711044226042040860ull, 3118301778110291385ull}}, {{11777044706801389459ull, 1514465498144886206ull, 4553747227270387363ull, 3897877222637864232ull}}, {{2748966923323480508ull, 17087442000836411543ull, 2846092017043992101ull, 2436173264148665145ull}}, {{17271266709436514347ull, 7524244445763350716ull, 8169301039732378031ull, 3045216580185831431ull}}, {{3142339313086091318ull, 4793619538776800492ull, 5599940281238084635ull, 3806520725232289289ull}}, {{11187334107533582882ull, 690169202521806355ull, 15029177721842272657ull, 2379075453270180805ull}}, {{9372481615989590698ull, 5474397521579645848ull, 4951414097020677109ull, 2973844316587726007ull}}, {{11715602019986988372ull, 11454682920401945214ull, 1577581602848458482ull, 3717305395734657509ull}}, {{2710565244064479829ull, 11770862843678603663ull, 3291831510993980503ull, 2323315872334160943ull}}, {{17223264610362763498ull, 10101892536170866674ull, 17949847444024639341ull, 2904144840417701178ull}}, {{12305708726098678564ull, 17239051688640971247ull, 13213937268176023368ull, 3630181050522126473ull}}, {{10770449889195960301ull, 3102070537091662443ull, 2682363529937865499ull, 4537726313152658092ull}}, {{4425688171533781237ull, 18079695150178146691ull, 10899849243065941744ull, 2836078945720411307ull}}, {{920424195989838642ull, 4152874864013131748ull, 9013125535405039277ull, 3545098682150514134ull}}, {{1150530244987298302ull, 9802779598443802589ull, 2043034882401523288ull, 4431373352688142668ull}}, {{3024924412330755391ull, 6126737249027376618ull, 10500268838355727863ull, 2769608345430089167ull}}, {{13004527552268220046ull, 3046735542856832868ull, 8513650029517271925ull, 3462010431787611459ull}}, {{16255659440335275058ull, 8420105446998428989ull, 6030376518469202002ull, 4327513039734514324ull}}, {{12465630159423240863ull, 9874251922801406022ull, 12992357360898027059ull, 2704695649834071452ull}}, {{6358665662424275271ull, 7731128885074369624ull, 16240446701122533824ull, 3380869562292589315ull}}, {{7948332078030344089ull, 9663911106342962030ull, 15688872357975779376ull, 4226086952865736644ull}}, {{356021530341577152ull, 6039944441464351269ull, 582173186880086302ull, 2641304345541085403ull}}, {{5056712931354359343ull, 16773302588685214894ull, 14562774538882271589ull, 3301630431926356753ull}}, {{15544263201047724987ull, 7131570180574354905ull, 4368410118320675775ull, 4127038039907945942ull}}, {{2797635473013746261ull, 11374760390500053672ull, 16565314379232586071ull, 2579398774942466213ull}}, {{3497044341267182826ull, 9606764469697679186ull, 6871584918758568877ull, 3224248468678082767ull}}, {{13594677463438754341ull, 16620141605549486886ull, 3977795130020823192ull, 4030310585847603459ull}}, {{3884987396221833559ull, 10387588503468429304ull, 180278947049320543ull, 2518944116154752162ull}}, {{4856234245277291949ull, 8372799610908148726ull, 9448720720666426487ull, 3148680145193440202ull}}, {{15293664843451390744ull, 5854313495207798003ull, 2587528863978257301ull, 3935850181491800253ull}}, {{7252697517943425263ull, 5964788943718567704ull, 3923048549200104765ull, 2459906363432375158ull}}, {{9065871897429281579ull, 12067672198075597534ull, 14127182723354906764ull, 3074882954290468947ull}}, {{2108967834931826165ull, 15084590247594496918ull, 13047292385766245551ull, 3843603692863086184ull}}, {{15153162952114555066ull, 16345397932387642429ull, 8154557741103903469ull, 2402252308039428865ull}}, {{5106395634861030120ull, 6596689360202389325ull, 14804883194807267241ull, 3002815385049286081ull}}, {{10994680562003675554ull, 12857547718680374560ull, 4671045938226920339ull, 3753519231311607602ull}}, {{6871675351252297221ull, 5730124314961540148ull, 7531089729819213116ull, 2345949519569754751ull}}, {{8589594189065371526ull, 7162655393701925185ull, 4802176143846628491ull, 2932436899462193439ull}}, {{15348678754759102312ull, 4341633223700018577ull, 1391034161380897710ull, 3665546124327741799ull}}, {{5350790388166714178ull, 14650413566479799030ull, 15573850757008285849ull, 4581932655409677248ull}}, {{17179302047886360073ull, 2238979451408792537ull, 9733656723130178656ull, 2863707909631048280ull}}, {{7639069504575786379ull, 2798724314260990672ull, 12167070903912723320ull, 3579634887038810350ull}}, {{9548836880719732974ull, 3498405392826238340ull, 5985466593036128342ull, 4474543608798512938ull}}, {{15191395087304608917ull, 16021561425798562674ull, 8352602639074968117ull, 2796589755499070586ull}}, {{9765871822275985338ull, 6191893726966039631ull, 1217381261988934339ull, 3495737194373838233ull}}, {{7595653759417593769ull, 3128181140280161635ull, 6133412595913555828ull, 4369671492967297791ull}}, {{2441440590422302154ull, 11178485249529876830ull, 10750911900087054248ull, 2731044683104561119ull}}, {{12275172774882653500ull, 13973106561912346037ull, 8826953856681429906ull, 3413805853880701399ull}}, {{1508907913321153163ull, 8243011165535656739ull, 6422006302424399479ull, 4267257317350876749ull}}, {{17083968510321578391ull, 12069411006100867317ull, 6319596948228943626ull, 2667035823344297968ull}}, {{7519902582619809276ull, 5863391720771308339ull, 7899496185286179533ull, 3333794779180372460ull}}, {{4788192209847373691ull, 11940925669391523328ull, 9874370231607724416ull, 4167243473975465575ull}}, {{2992620131154608557ull, 7463078543369702080ull, 13089010422395909616ull, 2604527171234665984ull}}, {{3740775163943260697ull, 9328848179212127600ull, 16361263027994887020ull, 3255658964043332480ull}}, {{4675968954929075871ull, 11661060224015159500ull, 2004834711284057159ull, 4069573705054165601ull}}, {{12145852633685448227ull, 14205691667650556543ull, 12782236740621005484ull, 2543483565658853500ull}}, {{10570629773679422380ull, 17757114584563195679ull, 15977795925776256855ull, 3179354457073566875ull}}, {{8601601198671890071ull, 17584707212276606695ull, 15360558888792933165ull, 3974193071341958594ull}}, {{12293529776811013150ull, 13296285016886573136ull, 14212035323922971132ull, 2483870669588724121ull}}, {{15366912221013766438ull, 16620356271108216420ull, 3929986099621550203ull, 3104838336985905152ull}}, {{761896202557656431ull, 16163759320457882622ull, 4912482624526937754ull, 3881047921232381440ull}}, {{14311243181880698982ull, 14714035593713564542ull, 3070301640329336096ull, 2425654950770238400ull}}, {{8665681940496097919ull, 18392544492141955678ull, 3837877050411670120ull, 3032068688462798000ull}}, {{1608730388765346591ull, 4543936541467892982ull, 4797346313014587651ull, 3790085860578497500ull}}, {{14840514548260505331ull, 534117329203739161ull, 12221713482488893090ull, 2368803662861560937ull}}, {{4715585130043467952ull, 9891018698359449760ull, 1442083797828952650ull, 2961004578576951172ull}}, {{5894481412554334940ull, 3140401336094536392ull, 1802604747286190813ull, 3701255723221188965ull}}, {{3684050882846459338ull, 4268593844272779197ull, 3432470976267563210ull, 2313284827013243103ull}}, {{9216749621985462076ull, 14559114342195749804ull, 18125646775616617724ull, 2891606033766553878ull}}, {{11520937027481827595ull, 18198892927744687255ull, 13433686432665996347ull, 3614507542208192348ull}}, {{9789485265924896590ull, 18136930141253471165ull, 16792108040832495434ull, 4518134427760240435ull}}, {{8424271300416754321ull, 15947267356710807382ull, 8189224516306615694ull, 2823834017350150272ull}}, {{1306967088666167093ull, 10710712159033733420ull, 10236530645383269618ull, 3529792521687687840ull}}, {{1633708860832708866ull, 4165018161937390967ull, 12795663306729087023ull, 4412240652109609800ull}}, {{7938597065661524897ull, 9520665378851951210ull, 7997289566705679389ull, 2757650407568506125ull}}, {{699874295222130313ull, 16512517741992326917ull, 14608297976809487140ull, 3447063009460632656ull}}, {{5486528887455050796ull, 2193903103780857030ull, 18260372471011858926ull, 4308828761825790820ull}}, {{17264138609941570459ull, 15206247495145199355ull, 2189360757527636020ull, 2693017976141119263ull}}, {{16968487243999575170ull, 561065295221947578ull, 16571759002191708738ull, 3366272470176399078ull}}, {{11987237018144693155ull, 9924703655882210281ull, 11491326715884860114ull, 4207840587720498848ull}}, {{574494108699351366ull, 10814625803353769330ull, 7182079197428037571ull, 2629900367325311780ull}}, {{9941489672728965015ull, 8906596235764823758ull, 8977598996785046964ull, 3287375459156639725ull}}, {{3203490054056430461ull, 11133245294706029698ull, 15833684764408696609ull, 4109219323945799656ull}}, {{6613867302212656942ull, 40749281550186705ull, 9896052977755435381ull, 2568262077466124785ull}}, {{12879020146193209082ull, 4662622620365121285ull, 16981752240621682130ull, 3210327596832655981ull}}, {{2263717127459347640ull, 15051650312311177415ull, 7392132245494938950ull, 4012909496040819977ull}}, {{8332352232303174131ull, 4795595426767097980ull, 16149297699502806604ull, 2508068435025512485ull}}, {{10415440290378967664ull, 5994494283458872475ull, 6351564069096344543ull, 3135085543781890607ull}}, {{8407614344546321676ull, 2881431835896202690ull, 3327769067943042775ull, 3918856929727363259ull}}, {{9866444983768838951ull, 8718423925076208537ull, 18220756731960259398ull, 2449285581079602036ull}}, {{16944742248138436593ull, 1674657869490484863ull, 4329201841240772632ull, 3061606976349502546ull}}, {{16569241791745657837ull, 2093322336863106079ull, 14634874338405741598ull, 3827008720436878182ull}}, {{17273305147482118005ull, 15143384515821605011ull, 4535110443076200594ull, 2391880450273048864ull}}, {{16979945415925259602ull, 9705858607922230456ull, 5668888053845250743ull, 2989850562841311080ull}}, {{2778187696197022886ull, 7520637241475400167ull, 7086110067306563429ull, 3737313203551638850ull}}, {{8653896337764221160ull, 7006241285135819056ull, 9040504810493990047ull, 2335820752219774281ull}}, {{10817370422205276450ull, 4146115587992385916ull, 15912317031544875463ull, 2919775940274717851ull}}, {{13521713027756595562ull, 570958466563094491ull, 15278710271003706425ull, 3649719925343397314ull}}, {{12290455266268356548ull, 5325384101631256018ull, 9875015801899857223ull, 4562149906679246643ull}}, {{12293220559845110747ull, 10245894091160616867ull, 3866041866973716812ull, 2851343691674529152ull}}, {{10754839681379000529ull, 12807367613950771084ull, 4832552333717146015ull, 3564179614593161440ull}}, {{13443549601723750662ull, 11397523499011075951ull, 6040690417146432519ull, 4455224518241451800ull}}, {{15319747528718426020ull, 14040981214523004325ull, 3775431510716520324ull, 2784515323900907375ull}}, {{5314626355615868813ull, 17551226518153755407ull, 107603369968262501ull, 3480644154876134219ull}}, {{2031596926092448112ull, 8103975092410030547ull, 13969562267742491839ull, 4350805193595167773ull}}, {{17410649143303637734ull, 11982513460397350947ull, 11036819426552751351ull, 2719253245996979858ull}}, {{17151625410702159263ull, 10366455807069300780ull, 4572652246336163381ull, 3399066557496224823ull}}, {{2992787689668147463ull, 17569755777264013880ull, 1104129289492816322ull, 4248833196870281029ull}}, {{1870492306042592165ull, 15592783379217396579ull, 2995923815146704153ull, 2655520748043925643ull}}, {{16173173437835403918ull, 5655921168739582011ull, 17579962824215543904ull, 3319400935054907053ull}}, {{15604780778866866993ull, 7069901460924477514ull, 8139895474987266168ull, 4149251168818633817ull}}, {{14364674005219179775ull, 4418688413077798446ull, 16616649717935511115ull, 2593281980511646135ull}}, {{8732470469669198910ull, 911674497919860154ull, 16159126128992000990ull, 3241602475639557669ull}}, {{1692216050231722830ull, 10362965159254601001ull, 6363849605957837525ull, 4052003094549447087ull}}, {{12586850077463296529ull, 8782696233747819577ull, 10894935031364730309ull, 2532501934093404429ull}}, {{1898504541546956949ull, 15590056310612162376ull, 18230354807633300790ull, 3165627417616755536ull}}, {{2373130676933696186ull, 10264198351410427162ull, 4341199435832074372ull, 3957034272020944421ull}}, {{6094892691510948020ull, 15638496006486292784ull, 5019092656608740434ull, 2473146420013090263ull}}, {{7618615864388685025ull, 10324747971253090172ull, 1662179802333537639ull, 3091433025016362829ull}}, {{9523269830485856282ull, 8294248945638974811ull, 6689410771344309953ull, 3864291281270453536ull}}, {{3646200634839966224ull, 16713120637092829017ull, 4180881732090193720ull, 2415182050794033460ull}}, {{9169436811977345684ull, 2444656722656484655ull, 5226102165112742151ull, 3018977563492541825ull}}, {{6850109996544294201ull, 16890878958602769531ull, 11144313724818315592ull, 3773721954365677281ull}}, {{1975475738626489924ull, 10556799349126730957ull, 47667050370365389ull, 2358576221478548301ull}}, {{7081030691710500309ull, 17807685204835801600ull, 4671269831390344640ull, 2948220276848185376ull}}, {{8851288364638125386ull, 3812862432335200384ull, 5839087289237930801ull, 3685275346060231720ull}}, {{11064110455797656732ull, 9377764058846388384ull, 7298859111547413501ull, 4606594182575289650ull}}, {{6915069034873535458ull, 8166945545992686692ull, 9173472963144521342ull, 2879121364109556031ull}}, {{8643836293591919322ull, 985309895636082557ull, 6855155185503263774ull, 3598901705136945039ull}}, {{15416481385417287056ull, 10455009406399879004ull, 3957257963451691813ull, 4498627131421181299ull}}, {{411928829031028602ull, 8840223888213618330ull, 167443217943613431ull, 2811641957138238312ull}}, {{9738283073143561561ull, 6438593841839635008ull, 209304022429516789ull, 3514552446422797890ull}}, {{12172853841429451951ull, 12659928320726931664ull, 9485002064891671794ull, 4393190558028497362ull}}, {{7608033650893407470ull, 12524141218881720194ull, 10539812308984682775ull, 2745744098767810851ull}}, {{286670026761983529ull, 11043490505174762339ull, 8563079367803465565ull, 3432180123459763564ull}}, {{14193395588734643123ull, 18416049149895840827ull, 10703849209754331956ull, 4290225154324704455ull}}, {{6565029233745458000ull, 2286658681830124709ull, 13607434783737539329ull, 2681390721452940284ull}}, {{12817972560609210404ull, 7470009370715043790ull, 17009293479671924161ull, 3351738401816175355ull}}, {{6799093663906737197ull, 13949197731821192642ull, 16649930831162517297ull, 4189673002270219194ull}}, {{8861119558369098652ull, 1800719554747163545ull, 15017892787903961215ull, 2618545626418886996ull}}, {{15688085466388761219ull, 16085957498716118143ull, 325621911170399902ull, 3273182033023608746ull}}, {{14998420814558563620ull, 10884074836540371871ull, 9630399425817775686ull, 4091477541279510932ull}}, {{16291542036740184118ull, 2190860754410344515ull, 15242371677990885612ull, 2557173463299694332ull}}, {{15752741527497842244ull, 2738575943012930644ull, 606220523779055399ull, 3196466829124617916ull}}, {{1244182835662751189ull, 17258277984048327018ull, 757775654723819248ull, 3995583536405772395ull}}, {{5389300290716607397ull, 10786423740030204386ull, 16614510848698244694ull, 2497239710253607746ull}}, {{15959997400250535054ull, 4259657638182979674ull, 11544766524018030060ull, 3121549637817009683ull}}, {{10726624713458393010ull, 5324572047728724593ull, 9819272136595149671ull, 3901937047271262104ull}}, {{18233355491979965391ull, 10245386557471534726ull, 6137045085371968544ull, 2438710654544538815ull}}, {{13568322328120180931ull, 12806733196839418408ull, 3059620338287572776ull, 3048388318180673519ull}}, {{16960402910150226164ull, 16008416496049273010ull, 17659583478141629682ull, 3810485397725841898ull}}, {{15211937837271279256ull, 14616946328458183535ull, 15648925692265906455ull, 2381553373578651186ull}}, {{14403236278161711166ull, 13659496892145341515ull, 10337785078477607261ull, 2976941716973313983ull}}, {{13392359329274751054ull, 3239313059899513182ull, 8310545329669621173ull, 3721177146216642479ull}}, {{3758538562369331505ull, 4330413671650889691ull, 12111619858684595089ull, 2325735716385401549ull}}, {{86487184534276477ull, 10024703107991000018ull, 1304466768073580149ull, 2907169645481751937ull}}, {{9331481017522621404ull, 17142564903416137926ull, 6242269478519363090ull, 3633962056852189921ull}}, {{2440979235048500947ull, 12204834092415396600ull, 12414522866576591767ull, 4542452571065237401ull}}, {{1525612021905313092ull, 14545550335400704731ull, 841547763969287998ull, 2839032856915773376ull}}, {{15742073082663805077ull, 8958565882396105105ull, 1051934704961609998ull, 3548791071144716720ull}}, {{5842533298047592634ull, 1974835316140355574ull, 1314918381202012498ull, 4435988838930895900ull}}, {{17486641366561909109ull, 5845958091015110137ull, 10045196025106033619ull, 2772493024331809937ull}}, {{8023243652920222674ull, 2695761595341499768ull, 17168181049809929928ull, 3465616280414762421ull}}, {{10029054566150278342ull, 3369701994176874710ull, 7625168256980248698ull, 4332020350518453027ull}}, {{1656473085416536060ull, 6717749764787934598ull, 2459887151398961484ull, 2707512719074033142ull}}, {{11293963393625445883ull, 8397187205984918247ull, 12298230976103477663ull, 3384390898842541427ull}}, {{9505768223604419449ull, 5884797989053759905ull, 10761102701701959175ull, 4230488623553176784ull}}, {{17470320185821231916ull, 10595527770799681796ull, 6725689188563724484ull, 2644055389720735490ull}}, {{3391156158566988279ull, 13244409713499602246ull, 17630483522559431413ull, 3305069237150919362ull}}, {{13462317235063511156ull, 2720454086592339095ull, 12814732366344513459ull, 4131336546438649203ull}}, {{15331477299555776329ull, 17841184868616069598ull, 5703364719751626959ull, 2582085341524155752ull}}, {{9940974587589944603ull, 17689795067342699094ull, 7129205899689533699ull, 3227606676905194690ull}}, {{3202846197632654946ull, 17500557815750985964ull, 18134879411466692932ull, 4034508346131493362ull}}, {{11225150910375185149ull, 1714476597989590419ull, 15945985650594070987ull, 2521567716332183351ull}}, {{9419752619541593532ull, 15978153802769151736ull, 15320796044815200829ull, 3151959645415229189ull}}, {{11774690774426991915ull, 6137634198179275958ull, 5315937000736837325ull, 3939949556769036487ull}}, {{2747495715589482043ull, 6141864383075741426ull, 10239989653101605184ull, 2462468472980647804ull}}, {{12657741681341628362ull, 7677330478844676782ull, 12799987066377006480ull, 3078085591225809755ull}}, {{6598805064822259644ull, 9596663098555845978ull, 11388297814543870196ull, 3847606989032262194ull}}, {{8735939183941300182ull, 15221286473452179544ull, 11729372152517306776ull, 2404754368145163871ull}}, {{10919923979926625227ull, 579864018105672814ull, 10050029172219245567ull, 3005942960181454839ull}}, {{4426532938053505726ull, 14559888077914254730ull, 7950850446846669054ull, 3757428700226818549ull}}, {{7378269104710828983ull, 4488244030269021302ull, 7275124538492862111ull, 2348392937641761593ull}}, {{18446208417743312037ull, 998619019408888723ull, 13705591691543465543ull, 2935491172052201991ull}}, {{18446074503751752142ull, 15083331829543274616ull, 12520303596001944024ull, 3669363965065252489ull}}, {{4610849055980138561ull, 407420713219541655ull, 1815321439720266319ull, 4586704956331565612ull}}, {{9799309687628668457ull, 7172166973403295390ull, 10357947936679942257ull, 2866690597707228507ull}}, {{3025765072681059763ull, 13576894735181507142ull, 8335748902422539917ull, 3583363247134035634ull}}, {{13005578377706100511ull, 3136060363694720215ull, 1196314091173399089ull, 4479204058917544543ull}}, {{15046015513707394676ull, 13489252773377669894ull, 7665225334624456286ull, 2799502536823465339ull}}, {{9584147355279467537ull, 7638193929867311560ull, 4969845649853182454ull, 3499378171029331674ull}}, {{11980184194099334421ull, 324370375479363642ull, 15435679099171253876ull, 4374222713786664592ull}}, {{12099301139739471917ull, 9426103521529378084ull, 9647299436982033672ull, 2733889196116665370ull}}, {{15124126424674339896ull, 11782629401911722605ull, 2835752259372766282ull, 3417361495145831713ull}}, {{5070099975560761158ull, 5504914715534877449ull, 8156376342643345757ull, 4271701868932289641ull}}, {{14698027530793945484ull, 5746414706422992357ull, 16626950260220560858ull, 2669813668082681025ull}}, {{4537476358210268143ull, 16406390419883516255ull, 6948629769993537360ull, 3337267085103351282ull}}, {{1060159429335447274ull, 2061243951144843703ull, 17909159249346697509ull, 4171583856379189102ull}}, {{7580128670975736403ull, 3594120478679221266ull, 6581538512414298039ull, 2607239910236993189ull}}, {{251788801864894695ull, 18327708653631190295ull, 12838609158945260452ull, 3259049887796241486ull}}, {{14149794057613282081ull, 4462891743329436252ull, 6824889411826799758ull, 4073812359745301858ull}}, {{18066993322863077109ull, 16624365394863061369ull, 8877241900819137752ull, 2546132724840813661ull}}, {{8748683598296682674ull, 2333712669869275096ull, 15708238394451310095ull, 3182665906051017076ull}}, {{10935854497870853342ull, 16752198892618757582ull, 1188553919354586002ull, 3978332382563771346ull}}, {{2223223042741895435ull, 15081810326314111393ull, 5354532218024004155ull, 2486457739102357091ull}}, {{7390714821854757198ull, 14240576889465251337ull, 2081479254102617290ull, 3108072173877946364ull}}, {{13850079545745834401ull, 8577349074976788363ull, 2601849067628271613ull, 3885090217347432955ull}}, {{6350456706877452549ull, 7666686181074186679ull, 17767056731763527422ull, 2428181385842145596ull}}, {{3326384865169427782ull, 359985689487957541ull, 3762076840994857662ull, 3035226732302681996ull}}, {{8769667099889172631ull, 9673354148714722734ull, 4702596051243572077ull, 3794033415378352495ull}}, {{869355919003344991ull, 8351689352160395661ull, 9856651559668314404ull, 2371270884611470309ull}}, {{5698380917181569142ull, 10439611690200494576ull, 16932500468012780909ull, 2964088605764337886ull}}, {{7122976146476961428ull, 17661200631178006124ull, 11942253548161200328ull, 3705110757205422358ull}}, {{13675232128402876700ull, 11038250394486253827ull, 2852222449173362301ull, 2315694223253388974ull}}, {{12482354142076207971ull, 18409499011535205188ull, 12788650098321478684ull, 2894617779066736217ull}}, {{15602942677595259964ull, 4565129690709454869ull, 2150754567619684644ull, 3618272223833420272ull}}, {{5668620291711911243ull, 5706412113386818587ull, 2688443209524605805ull, 4522840279791775340ull}}, {{1237044673106250575ull, 5872350580080455569ull, 10903649042807654436ull, 2826775174869859587ull}}, {{6157991859810201123ull, 7340438225100569461ull, 9017875285082180141ull, 3533468968587324484ull}}, {{12309175843190139307ull, 13787233799803099730ull, 11272344106352725176ull, 4416836210734155605ull}}, {{12304920920421224971ull, 8617021124876937331ull, 9351058075684147187ull, 2760522631708847253ull}}, {{10769465132099143310ull, 6159590387668783760ull, 16300508613032571888ull, 3450653289636059066ull}}, {{13461831415123929137ull, 7699487984585979700ull, 11152263729435939052ull, 4313316612045073833ull}}, {{17637016671307231519ull, 14035552027221013120ull, 52635803256380051ull, 2695822882528171146ull}}, {{3599526765424487783ull, 12932754015598878497ull, 9289166790925250872ull, 3369778603160213932ull}}, {{9111094475207997632ull, 16165942519498598121ull, 11611458488656563590ull, 4212223253950267415ull}}, {{17223649093073468280ull, 5492028056259235921ull, 14174690583051434100ull, 2632639533718917134ull}}, {{7694503311059671638ull, 6865035070324044902ull, 8494991191959516817ull, 3290799417148646418ull}}, {{394757101969813740ull, 13192979856332444032ull, 1395366953094620213ull, 4113499271435808023ull}}, {{246723188731133588ull, 10551455419421471472ull, 7789633373325219489ull, 2570937044647380014ull}}, {{308403985913916984ull, 17801005292704227244ull, 513669679801748553ull, 3213671305809225018ull}}, {{385504982392396230ull, 8416198560598120343ull, 9865459136606961500ull, 4017089132261531272ull}}, {{7158469641636329500ull, 14483496137228601022ull, 6165911960379350937ull, 2510680707663457045ull}}, {{18171459088900187683ull, 4269312116253587565ull, 12319075968901576576ull, 3138350884579321306ull}}, {{8879265805843070892ull, 5336640145316984457ull, 6175472924272194912ull, 3922938605724151633ull}}, {{17078756174720389067ull, 3335400090823115285ull, 15388885623738591580ull, 2451836628577594770ull}}, {{7513387163118322622ull, 4169250113528894107ull, 10012734992818463667ull, 3064795785721993463ull}}, {{4780047935470515374ull, 599876623483729730ull, 7904232722595691680ull, 3830994732152491829ull}}, {{7599215978096460013ull, 374922889677331081ull, 7245988460836001252ull, 2394371707595307393ull}}, {{14110705991047962920ull, 468653612096663851ull, 13669171594472389469ull, 2992964634494134241ull}}, {{13026696470382565746ull, 5197503033548217718ull, 3251406437808323124ull, 3741205793117667802ull}}, {{3529999275561715687ull, 12471811432822411882ull, 6643815042057589856ull, 2338253620698542376ull}}, {{13635871131306920417ull, 15589764291028014852ull, 8304768802571987320ull, 2922817025873177970ull}}, {{17044838914133650521ull, 1040461290075466949ull, 1157588966360208343ull, 3653521282341472463ull}}, {{7470990587384899439ull, 15135634667876497399ull, 15282044263232424140ull, 4566901602926840578ull}}, {{11586898144756644006ull, 236399630568035066ull, 14162963682947652992ull, 2854313501829275361ull}}, {{5260250644091029199ull, 295499538210043833ull, 3868646548402402528ull, 3567891877286594202ull}}, {{11186999323541174402ull, 369374422762554791ull, 14059180222357778968ull, 4459864846608242752ull}}, {{13909403604854315858ull, 230859014226596744ull, 8786987638973611855ull, 2787415529130151720ull}}, {{17386754506067894822ull, 14123631823065409642ull, 10983734548717014818ull, 3484269411412689650ull}}, {{12510071095730092719ull, 8431167741976986245ull, 4506296149041492715ull, 4355336764265862063ull}}, {{10124637444045001902ull, 2963636829521922451ull, 9733964120792014803ull, 2722085477666163789ull}}, {{8044110786628864473ull, 17539604092184566776ull, 16779141169417406407ull, 3402606847082704736ull}}, {{10055138483286080591ull, 17312819096803320566ull, 2527182388062206393ull, 4253258558853380921ull}}, {{1672775533626412466ull, 3902982907860993498ull, 13108704038607348756ull, 2658286599283363075ull}}, {{11314341453887791390ull, 4878728634826241872ull, 11774194029831798041ull, 3322858249104203844ull}}, {{14142926817359739237ull, 10710096811960190244ull, 14717742537289747551ull, 4153572811380254805ull}}, {{18062701297704612832ull, 13611339535116200758ull, 11504432095019786171ull, 2595983007112659253ull}}, {{13355004585275990231ull, 12402488400467863044ull, 545482063492569002ull, 3244978758890824067ull}}, {{16693755731594987789ull, 6279738463730052997ull, 14516910634647874965ull, 4056223448613530083ull}}, {{12739440341460561320ull, 6230679549044977075ull, 6767226137441227901ull, 2535139655383456302ull}}, {{11312614408398313746ull, 12400035454733609248ull, 17682404708656310684ull, 3168924569229320377ull}}, {{14140768010497892183ull, 15500044318417011560ull, 8267947830538224643ull, 3961155711536650472ull}}, {{8837980006561182614ull, 7381684689796938273ull, 5167467394086390402ull, 2475722319710406545ull}}, {{15659161026628866172ull, 3733825391397033ull, 11071020261035375907ull, 3094652899638008181ull}}, {{5738893228003919003ull, 13839725337021410004ull, 3717271012056171ull, 3868316124547510227ull}}, {{12810180304357225185ull, 6343985326424687300ull, 16143224358878392771ull, 2417697577842193891ull}}, {{16012725380446531481ull, 3318295639603471221ull, 15567344430170603060ull, 3022121972302742364ull}}, {{6180848670276000639ull, 4147869549504339027ull, 1012436464003702209ull, 3777652465378427956ull}}, {{1557187409708806448ull, 14121633514508681652ull, 9856144826857089688ull, 2361032790861517472ull}}, {{1946484262136008059ull, 17652041893135852065ull, 12320181033571362110ull, 2951290988576896840ull}}, {{7044791346097397978ull, 12841680329565039273ull, 15400226291964202638ull, 3689113735721121050ull}}, {{13417675201049135377ull, 6828728375101523283ull, 10026910828100477490ull, 4611392169651401313ull}}, {{6080203991442015659ull, 8879641252865839956ull, 17796034313631268191ull, 2882120106032125820ull}}, {{7600254989302519573ull, 6487865547654912041ull, 3798298818329533623ull, 3602650132540157276ull}}, {{14112004755055537370ull, 3498145916141252147ull, 4747873522911917029ull, 4503312665675196595ull}}, {{6514159962696016905ull, 4492184206801976544ull, 661577942606254191ull, 2814570416046997872ull}}, {{8142699953370021131ull, 1003544240075082776ull, 826972428257817739ull, 3518213020058747340ull}}, {{10178374941712526413ull, 15089488355376017182ull, 1033715535322272173ull, 4397766275073434175ull}}, {{1749798320142941104ull, 11736773231323704691ull, 7563601237217501964ull, 2748603921920896359ull}}, {{16022305955460840092ull, 14670966539154630863ull, 4842815528094489551ull, 3435754902401120449ull}}, {{15416196425898662211ull, 13727022155515900675ull, 10665205428545499843ull, 4294693628001400561ull}}, {{7329279756972969930ull, 6273545837983743970ull, 18194968438909407162ull, 2684183517500875350ull}}, {{18384971733070988221ull, 17065304334334455770ull, 13520338511781983144ull, 3355229396876094188ull}}, {{13757842629483959468ull, 2884886344208518097ull, 16900423139727478931ull, 4194036746095117735ull}}, {{1681122615786392812ull, 17943955029626181475ull, 17480293489970756187ull, 2621272966309448584ull}}, {{15936461325015154726ull, 17818257768605338939ull, 3403622788753893618ull, 3276591207886810731ull}}, {{15308890637841555504ull, 13049450173901897866ull, 18089586541224530735ull, 4095739009858513413ull}}, {{14179742667078360094ull, 15073435386329768022ull, 13611834597479025661ull, 2559836881161570883ull}}, {{8501306296993174309ull, 5006736177630046316ull, 12403107228421394173ull, 3199796101451963604ull}}, {{10626632871241467887ull, 10870106240464945799ull, 15503884035526742716ull, 3999745126814954505ull}}, {{13559174572166999285ull, 16017188437145366932ull, 2772398494563132341ull, 2499840704259346566ull}}, {{16948968215208749107ull, 6186427491149544953ull, 12688870155058691235ull, 3124800880324183207ull}}, {{7351152213728772671ull, 3121348345509543288ull, 11249401675395976140ull, 3906001100405229009ull}}, {{4594470133580482920ull, 11174214752798240363ull, 113347019481403231ull, 2441250687753268131ull}}, {{1131401648548215745ull, 9356082422570412550ull, 13976741829633917751ull, 3051563359691585163ull}}, {{10637624097540045490ull, 7083417009785627783ull, 12859241268615009285ull, 3814454199614481454ull}}, {{13566044088603610287ull, 6732978640329711316ull, 3425339774456992899ull, 2384033874759050909ull}}, {{16957555110754512859ull, 3804537281984751241ull, 8893360736498629028ull, 2980042343448813636ull}}, {{7361885833160977361ull, 4755671602480939052ull, 11116700920623286285ull, 3725052929311017045ull}}, {{13824550682580386659ull, 5278137760764280859ull, 9253781084603247880ull, 2328158080819385653ull}}, {{12669002334798095420ull, 6597672200955351074ull, 16178912374181447754ull, 2910197601024232066ull}}, {{6612880881642843467ull, 17470462288048964651ull, 11000268430872033884ull, 3637747001280290083ull}}, {{3654415083626166429ull, 3391333786351654198ull, 9138649520162654452ull, 4547183751600362604ull}}, {{16119067482548517730ull, 11342955653324559681ull, 14935027986956434840ull, 2841989844750226627ull}}, {{6313776297903483451ull, 14178694566655699602ull, 14057098965268155646ull, 3552487305937783284ull}}, {{17115592409234130121ull, 8499996171464848694ull, 17571373706585194558ull, 4440609132422229105ull}}, {{6085559237343943422ull, 700811588738142530ull, 4064579538974664743ull, 2775380707763893191ull}}, {{16830321083534705085ull, 14711072541204841874ull, 469038405290943024ull, 3469225884704866489ull}}, {{11814529317563605549ull, 18388840676506052343ull, 5197984025041066684ull, 4336532355881083111ull}}, {{14301609851118335324ull, 2269653385961506906ull, 10166269043291748534ull, 2710332722425676944ull}}, {{8653640277043143347ull, 12060438769306659441ull, 12707836304114685667ull, 3387915903032096180ull}}, {{15428736364731317088ull, 10463862443205936397ull, 15884795380143357084ull, 4234894878790120225ull}}, {{11948803237170767132ull, 15763286063858486056ull, 3010468084948516321ull, 2646809299243825141ull}}, {{14936004046463458915ull, 5869049524540943858ull, 8374771124613033306ull, 3308511624054781426ull}}, {{9446633021224547835ull, 16559683942530955631ull, 1245091868911515824ull, 4135639530068476783ull}}, {{12821674665906424253ull, 10349802464081847269ull, 7695711445710779246ull, 2584774706292797989ull}}, {{2192035277100866605ull, 3713881043247533279ull, 14231325325565861962ull, 3230968382865997486ull}}, {{16575102151658246968ull, 13865723340914192406ull, 8565784620102551644ull, 4038710478582496858ull}}, {{5747752826359016451ull, 17889449124926146062ull, 9965301405991482681ull, 2524194049114060536ull}}, {{16408063069803546371ull, 8526753350875518865ull, 12456626757489353352ull, 3155242561392575670ull}}, {{6675020781972269252ull, 10658441688594398582ull, 6347411410006915882ull, 3944053201740719588ull}}, {{18006946044014831995ull, 11273212073798887017ull, 13190504168109098234ull, 2465033251087949742ull}}, {{8673624499736376281ull, 4868143055393832964ull, 7264758173281596985ull, 3081291563859937178ull}}, {{10842030624670470352ull, 10696864837669679109ull, 18304319753456772039ull, 3851614454824921472ull}}, {{9082112149632737922ull, 13603069551184631299ull, 11440199845910482524ull, 2407259034265575920ull}}, {{6740954168613534498ull, 17003836938980789124ull, 14300249807388103155ull, 3009073792831969900ull}}, {{8426192710766918123ull, 16643110155298598501ull, 17875312259235128944ull, 3761342241039962375ull}}, {{7572213453443017779ull, 10401943847061624063ull, 18089599189663037446ull, 2350838900649976484ull}}, {{4853580798376384320ull, 3779057771972254271ull, 4165254913369245192ull, 2938548625812470606ull}}, {{1455289979543092495ull, 4723822214965317839ull, 14429940678566332298ull, 3673185782265588257ull}}, {{15654170529711029331ull, 15128149805561423106ull, 4202367792925751660ull, 4591482227831985322ull}}, {{14395542599496781236ull, 231721591621113633ull, 7238165889005982692ull, 2869676392394990826ull}}, {{4159370194088812833ull, 289651989526392042ull, 18271079398112254173ull, 3587095490493738532ull}}, {{14422584779465791849ull, 4973751005335377956ull, 4392105173930766100ull, 4483869363117173166ull}}, {{18237487524020895714ull, 12331966415189387030ull, 16580123788988892524ull, 2802418351948233228ull}}, {{13573487368171343834ull, 15414958018986733788ull, 2278410662526564039ull, 3503022939935291536ull}}, {{16966859210214179793ull, 14657011505306029331ull, 2848013328158205049ull, 4378778674919114420ull}}, {{8298443997170168419ull, 2243103163175186476ull, 11003380366953653964ull, 2736736671824446512ull}}, {{10373054996462710523ull, 2803878953968983095ull, 13754225458692067455ull, 3420920839780558140ull}}, {{8354632727151000250ull, 17339906747743392581ull, 17192781823365084318ull, 4276151049725697675ull}}, {{7527488463683069108ull, 6225755698912232459ull, 8439645630389483747ull, 2672594406078561047ull}}, {{4797674561176448481ull, 3170508605212902670ull, 5937871019559466780ull, 3340743007598201309ull}}, {{15220465238325336409ull, 3963135756516128337ull, 12034024792876721379ull, 4175928759497751636ull}}, {{2595261746312253400ull, 171116838608886259ull, 16744637532402726670ull, 2609955474686094772ull}}, {{17079135238172480462ull, 9437268085115883631ull, 2484052841793856721ull, 3262444343357618466ull}}, {{16737233029288212673ull, 16408271124822242443ull, 12328438089097096709ull, 4078055429197023082ull}}, {{8154927634091438969ull, 12561012462227595479ull, 12316959824113073347ull, 2548784643248139426ull}}, {{5581973524186910807ull, 11089579559357106445ull, 6172827743286565876ull, 3185980804060174283ull}}, {{11589152923661026413ull, 13861974449196383056ull, 3104348660680819441ull, 3982476005075217854ull}}, {{7243220577288141508ull, 1746205003106657554ull, 15775275968207675863ull, 2489047503172011158ull}}, {{18277397758464952693ull, 16017814309165485654ull, 10495722923404819020ull, 3111309378965013948ull}}, {{13623375161226415058ull, 1575523812747305452ull, 13119653654256023776ull, 3889136723706267435ull}}, {{17737981512621285220ull, 984702382967065907ull, 5893940524696320908ull, 2430710452316417147ull}}, {{17560790872349218620ull, 1230877978708832384ull, 2755739637443013231ull, 3038388065395521434ull}}, {{3504244516726971659ull, 15373655528668204193ull, 12668046583658542346ull, 3797985081744401792ull}}, {{13719367869022827047ull, 14220220723845015524ull, 7917529114786588966ull, 2373740676090251120ull}}, {{17149209836278533809ull, 8551903867951493597ull, 9896911393483236208ull, 2967175845112813900ull}}, {{7601454240066003549ull, 10689879834939366997ull, 12371139241854045260ull, 3708969806391017375ull}}, {{7056751909254946170ull, 15904546933691880181ull, 14649491053799860143ull, 2318106128994385859ull}}, {{13432625904996070617ull, 15268997648687462322ull, 13700177798822437275ull, 2897632661242982324ull}}, {{7567410344390312463ull, 14474561042431939999ull, 17125222248528046594ull, 3622040826553727905ull}}, {{4847576912060502675ull, 8869829266185149191ull, 7571469755377894531ull, 4527551033192159882ull}}, {{9947264597678896028ull, 3237800282152024292ull, 9343854615538571986ull, 2829719395745099926ull}}, {{12434080747098620035ull, 13270622389544806173ull, 2456446232568439174ull, 3537149244681374908ull}}, {{1707542878591111331ull, 7364905950076231909ull, 3070557790710548968ull, 4421436555851718635ull}}, {{3373057308333138534ull, 4603066218797644943ull, 18059999683689950769ull, 2763397847407324146ull}}, {{18051379690698586880ull, 10365518791924444082ull, 13351627567757662653ull, 3454247309259155183ull}}, {{13340852576518457791ull, 17568584508332943007ull, 12077848441269690412ull, 4317809136573943979ull}}, {{15255561887965117976ull, 1756993280853313571ull, 5242812266579862556ull, 2698630710358714987ull}}, {{14457766341529009566ull, 2196241601066641964ull, 1941829314797440291ull, 3373288387948393734ull}}, {{18072207926911261957ull, 16580360056615466167ull, 11650658680351576171ull, 4216610484935492167ull}}, {{18212658981960620579ull, 8056882026170972402ull, 14199190702860816963ull, 2635381553084682604ull}}, {{13542451690595999916ull, 5459416514286327599ull, 17748988378576021204ull, 3294226941355853255ull}}, {{12316378594817611991ull, 6824270642857909499ull, 17574549454792638601ull, 4117783676694816569ull}}, {{5391893612547313542ull, 15794384197854663197ull, 4066564381604317269ull, 2573614797934260356ull}}, {{11351553034111529832ull, 5907922192036165284ull, 5083205477005396587ull, 3217018497417825445ull}}, {{14189441292639412290ull, 2773216721617818701ull, 10965692864684133638ull, 4021273121772281806ull}}, {{11174243817113326633ull, 15568318506293300400ull, 2241872022000195619ull, 2513295701107676129ull}}, {{13967804771391658291ull, 14848712114439237596ull, 7414026045927632428ull, 3141619626384595161ull}}, {{17459755964239572864ull, 114146069339495379ull, 13879218575836928440ull, 3927024532980743951ull}}, {{8606504468436039088ull, 71341293337184612ull, 15592040637539162131ull, 2454390333112964969ull}}, {{10758130585545048860ull, 13924234671953644477ull, 5654992741641788951ull, 3067987916391206212ull}}, {{18059349250358698979ull, 12793607321514667692ull, 7068740927052236189ull, 3834984895489007765ull}}, {{2063721244619411054ull, 10301847585160361260ull, 6723806088621341570ull, 2396865559680629853ull}}, {{2579651555774263818ull, 3653937444595675767ull, 13016443629204064867ull, 2996081949600787316ull}}, {{17059622499999993484ull, 18402479861026758420ull, 16270554536505081083ull, 3745102437000984145ull}}, {{1438892025645220120ull, 9195706903928030061ull, 3251567557674593821ull, 2340689023125615091ull}}, {{6410301050483913053ull, 16106319648337425480ull, 17899517502375405988ull, 2925861278907018863ull}}, {{8012876313104891317ull, 1686155486712230234ull, 17762710859541869582ull, 3657326598633773579ull}}, {{792723354526338338ull, 11331066395245063601ull, 17591702555999949073ull, 4571658248292216974ull}}, {{12024667142647431221ull, 164387469387082894ull, 6383128079072580267ull, 2857286405182635609ull}}, {{5807461891454513218ull, 14040542392016017330ull, 12590596117268113237ull, 3571608006478294511ull}}, {{16482699401172917331ull, 3715619934737857950ull, 11126559128157753643ull, 4464510008097868139ull}}, {{5690001107305685428ull, 16419449997467267ull, 4648256445884902075ull, 2790318755061167587ull}}, {{2500815365704718881ull, 13855582367778997796ull, 1198634538928739689ull, 3487898443826459484ull}}, {{3126019207130898601ull, 3484419904441583533ull, 1498293173660924612ull, 4359873054783074355ull}}, {{4259605013670505578ull, 11401134477130765516ull, 17077334298033935546ull, 2724920659239421471ull}}, {{5324506267088131972ull, 5028046059558681087ull, 16734981854115031529ull, 3406150824049276839ull}}, {{2043946815432777061ull, 10896743592875739263ull, 16307041299216401507ull, 4257688530061596049ull}}, {{8194995787286567519ull, 4504621736333643087ull, 3274371784369169086ull, 2661055331288497531ull}}, {{5632058715680821495ull, 14854149207271829667ull, 17928022785743625069ull, 3326319164110621913ull}}, {{2428387376173638965ull, 4732628453807623372ull, 8574970426897367625ull, 4157898955138277392ull}}, {{10741114146963300161ull, 14487107829698234367ull, 5359356516810854765ull, 2598686846961423370ull}}, {{8814706665276737297ull, 4273826731840629247ull, 15922567682868344265ull, 3248358558701779212ull}}, {{6406697313168533717ull, 9953969433228174463ull, 1456465529875878715ull, 4060448198377224016ull}}, {{10921714848371415430ull, 3915387886553915087ull, 910290956172424197ull, 2537780123985765010ull}}, {{9040457542036881383ull, 9505920876619781763ull, 10361235732070306054ull, 3172225154982206262ull}}, {{6688885909118713824ull, 2659029058919951396ull, 3728172628233106760ull, 3965281443727757828ull}}, {{13403925730053971948ull, 1661893161824969622ull, 11553479929500467533ull, 2478300902329848642ull}}, {{7531535125712689127ull, 6689052470708599932ull, 5218477875020808608ull, 3097876127912310803ull}}, {{9414418907140861409ull, 8361315588385749915ull, 1911411325348622856ull, 3872345159890388504ull}}, {{3578168807749344429ull, 5225822242741093697ull, 1194632078342889285ull, 2420215724931492815ull}}, {{9084397028114068440ull, 11143963821853755025ull, 15328348153210775318ull, 3025269656164366018ull}}, {{15967182303569973454ull, 4706582740462417973ull, 9937063154658693340ull, 3781587070205457523ull}}, {{12285331948944927361ull, 12164986249643787041ull, 3904821462447989385ull, 2363491918878410952ull}}, {{1521606880898995489ull, 1371174756772570090ull, 4881026828059986732ull, 2954364898598013690ull}}, {{11125380637978520169ull, 1713968445965712612ull, 15324655571929759223ull, 3692956123247517112ull}}, {{16176734935591350914ull, 7988759306369652238ull, 9577909732456099514ull, 2308097577029698195ull}}, {{10997546632634412834ull, 762577096107289490ull, 7360701147142736489ull, 2885121971287122744ull}}, {{4523561253938240235ull, 5564907388561499767ull, 9200876433928420611ull, 3606402464108903430ull}}, {{1042765548995412389ull, 2344448217274486805ull, 2277723505555749956ull, 4508003080136129288ull}}, {{2957571477335826695ull, 10688652172651330061ull, 1423577190972343722ull, 2817501925085080805ull}}, {{8308650365097171273ull, 4137443178959386768ull, 6391157507142817557ull, 3521877406356351006ull}}, {{10385812956371464091ull, 9783489992126621364ull, 17212318920783297754ull, 4402346757945438757ull}}, {{15714505134586940865ull, 10726367263506526256ull, 13063542334703255048ull, 2751466723715899223ull}}, {{1196387344524124465ull, 13407959079383157821ull, 11717741899951680906ull, 3439333404644874029ull}}, {{6107170199082543486ull, 7536576812374171468ull, 812119319657437421ull, 4299166755806092537ull}}, {{13040353411281365487ull, 7016203516947551119ull, 12036789620854368148ull, 2686979222378807835ull}}, {{11688755745674318954ull, 8770254396184438899ull, 10434301007640572281ull, 3358724027973509794ull}}, {{9999258663665510789ull, 15574504013657936528ull, 3819504222695939543ull, 4198405034966887243ull}}, {{6249536664790944243ull, 16651594036177292186ull, 81347129971268262ull, 2624003146854304527ull}}, {{17035292867843456112ull, 11591120508366839424ull, 13936741967746249040ull, 3280003933567880658ull}}, {{2847372011094768524ull, 14488900635458549281ull, 8197555422828035492ull, 4100004916959850823ull}}, {{13308822553002700087ull, 18278934934016369108ull, 12041001166908604038ull, 2562503073099906764ull}}, {{16636028191253375109ull, 13625296630665685577ull, 15051251458635755048ull, 3203128841374883455ull}}, {{6959977183784555174ull, 17031620788332106972ull, 14202378304867305906ull, 4003911051718604319ull}}, {{13573357776720122792ull, 15256449011134954761ull, 15794015468183148047ull, 2502444407324127699ull}}, {{3131639165617989778ull, 14458875245491305548ull, 15130833316801547155ull, 3128055509155159624ull}}, {{3914548957022487222ull, 13461908038436744031ull, 466797572292382328ull, 3910069386443949531ull}}, {{9364122125780136370ull, 8413692524022965019ull, 16432649547178596619ull, 2443793366527468456ull}}, {{7093466638797782559ull, 5905429636601318370ull, 2094067860263694158ull, 3054741708159335571ull}}, {{18090205335352004006ull, 16605159082606423770ull, 16452642880611781409ull, 3818427135199169463ull}}, {{15918064353022390408ull, 3460695398987933000ull, 17200430828023445237ull, 2386516959499480914ull}}, {{1450836367568436394ull, 8937555267162304155ull, 12277166498174530738ull, 2983146199374351143ull}}, {{15648603514742709204ull, 1948572047098104385ull, 10734772104290775519ull, 3728932749217938929ull}}, {{2862848169073111397ull, 8135386557077397097ull, 18238447611250204459ull, 2330582968261211830ull}}, {{8190246229768777150ull, 5557547177919358467ull, 13574687477207979766ull, 2913228710326514788ull}}, {{5626121768783583533ull, 16170306009253973892ull, 16968359346509974707ull, 3641535887908143485ull}}, {{7032652210979479417ull, 15601196493140079461ull, 7375391127855304672ull, 4551919859885179357ull}}, {{6701250641075868588ull, 9750747808212549663ull, 6915462464123259372ull, 2844949912428237098ull}}, {{3764877282917447830ull, 12188434760265687079ull, 17867700117008850023ull, 3556187390535296372ull}}, {{94410585219421884ull, 10623857431904720945ull, 3887881072551510913ull, 4445234238169120466ull}}, {{11588221661830608438ull, 18169125941008920350ull, 7041611688772082224ull, 2778271398855700291ull}}, {{5261905040433484739ull, 4264663352551598822ull, 4190328592537714877ull, 3472839248569625364ull}}, {{15800753337396631731ull, 9942515209116886431ull, 5237910740672143596ull, 4341049060712031705ull}}, {{16792999863513976688ull, 15437444042552829827ull, 14802909258988559507ull, 2713155662945019815ull}}, {{16379563810965082956ull, 14685119034763649380ull, 13891950555308311480ull, 3391444578681274769ull}}, {{2027710689996802079ull, 18356398793454561726ull, 3529880138853225638ull, 4239305723351593462ull}}, {{15102377236530165012ull, 6861063227481713174ull, 16041233142065429736ull, 2649566077094745913ull}}, {{9654599508807930456ull, 8576329034352141468ull, 6216483372299623458ull, 3311957596368432392ull}}, {{12068249386009913070ull, 1497039256085401027ull, 7770604215374529323ull, 4139946995460540490ull}}, {{5236812857042501717ull, 17076550599549233306ull, 9468313653036468730ull, 2587466872162837806ull}}, {{15769388108157902954ull, 12122316212581765824ull, 2612020029440810105ull, 3234333590203547258ull}}, {{1264991061487827077ull, 1317837210445043569ull, 12488397073655788440ull, 4042916987754434072ull}}, {{12319834459498361683ull, 823648256528152230ull, 7805248171034867775ull, 2526823117346521295ull}}, {{6176421037518176296ull, 14864618375942354000ull, 5144874195366196814ull, 3158528896683151619ull}}, {{7720526296897720370ull, 9357400933073166692ull, 1819406725780358114ull, 3948161120853939524ull}}, {{14048700972415851039ull, 10460061601598117086ull, 10360501240467499629ull, 2467600700533712202ull}}, {{8337504178665037991ull, 17686763020425034262ull, 3727254513729598728ull, 3084500875667140253ull}}, {{1198508186476521681ull, 3661709701821741212ull, 9270754160589386315ull, 3855626094583925316ull}}, {{9972439653402601859ull, 18429469628134445921ull, 15017593387223142254ull, 2409766309114953322ull}}, {{17077235585180640227ull, 13813464998313281593ull, 9548619697174152010ull, 3012207886393691653ull}}, {{7511486426193636572ull, 8043459211036826184ull, 16547460639895077917ull, 3765259857992114566ull}}, {{4694679016371022858ull, 7333005016111710317ull, 5730476881507035794ull, 2353287411245071604ull}}, {{10480034788891166476ull, 18389628306994413704ull, 7163096101883794742ull, 2941609264056339505ull}}, {{13100043486113958095ull, 13763663346888241322ull, 13565556145782131332ull, 3677011580070424381ull}}, {{7151682320787671810ull, 17204579183610301653ull, 3121887126945500453ull, 4596264475088030477ull}}, {{6775644459705988834ull, 13058704998970132485ull, 4257022463554631735ull, 2872665296930019048ull}}, {{13081241593059873946ull, 11711695230285277702ull, 5321278079443289669ull, 3590831621162523810ull}}, {{7128179954470066624ull, 804560982574433416ull, 15874969636158887895ull, 4488539526453154762ull}}, {{4455112471543791640ull, 7420379641750102741ull, 14533542041026692838ull, 2805337204033221726ull}}, {{10180576607857127454ull, 52102515332852618ull, 8943555514428590240ull, 3506671505041527158ull}}, {{3502348722966633510ull, 65128144166065773ull, 1956072356180961992ull, 4383339381301908948ull}}, {{4494810961067839896ull, 40705090103791108ull, 10445917259467877053ull, 2739587113313693092ull}}, {{5618513701334799869ull, 4662567381057126789ull, 13057396574334846316ull, 3424483891642116365ull}}, {{11634828145095887741ull, 5828209226321408486ull, 2486687662636394183ull, 4280604864552645457ull}}, {{2660081572257541934ull, 10560159794091962160ull, 13083394835216216124ull, 2675378040345403410ull}}, {{3325101965321927418ull, 13200199742614952700ull, 7130871507165494347ull, 3344222550431754263ull}}, {{4156377456652409272ull, 11888563659841302971ull, 4301903365529480030ull, 4180278188039692829ull}}, {{291892901194061843ull, 2818666268973426453ull, 4994532612669618971ull, 2612673867524808018ull}}, {{4976552144919965208ull, 17358390891498946778ull, 15466537802691799521ull, 3265842334406010022ull}}, {{15444062218004732318ull, 7862930559091519760ull, 10109800216509973594ull, 4082302918007512528ull}}, {{9652538886252957699ull, 9526017617859587754ull, 6318625135318733496ull, 2551439323754695330ull}}, {{2842301570961421315ull, 11907522022324484693ull, 17121653456003192678ull, 3189299154693369162ull}}, {{8164562982129164548ull, 5661030491050830058ull, 12178694783149215040ull, 3986623943366711453ull}}, {{9714537882258115747ull, 3538144056906768786ull, 9917527248681953352ull, 2491639964604194658ull}}, {{2919800315967868875ull, 4422680071133460983ull, 3173537023997665882ull, 3114549955755243323ull}}, {{17484808450241999806ull, 14751722125771602036ull, 17801979335279246064ull, 3893187444694054153ull}}, {{1704633244546474071ull, 9219826328607251273ull, 4208708056908446934ull, 2433242152933783846ull}}, {{6742477574110480492ull, 2301410873904288283ull, 14484257107990334476ull, 3041552691167229807ull}}, {{3816410949210712711ull, 2876763592380360354ull, 13493635366560530191ull, 3801940863959037259ull}}, {{6996942861684083349ull, 8715506272878807077ull, 6127679094886637417ull, 2376213039974398287ull}}, {{13357864595532492090ull, 15506068859525896750ull, 3047912850180908867ull, 2970266299967997859ull}}, {{7473958707560839304ull, 14770900055979983034ull, 17644949118008299796ull, 3712832874959997323ull}}, {{9282910210652912469ull, 8440498132713588ull, 8722250189541493421ull, 2320520546849998327ull}}, {{11603637763316140587ull, 4622236641093279889ull, 6291126718499478872ull, 2900650683562497909ull}}, {{669489148863012021ull, 5777795801366599862ull, 12475594416551736494ull, 3625813354453122386ull}}, {{10060233472933540834ull, 16445616788563025635ull, 6371120983834894809ull, 4532266693066402983ull}}, {{3981802911369769070ull, 3360981465210809166ull, 10899479642537891112ull, 2832666683166501864ull}}, {{14200625676066987145ull, 4201226831513511457ull, 13624349553172363890ull, 3540833353958127330ull}}, {{3915724039801570219ull, 14474905576246665130ull, 7807064904610679054ull, 4426041692447659163ull}}, {{7059013543303369291ull, 4435129966726777802ull, 2573572556167980457ull, 2766276057779786977ull}}, {{18047138965983987422ull, 10155598476835860156ull, 7828651713637363475ull, 3457845072224733721ull}}, {{4112179633770432661ull, 8082812077617437292ull, 14397500660474092248ull, 4322306340280917151ull}}, {{11793484307961296221ull, 5051757548510898307ull, 15915966940437389511ull, 2701441462675573219ull}}, {{10130169366524232372ull, 1703010917211234980ull, 15283272657119348985ull, 3376801828344466524ull}}, {{12662711708155290465ull, 6740449664941431629ull, 657346747689634615ull, 4221002285430583156ull}}, {{10220037826810750493ull, 11130310068229476624ull, 9634213754160797442ull, 2638126428394114472ull}}, {{12775047283513438116ull, 4689515548432069972ull, 12042767192700996803ull, 3297658035492643090ull}}, {{15968809104391797645ull, 1250208417112699561ull, 5830086954021470196ull, 4122072544365803863ull}}, {{3062976662603791672ull, 10004752297550213034ull, 10561333373904500728ull, 2576295340228627414ull}}, {{13052092865109515398ull, 12505940371937766292ull, 3978294680525850102ull, 3220369175285784268ull}}, {{16315116081386894248ull, 6409053428067432057ull, 4972868350657312628ull, 4025461469107230335ull}}, {{3279418523225727049ull, 13229030429396920844ull, 10025571746801902248ull, 2515913418192018959ull}}, {{4099273154032158811ull, 16536288036746151055ull, 7920278665074989906ull, 3144891772740023699ull}}, {{512405424112810610ull, 11446988009077913011ull, 5288662312916349479ull, 3931114715925029624ull}}, {{16461154454566364295ull, 14071896533314777487ull, 3305413945572718424ull, 2456946697453143515ull}}, {{15964757049780567465ull, 17589870666643471859ull, 17966825487248061742ull, 3071183371816429393ull}}, {{15344260293798321427ull, 12763966296449564016ull, 8623473803777913466ull, 3838979214770536742ull}}, {{9590162683623950892ull, 12589164953708365414ull, 777985108933808012ull, 2399362009231585464ull}}, {{2764331317675162807ull, 15736456192135456768ull, 972481386167260015ull, 2999202511539481830ull}}, {{3455414147093953509ull, 15058884221741933056ull, 10438973769563850827ull, 3749003139424352287ull}}, {{2159633841933720943ull, 7105959629375014208ull, 13441887633618488623ull, 2343126962140220179ull}}, {{2699542302417151179ull, 4270763518291379856ull, 12190673523595722875ull, 2928908702675275224ull}}, {{3374427878021438973ull, 726768379436836916ull, 15238341904494653594ull, 3661135878344094030ull}}, {{4218034847526798717ull, 10131832511150821953ull, 9824555343763541184ull, 4576419847930117538ull}}, {{14165486825772718958ull, 6332395319469263720ull, 10752033108279601144ull, 2860262404956323461ull}}, {{17706858532215898698ull, 7915494149336579650ull, 18051727403776889334ull, 3575328006195404326ull}}, {{12910201128415097564ull, 670995649815948755ull, 13341287217866335860ull, 4469160007744255408ull}}, {{5763032696045742026ull, 9642744317989743780ull, 8338304511166459912ull, 2793225004840159630ull}}, {{7203790870057177532ull, 12053430397487179725ull, 1199508602103299082ull, 3491531256050199538ull}}, {{13616424605998859819ull, 5843415960004198848ull, 10722757789483899661ull, 4364414070062749422ull}}, {{8510265378749287387ull, 5957977984216318232ull, 2090037600000049384ull, 2727758793789218389ull}}, {{10637831723436609233ull, 7447472480270397790ull, 7224233018427449634ull, 3409698492236522986ull}}, {{4073917617440985734ull, 85968563483221430ull, 18253663309889087851ull, 4262123115295653732ull}}, {{16381256566182779796ull, 16194631416672871057ull, 2185167531825904098ull, 2663826947059783583ull}}, {{6641512652446311033ull, 11019917233986313014ull, 16566517470064543835ull, 3329783683824729478ull}}, {{17525262852412664599ull, 9163210524055503363ull, 11484774800725903986ull, 4162229604780911848ull}}, {{8647446273544221422ull, 10338692595962077506ull, 7177984250453689991ull, 2601393502988069905ull}}, {{1585935805075500970ull, 8311679726525208979ull, 13584166331494500393ull, 3251741878735087381ull}}, {{15817477811626539924ull, 15001285676583899127ull, 3145149859085961779ull, 4064677348418859227ull}}, {{16803452659907669309ull, 7069960538651243002ull, 18106619726424583776ull, 2540423342761787016ull}}, {{11780943788029810828ull, 8837450673314053753ull, 4186530584321178104ull, 3175529178452233771ull}}, {{891121679755099823ull, 11046813341642567192ull, 621477211974084726ull, 3969411473065292214ull}}, {{556951049846937389ull, 2292572320099216591ull, 14223481312765966666ull, 2480882170665807633ull}}, {{14531246867590835448ull, 12089087436978796546ull, 3944293585675294620ull, 3101102713332259542ull}}, {{8940686547633768502ull, 15111359296223495683ull, 14153739018948894083ull, 3876378391665324427ull}}, {{3282086083057411362ull, 7138756550925990850ull, 6540243877629364850ull, 2422736494790827767ull}}, {{13325979640676540011ull, 18146817725512264370ull, 3563618828609318158ull, 3028420618488534709ull}}, {{7434102513990899205ull, 13460150120035554655ull, 9066209554189035602ull, 3785525773110668386ull}}, {{11563843098885393859ull, 13024279843449609563ull, 10278066989795535155ull, 2365953608194167741ull}}, {{9843117855179354420ull, 11668663785884624050ull, 17459269755671806848ull, 2957442010242709676ull}}, {{3080525282119417217ull, 14585829732355780063ull, 3377343120880206944ull, 3696802512803387096ull}}, {{8842857328965717617ull, 9116143582722362539ull, 2110839450550129340ull, 2310501570502116935ull}}, {{6441885642779759117ull, 11395179478402953174ull, 16473607368469825387ull, 2888126963127646168ull}}, {{17275729090329474704ull, 9632288329576303563ull, 2145265136877730118ull, 3610158703909557711ull}}, {{16982975344484455476ull, 2816988375115603646ull, 16516639476379326360ull, 4512698379886947138ull}}, {{6002673571875396769ull, 1760617734447252279ull, 14934585691164466879ull, 2820436487429341961ull}}, {{2891655946416858057ull, 16035830223341229061ull, 4833174058673419886ull, 3525545609286677452ull}}, {{8226255951448460475ull, 10821415742321760518ull, 6041467573341774858ull, 4406932011608346815ull}}, {{529723951227899893ull, 11375070857378488228ull, 10693446260979691142ull, 2754332507255216759ull}}, {{662154939034874866ull, 4995466534868334477ull, 8755121807797226024ull, 3442915634069020949ull}}, {{5439379692220981486ull, 6244333168585418096ull, 15555588278173920434ull, 4303644542586276186ull}}, {{3399612307638113429ull, 8514394248793274214ull, 14333928692286088175ull, 2689777839116422616ull}}, {{13472887421402417594ull, 6031306792564204863ull, 17917410865357610219ull, 3362222298895528270ull}}, {{12229423258325634089ull, 2927447472277868175ull, 13173391544842236966ull, 4202777873619410338ull}}, {{14560918564094603162ull, 15664712725455831321ull, 12845055733953786007ull, 2626736171012131461ull}}, {{4366090149836090240ull, 14969204888392401248ull, 2221261612160068797ull, 3283420213765164327ull}}, {{5457612687295112800ull, 4876448055208337848ull, 16611635070482249709ull, 4104275267206455408ull}}, {{3411007929559445500ull, 5353623043718905107ull, 10382271919051406068ull, 2565172042004034630ull}}, {{18098817967231470587ull, 6692028804648631383ull, 3754467861959481777ull, 3206465052505043288ull}}, {{18011836440611950330ull, 12976722024238177133ull, 4693084827449352221ull, 4008081315631304110ull}}, {{13563240784596162908ull, 10416294274362554660ull, 16768236072438008850ull, 2505050822269565068ull}}, {{16954050980745203635ull, 3796995806098417517ull, 2513551016837959447ull, 3131313527836956336ull}}, {{7357505670649340832ull, 134558739195633993ull, 3141938771047449309ull, 3914141909796195420ull}}, {{16127656090224307780ull, 2389942221210965197ull, 11187083768759431626ull, 2446338693622622137ull}}, {{6324512057498221013ull, 12210799813368482305ull, 148796655667125820ull, 3057923367028277672ull}}, {{12517326090300164170ull, 15263499766710602881ull, 185995819583907275ull, 3822404208785347090ull}}, {{905799778796520750ull, 7233844344980432849ull, 4727933405667329951ull, 2389002630490841931ull}}, {{5743935741923038842ull, 4430619412798153157ull, 1298230738656774535ull, 2986253288113552414ull}}, {{11791605695831186456ull, 926588247570303542ull, 10846160460175743977ull, 3732816610141940517ull}}, {{2758067541467103631ull, 12108332700799909474ull, 9084693296823533937ull, 2333010381338712823ull}}, {{12670956463688655347ull, 1300357820717723130ull, 6744180602602029518ull, 2916262976673391029ull}}, {{6615323542756043376ull, 10848819312751929721ull, 13041911771679924801ull, 3645328720841738786ull}}, {{12880840446872442124ull, 18172710159367300055ull, 7079017677745130193ull, 4556660901052173483ull}}, {{14968054306936358183ull, 4440414821963480678ull, 2118543039377012419ull, 2847913063157608427ull}}, {{9486695846815671921ull, 938832509026962944ull, 16483236854503429236ull, 3559891328947010533ull}}, {{11858369808519589901ull, 1173540636283703680ull, 6768988012847122833ull, 4449864161183763167ull}}, {{7411481130324743689ull, 12262677943745784560ull, 11148146535670533626ull, 2781165100739851979ull}}, {{9264351412905929611ull, 6104975392827454892ull, 9323497151160779129ull, 3476456375924814974ull}}, {{11580439266132412013ull, 12242905259461706519ull, 2430999402096198103ull, 4345570469906018718ull}}, {{14155303568973839364ull, 14569344814804648430ull, 15354432681592287526ull, 2715981543691261698ull}}, {{8470757424362523397ull, 8988308981651034730ull, 9969668815135583600ull, 3394976929614077123ull}}, {{1365074743598378438ull, 11235386227063793413ull, 7850400000492091596ull, 4243721162017596404ull}}, {{3159014723962680476ull, 16245488428769646691ull, 14129872037162333055ull, 2652325726260997752ull}}, {{17783826460235514307ull, 15695174517534670459ull, 17662340046452916319ull, 3315407157826247190ull}}, {{17618097056867004980ull, 15007282128490950170ull, 12854553021211369591ull, 4144258947282808988ull}}, {{15622996678969266017ull, 16297080357947925712ull, 17257467675111881802ull, 2590161842051755617ull}}, {{1082001775002030905ull, 11147978410580131333ull, 7736776538607688541ull, 3237702302564694522ull}}, {{5964188237179926535ull, 99914957943000454ull, 447598636404834869ull, 4047127878205868153ull}}, {{17562675703519617796ull, 2368289857928069235ull, 11808964193821491553ull, 2529454923878667595ull}}, {{17341658610972134341ull, 7572048340837474448ull, 10149519223849476537ull, 3161818654848334494ull}}, {{3230329190005616311ull, 14076746444474230965ull, 3463526992957069863ull, 3952273318560418118ull}}, {{4324798752967204146ull, 15715495555437476209ull, 15999762425880332376ull, 2470170824100261323ull}}, {{10017684459636393087ull, 1197625370587293645ull, 15388017013923027567ull, 3087713530125326654ull}}, {{17133791592972879262ull, 15332089768516280768ull, 10011649230549008650ull, 3859641912656658318ull}}, {{10708619745608049539ull, 14194242123750063384ull, 1645594750665742502ull, 2412276195410411449ull}}, {{13385774682010061924ull, 8519430617832803422ull, 6668679456759566032ull, 3015345244263014311ull}}, {{7508846315657801597ull, 10649288272291004278ull, 3724163302522069636ull, 3769181555328767889ull}}, {{81342928858738094ull, 15879177207036653482ull, 13856817110144763282ull, 2355738472080479930ull}}, {{9325050697928198425ull, 10625599471941041044ull, 8097649350826178295ull, 2944673090100599913ull}}, {{11656313372410248032ull, 8670313321498913401ull, 14733747706960110773ull, 3680841362625749891ull}}, {{735333660230646327ull, 15449577670301029656ull, 13805498615272750562ull, 4601051703282187364ull}}, {{459583537644153955ull, 14267672062365531439ull, 17851808671400244909ull, 2875657314551367102ull}}, {{14409537477337356155ull, 3999532022674750586ull, 13091388802395530329ull, 3594571643189208878ull}}, {{8788549809816919386ull, 9611101046770826137ull, 7140863966139637103ull, 4493214553986511098ull}}, {{17022058677204044377ull, 12924467181872848191ull, 9074725997264661093ull, 2808259096241569436ull}}, {{16665887328077667567ull, 2320525922058896527ull, 11343407496580826367ull, 3510323870301961795ull}}, {{16220673141669696554ull, 16735715457855784371ull, 9567573352298645054ull, 4387904837877452244ull}}, {{7832077704329866394ull, 5848136142732477328ull, 15203105382041428967ull, 2742440523673407652ull}}, {{9790097130412332993ull, 2698484159988208756ull, 557137653842234593ull, 3428050654591759566ull}}, {{12237621413015416241ull, 7984791218412648849ull, 9919794104157569049ull, 4285063318239699457ull}}, {{730984355493553295ull, 16519709557576375291ull, 17729086361166950415ull, 2678164573899812160ull}}, {{14748788499649105330ull, 16037950928543081209ull, 3714613877749136403ull, 3347705717374765201ull}}, {{4600927569279217951ull, 15435752642251463608ull, 9254953365613808408ull, 4184632146718456501ull}}, {{2875579730799511220ull, 9647345401407164755ull, 8090188862722324207ull, 2615395091699035313ull}}, {{17429532718781552736ull, 7447495733331568039ull, 14724422096830293163ull, 3269243864623794141ull}}, {{17175229880049553016ull, 4697683648237072145ull, 4570469565755702742ull, 4086554830779742677ull}}, {{3816989647389888779ull, 16771110335430333803ull, 5162386487811008165ull, 2554096769237339173ull}}, {{159551040809973070ull, 7128829864005753542ull, 11064669128191148111ull, 3192620961546673966ull}}, {{9422810837867242145ull, 4299351311579804023ull, 4607464373384159331ull, 3990776201933342458ull}}, {{12806785801308108197ull, 381251560523683562ull, 7491351251792487486ull, 2494235126208339036ull}}, {{6785110214780359438ull, 9699936487509380261ull, 9364189064740609357ull, 3117793907760423795ull}}, {{13093073786902837202ull, 16736606627814113230ull, 7093550312498373792ull, 3897242384700529744ull}}, {{3571485098386885347ull, 10460379142383820769ull, 4433468945311483620ull, 2435776490437831090ull}}, {{9076042391410994588ull, 13075473927979775961ull, 14765208218494130333ull, 3044720613047288862ull}}, {{15956739007691131139ull, 2509284354692556239ull, 9233138236262887109ull, 3805900766309111078ull}}, {{16890490907448038818ull, 3874145730896541601ull, 1159025379236916539ull, 2378687978943194424ull}}, {{7278055579027884810ull, 230996145193289098ull, 1448781724046145674ull, 2973359973678993030ull}}, {{18320941510639631821ull, 9512117218346387180ull, 11034349191912457900ull, 3716699967098741287ull}}, {{2227216407294994080ull, 15168445298321267796ull, 13813997272586368043ull, 2322937479436713304ull}}, {{2784020509118742600ull, 14348870604474196841ull, 17267496590732960054ull, 2903671849295891630ull}}, {{8091711654825816154ull, 8712716218737970243ull, 12360998701561424260ull, 3629589811619864538ull}}, {{5502953550104882288ull, 10890895273422462804ull, 6227876340097004517ull, 4536987264524830673ull}}, {{12662718005670327238ull, 9112652555102733204ull, 15421637758629097583ull, 2835617040328019170ull}}, {{15828397507087909048ull, 6779129675451028601ull, 10053675161431596171ull, 3544521300410023963ull}}, {{5950438828577722598ull, 3862226075886397848ull, 7955407933362107310ull, 4430651625512529954ull}}, {{3719024267861076624ull, 16248949352711162367ull, 9583815976778704972ull, 2769157265945331221ull}}, {{37094316398957876ull, 1864442617179401343ull, 16591455989400769120ull, 3461446582431664026ull}}, {{13881425950780861056ull, 2330553271474251678ull, 11515947949896185592ull, 4326808228039580033ull}}, {{4064205200810650256ull, 1456595794671407299ull, 279938441044034139ull, 2704255142524737521ull}}, {{468570482585924916ull, 15655802798621422836ull, 4961609069732430577ull, 3380318928155921901ull}}, {{585713103232406145ull, 5734695442994614833ull, 10813697355592926126ull, 4225398660194902376ull}}, {{11895285735588723601ull, 17419242707153797982ull, 6758560847245578828ull, 2640874162621813985ull}}, {{5645735132631128693ull, 3327309310232695862ull, 13059887077484361440ull, 3301092703277267481ull}}, {{16280540952643686674ull, 4159136637790869827ull, 2489800791573288088ull, 4126365879096584352ull}}, {{7869495086188610220ull, 2599460398619293642ull, 1556125494733305055ull, 2578978674435365220ull}}, {{613496820880986966ull, 17084383553556280765ull, 1945156868416631318ull, 3223723343044206525ull}}, {{5378557044528621612ull, 12132107405090575148ull, 7043132103948177052ull, 4029654178805258156ull}}, {{12584970189685164316ull, 16805939165036385275ull, 13625329601822386465ull, 2518533861753286347ull}}, {{11119526718679067490ull, 7172365901013317882ull, 12419975983850595178ull, 3148167327191607934ull}}, {{4676036361494058555ull, 18188829413121423161ull, 6301597942958468164ull, 3935209158989509918ull}}, {{14451737772002256357ull, 2144646346346113667ull, 17773556769631206315ull, 2459505724368443698ull}}, {{13452986196575432542ull, 16515865988214805796ull, 12993573925184232085ull, 3074382155460554623ull}}, {{16816232745719290677ull, 6809774429986343533ull, 11630281388052902203ull, 3842977694325693279ull}}, {{12815988475288250626ull, 1950266009527770756ull, 14186454895174145733ull, 2401861058953558299ull}}, {{16019985594110313282ull, 7049518530337101349ull, 13121382600540294262ull, 3002326323691947874ull}}, {{6189923937355727890ull, 18035270199776152495ull, 7178356213820592019ull, 3752907904614934843ull}}, {{10786231488488411788ull, 8966200865646401357ull, 2180629624424176060ull, 2345567440384334277ull}}, {{18094475379037902638ull, 11207751082058001696ull, 7337473048957607979ull, 2931959300480417846ull}}, {{4171350150087826682ull, 9398002834145114217ull, 18395213348051785782ull, 3664949125600522307ull}}, {{9825873706037171256ull, 2524131505826616963ull, 18382330666637344324ull, 4581186407000652884ull}}, {{3835328057059538083ull, 10800954227996411410ull, 2265584629793564394ull, 2863241504375408053ull}}, {{14017532108179198412ull, 4277820748140738454ull, 7443666805669343397ull, 3579051880469260066ull}}, {{8298543098369222207ull, 9958961953603310972ull, 81211470231903438ull, 4473814850586575083ull}}, {{14409961473335539687ull, 1612665202574681453ull, 16191658233390797313ull, 2796134281616609426ull}}, {{4177393786387260897ull, 6627517521645739721ull, 11016200754883720833ull, 3495167852020761783ull}}, {{9833428251411464025ull, 12896082920484562555ull, 9158564925177263137ull, 4368959815025952229ull}}, {{3840049647918471064ull, 1142522797661769741ull, 8029946087449483413ull, 2730599884391220143ull}}, {{9411748078325476734ull, 6039839515504600080ull, 5425746590884466362ull, 3413249855489025179ull}}, {{11764685097906845917ull, 16773171431235525908ull, 2170497220178195048ull, 4266562319361281474ull}}, {{16576300223046554506ull, 10483232144522203692ull, 5968246781038759809ull, 2666601449600800921ull}}, {{2273631205098641517ull, 17715726199080142520ull, 12071994494725837665ull, 3333251812001001151ull}}, {{2842039006373301896ull, 8309599693568014438ull, 10478307099979909178ull, 4166564765001251439ull}}, {{15611332434265477397ull, 9805185826907396927ull, 13466470965128525092ull, 2604102978125782149ull}}, {{14902479524404458842ull, 12256482283634246159ull, 2998030651128492653ull, 3255128722657227687ull}}, {{14016413387078185649ull, 1485544799260643987ull, 17582596369192779529ull, 4068910903321534608ull}}, {{6454415357710172079ull, 12457680545606372252ull, 10989122730745487205ull, 2543069314575959130ull}}, {{8068019197137715098ull, 1737042626725801603ull, 4513031376577083199ull, 3178836643219948913ull}}, {{5473337977994755969ull, 16006361338689415716ull, 10252975239148741902ull, 3973545804024936141ull}}, {{12644208273101498289ull, 5392289818253496918ull, 8713952533681657641ull, 2483466127515585088ull}}, {{6581888304522097053ull, 11352048291244259052ull, 10892440667102072051ull, 3104332659394481360ull}}, {{8227360380652621316ull, 9578374345627935911ull, 13615550833877590064ull, 3880415824243101700ull}}, {{12059629265548970179ull, 5986483966017459944ull, 17733091308028269598ull, 2425259890151938562ull}}, {{15074536581936212723ull, 16706476994376600738ull, 12942992098180561189ull, 3031574862689923203ull}}, {{9619798690565490096ull, 7048038187688587211ull, 11567054104298313583ull, 3789468578362404004ull}}, {{3706531172389737358ull, 11322552894946448863ull, 16452780852041221797ull, 2368417861476502502ull}}, {{21477947059783793ull, 318133063400897367ull, 11342604028196751439ull, 2960522326845628128ull}}, {{13861905489106893454ull, 14232724384533285420ull, 14178255035245939298ull, 3700652908557035160ull}}, {{17887062967546584217ull, 13507138758760691291ull, 8861409397028712061ull, 2312908067848146975ull}}, {{17747142691005842367ull, 3048865393168700402ull, 6465075727858502173ull, 2891135084810183719ull}}, {{12960556326902527150ull, 8422767759888263407ull, 3469658641395739812ull, 3613918856012729649ull}}, {{11589009390200771034ull, 10528459699860329259ull, 8948759320172062669ull, 4517398570015912061ull}}, {{4937287859661787944ull, 8886130321626399739ull, 7898817584321233120ull, 2823374106259945038ull}}, {{1559923806149847026ull, 11107662902032999674ull, 650149943546765592ull, 3529217632824931298ull}}, {{11173276794542084591ull, 13884578627541249592ull, 10036059466288232798ull, 4411522041031164122ull}}, {{6983297996588802869ull, 4066175623785893091ull, 10884223184857533403ull, 2757201275644477576ull}}, {{4117436477308615683ull, 471033511304978460ull, 13605278981071916754ull, 3446501594555596970ull}}, {{5146795596635769603ull, 9812163925985998883ull, 7783226689485120134ull, 4308126993194496213ull}}, {{910904238683662050ull, 1520916435313861398ull, 7170359690141894036ull, 2692579370746560133ull}}, {{10362002335209353370ull, 1901145544142326747ull, 13574635631104755449ull, 3365724213433200166ull}}, {{8340816900584303809ull, 6988117948605296338ull, 7744922502026168503ull, 4207155266791500208ull}}, {{9824696581292577785ull, 11285102745519392067ull, 4840576563766355314ull, 2629472041744687630ull}}, {{7669184708188334327ull, 4883006395044464276ull, 15274092741562719951ull, 3286840052180859537ull}}, {{9586480885235417908ull, 1492071975378192441ull, 5257557871671236227ull, 4108550065226074422ull}}, {{17520765599340605953ull, 17073446049107227939ull, 17121031725076686353ull, 2567843790766296513ull}}, {{17289270980748369537ull, 7506749506101871212ull, 7566231601063694230ull, 3209804738457870642ull}}, {{3164844652225910305ull, 160064845772563208ull, 234417464474841980ull, 4012255923072338303ull}}, {{1978027907641193941ull, 9323412565462627813ull, 7064039942937858093ull, 2507659951920211439ull}}, {{7084220902978880330ull, 16265951725255672670ull, 4218363910244934712ull, 3134574939900264299ull}}, {{18078648165578376220ull, 1885695582860039221ull, 661268869378780487ull, 3918218674875330374ull}}, {{13604998112700179090ull, 8096088766928606369ull, 14248351098643901516ull, 2448886671797081483ull}}, {{3171189585593060150ull, 10120110958660757962ull, 13198752854877488991ull, 3061108339746351854ull}}, {{13187359018846100996ull, 8038452679898559548ull, 7275069031742085431ull, 3826385424682939818ull}}, {{17465471423633588931ull, 11941561952577681573ull, 9158604163266191298ull, 2391490890426837386ull}}, {{7996781224259822451ull, 5703580403867326159ull, 2224883167227963315ull, 2989363613033546733ull}}, {{5384290511897390160ull, 2517789486406769795ull, 7392789977462342048ull, 3736704516291933416ull}}, {{1059338560722174898ull, 1573618429004231122ull, 4620493735913963780ull, 2335440322682458385ull}}, {{10547545237757494430ull, 1967023036255288902ull, 10387303188319842629ull, 2919300403353072981ull}}, {{3961059510342092230ull, 7070464813746499032ull, 17595815003827191190ull, 3649125504191341226ull}}, {{4951324387927615287ull, 18061453054037899598ull, 12771396717929213179ull, 4561406880239176533ull}}, {{16929635797736923267ull, 8982565149559993296ull, 10287965957919452189ull, 2850879300149485333ull}}, {{2715300673461602467ull, 15839892455377379525ull, 17471643465826703140ull, 3563599125186856666ull}}, {{8005811860254390988ull, 1353121495512172790ull, 12616182295428603118ull, 4454498906483570833ull}}, {{391946394231606464ull, 14680758989977271706ull, 967584907001795092ull, 2784061816552231771ull}}, {{9713305029644283887ull, 18350948737471589632ull, 15044539189034407577ull, 3480077270690289713ull}}, {{12141631287055354859ull, 9103627866557323328ull, 4970615931010845760ull, 4350096588362862142ull}}, {{7588519554409596787ull, 5689767416598327080ull, 16941693012163942312ull, 2718810367726788838ull}}, {{9485649443011995984ull, 7112209270747908850ull, 11953744228350152082ull, 3398512959658486048ull}}, {{2633689766910219172ull, 18113633625289661871ull, 14942180285437690102ull, 4248141199573107560ull}}, {{8563585131959968839ull, 6709334997378650765ull, 9338862678398556314ull, 2655088249733192225ull}}, {{15316167433377348952ull, 17610040783578089264ull, 16285264366425583296ull, 3318860312166490281ull}}, {{698465218012134574ull, 3565806905763059965ull, 6521522402749815409ull, 4148575390208112852ull}}, {{2742383770471278061ull, 13757844362170382238ull, 13299323538573410438ull, 2592859618880070532ull}}, {{12651351749943873384ull, 7973933415858201989ull, 16624154423216763048ull, 3241074523600088165ull}}, {{1979131632147678018ull, 9967416769822752487ull, 6945134973738790098ull, 4051343154500110207ull}}, {{8154486297733380617ull, 10841321499566608208ull, 11258238386227825667ull, 2532089471562568879ull}}, {{10193107872166725772ull, 8939965856030872356ull, 9461111964357394180ull, 3165111839453211099ull}}, {{12741384840208407214ull, 11174957320038590445ull, 7214703937019354821ull, 3956389799316513874ull}}, {{10269208534343948461ull, 9290191334237812980ull, 9120875979064484667ull, 2472743624572821171ull}}, {{12836510667929935576ull, 7001053149369878321ull, 6789408955403217930ull, 3090929530716026464ull}}, {{2210580279630255758ull, 17974688473567123710ull, 8486761194254022412ull, 3863661913395033080ull}}, {{15216670730051073561ull, 2010808259124676510ull, 5304225746408764008ull, 2414788695871895675ull}}, {{9797466375709066143ull, 2513510323905845638ull, 2018596164583567106ull, 3018485869839869594ull}}, {{3023460932781556871ull, 12365259941737082856ull, 11746617242584234690ull, 3773107337299836992ull}}, {{1889663082988473044ull, 12339973482013064689ull, 7341635776615146681ull, 2358192085812398120ull}}, {{6973764872162979209ull, 1589908797234167149ull, 9177044720768933352ull, 2947740107265497650ull}}, {{13328892108631111916ull, 1987385996542708936ull, 2247933864106390882ull, 3684675134081872063ull}}, {{16661115135788889895ull, 11707604532533161978ull, 16644975385415152314ull, 4605843917602340078ull}}, {{15024882978295444088ull, 11928938851260614140ull, 5791423597457082292ull, 2878652448501462549ull}}, {{334359649159753494ull, 14911173564075767676ull, 11850965515248740769ull, 3598315560626828186ull}}, {{417949561449691868ull, 4803908899812545883ull, 5590334857206150154ull, 4497894450783535233ull}}, {{16402119540401915081ull, 7614129080810229080ull, 15023174331822313606ull, 2811184031739709520ull}}, {{2055905351792842236ull, 294289314158010543ull, 332223841068340392ull, 3513980039674636901ull}}, {{16404939745023216507ull, 367861642697513178ull, 5026965819762813394ull, 4392475049593296126ull}}, {{14864773359066898221ull, 4841599545113333640ull, 16976911692633922083ull, 2745296905995810078ull}}, {{134222625124071160ull, 1440313412964279147ull, 11997767578937626796ull, 3431621132494762598ull}}, {{14002836336687252662ull, 1800391766205348933ull, 5773837436817257687ull, 4289526415618453248ull}}, {{11057615719643226866ull, 8042773881519424939ull, 3608648398010786054ull, 2680954009761533280ull}}, {{9210333631126645678ull, 830095315044505366ull, 4510810497513482568ull, 3351192512201916600ull}}, {{2289545002053531289ull, 1037619143805631708ull, 5638513121891853210ull, 4188990640252395750ull}}, {{10654337663138232864ull, 5260197983305907721ull, 17359128756464571968ull, 2618119150157747343ull}}, {{17929608097350178984ull, 6575247479132384651ull, 17087224927153327056ull, 3272648937697184179ull}}, {{17800324103260335826ull, 8219059348915480814ull, 16747345140514270916ull, 4090811172121480224ull}}, {{6513516546110321987ull, 14360284129926951317ull, 10467090712821419322ull, 2556756982575925140ull}}, {{12753581701065290388ull, 8726983125553913338ull, 13083863391026774153ull, 3195946228219906425ull}}, {{6718605089476837177ull, 15520414925369779577ull, 2519771183501303979ull, 3994932785274883032ull}}, {{15728343226991492996ull, 7394416319142418283ull, 1574856989688314987ull, 2496832990796801895ull}}, {{15048743015311978341ull, 4631334380500634950ull, 15803629292392557446ull, 3121041238496002368ull}}, {{9587556732285197118ull, 15012540012480569496ull, 1307792541781145191ull, 3901301548120002961ull}}, {{5992222957678248199ull, 16300366535441437791ull, 12346585384681685504ull, 2438313467575001850ull}}, {{2878592678670422344ull, 1928714095592245623ull, 6209859693997331073ull, 3047891834468752313ull}}, {{17433298903620191642ull, 7022578637917694932ull, 12374010635924051745ull, 3809864793085940391ull}}, {{1672439777907843969ull, 15918326694767029093ull, 14651285675093614196ull, 2381165495678712744ull}}, {{6702235740812192865ull, 1451164294749234750ull, 18314107093867017746ull, 2976456869598390930ull}}, {{17601166712870016889ull, 11037327405291319245ull, 13669261830478996374ull, 3720571086997988663ull}}, {{13306572204757454508ull, 2286643609879686624ull, 15460817671690454590ull, 2325356929373742914ull}}, {{16633215255946818134ull, 12081676549204384088ull, 10102650052758292429ull, 2906696161717178643ull}}, {{2344774996223971052ull, 1267037631223316399ull, 8016626547520477633ull, 3633370202146473304ull}}, {{16766026800562127527ull, 6195483057456533402ull, 10020783184400597041ull, 4541712752683091630ull}}, {{15090452768778717608ull, 15401391956978803136ull, 1651303471822985246ull, 2838570470426932269ull}}, {{416321887263845394ull, 10028367909368728113ull, 6675815358206119462ull, 3548213088033665336ull}}, {{5132088377507194647ull, 3312087849856134333ull, 8344769197757649328ull, 4435266360042081670ull}}, {{5513398245155690606ull, 2070054906160083958ull, 603794730171142926ull, 2772041475026301044ull}}, {{16115119843299389066ull, 11810940669554880755ull, 754743412713928657ull, 3465051843782876305ull}}, {{15532213785696848428ull, 928617781661437232ull, 5555115284319798726ull, 4331314804728595381ull}}, {{9707633616060530268ull, 14415444168820561982ull, 5777790061913568155ull, 2707071752955372113ull}}, {{2911169983220887027ull, 13407619192598314574ull, 11833923595819348098ull, 3383839691194215141ull}}, {{12862334515880884591ull, 7536151953893117409ull, 957346439492021411ull, 4229799613992768927ull}}, {{1121430044784471014ull, 2404251961969504429ull, 7515870552323595238ull, 2643624758745480579ull}}, {{6013473574407976671ull, 12228686989316656344ull, 4783152171977106143ull, 3304530948431850724ull}}, {{7516841968009970839ull, 10674172718218432526ull, 5978940214971382679ull, 4130663685539813405ull}}, {{86340211578843870ull, 13588886976527602185ull, 6042680643570808126ull, 2581664803462383378ull}}, {{4719611282900942742ull, 7762736683804726923ull, 16776722841318285966ull, 3227081004327979222ull}}, {{1287828085198790523ull, 480048817901132846ull, 11747531514793081650ull, 4033851255409974028ull}}, {{14639950608531407789ull, 4911716529615595932ull, 16565579233600451839ull, 2521157034631233767ull}}, {{18299938260664259736ull, 1527959643592107011ull, 16095288023573176895ull, 3151446293289042209ull}}, {{18263236807402936766ull, 15745007609772297476ull, 6284051974184307406ull, 3939307866611302762ull}}, {{2191150967772059671ull, 5228943737680298019ull, 8539218502292580033ull, 2462067416632064226ull}}, {{16573996764997238301ull, 11147865690527760427ull, 1450651091010949233ull, 3077584270790080283ull}}, {{16105809937819159972ull, 99774057877536822ull, 15648371919045850254ull, 3846980338487600353ull}}, {{5454445192709587079ull, 13897416841455624226ull, 2862703421762574552ull, 2404362711554750221ull}}, {{16041428527741759656ull, 17371771051819530282ull, 8190065295630606094ull, 3005453389443437776ull}}, {{10828413622822423762ull, 12491341777919637045ull, 10237581619538257618ull, 3756816736804297220ull}}, {{9073601523477708803ull, 12418774629627161057ull, 15621860549066186819ull, 2348010460502685762ull}}, {{15953687922774523908ull, 10911782268606563417ull, 10303953649477957716ull, 2935013075628357203ull}}, {{6107051848185991173ull, 13639727835758204272ull, 8268256043420059241ull, 3668766344535446504ull}}, {{7633814810232488966ull, 3214601739415591628ull, 10335320054275074052ull, 4585957930669308130ull}}, {{13994506293250081412ull, 11232498123989520575ull, 11071261052349309186ull, 2866223706668317581ull}}, {{12881446848135213861ull, 4817250618132124911ull, 4018260154472771ull, 3582779633335396977ull}}, {{11490122541741629422ull, 1409877254237768235ull, 4616708843620478868ull, 4478474541669246221ull}}, {{4875483579374824437ull, 10104545320753380955ull, 5191286036476493244ull, 2799046588543278888ull}}, {{1482668455791142642ull, 12630681650941726194ull, 6489107545595616555ull, 3498808235679098610ull}}, {{11076707606593704110ull, 11176666045249769838ull, 17334756468849296502ull, 4373510294598873262ull}}, {{2311256235693677165ull, 2373730259853718245ull, 6222536774603422410ull, 2733443934124295789ull}}, {{7500756313044484360ull, 12190534861671923614ull, 12389856986681665916ull, 3416804917655369736ull}}, {{152573354450829642ull, 15238168577089904518ull, 15487321233352082395ull, 4271006147069212170ull}}, {{13930416401813932239ull, 7218012351467496371ull, 14291261789272439401ull, 2669378841918257606ull}}, {{12801334483840027394ull, 13634201457761758368ull, 8640705199735773443ull, 3336723552397822008ull}}, {{16001668104800034243ull, 12431065803774810056ull, 10800881499669716804ull, 4170904440497277510ull}}, {{10001042565500021402ull, 16992788164214032093ull, 2138864918866185098ull, 2606815275310798444ull}}, {{17112989225302414656ull, 12017613168412764308ull, 2673581148582731373ull, 3258519094138498055ull}}, {{2944492457918466704ull, 1186958405233791674ull, 17177034491010577929ull, 4073148867673122568ull}}, {{6451993804626429594ull, 12271064049339589556ull, 10735646556881611205ull, 2545718042295701605ull}}, {{8064992255783036993ull, 1503772006392323233ull, 18031244214529401911ull, 3182147552869627006ull}}, {{14692926338156184145ull, 15714773063272567753ull, 13315683231306976580ull, 3977684441087033758ull}}, {{2265549933706533235ull, 598361127690579038ull, 3710616001139472459ull, 2486052775679396099ull}}, {{12055309453987942351ull, 14583009464895387509ull, 26583982996952669ull, 3107565969599245124ull}}, {{1234078762202764227ull, 4393703775837070675ull, 33229978746190837ull, 3884457461999056405ull}}, {{16912200290872585306ull, 5051907869111863123ull, 2326611745930063225ull, 2427785913749410253ull}}, {{16528564345163343728ull, 10926570854817216808ull, 7519950700839966935ull, 3034732392186762816ull}}, {{2213961357744628044ull, 9046527550094133107ull, 9399938376049958669ull, 3793415490233453520ull}}, {{17524626913086250192ull, 7959922728022527143ull, 5874961485031224168ull, 2370884681395908450ull}}, {{17294097622930424836ull, 9949903410028158929ull, 16567073893143806018ull, 2963605851744885562ull}}, {{7782563973380867332ull, 3214007225680422854ull, 11485470329574981715ull, 3704507314681106953ull}}, {{252416464935654179ull, 18149655580546121948ull, 260889928343281715ull, 2315317071675691846ull}}, {{315520581169567724ull, 18075383457255264531ull, 9549484447283877952ull, 2894146339594614807ull}}, {{14229458781744123366ull, 4147485247859529047ull, 7325169540677459537ull, 3617682924493268509ull}}, {{13175137458752766304ull, 9796042578251799213ull, 13768147944274212325ull, 4522103655616585636ull}}, {{10540303920934172892ull, 8428369620621068460ull, 17828464502026158511ull, 2826314784760366022ull}}, {{13175379901167716115ull, 5923776007348947671ull, 13062208590677922331ull, 3532893480950457528ull}}, {{11857538858032257240ull, 2793033990758796685ull, 16327760738347402914ull, 4416116851188071910ull}}, {{9716804795483854727ull, 6357332262651635832ull, 5593164443039738917ull, 2760073031992544944ull}}, {{12146005994354818409ull, 12558351346741932694ull, 6991455553799673646ull, 3450091289990681180ull}}, {{5959135456088747203ull, 6474567146572640060ull, 8739319442249592058ull, 4312614112488351475ull}}, {{12947831696910242810ull, 8658290485035287941ull, 3156231642192301084ull, 2695383820305219672ull}}, {{2349731565855639800ull, 10822863106294109927ull, 3945289552740376355ull, 3369229775381524590ull}}, {{16772222512601713462ull, 8916892864440249504ull, 14154983977780246252ull, 4211537219226905737ull}}, {{10482639070376070914ull, 14796430077129931748ull, 1929335958471572051ull, 2632210762016816086ull}}, {{13103298837970088642ull, 13883851577985026781ull, 11635041984944240872ull, 3290263452521020107ull}}, {{2544065492180447091ull, 17354814472481283477ull, 9932116462752913186ull, 4112829315651275134ull}}, {{3895883941826473384ull, 15458445063728190077ull, 1595886770793182837ull, 2570518322282046959ull}}, {{9481540945710479634ull, 5487998274378073884ull, 15829916518773642259ull, 3213147902852558698ull}}, {{11851926182138099542ull, 2248311824545204451ull, 10564023611612277016ull, 4016434878565698373ull}}, {{5101610854622618262ull, 1405194890340752782ull, 8908357766471367087ull, 2510271799103561483ull}}, {{15600385605133048635ull, 15591551668208104689ull, 6523761189661820954ull, 3137839748879451854ull}}, {{5665423951134147082ull, 10266067548405355054ull, 17378073523932052001ull, 3922299686099314817ull}}, {{17375948024741005638ull, 17945507263821816668ull, 3943766924816450644ull, 2451437303812071761ull}}, {{3273190957216705432ull, 3985140006067719220ull, 9541394674447951210ull, 3064296629765089701ull}}, {{4091488696520881790ull, 14204797044439424833ull, 16538429361487326916ull, 3830370787206362126ull}}, {{14086395481394020879ull, 18101370189629416328ull, 5724832332502191418ull, 2393981742003976329ull}}, {{17607994351742526098ull, 13403340700181994602ull, 11767726434055127177ull, 2992477177504970411ull}}, {{12786620902823381815ull, 2919117819945329541ull, 10097972024141521068ull, 3740596471881213014ull}}, {{10297481073478307587ull, 11047820674320606771ull, 1699546496661062763ull, 2337872794925758134ull}}, {{8260165323420496579ull, 9198089824473370560ull, 11347805157681104262ull, 2922340993657197667ull}}, {{10325206654275620724ull, 2274240243736937392ull, 9573070428673992424ull, 3652926242071497084ull}}, {{12906508317844525904ull, 2842800304671171740ull, 11966338035842490530ull, 4566157802589371355ull}}, {{17289939735507604498ull, 6388436208846870241ull, 5173118263187862629ull, 2853848626618357097ull}}, {{7777366614102341911ull, 12597231279485975706ull, 11078083847412216190ull, 3567310783272946371ull}}, {{498336230773151581ull, 6523167062502693825ull, 9235918790837882334ull, 4459138479091182964ull}}, {{11840675190301689498ull, 17912037469346347352ull, 14995821281128452266ull, 2786961549431989352ull}}, {{14800843987877111872ull, 13166674799828158382ull, 298032527701013717ull, 3483701936789986691ull}}, {{9277682947991614032ull, 2623285444503034266ull, 14207598714908430859ull, 4354627420987483363ull}}, {{10410237860922146674ull, 17780454467310254080ull, 6573906187604075334ull, 2721642138117177102ull}}, {{13012797326152683343ull, 13002196047283041792ull, 17440754771359869976ull, 3402052672646471377ull}}, {{16265996657690854179ull, 16252745059103802240ull, 7965885408917673758ull, 4252565840808089222ull}}, {{10166247911056783862ull, 5546279643512488496ull, 366992362146158195ull, 2657853650505055764ull}}, {{12707809888820979827ull, 2321163535963222716ull, 458740452682697744ull, 3322317063131319705ull}}, {{15884762361026224784ull, 2901454419954028395ull, 5185111584280760084ull, 4152896328914149631ull}}, {{7622133466427696538ull, 11036781049326043555ull, 10158223767816556908ull, 2595560205571343519ull}}, {{4915980814607232768ull, 13795976311657554444ull, 8086093691343308231ull, 3244450256964179399ull}}, {{6144976018259040960ull, 12633284371144555151ull, 5495931095751747385ull, 4055562821205224249ull}}, {{10758139039052982456ull, 978273704324265113ull, 14964171980913311876ull, 2534726763253265155ull}}, {{18059359817243615974ull, 1222842130405331391ull, 14093528957714251941ull, 3168408454066581444ull}}, {{17962513753127132064ull, 6140238681434052143ull, 17616911197142814926ull, 3960510567583226805ull}}, {{18144100123345539396ull, 17672707231178446301ull, 13316412507427953280ull, 2475319104739516753ull}}, {{8845067098899760533ull, 3644139965263506261ull, 2810457579002777889ull, 3094148880924395942ull}}, {{15668019892052088570ull, 9166860975006770730ull, 12736444010608248169ull, 3867686101155494927ull}}, {{14404198450959943261ull, 17258503155447701466ull, 14877806534271236961ull, 2417303813222184329ull}}, {{8781876026845153268ull, 7738070889027463121ull, 4762200112556882490ull, 3021629766527730412ull}}, {{15589031051983829488ull, 449216574429553093ull, 5952750140696103113ull, 3777037208159663015ull}}, {{12048987416703587382ull, 11809975405086940443ull, 10637997865576146301ull, 2360648255099789384ull}}, {{10449548252452096324ull, 927411201076511842ull, 13297497331970182877ull, 2950810318874736730ull}}, {{3838563278710344597ull, 5770950019773027707ull, 7398499628107952788ull, 3688512898593420913ull}}, {{186518079960542842ull, 7213687524716284634ull, 13859810553562328889ull, 4610641123241776141ull}}, {{4728259818402727180ull, 16037769749016147656ull, 10968224605190149507ull, 2881650702026110088ull}}, {{5910324773003408975ull, 15435526167842796666ull, 13710280756487686884ull, 3602063377532637610ull}}, {{16611278003109037027ull, 847663636093944216ull, 7914478908754832798ull, 4502579221915797013ull}}, {{10382048751943148142ull, 14364847827840878847ull, 7252392327185464450ull, 2814112013697373133ull}}, {{8365874921501547273ull, 8732687747946322751ull, 13677176427409218467ull, 3517640017121716416ull}}, {{5845657633449546188ull, 6304173666505515535ull, 17096470534261523084ull, 4397050021402145520ull}}, {{10571065048547048223ull, 13163480578420723017ull, 10685294083913451927ull, 2748156263376340950ull}}, {{17825517329111198183ull, 11842664704598515867ull, 4133245568037039101ull, 3435195329220426188ull}}, {{17670210642961609825ull, 968272825465981122ull, 5166556960046298877ull, 4293994161525532735ull}}, {{15655567670278394045ull, 2911013525129932153ull, 10146627127670018654ull, 2683746350953457959ull}}, {{5734401532565828844ull, 12862138943267191000ull, 8071597891160135413ull, 3354682938691822449ull}}, {{7168001915707286055ull, 2242615623801825038ull, 14701183382377557171ull, 4193353673364778061ull}}, {{18315059252599217496ull, 17542535829371998312ull, 11494082623199667183ull, 2620846045852986288ull}}, {{4447079992039470254ull, 17316483768287609987ull, 14367603278999583979ull, 3276057557316232860ull}}, {{947163971621949914ull, 17033918691932124580ull, 17959504098749479974ull, 4095071946645291075ull}}, {{9815349519118494504ull, 6034513164030189958ull, 8918847052504731032ull, 2559419966653306922ull}}, {{3045814862043342322ull, 7543141455037737448ull, 1925186778776137982ull, 3199274958316633653ull}}, {{3807268577554177903ull, 205554781942396002ull, 7018169491897560382ull, 3999093697895792066ull}}, {{6991228879398749093ull, 13963529793996161213ull, 8998041950863363142ull, 2499433561184870041ull}}, {{13350722117675824270ull, 8231040205640425708ull, 15859238457006591832ull, 3124291951481087551ull}}, {{16688402647094780338ull, 10288800257050532135ull, 15212362052830851886ull, 3905364939351359439ull}}, {{17347780682075319567ull, 1818814142229194680ull, 16425255310660364285ull, 2440853087094599649ull}}, {{3237981778884597843ull, 6885203696213881255ull, 6696511083043291644ull, 3051066358868249562ull}}, {{17882535278887911016ull, 8606504620267351568ull, 17594010890658890363ull, 3813832948585311952ull}}, {{11176584549304944385ull, 3073222378453400778ull, 10996256806661806477ull, 2383645592865819970ull}}, {{4747358649776404673ull, 8453213991494138877ull, 4521948971472482288ull, 2979556991082274963ull}}, {{10545884330647893745ull, 10566517489367673596ull, 1040750195913214956ull, 3724446238852843704ull}}, {{15814549743509709399ull, 15827445467709571805ull, 650468872445759347ull, 2327778899283027315ull}}, {{5933129124104973037ull, 15172620816209576853ull, 14648144145839362896ull, 2909723624103784143ull}}, {{12028097423558604200ull, 519031946552419450ull, 13698494163871815717ull, 3637154530129730179ull}}, {{5811749742593479442ull, 5260475951617912217ull, 12511431686412381742ull, 4546443162662162724ull}}, {{15161558635189394411ull, 17122855525043358847ull, 17043016840862514396ull, 2841526976663851702ull}}, {{14340262275559355110ull, 2956825332594646943ull, 12080399014223367188ull, 3551908720829814628ull}}, {{13313641826021805983ull, 3696031665743308679ull, 15100498767779208985ull, 4439885901037268285ull}}, {{15238555168904710596ull, 13839234837158037684ull, 11743654739075699567ull, 2774928688148292678ull}}, {{601449887421336628ull, 12687357528020159202ull, 5456196386989848651ull, 3468660860185365848ull}}, {{9975184396131446593ull, 11247510891597811098ull, 6820245483737310814ull, 4335826075231707310ull}}, {{10846176266009542025ull, 2418008288821244032ull, 18097711482617982971ull, 2709891297019817068ull}}, {{13557720332511927531ull, 16857568416308718752ull, 4175395279562927097ull, 3387364121274771336ull}}, {{16947150415639909414ull, 7236902465103734728ull, 5219244099453658872ull, 4234205151593464170ull}}, {{10591969009774943384ull, 4523064040689834205ull, 7873713580585924699ull, 2646378219745915106ull}}, {{17851647280646067134ull, 1042144032434904852ull, 618769938877630066ull, 3307972774682393883ull}}, {{3867815027098032301ull, 10526052077398406874ull, 14608520478879201294ull, 4134965968352992353ull}}, {{7029070410363658092ull, 1967096529946616392ull, 2212796271658418953ull, 2584353730220620221ull}}, {{8786338012954572615ull, 7070556680860658394ull, 7377681358000411595ull, 3230442162775775276ull}}, {{1759550479338439961ull, 4226509832648435089ull, 9222101697500514494ull, 4038052703469719095ull}}, {{12628934095654994736ull, 16476626700687435642ull, 12681342588578903414ull, 2523782939668574434ull}}, {{6562795582713967612ull, 11372411339004518745ull, 6628306198868853460ull, 3154728674585718043ull}}, {{12815180496819847418ull, 14215514173755648431ull, 3673696730158678921ull, 3943410843232147554ull}}, {{14927016838153486493ull, 1967167330956198413ull, 6907746474776562230ull, 2464631777020092221ull}}, {{4823712992409694404ull, 11682331200550023825ull, 13246369111898090691ull, 3080789721275115276ull}}, {{10641327258939505909ull, 9991227982260141877ull, 16557961389872613364ull, 3850987151593894095ull}}, {{8956672546050885145ull, 15467889525767364481ull, 17266254896311465208ull, 2406866969746183809ull}}, {{15807526700990994335ull, 888117833499653985ull, 7747760565107167799ull, 3008583712182729762ull}}, {{5924350320956579207ull, 14945205347156731194ull, 461328669529183940ull, 3760729640228412203ull}}, {{8314404969025249908ull, 117381305118181188ull, 16429231482951597627ull, 2350456025142757626ull}}, {{10393006211281562385ull, 13981784686679890197ull, 11313167316834721225ull, 2938070031428447033ull}}, {{17602943782529340886ull, 3642172803067699034ull, 306401090761237820ull, 3672587539285558792ull}}, {{12780307691306900299ull, 4552716003834623793ull, 383001363451547275ull, 4590734424106948490ull}}, {{1070163279425730831ull, 539604493182945919ull, 4851061870584604951ull, 2869209015066842806ull}}, {{15172762154564327251ull, 14509563671760846110ull, 15287199375085531996ull, 3586511268833553507ull}}, {{9742580656350633255ull, 18136954589701057638ull, 14497313200429527091ull, 4483139086041941884ull}}, {{1477426891791757881ull, 9029753609349467072ull, 18284192787123230240ull, 2801961928776213677ull}}, {{1846783614739697351ull, 11287192011686833840ull, 9020182928621874088ull, 3502452410970267097ull}}, {{2308479518424621688ull, 14108990014608542300ull, 15886914679204730514ull, 4378065513712833871ull}}, {{10666171735870164363ull, 13429804777557726841ull, 16846850702144038427ull, 2736290946070521169ull}}, {{17944400688265093358ull, 12175569953519770647ull, 7223505322397884322ull, 3420363682588151462ull}}, {{17818814841903978794ull, 5996090405044937501ull, 18252753689852131211ull, 4275454603235189327ull}}, {{13442602285403680698ull, 1441713493939391986ull, 18325500083798663863ull, 2672159127021993329ull}}, {{7579880819899825065ull, 15637199922706403695ull, 9071817049466166116ull, 3340198908777491662ull}}, {{4863165006447393427ull, 1099755829673453003ull, 2116399274977931838ull, 4175248635971864578ull}}, {{733635119815926940ull, 14522405448828071839ull, 5934435565288595302ull, 2609530397482415361ull}}, {{14752101955052072387ull, 8929634774180313990ull, 12029730475038132032ull, 3261912996853019201ull}}, {{9216755406960314675ull, 11162043467725392488ull, 1202105038515501328ull, 4077391246066274002ull}}, {{5760472129350196672ull, 6976277167328370305ull, 5363001667499576234ull, 2548369528791421251ull}}, {{11812276180115133744ull, 17943718496015238689ull, 2092066065947082388ull, 3185461910989276564ull}}, {{930287169861753468ull, 3982904046309496746ull, 2615082582433852986ull, 3981827388736595705ull}}, {{5193115499590983822ull, 7101001047370823370ull, 13163641660089627876ull, 2488642117960372315ull}}, {{15714766411343505585ull, 8876251309213529212ull, 11842866056684646941ull, 3110802647450465394ull}}, {{1196713940469830365ull, 15707000154944299420ull, 5580210534001032868ull, 3888503309313081743ull}}, {{9971318249648419786ull, 593503059985411329ull, 10405160611391727399ull, 2430314568320676089ull}}, {{17075833830487912637ull, 14576936880263927873ull, 17618136782667047152ull, 3037893210400845111ull}}, {{7509734232827727084ull, 18221171100329909842ull, 17410984959906421036ull, 3797366513001056389ull}}, {{9305269913944717332ull, 2164859900851417843ull, 13187708609155207100ull, 2373354070625660243ull}}, {{7019901374003508760ull, 2706074876064272304ull, 11872949743016620971ull, 2966692588282075304ull}}, {{8774876717504385950ull, 17217651650362504092ull, 14841187178770776213ull, 3708365735352594130ull}}, {{14707669985295017027ull, 13066875290690259009ull, 13887428005159123037ull, 2317728584595371331ull}}, {{4549529426336607572ull, 2498536058080660050ull, 12747598988021515893ull, 2897160730744214164ull}}, {{14910283819775535273ull, 7734856091028212966ull, 15934498735026894866ull, 3621450913430267705ull}}, {{9414482737864643283ull, 445198076930490400ull, 6083065363501454871ull, 4526813641787834632ull}}, {{5884051711165402052ull, 7195777825722638356ull, 3801915852188409294ull, 2829258526117396645ull}}, {{7355064638956752565ull, 18218094319008073753ull, 9364080833662899521ull, 3536573157646745806ull}}, {{13805516817123328610ull, 8937559843477928479ull, 2481729005223848594ull, 4420716447058432258ull}}, {{15545977038343162237ull, 10197660920601093203ull, 6162766646692293275ull, 2762947779411520161ull}}, {{14820785279501564893ull, 8135390132323978600ull, 12315144326792754498ull, 3453684724264400201ull}}, {{79237525667404500ull, 945865628550197443ull, 1558872353208779411ull, 4317105905330500252ull}}, {{16190424518037985476ull, 16732067082339731065ull, 10197667257610262939ull, 2698191190831562657ull}}, {{6402972592265318133ull, 16303397834497275928ull, 17358770090440216578ull, 3372738988539453321ull}}, {{8003715740331647667ull, 11155875256266819102ull, 7863404557768107011ull, 4215923735674316652ull}}, {{390636319279891888ull, 4666579025953067987ull, 14137999885459842690ull, 2634952334796447907ull}}, {{14323353454382028572ull, 15056595819296110791ull, 13060813838397415458ull, 3293690418495559884ull}}, {{13292505799550147810ull, 9597372737265362681ull, 16326017297996769323ull, 4117113023119449855ull}}, {{1390287097077760526ull, 3692514951577157724ull, 17121289838889062683ull, 2573195639449656159ull}}, {{1737858871347200657ull, 3957671044059251ull, 16789926280183940450ull, 3216494549312070199ull}}, {{16007381644466164533ull, 9228319125659849871ull, 16375721831802537658ull, 4020618186640087749ull}}, {{16922142555432434689ull, 10379385471964794073ull, 12540669154090279988ull, 2512886366650054843ull}}, {{7317620139008379650ull, 12974231839955992592ull, 11064150424185462081ull, 3141107958312568554ull}}, {{9147025173760474562ull, 2382731744662827028ull, 4606815993377051794ull, 3926384947890710693ull}}, {{14940262770455072409ull, 6100893358841654796ull, 5185103005074351323ull, 2453990592431694183ull}}, {{228584389359288896ull, 3014430680124680592ull, 1869692737915551250ull, 3067488240539617729ull}}, {{285730486699111119ull, 12991410387010626548ull, 6948801940821826966ull, 3834360300674522161ull}}, {{9401953591041720258ull, 3507945473454253688ull, 15872216259082111614ull, 2396475187921576350ull}}, {{11752441988802150322ull, 13608303878672592918ull, 10616898286997863709ull, 2995593984901970438ull}}, {{5467180449147912095ull, 3175321793058577436ull, 4047750821892553829ull, 3744492481127463048ull}}, {{12640359817572220867ull, 4290419129875304849ull, 2529844263682846143ull, 2340307800704664405ull}}, {{1965391716683112372ull, 751337893916743158ull, 7773991348030945583ull, 2925384750880830506ull}}, {{11680111682708666273ull, 14774230422678092659ull, 494117148183906170ull, 3656730938601038133ull}}, {{9988453584958444937ull, 9244415991492840016ull, 5229332453657270617ull, 4570913673251297666ull}}, {{6242783490599028086ull, 17306975040751494770ull, 7880018801963182039ull, 2856821045782061041ull}}, {{17026851400103560915ull, 17022032782511980558ull, 14461709520881365453ull, 3571026307227576301ull}}, {{12060192213274675336ull, 7442482922857811986ull, 4242078845819543105ull, 4463782884034470377ull}}, {{12149306151724059989ull, 16180766872854602251ull, 14180514324705684200ull, 2789864302521543985ull}}, {{10574946671227687082ull, 1779214517358701198ull, 3890584850599941539ull, 3487330378151929982ull}}, {{3995311302179833045ull, 16059076201980540210ull, 14086603100104702731ull, 4359162972689912477ull}}, {{7108755582289783557ull, 7731079617024143679ull, 11109969946779133159ull, 2724476857931195298ull}}, {{4274258459434841542ull, 5052163502852791695ull, 4664090396619140641ull, 3405596072413994123ull}}, {{731137055866164024ull, 10926890396993377523ull, 1218426977346537897ull, 4256995090517492654ull}}, {{16597861724412210179ull, 18358521544189330711ull, 14596574916123749897ull, 2660621931573432908ull}}, {{16135641137087874820ull, 9113093874954499677ull, 18245718645154687372ull, 3325777414466791135ull}}, {{6334493366077679812ull, 11391367343693124597ull, 18195462288015971311ull, 4157221768083488919ull}}, {{6264901363012243835ull, 14037133617449284729ull, 18289692957651063925ull, 2598263605052180574ull}}, {{12442812722192692697ull, 3711358966529442199ull, 13638744160209054099ull, 3247829506315225718ull}}, {{10941829884313477968ull, 27512689734414845ull, 7825058163406541816ull, 4059786882894032148ull}}, {{9144486686909617682ull, 17195431084009278ull, 14114033388983864443ull, 2537366801808770092ull}}, {{2207236321782246294ull, 13856552344137175310ull, 17642541736229830553ull, 3171708502260962615ull}}, {{11982417439082583676ull, 3485632374889305425ull, 17441491151859900288ull, 3964635627826203269ull}}, {{571481871785532942ull, 2178520234305815891ull, 13206774979126131632ull, 2477897267391377043ull}}, {{14549410395014079889ull, 2723150292882269863ull, 11896782705480276636ull, 3097371584239221304ull}}, {{13575076975340211957ull, 3403937866102837329ull, 14870978381850345795ull, 3871714480299026630ull}}, {{1566894081946550617ull, 18268362230810130995ull, 4682675470229078217ull, 2419821550186891644ull}}, {{15793675657715351983ull, 9000394733230500031ull, 5853344337786347772ull, 3024776937733614555ull}}, {{15130408553716802075ull, 11250493416538125039ull, 2704994403805546811ull, 3780971172167018194ull}}, {{16374034373714083153ull, 4725715376122634197ull, 6302307520805854661ull, 2363106982604386371ull}}, {{6632484911860440229ull, 10518830238580680651ull, 3266198382579930422ull, 2953883728255482964ull}}, {{3678920121398162383ull, 3925165761371075006ull, 4082747978224913028ull, 3692354660319353705ull}}, {{16134383131156015201ull, 11676600637711697686ull, 14080932532459040402ull, 2307721662699596065ull}}, {{10944606877090243193ull, 5372378760284846300ull, 3766107610291636791ull, 2884652078374495082ull}}, {{13680758596362803992ull, 2103787431928669971ull, 13931006549719321797ull, 3605815097968118852ull}}, {{12489262227026117086ull, 7241420308338225368ull, 17413758187149152246ull, 4507268872460148565ull}}, {{7805788891891323179ull, 18360945747993554567ull, 13189441876181914105ull, 2817043045287592853ull}}, {{5145550096436766069ull, 9116124129709779497ull, 2651744289945228920ull, 3521303806609491067ull}}, {{11043623638973345490ull, 11395155162137224371ull, 17149738417713699862ull, 4401629758261863833ull}}, {{4596421765144646980ull, 2510285957908377328ull, 3801057483429980558ull, 2751018598913664896ull}}, {{5745527206430808724ull, 12361229484240247468ull, 4751321854287475697ull, 3438773248642081120ull}}, {{7181909008038510905ull, 1616478800018145623ull, 5939152317859344622ull, 4298466560802601400ull}}, {{11406222157665151172ull, 14845357305293504726ull, 3711970198662090388ull, 2686541600501625875ull}}, {{5034405660226663157ull, 109952557907329292ull, 28276729900225082ull, 3358177000627032344ull}}, {{6293007075283328946ull, 9360812734238937423ull, 35345912375281352ull, 4197721250783790430ull}}, {{10850658449693162448ull, 5850507958899335889ull, 13857149250516714557ull, 2623575781739869018ull}}, {{18175009080543840963ull, 11924820967051557765ull, 8098064526291117388ull, 3279469727174836273ull}}, {{8883703295397637492ull, 14906026208814447207ull, 14734266676291284639ull, 4099337158968545341ull}}, {{12469843587264605289ull, 16233795408150111360ull, 11514759681895746851ull, 2562085724355340838ull}}, {{15587304484080756611ull, 15680558241760251296ull, 5170077565514907756ull, 3202607155444176048ull}}, {{1037386531391394147ull, 1153953728490762505ull, 6462596956893634696ull, 4003258944305220060ull}}, {{12177581628188091102ull, 721221080306726565ull, 13262495134913297493ull, 2502036840190762537ull}}, {{1386918979952950166ull, 5513212368810796111ull, 2743060863359458154ull, 3127546050238453172ull}}, {{15568706780223351419ull, 16114887497868270946ull, 3428826079199322692ull, 3909432562798066465ull}}, {{14342127756066982541ull, 848432649312893533ull, 13672231345568046443ull, 2443395351748791540ull}}, {{4092601639801564464ull, 14895598866923280629ull, 17090289181960058053ull, 3054244189685989425ull}}, {{9727438068179343484ull, 4784440528371937074ull, 7527803422167908855ull, 3817805237107486782ull}}, {{10691334811039477582ull, 9907804357873542527ull, 93191120427555130ull, 2386128273192179239ull}}, {{8752482495371959073ull, 3161383410487152351ull, 13951546955816607625ull, 2982660341490224048ull}}, {{6328917100787560937ull, 8563415281536328343ull, 17439433694770759531ull, 3728325426862780060ull}}, {{10873102215633307442ull, 3046291541746511262ull, 1676274022376948899ull, 2330203391789237538ull}}, {{4368005732686858494ull, 17642922482465302790ull, 11318714564825961931ull, 2912754239736546922ull}}, {{14683379202713348926ull, 17441967084654240583ull, 4925021169177676606ull, 3640942799670683653ull}}, {{13742537984964298253ull, 12579086818963024921ull, 10767962479899483662ull, 4551178499588354566ull}}, {{1671557212961604552ull, 3250243243424502672ull, 2118290531509789385ull, 2844486562242721604ull}}, {{2089446516202005690ull, 8674490072708016244ull, 2647863164387236731ull, 3555608202803402005ull}}, {{2611808145252507113ull, 6231426572457632401ull, 7921514973911433818ull, 4444510253504252506ull}}, {{13161595136851286706ull, 8506327626213408154ull, 9562632877122034040ull, 2777818908440157816ull}}, {{7228621884209332574ull, 10632909532766760193ull, 11953291096402542550ull, 3472273635550197270ull}}, {{13647463373689053621ull, 4067764879103674433ull, 5718241833648402380ull, 4340342044437746588ull}}, {{1612135580914576657ull, 11765725086294572329ull, 12797273182885027295ull, 2712713777773591617ull}}, {{6626855494570608726ull, 10095470339440827507ull, 2161533423324120407ull, 3390892222216989522ull}}, {{3671883349785873003ull, 8007651905873646480ull, 11925288816009926317ull, 4238615277771236902ull}}, {{2294927093616170627ull, 7310625450384723002ull, 2841619491578816044ull, 2649134548607023064ull}}, {{12092030903874989092ull, 9138281812980903752ull, 3552024364473520055ull, 3311418185758778830ull}}, {{15115038629843736365ull, 6811166247798741786ull, 13663402492446675877ull, 4139272732198473537ull}}, {{14058585162079723132ull, 6562821914087907568ull, 1622097530138090567ull, 2587045457624045961ull}}, {{17573231452599653915ull, 3591841374182496556ull, 6639307931100001113ull, 3233806822030057451ull}}, {{3519795242040015778ull, 9101487736155508600ull, 3687448895447613487ull, 4042258527537571814ull}}, {{2199872026275009861ull, 12605958862738274731ull, 16139713614936922141ull, 2526411579710982383ull}}, {{16584898088125926038ull, 1922390523140679701ull, 15562956000243764773ull, 3158014474638727979ull}}, {{6896064554875243836ull, 7014674172353237531ull, 14842008981877318062ull, 3947518093298409974ull}}, {{2004197337583333446ull, 18219229413002937169ull, 4664569595245935884ull, 2467198808311506234ull}}, {{7116932690406554711ull, 4327292692544119845ull, 15054084030912195664ull, 3083998510389382792ull}}, {{13507851881435581292ull, 5409115865680149806ull, 370860964930692964ull, 3854998137986728491ull}}, {{3830721407469850404ull, 12604069452904869437ull, 16372689167577540766ull, 2409373836241705306ull}}, {{9400087777764700909ull, 6531714779276310988ull, 11242489422617150150ull, 3011717295302131633ull}}, {{11750109722205876136ull, 17388015510950164543ull, 218053722989273975ull, 3764646619127664542ull}}, {{14261347604019754441ull, 17785038721984934695ull, 13971341632150459946ull, 2352904136954790338ull}}, {{13214998486597305147ull, 13007926365626392561ull, 8240805003333299125ull, 2941130171193487923ull}}, {{2683690052964467722ull, 2424849901750826990ull, 5689320235739236003ull, 3676412713991859904ull}}, {{12577984603060360460ull, 16866120432470697449ull, 7111650294674045003ull, 4595515892489824880ull}}, {{943711349271643432ull, 8235482261080491954ull, 4444781434171278127ull, 2872197432806140550ull}}, {{10403011223444330098ull, 5682666807923227038ull, 14779348829568873467ull, 3590246791007675687ull}}, {{3780391992450636814ull, 2491647491476645894ull, 13862500018533703930ull, 4487808488759594609ull}}, {{16197803050563811721ull, 6168965700600291587ull, 1746533483942483100ull, 2804880305474746631ull}}, {{15635567794777376747ull, 7711207125750364484ull, 16018224910210267587ull, 3506100381843433288ull}}, {{1097715669762169318ull, 5027322888760567702ull, 1576037064053282868ull, 4382625477304291611ull}}, {{14521130348883519536ull, 12365448842330130621ull, 17125924229529159456ull, 2739140923315182256ull}}, {{4316354880822235708ull, 15456811052912663277ull, 2960661213201897704ull, 3423926154143977821ull}}, {{10007129619455182538ull, 874269742431277480ull, 8312512534929760035ull, 4279907692679972276ull}}, {{6254456012159489087ull, 16687319653515406089ull, 14418692371185875829ull, 2674942307924982672ull}}, {{12429756033626749262ull, 7024091511612093899ull, 18023365463982344787ull, 3343677884906228340ull}}, {{10925509023606048674ull, 4168428371087729470ull, 4082462756268379368ull, 4179597356132785426ull}}, {{2216757121326392517ull, 2605267731929830919ull, 7163225241095125009ull, 2612248347582990891ull}}, {{16606004456940154358ull, 7868270683339676552ull, 4342345532941518357ull, 3265310434478738614ull}}, {{2310761497465641332ull, 14447024372601983595ull, 14651303953031673754ull, 4081638043098423267ull}}, {{17585127000411883497ull, 13641076251303627650ull, 6851221961431102144ull, 2551023776936514542ull}}, {{12758036713660078563ull, 17051345314129534563ull, 17787399488643653488ull, 3188779721170643177ull}}, {{11335859873647710299ull, 2867437568952366588ull, 8399191305522403149ull, 3985974651463303972ull}}, {{16308284457884594745ull, 4097991489808923069ull, 14472866602806277776ull, 2491234157164564982ull}}, {{6550297517073579719ull, 5122489362261153837ull, 8867711216653071412ull, 3114042696455706228ull}}, {{12799557914769362553ull, 6403111702826442296ull, 11084639020816339265ull, 3892553370569632785ull}}, {{7999723696730851596ull, 15531159860334996195ull, 10370360369130184ull, 2432845856606020491ull}}, {{5387968602486176591ull, 967205751709193628ull, 13848021005743576443ull, 3041057320757525613ull}}, {{6734960753107720738ull, 15044065244918655747ull, 3474968201897306841ull, 3801321650946907017ull}}, {{1903507461478631510ull, 2485011750433077986ull, 13701070172254286536ull, 2375826031841816885ull}}, {{11602756363703065195ull, 3106264688041347482ull, 3291279660035694458ull, 2969782539802271107ull}}, {{5280073417774055685ull, 13106202896906460161ull, 17949157630326781784ull, 3712228174752838883ull}}, {{14829260932177254564ull, 8191376810566537600ull, 8912380509740544663ull, 2320142609220524302ull}}, {{89832091512016588ull, 5627534994780784097ull, 1917103600320905021ull, 2900178261525655378ull}}, {{4723976132817408639ull, 11646104761903368025ull, 11619751537255907084ull, 3625222826907069222ull}}, {{10516656184449148703ull, 14557630952379210031ull, 5301317384715108047ull, 4531528533633836528ull}}, {{13490439142921799796ull, 16016048372878088125ull, 3313323365446942529ull, 2832205333521147830ull}}, {{3027990873370086032ull, 6185002410815446445ull, 13365026243663453970ull, 3540256666901434787ull}}, {{8396674610139995444ull, 16954625050374083864ull, 12094596786151929558ull, 4425320833626793484ull}}, {{5247921631337497153ull, 5984954638056414511ull, 16782495028199731782ull, 2765825521016745927ull}}, {{1948216020744483537ull, 16704565334425293947ull, 16366432766822276823ull, 3457281901270932409ull}}, {{16270328081212768133ull, 16269020649604229529ull, 6622982903245682317ull, 4321602376588665512ull}}, {{3251426023116898227ull, 12473980915216337408ull, 4139364314528551448ull, 2701001485367915945ull}}, {{4064282528896122784ull, 15592476144020421760ull, 9785891411588077214ull, 3376251856709894931ull}}, {{5080353161120153480ull, 10267223143170751392ull, 7620678246057708614ull, 4220314820887368664ull}}, {{3175220725700095925ull, 1805328446054331716ull, 4762923903786067884ull, 2637696763054605415ull}}, {{3969025907125119906ull, 2256660557567914645ull, 1341968861305196951ull, 3297120953818256769ull}}, {{9572968402333787787ull, 16655883752242057018ull, 6289147095058884092ull, 4121401192272820961ull}}, {{10594791269886005271ull, 1186555308296509828ull, 15459931980480272318ull, 2575875745170513100ull}}, {{13243489087357506588ull, 10706566172225413093ull, 878170901890788781ull, 3219844681463141376ull}}, {{2719303303914719523ull, 17994893733709154271ull, 1097713627363485976ull, 4024805851828926720ull}}, {{8617093592587781558ull, 11246808583568221419ull, 686071017102178735ull, 2515503657393079200ull}}, {{6159680972307339044ull, 9446824711032888870ull, 857588771377723419ull, 3144379571741349000ull}}, {{16922973252238949613ull, 7196844870363723183ull, 1071985964222154274ull, 3930474464676686250ull}}, {{17494387310290425364ull, 9109714062404714893ull, 5281677246066234325ull, 2456546540422928906ull}}, {{8032926082580867993ull, 15998828596433281521ull, 15825468594437568714ull, 3070683175528661132ull}}, {{14652843621653472895ull, 10775163708686826093ull, 1335091669337409277ull, 3838353969410826416ull}}, {{11463870272747114512ull, 9040320327142960260ull, 834432293335880798ull, 2398971230881766510ull}}, {{14329837840933893139ull, 2077028372073924517ull, 10266412403524626806ull, 2998714038602208137ull}}, {{4077239245885202712ull, 11819657501947181455ull, 17444701522833171411ull, 3748392548252760171ull}}, {{9465803556319333551ull, 5081442929503294457ull, 8597095442557038180ull, 2342745342657975107ull}}, {{16443940463826554843ull, 6351803661879118071ull, 6134683284768909821ull, 2928431678322468884ull}}, {{15943239561355805650ull, 12551440595776285493ull, 7668354105961137276ull, 3660539597903086105ull}}, {{6093991396412593350ull, 15689300744720356867ull, 14197128650878809499ull, 4575674497378857631ull}}, {{1502901613544176892ull, 7499969956236529090ull, 15790734434440337793ull, 2859796560861786019ull}}, {{11101999053784996923ull, 13986648463723049266ull, 15126732024623034337ull, 3574745701077232524ull}}, {{4654126780376470345ull, 3648252524371647871ull, 461670957069241306ull, 4468432126346540656ull}}, {{9826358265376375822ull, 6891843846159667823ull, 288544348168275816ull, 2792770078966587910ull}}, {{7671261813293081873ull, 8614804807699584779ull, 9584052472065120578ull, 3490962598708234887ull}}, {{4977391248188964438ull, 1545133972769705166ull, 7368379571654012819ull, 4363703248385293609ull}}, {{16945927585400266486ull, 17106609797476923392ull, 16134452278352227771ull, 2727314530240808505ull}}, {{2735665408040781491ull, 16771576228418766337ull, 6333007292658121002ull, 3409143162801010632ull}}, {{8031267778478364768ull, 11741098248668682113ull, 7916259115822651253ull, 4261428953501263290ull}}, {{16548757407617447740ull, 9644029414631620272ull, 9559347965816544937ull, 2663393095938289556ull}}, {{2239202685812258059ull, 16666722786716913245ull, 11949184957270681171ull, 3329241369922861945ull}}, {{7410689375692710477ull, 16221717464968753652ull, 1101423141306187752ull, 4161551712403577432ull}}, {{13855052896662719857ull, 10138573415605471032ull, 688389463316367345ull, 2600969820252235895ull}}, {{17318816120828399821ull, 17284902787934226694ull, 14695544884427622893ull, 3251212275315294868ull}}, {{12425148114180723968ull, 7771070429635619656ull, 18369431105534528617ull, 4064015344144118585ull}}, {{7765717571362952480ull, 16386134064590732045ull, 4563365413317998529ull, 2540009590090074116ull}}, {{14318832982631078504ull, 6647609525456251344ull, 5704206766647498162ull, 3175011987612592645ull}}, {{17898541228288848130ull, 17532883943675089988ull, 11741944476736760606ull, 3968764984515740806ull}}, {{1963216230825754273ull, 6346366446369543339ull, 2727029279533087475ull, 2480478115322338004ull}}, {{16289078343814356553ull, 3321272039534541269ull, 3408786599416359344ull, 3100597644152922505ull}}, {{6526289874485781980ull, 4151590049418176587ull, 8872669267697837084ull, 3875747055191153131ull}}, {{1773088162339919785ull, 11818115817741136175ull, 3239575283097454225ull, 2422341909494470707ull}}, {{16051418258207063444ull, 937586716894256506ull, 17884527159153981494ull, 3027927386868088383ull}}, {{10840900785904053496ull, 10395355432972596441ull, 17743972930515088963ull, 3784909233585110479ull}}, {{18304778037258503195ull, 4191254136394178823ull, 18007512109213012458ull, 2365568270990694049ull}}, {{18269286528145741090ull, 14462439707347499337ull, 8674332081234101860ull, 2956960338738367562ull}}, {{9001550104900012651ull, 18078049634184374172ull, 1619543064687851517ull, 3696200423422959453ull}}, {{14849340852417283715ull, 13604624030578927809ull, 3318057424643601150ull, 2310125264639349658ull}}, {{4726618010239440931ull, 7782408001368883954ull, 13370943817659277246ull, 2887656580799187072ull}}, {{15131644549654076972ull, 504637964856329134ull, 16713679772074096558ull, 3609570725998983840ull}}, {{9691183650212820407ull, 9854169492925187226ull, 2445355641383069081ull, 4511963407498729801ull}}, {{10668675799810400659ull, 17688070979146711776ull, 13057562321932887935ull, 2819977129686706125ull}}, {{13335844749763000823ull, 17498402705506001816ull, 2486894847133946207ull, 3524971412108382657ull}}, {{16669805937203751029ull, 17261317363455114366ull, 7720304577344820663ull, 4406214265135478321ull}}, {{5806942692324956489ull, 17705852379800528335ull, 16354405406908982674ull, 2753883915709673950ull}}, {{2646992346978807707ull, 12908943437895884611ull, 11219634721781452535ull, 3442354894637092438ull}}, {{17143798489005673346ull, 11524493278942467859ull, 4801171365372039861ull, 4302943618296365548ull}}, {{8409031046414851889ull, 9508651308552736364ull, 12224104140212300721ull, 2689339761435228467ull}}, {{10511288808018564862ull, 16497500154118308359ull, 10668444156837987997ull, 3361674701794035584ull}}, {{8527424991595818173ull, 6786817137365721737ull, 13335555196047484997ull, 4202093377242544480ull}}, {{16858855665815856118ull, 6547603720067270037ull, 8334721997529678123ull, 2626308360776590300ull}}, {{7238511526987656436ull, 3572818631656699643ull, 10418402496912097654ull, 3282885450970737875ull}}, {{4436453390307182641ull, 13689395326425650362ull, 8411317102712734163ull, 4103606813713422344ull}}, {{7384469387369377055ull, 6250029069802337524ull, 5257073189195458852ull, 2564754258570888965ull}}, {{9230586734211721318ull, 7812536337252921905ull, 11183027504921711469ull, 3205942823213611206ull}}, {{16149919436192039551ull, 14377356439993540285ull, 4755412344297363528ull, 4007428529017014008ull}}, {{12399542656833718672ull, 8985847774995962678ull, 2972132715185852205ull, 2504642830635633755ull}}, {{6276056284187372532ull, 15843995737172341252ull, 17550223949264478968ull, 3130803538294542193ull}}, {{7845070355234215664ull, 1358250597755874949ull, 8102721881298434999ull, 3913504422868177742ull}}, {{7209011981235078742ull, 7766435651238503699ull, 452515157384133970ull, 2445940264292611089ull}}, {{4399578958116460524ull, 484672527193353816ull, 5177329965157555367ull, 3057425330365763861ull}}, {{5499473697645575655ull, 14440898714273855982ull, 11083348474874332112ull, 3821781662957204826ull}}, {{17272229116310648496ull, 9025561696421159988ull, 11538778815223845474ull, 2388613539348253016ull}}, {{3143542321678759004ull, 2058580083671674178ull, 14423473519029806843ull, 2985766924185316270ull}}, {{13152799938953224563ull, 16408283159871756434ull, 8805969861932482745ull, 3732208655231645338ull}}, {{12832185980273153256ull, 3337647947278765915ull, 10115417182135189620ull, 2332630409519778336ull}}, {{11428546456914053666ull, 4172059934098457394ull, 12644271477668987025ull, 2915788011899722920ull}}, {{5062311034287791275ull, 9826760936050459647ull, 15805339347086233781ull, 3644735014874653650ull}}, {{1716202774432351189ull, 16895137188490462463ull, 10533302147003016418ull, 4555918768593317063ull}}, {{7990155761661301349ull, 15171146761233926943ull, 13500842869517967117ull, 2847449230370823164ull}}, {{5376008683649238783ull, 5128875396260244967ull, 16876053586897458897ull, 3559311537963528955ull}}, {{2108324836134160574ull, 11022780263752694113ull, 16483380965194435717ull, 4449139422454411194ull}}, {{12846918068652320119ull, 9195080674059127772ull, 14913799121673910227ull, 2780712139034006996ull}}, {{16058647585815400149ull, 6882164824146521811ull, 195504828382836168ull, 3475890173792508746ull}}, {{15461623463841862282ull, 8602706030183152264ull, 9467753072333321018ull, 4344862717240635932ull}}, {{9663514664901163926ull, 9988377287291858069ull, 15140717707063101444ull, 2715539198275397457ull}}, {{16691079349553842812ull, 12485471609114822586ull, 5090839078546713093ull, 3394423997844246822ull}}, {{11640477150087527707ull, 1771781456111364521ull, 15586920885038167175ull, 4243029997305308527ull}}, {{357769191163622961ull, 8024892437710684682ull, 16659354580789936340ull, 2651893748315817829ull}}, {{9670583525809304509ull, 10031115547138355852ull, 6989135170705256713ull, 3314867185394772287ull}}, {{12088229407261630636ull, 17150580452350332719ull, 4124732944954182987ull, 4143583981743465359ull}}, {{14472672407179601004ull, 8413269773505263997ull, 9495487118237446223ull, 2589739988589665849ull}}, {{4255782453692337542ull, 5904901198454192093ull, 16481044916224195683ull, 3237174985737082311ull}}, {{9931414085542809832ull, 2769440479640352212ull, 15989620126852856700ull, 4046468732171352889ull}}, {{15430505840319031953ull, 10954272336629995940ull, 3075983551641953581ull, 2529042957607095556ull}}, {{841388226689238325ull, 18304526439214882830ull, 3844979439552441976ull, 3161303697008869445ull}}, {{10275107320216323715ull, 4433913975309051921ull, 9417910317867940375ull, 3951629621261086806ull}}, {{17951157121203672082ull, 9688725262209239306ull, 1274507930240074830ull, 2469768513288179254ull}}, {{13215574364649814294ull, 2887534540906773325ull, 10816506949654869346ull, 3087210641610224067ull}}, {{2684409900530104156ull, 12832790212988242465ull, 8908947668641198778ull, 3859013302012780084ull}}, {{13206971233899784857ull, 12632179901545039444ull, 14791464329755525044ull, 2411883313757987552ull}}, {{16508714042374731072ull, 15790224876931299305ull, 42586338484854689ull, 3014854142197484441ull}}, {{6800834497686250127ull, 5902723040881960420ull, 4664918941533456266ull, 3768567677746855551ull}}, {{13473893597908682138ull, 8300887918978613166ull, 9833103366099492022ull, 2355354798591784719ull}}, {{7618994960531076864ull, 1152737861868490650ull, 7679693189196977124ull, 2944193498239730899ull}}, {{300371663809070272ull, 1440922327335613313ull, 4987930468068833501ull, 3680241872799663624ull}}, {{4987150598188725744ull, 6412838927596904545ull, 6234913085086041876ull, 4600302340999579530ull}}, {{14646184169936423350ull, 13231396366602841148ull, 8508506696606164076ull, 2875188963124737206ull}}, {{18307730212420529188ull, 16539245458253551435ull, 1412261333902929287ull, 3593986203905921508ull}}, {{18272976747098273580ull, 16062370804389551390ull, 1765326667378661609ull, 4492482754882401885ull}}, {{6808924448509033084ull, 3121452725102387763ull, 3409172176325357458ull, 2807801721801501178ull}}, {{3899469542208903451ull, 13125187943232760512ull, 13484837257261472630ull, 3509752152251876472ull}}, {{4874336927761129313ull, 7183112892186174832ull, 16856046571576840788ull, 4387190190314845590ull}}, {{3046460579850705821ull, 13712817594471135078ull, 5923343088808137588ull, 2741993868946778494ull}}, {{13031447761668158084ull, 17141021993088918847ull, 16627550897864947793ull, 3427492336183473117ull}}, {{11677623683657809701ull, 7591219436078984847ull, 6949380567049021030ull, 4284365420229341397ull}}, {{14216043829927212919ull, 132826129121977625ull, 6649205863619332096ull, 2677728387643338373ull}}, {{3934996732126852437ull, 166032661402472032ull, 12923193347951553024ull, 3347160484554172966ull}}, {{4918745915158565546ull, 207540826753090040ull, 6930619648084665472ull, 4183950605692716208ull}}, {{3074216196974103467ull, 129713016720681275ull, 4331637280052915920ull, 2614969128557947630ull}}, {{17677828301499793045ull, 162141270900851593ull, 14637918636920920708ull, 3268711410697434537ull}}, {{8262227321592577594ull, 202676588626064492ull, 4462340240868987173ull, 4085889263371793172ull}}, {{14387264112850136805ull, 2432515877104984259ull, 12012334687397892791ull, 2553680789607370732ull}}, {{13372394122635283102ull, 16875702901663394036ull, 15015418359247365988ull, 3192100987009213415ull}}, {{16715492653294103877ull, 2647884553369690929ull, 14157586930631819582ull, 3990126233761516769ull}}, {{3529653880667733067ull, 15489985901138220543ull, 1930962804003805382ull, 2493828896100947981ull}}, {{18247125406116830046ull, 10139110339567999870ull, 7025389523432144632ull, 3117286120126184976ull}}, {{13585534720791261749ull, 12673887924459999838ull, 8781736904290180790ull, 3896607650157731220ull}}, {{3879273182067150689ull, 3309493934360111995ull, 14711957602036138802ull, 2435379781348582012ull}}, {{237405459156550458ull, 13360239454804915802ull, 18389947002545173502ull, 3044224726685727515ull}}, {{9520128860800463880ull, 7476927281651368944ull, 18375747734754078974ull, 3805280908357159394ull}}, {{5950080538000289925ull, 61393532604717686ull, 16096528352648687263ull, 2378300567723224621ull}}, {{16660972709355138214ull, 13911799971038060819ull, 6285602385528695366ull, 2972875709654030777ull}}, {{16214529868266534864ull, 8166377926942800216ull, 12468689000338257112ull, 3716094637067538471ull}}, {{10134081167666584290ull, 5103986204339250135ull, 14710459652852492551ull, 2322559148167211544ull}}, {{8055915441155842458ull, 1768296736996674765ull, 18388074566065615689ull, 2903198935209014430ull}}, {{14681580319872190977ull, 6822056939673231360ull, 13761721170727243803ull, 3628998669011268038ull}}, {{18351975399840238721ull, 3915885156164151296ull, 7978779426554278946ull, 4536248336264085048ull}}, {{11469984624900149201ull, 7059114241029982464ull, 4986737141596424341ull, 2835155210165053155ull}}, {{14337480781125186501ull, 13435578819714865984ull, 1621735408568142522ull, 3543944012706316444ull}}, {{17921850976406483126ull, 7571101487788806672ull, 2027169260710178153ull, 4429930015882895555ull}}, {{11201156860254051954ull, 16261153475936473930ull, 17407881852439719009ull, 2768706259926809721ull}}, {{4778074038462789134ull, 6491383789638428701ull, 7924794260267485050ull, 3460882824908512152ull}}, {{10584278566505874322ull, 17337601773902811684ull, 9905992825334356312ull, 4326103531135640190ull}}, {{15838546140920947259ull, 10836001108689257302ull, 1579559497406584791ull, 2703814706959775119ull}}, {{10574810639296408266ull, 8933315367434183724ull, 15809507427040394701ull, 3379768383699718898ull}}, {{13218513299120510332ull, 15778330227720117559ull, 10538512246945717568ull, 4224710479624648623ull}}, {{15179099839591400814ull, 9861456392325073474ull, 13504099181982155336ull, 2640444049765405389ull}}, {{9750502762634475209ull, 12326820490406341843ull, 3045065922195530458ull, 3300555062206756737ull}}, {{7576442434865706107ull, 6185153576153151496ull, 8418018421171800977ull, 4125693827758445921ull}}, {{4735276521791066317ull, 15394936031164189445ull, 16790476559300845370ull, 2578558642349028700ull}}, {{10530781670666220801ull, 10020298002100460998ull, 2541351625416505097ull, 3223198302936285876ull}}, {{3940105051478000193ull, 17137058521052964152ull, 3176689531770631371ull, 4028997878670357345ull}}, {{2462565657173750121ull, 8404818566444408643ull, 13514646003425114367ull, 2518123674168973340ull}}, {{16913265126749351363ull, 5894337189628122899ull, 16893307504281392959ull, 3147654592711216675ull}}, {{16529895390009301299ull, 2756235468607765720ull, 16504948361924353295ull, 3934568240889020844ull}}, {{10331184618755813312ull, 8640176195520935431ull, 1092220689347945001ull, 2459105150555638028ull}}, {{8302294755017378736ull, 15411906262828557193ull, 1365275861684931251ull, 3073881438194547535ull}}, {{14989554462199111324ull, 14653196810108308587ull, 15541652882388327776ull, 3842351797743184418ull}}, {{7062628529660750626ull, 9158248006317692867ull, 14325219069920092764ull, 2401469873589490261ull}}, {{4216599643648550378ull, 11447810007897116084ull, 4071465782117952243ull, 3001837341986862827ull}}, {{5270749554560687972ull, 9698076491444007201ull, 477646209220052400ull, 3752296677483578534ull}}, {{14823433517668899743ull, 6061297807152504500ull, 14133586936044696462ull, 2345185423427236583ull}}, {{82547823376573062ull, 16799994295795406434ull, 13055297651628482673ull, 2931481779284045729ull}}, {{9326556816075492136ull, 7164934814462094330ull, 2484064009253439630ull, 3664352224105057162ull}}, {{2434823983239589362ull, 18179540554932393721ull, 12328452048421575345ull, 4580440280131321452ull}}, {{13050980035593213111ull, 4444683819191664219ull, 16928654567118260399ull, 2862775175082075907ull}}, {{11702039026064128485ull, 944168755562192370ull, 16549132190470437595ull, 3578468968852594884ull}}, {{5404176745725384798ull, 15015268999734904175ull, 2239671164378495377ull, 4473086211065743606ull}}, {{10295139493719447355ull, 2467014097193233253ull, 15234852533018723323ull, 2795678881916089753ull}}, {{17480610385576697098ull, 16918825676773705278ull, 5208507610991240441ull, 3494598602395112192ull}}, {{12627390945116095564ull, 7313474040684967886ull, 6510634513739050552ull, 4368248252993890240ull}}, {{3280433322270171824ull, 4570921275428104929ull, 4069146571086906595ull, 2730155158121181400ull}}, {{8712227671265102683ull, 1101965575857743257ull, 5086433213858633244ull, 3412693947651476750ull}}, {{15501970607508766258ull, 1377456969822179071ull, 15581413554178067363ull, 4265867434564345937ull}}, {{16606260657334060768ull, 17001811670634719583ull, 2820854443720210245ull, 2666167146602716211ull}}, {{16146139803240188055ull, 7417206533011235767ull, 17361126109932426519ull, 3332708933253395263ull}}, {{15570988735622847165ull, 4659822147836656805ull, 17089721618988145245ull, 4165886166566744079ull}}, {{12037710968977973430ull, 5218231851611604455ull, 17598605039508672634ull, 2603678854104215049ull}}, {{10435452692795078884ull, 15746161851369281377ull, 8163198244103677080ull, 3254598567630268812ull}}, {{17656001884421236509ull, 1235958240502050105ull, 10203997805129596351ull, 4068248209537836015ull}}, {{4117472150122190962ull, 7690002927954863172ull, 13295027655847079575ull, 2542655130961147509ull}}, {{5146840187652738702ull, 5000817641516191061ull, 2783726514526685757ull, 3178318913701434387ull}}, {{11045236252993311282ull, 10862708070322626730ull, 17314716198440520908ull, 3972898642126792983ull}}, {{11514958676548207455ull, 16012564580806417514ull, 17739226651666407423ull, 2483061651329245614ull}}, {{5170326308830483511ull, 15404019707580633989ull, 12950661277728233471ull, 3103827064161557018ull}}, {{11074593904465492293ull, 14643338616048404582ull, 6964954560305516031ull, 3879783830201946273ull}}, {{2309935171863544779ull, 16069615662671334720ull, 15882311646259417279ull, 2424864893876216420ull}}, {{2887418964829430974ull, 15475333559911780496ull, 1406145484114719983ull, 3031081117345270526ull}}, {{3609273706036788717ull, 14732480931462337716ull, 10981053891998175787ull, 3788851396681588157ull}}, {{11479168103127768756ull, 6901957572950267120ull, 9169001691712553819ull, 2368032122925992598ull}}, {{14348960128909710945ull, 4015760947760445996ull, 2237880077785916466ull, 2960040153657490748ull}}, {{17936200161137138682ull, 14243073221555333303ull, 2797350097232395582ull, 3700050192071863435ull}}, {{18127654128351793532ull, 4290234745044695410ull, 17889244875266104903ull, 2312531370044914646ull}}, {{13436195623584966107ull, 751107412878481359ull, 13138184057227855321ull, 2890664212556143308ull}}, {{12183558511053819730ull, 5550570284525489603ull, 16422730071534819151ull, 3613330265695179135ull}}, {{10617762120389886758ull, 2326526837229474100ull, 15916726570991136035ull, 4516662832118973919ull}}, {{15859473362098455032ull, 17594980337764278976ull, 16865483134510541877ull, 2822914270074358699ull}}, {{1377597628913517174ull, 8158667366923185009ull, 16470167899710789443ull, 3528642837592948374ull}}, {{6333683054569284371ull, 5586648190226593357ull, 11364337837783710996ull, 4410803546991185468ull}}, {{6264394918319496684ull, 12715027155746396656ull, 16326083185469595180ull, 2756752216869490917ull}}, {{7830493647899370855ull, 15893783944682995820ull, 6572545926554830263ull, 3445940271086863647ull}}, {{9788117059874213569ull, 15255543912426356871ull, 3603996389766149925ull, 4307425338858579559ull}}, {{13035102190062465337ull, 11840557954480166996ull, 9170026771244925559ull, 2692140836786612224ull}}, {{16293877737578081671ull, 10189011424672820841ull, 11462533464056156949ull, 3365176045983265280ull}}, {{6532289116690438376ull, 17347950299268413956ull, 14328166830070196186ull, 4206470057479081600ull}}, {{13306052734786299793ull, 15454154955470146626ull, 8955104268793872616ull, 2629043785924426000ull}}, {{7409193881628098934ull, 870949620628131667ull, 11193880335992340771ull, 3286304732405532500ull}}, {{4649806333607735763ull, 14923745081067328296ull, 13992350419990425963ull, 4107880915506915625ull}}, {{2906128958504834852ull, 7021497666453386233ull, 1827689984852934371ull, 2567425572191822266ull}}, {{8244347216558431469ull, 4165186064639344887ull, 11507984517920943772ull, 3209281965239777832ull}}, {{5693748002270651432ull, 5206482580799181109ull, 14384980647401179715ull, 4011602456549722290ull}}, {{5864435510632851097ull, 948208603785794241ull, 13602298923053125226ull, 2507251535343576431ull}}, {{11942230406718451775ull, 10408632791587018609ull, 12391187635389018628ull, 3134064419179470539ull}}, {{1092729953115901007ull, 13010790989483773262ull, 10877298525808885381ull, 3917580523974338174ull}}, {{14518014275979601842ull, 10437587377641052240ull, 2186625560203165459ull, 2448487827483961359ull}}, {{18147517844974502302ull, 8435298203623927396ull, 16568340005536120536ull, 3060609784354951698ull}}, {{4237653232508576261ull, 10544122754529909246ull, 11487052970065374862ull, 3825762230443689623ull}}, {{16483591325600023875ull, 1978390703153805374ull, 14096937133931941145ull, 2391101394027306014ull}}, {{11381117120145254036ull, 7084674397369644622ull, 8397799380560150623ull, 2988876742534132518ull}}, {{5003024363326791737ull, 4244156978284667874ull, 1273877188845412471ull, 3736095928167665648ull}}, {{7738576245506632740ull, 9570127139068999277ull, 796173243028382794ull, 2335059955104791030ull}}, {{14284906325310678829ull, 2739286886981473288ull, 10218588590640254301ull, 2918824943880988787ull}}, {{17856132906638348536ull, 8035794627154229514ull, 8161549719872929972ull, 3648531179851235984ull}}, {{13096794096443159862ull, 10044743283942786893ull, 10201937149841162465ull, 4560663974814044980ull}}, {{10491339319490668866ull, 17807179598532711568ull, 15599582755505502348ull, 2850414984258778112ull}}, {{13114174149363336082ull, 3812230424456337844ull, 1052734370672326320ull, 3563018730323472641ull}}, {{16392717686704170102ull, 4765288030570422305ull, 5927603981767795804ull, 4453773412904340801ull}}, {{3327919526549024458ull, 12201677055961289749ull, 15233967534673342137ull, 2783608383065213000ull}}, {{8771585426613668477ull, 1417038264669448474ull, 595715344632126056ull, 3479510478831516251ull}}, {{1741109746412309788ull, 1771297830836810593ull, 14579702236072321282ull, 4349388098539395313ull}}, {{12617408637576163377ull, 5718747162700394524ull, 2194784869904118945ull, 2718367561587122071ull}}, {{15771760796970204222ull, 11760119971802881059ull, 16578539142662312393ull, 3397959451983902588ull}}, {{15103014977785367373ull, 865091909471437612ull, 2276429854618338876ull, 4247449314979878236ull}}, {{216012324261078800ull, 9764054480274424316ull, 10646140695991237605ull, 2654655821862423897ull}}, {{270015405326348500ull, 16816754118770418299ull, 17919361888416434910ull, 3318319777328029871ull}}, {{14172577311940099337ull, 11797570611608247065ull, 17787516342093155734ull, 4147899721660037339ull}}, {{1940331792321480230ull, 2761795613827766512ull, 8811354704594528382ull, 2592437326037523337ull}}, {{2425414740401850287ull, 12675616554139483948ull, 15625879399170548381ull, 3240546657546904171ull}}, {{3031768425502312859ull, 2009462637392191223ull, 14920663230535797573ull, 4050683321933630214ull}}, {{8812384293580027393ull, 3561757157583813466ull, 4713728500657485579ull, 2531677076208518884ull}}, {{1792108330120258433ull, 18287254502261930545ull, 5892160625821856973ull, 3164596345260648605ull}}, {{6851821431077710945ull, 9024010072545249469ull, 11976886800704709121ull, 3955745431575810756ull}}, {{6588231403637263293ull, 17169221341409250678ull, 16708926287295219008ull, 2472340894734881722ull}}, {{17458661291401354924ull, 3014782603052011731ull, 11662785822264247953ull, 3090426118418602153ull}}, {{17211640595824305751ull, 8380164272242402568ull, 743424222548146229ull, 3863032648023252692ull}}, {{10757275372390191095ull, 7543445679365195557ull, 9688012175947367201ull, 2414395405014532932ull}}, {{18058280233915126772ull, 14040993117633882350ull, 12110015219934209001ull, 3017994256268166165ull}}, {{13349478255539132657ull, 3716183341760189226ull, 1302460969635597540ull, 3772492820335207707ull}}, {{12955109928139345815ull, 11545986625454894074ull, 16954939170518106126ull, 2357808012709504816ull}}, {{6970515373319406460ull, 5209111244963841785ull, 2746929889438081042ull, 2947260015886881021ull}}, {{13324830235076645979ull, 15734761093059578039ull, 8045348380224989206ull, 3684075019858601276ull}}, {{12044351775418419570ull, 10445079329469696741ull, 10056685475281236508ull, 4605093774823251595ull}}, {{9833562868850206183ull, 15751546617773336271ull, 3979585412837078865ull, 2878183609264532247ull}}, {{7680267567635369825ull, 5854375216934506627ull, 362795747618960678ull, 3597729511580665309ull}}, {{4988648441116824377ull, 16541341058022909092ull, 5065180702951088751ull, 4497161889475831636ull}}, {{12341277312552791044ull, 17255867188905400038ull, 12389109976199206277ull, 2810726180922394772ull}}, {{6203224603836212997ull, 7734775930849586336ull, 15486387470249007847ull, 3513407726152993465ull}}, {{7754030754795266246ull, 5056783895134595016ull, 5522926282529096097ull, 4391759657691241832ull}}, {{4846269221747041404ull, 14689704980527591645ull, 3451828926580685060ull, 2744849786057026145ull}}, {{10669522545611189659ull, 18362131225659489556ull, 8926472176653244229ull, 3431062232571282681ull}}, {{13336903182013987073ull, 9117605976792198233ull, 15769776239243943191ull, 4288827790714103351ull}}, {{1418035461117660065ull, 12616032763136205752ull, 16773639177168546350ull, 2680517369196314594ull}}, {{1772544326397075081ull, 6546668917065481382ull, 11743676934605907130ull, 3350646711495393243ull}}, {{11439052444851119659ull, 17406708183186627535ull, 10067910149829996008ull, 4188308389369241554ull}}, {{14066936805673031643ull, 10879192614491642209ull, 10904129862071135409ull, 2617692743355775971ull}}, {{3748612951809125842ull, 18210676786541940666ull, 9018476309161531357ull, 3272115929194719964ull}}, {{13909138226616183110ull, 8928287927895262120ull, 11273095386451914197ull, 4090144911493399955ull}}, {{8693211391635114444ull, 7886022964148232777ull, 4739841607318752421ull, 2556340569683374972ull}}, {{15478200257971280959ull, 14469214723612678875ull, 5924802009148440526ull, 3195425712104218715ull}}, {{14736064304036713295ull, 8863146367661072786ull, 2794316493008162754ull, 3994282140130273394ull}}, {{13821726208450333713ull, 10151152498215558395ull, 6358133826557489625ull, 2496426337581420871ull}}, {{12665471742135529238ull, 17300626641196835898ull, 3335981264769474127ull, 3120532921976776089ull}}, {{6608467640814635739ull, 17014097283068656969ull, 8781662599389230563ull, 3900666152470970111ull}}, {{15659507321577617097ull, 8327967792704216653ull, 12406068152259350958ull, 2437916345294356319ull}}, {{5739326096689857659ull, 1186587704025495009ull, 10895899171896800794ull, 3047395431617945399ull}}, {{11785843639289709978ull, 10706606666886644569ull, 9008187946443613088ull, 3809244289522431749ull}}, {{448623246914986880ull, 6691629166804152856ull, 7935960475740952132ull, 2380777680951519843ull}}, {{560779058643733600ull, 8364536458505191070ull, 5308264576248802261ull, 2975972101189399804ull}}, {{9924345860159442808ull, 15067356591558876741ull, 6635330720311002826ull, 3719965126486749755ull}}, {{8508559171813345707ull, 14028783888151685867ull, 1841238690980682814ull, 2324978204054218597ull}}, {{6024012946339294230ull, 8312607823334831526ull, 6913234382153241422ull, 2906222755067773246ull}}, {{16753388219778893595ull, 1167387742313763599ull, 17864915014546327586ull, 3632778443834716557ull}}, {{16330049256296229090ull, 10682606714746980307ull, 8496085712900745770ull, 4540973054793395697ull}}, {{7900437775971449230ull, 11288315215144250596ull, 16839268616631435866ull, 2838108159245872310ull}}, {{9875547219964311537ull, 4887021982075537437ull, 11825713733934519025ull, 3547635199057340388ull}}, {{16956120043382777325ull, 10720463496021809700ull, 14782142167418148781ull, 4434543998821675485ull}}, {{1374202990259460020ull, 9006132694227325015ull, 11544681863850036940ull, 2771589999263547178ull}}, {{15552811793106488737ull, 11257665867784156268ull, 5207480292957770367ull, 3464487499079433973ull}}, {{994270667673559305ull, 9460396316302807432ull, 11121036384624600863ull, 4330609373849292466ull}}, {{621419167295974566ull, 12830276725330336501ull, 11562333758817763443ull, 2706630858655807791ull}}, {{5388459977547356111ull, 11426159888235532722ull, 9841231180094816400ull, 3383288573319759739ull}}, {{15958947008788970947ull, 14282699860294415902ull, 7689852956691132596ull, 4229110716649699674ull}}, {{5362655862065718938ull, 18150059449538785747ull, 9417844116359345776ull, 2643194197906062296ull}}, {{2091633809154760769ull, 4240830238213930568ull, 11772305145449182221ull, 3303992747382577870ull}}, {{2614542261443450961ull, 9912723816194801114ull, 5492009394956701968ull, 4129990934228222338ull}}, {{6245774931829544755ull, 6195452385121750696ull, 8044191890275326634ull, 2581244333892638961ull}}, {{7807218664786930943ull, 16967687518256964178ull, 14666925881271546196ull, 3226555417365798701ull}}, {{535651294128887871ull, 2762865324111653607ull, 4498599296307269034ull, 4033194271707248377ull}}, {{7252311086471636775ull, 6338476845997171408ull, 14340839606260512906ull, 2520746419817030235ull}}, {{9065388858089545969ull, 17146468094351240068ull, 13314363489398253228ull, 3150933024771287794ull}}, {{11331736072611932461ull, 2986341044229498469ull, 7419582324893040728ull, 3938666280964109743ull}}, {{9388178054596151740ull, 1866463152643436543ull, 11554767980699232311ull, 2461666425602568589ull}}, {{7123536549817801771ull, 16168136996086459391ull, 608401920591876676ull, 3077083032003210737ull}}, {{4292734668844864310ull, 1763427171398522623ull, 5372188419167233750ull, 3846353790004013421ull}}, {{9600488195669122050ull, 14937200037406240351ull, 5663460771193215045ull, 2403971118752508388ull}}, {{7388924226159014658ull, 4836441991475636727ull, 7079325963991518807ull, 3004963898440635485ull}}, {{4624469264271380419ull, 1433866470917158005ull, 13460843473416786413ull, 3756204873050794356ull}}, {{5196136299383306714ull, 3202009553536917705ull, 17636399207740267316ull, 2347628045656746472ull}}, {{11106856392656521296ull, 4002511941921147131ull, 3598754935965782529ull, 2934535057070933091ull}}, {{9271884472393263716ull, 9614825945828821818ull, 18333501725239391873ull, 3668168821338666363ull}}, {{2366483553636803837ull, 16630218450713415177ull, 18305191138121851937ull, 4585211026673332954ull}}, {{13008267267091472159ull, 3476357504054802629ull, 16052430479753545365ull, 2865756891670833096ull}}, {{2425276028582176486ull, 8957132898495891191ull, 1618794025982380090ull, 3582196114588541371ull}}, {{16866653091009884319ull, 1973044086265088180ull, 15858550587760138825ull, 4477745143235676713ull}}, {{1318286145026401892ull, 12762367599984149873ull, 2994065089709004909ull, 2798590714522297946ull}}, {{6259543699710390269ull, 2117901444698023629ull, 12965953398991031945ull, 3498238393152872432ull}}, {{12436115643065375740ull, 7259062824299917440ull, 16207441748738789931ull, 4372797991441090540ull}}, {{7772572276915859837ull, 2231071255973754448ull, 906279056106967899ull, 2732998744650681588ull}}, {{9715715346144824797ull, 16623897125249356772ull, 1132848820133709873ull, 3416248430813351985ull}}, {{12144644182681030996ull, 6944813351279532253ull, 6027747043594525246ull, 4270310538516689981ull}}, {{9896245623389338325ull, 18175566399831871370ull, 6073184911460272230ull, 2668944086572931238ull}}, {{3146934992381897098ull, 13496085962935063405ull, 16814853176180116096ull, 3336180108216164047ull}}, {{8545354758904759276ull, 16870107453668829256ull, 16406880451797757216ull, 4170225135270205059ull}}, {{5340846724315474548ull, 10543817158543018285ull, 7948457273159904308ull, 2606390709543878162ull}}, {{11287744423821731088ull, 13179771448178772856ull, 712199554595104577ull, 3257988386929847703ull}}, {{14109680529777163860ull, 2639656254941302358ull, 14725307498526044434ull, 4072485483662309628ull}}, {{4206864312683339509ull, 6261471177765701878ull, 18426689223433553579ull, 2545303427288943517ull}}, {{14481952427708950194ull, 3215152953779739443ull, 9198303474009778262ull, 3181629284111179397ull}}, {{13490754516208799838ull, 13242313229079450112ull, 16109565360939610731ull, 3977036605138974246ull}}, {{8431721572630499899ull, 5970602758960962368ull, 5456792332159868803ull, 2485647878211858904ull}}, {{10539651965788124874ull, 2851567430273815056ull, 6820990415199836004ull, 3107059847764823630ull}}, {{13174564957235156092ull, 3564459287842268820ull, 17749610055854570813ull, 3883824809706029537ull}}, {{17457475135126748366ull, 4533630064115111964ull, 4175977257268024902ull, 2427390506066268461ull}}, {{3375099845198883841ull, 14890409616998665764ull, 9831657590012419031ull, 3034238132582835576ull}}, {{4218874806498604801ull, 14001326002820944301ull, 12289571987515523789ull, 3792797665728544470ull}}, {{4942639763275321953ull, 11056671760976784140ull, 3069296473769814464ull, 2370498541080340294ull}}, {{6178299704094152441ull, 13820839701220980175ull, 13059992629067043888ull, 2963123176350425367ull}}, {{3111188611690302647ull, 17276049626526225219ull, 11713304767906416956ull, 3703903970438031709ull}}, {{18085393946802296819ull, 1574158979724114953ull, 9626658489155204550ull, 2314939981523769818ull}}, {{8771684378220707311ull, 11191070761509919500ull, 2809951074589229879ull, 2893674976904712273ull}}, {{10964605472775884139ull, 9377152433460011471ull, 8124124861663925253ull, 3617093721130890341ull}}, {{9094070822542467270ull, 16333126560252402243ull, 14766842095507294470ull, 4521367151413612926ull}}, {{3377951254875348092ull, 5596518081730363498ull, 4617590291264671140ull, 2825854469633508079ull}}, {{13445811105448960922ull, 6995647602162954372ull, 1160301845653451021ull, 3532318087041885099ull}}, {{16807263881811201153ull, 13356245521131080869ull, 15285435362348977488ull, 4415397608802356373ull}}, {{12810382935345694673ull, 8347653450706925543ull, 11859240110681804882ull, 2759623505501472733ull}}, {{11401292650754730437ull, 1211194776528881121ull, 988992083070092391ull, 3449529381876840917ull}}, {{416557758161249334ull, 15349051525943265114ull, 5847926122265003392ull, 4311911727346051146ull}}, {{4872034617278168738ull, 9593157203714540696ull, 8266639844843015024ull, 2694944829591281966ull}}, {{6090043271597710922ull, 11991446504643175870ull, 1109927769198992972ull, 3368681036989102458ull}}, {{16835926126351914461ull, 14989308130803969837ull, 10610781748353517023ull, 4210851296236378072ull}}, {{12828296838183640490ull, 16285846609393563004ull, 6631738592720948139ull, 2631782060147736295ull}}, {{16035371047729550613ull, 15745622243314565851ull, 3677987222473797270ull, 3289727575184670369ull}}, {{15432527791234550362ull, 10458655767288431506ull, 9209170046519634492ull, 4112159468980837961ull}}, {{14257015887948981880ull, 15760031891410045499ull, 17284946325143241317ull, 2570099668113023725ull}}, {{13209583841508839446ull, 5864981808980393162ull, 7771124851146887935ull, 3212624585141279657ull}}, {{7288607765031273499ull, 2719541242798103549ull, 14325592082360997823ull, 4015780731426599571ull}}, {{6861222862358239889ull, 8617242304389896574ull, 6647652042261929687ull, 2509862957141624732ull}}, {{17799900614802575670ull, 6159866862059982813ull, 8309565052827412109ull, 3137328696427030915ull}}, {{8414817713221055875ull, 12311519596002366421ull, 5775270297606877232ull, 3921660870533788644ull}}, {{7565104079976853874ull, 7694699747501479013ull, 12832915972859074078ull, 2451038044083617902ull}}, {{14068066118398455246ull, 395002647522072958ull, 6817772929219066790ull, 3063797555104522378ull}}, {{8361710611143293250ull, 9717125346257367006ull, 17745588198378609295ull, 3829746943880652972ull}}, {{614383113537170377ull, 12990732369051936235ull, 1867620587131855001ull, 2393591839925408108ull}}, {{14603036947203626683ull, 2403357406032756581ull, 2334525733914818752ull, 2991989799906760135ull}}, {{4418738128722369642ull, 3004196757540945727ull, 16753215222675687152ull, 3739987249883450168ull}}, {{9679240358092562883ull, 1877622973463091079ull, 10470759514172304470ull, 2337492031177156355ull}}, {{7487364429188315699ull, 11570400753683639657ull, 8476763374287992683ull, 2921865038971445444ull}}, {{13970891554912782528ull, 9851314923677161667ull, 10595954217859990854ull, 3652331298714306805ull}}, {{12851928425213590256ull, 3090771617741676276ull, 17856628790752376472ull, 4565414123392883506ull}}, {{17255827302613269718ull, 1931732261088547672ull, 15772079012647623199ull, 2853383827120552191ull}}, {{3123040054557035531ull, 16249723381642848303ull, 15103412747382141094ull, 3566729783900690239ull}}, {{17738858123478458126ull, 11088782190198784570ull, 14267579915800288464ull, 4458412229875862799ull}}, {{15698472345601424233ull, 6930488868874240356ull, 15834766475016262146ull, 2786507643672414249ull}}, {{1176346358292228675ull, 17886483122947576254ull, 5958400038488163970ull, 3483134554590517812ull}}, {{10693804984720061652ull, 13134731866829694509ull, 7448000048110204963ull, 4353918193238147265ull}}, {{8989471124663732484ull, 5903364407554865116ull, 16184215076137347862ull, 2721198870773842040ull}}, {{11236838905829665605ull, 16602577546298357203ull, 1783524771462133211ull, 3401498588467302551ull}}, {{9434362613859694103ull, 16141535914445558600ull, 16064464019609830226ull, 4251873235584128188ull}}, {{5896476633662308814ull, 14700145964955862029ull, 816917975401368083ull, 2657420772240080118ull}}, {{11982281810505273922ull, 13763496437767439632ull, 10244519506106485912ull, 3321775965300100147ull}}, {{14977852263131592402ull, 17204370547209299540ull, 8193963364205719486ull, 4152219956625125184ull}}, {{137785627602469444ull, 6141045573578424309ull, 5121227102628574679ull, 2595137472890703240ull}}, {{4783918052930474708ull, 3064620948545642482ull, 6401533878285718349ull, 3243921841113379050ull}}, {{15203269603017869193ull, 8442462204109441006ull, 17225289384711923744ull, 4054902301391723812ull}}, {{4890357483458780342ull, 5276538877568400629ull, 1542433828590176532ull, 2534313938369827383ull}}, {{10724632872750863331ull, 6595673596960500786ull, 15763100341019884377ull, 3167892422962284228ull}}, {{4182419054083803356ull, 12856278014628013887ull, 1257131352565303855ull, 3959865528702855286ull}}, {{9531540936443458954ull, 14952702786783590535ull, 14620765150635478621ull, 2474915955439284553ull}}, {{7302740152126935788ull, 4855820428197324457ull, 4440898383012184565ull, 3093644944299105692ull}}, {{13740111208586057639ull, 10681461553674043475ull, 5551122978765230706ull, 3867056180373882115ull}}, {{6281726496152592073ull, 11287599489473665076ull, 1163608852514575239ull, 2416910112733676322ull}}, {{7852158120190740091ull, 9497813343414693441ull, 10677883102497994857ull, 3021137640917095402ull}}, {{14426883668665813017ull, 16483952697695754705ull, 4123981841267717763ull, 3776422051146369253ull}}, {{2099273265275051280ull, 7996627426846152739ull, 4883331660006017554ull, 2360263781966480783ull}}, {{16459149636875977812ull, 772412246702915115ull, 1492478556580134039ull, 2950329727458100979ull}}, {{15962251027667584360ull, 14800573363660807606ull, 15700656251007331260ull, 3687912159322626223ull}}, {{10729441747729704642ull, 53972630866457892ull, 15014134295331776172ull, 4609890199153282779ull}}, {{15929273129185841210ull, 9257104931146311990ull, 7077990925368666155ull, 2881181374470801737ull}}, {{10688219374627525704ull, 6959695145505502084ull, 13459174675138220598ull, 3601476718088502171ull}}, {{13360274218284407130ull, 17922990968736653413ull, 12212282325495387843ull, 4501845897610627714ull}}, {{10656014395641448408ull, 8896026346246714431ull, 12244362471862005306ull, 2813653686006642321ull}}, {{8708331976124422606ull, 1896660895953617231ull, 1470395034545342921ull, 3517067107508302902ull}}, {{6273728951728140354ull, 6982512138369409443ull, 11061365830036454459ull, 4396333884385378627ull}}, {{1615237585616393769ull, 2058227077267186950ull, 4607510634559090085ull, 2747708677740861642ull}}, {{11242419018875268019ull, 7184469865011371591ull, 14982760330053638414ull, 3434635847176077052ull}}, {{9441337755166697120ull, 18203959368118990297ull, 281706338857496401ull, 4293294808970096316ull}}, {{17430051143047655460ull, 4459945577433287079ull, 9399438498640711059ull, 2683309255606310197ull}}, {{17175877910382181421ull, 963245953364220945ull, 16360984141728276728ull, 3354136569507887746ull}}, {{7634789332695563064ull, 1204057441705276182ull, 11227858140305570102ull, 4192670711884859683ull}}, {{160057314507339011ull, 14587593956347961326ull, 4711568328477287361ull, 2620419194928037302ull}}, {{9423443679988949572ull, 4399434390152787945ull, 15112832447451385010ull, 3275523993660046627ull}}, {{16390990618413574869ull, 14722665024545760739ull, 14279354540886843358ull, 4094404992075058284ull}}, {{7938526127294790341ull, 4589979621913712558ull, 18147968624909052907ull, 2559003120046911427ull}}, {{699785622263712119ull, 1125788508964752794ull, 18073274762708928230ull, 3198753900058639284ull}}, {{10098104064684415956ull, 10630607673060716800ull, 4144849379676608671ull, 3998442375073299106ull}}, {{6311315040427759973ull, 13561658823304029856ull, 7202216880725268323ull, 2499026484420811941ull}}, {{7889143800534699966ull, 12340387510702649416ull, 13614457119333973308ull, 3123783105526014926ull}}, {{9861429750668374957ull, 15425484388378311770ull, 7794699362312690827ull, 3904728881907518658ull}}, {{10775079612595122252ull, 7335084733522750904ull, 9483373119872819671ull, 2440455551192199161ull}}, {{13468849515743902815ull, 4557169898476050726ull, 16465902418268412493ull, 3050569438990248951ull}}, {{7612689857825102711ull, 10308148391522451312ull, 15970692004408127712ull, 3813211798737811189ull}}, {{4757931161140689195ull, 6442592744701532070ull, 12287525511968773772ull, 2383257374211131993ull}}, {{15170785988280637301ull, 8053240930876915087ull, 1524348834678803503ull, 2979071717763914992ull}}, {{14351796466923408722ull, 5454865145168755955ull, 1905436043348504379ull, 3723839647204893740ull}}, {{6664029782613436500ull, 1103447706516778520ull, 10414269563947591045ull, 2327399779503058587ull}}, {{8330037228266795624ull, 5990995651573361054ull, 8406150936507100902ull, 2909249724378823234ull}}, {{1189174498478718722ull, 16712116601321477126ull, 1284316633779100319ull, 3636562155473529043ull}}, {{10709840159953174211ull, 16278459733224458503ull, 15440453847506039111ull, 4545702694341911303ull}}, {{13611179127611815738ull, 17091566360906368420ull, 16567812682332356300ull, 2841064183963694564ull}}, {{17013973909514769672ull, 2917713877423408909ull, 2263021779205893760ull, 3551330229954618206ull}}, {{7432409331611298378ull, 3647142346779261137ull, 12052149260862143008ull, 4439162787443272757ull}}, {{16174470878325531247ull, 2279463966737038210ull, 9838436297252533332ull, 2774476742152045473ull}}, {{10994716561052138250ull, 2849329958421297763ull, 16909731389993054569ull, 3468095927690056841ull}}, {{9131709682887784909ull, 8173348466454010108ull, 7302106182209154499ull, 4335119909612571052ull}}, {{14930690588659641376ull, 2802499782320062365ull, 13787188400735497370ull, 2709449943507856907ull}}, {{4828305180542388008ull, 12726496764754853765ull, 12622299482491983808ull, 3386812429384821134ull}}, {{10647067494105372914ull, 15908120955943567206ull, 6554502316260203952ull, 4233515536731026418ull}}, {{2042731165388470167ull, 9942575597464729504ull, 8708249966090015374ull, 2645947210456891511ull}}, {{2553413956735587709ull, 3204847459976136072ull, 6273626439185131314ull, 3307434013071114389ull}}, {{3191767445919484636ull, 13229431361824945898ull, 12453719067408802046ull, 4134292516338892986ull}}, {{6606540672127065802ull, 3656708582713203282ull, 12395260435557889183ull, 2583932822711808116ull}}, {{17481547877013608060ull, 18405943783673667814ull, 15494075544447361478ull, 3229916028389760145ull}}, {{12628562809412234267ull, 13784057692737308960ull, 5532536375277038136ull, 4037395035487200182ull}}, {{7892851755882646417ull, 8615036057960818100ull, 17292893289830312547ull, 2523371897179500113ull}}, {{9866064694853308021ull, 6157109054023634721ull, 7781058557005726972ull, 3154214871474375142ull}}, {{16944266886994022930ull, 7696386317529543401ull, 502951159402382907ull, 3942768589342968928ull}}, {{3672637776730182476ull, 2504398439242270674ull, 314344474626489317ull, 2464230368339355580ull}}, {{13814169257767503903ull, 7742184067480226246ull, 392930593283111646ull, 3080287960424194475ull}}, {{8044339535354604070ull, 454358047495507000ull, 14326221296886053270ull, 3850359950530243093ull}}, {{5027712209596627544ull, 14119031834966855587ull, 11259731319767477245ull, 2406474969081401933ull}}, {{1672954243568396526ull, 3813731738426405772ull, 239606094427182845ull, 3008093711351752417ull}}, {{2091192804460495657ull, 9378850691460395119ull, 4911193636461366460ull, 3760117139189690521ull}}, {{8224524530428891642ull, 15085153719017522757ull, 14598711068856823797ull, 2350073211993556575ull}}, {{14892341681463502456ull, 5021384093489739734ull, 13636702817643641843ull, 2937591514991945719ull}}, {{9392055064974602262ull, 1665044098434786764ull, 12434192503627164400ull, 3671989393739932149ull}}, {{11740068831218252828ull, 2081305123043483455ull, 1707682574251791788ull, 4589986742174915187ull}}, {{14255072047152489873ull, 10524187738756952967ull, 17208202673403227531ull, 2868741713859321991ull}}, {{13207154040513224438ull, 8543548655018803305ull, 16898567323326646510ull, 3585927142324152489ull}}, {{2673884495359366835ull, 1456063781918728324ull, 7288151098876144426ull, 4482408927905190612ull}}, {{10894549846454380080ull, 5521725882126593106ull, 13778466473652366074ull, 2801505579940744132ull}}, {{4394815271213199292ull, 16125529389513017191ull, 17223083092065457592ull, 3501881974925930165ull}}, {{881833070589111211ull, 1710167663181719873ull, 7693795809799658279ull, 4377352468657412707ull}}, {{12080360715186664267ull, 7986383817129656776ull, 2502779371911092472ull, 2735845292910882942ull}}, {{15100450893983330334ull, 9982979771412070970ull, 12351846251743641398ull, 3419806616138603677ull}}, {{9652191580624387109ull, 3255352677410312905ull, 1604749759397388036ull, 4274758270173254597ull}}, {{17561834783958711703ull, 11257967460236221373ull, 3308811608837061474ull, 2671723918858284123ull}}, {{8117235424666225917ull, 4849087288440500909ull, 17971072566328490555ull, 3339654898572855153ull}}, {{14758230299260170300ull, 1449673092123238232ull, 8628782652628449482ull, 4174568623216068942ull}}, {{9223893937037606438ull, 5517731701004411799ull, 781303139465393022ull, 2609105389510043089ull}}, {{6918181402869620143ull, 16120536663110290557ull, 5588314942759129181ull, 3261381736887553861ull}}, {{13259412772014413083ull, 6315612773605699484ull, 11597079696876299381ull, 4076727171109442326ull}}, {{17510505019363783985ull, 6253100992717256129ull, 2636488792120299209ull, 2547954481943401454ull}}, {{8053073218922566269ull, 12428062259323958066ull, 12518983027005149819ull, 3184943102429251817ull}}, {{842969486798432028ull, 10923391805727559679ull, 1813670728474273562ull, 3981178878036564772ull}}, {{7444384956890101874ull, 11438805897007112703ull, 10356916242151196784ull, 2488236798772852982ull}}, {{4693795177685239438ull, 14298507371258890879ull, 3722773265834220172ull, 3110295998466066228ull}}, {{1255557953679161393ull, 17873134214073613599ull, 4653466582292775215ull, 3887869998082582785ull}}, {{7702252748690557727ull, 18088237911437090355ull, 14437631660001454269ull, 2429918748801614240ull}}, {{5016129917435809255ull, 8775239334014199232ull, 18047039575001817837ull, 3037398436002017800ull}}, {{6270162396794761568ull, 15580735185945136944ull, 4112055395042720680ull, 3796748045002522251ull}}, {{3918851497996725980ull, 9737959491215710590ull, 264191612688006473ull, 2372967528126576407ull}}, {{14121936409350683283ull, 16784135382447026141ull, 14165297571142171803ull, 2966209410158220508ull}}, {{3817362456406190392ull, 16368483209631394773ull, 17706621963927714754ull, 3707761762697775635ull}}, {{4691694544467562947ull, 14841988024447009637ull, 8760795718241127769ull, 2317351101686109772ull}}, {{10476304199011841588ull, 4717426975276598334ull, 10950994647801409712ull, 2896688877107637215ull}}, {{3872008211910026177ull, 5896783719095747918ull, 9077057291324374236ull, 3620861096384546519ull}}, {{14063382301742308529ull, 7370979648869684897ull, 6734635595728079891ull, 4526076370480683149ull}}, {{1872084910947860975ull, 2301019271329859109ull, 6514990256543743884ull, 2828797731550426968ull}}, {{6951792157112214122ull, 2876274089162323886ull, 8143737820679679855ull, 3535997164438033710ull}}, {{17913112233245043461ull, 17430400666735068569ull, 956300238994824010ull, 4419996455547542138ull}}, {{4278166118137070307ull, 15505686435136805760ull, 5209373667799152910ull, 2762497784717213836ull}}, {{5347707647671337884ull, 10158736007066231392ull, 6511717084748941138ull, 3453122230896517295ull}}, {{6684634559589172354ull, 3475047971978013432ull, 3527960337508788519ull, 4316402788620646619ull}}, {{4177896599743232722ull, 9089434010127340251ull, 18345876275438850488ull, 2697751742887904136ull}}, {{610684731251652998ull, 11361792512659175314ull, 4485601270589011494ull, 3372189678609880171ull}}, {{9986727950919342055ull, 4978868603969193334ull, 995315569808876464ull, 4215237098262350214ull}}, {{1630018950897200881ull, 3111792877480745834ull, 14457130286412711502ull, 2634523186413968883ull}}, {{11260895725476276909ull, 13113113133705708100ull, 13459726839588501473ull, 3293153983017461104ull}}, {{14076119656845346136ull, 2556333361849971413ull, 16824658549485626842ull, 4116442478771826380ull}}, {{11103417794742035287ull, 6209394369583620037ull, 1292039556573740968ull, 2572776549232391488ull}}, {{44214188145380397ull, 7761742961979525047ull, 1615049445717176210ull, 3215970686540489360ull}}, {{13890325790463889208ull, 478806665619630500ull, 2018811807146470263ull, 4019963358175611700ull}}, {{17904825655894706563ull, 7216783193653350918ull, 10485129416321319722ull, 2512477098859757312ull}}, {{13157660033013607396ull, 18244351028921464456ull, 13106411770401649652ull, 3140596373574696640ull}}, {{16447075041267009245ull, 4358694712442278954ull, 16383014713002062066ull, 3925745466968370800ull}}, {{14891107919219268682ull, 7335870213703812250ull, 10239384195626288791ull, 2453590916855231750ull}}, {{9390512862169310044ull, 4558151748702377409ull, 3575858207678085181ull, 3066988646069039688ull}}, {{16349827096139025459ull, 10309375704305359665ull, 4469822759597606476ull, 3833735807586299610ull}}, {{3301112907445809056ull, 15666731852045625599ull, 7405325243175891951ull, 2396084879741437256ull}}, {{17961449189589425032ull, 14971728796629644094ull, 9256656553969864939ull, 2995106099676796570ull}}, {{13228439450132005482ull, 14102974977359667214ull, 2347448655607555366ull, 3743882624595995713ull}}, {{3656088637905115523ull, 4202673342422404105ull, 12996370455823191864ull, 2339926640372497320ull}}, {{9181796815808782307ull, 5253341678028005131ull, 16245463069778989830ull, 2924908300465621650ull}}, {{6865560001333589980ull, 15790049134389782222ull, 11083456800368961479ull, 3656135375582027063ull}}, {{17805322038521763283ull, 15125875399559839873ull, 9242634982033813945ull, 4570169219477533829ull}}, {{4210797246435020196ull, 2536143097083818065ull, 8082489872984827668ull, 2856355762173458643ull}}, {{9875182576471163149ull, 3170178871354772581ull, 5491426322803646681ull, 3570444702716823304ull}}, {{16955664239016341840ull, 8574409607620853630ull, 6864282903504558351ull, 4463055878396029130ull}}, {{5985604130957825746ull, 12276535032404115375ull, 8901862833117736873ull, 2789409923997518206ull}}, {{2870319145269894278ull, 1510610735222980507ull, 1903956504542395284ull, 3486762404996897758ull}}, {{17422956986869531560ull, 1888263419028725633ull, 11603317667532769913ull, 4358453006246122197ull}}, {{3971819089152375369ull, 12709379682961423281ull, 9557916551421675147ull, 2724033128903826373ull}}, {{9576459879867857115ull, 11275038585274391197ull, 16559081707704481838ull, 3405041411129782966ull}}, {{16582260868262209298ull, 4870426194738213188ull, 11475480097775826490ull, 4256301763912228708ull}}, {{1140541005809105003ull, 7655702390138771147ull, 16395547097964667364ull, 2660188602445142942ull}}, {{15260734312543544966ull, 9569627987673463933ull, 11271061835601058397ull, 3325235753056428678ull}}, {{5240859835397267496ull, 16573721003019217821ull, 4865455257646547188ull, 4156544691320535848ull}}, {{5581380406336986137ull, 1135203590032235330ull, 3040909536029091993ull, 2597840432075334905ull}}, {{16200097544776008479ull, 6030690505967682066ull, 8412822938463752895ull, 3247300540094168631ull}}, {{11026749894115234791ull, 2926677114032214679ull, 5904342654652303215ull, 4059125675117710789ull}}, {{13809247711463103600ull, 8746702223911216030ull, 5996057168371383461ull, 2536953546948569243ull}}, {{8038187602474103692ull, 15545063798316407942ull, 2883385442036841422ull, 3171191933685711554ull}}, {{824362466237853807ull, 10207957711040734120ull, 12827603839400827586ull, 3963989917107139442ull}}, {{515226541398658630ull, 10991659587827846729ull, 12628938418052905145ull, 2477493698191962151ull}}, {{5255719195175711191ull, 18351260503212196315ull, 11174487004138743527ull, 3096867122739952689ull}}, {{1957962975542251085ull, 18327389610587857490ull, 133050699891265697ull, 3871083903424940862ull}}, {{5835412878141294832ull, 4537089478976329075ull, 13918214742714204773ull, 2419427439640588038ull}}, {{2682580079249230636ull, 10283047867147799248ull, 8174396391537980158ull, 3024284299550735048ull}}, {{3353225099061538295ull, 3630437797079973252ull, 10217995489422475198ull, 3780355374438418810ull}}, {{11319137723768237242ull, 16104081678457146994ull, 10997933199316434902ull, 2362722109024011756ull}}, {{4925550117855520745ull, 10906730061216657935ull, 13747416499145543628ull, 2953402636280014695ull}}, {{1545251628892013027ull, 13633412576520822419ull, 12572584605504541631ull, 3691753295350018369ull}}, {{17106683332553365806ull, 15438411887966595867ull, 940336350799256663ull, 2307345809593761481ull}}, {{16771668147264319354ull, 14686328841530856930ull, 5787106456926458733ull, 2884182261992201851ull}}, {{11741213147225623384ull, 4522852996631407451ull, 2622197052730685513ull, 3605227827490252314ull}}, {{10064830415604641326ull, 10265252264216647218ull, 12501118352768132699ull, 4506534784362815392ull}}, {{10902205028180288733ull, 4109939655921710559ull, 7813198970480082937ull, 2816584240226759620ull}}, {{9016070266797973012ull, 9749110588329526103ull, 9766498713100103671ull, 3520730300283449525ull}}, {{6658401815070078361ull, 7574702216984519725ull, 16819809409802517493ull, 4400912875354311906ull}}, {{6467344143632492928ull, 7040031894829018780ull, 15124066899553961337ull, 2750570547096444941ull}}, {{8084180179540616159ull, 13411725886963661379ull, 5070025569160287959ull, 3438213183870556177ull}}, {{5493539205998382295ull, 12152971340277188820ull, 10949217979877747853ull, 4297766479838195221ull}}, {{12656834040603764743ull, 9901450096886936964ull, 9149104246637286360ull, 2686104049898872013ull}}, {{15821042550754705928ull, 12376812621108671205ull, 16048066326723995854ull, 3357630062373590016ull}}, {{5941245133161218698ull, 6247643739531063199ull, 1613338834695443202ull, 4197037577966987521ull}}, {{10630807235866843542ull, 8516463355634302403ull, 12537551817753121761ull, 2623148486229367200ull}}, {{8676823026406166524ull, 15257265212970265908ull, 15671939772191402201ull, 3278935607786709000ull}}, {{10846028783007708155ull, 5236523460930668673ull, 1143180641529701136ull, 4098669509733386251ull}}, {{18307983035448287357ull, 3272827163081667920ull, 16855388965451920874ull, 2561668443583366406ull}}, {{4438234720600807580ull, 13314405990706860709ull, 11845864169960125284ull, 3202085554479208008ull}}, {{10159479419178397379ull, 16643007488383575886ull, 14807330212450156605ull, 4002606943099010010ull}}, {{1737988618559110458ull, 12707722689453428881ull, 13866267401208735782ull, 2501629339436881256ull}}, {{6784171791626275976ull, 6661281324962010293ull, 17332834251510919728ull, 3127036674296101570ull}}, {{13091900757960232874ull, 8326601656202512866ull, 12442670777533873852ull, 3908795842870126963ull}}, {{12794123992152533451ull, 14427498071981346349ull, 5470826226744977205ull, 2442997401793829352ull}}, {{2157596934908503101ull, 4199314534694519225ull, 6838532783431221507ull, 3053746752242286690ull}}, {{7308682187063016780ull, 637457149940761127ull, 17771538016143802692ull, 3817183440302858362ull}}, {{11485455394555467344ull, 9621782755567751512ull, 15718897278517264586ull, 2385739650189286476ull}}, {{14356819243194334180ull, 2803856407604913582ull, 1201877524437029117ull, 2982174562736608096ull}}, {{8722652017138141917ull, 8116506527933529882ull, 1502346905546286396ull, 3727718203420760120ull}}, {{10063343529138726602ull, 14296188616813231984ull, 938966815966428997ull, 2329823877137975075ull}}, {{12579179411423408252ull, 4035177715734376268ull, 15008766575240199959ull, 2912279846422468843ull}}, {{15723974264279260315ull, 432286126240582431ull, 14149272200622862045ull, 3640349808028086054ull}}, {{15043281811921687490ull, 5152043676228115943ull, 8463218213923801748ull, 4550437260035107568ull}}, {{16319580160092136537ull, 12443399334497348272ull, 5289511383702376092ull, 2844023287521942230ull}}, {{1952731126405619056ull, 15554249168121685341ull, 15835261266482745923ull, 3555029109402427787ull}}, {{7052599926434411724ull, 14831125441724718772ull, 15182390564676044500ull, 4443786386753034734ull}}, {{13631246990876283135ull, 46081364223173424ull, 4877308084495139909ull, 2777366491720646709ull}}, {{17039058738595353919ull, 4669287723706354684ull, 10708321124046312790ull, 3471708114650808386ull}}, {{2852079349534640783ull, 15059981691487719164ull, 4162029368203115179ull, 4339635143313510483ull}}, {{11005921630313926297ull, 7106645547966130525ull, 295425345913253035ull, 2712271964570944052ull}}, {{18369088056319795776ull, 4271620916530275252ull, 369281682391566294ull, 3390339955713680065ull}}, {{4514615996690193103ull, 14562898182517619874ull, 5073288121416845771ull, 4237924944642100081ull}}, {{7433321016358758594ull, 6795968354859818469ull, 14700020121953998367ull, 2648703090401312550ull}}, {{13903337288875836146ull, 3883274425147385182ull, 9151653115587722151ull, 3310878863001640688ull}}, {{8155799574240019375ull, 242407013006843574ull, 11439566394484652689ull, 4138598578752050860ull}}, {{485688715472624205ull, 11680719429197746994ull, 16373101033407683738ull, 2586624111720031787ull}}, {{9830482931195556065ull, 5377527249642407934ull, 15854690273332216769ull, 3233280139650039734ull}}, {{3064731627139669273ull, 11333595080480397822ull, 10594990804810495153ull, 4041600174562549668ull}}, {{15750515322244457008ull, 165967897659166782ull, 15845241289861335279ull, 2526000109101593542ull}}, {{10464772115950795451ull, 14042517927356122190ull, 10583179575471893290ull, 3157500136376991928ull}}, {{3857593108083718506ull, 8329775372340376930ull, 13228974469339866613ull, 3946875170471239910ull}}, {{7022681710979711970ull, 7511952616926429533ull, 3656423024910028729ull, 2466796981544524944ull}}, {{13390038157152027867ull, 14001626789585424820ull, 4570528781137535911ull, 3083496226930656180ull}}, {{16737547696440034834ull, 12890347468554393121ull, 5713160976421919889ull, 3854370283663320225ull}}, {{3543438282633939915ull, 1138938140205413845ull, 15099940656332169691ull, 2408981427289575140ull}}, {{9040983871719812798ull, 15258730730538931018ull, 428181746705660497ull, 3011226784111968926ull}}, {{2077857802794990189ull, 5238355357891500061ull, 9758599220236851430ull, 3764033480139961157ull}}, {{3604504135960562820ull, 17109030153964351250ull, 8404967521861726095ull, 2352520925087475723ull}}, {{13729002206805479333ull, 16774601674028051158ull, 5894523383899769715ull, 2940651156359344654ull}}, {{7937880721652073359ull, 16356566074107676044ull, 16591526266729487952ull, 3675813945449180817ull}}, {{9922350902065091698ull, 1998963518925043439ull, 6904349778129696229ull, 4594767431811476022ull}}, {{13118998341431764167ull, 3555195208541846101ull, 18150276666613223855ull, 2871729644882172513ull}}, {{2563689871507541497ull, 18279052065959471339ull, 8852787777984366106ull, 3589662056102715642ull}}, {{17039670394666590583ull, 13625443045594563365ull, 1842612685625681825ull, 4487077570128394553ull}}, {{12955637005880313067ull, 1598372875855520247ull, 12680847974584520901ull, 2804423481330246595ull}}, {{11582860238923003429ull, 6609652113246788213ull, 11239373949803263222ull, 3505529351662808244ull}}, {{643517243371590575ull, 17485437178413261075ull, 14049217437254079027ull, 4381911689578510305ull}}, {{16543099341603101773ull, 8622555227294594219ull, 1863231870642717536ull, 2738694805986568941ull}}, {{16067188158576489313ull, 10778194034118242774ull, 6940725856730784824ull, 3423368507483211176ull}}, {{10860613161365835833ull, 13472742542647803468ull, 8675907320913481030ull, 4279210634354013970ull}}, {{16011255262708423204ull, 3808778070727489263ull, 10034128093998313548ull, 2674506646471258731ull}}, {{15402383059958141100ull, 4760972588409361579ull, 7930974099070504031ull, 3343133308089073414ull}}, {{14641292806520288471ull, 1339529717084314070ull, 690345586983354231ull, 4178916635111341768ull}}, {{4539121985647792391ull, 7754735100818778150ull, 431465991864596394ull, 2611822896944588605ull}}, {{14897274518914516296ull, 470046839168696879ull, 5151018508258133397ull, 3264778621180735756ull}}, {{14009907130215757466ull, 5199244567388259003ull, 6438773135322666746ull, 4080973276475919695ull}}, {{6450348947171154465ull, 7861213873045049781ull, 10941762237217748572ull, 2550608297797449809ull}}, {{12674622202391330985ull, 9826517341306312226ull, 18288888814949573619ull, 3188260372246812261ull}}, {{6619905716134387923ull, 7671460658205502379ull, 9026052963404803312ull, 3985325465308515327ull}}, {{1831598063370298500ull, 4794662911378438987ull, 12558812129769083926ull, 2490828415817822079ull}}, {{16124555634495036837ull, 15216700676077824541ull, 11086829143783967003ull, 3113535519772277599ull}}, {{6320636487836632334ull, 14409189826669892773ull, 9246850411302570850ull, 3891919399715346999ull}}, {{6256240814111589161ull, 13617429660096070887ull, 12696810534705188637ull, 2432449624822091874ull}}, {{3208614999212098547ull, 3186729019837924897ull, 6647641131526709989ull, 3040562031027614843ull}}, {{8622454767442511087ull, 8595097293224794025ull, 3697865395980999582ull, 3800702538784518554ull}}, {{16918249275720039190ull, 760249789838108361ull, 6922851890915512643ull, 2375439086740324096ull}}, {{7312753539367885275ull, 14785370292579799164ull, 8653564863644390803ull, 2969298858425405120ull}}, {{9140941924209856594ull, 13870026847297361051ull, 10816956079555488504ull, 3711623573031756400ull}}, {{3407245693417466419ull, 8668766779560850657ull, 6760597549722180315ull, 2319764733144847750ull}}, {{8870743135199220928ull, 6224272456023675417ull, 17674118974007501202ull, 2899705916431059687ull}}, {{15700114937426414064ull, 17003712606884370079ull, 17480962699081988598ull, 3624632395538824609ull}}, {{15013457653355629676ull, 12031268721750686791ull, 8016145318570322036ull, 4530790494423530762ull}}, {{16300940060988350403ull, 16742914987948955052ull, 9621776842533839176ull, 2831744059014706726ull}}, {{1929431002525886388ull, 2481899661226642200ull, 2803849016312523163ull, 3539680073768383408ull}}, {{2411788753157357985ull, 16937432631815466462ull, 3504811270390653953ull, 4424600092210479260ull}}, {{15342426026005512453ull, 3668366367243584682ull, 11413879080848934529ull, 2765375057631549537ull}}, {{9954660495652114758ull, 9197143977481868757ull, 432290795779004449ull, 3456718822039436922ull}}, {{17055011637992531351ull, 16108115990279723850ull, 9763735531578531369ull, 4320898527549296152ull}}, {{15271068292172719999ull, 3150043466283745550ull, 6102334707236582106ull, 2700561579718310095ull}}, {{9865463328361124190ull, 13160926369709457746ull, 3016232365618339728ull, 3375701974647887619ull}}, {{3108457123596629430ull, 16451157962136822183ull, 17605348512305088372ull, 4219627468309859523ull}}, {{8860314729888975250ull, 1058601689480738056ull, 8697499810976986281ull, 2637267167693662202ull}}, {{11075393412361219062ull, 5934938130278310474ull, 1648502726866457043ull, 3296583959617077753ull}}, {{4620869728596748020ull, 2806986644420500189ull, 6672314427010459208ull, 4120729949521347191ull}}, {{5193886589586661464ull, 1754366652762812618ull, 11087725544522618861ull, 2575456218450841994ull}}, {{15715730273838102638ull, 6804644334380903676ull, 4636284893798497768ull, 3219320273063552493ull}}, {{1197918768588076682ull, 8505805417976129596ull, 10407042135675510114ull, 4024150341329440616ull}}, {{9972071267222323734ull, 9927814404662468901ull, 6504401334797193821ull, 2515093963330900385ull}}, {{17076775102455292572ull, 17021454024255474030ull, 12742187686923880180ull, 3143867454163625481ull}}, {{12122596841214339907ull, 2830073456609790922ull, 2092676553372686514ull, 3929834317704531852ull}}, {{12188309044186350346ull, 6380481928808507230ull, 10531294882712704879ull, 2456146448565332407ull}}, {{6012014268378162124ull, 3363916392583246134ull, 8552432584963493195ull, 3070183060706665509ull}}, {{16738389872327478463ull, 18039953546011221379ull, 15302226749631754397ull, 3837728825883331886ull}}, {{8155650660990980088ull, 13580813975470707314ull, 4952205700092458594ull, 2398580516177082429ull}}, {{971191289383949301ull, 7752645432483608335ull, 10801943143542961147ull, 2998225645221353036ull}}, {{15049047167012100339ull, 5079120772177122514ull, 13502428929428701434ull, 3747782056526691295ull}}, {{14017340497809950616ull, 7786136501038089475ull, 15356547108534020252ull, 2342363785329182059ull}}, {{12909989603835050366ull, 9732670626297611844ull, 14583997867240137411ull, 2927954731661477574ull}}, {{16137487004793812957ull, 7554152264444626901ull, 9006625297195395956ull, 3659943414576846968ull}}, {{6336800700710102484ull, 9442690330555783627ull, 11258281621494244945ull, 4574929268221058710ull}}, {{1654657428730120101ull, 17430896502665834527ull, 2424739995006515186ull, 2859330792638161694ull}}, {{15903379841194813838ull, 12565248591477517350ull, 12254297030612919791ull, 3574163490797702117ull}}, {{10655852764638741489ull, 11094874720919508784ull, 1482813232983986027ull, 4467704363497127647ull}}, {{6659907977899213431ull, 4628453691360999038ull, 7844287298256073123ull, 2792315227185704779ull}}, {{17548257009228792597ull, 1173881095773860893ull, 5193673104392703500ull, 3490394033982130974ull}}, {{8100263206253827034ull, 1467351369717326117ull, 15715463417345655183ull, 4362992542477663717ull}}, {{7368507513122335848ull, 7834623633714410679ull, 12128007645054728441ull, 2726870339048539823ull}}, {{4598948372975531906ull, 14404965560570401253ull, 10548323537891022647ull, 3408587923810674779ull}}, {{10360371484646802786ull, 13394520932285613662ull, 8573718403936390405ull, 4260734904763343474ull}}, {{1863546159476863838ull, 10677418591892202491ull, 9970260020887631907ull, 2662959315477089671ull}}, {{16164490754628243509ull, 8735087221437865209ull, 7851139007682151980ull, 3328699144346362089ull}}, {{6370555388003140674ull, 10918859026797331512ull, 14425609778030077879ull, 4160873930432952611ull}}, {{3981597117501962922ull, 13741815919389414051ull, 6710163102055104722ull, 2600546206520595382ull}}, {{365310378450065748ull, 7953897862381991756ull, 17611075914423656711ull, 3250682758150744227ull}}, {{456637973062582185ull, 5330686309550101791ull, 17402158874602182985ull, 4063353447688430284ull}}, {{7202927760805195722ull, 14860893989537283379ull, 1652977259771588557ull, 2539595904805268928ull}}, {{4391973682579106748ull, 4741059431639440512ull, 2066221574714485697ull, 3174494881006586160ull}}, {{5489967103223883435ull, 10538010307976688544ull, 2582776968393107121ull, 3968118601258232700ull}}, {{3431229439514927147ull, 18115471488553900100ull, 10837607642100467758ull, 2480074125786395437ull}}, {{4289036799393658933ull, 13420967323837599317ull, 18158695571052972602ull, 3100092657232994296ull}}, {{9972982017669461571ull, 7552837117942223338ull, 4251625390106664137ull, 3875115821541242871ull}}, {{10844799779470801386ull, 16249738244782359346ull, 9574794896457746941ull, 2421947388463276794ull}}, {{4332627687483725924ull, 6477114750695785471ull, 2745121583717407869ull, 3027434235579095993ull}}, {{804098590927269501ull, 12708079456797119743ull, 8043087998074147740ull, 3784292794473869991ull}}, {{7420090646970625294ull, 17165921697352975647ull, 11944459026437424193ull, 2365182996546168744ull}}, {{4663427290285893714ull, 7622344066409055847ull, 14930573783046780242ull, 2956478745682710930ull}}, {{1217598094429979238ull, 304558046156544001ull, 9439845191953699495ull, 3695598432103388663ull}}, {{12290213855087206784ull, 7107877806488921856ull, 12817432272612144040ull, 2309749020064617914ull}}, {{15362767318859008480ull, 8884847258111152320ull, 6798418303910404242ull, 2887186275080772393ull}}, {{756715074864208984ull, 1882687035784164593ull, 13109708898315393207ull, 3608982843850965491ull}}, {{5557579862007649134ull, 16188416850012369453ull, 11775450104466853604ull, 4511228554813706864ull}}, {{5779330422968474661ull, 894388494402955100ull, 7359656315291783503ull, 2819517846758566790ull}}, {{7224163028710593326ull, 14953043673285857587ull, 18422942430969505186ull, 3524397308448208487ull}}, {{4418517767460853753ull, 9467932554752546176ull, 18416992020284493579ull, 4405496635560260609ull}}, {{2761573604663033596ull, 3611614837506647408ull, 4593090985036726631ull, 2753435397225162881ull}}, {{3451967005828791995ull, 18349576602165472972ull, 10353049749723296192ull, 3441794246531453601ull}}, {{4314958757285989993ull, 4490226678997289599ull, 17552998205581508145ull, 4302242808164317001ull}}, {{9614378250944825602ull, 14335606720441775759ull, 4053094850847360734ull, 2688901755102698126ull}}, {{7406286795253644098ull, 8696136363697443891ull, 14289740600413976726ull, 3361127193878372657ull}}, {{4646172475639667219ull, 1646798417767029056ull, 4027117695235307196ull, 4201408992347965822ull}}, {{2903857797274792012ull, 10252621047959168968ull, 16352006614804230709ull, 2625880620217478638ull}}, {{3629822246593490015ull, 17427462328376349114ull, 11216636231650512578ull, 3282350775271848298ull}}, {{13760649845096638326ull, 12560955873615660584ull, 4797423252708364915ull, 4102938469089810373ull}}, {{8600406153185398954ull, 5544754411796093913ull, 5304232542156422024ull, 2564336543181131483ull}}, {{15362193709909136597ull, 6930943014745117391ull, 2018604659268139626ull, 3205420678976414354ull}}, {{14591056118959032842ull, 17887050805286172547ull, 11746627860939950340ull, 4006775848720517942ull}}, {{6813567065135701574ull, 1956034716449082034ull, 2729956394660081059ull, 2504234905450323714ull}}, {{17740330868274402776ull, 16280101450843516254ull, 12635817530179877131ull, 3130293631812904642ull}}, {{12952041548488227661ull, 15738440795127007414ull, 6571399875870070606ull, 3912867039766130803ull}}, {{3483339949377754385ull, 5224839478526991730ull, 1801281913205100177ull, 2445541899853831752ull}}, {{13577546973576968789ull, 11142735366586127566ull, 2251602391506375221ull, 3056927374817289690ull}}, {{7748561680116435178ull, 93361152950495746ull, 12037875026237744835ull, 3821159218521612112ull}}, {{9454537068500159890ull, 16199251785089917505ull, 7523671891398590521ull, 2388224511576007570ull}}, {{16429857354052587767ull, 6414006676080233169ull, 181217827393462344ull, 2985280639470009463ull}}, {{6702263637283570996ull, 8017508345100291462ull, 14061580339523991642ull, 3731600799337511828ull}}, {{18023972828584395585ull, 9622628734115070067ull, 18011859749057270584ull, 2332250499585944892ull}}, {{17918280017303106577ull, 12028285917643837584ull, 4068080612612036614ull, 2915313124482431116ull}}, {{3951105947919331605ull, 5811985360200021173ull, 5085100765765045768ull, 3644141405603038895ull}}, {{9550568453326552410ull, 7264981700250026466ull, 1744689938778919306ull, 4555176757003798619ull}}, {{10580791301756483160ull, 9152299581083654445ull, 17231332276232682230ull, 2846985473127374136ull}}, {{17837675145622991854ull, 2217002439499792248ull, 3092421271581301172ull, 3558731841409217671ull}}, {{3850349858319188202ull, 2771253049374740311ull, 17700584644758790177ull, 4448414801761522088ull}}, {{9323997689090574482ull, 13261248201927682454ull, 11062865402974243860ull, 2780259251100951305ull}}, {{2431625074508442295ull, 16576560252409603068ull, 18440267772145192729ull, 3475324063876189131ull}}, {{3039531343135552868ull, 6885642260229840123ull, 18438648696754103008ull, 4344155079845236414ull}}, {{18040608153955578207ull, 4303526412643650076ull, 6912469417043926476ull, 2715096924903272759ull}}, {{4104016118734921143ull, 5379408015804562596ull, 4028900752877520191ull, 3393871156129090949ull}}, {{5130020148418651428ull, 2112574001328315341ull, 9647811959524288143ull, 4242338945161363686ull}}, {{5512105601975351095ull, 8237887778471278944ull, 1418196456275292185ull, 2651461840725852304ull}}, {{6890132002469188868ull, 14909045741516486584ull, 1772745570344115231ull, 3314327300907315380ull}}, {{8612665003086486085ull, 14024621158468220326ull, 2215931962930144039ull, 4142909126134144225ull}}, {{771229608501665900ull, 15682917251683719560ull, 12914172522899809784ull, 2589318203833840140ull}}, {{964037010627082374ull, 1156902490895097834ull, 16142715653624762231ull, 3236647754792300175ull}}, {{10428418300138628776ull, 15281186168901036004ull, 15566708548603564884ull, 4045809693490375219ull}}, {{15741133474441418793ull, 327369318708371694ull, 7423349833663534101ull, 2528631058431484512ull}}, {{10453044806196997683ull, 5020897666812852522ull, 9279187292079417626ull, 3160788823039355640ull}}, {{3842933970891471296ull, 15499494120370841461ull, 11598984115099272032ull, 3950986028799194550ull}}, {{4707676741020863512ull, 9687183825231775913ull, 2637679053509657116ull, 2469366267999496594ull}}, {{10496281944703467294ull, 12108979781539719891ull, 12520470853741847203ull, 3086707834999370742ull}}, {{8508666412451946213ull, 10524538708497261960ull, 6427216530322533196ull, 3858384793749213428ull}}, {{5317916507782466383ull, 15801208729665564533ull, 13240382368306359055ull, 2411490496093258392ull}}, {{11259081653155470883ull, 15139824893654567762ull, 16550477960382948819ull, 3014363120116572990ull}}, {{4850480029589562796ull, 14313095098640821799ull, 11464725413623910216ull, 3767953900145716238ull}}, {{9949079046134558604ull, 8945684436650513624ull, 2553767365087555981ull, 2354971187591072649ull}}, {{12436348807668198254ull, 15793791564240529934ull, 7803895224786832880ull, 2943713984488840811ull}}, {{6322063972730472010ull, 1295495381591110802ull, 5143183012556153197ull, 3679642480611051014ull}}, {{17125952002767865820ull, 6231055245416276406ull, 15652350802549967304ull, 4599553100763813767ull}}, {{6092033983302528234ull, 3894409528385172754ull, 16700248279234811421ull, 2874720687977383604ull}}, {{16838414515982936100ull, 9479697928908853846ull, 2428566275333962660ull, 3593400859971729506ull}}, {{11824646108123894317ull, 11849622411136067308ull, 12259079881022229133ull, 4491751074964661882ull}}, {{16613775854432209756ull, 9711857016173736019ull, 12273610944066281112ull, 2807344421852913676ull}}, {{16155533799612874291ull, 12139821270217170024ull, 15342013680082851390ull, 3509180527316142095ull}}, {{1747673175806541248ull, 5951404550916686723ull, 14565831081676176334ull, 4386475659145177619ull}}, {{17233196799374945944ull, 17554685899605092913ull, 6797801416833916256ull, 2741547286965736012ull}}, {{7706437943936518718ull, 3496613300796814526ull, 8497251771042395321ull, 3426934108707170015ull}}, {{409675393065872590ull, 8982452644423406062ull, 6009878695375606247ull, 4283667635883962519ull}}, {{14091105175948334081ull, 12531561930405710644ull, 10673703212250835760ull, 2677292272427476574ull}}, {{17613881469935417601ull, 15664452413007138305ull, 4118756978458768892ull, 3346615340534345718ull}}, {{8182293782137108289ull, 1133821442549371266ull, 14371818259928236924ull, 4183269175667932147ull}}, {{9725619632263080585ull, 9932010438448132849ull, 6676543403241454125ull, 2614543234792457592ull}}, {{16768710558756238635ull, 17026699066487553965ull, 8345679254051817656ull, 3268179043490571990ull}}, {{7125830143163134581ull, 2836629759399890841ull, 1208727030709996263ull, 4085223804363214988ull}}, {{15982858885545428873ull, 8690422627266013631ull, 9978826431048523472ull, 2553264877727009367ull}}, {{15366887588504398188ull, 10863028284082517039ull, 7861847020383266436ull, 3191581097158761709ull}}, {{14596923467203109831ull, 13578785355103146299ull, 14438994793906470949ull, 3989476371448452136ull}}, {{6817234157788249692ull, 10792583856153160389ull, 9024371746191544343ull, 2493422732155282585ull}}, {{13133228715662700019ull, 8879043801764062582ull, 15892150701166818333ull, 3116778415194103231ull}}, {{7193163857723599216ull, 15710490770632466132ull, 15253502358031135012ull, 3895973018992629039ull}}, {{13719099447932025318ull, 595684694790515524ull, 16450968001410541239ull, 2434983136870393149ull}}, {{17148874309915031648ull, 14579663923770308117ull, 6728651946481012836ull, 3043728921087991437ull}}, {{7601034832111625847ull, 18224579904712885147ull, 13022500951528653949ull, 3804661151359989296ull}}, {{2444803760856072203ull, 13696205449659247169ull, 8139063094705408718ull, 2377913219599993310ull}}, {{7667690719497478157ull, 7896884775219283153ull, 950456831526985090ull, 2972391524499991638ull}}, {{14196299417799235600ull, 647733932169328133ull, 10411443076263507171ull, 3715489405624989547ull}}, {{11178530145338216202ull, 16545734772101687747ull, 4201308913450998029ull, 2322180878515618467ull}}, {{9361476663245382349ull, 6847110409844945972ull, 639950123386359633ull, 2902726098144523084ull}}, {{11701845829056727936ull, 13170574030733570369ull, 799937654232949541ull, 3628407622680653855ull}}, {{792249231038746208ull, 2628159483134799250ull, 14834980123073350639ull, 4535509528350817318ull}}, {{5106841787826604284ull, 8560128704600331387ull, 4660176558493456245ull, 2834693455219260824ull}}, {{1771866216355867451ull, 15311846899177802138ull, 5825220698116820306ull, 3543366819024076030ull}}, {{11438204807299610122ull, 9916436587117476864ull, 16504897909500801191ull, 4429208523780095037ull}}, {{7148878004562256326ull, 13115301894589504896ull, 12621404202651694696ull, 2768255327362559398ull}}, {{8936097505702820408ull, 16394127368236881120ull, 6553383216459842562ull, 3460319159203199248ull}}, {{11170121882128525510ull, 11269287173441325592ull, 8191729020574803203ull, 4325398949003999060ull}}, {{6981326176330328444ull, 4737461474187134543ull, 14343202674714027810ull, 2703374343127499412ull}}, {{4114971701985522650ull, 15145198879588693987ull, 17929003343392534762ull, 3379217928909374265ull}}, {{532028609054515409ull, 9708126562631091676ull, 8576196123958504741ull, 4224022411136717832ull}}, {{9555889917513847939ull, 8373422110858126249ull, 5360122577474065463ull, 2640014006960448645ull}}, {{16556548415319697827ull, 5855091620145269907ull, 11311839240269969733ull, 3300017508700560806ull}}, {{16083999500722234380ull, 11930550543608975288ull, 4916427013482686358ull, 4125021885875701008ull}}, {{10052499687951396488ull, 2844908071328221651ull, 3072766883426678974ull, 2578138678672313130ull}}, {{7953938591511857706ull, 12779507126015052872ull, 13064330641138124525ull, 3222673348340391412ull}}, {{9942423239389822132ull, 2139325852236652378ull, 16330413301422655657ull, 4028341685425489265ull}}, {{10825700543046026737ull, 12866293703716377496ull, 3288979285748077929ull, 2517713553390930791ull}}, {{13532125678807533421ull, 2247809074363308158ull, 17946282162467261124ull, 3147141941738663488ull}}, {{7691785061654640968ull, 2809761342954135198ull, 3986108629374524789ull, 3933927427173329361ull}}, {{195679645106762701ull, 4061943848560028451ull, 14020532939427547753ull, 2458704641983330850ull}}, {{14079657611665617088ull, 9689115829127423467ull, 8302294137429658883ull, 3073380802479163563ull}}, {{12987885996154633456ull, 7499708767981891430ull, 5766181653359685700ull, 3841726003098954454ull}}, {{3505742729169258006ull, 13910690016843457952ull, 17438921588631967274ull, 2401078751936846533ull}}, {{4382178411461572508ull, 8164990484199546632ull, 7963593930507795381ull, 3001348439921058167ull}}, {{5477723014326965634ull, 14817924123676821194ull, 5342806394707356322ull, 3751685549901322709ull}}, {{8035262902381741426ull, 13872888595725401150ull, 5645097005905791653ull, 2344803468688326693ull}}, {{820706591122400974ull, 3506052689374587726ull, 11668057275809627471ull, 2931004335860408366ull}}, {{10249255275757777025ull, 18217623917000398369ull, 5361699557907258530ull, 3663755419825510458ull}}, {{17423255113124609185ull, 13548657859395722153ull, 15925496484238848971ull, 4579694274781888072ull}}, {{3972005418061798885ull, 6162068152908632394ull, 9953435302649280607ull, 2862308921738680045ull}}, {{14188378809432024414ull, 3090899172708402588ull, 17053480146738988663ull, 3577886152173350056ull}}, {{17735473511790030518ull, 17698682021167666947ull, 2870106109714184212ull, 4472357690216687571ull}}, {{8778827935655075122ull, 1838304226375016034ull, 17934717383067222797ull, 2795223556385429731ull}}, {{1750162882714068094ull, 6909566301396157947ull, 17806710710406640592ull, 3494029445481787164ull}}, {{16022761658674748829ull, 8636957876745197433ull, 3811644314298749124ull, 4367536806852233956ull}}, {{3096697009030636163ull, 14621470709820524204ull, 11605649733291494010ull, 2729710504282646222ull}}, {{3870871261288295203ull, 9053466350420879447ull, 5283690129759591705ull, 3412138130353307778ull}}, {{226903058182981100ull, 15928518956453487213ull, 15827984699054265439ull, 4265172662941634722ull}}, {{2447657420578057140ull, 16872853375424511364ull, 14504176455336303803ull, 2665732914338521701ull}}, {{3059571775722571424ull, 16479380700853251301ull, 4295162513888216042ull, 3332166142923152127ull}}, {{8436150738080602184ull, 11375853839211788318ull, 757267123932882149ull, 4165207678653940159ull}}, {{660908192872988461ull, 9415751658721061651ull, 7390820980099133199ull, 2603254799158712599ull}}, {{14661193296373399289ull, 7158003554973939159ull, 4626840206696528595ull, 3254068498948390749ull}}, {{13714805602039361207ull, 4335818425290036045ull, 10395236276798048648ull, 4067585623685488436ull}}, {{10877596510488294706ull, 2709886515806272528ull, 15720394709853556213ull, 2542241014803430272ull}}, {{13596995638110368383ull, 7999044163185228564ull, 1203749313607393650ull, 3177801268504287841ull}}, {{16996244547637960478ull, 775433167126759897ull, 6116372660436629967ull, 3972251585630359801ull}}, {{3705123814632643443ull, 7402174757095306792ull, 15351947958841363489ull, 2482657241018974875ull}}, {{4631404768290804304ull, 13864404464796521394ull, 14578248930124316457ull, 3103321551273718594ull}}, {{15012627997218281188ull, 3495447525713488030ull, 8999439125800619764ull, 3879151939092148243ull}}, {{4771206479834037838ull, 11408026740425705827ull, 3318806444411693400ull, 2424469961932592652ull}}, {{1352322081365159394ull, 14260033425532132284ull, 4148508055514616750ull, 3030587452415740815ull}}, {{1690402601706449242ull, 8601669745060389547ull, 573949050965883034ull, 3788234315519676019ull}}, {{17197402690562388441ull, 9987729609090131370ull, 16499619221349534560ull, 2367646447199797511ull}}, {{12273381326348209743ull, 12484662011362664213ull, 16012838008259530296ull, 2959558058999746889ull}}, {{1506668602653098466ull, 15605827514203330267ull, 6180989455042249158ull, 3699447573749683612ull}}, {{17082568941154044206ull, 5141956177949693512ull, 13086490446256181532ull, 2312154733593552257ull}}, {{2906467102733003641ull, 6427445222437116891ull, 2523055002538063203ull, 2890193416991940322ull}}, {{17468141933698418263ull, 3422620509619008209ull, 12377190790027354812ull, 3612741771239925402ull}}, {{8000119361840859116ull, 4278275637023760262ull, 6248116450679417707ull, 4515927214049906753ull}}, {{388388582723149044ull, 368079263926156212ull, 15434287827743105827ull, 2822454508781191720ull}}, {{485485728403936305ull, 14295157135189858977ull, 846115710969330667ull, 3528068135976489651ull}}, {{5218543178932308285ull, 13257260400559935817ull, 14892702693993827046ull, 4410085169970612063ull}}, {{14790804532901162438ull, 3674101731922571981ull, 16225468211387223760ull, 2756303231231632539ull}}, {{4653447610844289336ull, 4592627164903214977ull, 15670149245806641796ull, 3445379039039540674ull}}, {{10428495531982749574ull, 5740783956129018721ull, 10364314520403526437ull, 4306723798799425843ull}}, {{18047024753557688244ull, 5893832981794330652ull, 4171853566038510071ull, 2691702374249641152ull}}, {{4112036868237558688ull, 2755605208815525412ull, 5214816957548137589ull, 3364627967812051440ull}}, {{5140046085296948360ull, 8056192529446794669ull, 6518521196935171986ull, 4205784959765064300ull}}, {{5518371812524286677ull, 9646806349331634572ull, 13297447784939258299ull, 2628615599853165187ull}}, {{6897964765655358347ull, 7446821918237155311ull, 12010123712746684970ull, 3285769499816456484ull}}, {{4010769938641810029ull, 85155360941668331ull, 15012654640933356213ull, 4107211874770570605ull}}, {{200888202437437316ull, 2359065109802236659ull, 11688752159797041585ull, 2567007421731606628ull}}, {{14086168308328960357ull, 7560517405680183727ull, 14610940199746301981ull, 3208759277164508285ull}}, {{12996024366983812543ull, 14062332775527617563ull, 4428617194400713764ull, 4010949096455635357ull}}, {{5816672220151188887ull, 18012330021559536785ull, 5073728755714140054ull, 2506843185284772098ull}}, {{11882526293616374013ull, 13292040490094645173ull, 15565532981497450876ull, 3133553981605965122ull}}, {{1018099811738303804ull, 16615050612618306467ull, 10233544190017037787ull, 3916942477007456403ull}}, {{16777213446832297542ull, 8078563623672747589ull, 4090122109546954665ull, 2448089048129660252ull}}, {{7136458753258208215ull, 14709890548018322391ull, 5112652636933693331ull, 3060111310162075315ull}}, {{4308887423145372365ull, 13775677166595515085ull, 1779129777739728760ull, 3825139137702594144ull}}, {{4998897648679551680ull, 8609798229122196928ull, 1111956111087330475ull, 2390711961064121340ull}}, {{6248622060849439600ull, 6150561767975358256ull, 1389945138859163094ull, 2988389951330151675ull}}, {{7810777576061799500ull, 16911574246823973628ull, 15572489478856117579ull, 3735487439162689593ull}}, {{14105108021893400496ull, 8263890895051289565ull, 2815276896643991631ull, 2334679649476680996ull}}, {{3796326972084586908ull, 5718177600386724053ull, 3519096120804989539ull, 2918349561845851245ull}}, {{9357094733533121538ull, 2536035982056017162ull, 9010556169433624828ull, 3647936952307314056ull}}, {{2472996380061626115ull, 3170044977570021453ull, 11263195211792031035ull, 4559921190384142570ull}}, {{3851465746752210274ull, 18122179175477121072ull, 11651183025797407300ull, 2849950743990089106ull}}, {{4814332183440262842ull, 4205979895636849724ull, 5340606745391983318ull, 3562438429987611383ull}}, {{6017915229300328553ull, 14480846906400837963ull, 2064072413312591243ull, 4453048037484514229ull}}, {{1455354009099011394ull, 6744686307286829775ull, 3595888267534063479ull, 2783155023427821393ull}}, {{15654250566655927954ull, 3819171865681149314ull, 9106546352844967253ull, 3478943779284776741ull}}, {{10344441171465134134ull, 9385650850528824547ull, 15994868959483596970ull, 4348679724105970926ull}}, {{4159432722952014882ull, 10477717800007903246ull, 5385107081249860202ull, 2717924827566231829ull}}, {{14422662940544794410ull, 3873775213155103249ull, 11343069869989713157ull, 3397406034457789786ull}}, {{4193270620398829301ull, 9453905034871266966ull, 4955465300632365638ull, 4246757543072237233ull}}, {{16455852193031432025ull, 1297004628367153949ull, 14626380858963698284ull, 2654223464420148270ull}}, {{6734757186007126319ull, 1621255785458942437ull, 9059604036849847047ull, 3317779330525185338ull}}, {{13030132500936295803ull, 15861627787105841758ull, 2101133009207533000ull, 4147224163156481673ull}}, {{3532146794657796973ull, 9913517366941151099ull, 12842423176823177885ull, 2592015101972801045ull}}, {{18250241548604409928ull, 17003582727103826777ull, 2217970915746808644ull, 3240018877466001307ull}}, {{8977743880473348698ull, 2807734335170231856ull, 16607521699965674518ull, 4050023596832501633ull}}, {{5611089925295842937ull, 15589892014763558622ull, 3462172034837464717ull, 2531264748020313521ull}}, {{16237234443474579479ull, 5652306963172284565ull, 8939401061974218801ull, 3164080935025391901ull}}, {{6461484999061060636ull, 11677069722392743611ull, 15785937345895161405ull, 3955101168781739876ull}}, {{1732585115199468946ull, 9604011585709158709ull, 642838804329700070ull, 2471938230488587423ull}}, {{6777417412426724086ull, 2781642445281672578ull, 14638606560694288800ull, 3089922788110734278ull}}, {{17695143802388180916ull, 3477053056602090722ull, 9074886164013085192ull, 3862403485138417848ull}}, {{15671150894920000976ull, 2173158160376306701ull, 5671803852508178245ull, 2414002178211511155ull}}, {{5753880563367837508ull, 7328133718897771281ull, 2478068797207834902ull, 3017502722764388944ull}}, {{11804036722637184789ull, 18383539185476989909ull, 3097585996509793627ull, 3771878403455486180ull}}, {{9683365960861934446ull, 9183868981709424741ull, 11159363284673396825ull, 2357424002159678862ull}}, {{16715893469504805961ull, 16091522245564168830ull, 4725832068986970223ull, 2946780002699598578ull}}, {{11671494800026231643ull, 15502716788527823134ull, 15130662123088488587ull, 3683475003374498222ull}}, {{5365996463178013746ull, 14766709967232391014ull, 9689955617005834926ull, 4604343754218122778ull}}, {{17188805844768422303ull, 4617507711092856479ull, 10667908279056034733ull, 2877714846386326736ull}}, {{16874321287533139975ull, 10383570657293458503ull, 13334885348820043416ull, 3597143557982908420ull}}, {{16481215590989037064ull, 12979463321616823129ull, 16668606686025054270ull, 4496429447478635525ull}}, {{3383230716727066309ull, 3500478557583126552ull, 12723722187979352871ull, 2810268404674147203ull}}, {{4229038395908832887ull, 18210656252261071902ull, 11292966716546803184ull, 3512835505842684004ull}}, {{14509670031740816916ull, 4316576241616788261ull, 14116208395683503981ull, 4391044382303355005ull}}, {{11374386779051704525ull, 5003703160224186615ull, 11128473256515883940ull, 2744402738939596878ull}}, {{9606297455387242752ull, 6254628950280233269ull, 4687219533790079117ull, 3430503423674496098ull}}, {{16619557837661441344ull, 12429972206277679490ull, 15082396454092374704ull, 4288129279593120122ull}}, {{14998909666965788744ull, 7768732628923549681ull, 14038183802235122094ull, 2680080799745700076ull}}, {{4913579028425072218ull, 487543749299661294ull, 17547729752793902618ull, 3350100999682125095ull}}, {{15365345822386116080ull, 9832801723479352425ull, 17322976172564990368ull, 4187626249602656369ull}}, {{2685812111350240694ull, 6145501077174595266ull, 3909331080212037124ull, 2617266406001660231ull}}, {{12580637176042576676ull, 7681876346468244082ull, 274977831837658501ull, 3271583007502075289ull}}, {{6502424433198445037ull, 14214031451512693007ull, 4955408308224461030ull, 4089478759377594111ull}}, {{10981544298390110004ull, 4272083638768045225ull, 10014659220281370000ull, 2555924224610996319ull}}, {{18338616391415025409ull, 5340104548460056531ull, 7906638006924324596ull, 3194905280763745399ull}}, {{18311584470841393857ull, 6675130685575070664ull, 5271611490228017841ull, 3993631600954681749ull}}, {{11444740294275871161ull, 15701171724552888925ull, 5600600190606205102ull, 2496019750596676093ull}}, {{470867312562675239ull, 10403092618836335349ull, 11612436256685144282ull, 3120024688245845116ull}}, {{5200270159130731953ull, 3780493736690643378ull, 14515545320856430353ull, 3900030860307306395ull}}, {{7861854867884095375ull, 13892023631500121871ull, 6766372816321575018ull, 2437519287692066497ull}}, {{5215632566427731314ull, 8141657502520376531ull, 13069652038829356677ull, 3046899109615083121ull}}, {{1907854689607276238ull, 14788757896577858568ull, 2502006993254532134ull, 3808623887018853902ull}}, {{1192409181004547649ull, 4631287666933773701ull, 15398812426066246296ull, 2380389929386783688ull}}, {{6102197494683072465ull, 5789109583667217126ull, 801771458873256254ull, 2975487411733479611ull}}, {{16851118905208616390ull, 16459759016438797215ull, 14837272378873734029ull, 3719359264666849513ull}}, {{17449478343396467100ull, 12593192394487942211ull, 2355766209155001912ull, 2324599540416780946ull}}, {{17200161910818195970ull, 15741490493109927764ull, 12168079798298528198ull, 2905749425520976182ull}}, {{3053458314813193347ull, 10453491079532633898ull, 5986727711018384440ull, 3632186781901220228ull}}, {{13040194930371267492ull, 13066863849415792372ull, 7483409638772980550ull, 4540233477376525285ull}}, {{17373493868336817990ull, 3555103887457482328ull, 6982974033446806796ull, 2837645923360328303ull}}, {{3270123261711470872ull, 4443879859321852911ull, 4117031523381120591ull, 3547057404200410379ull}}, {{17922712132421502302ull, 943163805724928234ull, 534603385799012835ull, 4433821755250512974ull}}, {{15813381101190826843ull, 16730378443073937810ull, 14169185171406546733ull, 2771138597031570608ull}}, {{10543354339633757745ull, 7077914998560258551ull, 17711481464258183417ull, 3463923246289463260ull}}, {{8567506906114809278ull, 13459079766627711093ull, 3692607756613177655ull, 4329904057861829076ull}}, {{7660534825535449751ull, 15329453881783401289ull, 11531251884738011842ull, 2706190036163643172ull}}, {{14187354550346700092ull, 9938445315374475803ull, 14414064855922514803ull, 3382737545204553965ull}}, {{13122507169505987211ull, 7811370625790706850ull, 4182523014620979792ull, 4228421931505692457ull}}, {{12813252999368629911ull, 4882106641119191781ull, 14143291930206582130ull, 2642763707191057785ull}}, {{2181508193928623677ull, 15326005338253765535ull, 3844056857476063950ull, 3303454633988822232ull}}, {{16561943297692943308ull, 9934134635962431110ull, 4805071071845079938ull, 4129318292486027790ull}}, {{5739528542630701664ull, 10820520165903907348ull, 16838227475185338673ull, 2580823932803767368ull}}, {{7174410678288377079ull, 18137336225807272089ull, 2601040270272121725ull, 3226029916004709211ull}}, {{13579699366287859253ull, 8836612226976926399ull, 17086358393122315869ull, 4032537395005886513ull}}, {{15404841131570993889ull, 7828725651074272951ull, 3761444968060365562ull, 2520335871878679071ull}}, {{14644365396036354458ull, 562535026988065381ull, 90120191648069049ull, 3150419839848348839ull}}, {{4470398689763279360ull, 5314854802162469631ull, 13947708294842250023ull, 3938024799810436048ull}}, {{9711528208743131456ull, 10239313278992625375ull, 8717317684276406264ull, 2461265499881522530ull}}, {{7527724242501526416ull, 12799141598740781719ull, 1673275068490732022ull, 3076581874851903163ull}}, {{4797969284699520116ull, 6775554961571201341ull, 15926651890895578740ull, 3845727343564878953ull}}, {{5304573812150894025ull, 13458093887836776646ull, 3036628404168654856ull, 2403579589728049346ull}}, {{15854089302043393339ull, 16822617359795970807ull, 13019157542065594378ull, 3004474487160061682ull}}, {{15205925609126853769ull, 11804899662890187701ull, 7050574890727217165ull, 3755593108950077103ull}}, {{11809546514917977558ull, 9683905298520061265ull, 11324138334345592584ull, 2347245693093798189ull}}, {{926875088365308235ull, 12104881623150076582ull, 320114862649827018ull, 2934057116367247737ull}}, {{10381965897311411102ull, 5907729992082819919ull, 5011829596739671677ull, 3667571395459059671ull}}, {{8365771353211875973ull, 11996348508530912803ull, 1653100977497201692ull, 4584464244323824589ull}}, {{2922764086543728532ull, 16721089854686596310ull, 3339031120149445009ull, 2865290152702390368ull}}, {{12876827145034436472ull, 7066304263076081675ull, 4173788900186806262ull, 3581612690877987960ull}}, {{11484347912865657686ull, 18056252365699877902ull, 5217236125233507827ull, 4477015863597484950ull}}, {{2566031427113648150ull, 8979314719348729737ull, 17095830633553106104ull, 2798134914748428093ull}}, {{7819225302319448092ull, 11224143399185912171ull, 7534730236659218918ull, 3497668643435535117ull}}, {{5162345609471922210ull, 4806807212127614406ull, 14030098814251411552ull, 4372085804294418896ull}}, {{17061524061202115094ull, 3004254507579759003ull, 8768811758907132220ull, 2732553627684011810ull}}, {{16715219058075255963ull, 3755318134474698754ull, 1737642661779139467ull, 3415692034605014763ull}}, {{11670651785739294145ull, 82461649665985539ull, 16007111382506088046ull, 4269615043256268453ull}}, {{4988314356873364889ull, 13886596586323404674ull, 12310287623279998980ull, 2668509402035167783ull}}, {{15458764982946481919ull, 17358245732904255842ull, 10776173510672610821ull, 3335636752543959729ull}}, {{10100084191828326591ull, 7862749110848156091ull, 18081902906768151431ull, 4169545940679949661ull}}, {{4006709610679010168ull, 11831747221921179413ull, 13607032325943788596ull, 2605966212924968538ull}}, {{9620073031776150613ull, 14789684027401474266ull, 7785418370574959937ull, 3257457766156210673ull}}, {{2801719252865412459ull, 4652046978969679121ull, 14343458981646087826ull, 4071822207695263341ull}}, {{13280289579109352547ull, 7519215380283437354ull, 11270504872742498843ull, 2544888879809539588ull}}, {{7376989937031914875ull, 4787333206926908789ull, 14088131090928123554ull, 3181111099761924485ull}}, {{13832923439717281498ull, 15207538545513411794ull, 3775105808377990730ull, 3976388874702405607ull}}, {{13257263168250688840ull, 14116397609373270275ull, 9276970157877326062ull, 2485243046689003504ull}}, {{11959892941885973146ull, 8422124974861812036ull, 11596212697346657578ull, 3106553808361254380ull}}, {{14949866177357466433ull, 1304284181722489237ull, 14495265871683321973ull, 3883192260451567975ull}}, {{11649509370062110473ull, 3121020622790249725ull, 15977070197443158089ull, 2426995162782229984ull}}, {{726828657295474379ull, 8512961796915200061ull, 1524593673094395995ull, 3033743953477787481ull}}, {{5520221840046730877ull, 6029516227716612172ull, 6517428109795382898ull, 3792179941847234351ull}}, {{12673510686883982607ull, 8380133660750270511ull, 10990921596263196167ull, 2370112463654521469ull}}, {{11230202340177590354ull, 5863481057510450235ull, 18350338013756383113ull, 2962640579568151836ull}}, {{9426066906794600038ull, 11941037340315450698ull, 4491178443485927275ull, 3703300724460189796ull}}, {{10502977835174012928ull, 5157305328483462734ull, 12030358564033480355ull, 2314562952787618622ull}}, {{3905350257112740352ull, 1834945642176940514ull, 5814576168187074636ull, 2893203690984523278ull}}, {{14105059858245701248ull, 2293682052721175642ull, 16491592247088619103ull, 3616504613730654097ull}}, {{8407952785952350752ull, 16702160621183633265ull, 6779432253578610166ull, 4520630767163317622ull}}, {{16784185537288688980ull, 5827164369812382886ull, 18072203213768795066ull, 2825394229477073513ull}}, {{11756859884756085417ull, 16507327499120254416ull, 8755195961928830120ull, 3531742786846341892ull}}, {{14696074855945106771ull, 2187415300190766404ull, 10943994952411037651ull, 4414678483557927365ull}}, {{18408418821820467540ull, 17508035627115086666ull, 9145839854470592483ull, 2759174052223704603ull}}, {{13787151490420808617ull, 17273358515466470429ull, 6820613799660852700ull, 3448967565279630754ull}}, {{3398881307743847059ull, 3144954070623536421ull, 17749139286430841684ull, 4311209456599538442ull}}, {{4430143826553598364ull, 11188968330994486071ull, 15704898072446663956ull, 2694505910374711526ull}}, {{925993764764610051ull, 13986210413743107589ull, 10407750553703554137ull, 3368132387968389408ull}}, {{5769178224383150468ull, 3647704961896720774ull, 13009688192129442672ull, 4210165484960486760ull}}, {{17440794445521632755ull, 2279815601185450483ull, 8131055120080901670ull, 2631353428100304225ull}}, {{17189307038474653039ull, 12073141538336588912ull, 14775504918528514991ull, 3289191785125380281ull}}, {{3039889724383764683ull, 10479740904493348237ull, 4634323092878480027ull, 4111489731406725352ull}}, {{4205774086953546879ull, 4243995056094648696ull, 2896451933049050017ull, 2569681082129203345ull}}, {{5257217608691933599ull, 9916679838545698774ull, 8232250934738700425ull, 3212101352661504181ull}}, {{15794894047719692806ull, 17007535816609511371ull, 14901999686850763435ull, 4015126690826880226ull}}, {{7565965770611114052ull, 8323866876167250655ull, 13925435822709115051ull, 2509454181766800141ull}}, {{4845771194836504661ull, 5793147576781675415ull, 3571736723104230102ull, 3136817727208500177ull}}, {{1445527975118242922ull, 16464806507831870077ull, 9076356922307675531ull, 3921022159010625221ull}}, {{3209297993662595778ull, 7984661058181224846ull, 7978566085655991159ull, 2450638849381640763ull}}, {{13234994528933020531ull, 5369140304299143153ull, 5361521588642601045ull, 3063298561727050954ull}}, {{2708685105884111951ull, 11323111398801316846ull, 15925274022658027114ull, 3829123202158813692ull}}, {{15527986246459733682ull, 11688630642678210932ull, 729924227306491138ull, 2393202001349258558ull}}, {{963238734365115486ull, 5387416266492987858ull, 10135777320987889731ull, 2991502501686573197ull}}, {{10427420454811170166ull, 2122584314688846918ull, 17281407669662250068ull, 3739378127108216496ull}}, {{1905451765829593450ull, 10549987233535305132ull, 10800879793538906292ull, 2337111329442635310ull}}, {{2381814707286991812ull, 13187484041919131415ull, 4277727705068857057ull, 2921389161803294138ull}}, {{16812326439390903477ull, 2649296997116750556ull, 14570531668190847130ull, 3651736452254117672ull}}, {{2568663975529077730ull, 12534993283250714004ull, 18213164585238558912ull, 4564670565317647090ull}}, {{10828787021560449389ull, 7834370802031696252ull, 15994913884201487224ull, 2852919103323529431ull}}, {{13535983776950561737ull, 9792963502539620315ull, 15381956336824471126ull, 3566148879154411789ull}}, {{12308293702760814267ull, 3017832341319749586ull, 5392387365748425196ull, 4457686098943014737ull}}, {{12304369582652896821ull, 11109517250179619299ull, 14899457149661235507ull, 2786053811839384210ull}}, {{10768775959888733122ull, 9275210544297136220ull, 9400949400221768576ull, 3482567264799230263ull}}, {{13460969949860916402ull, 11594013180371420275ull, 7139500731849822816ull, 4353209080999037829ull}}, {{6107263209449378800ull, 7246258237732137672ull, 6768030966619833212ull, 2720755675624398643ull}}, {{7634079011811723499ull, 9057822797165172090ull, 3848352689847403611ull, 3400944594530498304ull}}, {{319226727909878566ull, 6710592478029077209ull, 4810440862309254514ull, 4251180743163122880ull}}, {{11728731751012143864ull, 8805806317195561159ull, 3006525538943284071ull, 2656987964476951800ull}}, {{10049228670337791926ull, 6395571878067063545ull, 3758156923679105089ull, 3321234955596189750ull}}, {{17173221856349627811ull, 12606150866011217335ull, 13921068191453657169ull, 4151543694495237187ull}}, {{17650792687859599238ull, 961315263615928978ull, 6394824610444841779ull, 2594714809059523242ull}}, {{12840118822969723240ull, 15036702134802074935ull, 17216902799910828031ull, 3243393511324404052ull}}, {{11438462510284766145ull, 14184191650075205765ull, 3074384426178983423ull, 4054241889155505066ull}}, {{9454882078141672793ull, 15782648808938085459ull, 6533176284789252543ull, 2533901180722190666ull}}, {{7206916579249703087ull, 15116624992745218920ull, 17389842392841341487ull, 3167376475902738332ull}}, {{9008645724062128859ull, 14284095222504135746ull, 3290558917342125243ull, 3959220594878422916ull}}, {{10242089595966218441ull, 6621716504851390889ull, 11279971360193604085ull, 2474512871799014322ull}}, {{17414298013385160955ull, 12888831649491626515ull, 4876592163387229298ull, 3093141089748767903ull}}, {{17156186498304063290ull, 6887667525009757336ull, 1484054185806648719ull, 3866426362185959879ull}}, {{10722616561440039556ull, 11222321230772180191ull, 7845062893770237305ull, 2416516476366224924ull}}, {{8791584683372661541ull, 192843483183061527ull, 9806328617212796632ull, 3020645595457781155ull}}, {{6377794835788439022ull, 241054353978826909ull, 7646224753088607886ull, 3775806994322226444ull}}, {{6291964781581468341ull, 13985717026518930530ull, 14002262507535155736ull, 2359879371451391527ull}}, {{17088328013831611234ull, 17482146283148663162ull, 12891142115991556766ull, 2949849214314239409ull}}, {{12137037980434738235ull, 12629310817081053145ull, 2278869589707282246ull, 3687311517892799262ull}}, {{1336239420261259081ull, 6563266484496540624ull, 12071959023988878616ull, 4609139397365999077ull}}, {{835149637663286926ull, 4102041552810337890ull, 9850817399206743087ull, 2880712123353749423ull}}, {{10267309083933884466ull, 515865922585534458ull, 7701835730581040955ull, 3600890154192186779ull}}, {{3610764318062579774ull, 14479890458514081785ull, 5015608644798913289ull, 4501112692740233474ull}}, {{13785942744857582119ull, 2132402508930219259ull, 7746441421426708710ull, 2813195432962645921ull}}, {{12620742412644589744ull, 11888875173017549882ull, 14294737795210773791ull, 3516494291203307401ull}}, {{6552555978950961372ull, 10249407947844549449ull, 4033364188731303527ull, 4395617864004134252ull}}, {{15624562532912820618ull, 13323408995043925261ull, 11744224654811840512ull, 2747261165002583907ull}}, {{5695645110858862060ull, 16654261243804906577ull, 10068594800087412736ull, 3434076456253229884ull}}, {{11731242407000965479ull, 2371082481046581605ull, 12585743500109265921ull, 4292595570316537355ull}}, {{9637869513589297377ull, 13011141596722583263ull, 5560246678354597248ull, 2682872231447835847ull}}, {{7435650873559233817ull, 16263926995903229079ull, 2338622329515858656ull, 3353590289309794809ull}}, {{4682877573521654367ull, 1883164671169484733ull, 7534963930322211225ull, 4191987861637243511ull}}, {{5232641492664727931ull, 12706192965549397718ull, 11626881484092463871ull, 2619992413523277194ull}}, {{15764173902685685722ull, 11271055188509359243ull, 5310229818260804031ull, 3274990516904096493ull}}, {{15093531359929719249ull, 9477132967209311150ull, 11249473291253392943ull, 4093738146130120616ull}}, {{4821771081528686627ull, 12840737132146901325ull, 7030920807033370589ull, 2558586341331325385ull}}, {{10638899870338246187ull, 2215863359901462944ull, 13400337027219101141ull, 3198232926664156731ull}}, {{13298624837922807734ull, 7381515218304216584ull, 12138735265596488522ull, 3997791158330195914ull}}, {{8311640523701754834ull, 9225133029867523269ull, 12198395559425193230ull, 2498619473956372446ull}}, {{15001236673054581446ull, 2308044250479628278ull, 6024622412426715730ull, 3123274342445465558ull}}, {{9528173804463450999ull, 12108427349954311156ull, 16754150052388170470ull, 3904092928056831947ull}}, {{15178480664644432683ull, 2956081075294056568ull, 8165500773528912592ull, 2440058080035519967ull}}, {{526356757095989237ull, 3695101344117570711ull, 5595189948483752836ull, 3050072600044399959ull}}, {{14493004001652150259ull, 4618876680146963388ull, 2382301417177303141ull, 3812590750055499949ull}}, {{18281499537887369720ull, 5192640934305546069ull, 3794781394949508415ull, 2382869218784687468ull}}, {{9016816367077048438ull, 1879115149454544683ull, 4743476743686885519ull, 2978586523480859335ull}}, {{6659334440418922643ull, 16183951992100344566ull, 1317659911181218994ull, 3723233154351074169ull}}, {{17997142080543990364ull, 14726656013490103257ull, 12352752490556731631ull, 2327020721469421355ull}}, {{8661369545397824243ull, 13796633998435241168ull, 10829254594768526635ull, 2908775901836776694ull}}, {{10826711931747280304ull, 12634106479616663556ull, 4313196206605882486ull, 3635969877295970868ull}}, {{13533389914684100379ull, 6569261062666053637ull, 5391495258257353108ull, 4544962346619963585ull}}, {{10764211705891256689ull, 13329160201021059331ull, 14898899582479315452ull, 2840601466637477240ull}}, {{8843578613936682957ull, 16661450251276324164ull, 176880404389592699ull, 3550751833296846551ull}}, {{11054473267420853697ull, 16215126795668017301ull, 14056158560769154586ull, 4438439791621058188ull}}, {{9214888801351727513ull, 14746140265719898717ull, 18008471137335497424ull, 2774024869763161367ull}}, {{16130297020117047295ull, 18432675332149873396ull, 17898902903241983876ull, 3467531087203951709ull}}, {{1716127201436757502ull, 4594100091477790130ull, 8538570573770316134ull, 4334413859004939637ull}}, {{5684265519325361343ull, 16706370612455782543ull, 7642449617820141535ull, 2709008661878087273ull}}, {{2493645880729313775ull, 16271277247142340275ull, 14164748040702564823ull, 3386260827347609091ull}}, {{16952115406193805930ull, 15727410540500537439ull, 13094249032450818125ull, 4232826034184511364ull}}, {{17512601156512210563ull, 12135474597026529851ull, 17407277682136537136ull, 2645516271365319602ull}}, {{17279065427212875299ull, 15169343246283162314ull, 12535725065815895612ull, 3306895339206649503ull}}, {{12375459747161318316ull, 514934984144401277ull, 11057970313842481612ull, 4133619174008311879ull}}, {{10040505351189517900ull, 9545206401945026606ull, 13828760473792632863ull, 2583511983755194924ull}}, {{3327259652132121566ull, 7319821984003895354ull, 17285950592240791079ull, 3229389979693993655ull}}, {{13382446602019927766ull, 4538091461577481288ull, 16995752221873600945ull, 4036737474617492069ull}}, {{8364029126262454854ull, 14365522209554395565ull, 12928188147884694542ull, 2522960921635932543ull}}, {{15066722426255456471ull, 8733530725088218648ull, 11548549166428480274ull, 3153701152044915679ull}}, {{386658959109768973ull, 1693541369505497503ull, 9824000439608212439ull, 3942126440056144599ull}}, {{7159190877084687464ull, 7975992383582017795ull, 13057529302396214630ull, 2463829025035090374ull}}, {{4337302577928471426ull, 746618442622746436ull, 7098539591140492480ull, 3079786281293862968ull}}, {{5421628222410589282ull, 933273053278433045ull, 8873174488925615600ull, 3849732851617328710ull}}, {{5694360648220312254ull, 583295658299020653ull, 934048037151121846ull, 2406083032260830444ull}}, {{11729636828702778221ull, 9952491609728551624ull, 1167560046438902307ull, 3007603790326038055ull}}, {{14662046035878472776ull, 7828928493733301626ull, 15294508113330791596ull, 3759504737907547568ull}}, {{13775464790851433389ull, 14116452345438089324ull, 9559067570831744747ull, 2349690461192217230ull}}, {{17219330988564291736ull, 13033879413370223751ull, 2725462426684905126ull, 2937113076490271538ull}}, {{16912477717277976766ull, 7068977229858003881ull, 12630200070210907216ull, 3671391345612839422ull}}, {{7305539091315307246ull, 8836221537322504852ull, 6564378050908858212ull, 4589239182016049278ull}}, {{13789333968926842837ull, 14746010497681341340ull, 17937794337100200094ull, 2868274488760030798ull}}, {{17236667461158553546ull, 9209141085246900867ull, 13198870884520474310ull, 3585343110950038498ull}}, {{16934148308020804028ull, 2288054319703850276ull, 7275216568795817080ull, 4481678888687548123ull}}, {{1360470655658226710ull, 1430033949814906423ull, 2241167346283691723ull, 2801049305429717577ull}}, {{15535646374854947099ull, 15622600492550796740ull, 7413145201282002557ull, 3501311631787146971ull}}, {{972813894859132258ull, 5693192560406332214ull, 4654745483175115293ull, 4376639539733933714ull}}, {{14443066739569121373ull, 5864088359467651585ull, 7520901945411834962ull, 2735399712333708571ull}}, {{4218775369179238005ull, 16553482486189340290ull, 4789441413337405798ull, 3419249640417135714ull}}, {{14496841248328823314ull, 11468481070881899554ull, 15210173803526533056ull, 4274062050521419642ull}}, {{13672211798632902475ull, 7167800669301187221ull, 14118044645631471064ull, 2671288781575887276ull}}, {{3255206693008964382ull, 8959750836626484027ull, 17647555807039338830ull, 3339110976969859095ull}}, {{17904066421543369189ull, 1976316508928329225ull, 17447758740371785634ull, 4173888721212323869ull}}, {{4272512485823523887ull, 5846883836507593670ull, 13210692221946059973ull, 2608680450757702418ull}}, {{14564012644134180667ull, 11920290814061879991ull, 7289993240577799158ull, 3260850563447128023ull}}, {{13593329786740337930ull, 5676991480722574181ull, 4500805532294861044ull, 4076063204308910029ull}}, {{10801674125926405158ull, 12771491712306384671ull, 5118846466897982104ull, 2547539502693068768ull}}, {{8890406638980618544ull, 15964364640382980839ull, 6398558083622477630ull, 3184424378366335960ull}}, {{6501322280298385276ull, 10732083763623950241ull, 7998197604528097038ull, 3980530472957919950ull}}, {{15592541471254960558ull, 2095866333837580996ull, 387187484402672745ull, 2487831545598699969ull}}, {{1043932765359149081ull, 7231518935724364150ull, 5095670373930728835ull, 3109789431998374961ull}}, {{10528287993553712159ull, 4427712651228067283ull, 10981273985840798948ull, 3887236789997968701ull}}, {{4274336986757376147ull, 11990692443872317860ull, 9169139250364193294ull, 2429522993748730438ull}}, {{5342921233446720184ull, 5764993517985621517ull, 2238052026100465810ull, 3036903742185913048ull}}, {{11290337560235788134ull, 16429613934336802704ull, 2797565032625582262ull, 3796129677732391310ull}}, {{7056460975147367584ull, 5656822690533113786ull, 15583536200673152626ull, 2372581048582744568ull}}, {{18043948255788985288ull, 16294400400021168040ull, 1032676177131889166ull, 2965726310728430711ull}}, {{4108191246026679994ull, 11144628463171684243ull, 15125903276697025170ull, 3707157888410538388ull}}, {{261776519552981044ull, 11577078807909690556ull, 230317511080864923ull, 2316973680256586493ull}}, {{327220649441226305ull, 9859662491459725291ull, 4899582907278469058ull, 2896217100320733116ull}}, {{14244083867083696593ull, 3101206077469880805ull, 6124478634098086323ull, 3620271375400916395ull}}, {{3970046778572457030ull, 17711565652119514719ull, 3043912274195219999ull, 4525339219251145494ull}}, {{9398808264248867500ull, 17987257560215778555ull, 15737503226654176211ull, 2828337012031965933ull}}, {{7136824311883696470ull, 17872385931842335290ull, 5836820978035556552ull, 3535421265039957417ull}}, {{18144402426709396396ull, 3893738341093367496ull, 11907712240971833595ull, 4419276581299946771ull}}, {{11340251516693372748ull, 127743453969660733ull, 5136477141393702045ull, 2762047863312466732ull}}, {{340256340584552222ull, 4771365335889463821ull, 6420596426742127556ull, 3452559829140583415ull}}, {{5037006444158078182ull, 5964206669861829776ull, 3414059515000271541ull, 4315699786425729269ull}}, {{3148129027598798864ull, 6033472177877337562ull, 4439630206088863665ull, 2697312366516080793ull}}, {{13158533321353274388ull, 12153526240774059856ull, 10161223776038467485ull, 3371640458145100991ull}}, {{16448166651691592985ull, 1356849745685411108ull, 8089843701620696453ull, 4214550572681376239ull}}, {{1056732120452469808ull, 3153874100267075895ull, 11973681341154017139ull, 2634094107925860149ull}}, {{15155973205847750971ull, 17777400680616008580ull, 1132043621160357711ull, 3292617634907325187ull}}, {{498222433600137098ull, 17610064832342622822ull, 15250112581732610851ull, 4115772043634156483ull}}, {{14146447076282249398ull, 8700447511000445311ull, 7225477354369187830ull, 2572357527271347802ull}}, {{13071372826925423844ull, 1652187351895780831ull, 18255218729816260596ull, 3215446909089184752ull}}, {{11727530015229391901ull, 2065234189869726039ull, 4372279338560774129ull, 4019308636361480941ull}}, {{14247235287159451794ull, 12819986414737048534ull, 5038517595814177782ull, 2512067897725925588ull}}, {{8585672072094538935ull, 6801610981566534860ull, 6298146994767722228ull, 3140084872157406985ull}}, {{10732090090118173668ull, 8502013726958168575ull, 12484369761887040689ull, 3925106090196758731ull}}, {{13625085333964940399ull, 16842973625417325119ull, 5496888091965706478ull, 2453191306372974207ull}}, {{12419670649028787594ull, 11830344994916880591ull, 2259424096529745194ull, 3066489132966217759ull}}, {{10912902292858596589ull, 5564559206791324931ull, 16659338175944345205ull, 3833111416207772198ull}}, {{4514720923822928916ull, 5783692513458272034ull, 5800400341537827849ull, 2395694635129857624ull}}, {{14866773191633436953ull, 11841301660250227946ull, 7250500426922284811ull, 2994618293912322030ull}}, {{9360094452687020383ull, 10189941056885397029ull, 18286497570507631822ull, 3743272867390402537ull}}, {{8155902042143081692ull, 1757027142125985239ull, 4511531953926188033ull, 2339545542119001586ull}}, {{5583191534251464211ull, 6807969946084869453ull, 14862786979262510849ull, 2924431927648751982ull}}, {{11590675436241718167ull, 13121648451033474720ull, 9355111687223362753ull, 3655539909560939978ull}}, {{14488344295302147709ull, 2567002508509679688ull, 2470517572174427634ull, 4569424886951174973ull}}, {{9055215184563842318ull, 6216062586245937709ull, 3849916491822711223ull, 2855890554344484358ull}}, {{15930704999132190802ull, 3158392214380034232ull, 14035767651633164837ull, 3569863192930605447ull}}, {{1466637175205686886ull, 8559676286402430695ull, 12933023546114068142ull, 4462328991163256809ull}}, {{7834177262144636160ull, 738111660574131280ull, 1165610688680210733ull, 2788955619477035506ull}}, {{9792721577680795200ull, 5534325594145052004ull, 10680385397705039224ull, 3486194524346294382ull}}, {{12240901972100993999ull, 6917906992681315005ull, 4127109710276523222ull, 4357743155432867978ull}}, {{9956406741776815202ull, 18158749925707985590ull, 7191129587350214917ull, 2723589472145542486ull}}, {{3222136390366243194ull, 8863379351852818276ull, 18212284021042544455ull, 3404486840181928107ull}}, {{4027670487957803993ull, 6467538171388634941ull, 18153669007875792665ull, 4255608550227410134ull}}, {{4823137064187321448ull, 15571426403186366598ull, 6734357111494982511ull, 2659755343892131334ull}}, {{15252293367088927617ull, 14852596985555570343ull, 17641318426223503947ull, 3324694179865164167ull}}, {{14453680690433771617ull, 13954060213517075025ull, 17439962014351992030ull, 4155867724831455209ull}}, {{2116021403880025405ull, 4109601615020783987ull, 3982447231328913163ull, 2597417328019659506ull}}, {{16480084810132195468ull, 525316000348592079ull, 14201431076015917262ull, 3246771660024574382ull}}, {{15988419994237856431ull, 9880017037290515907ull, 8528416808165120769ull, 4058464575030717978ull}}, {{7686919487184966318ull, 17704225694375042202ull, 9941946523530588384ull, 2536540359394198736ull}}, {{385277322126432089ull, 3683538044259251137ull, 12427433154413235481ull, 3170675449242748420ull}}, {{5093282671085428015ull, 9216108573751451825ull, 15534291443016544351ull, 3963344311553435525ull}}, {{14712516715496862270ull, 12677596886235739246ull, 12014775161099034171ull, 2477090194720897203ull}}, {{9167273857516302029ull, 11235310089367286154ull, 10406782932946404810ull, 3096362743401121504ull}}, {{2235720285040601728ull, 4820765574854331885ull, 13008478666183006013ull, 3870453429251401880ull}}, {{3703168187364070032ull, 5318821493497651380ull, 8130299166364378758ull, 2419033393282126175ull}}, {{4628960234205087540ull, 15871898903726840033ull, 5551187939528085543ull, 3023791741602657719ull}}, {{10397886311183747329ull, 15228187611231162137ull, 2327298905982719025ull, 3779739677003322149ull}}, {{18027893990558311841ull, 2600088229378394479ull, 3760404825452893343ull, 2362337298127076343ull}}, {{17923181469770501897ull, 17085168342005156811ull, 88820013388728774ull, 2952921622658845429ull}}, {{17792290818785739467ull, 12133088390651670206ull, 4722711035163298872ull, 3691152028323556786ull}}, {{6508495743313699263ull, 7583180244157293879ull, 7563380415404449699ull, 2306970017702222991ull}}, {{3523933660714736175ull, 4867289286769229445ull, 4842539500828174220ull, 2883712522127778739ull}}, {{9016603094320808122ull, 6084111608461536806ull, 1441488357607829871ull, 3604640652659723424ull}}, {{2047381831046234345ull, 2993453492149533104ull, 1801860447009787339ull, 4505800815824654280ull}}, {{1279613644403896466ull, 18011809497089315854ull, 1126162779381117086ull, 2816125509890408925ull}}, {{10822889092359646390ull, 13291389834506869009ull, 6019389492653784262ull, 3520156887363011156ull}}, {{18140297383876945891ull, 7390865256278810453ull, 7524236865817230328ull, 4400196109203763945ull}}, {{13643528874136785134ull, 4619290785174256533ull, 16231863087204238715ull, 2750122568252352465ull}}, {{3219353037388817706ull, 1162427463040432763ull, 6454770803723134682ull, 3437653210315440582ull}}, {{17859249352018185844ull, 10676406365655316761ull, 17291835541508694160ull, 4297066512894300727ull}}, {{4244501817370284297ull, 6672753978534572976ull, 17724926241084015706ull, 2685666570558937954ull}}, {{5305627271712855371ull, 17564314510022992028ull, 12932785764500243824ull, 3357083213198672443ull}}, {{6632034089641069213ull, 3508649063819188419ull, 11554296187197916877ull, 4196354016498340554ull}}, {{1839178296811974306ull, 4498748674100686714ull, 11833121135426085952ull, 2622721260311462846ull}}, {{11522344907869743691ull, 5623435842625858392ull, 5568029382427831632ull, 3278401575389328558ull}}, {{14402931134837179614ull, 7029294803282322990ull, 16183408764889565348ull, 4098001969236660697ull}}, {{4390145940845849355ull, 13616681288906227677ull, 3197101450414896486ull, 2561251230772912936ull}}, {{10099368444484699597ull, 7797479574278008788ull, 3996376813018620608ull, 3201564038466141170ull}}, {{12624210555605874496ull, 9746849467847510985ull, 14218843053128051568ull, 4001955048082676462ull}}, {{972602569612589704ull, 6091780917404694366ull, 4275090889777644326ull, 2501221905051672789ull}}, {{10439125248870512938ull, 16838098183610643765ull, 9955549630649443311ull, 3126527381314590986ull}}, {{17660592579515529077ull, 16435936711085916802ull, 3221065001457028331ull, 3908159226643238733ull}}, {{15649556380624593577ull, 7966617435215004049ull, 4319008635124336659ull, 2442599516652024208ull}}, {{5726887420498578259ull, 5346585775591367158ull, 5398760793905420824ull, 3053249395815030260ull}}, {{16381981312477998632ull, 6683232219489208947ull, 6748450992381776030ull, 3816561744768787825ull}}, {{7932895311085055193ull, 18012078192462919304ull, 15746996916307079778ull, 2385351090480492390ull}}, {{9916119138856318992ull, 13291725703723873322ull, 10460374108529073915ull, 2981688863100615488ull}}, {{3171776886715622931ull, 12002971111227453749ull, 13075467635661342394ull, 3727111078875769360ull}}, {{4288203563410958284ull, 12113542962944546497ull, 8172167272288338996ull, 2329444424297355850ull}}, {{9971940472691085759ull, 15141928703680683121ull, 991837053505647937ull, 2911805530371694813ull}}, {{17076611609291245103ull, 5092352824318690189ull, 5851482335309447826ull, 3639756912964618516ull}}, {{7510706456331892666ull, 15588813067253138545ull, 7314352919136809782ull, 4549696141205773145ull}}, {{16223406581275902677ull, 5131322148605823686ull, 16100685620528975874ull, 2843560088253608215ull}}, {{11055886189740102538ull, 15637524722612055416ull, 15514171007233831938ull, 3554450110317010269ull}}, {{13819857737175128172ull, 10323533866410293462ull, 5557655703760126211ull, 4443062637896262837ull}}, {{4025725067307067204ull, 4146365657292739462ull, 5779377824063772834ull, 2776914148685164273ull}}, {{14255528370988609813ull, 14406329108470700135ull, 11835908298507103946ull, 3471142685856455341ull}}, {{13207724445308374362ull, 8784539348733599361ull, 959827317851716221ull, 4338928357320569177ull}}, {{1337298750676652120ull, 7796180102172193553ull, 12129107119725792398ull, 2711830223325355735ull}}, {{6283309456773203054ull, 521853090860466133ull, 10549697881229852594ull, 3389787779156694669ull}}, {{12465822839393891721ull, 9875688400430358474ull, 17798808369964703646ull, 4237234723945868336ull}}, {{12402825293048570230ull, 1560619231841586142ull, 11124255231227939779ull, 2648271702466167710ull}}, {{6280159579455936979ull, 15785832095084146390ull, 4681947002180148915ull, 3310339628082709638ull}}, {{17073571511174697032ull, 15120604100427795083ull, 15075805789579961952ull, 4137924535103387047ull}}, {{8365139185270491693ull, 9450377562767371927ull, 16339907646128558076ull, 2586202834439616904ull}}, {{5844737963160726713ull, 11812971953459214909ull, 1978140483951145979ull, 3232753543049521131ull}}, {{11917608472378296295ull, 10154528923396630732ull, 16307733660221096186ull, 4040941928811901413ull}}, {{16671877332091210992ull, 10958266595550282111ull, 12498176546851879068ull, 2525588705507438383ull}}, {{16228160646686625836ull, 13697833244437852639ull, 11011034665137460931ull, 3156985881884297979ull}}, {{15673514789930894391ull, 12510605537119927895ull, 9152107312994438260ull, 3946232352355372474ull}}, {{16713475771347890851ull, 17042500497554730742ull, 10331753089048911816ull, 2466395220222107796ull}}, {{11668472677330087755ull, 2856381548233861812ull, 12914691361311139771ull, 3082994025277634745ull}}, {{14585590846662609694ull, 17405534990574490977ull, 2308306146356761001ull, 3853742531597043432ull}}, {{2198465251523049203ull, 3960930341467975005ull, 1442691341472975626ull, 2408589082248152145ull}}, {{7359767582831199407ull, 14174534963689744564ull, 6415050195268607436ull, 3010736352810190181ull}}, {{9199709478538999259ull, 17718168704612180705ull, 12630498762513147199ull, 3763420441012737726ull}}, {{17279033470155344297ull, 17991384468023694796ull, 3282375708143329095ull, 2352137775632961079ull}}, {{3152047763984628755ull, 17877544566602230592ull, 17938027690461325081ull, 2940172219541201348ull}}, {{3940059704980785944ull, 8511872652970624528ull, 3975790539367104736ull, 3675215274426501686ull}}, {{4925074631225982430ull, 10639840816213280660ull, 14193110211063656728ull, 4594019093033127107ull}}, {{12301543681371014827ull, 6649900510133300412ull, 6564850872701091503ull, 2871261933145704442ull}}, {{15376929601713768534ull, 3700689619239237611ull, 17429435627731140187ull, 3589077416432130552ull}}, {{14609475983714822763ull, 14176005621659110ull, 3340050460954373618ull, 4486346770540163191ull}}, {{4519236471394376323ull, 4620546021940924848ull, 9005060565737565367ull, 2803966731587601994ull}}, {{5649045589242970404ull, 1163996508998768156ull, 2032953670317180901ull, 3504958414484502493ull}}, {{7061306986553713004ull, 6066681654675848099ull, 7152878106323864030ull, 4381198018105628116ull}}, {{2107473857382376676ull, 17626734089454568774ull, 13693920853307190826ull, 2738248761316017572ull}}, {{11857714358582746653ull, 12810045574963435159ull, 17117401066633988533ull, 3422810951645021965ull}}, {{10210456929801045412ull, 2177498913422130237ull, 7561693278010321955ull, 4278513689556277457ull}}, {{8687378590339347335ull, 17501837885384689062ull, 16255273344824920981ull, 2674071055972673410ull}}, {{1635851201069408360ull, 8042239301448697616ull, 11095719644176375419ull, 3342588819965841763ull}}, {{2044814001336760450ull, 5441113108383484116ull, 9257963536793081370ull, 4178236024957302204ull}}, {{10501380787690251089ull, 8012381711167065476ull, 15009599247350451664ull, 2611397515598313877ull}}, {{13126725984612813862ull, 10015477138958831845ull, 4926941003905900868ull, 3264246894497892347ull}}, {{2573349425483853615ull, 12519346423698539807ull, 1546990236454988181ull, 4080308618122365434ull}}, {{8525872418568490365ull, 10130434524025281331ull, 5578554916211755517ull, 2550192886326478396ull}}, {{6045654504783225053ull, 17274729173458989568ull, 6973193645264694396ull, 3187741107908097995ull}}, {{7557068130979031316ull, 3146667393114185344ull, 4104806038153480092ull, 3984676384885122494ull}}, {{4723167581861894573ull, 11190039157551141648ull, 16400561829128088769ull, 2490422740553201558ull}}, {{5903959477327368216ull, 152490891656763348ull, 11277330249555335154ull, 3113028425691501948ull}}, {{7379949346659210269ull, 9413985651425729993ull, 14096662811944168942ull, 3891285532114377435ull}}, {{16141683387730476179ull, 1272055013713693341ull, 6504571248251411637ull, 2432053457571485897ull}}, {{6342046179380931511ull, 6201754785569504581ull, 12742400078741652450ull, 3040066821964357371ull}}, {{12539243742653552293ull, 16975565518816656534ull, 11316314079999677658ull, 3800083527455446714ull}}, {{3225341320731082279ull, 15221414467687798238ull, 11684382318427186440ull, 2375052204659654196ull}}, {{13255048687768628657ull, 580024010900196181ull, 14605477898033983051ull, 2968815255824567745ull}}, {{2733752804428622109ull, 14560088068907408939ull, 4421789317260315101ull, 3711019069780709682ull}}, {{17849496567263746482ull, 11405898052280824538ull, 7375304341715084842ull, 2319386918612943551ull}}, {{13088498672224907295ull, 5034000528496254865ull, 4607444408716468149ull, 2899233648266179439ull}}, {{2525565284998970406ull, 10904186679047706486ull, 1147619492468197282ull, 3624042060332724299ull}}, {{12380328643103488816ull, 4406861311954857299ull, 15269582420867410315ull, 4530052575415905373ull}}, {{5431862392725986558ull, 448445310758091860ull, 11849332022255825399ull, 2831282859634940858ull}}, {{6789827990907483197ull, 14395614693729778537ull, 5588292990965005940ull, 3539103574543676073ull}}, {{13098971007061741900ull, 17994518367162223171ull, 11597052257133645329ull, 4423879468179595091ull}}, {{5881013870199894736ull, 4329044951835307626ull, 4942314651494834379ull, 2764924667612246932ull}}, {{16574639374604644228ull, 799620171366746628ull, 6177893314368542974ull, 3456155834515308665ull}}, {{2271555144546253669ull, 10222897251063209094ull, 12334052661388066621ull, 4320194793144135831ull}}, {{15254780020623572255ull, 8695153791128199635ull, 14626311941008623494ull, 2700121745715084894ull}}, {{14456789007352077415ull, 1645570202055473736ull, 9059517889406003560ull, 3375152182143856118ull}}, {{18070986259190096768ull, 2056962752569342170ull, 2101025324902728642ull, 4218940227679820148ull}}, {{15906052430421198384ull, 5897287738783226760ull, 10536512864918981209ull, 2636837642299887592ull}}, {{1435821464316946364ull, 11983295691906421355ull, 13170641081148726511ull, 3296047052874859490ull}}, {{15629834885678346667ull, 10367433596455638789ull, 7239929314581132331ull, 4120058816093574363ull}}, {{12074489812762660619ull, 4173802988571080291ull, 2219112812399513755ull, 2575036760058483977ull}}, {{10481426247525937870ull, 605567717286462460ull, 7385577033926780098ull, 3218795950073104971ull}}, {{13101782809407422337ull, 9980331683462853883ull, 4620285273981087218ull, 4023494937591381214ull}}, {{5882771246665945009ull, 10849393320591671581ull, 16722736351520343223ull, 2514684335994613258ull}}, {{11965150076759819165ull, 8950055632312201572ull, 11680048402545653221ull, 3143355419993266573ull}}, {{14956437595949773956ull, 15799255558817639869ull, 765002447899902814ull, 3929194274991583217ull}}, {{11653616506682302675ull, 5262848705833637014ull, 12007341576005909019ull, 2455746421869739510ull}}, {{5343648596498102535ull, 1966874863864658364ull, 5785804933152610466ull, 3069683027337174388ull}}, {{6679560745622628169ull, 11681965616685598763ull, 7232256166440763082ull, 3837103784171467985ull}}, {{1868882456800448654ull, 11912914528855887131ull, 16049375150093946686ull, 2398189865107167490ull}}, {{16171161126282724529ull, 5667771124215083105ull, 10838346900762657550ull, 2997737331383959363ull}}, {{6378893352571241950ull, 16308085942123629690ull, 8936247607525934033ull, 3747171664229949204ull}}, {{8598494363784414123ull, 3275024686186186700ull, 14808526791558484579ull, 2341982290143718252ull}}, {{10748117954730517653ull, 17928838913014897087ull, 63914415738554107ull, 2927477862679647816ull}}, {{8823461424985759162ull, 17799362622841233455ull, 79893019673192634ull, 3659347328349559770ull}}, {{6417640762804811049ull, 13025831241696766011ull, 9323238311446266601ull, 4574184160436949712ull}}, {{1705182467539312954ull, 1223615498419396901ull, 5827023944653916626ull, 2858865100273093570ull}}, {{6743164102851529096ull, 10752891409879021934ull, 16507151967672171590ull, 3573581375341366962ull}}, {{17652327165419187178ull, 4217742225494001609ull, 11410567922735438680ull, 4466976719176708703ull}}, {{4115175450745910130ull, 2636088890933751006ull, 14049133979350731031ull, 2791860449485442939ull}}, {{14367341350287163471ull, 17130169168949352469ull, 12949731455761025884ull, 3489825561856803674ull}}, {{4124118632576790626ull, 2965967387477138971ull, 6963792282846506548ull, 4362281952321004593ull}}, {{271731136146800190ull, 11077101654027987665ull, 15881585222847536352ull, 2726426220200627870ull}}, {{4951349938610888141ull, 13846377067534984581ull, 10628609491704644632ull, 3408032775250784838ull}}, {{10800873441690998080ull, 17307971334418730726ull, 4062389827776029982ull, 4260040969063481048ull}}, {{2138859882629485896ull, 6205796065584318800ull, 2538993642360018739ull, 2662525605664675655ull}}, {{2673574853286857370ull, 3145559063553010596ull, 17008800108232187136ull, 3328157007080844568ull}}, {{3341968566608571713ull, 3931948829441263245ull, 2814256061580682304ull, 4160196258851055711ull}}, {{4394573363344051273ull, 2457468018400789528ull, 8676439066129008296ull, 2600122661781909819ull}}, {{5493216704180064091ull, 3071835023000986910ull, 6233862814233872466ull, 3250153327227387274ull}}, {{16089892917079855921ull, 13063165815606009445ull, 17015700554647116390ull, 4062691659034234092ull}}, {{12362026082388603903ull, 3552792616326367999ull, 1411440809799671936ull, 2539182286896396308ull}}, {{10840846584558366974ull, 4440990770407959999ull, 1764301012249589920ull, 3173977858620495385ull}}, {{8939372212270570814ull, 5551238463009949999ull, 6817062283739375304ull, 3967472323275619231ull}}, {{12504636660310188615ull, 3469524039381218749ull, 11178192954978191421ull, 2479670202047262019ull}}, {{1795737770105572057ull, 8948591067653911341ull, 9361055175295351372ull, 3099587752559077524ull}}, {{6856358231059352975ull, 11185738834567389176ull, 11701318969119189215ull, 3874484690698846905ull}}, {{4285223894412095609ull, 13908615799245700091ull, 395795328058411403ull, 2421552931686779316ull}}, {{744843849587731607ull, 12774083730629737210ull, 494744160073014254ull, 3026941164608474145ull}}, {{10154426848839440317ull, 6744232626432395704ull, 5230116218518655722ull, 3783676455760592681ull}}, {{6346516780524650198ull, 8826831409947635219ull, 14798037682642629586ull, 2364797784850370425ull}}, {{3321459957228424844ull, 1810167225579768216ull, 4662489048021123271ull, 2955997231062963032ull}}, {{4151824946535531055ull, 16097767087256873982ull, 5828111310026404088ull, 3694996538828703790ull}}, {{16429948646866870621ull, 10061104429535546238ull, 17477627624048666267ull, 2309372836767939868ull}}, {{11314063771728812469ull, 7964694518492044894ull, 3400290456351281218ull, 2886716045959924836ull}}, {{4919207677806239778ull, 732496111260280310ull, 4250363070439101523ull, 3608395057449906045ull}}, {{15372381634112575530ull, 14750678194357514099ull, 9924639856476264807ull, 4510493821812382556ull}}, {{7301895512106665754ull, 16136702899114528168ull, 15426271947152441312ull, 2819058638632739097ull}}, {{9127369390133332193ull, 1724134550183608594ull, 5447781878658387929ull, 3523823298290923872ull}}, {{2185839700811889433ull, 6766854206156898647ull, 6809727348322984911ull, 4404779122863654840ull}}, {{8283678840648512752ull, 11146812906489143510ull, 4256079592701865569ull, 2752986951789784275ull}}, {{1131226513955865132ull, 98458077829265676ull, 708413472449944058ull, 3441233689737230344ull}}, {{1414033142444831414ull, 9346444634141357903ull, 885516840562430072ull, 4301542112171537930ull}}, {{7801299741669101490ull, 5841527896338348689ull, 5165134043778906699ull, 2688463820107211206ull}}, {{14363310695513764767ull, 2690223851995547957ull, 15679789591578409182ull, 3360579775134014007ull}}, {{4119080314110042246ull, 12586151851849210755ull, 14988050971045623573ull, 4200724718917517509ull}}, {{268582187105082452ull, 10172187916619450674ull, 11673374866117208685ull, 2625452949323448443ull}}, {{9559099770736128873ull, 17326920914201701246ull, 9980032564219122952ull, 3281816186654310554ull}}, {{2725502676565385283ull, 3211907069042574942ull, 3251668668419127883ull, 4102270233317888193ull}}, {{15538497228135529514ull, 18148342982647467002ull, 13561507963830424686ull, 2563918895823680120ull}}, {{10199749498314636084ull, 13462056691454557945ull, 16951884954788030858ull, 3204898619779600150ull}}, {{17361372891320683009ull, 7604198827463421623ull, 11966484156630262765ull, 4006123274724500188ull}}, {{17768387084716508737ull, 7058467276378332466ull, 16702424634748690036ull, 2503827046702812617ull}}, {{12987111819040860113ull, 8823084095472915583ull, 7042972738153698833ull, 3129783808378515772ull}}, {{11622203755373687237ull, 15640541137768532383ull, 8803715922692123541ull, 3912229760473144715ull}}, {{14181406374749636380ull, 12081181220319026691ull, 3196479442468883261ull, 2445143600295715447ull}}, {{13115071950009657570ull, 1266418470116619652ull, 17830657358368267789ull, 3056429500369644308ull}}, {{16393839937512071963ull, 6194709106073162469ull, 3841577624250783120ull, 3820536875462055386ull}}, {{12551992970158738929ull, 3871693191295726543ull, 7012672033584127354ull, 2387835547163784616ull}}, {{11078305194271035757ull, 14062988525974433987ull, 8765840041980159192ull, 2984794433954730770ull}}, {{9236195474411406792ull, 17578735657468042484ull, 1733928015620423182ull, 3730993042443413463ull}}, {{14995994208361905053ull, 6375023767490138648ull, 8001234037403846345ull, 2331870651527133414ull}}, {{298248686742829701ull, 12580465727790061215ull, 778170509900032123ull, 2914838314408916768ull}}, {{14207868913710700838ull, 11113896141310188614ull, 972713137375040154ull, 3643547893011145960ull}}, {{8536464105283600239ull, 4668998139782959960ull, 1215891421718800193ull, 4554434866263932450ull}}, {{5335290065802250149ull, 14447338883432819735ull, 5371618157001638024ull, 2846521791414957781ull}}, {{2057426563825424783ull, 18059173604291024669ull, 11326208714679435434ull, 3558152239268697226ull}}, {{7183469223209168882ull, 13350594968509005028ull, 4934388856494518485ull, 4447690299085871533ull}}, {{13713040301360506360ull, 10649964864531822094ull, 5389836044522768005ull, 2779806436928669708ull}}, {{7917928339845857141ull, 17924142099092165522ull, 6737295055653460006ull, 3474758046160837135ull}}, {{674038387952545619ull, 13181805587010431095ull, 3809932801139437104ull, 4343447557701046419ull}}, {{7338803020111422868ull, 8238628491881519434ull, 75364991498454238ull, 2714654723563154012ull}}, {{18396875811994054393ull, 1074913577997123484ull, 94206239373067798ull, 3393318404453942515ull}}, {{4549350691283016375ull, 10567014009351180164ull, 13952815854498498459ull, 4241648005567428143ull}}, {{12066716218906661042ull, 4298540746630793650ull, 15638038936702643393ull, 2651030003479642589ull}}, {{5860023236778550495ull, 9984861951715879967ull, 5712490615596140529ull, 3313787504349553237ull}}, {{2713343027545800214ull, 17092763458072237863ull, 11752299287922563565ull, 4142234380436941546ull}}, {{8613368419857206990ull, 12988820170508842616ull, 11956873073378990132ull, 2588896487773088466ull}}, {{10766710524821508738ull, 16236025213136053270ull, 5722719304868961857ull, 3236120609716360583ull}}, {{4235016119172110114ull, 6459973461137902876ull, 2541713112658814418ull, 4045150762145450729ull}}, {{11870257111337344629ull, 8649169431638577201ull, 13117785741480228771ull, 2528219226340906705ull}}, {{1002763333889517075ull, 6199775771120833598ull, 2562174121568122252ull, 3160274032926133382ull}}, {{10476826204216672151ull, 7749719713901041997ull, 12426089688814928623ull, 3950342541157666727ull}}, {{8853859386849114047ull, 11761103848829233104ull, 14683835083150412245ull, 2468964088223541704ull}}, {{11067324233561392558ull, 866321755754377668ull, 18354793853938015307ull, 3086205110279427130ull}}, {{13834155291951740698ull, 14917960249975135797ull, 13720120280567743325ull, 3857756387849283913ull}}, {{10952190066683531888ull, 11629568165448153825ull, 1657546147713757722ull, 2411097742405802446ull}}, {{18301923601781802764ull, 5313588169955416473ull, 11295304721496972961ull, 3013872178007253057ull}}, {{9042346446945089743ull, 11253671230871658496ull, 284072846589052489ull, 3767340222509066322ull}}, {{5651466529340681090ull, 116015491653704704ull, 4789231547545545710ull, 2354587639068166451ull}}, {{7064333161675851362ull, 9368391401421906688ull, 1374853416004544233ull, 2943234548835208064ull}}, {{8830416452094814202ull, 16322175270204771264ull, 1718566770005680291ull, 3679043186044010080ull}}, {{11038020565118517753ull, 15791033069328576176ull, 2148208462507100364ull, 4598803982555012600ull}}, {{6898762853199073596ull, 646023631475584302ull, 1342630289066937728ull, 2874252489096882875ull}}, {{17846825603353617802ull, 807529539344480377ull, 15513345916615835872ull, 3592815611371103593ull}}, {{8473473948909858541ull, 1009411924180600472ull, 5556624340487631128ull, 4491019514213879492ull}}, {{5295921218068661588ull, 630882452612875295ull, 12696262249659545263ull, 2806887196383674682ull}}, {{2008215504158439081ull, 14623661121048257831ull, 6646955775219655770ull, 3508608995479593353ull}}, {{16345327435480212563ull, 9056204364455546480ull, 12920380737451957617ull, 4385761244349491691ull}}, {{10215829647175132852ull, 17189342773853186310ull, 5769394951693779558ull, 2741100777718432307ull}}, {{3546415022114140257ull, 12263306430461707080ull, 2600057671189836544ull, 3426375972148040384ull}}, {{4433018777642675321ull, 15329133038077133850ull, 3250072088987295680ull, 4282969965185050480ull}}, {{7382322754454059980ull, 9580708148798208656ull, 2031295055617059800ull, 2676856228240656550ull}}, {{9227903443067574975ull, 11975885185997760820ull, 11762490856376100558ull, 3346070285300820687ull}}, {{11534879303834468718ull, 5746484445642425217ull, 10091427552042737794ull, 4182587856626025859ull}}, {{291770537255461093ull, 8203238796953903665ull, 4001299210813017169ull, 2614117410391266162ull}}, {{4976399189996714270ull, 14865734514619767485ull, 14224996050371047269ull, 3267646762989082702ull}}, {{10832185005923280742ull, 4747110087992545644ull, 8557873026109033279ull, 4084558453736353378ull}}, {{15993487665556826272ull, 9884472832636422883ull, 9960356659745533703ull, 2552849033585220861ull}}, {{15380173563518644936ull, 7743905022368140700ull, 17062131843109305033ull, 3191061291981526076ull}}, {{778472880688754553ull, 14291567296387563780ull, 2880920730177079675ull, 3988826614976907596ull}}, {{9709917587285247404ull, 6626386551028533410ull, 11023947493215450605ull, 2493016634360567247ull}}, {{2914024947251783447ull, 12894669207213054667ull, 9168248348091925352ull, 3116270792950709059ull}}, {{17477589239346893021ull, 16118336509016318333ull, 6848624416687518786ull, 3895338491188386324ull}}, {{13229336283805502090ull, 14685646336562586862ull, 13503762297284475049ull, 2434586556992741452ull}}, {{7313298317902101804ull, 4521999865421069866ull, 16879702871605593812ull, 3043233196240926815ull}}, {{18364994934232403063ull, 5652499831776337332ull, 16487942571079604361ull, 3804041495301158519ull}}, {{2254749797040476107ull, 15062027440928680593ull, 17222493134565834581ull, 2377525934563224074ull}}, {{7430123264727983037ull, 4992476245878687029ull, 12304744381352517419ull, 2971907418204030093ull}}, {{13899340099337366701ull, 1628909288920970882ull, 1545872421408483062ull, 3714884272755037617ull}}, {{13298773580513242092ull, 14853126360857770513ull, 12495385309448771673ull, 2321802670471898510ull}}, {{2788408920359388903ull, 4731349895790049430ull, 6395859599956188784ull, 2902253338089873138ull}}, {{12708883187304011937ull, 5914187369737561787ull, 17218196536800011788ull, 3627816672612341422ull}}, {{11274417965702627017ull, 7392734212171952234ull, 12299373634145238927ull, 4534770840765426778ull}}, {{11658197246991529790ull, 11537987910248552002ull, 12298794539768162233ull, 2834231775478391736ull}}, {{5349374521884636429ull, 587426832528526291ull, 15373493174710202792ull, 3542789719347989670ull}}, {{2075032133928407632ull, 734283540660657864ull, 9993494431532977682ull, 4428487149184987088ull}}, {{1296895083705254770ull, 5070613231340299069ull, 6245934019708111051ull, 2767804468240616930ull}}, {{6232804873058956367ull, 1726580520747985932ull, 17030789561489914622ull, 3459755585300771162ull}}, {{7791006091323695458ull, 11381597687789758223ull, 12065114915007617469ull, 4324694481625963953ull}}, {{11786907834718391518ull, 9419341564082292841ull, 623167794238679062ull, 2702934051016227471ull}}, {{898576738115825685ull, 2550804918248090244ull, 14614017798080512540ull, 3378667563770284338ull}}, {{1123220922644782106ull, 3188506147810112805ull, 9044150210745864867ull, 4223334454712855423ull}}, {{3007856085866682768ull, 18133717406877178167ull, 12570122909357247397ull, 2639584034195534639ull}}, {{17594878162615517172ull, 8832088703314308996ull, 11100967618269171343ull, 3299480042744418299ull}}, {{3546853629559844849ull, 6428424860715498342ull, 9264523504409076275ull, 4124350053430522874ull}}, {{16051841573757066743ull, 1711922528733492511ull, 10402013208683060576ull, 2577718783394076796ull}}, {{15453115948768945525ull, 2139903160916865639ull, 13002516510853825720ull, 3222148479242595995ull}}, {{14704708917533794002ull, 2674878951146082049ull, 11641459620139894246ull, 4027685599053244994ull}}, {{2272914045817539395ull, 15506857399748464993ull, 11887598281014821807ull, 2517303499408278121ull}}, {{7452828575699312148ull, 14771885731258193337ull, 1024439795986363547ull, 3146629374260347652ull}}, {{13927721738051528089ull, 13853171145645353767ull, 1280549744982954434ull, 3933286717825434565ull}}, {{15622355113923286912ull, 13269917984455734008ull, 3106186599828040473ull, 2458304198640896603ull}}, {{1081199818694557023ull, 2752339425287503799ull, 17717791305067214304ull, 3072880248301120753ull}}, {{15186557828650359991ull, 3440424281609379748ull, 8312181076051854168ull, 3841100310376400942ull}}, {{268226606051699187ull, 2150265176005862343ull, 583427154105020951ull, 2400687693985250589ull}}, {{14170341312846787695ull, 16522889525289491640ull, 5340969961058664092ull, 3000859617481563236ull}}, {{17712926641058484619ull, 2206867832902312934ull, 6676212451323330116ull, 3751074521851954045ull}}, {{6458893132234164983ull, 10602664432418721392ull, 6478475791290775274ull, 2344421576157471278ull}}, {{8073616415292706229ull, 4029958503668625932ull, 17321466775968244901ull, 2930526970196839097ull}}, {{10092020519115882786ull, 9649134148013170319ull, 7816775414678142414ull, 3663158712746048872ull}}, {{8003339630467465578ull, 2838045648161687091ull, 9770969268347678018ull, 4578948390932561090ull}}, {{2696244259828472034ull, 6385464548528442336ull, 10718541811144686665ull, 2861842744332850681ull}}, {{3370305324785590043ull, 12593516704087940824ull, 18009863282358246235ull, 3577303430416063351ull}}, {{4212881655981987553ull, 11130209861682538126ull, 17900643084520419890ull, 4471629288020079189ull}}, {{16468109090270905933ull, 11568067181978974232ull, 13493744937038956383ull, 2794768305012549493ull}}, {{2138392289129080800ull, 9848397959046329887ull, 3032123116016531767ull, 3493460381265686867ull}}, {{16508048416693514712ull, 7698811430380524454ull, 17625211950302828421ull, 4366825476582108583ull}}, {{5705844242006058791ull, 7117600153201521736ull, 17933286496580349619ull, 2729265922863817864ull}}, {{7132305302507573489ull, 4285314173074514266ull, 3969864047015885408ull, 3411582403579772331ull}}, {{18138753664989242669ull, 5356642716343142832ull, 350644040342468856ull, 4264478004474715414ull}}, {{11336721040618276668ull, 3347901697714464270ull, 14054210580496206747ull, 2665298752796697133ull}}, {{4947529263918070027ull, 18019935177425244050ull, 3732705170338094721ull, 3331623440995871417ull}}, {{15407783616752363342ull, 8689860916499391350ull, 9277567481350006306ull, 4164529301244839271ull}}, {{5018178742042839185ull, 10042849091239507498ull, 12716008703484835797ull, 2602830813278024544ull}}, {{15496095464408324789ull, 17165247382476772276ull, 15895010879356044746ull, 3253538516597530680ull}}, {{923375256800854370ull, 12233187191241189538ull, 1422019525485504317ull, 4066923145746913351ull}}, {{5188795553927921886ull, 9951585003739437413ull, 7806291231069522054ull, 2541826966091820844ull}}, {{11097680460837290261ull, 3216109217819520958ull, 9757864038836902568ull, 3177283707614776055ull}}, {{4648728539191837018ull, 4020136522274401198ull, 7585644030118740306ull, 3971604634518470069ull}}, {{16740513392277061848ull, 7124271344848888652ull, 7046870528037906643ull, 2482252896574043793ull}}, {{2478897666636775694ull, 4293653162633722912ull, 13420274178474771208ull, 3102816120717554741ull}}, {{3098622083295969618ull, 5367066453292153640ull, 2940284667811300298ull, 3878520150896943427ull}}, {{1936638802059981011ull, 7966102551734983929ull, 17978578981877920350ull, 2424075094310589641ull}}, {{7032484521002364168ull, 734256152813954103ull, 8638165672065236726ull, 3030093867888237052ull}}, {{4178919632825567306ull, 10141192227872218437ull, 10797707090081545907ull, 3787617334860296315ull}}, {{4917667779729673518ull, 4032402133206442571ull, 4442723922087272240ull, 2367260834287685197ull}}, {{1535398706234703994ull, 5040502666508053214ull, 10165090921036478204ull, 2959076042859606496ull}}, {{11142620419648155800ull, 6300628333135066517ull, 12706363651295597755ull, 3698845053574508120ull}}, {{9269980771493791327ull, 1632049698995722621ull, 7941477282059748597ull, 2311778158484067575ull}}, {{16199161982794627063ull, 6651748142172041180ull, 5315160584147297842ull, 2889722698105084469ull}}, {{1802208404783732213ull, 17538057214569827284ull, 11255636748611510206ull, 3612153372631355586ull}}, {{2252760505979665266ull, 12699199481357508297ull, 4846173898909611950ull, 4515191715789194483ull}}, {{12937190362305760551ull, 3325313657421054781ull, 723015677604813517ull, 2821994822368246552ull}}, {{2336429897600036977ull, 8768328090203706381ull, 903769597006016896ull, 3527493527960308190ull}}, {{7532223390427434125ull, 10960410112754632976ull, 10353084033112296928ull, 4409366909950385237ull}}, {{4707639619017146328ull, 6850256320471645610ull, 8776520529908879532ull, 2755854318718990773ull}}, {{15107921560626208718ull, 8562820400589557012ull, 15582336680813487319ull, 3444817898398738466ull}}, {{438157877073209282ull, 6091839482309558362ull, 10254548814162083341ull, 4306022372998423083ull}}, {{4885534691598143705ull, 6113242685657167928ull, 4103249999637608136ull, 2691263983124014427ull}}, {{6106918364497679631ull, 7641553357071459910ull, 517376481119622266ull, 3364079978905018034ull}}, {{16857019992476875347ull, 328569659484549079ull, 9870092638254303641ull, 4205099973631272542ull}}, {{17453166522939128948ull, 11734571083246312934ull, 1557121880481551871ull, 2628187483519545339ull}}, {{12593086116819135377ull, 10056527835630503264ull, 15781460405884103551ull, 3285234354399431673ull}}, {{15741357646023919221ull, 7958973776110741176ull, 5891767452072965727ull, 4106542942999289592ull}}, {{9838348528764949513ull, 11891887637710295091ull, 3682354657545603579ull, 2566589339374555995ull}}, {{7686249642528798988ull, 10253173528710480960ull, 18438001377214168186ull, 3208236674218194993ull}}, {{9607812053160998735ull, 3593094874033325392ull, 9212443666235546521ull, 4010295842772743742ull}}, {{6004882533225624209ull, 13774899342339298130ull, 1146091272969828671ull, 2506434901732964839ull}}, {{16729475203386806069ull, 12606938159496734758ull, 15267672146494449551ull, 3133043627166206048ull}}, {{11688471967378731779ull, 11146986680943530544ull, 637846109408510323ull, 3916304533957757561ull}}, {{7305294979611707362ull, 4661023666376012638ull, 11927868864448788712ull, 2447690333723598475ull}}, {{18354990761369410010ull, 5826279582970015797ull, 10298150062133597986ull, 3059612917154498094ull}}, {{9108680396429598801ull, 16506221515567295555ull, 3649315540812221674ull, 3824516146443122618ull}}, {{3387082238554805299ull, 14928074465656947626ull, 6892508231435026450ull, 2390322591526951636ull}}, {{13457224835048282431ull, 9436721045216408724ull, 8615635289293783063ull, 2987903239408689545ull}}, {{16821531043810353039ull, 7184215288093123001ull, 15381230130044616733ull, 3734879049260861931ull}}, {{3595927874740388793ull, 6795977564271895828ull, 7307425822064191506ull, 2334299405788038707ull}}, {{4494909843425485992ull, 17718343992194645593ull, 4522596259152851478ull, 2917874257235048384ull}}, {{10230323322709245393ull, 12924557953388531183ull, 5653245323941064348ull, 3647342821543810480ull}}, {{8176218134959168838ull, 16155697441735663979ull, 7066556654926330435ull, 4559178526929763100ull}}, {{2804293325135786572ull, 7791467891871096035ull, 13639969946183732330ull, 2849486579331101937ull}}, {{17340424711701896927ull, 515962827984094235ull, 3214904377447501701ull, 3561858224163877422ull}}, {{17063844871199983254ull, 5256639553407505698ull, 13242002508664152934ull, 4452322780204846777ull}}, {{15276589062927377438ull, 17120457776161854773ull, 1358722540274013727ull, 2782701737628029236ull}}, {{5260678273377058085ull, 16788886201774930563ull, 1698403175342517159ull, 3478377172035036545ull}}, {{1964161823293934703ull, 16374421733791275300ull, 6734689987605534353ull, 4347971465043795681ull}}, {{10450973176413484997ull, 3316484555978465206ull, 15738396288321928731ull, 2717482165652372300ull}}, {{3840344433662080438ull, 17980663750255245220ull, 1226251286692859297ull, 3396852707065465376ull}}, {{4800430542077600548ull, 8640771632536892813ull, 1532814108366074122ull, 4246065883831831720ull}}, {{5306112098012194295ull, 10012168288762945912ull, 958008817728796326ull, 2653791177394894825ull}}, {{6632640122515242868ull, 3291838324098906582ull, 5809197040588383312ull, 3317238971743618531ull}}, {{17514172189998829393ull, 4114797905123633227ull, 2649810282308091236ull, 4146548714679523164ull}}, {{8640514609535574419ull, 11795120727557046575ull, 10879503463297332830ull, 2591592946674701977ull}}, {{6188957243492080119ull, 5520528872591532411ull, 18211065347549053942ull, 3239491183343377471ull}}, {{3124510535937712245ull, 16124033127594191322ull, 18152145666008929523ull, 4049363979179221839ull}}, {{6564505103388458057ull, 7771677695532675624ull, 18262620068896662808ull, 2530852486987013649ull}}, {{8205631379235572572ull, 9714597119415844530ull, 8993217030838664798ull, 3163565608733767062ull}}, {{1033667187189689907ull, 2919874362415029855ull, 2018149251693555190ull, 3954457010917208828ull}}, {{7563571019634638048ull, 15659979531791557371ull, 10484715319163247801ull, 2471535631823255517ull}}, {{4842777756115909656ull, 5739916359457283002ull, 17717580167381447656ull, 3089419539779069396ull}}, {{15276844231999662877ull, 7174895449321603752ull, 3700231135517257954ull, 3861774424723836746ull}}, {{9548027644999789299ull, 9095995674253390249ull, 6924330478125674125ull, 2413609015452397966ull}}, {{16546720574677124527ull, 15981680611244125715ull, 17878785134511868464ull, 3017011269315497457ull}}, {{16071714699919017755ull, 1530356690345605528ull, 8513423362857671869ull, 3771264086644371822ull}}, {{10044821687449386097ull, 3262315940679697407ull, 709203583358657014ull, 2357040054152732389ull}}, {{7944341090884344717ull, 13301266962704397567ull, 5498190497625709171ull, 2946300067690915486ull}}, {{5318740345178042992ull, 12014897684953109055ull, 16096110158886912272ull, 3682875084613644357ull}}, {{2036739413045165836ull, 15018622106191386319ull, 6285079643326476628ull, 4603593855767055447ull}}, {{8190491160794310504ull, 163266779514840641ull, 10845703804720129749ull, 2877246159854409654ull}}, {{14849799969420276033ull, 4815769492820938705ull, 4333757719045386378ull, 3596557699818012068ull}}, {{4727191906493181330ull, 15243083902880949190ull, 5417197148806732972ull, 4495697124772515085ull}}, {{16789552996840402043ull, 303555402445817435ull, 5691591227217902060ull, 2809810702982821928ull}}, {{16375255227623114650ull, 379444253057271794ull, 7114489034022377575ull, 3512263378728527410ull}}, {{11245696997674117504ull, 14309363371603753455ull, 18116483329382747776ull, 4390329223410659262ull}}, {{13946089651187405296ull, 8943352107252345909ull, 6711116062436829456ull, 2743955764631662039ull}}, {{3597554008702092908ull, 11179190134065432387ull, 3777209059618648916ull, 3429944705789577549ull}}, {{18332000566159779847ull, 13973987667581790483ull, 9333197342950699049ull, 4287430882236971936ull}}, {{9151657344636168453ull, 1816213264597537196ull, 5833248339344186906ull, 2679644301398107460ull}}, {{11439571680795210566ull, 11493638617601697303ull, 7291560424180233632ull, 3349555376747634325ull}}, {{9687778582566625303ull, 14367048272002121629ull, 13726136548652679944ull, 4186944220934542906ull}}, {{8360704623317834767ull, 8979405170001326018ull, 13190521361335312869ull, 2616840138084089316ull}}, {{1227508742292517650ull, 15835942480929045427ull, 16488151701669141086ull, 3271050172605111645ull}}, {{15369443983147810775ull, 10571556064306530975ull, 6775131571804262646ull, 4088812715756389557ull}}, {{16523431517108463590ull, 1995536521764193955ull, 6540300241591358106ull, 2555507947347743473ull}}, {{16042603377958191584ull, 11717792689060018252ull, 12787061320416585536ull, 3194384934184679341ull}}, {{1606510148738187864ull, 14647240861325022816ull, 2148768595238568208ull, 3992981167730849177ull}}, {{1004068842961367415ull, 9154525538328139260ull, 12872195418092574890ull, 2495613229831780735ull}}, {{1255086053701709269ull, 2219784886055398267ull, 11478558254188330709ull, 3119516537289725919ull}}, {{15403915622409300298ull, 7386417125996635737ull, 9736511799308025482ull, 3899395671612157399ull}}, {{2709918236364730830ull, 9228196722175285240ull, 13002848902208597782ull, 2437122294757598374ull}}, {{3387397795455913538ull, 2311873865864330742ull, 7030189090905971420ull, 3046402868446997968ull}}, {{13457619281174667730ull, 2889842332330413427ull, 8787736363632464275ull, 3808003585558747460ull}}, {{6105169041520473379ull, 17947052522202366056ull, 14715707264125065979ull, 2380002240974217162ull}}, {{7631461301900591724ull, 17822129634325569666ull, 9171262043301556666ull, 2975002801217771453ull}}, {{315954590520963847ull, 13054290006052186275ull, 16075763572554333737ull, 3718753501522214316ull}}, {{16338372683571460069ull, 1241402226141534565ull, 823980195991682778ull, 2324220938451383948ull}}, {{6587907799182161374ull, 10775124819531694015ull, 1029975244989603472ull, 2905276173064229935ull}}, {{3623198730550313813ull, 13468906024414617519ull, 15122527111519168052ull, 3631595216330287418ull}}, {{18364056468470055978ull, 16836132530518271898ull, 9679786852544184257ull, 4539494020412859273ull}}, {{16089221311221172890ull, 3605053803932838080ull, 17579081828908584921ull, 2837183762758037045ull}}, {{1664782565316914497ull, 9118003273343435505ull, 8138794230853567439ull, 3546479703447546307ull}}, {{6692664225073531025ull, 6785818073251906477ull, 5561806770139571395ull, 4433099629309432884ull}}, {{6488758149884650843ull, 1935293286568747596ull, 12699501268192007930ull, 2770687268318395552ull}}, {{8110947687355813553ull, 11642488645065710303ull, 15874376585240009912ull, 3463359085397994440ull}}, {{5526998590767379037ull, 14553110806332137879ull, 1396226657840460774ull, 4329198856747493051ull}}, {{10371903146870693755ull, 4484008235530198270ull, 17013542725646145648ull, 2705749285467183156ull}}, {{3741506896733591385ull, 5605010294412747838ull, 2820184333348130444ull, 3382186606833978946ull}}, {{13900255657771765039ull, 7006262868015934797ull, 12748602453539938863ull, 4227733258542473682ull}}, {{10993502795321047102ull, 11296443320151041104ull, 12579562551889849693ull, 2642333286589046051ull}}, {{13741878494151308877ull, 285496094906637668ull, 11112767171434924213ull, 3302916608236307564ull}}, {{17177348117689136096ull, 4968556137060684989ull, 13890958964293655266ull, 4128645760295384455ull}}, {{13041685582769404012ull, 7717033604090316022ull, 15599378380324616397ull, 2580403600184615284ull}}, {{7078734941606979207ull, 14257978023540282932ull, 1052478901696218880ull, 3225504500230769106ull}}, {{8848418677008724009ull, 17822472529425353665ull, 10538970663975049408ull, 4031880625288461382ull}}, {{17059476719198922266ull, 11139045330890846040ull, 1975170646557017976ull, 2519925390805288364ull}}, {{2877601825289101216ull, 13923806663613557551ull, 2468963308196272470ull, 3149906738506610455ull}}, {{17432060336893540232ull, 8181386292662171130ull, 16921262190527504300ull, 3937383423133263068ull}}, {{15506723728985850549ull, 14336738469768632764ull, 1352416832224914379ull, 2460864639458289418ull}}, {{936660587522761570ull, 13309237068783403052ull, 10913893077135918782ull, 3076080799322861772ull}}, {{1170825734403451963ull, 7413174299124478007ull, 13642366346419898478ull, 3845100999153577215ull}}, {{7649295111643239333ull, 21547918525410850ull, 15444007994153518405ull, 2403188124470985759ull}}, {{338246852699273358ull, 4638620916584151467ull, 14693323974264510102ull, 3003985155588732199ull}}, {{14257866621156255409ull, 15021648182584965141ull, 13754968949403249723ull, 3754981444485915249ull}}, {{11217009647436353583ull, 7082687104901909261ull, 1679326565735949221ull, 2346863402803697031ull}}, {{186204004013278267ull, 13465044899554774481ull, 15934216262452100238ull, 2933579253504621288ull}}, {{4844441023443985737ull, 7607934087588692293ull, 1471026254355573682ull, 3666974066880776611ull}}, {{10667237297732370076ull, 286545572631089558ull, 15673840873226630815ull, 4583717583600970763ull}}, {{2055337292655343393ull, 7096620010535512830ull, 7490307536552950307ull, 2864823489750606727ull}}, {{11792543652673955050ull, 4259088994742003133ull, 4751198402263799980ull, 3581029362188258409ull}}, {{905621510560280100ull, 5323861243427503917ull, 10550684021257137879ull, 4476286702735323011ull}}, {{2871856453313869015ull, 10244942304783271804ull, 4288334504072017222ull, 2797679189209576882ull}}, {{3589820566642336268ull, 3582805844124313947ull, 14583790166944797336ull, 3497098986511971102ull}}, {{18322333763585084047ull, 4478507305155392433ull, 9006365671826220862ull, 4371373733139963878ull}}, {{4533929574599595674ull, 16634125121004283983ull, 1017292526464000134ull, 2732108583212477424ull}}, {{1055725949822106688ull, 11569284364400579171ull, 1271615658080000168ull, 3415135729015596780ull}}, {{15154715492559797072ull, 14461605455500723963ull, 1589519572600000210ull, 4268919661269495975ull}}, {{7165854173636179218ull, 13650189428115340381ull, 7910978760516081987ull, 2668074788293434984ull}}, {{13569003735472611926ull, 12451050766716787572ull, 9888723450645102484ull, 3335093485366793730ull}}, {{16961254669340764908ull, 15563813458395984465ull, 3137532276451602297ull, 4168866856708492163ull}}, {{3683255140696896212ull, 2809854383856408435ull, 18101858737278109100ull, 2605541785442807601ull}}, {{18439126981153283976ull, 3512317979820510543ull, 8792265366315472663ull, 3256927231803509502ull}}, {{18437222708014217066ull, 18225455530057801891ull, 1766959671039565020ull, 4071159039754386878ull}}, {{9217421183295191715ull, 2167537669431350374ull, 14939407849681891850ull, 2544474399846491798ull}}, {{2298404442264213835ull, 11932794123643963776ull, 9450887775247589004ull, 3180592999808114748ull}}, {{2873005552830267294ull, 14915992654554954720ull, 11813609719059486255ull, 3975741249760143435ull}}, {{1795628470518917059ull, 16240024436737928556ull, 5077663065198484957ull, 2484838281100089647ull}}, {{2244535588148646323ull, 6464972490640246983ull, 1735392813070718293ull, 3106047851375112059ull}}, {{16640727540467971616ull, 12692901631727696632ull, 16004299071620561578ull, 3882559814218890073ull}}, {{10400454712792482260ull, 12544749538257198299ull, 3085157892121769130ull, 2426599883886806296ull}}, {{8388882372563214921ull, 6457564885966722066ull, 3856447365152211413ull, 3033249854858507870ull}}, {{1262730928849242843ull, 12683642125885790487ull, 14043931243295040074ull, 3791562318573134837ull}}, {{7706735858171858633ull, 12538962347106006958ull, 11083300036273093998ull, 2369726449108209273ull}}, {{410047785860047484ull, 6450330897027732890ull, 19066990059203786ull, 2962158061385261592ull}}, {{9735931769179835162ull, 17286285658139441920ull, 23833737574004732ull, 3702697576731576990ull}}, {{6084957355737396977ull, 1580556499482375392ull, 13849954141265916670ull, 2314185985457235618ull}}, {{7606196694671746221ull, 11199067661207745048ull, 8089070639727620029ull, 2892732481821544523ull}}, {{9507745868339682776ull, 163776521227517598ull, 5499652281232137133ull, 3615915602276930654ull}}, {{2661310298569827661ull, 4816406669961784902ull, 16097937388394947224ull, 4519894502846163317ull}}, {{15498376991888306001ull, 3010254168726115563ull, 12367053876960535967ull, 2824934064278852073ull}}, {{14761285221432994597ull, 17597875766189808166ull, 1623759290918506246ull, 3531167580348565092ull}}, {{9228234489936467438ull, 12773972670882484400ull, 2029699113648132808ull, 4413959475435706365ull}}, {{5767646556210292149ull, 7983732919301552750ull, 3574404955243776957ull, 2758724672147316478ull}}, {{16432930232117640994ull, 14591352167554328841ull, 13691378230909497004ull, 3448405840184145597ull}}, {{6706104734864887530ull, 18239190209442911052ull, 3279164733354707543ull, 4310507300230181997ull}}, {{13414687496145330515ull, 18317022908542901263ull, 4355320967560386166ull, 2694067062643863748ull}}, {{12156673351754275239ull, 13672906598823850771ull, 5444151209450482708ull, 3367583828304829685ull}}, {{10584155671265456145ull, 17091133248529813464ull, 11416875030240491289ull, 4209479785381037106ull}}, {{6615097294540910091ull, 3764429252690051559ull, 11747232912327694960ull, 2630924865863148191ull}}, {{3657185599748749709ull, 4705536565862564449ull, 10072355121982230796ull, 3288656082328935239ull}}, {{9183168018113325040ull, 5881920707328205561ull, 7978757884050400591ull, 4110820102911169049ull}}, {{17268695057389297910ull, 10593729469721210331ull, 16515938723599970129ull, 2569262564319480655ull}}, {{16974182803309234484ull, 17853847855578900818ull, 16033237386072574757ull, 3211578205399350819ull}}, {{11994356467281767297ull, 8482251764191462311ull, 15429860714163330543ull, 4014472756749188524ull}}, {{14414001819692186417ull, 12218936380260745800ull, 420290909497305781ull, 2509045472968242828ull}}, {{18017502274615233021ull, 1438612420043768538ull, 525363636871632227ull, 3136306841210303535ull}}, {{13298505806414265468ull, 15633323580336874385ull, 14491762601371703995ull, 3920383551512879418ull}}, {{1394037101367834061ull, 7464984228496852539ull, 13669037644284702901ull, 2450239719695549636ull}}, {{15577604431991956289ull, 13942916304048453577ull, 17086297055355878626ull, 3062799649619437045ull}}, {{5636947484707781649ull, 8205273343205791164ull, 7522813263912684571ull, 3828499562024296307ull}}, {{12746464214797139339ull, 2822452830289925525ull, 2395915280731733905ull, 2392812226265185192ull}}, {{2098022213214260461ull, 8139752056289794811ull, 2994894100914667381ull, 2991015282831481490ull}}, {{16457585821799989288ull, 14786376088789631417ull, 12966989662998110034ull, 3738769103539351862ull}}, {{3368462110983911449ull, 13853171073920907540ull, 3492682520946430867ull, 2336730689712094914ull}}, {{4210577638729889312ull, 12704777823973746521ull, 13589225188037814392ull, 2920913362140118642ull}}, {{9874908066839749543ull, 15880972279967183151ull, 7763159448192492182ull, 3651141702675148303ull}}, {{7731949065122299025ull, 10627843313104203131ull, 5092263291813227324ull, 4563927128343935379ull}}, {{2526625156487742939ull, 15865774107544902765ull, 876821548169573125ull, 2852454455214959612ull}}, {{7769967464037066578ull, 5997159579148964744ull, 1096026935211966407ull, 3565568069018699515ull}}, {{9712459330046333222ull, 2884763455508818026ull, 15205091724297121721ull, 4456960086273374393ull}}, {{10681973099706346168ull, 13332192205761481026ull, 2585653300044619219ull, 2785600053920858996ull}}, {{4129094337778156902ull, 12053554238774463379ull, 3232066625055774024ull, 3482000067401073745ull}}, {{549681903795308223ull, 15066942798468079224ull, 8651769299747105434ull, 4352500084251342181ull}}, {{343551189872067640ull, 14028525267469937419ull, 7713198821555634848ull, 2720312552657088863ull}}, {{14264497042622248261ull, 17535656584337421773ull, 5029812508517155656ull, 3400390690821361079ull}}, {{3995563247995646614ull, 3472826656712225601ull, 1675579617219056667ull, 4250488363526701349ull}}, {{14026442076065748894ull, 18311417724940998664ull, 3353080269975604368ull, 2656555227204188343ull}}, {{17533052595082186118ull, 4442528082466696714ull, 18026408392751669173ull, 3320694034005235428ull}}, {{12692943706997956839ull, 10164846121510758797ull, 4086266417230034850ull, 4150867542506544286ull}}, {{10238932826087416977ull, 10964714844371612152ull, 16388974566050935493ull, 2594292214066590178ull}}, {{12798666032609271221ull, 18317579573891903094ull, 11262846170708893558ull, 3242865267583237723ull}}, {{6774960503906813218ull, 13673602430510103060ull, 9466871694958729044ull, 4053581584479047154ull}}, {{13457722351796534069ull, 17769373555923590220ull, 10528480827776593556ull, 2533488490299404471ull}}, {{16822152939745667586ull, 3764972871194936159ull, 8548915016293354042ull, 3166860612874255589ull}}, {{16416005156254696579ull, 13929588125848446007ull, 15297829788794080456ull, 3958575766092819486ull}}, {{17177532250300267218ull, 8705992578655278754ull, 4949457599568912381ull, 2474109853808012179ull}}, {{12248543276020558214ull, 15494176741746486347ull, 1575135981033752572ull, 3092637317260015224ull}}, {{10698993076598309864ull, 920976853473556318ull, 1968919976292190716ull, 3865796646575019030ull}}, {{2075184654446555761ull, 9798982570275748507ull, 15065633040464782909ull, 2416122904109386893ull}}, {{16429038873340358413ull, 16860414231272073537ull, 4996983245298814924ull, 3020153630136733617ull}}, {{6701240536393284304ull, 2628773715380540306ull, 10857915075050906560ull, 3775192037670917021ull}}, {{8799961353673190594ull, 1642983572112837691ull, 9092039931120510552ull, 2359495023544323138ull}}, {{6388265673664100339ull, 2053729465141047114ull, 2141677877045862382ull, 2949368779430403923ull}}, {{17208704128934901231ull, 11790533868281084700ull, 16512155401589491689ull, 3686710974288004903ull}}, {{3064136087459074923ull, 903109280069192164ull, 16028508233559476708ull, 4608388717860006129ull}}, {{11138457091516697635ull, 9787815336898020910ull, 3100288618333591086ull, 2880242948662503831ull}}, {{4699699327541096236ull, 3011397134267750330ull, 17710418828199152570ull, 3600303685828129788ull}}, {{15097996196281146103ull, 12987618454689463720ull, 3691279461539389096ull, 4500379607285162236ull}}, {{9436247622675716314ull, 8117261534180914825ull, 11530421700316893993ull, 2812737254553226397ull}}, {{16406995546772033297ull, 14758262936153531435ull, 577969070113953779ull, 3515921568191532997ull}}, {{15897058415037653717ull, 13836142651764526390ull, 5334147356069830128ull, 4394901960239416246ull}}, {{5323975490971145669ull, 8647589157352828994ull, 17168900152825807542ull, 2746813725149635153ull}}, {{15878341400568707894ull, 1586114409836260434ull, 7626067135750095716ull, 3433517156437043942ull}}, {{10624554713856109060ull, 1982643012295325543ull, 309211882832843837ull, 4291896445546304928ull}}, {{13557875723801150019ull, 3544994891898272416ull, 193257426770527398ull, 2682435278466440580ull}}, {{16947344654751437523ull, 13654615651727616328ull, 241571783463159247ull, 3353044098083050725ull}}, {{2737436744729745288ull, 12456583546232132507ull, 4913650747756336963ull, 4191305122603813406ull}}, {{17851799029951948469ull, 5479521707181388864ull, 16906089772629874314ull, 2619565701627383378ull}}, {{3868004713730383970ull, 16072774170831511889ull, 11909240178932567084ull, 3274457127034229223ull}}, {{9446691910590367867ull, 1644223639829838245ull, 10274864205238320952ull, 4093071408792786529ull}}, {{8210025453332673869ull, 1027639774893648903ull, 17951005174342420355ull, 2558169630495491580ull}}, {{5650845798238454432ull, 15119607773899224841ull, 3992012394218473827ull, 3197712038119364476ull}}, {{11675243266225455944ull, 14287823698946643147ull, 4990015492773092284ull, 3997140047649205595ull}}, {{4991184032177216013ull, 18153261848696427775ull, 812916673769488725ull, 2498212529780753497ull}}, {{1627294021794132112ull, 8856519255588371007ull, 5627831860639248811ull, 3122765662225941871ull}}, {{15869175582524828852ull, 6458963051058075854ull, 2423103807371673110ull, 3903457077782427339ull}}, {{5306548720650630129ull, 17871909962193461121ull, 17655340944103153357ull, 2439660673614017086ull}}, {{11244871919240675565ull, 8504829397459662689ull, 12845804143274165889ull, 3049575842017521358ull}}, {{221031843768680744ull, 15242722765251966266ull, 6833883142237931553ull, 3811969802521901698ull}}, {{4749830920782813369ull, 2609172700641397060ull, 8882862982326095125ull, 2382481126576188561ull}}, {{5937288650978516711ull, 7873151894229134229ull, 15715264746335006810ull, 2978101408220235701ull}}, {{12033296832150533793ull, 618067830931641978ull, 5809022877636594801ull, 3722626760275294627ull}}, {{12132496538521471525ull, 11915507440400745996ull, 1324796289309177798ull, 2326641725172059142ull}}, {{15165620673151839406ull, 5671012263646156687ull, 10879367398491248056ull, 2908302156465073927ull}}, {{14345339823012411353ull, 7088765329557695859ull, 8987523229686672166ull, 3635377695581342409ull}}, {{13319988760338126287ull, 18084328698801895632ull, 15846090055535728111ull, 4544222119476678011ull}}, {{8324992975211328930ull, 18220234464392266626ull, 7597963275496136117ull, 2840138824672923757ull}}, {{1182869182159385354ull, 8940235025208169571ull, 14109140112797558051ull, 3550173530841154696ull}}, {{15313644532981395405ull, 6563607763082824059ull, 17636425140996947564ull, 4437716913551443370ull}}, {{7265184823899678176ull, 13325626888781540845ull, 15634451731550480131ull, 2773573070969652106ull}}, {{13693167048301985624ull, 12045347592549538152ull, 10319692627583324356ull, 3466966338712065133ull}}, {{17116458810377482030ull, 15056684490686922690ull, 17511301802906543349ull, 4333707923390081416ull}}, {{15309472774913314173ull, 11716270815893020633ull, 10944563626816589593ull, 2708567452118800885ull}}, {{5301782913359479004ull, 810280464584112080ull, 18292390551948124896ull, 3385709315148501106ull}}, {{6627228641699348755ull, 1012850580730140100ull, 13642116153080380312ull, 4232136643935626383ull}}, {{13365389937916868780ull, 633031612956337562ull, 15443851623316319551ull, 2645085402459766489ull}}, {{7483365385541310167ull, 14626347571477585665ull, 5469756473863235726ull, 3306356753074708112ull}}, {{13965892750354025612ull, 9059562427492206273ull, 6837195592329044658ull, 4132945941343385140ull}}, {{1811153941330184152ull, 10273912535610016825ull, 13496619282060428719ull, 2583091213339615712ull}}, {{6875628445090118094ull, 8230704651085133127ull, 16870774102575535899ull, 3228864016674519640ull}}, {{3982849537935259713ull, 5676694795429028505ull, 2641723554509868258ull, 4036080020843149551ull}}, {{14018496007278007081ull, 8159620265570530719ull, 8568606249209749517ull, 2522550013026968469ull}}, {{12911433990670120947ull, 14811211350390551303ull, 15322443829939574800ull, 3153187516283710586ull}}, {{11527606469910263279ull, 67270114278637513ull, 9929682750569692693ull, 3941484395354638233ull}}, {{287225016052832694ull, 2347886830637842398ull, 17735266765174527693ull, 2463427747096648895ull}}, {{9582403306920816675ull, 7546544556724690901ull, 17557397438040771712ull, 3079284683870811119ull}}, {{16589690152078408748ull, 9433180695905863626ull, 17335060779123576736ull, 3849105854838513899ull}}, {{14980242363476393372ull, 5895737934941164766ull, 8528569977738541508ull, 2405691159274071187ull}}, {{9501930917490715906ull, 7369672418676455958ull, 6049026453745788981ull, 3007113949092588984ull}}, {{2654041610008619075ull, 13823776541772957852ull, 7561283067182236226ull, 3758892436365736230ull}}, {{10882148043110162730ull, 13251546357035486561ull, 114115898561509737ull, 2349307772728585144ull}}, {{18214371072315091316ull, 2729374891012194489ull, 142644873201887172ull, 2936634715910731430ull}}, {{8932905785111700433ull, 3411718613765243112ull, 9401678128357134773ull, 3670793394888414287ull}}, {{11166132231389625542ull, 8876334285633941794ull, 7140411642019030562ull, 4588491743610517859ull}}, {{11590518663045903868ull, 10159394946948601525ull, 2156914267048200149ull, 2867807339756573662ull}}, {{653090273525216122ull, 17310929702113139811ull, 11919514870665025994ull, 3584759174695717077ull}}, {{14651420897188683865ull, 12415290090786648955ull, 1064335533049118781ull, 4480948968369646347ull}}, {{6851295051529233464ull, 10065399315955349549ull, 16806110772651556902ull, 2800593105231028966ull}}, {{13175804832838929734ull, 3358377108089411128ull, 11784266428959670320ull, 3500741381538786208ull}}, {{16469756041048662167ull, 4197971385111763910ull, 14730333036199587900ull, 4375926726923482760ull}}, {{5681911507228025950ull, 11847104152549628252ull, 9206458147624742437ull, 2734954204327176725ull}}, {{7102389384035032438ull, 973822135404871603ull, 16119758702958315951ull, 3418692755408970906ull}}, {{4266300711616402643ull, 15052335724538253216ull, 10926326341843119130ull, 4273365944261213633ull}}, {{2666437944760251652ull, 14019395846263796164ull, 18358169009720419216ull, 2670853715163258520ull}}, {{3333047430950314565ull, 17524244807829745205ull, 4500967188440972404ull, 3338567143954073151ull}}, {{8777995307115281110ull, 3458561936077629890ull, 1014522967123827602ull, 4173208929942591439ull}}, {{10097933085374438598ull, 6773287228475906585ull, 7551605882093474107ull, 2608255581214119649ull}}, {{17234102375145436152ull, 3854923017167495327ull, 14051193371044230538ull, 3260319476517649561ull}}, {{16930941950504407285ull, 14042025808314144967ull, 3728933658523124460ull, 4075399345647061952ull}}, {{17499367746706336410ull, 17999638167051116412ull, 2330583536576952787ull, 2547124591029413720ull}}, {{3427465609673368896ull, 17887861690386507612ull, 2913229420721190984ull, 3183905738786767150ull}}, {{4284332012091711120ull, 3913083039273582899ull, 12864908812756264539ull, 3979882173483458937ull}}, {{371864498343625498ull, 139833890332295360ull, 1123038980331583481ull, 2487426358427161836ull}}, {{464830622929531872ull, 4786478381342757104ull, 1403798725414479351ull, 3109282948033952295ull}}, {{581038278661914840ull, 1371411958251058476ull, 15589806462050262901ull, 3886603685042440368ull}}, {{9586520961018472583ull, 3162975483120605499ull, 9743629038781414313ull, 2429127303151525230ull}}, {{7371465182845702825ull, 8565405372328144778ull, 2956164261621992083ull, 3036409128939406538ull}}, {{18437703515411904339ull, 6095070696982793068ull, 12918577363882265912ull, 3795511411174258172ull}}, {{2300192660277664404ull, 3809419185614245668ull, 17297482889281192003ull, 2372194631983911357ull}}, {{2875240825347080505ull, 150087963590419181ull, 7786795556319326292ull, 2965243289979889197ull}}, {{8205737050111238535ull, 187609954488023976ull, 14345180463826545769ull, 3706554112474861496ull}}, {{5128585656319524085ull, 11646471267623484745ull, 8965737789891591105ull, 2316596320296788435ull}}, {{11022418088826793010ull, 723031029247192219ull, 6595486218937100978ull, 2895745400370985544ull}}, {{9166336592606103358ull, 10127160823413766082ull, 8244357773671376222ull, 3619681750463731930ull}}, {{2234548703902853390ull, 3435578992412431795ull, 1082075180234444470ull, 4524602188079664913ull}}, {{17537494004435141033ull, 15982294925539933583ull, 12205512033714997553ull, 2827876367549790570ull}}, {{17310181487116538387ull, 6142810601642753267ull, 6033518005288971134ull, 3534845459437238213ull}}, {{17026040840468285079ull, 16901885288908217392ull, 12153583525038601821ull, 4418556824296547766ull}}, {{10641275525292678175ull, 12869521314781329822ull, 2984303684721738234ull, 2761598015185342354ull}}, {{4078222369761071910ull, 6863529606621886470ull, 12953751642756948601ull, 3451997518981677942ull}}, {{14321149999056115696ull, 13191098026704745991ull, 6968817516591409943ull, 4314996898727097428ull}}, {{15868247777051154166ull, 15161965294331548100ull, 13578882984724407022ull, 2696873061704435892ull}}, {{1388565647604391091ull, 9729084581059659318ull, 16973603730905508778ull, 3371091327130544865ull}}, {{10959079096360264672ull, 2937983689469798339ull, 7381946608349722261ull, 4213864158913181082ull}}, {{4543581426011471468ull, 4142082815132317914ull, 9225402648645964317ull, 2633665099320738176ull}}, {{14902848819369115143ull, 9789289537342785296ull, 11531753310807455396ull, 3292081374150922720ull}}, {{181816950501842313ull, 12236611921678481621ull, 14414691638509319245ull, 4115101717688653400ull}}, {{2419478603277345398ull, 9953725460262744965ull, 9009182274068324528ull, 2571938573555408375ull}}, {{7636034272524069651ull, 12442156825328431206ull, 6649791824158017756ull, 3214923216944260469ull}}, {{321670803800311256ull, 15552696031660539008ull, 12923925798624910099ull, 4018654021180325586ull}}, {{201044252375194535ull, 7414592010574142928ull, 12689139642567956716ull, 2511658763237703491ull}}, {{251305315468993169ull, 9268240013217678660ull, 11249738534782557991ull, 3139573454047129364ull}}, {{314131644336241461ull, 6973613998094710421ull, 14062173168478197489ull, 3924466817558911705ull}}, {{2502175286923844865ull, 15887723794877663773ull, 1871329202657791574ull, 2452791760974319816ull}}, {{7739405127082193985ull, 10636282706742303908ull, 2339161503322239468ull, 3065989701217899770ull}}, {{9674256408852742481ull, 13295353383427879885ull, 12147323916007575143ull, 3832487126522374712ull}}, {{8352253264746658003ull, 15227124892283506784ull, 7592077447504734464ull, 2395304454076484195ull}}, {{10440316580933322504ull, 587162041644831864ull, 4878410790953530177ull, 2994130567595605244ull}}, {{13050395726166653129ull, 5345638570483427734ull, 6098013488691912721ull, 3742663209494506555ull}}, {{3544811310426770302ull, 14870239152620612094ull, 1505415421218751498ull, 2339164505934066597ull}}, {{13654386174888238686ull, 9364426903920989309ull, 6493455294950827277ull, 2923955632417583246ull}}, {{3232924663328134645ull, 16317219648328624541ull, 17340191155543309904ull, 3654944540521979057ull}}, {{8652841847587556210ull, 1949780486701229060ull, 7840180889146973669ull, 4568680675652473822ull}}, {{14631398191596998439ull, 3524455813401962114ull, 288427037289470639ull, 2855425422282796139ull}}, {{9065875702641472241ull, 18240627822034616355ull, 14195591851894002010ull, 3569281777853495173ull}}, {{6720658609874452397ull, 13577412740688494636ull, 3909431759585338801ull, 4461602222316868967ull}}, {{13423783668026308556ull, 1568353935289227291ull, 9360923877381918607ull, 2788501388948043104ull}}, {{12168043566605497791ull, 15795500474393697826ull, 11701154846727398258ull, 3485626736185053880ull}}, {{5986682421402096431ull, 10521003556137346475ull, 14626443558409247823ull, 4357033420231317350ull}}, {{1435833504162616318ull, 13493156250226923403ull, 4529841205578391985ull, 2723145887644573344ull}}, {{15629849935485434109ull, 3031387257501490541ull, 5662301506972989982ull, 3403932359555716680ull}}, {{5702254364074628924ull, 13012606108731638985ull, 7077876883716237477ull, 4254915449444645850ull}}, {{15093124023615112838ull, 10438721827170968317ull, 9035359070750036327ull, 2659322155902903656ull}}, {{5031346974236727335ull, 8436716265536322493ull, 11294198838437545409ull, 3324152694878629570ull}}, {{10900869736223297073ull, 15157581350347791020ull, 4894376511192155953ull, 4155190868598286963ull}}, {{16036415621994336479ull, 2555959316326287531ull, 753142310281403519ull, 2596994292873929352ull}}, {{15433833509065532694ull, 17030007200690023126ull, 941427887851754398ull, 3246242866092411690ull}}, {{10068919849477140060ull, 12064136964007753100ull, 10400156896669468806ull, 4057803582615514612ull}}, {{15516446942777988345ull, 2928399584077457783ull, 15723470097273193812ull, 2536127239134696632ull}}, {{14783872660045097528ull, 3660499480096822229ull, 1207593547881940649ull, 3170159048918370791ull}}, {{4644782769774208197ull, 9187310368548415691ull, 15344549990134589523ull, 3962698811147963488ull}}, {{597146221895186172ull, 3436225971129065855ull, 9590343743834118452ull, 2476686756967477180ull}}, {{14581490832651146426ull, 4295282463911332318ull, 11987929679792648065ull, 3095858446209346475ull}}, {{9003491503959157225ull, 9980789098316553302ull, 10373226081313422177ull, 3869823057761683094ull}}, {{1015496171547085362ull, 17767208232516315574ull, 1871580282393500956ull, 2418639411101051934ull}}, {{10492742251288632510ull, 3762266216935842851ull, 11562847389846652004ull, 3023299263876314917ull}}, {{8504241795683402733ull, 4702832771169803564ull, 618501182026151293ull, 3779124079845393647ull}}, {{14538523159156902517ull, 5245113491194821179ull, 7304092266407426414ull, 2361952549903371029ull}}, {{13561467930518740242ull, 15779763900848302282ull, 13741801351436670921ull, 2952440687379213786ull}}, {{7728462876293649494ull, 5889646820778214141ull, 7953879652441062844ull, 3690550859224017233ull}}, {{7136132306897224886ull, 12904401299841159646ull, 16500389828844134037ull, 2306594287015010770ull}}, {{18143537420476306915ull, 2295443569519285845ull, 11402115249200391739ull, 2883242858768763463ull}}, {{8844363720313219932ull, 16704362517181271019ull, 9640958043073101769ull, 3604053573460954329ull}}, {{6443768631964137011ull, 7045395091194425062ull, 16662883572268765116ull, 4505066966826192911ull}}, {{17862413450259749344ull, 13626743968851291471ull, 17331831260309060053ull, 2815666854266370569ull}}, {{17716330794397298776ull, 3198371905781950627ull, 7829731020104161355ull, 3519583567832963212ull}}, {{17533727474569235565ull, 17833022937509601996ull, 9787163775130201693ull, 4399479459791204015ull}}, {{1735207634750996421ull, 13451482345157195200ull, 13034506387097457914ull, 2749674662369502509ull}}, {{2169009543438745526ull, 7590980894591718192ull, 2458074928589658681ull, 3437093327961878137ull}}, {{2711261929298431907ull, 14100412136667035644ull, 7684279679164461255ull, 4296366659952347671ull}}, {{10917910742666295750ull, 15730286613057979133ull, 11720203827118870140ull, 2685229162470217294ull}}, {{18259074446760257591ull, 1216114192612922300ull, 5426882747043811868ull, 3356536453087771618ull}}, {{4377098984740770373ull, 1520142740766152876ull, 16006975470659540643ull, 4195670566359714522ull}}, {{11959058902317757291ull, 17090990277474703211ull, 14616045687589600805ull, 2622294103974821576ull}}, {{10337137609469808710ull, 7528679791561215302ull, 18270057109487001007ull, 3277867629968526970ull}}, {{3698049974982485079ull, 4799163721024131224ull, 13614199350003975451ull, 4097334537460658713ull}}, {{2311281234364053175ull, 693634316426388063ull, 1591345566111402801ull, 2560834085912911696ull}}, {{16724159598237230180ull, 5478728913960372982ull, 1989181957639253501ull, 3201042607391139620ull}}, {{11681827460941761917ull, 11460097160877854132ull, 2486477447049066876ull, 4001303259238924525ull}}, {{16524514199943377007ull, 16385932762403434640ull, 3859891413619360749ull, 2500814537024327828ull}}, {{2208898676219669642ull, 6647357897722129589ull, 4824864267024200937ull, 3126018171280409785ull}}, {{7372809363701974956ull, 12920883390580049890ull, 10642766352207639075ull, 3907522714100512231ull}}, {{9219691870741122252ull, 5769709109898837229ull, 13569257997770856278ull, 2442201696312820144ull}}, {{16136300856853790719ull, 16435508424228322344ull, 16961572497213570347ull, 3052752120391025180ull}}, {{1723631997357686782ull, 15932699511858015027ull, 2755221547807411318ull, 3815940150488781476ull}}, {{17218171062844411903ull, 5346251176483871487ull, 10945385504234407882ull, 2384962594055488422ull}}, {{16911027810128126975ull, 15906186007459615167ull, 4458359843438234044ull, 2981203242569360528ull}}, {{16527098744232770815ull, 1435988435614967343ull, 5572949804297792556ull, 3726504053211700660ull}}, {{17246965742786563615ull, 10120864809114130397ull, 12706465664540896155ull, 2329065033257312912ull}}, {{7723649123201040807ull, 8039394992965275093ull, 15883082080676120194ull, 2911331291571641140ull}}, {{14266247422428688913ull, 825871704351818058ull, 1407108527135598627ull, 3639164114464551426ull}}, {{8609437241181085333ull, 14867397685721936285ull, 10982257695774274091ull, 4548955143080689282ull}}, {{7686741284951872285ull, 6986280544362516226ull, 11475597078286309211ull, 2843096964425430801ull}}, {{385054569335064548ull, 4121164662025757379ull, 509438292575722802ull, 3553871205531788502ull}}, {{14316376266950994397ull, 14374827864386972531ull, 9860169902574429310ull, 4442339006914735627ull}}, {{6641892157630677546ull, 4372581396814469928ull, 3856763179895324367ull, 2776461879321709767ull}}, {{8302365197038346933ull, 854040727590699506ull, 209267956441767555ull, 3470577349152137209ull}}, {{1154584459443157858ull, 14902608964770538095ull, 4873270963979597347ull, 4338221686440171511ull}}, {{7639144314793055517ull, 7008287593767892357ull, 9963323380128330198ull, 2711388554025107194ull}}, {{14160616411918707301ull, 17983731529064641254ull, 3230782188305636939ull, 3389235692531383993ull}}, {{8477398478043608318ull, 17867978392903413664ull, 8650163753809434078ull, 4236544615664229991ull}}, {{5298374048777255199ull, 6555800477137245636ull, 12323881373771978155ull, 2647840384790143744ull}}, {{6622967560971568998ull, 3583064577994169141ull, 15404851717214972694ull, 3309800480987679680ull}}, {{12890395469641849152ull, 13702202759347487234ull, 809320572809164251ull, 4137250601234599601ull}}, {{12668183186953543624ull, 6258033715378485569ull, 12035040404074197417ull, 2585781625771624750ull}}, {{2000170928409765818ull, 12434228162650494866ull, 5820428468237970963ull, 3232227032214530938ull}}, {{11723585697366983080ull, 10931099184885730678ull, 16498907622152239512ull, 4040283790268163672ull}}, {{2715555042426976521ull, 6831936990553581674ull, 10311817263845149695ull, 2525177368917602295ull}}, {{12617815839888496460ull, 3928235219764589188ull, 8278085561379049215ull, 3156471711147002869ull}}, {{15772269799860620574ull, 298608006278348581ull, 14959292970151199423ull, 3945589638933753586ull}}, {{12163511634126581811ull, 7104159031565049719ull, 13961244124771887543ull, 2465993524333595991ull}}, {{10592703524230839360ull, 4268512771028924245ull, 12839869137537471525ull, 3082491905416994989ull}}, {{17852565423715937104ull, 9947326982213543210ull, 2214778366639675694ull, 3853114881771243737ull}}, {{15769539408249848594ull, 1605393345456076602ull, 12913451525218267069ull, 2408196801107027335ull}}, {{10488552223457534934ull, 6618427700247483657ull, 11530128388095445932ull, 3010246001383784169ull}}, {{17722376297749306572ull, 8273034625309354571ull, 577602429837143703ull, 3762807501729730212ull}}, {{8770642176879622656ull, 12088175668459428463ull, 9584373555502990622ull, 2351754688581081382ull}}, {{6351616702672140415ull, 5886847548719509771ull, 2757094907523962470ull, 2939693360726351728ull}}, {{3327834859912787615ull, 16581931472754163022ull, 3446368634404953087ull, 3674616700907939660ull}}, {{13383165611745760327ull, 16115728322515315873ull, 4307960793006191359ull, 4593270876134924575ull}}, {{1446949479700018348ull, 16989859229213154277ull, 9610004523269951455ull, 2870794297584327859ull}}, {{6420372868052410839ull, 16625638018089054942ull, 7400819635660051415ull, 3588492871980409824ull}}, {{17248838121920289357ull, 16170361504183930773ull, 9251024544575064269ull, 4485616089975512280ull}}, {{13086366835413874800ull, 12412318949328650685ull, 5781890340359415168ull, 2803510056234695175ull}}, {{2522900488985179788ull, 15515398686660813357ull, 2615676907021881056ull, 3504387570293368969ull}}, {{7765311629658862639ull, 947504284616465080ull, 7881282152204739225ull, 4380484462866711211ull}}, {{4853319768536789150ull, 12121405223953760435ull, 2619958335914268063ull, 2737802789291694507ull}}, {{1454963692243598533ull, 10540070511514812640ull, 17110005975174998791ull, 3422253486614618133ull}}, {{1818704615304498166ull, 8563402120966127896ull, 7552449413686584777ull, 4277816858268272667ull}}, {{1136690384565311354ull, 16881341371672299695ull, 2414437874340421533ull, 2673635536417670417ull}}, {{15255921035988802904ull, 7266618659308210906ull, 7629733361352914821ull, 3342044420522088021ull}}, {{9846529258131227822ull, 13694959342562651537ull, 14148852720118531430ull, 4177555525652610026ull}}, {{17683295832400487149ull, 3947663570674269306ull, 13454718968501470048ull, 2610972203532881266ull}}, {{12880747753645833128ull, 4934579463342836633ull, 7595026673772061752ull, 3263715254416101583ull}}, {{2265876636775127698ull, 6168224329178545792ull, 4882097323787689286ull, 4079644068020126979ull}}, {{1416172897984454812ull, 17690198261018754832ull, 745467818153611851ull, 2549777542512579362ull}}, {{1770216122480568514ull, 17501061807846055636ull, 10155206809546790622ull, 3187221928140724202ull}}, {{2212770153100710643ull, 12652955222952793737ull, 3470636475078712470ull, 3984027410175905253ull}}, {{12912196391756413912ull, 3296410995918108181ull, 4474990806137889246ull, 2490017131359940783ull}}, {{2305187434413353678ull, 13343885781752411035ull, 982052489244973653ull, 3112521414199925979ull}}, {{16716542348298855809ull, 2844799171908350081ull, 15062623666838380779ull, 3890651767749907473ull}}, {{3530309940045703025ull, 17918900546938576465ull, 2496610764132906130ull, 2431657354843692171ull}}, {{9024573443484516685ull, 13175253646818444773ull, 16955821510448296375ull, 3039571693554615213ull}}, {{15892402822783033760ull, 11857381040095668062ull, 7359718832778206757ull, 3799464616943269017ull}}, {{5321065745812008196ull, 9716706159273486491ull, 16129039316554848983ull, 2374665385589543135ull}}, {{2039646163837622341ull, 7534196680664470210ull, 15549613127266173325ull, 2968331731986928919ull}}, {{11772929741651803734ull, 14029431869257975666ull, 14825330390655328752ull, 3710414664983661149ull}}, {{11969767106959765238ull, 8768394918286234791ull, 11571674503373274422ull, 2319009165614788218ull}}, {{10350522865272318644ull, 1737121611003017681ull, 5241221092361817220ull, 2898761457018485273ull}}, {{17549839600017786208ull, 2171402013753772101ull, 11163212383879659429ull, 3623451821273106591ull}}, {{8102241444740069048ull, 7325938535619603031ull, 9342329461422186382ull, 4529314776591383239ull}}, {{11981429930603625011ull, 18413769640044415606ull, 12756484941029948344ull, 2830821735369614524ull}}, {{5753415376399755456ull, 4570467976345967892ull, 15945606176287435431ull, 3538527169212018155ull}}, {{7191769220499694320ull, 1101398952005071961ull, 15320321701931906385ull, 4423158961515022694ull}}, {{16024070808880778710ull, 12217589391071639735ull, 4963515045280053586ull, 2764474350946889184ull}}, {{15418402492673585484ull, 6048614701984773861ull, 6204393806600066983ull, 3455592938683611480ull}}, {{5437945060559818142ull, 2949082359053579423ull, 7755492258250083729ull, 4319491173354514350ull}}, {{10316244690490968195ull, 13372391520476956899ull, 235496642978914426ull, 2699681983346571469ull}}, {{8283619844686322340ull, 7492117363741420316ull, 4906056822151030937ull, 3374602479183214336ull}}, {{10354524805857902925ull, 13976832723104163299ull, 6132571027688788671ull, 4218253098979017920ull}}, {{4165734994447495376ull, 15653049479581183918ull, 3832856892305492919ull, 2636408186861886200ull}}, {{14430540779914145028ull, 14954625831049091993ull, 4791071115381866149ull, 3295510233577357750ull}}, {{4203117919610517573ull, 4858224233529201280ull, 15212210931082108495ull, 4119387791971697187ull}}, {{2626948699756573483ull, 9953919173596832656ull, 7201788822712623857ull, 2574617369982310742ull}}, {{3283685874695716854ull, 17054084985423428724ull, 18225608065245555629ull, 3218271712477888427ull}}, {{4104607343369646067ull, 7482548176497122193ull, 18170324063129556633ull, 4022839640597360534ull}}, {{14094594635674498552ull, 16205807656379171130ull, 6744766521028584991ull, 2514274775373350334ull}}, {{8394871257738347382ull, 15645573552046576009ull, 17654330188140507047ull, 3142843469216687917ull}}, {{15105275090600322132ull, 14945280921630832107ull, 8232854679893470097ull, 3928554336520859897ull}}, {{7134953922411507380ull, 2423271548378188211ull, 16674749221001888571ull, 2455346460325537435ull}}, {{4307006384586996321ull, 16864147490754898976ull, 16231750507824972809ull, 3069183075406921794ull}}, {{5383757980733745402ull, 7245126308161460008ull, 11066316097926440204ull, 3836478844258652243ull}}, {{3364848737958590876ull, 13751575979455688313ull, 4610604551990331175ull, 2397799277661657652ull}}, {{8817746940875626499ull, 12577783955892222487ull, 5763255689987913969ull, 2997249097077072065ull}}, {{6410497657667145220ull, 1887171889583114397ull, 11815755630912280366ull, 3746561371346340081ull}}, {{6312404045255659715ull, 15014540486271610210ull, 467318241679093372ull, 2341600857091462551ull}}, {{17113877093424350451ull, 321431534129961146ull, 14419205857381030428ull, 2927001071364328188ull}}, {{12168974329925662256ull, 401789417662451433ull, 18024007321726288035ull, 3658751339205410235ull}}, {{1376159857124914108ull, 14337294827360228004ull, 17918323133730472139ull, 4573439174006762794ull}}, {{10083471947557847125ull, 6654966257886448550ull, 15810637977008932991ull, 2858399483754226746ull}}, {{3380967897592533099ull, 3707021803930672784ull, 10539925434406390431ull, 3572999354692783433ull}}, {{4226209871990666373ull, 22091236485953076ull, 17786592811435375943ull, 4466249193365979291ull}}, {{11864753206848942291ull, 6931336050444802528ull, 8810777497933416012ull, 2791405745853737057ull}}, {{14830941508561177864ull, 8664170063056003160ull, 15625157890844157919ull, 3489257182317171321ull}}, {{91932811991920714ull, 6218526560392616047ull, 5696389308273033687ull, 4361571477896464152ull}}, {{6974987035136032302ull, 10804108127886466885ull, 3560243317670646054ull, 2725982173685290095ull}}, {{13330419812347428282ull, 4281763123003307798ull, 18285362202370471280ull, 3407477717106612618ull}}, {{7439652728579509544ull, 5352203903754134748ull, 13633330716108313292ull, 4259347146383265773ull}}, {{13873154992216969273ull, 12568499476701110025ull, 10826674706781389759ull, 2662091966489541108ull}}, {{3506385684989047880ull, 11098938327448999628ull, 13533343383476737199ull, 3327614958111926385ull}}, {{4382982106236309849ull, 9261986890883861631ull, 3081621174063757787ull, 4159518697639907982ull}}, {{9656892844038775512ull, 3482898797588719567ull, 15761071289072012329ull, 2599699186024942488ull}}, {{7459430036621081486ull, 8965309515413287363ull, 1254595037630463795ull, 3249623982531178111ull}}, {{4712601527348963953ull, 6594950875839221300ull, 15403301852320243456ull, 4062029978163972638ull}}, {{12168747991447878279ull, 4121844297399513312ull, 5015377639272764256ull, 2538768736352482899ull}}, {{15210934989309847849ull, 5152305371749391640ull, 1657536030663567416ull, 3173460920440603624ull}}, {{566924662927758195ull, 6440381714686739551ull, 2071920038329459270ull, 3966826150550754530ull}}, {{7271856941970930728ull, 17860296626961375931ull, 5906636042383299947ull, 2479266344094221581ull}}, {{4478135159036275506ull, 17713684765274332010ull, 11994981071406512838ull, 3099082930117776976ull}}, {{14821040985650120190ull, 12918733919738139204ull, 14993726339258141048ull, 3873853662647221220ull}}, {{39778579176549311ull, 8074208699836337003ull, 147706925181562347ull, 2421158539154513263ull}}, {{13884781279252850351ull, 5481074856368033349ull, 14019691711759116646ull, 3026448173943141578ull}}, {{3520918543783899226ull, 16074715607314817495ull, 8301242602844119999ull, 3783060217428926973ull}}, {{9118103117506018872ull, 16964226282212842790ull, 7494119635991268951ull, 2364412635893079358ull}}, {{2174256860027747782ull, 16593596834338665584ull, 144277508134310381ull, 2955515794866349198ull}}, {{2717821075034684728ull, 6906937987641168268ull, 9403718922022663785ull, 3694394743582936497ull}}, {{10922010208751453763ull, 15846051288344199927ull, 17406539372332634625ull, 2308996714739335310ull}}, {{9040826742511929300ull, 5972506055148086197ull, 12534802178561017474ull, 2886245893424169138ull}}, {{15912719446567299529ull, 16689004605789883554ull, 6445130686346496034ull, 3607807366780211423ull}}, {{10667527271354348603ull, 11637883720382578635ull, 3444727339505732139ull, 4509759208475264279ull}}, {{4361361535382773925ull, 4967834316025417695ull, 9070483614832164443ull, 2818599505297040174ull}}, {{840015900801079502ull, 1598106876604384215ull, 2114732481685429746ull, 3523249381621300218ull}}, {{14885077931283513089ull, 11221005632610256076ull, 11866787638961562990ull, 4404061727026625272ull}}, {{79801670197419873ull, 2401442501954022144ull, 7416742274350976869ull, 2752538579391640795ull}}, {{99752087746774841ull, 7613489145869915584ull, 4659241824511333182ull, 3440673224239550994ull}}, {{124690109683468551ull, 293489395482618672ull, 15047424317493942286ull, 4300841530299438742ull}}, {{77931318552167845ull, 14018488927458800382ull, 4792954180006326024ull, 2688025956437149214ull}}, {{9320786185044985614ull, 17523111159323500477ull, 15214564761862683338ull, 3360032445546436517ull}}, {{16262668749733619921ull, 12680516912299599788ull, 5183147897046190461ull, 4200040556933045647ull}}, {{940795931728736643ull, 10231166079400943820ull, 10156996463294950894ull, 2625025348083153529ull}}, {{1175994914660920804ull, 3565585562396403967ull, 17307931597546076522ull, 3281281685103941911ull}}, {{15305051698608314716ull, 13680353989850280766ull, 17023228478505207748ull, 4101602106379927389ull}}, {{4953971293202808794ull, 17773593280511201287ull, 12945360808279448794ull, 2563501316487454618ull}}, {{1580778098076123088ull, 12993619563784225801ull, 6958328973494535185ull, 3204376645609318273ull}}, {{6587658641022541764ull, 2406966399448118539ull, 13309597235295556886ull, 4005470807011647841ull}}, {{1811443641425394651ull, 15339412054937237799ull, 1400969244418641197ull, 2503419254382279901ull}}, {{16099362607063907025ull, 5339207013389383536ull, 6362897573950689401ull, 3129274067977849876ull}}, {{1677459185120332166ull, 11285694785164117325ull, 7953621967438361751ull, 3911592584972312345ull}}, {{3354254999913901556ull, 13971088268368655184ull, 16500228775717445854ull, 2444745365607695215ull}}, {{4192818749892376944ull, 8240488298606043172ull, 16013599951219419414ull, 3055931707009619019ull}}, {{5241023437365471180ull, 1077238336402778157ull, 15405313920596886364ull, 3819914633762023774ull}}, {{5581482657567113440ull, 9896645997106512156ull, 5016635181945666073ull, 2387446646101264859ull}}, {{6976853321958891800ull, 16982493514810528099ull, 1659107959004694687ull, 2984308307626581074ull}}, {{4109380634021226846ull, 16616430875085772220ull, 11297256985610644167ull, 3730385384533226342ull}}, {{11791734933118042587ull, 17302798324569689493ull, 2449099597579264700ull, 2331490865333266464ull}}, {{904610611115389521ull, 3181753832002560251ull, 3061374496974080876ull, 2914363581666583080ull}}, {{14965821319176400613ull, 3977192290003200313ull, 3826718121217601095ull, 3642954477083228850ull}}, {{4872218593688337055ull, 359804344076612488ull, 14006769688376777177ull, 4553693096354036062ull}}, {{3045136621055210659ull, 11754092761116352565ull, 4142545036808097831ull, 2846058185221272539ull}}, {{8418106794746401228ull, 10080929932968052802ull, 566495277582734385ull, 3557572731526590674ull}}, {{1299261456578225727ull, 17212848434637453907ull, 9931491133833193789ull, 4446965914408238342ull}}, {{16952939474857248744ull, 13063873280862102643ull, 1595495940218358214ull, 2779353696505148964ull}}, {{16579488325144173025ull, 7106469564222852496ull, 1994369925272947768ull, 3474192120631436205ull}}, {{2277616332720664666ull, 8883086955278565621ull, 7104648425018572614ull, 4342740150789295256ull}}, {{3729353217164109368ull, 940243328621715609ull, 4440405265636607884ull, 2714212594243309535ull}}, {{9273377539882524614ull, 1175304160777144511ull, 938820563618371951ull, 3392765742804136919ull}}, {{6980035906425767863ull, 15304188256253594351ull, 15008583759805128650ull, 4240957178505171148ull}}, {{11280051469157186771ull, 14176803678585884373ull, 156992813023429598ull, 2650598236565731968ull}}, {{265006281164319751ull, 8497632561377579659ull, 196241016279286998ull, 3313247795707164960ull}}, {{14166315906737563401ull, 1398668664867198765ull, 245301270349108748ull, 4141559744633956200ull}}, {{11159790450924671078ull, 10097539952396775036ull, 153313293968192967ull, 2588474840396222625ull}}, {{13949738063655838847ull, 8010238922068580891ull, 4803327635887629113ull, 3235593550495278281ull}}, {{12825486561142410655ull, 14624484671013114018ull, 10615845563286924295ull, 4044491938119097851ull}}, {{12627615119141394564ull, 16057831947024278117ull, 4329060467840633732ull, 2527807461324436157ull}}, {{1949460843644579492ull, 1625545860070796031ull, 10023011603228180070ull, 3159759326655545196ull}}, {{16271884109837888077ull, 11255304361943270846ull, 12528764504035225087ull, 3949699158319431495ull}}, {{5558241550221292144ull, 13952094253855626135ull, 14748006842663097535ull, 2468561973949644684ull}}, {{2336115919349227276ull, 12828431798892144765ull, 18435008553328871919ull, 3085702467437055855ull}}, {{7531830917613921999ull, 11423853730187793052ull, 18432074673233701995ull, 3857128084296319819ull}}, {{13930766360363477058ull, 4834065572153676705ull, 9214203661557369795ull, 2410705052685199887ull}}, {{3578399895172182610ull, 1430895946764707978ull, 6906068558519324340ull, 3013381315856499859ull}}, {{13696371905820004071ull, 1788619933455884972ull, 4020899679721767521ull, 3766726644820624824ull}}, {{17783604477992278352ull, 12647102504478397867ull, 2513062299826104700ull, 2354204153012890515ull}}, {{17617819579062960036ull, 15808878130597997334ull, 16976385930064794587ull, 2942755191266113143ull}}, {{12798902436973924237ull, 15149411644820108764ull, 16608796394153605330ull, 3678443989082641429ull}}, {{15998628046217405296ull, 9713392519170360147ull, 6925937437409842951ull, 4598054986353301787ull}}, {{7693299519672184358ull, 12988399352122556948ull, 2022867889167457892ull, 2873784366470813617ull}}, {{9616624399590230448ull, 16235499190153196185ull, 7140270879886710269ull, 3592230458088517021ull}}, {{16632466517915175964ull, 6459315932409331519ull, 13537024618285775741ull, 4490288072610646276ull}}, {{17312820601338066834ull, 6342915466969526151ull, 17684012423283385646ull, 2806430045381653922ull}}, {{17029339733245195638ull, 17152016370566683497ull, 12881643492249456249ull, 3508037556727067403ull}}, {{7451616611274330835ull, 7604962407926190660ull, 11490368346884432408ull, 4385046945908834254ull}}, {{13880632418901232580ull, 4753101504953869162ull, 2569794198375382351ull, 2740654341193021409ull}}, {{8127418486771764917ull, 1329690862764948549ull, 7823928766396615843ull, 3425817926491276761ull}}, {{14770959126892094050ull, 15497171633738349398ull, 14391596976423157707ull, 4282272408114095951ull}}, {{4620163435880170878ull, 7379889261872774422ull, 15912277137905555423ull, 2676420255071309969ull}}, {{14998576331704989405ull, 4613175558913580123ull, 6055288367099780567ull, 3345525318839137462ull}}, {{14136534396203848852ull, 1154783430214587250ull, 16792482495729501517ull, 4181906648548921827ull}}, {{13447020016054793437ull, 3027582653097810983ull, 8189458550617244496ull, 2613691655343076142ull}}, {{12197089001641103892ull, 3784478316372263729ull, 1013451151416779812ull, 3267114569178845178ull}}, {{1411303196769216152ull, 4730597895465329662ull, 10490185976125750573ull, 4083893211473556472ull}}, {{14717122553262923807ull, 5262466693879524990ull, 6556366235078594108ull, 2552433257170972795ull}}, {{9173031154723878951ull, 6578083367349406238ull, 3583771775420854731ull, 3190541571463715994ull}}, {{2242916906550072881ull, 3610918190759369894ull, 13703086756130844222ull, 3988176964329644992ull}}, {{15236881121875959263ull, 16091881924506769895ull, 8564429222581777638ull, 2492610602706028120ull}}, {{14434415383917561174ull, 10891480368778686561ull, 10705536528227222048ull, 3115763253382535150ull}}, {{4207961174614787756ull, 13614350460973358202ull, 4158548623429251752ull, 3894704066728168938ull}}, {{7241661752561630252ull, 8508969038108348876ull, 7210778908070670249ull, 2434190041705105586ull}}, {{9052077190702037814ull, 15247897316062823999ull, 18236845671943113619ull, 3042737552131381982ull}}, {{6703410469950159364ull, 14448185626651142095ull, 13572685053074116216ull, 3803421940164227478ull}}, {{11107160571359931459ull, 9030116016656963809ull, 3871242139743934731ull, 2377138712602642174ull}}, {{48892658917750611ull, 6675959002393816858ull, 14062424711534694222ull, 2971423390753302717ull}}, {{9284487860501964072ull, 17568320789847046880ull, 3742972834136204065ull, 3714279238441628397ull}}, {{5802804912813727545ull, 4062671466013322444ull, 4645201030548821493ull, 2321424524026017748ull}}, {{7253506141017159431ull, 9690025350944040959ull, 5806501288186026866ull, 2901780655032522185ull}}, {{4455196657844061385ull, 2889159651825275391ull, 11869812628659921487ull, 3627225818790652731ull}}, {{957309803877688827ull, 17446507620063757951ull, 10225579767397513954ull, 4534032273488315914ull}}, {{7515847655064637373ull, 15515753280967236623ull, 11002673373050834125ull, 2833770170930197446ull}}, {{4783123550403408812ull, 5559633545926882067ull, 4529969679458766849ull, 3542212713662746808ull}}, {{1367218419576873111ull, 11561227950835990488ull, 5662462099323458561ull, 4427765892078433510ull}}, {{854511512235545695ull, 308238441631412199ull, 17374096867359325313ull, 2767353682549020943ull}}, {{14903197445576595830ull, 4996984070466653152ull, 17105935065771768737ull, 3459192103186276179ull}}, {{182252733261193171ull, 10857916106510704345ull, 16770732813787323017ull, 4323990128982845224ull}}, {{11643123004356715492ull, 18315412612637659975ull, 10481708008617076885ull, 2702493830614278265ull}}, {{9942217737018506461ull, 9059207710514911257ull, 17713821029198734011ull, 3378117288267847831ull}}, {{17039458189700520980ull, 6712323619716251167ull, 17530590268071029610ull, 4222646610334809789ull}}, {{17567190396203907469ull, 8806888280750044883ull, 13262461926758087458ull, 2639154131459256118ull}}, {{17347301976827496432ull, 1785238314082780296ull, 7354705371592833515ull, 3298942664324070148ull}}, {{3237383397324818924ull, 16066605947885639083ull, 9193381714491041893ull, 4123678330405087685ull}}, {{18164265687823869492ull, 12347471726642218378ull, 8051706580770595135ull, 2577298956503179803ull}}, {{13481960072925061056ull, 10822653639875385069ull, 5452947207535856015ull, 3221623695628974754ull}}, {{3017392035874162608ull, 8916631031416843433ull, 16039556046274595827ull, 4027029619536218442ull}}, {{13415085068489821390ull, 3267051385421833193ull, 14636408547349010296ull, 2516893512210136526ull}}, {{2933798280330113026ull, 4083814231777291492ull, 9072138647331487062ull, 3146116890262670658ull}}, {{3667247850412641282ull, 14328139826576390173ull, 2116801272309583019ull, 3932646112828338323ull}}, {{4597872915721594754ull, 6649244382396549906ull, 17463901859689347051ull, 2457903820517711451ull}}, {{14970713181506769250ull, 3699869459568299478ull, 17218191306184295910ull, 3072379775647139314ull}}, {{9490019440028685754ull, 13848208861315150156ull, 12299367095875594079ull, 3840474719558924143ull}}, {{15154634186872704405ull, 15572659565963050703ull, 14604633462563328155ull, 2400296699724327589ull}}, {{14331606715163492602ull, 14854138439026425475ull, 4420733772921996482ull, 3000370874655409487ull}}, {{13302822375526977848ull, 9344301011928256036ull, 914231197725107699ull, 3750463593319261859ull}}, {{17537636021559136963ull, 3534345123241466070ull, 16712295563074049976ull, 2344039745824538661ull}}, {{12698672990094145396ull, 4417931404051832588ull, 7055311398560398758ull, 2930049682280673327ull}}, {{15873341237617681745ull, 14745786291919566543ull, 4207453229773110543ull, 3662562102850841659ull}}, {{15229990528594714277ull, 13820546846472070275ull, 647630518789000275ull, 4578202628563552074ull}}, {{7212901071158002471ull, 6331998769831349970ull, 5016455092670513076ull, 2861376642852220046ull}}, {{18239498375802278897ull, 7914998462289187462ull, 15493940902692917153ull, 3576720803565275057ull}}, {{13576000932898072813ull, 14505434096288872232ull, 5532368073083982729ull, 4470901004456593822ull}}, {{8485000583061295508ull, 2148367282539463289ull, 17292788100959652918ull, 2794313127785371138ull}}, {{15217936747254007289ull, 11908831140029104919ull, 12392613089344790339ull, 3492891409731713923ull}}, {{14410734915640121207ull, 10274352906608993245ull, 10879080343253600020ull, 4366114262164642404ull}}, {{11312552331488769707ull, 15644842603485396586ull, 16022797251388275820ull, 2728821413852901502ull}}, {{4917318377506186325ull, 1109309180647194117ull, 10805124527380568968ull, 3411026767316126878ull}}, {{10758333990310120811ull, 1386636475808992646ull, 4283033622370935402ull, 4263783459145158598ull}}, {{2112272725516437603ull, 5478333815808008308ull, 16511954069263998338ull, 2664864661965724123ull}}, {{2640340906895547003ull, 16071289306614786193ull, 16028256568152610018ull, 3331080827457155154ull}}, {{7912112152046821658ull, 10865739596413706933ull, 10811948673335986715ull, 4163851034321443943ull}}, {{7250913104242957488ull, 4485244238544872881ull, 13674996948476073553ull, 2602406896450902464ull}}, {{13675327398731084764ull, 10218241316608479005ull, 17093746185595091941ull, 3253008620563628080ull}}, {{3259101193131692243ull, 17384487664187986661ull, 2920438658284313310ull, 4066260775704535101ull}}, {{4342781254921001604ull, 6253618771690103759ull, 4131117170641389771ull, 2541412984815334438ull}}, {{816790550223864101ull, 3205337446185241795ull, 14387268500156513022ull, 3176766231019168047ull}}, {{14856046243061993839ull, 13230043844586328051ull, 13372399606768253373ull, 3970957788773960059ull}}, {{6979185892700052197ull, 10574620412080148984ull, 6051906745016464406ull, 2481848617983725037ull}}, {{8723982365875065246ull, 3994903478245410422ull, 12176569449697968412ull, 3102310772479656296ull}}, {{1681605920489055750ull, 4993629347806763028ull, 15220711812122460515ull, 3877888465599570370ull}}, {{10274375737160435652ull, 815175333165532940ull, 14124630901003925726ull, 2423680290999731481ull}}, {{12842969671450544565ull, 10242341203311691983ull, 3820730570972743445ull, 3029600363749664352ull}}, {{11442026070885792802ull, 17414612522567002883ull, 4775913213715929306ull, 3787000454687080440ull}}, {{4845423285089926549ull, 15495818845031764706ull, 2984945758572455816ull, 2366875284179425275ull}}, {{15280151143217183995ull, 923029482580154266ull, 17566240253497733483ull, 2958594105224281593ull}}, {{9876816892166704185ull, 14988844908507356545ull, 8122742261590003141ull, 3698242631530351992ull}}, {{17702225603672659876ull, 11673871077030791792ull, 5076713913493751963ull, 2311401644706469995ull}}, {{3681037930881273229ull, 9980652827861101837ull, 1734206373439802050ull, 2889252055883087494ull}}, {{9212983432028979440ull, 3252443997971601488ull, 11391130003654528371ull, 3611565069853859367ull}}, {{11516229290036224299ull, 17900613052746665572ull, 9627226486140772559ull, 4514456337317324209ull}}, {{16421015343127415995ull, 18105412185607747838ull, 17546231599906452609ull, 2821535210823327630ull}}, {{11302897142054494186ull, 8796707176727521086ull, 12709417463028289954ull, 3526919013529159538ull}}, {{4905249390713341924ull, 1772511934054625550ull, 6663399791930586635ull, 4408648766911449423ull}}, {{16900838924478002415ull, 17248721023279998632ull, 11082153897597698502ull, 2755405479319655889ull}}, {{2679304581887951403ull, 12337529242245222483ull, 17634316714959416ull, 3444256849149569862ull}}, {{17184188782642102965ull, 15421911552806528103ull, 9245414932748475078ull, 4305321061436962327ull}}, {{17657647016792396209ull, 5027008702076692160ull, 12695913360608878780ull, 2690825663398101454ull}}, {{3625314697280943646ull, 6283760877595865201ull, 6646519663906322667ull, 3363532079247626818ull}}, {{9143329390028567461ull, 3243015078567443597ull, 17531521616737679142ull, 4204415099059533522ull}}, {{8020423877981548615ull, 15861942479386815960ull, 15568887028888437367ull, 2627759436912208451ull}}, {{10025529847476935769ull, 15215742080806132046ull, 14849422767683158805ull, 3284699296140260564ull}}, {{3308540272491393903ull, 5184619545725501346ull, 115034385894396891ull, 4105874120175325706ull}}, {{6679523688734509094ull, 934544206864744389ull, 4683582509611385961ull, 2566171325109578566ull}}, {{12961090629345524271ull, 5779866277008318390ull, 15077850173869008259ull, 3207714156386973207ull}}, {{6977991249827129530ull, 2613146827833010084ull, 14235626698908872420ull, 4009642695483716509ull}}, {{13584616567996731765ull, 10856588804250407110ull, 11203109696031739214ull, 2506026684677322818ull}}, {{7757398673141138898ull, 4347363968458233080ull, 4780515083184898210ull, 3132533355846653523ull}}, {{9696748341426423622ull, 14657576997427567158ull, 1363957835553734858ull, 3915666694808316904ull}}, {{1448781694964126860ull, 13772671641819617378ull, 852473647221084286ull, 2447291684255198065ull}}, {{11034349155559934383ull, 7992467515419745914ull, 5677278077453743262ull, 3059114605318997581ull}}, {{4569564407595142170ull, 767212357419906585ull, 11708283615244566982ull, 3823893256648746976ull}}, {{14385192800815433617ull, 14314565778669605327ull, 7317677259527854363ull, 2389933285405466860ull}}, {{13369804982591904117ull, 13281521204909618755ull, 9147096574409817954ull, 2987416606756833575ull}}, {{12100570209812492242ull, 7378529469282247636ull, 6822184699584884539ull, 3734270758446041969ull}}, {{16786228417987583459ull, 2305737909087710820ull, 15793080483309022597ull, 2333919224028776230ull}}, {{2536041448774927708ull, 7493858404787026430ull, 10517978567281502438ull, 2917399030035970288ull}}, {{12393423847823435443ull, 143950969129007229ull, 13147473209101878048ull, 3646748787544962860ull}}, {{1656721754497130592ull, 179938711411259037ull, 16434341511377347560ull, 4558435984431203575ull}}, {{3341294105774400572ull, 112461694632036898ull, 17188992472251924081ull, 2849022490269502234ull}}, {{13399989669072776523ull, 4752263136717434026ull, 12262868553460129293ull, 3561278112836877793ull}}, {{7526615049486194845ull, 10552014939324180437ull, 1493527636542997904ull, 4451597641046097242ull}}, {{7009977415142565731ull, 6595009337077612773ull, 5545140791266761594ull, 2782248525653810776ull}}, {{13374157787355595067ull, 17467133708201791774ull, 6931425989083451992ull, 3477810657067263470ull}}, {{7494325197339718026ull, 3387173061542688102ull, 17887654523209090799ull, 4347263321334079337ull}}, {{72267229909935862ull, 9034512191105261920ull, 4262255049364599893ull, 2717039575833799586ull}}, {{90334037387419828ull, 15904826257308965304ull, 14551190848560525674ull, 3396299469792249482ull}}, {{112917546734274784ull, 10657660784781430822ull, 8965616523845881285ull, 4245374337240311853ull}}, {{13905631521991085452ull, 8966880999702088215ull, 7909353336617369755ull, 2653358960775194908ull}}, {{12770353384061468911ull, 6596915231200222365ull, 9886691670771712194ull, 3316698700968993635ull}}, {{2127883674794672427ull, 17469516075855053765ull, 7746678570037252338ull, 4145873376211242044ull}}, {{3635770305960364219ull, 15530133565836796507ull, 14065046143128058519ull, 2591170860132026277ull}}, {{18379770937732618986ull, 14800980938868607729ull, 3746249623627909437ull, 3238963575165032847ull}}, {{9139655616883610020ull, 4666168118303595950ull, 71126011107498893ull, 4048704468956291059ull}}, {{1100598742124868359ull, 5222198083153441421ull, 16185354821438044472ull, 2530440293097681911ull}}, {{5987434446083473352ull, 6527747603941801776ull, 15620007508370167686ull, 3163050366372102389ull}}, {{7484293057604341690ull, 17383056541782028028ull, 5689951330180545895ull, 3953812957965127987ull}}, {{13901055197857489365ull, 17781939366254849373ull, 1250376572149147232ull, 2471133098728204992ull}}, {{3541260942039697994ull, 3780680134109010101ull, 1562970715186434041ull, 3088916373410256240ull}}, {{9038262195977010396ull, 9337536186063650530ull, 1953713393983042551ull, 3861145466762820300ull}}, {{10260599890913019402ull, 12753489143930863437ull, 10444442908094177402ull, 2413215916726762687ull}}, {{17437435882068662156ull, 6718489393058803488ull, 8443867616690333849ull, 3016519895908453359ull}}, {{3350050778876276079ull, 13009797759750892265ull, 5943148502435529407ull, 3770649869885566699ull}}, {{13622996782866142309ull, 15048652627485389521ull, 1408624804808511927ull, 2356656168678479187ull}}, {{3193687923300514175ull, 14199129765929348998ull, 15595839061292803621ull, 2945820210848098983ull}}, {{13215481940980418526ull, 3913854152129522535ull, 14883112808188616623ull, 3682275263560123729ull}}, {{11907666407798135254ull, 280631671734515265ull, 4768832954953607067ull, 4602844079450154662ull}}, {{524762477232752678ull, 16316295859329929705ull, 16815578652128168128ull, 2876777549656346663ull}}, {{5267639114968328751ull, 1948625750452860515ull, 16407787296732822257ull, 3595971937070433329ull}}, {{1972862875283023035ull, 7047468206493463548ull, 6674676065633864109ull, 4494964921338041662ull}}, {{10456411333906665205ull, 6710510638272108669ull, 18006730596303328780ull, 2809353075836276038ull}}, {{17682200185810719410ull, 8388138297840135836ull, 13285041208524385167ull, 3511691344795345048ull}}, {{3656006158553847646ull, 5873486853872781892ull, 16606301510655481459ull, 4389614180994181310ull}}, {{11508375885950930587ull, 1365086274456794730ull, 5767252425732288008ull, 2743508863121363319ull}}, {{5162097820583887426ull, 1706357843070993413ull, 2597379513737972106ull, 3429386078901704149ull}}, {{11064308294157247186ull, 11356319340693517574ull, 7858410410599853036ull, 4286732598627130186ull}}, {{2303506665420891588ull, 16321071624788224292ull, 9523192525052296051ull, 2679207874141956366ull}}, {{2879383331776114484ull, 15789653512557892461ull, 2680618619460594256ull, 3349009842677445458ull}}, {{8210915183147531009ull, 1290322816987813960ull, 12574145311180518629ull, 4186262303346806822ull}}, {{5131821989467206881ull, 3112294769831077677ull, 3247154801060436239ull, 2616413939591754264ull}}, {{11026463505261396505ull, 17725426517571010808ull, 4058943501325545298ull, 3270517424489692830ull}}, {{13783079381576745631ull, 12933411110108987702ull, 14297051413511707431ull, 4088146780612116037ull}}, {{4002738595058078116ull, 15000910971459199170ull, 11241500142658511096ull, 2555091737882572523ull}}, {{14226795280677373453ull, 304394640614447346ull, 9440189159895750967ull, 3193864672353215654ull}}, {{8560122063991941008ull, 14215551356050222895ull, 2576864413014912900ull, 3992330840441519568ull}}, {{12267605317636044986ull, 18108091634386165117ull, 1610540258134320562ull, 2495206775275949730ull}}, {{1499448591762892520ull, 13411742506127930589ull, 11236547359522676511ull, 3119008469094937162ull}}, {{6485996758131003554ull, 12152992114232525332ull, 4822312162548569831ull, 3898760586368671453ull}}, {{13277120010686653030ull, 14513149099036410188ull, 5319788110806550096ull, 2436725366480419658ull}}, {{16596400013358316287ull, 18141436373795512735ull, 15873107175362963428ull, 3045906708100524572ull}}, {{16133813998270507454ull, 4230051393534839303ull, 1394639895494152670ull, 3807383385125655716ull}}, {{17001162776560149015ull, 16478840176241438276ull, 10095021971538621226ull, 2379614615703534822ull}}, {{2804709396990634653ull, 11375178183447022038ull, 3395405427568500725ull, 2974518269629418528ull}}, {{12729258783093069124ull, 383914674026613835ull, 4244256784460625907ull, 3718147837036773160ull}}, {{5649943730219474251ull, 16380847735762491311ull, 2652660490287891191ull, 2323842398147983225ull}}, {{2450743644346954909ull, 15864373651275726235ull, 7927511631287251893ull, 2904802997684979031ull}}, {{16898487610715857348ull, 5995409008812494081ull, 5297703520681676963ull, 3631003747106223789ull}}, {{7288051458112657973ull, 2882575242588229698ull, 11233815419279484108ull, 4538754683882779736ull}}, {{9166718179747799137ull, 11024981563472419369ull, 7021134637049677567ull, 2836721677426737335ull}}, {{16070083743112136826ull, 9169540935913136307ull, 4164732277884709055ull, 3545902096783421669ull}}, {{15475918660462783128ull, 6850240151464032480ull, 9817601365783274223ull, 4432377620979277086ull}}, {{9672449162789239455ull, 11198929122306102156ull, 1524314835187158485ull, 2770236013112048179ull}}, {{12090561453486549319ull, 163603347600463983ull, 15740451599266111819ull, 3462795016390060223ull}}, {{10501515798430798745ull, 14039562239782743691ull, 15063878480655251869ull, 4328493770487575279ull}}, {{4257604364805555264ull, 11080569409077908759ull, 16332453078050614274ull, 2705308606554734549ull}}, {{710319437579556175ull, 4627339724492610141ull, 6580508292281104131ull, 3381635758193418187ull}}, {{5499585315401833123ull, 1172488637188374772ull, 3613949346923992260ull, 4227044697741772734ull}}, {{12660612858980921510ull, 9956177435097510040ull, 16093776397109658874ull, 2641902936088607958ull}}, {{15825766073726151887ull, 3221849757017111742ull, 10893848459532297785ull, 3302378670110759948ull}}, {{10558835555302914051ull, 8638998214698777582ull, 13617310574415372231ull, 4127973337638449935ull}}, {{1987586203636933378ull, 12316902911827817845ull, 15428348136650689500ull, 2579983336024031209ull}}, {{7096168772973554627ull, 15396128639784772306ull, 5450377115531198163ull, 3224979170030039012ull}}, {{18093583003071719091ull, 14633474781303577478ull, 6812971394413997704ull, 4031223962537548765ull}}, {{6696803358492436528ull, 9145921738314735924ull, 6563950130722442517ull, 2519514976585967978ull}}, {{8371004198115545660ull, 16044088191320807809ull, 17428309700257828954ull, 3149393720732459972ull}}, {{15075441266071819979ull, 10831738202296233953ull, 3338643051612734577ull, 3936742150915574966ull}}, {{2504621763653805631ull, 18299051422503615981ull, 15921709962540122822ull, 2460463844322234353ull}}, {{7742463222994644943ull, 13650442241274744168ull, 6067079397892989816ull, 3075579805402792942ull}}, {{9678079028743306178ull, 17063052801593430210ull, 16807221284221013078ull, 3844474756753491177ull}}, {{10660485411391954266ull, 6052721982568505977ull, 3586984274997051318ull, 2402796722970931986ull}}, {{17937292782667330736ull, 16789274515065408279ull, 13707102380601089955ull, 3003495903713664982ull}}, {{17809929959906775516ull, 16374907125404372445ull, 7910505938896586636ull, 3754369879642081228ull}}, {{13437049234155428649ull, 1010944916522956970ull, 14167438248665142456ull, 2346481174776300767ull}}, {{7572939505839510004ull, 1263681145653696213ull, 13097611792404040166ull, 2933101468470375959ull}}, {{14077860400726775408ull, 10802973468921896074ull, 11760328722077662303ull, 3666376835587969949ull}}, {{8373953464053693452ull, 8892030817724982189ull, 865352847314914167ull, 4582971044484962437ull}}, {{7539563924247252360ull, 12475048288719195724ull, 2846688538785515306ull, 2864356902803101523ull}}, {{9424454905309065450ull, 6370438324044218847ull, 17393418728764057845ull, 3580446128503876903ull}}, {{7168882613208943908ull, 12574733923482661463ull, 17130087392527684402ull, 4475557660629846129ull}}, {{11398080660896671799ull, 12470894720604051318ull, 3788775592688720895ull, 2797223537893653831ull}}, {{5024228789266063940ull, 10976932382327676244ull, 124283472433513215ull, 3496529422367067289ull}}, {{6280285986582579925ull, 9109479459482207401ull, 4767040358969279423ull, 4370661777958834111ull}}, {{15454393787682582214ull, 12610953689817461481ull, 9896929251996881495ull, 2731663611224271319ull}}, {{5482934179321064055ull, 11152006093844438948ull, 7759475546568713965ull, 3414579514030339149ull}}, {{6853667724151330068ull, 104949562023384973ull, 14311030451638280361ull, 4268224392537923936ull}}, {{6589385336808275245ull, 11594808522333085368ull, 8944394032273925225ull, 2667640245336202460ull}}, {{8236731671010344056ull, 658452597634192998ull, 11180492540342406532ull, 3334550306670253075ull}}, {{1072542551908154262ull, 823065747042741248ull, 9363929657000620261ull, 4168187883337816344ull}}, {{670339094942596414ull, 2820259101115407232ull, 5852456035625387663ull, 2605117427086135215ull}}, {{837923868678245517ull, 17360381931676422752ull, 2703884026104346674ull, 3256396783857669019ull}}, {{1047404835847806896ull, 12477105377740752632ull, 17214913087912597055ull, 4070495979822086273ull}}, {{654628022404879310ull, 14715719888729052251ull, 3841791652304291303ull, 2544059987388803921ull}}, {{14653343083288262850ull, 13782963842483927409ull, 9413925583807752033ull, 3180074984236004901ull}}, {{4481620798828164850ull, 3393646747822745550ull, 16379092998187077946ull, 3975093730295006126ull}}, {{16636071054549766744ull, 6732715235816603872ull, 5625247105439535812ull, 2484433581434378829ull}}, {{2348344744477656813ull, 8415894044770754841ull, 11643244900226807669ull, 3105541976792973536ull}}, {{7547116949024458921ull, 15131553574390831455ull, 14554056125283509586ull, 3881927470991216920ull}}, {{11634477120781368682ull, 14068907002421657563ull, 9096285078302193491ull, 2426204669369510575ull}}, {{9931410382549322948ull, 12974447734599684050ull, 6758670329450353960ull, 3032755836711888219ull}}, {{3190890941331877877ull, 16218059668249605063ull, 3836651893385554546ull, 3790944795889860274ull}}, {{8911835865973505529ull, 14747973311083391068ull, 7009593451793359495ull, 2369340497431162671ull}}, {{11139794832466881911ull, 13823280620426850931ull, 4150305796314311465ull, 2961675621788953339ull}}, {{9313057522156214485ull, 3444042720251399952ull, 576196226965501428ull, 3702094527236191674ull}}, {{5820660951347634053ull, 11375898737011900778ull, 4971808660280826296ull, 2313809079522619796ull}}, {{16499198226039318374ull, 14219873421264875972ull, 6214760825351032870ull, 2892261349403274745ull}}, {{2177253708839596352ull, 8551469739726319158ull, 12380137050116178992ull, 3615326686754093431ull}}, {{11944939172904271248ull, 10689337174657898947ull, 10863485294217835836ull, 4519158358442616789ull}}, {{5159743973851475578ull, 15904207771015962650ull, 9095521318099841349ull, 2824473974026635493ull}}, {{15673052004169120280ull, 6045201658487789600ull, 15981087666052189591ull, 3530592467533294366ull}}, {{1144570931501848734ull, 2944816054682349097ull, 10752987545710461181ull, 4413240584416617958ull}}, {{12244571878257125219ull, 4146353043390162137ull, 2108931197641650334ull, 2758275365260386224ull}}, {{1470656792539242812ull, 14406313341092478480ull, 2636163997052062917ull, 3447844206575482780ull}}, {{1838320990674053515ull, 4172833621083434388ull, 3295204996315078647ull, 4309805258219353475ull}}, {{10372322656026059255ull, 9525550040818228348ull, 18200404187192781818ull, 2693628286387095921ull}}, {{12965403320032574069ull, 2683565514168009627ull, 8915447178708813561ull, 3367035357983869902ull}}, {{11595068131613329682ull, 7966142911137399938ull, 1920936936531241143ull, 4208794197479837378ull}}, {{11858603600685718955ull, 11896368347101956817ull, 5812271603759413618ull, 2630496373424898361ull}}, {{988196445574984982ull, 5647088397022670214ull, 11877025523126654927ull, 3288120466781122951ull}}, {{10458617593823507035ull, 2447174477850949863ull, 10234595885480930755ull, 4110150583476403689ull}}, {{13454165023780773753ull, 17670385113152701328ull, 17925837474494051481ull, 2568844114672752305ull}}, {{16817706279725967191ull, 8252923336158712948ull, 8572238787835400640ull, 3211055143340940382ull}}, {{2575388775947907373ull, 10316154170198391186ull, 1491926447939474992ull, 4013818929176175478ull}}, {{6221304003394830012ull, 6447596356373994491ull, 14767512085244335582ull, 2508636830735109673ull}}, {{3164943985816149611ull, 17282867482322268922ull, 4624332051273255765ull, 3135796038418887092ull}}, {{13179552019124962822ull, 7768526297620672440ull, 5780415064091569707ull, 3919745048023608865ull}}, {{8237220011953101764ull, 2549485926799226323ull, 15141974461125700827ull, 2449840655014755540ull}}, {{5684838996513989301ull, 17021915463781196616ull, 480724002697574417ull, 3062300818768444426ull}}, {{7106048745642486626ull, 7442336274444332058ull, 9824277040226743830ull, 3827876023460555532ull}}, {{9052966484453942045ull, 39774153100319632ull, 15363545186996490702ull, 2392422514662847207ull}}, {{11316208105567427557ull, 9273089728230175348ull, 14592745465318225473ull, 2990528143328559009ull}}, {{14145260131959284446ull, 16203048178715107089ull, 4405873776365618129ull, 3738160179160698762ull}}, {{1923258554833470923ull, 3209376084055860075ull, 7365357128655899235ull, 2336350111975436726ull}}, {{16239131248824002365ull, 17846778160351988805ull, 18430068447674649851ull, 2920437639969295907ull}}, {{6463856005747839244ull, 17696786682012598103ull, 18425899541165924410ull, 3650547049961619884ull}}, {{3468133988757411151ull, 12897611315660971821ull, 4585630352747853897ull, 4563183812452024856ull}}, {{4473426752187075922ull, 1143478044647025532ull, 2866018970467408686ull, 2851989882782515535ull}}, {{5591783440233844902ull, 10652719592663557723ull, 17417581768366424569ull, 3564987353478144418ull}}, {{2378043281864918223ull, 17927585509256835058ull, 12548605173603254903ull, 4456234191847680523ull}}, {{6097963069592961794ull, 18122269970926603767ull, 5537035224288340362ull, 2785146369904800327ull}}, {{3010767818563814338ull, 13429465426803478901ull, 2309608011933037549ull, 3481432962381000409ull}}, {{8375145791632155827ull, 2951773728222184914ull, 7498696033343684841ull, 4351791202976250511ull}}, {{9846152138197485296ull, 13374073626207335331ull, 11604214048480884881ull, 2719869501860156569ull}}, {{7696004154319468716ull, 2882533977477005452ull, 670209505318942390ull, 3399836877325195712ull}}, {{9620005192899335894ull, 12826539508701032623ull, 837761881648677987ull, 4249796096656494640ull}}, {{12930032273203166790ull, 5710744183724451437ull, 523601176030423742ull, 2656122560410309150ull}}, {{2327482286221794776ull, 16361802266510340105ull, 9877873506892805485ull, 3320153200512886437ull}}, {{7521038876204631373ull, 6617194777855761419ull, 16959027902043394761ull, 4150191500641108046ull}}, {{2394806288414200657ull, 15664961782228320647ull, 5987706420349733821ull, 2593869687900692529ull}}, {{16828565915799914533ull, 5746144172503237096ull, 12096319043864555181ull, 3242337109875865661ull}}, {{2588963321040341550ull, 11794366234056434275ull, 1285340749548530264ull, 4052921387344832077ull}}, {{17759003140146071133ull, 7371478896285271421ull, 3109180977681525367ull, 2533075867090520048ull}}, {{8363695869900425204ull, 4602662601929201373ull, 3886476222101906709ull, 3166344833863150060ull}}, {{15066305855802919409ull, 10365014270838889620ull, 4858095277627383386ull, 3957931042328937575ull}}, {{193069123022048823ull, 11089819937701693917ull, 9953838576158196472ull, 2473706901455585984ull}}, {{4853022422204948932ull, 13862274922127117396ull, 12442298220197745590ull, 3092133626819482480ull}}, {{6066278027756186165ull, 8104471615804120937ull, 15552872775247181988ull, 3865167033524353100ull}}, {{15320638813416086113ull, 14288666796732351393ull, 497173447674712934ull, 2415729395952720688ull}}, {{5315740461487943929ull, 8637461459060663434ull, 621466809593391168ull, 3019661744940900860ull}}, {{15868047613714705720ull, 10796826823825829292ull, 776833511991738960ull, 3774577181176126075ull}}, {{694157721716915267ull, 6748016764891143308ull, 16626422009490694514ull, 2359110738235078796ull}}, {{867697152146144084ull, 17658392992968704943ull, 2336283438153816526ull, 2948888422793848496ull}}, {{14919679495464843816ull, 12849619204356105370ull, 2920354297692270658ull, 3686110528492310620ull}}, {{9426227332476278962ull, 6838651968590355905ull, 3650442872115338323ull, 4607638160615388275ull}}, {{17420607128866144112ull, 1968314471155278488ull, 18422427859567944116ull, 2879773850384617671ull}}, {{3329014837373128523ull, 2460393088944098111ull, 18416348806032542241ull, 3599717312980772089ull}}, {{17996326601998574366ull, 7687177379607510542ull, 9185377952258514089ull, 4499646641225965112ull}}, {{6636018107821721075ull, 16333700908323163849ull, 5740861220161571305ull, 2812279150766228195ull}}, {{12906708653204539248ull, 6582068080121791099ull, 2564390506774576228ull, 3515348938457785244ull}}, {{11521699798078286156ull, 8227585100152238874ull, 3205488133468220285ull, 4394186173072231555ull}}, {{11812748392226316751ull, 7448083696808843248ull, 18144331147913495342ull, 2746366358170144721ull}}, {{14765935490282895939ull, 86732584156278252ull, 8845355879609705466ull, 3432957947712680902ull}}, {{10675289144068308ull, 9331787767050123624ull, 1833322812657356024ull, 4291197434640851128ull}}, {{6672055715042693ull, 5832367354406327265ull, 1145826757910847515ull, 2681998396650531955ull}}, {{4620026088071191270ull, 2678773174580521177ull, 15267341502670723106ull, 3352497995813164943ull}}, {{10386718628516376991ull, 12571838505080427279ull, 14472490859911015978ull, 4190622494766456179ull}}, {{13409228170463817475ull, 12469085084102654953ull, 6739463778230691034ull, 2619139059229035112ull}}, {{2926477157797608132ull, 6362984318273542884ull, 8424329722788363793ull, 3273923824036293890ull}}, {{3658096447247010165ull, 12565416416269316509ull, 1307040116630678933ull, 4092404780045367363ull}}, {{4592153288743075305ull, 10159228269382016770ull, 16957801137390031997ull, 2557752987528354601ull}}, {{14963563647783619940ull, 17310721355154908866ull, 7362193366455376284ull, 3197191234410443252ull}}, {{9481082522874749116ull, 3191657620234084467ull, 9202741708069220356ull, 3996489043013054065ull}}, {{3619833567583024246ull, 11218158049501078600ull, 17280928613611732482ull, 2497805651883158790ull}}, {{4524791959478780307ull, 4799325525021572442ull, 12377788730159889795ull, 3122257064853948488ull}}, {{14879361986203251192ull, 1387470887849577648ull, 15472235912699862244ull, 3902821331067435610ull}}, {{9299601241377031995ull, 10090541341760761838ull, 14281833463864801806ull, 2439263331917147256ull}}, {{2401129514866514186ull, 3389804640346176490ull, 17852291829831002258ull, 3049079164896434070ull}}, {{12224783930437918540ull, 13460627837287496420ull, 13091992750433977014ull, 3811348956120542588ull}}, {{16863861993378474896ull, 3801206379877297358ull, 17405867505876011442ull, 2382093097575339117ull}}, {{11856455454868317812ull, 13974880011701397506ull, 7922276327062850590ull, 2977616371969173897ull}}, {{5597197281730621456ull, 8245227977771971075ull, 14514531427255951142ull, 3722020464961467371ull}}, {{1192405291867944458ull, 541581467680094018ull, 6765739132821275512ull, 2326262790600917107ull}}, {{10713878651689706381ull, 676976834600117522ull, 3845487897599206486ull, 2907828488251146384ull}}, {{4168976277757357168ull, 10069593080104922711ull, 4806859871999008107ull, 3634785610313932980ull}}, {{599534328769308556ull, 7975305331703765485ull, 6008574839998760134ull, 4543482012892416225ull}}, {{2680551964694511800ull, 372879813887465524ull, 15284574321067694844ull, 2839676258057760140ull}}, {{3350689955868139749ull, 466099767359331905ull, 658973827625066939ull, 3549595322572200176ull}}, {{8800048463262562591ull, 14417682764481328593ull, 823717284531333673ull, 4436994153215250220ull}}, {{17029245335607571379ull, 2093522700159748514ull, 9738195339686859354ull, 2773121345759531387ull}}, {{12063184632654688416ull, 11840275412054461451ull, 7561058156181186288ull, 3466401682199414234ull}}, {{10467294772390972616ull, 14800344265068076814ull, 227950658371707052ull, 4333002102749267793ull}}, {{1930373214316969981ull, 26843128812772201ull, 11671684207550786668ull, 2708126314218292370ull}}, {{7024652536323600380ull, 33553911015965251ull, 5366233222583707527ull, 3385157892772865463ull}}, {{4169129651977112571ull, 13877000444052120276ull, 2096105509802246504ull, 4231447365966081829ull}}, {{11829078069340471165ull, 8673125277532575172ull, 3615908952840098017ull, 2644654603728801143ull}}, {{14786347586675588956ull, 15453092615343106869ull, 18354944246332286233ull, 3305818254661001428ull}}, {{4647876428062322483ull, 5481307713896719875ull, 4496936234205806176ull, 4132272818326251786ull}}, {{599079758325257600ull, 3425817321185449922ull, 7422271164806016764ull, 2582670511453907366ull}}, {{9972221734761347808ull, 4282271651481812402ull, 54466919152745147ull, 3228338139317384208ull}}, {{3241905131596908952ull, 741153545924877599ull, 68083648940931434ull, 4035422674146730260ull}}, {{8943719734889149951ull, 5074906984630436403ull, 9265924317442857954ull, 2522139171341706412ull}}, {{6567963650184049535ull, 15567005767642821312ull, 11582405396803572442ull, 3152673964177133015ull}}, {{8209954562730061919ull, 10235385172698750832ull, 9866320727577077649ull, 3940842455221416269ull}}, {{5131221601706288699ull, 17926330779005189030ull, 8472293463949367482ull, 2463026534513385168ull}}, {{15637399038987636682ull, 13184541436901710479ull, 10590366829936709353ull, 3078783168141731460ull}}, {{14935062780307157948ull, 2645618740844974387ull, 13237958537420886692ull, 3848478960177164325ull}}, {{7028571228478279766ull, 10876883749882884800ull, 10579567095101748134ull, 2405299350110727703ull}}, {{8785714035597849707ull, 4372732650498830192ull, 8612772850449797264ull, 3006624187638409629ull}}, {{10982142544497312134ull, 5465915813123537740ull, 15377652081489634484ull, 3758280234548012036ull}}, {{16087211127165595892ull, 12639569420056986895ull, 387660514076245744ull, 2348925146592507523ull}}, {{15497327890529606961ull, 15799461775071233619ull, 14319633697877470892ull, 2936156433240634403ull}}, {{14759973844734620797ull, 1302583145129490408ull, 13287856103919450712ull, 3670195541550793004ull}}, {{3223232208724380ull, 1628228931411863011ull, 16609820129899313390ull, 4587744426938491255ull}}, {{16142915584626310402ull, 14852701137414578093ull, 17298666608828152724ull, 2867340266836557034ull}}, {{6343586425500724290ull, 119132348058671001ull, 12399961224180415098ull, 3584175333545696293ull}}, {{12541169050303293266ull, 9372287471928114559ull, 1664893474943355160ull, 4480219166932120367ull}}, {{14755759684080640148ull, 5857679669955071599ull, 7958087449480678831ull, 2800136979332575229ull}}, {{13833013586673412280ull, 2710413569016451595ull, 14559295330278236443ull, 3500171224165719036ull}}, {{12679580964914377446ull, 17223075016552728206ull, 18199119162847795553ull, 4375214030207148795ull}}, {{3313052084644098000ull, 3846892857704373273ull, 9068606467566178269ull, 2734508768879467997ull}}, {{8753001124232510404ull, 9420302090557854495ull, 15947444102885110740ull, 3418135961099334996ull}}, {{6329565386863250101ull, 11775377613197318119ull, 1487561054896836809ull, 4272669951374168746ull}}, {{10873507394430613169ull, 442081980607241968ull, 5541411677737910910ull, 2670418719608855466ull}}, {{13591884243038266462ull, 9775974512613828268ull, 16150136634027164445ull, 3338023399511069332ull}}, {{16989855303797833077ull, 16831654159194673239ull, 1740926718824403940ull, 4172529249388836666ull}}, {{17536188592514727529ull, 1296411812641894966ull, 5699765217692640367ull, 2607830780868022916ull}}, {{12696863703788633603ull, 15455572821084532420ull, 7124706522115800458ull, 3259788476085028645ull}}, {{15871079629735792004ull, 10096093989500889717ull, 13517569171072138477ull, 4074735595106285806ull}}, {{12225267777798563955ull, 8615901752651750025ull, 3836794713492698644ull, 2546709746941428629ull}}, {{1446526666966041231ull, 10769877190814687532ull, 9407679410293261209ull, 3183387183676785786ull}}, {{1808158333707551539ull, 18074032506945747319ull, 2536227226011800703ull, 3979233979595982233ull}}, {{8047627986208301568ull, 18213799344482173930ull, 13114357062325845199ull, 2487021237247488895ull}}, {{836162945905601152ull, 18155563162175329509ull, 11781260309479918595ull, 3108776546559361119ull}}, {{5656889700809389344ull, 18082767934291773982ull, 10114889368422510340ull, 3885970683199201399ull}}, {{17370614118288032052ull, 2078357922077582930ull, 13239334882905150819ull, 2428731676999500874ull}}, {{12489895611005264257ull, 16433005457879142375ull, 7325796566776662715ull, 3035914596249376093ull}}, {{11000683495329192417ull, 15929570803921540065ull, 13768931726898216298ull, 3794893245311720116ull}}, {{18404642230649215021ull, 14567667770878350444ull, 17828954366166160994ull, 2371808278319825072ull}}, {{4559058714601967160ull, 8986212676743162248ull, 3839448883998149627ull, 2964760347899781341ull}}, {{5698823393252458950ull, 6621079827501564906ull, 9410997123425074938ull, 3705950434874726676ull}}, {{8173450639210174748ull, 8749860910615865970ull, 15105245238995447644ull, 2316219021796704172ull}}, {{993441262157942627ull, 10937326138269832463ull, 434812475034757939ull, 2895273777245880216ull}}, {{15076859632979591995ull, 9059971654409902674ull, 543515593793447424ull, 3619092221557350270ull}}, {{9622702504369714186ull, 11324964568012378343ull, 9902766529096585088ull, 4523865276946687837ull}}, {{12931718092872153222ull, 7078102855007736464ull, 8495072089899059632ull, 2827415798091679898ull}}, {{16164647616090191528ull, 8847628568759670580ull, 1395468075519048732ull, 3534269747614599873ull}}, {{1759065446403187794ull, 11059535710949588226ull, 6356021112826198819ull, 4417837184518249841ull}}, {{5711101922429380275ull, 4606366810129798689ull, 15501728241584844022ull, 2761148240323906150ull}}, {{11750563421464113248ull, 14981330549517024169ull, 10153788265126279219ull, 3451435300404882688ull}}, {{853146221547977848ull, 14114977168468892308ull, 12692235331407849024ull, 4314294125506103360ull}}, {{9756588425322261963ull, 8821860730293057692ull, 7932647082129905640ull, 2696433828441314600ull}}, {{12195735531652827454ull, 11027325912866322115ull, 9915808852662382050ull, 3370542285551643250ull}}, {{10632983396138646413ull, 4560785354228126836ull, 3171389028973201755ull, 4213177856939554063ull}}, {{15868986659441429816ull, 544647837178885320ull, 8899647170749332953ull, 2633236160587221289ull}}, {{1389489250592235654ull, 5292495814900994555ull, 15736244981864054095ull, 3291545200734026611ull}}, {{15571919618522458280ull, 2003933750198855289ull, 15058620208902679715ull, 4114431500917533264ull}}, {{2814920733935454569ull, 17393359658370142220ull, 9411637630564174821ull, 2571519688073458290ull}}, {{3518650917419318211ull, 7906641517680514063ull, 2541175001350442719ull, 3214399610091822863ull}}, {{18233371702056311476ull, 5271615878673254674ull, 17011526806970217111ull, 4017999512614778578ull}}, {{16007543332212582577ull, 10212288951811866027ull, 15243890272783773598ull, 2511249695384236611ull}}, {{15397743146838340317ull, 3541989152910056726ull, 14443176822552329094ull, 3139062119230295764ull}}, {{10023806896693149588ull, 13650858477992346716ull, 18053971028190411367ull, 3923827649037869705ull}}, {{15488251347287994300ull, 15449315576386298553ull, 4366202864977925248ull, 2452392280648668566ull}}, {{5525256128827829163ull, 864900396773321576ull, 14681125618077182369ull, 3065490350810835707ull}}, {{6906570161034786454ull, 5692811514394039874ull, 13739721004169090057ull, 3831862938513544634ull}}, {{8928292369074129438ull, 15087222242564744681ull, 13199011646033069189ull, 2394914336570965396ull}}, {{15772051479770049701ull, 5023969747923767139ull, 16498764557541336487ull, 2993642920713706745ull}}, {{15103378331285174223ull, 1668276166477321020ull, 6788397641644506897ull, 3742053650892133432ull}}, {{216239420198458081ull, 12571887650116795398ull, 4242748526027816810ull, 2338783531807583395ull}}, {{9493671312102848410ull, 6491487525791218439ull, 691749639107383109ull, 2923479414759479244ull}}, {{7255403121701172608ull, 12726045425666410953ull, 864687048884228886ull, 3654349268449349055ull}}, {{13680939920553853664ull, 6684184745228237883ull, 14915916866387449820ull, 4567936585561686318ull}}, {{6244744441132464588ull, 13400987502622424485ull, 4710762023064768233ull, 2854960365976053949ull}}, {{12417616569842968639ull, 2916176322995866894ull, 10500138547258348196ull, 3568700457470067436ull}}, {{6298648675448934990ull, 3645220403744833618ull, 13125173184072935245ull, 4460875571837584295ull}}, {{8548341440582972273ull, 4584105761554214963ull, 15120762267686666384ull, 2788047232398490184ull}}, {{6073740782301327437ull, 5730132201942768704ull, 454208760898781364ull, 3485059040498112731ull}}, {{7592175977876659297ull, 7162665252428460880ull, 14402819006405640417ull, 4356323800622640913ull}}, {{4745109986172912061ull, 16005880828836257810ull, 2084232851362443404ull, 2722702375389150571ull}}, {{15154759519570915884ull, 1560606962335770646ull, 16440349119485217968ull, 3403377969236438213ull}}, {{9720077362608869046ull, 1950758702919713308ull, 6715378344074358748ull, 4254222461545547767ull}}, {{15298420388485318962ull, 10442596226179596625ull, 11114640492687556073ull, 2658889038465967354ull}}, {{5287967430324484991ull, 17664931301151883686ull, 4669928579004669283ull, 3323611298082459193ull}}, {{15833331324760382046ull, 17469478108012466703ull, 10449096742183224508ull, 4154514122603073991ull}}, {{16813361105616320635ull, 1695051780653015881ull, 13448214491505597174ull, 2596571326626921244ull}}, {{7181643326738237082ull, 11342186762671045660ull, 16810268114381996467ull, 3245714158283651555ull}}, {{8977054158422796352ull, 9566047434911419171ull, 16401149124550107680ull, 4057142697854564444ull}}, {{3304815839800553768ull, 5978779646819636982ull, 1027346165989041492ull, 2535714186159102778ull}}, {{13354391836605468018ull, 7473474558524546227ull, 10507554744341077673ull, 3169642732698878472ull}}, {{12081303777329447118ull, 13953529216583070688ull, 13134443430426347091ull, 3962053415873598090ull}}, {{7550814860830904449ull, 6415112751150725228ull, 12820713162443854836ull, 2476283384920998806ull}}, {{9438518576038630561ull, 8018890938938406535ull, 6802519416200042737ull, 3095354231151248508ull}}, {{7186462201620900298ull, 14635299692100396073ull, 8503149270250053421ull, 3869192788939060635ull}}, {{16020753922081532446ull, 11452905316776441497ull, 3008625284692589436ull, 2418245493086912897ull}}, {{6190884347319751846ull, 14316131645970551872ull, 8372467624293124699ull, 3022806866358641121ull}}, {{7738605434149689807ull, 13283478539035801936ull, 15077270548793793778ull, 3778508582948301401ull}}, {{4836628396343556129ull, 12913860105324764114ull, 2505765065355039255ull, 2361567864342688376ull}}, {{15269157532284220970ull, 11530639113228567238ull, 3132206331693799069ull, 2951959830428360470ull}}, {{9863074878500500404ull, 578240836253545336ull, 13138629951472024645ull, 3689949788035450587ull}}, {{6164421799062812753ull, 2667243531872159787ull, 5905800710456321451ull, 2306218617522156617ull}}, {{3093841230401128037ull, 17169112470122363446ull, 11993936906497789717ull, 2882773271902695771ull}}, {{13090673574856185854ull, 7626332532370790595ull, 10380735114694849243ull, 3603466589878369714ull}}, {{11751655950142844413ull, 4921229647036100340ull, 3752546856513785746ull, 4504333237347962143ull}}, {{16568157005694053566ull, 7687454547824950616ull, 9262870812962197947ull, 2815208273342476339ull}}, {{2263452183408015342ull, 4997632166353800367ull, 6966902497775359530ull, 3519010341678095424ull}}, {{16664373284542182889ull, 15470412244797026266ull, 8708628122219199412ull, 4398762927097619280ull}}, {{15026919321266252210ull, 445635616143365608ull, 5442892576386999633ull, 2749226829436012050ull}}, {{336905077873263646ull, 5168730538606594915ull, 16026987757338525349ull, 3436533536795015062ull}}, {{14256189402623743270ull, 11072599191685631547ull, 10810362659818380878ull, 4295666920993768828ull}}, {{6604275367426145592ull, 2308688476376131813ull, 15979848699241263857ull, 2684791825621105517ull}}, {{12867030227710069894ull, 7497546613897552670ull, 6139752818769416109ull, 3355989782026381897ull}}, {{6860415747782811559ull, 13983619285799328742ull, 12286377041889158040ull, 4194987227532977371ull}}, {{18122817897646420936ull, 8739762053624580463ull, 5373142641967029823ull, 2621867017208110857ull}}, {{18041836353630638266ull, 6313016548603337675ull, 11328114320886175183ull, 3277333771510138571ull}}, {{17940609423610909929ull, 3279584667326784190ull, 9548456882680331075ull, 4096667214387673214ull}}, {{6601194871329430802ull, 18190641481575097783ull, 1356099533247819017ull, 2560417008992295759ull}}, {{3639807570734400598ull, 8903243796686708517ull, 15530182471841937484ull, 3200521261240369698ull}}, {{9161445481845388652ull, 11129054745858385646ull, 10189356052947646047ull, 4000651576550462123ull}}, {{1114217407725980003ull, 13873188243802572885ull, 4062504523878584827ull, 2500407235344038827ull}}, {{6004457778084862908ull, 12729799286325828202ull, 466444636420843130ull, 3125509044180048534ull}}, {{16728944259460854443ull, 6688877071052509444ull, 9806427832380829721ull, 3906886305225060667ull}}, {{1232218125308258219ull, 15709763215476288163ull, 3823174386024324623ull, 2441803940765662917ull}}, {{15375330711917486486ull, 15025518000917972299ull, 9390654000957793683ull, 3052254925957078646ull}}, {{14607477371469470203ull, 14170211482720077470ull, 2514945464342466296ull, 3815318657446348308ull}}, {{4517987338741030973ull, 8856382176700048419ull, 10795212952068817243ull, 2384574160903967692ull}}, {{1035798154998900812ull, 6458791702447672620ull, 13494016190086021554ull, 2980717701129959615ull}}, {{1294747693748626015ull, 17296861664914366583ull, 12255834219180139038ull, 3725897126412449519ull}}, {{7726746336233973116ull, 6198852522144091210ull, 14577425414628668755ull, 2328685704007780949ull}}, {{435060883437690586ull, 3136879634252726109ull, 4386723713003672232ull, 2910857130009726187ull}}, {{5155512122724501137ull, 3921099542815907636ull, 871718622827202386ull, 3638571412512157734ull}}, {{6444390153405626421ull, 14124746465374660353ull, 10313020315388778790ull, 4548214265640197167ull}}, {{15556958891946986273ull, 4216280522431774816ull, 13363166724759068600ull, 2842633916025123229ull}}, {{999454541224181226ull, 5270350653039718521ull, 2868900350666672038ull, 3553292395031404037ull}}, {{5861004194957614436ull, 15811310353154423959ull, 8197811456760727951ull, 4441615493789255046ull}}, {{10580656649489590879ull, 16799597998362596830ull, 511946142048067065ull, 2776009683618284404ull}}, {{4002448775007212790ull, 7164439442671082326ull, 639932677560083832ull, 3470012104522855505ull}}, {{14226433005613791795ull, 8955549303338852907ull, 5411601865377492694ull, 4337515130653569381ull}}, {{6585677619294925920ull, 985532296159395163ull, 5688094175074626886ull, 2710946956658480863ull}}, {{3620411005691269496ull, 10455287407054019762ull, 2498431700415895703ull, 3388683695823101079ull}}, {{13748885793968862678ull, 8457423240390136798ull, 16958097680802033341ull, 4235854619778876348ull}}, {{3981367602803151270ull, 7591732534457529451ull, 1375439013646495030ull, 2647409137361797718ull}}, {{365023485076551183ull, 266293631217136006ull, 10942670803912894596ull, 3309261421702247147ull}}, {{9679651393200464787ull, 332867039021420007ull, 9066652486463730341ull, 4136576777127808934ull}}, {{12967311148391372348ull, 2513884908602081456ull, 1054971785612443559ull, 2585360485704880584ull}}, {{16209138935489215435ull, 16977414191034765532ull, 1318714732015554448ull, 3231700607131100730ull}}, {{1814679595651967678ull, 2775023665083905300ull, 10871765451874218869ull, 4039625758913875912ull}}, {{10357546784137255607ull, 4040232799891134764ull, 6794853407421386793ull, 2524766099321172445ull}}, {{12946933480171569508ull, 9661977018291306359ull, 13105252777704121395ull, 3155957624151465556ull}}, {{11571980831787073981ull, 7465785254436745045ull, 16381565972130151744ull, 3944947030189331945ull}}, {{9538331029080615191ull, 4666115784022965653ull, 3320949704940262984ull, 2465591893868332466ull}}, {{16534599804778156892ull, 5832644730028707066ull, 13374559168030104538ull, 3081989867335415582ull}}, {{11444877719117920307ull, 16514177949390659641ull, 7494826923182854864ull, 3852487334169269478ull}}, {{235519546807618336ull, 10321361218369162276ull, 72580808561896386ull, 2407804583855793424ull}}, {{294399433509522920ull, 3678329486106677037ull, 90726010702370483ull, 3009755729819741780ull}}, {{4979685310314291554ull, 18432969912915510008ull, 113407513377963103ull, 3762194662274677225ull}}, {{3112303318946432221ull, 18438135223213275611ull, 11600094741929696699ull, 2351371663921673265ull}}, {{17725437203965203988ull, 18435983010589206609ull, 665060372129957162ull, 2939214579902091582ull}}, {{8321738449674341273ull, 13821606726381732454ull, 10054697502017222261ull, 3674018224877614477ull}}, {{1178801025238150784ull, 3441950352695001856ull, 17180057895948915731ull, 4592522781097018096ull}}, {{736750640773844240ull, 18292120034930233824ull, 10737536184968072331ull, 2870326738185636310ull}}, {{920938300967305300ull, 18253464025235404376ull, 4198548194355314606ull, 3587908422732045388ull}}, {{1151172876209131625ull, 13593457994689479662ull, 5248185242944143258ull, 4484885528415056735ull}}, {{14554541102912870978ull, 13107597265108312692ull, 10197644804481171392ull, 2803053455259410459ull}}, {{18193176378641088722ull, 16384496581385390865ull, 8135369987174076336ull, 3503816819074263074ull}}, {{8906412418019197190ull, 2033876653022186966ull, 945840447112819613ull, 4379771023842828843ull}}, {{954821742834610340ull, 3577015917352560806ull, 16732051343941369922ull, 2737356889901768026ull}}, {{10416899215398038733ull, 13694641933545476815ull, 11691692143071936594ull, 3421696112377210033ull}}, {{8409438000820160512ull, 7894930380077070211ull, 779557123557757031ull, 4277120140471512542ull}}, {{2950055741298906368ull, 11851860515189250738ull, 14322281257505761856ull, 2673200087794695338ull}}, {{12910941713478408768ull, 14814825643986563422ull, 8679479535027426512ull, 3341500109743369173ull}}, {{6915305104993235152ull, 71787981273652662ull, 15461035437211671045ull, 4176875137179211466ull}}, {{18157123745902935682ull, 2350710497509726865ull, 14274833166684682307ull, 2610546960737007166ull}}, {{8861346627096505891ull, 16773446177169322294ull, 8620169421501077075ull, 3263183700921258958ull}}, {{1853311247015856555ull, 16355121703034264964ull, 1551839740021570536ull, 4078979626151573698ull}}, {{10381691566239686155ull, 10221951064396415602ull, 5581585855940869489ull, 2549362266344733561ull}}, {{3753742420944831886ull, 17389124848922907407ull, 11588668338353474765ull, 3186702832930916951ull}}, {{80492007753651953ull, 7901348005871470547ull, 9874149404514455553ull, 3983378541163646189ull}}, {{16191208569341890135ull, 16467557549738138851ull, 8477186387035228672ull, 2489611588227278868ull}}, {{15627324693249974765ull, 2137702863463121948ull, 10596482983794035841ull, 3112014485284098585ull}}, {{1087411792852916840ull, 7283814597756290340ull, 17857289748169932705ull, 3890018106605123231ull}}, {{9903004407387848833ull, 16081599169666151222ull, 18078335120247289796ull, 2431261316628202019ull}}, {{3155383472380035233ull, 1655254888373137412ull, 17986232881881724342ull, 3039076645785252524ull}}, {{3944229340475044041ull, 11292440647321197573ull, 4036047028642603811ull, 3798845807231565656ull}}, {{4770986347010596478ull, 4751932395362054531ull, 2522529392901627382ull, 2374278629519728535ull}}, {{1352046915335857693ull, 15163287531057343972ull, 16988219796409197939ull, 2967848286899660668ull}}, {{1690058644169822117ull, 14342423395394292061ull, 2788530671801945808ull, 3709810358624575836ull}}, {{3362129661819832775ull, 8964014622121432538ull, 10966203706730991938ull, 2318631474140359897ull}}, {{13426034114129566777ull, 1981646240797014864ull, 18319440651841127827ull, 2898289342675449871ull}}, {{16782542642661958471ull, 16312115856278432292ull, 18287614796374021879ull, 3622861678344312339ull}}, {{2531434229617896472ull, 15778458801920652462ull, 18247832477040139445ull, 4528577097930390424ull}}, {{15417204448793349007ull, 12167379760414101740ull, 11404895298150087153ull, 2830360686206494015ull}}, {{824761487282134643ull, 1374166645235463464ull, 9644433104260221038ull, 3537950857758117519ull}}, {{1030951859102668304ull, 10941080343399105138ull, 7443855361897888393ull, 4422438572197646899ull}}, {{5256030930366555594ull, 18367390260692910471ull, 2346566591972486293ull, 2764024107623529312ull}}, {{1958352644530806588ull, 9124179770583974377ull, 2933208239965607867ull, 3455030134529411640ull}}, {{7059626824090896139ull, 6793538694802580067ull, 3666510299957009834ull, 4318787668161764550ull}}, {{2106423755843116135ull, 8857647702679000446ull, 16126626992755294858ull, 2699242292601102843ull}}, {{11856401731658670977ull, 1848687591493974749ull, 15546597722516730669ull, 3374052865751378554ull}}, {{985444109291175009ull, 6922545507794856341ull, 10209875116291137528ull, 4217566082189223193ull}}, {{2921745577520678333ull, 4326590942371785213ull, 17910386993750430715ull, 2635978801368264495ull}}, {{8263867990328235820ull, 796552659537343612ull, 17776297723760650490ull, 3294973501710330619ull}}, {{10329834987910294775ull, 10219062861276455323ull, 17608686136273425208ull, 4118716877137913274ull}}, {{4150303858230240282ull, 6386914288297784577ull, 15617114853598278659ull, 2574198048211195796ull}}, {{9799565841215188257ull, 3371956841944842817ull, 1074649493288296708ull, 3217747560263994746ull}}, {{16861143319946373225ull, 4214946052431053521ull, 10566683903465146693ull, 4022184450329993432ull}}, {{3620685547325401410ull, 4940184291983102403ull, 6604177439665716683ull, 2513865281456245895ull}}, {{18360914989438915474ull, 1563544346551490099ull, 3643535781154757950ull, 3142331601820307369ull}}, {{18339457718371256439ull, 11177802470044138432ull, 9166105744870835341ull, 3927914502275384211ull}}, {{11462161073982035274ull, 9291969552991280472ull, 3422973081330578136ull, 2454946563922115132ull}}, {{14327701342477544093ull, 11614961941239100590ull, 4278716351663222670ull, 3068683204902643915ull}}, {{8686254641242154308ull, 5295330389694099930ull, 736709421151640434ull, 3835854006128304894ull}}, {{10040595169203734347ull, 7921267511986200360ull, 14295501443501938983ull, 2397408753830190558ull}}, {{12550743961504667933ull, 5289898371555362546ull, 8646004767522647921ull, 2996760942287738198ull}}, {{6465057915026059108ull, 11224058982871591087ull, 1584133922548534093ull, 3745951177859672748ull}}, {{10958190224532368799ull, 9320879873508438381ull, 10213455738447609616ull, 2341219486162295467ull}}, {{18309423799092848902ull, 11651099841885547976ull, 8155133654632124116ull, 2926524357702869334ull}}, {{4440035675156509512ull, 14563874802356934971ull, 970545031435379337ull, 3658155447128586668ull}}, {{938358575518248986ull, 4369785447664005002ull, 1213181289294224172ull, 4572694308910733335ull}}, {{5198160128126293520ull, 11954487941644778934ull, 7675767333449971963ull, 2857933943069208334ull}}, {{15721072197012642708ull, 10331423908628585763ull, 371337129957689146ull, 3572417428836510418ull}}, {{15039654227838415481ull, 3690907848930956396ull, 9687543449301887241ull, 4465521786045638022ull}}, {{176411855544233868ull, 13836032451650317508ull, 1443028637386291621ull, 2790951116278523764ull}}, {{220514819430292335ull, 3459982509280733173ull, 1803785796732864527ull, 3488688895348154705ull}}, {{4887329542715253322ull, 18160036191883080178ull, 6866418264343468562ull, 4360861119185193381ull}}, {{7666266982624421231ull, 15961708638354313015ull, 6597354424428361803ull, 2725538199490745863ull}}, {{4971147709853138634ull, 15340449779515503365ull, 3635007012108064350ull, 3406922749363432329ull}}, {{10825620655743811197ull, 9952190187539603398ull, 9155444783562468342ull, 4258653436704290411ull}}, {{2154326891412494094ull, 1608432848784864220ull, 3416309980512848762ull, 2661658397940181507ull}}, {{2692908614265617617ull, 11233913097835856083ull, 18105445530923224664ull, 3327072997425226883ull}}, {{17201193823114185734ull, 14042391372294820103ull, 18020120895226642926ull, 4158841246781533604ull}}, {{17668275167087447940ull, 4164808589256874660ull, 2039203522661876021ull, 2599275779238458503ull}}, {{3638599885149758309ull, 9817696754998481230ull, 16384062458609508738ull, 3249094724048073128ull}}, {{13771621893291973694ull, 3048748906893325729ull, 2033333999552334307ull, 4061368405060091411ull}}, {{1689734655666401703ull, 18046369131304186245ull, 17411734814216066605ull, 2538355253162557131ull}}, {{6723854338010390032ull, 8722903358848069094ull, 17152982499342695353ull, 3172944066453196414ull}}, {{17628189959367763348ull, 15515315216987474271ull, 12217856087323593383ull, 3966180083066495518ull}}, {{17935147752245933949ull, 16614601038258253275ull, 3024474036149857960ull, 2478862551916559699ull}}, {{17807248671880029532ull, 2321507224113264978ull, 17615650600469486163ull, 3098578189895699623ull}}, {{13035688802995261107ull, 16736942085423744935ull, 17407877232159469799ull, 3873222737369624529ull}}, {{15064834529513120048ull, 17378117831030922440ull, 3962394242458586768ull, 2420764210856015331ull}}, {{384299088181848444ull, 3275903215079101435ull, 341306784645845557ull, 3025955263570019164ull}}, {{14315431915509474267ull, 8706565037276264697ull, 426633480807306946ull, 3782444079462523955ull}}, {{2029615919552339561ull, 10053289166725053340ull, 16407546990000424505ull, 2364027549664077471ull}}, {{2537019899440424451ull, 17178297476833704579ull, 15897747719073142727ull, 2955034437080096839ull}}, {{17006332929582694275ull, 16861185827614742819ull, 15260498630414040505ull, 3693793046350121049ull}}, {{8323115071775489970ull, 3620712114618132406ull, 2620282616367693460ull, 2308620653968825656ull}}, {{1180521802864586655ull, 4525890143272665508ull, 3275353270459616825ull, 2885775817461032070ull}}, {{1475652253580733318ull, 10269048697518219789ull, 13317563624929296839ull, 3607219771826290087ull}}, {{6456251335403304552ull, 8224624853470386832ull, 12035268512734233145ull, 4509024714782862609ull}}, {{4035157084627065345ull, 16669605579487461530ull, 604513792817813859ull, 2818140446739289131ull}}, {{14267318392638607489ull, 16225320955931939008ull, 14590700296304431036ull, 3522675558424111413ull}}, {{17834147990798259361ull, 1834907121205372144ull, 4403317315098375084ull, 4403344448030139267ull}}, {{11146342494248912101ull, 10370188987608133398ull, 446230312722790475ull, 2752090280018837042ull}}, {{4709556080956364318ull, 8351050216082778844ull, 9781159927758263902ull, 3440112850023546302ull}}, {{5886945101195455398ull, 1215440733248697747ull, 3003077872843054070ull, 4300141062529432878ull}}, {{1373497679033465672ull, 14594708513562599804ull, 15711981725809072505ull, 2687588164080895548ull}}, {{1716872098791832089ull, 4408327586671086043ull, 1193233083551789016ull, 3359485205101119436ull}}, {{15981148178771953824ull, 5510409483338857553ull, 1491541354439736270ull, 4199356506376399295ull}}, {{3070688584091389284ull, 17279063982368949683ull, 7849742374165917024ull, 2624597816485249559ull}}, {{17673418785396400317ull, 3152085904251635487ull, 5200491949280008377ull, 3280747270606561949ull}}, {{17480087463318112492ull, 8551793398741932263ull, 11112300955027398375ull, 4100934088258202436ull}}, {{17842583692214902164ull, 12262399901854789520ull, 16168560133746899792ull, 2563083805161376522ull}}, {{3856485541559076088ull, 15327999877318486901ull, 10987328130328848932ull, 3203854756451720653ull}}, {{9432292945376233014ull, 713255772938557010ull, 18345846181338449070ull, 4004818445564650816ull}}, {{10506869109287533538ull, 14280842913368761843ull, 11466153863336530668ull, 2503011528477906760ull}}, {{8521900368182029019ull, 17851053641710952304ull, 14332692329170663335ull, 3128764410597383450ull}}, {{10652375460227536273ull, 17702131033711302476ull, 8692493374608553361ull, 3910955513246729313ull}}, {{15881106699496985979ull, 4146302868428482191ull, 16962023405198815611ull, 2444347195779205820ull}}, {{15239697355943844570ull, 571192567108214835ull, 2755785182788967898ull, 3055433994724007276ull}}, {{14437935676502417808ull, 9937362745740044352ull, 3444731478486209872ull, 3819292493405009095ull}}, {{9023709797814011130ull, 6210851716087527720ull, 9070486201694963026ull, 2387057808378130684ull}}, {{11279637247267513912ull, 16986936681964185458ull, 11338107752118703782ull, 2983822260472663355ull}}, {{4876174522229616582ull, 12010298815600456015ull, 9560948671720991824ull, 3729777825590829194ull}}, {{9965138104034592220ull, 7506436759750285009ull, 10587278938253007794ull, 2331111140994268246ull}}, {{17068108648470628179ull, 159673912833080453ull, 4010726635961483935ull, 2913888926242835308ull}}, {{7500077755306121512ull, 14034650446323514279ull, 5013408294951854918ull, 3642361157803544135ull}}, {{4763411175705263986ull, 8319941021049617041ull, 1655074350262430744ull, 4552951447254430169ull}}, {{14506347030884259751ull, 5199963138156010650ull, 12563636514982488975ull, 2845594654534018855ull}}, {{8909561751750548881ull, 1888267904267625409ull, 11092859625300723315ull, 3556993318167523569ull}}, {{15748638208115574005ull, 16195392935616695473ull, 31016476343740431ull, 4446241647709404462ull}}, {{2925369852431151897ull, 17039649612401516527ull, 13854443352997001481ull, 2778901029818377788ull}}, {{17491770370821103584ull, 7464503960219731946ull, 17318054191246251852ull, 3473626287272972235ull}}, {{12641340926671603671ull, 9330629950274664933ull, 17035881720630426911ull, 4342032859091215294ull}}, {{10206681088383446247ull, 12749172746562747439ull, 6035740056966628915ull, 2713770536932009559ull}}, {{8146665342051919904ull, 11324779914776046395ull, 2932989052780898240ull, 3392213171165011949ull}}, {{5571645659137511976ull, 14155974893470057994ull, 8277922334403510704ull, 4240266463956264936ull}}, {{8093964555388332889ull, 8847484308418786246ull, 5173701459002194190ull, 2650166539972665585ull}}, {{894083657380640304ull, 1835983348668707000ull, 11078812842180130642ull, 3312708174965831981ull}}, {{1117604571725800379ull, 11518351222690659558ull, 13457997442999590ull, 4140885218707289977ull}}, {{14533560912610788949ull, 2587283495754274319ull, 11537626294470344504ull, 2588053261692056235ull}}, {{13555265122336098282ull, 3234104369692842899ull, 9810346849660542726ull, 3235066577115070294ull}}, {{12332395384492734949ull, 13266002498970829432ull, 3039561525220902599ull, 4043833221393837868ull}}, {{7707747115307959343ull, 15208780589497850251ull, 11123097990117839932ull, 2527395763371148667ull}}, {{5022997875707561275ull, 564231663162761198ull, 9292186469219912012ull, 3159244704213935834ull}}, {{15502119381489227402ull, 705289578953451497ull, 2391861049670114207ull, 3949055880267419793ull}}, {{2771295585789685270ull, 7358335014486989042ull, 13024128202112291139ull, 2468159925167137370ull}}, {{12687491519091882396ull, 4586232749681348398ull, 7056788215785588116ull, 3085199906458921713ull}}, {{6635992362010077186ull, 5732790937101685498ull, 13432671288159373049ull, 3856499883073652141ull}}, {{8759181244683686146ull, 15112209381757023196ull, 10701262564313302107ull, 2410312426921032588ull}}, {{10948976555854607682ull, 14278575708768891091ull, 13376578205391627634ull, 3012890533651290735ull}}, {{9074534676390871698ull, 8624847599106338056ull, 12109036738312146639ull, 3766113167064113419ull}}, {{5671584172744294812ull, 12308058777082543141ull, 5262304952231397697ull, 2353820729415070887ull}}, {{11701166234357756418ull, 1550015416071015214ull, 1966195171861859218ull, 2942275911768838609ull}}, {{5403085756092419715ull, 11160891306943544826ull, 7069429983254711926ull, 3677844889711048261ull}}, {{15977229231970300451ull, 4727742096824655224ull, 13448473497495777812ull, 4597306112138810326ull}}, {{9985768269981437782ull, 12178210847370185323ull, 3793609917507473228ull, 2873316320086756454ull}}, {{7870524319049409324ull, 15222763559212731654ull, 13965384433739117343ull, 3591645400108445567ull}}, {{614783361956985847ull, 14416768430588526664ull, 12845044523746508775ull, 4489556750135556959ull}}, {{384239601223116154ull, 15928009296758911021ull, 14945681854982649840ull, 2805972968834723099ull}}, {{5091985519956283097ull, 1463267547239087160ull, 14070416300300924397ull, 3507466211043403874ull}}, {{6364981899945353871ull, 6440770452476246854ull, 8364648338521379688ull, 4384332763804254843ull}}, {{17813171742748009882ull, 4025481532797654283ull, 2922062202362168353ull, 2740207977377659277ull}}, {{17654778660007624448ull, 9643537934424455758ull, 8264263771380098345ull, 3425259971722074096ull}}, {{12845101288154754752ull, 16666108436457957602ull, 10330329714225122931ull, 4281574964652592620ull}}, {{12639874323524109624ull, 8110474763572529549ull, 15679828108245477640ull, 2675984352907870387ull}}, {{1964784849122973318ull, 10138093454465661937ull, 14988099116879459146ull, 3344980441134837984ull}}, {{7067667079831104551ull, 3449244781227301613ull, 288379822389772317ull, 4181225551418547481ull}}, {{6723134934108134297ull, 4461620997480757460ull, 11709452435062077458ull, 2613265969636592175ull}}, {{8403918667635167871ull, 14800398283705722633ull, 10025129525400208918ull, 3266582462045740219ull}}, {{15116584352971347742ull, 9277125817777377483ull, 7919725888322873244ull, 4083228077557175274ull}}, {{7142022211393398387ull, 15021575672965636735ull, 9561514698629183681ull, 2552017548473234546ull}}, {{4315841745814360080ull, 4941911535924882207ull, 2728521336431703794ull, 3190021935591543183ull}}, {{783116163840562195ull, 15400761456760878567ull, 17245709725821793454ull, 3987527419489428978ull}}, {{7406976630041433228ull, 5013789892048161200ull, 15390254597066008813ull, 2492204637180893111ull}}, {{9258720787551791535ull, 10878923383487589404ull, 14626132227905123112ull, 3115255796476116389ull}}, {{11573400984439739419ull, 13598654229359486755ull, 4447607229599240178ull, 3894069745595145487ull}}, {{4927532606061143185ull, 13110844911777067126ull, 9697283546140606967ull, 2433793590996965929ull}}, {{15382787794431204789ull, 11776870121293946003ull, 16733290451103146613ull, 3042241988746207411ull}}, {{14616798724611618082ull, 886029596335268792ull, 16304927045451545363ull, 3802802485932759264ull}}, {{9135499202882261302ull, 16694669562205400659ull, 10190579403407215851ull, 2376751553707974540ull}}, {{6807687985175438723ull, 16256650934329362920ull, 12738224254259019814ull, 2970939442134968175ull}}, {{8509609981469298404ull, 11097441631056927842ull, 11311094299396386864ull, 3713674302668710219ull}}, {{9930192256845699406ull, 6935901019410579901ull, 4763590927909047838ull, 2321046439167943887ull}}, {{17024426339484512162ull, 17893248311118000684ull, 1342802641458921893ull, 2901308048959929859ull}}, {{2833788850646088586ull, 8531502333615337144ull, 15513561357105816079ull, 3626635061199912323ull}}, {{3542236063307610733ull, 6052691898591783526ull, 14780265677954882195ull, 4533293826499890404ull}}, {{16048955594849420420ull, 1477089427406170751ull, 14294011867025564ull, 2833308641562431503ull}}, {{15449508475134387621ull, 1846361784257713439ull, 13852925570115945667ull, 3541635801953039378ull}}, {{14700199575490596622ull, 16143010285604305511ull, 8092784925790156275ull, 4427044752441299223ull}}, {{16105153762322704745ull, 7783538419288996992ull, 11975519606259929528ull, 2766902970275812014ull}}, {{1684698129193829315ull, 9729423024111246241ull, 5746027470970136102ull, 3458628712844765018ull}}, {{6717558679919674548ull, 2938406743284281993ull, 16405906375567445936ull, 4323285891055956272ull}}, {{15727689221018266353ull, 1836504214552676245ull, 10253691484729653710ull, 2702053681909972670ull}}, {{5824553470990669229ull, 11519002305045621115ull, 3593742319057291329ull, 3377567102387465838ull}}, {{2669005820310948632ull, 563694826024862682ull, 13715549935676389970ull, 4221958877984332297ull}}, {{6279814656121730799ull, 4963995284692927080ull, 1654689682156661875ull, 2638724298740207686ull}}, {{7849768320152163499ull, 1593308087438770946ull, 11291734139550603152ull, 3298405373425259607ull}}, {{588838363335428565ull, 1991635109298463683ull, 9502981656010866036ull, 4123006716781574509ull}}, {{16508925041580500517ull, 10468143980166315609ull, 8245206544220485224ull, 2576879197988484068ull}}, {{6801098246693461935ull, 13085179975207894512ull, 10306508180275606530ull, 3221098997485605085ull}}, {{8501372808366827418ull, 7133102932155092332ull, 17494821243771896067ull, 4026373746857006356ull}}, {{14536730042084042945ull, 2152346323383238755ull, 1710891240502659234ull, 2516483591785628973ull}}, {{13559226534177665777ull, 11913804941083824252ull, 6750300069055711946ull, 3145604489732036216ull}}, {{16949033167722082221ull, 5668884139500004507ull, 8437875086319639933ull, 3932005612165045270ull}}, {{8287302720612607436ull, 5848895596401196769ull, 661985910522387054ull, 2457503507603153294ull}}, {{14970814419193147199ull, 16534491532356271769ull, 10050854425007759625ull, 3071879384503941617ull}}, {{4878459968709270287ull, 6833056360163176000ull, 17175254049687087436ull, 3839849230629927021ull}}, {{3049037480443293929ull, 13494032261956760808ull, 13040376790268123599ull, 2399905769143704388ull}}, {{3811296850554117411ull, 12255854309018563106ull, 16300470987835154499ull, 2999882211429630485ull}}, {{13987493100047422572ull, 10708131867845815978ull, 6540530679511779412ull, 3749852764287038107ull}}, {{13353869205957027012ull, 15915954454258410794ull, 1781988665481168180ull, 2343657977679398817ull}}, {{7468964470591507957ull, 1448198994113461877ull, 6839171850278848130ull, 2929572472099248521ull}}, {{13947891606666772850ull, 11033620779496603154ull, 13160650831275948066ull, 3661965590124060651ull}}, {{8211492471478690254ull, 4568653937515978135ull, 11839127520667547179ull, 4577456987655075814ull}}, {{12049711822315263265ull, 549565701733792382ull, 2787768681989829083ull, 2860910617284422384ull}}, {{5838767741039303273ull, 14522015182449404190ull, 3484710852487286353ull, 3576138271605527980ull}}, {{16521831713153904899ull, 4317460922779591525ull, 4355888565609107942ull, 4470172839506909975ull}}, {{12631987829934884514ull, 16533471132019408415ull, 9639959381146774319ull, 2793858024691818734ull}}, {{11178298768991217739ull, 16055152896596872615ull, 2826577189578692091ull, 3492322530864773418ull}}, {{9361187442811634269ull, 15457255102318702865ull, 12756593523828140922ull, 4365403163580966772ull}}, {{17379957197825741178ull, 14272470457376577194ull, 17196242989247363884ull, 2728376977238104232ull}}, {{12501574460427400665ull, 17840588071720721493ull, 3048559662849653239ull, 3410471221547630291ull}}, {{1791910020252087119ull, 17689049071223513963ull, 17645757633844230261ull, 4263089026934537863ull}}, {{17260844827153412114ull, 13361498678728390178ull, 17946127548793725769ull, 2664430641834086164ull}}, {{12352683997086989334ull, 2866815293128324011ull, 3985915362282605596ull, 3330538302292607706ull}}, {{10829168977931348763ull, 3583519116410405014ull, 14205766239708032803ull, 4163172877865759632ull}}, {{2156544592779705073ull, 18380600512252360798ull, 8878603899817520501ull, 2601983048666099770ull}}, {{11919052777829407149ull, 9140692585033287285ull, 1874882837917124819ull, 3252478810832624713ull}}, {{1063757917004595224ull, 6814179712864221203ull, 6955289565823793928ull, 4065598513540780891ull}}, {{16805749762623729679ull, 4258862320540138251ull, 2041212969426177253ull, 2540999070962988057ull}}, {{16395501184852274195ull, 9935263919102560718ull, 7163202230210109470ull, 3176248838703735071ull}}, {{11271004444210566936ull, 3195707862023425090ull, 4342316769335248934ull, 3970311048379668839ull}}, {{11656063796058992239ull, 15832375469046804393ull, 9631477008475612439ull, 2481444405237293024ull}}, {{735021689791576587ull, 15178783317881117588ull, 12039346260594515549ull, 3101805506546616280ull}}, {{918777112239470733ull, 5138421092069233273ull, 15049182825743144437ull, 3877256883183270350ull}}, {{12103450741218138969ull, 5517356191756964747ull, 4794053247662077369ull, 2423285551989543969ull}}, {{10517627408095285807ull, 11508381258123593838ull, 10604252578004984615ull, 3029106939986929961ull}}, {{3923662223264331450ull, 9773790554227104394ull, 17867001740933618673ull, 3786383674983662451ull}}, {{7063974907967595060ull, 17637834142460410006ull, 8861033078869817718ull, 2366489796864789032ull}}, {{18053340671814269633ull, 12823920641220736699ull, 11076291348587272148ull, 2958112246080986290ull}}, {{17954989821340449138ull, 16029900801525920874ull, 4621992148879314377ull, 3697640307601232863ull}}, {{15833554656765168615ull, 3101158973312618690ull, 9806274120690653342ull, 2311025192250770539ull}}, {{10568571284101684961ull, 13099820753495549171ull, 7646156632435928773ull, 2888781490313463174ull}}, {{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull, 3610976862891828968ull}}, {{10748785108374647871ull, 17009705413516254652ull, 417904692112668948ull, 4513721078614786210ull}}, {{15941362729588930728ull, 1407693846592883349ull, 4872876450997805997ull, 2821075674134241381ull}}, {{6091645356703999697ull, 6371303326668492091ull, 10702781582174645400ull, 3526344592667801726ull}}, {{3002870677452611718ull, 7964129158335615114ull, 4155104940863530942ull, 4407930740834752158ull}}, {{6488480191835270228ull, 365894705532371542ull, 16431998643321870551ull, 2754956713021720098ull}}, {{17333972276648863593ull, 14292426437197628139ull, 11316626267297562380ull, 3443695891277150123ull}}, {{17055779327383691587ull, 17865533046497035174ull, 9534096815694565071ull, 4304619864096437654ull}}, {{6048176061187419338ull, 18083487181701728840ull, 1347124491381715265ull, 2690387415060273534ull}}, {{7560220076484274172ull, 8769300921844997338ull, 10907277651081919890ull, 3362984268825341917ull}}, {{226903058750566907ull, 1738254115451470865ull, 18245783082279787767ull, 4203730336031677396ull}}, {{11671029457787574077ull, 8003937849798251146ull, 2180242389570091546ull, 2627331460019798373ull}}, {{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull, 3284164325024747966ull}}, {{11318454500152002639ull, 5588623862668685560ull, 18394608293592278729ull, 4105205406280934957ull}}, {{7074034062595001650ull, 15022104960236398235ull, 13802473192708868157ull, 2565753378925584348ull}}, {{4230856559816364158ull, 4942573145013334082ull, 17253091490886085197ull, 3207191723656980435ull}}, {{14511942736625231005ull, 10789902449694055506ull, 16954678345180218592ull, 4008989654571225544ull}}, {{13681650228818157283ull, 6743689031058784691ull, 10596673965737636620ull, 2505618534107015965ull}}, {{12490376767595308699ull, 8429611288823480864ull, 17857528475599433679ull, 3132023167633769956ull}}, {{15612970959494135874ull, 5925328092601963176ull, 3875166520789740483ull, 3915028959542212446ull}}, {{9758106849683834921ull, 1397487048662533033ull, 16257037130775751514ull, 2446893099713882778ull}}, {{16809319580532181555ull, 10970230847682942099ull, 11097924376614913584ull, 3058616374642353473ull}}, {{16399963457237839040ull, 13712788559603677624ull, 37347415486478268ull, 3823270468302941842ull}}, {{10249977160773649400ull, 17793864886607074323ull, 4635028153106436821ull, 2389544042689338651ull}}, {{8200785432539673846ull, 8407273052976679192ull, 1182099172955658123ull, 2986930053361673314ull}}, {{10250981790674592308ull, 5897405297793461086ull, 10700996003049348462ull, 3733662566702091642ull}}, {{1795177600744232288ull, 17520936366403076891ull, 11299808520333230692ull, 2333539104188807276ull}}, {{16079030056212454072ull, 3454426384294294497ull, 14124760650416538366ull, 2916923880236009095ull}}, {{6263729514983403878ull, 13541405017222643930ull, 13044264794593285053ull, 3646154850295011369ull}}, {{17053033930584030656ull, 3091698216246141200ull, 2470272937959442605ull, 4557693562868764212ull}}, {{10658146206615019160ull, 4238154394367532202ull, 10767292623079427436ull, 2848558476792977632ull}}, {{4099310721413998142ull, 5297692992959415253ull, 13459115778849284295ull, 3560698095991222040ull}}, {{9735824420194885581ull, 2010430222771881162ull, 16823894723561605369ull, 4450872619989027550ull}}, {{10696576281049191393ull, 12785733935300895486ull, 5903248183798615451ull, 2781795387493142219ull}}, {{4147348314456713433ull, 11370481400698731454ull, 2767374211320881410ull, 3477244234366427774ull}}, {{14407557429925667599ull, 4989729714018638509ull, 12682589801005877571ull, 4346555292958034717ull}}, {{11310566402917236201ull, 812738062047955116ull, 10232461634842367434ull, 2716597058098771698ull}}, {{14138208003646545252ull, 10239294614414719703ull, 3567205006698183484ull, 3395746322623464623ull}}, {{13061073986130793660ull, 12799118268018399629ull, 18294064313654893067ull, 4244682903279330778ull}}, {{10469014250545439990ull, 5693605908297805816ull, 16045476214461696071ull, 2652926814549581736ull}}, {{13086267813181799987ull, 2505321366944869366ull, 1610101194367568473ull, 3316158518186977171ull}}, {{7134462729622474176ull, 7743337727108474612ull, 15847684548241624303ull, 4145198147733721463ull}}, {{13682411242868822168ull, 11757115107083878488ull, 16822331870292097045ull, 2590748842333575914ull}}, {{17103014053586027710ull, 861335828572684398ull, 11804542801010345499ull, 3238436052916969893ull}}, {{12155395530127758829ull, 14911727840998019210ull, 920620445980768161ull, 4048045066146212367ull}}, {{12208808224757237173ull, 2402300872982680150ull, 7492916806379061957ull, 2530028166341382729ull}}, {{6037638244091770658ull, 7614562109655738092ull, 13977832026401215350ull, 3162535207926728411ull}}, {{7547047805114713322ull, 294830600214896807ull, 12860604014574131284ull, 3953169009908410514ull}}, {{11634433905837777682ull, 9407641161989086312ull, 12649563527536219956ull, 2470730631192756571ull}}, {{14543042382297222103ull, 11759551452486357890ull, 11200268390992887041ull, 3088413288990945714ull}}, {{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull, 3860516611238682143ull}}, {{3291301328921775936ull, 5151924306131002686ull, 9903131185070039977ull, 2412822882024176339ull}}, {{13337498698006995728ull, 11051591401091141261ull, 7767227962910162067ull, 3016028602530220424ull}}, {{2836815317226580948ull, 9202803232936538673ull, 9709034953637702584ull, 3770035753162775530ull}}, {{13302224619335082852ull, 5751752020585336670ull, 10679832864450952019ull, 2356272345726734706ull}}, {{7404408737314077757ull, 2578004007304282934ull, 4126419043708914216ull, 2945340432158418383ull}}, {{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull, 3681675540198022979ull}}, {{40173605984776736ull, 13251503298267717893ull, 14517980288043107294ull, 4602094425247528723ull}}, {{2330951512954179412ull, 3670503542989935779ull, 6767894670813248107ull, 2876309015779705452ull}}, {{16748747446474887977ull, 18423187484019583435ull, 8459868338516560133ull, 3595386269724631815ull}}, {{16324248289666222067ull, 9193926299742315582ull, 5963149404718312263ull, 4494232837155789769ull}}, {{5590969162614000888ull, 12663732964980029095ull, 15256183424017414924ull, 2808895523222368605ull}}, {{2377025434840113206ull, 15829666206225036369ull, 5235171224739604943ull, 3511119404027960757ull}}, {{7582967811977529411ull, 15175396739353907557ull, 11155650049351894083ull, 4388899255034950946ull}}, {{7045197891699649834ull, 7178779952882498271ull, 11583967299272321706ull, 2743062034396844341ull}}, {{4194811346197174389ull, 18196846977957898647ull, 644901068808238420ull, 3428827542996055427ull}}, {{631828164319080082ull, 4299314648737821693ull, 14641184391292461738ull, 4286034428745069283ull}}, {{2700735611913119003ull, 7298757673888526462ull, 6844897235344094634ull, 2678771517965668302ull}}, {{12599291551746174562ull, 18346819129215433885ull, 17779493581034894100ull, 3348464397457085377ull}}, {{1914056384400554490ull, 4486779837809740741ull, 8389308921011453914ull, 4185580496821356722ull}}, {{3502128249464040509ull, 7415923417058475867ull, 9855004094059546600ull, 2615987810513347951ull}}, {{18212718367112214348ull, 9269904271323094833ull, 7707069099147045346ull, 3269984763141684939ull}}, {{8930839903608104222ull, 2364008302299092734ull, 5022150355506418779ull, 4087480953927106174ull}}, {{970088921327677235ull, 17618406253432790623ull, 16973902027473675448ull, 2554675596204441358ull}}, {{15047669206941760256ull, 3576263743081436662ull, 11994005497487318503ull, 3193344495255551698ull}}, {{9586214471822424512ull, 18305387734133959540ull, 5769134835004372320ull, 3991680619069439623ull}}, {{15214756081743791128ull, 11440867333833724712ull, 10523238299518814556ull, 2494800386918399764ull}}, {{571701028470187294ull, 14301084167292155891ull, 13154047874398518195ull, 3118500483647999705ull}}, {{14549684340869897829ull, 13264669190687806959ull, 2607501787715984032ull, 3898125604559999632ull}}, {{16011081740684767999ull, 8290418244179879349ull, 1629688617322490020ull, 2436328502849999770ull}}, {{6178794120573796287ull, 10363022805224849187ull, 11260482808507888333ull, 3045410628562499712ull}}, {{3111806632289857455ull, 17565464524958449388ull, 14075603510634860416ull, 3806763285703124640ull}}, {{11168251182035936718ull, 10978415328099030867ull, 8797252194146787760ull, 2379227053564452900ull}}, {{9348627959117532993ull, 13723019160123788584ull, 10996565242683484700ull, 2974033816955566125ull}}, {{11685784948896916241ull, 17153773950154735730ull, 18357392571781743779ull, 3717542271194457656ull}}, {{11915301611487960555ull, 8415265709633015879ull, 11473370357363589862ull, 2323463919496536035ull}}, {{10282440995932562789ull, 1295710100186494041ull, 9730026928277099424ull, 2904329899370670044ull}}, {{17464737263343091390ull, 1619637625233117551ull, 12162533660346374280ull, 3630412374213337555ull}}, {{17219235560751476334ull, 2024547031541396939ull, 10591481057005579946ull, 4538015467766671944ull}}, {{8456179216255978757ull, 5877027913140760991ull, 6619675660628487466ull, 2836259667354169965ull}}, {{5958538001892585542ull, 16569656928280727047ull, 12886280594212997236ull, 3545324584192712456ull}}, {{2836486483938344023ull, 2265327086641357193ull, 16107850742766246546ull, 4431655730240890570ull}}, {{13302019098529934775ull, 6027515447578236149ull, 14679092732656291995ull, 2769784831400556606ull}}, {{2792465817880254756ull, 2922708291045407283ull, 9125493878965589186ull, 3462231039250695758ull}}, {{17325640327632482157ull, 12876757400661534911ull, 2183495311852210674ull, 4327788799063369698ull}}, {{17746054232411383205ull, 12659659393840847223ull, 5976370588335019575ull, 2704867999414606061ull}}, {{17570881772086841102ull, 11212888223873671125ull, 12082149253846162373ull, 3381084999268257576ull}}, {{8128544159826387665ull, 181052224559925195ull, 15102686567307702967ull, 4226356249085321970ull}}, {{2774497090677798339ull, 7030686667991035103ull, 14050865122994702258ull, 2641472655678326231ull}}, {{17303179418629411635ull, 18011730371843569686ull, 12951895385315989918ull, 3301840819597907789ull}}, {{12405602236431988736ull, 13291290927949686300ull, 2354811176362823686ull, 4127301024497384737ull}}, {{16976873434624768768ull, 3695370811541166033ull, 13000972031295234564ull, 2579563140310865460ull}}, {{7386033737998797248ull, 4619213514426457542ull, 16251215039119043205ull, 3224453925388581825ull}}, {{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull, 4030567406735727282ull}}, {{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull, 2519104629209829551ull}}, {{13842222223753820550ull, 2349222876544249363ull, 6214609585557347206ull, 3148880786512286939ull}}, {{12691091761264887783ull, 12159900632535087512ull, 3156575963519296103ull, 3936100983140358674ull}}, {{7931932350790554864ull, 14517466922975511551ull, 6584545995626947968ull, 2460063114462724171ull}}, {{5303229420060805676ull, 18146833653719389439ull, 3618996476106297056ull, 3075078893078405214ull}}, {{2017350756648619191ull, 4236797993439685183ull, 13747117631987647129ull, 3843848616348006517ull}}, {{8178373250546468851ull, 14177213791968272999ull, 10897791529205973407ull, 2402405385217504073ull}}, {{5611280544755698159ull, 13109831221532953345ull, 18233925429934854663ull, 3003006731521880091ull}}, {{11625786699372010603ull, 11775603008488803777ull, 18180720768991180425ull, 3753758414402350114ull}}, {{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull, 2346099009001468821ull}}, {{5047420592760418868ull, 9776150602685301439ull, 6133237568526430875ull, 2932623761251836027ull}}, {{1697589722523135681ull, 7608502234929238895ull, 3054860942230650690ull, 3665779701564795034ull}}, {{15957045208436083313ull, 287255756806772810ull, 13041948214643089171ull, 4582224626955993792ull}}, {{14584839273699939975ull, 16320435912500090670ull, 8151217634151930731ull, 2863890391847496120ull}}, {{9007677055270149160ull, 15788858872197725434ull, 10189022042689913414ull, 3579862989809370150ull}}, {{2036224282232910642ull, 10512701553392380985ull, 3512905516507615960ull, 4474828737261712688ull}}, {{12801855222464038911ull, 6570438470870238115ull, 2195565947817259975ull, 2796767960788570430ull}}, {{11390633009652660735ull, 3601362070160409740ull, 11967829471626350777ull, 3495959950985713037ull}}, {{14238291262065825919ull, 9113388606127900079ull, 1124728784250774759ull, 4369949938732141297ull}}, {{15816461066432223055ull, 12613396906471019405ull, 12232170536225203984ull, 2731218711707588310ull}}, {{5935518277758115107ull, 15766746133088774257ull, 6066841133426729172ull, 3414023389634485388ull}}, {{12031083865625031788ull, 1261688592651416205ull, 7583551416783411466ull, 4267529237043106735ull}}, {{9825270425229338820ull, 5400241388834523032ull, 11657248663130714022ull, 2667205773151941709ull}}, {{12281588031536673524ull, 15973673772897929598ull, 736502773631228815ull, 3334007216439927137ull}}, {{6128613002566066097ull, 15355406197695024094ull, 5532314485466423923ull, 4167509020549908921ull}}, {{17665441181885955023ull, 7291285864345696106ull, 14986911599484984712ull, 2604693137843693075ull}}, {{12858429440502667971ull, 9114107330432120133ull, 14121953480928842986ull, 3255866422304616344ull}}, {{2237978745346171251ull, 2169262126185374359ull, 17652441851161053733ull, 4069833027880770430ull}}, {{8316265743482438888ull, 3661631838079552926ull, 6421090138548270679ull, 2543645642425481519ull}}, {{1171960142498272802ull, 18412097852881604870ull, 3414676654757950444ull, 3179557053031851899ull}}, {{10688322214977616811ull, 4568378242392454471ull, 18103403873729601768ull, 3974446316289814873ull}}, {{13597730412002092363ull, 2855236401495284044ull, 4397098393439919249ull, 2484028947681134296ull}}, {{16997163015002615453ull, 8180731520296492959ull, 5496372991799899061ull, 3105036184601417870ull}}, {{16634767750325881413ull, 14837600418798004103ull, 16093838276604649634ull, 3881295230751772337ull}}, {{17314258871594757739ull, 13885186280176140468ull, 3141119895236824165ull, 2425809519219857711ull}}, {{3196079515783895558ull, 3521424794938011874ull, 17761457924328193919ull, 3032261899024822138ull}}, {{13218471431584645255ull, 18236839048954678554ull, 12978450368555466590ull, 3790327373781027673ull}}, {{12873230663167791189ull, 6786338387169286192ull, 1194002452706084763ull, 2368954608613142296ull}}, {{16091538328959738986ull, 3871236965534219836ull, 1492503065882605954ull, 2961193260766427870ull}}, {{1667678837490122116ull, 14062418243772550604ull, 11089000869208033250ull, 3701491575958034837ull}}, {{10265671310286102131ull, 13400697420785232031ull, 9236468552468714733ull, 2313432234973771773ull}}, {{8220403119430239759ull, 2915813720699376327ull, 16157271709013281321ull, 2891790293717214716ull}}, {{5663817880860411795ull, 8256453169301608313ull, 1749845562557050035ull, 3614737867146518396ull}}, {{11691458369502902647ull, 5708880443199622487ull, 2187306953196312544ull, 4518422333933147995ull}}, {{14224690508580396011ull, 3568050276999764054ull, 17507967910243553004ull, 2824013958708217496ull}}, {{8557491098870719205ull, 4460062846249705068ull, 3438215814094889639ull, 3530017448385271871ull}}, {{10696863873588399007ull, 963392539384743431ull, 18132827822900775761ull, 4412521810481589838ull}}, {{13603068948633831235ull, 12131335383183934404ull, 6721331370885596946ull, 2757826131550993649ull}}, {{17003836185792289044ull, 5940797192125142197ull, 13013350232034384087ull, 3447282664438742061ull}}, {{7419737176958197593ull, 2814310471729039843ull, 2431629734760816397ull, 4309103330548427577ull}}, {{2331492726385179544ull, 4064787054044343854ull, 13048983630293980008ull, 2693189581592767235ull}}, {{12137737944836250237ull, 5080983817555429817ull, 11699543519440087106ull, 3366486976990959044ull}}, {{1337114375763149085ull, 15574601808799063080ull, 14624429399300108882ull, 4208108721238698805ull}}, {{835696484851968178ull, 14345812148926802329ull, 11446111383776262003ull, 2630067950774186753ull}}, {{5656306624492348127ull, 13320579167731115007ull, 472581174438163792ull, 3287584938467733442ull}}, {{2458697262188047254ull, 16650723959663893759ull, 9814098504902480548ull, 4109481173084666802ull}}, {{8454214816508611390ull, 1183330437935157791ull, 10745497583991438247ull, 2568425733177916751ull}}, {{5956082502208376333ull, 15314221102701110951ull, 8820185961561909904ull, 3210532166472395939ull}}, {{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull, 4013165208090494924ull}}, {{13300100739401646331ull, 2740863199630467122ull, 13231838557807900481ull, 2508228255056559327ull}}, {{7401753887397282105ull, 8037765017965471807ull, 11928112178832487697ull, 3135285318820699159ull}}, {{4640506340819214727ull, 14658892290884227663ull, 10298454205113221717ull, 3919106648525873949ull}}, {{9817845490653091061ull, 11467650691016336241ull, 8742376887409457525ull, 2449441655328671218ull}}, {{16883992881743751730ull, 499505308488256589ull, 1704599072407046099ull, 3061802069160839023ull}}, {{7269933046897525950ull, 14459439690892484449ull, 15965806895790971335ull, 3827252586451048778ull}}, {{16072923200379423479ull, 15954678834448884636ull, 14590315328296744988ull, 2392032866531905486ull}}, {{1644409926764727733ull, 1496604469351554180ull, 9014522123516155428ull, 2990041083164881858ull}}, {{2055512408455909666ull, 1870755586689442725ull, 2044780617540418477ull, 3737551353956102323ull}}, {{3590538264498637493ull, 3475065250894595655ull, 17418888950458619212ull, 2335969596222563951ull}}, {{18323230885905460578ull, 4343831563618244568ull, 17161925169645886111ull, 2919961995278204939ull}}, {{4457294533672274107ull, 818103436095417807ull, 16840720443629969735ull, 3649952494097756174ull}}, {{959932148662954729ull, 14857687350401435971ull, 11827528517682686360ull, 4562440617622195218ull}}, {{16740858657410204370ull, 9286054594000897481ull, 12003891341979066879ull, 2851525386013872011ull}}, {{7091015266480591750ull, 6995882224073733948ull, 10393178159046445695ull, 3564406732517340014ull}}, {{8863769083100739688ull, 4133166761664779531ull, 3768100661953281311ull, 4455508415646675018ull}}, {{3234012667724268353ull, 9500758253681569063ull, 6966748932148188723ull, 2784692759779171886ull}}, {{17877573889937499153ull, 7264261798674573424ull, 17931808202040011712ull, 3480865949723964857ull}}, {{3900223288712322326ull, 9080327248343216781ull, 8579702197267850928ull, 4351082437154956072ull}}, {{4743482564658895406ull, 5675204530214510488ull, 5362313873292406830ull, 2719426523221847545ull}}, {{5929353205823619257ull, 16317377699622913918ull, 11314578360042896441ull, 3399283154027309431ull}}, {{16635063544134299879ull, 6561664069246478685ull, 9531536931626232648ull, 4249103942534136789ull}}, {{12702757724297631377ull, 4101040043279049178ull, 8263053591480089357ull, 2655689964083835493ull}}, {{6655075118517263413ull, 9737986072526199377ull, 14940503007777499600ull, 3319612455104794366ull}}, {{12930529916573967170ull, 12172482590657749221ull, 9452256722867098692ull, 4149515568880992958ull}}, {{10387424207072423433ull, 16831173656015869071ull, 1295974433364548778ull, 2593447230550620599ull}}, {{8372594240413141387ull, 11815595033165060531ull, 15455026096987849685ull, 3241809038188275748ull}}, {{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull, 4052261297735344686ull}}, {{3658785488805649269ull, 16724923399604708884ull, 14380082147485451518ull, 2532663311084590428ull}}, {{4573481861007061586ull, 11682782212651110297ull, 17975102684356814398ull, 3165829138855738035ull}}, {{10328538344686214887ull, 5380105728959112063ull, 17857192337018630094ull, 3957286423569672544ull}}, {{13372865493069966160ull, 17197624135881608751ull, 11160745210636643808ull, 2473304014731045340ull}}, {{12104395847910069796ull, 3050286096142459323ull, 13950931513295804761ull, 3091630018413806675ull}}, {{10518808791460199341ull, 8424543638605462058ull, 12826978373192368047ull, 3864537523017258344ull}}, {{11185941513090012492ull, 12182868801769495642ull, 8016861483245230029ull, 2415335951885786465ull}}, {{4759054854507739807ull, 1393527946929705841ull, 14632762872483925441ull, 3019169939857233081ull}}, {{10560504586562062663ull, 6353595952089520205ull, 4455895535322743089ull, 3773962424821541352ull}}, {{8906158375814983117ull, 15500212516124419888ull, 2784934709576714430ull, 2358726515513463345ull}}, {{11132697969768728896ull, 10151893608300749052ull, 8092854405398280942ull, 2948408144391829181ull}}, {{13915872462210911119ull, 3466494973521160507ull, 14727754025175239082ull, 3685510180489786476ull}}, {{12783154559336250995ull, 13556490753756226442ull, 18409692531469048852ull, 4606887725612233095ull}}, {{12601157618012544776ull, 17696178757952417334ull, 18423586859809237388ull, 2879304828507645684ull}}, {{6528074985660905162ull, 3673479373730970052ull, 4582739501051995120ull, 3599131035634557106ull}}, {{8160093732076131452ull, 4591849217163712565ull, 14951796413169769708ull, 4498913794543196382ull}}, {{7405901591761276110ull, 12093277797582096161ull, 4733186739803718163ull, 2811821121589497739ull}}, {{13869063008128983041ull, 10504911228550232297ull, 1304797406327259800ull, 3514776401986872174ull}}, {{3501270704879065090ull, 13131139035687790372ull, 10854368794763850558ull, 4393470502483590217ull}}, {{11411666227404191489ull, 3595275878877481078ull, 18313195542795876359ull, 2745919064052243885ull}}, {{5041210747400463553ull, 18329152903879015060ull, 9056436373212681736ull, 3432398830065304857ull}}, {{6301513434250579442ull, 4464697056139217209ull, 15932231484943240075ull, 4290498537581631071ull}}, {{15467660942475081911ull, 484592650873316803ull, 16875173705730606903ull, 2681561585988519419ull}}, {{14722890159666464485ull, 14440798868873809716ull, 16482281113735870724ull, 3351951982485649274ull}}, {{18403612699583080606ull, 18050998586092262145ull, 11379479355315062597ull, 4189939978107061593ull}}, {{4584728909598343523ull, 13587717125521357793ull, 194645569430832267ull, 2618712486316913496ull}}, {{10342597155425317307ull, 12372960388474309337ull, 243306961788540334ull, 3273390607896141870ull}}, {{17539932462709034538ull, 6242828448738110863ull, 9527505739090451226ull, 4091738259870177337ull}}, {{17879986816834228443ull, 8513453798888707193ull, 17483906133000001776ull, 2557336412418860835ull}}, {{8514925465760621841ull, 10641817248610883992ull, 17243196647822614316ull, 3196670515523576044ull}}, {{10643656832200777301ull, 13302271560763604990ull, 3107251736068716279ull, 3995838144404470056ull}}, {{2040599501698097909ull, 15231448753118334975ull, 1942032335042947674ull, 2497398840252793785ull}}, {{16385807432404786099ull, 9815938904543142910ull, 7039226437231072497ull, 3121748550315992231ull}}, {{11258887253651206815ull, 16881609649106316542ull, 4187347028111452717ull, 3902185687894990289ull}}, {{2425118515104616356ull, 12856849039905141791ull, 14146306938638127708ull, 2438866054934368930ull}}, {{16866456199162934157ull, 16071061299881427238ull, 8459511636442883827ull, 3048582568667961163ull}}, {{11859698212098891888ull, 15477140606424396144ull, 5962703527126216880ull, 3810728210834951454ull}}, {{7412311382561807430ull, 9673212879015247590ull, 17561747759736049262ull, 2381705131771844658ull}}, {{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull, 2977131414714805823ull}}, {{52521489184354349ull, 12808552114247630408ull, 11299329810091719308ull, 3721414268393507279ull}}, {{32825930740221468ull, 17228717108259544813ull, 13979610158948406423ull, 2325883917745942049ull}}, {{4652718431852664739ull, 16924210366897043112ull, 3639454643403344317ull, 2907354897182427562ull}}, {{5815898039815830924ull, 7320204903339140178ull, 13772690341108956205ull, 3634193621478034452ull}}, {{16493244586624564463ull, 13761942147601313126ull, 17215862926386195256ull, 4542742026847543065ull}}, {{5696591848212964885ull, 8601213842250820704ull, 3842385301350290179ull, 2839213766779714416ull}}, {{7120739810266206107ull, 6139831284386137976ull, 4802981626687862724ull, 3549017208474643020ull}}, {{8900924762832757633ull, 7674789105482672470ull, 6003727033359828405ull, 4436271510593303775ull}}, {{951391958343085617ull, 7102586200140364246ull, 10669858423490974609ull, 2772669694120814859ull}}, {{10412611984783632829ull, 13489918768602843211ull, 8725637010936330357ull, 3465837117651018574ull}}, {{8404078962552153132ull, 3027340405471390302ull, 1683674226815637139ull, 4332296397063773218ull}}, {{640863333167707804ull, 18032988817915476603ull, 5663982410187161115ull, 2707685248164858261ull}}, {{14636137221741798467ull, 17929550003966957849ull, 11691664031161339298ull, 3384606560206072826ull}}, {{4460113471895084371ull, 13188565468103921504ull, 5391208002096898315ull, 4230758200257591033ull}}, {{2787570919934427732ull, 5937010408351256988ull, 14898720047379031207ull, 2644223875160994395ull}}, {{3484463649918034665ull, 2809576992011683331ull, 14011714040796401105ull, 3305279843951242994ull}}, {{18190637617679707043ull, 8123657258441992067ull, 8291270514140725573ull, 4131599804939053743ull}}, {{9063305501836122950ull, 7383128795739938994ull, 12099573098979035339ull, 2582249878086908589ull}}, {{2105759840440377880ull, 4617224976247535839ull, 1289408318441630462ull, 3227812347608635737ull}}, {{16467257855832636061ull, 14994903257164195606ull, 6223446416479425981ull, 4034765434510794671ull}}, {{5680350141468009635ull, 11677657544941316206ull, 10807183037940723094ull, 2521728396569246669ull}}, {{16323809713689787851ull, 5373699894321869449ull, 18120664815853291772ull, 3152160495711558336ull}}, {{6569704086830071102ull, 6717124867902336812ull, 4204086946107063099ull, 3940200619639447921ull}}, {{13329437091123570247ull, 1892360033225266555ull, 14156769387385384197ull, 2462625387274654950ull}}, {{12050110345477074904ull, 6977136059958971098ull, 8472589697376954438ull, 3078281734093318688ull}}, {{5839265894991567822ull, 17944792111803489681ull, 10590737121721193047ull, 3847852167616648360ull}}, {{15178756230438199649ull, 18133024097518262906ull, 6619210701075745654ull, 2404907604760405225ull}}, {{9750073251192973753ull, 13442908085043052825ull, 12885699394772069972ull, 3006134505950506531ull}}, {{16799277582418605095ull, 16803635106303816031ull, 11495438225037699561ull, 3757668132438133164ull}}, {{17417077516652710041ull, 3584742913798803163ull, 16408020927503338034ull, 2348542582773833227ull}}, {{17159660877388499647ull, 13704300679103279762ull, 15898340140951784638ull, 2935678228467291534ull}}, {{12226204059880848751ull, 7907003812024323895ull, 10649553139334954990ull, 3669597785584114418ull}}, {{10671069056423673034ull, 660382728175629061ull, 4088569387313917930ull, 4586997231980143023ull}}, {{8975261169478489598ull, 5024425223537156067ull, 9472884894712280562ull, 2866873269987589389ull}}, {{6607390443420724094ull, 15503903566276220892ull, 16452792136817738606ull, 3583591587484486736ull}}, {{8259238054275905117ull, 10156507420990500307ull, 2119246097312621642ull, 4479489484355608421ull}}, {{2856180774708746746ull, 10959503156546450596ull, 3630371820034082478ull, 2799680927722255263ull}}, {{3570225968385933433ull, 4476006908828287437ull, 18373022830324766810ull, 3499601159652819078ull}}, {{9074468478909804695ull, 14818380672890135104ull, 13742906501051182704ull, 4374501449566023848ull}}, {{5671542799318627935ull, 9261487920556334440ull, 8589316563156989190ull, 2734063405978764905ull}}, {{7089428499148284918ull, 2353487863840642242ull, 15348331722373624392ull, 3417579257473456131ull}}, {{18085157660790131956ull, 2941859829800802802ull, 14573728634539642586ull, 4271974071841820164ull}}, {{15914909556421220376ull, 6450348412052889655ull, 18331952433442052424ull, 2669983794901137602ull}}, {{15281950927099137566ull, 8062935515066112069ull, 13691568504947789722ull, 3337479743626422003ull}}, {{5267380603591758246ull, 855297356977864279ull, 12502774612757349249ull, 4171849679533027504ull}}, {{10209641904885930760ull, 12063775894179634934ull, 7814234132973343280ull, 2607406049708142190ull}}, {{3538680344252637642ull, 15079719867724543668ull, 544420629361903292ull, 3259257562135177738ull}}, {{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull, 4074071952668972172ull}}, {{14293809065015842918ull, 9475188137446105788ull, 15413308176577997635ull, 2546294970418107607ull}}, {{17867261331269803647ull, 7232299153380244331ull, 14654949202295109140ull, 3182868713022634509ull}}, {{17722390645659866655ull, 9040373941725305414ull, 4483628447586722713ull, 3978585891278293137ull}}, {{6464808135110028755ull, 17179448759646785644ull, 14331482825810171455ull, 2486616182048933210ull}}, {{8081010168887535944ull, 16862624931131094151ull, 8690981495407938511ull, 3108270227561166513ull}}, {{5489576692682032026ull, 16466595145486479785ull, 15475412887687311043ull, 3885337784451458141ull}}, {{14960200478994739776ull, 7985778956715355913ull, 11977976064018263354ull, 2428336115282161338ull}}, {{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull, 3035420144102701673ull}}, {{6081490679326576260ull, 5560250592226661759ull, 11798058572387454635ull, 3794275180128377091ull}}, {{10718460702220192019ull, 1169313610927969647ull, 5067943598528465195ull, 2371421987580235682ull}}, {{8786389859347852119ull, 15296700068942125771ull, 15558301535015357301ull, 2964277484475294602ull}}, {{6371301305757427245ull, 5285817030895493502ull, 10224504881914420819ull, 3705346855594118253ull}}, {{17817121371380555740ull, 997792635095989486ull, 8696158560410206964ull, 2315841784746323908ull}}, {{13048029677370918867ull, 1247240793869986858ull, 10870198200512758705ull, 2894802230932904885ull}}, {{7086665059858872776ull, 6170737010764871477ull, 18199433769068336285ull, 3618502788666131106ull}}, {{13470017343250978874ull, 12325107281883477250ull, 13525920174480644548ull, 4523128485832663883ull}}, {{13030446857959249701ull, 16926564088031949089ull, 6147857099836708890ull, 2826955303645414927ull}}, {{2453000517166898414ull, 11934833073185160554ull, 3073135356368498209ull, 3533694129556768659ull}}, {{12289622683313398825ull, 1083483286199286980ull, 17676477250742786474ull, 4417117661945960823ull}}, {{16904386213925650074ull, 5288863072301942266ull, 17965327309355323402ull, 2760698538716225514ull}}, {{11907110730552286784ull, 15834450877232203641ull, 13233287099839378444ull, 3450873173395281893ull}}, {{1048830357908194768ull, 1346319522830702936ull, 2706550819517059344ull, 4313591466744102367ull}}, {{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull, 2695994666715063979ull}}, {{14654456772397940874ull, 10275184164066262476ull, 6149718093871667028ull, 3369993333393829974ull}}, {{18318070965497426093ull, 12843980205082828095ull, 16910519654194359593ull, 4212491666742287467ull}}, {{18366323381076973164ull, 1109958600535685703ull, 8263231774657780794ull, 2632807291713929667ull}}, {{18346218207918828551ull, 10610820287524382937ull, 5717353699894838088ull, 3291009114642412084ull}}, {{9097714704616371977ull, 13263525359405478672ull, 7146692124868547610ull, 4113761393303015105ull}}, {{5686071690385232486ull, 12901389368055812074ull, 15995897624111312016ull, 2571100870814384440ull}}, {{16330961649836316415ull, 16126736710069765092ull, 1548127956429588404ull, 3213876088517980551ull}}, {{1966957988585843903ull, 1711676813877654750ull, 15770218000819149218ull, 4017345110647475688ull}}, {{15064406798148316151ull, 5681484027100922122ull, 9856386250511968261ull, 2510840694154672305ull}}, {{9607136460830619381ull, 11713541052303540557ull, 16932168831567348230ull, 3138550867693340381ull}}, {{16620606594465662130ull, 5418554278524649888ull, 7330152984177021576ull, 3923188584616675477ull}}, {{10387879121541038832ull, 3386596424077906180ull, 6887188624324332437ull, 2451992865385422173ull}}, {{12984848901926298539ull, 8844931548524770629ull, 13220671798832803450ull, 3064991081731777716ull}}, {{2396003072125709462ull, 1832792398801187479ull, 16525839748541004313ull, 3831238852164722145ull}}, {{8415030947719650270ull, 12674710295319211934ull, 3411120815197045839ull, 2394524282602951341ull}}, {{1295416647794787029ull, 11231701850721627014ull, 8875587037423695203ull, 2993155353253689176ull}}, {{10842642846598259595ull, 9427941294974645863ull, 11094483796779619004ull, 3741444191567111470ull}}, {{13694180806764994103ull, 15115835346213929472ull, 2322366354559873973ull, 2338402619729444669ull}}, {{17117726008456242628ull, 5059736127485248128ull, 7514643961627230371ull, 2923003274661805836ull}}, {{2950413436860751669ull, 1712984140929172257ull, 9393304952034037964ull, 3653754093327257295ull}}, {{8299702814503327491ull, 2141230176161465321ull, 7129945171615159551ull, 4567192616659071619ull}}, {{16716529305133049442ull, 8255797887741997681ull, 2150372723045780767ull, 2854495385411919762ull}}, {{7060603576134148090ull, 5708061341250109198ull, 11911337940662001767ull, 3568119231764899702ull}}, {{18049126507022460921ull, 2523390658135248593ull, 5665800388972726401ull, 4460149039706124628ull}}, {{4363175039247956220ull, 13106334207403000131ull, 12764497279962729808ull, 2787593149816327892ull}}, {{842282780632557370ull, 16382917759253750164ull, 15955621599953412260ull, 3484491437270409865ull}}, {{1052853475790696713ull, 2031903125357636089ull, 6109468944659601614ull, 4355614296588012332ull}}, {{12187248468437655206ull, 15104997508630686267ull, 13041790127267026816ull, 2722258935367507707ull}}, {{10622374567119681103ull, 434502812078806218ull, 11690551640656395617ull, 3402823669209384634ull}}, {{4054596172044825571ull, 5154814533525895677ull, 5389817513965718713ull, 4253529586511730793ull}}, {{4839965616741709934ull, 14750974129522154558ull, 14897850992297043955ull, 2658455991569831745ull}}, {{15273329057781913225ull, 13827031643475305293ull, 4787255685089141232ull, 3323069989462289682ull}}, {{5256603266945227819ull, 17283789554344131617ull, 15207441643216202348ull, 4153837486827862102ull}}, {{14814592087909237147ull, 1578996434610306452ull, 4892965008582738564ull, 2596148429267413814ull}}, {{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull, 3245185536584267267ull}}, {{9312742082076019330ull, 7078867947505991736ull, 14562786853551610862ull, 4056481920730334084ull}}, {{5820463801297512082ull, 18259350522473408547ull, 18325113820324532596ull, 2535301200456458802ull}}, {{2663893733194502198ull, 4377444079382209068ull, 13683020238550889938ull, 3169126500570573503ull}}, {{3329867166493127747ull, 14695177136082537143ull, 12492089279761224518ull, 3961408125713216879ull}}, {{8998696006699286698ull, 4572799691624197810ull, 14725084827491847180ull, 2475880078570760549ull}}, {{2024997971519332565ull, 5715999614530247263ull, 4571297979082645263ull, 3094850098213450687ull}}, {{16366305519681329418ull, 2533313499735421174ull, 1102436455425918675ull, 3868562622766813359ull}}, {{5617254931373442982ull, 17724222001830495898ull, 7606551812282281027ull, 2417851639229258349ull}}, {{16244940701071579536ull, 17543591483860731968ull, 14119875783780239188ull, 3022314549036572936ull}}, {{1859431802629922803ull, 3482745281116363345ull, 17649844729725298986ull, 3777893186295716170ull}}, {{12691359922712171512ull, 6788401819125114994ull, 15642838974505699770ull, 2361183241434822606ull}}, {{6640827866535438582ull, 17708874310761169551ull, 10330176681277348904ull, 2951479051793528258ull}}, {{3689348814741910324ull, 3689348814741910323ull, 3689348814741910323ull, 3689348814741910323ull}}, {{0ull, 0ull, 0ull, 4611686018427387904ull}}, {{0ull, 0ull, 0ull, 2882303761517117440ull}}, {{0ull, 0ull, 0ull, 3602879701896396800ull}}, {{0ull, 0ull, 0ull, 4503599627370496000ull}}, {{0ull, 0ull, 0ull, 2814749767106560000ull}}, {{0ull, 0ull, 0ull, 3518437208883200000ull}}, {{0ull, 0ull, 0ull, 4398046511104000000ull}}, {{0ull, 0ull, 0ull, 2748779069440000000ull}}, {{0ull, 0ull, 0ull, 3435973836800000000ull}}, {{0ull, 0ull, 0ull, 4294967296000000000ull}}, {{0ull, 0ull, 0ull, 2684354560000000000ull}}, {{0ull, 0ull, 0ull, 3355443200000000000ull}}, {{0ull, 0ull, 0ull, 4194304000000000000ull}}, {{0ull, 0ull, 0ull, 2621440000000000000ull}}, {{0ull, 0ull, 0ull, 3276800000000000000ull}}, {{0ull, 0ull, 0ull, 4096000000000000000ull}}, {{0ull, 0ull, 0ull, 2560000000000000000ull}}, {{0ull, 0ull, 0ull, 3200000000000000000ull}}, {{0ull, 0ull, 0ull, 4000000000000000000ull}}, {{0ull, 0ull, 0ull, 2500000000000000000ull}}, {{0ull, 0ull, 0ull, 3125000000000000000ull}}, {{0ull, 0ull, 0ull, 3906250000000000000ull}}, {{0ull, 0ull, 0ull, 2441406250000000000ull}}, {{0ull, 0ull, 0ull, 3051757812500000000ull}}, {{0ull, 0ull, 0ull, 3814697265625000000ull}}, {{0ull, 0ull, 0ull, 2384185791015625000ull}}, {{0ull, 0ull, 0ull, 2980232238769531250ull}}, {{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}}, {{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}}, {{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}}, {{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}}, {{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}}, {{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}}, {{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}}, {{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}}, {{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}}, {{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}}, {{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}}, {{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}}, {{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}}, {{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}}, {{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}}, {{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}}, {{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}}, {{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}}, {{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}}, {{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}}, {{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}}, {{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}}, {{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}}, {{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}}, {{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}}, {{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}}, {{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}}, {{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}}, {{0ull, 4611686018427387904ull, 9222577334724359131ull, 3761581922631320025ull}}, {{0ull, 576460752303423488ull, 17293325880271194217ull, 2350988701644575015ull}}, {{0ull, 5332261958806667264ull, 17004971331911604867ull, 2938735877055718769ull}}, {{0ull, 2053641430080946176ull, 7421156109607342372ull, 3673419846319648462ull}}, {{0ull, 2567051787601182720ull, 53073100154402157ull, 4591774807899560578ull}}, {{0ull, 3910250376464433152ull, 4644856706023889252ull, 2869859254937225361ull}}, {{0ull, 4887812970580541440ull, 10417756900957249469ull, 3587324068671531701ull}}, {{0ull, 10721452231653064704ull, 17633882144623949740ull, 4484155085839414626ull}}, {{0ull, 15924279681637941248ull, 15632862358817356491ull, 2802596928649634141ull}}, {{0ull, 15293663583620038656ull, 5706019893239531902ull, 3503246160812042677ull}}, {{0ull, 9893707442670272512ull, 11744210884976802782ull, 4379057701015053346ull}}, {{0ull, 1571881133241532416ull, 11951817821537889643ull, 2736911063134408341ull}}, {{0ull, 15799909471834079232ull, 1104714221640198341ull, 3421138828918010427ull}}, {{0ull, 5914828784510435328ull, 15215950832332411639ull, 4276423536147513033ull}}, {{0ull, 10614297017960103936ull, 2592440242566675418ull, 2672764710092195646ull}}, {{0ull, 4044499235595354112ull, 12463922340063120081ull, 3340955887615244557ull}}, {{0ull, 9667310062921580544ull, 1744844869796736389ull, 4176194859519055697ull}}, {{0ull, 8347911798539681792ull, 12619743089691430003ull, 2610121787199409810ull}}, {{0ull, 5823203729747214336ull, 6551306825259511696ull, 3262652233999262263ull}}, {{0ull, 7279004662184017920ull, 3577447513147001716ull, 4078315292499077829ull}}, {{0ull, 13772749950719787008ull, 4541747704930570024ull, 2548947057811923643ull}}, {{0ull, 17215937438399733760ull, 1065498612735824626ull, 3186183822264904554ull}}, {{0ull, 12296549761144891392ull, 10555245302774556591ull, 3982729777831130692ull}}, {{0ull, 14602872628356638976ull, 15820400351088873677ull, 2489206111144456682ull}}, {{0ull, 4418532730163635008ull, 10552128402006316289ull, 3111507638930570853ull}}, {{0ull, 10134851931131931664ull, 17801846520935283265ull, 3889384548663213566ull}}, {{0ull, 17863497503025927050ull, 6514468057157164136ull, 2430865342914508479ull}}, {{9223372036854775808ull, 3882627805072857196ull, 3531399053019067267ull, 3038581678643135599ull}}, {{11529215046068469760ull, 241598737913683591ull, 18249306871555997796ull, 3798227098303919498ull}}, {{14123288431433875456ull, 9374371248050828052ull, 16017502813149886526ull, 2373891936439949686ull}}, {{17654110539292344320ull, 2494592023208759257ull, 10798506479582582350ull, 2967364920549937108ull}}, {{8232580118833266688ull, 12341612065865724880ull, 13498133099478227937ull, 3709206150687421385ull}}, {{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull, 2318253844179638366ull}}, {{15655075254693265408ull, 5606659160333633146ull, 11121877236270789064ull, 2897817305224547957ull}}, {{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull, 3622271631530684947ull}}, {{17543526057817145344ull, 17983776974876077599ull, 13919168667852566984ull, 4527839539413356183ull}}, {{17882232813776797696ull, 11239860609297548499ull, 15617009445048936221ull, 2829899712133347614ull}}, {{17741104998793609216ull, 214767706339771912ull, 10297889769456394469ull, 3537374640166684518ull}}, {{3729637174782459904ull, 4880145651352102795ull, 3648990174965717278ull, 4421718300208355648ull}}, {{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull, 2763573937630222280ull}}, {{13866533336563843072ull, 11883064322366759140ull, 2850773574191966623ull, 3454467422037777850ull}}, {{17333166670704803840ull, 10242144384531061021ull, 12786839004594734087ull, 4318084277547222312ull}}, {{13139072178404196352ull, 13318869267972994994ull, 7991774377871708804ull, 2698802673467013945ull}}, {{7200468186150469632ull, 16648586584966243743ull, 14601403990767023909ull, 3373503341833767431ull}}, {{4388899214260699136ull, 6975675175925640967ull, 13640068970031391983ull, 4216879177292209289ull}}, {{9660591036554018816ull, 11277326012594607460ull, 1607514078628538133ull, 2635549485807630806ull}}, {{12075738795692523520ull, 261599460461095613ull, 11232764635140448475ull, 3294436857259538507ull}}, {{1259615439333490688ull, 14162057380858533229ull, 9429269775498172689ull, 4118046071574423134ull}}, {{3093102658797125632ull, 1933756835395501412ull, 1281607591258970027ull, 2573778794734014459ull}}, {{3866378323496407040ull, 16252254099526540477ull, 15437067544355876245ull, 3217223493417518073ull}}, {{9444658922797896704ull, 6480259569126011884ull, 5461276375162681595ull, 4021529366771897592ull}}, {{15126283863603461248ull, 1744319221490063475ull, 3413297734476675997ull, 2513455854232435995ull}}, {{14296168811076938656ull, 6792085045289967248ull, 18101680223378008708ull, 3141819817790544993ull}}, {{17870211013846173320ull, 8490106306612459060ull, 8792042223940347173ull, 3927274772238181242ull}}, {{1945509846799082517ull, 7612159450846480865ull, 10106712408390104887ull, 2454546732648863276ull}}, {{7043573326926241051ull, 4903513295130713177ull, 12633390510487631109ull, 3068183415811079095ull}}, {{13416152677085189217ull, 10741077637340779375ull, 11180052119682150982ull, 3835229269763848869ull}}, {{15302624450819325117ull, 2101487504910599205ull, 9293375584015038316ull, 2397018293602405543ull}}, {{5293222508241992684ull, 2626859381138249007ull, 7005033461591409991ull, 2996272867003006929ull}}, {{2004842116875102951ull, 17118632281704974971ull, 13367977845416650392ull, 3745341083753758661ull}}, {{17393927387542797009ull, 10699145176065609356ull, 10660829162599100447ull, 2340838177346099163ull}}, {{3295665160718944645ull, 8762245451654623792ull, 8714350434821487655ull, 2926047721682623954ull}}, {{4119581450898680806ull, 6341120796140891836ull, 1669566006672083761ull, 3657559652103279943ull}}, {{5149476813623351007ull, 12538087013603502699ull, 15922015563622268413ull, 4571949565129099928ull}}, {{912579999300900428ull, 10142147392715883139ull, 9951259727263917758ull, 2857468478205687455ull}}, {{14975783054408289246ull, 3454312204040078115ull, 7827388640652509294ull, 3571835597757109319ull}}, {{14108042799582973654ull, 13541262291904873452ull, 5172549782388248713ull, 4464794497196386649ull}}, {{18040898786594134342ull, 1545759904799464051ull, 14762058660061125206ull, 2790496560747741655ull}}, {{17939437464815280023ull, 11155571917854105872ull, 13840887306649018603ull, 3488120700934677069ull}}, {{3977552757309548413ull, 9332778878890244437ull, 3466051078029109542ull, 4360150876168346337ull}}, {{4791813482532161710ull, 1221300780879014869ull, 13695496969836663224ull, 2725094297605216460ull}}, {{10601452871592590042ull, 1526625976098768586ull, 17119371212295829030ull, 3406367872006520575ull}}, {{4028444052635961744ull, 11131654506978236541ull, 16787527996942398383ull, 4257959840008150719ull}}, {{4823620542111170042ull, 13874813094502479694ull, 17409734025730080845ull, 2661224900005094199ull}}, {{15252897714493738360ull, 3508458312845935905ull, 17150481513735213153ull, 3326531125006367749ull}}, {{5231064087835009238ull, 8997258909484807786ull, 7603043836886852729ull, 4158163906257959687ull}}, {{7881101073324268678ull, 17152501864496474626ull, 11669431425695364811ull, 2598852441411224804ull}}, {{628004304800560040ull, 16828941312193205379ull, 14586789282119206014ull, 3248565551764031005ull}}, {{14620063436282863761ull, 11812804603386730915ull, 4398428547366843806ull, 4060706939705038757ull}}, {{6831696638463095899ull, 2771316858689318918ull, 5054860851317971331ull, 2537941837315649223ull}}, {{17762992834933645682ull, 17299204128643812359ull, 1706890045720076259ull, 3172427296644561529ull}}, {{17592055025239669198ull, 17012319142377377545ull, 6745298575577483228ull, 3965534120805701911ull}}, {{4077505363133711393ull, 1409327427131085158ull, 11133340637377008874ull, 2478458825503563694ull}}, {{14320253740771915049ull, 10985031320768632255ull, 4693303759866485284ull, 3098073531879454618ull}}, {{13288631157537505907ull, 13731289150960790319ull, 15090001736687882413ull, 3872591914849318272ull}}, {{15222923501102023048ull, 10887898728564187901ull, 9431251085429926508ull, 2420369946780823920ull}}, {{5193596321095365098ull, 13609873410705234877ull, 11789063856787408135ull, 3025462433476029900ull}}, {{11103681419796594277ull, 12400655744954155692ull, 14736329820984260169ull, 3781828041845037375ull}}, {{16163172924227647231ull, 832880812955265451ull, 16127735165756244462ull, 2363642526153148359ull}}, {{15592280136857171135ull, 10264473053048857622ull, 15547982938767917673ull, 2954553157691435449ull}}, {{10266978134216688110ull, 17442277334738459932ull, 5599920618177733379ull, 3693191447114294312ull}}, {{15640233370740205877ull, 8595580324997843505ull, 3499950386361083362ull, 2308244654446433945ull}}, {{5715233658143093634ull, 1521103369392528574ull, 8986624001378742107ull, 2885305818058042431ull}}, {{16367414109533642851ull, 15736437267022824429ull, 6621593983296039729ull, 3606632272572553039ull}}, {{6624209581634889851ull, 5835488528496366825ull, 3665306460692661758ull, 4508290340715691299ull}}, {{15669346034590275917ull, 17482238385592392977ull, 18431717602428771262ull, 2817681462947307061ull}}, {{5751624487955681184ull, 12629425945135715414ull, 9204588947753800366ull, 3522101828684133827ull}}, {{16412902646799377288ull, 6563410394564868459ull, 6894050166264862554ull, 4402627285855167284ull}}, {{7952221145035916853ull, 8713817515030430691ull, 13532153390770314904ull, 2751642053659479552ull}}, {{5328590412867508163ull, 10892271893788038364ull, 16915191738462893630ull, 3439552567074349440ull}}, {{6660738016084385203ull, 4391967830380272147ull, 2697245599369065422ull, 4299440708842936801ull}}, {{1857118250839046800ull, 16580037949269833804ull, 13214993545674135648ull, 2687150443026835500ull}}, {{2321397813548808500ull, 2278303362877740639ull, 16518741932092669561ull, 3358938053783544375ull}}, {{16736805322218174337ull, 7459565222024563702ull, 16036741396688449047ull, 4198672567229430469ull}}, {{5848817307958971057ull, 11579757291406434170ull, 12328806382143974606ull, 2624170354518394043ull}}, {{16534393671803489629ull, 5251324577403266904ull, 10799321959252580354ull, 3280212943147992554ull}}, {{2221248016044810420ull, 15787527758608859439ull, 4275780412210949634ull, 4100266178934990693ull}}, {{8305809037669088369ull, 14478890867557925053ull, 4978205766845537473ull, 2562666361834369183ull}}, {{14993947315513748365ull, 4263555529165242604ull, 1611071190129533938ull, 3203332952292961479ull}}, {{295690070682633840ull, 14552816448311329064ull, 15848897042944081134ull, 4004166190366201848ull}}, {{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull, 2502603868978876155ull}}, {{4842693886148195591ull, 10216466345636378855ull, 7770264796372675482ull, 3128254836223595194ull}}, {{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull, 3910318545279493993ull}}, {{12430265883104630126ull, 13746221855562655860ull, 11835126895200387600ull, 2443949090799683745ull}}, {{15537832353880787657ull, 17182777319453319825ull, 958850563718320788ull, 3054936363499604682ull}}, {{5587232387068820859ull, 3031727575607098166ull, 10421935241502676794ull, 3818670454374505852ull}}, {{17327078297200176749ull, 6506515753181824257ull, 15737081562793948804ull, 2386669033984066157ull}}, {{7823789816218057224ull, 8133144691477280322ull, 5836293898210272293ull, 2983336292480082697ull}}, {{556365233417795722ull, 14778116882773988307ull, 11907053391190228270ull, 3729170365600103371ull}}, {{16488629335381979991ull, 4624637033306354787ull, 5136065360280198717ull, 2330731478500064607ull}}, {{15999100650800087084ull, 10392482310060331388ull, 1808395681922860492ull, 2913414348125080759ull}}, {{1552131739790557239ull, 12990602887575414236ull, 16095552657685739327ull, 3641767935156350948ull}}, {{1940164674738196549ull, 11626567591041879891ull, 1672696748397622543ull, 4552209918945438686ull}}, {{17353503986207230507ull, 14184133772042256787ull, 14880493523030677801ull, 2845131199340899178ull}}, {{17080193964331650230ull, 3895109159770657272ull, 9377244866933571444ull, 3556413999176123973ull}}, {{2903498381705011171ull, 4868886449713321591ull, 16333242102094352209ull, 4445517498970154966ull}}, {{8732215516206713838ull, 14572269077139295754ull, 5596590295381582226ull, 2778448436856346854ull}}, {{1691897358403616490ull, 8991964309569343885ull, 16219109906081753591ull, 3473060546070433567ull}}, {{6726557716431908516ull, 6628269368534291952ull, 15662201364174804085ull, 4341325682588041959ull}}, {{4204098572769942823ull, 6448511364547626422ull, 16706404880250334409ull, 2713328551617526224ull}}, {{14478495252817204336ull, 12672325224111920931ull, 2436262026603366395ull, 3391660689521907781ull}}, {{13486433047594117516ull, 11228720511712513260ull, 7657013551681595898ull, 4239575861902384726ull}}, {{17652392691601099256ull, 11629636338247708691ull, 173947451373609532ull, 2649734913688990454ull}}, {{17453804846073986166ull, 14537045422809635864ull, 9440806351071787723ull, 3312168642111238067ull}}, {{3370511983882931091ull, 13559620760084656927ull, 7189321920412346750ull, 4140210802639047584ull}}, {{9024099017567913788ull, 3863076956625522675ull, 4493326200257716719ull, 2587631751649404740ull}}, {{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull, 3234539689561755925ull}}, {{8335547191915630413ull, 14106508276975308012ull, 11632508206330070277ull, 4043174611952194906ull}}, {{14433089031802044817ull, 11122410682323261459ull, 11882003647383681827ull, 2526984132470121816ull}}, {{13429675271325168117ull, 9291327334476688920ull, 14852504559229602284ull, 3158730165587652270ull}}, {{16787094089156460146ull, 11614159168095861150ull, 9342258662182227047ull, 3948412706984565338ull}}, {{5880247787295399687ull, 14176378507700995075ull, 10450597682291279808ull, 2467757941865353336ull}}, {{2738623715691861705ull, 17720473134626243844ull, 13063247102864099760ull, 3084697427331691670ull}}, {{3423279644614827131ull, 3703847344573253189ull, 7105686841725348893ull, 3855871784164614588ull}}, {{4445392787097960909ull, 4620747599571977195ull, 13664426312933118866ull, 2409919865102884117ull}}, {{945054965445063232ull, 14999306536319747302ull, 3245474835884234870ull, 3012399831378605147ull}}, {{10404690743661104848ull, 9525761133544908319ull, 17891901600137457300ull, 3765499789223256433ull}}, {{13420460742429272386ull, 15176972745320343507ull, 4264909472444828956ull, 2353437368264535271ull}}, {{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull, 2941796710330669089ull}}, {{15204862387011503223ull, 655589822426097210ull, 5510999546088198269ull, 3677245887913336361ull}}, {{9782705946909603221ull, 5431173296460009417ull, 11500435451037635740ull, 4596557359891670451ull}}, {{17643406262886971773ull, 12617855347142281693ull, 4881929147684828385ull, 2872848349932294032ull}}, {{8219199773326551005ull, 1937261128645688405ull, 6102411434606035482ull, 3591060437415367540ull}}, {{14885685735085576660ull, 11644948447661886314ull, 7628014293257544352ull, 4488825546769209425ull}}, {{13915239602855873316ull, 7278092779788678946ull, 16296723979354434980ull, 2805515966730755890ull}}, {{8170677466715065837ull, 9097615974735848683ull, 11147532937338267917ull, 3506894958413444863ull}}, {{5601660814966444393ull, 15983705986847198758ull, 9322730153245446992ull, 4383618698016806079ull}}, {{17336096064636191458ull, 9989816241779499223ull, 12744235373419486226ull, 2739761686260503799ull}}, {{17058434062367851418ull, 3263898265369598221ull, 11318608198346969879ull, 3424702107825629749ull}}, {{7487984522677650560ull, 17914930886994161489ull, 313202192651548636ull, 4280877634782037187ull}}, {{16209205372742001360ull, 1973459767516575122ull, 16336652434903075562ull, 2675548521738773241ull}}, {{11038134679072725892ull, 11690196746250494711ull, 6585757488346680740ull, 3344435652173466552ull}}, {{9185982330413519461ull, 14612745932813118389ull, 8232196860433350925ull, 4180544565216833190ull}}, {{8047081965722143615ull, 11438809217221892945ull, 533437019343456424ull, 2612840353260520744ull}}, {{14670538475580067423ull, 14298511521527366181ull, 666796274179320530ull, 3266050441575650930ull}}, {{4503115039192920567ull, 8649767365054431919ull, 10056867379578926471ull, 4082563051969563662ull}}, {{9731975927136657210ull, 12323633630800101805ull, 1673856093809441140ull, 2551601907480977289ull}}, {{16776655927348209417ull, 15404542038500127256ull, 6704006135689189329ull, 3189502384351221611ull}}, {{2524075835475710155ull, 5420619492842995359ull, 3768321651184098758ull, 3986877980439027014ull}}, {{8495076424813400703ull, 17222945238309035811ull, 16190259087272225435ull, 2491798737774391883ull}}, {{6007159512589362975ull, 16916995529458906860ull, 15626137840662893890ull, 3114748422217989854ull}}, {{7508949390736703718ull, 11922872374968857767ull, 10309300263973841555ull, 3893435527772487318ull}}, {{11610622396851521680ull, 5145952225141842152ull, 1831626646556263068ull, 2433397204857804574ull}}, {{14513277996064402100ull, 6432440281427302690ull, 11512905345050104643ull, 3041746506072255717ull}}, {{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull, 3802183132590319647ull}}, {{3268047902177385309ull, 11366412245202738595ull, 7265075043910123788ull, 2376364457868949779ull}}, {{17920117933003895348ull, 14208015306503423243ull, 4469657786460266831ull, 2970455572336187224ull}}, {{17788461397827481281ull, 13148333114701891150ull, 5587072233075333539ull, 3713069465420234030ull}}, {{6506102355214787897ull, 5911865187474988017ull, 17326978200954247174ull, 2320668415887646268ull}}, {{12744313962445872775ull, 16613203521198510829ull, 3211978677483257351ull, 2900835519859557836ull}}, {{2095334397775177256ull, 16154818383070750633ull, 4014973346854071689ull, 3626044399824447295ull}}, {{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull, 4532555499780559119ull}}, {{2213440750565280719ull, 13197412614077447420ull, 7171923193353707923ull, 2832847187362849449ull}}, {{2766800938206600899ull, 11885079749169421371ull, 13576590010119522808ull, 3541058984203561811ull}}, {{17293559228040414836ull, 14856349686461776713ull, 12359051494222015606ull, 4426323730254452264ull}}, {{3890945489884177417ull, 4673532535611222542ull, 7724407183888759754ull, 2766452331409032665ull}}, {{14087053899209997579ull, 15065287706368803985ull, 14267194998288337596ull, 3458065414261290831ull}}, {{3773759318730333261ull, 384865559251453366ull, 13222307729433034092ull, 4322581767826613539ull}}, {{16193657629488622000ull, 9463913011386934161ull, 5958099321681952355ull, 2701613604891633462ull}}, {{6407013981578613788ull, 7218205245806279798ull, 16670996188957216252ull, 3377017006114541827ull}}, {{17232139513828043043ull, 9022756557257849747ull, 16227059217769132411ull, 4221271257643177284ull}}, {{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull, 2638294536026985803ull}}, {{10580305233661041188ull, 8778410817267965579ull, 14983233023095828648ull, 3297868170033732253ull}}, {{8613695523648913581ull, 10973013521584956974ull, 4893983223587622098ull, 4122335212542165317ull}}, {{771873683853183084ull, 11469819469417986013ull, 5364582523955957763ull, 2576459507838853323ull}}, {{5576528123243866759ull, 9725588318345094612ull, 2094042136517559300ull, 3220574384798566654ull}}, {{6970660154054833449ull, 12156985397931368265ull, 11840924707501724933ull, 4025717980998208317ull}}, {{15885877642352740666ull, 9903958882920799117ull, 9706420951402272035ull, 2516073738123880198ull}}, {{6022288997658762120ull, 7768262585223610993ull, 2909654152398064236ull, 3145092172654850248ull}}, {{12139547265500840554ull, 9710328231529513741ull, 3637067690497580295ull, 3931365215818562810ull}}, {{9893060050151719298ull, 12986484172347027944ull, 6884853324988375588ull, 2457103259886601756ull}}, {{12366325062689649123ull, 16233105215433784930ull, 8606066656235469485ull, 3071379074858252195ull}}, {{6234534291507285595ull, 6456323464010067451ull, 6145897301866948953ull, 3839223843572815244ull}}, {{1590740922978359545ull, 15564417211074761917ull, 13064557850521618903ull, 2399514902233009527ull}}, {{6600112172150337335ull, 14843835495416064492ull, 11719011294724635725ull, 2999393627791261909ull}}, {{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull, 3749242034739077387ull}}, {{12073866662133532899ull, 14479050242310917824ull, 16649467353948127004ull, 2343276271711923366ull}}, {{15092333327666916124ull, 18098812802888647280ull, 11588462155580382947ull, 2929095339639904208ull}}, {{418672585874093539ull, 18011829985183421197ull, 14485577694475478684ull, 3661369174549880260ull}}, {{5135026750770004827ull, 4068043407769724880ull, 18106972118094348356ull, 4576711468187350325ull}}, {{3209391719231253017ull, 11765899166710853858ull, 13622700583022661674ull, 2860444667617093953ull}}, {{13235111685893842080ull, 5484001921533791514ull, 3193317673496163381ull, 3575555834521367442ull}}, {{7320517570512526791ull, 11466688420344627297ull, 13215019128724980034ull, 4469444793151709302ull}}, {{16104538527638799005ull, 11778366281142779964ull, 3647700937025724617ull, 2793402995719818314ull}}, {{1683929085838947140ull, 887899796146311244ull, 13782998208136931580ull, 3491753744649772892ull}}, {{2104911357298683925ull, 1109874745182889055ull, 17228747760171164475ull, 4364692180812216115ull}}, {{8233098625952759309ull, 16834572780235163323ull, 8462124340893283844ull, 2727932613007635072ull}}, {{5679687264013561232ull, 2596471901584402538ull, 10577655426116604806ull, 3409915766259543840ull}}, {{16322981116871727348ull, 12468961913835278980ull, 13222069282645756007ull, 4262394707824429800ull}}, {{978491161190053785ull, 14710630223788131219ull, 8263793301653597504ull, 2663996692390268625ull}}, {{15058172006769730943ull, 18388287779735164023ull, 14941427645494384784ull, 3329995865487835781ull}}, {{14211028990034775774ull, 4538615650959403413ull, 4841726501585817269ull, 4162494831859794727ull}}, {{11187736127985428811ull, 5142477791063321085ull, 9943608091132217649ull, 2601559269912371704ull}}, {{149612104699622302ull, 11039783257256539261ull, 12429510113915272061ull, 3251949087390464630ull}}, {{4798701149301915781ull, 18411415089998061980ull, 6313515605539314268ull, 4064936359238080788ull}}, {{12222560255168473171ull, 2283762394394012929ull, 13169319290316847226ull, 2540585224523800492ull}}, {{1443142263678427752ull, 12078075029847291970ull, 16461649112896059032ull, 3175731530654750615ull}}, {{11027299866452810498ull, 15097593787309114962ull, 15965375372692685886ull, 3969664413318438269ull}}, {{11503748434960394466ull, 4824310098640808947ull, 12284202617146622631ull, 2481040258324023918ull}}, {{9767999525273105178ull, 1418701604873623280ull, 6131881234578502481ull, 3101300322905029898ull}}, {{12209999406591381472ull, 6385063024519417004ull, 16888223580077903909ull, 3876625403631287372ull}}, {{16854621665974389228ull, 6296507399538329579ull, 1331767700693914135ull, 2422890877269554608ull}}, {{16456591064040598631ull, 3258948230995524070ull, 1664709625867392669ull, 3028613596586943260ull}}, {{11347366793195972481ull, 8685371307171792992ull, 2080887032334240836ull, 3785766995733679075ull}}, {{7092104245747482801ull, 14651729103837146428ull, 17441455459704758186ull, 2366104372333549421ull}}, {{8865130307184353501ull, 9091289342941657227ull, 7966761269348784021ull, 2957630465416936777ull}}, {{6469726865553053972ull, 15975797697104459438ull, 14570137605113367930ull, 3697038081771170971ull}}, {{17878637346252822445ull, 14596559579117675052ull, 6800492993982161004ull, 2310648801106981857ull}}, {{3901552609106476440ull, 18245699473897093816ull, 13112302260905089159ull, 2888311001383727321ull}}, {{4876940761383095549ull, 18195438323943979366ull, 2555319770849197737ull, 3610388751729659152ull}}, {{15319547988583645245ull, 8909239849647810495ull, 3194149713561497172ull, 4512985939662073940ull}}, {{16492246520505860134ull, 14791646942884657367ull, 11219715607830711540ull, 2820616212288796212ull}}, {{16003622132204937264ull, 42814604896270093ull, 14024644509788389426ull, 3525770265360995265ull}}, {{6169469609974007867ull, 9276890292975113425ull, 3695747581953323070ull, 4407212831701244082ull}}, {{15385133552302224677ull, 1186370414682057986ull, 6921528257148214823ull, 2754508019813277551ull}}, {{10008044903523005038ull, 15318021073634736195ull, 4040224303007880624ull, 3443135024766596939ull}}, {{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull, 4303918780958246174ull}}, {{14159853356215006054ull, 2743831926922361844ull, 14109179530489953010ull, 2689949238098903858ull}}, {{17699816695268757568ull, 12653161945507728113ull, 8413102376257665454ull, 3362436547623629823ull}}, {{8289712813803783248ull, 6593080395029884334ull, 5904691951894693914ull, 4203045684529537279ull}}, {{569384490199976626ull, 8732361265321065613ull, 10607961497575265552ull, 2626903552830960799ull}}, {{5323416631177358686ull, 10915451581651332016ull, 8648265853541694036ull, 3283629441038700999ull}}, {{6654270788971698358ull, 13644314477064165020ull, 6198646298499729641ull, 4104536801298376249ull}}, {{13382291279962087282ull, 1610167520524021281ull, 15403368982630800786ull, 2565335500811485155ull}}, {{2892806044670445390ull, 11236081437509802410ull, 14642525209861113078ull, 3206669376014356444ull}}, {{12839379592692832546ull, 4821729760032477204ull, 18303156512326391348ull, 4008336720017945555ull}}, {{17247984282287796149ull, 12236953136875074060ull, 9133629810990300640ull, 2505210450011215972ull}}, {{3113236279150193570ull, 15296191421093842576ull, 11417037263737875800ull, 3131513062514019965ull}}, {{3891545348937741963ull, 673495202657751604ull, 436238524390181039ull, 3914391328142524957ull}}, {{11655587879940864535ull, 7338463529302176608ull, 2578492086957557101ull, 2446494580089078098ull}}, {{14569484849926080669ull, 13784765430055108664ull, 12446487145551722184ull, 3058118225111347622ull}}, {{18211856062407600836ull, 17230956787568885830ull, 6334736895084876922ull, 3822647781389184528ull}}, {{6770724020577362618ull, 15381034010657941548ull, 3959210559428048076ull, 2389154863368240330ull}}, {{8463405025721703273ull, 779548439612875319ull, 14172385236139835904ull, 2986443579210300412ull}}, {{5967570263724741187ull, 974435549516094149ull, 17715481545174794880ull, 3733054474012875515ull}}, {{6035574424041657194ull, 609022218447558843ull, 8766332956520552848ull, 2333159046258047197ull}}, {{2932782011624683588ull, 761277773059448554ull, 15569602214078078964ull, 2916448807822558996ull}}, {{12889349551385630293ull, 951597216324310692ull, 1015258693888047089ull, 3645561009778198746ull}}, {{16111686939232037867ull, 5801182538832776269ull, 10492445404214834669ull, 4556951262222748432ull}}, {{12375647346233717619ull, 5931582095984179120ull, 6557778377634271668ull, 2848094538889217770ull}}, {{15469559182792147023ull, 7414477619980223900ull, 17420595008897615393ull, 3560118173611522212ull}}, {{890204904780632163ull, 13879783043402667780ull, 3328999687412467625ull, 4450147717014402766ull}}, {{9779750102342670910ull, 1757335374485585506ull, 15915682859914955978ull, 2781342323134001728ull}}, {{3001315591073562830ull, 11420041254961757691ull, 1447859501184143356ull, 3476677903917502161ull}}, {{17586702544124117249ull, 14275051568702197113ull, 6421510394907567099ull, 4345847379896877701ull}}, {{4074160062436491425ull, 6616064221225179244ull, 6319287006030923389ull, 2716154612435548563ull}}, {{5092700078045614281ull, 12881766294958861959ull, 3287422739111266332ull, 3395193265544435704ull}}, {{1754189079129629947ull, 16102207868698577449ull, 4109278423889082915ull, 4243991581930544630ull}}, {{12625583220524488477ull, 7758036908722916953ull, 16403357070212840534ull, 2652494738706590393ull}}, {{1946920970373446884ull, 474174099048870384ull, 6669138282483886956ull, 3315618423383237992ull}}, {{2433651212966808605ull, 592717623811087980ull, 8336422853104858695ull, 4144523029229047490ull}}, {{10744404044959031186ull, 7287977542523011843ull, 9821950301617924588ull, 2590326893268154681ull}}, {{8818819037771401079ull, 9109971928153764804ull, 16889123895449793639ull, 3237908616585193351ull}}, {{11023523797214251348ull, 6775778891764818101ull, 16499718850884854145ull, 4047385770731491689ull}}, {{9195545382472601045ull, 15764076853421481073ull, 3394795254161951984ull, 2529616106707182306ull}}, {{16106117746518139210ull, 1258351993067299725ull, 13466866104557215789ull, 3162020133383977882ull}}, {{6297589127865510300ull, 6184626009761512561ull, 7610210593841743928ull, 3952525166729972353ull}}, {{15465208250984413698ull, 3865391256100945350ull, 16285596667219559715ull, 2470328229206232720ull}}, {{10108138276875741314ull, 220053051698793784ull, 1910251760314898028ull, 3087910286507790901ull}}, {{12635172846094676643ull, 275066314623492230ull, 6999500718821010439ull, 3859887858134738626ull}}, {{3285297010381784998ull, 7089445474280764500ull, 8986373967690519428ull, 2412429911334211641ull}}, {{4106621262977231247ull, 8861806842850955625ull, 15844653478040537189ull, 3015537389167764551ull}}, {{9744962597148926963ull, 15688944571991082435ull, 15194130829123283582ull, 3769421736459705689ull}}, {{3784758614004385400ull, 5193904339067038618ull, 2578802740560970383ull, 2355888585287316056ull}}, {{13954320304360257558ull, 1880694405406410368ull, 3223503425701212979ull, 2944860731609145070ull}}, {{17442900380450321947ull, 16185926062040176672ull, 13252751318981292031ull, 3681075914511431337ull}}, {{3356881401853350818ull, 15620721559122832937ull, 2730881093444451327ull, 4601344893139289172ull}}, {{13627265922226814021ull, 16680480002092852441ull, 10930172720257557887ull, 2875840558212055732ull}}, {{3199024347501353815ull, 16238913984188677648ull, 13662715900321947359ull, 3594800697765069665ull}}, {{3998780434376692268ull, 15686956461808459156ull, 3243336820120270487ull, 4493500872206337082ull}}, {{11722609808340208476ull, 16721876816271368828ull, 6638771531002556958ull, 2808438045128960676ull}}, {{14653262260425260595ull, 11678973983484435227ull, 8298464413753196198ull, 3510547556411200845ull}}, {{13704891807104187839ull, 5375345442500768226ull, 14984766535618883152ull, 4388184445514001056ull}}, {{13177243397867505304ull, 3359590901562980141ull, 9365479084761801970ull, 2742615278446250660ull}}, {{2636496192052217917ull, 13422860663808500985ull, 11706848855952252462ull, 3428269098057813325ull}}, {{7907306258492660301ull, 7555203792905850423ull, 798503014658151866ull, 4285336372572266657ull}}, {{11859595439198994544ull, 9333688388993544418ull, 12028279430229814676ull, 2678335232857666660ull}}, {{5601122262143967372ull, 11667110486241930523ull, 15035349287787268345ull, 3347919041072083325ull}}, {{2389716809252571311ull, 748830052520249442ull, 4959128554451921720ull, 4184898801340104157ull}}, {{6105259024210244973ull, 468018782825155901ull, 5405298355746145027ull, 2615561750837565098ull}}, {{12243259798690194121ull, 14420081533813608588ull, 15979994981537457091ull, 3269452188546956372ull}}, {{15304074748362742651ull, 13413415898839622831ull, 1528249653212269748ull, 4086815235683695466ull}}, {{16482575745367796013ull, 17606756973629540077ull, 5566842051685056496ull, 2554259522302309666ull}}, {{6768161626427581304ull, 3561702143327373481ull, 16181924601461096429ull, 3192824402877887082ull}}, {{13071888051461864534ull, 9063813697586604755ull, 11004033714971594728ull, 3991030503597358853ull}}, {{5864087022949971382ull, 5664883560991627972ull, 9183364081070940657ull, 2494394064748349283ull}}, {{7330108778687464227ull, 11692790469666922869ull, 6867519082911287917ull, 3117992580935436604ull}}, {{13774321991786718188ull, 780930031801489874ull, 8584398853639109897ull, 3897490726169295755ull}}, {{13220637263294086772ull, 12017296315944400931ull, 3059406274310749733ull, 2435931703855809847ull}}, {{11914110560690220560ull, 1186562339648337452ull, 17659315898170600879ull, 3044914629819762308ull}}, {{14892638200862775700ull, 15318260979842585527ull, 3627400799003699482ull, 3806143287274702886ull}}, {{16225427903180316669ull, 14185599130829003858ull, 16102183554659475888ull, 2378839554546689303ull}}, {{11058412842120620028ull, 17731998913536254823ull, 15516043424896956956ull, 2973549443183361629ull}}, {{9211330034223387131ull, 3718254568210766913ull, 5559996225839032484ull, 3716936803979202037ull}}, {{17286296317458086717ull, 11547281141986505128ull, 5780840650363089254ull, 2323085502487001273ull}}, {{3161126323113056780ull, 5210729390628355603ull, 11837736831381249472ull, 2903856878108751591ull}}, {{17786465959173484687ull, 6513411738285444503ull, 10185485020799173936ull, 3629821097635939489ull}}, {{17621396430539467955ull, 8141764672856805629ull, 17343542294426355324ull, 4537276372044924361ull}}, {{13319215778300861424ull, 14311974957390279326ull, 3922184906375390221ull, 2835797732528077726ull}}, {{7425647686021300972ull, 4054910641455685446ull, 14126103169824013585ull, 3544747165660097157ull}}, {{58687570671850406ull, 9680324320246994712ull, 3822570906997853269ull, 4430933957075121447ull}}, {{36679731669906504ull, 8356045709368065647ull, 9306635844514740149ull, 2769333723171950904ull}}, {{13880907719869546842ull, 15056743155137469962ull, 11633294805643425186ull, 3461667153964938630ull}}, {{8127762612982157745ull, 9597556907067061645ull, 5318246470199505675ull, 4327083942456173288ull}}, {{7385694642327542543ull, 3692630057703219576ull, 3323904043874691047ull, 2704427464035108305ull}}, {{9232118302909428178ull, 4101553701636566ull, 8766566073270751713ull, 3380534330043885381ull}}, {{2316775841782009414ull, 4616812960554433612ull, 15569893610015827545ull, 4225667912554856726ull}}, {{10671356937968531692ull, 14414723146414990767ull, 5119497487832504311ull, 2641042445346785454ull}}, {{8727510154033276711ull, 13406717914591350555ull, 15622743896645406197ull, 3301303056683481817ull}}, {{6297701674114207985ull, 2923339337957024482ull, 5693371815524594035ull, 4126628820854352272ull}}, {{8547749564748767895ull, 17967988150718997965ull, 3558357384702871271ull, 2579143013033970170ull}}, {{15296372974363347772ull, 17848299169971359552ull, 13671318767733364897ull, 3223928766292462712ull}}, {{673722144244633099ull, 8475315907182035729ull, 17089148459666706122ull, 4029910957865578390ull}}, {{11950291386221365447ull, 9908758460416160234ull, 6069031768864303422ull, 2518694348665986494ull}}, {{5714492195921931001ull, 3162576038665424485ull, 16809661747935155086ull, 3148367935832483117ull}}, {{11754801263329801655ull, 13176592085186556414ull, 7177019129636780145ull, 3935459919790603897ull}}, {{2735064771153738131ull, 1317841025600515903ull, 16014852002091457351ull, 2459662449869127435ull}}, {{17253889019224336375ull, 15482359337282808590ull, 15406878984186933784ull, 3074578062336409294ull}}, {{12343989237175644661ull, 906205097893959122ull, 10035226693378891423ull, 3843222577920511618ull}}, {{12326679291662165817ull, 7483907213824806307ull, 10883702701789195043ull, 2402014111200319761ull}}, {{10796663096150319367ull, 4743197998853619980ull, 18216314395663881708ull, 3002517639000399701ull}}, {{13495828870187899209ull, 5928997498567024975ull, 8935334939297688423ull, 3753147048750499627ull}}, {{15352422071508518862ull, 10623152464245472465ull, 3278741327847361312ull, 2345716905469062267ull}}, {{5355469534103484865ull, 13278940580306840582ull, 17933484715091365352ull, 2932146131836327833ull}}, {{15917708954484131889ull, 16598675725383550727ull, 8581797838582042978ull, 3665182664795409792ull}}, {{15285450174677776957ull, 11524972619874662601ull, 10727247298227553723ull, 4581478330994262240ull}}, {{2635877331532528743ull, 4897264878207970174ull, 6704529561392221077ull, 2863423956871413900ull}}, {{12518218701270436736ull, 10733267116187350621ull, 8380661951740276346ull, 3579279946089267375ull}}, {{1812715321305882208ull, 4193211858379412469ull, 5864141421247957529ull, 4474099932611584219ull}}, {{3438790085029870332ull, 14149972457555602553ull, 1359245379066279503ull, 2796312457882240137ull}}, {{8910173624714725819ull, 13075779553517115287ull, 6310742742260237283ull, 3495390572352800171ull}}, {{6526031012466019370ull, 11733038423469006205ull, 3276742409397908700ull, 4369238215441000214ull}}, {{6384612392004956058ull, 16556521051522904686ull, 15883022061155856649ull, 2730773884650625133ull}}, {{17204137526860970881ull, 6860593259121467145ull, 6018719521162657100ull, 3413467355813281417ull}}, {{7670113853294049889ull, 8575741573901833932ull, 12135085419880709279ull, 4266834194766601771ull}}, {{14017193195163556989ull, 12277367511329728063ull, 5278585378211749347ull, 2666771371729126107ull}}, {{12909805475527058332ull, 10735023370734772175ull, 1986545704337298780ull, 3333464214661407634ull}}, {{11525570825981435011ull, 13418779213418465219ull, 11706554167276399283ull, 4166830268326759542ull}}, {{4897638757024702930ull, 6080893999172846810ull, 2704910336120361648ull, 2604268917704224714ull}}, {{15345420483135654470ull, 7601117498966058512ull, 12604509957005227868ull, 3255336147130280892ull}}, {{735031530210016471ull, 9501396873707573141ull, 15755637446256534835ull, 4069170183912851115ull}}, {{2765237715594954247ull, 3632530036853539261ull, 7541430394696640320ull, 2543231364945531947ull}}, {{8068233162921080712ull, 4540662546066924076ull, 4815101974943412496ull, 3179039206181914934ull}}, {{10085291453651350890ull, 5675828182583655095ull, 15242249505534041428ull, 3973799007727393667ull}}, {{13220836186173176163ull, 12770764650969560242ull, 7220562931745081940ull, 2483624379829621042ull}}, {{7302673195861694395ull, 15963455813711950303ull, 18249075701536128233ull, 3104530474787026302ull}}, {{4516655476399730090ull, 6119261711857774167ull, 13587972590065384484ull, 3880663093483782878ull}}, {{9740438700390913162ull, 13047910606765884662ull, 3880796850363477398ull, 2425414433427364299ull}}, {{2952176338633865645ull, 7086516221602580020ull, 239310044526958844ull, 3031768041784205374ull}}, {{3690220423292332056ull, 8858145277003225025ull, 9522509592513474363ull, 3789710052230256717ull}}, {{13835602810626177295ull, 3230497788913321688ull, 8257411504534615429ull, 2368568782643910448ull}}, {{17294503513282721619ull, 8649808254569040014ull, 10321764380668269286ull, 2960710978304888060ull}}, {{12394757354748626215ull, 1588888281356524210ull, 12902205475835336608ull, 3700888722881110075ull}}, {{12358409365145279289ull, 993055175847827631ull, 5758035413183391428ull, 2313055451800693797ull}}, {{10836325688004211207ull, 1241318969809784539ull, 11809230284906627189ull, 2891319314750867246ull}}, {{8933721091577876105ull, 6163334730689618578ull, 5538165819278508178ull, 3614149143438584058ull}}, {{1943779327617569323ull, 16927540450216799031ull, 16146079310952911030ull, 4517686429298230072ull}}, {{8132391107402062683ull, 5968026762958111490ull, 10091299569345569394ull, 2823554018311393795ull}}, {{942116847397802545ull, 16683405490552415171ull, 8002438443254573838ull, 3529442522889242244ull}}, {{15012704114529416894ull, 11630884826335743155ull, 10003048054068217298ull, 4411803153611552805ull}}, {{7077097062367191607ull, 11880989034887227376ull, 8557748043006329763ull, 2757376971007220503ull}}, {{8846371327958989508ull, 10239550275181646316ull, 6085499035330524300ull, 3446721213759025629ull}}, {{11057964159948736885ull, 12799437843977057895ull, 12218559812590543279ull, 4308401517198782036ull}}, {{13828756627609042409ull, 14917177680126743040ull, 16859971919723865357ull, 2692750948249238772ull}}, {{17285945784511303012ull, 4811414044876265088ull, 2628220825945280081ull, 3365938685311548466ull}}, {{3160688156929577148ull, 10625953574522719265ull, 12508648069286375909ull, 4207423356639435582ull}}, {{13504645144149455478ull, 8947063993290393492ull, 3206219024876597039ull, 2629639597899647239ull}}, {{16880806430186819347ull, 6572143973185603961ull, 17842831836377910011ull, 3287049497374559048ull}}, {{7265949982451360472ull, 3603493948054617048ull, 3856795721762835898ull, 4108811871718198811ull}}, {{4541218739032100295ull, 6863869735961523559ull, 104654316888078484ull, 2568007419823874257ull}}, {{1064837405362737465ull, 8579837169951904449ull, 4742503914537486009ull, 3210009274779842821ull}}, {{5942732775130809735ull, 15336482480867268465ull, 10539815911599245415ull, 4012511593474803526ull}}, {{15243423030525225845ull, 16502830578183124646ull, 1975698926322140480ull, 2507819745921752204ull}}, {{9830906751301756498ull, 2181794149019354192ull, 2469623657902675601ull, 3134774682402190255ull}}, {{12288633439127195622ull, 7338928704701580644ull, 16922087627660508213ull, 3918468353002737818ull}}, {{16903767936309273072ull, 6892673449652181854ull, 15187990785715205537ull, 2449042720626711136ull}}, {{11906337883531815532ull, 13227527830492615222ull, 538244408434455305ull, 3061303400783388921ull}}, {{5659550317559993606ull, 2699351732833605316ull, 5284491528970457036ull, 3826629250979236151ull}}, {{12760590985329771812ull, 10910466869875779130ull, 10220336233247617503ull, 2391643281862022594ull}}, {{6727366694807438957ull, 9026397568917336009ull, 3552048254704746071ull, 2989554102327528243ull}}, {{13020894386936686600ull, 6671310942719282107ull, 18275118373663096301ull, 3736942627909410303ull}}, {{5832215982621735173ull, 6475412348413245269ull, 18339478011180517044ull, 2335589142443381439ull}}, {{11901955996704556871ull, 8094265435516556586ull, 18312661495548258401ull, 2919486428054226799ull}}, {{5654072959025920280ull, 14729517812823083637ull, 18279140851007935097ull, 3649358035067783499ull}}, {{11679277217209788254ull, 4576839210746690834ull, 18237240045332530968ull, 4561697543834729374ull}}, {{11911234279183505563ull, 2860524506716681771ull, 6786589009905443951ull, 2851060964896705859ull}}, {{10277356830551994050ull, 17410713688678015926ull, 3871550243954417034ull, 3563826206120882324ull}}, {{3623324001335216754ull, 12540020073992744100ull, 4839437804943021293ull, 4454782757651102905ull}}, {{11487949537689286279ull, 10143355555459159014ull, 14553863674157858068ull, 2784239223531939315ull}}, {{5136564885256832041ull, 12679194444323948768ull, 13580643574269934681ull, 3480299029414924144ull}}, {{6420706106571040051ull, 2013935000122772248ull, 16975804467837418352ull, 4350373786768655180ull}}, {{4012941316606900032ull, 1258709375076732655ull, 1386505755543610662ull, 2718983616730409488ull}}, {{404490627331237136ull, 10796758755700691627ull, 1733132194429513327ull, 3398729520913011860ull}}, {{14340671339446210132ull, 8884262426198476629ull, 2166415243036891659ull, 4248411901141264825ull}}, {{11268762596367575285ull, 3246821007160353941ull, 12883224572966527047ull, 2655257438213290515ull}}, {{250895190177305394ull, 17893584314232606139ull, 11492344697780770904ull, 3319071797766613144ull}}, {{14148677043003795454ull, 3920236319081206057ull, 14365430872225963631ull, 4148839747208266430ull}}, {{1925394124236290303ull, 9367676727066835642ull, 4366708276713839365ull, 2593024842005166519ull}}, {{11630114692150138687ull, 16321281927260932456ull, 846699327464911302ull, 3241281052506458149ull}}, {{14537643365187673358ull, 11178230372221389762ull, 5670060177758527032ull, 4051601315633072686ull}}, {{13697713121669683753ull, 6986393982638368601ull, 17378845666381243107ull, 2532250822270670428ull}}, {{3287083346804940979ull, 4121306459870572848ull, 3276813009267002268ull, 3165313527838338036ull}}, {{4108854183506176224ull, 5151633074838216060ull, 4096016261583752835ull, 3956641909797922545ull}}, {{11791405901546135948ull, 913927662560191085ull, 14089225209558315282ull, 2472901193623701590ull}}, {{904199321650506223ull, 10365781615055014665ull, 8388159475093118294ull, 3091126492029626988ull}}, {{5741935170490520683ull, 3733854981963992523ull, 10485199343866397868ull, 3863908115037033735ull}}, {{1282866472342881475ull, 11557031400582271135ull, 13470778617557580523ull, 2414942571898146084ull}}, {{15438641145710765555ull, 9834603232300451014ull, 16838473271946975654ull, 3018678214872682605ull}}, {{10074929395283681136ull, 3069882003520787960ull, 7213033534651555856ull, 3773347768590853257ull}}, {{6296830872052300710ull, 1918676252200492475ull, 16037361005225692170ull, 2358342355369283285ull}}, {{3259352571637987984ull, 11621717352105391402ull, 6211643201249951500ull, 2947927944211604107ull}}, {{13297562751402260787ull, 14527146690131739252ull, 3152867983135051471ull, 3684909930264505134ull}}, {{16621953439252825984ull, 13547247344237286161ull, 13164457015773590147ull, 4606137412830631417ull}}, {{3471191871891934384ull, 6161186580934609899ull, 1310256607217411986ull, 2878835883019144636ull}}, {{18174047895147081692ull, 16924855263023038181ull, 1637820759021764982ull, 3598544853773930795ull}}, {{8882501813651688403ull, 11932697041924021919ull, 15882334004059369940ull, 4498181067217413493ull}}, {{12469092661173387108ull, 16681307688057289507ull, 12232301761750800164ull, 2811363167010883433ull}}, {{10974679808039345981ull, 2404890536362060268ull, 1455319146906336494ull, 3514203958763604292ull}}, {{13718349760049182476ull, 12229485207307351143ull, 1819148933632920617ull, 4392754948454505365ull}}, {{15491497627671820904ull, 725899226926012608ull, 3442811092734269338ull, 2745471842784065853ull}}, {{917627960880224514ull, 10130746070512291569ull, 8915199884345224576ull, 3431839803480082316ull}}, {{5758720969527668546ull, 12663432588140364461ull, 11143999855431530720ull, 4289799754350102895ull}}, {{5905043615168486793ull, 7914645367587727788ull, 13882528937285788556ull, 2681124846468814309ull}}, {{7381304518960608492ull, 9893306709484659735ull, 3518103116325071983ull, 3351406058086017887ull}}, {{4614944630273372710ull, 7754947368428436765ull, 18232686950688503691ull, 4189257572607522358ull}}, {{5190183403134551896ull, 2540999096054079026ull, 6783743325752926903ull, 2618285982879701474ull}}, {{15711101290772965678ull, 17011306925349762494ull, 17703051194045934436ull, 3272857478599626842ull}}, {{10415504576611431290ull, 2817389582977651502ull, 12905441955702642238ull, 4091071848249533553ull}}, {{1898004341954756652ull, 15595926544643195901ull, 1148372194673069542ull, 2556919905155958471ull}}, {{6984191445870833719ull, 10271536143949219068ull, 15270523298623500640ull, 3196149881444948088ull}}, {{8730239307338542149ull, 12839420179936523835ull, 641410049569824184ull, 3995187351806185111ull}}, {{3150556557872894891ull, 8024637612460327397ull, 7318410308622221971ull, 2496992094878865694ull}}, {{8549881715768506518ull, 5419110997148021342ull, 18371384922632553272ull, 3121240118598582117ull}}, {{1463980107855857339ull, 6773888746435026678ull, 9129173098008527878ull, 3901550148248227647ull}}, {{14750045622692074549ull, 18068738521804055385ull, 12623262213896411779ull, 2438468842655142279ull}}, {{4602498973082929474ull, 17974237133827681328ull, 11167391748943126820ull, 3048086053318927849ull}}, {{5753123716353661843ull, 4021052343575050044ull, 124181630896744814ull, 3810107566648659812ull}}, {{12819074359575814460ull, 16348215770016569989ull, 9300985556165241316ull, 2381317229155412382ull}}, {{2188784894187604363ull, 1988525638811160871ull, 2402859908351775838ull, 2976646536444265478ull}}, {{16571039173016669165ull, 11709029085368726896ull, 12226946922294495605ull, 3720808170555331847ull}}, {{10356899483135418228ull, 9623986187569148262ull, 14559370854075141609ull, 2325505106597082404ull}}, {{3722752317064496977ull, 16641668752888823232ull, 18199213567593927011ull, 2906881383246353005ull}}, {{4653440396330621222ull, 16190399922683641136ull, 8913958904210245052ull, 3633601729057941257ull}}, {{5816800495413276527ull, 1791255829644999804ull, 15754134648690194220ull, 4542002161322426571ull}}, {{12858872346488073638ull, 10342906930382900685ull, 7540491146217677435ull, 2838751350826516607ull}}, {{2238532377827928335ull, 8316947644551237953ull, 4813927914344708890ull, 3548439188533145759ull}}, {{7409851490712298322ull, 1172812518834271633ull, 1405723874503498209ull, 4435548985666432199ull}}, {{16160372227763656212ull, 12262222870339889530ull, 7796106449205768236ull, 2772218116041520124ull}}, {{10977093247849794457ull, 15327778587924861913ull, 9745133061507210295ull, 3465272645051900155ull}}, {{18333052578239630975ull, 14548037216478689487ull, 7569730308456624965ull, 4331590806314875194ull}}, {{18375686889040851215ull, 11398366269512874881ull, 9342767461212778507ull, 2707244253946796996ull}}, {{9134550556018900307ull, 9636271818463705698ull, 11678459326515973134ull, 3384055317433496245ull}}, {{2194816158168849576ull, 2821967736224856315ull, 763016102862802706ull, 4230069146791870307ull}}, {{17512661163351388649ull, 6375415853567923100ull, 16617786128785109355ull, 2643793216744918941ull}}, {{3444082380479684195ull, 3357583798532515972ull, 6937174605699222982ull, 3304741520931148677ull}}, {{4305102975599605244ull, 13420351785020420773ull, 13283154275551416631ull, 4130926901163935846ull}}, {{4996532368963447229ull, 15305248893278844839ull, 3690285403792247490ull, 2581829313227459904ull}}, {{1633979442776921133ull, 9908189079743780241ull, 4612856754740309363ull, 3227286641534324880ull}}, {{6654160321898539320ull, 7773550331252337397ull, 5766070943425386704ull, 4034108301917906100ull}}, {{6464693210400281027ull, 4858468957032710873ull, 12827166376495642498ull, 2521317688698691312ull}}, {{12692552531427739188ull, 15296458233145664399ull, 16033957970619553122ull, 3151647110873364140ull}}, {{11254004645857286080ull, 9897200754577304691ull, 1595703389564889787ull, 3939558888591705176ull}}, {{4727909894447109848ull, 3879907462397121480ull, 997314618478056117ull, 2462224305369815735ull}}, {{5909887368058887310ull, 9461570346423789754ull, 15081701328379733858ull, 3077780381712269668ull}}, {{16610731246928384946ull, 2603590896174961384ull, 405382586765115707ull, 3847225477140337086ull}}, {{10381707029330240591ull, 17768145374605208529ull, 14088422172010361028ull, 2404515923212710678ull}}, {{17588819805090188643ull, 3763437644546959045ull, 8387155678158175478ull, 3005644904015888348ull}}, {{8150966701080572092ull, 13927669092538474615ull, 10483944597697719347ull, 3757056130019860435ull}}, {{12011883215816439414ull, 6398950173622852682ull, 4246622364347380640ull, 2348160081262412772ull}}, {{5791481982915773459ull, 7998687717028565853ull, 5308277955434225800ull, 2935200101578015965ull}}, {{11851038497072104727ull, 9998359646285707316ull, 11247033462720170154ull, 3669000126972519956ull}}, {{14813798121340130909ull, 3274577521002358337ull, 14058791828400212693ull, 4586250158715649945ull}}, {{2341094798196499962ull, 4352453959840167913ull, 1869215865109051077ull, 2866406349197281216ull}}, {{7538054516173012857ull, 10052253468227597795ull, 2336519831386313846ull, 3583007936496601520ull}}, {{4810882126788878167ull, 3341944798429721436ull, 2920649789232892308ull, 4478759920620751900ull}}, {{12230173366097824663ull, 11312087535873351705ull, 11048778155125333500ull, 2799224950387969937ull}}, {{1452658652340117116ull, 14140109419841689632ull, 18422658712334054779ull, 3499031187984962421ull}}, {{1815823315425146395ull, 13063450756374724136ull, 9193265335135404762ull, 4373788984981203027ull}}, {{1134889572140716497ull, 12776342741161590489ull, 3439947825245934024ull, 2733618115613251892ull}}, {{6030297983603283525ull, 15970428426451988111ull, 4299934781557417530ull, 3417022644516564865ull}}, {{2926186461076716502ull, 10739663496210209331ull, 9986604495374159817ull, 4271278305645706081ull}}, {{17969767602668805478ull, 18241504731199850591ull, 17770842855677319645ull, 2669548941028566300ull}}, {{17850523484908618944ull, 8966822858717649527ull, 3766809495887097941ull, 3336936176285707876ull}}, {{17701468337708385775ull, 15820214591824449813ull, 4708511869858872426ull, 4171170220357134845ull}}, {{13369260720281435062ull, 14499320138317669037ull, 5248662927875489218ull, 2606981387723209278ull}}, {{2876517845069630115ull, 8900778136042310489ull, 15784200696699137331ull, 3258726734654011597ull}}, {{8207333324764425548ull, 6514286651625500207ull, 5895192815591757952ull, 4073408418317514497ull}}, {{12047112355618847824ull, 4071429157265937629ull, 15213710555813318480ull, 2545880261448446560ull}}, {{1223832389241396067ull, 5089286446582422037ull, 570394121057096484ull, 3182350326810558201ull}}, {{6141476504979132988ull, 6361608058228027546ull, 5324678669748758509ull, 3977937908513197751ull}}, {{8450108834039346022ull, 6281848045606211168ull, 10245453196234055924ull, 2486211192820748594ull}}, {{10562636042549182527ull, 7852310057007763960ull, 3583444458437794097ull, 3107763991025935743ull}}, {{13203295053186478159ull, 14427073589687092854ull, 18314363628329406333ull, 3884704988782419678ull}}, {{3640373389814160945ull, 11322764002768126986ull, 6834791249278491054ull, 2427940617989012299ull}}, {{13773838774122476989ull, 4930082966605382924ull, 3931803043170725914ull, 3034925772486265374ull}}, {{17217298467653096237ull, 15385975745111504463ull, 14138125840818183200ull, 3793657215607831717ull}}, {{17678340569924267004ull, 9616234840694690289ull, 11142171659725058452ull, 2371035759754894823ull}}, {{8262867657123170043ull, 12020293550868362862ull, 9316028556228935161ull, 2963794699693618529ull}}, {{1105212534549186746ull, 1190308883303289866ull, 16256721713713556856ull, 3704743374617023161ull}}, {{5302443852520629620ull, 743943052064556166ull, 3242922043429891179ull, 2315464609135639476ull}}, {{15851426852505562833ull, 14764986870362858919ull, 4053652554287363973ull, 2894330761419549345ull}}, {{15202597547204565637ull, 4621175532671409937ull, 9678751711286592871ull, 3617913451774436681ull}}, {{5168188878723543335ull, 1164783397411874518ull, 16710125657535628993ull, 4522391814718045851ull}}, {{17065176104484378296ull, 12257204669450891333ull, 8137985526746074168ull, 2826494884198778657ull}}, {{7496412075323309158ull, 15321505836813614167ull, 14784167926859980614ull, 3533118605248473321ull}}, {{4758829075726748544ull, 9928510259162241901ull, 4645151853292812056ull, 4416398256560591652ull}}, {{5280111181542911792ull, 6205318911976401188ull, 12126591945162783343ull, 2760248910350369782ull}}, {{6600138976928639740ull, 3144962621543113581ull, 5934867894598703371ull, 3450311137937962228ull}}, {{12861859739588187579ull, 17766261332211055688ull, 7418584868248379213ull, 4312888922422452785ull}}, {{8038662337242617237ull, 13409756341845603757ull, 16165830588723706768ull, 2695555576514032990ull}}, {{14660013939980659450ull, 16762195427307004696ull, 10983916199049857652ull, 3369444470642541238ull}}, {{18325017424975824312ull, 2506000210424204254ull, 4506523211957546258ull, 4211805588303176548ull}}, {{6841449872182502291ull, 6177936149942515563ull, 12039949044328242219ull, 2632378492689485342ull}}, {{3940126321800739960ull, 3110734169000756550ull, 5826564268555526966ull, 3290473115861856678ull}}, {{14148529939105700758ull, 13111789748105721495ull, 16506577372549184515ull, 4113091394827320847ull}}, {{15760360239582144830ull, 5889025583352381982ull, 17234139885484322178ull, 2570682121767075529ull}}, {{10477078262622905229ull, 16584654016045253286ull, 7707616801573239010ull, 3213352652208844412ull}}, {{3872975791423855729ull, 11507445483201790800ull, 9634521001966548763ull, 4016690815261055515ull}}, {{2420609869639909831ull, 4886310417787425298ull, 3715732617015399025ull, 2510431759538159697ull}}, {{12249134373904663096ull, 10719574040661669526ull, 9256351789696636685ull, 3138039699422699621ull}}, {{6088045930526053062ull, 18011153569254474812ull, 16182125755548183760ull, 3922549624278374526ull}}, {{13028400743433558972ull, 11256970980784046757ull, 5502142578790226946ull, 2451593515173984079ull}}, {{2450442874009785003ull, 4847841689125282639ull, 2265992205060395779ull, 3064491893967480099ull}}, {{16898111647794394965ull, 1448116092979215394ull, 16667548311607658436ull, 3830614867459350123ull}}, {{15173005798298884757ull, 10128444594966785429ull, 8111374685541092570ull, 2394134292162093827ull}}, {{5131199192591442235ull, 3437183706853705979ull, 5527532338498977809ull, 2992667865202617284ull}}, {{1802312972311914889ull, 8908165651994520378ull, 6909415423123722261ull, 3740834831503271605ull}}, {{5738131626122334710ull, 7873446541710269188ull, 6624227648666020365ull, 2338021769689544753ull}}, {{7172664532652918387ull, 14453494195565224389ull, 12891970579259913360ull, 2922527212111930941ull}}, {{13577516684243535888ull, 18066867744456530486ull, 2279905168792727988ull, 3653159015139913677ull}}, {{7748523818449644052ull, 4136840606861111492ull, 7461567479418297890ull, 4566448768924892096ull}}, {{14066199423385803341ull, 7197211397715582586ull, 4663479674636436181ull, 2854030480578057560ull}}, {{8359377242377478368ull, 13608200265571866137ull, 5829349593295545226ull, 3567538100722571950ull}}, {{15060907571399235864ull, 7786878295110056863ull, 16510059028474207341ull, 4459422625903214937ull}}, {{16330596259765604271ull, 7172641943657479491ull, 3401257865155297732ull, 2787139141189509336ull}}, {{15801559306279617434ull, 8965802429571849364ull, 4251572331444122165ull, 3483923926486886670ull}}, {{1305205059139970177ull, 15818939055392199610ull, 14537837451159928514ull, 4354904908108608337ull}}, {{5427439180389869265ull, 14498522928047512660ull, 2168619379333873465ull, 2721815567567880211ull}}, {{6784298975487336581ull, 4288095604777227113ull, 16545832279449505544ull, 3402269459459850263ull}}, {{13092059737786558630ull, 5360119505971533891ull, 16070604330884494026ull, 4252836824324812829ull}}, {{5876694326902905192ull, 7961760709659596586ull, 12349970716016502718ull, 2658023015203008018ull}}, {{16569239945483407298ull, 728828850219719924ull, 6214091358165852590ull, 3322528769003760023ull}}, {{2264805858144707506ull, 10134408099629425714ull, 3155928179279927833ull, 4153160961254700029ull}}, {{6027189679767830095ull, 17863220108336860831ull, 4278298121263648847ull, 2595725600784187518ull}}, {{2922301081282399715ull, 17717339116993688135ull, 14571244688434336867ull, 3244657000980234397ull}}, {{17487934406885163356ull, 17534987877814722264ull, 4378997805260757372ull, 4055821251225292997ull}}, {{10929959004303227098ull, 1735995386779425607ull, 5042716637501667310ull, 2534888282015808123ull}}, {{9050762736951645968ull, 11393366270329057817ull, 1691709778449696233ull, 3168610352519760154ull}}, {{15925139439616945364ull, 406649782629158559ull, 11338009259916896100ull, 3960762940649700192ull}}, {{16870741177401672709ull, 9477528150997999907ull, 7086255787448060062ull, 2475476837906062620ull}}, {{16476740453324702982ull, 2623538151892724076ull, 8857819734310075078ull, 3094346047382578275ull}}, {{2149181492946327111ull, 12502794726720680904ull, 6460588649460205943ull, 3867932559228222844ull}}, {{1343238433091454444ull, 14731775731841507421ull, 13261239942767404522ull, 2417457849517639277ull}}, {{6290734059791705959ull, 9191347627947108468ull, 2741491873177091941ull, 3021822311897049097ull}}, {{7863417574739632449ull, 16100870553361273489ull, 8038550859898752830ull, 3777277889871311371ull}}, {{16443851030280740041ull, 5451358077423408026ull, 2718251278223026567ull, 2360798681169569607ull}}, {{11331441750996149243ull, 2202511578351872129ull, 17232872153060946921ull, 2950998351461962008ull}}, {{329244133463022842ull, 7364825491367228066ull, 3094346117616632035ull, 3688747939327452511ull}}, {{9634927203683554360ull, 4594345845781647178ull, 17702990702302953756ull, 4610934924159315638ull}}, {{10633515520729609379ull, 12094838190468305294ull, 6452683170511958193ull, 2881834327599572274ull}}, {{4068522364057235916ull, 1283489682803217906ull, 17289225999994723550ull, 3602292909499465342ull}}, {{14309024991926320703ull, 10827734140358798190ull, 12388160463138628629ull, 4502866136874331678ull}}, {{4331454601526562535ull, 9073176846937942821ull, 3130914271034254989ull, 2814291335546457299ull}}, {{10026004270335591073ull, 15953157077099816430ull, 17748700894074982448ull, 3517864169433071623ull}}, {{3309133301064713033ull, 1494702272665218922ull, 17574190099166340157ull, 4397330211791339529ull}}, {{6679894331592833550ull, 3240031929629455778ull, 4066339784337880742ull, 2748331382369587206ull}}, {{17573239951345817745ull, 13273411948891595530ull, 14306296767277126735ull, 3435414227961984007ull}}, {{12743177902327496374ull, 11980078917687106509ull, 13271184940669020515ull, 4294267784952480009ull}}, {{10270329198168379186ull, 5181706314340747616ull, 1376961560277055966ull, 2683917365595300006ull}}, {{12837911497710473982ull, 15700504929780710328ull, 10944573987201095765ull, 3354896706994125007ull}}, {{16047389372138092477ull, 5790573106943724198ull, 9069031465573981803ull, 4193620883742656259ull}}, {{5417932339158919894ull, 1313265182626133672ull, 3362301656770044675ull, 2621013052339160162ull}}, {{6772415423948649868ull, 15476639533564830802ull, 13426249107817331651ull, 3276266315423950202ull}}, {{17688891316790588143ull, 14734113398528650598ull, 7559439347916888756ull, 4095332894279937753ull}}, {{6443871054566729685ull, 18432192910935182432ull, 16253864638516525232ull, 2559583058924961095ull}}, {{8054838818208412107ull, 4593497064959426424ull, 15705644779718268637ull, 3199478823656201369ull}}, {{10068548522760515133ull, 10353557349626670934ull, 5796997919365672084ull, 3999348529570251712ull}}, {{1681156808297934054ull, 15694345380371445142ull, 3623123699603545052ull, 2499592830981407320ull}}, {{11324818047227193376ull, 1171187651754754811ull, 4528904624504431316ull, 3124491038726759150ull}}, {{9544336540606603816ull, 1463984564693443514ull, 14884502817485314953ull, 3905613798408448937ull}}, {{10576896356306515289ull, 12444205399001871956ull, 2385285233287239989ull, 2441008624005280586ull}}, {{13221120445383144111ull, 1720198693470176233ull, 12204978578463825795ull, 3051260780006600732ull}}, {{2691342501446766427ull, 15985306422119884004ull, 15256223223079782243ull, 3814075975008250915ull}}, {{10905461100259004825ull, 7684973504611233550ull, 7229296505211169950ull, 2383797484380156822ull}}, {{4408454338468980223ull, 382844843909266130ull, 18259992668368738246ull, 2979746855475196027ull}}, {{14733939959941001087ull, 9701928091741358470ull, 18213304817033534903ull, 3724683569343995034ull}}, {{4597026456535737775ull, 12981234084979430900ull, 15995001529073347218ull, 2327927230839996896ull}}, {{5746283070669672219ull, 7003170569369512817ull, 1547007837632132407ull, 2909909038549996121ull}}, {{11794539856764478178ull, 4142277193284503117ull, 6545445815467553413ull, 3637386298187495151ull}}, {{908116765673434010ull, 9789532510033016801ull, 3570121250907053862ull, 4546732872734368939ull}}, {{12096788024614366017ull, 1506771800343247596ull, 18372226846312766328ull, 2841708045458980586ull}}, {{15120985030767957521ull, 1883464750429059495ull, 13741911521036182102ull, 3552135056823725733ull}}, {{14289545270032558997ull, 11577702974891100177ull, 3342331346013063915ull, 4440168821029657167ull}}, {{2013436766129267517ull, 4930221350093243659ull, 9006486118899246803ull, 2775105513143535729ull}}, {{16351854012943748108ull, 1551090669189166669ull, 15869793667051446408ull, 3468881891429419661ull}}, {{6604759460897521423ull, 1938863336486458337ull, 6002184028532144298ull, 4336102364286774577ull}}, {{15657189709129420650ull, 5823475603731424364ull, 15280580063901059946ull, 2710063977679234110ull}}, {{1124743062702224196ull, 16502716541519056264ull, 9877353043021549124ull, 3387579972099042638ull}}, {{1405928828377780245ull, 2181651603189268714ull, 3123319266922160598ull, 4234474965123803298ull}}, {{5490391536163500557ull, 15198590307275456658ull, 6563760560253738277ull, 2646546853202377061ull}}, {{16086361457059151504ull, 5163179828812157110ull, 12816386718744560751ull, 3308183566502971326ull}}, {{10884579784469163572ull, 1842288767587808484ull, 6797111361575925131ull, 4135229458128714158ull}}, {{16026234402148003041ull, 17292331544238237966ull, 18083252656267116918ull, 2584518411330446348ull}}, {{10809420965830227993ull, 12392042393443021650ull, 4157321746624344532ull, 3230648014163057936ull}}, {{4288404170433009183ull, 15490052991803777063ull, 5196652183280430665ull, 4038310017703822420ull}}, {{9597781634161712596ull, 2763754092236278808ull, 12471279651405044974ull, 2523943761064889012ull}}, {{11997227042702140744ull, 12678064652150124318ull, 15589099564256306217ull, 3154929701331111265ull}}, {{5773161766522900122ull, 2012522759905491686ull, 5651316400038219060ull, 3943662126663889082ull}}, {{17443284159358976289ull, 10481198761795708111ull, 8143758768451274816ull, 2464788829164930676ull}}, {{17192419180771332457ull, 13101498452244635139ull, 10179698460564093520ull, 3080986036456163345ull}}, {{16878837957536777667ull, 16376873065305793924ull, 17336309094132504804ull, 3851232545570204181ull}}, {{1325901686605710234ull, 1012173628961345395ull, 13141036193046509455ull, 2407020340981377613ull}}, {{15492435163539301504ull, 15100275091483845455ull, 2591237186025973106ull, 3008775426226722017ull}}, {{14753857935996738976ull, 9651971827500031011ull, 7850732500959854287ull, 3760969282783402521ull}}, {{6915318200784267908ull, 12950011419828601238ull, 16435922859168378689ull, 2350605801739626575ull}}, {{17867519787835110693ull, 2352456219503587835ull, 15933217555533085458ull, 2938257252174533219ull}}, {{17722713716366500462ull, 12163942311234260602ull, 15304835925988968918ull, 3672821565218166524ull}}, {{12930020108603349770ull, 5981555852188049945ull, 684300833776659532ull, 4591026956522708156ull}}, {{1163733540236011750ull, 12961844444472307024ull, 9651060057965188015ull, 2869391847826692597ull}}, {{1454666925295014688ull, 11590619537162995876ull, 16675511090883872923ull, 3586739809783365746ull}}, {{1818333656618768360ull, 9876588403026356941ull, 11621016826750065346ull, 4483424762229207183ull}}, {{3442301544600424177ull, 10784553770318860992ull, 14180664544359872697ull, 2802140476393254489ull}}, {{4302876930750530221ull, 18092378231325964144ull, 3890772625167677159ull, 3502675595491568112ull}}, {{5378596163438162776ull, 18003786770730067276ull, 4863465781459596449ull, 4378344494364460140ull}}, {{12584994639003627543ull, 4334837704065210191ull, 12263038150267023589ull, 2736465308977787587ull}}, {{11119557280327146525ull, 10030233148508900643ull, 10717111669406391582ull, 3420581636222234484ull}}, {{9287760581981545252ull, 3314419398781349996ull, 13396389586757989478ull, 4275727045277793105ull}}, {{15028222400593241591ull, 15906570179520507459ull, 1455214464082661567ull, 2672329403298620691ull}}, {{14173591982314164084ull, 15271526705973246420ull, 15654076135385490671ull, 3340411754123275863ull}}, {{17716989977892705105ull, 14477722364039170121ull, 14955909150804475435ull, 4175514692654094829ull}}, {{4155589708541858835ull, 6742733468310787374ull, 11653286228466491099ull, 2609696682908809268ull}}, {{14417859172532099352ull, 3816730816961096313ull, 14566607785583113874ull, 3262120853636011585ull}}, {{4187265910382960477ull, 13994285558056146200ull, 4373201676696728630ull, 4077651067045014482ull}}, {{2617041193989350299ull, 4134742455357703471ull, 7344937066362843298ull, 2548531916903134051ull}}, {{17106359547768851585ull, 14391800106051905146ull, 4569485314526166218ull, 3185664896128917564ull}}, {{12159577397856288673ull, 8766378095710105625ull, 5711856643157707773ull, 3982081120161146955ull}}, {{682206846019098565ull, 7784829319032509968ull, 1264067392759873406ull, 2488800700100716847ull}}, {{852758557523873206ull, 507664611935861652ull, 15415142296232005470ull, 3111000875125896058ull}}, {{1065948196904841508ull, 9857952801774602873ull, 10045555833435231029ull, 3888751093907370073ull}}, {{12195432669133995702ull, 8467063510322820747ull, 17807687441965489153ull, 2430469433692106295ull}}, {{10632604817990106724ull, 15195515406330913838ull, 17647923284029473537ull, 3038086792115132869ull}}, {{4067383985632857597ull, 5159336202631478586ull, 8224846049754678210ull, 3797608490143916087ull}}, {{7153801009447923902ull, 7836271145072062020ull, 12058057808737755737ull, 2373505306339947554ull}}, {{8942251261809904878ull, 14407024949767465429ull, 5849200224067418863ull, 2966881632924934443ull}}, {{15789500095689769001ull, 13397095168781943882ull, 2699814261656885675ull, 3708602041156168054ull}}, {{14480123578233493530ull, 6067341471275020974ull, 15522441968817717259ull, 2317876275722605033ull}}, {{8876782435937091104ull, 2972490820666388314ull, 5567994405739982862ull, 2897345344653256292ull}}, {{1872606008066588072ull, 12938985562687761201ull, 6959993007174978577ull, 3621681680816570365ull}}, {{6952443528510622994ull, 2338673898077537789ull, 13311677277396111126ull, 4527102101020712956ull}}, {{6651120214532833323ull, 15296729241580624830ull, 17543170335227345261ull, 2829438813137945597ull}}, {{17537272305020817462ull, 5285853496693617325ull, 8093904863752017865ull, 3536798516422431997ull}}, {{8086532325993858115ull, 11219002889294409561ull, 14729067098117410235ull, 4420998145528039996ull}}, {{16583297749814631082ull, 4706033796595312023ull, 18429038973178157205ull, 2763123840955024997ull}}, {{16117436168840900949ull, 10494228264171527933ull, 9201240661190532794ull, 3453904801193781247ull}}, {{6311737155768962474ull, 3894413293359634109ull, 6889864808060778089ull, 4317381001492226559ull}}, {{6250678731569295498ull, 13963223354418241078ull, 11223694532679068161ull, 2698363125932641599ull}}, {{17036720451316395181ull, 3618971137740637635ull, 9417932147421447298ull, 3372953907415801999ull}}, {{16684214545718106072ull, 13747085959030572852ull, 7160729165849421218ull, 4216192384269752499ull}}, {{1204262054219040487ull, 13203614742821495937ull, 2169612719442194309ull, 2635120240168595312ull}}, {{6117013586201188513ull, 2669460373244706209ull, 2712015899302742887ull, 3293900300210744140ull}}, {{12257953001178873545ull, 17171883521838046473ull, 3390019874128428608ull, 4117375375263430175ull}}, {{743691598095714110ull, 10732427201148779046ull, 9036291448971349736ull, 2573359609539643859ull}}, {{10152986534474418445ull, 13415534001435973807ull, 6683678292786799266ull, 3216699511924554824ull}}, {{8079547149665635152ull, 7546045464940191451ull, 8354597865983499083ull, 4020874389905693530ull}}, {{2743873959327328018ull, 2410435406373925705ull, 9833309684667074831ull, 2513046493691058456ull}}, {{8041528467586547927ull, 16848102313249570843ull, 12291637105833843538ull, 3141308117113823070ull}}, {{5440224566055797004ull, 11836755854707187746ull, 6141174345437528615ull, 3926635146392278838ull}}, {{8011826372212261032ull, 14315501436833074197ull, 17673292021180619096ull, 2454146966495174273ull}}, {{14626468983692714194ull, 17894376796041342746ull, 8256556971193610158ull, 3067683708118967842ull}}, {{9059714192761116934ull, 13144598958196902625ull, 1097324177137236890ull, 3834604635148709803ull}}, {{17191536416544167844ull, 12827060367300452044ull, 16826728675206630720ull, 2396627896967943626ull}}, {{3042676446970658189ull, 16033825459125565056ull, 11810038807153512592ull, 2995784871209929533ull}}, {{3803345558713322736ull, 1595537750197404704ull, 927490453659727029ull, 3744731089012411917ull}}, {{2377090974195826710ull, 3303054103087071892ull, 2885524542751023345ull, 2340456930632757448ull}}, {{2971363717744783387ull, 8740503647286227769ull, 3606905678438779181ull, 2925571163290946810ull}}, {{8325890665608367138ull, 15537315577535172615ull, 13732004134903249784ull, 3656963954113683512ull}}, {{5795677313583071019ull, 974900398209414153ull, 17165005168629062231ull, 4571204942642104390ull}}, {{15151513367057889147ull, 7526841776521965701ull, 6116442211965775990ull, 2857003089151315244ull}}, {{5104333653540197721ull, 185180183797681319ull, 7645552764957219988ull, 3571253861439144055ull}}, {{1768731048497859248ull, 231475229747101649ull, 4945254937769137081ull, 4464067326798930069ull}}, {{12634671951379631790ull, 11673887064660408290ull, 5396627345319404627ull, 2790042079249331293ull}}, {{6569967902369763929ull, 9980672812398122459ull, 11357470200076643688ull, 3487552599061664116ull}}, {{3600773859534817007ull, 12475841015497653074ull, 14196837750095804610ull, 4359440748827080145ull}}, {{6862169680636648534ull, 12409086653113421075ull, 1955494566168796025ull, 2724650468016925091ull}}, {{3966026082368422763ull, 1676300261109612632ull, 16279426262993158744ull, 3405813085021156363ull}}, {{4957532602960528454ull, 2095375326387015790ull, 15737596810314060526ull, 4257266356276445454ull}}, {{16933515932132493996ull, 15144667634274048580ull, 5224311988018899924ull, 2660791472672778409ull}}, {{2720150841456065879ull, 484090469133009110ull, 11142076003451012810ull, 3325989340840973011ull}}, {{12623560588674858156ull, 9828485123271037195ull, 9315908985886378108ull, 4157486676051216264ull}}, {{5583882358708092396ull, 15366175238899174055ull, 5822443116178986317ull, 2598429172532010165ull}}, {{2368166929957727591ull, 5372660993341803857ull, 11889739913651120801ull, 3248036465665012706ull}}, {{7571894680874547392ull, 11327512260104642725ull, 5638802855209125193ull, 4060045582081265883ull}}, {{7038277184760286072ull, 162166134924319847ull, 1218408775292009294ull, 2537528488800791177ull}}, {{4186160462522969686ull, 9426079705510175617ull, 6134696987542399521ull, 3171910611000988971ull}}, {{9844386596581100012ull, 16394285650315107425ull, 3056685216000611497ull, 3964888263751236214ull}}, {{17681956668931657268ull, 3328899503805860284ull, 15745486315282545898ull, 2478055164844522633ull}}, {{3655701762455019968ull, 13384496416612101164ull, 5846799838821018660ull, 3097568956055653292ull}}, {{4569627203068774960ull, 16730620520765126455ull, 7308499798526273325ull, 3871961195069566615ull}}, {{9773546029559066206ull, 12762480834691897986ull, 11485341401720002684ull, 2419975746918479134ull}}, {{2993560500094056950ull, 15953101043364872483ull, 5133304715295227547ull, 3024969683648098918ull}}, {{17577008680399734899ull, 15329690285778702699ull, 15640002930973810242ull, 3781212104560123647ull}}, {{8679787416036140360ull, 14192742447039077091ull, 16692530859499713257ull, 2363257565350077279ull}}, {{6238048251617787546ull, 3905870003516682652ull, 16253977555947253668ull, 2954071956687596599ull}}, {{7797560314522234432ull, 4882337504395853315ull, 15705785926506679181ull, 3692589945859495749ull}}, {{2567632187362702568ull, 5357303949461102274ull, 12121959213280368440ull, 2307868716162184843ull}}, {{12432912271058154018ull, 6696629936826377842ull, 10540762998173072646ull, 2884835895202731054ull}}, {{6317768301967916715ull, 17594159457887748111ull, 3952581710861564999ull, 3606044869003413818ull}}, {{3285524359032507990ull, 17381013303932297235ull, 14164099175431732057ull, 4507556086254267272ull}}, {{18194353788891175158ull, 3945604287316603915ull, 8852561984644832536ull, 2817222553908917045ull}}, {{18131256217686581043ull, 4932005359145754894ull, 15677388499233428574ull, 3521528192386146306ull}}, {{13440698235253450496ull, 15388378735786969426ull, 10373363587187009909ull, 4401910240482682883ull}}, {{13012122415460794464ull, 11923579719080549843ull, 4177509232778187241ull, 2751193900301676802ull}}, {{11653467000898605176ull, 1069416593568523592ull, 14445258577827509860ull, 3438992375377096002ull}}, {{14566833751123256470ull, 1336770741960654490ull, 8833201185429611517ull, 4298740469221370003ull}}, {{13715957112879423198ull, 3141324722939103008ull, 3214907731679813246ull, 2686712793263356252ull}}, {{17144946391099278997ull, 13150027940528654568ull, 4018634664599766557ull, 3358390991579195315ull}}, {{2984438915164547130ull, 2602476870378654499ull, 411607312322320293ull, 4197988739473994144ull}}, {{18006175386473699620ull, 3932391053200353013ull, 257254570201450183ull, 2623742962171246340ull}}, {{8672661177809960813ull, 303802798073053363ull, 321568212751812729ull, 3279678702714057925ull}}, {{6229140453835063113ull, 4991439516018704608ull, 5013646284367153815ull, 4099598378392572406ull}}, {{3893212783646914446ull, 10037178725152772236ull, 16968586983011634846ull, 2562248986495357753ull}}, {{4866515979558643057ull, 3323101369586189487ull, 7375675673482379846ull, 3202811233119197192ull}}, {{1471458956020915917ull, 13377248748837512667ull, 9219594591852974807ull, 4003514041398996490ull}}, {{17060562912008930112ull, 15278309495664527272ull, 10373932638335497158ull, 2502196275874372806ull}}, {{2878959566301611024ull, 9874514832725883283ull, 3744043761064595640ull, 3127745344842966008ull}}, {{17433757513159177492ull, 12343143540907354103ull, 4680054701330744550ull, 3909681681053707510ull}}, {{17813627473365567789ull, 3102778694639708410ull, 16760092243613879056ull, 2443551050658567193ull}}, {{13043662304852183928ull, 3878473368299635513ull, 7115057249235185108ull, 3054438813323208992ull}}, {{2469519825783066198ull, 4848091710374544392ull, 8893821561543981385ull, 3818048516654011240ull}}, {{1543449891114416374ull, 14559272365052560005ull, 5558638475964988365ull, 2386280322908757025ull}}, {{6540998382320408371ull, 4364032401033536294ull, 11559984113383623361ull, 2982850403635946281ull}}, {{17399620014755286272ull, 10066726519719308271ull, 614922086447365489ull, 3728563004544932852ull}}, {{17792291536863135776ull, 17820919120893037429ull, 9607698340884379238ull, 2330351877840583032ull}}, {{8405306365796756008ull, 13052776864261520979ull, 12009622926105474048ull, 2912939847300728790ull}}, {{5894946938818557106ull, 16315971080326901224ull, 5788656620777066752ull, 3641174809125910988ull}}, {{7368683673523196382ull, 1948219776699074914ull, 7235820775971333441ull, 4551468511407388735ull}}, {{9217113314379385643ull, 12746852406505391581ull, 11439917012623165256ull, 2844667819629617959ull}}, {{16133077661401619958ull, 15933565508131739476ull, 9688210247351568666ull, 3555834774537022449ull}}, {{1719603003042473331ull, 10693584848309898538ull, 16721948827616848737ull, 4444793468171278061ull}}, {{5686437895328933736ull, 18212705576262156346ull, 12757061026474224412ull, 2777995917607048788ull}}, {{16331419406015942978ull, 4319137896618143816ull, 15946326283092780516ull, 3472494897008810985ull}}, {{1967530183810377106ull, 5398922370772679771ull, 6097849798583811933ull, 4340618621261013732ull}}, {{17370607429377343356ull, 5680169490946618808ull, 13034528160969658266ull, 2712886638288133582ull}}, {{3266515213012127578ull, 16323583900538049319ull, 7069788164357297024ull, 3391108297860166978ull}}, {{17918202071547323185ull, 1957735801963010032ull, 18060607242301397089ull, 4238885372325208722ull}}, {{11198876294717076991ull, 12752799922295351030ull, 15899565544865761084ull, 2649303357703255451ull}}, {{4775223331541570430ull, 15940999902869188788ull, 15262770912654813451ull, 3311629197129069314ull}}, {{5969029164426963038ull, 15314563860159098081ull, 9855091603963741006ull, 4139536496411336643ull}}, {{15259858273835321659ull, 4959916394172048396ull, 3853589243263644177ull, 2587210310257085402ull}}, {{628078768584600457ull, 10811581511142448400ull, 14040358590934331029ull, 3234012887821356752ull}}, {{785098460730750572ull, 18126162907355448404ull, 17550448238667913786ull, 4042516109776695940ull}}, {{9714058574811494915ull, 15940537835524543156ull, 1745658112312670308ull, 2526572568610434963ull}}, {{12142573218514368644ull, 1478928220696127329ull, 16017130695673001598ull, 3158215710763043703ull}}, {{1343158467860797093ull, 11072032312724934970ull, 15409727351163864093ull, 3947769638453804629ull}}, {{5451160060840386087ull, 9225863204666778308ull, 11936922603691109010ull, 2467356024033627893ull}}, {{6813950076050482609ull, 2308956968978697077ull, 1086095199331722551ull, 3084195030042034867ull}}, {{13129123613490491165ull, 16721254266505535058ull, 15192677054446816900ull, 3855243787552543583ull}}, {{12817388276858944882ull, 1227411879711183603ull, 16412952186670342419ull, 2409527367220339739ull}}, {{11410049327646293199ull, 15369322904921143216ull, 15904504214910540119ull, 3011909209025424674ull}}, {{14262561659557866498ull, 14599967612724041116ull, 10657258231783399341ull, 3764886511281780843ull}}, {{18137473074078442370ull, 11430822767166219649ull, 4354943385650930636ull, 2353054069551113027ull}}, {{8836783287315889250ull, 14288528458957774562ull, 831993213636275391ull, 2941317586938891284ull}}, {{1822607072290085754ull, 13248974555269830299ull, 1039991517045344239ull, 3676646983673614105ull}}, {{16113316895644770905ull, 11949532175659899969ull, 5911675414734068203ull, 4595808729592017631ull}}, {{3153294032136899960ull, 5162614600573743529ull, 10612326161849874483ull, 2872380455995011019ull}}, {{8553303558598512854ull, 1841582232289791507ull, 8653721683884955200ull, 3590475569993763774ull}}, {{6079943429820753163ull, 2301977790362239384ull, 1593780068001418192ull, 4488094462492204718ull}}, {{3799964643637970727ull, 1438736118976399615ull, 14831170597783050082ull, 2805059039057627948ull}}, {{138269786120075505ull, 11021792185575275327ull, 92219173519260986ull, 3506323798822034936ull}}, {{14007895287932258093ull, 4553868195114318350ull, 115273966899076233ull, 4382904748527543670ull}}, {{4143248536530273404ull, 14375382668014918729ull, 13907104284594086357ull, 2739315467829714793ull}}, {{9790746689090229659ull, 4134170279736484699ull, 3548822300460444235ull, 3424144334787143492ull}}, {{7626747342935399170ull, 556026831243217970ull, 4436027875575555294ull, 4280180418483929365ull}}, {{9378403107762012385ull, 14182574824809174943ull, 5078360431448416010ull, 2675112761552455853ull}}, {{7111317866275127577ull, 8504846494156692871ull, 10959636557737907917ull, 3343890951940569816ull}}, {{4277461314416521568ull, 15242744136123253993ull, 13699545697172384896ull, 4179863689925712270ull}}, {{14202628367578795740ull, 9526715085077033745ull, 3950530042305352656ull, 2612414806203570169ull}}, {{3918227404191330963ull, 11908393856346292182ull, 9549848571309078724ull, 3265518507754462711ull}}, {{14121156292093939511ull, 14885492320432865227ull, 7325624695708960501ull, 4081898134693078389ull}}, {{6519879673345018243ull, 11609275709484234719ull, 6884358444031794265ull, 2551186334183173993ull}}, {{3538163573253884899ull, 676536581573129687ull, 13217134073467130736ull, 3188982917728967491ull}}, {{18257762521849519836ull, 845670726966412108ull, 11909731573406525516ull, 3986228647161209364ull}}, {{2187729539301174090ull, 9751916241208783376ull, 16666954270233854255ull, 2491392904475755852ull}}, {{2734661924126467612ull, 7578209283083591316ull, 2386948764082766203ull, 3114241130594694816ull}}, {{3418327405158084515ull, 4861075585427101241ull, 2983685955103457754ull, 3892801413243368520ull}}, {{13665669674292272582ull, 7649858259319326179ull, 1864803721939661096ull, 2433000883277105325ull}}, {{12470401074437952823ull, 9562322824149157724ull, 6942690670851964274ull, 3041251104096381656ull}}, {{15588001343047441029ull, 2729531493331671347ull, 8678363338564955343ull, 3801563880120477070ull}}, {{7436657830190956691ull, 8623486210973376448ull, 812291068175709185ull, 2375977425075298169ull}}, {{9295822287738695864ull, 15391043782144108464ull, 5627049853647024385ull, 2969971781344122711ull}}, {{11619777859673369830ull, 5403746672397971868ull, 2422126298631392578ull, 3712464726680153389ull}}, {{16485733199150631952ull, 7989027688676120321ull, 3819671945858314313ull, 2320290454175095868ull}}, {{6772108443656126228ull, 14597970629272538306ull, 4774589932322892891ull, 2900363067718869835ull}}, {{17688507591424933593ull, 13635777268163284978ull, 1356551396976228210ull, 3625453834648587294ull}}, {{12887262452426391183ull, 7821349548349330415ull, 10919061283075061071ull, 4531817293310734117ull}}, {{14972068060407576345ull, 11805872495359413365ull, 9130256311135607121ull, 2832385808319208823ull}}, {{4880027020227306720ull, 922282563917102995ull, 6801134370492120998ull, 3540482260399011029ull}}, {{1488347756856745495ull, 10376225241751154552ull, 13113103981542539151ull, 4425602825498763786ull}}, {{930217348035465935ull, 13402669803735553451ull, 12807376006891474873ull, 2766001765936727366ull}}, {{14997829740326496130ull, 2918279199387278101ull, 6785847971759567784ull, 3457502207420909208ull}}, {{4912229120125956451ull, 3647848999234097627ull, 8482309964699459730ull, 4321877759276136510ull}}, {{764300190865028830ull, 6891591642948698921ull, 689757709509774427ull, 2701173599547585319ull}}, {{5567061257008673941ull, 4002803535258485747ull, 14697255192169381746ull, 3376466999434481648ull}}, {{2347140552833454522ull, 14226876455927882992ull, 18371568990211727182ull, 4220583749293102060ull}}, {{1466962845520909077ull, 4280111766527538966ull, 2258858582027553681ull, 2637864843308188788ull}}, {{11057075593755912154ull, 9961825726586811611ull, 2823573227534442101ull, 3297331054135235985ull}}, {{9209658473767502288ull, 17063968176660902418ull, 8141152552845440530ull, 4121663817669044981ull}}, {{10367722564532076834ull, 15276666128840451915ull, 7394063354742094283ull, 2576039886043153113ull}}, {{8347967187237708139ull, 14484146642623176990ull, 13854265211855005758ull, 3220049857553941391ull}}, {{1211586947192359365ull, 8881811266424195430ull, 12706145496391369294ull, 4025062321942426739ull}}, {{14592299897277388315ull, 939446023087734239ull, 5635497926030911857ull, 2515663951214016712ull}}, {{13628688853169347490ull, 5785993547287055703ull, 7044372407538639821ull, 3144579939017520890ull}}, {{12424175048034296459ull, 11844177952536207533ull, 18028837546278075584ull, 3930724923771901112ull}}, {{10070952414235129239ull, 7402611220335129708ull, 11268023466423797240ull, 2456703077357438195ull}}, {{12588690517793911548ull, 9253264025418912135ull, 9473343314602358646ull, 3070878846696797744ull}}, {{11124177128815001531ull, 2343207994918864361ull, 11841679143252948308ull, 3838598558370997180ull}}, {{35081677868294101ull, 10687877033679066034ull, 16624421501387868500ull, 2399124098981873237ull}}, {{9267224134190143434ull, 13359846292098832542ull, 6945468821452671913ull, 2998905123727341547ull}}, {{2360658130882903485ull, 2864749809841376966ull, 4070150008388451988ull, 3748631404659176934ull}}, {{15310469387083978390ull, 11013840668005636411ull, 16378901810524946204ull, 2342894627911985583ull}}, {{14526400715427585084ull, 13767300835007045514ull, 15861941244728794851ull, 2928618284889981979ull}}, {{8934628857429705547ull, 12597440025331418989ull, 15215740537483605660ull, 3660772856112477474ull}}, {{15779972090214519837ull, 15746800031664273736ull, 9796303634999731267ull, 4575966070140596843ull}}, {{9862482556384074898ull, 7535907010576477133ull, 3816846762661138090ull, 2859978793837873027ull}}, {{16939789213907481527ull, 196511726365820608ull, 159372434899034709ull, 3574973492297341284ull}}, {{2727992443674800292ull, 4857325676384663665ull, 199215543623793386ull, 4468716865371676605ull}}, {{13234210323365219943ull, 7647514566167802694ull, 2430352723978564818ull, 2792948040857297878ull}}, {{7319390867351749121ull, 336021170854977560ull, 12261312941827981831ull, 3491185051071622347ull}}, {{9149238584189686401ull, 14255084518850885662ull, 10714955158857589384ull, 4363981313839527934ull}}, {{1106588096691166097ull, 8909427824281803539ull, 2085160955858605461ull, 2727488321149704959ull}}, {{15218293176146121333ull, 15748470798779642327ull, 16441509250105420538ull, 3409360401437131198ull}}, {{14411180451755263762ull, 10462216461619777101ull, 11328514525776999865ull, 4261700501796413998ull}}, {{11312830791560733803ull, 18068100334580830448ull, 2468635560183237011ull, 2663562813622758749ull}}, {{14141038489450917254ull, 17973439399798650156ull, 7697480468656434168ull, 3329453517028448436ull}}, {{17676298111813646567ull, 4020055176038761079ull, 9621850585820542711ull, 4161816896285560545ull}}, {{17965215347524610961ull, 9430063512665307530ull, 17542871662206308954ull, 2601135560178475340ull}}, {{13233147147550987893ull, 2564207353976858605ull, 3481845504048334577ull, 3251419450223094176ull}}, {{2706375879156571154ull, 7816945210898461161ull, 4352306880060418221ull, 4064274312778867720ull}}, {{13220699970541326731ull, 7191433766025232177ull, 2720191800037761388ull, 2540171445486792325ull}}, {{2690816907894494702ull, 8989292207531540222ull, 8011925768474589639ull, 3175214306858490406ull}}, {{12586893171722894185ull, 6624929240987037373ull, 791535173738461241ull, 3969017883573113008ull}}, {{10172651241540502818ull, 15669795821685368118ull, 494709483586538275ull, 2480636177233195630ull}}, {{3492442015070852714ull, 14975558758679322244ull, 9841758891337948652ull, 3100795221541494537ull}}, {{4365552518838565893ull, 272704374639601189ull, 16913884632599823720ull, 3875994026926868171ull}}, {{5034313333487797635ull, 170440234149750743ull, 8265334886161195873ull, 2422496266829292607ull}}, {{1681205648432359140ull, 4824736311114576333ull, 5719982589274106937ull, 3028120333536615759ull}}, {{6713193078967836829ull, 10642606407320608320ull, 2538292218165245767ull, 3785150416920769699ull}}, {{4195745674354898018ull, 13569158032216462056ull, 17727333700849136268ull, 2365719010575481061ull}}, {{5244682092943622523ull, 16961447540270577570ull, 8324109070779256623ull, 2957148763219351327ull}}, {{15779224653034303961ull, 16590123406910834058ull, 5793450320046682875ull, 3696435954024189159ull}}, {{14473701426573827880ull, 8062984120105577334ull, 10538435477670258653ull, 2310272471265118224ull}}, {{8868754746362509042ull, 14690416168559359572ull, 13173044347087823316ull, 2887840589081397780ull}}, {{11085943432953136302ull, 18363020210699199465ull, 16466305433859779145ull, 3609800736351747225ull}}, {{22371235909256665ull, 9118717208091835620ull, 6747823737042560220ull, 4512250920439684032ull}}, {{9237354059298061224ull, 14922570291912173070ull, 4217389835651600137ull, 2820156825274802520ull}}, {{2323320537267800722ull, 4818154809608052626ull, 5271737294564500172ull, 3525196031593503150ull}}, {{12127522708439526710ull, 6022693512010065782ull, 15813043655060401023ull, 4406495039491878937ull}}, {{2968015674347316290ull, 10681712472647372970ull, 2965623256771668783ull, 2754059399682424336ull}}, {{12933391629788921171ull, 8740454572381828308ull, 3707029070964585979ull, 3442574249603030420ull}}, {{16166739537236151463ull, 6313882197049897481ull, 4633786338705732474ull, 4303217812003788025ull}}, {{3186683183131512809ull, 8557862391583573830ull, 14425331507759552556ull, 2689511132502367515ull}}, {{13206726015769166819ull, 10697327989479467287ull, 13419978366272052791ull, 3361888915627959394ull}}, {{11896721501284070619ull, 8759973968421946205ull, 7551600920985290181ull, 4202361144534949243ull}}, {{9741293947516238089ull, 7780826739477410330ull, 2413907566402112411ull, 2626475715334343277ull}}, {{2953245397540521803ull, 5114347405919375009ull, 7629070476430028418ull, 3283094644167929096ull}}, {{8303242765353040158ull, 15616306294253994569ull, 9536338095537535522ull, 4103868305209911370ull}}, {{16718741774414119859ull, 14371877452336134509ull, 10571897328138347605ull, 2564917690756194606ull}}, {{7063369162735486112ull, 4129788760138004425ull, 3991499623318158699ull, 3206147113445243258ull}}, {{13440897471846745543ull, 550549931745117627ull, 14212746566002474182ull, 4007683891806554072ull}}, {{6094717910690522013ull, 14179151762622862229ull, 8882966603751546363ull, 2504802432379096295ull}}, {{12230083406790540420ull, 13112253684851189882ull, 6492022236262045050ull, 3131003040473870369ull}}, {{6064232221633399717ull, 7166945069209211545ull, 12726713813754944217ull, 3913753800592337961ull}}, {{15319360184589344583ull, 16008555714324226975ull, 1036667105955758279ull, 2446096125370211226ull}}, {{14537514212309292825ull, 15399008624477895815ull, 10519205919299473657ull, 3057620156712764032ull}}, {{13560206746959228127ull, 5413702725315206057ull, 13149007399124342072ull, 3822025195890955040ull}}, {{1557600189208435723ull, 3383564203322003786ull, 8218129624452713795ull, 2388765747431846900ull}}, {{11170372273365320462ull, 18064513309434668444ull, 10272662030565892243ull, 2985957184289808625ull}}, {{13962965341706650578ull, 17968955618365947651ull, 17452513556634753208ull, 3732446480362260781ull}}, {{6421010329352962659ull, 11230597261478717282ull, 13213663982110414707ull, 2332779050226412988ull}}, {{17249634948545979132ull, 9426560558421008698ull, 16517079977638018384ull, 2915973812783016235ull}}, {{12338671648827698107ull, 11783200698026260873ull, 16034663953620135076ull, 3644967265978770294ull}}, {{1588281505752458921ull, 14729000872532826092ull, 10819957905170393037ull, 4556209082473462868ull}}, {{10216047977950062634ull, 11511468554546710259ull, 15985845727586271456ull, 2847630676545914292ull}}, {{8158373954010190388ull, 14389335693183387824ull, 1535563085773287704ull, 3559538345682392866ull}}, {{10197967442512737985ull, 17986669616479234780ull, 11142825894071385438ull, 4449422932102991082ull}}, {{15597101688425237049ull, 6629982491872133833ull, 11575952202222003803ull, 2780889332564369426ull}}, {{5661319055249382599ull, 3675792096412779388ull, 5246568215922728946ull, 3476111665705461783ull}}, {{7076648819061728249ull, 13818112157370750043ull, 1946524251476023278ull, 4345139582131827229ull}}, {{2117062502699886204ull, 4024634079929330873ull, 3522420666386208501ull, 2715712238832392018ull}}, {{7258014146802245659ull, 9642478618339051495ull, 13626397869837536434ull, 3394640298540490022ull}}, {{4460831665075419169ull, 2829726236069038561ull, 7809625300442144735ull, 4243300373175612528ull}}, {{14317234836740606741ull, 8686107925184230956ull, 4881015812776340459ull, 2652062733234757830ull}}, {{17896543545925758426ull, 6245948888052900791ull, 15324641802825201382ull, 3315078416543447287ull}}, {{17758993413979810128ull, 17030808146920901797ull, 14544116235104113823ull, 4143848020679309109ull}}, {{13405213892951075282ull, 17561784119466645479ull, 11395915656153765091ull, 2589905012924568193ull}}, {{12144831347761456199ull, 17340544130905918945ull, 409836514910042652ull, 3237381266155710242ull}}, {{1345981129419656536ull, 3228936089922847066ull, 9735667680492329124ull, 4046726582694637802ull}}, {{5452924224314673239ull, 11241457093056555224ull, 10696478318735093606ull, 2529204114184148626ull}}, {{6816155280393341549ull, 4828449329465918222ull, 4147225861564091200ull, 3161505142730185783ull}}, {{17743566137346452744ull, 6035561661832397777ull, 572346308527726096ull, 3951881428412732229ull}}, {{4172199808200451109ull, 3772226038645248611ull, 2663559452043522762ull, 2469925892757957643ull}}, {{603563741823175983ull, 13938654585161336572ull, 17164507370336567164ull, 3087407365947447053ull}}, {{754454677278969978ull, 17423318231451670715ull, 7620576157638545243ull, 3859259207434308817ull}}, {{16612435237795213901ull, 8583730885443600244ull, 16292075144592560537ull, 2412037004646443010ull}}, {{2318799973534465760ull, 15341349625231888210ull, 11141721893885924863ull, 3015046255808053763ull}}, {{12121872003772858007ull, 14565001013112472358ull, 9315466348930018175ull, 3768807819760067204ull}}, {{2964483983930648351ull, 16020654660836377080ull, 15045538504936037167ull, 2355504887350042002ull}}, {{3705604979913310438ull, 15414132307618083446ull, 9583551094315270651ull, 2944381109187552503ull}}, {{13855378261746413856ull, 14655979366095216403ull, 7367752849466700410ull, 3680476386484440629ull}}, {{12707536808755629416ull, 9096602170764244696ull, 13821377080260763417ull, 4600595483105550786ull}}, {{7942210505472268385ull, 17214591402796122695ull, 13250046693590365039ull, 2875372176940969241ull}}, {{5316077113412947577ull, 16906553235067765465ull, 2727500311705792587ull, 3594215221176211552ull}}, {{11256782410193572375ull, 16521505525407318927ull, 3409375389632240734ull, 4492769026470264440ull}}, {{13953018034012064591ull, 5714254934952186425ull, 2130859618520150459ull, 2807980641543915275ull}}, {{3606214487232917026ull, 2531132650262845128ull, 16498632578432351786ull, 3509975801929894093ull}}, {{4507768109041146283ull, 12387287849683332218ull, 6788232667758276020ull, 4387469752412367617ull}}, {{7429041086578104331ull, 16965426942906858444ull, 15771860463417392272ull, 2742168595257729760ull}}, {{9286301358222630413ull, 2760039604924021439ull, 1268081505562188725ull, 3427710744072162201ull}}, {{6996190679350900113ull, 8061735524582414703ull, 6196787900380123810ull, 4284638430090202751ull}}, {{11290148202235394427ull, 9650270721291397093ull, 10790521465378659237ull, 2677899018806376719ull}}, {{277627197512079321ull, 16674524420041634271ull, 8876465813295936142ull, 3347373773507970899ull}}, {{14182092052172262863ull, 11619783488197267030ull, 6483896248192532274ull, 4184217216884963624ull}}, {{4252121514180276386ull, 11874050698550679798ull, 4052435155120332671ull, 2615135760553102265ull}}, {{14538523929580121290ull, 10230877354760961843ull, 9677229962327803743ull, 3268919700691377831ull}}, {{13561468893547763708ull, 8176910675023814400ull, 7484851434482366775ull, 4086149625864222289ull}}, {{8475918058467352318ull, 12028098199530965856ull, 16207247192619948994ull, 2553843516165138930ull}}, {{10594897573084190397ull, 5811750712558931512ull, 11035686953920160435ull, 3192304395206423663ull}}, {{13243621966355237997ull, 2653002372271276486ull, 9182922673972812640ull, 3990380494008029579ull}}, {{3665577710544635844ull, 1658126482669547804ull, 3433483662019313948ull, 2493987808755018487ull}}, {{4581972138180794805ull, 2072658103336934755ull, 18126912632806306147ull, 3117484760943773108ull}}, {{1115779154298605602ull, 16425880684453332156ull, 4211896717298331067ull, 3896855951179716386ull}}, {{9920734008291404309ull, 7960332418569638645ull, 7244121466738844821ull, 2435534969487322741ull}}, {{17012603528791643291ull, 14562101541639436210ull, 13666837851850943930ull, 3044418711859153426ull}}, {{12042382374134778305ull, 8979254890194519455ull, 7860175277958904105ull, 3805523389823941783ull}}, {{14444018011475318297ull, 17141249352440044419ull, 11830138576365396921ull, 2378452118639963614ull}}, {{13443336495916759967ull, 7591503635267891812ull, 5564301183601970344ull, 2973065148299954518ull}}, {{16804170619895949959ull, 9489379544084864765ull, 16178748516357238738ull, 3716331435374943147ull}}, {{12808449646648662676ull, 10542548233480428382ull, 7805874813509580259ull, 2322707147109339467ull}}, {{6787190021456052537ull, 8566499273423147574ull, 5145657498459587420ull, 2903383933886674334ull}}, {{17707359563674841480ull, 10708124091778934467ull, 15655443909929260083ull, 3629229917358342917ull}}, {{17522513436166163945ull, 8773469096296280180ull, 5734246832129411392ull, 4536537396697928647ull}}, {{1728198860749076658ull, 5483418185185175113ull, 10501433297721963976ull, 2835335872936205404ull}}, {{6771934594363733726ull, 6854272731481468891ull, 13126791622152454970ull, 3544169841170256755ull}}, {{3853232224527279254ull, 17791212951206611922ull, 11796803509263180808ull, 4430212301462820944ull}}, {{7019956158756937438ull, 11119508094504132451ull, 7373002193289488005ull, 2768882688414263090ull}}, {{4163259180018783893ull, 64327062848001852ull, 18439624778466635815ull, 3461103360517828862ull}}, {{5204073975023479866ull, 13915466883842166027ull, 13826158936228518960ull, 4326379200647286078ull}}, {{946703225175980965ull, 8697166802401353767ull, 4029663316715436446ull, 2703987000404553799ull}}, {{15018437086752139918ull, 1648086466146916400ull, 425393127466907654ull, 3379983750505692249ull}}, {{326302284730623281ull, 11283480119538421309ull, 5143427427761022471ull, 4224979688132115311ull}}, {{2509781937170333503ull, 13969704102352595174ull, 10132171169991720900ull, 2640612305082572069ull}}, {{12360599458317692686ull, 17462130127940743967ull, 17276899980917039029ull, 3300765381353215086ull}}, {{10839063304469727954ull, 7992604604643766247ull, 12372752939291522979ull, 4125956726691518858ull}}, {{13691943592934661827ull, 2689534868688659952ull, 12344656605484589766ull, 2578722954182199286ull}}, {{17114929491168327284ull, 12585290622715600748ull, 6207448720000961399ull, 3223403692727749108ull}}, {{2946917790250857489ull, 11119927259967113032ull, 7759310900001201749ull, 4029254615909686385ull}}, {{1841823618906785931ull, 9255797546693139597ull, 16378784358569220853ull, 2518284134943553990ull}}, {{6913965542060870317ull, 16181432951793812400ull, 11250108411356750258ull, 3147855168679442488ull}}, {{8642456927576087897ull, 11003419152887489692ull, 14062635514195937823ull, 3934818960849303110ull}}, {{14624907616589830744ull, 13794665998195762913ull, 4177461177945073235ull, 2459261850530814444ull}}, {{4446076465455124717ull, 12631646479317315738ull, 5221826472431341544ull, 3074077313163518055ull}}, {{14780967618673681704ull, 15789558099146644672ull, 1915597072111789026ull, 3842596641454397569ull}}, {{9238104761671051065ull, 14480159830394040824ull, 12726463216138337901ull, 2401622900908998480ull}}, {{11547630952088813832ull, 4265141732710387318ull, 15908079020172922377ull, 3002028626136248100ull}}, {{5211166653256241482ull, 9943113184315372052ull, 1438354701506601355ull, 3752535782670310126ull}}, {{12480351195139926734ull, 3908602730983413580ull, 14734029743723789559ull, 2345334864168943828ull}}, {{15600438993924908418ull, 274067395301879071ull, 18417537179654736949ull, 2931668580211179785ull}}, {{14888862723978747618ull, 4954270262554736743ull, 9186863419286257474ull, 3664585725263974732ull}}, {{13999392386546046618ull, 15416209865048196737ull, 11483579274107821842ull, 4580732156579968415ull}}, {{1832091213950197281ull, 14246817184082510865ull, 14094766073958470507ull, 2862957597862480259ull}}, {{6901800035865134505ull, 13196835461675750677ull, 13006771574020700230ull, 3578696997328100324ull}}, {{13238936063258806035ull, 7272672290239912538ull, 16258464467525875288ull, 4473371246660125405ull}}, {{12886021057964141676ull, 4545420181399945336ull, 12467383301417366007ull, 2795857029162578378ull}}, {{16107526322455177095ull, 1070089208322543766ull, 6360857089916931701ull, 3494821286453222973ull}}, {{10911035866214195560ull, 5949297528830567612ull, 12562757380823552530ull, 4368526608066528716ull}}, {{16042769453238648033ull, 8329996973946492661ull, 17075095399869496139ull, 2730329130041580447ull}}, {{6218403761266146329ull, 5800810199005727923ull, 16732183231409482270ull, 3412911412551975559ull}}, {{3161318683155295008ull, 16474384785611935712ull, 16303543020834464933ull, 4266139265689969449ull}}, {{1975824176972059380ull, 12602333500221153772ull, 3272185360380458727ull, 2666337041056230906ull}}, {{2469780221215074225ull, 11141230856849054311ull, 13313603737330349217ull, 3332921301320288632ull}}, {{16922283331801006493ull, 91480515779154176ull, 16642004671662936522ull, 4166151626650360790ull}}, {{10576427082375629058ull, 4668861340789359264ull, 5789566901361947422ull, 2603844766656475494ull}}, {{13220533852969536323ull, 15059448712841474888ull, 16460330663557210085ull, 3254805958320594367ull}}, {{16525667316211920403ull, 4989252835769679898ull, 15963727311019124703ull, 4068507447900742959ull}}, {{14940228091059838156ull, 10035812049997131792ull, 16894858597028034795ull, 2542817154937964349ull}}, {{228541040115246079ull, 7933079044069026837ull, 7283515191002879782ull, 3178521443672455437ull}}, {{4897362318571445503ull, 692976768231507738ull, 13716080007180987632ull, 3973151804590569296ull}}, {{7672537467534541343ull, 433110480144692336ull, 8572550004488117270ull, 2483219877869105810ull}}, {{9590671834418176679ull, 9764760137035641228ull, 1492315468755370779ull, 3104024847336382263ull}}, {{11988339793022720849ull, 7594264152867163631ull, 15700452391226377186ull, 3880031059170477828ull}}, {{14410241398280282387ull, 9358101113969365173ull, 589410707661709933ull, 2425019411981548643ull}}, {{4177743692568189271ull, 16309312410889094371ull, 14571821439859301128ull, 3031274264976935803ull}}, {{610493597282848685ull, 1939896439901816348ull, 13603090781396738507ull, 3789092831221169754ull}}, {{9604930535156556236ull, 17353336339434492881ull, 13113617756800349470ull, 2368183019513231096ull}}, {{16617849187373083199ull, 12468298387438340293ull, 16392022196000436838ull, 2960228774391538870ull}}, {{6937253428934190287ull, 6362000947443149559ull, 11266655708145770240ull, 3700285967989423588ull}}, {{11253312420724950786ull, 3976250592151968474ull, 16265031854445882208ull, 2312678729993389742ull}}, {{4843268489051412674ull, 4970313240189960593ull, 11107917781202576952ull, 2890848412491737178ull}}, {{10665771629741653746ull, 6212891550237450741ull, 4661525189648445382ull, 3613560515614671473ull}}, {{17943900555604455087ull, 16989486474651589234ull, 10438592505487944631ull, 4516950644518339341ull}}, {{15826623865680172333ull, 17535958074298325127ull, 8829963325143659346ull, 2823094152823962088ull}}, {{15171593813672827512ull, 12696575556018130601ull, 11037454156429574183ull, 3528867691029952610ull}}, {{5129434211808870678ull, 11259033426595275348ull, 4573445658682191921ull, 4411084613787440763ull}}, {{12429268419235319982ull, 119366863980965236ull, 552560527462675999ull, 2756927883617150477ull}}, {{15536585524044149978ull, 13984266635258370257ull, 5302386677755732902ull, 3446159854521438096ull}}, {{5585673849773023760ull, 8256961257218187014ull, 6627983347194666128ull, 4307699818151797620ull}}, {{17326104211390303562ull, 5160600785761366883ull, 13365861628851442138ull, 2692312386344873512ull}}, {{17045944245810491549ull, 15674123019056484412ull, 16707327036064302672ull, 3365390482931091890ull}}, {{2860686233553562820ull, 1145909700111053900ull, 11660786758225602533ull, 4206738103663864863ull}}, {{11011300932825752570ull, 3022036571783102639ull, 14205520751532083439ull, 2629211314789915539ull}}, {{9152440147604802809ull, 17612603770011042011ull, 13145214920987716394ull, 3286514143487394424ull}}, {{6828864166078615607ull, 12792382675659026706ull, 16431518651234645493ull, 4108142679359243030ull}}, {{8879726122226522659ull, 10301082181500585643ull, 5658013138594265529ull, 2567589174599526894ull}}, {{6487971634355765419ull, 17488038745303119958ull, 16295888460097607719ull, 3209486468249408617ull}}, {{17333336579799482582ull, 17248362413201512043ull, 6534802519839845937ull, 4011858085311760772ull}}, {{8527492353160982662ull, 3862697480609863171ull, 13307623611754679519ull, 2507411303319850482ull}}, {{6047679423023840423ull, 216685832334941060ull, 7411157477838573591ull, 3134264129149813103ull}}, {{7559599278779800529ull, 14105915345700840037ull, 4652260828870829084ull, 3917830161437266379ull}}, {{7030592558451069283ull, 18039569127917800831ull, 601820008830574225ull, 2448643850898291487ull}}, {{4176554679636448699ull, 8714403354615087327ull, 14587333066320381494ull, 3060804813622864358ull}}, {{609007331118172970ull, 1669632156414083351ull, 9010794296045701060ull, 3826006017028580448ull}}, {{7298158609589939962ull, 10266892134613577902ull, 5631746435028563162ull, 2391253760642862780ull}}, {{18346070298842200761ull, 3610243131412196569ull, 7039683043785703953ull, 2989067200803578475ull}}, {{9097529818270587239ull, 9124489932692633616ull, 4187917786304742037ull, 3736334001004473094ull}}, {{5685956136419117025ull, 8008649217146589962ull, 16452506671722627485ull, 2335208750627795683ull}}, {{16330817207378672089ull, 14622497539860625356ull, 15953947321225896452ull, 2919010938284744604ull}}, {{1966777435513788495ull, 18278121924825781696ull, 1495690077822818949ull, 3648763672855930756ull}}, {{2458471794392235618ull, 9012594350750063408ull, 1869612597278523687ull, 4560954591069913445ull}}, {{1536544871495147261ull, 12550400496859871486ull, 3474350882512771256ull, 2850596619418695903ull}}, {{11144053126223709885ull, 15688000621074839357ull, 18177996658423127782ull, 3563245774273369878ull}}, {{95008352497473644ull, 10386628739488773389ull, 13499123786174133920ull, 4454057217841712348ull}}, {{2365223229524614980ull, 6491642962180483368ull, 17660324403213609508ull, 2783785761151070217ull}}, {{2956529036905768724ull, 8114553702725604210ull, 8240347448734848173ull, 3479732201438837772ull}}, {{12919033332986986713ull, 14754878146834393166ull, 10300434310918560216ull, 4349665251798547215ull}}, {{3462709814689478792ull, 9221798841771495729ull, 13355300471965181991ull, 2718540782374092009ull}}, {{8940073286789236394ull, 6915562533786981757ull, 2859067534674313777ull, 3398175977967615012ull}}, {{15786777626913933396ull, 13256139185661115100ull, 3573834418342892221ull, 4247719972459518765ull}}, {{643363979966432565ull, 10590930000251890890ull, 4539489520678001590ull, 2654824982787199228ull}}, {{10027577011812816514ull, 4015290463460087804ull, 5674361900847501988ull, 3318531228483999035ull}}, {{12534471264766020642ull, 5019113079325109755ull, 2481266357631989581ull, 4148164035604998794ull}}, {{5528201531265068950ull, 5442788683791887549ull, 6162477491947381392ull, 2592602522253124246ull}}, {{11521937932508724091ull, 6803485854739859436ull, 16926468901789002548ull, 3240753152816405307ull}}, {{14402422415635905113ull, 8504357318424824295ull, 16546400108808865281ull, 4050941441020506634ull}}, {{15919043037413522552ull, 16844438370083984944ull, 14953186086432928704ull, 2531838400637816646ull}}, {{1452059723057351574ull, 2608803888895429565ull, 9468110571186385073ull, 3164798000797270808ull}}, {{6426760672249077371ull, 7872690879546674860ull, 11835138213982981341ull, 3955997500996588510ull}}, {{13240097457010449165ull, 7226274808930365739ull, 2785275365311975434ull, 2472498438122867819ull}}, {{11938435802835673552ull, 18256215548017732982ull, 17316652261922133004ull, 3090623047653584773ull}}, {{5699672716689816132ull, 4373525361312614612ull, 7810757272120502544ull, 3863278809566980967ull}}, {{12785667484785910891ull, 2733453350820384132ull, 11799252322716395946ull, 2414549255979363104ull}}, {{15982084355982388614ull, 12640188725380255973ull, 14749065403395494932ull, 3018186569974203880ull}}, {{6142547389695822055ull, 15800235906725319967ull, 18436331754244368665ull, 3772733212467754850ull}}, {{10756621146200970640ull, 2957618414062243123ull, 16134393364830118320ull, 2357958257792346781ull}}, {{8834090414323825396ull, 3697023017577803904ull, 6332933650755484188ull, 2947447822240433477ull}}, {{11042613017904781745ull, 4621278771972254880ull, 12527853081871743139ull, 3684309777800541846ull}}, {{13803266272380977182ull, 1164912446537930696ull, 6436444315484903116ull, 4605387222250677308ull}}, {{8627041420238110739ull, 9951442315940982493ull, 13246149734032840255ull, 2878367013906673317ull}}, {{15395487793725026327ull, 7827616876498840212ull, 2722629112258886607ull, 3597958767383341647ull}}, {{797615668446731293ull, 5172835077196162362ull, 17238344445605771971ull, 4497448459229177058ull}}, {{5110195811206594962ull, 927178914033907524ull, 15385651296930995386ull, 2810905287018235661ull}}, {{6387744764008243703ull, 10382345679397160213ull, 5397006065881580520ull, 3513631608772794577ull}}, {{12596366973437692532ull, 12977932099246450266ull, 11357943600779363554ull, 4392039510965993221ull}}, {{12484415376825945737ull, 12722893580456419320ull, 9404557759700796173ull, 2745024694353745763ull}}, {{15605519221032432171ull, 2068558920288360438ull, 7144011181198607313ull, 3431280867942182204ull}}, {{10283526989435764406ull, 7197384668787838452ull, 8930013976498259141ull, 4289101084927727755ull}}, {{15650576405252128562ull, 6804208427206092984ull, 3275415726097718011ull, 2680688178079829847ull}}, {{1116476432855609086ull, 3893574515580228327ull, 17929327712904311226ull, 3350860222599787308ull}}, {{15230653596351675069ull, 14090340181330061216ull, 3964915567420837416ull, 4188575278249734136ull}}, {{9519158497719796919ull, 8806462613331288260ull, 2478072229638023385ull, 2617859548906083835ull}}, {{11898948122149746148ull, 15619764285091498229ull, 16932648342329692943ull, 3272324436132604793ull}}, {{1038627097405018973ull, 14913019337936984883ull, 7330752372629952467ull, 4090405545165755992ull}}, {{16790043000373994522ull, 7014794076996921599ull, 4581720232893720292ull, 2556503465728597495ull}}, {{16375867732040105249ull, 8768492596246151999ull, 1115464272689762461ull, 3195629332160746869ull}}, {{15858148646622743657ull, 15572301763735077903ull, 6006016359289590980ull, 3994536665200933586ull}}, {{16828871931780296642ull, 509316565479647881ull, 8365446242983382267ull, 2496585415750583491ull}}, {{7201031859443207090ull, 14471703762131723564ull, 5845121785301839929ull, 3120731769688229364ull}}, {{9001289824304008862ull, 4254571647382490743ull, 7306402231627299912ull, 3900914712110286705ull}}, {{12543335167831087395ull, 2659107279614056714ull, 16095716440835532205ull, 2438071695068929190ull}}, {{6455796922934083436ull, 7935570117944958797ull, 10896273514189639448ull, 3047589618836161488ull}}, {{12681432172094992199ull, 9919462647431198496ull, 13620341892737049310ull, 3809487023545201860ull}}, {{7925895107559370124ull, 1587978136217111156ull, 17736085719815431627ull, 2380929389715751162ull}}, {{9907368884449212655ull, 15820030725553552657ull, 12946735112914513725ull, 2976161737144688953ull}}, {{16995897123988903723ull, 5939980351659777109ull, 2348360835860978445ull, 3720202171430861192ull}}, {{12928278711706758779ull, 6018330729001054645ull, 1467725522413111528ull, 2325126357144288245ull}}, {{2325290334351284762ull, 7522913411251318307ull, 6446342921443777314ull, 2906407946430360306ull}}, {{16741670973221269664ull, 180269727209372075ull, 17281300688659497451ull, 3633009933037950382ull}}, {{16315402698099199176ull, 14060395214293878806ull, 12378253823969596005ull, 4541262416297437978ull}}, {{5585440667884611581ull, 11093590018147368206ull, 12348094658408385407ull, 2838289010185898736ull}}, {{16205172871710540284ull, 9255301504256822353ull, 15435118323010481759ull, 3547861262732373420ull}}, {{6421408034356011643ull, 6957440861893640038ull, 847153830053550583ull, 4434826578415466776ull}}, {{17848438076754670989ull, 11265929566324606879ull, 529471143783469114ull, 2771766611509666735ull}}, {{17698861577515950832ull, 4859039921050982791ull, 14496896985011500105ull, 3464708264387083418ull}}, {{17511890953467550636ull, 10685485919741116393ull, 8897749194409599323ull, 4330885330483854273ull}}, {{4027402818276137292ull, 4372585690624503794ull, 17090308292574469337ull, 2706803331552408920ull}}, {{14257625559699947423ull, 10077418131708017646ull, 2916141292008535055ull, 3383504164440511151ull}}, {{8598659912770158470ull, 7985086646207634154ull, 17480234670292832531ull, 4229380205550638938ull}}, {{9985848463908736948ull, 2684836144666077394ull, 15536832687360408236ull, 2643362628469149336ull}}, {{3258938543031145377ull, 3356045180832596743ull, 974296785490958679ull, 3304203285586436671ull}}, {{17908731234071095433ull, 18030114531322909640ull, 15052929037145862060ull, 4130254106983045838ull}}, {{11192957021294434646ull, 2045449545222042717ull, 4796394629788775884ull, 2581408816864403649ull}}, {{156138221335879595ull, 2556811931527553397ull, 10607179305663357759ull, 3226761021080504561ull}}, {{4806858795097237398ull, 17031072969691605458ull, 17870660150506585102ull, 4033451276350630701ull}}, {{7615972765363161278ull, 6032734587629865507ull, 13475005603280309641ull, 2520907047719144188ull}}, {{4908279938276563693ull, 12152604252964719788ull, 16843757004100387051ull, 3151133809648930235ull}}, {{6135349922845704616ull, 10579069297778511831ull, 16443010236698095910ull, 3938917262061162794ull}}, {{10752122729419647241ull, 2000232292684181990ull, 14888567416363697848ull, 2461823288788226746ull}}, {{4216781374919783244ull, 2500290365855227488ull, 9387337233599846502ull, 3077279110985283433ull}}, {{5270976718649729054ull, 12348734994173810168ull, 16345857560427196031ull, 3846598888731604291ull}}, {{3294360449156080659ull, 14635488398999713211ull, 7910317966053303567ull, 2404124305457252682ull}}, {{17953008616727264536ull, 13682674480322253609ull, 664525420711853651ull, 3005155381821565853ull}}, {{8606202715626916958ull, 12491657081975429108ull, 5442342794317204968ull, 3756444227276957316ull}}, {{14602248734121598907ull, 7807285676234643192ull, 12624836283303028913ull, 2347777642048098322ull}}, {{18252810917651998633ull, 14370793113720691894ull, 6557673317274010333ull, 2934722052560122903ull}}, {{13592641610210222484ull, 4128433336868701156ull, 3585405628165125013ull, 3668402565700153629ull}}, {{16990802012762778104ull, 9772227689513264349ull, 9093443053633794170ull, 4585503207125192036ull}}, {{12925094267190430267ull, 10719328324373178122ull, 14906773945375897164ull, 2865939504453245022ull}}, {{6932995797133262026ull, 13399160405466472653ull, 9410095394865095647ull, 3582424380566556278ull}}, {{13277930764843965437ull, 12137264488405702912ull, 2539247206726593751ull, 4478030475708195348ull}}, {{8298706728027478398ull, 14503319332894646176ull, 10810401541058896902ull, 2798769047317622092ull}}, {{10373383410034347997ull, 8905777129263531912ull, 13513001926323621128ull, 3498461309147027615ull}}, {{12966729262542934997ull, 11132221411579414890ull, 12279566389477138506ull, 4373076636433784519ull}}, {{12715891807516722277ull, 11569324400664522210ull, 14592258021064293422ull, 2733172897771115324ull}}, {{6671492722541127038ull, 5238283463975876955ull, 18240322526330366778ull, 3416466122213894155ull}}, {{3727679884749020894ull, 15771226366824622002ull, 18188717139485570568ull, 4270582652767367694ull}}, {{6941485946395525963ull, 9857016479265388751ull, 6756262193751093701ull, 2669114157979604809ull}}, {{4065171414567019549ull, 16932956617509123843ull, 13057013760616255030ull, 3336392697474506011ull}}, {{469778249781386533ull, 11942823735031628996ull, 11709581182342930884ull, 4170490871843132514ull}}, {{9516983442968142391ull, 16687636871249543930ull, 11930174257391719706ull, 2606556794901957821ull}}, {{2672857266855402181ull, 11636174052207154105ull, 1077659766457485921ull, 3258195993627447277ull}}, {{7952757601996640630ull, 710159509976778919ull, 5958760726499245306ull, 4072744992034309096ull}}, {{11888002528888982250ull, 5055535712162874728ull, 3724225454062028316ull, 2545465620021443185ull}}, {{14860003161111227812ull, 6319419640203593410ull, 9266967836004923299ull, 3181832025026803981ull}}, {{9351631914534258957ull, 3287588531827103859ull, 16195395813433542028ull, 3977290031283504976ull}}, {{3538926937370217896ull, 11278114869246715720ull, 10122122383395963767ull, 2485806269552190610ull}}, {{4423658671712772370ull, 9485957568131006746ull, 3429280942390178901ull, 3107257836940238263ull}}, {{14752945376495741271ull, 16469132978591146336ull, 18121659233269887338ull, 3884072296175297828ull}}, {{9220590860309838294ull, 14904894130046854364ull, 2102664983938903778ull, 2427545185109561143ull}}, {{11525738575387297868ull, 9407745625703792147ull, 16463389285205793435ull, 3034431481386951428ull}}, {{9795487200806734431ull, 7147996013702352280ull, 2132492532797690178ull, 3793039351733689286ull}}, {{6122179500504209019ull, 9079183526991358079ull, 15167865888280720073ull, 2370649594833555803ull}}, {{3041038357202873370ull, 15960665427166585503ull, 14348146341923512187ull, 2963311993541944754ull}}, {{17636356001785755424ull, 15339145765530843974ull, 8711810890549614426ull, 3704139991927430943ull}}, {{6411036482688709236ull, 14198652121884165388ull, 12362410834234590872ull, 2315087494954644339ull}}, {{8013795603360886545ull, 17748315152355206735ull, 10841327524365850686ull, 2893859368693305424ull}}, {{5405558485773720278ull, 12962021903589232611ull, 13551659405457313358ull, 3617324210866631780ull}}, {{2145262088789762443ull, 6979155342631764956ull, 16939574256821641698ull, 4521655263583289725ull}}, {{10564160842348377335ull, 8973658107572241001ull, 12893076919727220013ull, 2826034539739556078ull}}, {{17816887071362859573ull, 15828758652892689155ull, 6892974112804249208ull, 3532543174674445098ull}}, {{17659422820776186562ull, 1339204242406309828ull, 17839589677860087319ull, 4415678968343056372ull}}, {{1813767226130340793ull, 7754531679145025499ull, 1926371511807778766ull, 2759799355214410233ull}}, {{16102267087945089703ull, 469792562076506065ull, 7019650408187111362ull, 3449749194018012791ull}}, {{6292775804649198417ull, 9810612739450408390ull, 4162876991806501298ull, 4312186492522515989ull}}, {{17768042933187912723ull, 10743318980583893147ull, 4907641129092757263ull, 2695116557826572493ull}}, {{17598367648057503000ull, 8817462707302478530ull, 10746237429793334483ull, 3368895697283215616ull}}, {{12774587523217102941ull, 6410142365700710259ull, 13432796787241668104ull, 4211119621604019520ull}}, {{5678274192796995386ull, 4006338978562943912ull, 8395497992026042565ull, 2631949763502512200ull}}, {{7097842740996244233ull, 9619609741631067794ull, 10494372490032553206ull, 3289937204378140250ull}}, {{18095675463100081099ull, 2801140140184058934ull, 3894593575685915700ull, 4112421505472675313ull}}, {{6698111146010162783ull, 10974084624469812642ull, 13963336030872167072ull, 2570263440920422070ull}}, {{17596010969367479287ull, 13717605780587265802ull, 8230798001735433032ull, 3212829301150527588ull}}, {{12771641674854573300ull, 17147007225734082253ull, 10288497502169291290ull, 4016036626438159485ull}}, {{10288119055997802265ull, 15328565534511189312ull, 8736153948069501008ull, 2510022891523849678ull}}, {{12860148819997252831ull, 713962844429435024ull, 1696820398232100453ull, 3137528614404812098ull}}, {{16075186024996566039ull, 5504139573964181684ull, 11344397534644901374ull, 3921910768006015122ull}}, {{823619228768077966ull, 17275145289009777265ull, 11701934477580451262ull, 2451194230003759451ull}}, {{5641210054387485362ull, 12370559574407445773ull, 10015732078548176174ull, 3063992787504699314ull}}, {{11663198586411744606ull, 6239827431154531408ull, 3296293061330444410ull, 3829990984380874143ull}}, {{7289499116507340379ull, 8511578162898970034ull, 8977712190972609612ull, 2393744365238046339ull}}, {{18335245932488951282ull, 10639472703623712542ull, 6610454220288374111ull, 2992180456547557924ull}}, {{13695685378756413294ull, 8687654861102252774ull, 8263067775360467639ull, 3740225570684447405ull}}, {{3948117343295370405ull, 12347313315829989840ull, 7470260368813986226ull, 2337640981677779628ull}}, {{4935146679119213006ull, 6210769607932711492ull, 9337825461017482783ull, 2922051227097224535ull}}, {{6168933348899016257ull, 3151775991488501461ull, 7060595807844465575ull, 3652564033871530669ull}}, {{12322852704551158226ull, 17774778044642790538ull, 13437430778232969872ull, 4565705042339413336ull}}, {{12313468958771861795ull, 11109236277901744086ull, 8398394236395606170ull, 2853565651462133335ull}}, {{6168464161610051436ull, 4663173310522404300ull, 5886306777067119809ull, 3566957064327666669ull}}, {{7710580202012564295ull, 10440652656580393279ull, 11969569489761287665ull, 4458696330409583336ull}}, {{11736641653898934540ull, 18054622956431215559ull, 7480980931100804790ull, 2786685206505989585ull}}, {{10059116048946280271ull, 13344906658684243641ull, 13962912182303393892ull, 3483356508132486981ull}}, {{17185581079610238243ull, 16681133323355304551ull, 3618582172597078653ull, 4354195635165608727ull}}, {{17658517202397480758ull, 12731551336310759296ull, 9179142885514256014ull, 2721372271978505454ull}}, {{3626402429287299331ull, 6691067133533673313ull, 2250556570038044210ull, 3401715339973131818ull}}, {{9144689055036512068ull, 17587205953771867449ull, 12036567749402331070ull, 4252144174966414772ull}}, {{17244645705466289803ull, 6380317702680029251ull, 16746226880231232727ull, 2657590109354009232ull}}, {{16944121113405474349ull, 3363711109922648660ull, 2486039526579489293ull, 3321987636692511541ull}}, {{2733407318047291321ull, 8816324905830698730ull, 7719235426651749520ull, 4152484545865639426ull}}, {{6320065592206944980ull, 5510203066144186706ull, 9436208160084731354ull, 2595302841166024641ull}}, {{17123454027113457032ull, 16111125869535009190ull, 16406946218533302096ull, 3244128551457530801ull}}, {{12180945497037045482ull, 1692163263209209872ull, 6673624717884463909ull, 4055160689321913502ull}}, {{7613090935648153427ull, 3363445048719450122ull, 18006073503959953655ull, 2534475430826195938ull}}, {{292991632705415975ull, 18039364366181476365ull, 13284219843095166260ull, 3168094288532744923ull}}, {{4977925559309157873ull, 4102461384017293840ull, 11993588785441569922ull, 3960117860665931154ull}}, {{3111203474568223671ull, 7175724383438196554ull, 12107679009328369105ull, 2475073662916206971ull}}, {{13112376380065055396ull, 13581341497725133596ull, 10522912743233073477ull, 3093842078645258714ull}}, {{16390470475081319245ull, 3141618816874253283ull, 3930268892186566039ull, 3867302598306573393ull}}, {{7938201037712130576ull, 8881040788187490158ull, 13985633103685073534ull, 2417064123941608370ull}}, {{699379260285387412ull, 1877928948379586890ull, 8258669342751566110ull, 3021330154927010463ull}}, {{10097596112211510073ull, 11570783222329259420ull, 5711650660012069733ull, 3776662693658763079ull}}, {{15534369606986969604ull, 9537582523169481089ull, 10487310690148625439ull, 2360414183536726924ull}}, {{5582903953451548293ull, 7310292135534463458ull, 13109138362685781799ull, 2950517729420908655ull}}, {{16202001978669211174ull, 4526179150990691418ull, 11774736934929839345ull, 3688147161776135819ull}}, {{11029130436481738159ull, 10269409957165752177ull, 10106735150234911277ull, 4610183952220169774ull}}, {{18422421568869556110ull, 8724224232442289062ull, 1705023450469431644ull, 2881364970137606109ull}}, {{13804654924232169329ull, 10905280290552861328ull, 6742965331514177459ull, 3601706212672007636ull}}, {{17255818655290211661ull, 9019914344763688756ull, 8428706664392721824ull, 4502132765840009545ull}}, {{1561514622701606481ull, 5637446465477305473ull, 16797156711313920900ull, 2813832978650005965ull}}, {{6563579296804396005ull, 7046808081846631841ull, 7161387833860237413ull, 3517291223312507457ull}}, {{12816160139432882910ull, 13420196120735677705ull, 13563420810752684670ull, 4396614029140634321ull}}, {{1092571059504469963ull, 3775936557032410662ull, 1559608979079346063ull, 2747883768212896451ull}}, {{10589085861235363261ull, 108234677863125423ull, 15784569279131346291ull, 3434854710266120563ull}}, {{8624671308116816172ull, 13970351402611070491ull, 15119025580486794959ull, 4293568387832650704ull}}, {{3084576558359316156ull, 15648998654273000913ull, 9449390987804246849ull, 2683480242395406690ull}}, {{8467406716376533099ull, 5726190262559087429ull, 2588366697900532754ull, 3354350302994258363ull}}, {{15195944413898054277ull, 16381109865053635094ull, 17070516427657829654ull, 4192937878742822953ull}}, {{4885779240258896020ull, 5626507647231134030ull, 3751543739645061678ull, 2620586174214264346ull}}, {{15330596087178395832ull, 16256506595893693345ull, 13912801711411102905ull, 3275732717767830432ull}}, {{5328187053690831078ull, 6485575189584952970ull, 17391002139263878632ull, 4094665897209788040ull}}, {{7941802926984157328ull, 4053484493490595606ull, 10869376337039924145ull, 2559166185756117525ull}}, {{703881621875420852ull, 9678541635290632412ull, 18198406439727293085ull, 3198957732195146906ull}}, {{879852027344276065ull, 16709863062540678419ull, 13524636012804340548ull, 3998697165243933633ull}}, {{16690808581586030205ull, 1220292377233148203ull, 1535368480361630987ull, 2499185728277458521ull}}, {{16251824708555149852ull, 15360423526823598966ull, 6530896618879426637ull, 3123982160346823151ull}}, {{11091408848839161507ull, 5365471353247334996ull, 3551934755171895393ull, 3904977700433528939ull}}, {{16155502567379251750ull, 14882634641848054132ull, 18360860286478292284ull, 2440611062770955586ull}}, {{1747634135514513071ull, 156549228600516050ull, 13727703321243089548ull, 3050763828463694483ull}}, {{11407914706247917147ull, 195686535750645062ull, 12547943133126474031ull, 3813454785579618104ull}}, {{2518260672977560313ull, 7039833112485235020ull, 7842464458204046269ull, 2383409240987261315ull}}, {{3147825841221950391ull, 13411477409033931679ull, 5191394554327669932ull, 2979261551234076644ull}}, {{17769840356809601701ull, 16764346761292414598ull, 6489243192909587415ull, 3724076939042595805ull}}, {{6494464204578613159ull, 17395245753448840980ull, 6361620004782186086ull, 2327548086901622378ull}}, {{8118080255723266449ull, 12520685154956275417ull, 17175397042832508416ull, 2909435108627027972ull}}, {{14759286338081470965ull, 15650856443695344271ull, 3022502229831083904ull, 3636793885783784966ull}}, {{13837421904174450802ull, 1116826480909628723ull, 13001499824143630689ull, 4545992357229731207ull}}, {{6342545680895337799ull, 12227231596636987712ull, 15043466417730851036ull, 2841245223268582004ull}}, {{7928182101119172249ull, 15284039495796234640ull, 357588948454012179ull, 3551556529085727506ull}}, {{9910227626398965311ull, 14493363351317905396ull, 9670358222422291032ull, 4439445661357159382ull}}, {{15417264303354129128ull, 9058352094573690872ull, 1432287870586543991ull, 2774653538348224614ull}}, {{824836305483109794ull, 6711254099789725687ull, 11013731875087955797ull, 3468316922935280767ull}}, {{14866103437136050954ull, 13000753643164545012ull, 9155478825432556842ull, 4335396153669100959ull}}, {{67942611355256038ull, 12737157045405228537ull, 12639703293536429882ull, 2709622596043188099ull}}, {{4696614282621457952ull, 6698074269901759863ull, 11187943098493149449ull, 3387028245053985124ull}}, {{1259081834849434536ull, 12984278855804587733ull, 13984928873116436811ull, 4233785306317481405ull}}, {{3092769155994590537ull, 5809331275664173381ull, 11046423554911466959ull, 2646115816448425878ull}}, {{8477647463420626075ull, 2649978076152828822ull, 4584657406784557891ull, 3307644770560532348ull}}, {{1373687292421006786ull, 17147530650473199740ull, 5730821758480697363ull, 4134555963200665435ull}}, {{10081926594617905049ull, 8411363647332055885ull, 1275920589836741900ull, 2584097477000415897ull}}, {{17214094261699769215ull, 10514204559165069856ull, 6206586755723315279ull, 3230121846250519871ull}}, {{3070873753415159903ull, 8531069680528949417ull, 3146547426226756195ull, 4037652307813149839ull}}, {{13448511141952944700ull, 3026075541116899433ull, 8884121169032804478ull, 2523532692383218649ull}}, {{2975580872159017162ull, 13005966463250900100ull, 15716837479718393501ull, 3154415865479023311ull}}, {{3719476090198771453ull, 2422400023781461413ull, 15034360831220603973ull, 3943019831848779139ull}}, {{4630515565587926110ull, 3819843024077107335ull, 7090632510299183531ull, 2464387394905486962ull}}, {{1176458438557519734ull, 163117761668996265ull, 18086662674728755222ull, 3080484243631858702ull}}, {{6082259066624287571ull, 9427269238941021139ull, 13384956306556168219ull, 3850605304539823378ull}}, {{1495568907426485780ull, 3586200265124444260ull, 12977283710024993041ull, 2406628315337389611ull}}, {{1869461134283107225ull, 9094436349832943229ull, 11609918619103853397ull, 3008285394171737014ull}}, {{6948512436281271935ull, 15979731455718566940ull, 5289026237025040938ull, 3760356742714671268ull}}, {{13566192309530570768ull, 14599018178251492241ull, 12529013434995426394ull, 2350222964196669542ull}}, {{3122682331631049747ull, 9025400685959589494ull, 6437894756889507185ull, 2937778705245836928ull}}, {{13126724951393587992ull, 15893436875876874771ull, 8047368446111883981ull, 3672223381557296160ull}}, {{11796720170814597086ull, 6031738039563929752ull, 10059210557639854977ull, 4590279226946620200ull}}, {{7372950106759123179ull, 15299051320795925855ull, 6287006598524909360ull, 2868924516841637625ull}}, {{4604501615021516070ull, 677070077285355703ull, 12470444266583524605ull, 3586155646052047031ull}}, {{1143941000349507183ull, 5458023615034082533ull, 10976369314802017852ull, 4482694557565058789ull}}, {{3020806134432135941ull, 12634636796251077391ull, 9166073830964955109ull, 2801684098478161743ull}}, {{17611065723322333639ull, 1958237940031683026ull, 6845906270278805983ull, 3502105123097702179ull}}, {{12790460117298141240ull, 16282855480321767495ull, 3945696819421119574ull, 4377631403872127724ull}}, {{14911566600952420131ull, 5565098656773716780ull, 11689432548992975542ull, 2736019627420079827ull}}, {{192714177480973548ull, 16179745357821921784ull, 10000104667813831523ull, 3420024534275099784ull}}, {{240892721851216935ull, 15612995678850014326ull, 12500130834767289404ull, 4275030667843874730ull}}, {{13985616006439174297ull, 534750262426483145ull, 12424267790156943782ull, 2671894167402421706ull}}, {{3646961952766804159ull, 9891809864887879740ull, 6306962700841403919ull, 3339867709253027133ull}}, {{4558702440958505198ull, 7753076312682461771ull, 12495389394479142803ull, 4174834636566283916ull}}, {{543346016385371797ull, 2539829686212844655ull, 17032990408404240060ull, 2609271647853927447ull}}, {{14514240575763878458ull, 3174787107766055818ull, 16679551992077912171ull, 3261589559817409309ull}}, {{8919428682850072264ull, 17803541939989733485ull, 7014381934815226501ull, 4076986949771761637ull}}, {{7880485935994989117ull, 13433056721707277380ull, 6689831718473210515ull, 2548116843607351023ull}}, {{9850607419993736397ull, 12179634883706708821ull, 3750603629664125240ull, 3185146054509188779ull}}, {{16924945293419558400ull, 15224543604633386026ull, 76568518652768646ull, 3981432568136485974ull}}, {{15189776826814611904ull, 4903653734468478362ull, 13882913379440144116ull, 2488395355085303733ull}}, {{9763848996663489072ull, 6129567168085597953ull, 3518583669018016433ull, 3110494193856629667ull}}, {{16816497264256749244ull, 12273644978534385345ull, 18233287641554684253ull, 3888117742320787083ull}}, {{3592781762519386422ull, 9976871120797684793ull, 9089961766757983706ull, 2430073588950491927ull}}, {{9102663221576620931ull, 3247716864142330183ull, 6750766190020091729ull, 3037591986188114909ull}}, {{6766643008543388259ull, 8671332098605300633ull, 13050143755952502565ull, 3796989982735143636ull}}, {{15758366926408087422ull, 7725425570842006847ull, 17379711884325089911ull, 2373118739209464772ull}}, {{15086272639582721374ull, 5045095945125120655ull, 3277895781696810773ull, 2966398424011830966ull}}, {{14246154781051013813ull, 10918055949833788723ull, 13320741763975789274ull, 3707998030014788707ull}}, {{6598003728943189681ull, 11435470987073505856ull, 6019620593271174344ull, 2317498768759242942ull}}, {{8247504661178987102ull, 14294338733841882320ull, 16747897778443743738ull, 2896873460949053677ull}}, {{10309380826473733877ull, 8644551380447577092ull, 7099814167772515961ull, 3621091826186317097ull}}, {{12886726033092167346ull, 15417375243986859269ull, 13486453728143032855ull, 4526364782732896371ull}}, {{10360046779896298543ull, 16553388555132868899ull, 6123190570875701582ull, 2828977989208060232ull}}, {{8338372456442985275ull, 11468363657061310316ull, 7653988213594626978ull, 3536222486510075290ull}}, {{10422965570553731594ull, 5112082534471862087ull, 344113230138507915ull, 4420278108137594113ull}}, {{13431882509237164102ull, 889208574831219852ull, 11744285814905037207ull, 2762673817585996320ull}}, {{16789853136546455128ull, 14946568773821188527ull, 14680357268631296508ull, 3453342271982495400ull}}, {{16375630402255681006ull, 236466893566934043ull, 18350446585789120636ull, 4316677839978119250ull}}, {{7928925992196106677ull, 9371163845334109585ull, 16080715134545588301ull, 2697923649986324531ull}}, {{14522843508672521250ull, 16325640825095024885ull, 15489207899754597472ull, 3372404562482905664ull}}, {{4318496330558487850ull, 1960306957659229491ull, 914765800983695225ull, 4215505703103632081ull}}, {{393217197385360954ull, 12754406894605488192ull, 12100943671683279275ull, 2634691064439770050ull}}, {{491521496731701193ull, 11331322599829472336ull, 5902807552749323286ull, 3293363830549712563ull}}, {{614401870914626491ull, 4940781212932064612ull, 2766823422509266204ull, 4116704788187140704ull}}, {{9607373206176417365ull, 12311360294937316190ull, 1729264639068291377ull, 2572940492616962940ull}}, {{2785844470865745898ull, 1554142313389481526ull, 2161580798835364222ull, 3216175615771203675ull}}, {{12705677625436958181ull, 11166049928591627715ull, 16537034053826368989ull, 4020219519714004593ull}}, {{5635205506684404911ull, 9284624214583461274ull, 3418117256000398762ull, 2512637199821252871ull}}, {{16267378920210281947ull, 2382408231374550784ull, 18107704625282662165ull, 3140796499776566088ull}}, {{1887479576553300817ull, 7589696307645576385ull, 4187886707893776090ull, 3925995624720707611ull}}, {{12708889781414282771ull, 9355246210705873144ull, 311586183219916104ull, 2453747265450442257ull}}, {{15886112226767853464ull, 11694057763382341430ull, 5001168747452283034ull, 3067184081813052821ull}}, {{10634268246605041021ull, 5394200167373150980ull, 10863146952742741697ull, 3833980102266316026ull}}, {{15869789690982926447ull, 14900590150676689122ull, 11401152863891601464ull, 2396237563916447516ull}}, {{10613865076873882250ull, 178993614636309787ull, 14251441079864501831ull, 2995296954895559395ull}}, {{8655645327664964908ull, 14058800073577550946ull, 13202615331403239384ull, 3744121193619449244ull}}, {{10021464348217990972ull, 8786750045985969341ull, 17475006618981800423ull, 2340075746012155777ull}}, {{17138516453699876619ull, 6371751539055073772ull, 8008700218445086817ull, 2925094682515194722ull}}, {{2976401493415294157ull, 12576375442246230120ull, 787503236201582713ull, 3656368353143993403ull}}, {{3720501866769117697ull, 1885411247525623938ull, 14819437100534142104ull, 4570460441429991753ull}}, {{6936999685158086465ull, 1178382029703514961ull, 2344619160192756959ull, 2856537775893744846ull}}, {{13282935624874995985ull, 15308035592411557413ull, 12154145987095722006ull, 3570672219867181057ull}}, {{2768611475811581269ull, 9911672453659670959ull, 1357624428587488796ull, 4463340274833976322ull}}, {{8647911200023320149ull, 15418167320392070157ull, 5460201286294568401ull, 2789587671771235201ull}}, {{15421575018456538090ull, 5437651095207923984ull, 11436937626295598406ull, 3486984589714044001ull}}, {{830224699361120997ull, 16020435905864680789ull, 461113977587334295ull, 4358730737142555002ull}}, {{2824733446314394575ull, 16930301468806507349ull, 4899882254419471838ull, 2724206710714096876ull}}, {{8142602826320381123ull, 11939504799153358378ull, 6124852818024339798ull, 3405258388392621095ull}}, {{954881496045700595ull, 5701008962086922165ull, 3044380004103036844ull, 4256572985490776369ull}}, {{2902643944242256824ull, 12786502638159102161ull, 13431952548632867787ull, 2660358115931735230ull}}, {{8239990948730208934ull, 11371442279271489797ull, 7566568648936308926ull, 3325447644914669038ull}}, {{14911674704340149072ull, 4990930812234586438ull, 234838774315610350ull, 4156809556143336298ull}}, {{4708110671785205266ull, 16954389812928780236ull, 4758460252374644372ull, 2598005972589585186ull}}, {{5885138339731506582ull, 2746243192451423679ull, 15171447352323081274ull, 3247507465736981482ull}}, {{2744736906236995324ull, 12656176027419055407ull, 9740937153549075784ull, 4059384332171226853ull}}, {{8632989594039203934ull, 7910110017136909629ull, 8393928730181866317ull, 2537115207607016783ull}}, {{15402923010976392821ull, 14499323539848524940ull, 5880724894299944992ull, 3171394009508770979ull}}, {{806909690010939410ull, 18124154424810656176ull, 2739220099447543336ull, 3964242511885963724ull}}, {{504318556256837131ull, 11327596515506660110ull, 10935384599009490393ull, 2477651569928727327ull}}, {{9853770232175822222ull, 324437589101161425ull, 9057544730334475088ull, 3097064462410909159ull}}, {{16928898808647165682ull, 405546986376451781ull, 6710244894490705956ull, 3871330578013636449ull}}, {{12886404764618172503ull, 9476838903340058171ull, 15723118105125160982ull, 2419581611258522780ull}}, {{11496319937345327725ull, 2622676592320296906ull, 1207153557696899612ull, 3024477014073153476ull}}, {{5147027884826883848ull, 3278345740400371133ull, 1508941947121124515ull, 3780596267591441845ull}}, {{5522735437230496357ull, 18189867152246089622ull, 3248931726164396773ull, 2362872667244651153ull}}, {{16126791333392896254ull, 8902275885025448315ull, 8672850676132883871ull, 2953590834055813941ull}}, {{15546803148313732414ull, 6516158837854422490ull, 15452749363593492743ull, 3691988542569767426ull}}, {{14328437986123470663ull, 10990128301300095912ull, 14269654370673320868ull, 2307492839106104641ull}}, {{17910547482654338328ull, 13737660376625119890ull, 4002009908059487373ull, 2884366048882630802ull}}, {{13164812316463147102ull, 3337017415499236151ull, 14225884421929135025ull, 3605457561103288502ull}}, {{11844329377151545974ull, 8782957787801433093ull, 8558983490556642973ull, 4506821951379110628ull}}, {{9708548869933410186ull, 7795191626589589635ull, 14572736718452677666ull, 2816763719611944142ull}}, {{7524000068989374828ull, 520617496382211236ull, 8992548861211071275ull, 3520954649514930178ull}}, {{9405000086236718535ull, 14485829925759927757ull, 2017314039659063285ull, 4401193311893662723ull}}, {{8183968063111643037ull, 11359486712813648800ull, 17401722339282772217ull, 2750745819933539201ull}}, {{10229960078889553796ull, 364300335734897288ull, 7917094868821301560ull, 3438432274916924002ull}}, {{12787450098611942244ull, 455375419668621610ull, 672996549171851142ull, 4298040343646155003ull}}, {{12603842330059851807ull, 14119667692575052218ull, 16561523907728264627ull, 2686275214778846876ull}}, {{6531430875720038950ull, 13037898597291427369ull, 2255160810950779168ull, 3357844018473558596ull}}, {{12775974613077436592ull, 16297373246614284211ull, 2818951013688473960ull, 4197305023091948245ull}}, {{5679141123959703918ull, 10185858279133927632ull, 4067687392768990177ull, 2623315639432467653ull}}, {{7098926404949629898ull, 17344008867344797444ull, 9696295259388625625ull, 3279144549290584566ull}}, {{8873658006187037372ull, 7844953028898833093ull, 2896997037381006224ull, 4098930686613230708ull}}, {{7851879263080592310ull, 4903095643061770683ull, 11033995185217904698ull, 2561831679133269192ull}}, {{5203163060423352483ull, 15352241590681989162ull, 13792493981522380872ull, 3202289598916586490ull}}, {{15727325862383966411ull, 743557914642934836ull, 8017245440048200283ull, 4002861998645733113ull}}, {{606206627135203199ull, 16605624761147691937ull, 16539993446098594936ull, 2501788749153583195ull}}, {{5369444302346391903ull, 2310286877725063305ull, 16063305789195855767ull, 3127235936441978994ull}}, {{11323491396360377783ull, 16722916652438492843ull, 10855760199640043900ull, 3909044920552473743ull}}, {{4771339113511542162ull, 1228450870919282219ull, 13702379152416109294ull, 2443153075345296089ull}}, {{1352487873462039799ull, 10758935625503878582ull, 3292915885237972905ull, 3053941344181620112ull}}, {{10913981878682325556ull, 18060355550307236131ull, 4116144856547466131ull, 3817426680227025140ull}}, {{4515395664962759521ull, 8981879209728328630ull, 11795962572196942140ull, 2385891675141890712ull}}, {{14867616618058225209ull, 11227349012160410787ull, 14744953215246177675ull, 2982364593927363390ull}}, {{13972834754145393607ull, 9422500246773125580ull, 9207819482202946286ull, 3727955742409204238ull}}, {{17956393758195646813ull, 1277376635805815583ull, 1143201157949453525ull, 2329972339005752649ull}}, {{17833806179317170612ull, 6208406813184657383ull, 6040687465864204810ull, 2912465423757190811ull}}, {{17680571705719075361ull, 16983880553335597537ull, 2939173313902868108ull, 3640581779696488514ull}}, {{8265656576866680489ull, 2783106617959945306ull, 12897338679233360944ull, 4550727224620610642ull}}, {{9777721378969063210ull, 1739441636224965816ull, 12672522692948238494ull, 2844204515387881651ull}}, {{12222151723711329012ull, 11397674082135983078ull, 11228967347757910213ull, 3555255644234852064ull}}, {{6054317617784385457ull, 412034547387815136ull, 14036209184697387767ull, 4444069555293565080ull}}, {{3783948511115240911ull, 7175050619758466316ull, 8772630740435867354ull, 2777543472058478175ull}}, {{4729935638894051138ull, 18192185311552858703ull, 6354102407117446288ull, 3471929340073097719ull}}, {{1300733530190176019ull, 4293487565731521763ull, 3330941990469419957ull, 4339911675091372149ull}}, {{16953859520864717676ull, 4989272737795895053ull, 4387681753257081425ull, 2712444796932107593ull}}, {{7357266345798733383ull, 10848276940672256721ull, 10096288209998739685ull, 3390555996165134491ull}}, {{13808268950675804632ull, 18172032194267708805ull, 8008674244071036702ull, 4238194995206418114ull}}, {{10936011103386071847ull, 6745834102989930099ull, 9617107420971785843ull, 2648871872004011321ull}}, {{9058327860805201905ull, 3820606610310024720ull, 16633070294642120208ull, 3311089840005014151ull}}, {{11322909826006502381ull, 4775758262887530900ull, 16179651849875262356ull, 4138862300006267689ull}}, {{16300190678108839796ull, 12208220951159482620ull, 3194753378530957116ull, 2586788937503917306ull}}, {{1928494273926498129ull, 15260276188949353276ull, 13216813760018472203ull, 3233486171879896632ull}}, {{2410617842408122661ull, 14463659217759303691ull, 16521017200023090254ull, 4041857714849870790ull}}, {{17647537216000934328ull, 4428100992672176902ull, 5713949731587043505ull, 2526161071781169244ull}}, {{12836049483146392101ull, 10146812259267609032ull, 7142437164483804381ull, 3157701339726461555ull}}, {{16045061853932990127ull, 17295201342511899194ull, 4316360437177367572ull, 3947126674658076944ull}}, {{14639849677135506733ull, 1586128802215161188ull, 2697725273235854733ull, 2466954171661298090ull}}, {{18299812096419383417ull, 6594347021196339389ull, 12595528628399594224ull, 3083692714576622612ull}}, {{9039707065242065559ull, 8242933776495424237ull, 15744410785499492780ull, 3854615893220778265ull}}, {{7955659924989984926ull, 14375205647164415956ull, 2922727713296101131ull, 2409134933262986416ull}}, {{9944574906237481158ull, 13357321040528132041ull, 3653409641620126414ull, 3011418666578733020ull}}, {{17042404651224239351ull, 7473279263805389243ull, 4566762052025158018ull, 3764273333223416275ull}}, {{8345659897801455643ull, 9282485558305756181ull, 548383273302029809ull, 2352670833264635172ull}}, {{15043760890679207457ull, 16214792966309583130ull, 685479091627537261ull, 2940838541580793965ull}}, {{9581329076494233513ull, 6433433152604815201ull, 5468534882961809481ull, 3676048176975992456ull}}, {{16588347364045179795ull, 12653477459183406905ull, 6835668603702261851ull, 4595060221219990570ull}}, {{3450188074887155516ull, 5602580402775935364ull, 8883978895741301561ull, 2871912638262494106ull}}, {{4312735093608944395ull, 11614911521897307109ull, 1881601582821851143ull, 3589890797828117633ull}}, {{10002604885438568398ull, 9906953383944245982ull, 6963687996954701833ull, 4487363497285147041ull}}, {{1639942034971717345ull, 17721060911033623499ull, 15881520044165158405ull, 2804602185803216900ull}}, {{15884985598996810393ull, 8316268083509865661ull, 1405155981496896391ull, 3505752732254021126ull}}, {{6021173943463849279ull, 5783649085959944173ull, 10979817013725896297ull, 4382190915317526407ull}}, {{6069076723878599752ull, 15143995724793434868ull, 13779914661219767041ull, 2738869322073454004ull}}, {{7586345904848249689ull, 5094936600709629873ull, 17224893326524708802ull, 3423586652591817505ull}}, {{14094618399487700016ull, 15592042787741813149ull, 7696058602873722290ull, 4279483315739771882ull}}, {{11114979508893506462ull, 14356712760766021122ull, 9421722645223464335ull, 2674677072337357426ull}}, {{4670352349262107269ull, 13334204932530138499ull, 2553781269674554611ull, 3343346340421696783ull}}, {{1226254418150246183ull, 12056070147235285220ull, 17027284642375356976ull, 4179182925527120978ull}}, {{9989781048198679672ull, 7535043842022053262ull, 15253738919911986014ull, 2611989328454450611ull}}, {{3263854273393573782ull, 195432765672790770ull, 14455487631462594614ull, 3264986660568063264ull}}, {{13303189878596743036ull, 9467662993945764270ull, 18069359539328243267ull, 4081233325710079080ull}}, {{3702807655695576494ull, 3611446362002408717ull, 11293349712080152042ull, 2550770828568799425ull}}, {{9240195588046858521ull, 13737679989357786704ull, 281629084818026340ull, 3188463535710999282ull}}, {{11550244485058573151ull, 17172099986697233380ull, 9575408392877308733ull, 3985579419638749102ull}}, {{16442274840016384027ull, 13038405500899464814ull, 1372944227120930054ull, 2490987137274218189ull}}, {{11329471513165704226ull, 7074634839269555210ull, 6327866302328550472ull, 3113733921592772736ull}}, {{4938467354602354475ull, 8843293549086944013ull, 7909832877910688090ull, 3892167401990965920ull}}, {{5392385105840165499ull, 10138744486606727912ull, 4943645548694180056ull, 2432604626244353700ull}}, {{6740481382300206873ull, 12673430608258409890ull, 6179556935867725070ull, 3040755782805442125ull}}, {{17648973764730034400ull, 6618416223468236554ull, 12336132188262044242ull, 3800944728506802656ull}}, {{15642294621383659404ull, 8748196158095035750ull, 7710082617663777651ull, 2375590455316751660ull}}, {{10329496239874798447ull, 6323559179191406784ull, 9637603272079722064ull, 2969488069145939575ull}}, {{12911870299843498058ull, 7904448973989258480ull, 7435318071672264676ull, 3711860086432424469ull}}, {{8069918937402186287ull, 14163652645598062358ull, 6952916804008859374ull, 2319912554020265293ull}}, {{864026634897957050ull, 8481193770142802140ull, 13302832023438462122ull, 2899890692525331616ull}}, {{1080033293622446313ull, 1378120175823726867ull, 16628540029298077653ull, 3624863365656664520ull}}, {{15185099672310221603ull, 6334336238207046487ull, 2338930962913045450ull, 4531079207070830651ull}}, {{16408216322834970358ull, 8570646167306791958ull, 17602732916316511070ull, 2831924504419269156ull}}, {{11286898366688937139ull, 1489935672278714140ull, 3556672071686087222ull, 3539905630524086446ull}}, {{14108622958361171424ull, 11085791627203168483ull, 13669212126462384835ull, 4424882038155108057ull}}, {{6512046339762038188ull, 4622776757788286350ull, 1625728551397908666ull, 2765551273846942536ull}}, {{17363429961557323543ull, 15001842984090133745ull, 2032160689247385832ull, 3456939092308678170ull}}, {{7869229396664490717ull, 305559656403115566ull, 11763572898414008099ull, 4321173865385847712ull}}, {{306582354487918794ull, 16331875849747804893ull, 7352233061508755061ull, 2700733665866154820ull}}, {{4994913961537286397ull, 6579786756902592404ull, 9190291326885943827ull, 3375917082332693525ull}}, {{6243642451921607996ull, 3613047427700852601ull, 16099550177034817688ull, 4219896352915866906ull}}, {{15431491578519474757ull, 2258154642313032875ull, 14673904879074148959ull, 2637435220572416816ull}}, {{14677678454721955543ull, 16657751358173454806ull, 18342381098842686198ull, 3296794025715521020ull}}, {{9123726031547668620ull, 11598817160862042700ull, 4481232299843806132ull, 4120992532144401276ull}}, {{14925700806572068696ull, 16472632762393552495ull, 12024142224257154640ull, 2575620332590250797ull}}, {{14045439989787697966ull, 2144046879282389003ull, 1195119725039279589ull, 3219525415737813497ull}}, {{12945113968807234553ull, 7291744617530374158ull, 6105585674726487390ull, 4024406769672266871ull}}, {{3479010212077133692ull, 18392398441238647561ull, 10733520074345136474ull, 2515254231045166794ull}}, {{8960448783523805019ull, 13767126014693533643ull, 4193528056076644785ull, 3144067788806458493ull}}, {{6588874960977368369ull, 3373849463084753342ull, 9853596088523193886ull, 3930084736008073116ull}}, {{17953104905893018943ull, 15943713969710134550ull, 15381869592181771986ull, 2456302960005045697ull}}, {{13218009095511497870ull, 10706270425282892380ull, 5392278934945051271ull, 3070378700006307122ull}}, {{16522511369389372338ull, 8771152013176227571ull, 15963720705536089897ull, 3837973375007883902ull}}, {{8020726596654663759ull, 17011185054303611992ull, 5365639422532668281ull, 2398733359379927439ull}}, {{10025908245818329699ull, 7428923262597351278ull, 2095363259738447448ull, 2998416699224909299ull}}, {{3309013270418136316ull, 9286154078246689098ull, 16454262129955223022ull, 3748020874031136623ull}}, {{6679819312438723102ull, 1192160280476792782ull, 17201442858863096245ull, 2342513046269460389ull}}, {{17573146177403179685ull, 6101886369023378881ull, 7666745518296706594ull, 2928141307836825487ull}}, {{8131374666471810894ull, 16850729998133999410ull, 4971745879443495338ull, 3660176634796031859ull}}, {{940846296234987809ull, 11840040460812723455ull, 1602996330876981269ull, 4575220793495039824ull}}, {{7505557962787949237ull, 9705868297221646111ull, 1001872706798113293ull, 2859512995934399890ull}}, {{4770261435057548642ull, 16744021389954445543ull, 10475712920352417424ull, 3574391244917999862ull}}, {{1351140775394547898ull, 2483282663733505313ull, 3871269113585745973ull, 4467989056147499828ull}}, {{12373678030690062197ull, 3857894674047134772ull, 11642915232845867041ull, 2792493160092187392ull}}, {{15467097538362577746ull, 9434054360986306369ull, 14553644041057333801ull, 3490616450115234240ull}}, {{5498813867671058470ull, 16404253969660270866ull, 18192055051321667251ull, 4363270562644042800ull}}, {{8048444685721799448ull, 7946815721823975339ull, 11370034407076042032ull, 2727044101652526750ull}}, {{5448869838724861406ull, 9933519652279969174ull, 4989170971990276732ull, 3408805127065658438ull}}, {{16034459335260852565ull, 12416899565349961467ull, 15459835751842621723ull, 4261006408832073047ull}}, {{7715694075324338901ull, 5454719219130031965ull, 16579926372542720433ull, 2663129005520045654ull}}, {{14256303612582811531ull, 11430085042339927860ull, 11501535928823624733ull, 3328911256900057068ull}}, {{17820379515728514413ull, 452548247642746113ull, 14376919911029530917ull, 4161139071125071335ull}}, {{4220208169689239652ull, 2588685663990410273ull, 15903103972034538679ull, 2600711919453169584ull}}, {{9886946230538937469ull, 17070915135270176553ull, 1432135891333621732ull, 3250889899316461981ull}}, {{16970368806601059741ull, 2891899845378169075ull, 6401855882594415070ull, 4063612374145577476ull}}, {{8300637494911968386ull, 15642495458643519384ull, 13224531963476285226ull, 2539757733840985922ull}}, {{10375796868639960482ull, 10329747286449623422ull, 7307292917490580725ull, 3174697167301232403ull}}, {{3746374048945174795ull, 17523870126489417182ull, 4522430128435838002ull, 3968371459126540504ull}}, {{16176541835872897959ull, 15564104847483273642ull, 2826518830272398751ull, 2480232161954087815ull}}, {{10997305257986346641ull, 14843445040926704149ull, 17368206593122662151ull, 3100290202442609768ull}}, {{18358317590910321205ull, 13942620282730992282ull, 3263514167693776073ull, 3875362753053262211ull}}, {{16085634512746338657ull, 1796608649065788320ull, 18180597419304467710ull, 2422101720658288881ull}}, {{1660299067223371705ull, 11469132848187011209ull, 8890688718848420925ull, 3027627150822861102ull}}, {{6687059852456602536ull, 501358004951600299ull, 1889988861705750349ull, 3784533938528576378ull}}, {{1873569398571682633ull, 2619191762308444139ull, 5792929056993481872ull, 2365333711580360236ull}}, {{16177019803496767003ull, 3273989702885555173ull, 7241161321241852340ull, 2956667139475450295ull}}, {{6386216699088795042ull, 4092487128606943967ull, 4439765633124927521ull, 3695833924344312869ull}}, {{10908914464571578757ull, 14087019501447809739ull, 5080696529916773652ull, 2309896202715195543ull}}, {{9024457062287085542ull, 17608774376809762174ull, 1739184643968579161ull, 2887370253393994429ull}}, {{2057199291004081120ull, 8175909915730039006ull, 6785666823388111856ull, 3609212816742493036ull}}, {{11794871150609877208ull, 10219887394662548757ull, 8482083529235139820ull, 4511516020928116295ull}}, {{9677637478344867207ull, 15610801658518868781ull, 12218831233413044243ull, 2819697513080072684ull}}, {{16708732866358471913ull, 14901816054721198072ull, 15273539041766305304ull, 3524621891350090855ull}}, {{2439172009238538275ull, 180525994691945975ull, 14480237783780493727ull, 4405777364187613569ull}}, {{8442011533415168278ull, 7030357774323548090ull, 2132619587221726723ull, 2753610852617258481ull}}, {{1329142379914184539ull, 4176261199477047209ull, 7277460502454546308ull, 3442013565771573101ull}}, {{6273113993320118578ull, 5220326499346309011ull, 13708511646495570789ull, 4302516957214466376ull}}, {{1614853236611380159ull, 5568547071305137084ull, 8567819779059731743ull, 2689073098259041485ull}}, {{2018566545764225199ull, 2348997820704033451ull, 15321460742252052583ull, 3361341372823801856ull}}, {{16358266237487445211ull, 16771305331162205525ull, 705081854105514112ull, 4201676716029752321ull}}, {{12529759407643347209ull, 10482065831976378453ull, 11969891204884416080ull, 2626047947518595200ull}}, {{1827141204272020299ull, 13102582289970473067ull, 14962364006105520100ull, 3282559934398244000ull}}, {{16118984560622189086ull, 16378227862463091333ull, 256210933922348509ull, 4103199917997805001ull}}, {{12380208359602562131ull, 12542235423253126035ull, 11689346879769937578ull, 2564499948748628125ull}}, {{10863574431075814759ull, 6454422242211631736ull, 776625544430258261ull, 3205624935935785157ull}}, {{13579468038844768449ull, 12679713821191927574ull, 5582467948965210730ull, 4007031169919731446ull}}, {{3875481505850592377ull, 12536507156672342638ull, 17324100523385420418ull, 2504394481199832153ull}}, {{14067723919168016279ull, 6447261908985652489ull, 7820067598949611811ull, 3130493101499790192ull}}, {{3749596843677856636ull, 3447391367804677708ull, 9775084498687014764ull, 3913116376874737740ull}}, {{11566870064153436206ull, 11377991641732699375ull, 15332799848534160035ull, 2445697735546711087ull}}, {{9846901561764407353ull, 9610803533738486315ull, 14554313792240312140ull, 3057122169433388859ull}}, {{7696940933778121287ull, 12013504417173107894ull, 13581206221873002271ull, 3821402711791736074ull}}, {{198902065183937901ull, 14425969288374274290ull, 13099939907098014323ull, 2388376694869835046ull}}, {{9471999618334698184ull, 13420775592040454958ull, 7151552847017742096ull, 2985470868587293808ull}}, {{2616627486063596922ull, 16775969490050568698ull, 8939441058772177620ull, 3731838585734117260ull}}, {{6247078197217135980ull, 1261608894426829628ull, 14810522698587386821ull, 2332399116083823287ull}}, {{7808847746521419975ull, 6188697136460924939ull, 13901467354806845622ull, 2915498895104779109ull}}, {{5149373664724387065ull, 16959243457430931982ull, 3541776138226393315ull, 3644373618880973887ull}}, {{15660089117760259639ull, 16587368303361277073ull, 18262278228065155356ull, 4555467023601217358ull}}, {{2870026670959080419ull, 1143733152746022363ull, 6802237874113334194ull, 2847166889750760849ull}}, {{17422591393981014235ull, 10653038477787303761ull, 13114483361069055646ull, 3558958612188451061ull}}, {{7943181187194104082ull, 4092926060379353894ull, 2558046146054155846ull, 4448698265235563827ull}}, {{352802223568927147ull, 16393136843019259896ull, 17739679905779705067ull, 2780436415772227391ull}}, {{441002779461158934ull, 15879735035346686966ull, 17562913863797243430ull, 3475545519715284239ull}}, {{9774625511181224475ull, 10626296757328582899ull, 17341956311319166384ull, 4344431899644105299ull}}, {{3803297935274571345ull, 6641435473330364312ull, 8532879685360785038ull, 2715269937277565812ull}}, {{4754122419093214181ull, 17525166378517731198ull, 10666099606700981297ull, 3394087421596957265ull}}, {{15166025060721293535ull, 8071399917865000285ull, 17944310526803614526ull, 4242609276996196581ull}}, {{11784608672164502411ull, 432938930238237274ull, 13521037088465953031ull, 2651630798122622863ull}}, {{5507388803350852206ull, 14376231718079960305ull, 12289610342155053384ull, 3314538497653278579ull}}, {{11495922022615953162ull, 17970289647599950381ull, 10750326909266428826ull, 4143173122066598224ull}}, {{9490794273348664678ull, 15843117048177356892ull, 6718954318291518016ull, 2589483201291623890ull}}, {{11863492841685830848ull, 1357152236512144499ull, 17622064934719173329ull, 3236854001614529862ull}}, {{10217680033679900655ull, 6308126314067568528ull, 12804209131544190853ull, 4046067502018162328ull}}, {{6386050021049937910ull, 6248421955505924282ull, 8002630707215119283ull, 2528792188761351455ull}}, {{17205934563167198195ull, 3198841425955017448ull, 5391602365591511200ull, 3160990235951689319ull}}, {{3060674130249446128ull, 3998551782443771811ull, 2127816938562001096ull, 3951237794939611649ull}}, {{18053822395901761494ull, 2499094864027357381ull, 12859100632669720445ull, 2469523621837257280ull}}, {{8732219939595038155ull, 7735554598461584631ull, 16073875790837150556ull, 3086904527296571600ull}}, {{6303588906066409790ull, 9669443248076980789ull, 1645600664836886579ull, 3858630659120714501ull}}, {{6245586075505200071ull, 3737559020834419041ull, 3334343424736748064ull, 2411644161950446563ull}}, {{12418668612808887993ull, 4671948776043023801ull, 18002987336203098792ull, 3014555202438058203ull}}, {{1688277710728946279ull, 5839935970053779752ull, 17892048151826485586ull, 3768194003047572754ull}}, {{1055173569205591424ull, 8261645999711000249ull, 15794216113318941395ull, 2355121251904732971ull}}, {{5930652979934377184ull, 5715371481211362407ull, 15131084123221288840ull, 2943901564880916214ull}}, {{2801630206490583576ull, 7144214351514203009ull, 9690483117171835242ull, 3679876956101145268ull}}, {{8113723776540617374ull, 18153639976247529569ull, 12113103896464794052ull, 4599846195126431585ull}}, {{16600292406406355619ull, 2122652948299930172ull, 653160907649414427ull, 2874903871954019741ull}}, {{2303621434298392908ull, 16488374240657076428ull, 5428137152989155937ull, 3593629839942524676ull}}, {{2879526792872991135ull, 6775409745539181823ull, 6785171441236444922ull, 4492037299928155845ull}}, {{8717233273186701315ull, 8846317109389376543ull, 6546575159986472028ull, 2807523312455097403ull}}, {{6284855573055988740ull, 11057896386736720679ull, 3571532931555702131ull, 3509404140568871754ull}}, {{3244383447892598021ull, 9210684464993512945ull, 13687788201299403472ull, 4386755175711089692ull}}, {{13556954701001343523ull, 5756677790620945590ull, 17778239662666902978ull, 2741721984819431057ull}}, {{7722821339396903596ull, 16419219275130957796ull, 8387741523051465010ull, 3427152481024288822ull}}, {{9653526674246129495ull, 11300652057058921437ull, 1261304866959555455ull, 4283940601280361028ull}}, {{8339297180617524886ull, 13980436563302907754ull, 10011687578704497967ull, 2677462875800225642ull}}, {{1200749438917130300ull, 12863859685701246789ull, 3291237436525846651ull, 3346828594750282053ull}}, {{6112622817073800779ull, 11468138588699170582ull, 8725732814084696218ull, 4183535743437852566ull}}, {{17655447315953289199ull, 11779272636364369517ull, 841896990375547232ull, 2614709839648657854ull}}, {{8234251089659447786ull, 14724090795455461897ull, 10275743274824209848ull, 3268387299560822317ull}}, {{14904499880501697637ull, 18405113494319327371ull, 17456365111957650214ull, 4085484124451027896ull}}, {{7009469416099867071ull, 6891509915522191703ull, 10910228194973531384ull, 2553427577781892435ull}}, {{4150150751697445935ull, 8614387394402739629ull, 9026099225289526326ull, 3191784472227365544ull}}, {{9799374458049195323ull, 1544612206148648728ull, 11282624031611907908ull, 3989730590284206930ull}}, {{6124609036280747077ull, 10188754665697681263ull, 11663326038184830346ull, 2493581618927629331ull}}, {{3044075276923545942ull, 3512571295267325771ull, 9967471529303650029ull, 3116977023659536664ull}}, {{17640152151436596139ull, 9002400137511545117ull, 12459339411629562536ull, 3896221279574420830ull}}, {{13330938103861566539ull, 5626500085944715698ull, 3175401113841088681ull, 2435138299734013019ull}}, {{7440300592972182366ull, 11644811125858282527ull, 17804309447583524563ull, 3043922874667516273ull}}, {{4688689722787840053ull, 9944327888895465255ull, 8420328754197241992ull, 3804903593334395342ull}}, {{9847960104383481889ull, 6215204930559665784ull, 651019452945888341ull, 2378064745833997089ull}}, {{12309950130479352362ull, 12380692181626970134ull, 5425460334609748330ull, 2972580932292496361ull}}, {{6164065626244414644ull, 6252493190178936860ull, 11393511436689573317ull, 3715726165365620451ull}}, {{13075913053257534961ull, 6213651253075529489ull, 4815101638717289371ull, 2322328853353512782ull}}, {{2509833261289754989ull, 3155378047917023958ull, 15242249085251387522ull, 2902911066691890977ull}}, {{12360663613466969544ull, 13167594596751055755ull, 5217753301282070690ull, 3628638833364863722ull}}, {{10839143498406324026ull, 7236121209084043886ull, 15745563663457364171ull, 4535798541706079652ull}}, {{2162778668076564612ull, 2216732746463833477ull, 617605252806076799ull, 2834874088566299783ull}}, {{7315159353523093669ull, 16605973988361955558ull, 14607064621289759710ull, 3543592610707874728ull}}, {{18367321228758642894ull, 11534095448597668639ull, 18258830776612199638ull, 4429490763384843410ull}}, {{18397104795615233665ull, 2597123636946154995ull, 16023455253810012678ull, 2768431727115527131ull}}, {{18384694976091654177ull, 12469776583037469552ull, 15417633048835127943ull, 3460539658894408914ull}}, {{4534124646405016105ull, 10975534710369449037ull, 10048669274189134121ull, 4325674573618011143ull}}, {{5139670913216829018ull, 18388924240049375408ull, 13197947324009290681ull, 2703546608511256964ull}}, {{6424588641521036273ull, 9151097244779555548ull, 16497434155011613352ull, 3379433260639071205ull}}, {{8030735801901295341ull, 11438871555974444435ull, 6786734638482352978ull, 4224291575798839007ull}}, {{2713366866974615636ull, 11760980740911415676ull, 11159238176692552467ull, 2640182234874274379ull}}, {{3391708583718269545ull, 10089539907711881691ull, 9337361702438302680ull, 3300227793592842974ull}}, {{18074693784930000643ull, 12611924884639852113ull, 2448330091193102542ull, 4125284741991053718ull}}, {{4379154587940168546ull, 3270767034472519667ull, 15365264362277852801ull, 2578302963744408573ull}}, {{862257216497822778ull, 8700144811518037488ull, 5371522397565152289ull, 3222878704680510717ull}}, {{1077821520622278473ull, 15486867032824934764ull, 11326089015383828265ull, 4028598380850638396ull}}, {{9897010487243699854ull, 2761762867874502371ull, 16302177671469668474ull, 2517873988031648997ull}}, {{7759577090627236913ull, 12675575621697903772ull, 6542664034054921880ull, 3147342485039561247ull}}, {{9699471363284046141ull, 15844469527122379715ull, 3566644024141264446ull, 3934178106299451559ull}}, {{3756326592838834886ull, 5291107436024099418ull, 9146681542729372135ull, 2458861316437157224ull}}, {{13918780277903319416ull, 2002198276602736368ull, 11433351928411715169ull, 3073576645546446530ull}}, {{17398475347379149270ull, 7114433864180808364ull, 5068317873659868153ull, 3841970806933058163ull}}, {{1650675055257192486ull, 15975736211181474988ull, 861855661823723643ull, 2401231754333161352ull}}, {{2063343819071490607ull, 15357984245549455831ull, 1077319577279654554ull, 3001539692916451690ull}}, {{16414237829121526971ull, 9974108270082043980ull, 10570021508454344001ull, 3751924616145564612ull}}, {{1035526606346178549ull, 17763032714869747248ull, 15829635479638740808ull, 2344952885090977882ull}}, {{1294408257932723186ull, 3757046819877632444ull, 10563672312693650203ull, 2931191106363722353ull}}, {{1618010322415903982ull, 84622506419652651ull, 17816276409294450658ull, 3663988882954652941ull}}, {{15857570958302043690ull, 9329150169879341621ull, 8435287456335899610ull, 4579986103693316177ull}}, {{12216824858152471258ull, 10442404874601976417ull, 16801269706278407016ull, 2862491314808322610ull}}, {{1435973017408425361ull, 13053006093252470522ull, 11778215095993232962ull, 3578114143510403263ull}}, {{11018338308615307509ull, 7092885579710812344ull, 10111082851564153299ull, 4472642679388004079ull}}, {{6886461442884567193ull, 2127210478105563763ull, 13236955809868677668ull, 2795401674617502549ull}}, {{3996390785178321087ull, 2659013097631954704ull, 2711136707053683373ull, 3494252093271878187ull}}, {{4995488481472901359ull, 7935452390467331284ull, 17223978939099267928ull, 4367815116589847733ull}}, {{12345552337775339158ull, 4959657744042082052ull, 13070829846150736407ull, 2729884447868654833ull}}, {{15431940422219173947ull, 1587886161625214661ull, 2503479252406256797ull, 3412355559835818542ull}}, {{5454867472491803722ull, 6596543720458906231ull, 12352721102362596804ull, 4265444449794773177ull}}, {{10326821197948459182ull, 13346211862141592202ull, 802921661335541146ull, 2665902781121733236ull}}, {{3685154460580798170ull, 7459392790822214445ull, 1003652076669426433ull, 3332378476402166545ull}}, {{9218129094153385616ull, 13935927006955155960ull, 5866251114264170945ull, 4165473095502708181ull}}, {{5761330683845866010ull, 1792425351705890619ull, 5972249955628800793ull, 2603420684689192613ull}}, {{2589977336379944609ull, 6852217708059751178ull, 12076998462963388895ull, 3254275855861490766ull}}, {{12460843707329706569ull, 3953586116647301068ull, 5872876041849460311ull, 4067844819826863458ull}}, {{17011399353935842414ull, 9388520350545645023ull, 8282233544583300598ull, 2542403012391789661ull}}, {{16652563173992415113ull, 2512278401327280471ull, 14964477949156513652ull, 3178003765489737076ull}}, {{16204017949063130987ull, 3140348001659100589ull, 258853362736090449ull, 3972504706862171346ull}}, {{12433354227378150819ull, 13491932547105407628ull, 4773469370137444434ull, 2482815441788857091ull}}, {{15541692784222688524ull, 7641543647026983727ull, 1355150694244417639ull, 3103519302236071364ull}}, {{14815429961850972750ull, 4940243540356341755ull, 1693938367805522049ull, 3879399127795089205ull}}, {{6953800716943164017ull, 14616867258791183357ull, 3364554489092145232ull, 2424624454871930753ull}}, {{13303936914606342925ull, 18271084073488979196ull, 8817379129792569444ull, 3030780568589913441ull}}, {{16629921143257928657ull, 4392111018151672379ull, 15633409930668099710ull, 3788475710737391801ull}}, {{8087857705322511459ull, 16580127441626958949ull, 2853352179026480462ull, 2367797319210869876ull}}, {{14721508150080527227ull, 11501787265178922878ull, 3566690223783100578ull, 2959746649013587345ull}}, {{9178513150745883226ull, 5153862044618877790ull, 9070048798156263627ull, 3699683311266984181ull}}, {{1124884700788789112ull, 915320768673104667ull, 7974623508061358719ull, 2312302069541865113ull}}, {{15241163931268150102ull, 14979209016123544545ull, 14579965403504086302ull, 2890377586927331391ull}}, {{5216396858803023916ull, 9500639233299654874ull, 13613270735952719974ull, 3612971983659164239ull}}, {{15743868110358555702ull, 2652427004769792784ull, 12404902401513512064ull, 4516214979573955299ull}}, {{9839917568974097314ull, 1657766877981120490ull, 5447220991732251088ull, 2822634362233722062ull}}, {{3076524924362845835ull, 2072208597476400613ull, 16032398276520089668ull, 3528292952792152577ull}}, {{8457342173880945197ull, 2590260746845500766ull, 6205439790367948373ull, 4410366190990190722ull}}, {{674152840248202844ull, 3924755975992131931ull, 8490085887407355637ull, 2756478869368869201ull}}, {{14677749105592417267ull, 9517630988417552817ull, 15224293377686582450ull, 3445598586711086501ull}}, {{4512128326708357872ull, 2673666698667165214ull, 5195308666826064351ull, 4306998233388858127ull}}, {{16655138259474887382ull, 8588570714308060114ull, 10164596944407372075ull, 2691873895868036329ull}}, {{11595550787488833420ull, 6124027374457687239ull, 17317432198936602998ull, 3364842369835045411ull}}, {{9882752465933653870ull, 16878406254926884857ull, 17035104230243365843ull, 4206052962293806764ull}}, {{17705935337277003429ull, 8243160900115609083ull, 1423568107047327844ull, 2628783101433629228ull}}, {{17520733153168866382ull, 10303951125144511354ull, 1779460133809159805ull, 3285978876792036535ull}}, {{12677544404606307170ull, 17491624924858027097ull, 16059383222543613468ull, 4107473595990045668ull}}, {{1005936225237860125ull, 1708893541181491128ull, 813742477234982610ull, 2567170997493778543ull}}, {{1257420281547325157ull, 11359488963331639718ull, 14852236151825891974ull, 3208963746867223178ull}}, {{10795147388788932254ull, 4975989167309773839ull, 9341923152927589160ull, 4011204683584028973ull}}, {{13664496145634164515ull, 3109993229568608649ull, 8144544979793437177ull, 2507002927240018108ull}}, {{3245562126760541931ull, 8499177555388148716ull, 10180681224741796471ull, 3133753659050022635ull}}, {{4056952658450677414ull, 6012285925807797991ull, 8114165512499857685ull, 3917192073812528294ull}}, {{9453124439172755240ull, 6063521712843567696ull, 459667426885023149ull, 2448245046132830184ull}}, {{11816405548965944050ull, 12191088159481847524ull, 574584283606278936ull, 3060306307666037730ull}}, {{14770506936207430062ull, 15238860199352309405ull, 9941602391362624478ull, 3825382884582547162ull}}, {{11537409844343337741ull, 4912601606167805474ull, 10825187513029028203ull, 2390864302864091976ull}}, {{5198390268574396368ull, 1529065989282368939ull, 13531484391286285254ull, 2988580378580114970ull}}, {{1886301817290607556ull, 11134704523457736982ull, 7690983452253080759ull, 3735725473225143713ull}}, {{15013996691088793435ull, 13876719354802167469ull, 16336079703726645234ull, 2334828420765714820ull}}, {{4932437808578828081ull, 8122527156647933529ull, 1973355555948754927ull, 2918535525957143526ull}}, {{10777233279150923005ull, 5541472927382529007ull, 11690066481790719467ull, 3648169407446429407ull}}, {{8859855580511265853ull, 2315155140800773355ull, 10000897083811011430ull, 4560211759308036759ull}}, {{3231566728605847206ull, 15282030018282647059ull, 13168089705022963999ull, 2850132349567522974ull}}, {{17874516466039472719ull, 14490851504425920919ull, 7236740094423929191ull, 3562665436959403718ull}}, {{17731459564121952995ull, 13501878362105013245ull, 18269297154884687297ull, 4453331796199254647ull}}, {{13388005236789914574ull, 1521144948674551422ull, 18335839749444011417ull, 2783332372624534154ull}}, {{7511634509132617410ull, 6513117204270577182ull, 13696427649950238463ull, 3479165465780667693ull}}, {{166171099560995954ull, 3529710486910833574ull, 3285476507155634367ull, 4348956832225834617ull}}, {{13938914992507786183ull, 9123598081960352839ull, 13582637863040741239ull, 2718098020141146635ull}}, {{12811957722207344825ull, 6792811584023053145ull, 12366611310373538645ull, 3397622525176433294ull}}, {{2179889097477017319ull, 13102700498456204336ull, 6234892101112147498ull, 4247028156470541618ull}}, {{1362430685923135825ull, 12800873829962515614ull, 8508493581622480090ull, 2654392597794088511ull}}, {{10926410394258695589ull, 6777720250598368709ull, 6023930958600712209ull, 3317990747242610639ull}}, {{18269699011250757390ull, 13083836331675348790ull, 2918227679823502357ull, 4147488434053263299ull}}, {{6806875863604335465ull, 10483240716510786946ull, 17964793364385546637ull, 2592180271283289561ull}}, {{17731966866360195139ull, 17715736914065871586ull, 8620933650199769584ull, 3240225339104111952ull}}, {{12941586546095468115ull, 3697927068872787867ull, 10776167062749711981ull, 4050281673880139940ull}}, {{5782648582095973620ull, 4617047427259186369ull, 15958476451073345796ull, 2531426046175087462ull}}, {{11839996746047354929ull, 5771309284073982961ull, 10724723526986906437ull, 3164282557718859328ull}}, {{964937877277029950ull, 11825822623519866606ull, 13405904408733633046ull, 3955353197148574160ull}}, {{14438144228580307431ull, 2779453121272528724ull, 8378690255458520654ull, 2472095748217858850ull}}, {{18047680285725384288ull, 12697688438445436713ull, 1249990782468375009ull, 3090119685272323563ull}}, {{8724542301874566648ull, 2037052492774632180ull, 15397546533367632474ull, 3862649606590404453ull}}, {{14676210975526379963ull, 5884843826411533016ull, 11929309592568464248ull, 2414156004119002783ull}}, {{18345263719407974954ull, 7356054783014416270ull, 10299950972283192406ull, 3017695005148753479ull}}, {{13708207612405192884ull, 18418440515622796146ull, 8263252696926602603ull, 3772118756435941849ull}}, {{13179315776180633457ull, 9205682313050553639ull, 16693747981647596387ull, 2357574222772463655ull}}, {{11862458701798403917ull, 6895416872885804145ull, 16255498958632107580ull, 2946967778465579569ull}}, {{993015321965841184ull, 8619271091107255182ull, 6484315643007970763ull, 3683709723081974462ull}}, {{10464641189312077288ull, 6162402845456681073ull, 17328766590614739262ull, 4604637153852468077ull}}, {{18069615789388518065ull, 17686559833692589382ull, 13136322128347905990ull, 2877898221157792548ull}}, {{13363647699880871773ull, 12884827755260960920ull, 16420402660434882488ull, 3597372776447240685ull}}, {{16704559624851089717ull, 16106034694076201150ull, 6690445270261439398ull, 4496715970559050857ull}}, {{5828663747104543169ull, 5454585665370237815ull, 15710743339981869384ull, 2810447481599406785ull}}, {{2674143665453291057ull, 6818232081712797269ull, 5803371119695173018ull, 3513059351999258482ull}}, {{7954365600244001725ull, 17746162138995772394ull, 16477585936473742080ull, 4391324189999073102ull}}, {{9583164518579888983ull, 11091351336872357746ull, 5686805191868700896ull, 2744577618749420689ull}}, {{2755583611370085420ull, 13864189171090447183ull, 11720192508263264024ull, 3430722023436775861ull}}, {{17279537569494770487ull, 17330236463863058978ull, 815182580046916318ull, 4288402529295969827ull}}, {{15411396999361619459ull, 6219711771487023957ull, 16650390177025180363ull, 2680251580809981141ull}}, {{5429188193919860611ull, 3162953695931392043ull, 6977929665999311742ull, 3350314476012476427ull}}, {{2174799223972437860ull, 13177064156769015862ull, 4110726064071751773ull, 4187893095015595534ull}}, {{15194307570264937374ull, 10541508107194328865ull, 16404261845327008570ull, 2617433184384747208ull}}, {{5157826407549008006ull, 3953513097138135274ull, 2058583232949209097ull, 3271791480480934011ull}}, {{15670655046291035815ull, 9553577389850056996ull, 16408287096468675083ull, 4089739350601167513ull}}, {{570787367077121577ull, 3665142859442591671ull, 3337650407651840071ull, 2556087094125729696ull}}, {{14548542264128565683ull, 18416486629585403300ull, 4172063009564800088ull, 3195108867657162120ull}}, {{18185677830160707103ull, 4573864213272202509ull, 5215078761956000111ull, 3993886084571452650ull}}, {{13671891653064135892ull, 9776194160936208424ull, 7871110244649887973ull, 2496178802857157906ull}}, {{17089864566330169865ull, 16831928719597648434ull, 615515768957584158ull, 3120223503571447383ull}}, {{12138958671057936523ull, 11816538862642284735ull, 14604452766479143910ull, 3900279379464309228ull}}, {{14504378197052292183ull, 2773650770724040055ull, 18351155015904240752ull, 2437674612165193267ull}}, {{13518786727887977324ull, 3467063463405050069ull, 18327257751452913036ull, 3047093265206491584ull}}, {{3063425354577807943ull, 4333829329256312587ull, 4462328115606589679ull, 3808866581508114481ull}}, {{18055541911106987629ull, 9626172358426277222ull, 14318170118322588309ull, 2380541613442571550ull}}, {{13346055352028958728ull, 16644401466460234432ull, 8674340611048459578ull, 2975677016803214438ull}}, {{16682569190036198410ull, 11582129796220517232ull, 1619553726955798665ull, 3719596271004018048ull}}, {{10426605743772624006ull, 321302094996741414ull, 1012221079347374166ull, 2324747669377511280ull}}, {{3809885142861004200ull, 9624999655600702576ull, 1265276349184217707ull, 2905934586721889100ull}}, {{4762356428576255250ull, 7419563551073490316ull, 1581595436480272134ull, 3632418233402361375ull}}, {{5952945535720319062ull, 51082401987087087ull, 15812052350882503880ull, 4540522791752951718ull}}, {{10638119987466281270ull, 31926501241929429ull, 5270846700874177021ull, 2837826744845594824ull}}, {{17909336002760239491ull, 4651594144979799690ull, 6588558376092721276ull, 3547283431056993530ull}}, {{13163297966595523556ull, 5814492681224749613ull, 17459070006970677403ull, 4434104288821241912ull}}, {{10532904238335896175ull, 1328214916551774556ull, 10911918754356673377ull, 2771315180513276195ull}}, {{13166130297919870218ull, 6271954664117106099ull, 9028212424518453817ull, 3464143975641595244ull}}, {{11845976853972449868ull, 12451629348573770528ull, 11285265530648067271ull, 4330179969551994055ull}}, {{7403735533732781168ull, 14699797370499688436ull, 13970819984296123900ull, 2706362480969996284ull}}, {{9254669417165976460ull, 18374746713124610545ull, 17463524980370154875ull, 3382953101212495355ull}}, {{16180022789884858479ull, 18356747372978375277ull, 17217720207035305690ull, 4228691376515619194ull}}, {{12418357252891730501ull, 16084653126538872452ull, 15372761147824453960ull, 2642932110322261996ull}}, {{15522946566114663127ull, 1659072334464038949ull, 769207361071015835ull, 3303665137902827496ull}}, {{5568625152361165196ull, 15908898473362212399ull, 961509201338769793ull, 4129581422378534370ull}}, {{10397919747866810104ull, 3025532518210300893ull, 5212629269264119025ull, 2580988388986583981ull}}, {{17609085703260900534ull, 8393601666190264020ull, 11127472605007536685ull, 3226235486233229976ull}}, {{3564613055366574051ull, 15103688101165217930ull, 13909340756259420856ull, 4032794357791537470ull}}, {{6839569178031496686ull, 9439805063228261206ull, 4081651954234750131ull, 2520496473619710919ull}}, {{17772833509394146665ull, 7188070310607938603ull, 490378924366049760ull, 3150620592024638649ull}}, {{17604355868315295428ull, 8985087888259923254ull, 5224659673884950104ull, 3938275740030798311ull}}, {{6391036399269671738ull, 5615679930162452034ull, 10182941323819175671ull, 2461422337519248944ull}}, {{17212167535941865481ull, 2407913894275677138ull, 12728676654773969589ull, 3076777921899061180ull}}, {{12291837383072556043ull, 7621578386271984327ull, 15910845818467461986ull, 3845972402373826475ull}}, {{14599927392061429383ull, 9375172509847378108ull, 7638435627328469789ull, 2403732751483641547ull}}, {{18249909240076786729ull, 16330651655736610539ull, 4936358515733199332ull, 3004665939354551934ull}}, {{18200700531668595507ull, 1966570495961211558ull, 15393820181521274974ull, 3755832424193189917ull}}, {{6763751813865484288ull, 15064164615257920936ull, 11926980622664490810ull, 2347395265120743698ull}}, {{8454689767331855360ull, 9606833732217625362ull, 5685353741475837705ull, 2934244081400929623ull}}, {{1344990172310043392ull, 16620228183699419607ull, 2495006158417409227ull, 3667805101751162029ull}}, {{15516295770669717951ull, 16163599211196886604ull, 7730443716449149438ull, 4584756377188952536ull}}, {{474312819813797912ull, 5490563488570666224ull, 4831527322780718399ull, 2865472735743095335ull}}, {{592891024767247390ull, 2251518342285944876ull, 1427723135048510095ull, 3581840919678869169ull}}, {{741113780959059237ull, 16649455983139594807ull, 6396339937238025522ull, 4477301149598586461ull}}, {{7380725140740493879ull, 15017596007889634658ull, 6303555469987459903ull, 2798313218499116538ull}}, {{2534389070841541ull, 14160308991434655419ull, 17102816374339100687ull, 3497891523123895672ull}}, {{13838226041620715638ull, 13088700220865931369ull, 2931776394214324243ull, 4372364403904869591ull}}, {{1731362248371865418ull, 5874594628827513154ull, 8749889274025034508ull, 2732727752440543494ull}}, {{11387574847319607580ull, 7343243286034391442ull, 1713989555676517327ull, 3415909690550679368ull}}, {{5011096522294733667ull, 4567368089115601399ull, 2142486944595646659ull, 4269887113188349210ull}}, {{10049464354075290398ull, 548762046483556922ull, 5950740358799667066ull, 2668679445742718256ull}}, {{3338458405739337190ull, 9909324594959221961ull, 7438425448499583832ull, 3335849307178397820ull}}, {{8784759025601559391ull, 12386655743699027451ull, 9298031810624479790ull, 4169811633972997275ull}}, {{3184631381787280668ull, 3129973821384504253ull, 3505426872426605917ull, 2606132271233123297ull}}, {{8592475245661488738ull, 8524153295158018220ull, 8993469608960645300ull, 3257665339041404121ull}}, {{10740594057076860923ull, 10655191618947522775ull, 15853523029628194529ull, 4072081673801755151ull}}, {{13630400313314119933ull, 18188709807910671494ull, 16825980921158703436ull, 2545051046126096969ull}}, {{7814628354787874108ull, 4289143186178787752ull, 7197418096166215584ull, 3181313807657621212ull}}, {{9768285443484842635ull, 5361428982723484690ull, 8996772620207769480ull, 3976642259572026515ull}}, {{10716864420605414551ull, 3350893114202177931ull, 3317139878416161973ull, 2485401412232516572ull}}, {{8784394507329380285ull, 8800302411180110318ull, 4146424848020202466ull, 3106751765290645715ull}}, {{1757121097306949548ull, 1777005977120362090ull, 571345041597865179ull, 3883439706613307144ull}}, {{5709886704244231371ull, 17251529800196083970ull, 357090650998665736ull, 2427149816633316965ull}}, {{16360730417160065022ull, 3117668176535553346ull, 5058049332175720075ull, 3033937270791646206ull}}, {{11227540984595305470ull, 17732143275951605395ull, 15545933702074425901ull, 3792421588489557757ull}}, {{4711370106158371967ull, 13388432556683447324ull, 12022051573010210140ull, 2370263492805973598ull}}, {{5889212632697964958ull, 16735540695854309155ull, 5804192429407986867ull, 2962829366007466998ull}}, {{2749829772445068294ull, 16307739851390498540ull, 16478612573614759392ull, 3703536707509333747ull}}, {{10942015644632943492ull, 10192337407119061587ull, 7993289849295530668ull, 2314710442193333592ull}}, {{9065833537363791461ull, 12740421758898826984ull, 9991612311619413335ull, 2893388052741666990ull}}, {{11332291921704739326ull, 11313841180196145826ull, 3266143352669490861ull, 3616735065927083738ull}}, {{4941992865276148349ull, 307243419963018571ull, 13306051227691639385ull, 4520918832408854672ull}}, {{782902531583898766ull, 11721242183545356367ull, 8316282017307274615ull, 2825574270255534170ull}}, {{14813686219762037170ull, 10039866711004307554ull, 1171980484779317461ull, 3531967837819417713ull}}, {{9293735737847770654ull, 17161519407182772347ull, 6076661624401534730ull, 4414959797274272141ull}}, {{3502741826941162707ull, 15337635647916620621ull, 6103756524464653158ull, 2759349873296420088ull}}, {{8990113302103841287ull, 9948672523040999968ull, 7629695655580816448ull, 3449187341620525110ull}}, {{11237641627629801609ull, 12435840653801249960ull, 313747532621244752ull, 4311484177025656388ull}}, {{7023526017268626006ull, 7772400408625781225ull, 9419464244743053778ull, 2694677610641035242ull}}, {{13391093540013170411ull, 492128473927450723ull, 2550958269074041415ull, 3368347013301294053ull}}, {{12127180906589075110ull, 14450218647691477116ull, 7800383854769939672ull, 4210433766626617566ull}}, {{16802860103472947752ull, 9031386654807173197ull, 263553890803824391ull, 2631521104141635979ull}}, {{7168517074059020978ull, 6677547300081578593ull, 14164500418786944201ull, 3289401380177044973ull}}, {{13572332361001164126ull, 12958620143529361145ull, 3870567468201516539ull, 4111751725221306217ull}}, {{1565178697984645723ull, 5793294580492156764ull, 13948319713694417597ull, 2569844828263316385ull}}, {{1956473372480807154ull, 11853304244042583859ull, 3600341586835858284ull, 3212306035329145482ull}}, {{16280649770883172654ull, 14816630305053229823ull, 13723799020399598663ull, 4015382544161431852ull}}, {{17092935134443064765ull, 16177922968299350495ull, 17800746424604524972ull, 2509614090100894907ull}}, {{16754482899626443052ull, 1775659636664636503ull, 17639247012328268312ull, 3137017612626118634ull}}, {{16331417606105665911ull, 2219574545830795629ull, 12825686728555559582ull, 3921272015782648293ull}}, {{12512979013029735146ull, 15222292146426410980ull, 10321897214560918690ull, 2450795009864155183ull}}, {{15641223766287168933ull, 9804493146178237917ull, 8290685499773760459ull, 3063493762330193979ull}}, {{5716471652576797454ull, 7643930414295409493ull, 5751670856289812670ull, 3829367202912742474ull}}, {{5878637792074192361ull, 165770490507243029ull, 8206480303608520823ull, 2393354501820464046ull}}, {{11959983258520128355ull, 14042271168416217498ull, 1034728342655875220ull, 2991693127275580058ull}}, {{5726607036295384636ull, 17552838960520271873ull, 10516782465174619833ull, 3739616409094475072ull}}, {{15108344443753085158ull, 4052995322684088064ull, 6572989040734137396ull, 2337260255684046920ull}}, {{438686480981804831ull, 5066244153355110081ull, 8216236300917671745ull, 2921575319605058650ull}}, {{5160044119654643942ull, 10944491210121275505ull, 1046923339292313873ull, 3651969149506323313ull}}, {{11061741167995692832ull, 18292300031078982285ull, 5920340192542780245ull, 4564961436882904141ull}}, {{9219431239211001972ull, 13738530528638057880ull, 6006055629552931605ull, 2853100898051815088ull}}, {{11524289049013752465ull, 3338105105515408638ull, 7507569536941164507ull, 3566376122564768860ull}}, {{5181989274412414773ull, 18007689437176424510ull, 9384461921176455633ull, 4457970153205961075ull}}, {{17073801351789922945ull, 4337276870594183462ull, 3559445691521590819ull, 2786231345753725672ull}}, {{12118879652882627874ull, 809910069815341424ull, 4449307114401988524ull, 3482789182192157090ull}}, {{15148599566103284842ull, 1012387587269176780ull, 14785005929857261463ull, 4353486477740196362ull}}, {{244502691959777218ull, 7550271269684317344ull, 13852314724588176318ull, 2720929048587622726ull}}, {{305628364949721523ull, 214467050250620872ull, 8092021368880444590ull, 3401161310734528408ull}}, {{382035456187151903ull, 9491455849668051898ull, 10115026711100555737ull, 4251451638418160510ull}}, {{4850458178544357844ull, 17461374952111002196ull, 1710205676010459431ull, 2657157274011350319ull}}, {{6063072723180447305ull, 17215032671711364841ull, 15972815150295238001ull, 3321446592514187898ull}}, {{12190526922402947035ull, 7683732784357042339ull, 10742646901014271694ull, 4151808240642734873ull}}, {{5313236317288147945ull, 190646971795763558ull, 18243369359202389569ull, 2594880150401709295ull}}, {{15864917433464960739ull, 4849994733172092351ull, 18192525680575599057ull, 3243600188002136619ull}}, {{15219460773403813020ull, 10674179434892503343ull, 18128971082292110917ull, 4054500235002670774ull}}, {{16429692011018464993ull, 8977205156021508541ull, 6718920908005181419ull, 2534062646876669234ull}}, {{6702056958490917530ull, 6609820426599497773ull, 17622023171861252582ull, 3167578308595836542ull}}, {{12989257216541034816ull, 17485647570104148024ull, 12804156927971789919ull, 3959472885744795678ull}}, {{8118285760338146760ull, 17846058758956174371ull, 3390912061554980795ull, 2474670553590497299ull}}, {{5536171181995295546ull, 17695887430267830060ull, 18073698132225889706ull, 3093338191988121623ull}}, {{6920213977494119432ull, 12896487250980011767ull, 17980436646854974229ull, 3866672739985152029ull}}, {{11242662763574906501ull, 10366147541076201306ull, 13543615913498052845ull, 2416670462490720018ull}}, {{4829956417613857319ull, 17569370444772639537ull, 7706147855017790248ull, 3020838078113400023ull}}, {{10649131540444709552ull, 3514968982256247805ull, 5020998800344849907ull, 3776047597641750029ull}}, {{8961550221991637422ull, 18337756678406012542ull, 5443967259429225143ull, 2360029748526093768ull}}, {{1978565740634770970ull, 18310509829580127774ull, 6804959074286531429ull, 2950037185657617210ull}}, {{11696579212648239520ull, 9053079231692996005ull, 17729570879712940095ull, 3687546482072021512ull}}, {{785665960528135688ull, 6704663021188857103ull, 3715219525931623503ull, 4609433102590026891ull}}, {{7408570252971166661ull, 11107943415884117545ull, 16169194493570737ull, 2880895689118766807ull}}, {{13872398834641346230ull, 49871214572983219ull, 13855269548399127134ull, 3601119611398458508ull}}, {{12728812524874294884ull, 9285711055071004832ull, 17319086935498908917ull, 4501399514248073135ull}}, {{7955507828046434303ull, 8109412418633071972ull, 17741958362327899929ull, 2813374696405045709ull}}, {{9944384785058042878ull, 14748451541718727869ull, 8342389897627711199ull, 3516718370506307137ull}}, {{17042166999749941502ull, 13823878408721021932ull, 15039673390462026903ull, 4395897963132883921ull}}, {{1427982337988937631ull, 15557453033091720564ull, 2482266841397684958ull, 2747436226958052451ull}}, {{1784977922486172038ull, 10223444254509874897ull, 16937891607029269910ull, 3434295283697565563ull}}, {{6842908421535102952ull, 3555933281282567813ull, 16560678490359199484ull, 4292869104621956954ull}}, {{6582660772673133297ull, 11445830337656380691ull, 14962110074901887581ull, 2683043190388723096ull}}, {{3616639947414028717ull, 472229866788312152ull, 255893519917807861ull, 3353803987985903871ull}}, {{4520799934267535896ull, 5201973351912778094ull, 14154924955179423538ull, 4192254984982379838ull}}, {{16660558014199373647ull, 7862919363372874212ull, 4235142078559751807ull, 2620159365613987399ull}}, {{2378953444039665443ull, 5216963185788704862ull, 682241579772301855ull, 3275199207017484249ull}}, {{12197063841904357612ull, 1909517963808493173ull, 5464487993142765223ull, 4093999008771855311ull}}, {{9929007910403917459ull, 8110977755021390089ull, 10332834023355310120ull, 2558749380482409569ull}}, {{17022945906432284728ull, 10138722193776737611ull, 17527728547621525554ull, 3198436725603011961ull}}, {{16666996364612968006ull, 3450030705366146206ull, 8074602629244743231ull, 3998045907003764952ull}}, {{5805186709455717100ull, 9073798218494923235ull, 5046626643277964519ull, 2498778691877353095ull}}, {{2644797368392258471ull, 6730561754691266140ull, 1696597285670067745ull, 3123473364846691369ull}}, {{3305996710490323089ull, 13024888211791470579ull, 6732432625514972585ull, 3904341706058364211ull}}, {{18207149008552309595ull, 1223026104728587255ull, 1901927381733163914ull, 2440213566286477632ull}}, {{18147250242262999089ull, 10752154667765509877ull, 2377409227166454892ull, 3050266957858097040ull}}, {{8849004747546585149ull, 13440193334706887347ull, 2971761533958068615ull, 3812833697322621300ull}}, {{3224784958002921766ull, 15317649861832886448ull, 11080722995578568692ull, 2383021060826638312ull}}, {{4030981197503652208ull, 700318253581556444ull, 13850903744473210866ull, 2978776326033297890ull}}, {{5038726496879565260ull, 10098769853831721363ull, 8090257643736737774ull, 3723470407541622363ull}}, {{843361051336034336ull, 1700045140217437948ull, 2750568018121767157ull, 2327169004713513977ull}}, {{1054201314170042919ull, 6736742443699185339ull, 8049896041079596850ull, 2908961255891892471ull}}, {{15152809697994717361ull, 17644300091478757481ull, 5450684032922108158ull, 3636201569864865589ull}}, {{5105954067211232989ull, 12832003077493671044ull, 11425041059580023102ull, 4545251962331081986ull}}, {{12414593328861796426ull, 3408315905006156498ull, 11752336680664902343ull, 2840782476456926241ull}}, {{6294869624222469725ull, 18095452936539859335ull, 855362795548964216ull, 3550978095571157802ull}}, {{3256901011850699252ull, 4172572096965272553ull, 10292575531290981079ull, 4438722619463947252ull}}, {{13564778178475156793ull, 9525386588244377201ull, 15656231743911638982ull, 2774201637164967032ull}}, {{3120914667811782279ull, 2683361198450695694ull, 1123545606179997112ull, 3467752046456208791ull}}, {{13124515371619503656ull, 3354201498063369617ull, 15239490063007160102ull, 4334690058070260988ull}}, {{1285293079621107929ull, 15931433991571769723ull, 301309252524699255ull, 2709181286293913118ull}}, {{15441674404808548624ull, 15302606471037324249ull, 9600008602510649877ull, 3386476607867391397ull}}, {{5467034950728522067ull, 5293200033514491600ull, 16611696771565700251ull, 4233095759834239246ull}}, {{3416896844205326292ull, 1002407011732863298ull, 5770624463801174753ull, 2645684849896399529ull}}, {{13494493092111433673ull, 5864694783093467026ull, 11824966598178856345ull, 3307106062370499411ull}}, {{7644744328284516283ull, 11942554497294221687ull, 10169522229296182527ull, 4133882577963124264ull}}, {{11695494232818904533ull, 14381625588449970410ull, 6355951393310114079ull, 2583676611226952665ull}}, {{5395995754168854858ull, 13365345967135075109ull, 12556625260065030503ull, 3229595764033690831ull}}, {{11356680711138456477ull, 12094996440491455982ull, 11084095556653900225ull, 4036994705042113539ull}}, {{2486239426034147394ull, 641843747666078133ull, 4621716713694993689ull, 2523121690651320962ull}}, {{7719485300970072147ull, 5413990703009985570ull, 15000517928973517919ull, 3153902113314151202ull}}, {{425984589357814375ull, 2155802360335094059ull, 9527275374362121591ull, 3942377641642689003ull}}, {{16407141432844491649ull, 8264905502850515642ull, 3648704099762632042ull, 2463986026026680627ull}}, {{11285554754200838753ull, 1107759841708368745ull, 18395938179985453765ull, 3079982532533350783ull}}, {{271885387468884729ull, 5996385820562848836ull, 18383236706554429302ull, 3849978165666688479ull}}, {{9393300404022828764ull, 17582799193133944234ull, 18407051969237600169ull, 2406236353541680299ull}}, {{2518253468173760147ull, 8143440936135266581ull, 18397128943119612308ull, 3007795441927100374ull}}, {{7759502853644588087ull, 10179301170169083226ull, 13773039142044739577ull, 3759744302408875468ull}}, {{9461375301955255459ull, 17891278277424146776ull, 17831521500632738043ull, 2349840189005547167ull}}, {{11826719127444069323ull, 17752411828352795566ull, 17677715857363534650ull, 2937300236256933959ull}}, {{5560026872450310846ull, 12967142748586218650ull, 17485458803277030409ull, 3671625295321167449ull}}, {{16173405627417664365ull, 2373870380450609600ull, 8021765448814124300ull, 4589531619151459312ull}}, {{10108378517136040228ull, 10707041024636406808ull, 5013603405508827687ull, 2868457261969662070ull}}, {{12635473146420050285ull, 8772115262368120606ull, 15490376293740810417ull, 3585571577462077587ull}}, {{6570969396170287049ull, 15576830096387538662ull, 14751284348748625117ull, 4481964471827596984ull}}, {{17941913927888593118ull, 12041361819455905615ull, 9219552717967890698ull, 2801227794892248115ull}}, {{17815706391433353493ull, 5828330237465106211ull, 6912754879032475469ull, 3501534743615310144ull}}, {{17657946970864303962ull, 11897098815258770668ull, 8640943598790594336ull, 4376918429519137680ull}}, {{1812844819935414168ull, 7435686759536731668ull, 5400589749244121460ull, 2735574018449461050ull}}, {{2266056024919267710ull, 9294608449420914585ull, 15974109223409927633ull, 3419467523061826312ull}}, {{7444256049576472542ull, 16229946580203531135ull, 1520892455552857925ull, 4274334403827282891ull}}, {{11570189058626377195ull, 12449559621840900911ull, 17091458849216393867ull, 2671459002392051806ull}}, {{9851050304855583589ull, 10950263508873738235ull, 12140951524665716526ull, 3339323752990064758ull}}, {{7702126862642091583ull, 4464457349237396986ull, 5952817368977369850ull, 4174154691237580948ull}}, {{9425515307578695143ull, 7401971861700761020ull, 12943882892465631964ull, 2608846682023488092ull}}, {{11781894134473368929ull, 9252464827125951275ull, 16179853615582039955ull, 3261058352529360115ull}}, {{10115681649664323257ull, 6953895015480051190ull, 15613131001050162040ull, 4076322940661700144ull}}, {{1710615012612814132ull, 4346184384675031994ull, 9758206875656351275ull, 2547701837913562590ull}}, {{11361640802620793473ull, 821044462416402088ull, 2974386557715663286ull, 3184627297391953238ull}}, {{14202051003275991841ull, 10249677614875278418ull, 12941355233999354915ull, 3980784121739941547ull}}, {{13487967895474882805ull, 4100205500083355059ull, 5782504012035902870ull, 2487990076087463467ull}}, {{12248273850916215602ull, 14348628911958969632ull, 2616443996617490683ull, 3109987595109329334ull}}, {{15310342313645269502ull, 13324100121521324136ull, 12493927032626639162ull, 3887484493886661667ull}}, {{9568963946028293439ull, 12939248594378215489ull, 5502861386177955524ull, 2429677808679163542ull}}, {{16572890950962754703ull, 16174060742972769361ull, 16101948769577220213ull, 3037097260848954427ull}}, {{6881055633421279666ull, 6382517873433797990ull, 15515749943544137363ull, 3796371576061193034ull}}, {{18135717826170463503ull, 1683230661682429791ull, 14309029733142473756ull, 2372732235038245646ull}}, {{18057961264285691475ull, 2104038327103037239ull, 8662915129573316387ull, 2965915293797807058ull}}, {{17960765561929726440ull, 16465105964160960261ull, 1605271875111869675ull, 3707394117247258823ull}}, {{13531321485419772977ull, 7984848218386906211ull, 7920823949586000403ull, 2317121323279536764ull}}, {{12302465838347328317ull, 5369374254556244860ull, 9901029936982500504ull, 2896401654099420955ull}}, {{15378082297934160396ull, 6711717818195306075ull, 7764601402800737726ull, 3620502067624276194ull}}, {{14610916853990312591ull, 17613019309598908402ull, 482379716646146349ull, 4525627584530345243ull}}, {{13743509052171333274ull, 13313980077713011703ull, 16442388387399699132ull, 2828517240331465776ull}}, {{12567700296786778688ull, 16642475097141264629ull, 2106241410540072299ull, 3535646550414332221ull}}, {{1874567315701309648ull, 16191407852999192883ull, 7244487781602478278ull, 4419558188017915276ull}}, {{17312505636809176194ull, 5507943889697107647ull, 13751176900356324732ull, 2762223867511197047ull}}, {{17028946027584082339ull, 6884929862121384559ull, 12577285107018018011ull, 3452779834388996309ull}}, {{16674496516052715019ull, 3994476309224342795ull, 1886548328490358802ull, 4315974792986245387ull}}, {{8115717313319252935ull, 7108233711692602151ull, 17319993769802331915ull, 2697484245616403366ull}}, {{5532960623221678265ull, 4273606121188364785ull, 12426620175398139086ull, 3371855307020504208ull}}, {{11527886797454485735ull, 14565379688340231789ull, 15533275219247673857ull, 4214819133775630260ull}}, {{9510772257622747537ull, 2185833277571563012ull, 484924975175020353ull, 2634261958609768913ull}}, {{11888465322028434421ull, 7343977615391841669ull, 5217842237396163345ull, 3292827448262211141ull}}, {{1025523597253379314ull, 13791658037667189991ull, 11133988815172592085ull, 4116034310327763926ull}}, {{7558481275924443927ull, 10925629282755687696ull, 2347056991055482149ull, 2572521443954852454ull}}, {{9448101594905554909ull, 18268722621871997524ull, 12157193275674128494ull, 3215651804943565567ull}}, {{11810126993631943636ull, 13612531240485221097ull, 10584805576165272714ull, 4019564756179456959ull}}, {{463800343378882917ull, 13119518043730651090ull, 13533032512744377302ull, 2512227972612160599ull}}, {{9803122466078379454ull, 7176025517808538054ull, 12304604622503083724ull, 3140284965765200749ull}}, {{3030531045743198509ull, 8970031897260672568ull, 1545697722846690943ull, 3925356207206500937ull}}, {{1894081903589499068ull, 12523798963429002211ull, 12495276122847651599ull, 2453347629504063085ull}}, {{16202660434769037547ull, 11043062685858864859ull, 1784037098277400787ull, 3066684536880078857ull}}, {{15641639525033909030ull, 9192142338896193170ull, 6841732391274138888ull, 3833355671100098571ull}}, {{14387710721573581048ull, 5745088961810120731ull, 1970239735332642853ull, 2395847294437561607ull}}, {{13372952383539588406ull, 11793047220690038818ull, 16297857724447967278ull, 2994809118046952008ull}}, {{7492818442569709699ull, 5517936989007772715ull, 1925578081850407482ull, 3743511397558690011ull}}, {{2377168517392374610ull, 8060396636557245851ull, 17344387365652362340ull, 2339694623474181256ull}}, {{16806518702022631975ull, 10075495795696557313ull, 3233740133355901309ull, 2924618279342726571ull}}, {{7173090322246126256ull, 17206055763048084546ull, 17877233221977040348ull, 3655772849178408213ull}}, {{18189734939662433628ull, 3060825630100554066ull, 8511483472189136724ull, 4569716061473010267ull}}, {{15980270355716408922ull, 11136388055667622099ull, 3013834160904516500ull, 2856072538420631417ull}}, {{15363651926218123248ull, 13920485069584527624ull, 8378978719558033529ull, 3570090673025789271ull}}, {{757820834063102444ull, 3565548281698495819ull, 5862037381020154008ull, 4462613341282236589ull}}, {{16614539085785296692ull, 2228467676061559886ull, 5969616372351290207ull, 2789133338301397868ull}}, {{11544801820376845056ull, 16620642650359113570ull, 7462020465439112758ull, 3486416672876747335ull}}, {{5207630238616280512ull, 11552431276094116155ull, 4715839563371503044ull, 4358020841095934169ull}}, {{948925889921481368ull, 16443641584413598405ull, 14476614773175659162ull, 2723763025684958855ull}}, {{5797843380829239614ull, 11331179943662222198ull, 13484082448042186049ull, 3404703782106198569ull}}, {{16470676262891325326ull, 328916874295614035ull, 3020045004770568850ull, 4255879727632748212ull}}, {{7988329655093384377ull, 4817259064862146676ull, 11110900164836381339ull, 2659924829770467632ull}}, {{9985412068866730471ull, 1409887812650295441ull, 13888625206045476674ull, 3324906037213084540ull}}, {{17093451104510800992ull, 10985731802667645109ull, 17360781507556845842ull, 4156132546516355675ull}}, {{12989249949532944572ull, 11477768395094666097ull, 8544645433009334699ull, 2597582841572722297ull}}, {{2401504381634017003ull, 9735524475440944718ull, 15292492809689056278ull, 3246978551965902871ull}}, {{12225252513897297062ull, 2946033557446405089ull, 14503929993683932444ull, 4058723189957378589ull}}, {{723253793544728808ull, 11064643010258778989ull, 11370799255266151729ull, 2536701993723361618ull}}, {{5515753260358298914ull, 18442489781250861640ull, 4990127032227913853ull, 3170877492154202023ull}}, {{6894691575447873642ull, 9218054171281413338ull, 1625972771857504413ull, 3963596865192752529ull}}, {{8920868253082308931ull, 8067126866264577288ull, 12545448028479410018ull, 2477248040745470330ull}}, {{11151085316352886163ull, 860536545975945802ull, 6458437998744486715ull, 3096560050931837913ull}}, {{4715484608586331896ull, 14910728737752095965ull, 12684733516857996297ull, 3870700063664797391ull}}, {{5253020889580151387ull, 2401676433453978122ull, 14845487475677329542ull, 2419187539790498369ull}}, {{15789648148829965042ull, 12225467578672248460ull, 4721801289314498215ull, 3023984424738122962ull}}, {{1290316112327904686ull, 10670148454912922672ull, 15125623648497898577ull, 3779980530922653702ull}}, {{806447570204940429ull, 18198057830389046430ull, 4841828761883798706ull, 2362487831826658564ull}}, {{10231431499610951344ull, 13524200251131532229ull, 6052285952354748383ull, 2953109789783323205ull}}, {{17400975392941077084ull, 12293564295487027382ull, 12177043458870823383ull, 3691387237229154006ull}}, {{6263923602160785274ull, 14601006712320473970ull, 2998966143366876710ull, 2307117023268221254ull}}, {{17053276539555757400ull, 9027886353545816654ull, 12972079716063371696ull, 2883896279085276567ull}}, {{12093223637589920942ull, 11284857941932270818ull, 11603413626651826716ull, 3604870348856595709ull}}, {{5893157510132625369ull, 14106072427415338523ull, 669208978032619683ull, 4506087936070744637ull}}, {{1377380434619196904ull, 6510452257920892625ull, 2724098620484081254ull, 2816304960044215398ull}}, {{6333411561701384034ull, 17361437359255891589ull, 12628495312459877375ull, 3520381200055269247ull}}, {{12528450470554117946ull, 17090110680642476582ull, 11173933122147458815ull, 4400476500069086559ull}}, {{3218595525668935812ull, 17598848203042629720ull, 13901237228983243615ull, 2750297812543179099ull}}, {{4023244407086169765ull, 17386874235375899246ull, 12764860517801666615ull, 3437872265678973874ull}}, {{14252427545712488015ull, 17121906775792486153ull, 6732703610397307461ull, 4297340332098717343ull}}, {{1990238188429223153ull, 13007034744083997798ull, 11125468784139399019ull, 2685837707561698339ull}}, {{11711169772391304750ull, 11647107411677609343ull, 9295149961746860870ull, 3357297134452122924ull}}, {{10027276197061743033ull, 5335512227742235871ull, 11618937452183576088ull, 4196621418065153655ull}}, {{13184576650804671252ull, 3334695142338897419ull, 14179364935255816911ull, 2622888386290721034ull}}, {{11869034795078451161ull, 18003426983205785486ull, 8500834132214995330ull, 3278610482863401293ull}}, {{5612921456993288143ull, 13280911692152456050ull, 15237728683696132067ull, 4098263103579251616ull}}, {{8119761929048192993ull, 5994726798381591079ull, 9523580427310082542ull, 2561414439737032260ull}}, {{5538016392882853338ull, 16716780534831764657ull, 11904475534137603177ull, 3201768049671290325ull}}, {{11534206509530954576ull, 7060917613257542109ull, 1045536362389840260ull, 4002210062089112907ull}}, {{9514722077670540562ull, 13636445545140739626ull, 16794361290989507826ull, 2501381288805695566ull}}, {{2670030560233399894ull, 7822184894571148725ull, 11769579576882108975ull, 3126726611007119458ull}}, {{7949224218719137772ull, 5166045099786548002ull, 5488602434247860411ull, 3908408263758899323ull}}, {{9579951155126849012ull, 922935178152898549ull, 1124533512191218805ull, 2442755164849312077ull}}, {{16586624962335949168ull, 5765354991118511090ull, 6017352908666411410ull, 3053443956061640096ull}}, {{11509909166065160652ull, 16430065775752914671ull, 7521691135833014262ull, 3816804945077050120ull}}, {{14111222256431807264ull, 5657105091418183765ull, 4701056959895633914ull, 2385503090673156325ull}}, {{3803969765257595368ull, 16294753401127505515ull, 10488007218296930296ull, 2981878863341445406ull}}, {{143276188144606306ull, 1921697677699830278ull, 3886636986016387063ull, 3727348579176806758ull}}, {{13924605672872542653ull, 8118590076203475779ull, 16264206171542405626ull, 2329592861985504223ull}}, {{12794071072663290412ull, 924865558399568916ull, 15718571696000619129ull, 2911991077481880279ull}}, {{15992588840829113015ull, 5767767966426849049ull, 15036528601573386007ull, 3639988846852350349ull}}, {{6155677995754227557ull, 2598023939606173408ull, 4960602696684568797ull, 4549986058565437937ull}}, {{3847298747346392223ull, 3929607971467552332ull, 14629591731496325258ull, 2843741286603398710ull}}, {{4809123434182990279ull, 14135382001189216223ull, 9063617627515630764ull, 3554676608254248388ull}}, {{1399718274301349945ull, 17669227501486520279ull, 11329522034394538455ull, 4443345760317810485ull}}, {{7792352949079425572ull, 17960796216070157030ull, 9386794280710280486ull, 2777091100198631553ull}}, {{517069149494506156ull, 13227623233232920480ull, 16345178869315238512ull, 3471363875248289441ull}}, {{646336436868132695ull, 16534529041541150600ull, 6596415531361884428ull, 4339204844060361802ull}}, {{403960273042582935ull, 1110708614108443317ull, 8734445725528565672ull, 2712003027537726126ull}}, {{5116636359730616572ull, 1388385767635554146ull, 1694685120055931282ull, 3390003784422157658ull}}, {{15619167486518046523ull, 10958854246399218490ull, 11341728436924689910ull, 4237504730527697072ull}}, {{14373665697501166981ull, 2237597885572123652ull, 7088580273077931194ull, 2648440456579810670ull}}, {{17967082121876458726ull, 12020369393819930373ull, 18084097378202189800ull, 3310550570724763337ull}}, {{8623794597063409696ull, 15025461742274912967ull, 8770063667470573538ull, 4138188213405954172ull}}, {{12307400650805712916ull, 14002599607349208508ull, 14704661829023884269ull, 2586367633378721357ull}}, {{15384250813507141145ull, 3668191453904346923ull, 4545769230997691625ull, 3232959541723401697ull}}, {{14618627498456538527ull, 9196925335807821558ull, 10293897557174502435ull, 4041199427154252121ull}}, {{4524956168107948676ull, 3442235325666194522ull, 17962901019302533782ull, 2525749641971407575ull}}, {{14879567246989711652ull, 13526166193937518960ull, 17841940255700779323ull, 3157187052464259469ull}}, {{152714985027587949ull, 12296021723994510797ull, 8467367264343810442ull, 3946483815580324337ull}}, {{2401289874855936421ull, 12296699595923957152ull, 16821319586283351286ull, 2466552384737702710ull}}, {{3001612343569920526ull, 6147502458050170632ull, 11803277445999413300ull, 3083190480922128388ull}}, {{3752015429462400657ull, 7684378072562713290ull, 14754096807499266625ull, 3853988101152660485ull}}, {{6956695661841388315ull, 16331951341420165566ull, 11527153513900735592ull, 2408742563220412803ull}}, {{17919241614156511201ull, 1968195103065655341ull, 9797255873948531587ull, 3010928204025516004ull}}, {{8563993962413475290ull, 16295301934114232889ull, 12246569842435664483ull, 3763660255031895005ull}}, {{16881711272576891816ull, 7878720699607701603ull, 9959949160735984254ull, 2352287659394934378ull}}, {{16490453072293726866ull, 625028837654851196ull, 3226564414065204510ull, 2940359574243667973ull}}, {{2166322266657606966ull, 10004658083923339804ull, 8644891536008893541ull, 3675449467804584966ull}}, {{2707902833322008708ull, 17117508623331562659ull, 1582742383156341118ull, 4594311834755731208ull}}, {{17833340335322113107ull, 6086756871154838757ull, 989213989472713199ull, 2871444896722332005ull}}, {{8456617363870477671ull, 2996760070516160543ull, 5848203505268279403ull, 3589306120902915006ull}}, {{5959085686410709185ull, 17581008143427364391ull, 16533626418440125061ull, 4486632651128643757ull}}, {{10641957581647775097ull, 13293973098855796696ull, 12639359520738772115ull, 2804145406955402348ull}}, {{13302446977059718871ull, 12005780355142357966ull, 15799199400923465144ull, 3505181758694252935ull}}, {{7404686684469872780ull, 15007225443927947458ull, 15137313232726943526ull, 4381477198367816169ull}}, {{9239615196221058392ull, 4767829884027579257ull, 2543291742813257848ull, 2738423248979885106ull}}, {{16161205013703710894ull, 5959787355034474071ull, 12402486715371348118ull, 3423029061224856382ull}}, {{15589820248702250713ull, 16673106230647868397ull, 6279736357359409339ull, 4278786326531070478ull}}, {{12049480664652600648ull, 8114848384941223796ull, 17759893278631794549ull, 2674241454081919048ull}}, {{15061850830815750810ull, 14755246499603917649ull, 3753122524580191570ull, 3342801817602398811ull}}, {{4992255483237524800ull, 9220686087650121254ull, 79717137297851559ull, 4178502272002998514ull}}, {{16955217732305616712ull, 12680457832422407639ull, 4661509229238545128ull, 2611563920001874071ull}}, {{16582336146954632986ull, 15850572290528009549ull, 1215200518120793506ull, 3264454900002342589ull}}, {{6892862128411127521ull, 10589843326305236129ull, 6130686666078379787ull, 4080568625002928236ull}}, {{15837253876325424461ull, 4312809069727078628ull, 13055051203153763175ull, 2550355390626830147ull}}, {{1349823271697228960ull, 779325318731460382ull, 11707127985514816065ull, 3187944238283537684ull}}, {{10910651126476312007ull, 5585842666841713381ull, 14633909981893520081ull, 3984930297854422105ull}}, {{9124999963261388957ull, 15020366712844540623ull, 2228664711042368194ull, 2490581436159013816ull}}, {{6794563935649348292ull, 9552086354200899971ull, 2785830888802960243ull, 3113226795198767270ull}}, {{3881518901134297461ull, 7328421924323737060ull, 12705660647858476112ull, 3891533493998459087ull}}, {{11649321350063711721ull, 4580263702702335662ull, 14858566932552629426ull, 2432208433749036929ull}}, {{5338279650724863843ull, 14948701665232695386ull, 4738150610408623070ull, 3040260542186296162ull}}, {{15896221600260855612ull, 9462505044686093424ull, 15146060299865554646ull, 3800325677732870202ull}}, {{9935138500163034758ull, 1302379634501420486ull, 14077973705843359558ull, 2375203548583043876ull}}, {{3195551088349017639ull, 10851346579981551416ull, 17597467132304199447ull, 2969004435728804845ull}}, {{3994438860436272048ull, 8952497206549551366ull, 8161775860098085597ull, 3711255544661006057ull}}, {{16331582343054833742ull, 7901153763307163555ull, 16630324958629773258ull, 2319534715413128785ull}}, {{15802791910391154274ull, 653070167279178636ull, 6952848143005052861ull, 2899418394266410982ull}}, {{1306745814279391226ull, 5428023727526361200ull, 17914432215611091884ull, 3624272992833013727ull}}, {{1633432267849239033ull, 6785029659407951500ull, 17781354251086476951ull, 4530341241041267159ull}}, {{10244267204260550204ull, 11158172564771051543ull, 18030875434570129950ull, 2831463275650791974ull}}, {{8193647986898299851ull, 4724343669109038621ull, 13315222256357886630ull, 3539329094563489968ull}}, {{14853746002050262717ull, 15128801623241074084ull, 16644027820447358287ull, 4424161368204362460ull}}, {{60219214426638390ull, 16373030042166753159ull, 1179145350924823121ull, 2765100855127726538ull}}, {{13910332073315461700ull, 6631229497426277736ull, 10697303725510804710ull, 3456376068909658172ull}}, {{17387915091644327125ull, 17512408908637622978ull, 13371629656888505887ull, 4320470086137072715ull}}, {{15479132950705092357ull, 17862784595539596217ull, 6051425526341622227ull, 2700293803835670447ull}}, {{5513858133099201734ull, 17716794725997107368ull, 2952595889499639880ull, 3375367254794588059ull}}, {{6892322666374002168ull, 3699249333786832594ull, 17525802917156713563ull, 4219209068493235073ull}}, {{8919387684911139259ull, 6187824403076419ull, 4036097795581864121ull, 2637005667808271921ull}}, {{6537548587711536170ull, 4619420798931233428ull, 9656808262904718055ull, 3296257084760339901ull}}, {{8171935734639420212ull, 1162589980236653881ull, 16682696347058285473ull, 4120321355950424876ull}}, {{16636674880218107393ull, 12255833783716378435ull, 1203313180056652612ull, 2575200847469015548ull}}, {{16184157581845246337ull, 15319792229645473044ull, 1504141475070815765ull, 3219001059336269435ull}}, {{1783452903597006305ull, 5314682231774677594ull, 15715234899120683419ull, 4023751324170336793ull}}, {{5726344083175516845ull, 1015833385645479544ull, 2904492784309345281ull, 2514844577606460496ull}}, {{7157930103969396056ull, 5881477750484237334ull, 3630615980386681601ull, 3143555722008075620ull}}, {{18170784666816520877ull, 11963533206532684571ull, 4538269975483352001ull, 3929444652510094525ull}}, {{9050897407546631597ull, 559679226441846001ull, 5142261743890788953ull, 2455902907818809078ull}}, {{15925307777860677400ull, 5311285051479695405ull, 15651199216718261999ull, 3069878634773511347ull}}, {{6071576667043683037ull, 2027420295922231353ull, 14952313002470439595ull, 3837348293466889184ull}}, {{15323950462970771659ull, 17408038749447252259ull, 9345195626544024746ull, 2398342683416805740ull}}, {{14543252060286076669ull, 12536676399954289516ull, 11681494533180030933ull, 2997928354271007175ull}}, {{18179065075357595836ull, 1835787444660698183ull, 9990182148047650763ull, 3747410442838758969ull}}, {{18279444699739579254ull, 17288268217408794028ull, 17773078888598251486ull, 2342131526774224355ull}}, {{4402561800964922451ull, 12386963234906216728ull, 17604662592320426454ull, 2927664408467780444ull}}, {{5503202251206153064ull, 6260332006777995102ull, 3559084166690981452ull, 3659580510584725556ull}}, {{16102374850862467138ull, 7825415008472493877ull, 4448855208363726815ull, 4574475638230906945ull}}, {{12369827291002735913ull, 11808413407936390529ull, 14309749551295799019ull, 2859047273894316840ull}}, {{1627226058471256179ull, 10148830741493100258ull, 17887186939119748774ull, 3573809092367896050ull}}, {{11257404609943846032ull, 3462666390011599514ull, 13135611637044910160ull, 4467261365459870063ull}}, {{11647563899642291674ull, 2164166493757249696ull, 15127286300794150706ull, 2792038353412418789ull}}, {{14559454874552864593ull, 11928580154051337928ull, 5074049820710524670ull, 3490047941765523487ull}}, {{18199318593191080741ull, 5687353155709396602ull, 1730876257460767934ull, 4362559927206904359ull}}, {{15986260139171813367ull, 17389653777600536588ull, 7999326688554061814ull, 2726599954504315224ull}}, {{1536081100255215093ull, 12513695185145894928ull, 9999158360692577268ull, 3408249943130394030ull}}, {{1920101375319018866ull, 15642118981432368660ull, 3275575914010945777ull, 4260312428912992538ull}}, {{10423435396429162599ull, 2858795335754148556ull, 6658920964684229015ull, 2662695268070620336ull}}, {{13029294245536453249ull, 17408552224974849407ull, 8323651205855286268ull, 3328369085088275420ull}}, {{11674931788493178657ull, 3313946207509010143ull, 10404564007319107836ull, 4160461356360344275ull}}, {{14214361395449318517ull, 11294588416547907147ull, 4197009495360748445ull, 2600288347725215172ull}}, {{13156265725884260242ull, 283177465402720222ull, 5246261869200935557ull, 3250360434656518965ull}}, {{7221960120500549494ull, 4965657850180788182ull, 11169513354928557350ull, 4062950543320648706ull}}, {{18348783130595007146ull, 16938594211645156325ull, 11592631865257736247ull, 2539344089575405441ull}}, {{9100920857961595221ull, 16561556746129057503ull, 655731776290006597ull, 3174180111969256802ull}}, {{6764465054024606122ull, 6866887877379158167ull, 10043036757217284055ull, 3967725139961571002ull}}, {{11145319686406460682ull, 11209333951003055710ull, 10888583991688190438ull, 2479828212475981876ull}}, {{4708277571153300045ull, 4788295401899043830ull, 13610729989610238048ull, 3099785265594977345ull}}, {{15108719000796400864ull, 5985369252373804787ull, 3178354431730633848ull, 3874731581993721682ull}}, {{7137106366284056588ull, 3740855782733627992ull, 6598157538259034059ull, 2421707238746076051ull}}, {{8921382957855070735ull, 64383709989647086ull, 3636010904396404670ull, 3027134048432595064ull}}, {{1928356660464062610ull, 9303851674341834666ull, 4545013630495505837ull, 3783917560540743830ull}}, {{5816908931217427036ull, 8120750305677340618ull, 16675691574341854860ull, 2364948475337964893ull}}, {{16494508200876559603ull, 10150937882096675772ull, 7009556412645154863ull, 2956185594172456117ull}}, {{2171391177386147887ull, 8076986334193456812ull, 13373631534233831483ull, 3695231992715570146ull}}, {{10580491522721118238ull, 2742273449657216555ull, 12970205727323532581ull, 2309519995447231341ull}}, {{8613928384974009893ull, 8039527830498908598ull, 2377699103872252014ull, 2886899994309039177ull}}, {{1544038444362736558ull, 826037751268859940ull, 7583809898267702922ull, 3608624992886298971ull}}, {{1930048055453420697ull, 10255919225940850733ull, 4868076354407240748ull, 4510781241107873714ull}}, {{3512123043872081888ull, 15633321553067807516ull, 7654233739931913371ull, 2819238275692421071ull}}, {{4390153804840102360ull, 14929965922907371491ull, 4956106156487503810ull, 3524047844615526339ull}}, {{876006237622740046ull, 9439085366779438556ull, 1583446677181991859ull, 4405059805769407924ull}}, {{9770875935368988337ull, 3593585345023455145ull, 10213026210093520720ull, 2753162378605879952ull}}, {{16825280937638623325ull, 4491981681279318931ull, 12766282762616900900ull, 3441452973257349940ull}}, {{16419915153620891252ull, 5614977101599148664ull, 15957853453271126125ull, 4301816216571687425ull}}, {{10262446971013057033ull, 5815203697713161867ull, 3056129380653371972ull, 2688635135357304641ull}}, {{8216372695338933387ull, 7269004622141452334ull, 8431847744244102869ull, 3360793919196630801ull}}, {{1047093832318890925ull, 13697941796104203322ull, 15151495698732516490ull, 4200992398995788501ull}}, {{5266119663626694732ull, 13172899640992514980ull, 11775527820921516758ull, 2625620249372367813ull}}, {{6582649579533368415ull, 7242752514385867917ull, 884351720869732236ull, 3282025311715459767ull}}, {{12839997992844098423ull, 9053440642982334896ull, 14940497706369329007ull, 4102531639644324708ull}}, {{8024998745527561515ull, 12575929429505041166ull, 114439029626054821ull, 2564082274777702943ull}}, {{807876395054676085ull, 1884853731599137746ull, 13978106842314732239ull, 3205102843472128678ull}}, {{10233217530673120914ull, 16191125219781085894ull, 8249261516038639490ull, 4006378554340160848ull}}, {{1784074938243312668ull, 14731139280790566588ull, 5155788447524149681ull, 2503986596462600530ull}}, {{2230093672804140834ull, 4578866045706044523ull, 15668107596259962910ull, 3129983245578250662ull}}, {{16622675146287339755ull, 14946954593987331461ull, 10361762458470177829ull, 3912479056972813328ull}}, {{12695014975643281299ull, 11647689630455776115ull, 6476101536543861143ull, 2445299410608008330ull}}, {{11257082701126713720ull, 9947926019642332240ull, 17318498957534602237ull, 3056624263260010412ull}}, {{14071353376408392149ull, 17046593542980303204ull, 3201379623208701180ull, 3820780329075013016ull}}, {{18017967897110020902ull, 1430748927507913694ull, 2000862264505438238ull, 2387987705671883135ull}}, {{13299087834532750319ull, 11011808196239667926ull, 16336135885913961509ull, 2984984632089853918ull}}, {{7400487756311162090ull, 18376446263726972812ull, 11196797820537676078ull, 3731230790112317398ull}}, {{13848676884549252115ull, 6873592896401970103ull, 2386312619408659645ull, 2332019243820198374ull}}, {{12699160087259177239ull, 13203677138929850533ull, 12206262811115600364ull, 2915024054775247967ull}}, {{2038892053791807837ull, 16504596423662313167ull, 10646142495467112551ull, 3643780068469059959ull}}, {{16383673122521923508ull, 16019059511150503554ull, 8695992100906502785ull, 4554725085586324949ull}}, {{14851481720003590097ull, 3094383166827982865ull, 7740838072280258193ull, 2846703178491453093ull}}, {{4729294094722323909ull, 8479664976962366486ull, 14287733608777710645ull, 3558378973114316366ull}}, {{15134989655257680694ull, 15211267239630346011ull, 8636294974117362498ull, 4447973716392895458ull}}, {{7153525525322356482ull, 14118728043196354161ull, 10009370377250739465ull, 2779983572745559661ull}}, {{13553592925080333506ull, 3813351998713278989ull, 17123398989990812236ull, 3474979465931949576ull}}, {{3106933101068253171ull, 4766689998391598737ull, 2957504663778963679ull, 4343724332414936971ull}}, {{13471048234236127992ull, 9896710276635831066ull, 17989341479357709963ull, 2714827707759335606ull}}, {{7615438255940384182ull, 7759201827367400929ull, 13263304812342361646ull, 3393534634699169508ull}}, {{14130983838352868131ull, 475630247354475353ull, 16579131015427952058ull, 4241918293373961885ull}}, {{1914335871329460726ull, 4908954923023935000ull, 12667799893856163988ull, 2651198933358726178ull}}, {{2392919839161825907ull, 6136193653779918750ull, 6611377830465429177ull, 3313998666698407723ull}}, {{12214521835807058192ull, 12281928085652286341ull, 3652536269654398567ull, 4142498333373009654ull}}, {{9939919156593105322ull, 14593734081173760819ull, 16117893223816162816ull, 2589061458358131033ull}}, {{7813212927313993749ull, 18242167601467201024ull, 6312308474488039808ull, 3236326822947663792ull}}, {{9766516159142492186ull, 4355965428124449664ull, 7890385593110049761ull, 4045408528684579740ull}}, {{6104072599464057616ull, 14251693438646250800ull, 14154863032548556908ull, 2528380330427862337ull}}, {{7630090749330072020ull, 17814616798307813500ull, 3858520735403532423ull, 3160475413034827922ull}}, {{9537613436662590025ull, 17656584979457378971ull, 14046522956109191337ull, 3950594266293534902ull}}, {{3655165388700424814ull, 4117836584519780001ull, 4167390829140856682ull, 2469121416433459314ull}}, {{9180642754302918921ull, 14370667767504500809ull, 14432610573280846660ull, 3086401770541824142ull}}, {{16087489461306036555ull, 17963334709380626011ull, 8817391179746282517ull, 3858002213177280178ull}}, {{7748837904102578895ull, 13532927202576585209ull, 10122555505768814477ull, 2411251383235800111ull}}, {{14297733398555611523ull, 3081100947938567799ull, 8041508363783630193ull, 3014064229044750139ull}}, {{13260480729767126500ull, 8463062203350597653ull, 5440199436302149837ull, 3767580286305937674ull}}, {{10593643465318148015ull, 7595256886307817485ull, 8011810666116231552ull, 2354737678941211046ull}}, {{17853740350075072922ull, 9494071107884771856ull, 791391295790513632ull, 2943422098676513808ull}}, {{3870431363884289536ull, 11867588884855964821ull, 989239119738142040ull, 3679277623345642260ull}}, {{9449725223282749824ull, 14834486106069956026ull, 1236548899672677550ull, 4599097029182052825ull}}, {{10517764282979106544ull, 4659867797866334612ull, 12302058108363893229ull, 2874435643238783015ull}}, {{13147205353723883180ull, 10436520765760306169ull, 10765886617027478632ull, 3593044554048478769ull}}, {{2598948636872690263ull, 13045650957200382712ull, 18069044289711736194ull, 4491305692560598461ull}}, {{1624342898045431415ull, 12765217866677627099ull, 13598995690283529073ull, 2807066057850374038ull}}, {{15865486677838952980ull, 2121464278064870161ull, 7775372575999635534ull, 3508832572312967548ull}}, {{5996800292016527513ull, 11875202384435863510ull, 9719215719999544417ull, 4386040715391209435ull}}, {{17583058237792493408ull, 504472462631332837ull, 3768666815786021309ull, 2741275447119505897ull}}, {{8143764741958453048ull, 5242276596716553951ull, 9322519538159914540ull, 3426594308899382371ull}}, {{5568019909020678406ull, 6552845745895692439ull, 7041463404272505271ull, 4283242886124227964ull}}, {{10397541470779005860ull, 11013057618825889630ull, 13624286664525091602ull, 2677026803827642477ull}}, {{3773554801618981517ull, 4542949986677586230ull, 3195300275374200791ull, 3346283504784553097ull}}, {{13940315538878502704ull, 1067001464919594883ull, 8605811362645138893ull, 4182854380980691371ull}}, {{6406854202585370238ull, 2972718924788440754ull, 3072789092439517856ull, 2614283988112932107ull}}, {{17231939790086488605ull, 3715898655985550942ull, 17676044420831561032ull, 3267854985141165133ull}}, {{12316552700753334949ull, 4644873319981938678ull, 8259997470757287578ull, 4084818731426456417ull}}, {{3086159419543446439ull, 7514731843416099578ull, 16691713465291774496ull, 2553011707141535260ull}}, {{13081071311284083857ull, 9393414804270124472ull, 2417897757905166504ull, 3191264633926919076ull}}, {{16351339139105104821ull, 11741768505337655590ull, 3022372197381458130ull, 3989080792408648845ull}}, {{5607900943513302609ull, 11950291334263422648ull, 4194825632577105283ull, 2493175495255405528ull}}, {{7009876179391628261ull, 10326178149401890406ull, 5243532040721381604ull, 3116469369069256910ull}}, {{17985717261094311134ull, 12907722686752363007ull, 15777787087756502813ull, 3895586711336571137ull}}, {{18158602315825026315ull, 10373169688433920831ull, 2943587902206732402ull, 2434741694585356961ull}}, {{18086566876353894990ull, 3743090073687625231ull, 8291170896185803407ull, 3043427118231696201ull}}, {{17996522577014980833ull, 67176573682143635ull, 14975649638659642163ull, 3804283897789620251ull}}, {{8941983601420669069ull, 16182886423047197436ull, 7053938014948582399ull, 2377677436118512657ull}}, {{11177479501775836336ull, 15616922010381608891ull, 13429108537113115903ull, 2972096795148140821ull}}, {{9360163358792407516ull, 14909466494549623210ull, 2951327616109231167ull, 3715120993935176027ull}}, {{10461788117672642602ull, 16235945586734596362ull, 17985480824564127143ull, 2321950621209485016ull}}, {{3853863110236027444ull, 15683245964990857549ull, 4035106956995607313ull, 2902438276511856271ull}}, {{9429014906222422209ull, 5768999400956408224ull, 432197677817121238ull, 3628047845639820339ull}}, {{11786268632778027761ull, 16434621288050286088ull, 14375305152553565259ull, 4535059807049775423ull}}, {{7366417895486267351ull, 7965795295817734853ull, 15902094747987060143ull, 2834412379406109639ull}}, {{13819708387785222092ull, 5345558101344780662ull, 15265932416556437275ull, 3543015474257637049ull}}, {{8051263447876751807ull, 2070261608253587924ull, 5247357465413382882ull, 4428769342822046312ull}}, {{14255411691777745688ull, 5905599523585880356ull, 3279598415883364301ull, 2767980839263778945ull}}, {{17819264614722182110ull, 11993685422909738349ull, 8711184038281593280ull, 3459976049079723681ull}}, {{8439022713120563925ull, 14992106778637172937ull, 15500666066279379504ull, 4324970061349654601ull}}, {{16803604241768822213ull, 9370066736648233085ull, 2770387263783530334ull, 2703106288343534126ull}}, {{7169447246928864054ull, 2489211383955515549ull, 12686356116584188726ull, 3378882860429417657ull}}, {{13573495077088467972ull, 12334886266799170244ull, 2022887090448072195ull, 4223603575536772072ull}}, {{17706806460035068291ull, 5403460907535787450ull, 1264304431530045122ull, 2639752234710482545ull}}, {{12910136038189059555ull, 15977698171274510121ull, 6192066557839944306ull, 3299690293388103181ull}}, {{2302611992454160732ull, 10748750677238361844ull, 12351769215727318287ull, 4124612866735128976ull}}, {{10662504532138626266ull, 13635498200915058008ull, 7719855759829573929ull, 2577883041709455610ull}}, {{13328130665173282832ull, 3209314695861658798ull, 426447662932191604ull, 3222353802136819513ull}}, {{7436791294611827732ull, 4011643369827073498ull, 5144745597092627409ull, 4027942252671024391ull}}, {{9259680577559780236ull, 14036492152210390696ull, 10132995025823973986ull, 2517463907919390244ull}}, {{11574600721949725295ull, 8322243153408212562ull, 12666243782279967483ull, 3146829884899237805ull}}, {{5244878865582380811ull, 5791117923332877799ull, 1997746672567795642ull, 3933537356124047257ull}}, {{10195578318630069863ull, 8231134720510436528ull, 12777806716423342036ull, 2458460847577529535ull}}, {{12744472898287587329ull, 10288918400638045660ull, 11360572377101789641ull, 3073076059471911919ull}}, {{15930591122859484161ull, 17472834019224944979ull, 9589029452949849147ull, 3841345074339889899ull}}, {{7650776442573483649ull, 8614678252801896660ull, 3687300398879961765ull, 2400840671462431187ull}}, {{9563470553216854561ull, 15380033834429758729ull, 18444183553882115918ull, 3001050839328038983ull}}, {{16566024209948456105ull, 10001670256182422603ull, 18443543423925256994ull, 3751313549160048729ull}}, {{8047922122004091114ull, 10862729928541402031ull, 4609685612312203765ull, 2344570968225030456ull}}, {{5448216634077725988ull, 18190098429104140443ull, 5762107015390254706ull, 2930713710281288070ull}}, {{2198584774169769581ull, 13514250999525399746ull, 16426005806092594191ull, 3663392137851610087ull}}, {{11971603004566987784ull, 12281127730979361778ull, 15920821239188354835ull, 4579240172314512609ull}}, {{12093937896281755269ull, 5369861822648407159ull, 3032984246851639916ull, 2862025107696570381ull}}, {{10505736351924806182ull, 6712327278310508949ull, 8402916326991937799ull, 3577531384620712976ull}}, {{17743856458333395632ull, 3778723079460748282ull, 10503645408739922249ull, 4471914230775891220ull}}, {{15701596304885760174ull, 13890916970731437436ull, 15788150417317227213ull, 2794946394234932012ull}}, {{1180251307397648602ull, 3528588158132133084ull, 1288443947936982401ull, 3493682992793665016ull}}, {{1475314134247060752ull, 9022421216092554259ull, 1610554934921228001ull, 4367103740992081270ull}}, {{17062972398400270634ull, 17168228306126316171ull, 14841654889607931212ull, 2729439838120050793ull}}, {{16717029479572950388ull, 3013541308948343598ull, 4717010556727750304ull, 3411799797650063492ull}}, {{11672914812611412177ull, 3766926636185429498ull, 5896263195909687880ull, 4264749747062579365ull}}, {{11907257776309520515ull, 2354329147615893436ull, 5991007506657248877ull, 2665468591914112103ull}}, {{14884072220386900644ull, 7554597452947254699ull, 2877073364894173192ull, 3331835739892640129ull}}, {{13993404257056237901ull, 9443246816184068374ull, 8208027724545104394ull, 4164794674865800161ull}}, {{4134191642232760784ull, 10513715278542430638ull, 16659232373909160006ull, 2602996671791125100ull}}, {{14391111589645726788ull, 3918772061323262489ull, 2377296393676898392ull, 3253745839738906376ull}}, {{4153831431774994773ull, 4898465076654078112ull, 2971620492096122990ull, 4067182299673632970ull}}, {{2596144644859371733ull, 16896598728190962532ull, 6468948825987464772ull, 2541988937296020606ull}}, {{3245180806074214666ull, 2674004336529151549ull, 17309558069339106774ull, 3177486171620025757ull}}, {{8668162026020156237ull, 12565877457516215244ull, 7801889531391719755ull, 3971857714525032197ull}}, {{14640973303117373456ull, 5547830401733940575ull, 7182023966333518799ull, 2482411071578145123ull}}, {{13689530610469328916ull, 2323101983740037815ull, 4365843939489510595ull, 3103013839472681404ull}}, {{12500227244659273241ull, 16738935534957210981ull, 5457304924361888243ull, 3878767299340851755ull}}, {{10118485037125739728ull, 8155991700134562911ull, 1104972568512486200ull, 2424229562088032347ull}}, {{8036420277979786756ull, 10194989625168203639ull, 15216273765922771462ull, 3030286952610040433ull}}, {{5433839329047345540ull, 3520364994605478741ull, 5185284152121300616ull, 3787858690762550542ull}}, {{5701992589868284915ull, 2200228121628424213ull, 17075860650357976597ull, 2367411681726594088ull}}, {{11739176755762744048ull, 7361971170462918170ull, 2898081739237919130ull, 2959264602158242611ull}}, {{5450598907848654251ull, 18425835999933423521ull, 17457660229329562624ull, 3699080752697803263ull}}, {{14935839363473878667ull, 11516147499958389700ull, 17828566670972058496ull, 2311925470436127039ull}}, {{223055130632796718ull, 14395184374947987126ull, 17674022320287685216ull, 2889906838045158799ull}}, {{9502190950145771705ull, 17993980468684983907ull, 17480841881932218616ull, 3612383547556448499ull}}, {{7266052669254826728ull, 4045731512146678268ull, 17239366333987885367ull, 4515479434445560624ull}}, {{13764654955139042513ull, 9446111222732755773ull, 10774603958742428354ull, 2822174646528475390ull}}, {{3370760638641639429ull, 2584266991561168909ull, 4244882911573259635ull, 3527718308160594238ull}}, {{8825136816729437190ull, 17065391794733624848ull, 14529475676321350351ull, 4409647885200742797ull}}, {{5515710510455898244ull, 17583398899349597386ull, 11386765306914537921ull, 2756029928250464248ull}}, {{16118010174924648613ull, 8144190568904833020ull, 14233456633643172402ull, 3445037410313080310ull}}, {{1700768644946259150ull, 956866174276265468ull, 8568448755199189695ull, 4306296762891350388ull}}, {{10286352439946187777ull, 7515570386563747773ull, 14578652508854269367ull, 2691435476807093992ull}}, {{17469626568360122625ull, 4782776964777296812ull, 18223315636067836709ull, 3364294346008867490ull}}, {{3390289136740601665ull, 10590157224399008920ull, 13555772508230020078ull, 4205367932511084363ull}}, {{2118930710462876041ull, 2007162246821992671ull, 6166514808430068597ull, 2628354957819427727ull}}, {{16483721443360758763ull, 7120638826954878742ull, 3096457492110197842ull, 3285443697274284659ull}}, {{11381279767346172646ull, 18124170570548374236ull, 17705629920419911014ull, 4106804621592855823ull}}, {{16336671891446133712ull, 6715920588165345993ull, 17983547727903526240ull, 2566752888495534889ull}}, {{6585781809025503428ull, 8394900735206682492ull, 8644376604597244088ull, 3208441110619418612ull}}, {{8232227261281879284ull, 10493625919008353115ull, 10805470755746555110ull, 4010551388274273265ull}}, {{2839299029087480601ull, 1946830180952832793ull, 18282634268410066704ull, 2506594617671420790ull}}, {{8160809804786738655ull, 2433537726191040991ull, 13629920798657807572ull, 3133243272089275988ull}}, {{5589326237556035415ull, 3041922157738801239ull, 17037400998322259465ull, 3916554090111594985ull}}, {{10410857926113603990ull, 13430416394655220534ull, 3730846596310330309ull, 2447846306319746866ull}}, {{3790200370787229180ull, 2952962438036861956ull, 13886930282242688695ull, 3059807882899683582ull}}, {{4737750463484036475ull, 17526261102828241157ull, 8135290815948585060ull, 3824759853624604478ull}}, {{5266937048891216749ull, 1730541152412874915ull, 472870741540477759ull, 2390474908515377799ull}}, {{1971985292686633032ull, 15998234495798257356ull, 14426146482207760910ull, 2988093635644222248ull}}, {{2464981615858291290ull, 10774421082893045887ull, 18032683102759701138ull, 3735117044555277810ull}}, {{8458142537552513912ull, 11345699195235541583ull, 15882112957652201115ull, 2334448152847048631ull}}, {{5960992153513254486ull, 9570437975617039075ull, 15240955178637863490ull, 2918060191058810789ull}}, {{2839554173464180204ull, 2739675432666523036ull, 5216135918015165651ull, 3647575238823513487ull}}, {{3549442716830225254ull, 17259652346115317507ull, 1908483879091569159ull, 4559469048529391859ull}}, {{18359302762514748448ull, 17704811743963155297ull, 17333703488928088388ull, 2849668155330869911ull}}, {{9114070397861271848ull, 3684270606244392506ull, 17055443342732722582ull, 3562085194163587389ull}}, {{2169215960471814002ull, 13828710294660266441ull, 7484246123133739515ull, 4452606492704484237ull}}, {{12884975021363353511ull, 6337100924948972573ull, 6983496836172281149ull, 2782879057940302648ull}}, {{2271160721422028177ull, 12533062174613603621ull, 8729371045215351436ull, 3478598822425378310ull}}, {{7450636920204923125ull, 15666327718267004526ull, 1688341769664413487ull, 4348248528031722888ull}}, {{44962056700689050ull, 16708983851557959685ull, 1055213606040258429ull, 2717655330019826805ull}}, {{4667888589303249216ull, 7051171759165285894ull, 5930703025977710941ull, 3397069162524783506ull}}, {{15058232773483837328ull, 13425650717383995271ull, 16636750819326914484ull, 4246336453155979382ull}}, {{16328924511068480186ull, 17614403735219772852ull, 5786283243651933648ull, 2653960283222487114ull}}, {{1964411565126048616ull, 3571260595315164450ull, 16456226091419692869ull, 3317450354028108892ull}}, {{11678886493262336578ull, 9075761762571343466ull, 2123538540565064470ull, 4146812942535136116ull}}, {{11910990076716348266ull, 1060665083179701762ull, 10550583624707941102ull, 2591758089084460072ull}}, {{5665365559040659524ull, 10549203390829403011ull, 13188229530884926377ull, 3239697611355575090ull}}, {{2470020930373436501ull, 17798190256964141668ull, 7261914876751382163ull, 4049622014194468863ull}}, {{10767135118338173621ull, 8818025901388894590ull, 11456225825610695708ull, 2531013758871543039ull}}, {{4235546861067941218ull, 11022532376736118238ull, 9708596263585981731ull, 3163767198589428799ull}}, {{14517805613189702331ull, 9166479452492759893ull, 7524059311055089260ull, 3954708998236785999ull}}, {{11379471517457257909ull, 14952421694662750741ull, 11620066097050512643ull, 2471693123897991249ull}}, {{389281341539408674ull, 14078841099901050523ull, 690024566030977092ull, 3089616404872489062ull}}, {{14321659732206424554ull, 17598551374876313153ull, 10085902744393497173ull, 3862020506090611327ull}}, {{2033508304987933491ull, 13304937618511389673ull, 13221218242887017589ull, 2413762816306632079ull}}, {{7153571399662304767ull, 2796113967857073379ull, 11914836785181384083ull, 3017203520383290099ull}}, {{4330278231150493055ull, 17330200515103505436ull, 10281859963049342199ull, 3771504400479112624ull}}, {{11929795931323833968ull, 17748904349580772753ull, 6426162476905838874ull, 2357190250299445390ull}}, {{1077186858872628747ull, 12962758400121190134ull, 17256075132987074401ull, 2946487812874306737ull}}, {{10569855610445561742ull, 2368389944869323955ull, 7735035860951679290ull, 3683109766092883422ull}}, {{8600633494629564273ull, 12183859467941430752ull, 445422789334823304ull, 4603887207616104278ull}}, {{5375395934143477671ull, 7614912167463394220ull, 14113447298616428277ull, 2877429504760065173ull}}, {{6719244917679347089ull, 14130326227756630679ull, 3806751067988371634ull, 3596786880950081467ull}}, {{3787370128671795957ull, 8439535747841012541ull, 146752816558076639ull, 4495983601187601834ull}}, {{4672949339633566425ull, 12192238870041714694ull, 4703406528776185803ull, 2809989750742251146ull}}, {{15064558711396733839ull, 10628612569124755463ull, 15102630197825008062ull, 3512487188427813932ull}}, {{14219012370818529395ull, 4062393674551168521ull, 431543673571708462ull, 4390608985534767416ull}}, {{1969353704120499016ull, 16374054101876644038ull, 269714795982317788ull, 2744130615959229635ull}}, {{11685064167005399578ull, 2020823553636253431ull, 14172201550260060948ull, 3430163269949037043ull}}, {{9994644190329361568ull, 2526029442045316789ull, 13103565919397688281ull, 4287704087436296304ull}}, {{8552495628169544932ull, 13107983447346792753ull, 8189728699623555175ull, 2679815054647685190ull}}, {{15302305553639319069ull, 11773293290756103037ull, 1013788837674668161ull, 3349768818309606488ull}}, {{5292823886766985125ull, 881558558162965085ull, 1267236047093335202ull, 4187211022887008110ull}}, {{5613857938443059655ull, 5162660117279241082ull, 14627080584715498213ull, 2617006889304380068ull}}, {{16240694459908600377ull, 11065011165026439256ull, 18283850730894372766ull, 3271258611630475085ull}}, {{1854124001176198855ull, 4607891919428273263ull, 9019755358335802246ull, 4089073264538093857ull}}, {{8076356528376206140ull, 16714990504924834501ull, 17166562145028346163ull, 2555670790336308660ull}}, {{14707131678897645579ull, 16282052112728655222ull, 3011458607575881088ull, 3194588487920385826ull}}, {{9160542561767281166ull, 1905821067201267412ull, 12987695296324627169ull, 3993235609900482282ull}}, {{14948711137959326537ull, 12720353213069261892ull, 12728995578630279884ull, 2495772256187801426ull}}, {{239144848739606555ull, 15900441516336577366ull, 6687872436433074047ull, 3119715320234751783ull}}, {{9522303097779284002ull, 15263865876993333803ull, 3748154527113954655ull, 3899644150293439729ull}}, {{3645596426898358549ull, 16457445200761915483ull, 13871811625514691419ull, 2437277593933399830ull}}, {{18392053588905111898ull, 15960120482525006449ull, 8116392495038588466ull, 3046596992416749788ull}}, {{9155008930849226161ull, 10726778566301482254ull, 10145490618798235583ull, 3808246240520937235ull}}, {{1110194563353378447ull, 13621765631579508265ull, 4035088627535203287ull, 2380153900325585772ull}}, {{5999429222619110962ull, 12415521021046997427ull, 5043860784419004109ull, 2975192375406982215ull}}, {{2887600509846500799ull, 1684343221026583072ull, 1693139962096367233ull, 3718990469258727769ull}}, {{1804750318654062999ull, 12581929559210084180ull, 12587427522378699280ull, 2324369043286704855ull}}, {{2255937898317578749ull, 15727411949012605225ull, 11122598384545986196ull, 2905461304108381069ull}}, {{7431608391324361340ull, 1212520862556204915ull, 68189925400319034ull, 3631826630135476337ull}}, {{4677824470728063771ull, 10739023115050031952ull, 4696923425177786696ull, 4539783287669345421ull}}, {{2923640294205039857ull, 6711889446906269970ull, 5241420149949810637ull, 2837364554793340888ull}}, {{12877922404611075629ull, 13001547827060225366ull, 6551775187437263296ull, 3546705693491676110ull}}, {{6874030968909068729ull, 16251934783825281708ull, 17413091021151354928ull, 4433382116864595137ull}}, {{13519641392422943764ull, 10157459239890801067ull, 3965652860578514974ull, 2770863823040371961ull}}, {{12287865722101291800ull, 3473452013008725526ull, 9568752094150531622ull, 3463579778800464951ull}}, {{6136460115771838942ull, 13565187053115682716ull, 7349254099260776623ull, 4329474723500581189ull}}, {{13058659609212175147ull, 15395770935838383553ull, 6899126821251679341ull, 2705921702187863243ull}}, {{2488266456233055222ull, 5409655614515815730ull, 4012222508137211273ull, 3382402127734829054ull}}, {{12333705107146094835ull, 11373755536572157566ull, 14238650172026289899ull, 4228002659668536317ull}}, {{3096879673538921368ull, 4802754201143904527ull, 11204999366730125139ull, 2642501662292835198ull}}, {{17706157647205815422ull, 1391756733002492754ull, 4782877171557880616ull, 3303127077866043998ull}}, {{12909325022152493469ull, 1739695916253115943ull, 15201968501302126578ull, 4128908847332554997ull}}, {{14985857166486390275ull, 5698995966085585368ull, 11807073322527523063ull, 2580568029582846873ull}}, {{285577384398436227ull, 2512058939179593807ull, 923783597877240117ull, 3225710036978558592ull}}, {{14192029785780208996ull, 7751759692401880162ull, 1154729497346550146ull, 4032137546223198240ull}}, {{13481704634540018527ull, 9456535826178563005ull, 721705935841593841ull, 2520085966389498900ull}}, {{3017072737892859446ull, 16432355801150591661ull, 902132419801992301ull, 3150107457986873625ull}}, {{8383026940793462211ull, 6705386696156075864ull, 5739351543179878281ull, 3937634322483592031ull}}, {{5239391837995913882ull, 15720081731166017175ull, 10504623742128505781ull, 2461021451552245019ull}}, {{1937553779067504449ull, 5815044108675357757ull, 8519093659233244323ull, 3076276814440306274ull}}, {{7033628242261768465ull, 2657119117416809292ull, 1425495037186779596ull, 3845346018050382843ull}}, {{13619389688268381099ull, 10884071485240281615ull, 17031835462737594911ull, 2403341261281489276ull}}, {{12412551091908088469ull, 8993403338122964115ull, 2843050254712442023ull, 3004176576601861596ull}}, {{10904002846457722682ull, 6630068154226317240ull, 3553812818390552529ull, 3755220720752326995ull}}, {{6815001779036076677ull, 15673007642459918035ull, 18362034075989952994ull, 2347012950470204371ull}}, {{3907066205367707942ull, 10367887516220121736ull, 18340856576560053339ull, 2933766188087755464ull}}, {{4883832756709634927ull, 8348173376847764266ull, 4479326646990515058ull, 3667207735109694331ull}}, {{15328162982741819467ull, 1211844684204929524ull, 987472290310755919ull, 4584009668887117914ull}}, {{356729827358861359ull, 7674931955269162809ull, 5228856199871610353ull, 2865006043054448696ull}}, {{5057598302625964603ull, 14205350962513841415ull, 6536070249839512941ull, 3581257553818060870ull}}, {{1710311859855067849ull, 3921630647860138057ull, 17393459849154166985ull, 4476571942272576087ull}}, {{12598159958477887166ull, 13980234200981056045ull, 17788441433362436221ull, 2797857463920360054ull}}, {{1912641892815195245ull, 3640234695944156345ull, 13012179754848269469ull, 3497321829900450068ull}}, {{7002488384446381960ull, 9161979388357583335ull, 16265224693560336836ull, 4371652287375562585ull}}, {{11294084267920070581ull, 14949609154578265392ull, 3248236405834128666ull, 2732282679609726616ull}}, {{14117605334900088227ull, 9463639406368055932ull, 4060295507292660833ull, 3415353349512158270ull}}, {{17647006668625110283ull, 16441235276387457819ull, 14298741420970601849ull, 4269191686890197837ull}}, {{8723536158676999975ull, 3358243020101079281ull, 11242556397320320108ull, 2668244804306373648ull}}, {{15516106216773637873ull, 4197803775126349101ull, 14053195496650400135ull, 3335306005382967060ull}}, {{5560074715684883629ull, 635568700480548473ull, 17566494370813000169ull, 4169132506728708825ull}}, {{15004261743371522028ull, 11926445483868812555ull, 4061529954117043249ull, 2605707816705443016ull}}, {{14143641160787014631ull, 1072998799553851982ull, 5076912442646304062ull, 3257134770881803770ull}}, {{8456179414128992481ull, 10564620536297090786ull, 15569512590162655885ull, 4071418463602254712ull}}, {{9896798152258008205ull, 8908730844399375693ull, 9730945368851659928ull, 2544636539751409195ull}}, {{16982683708749898160ull, 11135913555499219616ull, 7551995692637187006ull, 3180795674689261494ull}}, {{2781610562227821084ull, 4696519907519248713ull, 216622578941707950ull, 3975994593361576868ull}}, {{13267721647460857937ull, 16770382997481694157ull, 9358761148693343276ull, 2484996620850985542ull}}, {{2749594004043908710ull, 2516234673142566081ull, 2475079399011903288ull, 3106245776063731928ull}}, {{8048678523482273791ull, 3145293341428207601ull, 3093849248764879110ull, 3882807220079664910ull}}, {{16559639123244890880ull, 15800866393674793462ull, 15768713835760213155ull, 2426754512549790568ull}}, {{11476176867201337791ull, 15139396973666103924ull, 1264148220990714828ull, 3033443140687238211ull}}, {{14345221084001672239ull, 477502143373078289ull, 15415243331520557248ull, 3791803925859047763ull}}, {{2048234149859963294ull, 298438839608173931ull, 7328684072986654328ull, 2369877453661904852ull}}, {{16395350742607117829ull, 373048549510217413ull, 9160855091233317910ull, 2962346817077381065ull}}, {{6659130372976733574ull, 9689682723742547575ull, 16062754882469035291ull, 3702933521346726331ull}}, {{11079485510751540340ull, 3750208693125398282ull, 7733378792329453105ull, 2314333450841703957ull}}, {{4625984851584649617ull, 9299446884834135757ull, 14278409508839204285ull, 2892916813552129946ull}}, {{10394167082908199925ull, 16235994624470057600ull, 8624639849194229548ull, 3616146016940162433ull}}, {{12992708853635249906ull, 1848249206878020384ull, 15392485829920174840ull, 4520182521175203041ull}}, {{8120443033522031191ull, 1155155754298762740ull, 2702774616059027419ull, 2825114075734501901ull}}, {{10150553791902538989ull, 15279002748155617137ull, 7990154288501172177ull, 3531392594668127376ull}}, {{17299878258305561640ull, 5263695379912357709ull, 9987692860626465222ull, 4414240743335159220ull}}, {{13118266920654669977ull, 17124867667727387280ull, 15465680074746316571ull, 2758900464584474512ull}}, {{16397833650818337472ull, 16794398566231846196ull, 885356019723344098ull, 3448625580730593141ull}}, {{2050547989813370223ull, 11769626170935031938ull, 5718381043081568027ull, 4310781975913241426ull}}, {{5893278512060744294ull, 5050173347620701009ull, 8185674170353367921ull, 2694238734945775891ull}}, {{11978284158503318271ull, 10924402702953264165ull, 5620406694514321997ull, 3367798418682219864ull}}, {{1137797142846984127ull, 18267189397118968111ull, 7025508368142902496ull, 4209748023352774830ull}}, {{7628652241920446935ull, 11416993373199355069ull, 18226000785371477772ull, 2631092514595484268ull}}, {{14147501320827946573ull, 14271241716499193836ull, 4335756908004795599ull, 3288865643244355336ull}}, {{17684376651034933216ull, 13227366127196604391ull, 5419696135005994499ull, 4111082054055444170ull}}, {{17970264434537915116ull, 5961260820284183792ull, 7998996102806134466ull, 2569426283784652606ull}}, {{4016086469462842279ull, 16674948062210005549ull, 775373091652892274ull, 3211782854730815758ull}}, {{9631794105255940753ull, 11620313040907731128ull, 10192588401420891151ull, 4014728568413519697ull}}, {{6019871315784962971ull, 14180224678208413811ull, 17899582796956526729ull, 2509205355258449810ull}}, {{2913153126303815809ull, 3890222792478353552ull, 13151106459340882604ull, 3136506694073062263ull}}, {{3641441407879769762ull, 4862778490597941940ull, 11827197055748715351ull, 3920633367591327829ull}}, {{11499272916779631909ull, 9956765584264795568ull, 9697841169056641046ull, 2450395854744579893ull}}, {{14374091145974539886ull, 3222584943476218652ull, 16733987479748189212ull, 3062994818430724866ull}}, {{17967613932468174858ull, 4028231179345273315ull, 11694112312830460707ull, 3828743523038406083ull}}, {{8923915698578915334ull, 211801477877101870ull, 5002977186305343990ull, 2392964701899003802ull}}, {{1931522586368868360ull, 9488123884201153146ull, 15477093519736455795ull, 2991205877373754752ull}}, {{11637775269815861258ull, 7248468836824053528ull, 899622825961018128ull, 3739007346717193441ull}}, {{7273609543634913286ull, 4530293023015033455ull, 12091479312294106090ull, 2336879591698245900ull}}, {{4480325911116253704ull, 14886238315623567627ull, 15114349140367632612ull, 2921099489622807375ull}}, {{988721370467929225ull, 161053820819907918ull, 14281250407032152862ull, 3651374362028509219ull}}, {{10459273749939687340ull, 9424689312879660705ull, 13239876990362803173ull, 4564217952535636524ull}}, {{18066261139780774347ull, 8196273829763481892ull, 17498295155831527791ull, 2852636220334772827ull}}, {{4136082351016416318ull, 5633656268776964462ull, 17261182926362021835ull, 3565795275418466034ull}}, {{14393474975625296206ull, 2430384317543817673ull, 12353106621097751486ull, 4457244094273082543ull}}, {{2078392832124728273ull, 15354048253747049758ull, 14638220665827176534ull, 2785777558920676589ull}}, {{11821363077010686149ull, 9969188280329036389ull, 4462717777001806956ull, 3482221948650845737ull}}, {{941645790981193974ull, 12461485350411295487ull, 10190083239679646599ull, 4352777435813557171ull}}, {{7506057647004328090ull, 14705957371648141535ull, 4062959015586085172ull, 2720485897383473232ull}}, {{4770886040328022208ull, 18382446714560176919ull, 5078698769482606465ull, 3400607371729341540ull}}, {{1351921531982639856ull, 9143000337918057437ull, 6348373461853258082ull, 4250759214661676925ull}}, {{3150793966702843862ull, 10326061229626173802ull, 6273576422871980253ull, 2656724509163548078ull}}, {{13161864495233330636ull, 17519262555460105156ull, 17065342565444751124ull, 3320905636454435097ull}}, {{16452330619041663294ull, 3452334120615579829ull, 7496620151523775194ull, 4151132045568043872ull}}, {{12588549646114733511ull, 6769394843812125297ull, 4685387594702359496ull, 2594457528480027420ull}}, {{1900629002361253177ull, 8461743554765156622ull, 5856734493377949370ull, 3243071910600034275ull}}, {{11599158289806342279ull, 1353807406601669969ull, 2709232098295048809ull, 4053839888250042844ull}}, {{331944903487882069ull, 12375344675194513491ull, 10916642098289181313ull, 2533649930156276777ull}}, {{14249989184642016298ull, 1634122788710978151ull, 18257488641288864546ull, 3167062412695345971ull}}, {{13200800462375132468ull, 11266025522743498497ull, 18210174783183692778ull, 3958828015869182464ull}}, {{1332971261343375937ull, 11652951970142074465ull, 11381359239489807986ull, 2474267509918239040ull}}, {{6277900095106607825ull, 5342817925822817273ull, 14226699049362259983ull, 3092834387397798800ull}}, {{12459061137310647685ull, 2066836388851133687ull, 17783373811702824979ull, 3866042984247248500ull}}, {{14704442238460236659ull, 17432673807527816218ull, 1891236595459489803ull, 2416276865154530313ull}}, {{9157180761220520016ull, 17179156240982382369ull, 6975731762751750158ull, 3020346081443162891ull}}, {{16058161969953037924ull, 12250573264373202153ull, 4107978685012299794ull, 3775432601803953614ull}}, {{3118822203579566846ull, 12268294308660639250ull, 16402544733414851083ull, 2359645376127471008ull}}, {{13121899791329234366ull, 10723681867398411158ull, 2056436843059012238ull, 2949556720159338761ull}}, {{7179002702306767149ull, 4181230297393238140ull, 7182232072251153202ull, 3686945900199173451ull}}, {{8973753377883458936ull, 14449909908596323483ull, 4366104071886553598ull, 4608682375248966814ull}}, {{3302752851963467883ull, 4419507674445314273ull, 16563873100211259711ull, 2880426484530604258ull}}, {{8740127083381722758ull, 912698574629254937ull, 11481469338409298831ull, 3600533105663255323ull}}, {{15536844872654541352ull, 14975931273568732383ull, 9740150654584235634ull, 4500666382079069154ull}}, {{16628057073050170201ull, 13971643064407845643ull, 10699280177542535175ull, 2812916488799418221ull}}, {{16173385322885324847ull, 12852867812082419150ull, 17985786240355556873ull, 3516145610999272776ull}}, {{10993359616751880251ull, 2231026709820860226ull, 4035488726734894476ull, 4395182013749090971ull}}, {{11482535778897313061ull, 10617763730492813449ull, 216337444995615095ull, 2746988758593181857ull}}, {{518111668339477614ull, 8660518644688628908ull, 4882107824671906773ull, 3433735948241477321ull}}, {{647639585424347017ull, 15437334324288174039ull, 10714320799267271370ull, 4292169935301846651ull}}, {{7322303768531298742ull, 14260019971107496678ull, 4390607490328350654ull, 2682606209563654157ull}}, {{18376251747518899235ull, 8601652927029595039ull, 10099945381337826222ull, 3353257761954567696ull}}, {{18358628665971236140ull, 1528694121932217991ull, 12624931726672282778ull, 4191572202443209620ull}}, {{18391671943873104444ull, 5567119844635024148ull, 17113954366024952544ull, 2619732626527006012ull}}, {{4542845856131828939ull, 6958899805793780186ull, 2945698883821639064ull, 3274665783158757516ull}}, {{14901929357019561981ull, 8698624757242225232ull, 3682123604777048830ull, 4093332228948446895ull}}, {{9313705848137226238ull, 824954454849002866ull, 9218856280626737375ull, 2558332643092779309ull}}, {{2418760273316756990ull, 14866251123843417295ull, 16135256369210809622ull, 3197915803865974136ull}}, {{16858508396928109949ull, 9359441867949495810ull, 1722326387803960412ull, 3997394754832467671ull}}, {{15148253766507456622ull, 15073023204323210689ull, 7993983020018557113ull, 2498371721770292294ull}}, {{5100259152852157066ull, 5006220950121849650ull, 769106738168420584ull, 3122964652212865368ull}}, {{15598695977919972140ull, 6257776187652312062ull, 961383422710525730ull, 3903705815266081710ull}}, {{5137498967772594684ull, 8522796135710082943ull, 14435922694476242293ull, 2439816134541301068ull}}, {{1810187691288355451ull, 15265181188064991583ull, 18044903368095302866ull, 3049770168176626335ull}}, {{16097792669392608025ull, 9858104448226463670ull, 17944443191691740679ull, 3812212710220782919ull}}, {{5449434399942992112ull, 13078844307782621650ull, 18132806022448419780ull, 2382632943887989324ull}}, {{16035165036783515948ull, 16348555384728277062ull, 4219263454350973109ull, 2978291179859986656ull}}, {{10820584259124619127ull, 6600636175628182616ull, 5274079317938716387ull, 3722863974824983320ull}}, {{6762865161952886954ull, 1819554600553920183ull, 3296299573711697742ull, 2326789984265614575ull}}, {{3841895434013720789ull, 11497815287547176037ull, 17955432522421785889ull, 2908487480332018218ull}}, {{9414055310944538890ull, 537211054151806334ull, 13220918616172456554ull, 3635609350415022773ull}}, {{2544197101825897804ull, 9894885854544533726ull, 2691090214933406980ull, 4544511688018778467ull}}, {{15425181243923349840ull, 15407675695945109386ull, 17822832448829237026ull, 2840319805011736541ull}}, {{10058104518049411492ull, 10036222583076610925ull, 8443482505754382571ull, 3550399756264670677ull}}, {{17184316665989152268ull, 7933592210418375752ull, 15166039150620366118ull, 4437999695330838346ull}}, {{10740197916243220168ull, 346809113084096941ull, 14090460487565116728ull, 2773749809581773966ull}}, {{18036933413731413114ull, 433511391355121176ull, 8389703572601620102ull, 3467187261977217458ull}}, {{4099422693454714776ull, 9765261276048677279ull, 1263757428897249319ull, 4333984077471521823ull}}, {{9479668211050278591ull, 13020817325171505155ull, 7707377420701862680ull, 2708740048419701139ull}}, {{7237899245385460335ull, 16276021656464381444ull, 5022535757449940446ull, 3385925060524626424ull}}, {{9047374056731825419ull, 11121655033725700997ull, 6278169696812425558ull, 4232406325655783030ull}}, {{7960451794671084839ull, 2339348377651175219ull, 17758914115789929686ull, 2645253953534864393ull}}, {{5338878724911468144ull, 12147557508918744832ull, 8363584589455248395ull, 3306567441918580492ull}}, {{6673598406139335180ull, 10572760867721043136ull, 10454480736819060494ull, 4133209302398225615ull}}, {{4170999003837084488ull, 1996289523898264056ull, 13451579488152994665ull, 2583255813998891009ull}}, {{5213748754796355610ull, 7107047923300217974ull, 2979416304909079619ull, 3229069767498613762ull}}, {{15740557980350220320ull, 4272123885697884563ull, 12947642417991125332ull, 4036337209373267202ull}}, {{7532005728505193748ull, 11893449465415953660ull, 12703962529671841236ull, 2522710755858292001ull}}, {{9415007160631492185ull, 14866811831769942075ull, 2044895106807637833ull, 3153388444822865002ull}}, {{7157072932361977327ull, 4748456734430263882ull, 11779490920364323100ull, 3941735556028581252ull}}, {{9084856601153623734ull, 12191157495873690734ull, 16585553862082477745ull, 2463584722517863282ull}}, {{2132698714587253859ull, 1403888814559949706ull, 11508570290748321374ull, 3079480903147329103ull}}, {{11889245430088843132ull, 10978233055054712940ull, 9774026845008013813ull, 3849351128934161379ull}}, {{16654150430660302766ull, 9167238668622889539ull, 3802923768916314681ull, 2405844455583850862ull}}, {{16206002019897990553ull, 16070734354205999828ull, 13977026748000169159ull, 3007305569479813577ull}}, {{1810758451162936575ull, 15476731924330111882ull, 3636225379718047737ull, 3759131961849766972ull}}, {{5743410050404223263ull, 2755428425065238070ull, 11496012899178555644ull, 2349457476156104357ull}}, {{16402634599860054887ull, 3444285531331547587ull, 534958068691030843ull, 2936821845195130447ull}}, {{15891607231397680705ull, 18140414969446598196ull, 14503755641145952265ull, 3671027306493913058ull}}, {{1417764965537549265ull, 8840460656526084034ull, 8906322514577664524ull, 4588784133117391323ull}}, {{5497789121888356195ull, 14748659947183578329ull, 3260608562397346375ull, 2867990083198369577ull}}, {{11483922420787833147ull, 13824138915552085007ull, 8687446721424070873ull, 3584987603997961971ull}}, {{9743217007557403530ull, 3445115589157942547ull, 6247622383352700688ull, 4481234504997452464ull}}, {{3783667620509683255ull, 2153197243223714092ull, 3904763989595437930ull, 2800771565623407790ull}}, {{4729584525637104068ull, 11914868590884418423ull, 14104327023849073220ull, 3500964457029259737ull}}, {{1300294638618992181ull, 14893585738605523029ull, 3795350724529177813ull, 4376205571286574672ull}}, {{3118527158350564065ull, 11614334095842145845ull, 2372094202830736133ull, 2735128482054109170ull}}, {{8509844966365592985ull, 682859564520518594ull, 12188489790393195975ull, 3418910602567636462ull}}, {{1413934171102215424ull, 14688632510932811955ull, 6012240201136719160ull, 4273638253209545578ull}}, {{17024609921434742304ull, 9180395319333007471ull, 8369336144137837379ull, 2671023908255965986ull}}, {{16669076383366039976ull, 6863808130738871435ull, 1238298143317520916ull, 3338779885319957483ull}}, {{16224659460780162066ull, 8579760163423589294ull, 15382930734429064857ull, 4173474856649946853ull}}, {{5528726144560213387ull, 16891565148208213069ull, 11920174718231859487ull, 2608421785406216783ull}}, {{11522593699127654638ull, 16502770416832878432ull, 10288532379362436455ull, 3260527231757770979ull}}, {{14403242123909568297ull, 16016777002613710136ull, 8248979455775657665ull, 4075659039697213724ull}}, {{9002026327443480186ull, 3092956598992486979ull, 14378984196714561849ull, 2547286899810758577ull}}, {{6640846890876962328ull, 8477881767167996628ull, 4138672190611038599ull, 3184108624763448222ull}}, {{8301058613596202910ull, 5985666190532607881ull, 14396712275118574057ull, 3980135780954310277ull}}, {{16717376679566096579ull, 15270256415151349685ull, 11303788181162802737ull, 2487584863096443923ull}}, {{7061662794175457012ull, 5252762463657023395ull, 9518049208026115518ull, 3109481078870554904ull}}, {{4215392474291933361ull, 15789325116426055052ull, 11897561510032644397ull, 3886851348588193630ull}}, {{11857992333287234159ull, 12174171206979978359ull, 2824289925343014844ull, 2429282092867621019ull}}, {{10210804398181654794ull, 15217714008724972949ull, 17365420461960932267ull, 3036602616084526273ull}}, {{17375191516154456396ull, 14410456492478828282ull, 7871717522169001622ull, 3795753270105657842ull}}, {{15471180716023923152ull, 4394849289371879772ull, 9531509469783013918ull, 2372345793816036151ull}}, {{892231821320352324ull, 14716933648569625524ull, 7302700818801379493ull, 2965432242270045189ull}}, {{1115289776650440405ull, 4561109005429868193ull, 13740062041929112271ull, 3706790302837556486ull}}, {{12226271156474995013ull, 9768222156034749476ull, 3975852757778307265ull, 2316743939273472804ull}}, {{15282838945593743766ull, 16821963713470824749ull, 4969815947222884081ull, 2895929924091841005ull}}, {{5268490626710015996ull, 7192396586556367225ull, 10823955952455993006ull, 3619912405114801256ull}}, {{11197299301814907899ull, 18213867770050234839ull, 13529944940569991257ull, 4524890506393501570ull}}, {{13915841091275399293ull, 4466138328640314918ull, 13067901606283632440ull, 2828056566495938481ull}}, {{8171429327239473308ull, 5582672910800393648ull, 2499818952572376838ull, 3535070708119923102ull}}, {{10214286659049341635ull, 16201713175355267868ull, 12348145727570246855ull, 4418838385149903877ull}}, {{15607301198760614330ull, 17043599762238124273ull, 10023434088945098236ull, 2761773990718689923ull}}, {{5674068443168604200ull, 2857755629088103726ull, 7917606592753984892ull, 3452217488398362404ull}}, {{16315957590815531058ull, 3572194536360129657ull, 9897008240942481115ull, 4315271860497953005ull}}, {{3279944466618625056ull, 18373522649720938700ull, 8491473159802744648ull, 2697044912811220628ull}}, {{4099930583273281319ull, 4520159238441621759ull, 10614341449753430811ull, 3371306141014025785ull}}, {{513227210664213745ull, 1038513029624639295ull, 17879612830619176418ull, 4214132676267532231ull}}, {{7238296034306215447ull, 5260756661942787463ull, 18092287046778067117ull, 2633832922667207644ull}}, {{4436184024455381404ull, 11187631845855872233ull, 4168614734763032280ull, 3292291153334009556ull}}, {{10156916048996614659ull, 13984539807319840291ull, 5210768418453790350ull, 4115363941667511945ull}}, {{4042229521409190210ull, 4128651361147512278ull, 14785945307602088729ull, 2572102463542194965ull}}, {{14276158938616263571ull, 9772500219861778251ull, 4647373579220447199ull, 3215128079427743707ull}}, {{13233512654842941559ull, 7603939256399834910ull, 1197530955598171095ull, 4018910099284679634ull}}, {{3659259390849450571ull, 11669991062890978675ull, 5360142865676244838ull, 2511818812052924771ull}}, {{18409132293843976925ull, 5364116791758947535ull, 2088492563667918144ull, 3139773515066155964ull}}, {{18399729348877583252ull, 6705145989698684419ull, 2610615704584897680ull, 3924716893832694955ull}}, {{9193987833834795581ull, 4190716243561677762ull, 17772535879861418714ull, 2452948058645434346ull}}, {{2269112755438718668ull, 14461767341306873011ull, 12992297812971997584ull, 3066185073306792933ull}}, {{16671448999580562047ull, 18077209176633591263ull, 2405314210932833268ull, 3832731341633491167ull}}, {{17337184652378933136ull, 2074883698541218731ull, 8420850409474102649ull, 2395457088520931979ull}}, {{17059794797046278515ull, 7205290641603911318ull, 5914376993415240407ull, 2994321360651164974ull}}, {{12101371459453072336ull, 4394927283577501244ull, 16616343278623826317ull, 3742901700813956217ull}}, {{16786729199012946018ull, 5052672561449632229ull, 3467685521498809592ull, 2339313563008722636ull}}, {{7148353443484018811ull, 6315840701812040287ull, 4334606901873511990ull, 2924141953760903295ull}}, {{4323755785927635609ull, 17118172914119826167ull, 806572608914502083ull, 3655177442201129119ull}}, {{793008713982156607ull, 16786030124222394805ull, 14843273816425291316ull, 4568971802751411398ull}}, {{2801473455452541832ull, 1267896790784220945ull, 4665360116838419169ull, 2855607376719632124ull}}, {{8113527837743065194ull, 6196557006907664085ull, 5831700146048023961ull, 3569509220899540155ull}}, {{14753595815606219396ull, 12357382277061968010ull, 2677939164132642047ull, 4461886526124425194ull}}, {{13832683403181275027ull, 14640892950804811862ull, 6285397996010289183ull, 2788679078827765746ull}}, {{8067482217121817975ull, 13689430170078626924ull, 17080119531867637287ull, 3485848848534707182ull}}, {{10084352771402272469ull, 12500101694170895751ull, 12126777377979770801ull, 4357311060668383978ull}}, {{13220249509767502149ull, 895034531215727988ull, 12190921879664744655ull, 2723319412917739986ull}}, {{16525311887209377686ull, 14953851219301823697ull, 6015280312726155010ull, 3404149266147174983ull}}, {{6821581803729558396ull, 9468941987272503814ull, 2907414372480305859ull, 4255186582683968729ull}}, {{18098546682613137710ull, 3612245732831620931ull, 13346349028868660922ull, 2659491614177480455ull}}, {{18011497334839034233ull, 13738679202894301972ull, 12071250267658438248ull, 3324364517721850569ull}}, {{4067627594839241175ull, 17173349003617877466ull, 1254004779290884098ull, 4155455647152313212ull}}, {{7153953265201913639ull, 15345029145688561320ull, 10007125023911578369ull, 2597159779470195757ull}}, {{8942441581502392048ull, 5346228376828537938ull, 17120592298316860866ull, 3246449724337744696ull}}, {{1954679940023214252ull, 15906157507890448231ull, 2953996299186524466ull, 4058062155422180871ull}}, {{8139203990155590764ull, 14553034460858918048ull, 8763776714632659647ull, 2536288847138863044ull}}, {{10174004987694488454ull, 13579607057646259656ull, 10954720893290824559ull, 3170361058923578805ull}}, {{12717506234618110568ull, 12362822803630436666ull, 18305087135040918603ull, 3962951323654473506ull}}, {{12560127415063707009ull, 5420921243055328964ull, 16052365477827962031ull, 2476844577284045941ull}}, {{15700159268829633761ull, 2164465535391773301ull, 6230398792002788827ull, 3096055721605057427ull}}, {{5790141030754878489ull, 16540639974521880339ull, 3176312471576098129ull, 3870069652006321784ull}}, {{1312995135008105104ull, 3420370956435093356ull, 1985195294735061331ull, 2418793532503951115ull}}, {{1641243918760131380ull, 18110521750826030407ull, 16316552173700990375ull, 3023491915629938893ull}}, {{15886612953732327937ull, 18026466170105150104ull, 6560632161844074257ull, 3779364894537423617ull}}, {{9929133096082704961ull, 4349012328674636959ull, 15629610147221016171ull, 2362103059085889760ull}}, {{7799730351675993297ull, 824579392415908295ull, 1090268610316718598ull, 2952628823857362201ull}}, {{5137976921167603717ull, 10254096277374661177ull, 5974521781323286151ull, 3690786029821702751ull}}, {{14740450621798222083ull, 13326339201000245091ull, 10651605140968135700ull, 2306741268638564219ull}}, {{13813877258820389700ull, 16657924001250306364ull, 8702820407782781721ull, 2883426585798205274ull}}, {{17267346573525487125ull, 6987346946280719243ull, 1655153472873701344ull, 3604283232247756593ull}}, {{16972497198479471002ull, 8734183682850899054ull, 6680627859519514584ull, 4505354040309695741ull}}, {{5996124730622281472ull, 5458864801781811909ull, 6481235421413390567ull, 2815846275193559838ull}}, {{12106841931705239744ull, 2211894983799876982ull, 17324916313621514017ull, 3519807843991949797ull}}, {{5910180377776773872ull, 7376554748177234132ull, 7821087336744728809ull, 4399759804989937247ull}}, {{12917234772965259478ull, 16139561763679241092ull, 11805708613106537361ull, 2749849878118710779ull}}, {{16146543466206574348ull, 6339394149316887653ull, 10145449747955783798ull, 3437312347648388474ull}}, {{6348121277476054223ull, 17147614723500885375ull, 3458440148089953939ull, 4296640434560485593ull}}, {{10885104826063615745ull, 8411416192974359407ull, 13690740138624690972ull, 2685400271600303495ull}}, {{8994695014152131778ull, 10514270241217949259ull, 12501739154853475811ull, 3356750339500379369ull}}, {{6631682749262776818ull, 8531151783095048670ull, 1792115888284681052ull, 4195937924375474212ull}}, {{17979859773571399223ull, 14555341901289181226ull, 10343444467032701465ull, 2622461202734671382ull}}, {{13251452680109473221ull, 4359119321329312821ull, 3705933546936101024ull, 3278076503418339228ull}}, {{2729257794854677814ull, 5448899151661641027ull, 4632416933670126280ull, 4097595629272924035ull}}, {{17846687186280031298ull, 3405561969788525641ull, 589417574330134973ull, 2560997268295577522ull}}, {{8473300927567875410ull, 8868638480663044956ull, 9960144004767444524ull, 3201246585369471902ull}}, {{10591626159459844263ull, 11085798100828806195ull, 3226807969104529847ull, 4001558231711839878ull}}, {{4313923340448708712ull, 13846152840659085728ull, 15851813035972494866ull, 2500973894819899923ull}}, {{5392404175560885890ull, 8084319013969081352ull, 15203080276538230679ull, 3126217368524874904ull}}, {{6740505219451107363ull, 5493712749033963786ull, 557106271963236733ull, 3907771710656093631ull}}, {{8824501780584330006ull, 5739413477359921318ull, 7265720447618104814ull, 2442357319160058519ull}}, {{1807255188875636699ull, 16397638883554677456ull, 4470464541095243113ull, 3052946648950073149ull}}, {{2259068986094545874ull, 6661990549161183108ull, 10199766694796441796ull, 3816183311187591436ull}}, {{10635290153163866980ull, 13387116130080515250ull, 15598226221102551930ull, 2385114569492244647ull}}, {{4070740654600057916ull, 7510523125745868255ull, 14886096757950802009ull, 2981393211865305809ull}}, {{476739799822684491ull, 13999839925609723223ull, 4772562892156338799ull, 3726741514831632262ull}}, {{7215491402530259663ull, 15667428981147158870ull, 16817909862879875461ull, 2329213446769770163ull}}, {{18242736290017600387ull, 5749228171151784875ull, 16410701310172456423ull, 2911516808462212704ull}}, {{18191734344094612580ull, 2574849195512343190ull, 2066632564006018913ull, 3639396010577765881ull}}, {{13516295893263489916ull, 7830247512817816892ull, 7194976723434911545ull, 4549245013222207351ull}}, {{17671056970144457006ull, 16423119741579605317ull, 11414389479787901571ull, 2843278133263879594ull}}, {{8253763157398407545ull, 15917213658547118743ull, 5044614812880101156ull, 3554097666579849493ull}}, {{5705517928320621527ull, 1449772999474346813ull, 10917454534527514350ull, 4442622083224811866ull}}, {{5871791714414082407ull, 14741166179953630470ull, 11435095102507084372ull, 2776638802015507416ull}}, {{16563111679872378816ull, 18426457724942038087ull, 14293868878133855465ull, 3470798502519384270ull}}, {{16092203581413085616ull, 9198014100895383897ull, 8643964060812543524ull, 4338498128149230338ull}}, {{3140098210742096654ull, 14972130849914390744ull, 10014163556435227606ull, 2711561330093268961ull}}, {{3925122763427620818ull, 9491791525538212622ull, 17129390463971422412ull, 3389451662616586201ull}}, {{14129775491139301830ull, 11864739406922765777ull, 7576680024682114303ull, 4236814578270732752ull}}, {{1913580654320981788ull, 14332991156967810467ull, 4735425015426321439ull, 2648009111419207970ull}}, {{16227033873183390947ull, 13304552927782375179ull, 15142653306137677607ull, 3310011389274009962ull}}, {{15672106323051850780ull, 12019005141300581070ull, 9704944595817321201ull, 4137514236592512453ull}}, {{5183380433480018833ull, 594349185671781313ull, 8371433381599519703ull, 2585946397870320283ull}}, {{11090911560277411446ull, 14577994537371890353ull, 5852605708572011724ull, 3232432997337900354ull}}, {{28581395064600595ull, 18222493171714862942ull, 16539129172569790463ull, 4040541246672375442ull}}, {{13852921427197539084ull, 18306587259962871194ull, 14948641751283506943ull, 2525338279170234651ull}}, {{8092779747142148047ull, 18271548056526201089ull, 14074116170676995775ull, 3156672848962793314ull}}, {{14727660702355072963ull, 18227749052230363457ull, 8369273176491468911ull, 3945841061203491643ull}}, {{2287258911330838746ull, 18309872185285059017ull, 2924952726093474117ull, 2466150663252182277ull}}, {{7470759657590936336ull, 9052282176324160059ull, 8267876926044230551ull, 3082688329065227846ull}}, {{4726763553561282516ull, 6703666701977812170ull, 1111474120700512381ull, 3853360411331534808ull}}, {{7565913239403189477ull, 6495634697949826558ull, 694671325437820238ull, 2408350257082209255ull}}, {{234019512399211038ull, 17342915409292059006ull, 14703397212079439009ull, 3010437821352761568ull}}, {{9515896427353789605ull, 7843586206332910045ull, 18379246515099298762ull, 3763047276690951960ull}}, {{8253278276309812455ull, 9513927397385456682ull, 11487029071937061726ull, 2351904547931844975ull}}, {{1093225808532489761ull, 2669037209877045045ull, 9747100321493939254ull, 2939880684914806219ull}}, {{5978218279093000105ull, 12559668549201082114ull, 7572189383440036163ull, 3674850856143507774ull}}, {{16696144885721025939ull, 11087899668073964738ull, 241864692445269396ull, 4593563570179384718ull}}, {{15046776572003029116ull, 16153309329401003769ull, 13986223488060457084ull, 2870977231362115448ull}}, {{4973412659721622683ull, 1744892588041703096ull, 17482779360075571356ull, 3588721539202644310ull}}, {{6216765824652028354ull, 2181115735052128870ull, 12630102163239688387ull, 4485901924003305388ull}}, {{17720536695689681433ull, 17504098398903438207ull, 17117185888879581049ull, 2803688702502065867ull}}, {{17538984851184713888ull, 8045064943347134047ull, 16784796342672088408ull, 3504610878127582334ull}}, {{17312045045553504455ull, 10056331179183917559ull, 11757623391485334702ull, 4380763597659477918ull}}, {{17737557181112022141ull, 1673520968562560570ull, 2736828601250946285ull, 2737977248537173699ull}}, {{12948574439535251868ull, 6703587229130588617ull, 17256093806845846568ull, 3422471560671467123ull}}, {{2350659994136901123ull, 8379484036413235772ull, 16958431240129920306ull, 4278089450839333904ull}}, {{10692534533190339010ull, 9848863541185660261ull, 10599019525081200191ull, 2673805906774583690ull}}, {{17977354184915311666ull, 7699393408054687422ull, 4025402369496724431ull, 3342257383468229613ull}}, {{13248320694289363775ull, 5012555741640971374ull, 9643438980298293443ull, 4177821729335287016ull}}, {{3668514415503464455ull, 827004329311913157ull, 6027149362686433402ull, 2611138580834554385ull}}, {{9197329037806718473ull, 10257127448494667254ull, 12145622721785429656ull, 3263923226043192981ull}}, {{2273289260403622283ull, 12821409310618334068ull, 1346970346949623358ull, 4079904032553991227ull}}, {{10644177824607039735ull, 3401694800709070888ull, 16982757531339372263ull, 2549940020346244516ull}}, {{13305222280758799669ull, 18087176556168502322ull, 2781702840464663712ull, 3187425025432805646ull}}, {{7408155814093723778ull, 4162226621501076287ull, 12700500587435605449ull, 3984281281791007057ull}}, {{11547626411449659217ull, 14130606684506642439ull, 1020283839506171549ull, 2490175801119379411ull}}, {{9822846995884686118ull, 3828200300351139337ull, 15110412854664878149ull, 3112719751399224263ull}}, {{16890244763283245551ull, 9396936393866312075ull, 14276330049903709782ull, 3890899689249030329ull}}, {{8250559967838334517ull, 1261399227739057143ull, 2005177253548736758ull, 2431812305780643956ull}}, {{5701513941370530243ull, 10800121071528597237ull, 2506471566935920947ull, 3039765382225804945ull}}, {{11738578445140550707ull, 8888465320983358642ull, 7744775477097289088ull, 3799706727782256181ull}}, {{11948297546640232096ull, 5555290825614599151ull, 7146327682399499632ull, 2374816704863910113ull}}, {{10323685914872902216ull, 6944113532018248939ull, 13544595621426762444ull, 2968520881079887641ull}}, {{8292921375163739866ull, 8680141915022811174ull, 3095686471501289343ull, 3710651101349859552ull}}, {{571389841049949513ull, 12342617724530338840ull, 1934804044688305839ull, 2319156938343662220ull}}, {{714237301312436891ull, 10816586137235535646ull, 2418505055860382299ull, 2898946172929577775ull}}, {{10116168663495321921ull, 8909046653117031653ull, 16858189375107641586ull, 3623682716161972218ull}}, {{17256896847796540305ull, 1912936279541513758ull, 11849364682029776175ull, 4529603395202465273ull}}, {{6173874511445449787ull, 8113114202354527955ull, 488323898627528253ull, 2831002122001540796ull}}, {{3105657120879424329ull, 14753078771370547848ull, 610404873284410316ull, 3538752652501925995ull}}, {{3882071401099280412ull, 18441348464213184810ull, 14598064146887676607ull, 4423440815627407493ull}}, {{7037980644114438162ull, 18443371817774322362ull, 11429633101018491831ull, 2764650509767129683ull}}, {{18020847841997823510ull, 18442528753790515048ull, 9675355357845726885ull, 3455813137208912104ull}}, {{4079315728787727771ull, 9218102886955980099ull, 12094194197307158607ull, 4319766421511140130ull}}, {{243729321278635905ull, 12678843331988569418ull, 12170557391744362033ull, 2699854013444462581ull}}, {{9528033688453070689ull, 2013496109703548060ull, 1378138684398288830ull, 3374817516805578227ull}}, {{11910042110566338361ull, 11740242173984210883ull, 15557731410780024749ull, 4218521896006972783ull}}, {{5137933309890267524ull, 9643494367953825754ull, 16641111159378597324ull, 2636576185004357989ull}}, {{15645788674217610213ull, 12054367959942282192ull, 6966330893941082943ull, 3295720231255447487ull}}, {{1110491769062461150ull, 10456273931500464837ull, 4096227598998965775ull, 4119650289069309359ull}}, {{2999900364877732171ull, 13452700234828872379ull, 9477671277015435465ull, 2574781430668318349ull}}, {{17584933511379328926ull, 2980817238253926761ull, 16458775114696682236ull, 3218476788335397936ull}}, {{8146108833941997445ull, 3726021547817408452ull, 2126724819661301179ull, 4023095985419247421ull}}, {{14314690058068524211ull, 22920458172186330ull, 3635046021502007189ull, 2514434990887029638ull}}, {{8669990535730879456ull, 4640336591142620817ull, 13767179563732284794ull, 3143043738608787047ull}}, {{15449174188090987224ull, 15023792775783051829ull, 12597288436237968088ull, 3928804673260983809ull}}, {{11961576876770560967ull, 9389870484864407393ull, 955776245007648199ull, 2455502920788114881ull}}, {{1116913040681037497ull, 7125652087653121338ull, 5806406324686948153ull, 3069378650985143601ull}}, {{10619513337706072679ull, 13518751127993789576ull, 11869693924286073095ull, 3836723313731429501ull}}, {{6637195836066295424ull, 15366748482637200341ull, 9724401711892489636ull, 2397952071082143438ull}}, {{12908180813510257184ull, 761691529586948810ull, 2932130103010836238ull, 2997440088852679298ull}}, {{6911853980033045672ull, 10175486448838461821ull, 12888534665618321105ull, 3746800111065849122ull}}, {{6625751746734347497ull, 17888894076592508398ull, 12667020184438838594ull, 2341750069416155701ull}}, {{17505561720272710180ull, 13137745558885859689ull, 1998717175266384531ull, 2927187586770194627ull}}, {{8046894095058724012ull, 11810495930179936708ull, 16333454524365144376ull, 3658984483462743283ull}}, {{10058617618823405015ull, 14763119912724920885ull, 15805132137029042566ull, 4573730604328429104ull}}, {{8592479020978322087ull, 4615263927025687649ull, 9878207585643151604ull, 2858581627705268190ull}}, {{15352284794650290512ull, 5769079908782109561ull, 3124387445199163697ull, 3573227034631585238ull}}, {{5355297938030699428ull, 11823035904405024856ull, 13128856343353730429ull, 4466533793289481547ull}}, {{3347061211269187143ull, 9695240449466834487ull, 5899692205382387566ull, 2791583620805925967ull}}, {{18018884569368647641ull, 2895678524978767300ull, 2762929238300596554ull, 3489479526007407459ull}}, {{4076861638001257935ull, 12842970193078234934ull, 17288719603157909404ull, 4361849407509259323ull}}, {{16383096579032949921ull, 17250228407528672641ull, 8499606742759999425ull, 2726155879693287077ull}}, {{6643812668509023689ull, 7727727454128677090ull, 15236194446877387186ull, 3407694849616608846ull}}, {{17528137872491055420ull, 436287280806070554ull, 9821871021741958175ull, 4259618562020761058ull}}, {{15566772188734297542ull, 7190208578144875952ull, 10750355407016111763ull, 2662261601262975661ull}}, {{1011721162208320311ull, 4376074704253707037ull, 18049630277197527608ull, 3327827001578719576ull}}, {{5876337471187788292ull, 5470093380317133796ull, 4115293772787357894ull, 4159783751973399471ull}}, {{12896082956347143491ull, 17253866417980372334ull, 9489587635633180539ull, 2599864844983374669ull}}, {{6896731658579153556ull, 16955647004048077514ull, 16473670562968863578ull, 3249831056229218336ull}}, {{17844286610078717752ull, 11971186718205321084ull, 2145344130001527857ull, 4062288820286522921ull}}, {{1929307094444422787ull, 564462671237243822ull, 12870055127319424671ull, 2538930512679076825ull}}, {{11635005904910304292ull, 14540636394328718489ull, 2252510853867117126ull, 3173663140848846032ull}}, {{708699325855716653ull, 8952423456056122304ull, 2815638567333896408ull, 3967078926061057540ull}}, {{442937078659822908ull, 5595264660035076440ull, 10983146141438461063ull, 2479424328788160962ull}}, {{553671348324778635ull, 2382394806616457646ull, 4505560639943300521ull, 3099280410985201203ull}}, {{9915461222260749102ull, 7589679526697959961ull, 1020264781501737747ull, 3874100513731501504ull}}, {{17726378309981437949ull, 2437706694972531023ull, 637665488438586092ull, 2421312821082188440ull}}, {{17546286869049409532ull, 3047133368715663779ull, 797081860548232615ull, 3026641026352735550ull}}, {{17321172567884374011ull, 17643974766176743436ull, 10219724362540066576ull, 3783301282940919437ull}}, {{1602360818072957949ull, 11027484228860464648ull, 8693170735801235562ull, 2364563301838074648ull}}, {{2002951022591197436ull, 4560983249220805002ull, 10866463419751544453ull, 2955704127297593310ull}}, {{11727060815093772603ull, 10312915079953394156ull, 4359707237834654758ull, 3694630159121991638ull}}, {{16552785046288383685ull, 1833885906543483443ull, 16559875078928822936ull, 2309143849451244773ull}}, {{16079295289433091702ull, 2292357383179354304ull, 6864785793378864958ull, 2886429811814055967ull}}, {{1652375038081813012ull, 12088818765828968689ull, 3969296223296193293ull, 3608037264767569959ull}}, {{6677154816029654168ull, 1275965402004047149ull, 349934260692853713ull, 4510046580959462449ull}}, {{6479064769232227807ull, 12326693422320999228ull, 11747923959001503330ull, 2818779113099664030ull}}, {{8098830961540284759ull, 6184994741046473227ull, 5461532911897103355ull, 3523473891374580038ull}}, {{5511852683497968045ull, 3119557407880703630ull, 16050288176726155002ull, 4404342364218225047ull}}, {{17279965982468393740ull, 6561409398352827672ull, 16948959138094928732ull, 2752713977636390654ull}}, {{3153213404375940559ull, 8201761747941034591ull, 11962826885763885107ull, 3440892472045488318ull}}, {{17776574810752089411ull, 5640516166498905334ull, 5730161570350080576ull, 4301115590056860398ull}}, {{6498673238292667978ull, 3525322604061815834ull, 17416409036750964072ull, 2688197243785537748ull}}, {{17346713584720610780ull, 4406653255077269792ull, 3323767222229153474ull, 3360246554731922186ull}}, {{3236647907191211859ull, 14731688605701363049ull, 13378081064641217650ull, 4200308193414902732ull}}, {{13552119988062977172ull, 13818991396990739809ull, 17584672702255536839ull, 2625192620884314207ull}}, {{3105091929796557753ull, 12662053227811036858ull, 17369154859392033145ull, 3281490776105392759ull}}, {{13104736949100472999ull, 1992508479481632360ull, 17099757555812653528ull, 4101863470131740949ull}}, {{8190460593187795625ull, 1245317799676020225ull, 12993191481596602407ull, 2563664668832338093ull}}, {{14849761759912132435ull, 15391705304877188993ull, 2406431296713589296ull, 3204580836040422617ull}}, {{4727144144608001831ull, 792887557386934626ull, 7619725139319374525ull, 4005726045050528271ull}}, {{7566151108807389049ull, 2801397732580528093ull, 11679857239715690934ull, 2503578778156580169ull}}, {{14069374904436624215ull, 12725119202580435924ull, 764763494362449955ull, 3129473472695725212ull}}, {{17586718630545780268ull, 11294712984798157001ull, 955954367953062444ull, 3911841840869656515ull}}, {{4074170116450030812ull, 16282567652353623934ull, 16738372544466521691ull, 2444901150543535321ull}}, {{14316084682417314323ull, 15741523547014642013ull, 7087907625300988402ull, 3056126438179419152ull}}, {{4060047797739479191ull, 10453532396913526709ull, 8859884531626235503ull, 3820158047724273940ull}}, {{4843372882800868447ull, 13450986775712036049ull, 14760799869121172997ull, 2387598779827671212ull}}, {{10665902121928473462ull, 2978675414357881349ull, 4255762691914631ull, 2984498474784589016ull}}, {{17944063670837979732ull, 17558402323229515398ull, 5319703364893288ull, 3730623093480736270ull}}, {{6603353775846349429ull, 10974001452018447124ull, 13838382869885222017ull, 2331639433425460168ull}}, {{8254192219807936786ull, 18329187833450446809ull, 17297978587356527521ull, 2914549291781825210ull}}, {{14929426293187308886ull, 9076426736530894799ull, 12399101197340883594ull, 3643186614727281513ull}}, {{14050096848056748203ull, 2122161383808842691ull, 1663818441393940781ull, 4553983268409101892ull}}, {{6475467520821773675ull, 3632193874094220634ull, 10263258562725988796ull, 2846239542755688682ull}}, {{17317706437881992902ull, 4540242342617775792ull, 3605701166552710187ull, 3557799428444610853ull}}, {{3200388973642939511ull, 1063616909844831837ull, 9118812476618275638ull, 4447249285555763566ull}}, {{4306086117740531147ull, 14499818623935183610ull, 1087571779459034369ull, 2779530803472352229ull}}, {{14605979684030439741ull, 4289715224636815800ull, 5971150742751180866ull, 3474413504340440286ull}}, {{18257474605038049677ull, 14585516067650795558ull, 16687310465293751890ull, 4343016880425550357ull}}, {{6799235609721393144ull, 13727633560709135128ull, 12735412050022288883ull, 2714385550265968973ull}}, {{8499044512151741430ull, 12547855932459031006ull, 2084207007245697392ull, 3392981937832461217ull}}, {{1400433603334900979ull, 15684819915573788758ull, 7216944777484509644ull, 4241227422290576521ull}}, {{14710329057366476824ull, 579640410378842165ull, 16039805531996288288ull, 2650767138931610325ull}}, {{4552853266425932318ull, 724550512973552707ull, 6214698859713196648ull, 3313458923664512907ull}}, {{1079380564605027494ull, 905688141216940884ull, 3156687556214107906ull, 4141823654580641134ull}}, {{9897984889732917992ull, 5177741106687975956ull, 15807987777915981153ull, 2588639784112900708ull}}, {{12372481112166147489ull, 11083862401787357849ull, 1313240648685424825ull, 3235799730141125886ull}}, {{1630543334925520650ull, 19769946952033600ull, 10864922847711556840ull, 4044749662676407357ull}}, {{1019089584328450406ull, 12356216845021000ull, 9096419789033416977ull, 2527968539172754598ull}}, {{1273861980410563008ull, 4627131289483664154ull, 2147152699436995413ull, 3159960673965943248ull}}, {{10815699512367979567ull, 10395600130281968096ull, 2683940874296244266ull, 3949950842457429060ull}}, {{6759812195229987230ull, 11108936099853617964ull, 10900835083289928474ull, 2468719276535893162ull}}, {{8449765244037484037ull, 4662798087962246647ull, 4402671817257634785ull, 3085899095669866453ull}}, {{5950520536619467142ull, 10440183628380196213ull, 10115025789999431385ull, 3857373869587333066ull}}, {{6024918344600860916ull, 18054329813806092393ull, 10933577137177032519ull, 2410858668492083166ull}}, {{12142833949178464049ull, 17956226248830227587ull, 4443599384616514841ull, 3013573335615103958ull}}, {{10566856418045692157ull, 8610224755755620772ull, 14777871267625419360ull, 3766966669518879947ull}}, {{15827657298133333406ull, 5381390472347262982ull, 6930326533052193148ull, 2354354168449299967ull}}, {{10561199585811890950ull, 6726738090434078728ull, 4051222147887853531ull, 2942942710561624959ull}}, {{13201499482264863687ull, 3796736594615210506ull, 452341666432429010ull, 3678678388202031199ull}}, {{7278502315976303801ull, 13969292780123788941ull, 14400485138322699974ull, 4598347985252538998ull}}, {{6854906956698883828ull, 4119121969149980184ull, 4388617193024299580ull, 2873967490782836874ull}}, {{8568633695873604785ull, 5148902461437475230ull, 14709143528135150283ull, 3592459363478546092ull}}, {{1487420082987230173ull, 1824442058369456134ull, 18386429410168937854ull, 4490574204348182615ull}}, {{14764695607149182570ull, 14975334341763073795ull, 18409047408996668014ull, 2806608877717614134ull}}, {{13844183490509090309ull, 9495795890349066436ull, 13787937224391059210ull, 3508261097147017668ull}}, {{17305229363136362886ull, 2646372826081557237ull, 17234921530488824013ull, 4385326371433772085ull}}, {{13121611361173920756ull, 3959826025514667225ull, 13077668965769208960ull, 2740828982146107553ull}}, {{2566956146185237232ull, 4949782531893334032ull, 2512028151929347488ull, 3426036227682634442ull}}, {{3208695182731546540ull, 6187228164866667540ull, 12363407226766460168ull, 4282545284603293052ull}}, {{11228806526061992396ull, 3867017603041667212ull, 16950501553583813413ull, 2676590802877058157ull}}, {{14036008157577490495ull, 9445458022229471919ull, 7353068886697603054ull, 3345738503596322697ull}}, {{12933324178544475214ull, 2583450490932064091ull, 13803022126799391722ull, 4182173129495403371ull}}, {{5777484602376603057ull, 6226342575259927961ull, 6321045820035925874ull, 2613858205934627107ull}}, {{11833541771398141725ull, 17006300255929685759ull, 3289621256617519438ull, 3267322757418283884ull}}, {{10180241195820289253ull, 12034503283057331391ull, 4112026570771899298ull, 4084153446772854855ull}}, {{13280179775028762639ull, 12133250570338220023ull, 9487545634373518917ull, 2552595904233034284ull}}, {{11988538700358565395ull, 1331505157640611317ull, 11859432042966898647ull, 3190744880291292855ull}}, {{1150615320166043031ull, 15499439502332927859ull, 10212604035281235404ull, 3988431100364116069ull}}, {{16860035639599634559ull, 463777652103304103ull, 8688720531264466080ull, 2492769437727572543ull}}, {{16463358531072155294ull, 579722065129130129ull, 6249214645653194696ull, 3115961797159465679ull}}, {{6744140108558030406ull, 724652581411412662ull, 3199832288639105466ull, 3894952246449332099ull}}, {{18050145623130932716ull, 5064593881809520817ull, 18140796244895298580ull, 2434345154030832561ull}}, {{8727623973631502183ull, 6330742352261901022ull, 8840937250836959513ull, 3042931442538540702ull}}, {{1686157930184601920ull, 12525113958754764182ull, 1827799526691423583ull, 3803664303173175878ull}}, {{14888906761647539912ull, 14745725251862809469ull, 14977432759464303451ull, 2377290189483234923ull}}, {{4776075396777261178ull, 13820470546401123933ull, 14110104930902991410ull, 2971612736854043654ull}}, {{10581780264398964377ull, 8052216146146629108ull, 8414259126773963455ull, 3714515921067554568ull}}, {{15836984702104128544ull, 11950164118982725048ull, 5258911954233727159ull, 2321572450667221605ull}}, {{1349486803920609063ull, 10326019130301018407ull, 11185325961219546853ull, 2901965563334027006ull}}, {{15521916560182925041ull, 17519209931303660912ull, 4758285414669657758ull, 3627456954167533758ull}}, {{955651626519104685ull, 12675640377274800333ull, 15171228805191848006ull, 4534321192709417197ull}}, {{2903125275788134380ull, 3310589217369362304ull, 11787861012458598956ull, 2833950745443385748ull}}, {{3628906594735167975ull, 4138236521711702880ull, 14734826265573248695ull, 3542438431804232185ull}}, {{4536133243418959969ull, 561109633712240696ull, 4583474776684397157ull, 4428048039755290232ull}}, {{2835083277136849981ull, 2656536530283844387ull, 2864671735427748223ull, 2767530024847056395ull}}, {{17378912151703226188ull, 17155728718136969195ull, 17415897724566848990ull, 3459412531058820493ull}}, {{17111954171201644831ull, 12221288860816435686ull, 7934814100426397526ull, 4324265663823525617ull}}, {{6083285338573640115ull, 3026619519582884400ull, 16488473858834968214ull, 2702666039889703510ull}}, {{7604106673217050144ull, 13006646436333381308ull, 11387220286688934459ull, 3378332549862129388ull}}, {{9505133341521312680ull, 11646622026989338731ull, 14234025358361168074ull, 4222915687327661735ull}}, {{3634865329237126473ull, 11890824785295724611ull, 15813794876616811902ull, 2639322304579788584ull}}, {{18378639716828571803ull, 5640158944764879955ull, 1320499522061463262ull, 3299152880724735731ull}}, {{18361613627608326850ull, 16273570717810875752ull, 15485682457858992789ull, 4123941100905919663ull}}, {{11476008517255204282ull, 12476824707845491297ull, 16596080563802952349ull, 2577463188066199789ull}}, {{509952591286841640ull, 1760972829524700410ull, 6910042649471526725ull, 3221828985082749737ull}}, {{9860812775963327858ull, 6812902055333263416ull, 13249239330266796310ull, 4027286231353437171ull}}, {{6163007984977079911ull, 18093121839865453347ull, 5974931572203053741ull, 2517053894595898232ull}}, {{3092073962793961985ull, 8781344244549652972ull, 7468664465253817177ull, 3146317368244872790ull}}, {{3865092453492452481ull, 15588366324114454119ull, 112458544712495663ull, 3932896710306090988ull}}, {{9333211811073864657ull, 16660257980212615680ull, 9293658627300085597ull, 2458060443941306867ull}}, {{11666514763842330821ull, 6990264419983605888ull, 7005387265697719093ull, 3072575554926633584ull}}, {{14583143454802913526ull, 13349516543406895264ull, 8756734082122148866ull, 3840719443658291980ull}}, {{9114464659251820954ull, 12955133858056697444ull, 14696330838181118849ull, 2400449652286432487ull}}, {{11393080824064776192ull, 2358859267288708093ull, 13758727529299010658ull, 3000562065358040609ull}}, {{406292974798806528ull, 12171946120965660925ull, 3363351356341599610ull, 3750702581697550762ull}}, {{2559776118462948032ull, 12219152344030925982ull, 6713780616140887660ull, 2344189113560969226ull}}, {{12423092184933460848ull, 15273940430038657477ull, 17615597807030885383ull, 2930236391951211532ull}}, {{1693807175884662348ull, 14480739519120933943ull, 3572753185079055113ull, 3662795489939014416ull}}, {{15952317025137991647ull, 4265866343619003716ull, 4465941481348818892ull, 4578494362423768020ull}}, {{746826103856468972ull, 11889538501616653131ull, 12014585462697787615ull, 2861558976514855012ull}}, {{14768590685102749926ull, 10250237108593428509ull, 15018231828372234519ull, 3576948720643568765ull}}, {{4625680301096273696ull, 8201110367314397733ull, 4937731730183129437ull, 4471185900804460957ull}}, {{5196893197398865012ull, 7431536988785192535ull, 5391925340578149850ull, 2794491188002788098ull}}, {{1884430478321193361ull, 66049199126714861ull, 15963278712577463121ull, 3493113985003485122ull}}, {{6967224116328879605ull, 4694247517335781480ull, 10730726353867053093ull, 4366392481254356403ull}}, {{4354515072705549753ull, 5239747707548557377ull, 4400860961953214231ull, 2728995300783972752ull}}, {{10054829859309325096ull, 1937998616008308817ull, 5501076202441517789ull, 3411244125979965940ull}}, {{17180223342564044273ull, 7034184288437773925ull, 6876345253051897236ull, 4264055157474957425ull}}, {{13043482598316221623ull, 13619737217128384511ull, 15826930829225905532ull, 2665034473421848390ull}}, {{11692667229467889125ull, 17024671521410480639ull, 10560291499677606107ull, 3331293091777310488ull}}, {{10004148018407473502ull, 16669153383335712895ull, 13200364374597007634ull, 4164116364721638110ull}}, {{13170121539145752795ull, 15029906883012208463ull, 3638541715695741867ull, 2602572727951023819ull}}, {{11850965905504803089ull, 14175697585337872675ull, 18383235199901841046ull, 3253215909938779773ull}}, {{10202021363453615958ull, 8496249944817565036ull, 9143985944595137596ull, 4066519887423474717ull}}, {{15599635389013285782ull, 14533528252365753955ull, 8020834224585654949ull, 2541574929639671698ull}}, {{14887858217839219323ull, 4331852260175028732ull, 802670743877292879ull, 3176968662049589623ull}}, {{163078698589472538ull, 803129306791398012ull, 14838396485128779811ull, 3971210827561987028ull}}, {{9325296223473196144ull, 16642856881240481421ull, 50625766350711573ull, 2482006767226241893ull}}, {{16268306297768883084ull, 6968513046268438064ull, 4674968226365777371ull, 3102508459032802366ull}}, {{1888638798501552239ull, 4098955289408159677ull, 15067082319811997522ull, 3878135573791002957ull}}, {{3486242258277164102ull, 7173533074307487702ull, 11722769459096192403ull, 2423834733619376848ull}}, {{13581174859701230935ull, 4355230324456971723ull, 14653461823870240504ull, 3029793417024221060ull}}, {{12364782556199150764ull, 5444037905571214654ull, 18316827279837800630ull, 3787241771280276325ull}}, {{3116303079197081324ull, 17237581746264172871ull, 13753860059112319345ull, 2367026107050172703ull}}, {{17730436904278515367ull, 7711919127548052376ull, 12580639055463011278ull, 2958782633812715879ull}}, {{3716302056638592592ull, 416526872580289663ull, 11114112800901376194ull, 3698478292265894849ull}}, {{9240217813040202226ull, 4872015313790068943ull, 28791472922278265ull, 2311548932666184281ull}}, {{6938586247872864879ull, 10701705160664974083ull, 4647675359580235735ull, 2889436165832730351ull}}, {{4061546791413693195ull, 8765445432403829700ull, 1197908181047906765ull, 3611795207290912939ull}}, {{5076933489267116493ull, 15568492808932175029ull, 15332443281592047168ull, 4514744009113641173ull}}, {{5478926440005641760ull, 9730308005582609393ull, 11888620060208723432ull, 2821715005696025733ull}}, {{11460344068434440104ull, 12162885006978261741ull, 1025717019978740578ull, 3527143757120032167ull}}, {{490372030260886418ull, 5980234221868051369ull, 15117204330255589435ull, 4408929696400040208ull}}, {{11835697564981523772ull, 1431803379453838153ull, 9448252706409743397ull, 2755581060250025130ull}}, {{959563900944741002ull, 6401440242744685596ull, 2586943846157403438ull, 3444476325312531413ull}}, {{1199454876180926253ull, 17225172340285632803ull, 7845365826124142201ull, 4305595406640664266ull}}, {{16890560362108936572ull, 3848203685037438645ull, 9515039659754976780ull, 2690997129150415166ull}}, {{7278142397354007003ull, 4810254606296798307ull, 2670427537838945167ull, 3363746411438018958ull}}, {{4485991978265120850ull, 1401132239443609980ull, 12561406459153457267ull, 4204683014297523697ull}}, {{12027117023270476339ull, 17016608714148113901ull, 933350009329828935ull, 2627926883935952311ull}}, {{1198838223805931712ull, 16659074874257754473ull, 15001745566944449881ull, 3284908604919940388ull}}, {{6110233798184802544ull, 6988785537540029379ull, 305437884971010736ull, 4106135756149925486ull}}, {{1513053114651807638ull, 4367990960962518362ull, 14025956733389045422ull, 2566334847593703428ull}}, {{11114688430169535356ull, 14683360738057923760ull, 17532445916736306777ull, 3207918559492129285ull}}, {{13893360537711919194ull, 4519142867290240988ull, 8080499340638219760ull, 4009898199365161607ull}}, {{17906722372924725305ull, 2824464292056400617ull, 11967841115539969206ull, 2506186374603226004ull}}, {{8548344910873742919ull, 12753952401925276580ull, 14959801394424961507ull, 3132732968254032505ull}}, {{10685431138592178648ull, 11330754483979207821ull, 4864693687749038172ull, 3915916210317540632ull}}, {{8984237470833805607ull, 16305093589341780696ull, 3040433554843148857ull, 2447447631448462895ull}}, {{11230296838542257009ull, 6546308931395062158ull, 17635599998836099784ull, 3059309539310578618ull}}, {{4814499011323045453ull, 8182886164243827698ull, 12821127961690348922ull, 3824136924138223273ull}}, {{7620747900504291312ull, 9725989871079780215ull, 1095675948415386220ull, 2390085577586389546ull}}, {{4914248857202976236ull, 12157487338849725269ull, 10592966972374008583ull, 2987606971982986932ull}}, {{10754497089931108199ull, 10585173155134768682ull, 13241208715467510729ull, 3734508714978733665ull}}, {{11333246699634330529ull, 18144948268027700186ull, 1358226419526112349ull, 2334067946861708541ull}}, {{4943186337688137353ull, 8846127279752461521ull, 6309469042835028341ull, 2917584933577135676ull}}, {{10790668940537559595ull, 15669345118117964805ull, 7886836303543785426ull, 3646981166971419595ull}}, {{18100022194099337398ull, 10363309360792680198ull, 5246859361002343879ull, 4558726458714274494ull}}, {{6700827852884697970ull, 13394597378136506980ull, 17114345155908628636ull, 2849204036696421558ull}}, {{8376034816105872462ull, 16743246722670633725ull, 12169559408031009987ull, 3561505045870526948ull}}, {{15081729538559728481ull, 16317372384910904252ull, 15211949260038762484ull, 4451881307338158685ull}}, {{202708924745054493ull, 974985703714539350ull, 11813311296737920505ull, 2782425817086349178ull}}, {{9476758192786093924ull, 5830418148070562091ull, 5543267084067624823ull, 3478032271357936473ull}}, {{7234261722555229501ull, 2676336666660814710ull, 11540769873511918933ull, 4347540339197420591ull}}, {{18356471631879182150ull, 3978553425876703145ull, 14130510198586031189ull, 2717212711998387869ull}}, {{9110531484566813976ull, 9584877800773266836ull, 3828079692950375274ull, 3396515889997984837ull}}, {{11388164355708517470ull, 2757725214111807737ull, 9396785634615356997ull, 4245644862497481046ull}}, {{200073694676741563ull, 4029421268033573788ull, 1261305003207210219ull, 2653528039060925654ull}}, {{250092118345926953ull, 425090566614579331ull, 10800003290863788582ull, 3316910048826157067ull}}, {{14147673203214572403ull, 9754735245122999971ull, 8888318095152347823ull, 4146137561032696334ull}}, {{6536452742795413800ull, 13014238555842956838ull, 943512791042829485ull, 2591335975645435209ull}}, {{17393937965349043058ull, 2432740139521532335ull, 5791077007230924761ull, 3239169969556794011ull}}, {{17130736438258915919ull, 7652611192829303323ull, 2627160240611268047ull, 4048962461945992514ull}}, {{8400867264698128497ull, 11700411023159396433ull, 6253661168809430433ull, 2530601538716245321ull}}, {{15112770099300048526ull, 790455723667081829ull, 12428762479439175946ull, 3163251923395306651ull}}, {{5055904568842896945ull, 10211441691438628095ull, 10924267080871582028ull, 3954064904244133314ull}}, {{10077469383167892447ull, 15605523094003918367ull, 11439352943972126671ull, 2471290565152583321ull}}, {{7985150710532477654ull, 14895217849077510055ull, 464133124682994627ull, 3089113206440729152ull}}, {{5369752369738209164ull, 14007336292919499665ull, 580166405853743284ull, 3861391508050911440ull}}, {{14885310277154850488ull, 17977957219929463098ull, 362604003658589552ull, 2413369692531819650ull}}, {{9383265809588787301ull, 4025702451202277257ull, 9676627041428012749ull, 3016712115664774562ull}}, {{16340768280413372031ull, 9643814082430234475ull, 2872411764930240128ull, 3770890144580968203ull}}, {{7907137166044663567ull, 6027383801518896547ull, 17936158417577257744ull, 2356806340363105126ull}}, {{5272235439128441555ull, 7534229751898620684ull, 13196825985116796372ull, 2946007925453881408ull}}, {{6590294298910551944ull, 9417787189873275855ull, 16496032481395995465ull, 3682509906817351760ull}}, {{3626181855210802025ull, 16383920005768982723ull, 2173296528035442715ull, 4603137383521689701ull}}, {{18407264724002608930ull, 7934106994391920249ull, 3664153339235845649ull, 2876960864701056063ull}}, {{9174022849721097450ull, 14529319761417288216ull, 18415249729326970773ull, 3596201080876320078ull}}, {{11467528562151371813ull, 4326591646489446558ull, 13795690124803937659ull, 4495251351095400098ull}}, {{2555519332917219479ull, 398276769842210147ull, 13233992346429848941ull, 2809532094434625061ull}}, {{17029457221428688061ull, 5109531980730150587ull, 2707432377755147464ull, 3511915118043281327ull}}, {{16675135508358472172ull, 6386914975912688234ull, 17219348527476098042ull, 4389893897554101658ull}}, {{15033645711151433012ull, 8603507878372818050ull, 15373778848099949180ull, 2743683685971313536ull}}, {{9568685102084515456ull, 10754384847966022563ull, 770479486415384859ull, 3429604607464141921ull}}, {{7349170359178256416ull, 8831295041530140300ull, 5574785376446618978ull, 4287005759330177401ull}}, {{13816603511341186068ull, 10131245419383725591ull, 15013455906347606621ull, 2679378599581360875ull}}, {{12659068370749094681ull, 17275742792657044893ull, 14155133864507120372ull, 3349223249476701094ull}}, {{1988777408154204640ull, 3147934417111754501ull, 8470545293779124658ull, 4186529061845876368ull}}, {{3548828889310071852ull, 6579145029122234467ull, 5294090808611952911ull, 2616580663653672730ull}}, {{18271094166919753527ull, 3612245267975405179ull, 15840985547619716947ull, 3270725829567090912ull}}, {{18227181690222304005ull, 18350364640251420186ull, 1354487860815094567ull, 4088407286958863641ull}}, {{16003674574816327907ull, 18386506927798219472ull, 12375769959077903864ull, 2555254554349289775ull}}, {{1557849144810858268ull, 4536389586038222725ull, 10858026430419991927ull, 3194068192936612219ull}}, {{6558997449440960738ull, 1058800964120390502ull, 8960847019597602005ull, 3992585241170765274ull}}, {{17934431461182764174ull, 2967593611788938015ull, 10212215405675889157ull, 2495365775731728296ull}}, {{17806353308051067313ull, 8321178033163560423ull, 12765269257094861446ull, 3119207219664660370ull}}, {{17646255616636446237ull, 1178100504599674721ull, 6733214534513801000ull, 3899009024580825463ull}}, {{4111380732756697042ull, 736312815374796701ull, 11125788111712207481ull, 2436880640363015914ull}}, {{9750911934373259207ull, 5532077037645883780ull, 4683863102785483543ull, 3046100800453769893ull}}, {{12188639917966574008ull, 2303410278629966821ull, 10466514896909242333ull, 3807626000567212366ull}}, {{9923742957942802707ull, 3745474433357423215ull, 1929885792140888554ull, 2379766250354507729ull}}, {{7792992679001115480ull, 13905215078551554827ull, 7024043258603498596ull, 2974707812943134661ull}}, {{5129554830324006446ull, 17381518848189443534ull, 13391740091681761149ull, 3718384766178918326ull}}, {{17041029824234667741ull, 13169292289332096160ull, 3758151538873712814ull, 2323990478861823954ull}}, {{2854543206583783060ull, 7238243324810344393ull, 13921061460446916826ull, 2904988098577279942ull}}, {{8179865026657116729ull, 18271176192867706299ull, 8177954788703870224ull, 3631235123221599928ull}}, {{5613145264894008007ull, 4392226167375081258ull, 10222443485879837781ull, 4539043904026999910ull}}, {{8119901808986142909ull, 5050984363823119738ull, 1777341160247510709ull, 2836902440016874944ull}}, {{926505224377902828ull, 10925416473206287577ull, 2221676450309388386ull, 3546128050021093680ull}}, {{5769817548899766439ull, 4433398554653083663ull, 2777095562886735483ull, 4432660062526367100ull}}, {{10523664995703435880ull, 465031087444483337ull, 10959056763658985485ull, 2770412539078979437ull}}, {{17766267263056682754ull, 5192974877732992075ull, 18310506973001119760ull, 3463015673848724296ull}}, {{17596148060393465539ull, 6491218597166240094ull, 4441389642541848084ull, 4328769592310905371ull}}, {{6385906519318528058ull, 13280383660083675867ull, 470025517374961100ull, 2705480995194315857ull}}, {{3370697130720772168ull, 16600479575104594834ull, 5199217915146089279ull, 3381851243992894821ull}}, {{13436743450255741018ull, 16138913450453355638ull, 11110708412359999503ull, 4227314054991118526ull}}, {{3786278637982450233ull, 17004349934174429130ull, 2332506739297611785ull, 2642071284369449079ull}}, {{13956220334332838599ull, 7420379362435872700ull, 16750691479404178444ull, 3302589105461811348ull}}, {{17445275417916048248ull, 9275474203044840875ull, 2491620275545671439ull, 4128236381827264186ull}}, {{8597454126983836203ull, 12714700404544107403ull, 6168948690643432553ull, 2580147738642040116ull}}, {{6135131640302407350ull, 2058317450397970542ull, 7711185863304290692ull, 3225184673302550145ull}}, {{16892286587232784995ull, 2572896812997463177ull, 14250668347557751269ull, 4031480841628187681ull}}, {{3640150089379408766ull, 3913903517337108438ull, 1989138689582512687ull, 2519675526017617301ull}}, {{13773559648579036766ull, 280693378243997643ull, 7098109380405528763ull, 3149594407522021626ull}}, {{12605263542296408053ull, 14185924778087160766ull, 18096008762361686761ull, 3936993009402527032ull}}, {{3266603695507867129ull, 1948673958663393623ull, 11310005476476054226ull, 2460620630876579395ull}}, {{17918312674666997623ull, 11659214485184017836ull, 9525820827167679878ull, 3075775788595724244ull}}, {{3951146769624195413ull, 5350646069625246488ull, 11907276033959599848ull, 3844719735744655305ull}}, {{2469466731015122133ull, 3344153793515779055ull, 524518493583668049ull, 2402949834840409566ull}}, {{16921891469051066379ull, 8791878260322111722ull, 9879020153834360869ull, 3003687293550511957ull}}, {{11928992299459057165ull, 15601533843830027557ull, 16960461210720338990ull, 3754609116938139946ull}}, {{9761463196375604680ull, 5139272633966379319ull, 15211974275127599773ull, 2346630698086337466ull}}, {{7590142977042117946ull, 11035776810885362053ull, 9791595807054723908ull, 2933288372607921833ull}}, {{14099364739730035337ull, 13794721013606702566ull, 16851180777245792789ull, 3666610465759902291ull}}, {{8400833887807768363ull, 3408343211726214496ull, 16452289953129853083ull, 4583263082199877864ull}}, {{5250521179879855227ull, 18271115571824741724ull, 10282681220706158176ull, 2864539426374923665ull}}, {{6563151474849819034ull, 4392150391071375539ull, 17465037544310085625ull, 3580674282968654581ull}}, {{3592253325134885888ull, 10101874007266607328ull, 7996238875105443319ull, 4475842853710818227ull}}, {{2245158328209303680ull, 13231200282182711436ull, 2691806287727208122ull, 2797401783569261392ull}}, {{2806447910261629600ull, 7315628315873613487ull, 3364757859659010153ull, 3496752229461576740ull}}, {{17343117943109200712ull, 13756221413269404762ull, 4205947324573762691ull, 4370940286826970925ull}}, {{15451134732870638349ull, 6291795374079684024ull, 4934560087072295634ull, 2731837679266856828ull}}, {{867174342378746320ull, 17088116254454380839ull, 6168200108840369542ull, 3414797099083571035ull}}, {{14919025983255596612ull, 12136773281213200240ull, 3098564117623074024ull, 4268496373854463794ull}}, {{9324391239534747883ull, 7585483300758250150ull, 6548288591941809169ull, 2667810233659039871ull}}, {{2432117012563659045ull, 14093540144375200592ull, 3573674721499873557ull, 3334762792073799839ull}}, {{3040146265704573807ull, 3781867125186837028ull, 18302151457157005659ull, 4168453490092249798ull}}, {{11123463452920134437ull, 57823944028079190ull, 6827158642295740633ull, 2605283431307656124ull}}, {{4680957279295392239ull, 4683965948462486892ull, 8533948302869675791ull, 3256604289134570155ull}}, {{5851196599119240298ull, 1243271417150720711ull, 6055749360159706835ull, 4070755361418212694ull}}, {{10574526902090607043ull, 16917945700215058108ull, 17619901405381980483ull, 2544222100886382933ull}}, {{13218158627613258803ull, 16535746106841434731ull, 8189818701445311892ull, 3180277626107978667ull}}, {{11911012266089185600ull, 2222938559842241798ull, 5625587358379251962ull, 3975347032634973334ull}}, {{2832696647878353096ull, 6001022618328789028ull, 17351050154269196188ull, 2484591895396858333ull}}, {{3540870809847941370ull, 7501278272910986285ull, 7853754637554331523ull, 3105739869246072917ull}}, {{9037774530737314616ull, 4764911822711344952ull, 14428879315370302308ull, 3882174836557591146ull}}, {{5648609081710821635ull, 12201441926049366403ull, 13629735590533826846ull, 2426359272848494466ull}}, {{2449075333711139140ull, 6028430370706932196ull, 7813797451312507750ull, 3032949091060618083ull}}, {{3061344167138923925ull, 16758910000238441053ull, 5155560795713246783ull, 3791186363825772604ull}}, {{4219183113675521405ull, 17391847777790107514ull, 12445597534175555047ull, 2369491477391107877ull}}, {{14497350928949177564ull, 17128123703810246488ull, 1721938862437280097ull, 2961864346738884847ull}}, {{18121688661186471955ull, 7575096574480644398ull, 15987481633328763834ull, 3702330433423606058ull}}, {{6714369394814157068ull, 9346121377477790653ull, 14603862039257865300ull, 2313956520889753786ull}}, {{13004647761945084239ull, 11682651721847238316ull, 9031455512217555817ull, 2892445651112192233ull}}, {{16255809702431355299ull, 768256597026884183ull, 15901005408699332676ull, 3615557063890240291ull}}, {{15708076109611806220ull, 960320746283605229ull, 15264570742446777941ull, 4519446329862800364ull}}, {{12123390577721072839ull, 2906043475640947220ull, 316984677174460405ull, 2824653956164250228ull}}, {{15154238222151341049ull, 8244240362978571929ull, 396230846468075506ull, 3530817445205312785ull}}, {{5107739722407012599ull, 1081928416868439104ull, 5106974576512482287ull, 4413521806506640981ull}}, {{3192337326504382875ull, 7593734288183856296ull, 5497702119533995381ull, 2758451129066650613ull}}, {{3990421658130478593ull, 14103853878657208274ull, 11483813667844882130ull, 3448063911333313266ull}}, {{14211399109517874050ull, 8406445311466734534ull, 5131395047951326855ull, 4310079889166641583ull}}, {{4270438425021283377ull, 12171557347307790940ull, 10124650932610661140ull, 2693799930729150989ull}}, {{5338048031276604221ull, 15214446684134738675ull, 17267499684190714329ull, 3367249913411438736ull}}, {{2060874020668367373ull, 5183000299886259632ull, 3137630531528841296ull, 4209062391764298421ull}}, {{1288046262917729608ull, 3239375187428912270ull, 4266862091419219762ull, 2630663994852686513ull}}, {{10833429865501937818ull, 13272591021140916145ull, 9945263632701412606ull, 3288329993565858141ull}}, {{18153473350304810176ull, 7367366739571369373ull, 17043265559304153662ull, 4110412491957322676ull}}, {{13651763853154200312ull, 18439662267514269570ull, 1428668937710320230ull, 2569007807473326673ull}}, {{7841332779587974582ull, 13826205797538061155ull, 6397522190565288192ull, 3211259759341658341ull}}, {{5189979956057580324ull, 17282757246922576444ull, 12608588756633998144ull, 4014074699177072926ull}}, {{12467109509390763511ull, 10801723279326610277ull, 3268681954468860936ull, 2508796686985670579ull}}, {{1748828831456290676ull, 13502154099158262847ull, 17920910498368239882ull, 3135995858732088223ull}}, {{16021094094602527057ull, 7654320587093052750ull, 17789452104532911949ull, 3919994823415110279ull}}, {{5401497790699191507ull, 7089793376146851921ull, 18035936592974151824ull, 2449996764634443924ull}}, {{11363558256801377287ull, 8862241720183564901ull, 4098176667508138164ull, 3062495955793054906ull}}, {{369389765719557897ull, 11077802150229456127ull, 14346092871239948513ull, 3828119944741318632ull}}, {{7148397631215805542ull, 6097316252328223ull, 8966308044524967821ull, 2392574965463324145ull}}, {{4323811020592369023ull, 4619307663742798183ull, 15819571074083597680ull, 2990718706829155181ull}}, {{793077757313073375ull, 5774134579678497729ull, 5939405787322333388ull, 3738398383536443977ull}}, {{12024888644389140619ull, 12832206149153836888ull, 15241343663144928127ull, 2336498989710277485ull}}, {{15031110805486425774ull, 11428571668014908206ull, 5216621523648996447ull, 2920623737137846857ull}}, {{9565516470003256410ull, 9674028566591247354ull, 11132462922988633463ull, 3650779671422308571ull}}, {{2733523550649294704ull, 7480849689811671289ull, 9303892635308403925ull, 4563474589277885714ull}}, {{13237667265224278950ull, 6981374065345988507ull, 10426618915495140357ull, 2852171618298678571ull}}, {{11935398063102960784ull, 13338403600109873538ull, 8421587625941537542ull, 3565214522873348214ull}}, {{5695875542023925171ull, 7449632463282566115ull, 1303612495572146120ull, 4456518153591685268ull}}, {{1254079204551259280ull, 4656020289551603822ull, 10038129846587367133ull, 2785323845994803292ull}}, {{10790971042543849908ull, 10431711380366892681ull, 12547662308234208916ull, 3481654807493504115ull}}, {{18100399821607200289ull, 13039639225458615851ull, 11072891866865373241ull, 4352068509366880144ull}}, {{9006906879290806229ull, 1232245488270553051ull, 6920557416790858276ull, 2720042818354300090ull}}, {{6646947580686119882ull, 1540306860338191314ull, 17874068807843348653ull, 3400053522942875112ull}}, {{17532056512712425660ull, 6537069593850127046ull, 3895841936094634200ull, 4250066903678593891ull}}, {{6345849302017878134ull, 4085668496156329404ull, 129058200845452423ull, 2656291814799121182ull}}, {{7932311627522347667ull, 495399601768023851ull, 9384694787911591337ull, 3320364768498901477ull}}, {{5303703515975546680ull, 5230935520637417718ull, 16342554503316877075ull, 4150455960623626846ull}}, {{17149872752766880387ull, 963491691184692121ull, 5602410546145660268ull, 2594034975389766779ull}}, {{7602282885676436772ull, 1204364613980865152ull, 2391327164254687431ull, 3242543719237208474ull}}, {{9502853607095545965ull, 15340513822758245152ull, 12212530992173135096ull, 4053179649046510592ull}}, {{5939283504434716228ull, 9587821139223903220ull, 7632831870108209435ull, 2533237280654069120ull}}, {{7424104380543395285ull, 7373090405602491121ull, 9541039837635261794ull, 3166546600817586400ull}}, {{13891816494106632010ull, 18439735043857889709ull, 11926299797044077242ull, 3958183251021983000ull}}, {{10988228318030338959ull, 16136520420838568972ull, 7453937373152548276ull, 2473864531888739375ull}}, {{13735285397537923698ull, 1723906452338659599ull, 4705735698013297442ull, 3092330664860924219ull}}, {{12557420728495016718ull, 11378255102278100307ull, 1270483604089233898ull, 3865413331076155274ull}}, {{5542544946095691497ull, 11723095457351200596ull, 5405738270983159090ull, 2415883331922597046ull}}, {{6928181182619614371ull, 5430497284834224937ull, 15980544875583724671ull, 3019854164903246307ull}}, {{13271912496701905868ull, 2176435587615393267ull, 15363995076052267935ull, 3774817706129057884ull}}, {{5989102301224997216ull, 8277801269900702648ull, 379124885677891651ull, 2359261066330661178ull}}, {{7486377876531246520ull, 5735565568948490406ull, 9697278143952140372ull, 2949076332913326472ull}}, {{134600308809282341ull, 7169456961185613008ull, 12121597679940175465ull, 3686345416141658090ull}}, {{168250386011602926ull, 13573507219909404164ull, 5928625063070443523ull, 4607931770177072613ull}}, {{9328528528112027637ull, 6177599003229683650ull, 6011233673632721154ull, 2879957356360670383ull}}, {{2437288623285258738ull, 16945370790891880371ull, 2902356073613513538ull, 3599946695450837979ull}}, {{16881668834388737135ull, 11958341451760074655ull, 17463003147299055635ull, 4499933369313547473ull}}, {{17468572049134042565ull, 5168120398136352707ull, 3996847939420827916ull, 2812458355820967171ull}}, {{17224029042990165303ull, 6460150497670440884ull, 384373905848646991ull, 3515572944776208964ull}}, {{3083292230028155012ull, 3463502103660663202ull, 480467382310808739ull, 4394466180970261205ull}}, {{6538743662194984787ull, 18305589879283772165ull, 2606135123157949413ull, 2746541363106413253ull}}, {{12785115596171118887ull, 9046929293822551494ull, 7869354922374824671ull, 3433176703883016566ull}}, {{6758022458359122801ull, 6696975598850801464ull, 613321616113755031ull, 4291470879853770708ull}}, {{4223764036474451751ull, 11103138776922832771ull, 9606698046925872702ull, 2682169299908606692ull}}, {{668019027165676785ull, 4655551434298765156ull, 12008372558657340878ull, 3352711624885758365ull}}, {{835023783957095981ull, 15042811329728232253ull, 1175407643039512385ull, 4190889531107197957ull}}, {{2827732874186878940ull, 2484228053439063302ull, 3040472786113389193ull, 2619305956941998723ull}}, {{12758038129588374483ull, 7716971085226217031ull, 17635649037923900203ull, 3274132446177498403ull}}, {{11335861643558080200ull, 5034527838105383385ull, 17432875278977487350ull, 4092665557721873004ull}}, {{167384499582718269ull, 16981637954098028328ull, 1672175012506153785ull, 2557915973576170628ull}}, {{209230624478397836ull, 7391989387340371698ull, 2090218765632692232ull, 3197394966970213285ull}}, {{9484910317452773103ull, 9239986734175464622ull, 7224459475468253194ull, 3996743708712766606ull}}, {{1316382929980595285ull, 10386677727287053293ull, 18350345227449821958ull, 2497964817945479128ull}}, {{6257164680903132011ull, 3759975122254040808ull, 4491187460602725832ull, 3122456022431848911ull}}, {{7821455851128915013ull, 4699968902817551010ull, 1002298307326019386ull, 3903070028039811139ull}}, {{9500095925382959787ull, 7549166582688357285ull, 16767337506574619780ull, 2439418767524881961ull}}, {{16486805925156087638ull, 9436458228360446606ull, 7124113827936111013ull, 3049273459406102452ull}}, {{11385135369590333740ull, 16407258803877946162ull, 8905142284920138766ull, 3811591824257628065ull}}, {{11727395624421346491ull, 5642850733996328447ull, 17094928974143556489ull, 2382244890161017540ull}}, {{10047558512099295210ull, 11665249435922798463ull, 2921917143969893995ull, 2977806112701271926ull}}, {{7947762121696731109ull, 9969875776476110175ull, 12875768466817143302ull, 3722257640876589907ull}}, {{11884880353701538799ull, 1619486341870180955ull, 5741512282547020612ull, 2326411025547868692ull}}, {{10244414423699535595ull, 2024357927337726194ull, 7176890353183775765ull, 2908013781934835865ull}}, {{3582145992769643685ull, 7142133427599545647ull, 13582798959907107610ull, 3635017227418544831ull}}, {{18312740546244218319ull, 18151038821354207866ull, 12366812681456496608ull, 4543771534273181039ull}}, {{16057148859830024353ull, 11344399263346379916ull, 14646786953551392236ull, 2839857208920738149ull}}, {{1624692001077978825ull, 14180499079182974896ull, 4473425636657076583ull, 3549821511150922687ull}}, {{2030865001347473532ull, 13113937830551330716ull, 980096027393957825ull, 4437276888938653359ull}}, {{10492662662696946765ull, 1278682116453499841ull, 7530089044762305497ull, 2773298055586658349ull}}, {{17727514346798571361ull, 6210038663994262705ull, 14024297324380269775ull, 3466622569483322936ull}}, {{8324334878216050489ull, 3150862311565440478ull, 17530371655475337219ull, 4333278211854153670ull}}, {{591023280457643652ull, 18110190009224257963ull, 6344796266244697857ull, 2708298882408846044ull}}, {{14573837155854218276ull, 8802679456248158741ull, 7930995332805872322ull, 3385373603011057555ull}}, {{4382238389535609133ull, 1779977283455422619ull, 5302058147579952499ull, 4231717003763821944ull}}, {{433055984246061757ull, 17253386866655496801ull, 3313786342237470311ull, 2644823127352388715ull}}, {{5153005998734965100ull, 16955047564891983097ull, 17977290983079001601ull, 3306028909190485893ull}}, {{11052943516846094278ull, 7358751400832815159ull, 8636555673566588290ull, 4132536136488107367ull}}, {{13825618725669890780ull, 9210905643947897378ull, 12315376323620199537ull, 2582835085305067104ull}}, {{8058651370232587667ull, 16125318073362259627ull, 15394220404525249421ull, 3228543856631333880ull}}, {{5461628194363346680ull, 6321589536420660822ull, 796031431947010161ull, 4035679820789167351ull}}, {{17248575676759255387ull, 15480208506331382773ull, 7415048672607963206ull, 2522299887993229594ull}}, {{7725661540666905522ull, 10126888596059452659ull, 45438803905178200ull, 3152874859991536993ull}}, {{5045390907406243998ull, 12658610745074315824ull, 4668484523308860654ull, 3941093574989421241ull}}, {{3153369317128902499ull, 3299945697244059486ull, 14447017873136507669ull, 2463183484368388275ull}}, {{13165083683265903932ull, 8736618139982462261ull, 13447086322993246682ull, 3078979355460485344ull}}, {{2621296548800216202ull, 1697400638123302019ull, 16808857903741558353ull, 3848724194325606680ull}}, {{17779211407495992791ull, 12590090444895533521ull, 10505536189838473970ull, 2405452621453504175ull}}, {{8388956204087827276ull, 6514241019264641094ull, 8520234218870704559ull, 3006815776816880219ull}}, {{1262823218255008287ull, 3531115255653413464ull, 6038606755160992795ull, 3758519721021100274ull}}, {{789264511409380180ull, 18347848099279241079ull, 8385815240403008400ull, 2349074825638187671ull}}, {{14821638694543888936ull, 4488066050389499732ull, 5870583032076372597ull, 2936343532047734589ull}}, {{80304294470309554ull, 10221768581414262570ull, 11949914808522853650ull, 3670429415059668236ull}}, {{9323752404942662751ull, 3553838689913052404ull, 14937393510653567063ull, 4588036768824585295ull}}, {{15050717289943940027ull, 9138678208836739608ull, 16253399971799561270ull, 2867522980515365809ull}}, {{366652538720373418ull, 2199975724191148703ull, 6481691909467287876ull, 3584403725644207262ull}}, {{14293373728682630485ull, 2749969655238935878ull, 17325486923688885653ull, 4480504657055259077ull}}, {{4321672561999256149ull, 4024574043738028876ull, 13134272336519247485ull, 2800315410659536923ull}}, {{5402090702499070186ull, 9642403573099923999ull, 11806154402221671452ull, 3500394263324421154ull}}, {{2140927359696449829ull, 12053004466374904999ull, 5534320965922313507ull, 4375492829155526443ull}}, {{8255608627451362999ull, 5227284782270621672ull, 1153107594487751990ull, 2734683018222204027ull}}, {{10319510784314203749ull, 15757478014693052898ull, 15276442548391853699ull, 3418353772777755033ull}}, {{3676016443537978878ull, 15085161499938928219ull, 5260495130207653412ull, 4272942215972193792ull}}, {{18438411341707094463ull, 204853900607054328ull, 3287809456379783383ull, 2670588884982621120ull}}, {{4601270103424316462ull, 14091125431040981623ull, 4109761820474729228ull, 3338236106228276400ull}}, {{1139901610853007674ull, 17613906788801227029ull, 5137202275593411535ull, 4172795132785345500ull}}, {{3018281515996823748ull, 17926220770641848749ull, 12434123459100658017ull, 2607996957990840937ull}}, {{8384537913423417589ull, 8572717908020147224ull, 1707596268593658810ull, 3259996197488551172ull}}, {{10480672391779271987ull, 1492525348170408222ull, 2134495335742073513ull, 4074995246860688965ull}}, {{1938734226434657088ull, 12462043388674974899ull, 3639902594052489897ull, 2546872029287930603ull}}, {{16258475838325485072ull, 1742496180561554911ull, 18384936297847776084ull, 3183590036609913253ull}}, {{15711408779479468435ull, 2178120225701943639ull, 9146112317027556393ull, 3979487545762391567ull}}, {{16737159514815749628ull, 12890540187132184534ull, 12633849225783304601ull, 2487179716101494729ull}}, {{11698077356664911227ull, 2278117178633066956ull, 1957253476946967040ull, 3108974645126868412ull}}, {{14622596695831139034ull, 2847646473291333695ull, 2446566846183708800ull, 3886218306408585515ull}}, {{16056651962535543752ull, 1779779045807083559ull, 17670005343360675664ull, 2428886441505365946ull}}, {{15459128934742041786ull, 2224723807258854449ull, 12864134642346068772ull, 3036108051881707433ull}}, {{5488853113145388521ull, 2780904759073568062ull, 2245110247650422253ull, 3795135064852134292ull}}, {{17265591250998031538ull, 4043908483634673990ull, 10626565941636289716ull, 2371959415532583932ull}}, {{12358617026892763614ull, 5054885604543342488ull, 13283207427045362145ull, 2964949269415729915ull}}, {{15448271283615954517ull, 10930293024106566014ull, 11992323265379314777ull, 3706186586769662394ull}}, {{5043483533832583670ull, 18360648186135073519ull, 12106888059289459639ull, 2316366616731038996ull}}, {{1692668398863341683ull, 18339124214241453995ull, 15133610074111824549ull, 2895458270913798745ull}}, {{15950893553861340815ull, 9088847212519653781ull, 5081954537357616975ull, 3619322838642248432ull}}, {{6103558887044512307ull, 6749372997222179323ull, 6352443171697021219ull, 4524153548302810540ull}}, {{1508881295189126240ull, 1912515114050168125ull, 13193649019165414070ull, 2827595967689256587ull}}, {{6497787637413795704ull, 11614015929417485964ull, 11880375255529379683ull, 3534494959611570734ull}}, {{8122234546767244630ull, 9905833893344469551ull, 5627097032556948796ull, 4418118699514463418ull}}, {{11993925619370609750ull, 15414518220195069277ull, 8128621663775480901ull, 2761324187196539636ull}}, {{1157348968931098475ull, 5433089719961672885ull, 10160777079719351127ull, 3451655233995674545ull}}, {{6058372229591260998ull, 2179676131524703202ull, 17312657368076576813ull, 4314569042494593181ull}}, {{8398168661921926028ull, 3668140591416633453ull, 13126253864261554460ull, 2696605651559120738ull}}, {{15109396845829795439ull, 4585175739270791816ull, 7184445293472167267ull, 3370757064448900923ull}}, {{440001983577692682ull, 1119783655661101867ull, 4368870598412821180ull, 4213446330561126154ull}}, {{16415902304231915591ull, 9923236821642964474ull, 7342230142435401141ull, 2633403956600703846ull}}, {{11296505843435118680ull, 17015732045481093497ull, 18401159714899027234ull, 3291754945750879807ull}}, {{285574249011734638ull, 12046293019996591064ull, 18389763625196396139ull, 4114693682188599759ull}}, {{178483905632334149ull, 5223090128284175463ull, 18411131293388829443ull, 2571683551367874849ull}}, {{14058162937322581398ull, 1917176641927831424ull, 9178856061453873092ull, 3214604439209843562ull}}, {{17572703671653226747ull, 2396470802409789280ull, 2250198039962565557ull, 4018255549012304453ull}}, {{10982939794783266717ull, 3803637260719812252ull, 3712216784190297425ull, 2511409718132690283ull}}, {{13728674743479083397ull, 9366232594327153219ull, 28584961810483877ull, 3139262147665862854ull}}, {{12549157410921466342ull, 16319476761336329428ull, 9259103239117880654ull, 3924077684582328567ull}}, {{17066595418680692272ull, 5587986957407817988ull, 12704468552089757265ull, 2452548552863955354ull}}, {{2886500199641313723ull, 11596669715187160390ull, 6657213653257420773ull, 3065685691079944193ull}}, {{12831497286406417962ull, 660779088701786775ull, 12933203084999163871ull, 3832107113849930241ull}}, {{14937214831645093083ull, 7330515958079698590ull, 1165722900483395563ull, 2395066946156206401ull}}, {{9448146502701590545ull, 4551458929172235334ull, 6068839644031632358ull, 2993833682695258001ull}}, {{2586811091522212373ull, 14912695698320069976ull, 12197735573466928351ull, 3742292103369072501ull}}, {{1616756932201382733ull, 16237963839091125591ull, 9929427742630524171ull, 2338932564605670313ull}}, {{15856004220533892129ull, 15685768780436519084ull, 17023470696715543118ull, 2923665705757087891ull}}, {{1373261201957813545ull, 10383838938690873048ull, 16667652352467040994ull, 3654582132196359864ull}}, {{1716576502447266931ull, 3756426636508815502ull, 2387821366874249627ull, 4568227665245449831ull}}, {{14907918369311705544ull, 41923638604315736ull, 8409917381937487873ull, 2855142290778406144ull}}, {{188153887930080314ull, 4664090566682782575ull, 10512396727421859841ull, 3568927863473007680ull}}, {{14070250415194764104ull, 10441799226780866122ull, 13140495909277324801ull, 4461159829341259600ull}}, {{13405592527924115469ull, 18055339562806511086ull, 8212809943298328000ull, 2788224893338287250ull}}, {{7533618623050368528ull, 4122430379798587242ull, 1042640392268134193ull, 3485281116672859063ull}}, {{193651241958184852ull, 9764723993175621957ull, 15138358545617331453ull, 4356601395841073828ull}}, {{2426875035437559485ull, 8408795504948457675ull, 238102054156056350ull, 2722875872400671143ull}}, {{16868651849579113068ull, 1287622344330796285ull, 14132685622977234150ull, 3403594840500838928ull}}, {{7250756756691727623ull, 10832899967268271165ull, 17665857028721542687ull, 4254493550626048660ull}}, {{6837565982146023717ull, 13688091507183751334ull, 1817788606096188371ull, 2659058469141280413ull}}, {{17770329514537305454ull, 12498428365552301263ull, 6883921776047623368ull, 3323823086426600516ull}}, {{17601225874744243913ull, 15623035456940376579ull, 8604902220059529210ull, 4154778858033250645ull}}, {{8694923162501458494ull, 14376083179015123266ull, 7683906896750899708ull, 2596736786270781653ull}}, {{1645281916272047309ull, 17970103973768904083ull, 14216569639366012539ull, 3245920982838477066ull}}, {{15891660450622222848ull, 17850943948783742199ull, 8547340012352739866ull, 4057401228548096333ull}}, {{16849816809279971136ull, 15768525986417226778ull, 7647930516934156368ull, 2535875767842560208ull}}, {{11838898974745188112ull, 1263913409311981857ull, 9559913146167695461ull, 3169844709803200260ull}}, {{963565663149321428ull, 6191577780067365226ull, 11949891432709619326ull, 3962305887254000325ull}}, {{5213914557895713797ull, 17704794167824266978ull, 9774525154657206030ull, 2476441179533750203ull}}, {{15740765234224418054ull, 12907620672925557914ull, 7606470424894119634ull, 3095551474417187754ull}}, {{10452584505925746759ull, 6911153804302171585ull, 284715994262873735ull, 3869439343021484693ull}}, {{18062080362272061485ull, 11237000155329939096ull, 2483790505627990036ull, 2418399589388427933ull}}, {{4130856379130525240ull, 14046250194162423871ull, 7716424150462375449ull, 3022999486735534916ull}}, {{551884455485768646ull, 3722754687420866127ull, 9645530188077969312ull, 3778749358419418645ull}}, {{7262456812319687260ull, 2326721679638041329ull, 8334299376762424772ull, 2361718349012136653ull}}, {{13689757033826996978ull, 2908402099547551661ull, 15029560239380418869ull, 2952147936265170816ull}}, {{3277138237001582511ull, 8247188642861827481ull, 340206225515971970ull, 3690184920331463521ull}}, {{13577426444194458830ull, 9766178920216030079ull, 11741843937015952241ull, 2306365575207164700ull}}, {{12360097036815685633ull, 16819409668697425503ull, 14677304921269940301ull, 2882956969008955875ull}}, {{10838435277592219137ull, 7189204030589618167ull, 13734945133160037473ull, 3603696211261194844ull}}, {{8936358078562886017ull, 13598191056664410613ull, 17168681416450046841ull, 4504620264076493555ull}}, {{7891066808315497713ull, 1581340382774174777ull, 8424582876067585324ull, 2815387665047808472ull}}, {{14475519528821760045ull, 1976675478467718471ull, 10530728595084481655ull, 3519234581309760590ull}}, {{13482713392599812152ull, 16305902403366811801ull, 3940038707000826260ull, 4399043226637200738ull}}, {{1509166842733800739ull, 967816965249481568ull, 7074210210302904317ull, 2749402016648250461ull}}, {{1886458553417250924ull, 5821457224989239864ull, 13454448781306018300ull, 3436752520810313076ull}}, {{2358073191771563655ull, 7276821531236549830ull, 16818060976632522875ull, 4295940651012891345ull}}, {{15308853800139390996ull, 2242170447809149691ull, 3593759082754244941ull, 2684962906883057091ull}}, {{14524381231746850841ull, 7414399078188825018ull, 18327256908724969888ull, 3356203633603821363ull}}, {{8932104502828787743ull, 9267998847736031273ull, 18297385117478824456ull, 4195254542004776704ull}}, {{17111780360336462100ull, 5792499279835019545ull, 11435865698424265285ull, 2622034088752985440ull}}, {{7554667395138413913ull, 11852310118221162336ull, 14294832123030331606ull, 3277542610941231800ull}}, {{9443334243923017391ull, 5592015610921677112ull, 17868540153787914508ull, 4096928263676539750ull}}, {{5902083902451885869ull, 12718381793680824003ull, 6556151577690058663ull, 2560580164797837344ull}}, {{2765918859637469433ull, 11286291223673642100ull, 8195189472112573329ull, 3200725205997296680ull}}, {{3457398574546836791ull, 272805974309888913ull, 10243986840140716662ull, 4000906507496620850ull}}, {{13690089155160242754ull, 14005561789225844282ull, 11014177793515335817ull, 2500566567185388031ull}}, {{7889239407095527635ull, 3671894181250141641ull, 9156036223466781868ull, 3125708208981735039ull}}, {{14473235277296797447ull, 4589867726562677051ull, 6833359260906089431ull, 3907135261227168799ull}}, {{6739929039096804453ull, 9786196356742755013ull, 11188378565707387750ull, 2441959538266980499ull}}, {{13036597317298393470ull, 3009373409073667958ull, 9373787188706846784ull, 3052449422833725624ull}}, {{7072374609768216029ull, 3761716761342084948ull, 11717233985883558480ull, 3815561778542157030ull}}, {{13643606167959910826ull, 2351072975838803092ull, 2711585222749836146ull, 2384726111588848144ull}}, {{17054507709949888533ull, 12162213256653279673ull, 3389481528437295182ull, 2980907639486060180ull}}, {{7483076582155196954ull, 5979394533961823784ull, 4236851910546618978ull, 3726134549357575225ull}}, {{4676922863846998096ull, 8348807602153527769ull, 14177247490160106621ull, 2328834093348484515ull}}, {{10457839598236135524ull, 15047695521119297615ull, 13109873344272745372ull, 2911042616685605644ull}}, {{8460613479367781501ull, 362875327689570403ull, 16387341680340931716ull, 3638803270857007055ull}}, {{5964080830782338973ull, 453594159611963004ull, 15872491081998776741ull, 4548504088571258819ull}}, {{12950922556093737666ull, 2589339358971170829ull, 7614463917035541511ull, 2842815055357036762ull}}, {{2353595139835008371ull, 17071732253996127249ull, 294707859439651080ull, 3553518819196295953ull}}, {{7553679943221148367ull, 2892921243785607445ull, 4980070842726951755ull, 4441898523995369941ull}}, {{7026892973726911682ull, 17948976841861862317ull, 5418387285918038798ull, 2776186577497106213ull}}, {{13395302235586027506ull, 13212849015472552088ull, 11384670125824936402ull, 3470233221871382766ull}}, {{16744127794482534382ull, 7292689232485914302ull, 5007465620426394695ull, 4337791527339228458ull}}, {{5853393853124196085ull, 11475459797944778295ull, 7741352031193884588ull, 2711119704587017786ull}}, {{2705056297977857202ull, 14344324747430972869ull, 453318002137579927ull, 3388899630733772233ull}}, {{7993006390899709407ull, 13318719915861328182ull, 5178333521099362813ull, 4236124538417215291ull}}, {{383942975884930475ull, 10630042956627024066ull, 930615441473407806ull, 2647577836510759557ull}}, {{9703300756710938902ull, 4064181658929004274ull, 5774955320269147662ull, 3309472295638449446ull}}, {{2905753909033897819ull, 14303599110516031151ull, 16442066187191210385ull, 4136840369548061807ull}}, {{8733625220787267993ull, 2022220416431437613ull, 17193820394635588347ull, 2585525230967538629ull}}, {{15528717544411472896ull, 16362833575821460728ull, 7657217438012321721ull, 3231906538709423287ull}}, {{964152856804789503ull, 6618483914494662199ull, 4959835779088014248ull, 4039883173386779109ull}}, {{7520124563144075296ull, 4136552446559163874ull, 5405740371143702857ull, 2524926983366736943ull}}, {{176783667075318312ull, 9782376576626342747ull, 2145489445502240667ull, 3156158729208421179ull}}, {{14056037639126311601ull, 7616284702355540529ull, 16516919862159964546ull, 3945198411510526473ull}}, {{1867494496812862895ull, 9371863957399600735ull, 3405545886208895985ull, 2465749007194079046ull}}, {{16169426176298242331ull, 16326515965176888822ull, 13480304394615895789ull, 3082186258992598807ull}}, {{10988410683518027105ull, 6573086901188947316ull, 12238694474842481833ull, 3852732823740748509ull}}, {{16091128714053542749ull, 15637394359311561832ull, 9955027055990245097ull, 2407958014837967818ull}}, {{1667166818857376820ull, 5711684893857288579ull, 3220411783133030564ull, 3009947518547459773ull}}, {{15919016578853884737ull, 7139606117321610723ull, 8637200747343676109ull, 3762434398184324716ull}}, {{7643542352569984009ull, 6768096832539700654ull, 14621622503944573376ull, 2351521498865202947ull}}, {{331055903857704203ull, 8460121040674625818ull, 13665342111503328816ull, 2939401873581503684ull}}, {{9637191916676906061ull, 10575151300843282272ull, 17081677639379161020ull, 3674252341976879605ull}}, {{12046489895846132577ull, 13218939126054102840ull, 7517038993941787563ull, 4592815427471099507ull}}, {{7529056184903832861ull, 5955993944570120323ull, 2392306361999923275ull, 2870509642169437192ull}}, {{4799634212702403172ull, 2833306412285262500ull, 2990382952499904094ull, 3588137052711796490ull}}, {{5999542765878003964ull, 12765005052211353933ull, 12961350727479655925ull, 4485171315889745612ull}}, {{6055557237887446430ull, 10283971166845790160ull, 17324216241529560761ull, 2803232072431091007ull}}, {{7569446547359308037ull, 17466649976984625604ull, 17043584283484563047ull, 3504040090538863759ull}}, {{9461808184199135046ull, 17221626452803394101ull, 16692794335928315905ull, 4380050113173579699ull}}, {{8219473124338153356ull, 3845987505361039457ull, 8127153450741503489ull, 2737531320733487312ull}}, {{14886027423850079599ull, 9419170400128687225ull, 10158941813426879361ull, 3421914150916859140ull}}, {{4772476224530435787ull, 16385649018588246936ull, 12698677266783599201ull, 4277392688646073925ull}}, {{2982797640331522367ull, 3323501608976572479ull, 10242516300953443453ull, 2673370430403796203ull}}, {{17563555105696566671ull, 8766063029648103502ull, 8191459357764416412ull, 3341713038004745254ull}}, {{12731071845265932530ull, 10957578787060129378ull, 1015952160350744707ull, 4177141297505931568ull}}, {{12568605921718595735ull, 4542643732698886909ull, 634970100219215442ull, 2610713310941207230ull}}, {{1875699346866080957ull, 14901676702728384445ull, 10017084662128795110ull, 3263391638676509037ull}}, {{6956310202009989100ull, 9403723841555704748ull, 17133041846088381792ull, 4079239548345636296ull}}, {{13571065913111018996ull, 5877327400972315467ull, 10708151153805238620ull, 2549524717716022685ull}}, {{12352146372961385841ull, 7346659251215394334ull, 17996874960683936179ull, 3186905897145028356ull}}, {{6216810929346956493ull, 4571638045591855014ull, 4049349627145368608ull, 3983632371431285446ull}}, {{17720564886124011520ull, 2857273778494909383ull, 16365901572248019092ull, 2489770232144553403ull}}, {{17539020089227626496ull, 3571592223118636729ull, 15845690946882635961ull, 3112212790180691754ull}}, {{8088717056252369408ull, 9076176297325683816ull, 10583741646748519143ull, 3890265987725864693ull}}, {{5055448160157730880ull, 12590139213469634241ull, 8920681538431518416ull, 2431416242328665433ull}}, {{10930996218624551504ull, 15737674016837042801ull, 15762537941466785924ull, 3039270302910831791ull}}, {{18275431291708077284ull, 1225348447336751885ull, 15091486408406094502ull, 3799087878638539739ull}}, {{13727987566531242255ull, 14600900834867633640ull, 7126335996040115111ull, 2374429924149087337ull}}, {{17159984458164052818ull, 13639440025157154146ull, 13519606013477531793ull, 2968037405186359171ull}}, {{12226608535850290215ull, 3214241976164278971ull, 12287821498419526838ull, 3710046756482948964ull}}, {{5335787325692737432ull, 15843959290384838069ull, 16903260473366980081ull, 2318779222801843102ull}}, {{11281420175543309694ull, 5969891057698883874ull, 11905703554853949294ull, 2898474028502303878ull}}, {{4878403182574361310ull, 16685735858978380651ull, 5658757406712660809ull, 3623092535627879848ull}}, {{1486317959790563733ull, 7022111768440812102ull, 7073446758390826012ull, 4528865669534849810ull}}, {{14764006780151266045ull, 13612191892130283371ull, 9032590242421654161ull, 2830541043459281131ull}}, {{13843322456761694653ull, 3180181809880690502ull, 6679051784599679798ull, 3538176304324101414ull}}, {{8080781034097342508ull, 13198599299205638936ull, 17572186767604375555ull, 4422720380405126767ull}}, {{5050488146310839068ull, 5943281552789830383ull, 17900145757393816578ull, 2764200237753204229ull}}, {{1701424164461160930ull, 16652473977842063787ull, 8540124141460107010ull, 3455250297191505287ull}}, {{15961838260858614875ull, 11592220435447803925ull, 6063469158397745859ull, 4319062871489381609ull}}, {{12281991922250328249ull, 4939294762941183501ull, 15318883270067060922ull, 2699414294680863505ull}}, {{1517431847530746599ull, 15397490490531255185ull, 5313546032301662440ull, 3374267868351079382ull}}, {{6508475827840821153ull, 800119039454517365ull, 15865304577231853859ull, 4217834835438849227ull}}, {{6373640401614207173ull, 16640975464154931017ull, 7609972351556214709ull, 2636146772149280767ull}}, {{12578736520445146870ull, 6966161274911500059ull, 4900779421017880483ull, 3295183465186600959ull}}, {{11111734632129045683ull, 4096015575211987170ull, 1514288257844962700ull, 4118979331483251199ull}}, {{11556520163508041456ull, 11783381771362267789ull, 7863959188794183543ull, 2574362082177031999ull}}, {{610592149102888108ull, 10117541195775446833ull, 5218262967565341525ull, 3217952602721289999ull}}, {{5374926204805998039ull, 17258612513146696445ull, 1911142691029289002ull, 4022440753401612499ull}}, {{5665171887217442726ull, 15398318839144073182ull, 17335365246389163290ull, 2514025470876007811ull}}, {{16304836895876579216ull, 10024526512075315669ull, 17057520539559066209ull, 3142531838595009764ull}}, {{6545988064563560308ull, 17142344158521532491ull, 2875156600739281145ull, 3928164798243762206ull}}, {{1785399531138531240ull, 3796436071434875951ull, 15632030930744214428ull, 2455102998902351378ull}}, {{16066807469205327762ull, 4745545089293594938ull, 10316666626575492227ull, 3068878748627939223ull}}, {{10860137299651883895ull, 1320245343189605769ull, 8284147264791977380ull, 3836098435784924029ull}}, {{18316800858350897195ull, 10048525376348279413ull, 7483435049708679814ull, 2397561522365577518ull}}, {{9060943017656457781ull, 3337284683580573459ull, 130921775281073960ull, 2996951902956971898ull}}, {{6714492753643184322ull, 4171605854475716824ull, 9387024255956118258ull, 3746189878696214872ull}}, {{4196557971026990202ull, 7218939677474710919ull, 5866890159972573911ull, 2341368674185134295ull}}, {{634011445356349848ull, 4411988578416000745ull, 2721926681538329485ull, 2926710842731417869ull}}, {{5404200325122825214ull, 10126671741447388835ull, 8014094370350299760ull, 3658388553414272336ull}}, {{2143564387976143613ull, 12658339676809236044ull, 10017617962937874700ull, 4572985691767840420ull}}, {{10563099779339865566ull, 17134834334860548335ull, 15484383263690947495ull, 2858116057354900262ull}}, {{8592188705747444054ull, 16806856900148297515ull, 10132107042758908561ull, 3572645071693625328ull}}, {{6128549863756917163ull, 7173513069903208182ull, 12665133803448635702ull, 4465806339617031660ull}}, {{17665401720130236939ull, 18318503723971668825ull, 17139080664010173121ull, 2791128962260644787ull}}, {{8246694094880632462ull, 9063071599682422320ull, 16812164811585328498ull, 3488911202825805984ull}}, {{10308367618600790577ull, 2105467462748252092ull, 2568461940772109007ull, 4361139003532257481ull}}, {{15666101798480269919ull, 8233446191858739413ull, 13134503759051037889ull, 2725711877207660925ull}}, {{5747569192818173686ull, 14903493758250812171ull, 2583071643531633649ull, 3407139846509576157ull}}, {{2572775472595329204ull, 4794309142531351502ull, 7840525572841929966ull, 4258924808136970196ull}}, {{15443042725654244465ull, 16831501269364258400ull, 14123700519880982036ull, 2661828005085606372ull}}, {{857059333358253965ull, 2592632512995771385ull, 17654625649851227546ull, 3327285006357007965ull}}, {{5683010185125205360ull, 12464162678099490039ull, 8233224007031870720ull, 4159106257946259957ull}}, {{10469410393344335206ull, 7790101673812181274ull, 7451608013608613152ull, 2599441411216412473ull}}, {{3863390954825643199ull, 9737627092265226593ull, 13926196035438154344ull, 3249301764020515591ull}}, {{9440924711959441903ull, 12172033865331533241ull, 12796059025870305026ull, 4061627205025644489ull}}, {{17429792991043120950ull, 12219207184259596179ull, 1080007863527858785ull, 2538517003141027806ull}}, {{17175555220376513283ull, 1438950925042331512ull, 10573381866264599290ull, 3173146253926284757ull}}, {{3022699951761089987ull, 11022060693157690199ull, 17828413351258137016ull, 3966432817407855946ull}}, {{8806716497491763098ull, 6888787933223556374ull, 15754444362963723539ull, 2479020510879909966ull}}, {{1785023585009928065ull, 3999298898102057564ull, 10469683416849878616ull, 3098775638599887458ull}}, {{2231279481262410081ull, 4999123622627571955ull, 3863732234207572462ull, 3873469548249859323ull}}, {{17535450740284863965ull, 16959510319424396183ull, 108989637166038836ull, 2420918467656162077ull}}, {{17307627406928692052ull, 2752643825570943613ull, 4747923064884936450ull, 3026148084570202596ull}}, {{7799476203378701353ull, 12664176818818455325ull, 5934903831106170562ull, 3782685105712753245ull}}, {{7180515636325382298ull, 12526796530188922482ull, 6015157903655050553ull, 2364178191070470778ull}}, {{18199016582261503680ull, 1823437607453989390ull, 16742319416423589000ull, 2955222738838088472ull}}, {{13525398690972103792ull, 2279297009317486738ull, 2481155196819934634ull, 3694028423547610591ull}}, {{13065060200284952774ull, 6036246649250817115ull, 8468251025653541002ull, 2308767764717256619ull}}, {{11719639231928803063ull, 16768680348418297202ull, 5973627763639538348ull, 2885959705896570774ull}}, {{5426177003056228021ull, 2514106361813319887ull, 16690406741404198744ull, 3607449632370713467ull}}, {{2171035235392897122ull, 3142632952266649859ull, 16251322408327860526ull, 4509312040463391834ull}}, {{17497798086616418366ull, 15799203650448819873ull, 14768762523632300732ull, 2818320025289619896ull}}, {{8037189552988359245ull, 1302260489351473226ull, 14209080830824300ull, 3522900031612024871ull}}, {{823114904380673248ull, 1627825611689341533ull, 13852819406320694087ull, 4403625039515031088ull}}, {{2820289824451614732ull, 7934920034946920314ull, 8658012128950433804ull, 2752265649696894430ull}}, {{12748734317419294223ull, 9918650043683650392ull, 1599143124333266447ull, 3440332062121118038ull}}, {{15935917896774117779ull, 7786626536177175086ull, 11222300942271358867ull, 4300415077651397547ull}}, {{5348262667056435708ull, 2560798575897040477ull, 4708095079705905340ull, 2687759423532123467ull}}, {{11297014352247932539ull, 3200998219871300596ull, 1273432831204993771ull, 3359699279415154334ull}}, {{14121267940309915673ull, 17836305830121289457ull, 10815163075861018021ull, 4199624099268942917ull}}, {{1908263435052615440ull, 13453534153039499863ull, 9065319931626830215ull, 2624765062043089323ull}}, {{16220387349097933012ull, 12205231672871986924ull, 6719963896106149865ull, 3280956327553861654ull}}, {{1828740112662864649ull, 1421481535807819944ull, 17623326906987463140ull, 4101195409442327067ull}}, {{1142962570414290406ull, 10111797996734663273ull, 8708736307653470510ull, 2563247130901454417ull}}, {{6040389231445250911ull, 3416375459063553283ull, 15497606402994226042ull, 3204058913626818021ull}}, {{2938800520879175735ull, 13493841360684217412ull, 5536949948460618840ull, 4005073642033522527ull}}, {{11060122362404260642ull, 8433650850427635882ull, 10378122745428968631ull, 2503171026270951579ull}}, {{4601780916150549995ull, 5930377544607156949ull, 8360967413358822885ull, 3128963782838689474ull}}, {{10363912163615575397ull, 12024657949186334090ull, 1227837229843752798ull, 3911204728548361843ull}}, {{11089131120687122527ull, 2903725199814070902ull, 16908299333148203163ull, 2444502955342726151ull}}, {{4638041864004127351ull, 17464714555049752340ull, 16523688148007866049ull, 3055628694178407689ull}}, {{5797552330005159189ull, 7995835138530026713ull, 6819552129727668850ull, 3819535867723009612ull}}, {{15152685252321694253ull, 9609082980008654599ull, 13485592117934568839ull, 2387209917326881007ull}}, {{14329170546974729912ull, 7399667706583430345ull, 12245304128990823145ull, 2984012396658601259ull}}, {{4076405128436248678ull, 13861270651656675836ull, 10694944142811141027ull, 3730015495823251574ull}}, {{11771125242127431232ull, 6357451148071728445ull, 2072654070829575238ull, 2331259684889532234ull}}, {{878848497377125328ull, 17170185971944436365ull, 11814189625391744855ull, 2914074606111915292ull}}, {{5710246640148794564ull, 16851046446503157552ull, 14767737031739681069ull, 3642593257639894115ull}}, {{7137808300185993205ull, 7228750002846783228ull, 13847985271247213433ull, 4553241572049867644ull}}, {{13684502224471021561ull, 16047183797847709277ull, 17878362831384284203ull, 2845775982531167277ull}}, {{3270569725306613239ull, 15447293728882248693ull, 8512895483948191542ull, 3557219978163959097ull}}, {{8699898175060654453ull, 10085745124248035058ull, 15252805373362627332ull, 4446524972704948871ull}}, {{10049122377840296937ull, 15526962739509797719ull, 16450532385992723938ull, 2779078107940593044ull}}, {{7949716953872983268ull, 10185331387532471341ull, 2116421408781353307ull, 3473847634925741306ull}}, {{14548832210768616988ull, 8119978215988201272ull, 11868898797831467442ull, 4342309543657176632ull}}, {{9093020131730385618ull, 9686672403420013699ull, 7418061748644667151ull, 2713943464785735395ull}}, {{6754589146235594118ull, 7496654485847629220ull, 4660891167378446035ull, 3392429330982169244ull}}, {{8443236432794492648ull, 4759132088882148621ull, 5826113959223057544ull, 4240536663727711555ull}}, {{7582865779710251857ull, 2974457555551342888ull, 1335478215300717013ull, 2650335414829819722ull}}, {{9478582224637814821ull, 8329757962866566514ull, 10892719805980672074ull, 3312919268537274652ull}}, {{2624855743942492718ull, 1188825416728432335ull, 13615899757475840093ull, 4141149085671593315ull}}, {{8558063867605139805ull, 3048858894668964161ull, 6204094339208706106ull, 2588218178544745822ull}}, {{15309265852933812660ull, 13034445655190981009ull, 16978489960865658440ull, 3235272723180932277ull}}, {{5301524260885102113ull, 16293057068988726262ull, 7388054395799909338ull, 4044090903976165347ull}}, {{17148510718335352533ull, 14794846686545341817ull, 2311690988161249384ull, 2527556814985103342ull}}, {{7600580342637026954ull, 46814284472125656ull, 12112985772056337539ull, 3159446018731379177ull}}, {{9500725428296283693ull, 13893575910872320782ull, 1306174159788258211ull, 3949307523414223972ull}}, {{1326267374257789404ull, 6377641935081506537ull, 10039730886722437190ull, 2468317202133889982ull}}, {{6269520236249624659ull, 17195424455706658979ull, 3326291571548270679ull, 3085396502667362478ull}}, {{3225214276884642919ull, 16882594551205935820ull, 13381236501290114157ull, 3856745628334203097ull}}, {{11239130959907677633ull, 12857464603717403839ull, 1445743785665239492ull, 2410466017708876936ull}}, {{9437227681457209137ull, 16071830754646754799ull, 1807179732081549365ull, 3013082522136096170ull}}, {{7184848583394123517ull, 6254730388026279787ull, 11482346701956712515ull, 3766353152670120212ull}}, {{2184687355407633246ull, 1603363483302730915ull, 16399838725577721130ull, 2353970720418825132ull}}, {{16565917249541705270ull, 11227576390983189451ull, 2053054333262599796ull, 2942463400523531416ull}}, {{16095710543499743683ull, 14034470488728986814ull, 2566317916578249745ull, 3678079250654414270ull}}, {{10896266142519903796ull, 3708030055629069806ull, 12431269432577587990ull, 4597599063318017837ull}}, {{2198480320647551969ull, 16152576840050332341ull, 10075386404574686445ull, 2873499414573761148ull}}, {{7359786419236827865ull, 6355662994780751714ull, 12594233005718358057ull, 3591874268217201435ull}}, {{18423105060900810639ull, 12556264761903327546ull, 11131105238720559667ull, 4489842835271501794ull}}, {{16126126681490394553ull, 5541822466975885764ull, 11568626792627737696ull, 2806151772044688621ull}}, {{1710914278153441576ull, 6927278083719857206ull, 625725435502508408ull, 3507689715055860777ull}}, {{11362014884546577777ull, 8659097604649821507ull, 5393842812805523414ull, 4384612143819825971ull}}, {{4795416293627917159ull, 800249984478750538ull, 1065308748789758182ull, 2740382589887391232ull}}, {{15217642403889672257ull, 10223684517453213980ull, 1331635935987197727ull, 3425478237359239040ull}}, {{575308931152538705ull, 8167919628389129572ull, 1664544919983997159ull, 4281847796699048800ull}}, {{9582940118825112499ull, 12022478795384287838ull, 1040340574989998224ull, 2676154872936905500ull}}, {{2755303111676614815ull, 15028098494230359798ull, 1300425718737497780ull, 3345193591171131875ull}}, {{12667500926450544327ull, 338379044078398131ull, 15460590203704035938ull, 4181491988963914843ull}}, {{5611345069817896252ull, 4823172920976386736ull, 7357025868101328509ull, 2613432493102446777ull}}, {{7014181337272370315ull, 10640652169647871324ull, 13807968353554048540ull, 3266790616378058471ull}}, {{8767726671590462894ull, 13300815212059839155ull, 12648274423515172771ull, 4083488270472573089ull}}, {{3173986160530345357ull, 6007166498323705520ull, 987642487055901126ull, 2552180169045358181ull}}, {{3967482700662931696ull, 16732330159759407708ull, 5846239127247264311ull, 3190225211306697726ull}}, {{4959353375828664620ull, 16303726681271871731ull, 16531170945913856197ull, 3987781514133372157ull}}, {{793752850679221436ull, 12495672185008613784ull, 12637824850409854075ull, 2492363446333357598ull}}, {{992191063349026795ull, 11007904212833379326ull, 6573909026157541786ull, 3115454307916696998ull}}, {{10463610866041059301ull, 4536508229186948349ull, 17440758319551703041ull, 3894317884895871247ull}}, {{8845599800489356015ull, 14364532689310312478ull, 17818002977360896256ull, 2433948678059919529ull}}, {{1833627713756919211ull, 17955665861637890598ull, 8437445666418956608ull, 3042435847574899412ull}}, {{11515406679050924822ull, 3997838253337811631ull, 10546807083023695761ull, 3803044809468624265ull}}, {{14114658202047909870ull, 14027863954404602029ull, 18120969472958279610ull, 2376903005917890165ull}}, {{3808264697277723625ull, 8311457906150976729ull, 8816153785915685801ull, 2971128757397362707ull}}, {{9372016890024542435ull, 15001008401116108815ull, 6408506213967219347ull, 3713910946746703384ull}}, {{12775039583906420878ull, 7069787241483874057ull, 4005316383729512092ull, 2321194341716689615ull}}, {{2133741424600862386ull, 8837234051854842572ull, 394959461234502211ull, 2901492927145862019ull}}, {{2667176780751077982ull, 6434856546391165311ull, 14328757381825291476ull, 3626866158932327523ull}}, {{17169029031221011189ull, 8043570682988956638ull, 13299260708854226441ull, 4533582698665409404ull}}, {{6118957126085744089ull, 16556446722936567659ull, 17535409979888667333ull, 2833489186665880877ull}}, {{3037010389179792208ull, 6860500348388545862ull, 8084204419578670455ull, 3541861483332351097ull}}, {{13019635023329516067ull, 3963939417058294423ull, 14716941542900725973ull, 4427326854165438871ull}}, {{15054800917222029398ull, 4783305144875127966ull, 16115617491954035589ull, 2767079283853399294ull}}, {{9595129109672760940ull, 10590817449521297862ull, 10921149828087768678ull, 3458849104816749118ull}}, {{2770539350236175367ull, 4015149775046846520ull, 4428065248254935040ull, 4323561381020936398ull}}, {{1731587093897609604ull, 2509468609404279075ull, 16602598835441498112ull, 2702225863138085248ull}}, {{15999541922654175717ull, 3136835761755348843ull, 2306504470592321024ull, 3377782328922606561ull}}, {{15387741384890331743ull, 3921044702194186054ull, 7494816606667789184ull, 4222227911153258201ull}}, {{5005652347129069435ull, 2450652938871366284ull, 16213475425235838000ull, 2638892444470786375ull}}, {{6257065433911336794ull, 3063316173589207855ull, 15655158263117409596ull, 3298615555588482969ull}}, {{3209645773961783088ull, 3829145216986509819ull, 5733889773614598283ull, 4123269444485603712ull}}, {{18146929673221972094ull, 87372751402874684ull, 3583681108509123927ull, 2577043402803502320ull}}, {{4236918017817913502ull, 13944273994535757068ull, 4479601385636404908ull, 3221304253504377900ull}}, {{5296147522272391877ull, 17430342493169696335ull, 5599501732045506135ull, 4026630316880472375ull}}, {{10227621229061326779ull, 17811493085872142065ull, 10417217610169523190ull, 2516643948050295234ull}}, {{17396212554754046378ull, 13040994320485401773ull, 3798149975857128180ull, 3145804935062869043ull}}, {{7910207638160394261ull, 16301242900606752217ull, 136001451394022321ull, 3932256168828586304ull}}, {{16473094819918716173ull, 3270747785238138279ull, 85000907121263951ull, 2457660105517866440ull}}, {{15979682506471007312ull, 17923492786829836561ull, 106251133901579938ull, 3072075131897333050ull}}, {{6139545077806595428ull, 13180993946682519894ull, 9356185954231750731ull, 3840093914871666312ull}}, {{17672273728911285855ull, 5932278207462880981ull, 5847616221394844207ull, 2400058696794791445ull}}, {{8255284105856943606ull, 2803661740901213323ull, 11921206295170943163ull, 3000073370993489306ull}}, {{5707419113893791604ull, 17339635231408680366ull, 5678135832108903145ull, 3750091713741861633ull}}, {{17402195001465783465ull, 3919742991989343372ull, 15078049941136534226ull, 2343807321088663520ull}}, {{3305999678122677715ull, 14123050776841455024ull, 400818352711116166ull, 2929759151360829401ull}}, {{4132499597653347143ull, 8430441434197042972ull, 5112708959316283112ull, 3662198939201036751ull}}, {{5165624497066683929ull, 10538051792746303715ull, 1779200180717965986ull, 4577748674001295939ull}}, {{922672301452983504ull, 11197968388893827726ull, 17252901177444586405ull, 2861092921250809961ull}}, {{10376712413671005187ull, 162402430835120945ull, 7731068416523569295ull, 3576366151563512452ull}}, {{17582576535516144388ull, 14038061093826064893ull, 9663835520654461618ull, 4470457689454390565ull}}, {{13294953343911284195ull, 13385474202068678462ull, 8345740209622732463ull, 2794036055908994103ull}}, {{7395319643034329435ull, 12120156734158460174ull, 5820489243601027675ull, 3492545069886242629ull}}, {{20777516938135986ull, 10538509899270687314ull, 11887297572928672498ull, 4365681337357803286ull}}, {{4624671966513722895ull, 11198254705471567475ull, 2817874964653032407ull, 2728550835848627054ull}}, {{1169153939714765715ull, 9386132363412071440ull, 12745715742671066317ull, 3410688544810783817ull}}, {{1461442424643457144ull, 16344351472692477204ull, 2097086623056669184ull, 4263360681013479772ull}}, {{10136773552256936523ull, 10215219670432798252ull, 10534051176265194048ull, 2664600425633424857ull}}, {{12670966940321170654ull, 12769024588040997815ull, 17779249988758880464ull, 3330750532041781071ull}}, {{11227022656974075413ull, 15961280735051247269ull, 17612376467521212676ull, 4163438165052226339ull}}, {{9322732169822491085ull, 752428422552253735ull, 8701892282987063971ull, 2602148853157641462ull}}, {{7041729193850725953ull, 14775593583472480881ull, 1653993316879054155ull, 3252686066447051828ull}}, {{13413847510740795345ull, 13857805960913213197ull, 2067491646098817694ull, 4065857583058814785ull}}, {{10689497703426691043ull, 4049442707143370344ull, 12821397324880230819ull, 2541160989411759240ull}}, {{13361872129283363803ull, 450117365501825026ull, 16026746656100288524ull, 3176451236764699050ull}}, {{7478968124749428946ull, 562646706877281283ull, 10810061283270584847ull, 3970564045955873813ull}}, {{2368512068754699139ull, 7269183219439382658ull, 9062131311257809481ull, 2481602528722421133ull}}, {{12184012122798149732ull, 13698165042726616226ull, 15939350157499649755ull, 3102003160903026416ull}}, {{6006643116642911357ull, 12511020284980882379ull, 1477443623165010578ull, 3877503951128783021ull}}, {{1448308938688125646ull, 12431073696540439391ull, 3229245273691825563ull, 2423439969455489388ull}}, {{15645444228642320770ull, 10927156102248161334ull, 4036556592114781954ull, 3029299961819361735ull}}, {{10333433248948125154ull, 4435573090955425860ull, 434009721716089539ull, 3786624952274202169ull}}, {{15681767817447354029ull, 466390172633447210ull, 11800471122141025722ull, 2366640595171376355ull}}, {{10378837734954416729ull, 9806359752646584821ull, 10138902884248894248ull, 2958300743964220444ull}}, {{17585233187120408815ull, 12257949690808231026ull, 12673628605311117810ull, 3697875929955275555ull}}, {{15602456760377643413ull, 12272904575182532295ull, 5615174869105754679ull, 2311172456222047222ull}}, {{14891384932044666363ull, 10729444700550777465ull, 16242340623236969157ull, 2888965570277559027ull}}, {{4779173109773669241ull, 18023491894115859736ull, 15691239760618823542ull, 3611206962846948784ull}}, {{5973966387217086551ull, 13305992830790048862ull, 1167305627063977812ull, 4514008703558685981ull}}, {{17568787047292842807ull, 17539617556098556346ull, 3035409026128680084ull, 2821255439724178738ull}}, {{12737611772261277700ull, 3477777871413643817ull, 13017633319515625914ull, 3526569299655223422ull}}, {{2086956660044433413ull, 13570594376121830580ull, 7048669612539756584ull, 4408211624569029278ull}}, {{10527719949382546691ull, 8481621485076144112ull, 18240476563119511577ull, 2755132265355643298ull}}, {{13159649936728183364ull, 15213712874772568044ull, 13577223667044613663ull, 3443915331694554123ull}}, {{16449562420910229205ull, 14405455075038322151ull, 12359843565378379175ull, 4304894164618192654ull}}, {{17198505540709975109ull, 15920938449540033200ull, 3113216209934099080ull, 2690558852886370409ull}}, {{3051387852177917271ull, 1454428988215489885ull, 8503206280845011755ull, 3363198566107963011ull}}, {{8425920833649784492ull, 15653094290551526068ull, 6017321832628876789ull, 4203998207634953764ull}}, {{14489572557885891116ull, 12089026940808397744ull, 12984198182247823801ull, 2627498879771846102ull}}, {{18111965697357363895ull, 1276225620728333468ull, 7006875690955003944ull, 3284373599714807628ull}}, {{4193213047987153252ull, 1595282025910416836ull, 8758594613693754930ull, 4105466999643509535ull}}, {{11844130191846746591ull, 5608737284621398426ull, 12391650661199678687ull, 2565916874777193459ull}}, {{5581790702953657430ull, 2399235587349360129ull, 10877877308072210455ull, 3207396093471491824ull}}, {{11588924397119459692ull, 16834102539468863873ull, 13597346635090263068ull, 4009245116839364780ull}}, {{325548720558580452ull, 1297942050313264113ull, 17721713683786190226ull, 2505778198024602987ull}}, {{5018621919125613468ull, 10845799599746355949ull, 17540456086305349878ull, 3132222747530753734ull}}, {{10884963417334404739ull, 4333877462828169128ull, 12702198071026911540ull, 3915278434413442168ull}}, {{6803102135834002962ull, 11932045451122381513ull, 7938873794391819712ull, 2447049021508401355ull}}, {{13115563688219891607ull, 14915056813902976891ull, 5311906224562386736ull, 3058811276885501694ull}}, {{11782768591847476604ull, 197076943669169498ull, 15863254817557759229ull, 3823514096106877117ull}}, {{11975916388332060782ull, 2429016099006924888ull, 12220377270187293470ull, 2389696310066798198ull}}, {{14969895485415075977ull, 12259642160613431918ull, 6052099550879341029ull, 2987120387583497748ull}}, {{9488997319914069163ull, 1489494645484626186ull, 7565124438599176287ull, 3733900484479372185ull}}, {{10542309343373681131ull, 7848463181068973222ull, 16257417820192954939ull, 2333687802799607615ull}}, {{3954514642362325606ull, 5198892957908828624ull, 15710086256813805770ull, 2917109753499509519ull}}, {{4943143302952907007ull, 15721988234240811588ull, 15025921802589869308ull, 3646387191874386899ull}}, {{6178929128691133759ull, 1205741219091462869ull, 14170716234809948732ull, 4557983989842983624ull}}, {{6167673714645652552ull, 9976960298786940101ull, 8856697646756217957ull, 2848739993651864765ull}}, {{12321278161734453593ull, 17082886391911063030ull, 15682558076872660350ull, 3560924992064830956ull}}, {{6178225665313291183ull, 12130235953034052980ull, 1156453522381273822ull, 4451156240081038696ull}}, {{13084763077675582798ull, 2969711452218895208ull, 722783451488296139ull, 2781972650050649185ull}}, {{16355953847094478497ull, 17547197370555782722ull, 5515165332787758077ull, 3477465812563311481ull}}, {{11221570272013322313ull, 8098938657912564691ull, 11505642684412085501ull, 4346832265704139351ull}}, {{4707638410794632494ull, 7367679670409046884ull, 14108555705398635294ull, 2716770166065087094ull}}, {{5884548013493290617ull, 18432971624866084413ull, 8412322594893518309ull, 3395962707581358868ull}}, {{11967371035294001176ull, 9206156475800441804ull, 10515403243616897887ull, 4244953384476698585ull}}, {{16702978933913526543ull, 12671376825016357983ull, 18101342073329030939ull, 2653095865297936615ull}}, {{16267037648964520275ull, 11227535012843059575ull, 18014991573233900770ull, 3316369831622420769ull}}, {{15722111042778262439ull, 4811046729199048661ull, 8683681411260212251ull, 4145462289528025962ull}}, {{12132162410950107977ull, 701061196535711461ull, 10038986900465020561ull, 2590913930955016226ull}}, {{1330144958405471259ull, 5488012514097027231ull, 3325361588726499893ull, 3238642413693770283ull}}, {{15497739253289002785ull, 11471701661048671942ull, 17991760041190288578ull, 4048303017117212853ull}}, {{5074401014878238837ull, 11781499556582807868ull, 13550693034957624313ull, 2530189385698258033ull}}, {{6343001268597798546ull, 891816390446346123ull, 3103308238414866680ull, 3162736732122822542ull}}, {{3317065567319860278ull, 1114770488057932654ull, 13102507334873359158ull, 3953420915153528177ull}}, {{15908224034857076386ull, 14531789610318371620ull, 1271538056654767617ull, 2470888071970955111ull}}, {{1438535969861793867ull, 4329678957615800814ull, 15424480626100623234ull, 3088610089963693888ull}}, {{11021541999182018141ull, 14635470733874526825ull, 833856708916227426ull, 3860762612454617361ull}}, {{18417678795557231098ull, 13758855227098967169ull, 12050375489141111901ull, 2412976632784135850ull}}, {{9187040439164375161ull, 3363510978591545250ull, 5839597324571614069ull, 3016220790980169813ull}}, {{2260428512100693143ull, 8816074741666819467ull, 11911182674141905490ull, 3770275988725212266ull}}, {{17553668884558790879ull, 10121732731969150070ull, 12056175189766078835ull, 2356422492953257666ull}}, {{12718714068843712790ull, 8040479896534049684ull, 5846846950352822736ull, 2945528116191572083ull}}, {{15898392586054640987ull, 10050599870667562105ull, 2696872669513640516ull, 3681910145239465104ull}}, {{6037932677286137522ull, 12563249838334452632ull, 3371090836892050645ull, 4602387681549331380ull}}, {{3773707923303835952ull, 10157874158172726847ull, 11330303809912307461ull, 2876492300968332112ull}}, {{105448885702407035ull, 17309028716143296463ull, 14162879762390384326ull, 3595615376210415140ull}}, {{13966869162410172506ull, 12412913858324344770ull, 17703599702987980408ull, 4494519220263018925ull}}, {{13340979244933745720ull, 7758071161452715481ull, 13370592823581181707ull, 2809074512664386828ull}}, {{2841166000885018438ull, 5085902933388506448ull, 16713241029476477134ull, 3511343140830483535ull}}, {{3551457501106273048ull, 15580750703590408868ull, 16279865268418208513ull, 4389178926038104419ull}}, {{11443032975046196463ull, 2820440162102923686ull, 7869072783547686369ull, 2743236828773815262ull}}, {{5080419181952969771ull, 8137236221056042512ull, 612968942579832153ull, 3429046035967269078ull}}, {{6350523977441212213ull, 14783231294747441044ull, 9989583215079565999ull, 4286307544959086347ull}}, {{13192449522755533442ull, 16157048586858232508ull, 3937646500211034797ull, 2678942215599428967ull}}, {{16490561903444416802ull, 6361252678290626923ull, 310372106836405593ull, 3348677769499286209ull}}, {{16001516360878133098ull, 12563251866290671558ull, 4999651151972894895ull, 4185847211874107761ull}}, {{5389261707121445283ull, 14769561444072751580ull, 14653997016051529069ull, 2616154507421317350ull}}, {{6736577133901806603ull, 4626893749808775763ull, 9094124233209635529ull, 3270193134276646688ull}}, {{3809035398949870350ull, 10395303205688357608ull, 11367655291512044411ull, 4087741417845808360ull}}, {{2380647124343668969ull, 4191221494341529553ull, 7104784557195027757ull, 2554838386153630225ull}}, {{7587494923856974115ull, 9850712886354299845ull, 13492666714921172600ull, 3193547982692037781ull}}, {{14096054673248605547ull, 12313391107942874806ull, 3030775338369302038ull, 3991934978365047227ull}}, {{4198348152352990563ull, 3084183424036908850ull, 18035135650976671438ull, 2494959361478154516ull}}, {{14471307227296014012ull, 13078601316900911870ull, 4097175490011287681ull, 3118699201847693146ull}}, {{8865761997265241707ull, 2513193590843976126ull, 14344841399368885410ull, 3898374002309616432ull}}, {{929415229863388163ull, 6182432012704872983ull, 8965525874605553381ull, 2436483751443510270ull}}, {{14996827092611398916ull, 12339726034308479132ull, 1983535306402165918ull, 3045604689304387838ull}}, {{299289792054697028ull, 6201285506030823108ull, 11702791169857483206ull, 3807005861630484797ull}}, {{9410428156888961451ull, 17710861496551428154ull, 9620087490374620955ull, 2379378663519052998ull}}, {{2539663159256426006ull, 17526890852261897289ull, 2801737326113500386ull, 2974223329398816248ull}}, {{7786264967497920411ull, 12685241528472595803ull, 3502171657641875483ull, 3717779161748520310ull}}, {{2560572595472506305ull, 5622432946081678425ull, 16023915341308335889ull, 2323611976092825193ull}}, {{7812401762768020785ull, 11639727201029485935ull, 6194836121353256149ull, 2904514970116031492ull}}, {{5153816185032638077ull, 714600946004693707ull, 7743545151691570187ull, 3630643712645039365ull}}, {{1830584212863409692ull, 14728309237788030846ull, 14291117458041850637ull, 4538304640806299206ull}}, {{14979173188321794770ull, 11511036282831213230ull, 4320262392848768744ull, 2836440400503937004ull}}, {{9500594448547467654ull, 14388795353539016538ull, 5400327991060960930ull, 3545550500629921255ull}}, {{2652371023829558760ull, 8762622155068994865ull, 2138723970398813259ull, 4431938125787401569ull}}, {{13186946935961943985ull, 3170795837704427838ull, 12865917527567728047ull, 2769961328617125980ull}}, {{7260311633097654173ull, 17798552852412698510ull, 16082396909459660058ull, 3462451660771407475ull}}, {{18298761578226843524ull, 13024819028661097329ull, 15491310118397187169ull, 4328064575964259344ull}}, {{4519196958750695347ull, 1222982865272103975ull, 9682068823998241981ull, 2705040359977662090ull}}, {{1037310180010981279ull, 6140414600017517873ull, 2879213993143026668ull, 3381300449972077613ull}}, {{5908323743441114503ull, 7675518250021897341ull, 8210703509856171239ull, 4226625562465097016ull}}, {{5998545348864390517ull, 11714727933904767694ull, 5131689693660107024ull, 2641640976540685635ull}}, {{16721553722935263954ull, 14643409917380959617ull, 1802926098647745876ull, 3302051220675857044ull}}, {{7066884098386916230ull, 18304262396726199522ull, 2253657623309682345ull, 4127564025844821305ull}}, {{9028488579919210548ull, 4522634970312792845ull, 12937751060637021226ull, 2579727516153013315ull}}, {{15897296743326401089ull, 14876665749745766864ull, 11560502807368888628ull, 3224659395191266644ull}}, {{1424876855448449745ull, 149088113472656965ull, 14450628509211110786ull, 4030824243989083305ull}}, {{3196391043868975043ull, 4704866089347798507ull, 2114113790615862385ull, 2519265152493177066ull}}, {{17830546860118382515ull, 10492768630112136037ull, 11866014275124603789ull, 3149081440616471332ull}}, {{8453125519865814432ull, 17727646806067557951ull, 14832517843905754736ull, 3936351800770589165ull}}, {{12200732477557215876ull, 11079779253792223719ull, 11576166661654790662ull, 2460219875481618228ull}}, {{10639229578519131941ull, 4626352030385503841ull, 14470208327068488328ull, 3075274844352022785ull}}, {{17910722991576302830ull, 5782940037981879801ull, 4252702353553446698ull, 3844093555440028482ull}}, {{4276672842094107413ull, 8226023542166062780ull, 7269624989398292090ull, 2402558472150017801ull}}, {{5345841052617634266ull, 1059157390852802667ull, 13698717255175253017ull, 3003198090187522251ull}}, {{2070615297344654929ull, 5935632756993391238ull, 12511710550541678367ull, 3753997612734402814ull}}, {{15129192616122573043ull, 10627299500761951379ull, 3208133075661161075ull, 2346248507959001759ull}}, {{14299804751725828399ull, 8672438357525051320ull, 17845224399858615056ull, 2932810634948752198ull}}, {{17874755939657285499ull, 10840547946906314150ull, 13083158462968493012ull, 3666013293685940248ull}}, {{13120072887716831065ull, 13550684933632892688ull, 16353948078710616265ull, 4582516617107425310ull}}, {{8200045554823019416ull, 1551649055879476074ull, 5609531530766747262ull, 2864072885692140819ull}}, {{1026684906673998462ull, 11162933356704120901ull, 2400228395031046173ull, 3580091107115176024ull}}, {{5895042151769885981ull, 118608640597987414ull, 3000285493788807717ull, 4475113883893970030ull}}, {{17519459400138342451ull, 2379973409587436085ull, 15710236488900168535ull, 2796946177433731268ull}}, {{8064266194890764351ull, 16810024817266458819ull, 1191051537415659052ull, 3496182721792164086ull}}, {{5468646725186067535ull, 2565786947873521908ull, 10712186458624349624ull, 4370228402240205107ull}}, {{12641276240096068017ull, 1603616842420951192ull, 4389273527426524563ull, 2731392751400128192ull}}, {{15801595300120085022ull, 15839579108308352702ull, 5486591909283155703ull, 3414240939250160240ull}}, {{10528622088295330469ull, 15187787866958052974ull, 6858239886603944629ull, 4267801174062700300ull}}, {{1968702786757193639ull, 11798210426062477061ull, 13509771965982241201ull, 2667375733789187687ull}}, {{7072564501873879953ull, 912704977295932614ull, 12275528939050413598ull, 3334219667236484609ull}}, {{18064077664197125749ull, 10364253258474691575ull, 1509353118530853285ull, 4167774584045605762ull}}, {{18207577567764285449ull, 8783501295760376186ull, 5555031717509171207ull, 2604859115028503601ull}}, {{13536099922850581003ull, 6367690601273082329ull, 11555475665313851913ull, 3256073893785629501ull}}, {{3085066848281062542ull, 12571299270018740816ull, 609286526360151179ull, 4070092367232036877ull}}, {{1928166780175664089ull, 5551219034548019058ull, 2686647088188788439ull, 2543807729520023048ull}}, {{11633580512074355919ull, 2327337774757635918ull, 3358308860235985549ull, 3179759661900028810ull}}, {{5318603603238169091ull, 7520858236874432802ull, 13421258112149757744ull, 3974699577375036012ull}}, {{7935813270451243586ull, 4700536398046520501ull, 17611658356948374398ull, 2484187235859397507ull}}, {{14531452606491442386ull, 15099042534412926434ull, 17402886927758080093ull, 3105234044824246884ull}}, {{8940943721259527175ull, 5038745112733994331ull, 3306864585988048501ull, 3881542556030308606ull}}, {{3282246816573510532ull, 5455058704672440409ull, 15901848421524694025ull, 2425964097518942878ull}}, {{8714494539144276069ull, 11430509399267938415ull, 10653938490051091723ull, 3032455121898678598ull}}, {{6281432155502957183ull, 9676450730657535115ull, 4094051075709088846ull, 3790568902373348248ull}}, {{1620052087975654287ull, 1436095688233571543ull, 2558781922318180529ull, 2369105563983342655ull}}, {{15860123165251731571ull, 6406805628719352332ull, 17033535458179889373ull, 2961381954979178318ull}}, {{1378409882855112848ull, 12620193054326578320ull, 12068547285870085908ull, 3701727443723972898ull}}, {{861506176784445530ull, 17110992695808887258ull, 12154528072096191596ull, 2313579652327483061ull}}, {{10300254757835332720ull, 2941996796051557456ull, 1358102034838075784ull, 2891974565409353827ull}}, {{12875318447294165900ull, 3677495995064446820ull, 15532685598829758442ull, 3614968206761692283ull}}, {{16094148059117707375ull, 13820242030685334333ull, 14804170980109810148ull, 4518710258452115354ull}}, {{12364685546162261062ull, 17861023306033109766ull, 13864292880996019246ull, 2824193911532572096ull}}, {{6232484895848050519ull, 13102907095686611400ull, 17330366101245024058ull, 3530242389415715120ull}}, {{7790606119810063149ull, 7155261832753488442ull, 3216213552846728457ull, 4412802986769643901ull}}, {{9480814843308677372ull, 16001253691539400036ull, 4315976479742899237ull, 2758001866731027438ull}}, {{11851018554135846715ull, 6166509059142086333ull, 14618342636533399855ull, 3447502333413784297ull}}, {{978715137387644682ull, 3096450305500220013ull, 4437870240384586107ull, 4309377916767230372ull}}, {{2917539970080971878ull, 18076182505433495172ull, 11997040937095142124ull, 2693361197979518982ull}}, {{3646924962601214848ull, 4148484058082317349ull, 5772929134514151848ull, 3366701497474398728ull}}, {{9170342221678906464ull, 5185605072602896686ull, 7216161418142689810ull, 4208376871842998410ull}}, {{1119777870121928636ull, 7852689188804198333ull, 9121786904766569035ull, 2630235544901874006ull}}, {{6011408356079798699ull, 5204175467577860012ull, 2178861594103435486ull, 3287794431127342508ull}}, {{7514260445099748373ull, 15728591371327100823ull, 2723576992629294357ull, 4109743038909178135ull}}, {{11613941805828424589ull, 12136212616293131966ull, 8619764648034390829ull, 2568589399318236334ull}}, {{5294055220430754929ull, 1335207715084251246ull, 1551333773188212729ull, 3210736749147795418ull}}, {{15840941062393219469ull, 6280695662282701961ull, 11162539253340041719ull, 4013420936434744272ull}}, {{2983059136354680312ull, 10842963816567770582ull, 6976587033337526074ull, 2508388085271715170ull}}, {{12952195957298126198ull, 4330332733854937419ull, 17944105828526683401ull, 3135485106589643962ull}}, {{11578558928195269844ull, 10024601935746059678ull, 13206760248803578443ull, 3919356383237054953ull}}, {{2624913311694655748ull, 3959533200627593347ull, 1336696127861154671ull, 2449597739523159346ull}}, {{17116199694900483397ull, 337730482357103779ull, 10894242196681219147ull, 3061997174403949182ull}}, {{16783563600198216343ull, 14257221158228543436ull, 4394430708996748125ull, 3827496468004936478ull}}, {{1266355213269109406ull, 11216606233106533600ull, 16581577248405131290ull, 2392185292503085298ull}}, {{1582944016586386758ull, 4797385754528391192ull, 11503599523651638305ull, 2990231615628856623ull}}, {{1978680020732983447ull, 10608418211587876894ull, 9767813386137159977ull, 3737789519536070779ull}}, {{15071733068240278367ull, 18159476428310892818ull, 3799040357122031033ull, 2336118449710044237ull}}, {{9616294298445572150ull, 8864287480106452311ull, 9360486464829926696ull, 2920148062137555296ull}}, {{7408681854629577284ull, 11080359350133065389ull, 11700608081037408370ull, 3650185077671944120ull}}, {{13872538336714359508ull, 4627077150811555928ull, 14625760101296760463ull, 4562731347089930150ull}}, {{8670336460446474693ull, 9809452246898304311ull, 4529414044883087385ull, 2851707091931206344ull}}, {{6226234557130705462ull, 16873501327050268293ull, 5661767556103859231ull, 3564633864914007930ull}}, {{12394479214840769731ull, 16480190640385447462ull, 16300581481984599847ull, 4455792331142509912ull}}, {{3134863490848093178ull, 17217648177881986520ull, 10187863426240374904ull, 2784870206964068695ull}}, {{3918579363560116473ull, 3075316148642931534ull, 8123143264373080727ull, 3481087758705085869ull}}, {{14121596241304921399ull, 17679203241085828129ull, 14765615098893738812ull, 4351359698381357336ull}}, {{1908468623174494018ull, 1826129988823866773ull, 9228509436808586758ull, 2719599811488348335ull}}, {{6997271797395505427ull, 11506034522884609274ull, 6923950777583345543ull, 3399499764360435419ull}}, {{17969961783599157591ull, 9770857135178373688ull, 4043252453551794025ull, 4249374705450544274ull}}, {{11231226114749473495ull, 17636000755554953315ull, 7138718801897259169ull, 2655859190906590171ull}}, {{9427346625009453964ull, 8209942889161527932ull, 4311712483944186058ull, 3319823988633237714ull}}, {{11784183281261817455ull, 1039056574597134107ull, 14613012641785008381ull, 4149779985791547142ull}}, {{5059271541574941958ull, 2955253368336902769ull, 4521446882688242334ull, 2593612491119716964ull}}, {{10935775445396065351ull, 12917438747275904269ull, 5651808603360302917ull, 3242015613899646205ull}}, {{18281405325172469593ull, 2311740378812716624ull, 11676446772627766551ull, 4052519517374557756ull}}, {{11425878328232793496ull, 8362366764399029746ull, 16521151269747129902ull, 2532824698359098597ull}}, {{5058975873436216062ull, 1229586418644011375ull, 6816381031901748666ull, 3166030872948873247ull}}, {{1712033823367882173ull, 10760355060159790027ull, 3908790271449797928ull, 3957538591186091559ull}}, {{17210922204100784022ull, 6725221912599868766ull, 9360522947297205561ull, 2473461619491307224ull}}, {{12290280718271204220ull, 13018213409177223862ull, 11700653684121506951ull, 3091827024364134030ull}}, {{6139478860984229466ull, 11661080743044141924ull, 5402445068297107881ull, 3864783780455167538ull}}, {{13060546324969919225ull, 370646436761506846ull, 7988214186113080330ull, 2415489862784479711ull}}, {{7102310869357623223ull, 9686680082806659366ull, 5373581714213962508ull, 3019362328480599639ull}}, {{18101260623551804836ull, 12108350103508324207ull, 2105291124340065231ull, 3774202910600749549ull}}, {{18230816917360959879ull, 14485247842333784485ull, 3621649961926234721ull, 2358876819125468468ull}}, {{8953463091419036136ull, 4271501747635066895ull, 4527062452407793402ull, 2948596023906835585ull}}, {{6580142845846407266ull, 14562749221398609427ull, 10270514083937129656ull, 3685745029883544481ull}}, {{3613492538880621179ull, 18203436526748261784ull, 17449828623348799974ull, 4607181287354430601ull}}, {{2258432836800388237ull, 6765461810790275711ull, 3988613861951918128ull, 2879488304596519126ull}}, {{16658099101282649008ull, 8456827263487844638ull, 14209139364294673468ull, 3599360380745648907ull}}, {{11599251839748535452ull, 10571034079359805798ull, 13149738186940953931ull, 4499200475932061134ull}}, {{2637846381415446754ull, 4301053290386184672ull, 3606900348410708303ull, 2812000297457538209ull}}, {{3297307976769308442ull, 764630594555342936ull, 9120311453940773283ull, 3515000371821922761ull}}, {{4121634970961635552ull, 14790846298476342382ull, 16012075335853354507ull, 4393750464777403451ull}}, {{16411079912133185932ull, 6938435927334020036ull, 7701704075694652615ull, 2746094040485877157ull}}, {{2067105816456930799ull, 4061358890740137142ull, 14238816113045703673ull, 3432617550607346446ull}}, {{11807254307425939307ull, 9688384631852559331ull, 8575148104452353783ull, 4290771938259183058ull}}, {{5073690932927518115ull, 12972769422548931438ull, 9971153583710109018ull, 2681732461411989411ull}}, {{15565485703014173452ull, 6992589741331388489ull, 7852255961210248369ull, 3352165576764986764ull}}, {{5621799073485553103ull, 13352423195091623516ull, 9815319951512810461ull, 4190206970956233455ull}}, {{12736996457783246497ull, 10651107506145958649ull, 13052103997336588394ull, 2618879356847645909ull}}, {{2086187516946894410ull, 4090512345827672504ull, 2480071941388571781ull, 3273599196059557387ull}}, {{2607734396183618012ull, 9724826450711978534ull, 16935147982017878438ull, 4091998995074446733ull}}, {{15464892052896924970ull, 1466330513267598679ull, 12890310497974867976ull, 2557499371921529208ull}}, {{14719429047693768308ull, 1832913141584498349ull, 16112888122468584970ull, 3196874214901911510ull}}, {{4564228254335046673ull, 11514513463835398745ull, 10917738116230955404ull, 3996092768627389388ull}}, {{14381857705027873931ull, 16419942951751900023ull, 16046958359499122935ull, 2497557980392118367ull}}, {{13365636112857454509ull, 15913242671262487125ull, 15447011930946515765ull, 3121947475490147959ull}}, {{2871987085789654424ull, 6056495283795945195ull, 14697078895255756803ull, 3902434344362684949ull}}, {{17935892993114391679ull, 1479466543158771794ull, 11491517318748541954ull, 2439021465226678093ull}}, {{13196494204538213791ull, 11072705215803240551ull, 529338593153513730ull, 3048776831533347617ull}}, {{11883931737245379335ull, 4617509482899274881ull, 5273359259869280067ull, 3810971039416684521ull}}, {{509928308137280228ull, 580100417598352849ull, 14825064583486769802ull, 2381856899635427825ull}}, {{5249096403598988189ull, 9948497558852716869ull, 4696272674076298540ull, 2977321124544284782ull}}, {{11173056522926123141ull, 12435621948565896086ull, 15093712879450148983ull, 3721651405680355977ull}}, {{2371474308401439059ull, 14689792745494766910ull, 2516041522015261258ull, 2326032128550222486ull}}, {{12187714922356574632ull, 9138868895013682829ull, 12368423939373852381ull, 2907540160687778107ull}}, {{1399585597663554577ull, 16035272137194491441ull, 10848843905789927572ull, 3634425200859722634ull}}, {{6361168015506831126ull, 1597346097783562685ull, 4337682845382633658ull, 4543031501074653293ull}}, {{6281573018905463406ull, 5610027329542114582ull, 5016894787577839988ull, 2839394688171658308ull}}, {{17075338310486605065ull, 7012534161927643227ull, 6271118484472299985ull, 3549243360214572885ull}}, {{16732486869680868427ull, 13377353720836941938ull, 12450584124017762885ull, 4436554200268216106ull}}, {{15069490311977930671ull, 10666689084736782663ull, 12393301095938489707ull, 2772846375167635066ull}}, {{14225176871545025435ull, 8721675337493590425ull, 6268254333068336326ull, 3466057968959543833ull}}, {{3946413034149118081ull, 1678722135012212224ull, 12447003934762808312ull, 4332572461199429791ull}}, {{2466508146343198801ull, 1049201334382632640ull, 14696906486867837051ull, 2707857788249643619ull}}, {{3083135182928998501ull, 15146559723260454512ull, 13759447090157408409ull, 3384822235312054524ull}}, {{3853918978661248126ull, 5098141598793404428ull, 17199308862696760512ull, 4231027794140068155ull}}, {{11632071398518055887ull, 3186338499245877767ull, 8443725029971781368ull, 2644392371337542597ull}}, {{9928403229720181955ull, 3982923124057347209ull, 15166342305892114614ull, 3305490464171928246ull}}, {{17022190055577615348ull, 14202025941926459819ull, 9734555845510367459ull, 4131863080214910308ull}}, {{8333025775522315640ull, 6570423204490343435ull, 15307469440298755470ull, 2582414425134318942ull}}, {{5804596200975506646ull, 17436401042467705102ull, 9910964763518668529ull, 3228018031417898678ull}}, {{16479117288074159116ull, 7960443247802467665ull, 3165333917543559854ull, 4035022539272373348ull}}, {{3381919277405267592ull, 363591011449154387ull, 11201705735319500717ull, 2521889087045233342ull}}, {{18062457152038748201ull, 5066174782738830887ull, 4778760132294600088ull, 3152361358806541678ull}}, {{17966385421621047348ull, 6332718478423538609ull, 15196822202223025918ull, 3940451698508177097ull}}, {{4311461860872072736ull, 17793007104296875343ull, 2580484848748309342ull, 2462782311567610686ull}}, {{777641307662703016ull, 13017886843516318371ull, 12448978097790162486ull, 3078477889459513357ull}}, {{14807109689860542482ull, 7048986517540622155ull, 1726164566955539396ull, 3848097361824391697ull}}, {{6948600546949145100ull, 13628988610317664655ull, 12608067900415681882ull, 2405060851140244810ull}}, {{4074064665259043470ull, 7812863726042305011ull, 6536712838664826545ull, 3006326063925306013ull}}, {{480894813146416434ull, 14377765675980269168ull, 12782577066758421085ull, 3757907579906632516ull}}, {{300559258216510271ull, 11291946556701362182ull, 17212482703578788986ull, 2348692237441645322ull}}, {{9599071109625413647ull, 4891561159021926919ull, 12292231342618710425ull, 2935865296802056653ull}}, {{7387152868604379155ull, 10726137467204796553ull, 1530231122991224319ull, 3669831621002570817ull}}, {{13845627104182861847ull, 8795985815578607787ull, 6524474922166418303ull, 4587289526253213521ull}}, {{6347673930900594703ull, 12415020162377711723ull, 15607011872422481199ull, 2867055953908258450ull}}, {{3322906395198355474ull, 10907089184544751750ull, 10285392803673325691ull, 3583819942385323063ull}}, {{13377005030852720151ull, 9022175462253551783ull, 8245054986164269210ull, 4479774927981653829ull}}, {{15278157171924031950ull, 10250545682335857768ull, 7459002375566362208ull, 2799859329988533643ull}}, {{650952391195488322ull, 12813182102919822211ull, 4712066951030564856ull, 3499824162485667054ull}}, {{14648748544276524114ull, 16016477628649777763ull, 15113455725642981878ull, 4374780203107083817ull}}, {{6849624830959133620ull, 5398612499478723198ull, 2528380800885781818ull, 2734237626941927386ull}}, {{17785403075553692832ull, 15971637661203179805ull, 12383848037962003080ull, 3417797033677409232ull}}, {{8396695789159952328ull, 1517803002794423141ull, 15479810047452503851ull, 4272246292096761540ull}}, {{7553777877438664157ull, 17089527941242372127ull, 451509242803039098ull, 2670153932560475963ull}}, {{4830536328370942293ull, 12138537889698189351ull, 14399444608785962585ull, 3337692415700594953ull}}, {{1426484392036289962ull, 1338114306840572977ull, 4164247705700289520ull, 4172115519625743692ull}}, {{12420767791091150986ull, 836321441775358110ull, 11826026852917456758ull, 2607572199766089807ull}}, {{6302587702009162925ull, 10268773839073973446ull, 10170847547719433043ull, 3259465249707612259ull}}, {{17101606664366229464ull, 8224281280415078903ull, 8101873416221903400ull, 4074331562134515324ull}}, {{17606033192869975271ull, 5140175800259424314ull, 14287042921993465433ull, 2546457226334072077ull}}, {{12784169454232693281ull, 11036905768751668297ull, 4023745597209668079ull, 3183071532917590097ull}}, {{2145153762508702889ull, 9184446192512197468ull, 9641368014939473003ull, 3978839416146987621ull}}, {{10564093138422715114ull, 3434435861106429465ull, 8331698018550864579ull, 2486774635091867263ull}}, {{17816802441455781796ull, 18128102881665200543ull, 5802936504761192819ull, 3108468293864834079ull}}, {{17659317033392339341ull, 18048442583654112775ull, 2641984612524103120ull, 3885585367331042599ull}}, {{17954602173511293944ull, 11280276614783820484ull, 8568769410468646306ull, 2428490854581901624ull}}, {{3996508643179565814ull, 4876973731624999798ull, 10710961763085807883ull, 3035613568227377030ull}}, {{14219007840829233075ull, 1484531146103861843ull, 4165330167002484046ull, 3794516960284221288ull}}, {{6581036891304576720ull, 14762890021597077364ull, 2603331354376552528ull, 2371573100177638305ull}}, {{8226296114130720900ull, 6868453286795089ull, 7865850211398078565ull, 2964466375222047881ull}}, {{14894556161090789029ull, 4620271585035881765ull, 14443998782674986110ull, 3705582969027559851ull}}, {{11614940609895437095ull, 16722727795929589815ull, 6721656229958172366ull, 2315989355642224907ull}}, {{9906989743941908465ull, 11680037708057211461ull, 3790384269020327554ull, 2894986694552781134ull}}, {{16995423198354773485ull, 5376675098216738518ull, 13961352373130185251ull, 3618733368190976417ull}}, {{12020906961088691049ull, 2109157854343535244ull, 3616632411130567852ull, 4523416710238720522ull}}, {{16736438887535207714ull, 10541595695819485335ull, 6872081275383992811ull, 2827135443899200326ull}}, {{16308862590991621738ull, 8565308601346968765ull, 17813473631084766822ull, 3533919304874000407ull}}, {{6551020183457363460ull, 1483263714828935149ull, 17655156020428570624ull, 4417399131092500509ull}}, {{6400230623874546115ull, 927039821768084468ull, 13340315521981550592ull, 2760874456932812818ull}}, {{8000288279843182643ull, 1158799777210105585ull, 7452022365622162432ull, 3451093071166016023ull}}, {{14612046368231366208ull, 1448499721512631981ull, 4703341938600315136ull, 4313866338957520029ull}}, {{11438371989358297832ull, 905312325945394988ull, 5245431720838890912ull, 2696166461848450018ull}}, {{14297964986697872290ull, 1131640407431743735ull, 15780161687903389448ull, 3370208077310562522ull}}, {{13260770214944952459ull, 1414550509289679669ull, 10501830073024461002ull, 4212760096638203153ull}}, {{10593824393554289239ull, 5495780086733437697ull, 18092858841708757886ull, 2632975060398876970ull}}, {{17853966510370249452ull, 16093097145271572929ull, 13392701515281171549ull, 3291218825498596213ull}}, {{8482400082680648103ull, 6281313376307302450ull, 2905818838819300725ull, 4114023531873245267ull}}, {{9913186070102792969ull, 6231663869405757983ull, 17957037838757920617ull, 2571264707420778291ull}}, {{7779796569201103307ull, 12401265855184585383ull, 17834611280020012867ull, 3214080884275972864ull}}, {{5113059693073991229ull, 10889896300553343825ull, 3846520026315464468ull, 4017601105344966081ull}}, {{14724877354239714279ull, 16029557224700615698ull, 13933290062515635052ull, 2511000690840603800ull}}, {{9182724655944867040ull, 1590202457166218007ull, 17416612578144543816ull, 3138750863550754750ull}}, {{6866719801503695896ull, 1987753071457772509ull, 12547393685825903962ull, 3923438579438443438ull}}, {{6597542885153503887ull, 5854031688088495722ull, 3230435035213802072ull, 2452149112149027149ull}}, {{17470300643296655667ull, 7317539610110619652ull, 8649729812444640494ull, 3065186390186283936ull}}, {{3391131730411267967ull, 18370296549493050374ull, 10812162265555800617ull, 3831482987732854920ull}}, {{15954515386789206192ull, 4563906315792074627ull, 6757601415972375386ull, 2394676867333034325ull}}, {{15331458215059119836ull, 14928254931594869092ull, 13058687788392857136ull, 2993346084166292906ull}}, {{717578695114348178ull, 213574590784034750ull, 7099987698636295613ull, 3741682605207866133ull}}, {{14283544739728631324ull, 2439327128453715670ull, 6743335320861378710ull, 2338551628254916333ull}}, {{8631058887806013347ull, 12272530947421920396ull, 13040855169504111291ull, 2923189535318645416ull}}, {{10788823609757516683ull, 10728977665850012591ull, 16301068961880139114ull, 3653986919148306770ull}}, {{8874343493769507950ull, 4187850045457739931ull, 11152964165495398085ull, 4567483648935383463ull}}, {{3240621674392248517ull, 4923249287624781409ull, 13888131631075705659ull, 2854677280584614664ull}}, {{8662463111417698550ull, 1542375591103588857ull, 17360164538844632074ull, 3568346600730768330ull}}, {{15439764907699511091ull, 11151341525734261879ull, 12476833636701014284ull, 4460433250913460413ull}}, {{16567382094953276288ull, 16192960490438689482ull, 10103864032151827879ull, 2787770781820912758ull}}, {{11485855581836819552ull, 15629514594620973949ull, 3406458003335009041ull, 3484713477276140948ull}}, {{522261422013860728ull, 5701835187994053725ull, 4258072504168761302ull, 4355891846595176185ull}}, {{2632256397972356907ull, 17398705047778447290ull, 14190510361173945573ull, 2722432404121985115ull}}, {{12513692534320221942ull, 7913323254440895400ull, 13126451933040044063ull, 3403040505152481394ull}}, {{15642115667900277427ull, 5279968049623731346ull, 7184692879445279271ull, 4253800631440601743ull}}, {{14388008310865061296ull, 10217509058655913947ull, 11407962077294381400ull, 2658625394650376089ull}}, {{13373324370153938716ull, 12771886323319892434ull, 424894541335813038ull, 3323281743312970112ull}}, {{7493283425837647587ull, 6741485867295089735ull, 531118176669766298ull, 4154102179141212640ull}}, {{11600831168789611598ull, 8825114685486818988ull, 331948860418603936ull, 2596313861963257900ull}}, {{14501038960987014497ull, 11031393356858523735ull, 414936075523254920ull, 3245392327454072375ull}}, {{13514612682806380218ull, 13789241696073154669ull, 14353728149686232362ull, 4056740409317590468ull}}, {{10752475935967681588ull, 13229962078473109572ull, 18194452130408671034ull, 2535462755823494042ull}}, {{13440594919959601985ull, 7314080561236611157ull, 13519693126156062985ull, 3169328444779367553ull}}, {{2965685594667338769ull, 13754286719973151851ull, 3064558352412915019ull, 3961660555974209442ull}}, {{17994454561162944395ull, 6290586190769525954ull, 6527034988685459791ull, 2476037847483880901ull}}, {{13269696164598904686ull, 3251546720034519539ull, 12770479754284212643ull, 3095047309354851126ull}}, {{11975434187321242953ull, 17899491455325313136ull, 6739727656000489995ull, 3868809136693563908ull}}, {{7484646367075776846ull, 8881339150364626758ull, 13435701821855082055ull, 2418005710433477442ull}}, {{132435921989945249ull, 6489987919528395544ull, 7571255240464076761ull, 3022507138041846803ull}}, {{165544902487431561ull, 12724170917837882334ull, 4852383032152708047ull, 3778133922552308504ull}}, {{13938523619336808438ull, 14870135851289758314ull, 3032739395095442529ull, 2361333701595192815ull}}, {{8199782487316234739ull, 4752611758830034181ull, 17625982299151466874ull, 2951667126993991018ull}}, {{14861414127572681328ull, 15164136735392318534ull, 12809105837084557784ull, 3689583908742488773ull}}, {{4676697811305537926ull, 9477585459620199084ull, 10311534157391542567ull, 2305989942964055483ull}}, {{5845872264131922408ull, 7235295806097860951ull, 8277731678312040305ull, 2882487428705069354ull}}, {{2695654311737515105ull, 13655805776049714093ull, 1123792561035274573ull, 3603109285881336693ull}}, {{7981253908099281786ull, 3234699164779978904ull, 6016426719721481121ull, 4503886607351670866ull}}, {{4988283692562051116ull, 13550902024055956575ull, 8371952718253313604ull, 2814929129594794291ull}}, {{1623668597275175991ull, 16938627530069945719ull, 5853254879389254101ull, 3518661411993492864ull}}, {{15864643801876133701ull, 7338226357305268436ull, 7316568599236567627ull, 4398326764991866080ull}}, {{692030339317807755ull, 2280548464102098821ull, 4572855374522854767ull, 2748954228119916300ull}}, {{5476723942574647598ull, 16685743635409787238ull, 5716069218153568458ull, 3436192785149895375ull}}, {{16069276965073085305ull, 11633807507407458239ull, 2533400504264572669ull, 4295240981437369219ull}}, {{16960827130811760172ull, 9576972701343355351ull, 17724276379661215582ull, 2684525613398355761ull}}, {{16589347895087312311ull, 2747843839824418381ull, 8320287419294355766ull, 3355657016747944702ull}}, {{6901626813576976676ull, 12658176836635298785ull, 1176987237263168899ull, 4194571270934930878ull}}, {{15842731804554080183ull, 5605517513683367788ull, 14570675078571644274ull, 2621607044334331798ull}}, {{1356670681983048613ull, 16230268928958985544ull, 8989971811359779534ull, 3277008805417914748ull}}, {{1695838352478810766ull, 11064464124343956122ull, 11237464764199724418ull, 4096261006772393435ull}}, {{5671584988726644633ull, 11526976096142360480ull, 4717572468411133809ull, 2560163129232745897ull}}, {{7089481235908305791ull, 573662064895786888ull, 10508651603941305166ull, 3200203911540932371ull}}, {{8861851544885382238ull, 9940449617974509418ull, 8524128486499243553ull, 4000254889426165464ull}}, {{10150343233980751803ull, 17741996057302538146ull, 5327580304062027220ull, 2500159305891353415ull}}, {{3464557005621163946ull, 3730750997918621067ull, 2047789361650146122ull, 3125199132364191769ull}}, {{18165754312308618644ull, 13886810784253052141ull, 7171422720490070556ull, 3906498915455239711ull}}, {{13659439454406580605ull, 17902628777012933396ull, 11399668227947375953ull, 2441561822159524819ull}}, {{17074299318008225756ull, 8543227915984003033ull, 9637899266506832038ull, 3051952277699406024ull}}, {{7507816092228118483ull, 1455662858125227984ull, 12047374083133540048ull, 3814940347124257530ull}}, {{4692385057642574052ull, 909789286328267490ull, 12141294820385850434ull, 2384337716952660956ull}}, {{15088853358907993373ull, 10360608644765110170ull, 15176618525482313042ull, 2980422146190826195ull}}, {{9637694661780215908ull, 3727388769101611905ull, 14359087138425503399ull, 3725527682738532744ull}}, {{17552774209681104702ull, 9247147008329589296ull, 8974429461515939624ull, 2328454801711582965ull}}, {{3494223688391829262ull, 11558933760411986621ull, 15829722845322312434ull, 2910568502139478706ull}}, {{8979465628917174481ull, 5225295163660207468ull, 10563781519798114735ull, 3638210627674348383ull}}, {{11224332036146468102ull, 1919932936147871431ull, 8593040881320255515ull, 4547763284592935479ull}}, {{13932736550232624420ull, 17340859149588277308ull, 12288179578466241552ull, 2842352052870584674ull}}, {{17415920687790780524ull, 3229329863275795019ull, 6136852436228026133ull, 3552940066088230843ull}}, {{17158214841311087751ull, 8648348347522131678ull, 3059379526857644762ull, 4441175082610288554ull}}, {{6112198257392041941ull, 10016903735628720203ull, 6523798222713415880ull, 2775734426631430346ull}}, {{3028561803312664522ull, 12521129669535900254ull, 17378119815246545658ull, 3469668033289287932ull}}, {{13009074290995606460ull, 6428040050065099509ull, 3275905695348630457ull, 4337085041611609916ull}}, {{10436514441085947990ull, 15546740077359156953ull, 11270813096447669843ull, 2710678151007256197ull}}, {{17657329069784822891ull, 14821739078271558287ull, 253458315277423592ull, 3388347688759070247ull}}, {{17459975318803640710ull, 80429774129896243ull, 14151880949378943203ull, 4235434610948837808ull}}, {{8606641565038581492ull, 16191169673327042816ull, 8844925593361839501ull, 2647146631843023630ull}}, {{10758301956298226865ull, 6403904036376639808ull, 1832784954847523569ull, 3308933289803779538ull}}, {{13447877445372783581ull, 12616566063898187664ull, 11514353230414180269ull, 4136166612254724422ull}}, {{8404923403357989738ull, 10191196799150061242ull, 2584784750581474764ull, 2585104132659202764ull}}, {{1282782217342711365ull, 12738995998937576553ull, 3230980938226843455ull, 3231380165824003455ull}}, {{6215163790105777110ull, 11312058980244582787ull, 17873784228065718031ull, 4039225207280004318ull}}, {{1578634359602416742ull, 13987565890293946098ull, 6559429124113685865ull, 2524515754550002699ull}}, {{11196664986357796735ull, 3649399307585268910ull, 3587600386714719428ull, 3155644693187503374ull}}, {{4772459196092470111ull, 4561749134481586138ull, 13707872520248175093ull, 3944555866484379217ull}}, {{7594473015985181723ull, 5156936218264685288ull, 1649891297514027577ull, 2465347416552737011ull}}, {{9493091269981477154ull, 11057856291258244514ull, 15897422177174698183ull, 3081684270690921263ull}}, {{2642992050622070634ull, 9210634345645417739ull, 15260091703040984825ull, 3852105338363651579ull}}, {{17792771096134651811ull, 17285861512096855846ull, 7231714305186921563ull, 2407565836477282237ull}}, {{13017591833313538955ull, 16995640871693681904ull, 13651328899911039858ull, 3009457295596602796ull}}, {{16271989791641923694ull, 12021179052762326572ull, 17064161124888799823ull, 3761821619495753495ull}}, {{946621582921426501ull, 14430765935617535964ull, 17582629730696581745ull, 2351138512184845934ull}}, {{1183276978651783126ull, 4203399364239756243ull, 12754915126515951374ull, 2938923140231057418ull}}, {{15314154278596892619ull, 14477621242154471111ull, 6720271871290163409ull, 3673653925288821773ull}}, {{14531006829818727870ull, 4261968497410925177ull, 13012025857540092166ull, 4592067406611027216ull}}, {{2164350240995623063ull, 16498788366163991948ull, 8132516160962557603ull, 2870042129131892010ull}}, {{2705437801244528829ull, 16011799439277602031ull, 942273164348421196ull, 3587552661414865013ull}}, {{17216855306837824748ull, 1568005225387450922ull, 5789527473862914400ull, 4484440826768581266ull}}, {{15372220585201028371ull, 980003265867156826ull, 8230140689591709404ull, 2802775516730363291ull}}, {{9991903694646509656ull, 1225004082333946033ull, 5675989843562248851ull, 3503469395912954114ull}}, {{17101565636735524974ull, 15366313158199596253ull, 16318359341307586871ull, 4379336744891192642ull}}, {{12994321532173397061ull, 16521474751515829514ull, 14810660606744629698ull, 2737085465556995401ull}}, {{7019529878361970518ull, 11428471402540011085ull, 4678267703148623411ull, 3421356831946244252ull}}, {{13386098366379851052ull, 9673903234747625952ull, 5847834628935779264ull, 4276696039932805315ull}}, {{8366311478987406907ull, 6046189521717266220ull, 1349053633871168088ull, 2672935024958003322ull}}, {{10457889348734258634ull, 7557736902146582775ull, 10909689079193735918ull, 3341168781197504152ull}}, {{8460675667490435388ull, 223799090828452661ull, 13637111348992169898ull, 4176460976496880190ull}}, {{7593765301395216070ull, 4751560450195170817ull, 3911508574692718282ull, 2610288110310550119ull}}, {{14103892645171407991ull, 15162822599598739329ull, 277699699938509948ull, 3262860137888187649ull}}, {{3794807751182096277ull, 506784175788872546ull, 4958810643350525340ull, 4078575172360234561ull}}, {{6983440862916198077ull, 9540112146722821149ull, 14628471698162548097ull, 2549109482725146600ull}}, {{13340987097072635501ull, 16536826201830914340ull, 18285589622703185121ull, 3186386853406433250ull}}, {{16676233871340794376ull, 6835974697006479213ull, 13633614991524205594ull, 3982983566758041563ull}}, {{12728489178801690437ull, 8884170204056437412ull, 6215166360488934544ull, 2489364729223775977ull}}, {{15910611473502113046ull, 11105212755070546765ull, 12380643969038556084ull, 3111705911529719971ull}}, {{6053206286595477595ull, 13881515943838183457ull, 10864118942870807201ull, 3889632389412149964ull}}, {{15312468975190643257ull, 1758418437257782804ull, 16013446376149030309ull, 2431020243382593727ull}}, {{693842145278752456ull, 6809709064999616410ull, 15405121951758899982ull, 3038775304228242159ull}}, {{10090674718453216377ull, 17735508368104296320ull, 14644716421271237073ull, 3798469130285302699ull}}, {{6306671699033260236ull, 4167163702424103344ull, 6847104754080829219ull, 2374043206428314187ull}}, {{7883339623791575295ull, 597268609602741276ull, 3947194924173648620ull, 2967554008035392734ull}}, {{9854174529739469118ull, 746585762003426595ull, 14157365692071836583ull, 3709442510044240917ull}}, {{3853016071873474247ull, 7384145128893223478ull, 11154196566758591816ull, 2318401568777650573ull}}, {{14039642126696618617ull, 9230181411116529347ull, 107687653166076058ull, 2898001960972063217ull}}, {{12937866639943385367ull, 2314354727040885876ull, 4746295584884982977ull, 3622502451215079021ull}}, {{16172333299929231709ull, 7504629427228495249ull, 10544555499533616625ull, 4528128064018848776ull}}, {{3190179284814687962ull, 16219608438086279291ull, 6590347187208510390ull, 2830080040011780485ull}}, {{17822782161300523664ull, 11051138510753073305ull, 12849620002438025892ull, 3537600050014725606ull}}, {{8443419646343490868ull, 13813923138441341632ull, 6838652966192756557ull, 4422000062518407008ull}}, {{5277137278964681793ull, 10939544970739532472ull, 4274158103870472848ull, 2763750039074004380ull}}, {{6596421598705852241ull, 13674431213424415590ull, 5342697629838091060ull, 3454687548842505475ull}}, {{17468899035237091109ull, 17093039016780519487ull, 2066686018870225921ull, 4318359436053131844ull}}, {{17835590924664263799ull, 3765620357846742823ull, 10515050798648667009ull, 2698974647533207402ull}}, {{17682802637402941845ull, 9318711465735816433ull, 3920441461456057953ull, 3373718309416509253ull}}, {{8268445241471513594ull, 16260075350597158446ull, 9512237845247460345ull, 4217147886770636566ull}}, {{556092257492308093ull, 3245018066482142173ull, 1333462634852274812ull, 2635717429231647854ull}}, {{5306801340292773020ull, 4056272583102677716ull, 10890200330420119323ull, 3294646786539559817ull}}, {{6633501675365966275ull, 458654710450959241ull, 18224436431452537058ull, 4118308483174449771ull}}, {{15675153593172198682ull, 4898345212459237429ull, 9084429760444141709ull, 2573942801984031107ull}}, {{5758883936183084640ull, 10734617534001434691ull, 6743851182127789232ull, 3217428502480038884ull}}, {{2586918901801467896ull, 13418271917501793364ull, 8429813977659736540ull, 4021785628100048605ull}}, {{10840196350480693243ull, 17609791985293396660ull, 7574476745251029289ull, 2513616017562530378ull}}, {{13550245438100866554ull, 8177181926334582113ull, 244723894709010804ull, 3142020021953162973ull}}, {{3102748742343919480ull, 10221477407918227642ull, 4917590886813651409ull, 3927525027441453716ull}}, {{6550903982392337579ull, 17917638426017362036ull, 12296866341113307938ull, 2454703142150908572ull}}, {{8188629977990421974ull, 13173675995666926737ull, 15371082926391634923ull, 3068378927688635715ull}}, {{14847473490915415371ull, 11855408976156270517ull, 14602167639562155750ull, 3835473659610794644ull}}, {{11585513941035828559ull, 2797944591670281169ull, 18349726811581123152ull, 2397171037256746652ull}}, {{646834371012621987ull, 3497430739587851462ull, 4490414440766852324ull, 2996463796570933316ull}}, {{10031915000620553292ull, 4371788424484814327ull, 5613018050958565405ull, 3745579745713666645ull}}, {{13187475903028927663ull, 5038210774516702906ull, 5813979291062797330ull, 2340987341071041653ull}}, {{7260972841931383771ull, 15521135505000654441ull, 11879160132255884566ull, 2926234176338802066ull}}, {{13687902070841617618ull, 10178047344396042243ull, 5625578128465079900ull, 3657792720423502583ull}}, {{12498191570124634118ull, 12722559180495052804ull, 2420286642153961971ull, 4572240900529378229ull}}, {{17034741768182672132ull, 5645756478595714050ull, 3818522160559920184ull, 2857650562830861393ull}}, {{12070055173373564357ull, 7057195598244642563ull, 9384838719127288134ull, 3572063203538576741ull}}, {{10475882948289567542ull, 18044866534660579012ull, 16342734417336498071ull, 4465079004423220926ull}}, {{15770798879535755522ull, 18195570611803943738ull, 5602522992407923390ull, 2790674377764513079ull}}, {{10490126562564918594ull, 13521091227900153865ull, 2391467722082516334ull, 3488342972205641349ull}}, {{17724344221633536147ull, 7677991998020416523ull, 7601020671030533322ull, 4360428715257051686ull}}, {{8771872129307266140ull, 9410431017190148231ull, 138951900966695422ull, 2725267947035657304ull}}, {{6353154143206694771ull, 2539666734632909481ull, 173689876208369278ull, 3406584933794571630ull}}, {{12553128697435756367ull, 12397955455145912659ull, 9440484382115237405ull, 4258231167243214537ull}}, {{5539862426683653778ull, 10054565168679889364ull, 17429517784890493138ull, 2661394479527009085ull}}, {{6924828033354567222ull, 3344834423995085897ull, 7951839175830952711ull, 3326743099408761357ull}}, {{13267721060120596932ull, 18016101085276021083ull, 14551484988216078792ull, 4158428874260951696ull}}, {{5986482653361679130ull, 11260063178297513177ull, 9094678117635049245ull, 2599018046413094810ull}}, {{12094789335129486817ull, 240020917589727759ull, 2144975610189035749ull, 3248772558016368513ull}}, {{10506800650484470617ull, 4911712165414547603ull, 7292905531163682590ull, 4060965697520460641ull}}, {{4260907397339100184ull, 16904878158666255964ull, 16087281003045771378ull, 2538103560950287900ull}}, {{5326134246673875230ull, 11907725661478044147ull, 1662357180097662607ull, 3172629451187859876ull}}, {{2045981789914956133ull, 10272971058420167280ull, 2077946475122078259ull, 3965786813984824845ull}}, {{1278738618696847583ull, 4114763902298910598ull, 3604559556164992864ull, 2478616758740515528ull}}, {{10821795310225835287ull, 5143454877873638247ull, 4505699445206241080ull, 3098270948425644410ull}}, {{8915558119354906205ull, 6429318597342047809ull, 14855496343362577158ull, 3872838685532055512ull}}, {{17101438870665286138ull, 17853382178620943592ull, 9284685214601610723ull, 2420524178457534695ull}}, {{2930054514622056056ull, 17705041704848791587ull, 6994170499824625500ull, 3025655223071918369ull}}, {{17497626198559733782ull, 3684558057351437867ull, 13354399143208169780ull, 3782069028839897961ull}}, {{8630173364886139662ull, 11526220822699424475ull, 1428970436864024256ull, 2363793143024936226ull}}, {{6176030687680286674ull, 14407776028374280594ull, 11009585082934806128ull, 2954741428781170282ull}}, {{16943410396455134150ull, 18009720035467850742ull, 4538609316813731852ull, 3693426785976462853ull}}, {{5977945479357070940ull, 2032702985312630906ull, 5142473832222276360ull, 2308391741235289283ull}}, {{16695803886051114483ull, 2540878731640788632ull, 1816406271850457546ull, 2885489676544111604ull}}, {{2423010783854341487ull, 12399470451405761599ull, 2270507839813071932ull, 3606862095680139505ull}}, {{16863821535100090571ull, 15499338064257201998ull, 7449820818193727819ull, 4508577619600174381ull}}, {{5928202441010168703ull, 7381243280947057297ull, 6961981020584773839ull, 2817861012250108988ull}}, {{12021939069690098783ull, 4614868082756433717ull, 8702476275730967299ull, 3522326265312636235ull}}, {{1192365781830459766ull, 1156899085018154243ull, 6266409326236321220ull, 4402907831640795294ull}}, {{16886129678139895018ull, 9946433964991122209ull, 17751563884179864474ull, 2751817394775497058ull}}, {{7272604042392705060ull, 3209670419384126954ull, 12966082818370054785ull, 3439771743469371323ull}}, {{18314127089845657133ull, 8623774042657546596ull, 11595917504535180577ull, 4299714679336714154ull}}, {{2222957394298759901ull, 16919073822729436383ull, 11859134458761875764ull, 2687321674585446346ull}}, {{16613754798155613588ull, 2702098204702243862ull, 5600546036597568898ull, 3359152093231807933ull}}, {{11543821460839741176ull, 12600994792732580636ull, 11612368564174349026ull, 4198940116539759916ull}}, {{16438260449879614043ull, 12487307763885250801ull, 16481102389463743949ull, 2624337572837349947ull}}, {{6712767507067353842ull, 1774076649574399790ull, 15989691968402292033ull, 3280421966046687434ull}}, {{17614331420688968111ull, 6829281830395387641ull, 10763742923648089233ull, 4100527457558359293ull}}, {{4091428110289523213ull, 15797516190065587036ull, 9033182336493749722ull, 2562829660973974558ull}}, {{5114285137861904017ull, 10523523200727207987ull, 2068105883762411345ull, 3203537076217468198ull}}, {{1781170403899992117ull, 17766090019336397888ull, 11808504391557789989ull, 4004421345271835247ull}}, {{1113231502437495073ull, 13409649271298942632ull, 14297844272364700599ull, 2502763340794897029ull}}, {{1391539378046868841ull, 12150375570696290386ull, 4037247285173712037ull, 3128454175993621287ull}}, {{10962796259413361859ull, 1352911408088199270ull, 434873088039752143ull, 3910567719992026609ull}}, {{2240061643705963258ull, 7763098657696206400ull, 11801010726093314849ull, 2444104824995016630ull}}, {{2800077054632454073ull, 14315559340547645904ull, 5527891370761867753ull, 3055131031243770788ull}}, {{3500096318290567591ull, 4059391120402393668ull, 6909864213452334692ull, 3818913789054713485ull}}, {{11410932235786380552ull, 11760491487106271850ull, 6624508142621403134ull, 2386821118159195928ull}}, {{5040293257878199882ull, 5477242322028064005ull, 8280635178276753918ull, 2983526397698994910ull}}, {{10912052590775137757ull, 16069924939389855814ull, 1127421935991166589ull, 3729407997123743638ull}}, {{2208346850807073194ull, 12349546096332353836ull, 14539696765276642830ull, 2330879998202339773ull}}, {{2760433563508841493ull, 6213560583560666487ull, 4339562901313639826ull, 2913599997752924717ull}}, {{17285600009668215578ull, 16990322766305608916ull, 10036139645069437686ull, 3641999997191155896ull}}, {{3160255938375717856ull, 12014531421027235338ull, 12545174556336797108ull, 4552499996488944870ull}}, {{6586845979912211564ull, 16732454174996797894ull, 3229048079283110288ull, 2845312497805590544ull}}, {{17456929511745040263ull, 2468823645036445751ull, 4036310099103887861ull, 3556640622256988180ull}}, {{17209475871253912425ull, 7697715574722945093ull, 5045387623879859826ull, 4445800777821235225ull}}, {{13061765428747389218ull, 9422758252629228587ull, 14682582310993382151ull, 2778625486138272015ull}}, {{11715520767506848618ull, 7166761797359147830ull, 13741541870314339785ull, 3473281857672840019ull}}, {{5421028922528784964ull, 13570138265126322692ull, 12565241319465536827ull, 4341602322091050024ull}}, {{12611515113435266411ull, 6175493406490257730ull, 7853275824665960517ull, 2713501451306906265ull}}, {{6541021854939307205ull, 12331052776540210067ull, 14428280799259838550ull, 3391876814133632831ull}}, {{3564591300246746103ull, 6190443933820486776ull, 13423664980647410284ull, 4239846017667041039ull}}, {{2227869562654216314ull, 13092399495492580043ull, 15307319640545713283ull, 2649903761041900649ull}}, {{16619895008599934105ull, 11753813350938337149ull, 5299091495399977892ull, 3312379701302375812ull}}, {{6939810705467753919ull, 14692266688672921437ull, 6623864369249972365ull, 4140474626627969765ull}}, {{6643224700131040152ull, 11488509689634269850ull, 6445758239994926680ull, 2587796641642481103ull}}, {{17527402912018575997ull, 14360637112042837312ull, 3445511781566270446ull, 3234745802053101379ull}}, {{3462509566313668380ull, 8727424353198770833ull, 18141947782240001770ull, 4043432252566376723ull}}, {{13693283525014512498ull, 10066326239176619674ull, 9032874354686307154ull, 2527145157853985452ull}}, {{7893232369413364814ull, 3359535762115998785ull, 11291092943357883943ull, 3158931447317481815ull}}, {{14478226480194093922ull, 18034477757927162193ull, 9502180160769967024ull, 3948664309146852269ull}}, {{2131362522480226845ull, 11271548598704476371ull, 8244705609694923342ull, 2467915193216782668ull}}, {{16499261208382447269ull, 4866063711525819655ull, 10305882012118654178ull, 3084893991520978335ull}}, {{16012390492050671182ull, 15305951676262050377ull, 8270666496720929818ull, 3856117489401222919ull}}, {{3090215029890587633ull, 14177905816091169390ull, 12086695588091662992ull, 2410073430875764324ull}}, {{13086140824218010349ull, 17722382270113961737ull, 15108369485114578740ull, 3012591788594705405ull}}, {{2522617974990349224ull, 3706233763932900556ull, 5050403801111059714ull, 3765739735743381757ull}}, {{10800008271223744073ull, 6928082120885450751ull, 5462345384908106273ull, 2353587334839613598ull}}, {{8888324320602292187ull, 13271788669534201343ull, 16051303767989908649ull, 2941984168549516997ull}}, {{6498719382325477330ull, 2754677781635587967ull, 6229071654705222100ull, 3677480210686896247ull}}, {{3511713209479458758ull, 3443347227044484959ull, 3174653549954139721ull, 4596850263358620309ull}}, {{9112349783565743580ull, 13681307062971272859ull, 4290001477935031277ull, 2873031414599137693ull}}, {{6778751211029791571ull, 3266575773431927362ull, 9974187865846177001ull, 3591289268248922116ull}}, {{17696811050642015271ull, 8694905735217297106ull, 12467734832307721251ull, 4489111585311152645ull}}, {{15672192925078647449ull, 3128473075297116739ull, 10098177279406019734ull, 2805694740819470403ull}}, {{14978555137920921407ull, 13133963380976171732ull, 8011035580830136763ull, 3507118426024338004ull}}, {{276449848691600143ull, 11805768207792826762ull, 10013794476037670954ull, 4383898032530422505ull}}, {{4784467173859637993ull, 11990291148297904630ull, 17787836593592014106ull, 2739936270331514065ull}}, {{15203956004179323299ull, 5764491898517604979ull, 8399737686707853921ull, 3424920337914392582ull}}, {{14393258986796766220ull, 11817300891574394128ull, 1276300071530041593ull, 4281150422392990728ull}}, {{8995786866747978888ull, 468284029592914474ull, 797687544706275996ull, 2675719013995619205ull}}, {{2021361546580197802ull, 585355036991143093ull, 5608795449310232899ull, 3344648767494524006ull}}, {{7138387951652635156ull, 14566751851521092578ull, 16234366348492566931ull, 4180810959368155007ull}}, {{9073178488210284877ull, 6798376897986988909ull, 17064007995448936188ull, 2613006849605096879ull}}, {{15953159128690244000ull, 8497971122483736136ull, 16718323975883782331ull, 3266258562006371099ull}}, {{1494704837153253384ull, 6010777884677282267ull, 16286218951427340010ull, 4082823202507963874ull}}, {{17075091587716641029ull, 8368422196350689320ull, 14790572863069475410ull, 2551764501567477421ull}}, {{2897120410936249670ull, 1237155708583585843ull, 4653158023554680551ull, 3189705626959346777ull}}, {{17456458568952475799ull, 15381502691011646015ull, 10428133547870738592ull, 3987132033699183471ull}}, {{17827815633236379231ull, 9613439181882278759ull, 13435112495060293476ull, 2491957521061989669ull}}, {{17673083523118086134ull, 12016798977352848449ull, 2958832563543203133ull, 3114946901327487087ull}}, {{8256296348615443956ull, 1185940666408896850ull, 17533598759711167629ull, 3893683626659358858ull}}, {{9771871236312040377ull, 3047055925719254483ull, 15570185243246867672ull, 2433552266662099286ull}}, {{7603153026962662567ull, 3808819907149068104ull, 10239359517203808782ull, 3041940333327624108ull}}, {{9503941283703328208ull, 13984396920791110938ull, 12799199396504760977ull, 3802425416659530135ull}}, {{10551649320741968034ull, 1822719047853362480ull, 14917028650456557467ull, 2376515885412206334ull}}, {{13189561650927460043ull, 16113456865098866812ull, 9422913776215921025ull, 2970644856765257918ull}}, {{16486952063659325053ull, 6306763026091419803ull, 2555270183415125474ull, 3713306070956572398ull}}, {{7998502030573384206ull, 8553412909734525281ull, 15432101919916617133ull, 2320816294347857748ull}}, {{14609813556644118162ull, 15303452155595544505ull, 843383326186219800ull, 2901020367934822186ull}}, {{4427208890522983990ull, 682571120784879016ull, 10277601194587550559ull, 3626275459918527732ull}}, {{5534011113153729988ull, 14688271956263262482ull, 12847001493234438198ull, 4532844324898159665ull}}, {{8070442964148469147ull, 4568483954237151147ull, 1111846905630442018ull, 2833027703061349791ull}}, {{5476367686758198529ull, 14933976979651214742ull, 15224866687320216234ull, 3541284628826687238ull}}, {{16068831645302523969ull, 9444099187709242619ull, 9807711322295494485ull, 4426605786033359048ull}}, {{7737176769100383529ull, 8208405001531970589ull, 6129819576434684053ull, 2766628616270849405ull}}, {{14283156979802867315ull, 14872192270342351140ull, 12273960488970742970ull, 3458285770338561756ull}}, {{17853946224753584144ull, 9366868301073163117ull, 15342450611213428713ull, 4322857212923202195ull}}, {{13464559399684684042ull, 17383507734239196708ull, 7283188622794698993ull, 2701785758077001372ull}}, {{16830699249605855052ull, 7894326612516832173ull, 9103985778493373742ull, 3377232197596251715ull}}, {{7203316006725155103ull, 644536228791264409ull, 6768296204689329274ull, 4221540246995314644ull}}, {{16031287550271691700ull, 5014521161421928159ull, 13453557164785606604ull, 2638462654372071652ull}}, {{15427423419412226721ull, 6268151451777410199ull, 16816946455982008255ull, 3298078317965089565ull}}, {{14672593255837895497ull, 3223503296294374845ull, 7186125014695346607ull, 4122597897456361957ull}}, {{11476213794112378638ull, 8932218587825066134ull, 6797171143398285581ull, 2576623685910226223ull}}, {{5121895205785697489ull, 15776959253208720572ull, 3884777910820469072ull, 3220779607387782779ull}}, {{6402369007232121861ull, 1274454992801349099ull, 244286370098198437ull, 4025974509234728474ull}}, {{1695637620306382211ull, 3102377379714537139ull, 4764364999738761927ull, 2516234068271705296ull}}, {{15954605080665141476ull, 17713029779925335135ull, 5955456249673452408ull, 3145292585339631620ull}}, {{15331570332404038941ull, 3694543151197117303ull, 7444320312091815511ull, 3931615731674539525ull}}, {{16499760485393606194ull, 9226618497139280170ull, 6958543204271078646ull, 2457259832296587203ull}}, {{11401328569887231935ull, 2309901084569324405ull, 4086492986911460404ull, 3071574790370734004ull}}, {{416602657076876206ull, 2887376355711655507ull, 5108116233639325505ull, 3839468487963417505ull}}, {{16401277725168905293ull, 13333825268388254451ull, 14721787692093048200ull, 2399667804977135940ull}}, {{15889911138033743712ull, 16667281585485318064ull, 18402234615116310250ull, 2999584756221419925ull}}, {{1415644848832628024ull, 11610729945001871773ull, 9167735213613224101ull, 3749480945276774907ull}}, {{3190621039734086467ull, 9562549224839863810ull, 3423991499294571111ull, 2343425590797984317ull}}, {{13211648336522383892ull, 7341500512622441858ull, 8891675392545601793ull, 2929281988497480396ull}}, {{7291188383798204057ull, 13788561659205440227ull, 11114594240682002241ull, 3661602485621850495ull}}, {{4502299461320367167ull, 3400644018724636572ull, 9281556782425114898ull, 4577003107027313119ull}}, {{12037309200180005287ull, 6737088530130285761ull, 12718502016656778667ull, 2860626941892070699ull}}, {{1211578444942842897ull, 3809674644235469298ull, 11286441502393585430ull, 3575783677365088374ull}}, {{10737845093033329429ull, 13985465342149112430ull, 4884679841137205979ull, 4469729596706360468ull}}, {{2099467164718442990ull, 6435072829629501317ull, 12276296937565529545ull, 2793580997941475292ull}}, {{7236019974325441641ull, 12655527055464264550ull, 15345371171956911931ull, 3491976247426844115ull}}, {{18268397004761577859ull, 11207722800902942783ull, 14570027946518752010ull, 4364970309283555144ull}}, {{18335277155617068018ull, 11616512768991727143ull, 9106267466574220006ull, 2728106443302221965ull}}, {{18307410426093947118ull, 5297268924384883121ull, 15994520351645162912ull, 3410133054127777456ull}}, {{9049204977335270186ull, 6621586155481103902ull, 1546406365846902024ull, 4262666317659721821ull}}, {{1044067092407155962ull, 4138491347175689939ull, 3272346987868007717ull, 2664166448537326138ull}}, {{15140141920791108665ull, 9784800202397000327ull, 13313805771689785454ull, 3330208060671657672ull}}, {{14313491382561497927ull, 3007628216141474601ull, 16642257214612231818ull, 4162760075839572090ull}}, {{2028403086459854348ull, 6491453653515809530ull, 15013096777560032790ull, 2601725047399732556ull}}, {{11758875894929593743ull, 17337689103749537720ull, 319626898240489371ull, 3252156309249665696ull}}, {{14698594868661992179ull, 17060425361259534246ull, 399533622800611714ull, 4065195386562082120ull}}, {{4574935774486357208ull, 15274451869214596808ull, 249708514250382321ull, 2540747116601301325ull}}, {{5718669718107946510ull, 5258006781236082298ull, 4923821661240365806ull, 3175933895751626656ull}}, {{16371709184489708946ull, 15795880513399878680ull, 6154777076550457257ull, 3969917369689533320ull}}, {{10232318240306068091ull, 2954896293233842319ull, 3846735672844035786ull, 2481198356055958325ull}}, {{8178711781955197210ull, 12916992403397078707ull, 9420105609482432636ull, 3101497945069947906ull}}, {{5611703709016608608ull, 16146240504246348384ull, 2551759974998264987ull, 3876872431337434883ull}}, {{3507314818135380380ull, 7785557305940273788ull, 17735751048869773281ull, 2423045269585896801ull}}, {{4384143522669225475ull, 14343632650852730139ull, 8334630755805052889ull, 3028806586982371002ull}}, {{868493384909143940ull, 4094482758283748962ull, 1194916407901540304ull, 3786008233727963753ull}}, {{5154494383995602867ull, 2559051723927343101ull, 12276037801006932450ull, 2366255146079977345ull}}, {{11054803998421891487ull, 12422186691763954684ull, 1509989195976501850ull, 2957818932599971682ull}}, {{13818504998027364359ull, 6304361327850167547ull, 11110858531825403121ull, 3697273665749964602ull}}, {{6330722614553408772ull, 15469440875974824477ull, 11555972600818264854ull, 2310796041093727876ull}}, {{12525089286619148869ull, 10113429058113754788ull, 14444965751022831068ull, 2888495051367159845ull}}, {{15656361608273936087ull, 12641786322642193485ull, 4221149133496375123ull, 3610618814208949807ull}}, {{5735393955060256396ull, 11190546884875353953ull, 664750398443081000ull, 4513273517761187259ull}}, {{15113836267981130008ull, 6994091803047096220ull, 16556370063522783289ull, 2820795948600742036ull}}, {{445551261266860894ull, 13354300772236258180ull, 2248718505693927495ull, 3525994935750927546ull}}, {{556939076583576117ull, 12081189946867934821ull, 12034270168972185177ull, 4407493669688659432ull}}, {{2653929932078429025ull, 633214689151377407ull, 7521418855607615736ull, 2754683543555412145ull}}, {{17152470470380199993ull, 791518361439221758ull, 14013459587936907574ull, 3443354429444265181ull}}, {{12217216051120474184ull, 10212769988653803006ull, 3681766429638970755ull, 4304193036805331477ull}}, {{3024074013522908461ull, 4077138233694932927ull, 4606947027738050674ull, 2690120648003332173ull}}, {{17615150572185799288ull, 14319794828973441966ull, 10370369803099951246ull, 3362650810004165216ull}}, {{12795566178377473302ull, 8676371499362026650ull, 12962962253874939058ull, 4203313512505206520ull}}, {{12608914879913308718ull, 10034418205528654560ull, 8101851408671836911ull, 2627070945315754075ull}}, {{15761143599891635897ull, 7931336738483430296ull, 5515628242412408235ull, 3283838681644692594ull}}, {{1254685426154993256ull, 5302484904676899967ull, 16117907339870286102ull, 4104798352055865742ull}}, {{7701707418987952641ull, 17149111120705226191ull, 5462006068991540909ull, 2565498970034916089ull}}, {{5015448255307552897ull, 7601330845599369027ull, 11439193604666814041ull, 3206873712543645111ull}}, {{1657624300707053217ull, 14113349575426599188ull, 9687305987406129647ull, 4008592140679556389ull}}, {{10259387224796684069ull, 15738372512282706348ull, 8360409251342524981ull, 2505370087924722743ull}}, {{12824234030995855086ull, 5837907585071219223ull, 5838825545750768323ull, 3131712609905903429ull}}, {{11418606520317430953ull, 2685698462911636125ull, 11910217950615848308ull, 3914640762382379286ull}}, {{9442472084412088298ull, 10901933576174548386ull, 2832200200707517288ull, 2446650476488987054ull}}, {{2579718068660334564ull, 13627416970218185483ull, 12763622287739172418ull, 3058313095611233817ull}}, {{17059705641107581917ull, 7810899175917956045ull, 2119469804391801811ull, 3822891369514042272ull}}, {{12968159034905932651ull, 2575968975735028576ull, 1324668627744876132ull, 2389307105946276420ull}}, {{16210198793632415813ull, 3219961219668785720ull, 1655835784681095165ull, 2986633882432845525ull}}, {{1816004418330968150ull, 8636637543013370055ull, 6681480749278756860ull, 3733292353041056906ull}}, {{8052531789097936950ull, 14621270501238132092ull, 8787611486726610941ull, 2333307720650660566ull}}, {{10065664736372421187ull, 4441530071265501403ull, 1761142321553487869ull, 2916634650813325708ull}}, {{7970394902038138580ull, 10163598607509264658ull, 2201427901941859836ull, 3645793313516657135ull}}, {{739621590692897417ull, 12704498259386580823ull, 16586842932709488507ull, 4557241641895821418ull}}, {{7379792521824142742ull, 5634468402902919062ull, 14978462851370818221ull, 2848276026184888386ull}}, {{1368615425402619ull, 11654771522056036732ull, 9499706527358746968ull, 3560345032731110483ull}}, {{1710769281753274ull, 14568464402570045915ull, 7262947140771045806ull, 4450431290913888104ull}}, {{16141970295296953460ull, 4493604233178890792ull, 4539341962981903629ull, 2781519556821180065ull}}, {{1730718795411640209ull, 10228691309901001395ull, 10285863472154767440ull, 3476899446026475081ull}}, {{15998456549546713974ull, 12785864137376251743ull, 17469015358620847204ull, 4346124307533093851ull}}, {{16916564371107778090ull, 17214537122714933147ull, 8612291589924335550ull, 2716327692208183657ull}}, {{16534019445457334708ull, 12294799366538890626ull, 15377050505832807342ull, 3395409615260229571ull}}, {{11444152269966892577ull, 6145127171318837475ull, 14609627113863621274ull, 4244262019075286964ull}}, {{4846752159515613909ull, 8452390500501661326ull, 18354388983019539104ull, 2652663761922054352ull}}, {{15281812236249293194ull, 10565488125627076657ull, 4496242155064872264ull, 3315829702402567941ull}}, {{5267207240029452780ull, 13206860157033845822ull, 10231988712258478234ull, 4144787128003209926ull}}, {{17127062580300571700ull, 12865973616573541542ull, 1783306926734160992ull, 2590491955002006204ull}}, {{12185456188520938817ull, 16082467020716926928ull, 2229133658417701240ull, 3238114943752507755ull}}, {{15231820235651173521ull, 1656339702186607044ull, 16621475128304290263ull, 4047643679690634693ull}}, {{296515610427207643ull, 7952741341507711259ull, 12694264964403875366ull, 2529777299806646683ull}}, {{14205702568316173265ull, 717554640029863265ull, 11256145187077456304ull, 3162221624758308354ull}}, {{3922070155113052869ull, 896943300037329082ull, 4846809446992044572ull, 3952777030947885443ull}}, {{7062979865373045947ull, 9783961599378106484ull, 723412895156333905ull, 2470485644342428402ull}}, {{8828724831716307434ull, 16841638017650021009ull, 10127638155800193189ull, 3088107055428035502ull}}, {{15647592058072772197ull, 7216989466780362549ull, 3436175657895465679ull, 3860133819285044378ull}}, {{12085588045509176575ull, 11428147444378808449ull, 6759295804612053953ull, 2412583637053152736ull}}, {{1271927001604307007ull, 450126250191346850ull, 8449119755765067442ull, 3015729546316440920ull}}, {{10813280788860159566ull, 9786029849593959370ull, 10561399694706334302ull, 3769661932895551150ull}}, {{11369986511464987633ull, 1504582637568836702ull, 1989188790764071035ull, 2356038708059719469ull}}, {{4989111102476458733ull, 15715786352243209590ull, 7098172006882476697ull, 2945048385074649336ull}}, {{15459760914950349224ull, 5809674885021848275ull, 8872715008603095872ull, 3681310481343311670ull}}, {{14713015125260548626ull, 7262093606277310344ull, 1867521723899094032ull, 4601638101679139588ull}}, {{9195634453287842892ull, 4538808503923318965ull, 10390573114291709578ull, 2876023813549462242ull}}, {{16106229085037191518ull, 14896882666758924514ull, 3764844356009861164ull, 3595029766936827803ull}}, {{10909414319441713590ull, 174359259739104027ull, 94369426584938552ull, 4493787208671034754ull}}, {{4512540940437377042ull, 108974537336940017ull, 4670666910042974499ull, 2808617005419396721ull}}, {{10252362193974109206ull, 13971276226953338733ull, 10450019655981106027ull, 3510771256774245901ull}}, {{17427138760895024412ull, 12852409265264285512ull, 17674210588403770438ull, 4388464070967807376ull}}, {{10891961725559390258ull, 3421069772362790541ull, 11046381617752356524ull, 2742790044354879610ull}}, {{18226638175376625726ull, 4276337215453488176ull, 4584604985335669847ull, 3428487555443599513ull}}, {{4336553645511230541ull, 733735500889472317ull, 10342442250096975213ull, 4285609444304499391ull}}, {{5016189037658213040ull, 2764427697269614150ull, 13381555433951691364ull, 2678505902690312119ull}}, {{15493608333927542108ull, 3455534621587017687ull, 12115258274012226301ull, 3348132378362890149ull}}, {{14755324398982039731ull, 8931104295411160013ull, 1309014787233119164ull, 4185165472953612687ull}}, {{11527920758577468784ull, 14805312221486750816ull, 7735663269661781333ull, 2615728420596007929ull}}, {{14409900948221835980ull, 4671582221576274808ull, 14281265105504614571ull, 3269660525745009911ull}}, {{18012376185277294975ull, 1227791758542955606ull, 13239895363453380310ull, 4087075657181262389ull}}, {{6646049097370921456ull, 14602427904371510966ull, 10580777611372056645ull, 2554422285738288993ull}}, {{17530933408568427627ull, 4417976825182224995ull, 17837658032642458711ull, 3193027857172861241ull}}, {{17301980742283146630ull, 910785013050393340ull, 8462014485520909677ull, 3991284821466076552ull}}, {{1590365927072190836ull, 2875083642370189790ull, 5288759053450568548ull, 2494553013416297845ull}}, {{11211329445695014353ull, 3593854552962737237ull, 11222634835240598589ull, 3118191266770372306ull}}, {{179103751836604229ull, 9104004209630809451ull, 4804921507195972428ull, 3897739083462965383ull}}, {{16252840909393735307ull, 14913374667874031714ull, 9920604969638564623ull, 2436086927164353364ull}}, {{11092679099887393326ull, 14030032316415151739ull, 12400756212048205779ull, 3045108658955441705ull}}, {{9254162856431853753ull, 12925854377091551770ull, 1665887209778093512ull, 3806385823694302132ull}}, {{10395537803697296500ull, 8078658985682219856ull, 10264551542966084253ull, 2378991139808938832ull}}, {{12994422254621620625ull, 14710009750530162724ull, 12830689428707605316ull, 2973738924761173540ull}}, {{16243027818277025781ull, 18387512188162703405ull, 16038361785884506645ull, 3717173655951466925ull}}, {{12457735395636835065ull, 13798038126815383580ull, 12329819125391510605ull, 2323233534969666828ull}}, {{15572169244546043832ull, 3412489603237065763ull, 15412273906739388257ull, 2904041918712083535ull}}, {{14853525537255166885ull, 8877298022473720108ull, 14653656364996847417ull, 3630052398390104419ull}}, {{120162847859406991ull, 15708308546519538040ull, 13705384437818671367ull, 4537565497987630524ull}}, {{75101779912129369ull, 16735221869215793131ull, 17789237310491445412ull, 2835978436242269077ull}}, {{13928935280172325423ull, 2472283262810189797ull, 8401488582832143054ull, 3544973045302836347ull}}, {{3576111044933243067ull, 12313726115367513055ull, 5890174710112790913ull, 4431216306628545434ull}}, {{9152598430724358773ull, 778549794463613803ull, 8293045212247882225ull, 2769510191642840896ull}}, {{6829062019978060562ull, 5584873261506905158ull, 10366306515309852781ull, 3461887739553551120ull}}, {{17759699561827351511ull, 11592777595311019351ull, 12957883144137315976ull, 4327359674441938900ull}}, {{18017341253783176550ull, 7245485997069387094ull, 17322049001940598293ull, 2704599796526211812ull}}, {{13298304530374194880ull, 13668543514764121772ull, 3205817178716196250ull, 3380749745657764766ull}}, {{16622880662967743600ull, 7862307356600376407ull, 13230643510250021121ull, 4225937182072205957ull}}, {{17306829441995921606ull, 16443157143943705014ull, 10574995203119957152ull, 2641210738795128723ull}}, {{12410164765640126199ull, 2107202356220079652ull, 8607057985472558537ull, 3301513423493910904ull}}, {{15512705957050157749ull, 7245688963702487469ull, 10758822481840698171ull, 4126891779367388630ull}}, {{12001284232370042545ull, 2222712593100360716ull, 2112578032723048453ull, 2579307362104617894ull}}, {{15001605290462553182ull, 7390076759802838799ull, 11864094577758586374ull, 3224134202630772367ull}}, {{14140320594650803573ull, 14223912898772691ull, 10218432203770845064ull, 4030167753288465459ull}}, {{6531857362443058281ull, 8889945561732932ull, 4080677118143084213ull, 2518854845805290912ull}}, {{8164821703053822851ull, 4622798450379554069ull, 5100846397678855266ull, 3148568557256613640ull}}, {{14817713147244666468ull, 15001870099829218394ull, 6376057997098569082ull, 3935710696570767050ull}}, {{13872756735455304447ull, 13987854830820649400ull, 8596722266613993580ull, 2459819185356729406ull}}, {{17340945919319130558ull, 17484818538525811750ull, 1522530796412716167ull, 3074773981695911758ull}}, {{12452810362294137390ull, 17244337154729876784ull, 11126535532370671017ull, 3843467477119889697ull}}, {{7783006476433835869ull, 3860181694065091134ull, 36555680090587530ull, 2402167173199931061ull}}, {{505386058687519028ull, 14048599154436139726ull, 4657380618540622316ull, 3002708966499913826ull}}, {{9855104610214174593ull, 17560748943045174657ull, 15045097810030553703ull, 3753386208124892282ull}}, {{17688655427452328881ull, 17892997117044316016ull, 14014872149696483968ull, 2345866380078057676ull}}, {{3664075210605859485ull, 3919502322595843405ull, 17518590187120604961ull, 2932332975097572095ull}}, {{9191780031684712260ull, 9511063921672192160ull, 17286551715473368297ull, 3665416218871965119ull}}, {{11489725039605890325ull, 16500515920517628104ull, 16996503625914322467ull, 4581770273589956399ull}}, {{7181078149753681453ull, 8006979441109823613ull, 17540343793837533398ull, 2863606420993722749ull}}, {{13588033705619489720ull, 785352264532503708ull, 8090371687014753036ull, 3579508026242153437ull}}, {{16985042132024362150ull, 981690330665629635ull, 14724650627195829199ull, 4474385032802691796ull}}, {{8309808323301532392ull, 7531085484307100378ull, 18426278678852169057ull, 2796490645501682372ull}}, {{1163888367272139682ull, 14025542873811263377ull, 4586104274855659705ull, 3495613306877102966ull}}, {{6066546477517562506ull, 3696870536981915509ull, 14956002380424350440ull, 4369516633596378707ull}}, {{6097434557662170519ull, 2310544085613697193ull, 7041658478551525073ull, 2730947895997736692ull}}, {{12233479215505101052ull, 7499866125444509395ull, 8802073098189406341ull, 3413684869997170865ull}}, {{10680163000953988411ull, 13986518675233024648ull, 15614277391164145830ull, 4267106087496463581ull}}, {{6675101875596242757ull, 4129888153593252501ull, 12064766378691285096ull, 2666941304685289738ull}}, {{12955563362922691350ull, 5162360191991565626ull, 5857585936509330562ull, 3333676630856612173ull}}, {{6971082166798588380ull, 15676322276844232841ull, 11933668439064051106ull, 4167095788570765216ull}}, {{15886141400317587497ull, 14409387441455033429ull, 7458542774415031941ull, 2604434867856728260ull}}, {{6022618695114820660ull, 4176676246536628075ull, 9323178468018789927ull, 3255543584820910325ull}}, {{2916587350466137921ull, 609159289743397190ull, 16265659103450875313ull, 4069429481026137906ull}}, {{15657925149323499913ull, 11909939602158093003ull, 14777722958084184974ull, 2543393425641336191ull}}, {{14960720418226986987ull, 5664052465842840446ull, 13860467679177843314ull, 3179241782051670239ull}}, {{9477528485928957925ull, 16303437619158326366ull, 12713898580544916238ull, 3974052227564587799ull}}, {{1311769285278210799ull, 5577962493546566075ull, 14863715640481654505ull, 2483782642227867374ull}}, {{15474769661879927211ull, 11584139135360595497ull, 9356272513747292323ull, 3104728302784834218ull}}, {{5508404022067745302ull, 9868487900773356468ull, 2471968605329339596ull, 3880910378481042773ull}}, {{12666124550647116622ull, 15391176974838123600ull, 3850823387544531199ull, 2425568986550651733ull}}, {{15832655688308895777ull, 14627285200120266596ull, 9425215252858051903ull, 3031961233188314666ull}}, {{1344075536676568105ull, 13672420481722945342ull, 2558147029217789071ull, 3789951541485393333ull}}, {{14675105265705018778ull, 15462791828717922694ull, 3904684902474812121ull, 2368719713428370833ull}}, {{9120509545276497664ull, 5493431730615239656ull, 9492542146520903056ull, 2960899641785463541ull}}, {{11400636931595622080ull, 6866789663269049570ull, 16477363701578516724ull, 3701124552231829426ull}}, {{11737084100674651704ull, 13515115576397931789ull, 14910038331913960856ull, 2313202845144893391ull}}, {{836297070561150918ull, 16893894470497414737ull, 14025861896465063166ull, 2891503556431116739ull}}, {{5657057356628826552ull, 11893996051266992613ull, 12920641352153941054ull, 3614379445538895924ull}}, {{11683007714213421094ull, 5644123027228964958ull, 16150801690192426318ull, 4517974306923619905ull}}, {{2690193802956000280ull, 17362634947300266811ull, 3176722028729184592ull, 2823733941827262441ull}}, {{17197800308977164061ull, 3256549610415781897ull, 8582588554338868645ull, 3529667427284078051ull}}, {{7662192330939291365ull, 8682373031447115276ull, 6116549674496197902ull, 4412084284105097564ull}}, {{14012242243691832911ull, 814797126227059143ull, 13046215583414899497ull, 2757552677565685977ull}}, {{12903616786187403235ull, 5630182426211211833ull, 2472711423986460659ull, 3446940846957107472ull}}, {{2294462927452090331ull, 2426042014336626888ull, 3090889279983075824ull, 4308676058696384340ull}}, {{1434039329657556457ull, 1516276258960391805ull, 11155177836844198198ull, 2692922536685240212ull}}, {{6404235180499333475ull, 11118717360555265564ull, 13943972296055247747ull, 3366153170856550265ull}}, {{8005293975624166844ull, 9286710682266694051ull, 3594907314786895972ull, 4207691463570687832ull}}, {{2697465725551410326ull, 15027566213271459590ull, 2246817071741809982ull, 2629807164731679895ull}}, {{12595204193794038715ull, 9561085729734548679ull, 16643579394959426190ull, 3287258955914599868ull}}, {{11132319223815160490ull, 2727985125313410041ull, 2357730169989731122ull, 4109073694893249836ull}}, {{40170487243393450ull, 6316676721748269180ull, 10696953393098357759ull, 2568171059308281147ull}}, {{50213109054241813ull, 3284159883757948571ull, 8759505722945559295ull, 3210213824135351434ull}}, {{13897824441599965978ull, 17940257909979599425ull, 1726010116827173310ull, 4012767280169189293ull}}, {{1768611248358896880ull, 6600975175309861737ull, 3384599332230677271ull, 2507979550105743308ull}}, {{6822450078876009004ull, 3639532950709939267ull, 4230749165288346589ull, 3134974437632179135ull}}, {{3916376580167623351ull, 9161102206814811988ull, 676750438183045332ull, 3918718047040223919ull}}, {{11671107399459540403ull, 14949060916114033300ull, 7340498051505485188ull, 2449198779400139949ull}}, {{14588884249324425503ull, 239582071432990009ull, 13787308582809244390ull, 3061498474250174936ull}}, {{4401047256373368167ull, 9522849626146013320ull, 17234135728511555487ull, 3826873092812718670ull}}, {{2750654535233355105ull, 12869310043982340181ull, 6159648811892334275ull, 2391795683007949169ull}}, {{8050004187469081785ull, 11474951536550537322ull, 12311247033292805748ull, 2989744603759936461ull}}, {{839133197481576423ull, 14343689420688171653ull, 1554000736333843473ull, 3737180754699920577ull}}, {{2830301257639679216ull, 2047276860289025427ull, 12500465506277121931ull, 2335737971687450360ull}}, {{17372934627331762732ull, 16394154130643445495ull, 15625581882846402413ull, 2919672464609312950ull}}, {{17104482265737315511ull, 6657634608022143157ull, 10308605316703227209ull, 3649590580761641188ull}}, {{7545544776889480677ull, 12933729278455066851ull, 12885756645879034011ull, 4561988225952051485ull}}, {{2410122476342231471ull, 5777737789820722830ull, 10359440912888090209ull, 2851242641220032178ull}}, {{12236025132282565147ull, 11833858255703291441ull, 3725929104255336953ull, 3564053301525040223ull}}, {{1459973360071042721ull, 957264764346950590ull, 45725361891783288ull, 4455066626906300279ull}}, {{14747541405326565413ull, 598290477716844118ull, 6946107378823446411ull, 2784416641816437674ull}}, {{9211054719803430958ull, 14582921152428218860ull, 17906006260384083821ull, 3480520802270547092ull}}, {{11513818399754288698ull, 4393593385253109863ull, 3935763751770553161ull, 4350651002838183866ull}}, {{14113665527487512292ull, 14275210911851663424ull, 7071538363283983629ull, 2719156876773864916ull}}, {{17642081909359390365ull, 4008955584532415568ull, 8839422954104979537ull, 3398946095967331145ull}}, {{3605858312989686340ull, 9622880499092907365ull, 15660964711058612325ull, 4248682619959163931ull}}, {{4559504454832247915ull, 8320143321146761055ull, 7482259935197938751ull, 2655426637474477457ull}}, {{1087694550112921990ull, 5788493133006063415ull, 13964510937424811343ull, 3319283296843096821ull}}, {{15194676242923316199ull, 2623930397830191364ull, 3620580616498850467ull, 4149104121053871027ull}}, {{273300614972296816ull, 17780857563139727267ull, 18403763949807639205ull, 2593190075658669391ull}}, {{14176683823997534732ull, 8391013898642495371ull, 18393018918832161103ull, 3241487594573336739ull}}, {{13109168761569530511ull, 5877081354875731310ull, 18379587630112813475ull, 4051859493216670924ull}}, {{3581544457553568666ull, 1367332837583638117ull, 2263870231965732614ull, 2532412183260419328ull}}, {{9088616590369348736ull, 10932538083834323454ull, 2829837789957165767ull, 3165515229075524160ull}}, {{2137398701106910112ull, 9053986586365516414ull, 3537297237446457209ull, 3956894036344405200ull}}, {{15170932243473982532ull, 17187956662546917518ull, 2210810773404035755ull, 2473058772715253250ull}}, {{9740293267487702357ull, 16873259809756258994ull, 11986885503609820502ull, 3091323465894066562ull}}, {{2951994547504852138ull, 11868202725340547935ull, 5760234842657499820ull, 3864154332367583203ull}}, {{8762525619831614443ull, 16640998740192618267ull, 1294303767447243435ull, 2415096457729739502ull}}, {{6341471006362130149ull, 16189562406813384930ull, 10841251746163830102ull, 3018870572162174377ull}}, {{17150210794807438494ull, 11013580971661955354ull, 18163250701132175532ull, 3773588215202717971ull}}, {{15330567765182036963ull, 16106860144143497904ull, 9046188678993915755ull, 2358492634501698732ull}}, {{716465632767994588ull, 15521889161751984477ull, 11307735848742394694ull, 2948115793127123415ull}}, {{5507268059387381139ull, 10178989415335204788ull, 9522983792500605464ull, 3685144741408904269ull}}, {{6884085074234226423ull, 12723736769169005985ull, 16515415759053144734ull, 4606430926761130336ull}}, {{15831768217464861275ull, 3340649462303240836ull, 10322134849408215459ull, 2879019329225706460ull}}, {{1342966198121524977ull, 18010869883161214758ull, 12902668561760269323ull, 3598774161532133075ull}}, {{10902079784506682029ull, 17901901335524130543ull, 11516649683772948750ull, 4498467701915166344ull}}, {{13731328892957758125ull, 6577002316275193685ull, 7197906052358092969ull, 2811542313696978965ull}}, {{3329103060915033944ull, 12832938913771380011ull, 13609068583875004115ull, 3514427892121223706ull}}, {{17996436881425956141ull, 11429487623786837109ull, 7787963692988979336ull, 4393034865151529633ull}}, {{13553616060104916541ull, 7143429764866773193ull, 16396692354186581845ull, 2745646790719706020ull}}, {{3106962019848981964ull, 13540973224510854396ull, 2049121369023675690ull, 3432058488399632526ull}}, {{3883702524811227454ull, 7702844493783792187ull, 11784773748134370421ull, 4290073110499540657ull}}, {{121471068793323207ull, 7120120817828564069ull, 447954564942899657ull, 2681295694062212911ull}}, {{4763524854419041913ull, 13511837040713092990ull, 14395001261460788283ull, 3351619617577766138ull}}, {{15177778104878578199ull, 12278110282463978333ull, 8770379539971209546ull, 4189524521972207673ull}}, {{11791954324762805326ull, 12285504944967374362ull, 17010702258550475726ull, 2618452826232629795ull}}, {{5516570869098730850ull, 6133509144354442145ull, 16651691804760706754ull, 3273066032790787244ull}}, {{11507399604800801466ull, 16890258467297828489ull, 2367870682241331826ull, 4091332540988484056ull}}, {{274595725359419061ull, 15168097560488530710ull, 1479919176400832391ull, 2557082838117802535ull}}, {{9566616693554049634ull, 14348435932183275483ull, 15684957025783204201ull, 3196353547647253168ull}}, {{7346584848515174138ull, 4100486859946930642ull, 1159452208519453636ull, 3995441934559066461ull}}, {{9203301548749371740ull, 11786176324321607459ull, 3030500639538352474ull, 2497151209099416538ull}}, {{6892440917509326771ull, 5509348368547233516ull, 13011497836277716401ull, 3121439011374270672ull}}, {{8615551146886658464ull, 11498371479111429799ull, 16264372295347145501ull, 3901798764217838340ull}}, {{12302248494445243396ull, 9492325183658337576ull, 941860647737190130ull, 2438624227636148963ull}}, {{15377810618056554245ull, 2642034442718146162ull, 15012383864953651375ull, 3048280284545186203ull}}, {{9998891235715916998ull, 17137601108679846415ull, 14153793812764676314ull, 3810350355681482754ull}}, {{13166836049963529980ull, 15322686711352291913ull, 13457807151405310600ull, 2381468972300926721ull}}, {{2623487007172248763ull, 706614315480813276ull, 2987200883974474539ull, 2976836215376158402ull}}, {{3279358758965310954ull, 14718325949633180307ull, 12957373141822868981ull, 3721045269220198002ull}}, {{18190500288849177010ull, 11504796727734431643ull, 12710044232066681017ull, 2325653293262623751ull}}, {{18126439342634083359ull, 545937854385875842ull, 11275869271655963368ull, 2907066616578279689ull}}, {{13434677141437828390ull, 682422317982344803ull, 259778534287790498ull, 3633833270722849612ull}}, {{12181660408369897584ull, 10076399934332706812ull, 324723167859738122ull, 4542291588403562015ull}}, {{16836909792085961798ull, 10909435977385329661ull, 7120481007553418182ull, 2838932242752226259ull}}, {{7211079184825288535ull, 4413422934876886269ull, 4288915241014384824ull, 3548665303440282824ull}}, {{13625534999458998573ull, 5516778668596107836ull, 5361144051267981030ull, 4435831629300353530ull}}, {{17739331411516649916ull, 17283044723154731109ull, 7962401050469876047ull, 2772394768312720956ull}}, {{8339106209113648683ull, 16992119885516025983ull, 9953001313087345059ull, 3465493460390901195ull}}, {{5812196742964672950ull, 16628463838467644575ull, 7829565622931793420ull, 4331866825488626494ull}}, {{10550151991994002450ull, 1169417862187502051ull, 281792495904982984ull, 2707416765930391559ull}}, {{8576003971565115158ull, 1461772327734377564ull, 14187298675163392442ull, 3384270957412989448ull}}, {{10720004964456393948ull, 11050587446522747763ull, 17734123343954240552ull, 4230338696766236810ull}}, {{4394160093571552266ull, 6906617154076717352ull, 15695513108398788249ull, 2643961685478898006ull}}, {{5492700116964440332ull, 13244957461023284594ull, 10396019348643709503ull, 3304952106848622508ull}}, {{16089247183060326223ull, 11944510807851717838ull, 12995024185804636879ull, 4131190133560778135ull}}, {{5444093470985315985ull, 14382848282548405505ull, 15039419143768979905ull, 2581993833475486334ull}}, {{11416802857159032886ull, 4143502297903343169ull, 9575901892856449074ull, 3227492291844357918ull}}, {{435945516166627395ull, 14402749909233954770ull, 2746505329215785534ull, 4034365364805447398ull}}, {{4884151966031530026ull, 4390032674843833827ull, 15551623886042029671ull, 2521478353003404623ull}}, {{1493503939112024628ull, 875854825127404380ull, 14827843839125149185ull, 3151847941254255779ull}}, {{1866879923890030785ull, 5706504549836643379ull, 13923118780479048577ull, 3939809926567819724ull}}, {{17307701016927126905ull, 15095780389716371871ull, 17925321274654181168ull, 2462381204104887327ull}}, {{17022940252731520727ull, 422981413435913223ull, 17794965574890338557ull, 3077976505131109159ull}}, {{16666989297487013005ull, 5140412785222279433ull, 17632020950185535292ull, 3847470631413886449ull}}, {{3499339283288301272ull, 12436130027618700454ull, 4102484066224877701ull, 2404669144633679031ull}}, {{13597546140965152398ull, 1710104479241211855ull, 516419064353709223ull, 3005836430792098789ull}}, {{12385246657779052593ull, 15972688654333678531ull, 5257209848869524432ull, 3757295538490123486ull}}, {{5434936151898213919ull, 9982930408958549082ull, 17120814210825616482ull, 2348309711556327178ull}}, {{16017042226727543207ull, 3255290974343410544ull, 12177645726677244795ull, 2935387139445408973ull}}, {{1574558709699877392ull, 17904171773211426893ull, 1386999103064392281ull, 3669233924306761217ull}}, {{6579884405552234644ull, 8545156661232119904ull, 6345434897257878256ull, 4586542405383451521ull}}, {{4112427753470146653ull, 5340722913270074940ull, 15495111856854643670ull, 2866589003364657200ull}}, {{5140534691837683316ull, 15899275678442369483ull, 922145747358752971ull, 3583236254205821501ull}}, {{1813982346369716241ull, 15262408579625573950ull, 5764368202625829118ull, 4479045317757276876ull}}, {{14968797021763236363ull, 4927319343838595814ull, 12826102163495919007ull, 2799403323598298047ull}}, {{9487624240349269645ull, 1547463161370856864ull, 11420941685942510855ull, 3499254154497872559ull}}, {{11859530300436587056ull, 15769387006995734792ull, 9664491089000750664ull, 4374067693122340699ull}}, {{7412206437772866910ull, 9855866879372334245ull, 3734463921411775213ull, 2733792308201462937ull}}, {{13876944065643471542ull, 16931519617642805710ull, 9279765920192106920ull, 3417240385251828671ull}}, {{8122808045199563619ull, 2717655448343955522ull, 6988021381812745747ull, 4271550481564785839ull}}, {{9688441046677115166ull, 17839435719710829865ull, 11285042391274047947ull, 2669719050977991149ull}}, {{16722237326773781862ull, 17687608631211149427ull, 271244933810396222ull, 3337148813722488937ull}}, {{16291110640039839423ull, 12886138752159160976ull, 4950742185690383182ull, 4171436017153111171ull}}, {{10181944150024899640ull, 3442150701672087706ull, 788370856842795537ull, 2607147510720694482ull}}, {{3504058150676348741ull, 8914374395517497537ull, 10208835607908270229ull, 3258934388400868102ull}}, {{8991758706772823831ull, 15754654012824259825ull, 3537672473030561978ull, 4073667985501085128ull}}, {{17149064237801484654ull, 14458344776442550294ull, 2211045295644101236ull, 2546042490938178205ull}}, {{12212958260397080010ull, 18072930970553187868ull, 7375492637982514449ull, 3182553113672722756ull}}, {{15266197825496350012ull, 8756105657909321123ull, 9219365797478143062ull, 3978191392090903445ull}}, {{7235530631721524806ull, 860880017765937798ull, 8067946632637533366ull, 2486369620056814653ull}}, {{18267785326506681815ull, 10299472059062198055ull, 14696619309224304611ull, 3107962025071018316ull}}, {{18223045639705964365ull, 8262654055400359665ull, 18370774136530380764ull, 3884952531338772895ull}}, {{4471874497175145872ull, 14387530821480000599ull, 18399262862972569833ull, 2428095332086733059ull}}, {{978157103041544436ull, 4149355471567837037ull, 18387392560288324388ull, 3035119165108416324ull}}, {{5834382397229318449ull, 5186694339459796296ull, 4537496626650853869ull, 3793898956385520406ull}}, {{3646488998268324031ull, 5547526971376066637ull, 16670993446938947380ull, 2371186847740950253ull}}, {{9169797266262792942ull, 6934408714220083296ull, 7003683753391520513ull, 2963983559676187817ull}}, {{11462246582828491178ull, 13279696911202492024ull, 13366290710166788545ull, 3704979449595234771ull}}, {{7163904114267806986ull, 1382281541860475659ull, 6048088684640548889ull, 2315612155997021732ull}}, {{4343194124407370829ull, 6339537945752982478ull, 7560110855800686111ull, 2894515194996277165ull}}, {{14652364692363989344ull, 3312736413763840193ull, 14061824588178245543ull, 3618143993745346456ull}}, {{4480397810172822968ull, 17975978572486963954ull, 17577280735222806928ull, 4522679992181683070ull}}, {{7411934649785402259ull, 11234986607804352471ull, 6374114441086866426ull, 2826674995113551919ull}}, {{4653232293804364919ull, 4820361222900664781ull, 3355957032931195129ull, 3533343743891939899ull}}, {{10428226385682844053ull, 10637137547053218880ull, 18030004346446157623ull, 4416679679864924873ull}}, {{6517641491051777533ull, 13565739994549343656ull, 4351223688887766658ull, 2760424799915578046ull}}, {{8147051863814721917ull, 7733802956331903762ull, 14662401647964484131ull, 3450530999894472557ull}}, {{960442792913626588ull, 5055567676987491799ull, 4492944004673441452ull, 4313163749868090697ull}}, {{7517805773212098474ull, 12383101834971958182ull, 14337305048989370667ull, 2695727343667556685ull}}, {{173885179660347284ull, 10867191275287559824ull, 4086573255954549622ull, 3369659179584445857ull}}, {{217356474575434105ull, 4360617057254673972ull, 9719902588370574932ull, 4212073974480557321ull}}, {{9359219833464422124ull, 11948757697638947040ull, 17604154163800079092ull, 2632546234050348325ull}}, {{11699024791830527654ull, 14935947122048683800ull, 8170134649467935153ull, 3290682792562935407ull}}, {{14623780989788159568ull, 4834875847278691038ull, 5600982293407531038ull, 4113353490703669259ull}}, {{4528177100190211826ull, 16856855459831345611ull, 1194770924166012946ull, 2570845931689793287ull}}, {{1048535356810376878ull, 11847697287934406206ull, 15328521710489679895ull, 3213557414612241608ull}}, {{10534041232867746906ull, 10197935591490619853ull, 713908064402548253ull, 4016946768265302011ull}}, {{8889618779756035768ull, 8679552753895331360ull, 16587093604747450322ull, 2510591730165813756ull}}, {{11112023474695044710ull, 1626068905514388392ull, 2287122932224761287ull, 3138239662707267196ull}}, {{13890029343368805888ull, 15867644187175149202ull, 2858903665280951608ull, 3922799578384083995ull}}, {{13292954358032891584ull, 9917277616984468251ull, 17927715855296452419ull, 2451749736490052496ull}}, {{12004506929113726576ull, 7784911002803197410ull, 3962900745411013908ull, 3064687170612565621ull}}, {{5782261624537382412ull, 9731138753503996763ull, 9565311950191155289ull, 3830858963265707026ull}}, {{1308070506122170056ull, 17611176767008467737ull, 10590005987296859959ull, 2394286852041066891ull}}, {{6246774151080100473ull, 17402284940333196767ull, 8625821465693687045ull, 2992858565051333614ull}}, {{3196781670422737688ull, 7917798120134332247ull, 1558904795262332999ull, 3741073206314167018ull}}, {{8915517571655292911ull, 11866152852725039510ull, 5586001515466346028ull, 2338170753946354386ull}}, {{1921024927714340331ull, 14832691065906299388ull, 16205873931187708343ull, 2922713442432942982ull}}, {{2401281159642925413ull, 13929177813955486331ull, 11033970377129859621ull, 3653391803041178728ull}}, {{16836659504835820478ull, 3576414212162194201ull, 13792462971412324527ull, 4566739753801473410ull}}, {{3605383162881305943ull, 9152787910242453232ull, 13231975375560090733ull, 2854212346125920881ull}}, {{4506728953601632429ull, 16052670906230454444ull, 2704911164167949704ull, 3567765432657401102ull}}, {{5633411192002040536ull, 1619094559078516439ull, 12604510992064712939ull, 4459706790821751377ull}}, {{10438411022642357191ull, 17152835163919930438ull, 960290342399363730ull, 2787316744263594611ull}}, {{3824641741448170681ull, 12217671918045137240ull, 15035420983281368375ull, 3484145930329493263ull}}, {{4780802176810213351ull, 10660403879129033646ull, 14182590210674322565ull, 4355182412911866579ull}}, {{16823059415788547056ull, 8968595433669339980ull, 6558275872457757651ull, 2721989008069916612ull}}, {{2582080196026132204ull, 6599058273659287072ull, 8197844840572197064ull, 3402486260087395765ull}}, {{3227600245032665255ull, 8248822842074108840ull, 14858992069142634234ull, 4253107825109244706ull}}, {{2017250153145415785ull, 9767200294723705929ull, 13898556061641534300ull, 2658192390693277941ull}}, {{7133248709859157635ull, 12209000368404632411ull, 3538137021769754163ull, 3322740488366597427ull}}, {{4304874868896559139ull, 10649564442078402610ull, 18257729332494356416ull, 4153425610458246783ull}}, {{7302232811487737366ull, 6655977776299001631ull, 18328609860450054616ull, 2595891006536404239ull}}, {{4516104995932283804ull, 8319972220373752039ull, 18299076307135180366ull, 3244863758170505299ull}}, {{1033445226487966851ull, 1176593238612414241ull, 18262159365491587554ull, 4056079697713131624ull}}, {{12175118312623449042ull, 5347056792560146804ull, 11413849603432242221ull, 2535049811070707265ull}}, {{15218897890779311302ull, 11295507009127571409ull, 432253949008139064ull, 3168812263838384082ull}}, {{5188564308191975416ull, 14119383761409464262ull, 9763689473114949638ull, 3961015329797980102ull}}, {{17077910747902148347ull, 4212928832453527259ull, 1490619902269455620ull, 2475634581123737564ull}}, {{16735702416450297529ull, 5266161040566909074ull, 1863274877836819525ull, 3094543226404671955ull}}, {{11696255983708096104ull, 11194387319136024247ull, 16164151652578188118ull, 3868179033005839943ull}}, {{14227689017458641921ull, 2384806056032627250ull, 17020123810502449430ull, 2417611895628649964ull}}, {{8561239234968526593ull, 12204379606895559871ull, 2828410689418510171ull, 3022014869535812456ull}}, {{6089863025283270337ull, 10643788490192061935ull, 3535513361773137714ull, 3777518586919765570ull}}, {{10723693418443125817ull, 11264053824797426613ull, 6821381869535598975ull, 2360949116824853481ull}}, {{18016302791481295175ull, 9468381262569395362ull, 13138413355346886623ull, 2951186396031066851ull}}, {{13297006452496843161ull, 7223790559784356299ull, 11811330675756220375ull, 3688982995038833564ull}}, {{12009572047193666047ull, 4418052181303057470ull, 14764163344695275469ull, 4611228743798541955ull}}, {{2894296511068653375ull, 5067125622528104871ull, 6921759081220853216ull, 2882017964874088722ull}}, {{17452928694117980431ull, 6333907028160131088ull, 17875570888380842328ull, 3602522456092610902ull}}, {{3369416793937923923ull, 7917383785200163861ull, 13121091573621277102ull, 4503153070115763628ull}}, {{4411728505424896404ull, 336678847322714509ull, 17424054270368073997ull, 2814470668822352267ull}}, {{10126346650208508409ull, 5032534577580781040ull, 17168381819532704592ull, 3518088336027940334ull}}, {{12657933312760635511ull, 6290668221975976300ull, 12237105237561104932ull, 4397610420034925418ull}}, {{17134580357330173003ull, 13155039675589760995ull, 12259876791903078486ull, 2748506512521828386ull}}, {{16806539428235328349ull, 7220427557632425436ull, 6101473953024072300ull, 3435633140652285483ull}}, {{2561430211584608820ull, 9025534447040531796ull, 3015156422852702471ull, 4294541425815356854ull}}, {{10824265919095156321ull, 12558488057041414228ull, 15719530819565102756ull, 2684088391134598033ull}}, {{13530332398868945401ull, 15698110071301767785ull, 5814355469174214733ull, 3355110488918247542ull}}, {{3077857443304018039ull, 5787579533845046020ull, 16491316373322544225ull, 4193888111147809427ull}}, {{11147032938919787083ull, 15146452254721623522ull, 8001229724112896188ull, 2621180069467380892ull}}, {{4710419136794958045ull, 486321244692477787ull, 10001537155141120236ull, 3276475086834226115ull}}, {{1276337902566309652ull, 607901555865597234ull, 7890235425499012391ull, 4095593858542782644ull}}, {{5409397207531331437ull, 7297467500057080127ull, 14154769177791658552ull, 2559746161589239152ull}}, {{2150060490986776392ull, 9121834375071350159ull, 17693461472239573190ull, 3199682701986548940ull}}, {{16522633669015634202ull, 2178920931984411890ull, 3670082766589914872ull, 3999603377483186176ull}}, {{14938332061562159280ull, 1361825582490257431ull, 2293801729118696795ull, 2499752110926991360ull}}, {{14061229058525311196ull, 15537340033394985501ull, 2867252161398370993ull, 3124690138658739200ull}}, {{3741478267874475283ull, 5586616986461568165ull, 3584065201747963742ull, 3905862673323424000ull}}, {{4644266926635241004ull, 17326693671820643815ull, 2240040751092477338ull, 2441164170827140000ull}}, {{1193647639866663351ull, 12434995052921028961ull, 2800050938865596673ull, 3051455213533925000ull}}, {{6103745568260717093ull, 1708685760869122489ull, 3500063673581995842ull, 3814319016917406250ull}}, {{15344056026231417943ull, 5679614618970589459ull, 6799225814416135305ull, 2383949385573378906ull}}, {{14568384014361884525ull, 11711204292140624728ull, 17722404304874944939ull, 2979936731966723632ull}}, {{18210480017952355656ull, 10027319346748393006ull, 3706261307384129558ull, 3724920914958404541ull}}, {{6769863992792834381ull, 1655388573290357725ull, 4622256326328774926ull, 2328075571849002838ull}}, {{13074016009418430880ull, 11292607753467722964ull, 15001192444765744465ull, 2910094464811253547ull}}, {{16342520011773038600ull, 280701636552489993ull, 14139804537529792678ull, 3637618081014066934ull}}, {{6593091959434134538ull, 9574249082545388300ull, 8451383635057465039ull, 4547022601267583668ull}}, {{13344054511501109895ull, 12901434704231949543ull, 14505486808765691457ull, 2841889125792239792ull}}, {{12068382120948999464ull, 2291735325007773217ull, 18131858510957114322ull, 3552361407240299740ull}}, {{1250419595904085618ull, 12088041193114492330ull, 4218079064986841286ull, 4440451759050374676ull}}, {{5393198265867441415ull, 2943339727269169802ull, 11859671452471551612ull, 2775282349406484172ull}}, {{15964869869189077577ull, 3679174659086462252ull, 14824589315589439515ull, 3469102936758105215ull}}, {{1509343262776795355ull, 18434026379140241528ull, 13919050626059411489ull, 4336378670947631519ull}}, {{943339539235497097ull, 4603737459321569099ull, 15616935668928214037ull, 2710236669342269699ull}}, {{15014232479326535083ull, 10366357842579349277ull, 14909483567732879642ull, 3387795836677837124ull}}, {{4932732543876005142ull, 3734575266369410789ull, 190110385956547937ull, 4234744795847296406ull}}, {{5388800849136197166ull, 13863324587549351503ull, 13953877046505006172ull, 2646715497404560253ull}}, {{2124315042992858553ull, 17329155734436689379ull, 3607288252849094003ull, 3308394371755700317ull}}, {{16490451859023236904ull, 17049758649618473819ull, 9120796334488755408ull, 4135492964694625396ull}}, {{8000689402675829113ull, 10656099156011546137ull, 14923869745910247938ull, 2584683102934140872ull}}, {{14612547771772174295ull, 4096751908159656863ull, 208093108678258307ull, 3230853878667676091ull}}, {{13653998696287829965ull, 509253866772183175ull, 14095174441129986596ull, 4038567348334595113ull}}, {{15451278212820975584ull, 9541655703587390292ull, 1891954998065159766ull, 2524104592709121946ull}}, {{867353692316667864ull, 2703697592629462058ull, 11588315784436225516ull, 3155130740886402432ull}}, {{10307564152250610638ull, 3379621990786827572ull, 14485394730545281895ull, 3943913426108003040ull}}, {{15665599632011407457ull, 9029792771882849088ull, 9053371706590801184ull, 2464945891317501900ull}}, {{1135255466304707705ull, 11287240964853561361ull, 11316714633238501480ull, 3081182364146877375ull}}, {{6030755351308272535ull, 14109051206066951701ull, 9534207273120738946ull, 3851477955183596719ull}}, {{6075065103781364287ull, 13429843022219232717ull, 12876408573341543697ull, 2407173721989747949ull}}, {{12205517398154093262ull, 2952245722491877184ull, 2260452661394765910ull, 3008967152487184937ull}}, {{15256896747692616578ull, 12913679189969622288ull, 7437251845170845291ull, 3761208940608981171ull}}, {{9535560467307885361ull, 5765206484517319978ull, 2342439394018084355ull, 2350755587880613232ull}}, {{2696078547280080893ull, 2594822087219262069ull, 2928049242522605444ull, 2938444484850766540ull}}, {{7981784202527489021ull, 3243527609024077586ull, 3660061553153256805ull, 3673055606063458175ull}}, {{753858216304585468ull, 8666095529707484887ull, 18410134996723734718ull, 4591319507579322718ull}}, {{7388690412831447773ull, 804623687639790150ull, 6894648354524946295ull, 2869574692237076699ull}}, {{12490979184533909ull, 14840837664831901400ull, 4006624424728794964ull, 3586968365296345874ull}}, {{15613723980667386ull, 104303007330325134ull, 14231652567765769514ull, 4483710456620432342ull}}, {{13844816632770080828ull, 4676875398008841112ull, 4283096836426218042ull, 2802319035387770214ull}}, {{17306020790962601035ull, 15069466284365827198ull, 14577243082387548360ull, 3502898794234712767ull}}, {{12409153951848475486ull, 390088781747732382ull, 13609867834557047547ull, 4378623492793390959ull}}, {{3144035201477909275ull, 16384706553088190403ull, 15423696424239236572ull, 2736639682995869349ull}}, {{17765102057129550305ull, 2034139117650686387ull, 5444562475016882004ull, 3420799603744836687ull}}, {{17594691552984549978ull, 2542673897063357984ull, 2194017075343714601ull, 4275999504681045859ull}}, {{10996682220615343736ull, 13118386231733068500ull, 17512161736585679289ull, 2672499690425653661ull}}, {{13745852775769179670ull, 2562924734384171913ull, 8055144115449935400ull, 3340624613032067077ull}}, {{3347257914429310876ull, 3203655917980214892ull, 14680616162739807154ull, 4175780766290083846ull}}, {{11315408233373095105ull, 6613970967165022211ull, 4563699083284991567ull, 2609862978931302404ull}}, {{9532574273288980978ull, 3655777690528889860ull, 5704623854106239459ull, 3262328723664128005ull}}, {{11915717841611226222ull, 18404780168443276037ull, 11742465836060187227ull, 4077910904580160006ull}}, {{9753166660220710341ull, 9197144596063353571ull, 2727355129110229113ull, 2548694315362600004ull}}, {{7579772306848500022ull, 16108116763506579868ull, 3409193911387786391ull, 3185867894203250005ull}}, {{9474715383560625027ull, 15523459935955836931ull, 8873178407662120893ull, 3982334867754062506ull}}, {{3615854105511696690ull, 12008005469186092034ull, 10157422523216213462ull, 2488959292346289066ull}}, {{13743189668744396671ull, 5786634799627839234ull, 3473406117165491020ull, 3111199115432861333ull}}, {{7955615049075720030ull, 7233293499534799043ull, 8953443664884251679ull, 3888998894291076666ull}}, {{2666416396458631067ull, 11438337464850331258ull, 10207588308980045203ull, 2430624308931922916ull}}, {{12556392532428064642ull, 9686235812635526168ull, 12759485386225056504ull, 3038280386164903645ull}}, {{15695490665535080802ull, 12107794765794407710ull, 2114298677499156918ull, 3797850482706129557ull}}, {{5197995647532037597ull, 2955685710194116915ull, 3627279682650667026ull, 2373656551691330973ull}}, {{1885808540987659093ull, 12917979174597421952ull, 9145785621740721686ull, 2967070689614163716ull}}, {{2357260676234573866ull, 6924101931392001632ull, 11432232027175902108ull, 3708838362017704645ull}}, {{1473287922646608666ull, 13550935743974776828ull, 9450988026198632769ull, 2318023976261065403ull}}, {{1841609903308260833ull, 3103611624686307323ull, 7202049014320903058ull, 2897529970326331754ull}}, {{16137070434417489753ull, 13102886567712659961ull, 18225933304755904630ull, 3621912462907914692ull}}, {{6336279987739698479ull, 7155236172786049144ull, 4335672557235329172ull, 4527390578634893366ull}}, {{3960174992337311550ull, 13695394644846056523ull, 16544853403554244444ull, 2829619111646808353ull}}, {{338532721994251533ull, 17119243306057570654ull, 6846008699160641843ull, 3537023889558510442ull}}, {{9646537939347590224ull, 16787368114144575413ull, 17780882910805578112ull, 4421279861948138052ull}}, {{8334929221305937842ull, 10492105071340359633ull, 1889679782398710512ull, 2763299913717586283ull}}, {{15030347545059810206ull, 13115131339175449541ull, 16197157783280551852ull, 3454124892146982853ull}}, {{4952876376042599046ull, 16393914173969311927ull, 6411389173818526103ull, 4317656115183728567ull}}, {{10013076762667706260ull, 17163725386371901810ull, 10924647261277660670ull, 2698535071989830354ull}}, {{3292973916479857017ull, 12231284696110101455ull, 4432437039742300030ull, 3373168839987287943ull}}, {{17951275450881984983ull, 6065733833282851010ull, 928860281250487134ull, 4216461049984109929ull}}, {{15831233175228628518ull, 17626141701083945593ull, 12109752721850024218ull, 2635288156240068705ull}}, {{5953983413753621936ull, 12809305089500156184ull, 1302132847030366561ull, 3294110195300085882ull}}, {{7442479267192027420ull, 2176573306593031518ull, 10851038095642734010ull, 4117637744125107352ull}}, {{39863523567629234ull, 5972044335048032603ull, 6781898809776708756ull, 2573523590078192095ull}}, {{13884887459741700254ull, 7465055418810040753ull, 3865687493793498041ull, 3216904487597740119ull}}, {{3521051269394961605ull, 13943005291939938846ull, 220423348814484647ull, 4021130609497175149ull}}, {{16035715098654014715ull, 15631907335103543634ull, 2443607602222746856ull, 2513206630935734468ull}}, {{10821271836462742586ull, 1093140095169877927ull, 3054509502778433571ull, 3141508288669668085ull}}, {{8914903777151040329ull, 15201483174244511121ull, 8429822896900429867ull, 3926885360837085106ull}}, {{17101029906787869966ull, 7195083974689125498ull, 9880325328990156571ull, 2454303350523178191ull}}, {{12152915346630061649ull, 4382168949934018969ull, 7738720642810307810ull, 3067879188153972739ull}}, {{1356086128005413349ull, 14701083224272299520ull, 5061714785085496858ull, 3834848985192465924ull}}, {{847553830003383343ull, 13799863033597575104ull, 12386943777533211344ull, 2396780615745291202ull}}, {{1059442287504229179ull, 17249828791996968880ull, 6260307685061738372ull, 2995975769681614003ull}}, {{1324302859380286474ull, 3115541916286659484ull, 3213698587899785062ull, 3744969712102017504ull}}, {{10051061323967454854ull, 15782271752961325889ull, 2008561617437365663ull, 2340606070063760940ull}}, {{17175512673386706472ull, 15116153672774269457ull, 2510702021796707079ull, 2925757587579701175ull}}, {{7634332786451219377ull, 14283506072540448918ull, 16973435582528047561ull, 3657196984474626468ull}}, {{319543946209248414ull, 4019324535393397436ull, 2770050404450507836ull, 4571496230593283086ull}}, {{9423087003235556067ull, 11735449871475649205ull, 15566339558063731109ull, 2857185144120801928ull}}, {{16390544772471832987ull, 834254284062397794ull, 1011180373870112271ull, 3571481430151002411ull}}, {{11264808928735015426ull, 14877875910360160955ull, 15099033522619804050ull, 4464351787688753013ull}}, {{4734662571245690689ull, 13910358462402488501ull, 11742738960851071483ull, 2790219867305470633ull}}, {{10530014232484501266ull, 12776262059575722722ull, 843365645781675642ull, 3487774834131838292ull}}, {{3939145753750850774ull, 6746955537614877595ull, 1054207057227094553ull, 4359718542664797865ull}}, {{156123086880587782ull, 15746062257077768257ull, 12188094456835403855ull, 2724824089165498665ull}}, {{4806839877028122631ull, 15070891802919822417ull, 1400060015762091107ull, 3406030111456873332ull}}, {{10620235864712541193ull, 14226928735222390117ull, 1750075019702613884ull, 4257537639321091665ull}}, {{8943490424659032198ull, 18115202496368769631ull, 12623011933382603437ull, 2660961024575682290ull}}, {{6567677012396402343ull, 8808945065178798327ull, 6555392879873478489ull, 3326201280719602863ull}}, {{3597910247068115025ull, 15622867349900885813ull, 3582555081414460207ull, 4157751600899503579ull}}, {{4554536913631265843ull, 16681821121329135489ull, 18379997990379895293ull, 2598594750562189736ull}}, {{10304857160466470207ull, 7017218346379255649ull, 4528253414265317501ull, 3248243438202737171ull}}, {{17492757469010475663ull, 13383208951401457465ull, 1048630749404258972ull, 4060304297753421464ull}}, {{4015444390490465433ull, 17587877631480686724ull, 655394218377661857ull, 2537690186095888415ull}}, {{5019305488113081792ull, 8149788984068694693ull, 14654300828254241034ull, 3172112732619860518ull}}, {{10885817878568740143ull, 963864193231092558ull, 9094503998463025485ull, 3965140915774825648ull}}, {{2191950155678074686ull, 2908258129983126801ull, 5684064999039390928ull, 2478213072359266030ull}}, {{7351623713024981261ull, 3635322662478908501ull, 16328453285654014468ull, 3097766340449082537ull}}, {{13801215659708614480ull, 4544153328098635626ull, 6575508551785354373ull, 3872207925561353172ull}}, {{13237445805745271954ull, 5145938839275341218ull, 13333064881720622291ull, 2420129953475845732ull}}, {{7323435220326814135ull, 1820737530666788619ull, 16666331102150777864ull, 3025162441844807165ull}}, {{4542608006981129764ull, 2275921913333485774ull, 6997855822406308618ull, 3781453052306008957ull}}, {{16674188059645369815ull, 6034137214260816512ull, 6679502898217636838ull, 2363408157691255598ull}}, {{2395991000847160653ull, 16766043554680796449ull, 17572750659626821855ull, 2954260197114069497ull}}, {{7606674769486338720ull, 16345868424923607657ull, 8130880269251363607ull, 3692825246392586872ull}}, {{16283386776997431460ull, 17133696793218336641ull, 5081800168282102254ull, 2308015778995366795ull}}, {{6519175415964625613ull, 12193748954668144994ull, 1740564191925239914ull, 2885019723744208494ull}}, {{17372341306810557824ull, 6018814156480405434ull, 11399077276761325701ull, 3606274654680260617ull}}, {{12492054596658421472ull, 12135203714027894697ull, 413788540669493414ull, 4507843318350325772ull}}, {{890005095270431564ull, 2972816302840046282ull, 9481989874773209192ull, 2817402073968953607ull}}, {{10335878405942815263ull, 3716020378550057852ull, 7240801325039123586ull, 3521752592461192009ull}}, {{12919848007428519078ull, 13868397510042348123ull, 13662687674726292386ull, 4402190740576490011ull}}, {{5769061995429130472ull, 13279434462203855481ull, 6233336787490238789ull, 2751369212860306257ull}}, {{11823013512713800994ull, 2764235022472655639ull, 12403357002790186391ull, 3439211516075382821ull}}, {{10167080872464863339ull, 17290351833372983261ull, 1669138198205569276ull, 4299014395094228527ull}}, {{8660268554504233539ull, 1583097859003338730ull, 7960740401519562654ull, 2686883996933892829ull}}, {{1601963656275516115ull, 11202244360608949221ull, 14562611520326841221ull, 3358604996167366036ull}}, {{6614140588771783048ull, 167747395479022814ull, 18203264400408551527ull, 4198256245209207545ull}}, {{17968895923264528117ull, 7022371149815471114ull, 4459511222614262848ull, 2623910153255754716ull}}, {{13237747867225884338ull, 8777963937269338893ull, 5574389028267828560ull, 3279887691569693395ull}}, {{2712126778750191711ull, 10972454921586673617ull, 2356300266907397796ull, 4099859614462116744ull}}, {{13224294282787339580ull, 16081156362846446818ull, 1472687666817123622ull, 2562412259038822965ull}}, {{7306995816629398666ull, 10878073416703282715ull, 6452545601948792432ull, 3203015323798528706ull}}, {{4522058752359360429ull, 13597591770879103394ull, 17289054039290766348ull, 4003769154748160882ull}}, {{7437972738651988172ull, 17721866893654215429ull, 15417344792984116871ull, 2502355721717600551ull}}, {{13909151941742373119ull, 17540647598640381382ull, 14659994972802758185ull, 3127944652147000689ull}}, {{8163067890323190591ull, 8090751443018313016ull, 4489935660721284020ull, 3909930815183750862ull}}, {{5101917431451994119ull, 14280091688741221443ull, 16641267843232966224ull, 2443706759489844288ull}}, {{1765710770887604745ull, 17850114610926526804ull, 2354840730331656164ull, 3054633449362305361ull}}, {{2207138463609505931ull, 3865899189948606889ull, 7555236931341958110ull, 3818291811702881701ull}}, {{12908676585824410967ull, 16251245049000043017ull, 7027866091302417770ull, 2386432382314301063ull}}, {{2300787676998349997ull, 11090684274395277964ull, 4173146595700634309ull, 2983040477892876329ull}}, {{2875984596247937496ull, 28297287711933743ull, 9828119263053180791ull, 3728800597366095411ull}}, {{8715019400296042791ull, 6935214832461040445ull, 3836731530194544042ull, 2330500373353809632ull}}, {{15505460268797441393ull, 17892390577431076364ull, 4795914412743180052ull, 2913125466692262040ull}}, {{935081262287250125ull, 3918744148079293840ull, 5994893015928975066ull, 3641406833365327550ull}}, {{1168851577859062656ull, 14121802221953893108ull, 16716988306765994640ull, 4551758541706659437ull}}, {{9953904273016689968ull, 8826126388721183192ull, 12753960700942440602ull, 2844849088566662148ull}}, {{12442380341270862460ull, 1809285949046703182ull, 15942450876178050753ull, 3556061360708327685ull}}, {{6329603389733802267ull, 6873293454735766882ull, 6093005539940399729ull, 4445076700885409607ull}}, {{8567688137011014321ull, 15825023455278324061ull, 10725657490103831686ull, 2778172938053381004ull}}, {{15321296189691155805ull, 10557907282243129268ull, 13407071862629789608ull, 3472716172566726255ull}}, {{704876163404393140ull, 13197384102803911586ull, 12147153809859849106ull, 4340895215708407819ull}}, {{5052233620555133617ull, 12860051082679832645ull, 5286128121948711739ull, 2713059509817754887ull}}, {{10926978044121304925ull, 11463377834922402902ull, 1995974134008501770ull, 3391324387272193609ull}}, {{4435350518296855348ull, 5105850256798227820ull, 7106653685938015117ull, 4239155484090242011ull}}, {{11995466110790310401ull, 5496999419712586339ull, 2135815544497565496ull, 2649472177556401257ull}}, {{10382646620060500097ull, 6871249274640732924ull, 7281455449049344774ull, 3311840221945501571ull}}, {{12978308275075625121ull, 17812433630155691963ull, 4490133292884293063ull, 4139800277431876964ull}}, {{5805599662708571749ull, 18050300046488389333ull, 12029705344907458972ull, 2587375173394923102ull}}, {{11868685596813102590ull, 4116130984400935050ull, 5813759644279547908ull, 3234218966743653878ull}}, {{5612484959161602429ull, 5145163730501168813ull, 16490571592204210693ull, 4042773708429567347ull}}, {{5813646108689695470ull, 5521570340776924460ull, 8000764235913937731ull, 2526733567768479592ull}}, {{7267057635862119338ull, 2290276907543767671ull, 10000955294892422164ull, 3158416959710599490ull}}, {{4472136026400261268ull, 2862846134429709589ull, 3277822081760751897ull, 3948021199638249363ull}}, {{5100928025713857245ull, 13318493880087038253ull, 18189539865596327599ull, 2467513249773905851ull}}, {{10987846050569709460ull, 12036431331681409912ull, 18125238813568021595ull, 3084391562217382314ull}}, {{13734807563212136825ull, 10433853146174374486ull, 13433176480105251186ull, 3855489452771727893ull}}, {{3972568708580197612ull, 11132844234786371958ull, 10701578309279475943ull, 2409680907982329933ull}}, {{14189082922580022823ull, 9304369275055577043ull, 17988658905026732833ull, 3012101134977912416ull}}, {{13124667634797640624ull, 16242147612246859208ull, 4039079557573864425ull, 3765126418722390521ull}}, {{8202917271748525390ull, 3233813230013205149ull, 14053639769552135026ull, 2353204011701494075ull}}, {{14865332608113044642ull, 13265638574371282244ull, 12955363693512780878ull, 2941505014626867594ull}}, {{134921686431754186ull, 7358676181109326998ull, 6970832580036200290ull, 3676881268283584493ull}}, {{9392024144894468540ull, 18421717263241434555ull, 13325226743472638266ull, 4596101585354480616ull}}, {{3564172081345348886ull, 16125259307953284501ull, 8328266714670398916ull, 2872563490846550385ull}}, {{9066901120109074011ull, 1709830061232054010ull, 15022019411765386550ull, 3590704363558187981ull}}, {{2110254363281566706ull, 11360659613394843321ull, 4942466209424569475ull, 4488380454447734977ull}}, {{12848124023119448951ull, 4794569249158083123ull, 14618256426958825682ull, 2805237784029834360ull}}, {{11448469010471923285ull, 15216583598302379712ull, 18272820533698532102ull, 3506547230037292950ull}}, {{14310586263089904106ull, 9797357461023198832ull, 13617653630268389320ull, 4383184037546616188ull}}, {{8944116414431190067ull, 6123348413139499270ull, 17734405555772519133ull, 2739490023466635117ull}}, {{1956773481184211775ull, 12265871534851761992ull, 8332948889433485204ull, 3424362529333293897ull}}, {{2445966851480264719ull, 15332339418564702490ull, 15027872130219244409ull, 4280453161666617371ull}}, {{6140415300602553353ull, 2665183108961857200ull, 7086577072173333804ull, 2675283226041635857ull}}, {{7675519125753191692ull, 3331478886202321500ull, 13469907358644055159ull, 3344104032552044821ull}}, {{9594398907191489614ull, 17999406663035065587ull, 3002326143022905236ull, 4180130040690056027ull}}, {{3690656307780987057ull, 2026257127542140184ull, 18017354903885173437ull, 2612581275431285016ull}}, {{4613320384726233821ull, 7144507427855063134ull, 4074949556146915180ull, 3265726594289106271ull}}, {{14990022517762568085ull, 8930634284818828917ull, 482000926756256071ull, 4082158242861382839ull}}, {{11674607082815299005ull, 12499175455652849929ull, 7218779606863741900ull, 2551348901788364274ull}}, {{758200798236960044ull, 15623969319566062412ull, 18246846545434453183ull, 3189186127235455342ull}}, {{947750997796200055ull, 14918275631030190111ull, 13585186144938290671ull, 3986482659044319178ull}}, {{7509873401263706891ull, 16241451297034950675ull, 13102427359013819573ull, 2491551661902699486ull}}, {{4775655733152245709ull, 6466756066011524632ull, 7154662161912498659ull, 3114439577378374358ull}}, {{5969569666440307136ull, 3471759064087017886ull, 18166699739245399132ull, 3893049471722967947ull}}, {{17566039096807355672ull, 11393221451909161986ull, 9048344327814680505ull, 2433155919826854967ull}}, {{12734176834154418782ull, 406468759604288771ull, 6698744391340962728ull, 3041444899783568709ull}}, {{11306035024265635574ull, 508085949505360964ull, 12985116507603591314ull, 3801806124729460886ull}}, {{16289643927020798042ull, 4929239736868238506ull, 3504011798824856667ull, 2376128827955913054ull}}, {{11138682871921221744ull, 1549863652657910229ull, 13603386785385846642ull, 2970161034944891317ull}}, {{88295534619363468ull, 11160701602677163595ull, 3169175426450144590ull, 3712701293681114147ull}}, {{16196085773632959832ull, 2363752483245839342ull, 18121635706027198033ull, 2320438308550696341ull}}, {{11021735180186423982ull, 7566376622484687082ull, 8816986577251833829ull, 2900547885688370427ull}}, {{4553796938378254169ull, 14069656796533246757ull, 6409547203137404382ull, 3625684857110463034ull}}, {{10303932191400205615ull, 8363698958811782638ull, 17235306040776531286ull, 4532106071388078792ull}}, {{1828271601197740605ull, 615625830829976245ull, 10772066275485332054ull, 2832566294617549245ull}}, {{6897025519924563661ull, 9992904325392246114ull, 18076768862784052971ull, 3540707868271936556ull}}, {{17844653936760480384ull, 7879444388312919738ull, 4149217004770514598ull, 4425884835339920696ull}}, {{15764594728902688144ull, 312966724268186932ull, 2593260627981571624ull, 2766178022087450435ull}}, {{1258999337418808564ull, 391208405335233666ull, 17076633840259128242ull, 3457722527609313043ull}}, {{10797121208628286513ull, 9712382543523817890ull, 16734106281896522398ull, 4322153159511641304ull}}, {{11359886773820066975ull, 1458553071274998277ull, 10458816426185326499ull, 2701345724694775815ull}}, {{364800411992920006ull, 15658249394375911559ull, 8461834514304270219ull, 3376682155868469769ull}}, {{14291058570273313720ull, 14961125724542501544ull, 15188979161307725678ull, 4220852694835587211ull}}, {{8931911606420821075ull, 4739017559411675561ull, 7187268966603634597ull, 2638032934272242007ull}}, {{15776575526453414248ull, 10535457967691982355ull, 4372400189827155342ull, 3297541167840302509ull}}, {{15109033389639379905ull, 3945950422760202136ull, 10077186255711332082ull, 4121926459800378136ull}}, {{9443145868524612441ull, 7077905032652514239ull, 6298241409819582551ull, 2576204037375236335ull}}, {{7192246317228377647ull, 4235695272388254895ull, 3261115743847090285ull, 3220255046719045419ull}}, {{4378621878108084155ull, 9906305108912706523ull, 17911452735091026568ull, 4025318808398806773ull}}, {{430795664603858645ull, 6191440693070441577ull, 13500500968645585557ull, 2515824255249254233ull}}, {{5150180599182211210ull, 12350986884765439875ull, 3040568155524818234ull, 3144780319061567792ull}}, {{1826039730550376108ull, 6215361569102024036ull, 3800710194406022793ull, 3930975398826959740ull}}, {{10364646868448760876ull, 15413816026757234782ull, 11598815908358540053ull, 2456859624266849837ull}}, {{3732436548706175287ull, 5432211978164379766ull, 663461830166011355ull, 3071074530333562297ull}}, {{13888917722737494916ull, 2178578954278086803ull, 5441013306134902098ull, 3838843162916952871ull}}, {{6374730567497240371ull, 5973297864851192156ull, 10318162343975395667ull, 2399276976823095544ull}}, {{7968413209371550464ull, 2854936312636602291ull, 12897702929969244584ull, 2999096221028869430ull}}, {{5348830493287050175ull, 3568670390795752864ull, 6898756625606779922ull, 3748870276286086788ull}}, {{3343019058304406360ull, 6842105012674733444ull, 13535094927859013259ull, 2343043922678804242ull}}, {{4178773822880507950ull, 3940945247416028901ull, 7695496622968990766ull, 2928804903348505303ull}}, {{9835153297028022841ull, 14149553596124811934ull, 5007684760283850553ull, 3661006129185631629ull}}, {{3070569584430252743ull, 3851883939873851206ull, 10871291968782201096ull, 4576257661482039536ull}}, {{15754164045551071677ull, 2407427462421157003ull, 6794557480488875685ull, 2860161038426274710ull}}, {{15081019038511451692ull, 7620970346453834158ull, 17716568887465870414ull, 3575201298032843387ull}}, {{9627901761284538806ull, 302840896212516890ull, 17534025090904950114ull, 4469001622541054234ull}}, {{10629124619230224658ull, 4800961578560210960ull, 15570451700242981725ull, 2793126014088158896ull}}, {{13286405774037780823ull, 10612887991627651604ull, 1016320551594175540ull, 3491407517610198621ull}}, {{16608007217547226028ull, 13266109989534564505ull, 5882086707920107329ull, 4364259397012748276ull}}, {{3462475483325934412ull, 1373789715818020960ull, 12899676229304842889ull, 2727662123132967672ull}}, {{4328094354157418015ull, 6328923163199914104ull, 16124595286631053611ull, 3409577653916209590ull}}, {{5410117942696772518ull, 3299467935572504726ull, 10932372071434041206ull, 4261972067395261988ull}}, {{17216381769467646536ull, 15897225515014979165ull, 16056104581501051561ull, 2663732542122038742ull}}, {{7685419156552394458ull, 6036473838486560245ull, 10846758690021538644ull, 3329665677652548428ull}}, {{14218459964117880976ull, 7545592298108200306ull, 13558448362526923305ull, 4162082097065685535ull}}, {{13498223496001063514ull, 16245210232386094951ull, 15391559254220408921ull, 2601301310666053459ull}}, {{12261093351573941489ull, 6471454735200454977ull, 14627763049348123248ull, 3251626638332566824ull}}, {{1491308634185263149ull, 8089318419000568722ull, 18284703811685154060ull, 4064533297915708530ull}}, {{5543753914793177372ull, 14279196048730131259ull, 16039625900730609191ull, 2540333311197317831ull}}, {{2318006375064083811ull, 13237309042485276170ull, 15437846357485873585ull, 3175416638996647289ull}}, {{12120880005684880572ull, 2711578247824431500ull, 5462249891575178270ull, 3969270798745809112ull}}, {{16798922040407826166ull, 15529794460172433399ull, 3413906182234486418ull, 2480794249216130695ull}}, {{16386966532082394803ull, 10188871038360765941ull, 18102440783075271735ull, 3100992811520163368ull}}, {{6648650109820829791ull, 8124402779523569523ull, 4181306905134538053ull, 3876241014400204211ull}}, {{1849563309424324668ull, 7383594746415924904ull, 307473806495392331ull, 2422650634000127632ull}} }; // ********************************************************************** static const UINT128 breakpoints_bid32[] = { {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{11908810229357645280ull, 469708516554766ull}}, {{5954405114678822640ull, 234854258277383ull}}, {{12200574594194187128ull, 117427129138691ull}}, {{15323659333951869372ull, 58713564569345ull}}, {{2831320374921140396ull, 293567822846729ull}}, {{10639032224315346006ull, 146783911423364ull}}, {{5319516112157673003ull, 73391955711682ull}}, {{8150836487078813399ull, 366959778558411ull}}, {{13298790280394182507ull, 183479889279205ull}}, {{15872767177051867061ull, 91739944639602ull}}, {{5576859590421128845ull, 458699723198014ull}}, {{2788429795210564422ull, 229349861599007ull}}, {{10617586934460058019ull, 114674930799503ull}}, {{14532165504084804817ull, 57337465399751ull}}, {{17320595299295369240ull, 286687326998758ull}}, {{8660297649647684620ull, 143343663499379ull}}, {{13553520861678618118ull, 71671831749689ull}}, {{12427372087264435742ull, 358359158748448ull}}, {{6213686043632217871ull, 179179579374224ull}}, {{3106843021816108935ull, 89589789687112ull}}, {{15534215109080544677ull, 447948948435560ull}}, {{7767107554540272338ull, 223974474217780ull}}, {{3883553777270136169ull, 111987237108890ull}}, {{971024812641129231ull, 559936185544451ull}}, {{9708884443175340423ull, 279968092772225ull}}, {{14077814258442446019ull, 139984046386112ull}}, {{7038907129221223009ull, 69992023193056ull}}, {{16747791572396563433ull, 349960115965281ull}}, {{17597267823053057524ull, 174980057982640ull}}, {{8798633911526528762ull, 87490028991320ull}}, {{7099681410213540580ull, 437450144956602ull}}, {{3549840705106770290ull, 218725072478301ull}}, {{10998292389408160953ull, 109362536239150ull}}, {{18097973799621701533ull, 546812681195752ull}}, {{9048986899810850766ull, 273406340597876ull}}, {{4524493449905425383ull, 136703170298938ull}}, {{2262246724952712691ull, 68351585149469ull}}, {{11311233624763563458ull, 341757925747345ull}}, {{14878988849236557537ull, 170878962873672ull}}, {{7439494424618278768ull, 85439481436836ull}}, {{303983975672290610ull, 427197407184182ull}}, {{151991987836145305ull, 213598703592091ull}}, {{9299368030772848460ull, 106799351796045ull}}, {{9603352006445139071ull, 533996758980227ull}}, {{14025048040077345343ull, 266998379490113ull}}, {{16235896056893448479ull, 133499189745056ull}}, {{8117948028446724239ull, 66749594872528ull}}, {{3696251994814517967ull, 333747974362642ull}}, {{1848125997407258983ull, 166873987181321ull}}, {{10147435035558405299ull, 83436993590660ull}}, {{13843687030372923267ull, 417184967953302ull}}, {{6921843515186461633ull, 208592483976651ull}}, {{12684293794448006624ull, 104296241988325ull}}, {{8081236751111378276ull, 521481209941628ull}}, {{4040618375555689138ull, 260740604970814ull}}, {{2020309187777844569ull, 130370302485407ull}}, {{10233526630743698092ull, 65185151242703ull}}, {{14274145006299387230ull, 325925756213517ull}}, {{16360444540004469423ull, 162962878106758ull}}, {{8180222270002234711ull, 81481439053379ull}}, {{4007623202592070326ull, 407407195266897ull}}, {{11227183638150810971ull, 203703597633448ull}}, {{5613591819075405485ull, 101851798816724ull}}, {{9621215021667475812ull, 509258994083621ull}}, {{14033979547688513714ull, 254629497041810ull}}, {{7016989773844256857ull, 127314748520905ull}}, {{12731866923776904236ull, 63657374260452ull}}, {{8319102397755866334ull, 318286871302263ull}}, {{13382923235732708975ull, 159143435651131ull}}, {{15914833654721130295ull, 79571717825565ull}}, {{5787191978767445014ull, 397858589127829ull}}, {{12116968026238498315ull, 198929294563914ull}}, {{6058484013119249157ull, 99464647281957ull}}, {{11845675991886694171ull, 497323236409786ull}}, {{5922837995943347085ull, 248661618204893ull}}, {{12184791034826449350ull, 124330809102446ull}}, {{6092395517413224675ull, 62165404551223ull}}, {{12015233513356571761ull, 310827022756116ull}}, {{6007616756678285880ull, 155413511378058ull}}, {{3003808378339142940ull, 77706755689029ull}}, {{15019041891695714701ull, 388533778445145ull}}, {{16732892982702633158ull, 194266889222572ull}}, {{8366446491351316579ull, 97133444611286ull}}, {{4938744309337479665ull, 485667223056432ull}}, {{2469372154668739832ull, 242833611528216ull}}, {{1234686077334369916ull, 121416805764108ull}}, {{617343038667184958ull, 60708402882054ull}}, {{3086715193335924790ull, 303542014410270ull}}, {{1543357596667962395ull, 151771007205135ull}}, {{9995050835188757005ull, 75885503602567ull}}, {{13081766028524681796ull, 379427518012837ull}}, {{15764255051117116706ull, 189713759006418ull}}, {{7882127525558558353ull, 94856879503209ull}}, {{2517149480373688533ull, 474284397516047ull}}, {{10481946777041620074ull, 237142198758023ull}}, {{14464345425375585845ull, 118571099379011ull}}, {{16455544749542568730ull, 59285549689505ull}}, {{8490747452874637189ull, 296427748447529ull}}, {{13468745763292094402ull, 148213874223764ull}}, {{6734372881646047201ull, 74106937111882ull}}, {{15225120334520684390ull, 370534685559411ull}}, {{16835932204115118003ull, 185267342779705ull}}, {{17641338138912334809ull, 92633671389852ull}}, {{14419714399723467584ull, 463168356949264ull}}, {{7209857199861733792ull, 231584178474632ull}}, {{3604928599930866896ull, 115792089237316ull}}, {{1802464299965433448ull, 57896044618658ull}}, {{9012321499827167240ull, 289480223093290ull}}, {{4506160749913583620ull, 144740111546645ull}}, {{11476452411811567618ull, 72370055773322ull}}, {{2042029837929183242ull, 361850278866613ull}}, {{10244386955819367429ull, 180925139433306ull}}, {{5122193477909683714ull, 90462569716653ull}}, {{7164223315838866956ull, 452312848583266ull}}, {{3582111657919433478ull, 226156424291633ull}}, {{11014427865814492547ull, 113078212145816ull}}, {{5507213932907246273ull, 56539106072908ull}}, {{9089325590826679752ull, 282695530364541ull}}, {{13768034832268115684ull, 141347765182270ull}}, {{6884017416134057842ull, 70673882591135ull}}, {{15973343006960737594ull, 353369412955676ull}}, {{7986671503480368797ull, 176684706477838ull}}, {{3993335751740184398ull, 88342353238919ull}}, {{1519934684991370376ull, 441711766194596ull}}, {{759967342495685188ull, 220855883097298ull}}, {{379983671247842594ull, 110427941548649ull}}, {{1899918356239212970ull, 552139707743245ull}}, {{10173331214974382293ull, 276069853871622ull}}, {{5086665607487191146ull, 138034926935811ull}}, {{11766704840598371381ull, 69017463467905ull}}, {{3493291981863202058ull, 345087317339528ull}}, {{1746645990931601029ull, 172543658669764ull}}, {{873322995465800514ull, 86271829334882ull}}, {{4366614977329002573ull, 431359146674410ull}}, {{2183307488664501286ull, 215679573337205ull}}, {{10315025781187026451ull, 107839786668602ull}}, {{14681640758516029024ull, 539198933343012ull}}, {{7340820379258014512ull, 269599466671506ull}}, {{3670410189629007256ull, 134799733335753ull}}, {{11058577131669279436ull, 67399866667876ull}}, {{18399397510927293948ull, 336999333339382ull}}, {{9199698755463646974ull, 168499666669691ull}}, {{13823221414586599295ull, 84249833334845ull}}, {{13775874851804341627ull, 421249166674228ull}}, {{6887937425902170813ull, 210624583337114ull}}, {{3443968712951085406ull, 105312291668557ull}}, {{17219843564755427034ull, 526561458342785ull}}, {{17833293819232489325ull, 263280729171392ull}}, {{8916646909616244662ull, 131640364585696ull}}, {{4458323454808122331ull, 65820182292848ull}}, {{3844873200331060040ull, 329100911464241ull}}, {{11145808637020305828ull, 164550455732120ull}}, {{5572904318510152914ull, 82275227866060ull}}, {{9417777518841212954ull, 411376139330301ull}}, {{13932260796275382285ull, 205688069665150ull}}, {{6966130398137691142ull, 102844034832575ull}}, {{16383907916978904097ull, 514220174162876ull}}, {{8191953958489452048ull, 257110087081438ull}}, {{4095976979244726024ull, 128555043540719ull}}, {{11271360526477138820ull, 64277521770359ull}}, {{1016570411257039252ull, 321387608851798ull}}, {{508285205628519626ull, 160693804425899ull}}, {{9477514639669035621ull, 80346902212949ull}}, {{10494085050926074874ull, 401734511064747ull}}, {{14470414562317813245ull, 200867255532373ull}}, {{16458579318013682430ull, 100433627766186ull}}, {{8505920295230205688ull, 502168138830934ull}}, {{4252960147615102844ull, 251084069415467ull}}, {{11349852110662327230ull, 125542034707733ull}}, {{14898298092185939423ull, 62771017353866ull}}, {{704514166091490651ull, 313855086769334ull}}, {{352257083045745325ull, 156927543384667ull}}, {{9399500578377648470ull, 78463771692333ull}}, {{10104014744469139122ull, 392318858461667ull}}, {{14275379409089345369ull, 196159429230833ull}}, {{16361061741399448492ull, 98079714615416ull}}, {{8018332412159035998ull, 490398573077084ull}}, {{4009166206079517999ull, 245199286538542ull}}, {{2004583103039758999ull, 122599643269271ull}}, {{10225663588374655307ull, 61299821634635ull}}, {{14234829794454173307ull, 306499108173177ull}}, {{16340786934081862461ull, 153249554086588ull}}, {{8170393467040931230ull, 76624777043294ull}}, {{3958479187785552922ull, 383123885216472ull}}, {{1979239593892776461ull, 191561942608236ull}}, {{989619796946388230ull, 95780971304118ull}}, {{4948098984731941152ull, 478904856520590ull}}, {{2474049492365970576ull, 239452428260295ull}}, {{10460396783037761096ull, 119726214130147ull}}, {{14453570428373656356ull, 59863107065073ull}}, {{16927619920739626932ull, 299315535325368ull}}, {{8463809960369813466ull, 149657767662684ull}}, {{4231904980184906733ull, 74828883831342ull}}, {{2712780827214982049ull, 374144419156711ull}}, {{10579762450462266832ull, 187072209578355ull}}, {{14513253262085909224ull, 93536104789177ull}}, {{17226034089300891273ull, 467680523945888ull}}, {{8613017044650445636ull, 233840261972944ull}}, {{4306508522325222818ull, 116920130986472ull}}, {{2153254261162611409ull, 58460065493236ull}}, {{10766271305813057046ull, 292300327466180ull}}, {{5383135652906528523ull, 146150163733090ull}}, {{2691567826453264261ull, 73075081866545ull}}, {{13457839132266321307ull, 365375409332725ull}}, {{15952291602987936461ull, 182687704666362ull}}, {{7976145801493968230ull, 91343852333181ull}}, {{2987240860050737922ull, 456719261665907ull}}, {{10716992466880144769ull, 228359630832953ull}}, {{14581868270294848192ull, 114179815416476ull}}, {{7290934135147424096ull, 57089907708238ull}}, {{18007926602027568865ull, 285449538541191ull}}, {{18227335337868560240ull, 142724769270595ull}}, {{18337039705789055928ull, 71362384635297ull}}, {{17898222234107073178ull, 356811923176489ull}}, {{18172483153908312397ull, 178405961588244ull}}, {{9086241576954156198ull, 89202980794122ull}}, {{8537719737351677760ull, 446014903970612ull}}, {{4268859868675838880ull, 223007451985306ull}}, {{2134429934337919440ull, 111503725992653ull}}, {{10672149671689597200ull, 557518629963265ull}}, {{14559446872699574408ull, 278759314981632ull}}, {{7279723436349787204ull, 139379657490816ull}}, {{3639861718174893602ull, 69689828745408ull}}, {{18199308590874468010ull, 348449143727040ull}}, {{9099654295437234005ull, 174224571863520ull}}, {{4549827147718617002ull, 87112285931760ull}}, {{4302391664883533397ull, 435561429658801ull}}, {{11374567869296542506ull, 217780714829400ull}}, {{5687283934648271253ull, 108890357414700ull}}, {{9989675599531804650ull, 544451787073501ull}}, {{14218209836620678133ull, 272225893536750ull}}, {{7109104918310339066ull, 136112946768375ull}}, {{12777924496009945341ull, 68056473384187ull}}, {{8549390258921071858ull, 340282366920938ull}}, {{4274695129460535929ull, 170141183460469ull}}, {{11360719601585043772ull, 85070591730234ull}}, {{1463365786796564015ull, 425352958651173ull}}, {{9955054930253057815ull, 212676479325586ull}}, {{4977527465126528907ull, 106338239662793ull}}, {{6440893251923092922ull, 531691198313966ull}}, {{3220446625961546461ull, 265845599156983ull}}, {{10833595349835549038ull, 132922799578491ull}}, {{14640169711772550327ull, 66461399789245ull}}, {{17860616337734096788ull, 332306998946228ull}}, {{8930308168867048394ull, 166153499473114ull}}, {{4465154084433524197ull, 83076749736557ull}}, {{3879026348458069369ull, 415383748682786ull}}, {{1939513174229034684ull, 207691874341393ull}}, {{10193128623969293150ull, 103845937170696ull}}, {{14072154972427362520ull, 519229685853482ull}}, {{7036077486213681260ull, 259614842926741ull}}, {{12741410779961616438ull, 129807421463370ull}}, {{6370705389980808219ull, 64903710731685ull}}, {{13406782876194489479ull, 324518553658426ull}}, {{6703391438097244739ull, 162259276829213ull}}, {{12575067755903398177ull, 81129638414606ull}}, {{7535106558388336041ull, 405648192073033ull}}, {{12990925316048943828ull, 202824096036516ull}}, {{6495462658024471914ull, 101412048018258ull}}, {{14030569216412807955ull, 507060240091291ull}}, {{16238656645061179785ull, 253530120045645ull}}, {{17342700359385365700ull, 126765060022822ull}}, {{8671350179692682850ull, 63382530011411ull}}, {{6463262751044311020ull, 316912650057057ull}}, {{12455003412376931318ull, 158456325028528ull}}, {{6227501706188465659ull, 79228162514264ull}}, {{12690764457232776679ull, 396140812571321ull}}, {{15568754265471164147ull, 198070406285660ull}}, {{7784377132735582073ull, 99035203142830ull}}, {{2028397516258807136ull, 495176015714152ull}}, {{1014198758129403568ull, 247588007857076ull}}, {{507099379064701784ull, 123794003928538ull}}, {{253549689532350892ull, 61897001964269ull}}, {{1267748447661754460ull, 309485009821345ull}}, {{9857246260685653038ull, 154742504910672ull}}, {{4928623130342826519ull, 77371252455336ull}}, {{6196371578004580979ull, 386856262276681ull}}, {{12321557825857066297ull, 193428131138340ull}}, {{6160778912928533148ull, 96714065569170ull}}, {{12357150490933114128ull, 483570327845851ull}}, {{15401947282321332872ull, 241785163922925ull}}, {{16924345678015442244ull, 120892581961462ull}}, {{8462172839007721122ull, 60446290980731ull}}, {{5417376047619502378ull, 302231454903657ull}}, {{11932060060664526997ull, 151115727451828ull}}, {{5966030030332263498ull, 75557863725914ull}}, {{11383406077951765876ull, 377789318629571ull}}, {{14915075075830658746ull, 188894659314785ull}}, {{16680909574770105181ull, 94447329657392ull}}, {{9617571579012319442ull, 472236648286964ull}}, {{4808785789506159721ull, 236118324143482ull}}, {{2404392894753079860ull, 118059162071741ull}}, {{10425568484231315738ull, 59029581035870ull}}, {{15234354273737475459ull, 295147905179352ull}}, {{7617177136868737729ull, 147573952589676ull}}, {{3808588568434368864ull, 73786976294838ull}}, {{596198768462292708ull, 368934881474191ull}}, {{9521471421085922162ull, 184467440737095ull}}, {{13984107747397736889ull, 92233720368547ull}}, {{14580306515860029597ull, 461168601842738ull}}, {{7290153257930014798ull, 230584300921369ull}}, {{12868448665819783207ull, 115292150460684ull}}, {{6434224332909891603ull, 57646075230342ull}}, {{13724377590839906402ull, 288230376151711ull}}, {{16085560832274729009ull, 144115188075855ull}}, {{17266152452992140312ull, 72057594037927ull}}, {{12543785970122495098ull, 360287970189639ull}}, {{15495265021916023357ull, 180143985094819ull}}, {{16971004547812787486ull, 90071992547409ull}}, {{11068046444225730969ull, 450359962737049ull}}, {{14757395258967641292ull, 225179981368524ull}}, {{7378697629483820646ull, 112589990684262ull}}, {{3689348814741910323ull, 56294995342131ull}}, {{18446744073709551615ull, 281474976710655ull}}, {{18446744073709551615ull, 140737488355327ull}}, {{18446744073709551615ull, 70368744177663ull}}, {{18446744073709551615ull, 351843720888319ull}}, {{18446744073709551615ull, 175921860444159ull}}, {{18446744073709551615ull, 87960930222079ull}}, {{18446744073709551615ull, 439804651110399ull}}, {{18446744073709551615ull, 219902325555199ull}}, {{18446744073709551615ull, 109951162777599ull}}, {{18446744073709551615ull, 549755813887999ull}}, {{18446744073709551615ull, 274877906943999ull}}, {{18446744073709551615ull, 137438953471999ull}}, {{18446744073709551615ull, 68719476735999ull}}, {{18446744073709551615ull, 343597383679999ull}}, {{18446744073709551615ull, 171798691839999ull}}, {{18446744073709551615ull, 85899345919999ull}}, {{18446744073709551615ull, 429496729599999ull}}, {{18446744073709551615ull, 214748364799999ull}}, {{18446744073709551615ull, 107374182399999ull}}, {{18446744073709551615ull, 536870911999999ull}}, {{18446744073709551615ull, 268435455999999ull}}, {{18446744073709551615ull, 134217727999999ull}}, {{18446744073709551615ull, 67108863999999ull}}, {{18446744073709551615ull, 335544319999999ull}}, {{18446744073709551615ull, 167772159999999ull}}, {{18446744073709551615ull, 83886079999999ull}}, {{18446744073709551615ull, 419430399999999ull}}, {{18446744073709551615ull, 209715199999999ull}}, {{18446744073709551615ull, 104857599999999ull}}, {{18446744073709551615ull, 524287999999999ull}}, {{18446744073709551615ull, 262143999999999ull}}, {{18446744073709551615ull, 131071999999999ull}}, {{18446744073709551615ull, 65535999999999ull}}, {{18446744073709551615ull, 327679999999999ull}}, {{18446744073709551615ull, 163839999999999ull}}, {{18446744073709551615ull, 81919999999999ull}}, {{18446744073709551615ull, 409599999999999ull}}, {{18446744073709551615ull, 204799999999999ull}}, {{18446744073709551615ull, 102399999999999ull}}, {{18446744073709551615ull, 511999999999999ull}}, {{18446744073709551615ull, 255999999999999ull}}, {{18446744073709551615ull, 127999999999999ull}}, {{18446744073709551615ull, 63999999999999ull}}, {{18446744073709551615ull, 319999999999999ull}}, {{18446744073709551615ull, 159999999999999ull}}, {{18446744073709551615ull, 79999999999999ull}}, {{18446744073709551615ull, 399999999999999ull}}, {{18446744073709551615ull, 199999999999999ull}}, {{18446744073709551615ull, 99999999999999ull}}, {{18446744073709551615ull, 499999999999999ull}}, {{18446744073709551615ull, 249999999999999ull}}, {{18446744073709551615ull, 124999999999999ull}}, {{18446744073709551615ull, 62499999999999ull}}, {{18446744073709551615ull, 312499999999999ull}}, {{18446744073709551615ull, 156249999999999ull}}, {{18446744073709551615ull, 78124999999999ull}}, {{18446744073709551615ull, 390624999999999ull}}, {{18446744073709551615ull, 195312499999999ull}}, {{18446744073709551615ull, 97656249999999ull}}, {{18446744073709551615ull, 488281249999999ull}}, {{18446744073709551615ull, 244140624999999ull}}, {{18446744073709551615ull, 122070312499999ull}}, {{18446744073709551615ull, 61035156249999ull}}, {{18446744073709551615ull, 305175781249999ull}}, {{18446744073709551615ull, 152587890624999ull}}, {{18446744073709551615ull, 76293945312499ull}}, {{18446744073709551615ull, 381469726562499ull}}, {{18446744073709551615ull, 190734863281249ull}}, {{18446744073709551615ull, 95367431640624ull}}, {{18446744073709551615ull, 476837158203124ull}}, {{9223372036854775807ull, 238418579101562ull}}, {{4611686018427387903ull, 119209289550781ull}}, {{11529215046068469759ull, 59604644775390ull}}, {{2305843009213693951ull, 298023223876953ull}}, {{10376293541461622783ull, 149011611938476ull}}, {{5188146770730811391ull, 74505805969238ull}}, {{7493989779944505343ull, 372529029846191ull}}, {{12970366926827028479ull, 186264514923095ull}}, {{15708555500268290047ull, 93132257461547ull}}, {{4755801206503243775ull, 465661287307739ull}}, {{11601272640106397695ull, 232830643653869ull}}, {{15024008356907974655ull, 116415321826934ull}}, {{7512004178453987327ull, 58207660913467ull}}, {{666532744850833407ull, 291038304567337ull}}, {{9556638409280192511ull, 145519152283668ull}}, {{4778319204640096255ull, 72759576141834ull}}, {{5444851949490929663ull, 363797880709171ull}}, {{11945798011600240639ull, 181898940354585ull}}, {{15196271042654896127ull, 90949470177292ull}}, {{2194378918436274175ull, 454747350886464ull}}, {{1097189459218137087ull, 227373675443232ull}}, {{548594729609068543ull, 113686837721616ull}}, {{274297364804534271ull, 56843418860808ull}}, {{1371486824022671359ull, 284217094304040ull}}, {{685743412011335679ull, 142108547152020ull}}, {{342871706005667839ull, 71054273576010ull}}, {{1714358530028339199ull, 355271367880050ull}}, {{857179265014169599ull, 177635683940025ull}}, {{9651961669361860607ull, 88817841970012ull}}, {{11366320199390199807ull, 444089209850062ull}}, {{5683160099695099903ull, 222044604925031ull}}, {{12064952086702325759ull, 111022302462515ull}}, {{4984528212382973951ull, 555111512312578ull}}, {{2492264106191486975ull, 277555756156289ull}}, {{10469504089950519295ull, 138777878078144ull}}, {{5234752044975259647ull, 69388939039072ull}}, {{7727016151166746623ull, 346944695195361ull}}, {{13086880112438149119ull, 173472347597680ull}}, {{6543440056219074559ull, 86736173798840ull}}, {{14270456207385821183ull, 433680868994201ull}}, {{16358600140547686399ull, 216840434497100ull}}, {{8179300070273843199ull, 108420217248550ull}}, {{4003012203950112767ull, 542101086242752ull}}, {{2001506101975056383ull, 271050543121376ull}}, {{1000753050987528191ull, 135525271560688ull}}, {{500376525493764095ull, 67762635780344ull}}, {{2501882627468820479ull, 338813178901720ull}}, {{1250941313734410239ull, 169406589450860ull}}, {{625470656867205119ull, 84703294725430ull}}, {{3127353284336025599ull, 423516473627150ull}}, {{1563676642168012799ull, 211758236813575ull}}, {{10005210357938782207ull, 105879118406787ull}}, {{13132563642274807807ull, 529395592033937ull}}, {{15789653857992179711ull, 264697796016968ull}}, {{7894826928996089855ull, 132348898008484ull}}, {{3947413464498044927ull, 66174449004242ull}}, {{1290323248780673023ull, 330872245021211ull}}, {{9868533661245112319ull, 165436122510605ull}}, {{14157638867477331967ull, 82718061255302ull}}, {{15447962116258004991ull, 413590306276513ull}}, {{16947353094983778303ull, 206795153138256ull}}, {{8473676547491889151ull, 103397576569128ull}}, {{5474894590040342527ull, 516987882845642ull}}, {{2737447295020171263ull, 258493941422821ull}}, {{10592095684364861439ull, 129246970711410ull}}, {{5296047842182430719ull, 64623485355705ull}}, {{8033495137202601983ull, 323117426778526ull}}, {{4016747568601300991ull, 161558713389263ull}}, {{11231745821155426303ull, 80779356694631ull}}, {{818496884648476671ull, 403896783473158ull}}, {{409248442324238335ull, 201948391736579ull}}, {{9427996258016894975ull, 100974195868289ull}}, {{10246493142665371647ull, 504870979341447ull}}, {{14346618608187461631ull, 252435489670723ull}}, {{16396681340948506623ull, 126217744835361ull}}, {{17421712707329029119ull, 63108872417680ull}}, {{13321587241806939135ull, 315544362088404ull}}, {{6660793620903469567ull, 157772181044202ull}}, {{3330396810451734783ull, 78886090522101ull}}, {{16651984052258673919ull, 394430452610505ull}}, {{17549364062984112767ull, 197215226305252ull}}, {{8774682031492056383ull, 98607613152626ull}}, {{6979922010041178687ull, 493038065763132ull}}, {{3489961005020589343ull, 246519032881566ull}}, {{1744980502510294671ull, 123259516440783ull}}, {{10095862288109923143ull, 61629758220391ull}}, {{13585823293130512487ull, 308148791101957ull}}, {{16016283683420032051ull, 154074395550978ull}}, {{8008141841710016025ull, 77037197775489ull}}, {{3147221061130976897ull, 385185988877447ull}}, {{10796982567420264256ull, 192592994438723ull}}, {{14621863320564907936ull, 96296497219361ull}}, {{17769084381695884834ull, 481482486096808ull}}, {{8884542190847942417ull, 240741243048404ull}}, {{4442271095423971208ull, 120370621524202ull}}, {{2221135547711985604ull, 60185310762101ull}}, {{11105677738559928021ull, 300926553810505ull}}, {{14776210906134739818ull, 150463276905252ull}}, {{7388105453067369909ull, 75231638452626ull}}, {{47039117917746314ull, 376158192263132ull}}, {{23519558958873157ull, 188079096131566ull}}, {{11759779479436578ull, 94039548065783ull}}, {{58798897397182893ull, 470197740328915ull}}, {{9252771485553367254ull, 235098870164457ull}}, {{13849757779631459435ull, 117549435082228ull}}, {{6924878889815729717ull, 58774717541114ull}}, {{16177650375369096972ull, 293873587705571ull}}, {{17312197224539324294ull, 146936793852785ull}}, {{17879470649124437955ull, 73468396926392ull}}, {{15610376950783983311ull, 367341984631964ull}}, {{7805188475391991655ull, 183670992315982ull}}, {{3902594237695995827ull, 91835496157991ull}}, {{1066227114770427523ull, 459177480789956ull}}, {{533113557385213761ull, 229588740394978ull}}, {{266556778692606880ull, 114794370197489ull}}, {{9356650426201079248ull, 57397185098744ull}}, {{9889763983586293010ull, 286985925493722ull}}, {{4944881991793146505ull, 143492962746861ull}}, {{11695813032751349060ull, 71746481373430ull}}, {{3138832942628090454ull, 358732406867153ull}}, {{10792788508168821035ull, 179366203433576ull}}, {{5396394254084410517ull, 89683101716788ull}}, {{8535227196712500972ull, 448415508583941ull}}, {{13490985635211026294ull, 224207754291970ull}}, {{6745492817605513147ull, 112103877145985ull}}, {{15280720014318014119ull, 560519385729926ull}}, {{7640360007159007059ull, 280259692864963ull}}, {{13043552040434279337ull, 140129846432481ull}}, {{15745148057071915476ull, 70064923216240ull}}, {{4938763990521370920ull, 350324616081204ull}}, {{2469381995260685460ull, 175162308040602ull}}, {{1234690997630342730ull, 87581154020301ull}}, {{6173454988151713650ull, 437905770101505ull}}, {{12310099530930632633ull, 218952885050752ull}}, {{6155049765465316316ull, 109476442525376ull}}, {{12328504753617029967ull, 547382212626881ull}}, {{15387624413663290791ull, 273691106313440ull}}, {{7693812206831645395ull, 136845553156720ull}}, {{3846906103415822697ull, 68422776578360ull}}, {{787786443369561873ull, 342113882891801ull}}, {{9617265258539556744ull, 171056941445900ull}}, {{4808632629269778372ull, 85528470722950ull}}, {{5596419072639340246ull, 427642353614751ull}}, {{12021581573174445931ull, 213821176807375ull}}, {{15234162823441998773ull, 106910588403687ull}}, {{2383837822371787403ull, 534552942018439ull}}, {{10415290948040669509ull, 267276471009219ull}}, {{14431017510875110562ull, 133638235504609ull}}, {{16438880792292331089ull, 66819117752304ull}}, {{8407427666623448983ull, 334095588761524ull}}, {{4203713833311724491ull, 167047794380762ull}}, {{2101856916655862245ull, 83523897190381ull}}, {{10509284583279311229ull, 417619485951905ull}}, {{14478014328494431422ull, 208809742975952ull}}, {{7239007164247215711ull, 104404871487976ull}}, {{17748291747526526940ull, 522024357439881ull}}, {{18097517910618039278ull, 261012178719940ull}}, {{9048758955309019639ull, 130506089359970ull}}, {{4524379477654509819ull, 65253044679985ull}}, {{4175153314562997481ull, 326265223399926ull}}, {{2087576657281498740ull, 163132611699963ull}}, {{10267160365495525178ull, 81566305849981ull}}, {{14442313680058522660ull, 407831529249907ull}}, {{16444528876884037138ull, 203915764624953ull}}, {{17445636475296794377ull, 101957882312476ull}}, {{13441206081645765421ull, 509789411562384ull}}, {{6720603040822882710ull, 254894705781192ull}}, {{3360301520411441355ull, 127447352890596ull}}, {{1680150760205720677ull, 63723676445298ull}}, {{8400753801028603388ull, 318618382226490ull}}, {{4200376900514301694ull, 159309191113245ull}}, {{11323560487111926655ull, 79654595556622ull}}, {{1277570214430978427ull, 398272977783113ull}}, {{9862157144070265021ull, 199136488891556ull}}, {{4931078572035132510ull, 99568244445778ull}}, {{6208648786466110938ull, 497841222228891ull}}, {{12327696430087831277ull, 248920611114445ull}}, {{15387220251898691446ull, 124460305557222ull}}, {{7693610125949345723ull, 62230152778611ull}}, {{1574562482327625384ull, 311150763893057ull}}, {{10010653278018588500ull, 155575381946528ull}}, {{5005326639009294250ull, 77787690973264ull}}, {{6579889121336919634ull, 388938454866321ull}}, {{12513316597523235625ull, 194469227433160ull}}, {{6256658298761617812ull, 97234613716580ull}}, {{12836547420098537447ull, 486173068582901ull}}, {{15641645746904044531ull, 243086534291450ull}}, {{7820822873452022265ull, 121543267145725ull}}, {{13133783473580786940ull, 60771633572862ull}}, {{10328685146775279856ull, 303858167864313ull}}, {{14387714610242415736ull, 151929083932156ull}}, {{7193857305121207868ull, 75964541966078ull}}, {{17522542451896487724ull, 379822709830391ull}}, {{17984643262803019670ull, 189911354915195ull}}, {{18215693668256285643ull, 94955677457597ull}}, {{17291492046443221751ull, 474778387287989ull}}, {{17869118060076386683ull, 237389193643994ull}}, {{8934559030038193341ull, 118694596821997ull}}, {{13690651551873872478ull, 59347298410998ull}}, {{13113025538240707546ull, 296736492054993ull}}, {{15779884805975129581ull, 148368246027496ull}}, {{7889942402987564790ull, 74184123013748ull}}, {{2556223867518720721ull, 370920615068742ull}}, {{1278111933759360360ull, 185460307534371ull}}, {{9862428003734455988ull, 92730153767185ull}}, {{12418651871253176710ull, 463650768835927ull}}, {{15432697972481364163ull, 231825384417963ull}}, {{16939721023095457889ull, 115912692208981ull}}, {{17693232548402504752ull, 57956346104490ull}}, {{14679186447174317299ull, 289781730522454ull}}, {{7339593223587158649ull, 144890865261227ull}}, {{12893168648648355132ull, 72445432630613ull}}, {{9125611022113120816ull, 362227163153068ull}}, {{4562805511056560408ull, 181113581576534ull}}, {{2281402755528280204ull, 90556790788267ull}}, {{11407013777641401020ull, 452783953941335ull}}, {{14926878925675476318ull, 226391976970667ull}}, {{16686811499692513967ull, 113195988485333ull}}, {{17566777786701032791ull, 56597994242666ull}}, {{14046912638666957494ull, 282989971213334ull}}, {{7023456319333478747ull, 141494985606667ull}}, {{12735100196521515181ull, 70747492803333ull}}, {{8335268761478921059ull, 353737464016668ull}}, {{4167634380739460529ull, 176868732008334ull}}, {{2083817190369730264ull, 88434366004167ull}}, {{10419085951848651324ull, 442171830020835ull}}, {{14432915012779101470ull, 221085915010417ull}}, {{16439829543244326543ull, 110542957505208ull}}, {{8412171421383426251ull, 552714787526044ull}}, {{4206085710691713125ull, 276357393763022ull}}, {{2103042855345856562ull, 138178696881511ull}}, {{10274893464527704089ull, 69089348440755ull}}, {{14480979175219417215ull, 345446742203777ull}}, {{16463861624464484415ull, 172723371101888ull}}, {{8231930812232242207ull, 86361685550944ull}}, {{4266165913742107807ull, 431808427754722ull}}, {{2133082956871053903ull, 215904213877361ull}}, {{10289913515290302759ull, 107952106938680ull}}, {{14556079429032410566ull, 539760534693402ull}}, {{7278039714516205283ull, 269880267346701ull}}, {{12862391894112878449ull, 134940133673350ull}}, {{6431195947056439224ull, 67470066836675ull}}, {{13709235661572644508ull, 337350334183376ull}}, {{6854617830786322254ull, 168675167091688ull}}, {{3427308915393161127ull, 84337583545844ull}}, {{17136544576965805635ull, 421687917729220ull}}, {{8568272288482902817ull, 210843958864610ull}}, {{4284136144241451408ull, 105421979432305ull}}, {{2973936647497705428ull, 527109897161526ull}}, {{1486968323748852714ull, 263554948580763ull}}, {{9966856198729202165ull, 131777474290381ull}}, {{14206800136219376890ull, 65888737145190ull}}, {{15693768459968229604ull, 329443685725953ull}}, {{17070256266838890610ull, 164721842862976ull}} }; static const int exponents_bid32[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 180, 181, 181, 181, 182, 182, 182, 183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 186, 186, 186, 187, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190, 190, 190, 190, 191, 191, }; static const UINT256 multipliers1_bid32[] = { {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{8022453891189237964ull, 4305922861044245892ull, 15091728617112590342ull, 392727477223ull}}, {{16044907782378475927ull, 8611845722088491784ull, 11736713160515629068ull, 785454954447ull}}, {{13643071491047400238ull, 17223691444176983569ull, 5026682247321706520ull, 1570909908895ull}}, {{8839398908385248859ull, 16000638814644415523ull, 10053364494643413041ull, 3141819817790ull}}, {{16525275040644691065ull, 6889476577670793427ull, 2010672898928682608ull, 628363963558ull}}, {{14603806007579830513ull, 13778953155341586855ull, 4021345797857365216ull, 1256727927116ull}}, {{10760867941450109410ull, 9111162236973622095ull, 8042691595714730433ull, 2513455854232ull}}, {{2152173588290021882ull, 1822232447394724419ull, 8987235948626766733ull, 502691170846ull}}, {{4304347176580043764ull, 3644464894789448838ull, 17974471897253533466ull, 1005382341692ull}}, {{8608694353160087528ull, 7288929789578897676ull, 17502199720797515316ull, 2010764683385ull}}, {{9100436500115838152ull, 5147134772657689858ull, 3500439944159503063ull, 402152936677ull}}, {{18200873000231676304ull, 10294269545315379716ull, 7000879888319006126ull, 804305873354ull}}, {{17955001926753800992ull, 2141795016921207817ull, 14001759776638012253ull, 1608611746708ull}}, {{17463259779798050368ull, 4283590033842415635ull, 9556775479566472890ull, 3217223493417ull}}, {{10871349585443430720ull, 8235415636252303773ull, 9290052725397115224ull, 643444698683ull}}, {{3295955097177309824ull, 16470831272504607547ull, 133361377084678832ull, 1286889397367ull}}, {{6591910194354619648ull, 14494918471299663478ull, 266722754169357665ull, 2573778794734ull}}, {{8697079668354744576ull, 17656378953227573988ull, 14810739809801512825ull, 514755758946ull}}, {{17394159336709489152ull, 16866013832745596360ull, 11174735545893474035ull, 1029511517893ull}}, {{16341574599709426688ull, 15285283591781641105ull, 3902727018077396455ull, 2059023035787ull}}, {{10647012549425705984ull, 10435754347840148867ull, 8159243033099299937ull, 411804607157ull}}, {{2847281025141860352ull, 2424764621970746119ull, 16318486066198599875ull, 823609214314ull}}, {{5694562050283720704ull, 4849529243941492238ull, 14190228058687648134ull, 1647218428629ull}}, {{4828261224798654464ull, 12037952293014029417ull, 17595440870705170919ull, 329443685725ull}}, {{9656522449597308928ull, 5629160512318507218ull, 16744137667700790223ull, 658887371451ull}}, {{866300825485066240ull, 11258321024637014437ull, 15041531261692028830ull, 1317774742903ull}}, {{1732601650970132480ull, 4069897975564477258ull, 11636318449674506045ull, 2635549485807ull}}, {{346520330194026496ull, 8192677224596716098ull, 9705961319418721855ull, 527109897161ull}}, {{693040660388052992ull, 16385354449193432196ull, 965178565127892094ull, 1054219794323ull}}, {{1386081320776105984ull, 14323964824677312776ull, 1930357130255784189ull, 2108439588646ull}}, {{3966565078897131520ull, 2864792964935462555ull, 4075420240793067161ull, 421687917729ull}}, {{7933130157794263040ull, 5729585929870925110ull, 8150840481586134322ull, 843375835458ull}}, {{15866260315588526080ull, 11459171859741850220ull, 16301680963172268644ull, 1686751670916ull}}, {{3173252063117705216ull, 2291834371948370044ull, 6949685007376364052ull, 337350334183ull}}, {{6346504126235410432ull, 4583668743896740088ull, 13899370014752728104ull, 674700668366ull}}, {{12693008252470820864ull, 9167337487793480176ull, 9351995955795904592ull, 1349401336733ull}}, {{6939272431232090112ull, 18334674975586960353ull, 257247837882257568ull, 2698802673467ull}}, {{12455900930472148992ull, 3666934995117392070ull, 7430147197060272160ull, 539760534693ull}}, {{6465057787234746368ull, 7333869990234784141ull, 14860294394120544320ull, 1079521069386ull}}, {{12930115574469492736ull, 14667739980469568282ull, 11273844714531537024ull, 2159042138773ull}}, {{17343418373861539840ull, 10312245625577734302ull, 13322815387132038374ull, 431808427754ull}}, {{16240092674013528064ull, 2177747177445916989ull, 8198886700554525133ull, 863616855509ull}}, {{14033441274317504512ull, 4355494354891833979ull, 16397773401109050266ull, 1727233711018ull}}, {{13874734699089231872ull, 15628494129946008088ull, 14347601124447541022ull, 345446742203ull}}, {{9302725324468912128ull, 12810244186182464561ull, 10248458175185530429ull, 690893484407ull}}, {{158706575228272640ull, 7173744298655377507ull, 2050172276661509243ull, 1381786968815ull}}, {{317413150456545280ull, 14347488597310755014ull, 4100344553323018486ull, 2763573937630ull}}, {{63482630091309056ull, 6558846534204061326ull, 820068910664603697ull, 552714787526ull}}, {{126965260182618112ull, 13117693068408122652ull, 1640137821329207394ull, 1105429575052ull}}, {{253930520365236224ull, 7788642063106693688ull, 3280275642658414789ull, 2210859150104ull}}, {{3740134918814957568ull, 12625774856847069707ull, 15413450387499324250ull, 442171830020ull}}, {{7480269837629915136ull, 6804805639984587798ull, 12380156701289096885ull, 884343660041ull}}, {{14960539675259830272ull, 13609611279969175596ull, 6313569328868642154ull, 1768687320083ull}}, {{14060154379277697024ull, 10100619885477655765ull, 12330760309999459400ull, 353737464016ull}}, {{9673564684845842432ull, 1754495697245759915ull, 6214776546289367185ull, 707474928033ull}}, {{900385295982133248ull, 3508991394491519831ull, 12429553092578734370ull, 1414949856066ull}}, {{1800770591964266496ull, 7017982788983039662ull, 6412362111447917124ull, 2829899712133ull}}, {{15117549377360494592ull, 8782294187280428578ull, 12350518866515314394ull, 565979942426ull}}, {{11788354681011437568ull, 17564588374560857157ull, 6254293659321077172ull, 1131959884853ull}}, {{5129965288313323520ull, 16682432675412162699ull, 12508587318642154345ull, 2263919769706ull}}, {{1025993057662664704ull, 7025835349824342863ull, 6191066278470341192ull, 452783953941ull}}, {{2051986115325329408ull, 14051670699648685726ull, 12382132556940682384ull, 905567907882ull}}, {{4103972230650658816ull, 9656597325587819836ull, 6317521040171813153ull, 1811135815765ull}}, {{15578189705097773056ull, 12999365909343294936ull, 1263504208034362630ull, 362227163153ull}}, {{12709635336485994496ull, 7551987744977038257ull, 2527008416068725261ull, 724454326306ull}}, {{6972526599262437376ull, 15103975489954076515ull, 5054016832137450522ull, 1448908652612ull}}, {{13945053198524874752ull, 11761206906198601414ull, 10108033664274901045ull, 2897817305224ull}}, {{13857057083930705920ull, 17109636640207361575ull, 16779001991822621501ull, 579563461044ull}}, {{9267370094151860224ull, 15772529206705171535ull, 15111259909935691387ull, 1159126922089ull}}, {{87996114594168832ull, 13098314339700791455ull, 11775775746161831159ull, 2318253844179ull}}, {{11085645667144564736ull, 13687709312165889260ull, 17112550408200007524ull, 463650768835ull}}, {{3724547260579577856ull, 8928674550622226905ull, 15778356742690463433ull, 927301537671ull}}, {{7449094521159155712ull, 17857349101244453810ull, 13109969411671375250ull, 1854603075343ull}}, {{12557865348457562112ull, 14639516264474621731ull, 13690040326560006019ull, 370920615068ull}}, {{6668986623205572608ull, 10832288455239691847ull, 8933336579410460423ull, 741841230137ull}}, {{13337973246411145216ull, 3217832836769832078ull, 17866673158820920847ull, 1483682460274ull}}, {{8229202419112738816ull, 6435665673539664157ull, 17286602243932290078ull, 2967364920549ull}}, {{16403235742790189056ull, 8665830764191753477ull, 18214715707754099308ull, 593472984109ull}}, {{14359727411870826496ull, 17331661528383506955ull, 17982687341798647000ull, 1186945968219ull}}, {{10272710750032101376ull, 16216578983057462295ull, 17518630609887742385ull, 2373891936439ull}}, {{16811937408974061568ull, 18000711055579133751ull, 18261121380945189769ull, 474778387287ull}}, {{15177130744238571520ull, 17554678037448715887ull, 18075498688180827923ull, 949556774575ull}}, {{11907517414767591424ull, 16662612001187880159ull, 17704253302652104231ull, 1899113549151ull}}, {{6070852297695428608ull, 10711220029721396678ull, 7230199475272331169ull, 379822709830ull}}, {{12141704595390857216ull, 2975695985733241740ull, 14460398950544662339ull, 759645419660ull}}, {{5836665117072162816ull, 5951391971466483481ull, 10474053827379773062ull, 1519290839321ull}}, {{11673330234144325632ull, 11902783942932966962ull, 2501363581049994508ull, 3038581678643ull}}, {{13402712491054596096ull, 6069905603328503715ull, 11568319160435729871ull, 607716335728ull}}, {{8358680908399640576ull, 12139811206657007431ull, 4689894247161908126ull, 1215432671457ull}}, {{16717361816799281152ull, 5832878339604463246ull, 9379788494323816253ull, 2430865342914ull}}, {{14411518807585587200ull, 8545273297404713295ull, 16633352957832404543ull, 486173068582ull}}, {{10376293541461622784ull, 17090546594809426591ull, 14819961841955257470ull, 972346137165ull}}, {{2305843009213693952ull, 15734349115909301567ull, 11193179610200963325ull, 1944692274331ull}}, {{11529215046068469760ull, 6836218637923770636ull, 5927984736782102988ull, 388938454866ull}}, {{4611686018427387904ull, 13672437275847541273ull, 11855969473564205976ull, 777876909732ull}}, {{9223372036854775808ull, 8898130477985530930ull, 5265194873418860337ull, 1555753819465ull}}, {{0ull, 17796260955971061861ull, 10530389746837720674ull, 3111507638930ull}}, {{0ull, 18316647450161853665ull, 2106077949367544134ull, 622301527786ull}}, {{0ull, 18186550826614155714ull, 4212155898735088269ull, 1244603055572ull}}, {{0ull, 17926357579518759812ull, 8424311797470176539ull, 2489206111144ull}}, {{0ull, 14653317960129482932ull, 16442257618461676600ull, 497841222228ull}}, {{0ull, 10859891846549414248ull, 14437771163213801585ull, 995682444457ull}}, {{0ull, 3273039619389276880ull, 10428798252718051555ull, 1991364888915ull}}, {{0ull, 654607923877855376ull, 2085759650543610311ull, 398272977783ull}}, {{0ull, 1309215847755710752ull, 4171519301087220622ull, 796545955566ull}}, {{0ull, 2618431695511421504ull, 8343038602174441244ull, 1593091911132ull}}, {{0ull, 5236863391022843008ull, 16686077204348882488ull, 3186183822264ull}}, {{0ull, 8426070307688389248ull, 18094610699837417790ull, 637236764452ull}}, {{0ull, 16852140615376778496ull, 17742477325965283964ull, 1274473528905ull}}, {{0ull, 15257537157044005376ull, 17038210578221016313ull, 2548947057811ull}}, {{0ull, 17808902690376442368ull, 7096990930386113585ull, 509789411562ull}}, {{0ull, 17171061307043333120ull, 14193981860772227171ull, 1019578823124ull}}, {{0ull, 15895378540377114624ull, 9941219647834902727ull, 2039157646249ull}}, {{0ull, 6868424522817333248ull, 16745639188534621838ull, 407831529249ull}}, {{0ull, 13736849045634666496ull, 15044534303359692060ull, 815663058499ull}}, {{0ull, 9026954017559781376ull, 11642324533009832505ull, 1631326116999ull}}, {{0ull, 18053908035119562752ull, 4837904992310113394ull, 3262652233999ull}}, {{0ull, 14678828051249643520ull, 15724976257429663971ull, 652530446799ull}}, {{0ull, 10910912028789735424ull, 13003208441149776327ull, 1305060893599ull}}, {{0ull, 3375079983869919232ull, 7559672808590001039ull, 2610121787199ull}}, {{0ull, 11743062440999714816ull, 16269329820685641500ull, 522024357439ull}}, {{0ull, 5039380808289878016ull, 14091915567661731385ull, 1044048714879ull}}, {{0ull, 10078761616579756032ull, 9737087061613911154ull, 2088097429759ull}}, {{0ull, 13083798767541682176ull, 16704812671290423523ull, 417619485951ull}}, {{0ull, 7720853461373812736ull, 14962881268871295431ull, 835238971903ull}}, {{0ull, 15441706922747625472ull, 11479018464033039246ull, 1670477943807ull}}, {{0ull, 14156387828775256064ull, 9674501322290428495ull, 334095588761ull}}, {{0ull, 9866031583840960512ull, 902258570871305375ull, 668191177523ull}}, {{0ull, 1285319093972369408ull, 1804517141742610751ull, 1336382355046ull}}, {{0ull, 2570638187944738816ull, 3609034283485221502ull, 2672764710092ull}}, {{0ull, 15271522896556589056ull, 8100504486180864946ull, 534552942018ull}}, {{0ull, 12096301719403626496ull, 16201008972361729893ull, 1069105884036ull}}, {{0ull, 5745859365097701376ull, 13955273871013908171ull, 2138211768073ull}}, {{0ull, 15906567131987181568ull, 13859101218428512603ull, 427642353614ull}}, {{0ull, 13366390190264811520ull, 9271458363147473591ull, 855284707229ull}}, {{0ull, 8286036306820071424ull, 96172652585395567ull, 1710569414459ull}}, {{0ull, 5346556076105924608ull, 14776629789484720406ull, 342113882891ull}}, {{0ull, 10693112152211849216ull, 11106515505259889196ull, 684227765783ull}}, {{0ull, 2939480230714146816ull, 3766286936810226777ull, 1368455531567ull}}, {{0ull, 5878960461428293632ull, 7532573873620453554ull, 2736911063134ull}}, {{0ull, 12243838536511389696ull, 16263910033691732003ull, 547382212626ull}}, {{0ull, 6040932999313227776ull, 14081075993673912391ull, 1094764425253ull}}, {{0ull, 12081865998626455552ull, 9715407913638273166ull, 2189528850507ull}}, {{0ull, 13484419643951022080ull, 9321779212211475279ull, 437905770101ull}}, {{0ull, 8522095214192492544ull, 196814350713398943ull, 875811540203ull}}, {{0ull, 17044190428384985088ull, 393628701426797886ull, 1751623080406ull}}, {{0ull, 10787535715160817664ull, 3768074555027269900ull, 350324616081ull}}, {{0ull, 3128327356612083712ull, 7536149110054539801ull, 700649232162ull}}, {{0ull, 6256654713224167424ull, 15072298220109079602ull, 1401298464324ull}}, {{0ull, 12513309426448334848ull, 11697852366508607588ull, 2802596928649ull}}, {{0ull, 9881359514773487616ull, 17096965732269362810ull, 560519385729ull}}, {{0ull, 1315974955837423616ull, 15747187390829174005ull, 1121038771459ull}}, {{0ull, 2631949911674847232ull, 13047630707948796394ull, 2242077542919ull}}, {{0ull, 11594436426560700416ull, 17366921400557400571ull, 448415508583ull}}, {{0ull, 4742128779411849216ull, 16287098727405249527ull, 896831017167ull}}, {{0ull, 9484257558823698432ull, 14127453381100947438ull, 1793662034335ull}}, {{0ull, 12964897955990470656ull, 2825490676220189487ull, 358732406867ull}}, {{0ull, 7483051838271389696ull, 5650981352440378975ull, 717464813734ull}}, {{0ull, 14966103676542779392ull, 11301962704880757950ull, 1434929627468ull}}, {{0ull, 11485463279376007168ull, 4157181336051964285ull, 2869859254937ull}}, {{0ull, 9675790285359022080ull, 8210133896694213503ull, 573971850987ull}}, {{0ull, 904836497008492544ull, 16420267793388427007ull, 1147943701974ull}}, {{0ull, 1809672994016985088ull, 14393791513067302398ull, 2295887403949ull}}, {{0ull, 7740632228287217664ull, 17636153561581101772ull, 459177480789ull}}, {{0ull, 15481264456574435328ull, 16825563049452651928ull, 918354961579ull}}, {{0ull, 12515784839439319040ull, 15204382025195752241ull, 1836709923159ull}}, {{0ull, 2503156967887863808ull, 17798271664006791741ull, 367341984631ull}}, {{0ull, 5006313935775727616ull, 17149799254304031866ull, 734683969263ull}}, {{0ull, 10012627871551455232ull, 15852854434898512116ull, 1469367938527ull}}, {{0ull, 1578511669393358848ull, 13258964796087472617ull, 2938735877055ull}}, {{0ull, 7694399963362492416ull, 2651792959217494523ull, 587747175411ull}}, {{0ull, 15388799926724984832ull, 5303585918434989046ull, 1175494350822ull}}, {{0ull, 12330855779740418048ull, 10607171836869978093ull, 2350988701644ull}}, {{0ull, 9844868785431904256ull, 16878829626341636911ull, 470197740328ull}}, {{0ull, 1242993497154256896ull, 15310915178973722207ull, 940395480657ull}}, {{0ull, 2485986994308513792ull, 12175086284237892798ull, 1880790961315ull}}, {{0ull, 11565243843087433728ull, 2435017256847578559ull, 376158192263ull}}, {{0ull, 4683743612465315840ull, 4870034513695157119ull, 752316384526ull}}, {{0ull, 9367487224930631680ull, 9740069027390314238ull, 1504632769052ull}}, {{0ull, 288230376151711744ull, 1033393981071076861ull, 3009265538105ull}}, {{0ull, 3746994889972252672ull, 206678796214215372ull, 601853107621ull}}, {{0ull, 7493989779944505344ull, 413357592428430744ull, 1203706215242ull}}, {{0ull, 14987979559889010688ull, 826715184856861488ull, 2407412430484ull}}, {{0ull, 10376293541461622784ull, 14922738295939013590ull, 481482486096ull}}, {{0ull, 2305843009213693952ull, 11398732518168475565ull, 962964972193ull}}, {{0ull, 4611686018427387904ull, 4350720962627399514ull, 1925929944387ull}}, {{0ull, 4611686018427387904ull, 8248841822009300549ull, 385185988877ull}}, {{0ull, 9223372036854775808ull, 16497683644018601098ull, 770371977754ull}}, {{0ull, 0ull, 14548623214327650581ull, 1540743955509ull}}, {{0ull, 0ull, 10650502354945749546ull, 3081487911019ull}}, {{0ull, 0ull, 16887495729956791202ull, 616297582203ull}}, {{0ull, 0ull, 15328247386204030788ull, 1232595164407ull}}, {{0ull, 0ull, 12209750698698509960ull, 2465190328815ull}}, {{0ull, 0ull, 2441950139739701992ull, 493038065763ull}}, {{0ull, 0ull, 4883900279479403984ull, 986076131526ull}}, {{0ull, 0ull, 9767800558958807968ull, 1972152263052ull}}, {{0ull, 0ull, 9332257741275582240ull, 394430452610ull}}, {{0ull, 0ull, 217771408841612864ull, 788860905221ull}}, {{0ull, 0ull, 435542817683225728ull, 1577721810442ull}}, {{0ull, 0ull, 871085635366451456ull, 3155443620884ull}}, {{0ull, 0ull, 14931612386040931584ull, 631088724176ull}}, {{0ull, 0ull, 11416480698372311552ull, 1262177448353ull}}, {{0ull, 0ull, 4386217323035071488ull, 2524354896707ull}}, {{0ull, 0ull, 8255941094090834944ull, 504870979341ull}}, {{0ull, 0ull, 16511882188181669888ull, 1009741958682ull}}, {{0ull, 0ull, 14577020302653788160ull, 2019483917365ull}}, {{0ull, 0ull, 2915404060530757632ull, 403896783473ull}}, {{0ull, 0ull, 5830808121061515264ull, 807793566946ull}}, {{0ull, 0ull, 11661616242123030528ull, 1615587133892ull}}, {{0ull, 0ull, 4876488410536509440ull, 3231174267785ull}}, {{0ull, 0ull, 975297682107301888ull, 646234853557ull}}, {{0ull, 0ull, 1950595364214603776ull, 1292469707114ull}}, {{0ull, 0ull, 3901190728429207552ull, 2584939414228ull}}, {{0ull, 0ull, 11848284589911572480ull, 516987882845ull}}, {{0ull, 0ull, 5249825106113593344ull, 1033975765691ull}}, {{0ull, 0ull, 10499650212227186688ull, 2067951531382ull}}, {{0ull, 0ull, 9478627671929257984ull, 413590306276ull}}, {{0ull, 0ull, 510511270148964352ull, 827180612553ull}}, {{0ull, 0ull, 1021022540297928704ull, 1654361225106ull}}, {{0ull, 0ull, 3893553322801496064ull, 330872245021ull}}, {{0ull, 0ull, 7787106645602992128ull, 661744490042ull}}, {{0ull, 0ull, 15574213291205984256ull, 1323488980084ull}}, {{0ull, 0ull, 12701682508702416896ull, 2646977960169ull}}, {{0ull, 0ull, 17297731760708124672ull, 529395592033ull}}, {{0ull, 0ull, 16148719447706697728ull, 1058791184067ull}}, {{0ull, 0ull, 13850694821703843840ull, 2117582368135ull}}, {{0ull, 0ull, 2770138964340768768ull, 423516473627ull}}, {{0ull, 0ull, 5540277928681537536ull, 847032947254ull}}, {{0ull, 0ull, 11080555857363075072ull, 1694065894508ull}}, {{0ull, 0ull, 13284157615698345984ull, 338813178901ull}}, {{0ull, 0ull, 8121571157687140352ull, 677626357803ull}}, {{0ull, 0ull, 16243142315374280704ull, 1355252715606ull}}, {{0ull, 0ull, 14039540557039009792ull, 2710505431213ull}}, {{0ull, 0ull, 13875954555633532928ull, 542101086242ull}}, {{0ull, 0ull, 9305165037557514240ull, 1084202172485ull}}, {{0ull, 0ull, 163586001405476864ull, 2168404344971ull}}, {{0ull, 0ull, 3722066015023005696ull, 433680868994ull}}, {{0ull, 0ull, 7444132030046011392ull, 867361737988ull}}, {{0ull, 0ull, 14888264060092022784ull, 1734723475976ull}}, {{0ull, 0ull, 6667001626760314880ull, 346944695195ull}}, {{0ull, 0ull, 13334003253520629760ull, 693889390390ull}}, {{0ull, 0ull, 8221262433331707904ull, 1387778780781ull}}, {{0ull, 0ull, 16442524866663415808ull, 2775557561562ull}}, {{0ull, 0ull, 10667202602816503808ull, 555111512312ull}}, {{0ull, 0ull, 2887661131923456000ull, 1110223024625ull}}, {{0ull, 0ull, 5775322263846912000ull, 2220446049250ull}}, {{0ull, 0ull, 1155064452769382400ull, 444089209850ull}}, {{0ull, 0ull, 2310128905538764800ull, 888178419700ull}}, {{0ull, 0ull, 4620257811077529600ull, 1776356839400ull}}, {{0ull, 0ull, 924051562215505920ull, 355271367880ull}}, {{0ull, 0ull, 1848103124431011840ull, 710542735760ull}}, {{0ull, 0ull, 3696206248862023680ull, 1421085471520ull}}, {{0ull, 0ull, 7392412497724047360ull, 2842170943040ull}}, {{0ull, 0ull, 1478482499544809472ull, 568434188608ull}}, {{0ull, 0ull, 2956964999089618944ull, 1136868377216ull}}, {{0ull, 0ull, 5913929998179237888ull, 2273736754432ull}}, {{0ull, 0ull, 8561483629119668224ull, 454747350886ull}}, {{0ull, 0ull, 17122967258239336448ull, 909494701772ull}}, {{0ull, 0ull, 15799190442769121280ull, 1818989403545ull}}, {{0ull, 0ull, 3159838088553824256ull, 363797880709ull}}, {{0ull, 0ull, 6319676177107648512ull, 727595761418ull}}, {{0ull, 0ull, 12639352354215297024ull, 1455191522836ull}}, {{0ull, 0ull, 6831960634721042432ull, 2910383045673ull}}, {{0ull, 0ull, 12434438571169939456ull, 582076609134ull}}, {{0ull, 0ull, 6422133068630327296ull, 1164153218269ull}}, {{0ull, 0ull, 12844266137260654592ull, 2328306436538ull}}, {{0ull, 0ull, 13636899671677861888ull, 465661287307ull}}, {{0ull, 0ull, 8827055269646172160ull, 931322574615ull}}, {{0ull, 0ull, 17654110539292344320ull, 1862645149230ull}}, {{0ull, 0ull, 3530822107858468864ull, 372529029846ull}}, {{0ull, 0ull, 7061644215716937728ull, 745058059692ull}}, {{0ull, 0ull, 14123288431433875456ull, 1490116119384ull}}, {{0ull, 0ull, 9799832789158199296ull, 2980232238769ull}}, {{0ull, 0ull, 16717361816799281152ull, 596046447753ull}}, {{0ull, 0ull, 14987979559889010688ull, 1192092895507ull}}, {{0ull, 0ull, 11529215046068469760ull, 2384185791015ull}}, {{0ull, 0ull, 2305843009213693952ull, 476837158203ull}}, {{0ull, 0ull, 4611686018427387904ull, 953674316406ull}}, {{0ull, 0ull, 9223372036854775808ull, 1907348632812ull}}, {{0ull, 0ull, 9223372036854775808ull, 381469726562ull}}, {{0ull, 0ull, 0ull, 762939453125ull}}, {{0ull, 0ull, 0ull, 1525878906250ull}}, {{0ull, 0ull, 0ull, 3051757812500ull}}, {{0ull, 0ull, 0ull, 610351562500ull}}, {{0ull, 0ull, 0ull, 1220703125000ull}}, {{0ull, 0ull, 0ull, 2441406250000ull}}, {{0ull, 0ull, 0ull, 488281250000ull}}, {{0ull, 0ull, 0ull, 976562500000ull}}, {{0ull, 0ull, 0ull, 1953125000000ull}}, {{0ull, 0ull, 0ull, 390625000000ull}}, {{0ull, 0ull, 0ull, 781250000000ull}}, {{0ull, 0ull, 0ull, 1562500000000ull}}, {{0ull, 0ull, 0ull, 3125000000000ull}}, {{0ull, 0ull, 0ull, 625000000000ull}}, {{0ull, 0ull, 0ull, 1250000000000ull}}, {{0ull, 0ull, 0ull, 2500000000000ull}}, {{0ull, 0ull, 0ull, 500000000000ull}}, {{0ull, 0ull, 0ull, 1000000000000ull}}, {{0ull, 0ull, 0ull, 2000000000000ull}}, {{0ull, 0ull, 0ull, 400000000000ull}}, {{0ull, 0ull, 0ull, 800000000000ull}}, {{0ull, 0ull, 0ull, 1600000000000ull}}, {{0ull, 0ull, 0ull, 3200000000000ull}}, {{0ull, 0ull, 0ull, 640000000000ull}}, {{0ull, 0ull, 0ull, 1280000000000ull}}, {{0ull, 0ull, 0ull, 2560000000000ull}}, {{0ull, 0ull, 0ull, 512000000000ull}}, {{0ull, 0ull, 0ull, 1024000000000ull}}, {{0ull, 0ull, 0ull, 2048000000000ull}}, {{0ull, 0ull, 0ull, 409600000000ull}}, {{0ull, 0ull, 0ull, 819200000000ull}}, {{0ull, 0ull, 0ull, 1638400000000ull}}, {{0ull, 0ull, 0ull, 3276800000000ull}}, {{0ull, 0ull, 0ull, 655360000000ull}}, {{0ull, 0ull, 0ull, 1310720000000ull}}, {{0ull, 0ull, 0ull, 2621440000000ull}}, {{0ull, 0ull, 0ull, 524288000000ull}}, {{0ull, 0ull, 0ull, 1048576000000ull}}, {{0ull, 0ull, 0ull, 2097152000000ull}}, {{0ull, 0ull, 0ull, 419430400000ull}}, {{0ull, 0ull, 0ull, 838860800000ull}}, {{0ull, 0ull, 0ull, 1677721600000ull}}, {{0ull, 0ull, 0ull, 335544320000ull}}, {{0ull, 0ull, 0ull, 671088640000ull}}, {{0ull, 0ull, 0ull, 1342177280000ull}}, {{0ull, 0ull, 0ull, 2684354560000ull}}, {{0ull, 0ull, 0ull, 536870912000ull}}, {{0ull, 0ull, 0ull, 1073741824000ull}}, {{0ull, 0ull, 0ull, 2147483648000ull}}, {{0ull, 0ull, 0ull, 429496729600ull}}, {{0ull, 0ull, 0ull, 858993459200ull}}, {{0ull, 0ull, 0ull, 1717986918400ull}}, {{0ull, 0ull, 0ull, 343597383680ull}}, {{0ull, 0ull, 0ull, 687194767360ull}}, {{0ull, 0ull, 0ull, 1374389534720ull}}, {{0ull, 0ull, 0ull, 2748779069440ull}}, {{0ull, 0ull, 0ull, 549755813888ull}}, {{0ull, 0ull, 0ull, 1099511627776ull}}, {{0ull, 0ull, 0ull, 2199023255552ull}}, {{7378697629483820647ull, 7378697629483820646ull, 7378697629483820646ull, 439804651110ull}}, {{14757395258967641293ull, 14757395258967641292ull, 14757395258967641292ull, 879609302220ull}}, {{11068046444225730970ull, 11068046444225730969ull, 11068046444225730969ull, 1759218604441ull}}, {{16971004547812787487ull, 2213609288845146193ull, 5902958103587056517ull, 351843720888ull}}, {{15495265021916023358ull, 4427218577690292387ull, 11805916207174113034ull, 703687441776ull}}, {{12543785970122495099ull, 8854437155380584775ull, 5165088340638674452ull, 1407374883553ull}}, {{6640827866535438582ull, 17708874310761169551ull, 10330176681277348904ull, 2814749767106ull}}, {{5017514388048998040ull, 3541774862152233910ull, 5755384150997380104ull, 562949953421ull}}, {{10035028776097996080ull, 7083549724304467820ull, 11510768301994760208ull, 1125899906842ull}}, {{1623313478486440543ull, 14167099448608935641ull, 4574792530279968800ull, 2251799813685ull}}, {{4014011510439198432ull, 2833419889721787128ull, 914958506055993760ull, 450359962737ull}}, {{8028023020878396864ull, 5666839779443574256ull, 1829917012111987520ull, 900719925474ull}}, {{16056046041756793727ull, 11333679558887148512ull, 3659834024223975040ull, 1801439850948ull}}, {{3211209208351358746ull, 13334782356003160672ull, 11800013249070525977ull, 360287970189ull}}, {{6422418416702717491ull, 8222820638296769728ull, 5153282424431500339ull, 720575940379ull}}, {{12844836833405434982ull, 16445641276593539456ull, 10306564848863000678ull, 1441151880758ull}}, {{7242929593101318347ull, 14444538479477527297ull, 2166385624016449741ull, 2882303761517ull}}, {{1448585918620263670ull, 13956954140121236429ull, 7811974754287110594ull, 576460752303ull}}, {{2897171837240527339ull, 9467164206532921242ull, 15623949508574221189ull, 1152921504606ull}}, {{5794343674481054678ull, 487584339356290868ull, 12801154943438890763ull, 2305843009213ull}}, {{15916263993863852229ull, 3786865682613168496ull, 13628277432913509122ull, 461168601842ull}}, {{13385783914018152841ull, 7573731365226336993ull, 8809810792117466628ull, 922337203685ull}}, {{8324823754326754065ull, 15147462730452673987ull, 17619621584234933256ull, 1844674407370ull}}, {{12733011195091081783ull, 6718841360832445120ull, 3523924316846986651ull, 368934881474ull}}, {{7019278316472611950ull, 13437682721664890241ull, 7047848633693973302ull, 737869762948ull}}, {{14038556632945223899ull, 8428621369620228866ull, 14095697267387946605ull, 1475739525896ull}}, {{9630369192180896181ull, 16857242739240457733ull, 9744650461066341594ull, 2951479051793ull}}, {{1926073838436179237ull, 10750146177331912193ull, 13016976536438999288ull, 590295810358ull}}, {{3852147676872358473ull, 3053548280954272770ull, 7587208999168446961ull, 1180591620717ull}}, {{7704295353744716945ull, 6107096561908545540ull, 15174417998336893922ull, 2361183241434ull}}, {{5230207885490853713ull, 4910768127123619431ull, 17792278858635020077ull, 472236648286ull}}, {{10460415770981707425ull, 9821536254247238862ull, 17137813643560488538ull, 944473296573ull}}, {{2474087468253863233ull, 1196328434784926109ull, 15828883213411425461ull, 1888946593147ull}}, {{7873515123134593293ull, 11307312131182716191ull, 10544474272166105738ull, 377789318629ull}}, {{15747030246269186586ull, 4167880188655880766ull, 2642204470622659861ull, 755578637259ull}}, {{13047316418828821556ull, 8335760377311761533ull, 5284408941245319722ull, 1511157274518ull}}, {{7647888763948091496ull, 16671520754623523067ull, 10568817882490639444ull, 3022314549036ull}}, {{8908275382273438946ull, 3334304150924704613ull, 5803112391240038212ull, 604462909807ull}}, {{17816550764546877891ull, 6668608301849409226ull, 11606224782480076424ull, 1208925819614ull}}, {{17186357455384204166ull, 13337216603698818453ull, 4765705491250601232ull, 2417851639229ull}}, {{18194666750044482126ull, 6356792135481674013ull, 15710536357217761539ull, 483570327845ull}}, {{17942589426379412636ull, 12713584270963348027ull, 12974328640725971462ull, 967140655691ull}}, {{17438434779049273656ull, 6980424468217144439ull, 7501913207742391309ull, 1934281311383ull}}, {{7177035770551765055ull, 8774782523127249534ull, 12568429085774209231ull, 386856262276ull}}, {{14354071541103530109ull, 17549565046254499068ull, 6690114097838866846ull, 773712524553ull}}, {{10261399008497508602ull, 16652386018799446521ull, 13380228195677733693ull, 1547425049106ull}}, {{2076053943285465587ull, 14858027963889341427ull, 8313712317645915771ull, 3094850098213ull}}, {{4104559603399003441ull, 17729000851745509578ull, 12730788907754914123ull, 618970019642ull}}, {{8209119206798006882ull, 17011257629781467540ull, 7014833741800276631ull, 1237940039285ull}}, {{16418238413596013763ull, 15575771185853383464ull, 14029667483600553263ull, 2475880078570ull}}, {{10662345312203023399ull, 14183200681396407662ull, 2805933496720110652ull, 495176015714ull}}, {{2877946550696495182ull, 9919657289083263709ull, 5611866993440221305ull, 990352031428ull}}, {{5755893101392990364ull, 1392570504456975802ull, 11223733986880442611ull, 1980704062856ull}}, {{15908573879246239366ull, 7657211730375215806ull, 5934095612117998845ull, 396140812571ull}}, {{13370403684782927115ull, 15314423460750431613ull, 11868191224235997690ull, 792281625142ull}}, {{8294063295856302614ull, 12182102847791311611ull, 5289638374762443765ull, 1584563250285ull}}, {{16588126591712605228ull, 5917461621873071606ull, 10579276749524887531ull, 3169126500570ull}}, {{10696322947826341692ull, 4872841139116524644ull, 2115855349904977506ull, 633825300114ull}}, {{2945901821943131768ull, 9745682278233049289ull, 4231710699809955012ull, 1267650600228ull}}, {{5891803643886263536ull, 1044620482756546962ull, 8463421399619910025ull, 2535301200456ull}}, {{12246407173002983677ull, 3898272911293219715ull, 5382033094665892328ull, 507060240091ull}}, {{6046070272296415738ull, 7796545822586439431ull, 10764066189331784656ull, 1014120480182ull}}, {{12092140544592831476ull, 15593091645172878862ull, 3081388304954017696ull, 2028240960365ull}}, {{13486474553144297265ull, 6807967143776486095ull, 616277660990803539ull, 405648192073ull}}, {{8526205032579042914ull, 13615934287552972191ull, 1232555321981607078ull, 811296384146ull}}, {{17052410065158085827ull, 8785124501396392766ull, 2465110643963214157ull, 1622592768292ull}}, {{15658076056606620037ull, 17570249002792785533ull, 4930221287926428314ull, 3245185536584ull}}, {{6820964026063234331ull, 14582096244784288076ull, 15743439516552926955ull, 649037107316ull}}, {{13641928052126468662ull, 10717448415859024536ull, 13040134959396302295ull, 1298074214633ull}}, {{8837112030543385707ull, 2988152758008497457ull, 7633525845083052975ull, 2596148429267ull}}, {{16524817665076318435ull, 7976328181085520137ull, 8905402798500431241ull, 519229685853ull}}, {{14602891256443085253ull, 15952656362171040275ull, 17810805597000862482ull, 1038459371706ull}}, {{10759038439176618889ull, 13458568650632528935ull, 17174867120292173349ull, 2076918743413ull}}, {{9530505317319144425ull, 10070411359610326433ull, 14503019868284165639ull, 415383748682ull}}, {{614266560928737233ull, 1694078645511101251ull, 10559295662858779663ull, 830767497365ull}}, {{1228533121857474465ull, 3388157291022202502ull, 2671847252008007710ull, 1661534994731ull}}, {{11313753068597225863ull, 4366980272946350823ull, 4223718265143511865ull, 332306998946ull}}, {{4180762063484900109ull, 8733960545892701647ull, 8447436530287023730ull, 664613997892ull}}, {{8361524126969800218ull, 17467921091785403294ull, 16894873060574047460ull, 1329227995784ull}}, {{16723048253939600436ull, 16489098109861254972ull, 15343002047438543305ull, 2658455991569ull}}, {{7033958465529830411ull, 18055214880939892287ull, 17825995668455349953ull, 531691198313ull}}, {{14067916931059660821ull, 17663685688170232958ull, 17205247263201148291ull, 1063382396627ull}}, {{9689089788409770026ull, 16880627302630914301ull, 15963750452692744967ull, 2126764793255ull}}, {{13005864401907684975ull, 10754823090010003506ull, 3192750090538548993ull, 425352958651ull}}, {{7564984730105818334ull, 3062902106310455397ull, 6385500181077097987ull, 850705917302ull}}, {{15129969460211636667ull, 6125804212620910794ull, 12771000362154195974ull, 1701411834604ull}}, {{10404691521526147980ull, 12293207286749913128ull, 17311595331398480487ull, 340282366920ull}}, {{2362638969342744344ull, 6139670499790274641ull, 16176446589087409359ull, 680564733841ull}}, {{4725277938685488687ull, 12279340999580549282ull, 13906149104465267102ull, 1361129467683ull}}, {{9450555877370977374ull, 6111937925451546948ull, 9365554135220982589ull, 2722258935367ull}}, {{16647506434441836768ull, 4911736399832219712ull, 9251808456528017164ull, 544451787073ull}}, {{14848268795174121920ull, 9823472799664439425ull, 56872839346482712ull, 1088903574147ull}}, {{11249793516638692223ull, 1200201525619327235ull, 113745678692965425ull, 2177807148294ull}}, {{17007353962295379738ull, 14997435564091506739ull, 14780144394706234377ull, 435561429658ull}}, {{15567963850881207859ull, 11548127054473461863ull, 11113544715702917139ull, 871122859317ull}}, {{12689183628052864101ull, 4649510035237372111ull, 3780345357696282663ull, 1742245718635ull}}, {{17295231984578214113ull, 11997948451273205391ull, 756069071539256532ull, 348449143727ull}}, {{16143719895446876610ull, 5549152828836859167ull, 1512138143078513065ull, 696898287454ull}}, {{13840695717184201604ull, 11098305657673718335ull, 3024276286157026130ull, 1393796574908ull}}, {{9234647360658851592ull, 3749867241637885055ull, 6048552572314052261ull, 2787593149816ull}}, {{9225627101615590965ull, 8128671077811397657ull, 4899059329204720775ull, 557518629963ull}}, {{4510129521630314ull, 16257342155622795315ull, 9798118658409441550ull, 1115037259926ull}}, {{9020259043260628ull, 14067940237536039014ull, 1149493243109331485ull, 2230074519853ull}}, {{7380501681292472772ull, 13881634491732938772ull, 11297945092847597266ull, 446014903970ull}}, {{14761003362584945544ull, 9316524909756325928ull, 4149146111985642917ull, 892029807941ull}}, {{11075262651460339472ull, 186305745803100241ull, 8298292223971285835ull, 1784059615882ull}}, {{13283098974517798864ull, 7415958778644440694ull, 9038356074278077813ull, 356811923176ull}}, {{8119453875326046112ull, 14831917557288881389ull, 18076712148556155626ull, 713623846352ull}}, {{16238907750652092224ull, 11217091040868211162ull, 17706680223402759637ull, 1427247692705ull}}, {{14031071427594632831ull, 3987438008026870709ull, 16966616373095967659ull, 2854495385411ull}}, {{17563609544486567859ull, 797487601605374141ull, 7082672089361103855ull, 570899077082ull}}, {{16680475015263584102ull, 1594975203210748283ull, 14165344178722207710ull, 1141798154164ull}}, {{14914205956817616588ull, 3189950406421496567ull, 9883944283734863804ull, 2283596308329ull}}, {{2982841191363523318ull, 11706036525510030283ull, 16734184115714614053ull, 456719261665ull}}, {{5965682382727046636ull, 4965328977310508950ull, 15021624157719676491ull, 913438523331ull}}, {{11931364765454093271ull, 9930657954621017900ull, 11596504241729801366ull, 1826877046663ull}}, {{17143668212058459947ull, 16743526849891844872ull, 13387347292571691242ull, 365375409332ull}}, {{15840592350407368278ull, 15040309626074138129ull, 8327950511433830869ull, 730750818665ull}}, {{13234440627105184940ull, 11633875178438724643ull, 16655901022867661739ull, 1461501637330ull}}, {{8022137180500818264ull, 4821006283167897671ull, 14865057972025771863ull, 2923003274661ull}}, {{1604427436100163653ull, 15721596515601220827ull, 6662360409147064695ull, 584600654932ull}}, {{3208854872200327306ull, 12996448957492890038ull, 13324720818294129391ull, 1169201309864ull}}, {{6417709744400654611ull, 7546153841276228460ull, 8202697562878707167ull, 2338402619729ull}}, {{4972890763622041246ull, 5198579582997156015ull, 16397934771543382726ull, 467680523945ull}}, {{9945781527244082491ull, 10397159165994312030ull, 14349125469377213836ull, 935361047891ull}}, {{1444818980778613366ull, 2347574258279072445ull, 10251506865044876057ull, 1870722095783ull}}, {{288963796155722674ull, 469514851655814489ull, 13118347817234706181ull, 374144419156ull}}, {{577927592311445347ull, 939029703311628978ull, 7789951560759860746ull, 748288838313ull}}, {{1155855184622890693ull, 1878059406623257956ull, 15579903121519721492ull, 1496577676626ull}}, {{2311710369245781385ull, 3756118813246515912ull, 12713062169329891368ull, 2993155353253ull}}, {{11530388518074887247ull, 4440572577391213505ull, 13610658878091709243ull, 598631070650ull}}, {{4614032962440222877ull, 8881145154782427011ull, 8774573682473866870ull, 1197262141301ull}}, {{9228065924880445754ull, 17762290309564854022ull, 17549147364947733740ull, 2394524282602ull}}, {{16603008443943730444ull, 10931155691396791450ull, 10888527102473367394ull, 478904856520ull}}, {{14759272814177909272ull, 3415567309084031285ull, 3330310131237183173ull, 957809713041ull}}, {{11071801554646266927ull, 6831134618168062571ull, 6660620262474366346ull, 1915619426082ull}}, {{16971755569896894679ull, 12434273367859343483ull, 8710821681978693915ull, 383123885216ull}}, {{15496767066084237741ull, 6421802662009135351ull, 17421643363957387831ull, 766247770432ull}}, {{12546790058458923865ull, 12843605324018270703ull, 16396542654205224046ull, 1532495540865ull}}, {{6646836043208296113ull, 7240466574326989791ull, 14346341234700896477ull, 3064991081731ull}}, {{16086762467609300516ull, 12516139759091128927ull, 6558617061682089618ull, 612998216346ull}}, {{13726780861509049415ull, 6585535444472706239ull, 13117234123364179237ull, 1225996432692ull}}, {{9006817649308547214ull, 13171070888945412479ull, 7787724173018806858ull, 2451992865385ull}}, {{9180061159345530090ull, 13702260622014813465ull, 1557544834603761371ull, 490398573077ull}}, {{18360122318691060179ull, 8957777170320075314ull, 3115089669207522743ull, 980797146154ull}}, {{18273500563672568741ull, 17915554340640150629ull, 6230179338415045486ull, 1961594292308ull}}, {{14722746556960244718ull, 18340506127095671418ull, 12314082311908740066ull, 392318858461ull}}, {{10998749040210937820ull, 18234268180481791221ull, 6181420550107928517ull, 784637716923ull}}, {{3550754006712324023ull, 18021792287254030827ull, 12362841100215857035ull, 1569275433846ull}}, {{7101508013424648045ull, 17596840500798510038ull, 6278938126722162455ull, 3138550867693ull}}, {{5109650417426839933ull, 14587414544385432977ull, 12323834069570163460ull, 627710173538ull}}, {{10219300834853679865ull, 10728085015061314338ull, 6200924065430775305ull, 1255420347077ull}}, {{1991857595997808113ull, 3009425956413077061ull, 12401848130861550611ull, 2510840694154ull}}, {{4087720333941471946ull, 601885191282615412ull, 17237764885139951415ull, 502168138830ull}}, {{8175440667882943892ull, 1203770382565230824ull, 16028785696570351214ull, 1004336277661ull}}, {{16350881335765887783ull, 2407540765130461648ull, 13610827319431150812ull, 2008672555323ull}}, {{14338222711378908527ull, 481508153026092329ull, 13790211908111961132ull, 401734511064ull}}, {{10229701349048265437ull, 963016306052184659ull, 9133679742514370648ull, 803469022129ull}}, {{2012658624386979257ull, 1926032612104369319ull, 18267359485028741296ull, 1606938044258ull}}, {{4025317248773958514ull, 3852065224208738638ull, 18087974896347930976ull, 3213876088517ull}}, {{4494412264496702026ull, 11838459489067478697ull, 10996292608753406841ull, 642775217703ull}}, {{8988824528993404052ull, 5230174904425405778ull, 3545841143797262067ull, 1285550435407ull}}, {{17977649057986808104ull, 10460349808850811556ull, 7091682287594524134ull, 2571100870814ull}}, {{18352925070565002914ull, 13160116405995893280ull, 16175731716486546119ull, 514220174162ull}}, {{18259106067420454212ull, 7873488738282234945ull, 13904719359263540623ull, 1028440348325ull}}, {{18071468061131356807ull, 15746977476564469891ull, 9362694644817529630ull, 2056880696651ull}}, {{10992991241710092008ull, 6838744310054804301ull, 5561887743705416249ull, 411376139330ull}}, {{3539238409710632400ull, 13677488620109608603ull, 11123775487410832498ull, 822752278660ull}}, {{7078476819421264799ull, 8908233166509665590ull, 3800806901112113381ull, 1645504557321ull}}, {{8794392993368073607ull, 9160344262785753764ull, 4449510194964332999ull, 329100911464ull}}, {{17588785986736147213ull, 18320688525571507528ull, 8899020389928665998ull, 658201822928ull}}, {{16730827899762742809ull, 18194632977433463441ull, 17798040779857331997ull, 1316403645856ull}}, {{15014911725815934001ull, 17942521881157375267ull, 17149337486005112379ull, 2632807291713ull}}, {{17760377604130828093ull, 10967202005715295699ull, 14497913941426753445ull, 526561458342ull}}, {{17074011134552104570ull, 3487659937721039783ull, 10549083809143955275ull, 1053122916685ull}}, {{15701278195394657524ull, 6975319875442079567ull, 2651423544578358934ull, 2106245833371ull}}, {{10518953268562752152ull, 1395063975088415913ull, 4219633523657582110ull, 421249166674ull}}, {{2591162463415952687ull, 2790127950176831827ull, 8439267047315164220ull, 842498333348ull}}, {{5182324926831905373ull, 5580255900353663654ull, 16878534094630328440ull, 1684996666696ull}}, {{1036464985366381075ull, 4805399994812643054ull, 7065055633667976011ull, 336999333339ull}}, {{2072929970732762150ull, 9610799989625286108ull, 14130111267335952022ull, 673998666678ull}}, {{4145859941465524299ull, 774855905541020600ull, 9813478460962352429ull, 1347997333357ull}}, {{8291719882931048597ull, 1549711811082041200ull, 1180212848215153242ull, 2695994666715ull}}, {{9037041606070030366ull, 7688639991700228886ull, 236042569643030648ull, 539198933343ull}}, {{18074083212140060732ull, 15377279983400457772ull, 472085139286061296ull, 1078397866686ull}}, {{17701422350570569847ull, 12307815893091363929ull, 944170278572122593ull, 2156795733372ull}}, {{18297679729081755263ull, 2461563178618272785ull, 7567531685198245165ull, 431359146674ull}}, {{18148615384453958909ull, 4923126357236545571ull, 15135063370396490330ull, 862718293348ull}}, {{17850486695198366201ull, 9846252714473091143ull, 11823382667083429044ull, 1725436586697ull}}, {{18327492598007314533ull, 5658599357636528551ull, 9743374162900506455ull, 345087317339ull}}, {{18208241122305077450ull, 11317198715273057103ull, 1040004252091461294ull, 690174634679ull}}, {{17969738170900603284ull, 4187653356836562591ull, 2080008504182922589ull, 1380349269358ull}}, {{17492732268091654952ull, 8375306713673125183ull, 4160017008365845178ull, 2760698538716ull}}, {{10877244083102151637ull, 16432456601702266329ull, 4521352216415079358ull, 552139707743ull}}, {{3307744092494751658ull, 14418169129694981043ull, 9042704432830158717ull, 1104279415486ull}}, {{6615488184989503315ull, 10389594185680410470ull, 18085408865660317435ull, 2208558830972ull}}, {{8701795266481721310ull, 9456616466619902740ull, 10995779402615884133ull, 441711766194ull}}, {{17403590532963442619ull, 466488859530253864ull, 3544814731522216651ull, 883423532389ull}}, {{16360436992217333622ull, 932977719060507729ull, 7089629463044433302ull, 1766847064778ull}}, {{18029482657411108018ull, 186595543812101545ull, 12485972336834617630ull, 353369412955ull}}, {{17612221241112664419ull, 373191087624203091ull, 6525200599959683644ull, 706738825911ull}}, {{16777698408515777221ull, 746382175248406183ull, 13050401199919367288ull, 1413477651822ull}}, {{15108652743322002825ull, 1492764350496812367ull, 7654058326129182960ull, 2826955303645ull}}, {{10400428178148221212ull, 298552870099362473ull, 1530811665225836592ull, 565391060729ull}}, {{2354112282586890807ull, 597105740198724947ull, 3061623330451673184ull, 1130782121458ull}}, {{4708224565173781614ull, 1194211480397449894ull, 6123246660903346368ull, 2261564242916ull}}, {{12009691357260487293ull, 14996237555047131271ull, 4913998146922579596ull, 452312848583ull}}, {{5572638640811422969ull, 11545731036384710927ull, 9827996293845159193ull, 904625697166ull}}, {{11145277281622845937ull, 4644717999059870238ull, 1209248513980766771ull, 1809251394333ull}}, {{9607753085808389834ull, 15686338858779615340ull, 11309896147021884323ull, 361850278866ull}}, {{768762097907228052ull, 12925933643849679065ull, 4173048220334217031ull, 723700557733ull}}, {{1537524195814456104ull, 7405123213989806514ull, 8346096440668434063ull, 1447401115466ull}}, {{3075048391628912207ull, 14810246427979613028ull, 16692192881336868126ull, 2894802230932ull}}, {{4304358493067692765ull, 14030095729821653575ull, 10717136205751194271ull, 578960446186ull}}, {{8608716986135385529ull, 9613447385933755534ull, 2987528337792836927ull, 1157920892373ull}}, {{17217433972270771058ull, 780150698157959452ull, 5975056675585673855ull, 2315841784746ull}}, {{14511533238679885182ull, 3845378954373502213ull, 4884360149859045094ull, 463168356949ull}}, {{10576322403650218747ull, 7690757908747004427ull, 9768720299718090188ull, 926336713898ull}}, {{2705900733590885877ull, 15381515817494008855ull, 1090696525726628760ull, 1852673427797ull}}, {{7919877776201997822ull, 10455000792982622417ull, 7596836934629146398ull, 370534685559ull}}, {{15839755552403995644ull, 2463257512255693218ull, 15193673869258292797ull, 741069371118ull}}, {{13232767031098439671ull, 4926515024511386437ull, 11940603664807033978ull, 1482138742237ull}}, {{8018789988487327726ull, 9853030049022772875ull, 5434463255904516340ull, 2964277484475ull}}, {{1603757997697465546ull, 1970606009804554575ull, 1086892651180903268ull, 592855496895ull}}, {{3207515995394931091ull, 3941212019609109150ull, 2173785302361806536ull, 1185710993790ull}}, {{6415031990789862181ull, 7882424039218218300ull, 4347570604723613072ull, 2371421987580ull}}, {{8661704027641793083ull, 8955182437327464306ull, 869514120944722614ull, 474284397516ull}}, {{17323408055283586166ull, 17910364874654928612ull, 1739028241889445228ull, 948568795032ull}}, {{16200072036857620715ull, 17373985675600305609ull, 3478056483778890457ull, 1897137590064ull}}, {{3240014407371524143ull, 7164145949861971445ull, 15453006555723419384ull, 379427518012ull}}, {{6480028814743048286ull, 14328291899723942890ull, 12459269037737287152ull, 758855036025ull}}, {{12960057629486096572ull, 10209839725738334164ull, 6471794001765022689ull, 1517710072051ull}}, {{7473371185262641527ull, 1972935377767116713ull, 12943588003530045379ull, 3035420144102ull}}, {{16252069496020169599ull, 4083935890295333665ull, 9967415230189829722ull, 607084028820ull}}, {{14057394918330787581ull, 8167871780590667331ull, 1488086386670107828ull, 1214168057641ull}}, {{9668045762952023545ull, 16335743561181334663ull, 2976172773340215656ull, 2428336115282ull}}, {{5622957967332315033ull, 14335195156461997902ull, 7973932184151863777ull, 485667223056ull}}, {{11245915934664630065ull, 10223646239214444188ull, 15947864368303727555ull, 971334446112ull}}, {{4045087795619708513ull, 2000548404719336761ull, 13448984662897903495ull, 1942668892225ull}}, {{4498366373865852026ull, 400109680943867352ull, 2689796932579580699ull, 388533778445ull}}, {{8996732747731704052ull, 800219361887734704ull, 5379593865159161398ull, 777067556890ull}}, {{17993465495463408103ull, 1600438723775469408ull, 10759187730318322796ull, 1554135113780ull}}, {{17540186917217264590ull, 3200877447550938817ull, 3071631386927093976ull, 3108270227561ull}}, {{18265432642411094211ull, 8018873118994008409ull, 4303675092127329118ull, 621654045512ull}}, {{18084121211112636806ull, 16037746237988016819ull, 8607350184254658236ull, 1243308091024ull}}, {{17721498348515721995ull, 13628748402266482023ull, 17214700368509316473ull, 2486616182048ull}}, {{18301694928670785692ull, 6415098495195206727ull, 14510986517927594264ull, 497323236409ull}}, {{18156645783632019768ull, 12830196990390413455ull, 10575228962145636912ull, 994646472819ull}}, {{17866547493554487919ull, 7213649907071275295ull, 2703713850581722209ull, 1989292945639ull}}, {{14641355942936628554ull, 12510776425639986028ull, 15298138029083985734ull, 397858589127ull}}, {{10835967812163705491ull, 6574808777570420441ull, 12149531984458419853ull, 795717178255ull}}, {{3225191550617859366ull, 13149617555140840883ull, 5852319895207288090ull, 1591434356511ull}}, {{6450383101235718732ull, 7852491036572130150ull, 11704639790414576181ull, 3182868713022ull}}, {{12358123064472874716ull, 12638544651540156999ull, 9719625587566735882ull, 636573742604ull}}, {{6269502055236197816ull, 6830345229370762383ull, 992507101423920149ull, 1273147485209ull}}, {{12539004110472395632ull, 13660690458741524766ull, 1985014202847840298ull, 2546294970418ull}}, {{9886498451578299773ull, 6421486906490215276ull, 11465049284795299029ull, 509258994083ull}}, {{1326252829447047930ull, 12842973812980430553ull, 4483354495881046442ull, 1018517988167ull}}, {{2652505658894095859ull, 7239203552251309490ull, 8966708991762092885ull, 2037035976334ull}}, {{15287896390746460465ull, 16205235969417903190ull, 16550737057320059869ull, 407407195266ull}}, {{12129048707783369314ull, 13963727865126254765ull, 14654730040930568123ull, 814814390533ull}}, {{5811353341857187011ull, 9480711656542957915ull, 10862716008151584631ull, 1629628781067ull}}, {{11622706683714374021ull, 514679239376364214ull, 3278687942593617647ull, 3259257562135ull}}, {{6013890151484785128ull, 7481633477359093489ull, 655737588518723529ull, 651851512427ull}}, {{12027780302969570255ull, 14963266954718186978ull, 1311475177037447058ull, 1303703024854ull}}, {{5608816532229588893ull, 11479789835726822341ull, 2622950354074894117ull, 2607406049708ull}}, {{4811112121187828102ull, 2295957967145364468ull, 11592636515040709793ull, 521481209941ull}}, {{9622224242375656204ull, 4591915934290728936ull, 4738528956371867970ull, 1042962419883ull}}, {{797704411041760792ull, 9183831868581457873ull, 9477057912743735940ull, 2085924839766ull}}, {{14916936141175993452ull, 5526115188458201897ull, 5584760397290657511ull, 417184967953ull}}, {{11387128208642435287ull, 11052230376916403795ull, 11169520794581315022ull, 834369935906ull}}, {{4327512343575318957ull, 3657716680123255975ull, 3892297515453078429ull, 1668739871813ull}}, {{8244200098198884438ull, 8110240965508471841ull, 11846505947316346655ull, 333747974362ull}}, {{16488400196397768876ull, 16220481931016943682ull, 5246267820923141694ull, 667495948725ull}}, {{14530056319085986135ull, 13994219788324335749ull, 10492535641846283389ull, 1334991897450ull}}, {{10613368564462420654ull, 9541695502939119883ull, 2538327209983015163ull, 2669983794901ull}}, {{9501371342376304778ull, 16665734359555465269ull, 4197014256738513355ull, 533996758980ull}}, {{555998611043057939ull, 14884724645401378923ull, 8394028513477026711ull, 1067993517960ull}}, {{1111997222086115877ull, 11322705217093206230ull, 16788057026954053423ull, 2135987035920ull}}, {{11290445888642954145ull, 13332587487644372215ull, 3357611405390810684ull, 427197407184ull}}, {{4134147703576356674ull, 8218430901579192815ull, 6715222810781621369ull, 854394814368ull}}, {{8268295407152713348ull, 16436861803158385630ull, 13430445621563242738ull, 1708789628736ull}}, {{16411054340398183963ull, 18044767619599318418ull, 6375437939054558870ull, 341757925747ull}}, {{14375364607086816309ull, 17642791165489085221ull, 12750875878109117741ull, 683515851494ull}}, {{10303985140464081001ull, 16838838257268618827ull, 7055007682508683867ull, 1367031702989ull}}, {{2161226207218610386ull, 15230932440827686039ull, 14110015365017367735ull, 2734063405978ull}}, {{7810942870927542724ull, 14114232932391268177ull, 13890049517229204516ull, 546812681195ull}}, {{15621885741855085448ull, 9781721791072984738ull, 9333354960748857417ull, 1093625362391ull}}, {{12797027410000619279ull, 1116699508436417861ull, 219965847788163219ull, 2187250724783ull}}, {{13627451926225854826ull, 7602037531171104218ull, 11112039613783363613ull, 437450144956ull}}, {{8808159778742158035ull, 15204075062342208437ull, 3777335153857175610ull, 874900289913ull}}, {{17616319557484316070ull, 11961406050974865258ull, 7554670307714351221ull, 1749800579826ull}}, {{3523263911496863214ull, 9770978839678793698ull, 5200282876284780567ull, 349960115965ull}}, {{7046527822993726428ull, 1095213605648035780ull, 10400565752569561135ull, 699920231930ull}}, {{14093055645987452856ull, 2190427211296071560ull, 2354387431429570654ull, 1399840463861ull}}, {{9739367218265354095ull, 4380854422592143121ull, 4708774862859141308ull, 2799680927722ull}}, {{5637222258394981143ull, 876170884518428624ull, 8320452602055648908ull, 559936185544ull}}, {{11274444516789962285ull, 1752341769036857248ull, 16640905204111297816ull, 1119872371088ull}} }; static const UINT256 multipliers2_bid32[] = { {{7156996302188685206ull, 14694123111064470433ull, 3521238664523520994ull, 11704ull}}, {{14313992604377370412ull, 10941502148419389250ull, 7042477329047041989ull, 23408ull}}, {{10181241135045189207ull, 3436260223129226885ull, 14084954658094083979ull, 46816ull}}, {{1915738196380826798ull, 6872520446258453771ull, 9723165242478616342ull, 93633ull}}, {{3831476392761653595ull, 13745040892516907542ull, 999586411247681068ull, 187267ull}}, {{7662952785523307189ull, 9043337711324263468ull, 1999172822495362137ull, 374534ull}}, {{15325905571046614378ull, 18086675422648526936ull, 3998345644990724274ull, 749068ull}}, {{12205067068383677139ull, 17726606771587502257ull, 7996691289981448549ull, 1498136ull}}, {{5963390063057802661ull, 17006469469465452899ull, 15993382579962897099ull, 2996272ull}}, {{11926780126115605321ull, 15566194865221354182ull, 13540021086216242583ull, 5992545ull}}, {{5406816178521659026ull, 12685645656733156749ull, 8633298098722933551ull, 11985091ull}}, {{10813632357043318052ull, 6924547239756761882ull, 17266596197445867103ull, 23970182ull}}, {{3180520640377084488ull, 13849094479513523765ull, 16086448321182182590ull, 47940365ull}}, {{6361041280754168975ull, 9251444885317495914ull, 13726152568654813565ull, 95880731ull}}, {{12722082561508337950ull, 56145696925440212ull, 9005561063600075515ull, 191761463ull}}, {{6997421049307124283ull, 112291393850880425ull, 18011122127200151030ull, 383522926ull}}, {{13994842098614248565ull, 224582787701760850ull, 17575500180690750444ull, 767045853ull}}, {{9542940123518945513ull, 449165575403521701ull, 16704256287671949272ull, 1534091707ull}}, {{639136173328339410ull, 898331150807043403ull, 14961768501634346928ull, 3068183415ull}}, {{1278272346656678820ull, 1796662301614086806ull, 11476792929559142240ull, 6136366831ull}}, {{2556544693313357639ull, 3593324603228173612ull, 4506841785408732864ull, 12272733663ull}}, {{5113089386626715277ull, 7186649206456347224ull, 9013683570817465728ull, 24545467326ull}}, {{10226178773253430554ull, 14373298412912694448ull, 18027367141634931456ull, 49090934652ull}}, {{2005613472797309491ull, 10299852752115837281ull, 17607990209560311297ull, 98181869305ull}}, {{4011226945594618982ull, 2152961430522122946ull, 16769236345411070979ull, 196363738611ull}}, {{4491594203860834120ull, 430592286104424589ull, 7043196083824124519ull, 39272747722ull}}, {{8983188407721668240ull, 861184572208849178ull, 14086392167648249038ull, 78545495444ull}}, {{17966376815443336479ull, 1722369144417698356ull, 9726040261586946460ull, 157090990889ull}}, {{17486009557177121341ull, 3444738288835396713ull, 1005336449464341304ull, 314181981779ull}}, {{7186550726177334592ull, 11756994101992810312ull, 14958462548860509553ull, 62836396355ull}}, {{14373101452354669183ull, 5067244130276069008ull, 11470181024011467491ull, 125672792711ull}}, {{10299458830999786749ull, 10134488260552138017ull, 4493617974313383366ull, 251345585423ull}}, {{5749240580941867673ull, 16784292911078068896ull, 11966770039088407642ull, 50269117084ull}}, {{11498481161883735346ull, 15121841748446586176ull, 5486796004467263669ull, 100538234169ull}}, {{4550218250057919076ull, 11796939423183620737ull, 10973592008934527339ull, 201076468338ull}}, {{15667438908979225108ull, 9738085514120544793ull, 13262764846012636437ull, 40215293667ull}}, {{12888133744248898600ull, 1029426954531537971ull, 8078785618315721259ull, 80430587335ull}}, {{7329523414788245584ull, 2058853909063075943ull, 16157571236631442518ull, 160861174670ull}}, {{14659046829576491168ull, 4117707818126151886ull, 13868398399553333420ull, 321722349341ull}}, {{10310506995399118880ull, 4512890378367140700ull, 6463028494652577007ull, 64344469868ull}}, {{2174269917088686144ull, 9025780756734281401ull, 12926056989305154014ull, 128688939736ull}}, {{4348539834177372288ull, 18051561513468562802ull, 7405369904900756412ull, 257377879473ull}}, {{8248405596319295104ull, 3610312302693712560ull, 12549120425205882252ull, 51475575894ull}}, {{16496811192638590208ull, 7220624605387425120ull, 6651496776702212888ull, 102951151789ull}}, {{14546878311567628800ull, 14441249210774850241ull, 13302993553404425776ull, 205902303578ull}}, {{2909375662313525760ull, 17645645101122611341ull, 13728645154906616124ull, 41180460715ull}}, {{5818751324627051520ull, 16844546128535671066ull, 9010546236103680633ull, 82360921431ull}}, {{11637502649254103040ull, 15242348183361790516ull, 18021092472207361267ull, 164721842862ull}}, {{2327500529850820608ull, 17805864895639999396ull, 10982916123925292899ull, 32944368572ull}}, {{4655001059701641216ull, 17164985717570447176ull, 3519088174141034183ull, 65888737145ull}}, {{9310002119403282432ull, 15883227361431342736ull, 7038176348282068367ull, 131777474290ull}}, {{173260165097013248ull, 13319710649153133857ull, 14076352696564136735ull, 263554948580ull}}, {{7413349662503223296ull, 2663942129830626771ull, 2815270539312827347ull, 52710989716ull}}, {{14826699325006446592ull, 5327884259661253542ull, 5630541078625654694ull, 105421979432ull}}, {{11206654576303341568ull, 10655768519322507085ull, 11261082157251309388ull, 210843958864ull}}, {{9620028544744488960ull, 9509851333348322063ull, 17009611690417903170ull, 42168791772ull}}, {{793313015779426304ull, 572958592987092511ull, 15572479307126254725ull, 84337583545ull}}, {{1586626031558852608ull, 1145917185974185022ull, 12698214540542957834ull, 168675167091ull}}, {{7696022835795591168ull, 229183437194837004ull, 6228991722850501890ull, 33735033418ull}}, {{15392045671591182336ull, 458366874389674008ull, 12457983445701003780ull, 67470066836ull}}, {{12337347269472813056ull, 916733748779348017ull, 6469222817692455944ull, 134940133673ull}}, {{6227950465236074496ull, 1833467497558696035ull, 12938445635384911888ull, 269880267346ull}}, {{16002985352014856192ull, 15124088758479380499ull, 6277037941818892700ull, 53976053469ull}}, {{13559226630320160768ull, 11801433443249209383ull, 12554075883637785401ull, 107952106938ull}}, {{8671709186930769920ull, 5156122812788867151ull, 6661407693566019187ull, 215904213877ull}}, {{1734341837386153984ull, 15788619821525414723ull, 8710979168197024483ull, 43180842775ull}}, {{3468683674772307968ull, 13130495569341277830ull, 17421958336394048967ull, 86361685550ull}}, {{6937367349544615936ull, 7814247064973004044ull, 16397172599078546319ull, 172723371101ull}}, {{16144868728876564480ull, 1562849412994600808ull, 6968783334557619587ull, 34544674220ull}}, {{13842993384043577344ull, 3125698825989201617ull, 13937566669115239174ull, 69089348440ull}}, {{9239242694377603072ull, 6251397651978403235ull, 9428389264520926732ull, 138178696881ull}}, {{31741315045654528ull, 12502795303956806471ull, 410034455332301848ull, 276357393763ull}}, {{7385045892492951552ull, 6189907875533271617ull, 11150053335292191339ull, 55271478752ull}}, {{14770091784985903104ull, 12379815751066543234ull, 3853362596874831062ull, 110542957505ull}}, {{11093439496262254592ull, 6312887428423534853ull, 7706725193749662125ull, 221085915010ull}}, {{13286734343478181888ull, 1262577485684706970ull, 1541345038749932425ull, 44217183002ull}}, {{8126724613246812160ull, 2525154971369413941ull, 3082690077499864850ull, 88434366004ull}}, {{16253449226493624320ull, 5050309942738827882ull, 6165380154999729700ull, 176868732008ull}}, {{3250689845298724864ull, 12078108432773496546ull, 12301122475225676909ull, 35373746401ull}}, {{6501379690597449728ull, 5709472791837441476ull, 6155500876741802203ull, 70747492803ull}}, {{13002759381194899456ull, 11418945583674882952ull, 12311001753483604406ull, 141494985606ull}}, {{7558774688680247296ull, 4391147093640214289ull, 6175259433257657197ull, 282989971213ull}}, {{16269150196703690752ull, 878229418728042857ull, 12303098330877262409ull, 56597994242ull}}, {{14091556319697829888ull, 1756458837456085715ull, 6159452588044973202ull, 113195988485ull}}, {{9736368565686108160ull, 3512917674912171431ull, 12318905176089946404ull, 226391976970ull}}, {{1947273713137221632ull, 15459978793950075579ull, 2463781035217989280ull, 45278395394ull}}, {{3894547426274443264ull, 12473213514190599542ull, 4927562070435978561ull, 90556790788ull}}, {{7789094852548886528ull, 6499682954671647468ull, 9855124140871957123ull, 181113581576ull}}, {{8936516599993597952ull, 16057331849901970786ull, 5660373642916301747ull, 36222716315ull}}, {{17873033199987195904ull, 13667919626094389956ull, 11320747285832603495ull, 72445432630ull}}, {{17299322326264840192ull, 8889095178479228297ull, 4194750497955655375ull, 144890865261ull}}, {{16151900578820128768ull, 17778190356958456595ull, 8389500995911310750ull, 289781730522ull}}, {{10609077745247846400ull, 10934335700875511965ull, 9056597828666082796ull, 57956346104ull}}, {{2771411416786141184ull, 3421927328041472315ull, 18113195657332165593ull, 115912692208ull}}, {{5542822833572282368ull, 6843854656082944630ull, 17779647240954779570ull, 231825384417ull}}, {{8487262196198277120ull, 8747468560700409572ull, 10934627077674776560ull, 46365076883ull}}, {{16974524392396554240ull, 17494937121400819144ull, 3422510081640001504ull, 92730153767ull}}, {{15502304711083556864ull, 16543130169092086673ull, 6845020163280003009ull, 185460307534ull}}, {{6789809756958621696ull, 14376672478044148304ull, 16126399291623641894ull, 37092061506ull}}, {{13579619513917243392ull, 10306600882378744992ull, 13806054509537732173ull, 74184123013ull}}, {{8712494954124935168ull, 2166457691047938369ull, 9165364945365912731ull, 148368246027ull}}, {{17424989908249870336ull, 4332915382095876738ull, 18330729890731825462ull, 296736492054ull}}, {{18242393240617615360ull, 4555931891161085670ull, 18423541237114006385ull, 59347298410ull}}, {{18038042407525679104ull, 9111863782322171341ull, 18400338400518461154ull, 118694596821ull}}, {{17629340741341806592ull, 18223727564644342683ull, 18353932727327370692ull, 237389193643ull}}, {{14593914592494092288ull, 3644745512928868536ull, 14738832989691205108ull, 47477838728ull}}, {{10741085111278632960ull, 7289491025857737073ull, 11030921905672858600ull, 94955677457ull}}, {{3035426148847714304ull, 14578982051715474147ull, 3615099737636165584ull, 189911354915ull}}, {{4296434044511453184ull, 17673191669310736122ull, 723019947527233116ull, 37982270983ull}}, {{8592868089022906368ull, 16899639264911920628ull, 1446039895054466233ull, 75964541966ull}}, {{17185736178045812736ull, 15352534456114289640ull, 2892079790108932467ull, 151929083932ull}}, {{15924728282382073856ull, 12258324838519027665ull, 5784159580217864935ull, 303858167864ull}}, {{17942340915444056064ull, 17209060226671446825ull, 15914227175011214279ull, 60771633572ull}}, {{17437937757178560512ull, 15971376379633342035ull, 13381710276312876943ull, 121543267145ull}}, {{16429131440647569408ull, 13496008685557132455ull, 8316676478916202271ull, 243086534291ull}}, {{10664523917613334528ull, 10077899366595247137ull, 5352684110525150777ull, 48617306858ull}}, {{2882303761517117440ull, 1709054659480942659ull, 10705368221050301555ull, 97234613716ull}}, {{5764607523034234880ull, 3418109318961885318ull, 2963992368391051494ull, 194469227433ull}}, {{1152921504606846976ull, 8062319493276197710ull, 11660844917903941268ull, 38893845486ull}}, {{2305843009213693952ull, 16124638986552395420ull, 4874945762098330920ull, 77787690973ull}}, {{4611686018427387904ull, 13802533899395239224ull, 9749891524196661841ull, 155575381946ull}}, {{9223372036854775808ull, 9158323725080926832ull, 1053038974683772067ull, 311150763893ull}}, {{9223372036854775808ull, 1831664745016185366ull, 11278654239162485383ull, 62230152778ull}}, {{0ull, 3663329490032370733ull, 4110564404615419150ull, 124460305557ull}}, {{0ull, 7326658980064741466ull, 8221128809230838300ull, 248920611114ull}}, {{0ull, 16222727054980589586ull, 16401621020813808952ull, 49784122222ull}}, {{0ull, 13998710036251627556ull, 14356497967918066289ull, 99568244445ull}}, {{0ull, 9550675998793703496ull, 10266251862126580963ull, 199136488891ull}}, {{0ull, 16667530458726381992ull, 5742599187167226515ull, 39827297778ull}}, {{0ull, 14888316843743212368ull, 11485198374334453031ull, 79654595556ull}}, {{0ull, 11329889613776873120ull, 4523652674959354447ull, 159309191113ull}}, {{0ull, 4213035153844194624ull, 9047305349918708895ull, 318618382226ull}}, {{0ull, 4531955845510749248ull, 5498809884725652102ull, 63723676445ull}}, {{0ull, 9063911691021498496ull, 10997619769451304204ull, 127447352890ull}}, {{0ull, 18127823382042996992ull, 3548495465193056792ull, 254894705781ull}}, {{0ull, 14693611120634330368ull, 4399047907780521681ull, 50978941156ull}}, {{0ull, 10940478167559109120ull, 8798095815561043363ull, 101957882312ull}}, {{0ull, 3434212261408666624ull, 17596191631122086727ull, 203915764624ull}}, {{0ull, 4376191267023643648ull, 18276633585192058638ull, 40783152924ull}}, {{0ull, 8752382534047287296ull, 18106523096674565660ull, 81566305849ull}}, {{0ull, 17504765068094574592ull, 17766302119639579704ull, 163132611699ull}}, {{0ull, 16562786062479597568ull, 17085860165569607793ull, 326265223399ull}}, {{0ull, 10691254841979740160ull, 18174567292081562851ull, 65253044679ull}}, {{0ull, 2935765610249928704ull, 17902390510453574087ull, 130506089359ull}}, {{0ull, 5871531220499857408ull, 17358036947197596558ull, 261012178719ull}}, {{0ull, 8553003873583792128ull, 18229002648407160604ull, 52202435743ull}}, {{0ull, 17106007747167584256ull, 18011261223104769592ull, 104404871487ull}}, {{0ull, 15765271420625616896ull, 17575778372499987569ull, 208809742975ull}}, {{0ull, 17910449543092764672ull, 3515155674499997513ull, 41761948595ull}}, {{0ull, 17374155012475977728ull, 7030311348999995027ull, 83523897190ull}}, {{0ull, 16301565951242403840ull, 14060622697999990055ull, 167047794380ull}}, {{0ull, 3260313190248480768ull, 2812124539599998011ull, 33409558876ull}}, {{0ull, 6520626380496961536ull, 5624249079199996022ull, 66819117752ull}}, {{0ull, 13041252760993923072ull, 11248498158399992044ull, 133638235504ull}}, {{0ull, 7635761448278294528ull, 4050252243090432473ull, 267276471009ull}}, {{0ull, 8905849919139479552ull, 15567445707585727787ull, 53455294201ull}}, {{0ull, 17811699838278959104ull, 12688147341461903958ull, 106910588403ull}}, {{0ull, 17176655602848366592ull, 6929550609214256301ull, 213821176807ull}}, {{0ull, 14503377564795404288ull, 8764607751326671906ull, 42764235361ull}}, {{0ull, 10560011055881256960ull, 17529215502653343813ull, 85528470722ull}}, {{0ull, 2673278038052962304ull, 16611686931597136011ull, 171056941445ull}}, {{0ull, 4224004422352502784ull, 3322337386319427202ull, 34211388289ull}}, {{0ull, 8448008844705005568ull, 6644674772638854404ull, 68422776578ull}}, {{0ull, 16896017689410011136ull, 13289349545277708808ull, 136845553156ull}}, {{0ull, 15345291305110470656ull, 8131955016845866001ull, 273691106313ull}}, {{0ull, 17826453519989735424ull, 12694437447594904169ull, 54738221262ull}}, {{0ull, 17206162966269919232ull, 6942130821480256723ull, 109476442525ull}}, {{0ull, 15965581858830286848ull, 13884261642960513447ull, 218952885050ull}}, {{0ull, 10571814001249878016ull, 2776852328592102689ull, 43790577010ull}}, {{0ull, 2696883928790204416ull, 5553704657184205379ull, 87581154020ull}}, {{0ull, 5393767857580408832ull, 11107409314368410758ull, 175162308040ull}}, {{0ull, 12146800015741812736ull, 2221481862873682151ull, 35032461608ull}}, {{0ull, 5846855957774073856ull, 4442963725747364303ull, 70064923216ull}}, {{0ull, 11693711915548147712ull, 8885927451494728606ull, 140129846432ull}}, {{0ull, 4940679757386743808ull, 17771854902989457213ull, 280259692864ull}}, {{0ull, 8366833580961169408ull, 18311766239565532735ull, 56051938572ull}}, {{0ull, 16733667161922338816ull, 18176788405421513854ull, 112103877145ull}}, {{0ull, 15020590250135126016ull, 17906832737133476093ull, 224207754291ull}}, {{0ull, 17761513308994666496ull, 7270715362168605541ull, 44841550858ull}}, {{0ull, 17076282544279781376ull, 14541430724337211083ull, 89683101716ull}}, {{0ull, 15705821014850011136ull, 10636117374964870551ull, 179366203433ull}}, {{0ull, 17898559461937643520ull, 13195269919218705079ull, 35873240686ull}}, {{0ull, 17350374850165735424ull, 7943795764727858543ull, 71746481373ull}}, {{0ull, 16254005626621919232ull, 15887591529455717087ull, 143492962746ull}}, {{0ull, 14061267179534286848ull, 13328438985201882559ull, 286985925493ull}}, {{0ull, 10190951065390678016ull, 13733734241266107481ull, 57397185098ull}}, {{0ull, 1935158057071804416ull, 9020724408822663347ull, 114794370197ull}}, {{0ull, 3870316114143608832ull, 18041448817645326694ull, 229588740394ull}}, {{0ull, 11842109667054452736ull, 18365685022496706631ull, 45917748078ull}}, {{0ull, 5237475260399353856ull, 18284625971283861647ull, 91835496157ull}}, {{0ull, 10474950520798707712ull, 18122507868858171678ull, 183670992315ull}}, {{0ull, 13163036548385472512ull, 3624501573771634335ull, 36734198463ull}}, {{0ull, 7879329023061393408ull, 7249003147543268671ull, 73468396926ull}}, {{0ull, 15758658046122786816ull, 14498006295086537342ull, 146936793852ull}}, {{0ull, 13070572018536022016ull, 10549268516463523069ull, 293873587705ull}}, {{0ull, 17371509662674845696ull, 2109853703292704613ull, 58774717541ull}}, {{0ull, 16296275251640139776ull, 4219707406585409227ull, 117549435082ull}}, {{0ull, 14145806429570727936ull, 8439414813170818455ull, 235098870164ull}}, {{0ull, 17586556544881786880ull, 16445278221601804983ull, 47019774032ull}}, {{0ull, 16726369016054022144ull, 14443812369494058351ull, 94039548065ull}}, {{0ull, 15005993958398492672ull, 10440880665278565087ull, 188079096131ull}}, {{0ull, 14069245235905429504ull, 5777524947797623340ull, 37615819226ull}}, {{0ull, 9691746398101307392ull, 11555049895595246681ull, 75231638452ull}}, {{0ull, 936748722493063168ull, 4663355717480941747ull, 150463276905ull}}, {{0ull, 1873497444986126336ull, 9326711434961883494ull, 300926553810ull}}, {{0ull, 15132094747964866560ull, 1865342286992376698ull, 60185310762ull}}, {{0ull, 11817445422220181504ull, 3730684573984753397ull, 120370621524ull}}, {{0ull, 5188146770730811392ull, 7461369147969506795ull, 240741243048ull}}, {{0ull, 12105675798371893248ull, 12560320273819632328ull, 48148248609ull}}, {{0ull, 5764607523034234880ull, 6673896473929713041ull, 96296497219ull}}, {{0ull, 11529215046068469760ull, 13347792947859426082ull, 192592994438ull}}, {{0ull, 2305843009213693952ull, 13737605033797616186ull, 38518598887ull}}, {{0ull, 4611686018427387904ull, 9028465993885680756ull, 77037197775ull}}, {{0ull, 9223372036854775808ull, 18056931987771361512ull, 154074395550ull}}, {{0ull, 0ull, 17667119901833171409ull, 308148791101ull}}, {{0ull, 0ull, 7222772795108544605ull, 61629758220ull}}, {{0ull, 0ull, 14445545590217089210ull, 123259516440ull}}, {{0ull, 0ull, 10444347106724626804ull, 246519032881ull}}, {{0ull, 0ull, 5778218236086835684ull, 49303806576ull}}, {{0ull, 0ull, 11556436472173671368ull, 98607613152ull}}, {{0ull, 0ull, 4666128870637791120ull, 197215226305ull}}, {{0ull, 0ull, 933225774127558224ull, 39443045261ull}}, {{0ull, 0ull, 1866451548255116448ull, 78886090522ull}}, {{0ull, 0ull, 3732903096510232896ull, 157772181044ull}}, {{0ull, 0ull, 7465806193020465792ull, 315544362088ull}}, {{0ull, 0ull, 12561207682829824128ull, 63108872417ull}}, {{0ull, 0ull, 6675671291950096640ull, 126217744835ull}}, {{0ull, 0ull, 13351342583900193280ull, 252435489670ull}}, {{0ull, 0ull, 2670268516780038656ull, 50487097934ull}}, {{0ull, 0ull, 5340537033560077312ull, 100974195868ull}}, {{0ull, 0ull, 10681074067120154624ull, 201948391736ull}}, {{0ull, 0ull, 5825563628165941248ull, 40389678347ull}}, {{0ull, 0ull, 11651127256331882496ull, 80779356694ull}}, {{0ull, 0ull, 4855510438954213376ull, 161558713389ull}}, {{0ull, 0ull, 9711020877908426752ull, 323117426778ull}}, {{0ull, 0ull, 13010250619807416320ull, 64623485355ull}}, {{0ull, 0ull, 7573757165905281024ull, 129246970711ull}}, {{0ull, 0ull, 15147514331810562048ull, 258493941422ull}}, {{0ull, 0ull, 10408200495845933056ull, 51698788284ull}}, {{0ull, 0ull, 2369656917982314496ull, 103397576569ull}}, {{0ull, 0ull, 4739313835964628992ull, 206795153138ull}}, {{0ull, 0ull, 12015909211418656768ull, 41359030627ull}}, {{0ull, 0ull, 5585074349127761920ull, 82718061255ull}}, {{0ull, 0ull, 11170148698255523840ull, 165436122510ull}}, {{0ull, 0ull, 2234029739651104768ull, 33087224502ull}}, {{0ull, 0ull, 4468059479302209536ull, 66174449004ull}}, {{0ull, 0ull, 8936118958604419072ull, 132348898008ull}}, {{0ull, 0ull, 17872237917208838144ull, 264697796016ull}}, {{0ull, 0ull, 7263796398183677952ull, 52939559203ull}}, {{0ull, 0ull, 14527592796367355904ull, 105879118406ull}}, {{0ull, 0ull, 10608441519025160192ull, 211758236813ull}}, {{0ull, 0ull, 13189734748030763008ull, 42351647362ull}}, {{0ull, 0ull, 7932725422351974400ull, 84703294725ull}}, {{0ull, 0ull, 15865450844703948800ull, 169406589450ull}}, {{0ull, 0ull, 3173090168940789760ull, 33881317890ull}}, {{0ull, 0ull, 6346180337881579520ull, 67762635780ull}}, {{0ull, 0ull, 12692360675763159040ull, 135525271560ull}}, {{0ull, 0ull, 6937977277816766464ull, 271050543121ull}}, {{0ull, 0ull, 5076944270305263616ull, 54210108624ull}}, {{0ull, 0ull, 10153888540610527232ull, 108420217248ull}}, {{0ull, 0ull, 1861033007511502848ull, 216840434497ull}}, {{0ull, 0ull, 7750904230986121216ull, 43368086899ull}}, {{0ull, 0ull, 15501808461972242432ull, 86736173798ull}}, {{0ull, 0ull, 12556872850234933248ull, 173472347597ull}}, {{0ull, 0ull, 9890072199530807296ull, 34694469519ull}}, {{0ull, 0ull, 1333400325352062976ull, 69388939039ull}}, {{0ull, 0ull, 2666800650704125952ull, 138777878078ull}}, {{0ull, 0ull, 5333601301408251904ull, 277555756156ull}}, {{0ull, 0ull, 4756069075023560704ull, 55511151231ull}}, {{0ull, 0ull, 9512138150047121408ull, 111022302462ull}}, {{0ull, 0ull, 577532226384691200ull, 222044604925ull}}, {{0ull, 0ull, 115506445276938240ull, 44408920985ull}}, {{0ull, 0ull, 231012890553876480ull, 88817841970ull}}, {{0ull, 0ull, 462025781107752960ull, 177635683940ull}}, {{0ull, 0ull, 92405156221550592ull, 35527136788ull}}, {{0ull, 0ull, 184810312443101184ull, 71054273576ull}}, {{0ull, 0ull, 369620624886202368ull, 142108547152ull}}, {{0ull, 0ull, 739241249772404736ull, 284217094304ull}}, {{0ull, 0ull, 14905243508922122240ull, 56843418860ull}}, {{0ull, 0ull, 11363742944134692864ull, 113686837721ull}}, {{0ull, 0ull, 4280741814559834112ull, 227373675443ull}}, {{0ull, 0ull, 11924194807137697792ull, 45474735088ull}}, {{0ull, 0ull, 5401645540565843968ull, 90949470177ull}}, {{0ull, 0ull, 10803291081131687936ull, 181898940354ull}}, {{0ull, 0ull, 16918053475193978880ull, 36379788070ull}}, {{0ull, 0ull, 15389362876678406144ull, 72759576141ull}}, {{0ull, 0ull, 12331981679647260672ull, 145519152283ull}}, {{0ull, 0ull, 6217219285584969728ull, 291038304567ull}}, {{0ull, 0ull, 8622141486600814592ull, 58207660913ull}}, {{0ull, 0ull, 17244282973201629184ull, 116415321826ull}}, {{0ull, 0ull, 16041821872693706752ull, 232830643653ull}}, {{0ull, 0ull, 14276410818764472320ull, 46566128730ull}}, {{0ull, 0ull, 10106077563819393024ull, 93132257461ull}}, {{0ull, 0ull, 1765411053929234432ull, 186264514923ull}}, {{0ull, 0ull, 11421128655011577856ull, 37252902984ull}}, {{0ull, 0ull, 4395513236313604096ull, 74505805969ull}}, {{0ull, 0ull, 8791026472627208192ull, 149011611938ull}}, {{0ull, 0ull, 17582052945254416384ull, 298023223876ull}}, {{0ull, 0ull, 7205759403792793600ull, 59604644775ull}}, {{0ull, 0ull, 14411518807585587200ull, 119209289550ull}}, {{0ull, 0ull, 10376293541461622784ull, 238418579101ull}}, {{0ull, 0ull, 5764607523034234880ull, 47683715820ull}}, {{0ull, 0ull, 11529215046068469760ull, 95367431640ull}}, {{0ull, 0ull, 4611686018427387904ull, 190734863281ull}}, {{0ull, 0ull, 4611686018427387904ull, 38146972656ull}}, {{0ull, 0ull, 9223372036854775808ull, 76293945312ull}}, {{0ull, 0ull, 0ull, 152587890625ull}}, {{0ull, 0ull, 0ull, 305175781250ull}}, {{0ull, 0ull, 0ull, 61035156250ull}}, {{0ull, 0ull, 0ull, 122070312500ull}}, {{0ull, 0ull, 0ull, 244140625000ull}}, {{0ull, 0ull, 0ull, 48828125000ull}}, {{0ull, 0ull, 0ull, 97656250000ull}}, {{0ull, 0ull, 0ull, 195312500000ull}}, {{0ull, 0ull, 0ull, 39062500000ull}}, {{0ull, 0ull, 0ull, 78125000000ull}}, {{0ull, 0ull, 0ull, 156250000000ull}}, {{0ull, 0ull, 0ull, 312500000000ull}}, {{0ull, 0ull, 0ull, 62500000000ull}}, {{0ull, 0ull, 0ull, 125000000000ull}}, {{0ull, 0ull, 0ull, 250000000000ull}}, {{0ull, 0ull, 0ull, 50000000000ull}}, {{0ull, 0ull, 0ull, 100000000000ull}}, {{0ull, 0ull, 0ull, 200000000000ull}}, {{0ull, 0ull, 0ull, 40000000000ull}}, {{0ull, 0ull, 0ull, 80000000000ull}}, {{0ull, 0ull, 0ull, 160000000000ull}}, {{0ull, 0ull, 0ull, 320000000000ull}}, {{0ull, 0ull, 0ull, 64000000000ull}}, {{0ull, 0ull, 0ull, 128000000000ull}}, {{0ull, 0ull, 0ull, 256000000000ull}}, {{0ull, 0ull, 0ull, 51200000000ull}}, {{0ull, 0ull, 0ull, 102400000000ull}}, {{0ull, 0ull, 0ull, 204800000000ull}}, {{0ull, 0ull, 0ull, 40960000000ull}}, {{0ull, 0ull, 0ull, 81920000000ull}}, {{0ull, 0ull, 0ull, 163840000000ull}}, {{0ull, 0ull, 0ull, 327680000000ull}}, {{0ull, 0ull, 0ull, 65536000000ull}}, {{0ull, 0ull, 0ull, 131072000000ull}}, {{0ull, 0ull, 0ull, 262144000000ull}}, {{0ull, 0ull, 0ull, 52428800000ull}}, {{0ull, 0ull, 0ull, 104857600000ull}}, {{0ull, 0ull, 0ull, 209715200000ull}}, {{0ull, 0ull, 0ull, 41943040000ull}}, {{0ull, 0ull, 0ull, 83886080000ull}}, {{0ull, 0ull, 0ull, 167772160000ull}}, {{0ull, 0ull, 0ull, 33554432000ull}}, {{0ull, 0ull, 0ull, 67108864000ull}}, {{0ull, 0ull, 0ull, 134217728000ull}}, {{0ull, 0ull, 0ull, 268435456000ull}}, {{0ull, 0ull, 0ull, 53687091200ull}}, {{0ull, 0ull, 0ull, 107374182400ull}}, {{0ull, 0ull, 0ull, 214748364800ull}}, {{0ull, 0ull, 0ull, 42949672960ull}}, {{0ull, 0ull, 0ull, 85899345920ull}}, {{0ull, 0ull, 0ull, 171798691840ull}}, {{0ull, 0ull, 0ull, 34359738368ull}}, {{0ull, 0ull, 0ull, 68719476736ull}}, {{0ull, 0ull, 0ull, 137438953472ull}}, {{0ull, 0ull, 0ull, 274877906944ull}}, {{14757395258967641293ull, 14757395258967641292ull, 14757395258967641292ull, 54975581388ull}}, {{11068046444225730970ull, 11068046444225730969ull, 11068046444225730969ull, 109951162777ull}}, {{3689348814741910324ull, 3689348814741910323ull, 3689348814741910323ull, 219902325555ull}}, {{4427218577690292388ull, 11805916207174113034ull, 737869762948382064ull, 43980465111ull}}, {{8854437155380584776ull, 5165088340638674452ull, 1475739525896764129ull, 87960930222ull}}, {{17708874310761169552ull, 10330176681277348904ull, 2951479051793528258ull, 175921860444ull}}, {{7231123676894144234ull, 9444732965739290427ull, 15347691069326346944ull, 35184372088ull}}, {{14462247353788288467ull, 442721857769029238ull, 12248638064943142273ull, 70368744177ull}}, {{10477750633867025318ull, 885443715538058477ull, 6050532056176732930ull, 140737488355ull}}, {{2508757194024499020ull, 1770887431076116955ull, 12101064112353465860ull, 281474976710ull}}, {{501751438804899804ull, 354177486215223391ull, 2420212822470693172ull, 56294995342ull}}, {{1003502877609799608ull, 708354972430446782ull, 4840425644941386344ull, 112589990684ull}}, {{2007005755219599216ull, 1416709944860893564ull, 9680851289882772688ull, 225179981368ull}}, {{401401151043919844ull, 3972690803714089036ull, 13004216702202285507ull, 45035996273ull}}, {{802802302087839687ull, 7945381607428178072ull, 7561689330695019398ull, 90071992547ull}}, {{1605604604175679373ull, 15890763214856356144ull, 15123378661390038796ull, 180143985094ull}}, {{15078516179802777168ull, 3178152642971271228ull, 17782070991245649052ull, 36028797018ull}}, {{11710288285896002719ull, 6356305285942542457ull, 17117397908781746488ull, 72057594037ull}}, {{4973832498082453822ull, 12712610571885084915ull, 15788051743853941360ull, 144115188075ull}}, {{9947664996164907643ull, 6978477070060618214ull, 13129359413998331105ull, 288230376151ull}}, {{1989532999232981529ull, 5085044228754033966ull, 6315220697541576544ull, 57646075230ull}}, {{3979065998465963058ull, 10170088457508067932ull, 12630441395083153088ull, 115292150460ull}}, {{7958131996931926115ull, 1893432841306584248ull, 6814138716456754561ull, 230584300921ull}}, {{1591626399386385223ull, 7757384197745137496ull, 5052176558033261235ull, 46116860184ull}}, {{3183252798772770446ull, 15514768395490274992ull, 10104353116066522470ull, 92233720368ull}}, {{6366505597545540892ull, 12582792717270998368ull, 1761962158423493325ull, 184467440737ull}}, {{1273301119509108179ull, 9895256172938020320ull, 7731090061168519311ull, 36893488147ull}}, {{2546602239018216357ull, 1343768272166489024ull, 15462180122337038623ull, 73786976294ull}}, {{5093204478036432714ull, 2687536544332978048ull, 12477616170964525630ull, 147573952589ull}}, {{10186408956072865427ull, 5375073088665956096ull, 6508488268219499644ull, 295147905179ull}}, {{16794677050182214379ull, 12143061061958922188ull, 16059092912611541221ull, 59029581035ull}}, {{15142610026654877141ull, 5839378050208292761ull, 13671441751513530827ull, 118059162071ull}}, {{11838475979600202665ull, 11678756100416585523ull, 8896139429317510038ull, 236118324143ull}}, {{17125090454887681826ull, 6025100034825227427ull, 12847274330089232977ull, 47223664828ull}}, {{15803436836065812036ull, 12050200069650454855ull, 7247804586468914338ull, 94447329657ull}}, {{13160129598422072455ull, 5653656065591358095ull, 14495609172937828677ull, 188894659314ull}}, {{6321374734426324815ull, 4820080027860181942ull, 17656517093555207028ull, 37778931862ull}}, {{12642749468852649629ull, 9640160055720363884ull, 16866290113400862440ull, 75557863725ull}}, {{6838754863995747641ull, 833576037731176153ull, 15285836153092173265ull, 151115727451ull}}, {{13677509727991495281ull, 1667152075462352306ull, 12124928232474794914ull, 302231454903ull}}, {{13803548389824030026ull, 7712128044576291107ull, 13493032090720689952ull, 60446290980ull}}, {{9160352705938508436ull, 15424256089152582215ull, 8539320107731828288ull, 120892581961ull}}, {{18320705411877016871ull, 12401768104595612814ull, 17078640215463656577ull, 241785163922ull}}, {{14732187526601134344ull, 17237748879886763855ull, 10794425672576551961ull, 48357032784ull}}, {{11017630979492717072ull, 16028753686063976095ull, 3142107271443552307ull, 96714065569ull}}, {{3588517885275882528ull, 13610763298418400575ull, 6284214542887104615ull, 193428131138ull}}, {{11785750021280907476ull, 13790199103909411084ull, 12324889352803151892ull, 38685626227ull}}, {{5124755968852263335ull, 9133654134109270553ull, 6203034631896752169ull, 77371252455ull}}, {{10249511937704526669ull, 18267308268218541106ull, 12406069263793504338ull, 154742504910ull}}, {{2052279801699501721ull, 18087872462727530597ull, 6365394453877457061ull, 309485009821ull}}, {{15167851219307541637ull, 10996272122029326765ull, 4962427705517401735ull, 61897001964ull}}, {{11888958364905531658ull, 3545800170349101915ull, 9924855411034803471ull, 123794003928ull}}, {{5331172656101511700ull, 7091600340698203831ull, 1402966748360055326ull, 247588007857ull}}, {{15823629790187943633ull, 12486366512365371735ull, 7659290979155831711ull, 49517601571ull}}, {{13200515506666335650ull, 6525988951021191855ull, 15318581958311663423ull, 99035203142ull}}, {{7954286939623119683ull, 13051977902042383711ull, 12190419842913775230ull, 198070406285ull}}, {{5280206202666534260ull, 2610395580408476742ull, 2438083968582755046ull, 39614081257ull}}, {{10560412405333068520ull, 5220791160816953484ull, 4876167937165510092ull, 79228162514ull}}, {{2674080736956585423ull, 10441582321633906969ull, 9752335874331020184ull, 158456325028ull}}, {{5348161473913170846ull, 2436420569558262322ull, 1057927674952488753ull, 316912650057ull}}, {{8448329924266454816ull, 487284113911652464ull, 7590283164474318397ull, 63382530011ull}}, {{16896659848532909632ull, 974568227823304928ull, 15180566328948636794ull, 126765060022ull}}, {{15346575623356267647ull, 1949136455646609857ull, 11914388584187721972ull, 253530120045ull}}, {{17826710383638894823ull, 7768524920613142617ull, 2382877716837544394ull, 50706024009ull}}, {{17206676693568238029ull, 15537049841226285235ull, 4765755433675088788ull, 101412048018ull}}, {{15966609313426924441ull, 12627355608743018855ull, 9531510867350177577ull, 202824096036ull}}, {{14261368306911115858ull, 13593517565974334740ull, 5595650988211945838ull, 40564819207ull}}, {{10075992540112680100ull, 8740291058239117865ull, 11191301976423891677ull, 81129638414ull}}, {{1705241006515808583ull, 17480582116478235731ull, 3935859879138231738ull, 162259276829ull}}, {{3410482013031617166ull, 16514420159246919846ull, 7871719758276463477ull, 324518553658ull}}, {{4371445217348233757ull, 3302884031849383969ull, 12642390395881023665ull, 64903710731ull}}, {{8742890434696467513ull, 6605768063698767938ull, 6838036718052495714ull, 129807421463ull}}, {{17485780869392935026ull, 13211536127397535876ull, 13676073436104991428ull, 259614842926ull}}, {{3497156173878587006ull, 17399702484447148468ull, 6424563501962908608ull, 51922968585ull}}, {{6994312347757174011ull, 16352660895184745320ull, 12849127003925817217ull, 103845937170ull}}, {{13988624695514348021ull, 14258577716659939024ull, 7251509934142082819ull, 207691874341ull}}, {{17555120198070510897ull, 2851715543331987804ull, 5139650801570326887ull, 41538374868ull}}, {{16663496322431470178ull, 5703431086663975609ull, 10279301603140653774ull, 83076749736ull}}, {{14880248571153388740ull, 11406862173327951219ull, 2111859132571755932ull, 166153499473ull}}, {{17733444973198319041ull, 2281372434665590243ull, 11490418270740082156ull, 33230699894ull}}, {{17020145872687086466ull, 4562744869331180487ull, 4534092467770612696ull, 66461399789ull}}, {{15593547671664621315ull, 9125489738662360975ull, 9068184935541225392ull, 132922799578ull}}, {{12740351269619691014ull, 18250979477324721951ull, 18136369871082450784ull, 265845599156ull}}, {{6237419068665848526ull, 3650195895464944390ull, 7316622788958400480ull, 53169119831ull}}, {{12474838137331697052ull, 7300391790929888780ull, 14633245577916800960ull, 106338239662ull}}, {{6502932200953842488ull, 14600783581859777561ull, 10819747082124050304ull, 212676479325ull}}, {{1300586440190768498ull, 17677551975339596805ull, 2163949416424810060ull, 42535295865ull}}, {{2601172880381536995ull, 16908359876969641994ull, 4327898832849620121ull, 85070591730ull}}, {{5202345760763073990ull, 15369975680229732372ull, 8655797665699240243ull, 170141183460ull}}, {{1040469152152614798ull, 14142041580271677444ull, 1731159533139848048ull, 34028236692ull}}, {{2080938304305229596ull, 9837339086833803272ull, 3462319066279696097ull, 68056473384ull}}, {{4161876608610459192ull, 1227934099958054928ull, 6924638132559392195ull, 136112946768ull}}, {{8323753217220918384ull, 2455868199916109856ull, 13849276265118784390ull, 272225893536ull}}, {{9043448272928004324ull, 4180522454725132294ull, 6459204067765667201ull, 54445178707ull}}, {{18086896545856008647ull, 8361044909450264588ull, 12918408135531334402ull, 108890357414ull}}, {{17727049018002465677ull, 16722089818900529177ull, 7390072197353117188ull, 217780714829ull}}, {{18302805062568134429ull, 10723115593263926481ull, 16235409698438264730ull, 43556142965ull}}, {{18158866051426717241ull, 2999487112818301347ull, 14024075323166977845ull, 87112285931ull}}, {{17870988029143882865ull, 5998974225636602695ull, 9601406572624404074ull, 174224571863ull}}, {{10952895235312597220ull, 8578492474611141185ull, 12988327758750611784ull, 34844914372ull}}, {{3459046396915642823ull, 17156984949222282371ull, 7529911443791671952ull, 69689828745ull}}, {{6918092793831285646ull, 15867225824735013126ull, 15059822887583343905ull, 139379657490ull}}, {{13836185587662571291ull, 13287707575760474636ull, 11672901701457136195ull, 278759314981ull}}, {{10145934747016334905ull, 6346890329894005250ull, 6023929155033337562ull, 55751862996ull}}, {{1845125420323118193ull, 12693780659788010501ull, 12047858310066675124ull, 111503725992ull}}, {{3690250840646236386ull, 6940817245866469386ull, 5648972546423798633ull, 223007451985ull}}, {{15495445427096888570ull, 12456209893399024846ull, 1129794509284759726ull, 44601490397ull}}, {{12544146780484225524ull, 6465675713088498077ull, 2259589018569519453ull, 89202980794ull}}, {{6641549487258899432ull, 12931351426176996155ull, 4519178037139038906ull, 178405961588ull}}, {{16085705156419421180ull, 17343665544203040523ull, 11971882051653538750ull, 35681192317ull}}, {{13724666239129290743ull, 16240587014696529431ull, 5497020029597525885ull, 71362384635ull}}, {{9002588404549029869ull, 14034429955683507247ull, 10994040059195051771ull, 142724769270ull}}, {{18005176809098059738ull, 9622115837657462878ull, 3541336044680551927ull, 285449538541ull}}, {{7290384176561522271ull, 12992469611757223545ull, 4397616023678020708ull, 57089907708ull}}, {{14580768353123044542ull, 7538195149804895474ull, 8795232047356041417ull, 114179815416ull}}, {{10714792632536537467ull, 15076390299609790949ull, 17590464094712082834ull, 228359630832ull}}, {{2142958526507307494ull, 6704626874663868513ull, 10896790448426237213ull, 45671926166ull}}, {{4285917053014614987ull, 13409253749327737026ull, 3346836823142922810ull, 91343852333ull}}, {{8571834106029229974ull, 8371763424945922436ull, 6693673646285845621ull, 182687704666ull}}, {{12782413265431576965ull, 9053050314473005133ull, 5028083543999079447ull, 36537540933ull}}, {{7118082457153602313ull, 18106100628946010267ull, 10056167087998158894ull, 73075081866ull}}, {{14236164914307204626ull, 17765457184182468918ull, 1665590102286766173ull, 146150163733ull}}, {{10025585754904857635ull, 17084170294655386221ull, 3331180204573532347ull, 292300327466ull}}, {{16762512409948612820ull, 14484880503156808213ull, 4355584855656616792ull, 58460065493ull}}, {{15078280746187674024ull, 10523016932604064811ull, 8711169711313233585ull, 116920130986ull}}, {{11709817418665796431ull, 2599289791498578007ull, 17422339422626467171ull, 233840261972ull}}, {{2341963483733159287ull, 11587904402525446571ull, 10863165514009114080ull, 46768052394ull}}, {{4683926967466318573ull, 4729064731341341526ull, 3279586954308676545ull, 93536104789ull}}, {{9367853934932637145ull, 9458129462682683052ull, 6559173908617353090ull, 187072209578ull}}, {{1873570786986527429ull, 12959672336762267580ull, 12379881225949201587ull, 37414441915ull}}, {{3747141573973054858ull, 7472600599814983544ull, 6313018378188851559ull, 74828883831ull}}, {{7494283147946109716ull, 14945201199629967088ull, 12626036756377703118ull, 149657767662ull}}, {{14988566295892219432ull, 11443658325550382560ull, 6805329439045854621ull, 299315535325ull}}, {{6687062073920354210ull, 5978080479851986835ull, 1361065887809170924ull, 59863107065ull}}, {{13374124147840708419ull, 11956160959703973670ull, 2722131775618341848ull, 119726214130ull}}, {{8301504221971865222ull, 5465577845698395725ull, 5444263551236683697ull, 239452428260ull}}, {{9038998473878193691ull, 8471813198623499791ull, 1088852710247336739ull, 47890485652ull}}, {{18077996947756387382ull, 16943626397246999582ull, 2177705420494673478ull, 95780971304ull}}, {{17709249821803223148ull, 15440508720784447549ull, 4355410840989346957ull, 191561942608ull}}, {{18299245223328285923ull, 3088101744156889509ull, 11939128612423600361ull, 38312388521ull}}, {{18151746372947020229ull, 6176203488313779019ull, 5431513151137649106ull, 76624777043ull}}, {{17856748672184488841ull, 12352406976627558039ull, 10863026302275298212ull, 153249554086ull}}, {{17266753270659426066ull, 6258069879545564463ull, 3279308530841044809ull, 306499108173ull}}, {{3453350654131885214ull, 8630311605392933539ull, 11723908150393939931ull, 61299821634ull}}, {{6906701308263770427ull, 17260623210785867078ull, 5001072227078328246ull, 122599643269ull}}, {{13813402616527540853ull, 16074502347862182540ull, 10002144454156656493ull, 245199286538ull}}, {{6452029338047418494ull, 6904249284314346831ull, 13068475335057062268ull, 49039857307ull}}, {{12904058676094836988ull, 13808498568628693662ull, 7690206596404572920ull, 98079714615ull}}, {{7361373278480122359ull, 9170253063547835709ull, 15380413192809145841ull, 196159429230ull}}, {{1472274655696024472ull, 5523399427451477465ull, 3076082638561829168ull, 39231885846ull}}, {{2944549311392048944ull, 11046798854902954930ull, 6152165277123658336ull, 78463771692ull}}, {{5889098622784097888ull, 3646853636096358244ull, 12304330554247316673ull, 156927543384ull}}, {{11778197245568195775ull, 7293707272192716488ull, 6161917034785081730ull, 313855086769ull}}, {{9734337078597459802ull, 16216136713406184590ull, 15989778665924657638ull, 62771017353ull}}, {{1021930083485367987ull, 13985529353102817565ull, 13532813258139763661ull, 125542034707ull}}, {{2043860166970735973ull, 9524314632496083514ull, 8618882442569975707ull, 251084069415ull}}, {{4098120848136057518ull, 9283560555983037349ull, 1723776488513995141ull, 50216813883ull}}, {{8196241696272115036ull, 120377038256523082ull, 3447552977027990283ull, 100433627766ull}}, {{16392483392544230072ull, 240754076513046164ull, 6895105954055980566ull, 200867255532ull}}, {{10657194307992666661ull, 11116197259528340202ull, 8757718820295016759ull, 40173451106ull}}, {{2867644542275781706ull, 3785650445347128789ull, 17515437640590033519ull, 80346902212ull}}, {{5735289084551563411ull, 7571300890694257578ull, 16584131207470515422ull, 160693804425ull}}, {{11470578169103126821ull, 15142601781388515156ull, 14721518341231479228ull, 321387608851ull}}, {{2294115633820625365ull, 17785915615245344324ull, 6633652482988206168ull, 64277521770ull}}, {{4588231267641250729ull, 17125087156781137032ull, 13267304965976412337ull, 128555043540ull}}, {{9176462535282501457ull, 15803430239852722448ull, 8087865858243273059ull, 257110087081ull}}, {{12903338951282231261ull, 3160686047970544489ull, 5306921986390564935ull, 51422017416ull}}, {{7359933828854910906ull, 6321372095941088979ull, 10613843972781129870ull, 102844034832ull}}, {{14719867657709821812ull, 12642744191882177958ull, 2780943871852708124ull, 205688069665ull}}, {{10322671161025785009ull, 17285944097344076884ull, 556188774370541624ull, 41137613933ull}}, {{2198598248342018402ull, 16125144120978602153ull, 1112377548741083249ull, 82275227866ull}}, {{4397196496684036804ull, 13803544168247652690ull, 2224755097482166499ull, 164550455732ull}}, {{4568788114078717684ull, 6450057648391440861ull, 7823648648980253946ull, 32910091146ull}}, {{9137576228157435368ull, 12900115296782881722ull, 15647297297960507892ull, 65820182292ull}}, {{18275152456314870736ull, 7353486519856211828ull, 12847850522211464169ull, 131640364585ull}}, {{18103560838920189855ull, 14706973039712423657ull, 7248956970713376722ull, 263280729171ull}}, {{3620712167784037971ull, 14009441052168215701ull, 5139140208884585667ull, 52656145834ull}}, {{7241424335568075942ull, 9572138030626879786ull, 10278280417769171335ull, 105312291668ull}}, {{14482848671136151884ull, 697531987544207956ull, 2109816761828791055ull, 210624583337ull}}, {{13964616178452961347ull, 7518204026992662237ull, 7800660981849578857ull, 42124916667ull}}, {{9482488283196371077ull, 15036408053985324475ull, 15601321963699157714ull, 84249833334ull}}, {{518232492683190538ull, 11626072034261097335ull, 12755899853688763813ull, 168499666669ull}}, {{7482344128020458754ull, 9703912036336040113ull, 17308575229705394055ull, 33699933333ull}}, {{14964688256040917508ull, 961079998962528610ull, 16170406385701236495ull, 67399866667ull}}, {{11482632438372283400ull, 1922159997925057221ull, 13894068697692921374ull, 134799733335ull}}, {{4518520803035015183ull, 3844319995850114443ull, 9341393321676291132ull, 269599466671ull}}, {{4593052975348913360ull, 11836910443395753858ull, 5557627479077168549ull, 53919893334ull}}, {{9186105950697826720ull, 5227076813081956100ull, 11115254958154337099ull, 107839786668ull}}, {{18372211901395653440ull, 10454153626163912200ull, 3783765842599122582ull, 215679573337ull}}, {{18431837639246771981ull, 16848225984200423732ull, 8135450798003645162ull, 43135914667ull}}, {{18416931204783992346ull, 15249707894691295849ull, 16270901596007290325ull, 86271829334ull}}, {{18387118335858433075ull, 12052671715673040083ull, 14095059118305029035ull, 172543658669ull}}, {{11056121296655507262ull, 17167929602102249309ull, 17576407082628647099ull, 34508731733ull}}, {{3665498519601462907ull, 15889115130494947003ull, 16706070091547742583ull, 69017463467ull}}, {{7330997039202925814ull, 13331486187280342390ull, 14965396109385933551ull, 138034926935ull}}, {{14661994078405851627ull, 8216228300851133164ull, 11484048145062315487ull, 276069853871ull}}, {{10311096445164990972ull, 12711292104395957602ull, 5986158443754373420ull, 55213970774ull}}, {{2175448816620430328ull, 6975840135082363589ull, 11972316887508746841ull, 110427941548ull}}, {{4350897633240860655ull, 13951680270164727178ull, 5497889701307942066ull, 220855883097ull}}, {{4559528341390082455ull, 13858382498258676405ull, 8478275569745409059ull, 44171176619ull}}, {{9119056682780164909ull, 9270020922807801194ull, 16956551139490818119ull, 88342353238ull}}, {{18238113365560329817ull, 93297771906050772ull, 15466358205272084623ull, 176684706477ull}}, {{11026320302595886610ull, 18659554381210154ull, 10471969270538237571ull, 35336941295ull}}, {{3605896531482221604ull, 37319108762420309ull, 2497194467366923526ull, 70673882591ull}}, {{7211793062964443207ull, 74638217524840618ull, 4994388934733847052ull, 141347765182ull}}, {{14423586125928886414ull, 149276435049681236ull, 9988777869467694104ull, 282695530364ull}}, {{17642112484153418576ull, 11097901731235667216ull, 16755150832861180113ull, 56539106072ull}}, {{16837480894597285536ull, 3749059388761782817ull, 15063557592012808611ull, 113078212145ull}}, {{15228217715485019455ull, 7498118777523565635ull, 11680371110316065606ull, 226156424291ull}}, {{10424341172580824538ull, 8878321384988533773ull, 6025423036805123444ull, 45231284858ull}}, {{2401938271452097459ull, 17756642769977067547ull, 12050846073610246888ull, 90462569716ull}}, {{4803876542904194917ull, 17066541466244583478ull, 5654948073510942161ull, 180925139433ull}}, {{8339472938064659630ull, 18170703552216557988ull, 12199036058927919401ull, 36185027886ull}}, {{16678945876129319260ull, 17894663030723564360ull, 5951328044146287187ull, 72370055773ull}}, {{14911147678549086904ull, 17342581987737577105ull, 11902656088292574375ull, 144740111546ull}}, {{11375551283388622191ull, 16238419901765602595ull, 5358568102875597135ull, 289480223093ull}}, {{13343156700903455408ull, 14315730424578851488ull, 12139760064800850396ull, 57896044618ull}}, {{8239569328097359200ull, 10184716775448151361ull, 5832776055892149177ull, 115792089237ull}}, {{16479138656194718399ull, 1922689477186751106ull, 11665552111784298355ull, 231584178474ull}}, {{3295827731238943680ull, 15141933154404991514ull, 17090505681324500963ull, 46316835694ull}}, {{6591655462477887360ull, 11837122235100431412ull, 15734267288939450311ull, 92633671389ull}}, {{13183310924955774719ull, 5227500396491311208ull, 13021790504169349007ull, 185267342779ull}}, {{17394057443958796237ull, 4734848894040172564ull, 17361753359801511094ull, 37053468555ull}}, {{16341370814208040858ull, 9469697788080345129ull, 16276762645893470572ull, 74106937111ull}}, {{14235997554706530099ull, 492651502451138643ull, 14106781218077389529ull, 148213874223ull}}, {{10025251035703508581ull, 985303004902277287ull, 9766818362445227442ull, 296427748447ull}}, {{5694399021882612040ull, 14954455859948096750ull, 9332061301972866134ull, 59285549689ull}}, {{11388798043765224079ull, 11462167646186641884ull, 217378530236180653ull, 118571099379ull}}, {{4330852013820896542ull, 4477591218663732153ull, 434757060472361307ull, 237142198758ull}}, {{11934216846989910278ull, 895518243732746430ull, 11154997856320203231ull, 47428439751ull}}, {{5421689620270268940ull, 1791036487465492861ull, 3863251638930854846ull, 94856879503ull}}, {{10843379240540537880ull, 3582072974930985722ull, 7726503277861709692ull, 189713759006ull}}, {{2168675848108107576ull, 11784461039211928114ull, 5234649470314252261ull, 37942751801ull}}, {{4337351696216215152ull, 5122178004714304612ull, 10469298940628504523ull, 75885503602ull}}, {{8674703392432430304ull, 10244356009428609224ull, 2491853807547457430ull, 151771007205ull}}, {{17349406784864860608ull, 2041967945147666832ull, 4983707615094914861ull, 303542014410ull}}, {{14537927801198703092ull, 4097742403771443689ull, 996741523018982972ull, 60708402882ull}}, {{10629111528687854567ull, 8195484807542887379ull, 1993483046037965944ull, 121416805764ull}}, {{2811478983666157517ull, 16390969615085774759ull, 3986966092075931888ull, 242833611528ull}}, {{562295796733231504ull, 6967542737759065275ull, 11865439662640917347ull, 48566722305ull}}, {{1124591593466463007ull, 13935085475518130550ull, 5284135251572283078ull, 97133444611ull}}, {{2249183186932926013ull, 9423426877326709484ull, 10568270503144566157ull, 194266889222ull}}, {{11517883081612316173ull, 16642080634432983189ull, 9492351730112733877ull, 38853377844ull}}, {{4589022089515080729ull, 14837417195156414763ull, 537959386515916139ull, 77706755689ull}}, {{9178044179030161457ull, 11228090316603277910ull, 1075918773031832279ull, 155413511378ull}}, {{18356088358060322914ull, 4009436559497004204ull, 2151837546063664559ull, 310827022756ull}}, {{18428612930579705876ull, 801887311899400840ull, 4119716323954643235ull, 62165404551ull}}, {{18410481787449860135ull, 1603774623798801681ull, 8239432647909286470ull, 124330809102ull}}, {{18374219501190168654ull, 3207549247597603363ull, 16478865295818572940ull, 248661618204ull}}, {{11053541529721854378ull, 15398905108487161965ull, 18053168318131355880ull, 49732323640ull}}, {{3660338985734157139ull, 12351066143264772315ull, 17659592562553160145ull, 99464647281ull}}, {{7320677971468314277ull, 6255388212819993014ull, 16872441051396768675ull, 198929294563ull}}, {{8842833223777483502ull, 12319124086789729572ull, 14442534654505084704ull, 39785858912ull}}, {{17685666447554967004ull, 6191504099869907528ull, 10438325235300617793ull, 79571717825ull}}, {{16924588821400382391ull, 12383008199739815057ull, 2429906396891683970ull, 159143435651ull}}, {{15402433569091213166ull, 6319272325770078499ull, 4859812793783367941ull, 318286871302ull}}, {{10459184343302063280ull, 12331900909379746669ull, 8350660188240494234ull, 63657374260ull}}, {{2471624612894574944ull, 6217057745049941723ull, 16701320376480988469ull, 127314748520ull}}, {{4943249225789149887ull, 12434115490099883446ull, 14955896679252425322ull, 254629497041ull}}, {{15746045104125471271ull, 13554869542245707658ull, 6680528150592395387ull, 50925899408ull}}, {{13045346134541390925ull, 8662995010781863701ull, 13361056301184790775ull, 101851798816ull}}, {{7643948195373230233ull, 17325990021563727403ull, 8275368528660029934ull, 203703597633ull}}, {{1528789639074646047ull, 10843895633796566127ull, 12723120149957736956ull, 40740719526ull}}, {{3057579278149292093ull, 3241047193883580638ull, 6999496226205922297ull, 81481439053ull}}, {{6115158556298584186ull, 6482094387767161276ull, 13998992452411844594ull, 162962878106ull}}, {{12230317112597168372ull, 12964188775534322552ull, 9551240831114137572ull, 325925756213ull}}, {{9824761052003254321ull, 2592837755106864510ull, 12978294610448558484ull, 65185151242ull}}, {{1202778030296957026ull, 5185675510213729021ull, 7509845147187565352ull, 130370302485ull}}, {{2405556060593914051ull, 10371351020427458042ull, 15019690294375130704ull, 260740604970ull}}, {{4170460026860693134ull, 16831665463053132901ull, 3003938058875026140ull, 52148120994ull}}, {{8340920053721386267ull, 15216586852396714186ull, 6007876117750052281ull, 104296241988ull}}, {{16681840107442772534ull, 11986429631083876756ull, 12015752235500104563ull, 208592483976ull}}, {{3336368021488554507ull, 17154681185184416644ull, 6092499261841931235ull, 41718496795ull}}, {{6672736042977109014ull, 15862618296659281672ull, 12184998523683862471ull, 83436993590ull}}, {{13345472085954218027ull, 13278492519609011728ull, 5923252973658173327ull, 166873987181ull}}, {{6358443231932753929ull, 13723744948147533315ull, 4873999409473544988ull, 33374797436ull}}, {{12716886463865507858ull, 9000745822585515014ull, 9747998818947089977ull, 66749594872ull}}, {{6987028854021464099ull, 18001491645171030029ull, 1049253564184628338ull, 133499189745ull}}, {{13974057708042928197ull, 17556239216632508442ull, 2098507128369256677ull, 266998379490ull}}, {{17552206800576226933ull, 10889945472810322334ull, 419701425673851335ull, 53399675898ull}}, {{16657669527442902249ull, 3333146871911093053ull, 839402851347702671ull, 106799351796ull}}, {{14868594981176252881ull, 6666293743822186107ull, 1678805702695405342ull, 213598703592ull}}, {{6663067810977160900ull, 16090654007732078514ull, 7714458770022901714ull, 42719740718ull}}, {{13326135621954321799ull, 13734563941754605412ull, 15428917540045803429ull, 85439481436ull}}, {{8205527170199091982ull, 9022383809799659209ull, 12411091006382055243ull, 170878962873ull}}, {{1641105434039818397ull, 5493825576701842165ull, 13550264645502142018ull, 34175792574ull}}, {{3282210868079636793ull, 10987651153403684330ull, 8653785217294732420ull, 68351585149ull}}, {{6564421736159273585ull, 3528558233097817044ull, 17307570434589464841ull, 136703170298ull}}, {{13128843472318547170ull, 7057116466195634088ull, 16168396795469378066ull, 273406340597ull}}, {{6315117509205619758ull, 12479469737464857787ull, 10612376988577696259ull, 54681268119ull}}, {{12630235018411239515ull, 6512195401220163958ull, 2778009903445840903ull, 109362536239ull}}, {{6813725963112927413ull, 13024390802440327917ull, 5556019806891681806ull, 218725072478ull}}, {{5052094007364495806ull, 17362273419455706876ull, 12179250405604067330ull, 43745014495ull}}, {{10104188014728991612ull, 16277802765201862136ull, 5911756737498583045ull, 87490028991ull}}, {{1761631955748431607ull, 14108861456694172657ull, 11823513474997166091ull, 174980057982ull}}, {{352326391149686322ull, 13889818735564565501ull, 9743400324483253864ull, 34996011596ull}}, {{704652782299372643ull, 9332893397419579386ull, 1040056575256956113ull, 69992023193ull}}, {{1409305564598745286ull, 219042721129607156ull, 2080113150513912227ull, 139984046386ull}}, {{2818611129197490572ull, 438085442259214312ull, 4160226301027824454ull, 279968092772ull}}, {{11631768670065229084ull, 3776965903193753185ull, 8210742889689385537ull, 55993618554ull}}, {{4816793266420906552ull, 7553931806387506371ull, 16421485779378771074ull, 111987237108ull}} }; static const UINT128 coefflimits_bid32[] = { {{10000000ull, 0ull}}, {{2000000ull, 0ull}}, {{400000ull, 0ull}}, {{80000ull, 0ull}}, {{16000ull, 0ull}}, {{3200ull, 0ull}}, {{640ull, 0ull}}, {{128ull, 0ull}}, {{25ull, 0ull}}, {{5ull, 0ull}}, {{1ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}} }; // ********************************************************************** static const UINT128 breakpoints_bid64[] = { {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{632147898099709952ull, 73239311802481213ull}}, {{9539445985904630784ull, 36619655901240606ull}}, {{4769722992952315392ull, 18309827950620303ull}}, {{5401870891052025344ull, 91549139753101516ull}}, {{2700935445526012672ull, 45774569876550758ull}}, {{1350467722763006208ull, 22887284938275379ull}}, {{6752338613815031552ull, 114436424691376895ull}}, {{12599541343762291456ull, 57218212345688447ull}}, {{15523142708735921408ull, 28609106172844223ull}}, {{3828737248841401600ull, 143045530864221119ull}}, {{11137740661275476480ull, 71522765432110559ull}}, {{14792242367492514048ull, 35761382716055279ull}}, {{16619493220601032704ull, 17880691358027639ull}}, {{9310489808166957824ull, 89403456790138199ull}}, {{13878616940938254592ull, 44701728395069099ull}}, {{16162680507323902976ull, 22350864197534549ull}}, {{7026426241781309440ull, 111754320987672749ull}}, {{12736585157745430528ull, 55877160493836374ull}}, {{6368292578872715264ull, 27938580246918187ull}}, {{13394718820654024704ull, 139692901234590936ull}}, {{6697359410327012352ull, 69846450617295468ull}}, {{3348679705163506176ull, 34923225308647734ull}}, {{1674339852581753088ull, 17461612654323867ull}}, {{8371699262908765440ull, 87308063271619335ull}}, {{13409221668309158400ull, 43654031635809667ull}}, {{15927982871009355008ull, 21827015817904833ull}}, {{5852938060208568832ull, 109135079089524169ull}}, {{12149841066959060224ull, 54567539544762084ull}}, {{6074920533479529984ull, 27283769772381042ull}}, {{11927858593688099072ull, 136418848861905211ull}}, {{15187301333698825216ull, 68209424430952605ull}}, {{16817022703704188416ull, 34104712215476302ull}}, {{8408511351852094208ull, 17052356107738151ull}}, {{5149068611841367808ull, 85261780538690757ull}}, {{11797906342775459584ull, 42630890269345378ull}}, {{5898953171387729664ull, 21315445134672689ull}}, {{11048021783229097728ull, 106577225673363446ull}}, {{5524010891614548736ull, 53288612836681723ull}}, {{11985377482662050048ull, 26644306418340861ull}}, {{4586655192181596416ull, 133221532091704308ull}}, {{2293327596090798080ull, 66610766045852154ull}}, {{1146663798045399040ull, 33305383022926077ull}}, {{9796703935877475328ull, 16652691511463038ull}}, {{12090031531968273664ull, 83263457557315192ull}}, {{6045015765984136704ull, 41631728778657596ull}}, {{3022507882992068352ull, 20815864389328798ull}}, {{15112539414960342016ull, 104079321946643990ull}}, {{7556269707480171008ull, 52039660973321995ull}}, {{13001506890594861312ull, 26019830486660997ull}}, {{9667302231845651712ull, 130099152433304988ull}}, {{4833651115922825728ull, 65049576216652494ull}}, {{2416825557961412864ull, 32524788108326247ull}}, {{10431784815835482112ull, 16262394054163123ull}}, {{15265435931758308096ull, 81311970270815617ull}}, {{16856090002733929728ull, 40655985135407808ull}}, {{8428045001366964736ull, 20327992567703904ull}}, {{5246736859415721472ull, 101639962838519522ull}}, {{2623368429707860736ull, 50819981419259761ull}}, {{10535056251708706048ull, 25409990709629880ull}}, {{15781793111124427520ull, 127049953548149402ull}}, {{7890896555562213632ull, 63524976774074701ull}}, {{13168820314635882496ull, 31762488387037350ull}}, {{6584410157317941248ull, 15881244193518675ull}}, {{14475306712880155136ull, 79406220967593376ull}}, {{7237653356440077568ull, 39703110483796688ull}}, {{3618826678220038656ull, 19851555241898344ull}}, {{18094133391100194048ull, 99257776209491720ull}}, {{9047066695550096896ull, 49628888104745860ull}}, {{4523533347775048448ull, 24814444052372930ull}}, {{4170922665165690880ull, 124072220261864651ull}}, {{11308833369437621248ull, 62036110130932325ull}}, {{14877788721573586432ull, 31018055065466162ull}}, {{7438894360786793216ull, 15509027532733081ull}}, {{300983656514862848ull, 77545137663665407ull}}, {{9373863865112207104ull, 38772568831832703ull}}, {{13910303969410879232ull, 19386284415916351ull}}, {{14211287625925742080ull, 96931422079581758ull}}, {{7105643812962871040ull, 48465711039790879ull}}, {{12776193943336211200ull, 24232855519895439ull}}, {{8540737495552401920ull, 121164277599477198ull}}, {{4270368747776200960ull, 60582138799738599ull}}, {{11358556410742876160ull, 30291069399869299ull}}, {{14902650242226213888ull, 15145534699934649ull}}, {{726274916292863232ull, 75727673499673249ull}}, {{9586509495001207296ull, 37863836749836624ull}}, {{4793254747500603648ull, 18931918374918312ull}}, {{5519529663793467136ull, 94659591874591561ull}}, {{11983136868751509248ull, 47329795937295780ull}}, {{5991568434375754496ull, 23664897968647890ull}}, {{11511098098169221632ull, 118324489843239451ull}}, {{14978921085939386624ull, 59162244921619725ull}}, {{16712832579824468992ull, 29581122460809862ull}}, {{8356416289912234496ull, 14790561230404931ull}}, {{4888593302142069504ull, 73952806152024657ull}}, {{11667668687925810432ull, 36976403076012328ull}}, {{5833834343962905088ull, 18488201538006164ull}}, {{10722427646104974848ull, 92441007690030821ull}}, {{14584585859907263232ull, 46220503845015410ull}}, {{7292292929953631488ull, 23110251922507705ull}}, {{18014720576058606592ull, 115551259612538526ull}}, {{9007360288029303296ull, 57775629806269263ull}}, {{13727052180869427456ull, 28887814903134631ull}}, {{16086898127289489408ull, 14443907451567315ull}}, {{6647514341609241088ull, 72219537257836579ull}}, {{12547129207659396352ull, 36109768628918289ull}}, {{15496936640684473856ull, 18054884314459144ull}}, {{3697706908584163584ull, 90274421572295724ull}}, {{1848853454292081664ull, 45137210786147862ull}}, {{924426727146040832ull, 22568605393073931ull}}, {{4622133635730204416ull, 112843026965369655ull}}, {{11534438854719877888ull, 56421513482684827ull}}, {{14990591464214714624ull, 28210756741342413ull}}, {{1165981026235367680ull, 141053783706712069ull}}, {{9806362549972459520ull, 70526891853356034ull}}, {{4903181274986229760ull, 35263445926678017ull}}, {{11674962674347890688ull, 17631722963339008ull}}, {{3034581150610798848ull, 88158614816695043ull}}, {{10740662612160175104ull, 44079307408347521ull}}, {{14593703342934863360ull, 22039653704173760ull}}, {{17628284493545662208ull, 110198268520868803ull}}, {{18037514283627606784ull, 55099134260434401ull}}, {{18242129178668579072ull, 27549567130217200ull}}, {{17423669598504689920ull, 137747835651086004ull}}, {{8711834799252344832ull, 68873917825543002ull}}, {{4355917399626172416ull, 34436958912771501ull}}, {{11401330736667862016ull, 17218479456385750ull}}, {{1666421462210655232ull, 86092397281928753ull}}, {{10056582767960103424ull, 43046198640964376ull}}, {{5028291383980051712ull, 21523099320482188ull}}, {{6694712846190706944ull, 107615496602410941ull}}, {{12570728459950129152ull, 53807748301205470ull}}, {{6285364229975064576ull, 26903874150602735ull}}, {{12980077076165771776ull, 134519370753013676ull}}, {{6490038538082885888ull, 67259685376506838ull}}, {{3245019269041442816ull, 33629842688253419ull}}, {{10845881671375497216ull, 16814921344126709ull}}, {{17335920209458383104ull, 84074606720633547ull}}, {{17891332141583967232ull, 42037303360316773ull}}, {{18169038107646759424ull, 21018651680158386ull}}, {{17058214243395590912ull, 105093258400791934ull}}, {{8529107121697795328ull, 52546629200395967ull}}, {{13487925597703673344ull, 26273314600197983ull}}, {{12099395767389712896ull, 131366573000989918ull}}, {{6049697883694856448ull, 65683286500494959ull}}, {{12248220978702203904ull, 32841643250247479ull}}, {{15347482526205877760ull, 16420821625123739ull}}, {{2950436336191182592ull, 82104108125618699ull}}, {{10698590204950366976ull, 41052054062809349ull}}, {{14572667139329959168ull, 20526027031404674ull}}, {{17523103475521142016ull, 102630135157023373ull}}, {{17984923774615346688ull, 51315067578511686ull}}, {{8992461887307673344ull, 25657533789255843ull}}, {{8068821289119264000ull, 128287668946279217ull}}, {{13257782681414407680ull, 64143834473139608ull}}, {{6628891340707203840ull, 32071917236569804ull}}, {{3314445670353601792ull, 16035958618284902ull}}, {{16572228351768009728ull, 80179793091424510ull}}, {{8286114175884004864ull, 40089896545712255ull}}, {{13366429124796778240ull, 20044948272856127ull}}, {{11491913402855236352ull, 100224741364280638ull}}, {{5745956701427618048ull, 50112370682140319ull}}, {{12096350387568584704ull, 25056185341070159ull}}, {{5141519716714269696ull, 125280926705350798ull}}, {{2570759858357134848ull, 62640463352675399ull}}, {{10508751966033343232ull, 31320231676337699ull}}, {{14477748019871447296ull, 15660115838168849ull}}, {{17048507878228582144ull, 78300579190844248ull}}, {{8524253939114290944ull, 39150289595422124ull}}, {{4262126969557145344ull, 19575144797711062ull}}, {{2863890774076176128ull, 97875723988555311ull}}, {{10655317423892863744ull, 48937861994277655ull}}, {{14551030748801207552ull, 24468930997138827ull}}, {{17414921522877383936ull, 122344654985694138ull}}, {{8707460761438691840ull, 61172327492847069ull}}, {{13577102417574121728ull, 30586163746423534ull}}, {{6788551208787060736ull, 15293081873211767ull}}, {{15496011970225752832ull, 76465409366058836ull}}, {{7748005985112876288ull, 38232704683029418ull}}, {{3874002992556438016ull, 19116352341514709ull}}, {{923270889072639488ull, 95581761707573546ull}}, {{461635444536319744ull, 47790880853786773ull}}, {{9454189759122935552ull, 23895440426893386ull}}, {{10377460648195575040ull, 119477202134466932ull}}, {{5188730324097787392ull, 59738601067233466ull}}, {{2594365162048893696ull, 29869300533616733ull}}, {{10520554617879222528ull, 14934650266808366ull}}, {{15709284941977010176ull, 74673251334041832ull}}, {{7854642470988505088ull, 37336625667020916ull}}, {{3927321235494252544ull, 18668312833510458ull}}, {{1189862103761711104ull, 93341564167552291ull}}, {{9818303088735631360ull, 46670782083776145ull}}, {{14132523581222591488ull, 23335391041888072ull}}, {{15322385684984302592ull, 116676955209440363ull}}, {{16884564879346927104ull, 58338477604720181ull}}, {{17665654476528239360ull, 29169238802360090ull}}, {{8832827238264119552ull, 14584619401180045ull}}, {{7270648043901495296ull, 72923097005900227ull}}, {{12858696058805523456ull, 36461548502950113ull}}, {{15652720066257537536ull, 18230774251475056ull}}, {{4476624036449481216ull, 91153871257375284ull}}, {{2238312018224740608ull, 45576935628687642ull}}, {{1119156009112370176ull, 22788467814343821ull}}, {{5595780045561851392ull, 113942339071719105ull}}, {{12021262059635701504ull, 56971169535859552ull}}, {{6010631029817850624ull, 28485584767929776ull}}, {{11606411075379702272ull, 142427923839648881ull}}, {{15026577574544626944ull, 71213961919824440ull}}, {{7513288787272313344ull, 35606980959912220ull}}, {{3756644393636156672ull, 17803490479956110ull}}, {{336477894471232000ull, 89017452399780551ull}}, {{9391610984090391808ull, 44508726199890275ull}}, {{13919177528899971584ull, 22254363099945137ull}}, {{14255655423371203840ull, 111271815499725688ull}}, {{7127827711685601792ull, 55635907749862844ull}}, {{3563913855842800896ull, 27817953874931422ull}}, {{17819569279214004736ull, 139089769374657110ull}}, {{8909784639607002368ull, 69544884687328555ull}}, {{13678264356658276864ull, 34772442343664277ull}}, {{16062504215183914240ull, 17386221171832138ull}}, {{6525544781081364992ull, 86931105859160694ull}}, {{3262772390540682496ull, 43465552929580347ull}}, {{10854758232125116928ull, 21732776464790173ull}}, {{17380303013206482176ull, 108663882323950867ull}}, {{17913523543458016768ull, 54331941161975433ull}}, {{18180133808583784192ull, 27165970580987716ull}}, {{17113692748080714752ull, 135829852904938584ull}}, {{8556846374040357376ull, 67914926452469292ull}}, {{4278423187020178688ull, 33957463226234646ull}}, {{2139211593510089216ull, 16978731613117323ull}}, {{10696057967550446592ull, 84893658065586615ull}}, {{14571401020629999104ull, 42446829032793307ull}}, {{16509072547169775360ull, 21223414516396653ull}}, {{8758386441010670336ull, 106117072581983269ull}}, {{13602565257360110848ull, 53058536290991634ull}}, {{6801282628680055296ull, 26529268145495817ull}}, {{15559669069690725888ull, 132646340727479086ull}}, {{7779834534845362944ull, 66323170363739543ull}}, {{13113289304277457152ull, 33161585181869771ull}}, {{15780016688993504256ull, 16580792590934885ull}}, {{5113107150129315840ull, 82903962954674429ull}}, {{11779925611919433728ull, 41451981477337214ull}}, {{5889962805959716864ull, 20725990738668607ull}}, {{11003069956089032704ull, 103629953693343036ull}}, {{5501534978044516352ull, 51814976846671518ull}}, {{2750767489022258176ull, 25907488423335759ull}}, {{13753837445111290880ull, 129537442116678795ull}}, {{16100290759410421248ull, 64768721058339397ull}}, {{17273517416559986432ull, 32384360529169698ull}}, {{8636758708279993088ull, 16192180264584849ull}}, {{6290305393980862720ull, 80960901322924247ull}}, {{12368524733845207040ull, 40480450661462123ull}}, {{15407634403777379328ull, 20240225330731061ull}}, {{3251195724048690688ull, 101201126653655309ull}}, {{10848969898879121152ull, 50600563326827654ull}}, {{5424484949439560448ull, 25300281663413827ull}}, {{8675680673488251136ull, 126501408317069136ull}}, {{4337840336744125440ull, 63250704158534568ull}}, {{2168920168372062720ull, 31625352079267284ull}}, {{1084460084186031360ull, 15812676039633642ull}}, {{5422300420930157056ull, 79063380198168210ull}}, {{2711150210465078528ull, 39531690099084105ull}}, {{10578947142087314944ull, 19765845049542052ull}}, {{16001247563017472000ull, 98829225247710262ull}}, {{8000623781508736000ull, 49414612623855131ull}}, {{13223683927609143808ull, 24707306311927565ull}}, {{10778187416917064192ull, 123536531559637828ull}}, {{5389093708458532096ull, 61768265779818914ull}}, {{2694546854229265920ull, 30884132889909457ull}}, {{10570645463969408768ull, 15442066444954728ull}}, {{15959739172427940864ull, 77210332224773642ull}}, {{7979869586213970432ull, 38605166112386821ull}}, {{13213306829961761024ull, 19302583056193410ull}}, {{10726301928680150272ull, 96512915280967053ull}}, {{14586523001194850816ull, 48256457640483526ull}}, {{7293261500597425408ull, 24128228820241763ull}}, {{18019563429277575936ull, 120641144101208816ull}}, {{9009781714638787840ull, 60320572050604408ull}}, {{4504890857319393792ull, 30160286025302204ull}}, {{2252445428659696896ull, 15080143012651102ull}}, {{11262227143298484992ull, 75400715063255510ull}}, {{5631113571649242368ull, 37700357531627755ull}}, {{12038928822679396864ull, 18850178765813877ull}}, {{4854411892268330240ull, 94250893829069388ull}}, {{2427205946134164992ull, 47125446914534694ull}}, {{1213602973067082496ull, 23562723457267347ull}}, {{6068014865335412992ull, 117813617286336735ull}}, {{12257379469522482176ull, 58906808643168367ull}}, {{15352061771616016896ull, 29453404321584183ull}}, {{16899402922662784256ull, 14726702160792091ull}}, {{10710038318475714816ull, 73633510803960459ull}}, {{14578391196092633088ull, 36816755401980229ull}}, {{16512567634901092352ull, 18408377700990114ull}}, {{8775861879667255808ull, 92041888504950574ull}}, {{4387930939833627904ull, 46020944252475287ull}}, {{11417337506771589632ull, 23010472126237643ull}}, {{1746455312729293824ull, 115052360631188218ull}}, {{873227656364646912ull, 57526180315594109ull}}, {{9659985865037099264ull, 28763090157797054ull}}, {{11406441177766393344ull, 143815450788985272ull}}, {{5703220588883196672ull, 71907725394492636ull}}, {{2851610294441598208ull, 35953862697246318ull}}, {{1425805147220798976ull, 17976931348623159ull}}, {{7129025736103995648ull, 89884656743115795ull}}, {{12787884904906773504ull, 44942328371557897ull}}, {{15617314489308162560ull, 22471164185778948ull}}, {{4299596151702606848ull, 112355820928894744ull}}, {{2149798075851303424ull, 56177910464447372ull}}, {{1074899037925651712ull, 28088955232223686ull}}, {{5374495189628258560ull, 140444776161118430ull}}, {{2687247594814129152ull, 70222388080559215ull}}, {{10566995834261840384ull, 35111194040279607ull}}, {{14506869953985696000ull, 17555597020139803ull}}, {{17194117548799825152ull, 87777985100699018ull}}, {{8597058774399912448ull, 43888992550349509ull}}, {{13521901424054732032ull, 21944496275174754ull}}, {{12269274899145005824ull, 109722481375873773ull}}, {{15358009486427278592ull, 54861240687936886ull}}, {{7679004743213639168ull, 27430620343968443ull}}, {{1501535568649093632ull, 137153101719842217ull}}, {{9974139821179322624ull, 68576550859921108ull}}, {{4987069910589661184ull, 34288275429960554ull}}, {{2493534955294830592ull, 17144137714980277ull}}, {{12467674776474153216ull, 85720688574901385ull}}, {{15457209425091852288ull, 42860344287450692ull}}, {{7728604712545926144ull, 21430172143725346ull}}, {{1749535415310527744ull, 107150860718626732ull}}, {{874767707655263744ull, 53575430359313366ull}}, {{437383853827631872ull, 26787715179656683ull}}, {{2186919269138159872ull, 133938575898283415ull}}, {{10316831671423855616ull, 66969287949141707ull}}, {{14381787872566703616ull, 33484643974570853ull}}, {{16414265973138127616ull, 16742321987285426ull}}, {{8284353570852431616ull, 83711609936427134ull}}, {{4142176785426215680ull, 41855804968213567ull}}, {{11294460429567883520ull, 20927902484106783ull}}, {{1132069926710763776ull, 104639512420533918ull}}, {{566034963355381760ull, 52319756210266959ull}}, {{9506389518532466688ull, 26159878105133479ull}}, {{10638459445243230464ull, 130799390525667397ull}}, {{14542601759476390912ull, 65399695262833698ull}}, {{7271300879738195456ull, 32699847631416849ull}}, {{12859022476723873536ull, 16349923815708424ull}}, {{8954880162490713088ull, 81749619078542123ull}}, {{13700812118100132352ull, 40874809539271061ull}}, {{16073778095904841984ull, 20437404769635530ull}}, {{6581914184686003456ull, 102187023848177654ull}}, {{3290957092343001600ull, 51093511924088827ull}}, {{10868850583026276608ull, 25546755962044413ull}}, {{17450764767712280064ull, 127733779810222067ull}}, {{17948754420710915840ull, 63866889905111033ull}}, {{18197749247210233600ull, 31933444952555516ull}}, {{9098874623605116672ull, 15966722476277758ull}}, {{8600884970606481152ull, 79833612381388792ull}}, {{4300442485303240448ull, 39916806190694396ull}}, {{2150221242651620096ull, 19958403095347198ull}}, {{10751106213258101248ull, 99792015476735990ull}}, {{5375553106629050624ull, 49896007738367995ull}}, {{11911148590169300992ull, 24948003869183997ull}}, {{4215510729717850880ull, 124740019345919988ull}}, {{2107755364858925312ull, 62370009672959994ull}}, {{1053877682429462528ull, 31185004836479997ull}}, {{9750310878069507072ull, 15592502418239998ull}}, {{11858066242928432640ull, 77962512091199992ull}}, {{5929033121464216320ull, 38981256045599996ull}}, {{2964516560732108032ull, 19490628022799998ull}}, {{14822582803660540672ull, 97453140113999990ull}}, {{7411291401830270208ull, 48726570056999995ull}}, {{12929017737769910784ull, 24363285028499997ull}}, {{9304856467720900096ull, 121816425142499988ull}}, {{4652428233860450048ull, 60908212571249994ull}}, {{2326214116930224896ull, 30454106285624997ull}}, {{10386479095319888128ull, 15227053142812498ull}}, {{15038907329180338432ull, 76135265714062492ull}}, {{7519453664590169088ull, 38067632857031246ull}}, {{3759726832295084544ull, 19033816428515623ull}}, {{351890087765871360ull, 95169082142578116ull}}, {{175945043882935552ull, 47584541071289058ull}}, {{87972521941467648ull, 23792270535644529ull}}, {{439862609707339264ull, 118961352678222645ull}}, {{9443303341708445440ull, 59480676339111322ull}}, {{4721651670854222592ull, 29740338169555661ull}}, {{11584197872281886976ull, 14870169084777830ull}}, {{2580757140280781056ull, 74350845423889153ull}}, {{10513750606995166208ull, 37175422711944576ull}}, {{5256875303497583104ull, 18587711355972288ull}}, {{7837632443778364160ull, 92938556779861441ull}}, {{13142188258743957760ull, 46469278389930720ull}}, {{6571094129371978752ull, 23234639194965360ull}}, {{14408726573150343168ull, 116173195974826801ull}}, {{16427735323429947392ull, 58086597987413400ull}}, {{8213867661714973696ull, 29043298993706700ull}}, {{4106933830857486848ull, 14521649496853350ull}}, {{2087925080577882624ull, 72608247484266751ull}}, {{10267334577143717120ull, 36304123742133375ull}}, {{14357039325426634240ull, 18152061871066687ull}}, {{16444964406004516864ull, 90760309355333438ull}}, {{8222482203002258432ull, 45380154677666719ull}}, {{13334613138355905024ull, 22690077338833359ull}}, {{11332833470650870272ull, 113450386694166798ull}}, {{5666416735325435136ull, 56725193347083399ull}}, {{12056580404517493248ull, 28362596673541699ull}}, {{4942669801458812160ull, 141812983367708498ull}}, {{2471334900729405952ull, 70906491683854249ull}}, {{10459039487219478784ull, 35453245841927124ull}}, {{5229519743609739264ull, 17726622920963562ull}}, {{7700854644339145472ull, 88633114604817811ull}}, {{13073799359024348416ull, 44316557302408905ull}}, {{15760271716366949888ull, 22158278651204452ull}}, {{5014382286996544000ull, 110791393256022264ull}}, {{2507191143498272000ull, 55395696628011132ull}}, {{1253595571749135872ull, 27697848314005566ull}}, {{6267977858745679872ull, 138489241570027830ull}}, {{3133988929372839936ull, 69244620785013915ull}}, {{10790366501541195776ull, 34622310392506957ull}}, {{14618555287625373696ull, 17311155196253478ull}}, {{17752544216998213632ull, 86555775981267393ull}}, {{18099644145353882624ull, 43277887990633696ull}}, {{9049822072676941312ull, 21638943995316848ull}}, {{8355622215965603328ull, 108194719976584242ull}}, {{4177811107982801664ull, 54097359988292121ull}}, {{11312277590846176512ull, 27048679994146060ull}}, {{1221155733102228480ull, 135243399970730303ull}}, {{9833949903405890048ull, 67621699985365151ull}}, {{14140346988557720832ull, 33810849992682575ull}}, {{16293545531133636096ull, 16905424996341287ull}}, {{7680751360829974528ull, 84527124981706439ull}}, {{13063747717269763072ull, 42263562490853219ull}}, {{15755245895489657344ull, 21131781245426609ull}}, {{4989253182610080256ull, 105658906227133049ull}}, {{11717998628159815936ull, 52829453113566524ull}}, {{5858999314079907840ull, 26414726556783262ull}}, {{10848252496689988352ull, 132073632783916311ull}}, {{14647498285199769856ull, 66036816391958155ull}}, {{16547121179454660608ull, 33018408195979077ull}}, {{17496932626582106112ull, 16509204097989538ull}}, {{13697686838072324608ull, 82546020489947694ull}}, {{6848843419036162304ull, 41273010244973847ull}}, {{12647793746372856832ull, 20636505122486923ull}}, {{7898736510735629824ull, 103182525612434618ull}}, {{3949368255367814912ull, 51591262806217309ull}}, {{11198056164538683136ull, 25795631403108654ull}}, {{650048601564761600ull, 128978157015543273ull}}, {{9548396337637156608ull, 64489078507771636ull}}, {{4774198168818578176ull, 32244539253885818ull}}, {{2387099084409288960ull, 16122269626942909ull}}, {{11935495422046445824ull, 80611348134714545ull}}, {{15191119747877998592ull, 40305674067357272ull}}, {{7595559873938999296ull, 20152837033678636ull}}, {{1084311222275893504ull, 100764185168393182ull}}, {{542155611137946624ull, 50382092584196591ull}}, {{9494449842423749120ull, 25191046292098295ull}}, {{10578761064699642624ull, 125955231460491477ull}}, {{14512752569204596992ull, 62977615730245738ull}}, {{7256376284602298368ull, 31488807865122869ull}}, {{12851560179155924992ull, 15744403932561434ull}}, {{8917568674650970624ull, 78722019662807173ull}}, {{13682156374180261120ull, 39361009831403586ull}}, {{6841078187090130432ull, 19680504915701793ull}}, {{15758646861741101056ull, 98402524578508966ull}}, {{7879323430870550528ull, 49201262289254483ull}}, {{13163033752290051072ull, 24600631144627241ull}}, {{10474936540321600768ull, 123003155723136208ull}}, {{5237468270160800256ull, 61501577861568104ull}}, {{2618734135080400128ull, 30750788930784052ull}}, {{1309367067540199936ull, 15375394465392026ull}}, {{6546835337701000448ull, 76876972326960130ull}}, {{3273417668850500096ull, 38438486163480065ull}}, {{10860080871280025856ull, 19219243081740032ull}}, {{17406916208981026304ull, 96096215408700162ull}}, {{8703458104490513152ull, 48048107704350081ull}}, {{13575101089100032256ull, 24024053852175040ull}}, {{12535273224371507200ull, 120120269260875203ull}}, {{15491008649040529408ull, 60060134630437601ull}}, {{16968876361375040512ull, 30030067315218800ull}}, {{8484438180687520256ull, 15015033657609400ull}}, {{5528702756018498048ull, 75075168288047002ull}}, {{2764351378009249024ull, 37537584144023501ull}}, {{10605547725859400192ull, 18768792072011750ull}}, {{16134250481877898240ull, 93843960360058752ull}}, {{8067125240938949120ull, 46921980180029376ull}}, {{4033562620469474560ull, 23460990090014688ull}}, {{1721069028637821184ull, 117304950450073441ull}}, {{10083906551173686272ull, 58652475225036720ull}}, {{5041953275586843136ull, 29326237612518360ull}}, {{2520976637793421568ull, 14663118806259180ull}}, {{12604883188967108096ull, 73315594031295900ull}}, {{6302441594483554048ull, 36657797015647950ull}}, {{3151220797241776896ull, 18328898507823975ull}}, {{15756103986208884992ull, 91644492539119875ull}}, {{17101424029959218176ull, 45822246269559937ull}}, {{17774084051834384896ull, 22911123134779968ull}}, {{15083443964333718272ull, 114555615673899844ull}}, {{7541721982166859008ull, 57277807836949922ull}}, {{3770860991083429376ull, 28638903918474961ull}}, {{407560881707596288ull, 143194519592374806ull}}, {{203780440853798144ull, 71597259796187403ull}}, {{9325262257281674752ull, 35798629898093701ull}}, {{13886003165495613184ull, 17899314949046850ull}}, {{14089783606349411328ull, 89496574745234253ull}}, {{16268263840029481472ull, 44748287372617126ull}}, {{8134131920014740736ull, 22374143686308563ull}}, {{3777171452654600704ull, 111870718431542817ull}}, {{11111957763182076160ull, 55935359215771408ull}}, {{5555978881591037952ull, 27967679607885704ull}}, {{9333150334245638656ull, 139838398039428521ull}}, {{13889947203977595136ull, 69919199019714260ull}}, {{6944973601988797440ull, 34959599509857130ull}}, {{3472486800994398720ull, 17479799754928565ull}}, {{17362434004971993856ull, 87398998774642825ull}}, {{17904589039340772608ull, 43699499387321412ull}}, {{8952294519670386176ull, 21849749693660706ull}}, {{7867984450932828672ull, 109248748468303532ull}}, {{3933992225466414336ull, 54624374234151766ull}}, {{1966996112733207040ull, 27312187117075883ull}}, {{9834980563666035968ull, 136560935585379415ull}}, {{14140862318687793664ull, 68280467792689707ull}}, {{16293803196198672640ull, 34140233896344853ull}}, {{17370273634954112000ull, 17070116948172426ull}}, {{13064391879932354304ull, 85350584740862134ull}}, {{6532195939966177024ull, 42675292370431067ull}}, {{12489470006837864192ull, 21337646185215533ull}}, {{7107117813060667136ull, 106688230926077668ull}}, {{3553558906530333440ull, 53344115463038834ull}}, {{1776779453265166592ull, 26672057731519417ull}}, {{8883897266325833728ull, 133360288657597085ull}}, {{13665320670017692672ull, 66680144328798542ull}}, {{6832660335008846336ull, 33340072164399271ull}}, {{12639702204359198976ull, 16670036082199635ull}}, {{7858278800667340032ull, 83350180410998178ull}}, {{3929139400333669888ull, 41675090205499089ull}}, {{11187941737021610752ull, 20837545102749544ull}}, {{599476463979399168ull, 104187725513747723ull}}, {{9523110268844475392ull, 52093862756873861ull}}, {{13984927171277013504ull, 26046931378436930ull}}, {{14584403635256412928ull, 130234656892184653ull}}, {{16515573854482982144ull, 65117328446092326ull}}, {{8257786927241490944ull, 32558664223046163ull}}, {{13352265500475521280ull, 16279332111523081ull}}, {{11421095281248951808ull, 81396660557615408ull}}, {{5710547640624475904ull, 40698330278807704ull}}, {{2855273820312237824ull, 20349165139403852ull}}, {{14276369101561189888ull, 101745825697019260ull}}, {{7138184550780594944ull, 50872912848509630ull}}, {{3569092275390297344ull, 25436456424254815ull}}, {{17845461376951487488ull, 127182282121274075ull}}, {{18146102725330519552ull, 63591141060637037ull}}, {{18296423399520035584ull, 31795570530318518ull}}, {{9148211699760017664ull, 15897785265159259ull}}, {{8847570351380985600ull, 79488926325796297ull}}, {{13647157212545268480ull, 39744463162898148ull}}, {{6823578606272634112ull, 19872231581449074ull}}, {{15671148957653619968ull, 99361157907245371ull}}, {{17058946515681585664ull, 49680578953622685ull}}, {{17752845294695568640ull, 24840289476811342ull}}, {{14977250178639637248ull, 124201447384056714ull}}, {{7488625089319818496ull, 62100723692028357ull}}, {{12967684581514684928ull, 31050361846014178ull}}, {{6483842290757342464ull, 15525180923007089ull}}, {{13972467380077160960ull, 77625904615035446ull}}, {{6986233690038580480ull, 38812952307517723ull}}, {{12716488881874065920ull, 19406476153758861ull}}, {{8242212188241675520ull, 97032380768794308ull}}, {{4121106094120837632ull, 48516190384397154ull}}, {{2060553047060418816ull, 24258095192198577ull}}, {{10302765235302094592ull, 121290475960992885ull}}, {{14374754654505822976ull, 60645237980496442ull}}, {{7187377327252911360ull, 30322618990248221ull}}, {{12817060700481231360ull, 15161309495124110ull}}, {{8745071281277502976ull, 75806547475620553ull}}, {{13595907677493527296ull, 37903273737810276ull}}, {{6797953838746763520ull, 18951636868905138ull}}, {{15543025120024266496ull, 94758184344525691ull}}, {{16994884596866908928ull, 47379092172262845ull}}, {{17720814335288230144ull, 23689546086131422ull}}, {{14817095381602945280ull, 118447730430657114ull}}, {{7408547690801472512ull, 59223865215328557ull}}, {{12927645882255512064ull, 29611932607664278ull}}, {{6463822941127756032ull, 14805966303832139ull}}, {{13872370631929228800ull, 74029831519160696ull}}, {{6936185315964614400ull, 37014915759580348ull}}, {{3468092657982307072ull, 18507457879790174ull}}, {{17340463289911535872ull, 92537289398950870ull}}, {{8670231644955767808ull, 46268644699475435ull}}, {{13558487859332659712ull, 23134322349737717ull}}, {{12452207075534644224ull, 115671611748688588ull}}, {{6226103537767322112ull, 57835805874344294ull}}, {{3113051768883661056ull, 28917902937172147ull}}, {{10779897921296606208ull, 14458951468586073ull}}, {{17006001459063928320ull, 72294757342930367ull}}, {{17726372766386739968ull, 36147378671465183ull}}, {{18086558420048145664ull, 18073689335732591ull}}, {{16645815805402522624ull, 90368446678662959ull}}, {{17546279939556037120ull, 45184223339331479ull}}, {{17996512006632794368ull, 22592111669665739ull}}, {{16195583738325765376ull, 112960558348328699ull}}, {{17321163906017658368ull, 56480279174164349ull}}, {{17883953989863604992ull, 28240139587082174ull}}, {{15632793654479818752ull, 141200697935410874ull}}, {{7816396827239909376ull, 70600348967705437ull}}, {{13131570450474730496ull, 35300174483852718ull}}, {{6565785225237365248ull, 17650087241926359ull}}, {{14382182052477274624ull, 88250436209631796ull}}, {{7191091026238637312ull, 44125218104815898ull}}, {{3595545513119318528ull, 22062609052407949ull}}, {{17977727565596593408ull, 110313045262039745ull}}, {{18212235819653072384ull, 55156522631019872ull}}, {{9106117909826536192ull, 27578261315509936ull}}, {{8637101401713577984ull, 137891306577549682ull}}, {{4318550700856788992ull, 68945653288774841ull}}, {{11382647387283170304ull, 34472826644387420ull}}, {{5691323693641585152ull, 17236413322193710ull}}, {{10009874394498374144ull, 86182066610968551ull}}, {{14228309234103962880ull, 43091033305484275ull}}, {{16337526653906757120ull, 21545516652742137ull}}, {{7900656974695579648ull, 107727583263710689ull}}, {{13173700524202565632ull, 53863791631855344ull}}, {{6586850262101282816ull, 26931895815927672ull}}, {{14487507236796862464ull, 134659479079638361ull}}, {{16467125655253207040ull, 67329739539819180ull}}, {{8233562827626603520ull, 33664869769909590ull}}, {{4116781413813301760ull, 16832434884954795ull}}, {{2137162995356957184ull, 84162174424773976ull}}, {{1068581497678478592ull, 42081087212386988ull}}, {{534290748839239168ull, 21040543606193494ull}}, {{2671453744196196608ull, 105202718030967470ull}}, {{1335726872098098176ull, 52601359015483735ull}}, {{9891235472903824896ull, 26300679507741867ull}}, {{12562689217100021504ull, 131503397538709337ull}}, {{15504716645404786432ull, 65751698769354668ull}}, {{7752358322702393088ull, 32875849384677334ull}}, {{3876179161351196416ull, 16437924692338667ull}}, {{934151733046431488ull, 82189623461693336ull}}, {{467075866523215616ull, 41094811730846668ull}}, {{233537933261607680ull, 20547405865423334ull}}, {{1167689666308039424ull, 102737029327116670ull}}, {{583844833154019584ull, 51368514663558335ull}}, {{9515294453431785472ull, 25684257331779167ull}}, {{10682984119739825152ull, 128421286658895837ull}}, {{14564864096724688384ull, 64210643329447918ull}}, {{7282432048362344192ull, 32105321664723959ull}}, {{12864588061035947776ull, 16052660832361979ull}}, {{8982708084051084544ull, 80263304161809898ull}}, {{4491354042025542144ull, 40131652080904949ull}}, {{11469049057867546880ull, 20065826040452474ull}}, {{2005013068209080064ull, 100329130202262373ull}}, {{10225878570959315712ull, 50164565101131186ull}}, {{5112939285479657728ull, 25082282550565593ull}}, {{7117952353688738048ull, 125411412752827966ull}}, {{3558976176844368896ull, 62705706376413983ull}}, {{11002860125276960256ull, 31352853188206991ull}}, {{14724802099493255936ull, 15676426594103495ull}}, {{18283778276337624832ull, 78382132970517478ull}}, {{9141889138168812288ull, 39191066485258739ull}}, {{13794316605939181824ull, 19595533242629369ull}}, {{13631350808567255296ull, 97977666213146848ull}}, {{6815675404283627520ull, 48988833106573424ull}}, {{3407837702141813760ull, 24494416553286712ull}}, {{17039188510709069312ull, 122472082766433560ull}}, {{8519594255354534656ull, 61236041383216780ull}}, {{4259797127677267200ull, 30618020691608390ull}}, {{2129898563838633472ull, 15309010345804195ull}}, {{10649492819193168128ull, 76545051729020975ull}}, {{14548118446451359744ull, 38272525864510487ull}}, {{16497431260080455680ull, 19136262932255243ull}}, {{8700180005564072448ull, 95681314661276219ull}}, {{13573462039636812032ull, 47840657330638109ull}}, {{16010103056673181696ull, 23920328665319054ull}}, {{6263538988527702528ull, 119601643326595274ull}}, {{3131769494263851264ull, 59800821663297637ull}}, {{10789256783986701312ull, 29900410831648818ull}}, {{5394628391993350656ull, 14950205415824409ull}}, {{8526397886257201920ull, 74751027079122046ull}}, {{4263198943128600832ull, 37375513539561023ull}}, {{11354971508419076096ull, 18687756769780511ull}}, {{1434625320966726656ull, 93438783848902558ull}}, {{717312660483363328ull, 46719391924451279ull}}, {{9582028367096457472ull, 23359695962225639ull}}, {{11016653688063184128ull, 116798479811128197ull}}, {{14731698880886367744ull, 58399239905564098ull}}, {{7365849440443183872ull, 29199619952782049ull}}, {{12906296757076367616ull, 14599809976391024ull}}, {{9191251564253184000ull, 72999049881955123ull}}, {{13818997818981367808ull, 36499524940977561ull}}, {{16132870946345459712ull, 18249762470488780ull}}, {{6877378436889092096ull, 91248812352443904ull}}, {{3438689218444546048ull, 45624406176221952ull}}, {{1719344609222273024ull, 22812203088110976ull}}, {{8596723046111365376ull, 114061015440554880ull}}, {{4298361523055682560ull, 57030507720277440ull}}, {{2149180761527841280ull, 28515253860138720ull}}, {{10745903807639206656ull, 142576269300693600ull}}, {{5372951903819603200ull, 71288134650346800ull}}, {{2686475951909801472ull, 35644067325173400ull}}, {{1343237975954900736ull, 17822033662586700ull}}, {{6716189879774504192ull, 89110168312933500ull}}, {{3358094939887251968ull, 44555084156466750ull}}, {{1679047469943625984ull, 22277542078233375ull}}, {{8395237349718130176ull, 111387710391166875ull}}, {{13420990711713840896ull, 55693855195583437ull}}, {{15933867392711696128ull, 27846927597791718ull}}, {{5882360668720274688ull, 139234637988958594ull}}, {{2941180334360137216ull, 69617318994479297ull}}, {{10693962204034844416ull, 34808659497239648ull}}, {{5346981102017422080ull, 17404329748619824ull}}, {{8288161436377559552ull, 87021648743099121ull}}, {{13367452755043555584ull, 43510824371549560ull}}, {{6683726377521777664ull, 21755412185774780ull}}, {{14971887813899337472ull, 108777060928873901ull}}, {{16709315943804444416ull, 54388530464436950ull}}, {{8354657971902222080ull, 27194265232218475ull}}, {{4879801712092008192ull, 135971326161092377ull}}, {{11663272892900779776ull, 67985663080546188ull}}, {{5831636446450389760ull, 33992831540273094ull}}, {{2915818223225194752ull, 16996415770136547ull}}, {{14579091116125974784ull, 84982078850682735ull}}, {{16512917594917763072ull, 42491039425341367ull}}, {{17479830834313657344ull, 21245519712670683ull}}, {{13612177876730080512ull, 106227598563353419ull}}, {{16029460975219815936ull, 53113799281676709ull}}, {{17238102524464683776ull, 26556899640838354ull}}, {{12403536327485212928ull, 132784498204191774ull}}, {{6201768163742606336ull, 66392249102095887ull}}, {{12324256118726078976ull, 33196124551047943ull}}, {{15385500096217815296ull, 16598062275523971ull}}, {{3140524186250870016ull, 82990311377619859ull}}, {{10793634129980210688ull, 41495155688809929ull}}, {{14620189101844881152ull, 20747577844404964ull}}, {{17760713288095751424ull, 103737889222024823ull}}, {{18103728680902651392ull, 51868944611012411ull}}, {{18275236377306101504ull, 25934472305506205ull}}, {{17589205591692301312ull, 129672361527531029ull}}, {{18017974832700926464ull, 64836180763765514ull}}, {{9008987416350463232ull, 32418090381882757ull}}, {{13727865745030007296ull, 16209045190941378ull}}, {{13299096504021382144ull, 81045225954706893ull}}, {{15872920288865466880ull, 40522612977353446ull}}, {{7936460144432733440ull, 20261306488676723ull}}, {{2788812574744564224ull, 101306532443383617ull}}, {{10617778324227057920ull, 50653266221691808ull}}, {{5308889162113528832ull, 25326633110845904ull}}, {{8097701736858093056ull, 126633165554229521ull}}, {{13272222905283822336ull, 63316582777114760ull}}, {{6636111452641911040ull, 31658291388557380ull}}, {{3318055726320955392ull, 15829145694278690ull}}, {{16590278631604777984ull, 79145728471393450ull}}, {{8295139315802388992ull, 39572864235696725ull}}, {{13370941694755970304ull, 19786432117848362ull}}, {{11514476252651196672ull, 98932160589241813ull}}, {{14980610163180374016ull, 49466080294620906ull}}, {{7490305081590187008ull, 24733040147310453ull}}, {{558037260531832064ull, 123665200736552267ull}}, {{9502390667120691712ull, 61832600368276133ull}}, {{13974567370415121664ull, 30916300184138066ull}}, {{6987283685207560704ull, 15458150092069033ull}}, {{16489674352328252672ull, 77290750460345166ull}}, {{8244837176164126208ull, 38645375230172583ull}}, {{13345790624936838912ull, 19322687615086291ull}}, {{11388720903555539968ull, 96613438075431458ull}}, {{5694360451777769984ull, 48306719037715729ull}}, {{12070552262743660800ull, 24153359518857864ull}}, {{5012529092589649152ull, 120766797594289323ull}}, {{11729636583149600256ull, 60383398797144661ull}}, {{15088190328429575936ull, 30191699398572330ull}}, {{7544095164214787840ull, 15095849699286165ull}}, {{826987673654836736ull, 75479248496430827ull}}, {{9636865873682194176ull, 37739624248215413ull}}, {{14041804973695872768ull, 18869812124107706ull}}, {{14868792647350709760ull, 94349060620538533ull}}, {{16657768360530130688ull, 47174530310269266ull}}, {{8328884180265065216ull, 23587265155134633ull}}, {{4750932753906223616ull, 117936325775673167ull}}, {{11598838413807887616ull, 58968162887836583ull}}, {{15022791243758719488ull, 29484081443918291ull}}, {{16734767658734135552ull, 14742040721959145ull}}, {{9886861998832471552ull, 73710203609795729ull}}, {{14166803036271011584ull, 36855101804897864ull}}, {{7083401518135505664ull, 18427550902448932ull}}, {{16970263516967977216ull, 92137754512244661ull}}, {{17708503795338764288ull, 46068877256122330ull}}, {{8854251897669382144ull, 23034438628061165ull}}, {{7377771340927808000ull, 115172193140305827ull}}, {{12912257707318679808ull, 57586096570152913ull}}, {{15679500890514115584ull, 28793048285076456ull}}, {{4610528157732371968ull, 143965241425382284ull}}, {{2305264078866185984ull, 71982620712691142ull}}, {{1152632039433092864ull, 35991310356345571ull}}, {{9799688056571322112ull, 17995655178172785ull}}, {{12104952135437508352ull, 89978275890863927ull}}, {{15275848104573529856ull, 44989137945431963ull}}, {{16861296089141540608ull, 22494568972715981ull}}, {{10519504150869497600ull, 112472844863579909ull}}, {{14483124112289524480ull, 56236422431789954ull}}, {{7241562056144762112ull, 28118211215894977ull}}, {{17761066207014259712ull, 140591056079474886ull}}, {{8880533103507129856ull, 70295528039737443ull}}, {{13663638588608340736ull, 35147764019868721ull}}, {{16055191331158946048ull, 17573882009934360ull}}, {{6488980360956524544ull, 87869410049671804ull}}, {{3244490180478262272ull, 43934705024835902ull}}, {{1622245090239131136ull, 21967352512417951ull}}, {{8111225451195655680ull, 109836762562089755ull}}, {{13278984762452603648ull, 54918381281044877ull}}, {{15862864418081077504ull, 27459190640522438ull}}, {{5527345795567181568ull, 137295953202612194ull}}, {{2763672897783590656ull, 68647976601306097ull}}, {{10605208485746571008ull, 34323988300653048ull}}, {{5302604242873285376ull, 17161994150326524ull}}, {{8066277140656876288ull, 85809970751632621ull}}, {{13256510607183213824ull, 42904985375816310ull}}, {{6628255303591606784ull, 21452492687908155ull}}, {{14694532444248483328ull, 107262463439540776ull}}, {{7347266222124241664ull, 53631231719770388ull}}, {{3673633111062120704ull, 26815615859885194ull}}, {{18368165555310604288ull, 134078079299425970ull}}, {{9184082777655302144ull, 67039039649712985ull}}, {{13815413425682426880ull, 33519519824856492ull}}, {{6907706712841213440ull, 16759759912428246ull}}, {{16091789490496515584ull, 83798799562141231ull}}, {{17269266782103033600ull, 41899399781070615ull}}, {{17858005427906292480ull, 20949699890535307ull}}, {{15503050844693256448ull, 104748499452676539ull}}, {{16974897459201403904ull, 52374249726338269ull}}, {{17710820766455477760ull, 26187124863169134ull}}, {{14767127537439182848ull, 130935624315845674ull}}, {{7383563768719591424ull, 65467812157922837ull}}, {{12915153921214571520ull, 32733906078961418ull}}, {{6457576960607285760ull, 16366953039480709ull}}, {{13841140729326877184ull, 81834765197403546ull}}, {{6920570364663438592ull, 40917382598701773ull}}, {{12683657219186494976ull, 20458691299350886ull}}, {{8078053874803820544ull, 102293456496754433ull}}, {{13262398974256686080ull, 51146728248377216ull}}, {{6631199487128343040ull, 25573364124188608ull}}, {{14709253361932163584ull, 127866820620943041ull}}, {{16577998717820857600ull, 63933410310471520ull}}, {{8288999358910428672ull, 31966705155235760ull}}, {{4144499679455214336ull, 15983352577617880ull}}, {{2275754323566520320ull, 79916762888089401ull}}, {{10361249198638035968ull, 39958381444044700ull}}, {{5180624599319017984ull, 19979190722022350ull}}, {{7456378922885538304ull, 99895953610111751ull}}, {{12951561498297544960ull, 49947976805055875ull}}, {{15699152786003548160ull, 24973988402527937ull}}, {{4708787635179535104ull, 124869942012639689ull}}, {{11577765854444543232ull, 62434971006319844ull}}, {{5788882927222271488ull, 31217485503159922ull}}, {{2894441463611135744ull, 15608742751579961ull}}, {{14472207318055679232ull, 78043713757899805ull}}, {{16459475695882615296ull, 39021856878949902ull}}, {{8229737847941307648ull, 19510928439474951ull}}, {{4255201092287435264ull, 97554642197374757ull}}, {{11350972582998493440ull, 48777321098687378ull}}, {{5675486291499246592ull, 24388660549343689ull}}, {{9930687383786682112ull, 121943302746718446ull}}, {{4965343691893340928ull, 60971651373359223ull}}, {{11706043882801446144ull, 30485825686679611ull}}, {{15076393978255498752ull, 15242912843339805ull}}, {{1594993596439288320ull, 76214564216699029ull}}, {{10020868835074419968ull, 38107282108349514ull}}, {{5010434417537209856ull, 19053641054174757ull}}, {{6605428013976498432ull, 95268205270873786ull}}, {{3302714006988249088ull, 47634102635436893ull}}, {{10874729040348900352ull, 23817051317718446ull}}, {{17480157054325398784ull, 119085256588592232ull}}, {{8740078527162699264ull, 59542628294296116ull}}, {{4370039263581349632ull, 29771314147148058ull}}, {{2185019631790674688ull, 14885657073574029ull}}, {{10925098158953374208ull, 74428285367870145ull}}, {{14685921116331462912ull, 37214142683935072ull}}, {{7342960558165731328ull, 18607071341967536ull}}, {{18268058717119105792ull, 93035356709837681ull}}, {{18357401395414328576ull, 46517678354918840ull}}, {{9178700697707164160ull, 23258839177459420ull}}, {{9000015341116718336ull, 116294195887297102ull}}, {{4500007670558359040ull, 58147097943648551ull}}, {{11473375872133955328ull, 29073548971824275ull}}, {{14960059972921753344ull, 14536774485912137ull}}, {{1013323569770561024ull, 72683872429560689ull}}, {{9730033821740056320ull, 36341936214780344ull}}, {{4865016910870028032ull, 18170968107390172ull}}, {{5878340480640589312ull, 90854840536950861ull}}, {{12162542277175070464ull, 45427420268475430ull}}, {{6081271138587535104ull, 22713710134237715ull}}, {{11959611619228124416ull, 113568550671188576ull}}, {{5979805809614062080ull, 56784275335594288ull}}, {{2989902904807031040ull, 28392137667797144ull}}, {{14949514524035155712ull, 141960688338985720ull}}, {{7474757262017577728ull, 70980344169492860ull}}, {{3737378631008788736ull, 35490172084746430ull}}, {{1868689315504394240ull, 17745086042373215ull}}, {{9343446577521972224ull, 88725430211866075ull}}, {{13895095325615761920ull, 44362715105933037ull}}, {{16170919699662656768ull, 22181357552966518ull}}, {{7067622203475077376ull, 110906787764832594ull}}, {{3533811101737538560ull, 55453393882416297ull}}, {{10990277587723545088ull, 27726696941208148ull}}, {{18057899791198622720ull, 138633484706040742ull}}, {{9028949895599311360ull, 69316742353020371ull}}, {{13737846984654431488ull, 34658371176510185ull}}, {{16092295529181991424ull, 17329185588255092ull}}, {{6674501351071751168ull, 86645927941275464ull}}, {{3337250675535875584ull, 43322963970637732ull}}, {{1668625337767937792ull, 21661481985318866ull}}, {{8343126688839688960ull, 108307409926594330ull}}, {{4171563344419844352ull, 54153704963297165ull}}, {{11309153709064697856ull, 27076852481648582ull}}, {{1205536324194835456ull, 135384262408242913ull}}, {{9826140198952193536ull, 67692131204121456ull}}, {{4913070099476096768ull, 33846065602060728ull}}, {{2456535049738048256ull, 16923032801030364ull}}, {{12282675248690241792ull, 84615164005151820ull}}, {{6141337624345120768ull, 42307582002575910ull}}, {{3070668812172560384ull, 21153791001287955ull}}, {{15353344060862802432ull, 105768955006439775ull}}, {{16900044067286177024ull, 52884477503219887ull}}, {{17673394070497864192ull, 26442238751609943ull}}, {{14579994057651115264ull, 132211193758049719ull}}, {{16513369065680333312ull, 66105596879024859ull}}, {{17480056569694942464ull, 33052798439512429ull}}, {{17963400321702246912ull, 16526399219756214ull}}, {{16030025313673028864ull, 82631996098781074ull}}, {{8015012656836514304ull, 41315998049390537ull}}, {{13230878365273032960ull, 20657999024695268ull}}, {{10814159605236510208ull, 103289995123476343ull}}, {{14630451839473030912ull, 51644997561738171ull}}, {{16538597956591291136ull, 25822498780869085ull}}, {{8906013488118249984ull, 129112493904345429ull}}, {{13676378780913900800ull, 64556246952172714ull}}, {{6838189390456950272ull, 32278123476086357ull}}, {{12642466732083250944ull, 16139061738043178ull}}, {{7872101439287600128ull, 80695308690215893ull}}, {{13159422756498575872ull, 40347654345107946ull}}, {{6579711378249287936ull, 20173827172553973ull}}, {{14451812817536888064ull, 100869135862769866ull}}, {{7225906408768443904ull, 50434567931384933ull}}, {{12836325241238997760ull, 25217283965692466ull}}, {{8841393985066334208ull, 126086419828462333ull}}, {{13644069029387942912ull, 63043209914231166ull}}, {{6822034514693971456ull, 31521604957115583ull}}, {{12634389294201761536ull, 15760802478557791ull}}, {{7831714249880152832ull, 78804012392788958ull}}, {{3915857124940076288ull, 39402006196394479ull}}, {{11181300599324813824ull, 19701003098197239ull}}, {{566270775495415296ull, 98505015490986198ull}}, {{283135387747707648ull, 49252507745493099ull}}, {{9364939730728629504ull, 24626253872746549ull}}, {{9931210506224044800ull, 123131269363732747ull}}, {{14188977289966798080ull, 61565634681866373ull}}, {{16317860681838174720ull, 30782817340933186ull}}, {{8158930340919087360ull, 15391408670466593ull}}, {{3901163557176334080ull, 76957043352332967ull}}, {{11173953815442942720ull, 38478521676166483ull}}, {{14810348944576247040ull, 19239260838083241ull}}, {{264768428043029760ull, 96196304190416209ull}}, {{9355756250876290560ull, 48098152095208104ull}}, {{4677878125438145280ull, 24049076047604052ull}}, {{4942646553481175040ull, 120245380238020261ull}}, {{11694695313595363328ull, 60122690119010130ull}}, {{5847347656797681664ull, 30061345059505065ull}}, {{12147045865253616640ull, 15030672529752532ull}}, {{5394997105139428352ull, 75153362648762663ull}}, {{11920870589424489984ull, 37576681324381331ull}}, {{15183807331567020800ull, 18788340662190665ull}}, {{2132060362996897536ull, 93941703310953329ull}}, {{10289402218353224448ull, 46970851655476664ull}}, {{5144701109176612096ull, 23485425827738332ull}}, {{7276761472173509888ull, 117427129138691661ull}}, {{12861752772941530624ull, 58713564569345830ull}}, {{6430876386470765312ull, 29356782284672915ull}}, {{12438810230090158336ull, 14678391142336457ull}}, {{6853818929322137600ull, 73391955711682288ull}}, {{3426909464661068800ull, 36695977855841144ull}}, {{1713454732330534400ull, 18347988927920572ull}}, {{8567273661652672000ull, 91739944639602860ull}}, {{4283636830826336000ull, 45869972319801430ull}}, {{2141818415413167872ull, 22934986159900715ull}}, {{10709092077065839872ull, 114674930799503575ull}}, {{14577918075387695616ull, 57337465399751787ull}}, {{16512331074548623616ull, 28668732699875893ull}}, {{8774679077904912128ull, 143343663499379469ull}}, {{13610711575807231744ull, 71671831749689734ull}}, {{6805355787903615744ull, 35835915874844867ull}}, {{12626049930806583552ull, 17917957937422433ull}}, {{7790017432904263936ull, 89589789687112168ull}}, {{3895008716452131840ull, 44794894843556084ull}}, {{1947504358226065920ull, 22397447421778042ull}}, {{9737521791130330112ull, 111987237108890210ull}}, {{4868760895565165056ull, 55993618554445105ull}}, {{11657752484637358336ull, 27996809277222552ull}}, {{2948530202058136832ull, 139984046386112763ull}}, {{10697637137883844096ull, 69992023193056381ull}}, {{14572190605796697856ull, 34996011596528190ull}}, {{7286095302898348800ull, 17498005798264095ull}}, {{17983732440782193152ull, 87490028991320476ull}}, {{8991866220391096576ull, 43745014495660238ull}}, {{4495933110195548160ull, 21872507247830119ull}}, {{4032921477268189696ull, 109362536239150596ull}}, {{2016460738634094848ull, 54681268119575298ull}}, {{1008230369317047296ull, 27340634059787649ull}}, {{5041151846585237248ull, 136703170298938245ull}}, {{11743947960147394304ull, 68351585149469122ull}}, {{5871973980073697024ull, 34175792574734561ull}}, {{12159359026891624192ull, 17087896287367280ull}}, {{5456562913329467136ull, 85439481436836403ull}}, {{11951653493519509248ull, 42719740718418201ull}}, {{15199198783614530304ull, 21359870359209100ull}}, {{2209017623234446080ull, 106799351796045504ull}}, {{1104508811617222912ull, 53399675898022752ull}}, {{552254405808611328ull, 26699837949011376ull}}, {{2761272029043057664ull, 133499189745056880ull}}, {{1380636014521528832ull, 66749594872528440ull}}, {{690318007260764416ull, 33374797436264220ull}}, {{345159003630382080ull, 16687398718132110ull}}, {{1725795018151910912ull, 83436993590660550ull}}, {{862897509075955456ull, 41718496795330275ull}}, {{9654820791392753408ull, 20859248397665137ull}}, {{11380615809544664576ull, 104296241988325687ull}}, {{14913679941627108096ull, 52148120994162843ull}}, {{16680212007668329728ull, 26074060497081421ull}}, {{9614083743503442944ull, 130370302485407109ull}}, {{14030413908606497280ull, 65185151242703554ull}}, {{7015206954303248640ull, 32592575621351777ull}}, {{12730975514006400000ull, 16296287810675888ull}}, {{8314645348903345664ull, 81481439053379443ull}}, {{13380694711306448640ull, 40740719526689721ull}}, {{15913719392508000000ull, 20370359763344860ull}}, {{5781620667701794304ull, 101851798816724304ull}}, {{2890810333850897152ull, 50925899408362152ull}}, {{1445405166925448448ull, 25462949704181076ull}}, {{7227025834627242752ull, 127314748520905380ull}}, {{3613512917313621248ull, 63657374260452690ull}}, {{1806756458656810496ull, 31828687130226345ull}}, {{10126750266183181056ull, 15914343565113172ull}}, {{13740263183496802560ull, 79571717825565862ull}}, {{6870131591748401152ull, 39785858912782931ull}}, {{12658437832728976384ull, 19892929456391465ull}}, {{7951956942516227328ull, 99464647281957328ull}}, {{3975978471258113536ull, 49732323640978664ull}}, {{1987989235629056768ull, 24866161820489332ull}}, {{9939946178145284352ull, 124330809102446660ull}}, {{4969973089072642048ull, 62165404551223330ull}}, {{2484986544536321024ull, 31082702275611665ull}}, {{10465865309122936320ull, 15541351137805832ull}}, {{15435838398195578368ull, 77706755689029162ull}}, {{7717919199097789184ull, 38853377844514581ull}}, {{13082331636403670272ull, 19426688922257290ull}}, {{10071425960889697280ull, 97133444611286453ull}}, {{14259085017299624448ull, 48566722305643226ull}}, {{7129542508649812224ull, 24283361152821613ull}}, {{17200968469539509504ull, 121416805764108066ull}}, {{8600484234769754624ull, 60708402882054033ull}}, {{13523614154239653120ull, 30354201441027016ull}}, {{6761807077119826432ull, 15177100720513508ull}}, {{15362291311889581312ull, 75885503602567541ull}}, {{16904517692799566336ull, 37942751801283770ull}}, {{8452258846399783168ull, 18971375900641885ull}}, {{5367806084579812864ull, 94856879503209427ull}}, {{11907275079144682240ull, 47428439751604713ull}}, {{15177009576427116800ull, 23714219875802356ull}}, {{2098071587297378304ull, 118571099379011784ull}}, {{1049035793648689152ull, 59285549689505892ull}}, {{524517896824344576ull, 29642774844752946ull}}, {{262258948412172288ull, 14821387422376473ull}}, {{1311294742060861440ull, 74106937111882365ull}}, {{9879019407885206528ull, 37053468555941182ull}}, {{4939509703942603264ull, 18526734277970591ull}}, {{6250804446003464704ull, 92633671389852956ull}}, {{3125402223001732352ull, 46316835694926478ull}}, {{1562701111500866048ull, 23158417847463239ull}}, {{7813505557504330752ull, 115792089237316195ull}}, {{13130124815606941184ull, 57896044618658097ull}}, {{15788434444658246400ull, 28948022309329048ull}}, {{7894217222329123072ull, 14474011154664524ull}}, {{2577597964226512896ull, 72370055773322622ull}}, {{1288798982113256448ull, 36185027886661311ull}}, {{9867771527911404032ull, 18092513943330655ull}}, {{12445369492137916928ull, 90462569716653277ull}}, {{15446056782923734272ull, 45231284858326638ull}}, {{7723028391461867008ull, 22615642429163319ull}}, {{1721653809890232320ull, 113078212145816597ull}}, {{10084198941799891968ull, 56539106072908298ull}}, {{5042099470899945984ull, 28269553036454149ull}}, {{6763753280790178304ull, 141347765182270746ull}}, {{3381876640395089152ull, 70673882591135373ull}}, {{10914310357052320256ull, 35336941295567686ull}}, {{5457155178526160128ull, 17668470647783843ull}}, {{8839031818921249280ull, 88342353238919216ull}}, {{4419515909460624640ull, 44171176619459608ull}}, {{2209757954730312192ull, 22085588309729804ull}}, {{11048789773651561728ull, 110427941548649020ull}}, {{5524394886825780736ull, 55213970774324510ull}}, {{2762197443412890368ull, 27606985387162255ull}}, {{13810987217064452096ull, 138034926935811275ull}}, {{16128865645387001856ull, 69017463467905637ull}}, {{17287804859548276736ull, 34508731733952818ull}}, {{8643902429774138368ull, 17254365866976409ull}}, {{6326024001451588608ull, 86271829334882047ull}}, {{12386384037580570112ull, 43135914667441023ull}}, {{15416564055645060864ull, 21567957333720511ull}}, {{3295843983387097856ull, 107839786668602559ull}}, {{10871294028548324608ull, 53919893334301279ull}}, {{14659019051128937984ull, 26959946667150639ull}}, {{17954863034516036096ull, 134799733335753198ull}}, {{8977431517258018048ull, 67399866667876599ull}}, {{13712087795483784704ull, 33699933333938299ull}}, {{16079415934596668160ull, 16849966666969149ull}}, {{6610103378145134592ull, 84249833334845749ull}}, {{12528423725927343104ull, 42124916667422874ull}}, {{6264211862963671552ull, 21062458333711437ull}}, {{12874315241108806144ull, 105312291668557186ull}}, {{6437157620554403072ull, 52656145834278593ull}}, {{12441950847131977216ull, 26328072917139296ull}}, {{6869522014531232000ull, 131640364585696483ull}}, {{12658133044120391680ull, 65820182292848241ull}}, {{15552438558914971648ull, 32910091146424120ull}}, {{7776219279457485824ull, 16455045573212060ull}}, {{1987608249868325888ull, 82275227866060302ull}}, {{993804124934162944ull, 41137613933030151ull}}, {{9720274099321857280ull, 20568806966515075ull}}, {{11707882349190183424ull, 102844034832575377ull}}, {{15077313211449867520ull, 51422017416287688ull}}, {{7538656605724933632ull, 25711008708143844ull}}, {{799794881205565440ull, 128555043540719222ull}}, {{399897440602782720ull, 64277521770359611ull}}, {{9423320757156167168ull, 32138760885179805ull}}, {{13935032415432859392ull, 16069380442589902ull}}, {{14334929856035642112ull, 80346902212949513ull}}, {{16390836964872596736ull, 40173451106474756ull}}, {{8195418482436298240ull, 20086725553237378ull}}, {{4083604264762388992ull, 100433627766186892ull}}, {{2041802132381194496ull, 50216813883093446ull}}, {{1020901066190597120ull, 25108406941546723ull}}, {{5104505330952986112ull, 125542034707733615ull}}, {{11775624702331268864ull, 62771017353866807ull}}, {{15111184388020410112ull, 31385508676933403ull}}, {{16778964230864980736ull, 15692754338466701ull}}, {{10107844859486698240ull, 78463771692333509ull}}, {{14277294466598124800ull, 39231885846166754ull}}, {{7138647233299062272ull, 19615942923083377ull}}, {{17246492092785760768ull, 98079714615416886ull}}, {{8623246046392880384ull, 49039857307708443ull}}, {{13534995060051215872ull, 24519928653854221ull}}, {{12334743079127425024ull, 122599643269271108ull}}, {{6167371539563712512ull, 61299821634635554ull}}, {{3083685769781856256ull, 30649910817317777ull}}, {{10765214921745703936ull, 15324955408658888ull}}, {{16932586461309416448ull, 76624777043294442ull}}, {{8466293230654708224ull, 38312388521647221ull}}, {{13456518652182129920ull, 19156194260823610ull}}, {{11942361039781994752ull, 95780971304118053ull}}, {{15194552556745773056ull, 47890485652059026ull}}, {{7597276278372886528ull, 23945242826029513ull}}, {{1092893244445329664ull, 119726214130147567ull}}, {{9769818659077440512ull, 59863107065073783ull}}, {{14108281366393496064ull, 29931553532536891ull}}, {{16277512720051523840ull, 14965776766268445ull}}, {{7600587305419412992ull, 74828883831342229ull}}, {{13023665689564482304ull, 37414441915671114ull}}, {{6511832844782241024ull, 18707220957835557ull}}, {{14112420150201654016ull, 93536104789177786ull}}, {{7056210075100826880ull, 46768052394588893ull}}, {{12751477074405189120ull, 23384026197294446ull}}, {{8417153150897291776ull, 116920130986472233ull}}, {{13431948612303421696ull, 58460065493236116ull}}, {{6715974306151710720ull, 29230032746618058ull}}, {{3357987153075855360ull, 14615016373309029ull}}, {{16789935765379277056ull, 73075081866545145ull}}, {{17618339919544414208ull, 36537540933272572ull}}, {{8809169959772207104ull, 18268770466636286ull}}, {{7152361651441932800ull, 91343852333181432ull}}, {{3576180825720966400ull, 45671926166590716ull}}, {{1788090412860483072ull, 22835963083295358ull}}, {{8940452064302415872ull, 114179815416476790ull}}, {{4470226032151207936ull, 57089907708238395ull}}, {{11458485052930379776ull, 28544953854119197ull}}, {{1952193043523244032ull, 142724769270595988ull}}, {{976096521761622016ull, 71362384635297994ull}}, {{488048260880811008ull, 35681192317648997ull}}, {{9467396167295181312ull, 17840596158824498ull}}, {{10443492689056803328ull, 89202980794122492ull}}, {{5221746344528401664ull, 44601490397061246ull}}, {{2610873172264200704ull, 22300745198530623ull}}, {{13054365861321004288ull, 111503725992653115ull}}, {{15750554967515277824ull, 55751862996326557ull}}, {{17098649520612414720ull, 27875931498163278ull}}, {{11706271308223867392ull, 139379657490816394ull}}, {{5853135654111933696ull, 69689828745408197ull}}, {{12149939863910742528ull, 34844914372704098ull}}, {{6074969931955371264ull, 17422457186352049ull}}, {{11928105586067304960ull, 87112285931760246ull}}, {{5964052793033652480ull, 43556142965880123ull}}, {{12205398433371601920ull, 21778071482940061ull}}, {{5686759945729355520ull, 108890357414700308ull}}, {{2843379972864677632ull, 54445178707350154ull}}, {{1421689986432338688ull, 27222589353675077ull}}, {{7108449932161694208ull, 136112946768375385ull}}, {{12777597002935622912ull, 68056473384187692ull}}, {{6388798501467811328ull, 34028236692093846ull}}, {{3194399250733905664ull, 17014118346046923ull}}, {{15971996253669528576ull, 85070591730234615ull}}, {{17209370163689540096ull, 42535295865117307ull}}, {{17828057118699545856ull, 21267647932558653ull}}, {{15353309298659522816ull, 106338239662793269ull}}, {{16900026686184537088ull, 53169119831396634ull}}, {{8450013343092268544ull, 26584559915698317ull}}, {{5356578568042240000ull, 132922799578491587ull}}, {{11901661320875895808ull, 66461399789245793ull}}, {{15174202697292723712ull, 33230699894622896ull}}, {{7587101348646361856ull, 16615349947311448ull}}, {{1042018595812706048ull, 83076749736557242ull}}, {{521009297906352896ull, 41538374868278621ull}}, {{9483876685807952128ull, 20769187434139310ull}}, {{10525895281620658432ull, 103845937170696552ull}}, {{5262947640810329088ull, 51922968585348276ull}}, {{2631473820405164544ull, 25961484292674138ull}}, {{13157369102025822976ull, 129807421463370690ull}}, {{6578684551012911360ull, 64903710731685345ull}}, {{12512714312361231360ull, 32451855365842672ull}}, {{6256357156180615680ull, 16225927682921336ull}}, {{12835041707193527296ull, 81129638414606681ull}}, {{15640892890451539456ull, 40564819207303340ull}}, {{7820446445225769728ull, 20282409603651670ull}}, {{2208744078709745408ull, 101412048018258352ull}}, {{1104372039354872576ull, 50706024009129176ull}}, {{552186019677436160ull, 25353012004564588ull}}, {{2760930098387181568ull, 126765060022822940ull}}, {{1380465049193590784ull, 63382530011411470ull}}, {{690232524596795392ull, 31691265005705735ull}}, {{9568488299153173504ull, 15845632502852867ull}}, {{10948953348346764288ull, 79228162514264337ull}}, {{14697848711028157952ull, 39614081257132168ull}}, {{7348924355514078976ull, 19807040628566084ull}}, {{18297877703860843264ull, 99035203142830421ull}}, {{18372310888785197312ull, 49517601571415210ull}}, {{9186155444392598528ull, 24758800785707605ull}}, {{9037289074543890432ull, 123794003928538027ull}}, {{13742016574126721024ull, 61897001964269013ull}}, {{16094380323918136320ull, 30948500982134506ull}}, {{8047190161959068160ull, 15474250491067253ull}}, {{3342462662376237568ull, 77371252455336267ull}}, {{10894603368042894592ull, 38685626227668133ull}}, {{14670673720876222976ull, 19342813113834066ull}}, {{18013136383252460544ull, 96714065569170333ull}}, {{18229940228481006080ull, 48357032784585166ull}}, {{9114970114240503040ull, 24178516392292583ull}}, {{8681362423783412224ull, 120892581961462917ull}}, {{13564053248746481920ull, 60446290980731458ull}}, {{6782026624373240832ull, 30223145490365729ull}}, {{12614385349041396224ull, 15111572745182864ull}}, {{7731694524078326528ull, 75557863725914323ull}}, {{13089219298893938944ull, 37778931862957161ull}}, {{15767981686301745152ull, 18889465931478580ull}}, {{5052932136670520320ull, 94447329657392904ull}}, {{2526466068335260160ull, 47223664828696452ull}}, {{1263233034167630080ull, 23611832414348226ull}}, {{6316165170838150400ull, 118059162071741130ull}}, {{3158082585419075072ull, 59029581035870565ull}}, {{10802413329564313344ull, 29514790517935282ull}}, {{5401206664782156544ull, 14757395258967641ull}}, {{8559289250201231872ull, 73786976294838206ull}}, {{4279644625100615936ull, 36893488147419103ull}}, {{11363194349405083648ull, 18446744073709551ull}}, {{1475739525896763904ull, 92233720368547758ull}}, {{737869762948381952ull, 46116860184273879ull}}, {{9592306918328966656ull, 23058430092136939ull}}, {{11068046444225730816ull, 115292150460684697ull}}, {{14757395258967641088ull, 57646075230342348ull}}, {{7378697629483820544ull, 28823037615171174ull}}, {{3689348814741910272ull, 14411518807585587ull}}, {{18446744073709551360ull, 72057594037927935ull}}, {{18446744073709551360ull, 36028797018963967ull}}, {{18446744073709551360ull, 18014398509481983ull}}, {{18446744073709551360ull, 90071992547409919ull}}, {{18446744073709551360ull, 45035996273704959ull}}, {{18446744073709551360ull, 22517998136852479ull}}, {{18446744073709551360ull, 112589990684262399ull}}, {{18446744073709551360ull, 56294995342131199ull}}, {{18446744073709551360ull, 28147497671065599ull}}, {{18446744073709551360ull, 140737488355327999ull}}, {{18446744073709551360ull, 70368744177663999ull}}, {{18446744073709551360ull, 35184372088831999ull}}, {{18446744073709551360ull, 17592186044415999ull}}, {{18446744073709551360ull, 87960930222079999ull}}, {{18446744073709551360ull, 43980465111039999ull}}, {{18446744073709551360ull, 21990232555519999ull}}, {{18446744073709551360ull, 109951162777599999ull}}, {{18446744073709551360ull, 54975581388799999ull}}, {{18446744073709551360ull, 27487790694399999ull}}, {{18446744073709551360ull, 137438953471999999ull}}, {{18446744073709551360ull, 68719476735999999ull}}, {{18446744073709551360ull, 34359738367999999ull}}, {{18446744073709551360ull, 17179869183999999ull}}, {{18446744073709551360ull, 85899345919999999ull}}, {{18446744073709551360ull, 42949672959999999ull}}, {{18446744073709551360ull, 21474836479999999ull}}, {{18446744073709551360ull, 107374182399999999ull}}, {{18446744073709551360ull, 53687091199999999ull}}, {{18446744073709551360ull, 26843545599999999ull}}, {{18446744073709551360ull, 134217727999999999ull}}, {{18446744073709551360ull, 67108863999999999ull}}, {{18446744073709551360ull, 33554431999999999ull}}, {{18446744073709551360ull, 16777215999999999ull}}, {{18446744073709551360ull, 83886079999999999ull}}, {{18446744073709551360ull, 41943039999999999ull}}, {{18446744073709551360ull, 20971519999999999ull}}, {{18446744073709551360ull, 104857599999999999ull}}, {{18446744073709551360ull, 52428799999999999ull}}, {{18446744073709551360ull, 26214399999999999ull}}, {{18446744073709551360ull, 131071999999999999ull}}, {{18446744073709551360ull, 65535999999999999ull}}, {{18446744073709551360ull, 32767999999999999ull}}, {{18446744073709551360ull, 16383999999999999ull}}, {{18446744073709551360ull, 81919999999999999ull}}, {{18446744073709551360ull, 40959999999999999ull}}, {{18446744073709551360ull, 20479999999999999ull}}, {{18446744073709551360ull, 102399999999999999ull}}, {{18446744073709551360ull, 51199999999999999ull}}, {{18446744073709551360ull, 25599999999999999ull}}, {{18446744073709551360ull, 127999999999999999ull}}, {{18446744073709551360ull, 63999999999999999ull}}, {{18446744073709551360ull, 31999999999999999ull}}, {{18446744073709551360ull, 15999999999999999ull}}, {{18446744073709551360ull, 79999999999999999ull}}, {{18446744073709551360ull, 39999999999999999ull}}, {{18446744073709551360ull, 19999999999999999ull}}, {{18446744073709551360ull, 99999999999999999ull}}, {{18446744073709551360ull, 49999999999999999ull}}, {{18446744073709551360ull, 24999999999999999ull}}, {{18446744073709551360ull, 124999999999999999ull}}, {{18446744073709551360ull, 62499999999999999ull}}, {{18446744073709551360ull, 31249999999999999ull}}, {{18446744073709551360ull, 15624999999999999ull}}, {{18446744073709551360ull, 78124999999999999ull}}, {{18446744073709551360ull, 39062499999999999ull}}, {{18446744073709551360ull, 19531249999999999ull}}, {{18446744073709551360ull, 97656249999999999ull}}, {{18446744073709551360ull, 48828124999999999ull}}, {{18446744073709551360ull, 24414062499999999ull}}, {{18446744073709551360ull, 122070312499999999ull}}, {{18446744073709551360ull, 61035156249999999ull}}, {{18446744073709551360ull, 30517578124999999ull}}, {{18446744073709551360ull, 15258789062499999ull}}, {{18446744073709551360ull, 76293945312499999ull}}, {{18446744073709551360ull, 38146972656249999ull}}, {{18446744073709551360ull, 19073486328124999ull}}, {{18446744073709551360ull, 95367431640624999ull}}, {{18446744073709551360ull, 47683715820312499ull}}, {{18446744073709551360ull, 23841857910156249ull}}, {{18446744073709551360ull, 119209289550781249ull}}, {{18446744073709551360ull, 59604644775390624ull}}, {{9223372036854775552ull, 29802322387695312ull}}, {{4611686018427387648ull, 14901161193847656ull}}, {{4611686018427387648ull, 74505805969238281ull}}, {{11529215046068469504ull, 37252902984619140ull}}, {{5764607523034234624ull, 18626451492309570ull}}, {{10376293541461622528ull, 93132257461547851ull}}, {{14411518807585586944ull, 46566128730773925ull}}, {{16429131440647569152ull, 23283064365386962ull}}, {{8358680908399640320ull, 116415321826934814ull}}, {{4179340454199820032ull, 58207660913467407ull}}, {{11313042263954685696ull, 29103830456733703ull}}, {{14879893168832118528ull, 14551915228366851ull}}, {{612489549322387200ull, 72759576141834259ull}}, {{9529616811515969280ull, 36379788070917129ull}}, {{13988180442612760320ull, 18189894035458564ull}}, {{14600669991935147776ull, 90949470177292823ull}}, {{16523707032822349568ull, 45474735088646411ull}}, {{17485225553265950464ull, 22737367544323205ull}}, {{13639151471491546880ull, 113686837721616029ull}}, {{16042947772600549120ull, 56843418860808014ull}}, {{8021473886300274432ull, 28421709430404007ull}}, {{3213881284082269952ull, 142108547152020037ull}}, {{10830312678895910656ull, 71054273576010018ull}}, {{5415156339447955200ull, 35527136788005009ull}}, {{11930950206578753280ull, 17763568394002504ull}}, {{4314518811765112576ull, 88817841970012523ull}}, {{11380631442737331968ull, 44408920985006261ull}}, {{14913687758223441664ull, 22204460492503130ull}}, {{781462496279002880ull, 111022302462515654ull}}, {{390731248139501312ull, 55511151231257827ull}}, {{9418737660924526336ull, 27755575615628913ull}}, {{10200200157203529472ull, 138777878078144567ull}}, {{14323472115456540416ull, 69388939039072283ull}}, {{16385108094583045888ull, 34694469519536141ull}}, {{17415926084146298624ull, 17347234759768070ull}}, {{13292654125893287680ull, 86736173798840354ull}}, {{6646327062946643712ull, 43368086899420177ull}}, {{12546535568328097536ull, 21684043449710088ull}}, {{7392445620511833856ull, 108420217248550443ull}}, {{12919594847110692608ull, 54210108624275221ull}}, {{15683169460410121984ull, 27105054312137610ull}}, {{4628871007212404480ull, 135525271560688054ull}}, {{2314435503606202112ull, 67762635780344027ull}}, {{10380589788657876736ull, 33881317890172013ull}}, {{14413666931183714048ull, 16940658945086006ull}}, {{16728102434789916416ull, 84703294725430033ull}}, {{17587423254249733888ull, 42351647362715016ull}}, {{8793711627124866816ull, 21175823681357508ull}}, {{7075069988205231872ull, 105879118406787542ull}}, {{3537534994102615808ull, 52939559203393771ull}}, {{10992139533906083584ull, 26469779601696885ull}}, {{18067209522111315712ull, 132348898008484427ull}}, {{18256976797910433536ull, 66174449004242213ull}}, {{18351860435809992448ull, 33087224502121106ull}}, {{9175930217904996096ull, 16543612251060553ull}}, {{8986162942105878272ull, 82718061255302767ull}}, {{13716453507907714816ull, 41359030627651383ull}}, {{16081598790808633088ull, 20679515313825691ull}}, {{6621017659204960000ull, 103397576569128459ull}}, {{12533880866457255680ull, 51698788284564229ull}}, {{15490312470083403520ull, 25849394142282114ull}}, {{3664586055578812160ull, 129246970711410574ull}}, {{1832293027789405952ull, 64623485355705287ull}}, {{10139518550749478656ull, 32311742677852643ull}}, {{14293131312229515008ull, 16155871338926321ull}}, {{16125424340018921216ull, 80779356694631608ull}}, {{8062712170009460480ull, 40389678347315804ull}}, {{4031356085004730112ull, 20194839173657902ull}}, {{1710036351314099968ull, 100974195868289511ull}}, {{10078390212511825664ull, 50487097934144755ull}}, {{14262567143110688512ull, 25243548967072377ull}}, {{15972603494424788736ull, 126217744835361888ull}}, {{7986301747212394240ull, 63108872417680944ull}}, {{3993150873606196992ull, 31554436208840472ull}}, {{1996575436803098368ull, 15777218104420236ull}}, {{9982877184015492864ull, 78886090522101180ull}}, {{4991438592007746304ull, 39443045261050590ull}}, {{2495719296003873024ull, 19721522630525295ull}}, {{12478596480019366144ull, 98607613152626475ull}}, {{15462670276864458752ull, 49303806576313237ull}}, {{16954707175287005184ull, 24651903288156618ull}}, {{10986559581596819968ull, 123259516440783094ull}}, {{5493279790798409984ull, 61629758220391547ull}}, {{11970011932253980672ull, 30814879110195773ull}}, {{15208378002981766144ull, 15407439555097886ull}}, {{2254913720070624512ull, 77037197775489434ull}}, {{1127456860035312128ull, 38518598887744717ull}}, {{9787100466872431872ull, 19259299443872358ull}}, {{12042014186943056384ull, 96296497219361792ull}}, {{6021007093471528192ull, 48148248609680896ull}}, {{3010503546735763968ull, 24074124304840448ull}}, {{15052517733678820608ull, 120370621524202240ull}}, {{7526258866839410176ull, 60185310762101120ull}}, {{3763129433419705088ull, 30092655381050560ull}}, {{1881564716709852416ull, 15046327690525280ull}}, {{9407823583549262848ull, 75231638452626400ull}}, {{4703911791774631424ull, 37615819226313200ull}}, {{2351955895887315712ull, 18807909613156600ull}}, {{11759779479436578560ull, 94039548065783000ull}}, {{5879889739718289152ull, 47019774032891500ull}}, {{2939944869859144448ull, 23509887016445750ull}}, {{14699724349295723264ull, 117549435082228750ull}}, {{7349862174647861504ull, 58774717541114375ull}}, {{12898303124178706432ull, 29387358770557187ull}}, {{15672523598944129024ull, 14693679385278593ull}}, {{4575641699882439168ull, 73468396926392969ull}}, {{11511192886795995392ull, 36734198463196484ull}}, {{5755596443397997568ull, 18367099231598242ull}}, {{10331238143280436736ull, 91835496157991211ull}}, {{14388991108494994176ull, 45917748078995605ull}}, {{16417867591102272768ull, 22958874039497802ull}}, {{8302361660673158144ull, 114794370197489014ull}}, {{4151180830336579072ull, 57397185098744507ull}}, {{11298962452023065344ull, 28698592549372253ull}}, {{1154580038986671872ull, 143492962746861268ull}}, {{577290019493335808ull, 71746481373430634ull}}, {{288645009746667776ull, 35873240686715317ull}}, {{9367694541728109568ull, 17936620343357658ull}}, {{9944984561221445632ull, 89683101716788292ull}}, {{4972492280610722816ull, 44841550858394146ull}}, {{2486246140305361408ull, 22420775429197073ull}}, {{12431230701526807040ull, 112103877145985365ull}}, {{15438987387618179328ull, 56051938572992682ull}}, {{7719493693809089536ull, 28025969286496341ull}}, {{1703980321626345216ull, 140129846432481707ull}}, {{10075362197667948288ull, 70064923216240853ull}}, {{14261053135688749824ull, 35032461608120426ull}}, {{7130526567844374784ull, 17516230804060213ull}}, {{17205888765512323328ull, 87581154020301066ull}}, {{8602944382756161536ull, 43790577010150533ull}}, {{13524844228232856576ull, 21895288505075266ull}}, {{12283988920035628544ull, 109476442525376333ull}}, {{15365366496872590080ull, 54738221262688166ull}}, {{7682683248436294912ull, 27369110631344083ull}}, {{1519928094762371840ull, 136845553156720417ull}}, {{9983336084235961600ull, 68422776578360208ull}}, {{4991668042117980672ull, 34211388289180104ull}}, {{2495834021058990336ull, 17105694144590052ull}}, {{12479170105294952192ull, 85528470722950260ull}}, {{6239585052647475968ull, 42764235361475130ull}}, {{3119792526323737856ull, 21382117680737565ull}}, {{15598962631618690304ull, 106910588403687825ull}}, {{17022853352664120832ull, 53455294201843912ull}}, {{8511426676332060416ull, 26727647100921956ull}}, {{5663645234241199104ull, 133638235504609782ull}}, {{2831822617120599552ull, 66819117752304891ull}}, {{10639283345415075584ull, 33409558876152445ull}}, {{14543013709562313472ull, 16704779438076222ull}}, {{17374836326682913024ull, 83523897190381113ull}}, {{17910790200196232192ull, 41761948595190556ull}}, {{8955395100098116096ull, 20880974297595278ull}}, {{7883487353071477760ull, 104404871487976392ull}}, {{3941743676535738880ull, 52202435743988196ull}}, {{1970871838267869440ull, 26101217871994098ull}}, {{9854359191339347200ull, 130506089359970490ull}}, {{4927179595669673472ull, 65253044679985245ull}}, {{11686961834689612544ull, 32626522339992622ull}}, {{5843480917344806144ull, 16313261169996311ull}}, {{10770660513014479872ull, 81566305849981556ull}}, {{5385330256507239936ull, 40783152924990778ull}}, {{2692665128253619968ull, 20391576462495389ull}}, {{13463325641268099840ull, 101957882312476945ull}}, {{15955034857488825600ull, 50978941156238472ull}}, {{7977517428744412672ull, 25489470578119236ull}}, {{2994098996302961152ull, 127447352890596182ull}}, {{1497049498151480576ull, 63723676445298091ull}}, {{9971896785930515968ull, 31861838222649045ull}}, {{14209320429820033792ull, 15930919111324522ull}}, {{15706369927971514368ull, 79654595556622613ull}}, {{17076557000840532992ull, 39827297778311306ull}}, {{8538278500420266496ull, 19913648889155653ull}}, {{5797904354682229248ull, 99568244445778267ull}}, {{12122324214195890432ull, 49784122222889133ull}}, {{15284534143952720896ull, 24892061111444566ull}}, {{2635694424925398784ull, 124460305557222834ull}}, {{1317847212462699264ull, 62230152778611417ull}}, {{9882295643086125312ull, 31115076389305708ull}}, {{4941147821543062528ull, 15557538194652854ull}}, {{6258995034005762048ull, 77787690973264271ull}}, {{12352869553857656832ull, 38893845486632135ull}}, {{15399806813783604224ull, 19446922743316067ull}}, {{3212057774079814656ull, 97234613716580339ull}}, {{10829400923894683136ull, 48617306858290169ull}}, {{14638072498802117376ull, 24308653429145084ull}}, {{17850130272881932032ull, 121543267145725423ull}}, {{18148437173295741696ull, 60771633572862711ull}}, {{18297590623502646528ull, 30385816786431355ull}}, {{18372167348606098944ull, 15192908393215677ull}}, {{18073860448192289280ull, 75964541966078389ull}}, {{18260302260950920448ull, 37982270983039194ull}}, {{9130151130475460096ull, 18991135491519597ull}}, {{8757267504958198016ull, 94955677457597987ull}}, {{13602005789333874688ull, 47477838728798993ull}}, {{16024374931521713152ull, 23738919364399496ull}}, {{6334898362770359808ull, 118694596821997484ull}}, {{3167449181385179904ull, 59347298410998742ull}}, {{1583724590692589824ull, 29673649205499371ull}}, {{10015234332201070592ull, 14836824602749685ull}}, {{13182683513586250496ull, 74184123013748427ull}}, {{15814713793647900928ull, 37092061506874213ull}}, {{17130728933678726144ull, 18546030753437106ull}}, {{11866668373555425280ull, 92730153767185534ull}}, {{5933334186777712640ull, 46365076883592767ull}}, {{12190039130243632128ull, 23182538441796383ull}}, {{5609963430089505792ull, 115912692208981918ull}}, {{2804981715044752896ull, 57956346104490959ull}}, {{10625862894377152256ull, 28978173052245479ull}}, {{14536303484043351808ull, 14489086526122739ull}}, {{17341285199088104960ull, 72445432630613698ull}}, {{8670642599544052480ull, 36222716315306849ull}}, {{13558693336626801920ull, 18111358157653424ull}}, {{12453234462005355264ull, 90556790788267123ull}}, {{15449989267857453312ull, 45278395394133561ull}}, {{16948366670783502336ull, 22639197697066780ull}}, {{10954857059079306240ull, 113195988485333904ull}}, {{5477428529539653120ull, 56597994242666952ull}}, {{2738714264769826560ull, 28298997121333476ull}}, {{13693571323849132800ull, 141494985606667380ull}}, {{6846785661924566272ull, 70747492803333690ull}}, {{3423392830962283008ull, 35373746401666845ull}}, {{10935068452335917312ull, 17686873200833422ull}}, {{17781854114260483840ull, 88434366004167112ull}}, {{8890927057130241792ull, 44217183002083556ull}}, {{4445463528565120768ull, 22108591501041778ull}}, {{3780573569116053248ull, 110542957505208891ull}}, {{11113658821412802304ull, 55271478752604445ull}}, {{14780201447561176832ull, 27635739376302222ull}}, {{114030942967678464ull, 138178696881511114ull}}, {{57015471483839232ull, 69089348440755557ull}}, {{9251879772596695296ull, 34544674220377778ull}}, {{4625939886298347520ull, 17272337110188889ull}}, {{4682955357782187008ull, 86361685550944446ull}}, {{2341477678891093504ull, 43180842775472223ull}}, {{10394110876300322560ull, 21590421387736111ull}}, {{15077066234082509568ull, 107952106938680557ull}}, {{16761905153896030464ull, 53976053469340278ull}}, {{8380952576948015104ull, 26988026734670139ull}}, {{5011274737320973312ull, 134940133673350697ull}}, {{11729009405515262464ull, 67470066836675348ull}}, {{5864504702757631232ull, 33735033418337674ull}}, {{2932252351378815488ull, 16867516709168837ull}}, {{14661261756894077952ull, 84337583545844185ull}}, {{16554002915301814784ull, 42168791772922092ull}}, {{8277001457650907392ull, 21084395886461046ull}}, {{4491519140835433728ull, 105421979432305232ull}}, {{2245759570417716736ull, 52710989716152616ull}}, {{1122879785208858368ull, 26355494858076308ull}}, {{5614398926044292352ull, 131777474290381540ull}}, {{2807199463022146048ull, 65888737145190770ull}}, {{1403599731511073024ull, 32944368572595385ull}}, {{9925171902610312192ull, 16472184286297692ull}}, {{12732371365632458496ull, 82360921431488462ull}}, {{6366185682816229120ull, 41180460715744231ull}}, {{12406464878262890240ull, 20590230357872115ull}}, {{6692092170185797376ull, 102951151789360578ull}}, {{3346046085092898560ull, 51475575894680289ull}}, {{10896395079401224960ull, 25737787947340144ull}}, {{17588487249587022336ull, 128688939736700722ull}}, {{8794243624793511168ull, 64344469868350361ull}}, {{13620493849251531264ull, 32172234934175180ull}}, {{6810246924625765632ull, 16086117467087590ull}}, {{15604490549419276800ull, 80430587335437951ull}}, {{17025617311564414208ull, 40215293667718975ull}}, {{17736180692636982784ull, 20107646833859487ull}}, {{14893927168346708224ull, 100538234169297439ull}}, {{16670335621028129792ull, 50269117084648719ull}}, {{17558539847368840704ull, 25134558542324359ull}}, {{14005722942005997312ull, 125672792711621799ull}}, {{16226233507857774336ull, 62836396355810899ull}}, {{17336488790783662848ull, 31418198177905449ull}}, {{17891616432246607104ull, 15709099088952724ull}}, {{15671105866394830080ull, 78545495444763624ull}}, {{7835552933197414912ull, 39272747722381812ull}}, {{3917776466598707456ull, 19636373861190906ull}}, {{1142138259283986176ull, 98181869305954531ull}}, {{9794441166496768768ull, 49090934652977265ull}}, {{14120592620103160064ull, 24545467326488632ull}}, {{15262730879387146496ull, 122727336632443163ull}}, {{16854737476548348928ull, 61363668316221581ull}}, {{17650740775128950272ull, 30681834158110790ull}}, {{8825370387564475136ull, 15340917079055395ull}}, {{7233363790403272448ull, 76704585395276977ull}}, {{12840053932056411904ull, 38352292697638488ull}}, {{6420026966028205824ull, 19176146348819244ull}}, {{13653390756431478528ull, 95880731744096221ull}}, {{16050067415070514944ull, 47940365872048110ull}}, {{8025033707535257344ull, 23970182936024055ull}}, {{3231680390257184512ull, 119850914680120277ull}}, {{10839212231983367936ull, 59925457340060138ull}}, {{5419606115991683840ull, 29962728670030069ull}}, {{11933175094850617600ull, 14981364335015034ull}}, {{4325643253124434176ull, 74906821675075173ull}}, {{11386193663416992768ull, 37453410837537586ull}}, {{5693096831708496384ull, 18726705418768793ull}}, {{10018740084832930816ull, 93633527093843966ull}}, {{5009370042416465408ull, 46816763546921983ull}}, {{11728057058063008512ull, 23408381773460991ull}}, {{3300053069186387712ull, 117041908867304958ull}}, {{1650026534593193728ull, 58520954433652479ull}}, {{10048385304151372544ull, 29260477216826239ull}}, {{14247564688930461952ull, 14630238608413119ull}}, {{15897591223523655936ull, 73151193042065598ull}}, {{7948795611761827840ull, 36575596521032799ull}}, {{13197769842735689728ull, 18287798260516399ull}}, {{10648616992549794048ull, 91438991302581998ull}}, {{5324308496274896896ull, 45719495651290999ull}}, {{11885526284992224256ull, 22859747825645499ull}}, {{4087399203832466944ull, 114298739128227498ull}}, {{2043699601916233472ull, 57149369564113749ull}}, {{10245221837812892416ull, 28574684782056874ull}}, {{14332621041645359360ull, 142873423910284372ull}}, {{7166310520822679552ull, 71436711955142186ull}}, {{3583155260411339776ull, 35718355977571093ull}}, {{11014949667060445696ull, 17859177988785546ull}}, {{18181260187883125504ull, 89295889943927732ull}}, {{9090630093941562624ull, 44647944971963866ull}}, {{4545315046970781184ull, 22323972485981933ull}}, {{4279831161144355328ull, 111619862429909666ull}}, {{2139915580572177664ull, 55809931214954833ull}}, {{10293329827140864512ull, 27904965607477416ull}}, {{14573160988285219840ull, 139524828037387082ull}}, {{7286580494142609920ull, 69762414018693541ull}}, {{12866662283926080768ull, 34881207009346770ull}}, {{6433331141963040256ull, 17440603504673385ull}}, {{13719911636105650176ull, 87203017523366926ull}}, {{6859955818052825088ull, 43601508761683463ull}}, {{12653349945881188352ull, 21800754380841731ull}}, {{7926517508277287168ull, 109003771904208658ull}}, {{3963258754138643456ull, 54501885952104329ull}}, {{11205001413924097536ull, 27250942976052164ull}}, {{684774848491833088ull, 136254714880260823ull}}, {{9565759461100692224ull, 68127357440130411ull}}, {{14006251767405121792ull, 34063678720065205ull}}, {{16226497920557336576ull, 17031839360032602ull}}, {{7345513307948477440ull, 85159196800163014ull}}, {{3672756653974238720ull, 42579598400081507ull}}, {{11059750363841895168ull, 21289799200040753ull}}, {{18405263671790372608ull, 106448996000203767ull}}, {{18426003872749961984ull, 53224498000101883ull}}, {{18436373973229756672ull, 26612249000050941ull}}, {{18394893571310577920ull, 133061245000254709ull}}, {{18420818822510064640ull, 66530622500127354ull}}, {{9210409411255032320ull, 33265311250063677ull}}, {{13828576742482291968ull, 16632655625031838ull}}, {{13802651491282805248ull, 83163278125159193ull}}, {{16124697782496178432ull, 41581639062579596ull}}, {{8062348891248089088ull, 20790819531289798ull}}, {{3418256308821342720ull, 103954097656448992ull}}, {{1709128154410671360ull, 51977048828224496ull}}, {{854564077205335552ull, 25988524414112248ull}}, {{4272820386026678528ull, 129942622070561240ull}}, {{2136410193013339136ull, 64971311035280620ull}}, {{1068205096506669568ull, 32485655517640310ull}}, {{534102548253334784ull, 16242827758820155ull}}, {{2670512741266673920ull, 81214138794100775ull}}, {{10558628407488112640ull, 40607069397050387ull}}, {{14502686240598832128ull, 20303534698525193ull}}, {{17173198981865506304ull, 101517673492625968ull}}, {{8586599490932753152ull, 50758836746312984ull}}, {{4293299745466376448ull, 25379418373156492ull}}, {{3019754653622331136ull, 126897091865782461ull}}, {{10733249363665941248ull, 63448545932891230ull}}, {{5366624681832970496ull, 31724272966445615ull}}, {{11906684377771260928ull, 15862136483222807ull}}, {{4193189667727650816ull, 79310682416114038ull}}, {{2096594833863825408ull, 39655341208057019ull}}, {{10271669453786688512ull, 19827670604028509ull}}, {{14464859121514339328ull, 99138353020142547ull}}, {{16455801597611945472ull, 49569176510071273ull}}, {{17451272835660748544ull, 24784588255035636ull}}, {{13469387883465536512ull, 123922941275178184ull}}, {{6734693941732768256ull, 61961470637589092ull}}, {{3367346970866384128ull, 30980735318794546ull}}, {{1683673485433191936ull, 15490367659397273ull}}, {{8418367427165960192ull, 77451838296986365ull}}, {{13432555750437755904ull, 38725919148493182ull}}, {{6716277875218877952ull, 19362959574246591ull}}, {{15134645302384838144ull, 96814797871232956ull}}, {{7567322651192419072ull, 48407398935616478ull}}, {{3783661325596209408ull, 24203699467808239ull}}, {{471562554271496192ull, 121018497339041196ull}}, {{235781277135748096ull, 60509248669520598ull}}, {{117890638567874048ull, 30254624334760299ull}}, {{9282317356138712832ull, 15127312167380149ull}}, {{9518098633274460928ull, 75636560836900747ull}}, {{13982421353492006144ull, 37818280418450373ull}}, {{16214582713600778752ull, 18909140209225186ull}}, {{7285937273165688320ull, 94545701046125934ull}}, {{3642968636582844160ull, 47272850523062967ull}}, {{11044856355146197760ull, 23636425261531483ull}}, {{18330793628311886080ull, 118182126307657417ull}}, {{18388768851010718720ull, 59091063153828708ull}}, {{9194384425505359360ull, 29545531576914354ull}}, {{4597192212752679680ull, 14772765788457177ull}}, {{4539216990053847040ull, 73863828942285886ull}}, {{2269608495026923520ull, 36931914471142943ull}}, {{10358176284368237568ull, 18465957235571471ull}}, {{14897393274422084608ull, 92329786177857357ull}}, {{16672068674065818112ull, 46164893088928678ull}}, {{8336034337032909056ull, 23082446544464339ull}}, {{4786683537745442048ull, 115412232722321697ull}}, {{11616713805727496704ull, 57706116361160848ull}}, {{5808356902863748352ull, 28853058180580424ull}}, {{2904178451431874048ull, 14426529090290212ull}}, {{14520892257159371008ull, 72132645451451060ull}}, {{7260446128579685376ull, 36066322725725530ull}}, {{3630223064289842688ull, 18033161362862765ull}}, {{18151115321449213696ull, 90165806814313825ull}}, {{18298929697579382528ull, 45082903407156912ull}}, {{9149464848789691136ull, 22541451703578456ull}}, {{8853836096529353472ull, 112707258517892282ull}}, {{4426918048264676608ull, 56353629258946141ull}}, {{11436831060987113984ull, 28176814629473070ull}}, {{1843923083806916096ull, 140884073147365353ull}}, {{10145333578758233856ull, 70442036573682676ull}}, {{5072666789379116800ull, 35221018286841338ull}}, {{2536333394689558272ull, 17610509143420669ull}}, {{12681666973447792128ull, 88052545717103345ull}}, {{15564205523578671872ull, 44026272858551672ull}}, {{7782102761789335808ull, 22013136429275836ull}}, {{2017025661527576576ull, 110065682146379182ull}}, {{1008512830763788288ull, 55032841073189591ull}}, {{9727628452236669952ull, 27516420536594795ull}}, {{11744654113764246528ull, 137582102682973977ull}}, {{15095699093736899072ull, 68791051341486988ull}}, {{7547849546868449536ull, 34395525670743494ull}}, {{3773924773434224640ull, 17197762835371747ull}}, {{422879793461572096ull, 85988814176858736ull}}, {{211439896730786048ull, 42994407088429368ull}}, {{105719948365392896ull, 21497203544214684ull}}, {{528599741826965248ull, 107486017721073420ull}}, {{264299870913482496ull, 53743008860536710ull}}, {{132149935456741120ull, 26871504430268355ull}}, {{660749677283706624ull, 134357522151341775ull}}, {{9553746875496628992ull, 67178761075670887ull}}, {{14000245474603090176ull, 33589380537835443ull}}, {{16223494774156320768ull, 16794690268917721ull}}, {{7330497575943398400ull, 83973451344588609ull}}, {{12888620824826475008ull, 41986725672294304ull}}, {{6444310412413237504ull, 20993362836147152ull}}, {{13774807988356635904ull, 104966814180735761ull}}, {{16110776031033093632ull, 52483407090367880ull}}, {{8055388015516546816ull, 26241703545183940ull}}, {{3383451930163631360ull, 131208517725919702ull}}, {{1691725965081815552ull, 65604258862959851ull}}, {{10069235019395683584ull, 32802129431479925ull}}, {{14257989546552617472ull, 16401064715739962ull}}, {{15949715511634433280ull, 82005323578699813ull}}, {{17198229792671992320ull, 41002661789349906ull}}, {{8599114896335996160ull, 20501330894674953ull}}, {{6102086334260877824ull, 102506654473374767ull}}, {{12274415203985214720ull, 51253327236687383ull}}, {{15360579638847383040ull, 25626663618343691ull}}, {{3015921899398709504ull, 128133318091718459ull}}, {{10731332986554130432ull, 64066659045859229ull}}, {{14589038530131841024ull, 32033329522929614ull}}, {{7294519265065920512ull, 16016664761464807ull}}, {{18025852251620050944ull, 80083323807324036ull}}, {{9012926125810025472ull, 40041661903662018ull}}, {{4506463062905012736ull, 20020830951831009ull}}, {{4085571240815512320ull, 100104154759155046ull}}, {{2042785620407756032ull, 50052077379577523ull}}, {{10244764847058653696ull, 25026038689788761ull}}, {{14330336087874166016ull, 125130193448943807ull}}, {{16388540080791858688ull, 62565096724471903ull}}, {{17417642077250705152ull, 31282548362235951ull}}, {{17932193075480128256ull, 15641274181117975ull}}, {{15873989082562435584ull, 78206370905589879ull}}, {{17160366578135993600ull, 39103185452794939ull}}, {{17803555325922772480ull, 19551592726397469ull}}, {{15230800334775656704ull, 97757963631987349ull}}, {{16838772204242604032ull, 48878981815993674ull}}, {{8419386102121302016ull, 24439490907996837ull}}, {{5203442363187407104ull, 122197454539984187ull}}, {{11825093218448479232ull, 61098727269992093ull}}, {{15135918646079015424ull, 30549363634996046ull}}, {{7567959323039507712ull, 15274681817498023ull}}, {{946308467778435584ull, 76373409087490117ull}}, {{9696526270743993600ull, 38186704543745058ull}}, {{4848263135371996672ull, 19093352271872529ull}}, {{5794571603150432256ull, 95466761359362646ull}}, {{2897285801575216128ull, 47733380679681323ull}}, {{10672014937642383872ull, 23866690339840661ull}}, {{16466586540792816128ull, 119333451699203307ull}}, {{17456665307251183872ull, 59666725849601653ull}}, {{17951704690480367616ull, 29833362924800826ull}}, {{8975852345240183808ull, 14916681462400413ull}}, {{7985773578781816064ull, 74583407312002067ull}}, {{13216258826245683712ull, 37291703656001033ull}}, {{15831501449977617664ull, 18645851828000516ull}}, {{5370530955049882368ull, 93229259140002584ull}}, {{2685265477524941056ull, 46614629570001292ull}}, {{1342632738762470400ull, 23307314785000646ull}}, {{6713163693812352768ull, 116536573925003230ull}}, {{3356581846906176256ull, 58268286962501615ull}}, {{10901662960307863808ull, 29134143481250807ull}}, {{14674203517008707584ull, 14567071740625403ull}}, {{18030785363914884096ull, 72835358703127018ull}}, {{9015392681957442048ull, 36417679351563509ull}}, {{13731068377833496832ull, 18208839675781754ull}}, {{13315109668038829568ull, 91044198378908773ull}}, {{15880926870874190592ull, 45522099189454386ull}}, {{7940463435437095168ull, 22761049594727193ull}}, {{2808829029766373120ull, 113805247973635967ull}}, {{10627786551737962240ull, 56902623986817983ull}}, {{14537265312723756800ull, 28451311993408991ull}}, {{17346094342490130176ull, 142256559967044958ull}}, {{8673047171245064960ull, 71128279983522479ull}}, {{13559895622477308160ull, 35564139991761239ull}}, {{16003319848093429760ull, 17782069995880619ull}}, {{6229622945628943360ull, 88910349979403099ull}}, {{12338183509669247488ull, 44455174989701549ull}}, {{15392463791689399552ull, 22227587494850774ull}}, {{3175342663608791296ull, 111137937474253874ull}}, {{1587671331804395520ull, 55568968737126937ull}}, {{10017207702756973568ull, 27784484368563468ull}}, {{13192550366365765120ull, 138922421842817342ull}}, {{6596275183182882560ull, 69461210921408671ull}}, {{12521509628446216960ull, 34730605460704335ull}}, {{15484126851077884160ull, 17365302730352167ull}}, {{3633657960551215360ull, 86826513651760839ull}}, {{11040201017130383360ull, 43413256825880419ull}}, {{14743472545419967488ull, 21706628412940209ull}}, {{18377130505971182848ull, 108533142064701048ull}}, {{9188565252985591296ull, 54266571032350524ull}}, {{4594282626492795648ull, 27133285516175262ull}}, {{4524669058754426880ull, 135666427580876311ull}}, {{11485706566231989248ull, 67833213790438155ull}}, {{14966225319970770432ull, 33916606895219077ull}}, {{16706484696840161024ull, 16958303447609538ull}}, {{9745447189362598656ull, 84791517238047694ull}}, {{4872723594681299200ull, 42395758619023847ull}}, {{11659733834195425280ull, 21197879309511923ull}}, {{2958436949848472576ull, 105989396547559618ull}}, {{1479218474924236288ull, 52994698273779809ull}}, {{9962981274316893952ull, 26497349136889904ull}}, {{12921418224165366528ull, 132486745684449522ull}}, {{6460709112082683136ull, 66243372842224761ull}}, {{12453726592896117248ull, 33121686421112380ull}}, {{6226863296448058624ull, 16560843210556190ull}}, {{12687572408530742016ull, 82804216052780951ull}}, {{15567158241120146688ull, 41402108026390475ull}}, {{17006951157414849024ull, 20701054013195237ull}}, {{11247779492236039424ull, 103505270065976189ull}}, {{14847261782972795392ull, 51752635032988094ull}}, {{7423630891486397696ull, 25876317516494047ull}}, {{224666310012885760ull, 129381587582470237ull}}, {{9335705191861218560ull, 64690793791235118ull}}, {{4667852595930609152ull, 32345396895617559ull}}, {{11557298334820080384ull, 16172698447808779ull}}, {{2446259452971747584ull, 80863492239043898ull}}, {{1223129726485873664ull, 40431746119521949ull}}, {{9834936900097712640ull, 20215873059760974ull}}, {{12281196353069460224ull, 101079365298804872ull}}, {{6140598176534729984ull, 50539682649402436ull}}, {{3070299088267364864ull, 25269841324701218ull}}, {{15351495441336825344ull, 126349206623506090ull}}, {{7675747720668412672ull, 63174603311753045ull}}, {{13061245897188982016ull, 31587301655876522ull}}, {{6530622948594490880ull, 15793650827938261ull}}, {{14206370669262903552ull, 78968254139691306ull}}, {{7103185334631451648ull, 39484127069845653ull}}, {{12774964704170501632ull, 19742063534922826ull}}, {{8534591299723853824ull, 98710317674614133ull}}, {{13490667686716702720ull, 49355158837307066ull}}, {{6745333843358351360ull, 24677579418653533ull}}, {{15279925143082205184ull, 123387897093267666ull}}, {{7639962571541102592ull, 61693948546633833ull}}, {{13043353322625327104ull, 30846974273316916ull}}, {{6521676661312663552ull, 15423487136658458ull}}, {{14161639232853766144ull, 77117435683292291ull}}, {{16304191653281658880ull, 38558717841646145ull}}, {{17375467863495605248ull, 19279358920823072ull}}, {{13090363022639819776ull, 96396794604115364ull}}, {{6545181511319909888ull, 48198397302057682ull}}, {{3272590755659954944ull, 24099198651028841ull}}, {{16362953778299774720ull, 120495993255144205ull}}, {{17404848926004663040ull, 60247996627572102ull}}, {{8702424463002331392ull, 30123998313786051ull}}, {{13574584268355941376ull, 15061999156893025ull}}, {{12532689120651053056ull, 75309995784465128ull}}, {{6266344560325526528ull, 37654997892232564ull}}, {{3133172280162763264ull, 18827498946116282ull}}, {{15665861400813816320ull, 94137494730581410ull}}, {{7832930700406908160ull, 47068747365290705ull}}, {{13139837387058229760ull, 23534373682645352ull}}, {{10358954714162494720ull, 117671868413226763ull}}, {{14402849393936023040ull, 58835934206613381ull}}, {{16424796733822787328ull, 29417967103306690ull}}, {{8212398366911393536ull, 14708983551653345ull}}, {{4168503687137865216ull, 73544917758266727ull}}, {{11307623880423708416ull, 36772458879133363ull}}, {{14877183977066629888ull, 18386229439566681ull}}, {{598943590494943744ull, 91931147197833409ull}}, {{9522843832102247680ull, 45965573598916704ull}}, {{4761421916051123712ull, 22982786799458352ull}}, {{5360365506546067456ull, 114913933997291761ull}}, {{11903554790127809536ull, 57456966998645880ull}}, {{5951777395063904768ull, 28728483499322940ull}}, {{11312142901609972224ull, 143642417496614701ull}}, {{14879443487659761920ull, 71821208748307350ull}}, {{7439721743829880832ull, 35910604374153675ull}}, {{12943232908769716224ull, 17955302187076837ull}}, {{9375932322719926528ull, 89776510935384188ull}}, {{4687966161359963136ull, 44888255467692094ull}}, {{2343983080679981568ull, 22444127733846047ull}}, {{11719915403399908352ull, 112220638669230235ull}}, {{15083329738554729984ull, 56110319334615117ull}}, {{16765036906132140800ull, 28055159667307558ull}}, {{10038208235822497536ull, 140275798336537794ull}}, {{5019104117911248640ull, 70137899168268897ull}}, {{11732924095810400000ull, 35068949584134448ull}}, {{5866462047905199872ull, 17534474792067224ull}}, {{10885566165816448768ull, 87672373960336121ull}}, {{14666155119763000064ull, 43836186980168060ull}}, {{7333077559881499904ull, 21918093490084030ull}}, {{18218643725697948928ull, 109590467450420151ull}}, {{18332693899703750144ull, 54795233725210075ull}}, {{18389718986706650880ull, 27397616862605037ull}}, {{18161618638695048192ull, 136988084313025189ull}}, {{18304181356202299904ull, 68494042156512594ull}}, {{9152090678101149952ull, 34247021078256297ull}}, {{13799417375905350656ull, 17123510539128148ull}}, {{13656854658398098944ull, 85617552695640743ull}}, {{16051799366053825280ull, 42808776347820371ull}}, {{17249271719881688320ull, 21404388173910185ull}}, {{12459382304570235904ull, 107021940869550929ull}}, {{15453063189139893760ull, 53510970434775464ull}}, {{7726531594569946880ull, 26755485217387732ull}}, {{1739169825430631168ull, 133777426086938662ull}}, {{869584912715315456ull, 66888713043469331ull}}, {{9658164493212433408ull, 33444356521734665ull}}, {{14052454283460992512ull, 16722178260867332ull}}, {{14922039196176308224ull, 83610891304336663ull}}, {{16684391634942929920ull, 41805445652168331ull}}, {{17565567854326240768ull, 20902722826084165ull}}, {{14040862976792997376ull, 104513614130420829ull}}, {{16243803525251274496ull, 52256807065210414ull}}, {{8121901762625637120ull, 26128403532605207ull}}, {{3716020665709083136ull, 130642017663026037ull}}, {{11081382369709317376ull, 65321008831513018ull}}, {{5540691184854658560ull, 32660504415756509ull}}, {{11993717629282105088ull, 16330252207878254ull}}, {{4628355925281870848ull, 81651261039391273ull}}, {{11537549999495711232ull, 40825630519695636ull}}, {{5768774999747855616ull, 20412815259847818ull}}, {{10397130925029726464ull, 102064076299239091ull}}, {{14421937499369638912ull, 51032038149619545ull}}, {{16434340786539595264ull, 25516019074809772ull}}, {{8384727637859770112ull, 127580095374048864ull}}, {{4192363818929884928ull, 63790047687024432ull}}, {{2096181909464942336ull, 31895023843512216ull}}, {{1048090954732471040ull, 15947511921756108ull}}, {{5240454773662356224ull, 79737559608780540ull}}, {{2620227386831177984ull, 39868779804390270ull}}, {{1310113693415588864ull, 19934389902195135ull}}, {{6550568467077945344ull, 99671949510975675ull}}, {{12498656270393748480ull, 49835974755487837ull}}, {{15472700172051650048ull, 24917987377743918ull}}, {{3576524565420043776ull, 124589936888719594ull}}, {{1788262282710021888ull, 62294968444359797ull}}, {{10117503178209786624ull, 31147484222179898ull}}, {{5058751589104893184ull, 15573742111089949ull}}, {{6847013871814915328ull, 77868710555449746ull}}, {{3423506935907457536ull, 38934355277724873ull}}, {{10935125504808504576ull, 19467177638862436ull}}, {{17782139376623419904ull, 97335888194312182ull}}, {{8891069688311709952ull, 48667944097156091ull}}, {{13668906881010630656ull, 24333972048578045ull}}, {{13004302183924499200ull, 121669860242890228ull}}, {{6502151091962249472ull, 60834930121445114ull}}, {{3251075545981124608ull, 30417465060722557ull}}, {{10848909809845338112ull, 15208732530361278ull}}, {{17351060901807587840ull, 76043662651806392ull}}, {{8675530450903793920ull, 38021831325903196ull}}, {{4337765225451896832ull, 19010915662951598ull}}, {{3242082053549933056ull, 95054578314757991ull}}, {{10844413063629742336ull, 47527289157378995ull}}, {{14645578568669646848ull, 23763644578689497ull}}, {{17887660622219580160ull, 118818222893447488ull}}, {{8943830311109789952ull, 59409111446723744ull}}, {{4471915155554894848ull, 29704555723361872ull}}, {{2235957577777447424ull, 14852277861680936ull}}, {{11179787888887237632ull, 74261389308404680ull}}, {{5589893944443618816ull, 37130694654202340ull}}, {{2794946972221809408ull, 18565347327101170ull}}, {{13974734861109047040ull, 92826736635505850ull}}, {{6987367430554523392ull, 46413368317752925ull}}, {{12717055752132037376ull, 23206684158876462ull}}, {{8245046539531532800ull, 116033420794382313ull}}, {{13345895306620542208ull, 58016710397191156ull}}, {{6672947653310270976ull, 29008355198595578ull}}, {{3336473826655135488ull, 14504177599297789ull}}, {{16682369133275677696ull, 72520887996488945ull}}, {{17564556603492614656ull, 36260443998244472ull}}, {{8782278301746307328ull, 18130221999122236ull}}, {{7017903361312433408ull, 90651109995611182ull}}, {{3508951680656216576ull, 45325554997805591ull}}, {{10977847877182884096ull, 22662777498902795ull}}, {{17995751238495317760ull, 113313887494513977ull}}, {{18221247656102434560ull, 56656943747256988ull}}, {{9110623828051217152ull, 28328471873628494ull}}, {{8659630992836983552ull, 141642359368142472ull}}, {{4329815496418491648ull, 70821179684071236ull}}, {{2164907748209245696ull, 35410589842035618ull}}, {{1082453874104622848ull, 17705294921017809ull}}, {{5412269370523114752ull, 88526474605089045ull}}, {{11929506722116333056ull, 44263237302544522ull}}, {{5964753361058166528ull, 22131618651272261ull}}, {{11377022731581281280ull, 110658093256361306ull}}, {{5688511365790640640ull, 55329046628180653ull}}, {{12067627719750096128ull, 27664523314090326ull}}, {{4997906377621825792ull, 138322616570451633ull}}, {{11722325225665688576ull, 69161308285225816ull}}, {{5861162612832844288ull, 34580654142612908ull}}, {{2930581306416422144ull, 17290327071306454ull}}, {{14652906532082110720ull, 86451635356532270ull}}, {{7326453266041055232ull, 43225817678266135ull}}, {{12886598669875303424ull, 21612908839133067ull}}, {{9092761128247862784ull, 108064544195665338ull}}, {{4546380564123931392ull, 54032272097832669ull}}, {{11496562318916741376ull, 27016136048916334ull}}, {{2142579373455052544ull, 135080680244581673ull}}, {{10294661723582301952ull, 67540340122290836ull}}, {{5147330861791150848ull, 33770170061145418ull}}, {{2573665430895575296ull, 16885085030572709ull}}, {{12868327154477877504ull, 84425425152863545ull}}, {{15657535614093714432ull, 42212712576431772ull}}, {{7828767807046857216ull, 21106356288215886ull}}, {{2250350887815183360ull, 105531781441079432ull}}, {{1125175443907591680ull, 52765890720539716ull}}, {{562587721953795840ull, 26382945360269858ull}}, {{2812938609768979200ull, 131914726801349290ull}}, {{1406469304884489472ull, 65957363400674645ull}}, {{9926606689297020416ull, 32978681700337322ull}}, {{4963303344648510208ull, 16489340850168661ull}}, {{6369772649532999936ull, 82446704250843306ull}}, {{3184886324766499840ull, 41223352125421653ull}}, {{10815815199238025728ull, 20611676062710826ull}}, {{17185587848771025664ull, 103058380313554132ull}}, {{8592793924385512704ull, 51529190156777066ull}}, {{4296396962192756224ull, 25764595078388533ull}}, {{3035240737254230528ull, 128822975391942666ull}}, {{1517620368627115264ull, 64411487695971333ull}}, {{9982182221168333312ull, 32205743847985666ull}}, {{4991091110584166656ull, 16102871923992833ull}}, {{6508711479211281920ull, 80514359619964166ull}}, {{3254355739605640960ull, 40257179809982083ull}}, {{10850549906657596160ull, 20128589904991041ull}}, {{17359261385868878336ull, 100642949524955207ull}}, {{17903002729789214976ull, 50321474762477603ull}}, {{18174873401749383168ull, 25160737381238801ull}}, {{17087390713908709888ull, 125803686906194009ull}}, {{17767067393809130752ull, 62901843453097004ull}}, {{8883533696904565248ull, 31450921726548502ull}}, {{4441766848452282624ull, 15725460863274251ull}}, {{3762090168551861760ull, 78627304316371256ull}}, {{1881045084275930880ull, 39313652158185628ull}}, {{940522542137965312ull, 19656826079092814ull}}, {{4702612710689827328ull, 98284130395464070ull}}, {{2351306355344913664ull, 49142065197732035ull}}, {{10399025214527232512ull, 24571032598866017ull}}, {{15101637925217059840ull, 122855162994330087ull}}, {{16774190999463305728ull, 61427581497165043ull}}, {{17610467536586428672ull, 30713790748582521ull}}, {{18028605805147990016ull, 15356895374291260ull}}, {{16356052730901744384ull, 76784476871456304ull}}, {{8178026365450872064ull, 38392238435728152ull}}, {{4089013182725435904ull, 19196119217864076ull}}, {{1998321839917628672ull, 95980596089320381ull}}, {{10222532956813590016ull, 47990298044660190ull}}, {{5111266478406795008ull, 23995149022330095ull}}, {{7109588318324423936ull, 119975745111650476ull}}, {{3554794159162211840ull, 59987872555825238ull}}, {{1777397079581105920ull, 29993936277912619ull}}, {{10112070576645328640ull, 14996968138956309ull}}, {{13666864735807540736ull, 74984840694781547ull}}, {{16056804404758546176ull, 37492420347390773ull}}, {{17251774239234048768ull, 18746210173695386ull}}, {{12471894901332037888ull, 93731050868476934ull}}, {{6235947450666018816ull, 46865525434238467ull}}, {{12341345762187785216ull, 23432762717119233ull}}, {{6366496589810271744ull, 117163813585596168ull}}, {{3183248294905135872ull, 58581906792798084ull}}, {{1591624147452567808ull, 29290953396399042ull}}, {{795812073726283776ull, 14645476698199521ull}}, {{3979060368631419648ull, 73227383490997605ull}}, {{11212902221170485504ull, 36613691745498802ull}}, {{5606451110585242624ull, 18306845872749401ull}}, {{9585511479216662528ull, 91534229363747006ull}}, {{4792755739608331264ull, 45767114681873503ull}}, {{11619749906658941440ull, 22883557340936751ull}}, {{2758517312166052608ull, 114417786704683758ull}}, {{1379258656083026176ull, 57208893352341879ull}}, {{9913001364896288768ull, 28604446676170939ull}}, {{12671518677062341632ull, 143022233380854697ull}}, {{15559131375385946624ull, 71511116690427348ull}}, {{7779565687692973312ull, 35755558345213674ull}}, {{3889782843846486528ull, 17877779172606837ull}}, {{1002170145522881536ull, 89388895863034186ull}}, {{501085072761440768ull, 44694447931517093ull}}, {{9473914573235496192ull, 22347223965758546ull}}, {{10476084718758377728ull, 111736119828792732ull}}, {{5238042359379188736ull, 55868059914396366ull}}, {{2619021179689594368ull, 27934029957198183ull}}, {{13095105898447972352ull, 139670149785990915ull}}, {{15770924986078761984ull, 69835074892995457ull}}, {{17108834529894156800ull, 34917537446497728ull}}, {{8554417264947078400ull, 17458768723248864ull}}, {{5878598177316288768ull, 87293843616244322ull}}, {{2939299088658144256ull, 43646921808122161ull}}, {{10693021581183847936ull, 21823460904061080ull}}, {{16571619758500136704ull, 109117304520305402ull}}, {{8285809879250068224ull, 54558652260152701ull}}, {{13366276976479809792ull, 27279326130076350ull}}, {{11491152661270395136ull, 136396630650381753ull}}, {{14968948367489973248ull, 68198315325190876ull}}, {{7484474183744986624ull, 34099157662595438ull}}, {{3742237091872493312ull, 17049578831297719ull}}, {{264441385652914944ull, 85247894156488596ull}}, {{132220692826457344ull, 42623947078244298ull}}, {{66110346413228544ull, 21311973539122149ull}}, {{330551732066143744ull, 106559867695610745ull}}, {{9388647902887847680ull, 53279933847805372ull}}, {{4694323951443923712ull, 26639966923902686ull}}, {{5024875683510067712ull, 133199834619513431ull}}, {{11735809878609809664ull, 66599917309756715ull}}, {{15091276976159680512ull, 33299958654878357ull}}, {{16769010524934616064ull, 16649979327439178ull}}, {{10058076329834874112ull, 83249896637195894ull}}, {{5029038164917436928ull, 41624948318597947ull}}, {{11737891119313494272ull, 20812474159298973ull}}, {{3349223375438816768ull, 104062370796494868ull}}, {{1674611687719408384ull, 52031185398247434ull}}, {{837305843859704064ull, 26015592699123717ull}}, {{4186529219298521088ull, 130077963495618585ull}}, {{11316636646504036352ull, 65038981747809292ull}}, {{5658318323252018176ull, 32519490873904646ull}}, {{2829159161626009088ull, 16259745436952323ull}}, {{14145795808130045440ull, 81298727184761615ull}}, {{16296269940919798528ull, 40649363592380807ull}}, {{17371507007314674944ull, 20324681796190403ull}}, {{13070558741735168768ull, 101623408980952019ull}}, {{15758651407722360064ull, 50811704490476009ull}}, {{17102697740715955712ull, 25405852245238004ull}}, {{11726512408741573120ull, 127029261226190024ull}}, {{5863256204370786560ull, 63514630613095012ull}}, {{2931628102185393152ull, 31757315306547506ull}}, {{1465814051092696576ull, 15878657653273753ull}}, {{7329070255463483136ull, 79393288266368765ull}}, {{12887907164586517248ull, 39696644133184382ull}}, {{6443953582293258496ull, 19848322066592191ull}}, {{13773023837756741888ull, 99241610332960956ull}}, {{6886511918878370816ull, 49620805166480478ull}}, {{3443255959439185408ull, 24810402583240239ull}}, {{17216279797195927552ull, 124052012916201195ull}}, {{17831511935452739584ull, 62026006458100597ull}}, {{18139128004581145600ull, 31013003229050298ull}}, {{9069564002290572800ull, 15506501614525149ull}}, {{8454331864033760768ull, 77532508072625747ull}}, {{13450537968871656192ull, 38766254036312873ull}}, {{15948641021290603776ull, 19383127018156436ull}}, {{5956228811614812928ull, 96915635090782184ull}}, {{2978114405807406336ull, 48457817545391092ull}}, {{1489057202903703040ull, 24228908772695546ull}}, {{7445286014518516224ull, 121144543863477730ull}}, {{3722643007259258112ull, 60572271931738865ull}}, {{11084693540484404736ull, 30286135965869432ull}}, {{5542346770242202368ull, 15143067982934716ull}}, {{9264989777501460480ull, 75715339914673581ull}}, {{13855866925605506048ull, 37857669957336790ull}}, {{6927933462802753024ull, 18928834978668395ull}}, {{16192923240304213504ull, 94644174893341976ull}}, {{8096461620152106752ull, 47322087446670988ull}}, {{4048230810076053248ull, 23661043723335494ull}}, {{1794409976670715392ull, 118305218616677471ull}}, {{10120577025190133504ull, 59152609308338735ull}}, {{14283660549449842432ull, 29576304654169367ull}}, {{16365202311579696896ull, 14788152327084683ull}}, {{8039035263060278784ull, 73940761635423419ull}}, {{13242889668384915200ull, 36970380817711709ull}}, {{15844816871047233280ull, 18485190408855854ull}}, {{5437108060397960704ull, 92425952044279274ull}}, {{2718554030198980352ull, 46212976022139637ull}}, {{10582649051954265856ull, 23106488011069818ull}}, {{16019757112352226816ull, 115532440055349092ull}}, {{8009878556176113408ull, 57766220027674546ull}}, {{4004939278088056576ull, 28883110013837273ull}}, {{11225841675898803968ull, 14441555006918636ull}}, {{788976158365366016ull, 72207775034593183ull}}, {{9617860116037458688ull, 36103887517296591ull}}, {{14032302094873505024ull, 18051943758648295ull}}, {{14821278253238871040ull, 90259718793241478ull}}, {{7410639126619435520ull, 45129859396620739ull}}, {{12928691600164493568ull, 22564929698310369ull}}, {{9303225779693812992ull, 112824648491551848ull}}, {{4651612889846906368ull, 56412324245775924ull}}, {{2325806444923453184ull, 28206162122887962ull}}, {{11629032224617266432ull, 141030810614439810ull}}, {{5814516112308633088ull, 70515405307219905ull}}, {{12130630093009092352ull, 35257702653609952ull}}, {{6065315046504546048ull, 17628851326804976ull}}, {{11879831158813179392ull, 88144256634024881ull}}, {{15163287616261365504ull, 44072128317012440ull}}, {{7581643808130682624ull, 22036064158506220ull}}, {{1014730893234310656ull, 110180320792531102ull}}, {{507365446617155328ull, 55090160396265551ull}}, {{9477054760163353344ull, 27545080198132775ull}}, {{10491785653397664000ull, 137725400990663877ull}}, {{14469264863553607680ull, 68862700495331938ull}}, {{7234632431776803840ull, 34431350247665969ull}}, {{12840688252743177728ull, 17215675123832984ull}}, {{8863209042587233792ull, 86078375619164923ull}}, {{13654976558148392704ull, 43039187809582461ull}}, {{16050860315928972032ull, 21519593904791230ull}}, {{6467325284806654464ull, 107597969523956154ull}}, {{3233662642403327232ull, 53798984761978077ull}}, {{10840203358056439296ull, 26899492380989038ull}}, {{17307528642863094016ull, 134497461904945192ull}}, {{8653764321431546880ull, 67248730952472596ull}}, {{4326882160715773440ull, 33624365476236298ull}}, {{2163441080357886720ull, 16812182738118149ull}}, {{10817205401789433600ull, 84060913690590745ull}}, {{14631974737749492480ull, 42030456845295372ull}}, {{7315987368874746112ull, 21015228422647686ull}}, {{18133192770664179968ull, 105076142113238431ull}}, {{18289968422186865664ull, 52538071056619215ull}}, {{18368356247948208640ull, 26269035528309607ull}}, {{18054804944902837248ull, 131345177641548039ull}}, {{18250774509306194432ull, 65672588820774019ull}}, {{18348759291507873024ull, 32836294410387009ull}}, {{18397751682608712192ull, 16418147205193504ull}}, {{18201782118205355008ull, 82090736025967524ull}}, {{9100891059102677504ull, 41045368012983762ull}}, {{4550445529551338752ull, 20522684006491881ull}}, {{4305483574047142144ull, 102613420032459406ull}}, {{2152741787023570944ull, 51306710016229703ull}}, {{10299742930366561280ull, 25653355008114851ull}}, {{14605226504413703680ull, 128266775040574257ull}}, {{16525985289061627648ull, 64133387520287128ull}}, {{8262992644530813696ull, 32066693760143564ull}}, {{4131496322265406720ull, 16033346880071782ull}}, {{2210737537617482752ull, 80166734400358911ull}}, {{10328740805663517184ull, 40083367200179455ull}}, {{14387742439686534400ull, 20041683600089727ull}}, {{16598479977304017408ull, 100208418000448638ull}}, {{8299239988652008704ull, 50104209000224319ull}}, {{13372992031180780032ull, 25052104500112159ull}}, {{11524727934775245824ull, 125260522500560798ull}}, {{5762363967387622912ull, 62630261250280399ull}}, {{12104554020548587264ull, 31315130625140199ull}}, {{15275649047129069312ull, 15657565312570099ull}}, {{2591268940807140608ull, 78287826562850499ull}}, {{10519006507258345984ull, 39143913281425249ull}}, {{14482875290483948800ull, 19571956640712624ull}}, {{17074144231291089664ull, 97859783203563123ull}}, {{17760444152500320512ull, 48929891601781561ull}}, {{18103594113104935936ull, 24464945800890780ull}}, {{16730994270686474240ull, 122324729004453904ull}}, {{8365497135343237120ull, 61162364502226952ull}}, {{4182748567671618560ull, 30581182251113476ull}}, {{2091374283835809280ull, 15290591125556738ull}}, {{10456871419179046400ull, 76452955627783690ull}}, {{5228435709589523200ull, 38226477813891845ull}}, {{11837589891649537280ull, 19113238906945922ull}}, {{3847717237119032064ull, 95566194534729613ull}}, {{11147230655414291712ull, 47783097267364806ull}}, {{5573615327707145728ull, 23891548633682403ull}}, {{9421332564826178048ull, 119457743168412016ull}}, {{4710666282413089024ull, 59728871584206008ull}}, {{2355333141206544384ull, 29864435792103004ull}}, {{1177666570603272192ull, 14932217896051502ull}}, {{5888332853016361216ull, 74661089480257510ull}}, {{2944166426508180480ull, 37330544740128755ull}}, {{10695455250108866048ull, 18665272370064377ull}}, {{16583788103125227520ull, 93326361850321887ull}}, {{17515266088417389568ull, 46663180925160943ull}}, {{17981005081063470592ull, 23331590462580471ull}}, {{16118049110479146496ull, 116657952312902359ull}}, {{17282396592094349056ull, 58328976156451179ull}}, {{17864570332901950208ull, 29164488078225589ull}}, {{18155657203305750784ull, 14582244039112794ull}}, {{16991309721690548224ull, 72911220195563974ull}}, {{8495654860845274112ull, 36455610097781987ull}}, {{13471199467277412864ull, 18227805048890993ull}}, {{12015765115258409472ull, 91139025244454968ull}}, {{6007882557629204736ull, 45569512622227484ull}}, {{3003941278814602240ull, 22784756311113742ull}}, {{15019706394073011968ull, 113923781555568710ull}}, {{7509853197036505856ull, 56961890777784355ull}}, {{12978298635373028608ull, 28480945388892177ull}}, {{9551260955736489216ull, 142404726944460888ull}}, {{4775630477868244480ull, 71202363472230444ull}}, {{2387815238934122240ull, 35601181736115222ull}}, {{1193907619467060992ull, 17800590868057611ull}}, {{5969538097335305728ull, 89002954340288055ull}}, {{12208141085522428672ull, 44501477170144027ull}}, {{15327442579615990016ull, 22250738585072013ull}}, {{2850236603241744384ull, 111253692925360069ull}}, {{10648490338475648000ull, 55626846462680034ull}}, {{5324245169237824000ull, 27813423231340017ull}}, {{8174481772479568384ull, 139067116156700086ull}}, {{4087240886239784192ull, 69533558078350043ull}}, {{11266992479974667776ull, 34766779039175021ull}}, {{14856868276842109696ull, 17383389519587510ull}}, {{497365089372342272ull, 86916947597937554ull}}, {{248682544686171136ull, 43458473798968777ull}}, {{9347713309197861376ull, 21729236899484388ull}}, {{9845078398570203648ull, 108646184497421942ull}}, {{4922539199285101824ull, 54323092248710971ull}}, {{11684641636497326592ull, 27161546124355485ull}}, {{3082975961357978880ull, 135807730621777428ull}}, {{1541487980678989312ull, 67903865310888714ull}}, {{770743990339494656ull, 33951932655444357ull}}, {{9608744032024523008ull, 16975966327722178ull}}, {{11150232012703512576ull, 84879831638610892ull}}, {{5575116006351756288ull, 42439915819305446ull}}, {{2787558003175878144ull, 21219957909652723ull}}, {{13937790015879390720ull, 106099789548263615ull}}, {{16192267044794471168ull, 53049894774131807ull}}, {{17319505559252011264ull, 26524947387065903ull}}, {{12810551501421850368ull, 132624736935329519ull}}, {{15628647787565700864ull, 66312368467664759ull}}, {{17037695930637626112ull, 33156184233832379ull}}, {{17742220002173588736ull, 16578092116916189ull}}, {{14924123716029738240ull, 82890460584580949ull}}, {{16685433894869644800ull, 41445230292290474ull}}, {{8342716947434822400ull, 20722615146145237ull}}, {{4820096589755009280ull, 103613075730726187ull}}, {{11633420331732280320ull, 51806537865363093ull}}, {{15040082202720915968ull, 25903268932681546ull}}, {{1413434718766373632ull, 129516344663407734ull}}, {{706717359383186688ull, 64758172331703867ull}}, {{9576730716546369024ull, 32379086165851933ull}}, {{14011737395127960320ull, 16189543082925966ull}}, {{14718454754511147264ull, 80947715414629833ull}}, {{16582599414110349312ull, 40473857707314916ull}}, {{8291299707055174656ull, 20236928853657458ull}}, {{4563010387856770304ull, 101184644268287292ull}}, {{2281505193928385024ull, 50592322134143646ull}}, {{1140752596964192512ull, 25296161067071823ull}}, {{5703762984820963072ull, 126480805335359115ull}}, {{12075253529265257216ull, 63240402667679557ull}}, {{15260998801487404288ull, 31620201333839778ull}}, {{7630499400743702016ull, 15810100666919889ull}}, {{1259008856299407872ull, 79050503334599447ull}}, {{9852876465004479744ull, 39525251667299723ull}}, {{14149810269357015552ull, 19762625833649861ull}}, {{15408819125656423680ull, 98813129168249308ull}}, {{7704409562828211712ull, 49406564584124654ull}}, {{3852204781414105856ull, 24703282292062327ull}}, {{814279833360977920ull, 123516411460311636ull}}, {{407139916680488960ull, 61758205730155818ull}}, {{203569958340244480ull, 30879102865077909ull}}, {{9325157016024898048ull, 15439551432538954ull}}, {{9732296932705387008ull, 77197757162694772ull}}, {{4866148466352693504ull, 38598878581347386ull}}, {{2433074233176346624ull, 19299439290673693ull}}, {{12165371165881733632ull, 96497196453368465ull}}, {{15306057619795642624ull, 48248598226684232ull}}, {{7653028809897821184ull, 24124299113342116ull}}, {{1371655902070003456ull, 120621495566710582ull}}, {{685827951035001600ull, 60310747783355291ull}}, {{9566286012372276480ull, 30155373891677645ull}}, {{14006515043040913920ull, 15077686945838822ull}}, {{14692342994075915776ull, 75388434729194113ull}}, {{16569543533892733696ull, 37694217364597056ull}}, {{8284771766946366720ull, 18847108682298528ull}}, {{4530370687312731136ull, 94235543411492642ull}}, {{2265185343656365568ull, 47117771705746321ull}}, {{10355964708682958592ull, 23558885852873160ull}}, {{14886335395995689728ull, 117794429264365802ull}}, {{7443167697997844736ull, 58897214632182901ull}}, {{12944955885853698048ull, 29448607316091450ull}}, {{6472477942926849024ull, 14724303658045725ull}}, {{13915645640924694016ull, 73621518290228626ull}}, {{6957822820462347008ull, 36810759145114313ull}}, {{12702283447085949184ull, 18405379572557156ull}}, {{8171185014301091584ull, 92026897862785783ull}}, {{13308964544005321472ull, 46013448931392891ull}}, {{15877854308857436416ull, 23006724465696445ull}}, {{5602295249448976640ull, 115033622328482229ull}}, {{12024519661579264000ull, 57516811164241114ull}}, {{6012259830789632000ull, 28758405582120557ull}}, {{11614555080238608640ull, 143792027910602786ull}}, {{5807277540119304192ull, 71896013955301393ull}}, {{12127010806914427904ull, 35948006977650696ull}}, {{6063505403457213952ull, 17974003488825348ull}}, {{11870782943576518400ull, 89870017444126741ull}}, {{15158763508643034880ull, 44935008722063370ull}}, {{7579381754321517312ull, 22467504361031685ull}}, {{1003420624188484096ull, 112337521805158427ull}}, {{9725082348949017856ull, 56168760902579213ull}}, {{14085913211329284608ull, 28084380451289606ull}}, {{15089333835517768960ull, 140421902256448033ull}}, {{16768038954613660160ull, 70210951128224016ull}}, {{8384019477306830080ull, 35105475564112008ull}}, {{4192009738653414912ull, 17552737782056004ull}}, {{2513304619557523712ull, 87763688910280021ull}}, {{10480024346633537536ull, 43881844455140010ull}}, {{5240012173316768768ull, 21940922227570005ull}}, {{7753316792874292480ull, 109704611137850026ull}}, {{3876658396437146112ull, 54852305568925013ull}}, {{11161701235073348864ull, 27426152784462506ull}}, {{468273954238089984ull, 137130763922312533ull}}, {{9457509013973820672ull, 68565381961156266ull}}, {{4728754506986910208ull, 34282690980578133ull}}, {{11587749290348230912ull, 17141345490289066ull}}, {{2598514230612500224ull, 85706727451445333ull}}, {{10522629152161025792ull, 42853363725722666ull}}, {{5261314576080512768ull, 21426681862861333ull}}, {{7859828806693012992ull, 107133409314306666ull}}, {{3929914403346506496ull, 53566704657153333ull}}, {{11188329238528028928ull, 26783352328576666ull}}, {{601413971511490560ull, 133916761642883333ull}}, {{9524079022610521088ull, 66958380821441666ull}}, {{4762039511305260544ull, 33479190410720833ull}}, {{11604391792507406080ull, 16739595205360416ull}}, {{2681726741408375552ull, 83697976026802083ull}}, {{10564235407558963456ull, 41848988013401041ull}}, {{14505489740634257408ull, 20924494006700520ull}}, {{17187216482042633216ull, 104622470033502603ull}}, {{17816980277876092416ull, 52311235016751301ull}}, {{18131862175792822016ull, 26155617508375650ull}}, {{16872334584125903616ull, 130778087541878254ull}}, {{8436167292062951680ull, 65389043770939127ull}}, {{13441455682886251520ull, 32694521885469563ull}}, {{15944099878297901568ull, 16347260942734781ull}}, {{5933523096651301888ull, 81736304713673909ull}}, {{12190133585180426752ull, 40868152356836954ull}}, {{6095066792590213376ull, 20434076178418477ull}}, {{12028589889241515264ull, 102170380892092386ull}}, {{6014294944620757504ull, 51085190446046193ull}}, {{12230519509165154560ull, 25542595223023096ull}}, {{5812365324697118208ull, 127712976115115483ull}}, {{12129554699203334912ull, 63856488057557741ull}}, {{15288149386456443136ull, 31928244028778870ull}}, {{7644074693228221440ull, 15964122014389435ull}}, {{1326885318722004736ull, 79820610071947177ull}}, {{9886814696215778048ull, 39910305035973588ull}}, {{4943407348107888896ull, 19955152517986794ull}}, {{6270292666829893888ull, 99775762589933971ull}}, {{12358518370269722624ull, 49887881294966985ull}}, {{15402631221989637120ull, 24943940647483492ull}}, {{3226179815109979648ull, 124719703237417464ull}}, {{1613089907554989824ull, 62359851618708732ull}}, {{806544953777494784ull, 31179925809354366ull}}, {{403272476888747264ull, 15589962904677183ull}}, {{2016362384443737344ull, 77949814523385915ull}}, {{10231553229076644352ull, 38974907261692957ull}}, {{14339148651393097984ull, 19487453630846478ull}}, {{16355511035836835328ull, 97437268154232393ull}}, {{17401127554773193472ull, 48718634077116196ull}}, {{8700563777386596608ull, 24359317038558098ull}}, {{6609330739513880320ull, 121796585192790492ull}}, {{3304665369756940032ull, 60898292596395246ull}}, {{1652332684878469888ull, 30449146298197623ull}}, {{10049538379294010624ull, 15224573149098811ull}}, {{13354203749050950912ull, 76122865745494057ull}}, {{15900473911380251136ull, 38061432872747028ull}}, {{7950236955690125568ull, 19030716436373514ull}}, {{2857696631031525120ull, 95153582181867572ull}}, {{1428848315515762432ull, 47576791090933786ull}}, {{714424157757881088ull, 23788395545466893ull}}, {{3572120788789406464ull, 118941977727334465ull}}, {{11009432431249478912ull, 59470988863667232ull}}, {{5504716215624739328ull, 29735494431833616ull}}, {{2752358107812369664ull, 14867747215916808ull}}, {{13761790539061848832ull, 74338736079584040ull}}, {{6880895269530924288ull, 37169368039792020ull}}, {{3440447634765462016ull, 18584684019896010ull}}, {{17202238173827310848ull, 92923420099480050ull}}, {{8601119086913655296ull, 46461710049740025ull}}, {{13523931580311603456ull, 23230855024870012ull}}, {{12279425680429362944ull, 116154275124350063ull}}, {{15363084877069457152ull, 58077137562175031ull}}, {{16904914475389504256ull, 29038568781087515ull}}, {{17675829274549527808ull, 14519284390543757ull}}, {{14592170077909433600ull, 72596421952718789ull}}, {{16519457075809492480ull, 36298210976359394ull}}, {{8259728537904746240ull, 18149105488179697ull}}, {{4405154542104628224ull, 90745527440898487ull}}, {{11425949307907089920ull, 45372763720449243ull}}, {{14936346690808320768ull, 22686381860224621ull}}, {{894757159203397632ull, 113431909301123109ull}}, {{9670750616456474624ull, 56715954650561554ull}}, {{4835375308228237312ull, 28357977325280777ull}}, {{5730132467431634944ull, 141789886626403886ull}}, {{2865066233715817472ull, 70894943313201943ull}}, {{10655905153712684544ull, 35447471656600971ull}}, {{14551324613711118080ull, 17723735828300485ull}}, {{17416390847426935552ull, 88618679141502428ull}}, {{8708195423713467648ull, 44309339570751214ull}}, {{4354097711856733696ull, 22154669785375607ull}}, {{3323744485574117632ull, 110773348926878036ull}}, {{1661872242787058688ull, 55386674463439018ull}}, {{830936121393529344ull, 27693337231719509ull}}, {{4154680606967647232ull, 138466686158597545ull}}, {{11300712340338599424ull, 69233343079298772ull}} }; static const int exponents_bid64[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 55, 56, 56, 56, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 171, 171, 171, 172, 172, 172, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 180, 181, 181, 181, 182, 182, 182, 183, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, 189, 189, 190, 190, 190, 191, 191, 191, 192, 192, 192, 192, 193, 193, 193, 194, 194, 194, 195, 195, 195, 195, 196, 196, 196, 197, 197, 197, 198, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 201, 202, 202, 202, 203, 203, 203, 204, 204, 204, 204, 205, 205, 205, 206, 206, 206, 207, 207, 207, 208, 208, 208, 208, 209, 209, 209, 210, 210, 210, 211, 211, 211, 211, 212, 212, 212, 213, 213, 213, 214, 214, 214, 214, 215, 215, 215, 216, 216, 216, 217, 217, 217, 217, 218, 218, 218, 219, 219, 219, 220, 220, 220, 220, 221, 221, 221, 222, 222, 222, 223, 223, 223, 223, 224, 224, 224, 225, 225, 225, 226, 226, 226, 226, 227, 227, 227, 228, 228, 228, 229, 229, 229, 229, 230, 230, 230, 231, 231, 231, 232, 232, 232, 232, 233, 233, 233, 234, 234, 234, 235, 235, 235, 236, 236, 236, 236, 237, 237, 237, 238, 238, 238, 239, 239, 239, 239, 240, 240, 240, 241, 241, 241, 242, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, 251, 251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 254, 254, 255, 255, 255, 256, 256, 256, 257, 257, 257, 257, 258, 258, 258, 259, 259, 259, 260, 260, 260, 260, 261, 261, 261, 262, 262, 262, 263, 263, 263, 263, 264, 264, 264, 265, 265, 265, 266, 266, 266, 267, 267, 267, 267, 268, 268, 268, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 272, 272, 272, 273, 273, 273, 273, 274, 274, 274, 275, 275, 275, 276, 276, 276, 276, 277, 277, 277, 278, 278, 278, 279, 279, 279, 279, 280, 280, 280, 281, 281, 281, 282, 282, 282, 282, 283, 283, 283, 284, 284, 284, 285, 285, 285, 285, 286, 286, 286, 287, 287, 287, 288, 288, 288, 288, 289, 289, 289, 290, 290, 290, 291, 291, 291, 291, 292, 292, 292, 293, 293, 293, 294, 294, 294, 295, 295, 295, 295, 296, 296, 296, 297, 297, 297, 298, 298, 298, 298, 299, 299, 299, 300, 300, 300, 301, 301, 301, 301, 302, 302, 302, 303, 303, 303, 304, 304, 304, 304, 305, 305, 305, 306, 306, 306, 307, 307, 307, 307, 308, 308, 308, 309, 309, 309, 310, 310, 310, 310, 311, 311, 311, 312, 312, 312, 313, 313, 313, 313, 314, 314, 314, 315, 315, 315, 316, 316, 316, 316, 317, 317, 317, 318, 318, 318, 319, 319, 319, 319, 320, 320, 320, 321, 321, 321, 322, 322, 322, 322, 323, 323, 323, 324, 324, 324, 325, 325, 325, 326, 326, 326, 326, 327, 327, 327, 328, 328, 328, 329, 329, 329, 329, 330, 330, 330, 331, 331, 331, 332, 332, 332, 332, 333, 333, 333, 334, 334, 334, 335, 335, 335, 335, 336, 336, 336, 337, 337, 337, 338, 338, 338, 338, 339, 339, 339, 340, 340, 340, 341, 341, 341, 341, 342, 342, 342, 343, 343, 343, 344, 344, 344, 344, 345, 345, 345, 346, 346, 346, 347, 347, 347, 347, 348, 348, 348, 349, 349, 349, 350, 350, 350, 350, 351, 351, 351, 352, 352, 352, 353, 353, 353, 354, 354, 354, 354, 355, 355, 355, 356, 356, 356, 357, 357, 357, 357, 358, 358, 358, 359, 359, 359, 360, 360, 360, 360, 361, 361, 361, 362, 362, 362, 363, 363, 363, 363, 364, 364, 364, 365, 365, 365, 366, 366, 366, 366, 367, 367, 367, 368, 368, 368, 369, 369, 369, 369, 370, 370, 370, 371, 371, 371, 372, 372, 372, 372, 373, 373, 373, 374, 374, 374, 375, 375, 375, 375, 376, 376, 376, 377, 377, 377, 378, 378, 378, 378, 379, 379, 379, 380, 380, 380, 381, 381, 381, 381, 382, 382, 382, 383, 383, 383, 384, 384, 384, 385, 385, 385, 385, 386, 386, 386, 387, 387, 387, 388, 388, 388, 388, 389, 389, 389, 390, 390, 390, 391, 391, 391, 391, 392, 392, 392, 393, 393, 393, 394, 394, 394, 394, 395, 395, 395, 396, 396, 396, 397, 397, 397, 397, 398, 398, 398, 399, 399, 399, 400, 400, 400, 400, 401, 401, 401, 402, 402, 402, 403, 403, 403, 403, 404, 404, 404, 405, 405, 405, 406, 406, 406, 406, 407, 407, 407, 408, 408, 408, 409, 409, 409, 409, 410, 410, 410, 411, 411, 411, 412, 412, 412, 413, 413, 413, 413, 414, 414, 414, 415, 415, 415, 416, 416, 416, 416, 417, 417, 417, 418, 418, 418, 419, 419, 419, 419, 420, 420, 420, 421, 421, 421, 422, 422, 422, 422, 423, 423, 423, 424, 424, 424, 425, 425, 425, 425, 426, 426, 426, 427, 427, 427, 428, 428, 428, 428, 429, 429, 429, 430, 430, 430, 431, 431, 431, 431, 432, 432, 432, 433, 433, 433, 434, 434, 434, 434, 435, 435, 435, 436, 436, 436, 437, 437, 437, 437, 438, 438, 438, 439, 439, 439, 440, 440, 440, 441, 441, 441, 441, 442, 442, 442, 443, 443, 443, 444, 444, 444, 444, 445, 445, 445, 446, 446, 446, 447, 447, 447, 447, 448, 448, 448, 449, 449, 449, 450, 450, 450, 450, 451, 451, 451, 452, 452, 452, 453, 453, 453, 453, 454, 454, 454, 455, 455, 455, 456, 456, 456, 456, 457, 457, 457, 458, 458, 458, 459, 459, 459, 459, 460, 460, 460, 461, 461, 461, 462, 462, 462, 462, 463, 463, 463, 464, 464, 464, 465, 465, 465, 465, 466, 466, 466, 467, 467, 467, 468, 468, 468, 468, 469, 469, 469, 470, 470, 470, 471, 471, 471, 472, 472, 472, 472, 473, 473, 473, 474, 474, 474, 475, 475, 475, 475, 476, 476, 476, 477, 477, 477, 478, 478, 478, 478, 479, 479, 479, 480, 480, 480, 481, 481, 481, 481, 482, 482, 482, 483, 483, 483, 484, 484, 484, 484, 485, 485, 485, 486, 486, 486, 487, 487, 487, 487, 488, 488, 488, 489, 489, 489, 490, 490, 490, 490, 491, 491, 491, 492, 492, 492, 493, 493, 493, 493, 494, 494, 494, 495, 495, 495, 496, 496, 496, 496, 497, 497, 497, 498, 498, 498, 499, 499, 499, 500, 500, 500, 500, 501, 501, 501, 502, 502, 502, 503, 503, 503, 503, 504, 504, 504, 505, 505, 505, 506, 506, 506, 506, 507, 507, 507, 508, 508, 508, 509, 509, 509, 509, 510, 510, 510, 511, 511, 511, 512, 512, 512, 512, 513, 513, 513, 514, 514, 514, 515, 515, 515, 515, 516, 516, 516, 517, 517, 517, 518, 518, 518, 518, 519, 519, 519, 520, 520, 520, 521, 521, 521, 521, 522, 522, 522, 523, 523, 523, 524, 524, 524, 524, 525, 525, 525, 526, 526, 526, 527, 527, 527, 527, 528, 528, 528, 529, 529, 529, 530, 530, 530, 531, 531, 531, 531, 532, 532, 532, 533, 533, 533, 534, 534, 534, 534, 535, 535, 535, 536, 536, 536, 537, 537, 537, 537, 538, 538, 538, 539, 539, 539, 540, 540, 540, 540, 541, 541, 541, 542, 542, 542, 543, 543, 543, 543, 544, 544, 544, 545, 545, 545, 546, 546, 546, 546, 547, 547, 547, 548, 548, 548, 549, 549, 549, 549, 550, 550, 550, 551, 551, 551, 552, 552, 552, 552, 553, 553, 553, 554, 554, 554, 555, 555, 555, 555, 556, 556, 556, 557, 557, 557, 558, 558, 558, 559, 559, 559, 559, 560, 560, 560, 561, 561, 561, 562, 562, 562, 562, 563, 563, 563, 564, 564, 564, 565, 565, 565, 565, 566, 566, 566, 567, 567, 567, 568, 568, 568, 568, 569, 569, 569, 570, 570, 570, 571, 571, 571, 571, 572, 572, 572, 573, 573, 573, 574, 574, 574, 574, 575, 575, 575, 576, 576, 576, 577, 577, 577, 577, 578, 578, 578, 579, 579, 579, 580, 580, 580, 580, 581, 581, 581, 582, 582, 582, 583, 583, 583, 583, 584, 584, 584, 585, 585, 585, 586, 586, 586, 587, 587, 587, 587, 588, 588, 588, 589, 589, 589, 590, 590, 590, 590, 591, 591, 591, 592, 592, 592, 593, 593, 593, 593, 594, 594, 594, 595, 595, 595, 596, 596, 596, 596, 597, 597, 597, 598, 598, 598, 599, 599, 599, 599, 600, 600, 600, 601, 601, 601, 602, 602, 602, 602, 603, 603, 603, 604, 604, 604, 605, 605, 605, 605, 606, 606, 606, 607, 607, 607, 608, 608, 608, 608, 609, 609, 609, 610, 610, 610, 611, 611, 611, 611, 612, 612, 612, 613, 613, 613, 614, 614, 614, 614, 615, 615, 615, 616, 616, 616, 617, 617, 617, 618, 618, 618, 618, 619, 619, 619, 620, 620, 620, 621, 621, 621, 621, 622, 622, 622, 623, 623, 623, 624, 624, 624, 624, 625, 625, 625, 626, 626, 626, 627, 627, 627, 627, 628, 628, 628, 629, 629, 629, 630, 630, 630, 630, 631, 631, 631, 632, 632, 632, 633, 633, 633, 633, 634, 634, 634, 635, 635, 635, 636, 636, 636, 636, 637, 637, 637, 638, 638, 638, 639, 639, 639, 639, 640, 640, 640, 641, 641, 641, 642, 642, 642, 642, 643, 643, 643, 644, 644, 644, 645, 645, 645, 646, 646, 646, 646, 647, 647, 647, 648, 648, 648, 649, 649, 649, 649, 650, 650, 650, 651, 651, 651, 652, 652, 652, 652, 653, 653, 653, 654, 654, 654, 655, 655, 655, 655, 656, 656, 656, 657, 657, 657, 658, 658, 658, 658, 659, 659, 659, 660, 660, 660, 661, 661, 661, 661, 662, 662, 662, 663, 663, 663, 664, 664, 664, 664, 665, 665, 665, 666, 666, 666, 667, 667, 667, 667, 668, 668, 668, 669, 669, 669, 670, 670, 670, 670, 671, 671, 671, 672, 672, 672, 673, 673, 673, 673, 674, 674, 674, 675, 675, 675, 676, 676, 676, 677, 677, 677, 677, 678, 678, 678, 679, 679, 679, 680, 680, 680, 680, 681, 681, 681, 682, 682, 682, 683, 683, 683, 683, 684, 684, 684, 685, 685, 685, 686, 686, 686, 686, 687, 687, 687, 688, 688, 688, 689, 689, 689, 689, 690, 690, 690, 691, 691, 691, 692, 692, 692, 692, 693, 693, 693, 694, 694, 694, 695, 695, 695, 695, 696, 696, 696, 697, 697, 697, 698, 698, 698, 698, 699, 699, 699, 700, 700, 700, 701, 701, 701, 701, 702, 702, 702, 703, 703, 703, 704, 704, 704, 705, 705, 705, 705, 706, 706, 706, 707, 707, 707, 708, 708, 708, 708, 709, 709, 709, 710, 710, 710, 711, 711, 711, 711, 712, 712, 712, 713, 713, 713, 714, 714, 714, 714, 715, 715, 715, 716, 716, 716, 717, 717, 717, 717, 718, 718, 718, 719, 719, 719, 720, 720, 720, 720, 721, 721, 721, 722, 722, 722, 723, 723, 723, 723, 724, 724, 724, 725, 725, 725, 726, 726, 726, 726, 727, 727, 727, 728, 728, 728, 729, 729, 729, 729, 730, 730, 730, 731, 731, 731, 732, 732, 732, 733, 733, 733, 733, 734, 734, 734, 735, 735, 735, 736, 736, 736, 736, 737, 737, 737, 738, 738, 738, 739, 739, 739, 739, 740, 740, 740, 741, 741, 741, 742, 742, 742, 742, 743, 743, 743, 744, 744, 744, 745, 745, 745, 745, 746, 746, 746, 747, 747, 747, 748, 748, 748, 748, 749, 749, 749, 750, 750, 750, 751, 751, 751, 751, 752, 752, 752, 753, 753, 753, 754, 754, 754, 754, 755, 755, 755, 756, 756, 756, 757, 757, 757, 757, 758, 758, 758, 759, 759, 759, 760, 760, 760, 760, 761, 761, 761, 762, 762, 762, 763, 763, 763, 764, 764, 764, 764, 765, 765, 765, 766, 766, 766, 767, 767, }; static const UINT256 multipliers1_bid64[] = { {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{0ull, 0ull, 0ull, 0ull}}, {{11950291386221365447ull, 9908758460416160234ull, 6069031768864303422ull, 2518694348665986494ull}}, {{5453838698733179278ull, 1370772847122768853ull, 12138063537728606845ull, 5037388697331972988ull}}, {{10907677397466358555ull, 2741545694245537706ull, 5829383001747662074ull, 10074777394663945977ull}}, {{9560233108977092358ull, 4237657953591017864ull, 8544574229833353061ull, 2014955478932789195ull}}, {{673722144244633099ull, 8475315907182035729ull, 17089148459666706122ull, 4029910957865578390ull}}, {{1347444288489266198ull, 16950631814364071458ull, 15731552845623860628ull, 8059821915731156781ull}}, {{7648186487181673886ull, 18147521621840455584ull, 6835659383866682448ull, 1611964383146231356ull}}, {{15296372974363347772ull, 17848299169971359552ull, 13671318767733364897ull, 3223928766292462712ull}}, {{12146001875017143928ull, 17249854266233167489ull, 8895893461757178179ull, 6447857532584925425ull}}, {{13497246819229159756ull, 18207366112214274790ull, 1779178692351435635ull, 1289571506516985085ull}}, {{8547749564748767895ull, 17967988150718997965ull, 3558357384702871271ull, 2579143013033970170ull}}, {{17095499129497535789ull, 17489232227728444314ull, 7116714769405742543ull, 5158286026067940340ull}}, {{15744254185285519961ull, 16531720381747337013ull, 14233429538811485087ull, 10316572052135880680ull}}, {{3148850837057103993ull, 10685041705833288049ull, 2846685907762297017ull, 2063314410427176136ull}}, {{6297701674114207985ull, 2923339337957024482ull, 5693371815524594035ull, 4126628820854352272ull}}, {{12595403348228415969ull, 5846678675914048964ull, 11386743631049188070ull, 8253257641708704544ull}}, {{13587127113871414164ull, 15926730994150451085ull, 17034743985177478906ull, 1650651528341740908ull}}, {{8727510154033276711ull, 13406717914591350555ull, 15622743896645406197ull, 3301303056683481817ull}}, {{17455020308066553422ull, 8366691755473149494ull, 12798743719581260779ull, 6602606113366963635ull}}, {{14559050505839041654ull, 16430733610062271191ull, 2559748743916252155ull, 1320521222673392727ull}}, {{10671356937968531692ull, 14414723146414990767ull, 5119497487832504311ull, 2641042445346785454ull}}, {{2895969802227511768ull, 10382702219120429919ull, 10238994975665008623ull, 5282084890693570908ull}}, {{5791939604455023535ull, 2318660364531308222ull, 2031245877620465631ull, 10564169781387141817ull}}, {{1158387920891004707ull, 11531778517131992614ull, 7784946805007913772ull, 2112833956277428363ull}}, {{2316775841782009414ull, 4616812960554433612ull, 15569893610015827545ull, 4225667912554856726ull}}, {{4633551683564018828ull, 9233625921108867224ull, 12693043146322103474ull, 8451335825109713453ull}}, {{4616059151454714089ull, 9225422813705594091ull, 13606655073490151664ull, 1690267165021942690ull}}, {{9232118302909428178ull, 4101553701636566ull, 8766566073270751713ull, 3380534330043885381ull}}, {{17492532109304740ull, 8203107403273133ull, 17533132146541503426ull, 6761068660087770762ull}}, {{3692847321163771272ull, 11069687065706385596ull, 10885324058792121331ull, 1352213732017554152ull}}, {{7385694642327542543ull, 3692630057703219576ull, 3323904043874691047ull, 2704427464035108305ull}}, {{14771389284655085085ull, 7385260115406439152ull, 6647808087749382094ull, 5408854928070216610ull}}, {{11096034495600618553ull, 14770520230812878305ull, 13295616175498764188ull, 10817709856140433220ull}}, {{13287253343345854681ull, 14022150490388306630ull, 2659123235099752837ull, 2163541971228086644ull}}, {{8127762612982157745ull, 9597556907067061645ull, 5318246470199505675ull, 4327083942456173288ull}}, {{16255525225964315489ull, 748369740424571674ull, 10636492940399011351ull, 8654167884912346576ull}}, {{6940453859934773421ull, 7528371577568734981ull, 5816647402821712593ull, 1730833576982469315ull}}, {{13880907719869546842ull, 15056743155137469962ull, 11633294805643425186ull, 3461667153964938630ull}}, {{9315071366029542068ull, 11666742236565388309ull, 4819845537577298757ull, 6923334307929877261ull}}, {{9241711902689729060ull, 13401394891538808631ull, 4653317922257370074ull, 1384666861585975452ull}}, {{36679731669906504ull, 8356045709368065647ull, 9306635844514740149ull, 2769333723171950904ull}}, {{73359463339813008ull, 16712091418736131294ull, 166527615319928682ull, 5538667446343901809ull}}, {{146718926679626015ull, 14977438763762710972ull, 333055230639857365ull, 11077334892687803618ull}}, {{29343785335925203ull, 14063534196978273164ull, 11134657490353702442ull, 2215466978537560723ull}}, {{58687570671850406ull, 9680324320246994712ull, 3822570906997853269ull, 4430933957075121447ull}}, {{117375141343700812ull, 913904566784437808ull, 7645141813995706539ull, 8861867914150242894ull}}, {{3712823843010650486ull, 11250827357582618531ull, 16286423621766782600ull, 1772373582830048578ull}}, {{7425647686021300972ull, 4054910641455685446ull, 14126103169824013585ull, 3544747165660097157ull}}, {{14851295372042601943ull, 8109821282911370892ull, 9805462265938475554ull, 7089494331320194315ull}}, {{6659607889150430712ull, 16379359515549915471ull, 1961092453187695110ull, 1417898866264038863ull}}, {{13319215778300861424ull, 14311974957390279326ull, 3922184906375390221ull, 2835797732528077726ull}}, {{8191687482892171231ull, 10177205841071007037ull, 7844369812750780443ull, 5671595465056155452ull}}, {{16383374965784342462ull, 1907667608432462458ull, 15688739625501560887ull, 11343190930112310904ull}}, {{18034070252124509786ull, 4070882336428402814ull, 17895143184067953470ull, 2268638186022462180ull}}, {{17621396430539467955ull, 8141764672856805629ull, 17343542294426355324ull, 4537276372044924361ull}}, {{16796048787369384293ull, 16283529345713611259ull, 16240340515143159032ull, 9074552744089848723ull}}, {{18116605016441518152ull, 3256705869142722251ull, 14316114547254362776ull, 1814910548817969744ull}}, {{17786465959173484687ull, 6513411738285444503ull, 10185485020799173936ull, 3629821097635939489ull}}, {{17126187844637417758ull, 13026823476570889007ull, 1924225967888796256ull, 7259642195271878979ull}}, {{10803935198411304198ull, 2605364695314177801ull, 15142240452545400544ull, 1451928439054375795ull}}, {{3161126323113056780ull, 5210729390628355603ull, 11837736831381249472ull, 2903856878108751591ull}}, {{6322252646226113560ull, 10421458781256711206ull, 5228729589052947328ull, 5807713756217503183ull}}, {{12644505292452227119ull, 2396173488803870796ull, 10457459178105894657ull, 11615427512435006366ull}}, {{17286296317458086717ull, 11547281141986505128ull, 5780840650363089254ull, 2323085502487001273ull}}, {{16125848561206621817ull, 4647818210263458641ull, 11561681300726178509ull, 4646171004974002546ull}}, {{13804953048703692018ull, 9295636420526917283ull, 4676618527742805402ull, 9292342009948005093ull}}, {{13829037053966469374ull, 1859127284105383456ull, 12003370149774292050ull, 1858468401989601018ull}}, {{9211330034223387131ull, 3718254568210766913ull, 5559996225839032484ull, 3716936803979202037ull}}, {{18422660068446774261ull, 7436509136421533826ull, 11119992451678064968ull, 7433873607958404074ull}}, {{14752578457915085822ull, 8865999456768127411ull, 16981393749303254286ull, 1486774721591680814ull}}, {{11058412842120620028ull, 17731998913536254823ull, 15516043424896956956ull, 2973549443183361629ull}}, {{3670081610531688440ull, 17017253753362958031ull, 12585342776084362297ull, 5947098886366723259ull}}, {{7340163221063376879ull, 15587763433016364446ull, 6723941478459172979ull, 11894197772733446519ull}}, {{16225427903180316669ull, 14185599130829003858ull, 16102183554659475888ull, 2378839554546689303ull}}, {{14004111732651081721ull, 9924454187948456101ull, 13757623035609400161ull, 4757679109093378607ull}}, {{9561479391592611826ull, 1402164302187360587ull, 9068501997509248707ull, 9515358218186757215ull}}, {{16669691137286163658ull, 7659130489921292763ull, 1813700399501849741ull, 1903071643637351443ull}}, {{14892638200862775700ull, 15318260979842585527ull, 3627400799003699482ull, 3806143287274702886ull}}, {{11338532328015999784ull, 12189777885975619439ull, 7254801598007398965ull, 7612286574549405772ull}}, {{5957055280345110280ull, 9816653206678944534ull, 8829657949085300439ull, 1522457314909881154ull}}, {{11914110560690220560ull, 1186562339648337452ull, 17659315898170600879ull, 3044914629819762308ull}}, {{5381477047670889504ull, 2373124679296674905ull, 16871887722631650142ull, 6089829259639524617ull}}, {{10762954095341779008ull, 4746249358593349810ull, 15297031371553748668ull, 12179658519279049235ull}}, {{13220637263294086772ull, 12017296315944400931ull, 3059406274310749733ull, 2435931703855809847ull}}, {{7994530452878621927ull, 5587848558179250247ull, 6118812548621499467ull, 4871863407711619694ull}}, {{15989060905757243853ull, 11175697116358500494ull, 12237625097242998934ull, 9743726815423239388ull}}, {{6887160995893359094ull, 9613837052755520745ull, 13515571463674330756ull, 1948745363084647877ull}}, {{13774321991786718188ull, 780930031801489874ull, 8584398853639109897ull, 3897490726169295755ull}}, {{9101899909863884759ull, 1561860063602979749ull, 17168797707278219794ull, 7794981452338591510ull}}, {{12888426426198507922ull, 15069767271688237242ull, 3433759541455643958ull, 1558996290467718302ull}}, {{7330108778687464227ull, 11692790469666922869ull, 6867519082911287917ull, 3117992580935436604ull}}, {{14660217557374928454ull, 4938836865624294122ull, 13735038165822575835ull, 6235985161870873208ull}}, {{10873691041040305291ull, 9877673731248588245ull, 9023332257935600054ull, 12471970323741746417ull}}, {{5864087022949971382ull, 5664883560991627972ull, 9183364081070940657ull, 2494394064748349283ull}}, {{11728174045899942763ull, 11329767121983255944ull, 18366728162141881314ull, 4988788129496698566ull}}, {{5009604018090333910ull, 4212790170256960273ull, 18286712250574211013ull, 9977576258993397133ull}}, {{15759316062585708075ull, 4531906848793302377ull, 14725388894340573172ull, 1995515251798679426ull}}, {{13071888051461864534ull, 9063813697586604755ull, 11004033714971594728ull, 3991030503597358853ull}}, {{7697032029214177451ull, 18127627395173209511ull, 3561323356233637840ull, 7982061007194717707ull}}, {{12607452850068566460ull, 11004223108518462548ull, 8090962300730548214ull, 1596412201438943541ull}}, {{6768161626427581304ull, 3561702143327373481ull, 16181924601461096429ull, 3192824402877887082ull}}, {{13536323252855162607ull, 7123404286654746962ull, 13917105129212641242ull, 6385648805755774165ull}}, {{8625902432000773598ull, 14246808573309493925ull, 9387466184715730868ull, 12771297611511548331ull}}, {{16482575745367796013ull, 17606756973629540077ull, 5566842051685056496ull, 2554259522302309666ull}}, {{14518407417026040409ull, 16766769873549528539ull, 11133684103370112993ull, 5108519044604619332ull}}, {{10590070760342529202ull, 15086795673389505463ull, 3820624133030674371ull, 10217038089209238665ull}}, {{16875409411036147134ull, 6706707949419811415ull, 764124826606134874ull, 2043407617841847733ull}}, {{15304074748362742651ull, 13413415898839622831ull, 1528249653212269748ull, 4086815235683695466ull}}, {{12161405423015933685ull, 8380087723969694047ull, 3056499306424539497ull, 8173630471367390932ull}}, {{6121629899345097061ull, 16433412803761580102ull, 7989997490768728545ull, 1634726094273478186ull}}, {{12243259798690194121ull, 14420081533813608588ull, 15979994981537457091ull, 3269452188546956372ull}}, {{6039775523670836625ull, 10393418993917665561ull, 13513245889365362567ull, 6538904377093912745ull}}, {{12276001548959898295ull, 9457381428267353758ull, 2702649177873072513ull, 1307780875418782549ull}}, {{6105259024210244973ull, 468018782825155901ull, 5405298355746145027ull, 2615561750837565098ull}}, {{12210518048420489946ull, 936037565650311802ull, 10810596711492290054ull, 5231123501675130196ull}}, {{5974292023131428276ull, 1872075131300623605ull, 3174449349275028492ull, 10462247003350260393ull}}, {{1194858404626285656ull, 374415026260124721ull, 11702936314080736668ull, 2092449400670052078ull}}, {{2389716809252571311ull, 748830052520249442ull, 4959128554451921720ull, 4184898801340104157ull}}, {{4779433618505142621ull, 1497660105040498884ull, 9918257108903843440ull, 8369797602680208314ull}}, {{12023933167926759494ull, 15056927279975741069ull, 16741046680748409980ull, 1673959520536041662ull}}, {{5601122262143967372ull, 11667110486241930523ull, 15035349287787268345ull, 3347919041072083325ull}}, {{11202244524287934743ull, 4887476898774309430ull, 11623954501864985075ull, 6695838082144166651ull}}, {{5929797719599497272ull, 4666844194496772209ull, 6014139715114907338ull, 1339167616428833330ull}}, {{11859595439198994544ull, 9333688388993544418ull, 12028279430229814676ull, 2678335232857666660ull}}, {{5272446804688437472ull, 220632704277537221ull, 5609814786750077737ull, 5356670465715333321ull}}, {{10544893609376874943ull, 441265408555074442ull, 11219629573500155474ull, 10713340931430666642ull}}, {{13177025166101105959ull, 3777601896452925211ull, 9622623544183851741ull, 2142668186286133328ull}}, {{7907306258492660301ull, 7555203792905850423ull, 798503014658151866ull, 4285336372572266657ull}}, {{15814612516985320601ull, 15110407585811700846ull, 1597006029316303732ull, 8570672745144533314ull}}, {{10541620132880884767ull, 6711430331904250492ull, 15076796464830902039ull, 1714134549028906662ull}}, {{2636496192052217917ull, 13422860663808500985ull, 11706848855952252462ull, 3428269098057813325ull}}, {{5272992384104435834ull, 8398977253907450354ull, 4966953638194953309ull, 6856538196115626651ull}}, {{15811993735788528460ull, 1679795450781490070ull, 4682739542380900985ull, 1371307639223125330ull}}, {{13177243397867505304ull, 3359590901562980141ull, 9365479084761801970ull, 2742615278446250660ull}}, {{7907742722025458991ull, 6719181803125960283ull, 284214095814052324ull, 5485230556892501321ull}}, {{15815485444050917981ull, 13438363606251920566ull, 568428191628104648ull, 10970461113785002642ull}}, {{6852445903552093920ull, 2687672721250384113ull, 7492383267809441576ull, 2194092222757000528ull}}, {{13704891807104187839ull, 5375345442500768226ull, 14984766535618883152ull, 4388184445514001056ull}}, {{8963039540498824062ull, 10750690885001536453ull, 11522788997528214688ull, 8776368891028002113ull}}, {{16550003167067406106ull, 5839486991742217613ull, 13372604243731373907ull, 1755273778205600422ull}}, {{14653262260425260595ull, 11678973983484435227ull, 8298464413753196198ull, 3510547556411200845ull}}, {{10859780447140969573ull, 4911203893259318839ull, 16596928827506392397ull, 7021095112822401690ull}}, {{5861304904170104238ull, 8360938408135684414ull, 3319385765501278479ull, 1404219022564480338ull}}, {{11722609808340208476ull, 16721876816271368828ull, 6638771531002556958ull, 2808438045128960676ull}}, {{4998475542970865335ull, 14997009558833186041ull, 13277543062005113917ull, 5616876090257921352ull}}, {{9996951085941730669ull, 11547275043956820466ull, 8108342050300676219ull, 11233752180515842705ull}}, {{1999390217188346134ull, 17066850267759005386ull, 1621668410060135243ull, 2246750436103168541ull}}, {{3998780434376692268ull, 15686956461808459156ull, 3243336820120270487ull, 4493500872206337082ull}}, {{7997560868753384536ull, 12927168849907366696ull, 6486673640240540975ull, 8987001744412674164ull}}, {{1599512173750676908ull, 17342829028949114632ull, 16054729987015749487ull, 1797400348882534832ull}}, {{3199024347501353815ull, 16238913984188677648ull, 13662715900321947359ull, 3594800697765069665ull}}, {{6398048695002707629ull, 14031083894667803680ull, 8878687726934343103ull, 7189601395530139331ull}}, {{16037004997968182819ull, 17563612037901202028ull, 5465086360128778943ull, 1437920279106027866ull}}, {{13627265922226814021ull, 16680480002092852441ull, 10930172720257557887ull, 2875840558212055732ull}}, {{8807787770744076426ull, 14914215930476153267ull, 3413601366805564159ull, 5751681116424111465ull}}, {{17615575541488152852ull, 11381687787242754918ull, 6827202733611128319ull, 11503362232848222930ull}}, {{10901812737781451217ull, 17033732816416192276ull, 1365440546722225663ull, 2300672446569644586ull}}, {{3356881401853350818ull, 15620721559122832937ull, 2730881093444451327ull, 4601344893139289172ull}}, {{6713762803706701635ull, 12794699044536114258ull, 5461762186888902655ull, 9202689786278578344ull}}, {{8721450190225160974ull, 17316335067874864144ull, 15849747696345421823ull, 1840537957255715668ull}}, {{17442900380450321947ull, 16185926062040176672ull, 13252751318981292031ull, 3681075914511431337ull}}, {{16439056687191092278ull, 13925108050370801729ull, 8058758564253032447ull, 7362151829022862675ull}}, {{6977160152180128779ull, 10163719239557980992ull, 1611751712850606489ull, 1472430365804572535ull}}, {{13954320304360257558ull, 1880694405406410368ull, 3223503425701212979ull, 2944860731609145070ull}}, {{9461896535010963499ull, 3761388810812820737ull, 6447006851402425958ull, 5889721463218290140ull}}, {{477048996312375382ull, 7522777621625641475ull, 12894013702804851916ull, 11779442926436580280ull}}, {{3784758614004385400ull, 5193904339067038618ull, 2578802740560970383ull, 2355888585287316056ull}}, {{7569517228008770799ull, 10387808678134077236ull, 5157605481121940766ull, 4711777170574632112ull}}, {{15139034456017541598ull, 2328873282558602856ull, 10315210962243881533ull, 9423554341149264224ull}}, {{14095853335429239290ull, 7844472285995541217ull, 16820437451416417599ull, 1884710868229852844ull}}, {{9744962597148926963ull, 15688944571991082435ull, 15194130829123283582ull, 3769421736459705689ull}}, {{1043181120588302309ull, 12931145070272613255ull, 11941517584537015549ull, 7538843472919411379ull}}, {{11276682668343391432ull, 13654275458280253620ull, 17145698775875044402ull, 1507768694583882275ull}}, {{4106621262977231247ull, 8861806842850955625ull, 15844653478040537189ull, 3015537389167764551ull}}, {{8213242525954462494ull, 17723613685701911250ull, 13242562882371522762ull, 6031074778335529103ull}}, {{16426485051908924987ull, 17000483297694270884ull, 8038381691033493909ull, 12062149556671058207ull}}, {{3285297010381784998ull, 7089445474280764500ull, 8986373967690519428ull, 2412429911334211641ull}}, {{6570594020763569995ull, 14178890948561529000ull, 17972747935381038856ull, 4824859822668423282ull}}, {{13141188041527139990ull, 9911037823413506384ull, 17498751797052526097ull, 9649719645336846565ull}}, {{6317586423047338322ull, 9360905194166521923ull, 3499750359410505219ull, 1929943929067369313ull}}, {{12635172846094676643ull, 275066314623492230ull, 6999500718821010439ull, 3859887858134738626ull}}, {{6823601618479801669ull, 550132629246984461ull, 13999001437642020878ull, 7719775716269477252ull}}, {{5054069138437870657ull, 110026525849396892ull, 10178497917012224822ull, 1543955143253895450ull}}, {{10108138276875741314ull, 220053051698793784ull, 1910251760314898028ull, 3087910286507790901ull}}, {{1769532480041931012ull, 440106103397587569ull, 3820503520629796056ull, 6175820573015581802ull}}, {{3539064960083862023ull, 880212206795175138ull, 7641007041259592112ull, 12351641146031163604ull}}, {{15465208250984413698ull, 3865391256100945350ull, 16285596667219559715ull, 2470328229206232720ull}}, {{12483672428259275779ull, 7730782512201890701ull, 14124449260729567814ull, 4940656458412465441ull}}, {{6520600782808999942ull, 15461565024403781403ull, 9802154447749584012ull, 9881312916824930883ull}}, {{12372166600787530958ull, 3092313004880756280ull, 13028477333775647772ull, 1976262583364986176ull}}, {{6297589127865510300ull, 6184626009761512561ull, 7610210593841743928ull, 3952525166729972353ull}}, {{12595178255731020600ull, 12369252019523025122ull, 15220421187683487856ull, 7905050333459944706ull}}, {{17276430910113845413ull, 9852548033388425670ull, 6733433052278607894ull, 1581010066691988941ull}}, {{16106117746518139210ull, 1258351993067299725ull, 13466866104557215789ull, 3162020133383977882ull}}, {{13765491419326726803ull, 2516703986134599451ull, 8486988135404879962ull, 6324040266767955765ull}}, {{9084238764943901990ull, 5033407972269198903ull, 16973976270809759924ull, 12648080533535911530ull}}, {{9195545382472601045ull, 15764076853421481073ull, 3394795254161951984ull, 2529616106707182306ull}}, {{18391090764945202089ull, 13081409633133410530ull, 6789590508323903969ull, 5059232213414364612ull}}, {{18335437456180852562ull, 7716075192557269445ull, 13579181016647807939ull, 10118464426828729224ull}}, {{14735133935461901482ull, 12611261482737184858ull, 17473231462297202880ull, 2023692885365745844ull}}, {{11023523797214251348ull, 6775778891764818101ull, 16499718850884854145ull, 4047385770731491689ull}}, {{3600303520718951080ull, 13551557783529636203ull, 14552693628060156674ull, 8094771541462983379ull}}, {{4409409518885700540ull, 13778358000931658210ull, 17667933984579672627ull, 1618954308292596675ull}}, {{8818819037771401079ull, 9109971928153764804ull, 16889123895449793639ull, 3237908616585193351ull}}, {{17637638075542802157ull, 18219943856307529608ull, 15331503717190035662ull, 6475817233170386703ull}}, {{14595574059334291401ull, 3643988771261505921ull, 14134347187663738102ull, 1295163446634077340ull}}, {{10744404044959031186ull, 7287977542523011843ull, 9821950301617924588ull, 2590326893268154681ull}}, {{3042064016208510756ull, 14575955085046023687ull, 1197156529526297560ull, 5180653786536309363ull}}, {{6084128032417021512ull, 10705166096382495758ull, 2394313059052595121ull, 10361307573072618726ull}}, {{1216825606483404303ull, 9519730848760319798ull, 4168211426552429347ull, 2072261514614523745ull}}, {{2433651212966808605ull, 592717623811087980ull, 8336422853104858695ull, 4144523029229047490ull}}, {{4867302425933617209ull, 1185435247622175960ull, 16672845706209717390ull, 8289046058458094980ull}}, {{973460485186723442ull, 237087049524435192ull, 3334569141241943478ull, 1657809211691618996ull}}, {{1946920970373446884ull, 474174099048870384ull, 6669138282483886956ull, 3315618423383237992ull}}, {{3893841940746893768ull, 948348198097740768ull, 13338276564967773912ull, 6631236846766475984ull}}, {{15536163647117020047ull, 3879018454361458476ull, 17425050571961196075ull, 1326247369353295196ull}}, {{12625583220524488477ull, 7758036908722916953ull, 16403357070212840534ull, 2652494738706590393ull}}, {{6804422367339425337ull, 15516073817445833907ull, 14359970066716129452ull, 5304989477413180787ull}}, {{13608844734678850674ull, 12585403561182116198ull, 10273196059722707289ull, 10609978954826361575ull}}, {{10100466576419590782ull, 17274475971204064532ull, 2054639211944541457ull, 2121995790965272315ull}}, {{1754189079129629947ull, 16102207868698577449ull, 4109278423889082915ull, 4243991581930544630ull}}, {{3508378158259259893ull, 13757671663687603282ull, 8218556847778165831ull, 8487983163861089260ull}}, {{11769722075877582949ull, 6440883147479430979ull, 1643711369555633166ull, 1697596632772217852ull}}, {{5092700078045614281ull, 12881766294958861959ull, 3287422739111266332ull, 3395193265544435704ull}}, {{10185400156091228561ull, 7316788516208172302ull, 6574845478222532665ull, 6790386531088871408ull}}, {{2037080031218245713ull, 12531404147467365430ull, 12383015539870237502ull, 1358077306217774281ull}}, {{4074160062436491425ull, 6616064221225179244ull, 6319287006030923389ull, 2716154612435548563ull}}, {{8148320124872982849ull, 13232128442450358488ull, 12638574012061846778ull, 5432309224871097126ull}}, {{16296640249745965697ull, 8017512811191165360ull, 6830403950414141941ull, 10864618449742194253ull}}, {{18016723308916834433ull, 16360897821205874364ull, 12434127234308559357ull, 2172923689948438850ull}}, {{17586702544124117249ull, 14275051568702197113ull, 6421510394907567099ull, 4345847379896877701ull}}, {{16726661014538682881ull, 10103359063694842611ull, 12843020789815134199ull, 8691694759793755402ull}}, {{10724029832391557223ull, 5710020627480878845ull, 9947301787446847486ull, 1738338951958751080ull}}, {{3001315591073562830ull, 11420041254961757691ull, 1447859501184143356ull, 3476677903917502161ull}}, {{6002631182147125659ull, 4393338436213963766ull, 2895719002368286713ull, 6953355807835004322ull}}, {{4889875051171335455ull, 878667687242792753ull, 7957841429957477989ull, 1390671161567000864ull}}, {{9779750102342670910ull, 1757335374485585506ull, 15915682859914955978ull, 2781342323134001728ull}}, {{1112756130975790204ull, 3514670748971171013ull, 13384621646120360340ull, 5562684646268003457ull}}, {{2225512261951580407ull, 7029341497942342026ull, 8322499218531169064ull, 11125369292536006915ull}}, {{445102452390316082ull, 16163263558556109698ull, 1664499843706233812ull, 2225073858507201383ull}}, {{890204904780632163ull, 13879783043402667780ull, 3328999687412467625ull, 4450147717014402766ull}}, {{1780409809561264326ull, 9312822013095783944ull, 6657999374824935251ull, 8900295434028805532ull}}, {{7734779591396073512ull, 12930610846844887758ull, 8710297504448807696ull, 1780059086805761106ull}}, {{15469559182792147023ull, 7414477619980223900ull, 17420595008897615393ull, 3560118173611522212ull}}, {{12492374291874742430ull, 14828955239960447801ull, 16394445944085679170ull, 7120236347223044425ull}}, {{6187823673116858810ull, 2965791047992089560ull, 3278889188817135834ull, 1424047269444608885ull}}, {{12375647346233717619ull, 5931582095984179120ull, 6557778377634271668ull, 2848094538889217770ull}}, {{6304550618757883621ull, 11863164191968358241ull, 13115556755268543336ull, 5696189077778435540ull}}, {{12609101237515767242ull, 5279584310227164866ull, 7784369436827535057ull, 11392378155556871081ull}}, {{17279215506470794742ull, 12123963306271163942ull, 5246222702107417334ull, 2278475631111374216ull}}, {{16111686939232037867ull, 5801182538832776269ull, 10492445404214834669ull, 4556951262222748432ull}}, {{13776629804754524117ull, 11602365077665552539ull, 2538146734720117722ull, 9113902524445496865ull}}, {{6444674775692815147ull, 9699170645016931154ull, 507629346944023544ull, 1822780504889099373ull}}, {{12889349551385630293ull, 951597216324310692ull, 1015258693888047089ull, 3645561009778198746ull}}, {{7331955029061708970ull, 1903194432648621385ull, 2030517387776094178ull, 7291122019556397492ull}}, {{1466391005812341794ull, 380638886529724277ull, 7784801107039039482ull, 1458224403911279498ull}}, {{2932782011624683588ull, 761277773059448554ull, 15569602214078078964ull, 2916448807822558996ull}}, {{5865564023249367176ull, 1522555546118897108ull, 12692460354446606312ull, 5832897615645117993ull}}, {{11731128046498734352ull, 3045111092237794216ull, 6938176635183661008ull, 11665795231290235987ull}}, {{6035574424041657194ull, 609022218447558843ull, 8766332956520552848ull, 2333159046258047197ull}}, {{12071148848083314388ull, 1218044436895117686ull, 17532665913041105696ull, 4666318092516094394ull}}, {{5695553622457077159ull, 2436088873790235373ull, 16618587752372659776ull, 9332636185032188789ull}}, {{12207157168717146402ull, 487217774758047074ull, 18081112809442173248ull, 1866527237006437757ull}}, {{5967570263724741187ull, 974435549516094149ull, 17715481545174794880ull, 3733054474012875515ull}}, {{11935140527449482373ull, 1948871099032188298ull, 16984219016640038144ull, 7466108948025751031ull}}, {{13455074549715627445ull, 389774219806437659ull, 7086192618069917952ull, 1493221789605150206ull}}, {{8463405025721703273ull, 779548439612875319ull, 14172385236139835904ull, 2986443579210300412ull}}, {{16926810051443406545ull, 1559096879225750638ull, 9898026398570120192ull, 5972887158420600825ull}}, {{15406876029177261474ull, 3118193758451501277ull, 1349308723430688768ull, 11945774316841201651ull}}, {{6770724020577362618ull, 15381034010657941548ull, 3959210559428048076ull, 2389154863368240330ull}}, {{13541448041154725236ull, 12315323947606331480ull, 7918421118856096153ull, 4778309726736480660ull}}, {{8636152008599898856ull, 6183903821503111345ull, 15836842237712192307ull, 9556619453472961320ull}}, {{9105928031203800418ull, 8615478393784442915ull, 3167368447542438461ull, 1911323890694592264ull}}, {{18211856062407600836ull, 17230956787568885830ull, 6334736895084876922ull, 3822647781389184528ull}}, {{17976968051105650055ull, 16015169501428220045ull, 12669473790169753845ull, 7645295562778369056ull}}, {{7284742424963040335ull, 6892382715027554332ull, 6223243572775861092ull, 1529059112555673811ull}}, {{14569484849926080669ull, 13784765430055108664ull, 12446487145551722184ull, 3058118225111347622ull}}, {{10692225626142609721ull, 9122786786400665713ull, 6446230217393892753ull, 6116236450222695245ull}}, {{2937707178575667825ull, 18245573572801331427ull, 12892460434787785506ull, 12232472900445390490ull}}, {{11655587879940864535ull, 7338463529302176608ull, 2578492086957557101ull, 2446494580089078098ull}}, {{4864431686172177453ull, 14676927058604353217ull, 5156984173915114202ull, 4892989160178156196ull}}, {{9728863372344354906ull, 10907110043499154818ull, 10313968347830228405ull, 9785978320356312392ull}}, {{1945772674468870982ull, 9560119638183651610ull, 9441491299049866327ull, 1957195664071262478ull}}, {{3891545348937741963ull, 673495202657751604ull, 436238524390181039ull, 3914391328142524957ull}}, {{7783090697875483925ull, 1346990405315503208ull, 872477048780362078ull, 7828782656285049914ull}}, {{1556618139575096785ull, 7648095710546921288ull, 14931890668723713708ull, 1565756531257009982ull}}, {{3113236279150193570ull, 15296191421093842576ull, 11417037263737875800ull, 3131513062514019965ull}}, {{6226472558300387140ull, 12145638768478133536ull, 4387330453766199985ull, 6263026125028039931ull}}, {{12452945116600774280ull, 5844533463246715456ull, 8774660907532399971ull, 12526052250056079862ull}}, {{17247984282287796149ull, 12236953136875074060ull, 9133629810990300640ull, 2505210450011215972ull}}, {{16049224490866040682ull, 6027162200040596505ull, 18267259621980601281ull, 5010420900022431944ull}}, {{13651704908022529747ull, 12054324400081193011ull, 18087775170251650946ull, 10020841800044863889ull}}, {{6419689796346416273ull, 2410864880016238602ull, 18374950293017971482ull, 2004168360008972777ull}}, {{12839379592692832546ull, 4821729760032477204ull, 18303156512326391348ull, 4008336720017945555ull}}, {{7232015111676113475ull, 9643459520064954409ull, 18159568950943231080ull, 8016673440035891111ull}}, {{1446403022335222695ull, 5618040718754901205ull, 7321262604930556539ull, 1603334688007178222ull}}, {{2892806044670445390ull, 11236081437509802410ull, 14642525209861113078ull, 3206669376014356444ull}}, {{5785612089340890780ull, 4025418801310053204ull, 10838306346012674541ull, 6413338752028712889ull}}, {{15914517676835819449ull, 805083760262010640ull, 16925056528170176201ull, 1282667750405742577ull}}, {{13382291279962087282ull, 1610167520524021281ull, 15403368982630800786ull, 2565335500811485155ull}}, {{8317838486214622947ull, 3220335041048042563ull, 12359993891552049956ull, 5130671001622970311ull}}, {{16635676972429245894ull, 6440670082096085126ull, 6273243709394548296ull, 10261342003245940623ull}}, {{3327135394485849179ull, 16045529275386858318ull, 12322695186104640628ull, 2052268400649188124ull}}, {{6654270788971698358ull, 13644314477064165020ull, 6198646298499729641ull, 4104536801298376249ull}}, {{13308541577943396715ull, 8841884880418778424ull, 12397292596999459283ull, 8209073602596752498ull}}, {{2661708315588679343ull, 5457725790825666008ull, 13547504963625622826ull, 1641814720519350499ull}}, {{5323416631177358686ull, 10915451581651332016ull, 8648265853541694036ull, 3283629441038700999ull}}, {{10646833262354717372ull, 3384159089593112416ull, 17296531707083388073ull, 6567258882077401998ull}}, {{9508064281954764121ull, 4366180632660532806ull, 14527352785642408584ull, 1313451776415480399ull}}, {{569384490199976626ull, 8732361265321065613ull, 10607961497575265552ull, 2626903552830960799ull}}, {{1138768980399953251ull, 17464722530642131226ull, 2769178921440979488ull, 5253807105661921599ull}}, {{2277537960799906502ull, 16482700987574710836ull, 5538357842881958977ull, 10507614211323843198ull}}, {{4144856406901891624ull, 3296540197514942167ull, 12175718012802122765ull, 2101522842264768639ull}}, {{8289712813803783248ull, 6593080395029884334ull, 5904691951894693914ull, 4203045684529537279ull}}, {{16579425627607566495ull, 13186160790059768668ull, 11809383903789387828ull, 8406091369059074558ull}}, {{18073280384489154592ull, 6326580972753864056ull, 13429923224983608535ull, 1681218273811814911ull}}, {{17699816695268757568ull, 12653161945507728113ull, 8413102376257665454ull, 3362436547623629823ull}}, {{16952889316827963519ull, 6859579817305904611ull, 16826204752515330909ull, 6724873095247259646ull}}, {{7079926678107503027ull, 1371915963461180922ull, 7054589765244976505ull, 1344974619049451929ull}}, {{14159853356215006054ull, 2743831926922361844ull, 14109179530489953010ull, 2689949238098903858ull}}, {{9872962638720460492ull, 5487663853844723689ull, 9771614987270354404ull, 5379898476197807717ull}}, {{1299181203731369368ull, 10975327707689447379ull, 1096485900831157192ull, 10759796952395615435ull}}, {{3949185055488184197ull, 9573763171021710122ull, 219297180166231438ull, 2151959390479123087ull}}, {{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull, 4303918780958246174ull}}, {{15796740221952736787ull, 1401564536667737256ull, 877188720664925754ull, 8607837561916492348ull}}, {{14227394488616278327ull, 7659010536817368097ull, 11243484188358716120ull, 1721567512383298469ull}}, {{10008044903523005038ull, 15318021073634736195ull, 4040224303007880624ull, 3443135024766596939ull}}, {{1569345733336458460ull, 12189298073559920775ull, 8080448606015761249ull, 6886270049533193878ull}}, {{7692566776151112339ull, 9816557244195804801ull, 12684136165428883219ull, 1377254009906638775ull}}, {{15385133552302224677ull, 1186370414682057986ull, 6921528257148214823ull, 2754508019813277551ull}}, {{12323523030894897738ull, 2372740829364115973ull, 13843056514296429646ull, 5509016039626555102ull}}, {{6200301988080243859ull, 4745481658728231947ull, 9239368954883307676ull, 11018032079253110205ull}}, {{12308106841841779742ull, 4638445146487556712ull, 1847873790976661535ull, 2203606415850622041ull}}, {{6169469609974007867ull, 9276890292975113425ull, 3695747581953323070ull, 4407212831701244082ull}}, {{12338939219948015734ull, 107036512240675234ull, 7391495163906646141ull, 8814425663402488164ull}}, {{17225183102957244440ull, 21407302448135046ull, 16235694291748970521ull, 1762885132680497632ull}}, {{16003622132204937264ull, 42814604896270093ull, 14024644509788389426ull, 3525770265360995265ull}}, {{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull, 7051540530721990531ull}}, {{17469495297107705875ull, 7395823471442328683ull, 5609857803915355770ull, 1410308106144398106ull}}, {{16492246520505860134ull, 14791646942884657367ull, 11219715607830711540ull, 2820616212288796212ull}}, {{14537748967302168652ull, 11136549812059763119ull, 3992687141951871465ull, 5641232424577592425ull}}, {{10628753860894785687ull, 3826355550409974623ull, 7985374283903742931ull, 11282464849155184850ull}}, {{16883146031146598431ull, 4454619924823905247ull, 1597074856780748586ull, 2256492969831036970ull}}, {{15319547988583645245ull, 8909239849647810495ull, 3194149713561497172ull, 4512985939662073940ull}}, {{12192351903457738873ull, 17818479699295620991ull, 6388299427122994344ull, 9025971879324147880ull}}, {{2438470380691547775ull, 18321091198826765491ull, 1277659885424598868ull, 1805194375864829576ull}}, {{4876940761383095549ull, 18195438323943979366ull, 2555319770849197737ull, 3610388751729659152ull}}, {{9753881522766191098ull, 17944132574178407116ull, 5110639541698395475ull, 7220777503459318304ull}}, {{1950776304553238220ull, 18346221773803322716ull, 15779523167307320387ull, 1444155500691863660ull}}, {{3901552609106476440ull, 18245699473897093816ull, 13112302260905089159ull, 2888311001383727321ull}}, {{7803105218212952879ull, 18044654874084636016ull, 7777860448100626703ull, 5776622002767454643ull}}, {{15606210436425905757ull, 17642565674459720416ull, 15555720896201253407ull, 11553244005534909286ull}}, {{17878637346252822445ull, 14596559579117675052ull, 6800492993982161004ull, 2310648801106981857ull}}, {{17310530618796093273ull, 10746375084525798489ull, 13600985987964322009ull, 4621297602213963714ull}}, {{16174317163882634929ull, 3046006095342045363ull, 8755227902219092403ull, 9242595204427927429ull}}, {{3234863432776526986ull, 7987898848552229719ull, 16508440839411459773ull, 1848519040885585485ull}}, {{6469726865553053972ull, 15975797697104459438ull, 14570137605113367930ull, 3697038081771170971ull}}, {{12939453731106107943ull, 13504851320499367260ull, 10693531136517184245ull, 7394076163542341943ull}}, {{13655937190446952559ull, 13769016708325604421ull, 13206752671529167818ull, 1478815232708468388ull}}, {{8865130307184353501ull, 9091289342941657227ull, 7966761269348784021ull, 2957630465416936777ull}}, {{17730260614368707001ull, 18182578685883314454ull, 15933522538697568042ull, 5915260930833873554ull}}, {{17013777155027862386ull, 17918413298057077293ull, 13420301003685584469ull, 11830521861667747109ull}}, {{7092104245747482801ull, 14651729103837146428ull, 17441455459704758186ull, 2366104372333549421ull}}, {{14184208491494965601ull, 10856714133964741240ull, 16436166845699964757ull, 4732208744667098843ull}}, {{9921672909280379586ull, 3266684194219930865ull, 14425589617690377899ull, 9464417489334197687ull}}, {{5673683396597986241ull, 4342685653585896496ull, 10263815553021896226ull, 1892883497866839537ull}}, {{11347366793195972481ull, 8685371307171792992ull, 2080887032334240836ull, 3785766995733679075ull}}, {{4247989512682393345ull, 17370742614343585985ull, 4161774064668481672ull, 7571533991467358150ull}}, {{8228295532020299316ull, 10852846152352537843ull, 832354812933696334ull, 1514306798293471630ull}}, {{16456591064040598631ull, 3258948230995524070ull, 1664709625867392669ull, 3028613596586943260ull}}, {{14466438054371645646ull, 6517896461991048141ull, 3329419251734785338ull, 6057227193173886520ull}}, {{10486132035033739675ull, 13035792923982096283ull, 6658838503469570676ull, 12114454386347773040ull}}, {{16854621665974389228ull, 6296507399538329579ull, 1331767700693914135ull, 2422890877269554608ull}}, {{15262499258239226840ull, 12593014799076659159ull, 2663535401387828270ull, 4845781754539109216ull}}, {{12078254442768902064ull, 6739285524443766703ull, 5327070802775656541ull, 9691563509078218432ull}}, {{6104999703295690736ull, 12415903549114484310ull, 8444111790038951954ull, 1938312701815643686ull}}, {{12209999406591381472ull, 6385063024519417004ull, 16888223580077903909ull, 3876625403631287372ull}}, {{5973254739473211328ull, 12770126049038834009ull, 15329703086446256202ull, 7753250807262574745ull}}, {{4883999762636552589ull, 9932722839291587448ull, 3065940617289251240ull, 1550650161452514949ull}}, {{9767999525273105178ull, 1418701604873623280ull, 6131881234578502481ull, 3101300322905029898ull}}, {{1089254976836658739ull, 2837403209747246561ull, 12263762469157004962ull, 6202600645810059796ull}}, {{2178509953673317478ull, 5674806419494493122ull, 6080780864604458308ull, 12405201291620119593ull}}, {{11503748434960394466ull, 4824310098640808947ull, 12284202617146622631ull, 2481040258324023918ull}}, {{4560752796211237315ull, 9648620197281617895ull, 6121661160583693646ull, 4962080516648047837ull}}, {{9121505592422474629ull, 850496320853684174ull, 12243322321167387293ull, 9924161033296095674ull}}, {{5513649933226405249ull, 7548796893654557481ull, 17206059723201118751ull, 1984832206659219134ull}}, {{11027299866452810498ull, 15097593787309114962ull, 15965375372692685886ull, 3969664413318438269ull}}, {{3607855659196069380ull, 11748443500908678309ull, 13484006671675820157ull, 7939328826636876539ull}}, {{721571131839213876ull, 6039037514923645985ull, 17454196593302805324ull, 1587865765327375307ull}}, {{1443142263678427752ull, 12078075029847291970ull, 16461649112896059032ull, 3175731530654750615ull}}, {{2886284527356855504ull, 5709405985985032324ull, 14476554152082566449ull, 6351463061309501231ull}}, {{5772569054713711007ull, 11418811971970064648ull, 10506364230455581282ull, 12702926122619002463ull}}, {{12222560255168473171ull, 2283762394394012929ull, 13169319290316847226ull, 2540585224523800492ull}}, {{5998376436627394726ull, 4567524788788025859ull, 7891894506924142836ull, 5081170449047600985ull}}, {{11996752873254789452ull, 9135049577576051718ull, 15783789013848285672ull, 10162340898095201970ull}}, {{2399350574650957891ull, 9205707544999030990ull, 3156757802769657134ull, 2032468179619040394ull}}, {{4798701149301915781ull, 18411415089998061980ull, 6313515605539314268ull, 4064936359238080788ull}}, {{9597402298603831562ull, 18376086106286572344ull, 12627031211078628537ull, 8129872718476161576ull}}, {{9298178089204586959ull, 14743263665483045438ull, 6214755056957636030ull, 1625974543695232315ull}}, {{149612104699622302ull, 11039783257256539261ull, 12429510113915272061ull, 3251949087390464630ull}}, {{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull, 6503898174780929261ull}}, {{14817240100847490214ull, 11794610932386436350ull, 4971804045566108824ull, 1300779634956185852ull}}, {{11187736127985428811ull, 5142477791063321085ull, 9943608091132217649ull, 2601559269912371704ull}}, {{3928728182261306006ull, 10284955582126642171ull, 1440472108554883682ull, 5203118539824743409ull}}, {{7857456364522612011ull, 2123167090543732726ull, 2880944217109767365ull, 10406237079649486818ull}}, {{16328886531872163695ull, 11492679862334477514ull, 11644235287647684442ull, 2081247415929897363ull}}, {{14211028990034775774ull, 4538615650959403413ull, 4841726501585817269ull, 4162494831859794727ull}}, {{9975313906359999932ull, 9077231301918806827ull, 9683453003171634538ull, 8324989663719589454ull}}, {{16752458040239641280ull, 9194143889867582011ull, 16694085859601968200ull, 1664997932743917890ull}}, {{15058172006769730943ull, 18388287779735164023ull, 14941427645494384784ull, 3329995865487835781ull}}, {{11669599939829910269ull, 18329831485760776431ull, 11436111217279217953ull, 6659991730975671563ull}}, {{9712617617449802701ull, 7355315111894065609ull, 13355268687681574560ull, 1331998346195134312ull}}, {{978491161190053785ull, 14710630223788131219ull, 8263793301653597504ull, 2663996692390268625ull}}, {{1956982322380107569ull, 10974516373866710822ull, 16527586603307195009ull, 5327993384780537250ull}}, {{3913964644760215138ull, 3502288674023870028ull, 14608429132904838403ull, 10655986769561074501ull}}, {{8161490558435863674ull, 15457852993772415298ull, 6611034641322878003ull, 2131197353912214900ull}}, {{16322981116871727348ull, 12468961913835278980ull, 13222069282645756007ull, 4262394707824429800ull}}, {{14199218160033903080ull, 6491179753961006345ull, 7997394491581960399ull, 8524789415648859601ull}}, {{2839843632006780616ull, 1298235950792201269ull, 5288827713058302403ull, 1704957883129771920ull}}, {{5679687264013561232ull, 2596471901584402538ull, 10577655426116604806ull, 3409915766259543840ull}}, {{11359374528027122464ull, 5192943803168805076ull, 2708566778523657996ull, 6819831532519087681ull}}, {{13339921349831155463ull, 8417286390117581661ull, 4231062170446641922ull, 1363966306503817536ull}}, {{8233098625952759309ull, 16834572780235163323ull, 8462124340893283844ull, 2727932613007635072ull}}, {{16466197251905518618ull, 15222401486760775030ull, 16924248681786567689ull, 5455865226015270144ull}}, {{14485650430101485619ull, 11998058899811998445ull, 15401753289863583763ull, 10911730452030540289ull}}, {{10275827715504117771ull, 9778309409446220335ull, 17837745916940358045ull, 2182346090406108057ull}}, {{2104911357298683925ull, 1109874745182889055ull, 17228747760171164475ull, 4364692180812216115ull}}, {{4209822714597367849ull, 2219749490365778110ull, 16010751446632777334ull, 8729384361624432231ull}}, {{841964542919473570ull, 443949898073155622ull, 6891499104068465790ull, 1745876872324886446ull}}, {{1683929085838947140ull, 887899796146311244ull, 13782998208136931580ull, 3491753744649772892ull}}, {{3367858171677894279ull, 1775799592292622488ull, 9119252342564311544ull, 6983507489299545785ull}}, {{8052269263819399503ull, 15112555177426165790ull, 1823850468512862308ull, 1396701497859909157ull}}, {{16104538527638799005ull, 11778366281142779964ull, 3647700937025724617ull, 2793402995719818314ull}}, {{13762332981568046393ull, 5109988488576008313ull, 7295401874051449235ull, 5586805991439636628ull}}, {{9077921889426541170ull, 10219976977152016627ull, 14590803748102898470ull, 11173611982879273256ull}}, {{12883630822111039204ull, 5733344210172313648ull, 6607509564362490017ull, 2234722396575854651ull}}, {{7320517570512526791ull, 11466688420344627297ull, 13215019128724980034ull, 4469444793151709302ull}}, {{14641035141025053582ull, 4486632766979702978ull, 7983294183740408453ull, 8938889586303418605ull}}, {{6617555842946921040ull, 11965372997621671565ull, 1596658836748081690ull, 1787777917260683721ull}}, {{13235111685893842080ull, 5484001921533791514ull, 3193317673496163381ull, 3575555834521367442ull}}, {{8023479298078132543ull, 10968003843067583029ull, 6386635346992326762ull, 7151111669042734884ull}}, {{1604695859615626509ull, 5882949583355426929ull, 16034722328366106645ull, 1430222333808546976ull}}, {{3209391719231253017ull, 11765899166710853858ull, 13622700583022661674ull, 2860444667617093953ull}}, {{6418783438462506034ull, 5085054259712156100ull, 8798657092335771733ull, 5720889335234187907ull}}, {{12837566876925012068ull, 10170108519424312200ull, 17597314184671543466ull, 11441778670468375814ull}}, {{2567513375385002414ull, 2034021703884862440ull, 18276858095901949986ull, 2288355734093675162ull}}, {{5135026750770004827ull, 4068043407769724880ull, 18106972118094348356ull, 4576711468187350325ull}}, {{10270053501540009654ull, 8136086815539449760ull, 17767200162479145096ull, 9153422936374700651ull}}, {{9432708329791822578ull, 9005914992591710598ull, 7242788847237739342ull, 1830684587274940130ull}}, {{418672585874093539ull, 18011829985183421197ull, 14485577694475478684ull, 3661369174549880260ull}}, {{837345171748187077ull, 17576915896657290778ull, 10524411315241405753ull, 7322738349099760521ull}}, {{7546166663833458062ull, 18272778438299099448ull, 5794231077790191473ull, 1464547669819952104ull}}, {{15092333327666916124ull, 18098812802888647280ull, 11588462155580382947ull, 2929095339639904208ull}}, {{11737922581624280632ull, 17750881532067742945ull, 4730180237451214279ull, 5858190679279808417ull}}, {{5029101089539009647ull, 17055018990425934275ull, 9460360474902428559ull, 11716381358559616834ull}}, {{12073866662133532899ull, 14479050242310917824ull, 16649467353948127004ull, 2343276271711923366ull}}, {{5700989250557514182ull, 10511356410912284033ull, 14852190634186702393ull, 4686552543423846733ull}}, {{11401978501115028364ull, 2575968748115016450ull, 11257637194663853171ull, 9373105086847693467ull}}, {{13348442144448736643ull, 11583240193848734259ull, 9630225068416591280ull, 1874621017369538693ull}}, {{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull, 3749242034739077387ull}}, {{16500280430375843337ull, 9439472627975833806ull, 1627412126247261890ull, 7498484069478154774ull}}, {{3300056086075168668ull, 16645289784562808054ull, 15082877684217093670ull, 1499696813895630954ull}}, {{6600112172150337335ull, 14843835495416064492ull, 11719011294724635725ull, 2999393627791261909ull}}, {{13200224344300674670ull, 11240926917122577368ull, 4991278515739719835ull, 5998787255582523819ull}}, {{7953704614891797724ull, 4035109760535603121ull, 9982557031479439671ull, 11997574511165047638ull}}, {{1590740922978359545ull, 15564417211074761917ull, 13064557850521618903ull, 2399514902233009527ull}}, {{3181481845956719090ull, 12682090348439972218ull, 7682371627333686191ull, 4799029804466019055ull}}, {{6362963691913438179ull, 6917436623170392820ull, 15364743254667372383ull, 9598059608932038110ull}}, {{12340639182608418606ull, 12451533768859809533ull, 3072948650933474476ull, 1919611921786407622ull}}, {{6234534291507285595ull, 6456323464010067451ull, 6145897301866948953ull, 3839223843572815244ull}}, {{12469068583014571190ull, 12912646928020134902ull, 12291794603733897906ull, 7678447687145630488ull}}, {{6183162531344824562ull, 17339924644571668273ull, 13526405364972510550ull, 1535689537429126097ull}}, {{12366325062689649123ull, 16233105215433784930ull, 8606066656235469485ull, 3071379074858252195ull}}, {{6285906051669746629ull, 14019466357158018245ull, 17212133312470938971ull, 6142758149716504390ull}}, {{12571812103339493257ull, 9592188640606484874ull, 15977522551232326327ull, 12285516299433008781ull}}, {{9893060050151719298ull, 12986484172347027944ull, 6884853324988375588ull, 2457103259886601756ull}}, {{1339376026593886980ull, 7526224270984504273ull, 13769706649976751177ull, 4914206519773203512ull}}, {{2678752053187773959ull, 15052448541969008546ull, 9092669226243950738ull, 9828413039546407025ull}}, {{15293145669605196085ull, 14078536152619532678ull, 1818533845248790147ull, 1965682607909281405ull}}, {{12139547265500840554ull, 9710328231529513741ull, 3637067690497580295ull, 3931365215818562810ull}}, {{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull, 7862730431637125620ull}}, {{12234516535684156868ull, 3884131292611805496ull, 1454827076199032118ull, 1572546086327425124ull}}, {{6022288997658762120ull, 7768262585223610993ull, 2909654152398064236ull, 3145092172654850248ull}}, {{12044577995317524239ull, 15536525170447221986ull, 5819308304796128472ull, 6290184345309700496ull}}, {{5642411916925496862ull, 12626306267184892357ull, 11638616609592256945ull, 12580368690619400992ull}}, {{15885877642352740666ull, 9903958882920799117ull, 9706420951402272035ull, 2516073738123880198ull}}, {{13325011210995929715ull, 1361173692132046619ull, 966097829094992455ull, 5032147476247760397ull}}, {{8203278348282307813ull, 2722347384264093239ull, 1932195658189984910ull, 10064294952495520794ull}}, {{12708702113882192533ull, 15301864735820459940ull, 15143834390605638274ull, 2012858990499104158ull}}, {{6970660154054833449ull, 12156985397931368265ull, 11840924707501724933ull, 4025717980998208317ull}}, {{13941320308109666897ull, 5867226722153184914ull, 5235105341293898251ull, 8051435961996416635ull}}, {{2788264061621933380ull, 4862794159172547306ull, 1047021068258779650ull, 1610287192399283327ull}}, {{5576528123243866759ull, 9725588318345094612ull, 2094042136517559300ull, 3220574384798566654ull}}, {{11153056246487733517ull, 1004432562980637608ull, 4188084273035118601ull, 6441148769597133308ull}}, {{9609308878781367350ull, 14958281771563768814ull, 11905663298832754689ull, 1288229753919426661ull}}, {{771873683853183084ull, 11469819469417986013ull, 5364582523955957763ull, 2576459507838853323ull}}, {{1543747367706366168ull, 4492894865126420410ull, 10729165047911915527ull, 5152919015677706646ull}}, {{3087494735412732335ull, 8985789730252840820ull, 3011586022114279438ull, 10305838031355413293ull}}, {{4306847761824456791ull, 5486506760792478487ull, 11670363648648586857ull, 2061167606271082658ull}}, {{8613695523648913581ull, 10973013521584956974ull, 4893983223587622098ull, 4122335212542165317ull}}, {{17227391047297827161ull, 3499282969460362332ull, 9787966447175244197ull, 8244670425084330634ull}}, {{14513524653685296402ull, 4389205408633982789ull, 16714988548402690132ull, 1648934085016866126ull}}, {{10580305233661041188ull, 8778410817267965579ull, 14983233023095828648ull, 3297868170033732253ull}}, {{2713866393612530759ull, 17556821634535931159ull, 11519721972482105680ull, 6595736340067464507ull}}, {{4232122093464416475ull, 10890061956391006878ull, 9682642023980241782ull, 1319147268013492901ull}}, {{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull, 2638294536026985803ull}}, {{16928488373857665900ull, 6666759678144924280ull, 1837079948501863898ull, 5276589072053971606ull}}, {{15410232674005780184ull, 13333519356289848561ull, 3674159897003727796ull, 10553178144107943212ull}}, {{17839441793768797330ull, 13734750315483700681ull, 8113529608884566205ull, 2110635628821588642ull}}, {{17232139513828043043ull, 9022756557257849747ull, 16227059217769132411ull, 4221271257643177284ull}}, {{16017534953946534470ull, 18045513114515699495ull, 14007374361828713206ull, 8442542515286354569ull}}, {{3203506990789306894ull, 3609102622903139899ull, 17558870131333383934ull, 1688508503057270913ull}}, {{6407013981578613788ull, 7218205245806279798ull, 16670996188957216252ull, 3377017006114541827ull}}, {{12814027963157227576ull, 14436410491612559596ull, 14895248304204880888ull, 6754034012229083655ull}}, {{17320200851599086808ull, 13955328542548242888ull, 2979049660840976177ull, 1350806802445816731ull}}, {{16193657629488622000ull, 9463913011386934161ull, 5958099321681952355ull, 2701613604891633462ull}}, {{13940571185267692384ull, 481081949064316707ull, 11916198643363904711ull, 5403227209783266924ull}}, {{9434398296825833152ull, 962163898128633415ull, 5385653213018257806ull, 10806454419566533849ull}}, {{1886879659365166631ull, 192432779625726683ull, 15834525901571292854ull, 2161290883913306769ull}}, {{3773759318730333261ull, 384865559251453366ull, 13222307729433034092ull, 4322581767826613539ull}}, {{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull, 8645163535653227079ull}}, {{16266898986459774598ull, 7532643853184401992ull, 16356969535998944606ull, 1729032707130645415ull}}, {{14087053899209997579ull, 15065287706368803985ull, 14267194998288337596ull, 3458065414261290831ull}}, {{9727363724710443541ull, 11683831339028056355ull, 10087645922867123577ull, 6916130828522581663ull}}, {{1945472744942088709ull, 2336766267805611271ull, 13085575628799155685ull, 1383226165704516332ull}}, {{3890945489884177417ull, 4673532535611222542ull, 7724407183888759754ull, 2766452331409032665ull}}, {{7781890979768354833ull, 9347065071222445084ull, 15448814367777519508ull, 5532904662818065330ull}}, {{15563781959536709665ull, 247386068735338552ull, 12450884661845487401ull, 11065809325636130661ull}}, {{17870151650874983226ull, 7428174843230888356ull, 6179525747111007803ull, 2213161865127226132ull}}, {{17293559228040414836ull, 14856349686461776713ull, 12359051494222015606ull, 4426323730254452264ull}}, {{16140374382371278055ull, 11265955299214001811ull, 6271358914734479597ull, 8852647460508904529ull}}, {{10606772505958076258ull, 5942539874584710685ull, 16011667041914537212ull, 1770529492101780905ull}}, {{2766800938206600899ull, 11885079749169421371ull, 13576590010119522808ull, 3541058984203561811ull}}, {{5533601876413201798ull, 5323415424629291126ull, 8706435946529494001ull, 7082117968407123623ull}}, {{1106720375282640360ull, 15822078343893499518ull, 12809333633531629769ull, 1416423593681424724ull}}, {{2213440750565280719ull, 13197412614077447420ull, 7171923193353707923ull, 2832847187362849449ull}}, {{4426881501130561438ull, 7948081154445343224ull, 14343846386707415847ull, 5665694374725698898ull}}, {{8853763002261122876ull, 15896162308890686448ull, 10240948699705280078ull, 11331388749451397797ull}}, {{12838799044677955545ull, 3179232461778137289ull, 9426887369424876662ull, 2266277749890279559ull}}, {{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull, 4532555499780559119ull}}, {{14461708031292718948ull, 12716929847112549158ull, 814061330280403416ull, 9065110999561118238ull}}, {{10271039235742364436ull, 17300781228390151124ull, 11230858710281811652ull, 1813022199912223647ull}}, {{2095334397775177256ull, 16154818383070750633ull, 4014973346854071689ull, 3626044399824447295ull}}, {{4190668795550354512ull, 13862892692431949650ull, 8029946693708143379ull, 7252088799648894590ull}}, {{15595529018077712196ull, 17529973797454031222ull, 1605989338741628675ull, 1450417759929778918ull}}, {{12744313962445872775ull, 16613203521198510829ull, 3211978677483257351ull, 2900835519859557836ull}}, {{7041883851182193933ull, 14779662968687470043ull, 6423957354966514703ull, 5801671039719115672ull}}, {{14083767702364387865ull, 11112581863665388470ull, 12847914709933029407ull, 11603342079438231344ull}}, {{6506102355214787897ull, 5911865187474988017ull, 17326978200954247174ull, 2320668415887646268ull}}, {{13012204710429575793ull, 11823730374949976034ull, 16207212328198942732ull, 4641336831775292537ull}}, {{7577665347149599969ull, 5200716676190400453ull, 13967680582688333849ull, 9282673663550585075ull}}, {{8894230698913740641ull, 15797538594205721383ull, 2793536116537666769ull, 1856534732710117015ull}}, {{17788461397827481281ull, 13148333114701891150ull, 5587072233075333539ull, 3713069465420234030ull}}, {{17130178721945410945ull, 7849922155694230685ull, 11174144466150667079ull, 7426138930840468060ull}}, {{18183431003356723482ull, 16327379690106487429ull, 2234828893230133415ull, 1485227786168093612ull}}, {{17920117933003895348ull, 14208015306503423243ull, 4469657786460266831ull, 2970455572336187224ull}}, {{17393491792298239079ull, 9969286539297294871ull, 8939315572920533663ull, 5940911144672374448ull}}, {{16340239510886926542ull, 1491829004885038127ull, 17878631145841067327ull, 11881822289344748896ull}}, {{3268047902177385309ull, 11366412245202738595ull, 7265075043910123788ull, 2376364457868949779ull}}, {{6536095804354770617ull, 4286080416695925574ull, 14530150087820247577ull, 4752728915737899558ull}}, {{13072191608709541233ull, 8572160833391851148ull, 10613556101930943538ull, 9505457831475799117ull}}, {{13682484765967639217ull, 1714432166678370229ull, 9501408849870009354ull, 1901091566295159823ull}}, {{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull, 3802183132590319647ull}}, {{17836450916451453633ull, 6857728666713480918ull, 1112147252060934184ull, 7604366265180639294ull}}, {{7256638998032201050ull, 12439592177568427153ull, 14979824709379828129ull, 1520873253036127858ull}}, {{14513277996064402100ull, 6432440281427302690ull, 11512905345050104643ull, 3041746506072255717ull}}, {{10579811918419252584ull, 12864880562854605381ull, 4579066616390657670ull, 6083493012144511435ull}}, {{2712879763128953551ull, 7283017051999659147ull, 9158133232781315341ull, 12166986024289022870ull}}, {{11610622396851521680ull, 5145952225141842152ull, 1831626646556263068ull, 2433397204857804574ull}}, {{4774500719993491744ull, 10291904450283684305ull, 3663253293112526136ull, 4866794409715609148ull}}, {{9549001439986983487ull, 2137064826857816994ull, 7326506586225052273ull, 9733588819431218296ull}}, {{12977846732223127667ull, 15184808224339204691ull, 5154650131986920777ull, 1946717763886243659ull}}, {{7508949390736703718ull, 11922872374968857767ull, 10309300263973841555ull, 3893435527772487318ull}}, {{15017898781473407436ull, 5399000676228163918ull, 2171856454238131495ull, 7786871055544974637ull}}, {{3003579756294681488ull, 8458497764729453430ull, 7813068920331446945ull, 1557374211108994927ull}}, {{6007159512589362975ull, 16916995529458906860ull, 15626137840662893890ull, 3114748422217989854ull}}, {{12014319025178725949ull, 15387246985208262104ull, 12805531607616236165ull, 6229496844435979709ull}}, {{5581893976647900281ull, 12327749896706972593ull, 7164319141522920715ull, 12458993688871959419ull}}, {{8495076424813400703ull, 17222945238309035811ull, 16190259087272225435ull, 2491798737774391883ull}}, {{16990152849626801406ull, 15999146402908520006ull, 13933774100834899255ull, 4983597475548783767ull}}, {{15533561625544051195ull, 13551548732107488397ull, 9420804127960246895ull, 9967194951097567535ull}}, {{10485409954592630886ull, 2710309746421497679ull, 1884160825592049379ull, 1993438990219513507ull}}, {{2524075835475710155ull, 5420619492842995359ull, 3768321651184098758ull, 3986877980439027014ull}}, {{5048151670951420310ull, 10841238985685990718ull, 7536643302368197516ull, 7973755960878054028ull}}, {{8388327963674104709ull, 16925643056104839436ull, 12575375104699370472ull, 1594751192175610805ull}}, {{16776655927348209417ull, 15404542038500127256ull, 6704006135689189329ull, 3189502384351221611ull}}, {{15106567780986867217ull, 12362340003290702897ull, 13408012271378378659ull, 6379004768702443222ull}}, {{11766391488264182818ull, 6277935932871854179ull, 8369280469047205703ull, 12758009537404886445ull}}, {{9731975927136657210ull, 12323633630800101805ull, 1673856093809441140ull, 2551601907480977289ull}}, {{1017207780563762804ull, 6200523187890651995ull, 3347712187618882281ull, 5103203814961954578ull}}, {{2034415561127525608ull, 12401046375781303990ull, 6695424375237764562ull, 10206407629923909156ull}}, {{11474929556451236092ull, 13548255719381991767ull, 5028433689789463235ull, 2041281525984781831ull}}, {{4503115039192920567ull, 8649767365054431919ull, 10056867379578926471ull, 4082563051969563662ull}}, {{9006230078385841133ull, 17299534730108863838ull, 1666990685448301326ull, 8165126103939127325ull}}, {{16558641274644809520ull, 7149255760763683090ull, 333398137089660265ull, 1633025220787825465ull}}, {{14670538475580067423ull, 14298511521527366181ull, 666796274179320530ull, 3266050441575650930ull}}, {{10894332877450583230ull, 10150278969345180747ull, 1333592548358641061ull, 6532100883151301860ull}}, {{13246913019715847616ull, 5719404608610946472ull, 266718509671728212ull, 1306420176630260372ull}}, {{8047081965722143615ull, 11438809217221892945ull, 533437019343456424ull, 2612840353260520744ull}}, {{16094163931444287230ull, 4430874360734234274ull, 1066874038686912849ull, 5225680706521041488ull}}, {{13741583789179022844ull, 8861748721468468549ull, 2133748077373825698ull, 10451361413042082976ull}}, {{13816363202061535539ull, 16529745003261335002ull, 4116098430216675462ull, 2090272282608416595ull}}, {{9185982330413519461ull, 14612745932813118389ull, 8232196860433350925ull, 4180544565216833190ull}}, {{18371964660827038922ull, 10778747791916685162ull, 16464393720866701851ull, 8361089130433666380ull}}, {{14742439376391138754ull, 5845098373125247355ull, 3292878744173340370ull, 1672217826086733276ull}}, {{11038134679072725892ull, 11690196746250494711ull, 6585757488346680740ull, 3344435652173466552ull}}, {{3629525284435900168ull, 4933649418791437807ull, 13171514976693361481ull, 6688871304346933104ull}}, {{8104602686371000680ull, 986729883758287561ull, 17391698254306313589ull, 1337774260869386620ull}}, {{16209205372742001360ull, 1973459767516575122ull, 16336652434903075562ull, 2675548521738773241ull}}, {{13971666671774451104ull, 3946919535033150245ull, 14226560796096599508ull, 5351097043477546483ull}}, {{9496589269839350592ull, 7893839070066300491ull, 10006377518483647400ull, 10702194086955092967ull}}, {{12967364298193601088ull, 8957465443497080744ull, 9379973133180550126ull, 2140438817391018593ull}}, {{7487984522677650560ull, 17914930886994161489ull, 313202192651548636ull, 4280877634782037187ull}}, {{14975969045355301120ull, 17383117700278771362ull, 626404385303097273ull, 8561755269564074374ull}}, {{17752589068038701517ull, 10855321169539574918ull, 14882676136028260747ull, 1712351053912814874ull}}, {{17058434062367851418ull, 3263898265369598221ull, 11318608198346969879ull, 3424702107825629749ull}}, {{15670124051026151219ull, 6527796530739196443ull, 4190472322984388142ull, 6849404215651259499ull}}, {{17891420069172871537ull, 4994908120889749611ull, 15595489723564518921ull, 1369880843130251899ull}}, {{17336096064636191458ull, 9989816241779499223ull, 12744235373419486226ull, 2739761686260503799ull}}, {{16225448055562831299ull, 1532888409849446831ull, 7041726673129420837ull, 5479523372521007599ull}}, {{14004152037416110981ull, 3065776819698893663ull, 14083453346258841674ull, 10959046745042015198ull}}, {{2800830407483222197ull, 7991852993423599379ull, 13884737113477499304ull, 2191809349008403039ull}}, {{5601660814966444393ull, 15983705986847198758ull, 9322730153245446992ull, 4383618698016806079ull}}, {{11203321629932888785ull, 13520667899984845900ull, 198716232781342369ull, 8767237396033612159ull}}, {{13308710770212308727ull, 13772180024222700149ull, 14797138505523909766ull, 1753447479206722431ull}}, {{8170677466715065837ull, 9097615974735848683ull, 11147532937338267917ull, 3506894958413444863ull}}, {{16341354933430131674ull, 18195231949471697366ull, 3848321800966984218ull, 7013789916826889727ull}}, {{6957619801427936658ull, 3639046389894339473ull, 8148361989677217490ull, 1402757983365377945ull}}, {{13915239602855873316ull, 7278092779788678946ull, 16296723979354434980ull, 2805515966730755890ull}}, {{9383735132002195016ull, 14556185559577357893ull, 14146703884999318344ull, 5611031933461511781ull}}, {{320726190294838416ull, 10665627045445164171ull, 9846663696289085073ull, 11222063866923023563ull}}, {{7442842867542788330ull, 5822474223830943157ull, 13037379183483547984ull, 2244412773384604712ull}}, {{14885685735085576660ull, 11644948447661886314ull, 7628014293257544352ull, 4488825546769209425ull}}, {{11324627396461601703ull, 4843152821614221013ull, 15256028586515088705ull, 8977651093538418850ull}}, {{13332971923518051311ull, 968630564322844202ull, 3051205717303017741ull, 1795530218707683770ull}}, {{8219199773326551005ull, 1937261128645688405ull, 6102411434606035482ull, 3591060437415367540ull}}, {{16438399546653102009ull, 3874522257291376810ull, 12204822869212070964ull, 7182120874830735080ull}}, {{18045075168298261695ull, 15532299710425916654ull, 2440964573842414192ull, 1436424174966147016ull}}, {{17643406262886971773ull, 12617855347142281693ull, 4881929147684828385ull, 2872848349932294032ull}}, {{16840068452064391930ull, 6788966620575011771ull, 9763858295369656771ull, 5745696699864588064ull}}, {{15233392830419232244ull, 13577933241150023543ull, 1080972517029761926ull, 11491393399729176129ull}}, {{14114725010309577419ull, 2715586648230004708ull, 14973589762373593678ull, 2298278679945835225ull}}, {{9782705946909603221ull, 5431173296460009417ull, 11500435451037635740ull, 4596557359891670451ull}}, {{1118667820109654825ull, 10862346592920018835ull, 4554126828365719864ull, 9193114719783340903ull}}, {{7602431193505751612ull, 9551166948067824413ull, 11978871809898874942ull, 1838622943956668180ull}}, {{15204862387011503223ull, 655589822426097210ull, 5510999546088198269ull, 3677245887913336361ull}}, {{11962980700313454830ull, 1311179644852194421ull, 11021999092176396538ull, 7354491775826672722ull}}, {{6081944954804601290ull, 262235928970438884ull, 9583097447919099954ull, 1470898355165334544ull}}, {{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull, 2941796710330669089ull}}, {{5881035745508853541ull, 1048943715881755537ull, 1438901644257296584ull, 5883593420661338178ull}}, {{11762071491017707081ull, 2097887431763511074ull, 2877803288514593168ull, 11767186841322676356ull}}, {{13420460742429272386ull, 15176972745320343507ull, 4264909472444828956ull, 2353437368264535271ull}}, {{8394177411148993156ull, 11907201416931135399ull, 8529818944889657913ull, 4706874736529070542ull}}, {{16788354822297986312ull, 5367658760152719182ull, 17059637889779315827ull, 9413749473058141084ull}}, {{14425717408685328232ull, 4762880566772454159ull, 18169322836923504458ull, 1882749894611628216ull}}, {{10404690743661104848ull, 9525761133544908319ull, 17891901600137457300ull, 3765499789223256433ull}}, {{2362637413612658080ull, 604778193380265023ull, 17337059126565362985ull, 7530999578446512867ull}}, {{472527482722531616ull, 7499653268159873651ull, 10846109454796893243ull, 1506199915689302573ull}}, {{945054965445063232ull, 14999306536319747302ull, 3245474835884234870ull, 3012399831378605147ull}}, {{1890109930890126464ull, 11551868998929942988ull, 6490949671768469741ull, 6024799662757210294ull}}, {{3780219861780252927ull, 4656993924150334360ull, 12981899343536939483ull, 12049599325514420588ull}}, {{4445392787097960909ull, 4620747599571977195ull, 13664426312933118866ull, 2409919865102884117ull}}, {{8890785574195921818ull, 9241495199143954390ull, 8882108552156686116ull, 4819839730205768235ull}}, {{17781571148391843635ull, 36246324578357164ull, 17764217104313372233ull, 9639679460411536470ull}}, {{10935011859162189374ull, 11075295709141402402ull, 3552843420862674446ull, 1927935892082307294ull}}, {{3423279644614827131ull, 3703847344573253189ull, 7105686841725348893ull, 3855871784164614588ull}}, {{6846559289229654262ull, 7407694689146506378ull, 14211373683450697786ull, 7711743568329229176ull}}, {{1369311857845930853ull, 8860236567313121922ull, 6531623551432049880ull, 1542348713665845835ull}}, {{2738623715691861705ull, 17720473134626243844ull, 13063247102864099760ull, 3084697427331691670ull}}, {{5477247431383723409ull, 16994202195542936072ull, 7679750132018647905ull, 6169394854663383341ull}}, {{10954494862767446818ull, 15541660317376320528ull, 15359500264037295811ull, 12338789709326766682ull}}, {{5880247787295399687ull, 14176378507700995075ull, 10450597682291279808ull, 2467757941865353336ull}}, {{11760495574590799374ull, 9906012941692438534ull, 2454451290873008001ull, 4935515883730706673ull}}, {{5074247075472047131ull, 1365281809675325453ull, 4908902581746016003ull, 9871031767461413346ull}}, {{8393547044578230073ull, 15030451620902706383ull, 4671129331091113523ull, 1974206353492282669ull}}, {{16787094089156460146ull, 11614159168095861150ull, 9342258662182227047ull, 3948412706984565338ull}}, {{15127444104603368675ull, 4781574262482170685ull, 237773250654902479ull, 7896825413969130677ull}}, {{6714837635662584059ull, 4645663667238344460ull, 7426252279614801142ull, 1579365082793826135ull}}, {{13429675271325168117ull, 9291327334476688920ull, 14852504559229602284ull, 3158730165587652270ull}}, {{8412606468940784617ull, 135910595243826225ull, 11258265044749652953ull, 6317460331175304541ull}}, {{16825212937881569233ull, 271821190487652450ull, 4069786015789754290ull, 12634920662350609083ull}}, {{14433089031802044817ull, 11122410682323261459ull, 11882003647383681827ull, 2526984132470121816ull}}, {{10419433989894538017ull, 3798077290936971303ull, 5317263221057812039ull, 5053968264940243633ull}}, {{2392123906079524417ull, 7596154581873942607ull, 10634526442115624078ull, 10107936529880487266ull}}, {{4167773595957815207ull, 16276626175342429814ull, 5816254103165035138ull, 2021587305976097453ull}}, {{8335547191915630413ull, 14106508276975308012ull, 11632508206330070277ull, 4043174611952194906ull}}, {{16671094383831260826ull, 9766272480241064408ull, 4818272338950588939ull, 8086349223904389813ull}}, {{3334218876766252166ull, 9331952125532033528ull, 12031700912015848757ull, 1617269844780877962ull}}, {{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull, 3234539689561755925ull}}, {{13336875507065008661ull, 434320354709030880ull, 11233315500644291798ull, 6469079379123511850ull}}, {{13735421545638732702ull, 11154910515167537145ull, 2246663100128858359ull, 1293815875824702370ull}}, {{9024099017567913788ull, 3863076956625522675ull, 4493326200257716719ull, 2587631751649404740ull}}, {{18048198035135827576ull, 7726153913251045350ull, 8986652400515433438ull, 5175263503298809480ull}}, {{17649651996562103535ull, 15452307826502090701ull, 17973304801030866876ull, 10350527006597618960ull}}, {{10908628028796241354ull, 6779810380042328463ull, 3594660960206173375ull, 2070105401319523792ull}}, {{3370511983882931091ull, 13559620760084656927ull, 7189321920412346750ull, 4140210802639047584ull}}, {{6741023967765862181ull, 8672497446459762238ull, 14378643840824693501ull, 8280421605278095168ull}}, {{8726902423036993083ull, 16491894748259593740ull, 13943775212390669669ull, 1656084321055619033ull}}, {{17453804846073986166ull, 14537045422809635864ull, 9440806351071787723ull, 3312168642111238067ull}}, {{16460865618438420715ull, 10627346771909720113ull, 434868628434023831ull, 6624337284222476135ull}}, {{18049568382655325436ull, 5814818169123854345ull, 86973725686804766ull, 1324867456844495227ull}}, {{17652392691601099256ull, 11629636338247708691ull, 173947451373609532ull, 2649734913688990454ull}}, {{16858041309492646895ull, 4812528602785865767ull, 347894902747219065ull, 5299469827377980908ull}}, {{15269338545275742174ull, 9625057205571731535ull, 695789805494438130ull, 10598939654755961816ull}}, {{6743216523797058758ull, 5614360255856256630ull, 3828506775840797949ull, 2119787930951192363ull}}, {{13486433047594117516ull, 11228720511712513260ull, 7657013551681595898ull, 4239575861902384726ull}}, {{8526122021478683416ull, 4010696949715474905ull, 15314027103363191797ull, 8479151723804769452ull}}, {{16462619663263377976ull, 15559534648910736273ull, 10441503050156459005ull, 1695830344760953890ull}}, {{14478495252817204336ull, 12672325224111920931ull, 2436262026603366395ull, 3391660689521907781ull}}, {{10510246431924857056ull, 6897906374514290247ull, 4872524053206732791ull, 6783321379043815562ull}}, {{2102049286384971412ull, 12447627719128589019ull, 8353202440125167204ull, 1356664275808763112ull}}, {{4204098572769942823ull, 6448511364547626422ull, 16706404880250334409ull, 2713328551617526224ull}}, {{8408197145539885645ull, 12897022729095252844ull, 14966065686791117202ull, 5426657103235052449ull}}, {{16816394291079771289ull, 7347301384480954072ull, 11485387299872682789ull, 10853314206470104899ull}}, {{3363278858215954258ull, 12537506721121921784ull, 17054472718942177850ull, 2170662841294020979ull}}, {{6726557716431908516ull, 6628269368534291952ull, 15662201364174804085ull, 4341325682588041959ull}}, {{13453115432863817032ull, 13256538737068583904ull, 12877658654640056554ull, 8682651365176083919ull}}, {{10069320716056584053ull, 13719354191639447750ull, 17332926989895652603ull, 1736530273035216783ull}}, {{1691897358403616490ull, 8991964309569343885ull, 16219109906081753591ull, 3473060546070433567ull}}, {{3383794716807232979ull, 17983928619138687770ull, 13991475738453955566ull, 6946121092140867135ull}}, {{4366107758103356919ull, 7286134538569647877ull, 2798295147690791113ull, 1389224218428173427ull}}, {{8732215516206713838ull, 14572269077139295754ull, 5596590295381582226ull, 2778448436856346854ull}}, {{17464431032413427676ull, 10697794080569039892ull, 11193180590763164453ull, 5556896873712693708ull}}, {{16482117991117303736ull, 2948844087428528169ull, 3939617107816777291ull, 11113793747425387417ull}}, {{10675121227707281394ull, 11657815261711436603ull, 8166621051047176104ull, 2222758749485077483ull}}, {{2903498381705011171ull, 4868886449713321591ull, 16333242102094352209ull, 4445517498970154966ull}}, {{5806996763410022342ull, 9737772899426643182ull, 14219740130479152802ull, 8891034997940309933ull}}, {{8540096982165825115ull, 1947554579885328636ull, 13911994470321561530ull, 1778206999588061986ull}}, {{17080193964331650230ull, 3895109159770657272ull, 9377244866933571444ull, 3556413999176123973ull}}, {{15713643854953748843ull, 7790218319541314545ull, 307745660157591272ull, 7112827998352247947ull}}, {{17900124029958391062ull, 16315438922875904201ull, 7440246761515338900ull, 1422565599670449589ull}}, {{17353503986207230507ull, 14184133772042256787ull, 14880493523030677801ull, 2845131199340899178ull}}, {{16260263898704909398ull, 9921523470374961959ull, 11314242972351803987ull, 5690262398681798357ull}}, {{14073783723700267180ull, 1396302867040372303ull, 4181741870994056359ull, 11380524797363596715ull}}, {{10193454374223874083ull, 15036655832375715753ull, 836348374198811271ull, 2276104959472719343ull}}, {{1940164674738196549ull, 11626567591041879891ull, 1672696748397622543ull, 4552209918945438686ull}}, {{3880329349476393097ull, 4806391108374208166ull, 3345393496795245087ull, 9104419837890877372ull}}, {{776065869895278620ull, 15718673480642482926ull, 8047776328842869663ull, 1820883967578175474ull}}, {{1552131739790557239ull, 12990602887575414236ull, 16095552657685739327ull, 3641767935156350948ull}}, {{3104263479581114478ull, 7534461701441276856ull, 13744361241661927039ull, 7283535870312701897ull}}, {{7999550325400043542ull, 5196241155030165694ull, 10127569877816206054ull, 1456707174062540379ull}}, {{15999100650800087084ull, 10392482310060331388ull, 1808395681922860492ull, 2913414348125080759ull}}, {{13551457227890622552ull, 2338220546411111161ull, 3616791363845720985ull, 5826828696250161518ull}}, {{8656170382071693488ull, 4676441092822222323ull, 7233582727691441970ull, 11653657392500323036ull}}, {{16488629335381979991ull, 4624637033306354787ull, 5136065360280198717ull, 2330731478500064607ull}}, {{14530514597054408365ull, 9249274066612709575ull, 10272130720560397434ull, 4661462957000129214ull}}, {{10614285120399265113ull, 51804059515867535ull, 2097517367411243253ull, 9322925914000258429ull}}, {{9501554653563673669ull, 7389058441386994153ull, 15176898732449889943ull, 1864585182800051685ull}}, {{556365233417795722ull, 14778116882773988307ull, 11907053391190228270ull, 3729170365600103371ull}}, {{1112730466835591444ull, 11109489691838424998ull, 5367362708670904925ull, 7458340731200206743ull}}, {{3911894908109028612ull, 13289944382593415969ull, 12141518985959911954ull, 1491668146240041348ull}}, {{7823789816218057224ull, 8133144691477280322ull, 5836293898210272293ull, 2983336292480082697ull}}, {{15647579632436114448ull, 16266289382954560644ull, 11672587796420544586ull, 5966672584960165394ull}}, {{12848415191162677280ull, 14085834692199569673ull, 4898431519131537557ull, 11933345169920330789ull}}, {{17327078297200176749ull, 6506515753181824257ull, 15737081562793948804ull, 2386669033984066157ull}}, {{16207412520690801882ull, 13013031506363648515ull, 13027419051878345992ull, 4773338067968132315ull}}, {{13968080967672052148ull, 7579318939017745415ull, 7608094030047140369ull, 9546676135936264631ull}}, {{2793616193534410430ull, 1515863787803549083ull, 5210967620751338397ull, 1909335227187252926ull}}, {{5587232387068820859ull, 3031727575607098166ull, 10421935241502676794ull, 3818670454374505852ull}}, {{11174464774137641718ull, 6063455151214196332ull, 2397126409295801972ull, 7637340908749011705ull}}, {{16992288213795169637ull, 8591388659726659912ull, 479425281859160394ull, 1527468181749802341ull}}, {{15537832353880787657ull, 17182777319453319825ull, 958850563718320788ull, 3054936363499604682ull}}, {{12628920634052023698ull, 15918810565197088035ull, 1917701127436641577ull, 6109872726999209364ull}}, {{6811097194394495779ull, 13390877056684624455ull, 3835402254873283155ull, 12219745453998418728ull}}, {{12430265883104630126ull, 13746221855562655860ull, 11835126895200387600ull, 2443949090799683745ull}}, {{6413787692499708635ull, 9045699637415760105ull, 5223509716691223585ull, 4887898181599367491ull}}, {{12827575384999417270ull, 18091399274831520210ull, 10447019433382447170ull, 9775796363198734982ull}}, {{9944212706483704101ull, 10996977484450124688ull, 9468101516160310080ull, 1955159272639746996ull}}, {{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull, 3910318545279493993ull}}, {{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull, 7820637090558987986ull}}, {{11644718979928873604ull, 5108233172818189427ull, 3885132398186337741ull, 1564127418111797597ull}}, {{4842693886148195591ull, 10216466345636378855ull, 7770264796372675482ull, 3128254836223595194ull}}, {{9685387772296391182ull, 1986188617563206094ull, 15540529592745350965ull, 6256509672447190388ull}}, {{924031470883230748ull, 3972377235126412189ull, 12634315111781150314ull, 12513019344894380777ull}}, {{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull, 2502603868978876155ull}}, {{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull, 5005207737957752311ull}}, {{739225176706584598ull, 17935297047068771044ull, 2728754459941099604ull, 10010415475915504622ull}}, {{147845035341316920ull, 7276408224155664532ull, 7924448521472040567ull, 2002083095183100924ull}}, {{295690070682633840ull, 14552816448311329064ull, 15848897042944081134ull, 4004166190366201848ull}}, {{591380141365267679ull, 10658888822913106512ull, 13251050012178610653ull, 8008332380732403697ull}}, {{7496973657756874183ull, 2131777764582621302ull, 10028907631919542777ull, 1601666476146480739ull}}, {{14993947315513748365ull, 4263555529165242604ull, 1611071190129533938ull, 3203332952292961479ull}}, {{11541150557317945113ull, 8527111058330485209ull, 3222142380259067876ull, 6406665904585922958ull}}, {{13376276555689319993ull, 16462817470633738334ull, 11712474920277544544ull, 1281333180917184591ull}}, {{8305809037669088369ull, 14478890867557925053ull, 4978205766845537473ull, 2562666361834369183ull}}, {{16611618075338176737ull, 10511037661406298490ull, 9956411533691074947ull, 5125332723668738366ull}}, {{14776492076966801857ull, 2575331249103045365ull, 1466078993672598279ull, 10250665447337476733ull}}, {{10333996044877181018ull, 7893763879304429719ull, 11361262242960250625ull, 2050133089467495346ull}}, {{2221248016044810420ull, 15787527758608859439ull, 4275780412210949634ull, 4100266178934990693ull}}, {{4442496032089620839ull, 13128311443508167262ull, 8551560824421899269ull, 8200532357869981386ull}}, {{8267196835901744815ull, 2625662288701633452ull, 5399660979626290177ull, 1640106471573996277ull}}, {{16534393671803489629ull, 5251324577403266904ull, 10799321959252580354ull, 3280212943147992554ull}}, {{14622043269897427641ull, 10502649154806533809ull, 3151899844795609092ull, 6560425886295985109ull}}, {{2924408653979485529ull, 5789878645703217085ull, 15387775227926763111ull, 1312085177259197021ull}}, {{5848817307958971057ull, 11579757291406434170ull, 12328806382143974606ull, 2624170354518394043ull}}, {{11697634615917942113ull, 4712770509103316724ull, 6210868690578397597ull, 5248340709036788087ull}}, {{4948525158126332609ull, 9425541018206633449ull, 12421737381156795194ull, 10496681418073576174ull}}, {{8368402661109087169ull, 12953154647867057659ull, 17241742735199000331ull, 2099336283614715234ull}}, {{16736805322218174337ull, 7459565222024563702ull, 16036741396688449047ull, 4198672567229430469ull}}, {{15026866570726797057ull, 14919130444049127405ull, 13626738719667346478ull, 8397345134458860939ull}}, {{10384070943629180058ull, 10362523718293646127ull, 17482743002901110588ull, 1679469026891772187ull}}, {{2321397813548808500ull, 2278303362877740639ull, 16518741932092669561ull, 3358938053783544375ull}}, {{4642795627097617000ull, 4556606725755481278ull, 14590739790475787506ull, 6717876107567088751ull}}, {{928559125419523400ull, 8290018974634916902ull, 6607496772837067824ull, 1343575221513417750ull}}, {{1857118250839046800ull, 16580037949269833804ull, 13214993545674135648ull, 2687150443026835500ull}}, {{3714236501678093600ull, 14713331824830115992ull, 7983243017638719681ull, 5374300886053671001ull}}, {{7428473003356187199ull, 10979919575950680368ull, 15966486035277439363ull, 10748601772107342002ull}}, {{12553741044896968410ull, 2195983915190136073ull, 10571994836539308519ull, 2149720354421468400ull}}, {{6660738016084385203ull, 4391967830380272147ull, 2697245599369065422ull, 4299440708842936801ull}}, {{13321476032168770406ull, 8783935660760544294ull, 5394491198738130844ull, 8598881417685873602ull}}, {{2664295206433754082ull, 5446135946894019182ull, 8457595869231446815ull, 1719776283537174720ull}}, {{5328590412867508163ull, 10892271893788038364ull, 16915191738462893630ull, 3439552567074349440ull}}, {{10657180825735016325ull, 3337799713866525112ull, 15383639403216235645ull, 6879105134148698881ull}}, {{13199482609372734235ull, 4356908757515215345ull, 6766076695385157452ull, 1375821026829739776ull}}, {{7952221145035916853ull, 8713817515030430691ull, 13532153390770314904ull, 2751642053659479552ull}}, {{15904442290071833706ull, 17427635030060861382ull, 8617562707831078192ull, 5503284107318959105ull}}, {{13362140506434115796ull, 16408525986412171149ull, 17235125415662156385ull, 11006568214637918210ull}}, {{17429823360254464452ull, 3281705197282434229ull, 3447025083132431277ull, 2201313642927583642ull}}, {{16412902646799377288ull, 6563410394564868459ull, 6894050166264862554ull, 4402627285855167284ull}}, {{14379061219889202960ull, 13126820789129736919ull, 13788100332529725108ull, 8805254571710334568ull}}, {{2875812243977840592ull, 6314712972567857707ull, 13825666510731675991ull, 1761050914342066913ull}}, {{5751624487955681184ull, 12629425945135715414ull, 9204588947753800366ull, 3522101828684133827ull}}, {{11503248975911362368ull, 6812107816561879212ull, 18409177895507600733ull, 7044203657368267654ull}}, {{17058045054149913767ull, 8741119192796196488ull, 18439230838069161439ull, 1408840731473653530ull}}, {{15669346034590275917ull, 17482238385592392977ull, 18431717602428771262ull, 2817681462947307061ull}}, {{12891947995471000218ull, 16517732697475234339ull, 18416691131147990909ull, 5635362925894614123ull}}, {{7337151917232448819ull, 14588721321240917063ull, 18386638188586430203ull, 11270725851789228247ull}}, {{12535476827672220734ull, 2917744264248183412ull, 11056025267201106687ull, 2254145170357845649ull}}, {{6624209581634889851ull, 5835488528496366825ull, 3665306460692661758ull, 4508290340715691299ull}}, {{13248419163269779702ull, 11670977056992733650ull, 7330612921385323516ull, 9016580681431382598ull}}, {{17407079091621597234ull, 17091590670366188022ull, 12534169028502795672ull, 1803316136286276519ull}}, {{16367414109533642851ull, 15736437267022824429ull, 6621593983296039729ull, 3606632272572553039ull}}, {{14288084145357734085ull, 13026130460336097243ull, 13243187966592079459ull, 7213264545145106078ull}}, {{2857616829071546817ull, 9983923721551040095ull, 13716684037544146861ull, 1442652909029021215ull}}, {{5715233658143093634ull, 1521103369392528574ull, 8986624001378742107ull, 2885305818058042431ull}}, {{11430467316286187268ull, 3042206738785057148ull, 17973248002757484214ull, 5770611636116084862ull}}, {{4414190558862822919ull, 6084413477570114297ull, 17499751931805416812ull, 11541223272232169725ull}}, {{15640233370740205877ull, 8595580324997843505ull, 3499950386361083362ull, 2308244654446433945ull}}, {{12833722667770860138ull, 17191160649995687011ull, 6999900772722166724ull, 4616489308892867890ull}}, {{7220701261832168659ull, 15935577226281822407ull, 13999801545444333449ull, 9232978617785735780ull}}, {{5133489067108344055ull, 17944510704224005774ull, 2799960309088866689ull, 1846595723557147156ull}}, {{10266978134216688110ull, 17442277334738459932ull, 5599920618177733379ull, 3693191447114294312ull}}, {{2087212194723824604ull, 16437810595767368249ull, 11199841236355466759ull, 7386382894228588624ull}}, {{7796140068428585568ull, 14355608563379204619ull, 16997363506238734644ull, 1477276578845717724ull}}, {{15592280136857171135ull, 10264473053048857622ull, 15547982938767917673ull, 2954553157691435449ull}}, {{12737816200004790653ull, 2082202032388163629ull, 12649221803826283731ull, 5909106315382870899ull}}, {{7028888326300029689ull, 4164404064776327259ull, 6851699533943015846ull, 11818212630765741799ull}}, {{16163172924227647231ull, 832880812955265451ull, 16127735165756244462ull, 2363642526153148359ull}}, {{13879601774745742846ull, 1665761625910530903ull, 13808726257802937308ull, 4727285052306296719ull}}, {{9312459475781934075ull, 3331523251821061807ull, 9170708441896323000ull, 9454570104612593439ull}}, {{5551840709898297139ull, 15423699909331853654ull, 16591536947346905892ull, 1890914020922518687ull}}, {{11103681419796594277ull, 12400655744954155692ull, 14736329820984260169ull, 3781828041845037375ull}}, {{3760618765883636937ull, 6354567416198759769ull, 11025915568258968723ull, 7563656083690074751ull}}, {{11820170197402458357ull, 16028308742207393246ull, 5894531928393704067ull, 1512731216738014950ull}}, {{5193596321095365098ull, 13609873410705234877ull, 11789063856787408135ull, 3025462433476029900ull}}, {{10387192642190730196ull, 8773002747700918138ull, 5131383639865264655ull, 6050924866952059801ull}}, {{2327641210671908775ull, 17546005495401836277ull, 10262767279730529310ull, 12101849733904119602ull}}, {{15222923501102023048ull, 10887898728564187901ull, 9431251085429926508ull, 2420369946780823920ull}}, {{11999102928494494480ull, 3329053383418824187ull, 415758097150301401ull, 4840739893561647841ull}}, {{5551461783279437343ull, 6658106766837648375ull, 831516194300602802ull, 9681479787123295682ull}}, {{15867687615623528762ull, 16089016612335170967ull, 7545000868343941206ull, 1936295957424659136ull}}, {{13288631157537505907ull, 13731289150960790319ull, 15090001736687882413ull, 3872591914849318272ull}}, {{8130518241365460198ull, 9015834228212029023ull, 11733259399666213211ull, 7745183829698636545ull}}, {{16383498907240733333ull, 5492515660384316127ull, 2346651879933242642ull, 1549036765939727309ull}}, {{14320253740771915049ull, 10985031320768632255ull, 4693303759866485284ull, 3098073531879454618ull}}, {{10193763407834278482ull, 3523318567827712895ull, 9386607519732970569ull, 6196147063758909236ull}}, {{1940782741959005347ull, 7046637135655425791ull, 326470965756389522ull, 12392294127517818473ull}}, {{4077505363133711393ull, 1409327427131085158ull, 11133340637377008874ull, 2478458825503563694ull}}, {{8155010726267422785ull, 2818654854262170316ull, 3819937201044466132ull, 4956917651007127389ull}}, {{16310021452534845570ull, 5637309708524340632ull, 7639874402088932264ull, 9913835302014254778ull}}, {{18019399549474610407ull, 8506159571188688772ull, 12596021324643517422ull, 1982767060402850955ull}}, {{17592055025239669198ull, 17012319142377377545ull, 6745298575577483228ull, 3965534120805701911ull}}, {{16737365976769786780ull, 15577894211045203475ull, 13490597151154966457ull, 7931068241611403822ull}}, {{18104868454321598649ull, 17872974101176681987ull, 10076817059714813937ull, 1586213648322280764ull}}, {{17762992834933645682ull, 17299204128643812359ull, 1706890045720076259ull, 3172427296644561529ull}}, {{17079241596157739747ull, 16151664183578073103ull, 3413780091440152519ull, 6344854593289123058ull}}, {{15711739118605927877ull, 13856584293446594591ull, 6827560182880305039ull, 12689709186578246116ull}}, {{6831696638463095899ull, 2771316858689318918ull, 5054860851317971331ull, 2537941837315649223ull}}, {{13663393276926191798ull, 5542633717378637836ull, 10109721702635942662ull, 5075883674631298446ull}}, {{8880042480142831979ull, 11085267434757275673ull, 1772699331562333708ull, 10151767349262596893ull}}, {{16533403754996207689ull, 5906402301693365457ull, 11422586310538197711ull, 2030353469852519378ull}}, {{14620063436282863761ull, 11812804603386730915ull, 4398428547366843806ull, 4060706939705038757ull}}, {{10793382798856175906ull, 5178865133063910215ull, 8796857094733687613ull, 8121413879410077514ull}}, {{9537374189255055828ull, 8414470656096602689ull, 16516766677914378815ull, 1624282775882015502ull}}, {{628004304800560040ull, 16828941312193205379ull, 14586789282119206014ull, 3248565551764031005ull}}, {{1256008609601120079ull, 15211138550676859142ull, 10726834490528860413ull, 6497131103528062011ull}}, {{3940550536662134339ull, 17799622969103013121ull, 5834715712847682405ull, 1299426220705612402ull}}, {{7881101073324268678ull, 17152501864496474626ull, 11669431425695364811ull, 2598852441411224804ull}}, {{15762202146648537356ull, 15858259655283397636ull, 4892118777681178007ull, 5197704882822449609ull}}, {{13077660219587523095ull, 13269775236857243657ull, 9784237555362356015ull, 10395409765644899218ull}}, {{2615532043917504619ull, 13722001491597179701ull, 13024893955298202172ull, 2079081953128979843ull}}, {{5231064087835009238ull, 8997258909484807786ull, 7603043836886852729ull, 4158163906257959687ull}}, {{10462128175670018476ull, 17994517818969615572ull, 15206087673773705458ull, 8316327812515919374ull}}, {{16849820894101644988ull, 10977601193277743760ull, 17798612793722382384ull, 1663265562503183874ull}}, {{15252897714493738360ull, 3508458312845935905ull, 17150481513735213153ull, 3326531125006367749ull}}, {{12059051355277925104ull, 7016916625691871811ull, 15854218953760874690ull, 6653062250012735499ull}}, {{2411810271055585021ull, 16160778584106015655ull, 17928239049719816230ull, 1330612450002547099ull}}, {{4823620542111170042ull, 13874813094502479694ull, 17409734025730080845ull, 2661224900005094199ull}}, {{9647241084222340084ull, 9302882115295407772ull, 16372723977750610075ull, 5322449800010188399ull}}, {{847738094735128551ull, 159020156881263929ull, 14298703881791668535ull, 10644899600020376799ull}}, {{11237594063172756680ull, 14789199290343894078ull, 17617136035325974999ull, 2128979920004075359ull}}, {{4028444052635961744ull, 11131654506978236541ull, 16787527996942398383ull, 4257959840008150719ull}}, {{8056888105271923487ull, 3816564940246921466ull, 15128311920175245151ull, 8515919680016301439ull}}, {{5300726435796295021ull, 763312988049384293ull, 17783057643002690323ull, 1703183936003260287ull}}, {{10601452871592590042ull, 1526625976098768586ull, 17119371212295829030ull, 3406367872006520575ull}}, {{2756161669475628467ull, 3053251952197537173ull, 15791998350882106444ull, 6812735744013041151ull}}, {{11619278778120856663ull, 610650390439507434ull, 6847748484918331612ull, 1362547148802608230ull}}, {{4791813482532161710ull, 1221300780879014869ull, 13695496969836663224ull, 2725094297605216460ull}}, {{9583626965064323420ull, 2442601561758029738ull, 8944249865963774832ull, 5450188595210432921ull}}, {{720509856419095223ull, 4885203123516059477ull, 17888499731927549664ull, 10900377190420865842ull}}, {{11212148415509550015ull, 4666389439445122218ull, 10956397575869330579ull, 2180075438084173168ull}}, {{3977552757309548413ull, 9332778878890244437ull, 3466051078029109542ull, 4360150876168346337ull}}, {{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull, 8720301752336692674ull}}, {{8969718732407640012ull, 14801157995781828744ull, 16143815690179285109ull, 1744060350467338534ull}}, {{17939437464815280023ull, 11155571917854105872ull, 13840887306649018603ull, 3488120700934677069ull}}, {{17432130855921008430ull, 3864399761998660129ull, 9235030539588485591ull, 6976241401869354139ull}}, {{18243821430151842979ull, 772879952399732025ull, 16604401366885338411ull, 1395248280373870827ull}}, {{18040898786594134342ull, 1545759904799464051ull, 14762058660061125206ull, 2790496560747741655ull}}, {{17635053499478717067ull, 3091519809598928103ull, 11077373246412698796ull, 5580993121495483311ull}}, {{16823362925247882518ull, 6183039619197856207ull, 3708002419115845976ull, 11161986242990966623ull}}, {{7054021399791486827ull, 15994003182807212534ull, 11809646928048900164ull, 2232397248598193324ull}}, {{14108042799582973654ull, 13541262291904873452ull, 5172549782388248713ull, 4464794497196386649ull}}, {{9769341525456395691ull, 8635780510100195289ull, 10345099564776497427ull, 8929588994392773298ull}}, {{16711263564058920431ull, 1727156102020039057ull, 13137066357181030455ull, 1785917798878554659ull}}, {{14975783054408289246ull, 3454312204040078115ull, 7827388640652509294ull, 3571835597757109319ull}}, {{11504822035107026876ull, 6908624408080156231ull, 15654777281305018588ull, 7143671195514218638ull}}, {{9679662036505226022ull, 5071073696357941569ull, 14199001900486734687ull, 1428734239102843727ull}}, {{912579999300900428ull, 10142147392715883139ull, 9951259727263917758ull, 2857468478205687455ull}}, {{1825159998601800855ull, 1837550711722214662ull, 1455775380818283901ull, 5714936956411374911ull}}, {{3650319997203601709ull, 3675101423444429324ull, 2911550761636567802ull, 11429873912822749822ull}}, {{11798110443666451312ull, 15492415543656527157ull, 7961007781811134206ull, 2285974782564549964ull}}, {{5149476813623351007ull, 12538087013603502699ull, 15922015563622268413ull, 4571949565129099928ull}}, {{10298953627246702013ull, 6629429953497453782ull, 13397287053534985211ull, 9143899130258199857ull}}, {{2059790725449340403ull, 12393932434925221726ull, 10058155040190817688ull, 1828779826051639971ull}}, {{4119581450898680806ull, 6341120796140891836ull, 1669566006672083761ull, 3657559652103279943ull}}, {{8239162901797361611ull, 12682241592281783672ull, 3339132013344167522ull, 7315119304206559886ull}}, {{1647832580359472323ull, 13604494762682087704ull, 4357175217410743827ull, 1463023860841311977ull}}, {{3295665160718944645ull, 8762245451654623792ull, 8714350434821487655ull, 2926047721682623954ull}}, {{6591330321437889289ull, 17524490903309247584ull, 17428700869642975310ull, 5852095443365247908ull}}, {{13182660642875778577ull, 16602237732908943552ull, 16410657665576399005ull, 11704190886730495817ull}}, {{17393927387542797009ull, 10699145176065609356ull, 10660829162599100447ull, 2340838177346099163ull}}, {{16341110701376042401ull, 2951546278421667097ull, 2874914251488649279ull, 4681676354692198327ull}}, {{14235477329042533185ull, 5903092556843334195ull, 5749828502977298558ull, 9363352709384396654ull}}, {{10225793095292327284ull, 8559316140852487485ull, 15907360959563101004ull, 1872670541876879330ull}}, {{2004842116875102951ull, 17118632281704974971ull, 13367977845416650392ull, 3745341083753758661ull}}, {{4009684233750205902ull, 15790520489700398326ull, 8289211617123749169ull, 7490682167507517323ull}}, {{11869983290975772150ull, 10536801727423900311ull, 12725888767650480803ull, 1498136433501503464ull}}, {{5293222508241992684ull, 2626859381138249007ull, 7005033461591409991ull, 2996272867003006929ull}}, {{10586445016483985368ull, 5253718762276498014ull, 14010066923182819982ull, 5992545734006013858ull}}, {{2726145959258419119ull, 10507437524552996029ull, 9573389772656088348ull, 11985091468012027717ull}}, {{15302624450819325117ull, 2101487504910599205ull, 9293375584015038316ull, 2397018293602405543ull}}, {{12158504827929098618ull, 4202975009821198411ull, 140007094320525016ull, 4794036587204811087ull}}, {{5870265582148645619ull, 8405950019642396823ull, 280014188641050032ull, 9588073174409622174ull}}, {{15931448375397370417ull, 5370538818670389687ull, 14813398096695851299ull, 1917614634881924434ull}}, {{13416152677085189217ull, 10741077637340779375ull, 11180052119682150982ull, 3835229269763848869ull}}, {{8385561280460826818ull, 3035411200972007135ull, 3913360165654750349ull, 7670458539527697739ull}}, {{12745158700317896334ull, 11675128684420132396ull, 15540067292098591362ull, 1534091707905539547ull}}, {{7043573326926241051ull, 4903513295130713177ull, 12633390510487631109ull, 3068183415811079095ull}}, {{14087146653852482101ull, 9807026590261426354ull, 6820036947265710602ull, 6136366831622158191ull}}, {{9727549233995412585ull, 1167309106813301093ull, 13640073894531421205ull, 12272733663244316382ull}}, {{1945509846799082517ull, 7612159450846480865ull, 10106712408390104887ull, 2454546732648863276ull}}, {{3891019693598165034ull, 15224318901692961730ull, 1766680743070658158ull, 4909093465297726553ull}}, {{7782039387196330068ull, 12001893729676371844ull, 3533361486141316317ull, 9818186930595453106ull}}, {{8935105506923086660ull, 13468425190161005338ull, 4396021111970173586ull, 1963637386119090621ull}}, {{17870211013846173320ull, 8490106306612459060ull, 8792042223940347173ull, 3927274772238181242ull}}, {{17293677953982795024ull, 16980212613224918121ull, 17584084447880694346ull, 7854549544476362484ull}}, {{7148084405538469328ull, 3396042522644983624ull, 18274212148543780162ull, 1570909908895272496ull}}, {{14296168811076938656ull, 6792085045289967248ull, 18101680223378008708ull, 3141819817790544993ull}}, {{10145593548444325696ull, 13584170090579934497ull, 17756616373046465800ull, 6283639635581089987ull}}, {{1844443023179099776ull, 8721596107450317379ull, 17066488672383379985ull, 12567279271162179975ull}}, {{15126283863603461248ull, 1744319221490063475ull, 3413297734476675997ull, 2513455854232435995ull}}, {{11805823653497370880ull, 3488638442980126951ull, 6826595468953351994ull, 5026911708464871990ull}}, {{5164903233285190144ull, 6977276885960253903ull, 13653190937906703988ull, 10053823416929743980ull}}, {{4722329461398948352ull, 12463501821417781750ull, 2730638187581340797ull, 2010764683385948796ull}}, {{9444658922797896704ull, 6480259569126011884ull, 5461276375162681595ull, 4021529366771897592ull}}, {{442573771886241792ull, 12960519138252023769ull, 10922552750325363190ull, 8043058733543795184ull}}, {{11156561198602979328ull, 17349499086618046046ull, 16941905809032713930ull, 1608611746708759036ull}}, {{3866378323496407040ull, 16252254099526540477ull, 15437067544355876245ull, 3217223493417518073ull}}, {{7732756646992814080ull, 14057764125343529338ull, 12427391015002200875ull, 6434446986835036147ull}}, {{1546551329398562816ull, 10190250454552526514ull, 9864175832484260821ull, 1286889397367007229ull}}, {{3093102658797125632ull, 1933756835395501412ull, 1281607591258970027ull, 2573778794734014459ull}}, {{6186205317594251264ull, 3867513670791002824ull, 2563215182517940054ull, 5147557589468028918ull}}, {{12372410635188502528ull, 7735027341582005648ull, 5126430365035880108ull, 10295115178936057836ull}}, {{9853179756521521152ull, 16304400727284042422ull, 4714634887749086344ull, 2059023035787211567ull}}, {{1259615439333490688ull, 14162057380858533229ull, 9429269775498172689ull, 4118046071574423134ull}}, {{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull, 8236092143148846269ull}}, {{15261241434701037568ull, 9354171767085323614ull, 14839754354425000045ull, 1647218428629769253ull}}, {{12075738795692523520ull, 261599460461095613ull, 11232764635140448475ull, 3294436857259538507ull}}, {{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull, 6588873714519077015ull}}, {{4830295518277009408ull, 14862035043152079538ull, 803757039314269066ull, 1317774742903815403ull}}, {{9660591036554018816ull, 11277326012594607460ull, 1607514078628538133ull, 2635549485807630806ull}}, {{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull, 5271098971615261612ull}}, {{1748875998796972032ull, 8215815902959326610ull, 6430056314514152534ull, 10542197943230523224ull}}, {{11417821643985125376ull, 12711209624817596291ull, 16043406521870471799ull, 2108439588646104644ull}}, {{4388899214260699136ull, 6975675175925640967ull, 13640068970031391983ull, 4216879177292209289ull}}, {{8777798428521398272ull, 13951350351851281934ull, 8833393866353232350ull, 8433758354584418579ull}}, {{12823606129930010624ull, 17547665329337897679ull, 16524074032238287762ull, 1686751670916883715ull}}, {{7200468186150469632ull, 16648586584966243743ull, 14601403990767023909ull, 3373503341833767431ull}}, {{14400936372300939264ull, 14850429096222935870ull, 10756063907824496203ull, 6747006683667534863ull}}, {{6569536089202098176ull, 6659434633986497497ull, 13219259225790630210ull, 1349401336733506972ull}}, {{13139072178404196352ull, 13318869267972994994ull, 7991774377871708804ull, 2698802673467013945ull}}, {{7831400283098841088ull, 8190994462236438373ull, 15983548755743417609ull, 5397605346934027890ull}}, {{15662800566197682176ull, 16381988924472876746ull, 13520353437777283602ull, 10795210693868055781ull}}, {{17889955372207177728ull, 14344444229120306318ull, 6393419502297367043ull, 2159042138773611156ull}}, {{17333166670704803840ull, 10242144384531061021ull, 12786839004594734087ull, 4318084277547222312ull}}, {{16219589267700056064ull, 2037544695352570427ull, 7126933935479916559ull, 8636168555094444625ull}}, {{6933266668281921536ull, 15164904198038155378ull, 1425386787095983311ull, 1727233711018888925ull}}, {{13866533336563843072ull, 11883064322366759140ull, 2850773574191966623ull, 3454467422037777850ull}}, {{9286322599418134528ull, 5319384571023966665ull, 5701547148383933247ull, 6908934844075555700ull}}, {{9235962149367447552ull, 8442574543688613979ull, 1140309429676786649ull, 1381786968815111140ull}}, {{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull, 2763573937630222280ull}}, {{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull, 5527147875260444560ull}}, {{100720900101373952ull, 12200364128380256988ull, 9122475437414293195ull, 11054295750520889120ull}}, {{11088190624246005760ull, 2440072825676051397ull, 1824495087482858639ull, 2210859150104177824ull}}, {{3729637174782459904ull, 4880145651352102795ull, 3648990174965717278ull, 4421718300208355648ull}}, {{7459274349564919808ull, 9760291302704205590ull, 7297980349931434556ull, 8843436600416711296ull}}, {{8870552499396804608ull, 9330755890024661764ull, 5148944884728197234ull, 1768687320083342259ull}}, {{17741104998793609216ull, 214767706339771912ull, 10297889769456394469ull, 3537374640166684518ull}}, {{17035465923877666816ull, 429535412679543825ull, 2149035465203237322ull, 7074749280333369037ull}}, {{18164488443743174656ull, 14843302341503550057ull, 7808504722524468110ull, 1414949856066673807ull}}, {{17882232813776797696ull, 11239860609297548499ull, 15617009445048936221ull, 2829899712133347614ull}}, {{17317721553844043776ull, 4032977144885545383ull, 12787274816388320827ull, 5659799424266695229ull}}, {{16188699033978535936ull, 8065954289771090767ull, 7127805559067090038ull, 11319598848533390459ull}}, {{17995135065763348480ull, 8991888487438038799ull, 16182956370781059300ull, 2263919769706678091ull}}, {{17543526057817145344ull, 17983776974876077599ull, 13919168667852566984ull, 4527839539413356183ull}}, {{16640308041924739072ull, 17520809876042603583ull, 9391593261995582353ull, 9055679078826712367ull}}, {{14396108052610678784ull, 3504161975208520716ull, 9257016281882937117ull, 1811135815765342473ull}}, {{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull, 3622271631530684947ull}}, {{2244199989314060288ull, 14016647900834082867ull, 134576980112645236ull, 7244543263061369894ull}}, {{7827537627346632704ull, 2803329580166816573ull, 14784310654990170340ull, 1448908652612273978ull}}, {{15655075254693265408ull, 5606659160333633146ull, 11121877236270789064ull, 2897817305224547957ull}}, {{12863406435676979200ull, 11213318320667266293ull, 3797010398832026512ull, 5795634610449095915ull}}, {{7280068797644406784ull, 3979892567624980971ull, 7594020797664053025ull, 11591269220898191830ull}}, {{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull, 2318253844179638366ull}}, {{10290725148541583360ull, 1591957027049992388ull, 3037608319065621210ull, 4636507688359276732ull}}, {{2134706223373615104ull, 3183914054099984777ull, 6075216638131242420ull, 9273015376718553464ull}}, {{4116290059416633344ull, 15394178069787638248ull, 15972438586593889776ull, 1854603075343710692ull}}, {{8232580118833266688ull, 12341612065865724880ull, 13498133099478227937ull, 3709206150687421385ull}}, {{16465160237666533376ull, 6236480058021898144ull, 8549522125246904259ull, 7418412301374842771ull}}, {{18050427306500947968ull, 1247296011604379628ull, 5399253239791291175ull, 1483682460274968554ull}}, {{17654110539292344320ull, 2494592023208759257ull, 10798506479582582350ull, 2967364920549937108ull}}, {{16861477004875137024ull, 4989184046417518515ull, 3150268885455613084ull, 5934729841099874217ull}}, {{15276209936040722432ull, 9978368092835037031ull, 6300537770911226168ull, 11869459682199748434ull}}, {{14123288431433875456ull, 9374371248050828052ull, 16017502813149886526ull, 2373891936439949686ull}}, {{9799832789158199296ull, 301998422392104489ull, 13588261552590221437ull, 4747783872879899373ull}}, {{1152921504606846976ull, 603996844784208979ull, 8729779031470891258ull, 9495567745759798747ull}}, {{14987979559889010688ull, 120799368956841795ull, 9124653435777998898ull, 1899113549151959749ull}}, {{11529215046068469760ull, 241598737913683591ull, 18249306871555997796ull, 3798227098303919498ull}}, {{4611686018427387904ull, 483197475827367183ull, 18051869669402443976ull, 7596454196607838997ull}}, {{4611686018427387904ull, 11164685939391204406ull, 10989071563364309441ull, 1519290839321567799ull}}, {{9223372036854775808ull, 3882627805072857196ull, 3531399053019067267ull, 3038581678643135599ull}}, {{0ull, 7765255610145714393ull, 7062798106038134534ull, 6077163357286271198ull}}, {{0ull, 15530511220291428786ull, 14125596212076269068ull, 12154326714572542396ull}}, {{0ull, 17863497503025927050ull, 6514468057157164136ull, 2430865342914508479ull}}, {{0ull, 17280250932342302484ull, 13028936114314328273ull, 4861730685829016958ull}}, {{0ull, 16113757790975053352ull, 7611128154919104931ull, 9723461371658033917ull}}, {{0ull, 14290798002420741640ull, 8900923260467641632ull, 1944692274331606783ull}}, {{0ull, 10134851931131931664ull, 17801846520935283265ull, 3889384548663213566ull}}, {{0ull, 1822959788554311712ull, 17156948968161014915ull, 7778769097326427133ull}}, {{0ull, 11432638401936593312ull, 14499436237857933952ull, 1555753819465285426ull}}, {{0ull, 4418532730163635008ull, 10552128402006316289ull, 3111507638930570853ull}}, {{0ull, 8837065460327270016ull, 2657512730303080962ull, 6223015277861141707ull}}, {{0ull, 17674130920654540032ull, 5315025460606161924ull, 12446030555722283414ull}}, {{0ull, 14602872628356638976ull, 15820400351088873677ull, 2489206111144456682ull}}, {{0ull, 10759001183003726336ull, 13194056628468195739ull, 4978412222288913365ull}}, {{0ull, 3071258292297901056ull, 7941369183226839863ull, 9956824444577826731ull}}, {{0ull, 15371646917427221504ull, 5277622651387278295ull, 1991364888915565346ull}}, {{0ull, 12296549761144891392ull, 10555245302774556591ull, 3982729777831130692ull}}, {{0ull, 6146355448580231168ull, 2663746531839561567ull, 7965459555662261385ull}}, {{0ull, 8607968719199866880ull, 532749306367912313ull, 1593091911132452277ull}}, {{0ull, 17215937438399733760ull, 1065498612735824626ull, 3186183822264904554ull}}, {{0ull, 15985130803089915904ull, 2130997225471649253ull, 6372367644529809108ull}}, {{0ull, 13523517532470280192ull, 4261994450943298507ull, 12744735289059618216ull}}, {{0ull, 13772749950719787008ull, 4541747704930570024ull, 2548947057811923643ull}}, {{0ull, 9098755827730022400ull, 9083495409861140049ull, 5097894115623847286ull}}, {{0ull, 18197511655460044800ull, 18166990819722280098ull, 10195788231247694572ull}}, {{0ull, 3639502331092008960ull, 11012095793428276666ull, 2039157646249538914ull}}, {{0ull, 7279004662184017920ull, 3577447513147001716ull, 4078315292499077829ull}}, {{0ull, 14558009324368035840ull, 7154895026294003432ull, 8156630584998155658ull}}, {{0ull, 2911601864873607168ull, 12499025449484531656ull, 1631326116999631131ull}}, {{0ull, 5823203729747214336ull, 6551306825259511696ull, 3262652233999262263ull}}, {{0ull, 11646407459494428672ull, 13102613650519023392ull, 6525304467998524526ull}}, {{0ull, 13397327936124616704ull, 6309871544845715001ull, 1305060893599704905ull}}, {{0ull, 8347911798539681792ull, 12619743089691430003ull, 2610121787199409810ull}}, {{0ull, 16695823597079363584ull, 6792742105673308390ull, 5220243574398819621ull}}, {{0ull, 14944903120449175552ull, 13585484211346616781ull, 10440487148797639242ull}}, {{0ull, 14057027068315566080ull, 10095794471753144002ull, 2088097429759527848ull}}, {{0ull, 9667310062921580544ull, 1744844869796736389ull, 4176194859519055697ull}}, {{0ull, 887876052133609472ull, 3489689739593472779ull, 8352389719038111394ull}}, {{0ull, 11245621654652452864ull, 15455333206886335848ull, 1670477943807622278ull}}, {{0ull, 4044499235595354112ull, 12463922340063120081ull, 3340955887615244557ull}}, {{0ull, 8088998471190708224ull, 6481100606416688546ull, 6681911775230489115ull}}, {{0ull, 5307148508980051968ull, 1296220121283337709ull, 1336382355046097823ull}}, {{0ull, 10614297017960103936ull, 2592440242566675418ull, 2672764710092195646ull}}, {{0ull, 2781849962210656256ull, 5184880485133350837ull, 5345529420184391292ull}}, {{0ull, 5563699924421312512ull, 10369760970266701674ull, 10691058840368782584ull}}, {{0ull, 12180786429109993472ull, 16831347453020981627ull, 2138211768073756516ull}}, {{0ull, 5914828784510435328ull, 15215950832332411639ull, 4276423536147513033ull}}, {{0ull, 11829657569020870656ull, 11985157590955271662ull, 8552847072295026067ull}}, {{0ull, 17123326772771815424ull, 9775729147674874978ull, 1710569414459005213ull}}, {{0ull, 15799909471834079232ull, 1104714221640198341ull, 3421138828918010427ull}}, {{0ull, 13153074869958606848ull, 2209428443280396683ull, 6842277657836020854ull}}, {{0ull, 10009312603475542016ull, 15199280947623720629ull, 1368455531567204170ull}}, {{0ull, 1571881133241532416ull, 11951817821537889643ull, 2736911063134408341ull}}, {{0ull, 3143762266483064832ull, 5456891569366227670ull, 5473822126268816683ull}}, {{0ull, 6287524532966129664ull, 10913783138732455340ull, 10947644252537633366ull}}, {{0ull, 4946853721335136256ull, 5872105442488401391ull, 2189528850507526673ull}}, {{0ull, 9893707442670272512ull, 11744210884976802782ull, 4379057701015053346ull}}, {{0ull, 1340670811630993408ull, 5041677696244053949ull, 8758115402030106693ull}}, {{0ull, 7646831791810019328ull, 12076381983474541759ull, 1751623080406021338ull}}, {{0ull, 15293663583620038656ull, 5706019893239531902ull, 3503246160812042677ull}}, {{0ull, 12140583093530525696ull, 11412039786479063805ull, 7006492321624085354ull}}, {{0ull, 17185511877673746432ull, 17039803216263454053ull, 1401298464324817070ull}}, {{0ull, 15924279681637941248ull, 15632862358817356491ull, 2802596928649634141ull}}, {{0ull, 13401815289566330880ull, 12818980643925161367ull, 5605193857299268283ull}}, {{0ull, 8356886505423110144ull, 7191217214140771119ull, 11210387714598536567ull}}, {{0ull, 5360726115826532352ull, 8816941072311974870ull, 2242077542919707313ull}}, {{0ull, 10721452231653064704ull, 17633882144623949740ull, 4484155085839414626ull}}, {{0ull, 2996160389596577792ull, 16821020215538347865ull, 8968310171678829253ull}}, {{0ull, 11667278522145046528ull, 14432250487333400542ull, 1793662034335765850ull}}, {{0ull, 4887812970580541440ull, 10417756900957249469ull, 3587324068671531701ull}}, {{0ull, 9775625941161082880ull, 2388769728204947322ull, 7174648137343063403ull}}, {{0ull, 1955125188232216576ull, 11545800389866720434ull, 1434929627468612680ull}}, {{0ull, 3910250376464433152ull, 4644856706023889252ull, 2869859254937225361ull}}, {{0ull, 7820500752928866304ull, 9289713412047778504ull, 5739718509874450722ull}}, {{0ull, 15641001505857732608ull, 132682750386005392ull, 11479437019748901445ull}}, {{0ull, 10506897930655367168ull, 26536550077201078ull, 2295887403949780289ull}}, {{0ull, 2567051787601182720ull, 53073100154402157ull, 4591774807899560578ull}}, {{0ull, 5134103575202365440ull, 106146200308804314ull, 9183549615799121156ull}}, {{0ull, 1026820715040473088ull, 3710578054803671186ull, 1836709923159824231ull}}, {{0ull, 2053641430080946176ull, 7421156109607342372ull, 3673419846319648462ull}}, {{0ull, 4107282860161892352ull, 14842312219214684744ull, 7346839692639296924ull}}, {{0ull, 11889503016258109440ull, 17725857702810578241ull, 1469367938527859384ull}}, {{0ull, 5332261958806667264ull, 17004971331911604867ull, 2938735877055718769ull}}, {{0ull, 10664523917613334528ull, 15563198590113658118ull, 5877471754111437539ull}}, {{0ull, 2882303761517117440ull, 12679653106517764621ull, 11754943508222875079ull}}, {{0ull, 576460752303423488ull, 17293325880271194217ull, 2350988701644575015ull}}, {{0ull, 1152921504606846976ull, 16139907686832836818ull, 4701977403289150031ull}}, {{0ull, 2305843009213693952ull, 13833071299956122020ull, 9403954806578300063ull}}, {{0ull, 11529215046068469760ull, 13834660704216955373ull, 1880790961315660012ull}}, {{0ull, 4611686018427387904ull, 9222577334724359131ull, 3761581922631320025ull}}, {{0ull, 9223372036854775808ull, 18445154669448718262ull, 7523163845262640050ull}}, {{0ull, 9223372036854775808ull, 3689030933889743652ull, 1504632769052528010ull}}, {{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}}, {{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}}, {{0ull, 0ull, 11065503397408397604ull, 12037062152420224081ull}}, {{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}}, {{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}}, {{0ull, 0ull, 5163053903184807760ull, 9629649721936179265ull}}, {{0ull, 0ull, 1032610780636961552ull, 1925929944387235853ull}}, {{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}}, {{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}}, {{0ull, 0ull, 8204786253993389888ull, 1540743955509788682ull}}, {{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}}, {{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}}, {{0ull, 0ull, 10298057810818464256ull, 12325951644078309459ull}}, {{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}}, {{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}}, {{0ull, 0ull, 11927795063396681728ull, 9860761315262647567ull}}, {{0ull, 0ull, 9764256642163156992ull, 1972152263052529513ull}}, {{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}}, {{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}}, {{0ull, 0ull, 15190102943214346240ull, 1577721810442023610ull}}, {{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}}, {{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}}, {{0ull, 0ull, 10840359103457460224ull, 12621774483536188886ull}}, {{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}}, {{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}}, {{0ull, 0ull, 4982938468024057856ull, 10097419586828951109ull}}, {{0ull, 0ull, 15753982952572452864ull, 2019483917365790221ull}}, {{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}}, {{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}}, {{0ull, 0ull, 8913837547316051968ull, 1615587133892632177ull}}, {{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}}, {{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}}, {{0ull, 0ull, 18199116482078572544ull, 1292469707114105741ull}}, {{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}}, {{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}}, {{0ull, 0ull, 16465723340661719040ull, 10339757656912845935ull}}, {{0ull, 0ull, 3293144668132343808ull, 2067951531382569187ull}}, {{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}}, {{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}}, {{0ull, 0ull, 13702562178731606016ull, 1654361225106055349ull}}, {{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}}, {{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}}, {{0ull, 0ull, 14651398557727195136ull, 1323488980084844279ull}}, {{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}}, {{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}}, {{0ull, 0ull, 6530724019560251392ull, 10587911840678754238ull}}, {{0ull, 0ull, 12374191248137781248ull, 2117582368135750847ull}}, {{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}}, {{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}}, {{0ull, 0ull, 2520655369026404352ull, 1694065894508600678ull}}, {{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}}, {{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}}, {{0ull, 0ull, 9395221924704944128ull, 1355252715606880542ull}}, {{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}}, {{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}}, {{0ull, 0ull, 1374799102801346560ull, 10842021724855044340ull}}, {{0ull, 0ull, 274959820560269312ull, 2168404344971008868ull}}, {{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}}, {{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}}, {{0ull, 0ull, 7598665485932036096ull, 1734723475976807094ull}}, {{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}}, {{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}}, {{0ull, 0ull, 9768281203487539200ull, 1387778780781445675ull}}, {{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}}, {{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}}, {{0ull, 0ull, 4359273333062107136ull, 11102230246251565404ull}}, {{0ull, 0ull, 15629249925580062720ull, 2220446049250313080ull}}, {{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}}, {{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}}, {{0ull, 0ull, 12503399940464050176ull, 1776356839400250464ull}}, {{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}}, {{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}}, {{0ull, 0ull, 13692068767113150464ull, 1421085471520200371ull}}, {{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}}, {{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}}, {{0ull, 0ull, 17302829768357445632ull, 11368683772161602973ull}}, {{0ull, 0ull, 14528612397897220096ull, 2273736754432320594ull}}, {{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}}, {{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}}, {{0ull, 0ull, 15312238733059686400ull, 1818989403545856475ull}}, {{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}}, {{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}}, {{0ull, 0ull, 12249790986447749120ull, 1455191522836685180ull}}, {{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}}, {{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}}, {{0ull, 0ull, 5764607523034234880ull, 11641532182693481445ull}}, {{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}}, {{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}}, {{0ull, 0ull, 4611686018427387904ull, 9313225746154785156ull}}, {{0ull, 0ull, 4611686018427387904ull, 1862645149230957031ull}}, {{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}}, {{0ull, 0ull, 0ull, 7450580596923828125ull}}, {{0ull, 0ull, 0ull, 1490116119384765625ull}}, {{0ull, 0ull, 0ull, 2980232238769531250ull}}, {{0ull, 0ull, 0ull, 5960464477539062500ull}}, {{0ull, 0ull, 0ull, 11920928955078125000ull}}, {{0ull, 0ull, 0ull, 2384185791015625000ull}}, {{0ull, 0ull, 0ull, 4768371582031250000ull}}, {{0ull, 0ull, 0ull, 9536743164062500000ull}}, {{0ull, 0ull, 0ull, 1907348632812500000ull}}, {{0ull, 0ull, 0ull, 3814697265625000000ull}}, {{0ull, 0ull, 0ull, 7629394531250000000ull}}, {{0ull, 0ull, 0ull, 1525878906250000000ull}}, {{0ull, 0ull, 0ull, 3051757812500000000ull}}, {{0ull, 0ull, 0ull, 6103515625000000000ull}}, {{0ull, 0ull, 0ull, 12207031250000000000ull}}, {{0ull, 0ull, 0ull, 2441406250000000000ull}}, {{0ull, 0ull, 0ull, 4882812500000000000ull}}, {{0ull, 0ull, 0ull, 9765625000000000000ull}}, {{0ull, 0ull, 0ull, 1953125000000000000ull}}, {{0ull, 0ull, 0ull, 3906250000000000000ull}}, {{0ull, 0ull, 0ull, 7812500000000000000ull}}, {{0ull, 0ull, 0ull, 1562500000000000000ull}}, {{0ull, 0ull, 0ull, 3125000000000000000ull}}, {{0ull, 0ull, 0ull, 6250000000000000000ull}}, {{0ull, 0ull, 0ull, 12500000000000000000ull}}, {{0ull, 0ull, 0ull, 2500000000000000000ull}}, {{0ull, 0ull, 0ull, 5000000000000000000ull}}, {{0ull, 0ull, 0ull, 10000000000000000000ull}}, {{0ull, 0ull, 0ull, 2000000000000000000ull}}, {{0ull, 0ull, 0ull, 4000000000000000000ull}}, {{0ull, 0ull, 0ull, 8000000000000000000ull}}, {{0ull, 0ull, 0ull, 1600000000000000000ull}}, {{0ull, 0ull, 0ull, 3200000000000000000ull}}, {{0ull, 0ull, 0ull, 6400000000000000000ull}}, {{0ull, 0ull, 0ull, 12800000000000000000ull}}, {{0ull, 0ull, 0ull, 2560000000000000000ull}}, {{0ull, 0ull, 0ull, 5120000000000000000ull}}, {{0ull, 0ull, 0ull, 10240000000000000000ull}}, {{0ull, 0ull, 0ull, 2048000000000000000ull}}, {{0ull, 0ull, 0ull, 4096000000000000000ull}}, {{0ull, 0ull, 0ull, 8192000000000000000ull}}, {{0ull, 0ull, 0ull, 1638400000000000000ull}}, {{0ull, 0ull, 0ull, 3276800000000000000ull}}, {{0ull, 0ull, 0ull, 6553600000000000000ull}}, {{0ull, 0ull, 0ull, 1310720000000000000ull}}, {{0ull, 0ull, 0ull, 2621440000000000000ull}}, {{0ull, 0ull, 0ull, 5242880000000000000ull}}, {{0ull, 0ull, 0ull, 10485760000000000000ull}}, {{0ull, 0ull, 0ull, 2097152000000000000ull}}, {{0ull, 0ull, 0ull, 4194304000000000000ull}}, {{0ull, 0ull, 0ull, 8388608000000000000ull}}, {{0ull, 0ull, 0ull, 1677721600000000000ull}}, {{0ull, 0ull, 0ull, 3355443200000000000ull}}, {{0ull, 0ull, 0ull, 6710886400000000000ull}}, {{0ull, 0ull, 0ull, 1342177280000000000ull}}, {{0ull, 0ull, 0ull, 2684354560000000000ull}}, {{0ull, 0ull, 0ull, 5368709120000000000ull}}, {{0ull, 0ull, 0ull, 10737418240000000000ull}}, {{0ull, 0ull, 0ull, 2147483648000000000ull}}, {{0ull, 0ull, 0ull, 4294967296000000000ull}}, {{0ull, 0ull, 0ull, 8589934592000000000ull}}, {{0ull, 0ull, 0ull, 1717986918400000000ull}}, {{0ull, 0ull, 0ull, 3435973836800000000ull}}, {{0ull, 0ull, 0ull, 6871947673600000000ull}}, {{0ull, 0ull, 0ull, 1374389534720000000ull}}, {{0ull, 0ull, 0ull, 2748779069440000000ull}}, {{0ull, 0ull, 0ull, 5497558138880000000ull}}, {{0ull, 0ull, 0ull, 10995116277760000000ull}}, {{0ull, 0ull, 0ull, 2199023255552000000ull}}, {{0ull, 0ull, 0ull, 4398046511104000000ull}}, {{0ull, 0ull, 0ull, 8796093022208000000ull}}, {{0ull, 0ull, 0ull, 1759218604441600000ull}}, {{0ull, 0ull, 0ull, 3518437208883200000ull}}, {{0ull, 0ull, 0ull, 7036874417766400000ull}}, {{0ull, 0ull, 0ull, 1407374883553280000ull}}, {{0ull, 0ull, 0ull, 2814749767106560000ull}}, {{0ull, 0ull, 0ull, 5629499534213120000ull}}, {{0ull, 0ull, 0ull, 11258999068426240000ull}}, {{0ull, 0ull, 0ull, 2251799813685248000ull}}, {{0ull, 0ull, 0ull, 4503599627370496000ull}}, {{0ull, 0ull, 0ull, 9007199254740992000ull}}, {{0ull, 0ull, 0ull, 1801439850948198400ull}}, {{0ull, 0ull, 0ull, 3602879701896396800ull}}, {{0ull, 0ull, 0ull, 7205759403792793600ull}}, {{0ull, 0ull, 0ull, 1441151880758558720ull}}, {{0ull, 0ull, 0ull, 2882303761517117440ull}}, {{0ull, 0ull, 0ull, 5764607523034234880ull}}, {{0ull, 0ull, 0ull, 11529215046068469760ull}}, {{0ull, 0ull, 0ull, 2305843009213693952ull}}, {{0ull, 0ull, 0ull, 4611686018427387904ull}}, {{0ull, 0ull, 0ull, 9223372036854775808ull}}, {{11068046444225730970ull, 11068046444225730969ull, 11068046444225730969ull, 1844674407370955161ull}}, {{3689348814741910324ull, 3689348814741910323ull, 3689348814741910323ull, 3689348814741910323ull}}, {{7378697629483820647ull, 7378697629483820646ull, 7378697629483820646ull, 7378697629483820646ull}}, {{12543785970122495099ull, 8854437155380584775ull, 5165088340638674452ull, 1475739525896764129ull}}, {{6640827866535438582ull, 17708874310761169551ull, 10330176681277348904ull, 2951479051793528258ull}}, {{13281655733070877164ull, 16971004547812787486ull, 2213609288845146193ull, 5902958103587056517ull}}, {{8116567392432202712ull, 15495265021916023357ull, 4427218577690292387ull, 11805916207174113034ull}}, {{12691359922712171512ull, 6788401819125114994ull, 15642838974505699770ull, 2361183241434822606ull}}, {{6935975771714791408ull, 13576803638250229989ull, 12838933875301847924ull, 4722366482869645213ull}}, {{13871951543429582816ull, 8706863202790908362ull, 7231123676894144233ull, 9444732965739290427ull}}, {{10153087938169737210ull, 1741372640558181672ull, 8824922364862649493ull, 1888946593147858085ull}}, {{1859431802629922803ull, 3482745281116363345ull, 17649844729725298986ull, 3777893186295716170ull}}, {{3718863605259845606ull, 6965490562232726690ull, 16852945385741046356ull, 7555786372591432341ull}}, {{8122470350535789768ull, 8771795741930365984ull, 7059937891890119594ull, 1511157274518286468ull}}, {{16244940701071579536ull, 17543591483860731968ull, 14119875783780239188ull, 3022314549036572936ull}}, {{14043137328433607455ull, 16640438894011912321ull, 9793007493850926761ull, 6044629098073145873ull}}, {{9639530583157663293ull, 14834133714314273027ull, 1139270913992301907ull, 12089258196146291747ull}}, {{5617254931373442982ull, 17724222001830495898ull, 7606551812282281027ull, 2417851639229258349ull}}, {{11234509862746885964ull, 17001699929951440180ull, 15213103624564562055ull, 4835703278458516698ull}}, {{4022275651784220311ull, 15556655786193328745ull, 11979463175419572495ull, 9671406556917033397ull}}, {{8183152759840664709ull, 10490028786722486395ull, 9774590264567735145ull, 1934281311383406679ull}}, {{16366305519681329418ull, 2533313499735421174ull, 1102436455425918675ull, 3868562622766813359ull}}, {{14285866965653107219ull, 5066626999470842349ull, 2204872910851837350ull, 7737125245533626718ull}}, {{10235871022614442091ull, 12081371844119899439ull, 11509021026396098439ull, 1547425049106725343ull}}, {{2024997971519332565ull, 5715999614530247263ull, 4571297979082645263ull, 3094850098213450687ull}}, {{4049995943038665129ull, 11431999229060494526ull, 9142595958165290526ull, 6189700196426901374ull}}, {{8099991886077330257ull, 4417254384411437436ull, 18285191916330581053ull, 12379400392853802748ull}}, {{8998696006699286698ull, 4572799691624197810ull, 14725084827491847180ull, 2475880078570760549ull}}, {{17997392013398573396ull, 9145599383248395620ull, 11003425581274142744ull, 4951760157141521099ull}}, {{17548039953087595175ull, 18291198766496791241ull, 3560107088838733872ull, 9903520314283042199ull}}, {{10888305620101339682ull, 7347588568041268571ull, 15469416676735388067ull, 1980704062856608439ull}}, {{3329867166493127747ull, 14695177136082537143ull, 12492089279761224518ull, 3961408125713216879ull}}, {{6659734332986255494ull, 10943610198455522670ull, 6537434485812897421ull, 7922816251426433759ull}}, {{1331946866597251099ull, 2188722039691104534ull, 16064882156130220777ull, 1584563250285286751ull}}, {{2663893733194502198ull, 4377444079382209068ull, 13683020238550889938ull, 3169126500570573503ull}}, {{5327787466389004395ull, 8754888158764418136ull, 8919296403392228260ull, 6338253001141147007ull}}, {{10655574932778008790ull, 17509776317528836272ull, 17838592806784456520ull, 12676506002282294014ull}}, {{5820463801297512082ull, 18259350522473408547ull, 18325113820324532596ull, 2535301200456458802ull}}, {{11640927602595024163ull, 18071956971237265478ull, 18203483566939513577ull, 5070602400912917605ull}}, {{4835111131480496709ull, 17697169868764979341ull, 17960223060169475539ull, 10141204801825835211ull}}, {{4656371041038009665ull, 3539433973752995868ull, 7281393426775805431ull, 2028240960365167042ull}}, {{9312742082076019330ull, 7078867947505991736ull, 14562786853551610862ull, 4056481920730334084ull}}, {{178740090442487044ull, 14157735895011983473ull, 10678829633393670108ull, 8112963841460668169ull}}, {{35748018088497409ull, 10210244808486217341ull, 16893161185646375314ull, 1622592768292133633ull}}, {{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull, 3245185536584267267ull}}, {{142992072353989635ull, 3947491086525766132ull, 12232412521456846410ull, 6490371073168534535ull}}, {{7407296043954618574ull, 789498217305153226ull, 2446482504291369282ull, 1298074214633706907ull}}, {{14814592087909237147ull, 1578996434610306452ull, 4892965008582738564ull, 2596148429267413814ull}}, {{11182440102108922678ull, 3157992869220612905ull, 9785930017165477128ull, 5192296858534827628ull}}, {{3918136130508293739ull, 6315985738441225811ull, 1125115960621402640ull, 10384593717069655257ull}}, {{11851673670327389718ull, 8641894777172065808ull, 7603720821608101174ull, 2076918743413931051ull}}, {{5256603266945227819ull, 17283789554344131617ull, 15207441643216202348ull, 4153837486827862102ull}}, {{10513206533890455638ull, 16120835034978711618ull, 11968139212722853081ull, 8307674973655724205ull}}, {{16860036565745732421ull, 6913515821737652646ull, 2393627842544570616ull, 1661534994731144841ull}}, {{15273329057781913225ull, 13827031643475305293ull, 4787255685089141232ull, 3323069989462289682ull}}, {{12099914041854274834ull, 9207319213241058971ull, 9574511370178282465ull, 6646139978924579364ull}}, {{2419982808370854967ull, 16598859101615853087ull, 16672297533003297785ull, 1329227995784915872ull}}, {{4839965616741709934ull, 14750974129522154558ull, 14897850992297043955ull, 2658455991569831745ull}}, {{9679931233483419867ull, 11055204185334757500ull, 11348957910884536295ull, 5316911983139663491ull}}, {{913118393257288118ull, 3663664296959963385ull, 4251171748059520975ull, 10633823966279326983ull}}, {{11250670122877188594ull, 11800779303617723646ull, 11918280793837635164ull, 2126764793255865396ull}}, {{4054596172044825571ull, 5154814533525895677ull, 5389817513965718713ull, 4253529586511730793ull}}, {{8109192344089651141ull, 10309629067051791354ull, 10779635027931437426ull, 8507059173023461586ull}}, {{5311187283559840552ull, 9440623442894178917ull, 5845275820328197808ull, 1701411834604692317ull}}, {{10622374567119681103ull, 434502812078806218ull, 11690551640656395617ull, 3402823669209384634ull}}, {{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull, 6805647338418769269ull}}, {{15316996271073603411ull, 7552498754315343133ull, 15744267100488289216ull, 1361129467683753853ull}}, {{12187248468437655206ull, 15104997508630686267ull, 13041790127267026816ull, 2722258935367507707ull}}, {{5927752863165758795ull, 11763250943551820919ull, 7636836180824502017ull, 5444517870735015415ull}}, {{11855505726331517589ull, 5079757813394090222ull, 15273672361649004035ull, 10889035741470030830ull}}, {{9749798774750124165ull, 1015951562678818044ull, 3054734472329800807ull, 2177807148294006166ull}}, {{1052853475790696713ull, 2031903125357636089ull, 6109468944659601614ull, 4355614296588012332ull}}, {{2105706951581393425ull, 4063806250715272178ull, 12218937889319203228ull, 8711228593176024664ull}}, {{421141390316278685ull, 8191458879626875082ull, 17201182836831481938ull, 1742245718635204932ull}}, {{842282780632557370ull, 16382917759253750164ull, 15955621599953412260ull, 3484491437270409865ull}}, {{1684565561265114740ull, 14319091444797948712ull, 13464499126197272905ull, 6968982874540819731ull}}, {{11404959556478753918ull, 6553167103701500065ull, 6382248639981364904ull, 1393796574908163946ull}}, {{4363175039247956220ull, 13106334207403000131ull, 12764497279962729808ull, 2787593149816327892ull}}, {{8726350078495912439ull, 7765924341096448646ull, 7082250486215908001ull, 5575186299632655785ull}}, {{17452700156991824877ull, 15531848682192897292ull, 14164500972431816002ull, 11150372599265311570ull}}, {{18247935290366006269ull, 10485067365922400104ull, 2832900194486363200ull, 2230074519853062314ull}}, {{18049126507022460921ull, 2523390658135248593ull, 5665800388972726401ull, 4460149039706124628ull}}, {{17651508940335370225ull, 5046781316270497187ull, 11331600777945452802ull, 8920298079412249256ull}}, {{3530301788067074045ull, 12077402707479830407ull, 5955668970331000883ull, 1784059615882449851ull}}, {{7060603576134148090ull, 5708061341250109198ull, 11911337940662001767ull, 3568119231764899702ull}}, {{14121207152268296180ull, 11416122682500218396ull, 5375931807614451918ull, 7136238463529799405ull}}, {{17581636689421300529ull, 13351270980725774648ull, 1075186361522890383ull, 1427247692705959881ull}}, {{16716529305133049442ull, 8255797887741997681ull, 2150372723045780767ull, 2854495385411919762ull}}, {{14986314536556547267ull, 16511595775483995363ull, 4300745446091561534ull, 5708990770823839524ull}}, {{11525884999403542918ull, 14576447477258439111ull, 8601490892183123069ull, 11417981541647679048ull}}, {{13373223444106439554ull, 10293987124935508468ull, 12788344622662355583ull, 2283596308329535809ull}}, {{8299702814503327491ull, 2141230176161465321ull, 7129945171615159551ull, 4567192616659071619ull}}, {{16599405629006654981ull, 4282460352322930642ull, 14259890343230319102ull, 9134385233318143238ull}}, {{10698578755285151643ull, 856492070464586128ull, 13920024512871794790ull, 1826877046663628647ull}}, {{2950413436860751669ull, 1712984140929172257ull, 9393304952034037964ull, 3653754093327257295ull}}, {{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull, 7307508186654514591ull}}, {{8558863004228121314ull, 11753240100597399872ull, 3757321980813615185ull, 1461501637330902918ull}}, {{17117726008456242628ull, 5059736127485248128ull, 7514643961627230371ull, 2923003274661805836ull}}, {{15788707943202933640ull, 10119472254970496257ull, 15029287923254460742ull, 5846006549323611672ull}}, {{13130671812696315664ull, 1792200436231440899ull, 11611831772799369869ull, 11692013098647223345ull}}, {{13694180806764994103ull, 15115835346213929472ull, 2322366354559873973ull, 2338402619729444669ull}}, {{8941617539820436589ull, 11784926618718307329ull, 4644732709119747947ull, 4676805239458889338ull}}, {{17883235079640873178ull, 5123109163727063042ull, 9289465418239495895ull, 9353610478917778676ull}}, {{14644693460153905606ull, 4713970647487322931ull, 5547241898389809502ull, 1870722095783555735ull}}, {{10842642846598259595ull, 9427941294974645863ull, 11094483796779619004ull, 3741444191567111470ull}}, {{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull, 7482888383134222941ull}}, {{647708323897393515ull, 14839222962215589315ull, 4437793518711847601ull, 1496577676626844588ull}}, {{1295416647794787029ull, 11231701850721627014ull, 8875587037423695203ull, 2993155353253689176ull}}, {{2590833295589574058ull, 4016659627733702412ull, 17751174074847390407ull, 5986310706507378352ull}}, {{5181666591179148116ull, 8033319255467404824ull, 17055604075985229198ull, 11972621413014756705ull}}, {{8415030947719650270ull, 12674710295319211934ull, 3411120815197045839ull, 2394524282602951341ull}}, {{16830061895439300539ull, 6902676516928872252ull, 6822241630394091679ull, 4789048565205902682ull}}, {{15213379717169049462ull, 13805353033857744505ull, 13644483260788183358ull, 9578097130411805364ull}}, {{10421373572917630539ull, 10139768236255369547ull, 17486291911125277964ull, 1915619426082361072ull}}, {{2396003072125709462ull, 1832792398801187479ull, 16525839748541004313ull, 3831238852164722145ull}}, {{4792006144251418924ull, 3665584797602374958ull, 14604935423372457010ull, 7662477704329444291ull}}, {{15715796487817925078ull, 4422465774262385314ull, 6610335899416401725ull, 1532495540865888858ull}}, {{12984848901926298539ull, 8844931548524770629ull, 13220671798832803450ull, 3064991081731777716ull}}, {{7522953730143045462ull, 17689863097049541259ull, 7994599523956055284ull, 6129982163463555433ull}}, {{15045907460286090924ull, 16932982120389530902ull, 15989199047912110569ull, 12259964326927110866ull}}, {{10387879121541038832ull, 3386596424077906180ull, 6887188624324332437ull, 2451992865385422173ull}}, {{2329014169372526047ull, 6773192848155812361ull, 13774377248648664874ull, 4903985730770844346ull}}, {{4658028338745052093ull, 13546385696311624722ull, 9102010423587778132ull, 9807971461541688693ull}}, {{8310303297232831065ull, 2709277139262324944ull, 12888448528943286596ull, 1961594292308337738ull}}, {{16620606594465662130ull, 5418554278524649888ull, 7330152984177021576ull, 3923188584616675477ull}}, {{14794469115221772644ull, 10837108557049299777ull, 14660305968354043152ull, 7846377169233350954ull}}, {{14026940267270085499ull, 5856770526151770278ull, 17689456452638449923ull, 1569275433846670190ull}}, {{9607136460830619381ull, 11713541052303540557ull, 16932168831567348230ull, 3138550867693340381ull}}, {{767528847951687146ull, 4980338030897529499ull, 15417593589425144845ull, 6277101735386680763ull}}, {{1535057695903374291ull, 9960676061795058998ull, 12388443105140738074ull, 12554203470773361527ull}}, {{15064406798148316151ull, 5681484027100922122ull, 9856386250511968261ull, 2510840694154672305ull}}, {{11682069522587080686ull, 11362968054201844245ull, 1266028427314384906ull, 5021681388309344611ull}}, {{4917394971464609756ull, 4279192034694136875ull, 2532056854628769813ull, 10043362776618689222ull}}, {{983478994292921952ull, 855838406938827375ull, 7885109000409574609ull, 2008672555323737844ull}}, {{1966957988585843903ull, 1711676813877654750ull, 15770218000819149218ull, 4017345110647475688ull}}, {{3933915977171687805ull, 3423353627755309500ull, 13093691927928746820ull, 8034690221294951377ull}}, {{8165480824918158208ull, 8063368355034882546ull, 9997436015069570010ull, 1606938044258990275ull}}, {{16330961649836316415ull, 16126736710069765092ull, 1548127956429588404ull, 3213876088517980551ull}}, {{14215179225963081214ull, 13806729346429978569ull, 3096255912859176809ull, 6427752177035961102ull}}, {{2843035845192616243ull, 6450694684027906037ull, 7997948812055656008ull, 1285550435407192220ull}}, {{5686071690385232486ull, 12901389368055812074ull, 15995897624111312016ull, 2571100870814384440ull}}, {{11372143380770464971ull, 7356034662402072532ull, 13545051174513072417ull, 5142201741628768881ull}}, {{4297542687831378326ull, 14712069324804145065ull, 8643358275316593218ull, 10284403483257537763ull}}, {{4548857352308185989ull, 6631762679702739336ull, 12796718099289049613ull, 2056880696651507552ull}}, {{9097714704616371977ull, 13263525359405478672ull, 7146692124868547610ull, 4113761393303015105ull}}, {{18195429409232743953ull, 8080306645101405728ull, 14293384249737095221ull, 8227522786606030210ull}}, {{18396481140814190084ull, 5305410143762191468ull, 2858676849947419044ull, 1645504557321206042ull}}, {{18346218207918828551ull, 10610820287524382937ull, 5717353699894838088ull, 3291009114642412084ull}}, {{18245692342128105486ull, 2774896501339214259ull, 11434707399789676177ull, 6582018229284824168ull}}, {{18406533727393262390ull, 554979300267842851ull, 13354987924183666205ull, 1316403645856964833ull}}, {{18366323381076973164ull, 1109958600535685703ull, 8263231774657780794ull, 2632807291713929667ull}}, {{18285902688444394712ull, 2219917201071371407ull, 16526463549315561588ull, 5265614583427859334ull}}, {{18125061303179237808ull, 4439834402142742815ull, 14606183024921571560ull, 10531229166855718669ull}}, {{18382407519603488855ull, 15645362139396189855ull, 17678631863951955604ull, 2106245833371143733ull}}, {{18318070965497426093ull, 12843980205082828095ull, 16910519654194359593ull, 4212491666742287467ull}}, {{18189397857285300569ull, 7241216336456104575ull, 15374295234679167571ull, 8424983333484574935ull}}, {{7327228386198970437ull, 5137592082033131238ull, 3074859046935833514ull, 1684996666696914987ull}}, {{14654456772397940874ull, 10275184164066262476ull, 6149718093871667028ull, 3369993333393829974ull}}, {{10862169471086330132ull, 2103624254422973337ull, 12299436187743334057ull, 6739986666787659948ull}}, {{9551131523701086673ull, 420724850884594667ull, 13527933681774397781ull, 1347997333357531989ull}}, {{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull, 2695994666715063979ull}}, {{1311037947385243460ull, 1682899403538378670ull, 17218246579678487892ull, 5391989333430127958ull}}, {{2622075894770486919ull, 3365798807076757340ull, 15989749085647424168ull, 10783978666860255917ull}}, {{524415178954097384ull, 673159761415351468ull, 10576647446613305480ull, 2156795733372051183ull}}, {{1048830357908194768ull, 1346319522830702936ull, 2706550819517059344ull, 4313591466744102367ull}}, {{2097660715816389535ull, 2692639045661405872ull, 5413101639034118688ull, 8627182933488204734ull}}, {{15176927402130919200ull, 7917225438616101820ull, 15840015586774465030ull, 1725436586697640946ull}}, {{11907110730552286784ull, 15834450877232203641ull, 13233287099839378444ull, 3450873173395281893ull}}, {{5367477387395021951ull, 13222157680754855667ull, 8019830125969205273ull, 6901746346790563787ull}}, {{8452193106962825037ull, 2644431536150971133ull, 8982663654677661701ull, 1380349269358112757ull}}, {{16904386213925650074ull, 5288863072301942266ull, 17965327309355323402ull, 2760698538716225514ull}}, {{15362028354141748531ull, 10577726144603884533ull, 17483910545001095188ull, 5521397077432451029ull}}, {{12277312634573945445ull, 2708708215498217451ull, 16521077016292638761ull, 11042794154864902059ull}}, {{6144811341656699413ull, 541741643099643490ull, 18061610662226169045ull, 2208558830972980411ull}}, {{12289622683313398825ull, 1083483286199286980ull, 17676477250742786474ull, 4417117661945960823ull}}, {{6132501292917246033ull, 2166966572398573961ull, 16906210427776021332ull, 8834235323891921647ull}}, {{1226500258583449207ull, 15190788573447356085ull, 10759939715039024912ull, 1766847064778384329ull}}, {{2453000517166898414ull, 11934833073185160554ull, 3073135356368498209ull, 3533694129556768659ull}}, {{4906001034333796827ull, 5422922072660769492ull, 6146270712736996419ull, 7067388259113537318ull}}, {{15738595465834400659ull, 8463282044015974544ull, 12297300586773130253ull, 1413477651822707463ull}}, {{13030446857959249701ull, 16926564088031949089ull, 6147857099836708890ull, 2826955303645414927ull}}, {{7614149642208947785ull, 15406384102354346563ull, 12295714199673417781ull, 5653910607290829854ull}}, {{15228299284417895569ull, 12366024130999141510ull, 6144684325637283947ull, 11307821214581659709ull}}, {{6735008671625489437ull, 6162553640941738625ull, 15986332124095098082ull, 2261564242916331941ull}}, {{13470017343250978874ull, 12325107281883477250ull, 13525920174480644548ull, 4523128485832663883ull}}, {{8493290612792406132ull, 6203470490057402885ull, 8605096275251737481ull, 9046256971665327767ull}}, {{12766704566784212196ull, 12308740542237211546ull, 9099716884534168142ull, 1809251394333065553ull}}, {{7086665059858872776ull, 6170737010764871477ull, 18199433769068336285ull, 3618502788666131106ull}}, {{14173330119717745552ull, 12341474021529742954ull, 17952123464427120954ull, 7237005577332262213ull}}, {{6524014838685459434ull, 9846992433789769237ull, 14658471137111155160ull, 1447401115466452442ull}}, {{13048029677370918867ull, 1247240793869986858ull, 10870198200512758705ull, 2894802230932904885ull}}, {{7649315281032286118ull, 2494481587739973717ull, 3293652327315965794ull, 5789604461865809771ull}}, {{15298630562064572236ull, 4988963175479947434ull, 6587304654631931588ull, 11579208923731619542ull}}, {{17817121371380555740ull, 997792635095989486ull, 8696158560410206964ull, 2315841784746323908ull}}, {{17187498669051559864ull, 1995585270191978973ull, 17392317120820413928ull, 4631683569492647816ull}}, {{15928253264393568112ull, 3991170540383957947ull, 16337890167931276240ull, 9263367138985295633ull}}, {{3185650652878713623ull, 11866280552302522559ull, 14335624477811986217ull, 1852673427797059126ull}}, {{6371301305757427245ull, 5285817030895493502ull, 10224504881914420819ull, 3705346855594118253ull}}, {{12742602611514854490ull, 10571634061790987004ull, 2002265690119290022ull, 7410693711188236507ull}}, {{13616566966528701868ull, 16871722071325838693ull, 7779150767507678650ull, 1482138742237647301ull}}, {{8786389859347852119ull, 15296700068942125771ull, 15558301535015357301ull, 2964277484475294602ull}}, {{17572779718695704238ull, 12146656064174699926ull, 12669858996321162987ull, 5928554968950589205ull}}, {{16698815363681856860ull, 5846568054639848237ull, 6892973918932774359ull, 11857109937901178411ull}}, {{10718460702220192019ull, 1169313610927969647ull, 5067943598528465195ull, 2371421987580235682ull}}, {{2990177330730832421ull, 2338627221855939295ull, 10135887197056930390ull, 4742843975160471364ull}}, {{5980354661461664842ull, 4677254443711878590ull, 1825030320404309164ull, 9485687950320942729ull}}, {{12264117376518063938ull, 12003497332968106687ull, 15122401323048503125ull, 1897137590064188545ull}}, {{6081490679326576260ull, 5560250592226661759ull, 11798058572387454635ull, 3794275180128377091ull}}, {{12162981358653152520ull, 11120501184453323518ull, 5149373071065357654ull, 7588550360256754183ull}}, {{2432596271730630504ull, 9602797866374485350ull, 12097921058438802500ull, 1517710072051350836ull}}, {{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull, 3035420144102701673ull}}, {{9730385086922522016ull, 1517703318078838168ull, 11498196086336106770ull, 6070840288205403346ull}}, {{1014026100135492416ull, 3035406636157676337ull, 4549648098962661924ull, 12141680576410806693ull}}, {{14960200478994739776ull, 7985778956715355913ull, 11977976064018263354ull, 2428336115282161338ull}}, {{11473656884279927936ull, 15971557913430711827ull, 5509208054326975092ull, 4856672230564322677ull}}, {{4500569694850304256ull, 13496371753151872039ull, 11018416108653950185ull, 9713344461128645354ull}}, {{11968160383195791821ull, 17456669609598015700ull, 16961078480698431329ull, 1942668892225729070ull}}, {{5489576692682032026ull, 16466595145486479785ull, 15475412887687311043ull, 3885337784451458141ull}}, {{10979153385364064051ull, 14486446217263407954ull, 12504081701665070471ull, 7770675568902916283ull}}, {{13263877121298543780ull, 17654684502420322883ull, 13568862784558745063ull, 1554135113780583256ull}}, {{8081010168887535944ull, 16862624931131094151ull, 8690981495407938511ull, 3108270227561166513ull}}, {{16162020337775071888ull, 15278505788552636686ull, 17381962990815877023ull, 6216540455122333026ull}}, {{13877296601840592159ull, 12110267503395721757ull, 16317181907922202431ull, 12433080910244666053ull}}, {{6464808135110028755ull, 17179448759646785644ull, 14331482825810171455ull, 2486616182048933210ull}}, {{12929616270220057510ull, 15912153445584019672ull, 10216221577910791295ull, 4973232364097866421ull}}, {{7412488466730563404ull, 13377562817458487729ull, 1985699082112030975ull, 9946464728195732843ull}}, {{8861195322829933328ull, 13743559007717428515ull, 11465186260648137164ull, 1989292945639146568ull}}, {{17722390645659866655ull, 9040373941725305414ull, 4483628447586722713ull, 3978585891278293137ull}}, {{16998037217610181693ull, 18080747883450610829ull, 8967256895173445426ull, 7957171782556586274ull}}, {{18157002702489677632ull, 3616149576690122165ull, 16550846638002330378ull, 1591434356511317254ull}}, {{17867261331269803647ull, 7232299153380244331ull, 14654949202295109140ull, 3182868713022634509ull}}, {{17287778588830055677ull, 14464598306760488663ull, 10863154330880666664ull, 6365737426045269019ull}}, {{16128813103950559738ull, 10482452539811425711ull, 3279564588051781713ull, 12731474852090538039ull}}, {{14293809065015842918ull, 9475188137446105788ull, 15413308176577997635ull, 2546294970418107607ull}}, {{10140874056322134219ull, 503632201182659961ull, 12379872279446443655ull, 5092589940836215215ull}}, {{1835004038934716821ull, 1007264402365319923ull, 6313000485183335694ull, 10185179881672430431ull}}, {{11435047252012674334ull, 201452880473063984ull, 4951948911778577462ull, 2037035976334486086ull}}, {{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull, 4074071952668972172ull}}, {{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull, 8148143905337944345ull}}, {{1769340172126318821ull, 7539859933862271834ull, 272210314680951646ull, 1629628781067588869ull}}, {{3538680344252637642ull, 15079719867724543668ull, 544420629361903292ull, 3259257562135177738ull}}, {{7077360688505275283ull, 11712695661739535720ull, 1088841258723806585ull, 6518515124270355476ull}}, {{5104820952442965380ull, 6031887947089817467ull, 3907117066486671640ull, 1303703024854071095ull}}, {{10209641904885930760ull, 12063775894179634934ull, 7814234132973343280ull, 2607406049708142190ull}}, {{1972539736062309903ull, 5680807714649718253ull, 15628468265946686561ull, 5214812099416284380ull}}, {{3945079472124619806ull, 11361615429299436506ull, 12810192458183821506ull, 10429624198832568761ull}}, {{11857062338650654931ull, 9651020715343707947ull, 6251387306378674624ull, 2085924839766513752ull}}, {{5267380603591758246ull, 855297356977864279ull, 12502774612757349249ull, 4171849679533027504ull}}, {{10534761207183516491ull, 1710594713955728558ull, 6558805151805146882ull, 8343699359066055009ull}}, {{16864347500404344591ull, 4031467757533056034ull, 16069156289328670669ull, 1668739871813211001ull}}, {{15281950927099137566ull, 8062935515066112069ull, 13691568504947789722ull, 3337479743626422003ull}}, {{12117157780488723516ull, 16125871030132224139ull, 8936392936186027828ull, 6674959487252844007ull}}, {{17180826815065385996ull, 3225174206026444827ull, 9165976216721026212ull, 1334991897450568801ull}}, {{15914909556421220376ull, 6450348412052889655ull, 18331952433442052424ull, 2669983794901137602ull}}, {{13383075039132889136ull, 12900696824105779311ull, 18217160793174553232ull, 5339967589802275205ull}}, {{8319406004556226656ull, 7354649574502007007ull, 17987577512639554849ull, 10679935179604550411ull}}, {{9042578830395065978ull, 1470929914900401401ull, 7286864317269821293ull, 2135987035920910082ull}}, {{18085157660790131956ull, 2941859829800802802ull, 14573728634539642586ull, 4271974071841820164ull}}, {{17723571247870712295ull, 5883719659601605605ull, 10700713195369733556ull, 8543948143683640329ull}}, {{3544714249574142459ull, 1176743931920321121ull, 16897537898041588004ull, 1708789628736728065ull}}, {{7089428499148284918ull, 2353487863840642242ull, 15348331722373624392ull, 3417579257473456131ull}}, {{14178856998296569836ull, 4706975727681284484ull, 12249919371037697168ull, 6835158514946912263ull}}, {{2835771399659313968ull, 4630743960278167220ull, 13518030318433270403ull, 1367031702989382452ull}}, {{5671542799318627935ull, 9261487920556334440ull, 8589316563156989190ull, 2734063405978764905ull}}, {{11343085598637255869ull, 76231767403117264ull, 17178633126313978381ull, 5468126811957529810ull}}, {{4239427123564960121ull, 152463534806234529ull, 15910522178918405146ull, 10936253623915059621ull}}, {{4537234239454902348ull, 7409190336445067552ull, 6871453250525591352ull, 2187250724783011924ull}}, {{9074468478909804695ull, 14818380672890135104ull, 13742906501051182704ull, 4374501449566023848ull}}, {{18148936957819609390ull, 11190017272070718592ull, 9039068928392813793ull, 8749002899132047697ull}}, {{11008485021047742525ull, 2238003454414143718ull, 9186511415162383405ull, 1749800579826409539ull}}, {{3570225968385933433ull, 4476006908828287437ull, 18373022830324766810ull, 3499601159652819078ull}}, {{7140451936771866865ull, 8952013817656574874ull, 18299301586939982004ull, 6999202319305638157ull}}, {{1428090387354373373ull, 5479751578273225298ull, 11038557946871817047ull, 1399840463861127631ull}}, {{2856180774708746746ull, 10959503156546450596ull, 3630371820034082478ull, 2799680927722255263ull}}, {{5712361549417493492ull, 3472262239383349576ull, 7260743640068164957ull, 5599361855444510526ull}}, {{11424723098834986984ull, 6944524478766699152ull, 14521487280136329914ull, 11198723710889021052ull}}, {{13352991063992728367ull, 5078253710495250153ull, 10282995085511086629ull, 2239744742177804210ull}}, {{8259238054275905117ull, 10156507420990500307ull, 2119246097312621642ull, 4479489484355608421ull}}, {{16518476108551810234ull, 1866270768271448998ull, 4238492194625243285ull, 8958978968711216842ull}}, {{3303695221710362047ull, 7751951783138110446ull, 8226396068408869303ull, 1791795793742243368ull}}, {{6607390443420724094ull, 15503903566276220892ull, 16452792136817738606ull, 3583591587484486736ull}}, {{13214780886841448187ull, 12561063058842890168ull, 14458840199925925597ull, 7167183174968973473ull}}, {{13711002621594020607ull, 2512212611768578033ull, 13959814484210916089ull, 1433436634993794694ull}}, {{8975261169478489598ull, 5024425223537156067ull, 9472884894712280562ull, 2866873269987589389ull}}, {{17950522338956979196ull, 10048850447074312134ull, 499025715715009508ull, 5733746539975178779ull}}, {{17454300604204406776ull, 1650956820439072653ull, 998051431430019017ull, 11467493079950357558ull}}, {{14558906565066612325ull, 330191364087814530ull, 11267656730511734773ull, 2293498615990071511ull}}, {{10671069056423673034ull, 660382728175629061ull, 4088569387313917930ull, 4586997231980143023ull}}, {{2895394039137794452ull, 1320765456351258123ull, 8177138774627835860ull, 9173994463960286046ull}}, {{15336474066795200184ull, 3953501906012161947ull, 5324776569667477495ull, 1834798892792057209ull}}, {{12226204059880848751ull, 7907003812024323895ull, 10649553139334954990ull, 3669597785584114418ull}}, {{6005664046052145885ull, 15814007624048647791ull, 2852362204960358364ull, 7339195571168228837ull}}, {{8579830438694249824ull, 6852150339551639881ull, 7949170070475892319ull, 1467839114233645767ull}}, {{17159660877388499647ull, 13704300679103279762ull, 15898340140951784638ull, 2935678228467291534ull}}, {{15872577681067447677ull, 8961857284497007909ull, 13349936208194017661ull, 5871356456934583069ull}}, {{13298411288425343738ull, 17923714568994015819ull, 8253128342678483706ull, 11742712913869166139ull}}, {{17417077516652710041ull, 3584742913798803163ull, 16408020927503338034ull, 2348542582773833227ull}}, {{16387410959595868465ull, 7169485827597606327ull, 14369297781297124452ull, 4697085165547666455ull}}, {{14328077845482185314ull, 14338971655195212655ull, 10291851488884697288ull, 9394170331095332911ull}}, {{17623010828064078356ull, 17625189590006683823ull, 5747719112518849780ull, 1878834066219066582ull}}, {{16799277582418605095ull, 16803635106303816031ull, 11495438225037699561ull, 3757668132438133164ull}}, {{15151811091127658574ull, 15160526138898080447ull, 4544132376365847507ull, 7515336264876266329ull}}, {{14098408662451262685ull, 6721454042521526412ull, 15666221734240810794ull, 1503067252975253265ull}}, {{9750073251192973753ull, 13442908085043052825ull, 12885699394772069972ull, 3006134505950506531ull}}, {{1053402428676395890ull, 8439072096376554035ull, 7324654715834588329ull, 6012269011901013063ull}}, {{2106804857352791779ull, 16878144192753108070ull, 14649309431669176658ull, 12024538023802026126ull}}, {{15178756230438199649ull, 18133024097518262906ull, 6619210701075745654ull, 2404907604760405225ull}}, {{11910768387166847682ull, 17819304121326974197ull, 13238421402151491309ull, 4809815209520810450ull}}, {{5374792700624143747ull, 17191864168944396779ull, 8030098730593431003ull, 9619630419041620901ull}}, {{12143004984350559719ull, 18195768092756520648ull, 5295368560860596523ull, 1923926083808324180ull}}, {{5839265894991567822ull, 17944792111803489681ull, 10590737121721193047ull, 3847852167616648360ull}}, {{11678531789983135644ull, 17442840149897427746ull, 2734730169732834479ull, 7695704335233296721ull}}, {{6025055172738537452ull, 3488568029979485549ull, 4236294848688477219ull, 1539140867046659344ull}}, {{12050110345477074904ull, 6977136059958971098ull, 8472589697376954438ull, 3078281734093318688ull}}, {{5653476617244598192ull, 13954272119917942197ull, 16945179394753908876ull, 6156563468186637376ull}}, {{11306953234489196384ull, 9461800166126332778ull, 15443614715798266137ull, 12313126936373274753ull}}, {{13329437091123570247ull, 1892360033225266555ull, 14156769387385384197ull, 2462625387274654950ull}}, {{8212130108537588877ull, 3784720066450533111ull, 9866794701061216778ull, 4925250774549309901ull}}, {{16424260217075177753ull, 7569440132901066222ull, 1286845328412881940ull, 9850501549098619803ull}}, {{3284852043415035551ull, 12581934470805944214ull, 11325415509908307357ull, 1970100309819723960ull}}, {{6569704086830071102ull, 6717124867902336812ull, 4204086946107063099ull, 3940200619639447921ull}}, {{13139408173660142203ull, 13434249735804673624ull, 8408173892214126198ull, 7880401239278895842ull}}, {{17385276893699669734ull, 2686849947160934724ull, 9060332407926645886ull, 1576080247855779168ull}}, {{16323809713689787851ull, 5373699894321869449ull, 18120664815853291772ull, 3152160495711558336ull}}, {{14200875353670024086ull, 10747399788643738899ull, 17794585557997031928ull, 6304320991423116673ull}}, {{9955006633630496555ull, 3048055503577926183ull, 17142427042284512241ull, 12608641982846233347ull}}, {{5680350141468009635ull, 11677657544941316206ull, 10807183037940723094ull, 2521728396569246669ull}}, {{11360700282936019269ull, 4908571016173080796ull, 3167622002171894573ull, 5043456793138493339ull}}, {{4274656492162486921ull, 9817142032346161593ull, 6335244004343789146ull, 10086913586276986678ull}}, {{8233628927916318031ull, 16720823665436873611ull, 12335095245094488798ull, 2017382717255397335ull}}, {{16467257855832636061ull, 14994903257164195606ull, 6223446416479425981ull, 4034765434510794671ull}}, {{14487771637955720506ull, 11543062440618839597ull, 12446892832958851963ull, 8069530869021589342ull}}, {{10276251957074964748ull, 2308612488123767919ull, 9868076196075591039ull, 1613906173804317868ull}}, {{2105759840440377880ull, 4617224976247535839ull, 1289408318441630462ull, 3227812347608635737ull}}, {{4211519680880755759ull, 9234449952495071678ull, 2578816636883260924ull, 6455624695217271474ull}}, {{4531652750918061475ull, 12914936434724745305ull, 15273158586344293477ull, 1291124939043454294ull}}, {{9063305501836122950ull, 7383128795739938994ull, 12099573098979035339ull, 2582249878086908589ull}}, {{18126611003672245900ull, 14766257591479877988ull, 5752402124248519062ull, 5164499756173817179ull}}, {{17806477933634940183ull, 11085771109250204361ull, 11504804248497038125ull, 10328999512347634358ull}}, {{18318690845694629330ull, 13285200666075771841ull, 13369007293925138594ull, 2065799902469526871ull}}, {{18190637617679707043ull, 8123657258441992067ull, 8291270514140725573ull, 4131599804939053743ull}}, {{17934531161649862470ull, 16247314516883984135ull, 16582541028281451146ull, 8263199609878107486ull}}, {{10965603861813793141ull, 10628160532860617473ull, 7005857020398200552ull, 1652639921975621497ull}}, {{3484463649918034665ull, 2809576992011683331ull, 14011714040796401105ull, 3305279843951242994ull}}, {{6968927299836069330ull, 5619153984023366662ull, 9576684007883250594ull, 6610559687902485989ull}}, {{1393785459967213866ull, 12191877241030404302ull, 16672732060544291411ull, 1322111937580497197ull}}, {{2787570919934427732ull, 5937010408351256988ull, 14898720047379031207ull, 2644223875160994395ull}}, {{5575141839868855464ull, 11874020816702513976ull, 11350696021048510798ull, 5288447750321988791ull}}, {{11150283679737710927ull, 5301297559695476336ull, 4254647968387469981ull, 10576895500643977583ull}}, {{2230056735947542186ull, 15817654770906736560ull, 11918976037903224965ull, 2115379100128795516ull}}, {{4460113471895084371ull, 13188565468103921504ull, 5391208002096898315ull, 4230758200257591033ull}}, {{8920226943790168742ull, 7930386862498291392ull, 10782416004193796631ull, 8461516400515182066ull}}, {{16541440647725675042ull, 8964775001983478924ull, 5845832015580669649ull, 1692303280103036413ull}}, {{14636137221741798467ull, 17929550003966957849ull, 11691664031161339298ull, 3384606560206072826ull}}, {{10825530369774045317ull, 17412355934224364083ull, 4936583988613126981ull, 6769213120412145653ull}}, {{9543803703438629710ull, 18239866445812514109ull, 12055363241948356365ull, 1353842624082429130ull}}, {{640863333167707804ull, 18032988817915476603ull, 5663982410187161115ull, 2707685248164858261ull}}, {{1281726666335415607ull, 17619233562121401590ull, 11327964820374322231ull, 5415370496329716522ull}}, {{2563453332670831214ull, 16791723050533251564ull, 4209185567039092847ull, 10830740992659433045ull}}, {{4202039481276076566ull, 10737042239590470959ull, 841837113407818569ull, 2166148198531886609ull}}, {{8404078962552153132ull, 3027340405471390302ull, 1683674226815637139ull, 4332296397063773218ull}}, {{16808157925104306264ull, 6054680810942780604ull, 3367348453631274278ull, 8664592794127546436ull}}, {{14429678029246592223ull, 15968331421156197413ull, 4362818505468165178ull, 1732918558825509287ull}}, {{10412611984783632829ull, 13489918768602843211ull, 8725637010936330357ull, 3465837117651018574ull}}, {{2378479895857714042ull, 8533093463496134807ull, 17451274021872660715ull, 6931674235302037148ull}}, {{475695979171542809ull, 12774665136924957931ull, 14558301248600263112ull, 1386334847060407429ull}}, {{951391958343085617ull, 7102586200140364246ull, 10669858423490974609ull, 2772669694120814859ull}}, {{1902783916686171233ull, 14205172400280728492ull, 2892972773272397602ull, 5545339388241629719ull}}, {{3805567833372342466ull, 9963600726851905368ull, 5785945546544795205ull, 11090678776483259438ull}}, {{4450462381416378817ull, 13060766589596112043ull, 12225235553534690010ull, 2218135755296651887ull}}, {{8900924762832757633ull, 7674789105482672470ull, 6003727033359828405ull, 4436271510593303775ull}}, {{17801849525665515266ull, 15349578210965344940ull, 12007454066719656810ull, 8872543021186607550ull}}, {{3560369905133103054ull, 3069915642193068988ull, 2401490813343931362ull, 1774508604237321510ull}}, {{7120739810266206107ull, 6139831284386137976ull, 4802981626687862724ull, 3549017208474643020ull}}, {{14241479620532412213ull, 12279662568772275952ull, 9605963253375725448ull, 7098034416949286040ull}}, {{2848295924106482443ull, 13523978957980186160ull, 1921192650675145089ull, 1419606883389857208ull}}, {{5696591848212964885ull, 8601213842250820704ull, 3842385301350290179ull, 2839213766779714416ull}}, {{11393183696425929770ull, 17202427684501641408ull, 7684770602700580358ull, 5678427533559428832ull}}, {{4339623319142307924ull, 15958111295293731201ull, 15369541205401160717ull, 11356855067118857664ull}}, {{8246622293312282232ull, 6880971073800656563ull, 17831303500047873436ull, 2271371013423771532ull}}, {{16493244586624564463ull, 13761942147601313126ull, 17215862926386195256ull, 4542742026847543065ull}}, {{14539745099539577309ull, 9077140221493074637ull, 15984981779062838897ull, 9085484053695086131ull}}, {{2907949019907915462ull, 12883474488524345897ull, 6886345170554478102ull, 1817096810739017226ull}}, {{5815898039815830924ull, 7320204903339140178ull, 13772690341108956205ull, 3634193621478034452ull}}, {{11631796079631661847ull, 14640409806678280356ull, 9098636608508360794ull, 7268387242956068905ull}}, {{2326359215926332370ull, 17685477220303297364ull, 1819727321701672158ull, 1453677448591213781ull}}, {{4652718431852664739ull, 16924210366897043112ull, 3639454643403344317ull, 2907354897182427562ull}}, {{9305436863705329478ull, 15401676660084534608ull, 7278909286806688635ull, 5814709794364855124ull}}, {{164129653701107339ull, 12356609246459517601ull, 14557818573613377271ull, 11629419588729710248ull}}, {{32825930740221468ull, 17228717108259544813ull, 13979610158948406423ull, 2325883917745942049ull}}, {{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull, 4651767835491884099ull}}, {{131303722960885872ull, 13574636211909524404ull, 578208414664970847ull, 9303535670983768199ull}}, {{26260744592177175ull, 6404276057123815204ull, 14873036941900635462ull, 1860707134196753639ull}}, {{52521489184354349ull, 12808552114247630408ull, 11299329810091719308ull, 3721414268393507279ull}}, {{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull, 7442828536787014559ull}}, {{21008595673741740ull, 1434072030957141840ull, 15587778368262418693ull, 1488565707357402911ull}}, {{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull, 2977131414714805823ull}}, {{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull, 5954262829429611647ull}}, {{168068765389933915ull, 11472576247657134720ull, 14021762503842039848ull, 11908525658859223294ull}}, {{7412311382561807430ull, 9673212879015247590ull, 17561747759736049262ull, 2381705131771844658ull}}, {{14824622765123614859ull, 899681684320943564ull, 16676751445762546909ull, 4763410263543689317ull}}, {{11202501456537678102ull, 1799363368641887129ull, 14906758817815542202ull, 9526820527087378635ull}}, {{5929849106049445944ull, 7738570303212198072ull, 2981351763563108440ull, 1905364105417475727ull}}, {{11859698212098891888ull, 15477140606424396144ull, 5962703527126216880ull, 3810728210834951454ull}}, {{5272652350488232159ull, 12507537139139240673ull, 11925407054252433761ull, 7621456421669902908ull}}, {{8433228099581467079ull, 17258902686795489427ull, 13453127855076217721ull, 1524291284333980581ull}}, {{16866456199162934157ull, 16071061299881427238ull, 8459511636442883827ull, 3048582568667961163ull}}, {{15286168324616316697ull, 13695378526053302861ull, 16919023272885767655ull, 6097165137335922326ull}}, {{12125592575523081777ull, 8944012978397054107ull, 15391302472061983695ull, 12194330274671844653ull}}, {{2425118515104616356ull, 12856849039905141791ull, 14146306938638127708ull, 2438866054934368930ull}}, {{4850237030209232711ull, 7266954006100731966ull, 9845869803566703801ull, 4877732109868737861ull}}, {{9700474060418465421ull, 14533908012201463932ull, 1244995533423855986ull, 9755464219737475723ull}}, {{5629443626825603408ull, 17664176861407934079ull, 11317045550910502166ull, 1951092843947495144ull}}, {{11258887253651206815ull, 16881609649106316542ull, 4187347028111452717ull, 3902185687894990289ull}}, {{4071030433592862014ull, 15316475224503081469ull, 8374694056222905435ull, 7804371375789980578ull}}, {{8192903716202393050ull, 14131341489126347263ull, 12742985255470312056ull, 1560874275157996115ull}}, {{16385807432404786099ull, 9815938904543142910ull, 7039226437231072497ull, 3121748550315992231ull}}, {{14324870791100020581ull, 1185133735376734205ull, 14078452874462144995ull, 6243497100631984462ull}}, {{10202997508490489545ull, 2370267470753468411ull, 9710161675214738374ull, 12486994201263968925ull}}, {{2040599501698097909ull, 15231448753118334975ull, 1942032335042947674ull, 2497398840252793785ull}}, {{4081199003396195818ull, 12016153432527118334ull, 3884064670085895349ull, 4994797680505587570ull}}, {{8162398006792391636ull, 5585562791344685052ull, 7768129340171790699ull, 9989595361011175140ull}}, {{5321828416100388651ull, 15874507817236578303ull, 1553625868034358139ull, 1997919072202235028ull}}, {{10643656832200777301ull, 13302271560763604990ull, 3107251736068716279ull, 3995838144404470056ull}}, {{2840569590692002986ull, 8157799047817658365ull, 6214503472137432559ull, 7991676288808940112ull}}, {{4257462732880310921ull, 5320908624305441996ull, 8621598323911307158ull, 1598335257761788022ull}}, {{8514925465760621841ull, 10641817248610883992ull, 17243196647822614316ull, 3196670515523576044ull}}, {{17029850931521243682ull, 2836890423512216368ull, 16039649221935677017ull, 6393341031047152089ull}}, {{15612957789332935747ull, 5673780847024432737ull, 13632554370161802418ull, 12786682062094304179ull}}, {{17879986816834228443ull, 8513453798888707193ull, 17483906133000001776ull, 2557336412418860835ull}}, {{17313229559958905269ull, 17026907597777414387ull, 16521068192290451936ull, 5114672824837721671ull}}, {{16179715046208258921ull, 15607071121845277159ull, 14595392310871352257ull, 10229345649675443343ull}}, {{17993338268209293077ull, 3121414224369055431ull, 13987124906400001421ull, 2045869129935088668ull}}, {{17539932462709034538ull, 6242828448738110863ull, 9527505739090451226ull, 4091738259870177337ull}}, {{16633120851708517460ull, 12485656897476221727ull, 608267404471350836ull, 8183476519740354675ull}}, {{14394670614567434462ull, 6186480194237154668ull, 121653480894270167ull, 1636695303948070935ull}}, {{10342597155425317307ull, 12372960388474309337ull, 243306961788540334ull, 3273390607896141870ull}}, {{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull, 6546781215792283740ull}}, {{11515736491653947570ull, 16017230599615454704ull, 97322784715416133ull, 1309356243158456748ull}}, {{4584728909598343523ull, 13587717125521357793ull, 194645569430832267ull, 2618712486316913496ull}}, {{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull, 5237424972633826992ull}}, {{18338915638393374090ull, 17457380354666327940ull, 778582277723329070ull, 10474849945267653984ull}}, {{18425178386646316111ull, 18248871329900906880ull, 14913111714512307106ull, 2094969989053530796ull}}, {{18403612699583080606ull, 18050998586092262145ull, 11379479355315062597ull, 4189939978107061593ull}}, {{18360481325456609595ull, 17655253098474972675ull, 4312214636920573579ull, 8379879956214123187ull}}, {{7361445079833232243ull, 7220399434436904858ull, 8241140556867935362ull, 1675975991242824637ull}}, {{14722890159666464485ull, 14440798868873809716ull, 16482281113735870724ull, 3351951982485649274ull}}, {{10999036245623377353ull, 10434853664038067817ull, 14517818153762189833ull, 6703903964971298549ull}}, {{16957202508092316764ull, 9465668362291434209ull, 17660958889720079259ull, 1340780792994259709ull}}, {{15467660942475081911ull, 484592650873316803ull, 16875173705730606903ull, 2681561585988519419ull}}, {{12488577811240612206ull, 969185301746633607ull, 15303603337751662190ull, 5363123171977038839ull}}, {{6530411548771672795ull, 1938370603493267215ull, 12160462601793772764ull, 10726246343954077679ull}}, {{12374128753980065529ull, 11455720564924384412ull, 17189487779326395845ull, 2145249268790815535ull}}, {{6301513434250579442ull, 4464697056139217209ull, 15932231484943240075ull, 4290498537581631071ull}}, {{12603026868501158883ull, 8929394112278434418ull, 13417718896176928534ull, 8580997075163262143ull}}, {{2520605373700231777ull, 9164576451939507530ull, 13751590223461116676ull, 1716199415032652428ull}}, {{5041210747400463553ull, 18329152903879015060ull, 9056436373212681736ull, 3432398830065304857ull}}, {{10082421494800927106ull, 18211561734048478504ull, 18112872746425363473ull, 6864797660130609714ull}}, {{5705833113702095745ull, 11021009976293516347ull, 18379969808252713987ull, 1372959532026121942ull}}, {{11411666227404191489ull, 3595275878877481078ull, 18313195542795876359ull, 2745919064052243885ull}}, {{4376588381098831362ull, 7190551757754962157ull, 18179647011882201102ull, 5491838128104487771ull}}, {{8753176762197662723ull, 14381103515509924314ull, 17912549950054850588ull, 10983676256208975543ull}}, {{1750635352439532545ull, 6565569517843895186ull, 14650556434236701087ull, 2196735251241795108ull}}, {{3501270704879065090ull, 13131139035687790372ull, 10854368794763850558ull, 4393470502483590217ull}}, {{7002541409758130179ull, 7815533997666029128ull, 3261993515818149501ull, 8786941004967180435ull}}, {{16157903540919267329ull, 5252455614275116148ull, 652398703163629900ull, 1757388200993436087ull}}, {{13869063008128983041ull, 10504911228550232297ull, 1304797406327259800ull, 3514776401986872174ull}}, {{9291381942548414466ull, 2563078383390912979ull, 2609594812654519601ull, 7029552803973744348ull}}, {{12926322832735413863ull, 15270010935645823888ull, 11589965406756634889ull, 1405910560794748869ull}}, {{7405901591761276110ull, 12093277797582096161ull, 4733186739803718163ull, 2811821121589497739ull}}, {{14811803183522552219ull, 5739811521454640706ull, 9466373479607436327ull, 5623642243178995478ull}}, {{11176862293335552822ull, 11479623042909281413ull, 486002885505321038ull, 11247284486357990957ull}}, {{13303418902892841534ull, 2295924608581856282ull, 7475898206584884854ull, 2249456897271598191ull}}, {{8160093732076131452ull, 4591849217163712565ull, 14951796413169769708ull, 4498913794543196382ull}}, {{16320187464152262904ull, 9183698434327425130ull, 11456848752629987800ull, 8997827589086392765ull}}, {{3264037492830452581ull, 1836739686865485026ull, 2291369750525997560ull, 1799565517817278553ull}}, {{6528074985660905162ull, 3673479373730970052ull, 4582739501051995120ull, 3599131035634557106ull}}, {{13056149971321810324ull, 7346958747461940104ull, 9165479002103990240ull, 7198262071269114212ull}}, {{6300578809006272388ull, 8848089378976208667ull, 9211793429904618694ull, 1439652414253822842ull}}, {{12601157618012544776ull, 17696178757952417334ull, 18423586859809237388ull, 2879304828507645684ull}}, {{6755571162315537936ull, 16945613442195283053ull, 18400429645908923161ull, 5758609657015291369ull}}, {{13511142324631075871ull, 15444482810681014490ull, 18354115218108294707ull, 11517219314030582739ull}}, {{6391577279668125498ull, 6778245376878113221ull, 18428218302589300234ull, 2303443862806116547ull}}, {{12783154559336250995ull, 13556490753756226442ull, 18409692531469048852ull, 4606887725612233095ull}}, {{7119565044962950374ull, 8666237433802901269ull, 18372640989228546089ull, 9213775451224466191ull}}, {{16181308267960231368ull, 1733247486760580253ull, 7363877012587619541ull, 1842755090244893238ull}}, {{13915872462210911119ull, 3466494973521160507ull, 14727754025175239082ull, 3685510180489786476ull}}, {{9385000850712270622ull, 6932989947042321015ull, 11008763976640926548ull, 7371020360979572953ull}}, {{5566348984884364448ull, 5075946804150374526ull, 13269799239553916279ull, 1474204072195914590ull}}, {{11132697969768728896ull, 10151893608300749052ull, 8092854405398280942ull, 2948408144391829181ull}}, {{3818651865827906175ull, 1857043142891946489ull, 16185708810796561885ull, 5896816288783658362ull}}, {{7637303731655812349ull, 3714086285783892978ull, 13924673547883572154ull, 11793632577567316725ull}}, {{8906158375814983117ull, 15500212516124419888ull, 2784934709576714430ull, 2358726515513463345ull}}, {{17812316751629966233ull, 12553680958539288160ull, 5569869419153428861ull, 4717453031026926690ull}}, {{17177889429550380849ull, 6660617843369024705ull, 11139738838306857723ull, 9434906062053853380ull}}, {{14503624330135807140ull, 12400170012899535910ull, 2227947767661371544ull, 1886981212410770676ull}}, {{10560504586562062663ull, 6353595952089520205ull, 4455895535322743089ull, 3773962424821541352ull}}, {{2674265099414573710ull, 12707191904179040411ull, 8911791070645486178ull, 7547924849643082704ull}}, {{11602899464108645712ull, 9920136010319628728ull, 16539753473096738528ull, 1509584969928616540ull}}, {{4759054854507739807ull, 1393527946929705841ull, 14632762872483925441ull, 3019169939857233081ull}}, {{9518109709015479614ull, 2787055893859411682ull, 10818781671258299266ull, 6038339879714466163ull}}, {{589475344321407612ull, 5574111787718823365ull, 3190819268807046916ull, 12076679759428932327ull}}, {{11185941513090012492ull, 12182868801769495642ull, 8016861483245230029ull, 2415335951885786465ull}}, {{3925138952470473368ull, 5918993529829439669ull, 16033722966490460059ull, 4830671903771572930ull}}, {{7850277904940946736ull, 11837987059658879338ull, 13620701859271368502ull, 9661343807543145861ull}}, {{5259404395730099671ull, 13435643856157506837ull, 6413489186596184023ull, 1932268761508629172ull}}, {{10518808791460199341ull, 8424543638605462058ull, 12826978373192368047ull, 3864537523017258344ull}}, {{2590873509210847066ull, 16849087277210924117ull, 7207212672675184478ull, 7729075046034516689ull}}, {{15275569960809810706ull, 10748515084926005469ull, 16198837793502678188ull, 1545815009206903337ull}}, {{12104395847910069796ull, 3050286096142459323ull, 13950931513295804761ull, 3091630018413806675ull}}, {{5762047622110587976ull, 6100572192284918647ull, 9455118952882057906ull, 6183260036827613351ull}}, {{11524095244221175951ull, 12201144384569837294ull, 463493832054564196ull, 12366520073655226703ull}}, {{13372865493069966160ull, 17197624135881608751ull, 11160745210636643808ull, 2473304014731045340ull}}, {{8298986912430380704ull, 15948504198053665887ull, 3874746347563736001ull, 4946608029462090681ull}}, {{16597973824860761408ull, 13450264322397780158ull, 7749492695127472003ull, 9893216058924181362ull}}, {{14387641209197883252ull, 2690052864479556031ull, 8928596168509315047ull, 1978643211784836272ull}}, {{10328538344686214887ull, 5380105728959112063ull, 17857192337018630094ull, 3957286423569672544ull}}, {{2210332615662878157ull, 10760211457918224127ull, 17267640600327708572ull, 7914572847139345089ull}}, {{11510112967358306601ull, 5841391106325555148ull, 18210923379033183007ull, 1582914569427869017ull}}, {{4573481861007061586ull, 11682782212651110297ull, 17975102684356814398ull, 3165829138855738035ull}}, {{9146963722014123172ull, 4918820351592668978ull, 17503461295004077181ull, 6331658277711476071ull}}, {{18293927444028246343ull, 9837640703185337956ull, 16560178516298602746ull, 12663316555422952143ull}}, {{3658785488805649269ull, 16724923399604708884ull, 14380082147485451518ull, 2532663311084590428ull}}, {{7317570977611298537ull, 15003102725499866152ull, 10313420221261351421ull, 5065326622169180857ull}}, {{14635141955222597074ull, 11559461377290180688ull, 2180096368813151227ull, 10130653244338361715ull}}, {{2927028391044519415ull, 9690589904941856784ull, 436019273762630245ull, 2026130648867672343ull}}, {{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull, 4052261297735344686ull}}, {{11708113564178077660ull, 1868871472348323904ull, 1744077095050520982ull, 8104522595470689372ull}}, {{13409669157061346502ull, 15131169553437306073ull, 7727513048493924842ull, 1620904519094137874ull}}, {{8372594240413141387ull, 11815595033165060531ull, 15455026096987849685ull, 3241809038188275748ull}}, {{16745188480826282774ull, 5184445992620569446ull, 12463308120266147755ull, 6483618076376551497ull}}, {{14417084140390987525ull, 8415586828007934535ull, 9871359253537050197ull, 1296723615275310299ull}}, {{10387424207072423433ull, 16831173656015869071ull, 1295974433364548778ull, 2593447230550620599ull}}, {{2328104340435295250ull, 15215603238322186527ull, 2591948866729097557ull, 5186894461101241198ull}}, {{4656208680870590499ull, 11984462402934821438ull, 5183897733458195115ull, 10373788922202482396ull}}, {{15688636995141759393ull, 6086241295328874610ull, 4726128361433549346ull, 2074757784440496479ull}}, {{12930529916573967170ull, 12172482590657749221ull, 9452256722867098692ull, 4149515568880992958ull}}, {{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull, 8299031137761985917ull}}, {{12550909596113407515ull, 4868993036263099688ull, 7470251503888749800ull, 1659806227552397183ull}}, {{6655075118517263413ull, 9737986072526199377ull, 14940503007777499600ull, 3319612455104794366ull}}, {{13310150237034526825ull, 1029228071342847138ull, 11434261941845447585ull, 6639224910209588733ull}}, {{6351378862148815689ull, 11273892058494300397ull, 13354898832594820486ull, 1327844982041917746ull}}, {{12702757724297631377ull, 4101040043279049178ull, 8263053591480089357ull, 2655689964083835493ull}}, {{6958771374885711137ull, 8202080086558098357ull, 16526107182960178714ull, 5311379928167670986ull}}, {{13917542749771422273ull, 16404160173116196714ull, 14605470292210805812ull, 10622759856335341973ull}}, {{17540903808921925748ull, 3280832034623239342ull, 13989140502667892132ull, 2124551971267068394ull}}, {{16635063544134299879ull, 6561664069246478685ull, 9531536931626232648ull, 4249103942534136789ull}}, {{14823383014559048142ull, 13123328138492957371ull, 616329789542913680ull, 8498207885068273579ull}}, {{2964676602911809629ull, 17382060886666232767ull, 14880661216876224028ull, 1699641577013654715ull}}, {{5929353205823619257ull, 16317377699622913918ull, 11314578360042896441ull, 3399283154027309431ull}}, {{11858706411647238513ull, 14188011325536276220ull, 4182412646376241267ull, 6798566308054618863ull}}, {{2371741282329447703ull, 2837602265107255244ull, 11904528973500979223ull, 1359713261610923772ull}}, {{4743482564658895406ull, 5675204530214510488ull, 5362313873292406830ull, 2719426523221847545ull}}, {{9486965129317790811ull, 11350409060429020976ull, 10724627746584813660ull, 5438853046443695090ull}}, {{527186184926030005ull, 4254074047148490337ull, 3002511419460075705ull, 10877706092887390181ull}}, {{11173483681210936971ull, 4540163624171608390ull, 4289851098633925464ull, 2175541218577478036ull}}, {{3900223288712322326ull, 9080327248343216781ull, 8579702197267850928ull, 4351082437154956072ull}}, {{7800446577424644651ull, 18160654496686433562ull, 17159404394535701856ull, 8702164874309912144ull}}, {{8938786944968749577ull, 3632130899337286712ull, 18189276137874781664ull, 1740432974861982428ull}}, {{17877573889937499153ull, 7264261798674573424ull, 17931808202040011712ull, 3480865949723964857ull}}, {{17308403706165446690ull, 14528523597349146849ull, 17416872330370471808ull, 6961731899447929715ull}}, {{10840378370716909985ull, 13973751163695560339ull, 3483374466074094361ull, 1392346379889585943ull}}, {{3234012667724268353ull, 9500758253681569063ull, 6966748932148188723ull, 2784692759779171886ull}}, {{6468025335448536706ull, 554772433653586510ull, 13933497864296377447ull, 5569385519558343772ull}}, {{12936050670897073411ull, 1109544867307173020ull, 9420251654883203278ull, 11138771039116687545ull}}, {{13655256578405145652ull, 11289955417687165573ull, 1884050330976640655ull, 2227754207823337509ull}}, {{8863769083100739688ull, 4133166761664779531ull, 3768100661953281311ull, 4455508415646675018ull}}, {{17727538166201479375ull, 8266333523329559062ull, 7536201323906562622ull, 8911016831293350036ull}}, {{3545507633240295875ull, 12721313148891642782ull, 5196589079523222847ull, 1782203366258670007ull}}, {{7091015266480591750ull, 6995882224073733948ull, 10393178159046445695ull, 3564406732517340014ull}}, {{14182030532961183500ull, 13991764448147467896ull, 2339612244383339774ull, 7128813465034680029ull}}, {{17593801365559877993ull, 13866399333855224548ull, 15225317707844309247ull, 1425762693006936005ull}}, {{16740858657410204370ull, 9286054594000897481ull, 12003891341979066879ull, 2851525386013872011ull}}, {{15034973241110857124ull, 125365114292243347ull, 5561038610248582143ull, 5703050772027744023ull}}, {{11623202408512162631ull, 250730228584486695ull, 11122077220497164286ull, 11406101544055488046ull}}, {{9703338111186253173ull, 7428843675200717985ull, 5913764258841343180ull, 2281220308811097609ull}}, {{959932148662954729ull, 14857687350401435971ull, 11827528517682686360ull, 4562440617622195218ull}}, {{1919864297325909458ull, 11268630627093320326ull, 5208312961655821105ull, 9124881235244390437ull}}, {{11452019303690912862ull, 9632423754902484711ull, 8420360221814984867ull, 1824976247048878087ull}}, {{4457294533672274107ull, 818103436095417807ull, 16840720443629969735ull, 3649952494097756174ull}}, {{8914589067344548213ull, 1636206872190835614ull, 15234696813550387854ull, 7299904988195512349ull}}, {{9161615442952730289ull, 11395287818663898092ull, 17804334621677718863ull, 1459980997639102469ull}}, {{18323230885905460578ull, 4343831563618244568ull, 17161925169645886111ull, 2919961995278204939ull}}, {{18199717698101369540ull, 8687663127236489137ull, 15877106265582220606ull, 5839923990556409879ull}}, {{17952691322493187464ull, 17375326254472978275ull, 13307468457454889596ull, 11679847981112819759ull}}, {{3590538264498637493ull, 3475065250894595655ull, 17418888950458619212ull, 2335969596222563951ull}}, {{7181076528997274986ull, 6950130501789191310ull, 16391033827207686808ull, 4671939192445127903ull}}, {{14362153057994549971ull, 13900261003578382620ull, 14335323580705822000ull, 9343878384890255807ull}}, {{10251128241082730641ull, 10158749830199497170ull, 10245762345624985046ull, 1868775676978051161ull}}, {{2055512408455909666ull, 1870755586689442725ull, 2044780617540418477ull, 3737551353956102323ull}}, {{4111024816911819331ull, 3741511173378885450ull, 4089561235080836954ull, 7475102707912204646ull}}, {{822204963382363867ull, 748302234675777090ull, 4507261061758077714ull, 1495020541582440929ull}}, {{1644409926764727733ull, 1496604469351554180ull, 9014522123516155428ull, 2990041083164881858ull}}, {{3288819853529455465ull, 2993208938703108360ull, 18029044247032310856ull, 5980082166329763716ull}}, {{6577639707058910929ull, 5986417877406216720ull, 17611344420355070096ull, 11960164332659527433ull}}, {{16072923200379423479ull, 15954678834448884636ull, 14590315328296744988ull, 2392032866531905486ull}}, {{13699102327049295341ull, 13462613595188217657ull, 10733886582883938361ull, 4784065733063810973ull}}, {{8951460580389039066ull, 8478483116666883699ull, 3021029092058325107ull, 9568131466127621947ull}}, {{12858338560303538783ull, 16453091882301018032ull, 7982903447895485667ull, 1913626293225524389ull}}, {{7269933046897525950ull, 14459439690892484449ull, 15965806895790971335ull, 3827252586451048778ull}}, {{14539866093795051900ull, 10472135308075417282ull, 13484869717872391055ull, 7654505172902097557ull}}, {{17665368477726651673ull, 9473124691098904102ull, 10075671573058298857ull, 1530901034580419511ull}}, {{16883992881743751730ull, 499505308488256589ull, 1704599072407046099ull, 3061802069160839023ull}}, {{15321241689777951843ull, 999010616976513179ull, 3409198144814092198ull, 6123604138321678046ull}}, {{12195739305846352069ull, 1998021233953026359ull, 6818396289628184396ull, 12247208276643356092ull}}, {{9817845490653091061ull, 11467650691016336241ull, 8742376887409457525ull, 2449441655328671218ull}}, {{1188946907596630505ull, 4488557308323120867ull, 17484753774818915051ull, 4898883310657342436ull}}, {{2377893815193261009ull, 8977114616646241734ull, 16522763475928278486ull, 9797766621314684873ull}}, {{11543625207264383172ull, 16552818182296889639ull, 14372599139411386666ull, 1959553324262936974ull}}, {{4640506340819214727ull, 14658892290884227663ull, 10298454205113221717ull, 3919106648525873949ull}}, {{9281012681638429454ull, 10871040508058903710ull, 2150164336516891819ull, 7838213297051747899ull}}, {{12924248980553416861ull, 13242254545837511711ull, 15187428126271019656ull, 1567642659410349579ull}}, {{7401753887397282105ull, 8037765017965471807ull, 11928112178832487697ull, 3135285318820699159ull}}, {{14803507774794564210ull, 16075530035930943614ull, 5409480283955423778ull, 6270570637641398319ull}}, {{11160271475879576803ull, 13704315998152335613ull, 10818960567910847557ull, 12541141275282796638ull}}, {{13300100739401646331ull, 2740863199630467122ull, 13231838557807900481ull, 2508228255056559327ull}}, {{8153457405093741045ull, 5481726399260934245ull, 8016933041906249346ull, 5016456510113118655ull}}, {{16306914810187482089ull, 10963452798521868490ull, 16033866083812498692ull, 10032913020226237310ull}}, {{10640080591521317065ull, 9571388189188194344ull, 3206773216762499738ull, 2006582604045247462ull}}, {{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull, 4013165208090494924ull}}, {{5666834218666165025ull, 1392064609333674146ull, 12827092867049998954ull, 8026330416180989848ull}}, {{12201413287958963975ull, 7657110551350555475ull, 13633465017635730760ull, 1605266083236197969ull}}, {{5956082502208376333ull, 15314221102701110951ull, 8820185961561909904ull, 3210532166472395939ull}}, {{11912165004416752666ull, 12181698131692670286ull, 17640371923123819809ull, 6421064332944791878ull}}, {{13450479445109081503ull, 9815037255822354703ull, 14596120828850494931ull, 1284212866588958375ull}}, {{8454214816508611390ull, 1183330437935157791ull, 10745497583991438247ull, 2568425733177916751ull}}, {{16908429633017222779ull, 2366660875870315582ull, 3044251094273324878ull, 5136851466355833503ull}}, {{15370115192324893942ull, 4733321751740631165ull, 6088502188546649756ull, 10273702932711667006ull}}, {{10452720667948799435ull, 8325361979831946879ull, 4907049252451240274ull, 2054740586542333401ull}}, {{2458697262188047254ull, 16650723959663893759ull, 9814098504902480548ull, 4109481173084666802ull}}, {{4917394524376094508ull, 14854703845618235902ull, 1181452936095409481ull, 8218962346169333605ull}}, {{12051525349100949872ull, 6660289583865557503ull, 236290587219081896ull, 1643792469233866721ull}}, {{5656306624492348127ull, 13320579167731115007ull, 472581174438163792ull, 3287584938467733442ull}}, {{11312613248984696253ull, 8194414261752678398ull, 945162348876327585ull, 6575169876935466884ull}}, {{9641220279280759897ull, 16396278111318176972ull, 14946427728742906809ull, 1315033975387093376ull}}, {{835696484851968178ull, 14345812148926802329ull, 11446111383776262003ull, 2630067950774186753ull}}, {{1671392969703936356ull, 10244880224144053042ull, 4445478693842972391ull, 5260135901548373507ull}}, {{3342785939407872711ull, 2043016374578554468ull, 8890957387685944783ull, 10520271803096747014ull}}, {{668557187881574543ull, 7787300904399531540ull, 16535586736504830249ull, 2104054360619349402ull}}, {{1337114375763149085ull, 15574601808799063080ull, 14624429399300108882ull, 4208108721238698805ull}}, {{2674228751526298169ull, 12702459543888574544ull, 10802114724890666149ull, 8416217442477397611ull}}, {{15292241009272900927ull, 2540491908777714908ull, 5849771759720043553ull, 1683243488495479522ull}}, {{12137737944836250237ull, 5080983817555429817ull, 11699543519440087106ull, 3366486976990959044ull}}, {{5828731815962948858ull, 10161967635110859635ull, 4952342965170622596ull, 6732973953981918089ull}}, {{1165746363192589772ull, 2032393527022171927ull, 15747863852001765812ull, 1346594790796383617ull}}, {{2331492726385179544ull, 4064787054044343854ull, 13048983630293980008ull, 2693189581592767235ull}}, {{4662985452770359087ull, 8129574108088687708ull, 7651223186878408400ull, 5386379163185534471ull}}, {{9325970905540718173ull, 16259148216177375416ull, 15302446373756816800ull, 10772758326371068942ull}}, {{12933240625333874605ull, 10630527272719295729ull, 10439186904235184006ull, 2154551665274213788ull}}, {{7419737176958197593ull, 2814310471729039843ull, 2431629734760816397ull, 4309103330548427577ull}}, {{14839474353916395185ull, 5628620943458079686ull, 4863259469521632794ull, 8618206661096855154ull}}, {{17725290129750920330ull, 12193770632917346906ull, 15730047152871967851ull, 1723641332219371030ull}}, {{17003836185792289044ull, 5940797192125142197ull, 13013350232034384087ull, 3447282664438742061ull}}, {{15560928297875026471ull, 11881594384250284395ull, 7579956390359216558ull, 6894565328877484123ull}}, {{6801534474316915618ull, 6065667691591967202ull, 12584037722297574281ull, 1378913065775496824ull}}, {{13603068948633831235ull, 12131335383183934404ull, 6721331370885596946ull, 2757826131550993649ull}}, {{8759393823558110854ull, 5815926692658317193ull, 13442662741771193893ull, 5515652263101987298ull}}, {{17518787647116221708ull, 11631853385316634386ull, 8438581409832836170ull, 11031304526203974597ull}}, {{14571803973648975312ull, 9705068306547147523ull, 9066413911450387880ull, 2206260905240794919ull}}, {{10696863873588399007ull, 963392539384743431ull, 18132827822900775761ull, 4412521810481589838ull}}, {{2946983673467246397ull, 1926785078769486863ull, 17818911572091999906ull, 8825043620963179677ull}}, {{4278745549435359603ull, 11453403459979628342ull, 10942479943902220627ull, 1765008724192635935ull}}, {{8557491098870719205ull, 4460062846249705068ull, 3438215814094889639ull, 3530017448385271871ull}}, {{17114982197741438410ull, 8920125692499410136ull, 6876431628189779278ull, 7060034896770543742ull}}, {{7112345254290198006ull, 1784025138499882027ull, 8753983955121776502ull, 1412006979354108748ull}}, {{14224690508580396011ull, 3568050276999764054ull, 17507967910243553004ull, 2824013958708217496ull}}, {{10002636943451240405ull, 7136100553999528109ull, 16569191746777554392ull, 5648027917416434993ull}}, {{1558529813192929194ull, 14272201107999056219ull, 14691639419845557168ull, 11296055834832869987ull}}, {{15069101221606227132ull, 2854440221599811243ull, 10317025513452932080ull, 2259211166966573997ull}}, {{11691458369502902647ull, 5708880443199622487ull, 2187306953196312544ull, 4518422333933147995ull}}, {{4936172665296253678ull, 11417760886399244975ull, 4374613906392625088ull, 9036844667866295990ull}}, {{12055280977284981706ull, 13351598621505579964ull, 874922781278525017ull, 1807368933573259198ull}}, {{5663817880860411795ull, 8256453169301608313ull, 1749845562557050035ull, 3614737867146518396ull}}, {{11327635761720823589ull, 16512906338603216626ull, 3499691125114100070ull, 7229475734293036792ull}}, {{13333573596569895688ull, 10681278897204463971ull, 8078635854506640660ull, 1445895146858607358ull}}, {{8220403119430239759ull, 2915813720699376327ull, 16157271709013281321ull, 2891790293717214716ull}}, {{16440806238860479518ull, 5831627441398752654ull, 13867799344317011026ull, 5783580587434429433ull}}, {{14434868404011407419ull, 11663254882797505309ull, 9288854614924470436ull, 11567161174868858867ull}}, {{10265671310286102131ull, 13400697420785232031ull, 9236468552468714733ull, 2313432234973771773ull}}, {{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull, 4626864469947543547ull}}, {{4169197093725305289ull, 16709301535721824894ull, 52386062455755702ull, 9253728939895087094ull}}, {{833839418745061058ull, 7031209121886275302ull, 14767872471458792433ull, 1850745787979017418ull}}, {{1667678837490122116ull, 14062418243772550604ull, 11089000869208033250ull, 3701491575958034837ull}}, {{3335357674980244231ull, 9678092413835549592ull, 3731257664706514885ull, 7402983151916069675ull}}, {{8045769164479869493ull, 1935618482767109918ull, 746251532941302977ull, 1480596630383213935ull}}, {{16091538328959738986ull, 3871236965534219836ull, 1492503065882605954ull, 2961193260766427870ull}}, {{13736332584209926355ull, 7742473931068439673ull, 2985006131765211908ull, 5922386521532855740ull}}, {{9025921094710301093ull, 15484947862136879347ull, 5970012263530423816ull, 11844773043065711480ull}}, {{12873230663167791189ull, 6786338387169286192ull, 1194002452706084763ull, 2368954608613142296ull}}, {{7299717252626030761ull, 13572676774338572385ull, 2388004905412169526ull, 4737909217226284592ull}}, {{14599434505252061521ull, 8698609474967593154ull, 4776009810824339053ull, 9475818434452569184ull}}, {{6609235715792322628ull, 9118419524477339277ull, 15712597221132509103ull, 1895163686890513836ull}}, {{13218471431584645255ull, 18236839048954678554ull, 12978450368555466590ull, 3790327373781027673ull}}, {{7990198789459738893ull, 18026934024199805493ull, 7510156663401381565ull, 7580654747562055347ull}}, {{1598039757891947779ull, 10984084434323781745ull, 8880728962164096959ull, 1516130949512411069ull}}, {{3196079515783895558ull, 3521424794938011874ull, 17761457924328193919ull, 3032261899024822138ull}}, {{6392159031567791115ull, 7042849589876023748ull, 17076171774946836222ull, 6064523798049644277ull}}, {{12784318063135582229ull, 14085699179752047496ull, 15705599476184120828ull, 12129047596099288555ull}}, {{17314258871594757739ull, 13885186280176140468ull, 3141119895236824165ull, 2425809519219857711ull}}, {{16181773669479963862ull, 9323628486642729321ull, 6282239790473648331ull, 4851619038439715422ull}}, {{13916803265250376107ull, 200512899575907027ull, 12564479580947296663ull, 9703238076879430844ull}}, {{17540755912017716515ull, 7418800209399002051ull, 17270291175157100625ull, 1940647615375886168ull}}, {{16634767750325881413ull, 14837600418798004103ull, 16093838276604649634ull, 3881295230751772337ull}}, {{14822791426942211209ull, 11228456763886456591ull, 13740932479499747653ull, 7762590461503544675ull}}, {{17721953544356083535ull, 13313737797003022287ull, 2748186495899949530ull, 1552518092300708935ull}}, {{16997163015002615453ull, 8180731520296492959ull, 5496372991799899061ull, 3105036184601417870ull}}, {{15547581956295679290ull, 16361463040592985919ull, 10992745983599798122ull, 6210072369202835740ull}}, {{12648419838881806964ull, 14276182007476420223ull, 3538747893490044629ull, 12420144738405671481ull}}, {{13597730412002092363ull, 2855236401495284044ull, 4397098393439919249ull, 2484028947681134296ull}}, {{8748716750294633109ull, 5710472802990568089ull, 8794196786879838498ull, 4968057895362268592ull}}, {{17497433500589266218ull, 11420945605981136178ull, 17588393573759676996ull, 9936115790724537184ull}}, {{14567533144343584214ull, 2284189121196227235ull, 18275073973719576692ull, 1987223158144907436ull}}, {{10688322214977616811ull, 4568378242392454471ull, 18103403873729601768ull, 3974446316289814873ull}}, {{2929900356245682005ull, 9136756484784908943ull, 17760063673749651920ull, 7948892632579629747ull}}, {{585980071249136401ull, 9206048926440802435ull, 10930710364233751030ull, 1589778526515925949ull}}, {{1171960142498272802ull, 18412097852881604870ull, 3414676654757950444ull, 3179557053031851899ull}}, {{2343920284996545604ull, 18377451632053658124ull, 6829353309515900889ull, 6359114106063703798ull}}, {{4687840569993091207ull, 18308159190397764632ull, 13658706619031801779ull, 12718228212127407596ull}}, {{8316265743482438888ull, 3661631838079552926ull, 6421090138548270679ull, 2543645642425481519ull}}, {{16632531486964877776ull, 7323263676159105852ull, 12842180277096541358ull, 5087291284850963038ull}}, {{14818318900220203935ull, 14646527352318211705ull, 7237616480483531100ull, 10174582569701926077ull}}, {{10342361409527861434ull, 10308003099947462987ull, 8826220925580526866ull, 2034916513940385215ull}}, {{2237978745346171251ull, 2169262126185374359ull, 17652441851161053733ull, 4069833027880770430ull}}, {{4475957490692342502ull, 4338524252370748718ull, 16858139628612555850ull, 8139666055761540861ull}}, {{15652586757106109794ull, 4557053665216060066ull, 7060976740464421493ull, 1627933211152308172ull}}, {{12858429440502667971ull, 9114107330432120133ull, 14121953480928842986ull, 3255866422304616344ull}}, {{7270114807295784325ull, 18228214660864240267ull, 9797162888148134356ull, 6511732844609232689ull}}, {{8832720590942977512ull, 3645642932172848053ull, 16716827836597268164ull, 1302346568921846537ull}}, {{17665441181885955023ull, 7291285864345696106ull, 14986911599484984712ull, 2604693137843693075ull}}, {{16884138290062358430ull, 14582571728691392213ull, 11527079125260417808ull, 5209386275687386151ull}}, {{15321532506415165243ull, 10718399383673232811ull, 4607414176811284001ull, 10418772551374772303ull}}, {{3064306501283033049ull, 16901075135702287855ull, 11989529279587987769ull, 2083754510274954460ull}}, {{6128613002566066097ull, 15355406197695024094ull, 5532314485466423923ull, 4167509020549908921ull}}, {{12257226005132132194ull, 12264068321680496572ull, 11064628970932847847ull, 8335018041099817842ull}}, {{6140794015768336762ull, 17210208923303740607ull, 9591623423670390215ull, 1667003608219963568ull}}, {{12281588031536673524ull, 15973673772897929598ull, 736502773631228815ull, 3334007216439927137ull}}, {{6116431989363795432ull, 13500603472086307581ull, 1473005547262457631ull, 6668014432879854274ull}}, {{4912635212614669410ull, 2700120694417261516ull, 15051996368420132819ull, 1333602886575970854ull}}, {{9825270425229338820ull, 5400241388834523032ull, 11657248663130714022ull, 2667205773151941709ull}}, {{1203796776749126023ull, 10800482777669046065ull, 4867753252551876428ull, 5334411546303883419ull}}, {{2407593553498252045ull, 3154221481628540514ull, 9735506505103752857ull, 10668823092607766838ull}}, {{15238913969667291702ull, 630844296325708102ull, 13015147745246481541ull, 2133764618521553367ull}}, {{12031083865625031788ull, 1261688592651416205ull, 7583551416783411466ull, 4267529237043106735ull}}, {{5615423657540511959ull, 2523377185302832411ull, 15167102833566822932ull, 8535058474086213470ull}}, {{12191131175733833362ull, 7883373066544387128ull, 3033420566713364586ull, 1707011694817242694ull}}, {{5935518277758115107ull, 15766746133088774257ull, 6066841133426729172ull, 3414023389634485388ull}}, {{11871036555516230214ull, 13086748192467996898ull, 12133682266853458345ull, 6828046779268970776ull}}, {{17131602570070887336ull, 6306698453235509702ull, 6116085268112601992ull, 1365609355853794155ull}}, {{15816461066432223055ull, 12613396906471019405ull, 12232170536225203984ull, 2731218711707588310ull}}, {{13186178059154894494ull, 6780049739232487195ull, 6017596998740856353ull, 5462437423415176621ull}}, {{7925612044600237372ull, 13560099478464974391ull, 12035193997481712706ull, 10924874846830353242ull}}, {{16342517667887688768ull, 13780066339918725847ull, 9785736428980163187ull, 2184974969366070648ull}}, {{14238291262065825919ull, 9113388606127900079ull, 1124728784250774759ull, 4369949938732141297ull}}, {{10029838450422100221ull, 18226777212255800159ull, 2249457568501549518ull, 8739899877464282594ull}}, {{5695316504826330368ull, 11024053071934980678ull, 15207286772667951196ull, 1747979975492856518ull}}, {{11390633009652660735ull, 3601362070160409740ull, 11967829471626350777ull, 3495959950985713037ull}}, {{4334521945595769854ull, 7202724140320819481ull, 5488914869543149938ull, 6991919901971426075ull}}, {{15624299648086795264ull, 12508591272289894865ull, 1097782973908629987ull, 1398383980394285215ull}}, {{12801855222464038911ull, 6570438470870238115ull, 2195565947817259975ull, 2796767960788570430ull}}, {{7156966371218526206ull, 13140876941740476231ull, 4391131895634519950ull, 5593535921577140860ull}}, {{14313932742437052412ull, 7835009809771400846ull, 8782263791269039901ull, 11187071843154281720ull}}, {{10241484177971231129ull, 5256350776696190492ull, 1756452758253807980ull, 2237414368630856344ull}}, {{2036224282232910642ull, 10512701553392380985ull, 3512905516507615960ull, 4474828737261712688ull}}, {{4072448564465821284ull, 2578659033075210354ull, 7025811033015231921ull, 8949657474523425376ull}}, {{4503838527635074580ull, 7894429436098862717ull, 5094511021344956707ull, 1789931494904685075ull}}, {{9007677055270149160ull, 15788858872197725434ull, 10189022042689913414ull, 3579862989809370150ull}}, {{18015354110540298320ull, 13130973670685899252ull, 1931300011670275213ull, 7159725979618740301ull}}, {{7292419636849969988ull, 17383589993104821143ull, 4075608817075965365ull, 1431945195923748060ull}}, {{14584839273699939975ull, 16320435912500090670ull, 8151217634151930731ull, 2863890391847496120ull}}, {{10722934473690328333ull, 14194127751290629725ull, 16302435268303861463ull, 5727780783694992240ull}}, {{2999124873671105049ull, 9941511428871707835ull, 14158126462898171311ull, 11455561567389984481ull}}, {{7978522604218041657ull, 9366999915258162213ull, 6520974107321544585ull, 2291112313477996896ull}}, {{15957045208436083313ull, 287255756806772810ull, 13041948214643089171ull, 4582224626955993792ull}}, {{13467346343162615009ull, 574511513613545621ull, 7637152355576626726ull, 9164449253911987585ull}}, {{10072166898116343649ull, 3804251117464619447ull, 1527430471115325345ull, 1832889850782397517ull}}, {{1697589722523135681ull, 7608502234929238895ull, 3054860942230650690ull, 3665779701564795034ull}}, {{3395179445046271361ull, 15217004469858477790ull, 6109721884461301380ull, 7331559403129590068ull}}, {{11747082333234985242ull, 14111447338197426527ull, 12289990821117991245ull, 1466311880625918013ull}}, {{5047420592760418868ull, 9776150602685301439ull, 6133237568526430875ull, 2932623761251836027ull}}, {{10094841185520837735ull, 1105557131661051262ull, 12266475137052861751ull, 5865247522503672054ull}}, {{1742938297332123854ull, 2211114263322102525ull, 6086206200396171886ull, 11730495045007344109ull}}, {{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull, 2346099009001468821ull}}, {{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull, 4692198018002937643ull}}, {{1394350637865699083ull, 1768891410657682020ull, 8558313775058847832ull, 9384396036005875287ull}}, {{15036265386540781110ull, 15111173541099177696ull, 9090360384495590212ull, 1876879207201175057ull}}, {{11625786699372010603ull, 11775603008488803777ull, 18180720768991180425ull, 3753758414402350114ull}}, {{4804829325034469590ull, 5104461943268055939ull, 17914697464272809235ull, 7507516828804700229ull}}, {{12029012309232624888ull, 15778287647621252480ull, 18340334751822203139ull, 1501503365760940045ull}}, {{5611280544755698159ull, 13109831221532953345ull, 18233925429934854663ull, 3003006731521880091ull}}, {{11222561089511396318ull, 7772918369356355074ull, 18021106786160157711ull, 6006013463043760183ull}}, {{3998378105313241020ull, 15545836738712710149ull, 17595469498610763806ull, 12012026926087520367ull}}, {{8178373250546468851ull, 14177213791968272999ull, 10897791529205973407ull, 2402405385217504073ull}}, {{16356746501092937701ull, 9907683510226994382ull, 3348838984702395199ull, 4804810770435008147ull}}, {{14266748928476323786ull, 1368622946744437149ull, 6697677969404790399ull, 9609621540870016294ull}}, {{10232047415179085404ull, 11341771033574618399ull, 16096930852848599372ull, 1921924308174003258ull}}, {{2017350756648619191ull, 4236797993439685183ull, 13747117631987647129ull, 3843848616348006517ull}}, {{4034701513297238382ull, 8473595986879370366ull, 9047491190265742642ull, 7687697232696013035ull}}, {{11874986746885178646ull, 9073416826859694719ull, 1809498238053148528ull, 1537539446539202607ull}}, {{5303229420060805676ull, 18146833653719389439ull, 3618996476106297056ull, 3075078893078405214ull}}, {{10606458840121611352ull, 17846923233729227262ull, 7237992952212594113ull, 6150157786156810428ull}}, {{2766173606533671088ull, 17247102393748902909ull, 14475985904425188227ull, 12300315572313620856ull}}, {{7931932350790554864ull, 14517466922975511551ull, 6584545995626947968ull, 2460063114462724171ull}}, {{15863864701581109728ull, 10588189772241471486ull, 13169091991253895937ull, 4920126228925448342ull}}, {{13280985329452667840ull, 2729635470773391357ull, 7891439908798240259ull, 9840252457850896685ull}}, {{6345545880632443892ull, 15303322353122319564ull, 1578287981759648051ull, 1968050491570179337ull}}, {{12691091761264887783ull, 12159900632535087512ull, 3156575963519296103ull, 3936100983140358674ull}}, {{6935439448820223949ull, 5873057191360623409ull, 6313151927038592207ull, 7872201966280717348ull}}, {{16144483148731686083ull, 1174611438272124681ull, 12330676829633449411ull, 1574440393256143469ull}}, {{13842222223753820550ull, 2349222876544249363ull, 6214609585557347206ull, 3148880786512286939ull}}, {{9237700373798089483ull, 4698445753088498727ull, 12429219171114694412ull, 6297761573024573878ull}}, {{28656673886627349ull, 9396891506176997455ull, 6411694268519837208ull, 12595523146049147757ull}}, {{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull, 2519104629209829551ull}}, {{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull, 5038209258419659102ull}}, {{22925339109301879ull, 7517513204941597964ull, 16197401859041600736ull, 10076418516839318205ull}}, {{4585067821860376ull, 5192851455730229916ull, 3239480371808320147ull, 2015283703367863641ull}}, {{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull, 4030567406735727282ull}}, {{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull, 8061134813471454564ull}}, {{3693016868999398624ull, 11532978794068004579ull, 17348979556414297410ull, 1612226962694290912ull}}, {{7386033737998797248ull, 4619213514426457542ull, 16251215039119043205ull, 3224453925388581825ull}}, {{14772067475997594496ull, 9238427028852915084ull, 14055686004528534794ull, 6448907850777163651ull}}, {{17711808754167160192ull, 1847685405770583016ull, 6500486015647617282ull, 1289781570155432730ull}}, {{16976873434624768768ull, 3695370811541166033ull, 13000972031295234564ull, 2579563140310865460ull}}, {{15507002795539985920ull, 7390741623082332067ull, 7555199988880917512ull, 5159126280621730921ull}}, {{12567261517370420223ull, 14781483246164664135ull, 15110399977761835024ull, 10318252561243461842ull}}, {{6202801118215994368ull, 6645645463974843150ull, 10400777625036187651ull, 2063650512248692368ull}}, {{12405602236431988736ull, 13291290927949686300ull, 2354811176362823686ull, 4127301024497384737ull}}, {{6364460399154425855ull, 8135837782189820985ull, 4709622352725647373ull, 8254602048994769474ull}}, {{8651589709314705818ull, 9005865185921784843ull, 15699319729512770767ull, 1650920409798953894ull}}, {{17303179418629411635ull, 18011730371843569686ull, 12951895385315989918ull, 3301840819597907789ull}}, {{16159614763549271654ull, 17576716669977587757ull, 7457046696922428221ull, 6603681639195815579ull}}, {{10610620582193674978ull, 3515343333995517551ull, 16248804598352126937ull, 1320736327839163115ull}}, {{2774497090677798339ull, 7030686667991035103ull, 14050865122994702258ull, 2641472655678326231ull}}, {{5548994181355596677ull, 14061373335982070206ull, 9654986172279852900ull, 5282945311356652463ull}}, {{11097988362711193353ull, 9676002598254588796ull, 863228270850154185ull, 10565890622713304927ull}}, {{13287644116767969641ull, 9313898149134738405ull, 7551343283653851483ull, 2113178124542660985ull}}, {{8128544159826387665ull, 181052224559925195ull, 15102686567307702967ull, 4226356249085321970ull}}, {{16257088319652775329ull, 362104449119850390ull, 11758629060905854318ull, 8452712498170643941ull}}, {{18008812922898196359ull, 14829816148791611370ull, 6041074626923081186ull, 1690542499634128788ull}}, {{17570881772086841102ull, 11212888223873671125ull, 12082149253846162373ull, 3381084999268257576ull}}, {{16695019470464130587ull, 3979032374037790635ull, 5717554433982773131ull, 6762169998536515153ull}}, {{18096399153060467411ull, 15553201733775199419ull, 12211557331022285595ull, 1352433999707303030ull}}, {{17746054232411383205ull, 12659659393840847223ull, 5976370588335019575ull, 2704867999414606061ull}}, {{17045364391113214793ull, 6872574713972142831ull, 11952741176670039151ull, 5409735998829212122ull}}, {{15643984708516877969ull, 13745149427944285663ull, 5458738279630526686ull, 10819471997658424245ull}}, {{17886192200671016887ull, 6438378700330767455ull, 1091747655926105337ull, 2163894399531684849ull}}, {{17325640327632482157ull, 12876757400661534911ull, 2183495311852210674ull, 4327788799063369698ull}}, {{16204536581555412698ull, 7306770727613518207ull, 4366990623704421349ull, 8655577598126739396ull}}, {{10619604945794903186ull, 1461354145522703641ull, 4562746939482794593ull, 1731115519625347879ull}}, {{2792465817880254756ull, 2922708291045407283ull, 9125493878965589186ull, 3462231039250695758ull}}, {{5584931635760509512ull, 5845416582090814566ull, 18250987757931178372ull, 6924462078501391516ull}}, {{15874381586119743196ull, 12237129760643893882ull, 7339546366328145997ull, 1384892415700278303ull}}, {{13302019098529934775ull, 6027515447578236149ull, 14679092732656291995ull, 2769784831400556606ull}}, {{8157294123350317933ull, 12055030895156472299ull, 10911441391603032374ull, 5539569662801113213ull}}, {{16314588246700635866ull, 5663317716603392982ull, 3376138709496513133ull, 11079139325602226427ull}}, {{10641615278823947820ull, 1132663543320678596ull, 8053925371383123273ull, 2215827865120445285ull}}, {{2836486483938344023ull, 2265327086641357193ull, 16107850742766246546ull, 4431655730240890570ull}}, {{5672972967876688046ull, 4530654173282714386ull, 13768957411822941476ull, 8863311460481781141ull}}, {{12202641037801068579ull, 8284828464140363523ull, 6443140297106498618ull, 1772662292096356228ull}}, {{5958538001892585542ull, 16569656928280727047ull, 12886280594212997236ull, 3545324584192712456ull}}, {{11917076003785171083ull, 14692569782851902478ull, 7325817114716442857ull, 7090649168385424913ull}}, {{13451461644982765187ull, 2938513956570380495ull, 12533209867169019541ull, 1418129833677084982ull}}, {{8456179216255978757ull, 5877027913140760991ull, 6619675660628487466ull, 2836259667354169965ull}}, {{16912358432511957513ull, 11754055826281521982ull, 13239351321256974932ull, 5672519334708339930ull}}, {{15377972791314363410ull, 5061367578853492349ull, 8031958568804398249ull, 11345038669416679861ull}}, {{17832989817230513975ull, 1012273515770698469ull, 5295740528502789973ull, 2269007733883335972ull}}, {{17219235560751476334ull, 2024547031541396939ull, 10591481057005579946ull, 4538015467766671944ull}}, {{15991727047793401051ull, 4049094063082793879ull, 2736218040301608276ull, 9076030935533343889ull}}, {{17955740668526321503ull, 809818812616558775ull, 15304638867027962948ull, 1815206187106668777ull}}, {{17464737263343091390ull, 1619637625233117551ull, 12162533660346374280ull, 3630412374213337555ull}}, {{16482730452976631164ull, 3239275250466235103ull, 5878323246983196944ull, 7260824748426675111ull}}, {{14364592534821057203ull, 647855050093247020ull, 4865013464138549712ull, 1452164949685335022ull}}, {{10282440995932562789ull, 1295710100186494041ull, 9730026928277099424ull, 2904329899370670044ull}}, {{2118137918155573962ull, 2591420200372988083ull, 1013309782844647232ull, 5808659798741340089ull}}, {{4236275836311147924ull, 5182840400745976166ull, 2026619565689294464ull, 11617319597482680178ull}}, {{11915301611487960555ull, 8415265709633015879ull, 11473370357363589862ull, 2323463919496536035ull}}, {{5383859149266369493ull, 16830531419266031759ull, 4499996641017628108ull, 4646927838993072071ull}}, {{10767718298532738985ull, 15214318764822511902ull, 8999993282035256217ull, 9293855677986144142ull}}, {{5842892474448458121ull, 17800259011932143673ull, 9178696285890871889ull, 1858771135597228828ull}}, {{11685784948896916241ull, 17153773950154735730ull, 18357392571781743779ull, 3717542271194457656ull}}, {{4924825824084280865ull, 15860803826599919845ull, 18268041069853935943ull, 7435084542388915313ull}}, {{4674313979558766497ull, 6861509580061894292ull, 14721654658196518158ull, 1487016908477783062ull}}, {{9348627959117532993ull, 13723019160123788584ull, 10996565242683484700ull, 2974033816955566125ull}}, {{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull, 5948067633911132251ull}}, {{501023689051028738ull, 17998588493076051106ull, 7092772823314835570ull, 11896135267822264502ull}}, {{11168251182035936718ull, 10978415328099030867ull, 8797252194146787760ull, 2379227053564452900ull}}, {{3889758290362321819ull, 3510086582488510119ull, 17594504388293575521ull, 4758454107128905800ull}}, {{7779516580724643637ull, 7020173164977020238ull, 16742264702877599426ull, 9516908214257811601ull}}, {{1555903316144928728ull, 8782732262479224694ull, 7037801755317430208ull, 1903381642851562320ull}}, {{3111806632289857455ull, 17565464524958449388ull, 14075603510634860416ull, 3806763285703124640ull}}, {{6223613264579714909ull, 16684184976207347160ull, 9704462947560169217ull, 7613526571406249281ull}}, {{12312769097141673952ull, 14404883439467200401ull, 5630241404253944166ull, 1522705314281249856ull}}, {{6178794120573796287ull, 10363022805224849187ull, 11260482808507888333ull, 3045410628562499712ull}}, {{12357588241147592574ull, 2279301536740146758ull, 4074221543306225051ull, 6090821257124999425ull}}, {{6268432408585633531ull, 4558603073480293517ull, 8148443086612450102ull, 12181642514249998850ull}}, {{16011081740684767999ull, 8290418244179879349ull, 1629688617322490020ull, 2436328502849999770ull}}, {{13575419407659984382ull, 16580836488359758699ull, 3259377234644980040ull, 4872657005699999540ull}}, {{8704094741610417148ull, 14714928903009965783ull, 6518754469289960081ull, 9745314011399999080ull}}, {{16498214207289724723ull, 6632334595343903479ull, 1303750893857992016ull, 1949062802279999816ull}}, {{14549684340869897829ull, 13264669190687806959ull, 2607501787715984032ull, 3898125604559999632ull}}, {{10652624608030244042ull, 8082594307666062303ull, 5215003575431968065ull, 7796251209119999264ull}}, {{9509222551089869455ull, 16373914120500853753ull, 15800395974054034905ull, 1559250241823999852ull}}, {{571701028470187294ull, 14301084167292155891ull, 13154047874398518195ull, 3118500483647999705ull}}, {{1143402056940374587ull, 10155424260874760166ull, 7861351675087484775ull, 6237000967295999411ull}}, {{2286804113880749174ull, 1864104448039968716ull, 15722703350174969551ull, 12474001934591998822ull}}, {{15214756081743791128ull, 11440867333833724712ull, 10523238299518814556ull, 2494800386918399764ull}}, {{11982768089778030640ull, 4434990593957897809ull, 2599732525328077497ull, 4989600773836799529ull}}, {{5518792105846509663ull, 8869981187915795619ull, 5199465050656154994ull, 9979201547673599058ull}}, {{4793107235911212256ull, 9152693867066979770ull, 12107939454356961968ull, 1995840309534719811ull}}, {{9586214471822424512ull, 18305387734133959540ull, 5769134835004372320ull, 3991680619069439623ull}}, {{725684869935297407ull, 18164031394558367465ull, 11538269670008744641ull, 7983361238138879246ull}}, {{7523834603470880128ull, 11011503908395494139ull, 5997002748743659251ull, 1596672247627775849ull}}, {{15047669206941760256ull, 3576263743081436662ull, 11994005497487318503ull, 3193344495255551698ull}}, {{11648594340173968895ull, 7152527486162873325ull, 5541266921265085390ull, 6386688990511103397ull}}, {{4850444606638386174ull, 14305054972325746651ull, 11082533842530170780ull, 12773377981022206794ull}}, {{970088921327677235ull, 17618406253432790623ull, 16973902027473675448ull, 2554675596204441358ull}}, {{1940177842655354470ull, 16790068433156029630ull, 15501059981237799281ull, 5109351192408882717ull}}, {{3880355685310708939ull, 15133392792602507644ull, 12555375888766046947ull, 10218702384817765435ull}}, {{4465419951804052111ull, 10405376188004322175ull, 2511075177753209389ull, 2043740476963553087ull}}, {{8930839903608104222ull, 2364008302299092734ull, 5022150355506418779ull, 4087480953927106174ull}}, {{17861679807216208444ull, 4728016604598185468ull, 10044300711012837558ull, 8174961907854212348ull}}, {{18329731220410882982ull, 4634952135661547416ull, 13076906586428298481ull, 1634992381570842469ull}}, {{18212718367112214348ull, 9269904271323094833ull, 7707069099147045346ull, 3269984763141684939ull}}, {{17978692660514877079ull, 93064468936638051ull, 15414138198294090693ull, 6539969526283369878ull}}, {{10974436161586796063ull, 3707961708529237933ull, 14150874083884549108ull, 1307993905256673975ull}}, {{3502128249464040509ull, 7415923417058475867ull, 9855004094059546600ull, 2615987810513347951ull}}, {{7004256498928081017ull, 14831846834116951734ull, 1263264114409541584ull, 5231975621026695903ull}}, {{14008512997856162033ull, 11216949594524351852ull, 2526528228819083169ull, 10463951242053391806ull}}, {{10180400229055053053ull, 2243389918904870370ull, 4194654460505726957ull, 2092790248410678361ull}}, {{1914056384400554490ull, 4486779837809740741ull, 8389308921011453914ull, 4185580496821356722ull}}, {{3828112768801108980ull, 8973559675619481482ull, 16778617842022907828ull, 8371160993642713444ull}}, {{15523017812727863089ull, 9173409564607716942ull, 18113118827372222858ull, 1674232198728542688ull}}, {{12599291551746174562ull, 18346819129215433885ull, 17779493581034894100ull, 3348464397457085377ull}}, {{6751839029782797507ull, 18246894184721316155ull, 17112243088360236585ull, 6696928794914170755ull}}, {{1350367805956559502ull, 3649378836944263231ull, 3422448617672047317ull, 1339385758982834151ull}}, {{2700735611913119003ull, 7298757673888526462ull, 6844897235344094634ull, 2678771517965668302ull}}, {{5401471223826238006ull, 14597515347777052924ull, 13689794470688189268ull, 5357543035931336604ull}}, {{10802942447652476012ull, 10748286621844554232ull, 8932844867666826921ull, 10715086071862673209ull}}, {{9539286119014315849ull, 2149657324368910846ull, 16543964232501006677ull, 2143017214372534641ull}}, {{631828164319080082ull, 4299314648737821693ull, 14641184391292461738ull, 4286034428745069283ull}}, {{1263656328638160163ull, 8598629297475643386ull, 10835624708875371860ull, 8572068857490138567ull}}, {{11320777709953363003ull, 9098423488978949323ull, 9545822571258895018ull, 1714413771498027713ull}}, {{4194811346197174389ull, 18196846977957898647ull, 644901068808238420ull, 3428827542996055427ull}}, {{8389622692394348777ull, 17946949882206245678ull, 1289802137616476841ull, 6857655085992110854ull}}, {{12745970982704600725ull, 3589389976441249135ull, 15015355686490936661ull, 1371531017198422170ull}}, {{7045197891699649834ull, 7178779952882498271ull, 11583967299272321706ull, 2743062034396844341ull}}, {{14090395783399299668ull, 14357559905764996542ull, 4721190524835091796ull, 5486124068793688683ull}}, {{9734047493089047719ull, 10268375737820441469ull, 9442381049670183593ull, 10972248137587377366ull}}, {{13014855942843540514ull, 16811070406531729586ull, 5577825024675947041ull, 2194449627517475473ull}}, {{7582967811977529411ull, 15175396739353907557ull, 11155650049351894083ull, 4388899255034950946ull}}, {{15165935623955058822ull, 11904049404998263498ull, 3864556024994236551ull, 8777798510069901893ull}}, {{10411884754274832411ull, 17138205139967293992ull, 11840957649224578279ull, 1755559702013980378ull}}, {{2377025434840113206ull, 15829666206225036369ull, 5235171224739604943ull, 3511119404027960757ull}}, {{4754050869680226411ull, 13212588338740521122ull, 10470342449479209887ull, 7022238808055921514ull}}, {{12018856618161776252ull, 6331866482490014547ull, 16851463748863483270ull, 1404447761611184302ull}}, {{5590969162614000888ull, 12663732964980029095ull, 15256183424017414924ull, 2808895523222368605ull}}, {{11181938325228001776ull, 6880721856250506574ull, 12065622774325278233ull, 5617791046444737211ull}}, {{3917132576746451935ull, 13761443712501013149ull, 5684501474941004850ull, 11235582092889474423ull}}, {{8162124144833111034ull, 13820335186725933599ull, 12204946739213931939ull, 2247116418577894884ull}}, {{16324248289666222067ull, 9193926299742315582ull, 5963149404718312263ull, 4494232837155789769ull}}, {{14201752505622892517ull, 18387852599484631165ull, 11926298809436624526ull, 8988465674311579538ull}}, {{17597745760092219797ull, 18434965778864567525ull, 13453306206113055874ull, 1797693134862315907ull}}, {{16748747446474887977ull, 18423187484019583435ull, 8459868338516560133ull, 3595386269724631815ull}}, {{15050750819240224337ull, 18399630894329615255ull, 16919736677033120267ull, 7190772539449263630ull}}, {{10388847793331865514ull, 11058623808349743697ull, 3383947335406624053ull, 1438154507889852726ull}}, {{2330951512954179412ull, 3670503542989935779ull, 6767894670813248107ull, 2876309015779705452ull}}, {{4661903025908358824ull, 7341007085979871558ull, 13535789341626496214ull, 5752618031559410904ull}}, {{9323806051816717647ull, 14682014171959743116ull, 8624834609543440812ull, 11505236063118821809ull}}, {{9243458839847164176ull, 6625751649133858946ull, 16482362180876329455ull, 2301047212623764361ull}}, {{40173605984776736ull, 13251503298267717893ull, 14517980288043107294ull, 4602094425247528723ull}}, {{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull, 9204188850495057447ull}}, {{16069442393910695ull, 1611252504565176834ull, 9496540929959153241ull, 1840837770099011489ull}}, {{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull, 3681675540198022979ull}}, {{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull, 7363351080396045958ull}}, {{3702204368657038879ull, 1289002003652141467ull, 11286581558709232916ull, 1472670216079209191ull}}, {{7404408737314077757ull, 2578004007304282934ull, 4126419043708914216ull, 2945340432158418383ull}}, {{14808817474628155514ull, 5156008014608565868ull, 8252838087417828432ull, 5890680864316836766ull}}, {{11170890875546759412ull, 10312016029217131737ull, 16505676174835656864ull, 11781361728633673532ull}}, {{13302224619335082852ull, 5751752020585336670ull, 10679832864450952019ull, 2356272345726734706ull}}, {{8157705164960614088ull, 11503504041170673341ull, 2912921655192352422ull, 4712544691453469413ull}}, {{16315410329921228176ull, 4560264008631795066ull, 5825843310384704845ull, 9425089382906938826ull}}, {{10641779695468066282ull, 4601401616468269336ull, 4854517476818851292ull, 1885017876581387765ull}}, {{2836815317226580948ull, 9202803232936538673ull, 9709034953637702584ull, 3770035753162775530ull}}, {{5673630634453161895ull, 18405606465873077346ull, 971325833565853552ull, 7540071506325551061ull}}, {{15892121385858273672ull, 14749167737400346438ull, 3883613981455081033ull, 1508014301265110212ull}}, {{13337498698006995728ull, 11051591401091141261ull, 7767227962910162067ull, 3016028602530220424ull}}, {{8228253322304439839ull, 3656438728472730907ull, 15534455925820324135ull, 6032057205060440848ull}}, {{16456506644608879678ull, 7312877456945461814ull, 12622167777931096654ull, 12064114410120881697ull}}, {{3291301328921775936ull, 5151924306131002686ull, 9903131185070039977ull, 2412822882024176339ull}}, {{6582602657843551871ull, 10303848612262005372ull, 1359518296430528338ull, 4825645764048352679ull}}, {{13165205315687103742ull, 2160953150814459128ull, 2719036592861056677ull, 9651291528096705358ull}}, {{13701087507363151718ull, 432190630162891825ull, 11611853762797942305ull, 1930258305619341071ull}}, {{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull, 3860516611238682143ull}}, {{17910861882033503640ull, 1728762520651567302ull, 9553926903772665988ull, 7721033222477364286ull}}, {{7271521191148611052ull, 15103147763097954753ull, 5600134195496443520ull, 1544206644495472857ull}}, {{14543042382297222103ull, 11759551452486357890ull, 11200268390992887041ull, 3088413288990945714ull}}, {{10639340690884892589ull, 5072358831263164165ull, 3953792708276222467ull, 6176826577981891429ull}}, {{2831937308060233562ull, 10144717662526328331ull, 7907585416552444934ull, 12353653155963782858ull}}, {{11634433905837777682ull, 9407641161989086312ull, 12649563527536219956ull, 2470730631192756571ull}}, {{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull, 4941461262385513143ull}}, {{9644247475932007496ull, 737076500537242018ull, 13704765962725776594ull, 9882922524771026286ull}}, {{12996895939412132469ull, 147415300107448403ull, 6430302007287065642ull, 1976584504954205257ull}}, {{7547047805114713322ull, 294830600214896807ull, 12860604014574131284ull, 3953169009908410514ull}}, {{15094095610229426643ull, 589661200429793614ull, 7274463955438710952ull, 7906338019816821029ull}}, {{3018819122045885329ull, 3807281054827869046ull, 16212288050055383483ull, 1581267603963364205ull}}, {{6037638244091770658ull, 7614562109655738092ull, 13977832026401215350ull, 3162535207926728411ull}}, {{12075276488183541315ull, 15229124219311476184ull, 9508919979092879084ull, 6325070415853456823ull}}, {{5703808902657531013ull, 12011504364913400753ull, 571095884476206553ull, 12650140831706913647ull}}, {{12208808224757237173ull, 2402300872982680150ull, 7492916806379061957ull, 2530028166341382729ull}}, {{5970872375804922729ull, 4804601745965360301ull, 14985833612758123914ull, 5060056332682765458ull}}, {{11941744751609845457ull, 9609203491930720602ull, 11524923151806696212ull, 10120112665365530917ull}}, {{6077697765063879415ull, 16679235957353785413ull, 9683682259845159888ull, 2024022533073106183ull}}, {{12155395530127758829ull, 14911727840998019210ull, 920620445980768161ull, 4048045066146212367ull}}, {{5864046986545966042ull, 11376711608286486805ull, 1841240891961536323ull, 8096090132292424734ull}}, {{8551507026793013855ull, 9654039951141118007ull, 15125643437359948557ull, 1619218026458484946ull}}, {{17103014053586027710ull, 861335828572684398ull, 11804542801010345499ull, 3238436052916969893ull}}, {{15759284033462503804ull, 1722671657145368797ull, 5162341528311139382ull, 6476872105833939787ull}}, {{6841205621434411084ull, 15101929590396715052ull, 8411165935146048522ull, 1295374421166787957ull}}, {{13682411242868822168ull, 11757115107083878488ull, 16822331870292097045ull, 2590748842333575914ull}}, {{8918078412028092720ull, 5067486140458205361ull, 15197919666874642475ull, 5181497684667151829ull}}, {{17836156824056185439ull, 10134972280916410722ull, 11949095260039733334ull, 10362995369334303659ull}}, {{3567231364811237088ull, 13095040900409013114ull, 17147214310975587959ull, 2072599073866860731ull}}, {{7134462729622474176ull, 7743337727108474612ull, 15847684548241624303ull, 4145198147733721463ull}}, {{14268925459244948351ull, 15486675454216949224ull, 13248625022773696990ull, 8290396295467442927ull}}, {{6543133906590899994ull, 10476032720327210491ull, 10028422634038560044ull, 1658079259093488585ull}}, {{13086267813181799987ull, 2505321366944869366ull, 1610101194367568473ull, 3316158518186977171ull}}, {{7725791552654048358ull, 5010642733889738733ull, 3220202388735136946ull, 6632317036373954342ull}}, {{5234507125272719995ull, 12070174991003678716ull, 8022738107230848035ull, 1326463407274790868ull}}, {{10469014250545439990ull, 5693605908297805816ull, 16045476214461696071ull, 2652926814549581736ull}}, {{2491284427381328363ull, 11387211816595611633ull, 13644208355213840526ull, 5305853629099163473ull}}, {{4982568854762656726ull, 4327679559481671650ull, 8841672636718129437ull, 10611707258198326947ull}}, {{15753909029920172638ull, 15622931170863975622ull, 9147032156827446533ull, 2122341451639665389ull}}, {{13061073986130793660ull, 12799118268018399629ull, 18294064313654893067ull, 4244682903279330778ull}}, {{7675403898552035704ull, 7151492462327247643ull, 18141384553600234519ull, 8489365806558661557ull}}, {{16292476038678048434ull, 5119647307207359851ull, 11006974540203867550ull, 1697873161311732311ull}}, {{14138208003646545252ull, 10239294614414719703ull, 3567205006698183484ull, 3395746322623464623ull}}, {{9829671933583538887ull, 2031845155119887791ull, 7134410013396366969ull, 6791492645246929246ull}}, {{5655283201458618101ull, 406369031023977558ull, 5116230817421183717ull, 1358298529049385849ull}}, {{11310566402917236201ull, 812738062047955116ull, 10232461634842367434ull, 2716597058098771698ull}}, {{4174388732124920786ull, 1625476124095910233ull, 2018179195975183252ull, 5433194116197543397ull}}, {{8348777464249841572ull, 3250952248191820466ull, 4036358391950366504ull, 10866388232395086794ull}}, {{16427150751817609608ull, 11718236893864095062ull, 15564666937357714593ull, 2173277646479017358ull}}, {{14407557429925667599ull, 4989729714018638509ull, 12682589801005877571ull, 4346555292958034717ull}}, {{10368370786141783581ull, 9979459428037277019ull, 6918435528302203526ull, 8693110585916069435ull}}, {{2073674157228356717ull, 5685240700349365727ull, 1383687105660440705ull, 1738622117183213887ull}}, {{4147348314456713433ull, 11370481400698731454ull, 2767374211320881410ull, 3477244234366427774ull}}, {{8294696628913426865ull, 4294218727687911292ull, 5534748422641762821ull, 6954488468732855548ull}}, {{5348288140524595697ull, 15616239004505223551ull, 12174996128754083533ull, 1390897693746571109ull}}, {{10696576281049191393ull, 12785733935300895486ull, 5903248183798615451ull, 2781795387493142219ull}}, {{2946408488388831169ull, 7124723796892239357ull, 11806496367597230903ull, 5563590774986284438ull}}, {{5892816976777662337ull, 14249447593784478714ull, 5166248661484910190ull, 11127181549972568877ull}}, {{4867912210097442791ull, 10228587148240716389ull, 8411947361780802684ull, 2225436309994513775ull}}, {{9735824420194885581ull, 2010430222771881162ull, 16823894723561605369ull, 4450872619989027550ull}}, {{1024904766680219546ull, 4020860445543762325ull, 15201045373413659122ull, 8901745239978055101ull}}, {{11273027397561774879ull, 11872218533334483434ull, 6729557889424642147ull, 1780349047995611020ull}}, {{4099310721413998142ull, 5297692992959415253ull, 13459115778849284295ull, 3560698095991222040ull}}, {{8198621442827996284ull, 10595385985918830506ull, 8471487483989016974ull, 7121396191982444081ull}}, {{5329073103307509580ull, 2119077197183766101ull, 5383646311539713718ull, 1424279238396488816ull}}, {{10658146206615019160ull, 4238154394367532202ull, 10767292623079427436ull, 2848558476792977632ull}}, {{2869548339520486704ull, 8476308788735064405ull, 3087841172449303256ull, 5697116953585955265ull}}, {{5739096679040973407ull, 16952617577470128810ull, 6175682344898606512ull, 11394233907171910530ull}}, {{8526516965292015328ull, 10769221144977846408ull, 1235136468979721302ull, 2278846781434382106ull}}, {{17053033930584030656ull, 3091698216246141200ull, 2470272937959442605ull, 4557693562868764212ull}}, {{15659323787458509695ull, 6183396432492282401ull, 4940545875918885210ull, 9115387125737528424ull}}, {{3131864757491701939ull, 15994074545466097773ull, 15745504434151418334ull, 1823077425147505684ull}}, {{6263729514983403878ull, 13541405017222643930ull, 13044264794593285053ull, 3646154850295011369ull}}, {{12527459029966807756ull, 8636065960735736244ull, 7641785515477018491ull, 7292309700590022739ull}}, {{17262887064961002844ull, 1727213192147147248ull, 16285752362063044991ull, 1458461940118004547ull}}, {{16079030056212454072ull, 3454426384294294497ull, 14124760650416538366ull, 2916923880236009095ull}}, {{13711316038715356528ull, 6908852768588588995ull, 9802777227123525116ull, 5833847760472018191ull}}, {{8975888003721161440ull, 13817705537177177991ull, 1158810380537498616ull, 11667695520944036383ull}}, {{1795177600744232288ull, 17520936366403076891ull, 11299808520333230692ull, 2333539104188807276ull}}, {{3590355201488464576ull, 16595128659096602166ull, 4152872966956909769ull, 4667078208377614553ull}}, {{7180710402976929152ull, 14743513244483652716ull, 8305745933913819539ull, 9334156416755229106ull}}, {{5125490895337296154ull, 2948702648896730543ull, 5350498001524674231ull, 1866831283351045821ull}}, {{10250981790674592308ull, 5897405297793461086ull, 10700996003049348462ull, 3733662566702091642ull}}, {{2055219507639632999ull, 11794810595586922173ull, 2955247932389145308ull, 7467325133404183285ull}}, {{4100392716269836923ull, 13427008563343115404ull, 591049586477829061ull, 1493465026680836657ull}}, {{8200785432539673846ull, 8407273052976679192ull, 1182099172955658123ull, 2986930053361673314ull}}, {{16401570865079347692ull, 16814546105953358384ull, 2364198345911316246ull, 5973860106723346628ull}}, {{14356397656449143767ull, 15182348138197165153ull, 4728396691822632493ull, 11947720213446693256ull}}, {{10249977160773649400ull, 17793864886607074323ull, 4635028153106436821ull, 2389544042689338651ull}}, {{2053210247837747184ull, 17140985699504597031ull, 9270056306212873643ull, 4779088085378677302ull}}, {{4106420495675494368ull, 15835227325299642446ull, 93368538716195671ull, 9558176170757354605ull}}, {{8199981728618919520ull, 6856394279801838812ull, 18673707743239134ull, 1911635234151470921ull}}, {{16399963457237839040ull, 13712788559603677624ull, 37347415486478268ull, 3823270468302941842ull}}, {{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull, 7646540936605883684ull}}, {{17628031827120866586ull, 5485115423841471049ull, 14772334225162232600ull, 1529308187321176736ull}}, {{16809319580532181555ull, 10970230847682942099ull, 11097924376614913584ull, 3058616374642353473ull}}, {{15171895087354811494ull, 3493717621656332583ull, 3749104679520275553ull, 6117232749284706947ull}}, {{11897046101000071372ull, 6987435243312665167ull, 7498209359040551106ull, 12234465498569413894ull}}, {{9758106849683834921ull, 1397487048662533033ull, 16257037130775751514ull, 2446893099713882778ull}}, {{1069469625658118226ull, 2794974097325066067ull, 14067330187841951412ull, 4893786199427765557ull}}, {{2138939251316236451ull, 5589948194650132134ull, 9687916301974351208ull, 9787572398855531115ull}}, {{7806485479747067937ull, 12186036083155757396ull, 1937583260394870241ull, 1957514479771106223ull}}, {{15612970959494135874ull, 5925328092601963176ull, 3875166520789740483ull, 3915028959542212446ull}}, {{12779197845278720131ull, 11850656185203926353ull, 7750333041579480966ull, 7830057919084424892ull}}, {{6245188383797654350ull, 13438177681266516240ull, 8928764237799716839ull, 1566011583816884978ull}}, {{12490376767595308699ull, 8429611288823480864ull, 17857528475599433679ull, 3132023167633769956ull}}, {{6534009461481065782ull, 16859222577646961729ull, 17268312877489315742ull, 6264046335267539913ull}}, {{13068018922962131563ull, 15271701081584371842ull, 16089881681269079869ull, 12528092670535079827ull}}, {{13681650228818157283ull, 6743689031058784691ull, 10596673965737636620ull, 2505618534107015965ull}}, {{8916556383926762949ull, 13487378062117569383ull, 2746603857765721624ull, 5011237068214031931ull}}, {{17833112767853525897ull, 8528012050525587150ull, 5493207715531443249ull, 10022474136428063862ull}}, {{7255971368312615503ull, 5394951224847027753ull, 8477339172590109296ull, 2004494827285612772ull}}, {{14511942736625231005ull, 10789902449694055506ull, 16954678345180218592ull, 4008989654571225544ull}}, {{10577141399540910394ull, 3133060825678559397ull, 15462612616650885569ull, 8017979309142451089ull}}, {{2115428279908182079ull, 11694658609361442849ull, 17849917782297818406ull, 1603595861828490217ull}}, {{4230856559816364158ull, 4942573145013334082ull, 17253091490886085197ull, 3207191723656980435ull}}, {{8461713119632728315ull, 9885146290026668164ull, 16059438908062618778ull, 6414383447313960871ull}}, {{12760389068152276633ull, 16734424516972974925ull, 6901236596354434078ull, 1282876689462792174ull}}, {{7074034062595001650ull, 15022104960236398235ull, 13802473192708868157ull, 2565753378925584348ull}}, {{14148068125190003299ull, 11597465846763244854ull, 9158202311708184699ull, 5131506757851168697ull}}, {{9849392176670454981ull, 4748187619816938093ull, 18316404623416369399ull, 10263013515702337394ull}}, {{5659227250076001320ull, 12017683968189118588ull, 18420676183650915172ull, 2052602703140467478ull}}, {{11318454500152002639ull, 5588623862668685560ull, 18394608293592278729ull, 4105205406280934957ull}}, {{4190164926594453662ull, 11177247725337371121ull, 18342472513475005842ull, 8210410812561869915ull}}, {{11906079429544621702ull, 9614147174551294870ull, 3668494502695001168ull, 1642082162512373983ull}}, {{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull, 3284164325024747966ull}}, {{10730829570759383576ull, 1563100550786076250ull, 14673978010780004674ull, 6568328650049495932ull}}, {{5835514728893787039ull, 4001968924899125573ull, 10313493231639821581ull, 1313665730009899186ull}}, {{11671029457787574077ull, 8003937849798251146ull, 2180242389570091546ull, 2627331460019798373ull}}, {{4895314841865596538ull, 16007875699596502293ull, 4360484779140183092ull, 5254662920039596746ull}}, {{9790629683731193075ull, 13569007325483452970ull, 8720969558280366185ull, 10509325840079193492ull}}, {{9336823566230059262ull, 10092499094580511240ull, 9122891541139893883ull, 2101865168015838698ull}}, {{226903058750566907ull, 1738254115451470865ull, 18245783082279787767ull, 4203730336031677396ull}}, {{453806117501133814ull, 3476508230902941730ull, 18044822090850023918ull, 8407460672063354793ull}}, {{3780110038242137086ull, 4384650460922498669ull, 14677010862395735753ull, 1681492134412670958ull}}, {{7560220076484274172ull, 8769300921844997338ull, 10907277651081919890ull, 3362984268825341917ull}}, {{15120440152968548344ull, 17538601843689994676ull, 3367811228454288164ull, 6725968537650683835ull}}, {{3024088030593709669ull, 18265115627705640228ull, 673562245690857632ull, 1345193707530136767ull}}, {{6048176061187419338ull, 18083487181701728840ull, 1347124491381715265ull, 2690387415060273534ull}}, {{12096352122374838675ull, 17720230289693906064ull, 2694248982763430531ull, 5380774830120547068ull}}, {{5745960171040125734ull, 16993716505678260513ull, 5388497965526861063ull, 10761549660241094136ull}}, {{8527889663691845794ull, 18156138560103293395ull, 4767048407847282535ull, 2152309932048218827ull}}, {{17055779327383691587ull, 17865533046497035174ull, 9534096815694565071ull, 4304619864096437654ull}}, {{15664814581057831557ull, 17284322019284518733ull, 621449557679578527ull, 8609239728192875309ull}}, {{17890358175179207605ull, 7146213218598814069ull, 14881685170503556998ull, 1721847945638575061ull}}, {{17333972276648863593ull, 14292426437197628139ull, 11316626267297562380ull, 3443695891277150123ull}}, {{16221200479588175569ull, 10138108800685704663ull, 4186508460885573145ull, 6887391782554300247ull}}, {{3244240095917635114ull, 9406319389620961579ull, 8215999321660935275ull, 1377478356510860049ull}}, {{6488480191835270228ull, 365894705532371542ull, 16431998643321870551ull, 2754956713021720098ull}}, {{12976960383670540455ull, 731789411064743084ull, 14417253212934189486ull, 5509913426043440197ull}}, {{7507176693631529294ull, 1463578822129486169ull, 10387762352158827356ull, 11019826852086880395ull}}, {{1501435338726305859ull, 3982064579167807557ull, 2077552470431765471ull, 2203965370417376079ull}}, {{3002870677452611718ull, 7964129158335615114ull, 4155104940863530942ull, 4407930740834752158ull}}, {{6005741354905223435ull, 15928258316671230228ull, 8310209881727061884ull, 8815861481669504316ull}}, {{12269194715206775657ull, 3185651663334246045ull, 5351390791087322700ull, 1763172296333900863ull}}, {{6091645356703999697ull, 6371303326668492091ull, 10702781582174645400ull, 3526344592667801726ull}}, {{12183290713407999394ull, 12742606653336984182ull, 2958819090639739184ull, 7052689185335603453ull}}, {{17194053401649241172ull, 9927218960151217482ull, 11659810262353678806ull, 1410537837067120690ull}}, {{15941362729588930728ull, 1407693846592883349ull, 4872876450997805997ull, 2821075674134241381ull}}, {{13435981385468309839ull, 2815387693185766699ull, 9745752901995611994ull, 5642151348268482762ull}}, {{8425218697227068061ull, 5630775386371533399ull, 1044761730281672372ull, 11284302696536965525ull}}, {{5374392554187323936ull, 8504852706758127326ull, 208952346056334474ull, 2256860539307393105ull}}, {{10748785108374647871ull, 17009705413516254652ull, 417904692112668948ull, 4513721078614786210ull}}, {{3050826143039744126ull, 15572666753322957689ull, 835809384225337897ull, 9027442157229572420ull}}, {{4299514043349859149ull, 10493230980148412184ull, 167161876845067579ull, 1805488431445914484ull}}, {{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull, 3610976862891828968ull}}, {{17198056173399436594ull, 5079435773174545504ull, 668647507380270318ull, 7221953725783657936ull}}, {{14507657678905618289ull, 15773282413602550393ull, 3823078316217964386ull, 1444390745156731587ull}}, {{10568571284101684961ull, 13099820753495549171ull, 7646156632435928773ull, 2888781490313463174ull}}, {{2690398494493818305ull, 7752897433281546727ull, 15292313264871857547ull, 5777562980626926348ull}}, {{5380796988987636610ull, 15505794866563093454ull, 12137882456034163478ull, 11555125961253852697ull}}, {{15833554656765168615ull, 3101158973312618690ull, 9806274120690653342ull, 2311025192250770539ull}}, {{13220365239820785614ull, 6202317946625237381ull, 1165804167671755068ull, 4622050384501541079ull}}, {{7993986405932019612ull, 12404635893250474763ull, 2331608335343510136ull, 9244100769003082158ull}}, {{8977494910670224569ull, 17238322437617736245ull, 11534368111294432996ull, 1848820153800616431ull}}, {{17954989821340449138ull, 16029900801525920874ull, 4621992148879314377ull, 3697640307601232863ull}}, {{17463235568971346659ull, 13613057529342290133ull, 9243984297758628755ull, 7395280615202465726ull}}, {{18250042372761910625ull, 6411960320610368349ull, 5538145674293636074ull, 1479056123040493145ull}}, {{18053340671814269633ull, 12823920641220736699ull, 11076291348587272148ull, 2958112246080986290ull}}, {{17659937269918987650ull, 7201097208731921783ull, 3705838623464992681ull, 5916224492161972581ull}}, {{16873130466128423684ull, 14402194417463843567ull, 7411677246929985362ull, 11832448984323945162ull}}, {{7063974907967595060ull, 17637834142460410006ull, 8861033078869817718ull, 2366489796864789032ull}}, {{14127949815935190120ull, 16828924211211268396ull, 17722066157739635437ull, 4732979593729578064ull}}, {{9809155558160828624ull, 15211104348712985177ull, 16997388241769719259ull, 9465959187459156129ull}}, {{1961831111632165725ull, 14110267313968328005ull, 18156872907321585144ull, 1893191837491831225ull}}, {{3923662223264331450ull, 9773790554227104394ull, 17867001740933618673ull, 3786383674983662451ull}}, {{7847324446528662900ull, 1100837034744657172ull, 17287259408157685731ull, 7572767349967324903ull}}, {{5258813704047642904ull, 14977562665916572727ull, 14525498325857268115ull, 1514553469993464980ull}}, {{10517627408095285807ull, 11508381258123593838ull, 10604252578004984615ull, 3029106939986929961ull}}, {{2588510742481019997ull, 4570018442537636061ull, 2761761082300417615ull, 6058213879973859923ull}}, {{5177021484962039993ull, 9140036885075272122ull, 5523522164600835230ull, 12116427759947719846ull}}, {{12103450741218138969ull, 5517356191756964747ull, 4794053247662077369ull, 2423285551989543969ull}}, {{5760157408726726321ull, 11034712383513929495ull, 9588106495324154738ull, 4846571103979087938ull}}, {{11520314817453452641ull, 3622680693318307374ull, 729468916938757861ull, 9693142207958175877ull}}, {{9682760592974511175ull, 11792582582889392444ull, 7524591412871572218ull, 1938628441591635175ull}}, {{918777112239470733ull, 5138421092069233273ull, 15049182825743144437ull, 3877256883183270350ull}}, {{1837554224478941466ull, 10276842184138466546ull, 11651621577776737258ull, 7754513766366540701ull}}, {{367510844895788294ull, 16812763695795334602ull, 6019673130297257774ull, 1550902753273308140ull}}, {{735021689791576587ull, 15178783317881117588ull, 12039346260594515549ull, 3101805506546616280ull}}, {{1470043379583153173ull, 11910822562052683560ull, 5631948447479479483ull, 6203611013093232561ull}}, {{2940086759166306346ull, 5374901050395815504ull, 11263896894958958967ull, 12407222026186465122ull}}, {{11656063796058992239ull, 15832375469046804393ull, 9631477008475612439ull, 2481444405237293024ull}}, {{4865383518408432862ull, 13218006864384057171ull, 816209943241673263ull, 4962888810474586049ull}}, {{9730767036816865723ull, 7989269655058562726ull, 1632419886483346527ull, 9925777620949172098ull}}, {{5635502222105283468ull, 1597853931011712545ull, 11394530421522400275ull, 1985155524189834419ull}}, {{11271004444210566936ull, 3195707862023425090ull, 4342316769335248934ull, 3970311048379668839ull}}, {{4095264814711582255ull, 6391415724046850181ull, 8684633538670497868ull, 7940622096759337678ull}}, {{8197750592426137098ull, 4967631959551280359ull, 12804973151959830543ull, 1588124419351867535ull}}, {{16395501184852274195ull, 9935263919102560718ull, 7163202230210109470ull, 3176248838703735071ull}}, {{14344258295994996774ull, 1423783764495569821ull, 14326404460420218941ull, 6352497677407470142ull}}, {{10241772518280441931ull, 2847567528991139643ull, 10206064847130886266ull, 12704995354814940285ull}}, {{16805749762623729679ull, 4258862320540138251ull, 2041212969426177253ull, 2540999070962988057ull}}, {{15164755451537907742ull, 8517724641080276503ull, 4082425938852354506ull, 5081998141925976114ull}}, {{11882766829366263868ull, 17035449282160553007ull, 8164851877704709012ull, 10163996283851952228ull}}, {{9755250995357073420ull, 3407089856432110601ull, 12701016819766672772ull, 2032799256770390445ull}}, {{1063757917004595224ull, 6814179712864221203ull, 6955289565823793928ull, 4065598513540780891ull}}, {{2127515834009190448ull, 13628359425728442406ull, 13910579131647587856ull, 8131197027081561782ull}}, {{15182898425769479383ull, 13793718329371419450ull, 10160813455813338217ull, 1626239405416312356ull}}, {{11919052777829407149ull, 9140692585033287285ull, 1874882837917124819ull, 3252478810832624713ull}}, {{5391361481949262682ull, 18281385170066574571ull, 3749765675834249638ull, 6504957621665249426ull}}, {{1078272296389852537ull, 18413672292980956207ull, 4439301949908760250ull, 1300991524333049885ull}}, {{2156544592779705073ull, 18380600512252360798ull, 8878603899817520501ull, 2601983048666099770ull}}, {{4313089185559410146ull, 18314456950795169980ull, 17757207799635041003ull, 5203966097332199540ull}}, {{8626178371118820291ull, 18182169827880788344ull, 17067671525560530391ull, 10407932194664399081ull}}, {{5414584488965674382ull, 11015131595059978315ull, 7102883119854016401ull, 2081586438932879816ull}}, {{10829168977931348763ull, 3583519116410405014ull, 14205766239708032803ull, 4163172877865759632ull}}, {{3211593882153145910ull, 7167038232820810029ull, 9964788405706513990ull, 8326345755731519265ull}}, {{15399714035398270475ull, 1433407646564162005ull, 1992957681141302798ull, 1665269151146303853ull}}, {{12352683997086989334ull, 2866815293128324011ull, 3985915362282605596ull, 3330538302292607706ull}}, {{6258623920464427051ull, 5733630586256648023ull, 7971830724565211192ull, 6661076604585215412ull}}, {{8630422413576706057ull, 15904121376218970897ull, 8973063774396862884ull, 1332215320917043082ull}}, {{17260844827153412114ull, 13361498678728390178ull, 17946127548793725769ull, 2664430641834086164ull}} }; static const UINT256 multipliers2_bid64[] = { {{9438227768328448678ull, 4145630637659340425ull, 17596454752367787604ull, 34ull}}, {{429711462947345740ull, 8291261275318680851ull, 16746165431026023592ull, 69ull}}, {{859422925894691480ull, 16582522550637361702ull, 15045586788342495568ull, 139ull}}, {{1718845851789382959ull, 14718301027565171788ull, 11644429502975439521ull, 279ull}}, {{3437691703578765918ull, 10989857981420791960ull, 4842114932241327427ull, 559ull}}, {{6875383407157531835ull, 3532971889132032304ull, 9684229864482654855ull, 1118ull}}, {{13750766814315063670ull, 7065943778264064608ull, 921715655255758094ull, 2237ull}}, {{9054789554920575724ull, 14131887556528129217ull, 1843431310511516188ull, 4474ull}}, {{18109579109841151448ull, 9817031039346706818ull, 3686862621023032377ull, 8948ull}}, {{17772414145972751280ull, 1187318004983862021ull, 7373725242046064755ull, 17896ull}}, {{17098084218235950944ull, 2374636009967724043ull, 14747450484092129510ull, 35792ull}}, {{15749424362762350272ull, 4749272019935448087ull, 11048156894474707404ull, 71585ull}}, {{13052104651815148928ull, 9498544039870896175ull, 3649569715239863192ull, 143171ull}}, {{7657465229920746239ull, 550344006032240735ull, 7299139430479726385ull, 286342ull}}, {{15314930459841492478ull, 1100688012064481470ull, 14598278860959452770ull, 572684ull}}, {{12183116845973433340ull, 2201376024128962941ull, 10749813648209353924ull, 1145369ull}}, {{5919489618237315063ull, 4402752048257925883ull, 3052883222709156232ull, 2290739ull}}, {{11838979236474630126ull, 8805504096515851766ull, 6105766445418312464ull, 4581478ull}}, {{5231214399239708635ull, 17611008193031703533ull, 12211532890836624928ull, 9162956ull}}, {{10462428798479417270ull, 16775272312353855450ull, 5976321707963698241ull, 18325913ull}}, {{2478113523249282924ull, 15103800550998159285ull, 11952643415927396483ull, 36651826ull}}, {{4956227046498565847ull, 11760857028286766954ull, 5458542758145241351ull, 73303653ull}}, {{9912454092997131693ull, 5074969982863982292ull, 10917085516290482703ull, 146607306ull}}, {{1378164112284711770ull, 10149939965727964585ull, 3387426958871413790ull, 293214613ull}}, {{2756328224569423540ull, 1853135857746377554ull, 6774853917742827581ull, 586429226ull}}, {{5512656449138847079ull, 3706271715492755108ull, 13549707835485655162ull, 1172858452ull}}, {{11025312898277694158ull, 7412543430985510216ull, 8652671597261758708ull, 2345716905ull}}, {{3603881722845836699ull, 14825086861971020433ull, 17305343194523517416ull, 4691433810ull}}, {{7207763445691673397ull, 11203429650232489250ull, 16163942315337483217ull, 9382867621ull}}, {{14415526891383346794ull, 3960115226755426884ull, 13881140556965414819ull, 18765735243ull}}, {{10384309709057141972ull, 7920230453510853769ull, 9315537040221278022ull, 37531470487ull}}, {{2321875344404732328ull, 15840460907021707539ull, 184330006733004428ull, 75062940975ull}}, {{4643750688809464655ull, 13234177740333863462ull, 368660013466008857ull, 150125881950ull}}, {{9287501377618929309ull, 8021611406958175308ull, 737320026932017715ull, 300251763900ull}}, {{128258681528307001ull, 16043222813916350617ull, 1474640053864035430ull, 600503527800ull}}, {{256517363056614002ull, 13639701554123149618ull, 2949280107728070861ull, 1201007055600ull}}, {{513034726113228003ull, 8832659034536747620ull, 5898560215456141723ull, 2402014111200ull}}, {{1026069452226456005ull, 17665318069073495240ull, 11797120430912283446ull, 4804028222400ull}}, {{2052138904452912009ull, 16883892064437438864ull, 5147496788115015277ull, 9608056444801ull}}, {{4104277808905824018ull, 15321040055165326112ull, 10294993576230030555ull, 19216112889602ull}}, {{8208555617811648035ull, 12195336036621100608ull, 2143243078750509495ull, 38432225779205ull}}, {{16417111235623296070ull, 5943927999532649600ull, 4286486157501018991ull, 76864451558410ull}}, {{14387478397537040523ull, 11887855999065299201ull, 8572972315002037982ull, 153728903116820ull}}, {{10328212721364529429ull, 5328967924421046787ull, 17145944630004075965ull, 307457806233640ull}}, {{2209681369019507241ull, 10657935848842093575ull, 15845145186298600314ull, 614915612467281ull}}, {{4419362738039014482ull, 2869127623974635534ull, 13243546298887649013ull, 1229831224934563ull}}, {{8838725476078028963ull, 5738255247949271068ull, 8040348524065746410ull, 2459662449869127ull}}, {{17677450952156057925ull, 11476510495898542136ull, 16080697048131492820ull, 4919324899738254ull}}, {{16908157830602564233ull, 4506276918087532657ull, 13714650022553434025ull, 9838649799476509ull}}, {{15369571587495576850ull, 9012553836175065315ull, 8982555971397316434ull, 19677299598953019ull}}, {{12292399101281602084ull, 18025107672350130631ull, 17965111942794632868ull, 39354599197906038ull}}, {{6138054128853652551ull, 17603471270990709647ull, 17483479811879714121ull, 78709198395812077ull}}, {{12276108257707305101ull, 16760198468271867678ull, 16520215550049876627ull, 157418396791624155ull}}, {{6105472441705058585ull, 15073652862834183741ull, 14593687026390201639ull, 314836793583248311ull}}, {{12210944883410117170ull, 11700561651958815866ull, 10740629979070851663ull, 629673587166496623ull}}, {{5975145693110682724ull, 4954379230208080117ull, 3034515884432151711ull, 1259347174332993247ull}}, {{1195029138622136545ull, 12058922290267346993ull, 7985600806370250988ull, 251869434866598649ull}}, {{2390058277244273090ull, 5671100506825142370ull, 15971201612740501977ull, 503738869733197298ull}}, {{4780116554488546179ull, 11342201013650284740ull, 13495659151771452338ull, 1007477739466394597ull}}, {{956023310897709236ull, 2268440202730056948ull, 10077829459838111114ull, 201495547893278919ull}}, {{1912046621795418472ull, 4536880405460113896ull, 1708914845966670612ull, 402991095786557839ull}}, {{3824093243590836943ull, 9073760810920227792ull, 3417829691933341224ull, 805982191573115678ull}}, {{15522213907685808682ull, 9193449791667866204ull, 11751612382612399214ull, 161196438314623135ull}}, {{12597683741662065747ull, 18386899583335732409ull, 5056480691515246812ull, 322392876629246271ull}}, {{6748623409614579878ull, 18327055092961913203ull, 10112961383030493625ull, 644785753258492542ull}}, {{1349724681922915976ull, 11044108648076203287ull, 9401289906089919371ull, 128957150651698508ull}}, {{2699449363845831952ull, 3641473222442854958ull, 355835738470287127ull, 257914301303397017ull}}, {{5398898727691663903ull, 7282946444885709916ull, 711671476940574254ull, 515828602606794034ull}}, {{10797797455383327805ull, 14565892889771419832ull, 1423342953881148508ull, 1031657205213588068ull}}, {{13227605935302396531ull, 6602527392696194289ull, 11352715035001960671ull, 206331441042717613ull}}, {{8008467796895241445ull, 13205054785392388579ull, 4258685996294369726ull, 412662882085435227ull}}, {{16016935593790482890ull, 7963365497075225542ull, 8517371992588739453ull, 825325764170870454ull}}, {{17960782377725737871ull, 8971370728898865754ull, 16460869657485389183ull, 165065152834174090ull}}, {{17474820681741924126ull, 17942741457797731509ull, 14474995241261226750ull, 330130305668348181ull}}, {{16502897289774296635ull, 17438738841885911403ull, 10503246408812901885ull, 660260611336696363ull}}, {{6989928272696769651ull, 14555794212602913250ull, 13168695725988311346ull, 132052122267339272ull}}, {{13979856545393539301ull, 10664844351496274884ull, 7890647378267071077ull, 264104244534678545ull}}, {{9512969017077526985ull, 2882944629282998153ull, 15781294756534142155ull, 528208489069357090ull}}, {{579193960445502354ull, 5765889258565996307ull, 13115845439358732694ull, 1056416978138714181ull}}, {{7494536421572921118ull, 1153177851713199261ull, 6312517902613656862ull, 211283395627742836ull}}, {{14989072843145842235ull, 2306355703426398522ull, 12625035805227313724ull, 422566791255485672ull}}, {{11531401612582132853ull, 4612711406852797045ull, 6803327536745075832ull, 845133582510971345ull}}, {{9684977952000247217ull, 8301239910854380055ull, 1360665507349015166ull, 169026716502194269ull}}, {{923211830290942818ull, 16602479821708760111ull, 2721331014698030332ull, 338053433004388538ull}}, {{1846423660581885636ull, 14758215569707968606ull, 5442662029396060665ull, 676106866008777076ull}}, {{7747982361600197774ull, 6640991928683504044ull, 4777881220621122456ull, 135221373201755415ull}}, {{15495964723200395548ull, 13281983857367008088ull, 9555762441242244912ull, 270442746403510830ull}}, {{12545185372691239479ull, 8117223641024464561ull, 664780808774938209ull, 540885492807021661ull}}, {{6643626671672927341ull, 16234447282048929123ull, 1329561617549876418ull, 1081770985614043322ull}}, {{12396771778560316438ull, 3246889456409785824ull, 7644609952993795930ull, 216354197122808664ull}}, {{6346799483411081260ull, 6493778912819571649ull, 15289219905987591860ull, 432708394245617328ull}}, {{12693598966822162519ull, 12987557825639143298ull, 12131695738265632104ull, 865416788491234657ull}}, {{17296115052332073797ull, 6286860379869738982ull, 9805036777136947067ull, 173083357698246931ull}}, {{16145486030954595977ull, 12573720759739477965ull, 1163329480564342518ull, 346166715396493863ull}}, {{13844227988199640338ull, 6700697445769404315ull, 2326658961128685037ull, 692333430792987726ull}}, {{13836892041865659038ull, 12408185933379611832ull, 4154680606967647330ull, 138466686158597545ull}}, {{9227040010021766459ull, 6369627793049672049ull, 8309361213935294661ull, 276933372317195090ull}}, {{7335946333981301ull, 12739255586099344099ull, 16618722427870589322ull, 553866744634390180ull}}, {{14671892667962602ull, 7031767098489136582ull, 14790700782031627029ull, 1107733489268780361ull}}, {{7381632008017413167ull, 1406353419697827316ull, 6647488971148235729ull, 221546697853756072ull}}, {{14763264016034826334ull, 2812706839395654632ull, 13294977942296471458ull, 443093395707512144ull}}, {{11079783958360101051ull, 5625413678791309265ull, 8143211810883391300ull, 886186791415024289ull}}, {{16973352050639661503ull, 15882477994725903145ull, 16386037621144319552ull, 177237358283004857ull}}, {{15499960027569771390ull, 13318211915742254675ull, 14325331168579087489ull, 354474716566009715ull}}, {{12553175981429991164ull, 8189679757774957735ull, 10203918263448623363ull, 708949433132019431ull}}, {{17268030455253639526ull, 16395331210522632839ull, 5730132467431634995ull, 141789886626403886ull}}, {{16089316836797727436ull, 14343918347335714063ull, 11460264934863269991ull, 283579773252807772ull}}, {{13731889599885903255ull, 10241092620961876511ull, 4473785796016988367ull, 567159546505615545ull}}, {{9017035126062254893ull, 2035441168214201407ull, 8947571592033976735ull, 1134319093011231090ull}}, {{9182104654696271625ull, 407088233642840281ull, 1789514318406795347ull, 226863818602246218ull}}, {{18364209309392543250ull, 814176467285680562ull, 3579028636813590694ull, 453727637204492436ull}}, {{18281674545075534884ull, 1628352934571361125ull, 7158057273627181388ull, 907455274408984872ull}}, {{3656334909015106977ull, 325670586914272225ull, 8810309084209256924ull, 181491054881796974ull}}, {{7312669818030213954ull, 651341173828544450ull, 17620618168418513848ull, 362982109763593948ull}}, {{14625339636060427907ull, 1302682347657088900ull, 16794492263127476080ull, 725964219527187897ull}}, {{10303765556695906228ull, 7639234099015238426ull, 10737596082109315862ull, 145192843905437579ull}}, {{2160787039682260840ull, 15278468198030476853ull, 3028448090509080108ull, 290385687810875159ull}}, {{4321574079364521680ull, 12110192322351402090ull, 6056896181018160217ull, 580771375621750318ull}}, {{8643148158729043359ull, 5773640570993252564ull, 12113792362036320435ull, 1161542751243500636ull}}, {{1728629631745808672ull, 4844076928940560836ull, 6112107287149174410ull, 232308550248700127ull}}, {{3457259263491617344ull, 9688153857881121672ull, 12224214574298348820ull, 464617100497400254ull}}, {{6914518526983234687ull, 929563642052691728ull, 6001685074887146025ull, 929234200994800509ull}}, {{8761601334880467584ull, 14943307987378179638ull, 15957732273945070497ull, 185846840198960101ull}}, {{17523202669760935168ull, 11439871901046807660ull, 13468720474180589379ull, 371693680397920203ull}}, {{16599661265812318719ull, 4432999728384063705ull, 8490696874651627143ull, 743387360795840407ull}}, {{3319932253162463744ull, 886599945676812741ull, 9076837004414146075ull, 148677472159168081ull}}, {{6639864506324927488ull, 1773199891353625482ull, 18153674008828292150ull, 297354944318336162ull}}, {{13279729012649854976ull, 3546399782707250964ull, 17860603943947032684ull, 594709888636672325ull}}, {{8112713951590158335ull, 7092799565414501929ull, 17274463814184513752ull, 1189419777273344651ull}}, {{9001240419801852314ull, 12486606357308631355ull, 7144241577578813073ull, 237883955454668930ull}}, {{18002480839603704627ull, 6526468640907711094ull, 14288483155157626147ull, 475767910909337860ull}}, {{17558217605497857637ull, 13052937281815422189ull, 10130222236605700678ull, 951535821818675721ull}}, {{14579689965325302497ull, 17367982715330725730ull, 5715393262063050458ull, 190307164363735144ull}}, {{10712635856941053378ull, 16289221356951899845ull, 11430786524126100917ull, 380614328727470288ull}}, {{2978527640172555140ull, 14131698640194248075ull, 4414828974542650219ull, 761228657454940577ull}}, {{4285054342776421352ull, 6515688542780759938ull, 8261663424392350690ull, 152245731490988115ull}}, {{8570108685552842703ull, 13031377085561519876ull, 16523326848784701380ull, 304491462981976230ull}}, {{17140217371105685405ull, 7616010097413488136ull, 14599909623859851145ull, 608982925963952461ull}}, {{15833690668501819194ull, 15232020194826976273ull, 10753075174010150674ull, 1217965851927904923ull}}, {{3166738133700363839ull, 10425101668449215901ull, 13218661479027761104ull, 243593170385580984ull}}, {{6333476267400727678ull, 2403459263188880186ull, 7990578884345970593ull, 487186340771161969ull}}, {{12666952534801455355ull, 4806918526377760372ull, 15981157768691941186ull, 974372681542323938ull}}, {{6222739321702201395ull, 15718778964243193367ull, 14264277997964119206ull, 194874536308464787ull}}, {{12445478643404402789ull, 12990813854776835118ull, 10081811922218686797ull, 389749072616929575ull}}, {{6444213213099253961ull, 7534883635844118621ull, 1716879770727821979ull, 779498145233859151ull}}, {{4978191457361761116ull, 1506976727168823724ull, 4032724768887474719ull, 155899629046771830ull}}, {{9956382914723522231ull, 3013953454337647448ull, 8065449537774949438ull, 311799258093543660ull}}, {{1466021755737492846ull, 6027906908675294897ull, 16130899075549898876ull, 623598516187087320ull}}, {{2932043511474985691ull, 12055813817350589794ull, 13815054077390246136ull, 1247197032374174641ull}}, {{4275757517036907462ull, 9789860392953938605ull, 6452359630219959550ull, 249439406474834928ull}}, {{8551515034073814923ull, 1132976712198325594ull, 12904719260439919101ull, 498878812949669856ull}}, {{17103030068147629846ull, 2265953424396651188ull, 7362694447170286586ull, 997757625899339713ull}}, {{10799303643113346616ull, 15210585943846971530ull, 12540585333659788286ull, 199551525179867942ull}}, {{3151863212517141615ull, 11974427813984391445ull, 6634426593610024957ull, 399103050359735885ull}}, {{6303726425034283230ull, 5502111554259231274ull, 13268853187220049915ull, 798206100719471770ull}}, {{16018140543974497939ull, 1100422310851846254ull, 2653770637444009983ull, 159641220143894354ull}}, {{13589537014239444262ull, 2200844621703692509ull, 5307541274888019966ull, 319282440287788708ull}}, {{8732329954769336908ull, 4401689243407385019ull, 10615082549776039932ull, 638564880575577416ull}}, {{17464659909538673815ull, 8803378486814770038ull, 2783421025842528248ull, 1277129761151154833ull}}, {{18250327240875376056ull, 5450024512104864330ull, 11624730649394236619ull, 255425952230230966ull}}, {{18053910408041200496ull, 10900049024209728661ull, 4802717225078921622ull, 510851904460461933ull}}, {{17661076742372849375ull, 3353353974709905707ull, 9605434450157843245ull, 1021703808920923866ull}}, {{14600261792700300845ull, 4360019609683891464ull, 5610435704773478972ull, 204340761784184773ull}}, {{10753779511691050074ull, 8720039219367782929ull, 11220871409546957944ull, 408681523568369546ull}}, {{3060814949672548531ull, 17440078438735565859ull, 3994998745384364272ull, 817363047136739093ull}}, {{15369558248902150999ull, 3488015687747113171ull, 11867046193302603824ull, 163472609427347818ull}}, {{12292372424094750382ull, 6976031375494226343ull, 5287348312895656032ull, 326945218854695637ull}}, {{6138000774479949148ull, 13952062750988452687ull, 10574696625791312064ull, 653890437709391274ull}}, {{1227600154895989830ull, 13858458994423421507ull, 16872334584125903705ull, 130778087541878254ull}}, {{2455200309791979659ull, 9270173915137291398ull, 15297925094542255795ull, 261556175083756509ull}}, {{4910400619583959318ull, 93603756565031180ull, 12149106115374959975ull, 523112350167513019ull}}, {{9820801239167918636ull, 187207513130062360ull, 5851468157040368334ull, 1046224700335026039ull}}, {{13032206692059314697ull, 11105487946851743441ull, 15927688890375714959ull, 209244940067005207ull}}, {{7617669310409077778ull, 3764231819993935267ull, 13408633707041878303ull, 418489880134010415ull}}, {{15235338620818155555ull, 7528463639987870534ull, 8370523340374204990ull, 836979760268020831ull}}, {{3047067724163631111ull, 5195041542739484430ull, 5363453482816751321ull, 167395952053604166ull}}, {{6094135448327262222ull, 10390083085478968860ull, 10726906965633502642ull, 334791904107208332ull}}, {{12188270896654524444ull, 2333422097248386104ull, 3007069857557453669ull, 669583808214416665ull}}, {{13505700623556635859ull, 15224079678417318513ull, 601413971511490733ull, 133916761642883333ull}}, {{8564657173403720101ull, 12001415283125085411ull, 1202827943022981467ull, 267833523285766666ull}}, {{17129314346807440202ull, 5556086492540619206ull, 2405655886045962935ull, 535667046571533332ull}}, {{15811884619905328788ull, 11112172985081238413ull, 4811311772091925870ull, 1071334093143066664ull}}, {{10541074553464886404ull, 16979829855983888975ull, 15719657613386026466ull, 214266818628613332ull}}, {{2635405033220221192ull, 15512915638258226335ull, 12992571153062501317ull, 428533637257226665ull}}, {{5270810066440442384ull, 12579087202806901054ull, 7538398232415451019ull, 857067274514453331ull}}, {{15811557272255729770ull, 2515817440561380210ull, 5197028461225000527ull, 171413454902890666ull}}, {{13176370470801907923ull, 5031634881122760421ull, 10394056922450001054ull, 342826909805781332ull}}, {{7905996867894264230ull, 10063269762245520843ull, 2341369771190450492ull, 685653819611562665ull}}, {{1581199373578852846ull, 9391351581932924815ull, 468273954238090098ull, 137130763922312533ull}}, {{3162398747157705692ull, 335959090156298014ull, 936547908476180197ull, 274261527844625066ull}}, {{6324797494315411384ull, 671918180312596028ull, 1873095816952360394ull, 548523055689250132ull}}, {{12649594988630822768ull, 1343836360625192056ull, 3746191633904720788ull, 1097046111378500264ull}}, {{13597965441951895524ull, 7647464901608859057ull, 15506633585748585450ull, 219409222275700052ull}}, {{8749186810194239431ull, 15294929803217718115ull, 12566523097787619284ull, 438818444551400105ull}}, {{17498373620388478861ull, 12143115532725884614ull, 6686302121865686953ull, 877636889102800211ull}}, {{14567721168303426742ull, 17186018365512818215ull, 5026609239115047713ull, 175527377820560042ull}}, {{10688698262897301868ull, 15925292657316084815ull, 10053218478230095427ull, 351054755641120084ull}}, {{2930652452085052119ull, 13403841240922618015ull, 1659692882750639239ull, 702109511282240169ull}}, {{11654176934642741394ull, 13748814692410254572ull, 15089333835517769140ull, 140421902256448033ull}}, {{4861609795575931171ull, 9050885311110957529ull, 11731923597325986665ull, 280843804512896067ull}}, {{9723219591151862342ull, 18101770622221915058ull, 5017103120942421714ull, 561687609025792135ull}}, {{999695108594173067ull, 17756797170734278501ull, 10034206241884843429ull, 1123375218051584270ull}}, {{199939021718834614ull, 18308754693114496993ull, 2006841248376968685ull, 224675043610316854ull}}, {{399878043437669227ull, 18170765312519442370ull, 4013682496753937371ull, 449350087220633708ull}}, {{799756086875338454ull, 17894786551329333124ull, 8027364993507874743ull, 898700174441267416ull}}, {{11227997661600798661ull, 18336352569233507917ull, 5294821813443485271ull, 179740034888253483ull}}, {{4009251249492045705ull, 18225961064757464219ull, 10589643626886970543ull, 359480069776506966ull}}, {{8018502498984091410ull, 18005178055805376822ull, 2732543180064389471ull, 718960139553013933ull}}, {{5293049314538728606ull, 18358430870128716657ull, 11614555080238608863ull, 143792027910602786ull}}, {{10586098629077457211ull, 18270117666547881698ull, 4782366086767666111ull, 287584055821205573ull}}, {{2725453184445362805ull, 18093491259386211781ull, 9564732173535332223ull, 575168111642411146ull}}, {{5450906368890725609ull, 17740238445062871946ull, 682720273361112831ull, 1150336223284822293ull}}, {{1090181273778145122ull, 18305442947980215682ull, 11204590498897953535ull, 230067244656964458ull}}, {{2180362547556290244ull, 18164141822250879748ull, 3962436924086355455ull, 460134489313928917ull}}, {{4360725095112580487ull, 17881539570792207880ull, 7924873848172710911ull, 920268978627857834ull}}, {{872145019022516098ull, 3576307914158441576ull, 16342370028602183475ull, 184053795725571566ull}}, {{1744290038045032195ull, 7152615828316883152ull, 14237995983494815334ull, 368107591451143133ull}}, {{3488580076090064390ull, 14305231656633766304ull, 10029247893280079052ull, 736215182902286267ull}}, {{11765762459443743848ull, 17618441590294394553ull, 9384547208139836456ull, 147243036580457253ull}}, {{5084780845177936079ull, 16790139106879237491ull, 322350342570121297ull, 294486073160914507ull}}, {{10169561690355872158ull, 15133534140048923366ull, 644700685140242595ull, 588972146321829014ull}}, {{1892379307002192700ull, 11820324206388295117ull, 1289401370280485191ull, 1177944292643658028ull}}, {{4067824676142348864ull, 17121460100245300316ull, 11325926718281828007ull, 235588858528731605ull}}, {{8135649352284697727ull, 15796176126781049016ull, 4205109362854104399ull, 471177717057463211ull}}, {{16271298704569395453ull, 13145608179852546416ull, 8410218725708208799ull, 942355434114926422ull}}, {{10632957370397699737ull, 6318470450712419606ull, 9060741374625462406ull, 188471086822985284ull}}, {{2819170667085847858ull, 12636940901424839213ull, 18121482749250924812ull, 376942173645970568ull}}, {{5638341334171695716ull, 6827137729140126810ull, 17796221424792298009ull, 753884347291941137ull}}, {{4817017081576249467ull, 5054776360569935685ull, 10937941914442280248ull, 150776869458388227ull}}, {{9634034163152498933ull, 10109552721139871370ull, 3429139755175008880ull, 301553738916776455ull}}, {{821324252595446250ull, 1772361368570191125ull, 6858279510350017761ull, 603107477833552910ull}}, {{1642648505190892499ull, 3544722737140382250ull, 13716559020700035522ull, 1206214955667105820ull}}, {{7707227330521999147ull, 8087642176911897096ull, 2743311804140007104ull, 241242991133421164ull}}, {{15414454661043998293ull, 16175284353823794192ull, 5486623608280014208ull, 482485982266842328ull}}, {{12382165248378444969ull, 13903824633938036769ull, 10973247216560028417ull, 964971964533684656ull}}, {{9855130679159509641ull, 13848811371013338323ull, 5883998258053916006ull, 192994392906736931ull}}, {{1263517284609467665ull, 9250878668317125031ull, 11767996516107832013ull, 385988785813473862ull}}, {{2527034569218935329ull, 55013262924698446ull, 5089248958506112411ull, 771977571626947725ull}}, {{7884104543327607713ull, 3700351467326850012ull, 1017849791701222482ull, 154395514325389545ull}}, {{15768209086655215425ull, 7400702934653700024ull, 2035699583402444964ull, 308791028650779090ull}}, {{13089674099600879233ull, 14801405869307400049ull, 4071399166804889928ull, 617582057301558180ull}}, {{7732604125492206849ull, 11156067664905248483ull, 8142798333609779857ull, 1235164114603116360ull}}, {{1546520825098441370ull, 9609911162464870343ull, 1628559666721955971ull, 247032822920623272ull}}, {{3093041650196882740ull, 773078251220189070ull, 3257119333443911943ull, 494065645841246544ull}}, {{6186083300393765479ull, 1546156502440378140ull, 6514238666887823886ull, 988131291682493088ull}}, {{15994611919046394389ull, 15066626559455716920ull, 12370894177603295746ull, 197626258336498617ull}}, {{13542479764383237162ull, 11686509045201882225ull, 6295044281497039877ull, 395252516672997235ull}}, {{8638215455056922707ull, 4926274016694212835ull, 12590088562994079755ull, 790505033345994470ull}}, {{1727643091011384542ull, 985254803338842567ull, 2518017712598815951ull, 158101006669198894ull}}, {{3455286182022769083ull, 1970509606677685134ull, 5036035425197631902ull, 316202013338397788ull}}, {{6910572364045538166ull, 3941019213355370268ull, 10072070850395263804ull, 632404026676795576ull}}, {{13821144728091076331ull, 7882038426710740536ull, 1697397627080975992ull, 1264808053353591153ull}}, {{6453577760360125590ull, 1576407685342148107ull, 11407525969641926168ull, 252961610670718230ull}}, {{12907155520720251179ull, 3152815370684296214ull, 4368307865574300720ull, 505923221341436461ull}}, {{7367566967730950741ull, 6305630741368592429ull, 8736615731148601440ull, 1011846442682872922ull}}, {{5162862208288100472ull, 8639823777757539132ull, 9126020775713540934ull, 202369288536574584ull}}, {{10325724416576200943ull, 17279647555515078264ull, 18252041551427081868ull, 404738577073149168ull}}, {{2204704759442850270ull, 16112551037320604913ull, 18057339029144612121ull, 809477154146298337ull}}, {{4130289766630480378ull, 14290556651689851952ull, 10990165435312743070ull, 161895430829259667ull}}, {{8260579533260960755ull, 10134369229670152288ull, 3533586796915934525ull, 323790861658519335ull}}, {{16521159066521921509ull, 1821994385630752960ull, 7067173593831869051ull, 647581723317038670ull}}, {{6993580628046294625ull, 4053747691868060915ull, 1413434718766373810ull, 129516344663407734ull}}, {{13987161256092589250ull, 8107495383736121830ull, 2826869437532747620ull, 259032689326815468ull}}, {{9527578438475626884ull, 16214990767472243661ull, 5653738875065495240ull, 518065378653630936ull}}, {{608412803241702152ull, 13983237461234935707ull, 11307477750130990481ull, 1036130757307261872ull}}, {{121682560648340431ull, 13864693936472718111ull, 9640193179510018742ull, 207226151461452374ull}}, {{243365121296680861ull, 9282643799235884606ull, 833642285310485869ull, 414452302922904749ull}}, {{486730242593361721ull, 118543524762217596ull, 1667284570620971739ull, 828904605845809498ull}}, {{11165392492744403314ull, 7402406334436264165ull, 11401503358349925317ull, 165780921169161899ull}}, {{3884040911779255012ull, 14804812668872528331ull, 4356262642990299018ull, 331561842338323799ull}}, {{7768081823558510024ull, 11162881264035505046ull, 8712525285980598037ull, 663123684676647598ull}}, {{5242965179453612328ull, 2232576252807101009ull, 12810551501421850577ull, 132624736935329519ull}}, {{10485930358907224656ull, 4465152505614202018ull, 7174358929134149538ull, 265249473870659039ull}}, {{2525116644104897696ull, 8930305011228404037ull, 14348717858268299076ull, 530498947741318078ull}}, {{5050233288209795391ull, 17860610022456808074ull, 10250691642827046536ull, 1060997895482636157ull}}, {{8388744287125779725ull, 14640168448717092584ull, 9428835958049229953ull, 212199579096527231ull}}, {{16777488574251559450ull, 10833592823724633552ull, 410927842388908291ull, 424399158193054463ull}}, {{15108233074793567283ull, 3220441573739715489ull, 821855684777816583ull, 848798316386108926ull}}, {{14089693059184444427ull, 15401483573715584390ull, 3853719951697473639ull, 169759663277221785ull}}, {{9732642044659337237ull, 12356223073721617165ull, 7707439903394947279ull, 339519326554443570ull}}, {{1018540015609122857ull, 6265702073733682715ull, 15414879806789894559ull, 679038653108887140ull}}, {{14961103262089465865ull, 16010535673714377835ull, 3082975961357978911ull, 135807730621777428ull}}, {{11475462450469380113ull, 13574327273719204055ull, 6165951922715957823ull, 271615461243554856ull}}, {{4504180827229208609ull, 8701910473728856495ull, 12331903845431915647ull, 543230922487109712ull}}, {{9008361654458417217ull, 17403820947457712990ull, 6217063617154279678ull, 1086461844974219425ull}}, {{12869718775117414413ull, 14548810633717273567ull, 1243412723430855935ull, 217292368994843885ull}}, {{7292693476525277210ull, 10650877193724995519ull, 2486825446861711871ull, 434584737989687770ull}}, {{14585386953050554420ull, 2855010313740439422ull, 4973650893723423743ull, 869169475979375540ull}}, {{2917077390610110884ull, 11639048506973818854ull, 994730178744684748ull, 173833895195875108ull}}, {{5834154781220221768ull, 4831352940238086092ull, 1989460357489369497ull, 347667790391750216ull}}, {{11668309562440443536ull, 9662705880476172184ull, 3978920714978738994ull, 695335580783500432ull}}, {{2333661912488088708ull, 5621889990837144760ull, 8174481772479568445ull, 139067116156700086ull}}, {{4667323824976177415ull, 11243779981674289520ull, 16348963544959136890ull, 278134232313400172ull}}, {{9334647649952354829ull, 4040815889639027424ull, 14251183016208722165ull, 556268464626800345ull}}, {{222551226195158041ull, 8081631779278054849ull, 10055621958707892714ull, 1112536929253600691ull}}, {{14801905504206672901ull, 1616326355855610969ull, 5700473206483488866ull, 222507385850720138ull}}, {{11157066934703794186ull, 3232652711711221939ull, 11400946412966977732ull, 445014771701440276ull}}, {{3867389795698036756ull, 6465305423422443879ull, 4355148752224403848ull, 890029543402880553ull}}, {{773477959139607352ull, 4982409899426399099ull, 11939076194670611739ull, 178005908680576110ull}}, {{1546955918279214703ull, 9964819798852798198ull, 5431408315631671862ull, 356011817361152221ull}}, {{3093911836558429405ull, 1482895523996044780ull, 10862816631263343725ull, 712023634722304442ull}}, {{7997479996795506528ull, 7675276734283029602ull, 9551260955736489391ull, 142404726944460888ull}}, {{15994959993591013055ull, 15350553468566059204ull, 655777837763427166ull, 284809453888921777ull}}, {{13543175913472474494ull, 12254362863422566793ull, 1311555675526854333ull, 569618907777843554ull}}, {{8639607753235397371ull, 6061981653135581971ull, 2623111351053708667ull, 1139237815555687108ull}}, {{5417270365388989798ull, 1212396330627116394ull, 11592668714436472703ull, 227847563111137421ull}}, {{10834540730777979595ull, 2424792661254232788ull, 4738593355163393790ull, 455695126222274843ull}}, {{3222337387846407574ull, 4849585322508465577ull, 9477186710326787580ull, 911390252444549686ull}}, {{11712513921795012485ull, 4659265879243603438ull, 5584786156807267839ull, 182278050488909937ull}}, {{4978283769880473353ull, 9318531758487206877ull, 11169572313614535678ull, 364556100977819874ull}}, {{9956567539760946705ull, 190319443264862138ull, 3892400553519519741ull, 729112201955639749ull}}, {{13059359952177920311ull, 38063888652972427ull, 15535875369671545241ull, 145822440391127949ull}}, {{7671975830646289006ull, 76127777305944855ull, 12625006665633538866ull, 291644880782255899ull}}, {{15343951661292578011ull, 152255554611889710ull, 6803269257557526116ull, 583289761564511799ull}}, {{12241159248875604405ull, 304511109223779421ull, 13606538515115052232ull, 1166579523129023598ull}}, {{6137580664517031205ull, 60902221844755884ull, 13789354147248741416ull, 233315904625804719ull}}, {{12275161329034062409ull, 121804443689511768ull, 9131964220787931216ull, 466631809251609439ull}}, {{6103578584358573201ull, 243608887379023537ull, 18263928441575862432ull, 933263618503218878ull}}, {{8599413346355535287ull, 48721777475804707ull, 14720832132540903456ull, 186652723700643775ull}}, {{17198826692711070574ull, 97443554951609414ull, 10994920191372255296ull, 373305447401287551ull}}, {{15950909311712589531ull, 194887109903218829ull, 3543096309034958976ull, 746610894802575103ull}}, {{14258228306568248876ull, 14796372680948285058ull, 11776665706032722764ull, 149322178960515020ull}}, {{10069712539426946136ull, 11146001288187018501ull, 5106587338355893913ull, 298644357921030041ull}}, {{1692681005144340655ull, 3845258502664485387ull, 10213174676711787827ull, 597288715842060082ull}}, {{3385362010288681309ull, 7690517005328970774ull, 1979605279714024038ull, 1194577431684120165ull}}, {{8055770031541556909ull, 12606149845291525124ull, 395921055942804807ull, 238915486336824033ull}}, {{16111540063083113817ull, 6765555616873498632ull, 791842111885609615ull, 477830972673648066ull}}, {{13776336052456676017ull, 13531111233746997265ull, 1583684223771219230ull, 955661945347296132ull}}, {{10133964839975155850ull, 10084919876233220099ull, 7695434474238064492ull, 191132389069459226ull}}, {{1821185606240760084ull, 1723095678756888583ull, 15390868948476128985ull, 382264778138918452ull}}, {{3642371212481520168ull, 3446191357513777166ull, 12334993823242706354ull, 764529556277836905ull}}, {{728474242496304034ull, 15446633530470396726ull, 2466998764648541270ull, 152905911255567381ull}}, {{1456948484992608067ull, 12446522987231241836ull, 4933997529297082541ull, 305811822511134762ull}}, {{2913896969985216134ull, 6446301900752932056ull, 9867995058594165083ull, 611623645022269524ull}}, {{5827793939970432268ull, 12892603801505864112ull, 1289246043478778550ull, 1223247290044539049ull}}, {{4854907602735996777ull, 17335916019268814115ull, 15015244467663397002ull, 244649458008907809ull}}, {{9709815205471993554ull, 16225087964828076614ull, 11583744861617242389ull, 489298916017815619ull}}, {{972886337234435491ull, 14003431855946601613ull, 4720745649524933163ull, 978597832035631239ull}}, {{194577267446887099ull, 10179384000673140969ull, 15701544388872627925ull, 195719566407126247ull}}, {{389154534893774197ull, 1912023927636730322ull, 12956344704035704235ull, 391439132814252495ull}}, {{778309069787548393ull, 3824047855273460644ull, 7465945334361856854ull, 782878265628504991ull}}, {{14913057072925150972ull, 764809571054692128ull, 5182537881614281694ull, 156575653125700998ull}}, {{11379370072140750327ull, 1529619142109384257ull, 10365075763228563388ull, 313151306251401996ull}}, {{4311996070571949038ull, 3059238284218768515ull, 2283407452747575160ull, 626302612502803993ull}}, {{8623992141143898075ull, 6118476568437537030ull, 4566814905495150320ull, 1252605225005607986ull}}, {{5414147242970689939ull, 4913044128429417729ull, 4602711795840940387ull, 250521045001121597ull}}, {{10828294485941379877ull, 9826088256858835458ull, 9205423591681880774ull, 501042090002243194ull}}, {{3209844898173208137ull, 1205432440008119301ull, 18410847183363761549ull, 1002084180004486388ull}}, {{11710015423860372597ull, 7619784117485444506ull, 14750215880898483279ull, 200416836000897277ull}}, {{4973286774011193578ull, 15239568234970889013ull, 11053687688087414942ull, 400833672001794555ull}}, {{9946573548022387156ull, 12032392396232226410ull, 3660631302465278269ull, 801667344003589111ull}}, {{1989314709604477432ull, 2406478479246445282ull, 4421475075234965977ull, 160333468800717822ull}}, {{3978629419208954863ull, 4812956958492890564ull, 8842950150469931954ull, 320666937601435644ull}}, {{7957258838417909725ull, 9625913916985781128ull, 17685900300939863908ull, 641333875202871288ull}}, {{16348847026651223238ull, 5614531598139066548ull, 14605226504413703751ull, 128266775040574257ull}}, {{14250949979592894860ull, 11229063196278133097ull, 10763708935117855886ull, 256533550081148515ull}}, {{10055155885476238103ull, 4011382318846714579ull, 3080673796526160157ull, 513067100162297031ull}}, {{1663567697242924590ull, 8022764637693429159ull, 6161347593052320314ull, 1026134200324594062ull}}, {{332713539448584918ull, 5293901742280596155ull, 8610967148094284709ull, 205226840064918812ull}}, {{665427078897169836ull, 10587803484561192310ull, 17221934296188569418ull, 410453680129837624ull}}, {{1330854157794339672ull, 2728862895412833004ull, 15997124518667587221ull, 820907360259675249ull}}, {{15023566090526509228ull, 545772579082566600ull, 17956820162701158737ull, 164181472051935049ull}}, {{11600388107343466839ull, 1091545158165133201ull, 17466896251692765858ull, 328362944103870099ull}}, {{4754032140977382061ull, 2183090316330266403ull, 16487048429675980100ull, 656725888207740199ull}}, {{8329504057679297059ull, 15194013322233694573ull, 18054804944902837312ull, 131345177641548039ull}}, {{16659008115358594117ull, 11941282570757837530ull, 17662865816096123009ull, 262690355283096079ull}}, {{14871272157007636618ull, 5435821067806123445ull, 16878987558482694403ull, 525380710566192159ull}}, {{11295800240305721620ull, 10871642135612246891ull, 15311231043255837190ull, 1050761421132384319ull}}, {{2259160048061144324ull, 16931723686090090671ull, 17819641467618808730ull, 210152284226476863ull}}, {{4518320096122288648ull, 15416703298470629726ull, 17192538861528065845ull, 420304568452953727ull}}, {{9036640192244577296ull, 12386662523231707836ull, 15938333649346580075ull, 840609136905907455ull}}, {{5496676853190825783ull, 2477332504646341567ull, 3187666729869316015ull, 168121827381181491ull}}, {{10993353706381651565ull, 4954665009292683134ull, 6375333459738632030ull, 336243654762362982ull}}, {{3539963339053751514ull, 9909330018585366269ull, 12750666919477264060ull, 672487309524725964ull}}, {{11776039112036481273ull, 16739261262684714546ull, 17307528642863094104ull, 134497461904945192ull}}, {{5105334150363410929ull, 15031778451659877477ull, 16168313212016636593ull, 268994923809890385ull}}, {{10210668300726821858ull, 11616812829610203338ull, 13889882350323721571ull, 537989847619780771ull}}, {{1974592527744092099ull, 4786881585510855061ull, 9333020626937891527ull, 1075979695239561543ull}}, {{4084267320290728743ull, 957376317102171012ull, 12934650569613309275ull, 215195939047912308ull}}, {{8168534640581457486ull, 1914752634204342024ull, 7422557065517066934ull, 430391878095824617ull}}, {{16337069281162914972ull, 3829505268408684048ull, 14845114131034133868ull, 860783756191649234ull}}, {{3267413856232582995ull, 8144598683165557456ull, 17726418085174468066ull, 172156751238329846ull}}, {{6534827712465165989ull, 16289197366331114912ull, 17006092096639384516ull, 344313502476659693ull}}, {{13069655424930331978ull, 14131650658952678208ull, 15565440119569217417ull, 688627004953319387ull}}, {{9992628714469887042ull, 17583725390758176934ull, 10491785653397664129ull, 137725400990663877ull}}, {{1538513355230222468ull, 16720706707806802253ull, 2536827233085776643ull, 275450801981327755ull}}, {{3077026710460444936ull, 14994669341904052890ull, 5073654466171553287ull, 550901603962655510ull}}, {{6154053420920889871ull, 11542594610098554164ull, 10147308932343106575ull, 1101803207925311020ull}}, {{15988205943151819267ull, 2308518922019710832ull, 2029461786468621315ull, 220360641585062204ull}}, {{13529667812594086918ull, 4617037844039421665ull, 4058923572937242630ull, 440721283170124408ull}}, {{8612591551478622220ull, 9234075688078843331ull, 8117847145874485260ull, 881442566340248816ull}}, {{9101215939779545091ull, 5536163952357678989ull, 5312918243916807375ull, 176288513268049763ull}}, {{18202431879559090181ull, 11072327904715357978ull, 10625836487833614750ull, 352577026536099526ull}}, {{17958119685408628746ull, 3697911735721164341ull, 2804928901957677885ull, 705154053072199053ull}}, {{18349019196049367042ull, 11807628791369963837ull, 11629032224617266546ull, 141030810614439810ull}}, {{18251294318389182468ull, 5168513509030376059ull, 4811320375524981477ull, 282061621228879621ull}}, {{18055844563068813320ull, 10337027018060752119ull, 9622640751049962954ull, 564123242457759242ull}}, {{17664945052428075024ull, 2227309962411952623ull, 798537428390374293ull, 1128246484915518485ull}}, {{7222337825227525328ull, 11513508436708121494ull, 159707485678074858ull, 225649296983103697ull}}, {{14444675650455050656ull, 4580272799706691372ull, 319414971356149717ull, 451298593966207394ull}}, {{10442607227200549696ull, 9160545599413382745ull, 638829942712299434ull, 902597187932414788ull}}, {{9467219074923930586ull, 9210806749366497195ull, 11195812432768190856ull, 180519437586482957ull}}, {{487694076138309555ull, 18421613498732994391ull, 3944880791826830096ull, 361038875172965915ull}}, {{975388152276619110ull, 18396482923756437166ull, 7889761583653660193ull, 722077750345931830ull}}, {{14952472889422965115ull, 14747343028977018402ull, 1577952316730732038ull, 144415550069186366ull}}, {{11458201705136378614ull, 11047941984244485189ull, 3155904633461464077ull, 288831100138372732ull}}, {{4469659336563205612ull, 3649139894779418763ull, 6311809266922928155ull, 577662200276745464ull}}, {{8939318673126411223ull, 7298279789558837526ull, 12623618533845856310ull, 1155324400553490928ull}}, {{16545258993592923538ull, 12527702402137498474ull, 13592770150994902231ull, 231064880110698185ull}}, {{14643773913476295459ull, 6608660730565445333ull, 8738796228280252847ull, 462129760221396371ull}}, {{10840803753243039301ull, 13217321461130890667ull, 17477592456560505694ull, 924259520442792742ull}}, {{13236207194874338830ull, 6332813106968088456ull, 10874216120795921785ull, 184851904088558548ull}}, {{8025670316039126044ull, 12665626213936176913ull, 3301688167882291954ull, 369703808177117097ull}}, {{16051340632078252088ull, 6884508354162802210ull, 6603376335764583909ull, 739407616354234194ull}}, {{14278314570641381388ull, 12444948115058291411ull, 16078070526120558074ull, 147881523270846838ull}}, {{10109885067573211159ull, 6443152156407031207ull, 13709396978531564533ull, 295763046541693677ull}}, {{1773026061436870701ull, 12886304312814062415ull, 8972049883353577450ull, 591526093083387355ull}}, {{3546052122873741401ull, 7325864551918573214ull, 17944099766707154901ull, 1183052186166774710ull}}, {{709210424574748281ull, 5154521725125624966ull, 3588819953341430980ull, 236610437233354942ull}}, {{1418420849149496561ull, 10309043450251249932ull, 7177639906682861960ull, 473220874466709884ull}}, {{2836841698298993121ull, 2171342826792948248ull, 14355279813365723921ull, 946441748933419768ull}}, {{7946065969143619271ull, 15191663824326230942ull, 13939102406898875753ull, 189288349786683953ull}}, {{15892131938287238541ull, 11936583574942910268ull, 9431460740088199891ull, 378576699573367907ull}}, {{13337519802864925466ull, 5426423076176268921ull, 416177406466848167ull, 757153399146735815ull}}, {{13735550404798716063ull, 8463982244719074430ull, 83235481293369633ull, 151430679829347163ull}}, {{9024356735887880510ull, 16927964489438148861ull, 166470962586739266ull, 302861359658694326ull}}, {{18048713471775761019ull, 15409184905166746106ull, 332941925173478533ull, 605722719317388652ull}}, {{17650682869841970422ull, 12371625736623940597ull, 665883850346957067ull, 1211445438634777304ull}}, {{14598183018194125054ull, 6163673962066698442ull, 14890572029037032706ull, 242289087726955460ull}}, {{10749621962678698492ull, 12327347924133396885ull, 11334399984364513796ull, 484578175453910921ull}}, {{3052499851647845368ull, 6207951774557242155ull, 4222055895019475977ull, 969156350907821843ull}}, {{610499970329569074ull, 1241590354911448431ull, 11912457623229626165ull, 193831270181564368ull}}, {{1220999940659138148ull, 2483180709822896862ull, 5378171172749700714ull, 387662540363128737ull}}, {{2441999881318276295ull, 4966361419645793724ull, 10756342345499401428ull, 775325080726257474ull}}, {{4177748791005565583ull, 8371969913412979391ull, 16908663728067521578ull, 155065016145251494ull}}, {{8355497582011131165ull, 16743939826825958782ull, 15370583382425491540ull, 310130032290502989ull}}, {{16710995164022262329ull, 15041135579942365948ull, 12294422691141431465ull, 620260064581005979ull}}, {{14975246254334973041ull, 11635527086175180281ull, 6142101308573311315ull, 1240520129162011959ull}}, {{2995049250866994609ull, 17084500676202677349ull, 15985815520682303555ull, 248104025832402391ull}}, {{5990098501733989217ull, 15722257278695803082ull, 13524886967655055495ull, 496208051664804783ull}}, {{11980197003467978433ull, 12997770483682054548ull, 8603029861600559375ull, 992416103329609567ull}}, {{2396039400693595687ull, 9978251726220231556ull, 9099303601803932521ull, 198483220665921913ull}}, {{4792078801387191373ull, 1509759378730911496ull, 18198607203607865043ull, 396966441331843826ull}}, {{9584157602774382746ull, 3019518757461822992ull, 17950470333506178470ull, 793932882663687653ull}}, {{1916831520554876550ull, 11671950195718095568ull, 14658140510926966663ull, 158786576532737530ull}}, {{3833663041109753099ull, 4897156317726639520ull, 10869536948144381711ull, 317573153065475061ull}}, {{7667326082219506197ull, 9794312635453279040ull, 3292329822579211806ull, 635146306130950123ull}}, {{15334652164439012394ull, 1141881197197006464ull, 6584659645158423613ull, 1270292612261900246ull}}, {{14134976877113533449ull, 14985771498407042585ull, 5006280743773595045ull, 254058522452380049ull}}, {{9823209680517515281ull, 11524798923104533555ull, 10012561487547190091ull, 508117044904760098ull}}, {{1199675287325478946ull, 4602853772499515495ull, 1578378901384828567ull, 1016234089809520197ull}}, {{14997330316432737082ull, 15677966013467544391ull, 7694373409760786359ull, 203246817961904039ull}}, {{11547916559155922548ull, 12909187953225537167ull, 15388746819521572719ull, 406493635923808078ull}}, {{4649089044602293480ull, 7371631832741522719ull, 12330749565333593823ull, 812987271847616157ull}}, {{15687213067888099989ull, 1474326366548304543ull, 9844847542550539411ull, 162597454369523231ull}}, {{12927682062066648362ull, 2948652733096609087ull, 1242951011391527206ull, 325194908739046463ull}}, {{7408620050423745107ull, 5897305466193218175ull, 2485902022783054412ull, 650389817478092926ull}}, {{12549770454310479991ull, 12247507537464374604ull, 4186529219298521205ull, 130077963495618585ull}}, {{6652796834911408366ull, 6048271001219197593ull, 8373058438597042411ull, 260155926991237170ull}}, {{13305593669822816732ull, 12096542002438395186ull, 16746116877194084822ull, 520311853982474340ull}}, {{8164443265936081848ull, 5746339931167238757ull, 15045489680678618029ull, 1040623707964948681ull}}, {{9011586282671037016ull, 1149267986233447751ull, 6698446750877633929ull, 208124741592989736ull}}, {{18023172565342074032ull, 2298535972466895502ull, 13396893501755267858ull, 416249483185979472ull}}, {{17599601056974596448ull, 4597071944933791005ull, 8347042929800984100ull, 832498966371958945ull}}, {{3519920211394919290ull, 919414388986758201ull, 1669408585960196820ull, 166499793274391789ull}}, {{7039840422789838580ull, 1838828777973516402ull, 3338817171920393640ull, 332999586548783578ull}}, {{14079680845579677159ull, 3677657555947032804ull, 6677634343840787280ull, 665999173097567156ull}}, {{2815936169115935432ull, 4424880325931316884ull, 5024875683510067779ull, 133199834619513431ull}}, {{5631872338231870864ull, 8849760651862633768ull, 10049751367020135558ull, 266399669239026862ull}}, {{11263744676463741727ull, 17699521303725267536ull, 1652758660330719500ull, 532799338478053725ull}}, {{4080745279217931837ull, 16952298533740983457ull, 3305517320661439001ull, 1065598676956107450ull}}, {{11884195500069317337ull, 7079808521490107014ull, 661103464132287800ull, 213119735391221490ull}}, {{5321646926429083058ull, 14159617042980214029ull, 1322206928264575600ull, 426239470782442980ull}}, {{10643293852858166116ull, 9872490012250876442ull, 2644413856529151201ull, 852478941564885960ull}}, {{13196705214797364193ull, 5663846817192085611ull, 528882771305830240ull, 170495788312977192ull}}, {{7946666355885176770ull, 11327693634384171223ull, 1057765542611660480ull, 340991576625954384ull}}, {{15893332711770353540ull, 4208643195058790830ull, 2115531085223320961ull, 681983153251908768ull}}, {{17936061801321712001ull, 15599123897979399458ull, 11491152661270395161ull, 136396630650381753ull}}, {{17425379528933872386ull, 12751503722249247301ull, 4535561248831238707ull, 272793261300763507ull}}, {{16404014984158193155ull, 7056263370788942987ull, 9071122497662477415ull, 545586522601527014ull}}, {{14361285894606834694ull, 14112526741577885975ull, 18142244995324954830ull, 1091173045203054028ull}}, {{13940303623147097909ull, 13890551792541308164ull, 14696495443290721935ull, 218234609040610805ull}}, {{9433863172584644201ull, 9334359511373064713ull, 10946246812871892255ull, 436469218081221611ull}}, {{420982271459736785ull, 221974949036577811ull, 3445749552034232895ull, 872938436162443223ull}}, {{14841591713259588650ull, 11112441434033046531ull, 11757196354632577548ull, 174587687232488644ull}}, {{11236439352809625684ull, 3778138794356541447ull, 5067648635555603481ull, 349175374464977289ull}}, {{4026134631909699752ull, 7556277588713082895ull, 10135297271111206962ull, 698350748929954578ull}}, {{805226926381939951ull, 1511255517742616579ull, 13095105898447972362ull, 139670149785990915ull}}, {{1610453852763879901ull, 3022511035485233158ull, 7743467723186393108ull, 279340299571981831ull}}, {{3220907705527759801ull, 6045022070970466316ull, 15486935446372786216ull, 558680599143963662ull}}, {{6441815411055519602ull, 12090044141940932632ull, 12527126819036020816ull, 1117361198287927325ull}}, {{12356409526436834890ull, 6107357643130096849ull, 2505425363807204163ull, 223472239657585465ull}}, {{6266074979164118164ull, 12214715286260193699ull, 5010850727614408326ull, 446944479315170930ull}}, {{12532149958328236328ull, 5982686498810835782ull, 10021701455228816653ull, 893888958630341860ull}}, {{2506429991665647266ull, 12264583743987898126ull, 2004340291045763330ull, 178777791726068372ull}}, {{5012859983331294532ull, 6082423414266244636ull, 4008680582091526661ull, 357555583452136744ull}}, {{10025719966662589063ull, 12164846828532489272ull, 8017361164183053322ull, 715111166904273488ull}}, {{9383841622816338459ull, 2432969365706497854ull, 12671518677062341634ull, 143022233380854697ull}}, {{320939171923125302ull, 4865938731412995709ull, 6896293280415131652ull, 286044466761709395ull}}, {{641878343846250604ull, 9731877462825991418ull, 13792586560830263304ull, 572088933523418790ull}}, {{1283756687692501207ull, 1017010851942431220ull, 9138429047950974993ull, 1144177867046837581ull}}, {{15014146596506141535ull, 14960797429356127536ull, 5517034624332105321ull, 228835573409367516ull}}, {{11581549119302731453ull, 11474850785002703457ull, 11034069248664210643ull, 457671146818735032ull}}, {{4716354164895911289ull, 4502957496295855299ull, 3621394423618869671ull, 915342293637470065ull}}, {{943270832979182258ull, 4589940314001081383ull, 724278884723773934ull, 183068458727494013ull}}, {{1886541665958364516ull, 9179880628002162766ull, 1448557769447547868ull, 366136917454988026ull}}, {{3773083331916729031ull, 18359761256004325532ull, 2897115538895095736ull, 732273834909976052ull}}, {{754616666383345807ull, 14739998695426596076ull, 7958120737262839793ull, 146454766981995210ull}}, {{1509233332766691613ull, 11033253317143640536ull, 15916241474525679587ull, 292909533963990420ull}}, {{3018466665533383225ull, 3619762560577729456ull, 13385738875341807559ull, 585819067927980841ull}}, {{6036933331066766450ull, 7239525121155458912ull, 8324733676974063502ull, 1171638135855961683ull}}, {{8586084295697173937ull, 1447905024231091782ull, 12732993179620543670ull, 234327627171192336ull}}, {{17172168591394347873ull, 2895810048462183564ull, 7019242285531535724ull, 468655254342384673ull}}, {{15897593109079144130ull, 5791620096924367129ull, 14038484571063071448ull, 937310508684769346ull}}, {{14247565066041559796ull, 15915719278352514718ull, 6497045728954524612ull, 187462101736953869ull}}, {{10048386058373567975ull, 13384694482995477821ull, 12994091457909049225ull, 374924203473907738ull}}, {{1650028043037584334ull, 8322644892281404027ull, 7541438842108546835ull, 749848406947815477ull}}, {{15087400867575158160ull, 9043226607940101451ull, 8886985397905530013ull, 149969681389563095ull}}, {{11728057661440764704ull, 18086453215880202903ull, 17773970795811060026ull, 299939362779126190ull}}, {{5009371249171977791ull, 17726162358050854191ull, 17101197517912568437ull, 599878725558252381ull}}, {{10018742498343955581ull, 17005580642392156766ull, 15755650962115585259ull, 1199757451116504763ull}}, {{13071794943894522086ull, 10779813757962251999ull, 14219176636648848021ull, 239951490223300952ull}}, {{7696845814079492556ull, 3112883442214952383ull, 9991609199588144427ull, 479902980446601905ull}}, {{15393691628158985111ull, 6225766884429904766ull, 1536474325466737238ull, 959805960893203811ull}}, {{3078738325631797023ull, 16002548635853622246ull, 3996643679835257770ull, 191961192178640762ull}}, {{6157476651263594045ull, 13558353197997692876ull, 7993287359670515541ull, 383922384357281524ull}}, {{12314953302527188089ull, 8669962322285834136ull, 15986574719341031083ull, 767844768714563048ull}}, {{9841688289989258265ull, 5423341279199077150ull, 14265361388093937186ull, 153568953742912609ull}}, {{1236632506268964913ull, 10846682558398154301ull, 10083978702478322756ull, 307137907485825219ull}}, {{2473265012537929825ull, 3246621043086756986ull, 1721213331247093897ull, 614275814971650439ull}}, {{4946530025075859649ull, 6493242086173513972ull, 3442426662494187794ull, 1228551629943300878ull}}, {{15746701263982813223ull, 8677346046718523440ull, 11756531776724568528ull, 245710325988660175ull}}, {{13046658454256074830ull, 17354692093437046881ull, 5066319479739585440ull, 491420651977320351ull}}, {{7646572834802598043ull, 16262640113164542147ull, 10132638959479170881ull, 982841303954640702ull}}, {{1529314566960519609ull, 14320574466858639399ull, 9405225421379654822ull, 196568260790928140ull}}, {{3058629133921039217ull, 10194404860007727182ull, 363706769049758029ull, 393136521581856281ull}}, {{6117258267842078434ull, 1942065646305902748ull, 727413538099516059ull, 786273043163712562ull}}, {{15980846912536056980ull, 4077761944003090872ull, 7524180337103723858ull, 157254608632742512ull}}, {{13514949751362562344ull, 8155523888006181745ull, 15048360674207447716ull, 314509217265485024ull}}, {{8583155429015573071ull, 16311047776012363491ull, 11649977274705343816ull, 629018434530970049ull}}, {{17166310858031146141ull, 14175351478315175366ull, 4853210475701136017ull, 1258036869061940099ull}}, {{10811959801090049875ull, 6524419110404945396ull, 15728037354107868496ull, 251607373812388019ull}}, {{3177175528470548134ull, 13048838220809890793ull, 13009330634506185376ull, 503214747624776039ull}}, {{6354351056941096267ull, 7650932367910229970ull, 7571917195302819137ull, 1006429495249552079ull}}, {{4960219026130129577ull, 5219535288323956317ull, 16271778698028205120ull, 201285899049910415ull}}, {{9920438052260259153ull, 10439070576647912634ull, 14096813322346858624ull, 402571798099820831ull}}, {{1394132030810966690ull, 2431397079586273653ull, 9746882570984165633ull, 805143596199641663ull}}, {{15036221665129834631ull, 4175628230659165053ull, 13017422958422564096ull, 161028719239928332ull}}, {{11625699256550117646ull, 8351256461318330107ull, 7588101843135576576ull, 322057438479856665ull}}, {{4804654439390683675ull, 16702512922636660215ull, 15176203686271153152ull, 644114876959713330ull}}, {{8339628517361957382ull, 10719200214011152689ull, 3035240737254230630ull, 128822975391942666ull}}, {{16679257034723914763ull, 2991656354312753762ull, 6070481474508461261ull, 257645950783885332ull}}, {{14911769995738277910ull, 5983312708625507525ull, 12140962949016922522ull, 515291901567770664ull}}, {{11376795917767004204ull, 11966625417251015051ull, 5835181824324293428ull, 1030583803135541329ull}}, {{13343405627779131811ull, 9772022712934023656ull, 15924431623832499978ull, 206116760627108265ull}}, {{8240067181848712005ull, 1097301352158495697ull, 13402119173955448341ull, 412233521254216531ull}}, {{16480134363697424009ull, 2194602704316991394ull, 8357494274201345066ull, 824467042508433063ull}}, {{14364073316965215772ull, 15196315799831039571ull, 12739545299065999982ull, 164893408501686612ull}}, {{10281402560220879927ull, 11945887525952527527ull, 7032346524422448349ull, 329786817003373225ull}}, {{2116061046732208238ull, 5445030978195503439ull, 14064693048844896699ull, 659573634006746450ull}}, {{11491258653572172618ull, 15846401454606741980ull, 2812938609768979339ull, 131914726801349290ull}}, {{4535773233434793619ull, 13246058835503932345ull, 5625877219537958679ull, 263829453602698580ull}}, {{9071546466869587237ull, 8045373597298313074ull, 11251754439075917359ull, 527658907205397160ull}}, {{18143092933739174473ull, 16090747194596626148ull, 4056764804442283102ull, 1055317814410794321ull}}, {{7317967401489745218ull, 14286195883145056199ull, 4500701775630366943ull, 211063562882158864ull}}, {{14635934802979490436ull, 10125647692580560782ull, 9001403551260733887ull, 422127125764317728ull}}, {{10825125532249429255ull, 1804551311451569949ull, 18002807102521467775ull, 844254251528635456ull}}, {{2165025106449885851ull, 4050259077032224313ull, 7289910235246203878ull, 168850850305727091ull}}, {{4330050212899771702ull, 8100518154064448626ull, 14579820470492407756ull, 337701700611454182ull}}, {{8660100425799543404ull, 16201036308128897252ull, 10712896867275263896ull, 675403401222908365ull}}, {{12800066529385639651ull, 6929556076367689773ull, 2142579373455052779ull, 135080680244581673ull}}, {{7153388985061727685ull, 13859112152735379547ull, 4285158746910105558ull, 270161360489163346ull}}, {{14306777970123455370ull, 9271480231761207478ull, 8570317493820211117ull, 540322720978326692ull}}, {{10166811866537359124ull, 96216389812863341ull, 17140634987640422235ull, 1080645441956653384ull}}, {{2033362373307471825ull, 14776638536930213961ull, 18185522256495725739ull, 216129088391330676ull}}, {{4066724746614943650ull, 11106533000150876306ull, 17924300439281899863ull, 432258176782661353ull}}, {{8133449493229887299ull, 3766321926592200996ull, 17401856804854248111ull, 864516353565322707ull}}, {{16384085157613618753ull, 11821310829544171168ull, 10859068990454670268ull, 172903270713064541ull}}, {{14321426241517685890ull, 5195877585378790721ull, 3271393907199788921ull, 345806541426129083ull}}, {{10196108409325820163ull, 10391755170757581443ull, 6542787814399577842ull, 691613082852258166ull}}, {{5728570496607074356ull, 13146397478377247258ull, 4997906377621825891ull, 138322616570451633ull}}, {{11457140993214148712ull, 7846050883044942900ull, 9995812755243651783ull, 276645233140903266ull}}, {{4467537912718745807ull, 15692101766089885801ull, 1544881436777751950ull, 553290466281806533ull}}, {{8935075825437491613ull, 12937459458470219986ull, 3089762873555503901ull, 1106580932563613066ull}}, {{12855061609313229293ull, 9966189521177864643ull, 4307301389453011103ull, 221316186512722613ull}}, {{7263379144916906969ull, 1485634968646177671ull, 8614602778906022207ull, 442632373025445226ull}}, {{14526758289833813937ull, 2971269937292355342ull, 17229205557812044414ull, 885264746050890452ull}}, {{13973398102192493757ull, 4283602802200381391ull, 10824538741046229529ull, 177052949210178090ull}}, {{9500052130675435898ull, 8567205604400762783ull, 3202333408382907442ull, 354105898420356181ull}}, {{553360187641320180ull, 17134411208801525567ull, 6404666816765814884ull, 708211796840712362ull}}, {{11178718481753995006ull, 7116231056502215436ull, 8659630992836983623ull, 141642359368142472ull}}, {{3910692889798438396ull, 14232462113004430873ull, 17319261985673967246ull, 283284718736284944ull}}, {{7821385779596876791ull, 10018180152299310130ull, 16191779897638382877ull, 566569437472569889ull}}, {{15642771559193753581ull, 1589616230889068644ull, 13936815721567214139ull, 1133138874945139779ull}}, {{10507251941322571363ull, 11385969690403544698ull, 17544758403281084120ull, 226627774989027955ull}}, {{2567759808935591109ull, 4325195307097537781ull, 16642772732852616625ull, 453255549978055911ull}}, {{5135519617871182218ull, 8650390614195075562ull, 14838801391995681634ull, 906511099956111823ull}}, {{15784499182541877737ull, 9108775752322835758ull, 14035806722624867296ull, 181302219991222364ull}}, {{13122254291374203857ull, 18217551504645671517ull, 9624869371540182976ull, 362604439982444729ull}}, {{7797764509038856098ull, 17988358935581791419ull, 802994669370814337ull, 725208879964889459ull}}, {{1559552901807771220ull, 7287020601858268607ull, 14917994192841804160ull, 145041775992977891ull}}, {{3119105803615542440ull, 14574041203716537214ull, 11389244311974056704ull, 290083551985955783ull}}, {{6238211607231084879ull, 10701338333723522812ull, 4331744550238561793ull, 580167103971911567ull}}, {{12476423214462169757ull, 2955932593737494008ull, 8663489100477123587ull, 1160334207943823134ull}}, {{17252679901860075245ull, 4280535333489409124ull, 16490093079063066010ull, 232066841588764626ull}}, {{16058615730010598873ull, 8561070666978818249ull, 14533442084416580404ull, 464133683177529253ull}}, {{13670487386311646129ull, 17122141333957636499ull, 10620140095123609192ull, 928267366355058507ull}}, {{13802143921488060196ull, 18181823525759168592ull, 9502725648508542484ull, 185653473271011701ull}}, {{9157543769266568775ull, 17916902977808785569ull, 558707223307533353ull, 371306946542023403ull}}, {{18315087538533137549ull, 17387061881908019522ull, 1117414446615066707ull, 742613893084046806ull}}, {{3663017507706627510ull, 14545458820607334874ull, 3912831704064923664ull, 148522778616809361ull}}, {{7326035015413255020ull, 10644173567505118132ull, 7825663408129847329ull, 297045557233618722ull}}, {{14652070030826510040ull, 2841603061300684648ull, 15651326816259694659ull, 594091114467237444ull}}, {{10857395987943468463ull, 5683206122601369297ull, 12855909558809837702ull, 1188182228934474889ull}}, {{13239525641814424663ull, 4825990039262184182ull, 17328577170729608833ull, 237636445786894977ull}}, {{8032307209919297709ull, 9651980078524368365ull, 16210410267749666050ull, 475272891573789955ull}}, {{16064614419838595417ull, 857216083339185114ull, 13974076461789780485ull, 950545783147579911ull}}, {{3212922883967719084ull, 3860792031409747346ull, 6484164107099866420ull, 190109156629515982ull}}, {{6425845767935438167ull, 7721584062819494692ull, 12968328214199732840ull, 380218313259031964ull}}, {{12851691535870876333ull, 15443168125638989384ull, 7489912354689914064ull, 760436626518063929ull}}, {{9949035936657995913ull, 14156680069353528846ull, 16255377729905624105ull, 152087325303612785ull}}, {{1451327799606440210ull, 9866616064997506077ull, 14064011386101696595ull, 304174650607225571ull}}, {{2902655599212880420ull, 1286488056285460538ull, 9681278698493841575ull, 608349301214451143ull}}, {{5805311198425760840ull, 2572976112570921076ull, 915813323278131534ull, 1216698602428902287ull}}, {{8539759869168972815ull, 4203944037256094538ull, 7561860294139446953ull, 243339720485780457ull}}, {{17079519738337945629ull, 8407888074512189076ull, 15123720588278893906ull, 486679440971560914ull}}, {{15712295402966339642ull, 16815776149024378153ull, 11800697102848236196ull, 973358881943121829ull}}, {{14210505524818998898ull, 3363155229804875630ull, 17117534679537288532ull, 194671776388624365ull}}, {{9974266975928446180ull, 6726310459609751261ull, 15788325285365025448ull, 389343552777248731ull}}, {{1501789878147340744ull, 13452620919219502523ull, 13129906497020499280ull, 778687105554497463ull}}, {{3989706790371378472ull, 13758570628069631474ull, 13694027743629830825ull, 155737421110899492ull}}, {{7979413580742756944ull, 9070397182429711332ull, 8941311413550110035ull, 311474842221798985ull}}, {{15958827161485513888ull, 18140794364859422664ull, 17882622827100220070ull, 622949684443597970ull}}, {{13470910249261476160ull, 17834844656009293713ull, 17318501580490888525ull, 1245899368887195941ull}}, {{17451577308819936525ull, 7256317745943769065ull, 7153049130840088028ull, 249179873777439188ull}}, {{16456410543930321434ull, 14512635491887538131ull, 14306098261680176056ull, 498359747554878376ull}}, {{14466077014151091251ull, 10578526910065524647ull, 10165452449650800497ull, 996719495109756753ull}}, {{10271913032314038897ull, 2115705382013104929ull, 13101136934155891069ull, 199343899021951350ull}}, {{2097081990918526178ull, 4231410764026209859ull, 7755529794602230522ull, 398687798043902701ull}}, {{4194163981837052355ull, 8462821528052419718ull, 15511059589204461044ull, 797375596087805402ull}}, {{15596228055335051764ull, 5381913120352394266ull, 10480909547324712855ull, 159475119217561080ull}}, {{12745712036960551912ull, 10763826240704788533ull, 2515075020939874094ull, 318950238435122161ull}}, {{7044680000211552207ull, 3080908407700025451ull, 5030150041879748189ull, 637900476870244322ull}}, {{14089360000423104413ull, 6161816815400050902ull, 10060300083759496378ull, 1275800953740488644ull}}, {{17575267259052262176ull, 8611060992563830826ull, 16769455275719540568ull, 255160190748097728ull}}, {{16703790444394972735ull, 17222121985127661653ull, 15092166477729529520ull, 510320381496195457ull}}, {{14960836815080393854ull, 15997499896545771691ull, 11737588881749507425ull, 1020640762992390915ull}}, {{6681516177757989094ull, 3199499979309154338ull, 2347517776349901485ull, 204128152598478183ull}}, {{13363032355515978188ull, 6398999958618308676ull, 4695035552699802970ull, 408256305196956366ull}}, {{8279320637322404760ull, 12797999917236617353ull, 9390071105399605940ull, 816512610393912732ull}}, {{1655864127464480952ull, 9938297612931144117ull, 9256711850563741834ull, 163302522078782546ull}}, {{3311728254928961904ull, 1429851152152736618ull, 66679627417932053ull, 326605044157565093ull}}, {{6623456509857923808ull, 2859702304305473236ull, 133359254835864106ull, 653210088315130186ull}}, {{12392737746197315732ull, 7950638090344915293ull, 3716020665709083144ull, 130642017663026037ull}}, {{6338731418685079847ull, 15901276180689830587ull, 7432041331418166288ull, 261284035326052074ull}}, {{12677462837370159693ull, 13355808287670109558ull, 14864082662836332577ull, 522568070652104148ull}}, {{6908181601030767770ull, 8264872501630667501ull, 11281421251963113539ull, 1045136141304208297ull}}, {{8760333949689974201ull, 5342323315068043823ull, 9634981879876443354ull, 209027228260841659ull}}, {{17520667899379948401ull, 10684646630136087646ull, 823219686043335092ull, 418054456521683319ull}}, {{16594591725050345185ull, 2922549186562623677ull, 1646439372086670185ull, 836108913043366638ull}}, {{3318918345010069037ull, 11652556281538255705ull, 11397334318643065006ull, 167221782608673327ull}}, {{6637836690020138074ull, 4858368489366959794ull, 4347924563576578397ull, 334443565217346655ull}}, {{13275673380040276148ull, 9716736978733919588ull, 8695849127153156794ull, 668887130434693310ull}}, {{10033832305491875876ull, 16700742654714425210ull, 1739169825430631358ull, 133777426086938662ull}}, {{1620920537274200136ull, 14954741235719298805ull, 3478339650861262717ull, 267554852173877324ull}}, {{3241841074548400272ull, 11462738397729045994ull, 6956679301722525435ull, 535109704347754648ull}}, {{6483682149096800544ull, 4478732721748540372ull, 13913358603445050871ull, 1070219408695509296ull}}, {{16054131688787001402ull, 8274444173833528720ull, 6472020535430920497ull, 214043881739101859ull}}, {{13661519303864451188ull, 16548888347667057441ull, 12944041070861840994ull, 428087763478203718ull}}, {{8876294534019350759ull, 14651032621624563267ull, 7441338068014130373ull, 856175526956407437ull}}, {{9153956536287690799ull, 2930206524324912653ull, 8866965243086646721ull, 171235105391281487ull}}, {{18307913072575381597ull, 5860413048649825306ull, 17733930486173293442ull, 342470210782562974ull}}, {{18169082071441211577ull, 11720826097299650613ull, 17021116898637035268ull, 684940421565125949ull}}, {{3633816414288242316ull, 9722862848943750769ull, 18161618638695048346ull, 136988084313025189ull}}, {{7267632828576484631ull, 998981624177949922ull, 17876493203680545077ull, 273976168626050379ull}}, {{14535265657152969262ull, 1997963248355899844ull, 17306242333651538538ull, 547952337252100759ull}}, {{10623787240596386907ull, 3995926496711799689ull, 16165740593593525460ull, 1095904674504201519ull}}, {{13192803892345008351ull, 15556580558310001230ull, 17990543377686346384ull, 219180934900840303ull}}, {{7938863710980465086ull, 12666417042910450845ull, 17534342681663141153ull, 438361869801680607ull}}, {{15877727421960930172ull, 6886090012111350074ull, 16621941289616730691ull, 876723739603361215ull}}, {{3175545484392186035ull, 5066566817164180338ull, 3324388257923346138ull, 175344747920672243ull}}, {{6351090968784372069ull, 10133133634328360676ull, 6648776515846692276ull, 350689495841344486ull}}, {{12702181937568744137ull, 1819523194947169736ull, 13297553031693384553ull, 701378991682688972ull}}, {{6229785202255659151ull, 363904638989433947ull, 10038208235822497557ull, 140275798336537794ull}}, {{12459570404511318302ull, 727809277978867894ull, 1629672397935443498ull, 280551596673075589ull}}, {{6472396735313084987ull, 1455618555957735789ull, 3259344795870886996ull, 561103193346151178ull}}, {{12944793470626169973ull, 2911237111915471578ull, 6518689591741773992ull, 1122206386692302356ull}}, {{6278307508867144318ull, 11650293866608825285ull, 4993086733090265121ull, 224441277338460471ull}}, {{12556615017734288636ull, 4853843659508098954ull, 9986173466180530243ull, 448882554676920942ull}}, {{6666485961759025656ull, 9707687319016197909ull, 1525602858651508870ull, 897765109353841885ull}}, {{16090692451319446424ull, 1941537463803239581ull, 305120571730301774ull, 179553021870768377ull}}, {{13734640828929341232ull, 3883074927606479163ull, 610241143460603548ull, 359106043741536754ull}}, {{9022537584149130848ull, 7766149855212958327ull, 1220482286921207096ull, 718212087483073508ull}}, {{5493856331571736493ull, 16310625230010232958ull, 11312142901609972388ull, 143642417496614701ull}}, {{10987712663143472986ull, 14174506386310914300ull, 4177541729510393161ull, 287284834993229403ull}}, {{3528681252577394355ull, 9902268698912276985ull, 8355083459020786323ull, 574569669986458806ull}}, {{7057362505154788710ull, 1357793324115002354ull, 16710166918041572647ull, 1149139339972917612ull}}, {{12479518945256688712ull, 15028953923790641763ull, 10720731013092135175ull, 229827867994583522ull}}, {{6512293816803825807ull, 11611163773871731911ull, 2994717952474718735ull, 459655735989167045ull}}, {{13024587633607651614ull, 4775583474033912206ull, 5989435904949437471ull, 919311471978334090ull}}, {{9983615156205350970ull, 4644465509548692764ull, 1197887180989887494ull, 183862294395666818ull}}, {{1520486238701150323ull, 9288931019097385529ull, 2395774361979774988ull, 367724588791333636ull}}, {{3040972477402300645ull, 131117964485219442ull, 4791548723959549977ull, 735449177582667272ull}}, {{4297543310222370453ull, 14783618851864685181ull, 8337007374275730641ull, 147089835516533454ull}}, {{8595086620444740905ull, 11120493630019818746ull, 16674014748551461283ull, 294179671033066908ull}}, {{17190173240889481809ull, 3794243186330085876ull, 14901285423393370951ull, 588359342066133817ull}}, {{15933602408069412001ull, 7588486372660171753ull, 11355826773077190286ull, 1176718684132267635ull}}, {{17944115740581523693ull, 5207046089273944673ull, 2271165354615438057ull, 235343736826453527ull}}, {{17441487407453495770ull, 10414092178547889347ull, 4542330709230876114ull, 470687473652907054ull}}, {{16436230741197439924ull, 2381440283386227079ull, 9084661418461752229ull, 941374947305814108ull}}, {{6976594962981398308ull, 7854985686161066062ull, 12884978727918081415ull, 188274989461162821ull}}, {{13953189925962796616ull, 15709971372322132124ull, 7323213382126611214ull, 376549978922325643ull}}, {{9459635778216041616ull, 12973198670934712633ull, 14646426764253222429ull, 753099957844651286ull}}, {{12959973599868939293ull, 2594639734186942526ull, 6618634167592554809ull, 150619991568930257ull}}, {{7473203126028326970ull, 5189279468373885053ull, 13237268335185109618ull, 301239983137860514ull}}, {{14946406252056653940ull, 10378558936747770106ull, 8027792596660667620ull, 602479966275721029ull}}, {{11446068430403756263ull, 2310373799785988597ull, 16055585193321335241ull, 1204959932551442058ull}}, {{5978562500822661576ull, 15219470018924839012ull, 14279163482889998017ull, 240991986510288411ull}}, {{11957125001645323152ull, 11992195964140126408ull, 10111582892070444419ull, 481983973020576823ull}}, {{5467505929581094687ull, 5537647854570701201ull, 1776421710431337223ull, 963967946041153647ull}}, {{4782850000658129261ull, 1107529570914140240ull, 7733981971570088091ull, 192793589208230729ull}}, {{9565700001316258522ull, 2215059141828280480ull, 15467963943140176182ull, 385587178416461458ull}}, {{684655928922965427ull, 4430118283656560961ull, 12489183812570800748ull, 771174356832922917ull}}, {{3826280000526503409ull, 886023656731312192ull, 9876534391997980796ull, 154234871366584583ull}}, {{7652560001053006817ull, 1772047313462624384ull, 1306324710286409976ull, 308469742733169167ull}}, {{15305120002106013634ull, 3544094626925248768ull, 2612649420572819952ull, 616939485466338334ull}}, {{12163495930502475652ull, 7088189253850497537ull, 5225298841145639904ull, 1233878970932676668ull}}, {{17190094445068136424ull, 8796335480253920153ull, 12113106212454858950ull, 246775794186535333ull}}, {{15933444816426721231ull, 17592670960507840307ull, 5779468351200166284ull, 493551588373070667ull}}, {{13420145559143890845ull, 16738597847306128999ull, 11558936702400332569ull, 987103176746141334ull}}, {{10062726741312598816ull, 14415766013686956769ull, 17069182599447707806ull, 197420635349228266ull}}, {{1678709408915646015ull, 10384787953664361923ull, 15691621125185863997ull, 394841270698456533ull}}, {{3357418817831292030ull, 2322831833619172230ull, 12936498176662176379ull, 789682541396913067ull}}, {{4360832578308168730ull, 4153915181465744769ull, 9965997264816255922ull, 157936508279382613ull}}, {{8721665156616337459ull, 8307830362931489538ull, 1485250455922960228ull, 315873016558765227ull}}, {{17443330313232674917ull, 16615660725862979076ull, 2970500911845920456ull, 631746033117530454ull}}, {{16439916552755798217ull, 14784577378016406537ull, 5941001823691840913ull, 1263492066235060908ull}}, {{14356029754776890613ull, 6646264290345191630ull, 12256246808964099152ull, 252698413247012181ull}}, {{10265315435844229610ull, 13292528580690383261ull, 6065749544218646688ull, 505396826494024363ull}}, {{2083886797978907604ull, 8138313087671214907ull, 12131499088437293377ull, 1010793652988048726ull}}, {{416777359595781521ull, 12695709061759973951ull, 6115648632429368998ull, 202158730597609745ull}}, {{833554719191563042ull, 6944674049810396286ull, 12231297264858737997ull, 404317461195219490ull}}, {{1667109438383126083ull, 13889348099620792572ull, 6015850456007924378ull, 808634922390438981ull}}, {{4022770702418535540ull, 17535264878891799807ull, 4892518905943495198ull, 161726984478087796ull}}, {{8045541404837071080ull, 16623785684074047998ull, 9785037811886990397ull, 323453968956175592ull}}, {{16091082809674142159ull, 14800827294438544380ull, 1123331550064429179ull, 646907937912351185ull}}, {{17975611820902469725ull, 17717560717855350168ull, 224666310012885835ull, 129381587582470237ull}}, {{17504479568095387834ull, 16988377362001148721ull, 449332620025771671ull, 258763175164940474ull}}, {{16562215062481224051ull, 15530010650292745827ull, 898665240051543343ull, 517526350329880948ull}}, {{14677686051252896485ull, 12613277226875940039ull, 1797330480103086687ull, 1035052700659761896ull}}, {{10314234839734399944ull, 13590701889600918977ull, 4048814910762527660ull, 207010540131952379ull}}, {{2181725605759248271ull, 8734659705492286339ull, 8097629821525055321ull, 414021080263904758ull}}, {{4363451211518496542ull, 17469319410984572678ull, 16195259643050110642ull, 828042160527809516ull}}, {{4562039057045609632ull, 14561910326422645505ull, 6928400743351932451ull, 165608432105561903ull}}, {{9124078114091219263ull, 10677076579135739394ull, 13856801486703864903ull, 331216864211123806ull}}, {{18248156228182438526ull, 2907409084561927172ull, 9266858899698178191ull, 662433728422247613ull}}, {{7338980060378398029ull, 15338877075880026727ull, 12921418224165366607ull, 132486745684449522ull}}, {{14677960120756796057ull, 12231010078050501838ull, 7396092374621181599ull, 264973491368899045ull}}, {{10909176167804040498ull, 6015276082391452061ull, 14792184749242363199ull, 529946982737798090ull}}, {{3371608261898529379ull, 12030552164782904123ull, 11137625424775174782ull, 1059893965475596181ull}}, {{4363670467121616199ull, 13474156877182311794ull, 5916873899696945279ull, 211978793095119236ull}}, {{8727340934243232398ull, 8501569680655071972ull, 11833747799393890559ull, 423957586190238472ull}}, {{17454681868486464796ull, 17003139361310143944ull, 5220751525078229502ull, 847915172380476945ull}}, {{7180285188439203283ull, 10779325501745849435ull, 1044150305015645900ull, 169583034476095389ull}}, {{14360570376878406565ull, 3111906929782147254ull, 2088300610031291801ull, 339166068952190778ull}}, {{10274396680047261514ull, 6223813859564294509ull, 4176601220062583602ull, 678332137904381556ull}}, {{9433576965493272950ull, 12312809216138589871ull, 4524669058754427043ull, 135666427580876311ull}}, {{420409857276994283ull, 6178874358567628127ull, 9049338117508854087ull, 271332855161752622ull}}, {{840819714553988565ull, 12357748717135256254ull, 18098676235017708174ull, 542665710323505244ull}}, {{1681639429107977129ull, 6268753360560960892ull, 17750608396325864733ull, 1085331420647010489ull}}, {{15093723144789236719ull, 8632448301596012824ull, 18307516938232814239ull, 217066284129402097ull}}, {{11740702215868921822ull, 17264896603192025649ull, 18168289802756076862ull, 434132568258804195ull}}, {{5034660358028292027ull, 16083049132674499683ull, 17889835531802602109ull, 868265136517608391ull}}, {{12074978515831389375ull, 3216609826534899936ull, 7267315921102430745ull, 173653027303521678ull}}, {{5703212957953227134ull, 6433219653069799873ull, 14534631842204861490ull, 347306054607043356ull}}, {{11406425915906454268ull, 12866439306139599746ull, 10622519610700171364ull, 694612109214086713ull}}, {{13349331627407021824ull, 9951985490711740595ull, 13192550366365765242ull, 138922421842817342ull}}, {{8251919181104492031ull, 1457226907713929575ull, 7938356659021978869ull, 277844843685634685ull}}, {{16503838362208984061ull, 2914453815427859150ull, 15876713318043957738ull, 555689687371269370ull}}, {{14560932650708416505ull, 5828907630855718301ull, 13306682562378363860ull, 1111379374742538741ull}}, {{10290884159625503948ull, 4855130340913053983ull, 6350685327217583095ull, 222275874948507748ull}}, {{2135024245541456279ull, 9710260681826107967ull, 12701370654435166190ull, 444551749897015496ull}}, {{4270048491082912558ull, 973777289942664318ull, 6955997235160780765ull, 889103499794030993ull}}, {{4543358512958492835ull, 11262801902214263833ull, 12459245891257887122ull, 177820699958806198ull}}, {{9086717025916985670ull, 4078859730718976050ull, 6471747708806222629ull, 355641399917612397ull}}, {{18173434051833971339ull, 8157719461437952100ull, 12943495417612445258ull, 711282799835224794ull}}, {{11013384439850614915ull, 9010241521771411066ull, 17346094342490130344ull, 142256559967044958ull}}, {{3580024805991678213ull, 18020483043542822133ull, 16245444611270709072ull, 284513119934089917ull}}, {{7160049611983356425ull, 17594222013376092650ull, 14044145148831866529ull, 569026239868179835ull}}, {{14320099223966712850ull, 16741699953042633684ull, 9641546223954181443ull, 1138052479736359671ull}}, {{13932066289019073540ull, 18105735249576168029ull, 5617658059532746611ull, 227610495947271934ull}}, {{9417388504328595463ull, 17764726425442784443ull, 11235316119065493223ull, 455220991894543868ull}}, {{388032934947639310ull, 17082708777176017271ull, 4023888164421434831ull, 910441983789087737ull}}, {{14835001845957169155ull, 14484588199660934423ull, 8183475262368107612ull, 182088396757817547ull}}, {{11223259618204786694ull, 10522432325612317231ull, 16366950524736215225ull, 364176793515635094ull}}, {{3999775162700021771ull, 2598120577515082847ull, 14287156975762878835ull, 728353587031270189ull}}, {{4489303847281914678ull, 15277019374470657862ull, 17614826654120217059ull, 145670717406254037ull}}, {{8978607694563829355ull, 12107294675231764108ull, 16782909234530882503ull, 291341434812508075ull}}, {{17957215389127658710ull, 5767845276753976600ull, 15119074395352213391ull, 582682869625016151ull}}, {{17467686704545765804ull, 11535690553507953201ull, 11791404716994875166ull, 1165365739250032303ull}}, {{3493537340909153161ull, 17064533369669231933ull, 13426327387624706002ull, 233073147850006460ull}}, {{6987074681818306322ull, 15682322665628912250ull, 8405910701539860389ull, 466146295700012921ull}}, {{13974149363636612643ull, 12917901257548272884ull, 16811821403079720779ull, 932292591400025842ull}}, {{2794829872727322529ull, 6272929066251564900ull, 10741061910099764802ull, 186458518280005168ull}}, {{5589659745454645057ull, 12545858132503129800ull, 3035379746489977988ull, 372917036560010337ull}}, {{11179319490909290114ull, 6644972191296707984ull, 6070759492979955977ull, 745834073120020674ull}}, {{2235863898181858023ull, 5018343253001251920ull, 15971547157563632488ull, 149166814624004134ull}}, {{4471727796363716046ull, 10036686506002503840ull, 13496350241417713360ull, 298333629248008269ull}}, {{8943455592727432092ull, 1626628938295456064ull, 8545956409125875105ull, 596667258496016539ull}}, {{17886911185454864183ull, 3253257876590912128ull, 17091912818251750210ull, 1193334516992033078ull}}, {{7266731051832883160ull, 11718698019543913395ull, 14486429007876081011ull, 238666903398406615ull}}, {{14533462103665766320ull, 4990651965378275174ull, 10526113942042610407ull, 477333806796813231ull}}, {{10620180133621981023ull, 9981303930756550349ull, 2605483810375669198ull, 954667613593626463ull}}, {{2124036026724396205ull, 5685609600893220393ull, 11589143206300864809ull, 190933522718725292ull}}, {{4248072053448792410ull, 11371219201786440786ull, 4731542338892178002ull, 381867045437450585ull}}, {{8496144106897584819ull, 4295694329863329956ull, 9463084677784356005ull, 763734090874901170ull}}, {{5388577636121427287ull, 859138865972665991ull, 1892616935556871201ull, 152746818174980234ull}}, {{10777155272242854574ull, 1718277731945331982ull, 3785233871113742402ull, 305493636349960468ull}}, {{3107566470776157532ull, 3436555463890663965ull, 7570467742227484804ull, 610987272699920936ull}}, {{6215132941552315063ull, 6873110927781327930ull, 15140935484454969608ull, 1221974545399841872ull}}, {{1243026588310463013ull, 1374622185556265586ull, 10406884726374814568ull, 244394909079968374ull}}, {{2486053176620926026ull, 2749244371112531172ull, 2367025379040077520ull, 488789818159936749ull}}, {{4972106353241852051ull, 5498488742225062344ull, 4734050758080155040ull, 977579636319873498ull}}, {{8373118900132191057ull, 12167744192670743438ull, 12014856595841761977ull, 195515927263974699ull}}, {{16746237800264382113ull, 5888744311631935260ull, 5582969117973972339ull, 391031854527949399ull}}, {{15045731526819212610ull, 11777488623263870521ull, 11165938235947944678ull, 782063709055898798ull}}, {{10387843934847663169ull, 6044846539394684427ull, 13301234091415319905ull, 156412741811179759ull}}, {{2328943795985774721ull, 12089693078789368855ull, 8155724109121088194ull, 312825483622359519ull}}, {{4657887591971549442ull, 5732642083869186094ull, 16311448218242176389ull, 625650967244719038ull}}, {{9315775183943098883ull, 11465284167738372188ull, 14176152362774801162ull, 1251301934489438077ull}}, {{9241852666272440423ull, 17050452092515315730ull, 10213928102038780878ull, 250260386897887615ull}}, {{36961258835329230ull, 15654160111321079845ull, 1981112130368010141ull, 500520773795775231ull}}, {{73922517670658460ull, 12861576148932608074ull, 3962224260736020283ull, 1001041547591550462ull}}, {{14772179762501772985ull, 2572315229786521614ull, 8171142481631024703ull, 200208309518310092ull}}, {{11097615451293994354ull, 5144630459573043229ull, 16342284963262049406ull, 400416619036620184ull}}, {{3748486828878437092ull, 10289260919146086459ull, 14237825852814547196ull, 800833238073240369ull}}, {{15507092624743328712ull, 2057852183829217291ull, 17604960429530550732ull, 160166647614648073ull}}, {{12567441175777105807ull, 4115704367658434583ull, 16763176785351549848ull, 320333295229296147ull}}, {{6688138277844659997ull, 8231408735316869167ull, 15079609496993548080ull, 640666590458592295ull}}, {{8716325285052752646ull, 1646281747063373833ull, 3015921899398709616ull, 128133318091718459ull}}, {{17432650570105505292ull, 3292563494126747666ull, 6031843798797419232ull, 256266636183436918ull}}, {{16418557066501458967ull, 6585126988253495333ull, 12063687597594838464ull, 512533272366873836ull}}, {{14390370059293366317ull, 13170253976506990667ull, 5680631121480125312ull, 1025066544733747673ull}}, {{10256771641342493910ull, 2634050795301398133ull, 12204172668521756032ull, 205013308946749534ull}}, {{2066799208975436204ull, 5268101590602796267ull, 5961601263333960448ull, 410026617893499069ull}}, {{4133598417950872408ull, 10536203181205592534ull, 11923202526667920896ull, 820053235786998138ull}}, {{11894766127815905452ull, 16864635895208759799ull, 13452686949559315148ull, 164010647157399627ull}}, {{5342788181922259287ull, 15282527716707967983ull, 8458629825409078681ull, 328021294314799255ull}}, {{10685576363844518573ull, 12118311359706384350ull, 16917259650818157363ull, 656042588629598510ull}}, {{13205161716994634685ull, 13491708716167007839ull, 3383451930163631472ull, 131208517725919702ull}}, {{7963579360279717753ull, 8536673358624464063ull, 6766903860327262945ull, 262417035451839404ull}}, {{15927158720559435505ull, 17073346717248928126ull, 13533807720654525890ull, 524834070903678808ull}}, {{13407573367409319393ull, 15699949360788304637ull, 8620871367599500165ull, 1049668141807357617ull}}, {{17438909932449505172ull, 10518687501641481573ull, 9102871903003720679ull, 209933628361471523ull}}, {{16431075791189458727ull, 2590630929573411531ull, 18205743806007441359ull, 419867256722943046ull}}, {{14415407508669365837ull, 5181261859146823063ull, 17964743538305331102ull, 839734513445886093ull}}, {{13951127945959604137ull, 1036252371829364612ull, 14660995151886797190ull, 167946902689177218ull}}, {{9455511818209656658ull, 2072504743658729225ull, 10875246230064042764ull, 335893805378354437ull}}, {{464279562709761700ull, 4145009487317458451ull, 3303748386418533912ull, 671787610756708875ull}}, {{11160902356767683310ull, 8207699526947312336ull, 660749677283706782ull, 134357522151341775ull}}, {{3875060639825815004ull, 16415399053894624673ull, 1321499354567413564ull, 268715044302683550ull}}, {{7750121279651630007ull, 14384054034079697730ull, 2642998709134827129ull, 537430088605367100ull}}, {{15500242559303260013ull, 10321363994449843844ull, 5285997418269654259ull, 1074860177210734200ull}}, {{14168094956086382973ull, 16821668057857610061ull, 1057199483653930851ull, 214972035442146840ull}}, {{9889445838463214329ull, 15196592042005668507ull, 2114398967307861703ull, 429944070884293680ull}}, {{1332147603216877041ull, 11946440010301785399ull, 4228797934615723407ull, 859888141768587360ull}}, {{3955778335385285732ull, 9767985631544177726ull, 845759586923144681ull, 171977628353717472ull}}, {{7911556670770571463ull, 1089227189378803836ull, 1691519173846289363ull, 343955256707434944ull}}, {{15823113341541142926ull, 2178454378757607672ull, 3383038347692578726ull, 687910513414869888ull}}, {{6853971483050138909ull, 15193086134719162827ull, 11744654113764246714ull, 137582102682973977ull}}, {{13707942966100277817ull, 11939428195728774038ull, 5042564153818941813ull, 275164205365947955ull}}, {{8969141858491004017ull, 5432112317747996461ull, 10085128307637883627ull, 550328410731895910ull}}, {{17938283716982008034ull, 10864224635495992922ull, 1723512541566215638ull, 1100656821463791821ull}}, {{7277005558138311930ull, 16930240186066839877ull, 4034051323055153450ull, 220131364292758364ull}}, {{14554011116276623860ull, 15413736298424128138ull, 8068102646110306901ull, 440262728585516728ull}}, {{10661278158843696104ull, 12380728523138704661ull, 16136205292220613803ull, 880525457171033456ull}}, {{2132255631768739221ull, 17233540963595382225ull, 6916589873186033083ull, 176105091434206691ull}}, {{4264511263537478442ull, 16020337853481212834ull, 13833179746372066167ull, 352210182868413382ull}}, {{8529022527074956884ull, 13593931633252874052ull, 9219615419034580719ull, 704420365736826765ull}}, {{5395153320156901700ull, 17476181585618216103ull, 1843923083806916143ull, 140884073147365353ull}}, {{10790306640313803400ull, 16505619097526880590ull, 3687846167613832287ull, 281768146294730706ull}}, {{3133869206918055184ull, 14564494121344209565ull, 7375692335227664575ull, 563536292589461412ull}}, {{6267738413836110367ull, 10682244168978867514ull, 14751384670455329151ull, 1127072585178922824ull}}, {{16010942941734863367ull, 2136448833795773502ull, 17707672193058707123ull, 225414517035784564ull}}, {{13575141809760175117ull, 4272897667591547005ull, 16968600312407862630ull, 450829034071569129ull}}, {{8703539545810798617ull, 8545795335183094011ull, 15490456551106173644ull, 901658068143138259ull}}, {{16498103168129801017ull, 12777205511262349771ull, 17855486569188876021ull, 180331613628627651ull}}, {{14549462262550050417ull, 7107666948815147927ull, 17264229064668200427ull, 360663227257255303ull}}, {{10652180451390549217ull, 14215333897630295855ull, 16081714055626849238ull, 721326454514510607ull}}, {{2130436090278109844ull, 2843066779526059171ull, 10595040440609190494ull, 144265290902902121ull}}, {{4260872180556219687ull, 5686133559052118342ull, 2743336807508829372ull, 288530581805804243ull}}, {{8521744361112439374ull, 11372267118104236684ull, 5486673615017658744ull, 577061163611608486ull}}, {{17043488722224878747ull, 4297790162498921752ull, 10973347230035317489ull, 1154122327223216972ull}}, {{14476744188670706719ull, 4548906847241694673ull, 9573367075490884144ull, 230824465444643394ull}}, {{10506744303631861822ull, 9097813694483389347ull, 699990077272216672ull, 461648930889286789ull}}, {{2566744533554172028ull, 18195627388966778695ull, 1399980154544433344ull, 923297861778573578ull}}, {{7892046536194655052ull, 11017823107277176385ull, 11348042475134617638ull, 184659572355714715ull}}, {{15784093072389310104ull, 3588902140844801154ull, 4249340876559683661ull, 369319144711429431ull}}, {{13121442071069068592ull, 7177804281689602309ull, 8498681753119367322ull, 738638289422858862ull}}, {{13692334858439544688ull, 16192956115305561754ull, 9078433980107694110ull, 147727657884571772ull}}, {{8937925643169537760ull, 13939168156901571893ull, 18156867960215388221ull, 295455315769143544ull}}, {{17875851286339075520ull, 9431592240093592170ull, 17866991846721224827ull, 590910631538287089ull}}, {{17304958498968599424ull, 416440406477632725ull, 17287239619732898039ull, 1181821263076574179ull}}, {{14529038144019450855ull, 11151334525521257514ull, 18214843182914220900ull, 236364252615314835ull}}, {{10611332214329350093ull, 3855924977332963413ull, 17982942292118890185ull, 472728505230629671ull}}, {{2775920354949148570ull, 7711849954665926827ull, 17519140510528228754ull, 945457010461259343ull}}, {{15312579329957471007ull, 8921067620417006011ull, 14571874546331376720ull, 189091402092251868ull}}, {{12178414586205390398ull, 17842135240834012023ull, 10697005018953201824ull, 378182804184503737ull}}, {{5910085098701229179ull, 17237526407958472431ull, 2947265964196852033ull, 756365608369007475ull}}, {{15939412278707887129ull, 14515551725817425455ull, 589453192839370406ull, 151273121673801495ull}}, {{13432080483706222641ull, 10584359377925299295ull, 1178906385678740813ull, 302546243347602990ull}}, {{8417416893702893666ull, 2721974682141046975ull, 2357812771357481627ull, 605092486695205980ull}}, {{16834833787405787332ull, 5443949364282093950ull, 4715625542714963254ull, 1210184973390411960ull}}, {{18124362016448798760ull, 15846185131824060082ull, 943125108542992650ull, 242036994678082392ull}}, {{17801979959188045903ull, 13245626189938568549ull, 1886250217085985301ull, 484073989356164784ull}}, {{17157215844666540189ull, 8044508306167585483ull, 3772500434171970603ull, 968147978712329568ull}}, {{18188838427900949331ull, 5298250475975427419ull, 11822546531060125090ull, 193629595742465913ull}}, {{17930932782092347046ull, 10596500951950854839ull, 5198348988410698564ull, 387259191484931827ull}}, {{17415121490475142475ull, 2746257830192158063ull, 10396697976821397129ull, 774518382969863654ull}}, {{7172373112836938819ull, 11617298010264162582ull, 16836734854331920718ull, 154903676593972730ull}}, {{14344746225673877637ull, 4787851946818773548ull, 15226725634954289821ull, 309807353187945461ull}}, {{10242748377638203657ull, 9575703893637547097ull, 12006707196199028026ull, 619614706375890923ull}}, {{2038752681566855697ull, 704663713565542579ull, 5566670318688504437ull, 1239229412751781847ull}}, {{11475796980539102109ull, 14898328001680749808ull, 8492031693221521533ull, 247845882550356369ull}}, {{4504849887368652602ull, 11349911929651948001ull, 16984063386443043067ull, 495691765100712738ull}}, {{9009699774737305204ull, 4253079785594344386ull, 15521382699176534519ull, 991383530201425477ull}}, {{9180637584431281688ull, 4539964771860779200ull, 10482974169319127550ull, 198276706040285095ull}}, {{18361275168862563375ull, 9079929543721558400ull, 2519204264928703484ull, 396553412080570191ull}}, {{18275806264015575133ull, 18159859087443116801ull, 5038408529857406968ull, 793106824161140382ull}}, {{7344510067545025350ull, 3631971817488623360ull, 8386379335455302040ull, 158621364832228076ull}}, {{14689020135090050700ull, 7263943634977246720ull, 16772758670910604080ull, 317242729664456152ull}}, {{10931296196470549783ull, 14527887269954493441ull, 15098773268111656544ull, 634485459328912305ull}}, {{3415848319231547950ull, 10609030466199435267ull, 11750802462513761473ull, 1268970918657824611ull}}, {{4372518478588219914ull, 16879201352207528346ull, 6039509307244662617ull, 253794183731564922ull}}, {{8745036957176439827ull, 15311658630705505076ull, 12079018614489325235ull, 507588367463129844ull}}, {{17490073914352879653ull, 12176573187701458536ull, 5711293155269098855ull, 1015176734926259689ull}}, {{3498014782870575931ull, 17192709896507933000ull, 15899653890021461063ull, 203035346985251937ull}}, {{6996029565741151861ull, 15938675719306314384ull, 13352563706333370511ull, 406070693970503875ull}}, {{13992059131482303722ull, 13430607364903077152ull, 8258383338957189407ull, 812141387941007751ull}}, {{2798411826296460745ull, 13754167917206346400ull, 5341025482533348204ull, 162428277588201550ull}}, {{5596823652592921489ull, 9061591760703141184ull, 10682050965066696409ull, 324856555176403100ull}}, {{11193647305185842978ull, 18123183521406282368ull, 2917357856423841202ull, 649713110352806201ull}}, {{5928078275779078919ull, 14692683148506987443ull, 4272820386026678563ull, 129942622070561240ull}}, {{11856156551558157838ull, 10938622223304423270ull, 8545640772053357127ull, 259885244141122480ull}}, {{5265569029406764059ull, 3430500372899294925ull, 17091281544106714255ull, 519770488282244960ull}}, {{10531138058813528118ull, 6861000745798589850ull, 15735819014503876894ull, 1039540976564489921ull}}, {{2106227611762705624ull, 1372200149159717970ull, 6836512617642685702ull, 207908195312897984ull}}, {{4212455223525411247ull, 2744400298319435940ull, 13673025235285371404ull, 415816390625795968ull}}, {{8424910447050822494ull, 5488800596638871880ull, 8899306396861191192ull, 831632781251591937ull}}, {{16442377348377805792ull, 15855155378295415668ull, 9158558908856058884ull, 166326556250318387ull}}, {{14438010623046059968ull, 13263566682881279721ull, 18317117817712117769ull, 332653112500636774ull}}, {{10429277172382568319ull, 8080389292053007827ull, 18187491561714683923ull, 665306225001273549ull}}, {{16843250693444154957ull, 8994775487894422211ull, 18394893571310578077ull, 133061245000254709ull}}, {{15239757313178758297ull, 17989550975788844423ull, 18343043068911604538ull, 266122490000509419ull}}, {{12032770552647964978ull, 17532357877868137231ull, 18239342064113657461ull, 532244980001018839ull}}, {{5618797031586378340ull, 16617971682026722847ull, 18031940054517763307ull, 1064489960002037679ull}}, {{12191805850543006638ull, 7012943151147254892ull, 18363783269871193954ull, 212897992000407535ull}}, {{5936867627376461660ull, 14025886302294509785ull, 18280822466032836292ull, 425795984000815071ull}}, {{11873735254752923319ull, 9605028530879467954ull, 18114900858356120969ull, 851591968001630143ull}}, {{6064095865692494987ull, 9299703335659714237ull, 14691026615896955163ull, 170318393600326028ull}}, {{12128191731384989974ull, 152662597609876858ull, 10935309158084358711ull, 340636787200652057ull}}, {{5809639389060428332ull, 305325195219753717ull, 3423874242459165806ull, 681273574401304115ull}}, {{12229974322037816636ull, 3750413853785861066ull, 684774848491833161ull, 136254714880260823ull}}, {{6013204570366081656ull, 7500827707571722133ull, 1369549696983666322ull, 272509429760521646ull}}, {{12026409140732163312ull, 15001655415143444266ull, 2739099393967332644ull, 545018859521043292ull}}, {{5606074207754775008ull, 11556566756577336917ull, 5478198787934665289ull, 1090037719042086584ull}}, {{1121214841550955002ull, 13379359795541198353ull, 15853035016554574350ull, 218007543808417316ull}}, {{2242429683101910003ull, 8311975517372845090ull, 13259325959399597085ull, 436015087616834633ull}}, {{4484859366203820006ull, 16623951034745690180ull, 8071907845089642554ull, 872030175233669267ull}}, {{4586320687982674325ull, 7014139021691048359ull, 8993079198501749157ull, 174406035046733853ull}}, {{9172641375965348649ull, 14028278043382096718ull, 17986158397003498314ull, 348812070093467706ull}}, {{18345282751930697298ull, 9609812013054641820ull, 17525572720297445013ull, 697624140186935413ull}}, {{7358405365128049783ull, 5611311217352838687ull, 14573160988285219972ull, 139524828037387082ull}}, {{14716810730256099566ull, 11222622434705677374ull, 10699577902860888328ull, 279049656074774165ull}}, {{10986877386802647515ull, 3998500795701803133ull, 2952411732012225041ull, 558099312149548331ull}}, {{3527010699895743414ull, 7997001591403606267ull, 5904823464024450082ull, 1116198624299096662ull}}, {{4394750954721059006ull, 16356795577248362546ull, 8559662322288710662ull, 223239724859819332ull}}, {{8789501909442118012ull, 14266847080787173476ull, 17119324644577421325ull, 446479449719638664ull}}, {{17579003818884236024ull, 10086950087864795336ull, 15791905215445291035ull, 892958899439277329ull}}, {{3515800763776847205ull, 16774785276540600360ull, 17915776302056699499ull, 178591779887855465ull}}, {{7031601527553694410ull, 15102826479371649104ull, 17384808530403847383ull, 357183559775710931ull}}, {{14063203055107388819ull, 11758908885033746592ull, 16322872987098143151ull, 714367119551421863ull}}, {{6501989425763388087ull, 17109177035974390611ull, 14332621041645359599ull, 142873423910284372ull}}, {{13003978851526776174ull, 15771609998239229606ull, 10218498009581167583ull, 285746847820568745ull}}, {{7561213629344000732ull, 13096475922768907597ull, 1990251945452783551ull, 571493695641137491ull}}, {{15122427258688001464ull, 7746207771828263578ull, 3980503890905567103ull, 1142987391282274982ull}}, {{14092531895963331263ull, 1549241554365652715ull, 8174798407664934067ull, 228597478256454996ull}}, {{9738319718217110909ull, 3098483108731305431ull, 16349596815329868134ull, 457194956512909992ull}}, {{1029895362724670202ull, 6196966217462610863ull, 14252449556950184652ull, 914389913025819985ull}}, {{205979072544934041ull, 8618090872976342819ull, 2850489911390036930ull, 182877982605163997ull}}, {{411958145089868081ull, 17236181745952685638ull, 5700979822780073860ull, 365755965210327994ull}}, {{823916290179736162ull, 16025619418195819660ull, 11401959645560147721ull, 731511930420655988ull}}, {{14922178517003588526ull, 17962519142606805224ull, 13348438373337760513ull, 146302386084131197ull}}, {{11397612960297625435ull, 17478294211504058833ull, 8250132672965969411ull, 292604772168262395ull}}, {{4348481846885699253ull, 16509844349298566051ull, 16500265345931938823ull, 585209544336524790ull}}, {{8696963693771398505ull, 14572944624887580486ull, 14553786618154326031ull, 1170419088673049581ull}}, {{12807439182980010671ull, 10293286554461336743ull, 6600106138372775529ull, 234083817734609916ull}}, {{7168134292250469725ull, 2139829035213121871ull, 13200212276745551059ull, 468167635469219832ull}}, {{14336268584500939450ull, 4279658070426243742ull, 7953680479781550502ull, 936335270938439665ull}}, {{17624648975867829183ull, 8234629243569069394ull, 1590736095956310100ull, 187267054187687933ull}}, {{16802553878026106750ull, 16469258487138138789ull, 3181472191912620200ull, 374534108375375866ull}}, {{15158363682342661883ull, 14491772900566725963ull, 6362944383825240401ull, 749068216750751732ull}}, {{6721021551210442700ull, 13966401024339076162ull, 8651286506248868726ull, 149813643350150346ull}}, {{13442043102420885400ull, 9486057974968600708ull, 17302573012497737453ull, 299627286700300692ull}}, {{8437342131132219184ull, 525371876227649801ull, 16158401951285923291ull, 599254573400601385ull}}, {{16874684262264438367ull, 1050743752455299602ull, 13870059828862294966ull, 1198509146801202771ull}}, {{18132332111420528967ull, 7588846379974880566ull, 6463360780514369316ull, 239701829360240554ull}}, {{17817920149131506317ull, 15177692759949761133ull, 12926721561028738632ull, 479403658720481108ull}}, {{17189096224553461017ull, 11908641446189970651ull, 7406699048347925649ull, 958807317440962217ull}}, {{10816516874394512850ull, 6071077103979904453ull, 8860037439153405776ull, 191761463488192443ull}}, {{3186289675079474084ull, 12142154207959808907ull, 17720074878306811552ull, 383522926976384886ull}}, {{6372579350158948167ull, 5837564342210066198ull, 16993405682904071489ull, 767045853952769773ull}}, {{1274515870031789634ull, 8546210497925833886ull, 14466727580806545267ull, 153409170790553954ull}}, {{2549031740063579267ull, 17092420995851667772ull, 10486711087903538918ull, 306818341581107909ull}}, {{5098063480127158534ull, 15738097917993783928ull, 2526678102097526221ull, 613636683162215819ull}}, {{10196126960254317067ull, 13029451762278016240ull, 5053356204195052443ull, 1227273366324431638ull}}, {{5728574206792773737ull, 6295239167197513571ull, 12078717685064741458ull, 245454673264886327ull}}, {{11457148413585547473ull, 12590478334395027142ull, 5710691296419931300ull, 490909346529772655ull}}, {{4467552753461543330ull, 6734212595080502669ull, 11421382592839862601ull, 981818693059545310ull}}, {{893510550692308666ull, 5036191333758010857ull, 2284276518567972520ull, 196363738611909062ull}}, {{1787021101384617332ull, 10072382667516021714ull, 4568553037135945040ull, 392727477223818124ull}}, {{3574042202769234664ull, 1698021261322491812ull, 9137106074271890081ull, 785454954447636248ull}}, {{4404157255295757256ull, 15096999511232139655ull, 12895467659080108985ull, 157090990889527249ull}}, {{8808314510591514512ull, 11747254948754727694ull, 7344191244450666355ull, 314181981779054499ull}}, {{17616629021183029024ull, 5047765823799903772ull, 14688382488901332711ull, 628363963558108998ull}}, {{16786513968656506432ull, 10095531647599807545ull, 10930020904093113806ull, 1256727927116217997ull}}, {{14425349237957032256ull, 13087152773745692478ull, 9564701810302443407ull, 251345585423243599ull}}, {{10403954402204512896ull, 7727561473781833341ull, 682659546895335199ull, 502691170846487199ull}}, {{2361164730699474176ull, 15455122947563666683ull, 1365319093790670398ull, 1005382341692974398ull}}, {{15229628205107536128ull, 6780373404254643659ull, 11341110262983865049ull, 201076468338594879ull}}, {{12012512336505520640ull, 13560746808509287319ull, 4235476452258178482ull, 402152936677189759ull}}, {{5578280599301489664ull, 8674749543309023023ull, 8470952904516356965ull, 804305873354379518ull}}, {{4805004934602208256ull, 12802996352887535574ull, 12762237025129002362ull, 160861174670875903ull}}, {{9610009869204416512ull, 7159248632065519532ull, 7077729976548453109ull, 321722349341751807ull}}, {{773275664699281408ull, 14318497264131039065ull, 14155459953096906218ull, 643444698683503614ull}}, {{7533352762423676928ull, 10242397082310028459ull, 17588487249587022536ull, 128688939736700722ull}}, {{15066705524847353856ull, 2038050090910505302ull, 16730230425464493457ull, 257377879473401445ull}}, {{11686666975985156096ull, 4076100181821010605ull, 15013716777219435298ull, 514755758946802891ull}}, {{4926589878260760576ull, 8152200363642021211ull, 11580689480729318980ull, 1029511517893605783ull}}, {{15742713234619793408ull, 12698486516954135211ull, 13384184340371594765ull, 205902303578721156ull}}, {{13038682395530035200ull, 6950228960198718807ull, 8321624607033637915ull, 411804607157442313ull}}, {{7630620717350518784ull, 13900457920397437615ull, 16643249214067275830ull, 823609214314884626ull}}, {{5215472958212014080ull, 6469440398821397846ull, 7017998657555365489ull, 164721842862976925ull}}, {{10430945916424028160ull, 12938880797642795692ull, 14035997315110730978ull, 329443685725953850ull}}, {{2415147759138504704ull, 7431017521576039769ull, 9625250556511910341ull, 658887371451907701ull}}, {{4172378366569611264ull, 8864901133799028600ull, 5614398926044292391ull, 131777474290381540ull}}, {{8344756733139222528ull, 17729802267598057200ull, 11228797852088584782ull, 263554948580763080ull}}, {{16689513466278445056ull, 17012860461486562784ull, 4010851630467617949ull, 527109897161526161ull}}, {{14932282858847338496ull, 15578976849263573953ull, 8021703260935235899ull, 1054219794323052322ull}}, {{17743851830737108992ull, 6805144184594625113ull, 8983038281670867826ull, 210843958864610464ull}}, {{17040959587764666368ull, 13610288369189250227ull, 17966076563341735652ull, 421687917729220928ull}}, {{15635175101819781120ull, 8773832664668948839ull, 17485409052973919689ull, 843375835458441857ull}}, {{3127035020363956224ull, 5444115347675700091ull, 10875779440078604584ull, 168675167091688371ull}}, {{6254070040727912448ull, 10888230695351400182ull, 3304814806447657552ull, 337350334183376743ull}}, {{12508140081455824896ull, 3329717316993248748ull, 6609629612895315105ull, 674700668366753486ull}}, {{17259023275258806272ull, 4355292278140560072ull, 5011274737320973344ull, 134940133673350697ull}}, {{16071302476808060928ull, 8710584556281120145ull, 10022549474641946688ull, 269880267346701394ull}}, {{13695860879906570240ull, 17421169112562240291ull, 1598354875574341760ull, 539760534693402789ull}}, {{8944977686103588864ull, 16395594151414928967ull, 3196709751148683521ull, 1079521069386805578ull}}, {{5478344351962628096ull, 18036514089250627086ull, 11707388394455467673ull, 215904213877361115ull}}, {{10956688703925256192ull, 17626284104791702556ull, 4968032715201383731ull, 431808427754722231ull}}, {{3466633334140960768ull, 16805824135873853497ull, 9936065430402767463ull, 863616855509444462ull}}, {{8072024296312012800ull, 3361164827174770699ull, 9365910715564374139ull, 172723371101888892ull}}, {{16144048592624025600ull, 6722329654349541398ull, 285077357419196662ull, 345446742203777785ull}}, {{13841353111538499584ull, 13444659308699082797ull, 570154714838393324ull, 690893484407555570ull}}, {{6457619437049610240ull, 17446327120707457852ull, 114030942967678664ull, 138178696881511114ull}}, {{12915238874099220480ull, 16445910167705364088ull, 228061885935357329ull, 276357393763022228ull}}, {{7383733674488889344ull, 14445076261701176561ull, 456123771870714659ull, 552714787526044456ull}}, {{14767467348977778688ull, 10443408449692801506ull, 912247543741429319ull, 1105429575052088912ull}}, {{10332191099279376384ull, 5778030504680470624ull, 7561147138232106510ull, 221085915010417782ull}}, {{2217638124849201152ull, 11556061009360941249ull, 15122294276464213020ull, 442171830020835564ull}}, {{4435276249698402304ull, 4665377945012330882ull, 11797844479218874425ull, 884343660041671129ull}}, {{4576404064681590784ull, 15690470847970107469ull, 17116964154811416177ull, 176868732008334225ull}}, {{9152808129363181568ull, 12934197622230663322ull, 15787184235913280739ull, 353737464016668451ull}}, {{18305616258726363136ull, 7421651170751775028ull, 13127624398117009863ull, 707474928033336903ull}}, {{18418518510712913920ull, 5173679048892265328ull, 13693571323849132942ull, 141494985606667380ull}}, {{18390292947716276224ull, 10347358097784530657ull, 8940398573988714268ull, 282989971213334761ull}}, {{18333841821723000832ull, 2247972121859509699ull, 17880797147977428537ull, 565979942426669522ull}}, {{18220939569736450048ull, 4495944243719019399ull, 17314850222245305458ull, 1131959884853339045ull}}, {{11022885543431110656ull, 11967235292969534849ull, 3462970044449061091ull, 226391976970667809ull}}, {{3599027013152669696ull, 5487726512229518083ull, 6925940088898122183ull, 452783953941335618ull}}, {{7198054026305339392ull, 10975453024459036166ull, 13851880177796244366ull, 905567907882671236ull}}, {{12507657249486798848ull, 9573788234375627879ull, 6459724850301159196ull, 181113581576534247ull}}, {{6568570425264046080ull, 700832395041704143ull, 12919449700602318393ull, 362227163153068494ull}}, {{13137140850528092160ull, 1401664790083408286ull, 7392155327495085170ull, 724454326306136989ull}}, {{2627428170105618432ull, 15037728216984322950ull, 16235826324466658326ull, 144890865261227397ull}}, {{5254856340211236864ull, 11628712360259094284ull, 14024908575223765037ull, 289781730522454795ull}}, {{10509712680422473728ull, 4810680646808636952ull, 9603073076737978459ull, 579563461044909591ull}}, {{2572681287135395840ull, 9621361293617273905ull, 759402079766405302ull, 1159126922089819183ull}}, {{514536257427079168ull, 1924272258723454781ull, 11219926860179012030ull, 231825384417963836ull}}, {{1029072514854158336ull, 3848544517446909562ull, 3993109646648472444ull, 463650768835927673ull}}, {{2058145029708316672ull, 7697089034893819124ull, 7986219293296944888ull, 927301537671855346ull}}, {{11479675450167394304ull, 16296813065946405117ull, 5286592673401299300ull, 185460307534371069ull}}, {{4512606826625236992ull, 14146882058183258619ull, 10573185346802598601ull, 370920615068742138ull}}, {{9025213653250473984ull, 9847020042656965622ull, 2699626619895645587ull, 741841230137484277ull}}, {{5494391545392005120ull, 16726799267499034417ull, 7918622953462949763ull, 148368246027496855ull}}, {{10988783090784010240ull, 15006854461288517218ull, 15837245906925899527ull, 296736492054993710ull}}, {{3530822107858468864ull, 11566964848867482821ull, 13227747740142247439ull, 593472984109987421ull}}, {{7061644215716937728ull, 4687185624025414026ull, 8008751406574943263ull, 1186945968219974843ull}}, {{8791026472627208192ull, 4626785939546993128ull, 12669796725540719622ull, 237389193643994968ull}}, {{17582052945254416384ull, 9253571879093986256ull, 6892849377371887628ull, 474778387287989937ull}}, {{16717361816799281152ull, 60399684478420897ull, 13785698754743775257ull, 949556774575979874ull}}, {{14411518807585587200ull, 3701428751637594502ull, 17514535009916396344ull, 189911354915195974ull}}, {{10376293541461622784ull, 7402857503275189005ull, 16582325946123241072ull, 379822709830391949ull}}, {{2305843009213693952ull, 14805715006550378011ull, 14717907818536930528ull, 759645419660783899ull}}, {{11529215046068469760ull, 10339840630793896248ull, 17700976822675027398ull, 151929083932156779ull}}, {{4611686018427387904ull, 2232937187878240881ull, 16955209571640503181ull, 303858167864313559ull}}, {{9223372036854775808ull, 4465874375756481762ull, 15463675069571454746ull, 607716335728627119ull}}, {{0ull, 8931748751512963525ull, 12480606065433357876ull, 1215432671457254239ull}}, {{0ull, 1786349750302592705ull, 17253516472054312868ull, 243086534291450847ull}}, {{0ull, 3572699500605185410ull, 16060288870399074120ull, 486173068582901695ull}}, {{0ull, 7145399001210370820ull, 13673833667088596624ull, 972346137165803391ull}}, {{0ull, 1429079800242074164ull, 6424115548159629648ull, 194469227433160678ull}}, {{0ull, 2858159600484148328ull, 12848231096319259296ull, 388938454866321356ull}}, {{0ull, 5716319200968296656ull, 7249718118928966976ull, 777876909732642713ull}}, {{0ull, 15900659099161300624ull, 12517990068011524364ull, 155575381946528542ull}}, {{0ull, 13354574124613049632ull, 6589236062313497113ull, 311150763893057085ull}}, {{0ull, 8262404175516547648ull, 13178472124626994227ull, 622301527786114170ull}}, {{0ull, 16524808351033095296ull, 7910200175544436838ull, 1244603055572228341ull}}, {{0ull, 18062356929174260352ull, 5271388849850797690ull, 248920611114445668ull}}, {{0ull, 17677969784638969088ull, 10542777699701595381ull, 497841222228891336ull}}, {{0ull, 16909195495568386560ull, 2638811325693639147ull, 995682444457782673ull}}, {{0ull, 3381839099113677312ull, 11595808709364458799ull, 199136488891556534ull}}, {{0ull, 6763678198227354624ull, 4744873345019365982ull, 398272977783113069ull}}, {{0ull, 13527356396454709248ull, 9489746690038731964ull, 796545955566226138ull}}, {{0ull, 10084168908774762496ull, 12965995782233477362ull, 159309191113245227ull}}, {{0ull, 1721593743839973376ull, 7485247490757403109ull, 318618382226490455ull}}, {{0ull, 3443187487679946752ull, 14970494981514806218ull, 637236764452980910ull}}, {{0ull, 6886374975359893504ull, 11494245889320060820ull, 1274473528905961821ull}}, {{0ull, 5066623809813889024ull, 5988197992605922487ull, 254894705781192364ull}}, {{0ull, 10133247619627778048ull, 11976395985211844974ull, 509789411562384728ull}}, {{0ull, 1819751165546004480ull, 5506047896714138333ull, 1019578823124769457ull}}, {{0ull, 363950233109200896ull, 8479907208826648313ull, 203915764624953891ull}}, {{0ull, 727900466218401792ull, 16959814417653296626ull, 407831529249907782ull}}, {{0ull, 1455800932436803584ull, 15472884761597041636ull, 815663058499815565ull}}, {{0ull, 3980509001229271040ull, 3094576952319408327ull, 163132611699963113ull}}, {{0ull, 7961018002458542080ull, 6189153904638816654ull, 326265223399926226ull}}, {{0ull, 15922036004917084160ull, 12378307809277633308ull, 652530446799852452ull}}, {{0ull, 3184407200983416832ull, 9854359191339347308ull, 130506089359970490ull}}, {{0ull, 6368814401966833664ull, 1261974308969143000ull, 261012178719940981ull}}, {{0ull, 12737628803933667328ull, 2523948617938286000ull, 522024357439881962ull}}, {{0ull, 7028513534157783040ull, 5047897235876572001ull, 1044048714879763924ull}}, {{0ull, 1405702706831556608ull, 15766974706142955693ull, 208809742975952784ull}}, {{0ull, 2811405413663113216ull, 13087205338576359770ull, 417619485951905569ull}}, {{0ull, 5622810827326226432ull, 7727666603443167924ull, 835238971903811139ull}}, {{0ull, 12192608609690976256ull, 16302928579656274877ull, 167047794380762227ull}}, {{0ull, 5938473145672400896ull, 14159113085602998139ull, 334095588761524455ull}}, {{0ull, 11876946291344801792ull, 9871482097496444662ull, 668191177523048911ull}}, {{0ull, 13443435702494691328ull, 5663645234241199255ull, 133638235504609782ull}}, {{0ull, 8440127331279831040ull, 11327290468482398511ull, 267276471009219564ull}}, {{0ull, 16880254662559662080ull, 4207836863255245406ull, 534552942018439129ull}}, {{0ull, 15313765251409772544ull, 8415673726510490813ull, 1069105884036878258ull}}, {{0ull, 6752101865023864832ull, 12751181189527829132ull, 213821176807375651ull}}, {{0ull, 13504203730047729664ull, 7055618305346106648ull, 427642353614751303ull}}, {{0ull, 8561663386385907712ull, 14111236610692213297ull, 855284707229502606ull}}, {{0ull, 12780379121502912512ull, 6511596136880352982ull, 171056941445900521ull}}, {{0ull, 7114014169296273408ull, 13023192273760705965ull, 342113882891801042ull}}, {{0ull, 14228028338592546816ull, 7599640473811860314ull, 684227765783602085ull}}, {{0ull, 17603000926686150656ull, 1519928094762372062ull, 136845553156720417ull}}, {{0ull, 16759257779662749696ull, 3039856189524744125ull, 273691106313440834ull}}, {{0ull, 15071771485615947776ull, 6079712379049488251ull, 547382212626881668ull}}, {{0ull, 11696798897522343936ull, 12159424758098976503ull, 1094764425253763336ull}}, {{0ull, 17096755038472110080ull, 6121233766361705623ull, 218952885050752667ull}}, {{0ull, 15746766003234668544ull, 12242467532723411247ull, 437905770101505334ull}}, {{0ull, 13046787932759785472ull, 6038190991737270879ull, 875811540203010669ull}}, {{0ull, 13677404030777688064ull, 15965033457315095468ull, 175162308040602133ull}}, {{0ull, 8908063987845824512ull, 13483322840920639321ull, 350324616081204267ull}}, {{0ull, 17816127975691649024ull, 8519901608131727026ull, 700649232162408535ull}}, {{0ull, 7252574409880240128ull, 1703980321626345405ull, 140129846432481707ull}}, {{0ull, 14505148819760480256ull, 3407960643252690810ull, 280259692864963414ull}}, {{0ull, 10563553565811408896ull, 6815921286505381621ull, 560519385729926828ull}}, {{0ull, 2680363057913266176ull, 13631842573010763243ull, 1121038771459853656ull}}, {{0ull, 15293467870550294528ull, 6415717329344062971ull, 224207754291970731ull}}, {{0ull, 12140191667391037440ull, 12831434658688125943ull, 448415508583941462ull}}, {{0ull, 5833639261072523264ull, 7216125243666700271ull, 896831017167882925ull}}, {{0ull, 4856076666956414976ull, 1443225048733340054ull, 179366203433576585ull}}, {{0ull, 9712153333912829952ull, 2886450097466680108ull, 358732406867153170ull}}, {{0ull, 977562594116108288ull, 5772900194933360217ull, 717464813734306340ull}}, {{0ull, 7574210148307042304ull, 1154580038986672043ull, 143492962746861268ull}}, {{0ull, 15148420296614084608ull, 2309160077973344086ull, 286985925493722536ull}}, {{0ull, 11850096519518617600ull, 4618320155946688173ull, 573971850987445072ull}}, {{0ull, 5253448965327683584ull, 9236640311893376347ull, 1147943701974890144ull}}, {{0ull, 4740038607807447040ull, 16604723321346316562ull, 229588740394978028ull}}, {{0ull, 9480077215614894080ull, 14762702568983081508ull, 459177480789956057ull}}, {{0ull, 513410357520236544ull, 11078661064256611401ull, 918354961579912115ull}}, {{0ull, 3792030886245957632ull, 2215732212851322280ull, 183670992315982423ull}}, {{0ull, 7584061772491915264ull, 4431464425702644560ull, 367341984631964846ull}}, {{0ull, 15168123544983830528ull, 8862928851405289120ull, 734683969263929692ull}}, {{0ull, 10412322338480586752ull, 9151283399764878470ull, 146936793852785938ull}}, {{0ull, 2377900603251621888ull, 18302566799529756941ull, 293873587705571876ull}}, {{0ull, 4755801206503243776ull, 18158389525349962266ull, 587747175411143753ull}}, {{0ull, 9511602413006487552ull, 17870034976990372916ull, 1175494350822287507ull}}, {{0ull, 12970366926827028480ull, 10952704624881895229ull, 235098870164457501ull}}, {{0ull, 7493989779944505344ull, 3458665176054238843ull, 470197740328915003ull}}, {{0ull, 14987979559889010688ull, 6917330352108477686ull, 940395480657830006ull}}, {{0ull, 10376293541461622784ull, 5072814885163605860ull, 188079096131566001ull}}, {{0ull, 2305843009213693952ull, 10145629770327211721ull, 376158192263132002ull}}, {{0ull, 4611686018427387904ull, 1844515466944871826ull, 752316384526264005ull}}, {{0ull, 4611686018427387904ull, 368903093388974365ull, 150463276905252801ull}}, {{0ull, 9223372036854775808ull, 737806186777948730ull, 300926553810505602ull}}, {{0ull, 0ull, 1475612373555897461ull, 601853107621011204ull}}, {{0ull, 0ull, 2951224747111794922ull, 1203706215242022408ull}}, {{0ull, 0ull, 11658291393648089954ull, 240741243048404481ull}}, {{0ull, 0ull, 4869838713586628292ull, 481482486096808963ull}}, {{0ull, 0ull, 9739677427173256584ull, 962964972193617926ull}}, {{0ull, 0ull, 5637284300176561640ull, 192592994438723585ull}}, {{0ull, 0ull, 11274568600353123280ull, 385185988877447170ull}}, {{0ull, 0ull, 4102393126996694944ull, 770371977754894341ull}}, {{0ull, 0ull, 4509827440141249312ull, 154074395550978868ull}}, {{0ull, 0ull, 9019654880282498624ull, 308148791101957736ull}}, {{0ull, 0ull, 18039309760564997248ull, 616297582203915472ull}}, {{0ull, 0ull, 17631875447420442880ull, 1232595164407830945ull}}, {{0ull, 0ull, 3526375089484088576ull, 246519032881566189ull}}, {{0ull, 0ull, 7052750178968177152ull, 493038065763132378ull}}, {{0ull, 0ull, 14105500357936354304ull, 986076131526264756ull}}, {{0ull, 0ull, 6510448886329181184ull, 197215226305252951ull}}, {{0ull, 0ull, 13020897772658362368ull, 394430452610505902ull}}, {{0ull, 0ull, 7595051471607173120ull, 788860905221011805ull}}, {{0ull, 0ull, 1519010294321434624ull, 157772181044202361ull}}, {{0ull, 0ull, 3038020588642869248ull, 315544362088404722ull}}, {{0ull, 0ull, 6076041177285738496ull, 631088724176809444ull}}, {{0ull, 0ull, 12152082354571476992ull, 1262177448353618888ull}}, {{0ull, 0ull, 13498462915140026368ull, 252435489670723777ull}}, {{0ull, 0ull, 8550181756570501120ull, 504870979341447555ull}}, {{0ull, 0ull, 17100363513141002240ull, 1009741958682895110ull}}, {{0ull, 0ull, 3420072702628200448ull, 201948391736579022ull}}, {{0ull, 0ull, 6840145405256400896ull, 403896783473158044ull}}, {{0ull, 0ull, 13680290810512801792ull, 807793566946316088ull}}, {{0ull, 0ull, 13804104606328291328ull, 161558713389263217ull}}, {{0ull, 0ull, 9161465138947031040ull, 323117426778526435ull}}, {{0ull, 0ull, 18322930277894062080ull, 646234853557052870ull}}, {{0ull, 0ull, 3664586055578812416ull, 129246970711410574ull}}, {{0ull, 0ull, 7329172111157624832ull, 258493941422821148ull}}, {{0ull, 0ull, 14658344222315249664ull, 516987882845642296ull}}, {{0ull, 0ull, 10869944370920947712ull, 1033975765691284593ull}}, {{0ull, 0ull, 13242035318409920512ull, 206795153138256918ull}}, {{0ull, 0ull, 8037326563110289408ull, 413590306276513837ull}}, {{0ull, 0ull, 16074653126220578816ull, 827180612553027674ull}}, {{0ull, 0ull, 17972325884211757056ull, 165436122510605534ull}}, {{0ull, 0ull, 17497907694713962496ull, 330872245021211069ull}}, {{0ull, 0ull, 16549071315718373376ull, 661744490042422139ull}}, {{0ull, 0ull, 18067209522111315968ull, 132348898008484427ull}}, {{0ull, 0ull, 17687674970513080320ull, 264697796016968855ull}}, {{0ull, 0ull, 16928605867316609024ull, 529395592033937711ull}}, {{0ull, 0ull, 15410467660923666432ull, 1058791184067875423ull}}, {{0ull, 0ull, 14150139976410464256ull, 211758236813575084ull}}, {{0ull, 0ull, 9853535879111376896ull, 423516473627150169ull}}, {{0ull, 0ull, 1260327684513202176ull, 847032947254300339ull}}, {{0ull, 0ull, 15009460795870281728ull, 169406589450860067ull}}, {{0ull, 0ull, 11572177518031011840ull, 338813178901720135ull}}, {{0ull, 0ull, 4697610962352472064ull, 677626357803440271ull}}, {{0ull, 0ull, 4628871007212404736ull, 135525271560688054ull}}, {{0ull, 0ull, 9257742014424809472ull, 271050543121376108ull}}, {{0ull, 0ull, 68739955140067328ull, 542101086242752217ull}}, {{0ull, 0ull, 137479910280134656ull, 1084202172485504434ull}}, {{0ull, 0ull, 14784891241023668224ull, 216840434497100886ull}}, {{0ull, 0ull, 11123038408337784832ull, 433680868994201773ull}}, {{0ull, 0ull, 3799332742966018048ull, 867361737988403547ull}}, {{0ull, 0ull, 8138564178077024256ull, 173472347597680709ull}}, {{0ull, 0ull, 16277128356154048512ull, 346944695195361418ull}}, {{0ull, 0ull, 14107512638598545408ull, 693889390390722837ull}}, {{0ull, 0ull, 10200200157203529728ull, 138777878078144567ull}}, {{0ull, 0ull, 1953656240697507840ull, 277555756156289135ull}}, {{0ull, 0ull, 3907312481395015680ull, 555111512312578270ull}}, {{0ull, 0ull, 7814624962790031360ull, 1110223024625156540ull}}, {{0ull, 0ull, 1562924992558006272ull, 222044604925031308ull}}, {{0ull, 0ull, 3125849985116012544ull, 444089209850062616ull}}, {{0ull, 0ull, 6251699970232025088ull, 888178419700125232ull}}, {{0ull, 0ull, 8629037623530225664ull, 177635683940025046ull}}, {{0ull, 0ull, 17258075247060451328ull, 355271367880050092ull}}, {{0ull, 0ull, 16069406420411351040ull, 710542735760100185ull}}, {{0ull, 0ull, 3213881284082270208ull, 142108547152020037ull}}, {{0ull, 0ull, 6427762568164540416ull, 284217094304040074ull}}, {{0ull, 0ull, 12855525136329080832ull, 568434188608080148ull}}, {{0ull, 0ull, 7264306198948610048ull, 1136868377216160297ull}}, {{0ull, 0ull, 8831558869273542656ull, 227373675443232059ull}}, {{0ull, 0ull, 17663117738547085312ull, 454747350886464118ull}}, {{0ull, 0ull, 16879491403384619008ull, 909494701772928237ull}}, {{0ull, 0ull, 10754595910160744448ull, 181898940354585647ull}}, {{0ull, 0ull, 3062447746611937280ull, 363797880709171295ull}}, {{0ull, 0ull, 6124895493223874560ull, 727595761418342590ull}}, {{0ull, 0ull, 1224979098644774912ull, 145519152283668518ull}}, {{0ull, 0ull, 2449958197289549824ull, 291038304567337036ull}}, {{0ull, 0ull, 4899916394579099648ull, 582076609134674072ull}}, {{0ull, 0ull, 9799832789158199296ull, 1164153218269348144ull}}, {{0ull, 0ull, 16717361816799281152ull, 232830643653869628ull}}, {{0ull, 0ull, 14987979559889010688ull, 465661287307739257ull}}, {{0ull, 0ull, 11529215046068469760ull, 931322574615478515ull}}, {{0ull, 0ull, 2305843009213693952ull, 186264514923095703ull}}, {{0ull, 0ull, 4611686018427387904ull, 372529029846191406ull}}, {{0ull, 0ull, 9223372036854775808ull, 745058059692382812ull}}, {{0ull, 0ull, 9223372036854775808ull, 149011611938476562ull}}, {{0ull, 0ull, 0ull, 298023223876953125ull}}, {{0ull, 0ull, 0ull, 596046447753906250ull}}, {{0ull, 0ull, 0ull, 1192092895507812500ull}}, {{0ull, 0ull, 0ull, 238418579101562500ull}}, {{0ull, 0ull, 0ull, 476837158203125000ull}}, {{0ull, 0ull, 0ull, 953674316406250000ull}}, {{0ull, 0ull, 0ull, 190734863281250000ull}}, {{0ull, 0ull, 0ull, 381469726562500000ull}}, {{0ull, 0ull, 0ull, 762939453125000000ull}}, {{0ull, 0ull, 0ull, 152587890625000000ull}}, {{0ull, 0ull, 0ull, 305175781250000000ull}}, {{0ull, 0ull, 0ull, 610351562500000000ull}}, {{0ull, 0ull, 0ull, 1220703125000000000ull}}, {{0ull, 0ull, 0ull, 244140625000000000ull}}, {{0ull, 0ull, 0ull, 488281250000000000ull}}, {{0ull, 0ull, 0ull, 976562500000000000ull}}, {{0ull, 0ull, 0ull, 195312500000000000ull}}, {{0ull, 0ull, 0ull, 390625000000000000ull}}, {{0ull, 0ull, 0ull, 781250000000000000ull}}, {{0ull, 0ull, 0ull, 156250000000000000ull}}, {{0ull, 0ull, 0ull, 312500000000000000ull}}, {{0ull, 0ull, 0ull, 625000000000000000ull}}, {{0ull, 0ull, 0ull, 1250000000000000000ull}}, {{0ull, 0ull, 0ull, 250000000000000000ull}}, {{0ull, 0ull, 0ull, 500000000000000000ull}}, {{0ull, 0ull, 0ull, 1000000000000000000ull}}, {{0ull, 0ull, 0ull, 200000000000000000ull}}, {{0ull, 0ull, 0ull, 400000000000000000ull}}, {{0ull, 0ull, 0ull, 800000000000000000ull}}, {{0ull, 0ull, 0ull, 160000000000000000ull}}, {{0ull, 0ull, 0ull, 320000000000000000ull}}, {{0ull, 0ull, 0ull, 640000000000000000ull}}, {{0ull, 0ull, 0ull, 1280000000000000000ull}}, {{0ull, 0ull, 0ull, 256000000000000000ull}}, {{0ull, 0ull, 0ull, 512000000000000000ull}}, {{0ull, 0ull, 0ull, 1024000000000000000ull}}, {{0ull, 0ull, 0ull, 204800000000000000ull}}, {{0ull, 0ull, 0ull, 409600000000000000ull}}, {{0ull, 0ull, 0ull, 819200000000000000ull}}, {{0ull, 0ull, 0ull, 163840000000000000ull}}, {{0ull, 0ull, 0ull, 327680000000000000ull}}, {{0ull, 0ull, 0ull, 655360000000000000ull}}, {{0ull, 0ull, 0ull, 131072000000000000ull}}, {{0ull, 0ull, 0ull, 262144000000000000ull}}, {{0ull, 0ull, 0ull, 524288000000000000ull}}, {{0ull, 0ull, 0ull, 1048576000000000000ull}}, {{0ull, 0ull, 0ull, 209715200000000000ull}}, {{0ull, 0ull, 0ull, 419430400000000000ull}}, {{0ull, 0ull, 0ull, 838860800000000000ull}}, {{0ull, 0ull, 0ull, 167772160000000000ull}}, {{0ull, 0ull, 0ull, 335544320000000000ull}}, {{0ull, 0ull, 0ull, 671088640000000000ull}}, {{0ull, 0ull, 0ull, 134217728000000000ull}}, {{0ull, 0ull, 0ull, 268435456000000000ull}}, {{0ull, 0ull, 0ull, 536870912000000000ull}}, {{0ull, 0ull, 0ull, 1073741824000000000ull}}, {{0ull, 0ull, 0ull, 214748364800000000ull}}, {{0ull, 0ull, 0ull, 429496729600000000ull}}, {{0ull, 0ull, 0ull, 858993459200000000ull}}, {{0ull, 0ull, 0ull, 171798691840000000ull}}, {{0ull, 0ull, 0ull, 343597383680000000ull}}, {{0ull, 0ull, 0ull, 687194767360000000ull}}, {{0ull, 0ull, 0ull, 137438953472000000ull}}, {{0ull, 0ull, 0ull, 274877906944000000ull}}, {{0ull, 0ull, 0ull, 549755813888000000ull}}, {{0ull, 0ull, 0ull, 1099511627776000000ull}}, {{0ull, 0ull, 0ull, 219902325555200000ull}}, {{0ull, 0ull, 0ull, 439804651110400000ull}}, {{0ull, 0ull, 0ull, 879609302220800000ull}}, {{0ull, 0ull, 0ull, 175921860444160000ull}}, {{0ull, 0ull, 0ull, 351843720888320000ull}}, {{0ull, 0ull, 0ull, 703687441776640000ull}}, {{0ull, 0ull, 0ull, 140737488355328000ull}}, {{0ull, 0ull, 0ull, 281474976710656000ull}}, {{0ull, 0ull, 0ull, 562949953421312000ull}}, {{0ull, 0ull, 0ull, 1125899906842624000ull}}, {{0ull, 0ull, 0ull, 225179981368524800ull}}, {{0ull, 0ull, 0ull, 450359962737049600ull}}, {{0ull, 0ull, 0ull, 900719925474099200ull}}, {{0ull, 0ull, 0ull, 180143985094819840ull}}, {{0ull, 0ull, 0ull, 360287970189639680ull}}, {{0ull, 0ull, 0ull, 720575940379279360ull}}, {{0ull, 0ull, 0ull, 144115188075855872ull}}, {{0ull, 0ull, 0ull, 288230376151711744ull}}, {{0ull, 0ull, 0ull, 576460752303423488ull}}, {{0ull, 0ull, 0ull, 1152921504606846976ull}}, {{3689348814741910324ull, 3689348814741910323ull, 3689348814741910323ull, 230584300921369395ull}}, {{7378697629483820647ull, 7378697629483820646ull, 7378697629483820646ull, 461168601842738790ull}}, {{14757395258967641293ull, 14757395258967641292ull, 14757395258967641292ull, 922337203685477580ull}}, {{17708874310761169552ull, 10330176681277348904ull, 2951479051793528258ull, 184467440737095516ull}}, {{16971004547812787487ull, 2213609288845146193ull, 5902958103587056517ull, 368934881474191032ull}}, {{15495265021916023358ull, 4427218577690292387ull, 11805916207174113034ull, 737869762948382064ull}}, {{3099053004383204672ull, 11953490159763789447ull, 17118578500402463899ull, 147573952589676412ull}}, {{6198106008766409343ull, 5460236245818027278ull, 15790412927095376183ull, 295147905179352825ull}}, {{12396212017532818686ull, 10920472491636054556ull, 13134081780481200750ull, 590295810358705651ull}}, {{6345679961356085756ull, 3394200909562557497ull, 7821419487252849885ull, 1180591620717411303ull}}, {{1269135992271217152ull, 11746886626138242469ull, 12632330341676300946ull, 236118324143482260ull}}, {{2538271984542434303ull, 5047029178566933322ull, 6817916609643050277ull, 472236648286964521ull}}, {{5076543969084868605ull, 10094058357133866644ull, 13635833219286100554ull, 944473296573929042ull}}, {{1015308793816973721ull, 5708160486168683652ull, 10105864273341040757ull, 188894659314785808ull}}, {{2030617587633947442ull, 11416320972337367304ull, 1764984472972529898ull, 377789318629571617ull}}, {{4061235175267894884ull, 4385897870965182992ull, 3529968945945059797ull, 755578637259143234ull}}, {{11880293479279309947ull, 4566528388934946921ull, 15463389048156653252ull, 151115727451828646ull}}, {{5313842884849068277ull, 9133056777869893843ull, 12480034022603754888ull, 302231454903657293ull}}, {{10627685769698136554ull, 18266113555739787686ull, 6513323971497958160ull, 604462909807314587ull}}, {{2808627465686721491ull, 18085483037770023757ull, 13026647942995916321ull, 1208925819614629174ull}}, {{7940423122621164945ull, 3617096607554004751ull, 17362724847566824557ull, 241785163922925834ull}}, {{15880846245242329890ull, 7234193215108009502ull, 16278705621424097498ull, 483570327845851669ull}}, {{13314948416775108163ull, 14468386430216019005ull, 14110667169138643380ull, 967140655691703339ull}}, {{17420384942322662926ull, 17651072545010845093ull, 17579528692795369968ull, 193428131138340667ull}}, {{16394025810935774235ull, 16855401016312138571ull, 16712313311881188321ull, 386856262276681335ull}}, {{14341307548161996854ull, 15264057958914725527ull, 14977882550052825027ull, 773712524553362671ull}}, {{2868261509632399371ull, 14120858036008676075ull, 6684925324752475328ull, 154742504910672534ull}}, {{5736523019264798742ull, 9794971998307800534ull, 13369850649504950657ull, 309485009821345068ull}}, {{11473046038529597483ull, 1143199922906049452ull, 8292957225300349699ull, 618970019642690137ull}}, {{4499348003349643349ull, 2286399845812098905ull, 16585914450600699398ull, 1237940039285380274ull}}, {{8278567230153749317ull, 7835977598646240427ull, 18074578149087781172ull, 247588007857076054ull}}, {{16557134460307498633ull, 15671955197292480854ull, 17702412224466010728ull, 495176015714152109ull}}, {{14667524846905445649ull, 12897166320875410093ull, 16958080375222469841ull, 990352031428304219ull}}, {{14001551413606820100ull, 2579433264175082018ull, 18149011334012135261ull, 198070406285660843ull}}, {{9556358753504088583ull, 5158866528350164037ull, 17851278594314718906ull, 396140812571321687ull}}, {{665973433298625550ull, 10317733056700328075ull, 17255813114919886196ull, 792281625142643375ull}}, {{3822543501401635434ull, 5752895426081975938ull, 3451162622983977239ull, 158456325028528675ull}}, {{7645087002803270867ull, 11505790852163951876ull, 6902325245967954478ull, 316912650057057350ull}}, {{15290174005606541733ull, 4564837630618352136ull, 13804650491935908957ull, 633825300114114700ull}}, {{12133603937503531849ull, 9129675261236704273ull, 9162556910162266298ull, 1267650600228229401ull}}, {{9805418416984527017ull, 16583330311214982147ull, 5521860196774363582ull, 253530120045645880ull}}, {{1164092760259502417ull, 14719916548720412679ull, 11043720393548727165ull, 507060240091291760ull}}, {{2328185520519004833ull, 10993089023731273742ull, 3640696713387902715ull, 1014120480182583521ull}}, {{11533683548329531937ull, 5887966619488165071ull, 4417488157419490866ull, 202824096036516704ull}}, {{4620623022949512257ull, 11775933238976330143ull, 8834976314838981732ull, 405648192073033408ull}}, {{9241246045899024513ull, 5105122404243108670ull, 17669952629677963465ull, 811296384146066816ull}}, {{5537598023921715226ull, 4710373295590532057ull, 7223339340677503016ull, 162259276829213363ull}}, {{11075196047843430452ull, 9420746591181064114ull, 14446678681355006032ull, 324518553658426726ull}}, {{3703648021977309287ull, 394749108652576613ull, 10446613289000460449ull, 649037107316853453ull}}, {{740729604395461858ull, 7457647451214335969ull, 13157369102025823059ull, 129807421463370690ull}}, {{1481459208790923715ull, 14915294902428671938ull, 7867994130342094502ull, 259614842926741381ull}}, {{2962918417581847430ull, 11383845731147792260ull, 15735988260684189005ull, 519229685853482762ull}}, {{5925836835163694859ull, 4320947388586032904ull, 13025232447658826395ull, 1038459371706965525ull}}, {{15942562626000380265ull, 864189477717206580ull, 2605046489531765279ull, 207691874341393105ull}}, {{13438381178291208914ull, 1728378955434413161ull, 5210092979063530558ull, 415383748682786210ull}}, {{8430018282872866211ull, 3456757910868826323ull, 10420185958127061116ull, 830767497365572420ull}}, {{16443398915542214535ull, 4380700396915675587ull, 2084037191625412223ull, 166153499473114484ull}}, {{14440053757374877454ull, 8761400793831351175ull, 4168074383250824446ull, 332306998946228968ull}}, {{10433363441040203292ull, 17522801587662702351ull, 8336148766501648892ull, 664613997892457936ull}}, {{16844067947175681952ull, 14572606761758271439ull, 5356578568042240101ull, 132922799578491587ull}}, {{15241391820641812287ull, 10698469449806991263ull, 10713157136084480203ull, 265845599156983174ull}}, {{12036039567574072957ull, 2950194825904430911ull, 2979570198459408791ull, 531691198313966349ull}}, {{5625335061438594297ull, 5900389651808861823ull, 5959140396918817582ull, 1063382396627932698ull}}, {{12193113456513449829ull, 1180077930361772364ull, 12259874523609494486ull, 212676479325586539ull}}, {{5939482839317348042ull, 2360155860723544729ull, 6073004973509437356ull, 425352958651173079ull}}, {{11878965678634696084ull, 4720311721447089458ull, 12146009947018874712ull, 850705917302346158ull}}, {{13443839579952670187ull, 944062344289417891ull, 13497248433629505912ull, 170141183460469231ull}}, {{8440935086195788757ull, 1888124688578835783ull, 8547752793549460208ull, 340282366920938463ull}}, {{16881870172391577514ull, 3776249377157671566ull, 17095505587098920416ull, 680564733841876926ull}}, {{14444420478704046473ull, 8133947504915354959ull, 7108449932161694406ull, 136112946768375385ull}}, {{10442096883698541329ull, 16267895009830709919ull, 14216899864323388812ull, 272225893536750770ull}}, {{2437449693687531042ull, 14089045945951868223ull, 9987055654937226009ull, 544451787073501541ull}}, {{4874899387375062083ull, 9731347818194184830ull, 1527367236164900403ull, 1088903574147003083ull}}, {{4664328692216922740ull, 5635618378380747289ull, 11373519891458711050ull, 217780714829400616ull}}, {{9328657384433845480ull, 11271236756761494578ull, 4300295709207870484ull, 435561429658801233ull}}, {{210570695158139343ull, 4095729439813437541ull, 8600591418415740969ull, 871122859317602466ull}}, {{3731462953773538192ull, 819145887962687508ull, 5409467098425058517ull, 174224571863520493ull}}, {{7462925907547076384ull, 1638291775925375016ull, 10818934196850117034ull, 348449143727040986ull}}, {{14925851815094152767ull, 3276583551850750032ull, 3191124319990682452ull, 696898287454081973ull}}, {{10363867992502651200ull, 655316710370150006ull, 11706271308223867460ull, 139379657490816394ull}}, {{2280991911295750784ull, 1310633420740300013ull, 4965798542738183304ull, 278759314981632789ull}}, {{4561983822591501568ull, 2621266841480600026ull, 9931597085476366608ull, 557518629963265578ull}}, {{9123967645183003135ull, 5242533682961200052ull, 1416450097243181600ull, 1115037259926531157ull}}, {{16582188788004241920ull, 8427204366076060656ull, 7661987648932456966ull, 223007451985306231ull}}, {{14717633502298932224ull, 16854408732152121313ull, 15323975297864913932ull, 446014903970612462ull}}, {{10988522930888312831ull, 15262073390594691011ull, 12201206522020276249ull, 892029807941224925ull}}, {{2197704586177662567ull, 17809809937086579495ull, 2440241304404055249ull, 178405961588244985ull}}, {{4395409172355325133ull, 17172875800463607374ull, 4880482608808110499ull, 356811923176489970ull}}, {{8790818344710650265ull, 15899007527217663132ull, 9760965217616220999ull, 713623846352979940ull}}, {{5447512483684040377ull, 17937196764411173919ull, 1952193043523244199ull, 142724769270595988ull}}, {{10895024967368080753ull, 17427649455112796222ull, 3904386087046488399ull, 285449538541191976ull}}, {{3343305861026609889ull, 16408554836516040829ull, 7808772174092976799ull, 570899077082383952ull}}, {{6686611722053219777ull, 14370365599322530042ull, 15617544348185953599ull, 1141798154164767904ull}}, {{1337322344410643956ull, 13942119564090236978ull, 17880904128604832012ull, 228359630832953580ull}}, {{2674644688821287911ull, 9437495054470922340ull, 17315064183500112409ull, 456719261665907161ull}}, {{5349289377642575822ull, 428246035232293064ull, 16183384293290673203ull, 913438523331814323ull}}, {{1069857875528515165ull, 3774998021788368936ull, 14304723302883865610ull, 182687704666362864ull}}, {{2139715751057030329ull, 7549996043576737872ull, 10162702532058179604ull, 365375409332725729ull}}, {{4279431502114060657ull, 15099992087153475744ull, 1878660990406807592ull, 730750818665451459ull}}, {{855886300422812132ull, 6709347232172605472ull, 15133127457049002811ull, 146150163733090291ull}}, {{1711772600845624263ull, 13418694464345210944ull, 11819510840388454006ull, 292300327466180583ull}}, {{3423545201691248526ull, 8390644854980870272ull, 5192277607067356397ull, 584600654932361167ull}}, {{6847090403382497052ull, 16781289709961740544ull, 10384555214134712794ull, 1169201309864722334ull}}, {{8748115710160320057ull, 14424304386218079078ull, 16834306301794583851ull, 233840261972944466ull}}, {{17496231420320640114ull, 10401864698726606540ull, 15221868529879616087ull, 467680523945888933ull}}, {{16545718766931728611ull, 2356985323743661465ull, 11996992986049680559ull, 935361047891777867ull}}, {{6998492568128256046ull, 4160745879490642616ull, 9778096226693756758ull, 187072209578355573ull}}, {{13996985136256512091ull, 8321491758981285232ull, 1109448379677961900ull, 374144419156711147ull}}, {{9547226198803472566ull, 16642983517962570465ull, 2218896759355923800ull, 748288838313422294ull}}, {{16666840498728335806ull, 18085991962560155385ull, 15201174610838826052ull, 149657767662684458ull}}, {{14886936923747119996ull, 17725239851410759155ull, 11955605147968100489ull, 299315535325368917ull}}, {{11327129773784688376ull, 17003735629111966695ull, 5464466222226649363ull, 598631070650737835ull}}, {{4207515473859825135ull, 15560727184514381775ull, 10928932444453298727ull, 1197262141301475670ull}}, {{8220200724255785674ull, 10490843066386697001ull, 2185786488890659745ull, 239452428260295134ull}}, {{16440401448511571347ull, 2534942059063842386ull, 4371572977781319491ull, 478904856520590268ull}}, {{14434058823313591078ull, 5069884118127684773ull, 8743145955562638982ull, 957809713041180536ull}}, {{6576160579404628539ull, 12082023267851267924ull, 5437978005854438119ull, 191561942608236107ull}}, {{13152321158809257078ull, 5717302461992984232ull, 10875956011708876239ull, 383123885216472214ull}}, {{7857898243908962539ull, 11434604923985968465ull, 3305167949708200862ull, 766247770432944429ull}}, {{5260928463523702831ull, 5976269799539104016ull, 15418428848909281465ull, 153249554086588885ull}}, {{10521856927047405662ull, 11952539599078208032ull, 12390113624109011314ull, 306499108173177771ull}}, {{2596969780385259708ull, 5458335124446864449ull, 6333483174508471013ull, 612998216346355543ull}}, {{5193939560770519416ull, 10916670248893728898ull, 12666966349016942026ull, 1225996432692711086ull}}, {{1038787912154103884ull, 9562031679262566426ull, 6222742084545298728ull, 245199286538542217ull}}, {{2077575824308207767ull, 677319284815581236ull, 12445484169090597457ull, 490398573077084434ull}}, {{4155151648616415533ull, 1354638569631162472ull, 6444224264471643298ull, 980797146154168869ull}}, {{15588425588690924400ull, 7649625343410053140ull, 16046240111861969952ull, 196159429230833773ull}}, {{12730107103672297183ull, 15299250686820106281ull, 13645736150014388288ull, 392318858461667547ull}}, {{7013470133635042750ull, 12151757299930660947ull, 8844728226319224961ull, 784637716923335095ull}}, {{12470740470952739520ull, 6119700274728042512ull, 1768945645263844992ull, 156927543384667019ull}}, {{6494736868195927423ull, 12239400549456085025ull, 3537891290527689984ull, 313855086769334038ull}}, {{12989473736391854846ull, 6032057025202618434ull, 7075782581055379969ull, 627710173538668076ull}}, {{7532203399074158076ull, 12064114050405236869ull, 14151565162110759938ull, 1255420347077336152ull}}, {{16263835938782472908ull, 2412822810081047373ull, 10209010661905972634ull, 251084069415467230ull}}, {{14080927803855394200ull, 4825645620162094747ull, 1971277250102393652ull, 502168138830934461ull}}, {{9715111534001236784ull, 9651291240324189495ull, 3942554500204787304ull, 1004336277661868922ull}}, {{5632371121542157680ull, 5619607062806748222ull, 8167208529524778107ull, 200867255532373784ull}}, {{11264742243084315360ull, 11239214125613496444ull, 16334417059049556214ull, 401734511064747568ull}}, {{4082740412459079104ull, 4031684177517441273ull, 14222090044389560813ull, 803469022129495137ull}}, {{11884594526717546791ull, 806336835503488254ull, 10223115638361732809ull, 160693804425899027ull}}, {{5322444979725541965ull, 1612673671006976509ull, 1999487203013914002ull, 321387608851798055ull}}, {{10644889959451083930ull, 3225347342013953018ull, 3998974406027828004ull, 642775217703596110ull}}, {{9507675621374037433ull, 15402464727370431896ull, 799794881205565600ull, 128555043540719222ull}}, {{568607169038523249ull, 12358185381031312177ull, 1599589762411131201ull, 257110087081438444ull}}, {{1137214338077046498ull, 6269626688353072738ull, 3199179524822262403ull, 514220174162876888ull}}, {{2274428676154092995ull, 12539253376706145476ull, 6398359049644524806ull, 1028440348325753776ull}}, {{11522932179456549569ull, 9886548304825049741ull, 4969020624670815284ull, 205688069665150755ull}}, {{4599120285203547521ull, 1326352535940547867ull, 9938041249341630569ull, 411376139330301510ull}}, {{9198240570407095042ull, 2652705071881095734ull, 1429338424973709522ull, 822752278660603021ull}}, {{9218345743565239655ull, 11598587458601950116ull, 3975216499736652227ull, 164550455732120604ull}}, {{18436691487130479310ull, 4750430843494348616ull, 7950432999473304455ull, 329100911464241208ull}}, {{18426638900551407003ull, 9500861686988697233ull, 15900865998946608910ull, 658201822928482416ull}}, {{18442723039077922694ull, 5589521152139649769ull, 6869522014531232105ull, 131640364585696483ull}}, {{18438702004446293771ull, 11179042304279299539ull, 13739044029062464210ull, 263280729171392966ull}}, {{18430659935183035926ull, 3911340534849047463ull, 9031343984415376805ull, 526561458342785933ull}}, {{18414575796656520236ull, 7822681069698094927ull, 18062687968830753610ull, 1053122916685571866ull}}, {{14750961603557035017ull, 5253885028681529308ull, 7301886408508061045ull, 210624583337114373ull}}, {{11055179133404518418ull, 10507770057363058617ull, 14603772817016122090ull, 421249166674228746ull}}, {{3663614193099485219ull, 2568796041016565619ull, 10760801560322692565ull, 842498333348457493ull}}, {{8111420468103717691ull, 11581805652429044093ull, 13220206756290269482ull, 168499666669691498ull}}, {{16222840936207435381ull, 4716867231148536570ull, 7993669438870987349ull, 336999333339382997ull}}, {{13998937798705319145ull, 9433734462297073141ull, 15987338877741974698ull, 673998666678765994ull}}, {{13867834003966794799ull, 9265444521943235274ull, 17954863034516036232ull, 134799733335753198ull}}, {{9288923934224037981ull, 84144970176918933ull, 17462981995322520849ull, 269599466671506397ull}}, {{131103794738524346ull, 168289940353837867ull, 16479219916935490082ull, 539198933343012795ull}}, {{262207589477048692ull, 336579880707675734ull, 14511695760161428548ull, 1078397866686025591ull}}, {{11120487962121140708ull, 14824711235109176439ull, 6591687966774196032ull, 215679573337205118ull}}, {{3794231850532729800ull, 11202678396508801263ull, 13183375933548392065ull, 431359146674410236ull}}, {{7588463701065459600ull, 3958612719308050910ull, 7920007793387232515ull, 862718293348820473ull}}, {{12585739184438822890ull, 11859768988087341151ull, 12652048002903177472ull, 172543658669764094ull}}, {{6724734295168094164ull, 5272793902465130687ull, 6857351932096803329ull, 345087317339528189ull}}, {{13449468590336188327ull, 10545587804930261374ull, 13714703864193606658ull, 690174634679056378ull}}, {{2689893718067237666ull, 5798466375727962598ull, 13810987217064452301ull, 138034926935811275ull}}, {{5379787436134475331ull, 11596932751455925196ull, 9175230360419352986ull, 276069853871622551ull}}, {{10759574872268950662ull, 4747121429202298776ull, 18350460720838705973ull, 552139707743245102ull}}, {{3072405670828349707ull, 9494242858404597553ull, 18254177367967860330ull, 1104279415486490205ull}}, {{11682527578391400911ull, 1898848571680919510ull, 3650835473593572066ull, 220855883097298041ull}}, {{4918311083073250206ull, 3797697143361839021ull, 7301670947187144132ull, 441711766194596082ull}}, {{9836622166146500412ull, 7595394286723678042ull, 14603341894374288264ull, 883423532389192164ull}}, {{1967324433229300083ull, 12587125301570466578ull, 17678063637842498945ull, 176684706477838432ull}}, {{3934648866458600165ull, 6727506529431381540ull, 16909383201975446275ull, 353369412955676865ull}}, {{7869297732917200330ull, 13455013058862763080ull, 15372022330241340934ull, 706738825911353731ull}}, {{1573859546583440066ull, 2691002611772552616ull, 6763753280790178510ull, 141347765182270746ull}}, {{3147719093166880132ull, 5382005223545105232ull, 13527506561580357020ull, 282695530364541492ull}}, {{6295438186333760264ull, 10764010447090210464ull, 8608269049451162424ull, 565391060729082985ull}}, {{12590876372667520527ull, 3081276820470869312ull, 17216538098902324849ull, 1130782121458165970ull}}, {{6207524089275414429ull, 15373650623061815155ull, 3443307619780464969ull, 226156424291633194ull}}, {{12415048178550828857ull, 12300557172414078694ull, 6886615239560929939ull, 452312848583266388ull}}, {{6383352283392106098ull, 6154370271118605773ull, 13773230479121859879ull, 904625697166532776ull}}, {{12344716900904152190ull, 1230874054223721154ull, 6443994910566282299ull, 180925139433306555ull}}, {{6242689728098752763ull, 2461748108447442309ull, 12887989821132564598ull, 361850278866613110ull}}, {{12485379456197505525ull, 4923496216894884618ull, 7329235568555577580ull, 723700557733226221ull}}, {{17254471150207142398ull, 4674048058120887246ull, 5155195928453025839ull, 144740111546645244ull}}, {{16062198226704733180ull, 9348096116241774493ull, 10310391856906051678ull, 289480223093290488ull}}, {{13677652379699914743ull, 249448158773997371ull, 2174039640102551741ull, 578960446186580977ull}}, {{8908560685690277870ull, 498896317547994743ull, 4348079280205103482ull, 1157920892373161954ull}}, {{16539107396105696867ull, 3789128078251509271ull, 15627011115008661989ull, 231584178474632390ull}}, {{14631470718501842118ull, 7578256156503018543ull, 12807278156307772362ull, 463168356949264781ull}}, {{10816197363294132620ull, 15156512313006037087ull, 7167812238905993108ull, 926336713898529563ull}}, {{13231285916884557494ull, 6720651277343117740ull, 12501608892006929591ull, 185267342779705912ull}}, {{8015827760059563371ull, 13441302554686235481ull, 6556473710304307566ull, 370534685559411825ull}}, {{16031655520119126742ull, 8435861035662919346ull, 13112947420608615133ull, 741069371118823650ull}}, {{17963726362991466642ull, 12755218651358314838ull, 2622589484121723026ull, 148213874223764730ull}}, {{17480708652273381667ull, 7063693229007078061ull, 5245178968243446053ull, 296427748447529460ull}}, {{16514673230837211717ull, 14127386458014156123ull, 10490357936486892106ull, 592855496895058920ull}}, {{14582602387964871818ull, 9808028842318760631ull, 2533971799264232597ull, 1185710993790117841ull}}, {{17673915736560615657ull, 13029652212689483095ull, 4196143174594756842ull, 237142198758023568ull}}, {{16901087399411679697ull, 7612560351669414575ull, 8392286349189513685ull, 474284397516047136ull}}, {{15355430725113807777ull, 15225120703338829151ull, 16784572698379027370ull, 948568795032094272ull}}, {{14139132589248492525ull, 10423721770151586476ull, 10735612169159626120ull, 189713759006418854ull}}, {{9831521104787433434ull, 2400699466593621337ull, 3024480264609700625ull, 379427518012837709ull}}, {{1216298135865315252ull, 4801398933187242675ull, 6048960529219401250ull, 758855036025675418ull}}, {{11311306071398794020ull, 12028326230863179504ull, 12277838550069611219ull, 151771007205135083ull}}, {{4175868069088036424ull, 5609908388016807393ull, 6108933026429670823ull, 303542014410270167ull}}, {{8351736138176072848ull, 11219816776033614786ull, 12217866052859341646ull, 607084028820540334ull}}, {{16703472276352145696ull, 3992889478357677956ull, 5988988032009131677ull, 1214168057641080669ull}}, {{10719392084754249786ull, 4487926710413445914ull, 15955192865369467628ull, 242833611528216133ull}}, {{2992040095798947956ull, 8975853420826891829ull, 13463641657029383640ull, 485667223056432267ull}}, {{5984080191597895911ull, 17951706841653783658ull, 8480539240349215664ull, 971334446112864535ull}}, {{8575513667803399829ull, 18347736627298398024ull, 1696107848069843132ull, 194266889222572907ull}}, {{17151027335606799657ull, 18248729180887244432ull, 3392215696139686265ull, 388533778445145814ull}}, {{15855310597504047698ull, 18050714288064937249ull, 6784431392279372531ull, 777067556890291628ull}}, {{14239108563726540510ull, 18367538116580628742ull, 12424932722681605475ull, 155413511378058325ull}}, {{10031473053743529403ull, 18288332159451705869ull, 6403121371653659335ull, 310827022756116651ull}}, {{1616202033777507189ull, 18129920245193860123ull, 12806242743307318671ull, 621654045512233302ull}}, {{3232404067555014378ull, 17813096416678168630ull, 7165741412905085727ull, 1243308091024466605ull}}, {{8025178442994823522ull, 10941316912819454372ull, 1433148282581017145ull, 248661618204893321ull}}, {{16050356885989647044ull, 3435889751929357128ull, 2866296565162034291ull, 497323236409786642ull}}, {{13653969698269742472ull, 6871779503858714257ull, 5732593130324068582ull, 994646472819573284ull}}, {{13798840383879679464ull, 5063704715513653174ull, 15903913885032455009ull, 198929294563914656ull}}, {{9150936694049807312ull, 10127409431027306349ull, 13361083696355358402ull, 397858589127829313ull}}, {{18301873388099614624ull, 1808074788345061082ull, 8275423319001165189ull, 795717178255658627ull}}, {{14728421121845653895ull, 4050963772410922539ull, 9033782293284053684ull, 159143435651131725ull}}, {{11010098169981756173ull, 8101927544821845079ull, 18067564586568107368ull, 318286871302263450ull}}, {{3573452266253960730ull, 16203855089643690159ull, 17688385099426663120ull, 636573742604526901ull}}, {{7146904532507921459ull, 13960966105577828702ull, 16930026125143774625ull, 1273147485209053803ull}}, {{1429380906501584292ull, 13860239665341296710ull, 14454051669254485894ull, 254629497041810760ull}}, {{2858761813003168584ull, 9273735256973041804ull, 10461359264799420173ull, 509258994083621521ull}}, {{5717523626006337167ull, 100726440236531992ull, 2475974455889288731ull, 1018517988167243043ull}}, {{4832853539943177757ull, 14777540547014947691ull, 11563241335403588715ull, 203703597633448608ull}}, {{9665707079886355514ull, 11108337020320343766ull, 4679738597097625815ull, 407407195266897217ull}}, {{884670086063159411ull, 3769929966931135917ull, 9359477194195251631ull, 814814390533794434ull}}, {{7555631646696452529ull, 753985993386227183ull, 16629290697806691619ull, 162962878106758886ull}}, {{15111263293392905057ull, 1507971986772454366ull, 14811837321903831622ull, 325925756213517773ull}}, {{11775782513076258498ull, 3015943973544908733ull, 11176930570098111628ull, 651851512427035547ull}}, {{13423202946840982670ull, 603188794708981746ull, 9614083743503442972ull, 130370302485407109ull}}, {{8399661819972413723ull, 1206377589417963493ull, 781423413297334328ull, 260740604970814219ull}}, {{16799323639944827445ull, 2412755178835926986ull, 1562846826594668656ull, 521481209941628438ull}}, {{15151903206180103274ull, 4825510357671853973ull, 3125693653189337312ull, 1042962419883256876ull}}, {{6719729455977930978ull, 12033148515760101764ull, 4314487545379777785ull, 208592483976651375ull}}, {{13439458911955861956ull, 5619552957810651912ull, 8628975090759555571ull, 417184967953302750ull}}, {{8432173750202172296ull, 11239105915621303825ull, 17257950181519111142ull, 834369935906605500ull}}, {{9065132379524255106ull, 9626518812608081411ull, 3451590036303822228ull, 166873987181321100ull}}, {{18130264759048510211ull, 806293551506611206ull, 6903180072607644457ull, 333747974362642200ull}}, {{17813785444387468806ull, 1612587103013222413ull, 13806360145215288914ull, 667495948725284400ull}}, {{10941454718361314408ull, 15079912679570285775ull, 2761272029043057782ull, 133499189745056880ull}}, {{3436165363013077200ull, 11713081285431019935ull, 5522544058086115565ull, 266998379490113760ull}}, {{6872330726026154399ull, 4979418497152488254ull, 11045088116172231131ull, 533996758980227520ull}}, {{13744661452052308797ull, 9958836994304976508ull, 3643432158634910646ull, 1067993517960455041ull}}, {{2748932290410461760ull, 9370465028344815948ull, 4418035246468892452ull, 213598703592091008ull}}, {{5497864580820923519ull, 294185982980080280ull, 8836070492937784905ull, 427197407184182016ull}}, {{10995729161641847038ull, 588371965960160560ull, 17672140985875569810ull, 854394814368364032ull}}, {{9577843461812190054ull, 7496372022675852758ull, 10913125826658934608ull, 170878962873672806ull}}, {{708942849914828492ull, 14992744045351705517ull, 3379507579608317600ull, 341757925747345613ull}}, {{1417885699829656984ull, 11538744016993859418ull, 6759015159216635201ull, 683515851494691226ull}}, {{283577139965931397ull, 9686446432882592530ull, 5041151846585237363ull, 136703170298938245ull}}, {{567154279931862794ull, 926148792055633444ull, 10082303693170474727ull, 273406340597876490ull}}, {{1134308559863725587ull, 1852297584111266888ull, 1717863312631397838ull, 546812681195752981ull}}, {{2268617119727451174ull, 3704595168222533776ull, 3435726625262795676ull, 1093625362391505962ull}}, {{15211118682913131528ull, 11808965477870237724ull, 8065842954536379781ull, 218725072478301192ull}}, {{11975493292116711440ull, 5171186882030923833ull, 16131685909072759563ull, 437450144956602384ull}}, {{5504242510523871263ull, 10342373764061847667ull, 13816627744435967510ull, 874900289913204769ull}}, {{4790197316846684576ull, 16825870011780010826ull, 17520720807854834794ull, 174980057982640953ull}}, {{9580394633693369152ull, 15204995949850470036ull, 16594697542000117973ull, 349960115965281907ull}}, {{714045193677186687ull, 11963247825991388457ull, 14742651010290684331ull, 699920231930563815ull}}, {{11210855482961168307ull, 6081998379940188014ull, 2948530202058136866ull, 139984046386112763ull}}, {{3974966892212784998ull, 12163996759880376029ull, 5897060404116273732ull, 279968092772225526ull}}, {{7949933784425569996ull, 5881249446051200442ull, 11794120808232547465ull, 559936185544451052ull}}, {{15899867568851139992ull, 11762498892102400884ull, 5141497542755543314ull, 1119872371088902105ull}}, {{14248019957995958968ull, 17109895037388121469ull, 1028299508551108662ull, 223974474217780421ull}}, {{10049295842282366320ull, 15773046001066691323ull, 2056599017102217325ull, 447948948435560842ull}}, {{1651847610855181024ull, 13099347928423831031ull, 4113198034204434651ull, 895897896871121684ull}}, {{4019718336912946528ull, 2619869585684766206ull, 15580034865808528223ull, 179179579374224336ull}}, {{8039436673825893056ull, 5239739171369532412ull, 12713325657907504830ull, 358359158748448673ull}}, {{16078873347651786112ull, 10479478342739064824ull, 6979907242105458044ull, 716718317496897347ull}}, {{3215774669530357223ull, 5785244483289723288ull, 8774679077904912255ull, 143343663499379469ull}}, {{6431549339060714445ull, 11570488966579446576ull, 17549358155809824510ull, 286687326998758938ull}}, {{12863098678121428890ull, 4694233859449341536ull, 16651972237910097405ull, 573374653997517877ull}}, {{7279453282533306163ull, 9388467718898683073ull, 14857200402110643194ull, 1146749307995035755ull}}, {{8834588285990481879ull, 16635088802747377907ull, 2971440080422128638ull, 229349861599007151ull}}, {{17669176571980963758ull, 14823433531785204198ull, 5942880160844257277ull, 458699723198014302ull}}, {{16891609070252375900ull, 11200122989860856781ull, 11885760321688514555ull, 917399446396028604ull}}, {{3378321814050475180ull, 16997419856939812649ull, 17134547323305344203ull, 183479889279205720ull}}, {{6756643628100950360ull, 15548095640170073682ull, 15822350572901136791ull, 366959778558411441ull}}, {{13513287256201900720ull, 12649447206630595748ull, 13197957072092721967ull, 733919557116822883ull}}, {{13770703895466111114ull, 2529889441326119149ull, 13707637858644275363ull, 146783911423364576ull}}, {{9094663717222670612ull, 5059778882652238299ull, 8968531643578999110ull, 293567822846729153ull}}, {{18189327434445341223ull, 10119557765304476598ull, 17937063287157998220ull, 587135645693458306ull}}, {{17931910795181130829ull, 1792371456899401581ull, 17427382500606444825ull, 1174271291386916613ull}}, {{18343777418003867459ull, 11426520735605611285ull, 14553522944347019934ull, 234854258277383322ull}}, {{18240810762298183301ull, 4406297397501670955ull, 10660301814984488253ull, 469708516554766645ull}}, {{18034877450886814986ull, 8812594795003341911ull, 2873859556259424890ull, 939417033109533291ull}}, {{10985673119661183644ull, 5451867773742578705ull, 4264120725993795301ull, 187883406621906658ull}}, {{3524602165612815672ull, 10903735547485157411ull, 8528241451987590602ull, 375766813243813316ull}}, {{7049204331225631343ull, 3360727021260763206ull, 17056482903975181205ull, 751533626487626632ull}}, {{12477887310470857239ull, 8050843033735973287ull, 10789994210278856887ull, 150306725297525326ull}}, {{6509030547232162861ull, 16101686067471946575ull, 3133244346848162158ull, 300613450595050653ull}}, {{13018061094464325721ull, 13756628061234341534ull, 6266488693696324317ull, 601226901190101306ull}}, {{7589378115219099825ull, 9066512048759131453ull, 12532977387392648635ull, 1202453802380202612ull}}, {{1517875623043819965ull, 9192000039235646937ull, 9885293106962350373ull, 240490760476040522ull}}, {{3035751246087639930ull, 18384000078471293874ull, 1323842140215149130ull, 480981520952081045ull}}, {{6071502492175279860ull, 18321256083233036132ull, 2647684280430298261ull, 961963041904162090ull}}, {{12282346942660786942ull, 7353600031388517549ull, 529536856086059652ull, 192392608380832418ull}}, {{6117949811612022267ull, 14707200062777035099ull, 1059073712172119304ull, 384785216761664836ull}}, {{12235899623224044534ull, 10967656051844518582ull, 2118147424344238609ull, 769570433523329672ull}}, {{13515226368870539877ull, 5882880025110814039ull, 7802327114352668368ull, 153914086704665934ull}}, {{8583708664031528137ull, 11765760050221628079ull, 15604654228705336736ull, 307828173409331868ull}}, {{17167417328063056274ull, 5084776026733704542ull, 12762564383701121857ull, 615656346818663737ull}}, {{15888090582416560932ull, 10169552053467409085ull, 7078384693692692098ull, 1231312693637327475ull}}, {{14245664560709043156ull, 13101956854919212786ull, 1415676938738538419ull, 246262538727465495ull}}, {{10044585047708534696ull, 7757169636128873957ull, 2831353877477076839ull, 492525077454930990ull}}, {{1642426021707517776ull, 15514339272257747915ull, 5662707754954153678ull, 985050154909861980ull}}, {{11396531648567234525ull, 14170914298677280552ull, 1132541550990830735ull, 197010030981972396ull}}, {{4346319223424917434ull, 9895084523645009489ull, 2265083101981661471ull, 394020061963944792ull}}, {{8692638446849834867ull, 1343424973580467362ull, 4530166203963322943ull, 788040123927889584ull}}, {{16495922948337608267ull, 7647382624199914118ull, 15663428499760305881ull, 157608024785577916ull}}, {{14545101822965664917ull, 15294765248399828237ull, 12880112925811060146ull, 315216049571155833ull}}, {{10643459572221778217ull, 12142786423090104859ull, 7313481777912568677ull, 630432099142311667ull}}, {{2840175070734004818ull, 5838828772470658103ull, 14626963555825137355ull, 1260864198284623334ull}}, {{7946732643630621610ull, 15925161013461772913ull, 17682787970132668763ull, 252172839656924666ull}}, {{15893465287261243220ull, 13403577953213994210ull, 16918831866555785911ull, 504345679313849333ull}}, {{13340186500812934824ull, 8360411832718436805ull, 15390919659402020207ull, 1008691358627698667ull}}, {{17425432559130228258ull, 16429477625511328653ull, 10456881561364224687ull, 201738271725539733ull}}, {{16404121044550904899ull, 14412211177313105691ull, 2467019049018897759ull, 403476543451079467ull}}, {{14361498015392258182ull, 10377678280916659767ull, 4934038098037795519ull, 806953086902158934ull}}, {{2872299603078451637ull, 13143582100409062923ull, 15744202878575200396ull, 161390617380431786ull}}, {{5744599206156903273ull, 7840420127108574230ull, 13041661683440849177ull, 322781234760863573ull}}, {{11489198412313806546ull, 15680840254217148460ull, 7636579293172146738ull, 645562469521727147ull}}, {{2297839682462761310ull, 3136168050843429692ull, 8906013488118249994ull, 129112493904345429ull}}, {{4595679364925522619ull, 6272336101686859384ull, 17812026976236499988ull, 258224987808690858ull}}, {{9191358729851045237ull, 12544672203373718768ull, 17177309878763448360ull, 516449975617381717ull}}, {{18382717459702090473ull, 6642600333037885920ull, 15907875683817345105ull, 1032899951234763435ull}}, {{3676543491940418095ull, 1328520066607577184ull, 3181575136763469021ull, 206579990246952687ull}}, {{7353086983880836190ull, 2657040133215154368ull, 6363150273526938042ull, 413159980493905374ull}}, {{14706173967761672379ull, 5314080266430308736ull, 12726300547053876084ull, 826319960987810748ull}}, {{14009281237778065446ull, 8441513682769882393ull, 13613306553636506186ull, 165263992197562149ull}}, {{9571818401846579275ull, 16883027365539764787ull, 8779869033563460756ull, 330527984395124299ull}}, {{696892729983606933ull, 15319310657369977959ull, 17559738067126921513ull, 661055968790248598ull}}, {{139378545996721387ull, 6753210946215905915ull, 14579994057651115272ull, 132211193758049719ull}}, {{278757091993442774ull, 13506421892431811830ull, 10713244041592678928ull, 264422387516099439ull}}, {{557514183986885547ull, 8566099711154072044ull, 2979744009475806241ull, 528844775032198879ull}}, {{1115028367973771093ull, 17132199422308144088ull, 5959488018951612482ull, 1057689550064397758ull}}, {{11291052117820485189ull, 3426439884461628817ull, 12259944048016053466ull, 211537910012879551ull}}, {{4135360161931418761ull, 6852879768923257635ull, 6073144022322555316ull, 423075820025759103ull}}, {{8270720323862837521ull, 13705759537846515270ull, 12146288044645110632ull, 846151640051518206ull}}, {{12722190508998298474ull, 13809198351795034023ull, 6118606423670932449ull, 169230328010303641ull}}, {{6997636944287045332ull, 9171652629880516431ull, 12237212847341864899ull, 338460656020607282ull}}, {{13995273888574090663ull, 18343305259761032862ull, 6027681620974178182ull, 676921312041214565ull}}, {{17556450036682459426ull, 11047358681436027218ull, 1205536324194835636ull, 135384262408242913ull}}, {{16666155999655367235ull, 3647973289162502821ull, 2411072648389671273ull, 270768524816485826ull}}, {{14885567925601182854ull, 7295946578325005643ull, 4822145296779342546ull, 541537049632971652ull}}, {{11324391777492814091ull, 14591893156650011287ull, 9644290593558685092ull, 1083074099265943304ull}}, {{13332924799724293788ull, 6607727446071912580ull, 16686253377679378311ull, 216614819853188660ull}}, {{8219105525739035960ull, 13215454892143825161ull, 14925762681649205006ull, 433229639706377321ull}}, {{16438211051478071920ull, 7984165710578098706ull, 11404781289588858397ull, 866459279412754643ull}}, {{6976991025037524708ull, 1596833142115619741ull, 13349002702143502649ull, 173291855882550928ull}}, {{13953982050075049415ull, 3193666284231239482ull, 8251261330577453682ull, 346583711765101857ull}}, {{9461220026440547213ull, 6387332568462478965ull, 16502522661154907364ull, 693167423530203714ull}}, {{12960290449513840413ull, 12345512957918226762ull, 18057899791198622765ull, 138633484706040742ull}}, {{7473836825318129209ull, 6244281842126901909ull, 17669055508687693915ull, 277266969412081485ull}}, {{14947673650636258417ull, 12488563684253803818ull, 16891366943665836214ull, 554533938824162971ull}}, {{11448603227562965217ull, 6530383294798056021ull, 15335989813622120813ull, 1109067877648325943ull}}, {{9668418274996413690ull, 4995425473701521527ull, 14135244406950155132ull, 221813575529665188ull}}, {{890092476283275764ull, 9990850947403043055ull, 9823744740190758648ull, 443627151059330377ull}}, {{1780184952566551527ull, 1534957821096534494ull, 1200745406671965681ull, 887254302118660755ull}}, {{356036990513310306ull, 3996340378961217222ull, 240149081334393136ull, 177450860423732151ull}}, {{712073981026620611ull, 7992680757922434444ull, 480298162668786272ull, 354901720847464302ull}}, {{1424147962053241222ull, 15985361515844868888ull, 960596325337572544ull, 709803441694928604ull}}, {{3974178407152558568ull, 14265118747394704747ull, 14949514524035155801ull, 141960688338985720ull}}, {{7948356814305117135ull, 10083493421079857878ull, 11452284974360759987ull, 283921376677971441ull}}, {{15896713628610234270ull, 1720242768450164140ull, 4457825875011968359ull, 567842753355942883ull}}, {{13346683183510916924ull, 3440485536900328281ull, 8915651750023936718ull, 1135685506711885766ull}}, {{2669336636702183385ull, 15445492366347706949ull, 5472479164746697666ull, 227137101342377153ull}}, {{5338673273404366770ull, 12444240658985862282ull, 10944958329493395333ull, 454274202684754306ull}}, {{10677346546808733539ull, 6441737244262172948ull, 3443172585277239051ull, 908548405369508613ull}}, {{9514166938845567355ull, 16045742707820075882ull, 11756680961281178779ull, 181709681073901722ull}}, {{581589803981583093ull, 13644741341930600149ull, 5066617848852805943ull, 363419362147803445ull}}, {{1163179607963166185ull, 8842738610151648682ull, 10133235697705611887ull, 726838724295606890ull}}, {{14990031180560274530ull, 9147245351514150382ull, 2026647139541122377ull, 145367744859121378ull}}, {{11533318287410997444ull, 18294490703028300765ull, 4053294279082244754ull, 290735489718242756ull}}, {{4619892501112443271ull, 18142237332347049915ull, 8106588558164489509ull, 581470979436485512ull}}, {{9239785002224886542ull, 17837730590984548214ull, 16213177116328979019ull, 1162941958872971024ull}}, {{9226654629928797955ull, 14635592562422640612ull, 18000030682233437096ull, 232588391774594204ull}}, {{6565186148044294ull, 10824441051135729609ull, 17553317290757322577ull, 465176783549188409ull}}, {{13130372296088588ull, 3202138028561907602ull, 16659890507805093539ull, 930353567098376819ull}}, {{2626074459217718ull, 11708474049938112490ull, 18089373360528660000ull, 186070713419675363ull}}, {{5252148918435435ull, 4970204026166673364ull, 17732002647347768385ull, 372141426839350727ull}}, {{10504297836870870ull, 9940408052333346728ull, 17017261220985985154ull, 744282853678701455ull}}, {{7380798489051194821ull, 16745476869434310638ull, 3403452244197197030ull, 148856570735740291ull}}, {{14761596978102389641ull, 15044209665159069660ull, 6806904488394394061ull, 297713141471480582ull}}, {{11076449882495227666ull, 11641675256608587705ull, 13613808976788788123ull, 595426282942961164ull}}, {{3706155691280903715ull, 4836606439507623795ull, 8780873879868024631ull, 1190852565885922329ull}}, {{741231138256180743ull, 967321287901524759ull, 16513570034941246219ull, 238170513177184465ull}}, {{1482462276512361486ull, 1934642575803049518ull, 14580395996172940822ull, 476341026354368931ull}}, {{2964924553024722972ull, 3869285151606099036ull, 10714047918636330028ull, 952682052708737863ull}}, {{7971682540088765241ull, 4463205845063130130ull, 13210856027952996975ull, 190536410541747572ull}}, {{15943365080177530482ull, 8926411690126260260ull, 7974967982196442334ull, 381072821083495145ull}}, {{13439986086645509348ull, 17852823380252520521ull, 15949935964392884668ull, 762145642166990290ull}}, {{17445392476296743163ull, 14638611120276235073ull, 3189987192878576933ull, 152429128433398058ull}}, {{16444040878883934709ull, 10830478166842918531ull, 6379974385757153867ull, 304858256866796116ull}}, {{14441337684058317801ull, 3214212259976285447ull, 12759948771514307735ull, 609716513733592232ull}}, {{10435931294407083986ull, 6428424519952570895ull, 7073153469319063854ull, 1219433027467184465ull}}, {{16844581517849058090ull, 16043080162958155471ull, 1414630693863812770ull, 243886605493436893ull}}, {{15242418961988564564ull, 13639416252206759327ull, 2829261387727625541ull, 487773210986873786ull}}, {{12038093850267577512ull, 8832088430703967039ull, 5658522775455251083ull, 975546421973747572ull}}, {{17165014029021156796ull, 1766417686140793407ull, 8510402184574870863ull, 195109284394749514ull}}, {{15883283984332761975ull, 3532835372281586815ull, 17020804369149741726ull, 390218568789499028ull}}, {{13319823894955972333ull, 7065670744563173631ull, 15594864664589931836ull, 780437137578998057ull}}, {{17421360037958835760ull, 12481180593138365695ull, 10497670562401807013ull, 156087427515799611ull}}, {{16395976002208119903ull, 6515617112567179775ull, 2548597051094062411ull, 312174855031599223ull}}, {{14345207930706688190ull, 13031234225134359551ull, 5097194102188124822ull, 624349710063198446ull}}, {{10243671787703824763ull, 7615724376559167487ull, 10194388204376249645ull, 1248699420126396892ull}}, {{16806129616508406246ull, 8901842504795654143ull, 9417575270359070575ull, 249739884025279378ull}}, {{15165515159307260875ull, 17803685009591308287ull, 388406467008589534ull, 499479768050558757ull}}, {{11884286244904970134ull, 17160625945473064959ull, 776812934017179069ull, 998959536101117514ull}}, {{9755554878464814674ull, 14500171633320343961ull, 14912757845771077106ull, 199791907220223502ull}}, {{1064365683220077731ull, 10553599192931136307ull, 11378771617832602597ull, 399583814440447005ull}}, {{2128731366440155461ull, 2660454312152720998ull, 4310799161955653579ull, 799167628880894011ull}}, {{11493792717513762062ull, 532090862430544199ull, 4551508647133041039ull, 159833525776178802ull}}, {{4540841361317972508ull, 1064181724861088399ull, 9103017294266082078ull, 319667051552357604ull}}, {{9081682722635945015ull, 2128363449722176798ull, 18206034588532164156ull, 639334103104715208ull}}, {{18163365445271890030ull, 4256726899444353596ull, 17965325103354776696ull, 1278668206209430417ull}}, {{18390068348022019299ull, 11919391824114601688ull, 10971762650154775985ull, 255733641241886083ull}}, {{18333392622334486982ull, 5392039574519651761ull, 3496781226600000355ull, 511467282483772167ull}}, {{18220041170959422347ull, 10784079149039303523ull, 6993562453200000710ull, 1022934564967544334ull}}, {{11022705863675705116ull, 16914211088775501997ull, 16156107749607641434ull, 204586912993508866ull}}, {{3598667653641858616ull, 15381678103841452379ull, 13865471425505731253ull, 409173825987017733ull}}, {{7197335307283717231ull, 12316612133973353142ull, 9284198777301910891ull, 818347651974035467ull}}, {{1439467061456743447ull, 13531368871020401598ull, 9235537384944202824ull, 163669530394807093ull}}, {{2878934122913486893ull, 8615993668331251580ull, 24330696178854033ull, 327339060789614187ull}}, {{5757868245826973785ull, 17231987336662503160ull, 48661392357708066ull, 654678121579228374ull}}, {{1151573649165394757ull, 3446397467332500632ull, 14767127537439182906ull, 130935624315845674ull}}, {{2303147298330789514ull, 6892794934665001264ull, 11087511001168814196ull, 261871248631691349ull}}, {{4606294596661579028ull, 13785589869330002528ull, 3728277928628076776ull, 523742497263382699ull}}, {{9212589193323158056ull, 9124435664950453440ull, 7456555857256153553ull, 1047484994526765398ull}}, {{5531866653406541935ull, 5514235947732001011ull, 12559357615676961680ull, 209496998905353079ull}}, {{11063733306813083869ull, 11028471895464002022ull, 6671971157644371744ull, 418993997810706159ull}}, {{3680722539916616122ull, 3610199717218452429ull, 13343942315288743489ull, 837987995621412318ull}}, {{4425493322725233548ull, 8100737572927511132ull, 13736834907283479667ull, 167597599124282463ull}}, {{8850986645450467095ull, 16201475145855022264ull, 9026925740857407718ull, 335195198248564927ull}}, {{17701973290900934190ull, 13956206218000492912ull, 18053851481714815437ull, 670390396497129854ull}}, {{14608441102405917808ull, 6480590058342008905ull, 18368165555310604380ull, 134078079299425970ull}}, {{10770138131102284000ull, 12961180116684017811ull, 18289587036911657144ull, 268156158598851941ull}}, {{3093532188495016383ull, 7475616159658484007ull, 18132430000113762673ull, 536312317197703883ull}}, {{6187064376990032765ull, 14951232319316968014ull, 17818115926517973730ull, 1072624634395407767ull}}, {{4926761690139916877ull, 10368944093347214249ull, 10942320814787415392ull, 214524926879081553ull}}, {{9853523380279833753ull, 2291144112984876882ull, 3437897555865279169ull, 429049853758163107ull}}, {{1260302686850115889ull, 4582288225969753765ull, 6875795111730558338ull, 858099707516326214ull}}, {{7630758166853843825ull, 8295155274677771399ull, 16132554281313752960ull, 171619941503265242ull}}, {{15261516333707687649ull, 16590310549355542798ull, 13818364488917954304ull, 343239883006530485ull}}, {{12076288593705823681ull, 14733877025001533981ull, 9189984904126356993ull, 686479766013060971ull}}, {{2415257718741164737ull, 17704170663967948089ull, 5527345795567181721ull, 137295953202612194ull}}, {{4830515437482329473ull, 16961597254226344562ull, 11054691591134363443ull, 274591906405224388ull}}, {{9661030874964658945ull, 15476450434743137508ull, 3662639108559175271ull, 549183812810448777ull}}, {{875317676219766273ull, 12506156795776723401ull, 7325278217118350543ull, 1098367625620897554ull}}, {{11243109979469684225ull, 9879928988639165326ull, 16222450902391311401ull, 219673525124179510ull}}, {{4039475885229816833ull, 1313113903568779037ull, 13998157731073071187ull, 439347050248359021ull}}, {{8078951770459633665ull, 2626227807137558074ull, 9549571388436590758ull, 878694100496718043ull}}, {{1615790354091926733ull, 4214594376169421938ull, 12977960721913049121ull, 175738820099343608ull}}, {{3231580708183853466ull, 8429188752338843876ull, 7509177370116546626ull, 351477640198687217ull}}, {{6463161416367706932ull, 16858377504677687752ull, 15018354740233093252ull, 702955280397374434ull}}, {{12360678727499272356ull, 7061024315677447873ull, 17761066207014259943ull, 140591056079474886ull}}, {{6274613381288993096ull, 14122048631354895747ull, 17075388340318968270ull, 281182112158949773ull}}, {{12549226762577986192ull, 9797353189000239878ull, 15704032606928384925ull, 562364224317899547ull}}, {{6651709451446420767ull, 1147962304290928141ull, 12961321140147218235ull, 1124728448635799095ull}}, {{5019690705031194477ull, 229592460858185628ull, 2592264228029443647ull, 224945689727159819ull}}, {{10039381410062388954ull, 459184921716371256ull, 5184528456058887294ull, 449891379454319638ull}}, {{1632018746415226291ull, 918369843432742513ull, 10369056912117774588ull, 899782758908639276ull}}, {{7705101378766865905ull, 14941069227654189795ull, 5763160197165465240ull, 179956551781727855ull}}, {{15410202757533731809ull, 11435394381598827974ull, 11526320394330930481ull, 359913103563455710ull}}, {{12373661441357912002ull, 4424044689488104333ull, 4605896714952309347ull, 719826207126911421ull}}, {{6164081103013492724ull, 11952855382123351836ull, 4610528157732372192ull, 143965241425382284ull}}, {{12328162206026985448ull, 5458966690537152056ull, 9221056315464744385ull, 287930482850764568ull}}, {{6209580338344419279ull, 10917933381074304113ull, 18442112630929488770ull, 575860965701529136ull}}, {{12419160676688838557ull, 3389122688439056610ull, 18437481188149425925ull, 1151721931403058273ull}}, {{13551878579563498681ull, 11745870981913542291ull, 14755542681855616154ull, 230344386280611654ull}}, {{8657013085417445746ull, 5044997890117532967ull, 11064341290001680693ull, 460688772561223309ull}}, {{17314026170834891492ull, 10089995780235065934ull, 3681938506293809770ull, 921377545122446619ull}}, {{14530851678392709268ull, 16775394415014654479ull, 15493782960226403246ull, 184275509024489323ull}}, {{10614959283075866920ull, 15104044756319757343ull, 12540821846743254877ull, 368551018048978647ull}}, {{2783174492442182224ull, 11761345438929963071ull, 6634899619776958139ull, 737102036097957295ull}}, {{556634898488436445ull, 17109664346753633907ull, 1326979923955391627ull, 147420407219591459ull}}, {{1113269796976872890ull, 15772584619797716198ull, 2653959847910783255ull, 294840814439182918ull}}, {{2226539593953745780ull, 13098425165885880780ull, 5307919695821566511ull, 589681628878365836ull}}, {{4453079187907491559ull, 7750106258062209944ull, 10615839391643133023ull, 1179363257756731672ull}}, {{15648011096549139605ull, 1550021251612441988ull, 9501865507812447251ull, 235872651551346334ull}}, {{12849278119388727593ull, 3100042503224883977ull, 556986941915342886ull, 471745303102692669ull}}, {{7251812165067903570ull, 6200085006449767955ull, 1113973883830685772ull, 943490606205385338ull}}, {{1450362433013580714ull, 1240017001289953591ull, 11290841220991868124ull, 188698121241077067ull}}, {{2900724866027161428ull, 2480034002579907182ull, 4134938368274184632ull, 377396242482154135ull}}, {{5801449732054322856ull, 4960068005159814364ull, 8269876736548369264ull, 754792484964308270ull}}, {{12228336390636595541ull, 15749408859999604165ull, 1653975347309673852ull, 150958496992861654ull}}, {{6009928707563639466ull, 13052073646289656715ull, 3307950694619347705ull, 301916993985723308ull}}, {{12019857415127278931ull, 7657403218869761814ull, 6615901389238695411ull, 603833987971446616ull}}, {{5592970756545006246ull, 15314806437739523629ull, 13231802778477390822ull, 1207667975942893232ull}}, {{12186640595534732219ull, 17820356546515546018ull, 10025058185179298810ull, 241533595188578646ull}}, {{5926537117359912822ull, 17193969019321540421ull, 1603372296649046005ull, 483067190377157293ull}}, {{11853074234719825644ull, 15941193964933529226ull, 3206744593298092011ull, 966134380754314586ull}}, {{13438661291169696099ull, 10566936422470526491ull, 4330697733401528725ull, 193226876150862917ull}}, {{8430578508629840581ull, 2687128771231501367ull, 8661395466803057451ull, 386453752301725834ull}}, {{16861157017259681161ull, 5374257542463002734ull, 17322790933606114902ull, 772907504603451668ull}}, {{18129626662419577525ull, 1074851508492600546ull, 14532604630946953950ull, 154581500920690333ull}}, {{17812509251129603434ull, 2149703016985201093ull, 10618465188184356284ull, 309163001841380667ull}}, {{17178274428549655252ull, 4299406033970402187ull, 2790186302659160952ull, 618326003682761335ull}}, {{15909804783389758888ull, 8598812067940804375ull, 5580372605318321904ull, 1236652007365522670ull}}, {{17939356215645593071ull, 16477157672555802167ull, 1116074521063664380ull, 247330401473104534ull}}, {{17431968357581634525ull, 14507571271402052719ull, 2232149042127328761ull, 494660802946209068ull}}, {{16417192641453717434ull, 10568398469094553823ull, 4464298084254657523ull, 989321605892418136ull}}, {{10662136157774564134ull, 16871074952786552057ull, 4582208431592841827ull, 197864321178483627ull}}, {{2877528241839576651ull, 15295405831863552499ull, 9164416863185683655ull, 395728642356967254ull}}, {{5755056483679153301ull, 12144067590017553382ull, 18328833726371367311ull, 791457284713934508ull}}, {{4840360111477740984ull, 17186208776971151969ull, 14733813189500004431ull, 158291456942786901ull}}, {{9680720222955481967ull, 15925673480232752322ull, 11020882305290457247ull, 316582913885573803ull}}, {{914696372201412318ull, 13404602886755953029ull, 3595020536871362879ull, 633165827771147607ull}}, {{1829392744402824635ull, 8362461699802354442ull, 7190041073742725759ull, 1266331655542295214ull}}, {{365878548880564927ull, 12740538784186201858ull, 16195403473716186444ull, 253266331108459042ull}}, {{731757097761129854ull, 7034333494662852100ull, 13944062873722821273ull, 506532662216918085ull}}, {{1463514195522259708ull, 14068666989325704200ull, 9441381673736090930ull, 1013065324433836171ull}}, {{3982051653846362265ull, 6503082212607051163ull, 5577625149489128509ull, 202613064886767234ull}}, {{7964103307692724530ull, 13006164425214102326ull, 11155250298978257018ull, 405226129773534468ull}}, {{15928206615385449059ull, 7565584776718653036ull, 3863756524246962421ull, 810452259547068937ull}}, {{17943036582044731105ull, 12581163399569461576ull, 8151448934333213130ull, 162090451909413787ull}}, {{17439329090379910594ull, 6715582725429371537ull, 16302897868666426261ull, 324180903818827574ull}}, {{16431914107050269571ull, 13431165450858743075ull, 14159051663623300906ull, 648361807637655149ull}}, {{3286382821410053915ull, 2686233090171748615ull, 17589205591692301474ull, 129672361527531029ull}}, {{6572765642820107829ull, 5372466180343497230ull, 16731667109675051332ull, 259344723055062059ull}}, {{13145531285640215657ull, 10744932360686994460ull, 15016590145640551048ull, 518689446110124119ull}}, {{7844318497570879697ull, 3043120647664437305ull, 11586436217571550481ull, 1037378892220248239ull}}, {{1568863699514175940ull, 608624129532887461ull, 17074682502481951389ull, 207475778444049647ull}}, {{3137727399028351879ull, 1217248259065774922ull, 15702620931254351162ull, 414951556888099295ull}}, {{6275454798056703758ull, 2434496518131549844ull, 12958497788799150708ull, 829903113776198591ull}}, {{12323137403837071722ull, 15244294562593951261ull, 6281048372501740464ull, 165980622755239718ull}}, {{6199530733964591827ull, 12041845051478350907ull, 12562096745003480929ull, 331961245510479436ull}}, {{12399061467929183653ull, 5636946029247150198ull, 6677449416297410243ull, 663922491020958873ull}}, {{17237207552553478024ull, 4816738020591340362ull, 12403536327485213018ull, 132784498204191774ull}}, {{16027671031397404431ull, 9633476041182680725ull, 6360328581260874420ull, 265568996408383549ull}}, {{13608597989085257245ull, 820208008655809835ull, 12720657162521748841ull, 531137992816767098ull}}, {{8770451904460962874ull, 1640416017311619671ull, 6994570251333946066ull, 1062275985633534197ull}}, {{16511485639859833868ull, 11396129647688054903ull, 8777611679750609859ull, 212455197126706839ull}}, {{14576227206010116120ull, 4345515221666558191ull, 17555223359501219719ull, 424910394253413678ull}}, {{10705710338310680623ull, 8691030443333116383ull, 16663702645292887822ull, 849820788506827357ull}}, {{9519839697145956771ull, 16495601347634264569ull, 10711438158542398210ull, 169964157701365471ull}}, {{592935320582361926ull, 14544458621558977523ull, 2976132243375244805ull, 339928315402730943ull}}, {{1185870641164723852ull, 10642173169408403430ull, 5952264486750489611ull, 679856630805461886ull}}, {{7615871757716765417ull, 9507132263365501332ull, 4879801712092008245ull, 135971326161092377ull}}, {{15231743515433530834ull, 567520453021451048ull, 9759603424184016491ull, 271942652322184754ull}}, {{12016742957157510051ull, 1135040906042902097ull, 1072462774658481366ull, 543885304644369509ull}}, {{5586741840605468486ull, 2270081812085804195ull, 2144925549316962732ull, 1087770609288739018ull}}, {{1117348368121093698ull, 454016362417160839ull, 11497031554089123516ull, 217554121857747803ull}}, {{2234696736242187395ull, 908032724834321678ull, 4547319034468695416ull, 435108243715495607ull}}, {{4469393472484374789ull, 1816065449668643356ull, 9094638068937390832ull, 870216487430991214ull}}, {{8272576323980695605ull, 4052561904675638994ull, 16576322872755119459ull, 174043297486198242ull}}, {{16545152647961391209ull, 8105123809351277988ull, 14705901671800687302ull, 348086594972396485ull}}, {{14643561222213230801ull, 16210247618702555977ull, 10965059269891822988ull, 696173189944792971ull}}, {{6618061059184556484ull, 17999444782708152488ull, 5882360668720274920ull, 139234637988958594ull}}, {{13236122118369112967ull, 17552145491706753360ull, 11764721337440549841ull, 278469275977917188ull}}, {{8025500163028674317ull, 16657546909703955105ull, 5082698601171548067ull, 556938551955834377ull}}, {{16051000326057348634ull, 14868349745698358594ull, 10165397202343096135ull, 1113877103911668754ull}}, {{14278246509437200697ull, 17731065208107313011ull, 16790474699436260519ull, 222775420782333750ull}}, {{10109748945164849777ull, 17015386342505074407ull, 15134205325162969423ull, 445550841564667501ull}}, {{1772753816620147938ull, 15584028611300597199ull, 11821666576616387231ull, 891101683129335003ull}}, {{11422597207549760558ull, 17874200981227760732ull, 13432379759549008415ull, 178220336625867000ull}}, {{4398450341389969499ull, 17301657888745969849ull, 8418015445388465215ull, 356440673251734001ull}}, {{8796900682779938997ull, 16156571703782388082ull, 16836030890776930431ull, 712881346503468002ull}}, {{1759380136555987800ull, 14299360784982208586ull, 10745903807639206732ull, 142576269300693600ull}}, {{3518760273111975599ull, 10151977496254865556ull, 3045063541568861849ull, 285152538601387201ull}}, {{7037520546223951198ull, 1857210918800179496ull, 6090127083137723699ull, 570305077202774402ull}}, {{14075041092447902395ull, 3714421837600358992ull, 12180254166275447398ull, 1140610154405548804ull}}, {{17572403477457221772ull, 8121581997003892444ull, 17193446092222730772ull, 228122030881109760ull}}, {{16698062881204891928ull, 16243163994007784889ull, 15940148110735909928ull, 456244061762219521ull}}, {{14949381688700232239ull, 14039583914306018163ull, 13433552147762268241ull, 912488123524439043ull}}, {{10368573967223867095ull, 17565312041828844925ull, 13754756873778184617ull, 182497624704887808ull}}, {{2290403860738182573ull, 16683880009948138235ull, 9062769673846817619ull, 364995249409775617ull}}, {{4580807721476365145ull, 14921015946186724854ull, 18125539347693635239ull, 729990498819551234ull}}, {{8294859173779093676ull, 14052249633463075940ull, 18382503128506368340ull, 145998099763910246ull}}, {{16589718347558187351ull, 9657755193216600264ull, 18318262183303185065ull, 291996199527820493ull}}, {{14732692621406823086ull, 868766312723648913ull, 18189780292896818515ull, 583992399055640987ull}}, {{11018641169104094555ull, 1737532625447297827ull, 17932816512084085414ull, 1167984798111281975ull}}, {{5893077048562729235ull, 15104901784057100858ull, 3586563302416817082ull, 233596959622256395ull}}, {{11786154097125458469ull, 11763059494404650100ull, 7173126604833634165ull, 467193919244512790ull}}, {{5125564120541365321ull, 5079374915099748585ull, 14346253209667268331ull, 934387838489025580ull}}, {{4714461638850183388ull, 4705223797761860040ull, 2869250641933453666ull, 186877567697805116ull}}, {{9428923277700366775ull, 9410447595523720080ull, 5738501283866907332ull, 373755135395610232ull}}, {{411102481691181934ull, 374151117337888545ull, 11477002567733814665ull, 747510270791220464ull}}, {{14839615755305877680ull, 14832225482435219001ull, 17052795772514404225ull, 149502054158244092ull}}, {{11232487436902203743ull, 11217706891160886387ull, 15658847471319256835ull, 299004108316488185ull}}, {{4018230800094855870ull, 3988669708612221159ull, 12870950868928962055ull, 598008216632976371ull}}, {{8036461600189711740ull, 7977339417224442318ull, 7295157664148372494ull, 1196016433265952743ull}}, {{1607292320037942348ull, 8974165512928709110ull, 12527077977055405468ull, 239203286653190548ull}}, {{3214584640075884696ull, 17948331025857418220ull, 6607411880401259320ull, 478406573306381097ull}}, {{6429169280151769392ull, 17449917978005284824ull, 13214823760802518641ull, 956813146612762194ull}}, {{16043229114997995172ull, 3489983595601056964ull, 17400360011128145021ull, 191362629322552438ull}}, {{13639714156286438727ull, 6979967191202113929ull, 16353975948546738426ull, 382725258645104877ull}}, {{8832684238863325837ull, 13959934382404227859ull, 14261207823383925236ull, 765450517290209755ull}}, {{1766536847772665168ull, 6481335691222755895ull, 2852241564676785047ull, 153090103458041951ull}}, {{3533073695545330335ull, 12962671382445511790ull, 5704483129353570094ull, 306180206916083902ull}}, {{7066147391090660670ull, 7478598691181471964ull, 11408966258707140189ull, 612360413832167804ull}}, {{14132294782181321339ull, 14957197382362943928ull, 4371188443704728762ull, 1224720827664335609ull}}, {{17583854215403905561ull, 6680788291214499108ull, 15631632947708587045ull, 244944165532867121ull}}, {{16720964357098259505ull, 13361576582428998217ull, 12816521821707622474ull, 489888331065734243ull}}, {{14995184640486967394ull, 8276409091148444819ull, 7186299569705693333ull, 979776662131468487ull}}, {{17756432187065034772ull, 1655281818229688963ull, 8815957543424959313ull, 195955332426293697ull}}, {{17066120300420517928ull, 3310563636459377927ull, 17631915086849918626ull, 391910664852587394ull}}, {{15685496527131484239ull, 6621127272918755855ull, 16817086099990285636ull, 783821329705174789ull}}, {{3137099305426296848ull, 1324225454583751171ull, 18120812478965698420ull, 156764265941034957ull}}, {{6274198610852593696ull, 2648450909167502342ull, 17794880884221845224ull, 313528531882069915ull}}, {{12548397221705187391ull, 5296901818335004684ull, 17143017694734138832ull, 627057063764139831ull}}, {{6650050369700823166ull, 10593803636670009369ull, 15839291315758726048ull, 1254114127528279663ull}}, {{1330010073940164634ull, 5808109542075912197ull, 14235904707377476179ull, 250822825505655932ull}}, {{2660020147880329267ull, 11616219084151824394ull, 10025065341045400742ull, 501645651011311865ull}}, {{5320040295760658533ull, 4785694094594097172ull, 1603386608381249869ull, 1003291302022623731ull}}, {{8442705688635952353ull, 957138818918819434ull, 4010026136418160297ull, 200658260404524746ull}}, {{16885411377271904706ull, 1914277637837638868ull, 8020052272836320594ull, 401316520809049492ull}}, {{15324078680834257796ull, 3828555275675277737ull, 16040104545672641188ull, 802633041618098984ull}}, {{17822210995134492852ull, 8144408684618876193ull, 17965416168102169530ull, 160526608323619796ull}}, {{17197677916559434088ull, 16288817369237752387ull, 17484088262494787444ull, 321053216647239593ull}}, {{15948611759409316560ull, 14130890664765953159ull, 16521432451280023273ull, 642106433294479187ull}}, {{17947117610849504605ull, 2826178132953190631ull, 10682984119739825301ull, 128421286658895837ull}}, {{17447491147989457594ull, 5652356265906381263ull, 2919224165770098986ull, 256842573317791675ull}}, {{16448238222269363571ull, 11304712531812762527ull, 5838448331540197972ull, 513685146635583350ull}}, {{14449732370829175526ull, 4162680989915973439ull, 11676896663080395945ull, 1027370293271166700ull}}, {{17647341733133476398ull, 832536197983194687ull, 2335379332616079189ull, 205474058654233340ull}}, {{16847939392557401180ull, 1665072395966389375ull, 4670758665232158378ull, 410948117308466680ull}}, {{15249134711405250744ull, 3330144791932778751ull, 9341517330464316756ull, 821896234616933360ull}}, {{10428524571764870796ull, 4355377773128466073ull, 1868303466092863351ull, 164379246923386672ull}}, {{2410305069820189975ull, 8710755546256932147ull, 3736606932185726702ull, 328758493846773344ull}}, {{4820610139640379949ull, 17421511092513864294ull, 7473213864371453404ull, 657516987693546688ull}}, {{4653470842669986313ull, 10862999847986593505ull, 12562689217100021650ull, 131503397538709337ull}}, {{9306941685339972626ull, 3279255622263635394ull, 6678634360490491685ull, 263006795077418675ull}}, {{167139296970393636ull, 6558511244527270789ull, 13357268720980983370ull, 526013590154837350ull}}, {{334278593940787272ull, 13117022489054541578ull, 8267793368252415124ull, 1052027180309674701ull}}, {{11134902163013888424ull, 2623404497810908315ull, 5342907488392393348ull, 210405436061934940ull}}, {{3823060252318225232ull, 5246808995621816631ull, 10685814976784786696ull, 420810872123869880ull}}, {{7646120504636450464ull, 10493617991243633262ull, 2924885879860021776ull, 841621744247739761ull}}, {{16286619359894931386ull, 9477421227732547298ull, 4274325990713914678ull, 168324348849547952ull}}, {{14126494646080311155ull, 508098381755542981ull, 8548651981427829357ull, 336648697699095904ull}}, {{9806245218451070694ull, 1016196763511085963ull, 17097303962855658714ull, 673297395398191808ull}}, {{1961249043690214139ull, 7581936982186037839ull, 14487507236796862712ull, 134659479079638361ull}}, {{3922498087380428278ull, 15163873964372075678ull, 10528270399884173808ull, 269318958159276723ull}}, {{7844996174760856556ull, 11881003855034599740ull, 2609796726058796001ull, 538637916318553447ull}}, {{15689992349521713111ull, 5315263636359647864ull, 5219593452117592003ull, 1077275832637106894ull}}, {{6827347284646252946ull, 8441750356755750219ull, 15801313949391159693ull, 215455166527421378ull}}, {{13654694569292505891ull, 16883500713511500438ull, 13155883825072767770ull, 430910333054842757ull}}, {{8862645064875460165ull, 15320257353313449261ull, 7865023576435983925ull, 861820666109685515ull}}, {{5461877827717002357ull, 3064051470662689852ull, 1573004715287196785ull, 172364133221937103ull}}, {{10923755655434004713ull, 6128102941325379704ull, 3146009430574393570ull, 344728266443874206ull}}, {{3400767237158457809ull, 12256205882650759409ull, 6292018861148787140ull, 689456532887748412ull}}, {{4369502262173601885ull, 9829938806013972528ull, 8637101401713578074ull, 137891306577549682ull}}, {{8739004524347203770ull, 1213133538318393440ull, 17274202803427156149ull, 275782613155099364ull}}, {{17478009048694407540ull, 2426267076636786880ull, 16101661533144760682ull, 551565226310198729ull}}, {{16509274023679263464ull, 4852534153273573761ull, 13756578992579969748ull, 1103130452620397459ull}}, {{14369901248961583663ull, 8349204460138535398ull, 17508711057483635242ull, 220626090524079491ull}}, {{10293058424213615709ull, 16698408920277070797ull, 16570678041257718868ull, 441252181048158983ull}}, {{2139372774717679802ull, 14950073766844589979ull, 14694612008805886121ull, 882504362096317967ull}}, {{7806572184427356607ull, 14058061197594648965ull, 10317620031244997870ull, 176500872419263593ull}}, {{15613144368854713214ull, 9669378321479746314ull, 2188495988780444125ull, 353001744838527187ull}}, {{12779544663999874811ull, 892012569249941013ull, 4376991977560888251ull, 706003489677054374ull}}, {{13623955377025705932ull, 178402513849988202ull, 15632793654479818943ull, 141200697935410874ull}}, {{8801166680341860248ull, 356805027699976405ull, 12818843235250086270ull, 282401395870821749ull}}, {{17602333360683720495ull, 713610055399952810ull, 7190942396790620924ull, 564802791741643499ull}}, {{16757922647657889374ull, 1427220110799905621ull, 14381884793581241848ull, 1129605583483286998ull}}, {{10730282159015398522ull, 3974792836901891447ull, 13944423402941979339ull, 225921116696657399ull}}, {{3013820244321245427ull, 7949585673803782895ull, 9442102732174407062ull, 451842233393314799ull}}, {{6027640488642490853ull, 15899171347607565790ull, 437461390639262508ull, 903684466786629599ull}}, {{8584225727212318817ull, 10558531899005333804ull, 14844887537095493794ull, 180736893357325919ull}}, {{17168451454424637634ull, 2670319724301115992ull, 11243031000481435973ull, 361473786714651839ull}}, {{15890158835139723652ull, 5340639448602231985ull, 4039317927253320330ull, 722947573429303679ull}}, {{17935427025995586024ull, 15825523148688087689ull, 15565258844418305358ull, 144589514685860735ull}}, {{17424109978281620431ull, 13204302223666623763ull, 12683773615127059101ull, 289179029371721471ull}}, {{16401475882853689245ull, 7961860373623695911ull, 6920803156544566587ull, 578358058743442943ull}}, {{14356207691997826874ull, 15923720747247391823ull, 13841606313089133174ull, 1156716117486885886ull}}, {{13939287982625296345ull, 3184744149449478364ull, 6457670077359736958ull, 231343223497377177ull}}, {{9431831891541041073ull, 6369488298898956729ull, 12915340154719473916ull, 462686446994754354ull}}, {{416919709372530529ull, 12738976597797913459ull, 7383936235729396216ull, 925372893989508709ull}}, {{14840779200842147399ull, 2547795319559582691ull, 16234182506113520536ull, 185074578797901741ull}}, {{11234814327974743182ull, 5095590639119165383ull, 14021620938517489456ull, 370149157595803483ull}}, {{4022884582239934747ull, 10191181278238330767ull, 9596497803325427296ull, 740298315191606967ull}}, {{804576916447986950ull, 13106282699873397123ull, 9297997190148906105ull, 148059663038321393ull}}, {{1609153832895973899ull, 7765821326037242630ull, 149250306588260595ull, 296119326076642787ull}}, {{3218307665791947798ull, 15531642652074485260ull, 298500613176521190ull, 592238652153285574ull}}, {{6436615331583895595ull, 12616541230439418904ull, 597001226353042381ull, 1184477304306571148ull}}, {{12355369510542510089ull, 17280703505055525073ull, 11187446689496339445ull, 236895460861314229ull}}, {{6263994947375468561ull, 16114662936401498531ull, 3928149305283127275ull, 473790921722628459ull}}, {{12527989894750937122ull, 13782581799093445446ull, 7856298610566254551ull, 947581843445256918ull}}, {{2505597978950187425ull, 17513911618786330382ull, 12639306166338981879ull, 189516368689051383ull}}, {{5011195957900374849ull, 16581079163863109148ull, 6831868258968412143ull, 379032737378102767ull}}, {{10022391915800749698ull, 14715414254016666680ull, 13663736517936824287ull, 758065474756205534ull}}, {{5693827197902060263ull, 6632431665545243659ull, 17490142562555006150ull, 151613094951241106ull}}, {{11387654395804120526ull, 13264863331090487318ull, 16533541051400460684ull, 303226189902482213ull}}, {{4328564717898689435ull, 8082982588471423021ull, 14620338029091369753ull, 606452379804964427ull}}, {{8657129435797378870ull, 16165965176942846042ull, 10793931984473187890ull, 1212904759609928855ull}}, {{9110123516643296421ull, 3233193035388569208ull, 2158786396894637578ull, 242580951921985771ull}}, {{18220247033286592841ull, 6466386070777138416ull, 4317572793789275156ull, 485161903843971542ull}}, {{17993749992863634066ull, 12932772141554276833ull, 8635145587578550312ull, 970323807687943084ull}}, {{18356145257540368106ull, 6275903243052765689ull, 16484424376483351355ull, 194064761537588616ull}}, {{18265546441371184596ull, 12551806486105531379ull, 14522104679257151094ull, 388129523075177233ull}}, {{18084348809032817576ull, 6656868898501511143ull, 10597465284804750573ull, 776259046150354467ull}}, {{14684916206032294485ull, 1331373779700302228ull, 9498190686444770761ull, 155251809230070893ull}}, {{10923088338355037354ull, 2662747559400604457ull, 549637299179989906ull, 310503618460141787ull}}, {{3399432603000523091ull, 5325495118801208915ull, 1099274598359979812ull, 621007236920283574ull}}, {{6798865206001046182ull, 10650990237602417830ull, 2198549196719959624ull, 1242014473840567148ull}}, {{8738470670684029883ull, 9508895677004304212ull, 11507756283569722894ull, 248402894768113429ull}}, {{17476941341368059766ull, 571047280299056808ull, 4568768493429894173ull, 496805789536226859ull}}, {{16507138609026567915ull, 1142094560598113617ull, 9137536986859788346ull, 993611579072453718ull}}, {{6990776536547223907ull, 14985814171087264016ull, 12895553841597688638ull, 198722315814490743ull}}, {{13981553073094447813ull, 11524884268464976416ull, 7344363609485825661ull, 397444631628981487ull}}, {{9516362072479344009ull, 4603024463220401217ull, 14688727218971651323ull, 794889263257962974ull}}, {{16660667673463510095ull, 8299302522127900889ull, 17695140702761971557ull, 158977852651592594ull}}, {{14874591273217468573ull, 16598605044255801779ull, 16943537331814391498ull, 317955705303185189ull}}, {{11302438472725385530ull, 14750466014802051943ull, 15440330589919231381ull, 635911410606370379ull}}, {{4158132871741219444ull, 11054187955894552271ull, 12433917106128911147ull, 1271822821212740759ull}}, {{8210324203832064536ull, 5900186405920820777ull, 17244178680193423522ull, 254364564242548151ull}}, {{16420648407664129071ull, 11800372811841641554ull, 16041613286677295428ull, 508729128485096303ull}}, {{14394552741618706525ull, 5154001549973731493ull, 13636482499645039241ull, 1017458256970192607ull}}, {{6568259363065651629ull, 12098846754220477268ull, 10105994129412828494ull, 203491651394038521ull}}, {{13136518726131303257ull, 5750949434731402920ull, 1765244185116105373ull, 406983302788077043ull}}, {{7826293378553054897ull, 11501898869462805841ull, 3530488370232210746ull, 813966605576154086ull}}, {{12633305119936341949ull, 9679077403376381814ull, 4395446488788352472ull, 162793321115230817ull}}, {{6819866166163132282ull, 911410733043212013ull, 8790892977576704945ull, 325586642230461634ull}}, {{13639732332326264564ull, 1822821466086424026ull, 17581785955153409890ull, 651173284460923268ull}}, {{17485341725432894206ull, 11432610737443015774ull, 14584403635256412947ull, 130234656892184653ull}}, {{16523939377156236796ull, 4418477401176479933ull, 10722063196803274279ull, 260469313784369307ull}}, {{14601134680602921975ull, 8836954802352959867ull, 2997382319896996942ull, 520938627568738615ull}}, {{10755525287496292333ull, 17673909604705919735ull, 5994764639793993884ull, 1041877255137477230ull}}, {{16908500316466899760ull, 18292177179908825239ull, 1198952927958798776ull, 208375451027495446ull}}, {{15370256559224247903ull, 18137610286108098863ull, 2397905855917597553ull, 416750902054990892ull}}, {{12293769044738944189ull, 17828476498506646111ull, 4795811711835195107ull, 833501804109981784ull}}, {{9837451438431609485ull, 7255044114443239545ull, 15716557601334680314ull, 166700360821996356ull}}, {{1228158803153667353ull, 14510088228886479091ull, 12986371128959809012ull, 333400721643992713ull}}, {{2456317606307334705ull, 10573432384063406566ull, 7525998184210066409ull, 666801443287985427ull}}, {{7869961150745287588ull, 5804035291554591636ull, 8883897266325833928ull, 133360288657597085ull}}, {{15739922301490575175ull, 11608070583109183272ull, 17767794532651667856ull, 266720577315194170ull}}, {{13033100529271598734ull, 4769397092508814929ull, 17088844991593784097ull, 533441154630388341ull}}, {{7619456984833645851ull, 9538794185017629859ull, 15730945909478016578ull, 1066882309260776683ull}}, {{1523891396966729171ull, 5597107651745436295ull, 14214235626121334285ull, 213376461852155336ull}}, {{3047782793933458341ull, 11194215303490872590ull, 9981727178533116954ull, 426752923704310673ull}}, {{6095565587866916681ull, 3941686533272193564ull, 1516710283356682293ull, 853505847408621347ull}}, {{15976508376541024629ull, 788337306654438712ull, 7682039686155157105ull, 170701169481724269ull}}, {{13506272679372497642ull, 1576674613308877425ull, 15364079372310314210ull, 341402338963448538ull}}, {{8565801285035443668ull, 3153349226617754851ull, 12281414670911076804ull, 682804677926897077ull}}, {{9091857886490909380ull, 4320018660065461293ull, 9834980563666036007ull, 136560935585379415ull}}, {{18183715772981818760ull, 8640037320130922586ull, 1223217053622520398ull, 273121871170758831ull}}, {{17920687472254085904ull, 17280074640261845173ull, 2446434107245040796ull, 546243742341517662ull}}, {{17394630870798620192ull, 16113405206814138731ull, 4892868214490081593ull, 1092487484683035324ull}}, {{14546972618385455008ull, 10601378670846648392ull, 15735968901865657611ull, 218497496936607064ull}}, {{10647201163061358400ull, 2756013267983745169ull, 13025193730021763607ull, 436994993873214129ull}}, {{2847658252413165184ull, 5512026535967490339ull, 7603643386333975598ull, 873989987746428259ull}}, {{4258880465224543360ull, 8481102936677318714ull, 16278123936234436412ull, 174797997549285651ull}}, {{8517760930449086720ull, 16962205873354637428ull, 14109503798759321208ull, 349595995098571303ull}}, {{17035521860898173440ull, 15477667672999723240ull, 9772263523809090801ull, 699191990197142607ull}}, {{14475150816405365658ull, 14163579978825675617ull, 9333150334245638806ull, 139838398039428521ull}}, {{10503557559101179700ull, 9880415883941799619ull, 219556594781725997ull, 279676796078857043ull}}, {{2560371044492807783ull, 1314087694174047623ull, 439113189563451995ull, 559353592157714086ull}}, {{5120742088985615565ull, 2628175388348095246ull, 878226379126903990ull, 1118707184315428172ull}}, {{12092194862022854083ull, 7904332707153439695ull, 7554342905309201444ull, 223741436863085634ull}}, {{5737645650336156549ull, 15808665414306879391ull, 15108685810618402888ull, 447482873726171268ull}}, {{11475291300672313098ull, 13170586754904207166ull, 11770627547527254161ull, 894965747452342537ull}}, {{17052453519102103913ull, 13702163795206572402ull, 9732823138989271478ull, 178993149490468507ull}}, {{15658162964494656209ull, 8957583516703593189ull, 1018902204268991341ull, 357986298980937015ull}}, {{12869581855279760802ull, 17915167033407186379ull, 2037804408537982682ull, 715972597961874030ull}}, {{6263265185797862484ull, 10961731036165257922ull, 407560881707596536ull, 143194519592374806ull}}, {{12526530371595724968ull, 3476717998620964228ull, 815121763415193073ull, 286389039184749612ull}}, {{6606316669481898319ull, 6953435997241928457ull, 1630243526830386146ull, 572778078369499224ull}}, {{13212633338963796637ull, 13906871994483856914ull, 3260487053660772292ull, 1145556156738998448ull}}, {{17399921926760400621ull, 2781374398896771382ull, 11720143854957885428ull, 229111231347799689ull}}, {{16353099779811249625ull, 5562748797793542765ull, 4993543636206219240ull, 458222462695599379ull}}, {{14259455485912947633ull, 11125497595587085531ull, 9987087272412438480ull, 916444925391198758ull}}, {{17609286356150230820ull, 13293145963343148075ull, 13065463898708218665ull, 183288985078239751ull}}, {{16771828638590910023ull, 8139547852976744535ull, 7684183723706885715ull, 366577970156479503ull}}, {{15096913203472268429ull, 16279095705953489071ull, 15368367447413771430ull, 733155940312959006ull}}, {{10398080270178274333ull, 6945167955932608137ull, 6763022304224664609ull, 146631188062591801ull}}, {{2349416466646997049ull, 13890335911865216275ull, 13526044608449329218ull, 293262376125183602ull}}, {{4698832933293994097ull, 9333927750020880934ull, 8605345143189106821ull, 586524752250367205ull}}, {{9397665866587988194ull, 221111426332210252ull, 17210690286378213643ull, 1173049504500734410ull}}, {{1879533173317597639ull, 11112268729492173020ull, 3442138057275642728ull, 234609900900146882ull}}, {{3759066346635195278ull, 3777793385274794424ull, 6884276114551285457ull, 469219801800293764ull}}, {{7518132693270390555ull, 7555586770549588848ull, 13768552229102570914ull, 938439603600587528ull}}, {{1503626538654078111ull, 8889814983593738416ull, 13821756890046245152ull, 187687920720117505ull}}, {{3007253077308156222ull, 17779629967187476832ull, 9196769706382938688ull, 375375841440235011ull}}, {{6014506154616312444ull, 17112515860665402048ull, 18393539412765877377ull, 750751682880470022ull}}, {{8581598860407083136ull, 18179898431100721702ull, 11057405512036996121ull, 150150336576094004ull}}, {{17163197720814166271ull, 17913052788491891788ull, 3668066950364440627ull, 300300673152188009ull}}, {{15879651367918780925ull, 17379361503274231961ull, 7336133900728881255ull, 600601346304376018ull}}, {{13312558662128010234ull, 16311978932838912307ull, 14672267801457762511ull, 1201202692608752036ull}}, {{17419906991393243340ull, 10641093416051603107ull, 6623802375033462825ull, 240240538521750407ull}}, {{16393069909076935063ull, 2835442758393654599ull, 13247604750066925651ull, 480481077043500814ull}}, {{14339395744444318510ull, 5670885516787309199ull, 8048465426424299686ull, 960962154087001629ull}}, {{17625274407856504995ull, 1134177103357461839ull, 16367088344252501230ull, 192192430817400325ull}}, {{16803804742003458374ull, 2268354206714923679ull, 14287432614795450844ull, 384384861634800651ull}}, {{15160865410297365131ull, 4536708413429847359ull, 10128121155881350072ull, 768769723269601303ull}}, {{17789568341027114319ull, 907341682685969471ull, 13093670675402000984ull, 153753944653920260ull}}, {{17132392608344677022ull, 1814683365371938943ull, 7740597277094450352ull, 307507889307840521ull}}, {{15818041142979802428ull, 3629366730743877887ull, 15481194554188900704ull, 615015778615681042ull}}, {{13189338212250053240ull, 7258733461487755775ull, 12515645034668249792ull, 1230031557231362085ull}}, {{10016565271933831295ull, 8830444321781371801ull, 2503129006933649958ull, 246006311446272417ull}}, {{1586386470158110973ull, 17660888643562743603ull, 5006258013867299916ull, 492012622892544834ull}}, {{3172772940316221946ull, 16875033213415935590ull, 10012516027734599833ull, 984025245785089668ull}}, {{4323903402805154713ull, 7064355457425097441ull, 13070549649772650936ull, 196805049157017933ull}}, {{8647806805610309425ull, 14128710914850194882ull, 7694355225835750256ull, 393610098314035867ull}}, {{17295613611220618850ull, 9810677755990838148ull, 15388710451671500513ull, 787220196628071734ull}}, {{3459122722244123770ull, 9340833180681988276ull, 17835137349301941395ull, 157444039325614346ull}}, {{6918245444488247540ull, 234922287654424936ull, 17223530624894331175ull, 314888078651228693ull}}, {{13836490888976495080ull, 469844575308849872ull, 16000317176079110734ull, 629776157302457387ull}}, {{9226237704243438543ull, 939689150617699745ull, 13553890278448669852ull, 1259552314604914775ull}}, {{9223945170332508355ull, 7566635459607360595ull, 2710778055689733970ull, 251910462920982955ull}}, {{1146266955465094ull, 15133270919214721191ull, 5421556111379467940ull, 503820925841965910ull}}, {{2292533910930188ull, 11819797764719890766ull, 10843112222758935881ull, 1007641851683931820ull}}, {{7379156136266006684ull, 6053308367685888476ull, 2168622444551787176ull, 201528370336786364ull}}, {{14758312272532013368ull, 12106616735371776952ull, 4337244889103574352ull, 403056740673572728ull}}, {{11069880471354475120ull, 5766489397034002289ull, 8674489778207148705ull, 806113481347145456ull}}, {{2213976094270895024ull, 4842646694148710781ull, 5424246770383340064ull, 161222696269429091ull}}, {{4427952188541790048ull, 9685293388297421562ull, 10848493540766680128ull, 322445392538858182ull}}, {{8855904377083580096ull, 923842702885291508ull, 3250243007823808641ull, 644890785077716365ull}}, {{16528576134384357312ull, 3874117355318968624ull, 650048601564761728ull, 128978157015543273ull}}, {{14610408195059163008ull, 7748234710637937249ull, 1300097203129523456ull, 257956314031086546ull}}, {{10774072316408774400ull, 15496469421275874499ull, 2600194406259046912ull, 515912628062173092ull}}, {{3101400559107997184ull, 12546194768842197383ull, 5200388812518093825ull, 1031825256124346184ull}}, {{7998977741305420084ull, 17266634212736080769ull, 15797473021471260057ull, 206365051224869236ull}}, {{15997955482610840167ull, 16086524351762609922ull, 13148201969232968499ull, 412730102449738473ull}}, {{13549166891512128717ull, 13726304629815668229ull, 7849659864756385383ull, 825460204899476947ull}}, {{17467228637270067037ull, 2745260925963133645ull, 8948629602435097723ull, 165092040979895389ull}}, {{16487713200830582457ull, 5490521851926267291ull, 17897259204870195446ull, 330184081959790778ull}}, {{14528682327951613297ull, 10981043703852534583ull, 17347774336030839276ull, 660368163919581557ull}}, {{6595085280332232983ull, 13264255184996237886ull, 10848252496689988501ull, 132073632783916311ull}}, {{13190170560664465966ull, 8081766296282924156ull, 3249760919670425387ull, 264147265567832623ull}}, {{7933597047619380315ull, 16163532592565848313ull, 6499521839340850774ull, 528294531135665246ull}}, {{15867194095238760629ull, 13880321111422145010ull, 12999043678681701549ull, 1056589062271330492ull}}, {{6862787633789662449ull, 6465413037026339325ull, 9978506365220160956ull, 211317812454266098ull}}, {{13725575267579324898ull, 12930826074052678650ull, 1510268656730770296ull, 422635624908532197ull}}, {{9004406461449098180ull, 7414908074395805685ull, 3020537313461540593ull, 845271249817064394ull}}, {{9179578921773640283ull, 8861679244362981783ull, 15361502721659949411ull, 169054249963412878ull}}, {{18359157843547280565ull, 17723358488725963566ull, 12276261369610347206ull, 338108499926825757ull}}, {{18271571613385009514ull, 16999972903742375517ull, 6105778665511142797ull, 676216999853651515ull}}, {{18411709581644643196ull, 10778692210232295749ull, 1221155733102228559ull, 135243399970730303ull}}, {{18376675089579734775ull, 3110640346755039883ull, 2442311466204457119ull, 270486799941460606ull}}, {{18306606105449917934ull, 6221280693510079767ull, 4884622932408914238ull, 540973599882921212ull}}, {{18166468137190284252ull, 12442561387020159535ull, 9769245864817828476ull, 1081947199765842424ull}}, {{3633293627438056851ull, 2488512277404031907ull, 16711244431931206988ull, 216389439953168484ull}}, {{7266587254876113701ull, 4977024554808063814ull, 14975744790152862360ull, 432778879906336969ull}}, {{14533174509752227401ull, 9954049109616127628ull, 11504745506596173104ull, 865557759812673939ull}}, {{6595983716692355804ull, 13058856266148956495ull, 17058344360286875913ull, 173111551962534787ull}}, {{13191967433384711607ull, 7670968458588361374ull, 15669944646864200211ull, 346223103925069575ull}}, {{7937190793059871598ull, 15341936917176722749ull, 12893145220018848806ull, 692446207850139151ull}}, {{5276786973353884643ull, 10447085012919165196ull, 6267977858745680084ull, 138489241570027830ull}}, {{10553573946707769286ull, 2447425952128778776ull, 12535955717491360169ull, 276978483140055660ull}}, {{2660403819705986955ull, 4894851904257557553ull, 6625167361273168722ull, 553956966280111321ull}}, {{5320807639411973910ull, 9789703808515115106ull, 13250334722546337444ull, 1107913932560222642ull}}, {{8442859157366215429ull, 5647289576444933344ull, 10028764573993088135ull, 221582786512044528ull}}, {{16885718314732430857ull, 11294579152889866688ull, 1610785074276624654ull, 443165573024089057ull}}, {{15324692555755310098ull, 4142414232070181761ull, 3221570148553249309ull, 886331146048178114ull}}, {{17822333770118703313ull, 11896529290639767321ull, 15401709288678291154ull, 177266229209635622ull}}, {{17197923466527855009ull, 5346314507569983027ull, 12356674503647030693ull, 354532458419271245ull}}, {{15949102859346158402ull, 10692629015139966055ull, 6266604933584509770ull, 709064916838542491ull}}, {{6879169386611142004ull, 5827874617769903534ull, 4942669801458812277ull, 141812983367708498ull}}, {{13758338773222284007ull, 11655749235539807068ull, 9885339602917624554ull, 283625966735416996ull}}, {{9069933472735016398ull, 4864754397370062521ull, 1323935132125697493ull, 567251933470833993ull}}, {{18139866945470032796ull, 9729508794740125042ull, 2647870264251394986ull, 1134503866941667986ull}}, {{18385368648061647852ull, 9324599388431845654ull, 4218922867592189320ull, 226900773388333597ull}}, {{18323993222413744088ull, 202454703154139693ull, 8437845735184378641ull, 453801546776667194ull}}, {{18201242371117936560ull, 404909406308279387ull, 16875691470368757282ull, 907603093553334388ull}}, {{11018946103707407959ull, 80981881261655877ull, 14443184738299482426ull, 181520618710666877ull}}, {{3591148133705264301ull, 161963762523311755ull, 10439625402889413236ull, 363041237421333755ull}}, {{7182296267410528602ull, 323927525046623510ull, 2432506732069274856ull, 726082474842667511ull}}, {{8815156882965926367ull, 7443483134493145348ull, 4175850161155765294ull, 145216494968533502ull}}, {{17630313765931852734ull, 14886966268986290696ull, 8351700322311530588ull, 290432989937067004ull}}, {{16813883458154153851ull, 11327188464263029777ull, 16703400644623061177ull, 580865979874134008ull}}, {{15181022842598756086ull, 4207632854816507939ull, 14960057215536570739ull, 1161731959748268017ull}}, {{3036204568519751218ull, 4530875385705211911ull, 10370709072591134794ull, 232346391949653603ull}}, {{6072409137039502435ull, 9061750771410423822ull, 2294674071472717972ull, 464692783899307207ull}}, {{12144818274079004869ull, 18123501542820847644ull, 4589348142945435944ull, 929385567798614414ull}}, {{9807661284299621621ull, 14692746752789900498ull, 15675264887556728481ull, 185877113559722882ull}}, {{1168578494889691625ull, 10938749431870249381ull, 12903785701403905347ull, 371754227119445765ull}}, {{2337156989779383249ull, 3430754790030947146ull, 7360827329098259079ull, 743508454238891531ull}}, {{4156780212697786973ull, 686150958006189429ull, 5161514280561562139ull, 148701690847778306ull}}, {{8313560425395573946ull, 1372301916012378858ull, 10323028561123124278ull, 297403381695556612ull}}, {{16627120850791147892ull, 2744603832024757716ull, 2199313048536696940ull, 594806763391113225ull}}, {{14807497627872744167ull, 5489207664049515433ull, 4398626097073393880ull, 1189613526782226450ull}}, {{14029545969800279803ull, 1097841532809903086ull, 879725219414678776ull, 237922705356445290ull}}, {{9612347865891007990ull, 2195683065619806173ull, 1759450438829357552ull, 475845410712890580ull}}, {{777951658072464364ull, 4391366131239612347ull, 3518900877658715104ull, 951690821425781160ull}}, {{3844939146356403196ull, 15635668485215563762ull, 703780175531743020ull, 190338164285156232ull}}, {{7689878292712806392ull, 12824592896721575908ull, 1407560351063486041ull, 380676328570312464ull}}, {{15379756585425612784ull, 7202441719733600200ull, 2815120702126972083ull, 761352657140624928ull}}, {{6765300131827032880ull, 5129837158688630363ull, 11631070584651125386ull, 152270531428124985ull}}, {{13530600263654065760ull, 10259674317377260726ull, 4815397095592699156ull, 304541062856249971ull}}, {{8614456453598579904ull, 2072604561044969837ull, 9630794191185398313ull, 609082125712499942ull}}, {{17228912907197159808ull, 4145209122089939674ull, 814844308661245010ull, 1218164251424999885ull}}, {{18203177840407073255ull, 829041824417987934ull, 162968861732249002ull, 243632850284999977ull}}, {{17959611607104594893ull, 1658083648835975869ull, 325937723464498004ull, 487265700569999954ull}}, {{17472479140499638170ull, 3316167297671951739ull, 651875446928996008ull, 974531401139999908ull}}, {{3494495828099927634ull, 4352582274276300671ull, 11198421533611530171ull, 194906280227999981ull}}, {{6988991656199855268ull, 8705164548552601342ull, 3950098993513508726ull, 389812560455999963ull}}, {{13977983312399710536ull, 17410329097105202684ull, 7900197987027017452ull, 779625120911999926ull}}, {{10174294291963762754ull, 14550112263646771506ull, 5269388412147313813ull, 155925024182399985ull}}, {{1901844510217973891ull, 10653480453583991397ull, 10538776824294627627ull, 311850048364799970ull}}, {{3803689020435947782ull, 2860216833458431178ull, 2630809574879703639ull, 623700096729599941ull}}, {{7607378040871895564ull, 5720433666916862356ull, 5261619149759407278ull, 1247400193459199882ull}}, {{5210824422916289436ull, 1144086733383372471ull, 8431021459435702102ull, 249480038691839976ull}}, {{10421648845832578872ull, 2288173466766744942ull, 16862042918871404204ull, 498960077383679952ull}}, {{2396553617955606128ull, 4576346933533489885ull, 15277341764033256792ull, 997920154767359905ull}}, {{7858008353074941872ull, 8293967016190518623ull, 3055468352806651358ull, 199584030953471981ull}}, {{15716016706149883744ull, 16587934032381037246ull, 6110936705613302716ull, 399168061906943962ull}}, {{12985289338590215872ull, 14729123991052522877ull, 12221873411226605433ull, 798336123813887924ull}}, {{17354453126685684468ull, 10324522427694325221ull, 17201769941212962379ull, 159667224762777584ull}}, {{16262162179661817319ull, 2202300781679098827ull, 15956795808716373143ull, 319334449525555169ull}}, {{14077580285614083021ull, 4404601563358197655ull, 13466847543723194670ull, 638668899051110339ull}}, {{9708416497518614426ull, 8809203126716395311ull, 8486951013736837724ull, 1277337798102220679ull}}, {{16699078558471364178ull, 12829887069569010031ull, 16454785461715008837ull, 255467559620444135ull}}, {{14951413043233176740ull, 7213030065428468447ull, 14462826849720466059ull, 510935119240888271ull}}, {{11456082012756801864ull, 14426060130856936895ull, 10478909625731380502ull, 1021870238481776543ull}}, {{2291216402551360373ull, 2885212026171387379ull, 13163828369372007070ull, 204374047696355308ull}}, {{4582432805102720746ull, 5770424052342774758ull, 7880912665034462524ull, 408748095392710617ull}}, {{9164865610205441491ull, 11540848104685549516ull, 15761825330068925048ull, 817496190785421234ull}}, {{12901019566266819268ull, 9686867250420930549ull, 17909760324981426302ull, 163499238157084246ull}}, {{7355295058824086920ull, 926990427132309483ull, 17372776576253300989ull, 326998476314168493ull}}, {{14710590117648173840ull, 1853980854264618966ull, 16298809078797050362ull, 653996952628336987ull}}, {{2942118023529634768ull, 15128191429820565086ull, 10638459445243230718ull, 130799390525667397ull}}, {{5884236047059269536ull, 11809638785931578556ull, 2830174816776909821ull, 261598781051334795ull}}, {{11768472094118539072ull, 5172533498153605496ull, 5660349633553819643ull, 523197562102669590ull}}, {{5090200114527526527ull, 10345066996307210993ull, 11320699267107639286ull, 1046395124205339180ull}}, {{15775435281873146599ull, 5758362214003352521ull, 2264139853421527857ull, 209279024841067836ull}}, {{13104126490036741581ull, 11516724428006705043ull, 4528279706843055714ull, 418558049682135672ull}}, {{7761508906363931545ull, 4586704782303858471ull, 9056559413686111429ull, 837116099364271344ull}}, {{16309697040240427602ull, 11985387400686502663ull, 16568707141704863578ull, 167423219872854268ull}}, {{14172650006771303588ull, 5524030727663453711ull, 14690670209700175541ull, 334846439745708537ull}}, {{9898555939833055559ull, 11048061455326907423ull, 10934596345690799466ull, 669692879491417075ull}}, {{16737106446934252405ull, 5898961105807291807ull, 2186919269138159893ull, 133938575898283415ull}}, {{15027468820158953194ull, 11797922211614583615ull, 4373838538276319786ull, 267877151796566830ull}}, {{11608193566608354771ull, 5149100349519615615ull, 8747677076552639573ull, 535754303593133660ull}}, {{4769643059507157925ull, 10298200699039231231ull, 17495354153105279146ull, 1071508607186267320ull}}, {{8332626241385252232ull, 5748988954549756569ull, 3499070830621055829ull, 214301721437253464ull}}, {{16665252482770504463ull, 11497977909099513138ull, 6998141661242111658ull, 428603442874506928ull}}, {{14883760891831457310ull, 4549211744489474661ull, 13996283322484223317ull, 857206885749013856ull}}, {{17734147437333932755ull, 11977888793123625901ull, 6488605479238754986ull, 171441377149802771ull}}, {{17021550800958313894ull, 5509033512537700187ull, 12977210958477509973ull, 342882754299605542ull}}, {{15596357528207076171ull, 11018067025075400375ull, 7507677843245468330ull, 685765508599211085ull}}, {{3119271505641415235ull, 2203613405015080075ull, 1501535568649093666ull, 137153101719842217ull}}, {{6238543011282830469ull, 4407226810030160150ull, 3003071137298187332ull, 274306203439684434ull}}, {{12477086022565660937ull, 8814453620060320300ull, 6006142274596374664ull, 548612406879368868ull}}, {{6507427971421770257ull, 17628907240120640601ull, 12012284549192749328ull, 1097224813758737736ull}}, {{1301485594284354052ull, 18283176706991769413ull, 6091805724580460188ull, 219444962751747547ull}}, {{2602971188568708103ull, 18119609340273987210ull, 12183611449160920377ull, 438889925503495094ull}}, {{5205942377137416206ull, 17792474606838422804ull, 5920478824612289139ull, 877779851006990189ull}}, {{8419886104911303888ull, 14626541365593415530ull, 15941491023890099120ull, 175555970201398037ull}}, {{16839772209822607775ull, 10806338657477279444ull, 13436237974070646625ull, 351111940402796075ull}}, {{15232800345935663934ull, 3165933241245007273ull, 8425731874431741635ull, 702223880805592151ull}}, {{17803955328154774080ull, 4322535462990911777ull, 5374495189628258650ull, 140444776161118430ull}}, {{17161166582599996544ull, 8645070925981823555ull, 10748990379256517300ull, 280889552322236860ull}}, {{15875589091490441471ull, 17290141851963647111ull, 3051236684803482984ull, 561779104644473721ull}}, {{13304434109271331325ull, 16133539630217742607ull, 6102473369606965969ull, 1123558209288947442ull}}, {{13728933266079997235ull, 6916056740785458844ull, 8599192303405213840ull, 224711641857789488ull}}, {{9011122458450442854ull, 13832113481570917689ull, 17198384606810427680ull, 449423283715578976ull}}, {{18022244916900885707ull, 9217482889432283762ull, 15950025139911303745ull, 898846567431157953ull}}, {{3604448983380177142ull, 12911543022112187722ull, 14258051472207991718ull, 179769313486231590ull}}, {{7208897966760354283ull, 7376341970514823828ull, 10069358870706431821ull, 359538626972463181ull}}, {{14417795933520708565ull, 14752683941029647656ull, 1691973667703312026ull, 719077253944926363ull}}, {{2883559186704141713ull, 17707932047173570824ull, 11406441177766393374ull, 143815450788985272ull}}, {{5767118373408283426ull, 16969120020637590032ull, 4366138281823235133ull, 287630901577970545ull}}, {{11534236746816566852ull, 15491495967565628448ull, 8732276563646470267ull, 575261803155941090ull}}, {{4621729419923582088ull, 12536247861421705281ull, 17464553127292940535ull, 1150523606311882180ull}}, {{4613694698726626741ull, 2507249572284341056ull, 3492910625458588107ull, 230104721262376436ull}}, {{9227389397453253482ull, 5014499144568682112ull, 6985821250917176214ull, 460209442524752872ull}}, {{8034721196955348ull, 10028998289137364225ull, 13971642501834352428ull, 920418885049505744ull}}, {{7380304573723211716ull, 9384497287311293491ull, 17551723759334511778ull, 184083777009901148ull}}, {{14760609147446423432ull, 322250500913035366ull, 16656703444959471941ull, 368167554019802297ull}}, {{11074474221183295248ull, 644501001826070733ull, 14866662816209392266ull, 736335108039604595ull}}, {{16972290103204300343ull, 3818249015107124469ull, 2973332563241878453ull, 147267021607920919ull}}, {{15497836132699049069ull, 7636498030214248939ull, 5946665126483756906ull, 294534043215841838ull}}, {{12548928191688546521ull, 15272996060428497879ull, 11893330252967513812ull, 589068086431683676ull}}, {{6651112309667541426ull, 12099248047147444143ull, 5339916432225476009ull, 1178136172863367353ull}}, {{1330222461933508286ull, 9798547238913309475ull, 12136029730670826171ull, 235627234572673470ull}}, {{2660444923867016571ull, 1150350404117067334ull, 5825315387632100727ull, 471254469145346941ull}}, {{5320889847734033141ull, 2300700808234134668ull, 11650630775264201454ull, 942508938290693882ull}}, {{15821573228514447921ull, 4149488976388737256ull, 9708823784536660937ull, 188501787658138776ull}}, {{13196402383319344226ull, 8298977952777474513ull, 970903495363770258ull, 377003575316277553ull}}, {{7946060692929136836ull, 16597955905554949027ull, 1941806990727540516ull, 754007150632555106ull}}, {{16346607397553468660ull, 10698288810594810451ull, 4077710212887418426ull, 150801430126511021ull}}, {{14246470721397385704ull, 2949833547480069287ull, 8155420425774836853ull, 301602860253022042ull}}, {{10046197369085219792ull, 5899667094960138575ull, 16310840851549673706ull, 603205720506044084ull}}, {{1645650664460887968ull, 11799334189920277151ull, 14174937629389795796ull, 1206411441012088169ull}}, {{4018478947634087917ull, 2359866837984055430ull, 17592382784845600452ull, 241282288202417633ull}}, {{8036957895268175834ull, 4719733675968110860ull, 16738021495981649288ull, 482564576404835267ull}}, {{16073915790536351667ull, 9439467351936221720ull, 15029298918253746960ull, 965129152809670535ull}}, {{3214783158107270334ull, 1887893470387244344ull, 3005859783650749392ull, 193025830561934107ull}}, {{6429566316214540667ull, 3775786940774488688ull, 6011719567301498784ull, 386051661123868214ull}}, {{12859132632429081334ull, 7551573881548977376ull, 12023439134602997568ull, 772103322247736428ull}}, {{9950524155969636914ull, 5199663591051705798ull, 13472734271146330483ull, 154420664449547285ull}}, {{1454304238229722211ull, 10399327182103411597ull, 8498724468583109350ull, 308841328899094571ull}}, {{2908608476459444421ull, 2351910290497271578ull, 16997448937166218701ull, 617682657798189142ull}}, {{5817216952918888841ull, 4703820580994543156ull, 15548153800622885786ull, 1235365315596378285ull}}, {{8542141020067598415ull, 4630112930940818954ull, 3109630760124577157ull, 247073063119275657ull}}, {{17084282040135196830ull, 9260225861881637908ull, 6219261520249154314ull, 494146126238551314ull}}, {{15721820006560842043ull, 73707650053724201ull, 12438523040498308629ull, 988292252477102628ull}}, {{14212410445537899379ull, 7393439159494565486ull, 13555751052325392695ull, 197658450495420525ull}}, {{9978076817366247141ull, 14786878318989130973ull, 8664758030941233774ull, 395316900990841051ull}}, {{1509409561022942665ull, 11127012564268710331ull, 17329516061882467549ull, 790633801981682102ull}}, {{7680579541688409180ull, 5914751327595652389ull, 10844600841860314156ull, 158126760396336420ull}}, {{15361159083376818359ull, 11829502655191304778ull, 3242457610011076696ull, 316253520792672841ull}}, {{12275574093044085102ull, 5212261236673057941ull, 6484915220022153393ull, 632507041585345682ull}}, {{6104404112378618587ull, 10424522473346115883ull, 12969830440044306786ull, 1265014083170691364ull}}, {{12288927266701454687ull, 2084904494669223176ull, 17351361346976502650ull, 253002816634138272ull}}, {{6131110459693357758ull, 4169808989338446353ull, 16255978620243453684ull, 506005633268276545ull}}, {{12262220919386715516ull, 8339617978676892706ull, 14065213166777355752ull, 1012011266536553091ull}}, {{17209839442844984396ull, 12735970039961109510ull, 6502391448097381473ull, 202402253307310618ull}}, {{15972934811980417176ull, 7025196006212667405ull, 13004782896194762947ull, 404804506614621236ull}}, {{13499125550251282736ull, 14050392012425334811ull, 7562821718679974278ull, 809609013229242473ull}}, {{10078522739534077194ull, 6499427217226977285ull, 12580610787961725825ull, 161921802645848494ull}}, {{1710301405358602771ull, 12998854434453954571ull, 6714477502213900034ull, 323843605291696989ull}}, {{3420602810717205542ull, 7550964795198357526ull, 13428955004427800069ull, 647687210583393978ull}}, {{11752167006369172078ull, 8888890588523492151ull, 13753837445111290983ull, 129537442116678795ull}}, {{5057589939028792540ull, 17777781177046984303ull, 9060930816513030350ull, 259074884233357591ull}}, {{10115179878057585080ull, 17108818280384416990ull, 18121861633026060701ull, 518149768466715182ull}}, {{1783615682405618544ull, 15770892487059282365ull, 17796979192342569787ull, 1036299536933430365ull}}, {{7735420765964944356ull, 10532876126895677119ull, 3559395838468513957ull, 207259907386686073ull}}, {{15470841531929888711ull, 2619008180081802622ull, 7118791676937027915ull, 414519814773372146ull}}, {{12494938990150225805ull, 5238016360163605245ull, 14237583353874055830ull, 829039629546744292ull}}, {{9877685427513865808ull, 8426300901516541695ull, 10226214300258631812ull, 165807925909348858ull}}, {{1308626781318179999ull, 16852601803033083391ull, 2005684526807712008ull, 331615851818697717ull}}, {{2617253562636359998ull, 15258459532356615166ull, 4011369053615424017ull, 663231703637395434ull}}, {{7902148342011092646ull, 6741040721213233356ull, 15559669069690726096ull, 132646340727479086ull}}, {{15804296684022185292ull, 13482081442426466712ull, 12672594065671900576ull, 265292681454958173ull}}, {{13161849294334818968ull, 8517418811143381809ull, 6898444057634249537ull, 530585362909916347ull}}, {{7876954514960086319ull, 17034837622286763619ull, 13796888115268499074ull, 1061170725819832694ull}}, {{8954088532475837911ull, 14475013968683083693ull, 17516772882021341107ull, 212234145163966538ull}}, {{17908177064951675821ull, 10503283863656615770ull, 16586801690333130599ull, 424468290327933077ull}}, {{17369610056193800025ull, 2559823653603679925ull, 14726859306956709583ull, 848936580655866155ull}}, {{14541968455464490975ull, 11580011174946466954ull, 2945371861391341916ull, 169787316131173231ull}}, {{10637192837219430334ull, 4713278276183382293ull, 5890743722782683833ull, 339574632262346462ull}}, {{2827641600729309051ull, 9426556552366764587ull, 11781487445565367666ull, 679149264524692924ull}}, {{7944225949629682457ull, 1885311310473352917ull, 17113692748080714826ull, 135829852904938584ull}}, {{15888451899259364913ull, 3770622620946705834ull, 15780641422451878036ull, 271659705809877169ull}}, {{13330159724809178210ull, 7541245241893411669ull, 13114538771194204456ull, 543319411619754339ull}}, {{8213575375908804804ull, 15082490483786823339ull, 7782333468678857296ull, 1086638823239508679ull}}, {{16400110334149402254ull, 3016498096757364667ull, 16313861952703412752ull, 217327764647901735ull}}, {{14353476594589252892ull, 6032996193514729335ull, 14180979831697273888ull, 434655529295803471ull}}, {{10260209115468954167ull, 12065992387029458671ull, 9915215589684996160ull, 869311058591606943ull}}, {{16809437082061432127ull, 13481244921631622703ull, 13051089562162730201ull, 173862211718321388ull}}, {{15172130090413312637ull, 8515745769553693791ull, 7655435050615908787ull, 347724423436642777ull}}, {{11897516107117073657ull, 17031491539107387583ull, 15310870101231817574ull, 695448846873285554ull}}, {{6068852036165325055ull, 14474344752047208486ull, 17819569279214004807ull, 139089769374657110ull}}, {{12137704072330650109ull, 10501945430384865356ull, 17192394484718457999ull, 278179538749314221ull}}, {{5828664070951748602ull, 2557146787060179097ull, 15938044895727364383ull, 556359077498628443ull}}, {{11657328141903497204ull, 5114293574120358194ull, 13429345717745177150ull, 1112718154997256887ull}}, {{6020814443122609764ull, 8401556344307892285ull, 10064566773032856076ull, 222543630999451377ull}}, {{12041628886245219528ull, 16803112688615784570ull, 1682389472356160536ull, 445087261998902755ull}}, {{5636513698780887440ull, 15159481303522017525ull, 3364778944712321073ull, 890174523997805510ull}}, {{12195349183981908458ull, 14099942704930134474ull, 672955788942464214ull, 178034904799561102ull}}, {{5943954294254265299ull, 9753141336150717333ull, 1345911577884928429ull, 356069809599122204ull}}, {{11887908588508530598ull, 1059538598591883050ull, 2691823155769856859ull, 712139619198244408ull}}, {{9756279347185526766ull, 7590605349202197256ull, 11606411075379702341ull, 142427923839648881ull}}, {{1065814620661501916ull, 15181210698404394513ull, 4766078077049853066ull, 284855847679297763ull}}, {{2131629241323003832ull, 11915677323099237410ull, 9532156154099706133ull, 569711695358595526ull}}, {{4263258482646007664ull, 5384610572488923204ull, 617568234489860651ull, 1139423390717191053ull}}, {{11920698140754932503ull, 15834317373465425933ull, 11191560091123703099ull, 227884678143438210ull}}, {{5394652207800313389ull, 13221890673221300251ull, 3936376108537854583ull, 455769356286876421ull}}, {{10789304415600626778ull, 7997037272733048886ull, 7872752217075709167ull, 911538712573752842ull}}, {{2157860883120125356ull, 16356802713514251070ull, 8953248072898962479ull, 182307742514750568ull}}, {{4315721766240250711ull, 14266861353318950524ull, 17906496145797924959ull, 364615485029501136ull}}, {{8631443532480501422ull, 10086978632928349432ull, 17366248217886298303ull, 729230970059002273ull}}, {{12794335150721831254ull, 5706744541327580209ull, 14541296087802990630ull, 145846194011800454ull}}, {{7141926227734110892ull, 11413489082655160419ull, 10635848101896429644ull, 291692388023600909ull}}, {{14283852455468221784ull, 4380234091600769222ull, 2824952130083307673ull, 583384776047201819ull}}, {{10120960837226891952ull, 8760468183201538445ull, 5649904260166615346ull, 1166769552094403638ull}}, {{16781587426413019684ull, 16509488895607948981ull, 12198027296259054038ull, 233353910418880727ull}}, {{15116430779116487751ull, 14572233717506346347ull, 5949310518808556461ull, 466707820837761455ull}}, {{11786117484523423885ull, 10697723361303141079ull, 11898621037617112923ull, 933415641675522910ull}}, {{9735921126388505424ull, 13207591116486359185ull, 2379724207523422584ull, 186683128335104582ull}}, {{1025098179067459231ull, 7968438159263166755ull, 4759448415046845169ull, 373366256670209164ull}}, {{2050196358134918462ull, 15936876318526333510ull, 9518896830093690338ull, 746732513340418328ull}}, {{4099388086368894016ull, 6876724078447177025ull, 12971825810244469037ull, 149346502668083665ull}}, {{8198776172737788031ull, 13753448156894354050ull, 7496907546779386458ull, 298693005336167331ull}}, {{16397552345475576062ull, 9060152240079156484ull, 14993815093558772917ull, 597386010672334662ull}}, {{14348360617241600508ull, 18120304480158312969ull, 11540886113407994218ull, 1194772021344669325ull}}, {{10248369752932140748ull, 14692107340257393563ull, 2308177222681598843ull, 238954404268933865ull}}, {{2049995432154729880ull, 10937470606805235511ull, 4616354445363197687ull, 477908808537867730ull}}, {{4099990864309459760ull, 3428197139900919406ull, 9232708890726395375ull, 955817617075735460ull}}, {{4509346987603802276ull, 685639427980183881ull, 1846541778145279075ull, 191163523415147092ull}}, {{9018693975207604551ull, 1371278855960367762ull, 3693083556290558150ull, 382327046830294184ull}}, {{18037387950415209101ull, 2742557711920735524ull, 7386167112581116300ull, 764654093660588368ull}}, {{10986175219566862467ull, 11616557986609878074ull, 12545279866741954229ull, 152930818732117673ull}}, {{3525606365424173318ull, 4786371899510204533ull, 6643815659774356843ull, 305861637464235347ull}}, {{7051212730848346635ull, 9572743799020409066ull, 13287631319548713686ull, 611723274928470694ull}}, {{14102425461696693269ull, 698743524331266516ull, 8128518565387875757ull, 1223446549856941389ull}}, {{10199182721823159301ull, 3829097519608163626ull, 16383098972045216444ull, 244689309971388277ull}}, {{1951621369936766985ull, 7658195039216327253ull, 14319453870380881272ull, 489378619942776555ull}}, {{3903242739873533969ull, 15316390078432654506ull, 10192163667052210928ull, 978757239885553111ull}}, {{780648547974706794ull, 17820673274654172194ull, 5727781548152352508ull, 195751447977110622ull}}, {{1561297095949413588ull, 17194602475598792772ull, 11455563096304705017ull, 391502895954221244ull}}, {{3122594191898827175ull, 15942460877488033928ull, 4464382118899858419ull, 783005791908442489ull}}, {{4313867653121675759ull, 14256538619723337755ull, 15650271682747612976ull, 156601158381688497ull}}, {{8627735306243351517ull, 10066333165737123894ull, 12853799291785674337ull, 313202316763376995ull}}, {{17255470612486703033ull, 1685922257764696172ull, 7260854509861797059ull, 626404633526753991ull}}, {{16064197151263854450ull, 3371844515529392345ull, 14521709019723594118ull, 1252809267053507982ull}}, {{3212839430252770890ull, 674368903105878469ull, 10283039433428539470ull, 250561853410701596ull}}, {{6425678860505541780ull, 1348737806211756938ull, 2119334793147527324ull, 501123706821403193ull}}, {{12851357721011083560ull, 2697475612423513876ull, 4238669586295054648ull, 1002247413642806386ull}}, {{2570271544202216712ull, 15296890381452344068ull, 4537082732000921252ull, 200449482728561277ull}}, {{5140543088404433424ull, 12147036689195136520ull, 9074165464001842505ull, 400898965457122554ull}}, {{10281086176808866848ull, 5847329304680721424ull, 18148330928003685011ull, 801797930914245108ull}}, {{13124263679587504340ull, 15926861119903785577ull, 14697712629826467971ull, 160359586182849021ull}}, {{7801783285465457063ull, 13406978166098019539ull, 10948681185943384327ull, 320719172365698043ull}}, {{15603566570930914125ull, 8367212258486487462ull, 3450618298177217039ull, 641438344731396087ull}}, {{14188759758411913795ull, 5362791266439207815ull, 8068821289119264054ull, 128287668946279217ull}}, {{9930775443114275973ull, 10725582532878415631ull, 16137642578238528108ull, 256575337892558434ull}}, {{1414806812519000330ull, 3004420992047279647ull, 13828541082767504601ull, 513150675785116869ull}}, {{2829613625038000660ull, 6008841984094559294ull, 9210338091825457586ull, 1026301351570233739ull}}, {{15323317983975241425ull, 1201768396818911858ull, 16599462877332732810ull, 205260270314046747ull}}, {{12199891894240931234ull, 2403536793637823717ull, 14752181680955914004ull, 410520540628093495ull}}, {{5953039714772310851ull, 4807073587275647435ull, 11057619288202276392ull, 821041081256186991ull}}, {{12258654387180193140ull, 12029461161680860456ull, 5900872672382365601ull, 164208216251237398ull}}, {{6070564700650834664ull, 5612178249652169297ull, 11801745344764731203ull, 328416432502474796ull}}, {{12141129401301669328ull, 11224356499304338594ull, 5156746615819910790ull, 656832865004949593ull}}, {{9806923509744154512ull, 13312917744086598688ull, 12099395767389713127ull, 131366573000989918ull}}, {{1167102945778757408ull, 8179091414463645761ull, 5752047461069874639ull, 262733146001979837ull}}, {{2334205891557514816ull, 16358182828927291522ull, 11504094922139749278ull, 525466292003959674ull}}, {{4668411783115029631ull, 14269621584145031428ull, 4561445770569946941ull, 1050932584007919349ull}}, {{12001728800848736896ull, 2853924316829006285ull, 15669684413081630681ull, 210186516801583869ull}}, {{5556713527987922176ull, 5707848633658012571ull, 12892624752453709746ull, 420373033603167739ull}}, {{11113427055975844351ull, 11415697267316025142ull, 7338505431197867876ull, 840746067206335479ull}}, {{9601383040678989517ull, 2283139453463205028ull, 16225096345207214868ull, 168149213441267095ull}}, {{756022007648427418ull, 4566278906926410057ull, 14003448616704878120ull, 336298426882534191ull}}, {{1512044015296854835ull, 9132557813852820114ull, 9560153159700204624ull, 672596853765068383ull}}, {{3991757617801281291ull, 9205209192254384669ull, 12980077076165771894ull, 134519370753013676ull}}, {{7983515235602562581ull, 18410418384508769338ull, 7513410078621992172ull, 269038741506027353ull}}, {{15967030471205125161ull, 18374092695307987060ull, 15026820157243984345ull, 538077483012054706ull}}, {{13487316868700698705ull, 18301441316906422505ull, 11606896240778417075ull, 1076154966024109413ull}}, {{13765509817965870711ull, 14728334707607015470ull, 13389425692381414384ull, 215230993204821882ull}}, {{9084275562222189806ull, 11009925341504479325ull, 8332107311053277153ull, 430461986409643765ull}}, {{18168551124444379611ull, 3573106609299407034ull, 16664214622106554307ull, 860923972819287530ull}}, {{7323059039630786246ull, 8093318951343702053ull, 3332842924421310861ull, 172184794563857506ull}}, {{14646118079261572491ull, 16186637902687404106ull, 6665685848842621722ull, 344369589127715012ull}}, {{10845492084813593365ull, 13926531731665256597ull, 13331371697685243445ull, 688739178255430024ull}}, {{5858447231704628997ull, 17542701605300692612ull, 17423669598504689981ull, 137747835651086004ull}}, {{11716894463409257993ull, 16638659136891833608ull, 16400595123299828347ull, 275495671302172009ull}}, {{4987044853108964369ull, 14830574200074115601ull, 14354446172890105079ull, 550991342604344019ull}}, {{9974089706217928738ull, 11214404326438679586ull, 10262148272070658543ull, 1101982685208688039ull}}, {{13062864385469316718ull, 9621578494771556563ull, 16809824913381773001ull, 220396537041737607ull}}, {{7678984697229081819ull, 796412915833561511ull, 15172905753053994387ull, 440793074083475215ull}}, {{15357969394458163637ull, 1592825831667123022ull, 11899067432398437158ull, 881586148166950431ull}}, {{6760942693633543051ull, 15075960425301065897ull, 6069162301221597754ull, 176317229633390086ull}}, {{13521885387267086101ull, 11705176776892580178ull, 12138324602443195509ull, 352634459266780172ull}}, {{8597026700824620586ull, 4963609480075608741ull, 5829905131176839403ull, 705268918533560345ull}}, {{16476800599132565410ull, 12060768340240852717ull, 1165981026235367880ull, 141053783706712069ull}}, {{14506857124555579204ull, 5674792606772153819ull, 2331962052470735761ull, 282107567413424138ull}}, {{10566970175401606792ull, 11349585213544307639ull, 4663924104941471522ull, 564215134826848276ull}}, {{2687196277093661968ull, 4252426353379063663ull, 9327848209882943045ull, 1128430269653696552ull}}, {{537439255418732394ull, 8229182900159633379ull, 9244267271460409255ull, 225686053930739310ull}}, {{1074878510837464788ull, 16458365800319266758ull, 41790469211266894ull, 451372107861478621ull}}, {{2149757021674929575ull, 14469987526928981900ull, 83580938422533789ull, 902744215722957242ull}}, {{4119300219076896239ull, 6583346320127706703ull, 7395413817168327404ull, 180548843144591448ull}}, {{8238600438153792477ull, 13166692640255413406ull, 14790827634336654808ull, 361097686289182896ull}}, {{16477200876307584953ull, 7886641206801275196ull, 11134911194963758001ull, 722195372578365793ull}}, {{3295440175261516991ull, 16334723500327896332ull, 13295028683218482569ull, 144439074515673158ull}}, {{6590880350523033981ull, 14222702926946241048ull, 8143313292727413523ull, 288878149031346317ull}}, {{13181760701046067962ull, 9998661780182930480ull, 16286626585454827047ull, 577756298062692634ull}}, {{7916777328382584308ull, 1550579486656309345ull, 14126509097200102479ull, 1155512596125385269ull}}, {{12651401909902247832ull, 11378162341556992838ull, 17582697078407661788ull, 231102519225077053ull}}, {{6856059746094944047ull, 4309580609404434061ull, 16718650083105771961ull, 462205038450154107ull}}, {{13712119492189888093ull, 8619161218808868122ull, 14990556092501992306ull, 924410076900308215ull}}, {{13810470342663708589ull, 5413181058503683947ull, 2998111218500398461ull, 184882015380061643ull}}, {{9174196611617865561ull, 10826362117007367895ull, 5996222437000796922ull, 369764030760123286ull}}, {{18348393223235731121ull, 3205980160305184174ull, 11992444874001593845ull, 739528061520246572ull}}, {{7359027459389056548ull, 8019893661544857481ull, 9777186604284139415ull, 147905612304049314ull}}, {{14718054918778113095ull, 16039787323089714962ull, 1107629134858727214ull, 295811224608098629ull}}, {{10989365763846674573ull, 13632830572469878309ull, 2215258269717454429ull, 591622449216197258ull}}, {{3531987453983797530ull, 8818917071230205003ull, 4430516539434908859ull, 1183244898432394516ull}}, {{11774443935022490476ull, 1763783414246041000ull, 4575452122628892095ull, 236648979686478903ull}}, {{5102143796335429336ull, 3527566828492082001ull, 9150904245257784190ull, 473297959372957806ull}}, {{10204287592670858671ull, 7055133656984164002ull, 18301808490515568380ull, 946595918745915612ull}}, {{16798252777501813027ull, 8789724360880653446ull, 11039059327586934322ull, 189319183749183122ull}}, {{15149761481294074438ull, 17579448721761306893ull, 3631374581464317028ull, 378638367498366245ull}}, {{11852778888878597260ull, 16712153369813062171ull, 7262749162928634057ull, 757276734996732490ull}}, {{13438602222001450422ull, 10721128303446433080ull, 1452549832585726811ull, 151455346999346498ull}}, {{8430460370293349228ull, 2995512533183314545ull, 2905099665171453623ull, 302910693998692996ull}}, {{16860920740586698455ull, 5991025066366629090ull, 5810199330342907246ull, 605821387997385992ull}}, {{15275097407463845293ull, 11982050132733258181ull, 11620398660685814492ull, 1211642775994771984ull}}, {{10433717110976589705ull, 6085758841288561959ull, 17081474991104804191ull, 242328555198954396ull}}, {{2420690148243627794ull, 12171517682577123919ull, 15716205908500056766ull, 484657110397908793ull}}, {{4841380296487255588ull, 5896291291444696222ull, 12985667743290561917ull, 969314220795817587ull}}, {{4657624874039361441ull, 15936653517256580537ull, 9975831178141933029ull, 193862844159163517ull}}, {{9315249748078722882ull, 13426562960803609458ull, 1504918282574314443ull, 387725688318327035ull}}, {{183755422447894147ull, 8406381847897667301ull, 3009836565148628887ull, 775451376636654070ull}}, {{11104797528715309799ull, 9059973999063354106ull, 601967313029725777ull, 155090275327330814ull}}, {{3762850983721067982ull, 18119947998126708213ull, 1203934626059451554ull, 310180550654661628ull}}, {{7525701967442135964ull, 17793151922543864810ull, 2407869252118903109ull, 620361101309323256ull}}, {{15051403934884271928ull, 17139559771378178004ull, 4815738504237806219ull, 1240722202618646512ull}}, {{3010280786976854386ull, 7117260769017545924ull, 8341845330331381890ull, 248144440523729302ull}}, {{6020561573953708771ull, 14234521538035091848ull, 16683690660662763780ull, 496288881047458604ull}}, {{12041123147907417542ull, 10022299002360632080ull, 14920637247615975945ull, 992577762094917209ull}}, {{17165619888549124802ull, 16761855059439767708ull, 17741522708490836481ull, 198515552418983441ull}}, {{15884495703388697987ull, 15076966045169983801ull, 17036301343272121347ull, 397031104837966883ull}}, {{13322247333067844357ull, 11707188016630415987ull, 15625858612834691079ull, 794062209675933767ull}}, {{13732495910839299841ull, 6030786418067993520ull, 10503869352050758862ull, 158812441935186753ull}}, {{9018247747969048066ull, 12061572836135987041ull, 2560994630391966108ull, 317624883870373507ull}}, {{18036495495938096132ull, 5676401598562422466ull, 5121989260783932217ull, 635249767740747014ull}}, {{17626246918166640648ull, 11352803197124844933ull, 10243978521567864434ull, 1270499535481494028ull}}, {{3525249383633328130ull, 9649258268908789633ull, 13116842148539303856ull, 254099907096298805ull}}, {{7050498767266656259ull, 851772464108027650ull, 7786940223369056097ull, 508199814192597611ull}}, {{14100997534533312518ull, 1703544928216055300ull, 15573880446738112194ull, 1016399628385195222ull}}, {{6509548321648572827ull, 4030057800385121383ull, 10493473718831443085ull, 203279925677039044ull}}, {{13019096643297145654ull, 8060115600770242766ull, 2540203363953334554ull, 406559851354078089ull}}, {{7591449212884739692ull, 16120231201540485533ull, 5080406727906669108ull, 813119702708156178ull}}, {{16275685101544589232ull, 6913395055050007429ull, 12084127789807064791ull, 162623940541631235ull}}, {{14104626129379626847ull, 13826790110100014859ull, 5721511505904577966ull, 325247881083262471ull}}, {{9762508185049702077ull, 9206836146490478103ull, 11443023011809155933ull, 650495762166524942ull}}, {{13020548081235671385ull, 1841367229298095620ull, 9667302231845651833ull, 130099152433304988ull}}, {{7594352088761791154ull, 3682734458596191241ull, 887860389981752050ull, 260198304866609977ull}}, {{15188704177523582308ull, 7365468917192382482ull, 1775720779963504100ull, 520396609733219954ull}}, {{11930664281337612999ull, 14730937834384764965ull, 3551441559927008200ull, 1040793219466439908ull}}, {{13454179300493253570ull, 14014234011102683962ull, 11778334756211132609ull, 208158643893287981ull}}, {{8461614527276955523ull, 9581723948495816309ull, 5109925438712713603ull, 416317287786575963ull}}, {{16923229054553911046ull, 716703823282081002ull, 10219850877425427207ull, 832634575573151926ull}}, {{3384645810910782210ull, 11211387208882147170ull, 5733318990226995764ull, 166526915114630385ull}}, {{6769291621821564419ull, 3976030344054742724ull, 11466637980453991529ull, 333053830229260770ull}}, {{13538583243643128837ull, 7952060688109485448ull, 4486531887198431442ull, 666107660458521541ull}}, {{6397065463470536091ull, 12658458581847628059ull, 4586655192181596611ull, 133221532091704308ull}}, {{12794130926941072181ull, 6870173089985704502ull, 9173310384363193223ull, 266443064183408616ull}} }; static const UINT128 coefflimits_bid64[] = { {{10000000000000000ull, 0ull}}, {{2000000000000000ull, 0ull}}, {{400000000000000ull, 0ull}}, {{80000000000000ull, 0ull}}, {{16000000000000ull, 0ull}}, {{3200000000000ull, 0ull}}, {{640000000000ull, 0ull}}, {{128000000000ull, 0ull}}, {{25600000000ull, 0ull}}, {{5120000000ull, 0ull}}, {{1024000000ull, 0ull}}, {{204800000ull, 0ull}}, {{40960000ull, 0ull}}, {{8192000ull, 0ull}}, {{1638400ull, 0ull}}, {{327680ull, 0ull}}, {{65536ull, 0ull}}, {{13107ull, 0ull}}, {{2621ull, 0ull}}, {{524ull, 0ull}}, {{104ull, 0ull}}, {{20ull, 0ull}}, {{4ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}}, {{0ull, 0ull}} }; // ********************************************************************** static const UINT128 coefflimits_bid128[] = { {{4003012203950112768ull, 542101086242752ull}}, {{8179300070273843200ull, 108420217248550ull}}, {{1635860014054768640ull, 21684043449710ull}}, {{327172002810953728ull, 4336808689942ull}}, {{7444132030046011392ull, 867361737988ull}}, {{12556872850234933248ull, 173472347597ull}}, {{9890072199530807296ull, 34694469519ull}}, {{16735409698873802752ull, 6938893903ull}}, {{14415128384000491520ull, 1387778780ull}}, {{2883025676800098304ull, 277555756ull}}, {{4265953950101929984ull, 55511151ull}}, {{4542539604762296320ull, 11102230ull}}, {{908507920952459264ull, 2220446ull}}, {{3871050398932402176ull, 444089ull}}, {{15531605338754121728ull, 88817ull}}, {{10485018697234644992ull, 17763ull}}, {{13165050183672659968ull, 3552ull}}, {{10011707666218352640ull, 710ull}}, {{2002341533243670528ull, 142ull}}, {{7779165936132554752ull, 28ull}}, {{12623879631452241920ull, 5ull}}, {{2524775926290448384ull, 1ull}}, {{4194304000000000000ull, 0ull}}, {{838860800000000000ull, 0ull}}, {{167772160000000000ull, 0ull}}, {{33554432000000000ull, 0ull}}, {{6710886400000000ull, 0ull}}, {{1342177280000000ull, 0ull}}, {{268435456000000ull, 0ull}}, {{53687091200000ull, 0ull}}, {{10737418240000ull, 0ull}}, {{2147483648000ull, 0ull}}, {{429496729600ull, 0ull}}, {{85899345920ull, 0ull}}, {{17179869184ull, 0ull}}, {{3435973836ull, 0ull}}, {{687194767ull, 0ull}}, {{137438953ull, 0ull}}, {{27487790ull, 0ull}}, {{5497558ull, 0ull}}, {{1099511ull, 0ull}}, {{219902ull, 0ull}}, {{43980ull, 0ull}}, {{8796ull, 0ull}}, {{1759ull, 0ull}}, {{351ull, 0ull}}, {{70ull, 0ull}}, {{14ull, 0ull}}, {{2ull, 0ull}} }; // These are the different, bipartite, tables for conversion to bid128 // Using the same approach, the tables become extremely large // And things are more amenable here since there's never overflow/underflow static const UINT256 outertable_sig[] = { {{16710528681477587410ull, 1427578414467097172ull, 17470362193306814444ull, 17633471421292828081ull}}, {{15880413049339289368ull, 3169162604521042544ull, 12421848348224877000ull, 10175591536883283100ull}}, {{728324709502741634ull, 5487234822932806241ull, 14277366029702694882ull, 11743877385420605756ull}}, {{5270439690693945016ull, 5335305964155802506ull, 4731239033579481048ull, 13553871098685738146ull}}, {{15770926697301461842ull, 17478494563481727979ull, 12172666691698088779ull, 15642825255298684824ull}}, {{6706015564063194464ull, 9524484409513358023ull, 3584925281718916951ull, 18053733887991431306ull}}, {{11970480524618434228ull, 11405570099769256704ull, 15462553542164535233ull, 10418108684938663938ull}}, {{6786207772287397676ull, 2319456072422691258ull, 3306628541457879036ull, 12023771840725819358ull}}, {{11981052113010165492ull, 3504057943690712651ull, 1876153621163772099ull, 13876903538819465956ull}}, {{9393164661428669080ull, 12786250932199773041ull, 1469280998340568779ull, 16015644206874417279ull}}, {{16924685242153318850ull, 18017830257179898541ull, 8443357802200517361ull, 9242006282008467740ull}}, {{10964968671057563176ull, 5039440430669711539ull, 5426243050445487622ull, 10666405798403203685ull}}, {{10955754838860298353ull, 7697974614691938479ull, 5802604364043796934ull, 12310337083160321132ull}}, {{2020816881108765590ull, 11827301330378587775ull, 11428107909474365520ull, 14207634883319258514ull}}, {{17088069107880998350ull, 4283872614129133981ull, 3596834484036483711ull, 16397348635874181367ull}}, {{17878879927905357932ull, 16765016545576715295ull, 16689816215723394984ull, 9462273083962776199ull}}, {{13121733289080687293ull, 18283685101712419716ull, 16276586284347626380ull, 10920620632484725600ull}}, {{17814811358648632259ull, 13245640156276305425ull, 16363965810173909683ull, 12603732099085151178ull}}, {{4756697993914874888ull, 11508234184157253656ull, 5137266535116401279ull, 14546248621894116172ull}}, {{5318236458935323174ull, 6543830884414701181ull, 6453355338781772809ull, 16788150311867950084ull}}, {{6485710970464102310ull, 9658720758000782538ull, 1405691438411884535ull, 9687789553853107178ull}}, {{16668567668910748869ull, 7353216905500064137ull, 16398637311140236340ull, 11180894225541718927ull}}, {{10250898639443956700ull, 17209112682100433509ull, 10404161081088486903ull, 12904119664018836844ull}}, {{8190593687966138954ull, 9395575747272723417ull, 5270639644724875979ull, 14892932617404296676ull}}, {{16096765186944088526ull, 5812137315202163815ull, 13827109944906121794ull, 17188266051577202911ull}}, {{13125058493821651226ull, 13878096157524874998ull, 7819283672493662452ull, 9918680808189048078ull}}, {{10784977039313888136ull, 7095114120404217728ull, 5980679097159643429ull, 11447370977331402726ull}}, {{18074025829186132275ull, 1141984379626550674ull, 7557580538320593620ull, 13211666432945230258ull}}, {{884127375074722974ull, 5630658839879210216ull, 8888788495242174599ull, 15247879210087606793ull}}, {{14794677677148287412ull, 15991859528909753139ull, 2255166953101703543ull, 17597917839164816062ull}}, {{11781503818372409883ull, 16487377189598053250ull, 1614766483381505408ull, 10155074945409931597ull}}, {{13901203812957478350ull, 17671725616207330354ull, 9774501520532043416ull, 11720198729122693309ull}}, {{2841277750318224700ull, 62614824260888948ull, 7875289095414864909ull, 13526543032773672749ull}}, {{4177215723684349918ull, 5549883551398310595ull, 6548711429670794128ull, 15611285324269742443ull}}, {{10113135653152274419ull, 1238174514434849746ull, 15010187426055142985ull, 18017332949391848572ull}}, {{15332868447221136909ull, 16659234357027498643ull, 8156814090647504084ull, 10397103116953834012ull}}, {{15245187402216469644ull, 12129929088655149192ull, 9861651730211963150ull, 11999528845718521943ull}}, {{11169863271521019024ull, 11690833164181629132ull, 18055231442152805128ull, 13848924157002783033ull}}, {{5681139181384005971ull, 16315598095635316730ull, 12429006944274865118ull, 15983352577617880224ull}}, {{0ull, 0ull, 0ull, 9223372036854775808ull}}, {{847738094735128551ull, 159020156881263929ull, 14298703881791668535ull, 10644899600020376799ull}}, {{12571812103339493257ull, 9592188640606484874ull, 15977522551232326327ull, 12285516299433008781ull}}, {{11255846670375652269ull, 16219642565822741785ull, 1164180458167399492ull, 14178988662640388631ull}}, {{4768530159026621925ull, 11269558331910606010ull, 14728279675391465720ull, 16364287392998134214ull}}, {{10435171899994305314ull, 3358688235984080491ull, 10873005112892106269ull, 9443194724678278428ull}}, {{9001934648837042518ull, 12742858465034581069ull, 7821978264675184102ull, 10898601872067700364ull}}, {{17621267265258286727ull, 4697230115438671198ull, 9730745556445007669ull, 12578319756070083561ull}}, {{15489206033570711069ull, 5939008219696634639ull, 7281543418588385486ull, 14516919669433371671ull}}, {{5582382164278045428ull, 1021128504191590019ull, 15859662269683349667ull, 16754301112998936544ull}}, {{13306060077138970688ull, 17077419079040409017ull, 602300193611639289ull, 9668256495766433483ull}}, {{16144900726383728979ull, 6332437060439625781ull, 3394061071468721991ull, 11158350687084940805ull}}, {{841527738022137013ull, 8576187517129556015ull, 4780478900157118356ull, 12878101662951253988ull}}, {{6209518431268106959ull, 6563228687006195825ull, 8680557599339190037ull, 14862904661462481806ull}}, {{13777918056850427098ull, 13980713634323581067ull, 3260730320187665275ull, 17153610117183879308ull}}, {{14026398967643035423ull, 16044002814696042637ull, 13563648246219923183ull, 9898682214361989196ull}}, {{8580849201736980837ull, 7652064075251385167ull, 12055336643618066002ull, 11424290153682525668ull}}, {{7703450277136593061ull, 30939122015382097ull, 1733744904199768989ull, 13185028339041359606ull}}, {{16645858086931268484ull, 268706294728574543ull, 4562366333509913804ull, 15217135591158481007ull}}, {{1535817262145462730ull, 16249574698204674087ull, 1726174694286833848ull, 17562435942139069664ull}}, {{1327779613951528273ull, 12607890553358950732ull, 6773080245737622022ull, 10134599720625107110ull}}, {{10146669700226523625ull, 6816618733538609533ull, 17338427607494047961ull, 11696567815043613180ull}}, {{1218646606393179524ull, 8053984438814192242ull, 5512554737593155320ull, 13499270067222312908ull}}, {{8529816360522570005ull, 2898610325645650649ull, 12799329154556421864ull, 15579808985797328396ull}}, {{8976626101186384018ull, 17306366585957786234ull, 18289272351796647404ull, 17981005404381600394ull}}, {{13259258789938866699ull, 3853966764738768487ull, 3962898110873089456ull, 10376139901559067117ull}}, {{899097863387258947ull, 18205835716688941338ull, 5828614502416977816ull, 11975334730781032005ull}}, {{6805696657844643720ull, 11269663690239600300ull, 15713752492130876427ull, 13821001188766021149ull}}, {{1390669429605106863ull, 9874674503958832077ull, 10784451562526769943ull, 15951126056533488631ull}}, {{5704986635434998471ull, 13359511205918707297ull, 13484363347568202582ull, 18409550726197325520ull}}, {{8031416311578790746ull, 15203770801091158414ull, 10108131133879485063ull, 10623436763626360685ull}}, {{14540970352057967818ull, 10823414366732926995ull, 16152175176069010361ull, 12260745560745135745ull}}, {{15950896424073439808ull, 7311065895593189991ull, 14504991862333000338ull, 14150400200058902426ull}}, {{5978819348613013533ull, 5596367464999577452ull, 9804643584580705193ull, 16331292810031855499ull}}, {{8586457898440847299ull, 6018330550275346810ull, 7956755163056284140ull, 9424154832238877876ull}}, {{1114429888821394320ull, 1760611426277998851ull, 9839409379426382903ull, 10876627507095459665ull}}, {{7554605751361075608ull, 6504275622057553570ull, 9148491728899045148ull, 12552958650829068784ull}}, {{9208049516541304162ull, 15518058123431536615ull, 17563500997894963674ull, 14487649851631658771ull}}, {{1484107481346855224ull, 16657394431011607502ull, 12009304572091620947ull, 16720520162760224108ull}}, {{14325586681310127114ull, 11250726580617083666ull, 2403442209646777766ull, 9648762821313776241ull}}, {{14963893077912294692ull, 3450059817568720983ull, 15313875826588494017ull, 11135852602159508258ull}} }; static const UINT256 innertable_sig[] = { {{1014026100135492416ull, 3035406636157676337ull, 4549648098962661924ull, 12141680576410806693ull}}, {{5879218643596753424ull, 3794258295197095421ull, 10298746142130715309ull, 15177100720513508366ull}}, {{5980354661461664842ull, 4677254443711878590ull, 1825030320404309164ull, 9485687950320942729ull}}, {{16698815363681856860ull, 5846568054639848237ull, 6892973918932774359ull, 11857109937901178411ull}}, {{7038461149320157363ull, 2696524049872422393ull, 4004531380238580045ull, 14821387422376473014ull}}, {{15928253264393568112ull, 3991170540383957947ull, 16337890167931276240ull, 9263367138985295633ull}}, {{15298630562064572236ull, 4988963175479947434ull, 6587304654631931588ull, 11579208923731619542ull}}, {{9899916165725939487ull, 6236203969349934293ull, 17457502855144690293ull, 14474011154664524427ull}}, {{16986581225584812263ull, 12406940980114805770ull, 17210192550503474962ull, 18092513943330655534ull}}, {{15228299284417895569ull, 12366024130999141510ull, 6144684325637283947ull, 11307821214581659709ull}}, {{9812002068667593653ull, 10845844145321538984ull, 12292541425473992838ull, 14134776518227074636ull}}, {{12265002585834492066ull, 4333933144797147922ull, 15365676781842491048ull, 17668470647783843295ull}}, {{12277312634573945445ull, 2708708215498217451ull, 16521077016292638761ull, 11042794154864902059ull}}, {{10734954774790043902ull, 7997571287800159718ull, 16039660251938410547ull, 13803492693581127574ull}}, {{4195321431632779070ull, 5385278091322811744ull, 10826203278068237376ull, 17254365866976409468ull}}, {{2622075894770486919ull, 3365798807076757340ull, 15989749085647424168ull, 10783978666860255917ull}}, {{3277594868463108648ull, 4207248508845946675ull, 6152128301777116498ull, 13479973333575319897ull}}, {{17932051640861049522ull, 14482432672912209151ull, 12301846395648783526ull, 16849966666969149871ull}}, {{18125061303179237808ull, 4439834402142742815ull, 14606183024921571560ull, 10531229166855718669ull}}, {{18044640610546659355ull, 5549793002678428519ull, 4422670725869800738ull, 13164036458569648337ull}}, {{17944114744755936290ull, 16160613290202811457ull, 10140024425764638826ull, 16455045573212060421ull}}, {{4297542687831378326ull, 14712069324804145065ull, 8643358275316593218ull, 10284403483257537763ull}}, {{9983614378216610811ull, 9166714619150405523ull, 6192511825718353619ull, 12855504354071922204ull}}, {{7867831954343375609ull, 6846707255510619000ull, 7740639782147942024ull, 16069380442589902755ull}}, {{4917394971464609756ull, 4279192034694136875ull, 2532056854628769813ull, 10043362776618689222ull}}, {{1535057695903374291ull, 9960676061795058998ull, 12388443105140738074ull, 12554203470773361527ull}}, {{11142194156733993672ull, 3227473040389047939ull, 10873867862998534689ull, 15692754338466701909ull}}, {{4658028338745052093ull, 13546385696311624722ull, 9102010423587778132ull, 9807971461541688693ull}}, {{15045907460286090924ull, 16932982120389530902ull, 15989199047912110569ull, 12259964326927110866ull}}, {{9584012288502837847ull, 7331169595204749916ull, 10763126773035362404ull, 15324955408658888583ull}}, {{15213379717169049462ull, 13805353033857744505ull, 13644483260788183358ull, 9578097130411805364ull}}, {{5181666591179148116ull, 8033319255467404824ull, 17055604075985229198ull, 11972621413014756705ull}}, {{6477083238973935145ull, 818277032479480222ull, 7484447039699372786ull, 14965776766268445882ull}}, {{17883235079640873178ull, 5123109163727063042ull, 9289465418239495895ull, 9353610478917778676ull}}, {{13130671812696315664ull, 1792200436231440899ull, 11611831772799369869ull, 11692013098647223345ull}}, {{11801653747443006676ull, 6851936563716689028ull, 679731660717048624ull, 14615016373309029182ull}}, {{14752067184303758345ull, 8564920704645861285ull, 10073036612751086588ull, 18268770466636286477ull}}, {{11525884999403542918ull, 14576447477258439111ull, 8601490892183123069ull, 11417981541647679048ull}}, {{9795670230827040743ull, 4385501291290885177ull, 10751863615228903837ull, 14272476927059598810ull}}, {{16856273806961188833ull, 10093562632540994375ull, 4216457482181353988ull, 17840596158824498513ull}}, {{17452700156991824877ull, 15531848682192897292ull, 14164500972431816002ull, 11150372599265311570ull}}, {{3369131122530229480ull, 10191438815886345808ull, 8482254178684994195ull, 13937965749081639463ull}}, {{4211413903162786849ull, 8127612501430544356ull, 5991131704928854840ull, 17422457186352049329ull}}, {{11855505726331517589ull, 5079757813394090222ull, 15273672361649004035ull, 10889035741470030830ull}}, {{5596010121059621178ull, 1738011248315224874ull, 9868718415206479236ull, 13611294676837538538ull}}, {{16218384688179302281ull, 2172514060394031092ull, 3112525982153323237ull, 17014118346046923173ull}}, {{913118393257288118ull, 3663664296959963385ull, 4251171748059520975ull, 10633823966279326983ull}}, {{5753084009998998051ull, 18414638426482117943ull, 702278666647013314ull, 13292279957849158729ull}}, {{2579668994071359659ull, 13794925996247871621ull, 5489534351736154547ull, 16615349947311448411ull}}, {{3918136130508293739ull, 6315985738441225811ull, 1125115960621402640ull, 10384593717069655257ull}}, {{285984144707979270ull, 7894982173051532264ull, 6018080969204141204ull, 12980742146337069071ull}}, {{357480180884974087ull, 9868727716314415330ull, 2910915193077788601ull, 16225927682921336339ull}}, {{4835111131480496709ull, 17697169868764979341ull, 17960223060169475539ull, 10141204801825835211ull}}, {{10655574932778008790ull, 17509776317528836272ull, 17838592806784456520ull, 12676506002282294014ull}}, {{13319468665972510987ull, 3440476323201493724ull, 13074868971625794843ull, 15845632502852867518ull}}, {{17548039953087595175ull, 18291198766496791241ull, 3560107088838733872ull, 9903520314283042199ull}}, {{8099991886077330257ull, 4417254384411437436ull, 18285191916330581053ull, 12379400392853802748ull}}, {{10124989857596662821ull, 10133253998941684699ull, 4409745821703674700ull, 15474250491067253436ull}}, {{4022275651784220311ull, 15556655786193328745ull, 11979463175419572495ull, 9671406556917033397ull}}, {{9639530583157663293ull, 14834133714314273027ull, 1139270913992301907ull, 12089258196146291747ull}}, {{7437727210519691212ull, 13930981124465453380ull, 15259146697772541096ull, 15111572745182864683ull}}, {{13871951543429582816ull, 8706863202790908362ull, 7231123676894144233ull, 9444732965739290427ull}}, {{8116567392432202712ull, 15495265021916023357ull, 4427218577690292387ull, 11805916207174113034ull}}, {{14757395258967641293ull, 14757395258967641292ull, 14757395258967641292ull, 14757395258967641292ull}}, {{0ull, 0ull, 0ull, 9223372036854775808ull}}, {{0ull, 0ull, 0ull, 11529215046068469760ull}}, {{0ull, 0ull, 0ull, 14411518807585587200ull}}, {{0ull, 0ull, 0ull, 18014398509481984000ull}}, {{0ull, 0ull, 0ull, 11258999068426240000ull}}, {{0ull, 0ull, 0ull, 14073748835532800000ull}}, {{0ull, 0ull, 0ull, 17592186044416000000ull}}, {{0ull, 0ull, 0ull, 10995116277760000000ull}}, {{0ull, 0ull, 0ull, 13743895347200000000ull}}, {{0ull, 0ull, 0ull, 17179869184000000000ull}}, {{0ull, 0ull, 0ull, 10737418240000000000ull}}, {{0ull, 0ull, 0ull, 13421772800000000000ull}}, {{0ull, 0ull, 0ull, 16777216000000000000ull}}, {{0ull, 0ull, 0ull, 10485760000000000000ull}}, {{0ull, 0ull, 0ull, 13107200000000000000ull}}, {{0ull, 0ull, 0ull, 16384000000000000000ull}}, {{0ull, 0ull, 0ull, 10240000000000000000ull}}, {{0ull, 0ull, 0ull, 12800000000000000000ull}}, {{0ull, 0ull, 0ull, 16000000000000000000ull}}, {{0ull, 0ull, 0ull, 10000000000000000000ull}}, {{0ull, 0ull, 0ull, 12500000000000000000ull}}, {{0ull, 0ull, 0ull, 15625000000000000000ull}}, {{0ull, 0ull, 0ull, 9765625000000000000ull}}, {{0ull, 0ull, 0ull, 12207031250000000000ull}}, {{0ull, 0ull, 0ull, 15258789062500000000ull}}, {{0ull, 0ull, 0ull, 9536743164062500000ull}}, {{0ull, 0ull, 0ull, 11920928955078125000ull}}, {{0ull, 0ull, 0ull, 14901161193847656250ull}}, {{0ull, 0ull, 4611686018427387904ull, 9313225746154785156ull}}, {{0ull, 0ull, 5764607523034234880ull, 11641532182693481445ull}}, {{0ull, 0ull, 11817445422220181504ull, 14551915228366851806ull}}, {{0ull, 0ull, 5548434740920451072ull, 18189894035458564758ull}}, {{0ull, 0ull, 17302829768357445632ull, 11368683772161602973ull}}, {{0ull, 0ull, 7793479155164643328ull, 14210854715202003717ull}}, {{0ull, 0ull, 14353534962383192064ull, 17763568394002504646ull}}, {{0ull, 0ull, 4359273333062107136ull, 11102230246251565404ull}}, {{0ull, 0ull, 5449091666327633920ull, 13877787807814456755ull}}, {{0ull, 0ull, 2199678564482154496ull, 17347234759768070944ull}}, {{0ull, 0ull, 1374799102801346560ull, 10842021724855044340ull}}, {{0ull, 0ull, 1718498878501683200ull, 13552527156068805425ull}}, {{0ull, 0ull, 6759809616554491904ull, 16940658945086006781ull}}, {{0ull, 0ull, 6530724019560251392ull, 10587911840678754238ull}}, {{0ull, 0ull, 17386777061305090048ull, 13234889800848442797ull}}, {{0ull, 0ull, 7898413271349198848ull, 16543612251060553497ull}}, {{0ull, 0ull, 16465723340661719040ull, 10339757656912845935ull}}, {{0ull, 0ull, 15970468157399760896ull, 12924697071141057419ull}}, {{0ull, 0ull, 15351399178322313216ull, 16155871338926321774ull}}, {{0ull, 0ull, 4982938468024057856ull, 10097419586828951109ull}}, {{0ull, 0ull, 10840359103457460224ull, 12621774483536188886ull}}, {{0ull, 0ull, 4327076842467049472ull, 15777218104420236108ull}}, {{0ull, 0ull, 11927795063396681728ull, 9860761315262647567ull}}, {{0ull, 0ull, 10298057810818464256ull, 12325951644078309459ull}}, {{0ull, 0ull, 8260886245095692416ull, 15407439555097886824ull}}, {{0ull, 0ull, 5163053903184807760ull, 9629649721936179265ull}}, {{0ull, 0ull, 11065503397408397604ull, 12037062152420224081ull}}, {{0ull, 0ull, 18443565265187884909ull, 15046327690525280101ull}}, {{0ull, 2305843009213693952ull, 13833071299956122020ull, 9403954806578300063ull}}, {{0ull, 2882303761517117440ull, 12679653106517764621ull, 11754943508222875079ull}}, {{0ull, 8214565720323784704ull, 11237880364719817872ull, 14693679385278593849ull}}, {{0ull, 10268207150404730880ull, 212292400617608628ull, 18367099231598242312ull}}, {{0ull, 15641001505857732608ull, 132682750386005392ull, 11479437019748901445ull}}, {{0ull, 1104507808612614144ull, 4777539456409894645ull, 14349296274686126806ull}}, {{0ull, 5992320779193155584ull, 15195296357367144114ull, 17936620343357658507ull}}, {{0ull, 8356886505423110144ull, 7191217214140771119ull, 11210387714598536567ull}} }; static const int outertable_exp[] = { -16839, -16413, -15988, -15563, -15138, -14713, -14287, -13862, -13437, -13012, -12586, -12161, -11736, -11311, -10886, -10460, -10035, -9610, -9185, -8760, -8334, -7909, -7484, -7059, -6634, -6208, -5783, -5358, -4933, -4508, -4082, -3657, -3232, -2807, -2382, -1956, -1531, -1106, -681, -255, 170, 595, 1020, 1445, 1871, 2296, 2721, 3146, 3571, 3997, 4422, 4847, 5272, 5697, 6123, 6548, 6973, 7398, 7823, 8249, 8674, 9099, 9524, 9949, 10375, 10800, 11225, 11650, 12075, 12501, 12926, 13351, 13776, 14202, 14627, 15052, 15477, 15902, 16328, 16753, }; static const int innertable_exp[] = { -468, -465, -461, -458, -455, -451, -448, -445, -442, -438, -435, -432, -428, -425, -422, -418, -415, -412, -408, -405, -402, -398, -395, -392, -388, -385, -382, -378, -375, -372, -368, -365, -362, -358, -355, -352, -349, -345, -342, -339, -335, -332, -329, -325, -322, -319, -315, -312, -309, -305, -302, -299, -295, -292, -289, -285, -282, -279, -275, -272, -269, -265, -262, -259, -255, -252, -249, -246, -242, -239, -236, -232, -229, -226, -222, -219, -216, -212, -209, -206, -202, -199, -196, -192, -189, -186, -182, -179, -176, -172, -169, -166, -162, -159, -156, -153, -149, -146, -143, -139, -136, -133, -129, -126, -123, -119, -116, -113, -109, -106, -103, -99, -96, -93, -89, -86, -83, -79, -76, -73, -69, -66, -63, -60, -56, -53, -50, -46, }; // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid32_to_binary32 (float *pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT32 x = *px; #else float bid32_to_binary32 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid32 (x, s, e, k, (c.w[1]), return_binary32_zero (s), return_binary32_inf (s), return_binary32_nan); // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89 // Thus a shift of 25 given that we've already upacked in c.w[1] c.w[1] = c.w[1] << 25; c.w[0] = 0; k = k + 89; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is e >= ceil(128 * log_10(2)) = 39 if (e >= 39) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary32_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -80) e = -80; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary32 + 80)[e]; e_out = (exponents_binary32 + 80)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary32 + 80)[e]; } else { r = (multipliers2_binary32 + 80)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 26) d = 26; e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov = z.w[5]; // Round using round-sticky words // If we spill into the next binade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == (1ull << 24)) { c_prov = 1ull << 23; e_out = e_out + 1; } else if ((c_prov == (1ull << 23)) && (e_out == 1)) { if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) || ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63)))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out >= 255) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary32_ovf (s); } // Modify exponent for a tiny result, otherwise lop the implicit bit if (c_prov < (1ull << 23)) e_out = 0; else c_prov = c_prov & ((1ull << 23) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary32 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid64_to_binary32 (float *pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else float bid64_to_binary32 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid64 (x, s, e, k, (c.w[0]), return_binary32_zero (s), return_binary32_inf (s), return_binary32_nan); c.w[1] = 0; // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59 sll128_short (c.w[1], c.w[0], 59); k = k + 59; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is e >= ceil(128 * log_10(2)) = 39 if (e >= 39) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary32_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -80) e = -80; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary32 + 80)[e]; e_out = (exponents_binary32 + 80)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary32 + 80)[e]; } else { r = (multipliers2_binary32 + 80)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 26) d = 26; e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov = z.w[5]; // Round using round-sticky words // If we spill into the next binade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == (1ull << 24)) { c_prov = 1ull << 23; e_out = e_out + 1; } else if ((c_prov == (1ull << 23)) && (e_out == 1)) { if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) || ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63)))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out >= 255) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary32_ovf (s); } // Modify exponent for a tiny result, otherwise lop the implicit bit if (c_prov < (1ull << 23)) e_out = 0; else c_prov = c_prov & ((1ull << 23) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary32 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid128_to_binary32 (float *pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else float bid128_to_binary32 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid128 (x, s, e, k, c, return_binary32_zero (s), return_binary32_inf (s), return_binary32_nan); // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is e >= ceil(128 * log_10(2)) = 39 if (e >= 39) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary32_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -80) e = -80; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary32 + 80)[e]; e_out = (exponents_binary32 + 80)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary32 + 80)[e]; } else { r = (multipliers2_binary32 + 80)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 26) d = 26; e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov = z.w[5]; // Round using round-sticky words // If we spill into the next binade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == (1ull << 24)) { c_prov = 1ull << 23; e_out = e_out + 1; } else if ((c_prov == (1ull << 23)) && (e_out == 1)) { if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) || ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63)))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out >= 255) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary32_ovf (s); } // Modify exponent for a tiny result, otherwise lop the implicit bit if (c_prov < (1ull << 23)) e_out = 0; else c_prov = c_prov & ((1ull << 23) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary32 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid32_to_binary64 (double *pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT32 x = *px; #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #else double bid32_to_binary64 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; SET_RESTORE_RND_TO_BFP(); unpack_bid32 (x, s, e, k, (c.w[1]), return_binary64_zero (s), return_binary64_inf (s), return_binary64_nan); // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89 // In fact shift a further 6 places ready for reciprocal multiplication // Thus (113-24)+6=95, a shift of 31 given that we've already upacked in c.w[1] c.w[1] = c.w[1] << 31; c.w[0] = 0; k = k + 89; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is e >= ceil(1024 * log_10(2)) = ceil(308.25) = 309 if (e >= 309) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary64_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -358) e = -358; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary64 + 358)[e]; e_out = (exponents_binary64 + 358)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary64 + 358)[e]; } else { r = (multipliers2_binary64 + 358)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 55) d = 55; e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov = z.w[5]; // Round using round-sticky words // If we spill into the next binade, correct if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == (1ull << 53)) { c_prov = 1ull << 52; e_out = e_out + 1; } } // Check for overflow if (e_out >= 2047) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary64_ovf (s); } // Modify exponent for a tiny result, otherwise lop the implicit bit if (c_prov < (1ull << 52)) e_out = 0; else c_prov = c_prov & ((1ull << 52) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary64 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid64_to_binary64 (double *pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #else double bid64_to_binary64 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; SET_RESTORE_RND_TO_BFP(); unpack_bid64 (x, s, e, k, (c.w[1]), return_binary64_zero (s), return_binary64_inf (s), return_binary64_nan); // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59 // In fact shift a further 6 places ready for reciprocal multiplication // Thus (113-54)+6=65, a shift of 1 given that we've already upacked in c.w[1] c.w[1] = c.w[1] << 1; c.w[0] = 0; k = k + 59; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(1024 * log_10(2)) = ceil(308.25) = 309 if (e >= 309) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary64_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -358) e = -358; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary64 + 358)[e]; e_out = (exponents_binary64 + 358)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary64 + 358)[e]; } else { r = (multipliers2_binary64 + 358)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 55) d = 55; e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov = z.w[5]; // Round using round-sticky words // If we spill into the next binade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == (1ull << 53)) { c_prov = 1ull << 52; e_out = e_out + 1; } else if ((c_prov == (1ull << 52)) && (e_out == 1)) { if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) || ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63)))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out >= 2047) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary64_ovf (s); } // Modify exponent for a tiny result, otherwise lop the implicit bit if (c_prov < (1ull << 52)) e_out = 0; else c_prov = c_prov & ((1ull << 52) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary64 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid128_to_binary64 (double *pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #else double bid128_to_binary64 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; SET_RESTORE_RND_TO_BFP(); unpack_bid128 (x, s, e, k, c, return_binary64_zero (s), return_binary64_inf (s), return_binary64_nan); // Shift 6 more places left ready for reciprocal multiplication sll128_short (c.w[1], c.w[0], 6); // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(1024 * log_10(2)) = ceil(308.25) = 309 if (e >= 309) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary64_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -358) e = -358; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary64 + 358)[e]; e_out = (exponents_binary64 + 358)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary64 + 358)[e]; } else { r = (multipliers2_binary64 + 358)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 55) d = 55; e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov = z.w[5]; // Round using round-sticky words // If we spill into the next binade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == (1ull << 53)) { c_prov = 1ull << 52; e_out = e_out + 1; } else if ((c_prov == (1ull << 52)) && (e_out == 1)) { if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) || ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63)))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out >= 2047) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary64_ovf (s); } // Modify exponent for a tiny result, otherwise lop the implicit bit if (c_prov < (1ull << 52)) e_out = 0; else c_prov = c_prov & ((1ull << 52) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary64 (s, e_out, c_prov); } // ********************************************************************** #if __ENABLE_BINARY80__ #if DECIMAL_CALL_BY_REFERENCE void bid32_to_binary80 (BINARY80 * pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT32 x = *px; #else BINARY80 bid32_to_binary80 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid32 (x, s, e, k, (c.w[1]), return_binary80_zero (s), return_binary80_inf (s), return_binary80_nan); // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89 // Given that we've unpacked in the high part (<<64), that's just <<25 c.w[1] = c.w[1] << 25; c.w[0] = 0; k = k + 89; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933 if (e >= 4933) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary80_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -4985) e = -4985; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary80 + 4985)[e]; e_out = (exponents_binary80 + 4985)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary80 + 4985)[e]; } else { r = (multipliers2_binary80 + 4985)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication; make an effective shift of 303 bits // by shifting 47 places right and taking the result from word 4 __mul_128x256_to_384 (z, c, r) srl256 (z.w[5], z.w[4], z.w[3], z.w[2], 47); // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 66) d = 66; if (d >= 64) { d -= 64; z.w[1] = z.w[2], z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = 0; } e_out = 1; srl256 (z.w[4], z.w[3], z.w[2], z.w[1], d); } c_prov = z.w[4]; // Round using round-sticky words // If we spill into the next binade, correct if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[3], z.w[2])) { c_prov = c_prov + 1; if (c_prov == 0) { c_prov = 1ull << 63; e_out = e_out + 1; } } // Check for overflow if (e_out >= 32767) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary80_ovf (s); } // Modify exponent for a tiny result if (c_prov < (1ull << 63)) e_out = 0; // Set the inexact and underflow flag as appropriate if ((z.w[3] != 0) || (z.w[2] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary80 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid64_to_binary80 (BINARY80 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else BINARY80 bid64_to_binary80 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid64 (x, s, e, k, (c.w[0]), return_binary80_zero (s), return_binary80_inf (s), return_binary80_nan); c.w[1] = 0; // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59 sll128_short (c.w[1], c.w[0], 59); k = k + 59; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933 if (e >= 4933) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary80_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -4985) e = -4985; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary80 + 4985)[e]; e_out = (exponents_binary80 + 4985)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary80 + 4985)[e]; } else { r = (multipliers2_binary80 + 4985)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication; make an effective shift of 303 bits // by shifting 47 places right and taking the result from word 4 __mul_128x256_to_384 (z, c, r) srl256 (z.w[5], z.w[4], z.w[3], z.w[2], 47); // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 66) d = 66; if (d >= 64) { d -= 64; z.w[1] = z.w[2], z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = 0; } e_out = 1; srl256 (z.w[4], z.w[3], z.w[2], z.w[1], d); } c_prov = z.w[4]; // Round using round-sticky words // If we spill into the next binade, correct if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[3], z.w[2])) { c_prov = c_prov + 1; if (c_prov == 0) { c_prov = 1ull << 63; e_out = e_out + 1; } } // Check for overflow if (e_out >= 32767) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary80_ovf (s); } // Modify exponent for a tiny result if (c_prov < (1ull << 63)) e_out = 0; // Set the inexact and underflow flag as appropriate if ((z.w[3] != 0) || (z.w[2] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary80 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid128_to_binary80 (BINARY80 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else BINARY80 bid128_to_binary80 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid128 (x, s, e, k, c, return_binary80_zero (s), return_binary80_inf (s), return_binary80_nan); // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933 if (e >= 4933) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary80_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 115) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -4985) e = -4985; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary80 + 4985)[e]; e_out = (exponents_binary80 + 4985)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary80 + 4985)[e]; } else { r = (multipliers2_binary80 + 4985)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication; make an effective shift of 303 bits // by shifting 47 places right and taking the result from word 4 __mul_128x256_to_384 (z, c, r) srl256 (z.w[5], z.w[4], z.w[3], z.w[2], 47); // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 66) d = 66; if (d >= 64) { d -= 64; z.w[1] = z.w[2], z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = 0; } e_out = 1; srl256 (z.w[4], z.w[3], z.w[2], z.w[1], d); } c_prov = z.w[4]; // Round using round-sticky words // If we spill into the next binade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[3], z.w[2])) { c_prov = c_prov + 1; if (c_prov == 0) { c_prov = 1ull << 63; e_out = e_out + 1; } else if ((c_prov == (1ull << 63)) && (e_out == 1)) { if ((((rnd_mode & 3) == 0) && (z.w[3] < (3ull << 62))) || ((rnd_mode + (s & 1) == 2) && (z.w[3] < (1ull << 63)))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out >= 32767) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary80_ovf (s); } // Modify exponent for a tiny result if (c_prov < (1ull << 63)) e_out = 0; // Set the inexact and underflow flag as appropriate if ((z.w[3] != 0) || (z.w[2] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary80 (s, e_out, c_prov); } #endif // matches #if __ENABLE_BINARY80__ // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid32_to_binary128 (BINARY128 * pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT32 x = *px; #else BINARY128 bid32_to_binary128 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov_hi, c_prov_lo; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid32 (x, s, e, k, (c.w[1]), return_binary128_zero (s), return_binary128_inf (s), return_binary128_nan); // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89 // But also make an additional shift of 2 places to get a whole-word lop: // (c * r) >> 254 = ((c << 2) * r) >> 256. Given that we unpack in the high // end, our shift is (89+2)-64 = 27 c.w[0] = 0; c.w[1] = c.w[1] << 27; k = k + 89; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933 if (e >= 4933) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary128_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 114) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -5000) e = -5000; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary128 + 5000)[e]; e_out = (exponents_binary128 + 5000)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary128 + 5000)[e]; } else { r = (multipliers2_binary128 + 5000)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication; make an effective shift of 254 bits // (given that we already shifted left 2 places) by lopping from word 4 __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 115) d = 115; if (d >= 64) { d -= 64; z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = z.w[5], z.w[5] = 0; } e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov_hi = z.w[5]; c_prov_lo = z.w[4]; // Round using round-sticky words // If we spill into the next binade, correct if (lt128 (roundbound_128 [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) { c_prov_lo = c_prov_lo + 1; if (c_prov_lo == 0) { c_prov_hi = c_prov_hi + 1; if (c_prov_hi == 1ull << 49) { c_prov_hi = 1ull << 48; e_out = e_out + 1; } } } // Check for overflow if (e_out >= 32767) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary128_ovf (s); } // Modify exponent for a tiny result; otherwise lop off the implicit bit if (c_prov_hi < (1ull << 48)) e_out = 0; else c_prov_hi = c_prov_hi & ((1ull << 48) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[3] != 0) || (z.w[2] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary128 (s, e_out, c_prov_hi, c_prov_lo); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid64_to_binary128 (BINARY128 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else BINARY128 bid64_to_binary128 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov_hi, c_prov_lo; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); unpack_bid64 (x, s, e, k, (c.w[0]), return_binary128_zero (s), return_binary128_inf (s), return_binary128_nan); c.w[1] = 0; // Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59 // But also make an additional shift of 2 places to get a whole-word lop: // (c * r) >> 254 = ((c << 2) * r) >> 256 sll128_short (c.w[1], c.w[0], 61); k = k + 59; // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933 if (e >= 4933) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary128_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 114) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -5000) e = -5000; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary128 + 5000)[e]; e_out = (exponents_binary128 + 5000)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary128 + 5000)[e]; } else { r = (multipliers2_binary128 + 5000)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication; make an effective shift of 254 bits // (given that we already shifted left 2 places) by lopping from word 4 __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 115) d = 115; if (d >= 64) { d -= 64; z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = z.w[5], z.w[5] = 0; } e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov_hi = z.w[5]; c_prov_lo = z.w[4]; // Round using round-sticky words // If we spill into the next binade, correct if (lt128 (roundbound_128 [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) { c_prov_lo = c_prov_lo + 1; if (c_prov_lo == 0) { c_prov_hi = c_prov_hi + 1; if (c_prov_hi == 1ull << 49) { c_prov_hi = 1ull << 48; e_out = e_out + 1; } } } // Check for overflow if (e_out >= 32767) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary128_ovf (s); } // Modify exponent for a tiny result; otherwise lop off the implicit bit if (c_prov_hi < (1ull << 48)) e_out = 0; else c_prov_hi = c_prov_hi & ((1ull << 48) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[3] != 0) || (z.w[2] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary128 (s, e_out, c_prov_hi, c_prov_lo); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void bid128_to_binary128 (BINARY128 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT128 x = *px; #else BINARY128 bid128_to_binary128 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 c_prov_hi, c_prov_lo; UINT128 c; UINT128 m_min; int s, e, k, e_out; UINT256 r; UINT384 z; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif SET_RESTORE_RND_TO_BFP(); // Unpack the input and shift two further places for reciprocal multiplication unpack_bid128 (x, s, e, k, c, return_binary128_zero (s), return_binary128_inf (s), return_binary128_nan); sll128_short (c.w[1], c.w[0], 2); // Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to // keep tables smaller (it would be intercepted later otherwise). // // (Note that we may have normalized the coefficient, but we have a // corresponding exponent postcorrection to account for; this can // afford to be conservative anyway.) // // We actually check if e >= ceil((sci_emax + 1) * log_10(2)) // which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933 if (e >= 4933) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary128_ovf (s); } // Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4, // so test e <= floor((emin - 114) * log_10(2)) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -5000) e = -5000; // Look up the breakpoint and approximate exponent m_min = (breakpoints_binary128 + 5000)[e]; e_out = (exponents_binary128 + 5000)[e] - k; // Choose provisional exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_binary128 + 5000)[e]; } else { r = (multipliers2_binary128 + 5000)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication; make an effective shift of 254 bits // (given that we already shifted left 2 places) by lopping from word 4 __mul_128x256_to_384 (z, c, r) // Check for exponent underflow and compensate by shifting the product // Cut off the process at precision+2, since we can't really shift further if (e_out < 1) { int d; d = 1 - e_out; if (d > 115) d = 115; if (d >= 64) { d -= 64; z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = z.w[5], z.w[5] = 0; } e_out = 1; srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d); } c_prov_hi = z.w[5]; c_prov_lo = z.w[4]; // Round using round-sticky words // If we spill into the next binade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128 [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) { c_prov_lo = c_prov_lo + 1; if (c_prov_lo == 0) { c_prov_hi = c_prov_hi + 1; if (c_prov_hi == 1ull << 49) { c_prov_hi = 1ull << 48; e_out = e_out + 1; } else if ((c_prov_hi == (1ull << 48)) && (e_out == 1)) { if ((((rnd_mode & 3) == 0) && (z.w[3] < (3ull << 62))) || ((rnd_mode + (s & 1) == 2) && (z.w[3] < (1ull << 63)))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } } // Check for overflow if (e_out >= 32767) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_binary128_ovf (s); } // Modify exponent for a tiny result; otherwise lop off the implicit bit if (c_prov_hi < (1ull << 48)) e_out = 0; else c_prov_hi = c_prov_hi & ((1ull << 48) - 1); // Set the inexact and underflow flag as appropriate if ((z.w[3] != 0) || (z.w[2] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (e_out == 0) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result as a binary floating-point number return_binary128 (s, e_out, c_prov_hi, c_prov_lo); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary32_to_bid32 (UINT32 * pres, float *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { float x = *px; #else UINT32 binary32_to_bid32 (float x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary32 (x, s, e, c.w[1], t, return_bid32_zero (s), return_bid32_inf (s), return_bid32_nan); // Treat like a quad input for uniformity, so (2^{113-24} * c * r) >> 320, // where 320 is the truncation value for the reciprocal multiples, exactly // five 64-bit words. So we shift 113-24=89 places. Since we unpacked in // the high end, shift a further 89-64=25 places // // Remember to compensate for the fact that exponents are integer for quad c.w[0] = 0; c.w[1] = c.w[1] << 25; t += (113 - 24); e -= (113 - 24); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 211) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], -e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull)) return_bid32 (s, 101, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid32[a]; srl128 (cint.w[1], cint.w[0], t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid32 (s, 101 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -450) e = -450; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid32 + 450)[e]; e_out = (exponents_bid32 + 450)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid32 + 450)[e]; } else { r = (multipliers2_bid32 + 450)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000ull) { c_prov = 1000000ull; e_out = e_out + 1; } } // Check for overflow if (e_out > 90 + 101) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid32 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary64_to_bid32 (UINT32 * pres, double *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { double x = *px; #else UINT32 binary64_to_bid32 (double x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary64 (x, s, e, c.w[0], t, return_bid32_zero (s), return_bid32_inf (s), return_bid32_nan); // Treat like a quad input for uniformity, so (2^{113-53} * c * r) >> 320, // where 320 is the truncation value for the reciprocal multiples, exactly // five 64-bit words. So we shift 113-53=60 places // // Remember to compensate for the fact that exponents are integer for quad c.w[1] = 0; sll128_short (c.w[1], c.w[0], 60); t += (113 - 53); e -= (113 - 53); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 211) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], -e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull)) return_bid32 (s, 101, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid32[a]; srl128 (cint.w[1], cint.w[0], t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid32 (s, 101 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -450) e = -450; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid32 + 450)[e]; e_out = (exponents_bid32 + 450)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid32 + 450)[e]; } else { r = (multipliers2_bid32 + 450)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000ull) { c_prov = 1000000ull; e_out = e_out + 1; } else if ((c_prov == 1000000ull) && (e_out == 0)) { if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull)) || ((rnd_mode + (s & 1) == 2) && (z.w[4] <= 16602069666338596454ull))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out > 90 + 101) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid32 (s, e_out, c_prov); } // ********************************************************************** #if __ENABLE_BINARY80__ #if DECIMAL_CALL_BY_REFERENCE void binary80_to_bid32 (UINT32 * pres, BINARY80 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { BINARY80 x = *px; #else UINT32 binary80_to_bid32 (BINARY80 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary80 (x, s, e, c.w[0], t, return_bid32_zero (s), return_bid32_inf (s), return_bid32_nan); // Treat like a quad input for uniformity, so (2^{113-64} * c * r) >> 320, // where 320 is the truncation value for the reciprocal multiples, exactly // five 64-bit words. So we shift 113-64=49 places // // Remember to compensate for the fact that exponents are integer for quad c.w[1] = 0; sll128_short (c.w[1], c.w[0], 49); t += (113 - 64); e -= (113 - 64); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 211) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], -e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull)) return_bid32 (s, 101, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid32[a]; srl128 (cint.w[1], cint.w[0], t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid32 (s, 101 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -450) e = -450; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid32 + 450)[e]; e_out = (exponents_bid32 + 450)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid32 + 450)[e]; } else { r = (multipliers2_bid32 + 450)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000ull) { c_prov = 1000000ull; e_out = e_out + 1; } else if ((c_prov == 1000000ull) && (e_out == 0)) { if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull)) || ((rnd_mode + (s & 1) == 2) && (z.w[4] <= 16602069666338596454ull))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out > 90 + 101) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid32 (s, e_out, c_prov); } #endif // matches #if __ENABLE_BINARY80__ // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary128_to_bid32 (UINT32 * pres, BINARY128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { BINARY128 x = *px; #else UINT32 binary128_to_bid32 (BINARY128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary128 (x, s, e, c.w[1], c.w[0], t, return_bid32_zero (s), return_bid32_inf (s), return_bid32_nan); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 211) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], -e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull)) return_bid32 (s, 101, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid32[a]; srl128 (cint.w[1], cint.w[0], t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid32 (s, 101 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -450) e = -450; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid32 + 450)[e]; e_out = (exponents_bid32 + 450)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid32 + 450)[e]; } else { r = (multipliers2_bid32 + 450)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct // Flag underflow where it may be needed even for |result| = SNN // This needs to be done in extra precision because of the precision disparity // and the fact that the breakpoint isn't an exact binary number. if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000ull) { c_prov = 1000000ull; e_out = e_out + 1; } else if ((c_prov == 1000000ull) && (e_out == 0)) { if ((((rnd_mode & 3) == 0) && le128 (z.w[4], z.w[3], 17524406870024074035ull, 3689348814741910323ull)) || ((rnd_mode + (s & 1) == 2) && le128 (z.w[4], z.w[3], 16602069666338596454ull, 7378697629483820646ull))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out > 90 + 101) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid32_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid32 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary32_to_bid64 (UINT64 * pres, float *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { float x = *px; #else UINT64 binary32_to_bid64 (float x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary32 (x, s, e, c.w[1], t, return_bid64_zero (s), return_bid64_inf (s), return_bid64_nan); // Treat like a quad input for uniformity, so (2^{113-24} * c * r) >> 312 // (312 is the shift value for these tables) which can be written as // (2^97 c * r) >> 320, lopping off exactly 320 bits = 5 words. Thus we put // input coefficient as the high part of c (<<64) shifted by 33 bits (<<97) // // Remember to compensate for the fact that exponents are integer for quad c.w[1] = c.w[1] << 33; c.w[0] = 0; t += (113 - 24); e -= (113 - 24); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 1168) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 8 places to the left in preparation for the reciprocal // multiplication; thus we add 8 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 8 - e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull)) return_bid64 (s, 398, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid64[a]; srl128 (cint.w[1], cint.w[0], 8 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid64 (s, 398 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -1437) e = -1437; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid64 + 1437)[e]; e_out = (exponents_bid64 + 1437)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid64 + 1437)[e]; } else { r = (multipliers2_bid64 + 1437)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000000000000ull) { c_prov = 1000000000000000ull; e_out = e_out + 1; } } // Check for overflow if (e_out > 369 + 398) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000000000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid64 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary64_to_bid64 (UINT64 * pres, double *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { double x = *px; #else UINT64 binary64_to_bid64 (double x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary64 (x, s, e, c.w[1], t, return_bid64_zero (s), return_bid64_inf (s), return_bid64_nan); // Treat like a quad input for uniformity, so (2^{113-53} * c * r) >> 312 // (312 is the shift value for these tables) which can be written as // (2^68 c * r) >> 320, lopping off exactly 320 bits = 5 words. Thus we put // input coefficient as the high part of c (<<64) shifted by 4 bits (<<68) // // Remember to compensate for the fact that exponents are integer for quad c.w[1] = c.w[1] << 4; c.w[0] = 0; t += (113 - 53); e -= (113 - 53); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 1168) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 8 places to the left in preparation for the reciprocal // multiplication; thus we add 8 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 8 - e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull)) return_bid64 (s, 398, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid64[a]; srl128 (cint.w[1], cint.w[0], 8 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid64 (s, 398 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -1437) e = -1437; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid64 + 1437)[e]; e_out = (exponents_bid64 + 1437)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid64 + 1437)[e]; } else { r = (multipliers2_bid64 + 1437)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000000000000ull) { c_prov = 1000000000000000ull; e_out = e_out + 1; } } // Check for overflow if (e_out > 369 + 398) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000000000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid64 (s, e_out, c_prov); } // ********************************************************************** #if __ENABLE_BINARY80__ #if DECIMAL_CALL_BY_REFERENCE void binary80_to_bid64 (UINT64 * pres, BINARY80 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { BINARY80 x = *px; #else UINT64 binary80_to_bid64 (BINARY80 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary80 (x, s, e, c.w[1], t, return_bid64_zero (s), return_bid64_inf (s), return_bid64_nan); // Treat like a quad input for uniformity, so (2^{113-64} * c * r) >> 312 // (312 is the shift value for these tables) which can be written as // (2^57 c * r) >> 320, lopping off exactly 320 bits = 5 words. Thus we put the // input in the high part then shift right 7 places c.w[0] = 0; srl128_short (c.w[1], c.w[0], 7); t += (113 - 64); e -= (113 - 64); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 1168) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 8 places to the left in preparation for the reciprocal // multiplication; thus we add 8 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 8 - e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull)) return_bid64 (s, 398, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid64[a]; srl128 (cint.w[1], cint.w[0], 8 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid64 (s, 398 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -1437) e = -1437; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid64 + 1437)[e]; e_out = (exponents_bid64 + 1437)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid64 + 1437)[e]; } else { r = (multipliers2_bid64 + 1437)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000000000000ull) { c_prov = 1000000000000000ull; e_out = e_out + 1; } else if ((c_prov == 1000000000000000ull) && (e_out == 0)) { if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull)) || ((rnd_mode + (s & 1) == 2) && (z.w[4] <= 16602069666338596454ull))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out > 369 + 398) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000000000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid64 (s, e_out, c_prov); } #endif // matches #if __ENABLE_BINARY80__ // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary128_to_bid64 (UINT64 * pres, BINARY128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { BINARY128 x = *px; #else UINT64 binary128_to_bid64 (BINARY128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov; UINT128 m_min; UINT256 r; UINT384 z; int e, s, t, e_out; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary128 (x, s, e, c.w[1], c.w[0], t, return_bid64_zero (s), return_bid64_inf (s), return_bid64_nan); // Shift left 8 spaces so (c * r) >> 312 = ((c<<8) * r) >> 320 and we // can lop off exactly 5 words sll128_short (c.w[1], c.w[0], 8); // Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d. // We actually check if e >= ceil((emax + d) * log_2(10) - 112) // This could be intercepted later, but it's convenient to keep tables smaller if (e >= 1168) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 8 places to the left in preparation for the reciprocal // multiplication; thus we add 8 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 8 - e); if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull)) return_bid64 (s, 398, cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid64[a]; srl128 (cint.w[1], cint.w[0], 8 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid64 (s, 398 - a, cc.w[0]); } } } // Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4, // so test e <= floor(emin * log_2(10) - 115) // In this case just fix ourselves at that value for uniformity. // // This is important not only to keep the tables small but to maintain the // testing of the round/sticky words as a correct rounding method if (e <= -1437) e = -1437; // Now look up our exponent e, and the breakpoint between e and e+1 m_min = (breakpoints_bid64 + 1437)[e]; e_out = (exponents_bid64 + 1437)[e]; // Choose exponent and reciprocal multiplier based on breakpoint if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) { r = (multipliers1_bid64 + 1437)[e]; } else { r = (multipliers2_bid64 + 1437)[e]; e_out = e_out + 1; } // Do the reciprocal multiplication __mul_128x256_to_384 (z, c, r) c_prov = z.w[5]; // Round using round-sticky words // If we spill over into the next decade, correct // Flag underflow where it may be needed even for |result| = SNN if (lt128 (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)]. w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].w[0], z.w[4], z.w[3])) { c_prov = c_prov + 1; if (c_prov == 10000000000000000ull) { c_prov = 1000000000000000ull; e_out = e_out + 1; } else if ((c_prov == 1000000000000000ull) && (e_out == 0)) { if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull)) || ((rnd_mode + (s & 1) == 2) && (z.w[4] <= 16602069666338596454ull))) bid_set_excepts (UNDERFLOW_EXCEPTION); } } // Check for overflow if (e_out > 369 + 398) { bid_set_excepts (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); return_bid64_ovf (s); } // Set the inexact flag as appropriate and check underflow // It's no doubt superfluous to check inexactness, but anyway... if ((z.w[4] != 0) || (z.w[3] != 0)) { bid_set_excepts (INEXACT_EXCEPTION); if (c_prov < 1000000000000000ull) bid_set_excepts (UNDERFLOW_EXCEPTION); } // Package up the result return_bid64 (s, e_out, c_prov); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary32_to_bid128 (UINT128 * pres, float *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { float x = *px; #else UINT128 binary32_to_bid128 (float x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov_hi, c_prov_lo; UINT256 r; UINT384 z; int e, s, t, e_out, e_plus, e_hi, e_lo, f; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary32 (x, s, e, c.w[1], t, return_bid128_zero (s), return_bid128_inf (s), return_bid128_nan); // Shift up to the top: like a pure quad coefficient with a shift of 15. // In our case, this is 2^{113-24+15} times the core, so unpack at the // high end shifted by 40. c.w[0] = 0; c.w[1] = c.w[1] << 40; t += (113 - 24); e -= (113 - 24); // (We never need to check for overflow: this format is the biggest of all!) // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 15 places to the left in preparation for the reciprocal // multiplication; thus we add 15 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 15 - e); if (lt128 (cint.w[1], cint.w[0], 542101086242752ull, 4003012203950112768ull)) return_bid128 (s, 6176, cint.w[1], cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid128[a]; srl128 (cint.w[1], cint.w[0], 15 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]); } } } // Input exponent can stretch between the maximal and minimal // exponents (remembering we force normalization): -16607 <= e <= 16271 // Compute the estimated decimal exponent e_out; the provisional exponent // will be either "e_out" or "e_out-1" depending on later significand check // NB: this is the *biased* exponent e_plus = e + 42152; e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512; // Set up pointers into the bipartite table e_hi = 11232 - e_out; e_lo = e_hi & 127; e_hi = e_hi >> 7; // Look up the inner entry first r = innertable_sig[e_lo], f = innertable_exp[e_lo]; // If we need the other entry, multiply significands and add exponents if (e_hi != 39) { UINT256 s = outertable_sig[e_hi]; UINT512 t; f = f + 256 + outertable_exp[e_hi]; __mul_256x256_to_512 (t, r, s); r.w[0] = t.w[4] + 1, r.w[1] = t.w[5], r.w[2] = t.w[6], r.w[3] = t.w[7]; } __mul_128x256_to_384 (z, c, r); // Make adjustive shift, ignoring the lower 128 bits e = -(241 + e + f); srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e); // Now test against 10^33 and so decide on adjustment // I feel there ought to be a smarter way of doing the multiplication if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) { __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4], z.w[3], z.w[2]); e_out = e_out - 1; } // Set up provisional results c_prov_hi = z.w[5]; c_prov_lo = z.w[4]; // Round using round-sticky words // If we spill over into the next decade, correct if (lt128 (roundbound_128 [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) { c_prov_lo = c_prov_lo + 1; if (c_prov_lo == 0) c_prov_hi = c_prov_hi + 1; else if ((c_prov_lo == 4003012203950112768ull) && (c_prov_hi == 542101086242752ull)) { c_prov_hi = 54210108624275ull; c_prov_lo = 4089650035136921600ull; e_out = e_out + 1; } } // Don't need to check overflow or underflow; however set inexact flag if ((z.w[3] != 0) || (z.w[2] != 0)) bid_set_excepts (INEXACT_EXCEPTION); // Package up the result return_bid128 (s, e_out, c_prov_hi, c_prov_lo); } // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary64_to_bid128 (UINT128 * pres, double *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { double x = *px; #else UINT128 binary64_to_bid128 (double x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov_hi, c_prov_lo; UINT256 r; UINT384 z; int e, s, t, e_out, e_plus, e_hi, e_lo, f; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary64 (x, s, e, c.w[1], t, return_bid128_zero (s), return_bid128_inf (s), return_bid128_nan); // Shift up to the top: like a pure quad coefficient with a shift of 15. // In our case, this is 2^{113-53+15} times the core, so unpack at the // high end shifted by 11. c.w[0] = 0; c.w[1] = c.w[1] << 11; t += (113 - 53); e -= (113 - 53); // (We never need to check for overflow: this format is the biggest of all!) // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 15 places to the left in preparation for the reciprocal // multiplication; thus we add 15 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 15 - e); if (lt128 (cint.w[1], cint.w[0], 542101086242752ull, 4003012203950112768ull)) return_bid128 (s, 6176, cint.w[1], cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid128[a]; srl128 (cint.w[1], cint.w[0], 15 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]); } } } // Input exponent can stretch between the maximal and minimal // exponents (remembering we force normalization): -16607 <= e <= 16271 // Compute the estimated decimal exponent e_out; the provisional exponent // will be either "e_out" or "e_out-1" depending on later significand check // NB: this is the *biased* exponent e_plus = e + 42152; e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512; // Set up pointers into the bipartite table e_hi = 11232 - e_out; e_lo = e_hi & 127; e_hi = e_hi >> 7; // Look up the inner entry first r = innertable_sig[e_lo], f = innertable_exp[e_lo]; // If we need the other entry, multiply significands and add exponents if (e_hi != 39) { UINT256 s = outertable_sig[e_hi]; UINT512 t; f = f + 256 + outertable_exp[e_hi]; __mul_256x256_to_512 (t, r, s); r.w[0] = t.w[4] + 1, r.w[1] = t.w[5], r.w[2] = t.w[6], r.w[3] = t.w[7]; } __mul_128x256_to_384 (z, c, r); // Make adjustive shift, ignoring the lower 128 bits e = -(241 + e + f); srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e); // Now test against 10^33 and so decide on adjustment // I feel there ought to be a smarter way of doing the multiplication if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) { __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4], z.w[3], z.w[2]); e_out = e_out - 1; } // Set up provisional results c_prov_hi = z.w[5]; c_prov_lo = z.w[4]; // Round using round-sticky words // If we spill over into the next decade, correct if (lt128 (roundbound_128 [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) { c_prov_lo = c_prov_lo + 1; if (c_prov_lo == 0) c_prov_hi = c_prov_hi + 1; else if ((c_prov_lo == 4003012203950112768ull) && (c_prov_hi == 542101086242752ull)) { c_prov_hi = 54210108624275ull; c_prov_lo = 4089650035136921600ull; e_out = e_out + 1; } } // Don't need to check overflow or underflow; however set inexact flag if ((z.w[3] != 0) || (z.w[2] != 0)) bid_set_excepts (INEXACT_EXCEPTION); // Package up the result return_bid128 (s, e_out, c_prov_hi, c_prov_lo); } // ********************************************************************** #if __ENABLE_BINARY80__ #if DECIMAL_CALL_BY_REFERENCE void binary80_to_bid128 (UINT128 * pres, BINARY80 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { BINARY80 x = *px; #else UINT128 binary80_to_bid128 (BINARY80 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov_hi, c_prov_lo; UINT256 r; UINT384 z; int e, s, t, e_out, e_plus, e_hi, e_lo, f; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary80 (x, s, e, c.w[1], t, return_bid128_zero (s), return_bid128_inf (s), return_bid128_nan); // Treat like a pure quad coefficient with a shift of 15. We get this // just by unpacking at the high end c.w[0] = 0; t += (113 - 64); e -= (113 - 64); // (We never need to check for overflow: this format is the biggest of all!) // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 15 places to the left in preparation for the reciprocal // multiplication; thus we add 15 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 15 - e); if (lt128 (cint.w[1], cint.w[0], 542101086242752ull, 4003012203950112768ull)) return_bid128 (s, 6176, cint.w[1], cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid128[a]; srl128 (cint.w[1], cint.w[0], 15 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]); } } } // Input exponent can stretch between the maximal and minimal // exponents (remembering we force normalization): -16607 <= e <= 16271 // Compute the estimated decimal exponent e_out; the provisional exponent // will be either "e_out" or "e_out-1" depending on later significand check // NB: this is the *biased* exponent e_plus = e + 42152; e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512; // Set up pointers into the bipartite table e_hi = 11232 - e_out; e_lo = e_hi & 127; e_hi = e_hi >> 7; // Look up the inner entry first r = innertable_sig[e_lo], f = innertable_exp[e_lo]; // If we need the other entry, multiply significands and add exponents if (e_hi != 39) { UINT256 s = outertable_sig[e_hi]; UINT512 t; f = f + 256 + outertable_exp[e_hi]; __mul_256x256_to_512 (t, r, s); r.w[0] = t.w[4] + 1, r.w[1] = t.w[5], r.w[2] = t.w[6], r.w[3] = t.w[7]; } __mul_128x256_to_384 (z, c, r); // Make adjustive shift, ignoring the lower 128 bits e = -(241 + e + f); srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e); // Now test against 10^33 and so decide on adjustment // I feel there ought to be a smarter way of doing the multiplication if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) { __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4], z.w[3], z.w[2]); e_out = e_out - 1; } // Set up provisional results c_prov_hi = z.w[5]; c_prov_lo = z.w[4]; // Round using round-sticky words // If we spill over into the next decade, correct if (lt128 (roundbound_128 [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) { c_prov_lo = c_prov_lo + 1; if (c_prov_lo == 0) c_prov_hi = c_prov_hi + 1; else if ((c_prov_lo == 4003012203950112768ull) && (c_prov_hi == 542101086242752ull)) { c_prov_hi = 54210108624275ull; c_prov_lo = 4089650035136921600ull; e_out = e_out + 1; } } // Don't need to check overflow or underflow; however set inexact flag if ((z.w[3] != 0) || (z.w[2] != 0)) bid_set_excepts (INEXACT_EXCEPTION); // Package up the result return_bid128 (s, e_out, c_prov_hi, c_prov_lo); } #endif // matches #if __ENABLE_BINARY80__ // ********************************************************************** #if DECIMAL_CALL_BY_REFERENCE void binary128_to_bid128 (UINT128 * pres, BINARY128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { BINARY128 x = *px; #else UINT128 binary128_to_bid128 (BINARY128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 c; UINT64 c_prov_hi, c_prov_lo; UINT256 r; UINT384 z; int e, s, t, e_out, e_plus, e_hi, e_lo, f; #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round rnd_mode = *prnd_mode; #endif #endif // Unpack the input unpack_binary128 (x, s, e, c.w[1], c.w[0], t, return_bid128_zero (s), return_bid128_inf (s), return_bid128_nan); // Shift up 15 places to move to the top sll128_short (c.w[1], c.w[0], 15); // (We never need to check for overflow: this format is the biggest of all!) // Now filter out all the exact cases where we need to specially force // the exponent to 0. We can let through inexact cases and those where the // main path will do the right thing anyway, e.g. integers outside coeff range. // // First check that e <= 0, because if e > 0, the input must be >= 2^113, // which is too large for the coefficient of any target decimal format. // We write a = -(e + t) // // (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially // iff it fits in the coefficient range. Shift c' = c >> -e, and // compare with the coefficient range; if it's in range then c' is // our coefficient, exponent is 0. Otherwise we pass through. // // (2) If a > 0 then we have a non-integer input. The special case would // arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now // if a > 48 we can immediately forget this, since 5^49 > 10^34. // Otherwise we determine whether we're in range by a table based on // a, and if so get the multiplier also from a table based on a. // // Note that when we shift, we need to take into account the fact that // c is already 15 places to the left in preparation for the reciprocal // multiplication; thus we add 15 to all the shift counts if (e <= 0) { UINT128 cint; int a = -(e + t); cint.w[1] = c.w[1], cint.w[0] = c.w[0]; if (a <= 0) { srl128 (cint.w[1], cint.w[0], 15 - e); if (lt128 (cint.w[1], cint.w[0], 542101086242752ull, 4003012203950112768ull)) return_bid128 (s, 6176, cint.w[1], cint.w[0]); } else if (a <= 48) { UINT128 pow5 = coefflimits_bid128[a]; srl128 (cint.w[1], cint.w[0], 15 + t); if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) { UINT128 cc; cc.w[1] = cint.w[1]; cc.w[0] = cint.w[0]; pow5 = power_five[a]; __mul_128x128_low (cc, cc, pow5); return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]); } } } // Input exponent can stretch between the maximal and minimal // exponents (remembering we force normalization): -16607 <= e <= 16271 // Compute the estimated decimal exponent e_out; the provisional exponent // will be either "e_out" or "e_out-1" depending on later significand check // NB: this is the *biased* exponent e_plus = e + 42152; e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512; // Set up pointers into the bipartite table e_hi = 11232 - e_out; e_lo = e_hi & 127; e_hi = e_hi >> 7; // Look up the inner entry first r = innertable_sig[e_lo], f = innertable_exp[e_lo]; // If we need the other entry, multiply significands and add exponents if (e_hi != 39) { UINT256 s = outertable_sig[e_hi]; UINT512 t; f = f + 256 + outertable_exp[e_hi]; __mul_256x256_to_512 (t, r, s); // *** NB I should run an exhaustive check this +1 doesn't overflow r.w[0] = t.w[4] + 1, r.w[1] = t.w[5], r.w[2] = t.w[6], r.w[3] = t.w[7]; } __mul_128x256_to_384 (z, c, r); // Make adjustive shift, ignoring the lower 128 bits e = -(241 + e + f); srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e); // Now test against 10^33 and so decide on adjustment // I feel there ought to be a smarter way of doing the multiplication if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) { __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4], z.w[3], z.w[2]); e_out = e_out - 1; } // Set up provisional results c_prov_hi = z.w[5]; c_prov_lo = z.w[4]; // Round using round-sticky words // If we spill over into the next decade, correct if (lt128 (roundbound_128 [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1], roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) { c_prov_lo = c_prov_lo + 1; if (c_prov_lo == 0) c_prov_hi = c_prov_hi + 1; else if ((c_prov_lo == 4003012203950112768ull) && (c_prov_hi == 542101086242752ull)) { c_prov_hi = 54210108624275ull; c_prov_lo = 4089650035136921600ull; e_out = e_out + 1; } } // Don't need to check overflow or underflow; however set inexact flag if ((z.w[3] != 0) || (z.w[2] != 0)) bid_set_excepts (INEXACT_EXCEPTION); // Package up the result return_bid128 (s, e_out, c_prov_hi, c_prov_lo); } libdfp-1.0.17/libbid/bid_conf.h000066400000000000000000001415621504475242000162150ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef _BID_CONF_H #define _BID_CONF_H // Name Changes #define _IDEC_glbflags __bid_IDEC_glbflags #define _IDEC_glbround __bid_IDEC_glbround #define _IDEC_glbexcepthandling __bid_IDEC_glbexcepthandling #define _IDEC_glbexceptionmasks __bid_IDEC_glbexceptionmasks #define bid64_add __bid64_add #define bid64_sub __bid64_sub #define bid64_mul __bid64_mul #define bid64_div __bid64_div #define bid64dq_div __bid64dq_div #define bid64qd_div __bid64qd_div #define bid64qq_div __bid64qq_div #define bid64q_sqrt __bid64q_sqrt #define bid64_sqrt __bid64_sqrt #define bid64_rem __bid64_rem #define bid64_fma __bid64_fma #define bid64_scalb __bid64_scalb #define round128_19_38 __bid_round128_19_38 #define round192_39_57 __bid_round192_39_57 #define round256_58_76 __bid_round256_58_76 #define round64_2_18 __bid_round64_2_18 #define bid64_nextafter __bid64_nextafter #define bid64_nextdown __bid64_nextdown #define bid64_nextup __bid64_nextup #define b2d __bid_b2d #define b2d2 __bid_b2d2 #define b2d3 __bid_b2d3 #define b2d4 __bid_b2d4 #define b2d5 __bid_b2d5 #define bid128_canonize __bid128_canonize #define bid32_canonize __bid32_canonize #define bid64_canonize __bid64_canonize #define bid_to_bid128 __bid_to_bid128 #define bid_to_bid32 __bid_to_bid32 #define bid_to_bid64 __bid_to_bid64 #define bid_to_dpd128 __bid_to_dpd128 #define bid_to_dpd32 __bid_to_dpd32 #define bid_to_dpd64 __bid_to_dpd64 #define d2b __bid_d2b #define d2b2 __bid_d2b2 #define d2b3 __bid_d2b3 #define d2b4 __bid_d2b4 #define d2b5 __bid_d2b5 #define d2b6 __bid_d2b6 #define dpd_to_bid128 __bid_dpd_to_bid128 #define dpd_to_bid32 __bid_dpd_to_bid32 #define dpd_to_bid64 __bid_dpd_to_bid64 #define bid128_nextafter __bid128_nextafter #define bid128_nextdown __bid128_nextdown #define bid128_nextup __bid128_nextup #define bid64_logb __bid64_logb #define bid64_quantize __bid64_quantize #define estimate_bin_expon __bid_estimate_bin_expon #define estimate_decimal_digits __bid_estimate_decimal_digits #define power10_index_binexp __bid_power10_index_binexp #define power10_index_binexp_128 __bid_power10_index_binexp_128 #define power10_table_128 __bid_power10_table_128 #define reciprocals10_128 __bid_reciprocals10_128 #define reciprocals10_64 __bid_reciprocals10_64 #define recip_scale __bid_recip_scale #define round_const_table __bid_round_const_table #define round_const_table_128 __bid_round_const_table_128 #define short_recip_scale __bid_short_recip_scale #define bid64_from_string __bid64_from_string #define bid64_to_string __bid64_to_string #define Inv_Tento9 __bid_Inv_Tento9 #define midi_tbl __bid_midi_tbl #define Tento3 __bid_Tento3 #define Tento6 __bid_Tento6 #define Tento9 __bid_Tento9 #define Twoto30_m_10to9 __bid_Twoto30_m_10to9 #define Twoto60 __bid_Twoto60 #define Twoto60_m_10to18 __bid_Twoto60_m_10to18 #define convert_table __bid_convert_table #define factors __bid_factors #define packed_10000_zeros __bid_packed_10000_zeros #define char_table2 __bid_char_table2 #define char_table3 __bid_char_table3 #define Ex128m128 __bid_Ex128m128 #define Ex192m192 __bid_Ex192m192 #define Ex256m256 __bid_Ex256m256 #define Ex64m64 __bid_Ex64m64 #define half128 __bid_half128 #define half192 __bid_half192 #define half256 __bid_half256 #define half64 __bid_half64 #define Kx128 __bid_Kx128 #define Kx192 __bid_Kx192 #define Kx256 __bid_Kx256 #define Kx64 __bid_Kx64 #define mask128 __bid_mask128 #define mask192 __bid_mask192 #define mask256 __bid_mask256 #define mask64 __bid_mask64 #define maskhigh128 __bid_maskhigh128 #define maskhigh128M __bid_maskhigh128M #define maskhigh192M __bid_maskhigh192M #define maskhigh256M __bid_maskhigh256M #define midpoint128 __bid_midpoint128 #define midpoint192 __bid_midpoint192 #define midpoint256 __bid_midpoint256 #define midpoint64 __bid_midpoint64 #define nr_digits __bid_nr_digits #define onehalf128 __bid_onehalf128 #define onehalf128M __bid_onehalf128M #define onehalf192M __bid_onehalf192M #define onehalf256M __bid_onehalf256M #define shiftright128 __bid_shiftright128 #define shiftright128M __bid_shiftright128M #define shiftright192M __bid_shiftright192M #define shiftright256M __bid_shiftright256M #define shift_ten2m3k128 __bid_shift_ten2m3k128 #define shift_ten2m3k64 __bid_shift_ten2m3k64 #define ten2k128 __bid_ten2k128 #define ten2k256 __bid_ten2k256 #define ten2k64 __bid_ten2k64 #define ten2m3k128 __bid_ten2m3k128 #define ten2m3k64 __bid_ten2m3k64 #define ten2mk128 __bid_ten2mk128 #define ten2mk128M __bid_ten2mk128M #define ten2mk128trunc __bid_ten2mk128trunc #define ten2mk128truncM __bid_ten2mk128truncM #define ten2mk192M __bid_ten2mk192M #define ten2mk192truncM __bid_ten2mk192truncM #define ten2mk256M __bid_ten2mk256M #define ten2mk256truncM __bid_ten2mk256truncM #define ten2mk64 __bid_ten2mk64 #define ten2mxtrunc128 __bid_ten2mxtrunc128 #define ten2mxtrunc192 __bid_ten2mxtrunc192 #define ten2mxtrunc256 __bid_ten2mxtrunc256 #define ten2mxtrunc64 __bid_ten2mxtrunc64 #define bid128_add __bid128_add #define bid128dd_add __bid128dd_add #define bid128dd_sub __bid128dd_sub #define bid128dq_add __bid128dq_add #define bid128dq_sub __bid128dq_sub #define bid128qd_add __bid128qd_add #define bid128qd_sub __bid128qd_sub #define bid128_sub __bid128_sub #define bid64dq_add __bid64dq_add #define bid64dq_sub __bid64dq_sub #define bid64qd_add __bid64qd_add #define bid64qd_sub __bid64qd_sub #define bid64qq_add __bid64qq_add #define bid64qq_sub __bid64qq_sub #define bid128dd_mul __bid128dd_mul #define bid128dq_mul __bid128dq_mul #define bid128_mul __bid128_mul #define bid128qd_mul __bid128qd_mul #define bid64dq_mul __bid64dq_mul #define bid64qd_mul __bid64qd_mul #define bid64qq_mul __bid64qq_mul #define bid128dd_div __bid128dd_div #define bid128_div __bid128_div #define bid128dq_div __bid128dq_div #define bid128qd_div __bid128qd_div #define bid128d_sqrt __bid128d_sqrt #define bid128_sqrt __bid128_sqrt #define bid128ddd_fma __bid128ddd_fma #define bid128ddq_fma __bid128ddq_fma #define bid128dqd_fma __bid128dqd_fma #define bid128dqq_fma __bid128dqq_fma #define bid128_fma __bid128_fma #define bid128qdd_fma __bid128qdd_fma #define bid128qdq_fma __bid128qdq_fma #define bid128qqd_fma __bid128qqd_fma #define bid64ddq_fma __bid64ddq_fma #define bid64dqd_fma __bid64dqd_fma #define bid64dqq_fma __bid64dqq_fma #define bid64qdd_fma __bid64qdd_fma #define bid64qdq_fma __bid64qdq_fma #define bid64qqd_fma __bid64qqd_fma #define bid64qqq_fma __bid64qqq_fma #define bid128_round_integral_exact __bid128_round_integral_exact #define bid128_round_integral_nearest_away __bid128_round_integral_nearest_away #define bid128_round_integral_nearest_even __bid128_round_integral_nearest_even #define bid128_round_integral_negative __bid128_round_integral_negative #define bid128_round_integral_positive __bid128_round_integral_positive #define bid128_round_integral_zero __bid128_round_integral_zero #define bid64_round_integral_exact __bid64_round_integral_exact #define bid64_round_integral_nearest_away __bid64_round_integral_nearest_away #define bid64_round_integral_nearest_even __bid64_round_integral_nearest_even #define bid64_round_integral_negative __bid64_round_integral_negative #define bid64_round_integral_positive __bid64_round_integral_positive #define bid64_round_integral_zero __bid64_round_integral_zero #define bid128_quantize __bid128_quantize #define bid128_scalb __bid128_scalb #define bid64_maxnum __bid64_maxnum #define bid64_maxnum_mag __bid64_maxnum_mag #define bid64_minnum __bid64_minnum #define bid64_minnum_mag __bid64_minnum_mag #define bid128_maxnum __bid128_maxnum #define bid128_maxnum_mag __bid128_maxnum_mag #define bid128_minnum __bid128_minnum #define bid128_minnum_mag __bid128_minnum_mag #define bid128_rem __bid128_rem #define bid128_logb __bid128_logb #define getDecimalRoundingDirection __bid_getDecimalRoundingDirection #define is754 __bid_is754 #define is754R __bid_is754R #define signalException __bid_signalException #define lowerFlags __bid_lowerFlags #define restoreFlags __bid_restoreFlags #define saveFlags __bid_saveFlags #define setDecimalRoundingDirection __bid_setDecimalRoundingDirection #define testFlags __bid_testFlags #define testSavedFlags __bid_testSavedFlags #define bid32_to_bid64 __bid32_to_bid64 #define bid64_to_bid32 __bid64_to_bid32 #define bid128_to_string __bid128_to_string #define mod10_18_tbl __bid_mod10_18_tbl #define bid128_to_bid32 __bid128_to_bid32 #define bid32_to_bid128 __bid32_to_bid128 #define bid128_to_bid64 __bid128_to_bid64 #define bid64_to_bid128 __bid64_to_bid128 #define bid128_from_string __bid128_from_string #define bid128_from_int32 __bid128_from_int32 #define bid128_from_int64 __bid128_from_int64 #define bid128_from_uint32 __bid128_from_uint32 #define bid128_from_uint64 __bid128_from_uint64 #define bid64_from_int32 __bid64_from_int32 #define bid64_from_int64 __bid64_from_int64 #define bid64_from_uint32 __bid64_from_uint32 #define bid64_from_uint64 __bid64_from_uint64 #define bid64_abs __bid64_abs #define bid64_class __bid64_class #define bid64_copy __bid64_copy #define bid64_copySign __bid64_copySign #define bid64_isCanonical __bid64_isCanonical #define bid64_isFinite __bid64_isFinite #define bid64_isInf __bid64_isInf #define bid64_isNaN __bid64_isNaN #define bid64_isNormal __bid64_isNormal #define bid64_isSignaling __bid64_isSignaling #define bid64_isSigned __bid64_isSigned #define bid64_isSubnormal __bid64_isSubnormal #define bid64_isZero __bid64_isZero #define bid64_negate __bid64_negate #define bid64_radix __bid64_radix #define bid64_sameQuantum __bid64_sameQuantum #define bid64_totalOrder __bid64_totalOrder #define bid64_totalOrderMag __bid64_totalOrderMag #define bid128_abs __bid128_abs #define bid128_class __bid128_class #define bid128_copy __bid128_copy #define bid128_copySign __bid128_copySign #define bid128_isCanonical __bid128_isCanonical #define bid128_isFinite __bid128_isFinite #define bid128_isInf __bid128_isInf #define bid128_isNaN __bid128_isNaN #define bid128_isNormal __bid128_isNormal #define bid128_isSignaling __bid128_isSignaling #define bid128_isSigned __bid128_isSigned #define bid128_isSubnormal __bid128_isSubnormal #define bid128_isZero __bid128_isZero #define bid128_negate __bid128_negate #define bid128_radix __bid128_radix #define bid128_sameQuantum __bid128_sameQuantum #define bid128_totalOrder __bid128_totalOrder #define bid128_totalOrderMag __bid128_totalOrderMag #define bid64_quiet_equal __bid64_quiet_equal #define bid64_quiet_greater __bid64_quiet_greater #define bid64_quiet_greater_equal __bid64_quiet_greater_equal #define bid64_quiet_greater_unordered __bid64_quiet_greater_unordered #define bid64_quiet_less __bid64_quiet_less #define bid64_quiet_less_equal __bid64_quiet_less_equal #define bid64_quiet_less_unordered __bid64_quiet_less_unordered #define bid64_quiet_not_equal __bid64_quiet_not_equal #define bid64_quiet_not_greater __bid64_quiet_not_greater #define bid64_quiet_not_less __bid64_quiet_not_less #define bid64_quiet_ordered __bid64_quiet_ordered #define bid64_quiet_unordered __bid64_quiet_unordered #define bid64_signaling_greater __bid64_signaling_greater #define bid64_signaling_greater_equal __bid64_signaling_greater_equal #define bid64_signaling_greater_unordered __bid64_signaling_greater_unordered #define bid64_signaling_less __bid64_signaling_less #define bid64_signaling_less_equal __bid64_signaling_less_equal #define bid64_signaling_less_unordered __bid64_signaling_less_unordered #define bid64_signaling_not_greater __bid64_signaling_not_greater #define bid64_signaling_not_less __bid64_signaling_not_less #define bid128_quiet_equal __bid128_quiet_equal #define bid128_quiet_greater __bid128_quiet_greater #define bid128_quiet_greater_equal __bid128_quiet_greater_equal #define bid128_quiet_greater_unordered __bid128_quiet_greater_unordered #define bid128_quiet_less __bid128_quiet_less #define bid128_quiet_less_equal __bid128_quiet_less_equal #define bid128_quiet_less_unordered __bid128_quiet_less_unordered #define bid128_quiet_not_equal __bid128_quiet_not_equal #define bid128_quiet_not_greater __bid128_quiet_not_greater #define bid128_quiet_not_less __bid128_quiet_not_less #define bid128_quiet_ordered __bid128_quiet_ordered #define bid128_quiet_unordered __bid128_quiet_unordered #define bid128_signaling_greater __bid128_signaling_greater #define bid128_signaling_greater_equal __bid128_signaling_greater_equal #define bid128_signaling_greater_unordered __bid128_signaling_greater_unordered #define bid128_signaling_less __bid128_signaling_less #define bid128_signaling_less_equal __bid128_signaling_less_equal #define bid128_signaling_less_unordered __bid128_signaling_less_unordered #define bid128_signaling_not_greater __bid128_signaling_not_greater #define bid128_signaling_not_less __bid128_signaling_not_less #define bid64_to_int32_ceil __bid64_to_int32_ceil #define bid64_to_int32_floor __bid64_to_int32_floor #define bid64_to_int32_int __bid64_to_int32_int #define bid64_to_int32_rnint __bid64_to_int32_rnint #define bid64_to_int32_rninta __bid64_to_int32_rninta #define bid64_to_int32_xceil __bid64_to_int32_xceil #define bid64_to_int32_xfloor __bid64_to_int32_xfloor #define bid64_to_int32_xint __bid64_to_int32_xint #define bid64_to_int32_xrnint __bid64_to_int32_xrnint #define bid64_to_int32_xrninta __bid64_to_int32_xrninta #define bid64_to_uint32_ceil __bid64_to_uint32_ceil #define bid64_to_uint32_floor __bid64_to_uint32_floor #define bid64_to_uint32_int __bid64_to_uint32_int #define bid64_to_uint32_rnint __bid64_to_uint32_rnint #define bid64_to_uint32_rninta __bid64_to_uint32_rninta #define bid64_to_uint32_xceil __bid64_to_uint32_xceil #define bid64_to_uint32_xfloor __bid64_to_uint32_xfloor #define bid64_to_uint32_xint __bid64_to_uint32_xint #define bid64_to_uint32_xrnint __bid64_to_uint32_xrnint #define bid64_to_uint32_xrninta __bid64_to_uint32_xrninta #define bid64_to_int64_ceil __bid64_to_int64_ceil #define bid64_to_int64_floor __bid64_to_int64_floor #define bid64_to_int64_int __bid64_to_int64_int #define bid64_to_int64_rnint __bid64_to_int64_rnint #define bid64_to_int64_rninta __bid64_to_int64_rninta #define bid64_to_int64_xceil __bid64_to_int64_xceil #define bid64_to_int64_xfloor __bid64_to_int64_xfloor #define bid64_to_int64_xint __bid64_to_int64_xint #define bid64_to_int64_xrnint __bid64_to_int64_xrnint #define bid64_to_int64_xrninta __bid64_to_int64_xrninta #define bid64_to_uint64_ceil __bid64_to_uint64_ceil #define bid64_to_uint64_floor __bid64_to_uint64_floor #define bid64_to_uint64_int __bid64_to_uint64_int #define bid64_to_uint64_rnint __bid64_to_uint64_rnint #define bid64_to_uint64_rninta __bid64_to_uint64_rninta #define bid64_to_uint64_xceil __bid64_to_uint64_xceil #define bid64_to_uint64_xfloor __bid64_to_uint64_xfloor #define bid64_to_uint64_xint __bid64_to_uint64_xint #define bid64_to_uint64_xrnint __bid64_to_uint64_xrnint #define bid64_to_uint64_xrninta __bid64_to_uint64_xrninta #define bid128_to_int32_ceil __bid128_to_int32_ceil #define bid128_to_int32_floor __bid128_to_int32_floor #define bid128_to_int32_int __bid128_to_int32_int #define bid128_to_int32_rnint __bid128_to_int32_rnint #define bid128_to_int32_rninta __bid128_to_int32_rninta #define bid128_to_int32_xceil __bid128_to_int32_xceil #define bid128_to_int32_xfloor __bid128_to_int32_xfloor #define bid128_to_int32_xint __bid128_to_int32_xint #define bid128_to_int32_xrnint __bid128_to_int32_xrnint #define bid128_to_int32_xrninta __bid128_to_int32_xrninta #define bid128_to_uint32_ceil __bid128_to_uint32_ceil #define bid128_to_uint32_floor __bid128_to_uint32_floor #define bid128_to_uint32_int __bid128_to_uint32_int #define bid128_to_uint32_rnint __bid128_to_uint32_rnint #define bid128_to_uint32_rninta __bid128_to_uint32_rninta #define bid128_to_uint32_xceil __bid128_to_uint32_xceil #define bid128_to_uint32_xfloor __bid128_to_uint32_xfloor #define bid128_to_uint32_xint __bid128_to_uint32_xint #define bid128_to_uint32_xrnint __bid128_to_uint32_xrnint #define bid128_to_uint32_xrninta __bid128_to_uint32_xrninta #define bid128_to_int64_ceil __bid128_to_int64_ceil #define bid128_to_int64_floor __bid128_to_int64_floor #define bid128_to_int64_int __bid128_to_int64_int #define bid128_to_int64_rnint __bid128_to_int64_rnint #define bid128_to_int64_rninta __bid128_to_int64_rninta #define bid128_to_int64_xceil __bid128_to_int64_xceil #define bid128_to_int64_xfloor __bid128_to_int64_xfloor #define bid128_to_int64_xint __bid128_to_int64_xint #define bid128_to_int64_xrnint __bid128_to_int64_xrnint #define bid128_to_int64_xrninta __bid128_to_int64_xrninta #define bid128_to_uint64_ceil __bid128_to_uint64_ceil #define bid128_to_uint64_floor __bid128_to_uint64_floor #define bid128_to_uint64_int __bid128_to_uint64_int #define bid128_to_uint64_rnint __bid128_to_uint64_rnint #define bid128_to_uint64_rninta __bid128_to_uint64_rninta #define bid128_to_uint64_xceil __bid128_to_uint64_xceil #define bid128_to_uint64_xfloor __bid128_to_uint64_xfloor #define bid128_to_uint64_xint __bid128_to_uint64_xint #define bid128_to_uint64_xrnint __bid128_to_uint64_xrnint #define bid128_to_uint64_xrninta __bid128_to_uint64_xrninta #define bid128_to_binary128 __bid128_to_binary128 #define bid128_to_binary32 __bid128_to_binary32 #define bid128_to_binary64 __bid128_to_binary64 #define bid128_to_binary80 __bid128_to_binary80 #define bid32_to_binary128 __bid32_to_binary128 #define bid32_to_binary32 __bid32_to_binary32 #define bid32_to_binary64 __bid32_to_binary64 #define bid32_to_binary80 __bid32_to_binary80 #define bid64_to_binary128 __bid64_to_binary128 #define bid64_to_binary32 __bid64_to_binary32 #define bid64_to_binary64 __bid64_to_binary64 #define bid64_to_binary80 __bid64_to_binary80 #define binary128_to_bid128 __binary128_to_bid128 #define binary128_to_bid32 __binary128_to_bid32 #define binary128_to_bid64 __binary128_to_bid64 #define binary32_to_bid128 __binary32_to_bid128 #define binary32_to_bid32 __binary32_to_bid32 #define binary32_to_bid64 __binary32_to_bid64 #define binary64_to_bid128 __binary64_to_bid128 #define binary64_to_bid32 __binary64_to_bid32 #define binary64_to_bid64 __binary64_to_bid64 #define binary80_to_bid128 __binary80_to_bid128 #define binary80_to_bid32 __binary80_to_bid32 #define binary80_to_bid64 __binary80_to_bid64 #define bid64_to_uint16_ceil __bid64_to_uint16_ceil #define bid64_to_uint16_floor __bid64_to_uint16_floor #define bid64_to_uint16_int __bid64_to_uint16_int #define bid64_to_uint16_rnint __bid64_to_uint16_rnint #define bid64_to_uint16_rninta __bid64_to_uint16_rninta #define bid64_to_uint16_xceil __bid64_to_uint16_xceil #define bid64_to_uint16_xfloor __bid64_to_uint16_xfloor #define bid64_to_uint16_xint __bid64_to_uint16_xint #define bid64_to_uint16_xrnint __bid64_to_uint16_xrnint #define bid64_to_uint16_xrninta __bid64_to_uint16_xrninta #define bid64_to_int16_ceil __bid64_to_int16_ceil #define bid64_to_int16_floor __bid64_to_int16_floor #define bid64_to_int16_int __bid64_to_int16_int #define bid64_to_int16_rnint __bid64_to_int16_rnint #define bid64_to_int16_rninta __bid64_to_int16_rninta #define bid64_to_int16_xceil __bid64_to_int16_xceil #define bid64_to_int16_xfloor __bid64_to_int16_xfloor #define bid64_to_int16_xint __bid64_to_int16_xint #define bid64_to_int16_xrnint __bid64_to_int16_xrnint #define bid64_to_int16_xrninta __bid64_to_int16_xrninta #define bid128_to_uint16_ceil __bid128_to_uint16_ceil #define bid128_to_uint16_floor __bid128_to_uint16_floor #define bid128_to_uint16_int __bid128_to_uint16_int #define bid128_to_uint16_rnint __bid128_to_uint16_rnint #define bid128_to_uint16_rninta __bid128_to_uint16_rninta #define bid128_to_uint16_xceil __bid128_to_uint16_xceil #define bid128_to_uint16_xfloor __bid128_to_uint16_xfloor #define bid128_to_uint16_xint __bid128_to_uint16_xint #define bid128_to_uint16_xrnint __bid128_to_uint16_xrnint #define bid128_to_uint16_xrninta __bid128_to_uint16_xrninta #define bid128_to_int16_ceil __bid128_to_int16_ceil #define bid128_to_int16_floor __bid128_to_int16_floor #define bid128_to_int16_int __bid128_to_int16_int #define bid128_to_int16_rnint __bid128_to_int16_rnint #define bid128_to_int16_rninta __bid128_to_int16_rninta #define bid128_to_int16_xceil __bid128_to_int16_xceil #define bid128_to_int16_xfloor __bid128_to_int16_xfloor #define bid128_to_int16_xint __bid128_to_int16_xint #define bid128_to_int16_xrnint __bid128_to_int16_xrnint #define bid128_to_int16_xrninta __bid128_to_int16_xrninta #define bid64_to_uint8_ceil __bid64_to_uint8_ceil #define bid64_to_uint8_floor __bid64_to_uint8_floor #define bid64_to_uint8_int __bid64_to_uint8_int #define bid64_to_uint8_rnint __bid64_to_uint8_rnint #define bid64_to_uint8_rninta __bid64_to_uint8_rninta #define bid64_to_uint8_xceil __bid64_to_uint8_xceil #define bid64_to_uint8_xfloor __bid64_to_uint8_xfloor #define bid64_to_uint8_xint __bid64_to_uint8_xint #define bid64_to_uint8_xrnint __bid64_to_uint8_xrnint #define bid64_to_uint8_xrninta __bid64_to_uint8_xrninta #define bid64_to_int8_ceil __bid64_to_int8_ceil #define bid64_to_int8_floor __bid64_to_int8_floor #define bid64_to_int8_int __bid64_to_int8_int #define bid64_to_int8_rnint __bid64_to_int8_rnint #define bid64_to_int8_rninta __bid64_to_int8_rninta #define bid64_to_int8_xceil __bid64_to_int8_xceil #define bid64_to_int8_xfloor __bid64_to_int8_xfloor #define bid64_to_int8_xint __bid64_to_int8_xint #define bid64_to_int8_xrnint __bid64_to_int8_xrnint #define bid64_to_int8_xrninta __bid64_to_int8_xrninta #define bid128_to_uint8_ceil __bid128_to_uint8_ceil #define bid128_to_uint8_floor __bid128_to_uint8_floor #define bid128_to_uint8_int __bid128_to_uint8_int #define bid128_to_uint8_rnint __bid128_to_uint8_rnint #define bid128_to_uint8_rninta __bid128_to_uint8_rninta #define bid128_to_uint8_xceil __bid128_to_uint8_xceil #define bid128_to_uint8_xfloor __bid128_to_uint8_xfloor #define bid128_to_uint8_xint __bid128_to_uint8_xint #define bid128_to_uint8_xrnint __bid128_to_uint8_xrnint #define bid128_to_uint8_xrninta __bid128_to_uint8_xrninta #define bid128_to_int8_ceil __bid128_to_int8_ceil #define bid128_to_int8_floor __bid128_to_int8_floor #define bid128_to_int8_int __bid128_to_int8_int #define bid128_to_int8_rnint __bid128_to_int8_rnint #define bid128_to_int8_rninta __bid128_to_int8_rninta #define bid128_to_int8_xceil __bid128_to_int8_xceil #define bid128_to_int8_xfloor __bid128_to_int8_xfloor #define bid128_to_int8_xint __bid128_to_int8_xint #define bid128_to_int8_xrnint __bid128_to_int8_xrnint #define bid128_to_int8_xrninta __bid128_to_int8_xrninta #ifdef IN_LIBGCC2 #if !defined ENABLE_DECIMAL_BID_FORMAT || !ENABLE_DECIMAL_BID_FORMAT #error BID not enabled in libbid #endif #ifndef BID_BIG_ENDIAN #define BID_BIG_ENDIAN __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__ #endif #ifndef BID_THREAD #if defined (HAVE_CC_TLS) && defined (USE_TLS) #define BID_THREAD __thread #endif #endif #define _intptr_t_defined #define DECIMAL_CALL_BY_REFERENCE 0 #define DECIMAL_GLOBAL_ROUNDING 1 #define DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS 1 #define DECIMAL_GLOBAL_EXCEPTION_FLAGS 1 #define DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS 1 #define BID_HAS_GCC_DECIMAL_INTRINSICS 1 #endif /* IN_LIBGCC2 */ // We are in libdfp. #ifndef BID_BIG_ENDIAN #define BID_BIG_ENDIAN __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__ #endif #ifndef BID_THREAD #if defined (HAVE_CC_TLS) && defined (USE_TLS) #define BID_THREAD __thread #endif #endif #define _intptr_t_defined #define DECIMAL_CALL_BY_REFERENCE 0 #define DECIMAL_GLOBAL_ROUNDING 1 #define DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS 1 #define DECIMAL_GLOBAL_EXCEPTION_FLAGS 1 #define DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS 1 #define BID_HAS_GCC_DECIMAL_INTRINSICS 1 extern void __dfp_set_status (int excepts); // Use a statement expression (GNU C) to quiet warnings #define __set_status_flags(fpsc, status) ({ __dfp_set_status(status); (void)fpsc; }) // End libdfp options // Configuration Options #define SET_STATUS_FLAGS #ifndef BID_THREAD #define BID_THREAD #endif #ifndef BID_HAS_GCC_DECIMAL_INTRINSICS #define BID_HAS_GCC_DECIMAL_INTRINSICS 0 #endif #if !defined(WINDOWS) || defined(__INTEL_COMPILER) // #define UNCHANGED_BINARY_STATUS_FLAGS #endif // #define HPUX_OS // If DECIMAL_CALL_BY_REFERENCE is defined then numerical arguments and results // are passed by reference otherwise they are passed by value (except that // a pointer is always passed to the status flags) #ifndef DECIMAL_CALL_BY_REFERENCE #define DECIMAL_CALL_BY_REFERENCE 0 #endif // If DECIMAL_GLOBAL_ROUNDING is defined then the rounding mode is a global // variable _IDEC_glbround, otherwise it is passed as a parameter when needed #ifndef DECIMAL_GLOBAL_ROUNDING #define DECIMAL_GLOBAL_ROUNDING 0 #endif #ifndef DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS #define DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS 0 #endif // If DECIMAL_GLOBAL_EXCEPTION_FLAGS is defined then the exception status flags // are represented by a global variable _IDEC_glbflags, otherwise they are // passed as a parameter when needed #ifndef DECIMAL_GLOBAL_EXCEPTION_FLAGS #define DECIMAL_GLOBAL_EXCEPTION_FLAGS 0 #endif #ifndef DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS #define DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS 0 #endif // If DECIMAL_ALTERNATE_EXCEPTION_HANDLING is defined then the exception masks // are examined and exception handling information is provided to the caller // if alternate exception handling is necessary #ifndef DECIMAL_ALTERNATE_EXCEPTION_HANDLING #define DECIMAL_ALTERNATE_EXCEPTION_HANDLING 0 #endif typedef unsigned int _IDEC_round; typedef unsigned int _IDEC_flags; // could be a struct with diagnostic info #if DECIMAL_ALTERNATE_EXCEPTION_HANDLING // If DECIMAL_GLOBAL_EXCEPTION_MASKS is defined then the exception mask bits // are represented by a global variable _IDEC_exceptionmasks, otherwise they // are passed as a parameter when needed; DECIMAL_GLOBAL_EXCEPTION_MASKS is // ignored // if DECIMAL_ALTERNATE_EXCEPTION_HANDLING is not defined // ************************************************************************** #define DECIMAL_GLOBAL_EXCEPTION_MASKS 0 // ************************************************************************** // If DECIMAL_GLOBAL_EXCEPTION_INFO is defined then the alternate exception // handling information is represented by a global data structure // _IDEC_glbexcepthandling, otherwise it is passed by reference as a // parameter when needed; DECIMAL_GLOBAL_EXCEPTION_INFO is ignored // if DECIMAL_ALTERNATE_EXCEPTION_HANDLING is not defined // ************************************************************************** #define DECIMAL_GLOBAL_EXCEPTION_INFO 0 // ************************************************************************** #endif // Notes: 1) rnd_mode from _RND_MODE_ARG is used by the caller of a function // from this library, and can be any name // 2) rnd_mode and prnd_mode from _RND_MODE_PARAM are fixed names // and *must* be used in the library functions // 3) _IDEC_glbround is the fixed name for the global variable holding // the rounding mode #if !DECIMAL_GLOBAL_ROUNDING #if DECIMAL_CALL_BY_REFERENCE #define _RND_MODE_ARG , &rnd_mode #define _RND_MODE_PARAM , _IDEC_round *prnd_mode #define _RND_MODE_ARG_ALONE &rnd_mode #define _RND_MODE_PARAM_ALONE _IDEC_round *prnd_mode #else #define _RND_MODE_ARG , rnd_mode #define _RND_MODE_PARAM , _IDEC_round rnd_mode #define _RND_MODE_ARG_ALONE rnd_mode #define _RND_MODE_PARAM_ALONE _IDEC_round rnd_mode #endif #else #define _RND_MODE_ARG #define _RND_MODE_PARAM #define _RND_MODE_ARG_ALONE #define _RND_MODE_PARAM_ALONE #define rnd_mode _IDEC_glbround #endif // Notes: 1) pfpsf from _EXC_FLAGS_ARG is used by the caller of a function // from this library, and can be any name // 2) pfpsf from _EXC_FLAGS_PARAM is a fixed name and *must* be used // in the library functions // 3) _IDEC_glbflags is the fixed name for the global variable holding // the floating-point status flags #if !DECIMAL_GLOBAL_EXCEPTION_FLAGS #define _EXC_FLAGS_ARG , pfpsf #define _EXC_FLAGS_PARAM , _IDEC_flags *pfpsf #else #define _EXC_FLAGS_ARG #define _EXC_FLAGS_PARAM #define pfpsf &_IDEC_glbflags #endif #if DECIMAL_GLOBAL_ROUNDING extern BID_THREAD _IDEC_round _IDEC_glbround; #endif #if DECIMAL_GLOBAL_EXCEPTION_FLAGS extern BID_THREAD _IDEC_flags _IDEC_glbflags; #endif #if DECIMAL_ALTERNATE_EXCEPTION_HANDLING #if DECIMAL_GLOBAL_EXCEPTION_MASKS extern BID_THREAD _IDEC_exceptionmasks _IDEC_glbexceptionmasks; #endif #if DECIMAL_GLOBAL_EXCEPTION_INFO extern BID_THREAD _IDEC_excepthandling _IDEC_glbexcepthandling; #endif #endif #if DECIMAL_ALTERNATE_EXCEPTION_HANDLING // Notes: 1) exc_mask from _EXC_MASKS_ARG is used by the caller of a function // from this library, and can be any name // 2) exc_mask and pexc_mask from _EXC_MASKS_PARAM are fixed names // and *must* be used in the library functions // 3) _IDEC_glbexceptionmasks is the fixed name for the global // variable holding the floating-point exception masks #if !DECIMAL_GLOBAL_EXCEPTION_MASKS #if DECIMAL_CALL_BY_REFERENCE #define _EXC_MASKS_ARG , &exc_mask #define _EXC_MASKS_PARAM , _IDEC_exceptionmasks *pexc_mask #else #define _EXC_MASKS_ARG , exc_mask #define _EXC_MASKS_PARAM , _IDEC_exceptionmasks exc_mask #endif #else #define _EXC_MASKS_ARG #define _EXC_MASKS_PARAM #define exc_mask _IDEC_glbexceptionmasks #endif // Notes: 1) pexc_info from _EXC_INFO_ARG is used by the caller of a function // from this library, and can be any name // 2) pexc_info from _EXC_INFO_PARAM is a fixed name and *must* be // used in the library functions // 3) _IDEC_glbexcepthandling is the fixed name for the global // variable holding the floating-point exception information #if !DECIMAL_GLOBAL_EXCEPTION_INFO #define _EXC_INFO_ARG , pexc_info #define _EXC_INFO_PARAM , _IDEC_excepthandling *pexc_info #else #define _EXC_INFO_ARG #define _EXC_INFO_PARAM #define pexc_info &_IDEC_glbexcepthandling #endif #else #define _EXC_MASKS_ARG #define _EXC_MASKS_PARAM #define _EXC_INFO_ARG #define _EXC_INFO_PARAM #endif #ifndef BID_BIG_ENDIAN #define BID_BIG_ENDIAN 0 #endif #if BID_BIG_ENDIAN #define BID_SWAP128(x) { \ UINT64 sw; \ sw = (x).w[1]; \ (x).w[1] = (x).w[0]; \ (x).w[0] = sw; \ } #else #define BID_SWAP128(x) #endif #if DECIMAL_CALL_BY_REFERENCE #define BID_RETURN_VAL(x) { *pres = (x); return; } #if BID_BIG_ENDIAN && defined BID_128RES #define BID_RETURN(x) { BID_SWAP128(x); *pres = (x); return; } #else #define BID_RETURN(x) { *pres = (x); return; } #endif #else #define BID_RETURN_VAL(x) return(x); #if BID_BIG_ENDIAN && defined BID_128RES #define BID_RETURN(x) { BID_SWAP128(x); return(x); } #else #define BID_RETURN(x) return(x); #endif #endif #if DECIMAL_CALL_BY_REFERENCE #define BIDECIMAL_CALL1(_FUNC, _RES, _OP1) \ _FUNC(&(_RES), &(_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND(_FUNC, _RES, _OP1) \ _FUNC(&(_RES), &(_OP1) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL2(_FUNC, _RES, _OP1, _OP2) \ _FUNC(&(_RES), &(_OP1), &(_OP2) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL2_NORND(_FUNC, _RES, _OP1, _OP2) \ _FUNC(&(_RES), &(_OP1), &(_OP2) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND_RESREF(_FUNC, _RES, _OP1) \ _FUNC((_RES), &(_OP1) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_RESARG(_FUNC, _RES, _OP1) \ _FUNC(&(_RES), (_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_RESREF(_FUNC, _RES, _OP1) \ _FUNC((_RES), &(_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND_NOSTAT(_FUNC, _RES, _OP1) \ _FUNC(&(_RES), &(_OP1) _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL2_NORND_NOSTAT(_FUNC, _RES, _OP1, _OP2) \ _FUNC(&(_RES), &(_OP1), &(_OP2) _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL3(_FUNC, _RES, _OP1, _OP2, _OP3) \ _FUNC(&(_RES), &(_OP1), &(_OP2), &(_OP3) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO(_FUNC, _RES, _OP1) \ _FUNC(&(_RES), &(_OP1) _EXC_FLAGS_ARG ) #define BIDECIMAL_CALL1_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \ _FUNC(&(_RES), &(_OP1) ) #define BIDECIMAL_CALL2_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1, _OP2) \ _FUNC(&(_RES), &(_OP1), &(_OP2) ) #define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1) \ _FUNC(&(_OP1) _EXC_FLAGS_ARG ) #define BIDECIMAL_CALL2_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1, _OP2) \ _FUNC(&(_OP1), &(_OP2) _EXC_FLAGS_ARG ) #define BIDECIMAL_CALLV_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES) \ _FUNC(&(_RES) _RND_MODE_ARG) #define BIDECIMAL_CALL1_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \ _FUNC(&(_OP1) _RND_MODE_ARG) #else #define BIDECIMAL_CALL1(_FUNC, _RES, _OP1) \ _RES = _FUNC((_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND(_FUNC, _RES, _OP1) \ _RES = _FUNC((_OP1) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL2(_FUNC, _RES, _OP1, _OP2) \ _RES = _FUNC((_OP1), (_OP2) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL2_NORND(_FUNC, _RES, _OP1, _OP2) \ _RES = _FUNC((_OP1), (_OP2) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND_RESREF(_FUNC, _RES, _OP1) \ _FUNC((_RES), _OP1 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_RESARG(_FUNC, _RES, _OP1) \ _RES = _FUNC((_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_RESREF(_FUNC, _RES, _OP1) \ _FUNC((_RES), _OP1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND_NOSTAT(_FUNC, _RES, _OP1) \ _RES = _FUNC((_OP1) _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL2_NORND_NOSTAT(_FUNC, _RES, _OP1, _OP2) \ _RES = _FUNC((_OP1), (_OP2) _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL3(_FUNC, _RES, _OP1, _OP2, _OP3) \ _RES = _FUNC((_OP1), (_OP2), (_OP3) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG) #define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO(_FUNC, _RES, _OP1) \ _RES = _FUNC((_OP1) _EXC_FLAGS_ARG) #define BIDECIMAL_CALL1_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \ _RES = _FUNC((_OP1) ) #define BIDECIMAL_CALL2_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1, _OP2) \ _RES = _FUNC((_OP1), (_OP2) ) #define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1) \ _FUNC((_OP1) _EXC_FLAGS_ARG) #define BIDECIMAL_CALL2_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1, _OP2) \ _FUNC((_OP1), (_OP2) _EXC_FLAGS_ARG) #define BIDECIMAL_CALLV_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES) \ _RES = _FUNC(_RND_MODE_ARG_ALONE) #if !DECIMAL_GLOBAL_ROUNDING #define BIDECIMAL_CALL1_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \ _RES = _FUNC((_OP1) _RND_MODE_ARG) #else #define BIDECIMAL_CALL1_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \ _FUNC((_OP1) _RND_MODE_ARG) #endif #endif #if BID_BIG_ENDIAN #define HIGH_128W 0 #define LOW_128W 1 #else #define HIGH_128W 1 #define LOW_128W 0 #endif #if BID_BIG_ENDIAN #define COPY_ARG_REF(arg_name) \ UINT128 arg_name={ pbid_##arg_name->w[1], pbid_##arg_name->w[0]}; #define COPY_ARG_VAL(arg_name) \ UINT128 arg_name={ bid_##arg_name.w[1], bid_##arg_name.w[0]}; #else #define COPY_ARG_REF(arg_name) \ UINT128 arg_name=*pbid_##arg_name; #define COPY_ARG_VAL(arg_name) \ UINT128 arg_name= bid_##arg_name; #endif #define COPY_ARG_TYPE_REF(type, arg_name) \ type arg_name=*pbid_##arg_name; #define COPY_ARG_TYPE_VAL(type, arg_name) \ type arg_name= bid_##arg_name; #if !DECIMAL_GLOBAL_ROUNDING #define SET_RND_MODE() \ _IDEC_round rnd_mode = *prnd_mode; #else #define SET_RND_MODE() #endif #define PROLOG_REF(arg_name) \ COPY_ARG_REF(arg_name) #define PROLOG_VAL(arg_name) \ COPY_ARG_VAL(arg_name) #define PROLOG_TYPE_REF(type, arg_name) \ COPY_ARG_TYPE_REF(type, arg_name) #define PROLOG_TYPE_VAL(type, arg_name) \ COPY_ARG_TYPE_VAL(type, arg_name) #define OTHER_PROLOG_REF() #define OTHER_PROLOG_VAL() #if DECIMAL_CALL_BY_REFERENCE #define BID128_FUNCTION_ARG1(fn_name, arg_name)\ void fn_name (UINT128 * pres, \ UINT128 * \ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define BID128_FUNCTION_ARG1_NORND(fn_name, arg_name)\ void fn_name (UINT128 * pres, \ UINT128 * \ pbid_##arg_name _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name) \ OTHER_PROLOG_REF() #define BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name)\ void fn_name (restype * pres, \ UINT128 * \ pbid_##arg_name _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name) \ OTHER_PROLOG_REF() #define BID128_FUNCTION_ARG2(fn_name, arg_name1, arg_name2)\ void fn_name (UINT128 * pres, \ UINT128 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name1) \ PROLOG_REF(arg_name2) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name1, arg_name2)\ void fn_name (restype * pres, \ UINT128 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name1) \ PROLOG_REF(arg_name2) \ OTHER_PROLOG_REF() #define BID128_FUNCTION_ARG128_ARGTYPE2(fn_name, arg_name1, type2, arg_name2)\ void fn_name (UINT128 * pres, \ UINT128 *pbid_##arg_name1, type2 *pbid_##arg_name2 \ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name1) \ PROLOG_TYPE_REF(type2, arg_name2) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2(type0, fn_name, type1, arg_name1, type2, arg_name2)\ void fn_name (type0 *pres, \ type1 *pbid_##arg_name1, type2 *pbid_##arg_name2 \ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_TYPE_REF(type1, arg_name1) \ PROLOG_TYPE_REF(type2, arg_name2) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define BID128_FUNCTION_ARGTYPE1_ARG128(fn_name, type1, arg_name1, arg_name2)\ void fn_name (UINT128 * pres, \ type1 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_TYPE_REF(type1, arg_name1) \ PROLOG_REF(arg_name2) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define TYPE0_FUNCTION_ARG128_ARGTYPE2(type0, fn_name, arg_name1, type2, arg_name2)\ void fn_name (type0 *pres, \ UINT128 *pbid_##arg_name1, type2 *pbid_##arg_name2 \ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name1) \ PROLOG_TYPE_REF(type2, arg_name2) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define TYPE0_FUNCTION_ARGTYPE1_ARG128(type0, fn_name, type1, arg_name1, arg_name2)\ void fn_name (type0 *pres, \ type1 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_TYPE_REF(type1, arg_name1) \ PROLOG_REF(arg_name2) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define TYPE0_FUNCTION_ARG128_ARG128(type0, fn_name, arg_name1, arg_name2)\ void fn_name (type0 * pres, \ UINT128 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name1) \ PROLOG_REF(arg_name2) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define TYPE0_FUNCTION_ARG1(type0, fn_name, arg_name)\ void fn_name (type0 * pres, \ UINT128 * \ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_REF(arg_name) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define BID128_FUNCTION_ARGTYPE1(fn_name, type1, arg_name)\ void fn_name (UINT128 * pres, \ type1 * \ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_TYPE_REF(type1, arg_name) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define TYPE0_FUNCTION_ARGTYPE1(type0, fn_name, type1, arg_name)\ void fn_name (type0 * pres, \ type1 * \ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_TYPE_REF(type1, arg_name) \ SET_RND_MODE() \ OTHER_PROLOG_REF() #define TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\ void fn_name (type0 * pres, \ type1 * \ pbid_##arg_name _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \ _EXC_INFO_PARAM) {\ PROLOG_TYPE_REF(type1, arg_name) \ OTHER_PROLOG_REF() ////////////////////////////////////////// ///////////////////////////////////////// //////////////////////////////////////// #else ////////////////////////////////////////// ///////////////////////////////////////// //////////////////////////////////////// #define BID128_FUNCTION_ARG1(fn_name, arg_name)\ UINT128 \ fn_name (UINT128 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name) \ OTHER_PROLOG_VAL() #define BID128_FUNCTION_ARG1_NORND(fn_name, arg_name)\ UINT128 \ fn_name (UINT128 bid_##arg_name _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name) \ OTHER_PROLOG_VAL() #define BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name)\ restype \ fn_name (UINT128 bid_##arg_name _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name) \ OTHER_PROLOG_VAL() #define BID128_FUNCTION_ARG2(fn_name, arg_name1, arg_name2)\ UINT128 \ fn_name (UINT128 bid_##arg_name1, \ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name1) \ PROLOG_VAL(arg_name2) \ OTHER_PROLOG_VAL() #define BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name1, arg_name2)\ restype \ fn_name (UINT128 bid_##arg_name1, \ UINT128 bid_##arg_name2 _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name1) \ PROLOG_VAL(arg_name2) \ OTHER_PROLOG_VAL() #define BID128_FUNCTION_ARG128_ARGTYPE2(fn_name, arg_name1, type2, arg_name2)\ UINT128 \ fn_name (UINT128 bid_##arg_name1, \ type2 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name1) \ PROLOG_TYPE_VAL(type2, arg_name2) \ OTHER_PROLOG_VAL() #define TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2(type0, fn_name, type1, arg_name1, type2, arg_name2)\ type0 \ fn_name (type1 bid_##arg_name1, \ type2 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_TYPE_VAL(type1, arg_name1) \ PROLOG_TYPE_VAL(type2, arg_name2) \ OTHER_PROLOG_VAL() #define BID128_FUNCTION_ARGTYPE1_ARG128(fn_name, type1, arg_name1, arg_name2)\ UINT128 \ fn_name (type1 bid_##arg_name1, \ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_TYPE_VAL(type1, arg_name1) \ PROLOG_VAL(arg_name2) \ OTHER_PROLOG_VAL() #define TYPE0_FUNCTION_ARG128_ARGTYPE2(type0, fn_name, arg_name1, type2, arg_name2)\ type0 \ fn_name (UINT128 bid_##arg_name1, \ type2 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name1) \ PROLOG_TYPE_VAL(type2, arg_name2) \ OTHER_PROLOG_VAL() #define TYPE0_FUNCTION_ARGTYPE1_ARG128(type0, fn_name, type1, arg_name1, arg_name2)\ type0 \ fn_name (type1 bid_##arg_name1, \ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_TYPE_VAL(type1, arg_name1) \ PROLOG_VAL(arg_name2) \ OTHER_PROLOG_VAL() #define TYPE0_FUNCTION_ARG128_ARG128(type0, fn_name, arg_name1, arg_name2)\ type0 \ fn_name (UINT128 bid_##arg_name1, \ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name1) \ PROLOG_VAL(arg_name2) \ OTHER_PROLOG_VAL() #define TYPE0_FUNCTION_ARG1(type0, fn_name, arg_name)\ type0 \ fn_name (UINT128 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_VAL(arg_name) \ OTHER_PROLOG_VAL() #define BID128_FUNCTION_ARGTYPE1(fn_name, type1, arg_name)\ UINT128 \ fn_name (type1 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_TYPE_VAL(type1, arg_name) \ OTHER_PROLOG_VAL() #define TYPE0_FUNCTION_ARGTYPE1(type0, fn_name, type1, arg_name)\ type0 \ fn_name (type1 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_TYPE_VAL(type1, arg_name) \ OTHER_PROLOG_VAL() #define TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\ type0 \ fn_name (type1 bid_##arg_name _EXC_FLAGS_PARAM \ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \ PROLOG_TYPE_VAL(type1, arg_name) \ OTHER_PROLOG_VAL() #endif #define BID_TO_SMALL_UINT_CVT_FUNCTION(type0, fn_name, type1, arg_name, cvt_fn_name, type2, size_mask, invalid_res)\ TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\ type2 res; \ _IDEC_flags saved_fpsc=*pfpsf; \ BIDECIMAL_CALL1_NORND(cvt_fn_name, res, arg_name); \ if(res & size_mask) { \ *pfpsf = saved_fpsc | INVALID_EXCEPTION; \ res = invalid_res; } \ BID_RETURN_VAL((type0)res); \ } #define BID_TO_SMALL_INT_CVT_FUNCTION(type0, fn_name, type1, arg_name, cvt_fn_name, type2, size_mask, invalid_res)\ TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\ type2 res, sgn_mask; \ _IDEC_flags saved_fpsc=*pfpsf; \ BIDECIMAL_CALL1_NORND(cvt_fn_name, res, arg_name); \ sgn_mask = res & size_mask; \ if(sgn_mask && (sgn_mask != (type2)size_mask)) { \ *pfpsf = saved_fpsc | INVALID_EXCEPTION; \ res = invalid_res; } \ BID_RETURN_VAL((type0)res); \ } #endif libdfp-1.0.17/libbid/bid_convert_data.c000066400000000000000000001047351504475242000177350ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" // convert_table[j][k][i] = digit i (base 10^8) of k*2^(26+7*j) const UINT32 convert_table[5][128][2] = { {{0, 0} , {67108864, 0} , {34217728, 1} , {1326592, 2} , {68435456, 2} , {35544320, 3} , {2653184, 4} , {69762048, 4} , {36870912, 5} , {3979776, 6} , {71088640, 6} , {38197504, 7} , {5306368, 8} , {72415232, 8} , {39524096, 9} , {6632960, 10} , {73741824, 10} , {40850688, 11} , {7959552, 12} , {75068416, 12} , {42177280, 13} , {9286144, 14} , {76395008, 14} , {43503872, 15} , {10612736, 16} , {77721600, 16} , {44830464, 17} , {11939328, 18} , {79048192, 18} , {46157056, 19} , {13265920, 20} , {80374784, 20} , {47483648, 21} , {14592512, 22} , {81701376, 22} , {48810240, 23} , {15919104, 24} , {83027968, 24} , {50136832, 25} , {17245696, 26} , {84354560, 26} , {51463424, 27} , {18572288, 28} , {85681152, 28} , {52790016, 29} , {19898880, 30} , {87007744, 30} , {54116608, 31} , {21225472, 32} , {88334336, 32} , {55443200, 33} , {22552064, 34} , {89660928, 34} , {56769792, 35} , {23878656, 36} , {90987520, 36} , {58096384, 37} , {25205248, 38} , {92314112, 38} , {59422976, 39} , {26531840, 40} , {93640704, 40} , {60749568, 41} , {27858432, 42} , {94967296, 42} , {62076160, 43} , {29185024, 44} , {96293888, 44} , {63402752, 45} , {30511616, 46} , {97620480, 46} , {64729344, 47} , {31838208, 48} , {98947072, 48} , {66055936, 49} , {33164800, 50} , {273664, 51} , {67382528, 51} , {34491392, 52} , {1600256, 53} , {68709120, 53} , {35817984, 54} , {2926848, 55} , {70035712, 55} , {37144576, 56} , {4253440, 57} , {71362304, 57} , {38471168, 58} , {5580032, 59} , {72688896, 59} , {39797760, 60} , {6906624, 61} , {74015488, 61} , {41124352, 62} , {8233216, 63} , {75342080, 63} , {42450944, 64} , {9559808, 65} , {76668672, 65} , {43777536, 66} , {10886400, 67} , {77995264, 67} , {45104128, 68} , {12212992, 69} , {79321856, 69} , {46430720, 70} , {13539584, 71} , {80648448, 71} , {47757312, 72} , {14866176, 73} , {81975040, 73} , {49083904, 74} , {16192768, 75} , {83301632, 75} , {50410496, 76} , {17519360, 77} , {84628224, 77} , {51737088, 78} , {18845952, 79} , {85954816, 79} , {53063680, 80} , {20172544, 81} , {87281408, 81} , {54390272, 82} , {21499136, 83} , {88608000, 83} , {55716864, 84} , {22825728, 85} , } , {{0, 0} , {89934592, 85} , {79869184, 171} , {69803776, 257} , {59738368, 343} , {49672960, 429} , {39607552, 515} , {29542144, 601} , {19476736, 687} , {9411328, 773} , {99345920, 858} , {89280512, 944} , {79215104, 1030} , {69149696, 1116} , {59084288, 1202} , {49018880, 1288} , {38953472, 1374} , {28888064, 1460} , {18822656, 1546} , {8757248, 1632} , {98691840, 1717} , {88626432, 1803} , {78561024, 1889} , {68495616, 1975} , {58430208, 2061} , {48364800, 2147} , {38299392, 2233} , {28233984, 2319} , {18168576, 2405} , {8103168, 2491} , {98037760, 2576} , {87972352, 2662} , {77906944, 2748} , {67841536, 2834} , {57776128, 2920} , {47710720, 3006} , {37645312, 3092} , {27579904, 3178} , {17514496, 3264} , {7449088, 3350} , {97383680, 3435} , {87318272, 3521} , {77252864, 3607} , {67187456, 3693} , {57122048, 3779} , {47056640, 3865} , {36991232, 3951} , {26925824, 4037} , {16860416, 4123} , {6795008, 4209} , {96729600, 4294} , {86664192, 4380} , {76598784, 4466} , {66533376, 4552} , {56467968, 4638} , {46402560, 4724} , {36337152, 4810} , {26271744, 4896} , {16206336, 4982} , {6140928, 5068} , {96075520, 5153} , {86010112, 5239} , {75944704, 5325} , {65879296, 5411} , {55813888, 5497} , {45748480, 5583} , {35683072, 5669} , {25617664, 5755} , {15552256, 5841} , {5486848, 5927} , {95421440, 6012} , {85356032, 6098} , {75290624, 6184} , {65225216, 6270} , {55159808, 6356} , {45094400, 6442} , {35028992, 6528} , {24963584, 6614} , {14898176, 6700} , {4832768, 6786} , {94767360, 6871} , {84701952, 6957} , {74636544, 7043} , {64571136, 7129} , {54505728, 7215} , {44440320, 7301} , {34374912, 7387} , {24309504, 7473} , {14244096, 7559} , {4178688, 7645} , {94113280, 7730} , {84047872, 7816} , {73982464, 7902} , {63917056, 7988} , {53851648, 8074} , {43786240, 8160} , {33720832, 8246} , {23655424, 8332} , {13590016, 8418} , {3524608, 8504} , {93459200, 8589} , {83393792, 8675} , {73328384, 8761} , {63262976, 8847} , {53197568, 8933} , {43132160, 9019} , {33066752, 9105} , {23001344, 9191} , {12935936, 9277} , {2870528, 9363} , {92805120, 9448} , {82739712, 9534} , {72674304, 9620} , {62608896, 9706} , {52543488, 9792} , {42478080, 9878} , {32412672, 9964} , {22347264, 10050} , {12281856, 10136} , {2216448, 10222} , {92151040, 10307} , {82085632, 10393} , {72020224, 10479} , {61954816, 10565} , {51889408, 10651} , {41824000, 10737} , {31758592, 10823} , {21693184, 10909} , } , {{0, 0} , {11627776, 10995} , {23255552, 21990} , {34883328, 32985} , {46511104, 43980} , {58138880, 54975} , {69766656, 65970} , {81394432, 76965} , {93022208, 87960} , {4649984, 98956} , {16277760, 109951} , {27905536, 120946} , {39533312, 131941} , {51161088, 142936} , {62788864, 153931} , {74416640, 164926} , {86044416, 175921} , {97672192, 186916} , {9299968, 197912} , {20927744, 208907} , {32555520, 219902} , {44183296, 230897} , {55811072, 241892} , {67438848, 252887} , {79066624, 263882} , {90694400, 274877} , {2322176, 285873} , {13949952, 296868} , {25577728, 307863} , {37205504, 318858} , {48833280, 329853} , {60461056, 340848} , {72088832, 351843} , {83716608, 362838} , {95344384, 373833} , {6972160, 384829} , {18599936, 395824} , {30227712, 406819} , {41855488, 417814} , {53483264, 428809} , {65111040, 439804} , {76738816, 450799} , {88366592, 461794} , {99994368, 472789} , {11622144, 483785} , {23249920, 494780} , {34877696, 505775} , {46505472, 516770} , {58133248, 527765} , {69761024, 538760} , {81388800, 549755} , {93016576, 560750} , {4644352, 571746} , {16272128, 582741} , {27899904, 593736} , {39527680, 604731} , {51155456, 615726} , {62783232, 626721} , {74411008, 637716} , {86038784, 648711} , {97666560, 659706} , {9294336, 670702} , {20922112, 681697} , {32549888, 692692} , {44177664, 703687} , {55805440, 714682} , {67433216, 725677} , {79060992, 736672} , {90688768, 747667} , {2316544, 758663} , {13944320, 769658} , {25572096, 780653} , {37199872, 791648} , {48827648, 802643} , {60455424, 813638} , {72083200, 824633} , {83710976, 835628} , {95338752, 846623} , {6966528, 857619} , {18594304, 868614} , {30222080, 879609} , {41849856, 890604} , {53477632, 901599} , {65105408, 912594} , {76733184, 923589} , {88360960, 934584} , {99988736, 945579} , {11616512, 956575} , {23244288, 967570} , {34872064, 978565} , {46499840, 989560} , {58127616, 1000555} , {69755392, 1011550} , {81383168, 1022545} , {93010944, 1033540} , {4638720, 1044536} , {16266496, 1055531} , {27894272, 1066526} , {39522048, 1077521} , {51149824, 1088516} , {62777600, 1099511} , {74405376, 1110506} , {86033152, 1121501} , {97660928, 1132496} , {9288704, 1143492} , {20916480, 1154487} , {32544256, 1165482} , {44172032, 1176477} , {55799808, 1187472} , {67427584, 1198467} , {79055360, 1209462} , {90683136, 1220457} , {2310912, 1231453} , {13938688, 1242448} , {25566464, 1253443} , {37194240, 1264438} , {48822016, 1275433} , {60449792, 1286428} , {72077568, 1297423} , {83705344, 1308418} , {95333120, 1319413} , {6960896, 1330409} , {18588672, 1341404} , {30216448, 1352399} , {41844224, 1363394} , {53472000, 1374389} , {65099776, 1385384} , {76727552, 1396379} , } , {{0, 0} , {88355328, 1407374} , {76710656, 2814749} , {65065984, 4222124} , {53421312, 5629499} , {41776640, 7036874} , {30131968, 8444249} , {18487296, 9851624} , {6842624, 11258999} , {95197952, 12666373} , {83553280, 14073748} , {71908608, 15481123} , {60263936, 16888498} , {48619264, 18295873} , {36974592, 19703248} , {25329920, 21110623} , {13685248, 22517998} , {2040576, 23925373} , {90395904, 25332747} , {78751232, 26740122} , {67106560, 28147497} , {55461888, 29554872} , {43817216, 30962247} , {32172544, 32369622} , {20527872, 33776997} , {8883200, 35184372} , {97238528, 36591746} , {85593856, 37999121} , {73949184, 39406496} , {62304512, 40813871} , {50659840, 42221246} , {39015168, 43628621} , {27370496, 45035996} , {15725824, 46443371} , {4081152, 47850746} , {92436480, 49258120} , {80791808, 50665495} , {69147136, 52072870} , {57502464, 53480245} , {45857792, 54887620} , {34213120, 56294995} , {22568448, 57702370} , {10923776, 59109745} , {99279104, 60517119} , {87634432, 61924494} , {75989760, 63331869} , {64345088, 64739244} , {52700416, 66146619} , {41055744, 67553994} , {29411072, 68961369} , {17766400, 70368744} , {6121728, 71776119} , {94477056, 73183493} , {82832384, 74590868} , {71187712, 75998243} , {59543040, 77405618} , {47898368, 78812993} , {36253696, 80220368} , {24609024, 81627743} , {12964352, 83035118} , {1319680, 84442493} , {89675008, 85849867} , {78030336, 87257242} , {66385664, 88664617} , {54740992, 90071992} , {43096320, 91479367} , {31451648, 92886742} , {19806976, 94294117} , {8162304, 95701492} , {96517632, 97108866} , {84872960, 98516241} , {73228288, 99923616} , {61583616, 1330991} , {49938944, 2738366} , {38294272, 4145741} , {26649600, 5553116} , {15004928, 6960491} , {3360256, 8367866} , {91715584, 9775240} , {80070912, 11182615} , {68426240, 12589990} , {56781568, 13997365} , {45136896, 15404740} , {33492224, 16812115} , {21847552, 18219490} , {10202880, 19626865} , {98558208, 21034239} , {86913536, 22441614} , {75268864, 23848989} , {63624192, 25256364} , {51979520, 26663739} , {40334848, 28071114} , {28690176, 29478489} , {17045504, 30885864} , {5400832, 32293239} , {93756160, 33700613} , {82111488, 35107988} , {70466816, 36515363} , {58822144, 37922738} , {47177472, 39330113} , {35532800, 40737488} , {23888128, 42144863} , {12243456, 43552238} , {598784, 44959613} , {88954112, 46366987} , {77309440, 47774362} , {65664768, 49181737} , {54020096, 50589112} , {42375424, 51996487} , {30730752, 53403862} , {19086080, 54811237} , {7441408, 56218612} , {95796736, 57625986} , {84152064, 59033361} , {72507392, 60440736} , {60862720, 61848111} , {49218048, 63255486} , {37573376, 64662861} , {25928704, 66070236} , {14284032, 67477611} , {2639360, 68884986} , {90994688, 70292360} , {79350016, 71699735} , {67705344, 73107110} , {56060672, 74514485} , {44416000, 75921860} , {32771328, 77329235} , {21126656, 78736610} , } , {{0, 0} , {9481984, 80143985} , {18963968, 60287970} , {28445952, 40431955} , {37927936, 20575940} , {47409920, 719925} , {56891904, 80863910} , {66373888, 61007895} , {75855872, 41151880} , {85337856, 21295865} , {94819840, 1439850} , {4301824, 81583836} , {13783808, 61727821} , {23265792, 41871806} , {32747776, 22015791} , {42229760, 2159776} , {51711744, 82303761} , {61193728, 62447746} , {70675712, 42591731} , {80157696, 22735716} , {89639680, 2879701} , {99121664, 83023686} , {8603648, 63167672} , {18085632, 43311657} , {27567616, 23455642} , {37049600, 3599627} , {46531584, 83743612} , {56013568, 63887597} , {65495552, 44031582} , {74977536, 24175567} , {84459520, 4319552} , {93941504, 84463537} , {3423488, 64607523} , {12905472, 44751508} , {22387456, 24895493} , {31869440, 5039478} , {41351424, 85183463} , {50833408, 65327448} , {60315392, 45471433} , {69797376, 25615418} , {79279360, 5759403} , {88761344, 85903388} , {98243328, 66047373} , {7725312, 46191359} , {17207296, 26335344} , {26689280, 6479329} , {36171264, 86623314} , {45653248, 66767299} , {55135232, 46911284} , {64617216, 27055269} , {74099200, 7199254} , {83581184, 87343239} , {93063168, 67487224} , {2545152, 47631210} , {12027136, 27775195} , {21509120, 7919180} , {30991104, 88063165} , {40473088, 68207150} , {49955072, 48351135} , {59437056, 28495120} , {68919040, 8639105} , {78401024, 88783090} , {87883008, 68927075} , {97364992, 49071060} , {6846976, 29215046} , {16328960, 9359031} , {25810944, 89503016} , {35292928, 69647001} , {44774912, 49790986} , {54256896, 29934971} , {63738880, 10078956} , {73220864, 90222941} , {82702848, 70366926} , {92184832, 50510911} , {1666816, 30654897} , {11148800, 10798882} , {20630784, 90942867} , {30112768, 71086852} , {39594752, 51230837} , {49076736, 31374822} , {58558720, 11518807} , {68040704, 91662792} , {77522688, 71806777} , {87004672, 51950762} , {96486656, 32094747} , {5968640, 12238733} , {15450624, 92382718} , {24932608, 72526703} , {34414592, 52670688} , {43896576, 32814673} , {53378560, 12958658} , {62860544, 93102643} , {72342528, 73246628} , {81824512, 53390613} , {91306496, 33534598} , {788480, 13678584} , {10270464, 93822569} , {19752448, 73966554} , {29234432, 54110539} , {38716416, 34254524} , {48198400, 14398509} , {57680384, 94542494} , {67162368, 74686479} , {76644352, 54830464} , {86126336, 34974449} , {95608320, 15118434} , {5090304, 95262420} , {14572288, 75406405} , {24054272, 55550390} , {33536256, 35694375} , {43018240, 15838360} , {52500224, 95982345} , {61982208, 76126330} , {71464192, 56270315} , {80946176, 36414300} , {90428160, 16558285} , {99910144, 96702270} , {9392128, 76846256} , {18874112, 56990241} , {28356096, 37134226} , {37838080, 17278211} , {47320064, 97422196} , {56802048, 77566181} , {66284032, 57710166} , {75766016, 37854151} , {85248000, 17998136} , {94729984, 98142121} , {4211968, 78286107} , } , }; // for j>=min_j[i+1], there is k s.t. convert_table[i][j][k]>0 // int min_j[] = { 0, 0, 0, 3 }; // for even k, ((packed_10000_zeros[k>>3])>>(k&7))&3)=greatest(i) s.t. 10^i divides k const UINT8 packed_10000_zeros[] = { 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, }; const SINT8 factors[1024][2] = { {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {4, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 2} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {5, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {4, 0} , {0, 0} , {1, 2} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {6, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 2} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {4, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {5, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 2} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {4, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 3} , {1, 0} , {0, 0} , {7, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {4, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 2} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {5, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 2} , {4, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {6, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 2} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {4, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {5, 0} , {0, 2} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {4, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 3} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {8, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {4, 0} , {0, 0} , {1, 0} , {0, 2} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {5, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 2} , {0, 0} , {1, 0} , {0, 0} , {4, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {6, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 2} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {4, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 2} , {0, 0} , {5, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {4, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 3} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {7, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {4, 2} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {5, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 2} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {4, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {6, 0} , {0, 0} , {1, 2} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {4, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 2} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {5, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {4, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 3} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {9, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 2} , {1, 0} , {0, 0} , {4, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {5, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 2} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {4, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 2} , {6, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {4, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 2} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {5, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {4, 0} , {0, 4} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {7, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 2} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {4, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {5, 0} , {0, 0} , {1, 0} , {0, 2} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {4, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 2} , {0, 0} , {1, 0} , {0, 0} , {6, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {4, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 2} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {5, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 3} , {0, 0} , {4, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {8, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 2} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {4, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {5, 2} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {4, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 2} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {6, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {4, 0} , {0, 0} , {1, 2} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {5, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 3} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {4, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {7, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 2} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {4, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 2} , {1, 0} , {0, 0} , {5, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {4, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 2} , {0, 0} , {3, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {6, 1} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {3, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 2} , {4, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {3, 0} , {0, 1} , {1, 0} , {0, 0} , {2, 0} , {0, 0} , {1, 1} , {0, 0} , {5, 0} , {0, 0} , {1, 0} , {0, 1} , {2, 0} , {0, 0} , {1, 0} , {0, 0} , {3, 3} , {0, 0} , {1, 0} , {0, 0} , {2, 0} , {0, 1} , {1, 0} , {0, 0} , {4, 0} , {0, 0} , {1, 1} , {0, 0} , {2, 0} , {0, 0} , {1, 0} , {0, 1} , {3, 0} , {0, 0} , {1, 0} , {0, 0} , {2, 1} , {0, 0} , {1, 0} , {0, 0} , {10, 0} , }; libdfp-1.0.17/libbid/bid_decimal_data.c000066400000000000000000001022031504475242000176370ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" UINT64 round_const_table[][19] = { { // RN 0ull, // 0 extra digits 5ull, // 1 extra digits 50ull, // 2 extra digits 500ull, // 3 extra digits 5000ull, // 4 extra digits 50000ull, // 5 extra digits 500000ull, // 6 extra digits 5000000ull, // 7 extra digits 50000000ull, // 8 extra digits 500000000ull, // 9 extra digits 5000000000ull, // 10 extra digits 50000000000ull, // 11 extra digits 500000000000ull, // 12 extra digits 5000000000000ull, // 13 extra digits 50000000000000ull, // 14 extra digits 500000000000000ull, // 15 extra digits 5000000000000000ull, // 16 extra digits 50000000000000000ull, // 17 extra digits 500000000000000000ull // 18 extra digits } , { // RD 0ull, // 0 extra digits 0ull, // 1 extra digits 0ull, // 2 extra digits 00ull, // 3 extra digits 000ull, // 4 extra digits 0000ull, // 5 extra digits 00000ull, // 6 extra digits 000000ull, // 7 extra digits 0000000ull, // 8 extra digits 00000000ull, // 9 extra digits 000000000ull, // 10 extra digits 0000000000ull, // 11 extra digits 00000000000ull, // 12 extra digits 000000000000ull, // 13 extra digits 0000000000000ull, // 14 extra digits 00000000000000ull, // 15 extra digits 000000000000000ull, // 16 extra digits 0000000000000000ull, // 17 extra digits 00000000000000000ull // 18 extra digits } , { // round to Inf 0ull, // 0 extra digits 9ull, // 1 extra digits 99ull, // 2 extra digits 999ull, // 3 extra digits 9999ull, // 4 extra digits 99999ull, // 5 extra digits 999999ull, // 6 extra digits 9999999ull, // 7 extra digits 99999999ull, // 8 extra digits 999999999ull, // 9 extra digits 9999999999ull, // 10 extra digits 99999999999ull, // 11 extra digits 999999999999ull, // 12 extra digits 9999999999999ull, // 13 extra digits 99999999999999ull, // 14 extra digits 999999999999999ull, // 15 extra digits 9999999999999999ull, // 16 extra digits 99999999999999999ull, // 17 extra digits 999999999999999999ull // 18 extra digits } , { // RZ 0ull, // 0 extra digits 0ull, // 1 extra digits 0ull, // 2 extra digits 00ull, // 3 extra digits 000ull, // 4 extra digits 0000ull, // 5 extra digits 00000ull, // 6 extra digits 000000ull, // 7 extra digits 0000000ull, // 8 extra digits 00000000ull, // 9 extra digits 000000000ull, // 10 extra digits 0000000000ull, // 11 extra digits 00000000000ull, // 12 extra digits 000000000000ull, // 13 extra digits 0000000000000ull, // 14 extra digits 00000000000000ull, // 15 extra digits 000000000000000ull, // 16 extra digits 0000000000000000ull, // 17 extra digits 00000000000000000ull // 18 extra digits } , { // round ties away from 0 0ull, // 0 extra digits 5ull, // 1 extra digits 50ull, // 2 extra digits 500ull, // 3 extra digits 5000ull, // 4 extra digits 50000ull, // 5 extra digits 500000ull, // 6 extra digits 5000000ull, // 7 extra digits 50000000ull, // 8 extra digits 500000000ull, // 9 extra digits 5000000000ull, // 10 extra digits 50000000000ull, // 11 extra digits 500000000000ull, // 12 extra digits 5000000000000ull, // 13 extra digits 50000000000000ull, // 14 extra digits 500000000000000ull, // 15 extra digits 5000000000000000ull, // 16 extra digits 50000000000000000ull, // 17 extra digits 500000000000000000ull // 18 extra digits } , }; UINT128 round_const_table_128[][36] = { { //RN {{0ull, 0ull} } , // 0 extra digits {{5ull, 0ull} } , // 1 extra digits {{50ull, 0ull} } , // 2 extra digits {{500ull, 0ull} } , // 3 extra digits {{5000ull, 0ull} } , // 4 extra digits {{50000ull, 0ull} } , // 5 extra digits {{500000ull, 0ull} } , // 6 extra digits {{5000000ull, 0ull} } , // 7 extra digits {{50000000ull, 0ull} } , // 8 extra digits {{500000000ull, 0ull} } , // 9 extra digits {{5000000000ull, 0ull} } , // 10 extra digits {{50000000000ull, 0ull} } , // 11 extra digits {{500000000000ull, 0ull} } , // 12 extra digits {{5000000000000ull, 0ull} } , // 13 extra digits {{50000000000000ull, 0ull} } , // 14 extra digits {{500000000000000ull, 0ull} } , // 15 extra digits {{5000000000000000ull, 0ull} } , // 16 extra digits {{50000000000000000ull, 0ull} } , // 17 extra digits {{500000000000000000ull, 0ull} } , // 18 extra digits {{5000000000000000000ull, 0ull} } , // 19 extra digits {{0xb5e3af16b1880000ull, 2ull} } , //20 {{0x1ae4d6e2ef500000ull, 27ull} } , //21 {{0xcf064dd59200000ull, 271ull} } , //22 {{0x8163f0a57b400000ull, 2710ull} } , //23 {{0xde76676d0800000ull, 27105ull} } , //24 {{0x8b0a00a425000000ull, 0x422caull} } , //25 {{0x6e64066972000000ull, 0x295be9ull} } , //26 {{0x4fe8401e74000000ull, 0x19d971eull} } , //27 {{0x1f12813088000000ull, 0x1027e72full} } , //28 {{0x36b90be550000000ull, 0xa18f07d7ull} } , //29 {{0x233a76f520000000ull, 0x64f964e68ull} } , //30 {{0x6048a59340000000ull, 0x3f1bdf1011ull} } , //31 {{0xc2d677c080000000ull, 0x27716b6a0adull} } , //32 {{0x9c60ad8500000000ull, 0x18a6e32246c9ull} } , //33 {{0x1bc6c73200000000ull, 0xf684df56c3e0ull} } , //34 {{0x15c3c7f400000000ull, 0x9a130b963a6c1ull} } , //35 } , { //RD {{0ull, 0ull} } , // 0 extra digits {{0ull, 0ull} } , // 1 extra digits {{0ull, 0ull} } , // 2 extra digits {{00ull, 0ull} } , // 3 extra digits {{000ull, 0ull} } , // 4 extra digits {{0000ull, 0ull} } , // 5 extra digits {{00000ull, 0ull} } , // 6 extra digits {{000000ull, 0ull} } , // 7 extra digits {{0000000ull, 0ull} } , // 8 extra digits {{00000000ull, 0ull} } , // 9 extra digits {{000000000ull, 0ull} } , // 10 extra digits {{0000000000ull, 0ull} } , // 11 extra digits {{00000000000ull, 0ull} } , // 12 extra digits {{000000000000ull, 0ull} } , // 13 extra digits {{0000000000000ull, 0ull} } , // 14 extra digits {{00000000000000ull, 0ull} } , // 15 extra digits {{000000000000000ull, 0ull} } , // 16 extra digits {{0000000000000000ull, 0ull} } , // 17 extra digits {{00000000000000000ull, 0ull} } , // 18 extra digits {{000000000000000000ull, 0ull} } , // 19 extra digits {{0ull, 0ull} } , //20 {{0ull, 0ull} } , //21 {{0ull, 0ull} } , //22 {{0ull, 0ull} } , //23 {{0ull, 0ull} } , //24 {{0ull, 0ull} } , //25 {{0ull, 0ull} } , //26 {{0ull, 0ull} } , //27 {{0ull, 0ull} } , //28 {{0ull, 0ull} } , //29 {{0ull, 0ull} } , //30 {{0ull, 0ull} } , //31 {{0ull, 0ull} } , //32 {{0ull, 0ull} } , //33 {{0ull, 0ull} } , //34 {{0ull, 0ull} } , //35 } , { //RU {{0ull, 0ull} } , // 0 extra digits {{9ull, 0ull} } , // 1 extra digits {{99ull, 0ull} } , // 2 extra digits {{999ull, 0ull} } , // 3 extra digits {{9999ull, 0ull} } , // 4 extra digits {{99999ull, 0ull} } , // 5 extra digits {{999999ull, 0ull} } , // 6 extra digits {{9999999ull, 0ull} } , // 7 extra digits {{99999999ull, 0ull} } , // 8 extra digits {{999999999ull, 0ull} } , // 9 extra digits {{9999999999ull, 0ull} } , // 10 extra digits {{99999999999ull, 0ull} } , // 11 extra digits {{999999999999ull, 0ull} } , // 12 extra digits {{9999999999999ull, 0ull} } , // 13 extra digits {{99999999999999ull, 0ull} } , // 14 extra digits {{999999999999999ull, 0ull} } , // 15 extra digits {{9999999999999999ull, 0ull} } , // 16 extra digits {{99999999999999999ull, 0ull} } , // 17 extra digits {{999999999999999999ull, 0ull} } , // 18 extra digits {{9999999999999999999ull, 0ull} } , // 19 extra digits {{0x6BC75E2D630FFFFFull, 0x5ull} } , //20 {{0x35C9ADC5DE9FFFFFull, 0x36ull} } , //21 {{0x19E0C9BAB23FFFFFull, 0x21eull} } , //22 {{0x2C7E14AF67FFFFFull, 0x152dull} } , //23 {{0x1BCECCEDA0FFFFFFull, 0xd3c2ull} } , //24 {{0x1614014849FFFFFFull, 0x84595ull} } , //25 {{0xDCC80CD2E3FFFFFFull, 0x52b7d2ull} } , //26 {{0x9FD0803CE7FFFFFFull, 0x33B2E3Cull} } , //27 {{0x3E2502610FFFFFFFull, 0x204FCE5Eull} } , //28 {{0x6D7217CA9FFFFFFFull, 0x1431E0FAEull} } , //29 {{0x4674EDEA3FFFFFFFull, 0xC9F2C9CD0ull} } , //30 {{0xC0914B267FFFFFFFull, 0x7E37BE2022ull} } , //31 {{0x85ACEF80FFFFFFFFull, 0x4EE2D6D415Bull} } , //32 {{0x38c15b09ffffffffull, 0x314dc6448d93ull} } , //33 {{0x378d8e63ffffffffull, 0x1ed09bead87c0ull} } , //34 {{0x2b878fe7ffffffffull, 0x13426172c74d82ull} } , //35 } , { //RZ {{0ull, 0ull} } , // 0 extra digits {{0ull, 0ull} } , // 1 extra digits {{0ull, 0ull} } , // 2 extra digits {{00ull, 0ull} } , // 3 extra digits {{000ull, 0ull} } , // 4 extra digits {{0000ull, 0ull} } , // 5 extra digits {{00000ull, 0ull} } , // 6 extra digits {{000000ull, 0ull} } , // 7 extra digits {{0000000ull, 0ull} } , // 8 extra digits {{00000000ull, 0ull} } , // 9 extra digits {{000000000ull, 0ull} } , // 10 extra digits {{0000000000ull, 0ull} } , // 11 extra digits {{00000000000ull, 0ull} } , // 12 extra digits {{000000000000ull, 0ull} } , // 13 extra digits {{0000000000000ull, 0ull} } , // 14 extra digits {{00000000000000ull, 0ull} } , // 15 extra digits {{000000000000000ull, 0ull} } , // 16 extra digits {{0000000000000000ull, 0ull} } , // 17 extra digits {{00000000000000000ull, 0ull} } , // 18 extra digits {{000000000000000000ull, 0ull} } , // 19 extra digits {{0ull, 0ull} } , //20 {{0ull, 0ull} } , //21 {{0ull, 0ull} } , //22 {{0ull, 0ull} } , //23 {{0ull, 0ull} } , //24 {{0ull, 0ull} } , //25 {{0ull, 0ull} } , //26 {{0ull, 0ull} } , //27 {{0ull, 0ull} } , //28 {{0ull, 0ull} } , //29 {{0ull, 0ull} } , //30 {{0ull, 0ull} } , //31 {{0ull, 0ull} } , //32 {{0ull, 0ull} } , //33 {{0ull, 0ull} } , //34 {{0ull, 0ull} } , //35 } , { //RN, ties away {{0ull, 0ull} } , // 0 extra digits {{5ull, 0ull} } , // 1 extra digits {{50ull, 0ull} } , // 2 extra digits {{500ull, 0ull} } , // 3 extra digits {{5000ull, 0ull} } , // 4 extra digits {{50000ull, 0ull} } , // 5 extra digits {{500000ull, 0ull} } , // 6 extra digits {{5000000ull, 0ull} } , // 7 extra digits {{50000000ull, 0ull} } , // 8 extra digits {{500000000ull, 0ull} } , // 9 extra digits {{5000000000ull, 0ull} } , // 10 extra digits {{50000000000ull, 0ull} } , // 11 extra digits {{500000000000ull, 0ull} } , // 12 extra digits {{5000000000000ull, 0ull} } , // 13 extra digits {{50000000000000ull, 0ull} } , // 14 extra digits {{500000000000000ull, 0ull} } , // 15 extra digits {{5000000000000000ull, 0ull} } , // 16 extra digits {{50000000000000000ull, 0ull} } , // 17 extra digits {{500000000000000000ull, 0ull} } , // 18 extra digits {{5000000000000000000ull, 0ull} } , // 19 extra digits {{0xb5e3af16b1880000ull, 2ull} } , //20 {{0x1ae4d6e2ef500000ull, 27ull} } , //21 {{0xcf064dd59200000ull, 271ull} } , //22 {{0x8163f0a57b400000ull, 2710ull} } , //23 {{0xde76676d0800000ull, 27105ull} } , //24 {{0x8b0a00a425000000ull, 0x422caull} } , //25 {{0x6e64066972000000ull, 0x295be9ull} } , //26 {{0x4fe8401e74000000ull, 0x19d971eull} } , //27 {{0x1f12813088000000ull, 0x1027e72full} } , //28 {{0x36b90be550000000ull, 0xa18f07d7ull} } , //29 {{0x233a76f520000000ull, 0x64f964e68ull} } , //30 {{0x6048a59340000000ull, 0x3f1bdf1011ull} } , //31 {{0xc2d677c080000000ull, 0x27716b6a0adull} } , //32 {{0x9c60ad8500000000ull, 0x18a6e32246c9ull} } , //33 {{0x1bc6c73200000000ull, 0xf684df56c3e0ull} } , //34 {{0x15c3c7f400000000ull, 0x9a130b963a6c1ull} } , //35 } }; UINT128 reciprocals10_128[] = { {{0ull, 0ull} } , // 0 extra digits {{0x3333333333333334ull, 0x3333333333333333ull} } , // 1 extra digit {{0x51eb851eb851eb86ull, 0x051eb851eb851eb8ull} } , // 2 extra digits {{0x3b645a1cac083127ull, 0x0083126e978d4fdfull} } , // 3 extra digits {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL} } , // 10^(-4) * 2^131 {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL} } , // 10^(-5) * 2^134 {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL} } , // 10^(-6) * 2^137 {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL} } , // 10^(-7) * 2^141 {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL} } , // 10^(-8) * 2^144 {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL} } , // 10^(-9) * 2^147 {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL} } , // 10^(-10) * 2^151 {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL} } , // 10^(-11) * 2^154 {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL} } , // 10^(-12) * 2^157 {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL} } , // 10^(-13) * 2^161 {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL} } , // 10^(-14) * 2^164 {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL} } , // 10^(-15) * 2^167 {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL} } , // 10^(-16) * 2^171 {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL} } , // 10^(-17) * 2^174 {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL} } , // 10^(-18) * 2^177 {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL} } , // 10^(-19) * 2^181 {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL} } , // 10^(-20) * 2^184 {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL} } , // 10^(-21) * 2^187 {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL} } , // 10^(-22) * 2^191 {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL} } , // 10^(-23) * 2^194 {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL} } , // 10^(-24) * 2^197 {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL} } , // 10^(-25) * 2^201 {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL} } , // 10^(-26) * 2^204 {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL} } , // 10^(-27) * 2^207 {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL} } , // 10^(-28) * 2^211 {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL} } , // 10^(-29) * 2^214 {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL} } , // 10^(-30) * 2^217 {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL} } , // 10^(-31) * 2^220 {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL} } , // 10^(-32) * 2^224 {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL} } , // 10^(-33) * 2^227 {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL} } , // 10^(-34) * 2^230 {{0x0f2abc9d8c9689d1ull, 0x01a95a5b7f87a0efull} } , // 35 extra digits }; int recip_scale[] = { 129 - 128, // 1 129 - 128, // 1/10 129 - 128, // 1/10^2 129 - 128, // 1/10^3 3, // 131 - 128 6, // 134 - 128 9, // 137 - 128 13, // 141 - 128 16, // 144 - 128 19, // 147 - 128 23, // 151 - 128 26, // 154 - 128 29, // 157 - 128 33, // 161 - 128 36, // 164 - 128 39, // 167 - 128 43, // 171 - 128 46, // 174 - 128 49, // 177 - 128 53, // 181 - 128 56, // 184 - 128 59, // 187 - 128 63, // 191 - 128 66, // 194 - 128 69, // 197 - 128 73, // 201 - 128 76, // 204 - 128 79, // 207 - 128 83, // 211 - 128 86, // 214 - 128 89, // 217 - 128 92, // 220 - 128 96, // 224 - 128 99, // 227 - 128 102, // 230 - 128 109, // 237 - 128, 1/10^35 }; // tables used in computation int estimate_decimal_digits[129] = { 1, //2^0 =1 < 10^0 1, //2^1 =2 < 10^1 1, //2^2 =4 < 10^1 1, //2^3 =8 < 10^1 2, //2^4 =16 < 10^2 2, //2^5 =32 < 10^2 2, //2^6 =64 < 10^2 3, //2^7 =128 < 10^3 3, //2^8 =256 < 10^3 3, //2^9 =512 < 10^3 4, //2^10=1024 < 10^4 4, //2^11=2048 < 10^4 4, //2^12=4096 < 10^4 4, //2^13=8192 < 10^4 5, //2^14=16384 < 10^5 5, //2^15=32768 < 10^5 5, //2^16=65536 < 10^5 6, //2^17=131072 < 10^6 6, //2^18=262144 < 10^6 6, //2^19=524288 < 10^6 7, //2^20=1048576 < 10^7 7, //2^21=2097152 < 10^7 7, //2^22=4194304 < 10^7 7, //2^23=8388608 < 10^7 8, //2^24=16777216 < 10^8 8, //2^25=33554432 < 10^8 8, //2^26=67108864 < 10^8 9, //2^27=134217728 < 10^9 9, //2^28=268435456 < 10^9 9, //2^29=536870912 < 10^9 10, //2^30=1073741824< 10^10 10, //2^31=2147483648< 10^10 10, //2^32=4294967296 < 10^10 10, //2^33=8589934592 < 10^10 11, //2^34=17179869184 < 10^11 11, //2^35=34359738368 < 10^11 11, //2^36=68719476736 < 10^11 12, //2^37=137438953472 < 10^12 12, //2^38=274877906944 < 10^12 12, //2^39=549755813888 < 10^12 13, //2^40=1099511627776 < 10^13 13, //2^41=2199023255552 < 10^13 13, //2^42=4398046511104 < 10^13 13, //2^43=8796093022208 < 10^13 14, //2^44=17592186044416 < 10^14 14, //2^45=35184372088832 < 10^14 14, //2^46=70368744177664 < 10^14 15, //2^47=140737488355328< 10^15 15, //2^48=281474976710656 < 10^15 15, //2^49=562949953421312 < 10^15 16, //2^50=1125899906842624 < 10^16 16, //2^51=2251799813685248 < 10^16 16, //2^52=4503599627370496 < 10^16 16, //2^53=9007199254740992 < 10^16 17, //2^54=18014398509481984 < 10^17 17, //2^55=36028797018963968 < 10^17 17, //2^56=72057594037927936 < 10^17 18, //2^57=144115188075855872 < 10^18 18, //2^58=288230376151711744 < 10^18 18, //2^59=576460752303423488 < 10^18 19, //2^60=1152921504606846976< 10^19 19, //2^61=2305843009213693952< 10^19 19, //2^62=4611686018427387904< 10^19 19, //2^63=9223372036854775808< 10^19 20, //2^64=18446744073709551616 20, //2^65=36893488147419103232 20, //2^66=73786976294838206464 21, //2^67=147573952589676412928 21, //2^68=295147905179352825856 21, //2^69=590295810358705651712 22, //2^70=1180591620717411303424 22, //2^71=2361183241434822606848 22, //2^72=4722366482869645213696 22, //2^73=9444732965739290427392 23, //2^74=18889465931478580854784 23, //2^75=37778931862957161709568 23, //2^76=75557863725914323419136 24, //2^77=151115727451828646838272 24, //2^78=302231454903657293676544 24, //2^79=604462909807314587353088 25, //2^80=1208925819614629174706176 25, //2^81=2417851639229258349412352 25, //2^82=4835703278458516698824704 25, //2^83=9671406556917033397649408 26, //2^84=19342813113834066795298816 26, //2^85=38685626227668133590597632 26, //2^86=77371252455336267181195264 27, //2^87=154742504910672534362390528 27, //2^88=309485009821345068724781056 27, //2^89=618970019642690137449562112 28, //2^90=1237940039285380274899124224 28, //2^91=2475880078570760549798248448 28, //2^92=4951760157141521099596496896 28, //2^93=9903520314283042199192993792 29, //2^94=19807040628566084398385987584 29, //2^95=39614081257132168796771975168 29, //2^96=79228162514264337593543950336 30, //2^97=158456325028528675187087900672 30, //2^98=316912650057057350374175801344 30, //2^99=633825300114114700748351602688 31, //2^100=1267650600228229401496703205376 31, //2^101=2535301200456458802993406410752 31, //2^102=5070602400912917605986812821504 32, //2^103=10141204801825835211973625643008 32, //2^104=20282409603651670423947251286016 32, //2^105=40564819207303340847894502572032 32, //2^106=81129638414606681695789005144064 33, //2^107=162259276829213363391578010288128 33, // 2^108 33, // 2^109 34, // 2^110 34, // 2^111 34, // 2^112 35, // 2^113 35, // 2^114 35, // 2^115 35, // 2^116 36, // 2^117 36, // 2^118 36, // 2^119 37, // 2^120 37, // 2^121 37, // 2^122 38, // 2^123 38, // 2^124 38, // 2^125 38, // 2^126 39, // 2^127 39 // 2^128 }; UINT128 power10_table_128[] = { {{0x0000000000000001ull, 0x0000000000000000ull}}, // 10^0 {{0x000000000000000aull, 0x0000000000000000ull}}, // 10^1 {{0x0000000000000064ull, 0x0000000000000000ull}}, // 10^2 {{0x00000000000003e8ull, 0x0000000000000000ull}}, // 10^3 {{0x0000000000002710ull, 0x0000000000000000ull}}, // 10^4 {{0x00000000000186a0ull, 0x0000000000000000ull}}, // 10^5 {{0x00000000000f4240ull, 0x0000000000000000ull}}, // 10^6 {{0x0000000000989680ull, 0x0000000000000000ull}}, // 10^7 {{0x0000000005f5e100ull, 0x0000000000000000ull}}, // 10^8 {{0x000000003b9aca00ull, 0x0000000000000000ull}}, // 10^9 {{0x00000002540be400ull, 0x0000000000000000ull}}, // 10^10 {{0x000000174876e800ull, 0x0000000000000000ull}}, // 10^11 {{0x000000e8d4a51000ull, 0x0000000000000000ull}}, // 10^12 {{0x000009184e72a000ull, 0x0000000000000000ull}}, // 10^13 {{0x00005af3107a4000ull, 0x0000000000000000ull}}, // 10^14 {{0x00038d7ea4c68000ull, 0x0000000000000000ull}}, // 10^15 {{0x002386f26fc10000ull, 0x0000000000000000ull}}, // 10^16 {{0x016345785d8a0000ull, 0x0000000000000000ull}}, // 10^17 {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}}, // 10^18 {{0x8ac7230489e80000ull, 0x0000000000000000ull}}, // 10^19 {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35 {{0xb34b9f1000000000ull, 0x00c097ce7bc90715ull}}, // 10^36 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38 }; int estimate_bin_expon[] = { 0, // 10^0 3, // 10^1 6, // 10^2 9, // 10^3 13, // 10^4 16, // 10^5 19, // 10^6 23, // 10^7 26, // 10^8 29, // 10^9 33, // 10^10 36, // 10^11 39, // 10^12 43, // 10^13 46, // 10^14 49, // 10^15 53 // 10^16 }; UINT64 power10_index_binexp[] = { 0x000000000000000aull, 0x000000000000000aull, 0x000000000000000aull, 0x000000000000000aull, 0x0000000000000064ull, 0x0000000000000064ull, 0x0000000000000064ull, 0x00000000000003e8ull, 0x00000000000003e8ull, 0x00000000000003e8ull, 0x0000000000002710ull, 0x0000000000002710ull, 0x0000000000002710ull, 0x0000000000002710ull, 0x00000000000186a0ull, 0x00000000000186a0ull, 0x00000000000186a0ull, 0x00000000000f4240ull, 0x00000000000f4240ull, 0x00000000000f4240ull, 0x0000000000989680ull, 0x0000000000989680ull, 0x0000000000989680ull, 0x0000000000989680ull, 0x0000000005f5e100ull, 0x0000000005f5e100ull, 0x0000000005f5e100ull, 0x000000003b9aca00ull, 0x000000003b9aca00ull, 0x000000003b9aca00ull, 0x00000002540be400ull, 0x00000002540be400ull, 0x00000002540be400ull, 0x00000002540be400ull, 0x000000174876e800ull, 0x000000174876e800ull, 0x000000174876e800ull, 0x000000e8d4a51000ull, 0x000000e8d4a51000ull, 0x000000e8d4a51000ull, 0x000009184e72a000ull, 0x000009184e72a000ull, 0x000009184e72a000ull, 0x000009184e72a000ull, 0x00005af3107a4000ull, 0x00005af3107a4000ull, 0x00005af3107a4000ull, 0x00038d7ea4c68000ull, 0x00038d7ea4c68000ull, 0x00038d7ea4c68000ull, 0x002386f26fc10000ull, 0x002386f26fc10000ull, 0x002386f26fc10000ull, 0x002386f26fc10000ull, 0x016345785d8a0000ull, 0x016345785d8a0000ull, 0x016345785d8a0000ull, 0x0de0b6b3a7640000ull, 0x0de0b6b3a7640000ull, 0x0de0b6b3a7640000ull, 0x8ac7230489e80000ull, 0x8ac7230489e80000ull, 0x8ac7230489e80000ull, 0x8ac7230489e80000ull }; int short_recip_scale[] = { 1, 65 - 64, 69 - 64, 71 - 64, 75 - 64, 78 - 64, 81 - 64, 85 - 64, 88 - 64, 91 - 64, 95 - 64, 98 - 64, 101 - 64, 105 - 64, 108 - 64, 111 - 64, 115 - 64, //114 - 64 118 - 64 }; UINT64 reciprocals10_64[] = { 1ull, // dummy value for 0 extra digits 0x3333333333333334ull, // 1 extra digit 0x51eb851eb851eb86ull, 0x20c49ba5e353f7cfull, 0x346dc5d63886594bull, 0x29f16b11c6d1e109ull, 0x218def416bdb1a6eull, 0x35afe535795e90b0ull, 0x2af31dc4611873c0ull, 0x225c17d04dad2966ull, 0x36f9bfb3af7b7570ull, 0x2bfaffc2f2c92ac0ull, 0x232f33025bd42233ull, 0x384b84d092ed0385ull, 0x2d09370d42573604ull, 0x24075f3dceac2b37ull, 0x39a5652fb1137857ull, 0x2e1dea8c8da92d13ull }; UINT128 power10_index_binexp_128[] = { {{0x000000000000000aull, 0x0000000000000000ull}}, {{0x000000000000000aull, 0x0000000000000000ull}}, {{0x000000000000000aull, 0x0000000000000000ull}}, {{0x000000000000000aull, 0x0000000000000000ull}}, {{0x0000000000000064ull, 0x0000000000000000ull}}, {{0x0000000000000064ull, 0x0000000000000000ull}}, {{0x0000000000000064ull, 0x0000000000000000ull}}, {{0x00000000000003e8ull, 0x0000000000000000ull}}, {{0x00000000000003e8ull, 0x0000000000000000ull}}, {{0x00000000000003e8ull, 0x0000000000000000ull}}, {{0x0000000000002710ull, 0x0000000000000000ull}}, {{0x0000000000002710ull, 0x0000000000000000ull}}, {{0x0000000000002710ull, 0x0000000000000000ull}}, {{0x0000000000002710ull, 0x0000000000000000ull}}, {{0x00000000000186a0ull, 0x0000000000000000ull}}, {{0x00000000000186a0ull, 0x0000000000000000ull}}, {{0x00000000000186a0ull, 0x0000000000000000ull}}, {{0x00000000000f4240ull, 0x0000000000000000ull}}, {{0x00000000000f4240ull, 0x0000000000000000ull}}, {{0x00000000000f4240ull, 0x0000000000000000ull}}, {{0x0000000000989680ull, 0x0000000000000000ull}}, {{0x0000000000989680ull, 0x0000000000000000ull}}, {{0x0000000000989680ull, 0x0000000000000000ull}}, {{0x0000000000989680ull, 0x0000000000000000ull}}, {{0x0000000005f5e100ull, 0x0000000000000000ull}}, {{0x0000000005f5e100ull, 0x0000000000000000ull}}, {{0x0000000005f5e100ull, 0x0000000000000000ull}}, {{0x000000003b9aca00ull, 0x0000000000000000ull}}, {{0x000000003b9aca00ull, 0x0000000000000000ull}}, {{0x000000003b9aca00ull, 0x0000000000000000ull}}, {{0x00000002540be400ull, 0x0000000000000000ull}}, {{0x00000002540be400ull, 0x0000000000000000ull}}, {{0x00000002540be400ull, 0x0000000000000000ull}}, {{0x00000002540be400ull, 0x0000000000000000ull}}, {{0x000000174876e800ull, 0x0000000000000000ull}}, {{0x000000174876e800ull, 0x0000000000000000ull}}, {{0x000000174876e800ull, 0x0000000000000000ull}}, {{0x000000e8d4a51000ull, 0x0000000000000000ull}}, {{0x000000e8d4a51000ull, 0x0000000000000000ull}}, {{0x000000e8d4a51000ull, 0x0000000000000000ull}}, {{0x000009184e72a000ull, 0x0000000000000000ull}}, {{0x000009184e72a000ull, 0x0000000000000000ull}}, {{0x000009184e72a000ull, 0x0000000000000000ull}}, {{0x000009184e72a000ull, 0x0000000000000000ull}}, {{0x00005af3107a4000ull, 0x0000000000000000ull}}, {{0x00005af3107a4000ull, 0x0000000000000000ull}}, {{0x00005af3107a4000ull, 0x0000000000000000ull}}, {{0x00038d7ea4c68000ull, 0x0000000000000000ull}}, {{0x00038d7ea4c68000ull, 0x0000000000000000ull}}, {{0x00038d7ea4c68000ull, 0x0000000000000000ull}}, {{0x002386f26fc10000ull, 0x0000000000000000ull}}, {{0x002386f26fc10000ull, 0x0000000000000000ull}}, {{0x002386f26fc10000ull, 0x0000000000000000ull}}, {{0x002386f26fc10000ull, 0x0000000000000000ull}}, {{0x016345785d8a0000ull, 0x0000000000000000ull}}, {{0x016345785d8a0000ull, 0x0000000000000000ull}}, {{0x016345785d8a0000ull, 0x0000000000000000ull}}, {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}}, {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}}, {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}}, {{0x8ac7230489e80000ull, 0x0000000000000000ull}}, {{0x8ac7230489e80000ull, 0x0000000000000000ull}}, {{0x8ac7230489e80000ull, 0x0000000000000000ull}}, {{0x8ac7230489e80000ull, 0x0000000000000000ull}}, {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20 {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20 {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33, entry 112 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35 {{0xb34b9f1000000000ull, 0x00c097ce7bc90715ull}}, // 10^36 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38 }; libdfp-1.0.17/libbid/bid_decimal_globals.c000066400000000000000000000062631504475242000203620ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" #include "bid_gcc_intrinsics.h" #if DECIMAL_GLOBAL_ROUNDING BID_THREAD _IDEC_round _IDEC_glbround = ROUNDING_TO_NEAREST; #if DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS void __dfp_set_round (int mode) { _IDEC_glbround = mode; } int __dfp_get_round (void) { return _IDEC_glbround; } #endif #endif #if DECIMAL_GLOBAL_EXCEPTION_FLAGS BID_THREAD _IDEC_flags _IDEC_glbflags = EXACT_STATUS; #if DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS #include void __dfp_clear_except (void) { _IDEC_glbflags &= ~FLAG_MASK; } int __dfp_test_except (int mask) { int flags = 0; if ((_IDEC_glbflags & INEXACT_EXCEPTION) != 0) flags |= mask & FE_INEXACT; if ((_IDEC_glbflags & UNDERFLOW_EXCEPTION) != 0) flags |= mask & FE_UNDERFLOW; if ((_IDEC_glbflags & OVERFLOW_EXCEPTION) != 0) flags |= mask & FE_OVERFLOW; if ((_IDEC_glbflags & ZERO_DIVIDE_EXCEPTION) != 0) flags |= mask & FE_DIVBYZERO; if ((_IDEC_glbflags & INVALID_EXCEPTION) != 0) flags |= mask & FE_INVALID; return flags; } void __dfp_raise_except (int mask) { _IDEC_flags flags = 0; if ((mask & FE_INEXACT) != 0) flags |= INEXACT_EXCEPTION; if ((mask & FE_UNDERFLOW) != 0) flags |= UNDERFLOW_EXCEPTION; if ((mask & FE_OVERFLOW) != 0) flags |= OVERFLOW_EXCEPTION; if ((mask & FE_DIVBYZERO) != 0) flags |= ZERO_DIVIDE_EXCEPTION; if ((mask & FE_INVALID) != 0) flags |= INVALID_EXCEPTION; _IDEC_glbflags |= flags; } void __dfp_set_status (int excepts) { _IDEC_glbflags |= excepts; if (excepts == INEXACT_EXCEPTION) { fesetexcept (FE_INEXACT); } else { int fexcepts = (excepts & INEXACT_EXCEPTION) ? FE_INEXACT : 0; fexcepts = (excepts & OVERFLOW_EXCEPTION) ? FE_OVERFLOW : 0; fexcepts = (excepts & UNDERFLOW_EXCEPTION) ? FE_UNDERFLOW : 0; fexcepts = (excepts & ZERO_DIVIDE_EXCEPTION) ? FE_DIVBYZERO : 0; fexcepts = (excepts & INVALID_EXCEPTION) ? FE_INVALID: 0; fesetexcept (fexcepts); } } #endif #endif #if DECIMAL_ALTERNATE_EXCEPTION_HANDLING #if DECIMAL_GLOBAL_EXCEPTION_MASKS BID_THREAD _IDEC_exceptionmasks _IDEC_glbexceptionmasks = _IDEC_allexcmasksset; #endif #if DECIMAL_GLOBAL_EXCEPTION_INFO BID_THREAD _IDEC_excepthandling _IDEC_glbexcepthandling; #endif #endif libdfp-1.0.17/libbid/bid_div_macros.h000066400000000000000000000323751504475242000174170ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef _DIV_MACROS_H_ #define _DIV_MACROS_H_ #include "bid_internal.h" #define FENCE __fence //#define FENCE //#define DOUBLE_EXTENDED_ON #if DOUBLE_EXTENDED_ON __BID_INLINE__ void __div_128_by_128 (UINT128 * pCQ, UINT128 * pCR, UINT128 CX, UINT128 CY) { UINT128 CB, CB2, CB4, CB8, CQB, CA; int_double d64, dm64, ds; int_float t64; double dx, dq, dqh; BINARY80 lq, lx, ly; UINT64 Rh, R, B2, B4, Ph, Ql, Ql2, carry, Qh; if (!CY.w[1]) { pCR->w[1] = 0; if (!CX.w[1]) { pCQ->w[0] = CX.w[0] / CY.w[0]; pCQ->w[1] = 0; pCR->w[1] = 0; pCR->w[0] = CX.w[0] - pCQ->w[0] * CY.w[0]; } else { // This path works for CX<2^116 only // 2^64 d64.i = 0x43f0000000000000; // 2^64 dm64.i = 0x3bf0000000000000; // 1.5*2^(-52) ds.i = 0x3cb8000000000000; dx = (BINARY80) CX.w[1] * d64.d + (BINARY80) CX.w[0]; dq = dx / (BINARY80) CY.w[0]; dq -= dq * (ds.d); dqh = dq * dm64.d; Qh = (UINT64) dqh; Ql = (UINT64) (dq - ((double) Qh) * d64.d); Rh = CX.w[0] - Ql * CY.w[0]; Ql2 = Rh / CY.w[0]; pCR->w[0] = Rh - Ql2 * CY.w[0]; __add_carry_out ((pCQ->w[0]), carry, Ql, Ql2); pCQ->w[1] = Qh + carry; } return; } // now CY.w[1] > 0 // 2^64 t64.i = 0x5f800000; lx = (BINARY80) CX.w[1] * (BINARY80) t64.d + (BINARY80) CX.w[0]; ly = (BINARY80) CY.w[1] * (BINARY80) t64.d + (BINARY80) CY.w[0]; lq = lx / ly; pCQ->w[0] = (UINT64) lq; pCQ->w[1] = 0; if (!pCQ->w[0]) { /*if(__unsigned_compare_ge_128(CX,CY)) { pCQ->w[0] = 1; __sub_128_128((*pCR), CX, CY); } else */ { pCR->w[1] = CX.w[1]; pCR->w[0] = CX.w[0]; } return; } if (CY.w[1] >= 16 || pCQ->w[0] <= 0x1000000000000000ull) { pCQ->w[0] = (UINT64) lq - 1; __mul_64x128_full (Ph, CQB, (pCQ->w[0]), CY); __sub_128_128 (CA, CX, CQB); if (__unsigned_compare_ge_128 (CA, CY)) { __sub_128_128 (CA, CA, CY); pCQ->w[0]++; if (__unsigned_compare_ge_128 (CA, CY)) { __sub_128_128 (CA, CA, CY); pCQ->w[0]++; } } pCR->w[1] = CA.w[1]; pCR->w[0] = CA.w[0]; } else { pCQ->w[0] = (UINT64) lq - 6; __mul_64x128_full (Ph, CQB, (pCQ->w[0]), CY); __sub_128_128 (CA, CX, CQB); CB8.w[1] = (CY.w[1] << 3) | (CY.w[0] >> 61); CB8.w[0] = CY.w[0] << 3; CB4.w[1] = (CY.w[1] << 2) | (CY.w[0] >> 62); CB4.w[0] = CY.w[0] << 2; CB2.w[1] = (CY.w[1] << 1) | (CY.w[0] >> 63); CB2.w[0] = CY.w[0] << 1; if (__unsigned_compare_ge_128 (CA, CB8)) { pCQ->w[0] += 8; __sub_128_128 (CA, CA, CB8); } if (__unsigned_compare_ge_128 (CA, CB4)) { pCQ->w[0] += 4; __sub_128_128 (CA, CA, CB4); } if (__unsigned_compare_ge_128 (CA, CB2)) { pCQ->w[0] += 2; __sub_128_128 (CA, CA, CB2); } if (__unsigned_compare_ge_128 (CA, CY)) { pCQ->w[0] += 1; __sub_128_128 (CA, CA, CY); } pCR->w[1] = CA.w[1]; pCR->w[0] = CA.w[0]; } } __BID_INLINE__ void __div_256_by_128 (UINT128 * pCQ, UINT256 * pCA4, UINT128 CY) { UINT256 CQ2Y; UINT128 CQ2, CQ3Y; UINT64 Q3, carry64; int_double d64; BINARY80 lx, ly, lq, l64, l128; // 2^64 d64.i = 0x43f0000000000000ull; l64 = (BINARY80) d64.d; // 2^128 l128 = l64 * l64; lx = ((BINARY80) (*pCA4).w[3] * l64 + (BINARY80) (*pCA4).w[2]) * l128 + (BINARY80) (*pCA4).w[1] * l64 + (BINARY80) (*pCA4).w[0]; ly = (BINARY80) CY.w[1] * l128 + (BINARY80) CY.w[0] * l64; lq = lx / ly; CQ2.w[1] = (UINT64) lq; lq = (lq - CQ2.w[1]) * l64; CQ2.w[0] = (UINT64) lq; // CQ2*CY __mul_128x128_to_256 (CQ2Y, CY, CQ2); // CQ2Y <= (*pCA4) ? if (CQ2Y.w[3] < (*pCA4).w[3] || (CQ2Y.w[3] == (*pCA4).w[3] && (CQ2Y.w[2] < (*pCA4).w[2] || (CQ2Y.w[2] == (*pCA4).w[2] && (CQ2Y.w[1] < (*pCA4).w[1] || (CQ2Y.w[1] == (*pCA4).w[1] && (CQ2Y.w[0] <= (*pCA4).w[0]))))))) { // (*pCA4) -CQ2Y, guaranteed below 5*2^49*CY < 5*2^(49+128) __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CQ2Y.w[0]); __sub_borrow_in_out ((*pCA4).w[1], carry64, (*pCA4).w[1], CQ2Y.w[1], carry64); (*pCA4).w[2] = (*pCA4).w[2] - CQ2Y.w[2] - carry64; lx = ((BINARY80) (*pCA4).w[2] * l128 + ((BINARY80) (*pCA4).w[1] * l64 + (BINARY80) (*pCA4).w[0])) * l64; lq = lx / ly; Q3 = (UINT64) lq; if (Q3) { Q3--; __mul_64x128_short (CQ3Y, Q3, CY); __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CQ3Y.w[0]); (*pCA4).w[1] = (*pCA4).w[1] - CQ3Y.w[1] - carry64; if ((*pCA4).w[1] > CY.w[1] || ((*pCA4).w[1] == CY.w[1] && (*pCA4).w[0] >= CY.w[0])) { Q3++; __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CY.w[0]); (*pCA4).w[1] = (*pCA4).w[1] - CY.w[1] - carry64; if ((*pCA4).w[1] > CY.w[1] || ((*pCA4).w[1] == CY.w[1] && (*pCA4).w[0] >= CY.w[0])) { Q3++; __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CY.w[0]); (*pCA4).w[1] = (*pCA4).w[1] - CY.w[1] - carry64; } } // add Q3 to Q2 __add_carry_out (CQ2.w[0], carry64, Q3, CQ2.w[0]); CQ2.w[1] += carry64; } } else { // CQ2Y - (*pCA4), guaranteed below 5*2^(49+128) __sub_borrow_out ((*pCA4).w[0], carry64, CQ2Y.w[0], (*pCA4).w[0]); __sub_borrow_in_out ((*pCA4).w[1], carry64, CQ2Y.w[1], (*pCA4).w[1], carry64); (*pCA4).w[2] = CQ2Y.w[2] - (*pCA4).w[2] - carry64; lx = ((BINARY80) (*pCA4).w[2] * l128 + (BINARY80) (*pCA4).w[1] * l64 + (BINARY80) (*pCA4).w[0]) * l64; lq = lx / ly; Q3 = 1 + (UINT64) lq; __mul_64x128_short (CQ3Y, Q3, CY); __sub_borrow_out ((*pCA4).w[0], carry64, CQ3Y.w[0], (*pCA4).w[0]); (*pCA4).w[1] = CQ3Y.w[1] - (*pCA4).w[1] - carry64; if ((SINT64) (*pCA4).w[1] > (SINT64) CY.w[1] || ((*pCA4).w[1] == CY.w[1] && (*pCA4).w[0] >= CY.w[0])) { Q3--; __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CY.w[0]); (*pCA4).w[1] = (*pCA4).w[1] - CY.w[1] - carry64; } else if ((SINT64) (*pCA4).w[1] < 0) { Q3++; __add_carry_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CY.w[0]); (*pCA4).w[1] = (*pCA4).w[1] + CY.w[1] + carry64; } // subtract Q3 from Q2 __sub_borrow_out (CQ2.w[0], carry64, CQ2.w[0], Q3); CQ2.w[1] -= carry64; } // (*pCQ) + CQ2 + carry __add_carry_out ((*pCQ).w[0], carry64, CQ2.w[0], (*pCQ).w[0]); (*pCQ).w[1] = (*pCQ).w[1] + CQ2.w[1] + carry64; } #else __BID_INLINE__ void __div_128_by_128 (UINT128 * pCQ, UINT128 * pCR, UINT128 CX0, UINT128 CY) { UINT128 CY36, CY51, CQ, A2, CX, CQT; UINT64 Q; int_double t64, d49, d60; double lx, ly, lq; if (!CX0.w[1] && !CY.w[1]) { pCQ->w[0] = CX0.w[0] / CY.w[0]; pCQ->w[1] = 0; pCR->w[1] = pCR->w[0] = 0; pCR->w[0] = CX0.w[0] - pCQ->w[0] * CY.w[0]; return; } CX.w[1] = CX0.w[1]; CX.w[0] = CX0.w[0]; // 2^64 t64.i = 0x43f0000000000000ull; lx = (double) CX.w[1] * t64.d + (double) CX.w[0]; ly = (double) CY.w[1] * t64.d + (double) CY.w[0]; lq = lx / ly; CY36.w[1] = CY.w[0] >> (64 - 36); CY36.w[0] = CY.w[0] << 36; CQ.w[1] = CQ.w[0] = 0; // Q >= 2^100 ? if (!CY.w[1] && !CY36.w[1] && (CX.w[1] >= CY36.w[0])) { // then Q >= 2^100 // 2^(-60)*CX/CY d60.i = 0x3c30000000000000ull; lq *= d60.d; Q = (UINT64) lq - 4ull; // Q*CY __mul_64x64_to_128 (A2, Q, CY.w[0]); // A2 <<= 60 A2.w[1] = (A2.w[1] << 60) | (A2.w[0] >> (64 - 60)); A2.w[0] <<= 60; __sub_128_128 (CX, CX, A2); lx = (double) CX.w[1] * t64.d + (double) CX.w[0]; lq = lx / ly; CQ.w[1] = Q >> (64 - 60); CQ.w[0] = Q << 60; } CY51.w[1] = (CY.w[1] << 51) | (CY.w[0] >> (64 - 51)); CY51.w[0] = CY.w[0] << 51; if (CY.w[1] < (UINT64) (1 << (64 - 51)) && (__unsigned_compare_gt_128 (CX, CY51))) { // Q > 2^51 // 2^(-49)*CX/CY d49.i = 0x3ce0000000000000ull; lq *= d49.d; Q = (UINT64) lq - 1ull; // Q*CY __mul_64x64_to_128 (A2, Q, CY.w[0]); A2.w[1] += Q * CY.w[1]; // A2 <<= 49 A2.w[1] = (A2.w[1] << 49) | (A2.w[0] >> (64 - 49)); A2.w[0] <<= 49; __sub_128_128 (CX, CX, A2); CQT.w[1] = Q >> (64 - 49); CQT.w[0] = Q << 49; __add_128_128 (CQ, CQ, CQT); lx = (double) CX.w[1] * t64.d + (double) CX.w[0]; lq = lx / ly; } Q = (UINT64) lq; __mul_64x64_to_128 (A2, Q, CY.w[0]); A2.w[1] += Q * CY.w[1]; __sub_128_128 (CX, CX, A2); if ((SINT64) CX.w[1] < 0) { Q--; CX.w[0] += CY.w[0]; if (CX.w[0] < CY.w[0]) CX.w[1]++; CX.w[1] += CY.w[1]; if ((SINT64) CX.w[1] < 0) { Q--; CX.w[0] += CY.w[0]; if (CX.w[0] < CY.w[0]) CX.w[1]++; CX.w[1] += CY.w[1]; } } else if (__unsigned_compare_ge_128 (CX, CY)) { Q++; __sub_128_128 (CX, CX, CY); } __add_128_64 (CQ, CQ, Q); pCQ->w[1] = CQ.w[1]; pCQ->w[0] = CQ.w[0]; pCR->w[1] = CX.w[1]; pCR->w[0] = CX.w[0]; return; } __BID_INLINE__ void __div_256_by_128 (UINT128 * pCQ, UINT256 * pCA4, UINT128 CY) { UINT256 CA4, CA2, CY51, CY36; UINT128 CQ, A2, A2h, CQT; UINT64 Q, carry64; int_double t64, d49, d60; double lx, ly, lq, d128, d192; // the quotient is assumed to be at most 113 bits, // as needed by BID128 divide routines // initial dividend CA4.w[3] = (*pCA4).w[3]; CA4.w[2] = (*pCA4).w[2]; CA4.w[1] = (*pCA4).w[1]; CA4.w[0] = (*pCA4).w[0]; CQ.w[1] = (*pCQ).w[1]; CQ.w[0] = (*pCQ).w[0]; // 2^64 t64.i = 0x43f0000000000000ull; d128 = t64.d * t64.d; d192 = d128 * t64.d; lx = (double) CA4.w[3] * d192 + ((double) CA4.w[2] * d128 + ((double) CA4.w[1] * t64.d + (double) CA4.w[0])); ly = (double) CY.w[1] * t64.d + (double) CY.w[0]; lq = lx / ly; CY36.w[2] = CY.w[1] >> (64 - 36); CY36.w[1] = (CY.w[1] << 36) | (CY.w[0] >> (64 - 36)); CY36.w[0] = CY.w[0] << 36; CQ.w[1] = (*pCQ).w[1]; CQ.w[0] = (*pCQ).w[0]; // Q >= 2^100 ? if (CA4.w[3] > CY36.w[2] || (CA4.w[3] == CY36.w[2] && (CA4.w[2] > CY36.w[1] || (CA4.w[2] == CY36.w[1] && CA4.w[1] >= CY36.w[0])))) { // 2^(-60)*CA4/CY d60.i = 0x3c30000000000000ull; lq *= d60.d; Q = (UINT64) lq - 4ull; // Q*CY __mul_64x128_to_192 (CA2, Q, CY); // CA2 <<= 60 // CA2.w[3] = CA2.w[2] >> (64-60); CA2.w[2] = (CA2.w[2] << 60) | (CA2.w[1] >> (64 - 60)); CA2.w[1] = (CA2.w[1] << 60) | (CA2.w[0] >> (64 - 60)); CA2.w[0] <<= 60; // CA4 -= CA2 __sub_borrow_out (CA4.w[0], carry64, CA4.w[0], CA2.w[0]); __sub_borrow_in_out (CA4.w[1], carry64, CA4.w[1], CA2.w[1], carry64); CA4.w[2] = CA4.w[2] - CA2.w[2] - carry64; lx = ((double) CA4.w[2] * d128 + ((double) CA4.w[1] * t64.d + (double) CA4.w[0])); lq = lx / ly; CQT.w[1] = Q >> (64 - 60); CQT.w[0] = Q << 60; __add_128_128 (CQ, CQ, CQT); } CY51.w[2] = CY.w[1] >> (64 - 51); CY51.w[1] = (CY.w[1] << 51) | (CY.w[0] >> (64 - 51)); CY51.w[0] = CY.w[0] << 51; if (CA4.w[2] > CY51.w[2] || ((CA4.w[2] == CY51.w[2]) && (__unsigned_compare_gt_128 (CA4, CY51)))) { // Q > 2^51 // 2^(-49)*CA4/CY d49.i = 0x3ce0000000000000ull; lq *= d49.d; Q = (UINT64) lq - 1ull; // Q*CY __mul_64x64_to_128 (A2, Q, CY.w[0]); __mul_64x64_to_128 (A2h, Q, CY.w[1]); A2.w[1] += A2h.w[0]; if (A2.w[1] < A2h.w[0]) A2h.w[1]++; // A2 <<= 49 CA2.w[2] = (A2h.w[1] << 49) | (A2.w[1] >> (64 - 49)); CA2.w[1] = (A2.w[1] << 49) | (A2.w[0] >> (64 - 49)); CA2.w[0] = A2.w[0] << 49; __sub_borrow_out (CA4.w[0], carry64, CA4.w[0], CA2.w[0]); __sub_borrow_in_out (CA4.w[1], carry64, CA4.w[1], CA2.w[1], carry64); CA4.w[2] = CA4.w[2] - CA2.w[2] - carry64; CQT.w[1] = Q >> (64 - 49); CQT.w[0] = Q << 49; __add_128_128 (CQ, CQ, CQT); lx = ((double) CA4.w[2] * d128 + ((double) CA4.w[1] * t64.d + (double) CA4.w[0])); lq = lx / ly; } Q = (UINT64) lq; __mul_64x64_to_128 (A2, Q, CY.w[0]); A2.w[1] += Q * CY.w[1]; __sub_128_128 (CA4, CA4, A2); if ((SINT64) CA4.w[1] < 0) { Q--; CA4.w[0] += CY.w[0]; if (CA4.w[0] < CY.w[0]) CA4.w[1]++; CA4.w[1] += CY.w[1]; if ((SINT64) CA4.w[1] < 0) { Q--; CA4.w[0] += CY.w[0]; if (CA4.w[0] < CY.w[0]) CA4.w[1]++; CA4.w[1] += CY.w[1]; } } else if (__unsigned_compare_ge_128 (CA4, CY)) { Q++; __sub_128_128 (CA4, CA4, CY); } __add_128_64 (CQ, CQ, Q); pCQ->w[1] = CQ.w[1]; pCQ->w[0] = CQ.w[0]; pCA4->w[1] = CA4.w[1]; pCA4->w[0] = CA4.w[0]; return; } #endif #endif libdfp-1.0.17/libbid/bid_dpd.c000066400000000000000000000514331504475242000160270ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define DECNUMDIGITS 34 // work with up to 34 digits #include "bid_internal.h" #include "bid_b2d.h" UINT32 bid_to_bid32 (UINT32 ba) { UINT32 res; UINT32 sign, comb, exp; UINT32 trailing; UINT32 bcoeff; sign = (ba & 0x80000000ul); comb = (ba & 0x7ff00000ul) >> 20; trailing = (ba & 0x000ffffful); if ((comb & 0x780) == 0x780) { ba &= 0xfff0000ul; return ba; } else { if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0xff; bcoeff = ((8 + (comb & 1)) << 20) | trailing; } else { exp = (comb >> 3) & 0xff; bcoeff = ((comb & 7) << 20) | trailing; } if (bcoeff >= 10000000) bcoeff = 0; res = very_fast_get_BID32 (sign, exp, bcoeff); } return res; } UINT64 bid_to_bid64 (UINT64 ba) { UINT64 res; UINT64 sign, comb, exp; UINT64 trailing; UINT64 bcoeff; sign = (ba & 0x8000000000000000ull); comb = (ba & 0x7ffc000000000000ull) >> 50; trailing = (ba & 0x0003ffffffffffffull); if ((comb & 0x1e00) == 0x1e00) { ba &= 0xfff000000000000ULL; return ba; } else { if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0x3ff; bcoeff = ((8 + (comb & 1)) << 50) | trailing; } else { exp = (comb >> 3) & 0x3ff; bcoeff = ((comb & 7) << 50) | trailing; } if (bcoeff >= 10000000000000000ull) bcoeff = 0ull; res = very_fast_get_BID64 (sign, exp, bcoeff); } return res; } #if DECIMAL_CALL_BY_REFERENCE void bid_to_dpd32 (UINT32 * pres, UINT32 * pba) { UINT32 ba = *pba; #else UINT32 bid_to_dpd32 (UINT32 ba) { #endif UINT32 res; UINT32 sign, comb, exp, trailing; UINT32 b0, b1, b2; UINT32 bcoeff, dcoeff; UINT32 nanb = 0; sign = (ba & 0x80000000); comb = (ba & 0x7ff00000) >> 20; trailing = (ba & 0xfffff); // Detect infinity, and return canonical infinity if ((comb & 0x7c0) == 0x780) { res = sign | 0x78000000; BID_RETURN (res); // Detect NaN, and canonicalize trailing } else if ((comb & 0x7c0) == 0x7c0) { if (trailing > 999999) trailing = 0; nanb = ba & 0xfe000000; exp = 0; bcoeff = trailing; } else { // Normal number if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0xff; bcoeff = ((8 + (comb & 1)) << 20) | trailing; } else { exp = (comb >> 3) & 0xff; bcoeff = ((comb & 7) << 20) | trailing; } // Zero the coefficient if non-canonical (>= 10^7) if (bcoeff >= 10000000) bcoeff = 0; } b0 = bcoeff / 1000000; b1 = (bcoeff / 1000) % 1000; b2 = bcoeff % 1000; dcoeff = (b2d[b1] << 10) | b2d[b2]; if (b0 >= 8) // is b0 8 or 9? res = sign | ((0x600 | ((exp >> 6) << 7) | ((b0 & 1) << 6) | (exp & 0x3f)) << 20) | dcoeff; else // else b0 is 0..7 res = sign | ((((exp >> 6) << 9) | (b0 << 6) | (exp & 0x3f)) << 20) | dcoeff; res |= nanb; BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid_to_dpd64 (UINT64 * pres, UINT64 * pba) { UINT64 ba = *pba; #else UINT64 bid_to_dpd64 (UINT64 ba) { #endif UINT64 res; UINT64 sign, comb, exp; UINT64 trailing; UINT32 b0, b1, b2, b3, b4, b5; UINT64 bcoeff; UINT64 dcoeff; UINT32 yhi, ylo; UINT64 nanb = 0; //printf("arg bid "FMT_LLX16" \n", ba); sign = (ba & 0x8000000000000000ull); comb = (ba & 0x7ffc000000000000ull) >> 50; trailing = (ba & 0x0003ffffffffffffull); // Detect infinity, and return canonical infinity if ((comb & 0x1f00) == 0x1e00) { res = sign | 0x7800000000000000ull; BID_RETURN (res); // Detect NaN, and canonicalize trailing } else if ((comb & 0x1e00) == 0x1e00) { if (trailing > 999999999999999ull) trailing = 0; nanb = ba & 0xfe00000000000000ull; exp = 0; bcoeff = trailing; } else { // Normal number if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0x3ff; bcoeff = ((8 + (comb & 1)) << 50) | trailing; } else { exp = (comb >> 3) & 0x3ff; bcoeff = ((comb & 7) << 50) | trailing; } // Zero the coefficient if it is non-canonical (>= 10^16) if (bcoeff >= 10000000000000000ull) bcoeff = 0; } // Floor(2^61 / 10^9) #define D61 (2305843009ull) // Multipy the binary coefficient by ceil(2^64 / 1000), and take the upper // 64-bits in order to compute a division by 1000. #if 1 yhi = ((UINT64) D61 * (UINT64) (UINT32) (bcoeff >> (UINT64) 27)) >> (UINT64) 34; ylo = bcoeff - 1000000000ull * yhi; if (ylo >= 1000000000) { ylo = ylo - 1000000000; yhi = yhi + 1; } #else yhi = bcoeff / 1000000000ull; ylo = bcoeff % 1000000000ull; #endif // yhi = ABBBCCC ylo = DDDEEEFFF b5 = ylo % 1000; // b5 = FFF b3 = ylo / 1000000; // b3 = DDD b4 = (ylo / 1000) - (1000 * b3); // b4 = EEE b2 = yhi % 1000; // b2 = CCC b0 = yhi / 1000000; // b0 = A b1 = (yhi / 1000) - (1000 * b0); // b1 = BBB dcoeff = b2d[b5] | b2d2[b4] | b2d3[b3] | b2d4[b2] | b2d5[b1]; if (b0 >= 8) // is b0 8 or 9? res = sign | ((0x1800 | ((exp >> 8) << 9) | ((b0 & 1) << 8) | (exp & 0xff)) << 50) | dcoeff; else // else b0 is 0..7 res = sign | ((((exp >> 8) << 11) | (b0 << 8) | (exp & 0xff)) << 50) | dcoeff; res |= nanb; BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void dpd_to_bid32 (UINT32 * pres, UINT32 * pda) { UINT32 da = *pda; #else UINT32 dpd_to_bid32 (UINT32 da) { #endif UINT32 in = *(UINT32 *) & da; UINT32 res; UINT32 sign, comb, exp; UINT32 trailing; UINT32 d0 = 0, d1, d2; UINT64 bcoeff; UINT32 nanb = 0; sign = (in & 0x80000000); comb = (in & 0x7ff00000) >> 20; trailing = (in & 0x000fffff); if ((comb & 0x7e0) == 0x780) { // G0..G4 = 1111 -> Inf res = in & 0xf8000000; BID_RETURN (res); } else if ((comb & 0x7c0) == 0x7c0) { // G0..G5 = 11111 -> NaN nanb = in & 0xfe000000; exp = 0; } else { // Normal number if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> d0 = 8 + G4 d0 = ((comb >> 6) & 1) | 8; exp = ((comb & 0x180) >> 1) | (comb & 0x3f); } else { d0 = (comb >> 6) & 0x7; exp = ((comb & 0x600) >> 3) | (comb & 0x3f); } } d1 = d2b2[(trailing >> 10) & 0x3ff]; d2 = d2b[(trailing) & 0x3ff]; bcoeff = d2 + d1 + (1000000 * d0); if (bcoeff < 0x800000) { res = (exp << 23) | bcoeff | sign; } else { res = (exp << 21) | sign | 0x60000000 | (bcoeff & 0x1fffff); } res |= nanb; BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void dpd_to_bid64 (UINT64 * pres, UINT64 * pda) { UINT64 da = *pda; #else UINT64 dpd_to_bid64 (UINT64 da) { #endif UINT64 in = *(UINT64 *) & da; UINT64 res; UINT64 sign, comb, exp; UINT64 trailing; // UINT64 d0, d1, d2, d3, d4, d5; UINT64 d1, d2; UINT32 d0, d3, d4, d5; UINT64 bcoeff; UINT64 nanb = 0; //printf("arg dpd "FMT_LLX16" \n", in); sign = (in & 0x8000000000000000ull); comb = (in & 0x7ffc000000000000ull) >> 50; trailing = (in & 0x0003ffffffffffffull); if ((comb & 0x1f00) == 0x1e00) { // G0..G4 = 1111 -> Inf res = in & 0xf800000000000000ull; BID_RETURN (res); } else if ((comb & 0x1f00) == 0x1f00) { // G0..G5 = 11111 -> NaN nanb = in & 0xfe00000000000000ull; exp = 0; d0 = 0; } else { // Normal number if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> d0 = 8 + G4 d0 = ((comb >> 8) & 1) | 8; // d0 = (comb & 0x0100 ? 9 : 8); exp = (comb & 0x600) >> 1; // exp = (comb & 0x0400 ? 1 : 0) * 0x200 + (comb & 0x0200 ? 1 : 0) * 0x100; // exp leading bits are G2..G3 } else { d0 = (comb >> 8) & 0x7; exp = (comb & 0x1800) >> 3; // exp = (comb & 0x1000 ? 1 : 0) * 0x200 + (comb & 0x0800 ? 1 : 0) * 0x100; // exp loading bits are G0..G1 } } d1 = d2b5[(trailing >> 40) & 0x3ff]; d2 = d2b4[(trailing >> 30) & 0x3ff]; d3 = d2b3[(trailing >> 20) & 0x3ff]; d4 = d2b2[(trailing >> 10) & 0x3ff]; d5 = d2b[(trailing) & 0x3ff]; bcoeff = (d5 + d4 + d3) + d2 + d1 + (1000000000000000ull * d0); exp += (comb & 0xff); res = very_fast_get_BID64 (sign, exp, bcoeff); res |= nanb; BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid_to_dpd128 (UINT128 * pres, UINT128 * pba) { UINT128 ba = *pba; #else UINT128 bid_to_dpd128 (UINT128 ba) { #endif UINT128 res; UINT128 sign; UINT32 comb, exp; UINT128 trailing; UINT128 d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11; UINT128 bcoeff; UINT128 dcoeff; UINT64 nanb = 0; sign.w[1] = (ba.w[HIGH_128W] & 0x8000000000000000ull); sign.w[0] = 0; comb = (ba.w[HIGH_128W] & 0x7fffc00000000000ull) >> 46; trailing.w[1] = (ba.w[HIGH_128W] & 0x00003fffffffffffull); trailing.w[0] = ba.w[LOW_128W]; exp = 0; if ((comb & 0x1f000) == 0x1e000) { // G0..G4 = 1111 -> Inf res.w[HIGH_128W] = ba.w[HIGH_128W] & 0xf800000000000000ull; res.w[LOW_128W] = 0; BID_RETURN (res); // Detect NaN, and canonicalize trailing } else if ((comb & 0x1f000) == 0x1f000) { if ((trailing.w[1] > 0x0000314dc6448d93ULL) || // significand is non-canonical ((trailing.w[1] == 0x0000314dc6448d93ULL) && (trailing.w[0] >= 0x38c15b0a00000000ULL)) // significand is non-canonical ) { trailing.w[1] = trailing.w[0] = 0ull; } bcoeff.w[1] = trailing.w[1]; bcoeff.w[0] = trailing.w[0]; nanb = ba.w[HIGH_128W] & 0xfe00000000000000ull; exp = 0; } else { // Normal number if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0x3fff; bcoeff.w[1] = ((UINT64) (8 + (comb & 1)) << (UINT64) 46) | trailing.w[1]; bcoeff.w[0] = trailing.w[0]; } else { exp = (comb >> 3) & 0x3fff; bcoeff.w[1] = ((UINT64) (comb & 7) << (UINT64) 46) | trailing.w[1]; bcoeff.w[0] = trailing.w[0]; } // Zero the coefficient if non-canonical (>= 10^34) if (bcoeff.w[1] > 0x1ed09bead87c0ull || (bcoeff.w[1] == 0x1ed09bead87c0ull && bcoeff.w[0] >= 0x378D8E6400000000ull)) { bcoeff.w[0] = bcoeff.w[1] = 0; } } // Constant 2^128 / 1000 + 1 { UINT128 t; UINT64 t2; UINT128 d1000; UINT128 b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1; d1000.w[1] = 0x4189374BC6A7EFull; d1000.w[0] = 0x9DB22D0E56041894ull; __mul_128x128_high (b11, bcoeff, d1000); __mul_128x128_high (b10, b11, d1000); __mul_128x128_high (b9, b10, d1000); __mul_128x128_high (b8, b9, d1000); __mul_128x128_high (b7, b8, d1000); __mul_128x128_high (b6, b7, d1000); __mul_128x128_high (b5, b6, d1000); __mul_128x128_high (b4, b5, d1000); __mul_128x128_high (b3, b4, d1000); __mul_128x128_high (b2, b3, d1000); __mul_128x128_high (b1, b2, d1000); __mul_64x128_full (t2, t, 1000ull, b11); __sub_128_128 (d11, bcoeff, t); __mul_64x128_full (t2, t, 1000ull, b10); __sub_128_128 (d10, b11, t); __mul_64x128_full (t2, t, 1000ull, b9); __sub_128_128 (d9, b10, t); __mul_64x128_full (t2, t, 1000ull, b8); __sub_128_128 (d8, b9, t); __mul_64x128_full (t2, t, 1000ull, b7); __sub_128_128 (d7, b8, t); __mul_64x128_full (t2, t, 1000ull, b6); __sub_128_128 (d6, b7, t); __mul_64x128_full (t2, t, 1000ull, b5); __sub_128_128 (d5, b6, t); __mul_64x128_full (t2, t, 1000ull, b4); __sub_128_128 (d4, b5, t); __mul_64x128_full (t2, t, 1000ull, b3); __sub_128_128 (d3, b4, t); __mul_64x128_full (t2, t, 1000ull, b2); __sub_128_128 (d2, b3, t); __mul_64x128_full (t2, t, 1000ull, b1); __sub_128_128 (d1, b2, t); d0 = b1; } dcoeff.w[0] = b2d[d11.w[0]] | (b2d[d10.w[0]] << 10) | (b2d[d9.w[0]] << 20) | (b2d[d8.w[0]] << 30) | (b2d[d7.w[0]] << 40) | (b2d[d6.w[0]] << 50) | (b2d[d5.w[0]] << 60); dcoeff.w[1] = (b2d[d5.w[0]] >> 4) | (b2d[d4.w[0]] << 6) | (b2d[d3.w[0]] << 16) | (b2d[d2.w[0]] << 26) | (b2d[d1.w[0]] << 36); res.w[0] = dcoeff.w[0]; if (d0.w[0] >= 8) { res.w[1] = sign. w[1] | ((0x18000 | ((exp >> 12) << 13) | ((d0.w[0] & 1) << 12) | (exp & 0xfff)) << 46) | dcoeff.w[1]; } else { res.w[1] = sign. w[1] | ((((exp >> 12) << 15) | (d0.w[0] << 12) | (exp & 0xfff)) << 46) | dcoeff.w[1]; } res.w[1] |= nanb; BID_SWAP128 (res); BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void dpd_to_bid128 (UINT128 * pres, UINT128 * pda) { UINT128 da = *pda; #else UINT128 dpd_to_bid128 (UINT128 da) { #endif UINT128 in = *(UINT128 *) & da; UINT128 res; UINT128 sign; UINT64 exp, comb; UINT128 trailing; UINT64 d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11; UINT128 bcoeff; UINT64 tl, th; UINT64 nanb = 0; sign.w[1] = (in.w[HIGH_128W] & 0x8000000000000000ull); sign.w[0] = 0; comb = (in.w[HIGH_128W] & 0x7fffc00000000000ull) >> 46; trailing.w[1] = (in.w[HIGH_128W] & 0x00003fffffffffffull); trailing.w[0] = in.w[LOW_128W]; exp = 0; if ((comb & 0x1f000) == 0x1e000) { // G0..G4 = 1111 -> Inf res.w[HIGH_128W] = in.w[HIGH_128W] & 0xf800000000000000ull; res.w[LOW_128W] = 0ull; BID_RETURN (res); } else if ((comb & 0x1f000) == 0x1f000) { // G0..G4 = 11111 -> NaN nanb = in.w[HIGH_128W] & 0xfe00000000000000ull; exp = 0; d0 = 0; } else { // Normal number if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> d0 = 8 + G4 d0 = 8 + (comb & 0x01000 ? 1 : 0); exp = (comb & 0x04000 ? 1 : 0) * 0x2000 + (comb & 0x02000 ? 1 : 0) * 0x1000; // exp leading bits are G2..G3 } else { d0 = 4 * (comb & 0x04000 ? 1 : 0) + 2 * (comb & 0x2000 ? 1 : 0) + (comb & 0x1000 ? 1 : 0); exp = (comb & 0x10000 ? 1 : 0) * 0x2000 + (comb & 0x08000 ? 1 : 0) * 0x1000; // exp loading bits are G0..G1 } } d11 = d2b[(trailing.w[0]) & 0x3ff]; d10 = d2b[(trailing.w[0] >> 10) & 0x3ff]; d9 = d2b[(trailing.w[0] >> 20) & 0x3ff]; d8 = d2b[(trailing.w[0] >> 30) & 0x3ff]; d7 = d2b[(trailing.w[0] >> 40) & 0x3ff]; d6 = d2b[(trailing.w[0] >> 50) & 0x3ff]; d5 = d2b[(trailing.w[0] >> 60) | ((trailing.w[1] & 0x3f) << 4)]; d4 = d2b[(trailing.w[1] >> 6) & 0x3ff]; d3 = d2b[(trailing.w[1] >> 16) & 0x3ff]; d2 = d2b[(trailing.w[1] >> 26) & 0x3ff]; d1 = d2b[(trailing.w[1] >> 36) & 0x3ff]; tl = d11 + (d10 * 1000ull) + (d9 * 1000000ull) + (d8 * 1000000000ull) + (d7 * 1000000000000ull) + (d6 * 1000000000000000ull); th = d5 + (d4 * 1000ull) + (d3 * 1000000ull) + (d2 * 1000000000ull) + (d1 * 1000000000000ull) + (d0 * 1000000000000000ull); __mul_64x64_to_128 (bcoeff, th, 1000000000000000000ull); __add_128_64 (bcoeff, bcoeff, tl); if (!nanb) exp += (comb & 0xfff); res.w[0] = bcoeff.w[0]; res.w[1] = (exp << 49) | sign.w[1] | bcoeff.w[1]; res.w[1] |= nanb; BID_SWAP128 (res); BID_RETURN (res); } UINT128 bid_to_bid128 (UINT128 bq) { UINT128 res; UINT64 sign, comb, exp; UINT64 trailing; UINT64 bcoeff; UINT128 rq; UINT128 qcoeff; UINT64 ba, bb; ba = *((UINT64 *) & bq + HIGH_128W); bb = *((UINT64 *) & bq + LOW_128W); sign = (ba & 0x8000000000000000ull); comb = (ba & 0x7fffc00000000000ull) >> 46; trailing = (ba & 0x00003fffffffffffull); if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0x3fff; bcoeff = ((8 + (comb & 1)) << 46) | trailing; } else { exp = (comb >> 3) & 0x3fff; bcoeff = ((comb & 7) << 46) | trailing; } if ((comb & 0x1f000) == 0x1f000) { //NaN ba &= 0xfe003fffffffffffULL; // make exponent 0 bcoeff &= 0x00003fffffffffffull; // NaN payloat is only T. if ((bcoeff > 0x0000314dc6448d93ULL) || // significand is non-canonical ((bcoeff == 0x0000314dc6448d93ULL) && (bb >= 0x38c15b0a00000000ULL)) // significand is non-canonical ) { bcoeff = 0ull; ba &= ~0x00003fffffffffffull; bb = 0ull; } *((UINT64 *) & rq + HIGH_128W) = ba; *((UINT64 *) & rq + LOW_128W) = bb; return rq; } else if ((comb & 0x1e000) == 0x1e000) { //Inf ba &= 0xf800000000000000ULL; // make exponent and significand 0 bb = 0; *((UINT64 *) & rq + HIGH_128W) = ba; *((UINT64 *) & rq + LOW_128W) = bb; return rq; } if ((bcoeff > 0x0001ed09bead87c0ull) || ((bcoeff == 0x0001ed09bead87c0ull) && (bb > 0x378d8e63ffffffffull))) { // significand is non-canonical bcoeff = 0ull; bb = 0ull; } *((UINT64 *) & qcoeff + 1) = bcoeff; *((UINT64 *) & qcoeff + 0) = bb; get_BID128_fast (&res, sign, exp, qcoeff); BID_SWAP128 (res); return res; } UINT32 bid32_canonize (UINT32 ba) { FPSC bidrnd; unsigned int rnd = 0; UINT32 res; UINT32 sign, comb, exp; UINT32 trailing; UINT32 bcoeff; sign = (ba & 0x80000000); comb = (ba & 0x7ff00000) >> 20; trailing = (ba & 0x000fffff); if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0xff; bcoeff = ((8 + (comb & 1)) << 20) | trailing; } else { exp = (comb >> 3) & 0xff; bcoeff = ((comb & 7) << 20) | trailing; } if ((comb & 0x7c0) == 0x7c0) { //NaN ba &= 0xfe0fffff; // make exponent 0 bcoeff &= 0x000fffff; // NaN payloat is only T. if (bcoeff >= 1000000) ba &= 0xfff00000; //treat non-canonical significand return ba; } else if ((comb & 0x780) == 0x780) { //Inf ba &= 0xf8000000; // make exponent and significand 0 return ba; } if (bcoeff >= 10000000) bcoeff = 0; rnd = bidrnd = ROUNDING_TO_NEAREST; res = get_BID32 (sign, exp, bcoeff, rnd, &bidrnd); return res; } UINT64 bid64_canonize (UINT64 ba) { UINT64 res; UINT64 sign, comb, exp; UINT64 trailing; UINT64 bcoeff; sign = (ba & 0x8000000000000000ull); comb = (ba & 0x7ffc000000000000ull) >> 50; trailing = (ba & 0x0003ffffffffffffull); if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0x3ff; bcoeff = ((8 + (comb & 1)) << 50) | trailing; } else { exp = (comb >> 3) & 0x3ff; bcoeff = ((comb & 7) << 50) | trailing; } if ((comb & 0x1f00) == 0x1f00) { //NaN ba &= 0xfe03ffffffffffffULL; // make exponent 0 bcoeff &= 0x0003ffffffffffffull; // NaN payloat is only T. if (bcoeff >= 1000000000000000ull) ba &= 0xfe00000000000000ull; // treat non canonical significand and zero G6-G12 return ba; } else if ((comb & 0x1e00) == 0x1e00) { //Inf ba &= 0xf800000000000000ULL; // make exponent and significand 0 return ba; } if (bcoeff >= 10000000000000000ull) { bcoeff = 0ull; } res = very_fast_get_BID64 (sign, exp, bcoeff); return res; } UINT128 bid128_canonize (UINT128 bq) { UINT128 res; UINT64 sign, comb, exp; UINT64 trailing; UINT64 bcoeff; UINT128 rq; UINT128 qcoeff; UINT64 ba, bb; ba = *((UINT64 *) & bq + HIGH_128W); bb = *((UINT64 *) & bq + LOW_128W); sign = (ba & 0x8000000000000000ull); comb = (ba & 0x7fffc00000000000ull) >> 46; trailing = (ba & 0x00003fffffffffffull); if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> exp is G2..G11 exp = (comb >> 1) & 0x3fff; bcoeff = ((8 + (comb & 1)) << 46) | trailing; } else { exp = (comb >> 3) & 0x3fff; bcoeff = ((comb & 7) << 46) | trailing; } if ((comb & 0x1f000) == 0x1f000) { //NaN ba &= 0xfe003fffffffffffULL; // make exponent 0 bcoeff &= 0x00003fffffffffffull; // NaN payload is only T. if ((bcoeff > 0x0000314dc6448d93ULL) || // significand is non-canonical ((bcoeff == 0x0000314dc6448d93ULL) && (bb >= 0x38c15b0a00000000ULL)) // significand is non-canonical ) { bcoeff = 0ull; ba &= ~0x00003fffffffffffull; bb = 0ull; } *((UINT64 *) & rq + HIGH_128W) = ba; *((UINT64 *) & rq + LOW_128W) = bb; return rq; } else if ((comb & 0x1e000) == 0x1e000) { //Inf ba &= 0xf800000000000000ULL; // make exponent and significand 0 bb = 0; *((UINT64 *) & rq + HIGH_128W) = ba; *((UINT64 *) & rq + LOW_128W) = bb; return rq; } if ((bcoeff > 0x0001ed09bead87c0ull) || // significand is non-canonical ((bcoeff == 0x0001ed09bead87c0ull) && (bb > 0x378d8e63ffffffffull)) // significand is non-canonical ) { bcoeff = 0ull; bb = 0ull; } *((UINT64 *) & qcoeff + 1) = bcoeff; *((UINT64 *) & qcoeff + 0) = bb; get_BID128_fast (&res, sign, exp, qcoeff); BID_SWAP128 (res); return res; } libdfp-1.0.17/libbid/bid_flag_operations.c000066400000000000000000000303561504475242000204350ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * Non-computational Operations on Flags: ****************************************************************************/ #include "bid_internal.h" // Note the following definitions from bid_conf.h: if the status flags are // global, they have a fixed name recognized by the library functions: // _IDEC_glbflags; pfpsf, defined as &_IDEC_glbflags, can be used instead; no // argument is passed for the status flags to the library functions; if the // status flags are local then they are passed as an arument, always by // reference, to the library functions // // #if !DECIMAL_GLOBAL_EXCEPTION_FLAGS // #define _EXC_FLAGS_PARAM , _IDEC_flags *pfpsf // #else // extern _IDEC_flags _IDEC_glbflags; // #define _EXC_FLAGS_PARAM // #define pfpsf &_IDEC_glbflags // #endif #if DECIMAL_CALL_BY_REFERENCE void signalException (_IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) { // *pflagsmask is the logical OR of the flags to be set, e.g. // *pflagsmask =INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to set all five IEEE 754R // exception flags *pfpsf = *pfpsf | (*pflagsmask & BID_IEEE_FLAGS); } #else void signalException (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) { // flagsmask is the logical OR of the flags to be set, e.g. // flagsmask = INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to set all five IEEE 754R // exception flags *pfpsf = *pfpsf | (flagsmask & BID_IEEE_FLAGS); } #endif #if DECIMAL_CALL_BY_REFERENCE void lowerFlags (_IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) { // *pflagsmask is the logical OR of the flags to be cleared, e.g. // *pflagsmask =INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to clear all five IEEE 754R // exception flags *pfpsf = *pfpsf & ~(*pflagsmask & BID_IEEE_FLAGS); } #else void lowerFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) { // flagsmask is the logical OR of the flags to be cleared, e.g. // flagsmask = INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to clear all five IEEE 754R // exception flags *pfpsf = *pfpsf & ~(flagsmask & BID_IEEE_FLAGS); } #endif #if DECIMAL_CALL_BY_REFERENCE void testFlags (_IDEC_flags * praised, _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) { // *praised is a pointer to the result, i.e. the logical OR of the flags // selected by *pflagsmask that are set; e.g. if // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION // and only the invalid and inexact flags are raised (set) then upon return // *praised = INVALID_EXCEPTION | INEXACT_EXCEPTION *praised = *pfpsf & (*pflagsmask & BID_IEEE_FLAGS); } #else _IDEC_flags testFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) { _IDEC_flags raised; // the raturn value raised is the logical OR of the flags // selected by flagsmask, that are set; e.g. if // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION and // only the invalid and inexact flags are raised (set) then the return value // is raised = INVALID_EXCEPTION | INEXACT_EXCEPTION raised = *pfpsf & (flagsmask & BID_IEEE_FLAGS); return (raised); } #endif #if DECIMAL_CALL_BY_REFERENCE void testSavedFlags (_IDEC_flags * praised, _IDEC_flags * psavedflags, _IDEC_flags * pflagsmask) { // *praised is a pointer to the result, i.e. the logical OR of the flags // selected by *pflagsmask that are set in *psavedflags; e.g. if // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION // and only the invalid and inexact flags are raised (set) in *psavedflags // then upon return *praised = INVALID_EXCEPTION | INEXACT_EXCEPTION // Note that the flags could be saved in a global variable, but this function // would still expect that value as an argument passed by reference *praised = *psavedflags & (*pflagsmask & BID_IEEE_FLAGS); } #else _IDEC_flags testSavedFlags (_IDEC_flags savedflags, _IDEC_flags flagsmask) { _IDEC_flags raised; // the raturn value raised is the logical OR of the flags // selected by flagsmask, that are set in savedflags; e.g. if // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION and // only the invalid and inexact flags are raised (set) in savedflags // then the return value is raised = INVALID_EXCEPTION | INEXACT_EXCEPTION // Note that the flags could be saved in a global variable, but this function // would still expect that value as an argument passed by value raised = savedflags & (flagsmask & BID_IEEE_FLAGS); return (raised); } #endif #if DECIMAL_CALL_BY_REFERENCE void restoreFlags (_IDEC_flags * pflagsvalues, _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) { // restore the status flags selected by *pflagsmask to the values speciafied // (as a logical OR) in *pflagsvalues; e.g. if // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION // and only the invalid and inexact flags are raised (set) in *pflagsvalues // then upon return the invalid status flag will be set, the underflow status // flag will be clear, and the inexact status flag will be set *pfpsf = *pfpsf & ~(*pflagsmask & BID_IEEE_FLAGS); // clear flags that have to be restored *pfpsf = *pfpsf | (*pflagsvalues & (*pflagsmask & BID_IEEE_FLAGS)); // restore flags } #else void restoreFlags (_IDEC_flags flagsvalues, _IDEC_flags flagsmask _EXC_FLAGS_PARAM) { // restore the status flags selected by flagsmask to the values speciafied // (as a logical OR) in flagsvalues; e.g. if // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION // and only the invalid and inexact flags are raised (set) in flagsvalues // then upon return the invalid status flag will be set, the underflow status // flag will be clear, and the inexact status flag will be set *pfpsf = *pfpsf & ~(flagsmask & BID_IEEE_FLAGS); // clear flags that have to be restored *pfpsf = *pfpsf | (flagsvalues & (flagsmask & BID_IEEE_FLAGS)); // restore flags } #endif #if DECIMAL_CALL_BY_REFERENCE void saveFlags (_IDEC_flags * pflagsvalues, _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) { // return in *pflagsvalues the status flags specified (as a logical OR) in // *pflagsmask; e.g. if // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION // and only the invalid and inexact flags are raised (set) in the status word, // then upon return the value in *pflagsvalues will have the invalid status // flag set, the underflow status flag clear, and the inexact status flag set *pflagsvalues = *pfpsf & (*pflagsmask & BID_IEEE_FLAGS); } #else _IDEC_flags saveFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) { _IDEC_flags flagsvalues; // return the status flags specified (as a logical OR) in flagsmask; e.g. if // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION // and only the invalid and inexact flags are raised (set) in the status word, // then the return value will have the invalid status flag set, the // underflow status flag clear, and the inexact status flag set flagsvalues = *pfpsf & (flagsmask & BID_IEEE_FLAGS); return (flagsvalues); } #endif // Note the following definitions from bid_conf.h (rearranged): if the rounding // mode is global, it has a fixed name recognized by the library functions: // _IDEC_glbround; rnd_mode, defined as &_IDEC_glbround, can be used instead; no // argument is passed for the rounding mode to the library functions; if the // rounding mode is local then it is passed as an arument, by reference or by // value, to the library functions // // #if DECIMAL_CALL_BY_REFERENCE // #if !DECIMAL_GLOBAL_ROUNDING // #define _RND_MODE_PARAM , _IDEC_round *prnd_mode // #else // #define _RND_MODE_PARAM // #define rnd_mode _IDEC_glbround // #endif // #else // #if !DECIMAL_GLOBAL_ROUNDING // #define _RND_MODE_PARAM , _IDEC_round rnd_mode // #else // #define _RND_MODE_PARAM // #define rnd_mode _IDEC_glbround // #endif // #endif #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING // #define _RND_MODE_PARAM , _IDEC_round *prnd_mode void getDecimalRoundingDirection (_IDEC_round * rounding_mode _RND_MODE_PARAM) { // returns the current rounding mode *rounding_mode = *prnd_mode; } #else // #define _RND_MODE_PARAM // #define rnd_mode _IDEC_glbround void getDecimalRoundingDirection (_IDEC_round * rounding_mode _RND_MODE_PARAM) { // returns the current rounding mode *rounding_mode = rnd_mode; } #endif #else #if !DECIMAL_GLOBAL_ROUNDING // #define _RND_MODE_PARAM , _IDEC_round rnd_mode _IDEC_round getDecimalRoundingDirection (_IDEC_round rnd_mode) { // returns the current rounding mode return (rnd_mode); } #else // #define _RND_MODE_PARAM // #define rnd_mode _IDEC_glbround _IDEC_round getDecimalRoundingDirection (void) { // returns the current rounding mode return (rnd_mode); } #endif #endif #if DECIMAL_CALL_BY_REFERENCE #if !DECIMAL_GLOBAL_ROUNDING // #define _RND_MODE_PARAM , _IDEC_round *prnd_mode void setDecimalRoundingDirection (_IDEC_round * rounding_mode _RND_MODE_PARAM) { // sets the current rounding mode to the value in *rounding_mode, if valid if (*rounding_mode == ROUNDING_TO_NEAREST || *rounding_mode == ROUNDING_DOWN || *rounding_mode == ROUNDING_UP || *rounding_mode == ROUNDING_TO_ZERO || *rounding_mode == ROUNDING_TIES_AWAY) { *prnd_mode = *rounding_mode; } } #else // #define _RND_MODE_PARAM // #define rnd_mode _IDEC_glbround void setDecimalRoundingDirection (_IDEC_round * rounding_mode ) { // sets the global rounding mode to the value in *rounding_mode, if valid if (*rounding_mode == ROUNDING_TO_NEAREST || *rounding_mode == ROUNDING_DOWN || *rounding_mode == ROUNDING_UP || *rounding_mode == ROUNDING_TO_ZERO || *rounding_mode == ROUNDING_TIES_AWAY) { rnd_mode = *rounding_mode; } } #endif #else #if !DECIMAL_GLOBAL_ROUNDING // #define _RND_MODE_PARAM , _IDEC_round rnd_mode _IDEC_round setDecimalRoundingDirection (_IDEC_round rounding_mode _RND_MODE_PARAM) { // sets the current rounding mode to the value in rounding_mode; // however, when arguments are passed by value and the rounding mode // is a local variable, this is not of any use if (rounding_mode == ROUNDING_TO_NEAREST || rounding_mode == ROUNDING_DOWN || rounding_mode == ROUNDING_UP || rounding_mode == ROUNDING_TO_ZERO || rounding_mode == ROUNDING_TIES_AWAY) { return (rounding_mode); } return (rnd_mode); } #else // #define _RND_MODE_PARAM // #define rnd_mode _IDEC_glbround void setDecimalRoundingDirection (_IDEC_round rounding_mode) { // sets the current rounding mode to the value in rounding_mode, if valid; if (rounding_mode == ROUNDING_TO_NEAREST || rounding_mode == ROUNDING_DOWN || rounding_mode == ROUNDING_UP || rounding_mode == ROUNDING_TO_ZERO || rounding_mode == ROUNDING_TIES_AWAY) { rnd_mode = rounding_mode; } } #endif #endif #if DECIMAL_CALL_BY_REFERENCE void is754 (int *retval) { *retval = 0; } #else int is754 (void) { return 0; } #endif #if DECIMAL_CALL_BY_REFERENCE void is754R (int *retval) { *retval = 1; } #else int is754R (void) { return 1; } #endif libdfp-1.0.17/libbid/bid_from_int.c000066400000000000000000000251461504475242000170770ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "bid_internal.h" /***************************************************************************** * BID64_round_integral_exact ****************************************************************************/ #if DECIMAL_CALL_BY_REFERENCE void bid64_from_int32 (UINT64 * pres, int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { int x = *px; #else UINT64 bid64_from_int32 (int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; // if integer is negative, put the absolute value // in the lowest 32bits of the result if ((x & SIGNMASK32) == SIGNMASK32) { // negative int32 x = ~x + 1; // 2's complement of x res = (unsigned int) x | 0xb1c0000000000000ull; // (exp << 53)) = biased exp. is 0 } else { // positive int32 res = x | 0x31c0000000000000ull; // (exp << 53)) = biased exp. is 0 } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_from_uint32 (UINT64 * pres, unsigned int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { unsigned int x = *px; #else UINT64 bid64_from_uint32 (unsigned int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; res = x | 0x31c0000000000000ull; // (exp << 53)) = biased exp. is 0 BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_from_int64 (UINT64 * pres, SINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { SINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64_from_int64 (SINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 x_sign, C; unsigned int q, ind; int incr_exp = 0; int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0; int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; x_sign = x & 0x8000000000000000ull; // if the integer is negative, use the absolute value if (x_sign) C = ~((UINT64) x) + 1; else C = x; if (C <= BID64_SIG_MAX) { // |C| <= 10^16-1 and the result is exact if (C < 0x0020000000000000ull) { // C < 2^53 res = x_sign | 0x31c0000000000000ull | C; } else { // C >= 2^53 res = x_sign | 0x6c70000000000000ull | (C & 0x0007ffffffffffffull); } } else { // |C| >= 10^16 and the result may be inexact // the smallest |C| is 10^16 which has 17 decimal digits // the largest |C| is 0x8000000000000000 = 9223372036854775808 w/ 19 digits if (C < 0x16345785d8a0000ull) { // x < 10^17 q = 17; ind = 1; // number of digits to remove for q = 17 } else if (C < 0xde0b6b3a7640000ull) { // C < 10^18 q = 18; ind = 2; // number of digits to remove for q = 18 } else { // C < 10^19 q = 19; ind = 3; // number of digits to remove for q = 19 } // overflow and underflow are not possible // Note: performace can be improved by inlining this call round64_2_18 ( // will work for 19 digits too if C fits in 64 bits q, ind, C, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); if (incr_exp) ind++; // set the inexact flag if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) *pfpsf |= INEXACT_EXCEPTION; // general correction from RN to RA, RM, RP, RZ; result uses ind for exp if (rnd_mode != ROUNDING_TO_NEAREST) { if ((!x_sign && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even))) || (x_sign && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_DOWN) && is_midpoint_gt_even)))) { res = res + 1; if (res == 0x002386f26fc10000ull) { // res = 10^16 => rounding overflow res = 0x00038d7ea4c68000ull; // 10^15 ind = ind + 1; } } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) && ((x_sign && (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TO_ZERO)) || (!x_sign && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)))) { res = res - 1; // check if we crossed into the lower decade if (res == 0x00038d7ea4c67fffull) { // 10^15 - 1 res = 0x002386f26fc0ffffull; // 10^16 - 1 ind = ind - 1; } } else { ; // exact, the result is already correct } } if (res < 0x0020000000000000ull) { // res < 2^53 res = x_sign | (((UINT64) ind + 398) << 53) | res; } else { // res >= 2^53 res = x_sign | 0x6000000000000000ull | (((UINT64) ind + 398) << 51) | (res & 0x0007ffffffffffffull); } } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid64_from_uint64 (UINT64 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #if !DECIMAL_GLOBAL_ROUNDING unsigned int rnd_mode = *prnd_mode; #endif #else UINT64 bid64_from_uint64 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT128 x128, res128; unsigned int q, ind; int incr_exp = 0; int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0; int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0; if (x <= BID64_SIG_MAX) { // x <= 10^16-1 and the result is exact if (x < 0x0020000000000000ull) { // x < 2^53 res = 0x31c0000000000000ull | x; } else { // x >= 2^53 res = 0x6c70000000000000ull | (x & 0x0007ffffffffffffull); } } else { // x >= 10^16 and the result may be inexact // the smallest x is 10^16 which has 17 decimal digits // the largest x is 0xffffffffffffffff = 18446744073709551615 w/ 20 digits if (x < 0x16345785d8a0000ull) { // x < 10^17 q = 17; ind = 1; // number of digits to remove for q = 17 } else if (x < 0xde0b6b3a7640000ull) { // x < 10^18 q = 18; ind = 2; // number of digits to remove for q = 18 } else if (x < 0x8ac7230489e80000ull) { // x < 10^19 q = 19; ind = 3; // number of digits to remove for q = 19 } else { // x < 10^20 q = 20; ind = 4; // number of digits to remove for q = 20 } // overflow and underflow are not possible // Note: performace can be improved by inlining this call if (q <= 19) { round64_2_18 ( // will work for 20 digits too if x fits in 64 bits q, ind, x, &res, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); } else { // q = 20 x128.w[1] = 0x0; x128.w[0] = x; round128_19_38 (q, ind, x128, &res128, &incr_exp, &is_midpoint_lt_even, &is_midpoint_gt_even, &is_inexact_lt_midpoint, &is_inexact_gt_midpoint); res = res128.w[0]; // res.w[1] is 0 } if (incr_exp) ind++; // set the inexact flag if (is_inexact_lt_midpoint || is_inexact_gt_midpoint || is_midpoint_lt_even || is_midpoint_gt_even) *pfpsf |= INEXACT_EXCEPTION; // general correction from RN to RA, RM, RP, RZ; result uses ind for exp if (rnd_mode != ROUNDING_TO_NEAREST) { if ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) || ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even)) { res = res + 1; if (res == 0x002386f26fc10000ull) { // res = 10^16 => rounding overflow res = 0x00038d7ea4c68000ull; // 10^15 ind = ind + 1; } } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)) { res = res - 1; // check if we crossed into the lower decade if (res == 0x00038d7ea4c67fffull) { // 10^15 - 1 res = 0x002386f26fc0ffffull; // 10^16 - 1 ind = ind - 1; } } else { ; // exact, the result is already correct } } if (res < 0x0020000000000000ull) { // res < 2^53 res = (((UINT64) ind + 398) << 53) | res; } else { // res >= 2^53 res = 0x6000000000000000ull | (((UINT64) ind + 398) << 51) | (res & 0x0007ffffffffffffull); } } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_from_int32 (UINT128 * pres, int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { int x = *px; #else UINT128 bid128_from_int32 (int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; // if integer is negative, use the absolute value if ((x & SIGNMASK32) == SIGNMASK32) { res.w[HIGH_128W] = 0xb040000000000000ull; res.w[LOW_128W] = ~((unsigned int) x) + 1; // 2's complement of x } else { res.w[HIGH_128W] = 0x3040000000000000ull; res.w[LOW_128W] = (unsigned int) x; } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_from_uint32 (UINT128 * pres, unsigned int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { unsigned int x = *px; #else UINT128 bid128_from_uint32 (unsigned int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; res.w[HIGH_128W] = 0x3040000000000000ull; res.w[LOW_128W] = x; BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_from_int64 (UINT128 * pres, SINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { SINT64 x = *px; #else UINT128 bid128_from_int64 (SINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; // if integer is negative, use the absolute value if ((x & SIGNMASK64) == SIGNMASK64) { res.w[HIGH_128W] = 0xb040000000000000ull; res.w[LOW_128W] = ~x + 1; // 2's complement of x } else { res.w[HIGH_128W] = 0x3040000000000000ull; res.w[LOW_128W] = x; } BID_RETURN (res); } #if DECIMAL_CALL_BY_REFERENCE void bid128_from_uint64 (UINT128 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT128 bid128_from_uint64 (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT128 res; res.w[HIGH_128W] = 0x3040000000000000ull; res.w[LOW_128W] = x; BID_RETURN (res); } libdfp-1.0.17/libbid/bid_functions.h000066400000000000000000003334131504475242000172760ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef _BID_FUNCTIONS_H #define _BID_FUNCTIONS_H #ifdef IN_LIBGCC2 // When we are built as the part of the gcc runtime library, libgcc, // we will use gcc types defined in bid_gcc_intrinsics.h. #include "bid_gcc_intrinsics.h" #define ALIGN(n) __attribute__ ((aligned(n))) #else typedef char SINT8; typedef unsigned char UINT8; typedef unsigned UINT32; typedef signed SINT32; #ifdef __GNUC__ #define __int64 long long #endif #if __GNUC__ || defined LINUX || defined SUNOS typedef unsigned long long UINT64; typedef signed long long SINT64; #else typedef unsigned __int64 UINT64; typedef signed __int64 SINT64; #endif #if defined _MSC_VER #if defined _M_IX86 && !defined __INTEL_COMPILER // Win IA-32, MS compiler #define ALIGN(n) #else #define ALIGN(n) __declspec(align(n)) #endif #else #define ALIGN(n) __attribute__ ((aligned(n))) #endif // bid_gcc_intrinsics.h will also define this. typedef ALIGN (16) struct { UINT64 w[2]; } UINT128; #endif #if !defined _MSC_VER || defined __INTEL_COMPILER #define __ENABLE_BINARY80__ 1 #endif #ifndef HPUX_OS #define BINARY80 long double #define BINARY128 UINT128 #define SQRT80 sqrtl #else #define BINARY80 __float80 #define BINARY128 __float128 #define SQRT80 sqrtw #endif typedef ALIGN (8) struct { UINT64 w[3]; } UINT192; typedef ALIGN (16) struct { UINT64 w[4]; } UINT256; typedef unsigned int FPSC; // floating-point status and control // TYPE parameters #define BID128_MAXDIGITS 34 #define BID64_MAXDIGITS 16 #define BID32_MAXDIGITS 7 // rounding modes #define ROUNDING_TO_NEAREST 0x00000 #define ROUNDING_DOWN 0x00001 #define ROUNDING_UP 0x00002 #define ROUNDING_TO_ZERO 0x00003 #define ROUNDING_TIES_AWAY 0x00004 #define RMODE_MASK (ROUNDING_TO_NEAREST | ROUNDING_DOWN | ROUNDING_UP | ROUNDING_TO_ZERO | ROUNDING_TIES_AWAY) // status #define FLAG_MASK 0x0000003f #define BID_IEEE_FLAGS 0x0000003d #define EXACT_STATUS 0x00000000 #define INEXACT_EXCEPTION 0x00000020 #define UNDERFLOW_EXCEPTION 0x00000010 #define OVERFLOW_EXCEPTION 0x00000008 #define ZERO_DIVIDE_EXCEPTION 0x00000004 #define DENORMAL_EXCEPTION 0x00000002 #define INVALID_EXCEPTION 0x00000001 #define MODE_MASK 0x00001f80 #define INEXACT_MODE 0x00001000 #define UNDERFLOW_MODE 0x00000800 #define OVERFLOW_MODE 0x00000400 #define ZERO_DIVIDE_MODE 0x00000200 #define DENORMAL_MODE 0x00000100 #define INVALID_MODE 0x00000080 #if defined LINUX || defined __GLIBC__ || defined SUNOS #define LX16 "%016llx" #define LX "%llx" #define LD4 "%4llu" #define LD16 "%016lld" #define LD "%lld" #define LUD "%llu" #define LUD16 "%016llu" #define X8 "%08x" #define X4 "%04x" #define FMT_LLX16 "%016llx" #define FMT_LLX "%llx" #define FMT_LLU4 "%4llu" #define FMT_LLD16 "%016lld" #define FMT_LLD "%lld" #define FMT_LLU "%llu" #define FMT_LLU16 "%016llu" #define FMT_X8 "%08x" #define FMT_X4 "%04x" #else #define LX16 "%016I64x" #define LX "%I64x" #define LD16 "%016I64d" #define LD4 "%4I64u" #define LD "%I64d" #define LUD "%I64u" #define LUD16 "%016I64u" #define X8 "%08x" #define X4 "%04x" #define FMT_LLX16 "%016I64x" #define FMT_LLX "%I64x" #define FMT_LLD16 "%016I64d" #define FMT_LLU4 "%4I64u" #define FMT_LLD "%I64d" #define FMT_LLU "%I64u" #define FMT_LLU16 "%016I64u" #define FMT_X8 "%08x" #define FMT_X4 "%04x" #endif #define decNumberIsSNaN(dn) (((dn)->bits&(DECSNAN))!=0) int __signbitf (float); int __signbit (double); #define __IMFC99MACRO_( __x__, __func__ ) \ (( sizeof( __x__ ) > sizeof( float )) \ ? __func__( (double)(__x__) ) \ : __func__##f( (float)(__x__) )) #define signbit( __x__ ) __IMFC99MACRO_( __x__, __signbit ) #if !defined(__INTEL_COMPILER) #define __fence #define isinf( __x__ ) __IMFC99MACRO_( __x__, __isinf ) #define isnan( __x__ ) __IMFC99MACRO_( __x__, __isnan ) int __isnanf (float); int __isnan (double); int __isinff (float); int __isinf (double); #endif /* rounding modes */ // typedef unsigned int _IDEC_round; extern _IDEC_round _IDEC_gblround; // initialized to ROUNDING_TO_NEAREST /* exception flags */ // typedef unsigned int _IDEC_flags; // could be a struct with diagnostic info extern _IDEC_flags _IDEC_gblflags; // initialized to EXACT_STATUS /* exception masks */ typedef unsigned int _IDEC_exceptionmasks; extern _IDEC_exceptionmasks _IDEC_gblexceptionmasks; // initialized to MODE_MASK #if DECIMAL_ALTERNATE_EXCEPTION_HANDLING /* exception information */ typedef struct { unsigned int inexact_result:1; unsigned int underflow:1; unsigned int overflow:1; unsigned int zero_divide:1; unsigned int invalid_operation:1; } fpieee_exception_flags_t; typedef enum { _fp_round_nearest, _fp_round_minus_infinity, _fp_round_plus_infinity, _fp_round_chopped, _fp_round_away } fpieee_rounding_mode_t; typedef enum { _fp_precision24, _fp_precision63, _fp_precision64, _fp_precision7, _fp_precision16, _fp_precision34 } _fpieee_precision_t; typedef enum { _fp_code_unspecified, _fp_code_add, _fp_code_subtract, _fp_code_multiply, _fp_code_divide, _fp_code_square_root, _fp_code_compare, _fp_code_convert, _fp_code_convert_to_integer_neareven, _fp_code_convert_to_integer_down, _fp_code_convert_to_integer_up, _fp_code_convert_to_integer_truncate, _fp_code_convert_to_integer_nearaway, _fp_code_fma, _fp_code_fmin, _fp_code_fmax, _fp_code_famin, _fp_code_famax, _fp_code_round_to_integral, _fp_code_minnum, _fp_code_maxnum, _fp_code_minnummag, _fp_code_maxnummag, _fp_code_quantize, _fp_code_logb, _fp_code_scaleb, _fp_code_remainder, _fp_code_nextup, _fp_code_nextdown, _fp_code_nextafter, } fp_operation_code_t; typedef enum { _fp_compare_equal, _fp_compare_greater, _fp_compare_less, _fp_compare_unordered } fpieee_compare_result_t; typedef enum { _fp_format_fp32, _fp_format_fp64, _fp_format_fp80, _fp_format_fp128, _fp_format_dec_fp32, _fp_format_dec_fp64, _fp_format_dec_fp128, _fp_format_i8, /* 8-bit integer */ _fp_format_i16, /* 16-bit integer */ _fp_format_i32, /* 32-bit integer */ _fp_format_i64, /* 64-bit integer */ _fp_format_u8, /* 8-bit unsigned integer */ _fp_format_u16, /* 16-bit unsigned integer */ _fp_format_u32, /* 32-bit unsigned integer */ _fp_format_u64, /* 64-bit unsigned integer */ _fp_format_compare, /* compare value format */ _fp_format_decimal_char, /* decimal character */ _fp_format_string /* string */ } fpieee_format_t; typedef struct { unsigned short W[5]; } _float80_t; typedef struct { unsigned int W[4]; } _float128_t; typedef struct { union { float fp32_value; double fp64_value; _float80_t fp80_value; _float128_t fp128_value; UINT32 decfp32_value; UINT64 decfp64_value; UINT128 decfp128_value; char i8_value; short i16_value; int i32_value; SINT64 i64_value; unsigned char u8_value; unsigned short u16_value; unsigned int u32_value; unsigned long u64_value; fpieee_compare_result_t compare_value; unsigned char s[256]; } value; unsigned int operand_valid:1; fpieee_format_t format:5; } fpieee_value_t; typedef struct { unsigned int rounding_mode:3; unsigned int precision:3; unsigned int operation:26; fpieee_exception_flags_t cause; fpieee_exception_flags_t enable; fpieee_exception_flags_t status; fpieee_value_t operand1; fpieee_value_t operand2; fpieee_value_t operand3; fpieee_value_t result; } _IDEC_excepthandling; extern _IDEC_excepthandling _IDEC_glbexcepthandling; #endif #if DECIMAL_CALL_BY_REFERENCE extern void bid_to_dpd32 (UINT32 * pres, UINT32 * px); extern void bid_to_dpd64 (UINT64 * pres, UINT64 * px); extern void bid_to_dpd128 (UINT128 * pres, UINT128 * px); extern void dpd_to_bid32 (UINT32 * pres, UINT32 * px); extern void dpd_to_bid64 (UINT64 * pres, UINT64 * px); extern void dpd_to_bid128 (UINT128 * pres, UINT128 * px); extern void bid128dd_add (UINT128 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dq_add (UINT128 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128qd_add (UINT128 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_add (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dd_sub (UINT128 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dq_sub (UINT128 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128qd_sub (UINT128 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_sub (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dd_mul (UINT128 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dq_mul (UINT128 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128qd_mul (UINT128 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_mul (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_div (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dd_div (UINT128 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dq_div (UINT128 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128qd_div (UINT128 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_fma (UINT128 * pres, UINT128 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128ddd_fma (UINT128 * pres, UINT64 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128ddq_fma (UINT128 * pres, UINT64 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dqd_fma (UINT128 * pres, UINT64 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128dqq_fma (UINT128 * pres, UINT64 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128qdd_fma (UINT128 * pres, UINT128 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128qdq_fma (UINT128 * pres, UINT128 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128qqd_fma (UINT128 * pres, UINT128 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); // Note: bid128qqq_fma is represented by bid128_fma // Note: bid64ddd_fma is represented by bid64_fma extern void bid64ddq_fma (UINT64 * pres, UINT64 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64dqd_fma (UINT64 * pres, UINT64 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64dqq_fma (UINT64 * pres, UINT64 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qdd_fma (UINT64 * pres, UINT128 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qdq_fma (UINT64 * pres, UINT128 * px, UINT64 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qqd_fma (UINT64 * pres, UINT128 * px, UINT128 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qqq_fma (UINT64 * pres, UINT128 * px, UINT128 * py, UINT128 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_sqrt (UINT128 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128d_sqrt (UINT128 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_add (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64dq_add (UINT64 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qd_add (UINT64 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qq_add (UINT64 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_sub (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64dq_sub (UINT64 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qd_sub (UINT64 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qq_sub (UINT64 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_mul (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64dq_mul (UINT64 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qd_mul (UINT64 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qq_mul (UINT64 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_div (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64dq_div (UINT64 * pres, UINT64 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qd_div (UINT64 * pres, UINT128 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64qq_div (UINT64 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_fma (UINT64 * pres, UINT64 * px, UINT64 * py, UINT64 * pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_sqrt (UINT64 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64q_sqrt (UINT64 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_rnint (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_xrnint (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_rninta (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_xrninta (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_int (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_xint (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_floor (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_xfloor (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_ceil (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int8_xceil (char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_rnint (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_xrnint (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_rninta (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_xrninta (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_int (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_xint (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_floor (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_xfloor (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_ceil (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int16_xceil (short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_rnint (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_xrnint (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_rninta (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_xrninta (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_int (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_xint (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_floor (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_xfloor (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_ceil (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint8_xceil (unsigned char *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_rnint (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_xrnint (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_rninta (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_xrninta (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_int (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_xint (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_floor (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_xfloor (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_ceil (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint16_xceil (unsigned short *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_rnint (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_xrnint (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_rninta (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_xrninta (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_int (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_xint (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_floor (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_xfloor (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_ceil (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int32_xceil (int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_rnint (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_xrnint (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_rninta (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_xrninta (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_int (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_xint (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_floor (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_xfloor (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_ceil (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint32_xceil (unsigned int *pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_rnint (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_xrnint (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_rninta (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_xrninta (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_int (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_xint (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_floor (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_xfloor (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_ceil (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_int64_xceil (SINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_rnint (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_xrnint (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_rninta (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_xrninta (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_int (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_xint (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_floor (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_xfloor (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_ceil (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_uint64_xceil (UINT64 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_rnint (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_xrnint (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_rninta (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_xrninta (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_int (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_xint (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_floor (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_xfloor (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_ceil (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int32_xceil (int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_rnint (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_xrnint (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_rninta (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_xrninta (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_int (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_xint (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_floor (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_xfloor (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_ceil (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int8_xceil (char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_rnint (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_xrnint (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_rninta (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_xrninta (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_int (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_xint (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_floor (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_xfloor (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_ceil (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int16_xceil (short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_rnint (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_xrnint (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_rninta (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_xrninta (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_int (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_xint (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_floor (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_xfloor (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_ceil (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint8_xceil (unsigned char *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_rnint (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_xrnint (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_rninta (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_xrninta (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_int (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_xint (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_floor (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_xfloor (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_ceil (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint16_xceil (unsigned short *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_rnint (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_xrnint (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_rninta (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_xrninta (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_int (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_xint (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_floor (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_xfloor (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_ceil (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint32_xceil (unsigned int *pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_rnint (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_xrnint (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_rninta (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_xrninta (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_int (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_xint (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_floor (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_xfloor (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_ceil (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_int64_xceil (SINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_rnint (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_xrnint (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_rninta (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_xrninta (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_int (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_xint (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_floor (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_xfloor (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_ceil (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_uint64_xceil (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_greater_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_greater_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_less_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_less_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_not_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_not_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_not_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_ordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quiet_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_greater_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_greater_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_less_equal (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_less_unordered (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_not_greater (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_signaling_not_less (int *pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_equal (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_greater (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_greater_equal (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_greater_unordered (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_less (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_less_equal (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_less_unordered (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_not_equal (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_not_greater (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_not_less (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_ordered (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quiet_unordered (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_greater (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_greater_equal (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_greater_unordered (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_less (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_less_equal (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_less_unordered (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_not_greater (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_signaling_not_less (int *pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_round_integral_exact (UINT64 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_round_integral_nearest_even (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_round_integral_negative (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_round_integral_positive (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_round_integral_zero (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_round_integral_nearest_away (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_round_integral_exact (UINT128 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_round_integral_nearest_even (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_round_integral_negative (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_round_integral_positive (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_round_integral_zero (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_round_integral_nearest_away (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_nextup (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_nextdown (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_nextafter (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_nextup (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_nextdown (UINT128 * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_nextafter (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_minnum (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM); extern void bid64_minnum_mag (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM); extern void bid64_maxnum (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM); extern void bid64_maxnum_mag (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM); extern void bid128_minnum (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM); extern void bid128_minnum_mag (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM); extern void bid128_maxnum (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM); extern void bid128_maxnum_mag (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM); extern void bid64_from_int32 (UINT64 * pres, int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_from_uint32 (UINT64 * pres, unsigned int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_from_int64 (UINT64 * pres, SINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_from_uint64 (UINT64 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_from_int32 (UINT128 * pres, int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_from_uint32 (UINT128 * pres, unsigned int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_from_int64 (UINT128 * pres, SINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_from_uint64 (UINT128 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isSigned (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isNormal (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isSubnormal (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isFinite (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isZero (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isInf (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isSignaling (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isCanonical (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_isNaN (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_copy (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_negate (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_abs (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_copySign (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_class (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_sameQuantum (int *pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_totalOrder (int *pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_totalOrderMag (int *pres, UINT64 * px, UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_radix (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isSigned (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isNormal (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isSubnormal (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isFinite (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isZero (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isInf (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isSignaling (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isCanonical (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_isNaN (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_copy (UINT128 * pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_negate (UINT128 * pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_abs (UINT128 * pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_copySign (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_class (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_sameQuantum (int *pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_totalOrder (int *pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_totalOrderMag (int *pres, UINT128 * px, UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_radix (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_rem (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_logb (int * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_scalb (UINT64 * pres, UINT64 * px, int *pn _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_rem (UINT128 * pres, UINT128 * px, UINT128 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_logb (int * pres, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_scalb (UINT128 * pres, UINT128 * px, int *pn _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid32_to_bid64 (UINT64 * pres, UINT32 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid32_to_bid128 (UINT128 * pres, UINT32 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_bid128 (UINT128 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_bid32 (UINT32 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_bid32 (UINT32 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_bid64 (UINT64 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_from_string (UINT64 * pres, char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_string (char *ps, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_from_string (UINT128 * pres, char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_string (char *str, UINT128 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_quantize (UINT64 * pres, UINT64 * px, UINT64 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_quantize (UINT128 * pres, UINT128 * px, UINT128 * py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_binary32 (float *pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_binary64 (double *pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_binary80 (BINARY80 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_binary128 (BINARY128 * pres, UINT128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary128_to_bid32 (UINT32 * pres, BINARY128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary128_to_bid64 (UINT64 * pres, BINARY128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary128_to_bid128 (UINT128 * pres, BINARY128 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_binary32 (float *pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_binary64 (double *pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_binary80 (BINARY80 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_binary128 (BINARY128 * pres, UINT64 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary64_to_bid32 (UINT32 * pres, double *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary64_to_bid64 (UINT64 * pres, double *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary64_to_bid128 (UINT128 * pres, double *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid32_to_binary32 (float *pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid32_to_binary64 (double *pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid32_to_binary80 (BINARY80 * pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid32_to_binary128 (BINARY128 * pres, UINT32 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary32_to_bid32 (UINT32 * pres, float *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary32_to_bid64 (UINT64 * pres, float *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary32_to_bid128 (UINT128 * pres, float *px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary80_to_bid32 (UINT32 * pres, BINARY80 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary80_to_bid64 (UINT64 * pres, BINARY80 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void binary80_to_bid128 (UINT128 * pres, BINARY80 * px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void is754 (int *retval); extern void is754R (int *retval); extern void signalException (_IDEC_flags * pflagsmask _EXC_FLAGS_PARAM); extern void lowerFlags (_IDEC_flags * pflagsmask _EXC_FLAGS_PARAM); extern void testFlags (_IDEC_flags * praised, _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM); extern void testSavedFlags (_IDEC_flags * praised, _IDEC_flags * psavedflags, _IDEC_flags * pflagsmask); extern void restoreFlags (_IDEC_flags * pflagsvalues, _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM); extern void saveFlags (_IDEC_flags * pflagsvalues, _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM); void getDecimalRoundingDirection (_IDEC_round * rounding_mode _RND_MODE_PARAM); void setDecimalRoundingDirection (_IDEC_round * rounding_mode _RND_MODE_PARAM); #else extern UINT32 bid_to_dpd32 (UINT32 px); extern UINT64 bid_to_dpd64 (UINT64 px); extern UINT128 bid_to_dpd128 (UINT128 px); extern UINT32 dpd_to_bid32 (UINT32 px); extern UINT64 dpd_to_bid64 (UINT64 px); extern UINT128 dpd_to_bid128 (UINT128 px); extern UINT128 bid128dd_add (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dq_add (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128qd_add (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_add (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dd_sub (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dq_sub (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128qd_sub (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_sub (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dd_mul (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dq_mul (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128qd_mul (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_mul (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_div (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dd_div (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dq_div (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128qd_div (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_fma (UINT128 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128ddd_fma (UINT64 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128ddq_fma (UINT64 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dqd_fma (UINT64 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128dqq_fma (UINT64 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128qdd_fma (UINT128 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128qdq_fma (UINT128 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128qqd_fma (UINT128 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); // Note: bid128qqq_fma is represented by bid128_fma // Note: bid64ddd_fma is represented by bid64_fma extern UINT64 bid64ddq_fma (UINT64 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64dqd_fma (UINT64 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64dqq_fma (UINT64 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qdd_fma (UINT128 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qdq_fma (UINT128 x, UINT64 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qqd_fma (UINT128 x, UINT128 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qqq_fma (UINT128 x, UINT128 y, UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_sqrt (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128d_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_add (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64dq_add (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qd_add (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qq_add (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_sub (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64dq_sub (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qd_sub (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qq_sub (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_mul (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64dq_mul (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qd_mul (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qq_mul (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_div (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64dq_div (UINT64 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qd_div (UINT128 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64qq_div (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_fma (UINT64 x, UINT64 y, UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64q_sqrt (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid128_to_int8_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid128_to_int16_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid128_to_uint8_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid128_to_uint16_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_to_int32_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid128_to_uint32_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid128_to_int64_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_rnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_xrnint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_rninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_xrninta (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_int (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_xint (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_floor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_xfloor (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_ceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_uint64_xceil (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_to_int32_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern char bid64_to_int8_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern short bid64_to_int16_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned char bid64_to_uint8_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned short bid64_to_uint16_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern unsigned int bid64_to_uint32_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern SINT64 bid64_to_int64_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_to_uint64_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_greater_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_greater_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_less_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_less_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_not_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_not_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_not_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_ordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_quiet_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_greater_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_greater_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_less_equal (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_less_unordered (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_not_greater (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_signaling_not_less (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_equal (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_greater (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_greater_equal (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_greater_unordered (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_less (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_less_equal (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_less_unordered (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_not_equal (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_not_greater (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_not_less (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_ordered (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_quiet_unordered (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_greater (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_greater_equal (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_greater_unordered (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_less (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_less_equal (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_less_unordered (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_not_greater (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_signaling_not_less (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_round_integral_exact (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_round_integral_nearest_even (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_round_integral_negative (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_round_integral_positive (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_round_integral_zero (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_round_integral_nearest_away (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_round_integral_exact (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_round_integral_nearest_even (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_round_integral_negative (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_round_integral_positive (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_round_integral_zero (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_round_integral_nearest_away (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_nextafter (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_nextup (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_nextdown (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_nextafter (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_minnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM); extern UINT64 bid64_minnum_mag (UINT64 x, UINT64 y _EXC_FLAGS_PARAM); extern UINT64 bid64_maxnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM); extern UINT64 bid64_maxnum_mag (UINT64 x, UINT64 y _EXC_FLAGS_PARAM); extern UINT128 bid128_minnum (UINT128 x, UINT128 y _EXC_FLAGS_PARAM); extern UINT128 bid128_minnum_mag (UINT128 x, UINT128 y _EXC_FLAGS_PARAM); extern UINT128 bid128_maxnum (UINT128 x, UINT128 y _EXC_FLAGS_PARAM); extern UINT128 bid128_maxnum_mag (UINT128 x, UINT128 y _EXC_FLAGS_PARAM); extern UINT64 bid64_from_int32 (int x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_from_uint32 (unsigned int x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_from_int64 (SINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_from_uint64 (UINT64 _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_from_int32 (int x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_from_uint32 (unsigned int x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_from_int64 (SINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_from_uint64 (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isSigned (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isNormal (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isSubnormal (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isFinite (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isZero (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isInf (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isSignaling (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isCanonical (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_isNaN (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_copy (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_negate (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_abs (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_copySign (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_class (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_sameQuantum (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_totalOrder (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_totalOrderMag (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_radix (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isSigned (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isNormal (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isSubnormal (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isFinite (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isZero (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isInf (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isSignaling (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isCanonical (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_isNaN (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_copy (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_negate (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_abs (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_copySign (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_class (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_sameQuantum (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_totalOrder (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_totalOrderMag (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_radix (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_rem (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid64_logb (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_scalb (UINT64 x, int n _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_rem (UINT128 x, UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int bid128_logb (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_scalb (UINT128 x, int n _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid32_to_bid64 (UINT32 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid32_to_bid128 (UINT32 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid64_to_bid128 (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT32 bid64_to_bid32 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT32 bid128_to_bid32 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid128_to_bid64 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid64_to_string (char *ps, UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_from_string (char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern void bid128_to_string (char *str, UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_from_string (char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 bid64_quantize (UINT64 x, UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 bid128_quantize (UINT128 x, UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT32 binary128_to_bid32 (BINARY128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 binary128_to_bid64 (BINARY128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 binary128_to_bid128 (BINARY128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT32 binary64_to_bid32 (double x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 binary64_to_bid64 (double x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 binary64_to_bid128 (double x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT32 binary80_to_bid32 (BINARY80 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 binary80_to_bid64 (BINARY80 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 binary80_to_bid128 (BINARY80 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT32 binary32_to_bid32 (float x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT64 binary32_to_bid64 (float x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern UINT128 binary32_to_bid128 (float x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern float bid128_to_binary32 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern double bid128_to_binary64 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern BINARY80 bid128_to_binary80 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern BINARY128 bid128_to_binary128 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern float bid64_to_binary32 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern double bid64_to_binary64 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern BINARY80 bid64_to_binary80 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern BINARY128 bid64_to_binary128 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern float bid32_to_binary32 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern double bid32_to_binary64 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern BINARY80 bid32_to_binary80 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern BINARY128 bid32_to_binary128 (UINT32 x _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM); extern int is754 (void); extern int is754R (void); extern void signalException (_IDEC_flags flagsmask _EXC_FLAGS_PARAM); extern void lowerFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM); extern _IDEC_flags testFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM); extern _IDEC_flags testSavedFlags (_IDEC_flags savedflags, _IDEC_flags flagsmask); extern void restoreFlags (_IDEC_flags flagsvalues, _IDEC_flags flagsmask _EXC_FLAGS_PARAM); extern _IDEC_flags saveFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM); #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round getDecimalRoundingDirection (_IDEC_round rnd_mode); #else _IDEC_round getDecimalRoundingDirection (void); #endif #if !DECIMAL_GLOBAL_ROUNDING _IDEC_round setDecimalRoundingDirection (_IDEC_round rounding_mode _RND_MODE_PARAM); #else void setDecimalRoundingDirection (_IDEC_round rounding_mode); #endif #endif // Internal Functions extern void round64_2_18 (int q, int x, UINT64 C, UINT64 * ptr_Cstar, int *delta_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint); extern void round128_19_38 (int q, int x, UINT128 C, UINT128 * ptr_Cstar, int *delta_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint); extern void round192_39_57 (int q, int x, UINT192 C, UINT192 * ptr_Cstar, int *delta_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint); extern void round256_58_76 (int q, int x, UINT256 C, UINT256 * ptr_Cstar, int *delta_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint); #endif // Prototypes for Internal Functions extern UINT32 bid_to_bid32 (UINT32); extern UINT64 bid_to_bid64 (UINT64); extern UINT128 bid_to_bid128 (UINT128); extern UINT32 bid32_canonize (UINT32); extern UINT64 bid64_canonize (UINT64); extern UINT128 bid128_canonize (UINT128); libdfp-1.0.17/libbid/bid_gcc_intrinsics.h000066400000000000000000000276751504475242000203010ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef _BID_GCC_INTRINSICS_H #define _BID_GCC_INTRINSICS_H #ifdef IN_LIBGCC2 #include "tconfig.h" #include "coretypes.h" #include "tm.h" #include "libgcc_tm.h" #ifdef __LIBGCC_HAS_HF_MODE__ #define LIBGCC2_HAS_HF_MODE 1 #else #define LIBGCC2_HAS_HF_MODE 0 #endif #ifdef __LIBGCC_HAS_XF_MODE__ #define LIBGCC2_HAS_XF_MODE 1 #else #define LIBGCC2_HAS_XF_MODE 0 #endif #ifdef __LIBGCC_HAS_TF_MODE__ #define LIBGCC2_HAS_TF_MODE 1 #else #define LIBGCC2_HAS_TF_MODE 0 #endif #ifndef BID_HAS_HF_MODE #define BID_HAS_HF_MODE LIBGCC2_HAS_HF_MODE #endif #ifndef BID_HAS_XF_MODE #define BID_HAS_XF_MODE LIBGCC2_HAS_XF_MODE #endif #ifndef BID_HAS_TF_MODE #define BID_HAS_TF_MODE LIBGCC2_HAS_TF_MODE #endif /* Some handy typedefs. */ #if LIBGCC2_HAS_HF_MODE typedef float HFtype __attribute__ ((mode (HF))); #endif /* LIBGCC2_HAS_HF_MODE */ typedef float SFtype __attribute__ ((mode (SF))); typedef float DFtype __attribute__ ((mode (DF))); #if LIBGCC2_HAS_XF_MODE typedef float XFtype __attribute__ ((mode (XF))); #endif /* LIBGCC2_HAS_XF_MODE */ #if LIBGCC2_HAS_TF_MODE typedef float TFtype __attribute__ ((mode (TF))); #endif /* LIBGCC2_HAS_XF_MODE */ typedef int SItype __attribute__ ((mode (SI))); typedef int DItype __attribute__ ((mode (DI))); typedef unsigned int USItype __attribute__ ((mode (SI))); typedef unsigned int UDItype __attribute__ ((mode (DI))); /* The type of the result of a decimal float comparison. This must match `word_mode' in GCC for the target. */ typedef int CMPtype __attribute__ ((mode (word))); typedef int SINT8 __attribute__ ((mode (QI))); typedef unsigned int UINT8 __attribute__ ((mode (QI))); typedef USItype UINT32; typedef SItype SINT32; typedef UDItype UINT64; typedef DItype SINT64; /* It has to be identical to the one defined in bid_functions.h. */ typedef __attribute__ ((aligned(16))) struct { UINT64 w[2]; } UINT128; #else /* if not IN_LIBGCC2 */ #if defined(__i386__) || defined (__amd64__) #define BID_HAS_XF_MODE 1 #define LIBGCC2_HAS_XF_MODE 1 #define __LIBGCC_HAS_XF_MODE__ #else #define BID_HAS_XF_MODE 0 #define LIBGCC2_HAS_XF_MODE 0 #endif #ifndef BID_HAS_TF_MODE #define BID_HAS_TF_MODE 1 #endif #if BID_HAS_HF_MODE #ifndef HFtype #define HFtype _Float16 #endif #endif #ifndef SFtype #define SFtype float #endif #ifndef DFtype #define DFtype double #endif #if BID_HAS_XF_MODE #ifndef XFtype #define XFtype long double #endif #endif #if BID_HAS_TF_MODE #ifndef TFtype #ifdef __aarch64__ #define TFtype long double #else #define TFtype __float128 #endif /* __aarch64 */ #endif #endif #ifndef SItype #define SItype SINT32 #endif #ifndef DItype #define DItype SINT64 #endif #ifndef USItype #define USItype UINT32 #endif #ifndef UDItype #define UDItype UINT64 #endif #ifndef CMPtype #define CMPtype long #endif #endif /* IN_LIBGCC2 */ #if BID_HAS_GCC_DECIMAL_INTRINSICS /* Prototypes for gcc instrinsics */ extern _Decimal64 __bid_adddd3 (_Decimal64, _Decimal64); hidden_proto(__bid_adddd3); extern _Decimal64 __bid_subdd3 (_Decimal64, _Decimal64); hidden_proto(__bid_subdd3); extern _Decimal32 __bid_addsd3 (_Decimal32, _Decimal32); hidden_proto(__bid_addsd3); extern _Decimal32 __bid_subsd3 (_Decimal32, _Decimal32); hidden_proto(__bid_subsd3); extern _Decimal128 __bid_addtd3 (_Decimal128, _Decimal128); hidden_proto(__bid_addtd3); extern _Decimal128 __bid_subtd3 (_Decimal128, _Decimal128); hidden_proto(__bid_subtd3); extern DFtype __bid_truncdddf (_Decimal64); hidden_proto(__bid_truncdddf); extern DItype __bid_fixdddi (_Decimal64); hidden_proto(__bid_fixdddi); extern _Decimal32 __bid_truncddsd2 (_Decimal64); hidden_proto(__bid_truncddsd2); extern SFtype __bid_truncddsf (_Decimal64); hidden_proto(__bid_truncddsf); extern SItype __bid_fixddsi (_Decimal64); hidden_proto(__bid_fixddsi); extern _Decimal128 __bid_extendddtd2 (_Decimal64); hidden_proto(__bid_extendddtd2); #if BID_HAS_TF_MODE extern TFtype __bid_extendddtf (_Decimal64); hidden_proto(__bid_extendddtf); #endif extern UDItype __bid_fixunsdddi (_Decimal64); hidden_proto(__bid_fixunsdddi); extern USItype __bid_fixunsddsi (_Decimal64); hidden_proto(__bid_fixunsddsi); #if BID_HAS_XF_MODE extern XFtype __bid_extendddxf (_Decimal64); hidden_proto(__bid_extendddxf); #endif extern _Decimal64 __bid_extenddfdd (DFtype); hidden_proto(__bid_extenddfdd); extern _Decimal32 __bid_truncdfsd (DFtype); hidden_proto(__bid_truncdfsd); extern _Decimal128 __bid_extenddftd (DFtype); hidden_proto(__bid_extenddftd); extern _Decimal64 __bid_floatdidd (DItype); hidden_proto(__bid_floatdidd); extern _Decimal32 __bid_floatdisd (DItype); hidden_proto(__bid_floatdisd); extern _Decimal128 __bid_floatditd (DItype); hidden_proto(__bid_floatditd); extern _Decimal64 __bid_divdd3 (_Decimal64, _Decimal64); hidden_proto(__bid_divdd3); extern _Decimal32 __bid_divsd3 (_Decimal32, _Decimal32); hidden_proto(__bid_divsd3); extern _Decimal128 __bid_divtd3 (_Decimal128, _Decimal128); hidden_proto(__bid_divtd3); extern CMPtype __bid_eqdd2 (_Decimal64, _Decimal64); hidden_proto(__bid_eqdd2); extern CMPtype __bid_eqsd2 (_Decimal32, _Decimal32); hidden_proto(__bid_eqsd2); extern CMPtype __bid_eqtd2 (_Decimal128, _Decimal128); hidden_proto(__bid_eqtd2); extern CMPtype __bid_gedd2 (_Decimal64, _Decimal64); hidden_proto(__bid_gedd2); extern CMPtype __bid_gesd2 (_Decimal32, _Decimal32); hidden_proto(__bid_gesd2); extern CMPtype __bid_getd2 (_Decimal128, _Decimal128); hidden_proto(__bid_getd2); extern CMPtype __bid_gtdd2 (_Decimal64, _Decimal64); hidden_proto(__bid_gtdd2); extern CMPtype __bid_gtsd2 (_Decimal32, _Decimal32); hidden_proto(__bid_gtsd2); extern CMPtype __bid_gttd2 (_Decimal128, _Decimal128); hidden_proto(__bid_gttd2); extern CMPtype __bid_ledd2 (_Decimal64, _Decimal64); hidden_proto(__bid_ledd2); extern CMPtype __bid_lesd2 (_Decimal32, _Decimal32); hidden_proto(__bid_lesd2); extern CMPtype __bid_letd2 (_Decimal128, _Decimal128); hidden_proto(__bid_letd2); extern CMPtype __bid_ltdd2 (_Decimal64, _Decimal64); hidden_proto(__bid_ltdd2); extern CMPtype __bid_ltsd2 (_Decimal32, _Decimal32); hidden_proto(__bid_ltsd2); extern CMPtype __bid_lttd2 (_Decimal128, _Decimal128); hidden_proto(__bid_lttd2); extern CMPtype __bid_nedd2 (_Decimal64, _Decimal64); hidden_proto(__bid_nedd2); extern CMPtype __bid_nesd2 (_Decimal32, _Decimal32); hidden_proto(__bid_nesd2); extern CMPtype __bid_netd2 (_Decimal128, _Decimal128); hidden_proto(__bid_netd2); extern CMPtype __bid_unorddd2 (_Decimal64, _Decimal64); hidden_proto(__bid_unorddd2); extern CMPtype __bid_unordsd2 (_Decimal32, _Decimal32); hidden_proto(__bid_unordsd2); extern CMPtype __bid_unordtd2 (_Decimal128, _Decimal128); hidden_proto(__bid_unordtd2); extern _Decimal64 __bid_muldd3 (_Decimal64, _Decimal64); hidden_proto(__bid_muldd3); extern _Decimal32 __bid_mulsd3 (_Decimal32, _Decimal32); hidden_proto(__bid_mulsd3); extern _Decimal128 __bid_multd3 (_Decimal128, _Decimal128); hidden_proto(__bid_multd3); extern _Decimal64 __bid_extendsddd2 (_Decimal32); hidden_proto(__bid_extendsddd2); extern DFtype __bid_extendsddf (_Decimal32); hidden_proto(__bid_extendsddf); extern DItype __bid_fixsddi (_Decimal32); hidden_proto(__bid_fixsddi); extern SFtype __bid_truncsdsf (_Decimal32); hidden_proto(__bid_truncsdsf); extern SItype __bid_fixsdsi (_Decimal32); hidden_proto(__bid_fixsdsi); extern _Decimal128 __bid_extendsdtd2 (_Decimal32); hidden_proto(__bid_extendsdtd2); #if BID_HAS_TF_MODE extern TFtype __bid_extendsdtf (_Decimal32); hidden_proto(__bid_extendsdtf); #endif extern UDItype __bid_fixunssddi (_Decimal32); hidden_proto(__bid_fixunssddi); extern USItype __bid_fixunssdsi (_Decimal32); hidden_proto(__bid_fixunssdsi); #if BID_HAS_XF_MODE extern XFtype __bid_extendsdxf (_Decimal32); hidden_proto(__bid_extendsdxf); #endif extern _Decimal64 __bid_extendsfdd (SFtype); hidden_proto(__bid_extendsfdd); extern _Decimal32 __bid_extendsfsd (SFtype); hidden_proto(__bid_extendsfsd); extern _Decimal128 __bid_extendsftd (SFtype); hidden_proto(__bid_extendsftd); extern _Decimal64 __bid_floatsidd (SItype); hidden_proto(__bid_floatsidd); extern _Decimal32 __bid_floatsisd (SItype); hidden_proto(__bid_floatsisd); extern _Decimal128 __bid_floatsitd (SItype); hidden_proto(__bid_floatsitd); extern _Decimal64 __bid_trunctddd2 (_Decimal128); hidden_proto(__bid_trunctddd2); extern DFtype __bid_trunctddf (_Decimal128); hidden_proto(__bid_trunctddf); extern DItype __bid_fixtddi (_Decimal128); hidden_proto(__bid_fixtddi); extern _Decimal32 __bid_trunctdsd2 (_Decimal128); hidden_proto(__bid_trunctdsd2); extern SFtype __bid_trunctdsf (_Decimal128); hidden_proto(__bid_trunctdsf); extern SItype __bid_fixtdsi (_Decimal128); hidden_proto(__bid_fixtdsi); #if BID_HAS_TF_MODE extern TFtype __bid_trunctdtf (_Decimal128); hidden_proto(__bid_trunctdtf); #endif extern UDItype __bid_fixunstddi (_Decimal128); hidden_proto(__bid_fixunstddi); extern USItype __bid_fixunstdsi (_Decimal128); hidden_proto(__bid_fixunstdsi); #if BID_HAS_XF_MODE extern XFtype __bid_trunctdxf (_Decimal128); hidden_proto(__bid_trunctdxf); #endif #if BID_HAS_TF_MODE extern _Decimal64 __bid_trunctfdd (TFtype); hidden_proto(__bid_trunctfdd); extern _Decimal32 __bid_trunctfsd (TFtype); hidden_proto(__bid_trunctfsd); extern _Decimal128 __bid_extendtftd (TFtype); hidden_proto(__bid_extendtftd); #endif extern _Decimal64 __bid_floatunsdidd (UDItype); hidden_proto(__bid_floatunsdidd); extern _Decimal32 __bid_floatunsdisd (UDItype); hidden_proto(__bid_floatunsdisd); extern _Decimal128 __bid_floatunsditd (UDItype); hidden_proto(__bid_floatunsditd); extern _Decimal64 __bid_floatunssidd (USItype); hidden_proto(__bid_floatunssidd); extern _Decimal32 __bid_floatunssisd (USItype); hidden_proto(__bid_floatunssisd); extern _Decimal128 __bid_floatunssitd (USItype); hidden_proto(__bid_floatunssitd); #if BID_HAS_XF_MODE extern _Decimal64 __bid_truncxfdd (XFtype); hidden_proto(__bid_truncxfdd); extern _Decimal32 __bid_truncxfsd (XFtype); hidden_proto(__bid_truncxfsd); extern _Decimal128 __bid_extendxftd (XFtype); hidden_proto(__bid_extendxftd); #endif extern int isinfd32 (_Decimal32); extern int isinfd64 (_Decimal64); extern int isinfd128 (_Decimal128); #if BID_HAS_HF_MODE extern _Decimal32 __bid_extendhfsd (HFtype); hidden_proto(__bid_extendhfsd); extern _Decimal64 __bid_extendhfdd (HFtype); hidden_proto(__bid_extendhfdd); extern _Decimal128 __bid_extendhftd (HFtype); hidden_proto(__bid_extendhftd); extern HFtype __bid_truncsdhf (_Decimal32); hidden_proto(__bid_truncsdhf); extern HFtype __bid_truncddhf (_Decimal64); hidden_proto(__bid_truncddhf); extern HFtype __bid_trunctdhf (_Decimal128); hidden_proto(__bid_trunctdhf); #endif #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */ extern void __dfp_set_round (int); extern int __dfp_get_round (void); extern void __dfp_clear_except (void); extern int __dfp_test_except (int); extern void __dfp_raise_except (int); #if BID_HAS_GCC_DECIMAL_INTRINSICS /* Used by gcc intrinsics. We have to define them after UINT128 is defined. */ union decimal32 { _Decimal32 d; UINT32 i; }; union decimal64 { _Decimal64 d; UINT64 i; }; union decimal128 { _Decimal128 d; UINT128 i; }; #if BID_HAS_TF_MODE union float128 { TFtype f; UINT128 i; }; #endif #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */ #endif /* _BID_GCC_INTRINSICS_H */ libdfp-1.0.17/libbid/bid_inline_add.h000066400000000000000000001063031504475242000173500ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * * Helper add functions (for fma) * * __BID_INLINE__ UINT64 get_add64( * UINT64 sign_x, int exponent_x, UINT64 coefficient_x, * UINT64 sign_y, int exponent_y, UINT64 coefficient_y, * int rounding_mode) * * __BID_INLINE__ UINT64 get_add128( * UINT64 sign_x, int exponent_x, UINT64 coefficient_x, * UINT64 sign_y, int final_exponent_y, UINT128 CY, * int extra_digits, int rounding_mode) * ***************************************************************************** * * Algorithm description: * * get_add64: same as BID64 add, but arguments are unpacked and there * are no special case checks * * get_add128: add 64-bit coefficient to 128-bit product (which contains * 16+extra_digits decimal digits), * return BID64 result * - the exponents are compared and the two coefficients are * properly aligned for addition/subtraction * - multiple paths are needed * - final result exponent is calculated and the lower term is * rounded first if necessary, to avoid manipulating * coefficients longer than 128 bits * ****************************************************************************/ #ifndef _INLINE_BID_ADD_H_ #define _INLINE_BID_ADD_H_ #include "bid_internal.h" #define MAX_FORMAT_DIGITS 16 #define DECIMAL_EXPONENT_BIAS 398 #define MASK_BINARY_EXPONENT 0x7ff0000000000000ull #define BINARY_EXPONENT_BIAS 0x3ff #define UPPER_EXPON_LIMIT 51 /////////////////////////////////////////////////////////////////////// // // get_add64() is essentially the same as bid_add(), except that // the arguments are unpacked // ////////////////////////////////////////////////////////////////////// __BID_INLINE__ UINT64 get_add64 (UINT64 sign_x, int exponent_x, UINT64 coefficient_x, UINT64 sign_y, int exponent_y, UINT64 coefficient_y, int rounding_mode, unsigned *fpsc) { UINT128 CA, CT, CT_new; UINT64 sign_a, sign_b, coefficient_a, coefficient_b, sign_s, sign_ab, rem_a; UINT64 saved_ca, saved_cb, C0_64, C64, remainder_h, T1, carry, tmp, C64_new; int_double tempx; int exponent_a, exponent_b, diff_dec_expon; int bin_expon_ca, extra_digits, amount, scale_k, scale_ca; unsigned rmode, status; // sort arguments by exponent if (exponent_x <= exponent_y) { sign_a = sign_y; exponent_a = exponent_y; coefficient_a = coefficient_y; sign_b = sign_x; exponent_b = exponent_x; coefficient_b = coefficient_x; } else { sign_a = sign_x; exponent_a = exponent_x; coefficient_a = coefficient_x; sign_b = sign_y; exponent_b = exponent_y; coefficient_b = coefficient_y; } // exponent difference diff_dec_expon = exponent_a - exponent_b; /* get binary coefficients of x and y */ //--- get number of bits in the coefficients of x and y --- tempx.d = (double) coefficient_a; bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; if (!coefficient_a) { return get_BID64 (sign_b, exponent_b, coefficient_b, rounding_mode, fpsc); } if (diff_dec_expon > MAX_FORMAT_DIGITS) { // normalize a to a 16-digit coefficient scale_ca = estimate_decimal_digits[bin_expon_ca]; if (coefficient_a >= power10_table_128[scale_ca].w[0]) scale_ca++; scale_k = 16 - scale_ca; coefficient_a *= power10_table_128[scale_k].w[0]; diff_dec_expon -= scale_k; exponent_a -= scale_k; /* get binary coefficients of x and y */ //--- get number of bits in the coefficients of x and y --- tempx.d = (double) coefficient_a; bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; if (diff_dec_expon > MAX_FORMAT_DIGITS) { #ifdef SET_STATUS_FLAGS if (coefficient_b) { __set_status_flags (fpsc, INEXACT_EXCEPTION); } #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (((rounding_mode) & 3) && coefficient_b) // not ROUNDING_TO_NEAREST { switch (rounding_mode) { case ROUNDING_DOWN: if (sign_b) { coefficient_a -= ((((SINT64) sign_a) >> 63) | 1); if (coefficient_a < 1000000000000000ull) { exponent_a--; coefficient_a = 9999999999999999ull; } else if (coefficient_a >= 10000000000000000ull) { exponent_a++; coefficient_a = 1000000000000000ull; } } break; case ROUNDING_UP: if (!sign_b) { coefficient_a += ((((SINT64) sign_a) >> 63) | 1); if (coefficient_a < 1000000000000000ull) { exponent_a--; coefficient_a = 9999999999999999ull; } else if (coefficient_a >= 10000000000000000ull) { exponent_a++; coefficient_a = 1000000000000000ull; } } break; default: // RZ if (sign_a != sign_b) { coefficient_a--; if (coefficient_a < 1000000000000000ull) { exponent_a--; coefficient_a = 9999999999999999ull; } } break; } } else #endif #endif // check special case here if ((coefficient_a == 1000000000000000ull) && (diff_dec_expon == MAX_FORMAT_DIGITS + 1) && (sign_a ^ sign_b) && (coefficient_b > 5000000000000000ull)) { coefficient_a = 9999999999999999ull; exponent_a--; } return get_BID64 (sign_a, exponent_a, coefficient_a, rounding_mode, fpsc); } } // test whether coefficient_a*10^(exponent_a-exponent_b) may exceed 2^62 if (bin_expon_ca + estimate_bin_expon[diff_dec_expon] < 60) { // coefficient_a*10^(exponent_a-exponent_b)<2^63 // multiply by 10^(exponent_a-exponent_b) coefficient_a *= power10_table_128[diff_dec_expon].w[0]; // sign mask sign_b = ((SINT64) sign_b) >> 63; // apply sign to coeff. of b coefficient_b = (coefficient_b + sign_b) ^ sign_b; // apply sign to coefficient a sign_a = ((SINT64) sign_a) >> 63; coefficient_a = (coefficient_a + sign_a) ^ sign_a; coefficient_a += coefficient_b; // get sign sign_s = ((SINT64) coefficient_a) >> 63; coefficient_a = (coefficient_a + sign_s) ^ sign_s; sign_s &= 0x8000000000000000ull; // coefficient_a < 10^16 ? if (coefficient_a < power10_table_128[MAX_FORMAT_DIGITS].w[0]) { #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rounding_mode == ROUNDING_DOWN && (!coefficient_a) && sign_a != sign_b) sign_s = 0x8000000000000000ull; #endif #endif return get_BID64 (sign_s, exponent_b, coefficient_a, rounding_mode, fpsc); } // otherwise rounding is necessary // already know coefficient_a<10^19 // coefficient_a < 10^17 ? if (coefficient_a < power10_table_128[17].w[0]) extra_digits = 1; else if (coefficient_a < power10_table_128[18].w[0]) extra_digits = 2; else extra_digits = 3; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rounding_mode; if (sign_s && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif coefficient_a += round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT, coefficient_a, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C64 = CT.w[1] >> amount; } else { // coefficient_a*10^(exponent_a-exponent_b) is large sign_s = sign_a; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rounding_mode; if (sign_s && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif // check whether we can take faster path scale_ca = estimate_decimal_digits[bin_expon_ca]; sign_ab = sign_a ^ sign_b; sign_ab = ((SINT64) sign_ab) >> 63; // T1 = 10^(16-diff_dec_expon) T1 = power10_table_128[16 - diff_dec_expon].w[0]; // get number of digits in coefficient_a //P_ca = power10_table_128[scale_ca].w[0]; //P_ca_m1 = power10_table_128[scale_ca-1].w[0]; if (coefficient_a >= power10_table_128[scale_ca].w[0]) { scale_ca++; //P_ca_m1 = P_ca; //P_ca = power10_table_128[scale_ca].w[0]; } scale_k = 16 - scale_ca; // apply sign //Ts = (T1 + sign_ab) ^ sign_ab; // test range of ca //X = coefficient_a + Ts - P_ca_m1; // addition saved_ca = coefficient_a - T1; coefficient_a = (SINT64) saved_ca *(SINT64) power10_table_128[scale_k].w[0]; extra_digits = diff_dec_expon - scale_k; // apply sign saved_cb = (coefficient_b + sign_ab) ^ sign_ab; // add 10^16 and rounding constant coefficient_b = saved_cb + 10000000000000000ull + round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT, coefficient_b, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C0_64 = CT.w[1] >> amount; // result coefficient C64 = C0_64 + coefficient_a; // filter out difficult (corner) cases // the following test is equivalent to // ( (initial_coefficient_a + Ts) < P_ca && // (initial_coefficient_a + Ts) > P_ca_m1 ), // which ensures the number of digits in coefficient_a does not change // after adding (the appropriately scaled and rounded) coefficient_b if ((UINT64) (C64 - 1000000000000000ull - 1) > 9000000000000000ull - 2) { if (C64 >= 10000000000000000ull) { // result has more than 16 digits if (!scale_k) { // must divide coeff_a by 10 saved_ca = saved_ca + T1; __mul_64x64_to_128 (CA, saved_ca, 0x3333333333333334ull); //reciprocals10_64[1]); coefficient_a = CA.w[1] >> 1; rem_a = saved_ca - (coefficient_a << 3) - (coefficient_a << 1); coefficient_a = coefficient_a - T1; saved_cb += /*90000000000000000 */ +rem_a * power10_table_128[diff_dec_expon].w[0]; } else coefficient_a = (SINT64) (saved_ca - T1 - (T1 << 3)) * (SINT64) power10_table_128[scale_k - 1].w[0]; extra_digits++; coefficient_b = saved_cb + 100000000000000000ull + round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT, coefficient_b, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C0_64 = CT.w[1] >> amount; // result coefficient C64 = C0_64 + coefficient_a; } else if (C64 <= 1000000000000000ull) { // less than 16 digits in result coefficient_a = (SINT64) saved_ca *(SINT64) power10_table_128[scale_k + 1].w[0]; //extra_digits --; exponent_b--; coefficient_b = (saved_cb << 3) + (saved_cb << 1) + 100000000000000000ull + round_const_table[rmode][extra_digits]; // get P*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (CT_new, coefficient_b, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C0_64 = CT_new.w[1] >> amount; // result coefficient C64_new = C0_64 + coefficient_a; if (C64_new < 10000000000000000ull) { C64 = C64_new; #ifdef SET_STATUS_FLAGS CT = CT_new; #endif } else exponent_b++; } } } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits // is exactly .5 // this is the same as fractional part of // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero // get remainder remainder_h = CT.w[1] << (64 - amount); // test whether fractional part is 0 if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) { C64--; } } #endif #ifdef SET_STATUS_FLAGS status = INEXACT_EXCEPTION; // get remainder remainder_h = CT.w[1] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if ((remainder_h == 0x8000000000000000ull) && (CT.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; default: // round up __add_carry_out (tmp, carry, CT.w[0], reciprocals10_64[extra_digits]); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; break; } __set_status_flags (fpsc, status); #endif return get_BID64 (sign_s, exponent_b + extra_digits, C64, rounding_mode, fpsc); } /////////////////////////////////////////////////////////////////// // round 128-bit coefficient and return result in BID64 format // do not worry about midpoint cases ////////////////////////////////////////////////////////////////// static UINT64 __bid_simple_round64_sticky (UINT64 sign, int exponent, UINT128 P, int extra_digits, int rounding_mode, unsigned *fpsc) { UINT128 Q_high, Q_low, C128; UINT64 C64; int amount, rmode; rmode = rounding_mode; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (sign && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #endif #endif __add_128_64 (P, P, round_const_table[rmode][extra_digits]); // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_full (Q_high, Q_low, P, reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; __shr_128 (C128, Q_high, amount); C64 = __low_64 (C128); #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, INEXACT_EXCEPTION); #endif return get_BID64 (sign, exponent, C64, rounding_mode, fpsc); } /////////////////////////////////////////////////////////////////// // round 128-bit coefficient and return result in BID64 format /////////////////////////////////////////////////////////////////// static UINT64 __bid_full_round64 (UINT64 sign, int exponent, UINT128 P, int extra_digits, int rounding_mode, unsigned *fpsc) { UINT128 Q_high, Q_low, C128, Stemp, PU; UINT64 remainder_h, C64, carry, CY; int amount, amount2, rmode, status = 0; if (exponent < 0) { if (exponent >= -16 && (extra_digits + exponent < 0)) { extra_digits = -exponent; #ifdef SET_STATUS_FLAGS if (extra_digits > 0) { rmode = rounding_mode; if (sign && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; __add_128_128 (PU, P, round_const_table_128[rmode][extra_digits]); if (__unsigned_compare_gt_128 (power10_table_128[extra_digits + 15], PU)) status = UNDERFLOW_EXCEPTION; } #endif } } if (extra_digits > 0) { exponent += extra_digits; rmode = rounding_mode; if (sign && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; __add_128_128 (P, P, round_const_table_128[rmode][extra_digits]); // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_full (Q_high, Q_low, P, reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; __shr_128_long (C128, Q_high, amount); C64 = __low_64 (C128); #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits // is exactly .5 // get remainder amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & Q_high.w[0]; if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) { C64--; } } #endif #ifdef SET_STATUS_FLAGS status |= INEXACT_EXCEPTION; // get remainder remainder_h = Q_high.w[0] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Q_low.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1], reciprocals10_128[extra_digits].w[1], CY); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } __set_status_flags (fpsc, status); #endif } else { C64 = P.w[0]; if (!C64) { sign = 0; if (rounding_mode == ROUNDING_DOWN) sign = 0x8000000000000000ull; } } return get_BID64 (sign, exponent, C64, rounding_mode, fpsc); } ///////////////////////////////////////////////////////////////////////////////// // round 192-bit coefficient (P, remainder_P) and return result in BID64 format // the lowest 64 bits (remainder_P) are used for midpoint checking only //////////////////////////////////////////////////////////////////////////////// static UINT64 __bid_full_round64_remainder (UINT64 sign, int exponent, UINT128 P, int extra_digits, UINT64 remainder_P, int rounding_mode, unsigned *fpsc, unsigned uf_status) { UINT128 Q_high, Q_low, C128, Stemp; UINT64 remainder_h, C64, carry, CY; int amount, amount2, rmode, status = uf_status; rmode = rounding_mode; if (sign && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; if (rmode == ROUNDING_UP && remainder_P) { P.w[0]++; if (!P.w[0]) P.w[1]++; } if (extra_digits) { __add_128_64 (P, P, round_const_table[rmode][extra_digits]); // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_full (Q_high, Q_low, P, reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; __shr_128 (C128, Q_high, amount); C64 = __low_64 (C128); #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (!remainder_P && (C64 & 1)) { // check whether fractional part of initial_P/10^extra_digits // is exactly .5 // get remainder amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & Q_high.w[0]; if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) { C64--; } } #endif #ifdef SET_STATUS_FLAGS status |= INEXACT_EXCEPTION; if (!remainder_P) { // get remainder remainder_h = Q_high.w[0] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Q_low.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1], reciprocals10_128[extra_digits].w[1], CY); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } } __set_status_flags (fpsc, status); #endif } else { C64 = P.w[0]; #ifdef SET_STATUS_FLAGS if (remainder_P) { __set_status_flags (fpsc, uf_status | INEXACT_EXCEPTION); } #endif } return get_BID64 (sign, exponent + extra_digits, C64, rounding_mode, fpsc); } /////////////////////////////////////////////////////////////////// // get P/10^extra_digits // result fits in 64 bits /////////////////////////////////////////////////////////////////// __BID_INLINE__ UINT64 __truncate (UINT128 P, int extra_digits) // extra_digits <= 16 { UINT128 Q_high, Q_low, C128; UINT64 C64; int amount; // get P*(2^M[extra_digits])/10^extra_digits __mul_128x128_full (Q_high, Q_low, P, reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; __shr_128 (C128, Q_high, amount); C64 = __low_64 (C128); return C64; } /////////////////////////////////////////////////////////////////// // return number of decimal digits in 128-bit value X /////////////////////////////////////////////////////////////////// __BID_INLINE__ int __get_dec_digits64 (UINT128 X) { int_double tempx; int digits_x, bin_expon_cx; if (!X.w[1]) { //--- get number of bits in the coefficients of x and y --- tempx.d = (double) X.w[0]; bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; // get number of decimal digits in the coeff_x digits_x = estimate_decimal_digits[bin_expon_cx]; if (X.w[0] >= power10_table_128[digits_x].w[0]) digits_x++; return digits_x; } tempx.d = (double) X.w[1]; bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; // get number of decimal digits in the coeff_x digits_x = estimate_decimal_digits[bin_expon_cx + 64]; if (__unsigned_compare_ge_128 (X, power10_table_128[digits_x])) digits_x++; return digits_x; } //////////////////////////////////////////////////////////////////////////////// // // add 64-bit coefficient to 128-bit coefficient, return result in BID64 format // //////////////////////////////////////////////////////////////////////////////// __BID_INLINE__ UINT64 get_add128 (UINT64 sign_x, int exponent_x, UINT64 coefficient_x, UINT64 sign_y, int final_exponent_y, UINT128 CY, int extra_digits, int rounding_mode, unsigned *fpsc) { UINT128 CY_L, CX, FS, F, CT, ST, T2; UINT64 CYh, CY0L, T, S, coefficient_y, remainder_y; SINT64 D = 0; int_double tempx; int diff_dec_expon, extra_digits2, exponent_y, status; int extra_dx, diff_dec2, bin_expon_cx, digits_x, rmode; // CY has more than 16 decimal digits exponent_y = final_exponent_y - extra_digits; #ifdef IEEE_ROUND_NEAREST_TIES_AWAY rounding_mode = 0; #endif #ifdef IEEE_ROUND_NEAREST rounding_mode = 0; #endif if (exponent_x > exponent_y) { // normalize x //--- get number of bits in the coefficients of x and y --- tempx.d = (double) coefficient_x; bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; // get number of decimal digits in the coeff_x digits_x = estimate_decimal_digits[bin_expon_cx]; if (coefficient_x >= power10_table_128[digits_x].w[0]) digits_x++; extra_dx = 16 - digits_x; coefficient_x *= power10_table_128[extra_dx].w[0]; if ((sign_x ^ sign_y) && (coefficient_x == 1000000000000000ull)) { extra_dx++; coefficient_x = 10000000000000000ull; } exponent_x -= extra_dx; if (exponent_x > exponent_y) { // exponent_x > exponent_y diff_dec_expon = exponent_x - exponent_y; if (exponent_x <= final_exponent_y + 1) { __mul_64x64_to_128 (CX, coefficient_x, power10_table_128[diff_dec_expon].w[0]); if (sign_x == sign_y) { __add_128_128 (CT, CY, CX); if ((exponent_x > final_exponent_y) /*&& (final_exponent_y>0) */ ) extra_digits++; if (__unsigned_compare_ge_128 (CT, power10_table_128[16 + extra_digits])) extra_digits++; } else { __sub_128_128 (CT, CY, CX); if (((SINT64) CT.w[1]) < 0) { CT.w[0] = 0 - CT.w[0]; CT.w[1] = 0 - CT.w[1]; if (CT.w[0]) CT.w[1]--; sign_y = sign_x; } else if (!(CT.w[1] | CT.w[0])) { sign_y = (rounding_mode != ROUNDING_DOWN) ? 0 : 0x8000000000000000ull; } if ((exponent_x + 1 >= final_exponent_y) /*&& (final_exponent_y>=0) */ ) { extra_digits = __get_dec_digits64 (CT) - 16; if (extra_digits <= 0) { if (!CT.w[0] && rounding_mode == ROUNDING_DOWN) sign_y = 0x8000000000000000ull; return get_BID64 (sign_y, exponent_y, CT.w[0], rounding_mode, fpsc); } } else if (__unsigned_compare_gt_128 (power10_table_128[15 + extra_digits], CT)) extra_digits--; } return __bid_full_round64 (sign_y, exponent_y, CT, extra_digits, rounding_mode, fpsc); } // diff_dec2+extra_digits is the number of digits to eliminate from // argument CY diff_dec2 = exponent_x - final_exponent_y; if (diff_dec2 >= 17) { #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY if ((rounding_mode) & 3) { switch (rounding_mode) { case ROUNDING_UP: if (!sign_y) { D = ((SINT64) (sign_x ^ sign_y)) >> 63; D = D + D + 1; coefficient_x += D; } break; case ROUNDING_DOWN: if (sign_y) { D = ((SINT64) (sign_x ^ sign_y)) >> 63; D = D + D + 1; coefficient_x += D; } break; case ROUNDING_TO_ZERO: if (sign_y != sign_x) { D = 0 - 1; coefficient_x += D; } break; } if (coefficient_x < 1000000000000000ull) { coefficient_x -= D; coefficient_x = D + (coefficient_x << 1) + (coefficient_x << 3); exponent_x--; } } #endif #endif #ifdef SET_STATUS_FLAGS if (CY.w[1] | CY.w[0]) __set_status_flags (fpsc, INEXACT_EXCEPTION); #endif return get_BID64 (sign_x, exponent_x, coefficient_x, rounding_mode, fpsc); } // here exponent_x <= 16+final_exponent_y // truncate CY to 16 dec. digits CYh = __truncate (CY, extra_digits); // get remainder T = power10_table_128[extra_digits].w[0]; __mul_64x64_to_64 (CY0L, CYh, T); remainder_y = CY.w[0] - CY0L; // align coeff_x, CYh __mul_64x64_to_128 (CX, coefficient_x, power10_table_128[diff_dec2].w[0]); if (sign_x == sign_y) { __add_128_64 (CT, CX, CYh); if (__unsigned_compare_ge_128 (CT, power10_table_128[16 + diff_dec2])) diff_dec2++; } else { if (remainder_y) CYh++; __sub_128_64 (CT, CX, CYh); if (__unsigned_compare_gt_128 (power10_table_128[15 + diff_dec2], CT)) diff_dec2--; } return __bid_full_round64_remainder (sign_x, final_exponent_y, CT, diff_dec2, remainder_y, rounding_mode, fpsc, 0); } } // Here (exponent_x <= exponent_y) { diff_dec_expon = exponent_y - exponent_x; if (diff_dec_expon > MAX_FORMAT_DIGITS) { rmode = rounding_mode; if ((sign_x ^ sign_y)) { if (!CY.w[0]) CY.w[1]--; CY.w[0]--; if (__unsigned_compare_gt_128 (power10_table_128[15 + extra_digits], CY)) { if (rmode & 3) { extra_digits--; final_exponent_y--; } else { CY.w[0] = 1000000000000000ull; CY.w[1] = 0; extra_digits = 0; } } } __scale128_10 (CY, CY); extra_digits++; CY.w[0] |= 1; return __bid_simple_round64_sticky (sign_y, final_exponent_y, CY, extra_digits, rmode, fpsc); } // apply sign to coeff_x sign_x ^= sign_y; sign_x = ((SINT64) sign_x) >> 63; CX.w[0] = (coefficient_x + sign_x) ^ sign_x; CX.w[1] = sign_x; // check whether CY (rounded to 16 digits) and CX have // any digits in the same position diff_dec2 = final_exponent_y - exponent_x; if (diff_dec2 <= 17) { // align CY to 10^ex S = power10_table_128[diff_dec_expon].w[0]; __mul_64x128_short (CY_L, S, CY); __add_128_128 (ST, CY_L, CX); extra_digits2 = __get_dec_digits64 (ST) - 16; return __bid_full_round64 (sign_y, exponent_x, ST, extra_digits2, rounding_mode, fpsc); } // truncate CY to 16 dec. digits CYh = __truncate (CY, extra_digits); // get remainder T = power10_table_128[extra_digits].w[0]; __mul_64x64_to_64 (CY0L, CYh, T); coefficient_y = CY.w[0] - CY0L; // add rounding constant rmode = rounding_mode; if (sign_y && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (!(rmode & 3)) //ROUNDING_TO_NEAREST #endif #endif { coefficient_y += round_const_table[rmode][extra_digits]; } // align coefficient_y, coefficient_x S = power10_table_128[diff_dec_expon].w[0]; __mul_64x64_to_128 (F, coefficient_y, S); // fraction __add_128_128 (FS, F, CX); #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif { // rounding code, here RN_EVEN // 10^(extra_digits+diff_dec_expon) T2 = power10_table_128[diff_dec_expon + extra_digits]; if (__unsigned_compare_gt_128 (FS, T2) || ((CYh & 1) && __test_equal_128 (FS, T2))) { CYh++; __sub_128_128 (FS, FS, T2); } } #endif #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY if (rmode == 4) //ROUNDING_TO_NEAREST #endif { // rounding code, here RN_AWAY // 10^(extra_digits+diff_dec_expon) T2 = power10_table_128[diff_dec_expon + extra_digits]; if (__unsigned_compare_ge_128 (FS, T2)) { CYh++; __sub_128_128 (FS, FS, T2); } } #endif #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY switch (rmode) { case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if ((SINT64) FS.w[1] < 0) { CYh--; if (CYh < 1000000000000000ull) { CYh = 9999999999999999ull; final_exponent_y--; } } else { T2 = power10_table_128[diff_dec_expon + extra_digits]; if (__unsigned_compare_ge_128 (FS, T2)) { CYh++; __sub_128_128 (FS, FS, T2); } } break; case ROUNDING_UP: if ((SINT64) FS.w[1] < 0) break; T2 = power10_table_128[diff_dec_expon + extra_digits]; if (__unsigned_compare_gt_128 (FS, T2)) { CYh += 2; __sub_128_128 (FS, FS, T2); } else if ((FS.w[1] == T2.w[1]) && (FS.w[0] == T2.w[0])) { CYh++; FS.w[1] = FS.w[0] = 0; } else if (FS.w[1] | FS.w[0]) CYh++; break; } #endif #endif #ifdef SET_STATUS_FLAGS status = INEXACT_EXCEPTION; #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY if (!(rmode & 3)) #endif #endif { // RN modes if ((FS.w[1] == round_const_table_128[0][diff_dec_expon + extra_digits].w[1]) && (FS.w[0] == round_const_table_128[0][diff_dec_expon + extra_digits].w[0])) status = EXACT_STATUS; } #ifndef IEEE_ROUND_NEAREST #ifndef IEEE_ROUND_NEAREST_TIES_AWAY else if (!FS.w[1] && !FS.w[0]) status = EXACT_STATUS; #endif #endif __set_status_flags (fpsc, status); #endif return get_BID64 (sign_y, final_exponent_y, CYh, rounding_mode, fpsc); } } ////////////////////////////////////////////////////////////////////////// // // If coefficient_z is less than 16 digits long, normalize to 16 digits // ///////////////////////////////////////////////////////////////////////// static UINT64 BID_normalize (UINT64 sign_z, int exponent_z, UINT64 coefficient_z, UINT64 round_dir, int round_flag, int rounding_mode, unsigned *fpsc) { SINT64 D; int_double tempx; int digits_z, bin_expon, scale, rmode; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = rounding_mode; if (sign_z && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else if (coefficient_z >= power10_table_128[15].w[0]) return z; #endif #endif //--- get number of bits in the coefficients of x and y --- tempx.d = (double) coefficient_z; bin_expon = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff; // get number of decimal digits in the coeff_x digits_z = estimate_decimal_digits[bin_expon]; if (coefficient_z >= power10_table_128[digits_z].w[0]) digits_z++; scale = 16 - digits_z; exponent_z -= scale; if (exponent_z < 0) { scale += exponent_z; exponent_z = 0; } coefficient_z *= power10_table_128[scale].w[0]; #ifdef SET_STATUS_FLAGS if (round_flag) { __set_status_flags (fpsc, INEXACT_EXCEPTION); if (coefficient_z < 1000000000000000ull) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); else if ((coefficient_z == 1000000000000000ull) && !exponent_z && ((SINT64) (round_dir ^ sign_z) < 0) && round_flag && (rmode == ROUNDING_DOWN || rmode == ROUNDING_TO_ZERO)) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); } #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (round_flag && (rmode & 3)) { D = round_dir ^ sign_z; if (rmode == ROUNDING_UP) { if (D >= 0) coefficient_z++; } else { if (D < 0) coefficient_z--; if (coefficient_z < 1000000000000000ull && exponent_z) { coefficient_z = 9999999999999999ull; exponent_z--; } } } #endif #endif return get_BID64 (sign_z, exponent_z, coefficient_z, rounding_mode, fpsc); } ////////////////////////////////////////////////////////////////////////// // // 0*10^ey + cz*10^ez, ey> 52) - 0x3ff; scale_cz = estimate_decimal_digits[bin_expon]; if (coefficient_z >= power10_table_128[scale_cz].w[0]) scale_cz++; scale_k = 16 - scale_cz; if (diff_expon < scale_k) scale_k = diff_expon; coefficient_z *= power10_table_128[scale_k].w[0]; return get_BID64 (sign_z, exponent_z - scale_k, coefficient_z, *prounding_mode, fpsc); } #endif libdfp-1.0.17/libbid/bid_internal.h000066400000000000000000002364671504475242000171150ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef __BIDECIMAL_H #define __BIDECIMAL_H #include "bid_conf.h" #include "bid_functions.h" #define __BID_INLINE__ static __inline /********************************************************************* * * Logical Shift Macros * *********************************************************************/ #define __shr_128(Q, A, k) \ { \ (Q).w[0] = (A).w[0] >> k; \ (Q).w[0] |= (A).w[1] << (64-k); \ (Q).w[1] = (A).w[1] >> k; \ } #define __shr_128_long(Q, A, k) \ { \ if((k)<64) { \ (Q).w[0] = (A).w[0] >> k; \ (Q).w[0] |= (A).w[1] << (64-k); \ (Q).w[1] = (A).w[1] >> k; \ } \ else { \ (Q).w[0] = (A).w[1]>>((k)-64); \ (Q).w[1] = 0; \ } \ } #define __shl_128_long(Q, A, k) \ { \ if((k)<64) { \ (Q).w[1] = (A).w[1] << k; \ (Q).w[1] |= (A).w[0] >> (64-k); \ (Q).w[0] = (A).w[0] << k; \ } \ else { \ (Q).w[1] = (A).w[0]<<((k)-64); \ (Q).w[0] = 0; \ } \ } #define __low_64(Q) (Q).w[0] /********************************************************************* * * String Macros * *********************************************************************/ #define tolower_macro(x) (((unsigned char)((x)-'A')<=('Z'-'A'))?((x)-'A'+'a'):(x)) /********************************************************************* * * Compare Macros * *********************************************************************/ // greater than // return 0 if A<=B // non-zero if A>B #define __unsigned_compare_gt_128(A, B) \ ((A.w[1]>B.w[1]) || ((A.w[1]==B.w[1]) && (A.w[0]>B.w[0]))) // greater-or-equal #define __unsigned_compare_ge_128(A, B) \ ((A.w[1]>B.w[1]) || ((A.w[1]==B.w[1]) && (A.w[0]>=B.w[0]))) #define __test_equal_128(A, B) (((A).w[1]==(B).w[1]) && ((A).w[0]==(B).w[0])) // tighten exponent range #define __tight_bin_range_128(bp, P, bin_expon) \ { \ UINT64 M; \ M = 1; \ (bp) = (bin_expon); \ if((bp)<63) { \ M <<= ((bp)+1); \ if((P).w[0] >= M) (bp)++; } \ else if((bp)>64) { \ M <<= ((bp)+1-64); \ if(((P).w[1]>M) ||((P).w[1]==M && (P).w[0]))\ (bp)++; } \ else if((P).w[1]) (bp)++; \ } /********************************************************************* * * Add/Subtract Macros * *********************************************************************/ // add 64-bit value to 128-bit #define __add_128_64(R128, A128, B64) \ { \ UINT64 R64H; \ R64H = (A128).w[1]; \ (R128).w[0] = (B64) + (A128).w[0]; \ if((R128).w[0] < (B64)) \ R64H ++; \ (R128).w[1] = R64H; \ } // subtract 64-bit value from 128-bit #define __sub_128_64(R128, A128, B64) \ { \ UINT64 R64H; \ R64H = (A128).w[1]; \ if((A128).w[0] < (B64)) \ R64H --; \ (R128).w[1] = R64H; \ (R128).w[0] = (A128).w[0] - (B64); \ } // add 128-bit value to 128-bit // assume no carry-out #define __add_128_128(R128, A128, B128) \ { \ UINT128 Q128; \ Q128.w[1] = (A128).w[1]+(B128).w[1]; \ Q128.w[0] = (B128).w[0] + (A128).w[0]; \ if(Q128.w[0] < (B128).w[0]) \ Q128.w[1] ++; \ (R128).w[1] = Q128.w[1]; \ (R128).w[0] = Q128.w[0]; \ } #define __sub_128_128(R128, A128, B128) \ { \ UINT128 Q128; \ Q128.w[1] = (A128).w[1]-(B128).w[1]; \ Q128.w[0] = (A128).w[0] - (B128).w[0]; \ if((A128).w[0] < (B128).w[0]) \ Q128.w[1] --; \ (R128).w[1] = Q128.w[1]; \ (R128).w[0] = Q128.w[0]; \ } #define __add_carry_out(S, CY, X, Y) \ { \ UINT64 X1=X; \ S = X + Y; \ CY = (SX1) ? 1 : 0; \ } #define __sub_borrow_in_out(S, CY, X, Y, CI) \ { \ UINT64 X1, X0=X; \ X1 = X - CI; \ S = X1 - Y; \ CY = ((S>X1) || (X1>X0)) ? 1 : 0; \ } // increment C128 and check for rounding overflow: // if (C_128) = 10^34 then (C_128) = 10^33 and increment the exponent #define INCREMENT(C_128, exp) \ { \ C_128.w[0]++; \ if (C_128.w[0] == 0) C_128.w[1]++; \ if (C_128.w[1] == 0x0001ed09bead87c0ull && \ C_128.w[0] == 0x378d8e6400000000ull) { \ exp++; \ C_128.w[1] = 0x0000314dc6448d93ull; \ C_128.w[0] = 0x38c15b0a00000000ull; \ } \ } // decrement C128 and check for rounding underflow, but only at the // boundary: if C_128 = 10^33 - 1 and exp > 0 then C_128 = 10^34 - 1 // and decrement the exponent #define DECREMENT(C_128, exp) \ { \ C_128.w[0]--; \ if (C_128.w[0] == 0xffffffffffffffffull) C_128.w[1]--; \ if (C_128.w[1] == 0x0000314dc6448d93ull && \ C_128.w[0] == 0x38c15b09ffffffffull && exp > 0) { \ exp--; \ C_128.w[1] = 0x0001ed09bead87c0ull; \ C_128.w[0] = 0x378d8e63ffffffffull; \ } \ } /********************************************************************* * * Multiply Macros * *********************************************************************/ #define __mul_64x64_to_64(P64, CX, CY) (P64) = (CX) * (CY) /*************************************** * Signed, Full 64x64-bit Multiply ***************************************/ #define __imul_64x64_to_128(P, CX, CY) \ { \ UINT64 SX, SY; \ __mul_64x64_to_128(P, CX, CY); \ \ SX = ((SINT64)(CX))>>63; \ SY = ((SINT64)(CY))>>63; \ SX &= CY; SY &= CX; \ \ (P).w[1] = (P).w[1] - SX - SY; \ } /*************************************** * Signed, Full 64x128-bit Multiply ***************************************/ #define __imul_64x128_full(Ph, Ql, A, B) \ { \ UINT128 ALBL, ALBH, QM2, QM; \ \ __imul_64x64_to_128(ALBH, (A), (B).w[1]); \ __imul_64x64_to_128(ALBL, (A), (B).w[0]); \ \ (Ql).w[0] = ALBL.w[0]; \ QM.w[0] = ALBL.w[1]; \ QM.w[1] = ((SINT64)ALBL.w[1])>>63; \ __add_128_128(QM2, ALBH, QM); \ (Ql).w[1] = QM2.w[0]; \ Ph = QM2.w[1]; \ } /***************************************************** * Unsigned Multiply Macros *****************************************************/ // get full 64x64bit product // #define __mul_64x64_to_128(P, CX, CY) \ { \ UINT64 CXH, CXL, CYH,CYL,PL,PH,PM,PM2;\ CXH = (CX) >> 32; \ CXL = (UINT32)(CX); \ CYH = (CY) >> 32; \ CYL = (UINT32)(CY); \ \ PM = CXH*CYL; \ PH = CXH*CYH; \ PL = CXL*CYL; \ PM2 = CXL*CYH; \ PH += (PM>>32); \ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \ \ (P).w[1] = PH + (PM>>32); \ (P).w[0] = (PM<<32)+(UINT32)PL; \ } // get full 64x64bit product // Note: // This macro is used for CX < 2^61, CY < 2^61 // #define __mul_64x64_to_128_fast(P, CX, CY) \ { \ UINT64 CXH, CXL, CYH, CYL, PL, PH, PM; \ CXH = (CX) >> 32; \ CXL = (UINT32)(CX); \ CYH = (CY) >> 32; \ CYL = (UINT32)(CY); \ \ PM = CXH*CYL; \ PL = CXL*CYL; \ PH = CXH*CYH; \ PM += CXL*CYH; \ PM += (PL>>32); \ \ (P).w[1] = PH + (PM>>32); \ (P).w[0] = (PM<<32)+(UINT32)PL; \ } // used for CX< 2^60 #define __sqr64_fast(P, CX) \ { \ UINT64 CXH, CXL, PL, PH, PM; \ CXH = (CX) >> 32; \ CXL = (UINT32)(CX); \ \ PM = CXH*CXL; \ PL = CXL*CXL; \ PH = CXH*CXH; \ PM += PM; \ PM += (PL>>32); \ \ (P).w[1] = PH + (PM>>32); \ (P).w[0] = (PM<<32)+(UINT32)PL; \ } // get full 64x64bit product // Note: // This implementation is used for CX < 2^61, CY < 2^61 // #define __mul_64x64_to_64_high_fast(P, CX, CY) \ { \ UINT64 CXH, CXL, CYH, CYL, PL, PH, PM; \ CXH = (CX) >> 32; \ CXL = (UINT32)(CX); \ CYH = (CY) >> 32; \ CYL = (UINT32)(CY); \ \ PM = CXH*CYL; \ PL = CXL*CYL; \ PH = CXH*CYH; \ PM += CXL*CYH; \ PM += (PL>>32); \ \ (P) = PH + (PM>>32); \ } // get full 64x64bit product // #define __mul_64x64_to_128_full(P, CX, CY) \ { \ UINT64 CXH, CXL, CYH,CYL,PL,PH,PM,PM2;\ CXH = (CX) >> 32; \ CXL = (UINT32)(CX); \ CYH = (CY) >> 32; \ CYL = (UINT32)(CY); \ \ PM = CXH*CYL; \ PH = CXH*CYH; \ PL = CXL*CYL; \ PM2 = CXL*CYH; \ PH += (PM>>32); \ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \ \ (P).w[1] = PH + (PM>>32); \ (P).w[0] = (PM<<32)+(UINT32)PL; \ } #define __mul_128x128_high(Q, A, B) \ { \ UINT128 ALBL, ALBH, AHBL, AHBH, QM, QM2; \ \ __mul_64x64_to_128(ALBH, (A).w[0], (B).w[1]); \ __mul_64x64_to_128(AHBL, (B).w[0], (A).w[1]); \ __mul_64x64_to_128(ALBL, (A).w[0], (B).w[0]); \ __mul_64x64_to_128(AHBH, (A).w[1],(B).w[1]); \ \ __add_128_128(QM, ALBH, AHBL); \ __add_128_64(QM2, QM, ALBL.w[1]); \ __add_128_64((Q), AHBH, QM2.w[1]); \ } #define __mul_128x128_full(Qh, Ql, A, B) \ { \ UINT128 ALBL, ALBH, AHBL, AHBH, QM, QM2; \ \ __mul_64x64_to_128(ALBH, (A).w[0], (B).w[1]); \ __mul_64x64_to_128(AHBL, (B).w[0], (A).w[1]); \ __mul_64x64_to_128(ALBL, (A).w[0], (B).w[0]); \ __mul_64x64_to_128(AHBH, (A).w[1],(B).w[1]); \ \ __add_128_128(QM, ALBH, AHBL); \ (Ql).w[0] = ALBL.w[0]; \ __add_128_64(QM2, QM, ALBL.w[1]); \ __add_128_64((Qh), AHBH, QM2.w[1]); \ (Ql).w[1] = QM2.w[0]; \ } #define __mul_128x128_low(Ql, A, B) \ { \ UINT128 ALBL; \ UINT64 QM64; \ \ __mul_64x64_to_128(ALBL, (A).w[0], (B).w[0]); \ QM64 = (B).w[0]*(A).w[1] + (A).w[0]*(B).w[1]; \ \ (Ql).w[0] = ALBL.w[0]; \ (Ql).w[1] = QM64 + ALBL.w[1]; \ } #define __mul_64x128_low(Ql, A, B) \ { \ UINT128 ALBL, ALBH, QM2; \ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \ (Ql).w[0] = ALBL.w[0]; \ __add_128_64(QM2, ALBH, ALBL.w[1]); \ (Ql).w[1] = QM2.w[0]; \ } #define __mul_64x128_full(Ph, Ql, A, B) \ { \ UINT128 ALBL, ALBH, QM2; \ \ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \ \ (Ql).w[0] = ALBL.w[0]; \ __add_128_64(QM2, ALBH, ALBL.w[1]); \ (Ql).w[1] = QM2.w[0]; \ Ph = QM2.w[1]; \ } #define __mul_64x128_to_192(Q, A, B) \ { \ UINT128 ALBL, ALBH, QM2; \ \ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \ \ (Q).w[0] = ALBL.w[0]; \ __add_128_64(QM2, ALBH, ALBL.w[1]); \ (Q).w[1] = QM2.w[0]; \ (Q).w[2] = QM2.w[1]; \ } #define __mul_64x128_to192(Q, A, B) \ { \ UINT128 ALBL, ALBH, QM2; \ \ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \ \ (Q).w[0] = ALBL.w[0]; \ __add_128_64(QM2, ALBH, ALBL.w[1]); \ (Q).w[1] = QM2.w[0]; \ (Q).w[2] = QM2.w[1]; \ } #define __mul_128x128_to_256(P256, A, B) \ { \ UINT128 Qll, Qlh; \ UINT64 Phl, Phh, CY1, CY2; \ \ __mul_64x128_full(Phl, Qll, A.w[0], B); \ __mul_64x128_full(Phh, Qlh, A.w[1], B); \ (P256).w[0] = Qll.w[0]; \ __add_carry_out((P256).w[1],CY1, Qlh.w[0], Qll.w[1]); \ __add_carry_in_out((P256).w[2],CY2, Qlh.w[1], Phl, CY1); \ (P256).w[3] = Phh + CY2; \ } // // For better performance, will check A.w[1] against 0, // but not B.w[1] // Use this macro accordingly #define __mul_128x128_to_256_check_A(P256, A, B) \ { \ UINT128 Qll, Qlh; \ UINT64 Phl, Phh, CY1, CY2; \ \ __mul_64x128_full(Phl, Qll, A.w[0], B); \ (P256).w[0] = Qll.w[0]; \ if(A.w[1]) { \ __mul_64x128_full(Phh, Qlh, A.w[1], B); \ __add_carry_out((P256).w[1],CY1, Qlh.w[0], Qll.w[1]); \ __add_carry_in_out((P256).w[2],CY2, Qlh.w[1], Phl, CY1); \ (P256).w[3] = Phh + CY2; } \ else { \ (P256).w[1] = Qll.w[1]; \ (P256).w[2] = Phl; \ (P256).w[3] = 0; } \ } #define __mul_64x192_to_256(lP, lA, lB) \ { \ UINT128 lP0,lP1,lP2; \ UINT64 lC; \ __mul_64x64_to_128(lP0, lA, (lB).w[0]); \ __mul_64x64_to_128(lP1, lA, (lB).w[1]); \ __mul_64x64_to_128(lP2, lA, (lB).w[2]); \ (lP).w[0] = lP0.w[0]; \ __add_carry_out((lP).w[1],lC,lP1.w[0],lP0.w[1]); \ __add_carry_in_out((lP).w[2],lC,lP2.w[0],lP1.w[1],lC); \ (lP).w[3] = lP2.w[1] + lC; \ } #define __mul_64x256_to_320(P, A, B) \ { \ UINT128 lP0,lP1,lP2,lP3; \ UINT64 lC; \ __mul_64x64_to_128(lP0, A, (B).w[0]); \ __mul_64x64_to_128(lP1, A, (B).w[1]); \ __mul_64x64_to_128(lP2, A, (B).w[2]); \ __mul_64x64_to_128(lP3, A, (B).w[3]); \ (P).w[0] = lP0.w[0]; \ __add_carry_out((P).w[1],lC,lP1.w[0],lP0.w[1]); \ __add_carry_in_out((P).w[2],lC,lP2.w[0],lP1.w[1],lC); \ __add_carry_in_out((P).w[3],lC,lP3.w[0],lP2.w[1],lC); \ (P).w[4] = lP3.w[1] + lC; \ } #define __mul_192x192_to_384(P, A, B) \ { \ UINT256 P0,P1,P2; \ UINT64 CY; \ __mul_64x192_to_256(P0, (A).w[0], B); \ __mul_64x192_to_256(P1, (A).w[1], B); \ __mul_64x192_to_256(P2, (A).w[2], B); \ (P).w[0] = P0.w[0]; \ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \ (P).w[4] = P1.w[3] + CY; \ __add_carry_out((P).w[2],CY,P2.w[0],(P).w[2]); \ __add_carry_in_out((P).w[3],CY,P2.w[1],(P).w[3],CY); \ __add_carry_in_out((P).w[4],CY,P2.w[2],(P).w[4],CY); \ (P).w[5] = P2.w[3] + CY; \ } #define __mul_64x320_to_384(P, A, B) \ { \ UINT128 lP0,lP1,lP2,lP3,lP4; \ UINT64 lC; \ __mul_64x64_to_128(lP0, A, (B).w[0]); \ __mul_64x64_to_128(lP1, A, (B).w[1]); \ __mul_64x64_to_128(lP2, A, (B).w[2]); \ __mul_64x64_to_128(lP3, A, (B).w[3]); \ __mul_64x64_to_128(lP4, A, (B).w[4]); \ (P).w[0] = lP0.w[0]; \ __add_carry_out((P).w[1],lC,lP1.w[0],lP0.w[1]); \ __add_carry_in_out((P).w[2],lC,lP2.w[0],lP1.w[1],lC); \ __add_carry_in_out((P).w[3],lC,lP3.w[0],lP2.w[1],lC); \ __add_carry_in_out((P).w[4],lC,lP4.w[0],lP3.w[1],lC); \ (P).w[5] = lP4.w[1] + lC; \ } // A*A // Full 128x128-bit product #define __sqr128_to_256(P256, A) \ { \ UINT128 Qll, Qlh, Qhh; \ UINT64 TMP_C1, TMP_C2; \ \ __mul_64x64_to_128(Qhh, A.w[1], A.w[1]); \ __mul_64x64_to_128(Qlh, A.w[0], A.w[1]); \ Qhh.w[1] += (Qlh.w[1]>>63); \ Qlh.w[1] = (Qlh.w[1]+Qlh.w[1])|(Qlh.w[0]>>63); \ Qlh.w[0] += Qlh.w[0]; \ __mul_64x64_to_128(Qll, A.w[0], A.w[0]); \ \ __add_carry_out((P256).w[1],TMP_C1, Qlh.w[0], Qll.w[1]); \ (P256).w[0] = Qll.w[0]; \ __add_carry_in_out((P256).w[2],TMP_C2, Qlh.w[1], Qhh.w[0], TMP_C1); \ (P256).w[3] = Qhh.w[1]+TMP_C2; \ } #define __mul_128x128_to_256_low_high(PQh, PQl, A, B) \ { \ UINT128 Qll, Qlh; \ UINT64 Phl, Phh, C1, C2; \ \ __mul_64x128_full(Phl, Qll, A.w[0], B); \ __mul_64x128_full(Phh, Qlh, A.w[1], B); \ (PQl).w[0] = Qll.w[0]; \ __add_carry_out((PQl).w[1],C1, Qlh.w[0], Qll.w[1]); \ __add_carry_in_out((PQh).w[0],C2, Qlh.w[1], Phl, C1); \ (PQh).w[1] = Phh + C2; \ } #define __mul_256x256_to_512(P, A, B) \ { \ UINT512 P0,P1,P2,P3; \ UINT64 CY; \ __mul_64x256_to_320(P0, (A).w[0], B); \ __mul_64x256_to_320(P1, (A).w[1], B); \ __mul_64x256_to_320(P2, (A).w[2], B); \ __mul_64x256_to_320(P3, (A).w[3], B); \ (P).w[0] = P0.w[0]; \ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \ __add_carry_in_out((P).w[4],CY,P1.w[3],P0.w[4],CY); \ (P).w[5] = P1.w[4] + CY; \ __add_carry_out((P).w[2],CY,P2.w[0],(P).w[2]); \ __add_carry_in_out((P).w[3],CY,P2.w[1],(P).w[3],CY); \ __add_carry_in_out((P).w[4],CY,P2.w[2],(P).w[4],CY); \ __add_carry_in_out((P).w[5],CY,P2.w[3],(P).w[5],CY); \ (P).w[6] = P2.w[4] + CY; \ __add_carry_out((P).w[3],CY,P3.w[0],(P).w[3]); \ __add_carry_in_out((P).w[4],CY,P3.w[1],(P).w[4],CY); \ __add_carry_in_out((P).w[5],CY,P3.w[2],(P).w[5],CY); \ __add_carry_in_out((P).w[6],CY,P3.w[3],(P).w[6],CY); \ (P).w[7] = P3.w[4] + CY; \ } #define __mul_192x256_to_448(P, A, B) \ { \ UINT512 P0,P1,P2; \ UINT64 CY; \ __mul_64x256_to_320(P0, (A).w[0], B); \ __mul_64x256_to_320(P1, (A).w[1], B); \ __mul_64x256_to_320(P2, (A).w[2], B); \ (P).w[0] = P0.w[0]; \ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \ __add_carry_in_out((P).w[4],CY,P1.w[3],P0.w[4],CY); \ (P).w[5] = P1.w[4] + CY; \ __add_carry_out((P).w[2],CY,P2.w[0],(P).w[2]); \ __add_carry_in_out((P).w[3],CY,P2.w[1],(P).w[3],CY); \ __add_carry_in_out((P).w[4],CY,P2.w[2],(P).w[4],CY); \ __add_carry_in_out((P).w[5],CY,P2.w[3],(P).w[5],CY); \ (P).w[6] = P2.w[4] + CY; \ } #define __mul_320x320_to_640(P, A, B) \ { \ UINT512 P0,P1,P2,P3; \ UINT64 CY; \ __mul_256x256_to_512((P), (A), B); \ __mul_64x256_to_320(P1, (A).w[4], B); \ __mul_64x256_to_320(P2, (B).w[4], A); \ __mul_64x64_to_128(P3, (A).w[4], (B).w[4]); \ __add_carry_out((P0).w[0],CY,P1.w[0],P2.w[0]); \ __add_carry_in_out((P0).w[1],CY,P1.w[1],P2.w[1],CY); \ __add_carry_in_out((P0).w[2],CY,P1.w[2],P2.w[2],CY); \ __add_carry_in_out((P0).w[3],CY,P1.w[3],P2.w[3],CY); \ __add_carry_in_out((P0).w[4],CY,P1.w[4],P2.w[4],CY); \ P3.w[1] += CY; \ __add_carry_out((P).w[4],CY,(P).w[4],P0.w[0]); \ __add_carry_in_out((P).w[5],CY,(P).w[5],P0.w[1],CY); \ __add_carry_in_out((P).w[6],CY,(P).w[6],P0.w[2],CY); \ __add_carry_in_out((P).w[7],CY,(P).w[7],P0.w[3],CY); \ __add_carry_in_out((P).w[8],CY,P3.w[0],P0.w[4],CY); \ (P).w[9] = P3.w[1] + CY; \ } #define __mul_384x384_to_768(P, A, B) \ { \ UINT512 P0,P1,P2,P3; \ UINT64 CY; \ __mul_320x320_to_640((P), (A), B); \ __mul_64x320_to_384(P1, (A).w[5], B); \ __mul_64x320_to_384(P2, (B).w[5], A); \ __mul_64x64_to_128(P3, (A).w[5], (B).w[5]); \ __add_carry_out((P0).w[0],CY,P1.w[0],P2.w[0]); \ __add_carry_in_out((P0).w[1],CY,P1.w[1],P2.w[1],CY); \ __add_carry_in_out((P0).w[2],CY,P1.w[2],P2.w[2],CY); \ __add_carry_in_out((P0).w[3],CY,P1.w[3],P2.w[3],CY); \ __add_carry_in_out((P0).w[4],CY,P1.w[4],P2.w[4],CY); \ __add_carry_in_out((P0).w[5],CY,P1.w[5],P2.w[5],CY); \ P3.w[1] += CY; \ __add_carry_out((P).w[5],CY,(P).w[5],P0.w[0]); \ __add_carry_in_out((P).w[6],CY,(P).w[6],P0.w[1],CY); \ __add_carry_in_out((P).w[7],CY,(P).w[7],P0.w[2],CY); \ __add_carry_in_out((P).w[8],CY,(P).w[8],P0.w[3],CY); \ __add_carry_in_out((P).w[9],CY,(P).w[9],P0.w[4],CY); \ __add_carry_in_out((P).w[10],CY,P3.w[0],P0.w[5],CY); \ (P).w[11] = P3.w[1] + CY; \ } #define __mul_64x128_short(Ql, A, B) \ { \ UINT64 ALBH_L; \ \ __mul_64x64_to_64(ALBH_L, (A),(B).w[1]); \ __mul_64x64_to_128((Ql), (A), (B).w[0]); \ \ (Ql).w[1] += ALBH_L; \ } #define __scale128_10(D,_TMP) \ { \ UINT128 _TMP2,_TMP8; \ _TMP2.w[1] = (_TMP.w[1]<<1)|(_TMP.w[0]>>63); \ _TMP2.w[0] = _TMP.w[0]<<1; \ _TMP8.w[1] = (_TMP.w[1]<<3)|(_TMP.w[0]>>61); \ _TMP8.w[0] = _TMP.w[0]<<3; \ __add_128_128(D, _TMP2, _TMP8); \ } // 64x64-bit product #define __mul_64x64_to_128MACH(P128, CX64, CY64) \ { \ UINT64 CXH,CXL,CYH,CYL,PL,PH,PM,PM2; \ CXH = (CX64) >> 32; \ CXL = (UINT32)(CX64); \ CYH = (CY64) >> 32; \ CYL = (UINT32)(CY64); \ PM = CXH*CYL; \ PH = CXH*CYH; \ PL = CXL*CYL; \ PM2 = CXL*CYH; \ PH += (PM>>32); \ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \ (P128).w[1] = PH + (PM>>32); \ (P128).w[0] = (PM<<32)+(UINT32)PL; \ } // 64x64-bit product #define __mul_64x64_to_128HIGH(P64, CX64, CY64) \ { \ UINT64 CXH,CXL,CYH,CYL,PL,PH,PM,PM2; \ CXH = (CX64) >> 32; \ CXL = (UINT32)(CX64); \ CYH = (CY64) >> 32; \ CYL = (UINT32)(CY64); \ PM = CXH*CYL; \ PH = CXH*CYH; \ PL = CXL*CYL; \ PM2 = CXL*CYH; \ PH += (PM>>32); \ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \ P64 = PH + (PM>>32); \ } #define __mul_128x64_to_128(Q128, A64, B128) \ { \ UINT64 ALBH_L; \ ALBH_L = (A64) * (B128).w[1]; \ __mul_64x64_to_128MACH((Q128), (A64), (B128).w[0]); \ (Q128).w[1] += ALBH_L; \ } // might simplify by calculating just QM2.w[0] #define __mul_64x128_to_128(Ql, A, B) \ { \ UINT128 ALBL, ALBH, QM2; \ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \ (Ql).w[0] = ALBL.w[0]; \ __add_128_64(QM2, ALBH, ALBL.w[1]); \ (Ql).w[1] = QM2.w[0]; \ } /********************************************************************* * * BID Pack/Unpack Macros * *********************************************************************/ ///////////////////////////////////////// // BID64 definitions //////////////////////////////////////// #define DECIMAL_MAX_EXPON_64 767 #define DECIMAL_EXPONENT_BIAS 398 #define MAX_FORMAT_DIGITS 16 ///////////////////////////////////////// // BID128 definitions //////////////////////////////////////// #define DECIMAL_MAX_EXPON_128 12287 #define DECIMAL_EXPONENT_BIAS_128 6176 #define MAX_FORMAT_DIGITS_128 34 ///////////////////////////////////////// // BID32 definitions //////////////////////////////////////// #define DECIMAL_MAX_EXPON_32 191 #define DECIMAL_EXPONENT_BIAS_32 101 #define MAX_FORMAT_DIGITS_32 7 //////////////////////////////////////// // Constant Definitions /////////////////////////////////////// #define SPECIAL_ENCODING_MASK64 0x6000000000000000ull #define INFINITY_MASK64 0x7800000000000000ull #define SINFINITY_MASK64 0xf800000000000000ull #define SSNAN_MASK64 0xfc00000000000000ull #define NAN_MASK64 0x7c00000000000000ull #define SNAN_MASK64 0x7e00000000000000ull #define QUIET_MASK64 0xfdffffffffffffffull #define LARGE_COEFF_MASK64 0x0007ffffffffffffull #define LARGE_COEFF_HIGH_BIT64 0x0020000000000000ull #define SMALL_COEFF_MASK64 0x001fffffffffffffull #define EXPONENT_MASK64 0x3ff #define EXPONENT_SHIFT_LARGE64 51 #define EXPONENT_SHIFT_SMALL64 53 #define LARGEST_BID64 0x77fb86f26fc0ffffull #define SMALLEST_BID64 0xf7fb86f26fc0ffffull #define SMALL_COEFF_MASK128 0x0001ffffffffffffull #define LARGE_COEFF_MASK128 0x00007fffffffffffull #define EXPONENT_MASK128 0x3fff #define LARGEST_BID128_HIGH 0x5fffed09bead87c0ull #define LARGEST_BID128_LOW 0x378d8e63ffffffffull #define SPECIAL_ENCODING_MASK32 0x60000000ul #define INFINITY_MASK32 0x78000000ul #define LARGE_COEFF_MASK32 0x007ffffful #define LARGE_COEFF_HIGH_BIT32 0x00800000ul #define SMALL_COEFF_MASK32 0x001ffffful #define EXPONENT_MASK32 0xff #define LARGEST_BID32 0x77f8967f #define NAN_MASK32 0x7c000000 #define SNAN_MASK32 0x7e000000 #define MASK_BINARY_EXPONENT 0x7ff0000000000000ull #define BINARY_EXPONENT_BIAS 0x3ff #define UPPER_EXPON_LIMIT 51 // data needed for BID pack/unpack macros extern UINT64 round_const_table[][19]; extern UINT128 reciprocals10_128[]; extern int recip_scale[]; extern UINT128 power10_table_128[]; extern int estimate_decimal_digits[]; extern int estimate_bin_expon[]; extern UINT64 power10_index_binexp[]; extern int short_recip_scale[]; extern UINT64 reciprocals10_64[]; extern UINT128 power10_index_binexp_128[]; extern UINT128 round_const_table_128[][36]; ////////////////////////////////////////////// // Status Flag Handling ///////////////////////////////////////////// #ifndef __set_status_flags #define __set_status_flags(fpsc, status) *(fpsc) |= status #endif #define is_inexact(fpsc) ((*(fpsc))&INEXACT_EXCEPTION) __BID_INLINE__ UINT64 unpack_BID64 (UINT64 * psign_x, int *pexponent_x, UINT64 * pcoefficient_x, UINT64 x) { UINT64 tmp, coeff; *psign_x = x & 0x8000000000000000ull; if ((x & SPECIAL_ENCODING_MASK64) == SPECIAL_ENCODING_MASK64) { // special encodings // coefficient coeff = (x & LARGE_COEFF_MASK64) | LARGE_COEFF_HIGH_BIT64; if ((x & INFINITY_MASK64) == INFINITY_MASK64) { *pexponent_x = 0; *pcoefficient_x = x & 0xfe03ffffffffffffull; if ((x & 0x0003ffffffffffffull) >= 1000000000000000ull) *pcoefficient_x = x & 0xfe00000000000000ull; if ((x & NAN_MASK64) == INFINITY_MASK64) *pcoefficient_x = x & SINFINITY_MASK64; return 0; // NaN or Infinity } // check for non-canonical values if (coeff >= 10000000000000000ull) coeff = 0; *pcoefficient_x = coeff; // get exponent tmp = x >> EXPONENT_SHIFT_LARGE64; *pexponent_x = (int) (tmp & EXPONENT_MASK64); return coeff; } // exponent tmp = x >> EXPONENT_SHIFT_SMALL64; *pexponent_x = (int) (tmp & EXPONENT_MASK64); // coefficient *pcoefficient_x = (x & SMALL_COEFF_MASK64); return *pcoefficient_x; } // // BID64 pack macro (general form) // __BID_INLINE__ UINT64 get_BID64 (UINT64 sgn, int expon, UINT64 coeff, int rmode, unsigned *fpsc) { UINT128 Stemp, Q_low; UINT64 QH, r, mask, C64, remainder_h, CY, carry; int extra_digits, amount, amount2; unsigned status; if (coeff > 9999999999999999ull) { expon++; coeff = 1000000000000000ull; } // check for possible underflow/overflow if (((unsigned) expon) >= 3 * 256) { if (expon < 0) { // underflow if (expon + MAX_FORMAT_DIGITS < 0) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == ROUNDING_DOWN && sgn) return 0x8000000000000001ull; if (rmode == ROUNDING_UP && !sgn) return 1ull; #endif #endif // result is 0 return sgn; } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (sgn && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #endif #endif // get digits to be shifted out extra_digits = -expon; coeff += round_const_table[rmode][extra_digits]; // get coeff*(2^M[extra_digits])/10^extra_digits __mul_64x128_full (QH, Q_low, coeff, reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; C64 = QH >> amount; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits is exactly .5 // get remainder amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & QH; if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) { C64--; } } #endif #ifdef SET_STATUS_FLAGS if (is_inexact (fpsc)) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); else { status = INEXACT_EXCEPTION; // get remainder remainder_h = QH << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Q_low.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1], reciprocals10_128[extra_digits].w[1], CY); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } if (status != EXACT_STATUS) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status); } #endif return sgn | C64; } while (coeff < 1000000000000000ull && expon >= 3 * 256) { expon--; coeff = (coeff << 3) + (coeff << 1); } if (expon > DECIMAL_MAX_EXPON_64) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif // overflow r = sgn | INFINITY_MASK64; switch (rmode) { case ROUNDING_DOWN: if (!sgn) r = LARGEST_BID64; break; case ROUNDING_TO_ZERO: r = sgn | LARGEST_BID64; break; case ROUNDING_UP: // round up if (sgn) r = SMALLEST_BID64; } return r; } } mask = 1; mask <<= EXPONENT_SHIFT_SMALL64; // check whether coefficient fits in 10*5+3 bits if (coeff < mask) { r = expon; r <<= EXPONENT_SHIFT_SMALL64; r |= (coeff | sgn); return r; } // special format // eliminate the case coeff==10^16 after rounding if (coeff == 10000000000000000ull) { r = expon + 1; r <<= EXPONENT_SHIFT_SMALL64; r |= (1000000000000000ull | sgn); return r; } r = expon; r <<= EXPONENT_SHIFT_LARGE64; r |= (sgn | SPECIAL_ENCODING_MASK64); // add coeff, without leading bits mask = (mask >> 2) - 1; coeff &= mask; r |= coeff; return r; } // // No overflow/underflow checking // __BID_INLINE__ UINT64 fast_get_BID64 (UINT64 sgn, int expon, UINT64 coeff) { UINT64 r, mask; mask = 1; mask <<= EXPONENT_SHIFT_SMALL64; // check whether coefficient fits in 10*5+3 bits if (coeff < mask) { r = expon; r <<= EXPONENT_SHIFT_SMALL64; r |= (coeff | sgn); return r; } // special format // eliminate the case coeff==10^16 after rounding if (coeff == 10000000000000000ull) { r = expon + 1; r <<= EXPONENT_SHIFT_SMALL64; r |= (1000000000000000ull | sgn); return r; } r = expon; r <<= EXPONENT_SHIFT_LARGE64; r |= (sgn | SPECIAL_ENCODING_MASK64); // add coeff, without leading bits mask = (mask >> 2) - 1; coeff &= mask; r |= coeff; return r; } // // no underflow checking // __BID_INLINE__ UINT64 fast_get_BID64_check_OF (UINT64 sgn, int expon, UINT64 coeff, int rmode, unsigned *fpsc) { UINT64 r, mask; if (((unsigned) expon) >= 3 * 256 - 1) { if ((expon == 3 * 256 - 1) && coeff == 10000000000000000ull) { expon = 3 * 256; coeff = 1000000000000000ull; } if (((unsigned) expon) >= 3 * 256) { while (coeff < 1000000000000000ull && expon >= 3 * 256) { expon--; coeff = (coeff << 3) + (coeff << 1); } if (expon > DECIMAL_MAX_EXPON_64) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif // overflow r = sgn | INFINITY_MASK64; switch (rmode) { case ROUNDING_DOWN: if (!sgn) r = LARGEST_BID64; break; case ROUNDING_TO_ZERO: r = sgn | LARGEST_BID64; break; case ROUNDING_UP: // round up if (sgn) r = SMALLEST_BID64; } return r; } } } mask = 1; mask <<= EXPONENT_SHIFT_SMALL64; // check whether coefficient fits in 10*5+3 bits if (coeff < mask) { r = expon; r <<= EXPONENT_SHIFT_SMALL64; r |= (coeff | sgn); return r; } // special format // eliminate the case coeff==10^16 after rounding if (coeff == 10000000000000000ull) { r = expon + 1; r <<= EXPONENT_SHIFT_SMALL64; r |= (1000000000000000ull | sgn); return r; } r = expon; r <<= EXPONENT_SHIFT_LARGE64; r |= (sgn | SPECIAL_ENCODING_MASK64); // add coeff, without leading bits mask = (mask >> 2) - 1; coeff &= mask; r |= coeff; return r; } // // No overflow/underflow checking // or checking for coefficients equal to 10^16 (after rounding) // __BID_INLINE__ UINT64 very_fast_get_BID64 (UINT64 sgn, int expon, UINT64 coeff) { UINT64 r, mask; mask = 1; mask <<= EXPONENT_SHIFT_SMALL64; // check whether coefficient fits in 10*5+3 bits if (coeff < mask) { r = expon; r <<= EXPONENT_SHIFT_SMALL64; r |= (coeff | sgn); return r; } // special format r = expon; r <<= EXPONENT_SHIFT_LARGE64; r |= (sgn | SPECIAL_ENCODING_MASK64); // add coeff, without leading bits mask = (mask >> 2) - 1; coeff &= mask; r |= coeff; return r; } // // No overflow/underflow checking or checking for coefficients above 2^53 // __BID_INLINE__ UINT64 very_fast_get_BID64_small_mantissa (UINT64 sgn, int expon, UINT64 coeff) { // no UF/OF UINT64 r; r = expon; r <<= EXPONENT_SHIFT_SMALL64; r |= (coeff | sgn); return r; } // // This pack macro is used when underflow is known to occur // __BID_INLINE__ UINT64 get_BID64_UF (UINT64 sgn, int expon, UINT64 coeff, UINT64 R, int rmode, unsigned *fpsc) { UINT128 C128, Q_low, Stemp; UINT64 C64, remainder_h, QH, carry, CY; int extra_digits, amount, amount2; unsigned status; // underflow if (expon + MAX_FORMAT_DIGITS < 0) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == ROUNDING_DOWN && sgn) return 0x8000000000000001ull; if (rmode == ROUNDING_UP && !sgn) return 1ull; #endif #endif // result is 0 return sgn; } // 10*coeff coeff = (coeff << 3) + (coeff << 1); #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (sgn && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #endif #endif if (R) coeff |= 1; // get digits to be shifted out extra_digits = 1 - expon; C128.w[0] = coeff + round_const_table[rmode][extra_digits]; // get coeff*(2^M[extra_digits])/10^extra_digits __mul_64x128_full (QH, Q_low, C128.w[0], reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; C64 = QH >> amount; //__shr_128(C128, Q_high, amount); #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits is exactly .5 // get remainder amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & QH; if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) { C64--; } } #endif #ifdef SET_STATUS_FLAGS if (is_inexact (fpsc)) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); else { status = INEXACT_EXCEPTION; // get remainder remainder_h = QH << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Q_low.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1], reciprocals10_128[extra_digits].w[1], CY); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } if (status != EXACT_STATUS) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status); } #endif return sgn | C64; } // // This pack macro doesnot check for coefficients above 2^53 // __BID_INLINE__ UINT64 get_BID64_small_mantissa (UINT64 sgn, int expon, UINT64 coeff, int rmode, unsigned *fpsc) { UINT128 C128, Q_low, Stemp; UINT64 r, mask, C64, remainder_h, QH, carry, CY; int extra_digits, amount, amount2; unsigned status; // check for possible underflow/overflow if (((unsigned) expon) >= 3 * 256) { if (expon < 0) { // underflow if (expon + MAX_FORMAT_DIGITS < 0) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == ROUNDING_DOWN && sgn) return 0x8000000000000001ull; if (rmode == ROUNDING_UP && !sgn) return 1ull; #endif #endif // result is 0 return sgn; } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (sgn && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #endif #endif // get digits to be shifted out extra_digits = -expon; C128.w[0] = coeff + round_const_table[rmode][extra_digits]; // get coeff*(2^M[extra_digits])/10^extra_digits __mul_64x128_full (QH, Q_low, C128.w[0], reciprocals10_128[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = recip_scale[extra_digits]; C64 = QH >> amount; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits is exactly .5 // get remainder amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & QH; if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) { C64--; } } #endif #ifdef SET_STATUS_FLAGS if (is_inexact (fpsc)) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); else { status = INEXACT_EXCEPTION; // get remainder remainder_h = QH << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1] || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1] && Q_low.w[0] < reciprocals10_128[extra_digits].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Q_low.w[0], reciprocals10_128[extra_digits].w[0]); __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1], reciprocals10_128[extra_digits].w[1], CY); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } if (status != EXACT_STATUS) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status); } #endif return sgn | C64; } while (coeff < 1000000000000000ull && expon >= 3 * 256) { expon--; coeff = (coeff << 3) + (coeff << 1); } if (expon > DECIMAL_MAX_EXPON_64) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif // overflow r = sgn | INFINITY_MASK64; switch (rmode) { case ROUNDING_DOWN: if (!sgn) r = LARGEST_BID64; break; case ROUNDING_TO_ZERO: r = sgn | LARGEST_BID64; break; case ROUNDING_UP: // round up if (sgn) r = SMALLEST_BID64; } return r; } else { mask = 1; mask <<= EXPONENT_SHIFT_SMALL64; if (coeff >= mask) { r = expon; r <<= EXPONENT_SHIFT_LARGE64; r |= (sgn | SPECIAL_ENCODING_MASK64); // add coeff, without leading bits mask = (mask >> 2) - 1; coeff &= mask; r |= coeff; return r; } } } r = expon; r <<= EXPONENT_SHIFT_SMALL64; r |= (coeff | sgn); return r; } /***************************************************************************** * * BID128 pack/unpack macros * *****************************************************************************/ // // Macro for handling BID128 underflow // sticky bit given as additional argument // __BID_INLINE__ UINT128 * handle_UF_128_rem (UINT128 * pres, UINT64 sgn, int expon, UINT128 CQ, UINT64 R, unsigned *prounding_mode, unsigned *fpsc) { UINT128 T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1, CQ2, CQ8; UINT64 carry, CY; int ed2, amount; unsigned rmode, status; // UF occurs if (expon + MAX_FORMAT_DIGITS_128 < 0) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif pres->w[1] = sgn; pres->w[0] = 0; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if ((sgn && *prounding_mode == ROUNDING_DOWN) || (!sgn && *prounding_mode == ROUNDING_UP)) pres->w[0] = 1ull; #endif #endif return pres; } // CQ *= 10 CQ2.w[1] = (CQ.w[1] << 1) | (CQ.w[0] >> 63); CQ2.w[0] = CQ.w[0] << 1; CQ8.w[1] = (CQ.w[1] << 3) | (CQ.w[0] >> 61); CQ8.w[0] = CQ.w[0] << 3; __add_128_128 (CQ, CQ2, CQ8); // add remainder if (R) CQ.w[0] |= 1; ed2 = 1 - expon; // add rounding constant to CQ #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = *prounding_mode; if (sgn && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif T128 = round_const_table_128[rmode][ed2]; __add_carry_out (CQ.w[0], carry, T128.w[0], CQ.w[0]); CQ.w[1] = CQ.w[1] + T128.w[1] + carry; TP128 = reciprocals10_128[ed2]; __mul_128x128_full (Qh, Ql, CQ, TP128); amount = recip_scale[ed2]; if (amount >= 64) { CQ.w[0] = Qh.w[1] >> (amount - 64); CQ.w[1] = 0; } else { __shr_128 (CQ, Qh, amount); } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (!(*prounding_mode)) #endif if (CQ.w[0] & 1) { // check whether fractional part of initial_P/10^ed1 is exactly .5 // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); if (!Qh1.w[1] && !Qh1.w[0] && (Ql.w[1] < reciprocals10_128[ed2].w[1] || (Ql.w[1] == reciprocals10_128[ed2].w[1] && Ql.w[0] < reciprocals10_128[ed2].w[0]))) { CQ.w[0]--; } } #endif #ifdef SET_STATUS_FLAGS if (is_inexact (fpsc)) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); else { status = INEXACT_EXCEPTION; // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[ed2].w[1] || (Ql.w[1] == reciprocals10_128[ed2].w[1] && Ql.w[0] < reciprocals10_128[ed2].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if ((!Qh1.w[1]) && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[ed2].w[1] || (Ql.w[1] == reciprocals10_128[ed2].w[1] && Ql.w[0] < reciprocals10_128[ed2].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Ql.w[0], reciprocals10_128[ed2].w[0]); __add_carry_in_out (Stemp.w[1], carry, Ql.w[1], reciprocals10_128[ed2].w[1], CY); __shr_128_long (Qh, Qh1, (128 - amount)); Tmp.w[0] = 1; Tmp.w[1] = 0; __shl_128_long (Tmp1, Tmp, amount); Qh.w[0] += carry; if (Qh.w[0] < carry) Qh.w[1]++; if (__unsigned_compare_ge_128 (Qh, Tmp1)) status = EXACT_STATUS; } if (status != EXACT_STATUS) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status); } #endif pres->w[1] = sgn | CQ.w[1]; pres->w[0] = CQ.w[0]; return pres; } // // Macro for handling BID128 underflow // __BID_INLINE__ UINT128 * handle_UF_128 (UINT128 * pres, UINT64 sgn, int expon, UINT128 CQ, unsigned *prounding_mode, unsigned *fpsc) { UINT128 T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1; UINT64 carry, CY; int ed2, amount; unsigned rmode, status; // UF occurs if (expon + MAX_FORMAT_DIGITS_128 < 0) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif pres->w[1] = sgn; pres->w[0] = 0; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if ((sgn && *prounding_mode == ROUNDING_DOWN) || (!sgn && *prounding_mode == ROUNDING_UP)) pres->w[0] = 1ull; #endif #endif return pres; } ed2 = 0 - expon; // add rounding constant to CQ #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST rmode = *prounding_mode; if (sgn && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #else rmode = 0; #endif #else rmode = 0; #endif T128 = round_const_table_128[rmode][ed2]; __add_carry_out (CQ.w[0], carry, T128.w[0], CQ.w[0]); CQ.w[1] = CQ.w[1] + T128.w[1] + carry; TP128 = reciprocals10_128[ed2]; __mul_128x128_full (Qh, Ql, CQ, TP128); amount = recip_scale[ed2]; if (amount >= 64) { CQ.w[0] = Qh.w[1] >> (amount - 64); CQ.w[1] = 0; } else { __shr_128 (CQ, Qh, amount); } #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (!(*prounding_mode)) #endif if (CQ.w[0] & 1) { // check whether fractional part of initial_P/10^ed1 is exactly .5 // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); if (!Qh1.w[1] && !Qh1.w[0] && (Ql.w[1] < reciprocals10_128[ed2].w[1] || (Ql.w[1] == reciprocals10_128[ed2].w[1] && Ql.w[0] < reciprocals10_128[ed2].w[0]))) { CQ.w[0]--; } } #endif #ifdef SET_STATUS_FLAGS if (is_inexact (fpsc)) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); else { status = INEXACT_EXCEPTION; // get remainder __shl_128_long (Qh1, Qh, (128 - amount)); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[ed2].w[1] || (Ql.w[1] == reciprocals10_128[ed2].w[1] && Ql.w[0] < reciprocals10_128[ed2].w[0]))) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if ((!Qh1.w[1]) && (!Qh1.w[0]) && (Ql.w[1] < reciprocals10_128[ed2].w[1] || (Ql.w[1] == reciprocals10_128[ed2].w[1] && Ql.w[0] < reciprocals10_128[ed2].w[0]))) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp.w[0], CY, Ql.w[0], reciprocals10_128[ed2].w[0]); __add_carry_in_out (Stemp.w[1], carry, Ql.w[1], reciprocals10_128[ed2].w[1], CY); __shr_128_long (Qh, Qh1, (128 - amount)); Tmp.w[0] = 1; Tmp.w[1] = 0; __shl_128_long (Tmp1, Tmp, amount); Qh.w[0] += carry; if (Qh.w[0] < carry) Qh.w[1]++; if (__unsigned_compare_ge_128 (Qh, Tmp1)) status = EXACT_STATUS; } if (status != EXACT_STATUS) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status); } #endif pres->w[1] = sgn | CQ.w[1]; pres->w[0] = CQ.w[0]; return pres; } // // BID128 unpack, input passed by value // __BID_INLINE__ UINT64 unpack_BID128_value (UINT64 * psign_x, int *pexponent_x, UINT128 * pcoefficient_x, UINT128 x) { UINT128 coeff, T33, T34; UINT64 ex; *psign_x = (x.w[1]) & 0x8000000000000000ull; // special encodings if ((x.w[1] & INFINITY_MASK64) >= SPECIAL_ENCODING_MASK64) { if ((x.w[1] & INFINITY_MASK64) < INFINITY_MASK64) { // non-canonical input pcoefficient_x->w[0] = 0; pcoefficient_x->w[1] = 0; ex = (x.w[1]) >> 47; *pexponent_x = ((int) ex) & EXPONENT_MASK128; return 0; } // 10^33 T33 = power10_table_128[33]; /*coeff.w[0] = x.w[0]; coeff.w[1] = (x.w[1]) & LARGE_COEFF_MASK128; pcoefficient_x->w[0] = x.w[0]; pcoefficient_x->w[1] = x.w[1]; if (__unsigned_compare_ge_128 (coeff, T33)) // non-canonical pcoefficient_x->w[1] &= (~LARGE_COEFF_MASK128); */ pcoefficient_x->w[0] = x.w[0]; pcoefficient_x->w[1] = (x.w[1]) & 0x00003fffffffffffull; if (__unsigned_compare_ge_128 ((*pcoefficient_x), T33)) // non-canonical { pcoefficient_x->w[1] = (x.w[1]) & 0xfe00000000000000ull; pcoefficient_x->w[0] = 0; } else pcoefficient_x->w[1] = (x.w[1]) & 0xfe003fffffffffffull; if ((x.w[1] & NAN_MASK64) == INFINITY_MASK64) { pcoefficient_x->w[0] = 0; pcoefficient_x->w[1] = x.w[1] & SINFINITY_MASK64; } *pexponent_x = 0; return 0; // NaN or Infinity } coeff.w[0] = x.w[0]; coeff.w[1] = (x.w[1]) & SMALL_COEFF_MASK128; // 10^34 T34 = power10_table_128[34]; // check for non-canonical values if (__unsigned_compare_ge_128 (coeff, T34)) coeff.w[0] = coeff.w[1] = 0; pcoefficient_x->w[0] = coeff.w[0]; pcoefficient_x->w[1] = coeff.w[1]; ex = (x.w[1]) >> 49; *pexponent_x = ((int) ex) & EXPONENT_MASK128; return coeff.w[0] | coeff.w[1]; } // // BID128 unpack, input pased by reference // __BID_INLINE__ UINT64 unpack_BID128 (UINT64 * psign_x, int *pexponent_x, UINT128 * pcoefficient_x, UINT128 * px) { UINT128 coeff, T33, T34; UINT64 ex; *psign_x = (px->w[1]) & 0x8000000000000000ull; // special encodings if ((px->w[1] & INFINITY_MASK64) >= SPECIAL_ENCODING_MASK64) { if ((px->w[1] & INFINITY_MASK64) < INFINITY_MASK64) { // non-canonical input pcoefficient_x->w[0] = 0; pcoefficient_x->w[1] = 0; ex = (px->w[1]) >> 47; *pexponent_x = ((int) ex) & EXPONENT_MASK128; return 0; } // 10^33 T33 = power10_table_128[33]; coeff.w[0] = px->w[0]; coeff.w[1] = (px->w[1]) & LARGE_COEFF_MASK128; pcoefficient_x->w[0] = px->w[0]; pcoefficient_x->w[1] = px->w[1]; if (__unsigned_compare_ge_128 (coeff, T33)) { // non-canonical pcoefficient_x->w[1] &= (~LARGE_COEFF_MASK128); pcoefficient_x->w[0] = 0; } *pexponent_x = 0; return 0; // NaN or Infinity } coeff.w[0] = px->w[0]; coeff.w[1] = (px->w[1]) & SMALL_COEFF_MASK128; // 10^34 T34 = power10_table_128[34]; // check for non-canonical values if (__unsigned_compare_ge_128 (coeff, T34)) coeff.w[0] = coeff.w[1] = 0; pcoefficient_x->w[0] = coeff.w[0]; pcoefficient_x->w[1] = coeff.w[1]; ex = (px->w[1]) >> 49; *pexponent_x = ((int) ex) & EXPONENT_MASK128; return coeff.w[0] | coeff.w[1]; } // // Pack macro checks for overflow, but not underflow // __BID_INLINE__ UINT128 * get_BID128_very_fast_OF (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff, unsigned *prounding_mode, unsigned *fpsc) { UINT128 T; UINT64 tmp, tmp2; if ((unsigned) expon > DECIMAL_MAX_EXPON_128) { if (expon - MAX_FORMAT_DIGITS_128 <= DECIMAL_MAX_EXPON_128) { T = power10_table_128[MAX_FORMAT_DIGITS_128 - 1]; while (__unsigned_compare_gt_128 (T, coeff) && expon > DECIMAL_MAX_EXPON_128) { coeff.w[1] = (coeff.w[1] << 3) + (coeff.w[1] << 1) + (coeff.w[0] >> 61) + (coeff.w[0] >> 63); tmp2 = coeff.w[0] << 3; coeff.w[0] = (coeff.w[0] << 1) + tmp2; if (coeff.w[0] < tmp2) coeff.w[1]++; expon--; } } if ((unsigned) expon > DECIMAL_MAX_EXPON_128) { // OF #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (*prounding_mode == ROUNDING_TO_ZERO || (sgn && *prounding_mode == ROUNDING_UP) || (!sgn && *prounding_mode == ROUNDING_DOWN)) { pres->w[1] = sgn | LARGEST_BID128_HIGH; pres->w[0] = LARGEST_BID128_LOW; } else #endif #endif { pres->w[1] = sgn | INFINITY_MASK64; pres->w[0] = 0; } return pres; } } pres->w[0] = coeff.w[0]; tmp = expon; tmp <<= 49; pres->w[1] = sgn | tmp | coeff.w[1]; return pres; } // // No overflow/underflow checks // No checking for coefficient == 10^34 (rounding artifact) // __BID_INLINE__ UINT128 * get_BID128_very_fast (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff) { UINT64 tmp; pres->w[0] = coeff.w[0]; tmp = expon; tmp <<= 49; pres->w[1] = sgn | tmp | coeff.w[1]; return pres; } // // No overflow/underflow checks // __BID_INLINE__ UINT128 * get_BID128_fast (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff) { UINT64 tmp; // coeff==10^34? if (coeff.w[1] == 0x0001ed09bead87c0ull && coeff.w[0] == 0x378d8e6400000000ull) { expon++; // set coefficient to 10^33 coeff.w[1] = 0x0000314dc6448d93ull; coeff.w[0] = 0x38c15b0a00000000ull; } pres->w[0] = coeff.w[0]; tmp = expon; tmp <<= 49; pres->w[1] = sgn | tmp | coeff.w[1]; return pres; } // // General BID128 pack macro // __BID_INLINE__ UINT128 * get_BID128 (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff, unsigned *prounding_mode, unsigned *fpsc) { UINT128 T; UINT64 tmp, tmp2; // coeff==10^34? if (coeff.w[1] == 0x0001ed09bead87c0ull && coeff.w[0] == 0x378d8e6400000000ull) { expon++; // set coefficient to 10^33 coeff.w[1] = 0x0000314dc6448d93ull; coeff.w[0] = 0x38c15b0a00000000ull; } // check OF, UF if (expon < 0 || expon > DECIMAL_MAX_EXPON_128) { // check UF if (expon < 0) { return handle_UF_128 (pres, sgn, expon, coeff, prounding_mode, fpsc); } if (expon - MAX_FORMAT_DIGITS_128 <= DECIMAL_MAX_EXPON_128) { T = power10_table_128[MAX_FORMAT_DIGITS_128 - 1]; while (__unsigned_compare_gt_128 (T, coeff) && expon > DECIMAL_MAX_EXPON_128) { coeff.w[1] = (coeff.w[1] << 3) + (coeff.w[1] << 1) + (coeff.w[0] >> 61) + (coeff.w[0] >> 63); tmp2 = coeff.w[0] << 3; coeff.w[0] = (coeff.w[0] << 1) + tmp2; if (coeff.w[0] < tmp2) coeff.w[1]++; expon--; } } if (expon > DECIMAL_MAX_EXPON_128) { if (!(coeff.w[1] | coeff.w[0])) { pres->w[1] = sgn | (((UINT64) DECIMAL_MAX_EXPON_128) << 49); pres->w[0] = 0; return pres; } // OF #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (*prounding_mode == ROUNDING_TO_ZERO || (sgn && *prounding_mode == ROUNDING_UP) || (!sgn && *prounding_mode == ROUNDING_DOWN)) { pres->w[1] = sgn | LARGEST_BID128_HIGH; pres->w[0] = LARGEST_BID128_LOW; } else #endif #endif { pres->w[1] = sgn | INFINITY_MASK64; pres->w[0] = 0; } return pres; } } pres->w[0] = coeff.w[0]; tmp = expon; tmp <<= 49; pres->w[1] = sgn | tmp | coeff.w[1]; return pres; } // // Macro used for conversions from string // (no additional arguments given for rounding mode, status flags) // __BID_INLINE__ UINT128 * get_BID128_string (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff) { UINT128 D2, D8; UINT64 tmp; unsigned rmode = 0, status; // coeff==10^34? if (coeff.w[1] == 0x0001ed09bead87c0ull && coeff.w[0] == 0x378d8e6400000000ull) { expon++; // set coefficient to 10^33 coeff.w[1] = 0x0000314dc6448d93ull; coeff.w[0] = 0x38c15b0a00000000ull; } // check OF, UF if ((unsigned) expon > DECIMAL_MAX_EXPON_128) { // check UF if (expon < 0) return handle_UF_128 (pres, sgn, expon, coeff, &rmode, &status); // OF if (expon < DECIMAL_MAX_EXPON_128 + 34) { while (expon > DECIMAL_MAX_EXPON_128 && (coeff.w[1] < power10_table_128[33].w[1] || (coeff.w[1] == power10_table_128[33].w[1] && coeff.w[0] < power10_table_128[33].w[0]))) { D2.w[1] = (coeff.w[1] << 1) | (coeff.w[0] >> 63); D2.w[0] = coeff.w[0] << 1; D8.w[1] = (coeff.w[1] << 3) | (coeff.w[0] >> 61); D8.w[0] = coeff.w[0] << 3; __add_128_128 (coeff, D2, D8); expon--; } } else if (!(coeff.w[0] | coeff.w[1])) expon = DECIMAL_MAX_EXPON_128; if (expon > DECIMAL_MAX_EXPON_128) { pres->w[1] = sgn | INFINITY_MASK64; pres->w[0] = 0; switch (rmode) { case ROUNDING_DOWN: if (!sgn) { pres->w[1] = LARGEST_BID128_HIGH; pres->w[0] = LARGEST_BID128_LOW; } break; case ROUNDING_TO_ZERO: pres->w[1] = sgn | LARGEST_BID128_HIGH; pres->w[0] = LARGEST_BID128_LOW; break; case ROUNDING_UP: // round up if (sgn) { pres->w[1] = sgn | LARGEST_BID128_HIGH; pres->w[0] = LARGEST_BID128_LOW; } break; } return pres; } } pres->w[0] = coeff.w[0]; tmp = expon; tmp <<= 49; pres->w[1] = sgn | tmp | coeff.w[1]; return pres; } /***************************************************************************** * * BID32 pack/unpack macros * *****************************************************************************/ __BID_INLINE__ UINT32 unpack_BID32 (UINT32 * psign_x, int *pexponent_x, UINT32 * pcoefficient_x, UINT32 x) { UINT32 tmp; *psign_x = x & 0x80000000; if ((x & SPECIAL_ENCODING_MASK32) == SPECIAL_ENCODING_MASK32) { // special encodings if ((x & INFINITY_MASK32) == INFINITY_MASK32) { *pcoefficient_x = x & 0xfe0fffff; if ((x & 0x000fffff) >= 1000000) *pcoefficient_x = x & 0xfe000000; if ((x & NAN_MASK32) == INFINITY_MASK32) *pcoefficient_x = x & 0xf8000000; *pexponent_x = 0; return 0; // NaN or Infinity } // coefficient *pcoefficient_x = (x & SMALL_COEFF_MASK32) | LARGE_COEFF_HIGH_BIT32; // check for non-canonical value if (*pcoefficient_x >= 10000000) *pcoefficient_x = 0; // get exponent tmp = x >> 21; *pexponent_x = tmp & EXPONENT_MASK32; return 1; } // exponent tmp = x >> 23; *pexponent_x = tmp & EXPONENT_MASK32; // coefficient *pcoefficient_x = (x & LARGE_COEFF_MASK32); return *pcoefficient_x; } // // General pack macro for BID32 // __BID_INLINE__ UINT32 get_BID32 (UINT32 sgn, int expon, UINT64 coeff, int rmode, unsigned *fpsc) { UINT128 Q; UINT64 C64, remainder_h, carry, Stemp; UINT32 r, mask; int extra_digits, amount, amount2; unsigned status; if (coeff > 9999999ull) { expon++; coeff = 1000000ull; } // check for possible underflow/overflow if (((unsigned) expon) > DECIMAL_MAX_EXPON_32) { if (expon < 0) { // underflow if (expon + MAX_FORMAT_DIGITS_32 < 0) { #ifdef SET_STATUS_FLAGS __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION); #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == ROUNDING_DOWN && sgn) return 0x80000001; if (rmode == ROUNDING_UP && !sgn) return 1; #endif #endif // result is 0 return sgn; } // get digits to be shifted out #ifdef IEEE_ROUND_NEAREST_TIES_AWAY rmode = 0; #endif #ifdef IEEE_ROUND_NEAREST rmode = 0; #endif #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (sgn && (unsigned) (rmode - 1) < 2) rmode = 3 - rmode; #endif #endif extra_digits = -expon; coeff += round_const_table[rmode][extra_digits]; // get coeff*(2^M[extra_digits])/10^extra_digits __mul_64x64_to_128 (Q, coeff, reciprocals10_64[extra_digits]); // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128 amount = short_recip_scale[extra_digits]; C64 = Q.w[1] >> amount; #ifndef IEEE_ROUND_NEAREST_TIES_AWAY #ifndef IEEE_ROUND_NEAREST if (rmode == 0) //ROUNDING_TO_NEAREST #endif if (C64 & 1) { // check whether fractional part of initial_P/10^extra_digits is exactly .5 // get remainder amount2 = 64 - amount; remainder_h = 0; remainder_h--; remainder_h >>= amount2; remainder_h = remainder_h & Q.w[1]; if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits])) { C64--; } } #endif #ifdef SET_STATUS_FLAGS if (is_inexact (fpsc)) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION); else { status = INEXACT_EXCEPTION; // get remainder remainder_h = Q.w[1] << (64 - amount); switch (rmode) { case ROUNDING_TO_NEAREST: case ROUNDING_TIES_AWAY: // test whether fractional part is 0 if (remainder_h == 0x8000000000000000ull && (Q.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; case ROUNDING_DOWN: case ROUNDING_TO_ZERO: if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits])) status = EXACT_STATUS; break; default: // round up __add_carry_out (Stemp, carry, Q.w[0], reciprocals10_64[extra_digits]); if ((remainder_h >> (64 - amount)) + carry >= (((UINT64) 1) << amount)) status = EXACT_STATUS; } if (status != EXACT_STATUS) __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status); } #endif return sgn | (UINT32) C64; } while (coeff < 1000000 && expon > DECIMAL_MAX_EXPON_32) { coeff = (coeff << 3) + (coeff << 1); expon--; } if (((unsigned) expon) > DECIMAL_MAX_EXPON_32) { __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION); // overflow r = sgn | INFINITY_MASK32; switch (rmode) { case ROUNDING_DOWN: if (!sgn) r = LARGEST_BID32; break; case ROUNDING_TO_ZERO: r = sgn | LARGEST_BID32; break; case ROUNDING_UP: // round up if (sgn) r = sgn | LARGEST_BID32; } return r; } } mask = 1 << 23; // check whether coefficient fits in DECIMAL_COEFF_FIT bits if (coeff < mask) { r = expon; r <<= 23; r |= ((UINT32) coeff | sgn); return r; } // special format r = expon; r <<= 21; r |= (sgn | SPECIAL_ENCODING_MASK32); // add coeff, without leading bits mask = (1 << 21) - 1; r |= (((UINT32) coeff) & mask); return r; } // // no overflow/underflow checks // __BID_INLINE__ UINT32 very_fast_get_BID32 (UINT32 sgn, int expon, UINT32 coeff) { UINT32 r, mask; mask = 1 << 23; // check whether coefficient fits in 10*2+3 bits if (coeff < mask) { r = expon; r <<= 23; r |= (coeff | sgn); return r; } // special format r = expon; r <<= 21; r |= (sgn | SPECIAL_ENCODING_MASK32); // add coeff, without leading bits mask = (1 << 21) - 1; coeff &= mask; r |= coeff; return r; } /************************************************************* * *************************************************************/ typedef ALIGN (16) struct { UINT64 w[6]; } UINT384; typedef ALIGN (16) struct { UINT64 w[8]; } UINT512; // #define P 34 #define MASK_STEERING_BITS 0x6000000000000000ull #define MASK_BINARY_EXPONENT1 0x7fe0000000000000ull #define MASK_BINARY_SIG1 0x001fffffffffffffull #define MASK_BINARY_EXPONENT2 0x1ff8000000000000ull //used to take G[2:w+3] (sec 3.3) #define MASK_BINARY_SIG2 0x0007ffffffffffffull //used to mask out G4:T0 (sec 3.3) #define MASK_BINARY_OR2 0x0020000000000000ull //used to prefix 8+G4 to T (sec 3.3) #define UPPER_EXPON_LIMIT 51 #define MASK_EXP 0x7ffe000000000000ull #define MASK_SPECIAL 0x7800000000000000ull #define MASK_NAN 0x7c00000000000000ull #define MASK_SNAN 0x7e00000000000000ull #define MASK_ANY_INF 0x7c00000000000000ull #define MASK_INF 0x7800000000000000ull #define MASK_SIGN 0x8000000000000000ull #define MASK_COEFF 0x0001ffffffffffffull #define BIN_EXP_BIAS (0x1820ull << 49) #define EXP_MIN 0x0000000000000000ull // EXP_MIN = (-6176 + 6176) << 49 #define EXP_MAX 0x5ffe000000000000ull // EXP_MAX = (6111 + 6176) << 49 #define EXP_MAX_P1 0x6000000000000000ull // EXP_MAX + 1 = (6111 + 6176 + 1) << 49 #define EXP_P1 0x0002000000000000ull // EXP_ P1= 1 << 49 #define expmin -6176 // min unbiased exponent #define expmax 6111 // max unbiased exponent #define expmin16 -398 // min unbiased exponent #define expmax16 369 // max unbiased exponent #define SIGNMASK32 0x80000000 #define BID64_SIG_MAX 0x002386F26FC0ffffull #define SIGNMASK64 0x8000000000000000ull // typedef unsigned int FPSC; // floating-point status and control // bit31: // bit30: // bit29: // bit28: // bit27: // bit26: // bit25: // bit24: // bit23: // bit22: // bit21: // bit20: // bit19: // bit18: // bit17: // bit16: // bit15: // bit14: RC:2 // bit13: RC:1 // bit12: RC:0 // bit11: PM // bit10: UM // bit9: OM // bit8: ZM // bit7: DM // bit6: IM // bit5: PE // bit4: UE // bit3: OE // bit2: ZE // bit1: DE // bit0: IE #define ROUNDING_MODE_MASK 0x00007000 typedef struct _DEC_DIGITS { unsigned int digits; UINT64 threshold_hi; UINT64 threshold_lo; unsigned int digits1; } DEC_DIGITS; extern DEC_DIGITS nr_digits[]; extern UINT64 midpoint64[]; extern UINT128 midpoint128[]; extern UINT192 midpoint192[]; extern UINT256 midpoint256[]; extern UINT64 ten2k64[]; extern UINT128 ten2k128[]; extern UINT256 ten2k256[]; extern UINT128 ten2mk128[]; extern UINT64 ten2mk64[]; extern UINT128 ten2mk128trunc[]; extern int shiftright128[]; extern UINT64 maskhigh128[]; extern UINT64 maskhigh128M[]; extern UINT64 maskhigh192M[]; extern UINT64 maskhigh256M[]; extern UINT64 onehalf128[]; extern UINT64 onehalf128M[]; extern UINT64 onehalf192M[]; extern UINT64 onehalf256M[]; extern UINT128 ten2mk128M[]; extern UINT128 ten2mk128truncM[]; extern UINT192 ten2mk192truncM[]; extern UINT256 ten2mk256truncM[]; extern int shiftright128M[]; extern int shiftright192M[]; extern int shiftright256M[]; extern UINT192 ten2mk192M[]; extern UINT256 ten2mk256M[]; extern unsigned char char_table2[]; extern unsigned char char_table3[]; extern UINT64 ten2m3k64[]; extern unsigned int shift_ten2m3k64[]; extern UINT128 ten2m3k128[]; extern unsigned int shift_ten2m3k128[]; /*************************************************************************** *************** TABLES FOR GENERAL ROUNDING FUNCTIONS ********************* ***************************************************************************/ extern UINT64 Kx64[]; extern unsigned int Ex64m64[]; extern UINT64 half64[]; extern UINT64 mask64[]; extern UINT64 ten2mxtrunc64[]; extern UINT128 Kx128[]; extern unsigned int Ex128m128[]; extern UINT64 half128[]; extern UINT64 mask128[]; extern UINT128 ten2mxtrunc128[]; extern UINT192 Kx192[]; extern unsigned int Ex192m192[]; extern UINT64 half192[]; extern UINT64 mask192[]; extern UINT192 ten2mxtrunc192[]; extern UINT256 Kx256[]; extern unsigned int Ex256m256[]; extern UINT64 half256[]; extern UINT64 mask256[]; extern UINT256 ten2mxtrunc256[]; typedef union __bid64_128 { UINT64 b64; UINT128 b128; } BID64_128; BID64_128 bid_fma (unsigned int P0, BID64_128 x1, unsigned int P1, BID64_128 y1, unsigned int P2, BID64_128 z1, unsigned int P3, unsigned int rnd_mode, FPSC * fpsc); #define P16 16 #define P34 34 union __int_double { UINT64 i; double d; }; typedef union __int_double int_double; union __int_float { UINT32 i; float d; }; typedef union __int_float int_float; #define SWAP(A,B,T) {\ T = A; \ A = B; \ B = T; \ } // this macro will find coefficient_x to be in [2^A, 2^(A+1) ) // ie it knows that it is A bits long #define NUMBITS(A, coefficient_x, tempx){\ temp_x.d=(float)coefficient_x;\ A=((tempx.i >>23) & EXPONENT_MASK32) - 0x7f;\ } enum class_types { signalingNaN, quietNaN, negativeInfinity, negativeNormal, negativeSubnormal, negativeZero, positiveZero, positiveSubnormal, positiveNormal, positiveInfinity }; typedef union { UINT64 ui64; double d; } BID_UI64DOUBLE; #endif libdfp-1.0.17/libbid/bid_round.c000066400000000000000000001151121504475242000164020ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /***************************************************************************** * * BID64 encoding: * **************************************** * 63 62 53 52 0 * |---|------------------|--------------| * | S | Biased Exp (E) | Coeff (c) | * |---|------------------|--------------| * * bias = 398 * number = (-1)^s * 10^(E-398) * c * coefficient range - 0 to (2^53)-1 * COEFF_MAX = 2^53-1 = 9007199254740991 * ***************************************************************************** * * BID128 encoding: * 1-bit sign * 14-bit biased exponent in [0x21, 0x3020] = [33, 12320] * unbiased exponent in [-6176, 6111]; exponent bias = 6176 * 113-bit unsigned binary integer coefficient (49-bit high + 64-bit low) * Note: 10^34-1 ~ 2^112.945555... < 2^113 => coefficient fits in 113 bits * * Note: assume invalid encodings are not passed to this function * * Round a number C with q decimal digits, represented as a binary integer * to q - x digits. Six different routines are provided for different values * of q. The maximum value of q used in the library is q = 3 * P - 1 where * P = 16 or P = 34 (so q <= 111 decimal digits). * The partitioning is based on the following, where Kx is the scaled * integer representing the value of 10^(-x) rounded up to a number of bits * sufficient to ensure correct rounding: * * -------------------------------------------------------------------------- * q x max. value of a max number min. number * of bits in C of bits in Kx * -------------------------------------------------------------------------- * * GROUP 1: 64 bits * round64_2_18 () * * 2 [1,1] 10^1 - 1 < 2^3.33 4 4 * ... ... ... ... ... * 18 [1,17] 10^18 - 1 < 2^59.80 60 61 * * GROUP 2: 128 bits * round128_19_38 () * * 19 [1,18] 10^19 - 1 < 2^63.11 64 65 * 20 [1,19] 10^20 - 1 < 2^66.44 67 68 * ... ... ... ... ... * 38 [1,37] 10^38 - 1 < 2^126.24 127 128 * * GROUP 3: 192 bits * round192_39_57 () * * 39 [1,38] 10^39 - 1 < 2^129.56 130 131 * ... ... ... ... ... * 57 [1,56] 10^57 - 1 < 2^189.35 190 191 * * GROUP 4: 256 bits * round256_58_76 () * * 58 [1,57] 10^58 - 1 < 2^192.68 193 194 * ... ... ... ... ... * 76 [1,75] 10^76 - 1 < 2^252.47 253 254 * * GROUP 5: 320 bits * round320_77_96 () * * 77 [1,76] 10^77 - 1 < 2^255.79 256 257 * 78 [1,77] 10^78 - 1 < 2^259.12 260 261 * ... ... ... ... ... * 96 [1,95] 10^96 - 1 < 2^318.91 319 320 * * GROUP 6: 384 bits * round384_97_115 () * * 97 [1,96] 10^97 - 1 < 2^322.23 323 324 * ... ... ... ... ... * 115 [1,114] 10^115 - 1 < 2^382.03 383 384 * ****************************************************************************/ #include "bid_internal.h" void round64_2_18 (int q, int x, UINT64 C, UINT64 * ptr_Cstar, int *incr_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint) { UINT128 P128; UINT128 fstar; UINT64 Cstar; UINT64 tmp64; int shift; int ind; // Note: // In round128_2_18() positive numbers with 2 <= q <= 18 will be // rounded to nearest only for 1 <= x <= 3: // x = 1 or x = 2 when q = 17 // x = 2 or x = 3 when q = 18 // However, for generality and possible uses outside the frame of IEEE 754R // this implementation works for 1 <= x <= q - 1 // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even, // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are // initialized to 0 by the caller // round a number C with q decimal digits, 2 <= q <= 18 // to q - x digits, 1 <= x <= 17 // C = C + 1/2 * 10^x where the result C fits in 64 bits // (because the largest value is 999999999999999999 + 50000000000000000 = // 0x0e92596fd628ffff, which fits in 60 bits) ind = x - 1; // 0 <= ind <= 16 C = C + midpoint64[ind]; // kx ~= 10^(-x), kx = Kx64[ind] * 2^(-Ex), 0 <= ind <= 16 // P128 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx // the approximation kx of 10^(-x) was rounded up to 64 bits __mul_64x64_to_128MACH (P128, C, Kx64[ind]); // calculate C* = floor (P128) and f* // Cstar = P128 >> Ex // fstar = low Ex bits of P128 shift = Ex64m64[ind]; // in [3, 56] Cstar = P128.w[1] >> shift; fstar.w[1] = P128.w[1] & mask64[ind]; fstar.w[0] = P128.w[0]; // the top Ex bits of 10^(-x) are T* = ten2mxtrunc64[ind], e.g. // if x=1, T*=ten2mxtrunc64[0]=0xcccccccccccccccc // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has q - x decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has q - x decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has q - x decimal digits, // correct by Property 1) // in the caling function n = C* * 10^(e+x) // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (fstar.w[1] > half64[ind] || (fstar.w[1] == half64[ind] && fstar.w[0])) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[1] - half64[ind]; if (tmp64 || fstar.w[0] > ten2mxtrunc64[ind]) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } // check for midpoints (could do this before determining inexactness) if (fstar.w[1] == 0 && fstar.w[0] <= ten2mxtrunc64[ind]) { // the result is a midpoint if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result may be 0 Cstar--; // Cstar is now even *ptr_is_midpoint_gt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] *ptr_is_midpoint_lt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } } // check for rounding overflow, which occurs if Cstar = 10^(q-x) ind = q - x; // 1 <= ind <= q - 1 if (Cstar == ten2k64[ind]) { // if Cstar = 10^(q-x) Cstar = ten2k64[ind - 1]; // Cstar = 10^(q-x-1) *incr_exp = 1; } else { // 10^33 <= Cstar <= 10^34 - 1 *incr_exp = 0; } *ptr_Cstar = Cstar; } void round128_19_38 (int q, int x, UINT128 C, UINT128 * ptr_Cstar, int *incr_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint) { UINT256 P256; UINT256 fstar; UINT128 Cstar; UINT64 tmp64; int shift; int ind; // Note: // In round128_19_38() positive numbers with 19 <= q <= 38 will be // rounded to nearest only for 1 <= x <= 23: // x = 3 or x = 4 when q = 19 // x = 4 or x = 5 when q = 20 // ... // x = 18 or x = 19 when q = 34 // x = 1 or x = 2 or x = 19 or x = 20 when q = 35 // x = 2 or x = 3 or x = 20 or x = 21 when q = 36 // x = 3 or x = 4 or x = 21 or x = 22 when q = 37 // x = 4 or x = 5 or x = 22 or x = 23 when q = 38 // However, for generality and possible uses outside the frame of IEEE 754R // this implementation works for 1 <= x <= q - 1 // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even, // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are // initialized to 0 by the caller // round a number C with q decimal digits, 19 <= q <= 38 // to q - x digits, 1 <= x <= 37 // C = C + 1/2 * 10^x where the result C fits in 128 bits // (because the largest value is 99999999999999999999999999999999999999 + // 5000000000000000000000000000000000000 = // 0x4efe43b0c573e7e68a043d8fffffffff, which fits is 127 bits) ind = x - 1; // 0 <= ind <= 36 if (ind <= 18) { // if 0 <= ind <= 18 tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint64[ind]; if (C.w[0] < tmp64) C.w[1]++; } else { // if 19 <= ind <= 37 tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint128[ind - 19].w[0]; if (C.w[0] < tmp64) { C.w[1]++; } C.w[1] = C.w[1] + midpoint128[ind - 19].w[1]; } // kx ~= 10^(-x), kx = Kx128[ind] * 2^(-Ex), 0 <= ind <= 36 // P256 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx // the approximation kx of 10^(-x) was rounded up to 128 bits __mul_128x128_to_256 (P256, C, Kx128[ind]); // calculate C* = floor (P256) and f* // Cstar = P256 >> Ex // fstar = low Ex bits of P256 shift = Ex128m128[ind]; // in [2, 63] but have to consider two cases if (ind <= 18) { // if 0 <= ind <= 18 Cstar.w[0] = (P256.w[2] >> shift) | (P256.w[3] << (64 - shift)); Cstar.w[1] = (P256.w[3] >> shift); fstar.w[0] = P256.w[0]; fstar.w[1] = P256.w[1]; fstar.w[2] = P256.w[2] & mask128[ind]; fstar.w[3] = 0x0ULL; } else { // if 19 <= ind <= 37 Cstar.w[0] = P256.w[3] >> shift; Cstar.w[1] = 0x0ULL; fstar.w[0] = P256.w[0]; fstar.w[1] = P256.w[1]; fstar.w[2] = P256.w[2]; fstar.w[3] = P256.w[3] & mask128[ind]; } // the top Ex bits of 10^(-x) are T* = ten2mxtrunc64[ind], e.g. // if x=1, T*=ten2mxtrunc128[0]=0xcccccccccccccccccccccccccccccccc // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has q - x decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has q - x decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has q - x decimal digits, // correct by Property 1) // in the caling function n = C* * 10^(e+x) // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind <= 18) { // if 0 <= ind <= 18 if (fstar.w[2] > half128[ind] || (fstar.w[2] == half128[ind] && (fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[2] - half128[ind]; if (tmp64 || fstar.w[1] > ten2mxtrunc128[ind].w[1] || (fstar.w[1] == ten2mxtrunc128[ind].w[1] && fstar.w[0] > ten2mxtrunc128[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } else { // if 19 <= ind <= 37 if (fstar.w[3] > half128[ind] || (fstar.w[3] == half128[ind] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[3] - half128[ind]; if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mxtrunc128[ind].w[1] || (fstar.w[1] == ten2mxtrunc128[ind].w[1] && fstar.w[0] > ten2mxtrunc128[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } // check for midpoints (could do this before determining inexactness) if (fstar.w[3] == 0 && fstar.w[2] == 0 && (fstar.w[1] < ten2mxtrunc128[ind].w[1] || (fstar.w[1] == ten2mxtrunc128[ind].w[1] && fstar.w[0] <= ten2mxtrunc128[ind].w[0]))) { // the result is a midpoint if (Cstar.w[0] & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result may be 0 Cstar.w[0]--; // Cstar is now even if (Cstar.w[0] == 0xffffffffffffffffULL) { Cstar.w[1]--; } *ptr_is_midpoint_gt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] *ptr_is_midpoint_lt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } } // check for rounding overflow, which occurs if Cstar = 10^(q-x) ind = q - x; // 1 <= ind <= q - 1 if (ind <= 19) { if (Cstar.w[1] == 0x0ULL && Cstar.w[0] == ten2k64[ind]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k64[ind - 1]; // Cstar = 10^(q-x-1) *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind == 20) { // if ind = 20 if (Cstar.w[1] == ten2k128[0].w[1] && Cstar.w[0] == ten2k128[0].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k64[19]; // Cstar = 10^(q-x-1) Cstar.w[1] = 0x0ULL; *incr_exp = 1; } else { *incr_exp = 0; } } else { // if 21 <= ind <= 37 if (Cstar.w[1] == ten2k128[ind - 20].w[1] && Cstar.w[0] == ten2k128[ind - 20].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k128[ind - 21].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k128[ind - 21].w[1]; *incr_exp = 1; } else { *incr_exp = 0; } } ptr_Cstar->w[1] = Cstar.w[1]; ptr_Cstar->w[0] = Cstar.w[0]; } void round192_39_57 (int q, int x, UINT192 C, UINT192 * ptr_Cstar, int *incr_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint) { UINT384 P384; UINT384 fstar; UINT192 Cstar; UINT64 tmp64; int shift; int ind; // Note: // In round192_39_57() positive numbers with 39 <= q <= 57 will be // rounded to nearest only for 5 <= x <= 42: // x = 23 or x = 24 or x = 5 or x = 6 when q = 39 // x = 24 or x = 25 or x = 6 or x = 7 when q = 40 // ... // x = 41 or x = 42 or x = 23 or x = 24 when q = 57 // However, for generality and possible uses outside the frame of IEEE 754R // this implementation works for 1 <= x <= q - 1 // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even, // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are // initialized to 0 by the caller // round a number C with q decimal digits, 39 <= q <= 57 // to q - x digits, 1 <= x <= 56 // C = C + 1/2 * 10^x where the result C fits in 192 bits // (because the largest value is // 999999999999999999999999999999999999999999999999999999999 + // 50000000000000000000000000000000000000000000000000000000 = // 0x2ad282f212a1da846afdaf18c034ff09da7fffffffffffff, which fits in 190 bits) ind = x - 1; // 0 <= ind <= 55 if (ind <= 18) { // if 0 <= ind <= 18 tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint64[ind]; if (C.w[0] < tmp64) { C.w[1]++; if (C.w[1] == 0x0) { C.w[2]++; } } } else if (ind <= 37) { // if 19 <= ind <= 37 tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint128[ind - 19].w[0]; if (C.w[0] < tmp64) { C.w[1]++; if (C.w[1] == 0x0) { C.w[2]++; } } tmp64 = C.w[1]; C.w[1] = C.w[1] + midpoint128[ind - 19].w[1]; if (C.w[1] < tmp64) { C.w[2]++; } } else { // if 38 <= ind <= 57 (actually ind <= 55) tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint192[ind - 38].w[0]; if (C.w[0] < tmp64) { C.w[1]++; if (C.w[1] == 0x0ull) { C.w[2]++; } } tmp64 = C.w[1]; C.w[1] = C.w[1] + midpoint192[ind - 38].w[1]; if (C.w[1] < tmp64) { C.w[2]++; } C.w[2] = C.w[2] + midpoint192[ind - 38].w[2]; } // kx ~= 10^(-x), kx = Kx192[ind] * 2^(-Ex), 0 <= ind <= 55 // P384 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx // the approximation kx of 10^(-x) was rounded up to 192 bits __mul_192x192_to_384 (P384, C, Kx192[ind]); // calculate C* = floor (P384) and f* // Cstar = P384 >> Ex // fstar = low Ex bits of P384 shift = Ex192m192[ind]; // in [1, 63] but have to consider three cases if (ind <= 18) { // if 0 <= ind <= 18 Cstar.w[2] = (P384.w[5] >> shift); Cstar.w[1] = (P384.w[5] << (64 - shift)) | (P384.w[4] >> shift); Cstar.w[0] = (P384.w[4] << (64 - shift)) | (P384.w[3] >> shift); fstar.w[5] = 0x0ULL; fstar.w[4] = 0x0ULL; fstar.w[3] = P384.w[3] & mask192[ind]; fstar.w[2] = P384.w[2]; fstar.w[1] = P384.w[1]; fstar.w[0] = P384.w[0]; } else if (ind <= 37) { // if 19 <= ind <= 37 Cstar.w[2] = 0x0ULL; Cstar.w[1] = P384.w[5] >> shift; Cstar.w[0] = (P384.w[5] << (64 - shift)) | (P384.w[4] >> shift); fstar.w[5] = 0x0ULL; fstar.w[4] = P384.w[4] & mask192[ind]; fstar.w[3] = P384.w[3]; fstar.w[2] = P384.w[2]; fstar.w[1] = P384.w[1]; fstar.w[0] = P384.w[0]; } else { // if 38 <= ind <= 57 Cstar.w[2] = 0x0ULL; Cstar.w[1] = 0x0ULL; Cstar.w[0] = P384.w[5] >> shift; fstar.w[5] = P384.w[5] & mask192[ind]; fstar.w[4] = P384.w[4]; fstar.w[3] = P384.w[3]; fstar.w[2] = P384.w[2]; fstar.w[1] = P384.w[1]; fstar.w[0] = P384.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mxtrunc192[ind], e.g. if x=1, // T*=ten2mxtrunc192[0]=0xcccccccccccccccccccccccccccccccccccccccccccccccc // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has q - x decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has q - x decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has q - x decimal digits, // correct by Property 1) // in the caling function n = C* * 10^(e+x) // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind <= 18) { // if 0 <= ind <= 18 if (fstar.w[3] > half192[ind] || (fstar.w[3] == half192[ind] && (fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[3] - half192[ind]; if (tmp64 || fstar.w[2] > ten2mxtrunc192[ind].w[2] || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] > ten2mxtrunc192[ind].w[1]) || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] == ten2mxtrunc192[ind].w[1] && fstar.w[0] > ten2mxtrunc192[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } else if (ind <= 37) { // if 19 <= ind <= 37 if (fstar.w[4] > half192[ind] || (fstar.w[4] == half192[ind] && (fstar.w[3] || fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[4] - half192[ind]; if (tmp64 || fstar.w[3] || fstar.w[2] > ten2mxtrunc192[ind].w[2] || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] > ten2mxtrunc192[ind].w[1]) || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] == ten2mxtrunc192[ind].w[1] && fstar.w[0] > ten2mxtrunc192[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } else { // if 38 <= ind <= 55 if (fstar.w[5] > half192[ind] || (fstar.w[5] == half192[ind] && (fstar.w[4] || fstar.w[3] || fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[5] - half192[ind]; if (tmp64 || fstar.w[4] || fstar.w[3] || fstar.w[2] > ten2mxtrunc192[ind].w[2] || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] > ten2mxtrunc192[ind].w[1]) || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] == ten2mxtrunc192[ind].w[1] && fstar.w[0] > ten2mxtrunc192[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } // check for midpoints (could do this before determining inexactness) if (fstar.w[5] == 0 && fstar.w[4] == 0 && fstar.w[3] == 0 && (fstar.w[2] < ten2mxtrunc192[ind].w[2] || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] < ten2mxtrunc192[ind].w[1]) || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] == ten2mxtrunc192[ind].w[1] && fstar.w[0] <= ten2mxtrunc192[ind].w[0]))) { // the result is a midpoint if (Cstar.w[0] & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result may be 0 Cstar.w[0]--; // Cstar is now even if (Cstar.w[0] == 0xffffffffffffffffULL) { Cstar.w[1]--; if (Cstar.w[1] == 0xffffffffffffffffULL) { Cstar.w[2]--; } } *ptr_is_midpoint_gt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] *ptr_is_midpoint_lt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } } // check for rounding overflow, which occurs if Cstar = 10^(q-x) ind = q - x; // 1 <= ind <= q - 1 if (ind <= 19) { if (Cstar.w[2] == 0x0ULL && Cstar.w[1] == 0x0ULL && Cstar.w[0] == ten2k64[ind]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k64[ind - 1]; // Cstar = 10^(q-x-1) *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind == 20) { // if ind = 20 if (Cstar.w[2] == 0x0ULL && Cstar.w[1] == ten2k128[0].w[1] && Cstar.w[0] == ten2k128[0].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k64[19]; // Cstar = 10^(q-x-1) Cstar.w[1] = 0x0ULL; *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind <= 38) { // if 21 <= ind <= 38 if (Cstar.w[2] == 0x0ULL && Cstar.w[1] == ten2k128[ind - 20].w[1] && Cstar.w[0] == ten2k128[ind - 20].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k128[ind - 21].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k128[ind - 21].w[1]; *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind == 39) { if (Cstar.w[2] == ten2k256[0].w[2] && Cstar.w[1] == ten2k256[0].w[1] && Cstar.w[0] == ten2k256[0].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k128[18].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k128[18].w[1]; Cstar.w[2] = 0x0ULL; *incr_exp = 1; } else { *incr_exp = 0; } } else { // if 40 <= ind <= 56 if (Cstar.w[2] == ten2k256[ind - 39].w[2] && Cstar.w[1] == ten2k256[ind - 39].w[1] && Cstar.w[0] == ten2k256[ind - 39].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k256[ind - 40].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k256[ind - 40].w[1]; Cstar.w[2] = ten2k256[ind - 40].w[2]; *incr_exp = 1; } else { *incr_exp = 0; } } ptr_Cstar->w[2] = Cstar.w[2]; ptr_Cstar->w[1] = Cstar.w[1]; ptr_Cstar->w[0] = Cstar.w[0]; } void round256_58_76 (int q, int x, UINT256 C, UINT256 * ptr_Cstar, int *incr_exp, int *ptr_is_midpoint_lt_even, int *ptr_is_midpoint_gt_even, int *ptr_is_inexact_lt_midpoint, int *ptr_is_inexact_gt_midpoint) { UINT512 P512; UINT512 fstar; UINT256 Cstar; UINT64 tmp64; int shift; int ind; // Note: // In round256_58_76() positive numbers with 58 <= q <= 76 will be // rounded to nearest only for 24 <= x <= 61: // x = 42 or x = 43 or x = 24 or x = 25 when q = 58 // x = 43 or x = 44 or x = 25 or x = 26 when q = 59 // ... // x = 60 or x = 61 or x = 42 or x = 43 when q = 76 // However, for generality and possible uses outside the frame of IEEE 754R // this implementation works for 1 <= x <= q - 1 // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even, // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are // initialized to 0 by the caller // round a number C with q decimal digits, 58 <= q <= 76 // to q - x digits, 1 <= x <= 75 // C = C + 1/2 * 10^x where the result C fits in 256 bits // (because the largest value is 9999999999999999999999999999999999999999 // 999999999999999999999999999999999999 + 500000000000000000000000000 // 000000000000000000000000000000000000000000000000 = // 0x1736ca15d27a56cae15cf0e7b403d1f2bd6ebb0a50dc83ffffffffffffffffff, // which fits in 253 bits) ind = x - 1; // 0 <= ind <= 74 if (ind <= 18) { // if 0 <= ind <= 18 tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint64[ind]; if (C.w[0] < tmp64) { C.w[1]++; if (C.w[1] == 0x0) { C.w[2]++; if (C.w[2] == 0x0) { C.w[3]++; } } } } else if (ind <= 37) { // if 19 <= ind <= 37 tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint128[ind - 19].w[0]; if (C.w[0] < tmp64) { C.w[1]++; if (C.w[1] == 0x0) { C.w[2]++; if (C.w[2] == 0x0) { C.w[3]++; } } } tmp64 = C.w[1]; C.w[1] = C.w[1] + midpoint128[ind - 19].w[1]; if (C.w[1] < tmp64) { C.w[2]++; if (C.w[2] == 0x0) { C.w[3]++; } } } else if (ind <= 57) { // if 38 <= ind <= 57 tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint192[ind - 38].w[0]; if (C.w[0] < tmp64) { C.w[1]++; if (C.w[1] == 0x0ull) { C.w[2]++; if (C.w[2] == 0x0) { C.w[3]++; } } } tmp64 = C.w[1]; C.w[1] = C.w[1] + midpoint192[ind - 38].w[1]; if (C.w[1] < tmp64) { C.w[2]++; if (C.w[2] == 0x0) { C.w[3]++; } } tmp64 = C.w[2]; C.w[2] = C.w[2] + midpoint192[ind - 38].w[2]; if (C.w[2] < tmp64) { C.w[3]++; } } else { // if 58 <= ind <= 76 (actually 58 <= ind <= 74) tmp64 = C.w[0]; C.w[0] = C.w[0] + midpoint256[ind - 58].w[0]; if (C.w[0] < tmp64) { C.w[1]++; if (C.w[1] == 0x0ull) { C.w[2]++; if (C.w[2] == 0x0) { C.w[3]++; } } } tmp64 = C.w[1]; C.w[1] = C.w[1] + midpoint256[ind - 58].w[1]; if (C.w[1] < tmp64) { C.w[2]++; if (C.w[2] == 0x0) { C.w[3]++; } } tmp64 = C.w[2]; C.w[2] = C.w[2] + midpoint256[ind - 58].w[2]; if (C.w[2] < tmp64) { C.w[3]++; } C.w[3] = C.w[3] + midpoint256[ind - 58].w[3]; } // kx ~= 10^(-x), kx = Kx256[ind] * 2^(-Ex), 0 <= ind <= 74 // P512 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx // the approximation kx of 10^(-x) was rounded up to 192 bits __mul_256x256_to_512 (P512, C, Kx256[ind]); // calculate C* = floor (P512) and f* // Cstar = P512 >> Ex // fstar = low Ex bits of P512 shift = Ex256m256[ind]; // in [0, 63] but have to consider four cases if (ind <= 18) { // if 0 <= ind <= 18 Cstar.w[3] = (P512.w[7] >> shift); Cstar.w[2] = (P512.w[7] << (64 - shift)) | (P512.w[6] >> shift); Cstar.w[1] = (P512.w[6] << (64 - shift)) | (P512.w[5] >> shift); Cstar.w[0] = (P512.w[5] << (64 - shift)) | (P512.w[4] >> shift); fstar.w[7] = 0x0ULL; fstar.w[6] = 0x0ULL; fstar.w[5] = 0x0ULL; fstar.w[4] = P512.w[4] & mask256[ind]; fstar.w[3] = P512.w[3]; fstar.w[2] = P512.w[2]; fstar.w[1] = P512.w[1]; fstar.w[0] = P512.w[0]; } else if (ind <= 37) { // if 19 <= ind <= 37 Cstar.w[3] = 0x0ULL; Cstar.w[2] = P512.w[7] >> shift; Cstar.w[1] = (P512.w[7] << (64 - shift)) | (P512.w[6] >> shift); Cstar.w[0] = (P512.w[6] << (64 - shift)) | (P512.w[5] >> shift); fstar.w[7] = 0x0ULL; fstar.w[6] = 0x0ULL; fstar.w[5] = P512.w[5] & mask256[ind]; fstar.w[4] = P512.w[4]; fstar.w[3] = P512.w[3]; fstar.w[2] = P512.w[2]; fstar.w[1] = P512.w[1]; fstar.w[0] = P512.w[0]; } else if (ind <= 56) { // if 38 <= ind <= 56 Cstar.w[3] = 0x0ULL; Cstar.w[2] = 0x0ULL; Cstar.w[1] = P512.w[7] >> shift; Cstar.w[0] = (P512.w[7] << (64 - shift)) | (P512.w[6] >> shift); fstar.w[7] = 0x0ULL; fstar.w[6] = P512.w[6] & mask256[ind]; fstar.w[5] = P512.w[5]; fstar.w[4] = P512.w[4]; fstar.w[3] = P512.w[3]; fstar.w[2] = P512.w[2]; fstar.w[1] = P512.w[1]; fstar.w[0] = P512.w[0]; } else if (ind == 57) { Cstar.w[3] = 0x0ULL; Cstar.w[2] = 0x0ULL; Cstar.w[1] = 0x0ULL; Cstar.w[0] = P512.w[7]; fstar.w[7] = 0x0ULL; fstar.w[6] = P512.w[6]; fstar.w[5] = P512.w[5]; fstar.w[4] = P512.w[4]; fstar.w[3] = P512.w[3]; fstar.w[2] = P512.w[2]; fstar.w[1] = P512.w[1]; fstar.w[0] = P512.w[0]; } else { // if 58 <= ind <= 74 Cstar.w[3] = 0x0ULL; Cstar.w[2] = 0x0ULL; Cstar.w[1] = 0x0ULL; Cstar.w[0] = P512.w[7] >> shift; fstar.w[7] = P512.w[7] & mask256[ind]; fstar.w[6] = P512.w[6]; fstar.w[5] = P512.w[5]; fstar.w[4] = P512.w[4]; fstar.w[3] = P512.w[3]; fstar.w[2] = P512.w[2]; fstar.w[1] = P512.w[1]; fstar.w[0] = P512.w[0]; } // the top Ex bits of 10^(-x) are T* = ten2mxtrunc256[ind], e.g. if x=1, // T*=ten2mxtrunc256[0]= // 0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc // if (0 < f* < 10^(-x)) then the result is a midpoint // if floor(C*) is even then C* = floor(C*) - logical right // shift; C* has q - x decimal digits, correct by Prop. 1) // else if floor(C*) is odd C* = floor(C*)-1 (logical right // shift; C* has q - x decimal digits, correct by Pr. 1) // else // C* = floor(C*) (logical right shift; C has q - x decimal digits, // correct by Property 1) // in the caling function n = C* * 10^(e+x) // determine inexactness of the rounding of C* // if (0 < f* - 1/2 < 10^(-x)) then // the result is exact // else // if (f* - 1/2 > T*) then // the result is inexact if (ind <= 18) { // if 0 <= ind <= 18 if (fstar.w[4] > half256[ind] || (fstar.w[4] == half256[ind] && (fstar.w[3] || fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[4] - half256[ind]; if (tmp64 || fstar.w[3] > ten2mxtrunc256[ind].w[2] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } else if (ind <= 37) { // if 19 <= ind <= 37 if (fstar.w[5] > half256[ind] || (fstar.w[5] == half256[ind] && (fstar.w[4] || fstar.w[3] || fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[5] - half256[ind]; if (tmp64 || fstar.w[4] || fstar.w[3] > ten2mxtrunc256[ind].w[3] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } else if (ind <= 57) { // if 38 <= ind <= 57 if (fstar.w[6] > half256[ind] || (fstar.w[6] == half256[ind] && (fstar.w[5] || fstar.w[4] || fstar.w[3] || fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[6] - half256[ind]; if (tmp64 || fstar.w[5] || fstar.w[4] || fstar.w[3] > ten2mxtrunc256[ind].w[3] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } else { // if 58 <= ind <= 74 if (fstar.w[7] > half256[ind] || (fstar.w[7] == half256[ind] && (fstar.w[6] || fstar.w[5] || fstar.w[4] || fstar.w[3] || fstar.w[2] || fstar.w[1] || fstar.w[0]))) { // f* > 1/2 and the result may be exact // Calculate f* - 1/2 tmp64 = fstar.w[7] - half256[ind]; if (tmp64 || fstar.w[6] || fstar.w[5] || fstar.w[4] || fstar.w[3] > ten2mxtrunc256[ind].w[3] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x) *ptr_is_inexact_lt_midpoint = 1; } // else the result is exact } else { // the result is inexact; f2* <= 1/2 *ptr_is_inexact_gt_midpoint = 1; } } // check for midpoints (could do this before determining inexactness) if (fstar.w[7] == 0 && fstar.w[6] == 0 && fstar.w[5] == 0 && fstar.w[4] == 0 && (fstar.w[3] < ten2mxtrunc256[ind].w[3] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] < ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] < ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] <= ten2mxtrunc256[ind].w[0]))) { // the result is a midpoint if (Cstar.w[0] & 0x01) { // Cstar is odd; MP in [EVEN, ODD] // if floor(C*) is odd C = floor(C*) - 1; the result may be 0 Cstar.w[0]--; // Cstar is now even if (Cstar.w[0] == 0xffffffffffffffffULL) { Cstar.w[1]--; if (Cstar.w[1] == 0xffffffffffffffffULL) { Cstar.w[2]--; if (Cstar.w[2] == 0xffffffffffffffffULL) { Cstar.w[3]--; } } } *ptr_is_midpoint_gt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } else { // else MP in [ODD, EVEN] *ptr_is_midpoint_lt_even = 1; *ptr_is_inexact_lt_midpoint = 0; *ptr_is_inexact_gt_midpoint = 0; } } // check for rounding overflow, which occurs if Cstar = 10^(q-x) ind = q - x; // 1 <= ind <= q - 1 if (ind <= 19) { if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == 0x0ULL && Cstar.w[1] == 0x0ULL && Cstar.w[0] == ten2k64[ind]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k64[ind - 1]; // Cstar = 10^(q-x-1) *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind == 20) { // if ind = 20 if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == 0x0ULL && Cstar.w[1] == ten2k128[0].w[1] && Cstar.w[0] == ten2k128[0].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k64[19]; // Cstar = 10^(q-x-1) Cstar.w[1] = 0x0ULL; *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind <= 38) { // if 21 <= ind <= 38 if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == 0x0ULL && Cstar.w[1] == ten2k128[ind - 20].w[1] && Cstar.w[0] == ten2k128[ind - 20].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k128[ind - 21].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k128[ind - 21].w[1]; *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind == 39) { if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == ten2k256[0].w[2] && Cstar.w[1] == ten2k256[0].w[1] && Cstar.w[0] == ten2k256[0].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k128[18].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k128[18].w[1]; Cstar.w[2] = 0x0ULL; *incr_exp = 1; } else { *incr_exp = 0; } } else if (ind <= 57) { // if 40 <= ind <= 57 if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == ten2k256[ind - 39].w[2] && Cstar.w[1] == ten2k256[ind - 39].w[1] && Cstar.w[0] == ten2k256[ind - 39].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k256[ind - 40].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k256[ind - 40].w[1]; Cstar.w[2] = ten2k256[ind - 40].w[2]; *incr_exp = 1; } else { *incr_exp = 0; } // else if (ind == 58) is not needed becauae we do not have ten2k192[] yet } else { // if 58 <= ind <= 77 (actually 58 <= ind <= 74) if (Cstar.w[3] == ten2k256[ind - 39].w[3] && Cstar.w[2] == ten2k256[ind - 39].w[2] && Cstar.w[1] == ten2k256[ind - 39].w[1] && Cstar.w[0] == ten2k256[ind - 39].w[0]) { // if Cstar = 10^(q-x) Cstar.w[0] = ten2k256[ind - 40].w[0]; // Cstar = 10^(q-x-1) Cstar.w[1] = ten2k256[ind - 40].w[1]; Cstar.w[2] = ten2k256[ind - 40].w[2]; Cstar.w[3] = ten2k256[ind - 40].w[3]; *incr_exp = 1; } else { *incr_exp = 0; } } ptr_Cstar->w[3] = Cstar.w[3]; ptr_Cstar->w[2] = Cstar.w[2]; ptr_Cstar->w[1] = Cstar.w[1]; ptr_Cstar->w[0] = Cstar.w[0]; } libdfp-1.0.17/libbid/bid_sqrt_macros.h000066400000000000000000000171111504475242000176150ustar00rootroot00000000000000/* Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef _SQRT_MACROS_H_ #define _SQRT_MACROS_H_ #define FENCE __fence #if DOUBLE_EXTENDED_ON extern BINARY80 SQRT80 (BINARY80); __BID_INLINE__ UINT64 short_sqrt128 (UINT128 A10) { BINARY80 lx, ly, l64; int_float f64; // 2^64 f64.i = 0x5f800000; l64 = (BINARY80) f64.d; lx = (BINARY80) A10.w[1] * l64 + (BINARY80) A10.w[0]; ly = SQRT80 (lx); return (UINT64) ly; } __BID_INLINE__ void long_sqrt128 (UINT128 * pCS, UINT256 C256) { UINT256 C4; UINT128 CS; UINT64 X; SINT64 SE; BINARY80 l64, lm64, l128, lxL, lx, ly, lS, lSH, lSL, lE, l3, l2, l1, l0, lp, lCl; int_float fx, f64, fm64; int *ple = (int *) &lx; // 2^64 f64.i = 0x5f800000; l64 = (BINARY80) f64.d; l128 = l64 * l64; lx = l3 = (BINARY80) C256.w[3] * l64 * l128; l2 = (BINARY80) C256.w[2] * l128; lx = FENCE (lx + l2); l1 = (BINARY80) C256.w[1] * l64; lx = FENCE (lx + l1); l0 = (BINARY80) C256.w[0]; lx = FENCE (lx + l0); // sqrt(C256) lS = SQRT80 (lx); // get coefficient // 2^(-64) fm64.i = 0x1f800000; lm64 = (BINARY80) fm64.d; CS.w[1] = (UINT64) (lS * lm64); CS.w[0] = (UINT64) (lS - (BINARY80) CS.w[1] * l64); /////////////////////////////////////// // CAUTION! // little endian code only // add solution for big endian ////////////////////////////////////// lSH = lS; *((UINT64 *) & lSH) &= 0xffffffff00000000ull; // correction for C256 rounding lCl = FENCE (l3 - lx); lCl = FENCE (lCl + l2); lCl = FENCE (lCl + l1); lCl = FENCE (lCl + l0); lSL = lS - lSH; ////////////////////////////////////////// // Watch for compiler re-ordering // ///////////////////////////////////////// // C256-S^2 lxL = FENCE (lx - lSH * lSH); lp = lSH * lSL; lp += lp; lxL = FENCE (lxL - lp); lSL *= lSL; lxL = FENCE (lxL - lSL); lCl += lxL; // correction term lE = lCl / (lS + lS); // get low part of coefficient X = CS.w[0]; if (lCl >= 0) { SE = (SINT64) (lE); CS.w[0] += SE; if (CS.w[0] < X) CS.w[1]++; } else { SE = (SINT64) (-lE); CS.w[0] -= SE; if (CS.w[0] > X) CS.w[1]--; } pCS->w[0] = CS.w[0]; pCS->w[1] = CS.w[1]; } #else extern double sqrt (double); __BID_INLINE__ UINT64 short_sqrt128 (UINT128 A10) { UINT256 ARS, ARS0, AE0, AE, S; UINT64 MY, ES, CY; double lx, l64; int_double f64, ly; int ey, k; // 2^64 f64.i = 0x43f0000000000000ull; l64 = f64.d; lx = (double) A10.w[1] * l64 + (double) A10.w[0]; ly.d = 1.0 / sqrt (lx); MY = (ly.i & 0x000fffffffffffffull) | 0x0010000000000000ull; ey = 0x3ff - (ly.i >> 52); // A10*RS^2 __mul_64x128_to_192 (ARS0, MY, A10); __mul_64x192_to_256 (ARS, MY, ARS0); // shr by 2*ey+40, to get a 64-bit value k = (ey << 1) + 104 - 64; if (k >= 128) { if (k > 128) ES = (ARS.w[2] >> (k - 128)) | (ARS.w[3] << (192 - k)); else ES = ARS.w[2]; } else { if (k >= 64) { ARS.w[0] = ARS.w[1]; ARS.w[1] = ARS.w[2]; k -= 64; } if (k) { __shr_128 (ARS, ARS, k); } ES = ARS.w[0]; } ES = ((SINT64) ES) >> 1; if (((SINT64) ES) < 0) { ES = -ES; // A*RS*eps (scaled by 2^64) __mul_64x192_to_256 (AE0, ES, ARS0); AE.w[0] = AE0.w[1]; AE.w[1] = AE0.w[2]; AE.w[2] = AE0.w[3]; __add_carry_out (S.w[0], CY, ARS0.w[0], AE.w[0]); __add_carry_in_out (S.w[1], CY, ARS0.w[1], AE.w[1], CY); S.w[2] = ARS0.w[2] + AE.w[2] + CY; } else { // A*RS*eps (scaled by 2^64) __mul_64x192_to_256 (AE0, ES, ARS0); AE.w[0] = AE0.w[1]; AE.w[1] = AE0.w[2]; AE.w[2] = AE0.w[3]; __sub_borrow_out (S.w[0], CY, ARS0.w[0], AE.w[0]); __sub_borrow_in_out (S.w[1], CY, ARS0.w[1], AE.w[1], CY); S.w[2] = ARS0.w[2] - AE.w[2] - CY; } k = ey + 51; if (k >= 64) { if (k >= 128) { S.w[0] = S.w[2]; S.w[1] = 0; k -= 128; } else { S.w[0] = S.w[1]; S.w[1] = S.w[2]; } k -= 64; } if (k) { __shr_128 (S, S, k); } return (UINT64) ((S.w[0] + 1) >> 1); } __BID_INLINE__ void long_sqrt128 (UINT128 * pCS, UINT256 C256) { UINT512 ARS0, ARS; UINT256 ARS00, AE, AE2, S; UINT128 ES, ES2, ARS1; UINT64 ES32, CY, MY; double l64, l128, lx, l2, l1, l0; int_double f64, ly; int ey, k, k2; // 2^64 f64.i = 0x43f0000000000000ull; l64 = f64.d; l128 = l64 * l64; lx = (double) C256.w[3] * l64 * l128; l2 = (double) C256.w[2] * l128; lx = FENCE (lx + l2); l1 = (double) C256.w[1] * l64; lx = FENCE (lx + l1); l0 = (double) C256.w[0]; lx = FENCE (lx + l0); // sqrt(C256) ly.d = 1.0 / sqrt (lx); MY = (ly.i & 0x000fffffffffffffull) | 0x0010000000000000ull; ey = 0x3ff - (ly.i >> 52); // A10*RS^2, scaled by 2^(2*ey+104) __mul_64x256_to_320 (ARS0, MY, C256); __mul_64x320_to_384 (ARS, MY, ARS0); // shr by k=(2*ey+104)-128 // expect k is in the range (192, 256) if result in [10^33, 10^34) // apply an additional signed shift by 1 at the same time (to get eps=eps0/2) k = (ey << 1) + 104 - 128 - 192; k2 = 64 - k; ES.w[0] = (ARS.w[3] >> (k + 1)) | (ARS.w[4] << (k2 - 1)); ES.w[1] = (ARS.w[4] >> k) | (ARS.w[5] << k2); ES.w[1] = ((SINT64) ES.w[1]) >> 1; // A*RS >> 192 (for error term computation) ARS1.w[0] = ARS0.w[3]; ARS1.w[1] = ARS0.w[4]; // A*RS>>64 ARS00.w[0] = ARS0.w[1]; ARS00.w[1] = ARS0.w[2]; ARS00.w[2] = ARS0.w[3]; ARS00.w[3] = ARS0.w[4]; if (((SINT64) ES.w[1]) < 0) { ES.w[0] = -ES.w[0]; ES.w[1] = -ES.w[1]; if (ES.w[0]) ES.w[1]--; // A*RS*eps __mul_128x128_to_256 (AE, ES, ARS1); __add_carry_out (S.w[0], CY, ARS00.w[0], AE.w[0]); __add_carry_in_out (S.w[1], CY, ARS00.w[1], AE.w[1], CY); __add_carry_in_out (S.w[2], CY, ARS00.w[2], AE.w[2], CY); S.w[3] = ARS00.w[3] + AE.w[3] + CY; } else { // A*RS*eps __mul_128x128_to_256 (AE, ES, ARS1); __sub_borrow_out (S.w[0], CY, ARS00.w[0], AE.w[0]); __sub_borrow_in_out (S.w[1], CY, ARS00.w[1], AE.w[1], CY); __sub_borrow_in_out (S.w[2], CY, ARS00.w[2], AE.w[2], CY); S.w[3] = ARS00.w[3] - AE.w[3] - CY; } // 3/2*eps^2, scaled by 2^128 ES32 = ES.w[1] + (ES.w[1] >> 1); __mul_64x64_to_128 (ES2, ES32, ES.w[1]); // A*RS*3/2*eps^2 __mul_128x128_to_256 (AE2, ES2, ARS1); // result, scaled by 2^(ey+52-64) __add_carry_out (S.w[0], CY, S.w[0], AE2.w[0]); __add_carry_in_out (S.w[1], CY, S.w[1], AE2.w[1], CY); __add_carry_in_out (S.w[2], CY, S.w[2], AE2.w[2], CY); S.w[3] = S.w[3] + AE2.w[3] + CY; // k in (0, 64) k = ey + 51 - 128; k2 = 64 - k; S.w[0] = (S.w[1] >> k) | (S.w[2] << k2); S.w[1] = (S.w[2] >> k) | (S.w[3] << k2); // round to nearest S.w[0]++; if (!S.w[0]) S.w[1]++; pCS->w[0] = (S.w[1] << 63) | (S.w[0] >> 1); pCS->w[1] = S.w[1] >> 1; } #endif #endif libdfp-1.0.17/libdecnumber.pc.in000066400000000000000000000004571504475242000164350ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: @PACKAGE_NAME@-decnumber Description: Arbitrary precision soft decimal float library URL: https://github.com/libdfp/libdfp Version: @PACKAGE_VERSION@ Cflags: -I${includedir}/decnumber Libs: -L${libdir} -ldecnumber libdfp-1.0.17/libdecnumber/000077500000000000000000000000001504475242000154765ustar00rootroot00000000000000libdfp-1.0.17/libdecnumber/.gitignore000066400000000000000000000000111504475242000174560ustar00rootroot00000000000000gstdint.hlibdfp-1.0.17/libdecnumber/ChangeLog000066400000000000000000000520341504475242000172540ustar00rootroot000000000000002019-01-01 Jakub Jelinek Update copyright years. 2018-10-31 Joseph Myers PR bootstrap/82856 Merge from binutils-gdb: 2018-06-19 Simon Marchi * configure.ac: Remove AC_PREREQ. * configure: Re-generate. * aclocal.m4. 2018-07-05 James Clarke * configure: Regenerated. 2018-02-19 Martin Liska PR c/81272 * decNumber.c (decCompareOp): Do not use bit and for conjunction of predicates. 2018-01-03 Jakub Jelinek Update copyright years. 2017-05-29 Sylvestre Ledru * bid/bid2dpd_dpd2bid.c (_bid_to_dpd32): Fix whitespace. (_dpd_to_bid32): Simplify identical code on multiple branches. Fix whitespace. (_bid_to_dpd64, _dpd_to_bid64): Likewise. (_bid_to_dpd128, _dpd_to_bid128): Likewise. 2017-04-03 Jonathan Wakely * decCommon.c (decFloatFromPackedChecked): Fix typo in comment. * decNumber.c (decNumberPower, decMultiplyOp): Likewise. 2017-01-08 Jakub Jelinek PR bootstrap/79003 * Makefile.in (CFLAGS, CPPFLAGS, LDFLAGS): Remove -fno-lto. (NOLTO_FLAGS): New variable. (ALL_CFLAGS): Use it. * configure.ac (nolto_flags): New ACX_PROG_CC_WARNING_OPTS, check for whether -fno-lto works. * configure: Regenerated. 2017-01-06 Martin Liska PR bootstrap/79003 * Makefile.in: Add -fno-lto to {C,CPP,LD}FLAGS. 2017-01-01 Jakub Jelinek Update copyright years. 2016-11-15 Matthias Klose * configure: Regenerate. 2016-01-04 Jakub Jelinek Update copyright years. 2015-06-30 H.J. Lu * configure: Regenerated. 2015-05-13 Michael Haubenwallner * aclocal.m4: Regenerated with automake-1.11.6. 2015-01-05 Jakub Jelinek Update copyright years. 2014-11-11 David Malcolm * ChangeLog.jit: New. 2014-01-23 Marek Polacek PR c/59871 * decNumberLocal.h (UBFROMUS, UBFROMUI): Remove last argument. 2014-01-02 Richard Sandiford Update copyright years 2013-10-15 David Malcolm * Makefile.in (PICFLAG): New. (ALL_CFLAGS): Add PICFLAG. * configure.ac: Add --enable-host-shared, setting up new PICFLAG variable. * configure: Regenerate. 2013-07-09 Simon Baldwin * configure.ac: Add AC_CONFIG_AUX_DIR. * configure: Regenerated. 2013-03-27 Kai Tietz * configure: Regenerated. 2013-02-06 Richard Sandiford Update copyright years. 2012-11-04 Thomas Schwinge * configure: Regenerate. 2011-12-20 Andreas Schwab * configure: Regenerate. 2011-12-19 Andreas Schwab * configure: Regenerate. 2011-04-20 Jim Meyering * decNumber.c (decNumberFromString): Remove useless if-before-free test. (decNumberCompareTotalMag, decNumberExp, decNumberFMA): Likewise. (decNumberLn, decNumberLog10, decNumberPower): Likewise. (decNumberReduce, decNumberSquareRoot, decAddOp): Likewise. (decDivideOp, NEEDTWO, decExpOp, LN2): Likewise. 2011-03-28 Mike Frysinger * .gitignore: New file. 2010-11-24 Nathan Froyd * dconfig.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Delete. (WORDS_BIG_ENDIAN): Define based on value of __FLOAT_WORD_ORDER__. 2010-10-23 Nathan Froyd * dconfig.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Test __BYTE_ORDER__. 2010-09-10 Kai Tietz * configure: Regenerated. 2010-09-08 Tristan Gingold PR 44001 * Makefile.in (objext): New variable. (bid_OBJS): Use $(objext) for extension. (libdecnumber_a_OBJS): Ditto. (mostlyclean): Ditto (.c.o): Ditto. Update dependencies. 2010-09-06 H.J. Lu PR target/45524 * configure.ac (enable_decimal_float): Set to $default_decimal_float. * configure: Regenerated. 2010-09-06 Andreas Schwab * configure: Regenerate. 2010-09-03 Andreas Krebbel * configure.ac: Use the GCC_AC_ENABLE_DECIMAL_FLOAT macro. * Makefile.in: Add aclocal.m4 dependency to dfp.m4. * configure: Regenerate. * aclocal.m4: Regenerate. 2010-08-21 Ralf Wildenhues * configure: Regenerate. 2010-04-02 Ralf Wildenhues * aclocal.m4: Regenerate. 2010-01-05 Rainer Orth * configure: Regenerate. 2009-11-28 Jakub Jelinek * decContext.c (decContextTestEndian): Move adj definition into #if DECCHECK guarded code. 2009-09-09 Paolo Bonzini * configure: Regenerate. 2009-09-08 Paolo Bonzini * configure: Regenerate. 2009-08-24 Ralf Wildenhues * configure.ac (AC_PREREQ): Bump to 2.64. 2009-08-22 Ralf Wildenhues * aclocal.m4: Regenerate. * configure: Regenerate. * config.in: Regenerate. 2009-08-13 Janis Johnson PR c/41046 * decContext.c (decContextTestEndian): Call printf only if DECCHECK. * decCommon.c ( decFloatShow): Define function only for DECCHECK or DECTRACE. 2009-07-30 Ralf Wildenhues * Makefile.in (aclocal_deps): New variable. ($(srcdir)/aclocal.m4): Use it, for portable makefile syntax. 2009-05-31 Ian Lance Taylor * decContext.h: Add extern "C" if compiling with C++. * decDPD.h: Likewise. * decNumber.h: Likewise. * dpd/decimal32.h: Likewise. * dpd/decimal64.h: Likewise. * dpd/decimal128.h: Likewise. 2009-04-09 Nick Clifton * decRound.c: Change copyright header to refer to version 3 of the GNU General Public License with version 3.1 of the GCC Runtime Library Exception and to point readers at the COPYING3 and COPYING3.RUNTIME files and the FSF's license web page. * bid/bid-dpd.h: Likewise. * bid/bid2dpd_dpd2bid.c: Likewise. * bid/bid2dpd_dpd2bid.h: Likewise. * bid/decimal128.c: Likewise. * bid/decimal32.c: Likewise. * bid/decimal64.c: Likewise. * bid/host-ieee128.c: Likewise. * bid/host-ieee32.c: Likewise. * bid/host-ieee64.c: Likewise. * dconfig.h: Likewise. * decBasic.c: Likewise. * decCommon.c: Likewise. * decContext.c: Likewise. * decContext.h: Likewise. * decDPD.h: Likewise. * decDouble.c: Likewise. * decDouble.h: Likewise. * decExcept.c: Likewise. * decExcept.h: Likewise. * decLibrary.c: Likewise. * decNumber.c: Likewise. * decNumber.h: Likewise. * decNumberLocal.h: Likewise. * decPacked.c: Likewise. * decPacked.h: Likewise. * decQuad.c: Likewise. * decQuad.h: Likewise. * decRound.h: Likewise. * decSingle.c: Likewise. * decSingle.h: Likewise. * dpd/decimal128.c: Likewise. * dpd/decimal128.h: Likewise. * dpd/decimal128Local.h: Likewise. * dpd/decimal32.c: Likewise. * dpd/decimal32.h: Likewise. * dpd/decimal64.c: Likewise. * dpd/decimal64.h: Likewise. 2009-04-09 Jakub Jelinek * Makefile.in: Change copyright header to refer to version 3 of the GNU General Public License and to point readers at the COPYING3 file and the FSF's license web page. * configure.ac: Likewise. 2009-04-01 Ben Elliston * decContext.h: Include gstdint.h instead of . 2009-03-30 Ben Elliston * decNumber.c, decNumber.h, decNumberLocal.h, decDouble.c, decDouble.h, decSingle.c, decContext.c, decSingle.h, decPacked.c, decCommon.c, decContext.h, decQuad.c, decPacked.h, decQuad.h, decDPD.h, decBasic.c: Upgrade to decNumber 3.61. * dpd/decimal128.h, dpd/decimal32.c, dpd/decimal32.h, dpd/decimal64.c, dpd/decimal128.c, dpd/decimal64.h: Likewise. 2009-02-10 Joseph Myers * Makefile.in (clean): Don't remove makedepend$(EXEEXT). 2008-10-27 Janis Johnson PR other/37897 * decDouble.h (decDouble): Replace struct with union accessible by more types. * decSingle.h (decSingle): Ditto. * decQuad.h (decQuad): Ditto. * decNumberLocal.h (DFWORD, DFBYTE, DFWWORD): access decFloat via new members. * decBasic.c (decFloatCompareTotal): Avoid type-pun violation. (decNumberCompare): Ditto. 2008-06-17 Ralf Wildenhues * Makefile.in ($(srcdir)/aclocal.m4): Update dependencies. * configure: Regenerate. 2008-06-16 Ralf Wildenhues * Makefile.in (datarootdir): New variable. 2008-06-10 Joseph Myers * dconfig.h: New. * decContext.c, decExcept.c, decExcept.h, decLibrary.c, decNumber.c, decNumberLocal.h, decRound.c, dpd/decimal128.c, dpd/decimal32.c, dpd/decimal64.c: Include dconfig.h not config.h. * dpd/decimal128Local.h (decimal128SetSign, decimal128ClearSign, decimal128FlipSign): Use WORDS_BIGENDIAN not FLOAT_WORDS_BIG_ENDIAN. * bid/host-ieee128.c: Include dconfig.h. (__host_to_ieee_128, __ieee_to_host_128): Swap 64-bit halves of value if WORDS_BIGENDIAN. 2008-04-18 Paolo Bonzini PR bootstrap/35457 * aclocal.m4: Regenerate. * configure: Regenerate. 2008-04-18 Ben Elliston * Makefile.in (distclean): Add gstdint.h. 2008-01-25 Janis Johnson * decCommonSymbols.h: Commit. * decDPDSybmols.h: Commit. * Makefile.in (libdecnumber_a_SOURCES): List Symbols headers. * decCommonSymbols.h: New file. * decCommon.c: Include it. * decDPDSymbols.h: New file. * decDPD.h: Include it. * decNumberLocal.h: Include the two new files. * decContextSymbols.h (DECPOWERS, DECSTICKYTAB): New. * decNumberSymbols.h (LNnn, d2utable): New. * dpd/decimal32Symbols.h (COMBEXP, COMBMSD, DPD2BIN, BIN2DPD): New. * dpd/decimal64Symbols.h (COMBEXP, COMBMSD, DPD2BIN, BIN2DPD): New. * dpd/decimal128Symbols.h (COMBEXP, COMBMSD, DPD2BIN, BIN2DPD): New. * dpd/decimal32.c: Remove redefine of DPD2BIN, BIN2DPD. * dpd/decimal64.c: Ditto. * dpd/decimal128.c: Ditto. 2007-11-26 Thiago Jung Bauermann * Makefile.in (decimal32.o): Prepend $(srcdir) to dependencies and substitute $< for the source file in compilation command. (decimal64.o): Likewise. (decimal128.o): Likewise. (bid2dpd_dpd2bid.o): Likewise. (host-ieee32.o): Likewise. (host-ieee64.o): Likewise. (host-ieee128.o): Likewise. 2007-10-31 Thiago Jung Bauermann * configure.ac: Add ADDITIONAL_OBJS variable. * Makefile.in (bid_OBS): New. (libdecnumber_a_OBJS): Add ADDITIONAL_OBJS, remove condition on enable_decimal_float. * configure: Regenerate. 2007-09-10 Janis Johnson Ben Elliston * Makefile.in (libdecnumber_a_OBJS): Remove decUtility.o (dependencies): Add Symbols headers. * decContext.c: Upgrade to decNumber 3.53. * decContext.h: Ditto. * decDPD.h: Ditto. * decNumber.c: Ditto. * decNumber.h: Ditto. * decNumberLocal.h: Ditto. * decBasic.c: New file from decNumber 3.53. * decCommon.c: Ditto. * decDouble.c: Ditto. * decDouble.h: Ditto. * decQuad.c: Ditto. * decQuad.h: Ditto. * decSingle.c: Ditto. * decSingle.h: Ditto. * decPacked.c: Ditto. * decPacked.h: Ditto. * dpd/decimal128.c: Upgrade to decNumber 3.53. * dpd/decimal128.h: Ditto. * dpd/decimal32.c: Ditto. * dpd/decimal32.h: Ditto. * dpd/decimal64.c: Ditto. * dpd/decimal64.h: Ditto. * decLibrary.c (__dec_byte_swap): Remove. * decContextSymbols.h: New file. * decDoubleSymbols.h: New file. * decNumberSymbols.h: New file. * decPackedSymbols.h: New file. * decQuadSymbols.h: New file. * decSingleSymbols.h: New file. * decUtility.c: Delete file. * decUtility.h: Delete file. * bid/decimal128Symbols.h: New file. * bid/decimal128Local.h: New file. * bid/decimal32Symbols.h: New file. * bid/decimal64Symbols.h: New file. * bid/host-ieee128.c (__swap128): Remove. (__host_to_ieee_128, __ieee_to_host_128): Don't handle endianness. * bid/host-ieee32.c (__dec_type_swap): Remove. (__host_to_ieee_32, __ieee_to_host_32): Don't handle endianness. * bid/host-ieee64.c (__swap64): Remove. (__host_to_ieee_64, __ieee_to_host_64): Don't handle endianness. * dpd/decimal32Symbols.h: New file. * dpd/decimal64Symbols.h: New file. * dpd/decimal128Symbols.h: New file. * dpd/decimal128Local.h: New file. 2007-06-18 Martin Michlmayr H.J. Lu * configure.ac: Add AC_CANONICAL_TARGET. * configure: Regenerated. 2007-04-16 H.J. Lu * Makefile.in (aclocal.m4): Depend on stdint.m4 instead of acx.m4. * aclocal.m4: Regenerated by aclocal 1.9.6. 2007-04-11 Kai Tietz * configure: Regenerate. 2007-03-23 Michael Meissner H.J. Lu Marius Cornea * Makefile.in (enable_decimal_float): New. (libdecnumber_a_OBJS): Add bid2dpd_dpd2bid.o, host-ieee32.o, host-ieee64.o and host-ieee128.o for BID. (libdecnumber_a_SOURCES): Support DPD and BID. (decimal32.o): Support dependency for both DPD and BID. (decimal64.o): Likewise. (decimal128.o): Likewise. (bid2dpd_dpd2bid.o): New target. (host-ieee32.o): Likewise. (host-ieee64.o): Likewise. (host-ieee128.o): Likewise. * bid/bid-dpd.h: New file. * bid/decimal128.c: Likewise. * bid/decimal128.h: Likewise. * bid/decimal32.c: Likewise. * bid/decimal32.h: Likewise. * bid/decimal64.c: Likewise. * bid/decimal64.h: Likewise. * bid/host-ieee128.c: Likewise. * bid/host-ieee32.c: Likewise. * bid/host-ieee64.c: Likewise. * bid/bid2dpd_dpd2bid.c: Likewise. * bid/bid2dpd_dpd2bid.h: Likewise. * decimal128.c: Moved to ... * dpd/decimal128.c: This. * decimal128.h: Moved to ... * dpd/decimal128.h: This. * decimal32.c: Moved to ... * dpd/decimal32.c: This. * decimal32.h: Moved to ... * dpd/decimal32.h: This. * decimal64.c: Moved to ... * dpd/decimal64.c: This. * decimal64.h: Moved to ... * dpd/decimal64.h: This. * configure.ac: Support * --enable-decimal-float={no,yes,bid,dpd}. Add AC_C_BIGENDIAN. Substitute enable_decimal_float. * config.in: Add decimal support variables. * configure: Regenerate. PR other/30530 * decimal128.h (decimal128ClearSign): New. (decimal128FlipSign): Likewise. * decimal32.h: (decimal32ClearSign): New. (decimal32FlipSign): Likewise. * decimal64.h (decimal64ClearSign): New. (decimal64FlipSign): Likewise. 2007-03-08 Ben Elliston * decContext.c, decContext.h, decDPD.h, decimal128.c, decimal128.h, decimal32.c, decimal32.h, decimal64.c, decimal64.h, decLibrary.c, decNumber.c, decNumber.h, decNumberLocal.h, decRound.c, decRound.h, decUtility.c, decUtility.h: Add libgcc-style license exception clause. 2007-03-01 Brooks Moses * Makefile.in: Add dummy install-pdf target. 2007-01-29 Janis Johnson * decExcept.c: New. * decExcept.h: New. 2006-11-29 Janis Johnson * decRound.c: Move declarations to new file, update comments. * decRound.h: New file. 2006-11-21 Janis Johnson * decLibrary.c (__dec_type_swap): Add prototype. (__dfp_enable_traps, dfp_raise): Delete. * Makefile.in: Don't include decRound in library used by compiler. 2006-10-10 Brooks Moses * Makefile.in: Added empty "pdf" target. 2006-09-15 Kaveh R. Ghazi * decNumber.c (decNumberPower): Constify. * decNumber.h (decNumberPower): Likewise. 2006-09-07 Kaveh R. Ghazi * configure.ac (ACX_PROG_CC_WARNING_OPTS): Add -Wcast-qual. * configure, config.in: Regenerate. * decContext.c (decContextStatusToString): Constify. * decContext.h (decContextStatusToString): Likewise. * decNumber.c (decNumberToString, decNumberToEngString, decNumberAbs, decNumberAdd, decNumberCompare, decNumberDivide, decNumberDivideInteger, decNumberMax, decNumberMin, decNumberMinus, decNumberPlus, decNumberMultiply, decNumberNormalize, decNumberQuantize, decNumberRescale, decNumberRemainder, decNumberRemainderNear, decNumberSameQuantum, decNumberSquareRoot, decNumberSubtract, decNumberToIntegralValue, decNumberCopy, decToString, decAddOp, decDivideOp, decMultiplyOp, decQuantizeOp, decCompareOp, decCompare, decUnitCompare, decUnitAddSub, decRoundOperand, decCopyFit, decSetCoeff, decGetInt, decNaNs, decGetDigits, decNumberShow, decDumpAr, decCheckOperands, decCheckNumber): Likewise. * decNumber.h (decNumberToString, decNumberToEngString, decNumberAbs, decNumberAdd, decNumberCompare, decNumberDivide, decNumberDivideInteger, decNumberMax, decNumberMin, decNumberMinus, decNumberMultiply, decNumberNormalize, decNumberPlus, decNumberQuantize, decNumberRemainder, decNumberRemainderNear, decNumberRescale, decNumberSameQuantum, decNumberSquareRoot, decNumberSubtract, decNumberToIntegralValue, decNumberCopy): Likewise. * decUtility.c (decDensePackCoeff, decDenseUnpackCoeff): Likewise. * decUtility.h (decDensePackCoeff, decDenseUnpackCoeff): Likewise. * decimal128.c (decimal128FromNumber, decimal128ToNumber, decimal128ToString, decimal128ToEngString, decimal128Show): Likewise. * decimal128.h (decimal128ToString, decimal128ToEngString, decimal128FromNumber, decimal128ToNumber): Likewise. * decimal32.c (decimal32FromNumber, decimal32ToNumber, decimal32ToString, decimal32ToEngString, decimal32Show): Likewise. * decimal32.h (decimal32ToString, decimal32ToEngString, decimal32FromNumber, decimal32ToNumber): Likewise. * decimal64.c (decimal64FromNumber, decimal64ToNumber, decimal64ToString, decimal64ToEngString, decimal64Show): Likewise. * decimal64.h (decimal64ToString, decimal64ToEngString, decimal64FromNumber, decimal64ToNumber): Likewise. 2006-08-21 Kaveh R. Ghazi * decContext.c (decContextSetStatusFromString): Constify. * decContext.h (decContextSetStatusFromString): Likewise. * decNumber.c (decNumberFromString): Likewise. * decNumber.h (decNumberFromString): Likewise. * decimal128.c (decimal128FromString): Likewise. * decimal128.h (decimal128FromString): Likewise. * decimal32.c (decimal32FromString): Likewise. * decimal32.h (decimal32FromString): Likewise. * decimal64.c (decimal64FromString): Likewise. * decimal64.h (decimal64FromString): Likewise. 2006-07-25 Paolo Bonzini PR build/26188 * configure: Regenerate. 2006-06-23 Ben Elliston * decNumber.h (decNumberNegate): Remove. 2006-05-23 Carlos O'Donell * Makefile.in: Add install-html target. Add install-html to .PHONY 2006-02-06 Ben Elliston * decLibrary.c (__dec_byte_swap): Use uint32_t for argument and return types. 2006-01-03 Roger Sayle Kaveh R. Ghazi * decNumber.c (__NO_STRING_INLINES): Define to prevent glibc macro definition of strcpy from generating compilation warnings. 2006-01-02 Paolo Bonzini PR target/25259 * configure.ac: Use GCC_HEADER_STDINT. * decContext.h: Include gstdint.h. * aclocal.m4: Regenerate. * configure: Regenerate. 2005-12-20 Roger Sayle * decNumber.c (decStrEq): Cast string contents to unsigned char instead of int before calling tolower. 2005-12-20 Roger Sayle * decNumber.c (decStrEq): Cast operands to int before calling tolower to avoid compilation warnings on Tru64. 2005-12-05 Ben Elliston * Makefile.in (clean): Remove stray reference to libcpp.a. * decimal128.h, decContext.c, decRound.c, decimal32.c, decNumber.c, decContext.h, decimal64.c, decimal32.h, decNumber.h, decimal64.h, decUtility.c, decLibrary.c, configure.ac, decNumberLocal.h, decUtility.h, decDPD.h, decimal128.c: Update FSF office address. 2005-12-01 Ben Elliston * Makefile.in (libdecnumber_a_SOURCES): Drop decLibrary.c. * decUtility.c (__dec_byte_swap): Move from here .. * decLibrary.c: .. to here. 2005-11-23 Gerald Pfeifer * decContext.h: Properly guard inclusion of stdint.h * decContext.c: Include config.h * decLibrary.c: Ditto. * decNumber.c: Ditto. * decRound.c: Ditto. * decUtility.c: Ditto. * decimal32.c: Ditto. * decimal64.c: Ditto. * decimal128.c: Ditto. 2005-11-29 Ben Elliston * decUtility.c: Remove redundant #includes. * decUtility.h (__dec_byte_swap): Remove prototype. 2005-11-29 Ben Elliston * configure.ac: New file. * aclocal.m4: Likewise. * Makefile.in: Likewise. * configure: Generate. * config.in: Likewise. 2005-11-29 Ben Elliston * decimal32.h, decimal64.h, decimal128.h: New. * decimal32.c, decimal64.c, decimal128.c: Likewise. * decContext.c, decContext.h: Likewise. * decUtility.c, decUtility.h: Likewise. * decNumber.c, decNumber.h, decNumberLocal.h: Likewise. * decDPD.h: Likewise. * decLibrary.c, decRound.c: Likewise. Copyright (C) 2005-2019 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libdfp-1.0.17/libdecnumber/ChangeLog.jit000066400000000000000000000013161504475242000200360ustar00rootroot000000000000002014-09-24 David Malcolm * ChangeLog.jit: Add copyright footer. 2013-10-07 David Malcolm * Makefile.in: Set PICFLAG from configure script; add it to ALL_CFLAGS. * configure.ac (--enable-host-shared): Set up PICFLAG rather than attempting to append -fPIC to CFLAGS, CXXFLAGS, LDFLAGS. * configure: Regenerate. 2013-10-03 David Malcolm * configure.ac: Add --enable-host-shared. * configure: Regenerate. Copyright (C) 2013-2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libdfp-1.0.17/libdecnumber/Makefile000066400000000000000000000002711504475242000171360ustar00rootroot00000000000000# libdecnumber is used by all targets today. It is the fallback implementation # for many transcendental functions. libdfp_files += decContext decimal128 decimal64 decimal32 decNumber libdfp-1.0.17/libdecnumber/Makefile.in000066400000000000000000000136231504475242000175500ustar00rootroot00000000000000# @configure_input@ # Makefile for libdecnumber. Run 'configure' to generate Makefile from Makefile.in # Copyright (C) 2005-2016 Free Software Foundation, Inc. #This file is part of GCC. #GCC is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 3, or (at your option) #any later version. #GCC 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 GCC; see the file COPYING3. If not see #. @SET_MAKE@ srcdir = @srcdir@ top_builddir = . VPATH = @srcdir@ INSTALL = @INSTALL@ AR = ar ARFLAGS = cru ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ CC = @CC@ CFLAGS = @CFLAGS@ WARN_CFLAGS = @WARN_CFLAGS@ @WARN_PEDANTIC@ @WERROR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ PACKAGE = @PACKAGE@ PICFLAG = @PICFLAG@ RANLIB = @RANLIB@ SHELL = @SHELL@ objext = @OBJEXT@ datarootdir = @datarootdir@ datadir = @datadir@ exec_prefix = @prefix@ libdir = @libdir@ localedir = $(datadir)/locale prefix = @prefix@ ADDITIONAL_OBJS = @ADDITIONAL_OBJS@ enable_decimal_float= @enable_decimal_float@ INCLUDES = -I$(srcdir) -I. -I$(top_builddir)/libdecnumberconfig ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(PICFLAG) bid_OBJS = bid2dpd_dpd2bid.$(objext) host-ieee32.$(objext) \ host-ieee64.$(objext) host-ieee128.$(objext) libdecnumber_a_OBJS = decNumber.$(objext) decContext.$(objext) \ decimal32.$(objext) decimal64.$(objext) decimal128.$(objext) \ $(ADDITIONAL_OBJS) libdecnumber_a_SOURCES = decContext.c decContext.h decDPD.h \ decNumber.c decNumber.h decNumberLocal.h \ decContextSymbols.h decDPDSymbols.h decNumberSymbols.h \ dpd/decimal128.c dpd/decimal128.h dpd/decimal128Symbols.h \ dpd/decimal32.c dpd/decimal32.h dpd/decimal32Symbols.h \ dpd/decimal64.c dpd/decimal64.h dpd/decimal64Symbols.h \ bid/decimal128.c bid/decimal128.h \ bid/decimal32.c bid/decimal32.h \ bid/decimal64.c bid/decimal64.h all: libdecnumber.a .SUFFIXES: .SUFFIXES: .c .o .obj libdecnumber.a: $(libdecnumber_a_OBJS) -rm -f $@ $(AR) $(ARFLAGS) $@ $(libdecnumber_a_OBJS) $(RANLIB) $@ # Rules to rebuild the configuration Makefile: $(srcdir)/Makefile.in config.status $(SHELL) ./config.status Makefile config.status: $(srcdir)/configure $(SHELL) ./config.status --recheck $(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4 cd $(srcdir) && $(AUTOCONF) aclocal_deps = \ $(srcdir)/../config/stdint.m4 \ $(srcdir)/../config/warnings.m4 \ $(srcdir)/../config/override.m4 \ $(srcdir)/../config/dfp.m4 \ $(srcdir)/configure.ac $(srcdir)/aclocal.m4: @MAINT@ $(aclocal_deps) cd $(srcdir) && $(ACLOCAL) -I ../config config.h: stamp-h1 test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1) stamp-h1: $(srcdir)/config.in config.status -rm -f stamp-h1 $(SHELL) ./config.status config.h $(srcdir)/config.in: @MAINT@ $(srcdir)/configure cd $(srcdir) && $(AUTOHEADER) -rm -f stamp-h1 # Dependencies. decContext.$(objext): decContext.c decContext.h decNumberLocal.h \ decContextSymbols.h decNumber.$(objext): decNumber.c decNumber.h decContext.h decNumberLocal.h \ decNumberSymbols.h decimal32.$(objext): $(srcdir)/$(enable_decimal_float)/decimal32.c \ $(srcdir)/$(enable_decimal_float)/decimal32.h \ $(srcdir)/$(enable_decimal_float)/decimal32Symbols.h \ decNumber.h decContext.h decNumberLocal.h $(COMPILE) $(srcdir)/$(enable_decimal_float)/decimal32.c decimal64.$(objext): $(srcdir)/$(enable_decimal_float)/decimal64.c \ $(srcdir)/$(enable_decimal_float)/decimal64.h \ $(srcdir)/$(enable_decimal_float)/decimal64Symbols.h \ decNumber.h decContext.h decNumberLocal.h $(COMPILE) $(srcdir)/$(enable_decimal_float)/decimal64.c decimal128.$(objext): $(srcdir)/$(enable_decimal_float)/decimal128.c \ $(srcdir)/$(enable_decimal_float)/decimal128.h \ $(srcdir)/$(enable_decimal_float)/decimal128Symbols.h\ $(srcdir)/$(enable_decimal_float)/decimal128Local.h\ decNumber.h decContext.h decNumberLocal.h $(COMPILE) $(srcdir)/$(enable_decimal_float)/decimal128.c bid2dpd_dpd2bid.$(objext) : $(srcdir)/bid/bid2dpd_dpd2bid.c $(srcdir)/bid/bid2dpd_dpd2bid.h $(COMPILE) $(srcdir)/bid/bid2dpd_dpd2bid.c host-ieee32.$(objext) : $(srcdir)/bid/host-ieee32.c $(srcdir)/bid/decimal32.h $(COMPILE) $(srcdir)/bid/host-ieee32.c host-ieee64.$(objext) : $(srcdir)/bid/host-ieee64.c $(srcdir)/bid/decimal64.h $(COMPILE) $(srcdir)/bid/host-ieee64.c host-ieee128.$(objext) : $(srcdir)/bid/host-ieee128.c $(srcdir)/bid/decimal128.h $(COMPILE) $(srcdir)/bid/host-ieee128.c # Other miscellaneous targets. mostlyclean: -rm -f *.$(objext) clean: mostlyclean -rm -rf libdecnumber.a $(srcdir)/autom4te.cache distclean: clean -rm -f config.h stamp-h1 config.status config.cache config.log \ configure.lineno configure.status.lineno Makefile localedir.h \ localedir.hs gstdint.h maintainer-clean: distclean @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f $(srcdir)/configure $(srcdir)/aclocal.m4 check: installcheck: dvi: pdf: html: info: install-info: install-pdf: install-man: install-html: install: .PHONY: installdirs install install-strip mostlyclean clean distclean \ maintainer-clean check installcheck dvi pdf html info install-info \ install-pdf install-man update-po install-html COMPILE = source='$<' object='$@' libtool=no $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(ALL_CFLAGS) -c # Implicit rules .c.$(objext): $(COMPILE) $< # 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: libdfp-1.0.17/libdecnumber/aclocal.m4000066400000000000000000000014431504475242000173400ustar00rootroot00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file 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. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_include([../config/dfp.m4]) m4_include([../config/override.m4]) m4_include([../config/stdint.m4]) m4_include([../config/warnings.m4]) libdfp-1.0.17/libdecnumber/bid/000077500000000000000000000000001504475242000162345ustar00rootroot00000000000000libdfp-1.0.17/libdecnumber/bid/Makefile000066400000000000000000000001101504475242000176640ustar00rootroot00000000000000# BID support adds a couple extra files libdfp_files += bid2dpd_dpd2bid libdfp-1.0.17/libdecnumber/bid/bid-dpd.h000066400000000000000000000026751504475242000177220ustar00rootroot00000000000000/* Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ typedef unsigned int UINT32; typedef unsigned long long UINT64; typedef struct { UINT64 w[2]; } UINT128; #ifndef IN_LIBGCC2 #define _Decimal32 UINT32 #define _Decimal64 UINT64 #define _Decimal128 UINT128 #endif void _bid_to_dpd32 (_Decimal32 *, _Decimal32 *); void _dpd_to_bid32 (_Decimal32 *, _Decimal32 *); void _bid_to_dpd64 (_Decimal64 *, _Decimal64 *); void _dpd_to_bid64 (_Decimal64 *, _Decimal64 *); void _bid_to_dpd128 (_Decimal128 *, _Decimal128 *); void _dpd_to_bid128 (_Decimal128 *, _Decimal128 *); libdfp-1.0.17/libdecnumber/bid/bid2dpd_dpd2bid.c000066400000000000000000000322261504475242000213050ustar00rootroot00000000000000/* Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #undef IN_LIBGCC2 #include "bid-dpd.h" /* get full 64x64bit product */ #define __mul_64x64_to_128(P, CX, CY) \ { \ UINT64 CXH, CXL, CYH,CYL,PL,PH,PM,PM2; \ CXH = (CX) >> 32; \ CXL = (UINT32)(CX); \ CYH = (CY) >> 32; \ CYL = (UINT32)(CY); \ \ PM = CXH*CYL; \ PH = CXH*CYH; \ PL = CXL*CYL; \ PM2 = CXL*CYH; \ PH += (PM>>32); \ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \ \ (P).w[1] = PH + (PM>>32); \ (P).w[0] = (PM<<32)+(UINT32)PL; \ } /* add 64-bit value to 128-bit */ #define __add_128_64(R128, A128, B64) \ { \ UINT64 R64H; \ R64H = (A128).w[1]; \ (R128).w[0] = (B64) + (A128).w[0]; \ if((R128).w[0] < (B64)) R64H ++; \ (R128).w[1] = R64H; \ } /* add 128-bit value to 128-bit (assume no carry-out) */ #define __add_128_128(R128, A128, B128) \ { \ UINT128 Q128; \ Q128.w[1] = (A128).w[1]+(B128).w[1]; \ Q128.w[0] = (B128).w[0] + (A128).w[0]; \ if(Q128.w[0] < (B128).w[0]) Q128.w[1] ++; \ (R128).w[1] = Q128.w[1]; \ (R128).w[0] = Q128.w[0]; \ } #define __mul_128x128_high(Q, A, B) \ { \ UINT128 ALBL, ALBH, AHBL, AHBH, QM, QM2; \ \ __mul_64x64_to_128(ALBH, (A).w[0], (B).w[1]); \ __mul_64x64_to_128(AHBL, (B).w[0], (A).w[1]); \ __mul_64x64_to_128(ALBL, (A).w[0], (B).w[0]); \ __mul_64x64_to_128(AHBH, (A).w[1],(B).w[1]); \ \ __add_128_128(QM, ALBH, AHBL); \ __add_128_64(QM2, QM, ALBL.w[1]); \ __add_128_64((Q), AHBH, QM2.w[1]); \ } #include "bid2dpd_dpd2bid.h" static const unsigned int dm103[] = { 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000 }; void _bid_to_dpd32 (_Decimal32 *, _Decimal32 *); void _bid_to_dpd32 (_Decimal32 *pres, _Decimal32 *px) { unsigned int sign, coefficient_x, exp, dcoeff; unsigned int b2, b1, b0, b01, res; _Decimal32 x = *px; sign = (x & 0x80000000); if ((x & 0x60000000ul) == 0x60000000ul) { /* special encodings */ if ((x & 0x78000000ul) == 0x78000000ul) { *pres = x; /* NaN or Infinity */ return; } /* coefficient */ coefficient_x = (x & 0x001ffffful) | 0x00800000ul; if (coefficient_x >= 10000000) coefficient_x = 0; /* get exponent */ exp = (x >> 21) & 0xff; } else { exp = (x >> 23) & 0xff; coefficient_x = (x & 0x007ffffful); } b01 = coefficient_x / 1000; b2 = coefficient_x - 1000 * b01; b0 = b01 / 1000; b1 = b01 - 1000 * b0; dcoeff = b2d[b2] | b2d2[b1]; if (b0 >= 8) { /* is b0 8 or 9? */ res = sign | ((0x600 | ((exp >> 6) << 7) | ((b0 & 1) << 6) | (exp & 0x3f)) << 20) | dcoeff; } else { /* else b0 is 0..7 */ res = sign | ((((exp >> 6) << 9) | (b0 << 6) | (exp & 0x3f)) << 20) | dcoeff; } *pres = res; } void _dpd_to_bid32 (_Decimal32 *, _Decimal32 *); void _dpd_to_bid32 (_Decimal32 *pres, _Decimal32 *px) { unsigned int r; unsigned int sign, exp, bcoeff; UINT64 trailing; unsigned int d0, d1, d2; _Decimal32 x = *px; sign = (x & 0x80000000); trailing = (x & 0x000fffff); if ((x & 0x78000000) == 0x78000000) { *pres = x; return; } /* normal number */ if ((x & 0x60000000) == 0x60000000) { /* G0..G1 = 11 -> d0 = 8 + G4 */ d0 = d2b3[((x >> 26) & 1) | 8]; /* d0 = (comb & 0x0100 ? 9 : 8); */ exp = (x >> 27) & 3; /* exp leading bits are G2..G3 */ } else { d0 = d2b3[(x >> 26) & 0x7]; exp = (x >> 29) & 3; /* exp loading bits are G0..G1 */ } d1 = d2b2[(trailing >> 10) & 0x3ff]; d2 = d2b[(trailing) & 0x3ff]; bcoeff = d2 + d1 + d0; exp = (exp << 6) + ((x >> 20) & 0x3f); if (bcoeff < (1 << 23)) { r = exp; r <<= 23; r |= (bcoeff | sign); } else { r = exp; r <<= 21; r |= (sign | 0x60000000ul); /* add coeff, without leading bits */ r |= (((unsigned int) bcoeff) & 0x1fffff); } *pres = r; } void _bid_to_dpd64 (_Decimal64 *, _Decimal64 *); void _bid_to_dpd64 (_Decimal64 *pres, _Decimal64 *px) { UINT64 res; UINT64 sign, comb, exp, B34, B01; UINT64 d103, D61; UINT64 b0, b2, b3, b5; unsigned int b1, b4; UINT64 bcoeff; UINT64 dcoeff; unsigned int yhi, ylo; _Decimal64 x = *px; sign = (x & 0x8000000000000000ull); comb = (x & 0x7ffc000000000000ull) >> 51; if ((comb & 0xf00) == 0xf00) { *pres = x; return; } /* Normal number */ if ((comb & 0xc00) == 0xc00) { /* G0..G1 = 11 -> exp is G2..G11 */ exp = (comb) & 0x3ff; bcoeff = (x & 0x0007ffffffffffffull) | 0x0020000000000000ull; } else { exp = (comb >> 2) & 0x3ff; bcoeff = (x & 0x001fffffffffffffull); } D61 = 2305843009ull; /* Floor(2^61 / 10^9) */ /* Multiply the binary coefficient by ceil(2^64 / 1000), and take the upper 64-bits in order to compute a division by 1000. */ yhi = (D61 * (UINT64)(bcoeff >> (UINT64)27)) >> (UINT64)34; ylo = bcoeff - 1000000000ull * yhi; if (ylo >= 1000000000) { ylo = ylo - 1000000000; yhi = yhi + 1; } d103 = 0x4189374c; B34 = ((UINT64) ylo * d103) >> (32 + 8); B01 = ((UINT64) yhi * d103) >> (32 + 8); b5 = ylo - B34 * 1000; b2 = yhi - B01 * 1000; b3 = ((UINT64) B34 * d103) >> (32 + 8); b0 = ((UINT64) B01 * d103) >> (32 + 8); b4 = (unsigned int) B34 - (unsigned int) b3 *1000; b1 = (unsigned int) B01 - (unsigned int) dm103[b0]; dcoeff = b2d[b5] | b2d2[b4] | b2d3[b3] | b2d4[b2] | b2d5[b1]; if (b0 >= 8) /* is b0 8 or 9? */ res = sign | ((0x1800 | ((exp >> 8) << 9) | ((b0 & 1) << 8) | (exp & 0xff)) << 50) | dcoeff; else /* else b0 is 0..7 */ res = sign | ((((exp >> 8) << 11) | (b0 << 8) | (exp & 0xff)) << 50) | dcoeff; *pres = res; } void _dpd_to_bid64 (_Decimal64 *, _Decimal64 *); void _dpd_to_bid64 (_Decimal64 *pres, _Decimal64 *px) { UINT64 res; UINT64 sign, comb, exp; UINT64 trailing; UINT64 d0, d1, d2; unsigned int d3, d4, d5; UINT64 bcoeff, mask; _Decimal64 x = *px; sign = (x & 0x8000000000000000ull); comb = (x & 0x7ffc000000000000ull) >> 50; trailing = (x & 0x0003ffffffffffffull); if ((comb & 0x1e00) == 0x1e00) { *pres = x; return; } /* normal number */ if ((comb & 0x1800) == 0x1800) { /* G0..G1 = 11 -> d0 = 8 + G4 */ d0 = d2b6[((comb >> 8) & 1) | 8]; /* d0 = (comb & 0x0100 ? 9 : 8); */ exp = (comb & 0x600) >> 1; /* exp = (comb & 0x0400 ? 1 : 0) * 0x200 + (comb & 0x0200 ? 1 : 0) * 0x100; exp leading bits are G2..G3 */ } else { d0 = d2b6[(comb >> 8) & 0x7]; exp = (comb & 0x1800) >> 3; /* exp = (comb & 0x1000 ? 1 : 0) * 0x200 + (comb & 0x0800 ? 1 : 0) * 0x100; exp loading bits are G0..G1 */ } d1 = d2b5[(trailing >> 40) & 0x3ff]; d2 = d2b4[(trailing >> 30) & 0x3ff]; d3 = d2b3[(trailing >> 20) & 0x3ff]; d4 = d2b2[(trailing >> 10) & 0x3ff]; d5 = d2b[(trailing) & 0x3ff]; bcoeff = (d5 + d4 + d3) + d2 + d1 + d0; exp += (comb & 0xff); mask = 1; mask <<= 53; if (bcoeff < mask) { /* check whether coefficient fits in 10*5+3 bits */ res = exp; res <<= 53; res |= (bcoeff | sign); *pres = res; return; } /* special format */ res = (exp << 51) | (sign | 0x6000000000000000ull); /* add coeff, without leading bits */ mask = (mask >> 2) - 1; bcoeff &= mask; res |= bcoeff; *pres = res; } void _bid_to_dpd128 (_Decimal128 *, _Decimal128 *); void _bid_to_dpd128 (_Decimal128 *pres, _Decimal128 *px) { UINT128 res; UINT128 sign; unsigned int comb; UINT128 bcoeff; UINT128 dcoeff; UINT128 BH, d1018, BT2, BT1; UINT64 exp, BL, d109; UINT64 d106, d103; UINT64 k1, k2, k4, k5, k7, k8, k10, k11; unsigned int BHH32, BLL32, BHL32, BLH32, k0, k3, k6, k9, amount; _Decimal128 x = *px; sign.w[1] = (x.w[1] & 0x8000000000000000ull); sign.w[0] = 0; comb = (x.w[1] /*& 0x7fffc00000000000ull */ ) >> 46; exp = 0; if ((comb & 0x1e000) == 0x1e000) { res = x; } else { /* normal number */ exp = ((x.w[1] & 0x7fff000000000000ull) >> 49) & 0x3fff; bcoeff.w[1] = (x.w[1] & 0x0001ffffffffffffull); bcoeff.w[0] = x.w[0]; d1018 = reciprocals10_128[18]; __mul_128x128_high (BH, bcoeff, d1018); amount = recip_scale[18]; BH.w[0] = (BH.w[0] >> amount) | (BH.w[1] << (64 - amount)); BL = bcoeff.w[0] - BH.w[0] * 1000000000000000000ull; d109 = reciprocals10_64[9]; __mul_64x64_to_128 (BT1, BH.w[0], d109); BHH32 = (unsigned int) (BT1.w[1] >> short_recip_scale[9]); BHL32 = (unsigned int) BH.w[0] - BHH32 * 1000000000; __mul_64x64_to_128 (BT2, BL, d109); BLH32 = (unsigned int) (BT2.w[1] >> short_recip_scale[9]); BLL32 = (unsigned int) BL - BLH32 * 1000000000; d106 = 0x431BDE83; d103 = 0x4189374c; k0 = ((UINT64) BHH32 * d106) >> (32 + 18); BHH32 -= (unsigned int) k0 *1000000; k1 = ((UINT64) BHH32 * d103) >> (32 + 8); k2 = BHH32 - (unsigned int) k1 *1000; k3 = ((UINT64) BHL32 * d106) >> (32 + 18); BHL32 -= (unsigned int) k3 *1000000; k4 = ((UINT64) BHL32 * d103) >> (32 + 8); k5 = BHL32 - (unsigned int) k4 *1000; k6 = ((UINT64) BLH32 * d106) >> (32 + 18); BLH32 -= (unsigned int) k6 *1000000; k7 = ((UINT64) BLH32 * d103) >> (32 + 8); k8 = BLH32 - (unsigned int) k7 *1000; k9 = ((UINT64) BLL32 * d106) >> (32 + 18); BLL32 -= (unsigned int) k9 *1000000; k10 = ((UINT64) BLL32 * d103) >> (32 + 8); k11 = BLL32 - (unsigned int) k10 *1000; dcoeff.w[1] = (b2d[k5] >> 4) | (b2d[k4] << 6) | (b2d[k3] << 16) | (b2d[k2] << 26) | (b2d[k1] << 36); dcoeff.w[0] = b2d[k11] | (b2d[k10] << 10) | (b2d[k9] << 20) | (b2d[k8] << 30) | (b2d[k7] << 40) | (b2d[k6] << 50) | (b2d[k5] << 60); res.w[0] = dcoeff.w[0]; if (k0 >= 8) { res.w[1] = sign.w[1] | ((0x18000 | ((exp >> 12) << 13) | ((k0 & 1) << 12) | (exp & 0xfff)) << 46) | dcoeff.w[1]; } else { res.w[1] = sign.w[1] | ((((exp >> 12) << 15) | (k0 << 12) | (exp & 0xfff)) << 46) | dcoeff.w[1]; } } *pres = res; } void _dpd_to_bid128 (_Decimal128 *, _Decimal128 *); void _dpd_to_bid128 (_Decimal128 *pres, _Decimal128 *px) { UINT128 res; UINT128 sign; UINT64 exp, comb; UINT128 trailing; UINT64 d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11; UINT128 bcoeff; UINT64 tl, th; _Decimal128 x = *px; sign.w[1] = (x.w[1] & 0x8000000000000000ull); sign.w[0] = 0; comb = (x.w[1] & 0x7fffc00000000000ull) >> 46; trailing.w[1] = x.w[1]; trailing.w[0] = x.w[0]; if ((comb & 0x1e000) == 0x1e000) { *pres = x; return; } if ((comb & 0x18000) == 0x18000) { /* G0..G1 = 11 -> d0 = 8 + G4 */ d0 = d2b6[8 + ((comb & 0x01000) >> 12)]; exp = (comb & 0x06000) >> 1; /* exp leading bits are G2..G3 */ } else { d0 = d2b6[((comb & 0x07000) >> 12)]; exp = (comb & 0x18000) >> 3; /* exp loading bits are G0..G1 */ } d11 = d2b[(trailing.w[0]) & 0x3ff]; d10 = d2b2[(trailing.w[0] >> 10) & 0x3ff]; d9 = d2b3[(trailing.w[0] >> 20) & 0x3ff]; d8 = d2b4[(trailing.w[0] >> 30) & 0x3ff]; d7 = d2b5[(trailing.w[0] >> 40) & 0x3ff]; d6 = d2b6[(trailing.w[0] >> 50) & 0x3ff]; d5 = d2b[(trailing.w[0] >> 60) | ((trailing.w[1] & 0x3f) << 4)]; d4 = d2b2[(trailing.w[1] >> 6) & 0x3ff]; d3 = d2b3[(trailing.w[1] >> 16) & 0x3ff]; d2 = d2b4[(trailing.w[1] >> 26) & 0x3ff]; d1 = d2b5[(trailing.w[1] >> 36) & 0x3ff]; tl = d11 + d10 + d9 + d8 + d7 + d6; th = d5 + d4 + d3 + d2 + d1 + d0; __mul_64x64_to_128 (bcoeff, th, 1000000000000000000ull); __add_128_64 (bcoeff, bcoeff, tl); exp += (comb & 0xfff); res.w[0] = bcoeff.w[0]; res.w[1] = (exp << 49) | sign.w[1] | bcoeff.w[1]; *pres = res; } libdfp-1.0.17/libdecnumber/bid/bid2dpd_dpd2bid.h000066400000000000000000006342751504475242000213260ustar00rootroot00000000000000/* Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ static const UINT128 reciprocals10_128[] = { { { 0ull, 0ull } }, /* 0 extra digits */ { { 0x3333333333333334ull ,0x3333333333333333ull } }, /* 1 extra digit */ { { 0x51eb851eb851eb86ull ,0x051eb851eb851eb8ull } }, /* 2 extra digits */ { { 0x3b645a1cac083127ull, 0x0083126e978d4fdfull } }, /* 3 extra digits */ { { 0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL } }, /* 10^(-4) * 2^131 */ { { 0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL } }, /* 10^(-5) * 2^134 */ { { 0x6d698fe69270b06dULL, 0x00218def416bdb1aULL } }, /* 10^(-6) * 2^137 */ { { 0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL } }, /* 10^(-7) * 2^141 */ { { 0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL } }, /* 10^(-8) * 2^144 */ { { 0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL } }, /* 10^(-9) * 2^147 */ { { 0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL } }, /* 10^(-10) * 2^151 */ { { 0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL } }, /* 10^(-11) * 2^154 */ { { 0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL } }, /* 10^(-12) * 2^157 */ { { 0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL } }, /* 10^(-13) * 2^161 */ { { 0x03d4e1213067bce4ULL, 0x002d09370d425736ULL } }, /* 10^(-14) * 2^164 */ { { 0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL } }, /* 10^(-15) * 2^167 */ { { 0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL } }, /* 10^(-16) * 2^171 */ { { 0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL } }, /* 10^(-17) * 2^174 */ { { 0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL } }, /* 10^(-18) * 2^177 */ { { 0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL } }, /* 10^(-19) * 2^181 */ { { 0xbaa23d2ec729af3eULL, 0x002f394219248446ULL } }, /* 10^(-20) * 2^184 */ { { 0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL } }, /* 10^(-21) * 2^187 */ { { 0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL } }, /* 10^(-22) * 2^191 */ { { 0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL } }, /* 10^(-23) * 2^194 */ { { 0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL } }, /* 10^(-24) * 2^197 */ { { 0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL } }, /* 10^(-25) * 2^201 */ { { 0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL } }, /* 10^(-26) * 2^204 */ { { 0x921dd7a89933d54eULL, 0x00279d346de4781fULL } }, /* 10^(-27) * 2^207 */ { { 0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL } }, /* 10^(-28) * 2^211 */ { { 0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL } }, /* 10^(-29) * 2^214 */ { { 0x0c684960de6a5341ULL, 0x00289097fdd7853fULL } }, /* 10^(-30) * 2^217 */ { { 0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL } }, /* 10^(-31) * 2^220 */ { { 0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL } }, /* 10^(-32) * 2^224 */ { { 0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL } }, /* 10^(-33) * 2^227 */ { { 0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL } }, /* 10^(-34) * 2^230 */ { { 0x0f2abc9d8c9689d1ull, 0x01a95a5b7f87a0efull } } /* 35 extra digits */ }; static const int recip_scale[] = { 129 - 128, /* 1 */ 129 - 128, /* 1/10 */ 129 - 128, /* 1/10^2 */ 129 - 128, /* 1/10^3 */ 3, /* 131 - 128 */ 6, /* 134 - 128 */ 9, /* 137 - 128 */ 13, /* 141 - 128 */ 16, /* 144 - 128 */ 19, /* 147 - 128 */ 23, /* 151 - 128 */ 26, /* 154 - 128 */ 29, /* 157 - 128 */ 33, /* 161 - 128 */ 36, /* 164 - 128 */ 39, /* 167 - 128 */ 43, /* 171 - 128 */ 46, /* 174 - 128 */ 49, /* 177 - 128 */ 53, /* 181 - 128 */ 56, /* 184 - 128 */ 59, /* 187 - 128 */ 63, /* 191 - 128 */ 66, /* 194 - 128 */ 69, /* 197 - 128 */ 73, /* 201 - 128 */ 76, /* 204 - 128 */ 79, /* 207 - 128 */ 83, /* 211 - 128 */ 86, /* 214 - 128 */ 89, /* 217 - 128 */ 92, /* 220 - 128 */ 96, /* 224 - 128 */ 99, /* 227 - 128 */ 102, /* 230 - 128 */ 237 - 128, /* 1/10^35 */ }; static const int short_recip_scale[] = { 1, 65 - 64, 69 - 64, 71 - 64, 75 - 64, 78 - 64, 81 - 64, 85 - 64, 88 - 64, 91 - 64, 95 - 64, 98 - 64, 101 - 64, 105 - 64, 108 - 64, 111 - 64, 115 - 64, /* 114 - 64 */ 118 - 64 }; static const unsigned long long reciprocals10_64[] = { 1ull, /* dummy value for 0 extra digits */ 0x3333333333333334ull, /* 1 extra digit */ 0x51eb851eb851eb86ull, 0x20c49ba5e353f7cfull, 0x346dc5d63886594bull, 0x29f16b11c6d1e109ull, 0x218def416bdb1a6eull, 0x35afe535795e90b0ull, 0x2af31dc4611873c0ull, 0x225c17d04dad2966ull, 0x36f9bfb3af7b7570ull, 0x2bfaffc2f2c92ac0ull, 0x232f33025bd42233ull, 0x384b84d092ed0385ull, 0x2d09370d42573604ull, 0x24075f3dceac2b37ull, 0x39a5652fb1137857ull, 0x2e1dea8c8da92d13ull }; static const UINT64 d2b[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 80, 81, 800, 801, 880, 881, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 90, 91, 810, 811, 890, 891, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 82, 83, 820, 821, 808, 809, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 92, 93, 830, 831, 818, 819, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 84, 85, 840, 841, 88, 89, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 94, 95, 850, 851, 98, 99, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 860, 861, 888, 889, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 870, 871, 898, 899, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 180, 181, 900, 901, 980, 981, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 190, 191, 910, 911, 990, 991, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 182, 183, 920, 921, 908, 909, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 192, 193, 930, 931, 918, 919, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 184, 185, 940, 941, 188, 189, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 194, 195, 950, 951, 198, 199, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 186, 187, 960, 961, 988, 989, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 196, 197, 970, 971, 998, 999, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 280, 281, 802, 803, 882, 883, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 290, 291, 812, 813, 892, 893, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 282, 283, 822, 823, 828, 829, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 292, 293, 832, 833, 838, 839, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 284, 285, 842, 843, 288, 289, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 294, 295, 852, 853, 298, 299, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 286, 287, 862, 863, 888, 889, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 296, 297, 872, 873, 898, 899, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 380, 381, 902, 903, 982, 983, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 390, 391, 912, 913, 992, 993, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 382, 383, 922, 923, 928, 929, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 392, 393, 932, 933, 938, 939, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 384, 385, 942, 943, 388, 389, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 394, 395, 952, 953, 398, 399, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 386, 387, 962, 963, 988, 989, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 396, 397, 972, 973, 998, 999, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 480, 481, 804, 805, 884, 885, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 490, 491, 814, 815, 894, 895, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 482, 483, 824, 825, 848, 849, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 492, 493, 834, 835, 858, 859, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 484, 485, 844, 845, 488, 489, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 494, 495, 854, 855, 498, 499, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 486, 487, 864, 865, 888, 889, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 496, 497, 874, 875, 898, 899, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 580, 581, 904, 905, 984, 985, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 590, 591, 914, 915, 994, 995, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 582, 583, 924, 925, 948, 949, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 592, 593, 934, 935, 958, 959, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 584, 585, 944, 945, 588, 589, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 594, 595, 954, 955, 598, 599, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 586, 587, 964, 965, 988, 989, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 596, 597, 974, 975, 998, 999, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 680, 681, 806, 807, 886, 887, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 690, 691, 816, 817, 896, 897, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 682, 683, 826, 827, 868, 869, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 692, 693, 836, 837, 878, 879, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 684, 685, 846, 847, 688, 689, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 694, 695, 856, 857, 698, 699, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 686, 687, 866, 867, 888, 889, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 696, 697, 876, 877, 898, 899, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 780, 781, 906, 907, 986, 987, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 790, 791, 916, 917, 996, 997, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 782, 783, 926, 927, 968, 969, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 792, 793, 936, 937, 978, 979, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 784, 785, 946, 947, 788, 789, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 794, 795, 956, 957, 798, 799, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 786, 787, 966, 967, 988, 989, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 796, 797, 976, 977, 998, 999 }; static const UINT64 d2b2[] = { 0000ull, 1000ull, 2000ull, 3000ull, 4000ull, 5000ull, 6000ull, 7000ull, 8000ull, 9000ull, 80000ull, 81000ull, 800000ull, 801000ull, 880000ull, 881000ull, 10000ull, 11000ull, 12000ull, 13000ull, 14000ull, 15000ull, 16000ull, 17000ull, 18000ull, 19000ull, 90000ull, 91000ull, 810000ull, 811000ull, 890000ull, 891000ull, 20000ull, 21000ull, 22000ull, 23000ull, 24000ull, 25000ull, 26000ull, 27000ull, 28000ull, 29000ull, 82000ull, 83000ull, 820000ull, 821000ull, 808000ull, 809000ull, 30000ull, 31000ull, 32000ull, 33000ull, 34000ull, 35000ull, 36000ull, 37000ull, 38000ull, 39000ull, 92000ull, 93000ull, 830000ull, 831000ull, 818000ull, 819000ull, 40000ull, 41000ull, 42000ull, 43000ull, 44000ull, 45000ull, 46000ull, 47000ull, 48000ull, 49000ull, 84000ull, 85000ull, 840000ull, 841000ull, 88000ull, 89000ull, 50000ull, 51000ull, 52000ull, 53000ull, 54000ull, 55000ull, 56000ull, 57000ull, 58000ull, 59000ull, 94000ull, 95000ull, 850000ull, 851000ull, 98000ull, 99000ull, 60000ull, 61000ull, 62000ull, 63000ull, 64000ull, 65000ull, 66000ull, 67000ull, 68000ull, 69000ull, 86000ull, 87000ull, 860000ull, 861000ull, 888000ull, 889000ull, 70000ull, 71000ull, 72000ull, 73000ull, 74000ull, 75000ull, 76000ull, 77000ull, 78000ull, 79000ull, 96000ull, 97000ull, 870000ull, 871000ull, 898000ull, 899000ull, 100000ull, 101000ull, 102000ull, 103000ull, 104000ull, 105000ull, 106000ull, 107000ull, 108000ull, 109000ull, 180000ull, 181000ull, 900000ull, 901000ull, 980000ull, 981000ull, 110000ull, 111000ull, 112000ull, 113000ull, 114000ull, 115000ull, 116000ull, 117000ull, 118000ull, 119000ull, 190000ull, 191000ull, 910000ull, 911000ull, 990000ull, 991000ull, 120000ull, 121000ull, 122000ull, 123000ull, 124000ull, 125000ull, 126000ull, 127000ull, 128000ull, 129000ull, 182000ull, 183000ull, 920000ull, 921000ull, 908000ull, 909000ull, 130000ull, 131000ull, 132000ull, 133000ull, 134000ull, 135000ull, 136000ull, 137000ull, 138000ull, 139000ull, 192000ull, 193000ull, 930000ull, 931000ull, 918000ull, 919000ull, 140000ull, 141000ull, 142000ull, 143000ull, 144000ull, 145000ull, 146000ull, 147000ull, 148000ull, 149000ull, 184000ull, 185000ull, 940000ull, 941000ull, 188000ull, 189000ull, 150000ull, 151000ull, 152000ull, 153000ull, 154000ull, 155000ull, 156000ull, 157000ull, 158000ull, 159000ull, 194000ull, 195000ull, 950000ull, 951000ull, 198000ull, 199000ull, 160000ull, 161000ull, 162000ull, 163000ull, 164000ull, 165000ull, 166000ull, 167000ull, 168000ull, 169000ull, 186000ull, 187000ull, 960000ull, 961000ull, 988000ull, 989000ull, 170000ull, 171000ull, 172000ull, 173000ull, 174000ull, 175000ull, 176000ull, 177000ull, 178000ull, 179000ull, 196000ull, 197000ull, 970000ull, 971000ull, 998000ull, 999000ull, 200000ull, 201000ull, 202000ull, 203000ull, 204000ull, 205000ull, 206000ull, 207000ull, 208000ull, 209000ull, 280000ull, 281000ull, 802000ull, 803000ull, 882000ull, 883000ull, 210000ull, 211000ull, 212000ull, 213000ull, 214000ull, 215000ull, 216000ull, 217000ull, 218000ull, 219000ull, 290000ull, 291000ull, 812000ull, 813000ull, 892000ull, 893000ull, 220000ull, 221000ull, 222000ull, 223000ull, 224000ull, 225000ull, 226000ull, 227000ull, 228000ull, 229000ull, 282000ull, 283000ull, 822000ull, 823000ull, 828000ull, 829000ull, 230000ull, 231000ull, 232000ull, 233000ull, 234000ull, 235000ull, 236000ull, 237000ull, 238000ull, 239000ull, 292000ull, 293000ull, 832000ull, 833000ull, 838000ull, 839000ull, 240000ull, 241000ull, 242000ull, 243000ull, 244000ull, 245000ull, 246000ull, 247000ull, 248000ull, 249000ull, 284000ull, 285000ull, 842000ull, 843000ull, 288000ull, 289000ull, 250000ull, 251000ull, 252000ull, 253000ull, 254000ull, 255000ull, 256000ull, 257000ull, 258000ull, 259000ull, 294000ull, 295000ull, 852000ull, 853000ull, 298000ull, 299000ull, 260000ull, 261000ull, 262000ull, 263000ull, 264000ull, 265000ull, 266000ull, 267000ull, 268000ull, 269000ull, 286000ull, 287000ull, 862000ull, 863000ull, 888000ull, 889000ull, 270000ull, 271000ull, 272000ull, 273000ull, 274000ull, 275000ull, 276000ull, 277000ull, 278000ull, 279000ull, 296000ull, 297000ull, 872000ull, 873000ull, 898000ull, 899000ull, 300000ull, 301000ull, 302000ull, 303000ull, 304000ull, 305000ull, 306000ull, 307000ull, 308000ull, 309000ull, 380000ull, 381000ull, 902000ull, 903000ull, 982000ull, 983000ull, 310000ull, 311000ull, 312000ull, 313000ull, 314000ull, 315000ull, 316000ull, 317000ull, 318000ull, 319000ull, 390000ull, 391000ull, 912000ull, 913000ull, 992000ull, 993000ull, 320000ull, 321000ull, 322000ull, 323000ull, 324000ull, 325000ull, 326000ull, 327000ull, 328000ull, 329000ull, 382000ull, 383000ull, 922000ull, 923000ull, 928000ull, 929000ull, 330000ull, 331000ull, 332000ull, 333000ull, 334000ull, 335000ull, 336000ull, 337000ull, 338000ull, 339000ull, 392000ull, 393000ull, 932000ull, 933000ull, 938000ull, 939000ull, 340000ull, 341000ull, 342000ull, 343000ull, 344000ull, 345000ull, 346000ull, 347000ull, 348000ull, 349000ull, 384000ull, 385000ull, 942000ull, 943000ull, 388000ull, 389000ull, 350000ull, 351000ull, 352000ull, 353000ull, 354000ull, 355000ull, 356000ull, 357000ull, 358000ull, 359000ull, 394000ull, 395000ull, 952000ull, 953000ull, 398000ull, 399000ull, 360000ull, 361000ull, 362000ull, 363000ull, 364000ull, 365000ull, 366000ull, 367000ull, 368000ull, 369000ull, 386000ull, 387000ull, 962000ull, 963000ull, 988000ull, 989000ull, 370000ull, 371000ull, 372000ull, 373000ull, 374000ull, 375000ull, 376000ull, 377000ull, 378000ull, 379000ull, 396000ull, 397000ull, 972000ull, 973000ull, 998000ull, 999000ull, 400000ull, 401000ull, 402000ull, 403000ull, 404000ull, 405000ull, 406000ull, 407000ull, 408000ull, 409000ull, 480000ull, 481000ull, 804000ull, 805000ull, 884000ull, 885000ull, 410000ull, 411000ull, 412000ull, 413000ull, 414000ull, 415000ull, 416000ull, 417000ull, 418000ull, 419000ull, 490000ull, 491000ull, 814000ull, 815000ull, 894000ull, 895000ull, 420000ull, 421000ull, 422000ull, 423000ull, 424000ull, 425000ull, 426000ull, 427000ull, 428000ull, 429000ull, 482000ull, 483000ull, 824000ull, 825000ull, 848000ull, 849000ull, 430000ull, 431000ull, 432000ull, 433000ull, 434000ull, 435000ull, 436000ull, 437000ull, 438000ull, 439000ull, 492000ull, 493000ull, 834000ull, 835000ull, 858000ull, 859000ull, 440000ull, 441000ull, 442000ull, 443000ull, 444000ull, 445000ull, 446000ull, 447000ull, 448000ull, 449000ull, 484000ull, 485000ull, 844000ull, 845000ull, 488000ull, 489000ull, 450000ull, 451000ull, 452000ull, 453000ull, 454000ull, 455000ull, 456000ull, 457000ull, 458000ull, 459000ull, 494000ull, 495000ull, 854000ull, 855000ull, 498000ull, 499000ull, 460000ull, 461000ull, 462000ull, 463000ull, 464000ull, 465000ull, 466000ull, 467000ull, 468000ull, 469000ull, 486000ull, 487000ull, 864000ull, 865000ull, 888000ull, 889000ull, 470000ull, 471000ull, 472000ull, 473000ull, 474000ull, 475000ull, 476000ull, 477000ull, 478000ull, 479000ull, 496000ull, 497000ull, 874000ull, 875000ull, 898000ull, 899000ull, 500000ull, 501000ull, 502000ull, 503000ull, 504000ull, 505000ull, 506000ull, 507000ull, 508000ull, 509000ull, 580000ull, 581000ull, 904000ull, 905000ull, 984000ull, 985000ull, 510000ull, 511000ull, 512000ull, 513000ull, 514000ull, 515000ull, 516000ull, 517000ull, 518000ull, 519000ull, 590000ull, 591000ull, 914000ull, 915000ull, 994000ull, 995000ull, 520000ull, 521000ull, 522000ull, 523000ull, 524000ull, 525000ull, 526000ull, 527000ull, 528000ull, 529000ull, 582000ull, 583000ull, 924000ull, 925000ull, 948000ull, 949000ull, 530000ull, 531000ull, 532000ull, 533000ull, 534000ull, 535000ull, 536000ull, 537000ull, 538000ull, 539000ull, 592000ull, 593000ull, 934000ull, 935000ull, 958000ull, 959000ull, 540000ull, 541000ull, 542000ull, 543000ull, 544000ull, 545000ull, 546000ull, 547000ull, 548000ull, 549000ull, 584000ull, 585000ull, 944000ull, 945000ull, 588000ull, 589000ull, 550000ull, 551000ull, 552000ull, 553000ull, 554000ull, 555000ull, 556000ull, 557000ull, 558000ull, 559000ull, 594000ull, 595000ull, 954000ull, 955000ull, 598000ull, 599000ull, 560000ull, 561000ull, 562000ull, 563000ull, 564000ull, 565000ull, 566000ull, 567000ull, 568000ull, 569000ull, 586000ull, 587000ull, 964000ull, 965000ull, 988000ull, 989000ull, 570000ull, 571000ull, 572000ull, 573000ull, 574000ull, 575000ull, 576000ull, 577000ull, 578000ull, 579000ull, 596000ull, 597000ull, 974000ull, 975000ull, 998000ull, 999000ull, 600000ull, 601000ull, 602000ull, 603000ull, 604000ull, 605000ull, 606000ull, 607000ull, 608000ull, 609000ull, 680000ull, 681000ull, 806000ull, 807000ull, 886000ull, 887000ull, 610000ull, 611000ull, 612000ull, 613000ull, 614000ull, 615000ull, 616000ull, 617000ull, 618000ull, 619000ull, 690000ull, 691000ull, 816000ull, 817000ull, 896000ull, 897000ull, 620000ull, 621000ull, 622000ull, 623000ull, 624000ull, 625000ull, 626000ull, 627000ull, 628000ull, 629000ull, 682000ull, 683000ull, 826000ull, 827000ull, 868000ull, 869000ull, 630000ull, 631000ull, 632000ull, 633000ull, 634000ull, 635000ull, 636000ull, 637000ull, 638000ull, 639000ull, 692000ull, 693000ull, 836000ull, 837000ull, 878000ull, 879000ull, 640000ull, 641000ull, 642000ull, 643000ull, 644000ull, 645000ull, 646000ull, 647000ull, 648000ull, 649000ull, 684000ull, 685000ull, 846000ull, 847000ull, 688000ull, 689000ull, 650000ull, 651000ull, 652000ull, 653000ull, 654000ull, 655000ull, 656000ull, 657000ull, 658000ull, 659000ull, 694000ull, 695000ull, 856000ull, 857000ull, 698000ull, 699000ull, 660000ull, 661000ull, 662000ull, 663000ull, 664000ull, 665000ull, 666000ull, 667000ull, 668000ull, 669000ull, 686000ull, 687000ull, 866000ull, 867000ull, 888000ull, 889000ull, 670000ull, 671000ull, 672000ull, 673000ull, 674000ull, 675000ull, 676000ull, 677000ull, 678000ull, 679000ull, 696000ull, 697000ull, 876000ull, 877000ull, 898000ull, 899000ull, 700000ull, 701000ull, 702000ull, 703000ull, 704000ull, 705000ull, 706000ull, 707000ull, 708000ull, 709000ull, 780000ull, 781000ull, 906000ull, 907000ull, 986000ull, 987000ull, 710000ull, 711000ull, 712000ull, 713000ull, 714000ull, 715000ull, 716000ull, 717000ull, 718000ull, 719000ull, 790000ull, 791000ull, 916000ull, 917000ull, 996000ull, 997000ull, 720000ull, 721000ull, 722000ull, 723000ull, 724000ull, 725000ull, 726000ull, 727000ull, 728000ull, 729000ull, 782000ull, 783000ull, 926000ull, 927000ull, 968000ull, 969000ull, 730000ull, 731000ull, 732000ull, 733000ull, 734000ull, 735000ull, 736000ull, 737000ull, 738000ull, 739000ull, 792000ull, 793000ull, 936000ull, 937000ull, 978000ull, 979000ull, 740000ull, 741000ull, 742000ull, 743000ull, 744000ull, 745000ull, 746000ull, 747000ull, 748000ull, 749000ull, 784000ull, 785000ull, 946000ull, 947000ull, 788000ull, 789000ull, 750000ull, 751000ull, 752000ull, 753000ull, 754000ull, 755000ull, 756000ull, 757000ull, 758000ull, 759000ull, 794000ull, 795000ull, 956000ull, 957000ull, 798000ull, 799000ull, 760000ull, 761000ull, 762000ull, 763000ull, 764000ull, 765000ull, 766000ull, 767000ull, 768000ull, 769000ull, 786000ull, 787000ull, 966000ull, 967000ull, 988000ull, 989000ull, 770000ull, 771000ull, 772000ull, 773000ull, 774000ull, 775000ull, 776000ull, 777000ull, 778000ull, 779000ull, 796000ull, 797000ull, 976000ull, 977000ull, 998000ull, 999000ull }; static const UINT64 d2b3[] = { 0000000ull, 1000000ull, 2000000ull, 3000000ull, 4000000ull, 5000000ull, 6000000ull, 7000000ull, 8000000ull, 9000000ull, 80000000ull, 81000000ull, 800000000ull, 801000000ull, 880000000ull, 881000000ull, 10000000ull, 11000000ull, 12000000ull, 13000000ull, 14000000ull, 15000000ull, 16000000ull, 17000000ull, 18000000ull, 19000000ull, 90000000ull, 91000000ull, 810000000ull, 811000000ull, 890000000ull, 891000000ull, 20000000ull, 21000000ull, 22000000ull, 23000000ull, 24000000ull, 25000000ull, 26000000ull, 27000000ull, 28000000ull, 29000000ull, 82000000ull, 83000000ull, 820000000ull, 821000000ull, 808000000ull, 809000000ull, 30000000ull, 31000000ull, 32000000ull, 33000000ull, 34000000ull, 35000000ull, 36000000ull, 37000000ull, 38000000ull, 39000000ull, 92000000ull, 93000000ull, 830000000ull, 831000000ull, 818000000ull, 819000000ull, 40000000ull, 41000000ull, 42000000ull, 43000000ull, 44000000ull, 45000000ull, 46000000ull, 47000000ull, 48000000ull, 49000000ull, 84000000ull, 85000000ull, 840000000ull, 841000000ull, 88000000ull, 89000000ull, 50000000ull, 51000000ull, 52000000ull, 53000000ull, 54000000ull, 55000000ull, 56000000ull, 57000000ull, 58000000ull, 59000000ull, 94000000ull, 95000000ull, 850000000ull, 851000000ull, 98000000ull, 99000000ull, 60000000ull, 61000000ull, 62000000ull, 63000000ull, 64000000ull, 65000000ull, 66000000ull, 67000000ull, 68000000ull, 69000000ull, 86000000ull, 87000000ull, 860000000ull, 861000000ull, 888000000ull, 889000000ull, 70000000ull, 71000000ull, 72000000ull, 73000000ull, 74000000ull, 75000000ull, 76000000ull, 77000000ull, 78000000ull, 79000000ull, 96000000ull, 97000000ull, 870000000ull, 871000000ull, 898000000ull, 899000000ull, 100000000ull, 101000000ull, 102000000ull, 103000000ull, 104000000ull, 105000000ull, 106000000ull, 107000000ull, 108000000ull, 109000000ull, 180000000ull, 181000000ull, 900000000ull, 901000000ull, 980000000ull, 981000000ull, 110000000ull, 111000000ull, 112000000ull, 113000000ull, 114000000ull, 115000000ull, 116000000ull, 117000000ull, 118000000ull, 119000000ull, 190000000ull, 191000000ull, 910000000ull, 911000000ull, 990000000ull, 991000000ull, 120000000ull, 121000000ull, 122000000ull, 123000000ull, 124000000ull, 125000000ull, 126000000ull, 127000000ull, 128000000ull, 129000000ull, 182000000ull, 183000000ull, 920000000ull, 921000000ull, 908000000ull, 909000000ull, 130000000ull, 131000000ull, 132000000ull, 133000000ull, 134000000ull, 135000000ull, 136000000ull, 137000000ull, 138000000ull, 139000000ull, 192000000ull, 193000000ull, 930000000ull, 931000000ull, 918000000ull, 919000000ull, 140000000ull, 141000000ull, 142000000ull, 143000000ull, 144000000ull, 145000000ull, 146000000ull, 147000000ull, 148000000ull, 149000000ull, 184000000ull, 185000000ull, 940000000ull, 941000000ull, 188000000ull, 189000000ull, 150000000ull, 151000000ull, 152000000ull, 153000000ull, 154000000ull, 155000000ull, 156000000ull, 157000000ull, 158000000ull, 159000000ull, 194000000ull, 195000000ull, 950000000ull, 951000000ull, 198000000ull, 199000000ull, 160000000ull, 161000000ull, 162000000ull, 163000000ull, 164000000ull, 165000000ull, 166000000ull, 167000000ull, 168000000ull, 169000000ull, 186000000ull, 187000000ull, 960000000ull, 961000000ull, 988000000ull, 989000000ull, 170000000ull, 171000000ull, 172000000ull, 173000000ull, 174000000ull, 175000000ull, 176000000ull, 177000000ull, 178000000ull, 179000000ull, 196000000ull, 197000000ull, 970000000ull, 971000000ull, 998000000ull, 999000000ull, 200000000ull, 201000000ull, 202000000ull, 203000000ull, 204000000ull, 205000000ull, 206000000ull, 207000000ull, 208000000ull, 209000000ull, 280000000ull, 281000000ull, 802000000ull, 803000000ull, 882000000ull, 883000000ull, 210000000ull, 211000000ull, 212000000ull, 213000000ull, 214000000ull, 215000000ull, 216000000ull, 217000000ull, 218000000ull, 219000000ull, 290000000ull, 291000000ull, 812000000ull, 813000000ull, 892000000ull, 893000000ull, 220000000ull, 221000000ull, 222000000ull, 223000000ull, 224000000ull, 225000000ull, 226000000ull, 227000000ull, 228000000ull, 229000000ull, 282000000ull, 283000000ull, 822000000ull, 823000000ull, 828000000ull, 829000000ull, 230000000ull, 231000000ull, 232000000ull, 233000000ull, 234000000ull, 235000000ull, 236000000ull, 237000000ull, 238000000ull, 239000000ull, 292000000ull, 293000000ull, 832000000ull, 833000000ull, 838000000ull, 839000000ull, 240000000ull, 241000000ull, 242000000ull, 243000000ull, 244000000ull, 245000000ull, 246000000ull, 247000000ull, 248000000ull, 249000000ull, 284000000ull, 285000000ull, 842000000ull, 843000000ull, 288000000ull, 289000000ull, 250000000ull, 251000000ull, 252000000ull, 253000000ull, 254000000ull, 255000000ull, 256000000ull, 257000000ull, 258000000ull, 259000000ull, 294000000ull, 295000000ull, 852000000ull, 853000000ull, 298000000ull, 299000000ull, 260000000ull, 261000000ull, 262000000ull, 263000000ull, 264000000ull, 265000000ull, 266000000ull, 267000000ull, 268000000ull, 269000000ull, 286000000ull, 287000000ull, 862000000ull, 863000000ull, 888000000ull, 889000000ull, 270000000ull, 271000000ull, 272000000ull, 273000000ull, 274000000ull, 275000000ull, 276000000ull, 277000000ull, 278000000ull, 279000000ull, 296000000ull, 297000000ull, 872000000ull, 873000000ull, 898000000ull, 899000000ull, 300000000ull, 301000000ull, 302000000ull, 303000000ull, 304000000ull, 305000000ull, 306000000ull, 307000000ull, 308000000ull, 309000000ull, 380000000ull, 381000000ull, 902000000ull, 903000000ull, 982000000ull, 983000000ull, 310000000ull, 311000000ull, 312000000ull, 313000000ull, 314000000ull, 315000000ull, 316000000ull, 317000000ull, 318000000ull, 319000000ull, 390000000ull, 391000000ull, 912000000ull, 913000000ull, 992000000ull, 993000000ull, 320000000ull, 321000000ull, 322000000ull, 323000000ull, 324000000ull, 325000000ull, 326000000ull, 327000000ull, 328000000ull, 329000000ull, 382000000ull, 383000000ull, 922000000ull, 923000000ull, 928000000ull, 929000000ull, 330000000ull, 331000000ull, 332000000ull, 333000000ull, 334000000ull, 335000000ull, 336000000ull, 337000000ull, 338000000ull, 339000000ull, 392000000ull, 393000000ull, 932000000ull, 933000000ull, 938000000ull, 939000000ull, 340000000ull, 341000000ull, 342000000ull, 343000000ull, 344000000ull, 345000000ull, 346000000ull, 347000000ull, 348000000ull, 349000000ull, 384000000ull, 385000000ull, 942000000ull, 943000000ull, 388000000ull, 389000000ull, 350000000ull, 351000000ull, 352000000ull, 353000000ull, 354000000ull, 355000000ull, 356000000ull, 357000000ull, 358000000ull, 359000000ull, 394000000ull, 395000000ull, 952000000ull, 953000000ull, 398000000ull, 399000000ull, 360000000ull, 361000000ull, 362000000ull, 363000000ull, 364000000ull, 365000000ull, 366000000ull, 367000000ull, 368000000ull, 369000000ull, 386000000ull, 387000000ull, 962000000ull, 963000000ull, 988000000ull, 989000000ull, 370000000ull, 371000000ull, 372000000ull, 373000000ull, 374000000ull, 375000000ull, 376000000ull, 377000000ull, 378000000ull, 379000000ull, 396000000ull, 397000000ull, 972000000ull, 973000000ull, 998000000ull, 999000000ull, 400000000ull, 401000000ull, 402000000ull, 403000000ull, 404000000ull, 405000000ull, 406000000ull, 407000000ull, 408000000ull, 409000000ull, 480000000ull, 481000000ull, 804000000ull, 805000000ull, 884000000ull, 885000000ull, 410000000ull, 411000000ull, 412000000ull, 413000000ull, 414000000ull, 415000000ull, 416000000ull, 417000000ull, 418000000ull, 419000000ull, 490000000ull, 491000000ull, 814000000ull, 815000000ull, 894000000ull, 895000000ull, 420000000ull, 421000000ull, 422000000ull, 423000000ull, 424000000ull, 425000000ull, 426000000ull, 427000000ull, 428000000ull, 429000000ull, 482000000ull, 483000000ull, 824000000ull, 825000000ull, 848000000ull, 849000000ull, 430000000ull, 431000000ull, 432000000ull, 433000000ull, 434000000ull, 435000000ull, 436000000ull, 437000000ull, 438000000ull, 439000000ull, 492000000ull, 493000000ull, 834000000ull, 835000000ull, 858000000ull, 859000000ull, 440000000ull, 441000000ull, 442000000ull, 443000000ull, 444000000ull, 445000000ull, 446000000ull, 447000000ull, 448000000ull, 449000000ull, 484000000ull, 485000000ull, 844000000ull, 845000000ull, 488000000ull, 489000000ull, 450000000ull, 451000000ull, 452000000ull, 453000000ull, 454000000ull, 455000000ull, 456000000ull, 457000000ull, 458000000ull, 459000000ull, 494000000ull, 495000000ull, 854000000ull, 855000000ull, 498000000ull, 499000000ull, 460000000ull, 461000000ull, 462000000ull, 463000000ull, 464000000ull, 465000000ull, 466000000ull, 467000000ull, 468000000ull, 469000000ull, 486000000ull, 487000000ull, 864000000ull, 865000000ull, 888000000ull, 889000000ull, 470000000ull, 471000000ull, 472000000ull, 473000000ull, 474000000ull, 475000000ull, 476000000ull, 477000000ull, 478000000ull, 479000000ull, 496000000ull, 497000000ull, 874000000ull, 875000000ull, 898000000ull, 899000000ull, 500000000ull, 501000000ull, 502000000ull, 503000000ull, 504000000ull, 505000000ull, 506000000ull, 507000000ull, 508000000ull, 509000000ull, 580000000ull, 581000000ull, 904000000ull, 905000000ull, 984000000ull, 985000000ull, 510000000ull, 511000000ull, 512000000ull, 513000000ull, 514000000ull, 515000000ull, 516000000ull, 517000000ull, 518000000ull, 519000000ull, 590000000ull, 591000000ull, 914000000ull, 915000000ull, 994000000ull, 995000000ull, 520000000ull, 521000000ull, 522000000ull, 523000000ull, 524000000ull, 525000000ull, 526000000ull, 527000000ull, 528000000ull, 529000000ull, 582000000ull, 583000000ull, 924000000ull, 925000000ull, 948000000ull, 949000000ull, 530000000ull, 531000000ull, 532000000ull, 533000000ull, 534000000ull, 535000000ull, 536000000ull, 537000000ull, 538000000ull, 539000000ull, 592000000ull, 593000000ull, 934000000ull, 935000000ull, 958000000ull, 959000000ull, 540000000ull, 541000000ull, 542000000ull, 543000000ull, 544000000ull, 545000000ull, 546000000ull, 547000000ull, 548000000ull, 549000000ull, 584000000ull, 585000000ull, 944000000ull, 945000000ull, 588000000ull, 589000000ull, 550000000ull, 551000000ull, 552000000ull, 553000000ull, 554000000ull, 555000000ull, 556000000ull, 557000000ull, 558000000ull, 559000000ull, 594000000ull, 595000000ull, 954000000ull, 955000000ull, 598000000ull, 599000000ull, 560000000ull, 561000000ull, 562000000ull, 563000000ull, 564000000ull, 565000000ull, 566000000ull, 567000000ull, 568000000ull, 569000000ull, 586000000ull, 587000000ull, 964000000ull, 965000000ull, 988000000ull, 989000000ull, 570000000ull, 571000000ull, 572000000ull, 573000000ull, 574000000ull, 575000000ull, 576000000ull, 577000000ull, 578000000ull, 579000000ull, 596000000ull, 597000000ull, 974000000ull, 975000000ull, 998000000ull, 999000000ull, 600000000ull, 601000000ull, 602000000ull, 603000000ull, 604000000ull, 605000000ull, 606000000ull, 607000000ull, 608000000ull, 609000000ull, 680000000ull, 681000000ull, 806000000ull, 807000000ull, 886000000ull, 887000000ull, 610000000ull, 611000000ull, 612000000ull, 613000000ull, 614000000ull, 615000000ull, 616000000ull, 617000000ull, 618000000ull, 619000000ull, 690000000ull, 691000000ull, 816000000ull, 817000000ull, 896000000ull, 897000000ull, 620000000ull, 621000000ull, 622000000ull, 623000000ull, 624000000ull, 625000000ull, 626000000ull, 627000000ull, 628000000ull, 629000000ull, 682000000ull, 683000000ull, 826000000ull, 827000000ull, 868000000ull, 869000000ull, 630000000ull, 631000000ull, 632000000ull, 633000000ull, 634000000ull, 635000000ull, 636000000ull, 637000000ull, 638000000ull, 639000000ull, 692000000ull, 693000000ull, 836000000ull, 837000000ull, 878000000ull, 879000000ull, 640000000ull, 641000000ull, 642000000ull, 643000000ull, 644000000ull, 645000000ull, 646000000ull, 647000000ull, 648000000ull, 649000000ull, 684000000ull, 685000000ull, 846000000ull, 847000000ull, 688000000ull, 689000000ull, 650000000ull, 651000000ull, 652000000ull, 653000000ull, 654000000ull, 655000000ull, 656000000ull, 657000000ull, 658000000ull, 659000000ull, 694000000ull, 695000000ull, 856000000ull, 857000000ull, 698000000ull, 699000000ull, 660000000ull, 661000000ull, 662000000ull, 663000000ull, 664000000ull, 665000000ull, 666000000ull, 667000000ull, 668000000ull, 669000000ull, 686000000ull, 687000000ull, 866000000ull, 867000000ull, 888000000ull, 889000000ull, 670000000ull, 671000000ull, 672000000ull, 673000000ull, 674000000ull, 675000000ull, 676000000ull, 677000000ull, 678000000ull, 679000000ull, 696000000ull, 697000000ull, 876000000ull, 877000000ull, 898000000ull, 899000000ull, 700000000ull, 701000000ull, 702000000ull, 703000000ull, 704000000ull, 705000000ull, 706000000ull, 707000000ull, 708000000ull, 709000000ull, 780000000ull, 781000000ull, 906000000ull, 907000000ull, 986000000ull, 987000000ull, 710000000ull, 711000000ull, 712000000ull, 713000000ull, 714000000ull, 715000000ull, 716000000ull, 717000000ull, 718000000ull, 719000000ull, 790000000ull, 791000000ull, 916000000ull, 917000000ull, 996000000ull, 997000000ull, 720000000ull, 721000000ull, 722000000ull, 723000000ull, 724000000ull, 725000000ull, 726000000ull, 727000000ull, 728000000ull, 729000000ull, 782000000ull, 783000000ull, 926000000ull, 927000000ull, 968000000ull, 969000000ull, 730000000ull, 731000000ull, 732000000ull, 733000000ull, 734000000ull, 735000000ull, 736000000ull, 737000000ull, 738000000ull, 739000000ull, 792000000ull, 793000000ull, 936000000ull, 937000000ull, 978000000ull, 979000000ull, 740000000ull, 741000000ull, 742000000ull, 743000000ull, 744000000ull, 745000000ull, 746000000ull, 747000000ull, 748000000ull, 749000000ull, 784000000ull, 785000000ull, 946000000ull, 947000000ull, 788000000ull, 789000000ull, 750000000ull, 751000000ull, 752000000ull, 753000000ull, 754000000ull, 755000000ull, 756000000ull, 757000000ull, 758000000ull, 759000000ull, 794000000ull, 795000000ull, 956000000ull, 957000000ull, 798000000ull, 799000000ull, 760000000ull, 761000000ull, 762000000ull, 763000000ull, 764000000ull, 765000000ull, 766000000ull, 767000000ull, 768000000ull, 769000000ull, 786000000ull, 787000000ull, 966000000ull, 967000000ull, 988000000ull, 989000000ull, 770000000ull, 771000000ull, 772000000ull, 773000000ull, 774000000ull, 775000000ull, 776000000ull, 777000000ull, 778000000ull, 779000000ull, 796000000ull, 797000000ull, 976000000ull, 977000000ull, 998000000ull, 999000000ull }; static const UINT64 d2b4[] = { 0000000000ull, 1000000000ull, 2000000000ull, 3000000000ull, 4000000000ull, 5000000000ull, 6000000000ull, 7000000000ull, 8000000000ull, 9000000000ull, 80000000000ull, 81000000000ull, 800000000000ull, 801000000000ull, 880000000000ull, 881000000000ull, 10000000000ull, 11000000000ull, 12000000000ull, 13000000000ull, 14000000000ull, 15000000000ull, 16000000000ull, 17000000000ull, 18000000000ull, 19000000000ull, 90000000000ull, 91000000000ull, 810000000000ull, 811000000000ull, 890000000000ull, 891000000000ull, 20000000000ull, 21000000000ull, 22000000000ull, 23000000000ull, 24000000000ull, 25000000000ull, 26000000000ull, 27000000000ull, 28000000000ull, 29000000000ull, 82000000000ull, 83000000000ull, 820000000000ull, 821000000000ull, 808000000000ull, 809000000000ull, 30000000000ull, 31000000000ull, 32000000000ull, 33000000000ull, 34000000000ull, 35000000000ull, 36000000000ull, 37000000000ull, 38000000000ull, 39000000000ull, 92000000000ull, 93000000000ull, 830000000000ull, 831000000000ull, 818000000000ull, 819000000000ull, 40000000000ull, 41000000000ull, 42000000000ull, 43000000000ull, 44000000000ull, 45000000000ull, 46000000000ull, 47000000000ull, 48000000000ull, 49000000000ull, 84000000000ull, 85000000000ull, 840000000000ull, 841000000000ull, 88000000000ull, 89000000000ull, 50000000000ull, 51000000000ull, 52000000000ull, 53000000000ull, 54000000000ull, 55000000000ull, 56000000000ull, 57000000000ull, 58000000000ull, 59000000000ull, 94000000000ull, 95000000000ull, 850000000000ull, 851000000000ull, 98000000000ull, 99000000000ull, 60000000000ull, 61000000000ull, 62000000000ull, 63000000000ull, 64000000000ull, 65000000000ull, 66000000000ull, 67000000000ull, 68000000000ull, 69000000000ull, 86000000000ull, 87000000000ull, 860000000000ull, 861000000000ull, 888000000000ull, 889000000000ull, 70000000000ull, 71000000000ull, 72000000000ull, 73000000000ull, 74000000000ull, 75000000000ull, 76000000000ull, 77000000000ull, 78000000000ull, 79000000000ull, 96000000000ull, 97000000000ull, 870000000000ull, 871000000000ull, 898000000000ull, 899000000000ull, 100000000000ull, 101000000000ull, 102000000000ull, 103000000000ull, 104000000000ull, 105000000000ull, 106000000000ull, 107000000000ull, 108000000000ull, 109000000000ull, 180000000000ull, 181000000000ull, 900000000000ull, 901000000000ull, 980000000000ull, 981000000000ull, 110000000000ull, 111000000000ull, 112000000000ull, 113000000000ull, 114000000000ull, 115000000000ull, 116000000000ull, 117000000000ull, 118000000000ull, 119000000000ull, 190000000000ull, 191000000000ull, 910000000000ull, 911000000000ull, 990000000000ull, 991000000000ull, 120000000000ull, 121000000000ull, 122000000000ull, 123000000000ull, 124000000000ull, 125000000000ull, 126000000000ull, 127000000000ull, 128000000000ull, 129000000000ull, 182000000000ull, 183000000000ull, 920000000000ull, 921000000000ull, 908000000000ull, 909000000000ull, 130000000000ull, 131000000000ull, 132000000000ull, 133000000000ull, 134000000000ull, 135000000000ull, 136000000000ull, 137000000000ull, 138000000000ull, 139000000000ull, 192000000000ull, 193000000000ull, 930000000000ull, 931000000000ull, 918000000000ull, 919000000000ull, 140000000000ull, 141000000000ull, 142000000000ull, 143000000000ull, 144000000000ull, 145000000000ull, 146000000000ull, 147000000000ull, 148000000000ull, 149000000000ull, 184000000000ull, 185000000000ull, 940000000000ull, 941000000000ull, 188000000000ull, 189000000000ull, 150000000000ull, 151000000000ull, 152000000000ull, 153000000000ull, 154000000000ull, 155000000000ull, 156000000000ull, 157000000000ull, 158000000000ull, 159000000000ull, 194000000000ull, 195000000000ull, 950000000000ull, 951000000000ull, 198000000000ull, 199000000000ull, 160000000000ull, 161000000000ull, 162000000000ull, 163000000000ull, 164000000000ull, 165000000000ull, 166000000000ull, 167000000000ull, 168000000000ull, 169000000000ull, 186000000000ull, 187000000000ull, 960000000000ull, 961000000000ull, 988000000000ull, 989000000000ull, 170000000000ull, 171000000000ull, 172000000000ull, 173000000000ull, 174000000000ull, 175000000000ull, 176000000000ull, 177000000000ull, 178000000000ull, 179000000000ull, 196000000000ull, 197000000000ull, 970000000000ull, 971000000000ull, 998000000000ull, 999000000000ull, 200000000000ull, 201000000000ull, 202000000000ull, 203000000000ull, 204000000000ull, 205000000000ull, 206000000000ull, 207000000000ull, 208000000000ull, 209000000000ull, 280000000000ull, 281000000000ull, 802000000000ull, 803000000000ull, 882000000000ull, 883000000000ull, 210000000000ull, 211000000000ull, 212000000000ull, 213000000000ull, 214000000000ull, 215000000000ull, 216000000000ull, 217000000000ull, 218000000000ull, 219000000000ull, 290000000000ull, 291000000000ull, 812000000000ull, 813000000000ull, 892000000000ull, 893000000000ull, 220000000000ull, 221000000000ull, 222000000000ull, 223000000000ull, 224000000000ull, 225000000000ull, 226000000000ull, 227000000000ull, 228000000000ull, 229000000000ull, 282000000000ull, 283000000000ull, 822000000000ull, 823000000000ull, 828000000000ull, 829000000000ull, 230000000000ull, 231000000000ull, 232000000000ull, 233000000000ull, 234000000000ull, 235000000000ull, 236000000000ull, 237000000000ull, 238000000000ull, 239000000000ull, 292000000000ull, 293000000000ull, 832000000000ull, 833000000000ull, 838000000000ull, 839000000000ull, 240000000000ull, 241000000000ull, 242000000000ull, 243000000000ull, 244000000000ull, 245000000000ull, 246000000000ull, 247000000000ull, 248000000000ull, 249000000000ull, 284000000000ull, 285000000000ull, 842000000000ull, 843000000000ull, 288000000000ull, 289000000000ull, 250000000000ull, 251000000000ull, 252000000000ull, 253000000000ull, 254000000000ull, 255000000000ull, 256000000000ull, 257000000000ull, 258000000000ull, 259000000000ull, 294000000000ull, 295000000000ull, 852000000000ull, 853000000000ull, 298000000000ull, 299000000000ull, 260000000000ull, 261000000000ull, 262000000000ull, 263000000000ull, 264000000000ull, 265000000000ull, 266000000000ull, 267000000000ull, 268000000000ull, 269000000000ull, 286000000000ull, 287000000000ull, 862000000000ull, 863000000000ull, 888000000000ull, 889000000000ull, 270000000000ull, 271000000000ull, 272000000000ull, 273000000000ull, 274000000000ull, 275000000000ull, 276000000000ull, 277000000000ull, 278000000000ull, 279000000000ull, 296000000000ull, 297000000000ull, 872000000000ull, 873000000000ull, 898000000000ull, 899000000000ull, 300000000000ull, 301000000000ull, 302000000000ull, 303000000000ull, 304000000000ull, 305000000000ull, 306000000000ull, 307000000000ull, 308000000000ull, 309000000000ull, 380000000000ull, 381000000000ull, 902000000000ull, 903000000000ull, 982000000000ull, 983000000000ull, 310000000000ull, 311000000000ull, 312000000000ull, 313000000000ull, 314000000000ull, 315000000000ull, 316000000000ull, 317000000000ull, 318000000000ull, 319000000000ull, 390000000000ull, 391000000000ull, 912000000000ull, 913000000000ull, 992000000000ull, 993000000000ull, 320000000000ull, 321000000000ull, 322000000000ull, 323000000000ull, 324000000000ull, 325000000000ull, 326000000000ull, 327000000000ull, 328000000000ull, 329000000000ull, 382000000000ull, 383000000000ull, 922000000000ull, 923000000000ull, 928000000000ull, 929000000000ull, 330000000000ull, 331000000000ull, 332000000000ull, 333000000000ull, 334000000000ull, 335000000000ull, 336000000000ull, 337000000000ull, 338000000000ull, 339000000000ull, 392000000000ull, 393000000000ull, 932000000000ull, 933000000000ull, 938000000000ull, 939000000000ull, 340000000000ull, 341000000000ull, 342000000000ull, 343000000000ull, 344000000000ull, 345000000000ull, 346000000000ull, 347000000000ull, 348000000000ull, 349000000000ull, 384000000000ull, 385000000000ull, 942000000000ull, 943000000000ull, 388000000000ull, 389000000000ull, 350000000000ull, 351000000000ull, 352000000000ull, 353000000000ull, 354000000000ull, 355000000000ull, 356000000000ull, 357000000000ull, 358000000000ull, 359000000000ull, 394000000000ull, 395000000000ull, 952000000000ull, 953000000000ull, 398000000000ull, 399000000000ull, 360000000000ull, 361000000000ull, 362000000000ull, 363000000000ull, 364000000000ull, 365000000000ull, 366000000000ull, 367000000000ull, 368000000000ull, 369000000000ull, 386000000000ull, 387000000000ull, 962000000000ull, 963000000000ull, 988000000000ull, 989000000000ull, 370000000000ull, 371000000000ull, 372000000000ull, 373000000000ull, 374000000000ull, 375000000000ull, 376000000000ull, 377000000000ull, 378000000000ull, 379000000000ull, 396000000000ull, 397000000000ull, 972000000000ull, 973000000000ull, 998000000000ull, 999000000000ull, 400000000000ull, 401000000000ull, 402000000000ull, 403000000000ull, 404000000000ull, 405000000000ull, 406000000000ull, 407000000000ull, 408000000000ull, 409000000000ull, 480000000000ull, 481000000000ull, 804000000000ull, 805000000000ull, 884000000000ull, 885000000000ull, 410000000000ull, 411000000000ull, 412000000000ull, 413000000000ull, 414000000000ull, 415000000000ull, 416000000000ull, 417000000000ull, 418000000000ull, 419000000000ull, 490000000000ull, 491000000000ull, 814000000000ull, 815000000000ull, 894000000000ull, 895000000000ull, 420000000000ull, 421000000000ull, 422000000000ull, 423000000000ull, 424000000000ull, 425000000000ull, 426000000000ull, 427000000000ull, 428000000000ull, 429000000000ull, 482000000000ull, 483000000000ull, 824000000000ull, 825000000000ull, 848000000000ull, 849000000000ull, 430000000000ull, 431000000000ull, 432000000000ull, 433000000000ull, 434000000000ull, 435000000000ull, 436000000000ull, 437000000000ull, 438000000000ull, 439000000000ull, 492000000000ull, 493000000000ull, 834000000000ull, 835000000000ull, 858000000000ull, 859000000000ull, 440000000000ull, 441000000000ull, 442000000000ull, 443000000000ull, 444000000000ull, 445000000000ull, 446000000000ull, 447000000000ull, 448000000000ull, 449000000000ull, 484000000000ull, 485000000000ull, 844000000000ull, 845000000000ull, 488000000000ull, 489000000000ull, 450000000000ull, 451000000000ull, 452000000000ull, 453000000000ull, 454000000000ull, 455000000000ull, 456000000000ull, 457000000000ull, 458000000000ull, 459000000000ull, 494000000000ull, 495000000000ull, 854000000000ull, 855000000000ull, 498000000000ull, 499000000000ull, 460000000000ull, 461000000000ull, 462000000000ull, 463000000000ull, 464000000000ull, 465000000000ull, 466000000000ull, 467000000000ull, 468000000000ull, 469000000000ull, 486000000000ull, 487000000000ull, 864000000000ull, 865000000000ull, 888000000000ull, 889000000000ull, 470000000000ull, 471000000000ull, 472000000000ull, 473000000000ull, 474000000000ull, 475000000000ull, 476000000000ull, 477000000000ull, 478000000000ull, 479000000000ull, 496000000000ull, 497000000000ull, 874000000000ull, 875000000000ull, 898000000000ull, 899000000000ull, 500000000000ull, 501000000000ull, 502000000000ull, 503000000000ull, 504000000000ull, 505000000000ull, 506000000000ull, 507000000000ull, 508000000000ull, 509000000000ull, 580000000000ull, 581000000000ull, 904000000000ull, 905000000000ull, 984000000000ull, 985000000000ull, 510000000000ull, 511000000000ull, 512000000000ull, 513000000000ull, 514000000000ull, 515000000000ull, 516000000000ull, 517000000000ull, 518000000000ull, 519000000000ull, 590000000000ull, 591000000000ull, 914000000000ull, 915000000000ull, 994000000000ull, 995000000000ull, 520000000000ull, 521000000000ull, 522000000000ull, 523000000000ull, 524000000000ull, 525000000000ull, 526000000000ull, 527000000000ull, 528000000000ull, 529000000000ull, 582000000000ull, 583000000000ull, 924000000000ull, 925000000000ull, 948000000000ull, 949000000000ull, 530000000000ull, 531000000000ull, 532000000000ull, 533000000000ull, 534000000000ull, 535000000000ull, 536000000000ull, 537000000000ull, 538000000000ull, 539000000000ull, 592000000000ull, 593000000000ull, 934000000000ull, 935000000000ull, 958000000000ull, 959000000000ull, 540000000000ull, 541000000000ull, 542000000000ull, 543000000000ull, 544000000000ull, 545000000000ull, 546000000000ull, 547000000000ull, 548000000000ull, 549000000000ull, 584000000000ull, 585000000000ull, 944000000000ull, 945000000000ull, 588000000000ull, 589000000000ull, 550000000000ull, 551000000000ull, 552000000000ull, 553000000000ull, 554000000000ull, 555000000000ull, 556000000000ull, 557000000000ull, 558000000000ull, 559000000000ull, 594000000000ull, 595000000000ull, 954000000000ull, 955000000000ull, 598000000000ull, 599000000000ull, 560000000000ull, 561000000000ull, 562000000000ull, 563000000000ull, 564000000000ull, 565000000000ull, 566000000000ull, 567000000000ull, 568000000000ull, 569000000000ull, 586000000000ull, 587000000000ull, 964000000000ull, 965000000000ull, 988000000000ull, 989000000000ull, 570000000000ull, 571000000000ull, 572000000000ull, 573000000000ull, 574000000000ull, 575000000000ull, 576000000000ull, 577000000000ull, 578000000000ull, 579000000000ull, 596000000000ull, 597000000000ull, 974000000000ull, 975000000000ull, 998000000000ull, 999000000000ull, 600000000000ull, 601000000000ull, 602000000000ull, 603000000000ull, 604000000000ull, 605000000000ull, 606000000000ull, 607000000000ull, 608000000000ull, 609000000000ull, 680000000000ull, 681000000000ull, 806000000000ull, 807000000000ull, 886000000000ull, 887000000000ull, 610000000000ull, 611000000000ull, 612000000000ull, 613000000000ull, 614000000000ull, 615000000000ull, 616000000000ull, 617000000000ull, 618000000000ull, 619000000000ull, 690000000000ull, 691000000000ull, 816000000000ull, 817000000000ull, 896000000000ull, 897000000000ull, 620000000000ull, 621000000000ull, 622000000000ull, 623000000000ull, 624000000000ull, 625000000000ull, 626000000000ull, 627000000000ull, 628000000000ull, 629000000000ull, 682000000000ull, 683000000000ull, 826000000000ull, 827000000000ull, 868000000000ull, 869000000000ull, 630000000000ull, 631000000000ull, 632000000000ull, 633000000000ull, 634000000000ull, 635000000000ull, 636000000000ull, 637000000000ull, 638000000000ull, 639000000000ull, 692000000000ull, 693000000000ull, 836000000000ull, 837000000000ull, 878000000000ull, 879000000000ull, 640000000000ull, 641000000000ull, 642000000000ull, 643000000000ull, 644000000000ull, 645000000000ull, 646000000000ull, 647000000000ull, 648000000000ull, 649000000000ull, 684000000000ull, 685000000000ull, 846000000000ull, 847000000000ull, 688000000000ull, 689000000000ull, 650000000000ull, 651000000000ull, 652000000000ull, 653000000000ull, 654000000000ull, 655000000000ull, 656000000000ull, 657000000000ull, 658000000000ull, 659000000000ull, 694000000000ull, 695000000000ull, 856000000000ull, 857000000000ull, 698000000000ull, 699000000000ull, 660000000000ull, 661000000000ull, 662000000000ull, 663000000000ull, 664000000000ull, 665000000000ull, 666000000000ull, 667000000000ull, 668000000000ull, 669000000000ull, 686000000000ull, 687000000000ull, 866000000000ull, 867000000000ull, 888000000000ull, 889000000000ull, 670000000000ull, 671000000000ull, 672000000000ull, 673000000000ull, 674000000000ull, 675000000000ull, 676000000000ull, 677000000000ull, 678000000000ull, 679000000000ull, 696000000000ull, 697000000000ull, 876000000000ull, 877000000000ull, 898000000000ull, 899000000000ull, 700000000000ull, 701000000000ull, 702000000000ull, 703000000000ull, 704000000000ull, 705000000000ull, 706000000000ull, 707000000000ull, 708000000000ull, 709000000000ull, 780000000000ull, 781000000000ull, 906000000000ull, 907000000000ull, 986000000000ull, 987000000000ull, 710000000000ull, 711000000000ull, 712000000000ull, 713000000000ull, 714000000000ull, 715000000000ull, 716000000000ull, 717000000000ull, 718000000000ull, 719000000000ull, 790000000000ull, 791000000000ull, 916000000000ull, 917000000000ull, 996000000000ull, 997000000000ull, 720000000000ull, 721000000000ull, 722000000000ull, 723000000000ull, 724000000000ull, 725000000000ull, 726000000000ull, 727000000000ull, 728000000000ull, 729000000000ull, 782000000000ull, 783000000000ull, 926000000000ull, 927000000000ull, 968000000000ull, 969000000000ull, 730000000000ull, 731000000000ull, 732000000000ull, 733000000000ull, 734000000000ull, 735000000000ull, 736000000000ull, 737000000000ull, 738000000000ull, 739000000000ull, 792000000000ull, 793000000000ull, 936000000000ull, 937000000000ull, 978000000000ull, 979000000000ull, 740000000000ull, 741000000000ull, 742000000000ull, 743000000000ull, 744000000000ull, 745000000000ull, 746000000000ull, 747000000000ull, 748000000000ull, 749000000000ull, 784000000000ull, 785000000000ull, 946000000000ull, 947000000000ull, 788000000000ull, 789000000000ull, 750000000000ull, 751000000000ull, 752000000000ull, 753000000000ull, 754000000000ull, 755000000000ull, 756000000000ull, 757000000000ull, 758000000000ull, 759000000000ull, 794000000000ull, 795000000000ull, 956000000000ull, 957000000000ull, 798000000000ull, 799000000000ull, 760000000000ull, 761000000000ull, 762000000000ull, 763000000000ull, 764000000000ull, 765000000000ull, 766000000000ull, 767000000000ull, 768000000000ull, 769000000000ull, 786000000000ull, 787000000000ull, 966000000000ull, 967000000000ull, 988000000000ull, 989000000000ull, 770000000000ull, 771000000000ull, 772000000000ull, 773000000000ull, 774000000000ull, 775000000000ull, 776000000000ull, 777000000000ull, 778000000000ull, 779000000000ull, 796000000000ull, 797000000000ull, 976000000000ull, 977000000000ull, 998000000000ull, 999000000000ull }; static const UINT64 d2b5[] = { 0000000000000ull, 1000000000000ull, 2000000000000ull, 3000000000000ull, 4000000000000ull, 5000000000000ull, 6000000000000ull, 7000000000000ull, 8000000000000ull, 9000000000000ull, 80000000000000ull, 81000000000000ull, 800000000000000ull, 801000000000000ull, 880000000000000ull, 881000000000000ull, 10000000000000ull, 11000000000000ull, 12000000000000ull, 13000000000000ull, 14000000000000ull, 15000000000000ull, 16000000000000ull, 17000000000000ull, 18000000000000ull, 19000000000000ull, 90000000000000ull, 91000000000000ull, 810000000000000ull, 811000000000000ull, 890000000000000ull, 891000000000000ull, 20000000000000ull, 21000000000000ull, 22000000000000ull, 23000000000000ull, 24000000000000ull, 25000000000000ull, 26000000000000ull, 27000000000000ull, 28000000000000ull, 29000000000000ull, 82000000000000ull, 83000000000000ull, 820000000000000ull, 821000000000000ull, 808000000000000ull, 809000000000000ull, 30000000000000ull, 31000000000000ull, 32000000000000ull, 33000000000000ull, 34000000000000ull, 35000000000000ull, 36000000000000ull, 37000000000000ull, 38000000000000ull, 39000000000000ull, 92000000000000ull, 93000000000000ull, 830000000000000ull, 831000000000000ull, 818000000000000ull, 819000000000000ull, 40000000000000ull, 41000000000000ull, 42000000000000ull, 43000000000000ull, 44000000000000ull, 45000000000000ull, 46000000000000ull, 47000000000000ull, 48000000000000ull, 49000000000000ull, 84000000000000ull, 85000000000000ull, 840000000000000ull, 841000000000000ull, 88000000000000ull, 89000000000000ull, 50000000000000ull, 51000000000000ull, 52000000000000ull, 53000000000000ull, 54000000000000ull, 55000000000000ull, 56000000000000ull, 57000000000000ull, 58000000000000ull, 59000000000000ull, 94000000000000ull, 95000000000000ull, 850000000000000ull, 851000000000000ull, 98000000000000ull, 99000000000000ull, 60000000000000ull, 61000000000000ull, 62000000000000ull, 63000000000000ull, 64000000000000ull, 65000000000000ull, 66000000000000ull, 67000000000000ull, 68000000000000ull, 69000000000000ull, 86000000000000ull, 87000000000000ull, 860000000000000ull, 861000000000000ull, 888000000000000ull, 889000000000000ull, 70000000000000ull, 71000000000000ull, 72000000000000ull, 73000000000000ull, 74000000000000ull, 75000000000000ull, 76000000000000ull, 77000000000000ull, 78000000000000ull, 79000000000000ull, 96000000000000ull, 97000000000000ull, 870000000000000ull, 871000000000000ull, 898000000000000ull, 899000000000000ull, 100000000000000ull, 101000000000000ull, 102000000000000ull, 103000000000000ull, 104000000000000ull, 105000000000000ull, 106000000000000ull, 107000000000000ull, 108000000000000ull, 109000000000000ull, 180000000000000ull, 181000000000000ull, 900000000000000ull, 901000000000000ull, 980000000000000ull, 981000000000000ull, 110000000000000ull, 111000000000000ull, 112000000000000ull, 113000000000000ull, 114000000000000ull, 115000000000000ull, 116000000000000ull, 117000000000000ull, 118000000000000ull, 119000000000000ull, 190000000000000ull, 191000000000000ull, 910000000000000ull, 911000000000000ull, 990000000000000ull, 991000000000000ull, 120000000000000ull, 121000000000000ull, 122000000000000ull, 123000000000000ull, 124000000000000ull, 125000000000000ull, 126000000000000ull, 127000000000000ull, 128000000000000ull, 129000000000000ull, 182000000000000ull, 183000000000000ull, 920000000000000ull, 921000000000000ull, 908000000000000ull, 909000000000000ull, 130000000000000ull, 131000000000000ull, 132000000000000ull, 133000000000000ull, 134000000000000ull, 135000000000000ull, 136000000000000ull, 137000000000000ull, 138000000000000ull, 139000000000000ull, 192000000000000ull, 193000000000000ull, 930000000000000ull, 931000000000000ull, 918000000000000ull, 919000000000000ull, 140000000000000ull, 141000000000000ull, 142000000000000ull, 143000000000000ull, 144000000000000ull, 145000000000000ull, 146000000000000ull, 147000000000000ull, 148000000000000ull, 149000000000000ull, 184000000000000ull, 185000000000000ull, 940000000000000ull, 941000000000000ull, 188000000000000ull, 189000000000000ull, 150000000000000ull, 151000000000000ull, 152000000000000ull, 153000000000000ull, 154000000000000ull, 155000000000000ull, 156000000000000ull, 157000000000000ull, 158000000000000ull, 159000000000000ull, 194000000000000ull, 195000000000000ull, 950000000000000ull, 951000000000000ull, 198000000000000ull, 199000000000000ull, 160000000000000ull, 161000000000000ull, 162000000000000ull, 163000000000000ull, 164000000000000ull, 165000000000000ull, 166000000000000ull, 167000000000000ull, 168000000000000ull, 169000000000000ull, 186000000000000ull, 187000000000000ull, 960000000000000ull, 961000000000000ull, 988000000000000ull, 989000000000000ull, 170000000000000ull, 171000000000000ull, 172000000000000ull, 173000000000000ull, 174000000000000ull, 175000000000000ull, 176000000000000ull, 177000000000000ull, 178000000000000ull, 179000000000000ull, 196000000000000ull, 197000000000000ull, 970000000000000ull, 971000000000000ull, 998000000000000ull, 999000000000000ull, 200000000000000ull, 201000000000000ull, 202000000000000ull, 203000000000000ull, 204000000000000ull, 205000000000000ull, 206000000000000ull, 207000000000000ull, 208000000000000ull, 209000000000000ull, 280000000000000ull, 281000000000000ull, 802000000000000ull, 803000000000000ull, 882000000000000ull, 883000000000000ull, 210000000000000ull, 211000000000000ull, 212000000000000ull, 213000000000000ull, 214000000000000ull, 215000000000000ull, 216000000000000ull, 217000000000000ull, 218000000000000ull, 219000000000000ull, 290000000000000ull, 291000000000000ull, 812000000000000ull, 813000000000000ull, 892000000000000ull, 893000000000000ull, 220000000000000ull, 221000000000000ull, 222000000000000ull, 223000000000000ull, 224000000000000ull, 225000000000000ull, 226000000000000ull, 227000000000000ull, 228000000000000ull, 229000000000000ull, 282000000000000ull, 283000000000000ull, 822000000000000ull, 823000000000000ull, 828000000000000ull, 829000000000000ull, 230000000000000ull, 231000000000000ull, 232000000000000ull, 233000000000000ull, 234000000000000ull, 235000000000000ull, 236000000000000ull, 237000000000000ull, 238000000000000ull, 239000000000000ull, 292000000000000ull, 293000000000000ull, 832000000000000ull, 833000000000000ull, 838000000000000ull, 839000000000000ull, 240000000000000ull, 241000000000000ull, 242000000000000ull, 243000000000000ull, 244000000000000ull, 245000000000000ull, 246000000000000ull, 247000000000000ull, 248000000000000ull, 249000000000000ull, 284000000000000ull, 285000000000000ull, 842000000000000ull, 843000000000000ull, 288000000000000ull, 289000000000000ull, 250000000000000ull, 251000000000000ull, 252000000000000ull, 253000000000000ull, 254000000000000ull, 255000000000000ull, 256000000000000ull, 257000000000000ull, 258000000000000ull, 259000000000000ull, 294000000000000ull, 295000000000000ull, 852000000000000ull, 853000000000000ull, 298000000000000ull, 299000000000000ull, 260000000000000ull, 261000000000000ull, 262000000000000ull, 263000000000000ull, 264000000000000ull, 265000000000000ull, 266000000000000ull, 267000000000000ull, 268000000000000ull, 269000000000000ull, 286000000000000ull, 287000000000000ull, 862000000000000ull, 863000000000000ull, 888000000000000ull, 889000000000000ull, 270000000000000ull, 271000000000000ull, 272000000000000ull, 273000000000000ull, 274000000000000ull, 275000000000000ull, 276000000000000ull, 277000000000000ull, 278000000000000ull, 279000000000000ull, 296000000000000ull, 297000000000000ull, 872000000000000ull, 873000000000000ull, 898000000000000ull, 899000000000000ull, 300000000000000ull, 301000000000000ull, 302000000000000ull, 303000000000000ull, 304000000000000ull, 305000000000000ull, 306000000000000ull, 307000000000000ull, 308000000000000ull, 309000000000000ull, 380000000000000ull, 381000000000000ull, 902000000000000ull, 903000000000000ull, 982000000000000ull, 983000000000000ull, 310000000000000ull, 311000000000000ull, 312000000000000ull, 313000000000000ull, 314000000000000ull, 315000000000000ull, 316000000000000ull, 317000000000000ull, 318000000000000ull, 319000000000000ull, 390000000000000ull, 391000000000000ull, 912000000000000ull, 913000000000000ull, 992000000000000ull, 993000000000000ull, 320000000000000ull, 321000000000000ull, 322000000000000ull, 323000000000000ull, 324000000000000ull, 325000000000000ull, 326000000000000ull, 327000000000000ull, 328000000000000ull, 329000000000000ull, 382000000000000ull, 383000000000000ull, 922000000000000ull, 923000000000000ull, 928000000000000ull, 929000000000000ull, 330000000000000ull, 331000000000000ull, 332000000000000ull, 333000000000000ull, 334000000000000ull, 335000000000000ull, 336000000000000ull, 337000000000000ull, 338000000000000ull, 339000000000000ull, 392000000000000ull, 393000000000000ull, 932000000000000ull, 933000000000000ull, 938000000000000ull, 939000000000000ull, 340000000000000ull, 341000000000000ull, 342000000000000ull, 343000000000000ull, 344000000000000ull, 345000000000000ull, 346000000000000ull, 347000000000000ull, 348000000000000ull, 349000000000000ull, 384000000000000ull, 385000000000000ull, 942000000000000ull, 943000000000000ull, 388000000000000ull, 389000000000000ull, 350000000000000ull, 351000000000000ull, 352000000000000ull, 353000000000000ull, 354000000000000ull, 355000000000000ull, 356000000000000ull, 357000000000000ull, 358000000000000ull, 359000000000000ull, 394000000000000ull, 395000000000000ull, 952000000000000ull, 953000000000000ull, 398000000000000ull, 399000000000000ull, 360000000000000ull, 361000000000000ull, 362000000000000ull, 363000000000000ull, 364000000000000ull, 365000000000000ull, 366000000000000ull, 367000000000000ull, 368000000000000ull, 369000000000000ull, 386000000000000ull, 387000000000000ull, 962000000000000ull, 963000000000000ull, 988000000000000ull, 989000000000000ull, 370000000000000ull, 371000000000000ull, 372000000000000ull, 373000000000000ull, 374000000000000ull, 375000000000000ull, 376000000000000ull, 377000000000000ull, 378000000000000ull, 379000000000000ull, 396000000000000ull, 397000000000000ull, 972000000000000ull, 973000000000000ull, 998000000000000ull, 999000000000000ull, 400000000000000ull, 401000000000000ull, 402000000000000ull, 403000000000000ull, 404000000000000ull, 405000000000000ull, 406000000000000ull, 407000000000000ull, 408000000000000ull, 409000000000000ull, 480000000000000ull, 481000000000000ull, 804000000000000ull, 805000000000000ull, 884000000000000ull, 885000000000000ull, 410000000000000ull, 411000000000000ull, 412000000000000ull, 413000000000000ull, 414000000000000ull, 415000000000000ull, 416000000000000ull, 417000000000000ull, 418000000000000ull, 419000000000000ull, 490000000000000ull, 491000000000000ull, 814000000000000ull, 815000000000000ull, 894000000000000ull, 895000000000000ull, 420000000000000ull, 421000000000000ull, 422000000000000ull, 423000000000000ull, 424000000000000ull, 425000000000000ull, 426000000000000ull, 427000000000000ull, 428000000000000ull, 429000000000000ull, 482000000000000ull, 483000000000000ull, 824000000000000ull, 825000000000000ull, 848000000000000ull, 849000000000000ull, 430000000000000ull, 431000000000000ull, 432000000000000ull, 433000000000000ull, 434000000000000ull, 435000000000000ull, 436000000000000ull, 437000000000000ull, 438000000000000ull, 439000000000000ull, 492000000000000ull, 493000000000000ull, 834000000000000ull, 835000000000000ull, 858000000000000ull, 859000000000000ull, 440000000000000ull, 441000000000000ull, 442000000000000ull, 443000000000000ull, 444000000000000ull, 445000000000000ull, 446000000000000ull, 447000000000000ull, 448000000000000ull, 449000000000000ull, 484000000000000ull, 485000000000000ull, 844000000000000ull, 845000000000000ull, 488000000000000ull, 489000000000000ull, 450000000000000ull, 451000000000000ull, 452000000000000ull, 453000000000000ull, 454000000000000ull, 455000000000000ull, 456000000000000ull, 457000000000000ull, 458000000000000ull, 459000000000000ull, 494000000000000ull, 495000000000000ull, 854000000000000ull, 855000000000000ull, 498000000000000ull, 499000000000000ull, 460000000000000ull, 461000000000000ull, 462000000000000ull, 463000000000000ull, 464000000000000ull, 465000000000000ull, 466000000000000ull, 467000000000000ull, 468000000000000ull, 469000000000000ull, 486000000000000ull, 487000000000000ull, 864000000000000ull, 865000000000000ull, 888000000000000ull, 889000000000000ull, 470000000000000ull, 471000000000000ull, 472000000000000ull, 473000000000000ull, 474000000000000ull, 475000000000000ull, 476000000000000ull, 477000000000000ull, 478000000000000ull, 479000000000000ull, 496000000000000ull, 497000000000000ull, 874000000000000ull, 875000000000000ull, 898000000000000ull, 899000000000000ull, 500000000000000ull, 501000000000000ull, 502000000000000ull, 503000000000000ull, 504000000000000ull, 505000000000000ull, 506000000000000ull, 507000000000000ull, 508000000000000ull, 509000000000000ull, 580000000000000ull, 581000000000000ull, 904000000000000ull, 905000000000000ull, 984000000000000ull, 985000000000000ull, 510000000000000ull, 511000000000000ull, 512000000000000ull, 513000000000000ull, 514000000000000ull, 515000000000000ull, 516000000000000ull, 517000000000000ull, 518000000000000ull, 519000000000000ull, 590000000000000ull, 591000000000000ull, 914000000000000ull, 915000000000000ull, 994000000000000ull, 995000000000000ull, 520000000000000ull, 521000000000000ull, 522000000000000ull, 523000000000000ull, 524000000000000ull, 525000000000000ull, 526000000000000ull, 527000000000000ull, 528000000000000ull, 529000000000000ull, 582000000000000ull, 583000000000000ull, 924000000000000ull, 925000000000000ull, 948000000000000ull, 949000000000000ull, 530000000000000ull, 531000000000000ull, 532000000000000ull, 533000000000000ull, 534000000000000ull, 535000000000000ull, 536000000000000ull, 537000000000000ull, 538000000000000ull, 539000000000000ull, 592000000000000ull, 593000000000000ull, 934000000000000ull, 935000000000000ull, 958000000000000ull, 959000000000000ull, 540000000000000ull, 541000000000000ull, 542000000000000ull, 543000000000000ull, 544000000000000ull, 545000000000000ull, 546000000000000ull, 547000000000000ull, 548000000000000ull, 549000000000000ull, 584000000000000ull, 585000000000000ull, 944000000000000ull, 945000000000000ull, 588000000000000ull, 589000000000000ull, 550000000000000ull, 551000000000000ull, 552000000000000ull, 553000000000000ull, 554000000000000ull, 555000000000000ull, 556000000000000ull, 557000000000000ull, 558000000000000ull, 559000000000000ull, 594000000000000ull, 595000000000000ull, 954000000000000ull, 955000000000000ull, 598000000000000ull, 599000000000000ull, 560000000000000ull, 561000000000000ull, 562000000000000ull, 563000000000000ull, 564000000000000ull, 565000000000000ull, 566000000000000ull, 567000000000000ull, 568000000000000ull, 569000000000000ull, 586000000000000ull, 587000000000000ull, 964000000000000ull, 965000000000000ull, 988000000000000ull, 989000000000000ull, 570000000000000ull, 571000000000000ull, 572000000000000ull, 573000000000000ull, 574000000000000ull, 575000000000000ull, 576000000000000ull, 577000000000000ull, 578000000000000ull, 579000000000000ull, 596000000000000ull, 597000000000000ull, 974000000000000ull, 975000000000000ull, 998000000000000ull, 999000000000000ull, 600000000000000ull, 601000000000000ull, 602000000000000ull, 603000000000000ull, 604000000000000ull, 605000000000000ull, 606000000000000ull, 607000000000000ull, 608000000000000ull, 609000000000000ull, 680000000000000ull, 681000000000000ull, 806000000000000ull, 807000000000000ull, 886000000000000ull, 887000000000000ull, 610000000000000ull, 611000000000000ull, 612000000000000ull, 613000000000000ull, 614000000000000ull, 615000000000000ull, 616000000000000ull, 617000000000000ull, 618000000000000ull, 619000000000000ull, 690000000000000ull, 691000000000000ull, 816000000000000ull, 817000000000000ull, 896000000000000ull, 897000000000000ull, 620000000000000ull, 621000000000000ull, 622000000000000ull, 623000000000000ull, 624000000000000ull, 625000000000000ull, 626000000000000ull, 627000000000000ull, 628000000000000ull, 629000000000000ull, 682000000000000ull, 683000000000000ull, 826000000000000ull, 827000000000000ull, 868000000000000ull, 869000000000000ull, 630000000000000ull, 631000000000000ull, 632000000000000ull, 633000000000000ull, 634000000000000ull, 635000000000000ull, 636000000000000ull, 637000000000000ull, 638000000000000ull, 639000000000000ull, 692000000000000ull, 693000000000000ull, 836000000000000ull, 837000000000000ull, 878000000000000ull, 879000000000000ull, 640000000000000ull, 641000000000000ull, 642000000000000ull, 643000000000000ull, 644000000000000ull, 645000000000000ull, 646000000000000ull, 647000000000000ull, 648000000000000ull, 649000000000000ull, 684000000000000ull, 685000000000000ull, 846000000000000ull, 847000000000000ull, 688000000000000ull, 689000000000000ull, 650000000000000ull, 651000000000000ull, 652000000000000ull, 653000000000000ull, 654000000000000ull, 655000000000000ull, 656000000000000ull, 657000000000000ull, 658000000000000ull, 659000000000000ull, 694000000000000ull, 695000000000000ull, 856000000000000ull, 857000000000000ull, 698000000000000ull, 699000000000000ull, 660000000000000ull, 661000000000000ull, 662000000000000ull, 663000000000000ull, 664000000000000ull, 665000000000000ull, 666000000000000ull, 667000000000000ull, 668000000000000ull, 669000000000000ull, 686000000000000ull, 687000000000000ull, 866000000000000ull, 867000000000000ull, 888000000000000ull, 889000000000000ull, 670000000000000ull, 671000000000000ull, 672000000000000ull, 673000000000000ull, 674000000000000ull, 675000000000000ull, 676000000000000ull, 677000000000000ull, 678000000000000ull, 679000000000000ull, 696000000000000ull, 697000000000000ull, 876000000000000ull, 877000000000000ull, 898000000000000ull, 899000000000000ull, 700000000000000ull, 701000000000000ull, 702000000000000ull, 703000000000000ull, 704000000000000ull, 705000000000000ull, 706000000000000ull, 707000000000000ull, 708000000000000ull, 709000000000000ull, 780000000000000ull, 781000000000000ull, 906000000000000ull, 907000000000000ull, 986000000000000ull, 987000000000000ull, 710000000000000ull, 711000000000000ull, 712000000000000ull, 713000000000000ull, 714000000000000ull, 715000000000000ull, 716000000000000ull, 717000000000000ull, 718000000000000ull, 719000000000000ull, 790000000000000ull, 791000000000000ull, 916000000000000ull, 917000000000000ull, 996000000000000ull, 997000000000000ull, 720000000000000ull, 721000000000000ull, 722000000000000ull, 723000000000000ull, 724000000000000ull, 725000000000000ull, 726000000000000ull, 727000000000000ull, 728000000000000ull, 729000000000000ull, 782000000000000ull, 783000000000000ull, 926000000000000ull, 927000000000000ull, 968000000000000ull, 969000000000000ull, 730000000000000ull, 731000000000000ull, 732000000000000ull, 733000000000000ull, 734000000000000ull, 735000000000000ull, 736000000000000ull, 737000000000000ull, 738000000000000ull, 739000000000000ull, 792000000000000ull, 793000000000000ull, 936000000000000ull, 937000000000000ull, 978000000000000ull, 979000000000000ull, 740000000000000ull, 741000000000000ull, 742000000000000ull, 743000000000000ull, 744000000000000ull, 745000000000000ull, 746000000000000ull, 747000000000000ull, 748000000000000ull, 749000000000000ull, 784000000000000ull, 785000000000000ull, 946000000000000ull, 947000000000000ull, 788000000000000ull, 789000000000000ull, 750000000000000ull, 751000000000000ull, 752000000000000ull, 753000000000000ull, 754000000000000ull, 755000000000000ull, 756000000000000ull, 757000000000000ull, 758000000000000ull, 759000000000000ull, 794000000000000ull, 795000000000000ull, 956000000000000ull, 957000000000000ull, 798000000000000ull, 799000000000000ull, 760000000000000ull, 761000000000000ull, 762000000000000ull, 763000000000000ull, 764000000000000ull, 765000000000000ull, 766000000000000ull, 767000000000000ull, 768000000000000ull, 769000000000000ull, 786000000000000ull, 787000000000000ull, 966000000000000ull, 967000000000000ull, 988000000000000ull, 989000000000000ull, 770000000000000ull, 771000000000000ull, 772000000000000ull, 773000000000000ull, 774000000000000ull, 775000000000000ull, 776000000000000ull, 777000000000000ull, 778000000000000ull, 779000000000000ull, 796000000000000ull, 797000000000000ull, 976000000000000ull, 977000000000000ull, 998000000000000ull, 999000000000000ull }; static const UINT64 d2b6[] = { 0000000000000000ull, 1000000000000000ull, 2000000000000000ull, 3000000000000000ull, 4000000000000000ull, 5000000000000000ull, 6000000000000000ull, 7000000000000000ull, 8000000000000000ull, 9000000000000000ull, 80000000000000000ull, 81000000000000000ull, 800000000000000000ull, 801000000000000000ull, 880000000000000000ull, 881000000000000000ull, 10000000000000000ull, 11000000000000000ull, 12000000000000000ull, 13000000000000000ull, 14000000000000000ull, 15000000000000000ull, 16000000000000000ull, 17000000000000000ull, 18000000000000000ull, 19000000000000000ull, 90000000000000000ull, 91000000000000000ull, 810000000000000000ull, 811000000000000000ull, 890000000000000000ull, 891000000000000000ull, 20000000000000000ull, 21000000000000000ull, 22000000000000000ull, 23000000000000000ull, 24000000000000000ull, 25000000000000000ull, 26000000000000000ull, 27000000000000000ull, 28000000000000000ull, 29000000000000000ull, 82000000000000000ull, 83000000000000000ull, 820000000000000000ull, 821000000000000000ull, 808000000000000000ull, 809000000000000000ull, 30000000000000000ull, 31000000000000000ull, 32000000000000000ull, 33000000000000000ull, 34000000000000000ull, 35000000000000000ull, 36000000000000000ull, 37000000000000000ull, 38000000000000000ull, 39000000000000000ull, 92000000000000000ull, 93000000000000000ull, 830000000000000000ull, 831000000000000000ull, 818000000000000000ull, 819000000000000000ull, 40000000000000000ull, 41000000000000000ull, 42000000000000000ull, 43000000000000000ull, 44000000000000000ull, 45000000000000000ull, 46000000000000000ull, 47000000000000000ull, 48000000000000000ull, 49000000000000000ull, 84000000000000000ull, 85000000000000000ull, 840000000000000000ull, 841000000000000000ull, 88000000000000000ull, 89000000000000000ull, 50000000000000000ull, 51000000000000000ull, 52000000000000000ull, 53000000000000000ull, 54000000000000000ull, 55000000000000000ull, 56000000000000000ull, 57000000000000000ull, 58000000000000000ull, 59000000000000000ull, 94000000000000000ull, 95000000000000000ull, 850000000000000000ull, 851000000000000000ull, 98000000000000000ull, 99000000000000000ull, 60000000000000000ull, 61000000000000000ull, 62000000000000000ull, 63000000000000000ull, 64000000000000000ull, 65000000000000000ull, 66000000000000000ull, 67000000000000000ull, 68000000000000000ull, 69000000000000000ull, 86000000000000000ull, 87000000000000000ull, 860000000000000000ull, 861000000000000000ull, 888000000000000000ull, 889000000000000000ull, 70000000000000000ull, 71000000000000000ull, 72000000000000000ull, 73000000000000000ull, 74000000000000000ull, 75000000000000000ull, 76000000000000000ull, 77000000000000000ull, 78000000000000000ull, 79000000000000000ull, 96000000000000000ull, 97000000000000000ull, 870000000000000000ull, 871000000000000000ull, 898000000000000000ull, 899000000000000000ull, 100000000000000000ull, 101000000000000000ull, 102000000000000000ull, 103000000000000000ull, 104000000000000000ull, 105000000000000000ull, 106000000000000000ull, 107000000000000000ull, 108000000000000000ull, 109000000000000000ull, 180000000000000000ull, 181000000000000000ull, 900000000000000000ull, 901000000000000000ull, 980000000000000000ull, 981000000000000000ull, 110000000000000000ull, 111000000000000000ull, 112000000000000000ull, 113000000000000000ull, 114000000000000000ull, 115000000000000000ull, 116000000000000000ull, 117000000000000000ull, 118000000000000000ull, 119000000000000000ull, 190000000000000000ull, 191000000000000000ull, 910000000000000000ull, 911000000000000000ull, 990000000000000000ull, 991000000000000000ull, 120000000000000000ull, 121000000000000000ull, 122000000000000000ull, 123000000000000000ull, 124000000000000000ull, 125000000000000000ull, 126000000000000000ull, 127000000000000000ull, 128000000000000000ull, 129000000000000000ull, 182000000000000000ull, 183000000000000000ull, 920000000000000000ull, 921000000000000000ull, 908000000000000000ull, 909000000000000000ull, 130000000000000000ull, 131000000000000000ull, 132000000000000000ull, 133000000000000000ull, 134000000000000000ull, 135000000000000000ull, 136000000000000000ull, 137000000000000000ull, 138000000000000000ull, 139000000000000000ull, 192000000000000000ull, 193000000000000000ull, 930000000000000000ull, 931000000000000000ull, 918000000000000000ull, 919000000000000000ull, 140000000000000000ull, 141000000000000000ull, 142000000000000000ull, 143000000000000000ull, 144000000000000000ull, 145000000000000000ull, 146000000000000000ull, 147000000000000000ull, 148000000000000000ull, 149000000000000000ull, 184000000000000000ull, 185000000000000000ull, 940000000000000000ull, 941000000000000000ull, 188000000000000000ull, 189000000000000000ull, 150000000000000000ull, 151000000000000000ull, 152000000000000000ull, 153000000000000000ull, 154000000000000000ull, 155000000000000000ull, 156000000000000000ull, 157000000000000000ull, 158000000000000000ull, 159000000000000000ull, 194000000000000000ull, 195000000000000000ull, 950000000000000000ull, 951000000000000000ull, 198000000000000000ull, 199000000000000000ull, 160000000000000000ull, 161000000000000000ull, 162000000000000000ull, 163000000000000000ull, 164000000000000000ull, 165000000000000000ull, 166000000000000000ull, 167000000000000000ull, 168000000000000000ull, 169000000000000000ull, 186000000000000000ull, 187000000000000000ull, 960000000000000000ull, 961000000000000000ull, 988000000000000000ull, 989000000000000000ull, 170000000000000000ull, 171000000000000000ull, 172000000000000000ull, 173000000000000000ull, 174000000000000000ull, 175000000000000000ull, 176000000000000000ull, 177000000000000000ull, 178000000000000000ull, 179000000000000000ull, 196000000000000000ull, 197000000000000000ull, 970000000000000000ull, 971000000000000000ull, 998000000000000000ull, 999000000000000000ull, 200000000000000000ull, 201000000000000000ull, 202000000000000000ull, 203000000000000000ull, 204000000000000000ull, 205000000000000000ull, 206000000000000000ull, 207000000000000000ull, 208000000000000000ull, 209000000000000000ull, 280000000000000000ull, 281000000000000000ull, 802000000000000000ull, 803000000000000000ull, 882000000000000000ull, 883000000000000000ull, 210000000000000000ull, 211000000000000000ull, 212000000000000000ull, 213000000000000000ull, 214000000000000000ull, 215000000000000000ull, 216000000000000000ull, 217000000000000000ull, 218000000000000000ull, 219000000000000000ull, 290000000000000000ull, 291000000000000000ull, 812000000000000000ull, 813000000000000000ull, 892000000000000000ull, 893000000000000000ull, 220000000000000000ull, 221000000000000000ull, 222000000000000000ull, 223000000000000000ull, 224000000000000000ull, 225000000000000000ull, 226000000000000000ull, 227000000000000000ull, 228000000000000000ull, 229000000000000000ull, 282000000000000000ull, 283000000000000000ull, 822000000000000000ull, 823000000000000000ull, 828000000000000000ull, 829000000000000000ull, 230000000000000000ull, 231000000000000000ull, 232000000000000000ull, 233000000000000000ull, 234000000000000000ull, 235000000000000000ull, 236000000000000000ull, 237000000000000000ull, 238000000000000000ull, 239000000000000000ull, 292000000000000000ull, 293000000000000000ull, 832000000000000000ull, 833000000000000000ull, 838000000000000000ull, 839000000000000000ull, 240000000000000000ull, 241000000000000000ull, 242000000000000000ull, 243000000000000000ull, 244000000000000000ull, 245000000000000000ull, 246000000000000000ull, 247000000000000000ull, 248000000000000000ull, 249000000000000000ull, 284000000000000000ull, 285000000000000000ull, 842000000000000000ull, 843000000000000000ull, 288000000000000000ull, 289000000000000000ull, 250000000000000000ull, 251000000000000000ull, 252000000000000000ull, 253000000000000000ull, 254000000000000000ull, 255000000000000000ull, 256000000000000000ull, 257000000000000000ull, 258000000000000000ull, 259000000000000000ull, 294000000000000000ull, 295000000000000000ull, 852000000000000000ull, 853000000000000000ull, 298000000000000000ull, 299000000000000000ull, 260000000000000000ull, 261000000000000000ull, 262000000000000000ull, 263000000000000000ull, 264000000000000000ull, 265000000000000000ull, 266000000000000000ull, 267000000000000000ull, 268000000000000000ull, 269000000000000000ull, 286000000000000000ull, 287000000000000000ull, 862000000000000000ull, 863000000000000000ull, 888000000000000000ull, 889000000000000000ull, 270000000000000000ull, 271000000000000000ull, 272000000000000000ull, 273000000000000000ull, 274000000000000000ull, 275000000000000000ull, 276000000000000000ull, 277000000000000000ull, 278000000000000000ull, 279000000000000000ull, 296000000000000000ull, 297000000000000000ull, 872000000000000000ull, 873000000000000000ull, 898000000000000000ull, 899000000000000000ull, 300000000000000000ull, 301000000000000000ull, 302000000000000000ull, 303000000000000000ull, 304000000000000000ull, 305000000000000000ull, 306000000000000000ull, 307000000000000000ull, 308000000000000000ull, 309000000000000000ull, 380000000000000000ull, 381000000000000000ull, 902000000000000000ull, 903000000000000000ull, 982000000000000000ull, 983000000000000000ull, 310000000000000000ull, 311000000000000000ull, 312000000000000000ull, 313000000000000000ull, 314000000000000000ull, 315000000000000000ull, 316000000000000000ull, 317000000000000000ull, 318000000000000000ull, 319000000000000000ull, 390000000000000000ull, 391000000000000000ull, 912000000000000000ull, 913000000000000000ull, 992000000000000000ull, 993000000000000000ull, 320000000000000000ull, 321000000000000000ull, 322000000000000000ull, 323000000000000000ull, 324000000000000000ull, 325000000000000000ull, 326000000000000000ull, 327000000000000000ull, 328000000000000000ull, 329000000000000000ull, 382000000000000000ull, 383000000000000000ull, 922000000000000000ull, 923000000000000000ull, 928000000000000000ull, 929000000000000000ull, 330000000000000000ull, 331000000000000000ull, 332000000000000000ull, 333000000000000000ull, 334000000000000000ull, 335000000000000000ull, 336000000000000000ull, 337000000000000000ull, 338000000000000000ull, 339000000000000000ull, 392000000000000000ull, 393000000000000000ull, 932000000000000000ull, 933000000000000000ull, 938000000000000000ull, 939000000000000000ull, 340000000000000000ull, 341000000000000000ull, 342000000000000000ull, 343000000000000000ull, 344000000000000000ull, 345000000000000000ull, 346000000000000000ull, 347000000000000000ull, 348000000000000000ull, 349000000000000000ull, 384000000000000000ull, 385000000000000000ull, 942000000000000000ull, 943000000000000000ull, 388000000000000000ull, 389000000000000000ull, 350000000000000000ull, 351000000000000000ull, 352000000000000000ull, 353000000000000000ull, 354000000000000000ull, 355000000000000000ull, 356000000000000000ull, 357000000000000000ull, 358000000000000000ull, 359000000000000000ull, 394000000000000000ull, 395000000000000000ull, 952000000000000000ull, 953000000000000000ull, 398000000000000000ull, 399000000000000000ull, 360000000000000000ull, 361000000000000000ull, 362000000000000000ull, 363000000000000000ull, 364000000000000000ull, 365000000000000000ull, 366000000000000000ull, 367000000000000000ull, 368000000000000000ull, 369000000000000000ull, 386000000000000000ull, 387000000000000000ull, 962000000000000000ull, 963000000000000000ull, 988000000000000000ull, 989000000000000000ull, 370000000000000000ull, 371000000000000000ull, 372000000000000000ull, 373000000000000000ull, 374000000000000000ull, 375000000000000000ull, 376000000000000000ull, 377000000000000000ull, 378000000000000000ull, 379000000000000000ull, 396000000000000000ull, 397000000000000000ull, 972000000000000000ull, 973000000000000000ull, 998000000000000000ull, 999000000000000000ull, 400000000000000000ull, 401000000000000000ull, 402000000000000000ull, 403000000000000000ull, 404000000000000000ull, 405000000000000000ull, 406000000000000000ull, 407000000000000000ull, 408000000000000000ull, 409000000000000000ull, 480000000000000000ull, 481000000000000000ull, 804000000000000000ull, 805000000000000000ull, 884000000000000000ull, 885000000000000000ull, 410000000000000000ull, 411000000000000000ull, 412000000000000000ull, 413000000000000000ull, 414000000000000000ull, 415000000000000000ull, 416000000000000000ull, 417000000000000000ull, 418000000000000000ull, 419000000000000000ull, 490000000000000000ull, 491000000000000000ull, 814000000000000000ull, 815000000000000000ull, 894000000000000000ull, 895000000000000000ull, 420000000000000000ull, 421000000000000000ull, 422000000000000000ull, 423000000000000000ull, 424000000000000000ull, 425000000000000000ull, 426000000000000000ull, 427000000000000000ull, 428000000000000000ull, 429000000000000000ull, 482000000000000000ull, 483000000000000000ull, 824000000000000000ull, 825000000000000000ull, 848000000000000000ull, 849000000000000000ull, 430000000000000000ull, 431000000000000000ull, 432000000000000000ull, 433000000000000000ull, 434000000000000000ull, 435000000000000000ull, 436000000000000000ull, 437000000000000000ull, 438000000000000000ull, 439000000000000000ull, 492000000000000000ull, 493000000000000000ull, 834000000000000000ull, 835000000000000000ull, 858000000000000000ull, 859000000000000000ull, 440000000000000000ull, 441000000000000000ull, 442000000000000000ull, 443000000000000000ull, 444000000000000000ull, 445000000000000000ull, 446000000000000000ull, 447000000000000000ull, 448000000000000000ull, 449000000000000000ull, 484000000000000000ull, 485000000000000000ull, 844000000000000000ull, 845000000000000000ull, 488000000000000000ull, 489000000000000000ull, 450000000000000000ull, 451000000000000000ull, 452000000000000000ull, 453000000000000000ull, 454000000000000000ull, 455000000000000000ull, 456000000000000000ull, 457000000000000000ull, 458000000000000000ull, 459000000000000000ull, 494000000000000000ull, 495000000000000000ull, 854000000000000000ull, 855000000000000000ull, 498000000000000000ull, 499000000000000000ull, 460000000000000000ull, 461000000000000000ull, 462000000000000000ull, 463000000000000000ull, 464000000000000000ull, 465000000000000000ull, 466000000000000000ull, 467000000000000000ull, 468000000000000000ull, 469000000000000000ull, 486000000000000000ull, 487000000000000000ull, 864000000000000000ull, 865000000000000000ull, 888000000000000000ull, 889000000000000000ull, 470000000000000000ull, 471000000000000000ull, 472000000000000000ull, 473000000000000000ull, 474000000000000000ull, 475000000000000000ull, 476000000000000000ull, 477000000000000000ull, 478000000000000000ull, 479000000000000000ull, 496000000000000000ull, 497000000000000000ull, 874000000000000000ull, 875000000000000000ull, 898000000000000000ull, 899000000000000000ull, 500000000000000000ull, 501000000000000000ull, 502000000000000000ull, 503000000000000000ull, 504000000000000000ull, 505000000000000000ull, 506000000000000000ull, 507000000000000000ull, 508000000000000000ull, 509000000000000000ull, 580000000000000000ull, 581000000000000000ull, 904000000000000000ull, 905000000000000000ull, 984000000000000000ull, 985000000000000000ull, 510000000000000000ull, 511000000000000000ull, 512000000000000000ull, 513000000000000000ull, 514000000000000000ull, 515000000000000000ull, 516000000000000000ull, 517000000000000000ull, 518000000000000000ull, 519000000000000000ull, 590000000000000000ull, 591000000000000000ull, 914000000000000000ull, 915000000000000000ull, 994000000000000000ull, 995000000000000000ull, 520000000000000000ull, 521000000000000000ull, 522000000000000000ull, 523000000000000000ull, 524000000000000000ull, 525000000000000000ull, 526000000000000000ull, 527000000000000000ull, 528000000000000000ull, 529000000000000000ull, 582000000000000000ull, 583000000000000000ull, 924000000000000000ull, 925000000000000000ull, 948000000000000000ull, 949000000000000000ull, 530000000000000000ull, 531000000000000000ull, 532000000000000000ull, 533000000000000000ull, 534000000000000000ull, 535000000000000000ull, 536000000000000000ull, 537000000000000000ull, 538000000000000000ull, 539000000000000000ull, 592000000000000000ull, 593000000000000000ull, 934000000000000000ull, 935000000000000000ull, 958000000000000000ull, 959000000000000000ull, 540000000000000000ull, 541000000000000000ull, 542000000000000000ull, 543000000000000000ull, 544000000000000000ull, 545000000000000000ull, 546000000000000000ull, 547000000000000000ull, 548000000000000000ull, 549000000000000000ull, 584000000000000000ull, 585000000000000000ull, 944000000000000000ull, 945000000000000000ull, 588000000000000000ull, 589000000000000000ull, 550000000000000000ull, 551000000000000000ull, 552000000000000000ull, 553000000000000000ull, 554000000000000000ull, 555000000000000000ull, 556000000000000000ull, 557000000000000000ull, 558000000000000000ull, 559000000000000000ull, 594000000000000000ull, 595000000000000000ull, 954000000000000000ull, 955000000000000000ull, 598000000000000000ull, 599000000000000000ull, 560000000000000000ull, 561000000000000000ull, 562000000000000000ull, 563000000000000000ull, 564000000000000000ull, 565000000000000000ull, 566000000000000000ull, 567000000000000000ull, 568000000000000000ull, 569000000000000000ull, 586000000000000000ull, 587000000000000000ull, 964000000000000000ull, 965000000000000000ull, 988000000000000000ull, 989000000000000000ull, 570000000000000000ull, 571000000000000000ull, 572000000000000000ull, 573000000000000000ull, 574000000000000000ull, 575000000000000000ull, 576000000000000000ull, 577000000000000000ull, 578000000000000000ull, 579000000000000000ull, 596000000000000000ull, 597000000000000000ull, 974000000000000000ull, 975000000000000000ull, 998000000000000000ull, 999000000000000000ull, 600000000000000000ull, 601000000000000000ull, 602000000000000000ull, 603000000000000000ull, 604000000000000000ull, 605000000000000000ull, 606000000000000000ull, 607000000000000000ull, 608000000000000000ull, 609000000000000000ull, 680000000000000000ull, 681000000000000000ull, 806000000000000000ull, 807000000000000000ull, 886000000000000000ull, 887000000000000000ull, 610000000000000000ull, 611000000000000000ull, 612000000000000000ull, 613000000000000000ull, 614000000000000000ull, 615000000000000000ull, 616000000000000000ull, 617000000000000000ull, 618000000000000000ull, 619000000000000000ull, 690000000000000000ull, 691000000000000000ull, 816000000000000000ull, 817000000000000000ull, 896000000000000000ull, 897000000000000000ull, 620000000000000000ull, 621000000000000000ull, 622000000000000000ull, 623000000000000000ull, 624000000000000000ull, 625000000000000000ull, 626000000000000000ull, 627000000000000000ull, 628000000000000000ull, 629000000000000000ull, 682000000000000000ull, 683000000000000000ull, 826000000000000000ull, 827000000000000000ull, 868000000000000000ull, 869000000000000000ull, 630000000000000000ull, 631000000000000000ull, 632000000000000000ull, 633000000000000000ull, 634000000000000000ull, 635000000000000000ull, 636000000000000000ull, 637000000000000000ull, 638000000000000000ull, 639000000000000000ull, 692000000000000000ull, 693000000000000000ull, 836000000000000000ull, 837000000000000000ull, 878000000000000000ull, 879000000000000000ull, 640000000000000000ull, 641000000000000000ull, 642000000000000000ull, 643000000000000000ull, 644000000000000000ull, 645000000000000000ull, 646000000000000000ull, 647000000000000000ull, 648000000000000000ull, 649000000000000000ull, 684000000000000000ull, 685000000000000000ull, 846000000000000000ull, 847000000000000000ull, 688000000000000000ull, 689000000000000000ull, 650000000000000000ull, 651000000000000000ull, 652000000000000000ull, 653000000000000000ull, 654000000000000000ull, 655000000000000000ull, 656000000000000000ull, 657000000000000000ull, 658000000000000000ull, 659000000000000000ull, 694000000000000000ull, 695000000000000000ull, 856000000000000000ull, 857000000000000000ull, 698000000000000000ull, 699000000000000000ull, 660000000000000000ull, 661000000000000000ull, 662000000000000000ull, 663000000000000000ull, 664000000000000000ull, 665000000000000000ull, 666000000000000000ull, 667000000000000000ull, 668000000000000000ull, 669000000000000000ull, 686000000000000000ull, 687000000000000000ull, 866000000000000000ull, 867000000000000000ull, 888000000000000000ull, 889000000000000000ull, 670000000000000000ull, 671000000000000000ull, 672000000000000000ull, 673000000000000000ull, 674000000000000000ull, 675000000000000000ull, 676000000000000000ull, 677000000000000000ull, 678000000000000000ull, 679000000000000000ull, 696000000000000000ull, 697000000000000000ull, 876000000000000000ull, 877000000000000000ull, 898000000000000000ull, 899000000000000000ull, 700000000000000000ull, 701000000000000000ull, 702000000000000000ull, 703000000000000000ull, 704000000000000000ull, 705000000000000000ull, 706000000000000000ull, 707000000000000000ull, 708000000000000000ull, 709000000000000000ull, 780000000000000000ull, 781000000000000000ull, 906000000000000000ull, 907000000000000000ull, 986000000000000000ull, 987000000000000000ull, 710000000000000000ull, 711000000000000000ull, 712000000000000000ull, 713000000000000000ull, 714000000000000000ull, 715000000000000000ull, 716000000000000000ull, 717000000000000000ull, 718000000000000000ull, 719000000000000000ull, 790000000000000000ull, 791000000000000000ull, 916000000000000000ull, 917000000000000000ull, 996000000000000000ull, 997000000000000000ull, 720000000000000000ull, 721000000000000000ull, 722000000000000000ull, 723000000000000000ull, 724000000000000000ull, 725000000000000000ull, 726000000000000000ull, 727000000000000000ull, 728000000000000000ull, 729000000000000000ull, 782000000000000000ull, 783000000000000000ull, 926000000000000000ull, 927000000000000000ull, 968000000000000000ull, 969000000000000000ull, 730000000000000000ull, 731000000000000000ull, 732000000000000000ull, 733000000000000000ull, 734000000000000000ull, 735000000000000000ull, 736000000000000000ull, 737000000000000000ull, 738000000000000000ull, 739000000000000000ull, 792000000000000000ull, 793000000000000000ull, 936000000000000000ull, 937000000000000000ull, 978000000000000000ull, 979000000000000000ull, 740000000000000000ull, 741000000000000000ull, 742000000000000000ull, 743000000000000000ull, 744000000000000000ull, 745000000000000000ull, 746000000000000000ull, 747000000000000000ull, 748000000000000000ull, 749000000000000000ull, 784000000000000000ull, 785000000000000000ull, 946000000000000000ull, 947000000000000000ull, 788000000000000000ull, 789000000000000000ull, 750000000000000000ull, 751000000000000000ull, 752000000000000000ull, 753000000000000000ull, 754000000000000000ull, 755000000000000000ull, 756000000000000000ull, 757000000000000000ull, 758000000000000000ull, 759000000000000000ull, 794000000000000000ull, 795000000000000000ull, 956000000000000000ull, 957000000000000000ull, 798000000000000000ull, 799000000000000000ull, 760000000000000000ull, 761000000000000000ull, 762000000000000000ull, 763000000000000000ull, 764000000000000000ull, 765000000000000000ull, 766000000000000000ull, 767000000000000000ull, 768000000000000000ull, 769000000000000000ull, 786000000000000000ull, 787000000000000000ull, 966000000000000000ull, 967000000000000000ull, 988000000000000000ull, 989000000000000000ull, 770000000000000000ull, 771000000000000000ull, 772000000000000000ull, 773000000000000000ull, 774000000000000000ull, 775000000000000000ull, 776000000000000000ull, 777000000000000000ull, 778000000000000000ull, 779000000000000000ull, 796000000000000000ull, 797000000000000000ull, 976000000000000000ull, 977000000000000000ull, 998000000000000000ull, 999000000000000000ull }; static const UINT64 b2d[] = { 0x000ull, 0x001ull, 0x002ull, 0x003ull, 0x004ull, 0x005ull, 0x006ull, 0x007ull, 0x008ull, 0x009ull, 0x010ull, 0x011ull, 0x012ull, 0x013ull, 0x014ull, 0x015ull, 0x016ull, 0x017ull, 0x018ull, 0x019ull, 0x020ull, 0x021ull, 0x022ull, 0x023ull, 0x024ull, 0x025ull, 0x026ull, 0x027ull, 0x028ull, 0x029ull, 0x030ull, 0x031ull, 0x032ull, 0x033ull, 0x034ull, 0x035ull, 0x036ull, 0x037ull, 0x038ull, 0x039ull, 0x040ull, 0x041ull, 0x042ull, 0x043ull, 0x044ull, 0x045ull, 0x046ull, 0x047ull, 0x048ull, 0x049ull, 0x050ull, 0x051ull, 0x052ull, 0x053ull, 0x054ull, 0x055ull, 0x056ull, 0x057ull, 0x058ull, 0x059ull, 0x060ull, 0x061ull, 0x062ull, 0x063ull, 0x064ull, 0x065ull, 0x066ull, 0x067ull, 0x068ull, 0x069ull, 0x070ull, 0x071ull, 0x072ull, 0x073ull, 0x074ull, 0x075ull, 0x076ull, 0x077ull, 0x078ull, 0x079ull, 0x00aull, 0x00bull, 0x02aull, 0x02bull, 0x04aull, 0x04bull, 0x06aull, 0x06bull, 0x04eull, 0x04full, 0x01aull, 0x01bull, 0x03aull, 0x03bull, 0x05aull, 0x05bull, 0x07aull, 0x07bull, 0x05eull, 0x05full, 0x080ull, 0x081ull, 0x082ull, 0x083ull, 0x084ull, 0x085ull, 0x086ull, 0x087ull, 0x088ull, 0x089ull, 0x090ull, 0x091ull, 0x092ull, 0x093ull, 0x094ull, 0x095ull, 0x096ull, 0x097ull, 0x098ull, 0x099ull, 0x0a0ull, 0x0a1ull, 0x0a2ull, 0x0a3ull, 0x0a4ull, 0x0a5ull, 0x0a6ull, 0x0a7ull, 0x0a8ull, 0x0a9ull, 0x0b0ull, 0x0b1ull, 0x0b2ull, 0x0b3ull, 0x0b4ull, 0x0b5ull, 0x0b6ull, 0x0b7ull, 0x0b8ull, 0x0b9ull, 0x0c0ull, 0x0c1ull, 0x0c2ull, 0x0c3ull, 0x0c4ull, 0x0c5ull, 0x0c6ull, 0x0c7ull, 0x0c8ull, 0x0c9ull, 0x0d0ull, 0x0d1ull, 0x0d2ull, 0x0d3ull, 0x0d4ull, 0x0d5ull, 0x0d6ull, 0x0d7ull, 0x0d8ull, 0x0d9ull, 0x0e0ull, 0x0e1ull, 0x0e2ull, 0x0e3ull, 0x0e4ull, 0x0e5ull, 0x0e6ull, 0x0e7ull, 0x0e8ull, 0x0e9ull, 0x0f0ull, 0x0f1ull, 0x0f2ull, 0x0f3ull, 0x0f4ull, 0x0f5ull, 0x0f6ull, 0x0f7ull, 0x0f8ull, 0x0f9ull, 0x08aull, 0x08bull, 0x0aaull, 0x0abull, 0x0caull, 0x0cbull, 0x0eaull, 0x0ebull, 0x0ceull, 0x0cfull, 0x09aull, 0x09bull, 0x0baull, 0x0bbull, 0x0daull, 0x0dbull, 0x0faull, 0x0fbull, 0x0deull, 0x0dfull, 0x100ull, 0x101ull, 0x102ull, 0x103ull, 0x104ull, 0x105ull, 0x106ull, 0x107ull, 0x108ull, 0x109ull, 0x110ull, 0x111ull, 0x112ull, 0x113ull, 0x114ull, 0x115ull, 0x116ull, 0x117ull, 0x118ull, 0x119ull, 0x120ull, 0x121ull, 0x122ull, 0x123ull, 0x124ull, 0x125ull, 0x126ull, 0x127ull, 0x128ull, 0x129ull, 0x130ull, 0x131ull, 0x132ull, 0x133ull, 0x134ull, 0x135ull, 0x136ull, 0x137ull, 0x138ull, 0x139ull, 0x140ull, 0x141ull, 0x142ull, 0x143ull, 0x144ull, 0x145ull, 0x146ull, 0x147ull, 0x148ull, 0x149ull, 0x150ull, 0x151ull, 0x152ull, 0x153ull, 0x154ull, 0x155ull, 0x156ull, 0x157ull, 0x158ull, 0x159ull, 0x160ull, 0x161ull, 0x162ull, 0x163ull, 0x164ull, 0x165ull, 0x166ull, 0x167ull, 0x168ull, 0x169ull, 0x170ull, 0x171ull, 0x172ull, 0x173ull, 0x174ull, 0x175ull, 0x176ull, 0x177ull, 0x178ull, 0x179ull, 0x10aull, 0x10bull, 0x12aull, 0x12bull, 0x14aull, 0x14bull, 0x16aull, 0x16bull, 0x14eull, 0x14full, 0x11aull, 0x11bull, 0x13aull, 0x13bull, 0x15aull, 0x15bull, 0x17aull, 0x17bull, 0x15eull, 0x15full, 0x180ull, 0x181ull, 0x182ull, 0x183ull, 0x184ull, 0x185ull, 0x186ull, 0x187ull, 0x188ull, 0x189ull, 0x190ull, 0x191ull, 0x192ull, 0x193ull, 0x194ull, 0x195ull, 0x196ull, 0x197ull, 0x198ull, 0x199ull, 0x1a0ull, 0x1a1ull, 0x1a2ull, 0x1a3ull, 0x1a4ull, 0x1a5ull, 0x1a6ull, 0x1a7ull, 0x1a8ull, 0x1a9ull, 0x1b0ull, 0x1b1ull, 0x1b2ull, 0x1b3ull, 0x1b4ull, 0x1b5ull, 0x1b6ull, 0x1b7ull, 0x1b8ull, 0x1b9ull, 0x1c0ull, 0x1c1ull, 0x1c2ull, 0x1c3ull, 0x1c4ull, 0x1c5ull, 0x1c6ull, 0x1c7ull, 0x1c8ull, 0x1c9ull, 0x1d0ull, 0x1d1ull, 0x1d2ull, 0x1d3ull, 0x1d4ull, 0x1d5ull, 0x1d6ull, 0x1d7ull, 0x1d8ull, 0x1d9ull, 0x1e0ull, 0x1e1ull, 0x1e2ull, 0x1e3ull, 0x1e4ull, 0x1e5ull, 0x1e6ull, 0x1e7ull, 0x1e8ull, 0x1e9ull, 0x1f0ull, 0x1f1ull, 0x1f2ull, 0x1f3ull, 0x1f4ull, 0x1f5ull, 0x1f6ull, 0x1f7ull, 0x1f8ull, 0x1f9ull, 0x18aull, 0x18bull, 0x1aaull, 0x1abull, 0x1caull, 0x1cbull, 0x1eaull, 0x1ebull, 0x1ceull, 0x1cfull, 0x19aull, 0x19bull, 0x1baull, 0x1bbull, 0x1daull, 0x1dbull, 0x1faull, 0x1fbull, 0x1deull, 0x1dfull, 0x200ull, 0x201ull, 0x202ull, 0x203ull, 0x204ull, 0x205ull, 0x206ull, 0x207ull, 0x208ull, 0x209ull, 0x210ull, 0x211ull, 0x212ull, 0x213ull, 0x214ull, 0x215ull, 0x216ull, 0x217ull, 0x218ull, 0x219ull, 0x220ull, 0x221ull, 0x222ull, 0x223ull, 0x224ull, 0x225ull, 0x226ull, 0x227ull, 0x228ull, 0x229ull, 0x230ull, 0x231ull, 0x232ull, 0x233ull, 0x234ull, 0x235ull, 0x236ull, 0x237ull, 0x238ull, 0x239ull, 0x240ull, 0x241ull, 0x242ull, 0x243ull, 0x244ull, 0x245ull, 0x246ull, 0x247ull, 0x248ull, 0x249ull, 0x250ull, 0x251ull, 0x252ull, 0x253ull, 0x254ull, 0x255ull, 0x256ull, 0x257ull, 0x258ull, 0x259ull, 0x260ull, 0x261ull, 0x262ull, 0x263ull, 0x264ull, 0x265ull, 0x266ull, 0x267ull, 0x268ull, 0x269ull, 0x270ull, 0x271ull, 0x272ull, 0x273ull, 0x274ull, 0x275ull, 0x276ull, 0x277ull, 0x278ull, 0x279ull, 0x20aull, 0x20bull, 0x22aull, 0x22bull, 0x24aull, 0x24bull, 0x26aull, 0x26bull, 0x24eull, 0x24full, 0x21aull, 0x21bull, 0x23aull, 0x23bull, 0x25aull, 0x25bull, 0x27aull, 0x27bull, 0x25eull, 0x25full, 0x280ull, 0x281ull, 0x282ull, 0x283ull, 0x284ull, 0x285ull, 0x286ull, 0x287ull, 0x288ull, 0x289ull, 0x290ull, 0x291ull, 0x292ull, 0x293ull, 0x294ull, 0x295ull, 0x296ull, 0x297ull, 0x298ull, 0x299ull, 0x2a0ull, 0x2a1ull, 0x2a2ull, 0x2a3ull, 0x2a4ull, 0x2a5ull, 0x2a6ull, 0x2a7ull, 0x2a8ull, 0x2a9ull, 0x2b0ull, 0x2b1ull, 0x2b2ull, 0x2b3ull, 0x2b4ull, 0x2b5ull, 0x2b6ull, 0x2b7ull, 0x2b8ull, 0x2b9ull, 0x2c0ull, 0x2c1ull, 0x2c2ull, 0x2c3ull, 0x2c4ull, 0x2c5ull, 0x2c6ull, 0x2c7ull, 0x2c8ull, 0x2c9ull, 0x2d0ull, 0x2d1ull, 0x2d2ull, 0x2d3ull, 0x2d4ull, 0x2d5ull, 0x2d6ull, 0x2d7ull, 0x2d8ull, 0x2d9ull, 0x2e0ull, 0x2e1ull, 0x2e2ull, 0x2e3ull, 0x2e4ull, 0x2e5ull, 0x2e6ull, 0x2e7ull, 0x2e8ull, 0x2e9ull, 0x2f0ull, 0x2f1ull, 0x2f2ull, 0x2f3ull, 0x2f4ull, 0x2f5ull, 0x2f6ull, 0x2f7ull, 0x2f8ull, 0x2f9ull, 0x28aull, 0x28bull, 0x2aaull, 0x2abull, 0x2caull, 0x2cbull, 0x2eaull, 0x2ebull, 0x2ceull, 0x2cfull, 0x29aull, 0x29bull, 0x2baull, 0x2bbull, 0x2daull, 0x2dbull, 0x2faull, 0x2fbull, 0x2deull, 0x2dfull, 0x300ull, 0x301ull, 0x302ull, 0x303ull, 0x304ull, 0x305ull, 0x306ull, 0x307ull, 0x308ull, 0x309ull, 0x310ull, 0x311ull, 0x312ull, 0x313ull, 0x314ull, 0x315ull, 0x316ull, 0x317ull, 0x318ull, 0x319ull, 0x320ull, 0x321ull, 0x322ull, 0x323ull, 0x324ull, 0x325ull, 0x326ull, 0x327ull, 0x328ull, 0x329ull, 0x330ull, 0x331ull, 0x332ull, 0x333ull, 0x334ull, 0x335ull, 0x336ull, 0x337ull, 0x338ull, 0x339ull, 0x340ull, 0x341ull, 0x342ull, 0x343ull, 0x344ull, 0x345ull, 0x346ull, 0x347ull, 0x348ull, 0x349ull, 0x350ull, 0x351ull, 0x352ull, 0x353ull, 0x354ull, 0x355ull, 0x356ull, 0x357ull, 0x358ull, 0x359ull, 0x360ull, 0x361ull, 0x362ull, 0x363ull, 0x364ull, 0x365ull, 0x366ull, 0x367ull, 0x368ull, 0x369ull, 0x370ull, 0x371ull, 0x372ull, 0x373ull, 0x374ull, 0x375ull, 0x376ull, 0x377ull, 0x378ull, 0x379ull, 0x30aull, 0x30bull, 0x32aull, 0x32bull, 0x34aull, 0x34bull, 0x36aull, 0x36bull, 0x34eull, 0x34full, 0x31aull, 0x31bull, 0x33aull, 0x33bull, 0x35aull, 0x35bull, 0x37aull, 0x37bull, 0x35eull, 0x35full, 0x380ull, 0x381ull, 0x382ull, 0x383ull, 0x384ull, 0x385ull, 0x386ull, 0x387ull, 0x388ull, 0x389ull, 0x390ull, 0x391ull, 0x392ull, 0x393ull, 0x394ull, 0x395ull, 0x396ull, 0x397ull, 0x398ull, 0x399ull, 0x3a0ull, 0x3a1ull, 0x3a2ull, 0x3a3ull, 0x3a4ull, 0x3a5ull, 0x3a6ull, 0x3a7ull, 0x3a8ull, 0x3a9ull, 0x3b0ull, 0x3b1ull, 0x3b2ull, 0x3b3ull, 0x3b4ull, 0x3b5ull, 0x3b6ull, 0x3b7ull, 0x3b8ull, 0x3b9ull, 0x3c0ull, 0x3c1ull, 0x3c2ull, 0x3c3ull, 0x3c4ull, 0x3c5ull, 0x3c6ull, 0x3c7ull, 0x3c8ull, 0x3c9ull, 0x3d0ull, 0x3d1ull, 0x3d2ull, 0x3d3ull, 0x3d4ull, 0x3d5ull, 0x3d6ull, 0x3d7ull, 0x3d8ull, 0x3d9ull, 0x3e0ull, 0x3e1ull, 0x3e2ull, 0x3e3ull, 0x3e4ull, 0x3e5ull, 0x3e6ull, 0x3e7ull, 0x3e8ull, 0x3e9ull, 0x3f0ull, 0x3f1ull, 0x3f2ull, 0x3f3ull, 0x3f4ull, 0x3f5ull, 0x3f6ull, 0x3f7ull, 0x3f8ull, 0x3f9ull, 0x38aull, 0x38bull, 0x3aaull, 0x3abull, 0x3caull, 0x3cbull, 0x3eaull, 0x3ebull, 0x3ceull, 0x3cfull, 0x39aull, 0x39bull, 0x3baull, 0x3bbull, 0x3daull, 0x3dbull, 0x3faull, 0x3fbull, 0x3deull, 0x3dfull, 0x00cull, 0x00dull, 0x10cull, 0x10dull, 0x20cull, 0x20dull, 0x30cull, 0x30dull, 0x02eull, 0x02full, 0x01cull, 0x01dull, 0x11cull, 0x11dull, 0x21cull, 0x21dull, 0x31cull, 0x31dull, 0x03eull, 0x03full, 0x02cull, 0x02dull, 0x12cull, 0x12dull, 0x22cull, 0x22dull, 0x32cull, 0x32dull, 0x12eull, 0x12full, 0x03cull, 0x03dull, 0x13cull, 0x13dull, 0x23cull, 0x23dull, 0x33cull, 0x33dull, 0x13eull, 0x13full, 0x04cull, 0x04dull, 0x14cull, 0x14dull, 0x24cull, 0x24dull, 0x34cull, 0x34dull, 0x22eull, 0x22full, 0x05cull, 0x05dull, 0x15cull, 0x15dull, 0x25cull, 0x25dull, 0x35cull, 0x35dull, 0x23eull, 0x23full, 0x06cull, 0x06dull, 0x16cull, 0x16dull, 0x26cull, 0x26dull, 0x36cull, 0x36dull, 0x32eull, 0x32full, 0x07cull, 0x07dull, 0x17cull, 0x17dull, 0x27cull, 0x27dull, 0x37cull, 0x37dull, 0x33eull, 0x33full, 0x00eull, 0x00full, 0x10eull, 0x10full, 0x20eull, 0x20full, 0x30eull, 0x30full, 0x06eull, 0x06full, 0x01eull, 0x01full, 0x11eull, 0x11full, 0x21eull, 0x21full, 0x31eull, 0x31full, 0x07eull, 0x07full, 0x08cull, 0x08dull, 0x18cull, 0x18dull, 0x28cull, 0x28dull, 0x38cull, 0x38dull, 0x0aeull, 0x0afull, 0x09cull, 0x09dull, 0x19cull, 0x19dull, 0x29cull, 0x29dull, 0x39cull, 0x39dull, 0x0beull, 0x0bfull, 0x0acull, 0x0adull, 0x1acull, 0x1adull, 0x2acull, 0x2adull, 0x3acull, 0x3adull, 0x1aeull, 0x1afull, 0x0bcull, 0x0bdull, 0x1bcull, 0x1bdull, 0x2bcull, 0x2bdull, 0x3bcull, 0x3bdull, 0x1beull, 0x1bfull, 0x0ccull, 0x0cdull, 0x1ccull, 0x1cdull, 0x2ccull, 0x2cdull, 0x3ccull, 0x3cdull, 0x2aeull, 0x2afull, 0x0dcull, 0x0ddull, 0x1dcull, 0x1ddull, 0x2dcull, 0x2ddull, 0x3dcull, 0x3ddull, 0x2beull, 0x2bfull, 0x0ecull, 0x0edull, 0x1ecull, 0x1edull, 0x2ecull, 0x2edull, 0x3ecull, 0x3edull, 0x3aeull, 0x3afull, 0x0fcull, 0x0fdull, 0x1fcull, 0x1fdull, 0x2fcull, 0x2fdull, 0x3fcull, 0x3fdull, 0x3beull, 0x3bfull, 0x08eull, 0x08full, 0x18eull, 0x18full, 0x28eull, 0x28full, 0x38eull, 0x38full, 0x0eeull, 0x0efull, 0x09eull, 0x09full, 0x19eull, 0x19full, 0x29eull, 0x29full, 0x39eull, 0x39full, 0x0feull, 0x0ffull }; static const UINT64 b2d2[] = { 0x000ull << 10, 0x001ull << 10, 0x002ull << 10, 0x003ull << 10, 0x004ull << 10, 0x005ull << 10, 0x006ull << 10, 0x007ull << 10, 0x008ull << 10, 0x009ull << 10, 0x010ull << 10, 0x011ull << 10, 0x012ull << 10, 0x013ull << 10, 0x014ull << 10, 0x015ull << 10, 0x016ull << 10, 0x017ull << 10, 0x018ull << 10, 0x019ull << 10, 0x020ull << 10, 0x021ull << 10, 0x022ull << 10, 0x023ull << 10, 0x024ull << 10, 0x025ull << 10, 0x026ull << 10, 0x027ull << 10, 0x028ull << 10, 0x029ull << 10, 0x030ull << 10, 0x031ull << 10, 0x032ull << 10, 0x033ull << 10, 0x034ull << 10, 0x035ull << 10, 0x036ull << 10, 0x037ull << 10, 0x038ull << 10, 0x039ull << 10, 0x040ull << 10, 0x041ull << 10, 0x042ull << 10, 0x043ull << 10, 0x044ull << 10, 0x045ull << 10, 0x046ull << 10, 0x047ull << 10, 0x048ull << 10, 0x049ull << 10, 0x050ull << 10, 0x051ull << 10, 0x052ull << 10, 0x053ull << 10, 0x054ull << 10, 0x055ull << 10, 0x056ull << 10, 0x057ull << 10, 0x058ull << 10, 0x059ull << 10, 0x060ull << 10, 0x061ull << 10, 0x062ull << 10, 0x063ull << 10, 0x064ull << 10, 0x065ull << 10, 0x066ull << 10, 0x067ull << 10, 0x068ull << 10, 0x069ull << 10, 0x070ull << 10, 0x071ull << 10, 0x072ull << 10, 0x073ull << 10, 0x074ull << 10, 0x075ull << 10, 0x076ull << 10, 0x077ull << 10, 0x078ull << 10, 0x079ull << 10, 0x00aull << 10, 0x00bull << 10, 0x02aull << 10, 0x02bull << 10, 0x04aull << 10, 0x04bull << 10, 0x06aull << 10, 0x06bull << 10, 0x04eull << 10, 0x04full << 10, 0x01aull << 10, 0x01bull << 10, 0x03aull << 10, 0x03bull << 10, 0x05aull << 10, 0x05bull << 10, 0x07aull << 10, 0x07bull << 10, 0x05eull << 10, 0x05full << 10, 0x080ull << 10, 0x081ull << 10, 0x082ull << 10, 0x083ull << 10, 0x084ull << 10, 0x085ull << 10, 0x086ull << 10, 0x087ull << 10, 0x088ull << 10, 0x089ull << 10, 0x090ull << 10, 0x091ull << 10, 0x092ull << 10, 0x093ull << 10, 0x094ull << 10, 0x095ull << 10, 0x096ull << 10, 0x097ull << 10, 0x098ull << 10, 0x099ull << 10, 0x0a0ull << 10, 0x0a1ull << 10, 0x0a2ull << 10, 0x0a3ull << 10, 0x0a4ull << 10, 0x0a5ull << 10, 0x0a6ull << 10, 0x0a7ull << 10, 0x0a8ull << 10, 0x0a9ull << 10, 0x0b0ull << 10, 0x0b1ull << 10, 0x0b2ull << 10, 0x0b3ull << 10, 0x0b4ull << 10, 0x0b5ull << 10, 0x0b6ull << 10, 0x0b7ull << 10, 0x0b8ull << 10, 0x0b9ull << 10, 0x0c0ull << 10, 0x0c1ull << 10, 0x0c2ull << 10, 0x0c3ull << 10, 0x0c4ull << 10, 0x0c5ull << 10, 0x0c6ull << 10, 0x0c7ull << 10, 0x0c8ull << 10, 0x0c9ull << 10, 0x0d0ull << 10, 0x0d1ull << 10, 0x0d2ull << 10, 0x0d3ull << 10, 0x0d4ull << 10, 0x0d5ull << 10, 0x0d6ull << 10, 0x0d7ull << 10, 0x0d8ull << 10, 0x0d9ull << 10, 0x0e0ull << 10, 0x0e1ull << 10, 0x0e2ull << 10, 0x0e3ull << 10, 0x0e4ull << 10, 0x0e5ull << 10, 0x0e6ull << 10, 0x0e7ull << 10, 0x0e8ull << 10, 0x0e9ull << 10, 0x0f0ull << 10, 0x0f1ull << 10, 0x0f2ull << 10, 0x0f3ull << 10, 0x0f4ull << 10, 0x0f5ull << 10, 0x0f6ull << 10, 0x0f7ull << 10, 0x0f8ull << 10, 0x0f9ull << 10, 0x08aull << 10, 0x08bull << 10, 0x0aaull << 10, 0x0abull << 10, 0x0caull << 10, 0x0cbull << 10, 0x0eaull << 10, 0x0ebull << 10, 0x0ceull << 10, 0x0cfull << 10, 0x09aull << 10, 0x09bull << 10, 0x0baull << 10, 0x0bbull << 10, 0x0daull << 10, 0x0dbull << 10, 0x0faull << 10, 0x0fbull << 10, 0x0deull << 10, 0x0dfull << 10, 0x100ull << 10, 0x101ull << 10, 0x102ull << 10, 0x103ull << 10, 0x104ull << 10, 0x105ull << 10, 0x106ull << 10, 0x107ull << 10, 0x108ull << 10, 0x109ull << 10, 0x110ull << 10, 0x111ull << 10, 0x112ull << 10, 0x113ull << 10, 0x114ull << 10, 0x115ull << 10, 0x116ull << 10, 0x117ull << 10, 0x118ull << 10, 0x119ull << 10, 0x120ull << 10, 0x121ull << 10, 0x122ull << 10, 0x123ull << 10, 0x124ull << 10, 0x125ull << 10, 0x126ull << 10, 0x127ull << 10, 0x128ull << 10, 0x129ull << 10, 0x130ull << 10, 0x131ull << 10, 0x132ull << 10, 0x133ull << 10, 0x134ull << 10, 0x135ull << 10, 0x136ull << 10, 0x137ull << 10, 0x138ull << 10, 0x139ull << 10, 0x140ull << 10, 0x141ull << 10, 0x142ull << 10, 0x143ull << 10, 0x144ull << 10, 0x145ull << 10, 0x146ull << 10, 0x147ull << 10, 0x148ull << 10, 0x149ull << 10, 0x150ull << 10, 0x151ull << 10, 0x152ull << 10, 0x153ull << 10, 0x154ull << 10, 0x155ull << 10, 0x156ull << 10, 0x157ull << 10, 0x158ull << 10, 0x159ull << 10, 0x160ull << 10, 0x161ull << 10, 0x162ull << 10, 0x163ull << 10, 0x164ull << 10, 0x165ull << 10, 0x166ull << 10, 0x167ull << 10, 0x168ull << 10, 0x169ull << 10, 0x170ull << 10, 0x171ull << 10, 0x172ull << 10, 0x173ull << 10, 0x174ull << 10, 0x175ull << 10, 0x176ull << 10, 0x177ull << 10, 0x178ull << 10, 0x179ull << 10, 0x10aull << 10, 0x10bull << 10, 0x12aull << 10, 0x12bull << 10, 0x14aull << 10, 0x14bull << 10, 0x16aull << 10, 0x16bull << 10, 0x14eull << 10, 0x14full << 10, 0x11aull << 10, 0x11bull << 10, 0x13aull << 10, 0x13bull << 10, 0x15aull << 10, 0x15bull << 10, 0x17aull << 10, 0x17bull << 10, 0x15eull << 10, 0x15full << 10, 0x180ull << 10, 0x181ull << 10, 0x182ull << 10, 0x183ull << 10, 0x184ull << 10, 0x185ull << 10, 0x186ull << 10, 0x187ull << 10, 0x188ull << 10, 0x189ull << 10, 0x190ull << 10, 0x191ull << 10, 0x192ull << 10, 0x193ull << 10, 0x194ull << 10, 0x195ull << 10, 0x196ull << 10, 0x197ull << 10, 0x198ull << 10, 0x199ull << 10, 0x1a0ull << 10, 0x1a1ull << 10, 0x1a2ull << 10, 0x1a3ull << 10, 0x1a4ull << 10, 0x1a5ull << 10, 0x1a6ull << 10, 0x1a7ull << 10, 0x1a8ull << 10, 0x1a9ull << 10, 0x1b0ull << 10, 0x1b1ull << 10, 0x1b2ull << 10, 0x1b3ull << 10, 0x1b4ull << 10, 0x1b5ull << 10, 0x1b6ull << 10, 0x1b7ull << 10, 0x1b8ull << 10, 0x1b9ull << 10, 0x1c0ull << 10, 0x1c1ull << 10, 0x1c2ull << 10, 0x1c3ull << 10, 0x1c4ull << 10, 0x1c5ull << 10, 0x1c6ull << 10, 0x1c7ull << 10, 0x1c8ull << 10, 0x1c9ull << 10, 0x1d0ull << 10, 0x1d1ull << 10, 0x1d2ull << 10, 0x1d3ull << 10, 0x1d4ull << 10, 0x1d5ull << 10, 0x1d6ull << 10, 0x1d7ull << 10, 0x1d8ull << 10, 0x1d9ull << 10, 0x1e0ull << 10, 0x1e1ull << 10, 0x1e2ull << 10, 0x1e3ull << 10, 0x1e4ull << 10, 0x1e5ull << 10, 0x1e6ull << 10, 0x1e7ull << 10, 0x1e8ull << 10, 0x1e9ull << 10, 0x1f0ull << 10, 0x1f1ull << 10, 0x1f2ull << 10, 0x1f3ull << 10, 0x1f4ull << 10, 0x1f5ull << 10, 0x1f6ull << 10, 0x1f7ull << 10, 0x1f8ull << 10, 0x1f9ull << 10, 0x18aull << 10, 0x18bull << 10, 0x1aaull << 10, 0x1abull << 10, 0x1caull << 10, 0x1cbull << 10, 0x1eaull << 10, 0x1ebull << 10, 0x1ceull << 10, 0x1cfull << 10, 0x19aull << 10, 0x19bull << 10, 0x1baull << 10, 0x1bbull << 10, 0x1daull << 10, 0x1dbull << 10, 0x1faull << 10, 0x1fbull << 10, 0x1deull << 10, 0x1dfull << 10, 0x200ull << 10, 0x201ull << 10, 0x202ull << 10, 0x203ull << 10, 0x204ull << 10, 0x205ull << 10, 0x206ull << 10, 0x207ull << 10, 0x208ull << 10, 0x209ull << 10, 0x210ull << 10, 0x211ull << 10, 0x212ull << 10, 0x213ull << 10, 0x214ull << 10, 0x215ull << 10, 0x216ull << 10, 0x217ull << 10, 0x218ull << 10, 0x219ull << 10, 0x220ull << 10, 0x221ull << 10, 0x222ull << 10, 0x223ull << 10, 0x224ull << 10, 0x225ull << 10, 0x226ull << 10, 0x227ull << 10, 0x228ull << 10, 0x229ull << 10, 0x230ull << 10, 0x231ull << 10, 0x232ull << 10, 0x233ull << 10, 0x234ull << 10, 0x235ull << 10, 0x236ull << 10, 0x237ull << 10, 0x238ull << 10, 0x239ull << 10, 0x240ull << 10, 0x241ull << 10, 0x242ull << 10, 0x243ull << 10, 0x244ull << 10, 0x245ull << 10, 0x246ull << 10, 0x247ull << 10, 0x248ull << 10, 0x249ull << 10, 0x250ull << 10, 0x251ull << 10, 0x252ull << 10, 0x253ull << 10, 0x254ull << 10, 0x255ull << 10, 0x256ull << 10, 0x257ull << 10, 0x258ull << 10, 0x259ull << 10, 0x260ull << 10, 0x261ull << 10, 0x262ull << 10, 0x263ull << 10, 0x264ull << 10, 0x265ull << 10, 0x266ull << 10, 0x267ull << 10, 0x268ull << 10, 0x269ull << 10, 0x270ull << 10, 0x271ull << 10, 0x272ull << 10, 0x273ull << 10, 0x274ull << 10, 0x275ull << 10, 0x276ull << 10, 0x277ull << 10, 0x278ull << 10, 0x279ull << 10, 0x20aull << 10, 0x20bull << 10, 0x22aull << 10, 0x22bull << 10, 0x24aull << 10, 0x24bull << 10, 0x26aull << 10, 0x26bull << 10, 0x24eull << 10, 0x24full << 10, 0x21aull << 10, 0x21bull << 10, 0x23aull << 10, 0x23bull << 10, 0x25aull << 10, 0x25bull << 10, 0x27aull << 10, 0x27bull << 10, 0x25eull << 10, 0x25full << 10, 0x280ull << 10, 0x281ull << 10, 0x282ull << 10, 0x283ull << 10, 0x284ull << 10, 0x285ull << 10, 0x286ull << 10, 0x287ull << 10, 0x288ull << 10, 0x289ull << 10, 0x290ull << 10, 0x291ull << 10, 0x292ull << 10, 0x293ull << 10, 0x294ull << 10, 0x295ull << 10, 0x296ull << 10, 0x297ull << 10, 0x298ull << 10, 0x299ull << 10, 0x2a0ull << 10, 0x2a1ull << 10, 0x2a2ull << 10, 0x2a3ull << 10, 0x2a4ull << 10, 0x2a5ull << 10, 0x2a6ull << 10, 0x2a7ull << 10, 0x2a8ull << 10, 0x2a9ull << 10, 0x2b0ull << 10, 0x2b1ull << 10, 0x2b2ull << 10, 0x2b3ull << 10, 0x2b4ull << 10, 0x2b5ull << 10, 0x2b6ull << 10, 0x2b7ull << 10, 0x2b8ull << 10, 0x2b9ull << 10, 0x2c0ull << 10, 0x2c1ull << 10, 0x2c2ull << 10, 0x2c3ull << 10, 0x2c4ull << 10, 0x2c5ull << 10, 0x2c6ull << 10, 0x2c7ull << 10, 0x2c8ull << 10, 0x2c9ull << 10, 0x2d0ull << 10, 0x2d1ull << 10, 0x2d2ull << 10, 0x2d3ull << 10, 0x2d4ull << 10, 0x2d5ull << 10, 0x2d6ull << 10, 0x2d7ull << 10, 0x2d8ull << 10, 0x2d9ull << 10, 0x2e0ull << 10, 0x2e1ull << 10, 0x2e2ull << 10, 0x2e3ull << 10, 0x2e4ull << 10, 0x2e5ull << 10, 0x2e6ull << 10, 0x2e7ull << 10, 0x2e8ull << 10, 0x2e9ull << 10, 0x2f0ull << 10, 0x2f1ull << 10, 0x2f2ull << 10, 0x2f3ull << 10, 0x2f4ull << 10, 0x2f5ull << 10, 0x2f6ull << 10, 0x2f7ull << 10, 0x2f8ull << 10, 0x2f9ull << 10, 0x28aull << 10, 0x28bull << 10, 0x2aaull << 10, 0x2abull << 10, 0x2caull << 10, 0x2cbull << 10, 0x2eaull << 10, 0x2ebull << 10, 0x2ceull << 10, 0x2cfull << 10, 0x29aull << 10, 0x29bull << 10, 0x2baull << 10, 0x2bbull << 10, 0x2daull << 10, 0x2dbull << 10, 0x2faull << 10, 0x2fbull << 10, 0x2deull << 10, 0x2dfull << 10, 0x300ull << 10, 0x301ull << 10, 0x302ull << 10, 0x303ull << 10, 0x304ull << 10, 0x305ull << 10, 0x306ull << 10, 0x307ull << 10, 0x308ull << 10, 0x309ull << 10, 0x310ull << 10, 0x311ull << 10, 0x312ull << 10, 0x313ull << 10, 0x314ull << 10, 0x315ull << 10, 0x316ull << 10, 0x317ull << 10, 0x318ull << 10, 0x319ull << 10, 0x320ull << 10, 0x321ull << 10, 0x322ull << 10, 0x323ull << 10, 0x324ull << 10, 0x325ull << 10, 0x326ull << 10, 0x327ull << 10, 0x328ull << 10, 0x329ull << 10, 0x330ull << 10, 0x331ull << 10, 0x332ull << 10, 0x333ull << 10, 0x334ull << 10, 0x335ull << 10, 0x336ull << 10, 0x337ull << 10, 0x338ull << 10, 0x339ull << 10, 0x340ull << 10, 0x341ull << 10, 0x342ull << 10, 0x343ull << 10, 0x344ull << 10, 0x345ull << 10, 0x346ull << 10, 0x347ull << 10, 0x348ull << 10, 0x349ull << 10, 0x350ull << 10, 0x351ull << 10, 0x352ull << 10, 0x353ull << 10, 0x354ull << 10, 0x355ull << 10, 0x356ull << 10, 0x357ull << 10, 0x358ull << 10, 0x359ull << 10, 0x360ull << 10, 0x361ull << 10, 0x362ull << 10, 0x363ull << 10, 0x364ull << 10, 0x365ull << 10, 0x366ull << 10, 0x367ull << 10, 0x368ull << 10, 0x369ull << 10, 0x370ull << 10, 0x371ull << 10, 0x372ull << 10, 0x373ull << 10, 0x374ull << 10, 0x375ull << 10, 0x376ull << 10, 0x377ull << 10, 0x378ull << 10, 0x379ull << 10, 0x30aull << 10, 0x30bull << 10, 0x32aull << 10, 0x32bull << 10, 0x34aull << 10, 0x34bull << 10, 0x36aull << 10, 0x36bull << 10, 0x34eull << 10, 0x34full << 10, 0x31aull << 10, 0x31bull << 10, 0x33aull << 10, 0x33bull << 10, 0x35aull << 10, 0x35bull << 10, 0x37aull << 10, 0x37bull << 10, 0x35eull << 10, 0x35full << 10, 0x380ull << 10, 0x381ull << 10, 0x382ull << 10, 0x383ull << 10, 0x384ull << 10, 0x385ull << 10, 0x386ull << 10, 0x387ull << 10, 0x388ull << 10, 0x389ull << 10, 0x390ull << 10, 0x391ull << 10, 0x392ull << 10, 0x393ull << 10, 0x394ull << 10, 0x395ull << 10, 0x396ull << 10, 0x397ull << 10, 0x398ull << 10, 0x399ull << 10, 0x3a0ull << 10, 0x3a1ull << 10, 0x3a2ull << 10, 0x3a3ull << 10, 0x3a4ull << 10, 0x3a5ull << 10, 0x3a6ull << 10, 0x3a7ull << 10, 0x3a8ull << 10, 0x3a9ull << 10, 0x3b0ull << 10, 0x3b1ull << 10, 0x3b2ull << 10, 0x3b3ull << 10, 0x3b4ull << 10, 0x3b5ull << 10, 0x3b6ull << 10, 0x3b7ull << 10, 0x3b8ull << 10, 0x3b9ull << 10, 0x3c0ull << 10, 0x3c1ull << 10, 0x3c2ull << 10, 0x3c3ull << 10, 0x3c4ull << 10, 0x3c5ull << 10, 0x3c6ull << 10, 0x3c7ull << 10, 0x3c8ull << 10, 0x3c9ull << 10, 0x3d0ull << 10, 0x3d1ull << 10, 0x3d2ull << 10, 0x3d3ull << 10, 0x3d4ull << 10, 0x3d5ull << 10, 0x3d6ull << 10, 0x3d7ull << 10, 0x3d8ull << 10, 0x3d9ull << 10, 0x3e0ull << 10, 0x3e1ull << 10, 0x3e2ull << 10, 0x3e3ull << 10, 0x3e4ull << 10, 0x3e5ull << 10, 0x3e6ull << 10, 0x3e7ull << 10, 0x3e8ull << 10, 0x3e9ull << 10, 0x3f0ull << 10, 0x3f1ull << 10, 0x3f2ull << 10, 0x3f3ull << 10, 0x3f4ull << 10, 0x3f5ull << 10, 0x3f6ull << 10, 0x3f7ull << 10, 0x3f8ull << 10, 0x3f9ull << 10, 0x38aull << 10, 0x38bull << 10, 0x3aaull << 10, 0x3abull << 10, 0x3caull << 10, 0x3cbull << 10, 0x3eaull << 10, 0x3ebull << 10, 0x3ceull << 10, 0x3cfull << 10, 0x39aull << 10, 0x39bull << 10, 0x3baull << 10, 0x3bbull << 10, 0x3daull << 10, 0x3dbull << 10, 0x3faull << 10, 0x3fbull << 10, 0x3deull << 10, 0x3dfull << 10, 0x00cull << 10, 0x00dull << 10, 0x10cull << 10, 0x10dull << 10, 0x20cull << 10, 0x20dull << 10, 0x30cull << 10, 0x30dull << 10, 0x02eull << 10, 0x02full << 10, 0x01cull << 10, 0x01dull << 10, 0x11cull << 10, 0x11dull << 10, 0x21cull << 10, 0x21dull << 10, 0x31cull << 10, 0x31dull << 10, 0x03eull << 10, 0x03full << 10, 0x02cull << 10, 0x02dull << 10, 0x12cull << 10, 0x12dull << 10, 0x22cull << 10, 0x22dull << 10, 0x32cull << 10, 0x32dull << 10, 0x12eull << 10, 0x12full << 10, 0x03cull << 10, 0x03dull << 10, 0x13cull << 10, 0x13dull << 10, 0x23cull << 10, 0x23dull << 10, 0x33cull << 10, 0x33dull << 10, 0x13eull << 10, 0x13full << 10, 0x04cull << 10, 0x04dull << 10, 0x14cull << 10, 0x14dull << 10, 0x24cull << 10, 0x24dull << 10, 0x34cull << 10, 0x34dull << 10, 0x22eull << 10, 0x22full << 10, 0x05cull << 10, 0x05dull << 10, 0x15cull << 10, 0x15dull << 10, 0x25cull << 10, 0x25dull << 10, 0x35cull << 10, 0x35dull << 10, 0x23eull << 10, 0x23full << 10, 0x06cull << 10, 0x06dull << 10, 0x16cull << 10, 0x16dull << 10, 0x26cull << 10, 0x26dull << 10, 0x36cull << 10, 0x36dull << 10, 0x32eull << 10, 0x32full << 10, 0x07cull << 10, 0x07dull << 10, 0x17cull << 10, 0x17dull << 10, 0x27cull << 10, 0x27dull << 10, 0x37cull << 10, 0x37dull << 10, 0x33eull << 10, 0x33full << 10, 0x00eull << 10, 0x00full << 10, 0x10eull << 10, 0x10full << 10, 0x20eull << 10, 0x20full << 10, 0x30eull << 10, 0x30full << 10, 0x06eull << 10, 0x06full << 10, 0x01eull << 10, 0x01full << 10, 0x11eull << 10, 0x11full << 10, 0x21eull << 10, 0x21full << 10, 0x31eull << 10, 0x31full << 10, 0x07eull << 10, 0x07full << 10, 0x08cull << 10, 0x08dull << 10, 0x18cull << 10, 0x18dull << 10, 0x28cull << 10, 0x28dull << 10, 0x38cull << 10, 0x38dull << 10, 0x0aeull << 10, 0x0afull << 10, 0x09cull << 10, 0x09dull << 10, 0x19cull << 10, 0x19dull << 10, 0x29cull << 10, 0x29dull << 10, 0x39cull << 10, 0x39dull << 10, 0x0beull << 10, 0x0bfull << 10, 0x0acull << 10, 0x0adull << 10, 0x1acull << 10, 0x1adull << 10, 0x2acull << 10, 0x2adull << 10, 0x3acull << 10, 0x3adull << 10, 0x1aeull << 10, 0x1afull << 10, 0x0bcull << 10, 0x0bdull << 10, 0x1bcull << 10, 0x1bdull << 10, 0x2bcull << 10, 0x2bdull << 10, 0x3bcull << 10, 0x3bdull << 10, 0x1beull << 10, 0x1bfull << 10, 0x0ccull << 10, 0x0cdull << 10, 0x1ccull << 10, 0x1cdull << 10, 0x2ccull << 10, 0x2cdull << 10, 0x3ccull << 10, 0x3cdull << 10, 0x2aeull << 10, 0x2afull << 10, 0x0dcull << 10, 0x0ddull << 10, 0x1dcull << 10, 0x1ddull << 10, 0x2dcull << 10, 0x2ddull << 10, 0x3dcull << 10, 0x3ddull << 10, 0x2beull << 10, 0x2bfull << 10, 0x0ecull << 10, 0x0edull << 10, 0x1ecull << 10, 0x1edull << 10, 0x2ecull << 10, 0x2edull << 10, 0x3ecull << 10, 0x3edull << 10, 0x3aeull << 10, 0x3afull << 10, 0x0fcull << 10, 0x0fdull << 10, 0x1fcull << 10, 0x1fdull << 10, 0x2fcull << 10, 0x2fdull << 10, 0x3fcull << 10, 0x3fdull << 10, 0x3beull << 10, 0x3bfull << 10, 0x08eull << 10, 0x08full << 10, 0x18eull << 10, 0x18full << 10, 0x28eull << 10, 0x28full << 10, 0x38eull << 10, 0x38full << 10, 0x0eeull << 10, 0x0efull << 10, 0x09eull << 10, 0x09full << 10, 0x19eull << 10, 0x19full << 10, 0x29eull << 10, 0x29full << 10, 0x39eull << 10, 0x39full << 10, 0x0feull << 10, 0x0ffull << 10 }; static const UINT64 b2d3[] = { 0x000ull << 20, 0x001ull << 20, 0x002ull << 20, 0x003ull << 20, 0x004ull << 20, 0x005ull << 20, 0x006ull << 20, 0x007ull << 20, 0x008ull << 20, 0x009ull << 20, 0x010ull << 20, 0x011ull << 20, 0x012ull << 20, 0x013ull << 20, 0x014ull << 20, 0x015ull << 20, 0x016ull << 20, 0x017ull << 20, 0x018ull << 20, 0x019ull << 20, 0x020ull << 20, 0x021ull << 20, 0x022ull << 20, 0x023ull << 20, 0x024ull << 20, 0x025ull << 20, 0x026ull << 20, 0x027ull << 20, 0x028ull << 20, 0x029ull << 20, 0x030ull << 20, 0x031ull << 20, 0x032ull << 20, 0x033ull << 20, 0x034ull << 20, 0x035ull << 20, 0x036ull << 20, 0x037ull << 20, 0x038ull << 20, 0x039ull << 20, 0x040ull << 20, 0x041ull << 20, 0x042ull << 20, 0x043ull << 20, 0x044ull << 20, 0x045ull << 20, 0x046ull << 20, 0x047ull << 20, 0x048ull << 20, 0x049ull << 20, 0x050ull << 20, 0x051ull << 20, 0x052ull << 20, 0x053ull << 20, 0x054ull << 20, 0x055ull << 20, 0x056ull << 20, 0x057ull << 20, 0x058ull << 20, 0x059ull << 20, 0x060ull << 20, 0x061ull << 20, 0x062ull << 20, 0x063ull << 20, 0x064ull << 20, 0x065ull << 20, 0x066ull << 20, 0x067ull << 20, 0x068ull << 20, 0x069ull << 20, 0x070ull << 20, 0x071ull << 20, 0x072ull << 20, 0x073ull << 20, 0x074ull << 20, 0x075ull << 20, 0x076ull << 20, 0x077ull << 20, 0x078ull << 20, 0x079ull << 20, 0x00aull << 20, 0x00bull << 20, 0x02aull << 20, 0x02bull << 20, 0x04aull << 20, 0x04bull << 20, 0x06aull << 20, 0x06bull << 20, 0x04eull << 20, 0x04full << 20, 0x01aull << 20, 0x01bull << 20, 0x03aull << 20, 0x03bull << 20, 0x05aull << 20, 0x05bull << 20, 0x07aull << 20, 0x07bull << 20, 0x05eull << 20, 0x05full << 20, 0x080ull << 20, 0x081ull << 20, 0x082ull << 20, 0x083ull << 20, 0x084ull << 20, 0x085ull << 20, 0x086ull << 20, 0x087ull << 20, 0x088ull << 20, 0x089ull << 20, 0x090ull << 20, 0x091ull << 20, 0x092ull << 20, 0x093ull << 20, 0x094ull << 20, 0x095ull << 20, 0x096ull << 20, 0x097ull << 20, 0x098ull << 20, 0x099ull << 20, 0x0a0ull << 20, 0x0a1ull << 20, 0x0a2ull << 20, 0x0a3ull << 20, 0x0a4ull << 20, 0x0a5ull << 20, 0x0a6ull << 20, 0x0a7ull << 20, 0x0a8ull << 20, 0x0a9ull << 20, 0x0b0ull << 20, 0x0b1ull << 20, 0x0b2ull << 20, 0x0b3ull << 20, 0x0b4ull << 20, 0x0b5ull << 20, 0x0b6ull << 20, 0x0b7ull << 20, 0x0b8ull << 20, 0x0b9ull << 20, 0x0c0ull << 20, 0x0c1ull << 20, 0x0c2ull << 20, 0x0c3ull << 20, 0x0c4ull << 20, 0x0c5ull << 20, 0x0c6ull << 20, 0x0c7ull << 20, 0x0c8ull << 20, 0x0c9ull << 20, 0x0d0ull << 20, 0x0d1ull << 20, 0x0d2ull << 20, 0x0d3ull << 20, 0x0d4ull << 20, 0x0d5ull << 20, 0x0d6ull << 20, 0x0d7ull << 20, 0x0d8ull << 20, 0x0d9ull << 20, 0x0e0ull << 20, 0x0e1ull << 20, 0x0e2ull << 20, 0x0e3ull << 20, 0x0e4ull << 20, 0x0e5ull << 20, 0x0e6ull << 20, 0x0e7ull << 20, 0x0e8ull << 20, 0x0e9ull << 20, 0x0f0ull << 20, 0x0f1ull << 20, 0x0f2ull << 20, 0x0f3ull << 20, 0x0f4ull << 20, 0x0f5ull << 20, 0x0f6ull << 20, 0x0f7ull << 20, 0x0f8ull << 20, 0x0f9ull << 20, 0x08aull << 20, 0x08bull << 20, 0x0aaull << 20, 0x0abull << 20, 0x0caull << 20, 0x0cbull << 20, 0x0eaull << 20, 0x0ebull << 20, 0x0ceull << 20, 0x0cfull << 20, 0x09aull << 20, 0x09bull << 20, 0x0baull << 20, 0x0bbull << 20, 0x0daull << 20, 0x0dbull << 20, 0x0faull << 20, 0x0fbull << 20, 0x0deull << 20, 0x0dfull << 20, 0x100ull << 20, 0x101ull << 20, 0x102ull << 20, 0x103ull << 20, 0x104ull << 20, 0x105ull << 20, 0x106ull << 20, 0x107ull << 20, 0x108ull << 20, 0x109ull << 20, 0x110ull << 20, 0x111ull << 20, 0x112ull << 20, 0x113ull << 20, 0x114ull << 20, 0x115ull << 20, 0x116ull << 20, 0x117ull << 20, 0x118ull << 20, 0x119ull << 20, 0x120ull << 20, 0x121ull << 20, 0x122ull << 20, 0x123ull << 20, 0x124ull << 20, 0x125ull << 20, 0x126ull << 20, 0x127ull << 20, 0x128ull << 20, 0x129ull << 20, 0x130ull << 20, 0x131ull << 20, 0x132ull << 20, 0x133ull << 20, 0x134ull << 20, 0x135ull << 20, 0x136ull << 20, 0x137ull << 20, 0x138ull << 20, 0x139ull << 20, 0x140ull << 20, 0x141ull << 20, 0x142ull << 20, 0x143ull << 20, 0x144ull << 20, 0x145ull << 20, 0x146ull << 20, 0x147ull << 20, 0x148ull << 20, 0x149ull << 20, 0x150ull << 20, 0x151ull << 20, 0x152ull << 20, 0x153ull << 20, 0x154ull << 20, 0x155ull << 20, 0x156ull << 20, 0x157ull << 20, 0x158ull << 20, 0x159ull << 20, 0x160ull << 20, 0x161ull << 20, 0x162ull << 20, 0x163ull << 20, 0x164ull << 20, 0x165ull << 20, 0x166ull << 20, 0x167ull << 20, 0x168ull << 20, 0x169ull << 20, 0x170ull << 20, 0x171ull << 20, 0x172ull << 20, 0x173ull << 20, 0x174ull << 20, 0x175ull << 20, 0x176ull << 20, 0x177ull << 20, 0x178ull << 20, 0x179ull << 20, 0x10aull << 20, 0x10bull << 20, 0x12aull << 20, 0x12bull << 20, 0x14aull << 20, 0x14bull << 20, 0x16aull << 20, 0x16bull << 20, 0x14eull << 20, 0x14full << 20, 0x11aull << 20, 0x11bull << 20, 0x13aull << 20, 0x13bull << 20, 0x15aull << 20, 0x15bull << 20, 0x17aull << 20, 0x17bull << 20, 0x15eull << 20, 0x15full << 20, 0x180ull << 20, 0x181ull << 20, 0x182ull << 20, 0x183ull << 20, 0x184ull << 20, 0x185ull << 20, 0x186ull << 20, 0x187ull << 20, 0x188ull << 20, 0x189ull << 20, 0x190ull << 20, 0x191ull << 20, 0x192ull << 20, 0x193ull << 20, 0x194ull << 20, 0x195ull << 20, 0x196ull << 20, 0x197ull << 20, 0x198ull << 20, 0x199ull << 20, 0x1a0ull << 20, 0x1a1ull << 20, 0x1a2ull << 20, 0x1a3ull << 20, 0x1a4ull << 20, 0x1a5ull << 20, 0x1a6ull << 20, 0x1a7ull << 20, 0x1a8ull << 20, 0x1a9ull << 20, 0x1b0ull << 20, 0x1b1ull << 20, 0x1b2ull << 20, 0x1b3ull << 20, 0x1b4ull << 20, 0x1b5ull << 20, 0x1b6ull << 20, 0x1b7ull << 20, 0x1b8ull << 20, 0x1b9ull << 20, 0x1c0ull << 20, 0x1c1ull << 20, 0x1c2ull << 20, 0x1c3ull << 20, 0x1c4ull << 20, 0x1c5ull << 20, 0x1c6ull << 20, 0x1c7ull << 20, 0x1c8ull << 20, 0x1c9ull << 20, 0x1d0ull << 20, 0x1d1ull << 20, 0x1d2ull << 20, 0x1d3ull << 20, 0x1d4ull << 20, 0x1d5ull << 20, 0x1d6ull << 20, 0x1d7ull << 20, 0x1d8ull << 20, 0x1d9ull << 20, 0x1e0ull << 20, 0x1e1ull << 20, 0x1e2ull << 20, 0x1e3ull << 20, 0x1e4ull << 20, 0x1e5ull << 20, 0x1e6ull << 20, 0x1e7ull << 20, 0x1e8ull << 20, 0x1e9ull << 20, 0x1f0ull << 20, 0x1f1ull << 20, 0x1f2ull << 20, 0x1f3ull << 20, 0x1f4ull << 20, 0x1f5ull << 20, 0x1f6ull << 20, 0x1f7ull << 20, 0x1f8ull << 20, 0x1f9ull << 20, 0x18aull << 20, 0x18bull << 20, 0x1aaull << 20, 0x1abull << 20, 0x1caull << 20, 0x1cbull << 20, 0x1eaull << 20, 0x1ebull << 20, 0x1ceull << 20, 0x1cfull << 20, 0x19aull << 20, 0x19bull << 20, 0x1baull << 20, 0x1bbull << 20, 0x1daull << 20, 0x1dbull << 20, 0x1faull << 20, 0x1fbull << 20, 0x1deull << 20, 0x1dfull << 20, 0x200ull << 20, 0x201ull << 20, 0x202ull << 20, 0x203ull << 20, 0x204ull << 20, 0x205ull << 20, 0x206ull << 20, 0x207ull << 20, 0x208ull << 20, 0x209ull << 20, 0x210ull << 20, 0x211ull << 20, 0x212ull << 20, 0x213ull << 20, 0x214ull << 20, 0x215ull << 20, 0x216ull << 20, 0x217ull << 20, 0x218ull << 20, 0x219ull << 20, 0x220ull << 20, 0x221ull << 20, 0x222ull << 20, 0x223ull << 20, 0x224ull << 20, 0x225ull << 20, 0x226ull << 20, 0x227ull << 20, 0x228ull << 20, 0x229ull << 20, 0x230ull << 20, 0x231ull << 20, 0x232ull << 20, 0x233ull << 20, 0x234ull << 20, 0x235ull << 20, 0x236ull << 20, 0x237ull << 20, 0x238ull << 20, 0x239ull << 20, 0x240ull << 20, 0x241ull << 20, 0x242ull << 20, 0x243ull << 20, 0x244ull << 20, 0x245ull << 20, 0x246ull << 20, 0x247ull << 20, 0x248ull << 20, 0x249ull << 20, 0x250ull << 20, 0x251ull << 20, 0x252ull << 20, 0x253ull << 20, 0x254ull << 20, 0x255ull << 20, 0x256ull << 20, 0x257ull << 20, 0x258ull << 20, 0x259ull << 20, 0x260ull << 20, 0x261ull << 20, 0x262ull << 20, 0x263ull << 20, 0x264ull << 20, 0x265ull << 20, 0x266ull << 20, 0x267ull << 20, 0x268ull << 20, 0x269ull << 20, 0x270ull << 20, 0x271ull << 20, 0x272ull << 20, 0x273ull << 20, 0x274ull << 20, 0x275ull << 20, 0x276ull << 20, 0x277ull << 20, 0x278ull << 20, 0x279ull << 20, 0x20aull << 20, 0x20bull << 20, 0x22aull << 20, 0x22bull << 20, 0x24aull << 20, 0x24bull << 20, 0x26aull << 20, 0x26bull << 20, 0x24eull << 20, 0x24full << 20, 0x21aull << 20, 0x21bull << 20, 0x23aull << 20, 0x23bull << 20, 0x25aull << 20, 0x25bull << 20, 0x27aull << 20, 0x27bull << 20, 0x25eull << 20, 0x25full << 20, 0x280ull << 20, 0x281ull << 20, 0x282ull << 20, 0x283ull << 20, 0x284ull << 20, 0x285ull << 20, 0x286ull << 20, 0x287ull << 20, 0x288ull << 20, 0x289ull << 20, 0x290ull << 20, 0x291ull << 20, 0x292ull << 20, 0x293ull << 20, 0x294ull << 20, 0x295ull << 20, 0x296ull << 20, 0x297ull << 20, 0x298ull << 20, 0x299ull << 20, 0x2a0ull << 20, 0x2a1ull << 20, 0x2a2ull << 20, 0x2a3ull << 20, 0x2a4ull << 20, 0x2a5ull << 20, 0x2a6ull << 20, 0x2a7ull << 20, 0x2a8ull << 20, 0x2a9ull << 20, 0x2b0ull << 20, 0x2b1ull << 20, 0x2b2ull << 20, 0x2b3ull << 20, 0x2b4ull << 20, 0x2b5ull << 20, 0x2b6ull << 20, 0x2b7ull << 20, 0x2b8ull << 20, 0x2b9ull << 20, 0x2c0ull << 20, 0x2c1ull << 20, 0x2c2ull << 20, 0x2c3ull << 20, 0x2c4ull << 20, 0x2c5ull << 20, 0x2c6ull << 20, 0x2c7ull << 20, 0x2c8ull << 20, 0x2c9ull << 20, 0x2d0ull << 20, 0x2d1ull << 20, 0x2d2ull << 20, 0x2d3ull << 20, 0x2d4ull << 20, 0x2d5ull << 20, 0x2d6ull << 20, 0x2d7ull << 20, 0x2d8ull << 20, 0x2d9ull << 20, 0x2e0ull << 20, 0x2e1ull << 20, 0x2e2ull << 20, 0x2e3ull << 20, 0x2e4ull << 20, 0x2e5ull << 20, 0x2e6ull << 20, 0x2e7ull << 20, 0x2e8ull << 20, 0x2e9ull << 20, 0x2f0ull << 20, 0x2f1ull << 20, 0x2f2ull << 20, 0x2f3ull << 20, 0x2f4ull << 20, 0x2f5ull << 20, 0x2f6ull << 20, 0x2f7ull << 20, 0x2f8ull << 20, 0x2f9ull << 20, 0x28aull << 20, 0x28bull << 20, 0x2aaull << 20, 0x2abull << 20, 0x2caull << 20, 0x2cbull << 20, 0x2eaull << 20, 0x2ebull << 20, 0x2ceull << 20, 0x2cfull << 20, 0x29aull << 20, 0x29bull << 20, 0x2baull << 20, 0x2bbull << 20, 0x2daull << 20, 0x2dbull << 20, 0x2faull << 20, 0x2fbull << 20, 0x2deull << 20, 0x2dfull << 20, 0x300ull << 20, 0x301ull << 20, 0x302ull << 20, 0x303ull << 20, 0x304ull << 20, 0x305ull << 20, 0x306ull << 20, 0x307ull << 20, 0x308ull << 20, 0x309ull << 20, 0x310ull << 20, 0x311ull << 20, 0x312ull << 20, 0x313ull << 20, 0x314ull << 20, 0x315ull << 20, 0x316ull << 20, 0x317ull << 20, 0x318ull << 20, 0x319ull << 20, 0x320ull << 20, 0x321ull << 20, 0x322ull << 20, 0x323ull << 20, 0x324ull << 20, 0x325ull << 20, 0x326ull << 20, 0x327ull << 20, 0x328ull << 20, 0x329ull << 20, 0x330ull << 20, 0x331ull << 20, 0x332ull << 20, 0x333ull << 20, 0x334ull << 20, 0x335ull << 20, 0x336ull << 20, 0x337ull << 20, 0x338ull << 20, 0x339ull << 20, 0x340ull << 20, 0x341ull << 20, 0x342ull << 20, 0x343ull << 20, 0x344ull << 20, 0x345ull << 20, 0x346ull << 20, 0x347ull << 20, 0x348ull << 20, 0x349ull << 20, 0x350ull << 20, 0x351ull << 20, 0x352ull << 20, 0x353ull << 20, 0x354ull << 20, 0x355ull << 20, 0x356ull << 20, 0x357ull << 20, 0x358ull << 20, 0x359ull << 20, 0x360ull << 20, 0x361ull << 20, 0x362ull << 20, 0x363ull << 20, 0x364ull << 20, 0x365ull << 20, 0x366ull << 20, 0x367ull << 20, 0x368ull << 20, 0x369ull << 20, 0x370ull << 20, 0x371ull << 20, 0x372ull << 20, 0x373ull << 20, 0x374ull << 20, 0x375ull << 20, 0x376ull << 20, 0x377ull << 20, 0x378ull << 20, 0x379ull << 20, 0x30aull << 20, 0x30bull << 20, 0x32aull << 20, 0x32bull << 20, 0x34aull << 20, 0x34bull << 20, 0x36aull << 20, 0x36bull << 20, 0x34eull << 20, 0x34full << 20, 0x31aull << 20, 0x31bull << 20, 0x33aull << 20, 0x33bull << 20, 0x35aull << 20, 0x35bull << 20, 0x37aull << 20, 0x37bull << 20, 0x35eull << 20, 0x35full << 20, 0x380ull << 20, 0x381ull << 20, 0x382ull << 20, 0x383ull << 20, 0x384ull << 20, 0x385ull << 20, 0x386ull << 20, 0x387ull << 20, 0x388ull << 20, 0x389ull << 20, 0x390ull << 20, 0x391ull << 20, 0x392ull << 20, 0x393ull << 20, 0x394ull << 20, 0x395ull << 20, 0x396ull << 20, 0x397ull << 20, 0x398ull << 20, 0x399ull << 20, 0x3a0ull << 20, 0x3a1ull << 20, 0x3a2ull << 20, 0x3a3ull << 20, 0x3a4ull << 20, 0x3a5ull << 20, 0x3a6ull << 20, 0x3a7ull << 20, 0x3a8ull << 20, 0x3a9ull << 20, 0x3b0ull << 20, 0x3b1ull << 20, 0x3b2ull << 20, 0x3b3ull << 20, 0x3b4ull << 20, 0x3b5ull << 20, 0x3b6ull << 20, 0x3b7ull << 20, 0x3b8ull << 20, 0x3b9ull << 20, 0x3c0ull << 20, 0x3c1ull << 20, 0x3c2ull << 20, 0x3c3ull << 20, 0x3c4ull << 20, 0x3c5ull << 20, 0x3c6ull << 20, 0x3c7ull << 20, 0x3c8ull << 20, 0x3c9ull << 20, 0x3d0ull << 20, 0x3d1ull << 20, 0x3d2ull << 20, 0x3d3ull << 20, 0x3d4ull << 20, 0x3d5ull << 20, 0x3d6ull << 20, 0x3d7ull << 20, 0x3d8ull << 20, 0x3d9ull << 20, 0x3e0ull << 20, 0x3e1ull << 20, 0x3e2ull << 20, 0x3e3ull << 20, 0x3e4ull << 20, 0x3e5ull << 20, 0x3e6ull << 20, 0x3e7ull << 20, 0x3e8ull << 20, 0x3e9ull << 20, 0x3f0ull << 20, 0x3f1ull << 20, 0x3f2ull << 20, 0x3f3ull << 20, 0x3f4ull << 20, 0x3f5ull << 20, 0x3f6ull << 20, 0x3f7ull << 20, 0x3f8ull << 20, 0x3f9ull << 20, 0x38aull << 20, 0x38bull << 20, 0x3aaull << 20, 0x3abull << 20, 0x3caull << 20, 0x3cbull << 20, 0x3eaull << 20, 0x3ebull << 20, 0x3ceull << 20, 0x3cfull << 20, 0x39aull << 20, 0x39bull << 20, 0x3baull << 20, 0x3bbull << 20, 0x3daull << 20, 0x3dbull << 20, 0x3faull << 20, 0x3fbull << 20, 0x3deull << 20, 0x3dfull << 20, 0x00cull << 20, 0x00dull << 20, 0x10cull << 20, 0x10dull << 20, 0x20cull << 20, 0x20dull << 20, 0x30cull << 20, 0x30dull << 20, 0x02eull << 20, 0x02full << 20, 0x01cull << 20, 0x01dull << 20, 0x11cull << 20, 0x11dull << 20, 0x21cull << 20, 0x21dull << 20, 0x31cull << 20, 0x31dull << 20, 0x03eull << 20, 0x03full << 20, 0x02cull << 20, 0x02dull << 20, 0x12cull << 20, 0x12dull << 20, 0x22cull << 20, 0x22dull << 20, 0x32cull << 20, 0x32dull << 20, 0x12eull << 20, 0x12full << 20, 0x03cull << 20, 0x03dull << 20, 0x13cull << 20, 0x13dull << 20, 0x23cull << 20, 0x23dull << 20, 0x33cull << 20, 0x33dull << 20, 0x13eull << 20, 0x13full << 20, 0x04cull << 20, 0x04dull << 20, 0x14cull << 20, 0x14dull << 20, 0x24cull << 20, 0x24dull << 20, 0x34cull << 20, 0x34dull << 20, 0x22eull << 20, 0x22full << 20, 0x05cull << 20, 0x05dull << 20, 0x15cull << 20, 0x15dull << 20, 0x25cull << 20, 0x25dull << 20, 0x35cull << 20, 0x35dull << 20, 0x23eull << 20, 0x23full << 20, 0x06cull << 20, 0x06dull << 20, 0x16cull << 20, 0x16dull << 20, 0x26cull << 20, 0x26dull << 20, 0x36cull << 20, 0x36dull << 20, 0x32eull << 20, 0x32full << 20, 0x07cull << 20, 0x07dull << 20, 0x17cull << 20, 0x17dull << 20, 0x27cull << 20, 0x27dull << 20, 0x37cull << 20, 0x37dull << 20, 0x33eull << 20, 0x33full << 20, 0x00eull << 20, 0x00full << 20, 0x10eull << 20, 0x10full << 20, 0x20eull << 20, 0x20full << 20, 0x30eull << 20, 0x30full << 20, 0x06eull << 20, 0x06full << 20, 0x01eull << 20, 0x01full << 20, 0x11eull << 20, 0x11full << 20, 0x21eull << 20, 0x21full << 20, 0x31eull << 20, 0x31full << 20, 0x07eull << 20, 0x07full << 20, 0x08cull << 20, 0x08dull << 20, 0x18cull << 20, 0x18dull << 20, 0x28cull << 20, 0x28dull << 20, 0x38cull << 20, 0x38dull << 20, 0x0aeull << 20, 0x0afull << 20, 0x09cull << 20, 0x09dull << 20, 0x19cull << 20, 0x19dull << 20, 0x29cull << 20, 0x29dull << 20, 0x39cull << 20, 0x39dull << 20, 0x0beull << 20, 0x0bfull << 20, 0x0acull << 20, 0x0adull << 20, 0x1acull << 20, 0x1adull << 20, 0x2acull << 20, 0x2adull << 20, 0x3acull << 20, 0x3adull << 20, 0x1aeull << 20, 0x1afull << 20, 0x0bcull << 20, 0x0bdull << 20, 0x1bcull << 20, 0x1bdull << 20, 0x2bcull << 20, 0x2bdull << 20, 0x3bcull << 20, 0x3bdull << 20, 0x1beull << 20, 0x1bfull << 20, 0x0ccull << 20, 0x0cdull << 20, 0x1ccull << 20, 0x1cdull << 20, 0x2ccull << 20, 0x2cdull << 20, 0x3ccull << 20, 0x3cdull << 20, 0x2aeull << 20, 0x2afull << 20, 0x0dcull << 20, 0x0ddull << 20, 0x1dcull << 20, 0x1ddull << 20, 0x2dcull << 20, 0x2ddull << 20, 0x3dcull << 20, 0x3ddull << 20, 0x2beull << 20, 0x2bfull << 20, 0x0ecull << 20, 0x0edull << 20, 0x1ecull << 20, 0x1edull << 20, 0x2ecull << 20, 0x2edull << 20, 0x3ecull << 20, 0x3edull << 20, 0x3aeull << 20, 0x3afull << 20, 0x0fcull << 20, 0x0fdull << 20, 0x1fcull << 20, 0x1fdull << 20, 0x2fcull << 20, 0x2fdull << 20, 0x3fcull << 20, 0x3fdull << 20, 0x3beull << 20, 0x3bfull << 20, 0x08eull << 20, 0x08full << 20, 0x18eull << 20, 0x18full << 20, 0x28eull << 20, 0x28full << 20, 0x38eull << 20, 0x38full << 20, 0x0eeull << 20, 0x0efull << 20, 0x09eull << 20, 0x09full << 20, 0x19eull << 20, 0x19full << 20, 0x29eull << 20, 0x29full << 20, 0x39eull << 20, 0x39full << 20, 0x0feull << 20, 0x0ffull << 20 }; static const UINT64 b2d4[] = { 0x000ull << 30, 0x001ull << 30, 0x002ull << 30, 0x003ull << 30, 0x004ull << 30, 0x005ull << 30, 0x006ull << 30, 0x007ull << 30, 0x008ull << 30, 0x009ull << 30, 0x010ull << 30, 0x011ull << 30, 0x012ull << 30, 0x013ull << 30, 0x014ull << 30, 0x015ull << 30, 0x016ull << 30, 0x017ull << 30, 0x018ull << 30, 0x019ull << 30, 0x020ull << 30, 0x021ull << 30, 0x022ull << 30, 0x023ull << 30, 0x024ull << 30, 0x025ull << 30, 0x026ull << 30, 0x027ull << 30, 0x028ull << 30, 0x029ull << 30, 0x030ull << 30, 0x031ull << 30, 0x032ull << 30, 0x033ull << 30, 0x034ull << 30, 0x035ull << 30, 0x036ull << 30, 0x037ull << 30, 0x038ull << 30, 0x039ull << 30, 0x040ull << 30, 0x041ull << 30, 0x042ull << 30, 0x043ull << 30, 0x044ull << 30, 0x045ull << 30, 0x046ull << 30, 0x047ull << 30, 0x048ull << 30, 0x049ull << 30, 0x050ull << 30, 0x051ull << 30, 0x052ull << 30, 0x053ull << 30, 0x054ull << 30, 0x055ull << 30, 0x056ull << 30, 0x057ull << 30, 0x058ull << 30, 0x059ull << 30, 0x060ull << 30, 0x061ull << 30, 0x062ull << 30, 0x063ull << 30, 0x064ull << 30, 0x065ull << 30, 0x066ull << 30, 0x067ull << 30, 0x068ull << 30, 0x069ull << 30, 0x070ull << 30, 0x071ull << 30, 0x072ull << 30, 0x073ull << 30, 0x074ull << 30, 0x075ull << 30, 0x076ull << 30, 0x077ull << 30, 0x078ull << 30, 0x079ull << 30, 0x00aull << 30, 0x00bull << 30, 0x02aull << 30, 0x02bull << 30, 0x04aull << 30, 0x04bull << 30, 0x06aull << 30, 0x06bull << 30, 0x04eull << 30, 0x04full << 30, 0x01aull << 30, 0x01bull << 30, 0x03aull << 30, 0x03bull << 30, 0x05aull << 30, 0x05bull << 30, 0x07aull << 30, 0x07bull << 30, 0x05eull << 30, 0x05full << 30, 0x080ull << 30, 0x081ull << 30, 0x082ull << 30, 0x083ull << 30, 0x084ull << 30, 0x085ull << 30, 0x086ull << 30, 0x087ull << 30, 0x088ull << 30, 0x089ull << 30, 0x090ull << 30, 0x091ull << 30, 0x092ull << 30, 0x093ull << 30, 0x094ull << 30, 0x095ull << 30, 0x096ull << 30, 0x097ull << 30, 0x098ull << 30, 0x099ull << 30, 0x0a0ull << 30, 0x0a1ull << 30, 0x0a2ull << 30, 0x0a3ull << 30, 0x0a4ull << 30, 0x0a5ull << 30, 0x0a6ull << 30, 0x0a7ull << 30, 0x0a8ull << 30, 0x0a9ull << 30, 0x0b0ull << 30, 0x0b1ull << 30, 0x0b2ull << 30, 0x0b3ull << 30, 0x0b4ull << 30, 0x0b5ull << 30, 0x0b6ull << 30, 0x0b7ull << 30, 0x0b8ull << 30, 0x0b9ull << 30, 0x0c0ull << 30, 0x0c1ull << 30, 0x0c2ull << 30, 0x0c3ull << 30, 0x0c4ull << 30, 0x0c5ull << 30, 0x0c6ull << 30, 0x0c7ull << 30, 0x0c8ull << 30, 0x0c9ull << 30, 0x0d0ull << 30, 0x0d1ull << 30, 0x0d2ull << 30, 0x0d3ull << 30, 0x0d4ull << 30, 0x0d5ull << 30, 0x0d6ull << 30, 0x0d7ull << 30, 0x0d8ull << 30, 0x0d9ull << 30, 0x0e0ull << 30, 0x0e1ull << 30, 0x0e2ull << 30, 0x0e3ull << 30, 0x0e4ull << 30, 0x0e5ull << 30, 0x0e6ull << 30, 0x0e7ull << 30, 0x0e8ull << 30, 0x0e9ull << 30, 0x0f0ull << 30, 0x0f1ull << 30, 0x0f2ull << 30, 0x0f3ull << 30, 0x0f4ull << 30, 0x0f5ull << 30, 0x0f6ull << 30, 0x0f7ull << 30, 0x0f8ull << 30, 0x0f9ull << 30, 0x08aull << 30, 0x08bull << 30, 0x0aaull << 30, 0x0abull << 30, 0x0caull << 30, 0x0cbull << 30, 0x0eaull << 30, 0x0ebull << 30, 0x0ceull << 30, 0x0cfull << 30, 0x09aull << 30, 0x09bull << 30, 0x0baull << 30, 0x0bbull << 30, 0x0daull << 30, 0x0dbull << 30, 0x0faull << 30, 0x0fbull << 30, 0x0deull << 30, 0x0dfull << 30, 0x100ull << 30, 0x101ull << 30, 0x102ull << 30, 0x103ull << 30, 0x104ull << 30, 0x105ull << 30, 0x106ull << 30, 0x107ull << 30, 0x108ull << 30, 0x109ull << 30, 0x110ull << 30, 0x111ull << 30, 0x112ull << 30, 0x113ull << 30, 0x114ull << 30, 0x115ull << 30, 0x116ull << 30, 0x117ull << 30, 0x118ull << 30, 0x119ull << 30, 0x120ull << 30, 0x121ull << 30, 0x122ull << 30, 0x123ull << 30, 0x124ull << 30, 0x125ull << 30, 0x126ull << 30, 0x127ull << 30, 0x128ull << 30, 0x129ull << 30, 0x130ull << 30, 0x131ull << 30, 0x132ull << 30, 0x133ull << 30, 0x134ull << 30, 0x135ull << 30, 0x136ull << 30, 0x137ull << 30, 0x138ull << 30, 0x139ull << 30, 0x140ull << 30, 0x141ull << 30, 0x142ull << 30, 0x143ull << 30, 0x144ull << 30, 0x145ull << 30, 0x146ull << 30, 0x147ull << 30, 0x148ull << 30, 0x149ull << 30, 0x150ull << 30, 0x151ull << 30, 0x152ull << 30, 0x153ull << 30, 0x154ull << 30, 0x155ull << 30, 0x156ull << 30, 0x157ull << 30, 0x158ull << 30, 0x159ull << 30, 0x160ull << 30, 0x161ull << 30, 0x162ull << 30, 0x163ull << 30, 0x164ull << 30, 0x165ull << 30, 0x166ull << 30, 0x167ull << 30, 0x168ull << 30, 0x169ull << 30, 0x170ull << 30, 0x171ull << 30, 0x172ull << 30, 0x173ull << 30, 0x174ull << 30, 0x175ull << 30, 0x176ull << 30, 0x177ull << 30, 0x178ull << 30, 0x179ull << 30, 0x10aull << 30, 0x10bull << 30, 0x12aull << 30, 0x12bull << 30, 0x14aull << 30, 0x14bull << 30, 0x16aull << 30, 0x16bull << 30, 0x14eull << 30, 0x14full << 30, 0x11aull << 30, 0x11bull << 30, 0x13aull << 30, 0x13bull << 30, 0x15aull << 30, 0x15bull << 30, 0x17aull << 30, 0x17bull << 30, 0x15eull << 30, 0x15full << 30, 0x180ull << 30, 0x181ull << 30, 0x182ull << 30, 0x183ull << 30, 0x184ull << 30, 0x185ull << 30, 0x186ull << 30, 0x187ull << 30, 0x188ull << 30, 0x189ull << 30, 0x190ull << 30, 0x191ull << 30, 0x192ull << 30, 0x193ull << 30, 0x194ull << 30, 0x195ull << 30, 0x196ull << 30, 0x197ull << 30, 0x198ull << 30, 0x199ull << 30, 0x1a0ull << 30, 0x1a1ull << 30, 0x1a2ull << 30, 0x1a3ull << 30, 0x1a4ull << 30, 0x1a5ull << 30, 0x1a6ull << 30, 0x1a7ull << 30, 0x1a8ull << 30, 0x1a9ull << 30, 0x1b0ull << 30, 0x1b1ull << 30, 0x1b2ull << 30, 0x1b3ull << 30, 0x1b4ull << 30, 0x1b5ull << 30, 0x1b6ull << 30, 0x1b7ull << 30, 0x1b8ull << 30, 0x1b9ull << 30, 0x1c0ull << 30, 0x1c1ull << 30, 0x1c2ull << 30, 0x1c3ull << 30, 0x1c4ull << 30, 0x1c5ull << 30, 0x1c6ull << 30, 0x1c7ull << 30, 0x1c8ull << 30, 0x1c9ull << 30, 0x1d0ull << 30, 0x1d1ull << 30, 0x1d2ull << 30, 0x1d3ull << 30, 0x1d4ull << 30, 0x1d5ull << 30, 0x1d6ull << 30, 0x1d7ull << 30, 0x1d8ull << 30, 0x1d9ull << 30, 0x1e0ull << 30, 0x1e1ull << 30, 0x1e2ull << 30, 0x1e3ull << 30, 0x1e4ull << 30, 0x1e5ull << 30, 0x1e6ull << 30, 0x1e7ull << 30, 0x1e8ull << 30, 0x1e9ull << 30, 0x1f0ull << 30, 0x1f1ull << 30, 0x1f2ull << 30, 0x1f3ull << 30, 0x1f4ull << 30, 0x1f5ull << 30, 0x1f6ull << 30, 0x1f7ull << 30, 0x1f8ull << 30, 0x1f9ull << 30, 0x18aull << 30, 0x18bull << 30, 0x1aaull << 30, 0x1abull << 30, 0x1caull << 30, 0x1cbull << 30, 0x1eaull << 30, 0x1ebull << 30, 0x1ceull << 30, 0x1cfull << 30, 0x19aull << 30, 0x19bull << 30, 0x1baull << 30, 0x1bbull << 30, 0x1daull << 30, 0x1dbull << 30, 0x1faull << 30, 0x1fbull << 30, 0x1deull << 30, 0x1dfull << 30, 0x200ull << 30, 0x201ull << 30, 0x202ull << 30, 0x203ull << 30, 0x204ull << 30, 0x205ull << 30, 0x206ull << 30, 0x207ull << 30, 0x208ull << 30, 0x209ull << 30, 0x210ull << 30, 0x211ull << 30, 0x212ull << 30, 0x213ull << 30, 0x214ull << 30, 0x215ull << 30, 0x216ull << 30, 0x217ull << 30, 0x218ull << 30, 0x219ull << 30, 0x220ull << 30, 0x221ull << 30, 0x222ull << 30, 0x223ull << 30, 0x224ull << 30, 0x225ull << 30, 0x226ull << 30, 0x227ull << 30, 0x228ull << 30, 0x229ull << 30, 0x230ull << 30, 0x231ull << 30, 0x232ull << 30, 0x233ull << 30, 0x234ull << 30, 0x235ull << 30, 0x236ull << 30, 0x237ull << 30, 0x238ull << 30, 0x239ull << 30, 0x240ull << 30, 0x241ull << 30, 0x242ull << 30, 0x243ull << 30, 0x244ull << 30, 0x245ull << 30, 0x246ull << 30, 0x247ull << 30, 0x248ull << 30, 0x249ull << 30, 0x250ull << 30, 0x251ull << 30, 0x252ull << 30, 0x253ull << 30, 0x254ull << 30, 0x255ull << 30, 0x256ull << 30, 0x257ull << 30, 0x258ull << 30, 0x259ull << 30, 0x260ull << 30, 0x261ull << 30, 0x262ull << 30, 0x263ull << 30, 0x264ull << 30, 0x265ull << 30, 0x266ull << 30, 0x267ull << 30, 0x268ull << 30, 0x269ull << 30, 0x270ull << 30, 0x271ull << 30, 0x272ull << 30, 0x273ull << 30, 0x274ull << 30, 0x275ull << 30, 0x276ull << 30, 0x277ull << 30, 0x278ull << 30, 0x279ull << 30, 0x20aull << 30, 0x20bull << 30, 0x22aull << 30, 0x22bull << 30, 0x24aull << 30, 0x24bull << 30, 0x26aull << 30, 0x26bull << 30, 0x24eull << 30, 0x24full << 30, 0x21aull << 30, 0x21bull << 30, 0x23aull << 30, 0x23bull << 30, 0x25aull << 30, 0x25bull << 30, 0x27aull << 30, 0x27bull << 30, 0x25eull << 30, 0x25full << 30, 0x280ull << 30, 0x281ull << 30, 0x282ull << 30, 0x283ull << 30, 0x284ull << 30, 0x285ull << 30, 0x286ull << 30, 0x287ull << 30, 0x288ull << 30, 0x289ull << 30, 0x290ull << 30, 0x291ull << 30, 0x292ull << 30, 0x293ull << 30, 0x294ull << 30, 0x295ull << 30, 0x296ull << 30, 0x297ull << 30, 0x298ull << 30, 0x299ull << 30, 0x2a0ull << 30, 0x2a1ull << 30, 0x2a2ull << 30, 0x2a3ull << 30, 0x2a4ull << 30, 0x2a5ull << 30, 0x2a6ull << 30, 0x2a7ull << 30, 0x2a8ull << 30, 0x2a9ull << 30, 0x2b0ull << 30, 0x2b1ull << 30, 0x2b2ull << 30, 0x2b3ull << 30, 0x2b4ull << 30, 0x2b5ull << 30, 0x2b6ull << 30, 0x2b7ull << 30, 0x2b8ull << 30, 0x2b9ull << 30, 0x2c0ull << 30, 0x2c1ull << 30, 0x2c2ull << 30, 0x2c3ull << 30, 0x2c4ull << 30, 0x2c5ull << 30, 0x2c6ull << 30, 0x2c7ull << 30, 0x2c8ull << 30, 0x2c9ull << 30, 0x2d0ull << 30, 0x2d1ull << 30, 0x2d2ull << 30, 0x2d3ull << 30, 0x2d4ull << 30, 0x2d5ull << 30, 0x2d6ull << 30, 0x2d7ull << 30, 0x2d8ull << 30, 0x2d9ull << 30, 0x2e0ull << 30, 0x2e1ull << 30, 0x2e2ull << 30, 0x2e3ull << 30, 0x2e4ull << 30, 0x2e5ull << 30, 0x2e6ull << 30, 0x2e7ull << 30, 0x2e8ull << 30, 0x2e9ull << 30, 0x2f0ull << 30, 0x2f1ull << 30, 0x2f2ull << 30, 0x2f3ull << 30, 0x2f4ull << 30, 0x2f5ull << 30, 0x2f6ull << 30, 0x2f7ull << 30, 0x2f8ull << 30, 0x2f9ull << 30, 0x28aull << 30, 0x28bull << 30, 0x2aaull << 30, 0x2abull << 30, 0x2caull << 30, 0x2cbull << 30, 0x2eaull << 30, 0x2ebull << 30, 0x2ceull << 30, 0x2cfull << 30, 0x29aull << 30, 0x29bull << 30, 0x2baull << 30, 0x2bbull << 30, 0x2daull << 30, 0x2dbull << 30, 0x2faull << 30, 0x2fbull << 30, 0x2deull << 30, 0x2dfull << 30, 0x300ull << 30, 0x301ull << 30, 0x302ull << 30, 0x303ull << 30, 0x304ull << 30, 0x305ull << 30, 0x306ull << 30, 0x307ull << 30, 0x308ull << 30, 0x309ull << 30, 0x310ull << 30, 0x311ull << 30, 0x312ull << 30, 0x313ull << 30, 0x314ull << 30, 0x315ull << 30, 0x316ull << 30, 0x317ull << 30, 0x318ull << 30, 0x319ull << 30, 0x320ull << 30, 0x321ull << 30, 0x322ull << 30, 0x323ull << 30, 0x324ull << 30, 0x325ull << 30, 0x326ull << 30, 0x327ull << 30, 0x328ull << 30, 0x329ull << 30, 0x330ull << 30, 0x331ull << 30, 0x332ull << 30, 0x333ull << 30, 0x334ull << 30, 0x335ull << 30, 0x336ull << 30, 0x337ull << 30, 0x338ull << 30, 0x339ull << 30, 0x340ull << 30, 0x341ull << 30, 0x342ull << 30, 0x343ull << 30, 0x344ull << 30, 0x345ull << 30, 0x346ull << 30, 0x347ull << 30, 0x348ull << 30, 0x349ull << 30, 0x350ull << 30, 0x351ull << 30, 0x352ull << 30, 0x353ull << 30, 0x354ull << 30, 0x355ull << 30, 0x356ull << 30, 0x357ull << 30, 0x358ull << 30, 0x359ull << 30, 0x360ull << 30, 0x361ull << 30, 0x362ull << 30, 0x363ull << 30, 0x364ull << 30, 0x365ull << 30, 0x366ull << 30, 0x367ull << 30, 0x368ull << 30, 0x369ull << 30, 0x370ull << 30, 0x371ull << 30, 0x372ull << 30, 0x373ull << 30, 0x374ull << 30, 0x375ull << 30, 0x376ull << 30, 0x377ull << 30, 0x378ull << 30, 0x379ull << 30, 0x30aull << 30, 0x30bull << 30, 0x32aull << 30, 0x32bull << 30, 0x34aull << 30, 0x34bull << 30, 0x36aull << 30, 0x36bull << 30, 0x34eull << 30, 0x34full << 30, 0x31aull << 30, 0x31bull << 30, 0x33aull << 30, 0x33bull << 30, 0x35aull << 30, 0x35bull << 30, 0x37aull << 30, 0x37bull << 30, 0x35eull << 30, 0x35full << 30, 0x380ull << 30, 0x381ull << 30, 0x382ull << 30, 0x383ull << 30, 0x384ull << 30, 0x385ull << 30, 0x386ull << 30, 0x387ull << 30, 0x388ull << 30, 0x389ull << 30, 0x390ull << 30, 0x391ull << 30, 0x392ull << 30, 0x393ull << 30, 0x394ull << 30, 0x395ull << 30, 0x396ull << 30, 0x397ull << 30, 0x398ull << 30, 0x399ull << 30, 0x3a0ull << 30, 0x3a1ull << 30, 0x3a2ull << 30, 0x3a3ull << 30, 0x3a4ull << 30, 0x3a5ull << 30, 0x3a6ull << 30, 0x3a7ull << 30, 0x3a8ull << 30, 0x3a9ull << 30, 0x3b0ull << 30, 0x3b1ull << 30, 0x3b2ull << 30, 0x3b3ull << 30, 0x3b4ull << 30, 0x3b5ull << 30, 0x3b6ull << 30, 0x3b7ull << 30, 0x3b8ull << 30, 0x3b9ull << 30, 0x3c0ull << 30, 0x3c1ull << 30, 0x3c2ull << 30, 0x3c3ull << 30, 0x3c4ull << 30, 0x3c5ull << 30, 0x3c6ull << 30, 0x3c7ull << 30, 0x3c8ull << 30, 0x3c9ull << 30, 0x3d0ull << 30, 0x3d1ull << 30, 0x3d2ull << 30, 0x3d3ull << 30, 0x3d4ull << 30, 0x3d5ull << 30, 0x3d6ull << 30, 0x3d7ull << 30, 0x3d8ull << 30, 0x3d9ull << 30, 0x3e0ull << 30, 0x3e1ull << 30, 0x3e2ull << 30, 0x3e3ull << 30, 0x3e4ull << 30, 0x3e5ull << 30, 0x3e6ull << 30, 0x3e7ull << 30, 0x3e8ull << 30, 0x3e9ull << 30, 0x3f0ull << 30, 0x3f1ull << 30, 0x3f2ull << 30, 0x3f3ull << 30, 0x3f4ull << 30, 0x3f5ull << 30, 0x3f6ull << 30, 0x3f7ull << 30, 0x3f8ull << 30, 0x3f9ull << 30, 0x38aull << 30, 0x38bull << 30, 0x3aaull << 30, 0x3abull << 30, 0x3caull << 30, 0x3cbull << 30, 0x3eaull << 30, 0x3ebull << 30, 0x3ceull << 30, 0x3cfull << 30, 0x39aull << 30, 0x39bull << 30, 0x3baull << 30, 0x3bbull << 30, 0x3daull << 30, 0x3dbull << 30, 0x3faull << 30, 0x3fbull << 30, 0x3deull << 30, 0x3dfull << 30, 0x00cull << 30, 0x00dull << 30, 0x10cull << 30, 0x10dull << 30, 0x20cull << 30, 0x20dull << 30, 0x30cull << 30, 0x30dull << 30, 0x02eull << 30, 0x02full << 30, 0x01cull << 30, 0x01dull << 30, 0x11cull << 30, 0x11dull << 30, 0x21cull << 30, 0x21dull << 30, 0x31cull << 30, 0x31dull << 30, 0x03eull << 30, 0x03full << 30, 0x02cull << 30, 0x02dull << 30, 0x12cull << 30, 0x12dull << 30, 0x22cull << 30, 0x22dull << 30, 0x32cull << 30, 0x32dull << 30, 0x12eull << 30, 0x12full << 30, 0x03cull << 30, 0x03dull << 30, 0x13cull << 30, 0x13dull << 30, 0x23cull << 30, 0x23dull << 30, 0x33cull << 30, 0x33dull << 30, 0x13eull << 30, 0x13full << 30, 0x04cull << 30, 0x04dull << 30, 0x14cull << 30, 0x14dull << 30, 0x24cull << 30, 0x24dull << 30, 0x34cull << 30, 0x34dull << 30, 0x22eull << 30, 0x22full << 30, 0x05cull << 30, 0x05dull << 30, 0x15cull << 30, 0x15dull << 30, 0x25cull << 30, 0x25dull << 30, 0x35cull << 30, 0x35dull << 30, 0x23eull << 30, 0x23full << 30, 0x06cull << 30, 0x06dull << 30, 0x16cull << 30, 0x16dull << 30, 0x26cull << 30, 0x26dull << 30, 0x36cull << 30, 0x36dull << 30, 0x32eull << 30, 0x32full << 30, 0x07cull << 30, 0x07dull << 30, 0x17cull << 30, 0x17dull << 30, 0x27cull << 30, 0x27dull << 30, 0x37cull << 30, 0x37dull << 30, 0x33eull << 30, 0x33full << 30, 0x00eull << 30, 0x00full << 30, 0x10eull << 30, 0x10full << 30, 0x20eull << 30, 0x20full << 30, 0x30eull << 30, 0x30full << 30, 0x06eull << 30, 0x06full << 30, 0x01eull << 30, 0x01full << 30, 0x11eull << 30, 0x11full << 30, 0x21eull << 30, 0x21full << 30, 0x31eull << 30, 0x31full << 30, 0x07eull << 30, 0x07full << 30, 0x08cull << 30, 0x08dull << 30, 0x18cull << 30, 0x18dull << 30, 0x28cull << 30, 0x28dull << 30, 0x38cull << 30, 0x38dull << 30, 0x0aeull << 30, 0x0afull << 30, 0x09cull << 30, 0x09dull << 30, 0x19cull << 30, 0x19dull << 30, 0x29cull << 30, 0x29dull << 30, 0x39cull << 30, 0x39dull << 30, 0x0beull << 30, 0x0bfull << 30, 0x0acull << 30, 0x0adull << 30, 0x1acull << 30, 0x1adull << 30, 0x2acull << 30, 0x2adull << 30, 0x3acull << 30, 0x3adull << 30, 0x1aeull << 30, 0x1afull << 30, 0x0bcull << 30, 0x0bdull << 30, 0x1bcull << 30, 0x1bdull << 30, 0x2bcull << 30, 0x2bdull << 30, 0x3bcull << 30, 0x3bdull << 30, 0x1beull << 30, 0x1bfull << 30, 0x0ccull << 30, 0x0cdull << 30, 0x1ccull << 30, 0x1cdull << 30, 0x2ccull << 30, 0x2cdull << 30, 0x3ccull << 30, 0x3cdull << 30, 0x2aeull << 30, 0x2afull << 30, 0x0dcull << 30, 0x0ddull << 30, 0x1dcull << 30, 0x1ddull << 30, 0x2dcull << 30, 0x2ddull << 30, 0x3dcull << 30, 0x3ddull << 30, 0x2beull << 30, 0x2bfull << 30, 0x0ecull << 30, 0x0edull << 30, 0x1ecull << 30, 0x1edull << 30, 0x2ecull << 30, 0x2edull << 30, 0x3ecull << 30, 0x3edull << 30, 0x3aeull << 30, 0x3afull << 30, 0x0fcull << 30, 0x0fdull << 30, 0x1fcull << 30, 0x1fdull << 30, 0x2fcull << 30, 0x2fdull << 30, 0x3fcull << 30, 0x3fdull << 30, 0x3beull << 30, 0x3bfull << 30, 0x08eull << 30, 0x08full << 30, 0x18eull << 30, 0x18full << 30, 0x28eull << 30, 0x28full << 30, 0x38eull << 30, 0x38full << 30, 0x0eeull << 30, 0x0efull << 30, 0x09eull << 30, 0x09full << 30, 0x19eull << 30, 0x19full << 30, 0x29eull << 30, 0x29full << 30, 0x39eull << 30, 0x39full << 30, 0x0feull << 30, 0x0ffull << 30 }; static const UINT64 b2d5[] = { 0x000ull << 40, 0x001ull << 40, 0x002ull << 40, 0x003ull << 40, 0x004ull << 40, 0x005ull << 40, 0x006ull << 40, 0x007ull << 40, 0x008ull << 40, 0x009ull << 40, 0x010ull << 40, 0x011ull << 40, 0x012ull << 40, 0x013ull << 40, 0x014ull << 40, 0x015ull << 40, 0x016ull << 40, 0x017ull << 40, 0x018ull << 40, 0x019ull << 40, 0x020ull << 40, 0x021ull << 40, 0x022ull << 40, 0x023ull << 40, 0x024ull << 40, 0x025ull << 40, 0x026ull << 40, 0x027ull << 40, 0x028ull << 40, 0x029ull << 40, 0x030ull << 40, 0x031ull << 40, 0x032ull << 40, 0x033ull << 40, 0x034ull << 40, 0x035ull << 40, 0x036ull << 40, 0x037ull << 40, 0x038ull << 40, 0x039ull << 40, 0x040ull << 40, 0x041ull << 40, 0x042ull << 40, 0x043ull << 40, 0x044ull << 40, 0x045ull << 40, 0x046ull << 40, 0x047ull << 40, 0x048ull << 40, 0x049ull << 40, 0x050ull << 40, 0x051ull << 40, 0x052ull << 40, 0x053ull << 40, 0x054ull << 40, 0x055ull << 40, 0x056ull << 40, 0x057ull << 40, 0x058ull << 40, 0x059ull << 40, 0x060ull << 40, 0x061ull << 40, 0x062ull << 40, 0x063ull << 40, 0x064ull << 40, 0x065ull << 40, 0x066ull << 40, 0x067ull << 40, 0x068ull << 40, 0x069ull << 40, 0x070ull << 40, 0x071ull << 40, 0x072ull << 40, 0x073ull << 40, 0x074ull << 40, 0x075ull << 40, 0x076ull << 40, 0x077ull << 40, 0x078ull << 40, 0x079ull << 40, 0x00aull << 40, 0x00bull << 40, 0x02aull << 40, 0x02bull << 40, 0x04aull << 40, 0x04bull << 40, 0x06aull << 40, 0x06bull << 40, 0x04eull << 40, 0x04full << 40, 0x01aull << 40, 0x01bull << 40, 0x03aull << 40, 0x03bull << 40, 0x05aull << 40, 0x05bull << 40, 0x07aull << 40, 0x07bull << 40, 0x05eull << 40, 0x05full << 40, 0x080ull << 40, 0x081ull << 40, 0x082ull << 40, 0x083ull << 40, 0x084ull << 40, 0x085ull << 40, 0x086ull << 40, 0x087ull << 40, 0x088ull << 40, 0x089ull << 40, 0x090ull << 40, 0x091ull << 40, 0x092ull << 40, 0x093ull << 40, 0x094ull << 40, 0x095ull << 40, 0x096ull << 40, 0x097ull << 40, 0x098ull << 40, 0x099ull << 40, 0x0a0ull << 40, 0x0a1ull << 40, 0x0a2ull << 40, 0x0a3ull << 40, 0x0a4ull << 40, 0x0a5ull << 40, 0x0a6ull << 40, 0x0a7ull << 40, 0x0a8ull << 40, 0x0a9ull << 40, 0x0b0ull << 40, 0x0b1ull << 40, 0x0b2ull << 40, 0x0b3ull << 40, 0x0b4ull << 40, 0x0b5ull << 40, 0x0b6ull << 40, 0x0b7ull << 40, 0x0b8ull << 40, 0x0b9ull << 40, 0x0c0ull << 40, 0x0c1ull << 40, 0x0c2ull << 40, 0x0c3ull << 40, 0x0c4ull << 40, 0x0c5ull << 40, 0x0c6ull << 40, 0x0c7ull << 40, 0x0c8ull << 40, 0x0c9ull << 40, 0x0d0ull << 40, 0x0d1ull << 40, 0x0d2ull << 40, 0x0d3ull << 40, 0x0d4ull << 40, 0x0d5ull << 40, 0x0d6ull << 40, 0x0d7ull << 40, 0x0d8ull << 40, 0x0d9ull << 40, 0x0e0ull << 40, 0x0e1ull << 40, 0x0e2ull << 40, 0x0e3ull << 40, 0x0e4ull << 40, 0x0e5ull << 40, 0x0e6ull << 40, 0x0e7ull << 40, 0x0e8ull << 40, 0x0e9ull << 40, 0x0f0ull << 40, 0x0f1ull << 40, 0x0f2ull << 40, 0x0f3ull << 40, 0x0f4ull << 40, 0x0f5ull << 40, 0x0f6ull << 40, 0x0f7ull << 40, 0x0f8ull << 40, 0x0f9ull << 40, 0x08aull << 40, 0x08bull << 40, 0x0aaull << 40, 0x0abull << 40, 0x0caull << 40, 0x0cbull << 40, 0x0eaull << 40, 0x0ebull << 40, 0x0ceull << 40, 0x0cfull << 40, 0x09aull << 40, 0x09bull << 40, 0x0baull << 40, 0x0bbull << 40, 0x0daull << 40, 0x0dbull << 40, 0x0faull << 40, 0x0fbull << 40, 0x0deull << 40, 0x0dfull << 40, 0x100ull << 40, 0x101ull << 40, 0x102ull << 40, 0x103ull << 40, 0x104ull << 40, 0x105ull << 40, 0x106ull << 40, 0x107ull << 40, 0x108ull << 40, 0x109ull << 40, 0x110ull << 40, 0x111ull << 40, 0x112ull << 40, 0x113ull << 40, 0x114ull << 40, 0x115ull << 40, 0x116ull << 40, 0x117ull << 40, 0x118ull << 40, 0x119ull << 40, 0x120ull << 40, 0x121ull << 40, 0x122ull << 40, 0x123ull << 40, 0x124ull << 40, 0x125ull << 40, 0x126ull << 40, 0x127ull << 40, 0x128ull << 40, 0x129ull << 40, 0x130ull << 40, 0x131ull << 40, 0x132ull << 40, 0x133ull << 40, 0x134ull << 40, 0x135ull << 40, 0x136ull << 40, 0x137ull << 40, 0x138ull << 40, 0x139ull << 40, 0x140ull << 40, 0x141ull << 40, 0x142ull << 40, 0x143ull << 40, 0x144ull << 40, 0x145ull << 40, 0x146ull << 40, 0x147ull << 40, 0x148ull << 40, 0x149ull << 40, 0x150ull << 40, 0x151ull << 40, 0x152ull << 40, 0x153ull << 40, 0x154ull << 40, 0x155ull << 40, 0x156ull << 40, 0x157ull << 40, 0x158ull << 40, 0x159ull << 40, 0x160ull << 40, 0x161ull << 40, 0x162ull << 40, 0x163ull << 40, 0x164ull << 40, 0x165ull << 40, 0x166ull << 40, 0x167ull << 40, 0x168ull << 40, 0x169ull << 40, 0x170ull << 40, 0x171ull << 40, 0x172ull << 40, 0x173ull << 40, 0x174ull << 40, 0x175ull << 40, 0x176ull << 40, 0x177ull << 40, 0x178ull << 40, 0x179ull << 40, 0x10aull << 40, 0x10bull << 40, 0x12aull << 40, 0x12bull << 40, 0x14aull << 40, 0x14bull << 40, 0x16aull << 40, 0x16bull << 40, 0x14eull << 40, 0x14full << 40, 0x11aull << 40, 0x11bull << 40, 0x13aull << 40, 0x13bull << 40, 0x15aull << 40, 0x15bull << 40, 0x17aull << 40, 0x17bull << 40, 0x15eull << 40, 0x15full << 40, 0x180ull << 40, 0x181ull << 40, 0x182ull << 40, 0x183ull << 40, 0x184ull << 40, 0x185ull << 40, 0x186ull << 40, 0x187ull << 40, 0x188ull << 40, 0x189ull << 40, 0x190ull << 40, 0x191ull << 40, 0x192ull << 40, 0x193ull << 40, 0x194ull << 40, 0x195ull << 40, 0x196ull << 40, 0x197ull << 40, 0x198ull << 40, 0x199ull << 40, 0x1a0ull << 40, 0x1a1ull << 40, 0x1a2ull << 40, 0x1a3ull << 40, 0x1a4ull << 40, 0x1a5ull << 40, 0x1a6ull << 40, 0x1a7ull << 40, 0x1a8ull << 40, 0x1a9ull << 40, 0x1b0ull << 40, 0x1b1ull << 40, 0x1b2ull << 40, 0x1b3ull << 40, 0x1b4ull << 40, 0x1b5ull << 40, 0x1b6ull << 40, 0x1b7ull << 40, 0x1b8ull << 40, 0x1b9ull << 40, 0x1c0ull << 40, 0x1c1ull << 40, 0x1c2ull << 40, 0x1c3ull << 40, 0x1c4ull << 40, 0x1c5ull << 40, 0x1c6ull << 40, 0x1c7ull << 40, 0x1c8ull << 40, 0x1c9ull << 40, 0x1d0ull << 40, 0x1d1ull << 40, 0x1d2ull << 40, 0x1d3ull << 40, 0x1d4ull << 40, 0x1d5ull << 40, 0x1d6ull << 40, 0x1d7ull << 40, 0x1d8ull << 40, 0x1d9ull << 40, 0x1e0ull << 40, 0x1e1ull << 40, 0x1e2ull << 40, 0x1e3ull << 40, 0x1e4ull << 40, 0x1e5ull << 40, 0x1e6ull << 40, 0x1e7ull << 40, 0x1e8ull << 40, 0x1e9ull << 40, 0x1f0ull << 40, 0x1f1ull << 40, 0x1f2ull << 40, 0x1f3ull << 40, 0x1f4ull << 40, 0x1f5ull << 40, 0x1f6ull << 40, 0x1f7ull << 40, 0x1f8ull << 40, 0x1f9ull << 40, 0x18aull << 40, 0x18bull << 40, 0x1aaull << 40, 0x1abull << 40, 0x1caull << 40, 0x1cbull << 40, 0x1eaull << 40, 0x1ebull << 40, 0x1ceull << 40, 0x1cfull << 40, 0x19aull << 40, 0x19bull << 40, 0x1baull << 40, 0x1bbull << 40, 0x1daull << 40, 0x1dbull << 40, 0x1faull << 40, 0x1fbull << 40, 0x1deull << 40, 0x1dfull << 40, 0x200ull << 40, 0x201ull << 40, 0x202ull << 40, 0x203ull << 40, 0x204ull << 40, 0x205ull << 40, 0x206ull << 40, 0x207ull << 40, 0x208ull << 40, 0x209ull << 40, 0x210ull << 40, 0x211ull << 40, 0x212ull << 40, 0x213ull << 40, 0x214ull << 40, 0x215ull << 40, 0x216ull << 40, 0x217ull << 40, 0x218ull << 40, 0x219ull << 40, 0x220ull << 40, 0x221ull << 40, 0x222ull << 40, 0x223ull << 40, 0x224ull << 40, 0x225ull << 40, 0x226ull << 40, 0x227ull << 40, 0x228ull << 40, 0x229ull << 40, 0x230ull << 40, 0x231ull << 40, 0x232ull << 40, 0x233ull << 40, 0x234ull << 40, 0x235ull << 40, 0x236ull << 40, 0x237ull << 40, 0x238ull << 40, 0x239ull << 40, 0x240ull << 40, 0x241ull << 40, 0x242ull << 40, 0x243ull << 40, 0x244ull << 40, 0x245ull << 40, 0x246ull << 40, 0x247ull << 40, 0x248ull << 40, 0x249ull << 40, 0x250ull << 40, 0x251ull << 40, 0x252ull << 40, 0x253ull << 40, 0x254ull << 40, 0x255ull << 40, 0x256ull << 40, 0x257ull << 40, 0x258ull << 40, 0x259ull << 40, 0x260ull << 40, 0x261ull << 40, 0x262ull << 40, 0x263ull << 40, 0x264ull << 40, 0x265ull << 40, 0x266ull << 40, 0x267ull << 40, 0x268ull << 40, 0x269ull << 40, 0x270ull << 40, 0x271ull << 40, 0x272ull << 40, 0x273ull << 40, 0x274ull << 40, 0x275ull << 40, 0x276ull << 40, 0x277ull << 40, 0x278ull << 40, 0x279ull << 40, 0x20aull << 40, 0x20bull << 40, 0x22aull << 40, 0x22bull << 40, 0x24aull << 40, 0x24bull << 40, 0x26aull << 40, 0x26bull << 40, 0x24eull << 40, 0x24full << 40, 0x21aull << 40, 0x21bull << 40, 0x23aull << 40, 0x23bull << 40, 0x25aull << 40, 0x25bull << 40, 0x27aull << 40, 0x27bull << 40, 0x25eull << 40, 0x25full << 40, 0x280ull << 40, 0x281ull << 40, 0x282ull << 40, 0x283ull << 40, 0x284ull << 40, 0x285ull << 40, 0x286ull << 40, 0x287ull << 40, 0x288ull << 40, 0x289ull << 40, 0x290ull << 40, 0x291ull << 40, 0x292ull << 40, 0x293ull << 40, 0x294ull << 40, 0x295ull << 40, 0x296ull << 40, 0x297ull << 40, 0x298ull << 40, 0x299ull << 40, 0x2a0ull << 40, 0x2a1ull << 40, 0x2a2ull << 40, 0x2a3ull << 40, 0x2a4ull << 40, 0x2a5ull << 40, 0x2a6ull << 40, 0x2a7ull << 40, 0x2a8ull << 40, 0x2a9ull << 40, 0x2b0ull << 40, 0x2b1ull << 40, 0x2b2ull << 40, 0x2b3ull << 40, 0x2b4ull << 40, 0x2b5ull << 40, 0x2b6ull << 40, 0x2b7ull << 40, 0x2b8ull << 40, 0x2b9ull << 40, 0x2c0ull << 40, 0x2c1ull << 40, 0x2c2ull << 40, 0x2c3ull << 40, 0x2c4ull << 40, 0x2c5ull << 40, 0x2c6ull << 40, 0x2c7ull << 40, 0x2c8ull << 40, 0x2c9ull << 40, 0x2d0ull << 40, 0x2d1ull << 40, 0x2d2ull << 40, 0x2d3ull << 40, 0x2d4ull << 40, 0x2d5ull << 40, 0x2d6ull << 40, 0x2d7ull << 40, 0x2d8ull << 40, 0x2d9ull << 40, 0x2e0ull << 40, 0x2e1ull << 40, 0x2e2ull << 40, 0x2e3ull << 40, 0x2e4ull << 40, 0x2e5ull << 40, 0x2e6ull << 40, 0x2e7ull << 40, 0x2e8ull << 40, 0x2e9ull << 40, 0x2f0ull << 40, 0x2f1ull << 40, 0x2f2ull << 40, 0x2f3ull << 40, 0x2f4ull << 40, 0x2f5ull << 40, 0x2f6ull << 40, 0x2f7ull << 40, 0x2f8ull << 40, 0x2f9ull << 40, 0x28aull << 40, 0x28bull << 40, 0x2aaull << 40, 0x2abull << 40, 0x2caull << 40, 0x2cbull << 40, 0x2eaull << 40, 0x2ebull << 40, 0x2ceull << 40, 0x2cfull << 40, 0x29aull << 40, 0x29bull << 40, 0x2baull << 40, 0x2bbull << 40, 0x2daull << 40, 0x2dbull << 40, 0x2faull << 40, 0x2fbull << 40, 0x2deull << 40, 0x2dfull << 40, 0x300ull << 40, 0x301ull << 40, 0x302ull << 40, 0x303ull << 40, 0x304ull << 40, 0x305ull << 40, 0x306ull << 40, 0x307ull << 40, 0x308ull << 40, 0x309ull << 40, 0x310ull << 40, 0x311ull << 40, 0x312ull << 40, 0x313ull << 40, 0x314ull << 40, 0x315ull << 40, 0x316ull << 40, 0x317ull << 40, 0x318ull << 40, 0x319ull << 40, 0x320ull << 40, 0x321ull << 40, 0x322ull << 40, 0x323ull << 40, 0x324ull << 40, 0x325ull << 40, 0x326ull << 40, 0x327ull << 40, 0x328ull << 40, 0x329ull << 40, 0x330ull << 40, 0x331ull << 40, 0x332ull << 40, 0x333ull << 40, 0x334ull << 40, 0x335ull << 40, 0x336ull << 40, 0x337ull << 40, 0x338ull << 40, 0x339ull << 40, 0x340ull << 40, 0x341ull << 40, 0x342ull << 40, 0x343ull << 40, 0x344ull << 40, 0x345ull << 40, 0x346ull << 40, 0x347ull << 40, 0x348ull << 40, 0x349ull << 40, 0x350ull << 40, 0x351ull << 40, 0x352ull << 40, 0x353ull << 40, 0x354ull << 40, 0x355ull << 40, 0x356ull << 40, 0x357ull << 40, 0x358ull << 40, 0x359ull << 40, 0x360ull << 40, 0x361ull << 40, 0x362ull << 40, 0x363ull << 40, 0x364ull << 40, 0x365ull << 40, 0x366ull << 40, 0x367ull << 40, 0x368ull << 40, 0x369ull << 40, 0x370ull << 40, 0x371ull << 40, 0x372ull << 40, 0x373ull << 40, 0x374ull << 40, 0x375ull << 40, 0x376ull << 40, 0x377ull << 40, 0x378ull << 40, 0x379ull << 40, 0x30aull << 40, 0x30bull << 40, 0x32aull << 40, 0x32bull << 40, 0x34aull << 40, 0x34bull << 40, 0x36aull << 40, 0x36bull << 40, 0x34eull << 40, 0x34full << 40, 0x31aull << 40, 0x31bull << 40, 0x33aull << 40, 0x33bull << 40, 0x35aull << 40, 0x35bull << 40, 0x37aull << 40, 0x37bull << 40, 0x35eull << 40, 0x35full << 40, 0x380ull << 40, 0x381ull << 40, 0x382ull << 40, 0x383ull << 40, 0x384ull << 40, 0x385ull << 40, 0x386ull << 40, 0x387ull << 40, 0x388ull << 40, 0x389ull << 40, 0x390ull << 40, 0x391ull << 40, 0x392ull << 40, 0x393ull << 40, 0x394ull << 40, 0x395ull << 40, 0x396ull << 40, 0x397ull << 40, 0x398ull << 40, 0x399ull << 40, 0x3a0ull << 40, 0x3a1ull << 40, 0x3a2ull << 40, 0x3a3ull << 40, 0x3a4ull << 40, 0x3a5ull << 40, 0x3a6ull << 40, 0x3a7ull << 40, 0x3a8ull << 40, 0x3a9ull << 40, 0x3b0ull << 40, 0x3b1ull << 40, 0x3b2ull << 40, 0x3b3ull << 40, 0x3b4ull << 40, 0x3b5ull << 40, 0x3b6ull << 40, 0x3b7ull << 40, 0x3b8ull << 40, 0x3b9ull << 40, 0x3c0ull << 40, 0x3c1ull << 40, 0x3c2ull << 40, 0x3c3ull << 40, 0x3c4ull << 40, 0x3c5ull << 40, 0x3c6ull << 40, 0x3c7ull << 40, 0x3c8ull << 40, 0x3c9ull << 40, 0x3d0ull << 40, 0x3d1ull << 40, 0x3d2ull << 40, 0x3d3ull << 40, 0x3d4ull << 40, 0x3d5ull << 40, 0x3d6ull << 40, 0x3d7ull << 40, 0x3d8ull << 40, 0x3d9ull << 40, 0x3e0ull << 40, 0x3e1ull << 40, 0x3e2ull << 40, 0x3e3ull << 40, 0x3e4ull << 40, 0x3e5ull << 40, 0x3e6ull << 40, 0x3e7ull << 40, 0x3e8ull << 40, 0x3e9ull << 40, 0x3f0ull << 40, 0x3f1ull << 40, 0x3f2ull << 40, 0x3f3ull << 40, 0x3f4ull << 40, 0x3f5ull << 40, 0x3f6ull << 40, 0x3f7ull << 40, 0x3f8ull << 40, 0x3f9ull << 40, 0x38aull << 40, 0x38bull << 40, 0x3aaull << 40, 0x3abull << 40, 0x3caull << 40, 0x3cbull << 40, 0x3eaull << 40, 0x3ebull << 40, 0x3ceull << 40, 0x3cfull << 40, 0x39aull << 40, 0x39bull << 40, 0x3baull << 40, 0x3bbull << 40, 0x3daull << 40, 0x3dbull << 40, 0x3faull << 40, 0x3fbull << 40, 0x3deull << 40, 0x3dfull << 40, 0x00cull << 40, 0x00dull << 40, 0x10cull << 40, 0x10dull << 40, 0x20cull << 40, 0x20dull << 40, 0x30cull << 40, 0x30dull << 40, 0x02eull << 40, 0x02full << 40, 0x01cull << 40, 0x01dull << 40, 0x11cull << 40, 0x11dull << 40, 0x21cull << 40, 0x21dull << 40, 0x31cull << 40, 0x31dull << 40, 0x03eull << 40, 0x03full << 40, 0x02cull << 40, 0x02dull << 40, 0x12cull << 40, 0x12dull << 40, 0x22cull << 40, 0x22dull << 40, 0x32cull << 40, 0x32dull << 40, 0x12eull << 40, 0x12full << 40, 0x03cull << 40, 0x03dull << 40, 0x13cull << 40, 0x13dull << 40, 0x23cull << 40, 0x23dull << 40, 0x33cull << 40, 0x33dull << 40, 0x13eull << 40, 0x13full << 40, 0x04cull << 40, 0x04dull << 40, 0x14cull << 40, 0x14dull << 40, 0x24cull << 40, 0x24dull << 40, 0x34cull << 40, 0x34dull << 40, 0x22eull << 40, 0x22full << 40, 0x05cull << 40, 0x05dull << 40, 0x15cull << 40, 0x15dull << 40, 0x25cull << 40, 0x25dull << 40, 0x35cull << 40, 0x35dull << 40, 0x23eull << 40, 0x23full << 40, 0x06cull << 40, 0x06dull << 40, 0x16cull << 40, 0x16dull << 40, 0x26cull << 40, 0x26dull << 40, 0x36cull << 40, 0x36dull << 40, 0x32eull << 40, 0x32full << 40, 0x07cull << 40, 0x07dull << 40, 0x17cull << 40, 0x17dull << 40, 0x27cull << 40, 0x27dull << 40, 0x37cull << 40, 0x37dull << 40, 0x33eull << 40, 0x33full << 40, 0x00eull << 40, 0x00full << 40, 0x10eull << 40, 0x10full << 40, 0x20eull << 40, 0x20full << 40, 0x30eull << 40, 0x30full << 40, 0x06eull << 40, 0x06full << 40, 0x01eull << 40, 0x01full << 40, 0x11eull << 40, 0x11full << 40, 0x21eull << 40, 0x21full << 40, 0x31eull << 40, 0x31full << 40, 0x07eull << 40, 0x07full << 40, 0x08cull << 40, 0x08dull << 40, 0x18cull << 40, 0x18dull << 40, 0x28cull << 40, 0x28dull << 40, 0x38cull << 40, 0x38dull << 40, 0x0aeull << 40, 0x0afull << 40, 0x09cull << 40, 0x09dull << 40, 0x19cull << 40, 0x19dull << 40, 0x29cull << 40, 0x29dull << 40, 0x39cull << 40, 0x39dull << 40, 0x0beull << 40, 0x0bfull << 40, 0x0acull << 40, 0x0adull << 40, 0x1acull << 40, 0x1adull << 40, 0x2acull << 40, 0x2adull << 40, 0x3acull << 40, 0x3adull << 40, 0x1aeull << 40, 0x1afull << 40, 0x0bcull << 40, 0x0bdull << 40, 0x1bcull << 40, 0x1bdull << 40, 0x2bcull << 40, 0x2bdull << 40, 0x3bcull << 40, 0x3bdull << 40, 0x1beull << 40, 0x1bfull << 40, 0x0ccull << 40, 0x0cdull << 40, 0x1ccull << 40, 0x1cdull << 40, 0x2ccull << 40, 0x2cdull << 40, 0x3ccull << 40, 0x3cdull << 40, 0x2aeull << 40, 0x2afull << 40, 0x0dcull << 40, 0x0ddull << 40, 0x1dcull << 40, 0x1ddull << 40, 0x2dcull << 40, 0x2ddull << 40, 0x3dcull << 40, 0x3ddull << 40, 0x2beull << 40, 0x2bfull << 40, 0x0ecull << 40, 0x0edull << 40, 0x1ecull << 40, 0x1edull << 40, 0x2ecull << 40, 0x2edull << 40, 0x3ecull << 40, 0x3edull << 40, 0x3aeull << 40, 0x3afull << 40, 0x0fcull << 40, 0x0fdull << 40, 0x1fcull << 40, 0x1fdull << 40, 0x2fcull << 40, 0x2fdull << 40, 0x3fcull << 40, 0x3fdull << 40, 0x3beull << 40, 0x3bfull << 40, 0x08eull << 40, 0x08full << 40, 0x18eull << 40, 0x18full << 40, 0x28eull << 40, 0x28full << 40, 0x38eull << 40, 0x38full << 40, 0x0eeull << 40, 0x0efull << 40, 0x09eull << 40, 0x09full << 40, 0x19eull << 40, 0x19full << 40, 0x29eull << 40, 0x29full << 40, 0x39eull << 40, 0x39full << 40, 0x0feull << 40, 0x0ffull << 40 }; libdfp-1.0.17/libdecnumber/bid/decimal128.c000066400000000000000000000112331504475242000202310ustar00rootroot00000000000000/* Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define decimal128FromString __dpd128FromString #define decimal128ToString __dpd128ToString #define decimal128ToEngString __dpd128ToEngString #define decimal128FromNumber __dpd128FromNumber #define decimal128ToNumber __dpd128ToNumber #include "dpd/decimal128.c" #undef decimal128FromString #undef decimal128ToString #undef decimal128ToEngString #undef decimal128FromNumber #undef decimal128ToNumber #include "bid-dpd.h" #ifdef IN_LIBGCC2 #define decimal128FromString __decimal128FromString #define decimal128ToString __decimal128ToString #define decimal128ToEngString __decimal128ToEngString #define decimal128FromNumber __decimal128FromNumber #define decimal128ToNumber __decimal128ToNumber #endif decimal128 *decimal128FromString (decimal128 *, const char *, decContext *); char *decimal128ToString (const decimal128 *, char *); char *decimal128ToEngString (const decimal128 *, char *); decimal128 *decimal128FromNumber (decimal128 *, const decNumber *, decContext *); decNumber *decimal128ToNumber (const decimal128 *, decNumber *); /* The code for converting 128-bit values between DPD and BID presumes that the 64-bit halves of the 128-bit value are in little-endian order, so they need swapping on big-endian hosts. */ static void __host_to_ieee_128 (_Decimal128 in, decimal128 *out) { #if WORDS_BIGENDIAN memcpy ((char *) out, (char *) &in + 8, 8); memcpy ((char *) out + 8, (char *) &in, 8); #else memcpy ((char *) out, (char *) &in, 16); #endif } static void __ieee_to_host_128 (decimal128 in, _Decimal128 *out) { #if WORDS_BIGENDIAN memcpy ((char *) out, (char *) &in + 8, 8); memcpy ((char *) out + 8, (char *) &in, 8); #else memcpy ((char *) out, (char *) &in, 16); #endif } decimal128 * decimal128FromNumber (decimal128 *d128, const decNumber *dn, decContext *set) { /* decimal128 and _Decimal128 are different types. */ union { _Decimal128 _Dec; decimal128 dec; } u; __dpd128FromNumber (d128, dn, set); /* __dpd128FromNumber returns in big endian. But _dpd_to_bid128 takes host endian. */ __ieee_to_host_128 (*d128, &u._Dec); /* Convert DPD to BID. */ _dpd_to_bid128 (&u._Dec, &u._Dec); /* dfp.c is in bid endian. */ __host_to_ieee_128 (u._Dec, &u.dec); /* d128 is returned as a pointer to _Decimal128 here. */ *d128 = u.dec; return d128; } decNumber * decimal128ToNumber (const decimal128 *bid128, decNumber *dn) { /* decimal128 and _Decimal128 are different types. */ union { _Decimal128 _Dec; decimal128 dec; } u; /* bid128 is a pointer to _Decimal128 in bid endian. But _bid_to_dpd128 takes host endian. */ __ieee_to_host_128 (*bid128, &u._Dec); /* Convert BID to DPD. */ _bid_to_dpd128 (&u._Dec, &u._Dec); /* __dpd128ToNumber is in bid endian. */ __host_to_ieee_128 (u._Dec, &u.dec); return __dpd128ToNumber (&u.dec, dn); } char * decimal128ToString (const decimal128 *d128, char *string) { decNumber dn; /* work */ decimal128ToNumber (d128, &dn); decNumberToString (&dn, string); return string; } char * decimal128ToEngString (const decimal128 *d128, char *string) { decNumber dn; /* work */ decimal128ToNumber (d128, &dn); decNumberToEngString (&dn, string); return string; } decimal128 * decimal128FromString (decimal128 *result, const char *string, decContext *set) { decContext dc; /* work */ decNumber dn; /* .. */ decContextDefault (&dc, DEC_INIT_DECIMAL128); /* no traps, please */ dc.round = set->round; /* use supplied rounding */ decNumberFromString (&dn, string, &dc); /* will round if needed */ decimal128FromNumber (result, &dn, &dc); if (dc.status != 0) { /* something happened */ decContextSetStatus (set, dc.status); /* .. pass it on */ } return result; } libdfp-1.0.17/libdecnumber/bid/decimal128.h000066400000000000000000000000341504475242000202330ustar00rootroot00000000000000#include "dpd/decimal128.h" libdfp-1.0.17/libdecnumber/bid/decimal128Local.h000066400000000000000000000000411504475242000212040ustar00rootroot00000000000000#include "dpd/decimal128Local.h" libdfp-1.0.17/libdecnumber/bid/decimal128Symbols.h000066400000000000000000000000431504475242000216040ustar00rootroot00000000000000#include "dpd/decimal128Symbols.h" libdfp-1.0.17/libdecnumber/bid/decimal32.c000066400000000000000000000101751504475242000201470ustar00rootroot00000000000000/* Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define decimal32FromString __dpd32FromString #define decimal32ToString __dpd32ToString #define decimal32ToEngString __dpd32ToEngString #define decimal32FromNumber __dpd32FromNumber #define decimal32ToNumber __dpd32ToNumber #include "dpd/decimal32.c" #undef decimal32FromString #undef decimal32ToString #undef decimal32ToEngString #undef decimal32FromNumber #undef decimal32ToNumber #include "bid-dpd.h" #ifdef IN_LIBGCC2 #define decimal32FromString __decimal32FromString #define decimal32ToString __decimal32ToString #define decimal32ToEngString __decimal32ToEngString #define decimal32FromNumber __decimal32FromNumber #define decimal32ToNumber __decimal32ToNumber #endif decimal32 *decimal32FromString (decimal32 *, const char *, decContext *); char *decimal32ToString (const decimal32 *, char *); char *decimal32ToEngString (const decimal32 *, char *); decimal32 *decimal32FromNumber (decimal32 *, const decNumber *, decContext *); decNumber *decimal32ToNumber (const decimal32 *, decNumber *); static void __host_to_ieee_32 (_Decimal32 in, decimal32 *out) { memcpy ((char *) out, (char *) &in, 4); } static void __ieee_to_host_32 (decimal32 in, _Decimal32 *out) { memcpy ((char *) out, (char *) &in, 4); } decimal32 * decimal32FromNumber (decimal32 *d32, const decNumber *dn, decContext *set) { /* decimal32 and _Decimal32 are different types. */ union { _Decimal32 _Dec; decimal32 dec; } u; __dpd32FromNumber (d32, dn, set); /* __dpd32FromNumber returns in big endian. But _dpd_to_bid32 takes host endian. */ __ieee_to_host_32 (*d32, &u._Dec); /* Convert DPD to BID. */ _dpd_to_bid32 (&u._Dec, &u._Dec); /* dfp.c is in bid endian. */ __host_to_ieee_32 (u._Dec, &u.dec); /* d32 is returned as a pointer to _Decimal32 here. */ *d32 = u.dec; return d32; } decNumber * decimal32ToNumber (const decimal32 *bid32, decNumber *dn) { /* decimal32 and _Decimal32 are different types. */ union { _Decimal32 _Dec; decimal32 dec; } u; /* bid32 is a pointer to _Decimal32 in bid endian. But _bid_to_dpd32 takes host endian. */ __ieee_to_host_32 (*bid32, &u._Dec); /* Convert BID to DPD. */ _bid_to_dpd32 (&u._Dec, &u._Dec); /* __dpd32ToNumber is in bid endian. */ __host_to_ieee_32 (u._Dec, &u.dec); return __dpd32ToNumber (&u.dec, dn); } char * decimal32ToString (const decimal32 *d32, char *string) { decNumber dn; /* work */ decimal32ToNumber (d32, &dn); decNumberToString (&dn, string); return string; } char * decimal32ToEngString (const decimal32 *d32, char *string) { decNumber dn; /* work */ decimal32ToNumber (d32, &dn); decNumberToEngString (&dn, string); return string; } decimal32 * decimal32FromString (decimal32 *result, const char *string, decContext *set) { decContext dc; /* work */ decNumber dn; /* .. */ decContextDefault (&dc, DEC_INIT_DECIMAL32); /* no traps, please */ dc.round = set->round; /* use supplied rounding */ decNumberFromString (&dn, string, &dc); /* will round if needed */ decimal32FromNumber (result, &dn, &dc); if (dc.status != 0) { /* something happened */ decContextSetStatus (set, dc.status); /* .. pass it on */ } return result; } libdfp-1.0.17/libdecnumber/bid/decimal32.h000066400000000000000000000000331504475242000201440ustar00rootroot00000000000000#include "dpd/decimal32.h" libdfp-1.0.17/libdecnumber/bid/decimal32Symbols.h000066400000000000000000000000421504475242000215150ustar00rootroot00000000000000#include "dpd/decimal32Symbols.h" libdfp-1.0.17/libdecnumber/bid/decimal64.c000066400000000000000000000101731504475242000201520ustar00rootroot00000000000000/* Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #define decimal64FromString __dpd64FromString #define decimal64ToString __dpd64ToString #define decimal64ToEngString __dpd64ToEngString #define decimal64FromNumber __dpd64FromNumber #define decimal64ToNumber __dpd64ToNumber #include "dpd/decimal64.c" #undef decimal64FromString #undef decimal64ToString #undef decimal64ToEngString #undef decimal64FromNumber #undef decimal64ToNumber #include "bid-dpd.h" #ifdef IN_LIBGCC2 #define decimal64FromString __decimal64FromString #define decimal64ToString __decimal64ToString #define decimal64ToEngString __decimal64ToEngString #define decimal64FromNumber __decimal64FromNumber #define decimal64ToNumber __decimal64ToNumber #endif decimal64 *decimal64FromString (decimal64 *, const char *, decContext *); char *decimal64ToString (const decimal64 *, char *); char *decimal64ToEngString (const decimal64 *, char *); decimal64 *decimal64FromNumber (decimal64 *, const decNumber *, decContext *); decNumber *decimal64ToNumber (const decimal64 *, decNumber *); static void __host_to_ieee_64 (_Decimal64 in, decimal64 *out) { memcpy ((char *) out, (char *) &in, 8); } static void __ieee_to_host_64 (decimal64 in, _Decimal64 *out) { memcpy ((char *) out, (char *) &in, 8); } decimal64 * decimal64FromNumber (decimal64 *d64, const decNumber *dn, decContext *set) { /* decimal64 and _Decimal64 are different types. */ union { _Decimal64 _Dec; decimal64 dec; } u; __dpd64FromNumber (d64, dn, set); /* __dpd64FromNumber returns in big endian. But _dpd_to_bid64 takes host endian. */ __ieee_to_host_64 (*d64, &u._Dec); /* Convert DPD to BID. */ _dpd_to_bid64 (&u._Dec, &u._Dec); /* dfp.c is in bid endian. */ __host_to_ieee_64 (u._Dec, &u.dec); /* d64 is returned as a pointer to _Decimal64 here. */ *d64 = u.dec; return d64; } decNumber * decimal64ToNumber (const decimal64 *bid64, decNumber *dn) { /* decimal64 and _Decimal64 are different types. */ union { _Decimal64 _Dec; decimal64 dec; } u; /* bid64 is a pointer to _Decimal64 in bid endian. But _bid_to_dpd64 takes host endian. */ __ieee_to_host_64 (*bid64, &u._Dec); /* Convert BID to DPD. */ _bid_to_dpd64 (&u._Dec, &u._Dec); /* __dpd64ToNumber is in bid endian. */ __host_to_ieee_64 (u._Dec, &u.dec); return __dpd64ToNumber (&u.dec, dn); } char * decimal64ToString (const decimal64 *d64, char *string) { decNumber dn; /* work */ decimal64ToNumber (d64, &dn); decNumberToString (&dn, string); return string; } char * decimal64ToEngString (const decimal64 *d64, char *string) { decNumber dn; /* work */ decimal64ToNumber (d64, &dn); decNumberToEngString (&dn, string); return string; } decimal64 * decimal64FromString (decimal64 *result, const char *string, decContext *set) { decContext dc; /* work */ decNumber dn; /* .. */ decContextDefault (&dc, DEC_INIT_DECIMAL64); /* no traps, please */ dc.round = set->round; /* use supplied rounding */ decNumberFromString (&dn, string, &dc); /* will round if needed */ decimal64FromNumber (result, &dn, &dc); if (dc.status != 0) { /* something happened */ decContextSetStatus (set, dc.status); /* .. pass it on */ } return result; } libdfp-1.0.17/libdecnumber/bid/decimal64.h000066400000000000000000000000331504475242000201510ustar00rootroot00000000000000#include "dpd/decimal64.h" libdfp-1.0.17/libdecnumber/bid/decimal64Symbols.h000066400000000000000000000000421504475242000215220ustar00rootroot00000000000000#include "dpd/decimal64Symbols.h" libdfp-1.0.17/libdecnumber/bid/host-ieee128.c000066400000000000000000000035231504475242000205200ustar00rootroot00000000000000/* This is a software decimal floating point library. Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include #include "dconfig.h" #include "bid-dpd.h" #include "decimal128.h" void __host_to_ieee_128 (_Decimal128 in, decimal128 *out); void __ieee_to_host_128 (decimal128 in, _Decimal128 *out); /* The code for converting 128-bit values between DPD and BID presumes that the 64-bit halves of the 128-bit value are in little-endian order, so they need swapping on big-endian hosts. */ void __host_to_ieee_128 (_Decimal128 in, decimal128 *out) { #if WORDS_BIGENDIAN memcpy ((char *) out, (char *) &in + 8, 8); memcpy ((char *) out + 8, (char *) &in, 8); #else memcpy ((char *) out, (char *) &in, 16); #endif } void __ieee_to_host_128 (decimal128 in, _Decimal128 *out) { #if WORDS_BIGENDIAN memcpy ((char *) out, (char *) &in + 8, 8); memcpy ((char *) out + 8, (char *) &in, 8); #else memcpy ((char *) out, (char *) &in, 16); #endif } libdfp-1.0.17/libdecnumber/bid/host-ieee32.c000066400000000000000000000035161504475242000204340ustar00rootroot00000000000000/* This is a software decimal floating point library. Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* This implements IEEE 754R decimal floating point arithmetic, but does not provide a mechanism for setting the rounding mode, or for generating or handling exceptions. Conversions between decimal floating point types and other types depend on C library functions. Contributed by Ben Elliston . */ /* The intended way to use this file is to make two copies, add `#define ' to one copy, then compile both copies and add them to libgcc.a. */ #include #include "bid-dpd.h" #include "decimal32.h" void __host_to_ieee_32 (_Decimal32 in, decimal32 *out); void __ieee_to_host_32 (decimal32 in, _Decimal32 *out); void __host_to_ieee_32 (_Decimal32 in, decimal32 *out) { memcpy ((char *) out, (char *) &in, 4); } void __ieee_to_host_32 (decimal32 in, _Decimal32 *out) { memcpy ((char *) out, (char *) &in, 4); } libdfp-1.0.17/libdecnumber/bid/host-ieee64.c000066400000000000000000000035161504475242000204410ustar00rootroot00000000000000/* This is a software decimal floating point library. Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* This implements IEEE 754R decimal floating point arithmetic, but does not provide a mechanism for setting the rounding mode, or for generating or handling exceptions. Conversions between decimal floating point types and other types depend on C library functions. Contributed by Ben Elliston . */ /* The intended way to use this file is to make two copies, add `#define ' to one copy, then compile both copies and add them to libgcc.a. */ #include #include "bid-dpd.h" #include "decimal64.h" void __host_to_ieee_64 (_Decimal64 in, decimal64 *out); void __ieee_to_host_64 (decimal64 in, _Decimal64 *out); void __host_to_ieee_64 (_Decimal64 in, decimal64 *out) { memcpy ((char *) out, (char *) &in, 8); } void __ieee_to_host_64 (decimal64 in, _Decimal64 *out) { memcpy ((char *) out, (char *) &in, 8); } libdfp-1.0.17/libdecnumber/config.in000066400000000000000000000046771504475242000173110ustar00rootroot00000000000000/* config.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #undef HAVE_CTYPE_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `long int' if does not define. */ #undef off_t libdfp-1.0.17/libdecnumber/configure000077500000000000000000005566431504475242000174300ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for libdfp/libdecnumber 1.0.17. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/libdfp/libdfp/issues about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libdfp/libdecnumber' PACKAGE_TARNAME='libdfp-libdecnumber' PACKAGE_VERSION='1.0.17' PACKAGE_STRING='libdfp/libdecnumber 1.0.17' PACKAGE_BUGREPORT='https://github.com/libdfp/libdfp/issues' PACKAGE_URL='' ac_unique_file="decNumber.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS PICFLAG ADDITIONAL_OBJS enable_decimal_float target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build MAINT EGREP GREP CPP WERROR WARN_PEDANTIC WARN_CFLAGS AUTOHEADER AUTOCONF ACLOCAL RANLIB OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC SET_MAKE target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_werror_always enable_maintainer_mode enable_decimal_float enable_host_shared ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libdfp/libdecnumber 1.0.17 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libdfp-libdecnumber] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libdfp/libdecnumber 1.0.17:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-werror-always enable -Werror despite compiler version --enable-maintainer-mode enable rules only needed by maintainers --enable-decimal-float={no,yes,bid,dpd} enable decimal float extension to C. Selecting 'bid' or 'dpd' choses which decimal floating point format to use --enable-host-shared build host code as shared libraries Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF libdfp/libdecnumber configure 1.0.17 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------------------------ ## ## Report this to https://github.com/libdfp/libdfp/issues ## ## ------------------------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libdfp/libdecnumber $as_me 1.0.17, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in ../scripts "$srcdir"/../scripts; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../scripts \"$srcdir\"/../scripts" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Checks for programs. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing for ac_prog in aclocal do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ACLOCAL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ACLOCAL"; then ac_cv_prog_ACLOCAL="$ACLOCAL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ACLOCAL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ACLOCAL=$ac_cv_prog_ACLOCAL if test -n "$ACLOCAL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ACLOCAL" >&5 $as_echo "$ACLOCAL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ACLOCAL" && break done test -n "$ACLOCAL" || ACLOCAL="$MISSING aclocal" for ac_prog in autoconf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AUTOCONF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AUTOCONF"; then ac_cv_prog_AUTOCONF="$AUTOCONF" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AUTOCONF="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AUTOCONF=$ac_cv_prog_AUTOCONF if test -n "$AUTOCONF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AUTOCONF" >&5 $as_echo "$AUTOCONF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AUTOCONF" && break done test -n "$AUTOCONF" || AUTOCONF="$MISSING autoconf" for ac_prog in autoheader do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AUTOHEADER+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AUTOHEADER"; then ac_cv_prog_AUTOHEADER="$AUTOHEADER" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AUTOHEADER="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AUTOHEADER=$ac_cv_prog_AUTOHEADER if test -n "$AUTOHEADER"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AUTOHEADER" >&5 $as_echo "$AUTOHEADER" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AUTOHEADER" && break done test -n "$AUTOHEADER" || AUTOHEADER="$MISSING autoheader" # Figure out what compiler warnings we can enable. # See config/warnings.m4 for details. WARN_CFLAGS= save_CFLAGS="$CFLAGS" for option in -W -Wall -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wold-style-definition \ -Wmissing-format-attribute -Wcast-qual; do as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5 $as_echo_n "checking whether $CC supports $option... " >&6; } if eval \${$as_acx_Woption+:} false; then : $as_echo_n "(cached) " >&6 else CFLAGS="$option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_acx_Woption=yes" else eval "$as_acx_Woption=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_acx_Woption { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then : WARN_CFLAGS="$WARN_CFLAGS${WARN_CFLAGS:+ }$option" fi done CFLAGS="$save_CFLAGS" WARN_PEDANTIC= if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic -Wno-long-long" >&5 $as_echo_n "checking whether $CC supports -pedantic -Wno-long-long... " >&6; } if ${acx_cv_prog_cc_pedantic__Wno_long_long+:} false; then : $as_echo_n "(cached) " >&6 else save_CFLAGS="$CFLAGS" CFLAGS="-pedantic -Wno-long-long" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : acx_cv_prog_cc_pedantic__Wno_long_long=yes else acx_cv_prog_cc_pedantic__Wno_long_long=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_prog_cc_pedantic__Wno_long_long" >&5 $as_echo "$acx_cv_prog_cc_pedantic__Wno_long_long" >&6; } if test $acx_cv_prog_cc_pedantic__Wno_long_long = yes; then : WARN_PEDANTIC="$WARN_PEDANTIC${WARN_PEDANTIC:+ }-pedantic -Wno-long-long" fi fi # Only enable with --enable-werror-always until existing warnings are # corrected. WERROR= # Check whether --enable-werror-always was given. if test "${enable_werror_always+set}" = set; then : enableval=$enable_werror_always; else enable_werror_always=no fi if test $enable_werror_always = yes; then : WERROR="$WERROR${WERROR:+ }-Werror" fi # Checks for header files. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in ctype.h stddef.h string.h stdio.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done inttype_headers=`echo inttypes.h sys/inttypes.h | sed -e 's/,/ /g'` acx_cv_header_stdint=stddef.h acx_cv_header_stdint_kind="(already complete)" for i in stdint.h $inttype_headers; do unset ac_cv_type_uintptr_t unset ac_cv_type_uintmax_t unset ac_cv_type_int_least32_t unset ac_cv_type_int_fast32_t unset ac_cv_type_uint64_t $as_echo_n "looking for a compliant stdint.h in $i, " >&6 ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "#include #include <$i> " if test "x$ac_cv_type_uintmax_t" = xyes; then : acx_cv_header_stdint=$i else continue fi ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include #include <$i> " if test "x$ac_cv_type_uintptr_t" = xyes; then : else acx_cv_header_stdint_kind="(mostly complete)" fi ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include #include <$i> " if test "x$ac_cv_type_int_least32_t" = xyes; then : else acx_cv_header_stdint_kind="(mostly complete)" fi ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include #include <$i> " if test "x$ac_cv_type_int_fast32_t" = xyes; then : else acx_cv_header_stdint_kind="(mostly complete)" fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include #include <$i> " if test "x$ac_cv_type_uint64_t" = xyes; then : else acx_cv_header_stdint_kind="(lacks uint64_t)" fi break done if test "$acx_cv_header_stdint" = stddef.h; then acx_cv_header_stdint_kind="(lacks uintmax_t)" for i in stdint.h $inttype_headers; do unset ac_cv_type_uintptr_t unset ac_cv_type_uint32_t unset ac_cv_type_uint64_t $as_echo_n "looking for an incomplete stdint.h in $i, " >&6 ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include #include <$i> " if test "x$ac_cv_type_uint32_t" = xyes; then : acx_cv_header_stdint=$i else continue fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include #include <$i> " if test "x$ac_cv_type_uint64_t" = xyes; then : fi ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include #include <$i> " if test "x$ac_cv_type_uintptr_t" = xyes; then : fi break done fi if test "$acx_cv_header_stdint" = stddef.h; then acx_cv_header_stdint_kind="(u_intXX_t style)" for i in sys/types.h $inttype_headers; do unset ac_cv_type_u_int32_t unset ac_cv_type_u_int64_t $as_echo_n "looking for u_intXX_t types in $i, " >&6 ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include #include <$i> " if test "x$ac_cv_type_u_int32_t" = xyes; then : acx_cv_header_stdint=$i else continue fi ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include #include <$i> " if test "x$ac_cv_type_u_int64_t" = xyes; then : fi break done fi if test "$acx_cv_header_stdint" = stddef.h; then acx_cv_header_stdint_kind="(using manual detection)" fi test -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no test -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no test -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no test -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no test -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no # ----------------- Summarize what we found so far { $as_echo "$as_me:${as_lineno-$LINENO}: checking what to include in gstdint.h" >&5 $as_echo_n "checking what to include in gstdint.h... " >&6; } case `$as_basename -- gstdint.h || $as_expr X/gstdint.h : '.*/\([^/][^/]*\)/*$' \| \ Xgstdint.h : 'X\(//\)$' \| \ Xgstdint.h : 'X\(/\)' \| . 2>/dev/null || $as_echo X/gstdint.h | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` in stdint.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5 $as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; inttypes.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5 $as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; *) ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_header_stdint $acx_cv_header_stdint_kind" >&5 $as_echo "$acx_cv_header_stdint $acx_cv_header_stdint_kind" >&6; } # ----------------- done included file, check C basic types -------- # Lacking an uintptr_t? Test size of void * case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in stddef.h:* | *:no) # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 $as_echo_n "checking size of void *... " >&6; } if ${ac_cv_sizeof_void_p+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : else if test "$ac_cv_type_void_p" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_void_p=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 $as_echo "$ac_cv_sizeof_void_p" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF ;; esac # Lacking an uint64_t? Test size of long case "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in stddef.h:*:* | *:no:no) # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF ;; esac if test $acx_cv_header_stdint = stddef.h; then # Lacking a good header? Test size of everything and deduce all types. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 $as_echo_n "checking size of char... " >&6; } if ${ac_cv_sizeof_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : else if test "$ac_cv_type_char" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 $as_echo "$ac_cv_sizeof_char" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int8_t" >&5 $as_echo_n "checking for type equivalent to int8_t... " >&6; } case "$ac_cv_sizeof_char" in 1) acx_cv_type_int8_t=char ;; *) as_fn_error please report a bug "no 8-bit type" "$LINENO" 5 esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int8_t" >&5 $as_echo "$acx_cv_type_int8_t" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int16_t" >&5 $as_echo_n "checking for type equivalent to int16_t... " >&6; } case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in 2:*) acx_cv_type_int16_t=int ;; *:2) acx_cv_type_int16_t=short ;; *) as_fn_error please report a bug "no 16-bit type" "$LINENO" 5 esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int16_t" >&5 $as_echo "$acx_cv_type_int16_t" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int32_t" >&5 $as_echo_n "checking for type equivalent to int32_t... " >&6; } case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in 4:*) acx_cv_type_int32_t=int ;; *:4) acx_cv_type_int32_t=long ;; *) as_fn_error please report a bug "no 32-bit type" "$LINENO" 5 esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int32_t" >&5 $as_echo "$acx_cv_type_int32_t" >&6; } fi # These tests are here to make the output prettier if test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then case "$ac_cv_sizeof_long" in 8) acx_cv_type_int64_t=long ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int64_t" >&5 $as_echo_n "checking for type equivalent to int64_t... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${acx_cv_type_int64_t-'using preprocessor symbols'}" >&5 $as_echo "${acx_cv_type_int64_t-'using preprocessor symbols'}" >&6; } fi # Now we can use the above types if test "$ac_cv_type_uintptr_t" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to intptr_t" >&5 $as_echo_n "checking for type equivalent to intptr_t... " >&6; } case $ac_cv_sizeof_void_p in 2) acx_cv_type_intptr_t=int16_t ;; 4) acx_cv_type_intptr_t=int32_t ;; 8) acx_cv_type_intptr_t=int64_t ;; *) as_fn_error please report a bug "no equivalent for intptr_t" "$LINENO" 5 esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_intptr_t" >&5 $as_echo "$acx_cv_type_intptr_t" >&6; } fi # ----------------- done all checks, emit header ------------- ac_config_commands="$ac_config_commands gstdint.h" # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # Checks for library functions. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; else enable_maintainer_mode=no fi if test "x$enable_maintainer_mode" = xno; then MAINT='#' else MAINT= fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # Default decimal format # If you change the defaults here, be sure to change them in the GCC directory also { $as_echo "$as_me:${as_lineno-$LINENO}: checking for decimal floating point" >&5 $as_echo_n "checking for decimal floating point... " >&6; } # Check whether --enable-decimal-float was given. if test "${enable_decimal_float+set}" = set; then : enableval=$enable_decimal_float; case $enable_decimal_float in yes | no | bid | dpd) default_decimal_float=$enable_decimal_float ;; *) as_fn_error $? "'$enable_decimal_float' is an invalid value for --enable-decimal-float. Valid choices are 'yes', 'bid', 'dpd', and 'no'." "$LINENO" 5 ;; esac else case $target in aarch64* | \ powerpc*-*-linux* | i?86*-*-linux* | x86_64*-*-linux* | s390*-*-linux* | \ i?86*-*-elfiamcu | i?86*-*-gnu* | x86_64*-*-gnu* | \ i?86*-*-mingw* | x86_64*-*-mingw* | \ i?86*-*-cygwin* | x86_64*-*-cygwin*) enable_decimal_float=yes ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: decimal float is not supported for this target, ignored" >&5 $as_echo "$as_me: WARNING: decimal float is not supported for this target, ignored" >&2;} enable_decimal_float=no ;; esac fi # x86's use BID format instead of DPD case x$enable_decimal_float in xyes) case $target in aarch64* | i?86*-*-* | x86_64*-*-*) enable_decimal_float=bid ;; *) enable_decimal_float=dpd ;; esac default_decimal_float=$enable_decimal_float ;; xno) # ENABLE_DECIMAL_FLOAT is set to 0. But we have to have proper # dependency on libdecnumber. default_decimal_float=dpd ;; esac # Use default_decimal_float for dependency. enable_decimal_float=$default_decimal_float # If BID is being used, additional objects should be linked in. if test x$enable_decimal_float = xbid; then ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(bid_OBJS)" else ADDITIONAL_OBJS= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_decimal_float" >&5 $as_echo "$enable_decimal_float" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # Enable --enable-host-shared. # Check whether --enable-host-shared was given. if test "${enable_host_shared+set}" = set; then : enableval=$enable_host_shared; PICFLAG=-fPIC else PICFLAG= fi # Output. ac_config_headers="$ac_config_headers libdecnumberconfig/config.h:config.in" ac_config_files="$ac_config_files Makefile.libdecnumber:Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libdfp/libdecnumber $as_me 1.0.17, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ libdfp/libdecnumber config.status 1.0.17 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # GCC="$GCC" CC="$CC" acx_cv_header_stdint="$acx_cv_header_stdint" acx_cv_type_int8_t="$acx_cv_type_int8_t" acx_cv_type_int16_t="$acx_cv_type_int16_t" acx_cv_type_int32_t="$acx_cv_type_int32_t" acx_cv_type_int64_t="$acx_cv_type_int64_t" acx_cv_type_intptr_t="$acx_cv_type_intptr_t" ac_cv_type_uintmax_t="$ac_cv_type_uintmax_t" ac_cv_type_uintptr_t="$ac_cv_type_uintptr_t" ac_cv_type_uint64_t="$ac_cv_type_uint64_t" ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" ac_cv_type_u_int32_t="$ac_cv_type_u_int32_t" ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" ac_cv_sizeof_void_p="$ac_cv_sizeof_void_p" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "gstdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS gstdint.h" ;; "libdecnumberconfig/config.h") CONFIG_HEADERS="$CONFIG_HEADERS libdecnumberconfig/config.h:config.in" ;; "Makefile.libdecnumber") CONFIG_FILES="$CONFIG_FILES Makefile.libdecnumber:Makefile.in" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "gstdint.h":C) if test "$GCC" = yes; then echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h else echo "/* generated for $CC */" > tmp-stdint.h fi sed 's/^ *//' >> tmp-stdint.h < EOF if test "$acx_cv_header_stdint" != stdint.h; then echo "#include " >> tmp-stdint.h fi if test "$acx_cv_header_stdint" != stddef.h; then echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h fi sed 's/^ *//' >> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <= 199901L #ifndef _INT64_T #define _INT64_T #ifndef __int64_t_defined typedef long long int64_t; #endif #endif #ifndef _UINT64_T #define _UINT64_T typedef unsigned long long uint64_t; #endif #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0 /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and does not implement __extension__. But that compiler doesn't define __GNUC_MINOR__. */ # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) # define __extension__ # endif # ifndef _INT64_T # define _INT64_T __extension__ typedef long long int64_t; # endif # ifndef _UINT64_T # define _UINT64_T __extension__ typedef unsigned long long uint64_t; # endif #elif !defined __STRICT_ANSI__ # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ # ifndef _INT64_T # define _INT64_T typedef __int64 int64_t; # endif # ifndef _UINT64_T # define _UINT64_T typedef unsigned __int64 uint64_t; # endif # endif /* compiler */ #endif /* ANSI version */ EOF fi # ------------- done int64_t types, emit intptr types ------------ if test "$ac_cv_type_uintptr_t" != yes; then sed 's/^ *//' >> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h < stamp-h1 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi libdfp-1.0.17/libdecnumber/configure.ac000066400000000000000000000062261504475242000177720ustar00rootroot00000000000000# configure.ac for libdecnumber -*- Autoconf -*- # Process this file with autoconf to generate a configuration script. # Copyright (C) 2005-2016 Free Software Foundation, Inc. # This file is part of GCC. # GCC is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3, or (at your option) any # later #version. # GCC 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 GCC; see the file COPYING3. If not see # . AC_PREREQ(2.64) AC_INIT([libdfp/libdecnumber],[1.0.17],[https://github.com/libdfp/libdfp/issues]) AC_CONFIG_SRCDIR(decNumber.h) AC_CONFIG_MACRO_DIR(../config) AC_CONFIG_AUX_DIR(../scripts) # Checks for programs. AC_PROG_MAKE_SET AC_PROG_CC AC_PROG_RANLIB MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal]) AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf]) AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader]) # Figure out what compiler warnings we can enable. # See config/warnings.m4 for details. ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wold-style-definition \ -Wmissing-format-attribute -Wcast-qual]) ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long]) # Only enable with --enable-werror-always until existing warnings are # corrected. ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual]) # Checks for header files. AC_CHECK_HEADERS(ctype.h stddef.h string.h stdio.h) GCC_HEADER_STDINT(gstdint.h) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_OFF_T AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) # Checks for library functions. AC_HEADER_STDC AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable rules only needed by maintainers],, enable_maintainer_mode=no) if test "x$enable_maintainer_mode" = xno; then MAINT='#' else MAINT= fi AC_SUBST(MAINT) AC_CANONICAL_TARGET # Default decimal format # If you change the defaults here, be sure to change them in the GCC directory also AC_MSG_CHECKING([for decimal floating point]) GCC_AC_ENABLE_DECIMAL_FLOAT([$target]) # Use default_decimal_float for dependency. enable_decimal_float=$default_decimal_float # If BID is being used, additional objects should be linked in. if test x$enable_decimal_float = xbid; then ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(bid_OBJS)" else ADDITIONAL_OBJS= fi AC_MSG_RESULT($enable_decimal_float) AC_SUBST(enable_decimal_float) AC_SUBST(ADDITIONAL_OBJS) AC_C_BIGENDIAN # Enable --enable-host-shared. AC_ARG_ENABLE(host-shared, [AS_HELP_STRING([--enable-host-shared], [build host code as shared libraries])], [PICFLAG=-fPIC], [PICFLAG=]) AC_SUBST(PICFLAG) # Output. AC_CONFIG_HEADERS(libdecnumberconfig/config.h:config.in, [echo timestamp > stamp-h1]) AC_CONFIG_FILES(Makefile.libdecnumber:Makefile.in) AC_OUTPUT libdfp-1.0.17/libdecnumber/dconfig.h000066400000000000000000000023171504475242000172630ustar00rootroot00000000000000/* Configure decNumber for either host or target. Copyright (C) 2008-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifdef IN_LIBGCC2 #include "tconfig.h" #include "coretypes.h" #include "tm.h" #if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__ #define WORDS_BIGENDIAN 1 #endif #else #include "config.h" #endif libdfp-1.0.17/libdecnumber/decBasic.c000066400000000000000000004713231504475242000173510ustar00rootroot00000000000000/* Common base code for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decBasic.c -- common base code for Basic decimal types */ /* ------------------------------------------------------------------ */ /* This module comprises code that is shared between decDouble and */ /* decQuad (but not decSingle). The main arithmetic operations are */ /* here (Add, Subtract, Multiply, FMA, and Division operators). */ /* */ /* Unlike decNumber, parameterization takes place at compile time */ /* rather than at runtime. The parameters are set in the decDouble.c */ /* (etc.) files, which then include this one to produce the compiled */ /* code. The functions here, therefore, are code shared between */ /* multiple formats. */ /* */ /* This must be included after decCommon.c. */ /* ------------------------------------------------------------------ */ /* Names here refer to decFloat rather than to decDouble, etc., and */ /* the functions are in strict alphabetical order. */ /* The compile-time flags SINGLE, DOUBLE, and QUAD are set up in */ /* decCommon.c */ #if !defined(QUAD) #error decBasic.c must be included after decCommon.c #endif #if SINGLE #error Routines in decBasic.c are for decDouble and decQuad only #endif /* Private constants */ #define DIVIDE 0x80000000 /* Divide operations [as flags] */ #define REMAINDER 0x40000000 /* .. */ #define DIVIDEINT 0x20000000 /* .. */ #define REMNEAR 0x10000000 /* .. */ /* Private functions (local, used only by routines in this module) */ static decFloat *decDivide(decFloat *, const decFloat *, const decFloat *, decContext *, uInt); static decFloat *decCanonical(decFloat *, const decFloat *); static void decFiniteMultiply(bcdnum *, uByte *, const decFloat *, const decFloat *); static decFloat *decInfinity(decFloat *, const decFloat *); static decFloat *decInvalid(decFloat *, decContext *); static decFloat *decNaNs(decFloat *, const decFloat *, const decFloat *, decContext *); static Int decNumCompare(const decFloat *, const decFloat *, Flag); static decFloat *decToIntegral(decFloat *, const decFloat *, decContext *, enum rounding, Flag); static uInt decToInt32(const decFloat *, decContext *, enum rounding, Flag, Flag); /* ------------------------------------------------------------------ */ /* decCanonical -- copy a decFloat, making canonical */ /* */ /* result gets the canonicalized df */ /* df is the decFloat to copy and make canonical */ /* returns result */ /* */ /* This is exposed via decFloatCanonical for Double and Quad only. */ /* This works on specials, too; no error or exception is possible. */ /* ------------------------------------------------------------------ */ static decFloat * decCanonical(decFloat *result, const decFloat *df) { uInt encode, precode, dpd; /* work */ uInt inword, uoff, canon; /* .. */ Int n; /* counter (down) */ if (df!=result) *result=*df; /* effect copy if needed */ if (DFISSPECIAL(result)) { if (DFISINF(result)) return decInfinity(result, df); /* clean Infinity */ /* is a NaN */ DFWORD(result, 0)&=~ECONNANMASK; /* clear ECON except selector */ if (DFISCCZERO(df)) return result; /* coefficient continuation is 0 */ /* drop through to check payload */ } /* return quickly if the coefficient continuation is canonical */ { /* declare block */ #if DOUBLE uInt sourhi=DFWORD(df, 0); uInt sourlo=DFWORD(df, 1); if (CANONDPDOFF(sourhi, 8) && CANONDPDTWO(sourhi, sourlo, 30) && CANONDPDOFF(sourlo, 20) && CANONDPDOFF(sourlo, 10) && CANONDPDOFF(sourlo, 0)) return result; #elif QUAD uInt sourhi=DFWORD(df, 0); uInt sourmh=DFWORD(df, 1); uInt sourml=DFWORD(df, 2); uInt sourlo=DFWORD(df, 3); if (CANONDPDOFF(sourhi, 4) && CANONDPDTWO(sourhi, sourmh, 26) && CANONDPDOFF(sourmh, 16) && CANONDPDOFF(sourmh, 6) && CANONDPDTWO(sourmh, sourml, 28) && CANONDPDOFF(sourml, 18) && CANONDPDOFF(sourml, 8) && CANONDPDTWO(sourml, sourlo, 30) && CANONDPDOFF(sourlo, 20) && CANONDPDOFF(sourlo, 10) && CANONDPDOFF(sourlo, 0)) return result; #endif } /* block */ /* Loop to repair a non-canonical coefficent, as needed */ inword=DECWORDS-1; /* current input word */ uoff=0; /* bit offset of declet */ encode=DFWORD(result, inword); for (n=DECLETS-1; n>=0; n--) { /* count down declets of 10 bits */ dpd=encode>>uoff; uoff+=10; if (uoff>32) { /* crossed uInt boundary */ inword--; encode=DFWORD(result, inword); uoff-=32; dpd|=encode<<(10-uoff); /* get pending bits */ } dpd&=0x3ff; /* clear uninteresting bits */ if (dpd<0x16e) continue; /* must be canonical */ canon=BIN2DPD[DPD2BIN[dpd]]; /* determine canonical declet */ if (canon==dpd) continue; /* have canonical declet */ /* need to replace declet */ if (uoff>=10) { /* all within current word */ encode&=~(0x3ff<<(uoff-10)); /* clear the 10 bits ready for replace */ encode|=canon<<(uoff-10); /* insert the canonical form */ DFWORD(result, inword)=encode; /* .. and save */ continue; } /* straddled words */ precode=DFWORD(result, inword+1); /* get previous */ precode&=0xffffffff>>(10-uoff); /* clear top bits */ DFWORD(result, inword+1)=precode|(canon<<(32-(10-uoff))); encode&=0xffffffff<>(10-uoff); /* insert canonical */ DFWORD(result, inword)=encode; /* .. and save */ } /* n */ return result; } /* decCanonical */ /* ------------------------------------------------------------------ */ /* decDivide -- divide operations */ /* */ /* result gets the result of dividing dfl by dfr: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* op is the operation selector */ /* returns result */ /* */ /* op is one of DIVIDE, REMAINDER, DIVIDEINT, or REMNEAR. */ /* ------------------------------------------------------------------ */ #define DIVCOUNT 0 /* 1 to instrument subtractions counter */ #define DIVBASE ((uInt)BILLION) /* the base used for divide */ #define DIVOPLEN DECPMAX9 /* operand length ('digits' base 10**9) */ #define DIVACCLEN (DIVOPLEN*3) /* accumulator length (ditto) */ static decFloat * decDivide(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set, uInt op) { decFloat quotient; /* for remainders */ bcdnum num; /* for final conversion */ uInt acc[DIVACCLEN]; /* coefficent in base-billion .. */ uInt div[DIVOPLEN]; /* divisor in base-billion .. */ uInt quo[DIVOPLEN+1]; /* quotient in base-billion .. */ uByte bcdacc[(DIVOPLEN+1)*9+2]; /* for quotient in BCD, +1, +1 */ uInt *msua, *msud, *msuq; /* -> msu of acc, div, and quo */ Int divunits, accunits; /* lengths */ Int quodigits; /* digits in quotient */ uInt *lsua, *lsuq; /* -> current acc and quo lsus */ Int length, multiplier; /* work */ uInt carry, sign; /* .. */ uInt *ua, *ud, *uq; /* .. */ uByte *ub; /* .. */ uInt uiwork; /* for macros */ uInt divtop; /* top unit of div adjusted for estimating */ #if DIVCOUNT static uInt maxcount=0; /* worst-seen subtractions count */ uInt divcount=0; /* subtractions count [this divide] */ #endif /* calculate sign */ num.sign=(DFWORD(dfl, 0)^DFWORD(dfr, 0)) & DECFLOAT_Sign; if (DFISSPECIAL(dfl) || DFISSPECIAL(dfr)) { /* either is special? */ /* NaNs are handled as usual */ if (DFISNAN(dfl) || DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); /* one or two infinities */ if (DFISINF(dfl)) { if (DFISINF(dfr)) return decInvalid(result, set); /* Two infinities bad */ if (op&(REMAINDER|REMNEAR)) return decInvalid(result, set); /* as is rem */ /* Infinity/x is infinite and quiet, even if x=0 */ DFWORD(result, 0)=num.sign; return decInfinity(result, result); } /* must be x/Infinity -- remainders are lhs */ if (op&(REMAINDER|REMNEAR)) return decCanonical(result, dfl); /* divides: return zero with correct sign and exponent depending */ /* on op (Etiny for divide, 0 for divideInt) */ decFloatZero(result); if (op==DIVIDEINT) DFWORD(result, 0)|=num.sign; /* add sign */ else DFWORD(result, 0)=num.sign; /* zeros the exponent, too */ return result; } /* next, handle zero operands (x/0 and 0/x) */ if (DFISZERO(dfr)) { /* x/0 */ if (DFISZERO(dfl)) { /* 0/0 is undefined */ decFloatZero(result); DFWORD(result, 0)=DECFLOAT_qNaN; set->status|=DEC_Division_undefined; return result; } if (op&(REMAINDER|REMNEAR)) return decInvalid(result, set); /* bad rem */ set->status|=DEC_Division_by_zero; DFWORD(result, 0)=num.sign; return decInfinity(result, result); /* x/0 -> signed Infinity */ } num.exponent=GETEXPUN(dfl)-GETEXPUN(dfr); /* ideal exponent */ if (DFISZERO(dfl)) { /* 0/x (x!=0) */ /* if divide, result is 0 with ideal exponent; divideInt has */ /* exponent=0, remainders give zero with lower exponent */ if (op&DIVIDEINT) { decFloatZero(result); DFWORD(result, 0)|=num.sign; /* add sign */ return result; } if (!(op&DIVIDE)) { /* a remainder */ /* exponent is the minimum of the operands */ num.exponent=MINI(GETEXPUN(dfl), GETEXPUN(dfr)); /* if the result is zero the sign shall be sign of dfl */ num.sign=DFWORD(dfl, 0)&DECFLOAT_Sign; } bcdacc[0]=0; num.msd=bcdacc; /* -> 0 */ num.lsd=bcdacc; /* .. */ return decFinalize(result, &num, set); /* [divide may clamp exponent] */ } /* 0/x */ /* [here, both operands are known to be finite and non-zero] */ /* extract the operand coefficents into 'units' which are */ /* base-billion; the lhs is high-aligned in acc and the msu of both */ /* acc and div is at the right-hand end of array (offset length-1); */ /* the quotient can need one more unit than the operands as digits */ /* in it are not necessarily aligned neatly; further, the quotient */ /* may not start accumulating until after the end of the initial */ /* operand in acc if that is small (e.g., 1) so the accumulator */ /* must have at least that number of units extra (at the ls end) */ GETCOEFFBILL(dfl, acc+DIVACCLEN-DIVOPLEN); GETCOEFFBILL(dfr, div); /* zero the low uInts of acc */ acc[0]=0; acc[1]=0; acc[2]=0; acc[3]=0; #if DOUBLE #if DIVOPLEN!=2 #error Unexpected Double DIVOPLEN #endif #elif QUAD acc[4]=0; acc[5]=0; acc[6]=0; acc[7]=0; #if DIVOPLEN!=4 #error Unexpected Quad DIVOPLEN #endif #endif /* set msu and lsu pointers */ msua=acc+DIVACCLEN-1; /* [leading zeros removed below] */ msuq=quo+DIVOPLEN; /*[loop for div will terminate because operands are non-zero] */ for (msud=div+DIVOPLEN-1; *msud==0;) msud--; /* the initial least-significant unit of acc is set so acc appears */ /* to have the same length as div. */ /* This moves one position towards the least possible for each */ /* iteration */ divunits=(Int)(msud-div+1); /* precalculate */ lsua=msua-divunits+1; /* initial working lsu of acc */ lsuq=msuq; /* and of quo */ /* set up the estimator for the multiplier; this is the msu of div, */ /* plus two bits from the unit below (if any) rounded up by one if */ /* there are any non-zero bits or units below that [the extra two */ /* bits makes for a much better estimate when the top unit is small] */ divtop=*msud<<2; if (divunits>1) { uInt *um=msud-1; uInt d=*um; if (d>=750000000) {divtop+=3; d-=750000000;} else if (d>=500000000) {divtop+=2; d-=500000000;} else if (d>=250000000) {divtop++; d-=250000000;} if (d) divtop++; else for (um--; um>=div; um--) if (*um) { divtop++; break; } } /* >1 unit */ #if DECTRACE {Int i; printf("----- div="); for (i=divunits-1; i>=0; i--) printf("%09ld ", (LI)div[i]); printf("\n");} #endif /* now collect up to DECPMAX+1 digits in the quotient (this may */ /* need OPLEN+1 uInts if unaligned) */ quodigits=0; /* no digits yet */ for (;; lsua--) { /* outer loop -- each input position */ #if DECCHECK if (lsua=lsua;) msua--; accunits=(Int)(msua-lsua+1); /* [maybe 0] */ /* subtraction is only necessary and possible if there are as */ /* least as many units remaining in acc for this iteration as */ /* there are in div */ if (accunitsdiv: subtraction necessary at this position */ for (ud=msud, ua=msua; ud>div; ud--, ua--) if (*ud!=*ua) break; /* [now at first mismatch or lsu] */ if (*ud>*ua) break; /* next time... */ if (*ud==*ua) { /* all compared equal */ *lsuq+=1; /* increment result */ msua=lsua; /* collapse acc units */ *msua=0; /* .. to a zero */ break; } /* subtraction necessary; estimate multiplier [see above] */ /* if both *msud and *msua are small it is cost-effective to */ /* bring in part of the following units (if any) to get a */ /* better estimate (assume some other non-zero in div) */ #define DIVLO 1000000U #define DIVHI (DIVBASE/DIVLO) #if DECUSE64 if (divunits>1) { /* there cannot be a *(msud-2) for DECDOUBLE so next is */ /* an exact calculation unless DECQUAD (which needs to */ /* assume bits out there if divunits>2) */ uLong mul=(uLong)*msua * DIVBASE + *(msua-1); uLong div=(uLong)*msud * DIVBASE + *(msud-1); #if QUAD if (divunits>2) div++; #endif mul/=div; multiplier=(Int)mul; } else multiplier=*msua/(*msud); #else if (divunits>1 && *msuadivunits */ /* msud is one unit 'lower' than msua, so estimate differently */ #if DECUSE64 uLong mul; /* as before, bring in extra digits if possible */ if (divunits>1 && *msua>DIVSHIFTA); carry=(uInt)(((uLong)hop*DIVMAGIC)>>DIVSHIFTB); /* the estimate is now in hi; now calculate sub-hi*10**9 */ /* to get the remainder (which will be =DIVBASE) { lo-=DIVBASE; /* correct by +1 */ carry++; } } #else /* 32-bit */ uInt hi; /* calculate multiplier*(*ud) into hi and lo */ LONGMUL32HI(hi, *ud, multiplier); /* get the high word */ lo=multiplier*(*ud); /* .. and the low */ lo+=carry; /* add the old hi */ carry=hi+(lo=DIVBASE) { /* split is needed */ hop=(carry<<3)+(lo>>DIVSHIFTA); /* hi:lo/2**29 */ LONGMUL32HI(carry, hop, DIVMAGIC); /* only need the high word */ /* [DIVSHIFTB is 32, so carry can be used directly] */ /* the estimate is now in carry; now calculate hi:lo-est*10**9; */ /* happily the top word of the result is irrelevant because it */ /* will always be zero so this needs only one multiplication */ lo-=(carry*DIVBASE); /* the correction here will be at most +1; do it */ if (lo>=DIVBASE) { lo-=DIVBASE; carry++; } } #endif if (lo>*ua) { /* borrow needed */ *ua+=DIVBASE; carry++; } *ua-=lo; } /* ud loop */ if (carry) *ua-=carry; /* accdigits>divdigits [cannot borrow] */ } /* inner loop */ /* the outer loop terminates when there is either an exact result */ /* or enough digits; first update the quotient digit count and */ /* pointer (if any significant digits) */ #if DECTRACE if (*lsuq || quodigits) printf("*lsuq=%09ld\n", (LI)*lsuq); #endif if (quodigits) { quodigits+=9; /* had leading unit earlier */ lsuq--; if (quodigits>DECPMAX+1) break; /* have enough */ } else if (*lsuq) { /* first quotient digits */ const uInt *pow; for (pow=DECPOWERS; *lsuq>=*pow; pow++) quodigits++; lsuq--; /* [cannot have >DECPMAX+1 on first unit] */ } if (*msua!=0) continue; /* not an exact result */ /* acc is zero iff used all of original units and zero down to lsua */ /* (must also continue to original lsu for correct quotient length) */ if (lsua>acc+DIVACCLEN-DIVOPLEN) continue; for (; msua>lsua && *msua==0;) msua--; if (*msua==0 && msua==lsua) break; } /* outer loop */ /* all of the original operand in acc has been covered at this point */ /* quotient now has at least DECPMAX+2 digits */ /* *msua is now non-0 if inexact and sticky bits */ /* lsuq is one below the last uint of the quotient */ lsuq++; /* set -> true lsu of quo */ if (*msua) *lsuq|=1; /* apply sticky bit */ /* quo now holds the (unrounded) quotient in base-billion; one */ /* base-billion 'digit' per uInt. */ #if DECTRACE printf("DivQuo:"); for (uq=msuq; uq>=lsuq; uq--) printf(" %09ld", (LI)*uq); printf("\n"); #endif /* Now convert to BCD for rounding and cleanup, starting from the */ /* most significant end [offset by one into bcdacc to leave room */ /* for a possible carry digit if rounding for REMNEAR is needed] */ for (uq=msuq, ub=bcdacc+1; uq>=lsuq; uq--, ub+=9) { uInt top, mid, rem; /* work */ if (*uq==0) { /* no split needed */ UBFROMUI(ub, 0); /* clear 9 BCD8s */ UBFROMUI(ub+4, 0); /* .. */ *(ub+8)=0; /* .. */ continue; } /* *uq is non-zero -- split the base-billion digit into */ /* hi, mid, and low three-digits */ #define divsplit9 1000000 /* divisor */ #define divsplit6 1000 /* divisor */ /* The splitting is done by simple divides and remainders, */ /* assuming the compiler will optimize these [GCC does] */ top=*uq/divsplit9; rem=*uq%divsplit9; mid=rem/divsplit6; rem=rem%divsplit6; /* lay out the nine BCD digits (plus one unwanted byte) */ UBFROMUI(ub, UBTOUI(&BIN2BCD8[top*4])); UBFROMUI(ub+3, UBTOUI(&BIN2BCD8[mid*4])); UBFROMUI(ub+6, UBTOUI(&BIN2BCD8[rem*4])); } /* BCD conversion loop */ ub--; /* -> lsu */ /* complete the bcdnum; quodigits is correct, so the position of */ /* the first non-zero is known */ num.msd=bcdacc+1+(msuq-lsuq+1)*9-quodigits; num.lsd=ub; /* make exponent adjustments, etc */ if (lsuamaxcount) { /* new high-water nark */ maxcount=divcount; printf("DivNewMaxCount: %ld\n", (LI)maxcount); } #endif if (op&DIVIDE) return decFinalize(result, &num, set); /* all done */ /* Is DIVIDEINT or a remainder; there is more to do -- first form */ /* the integer (this is done 'after the fact', unlike as in */ /* decNumber, so as not to tax DIVIDE) */ /* The first non-zero digit will be in the first 9 digits, known */ /* from quodigits and num.msd, so there is always space for DECPMAX */ /* digits */ length=(Int)(num.lsd-num.msd+1); /*printf("Length exp: %ld %ld\n", (LI)length, (LI)num.exponent); */ if (length+num.exponent>DECPMAX) { /* cannot fit */ decFloatZero(result); DFWORD(result, 0)=DECFLOAT_qNaN; set->status|=DEC_Division_impossible; return result; } if (num.exponent>=0) { /* already an int, or need pad zeros */ for (ub=num.lsd+1; ub<=num.lsd+num.exponent; ub++) *ub=0; num.lsd+=num.exponent; } else { /* too long: round or truncate needed */ Int drop=-num.exponent; if (!(op&REMNEAR)) { /* simple truncate */ num.lsd-=drop; if (num.lsd re-round digit */ uByte reround; /* reround value */ *(num.msd-1)=0; /* in case of left carry, or make 0 */ if (drop 0] */ reround=*roundat; for (ub=roundat+1; ub<=num.lsd; ub++) { if (*ub!=0) { reround=DECSTICKYTAB[reround]; break; } } /* check stickies */ if (roundat>num.msd) num.lsd=roundat-1; else { num.msd--; /* use the 0 .. */ num.lsd=num.msd; /* .. at the new MSD place */ } if (reround!=0) { /* discarding non-zero */ uInt bump=0; /* rounding is DEC_ROUND_HALF_EVEN always */ if (reround>5) bump=1; /* >0.5 goes up */ else if (reround==5) /* exactly 0.5000 .. */ bump=*(num.lsd) & 0x01; /* .. up iff [new] lsd is odd */ if (bump!=0) { /* need increment */ /* increment the coefficient; this might end up with 1000... */ ub=num.lsd; for (; UBTOUI(ub-3)==0x09090909; ub-=4) UBFROMUI(ub-3, 0); for (; *ub==9; ub--) *ub=0; /* at most 3 more */ *ub+=1; if (ub9 #error Exponent may overflow when doubled for Multiply #endif #if MULACCLEN!=(MULACCLEN/4)*4 /* This assumption is used below only for initialization */ #error MULACCLEN is not a multiple of 4 #endif static void decFiniteMultiply(bcdnum *num, uByte *bcdacc, const decFloat *dfl, const decFloat *dfr) { uInt bufl[MULOPLEN]; /* left coefficient (base-billion) */ uInt bufr[MULOPLEN]; /* right coefficient (base-billion) */ uInt *ui, *uj; /* work */ uByte *ub; /* .. */ uInt uiwork; /* for macros */ #if DECUSE64 uLong accl[MULACCLEN]; /* lazy accumulator (base-billion+) */ uLong *pl; /* work -> lazy accumulator */ uInt acc[MULACCLEN]; /* coefficent in base-billion .. */ #else uInt acc[MULACCLEN*2]; /* accumulator in base-billion .. */ #endif uInt *pa; /* work -> accumulator */ /*printf("Base10**9: OpLen=%d MulAcclen=%d\n", OPLEN, MULACCLEN); */ /* Calculate sign and exponent */ num->sign=(DFWORD(dfl, 0)^DFWORD(dfr, 0)) & DECFLOAT_Sign; num->exponent=GETEXPUN(dfl)+GETEXPUN(dfr); /* [see assertion above] */ /* Extract the coefficients and prepare the accumulator */ /* the coefficients of the operands are decoded into base-billion */ /* numbers in uInt arrays (bufl and bufr, LSD at offset 0) of the */ /* appropriate size. */ GETCOEFFBILL(dfl, bufl); GETCOEFFBILL(dfr, bufr); #if DECTRACE && 0 printf("CoeffbL:"); for (ui=bufl+MULOPLEN-1; ui>=bufl; ui--) printf(" %08lx", (LI)*ui); printf("\n"); printf("CoeffbR:"); for (uj=bufr+MULOPLEN-1; uj>=bufr; uj--) printf(" %08lx", (LI)*uj); printf("\n"); #endif /* start the 64-bit/32-bit differing paths... */ #if DECUSE64 /* zero the accumulator */ #if MULACCLEN==4 accl[0]=0; accl[1]=0; accl[2]=0; accl[3]=0; #else /* use a loop */ /* MULACCLEN is a multiple of four, asserted above */ for (pl=accl; pl1 may be */ /* needed. Values of A and B are chosen to satisfy the constraints */ /* just mentioned while minimizing the maximum error (and hence the */ /* maximum correction), as shown in the following table: */ /* */ /* Type OPLEN A B maxX maxError maxCorrection */ /* --------------------------------------------------------- */ /* DOUBLE 2 29 32 <2*10**18 0.63 1 */ /* QUAD 4 30 31 <4*10**18 1.17 2 */ /* */ /* In the OPLEN==2 case there is most choice, but the value for B */ /* of 32 has a big advantage as then the calculation of the */ /* estimate requires no shifting; the compiler can extract the high */ /* word directly after multiplying magic*hop. */ #define MULMAGIC 2305843009U /* 2**61/10**9 [both cases] */ #if DOUBLE #define MULSHIFTA 29 #define MULSHIFTB 32 #elif QUAD #define MULSHIFTA 30 #define MULSHIFTB 31 #else #error Unexpected type #endif #if DECTRACE printf("MulAccl:"); for (pl=accl+MULACCLEN-1; pl>=accl; pl--) printf(" %08lx:%08lx", (LI)(*pl>>32), (LI)(*pl&0xffffffff)); printf("\n"); #endif for (pl=accl, pa=acc; pl=MULTBASE) { /* *pl holds a binary number which needs to be split */ hop=(uInt)(*pl>>MULSHIFTA); est=(uInt)(((uLong)hop*MULMAGIC)>>MULSHIFTB); /* the estimate is now in est; now calculate hi:lo-est*10**9; */ /* happily the top word of the result is irrelevant because it */ /* will always be zero so this needs only one multiplication */ lo=(uInt)(*pl-((uLong)est*MULTBASE)); /* low word of result */ /* If QUAD, the correction here could be +2 */ if (lo>=MULTBASE) { lo-=MULTBASE; /* correct by +1 */ est++; #if QUAD /* may need to correct by +2 */ if (lo>=MULTBASE) { lo-=MULTBASE; est++; } #endif } /* finally place lo as the new coefficient 'digit' and add est to */ /* the next place up [this is safe because this path is never */ /* taken on the final iteration as *pl will fit] */ *pa=lo; *(pl+1)+=est; } /* *pl needed split */ else { /* *pl1 may be */ /* needed. Values of A and B are chosen to satisfy the constraints */ /* just mentioned while minimizing the maximum error (and hence the */ /* maximum correction), as shown in the following table: */ /* */ /* Type OPLEN A B maxX maxError maxCorrection */ /* --------------------------------------------------------- */ /* DOUBLE 2 29 32 <2*10**18 0.63 1 */ /* QUAD 4 30 31 <4*10**18 1.17 2 */ /* */ /* In the OPLEN==2 case there is most choice, but the value for B */ /* of 32 has a big advantage as then the calculation of the */ /* estimate requires no shifting; the high word is simply */ /* calculated from multiplying magic*hop. */ #define MULMAGIC 2305843009U /* 2**61/10**9 [both cases] */ #if DOUBLE #define MULSHIFTA 29 #define MULSHIFTB 32 #elif QUAD #define MULSHIFTA 30 #define MULSHIFTB 31 #else #error Unexpected type #endif #if DECTRACE printf("MulHiLo:"); for (pa=acc+MULACCLEN-1; pa>=acc; pa--) printf(" %08lx:%08lx", (LI)*(pa+MULACCLEN), (LI)*pa); printf("\n"); #endif for (pa=acc;; pa++) { /* each low uInt */ uInt hi, lo; /* words of exact multiply result */ uInt hop, estlo; /* work */ #if QUAD uInt esthi; /* .. */ #endif lo=*pa; hi=*(pa+MULACCLEN); /* top 32 bits */ /* hi and lo now hold a binary number which needs to be split */ #if DOUBLE hop=(hi<<3)+(lo>>MULSHIFTA); /* hi:lo/2**29 */ LONGMUL32HI(estlo, hop, MULMAGIC);/* only need the high word */ /* [MULSHIFTB is 32, so estlo can be used directly] */ /* the estimate is now in estlo; now calculate hi:lo-est*10**9; */ /* happily the top word of the result is irrelevant because it */ /* will always be zero so this needs only one multiplication */ lo-=(estlo*MULTBASE); /* esthi=0; // high word is ignored below */ /* the correction here will be at most +1; do it */ if (lo>=MULTBASE) { lo-=MULTBASE; estlo++; } #elif QUAD hop=(hi<<2)+(lo>>MULSHIFTA); /* hi:lo/2**30 */ LONGMUL32HI(esthi, hop, MULMAGIC);/* shift will be 31 .. */ estlo=hop*MULMAGIC; /* .. so low word needed */ estlo=(esthi<<1)+(estlo>>MULSHIFTB); /* [just the top bit] */ /* esthi=0; // high word is ignored below */ lo-=(estlo*MULTBASE); /* as above */ /* the correction here could be +1 or +2 */ if (lo>=MULTBASE) { lo-=MULTBASE; estlo++; } if (lo>=MULTBASE) { lo-=MULTBASE; estlo++; } #else #error Unexpected type #endif /* finally place lo as the new accumulator digit and add est to */ /* the next place up; this latter add could cause a carry of 1 */ /* to the high word of the next place */ *pa=lo; *(pa+1)+=estlo; /* esthi is always 0 for DOUBLE and QUAD so this is skipped */ /* *(pa+1+MULACCLEN)+=esthi; */ if (*(pa+1)=acc; pa--) printf(" %09ld", (LI)*pa); printf("\n"); #endif /* Now convert to BCD for rounding and cleanup, starting from the */ /* most significant end */ pa=acc+MULACCLEN-1; if (*pa!=0) num->msd=bcdacc+LEADZEROS;/* drop known lead zeros */ else { /* >=1 word of leading zeros */ num->msd=bcdacc; /* known leading zeros are gone */ pa--; /* skip first word .. */ for (; *pa==0; pa--) if (pa==acc) break; /* .. and any more leading 0s */ } for (ub=bcdacc;; pa--, ub+=9) { if (*pa!=0) { /* split(s) needed */ uInt top, mid, rem; /* work */ /* *pa is non-zero -- split the base-billion acc digit into */ /* hi, mid, and low three-digits */ #define mulsplit9 1000000 /* divisor */ #define mulsplit6 1000 /* divisor */ /* The splitting is done by simple divides and remainders, */ /* assuming the compiler will optimize these where useful */ /* [GCC does] */ top=*pa/mulsplit9; rem=*pa%mulsplit9; mid=rem/mulsplit6; rem=rem%mulsplit6; /* lay out the nine BCD digits (plus one unwanted byte) */ UBFROMUI(ub, UBTOUI(&BIN2BCD8[top*4])); UBFROMUI(ub+3, UBTOUI(&BIN2BCD8[mid*4])); UBFROMUI(ub+6, UBTOUI(&BIN2BCD8[rem*4])); } else { /* *pa==0 */ UBFROMUI(ub, 0); /* clear 9 BCD8s */ UBFROMUI(ub+4, 0); /* .. */ *(ub+8)=0; /* .. */ } if (pa==acc) break; } /* BCD conversion loop */ num->lsd=ub+8; /* complete the bcdnum .. */ #if DECTRACE decShowNum(num, "postmult"); decFloatShow(dfl, "dfl"); decFloatShow(dfr, "dfr"); #endif return; } /* decFiniteMultiply */ /* ------------------------------------------------------------------ */ /* decFloatAbs -- absolute value, heeding NaNs, etc. */ /* */ /* result gets the canonicalized df with sign 0 */ /* df is the decFloat to abs */ /* set is the context */ /* returns result */ /* */ /* This has the same effect as decFloatPlus unless df is negative, */ /* in which case it has the same effect as decFloatMinus. The */ /* effect is also the same as decFloatCopyAbs except that NaNs are */ /* handled normally (the sign of a NaN is not affected, and an sNaN */ /* will signal) and the result will be canonical. */ /* ------------------------------------------------------------------ */ decFloat * decFloatAbs(decFloat *result, const decFloat *df, decContext *set) { if (DFISNAN(df)) return decNaNs(result, df, NULL, set); decCanonical(result, df); /* copy and check */ DFBYTE(result, 0)&=~0x80; /* zero sign bit */ return result; } /* decFloatAbs */ /* ------------------------------------------------------------------ */ /* decFloatAdd -- add two decFloats */ /* */ /* result gets the result of adding dfl and dfr: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* ------------------------------------------------------------------ */ #if QUAD /* Table for testing MSDs for fastpath elimination; returns the MSD of */ /* a decDouble or decQuad (top 6 bits tested) ignoring the sign. */ /* Infinities return -32 and NaNs return -128 so that summing the two */ /* MSDs also allows rapid tests for the Specials (see code below). */ const Int DECTESTMSD[64]={ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 9, 8, 9, -32, -128, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 9, 8, 9, -32, -128}; #else /* The table for testing MSDs is shared between the modules */ extern const Int DECTESTMSD[64]; #endif decFloat * decFloatAdd(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { bcdnum num; /* for final conversion */ Int bexpl, bexpr; /* left and right biased exponents */ uByte *ub, *us, *ut; /* work */ uInt uiwork; /* for macros */ #if QUAD uShort uswork; /* .. */ #endif uInt sourhil, sourhir; /* top words from source decFloats */ /* [valid only through end of */ /* fastpath code -- before swap] */ uInt diffsign; /* non-zero if signs differ */ uInt carry; /* carry: 0 or 1 before add loop */ Int overlap; /* coefficient overlap (if full) */ Int summ; /* sum of the MSDs */ /* the following buffers hold coefficients with various alignments */ /* (see commentary and diagrams below) */ uByte acc[4+2+DECPMAX*3+8]; uByte buf[4+2+DECPMAX*2]; uByte *umsd, *ulsd; /* local MSD and LSD pointers */ #if DECLITEND #define CARRYPAT 0x01000000 /* carry=1 pattern */ #else #define CARRYPAT 0x00000001 /* carry=1 pattern */ #endif /* Start decoding the arguments */ /* The initial exponents are placed into the opposite Ints to */ /* that which might be expected; there are two sets of data to */ /* keep track of (each decFloat and the corresponding exponent), */ /* and this scheme means that at the swap point (after comparing */ /* exponents) only one pair of words needs to be swapped */ /* whichever path is taken (thereby minimising worst-case path). */ /* The calculated exponents will be nonsense when the arguments are */ /* Special, but are not used in that path */ sourhil=DFWORD(dfl, 0); /* LHS top word */ summ=DECTESTMSD[sourhil>>26]; /* get first MSD for testing */ bexpr=DECCOMBEXP[sourhil>>26]; /* get exponent high bits (in place) */ bexpr+=GETECON(dfl); /* .. + continuation */ sourhir=DFWORD(dfr, 0); /* RHS top word */ summ+=DECTESTMSD[sourhir>>26]; /* sum MSDs for testing */ bexpl=DECCOMBEXP[sourhir>>26]; bexpl+=GETECON(dfr); /* here bexpr has biased exponent from lhs, and vice versa */ diffsign=(sourhil^sourhir)&DECFLOAT_Sign; /* now determine whether to take a fast path or the full-function */ /* slow path. The slow path must be taken when: */ /* -- both numbers are finite, and: */ /* the exponents are different, or */ /* the signs are different, or */ /* the sum of the MSDs is >8 (hence might overflow) */ /* specialness and the sum of the MSDs can be tested at once using */ /* the summ value just calculated, so the test for specials is no */ /* longer on the worst-case path (as of 3.60) */ if (summ<=8) { /* MSD+MSD is good, or there is a special */ if (summ<0) { /* there is a special */ /* Inf+Inf would give -64; Inf+finite is -32 or higher */ if (summ<-64) return decNaNs(result, dfl, dfr, set); /* one or two NaNs */ /* two infinities with different signs is invalid */ if (summ==-64 && diffsign) return decInvalid(result, set); if (DFISINF(dfl)) return decInfinity(result, dfl); /* LHS is infinite */ return decInfinity(result, dfr); /* RHS must be Inf */ } /* Here when both arguments are finite; fast path is possible */ /* (currently only for aligned and same-sign) */ if (bexpr==bexpl && !diffsign) { uInt tac[DECLETS+1]; /* base-1000 coefficient */ uInt encode; /* work */ /* Get one coefficient as base-1000 and add the other */ GETCOEFFTHOU(dfl, tac); /* least-significant goes to [0] */ ADDCOEFFTHOU(dfr, tac); /* here the sum of the MSDs (plus any carry) will be <10 due to */ /* the fastpath test earlier */ /* construct the result; low word is the same for both formats */ encode =BIN2DPD[tac[0]]; encode|=BIN2DPD[tac[1]]<<10; encode|=BIN2DPD[tac[2]]<<20; encode|=BIN2DPD[tac[3]]<<30; DFWORD(result, (DECBYTES/4)-1)=encode; /* collect next two declets (all that remains, for Double) */ encode =BIN2DPD[tac[3]]>>2; encode|=BIN2DPD[tac[4]]<<8; #if QUAD /* complete and lay out middling words */ encode|=BIN2DPD[tac[5]]<<18; encode|=BIN2DPD[tac[6]]<<28; DFWORD(result, 2)=encode; encode =BIN2DPD[tac[6]]>>4; encode|=BIN2DPD[tac[7]]<<6; encode|=BIN2DPD[tac[8]]<<16; encode|=BIN2DPD[tac[9]]<<26; DFWORD(result, 1)=encode; /* and final two declets */ encode =BIN2DPD[tac[9]]>>6; encode|=BIN2DPD[tac[10]]<<4; #endif /* add exponent continuation and sign (from either argument) */ encode|=sourhil & (ECONMASK | DECFLOAT_Sign); /* create lookup index = MSD + top two bits of biased exponent <<4 */ tac[DECLETS]|=(bexpl>>DECECONL)<<4; encode|=DECCOMBFROM[tac[DECLETS]]; /* add constructed combination field */ DFWORD(result, 0)=encode; /* complete */ /* decFloatShow(result, ">"); */ return result; } /* fast path OK */ /* drop through to slow path */ } /* low sum or Special(s) */ /* Slow path required -- arguments are finite and might overflow, */ /* or require alignment, or might have different signs */ /* now swap either exponents or argument pointers */ if (bexpl<=bexpr) { /* original left is bigger */ Int bexpswap=bexpl; bexpl=bexpr; bexpr=bexpswap; /* printf("left bigger\n"); */ } else { const decFloat *dfswap=dfl; dfl=dfr; dfr=dfswap; /* printf("right bigger\n"); */ } /* [here dfl and bexpl refer to the datum with the larger exponent, */ /* of if the exponents are equal then the original LHS argument] */ /* if lhs is zero then result will be the rhs (now known to have */ /* the smaller exponent), which also may need to be tested for zero */ /* for the weird IEEE 754 sign rules */ if (DFISZERO(dfl)) { decCanonical(result, dfr); /* clean copy */ /* "When the sum of two operands with opposite signs is */ /* exactly zero, the sign of that sum shall be '+' in all */ /* rounding modes except round toward -Infinity, in which */ /* mode that sign shall be '-'." */ if (diffsign && DFISZERO(result)) { DFWORD(result, 0)&=~DECFLOAT_Sign; /* assume sign 0 */ if (set->round==DEC_ROUND_FLOOR) DFWORD(result, 0)|=DECFLOAT_Sign; } return result; } /* numfl is zero */ /* [here, LHS is non-zero; code below assumes that] */ /* Coefficients layout during the calculations to follow: */ /* */ /* Overlap case: */ /* +------------------------------------------------+ */ /* acc: |0000| coeffa | tail B | | */ /* +------------------------------------------------+ */ /* buf: |0000| pad0s | coeffb | | */ /* +------------------------------------------------+ */ /* */ /* Touching coefficients or gap: */ /* +------------------------------------------------+ */ /* acc: |0000| coeffa | gap | coeffb | */ /* +------------------------------------------------+ */ /* [buf not used or needed; gap clamped to Pmax] */ /* lay out lhs coefficient into accumulator; this starts at acc+4 */ /* for decDouble or acc+6 for decQuad so the LSD is word- */ /* aligned; the top word gap is there only in case a carry digit */ /* is prefixed after the add -- it does not need to be zeroed */ #if DOUBLE #define COFF 4 /* offset into acc */ #elif QUAD UBFROMUS(acc+4, 0); /* prefix 00 */ #define COFF 6 /* offset into acc */ #endif GETCOEFF(dfl, acc+COFF); /* decode from decFloat */ ulsd=acc+COFF+DECPMAX-1; umsd=acc+4; /* [having this here avoids */ #if DECTRACE {bcdnum tum; tum.msd=umsd; tum.lsd=ulsd; tum.exponent=bexpl-DECBIAS; tum.sign=DFWORD(dfl, 0) & DECFLOAT_Sign; decShowNum(&tum, "dflx");} #endif /* if signs differ, take ten's complement of lhs (here the */ /* coefficient is subtracted from all-nines; the 1 is added during */ /* the later add cycle -- zeros to the right do not matter because */ /* the complement of zero is zero); these are fixed-length inverts */ /* where the lsd is known to be at a 4-byte boundary (so no borrow */ /* possible) */ carry=0; /* assume no carry */ if (diffsign) { carry=CARRYPAT; /* for +1 during add */ UBFROMUI(acc+ 4, 0x09090909-UBTOUI(acc+ 4)); UBFROMUI(acc+ 8, 0x09090909-UBTOUI(acc+ 8)); UBFROMUI(acc+12, 0x09090909-UBTOUI(acc+12)); UBFROMUI(acc+16, 0x09090909-UBTOUI(acc+16)); #if QUAD UBFROMUI(acc+20, 0x09090909-UBTOUI(acc+20)); UBFROMUI(acc+24, 0x09090909-UBTOUI(acc+24)); UBFROMUI(acc+28, 0x09090909-UBTOUI(acc+28)); UBFROMUI(acc+32, 0x09090909-UBTOUI(acc+32)); UBFROMUI(acc+36, 0x09090909-UBTOUI(acc+36)); #endif } /* diffsign */ /* now process the rhs coefficient; if it cannot overlap lhs then */ /* it can be put straight into acc (with an appropriate gap, if */ /* needed) because no actual addition will be needed (except */ /* possibly to complete ten's complement) */ overlap=DECPMAX-(bexpl-bexpr); #if DECTRACE printf("exps: %ld %ld\n", (LI)(bexpl-DECBIAS), (LI)(bexpr-DECBIAS)); printf("Overlap=%ld carry=%08lx\n", (LI)overlap, (LI)carry); #endif if (overlap<=0) { /* no overlap possible */ uInt gap; /* local work */ /* since a full addition is not needed, a ten's complement */ /* calculation started above may need to be completed */ if (carry) { for (ub=ulsd; *ub==9; ub--) *ub=0; *ub+=1; carry=0; /* taken care of */ } /* up to DECPMAX-1 digits of the final result can extend down */ /* below the LSD of the lhs, so if the gap is >DECPMAX then the */ /* rhs will be simply sticky bits. In this case the gap is */ /* clamped to DECPMAX and the exponent adjusted to suit [this is */ /* safe because the lhs is non-zero]. */ gap=-overlap; if (gap>DECPMAX) { bexpr+=gap-1; gap=DECPMAX; } ub=ulsd+gap+1; /* where MSD will go */ /* Fill the gap with 0s; note that there is no addition to do */ ut=acc+COFF+DECPMAX; /* start of gap */ for (; ut DECPMAX */ *ub=(uByte)(!DFISZERO(dfr)); /* make sticky digit */ } else { /* need full coefficient */ GETCOEFF(dfr, ub); /* decode from decFloat */ ub+=DECPMAX-1; /* new LSD... */ } ulsd=ub; /* save new LSD */ } /* no overlap possible */ else { /* overlap>0 */ /* coefficients overlap (perhaps completely, although also */ /* perhaps only where zeros) */ if (overlap==DECPMAX) { /* aligned */ ub=buf+COFF; /* where msd will go */ #if QUAD UBFROMUS(buf+4, 0); /* clear quad's 00 */ #endif GETCOEFF(dfr, ub); /* decode from decFloat */ } else { /* unaligned */ ub=buf+COFF+DECPMAX-overlap; /* where MSD will go */ /* Fill the prefix gap with 0s; 8 will cover most common */ /* unalignments, so start with direct assignments (a loop is */ /* then used for any remaining -- the loop (and the one in a */ /* moment) is not then on the critical path because the number */ /* of additions is reduced by (at least) two in this case) */ UBFROMUI(buf+4, 0); /* [clears decQuad 00 too] */ UBFROMUI(buf+8, 0); if (ub>buf+12) { ut=buf+12; /* start any remaining */ for (; ut=acc+4; ut-=4, us-=4) { /* big-endian add loop */ /* bcd8 add */ carry+=UBTOUI(us); /* rhs + carry */ if (carry==0) continue; /* no-op */ carry+=UBTOUI(ut); /* lhs */ /* Big-endian BCD adjust (uses internal carry) */ carry+=0x76f6f6f6; /* note top nibble not all bits */ /* apply BCD adjust and save */ UBFROMUI(ut, (carry & 0x0f0f0f0f) - ((carry & 0x60606060)>>4)); carry>>=31; /* true carry was at far left */ } /* add loop */ #else for (; ut>=acc+4; ut-=4, us-=4) { /* little-endian add loop */ /* bcd8 add */ carry+=UBTOUI(us); /* rhs + carry */ if (carry==0) continue; /* no-op [common if unaligned] */ carry+=UBTOUI(ut); /* lhs */ /* Little-endian BCD adjust; inter-digit carry must be manual */ /* because the lsb from the array will be in the most-significant */ /* byte of carry */ carry+=0x76767676; /* note no inter-byte carries */ carry+=(carry & 0x80000000)>>15; carry+=(carry & 0x00800000)>>15; carry+=(carry & 0x00008000)>>15; carry-=(carry & 0x60606060)>>4; /* BCD adjust back */ UBFROMUI(ut, carry & 0x0f0f0f0f); /* clear debris and save */ /* here, final carry-out bit is at 0x00000080; move it ready */ /* for next word-add (i.e., to 0x01000000) */ carry=(carry & 0x00000080)<<17; } /* add loop */ #endif #if DECTRACE {bcdnum tum; printf("Add done, carry=%08lx, diffsign=%ld\n", (LI)carry, (LI)diffsign); tum.msd=umsd; /* acc+4; */ tum.lsd=ulsd; tum.exponent=0; tum.sign=0; decShowNum(&tum, "dfadd");} #endif } /* overlap possible */ /* ordering here is a little strange in order to have slowest path */ /* first in GCC asm listing */ if (diffsign) { /* subtraction */ if (!carry) { /* no carry out means RHS=umsd+BNEXT) { /* unaligned */ /* eight will handle most unaligments for Double; 16 for Quad */ UBFROMUI(umsd+BNEXT, 0x09090909-UBTOUI(umsd+BNEXT)); UBFROMUI(umsd+BNEXT+4, 0x09090909-UBTOUI(umsd+BNEXT+4)); #if DOUBLE #define BNEXTY (BNEXT+8) #elif QUAD UBFROMUI(umsd+BNEXT+8, 0x09090909-UBTOUI(umsd+BNEXT+8)); UBFROMUI(umsd+BNEXT+12, 0x09090909-UBTOUI(umsd+BNEXT+12)); #define BNEXTY (BNEXT+16) #endif if (ulsd>=umsd+BNEXTY) { /* very unaligned */ ut=umsd+BNEXTY; /* -> continue */ for (;;ut+=4) { UBFROMUI(ut, 0x09090909-UBTOUI(ut)); /* invert four digits */ if (ut>=ulsd-3) break; /* all done */ } } } /* complete the ten's complement by adding 1 */ for (ub=ulsd; *ub==9; ub--) *ub=0; *ub+=1; } /* borrowed */ else { /* carry out means RHS>=LHS */ num.sign=DFWORD(dfr, 0) & DECFLOAT_Sign; /* all done except for the special IEEE 754 exact-zero-result */ /* rule (see above); while testing for zero, strip leading */ /* zeros (which will save decFinalize doing it) (this is in */ /* diffsign path, so carry impossible and true umsd is */ /* acc+COFF) */ /* Check the initial coefficient area using the fast macro; */ /* this will often be all that needs to be done (as on the */ /* worst-case path when the subtraction was aligned and */ /* full-length) */ if (ISCOEFFZERO(acc+COFF)) { umsd=acc+COFF+DECPMAX-1; /* so far, so zero */ if (ulsd>umsd) { /* more to check */ umsd++; /* to align after checked area */ for (; UBTOUI(umsd)==0 && umsd+3round==DEC_ROUND_FLOOR) num.sign=DECFLOAT_Sign; } } /* [else was not zero, might still have leading zeros] */ } /* subtraction gave positive result */ } /* diffsign */ else { /* same-sign addition */ num.sign=DFWORD(dfl, 0)&DECFLOAT_Sign; #if DOUBLE if (carry) { /* only possible with decDouble */ *(acc+3)=1; /* [Quad has leading 00] */ umsd=acc+3; } #endif } /* same sign */ num.msd=umsd; /* set MSD .. */ num.lsd=ulsd; /* .. and LSD */ num.exponent=bexpr-DECBIAS; /* set exponent to smaller, unbiassed */ #if DECTRACE decFloatShow(dfl, "dfl"); decFloatShow(dfr, "dfr"); decShowNum(&num, "postadd"); #endif return decFinalize(result, &num, set); /* round, check, and lay out */ } /* decFloatAdd */ /* ------------------------------------------------------------------ */ /* decFloatAnd -- logical digitwise AND of two decFloats */ /* */ /* result gets the result of ANDing dfl and dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result, which will be canonical with sign=0 */ /* */ /* The operands must be positive, finite with exponent q=0, and */ /* comprise just zeros and ones; if not, Invalid operation results. */ /* ------------------------------------------------------------------ */ decFloat * decFloatAnd(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { if (!DFISUINT01(dfl) || !DFISUINT01(dfr) || !DFISCC01(dfl) || !DFISCC01(dfr)) return decInvalid(result, set); /* the operands are positive finite integers (q=0) with just 0s and 1s */ #if DOUBLE DFWORD(result, 0)=ZEROWORD |((DFWORD(dfl, 0) & DFWORD(dfr, 0))&0x04009124); DFWORD(result, 1)=(DFWORD(dfl, 1) & DFWORD(dfr, 1))&0x49124491; #elif QUAD DFWORD(result, 0)=ZEROWORD |((DFWORD(dfl, 0) & DFWORD(dfr, 0))&0x04000912); DFWORD(result, 1)=(DFWORD(dfl, 1) & DFWORD(dfr, 1))&0x44912449; DFWORD(result, 2)=(DFWORD(dfl, 2) & DFWORD(dfr, 2))&0x12449124; DFWORD(result, 3)=(DFWORD(dfl, 3) & DFWORD(dfr, 3))&0x49124491; #endif return result; } /* decFloatAnd */ /* ------------------------------------------------------------------ */ /* decFloatCanonical -- copy a decFloat, making canonical */ /* */ /* result gets the canonicalized df */ /* df is the decFloat to copy and make canonical */ /* returns result */ /* */ /* This works on specials, too; no error or exception is possible. */ /* ------------------------------------------------------------------ */ decFloat * decFloatCanonical(decFloat *result, const decFloat *df) { return decCanonical(result, df); } /* decFloatCanonical */ /* ------------------------------------------------------------------ */ /* decFloatClass -- return the class of a decFloat */ /* */ /* df is the decFloat to test */ /* returns the decClass that df falls into */ /* ------------------------------------------------------------------ */ enum decClass decFloatClass(const decFloat *df) { Int exp; /* exponent */ if (DFISSPECIAL(df)) { if (DFISQNAN(df)) return DEC_CLASS_QNAN; if (DFISSNAN(df)) return DEC_CLASS_SNAN; /* must be an infinity */ if (DFISSIGNED(df)) return DEC_CLASS_NEG_INF; return DEC_CLASS_POS_INF; } if (DFISZERO(df)) { /* quite common */ if (DFISSIGNED(df)) return DEC_CLASS_NEG_ZERO; return DEC_CLASS_POS_ZERO; } /* is finite and non-zero; similar code to decFloatIsNormal, here */ /* [this could be speeded up slightly by in-lining decFloatDigits] */ exp=GETEXPUN(df) /* get unbiased exponent .. */ +decFloatDigits(df)-1; /* .. and make adjusted exponent */ if (exp>=DECEMIN) { /* is normal */ if (DFISSIGNED(df)) return DEC_CLASS_NEG_NORMAL; return DEC_CLASS_POS_NORMAL; } /* is subnormal */ if (DFISSIGNED(df)) return DEC_CLASS_NEG_SUBNORMAL; return DEC_CLASS_POS_SUBNORMAL; } /* decFloatClass */ /* ------------------------------------------------------------------ */ /* decFloatClassString -- return the class of a decFloat as a string */ /* */ /* df is the decFloat to test */ /* returns a constant string describing the class df falls into */ /* ------------------------------------------------------------------ */ const char *decFloatClassString(const decFloat *df) { enum decClass eclass=decFloatClass(df); if (eclass==DEC_CLASS_POS_NORMAL) return DEC_ClassString_PN; if (eclass==DEC_CLASS_NEG_NORMAL) return DEC_ClassString_NN; if (eclass==DEC_CLASS_POS_ZERO) return DEC_ClassString_PZ; if (eclass==DEC_CLASS_NEG_ZERO) return DEC_ClassString_NZ; if (eclass==DEC_CLASS_POS_SUBNORMAL) return DEC_ClassString_PS; if (eclass==DEC_CLASS_NEG_SUBNORMAL) return DEC_ClassString_NS; if (eclass==DEC_CLASS_POS_INF) return DEC_ClassString_PI; if (eclass==DEC_CLASS_NEG_INF) return DEC_ClassString_NI; if (eclass==DEC_CLASS_QNAN) return DEC_ClassString_QN; if (eclass==DEC_CLASS_SNAN) return DEC_ClassString_SN; return DEC_ClassString_UN; /* Unknown */ } /* decFloatClassString */ /* ------------------------------------------------------------------ */ /* decFloatCompare -- compare two decFloats; quiet NaNs allowed */ /* */ /* result gets the result of comparing dfl and dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result, which may be -1, 0, 1, or NaN (Unordered) */ /* ------------------------------------------------------------------ */ decFloat * decFloatCompare(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int comp; /* work */ /* NaNs are handled as usual */ if (DFISNAN(dfl) || DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); /* numeric comparison needed */ comp=decNumCompare(dfl, dfr, 0); decFloatZero(result); if (comp==0) return result; DFBYTE(result, DECBYTES-1)=0x01; /* LSD=1 */ if (comp<0) DFBYTE(result, 0)|=0x80; /* set sign bit */ return result; } /* decFloatCompare */ /* ------------------------------------------------------------------ */ /* decFloatCompareSignal -- compare two decFloats; all NaNs signal */ /* */ /* result gets the result of comparing dfl and dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result, which may be -1, 0, 1, or NaN (Unordered) */ /* ------------------------------------------------------------------ */ decFloat * decFloatCompareSignal(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int comp; /* work */ /* NaNs are handled as usual, except that all NaNs signal */ if (DFISNAN(dfl) || DFISNAN(dfr)) { set->status|=DEC_Invalid_operation; return decNaNs(result, dfl, dfr, set); } /* numeric comparison needed */ comp=decNumCompare(dfl, dfr, 0); decFloatZero(result); if (comp==0) return result; DFBYTE(result, DECBYTES-1)=0x01; /* LSD=1 */ if (comp<0) DFBYTE(result, 0)|=0x80; /* set sign bit */ return result; } /* decFloatCompareSignal */ /* ------------------------------------------------------------------ */ /* decFloatCompareTotal -- compare two decFloats with total ordering */ /* */ /* result gets the result of comparing dfl and dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* returns result, which may be -1, 0, or 1 */ /* ------------------------------------------------------------------ */ decFloat * decFloatCompareTotal(decFloat *result, const decFloat *dfl, const decFloat *dfr) { Int comp; /* work */ uInt uiwork; /* for macros */ #if QUAD uShort uswork; /* .. */ #endif if (DFISNAN(dfl) || DFISNAN(dfr)) { Int nanl, nanr; /* work */ /* morph NaNs to +/- 1 or 2, leave numbers as 0 */ nanl=DFISSNAN(dfl)+DFISQNAN(dfl)*2; /* quiet > signalling */ if (DFISSIGNED(dfl)) nanl=-nanl; nanr=DFISSNAN(dfr)+DFISQNAN(dfr)*2; if (DFISSIGNED(dfr)) nanr=-nanr; if (nanl>nanr) comp=+1; else if (nanl*uc) comp=sigl; /* difference found */ else comp=-sigl; /* .. */ break; } } } /* same NaN type and sign */ } else { /* numeric comparison needed */ comp=decNumCompare(dfl, dfr, 1); /* total ordering */ } decFloatZero(result); if (comp==0) return result; DFBYTE(result, DECBYTES-1)=0x01; /* LSD=1 */ if (comp<0) DFBYTE(result, 0)|=0x80; /* set sign bit */ return result; } /* decFloatCompareTotal */ /* ------------------------------------------------------------------ */ /* decFloatCompareTotalMag -- compare magnitudes with total ordering */ /* */ /* result gets the result of comparing abs(dfl) and abs(dfr) */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* returns result, which may be -1, 0, or 1 */ /* ------------------------------------------------------------------ */ decFloat * decFloatCompareTotalMag(decFloat *result, const decFloat *dfl, const decFloat *dfr) { decFloat a, b; /* for copy if needed */ /* copy and redirect signed operand(s) */ if (DFISSIGNED(dfl)) { decFloatCopyAbs(&a, dfl); dfl=&a; } if (DFISSIGNED(dfr)) { decFloatCopyAbs(&b, dfr); dfr=&b; } return decFloatCompareTotal(result, dfl, dfr); } /* decFloatCompareTotalMag */ /* ------------------------------------------------------------------ */ /* decFloatCopy -- copy a decFloat as-is */ /* */ /* result gets the copy of dfl */ /* dfl is the decFloat to copy */ /* returns result */ /* */ /* This is a bitwise operation; no errors or exceptions are possible. */ /* ------------------------------------------------------------------ */ decFloat * decFloatCopy(decFloat *result, const decFloat *dfl) { if (dfl!=result) *result=*dfl; /* copy needed */ return result; } /* decFloatCopy */ /* ------------------------------------------------------------------ */ /* decFloatCopyAbs -- copy a decFloat as-is and set sign bit to 0 */ /* */ /* result gets the copy of dfl with sign bit 0 */ /* dfl is the decFloat to copy */ /* returns result */ /* */ /* This is a bitwise operation; no errors or exceptions are possible. */ /* ------------------------------------------------------------------ */ decFloat * decFloatCopyAbs(decFloat *result, const decFloat *dfl) { if (dfl!=result) *result=*dfl; /* copy needed */ DFBYTE(result, 0)&=~0x80; /* zero sign bit */ return result; } /* decFloatCopyAbs */ /* ------------------------------------------------------------------ */ /* decFloatCopyNegate -- copy a decFloat as-is with inverted sign bit */ /* */ /* result gets the copy of dfl with sign bit inverted */ /* dfl is the decFloat to copy */ /* returns result */ /* */ /* This is a bitwise operation; no errors or exceptions are possible. */ /* ------------------------------------------------------------------ */ decFloat * decFloatCopyNegate(decFloat *result, const decFloat *dfl) { if (dfl!=result) *result=*dfl; /* copy needed */ DFBYTE(result, 0)^=0x80; /* invert sign bit */ return result; } /* decFloatCopyNegate */ /* ------------------------------------------------------------------ */ /* decFloatCopySign -- copy a decFloat with the sign of another */ /* */ /* result gets the result of copying dfl with the sign of dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* returns result */ /* */ /* This is a bitwise operation; no errors or exceptions are possible. */ /* ------------------------------------------------------------------ */ decFloat * decFloatCopySign(decFloat *result, const decFloat *dfl, const decFloat *dfr) { uByte sign=(uByte)(DFBYTE(dfr, 0)&0x80); /* save sign bit */ if (dfl!=result) *result=*dfl; /* copy needed */ DFBYTE(result, 0)&=~0x80; /* clear sign .. */ DFBYTE(result, 0)=(uByte)(DFBYTE(result, 0)|sign); /* .. and set saved */ return result; } /* decFloatCopySign */ /* ------------------------------------------------------------------ */ /* decFloatDigits -- return the number of digits in a decFloat */ /* */ /* df is the decFloat to investigate */ /* returns the number of significant digits in the decFloat; a */ /* zero coefficient returns 1 as does an infinity (a NaN returns */ /* the number of digits in the payload) */ /* ------------------------------------------------------------------ */ /* private macro to extract a declet according to provided formula */ /* (form), and if it is non-zero then return the calculated digits */ /* depending on the declet number (n), where n=0 for the most */ /* significant declet; uses uInt dpd for work */ #define dpdlenchk(n, form) {dpd=(form)&0x3ff; \ if (dpd) return (DECPMAX-1-3*(n))-(3-DPD2BCD8[dpd*4+3]);} /* next one is used when it is known that the declet must be */ /* non-zero, or is the final zero declet */ #define dpdlendun(n, form) {dpd=(form)&0x3ff; \ if (dpd==0) return 1; \ return (DECPMAX-1-3*(n))-(3-DPD2BCD8[dpd*4+3]);} uInt decFloatDigits(const decFloat *df) { uInt dpd; /* work */ uInt sourhi=DFWORD(df, 0); /* top word from source decFloat */ #if QUAD uInt sourmh, sourml; #endif uInt sourlo; if (DFISINF(df)) return 1; /* A NaN effectively has an MSD of 0; otherwise if non-zero MSD */ /* then the coefficient is full-length */ if (!DFISNAN(df) && DECCOMBMSD[sourhi>>26]) return DECPMAX; #if DOUBLE if (sourhi&0x0003ffff) { /* ends in first */ dpdlenchk(0, sourhi>>8); sourlo=DFWORD(df, 1); dpdlendun(1, (sourhi<<2) | (sourlo>>30)); } /* [cannot drop through] */ sourlo=DFWORD(df, 1); /* sourhi not involved now */ if (sourlo&0xfff00000) { /* in one of first two */ dpdlenchk(1, sourlo>>30); /* very rare */ dpdlendun(2, sourlo>>20); } /* [cannot drop through] */ dpdlenchk(3, sourlo>>10); dpdlendun(4, sourlo); /* [cannot drop through] */ #elif QUAD if (sourhi&0x00003fff) { /* ends in first */ dpdlenchk(0, sourhi>>4); sourmh=DFWORD(df, 1); dpdlendun(1, ((sourhi)<<6) | (sourmh>>26)); } /* [cannot drop through] */ sourmh=DFWORD(df, 1); if (sourmh) { dpdlenchk(1, sourmh>>26); dpdlenchk(2, sourmh>>16); dpdlenchk(3, sourmh>>6); sourml=DFWORD(df, 2); dpdlendun(4, ((sourmh)<<4) | (sourml>>28)); } /* [cannot drop through] */ sourml=DFWORD(df, 2); if (sourml) { dpdlenchk(4, sourml>>28); dpdlenchk(5, sourml>>18); dpdlenchk(6, sourml>>8); sourlo=DFWORD(df, 3); dpdlendun(7, ((sourml)<<2) | (sourlo>>30)); } /* [cannot drop through] */ sourlo=DFWORD(df, 3); if (sourlo&0xfff00000) { /* in one of first two */ dpdlenchk(7, sourlo>>30); /* very rare */ dpdlendun(8, sourlo>>20); } /* [cannot drop through] */ dpdlenchk(9, sourlo>>10); dpdlendun(10, sourlo); /* [cannot drop through] */ #endif } /* decFloatDigits */ /* ------------------------------------------------------------------ */ /* decFloatDivide -- divide a decFloat by another */ /* */ /* result gets the result of dividing dfl by dfr: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* ------------------------------------------------------------------ */ /* This is just a wrapper. */ decFloat * decFloatDivide(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { return decDivide(result, dfl, dfr, set, DIVIDE); } /* decFloatDivide */ /* ------------------------------------------------------------------ */ /* decFloatDivideInteger -- integer divide a decFloat by another */ /* */ /* result gets the result of dividing dfl by dfr: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* ------------------------------------------------------------------ */ decFloat * decFloatDivideInteger(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { return decDivide(result, dfl, dfr, set, DIVIDEINT); } /* decFloatDivideInteger */ /* ------------------------------------------------------------------ */ /* decFloatFMA -- multiply and add three decFloats, fused */ /* */ /* result gets the result of (dfl*dfr)+dff with a single rounding */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* dff is the final decFloat (fhs) */ /* set is the context */ /* returns result */ /* */ /* ------------------------------------------------------------------ */ decFloat * decFloatFMA(decFloat *result, const decFloat *dfl, const decFloat *dfr, const decFloat *dff, decContext *set) { /* The accumulator has the bytes needed for FiniteMultiply, plus */ /* one byte to the left in case of carry, plus DECPMAX+2 to the */ /* right for the final addition (up to full fhs + round & sticky) */ #define FMALEN (ROUNDUP4(1+ (DECPMAX9*18+1) +DECPMAX+2)) uByte acc[FMALEN]; /* for multiplied coefficient in BCD */ /* .. and for final result */ bcdnum mul; /* for multiplication result */ bcdnum fin; /* for final operand, expanded */ uByte coe[ROUNDUP4(DECPMAX)]; /* dff coefficient in BCD */ bcdnum *hi, *lo; /* bcdnum with higher/lower exponent */ uInt diffsign; /* non-zero if signs differ */ uInt hipad; /* pad digit for hi if needed */ Int padding; /* excess exponent */ uInt carry; /* +1 for ten's complement and during add */ uByte *ub, *uh, *ul; /* work */ uInt uiwork; /* for macros */ /* handle all the special values [any special operand leads to a */ /* special result] */ if (DFISSPECIAL(dfl) || DFISSPECIAL(dfr) || DFISSPECIAL(dff)) { decFloat proxy; /* multiplication result proxy */ /* NaNs are handled as usual, giving priority to sNaNs */ if (DFISSNAN(dfl) || DFISSNAN(dfr)) return decNaNs(result, dfl, dfr, set); if (DFISSNAN(dff)) return decNaNs(result, dff, NULL, set); if (DFISNAN(dfl) || DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); if (DFISNAN(dff)) return decNaNs(result, dff, NULL, set); /* One or more of the three is infinite */ /* infinity times zero is bad */ decFloatZero(&proxy); if (DFISINF(dfl)) { if (DFISZERO(dfr)) return decInvalid(result, set); decInfinity(&proxy, &proxy); } else if (DFISINF(dfr)) { if (DFISZERO(dfl)) return decInvalid(result, set); decInfinity(&proxy, &proxy); } /* compute sign of multiplication and place in proxy */ DFWORD(&proxy, 0)|=(DFWORD(dfl, 0)^DFWORD(dfr, 0))&DECFLOAT_Sign; if (!DFISINF(dff)) return decFloatCopy(result, &proxy); /* dff is Infinite */ if (!DFISINF(&proxy)) return decInfinity(result, dff); /* both sides of addition are infinite; different sign is bad */ if ((DFWORD(dff, 0)&DECFLOAT_Sign)!=(DFWORD(&proxy, 0)&DECFLOAT_Sign)) return decInvalid(result, set); return decFloatCopy(result, &proxy); } /* Here when all operands are finite */ /* First multiply dfl*dfr */ decFiniteMultiply(&mul, acc+1, dfl, dfr); /* The multiply is complete, exact and unbounded, and described in */ /* mul with the coefficient held in acc[1...] */ /* now add in dff; the algorithm is essentially the same as */ /* decFloatAdd, but the code is different because the code there */ /* is highly optimized for adding two numbers of the same size */ fin.exponent=GETEXPUN(dff); /* get dff exponent and sign */ fin.sign=DFWORD(dff, 0)&DECFLOAT_Sign; diffsign=mul.sign^fin.sign; /* note if signs differ */ fin.msd=coe; fin.lsd=coe+DECPMAX-1; GETCOEFF(dff, coe); /* extract the coefficient */ /* now set hi and lo so that hi points to whichever of mul and fin */ /* has the higher exponent and lo points to the other [don't care, */ /* if the same]. One coefficient will be in acc, the other in coe. */ if (mul.exponent>=fin.exponent) { hi=&mul; lo=&fin; } else { hi=&fin; lo=&mul; } /* remove leading zeros on both operands; this will save time later */ /* and make testing for zero trivial (tests are safe because acc */ /* and coe are rounded up to uInts) */ for (; UBTOUI(hi->msd)==0 && hi->msd+3lsd;) hi->msd+=4; for (; *hi->msd==0 && hi->msdlsd;) hi->msd++; for (; UBTOUI(lo->msd)==0 && lo->msd+3lsd;) lo->msd+=4; for (; *lo->msd==0 && lo->msdlsd;) lo->msd++; /* if hi is zero then result will be lo (which has the smaller */ /* exponent), which also may need to be tested for zero for the */ /* weird IEEE 754 sign rules */ if (*hi->msd==0) { /* hi is zero */ /* "When the sum of two operands with opposite signs is */ /* exactly zero, the sign of that sum shall be '+' in all */ /* rounding modes except round toward -Infinity, in which */ /* mode that sign shall be '-'." */ if (diffsign) { if (*lo->msd==0) { /* lo is zero */ lo->sign=0; if (set->round==DEC_ROUND_FLOOR) lo->sign=DECFLOAT_Sign; } /* diffsign && lo=0 */ } /* diffsign */ return decFinalize(result, lo, set); /* may need clamping */ } /* numfl is zero */ /* [here, both are minimal length and hi is non-zero] */ /* (if lo is zero then padding with zeros may be needed, below) */ /* if signs differ, take the ten's complement of hi (zeros to the */ /* right do not matter because the complement of zero is zero); the */ /* +1 is done later, as part of the addition, inserted at the */ /* correct digit */ hipad=0; carry=0; if (diffsign) { hipad=9; carry=1; /* exactly the correct number of digits must be inverted */ for (uh=hi->msd; uhlsd-3; uh+=4) UBFROMUI(uh, 0x09090909-UBTOUI(uh)); for (; uh<=hi->lsd; uh++) *uh=(uByte)(0x09-*uh); } /* ready to add; note that hi has no leading zeros so gap */ /* calculation does not have to be as pessimistic as in decFloatAdd */ /* (this is much more like the arbitrary-precision algorithm in */ /* Rexx and decNumber) */ /* padding is the number of zeros that would need to be added to hi */ /* for its lsd to be aligned with the lsd of lo */ padding=hi->exponent-lo->exponent; /* printf("FMA pad %ld\n", (LI)padding); */ /* the result of the addition will be built into the accumulator, */ /* starting from the far right; this could be either hi or lo, and */ /* will be aligned */ ub=acc+FMALEN-1; /* where lsd of result will go */ ul=lo->lsd; /* lsd of rhs */ if (padding!=0) { /* unaligned */ /* if the msd of lo is more than DECPMAX+2 digits to the right of */ /* the original msd of hi then it can be reduced to a single */ /* digit at the right place, as it stays clear of hi digits */ /* [it must be DECPMAX+2 because during a subtraction the msd */ /* could become 0 after a borrow from 1.000 to 0.9999...] */ Int hilen=(Int)(hi->lsd-hi->msd+1); /* length of hi */ Int lolen=(Int)(lo->lsd-lo->msd+1); /* and of lo */ if (hilen+padding-lolen > DECPMAX+2) { /* can reduce lo to single */ /* make sure it is virtually at least DECPMAX from hi->msd, at */ /* least to right of hi->lsd (in case of destructive subtract), */ /* and separated by at least two digits from either of those */ /* (the tricky DOUBLE case is when hi is a 1 that will become a */ /* 0.9999... by subtraction: */ /* hi: 1 E+16 */ /* lo: .................1000000000000000 E-16 */ /* which for the addition pads to: */ /* hi: 1000000000000000000 E-16 */ /* lo: .................1000000000000000 E-16 */ Int newexp=MINI(hi->exponent, hi->exponent+hilen-DECPMAX)-3; /* printf("FMA reduce: %ld\n", (LI)reduce); */ lo->lsd=lo->msd; /* to single digit [maybe 0] */ lo->exponent=newexp; /* new lowest exponent */ padding=hi->exponent-lo->exponent; /* recalculate */ ul=lo->lsd; /* .. and repoint */ } /* padding is still > 0, but will fit in acc (less leading carry slot) */ #if DECCHECK if (padding<=0) printf("FMA low padding: %ld\n", (LI)padding); if (hilen+padding+1>FMALEN) printf("FMA excess hilen+padding: %ld+%ld \n", (LI)hilen, (LI)padding); /* printf("FMA padding: %ld\n", (LI)padding); */ #endif /* padding digits can now be set in the result; one or more of */ /* these will come from lo; others will be zeros in the gap */ for (; ul-3>=lo->msd && padding>3; padding-=4, ul-=4, ub-=4) { UBFROMUI(ub-3, UBTOUI(ul-3)); /* [cannot overlap] */ } for (; ul>=lo->msd && padding>0; padding--, ul--, ub--) *ub=*ul; for (;padding>0; padding--, ub--) *ub=0; /* mind the gap */ } /* addition now complete to the right of the rightmost digit of hi */ uh=hi->lsd; /* dow do the add from hi->lsd to the left */ /* [bytewise, because either operand can run out at any time] */ /* carry was set up depending on ten's complement above */ /* first assume both operands have some digits */ for (;; ub--) { if (uhmsd || ulmsd) break; *ub=(uByte)(carry+(*uh--)+(*ul--)); carry=0; if (*ub<10) continue; *ub-=10; carry=1; } /* both loop */ if (ulmsd) { /* to left of lo */ for (;; ub--) { if (uhmsd) break; *ub=(uByte)(carry+(*uh--)); /* [+0] */ carry=0; if (*ub<10) continue; *ub-=10; carry=1; } /* hi loop */ } else { /* to left of hi */ for (;; ub--) { if (ulmsd) break; *ub=(uByte)(carry+hipad+(*ul--)); carry=0; if (*ub<10) continue; *ub-=10; carry=1; } /* lo loop */ } /* addition complete -- now handle carry, borrow, etc. */ /* use lo to set up the num (its exponent is already correct, and */ /* sign usually is) */ lo->msd=ub+1; lo->lsd=acc+FMALEN-1; /* decShowNum(lo, "lo"); */ if (!diffsign) { /* same-sign addition */ if (carry) { /* carry out */ *ub=1; /* place the 1 .. */ lo->msd--; /* .. and update */ } } /* same sign */ else { /* signs differed (subtraction) */ if (!carry) { /* no carry out means hisign=hi->sign; /* sign is lhs sign */ for (ul=lo->msd; ullsd-3; ul+=4) UBFROMUI(ul, 0x09090909-UBTOUI(ul)); for (; ul<=lo->lsd; ul++) *ul=(uByte)(0x09-*ul); /* [leaves ul at lsd+1] */ /* complete the ten's complement by adding 1 [cannot overrun] */ for (ul--; *ul==9; ul--) *ul=0; *ul+=1; } /* borrowed */ else { /* carry out means hi>=lo */ /* sign to use is lo->sign */ /* all done except for the special IEEE 754 exact-zero-result */ /* rule (see above); while testing for zero, strip leading */ /* zeros (which will save decFinalize doing it) */ for (; UBTOUI(lo->msd)==0 && lo->msd+3lsd;) lo->msd+=4; for (; *lo->msd==0 && lo->msdlsd;) lo->msd++; if (*lo->msd==0) { /* must be true zero (and diffsign) */ lo->sign=0; /* assume + */ if (set->round==DEC_ROUND_FLOOR) lo->sign=DECFLOAT_Sign; } /* [else was not zero, might still have leading zeros] */ } /* subtraction gave positive result */ } /* diffsign */ #if DECCHECK /* assert no left underrun */ if (lo->msdmsd)); } #endif return decFinalize(result, lo, set); /* round, check, and lay out */ } /* decFloatFMA */ /* ------------------------------------------------------------------ */ /* decFloatFromInt -- initialise a decFloat from an Int */ /* */ /* result gets the converted Int */ /* n is the Int to convert */ /* returns result */ /* */ /* The result is Exact; no errors or exceptions are possible. */ /* ------------------------------------------------------------------ */ decFloat * decFloatFromInt32(decFloat *result, Int n) { uInt u=(uInt)n; /* copy as bits */ uInt encode; /* work */ DFWORD(result, 0)=ZEROWORD; /* always */ #if QUAD DFWORD(result, 1)=0; DFWORD(result, 2)=0; #endif if (n<0) { /* handle -n with care */ /* [This can be done without the test, but is then slightly slower] */ u=(~u)+1; DFWORD(result, 0)|=DECFLOAT_Sign; } /* Since the maximum value of u now is 2**31, only the low word of */ /* result is affected */ encode=BIN2DPD[u%1000]; u/=1000; encode|=BIN2DPD[u%1000]<<10; u/=1000; encode|=BIN2DPD[u%1000]<<20; u/=1000; /* now 0, 1, or 2 */ encode|=u<<30; DFWORD(result, DECWORDS-1)=encode; return result; } /* decFloatFromInt32 */ /* ------------------------------------------------------------------ */ /* decFloatFromUInt -- initialise a decFloat from a uInt */ /* */ /* result gets the converted uInt */ /* n is the uInt to convert */ /* returns result */ /* */ /* The result is Exact; no errors or exceptions are possible. */ /* ------------------------------------------------------------------ */ decFloat * decFloatFromUInt32(decFloat *result, uInt u) { uInt encode; /* work */ DFWORD(result, 0)=ZEROWORD; /* always */ #if QUAD DFWORD(result, 1)=0; DFWORD(result, 2)=0; #endif encode=BIN2DPD[u%1000]; u/=1000; encode|=BIN2DPD[u%1000]<<10; u/=1000; encode|=BIN2DPD[u%1000]<<20; u/=1000; /* now 0 -> 4 */ encode|=u<<30; DFWORD(result, DECWORDS-1)=encode; DFWORD(result, DECWORDS-2)|=u>>2; /* rarely non-zero */ return result; } /* decFloatFromUInt32 */ /* ------------------------------------------------------------------ */ /* decFloatInvert -- logical digitwise INVERT of a decFloat */ /* */ /* result gets the result of INVERTing df */ /* df is the decFloat to invert */ /* set is the context */ /* returns result, which will be canonical with sign=0 */ /* */ /* The operand must be positive, finite with exponent q=0, and */ /* comprise just zeros and ones; if not, Invalid operation results. */ /* ------------------------------------------------------------------ */ decFloat * decFloatInvert(decFloat *result, const decFloat *df, decContext *set) { uInt sourhi=DFWORD(df, 0); /* top word of dfs */ if (!DFISUINT01(df) || !DFISCC01(df)) return decInvalid(result, set); /* the operand is a finite integer (q=0) */ #if DOUBLE DFWORD(result, 0)=ZEROWORD|((~sourhi)&0x04009124); DFWORD(result, 1)=(~DFWORD(df, 1)) &0x49124491; #elif QUAD DFWORD(result, 0)=ZEROWORD|((~sourhi)&0x04000912); DFWORD(result, 1)=(~DFWORD(df, 1)) &0x44912449; DFWORD(result, 2)=(~DFWORD(df, 2)) &0x12449124; DFWORD(result, 3)=(~DFWORD(df, 3)) &0x49124491; #endif return result; } /* decFloatInvert */ /* ------------------------------------------------------------------ */ /* decFloatIs -- decFloat tests (IsSigned, etc.) */ /* */ /* df is the decFloat to test */ /* returns 0 or 1 in a uInt */ /* */ /* Many of these could be macros, but having them as real functions */ /* is a little cleaner (and they can be referred to here by the */ /* generic names) */ /* ------------------------------------------------------------------ */ uInt decFloatIsCanonical(const decFloat *df) { if (DFISSPECIAL(df)) { if (DFISINF(df)) { if (DFWORD(df, 0)&ECONMASK) return 0; /* exponent continuation */ if (!DFISCCZERO(df)) return 0; /* coefficient continuation */ return 1; } /* is a NaN */ if (DFWORD(df, 0)&ECONNANMASK) return 0; /* exponent continuation */ if (DFISCCZERO(df)) return 1; /* coefficient continuation */ /* drop through to check payload */ } { /* declare block */ #if DOUBLE uInt sourhi=DFWORD(df, 0); uInt sourlo=DFWORD(df, 1); if (CANONDPDOFF(sourhi, 8) && CANONDPDTWO(sourhi, sourlo, 30) && CANONDPDOFF(sourlo, 20) && CANONDPDOFF(sourlo, 10) && CANONDPDOFF(sourlo, 0)) return 1; #elif QUAD uInt sourhi=DFWORD(df, 0); uInt sourmh=DFWORD(df, 1); uInt sourml=DFWORD(df, 2); uInt sourlo=DFWORD(df, 3); if (CANONDPDOFF(sourhi, 4) && CANONDPDTWO(sourhi, sourmh, 26) && CANONDPDOFF(sourmh, 16) && CANONDPDOFF(sourmh, 6) && CANONDPDTWO(sourmh, sourml, 28) && CANONDPDOFF(sourml, 18) && CANONDPDOFF(sourml, 8) && CANONDPDTWO(sourml, sourlo, 30) && CANONDPDOFF(sourlo, 20) && CANONDPDOFF(sourlo, 10) && CANONDPDOFF(sourlo, 0)) return 1; #endif } /* block */ return 0; /* a declet is non-canonical */ } uInt decFloatIsFinite(const decFloat *df) { return !DFISSPECIAL(df); } uInt decFloatIsInfinite(const decFloat *df) { return DFISINF(df); } uInt decFloatIsInteger(const decFloat *df) { return DFISINT(df); } uInt decFloatIsNaN(const decFloat *df) { return DFISNAN(df); } uInt decFloatIsNormal(const decFloat *df) { Int exp; /* exponent */ if (DFISSPECIAL(df)) return 0; if (DFISZERO(df)) return 0; /* is finite and non-zero */ exp=GETEXPUN(df) /* get unbiased exponent .. */ +decFloatDigits(df)-1; /* .. and make adjusted exponent */ return (exp>=DECEMIN); /* < DECEMIN is subnormal */ } uInt decFloatIsSignaling(const decFloat *df) { return DFISSNAN(df); } uInt decFloatIsSignalling(const decFloat *df) { return DFISSNAN(df); } uInt decFloatIsSigned(const decFloat *df) { return DFISSIGNED(df); } uInt decFloatIsSubnormal(const decFloat *df) { if (DFISSPECIAL(df)) return 0; /* is finite */ if (decFloatIsNormal(df)) return 0; /* it is Use |A| */ /* A=0 -> -Infinity (Division by zero) */ /* A=Infinite -> +Infinity (Exact) */ /* A=1 exactly -> 0 (Exact) */ /* NaNs are propagated as usual */ /* ------------------------------------------------------------------ */ decFloat * decFloatLogB(decFloat *result, const decFloat *df, decContext *set) { Int ae; /* adjusted exponent */ if (DFISNAN(df)) return decNaNs(result, df, NULL, set); if (DFISINF(df)) { DFWORD(result, 0)=0; /* need +ve */ return decInfinity(result, result); /* canonical +Infinity */ } if (DFISZERO(df)) { set->status|=DEC_Division_by_zero; /* as per 754 */ DFWORD(result, 0)=DECFLOAT_Sign; /* make negative */ return decInfinity(result, result); /* canonical -Infinity */ } ae=GETEXPUN(df) /* get unbiased exponent .. */ +decFloatDigits(df)-1; /* .. and make adjusted exponent */ /* ae has limited range (3 digits for DOUBLE and 4 for QUAD), so */ /* it is worth using a special case of decFloatFromInt32 */ DFWORD(result, 0)=ZEROWORD; /* always */ if (ae<0) { DFWORD(result, 0)|=DECFLOAT_Sign; /* -0 so far */ ae=-ae; } #if DOUBLE DFWORD(result, 1)=BIN2DPD[ae]; /* a single declet */ #elif QUAD DFWORD(result, 1)=0; DFWORD(result, 2)=0; DFWORD(result, 3)=(ae/1000)<<10; /* is <10, so need no DPD encode */ DFWORD(result, 3)|=BIN2DPD[ae%1000]; #endif return result; } /* decFloatLogB */ /* ------------------------------------------------------------------ */ /* decFloatMax -- return maxnum of two operands */ /* */ /* result gets the chosen decFloat */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* If just one operand is a quiet NaN it is ignored. */ /* ------------------------------------------------------------------ */ decFloat * decFloatMax(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int comp; if (DFISNAN(dfl)) { /* sNaN or both NaNs leads to normal NaN processing */ if (DFISNAN(dfr) || DFISSNAN(dfl)) return decNaNs(result, dfl, dfr, set); return decCanonical(result, dfr); /* RHS is numeric */ } if (DFISNAN(dfr)) { /* sNaN leads to normal NaN processing (both NaN handled above) */ if (DFISSNAN(dfr)) return decNaNs(result, dfl, dfr, set); return decCanonical(result, dfl); /* LHS is numeric */ } /* Both operands are numeric; numeric comparison needed -- use */ /* total order for a well-defined choice (and +0 > -0) */ comp=decNumCompare(dfl, dfr, 1); if (comp>=0) return decCanonical(result, dfl); return decCanonical(result, dfr); } /* decFloatMax */ /* ------------------------------------------------------------------ */ /* decFloatMaxMag -- return maxnummag of two operands */ /* */ /* result gets the chosen decFloat */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* Returns according to the magnitude comparisons if both numeric and */ /* unequal, otherwise returns maxnum */ /* ------------------------------------------------------------------ */ decFloat * decFloatMaxMag(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int comp; decFloat absl, absr; if (DFISNAN(dfl) || DFISNAN(dfr)) return decFloatMax(result, dfl, dfr, set); decFloatCopyAbs(&absl, dfl); decFloatCopyAbs(&absr, dfr); comp=decNumCompare(&absl, &absr, 0); if (comp>0) return decCanonical(result, dfl); if (comp<0) return decCanonical(result, dfr); return decFloatMax(result, dfl, dfr, set); } /* decFloatMaxMag */ /* ------------------------------------------------------------------ */ /* decFloatMin -- return minnum of two operands */ /* */ /* result gets the chosen decFloat */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* If just one operand is a quiet NaN it is ignored. */ /* ------------------------------------------------------------------ */ decFloat * decFloatMin(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int comp; if (DFISNAN(dfl)) { /* sNaN or both NaNs leads to normal NaN processing */ if (DFISNAN(dfr) || DFISSNAN(dfl)) return decNaNs(result, dfl, dfr, set); return decCanonical(result, dfr); /* RHS is numeric */ } if (DFISNAN(dfr)) { /* sNaN leads to normal NaN processing (both NaN handled above) */ if (DFISSNAN(dfr)) return decNaNs(result, dfl, dfr, set); return decCanonical(result, dfl); /* LHS is numeric */ } /* Both operands are numeric; numeric comparison needed -- use */ /* total order for a well-defined choice (and +0 > -0) */ comp=decNumCompare(dfl, dfr, 1); if (comp<=0) return decCanonical(result, dfl); return decCanonical(result, dfr); } /* decFloatMin */ /* ------------------------------------------------------------------ */ /* decFloatMinMag -- return minnummag of two operands */ /* */ /* result gets the chosen decFloat */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* Returns according to the magnitude comparisons if both numeric and */ /* unequal, otherwise returns minnum */ /* ------------------------------------------------------------------ */ decFloat * decFloatMinMag(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int comp; decFloat absl, absr; if (DFISNAN(dfl) || DFISNAN(dfr)) return decFloatMin(result, dfl, dfr, set); decFloatCopyAbs(&absl, dfl); decFloatCopyAbs(&absr, dfr); comp=decNumCompare(&absl, &absr, 0); if (comp<0) return decCanonical(result, dfl); if (comp>0) return decCanonical(result, dfr); return decFloatMin(result, dfl, dfr, set); } /* decFloatMinMag */ /* ------------------------------------------------------------------ */ /* decFloatMinus -- negate value, heeding NaNs, etc. */ /* */ /* result gets the canonicalized 0-df */ /* df is the decFloat to minus */ /* set is the context */ /* returns result */ /* */ /* This has the same effect as 0-df where the exponent of the zero is */ /* the same as that of df (if df is finite). */ /* The effect is also the same as decFloatCopyNegate except that NaNs */ /* are handled normally (the sign of a NaN is not affected, and an */ /* sNaN will signal), the result is canonical, and zero gets sign 0. */ /* ------------------------------------------------------------------ */ decFloat * decFloatMinus(decFloat *result, const decFloat *df, decContext *set) { if (DFISNAN(df)) return decNaNs(result, df, NULL, set); decCanonical(result, df); /* copy and check */ if (DFISZERO(df)) DFBYTE(result, 0)&=~0x80; /* turn off sign bit */ else DFBYTE(result, 0)^=0x80; /* flip sign bit */ return result; } /* decFloatMinus */ /* ------------------------------------------------------------------ */ /* decFloatMultiply -- multiply two decFloats */ /* */ /* result gets the result of multiplying dfl and dfr: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* ------------------------------------------------------------------ */ decFloat * decFloatMultiply(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { bcdnum num; /* for final conversion */ uByte bcdacc[DECPMAX9*18+1]; /* for coefficent in BCD */ if (DFISSPECIAL(dfl) || DFISSPECIAL(dfr)) { /* either is special? */ /* NaNs are handled as usual */ if (DFISNAN(dfl) || DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); /* infinity times zero is bad */ if (DFISINF(dfl) && DFISZERO(dfr)) return decInvalid(result, set); if (DFISINF(dfr) && DFISZERO(dfl)) return decInvalid(result, set); /* both infinite; return canonical infinity with computed sign */ DFWORD(result, 0)=DFWORD(dfl, 0)^DFWORD(dfr, 0); /* compute sign */ return decInfinity(result, result); } /* Here when both operands are finite */ decFiniteMultiply(&num, bcdacc, dfl, dfr); return decFinalize(result, &num, set); /* round, check, and lay out */ } /* decFloatMultiply */ /* ------------------------------------------------------------------ */ /* decFloatNextMinus -- next towards -Infinity */ /* */ /* result gets the next lesser decFloat */ /* dfl is the decFloat to start with */ /* set is the context */ /* returns result */ /* */ /* This is 754 nextdown; Invalid is the only status possible (from */ /* an sNaN). */ /* ------------------------------------------------------------------ */ decFloat * decFloatNextMinus(decFloat *result, const decFloat *dfl, decContext *set) { decFloat delta; /* tiny increment */ uInt savestat; /* saves status */ enum rounding saveround; /* .. and mode */ /* +Infinity is the special case */ if (DFISINF(dfl) && !DFISSIGNED(dfl)) { DFSETNMAX(result); return result; /* [no status to set] */ } /* other cases are effected by sutracting a tiny delta -- this */ /* should be done in a wider format as the delta is unrepresentable */ /* here (but can be done with normal add if the sign of zero is */ /* treated carefully, because no Inexactitude is interesting); */ /* rounding to -Infinity then pushes the result to next below */ decFloatZero(&delta); /* set up tiny delta */ DFWORD(&delta, DECWORDS-1)=1; /* coefficient=1 */ DFWORD(&delta, 0)=DECFLOAT_Sign; /* Sign=1 + biased exponent=0 */ /* set up for the directional round */ saveround=set->round; /* save mode */ set->round=DEC_ROUND_FLOOR; /* .. round towards -Infinity */ savestat=set->status; /* save status */ decFloatAdd(result, dfl, &delta, set); /* Add rules mess up the sign when going from +Ntiny to 0 */ if (DFISZERO(result)) DFWORD(result, 0)^=DECFLOAT_Sign; /* correct */ set->status&=DEC_Invalid_operation; /* preserve only sNaN status */ set->status|=savestat; /* restore pending flags */ set->round=saveround; /* .. and mode */ return result; } /* decFloatNextMinus */ /* ------------------------------------------------------------------ */ /* decFloatNextPlus -- next towards +Infinity */ /* */ /* result gets the next larger decFloat */ /* dfl is the decFloat to start with */ /* set is the context */ /* returns result */ /* */ /* This is 754 nextup; Invalid is the only status possible (from */ /* an sNaN). */ /* ------------------------------------------------------------------ */ decFloat * decFloatNextPlus(decFloat *result, const decFloat *dfl, decContext *set) { uInt savestat; /* saves status */ enum rounding saveround; /* .. and mode */ decFloat delta; /* tiny increment */ /* -Infinity is the special case */ if (DFISINF(dfl) && DFISSIGNED(dfl)) { DFSETNMAX(result); DFWORD(result, 0)|=DECFLOAT_Sign; /* make negative */ return result; /* [no status to set] */ } /* other cases are effected by sutracting a tiny delta -- this */ /* should be done in a wider format as the delta is unrepresentable */ /* here (but can be done with normal add if the sign of zero is */ /* treated carefully, because no Inexactitude is interesting); */ /* rounding to +Infinity then pushes the result to next above */ decFloatZero(&delta); /* set up tiny delta */ DFWORD(&delta, DECWORDS-1)=1; /* coefficient=1 */ DFWORD(&delta, 0)=0; /* Sign=0 + biased exponent=0 */ /* set up for the directional round */ saveround=set->round; /* save mode */ set->round=DEC_ROUND_CEILING; /* .. round towards +Infinity */ savestat=set->status; /* save status */ decFloatAdd(result, dfl, &delta, set); /* Add rules mess up the sign when going from -Ntiny to -0 */ if (DFISZERO(result)) DFWORD(result, 0)^=DECFLOAT_Sign; /* correct */ set->status&=DEC_Invalid_operation; /* preserve only sNaN status */ set->status|=savestat; /* restore pending flags */ set->round=saveround; /* .. and mode */ return result; } /* decFloatNextPlus */ /* ------------------------------------------------------------------ */ /* decFloatNextToward -- next towards a decFloat */ /* */ /* result gets the next decFloat */ /* dfl is the decFloat to start with */ /* dfr is the decFloat to move toward */ /* set is the context */ /* returns result */ /* */ /* This is 754-1985 nextafter, as modified during revision (dropped */ /* from 754-2008); status may be set unless the result is a normal */ /* number. */ /* ------------------------------------------------------------------ */ decFloat * decFloatNextToward(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { decFloat delta; /* tiny increment or decrement */ decFloat pointone; /* 1e-1 */ uInt savestat; /* saves status */ enum rounding saveround; /* .. and mode */ uInt deltatop; /* top word for delta */ Int comp; /* work */ if (DFISNAN(dfl) || DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); /* Both are numeric, so Invalid no longer a possibility */ comp=decNumCompare(dfl, dfr, 0); if (comp==0) return decFloatCopySign(result, dfl, dfr); /* equal */ /* unequal; do NextPlus or NextMinus but with different status rules */ if (comp<0) { /* lhsround; /* save mode */ set->round=DEC_ROUND_CEILING; /* .. round towards +Infinity */ deltatop=0; /* positive delta */ } else { /* lhs>rhs, do NextMinus, see above for commentary */ if (DFISINF(dfl) && !DFISSIGNED(dfl)) { /* +Infinity special case */ DFSETNMAX(result); return result; } saveround=set->round; /* save mode */ set->round=DEC_ROUND_FLOOR; /* .. round towards -Infinity */ deltatop=DECFLOAT_Sign; /* negative delta */ } savestat=set->status; /* save status */ /* Here, Inexact is needed where appropriate (and hence Underflow, */ /* etc.). Therefore the tiny delta which is otherwise */ /* unrepresentable (see NextPlus and NextMinus) is constructed */ /* using the multiplication of FMA. */ decFloatZero(&delta); /* set up tiny delta */ DFWORD(&delta, DECWORDS-1)=1; /* coefficient=1 */ DFWORD(&delta, 0)=deltatop; /* Sign + biased exponent=0 */ decFloatFromString(&pointone, "1E-1", set); /* set up multiplier */ decFloatFMA(result, &delta, &pointone, dfl, set); /* [Delta is truly tiny, so no need to correct sign of zero] */ /* use new status unless the result is normal */ if (decFloatIsNormal(result)) set->status=savestat; /* else goes forward */ set->round=saveround; /* restore mode */ return result; } /* decFloatNextToward */ /* ------------------------------------------------------------------ */ /* decFloatOr -- logical digitwise OR of two decFloats */ /* */ /* result gets the result of ORing dfl and dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result, which will be canonical with sign=0 */ /* */ /* The operands must be positive, finite with exponent q=0, and */ /* comprise just zeros and ones; if not, Invalid operation results. */ /* ------------------------------------------------------------------ */ decFloat * decFloatOr(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { if (!DFISUINT01(dfl) || !DFISUINT01(dfr) || !DFISCC01(dfl) || !DFISCC01(dfr)) return decInvalid(result, set); /* the operands are positive finite integers (q=0) with just 0s and 1s */ #if DOUBLE DFWORD(result, 0)=ZEROWORD |((DFWORD(dfl, 0) | DFWORD(dfr, 0))&0x04009124); DFWORD(result, 1)=(DFWORD(dfl, 1) | DFWORD(dfr, 1))&0x49124491; #elif QUAD DFWORD(result, 0)=ZEROWORD |((DFWORD(dfl, 0) | DFWORD(dfr, 0))&0x04000912); DFWORD(result, 1)=(DFWORD(dfl, 1) | DFWORD(dfr, 1))&0x44912449; DFWORD(result, 2)=(DFWORD(dfl, 2) | DFWORD(dfr, 2))&0x12449124; DFWORD(result, 3)=(DFWORD(dfl, 3) | DFWORD(dfr, 3))&0x49124491; #endif return result; } /* decFloatOr */ /* ------------------------------------------------------------------ */ /* decFloatPlus -- add value to 0, heeding NaNs, etc. */ /* */ /* result gets the canonicalized 0+df */ /* df is the decFloat to plus */ /* set is the context */ /* returns result */ /* */ /* This has the same effect as 0+df where the exponent of the zero is */ /* the same as that of df (if df is finite). */ /* The effect is also the same as decFloatCopy except that NaNs */ /* are handled normally (the sign of a NaN is not affected, and an */ /* sNaN will signal), the result is canonical, and zero gets sign 0. */ /* ------------------------------------------------------------------ */ decFloat * decFloatPlus(decFloat *result, const decFloat *df, decContext *set) { if (DFISNAN(df)) return decNaNs(result, df, NULL, set); decCanonical(result, df); /* copy and check */ if (DFISZERO(df)) DFBYTE(result, 0)&=~0x80; /* turn off sign bit */ return result; } /* decFloatPlus */ /* ------------------------------------------------------------------ */ /* decFloatQuantize -- quantize a decFloat */ /* */ /* result gets the result of quantizing dfl to match dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs), which sets the exponent */ /* set is the context */ /* returns result */ /* */ /* Unless there is an error or the result is infinite, the exponent */ /* of result is guaranteed to be the same as that of dfr. */ /* ------------------------------------------------------------------ */ decFloat * decFloatQuantize(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int explb, exprb; /* left and right biased exponents */ uByte *ulsd; /* local LSD pointer */ uByte *ub, *uc; /* work */ Int drop; /* .. */ uInt dpd; /* .. */ uInt encode; /* encoding accumulator */ uInt sourhil, sourhir; /* top words from source decFloats */ uInt uiwork; /* for macros */ #if QUAD uShort uswork; /* .. */ #endif /* the following buffer holds the coefficient for manipulation */ uByte buf[4+DECPMAX*3+2*QUAD]; /* + space for zeros to left or right */ #if DECTRACE bcdnum num; /* for trace displays */ #endif /* Start decoding the arguments */ sourhil=DFWORD(dfl, 0); /* LHS top word */ explb=DECCOMBEXP[sourhil>>26]; /* get exponent high bits (in place) */ sourhir=DFWORD(dfr, 0); /* RHS top word */ exprb=DECCOMBEXP[sourhir>>26]; if (EXPISSPECIAL(explb | exprb)) { /* either is special? */ /* NaNs are handled as usual */ if (DFISNAN(dfl) || DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); /* one infinity but not both is bad */ if (DFISINF(dfl)!=DFISINF(dfr)) return decInvalid(result, set); /* both infinite; return canonical infinity with sign of LHS */ return decInfinity(result, dfl); } /* Here when both arguments are finite */ /* complete extraction of the exponents [no need to unbias] */ explb+=GETECON(dfl); /* + continuation */ exprb+=GETECON(dfr); /* .. */ /* calculate the number of digits to drop from the coefficient */ drop=exprb-explb; /* 0 if nothing to do */ if (drop==0) return decCanonical(result, dfl); /* return canonical */ /* the coefficient is needed; lay it out into buf, offset so zeros */ /* can be added before or after as needed -- an extra heading is */ /* added so can safely pad Quad DECPMAX-1 zeros to the left by */ /* fours */ #define BUFOFF (buf+4+DECPMAX) GETCOEFF(dfl, BUFOFF); /* decode from decFloat */ /* [now the msd is at BUFOFF and the lsd is at BUFOFF+DECPMAX-1] */ #if DECTRACE num.msd=BUFOFF; num.lsd=BUFOFF+DECPMAX-1; num.exponent=explb-DECBIAS; num.sign=sourhil & DECFLOAT_Sign; decShowNum(&num, "dfl"); #endif if (drop>0) { /* [most common case] */ /* (this code is very similar to that in decFloatFinalize, but */ /* has many differences so is duplicated here -- so any changes */ /* may need to be made there, too) */ uByte *roundat; /* -> re-round digit */ uByte reround; /* reround value */ /* printf("Rounding; drop=%ld\n", (LI)drop); */ /* there is at least one zero needed to the left, in all but one */ /* exceptional (all-nines) case, so place four zeros now; this is */ /* needed almost always and makes rounding all-nines by fours safe */ UBFROMUI(BUFOFF-4, 0); /* Three cases here: */ /* 1. new LSD is in coefficient (almost always) */ /* 2. new LSD is digit to left of coefficient (so MSD is */ /* round-for-reround digit) */ /* 3. new LSD is to left of case 2 (whole coefficient is sticky) */ /* Note that leading zeros can safely be treated as useful digits */ /* [duplicate check-stickies code to save a test] */ /* [by-digit check for stickies as runs of zeros are rare] */ if (dropstatus|=DEC_Inexact; /* next decide whether to increment the coefficient */ if (set->round==DEC_ROUND_HALF_EVEN) { /* fastpath slowest case */ if (reround>5) bump=1; /* >0.5 goes up */ else if (reround==5) /* exactly 0.5000 .. */ bump=*ulsd & 0x01; /* .. up iff [new] lsd is odd */ } /* r-h-e */ else switch (set->round) { case DEC_ROUND_DOWN: { /* no change */ break;} /* r-d */ case DEC_ROUND_HALF_DOWN: { if (reround>5) bump=1; break;} /* r-h-d */ case DEC_ROUND_HALF_UP: { if (reround>=5) bump=1; break;} /* r-h-u */ case DEC_ROUND_UP: { if (reround>0) bump=1; break;} /* r-u */ case DEC_ROUND_CEILING: { /* same as _UP for positive numbers, and as _DOWN for negatives */ if (!(sourhil&DECFLOAT_Sign) && reround>0) bump=1; break;} /* r-c */ case DEC_ROUND_FLOOR: { /* same as _UP for negative numbers, and as _DOWN for positive */ /* [negative reround cannot occur on 0] */ if (sourhil&DECFLOAT_Sign && reround>0) bump=1; break;} /* r-f */ case DEC_ROUND_05UP: { if (reround>0) { /* anything out there is 'sticky' */ /* bump iff lsd=0 or 5; this cannot carry so it could be */ /* effected immediately with no bump -- but the code */ /* is clearer if this is done the same way as the others */ if (*ulsd==0 || *ulsd==5) bump=1; } break;} /* r-r */ default: { /* e.g., DEC_ROUND_MAX */ set->status|=DEC_Invalid_context; #if DECCHECK printf("Unknown rounding mode: %ld\n", (LI)set->round); #endif break;} } /* switch (not r-h-e) */ /* printf("ReRound: %ld bump: %ld\n", (LI)reround, (LI)bump); */ if (bump!=0) { /* need increment */ /* increment the coefficient; this could give 1000... (after */ /* the all nines case) */ ub=ulsd; for (; UBTOUI(ub-3)==0x09090909; ub-=4) UBFROMUI(ub-3, 0); /* now at most 3 digits left to non-9 (usually just the one) */ for (; *ub==9; ub--) *ub=0; *ub+=1; /* [the all-nines case will have carried one digit to the */ /* left of the original MSD -- just where it is needed] */ } /* bump needed */ } /* inexact rounding */ /* now clear zeros to the left so exactly DECPMAX digits will be */ /* available in the coefficent -- the first word to the left was */ /* cleared earlier for safe carry; now add any more needed */ if (drop>4) { UBFROMUI(BUFOFF-8, 0); /* must be at least 5 */ for (uc=BUFOFF-12; uc>ulsd-DECPMAX-3; uc-=4) UBFROMUI(uc, 0); } } /* need round (drop>0) */ else { /* drop<0; padding with -drop digits is needed */ /* This is the case where an error can occur if the padded */ /* coefficient will not fit; checking for this can be done in the */ /* same loop as padding for zeros if the no-hope and zero cases */ /* are checked first */ if (-drop>DECPMAX-1) { /* cannot fit unless 0 */ if (!ISCOEFFZERO(BUFOFF)) return decInvalid(result, set); /* a zero can have any exponent; just drop through and use it */ ulsd=BUFOFF+DECPMAX-1; } else { /* padding will fit (but may still be too long) */ /* final-word mask depends on endianess */ #if DECLITEND static const uInt dmask[]={0, 0x000000ff, 0x0000ffff, 0x00ffffff}; #else static const uInt dmask[]={0, 0xff000000, 0xffff0000, 0xffffff00}; #endif /* note that here zeros to the right are added by fours, so in */ /* the Quad case this could write 36 zeros if the coefficient has */ /* fewer than three significant digits (hence the +2*QUAD for buf) */ for (uc=BUFOFF+DECPMAX;; uc+=4) { UBFROMUI(uc, 0); if (UBTOUI(uc-DECPMAX)!=0) { /* could be bad */ /* if all four digits should be zero, definitely bad */ if (uc<=BUFOFF+DECPMAX+(-drop)-4) return decInvalid(result, set); /* must be a 1- to 3-digit sequence; check more carefully */ if ((UBTOUI(uc-DECPMAX)&dmask[(-drop)%4])!=0) return decInvalid(result, set); break; /* no need for loop end test */ } if (uc>=BUFOFF+DECPMAX+(-drop)-4) break; /* done */ } ulsd=BUFOFF+DECPMAX+(-drop)-1; } /* pad and check leading zeros */ } /* drop<0 */ #if DECTRACE num.msd=ulsd-DECPMAX+1; num.lsd=ulsd; num.exponent=explb-DECBIAS; num.sign=sourhil & DECFLOAT_Sign; decShowNum(&num, "res"); #endif /*------------------------------------------------------------------*/ /* At this point the result is DECPMAX digits, ending at ulsd, so */ /* fits the encoding exactly; there is no possibility of error */ /*------------------------------------------------------------------*/ encode=((exprb>>DECECONL)<<4) + *(ulsd-DECPMAX+1); /* make index */ encode=DECCOMBFROM[encode]; /* indexed by (0-2)*16+msd */ /* the exponent continuation can be extracted from the original RHS */ encode|=sourhir & ECONMASK; encode|=sourhil&DECFLOAT_Sign; /* add the sign from LHS */ /* finally encode the coefficient */ /* private macro to encode a declet; this version can be used */ /* because all coefficient digits exist */ #define getDPD3q(dpd, n) ub=ulsd-(3*(n))-2; \ dpd=BCD2DPD[(*ub*256)+(*(ub+1)*16)+*(ub+2)]; #if DOUBLE getDPD3q(dpd, 4); encode|=dpd<<8; getDPD3q(dpd, 3); encode|=dpd>>2; DFWORD(result, 0)=encode; encode=dpd<<30; getDPD3q(dpd, 2); encode|=dpd<<20; getDPD3q(dpd, 1); encode|=dpd<<10; getDPD3q(dpd, 0); encode|=dpd; DFWORD(result, 1)=encode; #elif QUAD getDPD3q(dpd,10); encode|=dpd<<4; getDPD3q(dpd, 9); encode|=dpd>>6; DFWORD(result, 0)=encode; encode=dpd<<26; getDPD3q(dpd, 8); encode|=dpd<<16; getDPD3q(dpd, 7); encode|=dpd<<6; getDPD3q(dpd, 6); encode|=dpd>>4; DFWORD(result, 1)=encode; encode=dpd<<28; getDPD3q(dpd, 5); encode|=dpd<<18; getDPD3q(dpd, 4); encode|=dpd<<8; getDPD3q(dpd, 3); encode|=dpd>>2; DFWORD(result, 2)=encode; encode=dpd<<30; getDPD3q(dpd, 2); encode|=dpd<<20; getDPD3q(dpd, 1); encode|=dpd<<10; getDPD3q(dpd, 0); encode|=dpd; DFWORD(result, 3)=encode; #endif return result; } /* decFloatQuantize */ /* ------------------------------------------------------------------ */ /* decFloatReduce -- reduce finite coefficient to minimum length */ /* */ /* result gets the reduced decFloat */ /* df is the source decFloat */ /* set is the context */ /* returns result, which will be canonical */ /* */ /* This removes all possible trailing zeros from the coefficient; */ /* some may remain when the number is very close to Nmax. */ /* Special values are unchanged and no status is set unless df=sNaN. */ /* Reduced zero has an exponent q=0. */ /* ------------------------------------------------------------------ */ decFloat * decFloatReduce(decFloat *result, const decFloat *df, decContext *set) { bcdnum num; /* work */ uByte buf[DECPMAX], *ub; /* coefficient and pointer */ if (df!=result) *result=*df; /* copy, if needed */ if (DFISNAN(df)) return decNaNs(result, df, NULL, set); /* sNaN */ /* zeros and infinites propagate too */ if (DFISINF(df)) return decInfinity(result, df); /* canonical */ if (DFISZERO(df)) { uInt sign=DFWORD(df, 0)&DECFLOAT_Sign; decFloatZero(result); DFWORD(result, 0)|=sign; return result; /* exponent dropped, sign OK */ } /* non-zero finite */ GETCOEFF(df, buf); ub=buf+DECPMAX-1; /* -> lsd */ if (*ub) return result; /* no trailing zeros */ for (ub--; *ub==0;) ub--; /* terminates because non-zero */ /* *ub is the first non-zero from the right */ num.sign=DFWORD(df, 0)&DECFLOAT_Sign; /* set up number... */ num.exponent=GETEXPUN(df)+(Int)(buf+DECPMAX-1-ub); /* adjusted exponent */ num.msd=buf; num.lsd=ub; return decFinalize(result, &num, set); } /* decFloatReduce */ /* ------------------------------------------------------------------ */ /* decFloatRemainder -- integer divide and return remainder */ /* */ /* result gets the remainder of dividing dfl by dfr: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* ------------------------------------------------------------------ */ decFloat * decFloatRemainder(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { return decDivide(result, dfl, dfr, set, REMAINDER); } /* decFloatRemainder */ /* ------------------------------------------------------------------ */ /* decFloatRemainderNear -- integer divide to nearest and remainder */ /* */ /* result gets the remainder of dividing dfl by dfr: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* This is the IEEE remainder, where the nearest integer is used. */ /* ------------------------------------------------------------------ */ decFloat * decFloatRemainderNear(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { return decDivide(result, dfl, dfr, set, REMNEAR); } /* decFloatRemainderNear */ /* ------------------------------------------------------------------ */ /* decFloatRotate -- rotate the coefficient of a decFloat left/right */ /* */ /* result gets the result of rotating dfl */ /* dfl is the source decFloat to rotate */ /* dfr is the count of digits to rotate, an integer (with q=0) */ /* set is the context */ /* returns result */ /* */ /* The digits of the coefficient of dfl are rotated to the left (if */ /* dfr is positive) or to the right (if dfr is negative) without */ /* adjusting the exponent or the sign of dfl. */ /* */ /* dfr must be in the range -DECPMAX through +DECPMAX. */ /* NaNs are propagated as usual. An infinite dfl is unaffected (but */ /* dfr must be valid). No status is set unless dfr is invalid or an */ /* operand is an sNaN. The result is canonical. */ /* ------------------------------------------------------------------ */ #define PHALF (ROUNDUP(DECPMAX/2, 4)) /* half length, rounded up */ decFloat * decFloatRotate(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int rotate; /* dfr as an Int */ uByte buf[DECPMAX+PHALF]; /* coefficient + half */ uInt digits, savestat; /* work */ bcdnum num; /* .. */ uByte *ub; /* .. */ if (DFISNAN(dfl)||DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); if (!DFISINT(dfr)) return decInvalid(result, set); digits=decFloatDigits(dfr); /* calculate digits */ if (digits>2) return decInvalid(result, set); /* definitely out of range */ rotate=DPD2BIN[DFWORD(dfr, DECWORDS-1)&0x3ff]; /* is in bottom declet */ if (rotate>DECPMAX) return decInvalid(result, set); /* too big */ /* [from here on no error or status change is possible] */ if (DFISINF(dfl)) return decInfinity(result, dfl); /* canonical */ /* handle no-rotate cases */ if (rotate==0 || rotate==DECPMAX) return decCanonical(result, dfl); /* a real rotate is needed: 0 < rotate < DECPMAX */ /* reduce the rotation to no more than half to reduce copying later */ /* (for QUAD in fact half + 2 digits) */ if (DFISSIGNED(dfr)) rotate=-rotate; if (abs(rotate)>PHALF) { if (rotate<0) rotate=DECPMAX+rotate; else rotate=rotate-DECPMAX; } /* now lay out the coefficient, leaving room to the right or the */ /* left depending on the direction of rotation */ ub=buf; if (rotate<0) ub+=PHALF; /* rotate right, so space to left */ GETCOEFF(dfl, ub); /* copy half the digits to left or right, and set num.msd */ if (rotate<0) { memcpy(buf, buf+DECPMAX, PHALF); num.msd=buf+PHALF+rotate; } else { memcpy(buf+DECPMAX, buf, PHALF); num.msd=buf+rotate; } /* fill in rest of num */ num.lsd=num.msd+DECPMAX-1; num.sign=DFWORD(dfl, 0)&DECFLOAT_Sign; num.exponent=GETEXPUN(dfl); savestat=set->status; /* record */ decFinalize(result, &num, set); set->status=savestat; /* restore */ return result; } /* decFloatRotate */ /* ------------------------------------------------------------------ */ /* decFloatSameQuantum -- test decFloats for same quantum */ /* */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* returns 1 if the operands have the same quantum, 0 otherwise */ /* */ /* No error is possible and no status results. */ /* ------------------------------------------------------------------ */ uInt decFloatSameQuantum(const decFloat *dfl, const decFloat *dfr) { if (DFISSPECIAL(dfl) || DFISSPECIAL(dfr)) { if (DFISNAN(dfl) && DFISNAN(dfr)) return 1; if (DFISINF(dfl) && DFISINF(dfr)) return 1; return 0; /* any other special mixture gives false */ } if (GETEXP(dfl)==GETEXP(dfr)) return 1; /* biased exponents match */ return 0; } /* decFloatSameQuantum */ /* ------------------------------------------------------------------ */ /* decFloatScaleB -- multiply by a power of 10, as per 754 */ /* */ /* result gets the result of the operation */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs), am integer (with q=0) */ /* set is the context */ /* returns result */ /* */ /* This computes result=dfl x 10**dfr where dfr is an integer in the */ /* range +/-2*(emax+pmax), typically resulting from LogB. */ /* Underflow and Overflow (with Inexact) may occur. NaNs propagate */ /* as usual. */ /* ------------------------------------------------------------------ */ #define SCALEBMAX 2*(DECEMAX+DECPMAX) /* D=800, Q=12356 */ decFloat * decFloatScaleB(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { uInt digits; /* work */ Int expr; /* dfr as an Int */ if (DFISNAN(dfl)||DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); if (!DFISINT(dfr)) return decInvalid(result, set); digits=decFloatDigits(dfr); /* calculate digits */ #if DOUBLE if (digits>3) return decInvalid(result, set); /* definitely out of range */ expr=DPD2BIN[DFWORD(dfr, 1)&0x3ff]; /* must be in bottom declet */ #elif QUAD if (digits>5) return decInvalid(result, set); /* definitely out of range */ expr=DPD2BIN[DFWORD(dfr, 3)&0x3ff] /* in bottom 2 declets .. */ +DPD2BIN[(DFWORD(dfr, 3)>>10)&0x3ff]*1000; /* .. */ #endif if (expr>SCALEBMAX) return decInvalid(result, set); /* oops */ /* [from now on no error possible] */ if (DFISINF(dfl)) return decInfinity(result, dfl); /* canonical */ if (DFISSIGNED(dfr)) expr=-expr; /* dfl is finite and expr is valid */ *result=*dfl; /* copy to target */ return decFloatSetExponent(result, set, GETEXPUN(result)+expr); } /* decFloatScaleB */ /* ------------------------------------------------------------------ */ /* decFloatShift -- shift the coefficient of a decFloat left or right */ /* */ /* result gets the result of shifting dfl */ /* dfl is the source decFloat to shift */ /* dfr is the count of digits to shift, an integer (with q=0) */ /* set is the context */ /* returns result */ /* */ /* The digits of the coefficient of dfl are shifted to the left (if */ /* dfr is positive) or to the right (if dfr is negative) without */ /* adjusting the exponent or the sign of dfl. */ /* */ /* dfr must be in the range -DECPMAX through +DECPMAX. */ /* NaNs are propagated as usual. An infinite dfl is unaffected (but */ /* dfr must be valid). No status is set unless dfr is invalid or an */ /* operand is an sNaN. The result is canonical. */ /* ------------------------------------------------------------------ */ decFloat * decFloatShift(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { Int shift; /* dfr as an Int */ uByte buf[DECPMAX*2]; /* coefficient + padding */ uInt digits, savestat; /* work */ bcdnum num; /* .. */ uInt uiwork; /* for macros */ if (DFISNAN(dfl)||DFISNAN(dfr)) return decNaNs(result, dfl, dfr, set); if (!DFISINT(dfr)) return decInvalid(result, set); digits=decFloatDigits(dfr); /* calculate digits */ if (digits>2) return decInvalid(result, set); /* definitely out of range */ shift=DPD2BIN[DFWORD(dfr, DECWORDS-1)&0x3ff]; /* is in bottom declet */ if (shift>DECPMAX) return decInvalid(result, set); /* too big */ /* [from here on no error or status change is possible] */ if (DFISINF(dfl)) return decInfinity(result, dfl); /* canonical */ /* handle no-shift and all-shift (clear to zero) cases */ if (shift==0) return decCanonical(result, dfl); if (shift==DECPMAX) { /* zero with sign */ uByte sign=(uByte)(DFBYTE(dfl, 0)&0x80); /* save sign bit */ decFloatZero(result); /* make +0 */ DFBYTE(result, 0)=(uByte)(DFBYTE(result, 0)|sign); /* and set sign */ /* [cannot safely use CopySign] */ return result; } /* a real shift is needed: 0 < shift < DECPMAX */ num.sign=DFWORD(dfl, 0)&DECFLOAT_Sign; num.exponent=GETEXPUN(dfl); num.msd=buf; GETCOEFF(dfl, buf); if (DFISSIGNED(dfr)) { /* shift right */ /* edge cases are taken care of, so this is easy */ num.lsd=buf+DECPMAX-shift-1; } else { /* shift left -- zero padding needed to right */ UBFROMUI(buf+DECPMAX, 0); /* 8 will handle most cases */ UBFROMUI(buf+DECPMAX+4, 0); /* .. */ if (shift>8) memset(buf+DECPMAX+8, 0, 8+QUAD*18); /* all other cases */ num.msd+=shift; num.lsd=num.msd+DECPMAX-1; } savestat=set->status; /* record */ decFinalize(result, &num, set); set->status=savestat; /* restore */ return result; } /* decFloatShift */ /* ------------------------------------------------------------------ */ /* decFloatSubtract -- subtract a decFloat from another */ /* */ /* result gets the result of subtracting dfr from dfl: */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result */ /* */ /* ------------------------------------------------------------------ */ decFloat * decFloatSubtract(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { decFloat temp; /* NaNs must propagate without sign change */ if (DFISNAN(dfr)) return decFloatAdd(result, dfl, dfr, set); temp=*dfr; /* make a copy */ DFBYTE(&temp, 0)^=0x80; /* flip sign */ return decFloatAdd(result, dfl, &temp, set); /* and add to the lhs */ } /* decFloatSubtract */ /* ------------------------------------------------------------------ */ /* decFloatToInt -- round to 32-bit binary integer (4 flavours) */ /* */ /* df is the decFloat to round */ /* set is the context */ /* round is the rounding mode to use */ /* returns a uInt or an Int, rounded according to the name */ /* */ /* Invalid will always be signaled if df is a NaN, is Infinite, or is */ /* outside the range of the target; Inexact will not be signaled for */ /* simple rounding unless 'Exact' appears in the name. */ /* ------------------------------------------------------------------ */ uInt decFloatToUInt32(const decFloat *df, decContext *set, enum rounding round) { return decToInt32(df, set, round, 0, 1);} uInt decFloatToUInt32Exact(const decFloat *df, decContext *set, enum rounding round) { return decToInt32(df, set, round, 1, 1);} Int decFloatToInt32(const decFloat *df, decContext *set, enum rounding round) { return (Int)decToInt32(df, set, round, 0, 0);} Int decFloatToInt32Exact(const decFloat *df, decContext *set, enum rounding round) { return (Int)decToInt32(df, set, round, 1, 0);} /* ------------------------------------------------------------------ */ /* decFloatToIntegral -- round to integral value (two flavours) */ /* */ /* result gets the result */ /* df is the decFloat to round */ /* set is the context */ /* round is the rounding mode to use */ /* returns result */ /* */ /* No exceptions, even Inexact, are raised except for sNaN input, or */ /* if 'Exact' appears in the name. */ /* ------------------------------------------------------------------ */ decFloat * decFloatToIntegralValue(decFloat *result, const decFloat *df, decContext *set, enum rounding round) { return decToIntegral(result, df, set, round, 0);} decFloat * decFloatToIntegralExact(decFloat *result, const decFloat *df, decContext *set) { return decToIntegral(result, df, set, set->round, 1);} /* ------------------------------------------------------------------ */ /* decFloatXor -- logical digitwise XOR of two decFloats */ /* */ /* result gets the result of XORing dfl and dfr */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) */ /* set is the context */ /* returns result, which will be canonical with sign=0 */ /* */ /* The operands must be positive, finite with exponent q=0, and */ /* comprise just zeros and ones; if not, Invalid operation results. */ /* ------------------------------------------------------------------ */ decFloat * decFloatXor(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { if (!DFISUINT01(dfl) || !DFISUINT01(dfr) || !DFISCC01(dfl) || !DFISCC01(dfr)) return decInvalid(result, set); /* the operands are positive finite integers (q=0) with just 0s and 1s */ #if DOUBLE DFWORD(result, 0)=ZEROWORD |((DFWORD(dfl, 0) ^ DFWORD(dfr, 0))&0x04009124); DFWORD(result, 1)=(DFWORD(dfl, 1) ^ DFWORD(dfr, 1))&0x49124491; #elif QUAD DFWORD(result, 0)=ZEROWORD |((DFWORD(dfl, 0) ^ DFWORD(dfr, 0))&0x04000912); DFWORD(result, 1)=(DFWORD(dfl, 1) ^ DFWORD(dfr, 1))&0x44912449; DFWORD(result, 2)=(DFWORD(dfl, 2) ^ DFWORD(dfr, 2))&0x12449124; DFWORD(result, 3)=(DFWORD(dfl, 3) ^ DFWORD(dfr, 3))&0x49124491; #endif return result; } /* decFloatXor */ /* ------------------------------------------------------------------ */ /* decInvalid -- set Invalid_operation result */ /* */ /* result gets a canonical NaN */ /* set is the context */ /* returns result */ /* */ /* status has Invalid_operation added */ /* ------------------------------------------------------------------ */ static decFloat *decInvalid(decFloat *result, decContext *set) { decFloatZero(result); DFWORD(result, 0)=DECFLOAT_qNaN; set->status|=DEC_Invalid_operation; return result; } /* decInvalid */ /* ------------------------------------------------------------------ */ /* decInfinity -- set canonical Infinity with sign from a decFloat */ /* */ /* result gets a canonical Infinity */ /* df is source decFloat (only the sign is used) */ /* returns result */ /* */ /* df may be the same as result */ /* ------------------------------------------------------------------ */ static decFloat *decInfinity(decFloat *result, const decFloat *df) { uInt sign=DFWORD(df, 0); /* save source signword */ decFloatZero(result); /* clear everything */ DFWORD(result, 0)=DECFLOAT_Inf | (sign & DECFLOAT_Sign); return result; } /* decInfinity */ /* ------------------------------------------------------------------ */ /* decNaNs -- handle NaN argument(s) */ /* */ /* result gets the result of handling dfl and dfr, one or both of */ /* which is a NaN */ /* dfl is the first decFloat (lhs) */ /* dfr is the second decFloat (rhs) -- may be NULL for a single- */ /* operand operation */ /* set is the context */ /* returns result */ /* */ /* Called when one or both operands is a NaN, and propagates the */ /* appropriate result to res. When an sNaN is found, it is changed */ /* to a qNaN and Invalid operation is set. */ /* ------------------------------------------------------------------ */ static decFloat *decNaNs(decFloat *result, const decFloat *dfl, const decFloat *dfr, decContext *set) { /* handle sNaNs first */ if (dfr!=NULL && DFISSNAN(dfr) && !DFISSNAN(dfl)) dfl=dfr; /* use RHS */ if (DFISSNAN(dfl)) { decCanonical(result, dfl); /* propagate canonical sNaN */ DFWORD(result, 0)&=~(DECFLOAT_qNaN ^ DECFLOAT_sNaN); /* quiet */ set->status|=DEC_Invalid_operation; return result; } /* one or both is a quiet NaN */ if (!DFISNAN(dfl)) dfl=dfr; /* RHS must be NaN, use it */ return decCanonical(result, dfl); /* propagate canonical qNaN */ } /* decNaNs */ /* ------------------------------------------------------------------ */ /* decNumCompare -- numeric comparison of two decFloats */ /* */ /* dfl is the left-hand decFloat, which is not a NaN */ /* dfr is the right-hand decFloat, which is not a NaN */ /* tot is 1 for total order compare, 0 for simple numeric */ /* returns -1, 0, or +1 for dfldfr */ /* */ /* No error is possible; status and mode are unchanged. */ /* ------------------------------------------------------------------ */ static Int decNumCompare(const decFloat *dfl, const decFloat *dfr, Flag tot) { Int sigl, sigr; /* LHS and RHS non-0 signums */ Int shift; /* shift needed to align operands */ uByte *ub, *uc; /* work */ uInt uiwork; /* for macros */ /* buffers +2 if Quad (36 digits), need double plus 4 for safe padding */ uByte bufl[DECPMAX*2+QUAD*2+4]; /* for LHS coefficient + padding */ uByte bufr[DECPMAX*2+QUAD*2+4]; /* for RHS coefficient + padding */ sigl=1; if (DFISSIGNED(dfl)) { if (!DFISSIGNED(dfr)) { /* -LHS +RHS */ if (DFISZERO(dfl) && DFISZERO(dfr) && !tot) return 0; return -1; /* RHS wins */ } sigl=-1; } if (DFISSIGNED(dfr)) { if (!DFISSIGNED(dfl)) { /* +LHS -RHS */ if (DFISZERO(dfl) && DFISZERO(dfr) && !tot) return 0; return +1; /* LHS wins */ } } /* signs are the same; operand(s) could be zero */ sigr=-sigl; /* sign to return if abs(RHS) wins */ if (DFISINF(dfl)) { if (DFISINF(dfr)) return 0; /* both infinite & same sign */ return sigl; /* inf > n */ } if (DFISINF(dfr)) return sigr; /* n < inf [dfl is finite] */ /* here, both are same sign and finite; calculate their offset */ shift=GETEXP(dfl)-GETEXP(dfr); /* [0 means aligned] */ /* [bias can be ignored -- the absolute exponent is not relevant] */ if (DFISZERO(dfl)) { if (!DFISZERO(dfr)) return sigr; /* LHS=0, RHS!=0 */ /* both are zero, return 0 if both same exponent or numeric compare */ if (shift==0 || !tot) return 0; if (shift>0) return sigl; return sigr; /* [shift<0] */ } else { /* LHS!=0 */ if (DFISZERO(dfr)) return sigl; /* LHS!=0, RHS=0 */ } /* both are known to be non-zero at this point */ /* if the exponents are so different that the coefficients do not */ /* overlap (by even one digit) then a full comparison is not needed */ if (abs(shift)>=DECPMAX) { /* no overlap */ /* coefficients are known to be non-zero */ if (shift>0) return sigl; return sigr; /* [shift<0] */ } /* decode the coefficients */ /* (shift both right two if Quad to make a multiple of four) */ #if QUAD UBFROMUI(bufl, 0); UBFROMUI(bufr, 0); #endif GETCOEFF(dfl, bufl+QUAD*2); /* decode from decFloat */ GETCOEFF(dfr, bufr+QUAD*2); /* .. */ if (shift==0) { /* aligned; common and easy */ /* all multiples of four, here */ for (ub=bufl, uc=bufr; ub*uc) return sigl; /* difference found */ if (*ub<*uc) return sigr; /* .. */ } } } /* aligned */ else if (shift>0) { /* lhs to left */ ub=bufl; /* RHS pointer */ /* pad bufl so right-aligned; most shifts will fit in 8 */ UBFROMUI(bufl+DECPMAX+QUAD*2, 0); /* add eight zeros */ UBFROMUI(bufl+DECPMAX+QUAD*2+4, 0); /* .. */ if (shift>8) { /* more than eight; fill the rest, and also worth doing the */ /* lead-in by fours */ uByte *up; /* work */ uByte *upend=bufl+DECPMAX+QUAD*2+shift; for (up=bufl+DECPMAX+QUAD*2+8; upbufl+shift-4) break; } } /* check remaining leading digits */ for (; ub*uc) return sigl; /* difference found */ if (*ub<*uc) return sigr; /* .. */ } } /* mismatch */ if (uc==bufr+QUAD*2+DECPMAX-4) break; /* all checked */ } } /* shift>0 */ else { /* shift<0) .. RHS is to left of LHS; mirror shift>0 */ uc=bufr; /* RHS pointer */ /* pad bufr so right-aligned; most shifts will fit in 8 */ UBFROMUI(bufr+DECPMAX+QUAD*2, 0); /* add eight zeros */ UBFROMUI(bufr+DECPMAX+QUAD*2+4, 0); /* .. */ if (shift<-8) { /* more than eight; fill the rest, and also worth doing the */ /* lead-in by fours */ uByte *up; /* work */ uByte *upend=bufr+DECPMAX+QUAD*2-shift; for (up=bufr+DECPMAX+QUAD*2+8; upbufr-shift-4) break; } } /* check remaining leading digits */ for (; uc*uc) return sigl; /* difference found */ if (*ub<*uc) return sigr; /* .. */ } } /* mismatch */ if (ub==bufl+QUAD*2+DECPMAX-4) break; /* all checked */ } } /* shift<0 */ /* Here when compare equal */ if (!tot) return 0; /* numerically equal */ /* total ordering .. exponent matters */ if (shift>0) return sigl; /* total order by exponent */ if (shift<0) return sigr; /* .. */ return 0; } /* decNumCompare */ /* ------------------------------------------------------------------ */ /* decToInt32 -- local routine to effect ToInteger conversions */ /* */ /* df is the decFloat to convert */ /* set is the context */ /* rmode is the rounding mode to use */ /* exact is 1 if Inexact should be signalled */ /* unsign is 1 if the result a uInt, 0 if an Int (cast to uInt) */ /* returns 32-bit result as a uInt */ /* */ /* Invalid is set is df is a NaN, is infinite, or is out-of-range; in */ /* these cases 0 is returned. */ /* ------------------------------------------------------------------ */ static uInt decToInt32(const decFloat *df, decContext *set, enum rounding rmode, Flag exact, Flag unsign) { Int exp; /* exponent */ uInt sourhi, sourpen, sourlo; /* top word from source decFloat .. */ uInt hi, lo; /* .. penultimate, least, etc. */ decFloat zero, result; /* work */ Int i; /* .. */ /* Start decoding the argument */ sourhi=DFWORD(df, 0); /* top word */ exp=DECCOMBEXP[sourhi>>26]; /* get exponent high bits (in place) */ if (EXPISSPECIAL(exp)) { /* is special? */ set->status|=DEC_Invalid_operation; /* signal */ return 0; } /* Here when the argument is finite */ if (GETEXPUN(df)==0) result=*df; /* already a true integer */ else { /* need to round to integer */ enum rounding saveround; /* saver */ uInt savestatus; /* .. */ saveround=set->round; /* save rounding mode .. */ savestatus=set->status; /* .. and status */ set->round=rmode; /* set mode */ decFloatZero(&zero); /* make 0E+0 */ set->status=0; /* clear */ decFloatQuantize(&result, df, &zero, set); /* [this may fail] */ set->round=saveround; /* restore rounding mode .. */ if (exact) set->status|=savestatus; /* include Inexact */ else set->status=savestatus; /* .. or just original status */ } /* only the last four declets of the coefficient can contain */ /* non-zero; check for others (and also NaN or Infinity from the */ /* Quantize) first (see DFISZERO for explanation): */ /* decFloatShow(&result, "sofar"); */ #if DOUBLE if ((DFWORD(&result, 0)&0x1c03ff00)!=0 || (DFWORD(&result, 0)&0x60000000)==0x60000000) { #elif QUAD if ((DFWORD(&result, 2)&0xffffff00)!=0 || DFWORD(&result, 1)!=0 || (DFWORD(&result, 0)&0x1c003fff)!=0 || (DFWORD(&result, 0)&0x60000000)==0x60000000) { #endif set->status|=DEC_Invalid_operation; /* Invalid or out of range */ return 0; } /* get last twelve digits of the coefficent into hi & ho, base */ /* 10**9 (see GETCOEFFBILL): */ sourlo=DFWORD(&result, DECWORDS-1); lo=DPD2BIN0[sourlo&0x3ff] +DPD2BINK[(sourlo>>10)&0x3ff] +DPD2BINM[(sourlo>>20)&0x3ff]; sourpen=DFWORD(&result, DECWORDS-2); hi=DPD2BIN0[((sourpen<<2) | (sourlo>>30))&0x3ff]; /* according to request, check range carefully */ if (unsign) { if (hi>4 || (hi==4 && lo>294967295) || (hi+lo!=0 && DFISSIGNED(&result))) { set->status|=DEC_Invalid_operation; /* out of range */ return 0; } return hi*BILLION+lo; } /* signed */ if (hi>2 || (hi==2 && lo>147483647)) { /* handle the usual edge case */ if (lo==147483648 && hi==2 && DFISSIGNED(&result)) return 0x80000000; set->status|=DEC_Invalid_operation; /* truly out of range */ return 0; } i=hi*BILLION+lo; if (DFISSIGNED(&result)) i=-i; return (uInt)i; } /* decToInt32 */ /* ------------------------------------------------------------------ */ /* decToIntegral -- local routine to effect ToIntegral value */ /* */ /* result gets the result */ /* df is the decFloat to round */ /* set is the context */ /* rmode is the rounding mode to use */ /* exact is 1 if Inexact should be signalled */ /* returns result */ /* ------------------------------------------------------------------ */ static decFloat * decToIntegral(decFloat *result, const decFloat *df, decContext *set, enum rounding rmode, Flag exact) { Int exp; /* exponent */ uInt sourhi; /* top word from source decFloat */ enum rounding saveround; /* saver */ uInt savestatus; /* .. */ decFloat zero; /* work */ /* Start decoding the argument */ sourhi=DFWORD(df, 0); /* top word */ exp=DECCOMBEXP[sourhi>>26]; /* get exponent high bits (in place) */ if (EXPISSPECIAL(exp)) { /* is special? */ /* NaNs are handled as usual */ if (DFISNAN(df)) return decNaNs(result, df, NULL, set); /* must be infinite; return canonical infinity with sign of df */ return decInfinity(result, df); } /* Here when the argument is finite */ /* complete extraction of the exponent */ exp+=GETECON(df)-DECBIAS; /* .. + continuation and unbias */ if (exp>=0) return decCanonical(result, df); /* already integral */ saveround=set->round; /* save rounding mode .. */ savestatus=set->status; /* .. and status */ set->round=rmode; /* set mode */ decFloatZero(&zero); /* make 0E+0 */ decFloatQuantize(result, df, &zero, set); /* 'integrate'; cannot fail */ set->round=saveround; /* restore rounding mode .. */ if (!exact) set->status=savestatus; /* .. and status, unless exact */ return result; } /* decToIntegral */ libdfp-1.0.17/libdecnumber/decCommon.c000066400000000000000000002215251504475242000175550ustar00rootroot00000000000000/* Common code for fixed-size types in the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decCommon.c -- common code for all three fixed-size types */ /* ------------------------------------------------------------------ */ /* This module comprises code that is shared between all the formats */ /* (decSingle, decDouble, and decQuad); it includes set and extract */ /* of format components, widening, narrowing, and string conversions. */ /* */ /* Unlike decNumber, parameterization takes place at compile time */ /* rather than at runtime. The parameters are set in the decDouble.c */ /* (etc.) files, which then include this one to produce the compiled */ /* code. The functions here, therefore, are code shared between */ /* multiple formats. */ /* ------------------------------------------------------------------ */ /* Names here refer to decFloat rather than to decDouble, etc., and */ /* the functions are in strict alphabetical order. */ /* Constants, tables, and debug function(s) are included only for QUAD */ /* (which will always be compiled if DOUBLE or SINGLE are used). */ /* */ /* Whenever a decContext is used, only the status may be set (using */ /* OR) or the rounding mode read; all other fields are ignored and */ /* untouched. */ #include "decCommonSymbols.h" /* names for simpler testing and default context */ #if DECPMAX==7 #define SINGLE 1 #define DOUBLE 0 #define QUAD 0 #define DEFCONTEXT DEC_INIT_DECIMAL32 #elif DECPMAX==16 #define SINGLE 0 #define DOUBLE 1 #define QUAD 0 #define DEFCONTEXT DEC_INIT_DECIMAL64 #elif DECPMAX==34 #define SINGLE 0 #define DOUBLE 0 #define QUAD 1 #define DEFCONTEXT DEC_INIT_DECIMAL128 #else #error Unexpected DECPMAX value #endif /* Assertions */ #if DECPMAX!=7 && DECPMAX!=16 && DECPMAX!=34 #error Unexpected Pmax (DECPMAX) value for this module #endif /* Assert facts about digit characters, etc. */ #if ('9'&0x0f)!=9 #error This module assumes characters are of the form 0b....nnnn /* where .... are don't care 4 bits and nnnn is 0000 through 1001 */ #endif #if ('9'&0xf0)==('.'&0xf0) #error This module assumes '.' has a different mask than a digit #endif /* Assert ToString lay-out conditions */ #if DECSTRING DECSTRING #error Exponent form can be too long for ToString to lay out safely #endif #if DECEMAXD > 4 #error Exponent form is too long for ToString to lay out /* Note: code for up to 9 digits exists in archives [decOct] */ #endif /* Private functions used here and possibly in decBasic.c, etc. */ static decFloat * decFinalize(decFloat *, bcdnum *, decContext *); static Flag decBiStr(const char *, const char *, const char *); /* Macros and private tables; those which are not format-dependent */ /* are only included if decQuad is being built. */ /* ------------------------------------------------------------------ */ /* Combination field lookup tables (uInts to save measurable work) */ /* */ /* DECCOMBEXP - 2 most-significant-bits of exponent (00, 01, or */ /* 10), shifted left for format, or DECFLOAT_Inf/NaN */ /* DECCOMBWEXP - The same, for the next-wider format (unless QUAD) */ /* DECCOMBMSD - 4-bit most-significant-digit */ /* [0 if the index is a special (Infinity or NaN)] */ /* DECCOMBFROM - 5-bit combination field from EXP top bits and MSD */ /* (placed in uInt so no shift is needed) */ /* */ /* DECCOMBEXP, DECCOMBWEXP, and DECCOMBMSD are indexed by the sign */ /* and 5-bit combination field (0-63, the second half of the table */ /* identical to the first half) */ /* DECCOMBFROM is indexed by expTopTwoBits*16 + msd */ /* */ /* DECCOMBMSD and DECCOMBFROM are not format-dependent and so are */ /* only included once, when QUAD is being built */ /* ------------------------------------------------------------------ */ static const uInt DECCOMBEXP[64]={ 0, 0, 0, 0, 0, 0, 0, 0, 1< DPD */ #define DEC_BIN2DPD 1 /* 0-999 -> DPD */ #define DEC_BIN2BCD8 1 /* 0-999 -> ddd, len */ #define DEC_DPD2BCD8 1 /* DPD -> ddd, len */ #define DEC_DPD2BIN 1 /* DPD -> 0-999 */ #define DEC_DPD2BINK 1 /* DPD -> 0-999000 */ #define DEC_DPD2BINM 1 /* DPD -> 0-999000000 */ #include "decDPD.h" /* source of the lookup tables */ #endif /* ----------------------------------------------------------------- */ /* decBiStr -- compare string with pairwise options */ /* */ /* targ is the string to compare */ /* str1 is one of the strings to compare against (length may be 0) */ /* str2 is the other; it must be the same length as str1 */ /* */ /* returns 1 if strings compare equal, (that is, targ is the same */ /* length as str1 and str2, and each character of targ is in one */ /* of str1 or str2 in the corresponding position), or 0 otherwise */ /* */ /* This is used for generic caseless compare, including the awkward */ /* case of the Turkish dotted and dotless Is. Use as (for example): */ /* if (decBiStr(test, "mike", "MIKE")) ... */ /* ----------------------------------------------------------------- */ static Flag decBiStr(const char *targ, const char *str1, const char *str2) { for (;;targ++, str1++, str2++) { if (*targ!=*str1 && *targ!=*str2) return 0; /* *targ has a match in one (or both, if terminator) */ if (*targ=='\0') break; } /* forever */ return 1; } /* decBiStr */ /* ------------------------------------------------------------------ */ /* decFinalize -- adjust and store a final result */ /* */ /* df is the decFloat format number which gets the final result */ /* num is the descriptor of the number to be checked and encoded */ /* [its values, including the coefficient, may be modified] */ /* set is the context to use */ /* returns df */ /* */ /* The num descriptor may point to a bcd8 string of any length; this */ /* string may have leading insignificant zeros. If it has more than */ /* DECPMAX digits then the final digit can be a round-for-reround */ /* digit (i.e., it may include a sticky bit residue). */ /* */ /* The exponent (q) may be one of the codes for a special value and */ /* can be up to 999999999 for conversion from string. */ /* */ /* No error is possible, but Inexact, Underflow, and/or Overflow may */ /* be set. */ /* ------------------------------------------------------------------ */ /* Constant whose size varies with format; also the check for surprises */ static uByte allnines[DECPMAX]= #if SINGLE {9, 9, 9, 9, 9, 9, 9}; #elif DOUBLE {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}; #elif QUAD {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}; #endif static decFloat * decFinalize(decFloat *df, bcdnum *num, decContext *set) { uByte *ub; /* work */ uInt dpd; /* .. */ uInt uiwork; /* for macros */ uByte *umsd=num->msd; /* local copy */ uByte *ulsd=num->lsd; /* .. */ uInt encode; /* encoding accumulator */ Int length; /* coefficient length */ #if DECCHECK Int clen=ulsd-umsd+1; #if QUAD #define COEXTRA 2 /* extra-long coefficent */ #else #define COEXTRA 0 #endif if (clen<1 || clen>DECPMAX*3+2+COEXTRA) printf("decFinalize: suspect coefficient [length=%ld]\n", (LI)clen); if (num->sign!=0 && num->sign!=DECFLOAT_Sign) printf("decFinalize: bad sign [%08lx]\n", (LI)num->sign); if (!EXPISSPECIAL(num->exponent) && (num->exponent>1999999999 || num->exponent<-1999999999)) printf("decFinalize: improbable exponent [%ld]\n", (LI)num->exponent); /* decShowNum(num, "final"); */ #endif /* A special will have an 'exponent' which is very positive and a */ /* coefficient < DECPMAX */ length=(uInt)(ulsd-umsd+1); /* coefficient length */ if (!NUMISSPECIAL(num)) { Int drop; /* digits to be dropped */ /* skip leading insignificant zeros to calculate an exact length */ /* [this is quite expensive] */ if (*umsd==0) { for (; umsd+3exponent); /* drop can now be > digits for bottom-clamp (subnormal) cases */ if (drop>0) { /* rounding needed */ /* (decFloatQuantize has very similar code to this, so any */ /* changes may need to be made there, too) */ uByte *roundat; /* -> re-round digit */ uByte reround; /* reround value */ /* printf("Rounding; drop=%ld\n", (LI)drop); */ num->exponent+=drop; /* always update exponent */ /* Three cases here: */ /* 1. new LSD is in coefficient (almost always) */ /* 2. new LSD is digit to left of coefficient (so MSD is */ /* round-for-reround digit) */ /* 3. new LSD is to left of case 2 (whole coefficient is sticky) */ /* [duplicate check-stickies code to save a test] */ /* [by-digit check for stickies as runs of zeros are rare] */ if (dropstatus|=DEC_Inexact; /* if adjusted exponent [exp+digits-1] is < EMIN then num is */ /* subnormal -- so raise Underflow */ if (num->exponentexponent+(ulsd-umsd+1)-1)status|=DEC_Underflow; /* next decide whether increment of the coefficient is needed */ if (set->round==DEC_ROUND_HALF_EVEN) { /* fastpath slowest case */ if (reround>5) bump=1; /* >0.5 goes up */ else if (reround==5) /* exactly 0.5000 .. */ bump=*ulsd & 0x01; /* .. up iff [new] lsd is odd */ } /* r-h-e */ else switch (set->round) { case DEC_ROUND_DOWN: { /* no change */ break;} /* r-d */ case DEC_ROUND_HALF_DOWN: { if (reround>5) bump=1; break;} /* r-h-d */ case DEC_ROUND_HALF_UP: { if (reround>=5) bump=1; break;} /* r-h-u */ case DEC_ROUND_UP: { if (reround>0) bump=1; break;} /* r-u */ case DEC_ROUND_CEILING: { /* same as _UP for positive numbers, and as _DOWN for negatives */ if (!num->sign && reround>0) bump=1; break;} /* r-c */ case DEC_ROUND_FLOOR: { /* same as _UP for negative numbers, and as _DOWN for positive */ /* [negative reround cannot occur on 0] */ if (num->sign && reround>0) bump=1; break;} /* r-f */ case DEC_ROUND_05UP: { if (reround>0) { /* anything out there is 'sticky' */ /* bump iff lsd=0 or 5; this cannot carry so it could be */ /* effected immediately with no bump -- but the code */ /* is clearer if this is done the same way as the others */ if (*ulsd==0 || *ulsd==5) bump=1; } break;} /* r-r */ default: { /* e.g., DEC_ROUND_MAX */ set->status|=DEC_Invalid_context; #if DECCHECK printf("Unknown rounding mode: %ld\n", (LI)set->round); #endif break;} } /* switch (not r-h-e) */ /* printf("ReRound: %ld bump: %ld\n", (LI)reround, (LI)bump); */ if (bump!=0) { /* need increment */ /* increment the coefficient; this might end up with 1000... */ /* (after the all nines case) */ ub=ulsd; for(; ub-3>=umsd && UBTOUI(ub-3)==0x09090909; ub-=4) { UBFROMUI(ub-3, 0); /* to 00000000 */ } /* [note ub could now be to left of msd, and it is not safe */ /* to write to the the left of the msd] */ /* now at most 3 digits left to non-9 (usually just the one) */ for (; ub>=umsd; *ub=0, ub--) { if (*ub==9) continue; /* carry */ *ub+=1; break; } if (ubexponent++; } else { /* if coefficient is shorter than Pmax then num is */ /* subnormal, so extend it; this is safe as drop>0 */ /* (or, if the coefficient was supplied above, it could */ /* not be 9); this may make the result normal. */ ulsd++; *ulsd=0; /* [exponent unchanged] */ #if DECCHECK if (num->exponent!=DECQTINY) /* sanity check */ printf("decFinalize: bad all-nines extend [^%ld, %ld]\n", (LI)num->exponent, (LI)(ulsd-umsd+1)); #endif } /* subnormal extend */ } /* had all-nines */ } /* bump needed */ } /* inexact rounding */ length=ulsd-umsd+1; /* recalculate (may be 0) */ /* The coefficient will now fit and has final length unless overflow */ /* decShowNum(num, "rounded"); */ /* if exponent is >=emax may have to clamp, overflow, or fold-down */ if (num->exponent>DECEMAX-(DECPMAX-1)) { /* is edge case */ /* printf("overflow checks...\n"); */ if (*ulsd==0 && ulsd==umsd) { /* have zero */ num->exponent=DECEMAX-(DECPMAX-1); /* clamp to max */ } else if ((num->exponent+length-1)>DECEMAX) { /* > Nmax */ /* Overflow -- these could go straight to encoding, here, but */ /* instead num is adjusted to keep the code cleaner */ Flag needmax=0; /* 1 for finite result */ set->status|=(DEC_Overflow | DEC_Inexact); switch (set->round) { case DEC_ROUND_DOWN: { needmax=1; /* never Infinity */ break;} /* r-d */ case DEC_ROUND_05UP: { needmax=1; /* never Infinity */ break;} /* r-05 */ case DEC_ROUND_CEILING: { if (num->sign) needmax=1; /* Infinity iff non-negative */ break;} /* r-c */ case DEC_ROUND_FLOOR: { if (!num->sign) needmax=1; /* Infinity iff negative */ break;} /* r-f */ default: break; /* Infinity in all other cases */ } if (!needmax) { /* easy .. set Infinity */ num->exponent=DECFLOAT_Inf; *umsd=0; /* be clean: coefficient to 0 */ ulsd=umsd; /* .. */ } else { /* return Nmax */ umsd=allnines; /* use constant array */ ulsd=allnines+DECPMAX-1; num->exponent=DECEMAX-(DECPMAX-1); } } else { /* no overflow but non-zero and may have to fold-down */ Int shift=num->exponent-(DECEMAX-(DECPMAX-1)); if (shift>0) { /* fold-down needed */ /* fold down needed; must copy to buffer in order to pad */ /* with zeros safely; fortunately this is not the worst case */ /* path because cannot have had a round */ uByte buffer[ROUNDUP(DECPMAX+3, 4)]; /* [+3 allows uInt padding] */ uByte *s=umsd; /* source */ uByte *t=buffer; /* safe target */ uByte *tlsd=buffer+(ulsd-umsd)+shift; /* target LSD */ /* printf("folddown shift=%ld\n", (LI)shift); */ for (; s<=ulsd; s+=4, t+=4) UBFROMUI(t, UBTOUI(s)); for (t=tlsd-shift+1; t<=tlsd; t+=4) UBFROMUI(t, 0); /* pad 0s */ num->exponent-=shift; umsd=buffer; ulsd=tlsd; } } /* fold-down? */ length=ulsd-umsd+1; /* recalculate length */ } /* high-end edge case */ } /* finite number */ /*------------------------------------------------------------------*/ /* At this point the result will properly fit the decFloat */ /* encoding, and it can be encoded with no possibility of error */ /*------------------------------------------------------------------*/ /* Following code does not alter coefficient (could be allnines array) */ /* fast path possible when DECPMAX digits */ if (length==DECPMAX) { return decFloatFromBCD(df, num->exponent, umsd, num->sign); } /* full-length */ /* slower path when not a full-length number; must care about length */ /* [coefficient length here will be < DECPMAX] */ if (!NUMISSPECIAL(num)) { /* is still finite */ /* encode the combination field and exponent continuation */ uInt uexp=(uInt)(num->exponent+DECBIAS); /* biased exponent */ uInt code=(uexp>>DECECONL)<<4; /* top two bits of exp */ /* [msd==0] */ /* look up the combination field and make high word */ encode=DECCOMBFROM[code]; /* indexed by (0-2)*16+msd */ encode|=(uexp<<(32-6-DECECONL)) & 0x03ffffff; /* exponent continuation */ } else encode=num->exponent; /* special [already in word] */ encode|=num->sign; /* add sign */ /* private macro to extract a declet, n (where 0<=n=umsd) dpd=BCD2DPD[(*ub*256)+(*(ub+1)*16)+*(ub+2)]; \ else {dpd=*(ub+2); if (ub+1==umsd) dpd+=*(ub+1)*16; dpd=BCD2DPD[dpd];} /* place the declets in the encoding words and copy to result (df), */ /* according to endianness; in all cases complete the sign word */ /* first */ #if DECPMAX==7 getDPDt(dpd, 1); encode|=dpd<<10; getDPDt(dpd, 0); encode|=dpd; DFWORD(df, 0)=encode; /* just the one word */ #elif DECPMAX==16 getDPDt(dpd, 4); encode|=dpd<<8; getDPDt(dpd, 3); encode|=dpd>>2; DFWORD(df, 0)=encode; encode=dpd<<30; getDPDt(dpd, 2); encode|=dpd<<20; getDPDt(dpd, 1); encode|=dpd<<10; getDPDt(dpd, 0); encode|=dpd; DFWORD(df, 1)=encode; #elif DECPMAX==34 getDPDt(dpd,10); encode|=dpd<<4; getDPDt(dpd, 9); encode|=dpd>>6; DFWORD(df, 0)=encode; encode=dpd<<26; getDPDt(dpd, 8); encode|=dpd<<16; getDPDt(dpd, 7); encode|=dpd<<6; getDPDt(dpd, 6); encode|=dpd>>4; DFWORD(df, 1)=encode; encode=dpd<<28; getDPDt(dpd, 5); encode|=dpd<<18; getDPDt(dpd, 4); encode|=dpd<<8; getDPDt(dpd, 3); encode|=dpd>>2; DFWORD(df, 2)=encode; encode=dpd<<30; getDPDt(dpd, 2); encode|=dpd<<20; getDPDt(dpd, 1); encode|=dpd<<10; getDPDt(dpd, 0); encode|=dpd; DFWORD(df, 3)=encode; #endif /* printf("Status: %08lx\n", (LI)set->status); */ /* decFloatShow(df, "final2"); */ return df; } /* decFinalize */ /* ------------------------------------------------------------------ */ /* decFloatFromBCD -- set decFloat from exponent, BCD8, and sign */ /* */ /* df is the target decFloat */ /* exp is the in-range unbiased exponent, q, or a special value in */ /* the form returned by decFloatGetExponent */ /* bcdar holds DECPMAX digits to set the coefficient from, one */ /* digit in each byte (BCD8 encoding); the first (MSD) is ignored */ /* if df is a NaN; all are ignored if df is infinite. */ /* All bytes must be in 0-9; results are undefined otherwise. */ /* sig is DECFLOAT_Sign to set the sign bit, 0 otherwise */ /* returns df, which will be canonical */ /* */ /* No error is possible, and no status will be set. */ /* ------------------------------------------------------------------ */ decFloat * decFloatFromBCD(decFloat *df, Int exp, const uByte *bcdar, Int sig) { uInt encode, dpd; /* work */ const uByte *ub; /* .. */ if (EXPISSPECIAL(exp)) encode=exp|sig;/* specials already encoded */ else { /* is finite */ /* encode the combination field and exponent continuation */ uInt uexp=(uInt)(exp+DECBIAS); /* biased exponent */ uInt code=(uexp>>DECECONL)<<4; /* top two bits of exp */ code+=bcdar[0]; /* add msd */ /* look up the combination field and make high word */ encode=DECCOMBFROM[code]|sig; /* indexed by (0-2)*16+msd */ encode|=(uexp<<(32-6-DECECONL)) & 0x03ffffff; /* exponent continuation */ } /* private macro to extract a declet, n (where 0<=n>2; DFWORD(df, 0)=encode; encode=dpd<<30; getDPDb(dpd, 2); encode|=dpd<<20; getDPDb(dpd, 1); encode|=dpd<<10; getDPDb(dpd, 0); encode|=dpd; DFWORD(df, 1)=encode; #elif DECPMAX==34 getDPDb(dpd,10); encode|=dpd<<4; getDPDb(dpd, 9); encode|=dpd>>6; DFWORD(df, 0)=encode; encode=dpd<<26; getDPDb(dpd, 8); encode|=dpd<<16; getDPDb(dpd, 7); encode|=dpd<<6; getDPDb(dpd, 6); encode|=dpd>>4; DFWORD(df, 1)=encode; encode=dpd<<28; getDPDb(dpd, 5); encode|=dpd<<18; getDPDb(dpd, 4); encode|=dpd<<8; getDPDb(dpd, 3); encode|=dpd>>2; DFWORD(df, 2)=encode; encode=dpd<<30; getDPDb(dpd, 2); encode|=dpd<<20; getDPDb(dpd, 1); encode|=dpd<<10; getDPDb(dpd, 0); encode|=dpd; DFWORD(df, 3)=encode; #endif /* decFloatShow(df, "fromB"); */ return df; } /* decFloatFromBCD */ /* ------------------------------------------------------------------ */ /* decFloatFromPacked -- set decFloat from exponent and packed BCD */ /* */ /* df is the target decFloat */ /* exp is the in-range unbiased exponent, q, or a special value in */ /* the form returned by decFloatGetExponent */ /* packed holds DECPMAX packed decimal digits plus a sign nibble */ /* (all 6 codes are OK); the first (MSD) is ignored if df is a NaN */ /* and all except sign are ignored if df is infinite. For DOUBLE */ /* and QUAD the first (pad) nibble is also ignored in all cases. */ /* All coefficient nibbles must be in 0-9 and sign in A-F; results */ /* are undefined otherwise. */ /* returns df, which will be canonical */ /* */ /* No error is possible, and no status will be set. */ /* ------------------------------------------------------------------ */ decFloat * decFloatFromPacked(decFloat *df, Int exp, const uByte *packed) { uByte bcdar[DECPMAX+2]; /* work [+1 for pad, +1 for sign] */ const uByte *ip; /* .. */ uByte *op; /* .. */ Int sig=0; /* sign */ /* expand coefficient and sign to BCDAR */ #if SINGLE op=bcdar+1; /* no pad digit */ #else op=bcdar; /* first (pad) digit ignored */ #endif for (ip=packed; ip>4; *op++=(uByte)(*ip&0x0f); /* [final nibble is sign] */ } op--; /* -> sign byte */ if (*op==DECPMINUS || *op==DECPMINUSALT) sig=DECFLOAT_Sign; if (EXPISSPECIAL(exp)) { /* Infinity or NaN */ if (!EXPISINF(exp)) bcdar[1]=0; /* a NaN: ignore MSD */ else memset(bcdar+1, 0, DECPMAX); /* Infinite: coefficient to 0 */ } return decFloatFromBCD(df, exp, bcdar+1, sig); } /* decFloatFromPacked */ /* ------------------------------------------------------------------ */ /* decFloatFromPackedChecked -- set from exponent and packed; checked */ /* */ /* df is the target decFloat */ /* exp is the in-range unbiased exponent, q, or a special value in */ /* the form returned by decFloatGetExponent */ /* packed holds DECPMAX packed decimal digits plus a sign nibble */ /* (all 6 codes are OK); the first (MSD) must be 0 if df is a NaN */ /* and all digits must be 0 if df is infinite. For DOUBLE and */ /* QUAD the first (pad) nibble must be 0. */ /* All coefficient nibbles must be in 0-9 and sign in A-F. */ /* returns df, which will be canonical or NULL if any of the */ /* requirements are not met (if this case df is unchanged); that */ /* is, the input data must be as returned by decFloatToPacked, */ /* except that all six sign codes are accepted. */ /* */ /* No status will be set. */ /* ------------------------------------------------------------------ */ decFloat * decFloatFromPackedChecked(decFloat *df, Int exp, const uByte *packed) { uByte bcdar[DECPMAX+2]; /* work [+1 for pad, +1 for sign] */ const uByte *ip; /* .. */ uByte *op; /* .. */ Int sig=0; /* sign */ /* expand coefficient and sign to BCDAR */ #if SINGLE op=bcdar+1; /* no pad digit */ #else op=bcdar; /* first (pad) digit here */ #endif for (ip=packed; ip>4; if (*op>9) return NULL; op++; *op=(uByte)(*ip&0x0f); /* [final nibble is sign] */ if (*op>9 && ip sign byte */ if (*op<=9) return NULL; /* bad sign */ if (*op==DECPMINUS || *op==DECPMINUSALT) sig=DECFLOAT_Sign; #if !SINGLE if (bcdar[0]!=0) return NULL; /* bad pad nibble */ #endif if (EXPISNAN(exp)) { /* a NaN */ if (bcdar[1]!=0) return NULL; /* bad msd */ } /* NaN */ else if (EXPISINF(exp)) { /* is infinite */ Int i; for (i=0; iDECEMAX-DECPMAX+1) return NULL; if (exp first character of decimal part */ const char *c; /* work */ uByte *ub; /* .. */ uInt uiwork; /* for macros */ bcdnum num; /* collects data for finishing */ uInt error=DEC_Conversion_syntax; /* assume the worst */ uByte buffer[ROUNDUP(DECSTRING+11, 8)]; /* room for most coefficents, */ /* some common rounding, +3, & pad */ #if DECTRACE /* printf("FromString %s ...\n", string); */ #endif for(;;) { /* once-only 'loop' */ num.sign=0; /* assume non-negative */ num.msd=buffer; /* MSD is here always */ /* detect and validate the coefficient, including any leading, */ /* trailing, or embedded '.' */ /* [could test four-at-a-time here (saving 10% for decQuads), */ /* but that risks storage violation because the position of the */ /* terminator is unknown] */ for (c=string;; c++) { /* -> input character */ if (((unsigned)(*c-'0'))<=9) continue; /* '0' through '9' is good */ if (*c=='\0') break; /* most common non-digit */ if (*c=='.') { if (dotchar!=NULL) break; /* not first '.' */ dotchar=c; /* record offset into decimal part */ continue;} if (c==string) { /* first in string... */ if (*c=='-') { /* valid - sign */ cfirst++; num.sign=DECFLOAT_Sign; continue;} if (*c=='+') { /* valid + sign */ cfirst++; continue;} } /* *c is not a digit, terminator, or a valid +, -, or '.' */ break; } /* c loop */ digits=(uInt)(c-cfirst); /* digits (+1 if a dot) */ if (digits>0) { /* had digits and/or dot */ const char *clast=c-1; /* note last coefficient char position */ Int exp=0; /* exponent accumulator */ if (*c!='\0') { /* something follows the coefficient */ uInt edig; /* unsigned work */ /* had some digits and more to come; expect E[+|-]nnn now */ const char *firstexp; /* exponent first non-zero */ if (*c!='E' && *c!='e') break; c++; /* to (optional) sign */ if (*c=='-' || *c=='+') c++; /* step over sign (c=clast+2) */ if (*c=='\0') break; /* no digits! (e.g., '1.2E') */ for (; *c=='0';) c++; /* skip leading zeros [even last] */ firstexp=c; /* remember start [maybe '\0'] */ /* gather exponent digits */ edig=(uInt)*c-(uInt)'0'; if (edig<=9) { /* [check not bad or terminator] */ exp+=edig; /* avoid initial X10 */ c++; for (;; c++) { edig=(uInt)*c-(uInt)'0'; if (edig>9) break; exp=exp*10+edig; } } /* if not now on the '\0', *c must not be a digit */ if (*c!='\0') break; /* (this next test must be after the syntax checks) */ /* if definitely more than the possible digits for format then */ /* the exponent may have wrapped, so simply set it to a certain */ /* over/underflow value */ if (c>firstexp+DECEMAXD) exp=DECEMAX*2; if (*(clast+2)=='-') exp=-exp; /* was negative */ } /* digits>0 */ if (dotchar!=NULL) { /* had a '.' */ digits--; /* remove from digits count */ if (digits==0) break; /* was dot alone: bad syntax */ exp-=(Int)(clast-dotchar); /* adjust exponent */ /* [the '.' can now be ignored] */ } num.exponent=exp; /* exponent is good; store it */ /* Here when whole string has been inspected and syntax is good */ /* cfirst->first digit or dot, clast->last digit or dot */ error=0; /* no error possible now */ /* if the number of digits in the coefficient will fit in buffer */ /* then it can simply be converted to bcd8 and copied -- decFinalize */ /* will take care of leading zeros and rounding; the buffer is big */ /* enough for all canonical coefficients, including 0.00000nn... */ ub=buffer; if (digits<=(Int)(sizeof(buffer)-3)) { /* [-3 allows by-4s copy] */ c=cfirst; if (dotchar!=NULL) { /* a dot to worry about */ if (*(c+1)=='.') { /* common canonical case */ *ub++=(uByte)(*c-'0'); /* copy leading digit */ c+=2; /* prepare to handle rest */ } else for (; c<=clast;) { /* '.' could be anywhere */ /* as usual, go by fours when safe; NB it has been asserted */ /* that a '.' does not have the same mask as a digit */ if (c<=clast-3 /* safe for four */ && (UBTOUI(c)&0xf0f0f0f0)==CHARMASK) { /* test four */ UBFROMUI(ub, UBTOUI(c)&0x0f0f0f0f); /* to BCD8 */ ub+=4; c+=4; continue; } if (*c=='.') { /* found the dot */ c++; /* step over it .. */ break; /* .. and handle the rest */ } *ub++=(uByte)(*c++-'0'); } } /* had dot */ /* Now no dot; do this by fours (where safe) */ for (; c<=clast-3; c+=4, ub+=4) UBFROMUI(ub, UBTOUI(c)&0x0f0f0f0f); for (; c<=clast; c++, ub++) *ub=(uByte)(*c-'0'); num.lsd=buffer+digits-1; /* record new LSD */ } /* fits */ else { /* too long for buffer */ /* [This is a rare and unusual case; arbitrary-length input] */ /* strip leading zeros [but leave final 0 if all 0's] */ if (*cfirst=='.') cfirst++; /* step past dot at start */ if (*cfirst=='0') { /* [cfirst always -> digit] */ for (; cfirst LSD */ for (; c<=clast; c++) { /* inspect remaining chars */ if (*c!='0') { /* sticky bit needed */ if (*c=='.') continue; /* [ignore] */ *ub=DECSTICKYTAB[*ub]; /* update round-for-reround */ break; /* no need to look at more */ } } num.lsd=ub; /* record LSD */ /* adjust exponent for dropped digits */ num.exponent+=digits-(Int)(ub-buffer+1); } /* too long for buffer */ } /* digits or dot */ else { /* no digits or dot were found */ if (*c=='\0') break; /* nothing to come is bad */ /* only Infinities and NaNs are allowed, here */ buffer[0]=0; /* default a coefficient of 0 */ num.lsd=buffer; /* .. */ if (decBiStr(c, "infinity", "INFINITY") || decBiStr(c, "inf", "INF")) num.exponent=DECFLOAT_Inf; else { /* should be a NaN */ num.exponent=DECFLOAT_qNaN; /* assume quiet NaN */ if (*c=='s' || *c=='S') { /* probably an sNaN */ c++; num.exponent=DECFLOAT_sNaN; /* assume is in fact sNaN */ } if (*c!='N' && *c!='n') break; /* check caseless "NaN" */ c++; if (*c!='a' && *c!='A') break; /* .. */ c++; if (*c!='N' && *c!='n') break; /* .. */ c++; /* now either nothing, or nnnn payload (no dots), expected */ /* -> start of integer, and skip leading 0s [including plain 0] */ for (cfirst=c; *cfirst=='0';) cfirst++; if (*cfirst!='\0') { /* not empty or all-0, payload */ /* payload found; check all valid digits and copy to buffer as bcd8 */ ub=buffer; for (c=cfirst;; c++, ub++) { if ((unsigned)(*c-'0')>9) break; /* quit if not 0-9 */ if (c-cfirst==DECPMAX-1) break; /* too many digits */ *ub=(uByte)(*c-'0'); /* good bcd8 */ } if (*c!='\0') break; /* not all digits, or too many */ num.lsd=ub-1; /* record new LSD */ } } /* NaN or sNaN */ error=0; /* syntax is OK */ break; /* done with specials */ } /* digits=0 (special expected) */ break; } /* [for(;;) break] */ /* decShowNum(&num, "fromStr"); */ if (error!=0) { set->status|=error; num.exponent=DECFLOAT_qNaN; /* set up quiet NaN */ num.sign=0; /* .. with 0 sign */ buffer[0]=0; /* .. and coefficient */ num.lsd=buffer; /* .. */ /* decShowNum(&num, "oops"); */ } /* decShowNum(&num, "dffs"); */ decFinalize(result, &num, set); /* round, check, and lay out */ /* decFloatShow(result, "fromString"); */ return result; } /* decFloatFromString */ /* ------------------------------------------------------------------ */ /* decFloatFromWider -- conversion from next-wider format */ /* */ /* result is the decFloat format number which gets the result of */ /* the conversion */ /* wider is the decFloatWider format number which will be narrowed */ /* set is the context */ /* returns result */ /* */ /* Narrowing can cause rounding, overflow, etc., but not Invalid */ /* operation (sNaNs are copied and do not signal). */ /* ------------------------------------------------------------------ */ /* narrow-to is not possible for decQuad format numbers; simply omit */ #if !QUAD decFloat * decFloatFromWider(decFloat *result, const decFloatWider *wider, decContext *set) { bcdnum num; /* collects data for finishing */ uByte bcdar[DECWPMAX]; /* room for wider coefficient */ uInt widerhi=DFWWORD(wider, 0); /* top word */ Int exp; GETWCOEFF(wider, bcdar); num.msd=bcdar; /* MSD is here always */ num.lsd=bcdar+DECWPMAX-1; /* LSD is here always */ num.sign=widerhi&0x80000000; /* extract sign [DECFLOAT_Sign=Neg] */ /* decode the wider combination field to exponent */ exp=DECCOMBWEXP[widerhi>>26]; /* decode from wider combination field */ /* if it is a special there's nothing to do unless sNaN; if it's */ /* finite then add the (wider) exponent continuation and unbias */ if (EXPISSPECIAL(exp)) exp=widerhi&0x7e000000; /* include sNaN selector */ else exp+=GETWECON(wider)-DECWBIAS; num.exponent=exp; /* decShowNum(&num, "dffw"); */ return decFinalize(result, &num, set);/* round, check, and lay out */ } /* decFloatFromWider */ #endif /* ------------------------------------------------------------------ */ /* decFloatGetCoefficient -- get coefficient as BCD8 */ /* */ /* df is the decFloat from which to extract the coefficient */ /* bcdar is where DECPMAX bytes will be written, one BCD digit in */ /* each byte (BCD8 encoding); if df is a NaN the first byte will */ /* be zero, and if it is infinite they will all be zero */ /* returns the sign of the coefficient (DECFLOAT_Sign if negative, */ /* 0 otherwise) */ /* */ /* No error is possible, and no status will be set. If df is a */ /* special value the array is set to zeros (for Infinity) or to the */ /* payload of a qNaN or sNaN. */ /* ------------------------------------------------------------------ */ Int decFloatGetCoefficient(const decFloat *df, uByte *bcdar) { if (DFISINF(df)) memset(bcdar, 0, DECPMAX); else { GETCOEFF(df, bcdar); /* use macro */ if (DFISNAN(df)) bcdar[0]=0; /* MSD needs correcting */ } return DFISSIGNED(df); } /* decFloatGetCoefficient */ /* ------------------------------------------------------------------ */ /* decFloatGetExponent -- get unbiased exponent */ /* */ /* df is the decFloat from which to extract the exponent */ /* returns the exponent, q. */ /* */ /* No error is possible, and no status will be set. If df is a */ /* special value the first seven bits of the decFloat are returned, */ /* left adjusted and with the first (sign) bit set to 0 (followed by */ /* 25 0 bits). e.g., -sNaN would return 0x7e000000 (DECFLOAT_sNaN). */ /* ------------------------------------------------------------------ */ Int decFloatGetExponent(const decFloat *df) { if (DFISSPECIAL(df)) return DFWORD(df, 0)&0x7e000000; return GETEXPUN(df); } /* decFloatGetExponent */ /* ------------------------------------------------------------------ */ /* decFloatSetCoefficient -- set coefficient from BCD8 */ /* */ /* df is the target decFloat (and source of exponent/special value) */ /* bcdar holds DECPMAX digits to set the coefficient from, one */ /* digit in each byte (BCD8 encoding); the first (MSD) is ignored */ /* if df is a NaN; all are ignored if df is infinite. */ /* sig is DECFLOAT_Sign to set the sign bit, 0 otherwise */ /* returns df, which will be canonical */ /* */ /* No error is possible, and no status will be set. */ /* ------------------------------------------------------------------ */ decFloat * decFloatSetCoefficient(decFloat *df, const uByte *bcdar, Int sig) { uInt exp; /* for exponent */ uByte bcdzero[DECPMAX]; /* for infinities */ /* Exponent/special code is extracted from df */ if (DFISSPECIAL(df)) { exp=DFWORD(df, 0)&0x7e000000; if (DFISINF(df)) { memset(bcdzero, 0, DECPMAX); return decFloatFromBCD(df, exp, bcdzero, sig); } } else exp=GETEXPUN(df); return decFloatFromBCD(df, exp, bcdar, sig); } /* decFloatSetCoefficient */ /* ------------------------------------------------------------------ */ /* decFloatSetExponent -- set exponent or special value */ /* */ /* df is the target decFloat (and source of coefficient/payload) */ /* set is the context for reporting status */ /* exp is the unbiased exponent, q, or a special value in the form */ /* returned by decFloatGetExponent */ /* returns df, which will be canonical */ /* */ /* No error is possible, but Overflow or Underflow might occur. */ /* ------------------------------------------------------------------ */ decFloat * decFloatSetExponent(decFloat *df, decContext *set, Int exp) { uByte bcdcopy[DECPMAX]; /* for coefficient */ bcdnum num; /* work */ num.exponent=exp; num.sign=decFloatGetCoefficient(df, bcdcopy); /* extract coefficient */ if (DFISSPECIAL(df)) { /* MSD or more needs correcting */ if (DFISINF(df)) memset(bcdcopy, 0, DECPMAX); bcdcopy[0]=0; } num.msd=bcdcopy; num.lsd=bcdcopy+DECPMAX-1; return decFinalize(df, &num, set); } /* decFloatSetExponent */ /* ------------------------------------------------------------------ */ /* decFloatRadix -- returns the base (10) */ /* */ /* df is any decFloat of this format */ /* ------------------------------------------------------------------ */ uInt decFloatRadix(const decFloat *df) { if (df) return 10; /* to placate compiler */ return 10; } /* decFloatRadix */ #if (DECCHECK || DECTRACE) /* ------------------------------------------------------------------ */ /* decFloatShow -- printf a decFloat in hexadecimal and decimal */ /* df is the decFloat to show */ /* tag is a tag string displayed with the number */ /* */ /* This is a debug aid; the precise format of the string may change. */ /* ------------------------------------------------------------------ */ void decFloatShow(const decFloat *df, const char *tag) { char hexbuf[DECBYTES*2+DECBYTES/4+1]; /* NB blank after every fourth */ char buff[DECSTRING]; /* for value in decimal */ Int i, j=0; for (i=0; ibytes[DECBYTES-1-i]); #else sprintf(&hexbuf[j], "%02x", df->bytes[i]); #endif j+=2; /* the next line adds blank (and terminator) after final pair, too */ if ((i+1)%4==0) {strcpy(&hexbuf[j], " "); j++;} } decFloatToString(df, buff); printf(">%s> %s [big-endian] %s\n", tag, hexbuf, buff); return; } /* decFloatShow */ #endif /* ------------------------------------------------------------------ */ /* decFloatToBCD -- get sign, exponent, and BCD8 from a decFloat */ /* */ /* df is the source decFloat */ /* exp will be set to the unbiased exponent, q, or to a special */ /* value in the form returned by decFloatGetExponent */ /* bcdar is where DECPMAX bytes will be written, one BCD digit in */ /* each byte (BCD8 encoding); if df is a NaN the first byte will */ /* be zero, and if it is infinite they will all be zero */ /* returns the sign of the coefficient (DECFLOAT_Sign if negative, */ /* 0 otherwise) */ /* */ /* No error is possible, and no status will be set. */ /* ------------------------------------------------------------------ */ Int decFloatToBCD(const decFloat *df, Int *exp, uByte *bcdar) { if (DFISINF(df)) { memset(bcdar, 0, DECPMAX); *exp=DFWORD(df, 0)&0x7e000000; } else { GETCOEFF(df, bcdar); /* use macro */ if (DFISNAN(df)) { bcdar[0]=0; /* MSD needs correcting */ *exp=DFWORD(df, 0)&0x7e000000; } else { /* finite */ *exp=GETEXPUN(df); } } return DFISSIGNED(df); } /* decFloatToBCD */ /* ------------------------------------------------------------------ */ /* decFloatToEngString -- conversion to numeric string, engineering */ /* */ /* df is the decFloat format number to convert */ /* string is the string where the result will be laid out */ /* */ /* string must be at least DECPMAX+9 characters (the worst case is */ /* "-0.00000nnn...nnn\0", which is as long as the exponent form when */ /* DECEMAXD<=4); this condition is asserted above */ /* */ /* No error is possible, and no status will be set */ /* ------------------------------------------------------------------ */ char * decFloatToEngString(const decFloat *df, char *string){ uInt msd; /* coefficient MSD */ Int exp; /* exponent top two bits or full */ uInt comb; /* combination field */ char *cstart; /* coefficient start */ char *c; /* output pointer in string */ char *s, *t; /* .. (source, target) */ Int pre, e; /* work */ const uByte *u; /* .. */ uInt uiwork; /* for macros [one compiler needs */ /* volatile here to avoid bug, but */ /* that doubles execution time] */ /* Source words; macro handles endianness */ uInt sourhi=DFWORD(df, 0); /* word with sign */ #if DECPMAX==16 uInt sourlo=DFWORD(df, 1); #elif DECPMAX==34 uInt sourmh=DFWORD(df, 1); uInt sourml=DFWORD(df, 2); uInt sourlo=DFWORD(df, 3); #endif c=string; /* where result will go */ if (((Int)sourhi)<0) *c++='-'; /* handle sign */ comb=sourhi>>26; /* sign+combination field */ msd=DECCOMBMSD[comb]; /* decode the combination field */ exp=DECCOMBEXP[comb]; /* .. */ if (EXPISSPECIAL(exp)) { /* special */ if (exp==DECFLOAT_Inf) { /* infinity */ strcpy(c, "Inf"); strcpy(c+3, "inity"); return string; /* easy */ } if (sourhi&0x02000000) *c++='s'; /* sNaN */ strcpy(c, "NaN"); /* complete word */ c+=3; /* step past */ /* quick exit if the payload is zero */ #if DECPMAX==7 if ((sourhi&0x000fffff)==0) return string; #elif DECPMAX==16 if (sourlo==0 && (sourhi&0x0003ffff)==0) return string; #elif DECPMAX==34 if (sourlo==0 && sourml==0 && sourmh==0 && (sourhi&0x00003fff)==0) return string; #endif /* otherwise drop through to add integer; set correct exp etc. */ exp=0; msd=0; /* setup for following code */ } else { /* complete exponent; top two bits are in place */ exp+=GETECON(df)-DECBIAS; /* .. + continuation and unbias */ } /* convert the digits of the significand to characters */ cstart=c; /* save start of coefficient */ if (msd) *c++=(char)('0'+(char)msd); /* non-zero most significant digit */ /* Decode the declets. After extracting each declet, it is */ /* decoded to a 4-uByte sequence by table lookup; the four uBytes */ /* are the three encoded BCD8 digits followed by a 1-byte length */ /* (significant digits, except that 000 has length 0). This allows */ /* us to left-align the first declet with non-zero content, then */ /* the remaining ones are full 3-char length. Fixed-length copies */ /* are used because variable-length memcpy causes a subroutine call */ /* in at least two compilers. (The copies are length 4 for speed */ /* and are safe because the last item in the array is of length */ /* three and has the length byte following.) */ #define dpd2char(dpdin) u=&DPD2BCD8[((dpdin)&0x3ff)*4]; \ if (c!=cstart) {UBFROMUI(c, UBTOUI(u)|CHARMASK); c+=3;} \ else if (*(u+3)) { \ UBFROMUI(c, UBTOUI(u+3-*(u+3))|CHARMASK); c+=*(u+3);} #if DECPMAX==7 dpd2char(sourhi>>10); /* declet 1 */ dpd2char(sourhi); /* declet 2 */ #elif DECPMAX==16 dpd2char(sourhi>>8); /* declet 1 */ dpd2char((sourhi<<2) | (sourlo>>30)); /* declet 2 */ dpd2char(sourlo>>20); /* declet 3 */ dpd2char(sourlo>>10); /* declet 4 */ dpd2char(sourlo); /* declet 5 */ #elif DECPMAX==34 dpd2char(sourhi>>4); /* declet 1 */ dpd2char((sourhi<<6) | (sourmh>>26)); /* declet 2 */ dpd2char(sourmh>>16); /* declet 3 */ dpd2char(sourmh>>6); /* declet 4 */ dpd2char((sourmh<<4) | (sourml>>28)); /* declet 5 */ dpd2char(sourml>>18); /* declet 6 */ dpd2char(sourml>>8); /* declet 7 */ dpd2char((sourml<<2) | (sourlo>>30)); /* declet 8 */ dpd2char(sourlo>>20); /* declet 9 */ dpd2char(sourlo>>10); /* declet 10 */ dpd2char(sourlo); /* declet 11 */ #endif if (c==cstart) *c++='0'; /* all zeros, empty -- make "0" */ if (exp==0) { /* integer or NaN case -- easy */ *c='\0'; /* terminate */ return string; } /* non-0 exponent */ e=0; /* assume no E */ pre=(Int)(c-cstart)+exp; /* length+exp [c->LSD+1] */ /* [here, pre-exp is the digits count (==1 for zero)] */ if (exp>0 || pre<-5) { /* need exponential form */ e=pre-1; /* calculate E value */ pre=1; /* assume one digit before '.' */ if (e!=0) { /* engineering: may need to adjust */ Int adj; /* adjustment */ /* The C remainder operator is undefined for negative numbers, so */ /* a positive remainder calculation must be used here */ if (e<0) { adj=(-e)%3; if (adj!=0) adj=3-adj; } else { /* e>0 */ adj=e%3; } e=e-adj; /* if dealing with zero still produce an exponent which is a */ /* multiple of three, as expected, but there will only be the */ /* one zero before the E, still. Otherwise note the padding. */ if (!DFISZERO(df)) pre+=adj; else { /* is zero */ if (adj!=0) { /* 0.00Esnn needed */ e=e+3; pre=-(2-adj); } } /* zero */ } /* engineering adjustment */ } /* exponential form */ /* printf("e=%ld pre=%ld exp=%ld\n", (LI)e, (LI)pre, (LI)exp); */ /* modify the coefficient, adding 0s, '.', and E+nn as needed */ if (pre>0) { /* ddd.ddd (plain), perhaps with E */ /* or dd00 padding for engineering */ char *dotat=cstart+pre; if (dotat=dotat; s-=4, t-=4) UBFROMUI(t, UBTOUI(s)); *dotat='.'; c++; /* length increased by one */ } /* need dot? */ else for (; c0 */ else { /* -5<=pre<=0: here for plain 0.ddd or 0.000ddd forms (may have E, but only for 0.00E+3 kind of case -- with plenty of spare space in this case */ pre=-pre+2; /* gap width, including "0." */ t=cstart+ROUNDDOWN4(c-cstart)+pre; /* preferred first target point */ /* backoff if too far to the right */ if (t>string+DECSTRING-5) t=string+DECSTRING-5; /* adjust to fit */ /* now shift the entire coefficient to the right, being careful not */ /* to access to the left of string [cannot use memcpy] */ for (s=t-pre; s>=string; s-=4, t-=4) UBFROMUI(t, UBTOUI(s)); /* for Quads and Singles there may be a character or two left... */ s+=3; /* where next would come from */ for(; s>=cstart; s--, t--) *(t+3)=*(s); /* now have fill 0. through 0.00000; use overlaps to avoid tests */ if (pre>=4) { memcpy(cstart+pre-4, "0000", 4); memcpy(cstart, "0.00", 4); } else { /* 2 or 3 */ *(cstart+pre-1)='0'; memcpy(cstart, "0.", 2); } c+=pre; /* to end */ } /* finally add the E-part, if needed; it will never be 0, and has */ /* a maximum length of 3 or 4 digits (asserted above) */ if (e!=0) { memcpy(c, "E+", 2); /* starts with E, assume + */ c++; if (e<0) { *c='-'; /* oops, need '-' */ e=-e; /* uInt, please */ } c++; /* Three-character exponents are easy; 4-character a little trickier */ #if DECEMAXD<=3 u=&BIN2BCD8[e*4]; /* -> 3 digits + length byte */ /* copy fixed 4 characters [is safe], starting at non-zero */ /* and with character mask to convert BCD to char */ UBFROMUI(c, UBTOUI(u+3-*(u+3))|CHARMASK); c+=*(u+3); /* bump pointer appropriately */ #elif DECEMAXD==4 if (e<1000) { /* 3 (or fewer) digits case */ u=&BIN2BCD8[e*4]; /* -> 3 digits + length byte */ UBFROMUI(c, UBTOUI(u+3-*(u+3))|CHARMASK); /* [as above] */ c+=*(u+3); /* bump pointer appropriately */ } else { /* 4-digits */ Int thou=((e>>3)*1049)>>17; /* e/1000 */ Int rem=e-(1000*thou); /* e%1000 */ *c++=(char)('0'+(char)thou); /* the thousands digit */ u=&BIN2BCD8[rem*4]; /* -> 3 digits + length byte */ UBFROMUI(c, UBTOUI(u)|CHARMASK);/* copy fixed 3+1 characters [is safe] */ c+=3; /* bump pointer, always 3 digits */ } #endif } *c='\0'; /* terminate */ /*printf("res %s\n", string); */ return string; } /* decFloatToEngString */ /* ------------------------------------------------------------------ */ /* decFloatToPacked -- convert decFloat to Packed decimal + exponent */ /* */ /* df is the source decFloat */ /* exp will be set to the unbiased exponent, q, or to a special */ /* value in the form returned by decFloatGetExponent */ /* packed is where DECPMAX nibbles will be written with the sign as */ /* final nibble (0x0c for +, 0x0d for -); a NaN has a first nibble */ /* of zero, and an infinity is all zeros. decDouble and decQuad */ /* have a additional leading zero nibble, leading to result */ /* lengths of 4, 9, and 18 bytes. */ /* returns the sign of the coefficient (DECFLOAT_Sign if negative, */ /* 0 otherwise) */ /* */ /* No error is possible, and no status will be set. */ /* ------------------------------------------------------------------ */ Int decFloatToPacked(const decFloat *df, Int *exp, uByte *packed) { uByte bcdar[DECPMAX+2]; /* work buffer */ uByte *ip=bcdar, *op=packed; /* work pointers */ if (DFISINF(df)) { memset(bcdar, 0, DECPMAX+2); *exp=DECFLOAT_Inf; } else { GETCOEFF(df, bcdar+1); /* use macro */ if (DFISNAN(df)) { bcdar[1]=0; /* MSD needs clearing */ *exp=DFWORD(df, 0)&0x7e000000; } else { /* finite */ *exp=GETEXPUN(df); } } /* now pack; coefficient currently at bcdar+1 */ #if SINGLE ip++; /* ignore first byte */ #else *ip=0; /* need leading zero */ #endif /* set final byte to Packed BCD sign value */ bcdar[DECPMAX+1]=(DFISSIGNED(df) ? DECPMINUS : DECPPLUS); /* pack an even number of bytes... */ for (; op>26; /* sign+combination field */ msd=DECCOMBMSD[comb]; /* decode the combination field */ exp=DECCOMBEXP[comb]; /* .. */ if (!EXPISSPECIAL(exp)) { /* finite */ /* complete exponent; top two bits are in place */ exp+=GETECON(df)-DECBIAS; /* .. + continuation and unbias */ } else { /* IS special */ if (exp==DECFLOAT_Inf) { /* infinity */ strcpy(c, "Infinity"); return string; /* easy */ } if (sourhi&0x02000000) *c++='s'; /* sNaN */ strcpy(c, "NaN"); /* complete word */ c+=3; /* step past */ /* quick exit if the payload is zero */ #if DECPMAX==7 if ((sourhi&0x000fffff)==0) return string; #elif DECPMAX==16 if (sourlo==0 && (sourhi&0x0003ffff)==0) return string; #elif DECPMAX==34 if (sourlo==0 && sourml==0 && sourmh==0 && (sourhi&0x00003fff)==0) return string; #endif /* otherwise drop through to add integer; set correct exp etc. */ exp=0; msd=0; /* setup for following code */ } /* convert the digits of the significand to characters */ cstart=c; /* save start of coefficient */ if (msd) *c++=(char)('0'+(char)msd); /* non-zero most significant digit */ /* Decode the declets. After extracting each declet, it is */ /* decoded to a 4-uByte sequence by table lookup; the four uBytes */ /* are the three encoded BCD8 digits followed by a 1-byte length */ /* (significant digits, except that 000 has length 0). This allows */ /* us to left-align the first declet with non-zero content, then */ /* the remaining ones are full 3-char length. Fixed-length copies */ /* are used because variable-length memcpy causes a subroutine call */ /* in at least two compilers. (The copies are length 4 for speed */ /* and are safe because the last item in the array is of length */ /* three and has the length byte following.) */ #define dpd2char(dpdin) u=&DPD2BCD8[((dpdin)&0x3ff)*4]; \ if (c!=cstart) {UBFROMUI(c, UBTOUI(u)|CHARMASK); c+=3;} \ else if (*(u+3)) { \ UBFROMUI(c, UBTOUI(u+3-*(u+3))|CHARMASK); c+=*(u+3);} #if DECPMAX==7 dpd2char(sourhi>>10); /* declet 1 */ dpd2char(sourhi); /* declet 2 */ #elif DECPMAX==16 dpd2char(sourhi>>8); /* declet 1 */ dpd2char((sourhi<<2) | (sourlo>>30)); /* declet 2 */ dpd2char(sourlo>>20); /* declet 3 */ dpd2char(sourlo>>10); /* declet 4 */ dpd2char(sourlo); /* declet 5 */ #elif DECPMAX==34 dpd2char(sourhi>>4); /* declet 1 */ dpd2char((sourhi<<6) | (sourmh>>26)); /* declet 2 */ dpd2char(sourmh>>16); /* declet 3 */ dpd2char(sourmh>>6); /* declet 4 */ dpd2char((sourmh<<4) | (sourml>>28)); /* declet 5 */ dpd2char(sourml>>18); /* declet 6 */ dpd2char(sourml>>8); /* declet 7 */ dpd2char((sourml<<2) | (sourlo>>30)); /* declet 8 */ dpd2char(sourlo>>20); /* declet 9 */ dpd2char(sourlo>>10); /* declet 10 */ dpd2char(sourlo); /* declet 11 */ #endif if (c==cstart) *c++='0'; /* all zeros, empty -- make "0" */ /*[This fast path is valid but adds 3-5 cycles to worst case length] */ /*if (exp==0) { // integer or NaN case -- easy */ /* *c='\0'; // terminate */ /* return string; */ /* } */ e=0; /* assume no E */ pre=(Int)(c-cstart)+exp; /* length+exp [c->LSD+1] */ /* [here, pre-exp is the digits count (==1 for zero)] */ if (exp>0 || pre<-5) { /* need exponential form */ e=pre-1; /* calculate E value */ pre=1; /* assume one digit before '.' */ } /* exponential form */ /* modify the coefficient, adding 0s, '.', and E+nn as needed */ if (pre>0) { /* ddd.ddd (plain), perhaps with E */ char *dotat=cstart+pre; if (dotat=dotat; s-=4, t-=4) UBFROMUI(t, UBTOUI(s)); *dotat='.'; c++; /* length increased by one */ } /* need dot? */ /* finally add the E-part, if needed; it will never be 0, and has */ /* a maximum length of 3 or 4 digits (asserted above) */ if (e!=0) { memcpy(c, "E+", 2); /* starts with E, assume + */ c++; if (e<0) { *c='-'; /* oops, need '-' */ e=-e; /* uInt, please */ } c++; /* Three-character exponents are easy; 4-character a little trickier */ #if DECEMAXD<=3 u=&BIN2BCD8[e*4]; /* -> 3 digits + length byte */ /* copy fixed 4 characters [is safe], starting at non-zero */ /* and with character mask to convert BCD to char */ UBFROMUI(c, UBTOUI(u+3-*(u+3))|CHARMASK); c+=*(u+3); /* bump pointer appropriately */ #elif DECEMAXD==4 if (e<1000) { /* 3 (or fewer) digits case */ u=&BIN2BCD8[e*4]; /* -> 3 digits + length byte */ UBFROMUI(c, UBTOUI(u+3-*(u+3))|CHARMASK); /* [as above] */ c+=*(u+3); /* bump pointer appropriately */ } else { /* 4-digits */ Int thou=((e>>3)*1049)>>17; /* e/1000 */ Int rem=e-(1000*thou); /* e%1000 */ *c++=(char)('0'+(char)thou); /* the thousands digit */ u=&BIN2BCD8[rem*4]; /* -> 3 digits + length byte */ UBFROMUI(c, UBTOUI(u)|CHARMASK); /* copy fixed 3+1 characters [is safe] */ c+=3; /* bump pointer, always 3 digits */ } #endif } *c='\0'; /* add terminator */ /*printf("res %s\n", string); */ return string; } /* pre>0 */ /* -5<=pre<=0: here for plain 0.ddd or 0.000ddd forms (can never have E) */ /* Surprisingly, this is close to being the worst-case path, so the */ /* shift is done by fours; this is a little tricky because the */ /* rightmost character to be written must not be beyond where the */ /* rightmost terminator could be -- so backoff to not touch */ /* terminator position if need be (this can make exact alignments */ /* for full Doubles, but in some cases needs care not to access too */ /* far to the left) */ pre=-pre+2; /* gap width, including "0." */ t=cstart+ROUNDDOWN4(c-cstart)+pre; /* preferred first target point */ /* backoff if too far to the right */ if (t>string+DECSTRING-5) t=string+DECSTRING-5; /* adjust to fit */ /* now shift the entire coefficient to the right, being careful not */ /* to access to the left of string [cannot use memcpy] */ for (s=t-pre; s>=string; s-=4, t-=4) UBFROMUI(t, UBTOUI(s)); /* for Quads and Singles there may be a character or two left... */ s+=3; /* where next would come from */ for(; s>=cstart; s--, t--) *(t+3)=*(s); /* now have fill 0. through 0.00000; use overlaps to avoid tests */ if (pre>=4) { memcpy(cstart+pre-4, "0000", 4); memcpy(cstart, "0.00", 4); } else { /* 2 or 3 */ *(cstart+pre-1)='0'; memcpy(cstart, "0.", 2); } *(c+pre)='\0'; /* terminate */ return string; } /* decFloatToString */ /* ------------------------------------------------------------------ */ /* decFloatToWider -- conversion to next-wider format */ /* */ /* source is the decFloat format number which gets the result of */ /* the conversion */ /* wider is the decFloatWider format number which will be narrowed */ /* returns wider */ /* */ /* Widening is always exact; no status is set (sNaNs are copied and */ /* do not signal). The result will be canonical if the source is, */ /* and may or may not be if the source is not. */ /* ------------------------------------------------------------------ */ /* widening is not possible for decQuad format numbers; simply omit */ #if !QUAD decFloatWider * decFloatToWider(const decFloat *source, decFloatWider *wider) { uInt msd; /* Construct and copy the sign word */ if (DFISSPECIAL(source)) { /* copy sign, combination, and first bit of exponent (sNaN selector) */ DFWWORD(wider, 0)=DFWORD(source, 0)&0xfe000000; msd=0; } else { /* is finite number */ uInt exp=GETEXPUN(source)+DECWBIAS; /* get unbiased exponent and rebias */ uInt code=(exp>>DECWECONL)<<29; /* set two bits of exp [msd=0] */ code|=(exp<<(32-6-DECWECONL)) & 0x03ffffff; /* add exponent continuation */ code|=DFWORD(source, 0)&0x80000000; /* add sign */ DFWWORD(wider, 0)=code; /* .. and place top word in wider */ msd=GETMSD(source); /* get source coefficient MSD [0-9] */ } /* Copy the coefficient and clear any 'unused' words to left */ #if SINGLE DFWWORD(wider, 1)=(DFWORD(source, 0)&0x000fffff)|(msd<<20); #elif DOUBLE DFWWORD(wider, 2)=(DFWORD(source, 0)&0x0003ffff)|(msd<<18); DFWWORD(wider, 3)=DFWORD(source, 1); DFWWORD(wider, 1)=0; #endif return wider; } /* decFloatToWider */ #endif /* ------------------------------------------------------------------ */ /* decFloatVersion -- return package version string */ /* */ /* returns a constant string describing this package */ /* ------------------------------------------------------------------ */ const char *decFloatVersion(void) { return DECVERSION; } /* decFloatVersion */ /* ------------------------------------------------------------------ */ /* decFloatZero -- set to canonical (integer) zero */ /* */ /* df is the decFloat format number to integer +0 (q=0, c=+0) */ /* returns df */ /* */ /* No error is possible, and no status can be set. */ /* ------------------------------------------------------------------ */ decFloat * decFloatZero(decFloat *df){ DFWORD(df, 0)=ZEROWORD; /* set appropriate top word */ #if DOUBLE || QUAD DFWORD(df, 1)=0; #if QUAD DFWORD(df, 2)=0; DFWORD(df, 3)=0; #endif #endif /* decFloatShow(df, "zero"); */ return df; } /* decFloatZero */ /* ------------------------------------------------------------------ */ /* Private generic function (not format-specific) for development use */ /* ------------------------------------------------------------------ */ /* This is included once only, for all to use */ #if QUAD && (DECCHECK || DECTRACE) /* ---------------------------------------------------------------- */ /* decShowNum -- display bcd8 number in debug form */ /* */ /* num is the bcdnum to display */ /* tag is a string to label the display */ /* ---------------------------------------------------------------- */ void decShowNum(const bcdnum *num, const char *tag) { const char *csign="+"; /* sign character */ uByte *ub; /* work */ uInt uiwork; /* for macros */ if (num->sign==DECFLOAT_Sign) csign="-"; printf(">%s> ", tag); if (num->exponent==DECFLOAT_Inf) printf("%sInfinity", csign); else if (num->exponent==DECFLOAT_qNaN) printf("%sqNaN", csign); else if (num->exponent==DECFLOAT_sNaN) printf("%ssNaN", csign); else { /* finite */ char qbuf[10]; /* for right-aligned q */ char *c; /* work */ const uByte *u; /* .. */ Int e=num->exponent; /* .. exponent */ strcpy(qbuf, "q="); c=&qbuf[2]; /* where exponent will go */ /* lay out the exponent */ if (e<0) { *c++='-'; /* add '-' */ e=-e; /* uInt, please */ } #if DECEMAXD>4 #error Exponent form is too long for ShowNum to lay out #endif if (e==0) *c++='0'; /* 0-length case */ else if (e<1000) { /* 3 (or fewer) digits case */ u=&BIN2BCD8[e*4]; /* -> 3 digits + length byte */ UBFROMUI(c, UBTOUI(u+3-*(u+3))|CHARMASK); /* [as above] */ c+=*(u+3); /* bump pointer appropriately */ } else { /* 4-digits */ Int thou=((e>>3)*1049)>>17; /* e/1000 */ Int rem=e-(1000*thou); /* e%1000 */ *c++=(char)('0'+(char)thou); /* the thousands digit */ u=&BIN2BCD8[rem*4]; /* -> 3 digits + length byte */ UBFROMUI(c, UBTOUI(u)|CHARMASK); /* copy fixed 3+1 characters [is safe] */ c+=3; /* bump pointer, always 3 digits */ } *c='\0'; /* add terminator */ printf("%7s c=%s", qbuf, csign); } if (!EXPISSPECIAL(num->exponent) || num->msd!=num->lsd || *num->lsd!=0) { for (ub=num->msd; ub<=num->lsd; ub++) { /* coefficient... */ printf("%1x", *ub); if ((num->lsd-ub)%3==0 && ub!=num->lsd) printf(" "); /* 4-space */ } } printf("\n"); } /* decShowNum */ #endif libdfp-1.0.17/libdecnumber/decCommonSymbols.h000066400000000000000000000002341504475242000211230ustar00rootroot00000000000000#if !defined(DECCOMMONSYMBOLS) #define DECCOMMONSYMBOLS #ifdef IN_LIBGCC2 #define DECCOMBFROM __decCOMBFROM #define DECCOMBMSD __decCOMBMSD #endif #endif libdfp-1.0.17/libdecnumber/decContext.c000066400000000000000000000475511504475242000177560ustar00rootroot00000000000000/* Decimal context module for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal Context module */ /* ------------------------------------------------------------------ */ /* This module comprises the routines for handling arithmetic */ /* context structures. */ /* ------------------------------------------------------------------ */ #include /* for strcmp */ #ifdef DECCHECK #include /* for printf if DECCHECK */ #endif #include "dconfig.h" /* for GCC definitions */ #include "decContext.h" /* context and base types */ #include "decNumberLocal.h" /* decNumber local types, etc. */ /* compile-time endian tester [assumes sizeof(Int)>1] */ static const Int mfcone=1; /* constant 1 */ static const Flag *mfctop=(const Flag *)&mfcone; /* -> top byte */ #define LITEND *mfctop /* named flag; 1=little-endian */ /* ------------------------------------------------------------------ */ /* round-for-reround digits */ /* ------------------------------------------------------------------ */ const uByte DECSTICKYTAB[10]={1,1,2,3,4,6,6,7,8,9}; /* used if sticky */ /* ------------------------------------------------------------------ */ /* Powers of ten (powers[n]==10**n, 0<=n<=9) */ /* ------------------------------------------------------------------ */ const uInt DECPOWERS[10]={1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; /* ------------------------------------------------------------------ */ /* decContextClearStatus -- clear bits in current status */ /* */ /* context is the context structure to be queried */ /* mask indicates the bits to be cleared (the status bit that */ /* corresponds to each 1 bit in the mask is cleared) */ /* returns context */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decContext *decContextClearStatus(decContext *context, uInt mask) { context->status&=~mask; return context; } /* decContextClearStatus */ /* ------------------------------------------------------------------ */ /* decContextDefault -- initialize a context structure */ /* */ /* context is the structure to be initialized */ /* kind selects the required set of default values, one of: */ /* DEC_INIT_BASE -- select ANSI X3-274 defaults */ /* DEC_INIT_DECIMAL32 -- select IEEE 754 defaults, 32-bit */ /* DEC_INIT_DECIMAL64 -- select IEEE 754 defaults, 64-bit */ /* DEC_INIT_DECIMAL128 -- select IEEE 754 defaults, 128-bit */ /* For any other value a valid context is returned, but with */ /* Invalid_operation set in the status field. */ /* returns a context structure with the appropriate initial values. */ /* ------------------------------------------------------------------ */ decContext * decContextDefault(decContext *context, Int kind) { /* set defaults... */ context->digits=9; /* 9 digits */ context->emax=DEC_MAX_EMAX; /* 9-digit exponents */ context->emin=DEC_MIN_EMIN; /* .. balanced */ context->round=DEC_ROUND_HALF_UP; /* 0.5 rises */ context->traps=DEC_Errors; /* all but informational */ context->status=0; /* cleared */ context->clamp=0; /* no clamping */ #if DECSUBSET context->extended=0; /* cleared */ #endif switch (kind) { case DEC_INIT_BASE: /* [use defaults] */ break; case DEC_INIT_DECIMAL32: context->digits=7; /* digits */ context->emax=96; /* Emax */ context->emin=-95; /* Emin */ context->round=DEC_ROUND_HALF_EVEN; /* 0.5 to nearest even */ context->traps=0; /* no traps set */ context->clamp=1; /* clamp exponents */ #if DECSUBSET context->extended=1; /* set */ #endif break; case DEC_INIT_DECIMAL64: context->digits=16; /* digits */ context->emax=384; /* Emax */ context->emin=-383; /* Emin */ context->round=DEC_ROUND_HALF_EVEN; /* 0.5 to nearest even */ context->traps=0; /* no traps set */ context->clamp=1; /* clamp exponents */ #if DECSUBSET context->extended=1; /* set */ #endif break; case DEC_INIT_DECIMAL128: context->digits=34; /* digits */ context->emax=6144; /* Emax */ context->emin=-6143; /* Emin */ context->round=DEC_ROUND_HALF_EVEN; /* 0.5 to nearest even */ context->traps=0; /* no traps set */ context->clamp=1; /* clamp exponents */ #if DECSUBSET context->extended=1; /* set */ #endif break; default: /* invalid Kind */ /* use defaults, and .. */ decContextSetStatus(context, DEC_Invalid_operation); /* trap */ } return context;} /* decContextDefault */ /* ------------------------------------------------------------------ */ /* decContextGetRounding -- return current rounding mode */ /* */ /* context is the context structure to be queried */ /* returns the rounding mode */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ enum rounding decContextGetRounding(decContext *context) { return context->round; } /* decContextGetRounding */ /* ------------------------------------------------------------------ */ /* decContextGetStatus -- return current status */ /* */ /* context is the context structure to be queried */ /* returns status */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ uInt decContextGetStatus(decContext *context) { return context->status; } /* decContextGetStatus */ /* ------------------------------------------------------------------ */ /* decContextRestoreStatus -- restore bits in current status */ /* */ /* context is the context structure to be updated */ /* newstatus is the source for the bits to be restored */ /* mask indicates the bits to be restored (the status bit that */ /* corresponds to each 1 bit in the mask is set to the value of */ /* the correspnding bit in newstatus) */ /* returns context */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decContext *decContextRestoreStatus(decContext *context, uInt newstatus, uInt mask) { context->status&=~mask; /* clear the selected bits */ context->status|=(mask&newstatus); /* or in the new bits */ return context; } /* decContextRestoreStatus */ /* ------------------------------------------------------------------ */ /* decContextSaveStatus -- save bits in current status */ /* */ /* context is the context structure to be queried */ /* mask indicates the bits to be saved (the status bits that */ /* correspond to each 1 bit in the mask are saved) */ /* returns the AND of the mask and the current status */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ uInt decContextSaveStatus(decContext *context, uInt mask) { return context->status&mask; } /* decContextSaveStatus */ /* ------------------------------------------------------------------ */ /* decContextSetRounding -- set current rounding mode */ /* */ /* context is the context structure to be updated */ /* newround is the value which will replace the current mode */ /* returns context */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decContext *decContextSetRounding(decContext *context, enum rounding newround) { context->round=newround; return context; } /* decContextSetRounding */ /* ------------------------------------------------------------------ */ /* decContextSetStatus -- set status and raise trap if appropriate */ /* */ /* context is the context structure to be updated */ /* status is the DEC_ exception code */ /* returns the context structure */ /* */ /* Control may never return from this routine, if there is a signal */ /* handler and it takes a long jump. */ /* ------------------------------------------------------------------ */ decContext * decContextSetStatus(decContext *context, uInt status) { context->status|=status; if (status & context->traps) raise(SIGFPE); return context;} /* decContextSetStatus */ /* ------------------------------------------------------------------ */ /* decContextSetStatusFromString -- set status from a string + trap */ /* */ /* context is the context structure to be updated */ /* string is a string exactly equal to one that might be returned */ /* by decContextStatusToString */ /* */ /* The status bit corresponding to the string is set, and a trap */ /* is raised if appropriate. */ /* */ /* returns the context structure, unless the string is equal to */ /* DEC_Condition_MU or is not recognized. In these cases NULL is */ /* returned. */ /* ------------------------------------------------------------------ */ decContext * decContextSetStatusFromString(decContext *context, const char *string) { if (strcmp(string, DEC_Condition_CS)==0) return decContextSetStatus(context, DEC_Conversion_syntax); if (strcmp(string, DEC_Condition_DZ)==0) return decContextSetStatus(context, DEC_Division_by_zero); if (strcmp(string, DEC_Condition_DI)==0) return decContextSetStatus(context, DEC_Division_impossible); if (strcmp(string, DEC_Condition_DU)==0) return decContextSetStatus(context, DEC_Division_undefined); if (strcmp(string, DEC_Condition_IE)==0) return decContextSetStatus(context, DEC_Inexact); if (strcmp(string, DEC_Condition_IS)==0) return decContextSetStatus(context, DEC_Insufficient_storage); if (strcmp(string, DEC_Condition_IC)==0) return decContextSetStatus(context, DEC_Invalid_context); if (strcmp(string, DEC_Condition_IO)==0) return decContextSetStatus(context, DEC_Invalid_operation); #if DECSUBSET if (strcmp(string, DEC_Condition_LD)==0) return decContextSetStatus(context, DEC_Lost_digits); #endif if (strcmp(string, DEC_Condition_OV)==0) return decContextSetStatus(context, DEC_Overflow); if (strcmp(string, DEC_Condition_PA)==0) return decContextSetStatus(context, DEC_Clamped); if (strcmp(string, DEC_Condition_RO)==0) return decContextSetStatus(context, DEC_Rounded); if (strcmp(string, DEC_Condition_SU)==0) return decContextSetStatus(context, DEC_Subnormal); if (strcmp(string, DEC_Condition_UN)==0) return decContextSetStatus(context, DEC_Underflow); if (strcmp(string, DEC_Condition_ZE)==0) return context; return NULL; /* Multiple status, or unknown */ } /* decContextSetStatusFromString */ /* ------------------------------------------------------------------ */ /* decContextSetStatusFromStringQuiet -- set status from a string */ /* */ /* context is the context structure to be updated */ /* string is a string exactly equal to one that might be returned */ /* by decContextStatusToString */ /* */ /* The status bit corresponding to the string is set; no trap is */ /* raised. */ /* */ /* returns the context structure, unless the string is equal to */ /* DEC_Condition_MU or is not recognized. In these cases NULL is */ /* returned. */ /* ------------------------------------------------------------------ */ decContext * decContextSetStatusFromStringQuiet(decContext *context, const char *string) { if (strcmp(string, DEC_Condition_CS)==0) return decContextSetStatusQuiet(context, DEC_Conversion_syntax); if (strcmp(string, DEC_Condition_DZ)==0) return decContextSetStatusQuiet(context, DEC_Division_by_zero); if (strcmp(string, DEC_Condition_DI)==0) return decContextSetStatusQuiet(context, DEC_Division_impossible); if (strcmp(string, DEC_Condition_DU)==0) return decContextSetStatusQuiet(context, DEC_Division_undefined); if (strcmp(string, DEC_Condition_IE)==0) return decContextSetStatusQuiet(context, DEC_Inexact); if (strcmp(string, DEC_Condition_IS)==0) return decContextSetStatusQuiet(context, DEC_Insufficient_storage); if (strcmp(string, DEC_Condition_IC)==0) return decContextSetStatusQuiet(context, DEC_Invalid_context); if (strcmp(string, DEC_Condition_IO)==0) return decContextSetStatusQuiet(context, DEC_Invalid_operation); #if DECSUBSET if (strcmp(string, DEC_Condition_LD)==0) return decContextSetStatusQuiet(context, DEC_Lost_digits); #endif if (strcmp(string, DEC_Condition_OV)==0) return decContextSetStatusQuiet(context, DEC_Overflow); if (strcmp(string, DEC_Condition_PA)==0) return decContextSetStatusQuiet(context, DEC_Clamped); if (strcmp(string, DEC_Condition_RO)==0) return decContextSetStatusQuiet(context, DEC_Rounded); if (strcmp(string, DEC_Condition_SU)==0) return decContextSetStatusQuiet(context, DEC_Subnormal); if (strcmp(string, DEC_Condition_UN)==0) return decContextSetStatusQuiet(context, DEC_Underflow); if (strcmp(string, DEC_Condition_ZE)==0) return context; return NULL; /* Multiple status, or unknown */ } /* decContextSetStatusFromStringQuiet */ /* ------------------------------------------------------------------ */ /* decContextSetStatusQuiet -- set status without trap */ /* */ /* context is the context structure to be updated */ /* status is the DEC_ exception code */ /* returns the context structure */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decContext * decContextSetStatusQuiet(decContext *context, uInt status) { context->status|=status; return context;} /* decContextSetStatusQuiet */ /* ------------------------------------------------------------------ */ /* decContextStatusToString -- convert status flags to a string */ /* */ /* context is a context with valid status field */ /* */ /* returns a constant string describing the condition. If multiple */ /* (or no) flags are set, a generic constant message is returned. */ /* ------------------------------------------------------------------ */ const char *decContextStatusToString(const decContext *context) { Int status=context->status; /* test the five IEEE first, as some of the others are ambiguous when */ /* DECEXTFLAG=0 */ if (status==DEC_Invalid_operation ) return DEC_Condition_IO; if (status==DEC_Division_by_zero ) return DEC_Condition_DZ; if (status==DEC_Overflow ) return DEC_Condition_OV; if (status==DEC_Underflow ) return DEC_Condition_UN; if (status==DEC_Inexact ) return DEC_Condition_IE; if (status==DEC_Division_impossible ) return DEC_Condition_DI; if (status==DEC_Division_undefined ) return DEC_Condition_DU; if (status==DEC_Rounded ) return DEC_Condition_RO; if (status==DEC_Clamped ) return DEC_Condition_PA; if (status==DEC_Subnormal ) return DEC_Condition_SU; if (status==DEC_Conversion_syntax ) return DEC_Condition_CS; if (status==DEC_Insufficient_storage ) return DEC_Condition_IS; if (status==DEC_Invalid_context ) return DEC_Condition_IC; #if DECSUBSET if (status==DEC_Lost_digits ) return DEC_Condition_LD; #endif if (status==0 ) return DEC_Condition_ZE; return DEC_Condition_MU; /* Multiple errors */ } /* decContextStatusToString */ /* ------------------------------------------------------------------ */ /* decContextTestEndian -- test whether DECLITEND is set correctly */ /* */ /* quiet is 1 to suppress message; 0 otherwise */ /* returns 0 if DECLITEND is correct */ /* 1 if DECLITEND is incorrect and should be 1 */ /* -1 if DECLITEND is incorrect and should be 0 */ /* */ /* A message is displayed if the return value is not 0 and quiet==0. */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ Int decContextTestEndian(Flag quiet) { Int res=0; /* optimist */ uInt dle=(uInt)DECLITEND; /* unsign */ if (dle>1) dle=1; /* ensure 0 or 1 */ if (LITEND!=DECLITEND) { if (!quiet) { #if DECCHECK const char *adj; if (LITEND) adj="little"; else adj="big"; printf("Warning: DECLITEND is set to %d, but this computer appears to be %s-endian\n", DECLITEND, adj); #endif } res=(Int)LITEND-dle; } return res; } /* decContextTestEndian */ /* ------------------------------------------------------------------ */ /* decContextTestSavedStatus -- test bits in saved status */ /* */ /* oldstatus is the status word to be tested */ /* mask indicates the bits to be tested (the oldstatus bits that */ /* correspond to each 1 bit in the mask are tested) */ /* returns 1 if any of the tested bits are 1, or 0 otherwise */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ uInt decContextTestSavedStatus(uInt oldstatus, uInt mask) { return (oldstatus&mask)!=0; } /* decContextTestSavedStatus */ /* ------------------------------------------------------------------ */ /* decContextTestStatus -- test bits in current status */ /* */ /* context is the context structure to be updated */ /* mask indicates the bits to be tested (the status bits that */ /* correspond to each 1 bit in the mask are tested) */ /* returns 1 if any of the tested bits are 1, or 0 otherwise */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ uInt decContextTestStatus(decContext *context, uInt mask) { return (context->status&mask)!=0; } /* decContextTestStatus */ /* ------------------------------------------------------------------ */ /* decContextZeroStatus -- clear all status bits */ /* */ /* context is the context structure to be updated */ /* returns context */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decContext *decContextZeroStatus(decContext *context) { context->status=0; return context; } /* decContextZeroStatus */ libdfp-1.0.17/libdecnumber/decContext.h000066400000000000000000000261621504475242000177560ustar00rootroot00000000000000/* Decimal context header module for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal Context module header */ /* ------------------------------------------------------------------ */ /* */ /* Context variables must always have valid values: */ /* */ /* status -- [any bits may be cleared, but not set, by user] */ /* round -- must be one of the enumerated rounding modes */ /* */ /* The following variables are implied for fixed size formats (i.e., */ /* they are ignored) but should still be set correctly in case used */ /* with decNumber functions: */ /* */ /* clamp -- must be either 0 or 1 */ /* digits -- must be in the range 1 through 999999999 */ /* emax -- must be in the range 0 through 999999999 */ /* emin -- must be in the range 0 through -999999999 */ /* extended -- must be either 0 or 1 [present only if DECSUBSET] */ /* traps -- only defined bits may be set */ /* */ /* ------------------------------------------------------------------ */ #if !defined(DECCONTEXT) #define DECCONTEXT #define DECCNAME "decContext" /* Short name */ #define DECCFULLNAME "Decimal Context Descriptor" /* Verbose name */ #define DECCAUTHOR "Mike Cowlishaw" /* Who to blame */ #ifdef IN_LIBGCC2 #include "gstdint.h" /* C99 standard integers */ #else #include #endif #include /* for printf, etc. */ #include /* for traps */ /* Extended flags setting -- set this to 0 to use only IEEE flags */ #if !defined(DECEXTFLAG) #define DECEXTFLAG 1 /* 1=enable extended flags */ #endif /* Conditional code flag -- set this to 0 for best performance */ #if !defined(DECSUBSET) #define DECSUBSET 0 /* 1=enable subset arithmetic */ #endif /* Context for operations, with associated constants */ enum rounding { DEC_ROUND_CEILING, /* round towards +infinity */ DEC_ROUND_UP, /* round away from 0 */ DEC_ROUND_HALF_UP, /* 0.5 rounds up */ DEC_ROUND_HALF_EVEN, /* 0.5 rounds to nearest even */ DEC_ROUND_HALF_DOWN, /* 0.5 rounds down */ DEC_ROUND_DOWN, /* round towards 0 (truncate) */ DEC_ROUND_FLOOR, /* round towards -infinity */ DEC_ROUND_05UP, /* round for reround */ DEC_ROUND_MAX /* enum must be less than this */ }; #define DEC_ROUND_DEFAULT DEC_ROUND_HALF_EVEN; typedef struct { int32_t digits; /* working precision */ int32_t emax; /* maximum positive exponent */ int32_t emin; /* minimum negative exponent */ enum rounding round; /* rounding mode */ uint32_t traps; /* trap-enabler flags */ uint32_t status; /* status flags */ uint8_t clamp; /* flag: apply IEEE exponent clamp */ #if DECSUBSET uint8_t extended; /* flag: special-values allowed */ #endif } decContext; /* Maxima and Minima for context settings */ #define DEC_MAX_DIGITS 999999999 #define DEC_MIN_DIGITS 1 #define DEC_MAX_EMAX 999999999 #define DEC_MIN_EMAX 0 #define DEC_MAX_EMIN 0 #define DEC_MIN_EMIN -999999999 #define DEC_MAX_MATH 999999 /* max emax, etc., for math funcs. */ /* Classifications for decimal numbers, aligned with 754 (note that */ /* 'normal' and 'subnormal' are meaningful only with a decContext */ /* or a fixed size format). */ enum decClass { DEC_CLASS_SNAN, DEC_CLASS_QNAN, DEC_CLASS_NEG_INF, DEC_CLASS_NEG_NORMAL, DEC_CLASS_NEG_SUBNORMAL, DEC_CLASS_NEG_ZERO, DEC_CLASS_POS_ZERO, DEC_CLASS_POS_SUBNORMAL, DEC_CLASS_POS_NORMAL, DEC_CLASS_POS_INF }; /* Strings for the decClasses */ #define DEC_ClassString_SN "sNaN" #define DEC_ClassString_QN "NaN" #define DEC_ClassString_NI "-Infinity" #define DEC_ClassString_NN "-Normal" #define DEC_ClassString_NS "-Subnormal" #define DEC_ClassString_NZ "-Zero" #define DEC_ClassString_PZ "+Zero" #define DEC_ClassString_PS "+Subnormal" #define DEC_ClassString_PN "+Normal" #define DEC_ClassString_PI "+Infinity" #define DEC_ClassString_UN "Invalid" /* Trap-enabler and Status flags (exceptional conditions), and */ /* their names. The top byte is reserved for internal use */ #if DECEXTFLAG /* Extended flags */ #define DEC_Conversion_syntax 0x00000001 #define DEC_Division_by_zero 0x00000002 #define DEC_Division_impossible 0x00000004 #define DEC_Division_undefined 0x00000008 #define DEC_Insufficient_storage 0x00000010 /* [when malloc fails] */ #define DEC_Inexact 0x00000020 #define DEC_Invalid_context 0x00000040 #define DEC_Invalid_operation 0x00000080 #if DECSUBSET #define DEC_Lost_digits 0x00000100 #endif #define DEC_Overflow 0x00000200 #define DEC_Clamped 0x00000400 #define DEC_Rounded 0x00000800 #define DEC_Subnormal 0x00001000 #define DEC_Underflow 0x00002000 #else /* IEEE flags only */ #define DEC_Conversion_syntax 0x00000010 #define DEC_Division_by_zero 0x00000002 #define DEC_Division_impossible 0x00000010 #define DEC_Division_undefined 0x00000010 #define DEC_Insufficient_storage 0x00000010 /* [when malloc fails] */ #define DEC_Inexact 0x00000001 #define DEC_Invalid_context 0x00000010 #define DEC_Invalid_operation 0x00000010 #if DECSUBSET #define DEC_Lost_digits 0x00000000 #endif #define DEC_Overflow 0x00000008 #define DEC_Clamped 0x00000000 #define DEC_Rounded 0x00000000 #define DEC_Subnormal 0x00000000 #define DEC_Underflow 0x00000004 #endif /* IEEE 754 groupings for the flags */ /* [DEC_Clamped, DEC_Lost_digits, DEC_Rounded, and DEC_Subnormal */ /* are not in IEEE 754] */ #define DEC_IEEE_754_Division_by_zero (DEC_Division_by_zero) #if DECSUBSET #define DEC_IEEE_754_Inexact (DEC_Inexact | DEC_Lost_digits) #else #define DEC_IEEE_754_Inexact (DEC_Inexact) #endif #define DEC_IEEE_754_Invalid_operation (DEC_Conversion_syntax | \ DEC_Division_impossible | \ DEC_Division_undefined | \ DEC_Insufficient_storage | \ DEC_Invalid_context | \ DEC_Invalid_operation) #define DEC_IEEE_754_Overflow (DEC_Overflow) #define DEC_IEEE_754_Underflow (DEC_Underflow) /* flags which are normally errors (result is qNaN, infinite, or 0) */ #define DEC_Errors (DEC_IEEE_754_Division_by_zero | \ DEC_IEEE_754_Invalid_operation | \ DEC_IEEE_754_Overflow | DEC_IEEE_754_Underflow) /* flags which cause a result to become qNaN */ #define DEC_NaNs DEC_IEEE_754_Invalid_operation /* flags which are normally for information only (finite results) */ #if DECSUBSET #define DEC_Information (DEC_Clamped | DEC_Rounded | DEC_Inexact \ | DEC_Lost_digits) #else #define DEC_Information (DEC_Clamped | DEC_Rounded | DEC_Inexact) #endif /* IEEE 854 names (for compatibility with older decNumber versions) */ #define DEC_IEEE_854_Division_by_zero DEC_IEEE_754_Division_by_zero #define DEC_IEEE_854_Inexact DEC_IEEE_754_Inexact #define DEC_IEEE_854_Invalid_operation DEC_IEEE_754_Invalid_operation #define DEC_IEEE_854_Overflow DEC_IEEE_754_Overflow #define DEC_IEEE_854_Underflow DEC_IEEE_754_Underflow /* Name strings for the exceptional conditions */ #define DEC_Condition_CS "Conversion syntax" #define DEC_Condition_DZ "Division by zero" #define DEC_Condition_DI "Division impossible" #define DEC_Condition_DU "Division undefined" #define DEC_Condition_IE "Inexact" #define DEC_Condition_IS "Insufficient storage" #define DEC_Condition_IC "Invalid context" #define DEC_Condition_IO "Invalid operation" #if DECSUBSET #define DEC_Condition_LD "Lost digits" #endif #define DEC_Condition_OV "Overflow" #define DEC_Condition_PA "Clamped" #define DEC_Condition_RO "Rounded" #define DEC_Condition_SU "Subnormal" #define DEC_Condition_UN "Underflow" #define DEC_Condition_ZE "No status" #define DEC_Condition_MU "Multiple status" #define DEC_Condition_Length 21 /* length of the longest string, */ /* including terminator */ /* Initialization descriptors, used by decContextDefault */ #define DEC_INIT_BASE 0 #define DEC_INIT_DECIMAL32 32 #define DEC_INIT_DECIMAL64 64 #define DEC_INIT_DECIMAL128 128 /* Synonyms */ #define DEC_INIT_DECSINGLE DEC_INIT_DECIMAL32 #define DEC_INIT_DECDOUBLE DEC_INIT_DECIMAL64 #define DEC_INIT_DECQUAD DEC_INIT_DECIMAL128 /* decContext routines */ #ifdef IN_LIBGCC2 #include "decContextSymbols.h" #endif #ifdef __cplusplus extern "C" { #endif extern decContext * decContextClearStatus(decContext *, uint32_t); extern decContext * decContextDefault(decContext *, int32_t); extern enum rounding decContextGetRounding(decContext *); extern uint32_t decContextGetStatus(decContext *); extern decContext * decContextRestoreStatus(decContext *, uint32_t, uint32_t); extern uint32_t decContextSaveStatus(decContext *, uint32_t); extern decContext * decContextSetRounding(decContext *, enum rounding); extern decContext * decContextSetStatus(decContext *, uint32_t); extern decContext * decContextSetStatusFromString(decContext *, const char *); extern decContext * decContextSetStatusFromStringQuiet(decContext *, const char *); extern decContext * decContextSetStatusQuiet(decContext *, uint32_t); extern const char * decContextStatusToString(const decContext *); extern int32_t decContextTestEndian(uint8_t); extern uint32_t decContextTestSavedStatus(uint32_t, uint32_t); extern uint32_t decContextTestStatus(decContext *, uint32_t); extern decContext * decContextZeroStatus(decContext *); #ifdef __cplusplus } #endif #endif libdfp-1.0.17/libdecnumber/decContextSymbols.h000066400000000000000000000017641504475242000213300ustar00rootroot00000000000000#if !defined(DECCONTEXTSYMBOLS) #define DECCONTEXTSYMBOLS #ifdef IN_LIBGCC2 #define decContextClearStatus __decContextClearStatus #define decContextDefault __decContextDefault #define decContextGetRounding __decContextGetRounding #define decContextGetStatus __decContextGetStatus #define decContextRestoreStatus __decContextRestoreStatus #define decContextSaveStatus __decContextSaveStatus #define decContextSetRounding __decContextSetRounding #define decContextSetStatus __decContextSetStatus #define decContextSetStatusFromString __decContextSetStatusFromString #define decContextSetStatusFromStringQuiet __decContextSetStatusFromStringQuiet #define decContextSetStatusQuiet __decContextSetStatusQuiet #define decContextStatusToString __decContextStatusToString #define decContextTestSavedStatus __decContextTestSavedStatus #define decContextTestStatus __decContextTestStatus #define decContextZeroStatus __decContextZeroStatus #define DECPOWERS __decPOWERS #define DECSTICKYTAB __decSTICKYTAB #endif #endif libdfp-1.0.17/libdecnumber/decConvert.h000066400000000000000000000032211504475242000177410ustar00rootroot00000000000000/* Conversion routines between _DecimalN types. Copyright (C) 2020 Free Software Foundation, Inc. This file is basically a wrapper around part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef _DECCONVERT_H #define _DECCONVERT_H #include #ifdef __cplusplus extern "C" { #endif decNumber * decimal128ToNumber(const decimal128 *, decNumber *); decNumber * decimal64ToNumber(const decimal64 *, decNumber *); decNumber * decimal32ToNumber(const decimal32 *, decNumber *); _Decimal128 * decimal128FromNumber(_Decimal128 *, const decNumber *, decContext *); _Decimal64 * decimal64FromNumber(_Decimal64 *, const decNumber *, decContext *); _Decimal32 * decimal32FromNumber(_Decimal32 *, const decNumber *, decContext *); #ifdef __cplusplus } #endif #endif /* _DECCONVERT_H */ libdfp-1.0.17/libdecnumber/decDPD.h000066400000000000000000002634451504475242000167500ustar00rootroot00000000000000/* Conversion lookup tables for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------------ */ /* Binary Coded Decimal and Densely Packed Decimal conversion lookup tables */ /* [Automatically generated -- do not edit. 2008.06.21] */ /* ------------------------------------------------------------------------ */ /* For details, see DPDecimal.html on the General Decimal Arithmetic page. */ #include "decDPDSymbols.h" /* This include file defines several DPD and BCD conversion tables: */ /* */ /* uint16_t BCD2DPD[2458]; -- BCD -> DPD (0x999 => 2457) */ /* uint16_t BIN2DPD[1000]; -- Bin -> DPD (999 => 2457) */ /* uint8_t BIN2CHAR[4001]; -- Bin -> CHAR (999 => '\3' '9' '9' '9') */ /* uint8_t BIN2BCD8[4000]; -- Bin -> bytes (999 => 9 9 9 3) */ /* uint16_t DPD2BCD[1024]; -- DPD -> BCD (0x3FF => 0x999) */ /* uint16_t DPD2BIN[1024]; -- DPD -> BIN (0x3FF => 999) */ /* uint32_t DPD2BINK[1024]; -- DPD -> BIN * 1000 (0x3FF => 999000) */ /* uint32_t DPD2BINM[1024]; -- DPD -> BIN * 1E+6 (0x3FF => 999000000) */ /* uint8_t DPD2BCD8[4096]; -- DPD -> bytes (x3FF => 9 9 9 3) */ /* */ /* In all cases the result (10 bits or 12 bits, or binary) is right-aligned */ /* in the table entry. BIN2CHAR entries are a single byte length (0 for */ /* value 0) followed by three digit characters; a trailing terminator is */ /* included to allow 4-char moves always. BIN2BCD8 and DPD2BCD8 entries */ /* are similar with the three BCD8 digits followed by a one-byte length */ /* (again, length=0 for value 0). */ /* */ /* To use a table, its name, prefixed with DEC_, must be defined with a */ /* value of 1 before this header file is included. For example: */ /* #define DEC_BCD2DPD 1 */ /* This mechanism allows software to only include tables that are needed. */ /* ------------------------------------------------------------------------ */ #if defined(DEC_BCD2DPD) && DEC_BCD2DPD==1 && !defined(DECBCD2DPD) #define DECBCD2DPD #ifdef __cplusplus extern "C" { #endif const uint16_t BCD2DPD[2458]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 0, 0, 0, 0, 0, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, 0, 0, 0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 0, 0, 0, 0, 0, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 0, 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 0, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 0, 0, 0, 0, 0, 0, 10, 11, 42, 43, 74, 75, 106, 107, 78, 79, 0, 0, 0, 0, 0, 0, 26, 27, 58, 59, 90, 91, 122, 123, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 0, 0, 0, 0, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 0, 0, 0, 0, 0, 0, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 0, 0, 0, 0, 0, 0, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 0, 0, 0, 0, 0, 0, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 0, 0, 0, 0, 0, 0, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 0, 0, 0, 0, 0, 0, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 0, 0, 0, 0, 0, 0, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 0, 0, 0, 0, 0, 0, 138, 139, 170, 171, 202, 203, 234, 235, 206, 207, 0, 0, 0, 0, 0, 0, 154, 155, 186, 187, 218, 219, 250, 251, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 0, 0, 0, 0, 0, 0, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 0, 0, 0, 0, 0, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 0, 0, 0, 0, 0, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 0, 0, 0, 0, 0, 0, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 0, 0, 0, 0, 0, 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 0, 0, 0, 0, 0, 0, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 0, 0, 0, 0, 0, 0, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 0, 0, 0, 0, 0, 0, 266, 267, 298, 299, 330, 331, 362, 363, 334, 335, 0, 0, 0, 0, 0, 0, 282, 283, 314, 315, 346, 347, 378, 379, 350, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 0, 0, 0, 0, 0, 0, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 0, 0, 0, 0, 0, 0, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, 0, 0, 0, 0, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 0, 0, 0, 0, 0, 0, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 0, 0, 0, 0, 0, 0, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 0, 0, 0, 0, 0, 0, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 0, 0, 0, 0, 0, 0, 394, 395, 426, 427, 458, 459, 490, 491, 462, 463, 0, 0, 0, 0, 0, 0, 410, 411, 442, 443, 474, 475, 506, 507, 478, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 0, 0, 0, 0, 0, 0, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 0, 0, 0, 0, 0, 0, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 0, 0, 0, 0, 0, 0, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 0, 0, 0, 0, 0, 0, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 0, 0, 0, 0, 0, 0, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 0, 0, 0, 0, 0, 0, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 0, 0, 0, 0, 0, 0, 522, 523, 554, 555, 586, 587, 618, 619, 590, 591, 0, 0, 0, 0, 0, 0, 538, 539, 570, 571, 602, 603, 634, 635, 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 0, 0, 0, 0, 0, 0, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 0, 0, 0, 0, 0, 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 0, 0, 0, 0, 0, 0, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 0, 0, 0, 0, 0, 0, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 0, 0, 0, 0, 0, 0, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 0, 0, 0, 0, 0, 0, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 0, 0, 0, 0, 0, 0, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 0, 0, 0, 0, 0, 0, 650, 651, 682, 683, 714, 715, 746, 747, 718, 719, 0, 0, 0, 0, 0, 0, 666, 667, 698, 699, 730, 731, 762, 763, 734, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 0, 0, 0, 0, 0, 0, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 0, 0, 0, 0, 0, 0, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 0, 0, 0, 0, 0, 0, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 0, 0, 0, 0, 0, 0, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 0, 0, 0, 0, 0, 0, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 0, 0, 0, 0, 0, 0, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 0, 0, 0, 0, 0, 0, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 0, 0, 0, 0, 0, 0, 778, 779, 810, 811, 842, 843, 874, 875, 846, 847, 0, 0, 0, 0, 0, 0, 794, 795, 826, 827, 858, 859, 890, 891, 862, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 0, 0, 0, 0, 0, 0, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 0, 0, 0, 0, 0, 0, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 0, 0, 0, 0, 0, 0, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 0, 0, 0, 0, 0, 0, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 0, 0, 0, 0, 0, 0, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 0, 0, 0, 0, 0, 0, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 0, 0, 0, 0, 0, 0, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 0, 0, 0, 0, 0, 0, 906, 907, 938, 939, 970, 971, 1002, 1003, 974, 975, 0, 0, 0, 0, 0, 0, 922, 923, 954, 955, 986, 987, 1018, 1019, 990, 991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 268, 269, 524, 525, 780, 781, 46, 47, 0, 0, 0, 0, 0, 0, 28, 29, 284, 285, 540, 541, 796, 797, 62, 63, 0, 0, 0, 0, 0, 0, 44, 45, 300, 301, 556, 557, 812, 813, 302, 303, 0, 0, 0, 0, 0, 0, 60, 61, 316, 317, 572, 573, 828, 829, 318, 319, 0, 0, 0, 0, 0, 0, 76, 77, 332, 333, 588, 589, 844, 845, 558, 559, 0, 0, 0, 0, 0, 0, 92, 93, 348, 349, 604, 605, 860, 861, 574, 575, 0, 0, 0, 0, 0, 0, 108, 109, 364, 365, 620, 621, 876, 877, 814, 815, 0, 0, 0, 0, 0, 0, 124, 125, 380, 381, 636, 637, 892, 893, 830, 831, 0, 0, 0, 0, 0, 0, 14, 15, 270, 271, 526, 527, 782, 783, 110, 111, 0, 0, 0, 0, 0, 0, 30, 31, 286, 287, 542, 543, 798, 799, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 141, 396, 397, 652, 653, 908, 909, 174, 175, 0, 0, 0, 0, 0, 0, 156, 157, 412, 413, 668, 669, 924, 925, 190, 191, 0, 0, 0, 0, 0, 0, 172, 173, 428, 429, 684, 685, 940, 941, 430, 431, 0, 0, 0, 0, 0, 0, 188, 189, 444, 445, 700, 701, 956, 957, 446, 447, 0, 0, 0, 0, 0, 0, 204, 205, 460, 461, 716, 717, 972, 973, 686, 687, 0, 0, 0, 0, 0, 0, 220, 221, 476, 477, 732, 733, 988, 989, 702, 703, 0, 0, 0, 0, 0, 0, 236, 237, 492, 493, 748, 749, 1004, 1005, 942, 943, 0, 0, 0, 0, 0, 0, 252, 253, 508, 509, 764, 765, 1020, 1021, 958, 959, 0, 0, 0, 0, 0, 0, 142, 143, 398, 399, 654, 655, 910, 911, 238, 239, 0, 0, 0, 0, 0, 0, 158, 159, 414, 415, 670, 671, 926, 927, 254, 255}; #endif #if defined(DEC_DPD2BCD) && DEC_DPD2BCD==1 && !defined(DECDPD2BCD) #define DECDPD2BCD const uint16_t DPD2BCD[1024]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 128, 129, 2048, 2049, 2176, 2177, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 144, 145, 2064, 2065, 2192, 2193, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 130, 131, 2080, 2081, 2056, 2057, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 146, 147, 2096, 2097, 2072, 2073, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 132, 133, 2112, 2113, 136, 137, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 148, 149, 2128, 2129, 152, 153, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 134, 135, 2144, 2145, 2184, 2185, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 150, 151, 2160, 2161, 2200, 2201, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 384, 385, 2304, 2305, 2432, 2433, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 400, 401, 2320, 2321, 2448, 2449, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 386, 387, 2336, 2337, 2312, 2313, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 402, 403, 2352, 2353, 2328, 2329, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 388, 389, 2368, 2369, 392, 393, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 404, 405, 2384, 2385, 408, 409, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 390, 391, 2400, 2401, 2440, 2441, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 406, 407, 2416, 2417, 2456, 2457, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 640, 641, 2050, 2051, 2178, 2179, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 656, 657, 2066, 2067, 2194, 2195, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 642, 643, 2082, 2083, 2088, 2089, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 658, 659, 2098, 2099, 2104, 2105, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 644, 645, 2114, 2115, 648, 649, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 660, 661, 2130, 2131, 664, 665, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 646, 647, 2146, 2147, 2184, 2185, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 662, 663, 2162, 2163, 2200, 2201, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 896, 897, 2306, 2307, 2434, 2435, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 912, 913, 2322, 2323, 2450, 2451, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 898, 899, 2338, 2339, 2344, 2345, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 914, 915, 2354, 2355, 2360, 2361, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 900, 901, 2370, 2371, 904, 905, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 916, 917, 2386, 2387, 920, 921, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 902, 903, 2402, 2403, 2440, 2441, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 918, 919, 2418, 2419, 2456, 2457, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1152, 1153, 2052, 2053, 2180, 2181, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1168, 1169, 2068, 2069, 2196, 2197, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1154, 1155, 2084, 2085, 2120, 2121, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1170, 1171, 2100, 2101, 2136, 2137, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1156, 1157, 2116, 2117, 1160, 1161, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1172, 1173, 2132, 2133, 1176, 1177, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1158, 1159, 2148, 2149, 2184, 2185, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1174, 1175, 2164, 2165, 2200, 2201, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1408, 1409, 2308, 2309, 2436, 2437, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1424, 1425, 2324, 2325, 2452, 2453, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1410, 1411, 2340, 2341, 2376, 2377, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1426, 1427, 2356, 2357, 2392, 2393, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1412, 1413, 2372, 2373, 1416, 1417, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1428, 1429, 2388, 2389, 1432, 1433, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1414, 1415, 2404, 2405, 2440, 2441, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1430, 1431, 2420, 2421, 2456, 2457, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1664, 1665, 2054, 2055, 2182, 2183, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1680, 1681, 2070, 2071, 2198, 2199, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1666, 1667, 2086, 2087, 2152, 2153, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1682, 1683, 2102, 2103, 2168, 2169, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1668, 1669, 2118, 2119, 1672, 1673, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1684, 1685, 2134, 2135, 1688, 1689, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1670, 1671, 2150, 2151, 2184, 2185, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1686, 1687, 2166, 2167, 2200, 2201, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1920, 1921, 2310, 2311, 2438, 2439, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1936, 1937, 2326, 2327, 2454, 2455, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1922, 1923, 2342, 2343, 2408, 2409, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1938, 1939, 2358, 2359, 2424, 2425, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1924, 1925, 2374, 2375, 1928, 1929, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1940, 1941, 2390, 2391, 1944, 1945, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1926, 1927, 2406, 2407, 2440, 2441, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1942, 1943, 2422, 2423, 2456, 2457}; #endif #if defined(DEC_BIN2DPD) && DEC_BIN2DPD==1 && !defined(DECBIN2DPD) #define DECBIN2DPD const uint16_t BIN2DPD[1000]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 10, 11, 42, 43, 74, 75, 106, 107, 78, 79, 26, 27, 58, 59, 90, 91, 122, 123, 94, 95, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 138, 139, 170, 171, 202, 203, 234, 235, 206, 207, 154, 155, 186, 187, 218, 219, 250, 251, 222, 223, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 266, 267, 298, 299, 330, 331, 362, 363, 334, 335, 282, 283, 314, 315, 346, 347, 378, 379, 350, 351, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 394, 395, 426, 427, 458, 459, 490, 491, 462, 463, 410, 411, 442, 443, 474, 475, 506, 507, 478, 479, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 522, 523, 554, 555, 586, 587, 618, 619, 590, 591, 538, 539, 570, 571, 602, 603, 634, 635, 606, 607, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 650, 651, 682, 683, 714, 715, 746, 747, 718, 719, 666, 667, 698, 699, 730, 731, 762, 763, 734, 735, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 778, 779, 810, 811, 842, 843, 874, 875, 846, 847, 794, 795, 826, 827, 858, 859, 890, 891, 862, 863, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 906, 907, 938, 939, 970, 971, 1002, 1003, 974, 975, 922, 923, 954, 955, 986, 987, 1018, 1019, 990, 991, 12, 13, 268, 269, 524, 525, 780, 781, 46, 47, 28, 29, 284, 285, 540, 541, 796, 797, 62, 63, 44, 45, 300, 301, 556, 557, 812, 813, 302, 303, 60, 61, 316, 317, 572, 573, 828, 829, 318, 319, 76, 77, 332, 333, 588, 589, 844, 845, 558, 559, 92, 93, 348, 349, 604, 605, 860, 861, 574, 575, 108, 109, 364, 365, 620, 621, 876, 877, 814, 815, 124, 125, 380, 381, 636, 637, 892, 893, 830, 831, 14, 15, 270, 271, 526, 527, 782, 783, 110, 111, 30, 31, 286, 287, 542, 543, 798, 799, 126, 127, 140, 141, 396, 397, 652, 653, 908, 909, 174, 175, 156, 157, 412, 413, 668, 669, 924, 925, 190, 191, 172, 173, 428, 429, 684, 685, 940, 941, 430, 431, 188, 189, 444, 445, 700, 701, 956, 957, 446, 447, 204, 205, 460, 461, 716, 717, 972, 973, 686, 687, 220, 221, 476, 477, 732, 733, 988, 989, 702, 703, 236, 237, 492, 493, 748, 749, 1004, 1005, 942, 943, 252, 253, 508, 509, 764, 765, 1020, 1021, 958, 959, 142, 143, 398, 399, 654, 655, 910, 911, 238, 239, 158, 159, 414, 415, 670, 671, 926, 927, 254, 255}; #endif #if defined(DEC_DPD2BIN) && DEC_DPD2BIN==1 && !defined(DECDPD2BIN) #define DECDPD2BIN const uint16_t DPD2BIN[1024]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 80, 81, 800, 801, 880, 881, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 90, 91, 810, 811, 890, 891, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 82, 83, 820, 821, 808, 809, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 92, 93, 830, 831, 818, 819, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 84, 85, 840, 841, 88, 89, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 94, 95, 850, 851, 98, 99, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 860, 861, 888, 889, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 870, 871, 898, 899, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 180, 181, 900, 901, 980, 981, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 190, 191, 910, 911, 990, 991, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 182, 183, 920, 921, 908, 909, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 192, 193, 930, 931, 918, 919, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 184, 185, 940, 941, 188, 189, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 194, 195, 950, 951, 198, 199, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 186, 187, 960, 961, 988, 989, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 196, 197, 970, 971, 998, 999, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 280, 281, 802, 803, 882, 883, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 290, 291, 812, 813, 892, 893, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 282, 283, 822, 823, 828, 829, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 292, 293, 832, 833, 838, 839, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 284, 285, 842, 843, 288, 289, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 294, 295, 852, 853, 298, 299, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 286, 287, 862, 863, 888, 889, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 296, 297, 872, 873, 898, 899, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 380, 381, 902, 903, 982, 983, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 390, 391, 912, 913, 992, 993, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 382, 383, 922, 923, 928, 929, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 392, 393, 932, 933, 938, 939, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 384, 385, 942, 943, 388, 389, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 394, 395, 952, 953, 398, 399, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 386, 387, 962, 963, 988, 989, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 396, 397, 972, 973, 998, 999, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 480, 481, 804, 805, 884, 885, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 490, 491, 814, 815, 894, 895, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 482, 483, 824, 825, 848, 849, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 492, 493, 834, 835, 858, 859, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 484, 485, 844, 845, 488, 489, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 494, 495, 854, 855, 498, 499, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 486, 487, 864, 865, 888, 889, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 496, 497, 874, 875, 898, 899, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 580, 581, 904, 905, 984, 985, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 590, 591, 914, 915, 994, 995, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 582, 583, 924, 925, 948, 949, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 592, 593, 934, 935, 958, 959, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 584, 585, 944, 945, 588, 589, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 594, 595, 954, 955, 598, 599, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 586, 587, 964, 965, 988, 989, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 596, 597, 974, 975, 998, 999, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 680, 681, 806, 807, 886, 887, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 690, 691, 816, 817, 896, 897, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 682, 683, 826, 827, 868, 869, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 692, 693, 836, 837, 878, 879, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 684, 685, 846, 847, 688, 689, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 694, 695, 856, 857, 698, 699, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 686, 687, 866, 867, 888, 889, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 696, 697, 876, 877, 898, 899, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 780, 781, 906, 907, 986, 987, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 790, 791, 916, 917, 996, 997, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 782, 783, 926, 927, 968, 969, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 792, 793, 936, 937, 978, 979, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 784, 785, 946, 947, 788, 789, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 794, 795, 956, 957, 798, 799, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 786, 787, 966, 967, 988, 989, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 796, 797, 976, 977, 998, 999}; #endif #if defined(DEC_DPD2BINK) && DEC_DPD2BINK==1 && !defined(DECDPD2BINK) #define DECDPD2BINK const uint32_t DPD2BINK[1024]={ 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 80000, 81000, 800000, 801000, 880000, 881000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 90000, 91000, 810000, 811000, 890000, 891000, 20000, 21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 82000, 83000, 820000, 821000, 808000, 809000, 30000, 31000, 32000, 33000, 34000, 35000, 36000, 37000, 38000, 39000, 92000, 93000, 830000, 831000, 818000, 819000, 40000, 41000, 42000, 43000, 44000, 45000, 46000, 47000, 48000, 49000, 84000, 85000, 840000, 841000, 88000, 89000, 50000, 51000, 52000, 53000, 54000, 55000, 56000, 57000, 58000, 59000, 94000, 95000, 850000, 851000, 98000, 99000, 60000, 61000, 62000, 63000, 64000, 65000, 66000, 67000, 68000, 69000, 86000, 87000, 860000, 861000, 888000, 889000, 70000, 71000, 72000, 73000, 74000, 75000, 76000, 77000, 78000, 79000, 96000, 97000, 870000, 871000, 898000, 899000, 100000, 101000, 102000, 103000, 104000, 105000, 106000, 107000, 108000, 109000, 180000, 181000, 900000, 901000, 980000, 981000, 110000, 111000, 112000, 113000, 114000, 115000, 116000, 117000, 118000, 119000, 190000, 191000, 910000, 911000, 990000, 991000, 120000, 121000, 122000, 123000, 124000, 125000, 126000, 127000, 128000, 129000, 182000, 183000, 920000, 921000, 908000, 909000, 130000, 131000, 132000, 133000, 134000, 135000, 136000, 137000, 138000, 139000, 192000, 193000, 930000, 931000, 918000, 919000, 140000, 141000, 142000, 143000, 144000, 145000, 146000, 147000, 148000, 149000, 184000, 185000, 940000, 941000, 188000, 189000, 150000, 151000, 152000, 153000, 154000, 155000, 156000, 157000, 158000, 159000, 194000, 195000, 950000, 951000, 198000, 199000, 160000, 161000, 162000, 163000, 164000, 165000, 166000, 167000, 168000, 169000, 186000, 187000, 960000, 961000, 988000, 989000, 170000, 171000, 172000, 173000, 174000, 175000, 176000, 177000, 178000, 179000, 196000, 197000, 970000, 971000, 998000, 999000, 200000, 201000, 202000, 203000, 204000, 205000, 206000, 207000, 208000, 209000, 280000, 281000, 802000, 803000, 882000, 883000, 210000, 211000, 212000, 213000, 214000, 215000, 216000, 217000, 218000, 219000, 290000, 291000, 812000, 813000, 892000, 893000, 220000, 221000, 222000, 223000, 224000, 225000, 226000, 227000, 228000, 229000, 282000, 283000, 822000, 823000, 828000, 829000, 230000, 231000, 232000, 233000, 234000, 235000, 236000, 237000, 238000, 239000, 292000, 293000, 832000, 833000, 838000, 839000, 240000, 241000, 242000, 243000, 244000, 245000, 246000, 247000, 248000, 249000, 284000, 285000, 842000, 843000, 288000, 289000, 250000, 251000, 252000, 253000, 254000, 255000, 256000, 257000, 258000, 259000, 294000, 295000, 852000, 853000, 298000, 299000, 260000, 261000, 262000, 263000, 264000, 265000, 266000, 267000, 268000, 269000, 286000, 287000, 862000, 863000, 888000, 889000, 270000, 271000, 272000, 273000, 274000, 275000, 276000, 277000, 278000, 279000, 296000, 297000, 872000, 873000, 898000, 899000, 300000, 301000, 302000, 303000, 304000, 305000, 306000, 307000, 308000, 309000, 380000, 381000, 902000, 903000, 982000, 983000, 310000, 311000, 312000, 313000, 314000, 315000, 316000, 317000, 318000, 319000, 390000, 391000, 912000, 913000, 992000, 993000, 320000, 321000, 322000, 323000, 324000, 325000, 326000, 327000, 328000, 329000, 382000, 383000, 922000, 923000, 928000, 929000, 330000, 331000, 332000, 333000, 334000, 335000, 336000, 337000, 338000, 339000, 392000, 393000, 932000, 933000, 938000, 939000, 340000, 341000, 342000, 343000, 344000, 345000, 346000, 347000, 348000, 349000, 384000, 385000, 942000, 943000, 388000, 389000, 350000, 351000, 352000, 353000, 354000, 355000, 356000, 357000, 358000, 359000, 394000, 395000, 952000, 953000, 398000, 399000, 360000, 361000, 362000, 363000, 364000, 365000, 366000, 367000, 368000, 369000, 386000, 387000, 962000, 963000, 988000, 989000, 370000, 371000, 372000, 373000, 374000, 375000, 376000, 377000, 378000, 379000, 396000, 397000, 972000, 973000, 998000, 999000, 400000, 401000, 402000, 403000, 404000, 405000, 406000, 407000, 408000, 409000, 480000, 481000, 804000, 805000, 884000, 885000, 410000, 411000, 412000, 413000, 414000, 415000, 416000, 417000, 418000, 419000, 490000, 491000, 814000, 815000, 894000, 895000, 420000, 421000, 422000, 423000, 424000, 425000, 426000, 427000, 428000, 429000, 482000, 483000, 824000, 825000, 848000, 849000, 430000, 431000, 432000, 433000, 434000, 435000, 436000, 437000, 438000, 439000, 492000, 493000, 834000, 835000, 858000, 859000, 440000, 441000, 442000, 443000, 444000, 445000, 446000, 447000, 448000, 449000, 484000, 485000, 844000, 845000, 488000, 489000, 450000, 451000, 452000, 453000, 454000, 455000, 456000, 457000, 458000, 459000, 494000, 495000, 854000, 855000, 498000, 499000, 460000, 461000, 462000, 463000, 464000, 465000, 466000, 467000, 468000, 469000, 486000, 487000, 864000, 865000, 888000, 889000, 470000, 471000, 472000, 473000, 474000, 475000, 476000, 477000, 478000, 479000, 496000, 497000, 874000, 875000, 898000, 899000, 500000, 501000, 502000, 503000, 504000, 505000, 506000, 507000, 508000, 509000, 580000, 581000, 904000, 905000, 984000, 985000, 510000, 511000, 512000, 513000, 514000, 515000, 516000, 517000, 518000, 519000, 590000, 591000, 914000, 915000, 994000, 995000, 520000, 521000, 522000, 523000, 524000, 525000, 526000, 527000, 528000, 529000, 582000, 583000, 924000, 925000, 948000, 949000, 530000, 531000, 532000, 533000, 534000, 535000, 536000, 537000, 538000, 539000, 592000, 593000, 934000, 935000, 958000, 959000, 540000, 541000, 542000, 543000, 544000, 545000, 546000, 547000, 548000, 549000, 584000, 585000, 944000, 945000, 588000, 589000, 550000, 551000, 552000, 553000, 554000, 555000, 556000, 557000, 558000, 559000, 594000, 595000, 954000, 955000, 598000, 599000, 560000, 561000, 562000, 563000, 564000, 565000, 566000, 567000, 568000, 569000, 586000, 587000, 964000, 965000, 988000, 989000, 570000, 571000, 572000, 573000, 574000, 575000, 576000, 577000, 578000, 579000, 596000, 597000, 974000, 975000, 998000, 999000, 600000, 601000, 602000, 603000, 604000, 605000, 606000, 607000, 608000, 609000, 680000, 681000, 806000, 807000, 886000, 887000, 610000, 611000, 612000, 613000, 614000, 615000, 616000, 617000, 618000, 619000, 690000, 691000, 816000, 817000, 896000, 897000, 620000, 621000, 622000, 623000, 624000, 625000, 626000, 627000, 628000, 629000, 682000, 683000, 826000, 827000, 868000, 869000, 630000, 631000, 632000, 633000, 634000, 635000, 636000, 637000, 638000, 639000, 692000, 693000, 836000, 837000, 878000, 879000, 640000, 641000, 642000, 643000, 644000, 645000, 646000, 647000, 648000, 649000, 684000, 685000, 846000, 847000, 688000, 689000, 650000, 651000, 652000, 653000, 654000, 655000, 656000, 657000, 658000, 659000, 694000, 695000, 856000, 857000, 698000, 699000, 660000, 661000, 662000, 663000, 664000, 665000, 666000, 667000, 668000, 669000, 686000, 687000, 866000, 867000, 888000, 889000, 670000, 671000, 672000, 673000, 674000, 675000, 676000, 677000, 678000, 679000, 696000, 697000, 876000, 877000, 898000, 899000, 700000, 701000, 702000, 703000, 704000, 705000, 706000, 707000, 708000, 709000, 780000, 781000, 906000, 907000, 986000, 987000, 710000, 711000, 712000, 713000, 714000, 715000, 716000, 717000, 718000, 719000, 790000, 791000, 916000, 917000, 996000, 997000, 720000, 721000, 722000, 723000, 724000, 725000, 726000, 727000, 728000, 729000, 782000, 783000, 926000, 927000, 968000, 969000, 730000, 731000, 732000, 733000, 734000, 735000, 736000, 737000, 738000, 739000, 792000, 793000, 936000, 937000, 978000, 979000, 740000, 741000, 742000, 743000, 744000, 745000, 746000, 747000, 748000, 749000, 784000, 785000, 946000, 947000, 788000, 789000, 750000, 751000, 752000, 753000, 754000, 755000, 756000, 757000, 758000, 759000, 794000, 795000, 956000, 957000, 798000, 799000, 760000, 761000, 762000, 763000, 764000, 765000, 766000, 767000, 768000, 769000, 786000, 787000, 966000, 967000, 988000, 989000, 770000, 771000, 772000, 773000, 774000, 775000, 776000, 777000, 778000, 779000, 796000, 797000, 976000, 977000, 998000, 999000}; #endif #if defined(DEC_DPD2BINM) && DEC_DPD2BINM==1 && !defined(DECDPD2BINM) #define DECDPD2BINM const uint32_t DPD2BINM[1024]={0, 1000000, 2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000, 80000000, 81000000, 800000000, 801000000, 880000000, 881000000, 10000000, 11000000, 12000000, 13000000, 14000000, 15000000, 16000000, 17000000, 18000000, 19000000, 90000000, 91000000, 810000000, 811000000, 890000000, 891000000, 20000000, 21000000, 22000000, 23000000, 24000000, 25000000, 26000000, 27000000, 28000000, 29000000, 82000000, 83000000, 820000000, 821000000, 808000000, 809000000, 30000000, 31000000, 32000000, 33000000, 34000000, 35000000, 36000000, 37000000, 38000000, 39000000, 92000000, 93000000, 830000000, 831000000, 818000000, 819000000, 40000000, 41000000, 42000000, 43000000, 44000000, 45000000, 46000000, 47000000, 48000000, 49000000, 84000000, 85000000, 840000000, 841000000, 88000000, 89000000, 50000000, 51000000, 52000000, 53000000, 54000000, 55000000, 56000000, 57000000, 58000000, 59000000, 94000000, 95000000, 850000000, 851000000, 98000000, 99000000, 60000000, 61000000, 62000000, 63000000, 64000000, 65000000, 66000000, 67000000, 68000000, 69000000, 86000000, 87000000, 860000000, 861000000, 888000000, 889000000, 70000000, 71000000, 72000000, 73000000, 74000000, 75000000, 76000000, 77000000, 78000000, 79000000, 96000000, 97000000, 870000000, 871000000, 898000000, 899000000, 100000000, 101000000, 102000000, 103000000, 104000000, 105000000, 106000000, 107000000, 108000000, 109000000, 180000000, 181000000, 900000000, 901000000, 980000000, 981000000, 110000000, 111000000, 112000000, 113000000, 114000000, 115000000, 116000000, 117000000, 118000000, 119000000, 190000000, 191000000, 910000000, 911000000, 990000000, 991000000, 120000000, 121000000, 122000000, 123000000, 124000000, 125000000, 126000000, 127000000, 128000000, 129000000, 182000000, 183000000, 920000000, 921000000, 908000000, 909000000, 130000000, 131000000, 132000000, 133000000, 134000000, 135000000, 136000000, 137000000, 138000000, 139000000, 192000000, 193000000, 930000000, 931000000, 918000000, 919000000, 140000000, 141000000, 142000000, 143000000, 144000000, 145000000, 146000000, 147000000, 148000000, 149000000, 184000000, 185000000, 940000000, 941000000, 188000000, 189000000, 150000000, 151000000, 152000000, 153000000, 154000000, 155000000, 156000000, 157000000, 158000000, 159000000, 194000000, 195000000, 950000000, 951000000, 198000000, 199000000, 160000000, 161000000, 162000000, 163000000, 164000000, 165000000, 166000000, 167000000, 168000000, 169000000, 186000000, 187000000, 960000000, 961000000, 988000000, 989000000, 170000000, 171000000, 172000000, 173000000, 174000000, 175000000, 176000000, 177000000, 178000000, 179000000, 196000000, 197000000, 970000000, 971000000, 998000000, 999000000, 200000000, 201000000, 202000000, 203000000, 204000000, 205000000, 206000000, 207000000, 208000000, 209000000, 280000000, 281000000, 802000000, 803000000, 882000000, 883000000, 210000000, 211000000, 212000000, 213000000, 214000000, 215000000, 216000000, 217000000, 218000000, 219000000, 290000000, 291000000, 812000000, 813000000, 892000000, 893000000, 220000000, 221000000, 222000000, 223000000, 224000000, 225000000, 226000000, 227000000, 228000000, 229000000, 282000000, 283000000, 822000000, 823000000, 828000000, 829000000, 230000000, 231000000, 232000000, 233000000, 234000000, 235000000, 236000000, 237000000, 238000000, 239000000, 292000000, 293000000, 832000000, 833000000, 838000000, 839000000, 240000000, 241000000, 242000000, 243000000, 244000000, 245000000, 246000000, 247000000, 248000000, 249000000, 284000000, 285000000, 842000000, 843000000, 288000000, 289000000, 250000000, 251000000, 252000000, 253000000, 254000000, 255000000, 256000000, 257000000, 258000000, 259000000, 294000000, 295000000, 852000000, 853000000, 298000000, 299000000, 260000000, 261000000, 262000000, 263000000, 264000000, 265000000, 266000000, 267000000, 268000000, 269000000, 286000000, 287000000, 862000000, 863000000, 888000000, 889000000, 270000000, 271000000, 272000000, 273000000, 274000000, 275000000, 276000000, 277000000, 278000000, 279000000, 296000000, 297000000, 872000000, 873000000, 898000000, 899000000, 300000000, 301000000, 302000000, 303000000, 304000000, 305000000, 306000000, 307000000, 308000000, 309000000, 380000000, 381000000, 902000000, 903000000, 982000000, 983000000, 310000000, 311000000, 312000000, 313000000, 314000000, 315000000, 316000000, 317000000, 318000000, 319000000, 390000000, 391000000, 912000000, 913000000, 992000000, 993000000, 320000000, 321000000, 322000000, 323000000, 324000000, 325000000, 326000000, 327000000, 328000000, 329000000, 382000000, 383000000, 922000000, 923000000, 928000000, 929000000, 330000000, 331000000, 332000000, 333000000, 334000000, 335000000, 336000000, 337000000, 338000000, 339000000, 392000000, 393000000, 932000000, 933000000, 938000000, 939000000, 340000000, 341000000, 342000000, 343000000, 344000000, 345000000, 346000000, 347000000, 348000000, 349000000, 384000000, 385000000, 942000000, 943000000, 388000000, 389000000, 350000000, 351000000, 352000000, 353000000, 354000000, 355000000, 356000000, 357000000, 358000000, 359000000, 394000000, 395000000, 952000000, 953000000, 398000000, 399000000, 360000000, 361000000, 362000000, 363000000, 364000000, 365000000, 366000000, 367000000, 368000000, 369000000, 386000000, 387000000, 962000000, 963000000, 988000000, 989000000, 370000000, 371000000, 372000000, 373000000, 374000000, 375000000, 376000000, 377000000, 378000000, 379000000, 396000000, 397000000, 972000000, 973000000, 998000000, 999000000, 400000000, 401000000, 402000000, 403000000, 404000000, 405000000, 406000000, 407000000, 408000000, 409000000, 480000000, 481000000, 804000000, 805000000, 884000000, 885000000, 410000000, 411000000, 412000000, 413000000, 414000000, 415000000, 416000000, 417000000, 418000000, 419000000, 490000000, 491000000, 814000000, 815000000, 894000000, 895000000, 420000000, 421000000, 422000000, 423000000, 424000000, 425000000, 426000000, 427000000, 428000000, 429000000, 482000000, 483000000, 824000000, 825000000, 848000000, 849000000, 430000000, 431000000, 432000000, 433000000, 434000000, 435000000, 436000000, 437000000, 438000000, 439000000, 492000000, 493000000, 834000000, 835000000, 858000000, 859000000, 440000000, 441000000, 442000000, 443000000, 444000000, 445000000, 446000000, 447000000, 448000000, 449000000, 484000000, 485000000, 844000000, 845000000, 488000000, 489000000, 450000000, 451000000, 452000000, 453000000, 454000000, 455000000, 456000000, 457000000, 458000000, 459000000, 494000000, 495000000, 854000000, 855000000, 498000000, 499000000, 460000000, 461000000, 462000000, 463000000, 464000000, 465000000, 466000000, 467000000, 468000000, 469000000, 486000000, 487000000, 864000000, 865000000, 888000000, 889000000, 470000000, 471000000, 472000000, 473000000, 474000000, 475000000, 476000000, 477000000, 478000000, 479000000, 496000000, 497000000, 874000000, 875000000, 898000000, 899000000, 500000000, 501000000, 502000000, 503000000, 504000000, 505000000, 506000000, 507000000, 508000000, 509000000, 580000000, 581000000, 904000000, 905000000, 984000000, 985000000, 510000000, 511000000, 512000000, 513000000, 514000000, 515000000, 516000000, 517000000, 518000000, 519000000, 590000000, 591000000, 914000000, 915000000, 994000000, 995000000, 520000000, 521000000, 522000000, 523000000, 524000000, 525000000, 526000000, 527000000, 528000000, 529000000, 582000000, 583000000, 924000000, 925000000, 948000000, 949000000, 530000000, 531000000, 532000000, 533000000, 534000000, 535000000, 536000000, 537000000, 538000000, 539000000, 592000000, 593000000, 934000000, 935000000, 958000000, 959000000, 540000000, 541000000, 542000000, 543000000, 544000000, 545000000, 546000000, 547000000, 548000000, 549000000, 584000000, 585000000, 944000000, 945000000, 588000000, 589000000, 550000000, 551000000, 552000000, 553000000, 554000000, 555000000, 556000000, 557000000, 558000000, 559000000, 594000000, 595000000, 954000000, 955000000, 598000000, 599000000, 560000000, 561000000, 562000000, 563000000, 564000000, 565000000, 566000000, 567000000, 568000000, 569000000, 586000000, 587000000, 964000000, 965000000, 988000000, 989000000, 570000000, 571000000, 572000000, 573000000, 574000000, 575000000, 576000000, 577000000, 578000000, 579000000, 596000000, 597000000, 974000000, 975000000, 998000000, 999000000, 600000000, 601000000, 602000000, 603000000, 604000000, 605000000, 606000000, 607000000, 608000000, 609000000, 680000000, 681000000, 806000000, 807000000, 886000000, 887000000, 610000000, 611000000, 612000000, 613000000, 614000000, 615000000, 616000000, 617000000, 618000000, 619000000, 690000000, 691000000, 816000000, 817000000, 896000000, 897000000, 620000000, 621000000, 622000000, 623000000, 624000000, 625000000, 626000000, 627000000, 628000000, 629000000, 682000000, 683000000, 826000000, 827000000, 868000000, 869000000, 630000000, 631000000, 632000000, 633000000, 634000000, 635000000, 636000000, 637000000, 638000000, 639000000, 692000000, 693000000, 836000000, 837000000, 878000000, 879000000, 640000000, 641000000, 642000000, 643000000, 644000000, 645000000, 646000000, 647000000, 648000000, 649000000, 684000000, 685000000, 846000000, 847000000, 688000000, 689000000, 650000000, 651000000, 652000000, 653000000, 654000000, 655000000, 656000000, 657000000, 658000000, 659000000, 694000000, 695000000, 856000000, 857000000, 698000000, 699000000, 660000000, 661000000, 662000000, 663000000, 664000000, 665000000, 666000000, 667000000, 668000000, 669000000, 686000000, 687000000, 866000000, 867000000, 888000000, 889000000, 670000000, 671000000, 672000000, 673000000, 674000000, 675000000, 676000000, 677000000, 678000000, 679000000, 696000000, 697000000, 876000000, 877000000, 898000000, 899000000, 700000000, 701000000, 702000000, 703000000, 704000000, 705000000, 706000000, 707000000, 708000000, 709000000, 780000000, 781000000, 906000000, 907000000, 986000000, 987000000, 710000000, 711000000, 712000000, 713000000, 714000000, 715000000, 716000000, 717000000, 718000000, 719000000, 790000000, 791000000, 916000000, 917000000, 996000000, 997000000, 720000000, 721000000, 722000000, 723000000, 724000000, 725000000, 726000000, 727000000, 728000000, 729000000, 782000000, 783000000, 926000000, 927000000, 968000000, 969000000, 730000000, 731000000, 732000000, 733000000, 734000000, 735000000, 736000000, 737000000, 738000000, 739000000, 792000000, 793000000, 936000000, 937000000, 978000000, 979000000, 740000000, 741000000, 742000000, 743000000, 744000000, 745000000, 746000000, 747000000, 748000000, 749000000, 784000000, 785000000, 946000000, 947000000, 788000000, 789000000, 750000000, 751000000, 752000000, 753000000, 754000000, 755000000, 756000000, 757000000, 758000000, 759000000, 794000000, 795000000, 956000000, 957000000, 798000000, 799000000, 760000000, 761000000, 762000000, 763000000, 764000000, 765000000, 766000000, 767000000, 768000000, 769000000, 786000000, 787000000, 966000000, 967000000, 988000000, 989000000, 770000000, 771000000, 772000000, 773000000, 774000000, 775000000, 776000000, 777000000, 778000000, 779000000, 796000000, 797000000, 976000000, 977000000, 998000000, 999000000}; #endif #if defined(DEC_BIN2CHAR) && DEC_BIN2CHAR==1 && !defined(DECBIN2CHAR) #define DECBIN2CHAR const uint8_t BIN2CHAR[4001]={ '\0','0','0','0', '\1','0','0','1', '\1','0','0','2', '\1','0','0','3', '\1','0','0','4', '\1','0','0','5', '\1','0','0','6', '\1','0','0','7', '\1','0','0','8', '\1','0','0','9', '\2','0','1','0', '\2','0','1','1', '\2','0','1','2', '\2','0','1','3', '\2','0','1','4', '\2','0','1','5', '\2','0','1','6', '\2','0','1','7', '\2','0','1','8', '\2','0','1','9', '\2','0','2','0', '\2','0','2','1', '\2','0','2','2', '\2','0','2','3', '\2','0','2','4', '\2','0','2','5', '\2','0','2','6', '\2','0','2','7', '\2','0','2','8', '\2','0','2','9', '\2','0','3','0', '\2','0','3','1', '\2','0','3','2', '\2','0','3','3', '\2','0','3','4', '\2','0','3','5', '\2','0','3','6', '\2','0','3','7', '\2','0','3','8', '\2','0','3','9', '\2','0','4','0', '\2','0','4','1', '\2','0','4','2', '\2','0','4','3', '\2','0','4','4', '\2','0','4','5', '\2','0','4','6', '\2','0','4','7', '\2','0','4','8', '\2','0','4','9', '\2','0','5','0', '\2','0','5','1', '\2','0','5','2', '\2','0','5','3', '\2','0','5','4', '\2','0','5','5', '\2','0','5','6', '\2','0','5','7', '\2','0','5','8', '\2','0','5','9', '\2','0','6','0', '\2','0','6','1', '\2','0','6','2', '\2','0','6','3', '\2','0','6','4', '\2','0','6','5', '\2','0','6','6', '\2','0','6','7', '\2','0','6','8', '\2','0','6','9', '\2','0','7','0', '\2','0','7','1', '\2','0','7','2', '\2','0','7','3', '\2','0','7','4', '\2','0','7','5', '\2','0','7','6', '\2','0','7','7', '\2','0','7','8', '\2','0','7','9', '\2','0','8','0', '\2','0','8','1', '\2','0','8','2', '\2','0','8','3', '\2','0','8','4', '\2','0','8','5', '\2','0','8','6', '\2','0','8','7', '\2','0','8','8', '\2','0','8','9', '\2','0','9','0', '\2','0','9','1', '\2','0','9','2', '\2','0','9','3', '\2','0','9','4', '\2','0','9','5', '\2','0','9','6', '\2','0','9','7', '\2','0','9','8', '\2','0','9','9', '\3','1','0','0', '\3','1','0','1', '\3','1','0','2', '\3','1','0','3', '\3','1','0','4', '\3','1','0','5', '\3','1','0','6', '\3','1','0','7', '\3','1','0','8', '\3','1','0','9', '\3','1','1','0', '\3','1','1','1', '\3','1','1','2', '\3','1','1','3', '\3','1','1','4', '\3','1','1','5', '\3','1','1','6', '\3','1','1','7', '\3','1','1','8', '\3','1','1','9', '\3','1','2','0', '\3','1','2','1', '\3','1','2','2', '\3','1','2','3', '\3','1','2','4', '\3','1','2','5', '\3','1','2','6', '\3','1','2','7', '\3','1','2','8', '\3','1','2','9', '\3','1','3','0', '\3','1','3','1', '\3','1','3','2', '\3','1','3','3', '\3','1','3','4', '\3','1','3','5', '\3','1','3','6', '\3','1','3','7', '\3','1','3','8', '\3','1','3','9', '\3','1','4','0', '\3','1','4','1', '\3','1','4','2', '\3','1','4','3', '\3','1','4','4', '\3','1','4','5', '\3','1','4','6', '\3','1','4','7', '\3','1','4','8', '\3','1','4','9', '\3','1','5','0', '\3','1','5','1', '\3','1','5','2', '\3','1','5','3', '\3','1','5','4', '\3','1','5','5', '\3','1','5','6', '\3','1','5','7', '\3','1','5','8', '\3','1','5','9', '\3','1','6','0', '\3','1','6','1', '\3','1','6','2', '\3','1','6','3', '\3','1','6','4', '\3','1','6','5', '\3','1','6','6', '\3','1','6','7', '\3','1','6','8', '\3','1','6','9', '\3','1','7','0', '\3','1','7','1', '\3','1','7','2', '\3','1','7','3', '\3','1','7','4', '\3','1','7','5', '\3','1','7','6', '\3','1','7','7', '\3','1','7','8', '\3','1','7','9', '\3','1','8','0', '\3','1','8','1', '\3','1','8','2', '\3','1','8','3', '\3','1','8','4', '\3','1','8','5', '\3','1','8','6', '\3','1','8','7', '\3','1','8','8', '\3','1','8','9', '\3','1','9','0', '\3','1','9','1', '\3','1','9','2', '\3','1','9','3', '\3','1','9','4', '\3','1','9','5', '\3','1','9','6', '\3','1','9','7', '\3','1','9','8', '\3','1','9','9', '\3','2','0','0', '\3','2','0','1', '\3','2','0','2', '\3','2','0','3', '\3','2','0','4', '\3','2','0','5', '\3','2','0','6', '\3','2','0','7', '\3','2','0','8', '\3','2','0','9', '\3','2','1','0', '\3','2','1','1', '\3','2','1','2', '\3','2','1','3', '\3','2','1','4', '\3','2','1','5', '\3','2','1','6', '\3','2','1','7', '\3','2','1','8', '\3','2','1','9', '\3','2','2','0', '\3','2','2','1', '\3','2','2','2', '\3','2','2','3', '\3','2','2','4', '\3','2','2','5', '\3','2','2','6', '\3','2','2','7', '\3','2','2','8', '\3','2','2','9', '\3','2','3','0', '\3','2','3','1', '\3','2','3','2', '\3','2','3','3', '\3','2','3','4', '\3','2','3','5', '\3','2','3','6', '\3','2','3','7', '\3','2','3','8', '\3','2','3','9', '\3','2','4','0', '\3','2','4','1', '\3','2','4','2', '\3','2','4','3', '\3','2','4','4', '\3','2','4','5', '\3','2','4','6', '\3','2','4','7', '\3','2','4','8', '\3','2','4','9', '\3','2','5','0', '\3','2','5','1', '\3','2','5','2', '\3','2','5','3', '\3','2','5','4', '\3','2','5','5', '\3','2','5','6', '\3','2','5','7', '\3','2','5','8', '\3','2','5','9', '\3','2','6','0', '\3','2','6','1', '\3','2','6','2', '\3','2','6','3', '\3','2','6','4', '\3','2','6','5', '\3','2','6','6', '\3','2','6','7', '\3','2','6','8', '\3','2','6','9', '\3','2','7','0', '\3','2','7','1', '\3','2','7','2', '\3','2','7','3', '\3','2','7','4', '\3','2','7','5', '\3','2','7','6', '\3','2','7','7', '\3','2','7','8', '\3','2','7','9', '\3','2','8','0', '\3','2','8','1', '\3','2','8','2', '\3','2','8','3', '\3','2','8','4', '\3','2','8','5', '\3','2','8','6', '\3','2','8','7', '\3','2','8','8', '\3','2','8','9', '\3','2','9','0', '\3','2','9','1', '\3','2','9','2', '\3','2','9','3', '\3','2','9','4', '\3','2','9','5', '\3','2','9','6', '\3','2','9','7', '\3','2','9','8', '\3','2','9','9', '\3','3','0','0', '\3','3','0','1', '\3','3','0','2', '\3','3','0','3', '\3','3','0','4', '\3','3','0','5', '\3','3','0','6', '\3','3','0','7', '\3','3','0','8', '\3','3','0','9', '\3','3','1','0', '\3','3','1','1', '\3','3','1','2', '\3','3','1','3', '\3','3','1','4', '\3','3','1','5', '\3','3','1','6', '\3','3','1','7', '\3','3','1','8', '\3','3','1','9', '\3','3','2','0', '\3','3','2','1', '\3','3','2','2', '\3','3','2','3', '\3','3','2','4', '\3','3','2','5', '\3','3','2','6', '\3','3','2','7', '\3','3','2','8', '\3','3','2','9', '\3','3','3','0', '\3','3','3','1', '\3','3','3','2', '\3','3','3','3', '\3','3','3','4', '\3','3','3','5', '\3','3','3','6', '\3','3','3','7', '\3','3','3','8', '\3','3','3','9', '\3','3','4','0', '\3','3','4','1', '\3','3','4','2', '\3','3','4','3', '\3','3','4','4', '\3','3','4','5', '\3','3','4','6', '\3','3','4','7', '\3','3','4','8', '\3','3','4','9', '\3','3','5','0', '\3','3','5','1', '\3','3','5','2', '\3','3','5','3', '\3','3','5','4', '\3','3','5','5', '\3','3','5','6', '\3','3','5','7', '\3','3','5','8', '\3','3','5','9', '\3','3','6','0', '\3','3','6','1', '\3','3','6','2', '\3','3','6','3', '\3','3','6','4', '\3','3','6','5', '\3','3','6','6', '\3','3','6','7', '\3','3','6','8', '\3','3','6','9', '\3','3','7','0', '\3','3','7','1', '\3','3','7','2', '\3','3','7','3', '\3','3','7','4', '\3','3','7','5', '\3','3','7','6', '\3','3','7','7', '\3','3','7','8', '\3','3','7','9', '\3','3','8','0', '\3','3','8','1', '\3','3','8','2', '\3','3','8','3', '\3','3','8','4', '\3','3','8','5', '\3','3','8','6', '\3','3','8','7', '\3','3','8','8', '\3','3','8','9', '\3','3','9','0', '\3','3','9','1', '\3','3','9','2', '\3','3','9','3', '\3','3','9','4', '\3','3','9','5', '\3','3','9','6', '\3','3','9','7', '\3','3','9','8', '\3','3','9','9', '\3','4','0','0', '\3','4','0','1', '\3','4','0','2', '\3','4','0','3', '\3','4','0','4', '\3','4','0','5', '\3','4','0','6', '\3','4','0','7', '\3','4','0','8', '\3','4','0','9', '\3','4','1','0', '\3','4','1','1', '\3','4','1','2', '\3','4','1','3', '\3','4','1','4', '\3','4','1','5', '\3','4','1','6', '\3','4','1','7', '\3','4','1','8', '\3','4','1','9', '\3','4','2','0', '\3','4','2','1', '\3','4','2','2', '\3','4','2','3', '\3','4','2','4', '\3','4','2','5', '\3','4','2','6', '\3','4','2','7', '\3','4','2','8', '\3','4','2','9', '\3','4','3','0', '\3','4','3','1', '\3','4','3','2', '\3','4','3','3', '\3','4','3','4', '\3','4','3','5', '\3','4','3','6', '\3','4','3','7', '\3','4','3','8', '\3','4','3','9', '\3','4','4','0', '\3','4','4','1', '\3','4','4','2', '\3','4','4','3', '\3','4','4','4', '\3','4','4','5', '\3','4','4','6', '\3','4','4','7', '\3','4','4','8', '\3','4','4','9', '\3','4','5','0', '\3','4','5','1', '\3','4','5','2', '\3','4','5','3', '\3','4','5','4', '\3','4','5','5', '\3','4','5','6', '\3','4','5','7', '\3','4','5','8', '\3','4','5','9', '\3','4','6','0', '\3','4','6','1', '\3','4','6','2', '\3','4','6','3', '\3','4','6','4', '\3','4','6','5', '\3','4','6','6', '\3','4','6','7', '\3','4','6','8', '\3','4','6','9', '\3','4','7','0', '\3','4','7','1', '\3','4','7','2', '\3','4','7','3', '\3','4','7','4', '\3','4','7','5', '\3','4','7','6', '\3','4','7','7', '\3','4','7','8', '\3','4','7','9', '\3','4','8','0', '\3','4','8','1', '\3','4','8','2', '\3','4','8','3', '\3','4','8','4', '\3','4','8','5', '\3','4','8','6', '\3','4','8','7', '\3','4','8','8', '\3','4','8','9', '\3','4','9','0', '\3','4','9','1', '\3','4','9','2', '\3','4','9','3', '\3','4','9','4', '\3','4','9','5', '\3','4','9','6', '\3','4','9','7', '\3','4','9','8', '\3','4','9','9', '\3','5','0','0', '\3','5','0','1', '\3','5','0','2', '\3','5','0','3', '\3','5','0','4', '\3','5','0','5', '\3','5','0','6', '\3','5','0','7', '\3','5','0','8', '\3','5','0','9', '\3','5','1','0', '\3','5','1','1', '\3','5','1','2', '\3','5','1','3', '\3','5','1','4', '\3','5','1','5', '\3','5','1','6', '\3','5','1','7', '\3','5','1','8', '\3','5','1','9', '\3','5','2','0', '\3','5','2','1', '\3','5','2','2', '\3','5','2','3', '\3','5','2','4', '\3','5','2','5', '\3','5','2','6', '\3','5','2','7', '\3','5','2','8', '\3','5','2','9', '\3','5','3','0', '\3','5','3','1', '\3','5','3','2', '\3','5','3','3', '\3','5','3','4', '\3','5','3','5', '\3','5','3','6', '\3','5','3','7', '\3','5','3','8', '\3','5','3','9', '\3','5','4','0', '\3','5','4','1', '\3','5','4','2', '\3','5','4','3', '\3','5','4','4', '\3','5','4','5', '\3','5','4','6', '\3','5','4','7', '\3','5','4','8', '\3','5','4','9', '\3','5','5','0', '\3','5','5','1', '\3','5','5','2', '\3','5','5','3', '\3','5','5','4', '\3','5','5','5', '\3','5','5','6', '\3','5','5','7', '\3','5','5','8', '\3','5','5','9', '\3','5','6','0', '\3','5','6','1', '\3','5','6','2', '\3','5','6','3', '\3','5','6','4', '\3','5','6','5', '\3','5','6','6', '\3','5','6','7', '\3','5','6','8', '\3','5','6','9', '\3','5','7','0', '\3','5','7','1', '\3','5','7','2', '\3','5','7','3', '\3','5','7','4', '\3','5','7','5', '\3','5','7','6', '\3','5','7','7', '\3','5','7','8', '\3','5','7','9', '\3','5','8','0', '\3','5','8','1', '\3','5','8','2', '\3','5','8','3', '\3','5','8','4', '\3','5','8','5', '\3','5','8','6', '\3','5','8','7', '\3','5','8','8', '\3','5','8','9', '\3','5','9','0', '\3','5','9','1', '\3','5','9','2', '\3','5','9','3', '\3','5','9','4', '\3','5','9','5', '\3','5','9','6', '\3','5','9','7', '\3','5','9','8', '\3','5','9','9', '\3','6','0','0', '\3','6','0','1', '\3','6','0','2', '\3','6','0','3', '\3','6','0','4', '\3','6','0','5', '\3','6','0','6', '\3','6','0','7', '\3','6','0','8', '\3','6','0','9', '\3','6','1','0', '\3','6','1','1', '\3','6','1','2', '\3','6','1','3', '\3','6','1','4', '\3','6','1','5', '\3','6','1','6', '\3','6','1','7', '\3','6','1','8', '\3','6','1','9', '\3','6','2','0', '\3','6','2','1', '\3','6','2','2', '\3','6','2','3', '\3','6','2','4', '\3','6','2','5', '\3','6','2','6', '\3','6','2','7', '\3','6','2','8', '\3','6','2','9', '\3','6','3','0', '\3','6','3','1', '\3','6','3','2', '\3','6','3','3', '\3','6','3','4', '\3','6','3','5', '\3','6','3','6', '\3','6','3','7', '\3','6','3','8', '\3','6','3','9', '\3','6','4','0', '\3','6','4','1', '\3','6','4','2', '\3','6','4','3', '\3','6','4','4', '\3','6','4','5', '\3','6','4','6', '\3','6','4','7', '\3','6','4','8', '\3','6','4','9', '\3','6','5','0', '\3','6','5','1', '\3','6','5','2', '\3','6','5','3', '\3','6','5','4', '\3','6','5','5', '\3','6','5','6', '\3','6','5','7', '\3','6','5','8', '\3','6','5','9', '\3','6','6','0', '\3','6','6','1', '\3','6','6','2', '\3','6','6','3', '\3','6','6','4', '\3','6','6','5', '\3','6','6','6', '\3','6','6','7', '\3','6','6','8', '\3','6','6','9', '\3','6','7','0', '\3','6','7','1', '\3','6','7','2', '\3','6','7','3', '\3','6','7','4', '\3','6','7','5', '\3','6','7','6', '\3','6','7','7', '\3','6','7','8', '\3','6','7','9', '\3','6','8','0', '\3','6','8','1', '\3','6','8','2', '\3','6','8','3', '\3','6','8','4', '\3','6','8','5', '\3','6','8','6', '\3','6','8','7', '\3','6','8','8', '\3','6','8','9', '\3','6','9','0', '\3','6','9','1', '\3','6','9','2', '\3','6','9','3', '\3','6','9','4', '\3','6','9','5', '\3','6','9','6', '\3','6','9','7', '\3','6','9','8', '\3','6','9','9', '\3','7','0','0', '\3','7','0','1', '\3','7','0','2', '\3','7','0','3', '\3','7','0','4', '\3','7','0','5', '\3','7','0','6', '\3','7','0','7', '\3','7','0','8', '\3','7','0','9', '\3','7','1','0', '\3','7','1','1', '\3','7','1','2', '\3','7','1','3', '\3','7','1','4', '\3','7','1','5', '\3','7','1','6', '\3','7','1','7', '\3','7','1','8', '\3','7','1','9', '\3','7','2','0', '\3','7','2','1', '\3','7','2','2', '\3','7','2','3', '\3','7','2','4', '\3','7','2','5', '\3','7','2','6', '\3','7','2','7', '\3','7','2','8', '\3','7','2','9', '\3','7','3','0', '\3','7','3','1', '\3','7','3','2', '\3','7','3','3', '\3','7','3','4', '\3','7','3','5', '\3','7','3','6', '\3','7','3','7', '\3','7','3','8', '\3','7','3','9', '\3','7','4','0', '\3','7','4','1', '\3','7','4','2', '\3','7','4','3', '\3','7','4','4', '\3','7','4','5', '\3','7','4','6', '\3','7','4','7', '\3','7','4','8', '\3','7','4','9', '\3','7','5','0', '\3','7','5','1', '\3','7','5','2', '\3','7','5','3', '\3','7','5','4', '\3','7','5','5', '\3','7','5','6', '\3','7','5','7', '\3','7','5','8', '\3','7','5','9', '\3','7','6','0', '\3','7','6','1', '\3','7','6','2', '\3','7','6','3', '\3','7','6','4', '\3','7','6','5', '\3','7','6','6', '\3','7','6','7', '\3','7','6','8', '\3','7','6','9', '\3','7','7','0', '\3','7','7','1', '\3','7','7','2', '\3','7','7','3', '\3','7','7','4', '\3','7','7','5', '\3','7','7','6', '\3','7','7','7', '\3','7','7','8', '\3','7','7','9', '\3','7','8','0', '\3','7','8','1', '\3','7','8','2', '\3','7','8','3', '\3','7','8','4', '\3','7','8','5', '\3','7','8','6', '\3','7','8','7', '\3','7','8','8', '\3','7','8','9', '\3','7','9','0', '\3','7','9','1', '\3','7','9','2', '\3','7','9','3', '\3','7','9','4', '\3','7','9','5', '\3','7','9','6', '\3','7','9','7', '\3','7','9','8', '\3','7','9','9', '\3','8','0','0', '\3','8','0','1', '\3','8','0','2', '\3','8','0','3', '\3','8','0','4', '\3','8','0','5', '\3','8','0','6', '\3','8','0','7', '\3','8','0','8', '\3','8','0','9', '\3','8','1','0', '\3','8','1','1', '\3','8','1','2', '\3','8','1','3', '\3','8','1','4', '\3','8','1','5', '\3','8','1','6', '\3','8','1','7', '\3','8','1','8', '\3','8','1','9', '\3','8','2','0', '\3','8','2','1', '\3','8','2','2', '\3','8','2','3', '\3','8','2','4', '\3','8','2','5', '\3','8','2','6', '\3','8','2','7', '\3','8','2','8', '\3','8','2','9', '\3','8','3','0', '\3','8','3','1', '\3','8','3','2', '\3','8','3','3', '\3','8','3','4', '\3','8','3','5', '\3','8','3','6', '\3','8','3','7', '\3','8','3','8', '\3','8','3','9', '\3','8','4','0', '\3','8','4','1', '\3','8','4','2', '\3','8','4','3', '\3','8','4','4', '\3','8','4','5', '\3','8','4','6', '\3','8','4','7', '\3','8','4','8', '\3','8','4','9', '\3','8','5','0', '\3','8','5','1', '\3','8','5','2', '\3','8','5','3', '\3','8','5','4', '\3','8','5','5', '\3','8','5','6', '\3','8','5','7', '\3','8','5','8', '\3','8','5','9', '\3','8','6','0', '\3','8','6','1', '\3','8','6','2', '\3','8','6','3', '\3','8','6','4', '\3','8','6','5', '\3','8','6','6', '\3','8','6','7', '\3','8','6','8', '\3','8','6','9', '\3','8','7','0', '\3','8','7','1', '\3','8','7','2', '\3','8','7','3', '\3','8','7','4', '\3','8','7','5', '\3','8','7','6', '\3','8','7','7', '\3','8','7','8', '\3','8','7','9', '\3','8','8','0', '\3','8','8','1', '\3','8','8','2', '\3','8','8','3', '\3','8','8','4', '\3','8','8','5', '\3','8','8','6', '\3','8','8','7', '\3','8','8','8', '\3','8','8','9', '\3','8','9','0', '\3','8','9','1', '\3','8','9','2', '\3','8','9','3', '\3','8','9','4', '\3','8','9','5', '\3','8','9','6', '\3','8','9','7', '\3','8','9','8', '\3','8','9','9', '\3','9','0','0', '\3','9','0','1', '\3','9','0','2', '\3','9','0','3', '\3','9','0','4', '\3','9','0','5', '\3','9','0','6', '\3','9','0','7', '\3','9','0','8', '\3','9','0','9', '\3','9','1','0', '\3','9','1','1', '\3','9','1','2', '\3','9','1','3', '\3','9','1','4', '\3','9','1','5', '\3','9','1','6', '\3','9','1','7', '\3','9','1','8', '\3','9','1','9', '\3','9','2','0', '\3','9','2','1', '\3','9','2','2', '\3','9','2','3', '\3','9','2','4', '\3','9','2','5', '\3','9','2','6', '\3','9','2','7', '\3','9','2','8', '\3','9','2','9', '\3','9','3','0', '\3','9','3','1', '\3','9','3','2', '\3','9','3','3', '\3','9','3','4', '\3','9','3','5', '\3','9','3','6', '\3','9','3','7', '\3','9','3','8', '\3','9','3','9', '\3','9','4','0', '\3','9','4','1', '\3','9','4','2', '\3','9','4','3', '\3','9','4','4', '\3','9','4','5', '\3','9','4','6', '\3','9','4','7', '\3','9','4','8', '\3','9','4','9', '\3','9','5','0', '\3','9','5','1', '\3','9','5','2', '\3','9','5','3', '\3','9','5','4', '\3','9','5','5', '\3','9','5','6', '\3','9','5','7', '\3','9','5','8', '\3','9','5','9', '\3','9','6','0', '\3','9','6','1', '\3','9','6','2', '\3','9','6','3', '\3','9','6','4', '\3','9','6','5', '\3','9','6','6', '\3','9','6','7', '\3','9','6','8', '\3','9','6','9', '\3','9','7','0', '\3','9','7','1', '\3','9','7','2', '\3','9','7','3', '\3','9','7','4', '\3','9','7','5', '\3','9','7','6', '\3','9','7','7', '\3','9','7','8', '\3','9','7','9', '\3','9','8','0', '\3','9','8','1', '\3','9','8','2', '\3','9','8','3', '\3','9','8','4', '\3','9','8','5', '\3','9','8','6', '\3','9','8','7', '\3','9','8','8', '\3','9','8','9', '\3','9','9','0', '\3','9','9','1', '\3','9','9','2', '\3','9','9','3', '\3','9','9','4', '\3','9','9','5', '\3','9','9','6', '\3','9','9','7', '\3','9','9','8', '\3','9','9','9', '\0'}; #endif #if defined(DEC_DPD2BCD8) && DEC_DPD2BCD8==1 && !defined(DECDPD2BCD8) #define DECDPD2BCD8 const uint8_t DPD2BCD8[4096]={ 0,0,0,0, 0,0,1,1, 0,0,2,1, 0,0,3,1, 0,0,4,1, 0,0,5,1, 0,0,6,1, 0,0,7,1, 0,0,8,1, 0,0,9,1, 0,8,0,2, 0,8,1,2, 8,0,0,3, 8,0,1,3, 8,8,0,3, 8,8,1,3, 0,1,0,2, 0,1,1,2, 0,1,2,2, 0,1,3,2, 0,1,4,2, 0,1,5,2, 0,1,6,2, 0,1,7,2, 0,1,8,2, 0,1,9,2, 0,9,0,2, 0,9,1,2, 8,1,0,3, 8,1,1,3, 8,9,0,3, 8,9,1,3, 0,2,0,2, 0,2,1,2, 0,2,2,2, 0,2,3,2, 0,2,4,2, 0,2,5,2, 0,2,6,2, 0,2,7,2, 0,2,8,2, 0,2,9,2, 0,8,2,2, 0,8,3,2, 8,2,0,3, 8,2,1,3, 8,0,8,3, 8,0,9,3, 0,3,0,2, 0,3,1,2, 0,3,2,2, 0,3,3,2, 0,3,4,2, 0,3,5,2, 0,3,6,2, 0,3,7,2, 0,3,8,2, 0,3,9,2, 0,9,2,2, 0,9,3,2, 8,3,0,3, 8,3,1,3, 8,1,8,3, 8,1,9,3, 0,4,0,2, 0,4,1,2, 0,4,2,2, 0,4,3,2, 0,4,4,2, 0,4,5,2, 0,4,6,2, 0,4,7,2, 0,4,8,2, 0,4,9,2, 0,8,4,2, 0,8,5,2, 8,4,0,3, 8,4,1,3, 0,8,8,2, 0,8,9,2, 0,5,0,2, 0,5,1,2, 0,5,2,2, 0,5,3,2, 0,5,4,2, 0,5,5,2, 0,5,6,2, 0,5,7,2, 0,5,8,2, 0,5,9,2, 0,9,4,2, 0,9,5,2, 8,5,0,3, 8,5,1,3, 0,9,8,2, 0,9,9,2, 0,6,0,2, 0,6,1,2, 0,6,2,2, 0,6,3,2, 0,6,4,2, 0,6,5,2, 0,6,6,2, 0,6,7,2, 0,6,8,2, 0,6,9,2, 0,8,6,2, 0,8,7,2, 8,6,0,3, 8,6,1,3, 8,8,8,3, 8,8,9,3, 0,7,0,2, 0,7,1,2, 0,7,2,2, 0,7,3,2, 0,7,4,2, 0,7,5,2, 0,7,6,2, 0,7,7,2, 0,7,8,2, 0,7,9,2, 0,9,6,2, 0,9,7,2, 8,7,0,3, 8,7,1,3, 8,9,8,3, 8,9,9,3, 1,0,0,3, 1,0,1,3, 1,0,2,3, 1,0,3,3, 1,0,4,3, 1,0,5,3, 1,0,6,3, 1,0,7,3, 1,0,8,3, 1,0,9,3, 1,8,0,3, 1,8,1,3, 9,0,0,3, 9,0,1,3, 9,8,0,3, 9,8,1,3, 1,1,0,3, 1,1,1,3, 1,1,2,3, 1,1,3,3, 1,1,4,3, 1,1,5,3, 1,1,6,3, 1,1,7,3, 1,1,8,3, 1,1,9,3, 1,9,0,3, 1,9,1,3, 9,1,0,3, 9,1,1,3, 9,9,0,3, 9,9,1,3, 1,2,0,3, 1,2,1,3, 1,2,2,3, 1,2,3,3, 1,2,4,3, 1,2,5,3, 1,2,6,3, 1,2,7,3, 1,2,8,3, 1,2,9,3, 1,8,2,3, 1,8,3,3, 9,2,0,3, 9,2,1,3, 9,0,8,3, 9,0,9,3, 1,3,0,3, 1,3,1,3, 1,3,2,3, 1,3,3,3, 1,3,4,3, 1,3,5,3, 1,3,6,3, 1,3,7,3, 1,3,8,3, 1,3,9,3, 1,9,2,3, 1,9,3,3, 9,3,0,3, 9,3,1,3, 9,1,8,3, 9,1,9,3, 1,4,0,3, 1,4,1,3, 1,4,2,3, 1,4,3,3, 1,4,4,3, 1,4,5,3, 1,4,6,3, 1,4,7,3, 1,4,8,3, 1,4,9,3, 1,8,4,3, 1,8,5,3, 9,4,0,3, 9,4,1,3, 1,8,8,3, 1,8,9,3, 1,5,0,3, 1,5,1,3, 1,5,2,3, 1,5,3,3, 1,5,4,3, 1,5,5,3, 1,5,6,3, 1,5,7,3, 1,5,8,3, 1,5,9,3, 1,9,4,3, 1,9,5,3, 9,5,0,3, 9,5,1,3, 1,9,8,3, 1,9,9,3, 1,6,0,3, 1,6,1,3, 1,6,2,3, 1,6,3,3, 1,6,4,3, 1,6,5,3, 1,6,6,3, 1,6,7,3, 1,6,8,3, 1,6,9,3, 1,8,6,3, 1,8,7,3, 9,6,0,3, 9,6,1,3, 9,8,8,3, 9,8,9,3, 1,7,0,3, 1,7,1,3, 1,7,2,3, 1,7,3,3, 1,7,4,3, 1,7,5,3, 1,7,6,3, 1,7,7,3, 1,7,8,3, 1,7,9,3, 1,9,6,3, 1,9,7,3, 9,7,0,3, 9,7,1,3, 9,9,8,3, 9,9,9,3, 2,0,0,3, 2,0,1,3, 2,0,2,3, 2,0,3,3, 2,0,4,3, 2,0,5,3, 2,0,6,3, 2,0,7,3, 2,0,8,3, 2,0,9,3, 2,8,0,3, 2,8,1,3, 8,0,2,3, 8,0,3,3, 8,8,2,3, 8,8,3,3, 2,1,0,3, 2,1,1,3, 2,1,2,3, 2,1,3,3, 2,1,4,3, 2,1,5,3, 2,1,6,3, 2,1,7,3, 2,1,8,3, 2,1,9,3, 2,9,0,3, 2,9,1,3, 8,1,2,3, 8,1,3,3, 8,9,2,3, 8,9,3,3, 2,2,0,3, 2,2,1,3, 2,2,2,3, 2,2,3,3, 2,2,4,3, 2,2,5,3, 2,2,6,3, 2,2,7,3, 2,2,8,3, 2,2,9,3, 2,8,2,3, 2,8,3,3, 8,2,2,3, 8,2,3,3, 8,2,8,3, 8,2,9,3, 2,3,0,3, 2,3,1,3, 2,3,2,3, 2,3,3,3, 2,3,4,3, 2,3,5,3, 2,3,6,3, 2,3,7,3, 2,3,8,3, 2,3,9,3, 2,9,2,3, 2,9,3,3, 8,3,2,3, 8,3,3,3, 8,3,8,3, 8,3,9,3, 2,4,0,3, 2,4,1,3, 2,4,2,3, 2,4,3,3, 2,4,4,3, 2,4,5,3, 2,4,6,3, 2,4,7,3, 2,4,8,3, 2,4,9,3, 2,8,4,3, 2,8,5,3, 8,4,2,3, 8,4,3,3, 2,8,8,3, 2,8,9,3, 2,5,0,3, 2,5,1,3, 2,5,2,3, 2,5,3,3, 2,5,4,3, 2,5,5,3, 2,5,6,3, 2,5,7,3, 2,5,8,3, 2,5,9,3, 2,9,4,3, 2,9,5,3, 8,5,2,3, 8,5,3,3, 2,9,8,3, 2,9,9,3, 2,6,0,3, 2,6,1,3, 2,6,2,3, 2,6,3,3, 2,6,4,3, 2,6,5,3, 2,6,6,3, 2,6,7,3, 2,6,8,3, 2,6,9,3, 2,8,6,3, 2,8,7,3, 8,6,2,3, 8,6,3,3, 8,8,8,3, 8,8,9,3, 2,7,0,3, 2,7,1,3, 2,7,2,3, 2,7,3,3, 2,7,4,3, 2,7,5,3, 2,7,6,3, 2,7,7,3, 2,7,8,3, 2,7,9,3, 2,9,6,3, 2,9,7,3, 8,7,2,3, 8,7,3,3, 8,9,8,3, 8,9,9,3, 3,0,0,3, 3,0,1,3, 3,0,2,3, 3,0,3,3, 3,0,4,3, 3,0,5,3, 3,0,6,3, 3,0,7,3, 3,0,8,3, 3,0,9,3, 3,8,0,3, 3,8,1,3, 9,0,2,3, 9,0,3,3, 9,8,2,3, 9,8,3,3, 3,1,0,3, 3,1,1,3, 3,1,2,3, 3,1,3,3, 3,1,4,3, 3,1,5,3, 3,1,6,3, 3,1,7,3, 3,1,8,3, 3,1,9,3, 3,9,0,3, 3,9,1,3, 9,1,2,3, 9,1,3,3, 9,9,2,3, 9,9,3,3, 3,2,0,3, 3,2,1,3, 3,2,2,3, 3,2,3,3, 3,2,4,3, 3,2,5,3, 3,2,6,3, 3,2,7,3, 3,2,8,3, 3,2,9,3, 3,8,2,3, 3,8,3,3, 9,2,2,3, 9,2,3,3, 9,2,8,3, 9,2,9,3, 3,3,0,3, 3,3,1,3, 3,3,2,3, 3,3,3,3, 3,3,4,3, 3,3,5,3, 3,3,6,3, 3,3,7,3, 3,3,8,3, 3,3,9,3, 3,9,2,3, 3,9,3,3, 9,3,2,3, 9,3,3,3, 9,3,8,3, 9,3,9,3, 3,4,0,3, 3,4,1,3, 3,4,2,3, 3,4,3,3, 3,4,4,3, 3,4,5,3, 3,4,6,3, 3,4,7,3, 3,4,8,3, 3,4,9,3, 3,8,4,3, 3,8,5,3, 9,4,2,3, 9,4,3,3, 3,8,8,3, 3,8,9,3, 3,5,0,3, 3,5,1,3, 3,5,2,3, 3,5,3,3, 3,5,4,3, 3,5,5,3, 3,5,6,3, 3,5,7,3, 3,5,8,3, 3,5,9,3, 3,9,4,3, 3,9,5,3, 9,5,2,3, 9,5,3,3, 3,9,8,3, 3,9,9,3, 3,6,0,3, 3,6,1,3, 3,6,2,3, 3,6,3,3, 3,6,4,3, 3,6,5,3, 3,6,6,3, 3,6,7,3, 3,6,8,3, 3,6,9,3, 3,8,6,3, 3,8,7,3, 9,6,2,3, 9,6,3,3, 9,8,8,3, 9,8,9,3, 3,7,0,3, 3,7,1,3, 3,7,2,3, 3,7,3,3, 3,7,4,3, 3,7,5,3, 3,7,6,3, 3,7,7,3, 3,7,8,3, 3,7,9,3, 3,9,6,3, 3,9,7,3, 9,7,2,3, 9,7,3,3, 9,9,8,3, 9,9,9,3, 4,0,0,3, 4,0,1,3, 4,0,2,3, 4,0,3,3, 4,0,4,3, 4,0,5,3, 4,0,6,3, 4,0,7,3, 4,0,8,3, 4,0,9,3, 4,8,0,3, 4,8,1,3, 8,0,4,3, 8,0,5,3, 8,8,4,3, 8,8,5,3, 4,1,0,3, 4,1,1,3, 4,1,2,3, 4,1,3,3, 4,1,4,3, 4,1,5,3, 4,1,6,3, 4,1,7,3, 4,1,8,3, 4,1,9,3, 4,9,0,3, 4,9,1,3, 8,1,4,3, 8,1,5,3, 8,9,4,3, 8,9,5,3, 4,2,0,3, 4,2,1,3, 4,2,2,3, 4,2,3,3, 4,2,4,3, 4,2,5,3, 4,2,6,3, 4,2,7,3, 4,2,8,3, 4,2,9,3, 4,8,2,3, 4,8,3,3, 8,2,4,3, 8,2,5,3, 8,4,8,3, 8,4,9,3, 4,3,0,3, 4,3,1,3, 4,3,2,3, 4,3,3,3, 4,3,4,3, 4,3,5,3, 4,3,6,3, 4,3,7,3, 4,3,8,3, 4,3,9,3, 4,9,2,3, 4,9,3,3, 8,3,4,3, 8,3,5,3, 8,5,8,3, 8,5,9,3, 4,4,0,3, 4,4,1,3, 4,4,2,3, 4,4,3,3, 4,4,4,3, 4,4,5,3, 4,4,6,3, 4,4,7,3, 4,4,8,3, 4,4,9,3, 4,8,4,3, 4,8,5,3, 8,4,4,3, 8,4,5,3, 4,8,8,3, 4,8,9,3, 4,5,0,3, 4,5,1,3, 4,5,2,3, 4,5,3,3, 4,5,4,3, 4,5,5,3, 4,5,6,3, 4,5,7,3, 4,5,8,3, 4,5,9,3, 4,9,4,3, 4,9,5,3, 8,5,4,3, 8,5,5,3, 4,9,8,3, 4,9,9,3, 4,6,0,3, 4,6,1,3, 4,6,2,3, 4,6,3,3, 4,6,4,3, 4,6,5,3, 4,6,6,3, 4,6,7,3, 4,6,8,3, 4,6,9,3, 4,8,6,3, 4,8,7,3, 8,6,4,3, 8,6,5,3, 8,8,8,3, 8,8,9,3, 4,7,0,3, 4,7,1,3, 4,7,2,3, 4,7,3,3, 4,7,4,3, 4,7,5,3, 4,7,6,3, 4,7,7,3, 4,7,8,3, 4,7,9,3, 4,9,6,3, 4,9,7,3, 8,7,4,3, 8,7,5,3, 8,9,8,3, 8,9,9,3, 5,0,0,3, 5,0,1,3, 5,0,2,3, 5,0,3,3, 5,0,4,3, 5,0,5,3, 5,0,6,3, 5,0,7,3, 5,0,8,3, 5,0,9,3, 5,8,0,3, 5,8,1,3, 9,0,4,3, 9,0,5,3, 9,8,4,3, 9,8,5,3, 5,1,0,3, 5,1,1,3, 5,1,2,3, 5,1,3,3, 5,1,4,3, 5,1,5,3, 5,1,6,3, 5,1,7,3, 5,1,8,3, 5,1,9,3, 5,9,0,3, 5,9,1,3, 9,1,4,3, 9,1,5,3, 9,9,4,3, 9,9,5,3, 5,2,0,3, 5,2,1,3, 5,2,2,3, 5,2,3,3, 5,2,4,3, 5,2,5,3, 5,2,6,3, 5,2,7,3, 5,2,8,3, 5,2,9,3, 5,8,2,3, 5,8,3,3, 9,2,4,3, 9,2,5,3, 9,4,8,3, 9,4,9,3, 5,3,0,3, 5,3,1,3, 5,3,2,3, 5,3,3,3, 5,3,4,3, 5,3,5,3, 5,3,6,3, 5,3,7,3, 5,3,8,3, 5,3,9,3, 5,9,2,3, 5,9,3,3, 9,3,4,3, 9,3,5,3, 9,5,8,3, 9,5,9,3, 5,4,0,3, 5,4,1,3, 5,4,2,3, 5,4,3,3, 5,4,4,3, 5,4,5,3, 5,4,6,3, 5,4,7,3, 5,4,8,3, 5,4,9,3, 5,8,4,3, 5,8,5,3, 9,4,4,3, 9,4,5,3, 5,8,8,3, 5,8,9,3, 5,5,0,3, 5,5,1,3, 5,5,2,3, 5,5,3,3, 5,5,4,3, 5,5,5,3, 5,5,6,3, 5,5,7,3, 5,5,8,3, 5,5,9,3, 5,9,4,3, 5,9,5,3, 9,5,4,3, 9,5,5,3, 5,9,8,3, 5,9,9,3, 5,6,0,3, 5,6,1,3, 5,6,2,3, 5,6,3,3, 5,6,4,3, 5,6,5,3, 5,6,6,3, 5,6,7,3, 5,6,8,3, 5,6,9,3, 5,8,6,3, 5,8,7,3, 9,6,4,3, 9,6,5,3, 9,8,8,3, 9,8,9,3, 5,7,0,3, 5,7,1,3, 5,7,2,3, 5,7,3,3, 5,7,4,3, 5,7,5,3, 5,7,6,3, 5,7,7,3, 5,7,8,3, 5,7,9,3, 5,9,6,3, 5,9,7,3, 9,7,4,3, 9,7,5,3, 9,9,8,3, 9,9,9,3, 6,0,0,3, 6,0,1,3, 6,0,2,3, 6,0,3,3, 6,0,4,3, 6,0,5,3, 6,0,6,3, 6,0,7,3, 6,0,8,3, 6,0,9,3, 6,8,0,3, 6,8,1,3, 8,0,6,3, 8,0,7,3, 8,8,6,3, 8,8,7,3, 6,1,0,3, 6,1,1,3, 6,1,2,3, 6,1,3,3, 6,1,4,3, 6,1,5,3, 6,1,6,3, 6,1,7,3, 6,1,8,3, 6,1,9,3, 6,9,0,3, 6,9,1,3, 8,1,6,3, 8,1,7,3, 8,9,6,3, 8,9,7,3, 6,2,0,3, 6,2,1,3, 6,2,2,3, 6,2,3,3, 6,2,4,3, 6,2,5,3, 6,2,6,3, 6,2,7,3, 6,2,8,3, 6,2,9,3, 6,8,2,3, 6,8,3,3, 8,2,6,3, 8,2,7,3, 8,6,8,3, 8,6,9,3, 6,3,0,3, 6,3,1,3, 6,3,2,3, 6,3,3,3, 6,3,4,3, 6,3,5,3, 6,3,6,3, 6,3,7,3, 6,3,8,3, 6,3,9,3, 6,9,2,3, 6,9,3,3, 8,3,6,3, 8,3,7,3, 8,7,8,3, 8,7,9,3, 6,4,0,3, 6,4,1,3, 6,4,2,3, 6,4,3,3, 6,4,4,3, 6,4,5,3, 6,4,6,3, 6,4,7,3, 6,4,8,3, 6,4,9,3, 6,8,4,3, 6,8,5,3, 8,4,6,3, 8,4,7,3, 6,8,8,3, 6,8,9,3, 6,5,0,3, 6,5,1,3, 6,5,2,3, 6,5,3,3, 6,5,4,3, 6,5,5,3, 6,5,6,3, 6,5,7,3, 6,5,8,3, 6,5,9,3, 6,9,4,3, 6,9,5,3, 8,5,6,3, 8,5,7,3, 6,9,8,3, 6,9,9,3, 6,6,0,3, 6,6,1,3, 6,6,2,3, 6,6,3,3, 6,6,4,3, 6,6,5,3, 6,6,6,3, 6,6,7,3, 6,6,8,3, 6,6,9,3, 6,8,6,3, 6,8,7,3, 8,6,6,3, 8,6,7,3, 8,8,8,3, 8,8,9,3, 6,7,0,3, 6,7,1,3, 6,7,2,3, 6,7,3,3, 6,7,4,3, 6,7,5,3, 6,7,6,3, 6,7,7,3, 6,7,8,3, 6,7,9,3, 6,9,6,3, 6,9,7,3, 8,7,6,3, 8,7,7,3, 8,9,8,3, 8,9,9,3, 7,0,0,3, 7,0,1,3, 7,0,2,3, 7,0,3,3, 7,0,4,3, 7,0,5,3, 7,0,6,3, 7,0,7,3, 7,0,8,3, 7,0,9,3, 7,8,0,3, 7,8,1,3, 9,0,6,3, 9,0,7,3, 9,8,6,3, 9,8,7,3, 7,1,0,3, 7,1,1,3, 7,1,2,3, 7,1,3,3, 7,1,4,3, 7,1,5,3, 7,1,6,3, 7,1,7,3, 7,1,8,3, 7,1,9,3, 7,9,0,3, 7,9,1,3, 9,1,6,3, 9,1,7,3, 9,9,6,3, 9,9,7,3, 7,2,0,3, 7,2,1,3, 7,2,2,3, 7,2,3,3, 7,2,4,3, 7,2,5,3, 7,2,6,3, 7,2,7,3, 7,2,8,3, 7,2,9,3, 7,8,2,3, 7,8,3,3, 9,2,6,3, 9,2,7,3, 9,6,8,3, 9,6,9,3, 7,3,0,3, 7,3,1,3, 7,3,2,3, 7,3,3,3, 7,3,4,3, 7,3,5,3, 7,3,6,3, 7,3,7,3, 7,3,8,3, 7,3,9,3, 7,9,2,3, 7,9,3,3, 9,3,6,3, 9,3,7,3, 9,7,8,3, 9,7,9,3, 7,4,0,3, 7,4,1,3, 7,4,2,3, 7,4,3,3, 7,4,4,3, 7,4,5,3, 7,4,6,3, 7,4,7,3, 7,4,8,3, 7,4,9,3, 7,8,4,3, 7,8,5,3, 9,4,6,3, 9,4,7,3, 7,8,8,3, 7,8,9,3, 7,5,0,3, 7,5,1,3, 7,5,2,3, 7,5,3,3, 7,5,4,3, 7,5,5,3, 7,5,6,3, 7,5,7,3, 7,5,8,3, 7,5,9,3, 7,9,4,3, 7,9,5,3, 9,5,6,3, 9,5,7,3, 7,9,8,3, 7,9,9,3, 7,6,0,3, 7,6,1,3, 7,6,2,3, 7,6,3,3, 7,6,4,3, 7,6,5,3, 7,6,6,3, 7,6,7,3, 7,6,8,3, 7,6,9,3, 7,8,6,3, 7,8,7,3, 9,6,6,3, 9,6,7,3, 9,8,8,3, 9,8,9,3, 7,7,0,3, 7,7,1,3, 7,7,2,3, 7,7,3,3, 7,7,4,3, 7,7,5,3, 7,7,6,3, 7,7,7,3, 7,7,8,3, 7,7,9,3, 7,9,6,3, 7,9,7,3, 9,7,6,3, 9,7,7,3, 9,9,8,3, 9,9,9,3}; #endif #if defined(DEC_BIN2BCD8) && DEC_BIN2BCD8==1 && !defined(DECBIN2BCD8) #define DECBIN2BCD8 const uint8_t BIN2BCD8[4000]={ 0,0,0,0, 0,0,1,1, 0,0,2,1, 0,0,3,1, 0,0,4,1, 0,0,5,1, 0,0,6,1, 0,0,7,1, 0,0,8,1, 0,0,9,1, 0,1,0,2, 0,1,1,2, 0,1,2,2, 0,1,3,2, 0,1,4,2, 0,1,5,2, 0,1,6,2, 0,1,7,2, 0,1,8,2, 0,1,9,2, 0,2,0,2, 0,2,1,2, 0,2,2,2, 0,2,3,2, 0,2,4,2, 0,2,5,2, 0,2,6,2, 0,2,7,2, 0,2,8,2, 0,2,9,2, 0,3,0,2, 0,3,1,2, 0,3,2,2, 0,3,3,2, 0,3,4,2, 0,3,5,2, 0,3,6,2, 0,3,7,2, 0,3,8,2, 0,3,9,2, 0,4,0,2, 0,4,1,2, 0,4,2,2, 0,4,3,2, 0,4,4,2, 0,4,5,2, 0,4,6,2, 0,4,7,2, 0,4,8,2, 0,4,9,2, 0,5,0,2, 0,5,1,2, 0,5,2,2, 0,5,3,2, 0,5,4,2, 0,5,5,2, 0,5,6,2, 0,5,7,2, 0,5,8,2, 0,5,9,2, 0,6,0,2, 0,6,1,2, 0,6,2,2, 0,6,3,2, 0,6,4,2, 0,6,5,2, 0,6,6,2, 0,6,7,2, 0,6,8,2, 0,6,9,2, 0,7,0,2, 0,7,1,2, 0,7,2,2, 0,7,3,2, 0,7,4,2, 0,7,5,2, 0,7,6,2, 0,7,7,2, 0,7,8,2, 0,7,9,2, 0,8,0,2, 0,8,1,2, 0,8,2,2, 0,8,3,2, 0,8,4,2, 0,8,5,2, 0,8,6,2, 0,8,7,2, 0,8,8,2, 0,8,9,2, 0,9,0,2, 0,9,1,2, 0,9,2,2, 0,9,3,2, 0,9,4,2, 0,9,5,2, 0,9,6,2, 0,9,7,2, 0,9,8,2, 0,9,9,2, 1,0,0,3, 1,0,1,3, 1,0,2,3, 1,0,3,3, 1,0,4,3, 1,0,5,3, 1,0,6,3, 1,0,7,3, 1,0,8,3, 1,0,9,3, 1,1,0,3, 1,1,1,3, 1,1,2,3, 1,1,3,3, 1,1,4,3, 1,1,5,3, 1,1,6,3, 1,1,7,3, 1,1,8,3, 1,1,9,3, 1,2,0,3, 1,2,1,3, 1,2,2,3, 1,2,3,3, 1,2,4,3, 1,2,5,3, 1,2,6,3, 1,2,7,3, 1,2,8,3, 1,2,9,3, 1,3,0,3, 1,3,1,3, 1,3,2,3, 1,3,3,3, 1,3,4,3, 1,3,5,3, 1,3,6,3, 1,3,7,3, 1,3,8,3, 1,3,9,3, 1,4,0,3, 1,4,1,3, 1,4,2,3, 1,4,3,3, 1,4,4,3, 1,4,5,3, 1,4,6,3, 1,4,7,3, 1,4,8,3, 1,4,9,3, 1,5,0,3, 1,5,1,3, 1,5,2,3, 1,5,3,3, 1,5,4,3, 1,5,5,3, 1,5,6,3, 1,5,7,3, 1,5,8,3, 1,5,9,3, 1,6,0,3, 1,6,1,3, 1,6,2,3, 1,6,3,3, 1,6,4,3, 1,6,5,3, 1,6,6,3, 1,6,7,3, 1,6,8,3, 1,6,9,3, 1,7,0,3, 1,7,1,3, 1,7,2,3, 1,7,3,3, 1,7,4,3, 1,7,5,3, 1,7,6,3, 1,7,7,3, 1,7,8,3, 1,7,9,3, 1,8,0,3, 1,8,1,3, 1,8,2,3, 1,8,3,3, 1,8,4,3, 1,8,5,3, 1,8,6,3, 1,8,7,3, 1,8,8,3, 1,8,9,3, 1,9,0,3, 1,9,1,3, 1,9,2,3, 1,9,3,3, 1,9,4,3, 1,9,5,3, 1,9,6,3, 1,9,7,3, 1,9,8,3, 1,9,9,3, 2,0,0,3, 2,0,1,3, 2,0,2,3, 2,0,3,3, 2,0,4,3, 2,0,5,3, 2,0,6,3, 2,0,7,3, 2,0,8,3, 2,0,9,3, 2,1,0,3, 2,1,1,3, 2,1,2,3, 2,1,3,3, 2,1,4,3, 2,1,5,3, 2,1,6,3, 2,1,7,3, 2,1,8,3, 2,1,9,3, 2,2,0,3, 2,2,1,3, 2,2,2,3, 2,2,3,3, 2,2,4,3, 2,2,5,3, 2,2,6,3, 2,2,7,3, 2,2,8,3, 2,2,9,3, 2,3,0,3, 2,3,1,3, 2,3,2,3, 2,3,3,3, 2,3,4,3, 2,3,5,3, 2,3,6,3, 2,3,7,3, 2,3,8,3, 2,3,9,3, 2,4,0,3, 2,4,1,3, 2,4,2,3, 2,4,3,3, 2,4,4,3, 2,4,5,3, 2,4,6,3, 2,4,7,3, 2,4,8,3, 2,4,9,3, 2,5,0,3, 2,5,1,3, 2,5,2,3, 2,5,3,3, 2,5,4,3, 2,5,5,3, 2,5,6,3, 2,5,7,3, 2,5,8,3, 2,5,9,3, 2,6,0,3, 2,6,1,3, 2,6,2,3, 2,6,3,3, 2,6,4,3, 2,6,5,3, 2,6,6,3, 2,6,7,3, 2,6,8,3, 2,6,9,3, 2,7,0,3, 2,7,1,3, 2,7,2,3, 2,7,3,3, 2,7,4,3, 2,7,5,3, 2,7,6,3, 2,7,7,3, 2,7,8,3, 2,7,9,3, 2,8,0,3, 2,8,1,3, 2,8,2,3, 2,8,3,3, 2,8,4,3, 2,8,5,3, 2,8,6,3, 2,8,7,3, 2,8,8,3, 2,8,9,3, 2,9,0,3, 2,9,1,3, 2,9,2,3, 2,9,3,3, 2,9,4,3, 2,9,5,3, 2,9,6,3, 2,9,7,3, 2,9,8,3, 2,9,9,3, 3,0,0,3, 3,0,1,3, 3,0,2,3, 3,0,3,3, 3,0,4,3, 3,0,5,3, 3,0,6,3, 3,0,7,3, 3,0,8,3, 3,0,9,3, 3,1,0,3, 3,1,1,3, 3,1,2,3, 3,1,3,3, 3,1,4,3, 3,1,5,3, 3,1,6,3, 3,1,7,3, 3,1,8,3, 3,1,9,3, 3,2,0,3, 3,2,1,3, 3,2,2,3, 3,2,3,3, 3,2,4,3, 3,2,5,3, 3,2,6,3, 3,2,7,3, 3,2,8,3, 3,2,9,3, 3,3,0,3, 3,3,1,3, 3,3,2,3, 3,3,3,3, 3,3,4,3, 3,3,5,3, 3,3,6,3, 3,3,7,3, 3,3,8,3, 3,3,9,3, 3,4,0,3, 3,4,1,3, 3,4,2,3, 3,4,3,3, 3,4,4,3, 3,4,5,3, 3,4,6,3, 3,4,7,3, 3,4,8,3, 3,4,9,3, 3,5,0,3, 3,5,1,3, 3,5,2,3, 3,5,3,3, 3,5,4,3, 3,5,5,3, 3,5,6,3, 3,5,7,3, 3,5,8,3, 3,5,9,3, 3,6,0,3, 3,6,1,3, 3,6,2,3, 3,6,3,3, 3,6,4,3, 3,6,5,3, 3,6,6,3, 3,6,7,3, 3,6,8,3, 3,6,9,3, 3,7,0,3, 3,7,1,3, 3,7,2,3, 3,7,3,3, 3,7,4,3, 3,7,5,3, 3,7,6,3, 3,7,7,3, 3,7,8,3, 3,7,9,3, 3,8,0,3, 3,8,1,3, 3,8,2,3, 3,8,3,3, 3,8,4,3, 3,8,5,3, 3,8,6,3, 3,8,7,3, 3,8,8,3, 3,8,9,3, 3,9,0,3, 3,9,1,3, 3,9,2,3, 3,9,3,3, 3,9,4,3, 3,9,5,3, 3,9,6,3, 3,9,7,3, 3,9,8,3, 3,9,9,3, 4,0,0,3, 4,0,1,3, 4,0,2,3, 4,0,3,3, 4,0,4,3, 4,0,5,3, 4,0,6,3, 4,0,7,3, 4,0,8,3, 4,0,9,3, 4,1,0,3, 4,1,1,3, 4,1,2,3, 4,1,3,3, 4,1,4,3, 4,1,5,3, 4,1,6,3, 4,1,7,3, 4,1,8,3, 4,1,9,3, 4,2,0,3, 4,2,1,3, 4,2,2,3, 4,2,3,3, 4,2,4,3, 4,2,5,3, 4,2,6,3, 4,2,7,3, 4,2,8,3, 4,2,9,3, 4,3,0,3, 4,3,1,3, 4,3,2,3, 4,3,3,3, 4,3,4,3, 4,3,5,3, 4,3,6,3, 4,3,7,3, 4,3,8,3, 4,3,9,3, 4,4,0,3, 4,4,1,3, 4,4,2,3, 4,4,3,3, 4,4,4,3, 4,4,5,3, 4,4,6,3, 4,4,7,3, 4,4,8,3, 4,4,9,3, 4,5,0,3, 4,5,1,3, 4,5,2,3, 4,5,3,3, 4,5,4,3, 4,5,5,3, 4,5,6,3, 4,5,7,3, 4,5,8,3, 4,5,9,3, 4,6,0,3, 4,6,1,3, 4,6,2,3, 4,6,3,3, 4,6,4,3, 4,6,5,3, 4,6,6,3, 4,6,7,3, 4,6,8,3, 4,6,9,3, 4,7,0,3, 4,7,1,3, 4,7,2,3, 4,7,3,3, 4,7,4,3, 4,7,5,3, 4,7,6,3, 4,7,7,3, 4,7,8,3, 4,7,9,3, 4,8,0,3, 4,8,1,3, 4,8,2,3, 4,8,3,3, 4,8,4,3, 4,8,5,3, 4,8,6,3, 4,8,7,3, 4,8,8,3, 4,8,9,3, 4,9,0,3, 4,9,1,3, 4,9,2,3, 4,9,3,3, 4,9,4,3, 4,9,5,3, 4,9,6,3, 4,9,7,3, 4,9,8,3, 4,9,9,3, 5,0,0,3, 5,0,1,3, 5,0,2,3, 5,0,3,3, 5,0,4,3, 5,0,5,3, 5,0,6,3, 5,0,7,3, 5,0,8,3, 5,0,9,3, 5,1,0,3, 5,1,1,3, 5,1,2,3, 5,1,3,3, 5,1,4,3, 5,1,5,3, 5,1,6,3, 5,1,7,3, 5,1,8,3, 5,1,9,3, 5,2,0,3, 5,2,1,3, 5,2,2,3, 5,2,3,3, 5,2,4,3, 5,2,5,3, 5,2,6,3, 5,2,7,3, 5,2,8,3, 5,2,9,3, 5,3,0,3, 5,3,1,3, 5,3,2,3, 5,3,3,3, 5,3,4,3, 5,3,5,3, 5,3,6,3, 5,3,7,3, 5,3,8,3, 5,3,9,3, 5,4,0,3, 5,4,1,3, 5,4,2,3, 5,4,3,3, 5,4,4,3, 5,4,5,3, 5,4,6,3, 5,4,7,3, 5,4,8,3, 5,4,9,3, 5,5,0,3, 5,5,1,3, 5,5,2,3, 5,5,3,3, 5,5,4,3, 5,5,5,3, 5,5,6,3, 5,5,7,3, 5,5,8,3, 5,5,9,3, 5,6,0,3, 5,6,1,3, 5,6,2,3, 5,6,3,3, 5,6,4,3, 5,6,5,3, 5,6,6,3, 5,6,7,3, 5,6,8,3, 5,6,9,3, 5,7,0,3, 5,7,1,3, 5,7,2,3, 5,7,3,3, 5,7,4,3, 5,7,5,3, 5,7,6,3, 5,7,7,3, 5,7,8,3, 5,7,9,3, 5,8,0,3, 5,8,1,3, 5,8,2,3, 5,8,3,3, 5,8,4,3, 5,8,5,3, 5,8,6,3, 5,8,7,3, 5,8,8,3, 5,8,9,3, 5,9,0,3, 5,9,1,3, 5,9,2,3, 5,9,3,3, 5,9,4,3, 5,9,5,3, 5,9,6,3, 5,9,7,3, 5,9,8,3, 5,9,9,3, 6,0,0,3, 6,0,1,3, 6,0,2,3, 6,0,3,3, 6,0,4,3, 6,0,5,3, 6,0,6,3, 6,0,7,3, 6,0,8,3, 6,0,9,3, 6,1,0,3, 6,1,1,3, 6,1,2,3, 6,1,3,3, 6,1,4,3, 6,1,5,3, 6,1,6,3, 6,1,7,3, 6,1,8,3, 6,1,9,3, 6,2,0,3, 6,2,1,3, 6,2,2,3, 6,2,3,3, 6,2,4,3, 6,2,5,3, 6,2,6,3, 6,2,7,3, 6,2,8,3, 6,2,9,3, 6,3,0,3, 6,3,1,3, 6,3,2,3, 6,3,3,3, 6,3,4,3, 6,3,5,3, 6,3,6,3, 6,3,7,3, 6,3,8,3, 6,3,9,3, 6,4,0,3, 6,4,1,3, 6,4,2,3, 6,4,3,3, 6,4,4,3, 6,4,5,3, 6,4,6,3, 6,4,7,3, 6,4,8,3, 6,4,9,3, 6,5,0,3, 6,5,1,3, 6,5,2,3, 6,5,3,3, 6,5,4,3, 6,5,5,3, 6,5,6,3, 6,5,7,3, 6,5,8,3, 6,5,9,3, 6,6,0,3, 6,6,1,3, 6,6,2,3, 6,6,3,3, 6,6,4,3, 6,6,5,3, 6,6,6,3, 6,6,7,3, 6,6,8,3, 6,6,9,3, 6,7,0,3, 6,7,1,3, 6,7,2,3, 6,7,3,3, 6,7,4,3, 6,7,5,3, 6,7,6,3, 6,7,7,3, 6,7,8,3, 6,7,9,3, 6,8,0,3, 6,8,1,3, 6,8,2,3, 6,8,3,3, 6,8,4,3, 6,8,5,3, 6,8,6,3, 6,8,7,3, 6,8,8,3, 6,8,9,3, 6,9,0,3, 6,9,1,3, 6,9,2,3, 6,9,3,3, 6,9,4,3, 6,9,5,3, 6,9,6,3, 6,9,7,3, 6,9,8,3, 6,9,9,3, 7,0,0,3, 7,0,1,3, 7,0,2,3, 7,0,3,3, 7,0,4,3, 7,0,5,3, 7,0,6,3, 7,0,7,3, 7,0,8,3, 7,0,9,3, 7,1,0,3, 7,1,1,3, 7,1,2,3, 7,1,3,3, 7,1,4,3, 7,1,5,3, 7,1,6,3, 7,1,7,3, 7,1,8,3, 7,1,9,3, 7,2,0,3, 7,2,1,3, 7,2,2,3, 7,2,3,3, 7,2,4,3, 7,2,5,3, 7,2,6,3, 7,2,7,3, 7,2,8,3, 7,2,9,3, 7,3,0,3, 7,3,1,3, 7,3,2,3, 7,3,3,3, 7,3,4,3, 7,3,5,3, 7,3,6,3, 7,3,7,3, 7,3,8,3, 7,3,9,3, 7,4,0,3, 7,4,1,3, 7,4,2,3, 7,4,3,3, 7,4,4,3, 7,4,5,3, 7,4,6,3, 7,4,7,3, 7,4,8,3, 7,4,9,3, 7,5,0,3, 7,5,1,3, 7,5,2,3, 7,5,3,3, 7,5,4,3, 7,5,5,3, 7,5,6,3, 7,5,7,3, 7,5,8,3, 7,5,9,3, 7,6,0,3, 7,6,1,3, 7,6,2,3, 7,6,3,3, 7,6,4,3, 7,6,5,3, 7,6,6,3, 7,6,7,3, 7,6,8,3, 7,6,9,3, 7,7,0,3, 7,7,1,3, 7,7,2,3, 7,7,3,3, 7,7,4,3, 7,7,5,3, 7,7,6,3, 7,7,7,3, 7,7,8,3, 7,7,9,3, 7,8,0,3, 7,8,1,3, 7,8,2,3, 7,8,3,3, 7,8,4,3, 7,8,5,3, 7,8,6,3, 7,8,7,3, 7,8,8,3, 7,8,9,3, 7,9,0,3, 7,9,1,3, 7,9,2,3, 7,9,3,3, 7,9,4,3, 7,9,5,3, 7,9,6,3, 7,9,7,3, 7,9,8,3, 7,9,9,3, 8,0,0,3, 8,0,1,3, 8,0,2,3, 8,0,3,3, 8,0,4,3, 8,0,5,3, 8,0,6,3, 8,0,7,3, 8,0,8,3, 8,0,9,3, 8,1,0,3, 8,1,1,3, 8,1,2,3, 8,1,3,3, 8,1,4,3, 8,1,5,3, 8,1,6,3, 8,1,7,3, 8,1,8,3, 8,1,9,3, 8,2,0,3, 8,2,1,3, 8,2,2,3, 8,2,3,3, 8,2,4,3, 8,2,5,3, 8,2,6,3, 8,2,7,3, 8,2,8,3, 8,2,9,3, 8,3,0,3, 8,3,1,3, 8,3,2,3, 8,3,3,3, 8,3,4,3, 8,3,5,3, 8,3,6,3, 8,3,7,3, 8,3,8,3, 8,3,9,3, 8,4,0,3, 8,4,1,3, 8,4,2,3, 8,4,3,3, 8,4,4,3, 8,4,5,3, 8,4,6,3, 8,4,7,3, 8,4,8,3, 8,4,9,3, 8,5,0,3, 8,5,1,3, 8,5,2,3, 8,5,3,3, 8,5,4,3, 8,5,5,3, 8,5,6,3, 8,5,7,3, 8,5,8,3, 8,5,9,3, 8,6,0,3, 8,6,1,3, 8,6,2,3, 8,6,3,3, 8,6,4,3, 8,6,5,3, 8,6,6,3, 8,6,7,3, 8,6,8,3, 8,6,9,3, 8,7,0,3, 8,7,1,3, 8,7,2,3, 8,7,3,3, 8,7,4,3, 8,7,5,3, 8,7,6,3, 8,7,7,3, 8,7,8,3, 8,7,9,3, 8,8,0,3, 8,8,1,3, 8,8,2,3, 8,8,3,3, 8,8,4,3, 8,8,5,3, 8,8,6,3, 8,8,7,3, 8,8,8,3, 8,8,9,3, 8,9,0,3, 8,9,1,3, 8,9,2,3, 8,9,3,3, 8,9,4,3, 8,9,5,3, 8,9,6,3, 8,9,7,3, 8,9,8,3, 8,9,9,3, 9,0,0,3, 9,0,1,3, 9,0,2,3, 9,0,3,3, 9,0,4,3, 9,0,5,3, 9,0,6,3, 9,0,7,3, 9,0,8,3, 9,0,9,3, 9,1,0,3, 9,1,1,3, 9,1,2,3, 9,1,3,3, 9,1,4,3, 9,1,5,3, 9,1,6,3, 9,1,7,3, 9,1,8,3, 9,1,9,3, 9,2,0,3, 9,2,1,3, 9,2,2,3, 9,2,3,3, 9,2,4,3, 9,2,5,3, 9,2,6,3, 9,2,7,3, 9,2,8,3, 9,2,9,3, 9,3,0,3, 9,3,1,3, 9,3,2,3, 9,3,3,3, 9,3,4,3, 9,3,5,3, 9,3,6,3, 9,3,7,3, 9,3,8,3, 9,3,9,3, 9,4,0,3, 9,4,1,3, 9,4,2,3, 9,4,3,3, 9,4,4,3, 9,4,5,3, 9,4,6,3, 9,4,7,3, 9,4,8,3, 9,4,9,3, 9,5,0,3, 9,5,1,3, 9,5,2,3, 9,5,3,3, 9,5,4,3, 9,5,5,3, 9,5,6,3, 9,5,7,3, 9,5,8,3, 9,5,9,3, 9,6,0,3, 9,6,1,3, 9,6,2,3, 9,6,3,3, 9,6,4,3, 9,6,5,3, 9,6,6,3, 9,6,7,3, 9,6,8,3, 9,6,9,3, 9,7,0,3, 9,7,1,3, 9,7,2,3, 9,7,3,3, 9,7,4,3, 9,7,5,3, 9,7,6,3, 9,7,7,3, 9,7,8,3, 9,7,9,3, 9,8,0,3, 9,8,1,3, 9,8,2,3, 9,8,3,3, 9,8,4,3, 9,8,5,3, 9,8,6,3, 9,8,7,3, 9,8,8,3, 9,8,9,3, 9,9,0,3, 9,9,1,3, 9,9,2,3, 9,9,3,3, 9,9,4,3, 9,9,5,3, 9,9,6,3, 9,9,7,3, 9,9,8,3, 9,9,9,3}; #ifdef __cplusplus } #endif #endif libdfp-1.0.17/libdecnumber/decDPDSymbols.h000066400000000000000000000005061504475242000203040ustar00rootroot00000000000000#if !defined(DECDPDSYMBOLS) #define DECDPDSYMBOLS #ifdef IN_LIBGCC2 #define BCD2DPD __decBCD2DPD #define BIN2BCD8 __decBIN2BCD8 #define BIN2CHAR __decBIN2CHAR #define BIN2DPD __decBIN2DPD #define DPD2BCD8 __decDPD2BCD8 #define DPD2BIN __decDPD2BIN #define DPD2BINK __decDPD2BINK #define DPD2BINM __decDPD2BINM #endif #endif libdfp-1.0.17/libdecnumber/decDouble.c000066400000000000000000000141711504475242000175340ustar00rootroot00000000000000/* decDouble module for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decDouble.c -- decDouble operations module */ /* ------------------------------------------------------------------ */ /* This module comprises decDouble operations (including conversions) */ /* ------------------------------------------------------------------ */ #include "decContext.h" /* public includes */ #include "decDouble.h" /* .. */ /* Constant mappings for shared code */ #define DECPMAX DECDOUBLE_Pmax #define DECEMIN DECDOUBLE_Emin #define DECEMAX DECDOUBLE_Emax #define DECEMAXD DECDOUBLE_EmaxD #define DECBYTES DECDOUBLE_Bytes #define DECSTRING DECDOUBLE_String #define DECECONL DECDOUBLE_EconL #define DECBIAS DECDOUBLE_Bias #define DECLETS DECDOUBLE_Declets #define DECQTINY (-DECDOUBLE_Bias) /* parameters of next-wider format */ #define DECWBYTES DECQUAD_Bytes #define DECWPMAX DECQUAD_Pmax #define DECWECONL DECQUAD_EconL #define DECWBIAS DECQUAD_Bias /* Type and function mappings for shared code */ #define decFloat decDouble /* Type name */ #define decFloatWider decQuad /* Type name */ /* Utilities and conversions (binary results, extractors, etc.) */ #define decFloatFromBCD decDoubleFromBCD #define decFloatFromInt32 decDoubleFromInt32 #define decFloatFromPacked decDoubleFromPacked #define decFloatFromPackedChecked decDoubleFromPackedChecked #define decFloatFromString decDoubleFromString #define decFloatFromUInt32 decDoubleFromUInt32 #define decFloatFromWider decDoubleFromWider #define decFloatGetCoefficient decDoubleGetCoefficient #define decFloatGetExponent decDoubleGetExponent #define decFloatSetCoefficient decDoubleSetCoefficient #define decFloatSetExponent decDoubleSetExponent #define decFloatShow decDoubleShow #define decFloatToBCD decDoubleToBCD #define decFloatToEngString decDoubleToEngString #define decFloatToInt32 decDoubleToInt32 #define decFloatToInt32Exact decDoubleToInt32Exact #define decFloatToPacked decDoubleToPacked #define decFloatToString decDoubleToString #define decFloatToUInt32 decDoubleToUInt32 #define decFloatToUInt32Exact decDoubleToUInt32Exact #define decFloatToWider decDoubleToWider #define decFloatZero decDoubleZero /* Computational (result is a decFloat) */ #define decFloatAbs decDoubleAbs #define decFloatAdd decDoubleAdd #define decFloatAnd decDoubleAnd #define decFloatDivide decDoubleDivide #define decFloatDivideInteger decDoubleDivideInteger #define decFloatFMA decDoubleFMA #define decFloatInvert decDoubleInvert #define decFloatLogB decDoubleLogB #define decFloatMax decDoubleMax #define decFloatMaxMag decDoubleMaxMag #define decFloatMin decDoubleMin #define decFloatMinMag decDoubleMinMag #define decFloatMinus decDoubleMinus #define decFloatMultiply decDoubleMultiply #define decFloatNextMinus decDoubleNextMinus #define decFloatNextPlus decDoubleNextPlus #define decFloatNextToward decDoubleNextToward #define decFloatOr decDoubleOr #define decFloatPlus decDoublePlus #define decFloatQuantize decDoubleQuantize #define decFloatReduce decDoubleReduce #define decFloatRemainder decDoubleRemainder #define decFloatRemainderNear decDoubleRemainderNear #define decFloatRotate decDoubleRotate #define decFloatScaleB decDoubleScaleB #define decFloatShift decDoubleShift #define decFloatSubtract decDoubleSubtract #define decFloatToIntegralValue decDoubleToIntegralValue #define decFloatToIntegralExact decDoubleToIntegralExact #define decFloatXor decDoubleXor /* Comparisons */ #define decFloatCompare decDoubleCompare #define decFloatCompareSignal decDoubleCompareSignal #define decFloatCompareTotal decDoubleCompareTotal #define decFloatCompareTotalMag decDoubleCompareTotalMag /* Copies */ #define decFloatCanonical decDoubleCanonical #define decFloatCopy decDoubleCopy #define decFloatCopyAbs decDoubleCopyAbs #define decFloatCopyNegate decDoubleCopyNegate #define decFloatCopySign decDoubleCopySign /* Non-computational */ #define decFloatClass decDoubleClass #define decFloatClassString decDoubleClassString #define decFloatDigits decDoubleDigits #define decFloatIsCanonical decDoubleIsCanonical #define decFloatIsFinite decDoubleIsFinite #define decFloatIsInfinite decDoubleIsInfinite #define decFloatIsInteger decDoubleIsInteger #define decFloatIsNaN decDoubleIsNaN #define decFloatIsNormal decDoubleIsNormal #define decFloatIsSignaling decDoubleIsSignaling #define decFloatIsSignalling decDoubleIsSignalling #define decFloatIsSigned decDoubleIsSigned #define decFloatIsSubnormal decDoubleIsSubnormal #define decFloatIsZero decDoubleIsZero #define decFloatRadix decDoubleRadix #define decFloatSameQuantum decDoubleSameQuantum #define decFloatVersion decDoubleVersion #include "decNumberLocal.h" /* local includes (need DECPMAX) */ #include "decCommon.c" /* non-arithmetic decFloat routines */ #include "decBasic.c" /* basic formats routines */ libdfp-1.0.17/libdecnumber/decDouble.h000066400000000000000000000235001504475242000175350ustar00rootroot00000000000000/* decDouble module header for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decDouble.h -- Decimal 64-bit format module header */ /* ------------------------------------------------------------------ */ #if !defined(DECDOUBLE) #define DECDOUBLE #define DECDOUBLENAME "decimalDouble" /* Short name */ #define DECDOUBLETITLE "Decimal 64-bit datum" /* Verbose name */ #define DECDOUBLEAUTHOR "Mike Cowlishaw" /* Who to blame */ /* parameters for decDoubles */ #define DECDOUBLE_Bytes 8 /* length */ #define DECDOUBLE_Pmax 16 /* maximum precision (digits) */ #define DECDOUBLE_Emin -383 /* minimum adjusted exponent */ #define DECDOUBLE_Emax 384 /* maximum adjusted exponent */ #define DECDOUBLE_EmaxD 3 /* maximum exponent digits */ #define DECDOUBLE_Bias 398 /* bias for the exponent */ #define DECDOUBLE_String 25 /* maximum string length, +1 */ #define DECDOUBLE_EconL 8 /* exponent continuation length */ #define DECDOUBLE_Declets 5 /* count of declets */ /* highest biased exponent (Elimit-1) */ #define DECDOUBLE_Ehigh (DECDOUBLE_Emax + DECDOUBLE_Bias - (DECDOUBLE_Pmax-1)) /* Required includes */ #include "decContext.h" #include "decQuad.h" /* The decDouble decimal 64-bit type, accessible by all sizes */ typedef union { uint8_t bytes[DECDOUBLE_Bytes]; /* fields: 1, 5, 8, 50 bits */ uint16_t shorts[DECDOUBLE_Bytes/2]; uint32_t words[DECDOUBLE_Bytes/4]; #if DECUSE64 uint64_t longs[DECDOUBLE_Bytes/8]; #endif } decDouble; /* ---------------------------------------------------------------- */ /* Routines -- implemented as decFloat routines in common files */ /* ---------------------------------------------------------------- */ #include "decDoubleSymbols.h" /* Utilities and conversions, extractors, etc.) */ extern decDouble * decDoubleFromBCD(decDouble *, int32_t, const uint8_t *, int32_t); extern decDouble * decDoubleFromInt32(decDouble *, int32_t); extern decDouble * decDoubleFromPacked(decDouble *, int32_t, const uint8_t *); extern decDouble * decDoubleFromPackedChecked(decDouble *, int32_t, const uint8_t *); extern decDouble * decDoubleFromString(decDouble *, const char *, decContext *); extern decDouble * decDoubleFromUInt32(decDouble *, uint32_t); extern decDouble * decDoubleFromWider(decDouble *, const decQuad *, decContext *); extern int32_t decDoubleGetCoefficient(const decDouble *, uint8_t *); extern int32_t decDoubleGetExponent(const decDouble *); extern decDouble * decDoubleSetCoefficient(decDouble *, const uint8_t *, int32_t); extern decDouble * decDoubleSetExponent(decDouble *, decContext *, int32_t); extern void decDoubleShow(const decDouble *, const char *); extern int32_t decDoubleToBCD(const decDouble *, int32_t *, uint8_t *); extern char * decDoubleToEngString(const decDouble *, char *); extern int32_t decDoubleToInt32(const decDouble *, decContext *, enum rounding); extern int32_t decDoubleToInt32Exact(const decDouble *, decContext *, enum rounding); extern int32_t decDoubleToPacked(const decDouble *, int32_t *, uint8_t *); extern char * decDoubleToString(const decDouble *, char *); extern uint32_t decDoubleToUInt32(const decDouble *, decContext *, enum rounding); extern uint32_t decDoubleToUInt32Exact(const decDouble *, decContext *, enum rounding); extern decQuad * decDoubleToWider(const decDouble *, decQuad *); extern decDouble * decDoubleZero(decDouble *); /* Computational (result is a decDouble) */ extern decDouble * decDoubleAbs(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleAdd(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleAnd(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleDivide(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleDivideInteger(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleFMA(decDouble *, const decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleInvert(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleLogB(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleMax(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleMaxMag(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleMin(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleMinMag(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleMinus(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleMultiply(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleNextMinus(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleNextPlus(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleNextToward(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleOr(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoublePlus(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleQuantize(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleReduce(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleRemainder(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleRemainderNear(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleRotate(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleScaleB(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleShift(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleSubtract(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleToIntegralValue(decDouble *, const decDouble *, decContext *, enum rounding); extern decDouble * decDoubleToIntegralExact(decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleXor(decDouble *, const decDouble *, const decDouble *, decContext *); /* Comparisons */ extern decDouble * decDoubleCompare(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleCompareSignal(decDouble *, const decDouble *, const decDouble *, decContext *); extern decDouble * decDoubleCompareTotal(decDouble *, const decDouble *, const decDouble *); extern decDouble * decDoubleCompareTotalMag(decDouble *, const decDouble *, const decDouble *); /* Copies */ extern decDouble * decDoubleCanonical(decDouble *, const decDouble *); extern decDouble * decDoubleCopy(decDouble *, const decDouble *); extern decDouble * decDoubleCopyAbs(decDouble *, const decDouble *); extern decDouble * decDoubleCopyNegate(decDouble *, const decDouble *); extern decDouble * decDoubleCopySign(decDouble *, const decDouble *, const decDouble *); /* Non-computational */ extern enum decClass decDoubleClass(const decDouble *); extern const char * decDoubleClassString(const decDouble *); extern uint32_t decDoubleDigits(const decDouble *); extern uint32_t decDoubleIsCanonical(const decDouble *); extern uint32_t decDoubleIsFinite(const decDouble *); extern uint32_t decDoubleIsInfinite(const decDouble *); extern uint32_t decDoubleIsInteger(const decDouble *); extern uint32_t decDoubleIsNaN(const decDouble *); extern uint32_t decDoubleIsNormal(const decDouble *); extern uint32_t decDoubleIsSignaling(const decDouble *); extern uint32_t decDoubleIsSignalling(const decDouble *); extern uint32_t decDoubleIsSigned(const decDouble *); extern uint32_t decDoubleIsSubnormal(const decDouble *); extern uint32_t decDoubleIsZero(const decDouble *); extern uint32_t decDoubleRadix(const decDouble *); extern uint32_t decDoubleSameQuantum(const decDouble *, const decDouble *); extern const char * decDoubleVersion(void); /* decNumber conversions; these are implemented as macros so as not */ /* to force a dependency on decimal64 and decNumber in decDouble. */ /* decDoubleFromNumber returns a decimal64 * to avoid warnings. */ #define decDoubleToNumber(dq, dn) decimal64ToNumber((decimal64 *)(dq), dn) #define decDoubleFromNumber(dq, dn, set) decimal64FromNumber((decimal64 *)(dq), dn, set) #endif libdfp-1.0.17/libdecnumber/decDoubleSymbols.h000066400000000000000000000070701504475242000211120ustar00rootroot00000000000000#if !defined(DECDOUBLESYMBOLS) #define DECDOUBLESYMBOLS #ifdef IN_LIBGCC2 #define decDoubleAbs __decDoubleAbs #define decDoubleAdd __decDoubleAdd #define decDoubleAnd __decDoubleAnd #define decDoubleCanonical __decDoubleCanonical #define decDoubleClass __decDoubleClass #define decDoubleClassString __decDoubleClassString #define decDoubleCompare __decDoubleCompare #define decDoubleCompareSignal __decDoubleCompareSignal #define decDoubleCompareTotal __decDoubleCompareTotal #define decDoubleCompareTotalMag __decDoubleCompareTotalMag #define decDoubleCopy __decDoubleCopy #define decDoubleCopyAbs __decDoubleCopyAbs #define decDoubleCopyNegate __decDoubleCopyNegate #define decDoubleCopySign __decDoubleCopySign #define decDoubleDigits __decDoubleDigits #define decDoubleDivide __decDoubleDivide #define decDoubleDivideInteger __decDoubleDivideInteger #define decDoubleFMA __decDoubleFMA #define decDoubleFromBCD __decDoubleFromBCD #define decDoubleFromInt32 __decDoubleFromInt32 #define decDoubleFromPacked __decDoubleFromPacked #define decDoubleFromString __decDoubleFromString #define decDoubleFromUInt32 __decDoubleFromUInt32 #define decDoubleFromWider __decDoubleFromWider #define decDoubleGetCoefficient __decDoubleGetCoefficient #define decDoubleGetExponent __decDoubleGetExponent #define decDoubleInvert __decDoubleInvert #define decDoubleIsCanonical __decDoubleIsCanonical #define decDoubleIsFinite __decDoubleIsFinite #define decDoubleIsInfinite __decDoubleIsInfinite #define decDoubleIsInteger __decDoubleIsInteger #define decDoubleIsNaN __decDoubleIsNaN #define decDoubleIsNormal __decDoubleIsNormal #define decDoubleIsSignaling __decDoubleIsSignaling #define decDoubleIsSignalling __decDoubleIsSignalling #define decDoubleIsSigned __decDoubleIsSigned #define decDoubleIsSubnormal __decDoubleIsSubnormal #define decDoubleIsZero __decDoubleIsZero #define decDoubleLogB __decDoubleLogB #define decDoubleMax __decDoubleMax #define decDoubleMaxMag __decDoubleMaxMag #define decDoubleMin __decDoubleMin #define decDoubleMinMag __decDoubleMinMag #define decDoubleMinus __decDoubleMinus #define decDoubleMultiply __decDoubleMultiply #define decDoubleNextMinus __decDoubleNextMinus #define decDoubleNextPlus __decDoubleNextPlus #define decDoubleNextToward __decDoubleNextToward #define decDoubleOr __decDoubleOr #define decDoublePlus __decDoublePlus #define decDoubleQuantize __decDoubleQuantize #define decDoubleRadix __decDoubleRadix #define decDoubleReduce __decDoubleReduce #define decDoubleRemainder __decDoubleRemainder #define decDoubleRemainderNear __decDoubleRemainderNear #define decDoubleRotate __decDoubleRotate #define decDoubleSameQuantum __decDoubleSameQuantum #define decDoubleScaleB __decDoubleScaleB #define decDoubleSetCoefficient __decDoubleSetCoefficient #define decDoubleSetExponent __decDoubleSetExponent #define decDoubleShift __decDoubleShift #define decDoubleShow __decDoubleShow #define decDoubleSubtract __decDoubleSubtract #define decDoubleToBCD __decDoubleToBCD #define decDoubleToEngString __decDoubleToEngString #define decDoubleToInt32 __decDoubleToInt32 #define decDoubleToInt32Exact __decDoubleToInt32Exact #define decDoubleToIntegralExact __decDoubleToIntegralExact #define decDoubleToIntegralValue __decDoubleToIntegralValue #define decDoubleToPacked __decDoubleToPacked #define decDoubleToString __decDoubleToString #define decDoubleToUInt32 __decDoubleToUInt32 #define decDoubleToUInt32Exact __decDoubleToUInt32Exact #define decDoubleToWider __decDoubleToWider #define decDoubleVersion __decDoubleVersion #define decDoubleXor __decDoubleXor #define decDoubleZero __decDoubleZero #endif #endif libdfp-1.0.17/libdecnumber/decExcept.c000066400000000000000000000031401504475242000175440ustar00rootroot00000000000000/* Temporary library support for decimal floating point. Copyright (C) 2005-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include #include "dconfig.h" #include "decContext.h" #include "decExcept.h" /* Internal, non-documented functions for testing libgcc functions. This support is not sufficient for real use. */ static int __dfp_except_flags = 0; /* Clear the dummy exception flags. */ void __dfp_clear_except (void) { __dfp_except_flags = 0; } /* Return the dummy exception flags corresponding to the mask. */ int __dfp_test_except (int mask) { return __dfp_except_flags & mask; } /* Set dummy exception flags. */ void __dfp_raise_except (int flags) { __dfp_except_flags |= flags; } libdfp-1.0.17/libdecnumber/decExcept.h000066400000000000000000000024051504475242000175540ustar00rootroot00000000000000/* Temporary library support for decimal floating point. Copyright (C) 2006-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include #include "dconfig.h" #include "decContext.h" #define DFP_EXCEPTIONS_ENABLED 1 #define DFP_HANDLE_EXCEPTIONS(A) __dfp_raise_except(A) void __dfp_clear_except (void); int __dfp_test_except (int); void __dfp_raise_except (int); libdfp-1.0.17/libdecnumber/decLibrary.c000066400000000000000000000036721504475242000177320ustar00rootroot00000000000000/* Temporary library support for decimal floating point. Copyright (C) 2005-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "dconfig.h" #include "decContext.h" #include "decimal128.h" #include "decimal64.h" #include "decimal32.h" void __host_to_ieee_32 (_Decimal32, decimal32 *); void __host_to_ieee_64 (_Decimal64, decimal64 *); void __host_to_ieee_128 (_Decimal128, decimal128 *); extern int isinfd32 (_Decimal32); extern int isinfd64 (_Decimal64); extern int isinfd128 (_Decimal128); uint32_t __dec_byte_swap (uint32_t); int isinfd32 (_Decimal32 arg) { decNumber dn; decimal32 d32; __host_to_ieee_32 (arg, &d32); decimal32ToNumber (&d32, &dn); return (decNumberIsInfinite (&dn)); } int isinfd64 (_Decimal64 arg) { decNumber dn; decimal64 d64; __host_to_ieee_64 (arg, &d64); decimal64ToNumber (&d64, &dn); return (decNumberIsInfinite (&dn)); } int isinfd128 (_Decimal128 arg) { decNumber dn; decimal128 d128; __host_to_ieee_128 (arg, &d128); decimal128ToNumber (&d128, &dn); return (decNumberIsInfinite (&dn)); } libdfp-1.0.17/libdecnumber/decNumber.c000066400000000000000000012025601504475242000175540ustar00rootroot00000000000000/* Decimal number arithmetic module for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal Number arithmetic module */ /* ------------------------------------------------------------------ */ /* This module comprises the routines for arbitrary-precision General */ /* Decimal Arithmetic as defined in the specification which may be */ /* found on the General Decimal Arithmetic pages. It implements both */ /* the full ('extended') arithmetic and the simpler ('subset') */ /* arithmetic. */ /* */ /* Usage notes: */ /* */ /* 1. This code is ANSI C89 except: */ /* */ /* a) C99 line comments (double forward slash) are used. (Most C */ /* compilers accept these. If yours does not, a simple script */ /* can be used to convert them to ANSI C comments.) */ /* */ /* b) Types from C99 stdint.h are used. If you do not have this */ /* header file, see the User's Guide section of the decNumber */ /* documentation; this lists the necessary definitions. */ /* */ /* c) If DECDPUN>4 or DECUSE64=1, the C99 64-bit int64_t and */ /* uint64_t types may be used. To avoid these, set DECUSE64=0 */ /* and DECDPUN<=4 (see documentation). */ /* */ /* The code also conforms to C99 restrictions; in particular, */ /* strict aliasing rules are observed. */ /* */ /* 2. The decNumber format which this library uses is optimized for */ /* efficient processing of relatively short numbers; in particular */ /* it allows the use of fixed sized structures and minimizes copy */ /* and move operations. It does, however, support arbitrary */ /* precision (up to 999,999,999 digits) and arbitrary exponent */ /* range (Emax in the range 0 through 999,999,999 and Emin in the */ /* range -999,999,999 through 0). Mathematical functions (for */ /* example decNumberExp) as identified below are restricted more */ /* tightly: digits, emax, and -emin in the context must be <= */ /* DEC_MAX_MATH (999999), and their operand(s) must be within */ /* these bounds. */ /* */ /* 3. Logical functions are further restricted; their operands must */ /* be finite, positive, have an exponent of zero, and all digits */ /* must be either 0 or 1. The result will only contain digits */ /* which are 0 or 1 (and will have exponent=0 and a sign of 0). */ /* */ /* 4. Operands to operator functions are never modified unless they */ /* are also specified to be the result number (which is always */ /* permitted). Other than that case, operands must not overlap. */ /* */ /* 5. Error handling: the type of the error is ORed into the status */ /* flags in the current context (decContext structure). The */ /* SIGFPE signal is then raised if the corresponding trap-enabler */ /* flag in the decContext is set (is 1). */ /* */ /* It is the responsibility of the caller to clear the status */ /* flags as required. */ /* */ /* The result of any routine which returns a number will always */ /* be a valid number (which may be a special value, such as an */ /* Infinity or NaN). */ /* */ /* 6. The decNumber format is not an exchangeable concrete */ /* representation as it comprises fields which may be machine- */ /* dependent (packed or unpacked, or special length, for example). */ /* Canonical conversions to and from strings are provided; other */ /* conversions are available in separate modules. */ /* */ /* 7. Normally, input operands are assumed to be valid. Set DECCHECK */ /* to 1 for extended operand checking (including NULL operands). */ /* Results are undefined if a badly-formed structure (or a NULL */ /* pointer to a structure) is provided, though with DECCHECK */ /* enabled the operator routines are protected against exceptions. */ /* (Except if the result pointer is NULL, which is unrecoverable.) */ /* */ /* However, the routines will never cause exceptions if they are */ /* given well-formed operands, even if the value of the operands */ /* is inappropriate for the operation and DECCHECK is not set. */ /* (Except for SIGFPE, as and where documented.) */ /* */ /* 8. Subset arithmetic is available only if DECSUBSET is set to 1. */ /* ------------------------------------------------------------------ */ /* Implementation notes for maintenance of this module: */ /* */ /* 1. Storage leak protection: Routines which use malloc are not */ /* permitted to use return for fastpath or error exits (i.e., */ /* they follow strict structured programming conventions). */ /* Instead they have a do{}while(0); construct surrounding the */ /* code which is protected -- break may be used to exit this. */ /* Other routines can safely use the return statement inline. */ /* */ /* Storage leak accounting can be enabled using DECALLOC. */ /* */ /* 2. All loops use the for(;;) construct. Any do construct does */ /* not loop; it is for allocation protection as just described. */ /* */ /* 3. Setting status in the context must always be the very last */ /* action in a routine, as non-0 status may raise a trap and hence */ /* the call to set status may not return (if the handler uses long */ /* jump). Therefore all cleanup must be done first. In general, */ /* to achieve this status is accumulated and is only applied just */ /* before return by calling decContextSetStatus (via decStatus). */ /* */ /* Routines which allocate storage cannot, in general, use the */ /* 'top level' routines which could cause a non-returning */ /* transfer of control. The decXxxxOp routines are safe (do not */ /* call decStatus even if traps are set in the context) and should */ /* be used instead (they are also a little faster). */ /* */ /* 4. Exponent checking is minimized by allowing the exponent to */ /* grow outside its limits during calculations, provided that */ /* the decFinalize function is called later. Multiplication and */ /* division, and intermediate calculations in exponentiation, */ /* require more careful checks because of the risk of 31-bit */ /* overflow (the most negative valid exponent is -1999999997, for */ /* a 999999999-digit number with adjusted exponent of -999999999). */ /* */ /* 5. Rounding is deferred until finalization of results, with any */ /* 'off to the right' data being represented as a single digit */ /* residue (in the range -1 through 9). This avoids any double- */ /* rounding when more than one shortening takes place (for */ /* example, when a result is subnormal). */ /* */ /* 6. The digits count is allowed to rise to a multiple of DECDPUN */ /* during many operations, so whole Units are handled and exact */ /* accounting of digits is not needed. The correct digits value */ /* is found by decGetDigits, which accounts for leading zeros. */ /* This must be called before any rounding if the number of digits */ /* is not known exactly. */ /* */ /* 7. The multiply-by-reciprocal 'trick' is used for partitioning */ /* numbers up to four digits, using appropriate constants. This */ /* is not useful for longer numbers because overflow of 32 bits */ /* would lead to 4 multiplies, which is almost as expensive as */ /* a divide (unless a floating-point or 64-bit multiply is */ /* assumed to be available). */ /* */ /* 8. Unusual abbreviations that may be used in the commentary: */ /* lhs -- left hand side (operand, of an operation) */ /* lsd -- least significant digit (of coefficient) */ /* lsu -- least significant Unit (of coefficient) */ /* msd -- most significant digit (of coefficient) */ /* msi -- most significant item (in an array) */ /* msu -- most significant Unit (of coefficient) */ /* rhs -- right hand side (operand, of an operation) */ /* +ve -- positive */ /* -ve -- negative */ /* ** -- raise to the power */ /* ------------------------------------------------------------------ */ #include /* for malloc, free, etc. */ #include /* for printf [if needed] */ #include /* for strcpy */ #include /* for lower */ #include "dconfig.h" /* for GCC definitions */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ /* Constants */ /* Public lookup table used by the D2U macro */ const uByte d2utable[DECMAXD2U+1]=D2UTABLE; #define DECVERB 1 /* set to 1 for verbose DECCHECK */ #define powers DECPOWERS /* old internal name */ /* Local constants */ #define DIVIDE 0x80 /* Divide operators */ #define REMAINDER 0x40 /* .. */ #define DIVIDEINT 0x20 /* .. */ #define REMNEAR 0x10 /* .. */ #define COMPARE 0x01 /* Compare operators */ #define COMPMAX 0x02 /* .. */ #define COMPMIN 0x03 /* .. */ #define COMPTOTAL 0x04 /* .. */ #define COMPNAN 0x05 /* .. [NaN processing] */ #define COMPSIG 0x06 /* .. [signaling COMPARE] */ #define COMPMAXMAG 0x07 /* .. */ #define COMPMINMAG 0x08 /* .. */ #define DEC_sNaN 0x40000000 /* local status: sNaN signal */ #define BADINT (Int)0x80000000 /* most-negative Int; error indicator */ /* Next two indicate an integer >= 10**6, and its parity (bottom bit) */ #define BIGEVEN (Int)0x80000002 #define BIGODD (Int)0x80000003 static Unit uarrone[1]={1}; /* Unit array of 1, used for incrementing */ /* Granularity-dependent code */ #if DECDPUN<=4 #define eInt Int /* extended integer */ #define ueInt uInt /* unsigned extended integer */ /* Constant multipliers for divide-by-power-of five using reciprocal */ /* multiply, after removing powers of 2 by shifting, and final shift */ /* of 17 [we only need up to **4] */ static const uInt multies[]={131073, 26215, 5243, 1049, 210}; /* QUOT10 -- macro to return the quotient of unit u divided by 10**n */ #define QUOT10(u, n) ((((uInt)(u)>>(n))*multies[n])>>17) #else /* For DECDPUN>4 non-ANSI-89 64-bit types are needed. */ #if !DECUSE64 #error decNumber.c: DECUSE64 must be 1 when DECDPUN>4 #endif #define eInt Long /* extended integer */ #define ueInt uLong /* unsigned extended integer */ #endif /* Local routines */ static decNumber * decAddOp(decNumber *, const decNumber *, const decNumber *, decContext *, uByte, uInt *); static Flag decBiStr(const char *, const char *, const char *); static uInt decCheckMath(const decNumber *, decContext *, uInt *); static void decApplyRound(decNumber *, decContext *, Int, uInt *); static Int decCompare(const decNumber *lhs, const decNumber *rhs, Flag); static decNumber * decCompareOp(decNumber *, const decNumber *, const decNumber *, decContext *, Flag, uInt *); static void decCopyFit(decNumber *, const decNumber *, decContext *, Int *, uInt *); static decNumber * decDecap(decNumber *, Int); static decNumber * decDivideOp(decNumber *, const decNumber *, const decNumber *, decContext *, Flag, uInt *); static decNumber * decExpOp(decNumber *, const decNumber *, decContext *, uInt *); static void decFinalize(decNumber *, decContext *, Int *, uInt *); static Int decGetDigits(Unit *, Int); static Int decGetInt(const decNumber *); static decNumber * decLnOp(decNumber *, const decNumber *, decContext *, uInt *); static decNumber * decMultiplyOp(decNumber *, const decNumber *, const decNumber *, decContext *, uInt *); static decNumber * decNaNs(decNumber *, const decNumber *, const decNumber *, decContext *, uInt *); static decNumber * decQuantizeOp(decNumber *, const decNumber *, const decNumber *, decContext *, Flag, uInt *); static void decReverse(Unit *, Unit *); static void decSetCoeff(decNumber *, decContext *, const Unit *, Int, Int *, uInt *); static void decSetMaxValue(decNumber *, decContext *); static void decSetOverflow(decNumber *, decContext *, uInt *); static void decSetSubnormal(decNumber *, decContext *, Int *, uInt *); static Int decShiftToLeast(Unit *, Int, Int); static Int decShiftToMost(Unit *, Int, Int); static void decStatus(decNumber *, uInt, decContext *); static void decToString(const decNumber *, char[], Flag); static decNumber * decTrim(decNumber *, decContext *, Flag, Flag, Int *); static Int decUnitAddSub(const Unit *, Int, const Unit *, Int, Int, Unit *, Int); static Int decUnitCompare(const Unit *, Int, const Unit *, Int, Int); #if !DECSUBSET /* decFinish == decFinalize when no subset arithmetic needed */ #define decFinish(a,b,c,d) decFinalize(a,b,c,d) #else static void decFinish(decNumber *, decContext *, Int *, uInt *); static decNumber * decRoundOperand(const decNumber *, decContext *, uInt *); #endif /* Local macros */ /* masked special-values bits */ #define SPECIALARG (rhs->bits & DECSPECIAL) #define SPECIALARGS ((lhs->bits | rhs->bits) & DECSPECIAL) /* Diagnostic macros, etc. */ #if DECALLOC /* Handle malloc/free accounting. If enabled, our accountable routines */ /* are used; otherwise the code just goes straight to the system malloc */ /* and free routines. */ #define malloc(a) decMalloc(a) #define free(a) decFree(a) #define DECFENCE 0x5a /* corruption detector */ /* 'Our' malloc and free: */ static void *decMalloc(size_t); static void decFree(void *); uInt decAllocBytes=0; /* count of bytes allocated */ /* Note that DECALLOC code only checks for storage buffer overflow. */ /* To check for memory leaks, the decAllocBytes variable must be */ /* checked to be 0 at appropriate times (e.g., after the test */ /* harness completes a set of tests). This checking may be unreliable */ /* if the testing is done in a multi-thread environment. */ #endif #if DECCHECK /* Optional checking routines. Enabling these means that decNumber */ /* and decContext operands to operator routines are checked for */ /* correctness. This roughly doubles the execution time of the */ /* fastest routines (and adds 600+ bytes), so should not normally be */ /* used in 'production'. */ /* decCheckInexact is used to check that inexact results have a full */ /* complement of digits (where appropriate -- this is not the case */ /* for Quantize, for example) */ #define DECUNRESU ((decNumber *)(void *)0xffffffff) #define DECUNUSED ((const decNumber *)(void *)0xffffffff) #define DECUNCONT ((decContext *)(void *)(0xffffffff)) static Flag decCheckOperands(decNumber *, const decNumber *, const decNumber *, decContext *); static Flag decCheckNumber(const decNumber *); static void decCheckInexact(const decNumber *, decContext *); #endif #if DECTRACE || DECCHECK /* Optional trace/debugging routines (may or may not be used) */ void decNumberShow(const decNumber *); /* displays the components of a number */ static void decDumpAr(char, const Unit *, Int); #endif /* ================================================================== */ /* Conversions */ /* ================================================================== */ /* ------------------------------------------------------------------ */ /* from-int32 -- conversion from Int or uInt */ /* */ /* dn is the decNumber to receive the integer */ /* in or uin is the integer to be converted */ /* returns dn */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decNumber * decNumberFromInt32(decNumber *dn, Int in) { uInt unsig; if (in>=0) unsig=in; else { /* negative (possibly BADINT) */ if (in==BADINT) unsig=(uInt)1073741824*2; /* special case */ else unsig=-in; /* invert */ } /* in is now positive */ decNumberFromUInt32(dn, unsig); if (in<0) dn->bits=DECNEG; /* sign needed */ return dn; } /* decNumberFromInt32 */ decNumber * decNumberFromUInt32(decNumber *dn, uInt uin) { Unit *up; /* work pointer */ decNumberZero(dn); /* clean */ if (uin==0) return dn; /* [or decGetDigits bad call] */ for (up=dn->lsu; uin>0; up++) { *up=(Unit)(uin%(DECDPUNMAX+1)); uin=uin/(DECDPUNMAX+1); } dn->digits=decGetDigits(dn->lsu, up-dn->lsu); return dn; } /* decNumberFromUInt32 */ /* ------------------------------------------------------------------ */ /* to-int32 -- conversion to Int or uInt */ /* */ /* dn is the decNumber to convert */ /* set is the context for reporting errors */ /* returns the converted decNumber, or 0 if Invalid is set */ /* */ /* Invalid is set if the decNumber does not have exponent==0 or if */ /* it is a NaN, Infinite, or out-of-range. */ /* ------------------------------------------------------------------ */ Int decNumberToInt32(const decNumber *dn, decContext *set) { #if DECCHECK if (decCheckOperands(DECUNRESU, DECUNUSED, dn, set)) return 0; #endif /* special or too many digits, or bad exponent */ if (dn->bits&DECSPECIAL || dn->digits>10 || dn->exponent!=0) ; /* bad */ else { /* is a finite integer with 10 or fewer digits */ Int d; /* work */ const Unit *up; /* .. */ uInt hi=0, lo; /* .. */ up=dn->lsu; /* -> lsu */ lo=*up; /* get 1 to 9 digits */ #if DECDPUN>1 /* split to higher */ hi=lo/10; lo=lo%10; #endif up++; /* collect remaining Units, if any, into hi */ for (d=DECDPUN; ddigits; up++, d+=DECDPUN) hi+=*up*powers[d-1]; /* now low has the lsd, hi the remainder */ if (hi>214748364 || (hi==214748364 && lo>7)) { /* out of range? */ /* most-negative is a reprieve */ if (dn->bits&DECNEG && hi==214748364 && lo==8) return 0x80000000; /* bad -- drop through */ } else { /* in-range always */ Int i=X10(hi)+lo; if (dn->bits&DECNEG) return -i; return i; } } /* integer */ decContextSetStatus(set, DEC_Invalid_operation); /* [may not return] */ return 0; } /* decNumberToInt32 */ uInt decNumberToUInt32(const decNumber *dn, decContext *set) { #if DECCHECK if (decCheckOperands(DECUNRESU, DECUNUSED, dn, set)) return 0; #endif /* special or too many digits, or bad exponent, or negative (<0) */ if (dn->bits&DECSPECIAL || dn->digits>10 || dn->exponent!=0 || (dn->bits&DECNEG && !ISZERO(dn))); /* bad */ else { /* is a finite integer with 10 or fewer digits */ Int d; /* work */ const Unit *up; /* .. */ uInt hi=0, lo; /* .. */ up=dn->lsu; /* -> lsu */ lo=*up; /* get 1 to 9 digits */ #if DECDPUN>1 /* split to higher */ hi=lo/10; lo=lo%10; #endif up++; /* collect remaining Units, if any, into hi */ for (d=DECDPUN; ddigits; up++, d+=DECDPUN) hi+=*up*powers[d-1]; /* now low has the lsd, hi the remainder */ if (hi>429496729 || (hi==429496729 && lo>5)) ; /* no reprieve possible */ else return X10(hi)+lo; } /* integer */ decContextSetStatus(set, DEC_Invalid_operation); /* [may not return] */ return 0; } /* decNumberToUInt32 */ /* ------------------------------------------------------------------ */ /* to-scientific-string -- conversion to numeric string */ /* to-engineering-string -- conversion to numeric string */ /* */ /* decNumberToString(dn, string); */ /* decNumberToEngString(dn, string); */ /* */ /* dn is the decNumber to convert */ /* string is the string where the result will be laid out */ /* */ /* string must be at least dn->digits+14 characters long */ /* */ /* No error is possible, and no status can be set. */ /* ------------------------------------------------------------------ */ char * decNumberToString(const decNumber *dn, char *string){ decToString(dn, string, 0); return string; } /* DecNumberToString */ char * decNumberToEngString(const decNumber *dn, char *string){ decToString(dn, string, 1); return string; } /* DecNumberToEngString */ /* ------------------------------------------------------------------ */ /* to-number -- conversion from numeric string */ /* */ /* decNumberFromString -- convert string to decNumber */ /* dn -- the number structure to fill */ /* chars[] -- the string to convert ('\0' terminated) */ /* set -- the context used for processing any error, */ /* determining the maximum precision available */ /* (set.digits), determining the maximum and minimum */ /* exponent (set.emax and set.emin), determining if */ /* extended values are allowed, and checking the */ /* rounding mode if overflow occurs or rounding is */ /* needed. */ /* */ /* The length of the coefficient and the size of the exponent are */ /* checked by this routine, so the correct error (Underflow or */ /* Overflow) can be reported or rounding applied, as necessary. */ /* */ /* If bad syntax is detected, the result will be a quiet NaN. */ /* ------------------------------------------------------------------ */ decNumber * decNumberFromString(decNumber *dn, const char chars[], decContext *set) { Int exponent=0; /* working exponent [assume 0] */ uByte bits=0; /* working flags [assume +ve] */ Unit *res; /* where result will be built */ Unit resbuff[SD2U(DECBUFFER+9)];/* local buffer in case need temporary */ /* [+9 allows for ln() constants] */ Unit *allocres=NULL; /* -> allocated result, iff allocated */ Int d=0; /* count of digits found in decimal part */ const char *dotchar=NULL; /* where dot was found */ const char *cfirst=chars; /* -> first character of decimal part */ const char *last=NULL; /* -> last digit of decimal part */ const char *c; /* work */ Unit *up; /* .. */ #if DECDPUN>1 Int cut, out; /* .. */ #endif Int residue; /* rounding residue */ uInt status=0; /* error code */ #if DECCHECK if (decCheckOperands(DECUNRESU, DECUNUSED, DECUNUSED, set)) return decNumberZero(dn); #endif do { /* status & malloc protection */ for (c=chars;; c++) { /* -> input character */ if (*c>='0' && *c<='9') { /* test for Arabic digit */ last=c; d++; /* count of real digits */ continue; /* still in decimal part */ } if (*c=='.' && dotchar==NULL) { /* first '.' */ dotchar=c; /* record offset into decimal part */ if (c==cfirst) cfirst++; /* first digit must follow */ continue;} if (c==chars) { /* first in string... */ if (*c=='-') { /* valid - sign */ cfirst++; bits=DECNEG; continue;} if (*c=='+') { /* valid + sign */ cfirst++; continue;} } /* *c is not a digit, or a valid +, -, or '.' */ break; } /* c */ if (last==NULL) { /* no digits yet */ status=DEC_Conversion_syntax;/* assume the worst */ if (*c=='\0') break; /* and no more to come... */ #if DECSUBSET /* if subset then infinities and NaNs are not allowed */ if (!set->extended) break; /* hopeless */ #endif /* Infinities and NaNs are possible, here */ if (dotchar!=NULL) break; /* .. unless had a dot */ decNumberZero(dn); /* be optimistic */ if (decBiStr(c, "infinity", "INFINITY") || decBiStr(c, "inf", "INF")) { dn->bits=bits | DECINF; status=0; /* is OK */ break; /* all done */ } /* a NaN expected */ /* 2003.09.10 NaNs are now permitted to have a sign */ dn->bits=bits | DECNAN; /* assume simple NaN */ if (*c=='s' || *c=='S') { /* looks like an sNaN */ c++; dn->bits=bits | DECSNAN; } if (*c!='n' && *c!='N') break; /* check caseless "NaN" */ c++; if (*c!='a' && *c!='A') break; /* .. */ c++; if (*c!='n' && *c!='N') break; /* .. */ c++; /* now either nothing, or nnnn payload, expected */ /* -> start of integer and skip leading 0s [including plain 0] */ for (cfirst=c; *cfirst=='0';) cfirst++; if (*cfirst=='\0') { /* "NaN" or "sNaN", maybe with all 0s */ status=0; /* it's good */ break; /* .. */ } /* something other than 0s; setup last and d as usual [no dots] */ for (c=cfirst;; c++, d++) { if (*c<'0' || *c>'9') break; /* test for Arabic digit */ last=c; } if (*c!='\0') break; /* not all digits */ if (d>set->digits-1) { /* [NB: payload in a decNumber can be full length unless */ /* clamped, in which case can only be digits-1] */ if (set->clamp) break; if (d>set->digits) break; } /* too many digits? */ /* good; drop through to convert the integer to coefficient */ status=0; /* syntax is OK */ bits=dn->bits; /* for copy-back */ } /* last==NULL */ else if (*c!='\0') { /* more to process... */ /* had some digits; exponent is only valid sequence now */ Flag nege; /* 1=negative exponent */ const char *firstexp; /* -> first significant exponent digit */ status=DEC_Conversion_syntax;/* assume the worst */ if (*c!='e' && *c!='E') break; /* Found 'e' or 'E' -- now process explicit exponent */ /* 1998.07.11: sign no longer required */ nege=0; c++; /* to (possible) sign */ if (*c=='-') {nege=1; c++;} else if (*c=='+') c++; if (*c=='\0') break; for (; *c=='0' && *(c+1)!='\0';) c++; /* strip insignificant zeros */ firstexp=c; /* save exponent digit place */ for (; ;c++) { if (*c<'0' || *c>'9') break; /* not a digit */ exponent=X10(exponent)+(Int)*c-(Int)'0'; } /* c */ /* if not now on a '\0', *c must not be a digit */ if (*c!='\0') break; /* (this next test must be after the syntax checks) */ /* if it was too long the exponent may have wrapped, so check */ /* carefully and set it to a certain overflow if wrap possible */ if (c>=firstexp+9+1) { if (c>firstexp+9+1 || *firstexp>'1') exponent=DECNUMMAXE*2; /* [up to 1999999999 is OK, for example 1E-1000000998] */ } if (nege) exponent=-exponent; /* was negative */ status=0; /* is OK */ } /* stuff after digits */ /* Here when whole string has been inspected; syntax is good */ /* cfirst->first digit (never dot), last->last digit (ditto) */ /* strip leading zeros/dot [leave final 0 if all 0's] */ if (*cfirst=='0') { /* [cfirst has stepped over .] */ for (c=cfirst; cextended) { decNumberZero(dn); /* clean result */ break; /* [could be return] */ } #endif } /* at least one leading 0 */ /* Handle decimal point... */ if (dotchar!=NULL && dotchardigits) res=dn->lsu; /* fits into supplied decNumber */ else { /* rounding needed */ Int needbytes=D2U(d)*sizeof(Unit);/* bytes needed */ res=resbuff; /* assume use local buffer */ if (needbytes>(Int)sizeof(resbuff)) { /* too big for local */ allocres=(Unit *)malloc(needbytes); if (allocres==NULL) {status|=DEC_Insufficient_storage; break;} res=allocres; } } /* res now -> number lsu, buffer, or allocated storage for Unit array */ /* Place the coefficient into the selected Unit array */ /* [this is often 70% of the cost of this function when DECDPUN>1] */ #if DECDPUN>1 out=0; /* accumulator */ up=res+D2U(d)-1; /* -> msu */ cut=d-(up-res)*DECDPUN; /* digits in top unit */ for (c=cfirst;; c++) { /* along the digits */ if (*c=='.') continue; /* ignore '.' [don't decrement cut] */ out=X10(out)+(Int)*c-(Int)'0'; if (c==last) break; /* done [never get to trailing '.'] */ cut--; if (cut>0) continue; /* more for this unit */ *up=(Unit)out; /* write unit */ up--; /* prepare for unit below.. */ cut=DECDPUN; /* .. */ out=0; /* .. */ } /* c */ *up=(Unit)out; /* write lsu */ #else /* DECDPUN==1 */ up=res; /* -> lsu */ for (c=last; c>=cfirst; c--) { /* over each character, from least */ if (*c=='.') continue; /* ignore . [don't step up] */ *up=(Unit)((Int)*c-(Int)'0'); up++; } /* c */ #endif dn->bits=bits; dn->exponent=exponent; dn->digits=d; /* if not in number (too long) shorten into the number */ if (d>set->digits) { residue=0; decSetCoeff(dn, set, res, d, &residue, &status); /* always check for overflow or subnormal and round as needed */ decFinalize(dn, set, &residue, &status); } else { /* no rounding, but may still have overflow or subnormal */ /* [these tests are just for performance; finalize repeats them] */ if ((dn->exponent-1emin-dn->digits) || (dn->exponent-1>set->emax-set->digits)) { residue=0; decFinalize(dn, set, &residue, &status); } } /* decNumberShow(dn); */ } while(0); /* [for break] */ free(allocres); /* drop any storage used */ if (status!=0) decStatus(dn, status, set); return dn; } /* decNumberFromString */ /* ================================================================== */ /* Operators */ /* ================================================================== */ /* ------------------------------------------------------------------ */ /* decNumberAbs -- absolute value operator */ /* */ /* This computes C = abs(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context */ /* */ /* See also decNumberCopyAbs for a quiet bitwise version of this. */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ /* This has the same effect as decNumberPlus unless A is negative, */ /* in which case it has the same effect as decNumberMinus. */ /* ------------------------------------------------------------------ */ decNumber * decNumberAbs(decNumber *res, const decNumber *rhs, decContext *set) { decNumber dzero; /* for 0 */ uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif decNumberZero(&dzero); /* set 0 */ dzero.exponent=rhs->exponent; /* [no coefficient expansion] */ decAddOp(res, &dzero, rhs, set, (uByte)(rhs->bits & DECNEG), &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberAbs */ /* ------------------------------------------------------------------ */ /* decNumberAdd -- add two Numbers */ /* */ /* This computes C = A + B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X+X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ /* This just calls the routine shared with Subtract */ decNumber * decNumberAdd(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decAddOp(res, lhs, rhs, set, 0, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberAdd */ /* ------------------------------------------------------------------ */ /* decNumberAnd -- AND two Numbers, digitwise */ /* */ /* This computes C = A & B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X&X) */ /* lhs is A */ /* rhs is B */ /* set is the context (used for result length and error report) */ /* */ /* C must have space for set->digits digits. */ /* */ /* Logical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* ------------------------------------------------------------------ */ decNumber * decNumberAnd(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { const Unit *ua, *ub; /* -> operands */ const Unit *msua, *msub; /* -> operand msus */ Unit *uc, *msuc; /* -> result and its msu */ Int msudigs; /* digits in res msu */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif if (lhs->exponent!=0 || decNumberIsSpecial(lhs) || decNumberIsNegative(lhs) || rhs->exponent!=0 || decNumberIsSpecial(rhs) || decNumberIsNegative(rhs)) { decStatus(res, DEC_Invalid_operation, set); return res; } /* operands are valid */ ua=lhs->lsu; /* bottom-up */ ub=rhs->lsu; /* .. */ uc=res->lsu; /* .. */ msua=ua+D2U(lhs->digits)-1; /* -> msu of lhs */ msub=ub+D2U(rhs->digits)-1; /* -> msu of rhs */ msuc=uc+D2U(set->digits)-1; /* -> msu of result */ msudigs=MSUDIGITS(set->digits); /* [faster than remainder] */ for (; uc<=msuc; ua++, ub++, uc++) { /* Unit loop */ Unit a, b; /* extract units */ if (ua>msua) a=0; else a=*ua; if (ub>msub) b=0; else b=*ub; *uc=0; /* can now write back */ if (a|b) { /* maybe 1 bits to examine */ Int i, j; *uc=0; /* can now write back */ /* This loop could be unrolled and/or use BIN2BCD tables */ for (i=0; i1) { decStatus(res, DEC_Invalid_operation, set); return res; } if (uc==msuc && i==msudigs-1) break; /* just did final digit */ } /* each digit */ } /* both OK */ } /* each unit */ /* [here uc-1 is the msu of the result] */ res->digits=decGetDigits(res->lsu, uc-res->lsu); res->exponent=0; /* integer */ res->bits=0; /* sign=0 */ return res; /* [no status to set] */ } /* decNumberAnd */ /* ------------------------------------------------------------------ */ /* decNumberCompare -- compare two Numbers */ /* */ /* This computes C = A ? B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for one digit (or NaN). */ /* ------------------------------------------------------------------ */ decNumber * decNumberCompare(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decCompareOp(res, lhs, rhs, set, COMPARE, &status); if (status!=0) decStatus(res, status, set); return res; } /* decNumberCompare */ /* ------------------------------------------------------------------ */ /* decNumberCompareSignal -- compare, signalling on all NaNs */ /* */ /* This computes C = A ? B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for one digit (or NaN). */ /* ------------------------------------------------------------------ */ decNumber * decNumberCompareSignal(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decCompareOp(res, lhs, rhs, set, COMPSIG, &status); if (status!=0) decStatus(res, status, set); return res; } /* decNumberCompareSignal */ /* ------------------------------------------------------------------ */ /* decNumberCompareTotal -- compare two Numbers, using total ordering */ /* */ /* This computes C = A ? B, under total ordering */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for one digit; the result will always be one of */ /* -1, 0, or 1. */ /* ------------------------------------------------------------------ */ decNumber * decNumberCompareTotal(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decCompareOp(res, lhs, rhs, set, COMPTOTAL, &status); if (status!=0) decStatus(res, status, set); return res; } /* decNumberCompareTotal */ /* ------------------------------------------------------------------ */ /* decNumberCompareTotalMag -- compare, total ordering of magnitudes */ /* */ /* This computes C = |A| ? |B|, under total ordering */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for one digit; the result will always be one of */ /* -1, 0, or 1. */ /* ------------------------------------------------------------------ */ decNumber * decNumberCompareTotalMag(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ uInt needbytes; /* for space calculations */ decNumber bufa[D2N(DECBUFFER+1)];/* +1 in case DECBUFFER=0 */ decNumber *allocbufa=NULL; /* -> allocated bufa, iff allocated */ decNumber bufb[D2N(DECBUFFER+1)]; decNumber *allocbufb=NULL; /* -> allocated bufb, iff allocated */ decNumber *a, *b; /* temporary pointers */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif do { /* protect allocated storage */ /* if either is negative, take a copy and absolute */ if (decNumberIsNegative(lhs)) { /* lhs<0 */ a=bufa; needbytes=sizeof(decNumber)+(D2U(lhs->digits)-1)*sizeof(Unit); if (needbytes>sizeof(bufa)) { /* need malloc space */ allocbufa=(decNumber *)malloc(needbytes); if (allocbufa==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} a=allocbufa; /* use the allocated space */ } decNumberCopy(a, lhs); /* copy content */ a->bits&=~DECNEG; /* .. and clear the sign */ lhs=a; /* use copy from here on */ } if (decNumberIsNegative(rhs)) { /* rhs<0 */ b=bufb; needbytes=sizeof(decNumber)+(D2U(rhs->digits)-1)*sizeof(Unit); if (needbytes>sizeof(bufb)) { /* need malloc space */ allocbufb=(decNumber *)malloc(needbytes); if (allocbufb==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} b=allocbufb; /* use the allocated space */ } decNumberCopy(b, rhs); /* copy content */ b->bits&=~DECNEG; /* .. and clear the sign */ rhs=b; /* use copy from here on */ } decCompareOp(res, lhs, rhs, set, COMPTOTAL, &status); } while(0); /* end protected */ free(allocbufa); /* drop any storage used */ free(allocbufb); /* .. */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberCompareTotalMag */ /* ------------------------------------------------------------------ */ /* decNumberDivide -- divide one number by another */ /* */ /* This computes C = A / B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X/X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberDivide(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decDivideOp(res, lhs, rhs, set, DIVIDE, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberDivide */ /* ------------------------------------------------------------------ */ /* decNumberDivideInteger -- divide and return integer quotient */ /* */ /* This computes C = A # B, where # is the integer divide operator */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X#X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberDivideInteger(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decDivideOp(res, lhs, rhs, set, DIVIDEINT, &status); if (status!=0) decStatus(res, status, set); return res; } /* decNumberDivideInteger */ /* ------------------------------------------------------------------ */ /* decNumberExp -- exponentiation */ /* */ /* This computes C = exp(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context; note that rounding mode has no effect */ /* */ /* C must have space for set->digits digits. */ /* */ /* Mathematical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* */ /* Finite results will always be full precision and Inexact, except */ /* when A is a zero or -Infinity (giving 1 or 0 respectively). */ /* */ /* An Inexact result is rounded using DEC_ROUND_HALF_EVEN; it will */ /* almost always be correctly rounded, but may be up to 1 ulp in */ /* error in rare cases. */ /* ------------------------------------------------------------------ */ /* This is a wrapper for decExpOp which can handle the slightly wider */ /* (double) range needed by Ln (which has to be able to calculate */ /* exp(-a) where a can be the tiniest number (Ntiny). */ /* ------------------------------------------------------------------ */ decNumber * decNumberExp(decNumber *res, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ #if DECSUBSET decNumber *allocrhs=NULL; /* non-NULL if rounded rhs allocated */ #endif #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif /* Check restrictions; these restrictions ensure that if h=8 (see */ /* decExpOp) then the result will either overflow or underflow to 0. */ /* Other math functions restrict the input range, too, for inverses. */ /* If not violated then carry out the operation. */ if (!decCheckMath(rhs, set, &status)) do { /* protect allocation */ #if DECSUBSET if (!set->extended) { /* reduce operand and set lostDigits status, as needed */ if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, &status); if (allocrhs==NULL) break; rhs=allocrhs; } } #endif decExpOp(res, rhs, set, &status); } while(0); /* end protected */ #if DECSUBSET free(allocrhs); /* drop any storage used */ #endif /* apply significant status */ if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberExp */ /* ------------------------------------------------------------------ */ /* decNumberFMA -- fused multiply add */ /* */ /* This computes D = (A * B) + C with only one rounding */ /* */ /* res is D, the result. D may be A or B or C (e.g., X=FMA(X,X,X)) */ /* lhs is A */ /* rhs is B */ /* fhs is C [far hand side] */ /* set is the context */ /* */ /* Mathematical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberFMA(decNumber *res, const decNumber *lhs, const decNumber *rhs, const decNumber *fhs, decContext *set) { uInt status=0; /* accumulator */ decContext dcmul; /* context for the multiplication */ uInt needbytes; /* for space calculations */ decNumber bufa[D2N(DECBUFFER*2+1)]; decNumber *allocbufa=NULL; /* -> allocated bufa, iff allocated */ decNumber *acc; /* accumulator pointer */ decNumber dzero; /* work */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; if (decCheckOperands(res, fhs, DECUNUSED, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* [undefined if subset] */ status|=DEC_Invalid_operation; break;} #endif /* Check math restrictions [these ensure no overflow or underflow] */ if ((!decNumberIsSpecial(lhs) && decCheckMath(lhs, set, &status)) || (!decNumberIsSpecial(rhs) && decCheckMath(rhs, set, &status)) || (!decNumberIsSpecial(fhs) && decCheckMath(fhs, set, &status))) break; /* set up context for multiply */ dcmul=*set; dcmul.digits=lhs->digits+rhs->digits; /* just enough */ /* [The above may be an over-estimate for subset arithmetic, but that's OK] */ dcmul.emax=DEC_MAX_EMAX; /* effectively unbounded .. */ dcmul.emin=DEC_MIN_EMIN; /* [thanks to Math restrictions] */ /* set up decNumber space to receive the result of the multiply */ acc=bufa; /* may fit */ needbytes=sizeof(decNumber)+(D2U(dcmul.digits)-1)*sizeof(Unit); if (needbytes>sizeof(bufa)) { /* need malloc space */ allocbufa=(decNumber *)malloc(needbytes); if (allocbufa==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} acc=allocbufa; /* use the allocated space */ } /* multiply with extended range and necessary precision */ /*printf("emin=%ld\n", dcmul.emin); */ decMultiplyOp(acc, lhs, rhs, &dcmul, &status); /* Only Invalid operation (from sNaN or Inf * 0) is possible in */ /* status; if either is seen than ignore fhs (in case it is */ /* another sNaN) and set acc to NaN unless we had an sNaN */ /* [decMultiplyOp leaves that to caller] */ /* Note sNaN has to go through addOp to shorten payload if */ /* necessary */ if ((status&DEC_Invalid_operation)!=0) { if (!(status&DEC_sNaN)) { /* but be true invalid */ decNumberZero(res); /* acc not yet set */ res->bits=DECNAN; break; } decNumberZero(&dzero); /* make 0 (any non-NaN would do) */ fhs=&dzero; /* use that */ } #if DECCHECK else { /* multiply was OK */ if (status!=0) printf("Status=%08lx after FMA multiply\n", (LI)status); } #endif /* add the third operand and result -> res, and all is done */ decAddOp(res, acc, fhs, set, 0, &status); } while(0); /* end protected */ free(allocbufa); /* drop any storage used */ if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberFMA */ /* ------------------------------------------------------------------ */ /* decNumberInvert -- invert a Number, digitwise */ /* */ /* This computes C = ~A */ /* */ /* res is C, the result. C may be A (e.g., X=~X) */ /* rhs is A */ /* set is the context (used for result length and error report) */ /* */ /* C must have space for set->digits digits. */ /* */ /* Logical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* ------------------------------------------------------------------ */ decNumber * decNumberInvert(decNumber *res, const decNumber *rhs, decContext *set) { const Unit *ua, *msua; /* -> operand and its msu */ Unit *uc, *msuc; /* -> result and its msu */ Int msudigs; /* digits in res msu */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif if (rhs->exponent!=0 || decNumberIsSpecial(rhs) || decNumberIsNegative(rhs)) { decStatus(res, DEC_Invalid_operation, set); return res; } /* operand is valid */ ua=rhs->lsu; /* bottom-up */ uc=res->lsu; /* .. */ msua=ua+D2U(rhs->digits)-1; /* -> msu of rhs */ msuc=uc+D2U(set->digits)-1; /* -> msu of result */ msudigs=MSUDIGITS(set->digits); /* [faster than remainder] */ for (; uc<=msuc; ua++, uc++) { /* Unit loop */ Unit a; /* extract unit */ Int i, j; /* work */ if (ua>msua) a=0; else a=*ua; *uc=0; /* can now write back */ /* always need to examine all bits in rhs */ /* This loop could be unrolled and/or use BIN2BCD tables */ for (i=0; i1) { decStatus(res, DEC_Invalid_operation, set); return res; } if (uc==msuc && i==msudigs-1) break; /* just did final digit */ } /* each digit */ } /* each unit */ /* [here uc-1 is the msu of the result] */ res->digits=decGetDigits(res->lsu, uc-res->lsu); res->exponent=0; /* integer */ res->bits=0; /* sign=0 */ return res; /* [no status to set] */ } /* decNumberInvert */ /* ------------------------------------------------------------------ */ /* decNumberLn -- natural logarithm */ /* */ /* This computes C = ln(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context; note that rounding mode has no effect */ /* */ /* C must have space for set->digits digits. */ /* */ /* Notable cases: */ /* A<0 -> Invalid */ /* A=0 -> -Infinity (Exact) */ /* A=+Infinity -> +Infinity (Exact) */ /* A=1 exactly -> 0 (Exact) */ /* */ /* Mathematical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* */ /* An Inexact result is rounded using DEC_ROUND_HALF_EVEN; it will */ /* almost always be correctly rounded, but may be up to 1 ulp in */ /* error in rare cases. */ /* ------------------------------------------------------------------ */ /* This is a wrapper for decLnOp which can handle the slightly wider */ /* (+11) range needed by Ln, Log10, etc. (which may have to be able */ /* to calculate at p+e+2). */ /* ------------------------------------------------------------------ */ decNumber * decNumberLn(decNumber *res, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ #if DECSUBSET decNumber *allocrhs=NULL; /* non-NULL if rounded rhs allocated */ #endif #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif /* Check restrictions; this is a math function; if not violated */ /* then carry out the operation. */ if (!decCheckMath(rhs, set, &status)) do { /* protect allocation */ #if DECSUBSET if (!set->extended) { /* reduce operand and set lostDigits status, as needed */ if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, &status); if (allocrhs==NULL) break; rhs=allocrhs; } /* special check in subset for rhs=0 */ if (ISZERO(rhs)) { /* +/- zeros -> error */ status|=DEC_Invalid_operation; break;} } /* extended=0 */ #endif decLnOp(res, rhs, set, &status); } while(0); /* end protected */ #if DECSUBSET free(allocrhs); /* drop any storage used */ #endif /* apply significant status */ if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberLn */ /* ------------------------------------------------------------------ */ /* decNumberLogB - get adjusted exponent, by 754 rules */ /* */ /* This computes C = adjustedexponent(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context, used only for digits and status */ /* */ /* C must have space for 10 digits (A might have 10**9 digits and */ /* an exponent of +999999999, or one digit and an exponent of */ /* -1999999999). */ /* */ /* This returns the adjusted exponent of A after (in theory) padding */ /* with zeros on the right to set->digits digits while keeping the */ /* same value. The exponent is not limited by emin/emax. */ /* */ /* Notable cases: */ /* A<0 -> Use |A| */ /* A=0 -> -Infinity (Division by zero) */ /* A=Infinite -> +Infinity (Exact) */ /* A=1 exactly -> 0 (Exact) */ /* NaNs are propagated as usual */ /* ------------------------------------------------------------------ */ decNumber * decNumberLogB(decNumber *res, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif /* NaNs as usual; Infinities return +Infinity; 0->oops */ if (decNumberIsNaN(rhs)) decNaNs(res, rhs, NULL, set, &status); else if (decNumberIsInfinite(rhs)) decNumberCopyAbs(res, rhs); else if (decNumberIsZero(rhs)) { decNumberZero(res); /* prepare for Infinity */ res->bits=DECNEG|DECINF; /* -Infinity */ status|=DEC_Division_by_zero; /* as per 754 */ } else { /* finite non-zero */ Int ae=rhs->exponent+rhs->digits-1; /* adjusted exponent */ decNumberFromInt32(res, ae); /* lay it out */ } if (status!=0) decStatus(res, status, set); return res; } /* decNumberLogB */ /* ------------------------------------------------------------------ */ /* decNumberLog10 -- logarithm in base 10 */ /* */ /* This computes C = log10(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context; note that rounding mode has no effect */ /* */ /* C must have space for set->digits digits. */ /* */ /* Notable cases: */ /* A<0 -> Invalid */ /* A=0 -> -Infinity (Exact) */ /* A=+Infinity -> +Infinity (Exact) */ /* A=10**n (if n is an integer) -> n (Exact) */ /* */ /* Mathematical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* */ /* An Inexact result is rounded using DEC_ROUND_HALF_EVEN; it will */ /* almost always be correctly rounded, but may be up to 1 ulp in */ /* error in rare cases. */ /* ------------------------------------------------------------------ */ /* This calculates ln(A)/ln(10) using appropriate precision. For */ /* ln(A) this is the max(p, rhs->digits + t) + 3, where p is the */ /* requested digits and t is the number of digits in the exponent */ /* (maximum 6). For ln(10) it is p + 3; this is often handled by the */ /* fastpath in decLnOp. The final division is done to the requested */ /* precision. */ /* ------------------------------------------------------------------ */ decNumber * decNumberLog10(decNumber *res, const decNumber *rhs, decContext *set) { uInt status=0, ignore=0; /* status accumulators */ uInt needbytes; /* for space calculations */ Int p; /* working precision */ Int t; /* digits in exponent of A */ /* buffers for a and b working decimals */ /* (adjustment calculator, same size) */ decNumber bufa[D2N(DECBUFFER+2)]; decNumber *allocbufa=NULL; /* -> allocated bufa, iff allocated */ decNumber *a=bufa; /* temporary a */ decNumber bufb[D2N(DECBUFFER+2)]; decNumber *allocbufb=NULL; /* -> allocated bufb, iff allocated */ decNumber *b=bufb; /* temporary b */ decNumber bufw[D2N(10)]; /* working 2-10 digit number */ decNumber *w=bufw; /* .. */ #if DECSUBSET decNumber *allocrhs=NULL; /* non-NULL if rounded rhs allocated */ #endif decContext aset; /* working context */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif /* Check restrictions; this is a math function; if not violated */ /* then carry out the operation. */ if (!decCheckMath(rhs, set, &status)) do { /* protect malloc */ #if DECSUBSET if (!set->extended) { /* reduce operand and set lostDigits status, as needed */ if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, &status); if (allocrhs==NULL) break; rhs=allocrhs; } /* special check in subset for rhs=0 */ if (ISZERO(rhs)) { /* +/- zeros -> error */ status|=DEC_Invalid_operation; break;} } /* extended=0 */ #endif decContextDefault(&aset, DEC_INIT_DECIMAL64); /* clean context */ /* handle exact powers of 10; only check if +ve finite */ if (!(rhs->bits&(DECNEG|DECSPECIAL)) && !ISZERO(rhs)) { Int residue=0; /* (no residue) */ uInt copystat=0; /* clean status */ /* round to a single digit... */ aset.digits=1; decCopyFit(w, rhs, &aset, &residue, ©stat); /* copy & shorten */ /* if exact and the digit is 1, rhs is a power of 10 */ if (!(copystat&DEC_Inexact) && w->lsu[0]==1) { /* the exponent, conveniently, is the power of 10; making */ /* this the result needs a little care as it might not fit, */ /* so first convert it into the working number, and then move */ /* to res */ decNumberFromInt32(w, w->exponent); residue=0; decCopyFit(res, w, set, &residue, &status); /* copy & round */ decFinish(res, set, &residue, &status); /* cleanup/set flags */ break; } /* not a power of 10 */ } /* not a candidate for exact */ /* simplify the information-content calculation to use 'total */ /* number of digits in a, including exponent' as compared to the */ /* requested digits, as increasing this will only rarely cost an */ /* iteration in ln(a) anyway */ t=6; /* it can never be >6 */ /* allocate space when needed... */ p=(rhs->digits+t>set->digits?rhs->digits+t:set->digits)+3; needbytes=sizeof(decNumber)+(D2U(p)-1)*sizeof(Unit); if (needbytes>sizeof(bufa)) { /* need malloc space */ allocbufa=(decNumber *)malloc(needbytes); if (allocbufa==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} a=allocbufa; /* use the allocated space */ } aset.digits=p; /* as calculated */ aset.emax=DEC_MAX_MATH; /* usual bounds */ aset.emin=-DEC_MAX_MATH; /* .. */ aset.clamp=0; /* and no concrete format */ decLnOp(a, rhs, &aset, &status); /* a=ln(rhs) */ /* skip the division if the result so far is infinite, NaN, or */ /* zero, or there was an error; note NaN from sNaN needs copy */ if (status&DEC_NaNs && !(status&DEC_sNaN)) break; if (a->bits&DECSPECIAL || ISZERO(a)) { decNumberCopy(res, a); /* [will fit] */ break;} /* for ln(10) an extra 3 digits of precision are needed */ p=set->digits+3; needbytes=sizeof(decNumber)+(D2U(p)-1)*sizeof(Unit); if (needbytes>sizeof(bufb)) { /* need malloc space */ allocbufb=(decNumber *)malloc(needbytes); if (allocbufb==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} b=allocbufb; /* use the allocated space */ } decNumberZero(w); /* set up 10... */ #if DECDPUN==1 w->lsu[1]=1; w->lsu[0]=0; /* .. */ #else w->lsu[0]=10; /* .. */ #endif w->digits=2; /* .. */ aset.digits=p; decLnOp(b, w, &aset, &ignore); /* b=ln(10) */ aset.digits=set->digits; /* for final divide */ decDivideOp(res, a, b, &aset, DIVIDE, &status); /* into result */ } while(0); /* [for break] */ free(allocbufa); /* drop any storage used */ free(allocbufb); /* .. */ #if DECSUBSET free(allocrhs); /* .. */ #endif /* apply significant status */ if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberLog10 */ /* ------------------------------------------------------------------ */ /* decNumberMax -- compare two Numbers and return the maximum */ /* */ /* This computes C = A ? B, returning the maximum by 754 rules */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberMax(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decCompareOp(res, lhs, rhs, set, COMPMAX, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberMax */ /* ------------------------------------------------------------------ */ /* decNumberMaxMag -- compare and return the maximum by magnitude */ /* */ /* This computes C = A ? B, returning the maximum by 754 rules */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberMaxMag(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decCompareOp(res, lhs, rhs, set, COMPMAXMAG, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberMaxMag */ /* ------------------------------------------------------------------ */ /* decNumberMin -- compare two Numbers and return the minimum */ /* */ /* This computes C = A ? B, returning the minimum by 754 rules */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberMin(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decCompareOp(res, lhs, rhs, set, COMPMIN, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberMin */ /* ------------------------------------------------------------------ */ /* decNumberMinMag -- compare and return the minimum by magnitude */ /* */ /* This computes C = A ? B, returning the minimum by 754 rules */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberMinMag(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decCompareOp(res, lhs, rhs, set, COMPMINMAG, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberMinMag */ /* ------------------------------------------------------------------ */ /* decNumberMinus -- prefix minus operator */ /* */ /* This computes C = 0 - A */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context */ /* */ /* See also decNumberCopyNegate for a quiet bitwise version of this. */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ /* Simply use AddOp for the subtract, which will do the necessary. */ /* ------------------------------------------------------------------ */ decNumber * decNumberMinus(decNumber *res, const decNumber *rhs, decContext *set) { decNumber dzero; uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif decNumberZero(&dzero); /* make 0 */ dzero.exponent=rhs->exponent; /* [no coefficient expansion] */ decAddOp(res, &dzero, rhs, set, DECNEG, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberMinus */ /* ------------------------------------------------------------------ */ /* decNumberNextMinus -- next towards -Infinity */ /* */ /* This computes C = A - infinitesimal, rounded towards -Infinity */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context */ /* */ /* This is a generalization of 754 NextDown. */ /* ------------------------------------------------------------------ */ decNumber * decNumberNextMinus(decNumber *res, const decNumber *rhs, decContext *set) { decNumber dtiny; /* constant */ decContext workset=*set; /* work */ uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif /* +Infinity is the special case */ if ((rhs->bits&(DECINF|DECNEG))==DECINF) { decSetMaxValue(res, set); /* is +ve */ /* there is no status to set */ return res; } decNumberZero(&dtiny); /* start with 0 */ dtiny.lsu[0]=1; /* make number that is .. */ dtiny.exponent=DEC_MIN_EMIN-1; /* .. smaller than tiniest */ workset.round=DEC_ROUND_FLOOR; decAddOp(res, rhs, &dtiny, &workset, DECNEG, &status); status&=DEC_Invalid_operation|DEC_sNaN; /* only sNaN Invalid please */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberNextMinus */ /* ------------------------------------------------------------------ */ /* decNumberNextPlus -- next towards +Infinity */ /* */ /* This computes C = A + infinitesimal, rounded towards +Infinity */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context */ /* */ /* This is a generalization of 754 NextUp. */ /* ------------------------------------------------------------------ */ decNumber * decNumberNextPlus(decNumber *res, const decNumber *rhs, decContext *set) { decNumber dtiny; /* constant */ decContext workset=*set; /* work */ uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif /* -Infinity is the special case */ if ((rhs->bits&(DECINF|DECNEG))==(DECINF|DECNEG)) { decSetMaxValue(res, set); res->bits=DECNEG; /* negative */ /* there is no status to set */ return res; } decNumberZero(&dtiny); /* start with 0 */ dtiny.lsu[0]=1; /* make number that is .. */ dtiny.exponent=DEC_MIN_EMIN-1; /* .. smaller than tiniest */ workset.round=DEC_ROUND_CEILING; decAddOp(res, rhs, &dtiny, &workset, 0, &status); status&=DEC_Invalid_operation|DEC_sNaN; /* only sNaN Invalid please */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberNextPlus */ /* ------------------------------------------------------------------ */ /* decNumberNextToward -- next towards rhs */ /* */ /* This computes C = A +/- infinitesimal, rounded towards */ /* +/-Infinity in the direction of B, as per 754-1985 nextafter */ /* modified during revision but dropped from 754-2008. */ /* */ /* res is C, the result. C may be A or B. */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* This is a generalization of 754-1985 NextAfter. */ /* ------------------------------------------------------------------ */ decNumber * decNumberNextToward(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { decNumber dtiny; /* constant */ decContext workset=*set; /* work */ Int result; /* .. */ uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif if (decNumberIsNaN(lhs) || decNumberIsNaN(rhs)) { decNaNs(res, lhs, rhs, set, &status); } else { /* Is numeric, so no chance of sNaN Invalid, etc. */ result=decCompare(lhs, rhs, 0); /* sign matters */ if (result==BADINT) status|=DEC_Insufficient_storage; /* rare */ else { /* valid compare */ if (result==0) decNumberCopySign(res, lhs, rhs); /* easy */ else { /* differ: need NextPlus or NextMinus */ uByte sub; /* add or subtract */ if (result<0) { /* lhsbits&(DECINF|DECNEG))==(DECINF|DECNEG)) { decSetMaxValue(res, set); res->bits=DECNEG; /* negative */ return res; /* there is no status to set */ } workset.round=DEC_ROUND_CEILING; sub=0; /* add, please */ } /* plus */ else { /* lhs>rhs, do nextminus */ /* +Infinity is the special case */ if ((lhs->bits&(DECINF|DECNEG))==DECINF) { decSetMaxValue(res, set); return res; /* there is no status to set */ } workset.round=DEC_ROUND_FLOOR; sub=DECNEG; /* subtract, please */ } /* minus */ decNumberZero(&dtiny); /* start with 0 */ dtiny.lsu[0]=1; /* make number that is .. */ dtiny.exponent=DEC_MIN_EMIN-1; /* .. smaller than tiniest */ decAddOp(res, lhs, &dtiny, &workset, sub, &status); /* + or - */ /* turn off exceptions if the result is a normal number */ /* (including Nmin), otherwise let all status through */ if (decNumberIsNormal(res, set)) status=0; } /* unequal */ } /* compare OK */ } /* numeric */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberNextToward */ /* ------------------------------------------------------------------ */ /* decNumberOr -- OR two Numbers, digitwise */ /* */ /* This computes C = A | B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X|X) */ /* lhs is A */ /* rhs is B */ /* set is the context (used for result length and error report) */ /* */ /* C must have space for set->digits digits. */ /* */ /* Logical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* ------------------------------------------------------------------ */ decNumber * decNumberOr(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { const Unit *ua, *ub; /* -> operands */ const Unit *msua, *msub; /* -> operand msus */ Unit *uc, *msuc; /* -> result and its msu */ Int msudigs; /* digits in res msu */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif if (lhs->exponent!=0 || decNumberIsSpecial(lhs) || decNumberIsNegative(lhs) || rhs->exponent!=0 || decNumberIsSpecial(rhs) || decNumberIsNegative(rhs)) { decStatus(res, DEC_Invalid_operation, set); return res; } /* operands are valid */ ua=lhs->lsu; /* bottom-up */ ub=rhs->lsu; /* .. */ uc=res->lsu; /* .. */ msua=ua+D2U(lhs->digits)-1; /* -> msu of lhs */ msub=ub+D2U(rhs->digits)-1; /* -> msu of rhs */ msuc=uc+D2U(set->digits)-1; /* -> msu of result */ msudigs=MSUDIGITS(set->digits); /* [faster than remainder] */ for (; uc<=msuc; ua++, ub++, uc++) { /* Unit loop */ Unit a, b; /* extract units */ if (ua>msua) a=0; else a=*ua; if (ub>msub) b=0; else b=*ub; *uc=0; /* can now write back */ if (a|b) { /* maybe 1 bits to examine */ Int i, j; /* This loop could be unrolled and/or use BIN2BCD tables */ for (i=0; i1) { decStatus(res, DEC_Invalid_operation, set); return res; } if (uc==msuc && i==msudigs-1) break; /* just did final digit */ } /* each digit */ } /* non-zero */ } /* each unit */ /* [here uc-1 is the msu of the result] */ res->digits=decGetDigits(res->lsu, uc-res->lsu); res->exponent=0; /* integer */ res->bits=0; /* sign=0 */ return res; /* [no status to set] */ } /* decNumberOr */ /* ------------------------------------------------------------------ */ /* decNumberPlus -- prefix plus operator */ /* */ /* This computes C = 0 + A */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context */ /* */ /* See also decNumberCopy for a quiet bitwise version of this. */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ /* This simply uses AddOp; Add will take fast path after preparing A. */ /* Performance is a concern here, as this routine is often used to */ /* check operands and apply rounding and overflow/underflow testing. */ /* ------------------------------------------------------------------ */ decNumber * decNumberPlus(decNumber *res, const decNumber *rhs, decContext *set) { decNumber dzero; uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif decNumberZero(&dzero); /* make 0 */ dzero.exponent=rhs->exponent; /* [no coefficient expansion] */ decAddOp(res, &dzero, rhs, set, 0, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberPlus */ /* ------------------------------------------------------------------ */ /* decNumberMultiply -- multiply two Numbers */ /* */ /* This computes C = A x B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X+X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberMultiply(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decMultiplyOp(res, lhs, rhs, set, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberMultiply */ /* ------------------------------------------------------------------ */ /* decNumberPower -- raise a number to a power */ /* */ /* This computes C = A ** B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X**X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* */ /* Mathematical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* */ /* However, if 1999999997<=B<=999999999 and B is an integer then the */ /* restrictions on A and the context are relaxed to the usual bounds, */ /* for compatibility with the earlier (integer power only) version */ /* of this function. */ /* */ /* When B is an integer, the result may be exact, even if rounded. */ /* */ /* The final result is rounded according to the context; it will */ /* almost always be correctly rounded, but may be up to 1 ulp in */ /* error in rare cases. */ /* ------------------------------------------------------------------ */ decNumber * decNumberPower(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { #if DECSUBSET decNumber *alloclhs=NULL; /* non-NULL if rounded lhs allocated */ decNumber *allocrhs=NULL; /* .., rhs */ #endif decNumber *allocdac=NULL; /* -> allocated acc buffer, iff used */ decNumber *allocinv=NULL; /* -> allocated 1/x buffer, iff used */ Int reqdigits=set->digits; /* requested DIGITS */ Int n; /* rhs in binary */ Flag rhsint=0; /* 1 if rhs is an integer */ Flag useint=0; /* 1 if can use integer calculation */ Flag isoddint=0; /* 1 if rhs is an integer and odd */ Int i; /* work */ #if DECSUBSET Int dropped; /* .. */ #endif uInt needbytes; /* buffer size needed */ Flag seenbit; /* seen a bit while powering */ Int residue=0; /* rounding residue */ uInt status=0; /* accumulators */ uByte bits=0; /* result sign if errors */ decContext aset; /* working context */ decNumber dnOne; /* work value 1... */ /* local accumulator buffer [a decNumber, with digits+elength+1 digits] */ decNumber dacbuff[D2N(DECBUFFER+9)]; decNumber *dac=dacbuff; /* -> result accumulator */ /* same again for possible 1/lhs calculation */ decNumber invbuff[D2N(DECBUFFER+9)]; #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operands and set status, as needed */ if (lhs->digits>reqdigits) { alloclhs=decRoundOperand(lhs, set, &status); if (alloclhs==NULL) break; lhs=alloclhs; } if (rhs->digits>reqdigits) { allocrhs=decRoundOperand(rhs, set, &status); if (allocrhs==NULL) break; rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ /* handle NaNs and rhs Infinity (lhs infinity is harder) */ if (SPECIALARGS) { if (decNumberIsNaN(lhs) || decNumberIsNaN(rhs)) { /* NaNs */ decNaNs(res, lhs, rhs, set, &status); break;} if (decNumberIsInfinite(rhs)) { /* rhs Infinity */ Flag rhsneg=rhs->bits&DECNEG; /* save rhs sign */ if (decNumberIsNegative(lhs) /* lhs<0 */ && !decNumberIsZero(lhs)) /* .. */ status|=DEC_Invalid_operation; else { /* lhs >=0 */ decNumberZero(&dnOne); /* set up 1 */ dnOne.lsu[0]=1; decNumberCompare(dac, lhs, &dnOne, set); /* lhs ? 1 */ decNumberZero(res); /* prepare for 0/1/Infinity */ if (decNumberIsNegative(dac)) { /* lhs<1 */ if (rhsneg) res->bits|=DECINF; /* +Infinity [else is +0] */ } else if (dac->lsu[0]==0) { /* lhs=1 */ /* 1**Infinity is inexact, so return fully-padded 1.0000 */ Int shift=set->digits-1; *res->lsu=1; /* was 0, make int 1 */ res->digits=decShiftToMost(res->lsu, 1, shift); res->exponent=-shift; /* make 1.0000... */ status|=DEC_Inexact|DEC_Rounded; /* deemed inexact */ } else { /* lhs>1 */ if (!rhsneg) res->bits|=DECINF; /* +Infinity [else is +0] */ } } /* lhs>=0 */ break;} /* [lhs infinity drops through] */ } /* specials */ /* Original rhs may be an integer that fits and is in range */ n=decGetInt(rhs); if (n!=BADINT) { /* it is an integer */ rhsint=1; /* record the fact for 1**n */ isoddint=(Flag)n&1; /* [works even if big] */ if (n!=BIGEVEN && n!=BIGODD) /* can use integer path? */ useint=1; /* looks good */ } if (decNumberIsNegative(lhs) /* -x .. */ && isoddint) bits=DECNEG; /* .. to an odd power */ /* handle LHS infinity */ if (decNumberIsInfinite(lhs)) { /* [NaNs already handled] */ uByte rbits=rhs->bits; /* save */ decNumberZero(res); /* prepare */ if (n==0) *res->lsu=1; /* [-]Inf**0 => 1 */ else { /* -Inf**nonint -> error */ if (!rhsint && decNumberIsNegative(lhs)) { status|=DEC_Invalid_operation; /* -Inf**nonint is error */ break;} if (!(rbits & DECNEG)) bits|=DECINF; /* was not a **-n */ /* [otherwise will be 0 or -0] */ res->bits=bits; } break;} /* similarly handle LHS zero */ if (decNumberIsZero(lhs)) { if (n==0) { /* 0**0 => Error */ #if DECSUBSET if (!set->extended) { /* [unless subset] */ decNumberZero(res); *res->lsu=1; /* return 1 */ break;} #endif status|=DEC_Invalid_operation; } else { /* 0**x */ uByte rbits=rhs->bits; /* save */ if (rbits & DECNEG) { /* was a 0**(-n) */ #if DECSUBSET if (!set->extended) { /* [bad if subset] */ status|=DEC_Invalid_operation; break;} #endif bits|=DECINF; } decNumberZero(res); /* prepare */ /* [otherwise will be 0 or -0] */ res->bits=bits; } break;} /* here both lhs and rhs are finite; rhs==0 is handled in the */ /* integer path. Next handle the non-integer cases */ if (!useint) { /* non-integral rhs */ /* any -ve lhs is bad, as is either operand or context out of */ /* bounds */ if (decNumberIsNegative(lhs)) { status|=DEC_Invalid_operation; break;} if (decCheckMath(lhs, set, &status) || decCheckMath(rhs, set, &status)) break; /* variable status */ decContextDefault(&aset, DEC_INIT_DECIMAL64); /* clean context */ aset.emax=DEC_MAX_MATH; /* usual bounds */ aset.emin=-DEC_MAX_MATH; /* .. */ aset.clamp=0; /* and no concrete format */ /* calculate the result using exp(ln(lhs)*rhs), which can */ /* all be done into the accumulator, dac. The precision needed */ /* is enough to contain the full information in the lhs (which */ /* is the total digits, including exponent), or the requested */ /* precision, if larger, + 4; 6 is used for the exponent */ /* maximum length, and this is also used when it is shorter */ /* than the requested digits as it greatly reduces the >0.5 ulp */ /* cases at little cost (because Ln doubles digits each */ /* iteration so a few extra digits rarely causes an extra */ /* iteration) */ aset.digits=MAXI(lhs->digits, set->digits)+6+4; } /* non-integer rhs */ else { /* rhs is in-range integer */ if (n==0) { /* x**0 = 1 */ /* (0**0 was handled above) */ decNumberZero(res); /* result=1 */ *res->lsu=1; /* .. */ break;} /* rhs is a non-zero integer */ if (n<0) n=-n; /* use abs(n) */ aset=*set; /* clone the context */ aset.round=DEC_ROUND_HALF_EVEN; /* internally use balanced */ /* calculate the working DIGITS */ aset.digits=reqdigits+(rhs->digits+rhs->exponent)+2; #if DECSUBSET if (!set->extended) aset.digits--; /* use classic precision */ #endif /* it's an error if this is more than can be handled */ if (aset.digits>DECNUMMAXP) {status|=DEC_Invalid_operation; break;} } /* integer path */ /* aset.digits is the count of digits for the accumulator needed */ /* if accumulator is too long for local storage, then allocate */ needbytes=sizeof(decNumber)+(D2U(aset.digits)-1)*sizeof(Unit); /* [needbytes also used below if 1/lhs needed] */ if (needbytes>sizeof(dacbuff)) { allocdac=(decNumber *)malloc(needbytes); if (allocdac==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} dac=allocdac; /* use the allocated space */ } /* here, aset is set up and accumulator is ready for use */ if (!useint) { /* non-integral rhs */ /* x ** y; special-case x=1 here as it will otherwise always */ /* reduce to integer 1; decLnOp has a fastpath which detects */ /* the case of x=1 */ decLnOp(dac, lhs, &aset, &status); /* dac=ln(lhs) */ /* [no error possible, as lhs 0 already handled] */ if (ISZERO(dac)) { /* x==1, 1.0, etc. */ /* need to return fully-padded 1.0000 etc., but rhsint->1 */ *dac->lsu=1; /* was 0, make int 1 */ if (!rhsint) { /* add padding */ Int shift=set->digits-1; dac->digits=decShiftToMost(dac->lsu, 1, shift); dac->exponent=-shift; /* make 1.0000... */ status|=DEC_Inexact|DEC_Rounded; /* deemed inexact */ } } else { decMultiplyOp(dac, dac, rhs, &aset, &status); /* dac=dac*rhs */ decExpOp(dac, dac, &aset, &status); /* dac=exp(dac) */ } /* and drop through for final rounding */ } /* non-integer rhs */ else { /* carry on with integer */ decNumberZero(dac); /* acc=1 */ *dac->lsu=1; /* .. */ /* if a negative power the constant 1 is needed, and if not subset */ /* invert the lhs now rather than inverting the result later */ if (decNumberIsNegative(rhs)) { /* was a **-n [hence digits>0] */ decNumber *inv=invbuff; /* assume use fixed buffer */ decNumberCopy(&dnOne, dac); /* dnOne=1; [needed now or later] */ #if DECSUBSET if (set->extended) { /* need to calculate 1/lhs */ #endif /* divide lhs into 1, putting result in dac [dac=1/dac] */ decDivideOp(dac, &dnOne, lhs, &aset, DIVIDE, &status); /* now locate or allocate space for the inverted lhs */ if (needbytes>sizeof(invbuff)) { allocinv=(decNumber *)malloc(needbytes); if (allocinv==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} inv=allocinv; /* use the allocated space */ } /* [inv now points to big-enough buffer or allocated storage] */ decNumberCopy(inv, dac); /* copy the 1/lhs */ decNumberCopy(dac, &dnOne); /* restore acc=1 */ lhs=inv; /* .. and go forward with new lhs */ #if DECSUBSET } #endif } /* Raise-to-the-power loop... */ seenbit=0; /* set once a 1-bit is encountered */ for (i=1;;i++){ /* for each bit [top bit ignored] */ /* abandon if had overflow or terminal underflow */ if (status & (DEC_Overflow|DEC_Underflow)) { /* interesting? */ if (status&DEC_Overflow || ISZERO(dac)) break; } /* [the following two lines revealed an optimizer bug in a C++ */ /* compiler, with symptom: 5**3 -> 25, when n=n+n was used] */ n=n<<1; /* move next bit to testable position */ if (n<0) { /* top bit is set */ seenbit=1; /* OK, significant bit seen */ decMultiplyOp(dac, dac, lhs, &aset, &status); /* dac=dac*x */ } if (i==31) break; /* that was the last bit */ if (!seenbit) continue; /* no need to square 1 */ decMultiplyOp(dac, dac, dac, &aset, &status); /* dac=dac*dac [square] */ } /*i*/ /* 32 bits */ /* complete internal overflow or underflow processing */ if (status & (DEC_Overflow|DEC_Underflow)) { #if DECSUBSET /* If subset, and power was negative, reverse the kind of -erflow */ /* [1/x not yet done] */ if (!set->extended && decNumberIsNegative(rhs)) { if (status & DEC_Overflow) status^=DEC_Overflow | DEC_Underflow | DEC_Subnormal; else { /* trickier -- Underflow may or may not be set */ status&=~(DEC_Underflow | DEC_Subnormal); /* [one or both] */ status|=DEC_Overflow; } } #endif dac->bits=(dac->bits & ~DECNEG) | bits; /* force correct sign */ /* round subnormals [to set.digits rather than aset.digits] */ /* or set overflow result similarly as required */ decFinalize(dac, set, &residue, &status); decNumberCopy(res, dac); /* copy to result (is now OK length) */ break; } #if DECSUBSET if (!set->extended && /* subset math */ decNumberIsNegative(rhs)) { /* was a **-n [hence digits>0] */ /* so divide result into 1 [dac=1/dac] */ decDivideOp(dac, &dnOne, dac, &aset, DIVIDE, &status); } #endif } /* rhs integer path */ /* reduce result to the requested length and copy to result */ decCopyFit(res, dac, set, &residue, &status); decFinish(res, set, &residue, &status); /* final cleanup */ #if DECSUBSET if (!set->extended) decTrim(res, set, 0, 1, &dropped); /* trailing zeros */ #endif } while(0); /* end protected */ free(allocdac); /* drop any storage used */ free(allocinv); /* .. */ #if DECSUBSET free(alloclhs); /* .. */ free(allocrhs); /* .. */ #endif if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberPower */ /* ------------------------------------------------------------------ */ /* decNumberQuantize -- force exponent to requested value */ /* */ /* This computes C = op(A, B), where op adjusts the coefficient */ /* of C (by rounding or shifting) such that the exponent (-scale) */ /* of C has exponent of B. The numerical value of C will equal A, */ /* except for the effects of any rounding that occurred. */ /* */ /* res is C, the result. C may be A or B */ /* lhs is A, the number to adjust */ /* rhs is B, the number with exponent to match */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* */ /* Unless there is an error or the result is infinite, the exponent */ /* after the operation is guaranteed to be equal to that of B. */ /* ------------------------------------------------------------------ */ decNumber * decNumberQuantize(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decQuantizeOp(res, lhs, rhs, set, 1, &status); if (status!=0) decStatus(res, status, set); return res; } /* decNumberQuantize */ /* ------------------------------------------------------------------ */ /* decNumberReduce -- remove trailing zeros */ /* */ /* This computes C = 0 + A, and normalizes the result */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ /* Previously known as Normalize */ decNumber * decNumberNormalize(decNumber *res, const decNumber *rhs, decContext *set) { return decNumberReduce(res, rhs, set); } /* decNumberNormalize */ decNumber * decNumberReduce(decNumber *res, const decNumber *rhs, decContext *set) { #if DECSUBSET decNumber *allocrhs=NULL; /* non-NULL if rounded rhs allocated */ #endif uInt status=0; /* as usual */ Int residue=0; /* as usual */ Int dropped; /* work */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operand and set lostDigits status, as needed */ if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, &status); if (allocrhs==NULL) break; rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ /* Infinities copy through; NaNs need usual treatment */ if (decNumberIsNaN(rhs)) { decNaNs(res, rhs, NULL, set, &status); break; } /* reduce result to the requested length and copy to result */ decCopyFit(res, rhs, set, &residue, &status); /* copy & round */ decFinish(res, set, &residue, &status); /* cleanup/set flags */ decTrim(res, set, 1, 0, &dropped); /* normalize in place */ /* [may clamp] */ } while(0); /* end protected */ #if DECSUBSET free(allocrhs); /* .. */ #endif if (status!=0) decStatus(res, status, set);/* then report status */ return res; } /* decNumberReduce */ /* ------------------------------------------------------------------ */ /* decNumberRescale -- force exponent to requested value */ /* */ /* This computes C = op(A, B), where op adjusts the coefficient */ /* of C (by rounding or shifting) such that the exponent (-scale) */ /* of C has the value B. The numerical value of C will equal A, */ /* except for the effects of any rounding that occurred. */ /* */ /* res is C, the result. C may be A or B */ /* lhs is A, the number to adjust */ /* rhs is B, the requested exponent */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* */ /* Unless there is an error or the result is infinite, the exponent */ /* after the operation is guaranteed to be equal to B. */ /* ------------------------------------------------------------------ */ decNumber * decNumberRescale(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decQuantizeOp(res, lhs, rhs, set, 0, &status); if (status!=0) decStatus(res, status, set); return res; } /* decNumberRescale */ /* ------------------------------------------------------------------ */ /* decNumberRemainder -- divide and return remainder */ /* */ /* This computes C = A % B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X%X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberRemainder(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decDivideOp(res, lhs, rhs, set, REMAINDER, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberRemainder */ /* ------------------------------------------------------------------ */ /* decNumberRemainderNear -- divide and return remainder from nearest */ /* */ /* This computes C = A % B, where % is the IEEE remainder operator */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X%X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberRemainderNear(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decDivideOp(res, lhs, rhs, set, REMNEAR, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberRemainderNear */ /* ------------------------------------------------------------------ */ /* decNumberRotate -- rotate the coefficient of a Number left/right */ /* */ /* This computes C = A rot B (in base ten and rotating set->digits */ /* digits). */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=XrotX) */ /* lhs is A */ /* rhs is B, the number of digits to rotate (-ve to right) */ /* set is the context */ /* */ /* The digits of the coefficient of A are rotated to the left (if B */ /* is positive) or to the right (if B is negative) without adjusting */ /* the exponent or the sign of A. If lhs->digits is less than */ /* set->digits the coefficient is padded with zeros on the left */ /* before the rotate. Any leading zeros in the result are removed */ /* as usual. */ /* */ /* B must be an integer (q=0) and in the range -set->digits through */ /* +set->digits. */ /* C must have space for set->digits digits. */ /* NaNs are propagated as usual. Infinities are unaffected (but */ /* B must be valid). No status is set unless B is invalid or an */ /* operand is an sNaN. */ /* ------------------------------------------------------------------ */ decNumber * decNumberRotate(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ Int rotate; /* rhs as an Int */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif /* NaNs propagate as normal */ if (decNumberIsNaN(lhs) || decNumberIsNaN(rhs)) decNaNs(res, lhs, rhs, set, &status); /* rhs must be an integer */ else if (decNumberIsInfinite(rhs) || rhs->exponent!=0) status=DEC_Invalid_operation; else { /* both numeric, rhs is an integer */ rotate=decGetInt(rhs); /* [cannot fail] */ if (rotate==BADINT /* something bad .. */ || rotate==BIGODD || rotate==BIGEVEN /* .. very big .. */ || abs(rotate)>set->digits) /* .. or out of range */ status=DEC_Invalid_operation; else { /* rhs is OK */ decNumberCopy(res, lhs); /* convert -ve rotate to equivalent positive rotation */ if (rotate<0) rotate=set->digits+rotate; if (rotate!=0 && rotate!=set->digits /* zero or full rotation */ && !decNumberIsInfinite(res)) { /* lhs was infinite */ /* left-rotate to do; 0 < rotate < set->digits */ uInt units, shift; /* work */ uInt msudigits; /* digits in result msu */ Unit *msu=res->lsu+D2U(res->digits)-1; /* current msu */ Unit *msumax=res->lsu+D2U(set->digits)-1; /* rotation msu */ for (msu++; msu<=msumax; msu++) *msu=0; /* ensure high units=0 */ res->digits=set->digits; /* now full-length */ msudigits=MSUDIGITS(res->digits); /* actual digits in msu */ /* rotation here is done in-place, in three steps */ /* 1. shift all to least up to one unit to unit-align final */ /* lsd [any digits shifted out are rotated to the left, */ /* abutted to the original msd (which may require split)] */ /* */ /* [if there are no whole units left to rotate, the */ /* rotation is now complete] */ /* */ /* 2. shift to least, from below the split point only, so that */ /* the final msd is in the right place in its Unit [any */ /* digits shifted out will fit exactly in the current msu, */ /* left aligned, no split required] */ /* */ /* 3. rotate all the units by reversing left part, right */ /* part, and then whole */ /* */ /* example: rotate right 8 digits (2 units + 2), DECDPUN=3. */ /* */ /* start: 00a bcd efg hij klm npq */ /* */ /* 1a 000 0ab cde fgh|ijk lmn [pq saved] */ /* 1b 00p qab cde fgh|ijk lmn */ /* */ /* 2a 00p qab cde fgh|00i jkl [mn saved] */ /* 2b mnp qab cde fgh|00i jkl */ /* */ /* 3a fgh cde qab mnp|00i jkl */ /* 3b fgh cde qab mnp|jkl 00i */ /* 3c 00i jkl mnp qab cde fgh */ /* Step 1: amount to shift is the partial right-rotate count */ rotate=set->digits-rotate; /* make it right-rotate */ units=rotate/DECDPUN; /* whole units to rotate */ shift=rotate%DECDPUN; /* left-over digits count */ if (shift>0) { /* not an exact number of units */ uInt save=res->lsu[0]%powers[shift]; /* save low digit(s) */ decShiftToLeast(res->lsu, D2U(res->digits), shift); if (shift>msudigits) { /* msumax-1 needs >0 digits */ uInt rem=save%powers[shift-msudigits];/* split save */ *msumax=(Unit)(save/powers[shift-msudigits]); /* and insert */ *(msumax-1)=*(msumax-1) +(Unit)(rem*powers[DECDPUN-(shift-msudigits)]); /* .. */ } else { /* all fits in msumax */ *msumax=*msumax+(Unit)(save*powers[msudigits-shift]); /* [maybe *1] */ } } /* digits shift needed */ /* If whole units to rotate... */ if (units>0) { /* some to do */ /* Step 2: the units to touch are the whole ones in rotate, */ /* if any, and the shift is DECDPUN-msudigits (which may be */ /* 0, again) */ shift=DECDPUN-msudigits; if (shift>0) { /* not an exact number of units */ uInt save=res->lsu[0]%powers[shift]; /* save low digit(s) */ decShiftToLeast(res->lsu, units, shift); *msumax=*msumax+(Unit)(save*powers[msudigits]); } /* partial shift needed */ /* Step 3: rotate the units array using triple reverse */ /* (reversing is easy and fast) */ decReverse(res->lsu+units, msumax); /* left part */ decReverse(res->lsu, res->lsu+units-1); /* right part */ decReverse(res->lsu, msumax); /* whole */ } /* whole units to rotate */ /* the rotation may have left an undetermined number of zeros */ /* on the left, so true length needs to be calculated */ res->digits=decGetDigits(res->lsu, msumax-res->lsu+1); } /* rotate needed */ } /* rhs OK */ } /* numerics */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberRotate */ /* ------------------------------------------------------------------ */ /* decNumberSameQuantum -- test for equal exponents */ /* */ /* res is the result number, which will contain either 0 or 1 */ /* lhs is a number to test */ /* rhs is the second (usually a pattern) */ /* */ /* No errors are possible and no context is needed. */ /* ------------------------------------------------------------------ */ decNumber * decNumberSameQuantum(decNumber *res, const decNumber *lhs, const decNumber *rhs) { Unit ret=0; /* return value */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, DECUNCONT)) return res; #endif if (SPECIALARGS) { if (decNumberIsNaN(lhs) && decNumberIsNaN(rhs)) ret=1; else if (decNumberIsInfinite(lhs) && decNumberIsInfinite(rhs)) ret=1; /* [anything else with a special gives 0] */ } else if (lhs->exponent==rhs->exponent) ret=1; decNumberZero(res); /* OK to overwrite an operand now */ *res->lsu=ret; return res; } /* decNumberSameQuantum */ /* ------------------------------------------------------------------ */ /* decNumberScaleB -- multiply by a power of 10 */ /* */ /* This computes C = A x 10**B where B is an integer (q=0) with */ /* maximum magnitude 2*(emax+digits) */ /* */ /* res is C, the result. C may be A or B */ /* lhs is A, the number to adjust */ /* rhs is B, the requested power of ten to use */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* */ /* The result may underflow or overflow. */ /* ------------------------------------------------------------------ */ decNumber * decNumberScaleB(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { Int reqexp; /* requested exponent change [B] */ uInt status=0; /* accumulator */ Int residue; /* work */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif /* Handle special values except lhs infinite */ if (decNumberIsNaN(lhs) || decNumberIsNaN(rhs)) decNaNs(res, lhs, rhs, set, &status); /* rhs must be an integer */ else if (decNumberIsInfinite(rhs) || rhs->exponent!=0) status=DEC_Invalid_operation; else { /* lhs is a number; rhs is a finite with q==0 */ reqexp=decGetInt(rhs); /* [cannot fail] */ if (reqexp==BADINT /* something bad .. */ || reqexp==BIGODD || reqexp==BIGEVEN /* .. very big .. */ || abs(reqexp)>(2*(set->digits+set->emax))) /* .. or out of range */ status=DEC_Invalid_operation; else { /* rhs is OK */ decNumberCopy(res, lhs); /* all done if infinite lhs */ if (!decNumberIsInfinite(res)) { /* prepare to scale */ res->exponent+=reqexp; /* adjust the exponent */ residue=0; decFinalize(res, set, &residue, &status); /* .. and check */ } /* finite LHS */ } /* rhs OK */ } /* rhs finite */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberScaleB */ /* ------------------------------------------------------------------ */ /* decNumberShift -- shift the coefficient of a Number left or right */ /* */ /* This computes C = A << B or C = A >> -B (in base ten). */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X<digits through */ /* +set->digits. */ /* C must have space for set->digits digits. */ /* NaNs are propagated as usual. Infinities are unaffected (but */ /* B must be valid). No status is set unless B is invalid or an */ /* operand is an sNaN. */ /* ------------------------------------------------------------------ */ decNumber * decNumberShift(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ Int shift; /* rhs as an Int */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif /* NaNs propagate as normal */ if (decNumberIsNaN(lhs) || decNumberIsNaN(rhs)) decNaNs(res, lhs, rhs, set, &status); /* rhs must be an integer */ else if (decNumberIsInfinite(rhs) || rhs->exponent!=0) status=DEC_Invalid_operation; else { /* both numeric, rhs is an integer */ shift=decGetInt(rhs); /* [cannot fail] */ if (shift==BADINT /* something bad .. */ || shift==BIGODD || shift==BIGEVEN /* .. very big .. */ || abs(shift)>set->digits) /* .. or out of range */ status=DEC_Invalid_operation; else { /* rhs is OK */ decNumberCopy(res, lhs); if (shift!=0 && !decNumberIsInfinite(res)) { /* something to do */ if (shift>0) { /* to left */ if (shift==set->digits) { /* removing all */ *res->lsu=0; /* so place 0 */ res->digits=1; /* .. */ } else { /* */ /* first remove leading digits if necessary */ if (res->digits+shift>set->digits) { decDecap(res, res->digits+shift-set->digits); /* that updated res->digits; may have gone to 1 (for a */ /* single digit or for zero */ } if (res->digits>1 || *res->lsu) /* if non-zero.. */ res->digits=decShiftToMost(res->lsu, res->digits, shift); } /* partial left */ } /* left */ else { /* to right */ if (-shift>=res->digits) { /* discarding all */ *res->lsu=0; /* so place 0 */ res->digits=1; /* .. */ } else { decShiftToLeast(res->lsu, D2U(res->digits), -shift); res->digits-=(-shift); } } /* to right */ } /* non-0 non-Inf shift */ } /* rhs OK */ } /* numerics */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberShift */ /* ------------------------------------------------------------------ */ /* decNumberSquareRoot -- square root operator */ /* */ /* This computes C = squareroot(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context; note that rounding mode has no effect */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ /* This uses the following varying-precision algorithm in: */ /* */ /* Properly Rounded Variable Precision Square Root, T. E. Hull and */ /* A. Abrham, ACM Transactions on Mathematical Software, Vol 11 #3, */ /* pp229-237, ACM, September 1985. */ /* */ /* The square-root is calculated using Newton's method, after which */ /* a check is made to ensure the result is correctly rounded. */ /* */ /* % [Reformatted original Numerical Turing source code follows.] */ /* function sqrt(x : real) : real */ /* % sqrt(x) returns the properly rounded approximation to the square */ /* % root of x, in the precision of the calling environment, or it */ /* % fails if x < 0. */ /* % t e hull and a abrham, august, 1984 */ /* if x <= 0 then */ /* if x < 0 then */ /* assert false */ /* else */ /* result 0 */ /* end if */ /* end if */ /* var f := setexp(x, 0) % fraction part of x [0.1 <= x < 1] */ /* var e := getexp(x) % exponent part of x */ /* var approx : real */ /* if e mod 2 = 0 then */ /* approx := .259 + .819 * f % approx to root of f */ /* else */ /* f := f/l0 % adjustments */ /* e := e + 1 % for odd */ /* approx := .0819 + 2.59 * f % exponent */ /* end if */ /* */ /* var p:= 3 */ /* const maxp := currentprecision + 2 */ /* loop */ /* p := min(2*p - 2, maxp) % p = 4,6,10, . . . , maxp */ /* precision p */ /* approx := .5 * (approx + f/approx) */ /* exit when p = maxp */ /* end loop */ /* */ /* % approx is now within 1 ulp of the properly rounded square root */ /* % of f; to ensure proper rounding, compare squares of (approx - */ /* % l/2 ulp) and (approx + l/2 ulp) with f. */ /* p := currentprecision */ /* begin */ /* precision p + 2 */ /* const approxsubhalf := approx - setexp(.5, -p) */ /* if mulru(approxsubhalf, approxsubhalf) > f then */ /* approx := approx - setexp(.l, -p + 1) */ /* else */ /* const approxaddhalf := approx + setexp(.5, -p) */ /* if mulrd(approxaddhalf, approxaddhalf) < f then */ /* approx := approx + setexp(.l, -p + 1) */ /* end if */ /* end if */ /* end */ /* result setexp(approx, e div 2) % fix exponent */ /* end sqrt */ /* ------------------------------------------------------------------ */ decNumber * decNumberSquareRoot(decNumber *res, const decNumber *rhs, decContext *set) { decContext workset, approxset; /* work contexts */ decNumber dzero; /* used for constant zero */ Int maxp; /* largest working precision */ Int workp; /* working precision */ Int residue=0; /* rounding residue */ uInt status=0, ignore=0; /* status accumulators */ uInt rstatus; /* .. */ Int exp; /* working exponent */ Int ideal; /* ideal (preferred) exponent */ Int needbytes; /* work */ Int dropped; /* .. */ #if DECSUBSET decNumber *allocrhs=NULL; /* non-NULL if rounded rhs allocated */ #endif /* buffer for f [needs +1 in case DECBUFFER 0] */ decNumber buff[D2N(DECBUFFER+1)]; /* buffer for a [needs +2 to match likely maxp] */ decNumber bufa[D2N(DECBUFFER+2)]; /* buffer for temporary, b [must be same size as a] */ decNumber bufb[D2N(DECBUFFER+2)]; decNumber *allocbuff=NULL; /* -> allocated buff, iff allocated */ decNumber *allocbufa=NULL; /* -> allocated bufa, iff allocated */ decNumber *allocbufb=NULL; /* -> allocated bufb, iff allocated */ decNumber *f=buff; /* reduced fraction */ decNumber *a=bufa; /* approximation to result */ decNumber *b=bufb; /* intermediate result */ /* buffer for temporary variable, up to 3 digits */ decNumber buft[D2N(3)]; decNumber *t=buft; /* up-to-3-digit constant or work */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operand and set lostDigits status, as needed */ if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, &status); if (allocrhs==NULL) break; /* [Note: 'f' allocation below could reuse this buffer if */ /* used, but as this is rare they are kept separate for clarity.] */ rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ /* handle infinities and NaNs */ if (SPECIALARG) { if (decNumberIsInfinite(rhs)) { /* an infinity */ if (decNumberIsNegative(rhs)) status|=DEC_Invalid_operation; else decNumberCopy(res, rhs); /* +Infinity */ } else decNaNs(res, rhs, NULL, set, &status); /* a NaN */ break; } /* calculate the ideal (preferred) exponent [floor(exp/2)] */ /* [It would be nicer to write: ideal=rhs->exponent>>1, but this */ /* generates a compiler warning. Generated code is the same.] */ ideal=(rhs->exponent&~1)/2; /* target */ /* handle zeros */ if (ISZERO(rhs)) { decNumberCopy(res, rhs); /* could be 0 or -0 */ res->exponent=ideal; /* use the ideal [safe] */ /* use decFinish to clamp any out-of-range exponent, etc. */ decFinish(res, set, &residue, &status); break; } /* any other -x is an oops */ if (decNumberIsNegative(rhs)) { status|=DEC_Invalid_operation; break; } /* space is needed for three working variables */ /* f -- the same precision as the RHS, reduced to 0.01->0.99... */ /* a -- Hull's approximation -- precision, when assigned, is */ /* currentprecision+1 or the input argument precision, */ /* whichever is larger (+2 for use as temporary) */ /* b -- intermediate temporary result (same size as a) */ /* if any is too long for local storage, then allocate */ workp=MAXI(set->digits+1, rhs->digits); /* actual rounding precision */ workp=MAXI(workp, 7); /* at least 7 for low cases */ maxp=workp+2; /* largest working precision */ needbytes=sizeof(decNumber)+(D2U(rhs->digits)-1)*sizeof(Unit); if (needbytes>(Int)sizeof(buff)) { allocbuff=(decNumber *)malloc(needbytes); if (allocbuff==NULL) { /* hopeless -- abandon */ status|=DEC_Insufficient_storage; break;} f=allocbuff; /* use the allocated space */ } /* a and b both need to be able to hold a maxp-length number */ needbytes=sizeof(decNumber)+(D2U(maxp)-1)*sizeof(Unit); if (needbytes>(Int)sizeof(bufa)) { /* [same applies to b] */ allocbufa=(decNumber *)malloc(needbytes); allocbufb=(decNumber *)malloc(needbytes); if (allocbufa==NULL || allocbufb==NULL) { /* hopeless */ status|=DEC_Insufficient_storage; break;} a=allocbufa; /* use the allocated spaces */ b=allocbufb; /* .. */ } /* copy rhs -> f, save exponent, and reduce so 0.1 <= f < 1 */ decNumberCopy(f, rhs); exp=f->exponent+f->digits; /* adjusted to Hull rules */ f->exponent=-(f->digits); /* to range */ /* set up working context */ decContextDefault(&workset, DEC_INIT_DECIMAL64); workset.emax=DEC_MAX_EMAX; workset.emin=DEC_MIN_EMIN; /* [Until further notice, no error is possible and status bits */ /* (Rounded, etc.) should be ignored, not accumulated.] */ /* Calculate initial approximation, and allow for odd exponent */ workset.digits=workp; /* p for initial calculation */ t->bits=0; t->digits=3; a->bits=0; a->digits=3; if ((exp & 1)==0) { /* even exponent */ /* Set t=0.259, a=0.819 */ t->exponent=-3; a->exponent=-3; #if DECDPUN>=3 t->lsu[0]=259; a->lsu[0]=819; #elif DECDPUN==2 t->lsu[0]=59; t->lsu[1]=2; a->lsu[0]=19; a->lsu[1]=8; #else t->lsu[0]=9; t->lsu[1]=5; t->lsu[2]=2; a->lsu[0]=9; a->lsu[1]=1; a->lsu[2]=8; #endif } else { /* odd exponent */ /* Set t=0.0819, a=2.59 */ f->exponent--; /* f=f/10 */ exp++; /* e=e+1 */ t->exponent=-4; a->exponent=-2; #if DECDPUN>=3 t->lsu[0]=819; a->lsu[0]=259; #elif DECDPUN==2 t->lsu[0]=19; t->lsu[1]=8; a->lsu[0]=59; a->lsu[1]=2; #else t->lsu[0]=9; t->lsu[1]=1; t->lsu[2]=8; a->lsu[0]=9; a->lsu[1]=5; a->lsu[2]=2; #endif } decMultiplyOp(a, a, f, &workset, &ignore); /* a=a*f */ decAddOp(a, a, t, &workset, 0, &ignore); /* ..+t */ /* [a is now the initial approximation for sqrt(f), calculated with */ /* currentprecision, which is also a's precision.] */ /* the main calculation loop */ decNumberZero(&dzero); /* make 0 */ decNumberZero(t); /* set t = 0.5 */ t->lsu[0]=5; /* .. */ t->exponent=-1; /* .. */ workset.digits=3; /* initial p */ for (; workset.digitsexponent+=exp/2; /* set correct exponent */ rstatus=0; /* clear status */ residue=0; /* .. and accumulator */ decCopyFit(a, a, &approxset, &residue, &rstatus); /* reduce (if needed) */ decFinish(a, &approxset, &residue, &rstatus); /* clean and finalize */ /* Overflow was possible if the input exponent was out-of-range, */ /* in which case quit */ if (rstatus&DEC_Overflow) { status=rstatus; /* use the status as-is */ decNumberCopy(res, a); /* copy to result */ break; } /* Preserve status except Inexact/Rounded */ status|=(rstatus & ~(DEC_Rounded|DEC_Inexact)); /* Carry out the Hull correction */ a->exponent-=exp/2; /* back to 0.1->1 */ /* a is now at final precision and within 1 ulp of the properly */ /* rounded square root of f; to ensure proper rounding, compare */ /* squares of (a - l/2 ulp) and (a + l/2 ulp) with f. */ /* Here workset.digits=maxp and t=0.5, and a->digits determines */ /* the ulp */ workset.digits--; /* maxp-1 is OK now */ t->exponent=-a->digits-1; /* make 0.5 ulp */ decAddOp(b, a, t, &workset, DECNEG, &ignore); /* b = a - 0.5 ulp */ workset.round=DEC_ROUND_UP; decMultiplyOp(b, b, b, &workset, &ignore); /* b = mulru(b, b) */ decCompareOp(b, f, b, &workset, COMPARE, &ignore); /* b ? f, reversed */ if (decNumberIsNegative(b)) { /* f < b [i.e., b > f] */ /* this is the more common adjustment, though both are rare */ t->exponent++; /* make 1.0 ulp */ t->lsu[0]=1; /* .. */ decAddOp(a, a, t, &workset, DECNEG, &ignore); /* a = a - 1 ulp */ /* assign to approx [round to length] */ approxset.emin-=exp/2; /* adjust to match a */ approxset.emax-=exp/2; decAddOp(a, &dzero, a, &approxset, 0, &ignore); } else { decAddOp(b, a, t, &workset, 0, &ignore); /* b = a + 0.5 ulp */ workset.round=DEC_ROUND_DOWN; decMultiplyOp(b, b, b, &workset, &ignore); /* b = mulrd(b, b) */ decCompareOp(b, b, f, &workset, COMPARE, &ignore); /* b ? f */ if (decNumberIsNegative(b)) { /* b < f */ t->exponent++; /* make 1.0 ulp */ t->lsu[0]=1; /* .. */ decAddOp(a, a, t, &workset, 0, &ignore); /* a = a + 1 ulp */ /* assign to approx [round to length] */ approxset.emin-=exp/2; /* adjust to match a */ approxset.emax-=exp/2; decAddOp(a, &dzero, a, &approxset, 0, &ignore); } } /* [no errors are possible in the above, and rounding/inexact during */ /* estimation are irrelevant, so status was not accumulated] */ /* Here, 0.1 <= a < 1 (still), so adjust back */ a->exponent+=exp/2; /* set correct exponent */ /* count droppable zeros [after any subnormal rounding] by */ /* trimming a copy */ decNumberCopy(b, a); decTrim(b, set, 1, 1, &dropped); /* [drops trailing zeros] */ /* Set Inexact and Rounded. The answer can only be exact if */ /* it is short enough so that squaring it could fit in workp */ /* digits, so this is the only (relatively rare) condition that */ /* a careful check is needed */ if (b->digits*2-1 > workp) { /* cannot fit */ status|=DEC_Inexact|DEC_Rounded; } else { /* could be exact/unrounded */ uInt mstatus=0; /* local status */ decMultiplyOp(b, b, b, &workset, &mstatus); /* try the multiply */ if (mstatus&DEC_Overflow) { /* result just won't fit */ status|=DEC_Inexact|DEC_Rounded; } else { /* plausible */ decCompareOp(t, b, rhs, &workset, COMPARE, &mstatus); /* b ? rhs */ if (!ISZERO(t)) status|=DEC_Inexact|DEC_Rounded; /* not equal */ else { /* is Exact */ /* here, dropped is the count of trailing zeros in 'a' */ /* use closest exponent to ideal... */ Int todrop=ideal-a->exponent; /* most that can be dropped */ if (todrop<0) status|=DEC_Rounded; /* ideally would add 0s */ else { /* unrounded */ /* there are some to drop, but emax may not allow all */ Int maxexp=set->emax-set->digits+1; Int maxdrop=maxexp-a->exponent; if (todrop>maxdrop && set->clamp) { /* apply clamping */ todrop=maxdrop; status|=DEC_Clamped; } if (dropped0) { /* have some to drop */ decShiftToLeast(a->lsu, D2U(a->digits), todrop); a->exponent+=todrop; /* maintain numerical value */ a->digits-=todrop; /* new length */ } } } } } /* double-check Underflow, as perhaps the result could not have */ /* been subnormal (initial argument too big), or it is now Exact */ if (status&DEC_Underflow) { Int ae=rhs->exponent+rhs->digits-1; /* adjusted exponent */ /* check if truly subnormal */ #if DECEXTFLAG /* DEC_Subnormal too */ if (ae>=set->emin*2) status&=~(DEC_Subnormal|DEC_Underflow); #else if (ae>=set->emin*2) status&=~DEC_Underflow; #endif /* check if truly inexact */ if (!(status&DEC_Inexact)) status&=~DEC_Underflow; } decNumberCopy(res, a); /* a is now the result */ } while(0); /* end protected */ free(allocbuff); /* drop any storage used */ free(allocbufa); /* .. */ free(allocbufb); /* .. */ #if DECSUBSET free(allocrhs); /* .. */ #endif if (status!=0) decStatus(res, status, set);/* then report status */ #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberSquareRoot */ /* ------------------------------------------------------------------ */ /* decNumberSubtract -- subtract two Numbers */ /* */ /* This computes C = A - B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X-X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* */ /* C must have space for set->digits digits. */ /* ------------------------------------------------------------------ */ decNumber * decNumberSubtract(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { uInt status=0; /* accumulator */ decAddOp(res, lhs, rhs, set, DECNEG, &status); if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); #endif return res; } /* decNumberSubtract */ /* ------------------------------------------------------------------ */ /* decNumberToIntegralExact -- round-to-integral-value with InExact */ /* decNumberToIntegralValue -- round-to-integral-value */ /* */ /* res is the result */ /* rhs is input number */ /* set is the context */ /* */ /* res must have space for any value of rhs. */ /* */ /* This implements the IEEE special operators and therefore treats */ /* special values as valid. For finite numbers it returns */ /* rescale(rhs, 0) if rhs->exponent is <0. */ /* Otherwise the result is rhs (so no error is possible, except for */ /* sNaN). */ /* */ /* The context is used for rounding mode and status after sNaN, but */ /* the digits setting is ignored. The Exact version will signal */ /* Inexact if the result differs numerically from rhs; the other */ /* never signals Inexact. */ /* ------------------------------------------------------------------ */ decNumber * decNumberToIntegralExact(decNumber *res, const decNumber *rhs, decContext *set) { decNumber dn; decContext workset; /* working context */ uInt status=0; /* accumulator */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif /* handle infinities and NaNs */ if (SPECIALARG) { if (decNumberIsInfinite(rhs)) decNumberCopy(res, rhs); /* an Infinity */ else decNaNs(res, rhs, NULL, set, &status); /* a NaN */ } else { /* finite */ /* have a finite number; no error possible (res must be big enough) */ if (rhs->exponent>=0) return decNumberCopy(res, rhs); /* that was easy, but if negative exponent there is work to do... */ workset=*set; /* clone rounding, etc. */ workset.digits=rhs->digits; /* no length rounding */ workset.traps=0; /* no traps */ decNumberZero(&dn); /* make a number with exponent 0 */ decNumberQuantize(res, rhs, &dn, &workset); status|=workset.status; } if (status!=0) decStatus(res, status, set); return res; } /* decNumberToIntegralExact */ decNumber * decNumberToIntegralValue(decNumber *res, const decNumber *rhs, decContext *set) { decContext workset=*set; /* working context */ workset.traps=0; /* no traps */ decNumberToIntegralExact(res, rhs, &workset); /* this never affects set, except for sNaNs; NaN will have been set */ /* or propagated already, so no need to call decStatus */ set->status|=workset.status&DEC_Invalid_operation; return res; } /* decNumberToIntegralValue */ /* ------------------------------------------------------------------ */ /* decNumberXor -- XOR two Numbers, digitwise */ /* */ /* This computes C = A ^ B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X^X) */ /* lhs is A */ /* rhs is B */ /* set is the context (used for result length and error report) */ /* */ /* C must have space for set->digits digits. */ /* */ /* Logical function restrictions apply (see above); a NaN is */ /* returned with Invalid_operation if a restriction is violated. */ /* ------------------------------------------------------------------ */ decNumber * decNumberXor(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { const Unit *ua, *ub; /* -> operands */ const Unit *msua, *msub; /* -> operand msus */ Unit *uc, *msuc; /* -> result and its msu */ Int msudigs; /* digits in res msu */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif if (lhs->exponent!=0 || decNumberIsSpecial(lhs) || decNumberIsNegative(lhs) || rhs->exponent!=0 || decNumberIsSpecial(rhs) || decNumberIsNegative(rhs)) { decStatus(res, DEC_Invalid_operation, set); return res; } /* operands are valid */ ua=lhs->lsu; /* bottom-up */ ub=rhs->lsu; /* .. */ uc=res->lsu; /* .. */ msua=ua+D2U(lhs->digits)-1; /* -> msu of lhs */ msub=ub+D2U(rhs->digits)-1; /* -> msu of rhs */ msuc=uc+D2U(set->digits)-1; /* -> msu of result */ msudigs=MSUDIGITS(set->digits); /* [faster than remainder] */ for (; uc<=msuc; ua++, ub++, uc++) { /* Unit loop */ Unit a, b; /* extract units */ if (ua>msua) a=0; else a=*ua; if (ub>msub) b=0; else b=*ub; *uc=0; /* can now write back */ if (a|b) { /* maybe 1 bits to examine */ Int i, j; /* This loop could be unrolled and/or use BIN2BCD tables */ for (i=0; i1) { decStatus(res, DEC_Invalid_operation, set); return res; } if (uc==msuc && i==msudigs-1) break; /* just did final digit */ } /* each digit */ } /* non-zero */ } /* each unit */ /* [here uc-1 is the msu of the result] */ res->digits=decGetDigits(res->lsu, uc-res->lsu); res->exponent=0; /* integer */ res->bits=0; /* sign=0 */ return res; /* [no status to set] */ } /* decNumberXor */ /* ================================================================== */ /* Utility routines */ /* ================================================================== */ /* ------------------------------------------------------------------ */ /* decNumberClass -- return the decClass of a decNumber */ /* dn -- the decNumber to test */ /* set -- the context to use for Emin */ /* returns the decClass enum */ /* ------------------------------------------------------------------ */ enum decClass decNumberClass(const decNumber *dn, decContext *set) { if (decNumberIsSpecial(dn)) { if (decNumberIsQNaN(dn)) return DEC_CLASS_QNAN; if (decNumberIsSNaN(dn)) return DEC_CLASS_SNAN; /* must be an infinity */ if (decNumberIsNegative(dn)) return DEC_CLASS_NEG_INF; return DEC_CLASS_POS_INF; } /* is finite */ if (decNumberIsNormal(dn, set)) { /* most common */ if (decNumberIsNegative(dn)) return DEC_CLASS_NEG_NORMAL; return DEC_CLASS_POS_NORMAL; } /* is subnormal or zero */ if (decNumberIsZero(dn)) { /* most common */ if (decNumberIsNegative(dn)) return DEC_CLASS_NEG_ZERO; return DEC_CLASS_POS_ZERO; } if (decNumberIsNegative(dn)) return DEC_CLASS_NEG_SUBNORMAL; return DEC_CLASS_POS_SUBNORMAL; } /* decNumberClass */ /* ------------------------------------------------------------------ */ /* decNumberClassToString -- convert decClass to a string */ /* */ /* eclass is a valid decClass */ /* returns a constant string describing the class (max 13+1 chars) */ /* ------------------------------------------------------------------ */ const char *decNumberClassToString(enum decClass eclass) { if (eclass==DEC_CLASS_POS_NORMAL) return DEC_ClassString_PN; if (eclass==DEC_CLASS_NEG_NORMAL) return DEC_ClassString_NN; if (eclass==DEC_CLASS_POS_ZERO) return DEC_ClassString_PZ; if (eclass==DEC_CLASS_NEG_ZERO) return DEC_ClassString_NZ; if (eclass==DEC_CLASS_POS_SUBNORMAL) return DEC_ClassString_PS; if (eclass==DEC_CLASS_NEG_SUBNORMAL) return DEC_ClassString_NS; if (eclass==DEC_CLASS_POS_INF) return DEC_ClassString_PI; if (eclass==DEC_CLASS_NEG_INF) return DEC_ClassString_NI; if (eclass==DEC_CLASS_QNAN) return DEC_ClassString_QN; if (eclass==DEC_CLASS_SNAN) return DEC_ClassString_SN; return DEC_ClassString_UN; /* Unknown */ } /* decNumberClassToString */ /* ------------------------------------------------------------------ */ /* decNumberCopy -- copy a number */ /* */ /* dest is the target decNumber */ /* src is the source decNumber */ /* returns dest */ /* */ /* (dest==src is allowed and is a no-op) */ /* All fields are updated as required. This is a utility operation, */ /* so special values are unchanged and no error is possible. */ /* ------------------------------------------------------------------ */ decNumber * decNumberCopy(decNumber *dest, const decNumber *src) { #if DECCHECK if (src==NULL) return decNumberZero(dest); #endif if (dest==src) return dest; /* no copy required */ /* Use explicit assignments here as structure assignment could copy */ /* more than just the lsu (for small DECDPUN). This would not affect */ /* the value of the results, but could disturb test harness spill */ /* checking. */ dest->bits=src->bits; dest->exponent=src->exponent; dest->digits=src->digits; dest->lsu[0]=src->lsu[0]; if (src->digits>DECDPUN) { /* more Units to come */ const Unit *smsup, *s; /* work */ Unit *d; /* .. */ /* memcpy for the remaining Units would be safe as they cannot */ /* overlap. However, this explicit loop is faster in short cases. */ d=dest->lsu+1; /* -> first destination */ smsup=src->lsu+D2U(src->digits); /* -> source msu+1 */ for (s=src->lsu+1; sdigits digits. */ /* No exception or error can occur; this is a quiet bitwise operation.*/ /* See also decNumberAbs for a checking version of this. */ /* ------------------------------------------------------------------ */ decNumber * decNumberCopyAbs(decNumber *res, const decNumber *rhs) { #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, DECUNCONT)) return res; #endif decNumberCopy(res, rhs); res->bits&=~DECNEG; /* turn off sign */ return res; } /* decNumberCopyAbs */ /* ------------------------------------------------------------------ */ /* decNumberCopyNegate -- quiet negate value operator */ /* */ /* This sets C = negate(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* */ /* C must have space for set->digits digits. */ /* No exception or error can occur; this is a quiet bitwise operation.*/ /* See also decNumberMinus for a checking version of this. */ /* ------------------------------------------------------------------ */ decNumber * decNumberCopyNegate(decNumber *res, const decNumber *rhs) { #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, DECUNCONT)) return res; #endif decNumberCopy(res, rhs); res->bits^=DECNEG; /* invert the sign */ return res; } /* decNumberCopyNegate */ /* ------------------------------------------------------------------ */ /* decNumberCopySign -- quiet copy and set sign operator */ /* */ /* This sets C = A with the sign of B */ /* */ /* res is C, the result. C may be A */ /* lhs is A */ /* rhs is B */ /* */ /* C must have space for set->digits digits. */ /* No exception or error can occur; this is a quiet bitwise operation.*/ /* ------------------------------------------------------------------ */ decNumber * decNumberCopySign(decNumber *res, const decNumber *lhs, const decNumber *rhs) { uByte sign; /* rhs sign */ #if DECCHECK if (decCheckOperands(res, DECUNUSED, rhs, DECUNCONT)) return res; #endif sign=rhs->bits & DECNEG; /* save sign bit */ decNumberCopy(res, lhs); res->bits&=~DECNEG; /* clear the sign */ res->bits|=sign; /* set from rhs */ return res; } /* decNumberCopySign */ /* ------------------------------------------------------------------ */ /* decNumberGetBCD -- get the coefficient in BCD8 */ /* dn is the source decNumber */ /* bcd is the uInt array that will receive dn->digits BCD bytes, */ /* most-significant at offset 0 */ /* returns bcd */ /* */ /* bcd must have at least dn->digits bytes. No error is possible; if */ /* dn is a NaN or Infinite, digits must be 1 and the coefficient 0. */ /* ------------------------------------------------------------------ */ uByte * decNumberGetBCD(const decNumber *dn, uByte *bcd) { uByte *ub=bcd+dn->digits-1; /* -> lsd */ const Unit *up=dn->lsu; /* Unit pointer, -> lsu */ #if DECDPUN==1 /* trivial simple copy */ for (; ub>=bcd; ub--, up++) *ub=*up; #else /* chopping needed */ uInt u=*up; /* work */ uInt cut=DECDPUN; /* downcounter through unit */ for (; ub>=bcd; ub--) { *ub=(uByte)(u%10); /* [*6554 trick inhibits, here] */ u=u/10; cut--; if (cut>0) continue; /* more in this unit */ up++; u=*up; cut=DECDPUN; } #endif return bcd; } /* decNumberGetBCD */ /* ------------------------------------------------------------------ */ /* decNumberSetBCD -- set (replace) the coefficient from BCD8 */ /* dn is the target decNumber */ /* bcd is the uInt array that will source n BCD bytes, most- */ /* significant at offset 0 */ /* n is the number of digits in the source BCD array (bcd) */ /* returns dn */ /* */ /* dn must have space for at least n digits. No error is possible; */ /* if dn is a NaN, or Infinite, or is to become a zero, n must be 1 */ /* and bcd[0] zero. */ /* ------------------------------------------------------------------ */ decNumber * decNumberSetBCD(decNumber *dn, const uByte *bcd, uInt n) { Unit *up=dn->lsu+D2U(dn->digits)-1; /* -> msu [target pointer] */ const uByte *ub=bcd; /* -> source msd */ #if DECDPUN==1 /* trivial simple copy */ for (; ub=dn->lsu; up--) { /* each Unit from msu */ *up=0; /* will take <=DECDPUN digits */ for (; cut>0; ub++, cut--) *up=X10(*up)+*ub; cut=DECDPUN; /* next Unit has all digits */ } #endif dn->digits=n; /* set digit count */ return dn; } /* decNumberSetBCD */ /* ------------------------------------------------------------------ */ /* decNumberIsNormal -- test normality of a decNumber */ /* dn is the decNumber to test */ /* set is the context to use for Emin */ /* returns 1 if |dn| is finite and >=Nmin, 0 otherwise */ /* ------------------------------------------------------------------ */ Int decNumberIsNormal(const decNumber *dn, decContext *set) { Int ae; /* adjusted exponent */ #if DECCHECK if (decCheckOperands(DECUNRESU, DECUNUSED, dn, set)) return 0; #endif if (decNumberIsSpecial(dn)) return 0; /* not finite */ if (decNumberIsZero(dn)) return 0; /* not non-zero */ ae=dn->exponent+dn->digits-1; /* adjusted exponent */ if (aeemin) return 0; /* is subnormal */ return 1; } /* decNumberIsNormal */ /* ------------------------------------------------------------------ */ /* decNumberIsSubnormal -- test subnormality of a decNumber */ /* dn is the decNumber to test */ /* set is the context to use for Emin */ /* returns 1 if |dn| is finite, non-zero, and exponent+dn->digits-1; /* adjusted exponent */ if (aeemin) return 1; /* is subnormal */ return 0; } /* decNumberIsSubnormal */ /* ------------------------------------------------------------------ */ /* decNumberTrim -- remove insignificant zeros */ /* */ /* dn is the number to trim */ /* returns dn */ /* */ /* All fields are updated as required. This is a utility operation, */ /* so special values are unchanged and no error is possible. The */ /* zeros are removed unconditionally. */ /* ------------------------------------------------------------------ */ decNumber * decNumberTrim(decNumber *dn) { Int dropped; /* work */ decContext set; /* .. */ #if DECCHECK if (decCheckOperands(DECUNRESU, DECUNUSED, dn, DECUNCONT)) return dn; #endif decContextDefault(&set, DEC_INIT_BASE); /* clamp=0 */ return decTrim(dn, &set, 0, 1, &dropped); } /* decNumberTrim */ /* ------------------------------------------------------------------ */ /* decNumberVersion -- return the name and version of this module */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ const char * decNumberVersion(void) { return DECVERSION; } /* decNumberVersion */ /* ------------------------------------------------------------------ */ /* decNumberZero -- set a number to 0 */ /* */ /* dn is the number to set, with space for one digit */ /* returns dn */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ /* Memset is not used as it is much slower in some environments. */ decNumber * decNumberZero(decNumber *dn) { #if DECCHECK if (decCheckOperands(dn, DECUNUSED, DECUNUSED, DECUNCONT)) return dn; #endif dn->bits=0; dn->exponent=0; dn->digits=1; dn->lsu[0]=0; return dn; } /* decNumberZero */ /* ================================================================== */ /* Local routines */ /* ================================================================== */ /* ------------------------------------------------------------------ */ /* decToString -- lay out a number into a string */ /* */ /* dn is the number to lay out */ /* string is where to lay out the number */ /* eng is 1 if Engineering, 0 if Scientific */ /* */ /* string must be at least dn->digits+14 characters long */ /* No error is possible. */ /* */ /* Note that this routine can generate a -0 or 0.000. These are */ /* never generated in subset to-number or arithmetic, but can occur */ /* in non-subset arithmetic (e.g., -1*0 or 1.234-1.234). */ /* ------------------------------------------------------------------ */ /* If DECCHECK is enabled the string "?" is returned if a number is */ /* invalid. */ static void decToString(const decNumber *dn, char *string, Flag eng) { Int exp=dn->exponent; /* local copy */ Int e; /* E-part value */ Int pre; /* digits before the '.' */ Int cut; /* for counting digits in a Unit */ char *c=string; /* work [output pointer] */ const Unit *up=dn->lsu+D2U(dn->digits)-1; /* -> msu [input pointer] */ uInt u, pow; /* work */ #if DECCHECK if (decCheckOperands(DECUNRESU, dn, DECUNUSED, DECUNCONT)) { strcpy(string, "?"); return;} #endif if (decNumberIsNegative(dn)) { /* Negatives get a minus */ *c='-'; c++; } if (dn->bits&DECSPECIAL) { /* Is a special value */ if (decNumberIsInfinite(dn)) { strcpy(c, "Inf"); strcpy(c+3, "inity"); return;} /* a NaN */ if (dn->bits&DECSNAN) { /* signalling NaN */ *c='s'; c++; } strcpy(c, "NaN"); c+=3; /* step past */ /* if not a clean non-zero coefficient, that's all there is in a */ /* NaN string */ if (exp!=0 || (*dn->lsu==0 && dn->digits==1)) return; /* [drop through to add integer] */ } /* calculate how many digits in msu, and hence first cut */ cut=MSUDIGITS(dn->digits); /* [faster than remainder] */ cut--; /* power of ten for digit */ if (exp==0) { /* simple integer [common fastpath] */ for (;up>=dn->lsu; up--) { /* each Unit from msu */ u=*up; /* contains DECDPUN digits to lay out */ for (; cut>=0; c++, cut--) TODIGIT(u, cut, c, pow); cut=DECDPUN-1; /* next Unit has all digits */ } *c='\0'; /* terminate the string */ return;} /* non-0 exponent -- assume plain form */ pre=dn->digits+exp; /* digits before '.' */ e=0; /* no E */ if ((exp>0) || (pre<-5)) { /* need exponential form */ e=exp+dn->digits-1; /* calculate E value */ pre=1; /* assume one digit before '.' */ if (eng && (e!=0)) { /* engineering: may need to adjust */ Int adj; /* adjustment */ /* The C remainder operator is undefined for negative numbers, so */ /* a positive remainder calculation must be used here */ if (e<0) { adj=(-e)%3; if (adj!=0) adj=3-adj; } else { /* e>0 */ adj=e%3; } e=e-adj; /* if dealing with zero still produce an exponent which is a */ /* multiple of three, as expected, but there will only be the */ /* one zero before the E, still. Otherwise note the padding. */ if (!ISZERO(dn)) pre+=adj; else { /* is zero */ if (adj!=0) { /* 0.00Esnn needed */ e=e+3; pre=-(2-adj); } } /* zero */ } /* eng */ } /* need exponent */ /* lay out the digits of the coefficient, adding 0s and . as needed */ u=*up; if (pre>0) { /* xxx.xxx or xx00 (engineering) form */ Int n=pre; for (; pre>0; pre--, c++, cut--) { if (cut<0) { /* need new Unit */ if (up==dn->lsu) break; /* out of input digits (pre>digits) */ up--; cut=DECDPUN-1; u=*up; } TODIGIT(u, cut, c, pow); } if (ndigits) { /* more to come, after '.' */ *c='.'; c++; for (;; c++, cut--) { if (cut<0) { /* need new Unit */ if (up==dn->lsu) break; /* out of input digits */ up--; cut=DECDPUN-1; u=*up; } TODIGIT(u, cut, c, pow); } } else for (; pre>0; pre--, c++) *c='0'; /* 0 padding (for engineering) needed */ } else { /* 0.xxx or 0.000xxx form */ *c='0'; c++; *c='.'; c++; for (; pre<0; pre++, c++) *c='0'; /* add any 0's after '.' */ for (; ; c++, cut--) { if (cut<0) { /* need new Unit */ if (up==dn->lsu) break; /* out of input digits */ up--; cut=DECDPUN-1; u=*up; } TODIGIT(u, cut, c, pow); } } /* Finally add the E-part, if needed. It will never be 0, has a base maximum and minimum of +999999999 through -999999999, but could range down to -1999999998 for anormal numbers */ if (e!=0) { Flag had=0; /* 1=had non-zero */ *c='E'; c++; *c='+'; c++; /* assume positive */ u=e; /* .. */ if (e<0) { *(c-1)='-'; /* oops, need - */ u=-e; /* uInt, please */ } /* lay out the exponent [_itoa or equivalent is not ANSI C] */ for (cut=9; cut>=0; cut--) { TODIGIT(u, cut, c, pow); if (*c=='0' && !had) continue; /* skip leading zeros */ had=1; /* had non-0 */ c++; /* step for next */ } /* cut */ } *c='\0'; /* terminate the string (all paths) */ return; } /* decToString */ /* ------------------------------------------------------------------ */ /* decAddOp -- add/subtract operation */ /* */ /* This computes C = A + B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X+X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* negate is DECNEG if rhs should be negated, or 0 otherwise */ /* status accumulates status for the caller */ /* */ /* C must have space for set->digits digits. */ /* Inexact in status must be 0 for correct Exact zero sign in result */ /* ------------------------------------------------------------------ */ /* If possible, the coefficient is calculated directly into C. */ /* However, if: */ /* -- a digits+1 calculation is needed because the numbers are */ /* unaligned and span more than set->digits digits */ /* -- a carry to digits+1 digits looks possible */ /* -- C is the same as A or B, and the result would destructively */ /* overlap the A or B coefficient */ /* then the result must be calculated into a temporary buffer. In */ /* this case a local (stack) buffer is used if possible, and only if */ /* too long for that does malloc become the final resort. */ /* */ /* Misalignment is handled as follows: */ /* Apad: (AExp>BExp) Swap operands and proceed as for BExp>AExp. */ /* BPad: Apply the padding by a combination of shifting (whole */ /* units) and multiplication (part units). */ /* */ /* Addition, especially x=x+1, is speed-critical. */ /* The static buffer is larger than might be expected to allow for */ /* calls from higher-level funtions (notable exp). */ /* ------------------------------------------------------------------ */ static decNumber * decAddOp(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set, uByte negate, uInt *status) { #if DECSUBSET decNumber *alloclhs=NULL; /* non-NULL if rounded lhs allocated */ decNumber *allocrhs=NULL; /* .., rhs */ #endif Int rhsshift; /* working shift (in Units) */ Int maxdigits; /* longest logical length */ Int mult; /* multiplier */ Int residue; /* rounding accumulator */ uByte bits; /* result bits */ Flag diffsign; /* non-0 if arguments have different sign */ Unit *acc; /* accumulator for result */ Unit accbuff[SD2U(DECBUFFER*2+20)]; /* local buffer [*2+20 reduces many */ /* allocations when called from */ /* other operations, notable exp] */ Unit *allocacc=NULL; /* -> allocated acc buffer, iff allocated */ Int reqdigits=set->digits; /* local copy; requested DIGITS */ Int padding; /* work */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operands and set lostDigits status, as needed */ if (lhs->digits>reqdigits) { alloclhs=decRoundOperand(lhs, set, status); if (alloclhs==NULL) break; lhs=alloclhs; } if (rhs->digits>reqdigits) { allocrhs=decRoundOperand(rhs, set, status); if (allocrhs==NULL) break; rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ /* note whether signs differ [used all paths] */ diffsign=(Flag)((lhs->bits^rhs->bits^negate)&DECNEG); /* handle infinities and NaNs */ if (SPECIALARGS) { /* a special bit set */ if (SPECIALARGS & (DECSNAN | DECNAN)) /* a NaN */ decNaNs(res, lhs, rhs, set, status); else { /* one or two infinities */ if (decNumberIsInfinite(lhs)) { /* LHS is infinity */ /* two infinities with different signs is invalid */ if (decNumberIsInfinite(rhs) && diffsign) { *status|=DEC_Invalid_operation; break; } bits=lhs->bits & DECNEG; /* get sign from LHS */ } else bits=(rhs->bits^negate) & DECNEG;/* RHS must be Infinity */ bits|=DECINF; decNumberZero(res); res->bits=bits; /* set +/- infinity */ } /* an infinity */ break; } /* Quick exit for add 0s; return the non-0, modified as need be */ if (ISZERO(lhs)) { Int adjust; /* work */ Int lexp=lhs->exponent; /* save in case LHS==RES */ bits=lhs->bits; /* .. */ residue=0; /* clear accumulator */ decCopyFit(res, rhs, set, &residue, status); /* copy (as needed) */ res->bits^=negate; /* flip if rhs was negated */ #if DECSUBSET if (set->extended) { /* exponents on zeros count */ #endif /* exponent will be the lower of the two */ adjust=lexp-res->exponent; /* adjustment needed [if -ve] */ if (ISZERO(res)) { /* both 0: special IEEE 754 rules */ if (adjust<0) res->exponent=lexp; /* set exponent */ /* 0-0 gives +0 unless rounding to -infinity, and -0-0 gives -0 */ if (diffsign) { if (set->round!=DEC_ROUND_FLOOR) res->bits=0; else res->bits=DECNEG; /* preserve 0 sign */ } } else { /* non-0 res */ if (adjust<0) { /* 0-padding needed */ if ((res->digits-adjust)>set->digits) { adjust=res->digits-set->digits; /* to fit exactly */ *status|=DEC_Rounded; /* [but exact] */ } res->digits=decShiftToMost(res->lsu, res->digits, -adjust); res->exponent+=adjust; /* set the exponent. */ } } /* non-0 res */ #if DECSUBSET } /* extended */ #endif decFinish(res, set, &residue, status); /* clean and finalize */ break;} if (ISZERO(rhs)) { /* [lhs is non-zero] */ Int adjust; /* work */ Int rexp=rhs->exponent; /* save in case RHS==RES */ bits=rhs->bits; /* be clean */ residue=0; /* clear accumulator */ decCopyFit(res, lhs, set, &residue, status); /* copy (as needed) */ #if DECSUBSET if (set->extended) { /* exponents on zeros count */ #endif /* exponent will be the lower of the two */ /* [0-0 case handled above] */ adjust=rexp-res->exponent; /* adjustment needed [if -ve] */ if (adjust<0) { /* 0-padding needed */ if ((res->digits-adjust)>set->digits) { adjust=res->digits-set->digits; /* to fit exactly */ *status|=DEC_Rounded; /* [but exact] */ } res->digits=decShiftToMost(res->lsu, res->digits, -adjust); res->exponent+=adjust; /* set the exponent. */ } #if DECSUBSET } /* extended */ #endif decFinish(res, set, &residue, status); /* clean and finalize */ break;} /* [NB: both fastpath and mainpath code below assume these cases */ /* (notably 0-0) have already been handled] */ /* calculate the padding needed to align the operands */ padding=rhs->exponent-lhs->exponent; /* Fastpath cases where the numbers are aligned and normal, the RHS */ /* is all in one unit, no operand rounding is needed, and no carry, */ /* lengthening, or borrow is needed */ if (padding==0 && rhs->digits<=DECDPUN && rhs->exponent>=set->emin /* [some normals drop through] */ && rhs->exponent<=set->emax-set->digits+1 /* [could clamp] */ && rhs->digits<=reqdigits && lhs->digits<=reqdigits) { Int partial=*lhs->lsu; if (!diffsign) { /* adding */ partial+=*rhs->lsu; if ((partial<=DECDPUNMAX) /* result fits in unit */ && (lhs->digits>=DECDPUN || /* .. and no digits-count change */ partial<(Int)powers[lhs->digits])) { /* .. */ if (res!=lhs) decNumberCopy(res, lhs); /* not in place */ *res->lsu=(Unit)partial; /* [copy could have overwritten RHS] */ break; } /* else drop out for careful add */ } else { /* signs differ */ partial-=*rhs->lsu; if (partial>0) { /* no borrow needed, and non-0 result */ if (res!=lhs) decNumberCopy(res, lhs); /* not in place */ *res->lsu=(Unit)partial; /* this could have reduced digits [but result>0] */ res->digits=decGetDigits(res->lsu, D2U(res->digits)); break; } /* else drop out for careful subtract */ } } /* Now align (pad) the lhs or rhs so they can be added or */ /* subtracted, as necessary. If one number is much larger than */ /* the other (that is, if in plain form there is a least one */ /* digit between the lowest digit of one and the highest of the */ /* other) padding with up to DIGITS-1 trailing zeros may be */ /* needed; then apply rounding (as exotic rounding modes may be */ /* affected by the residue). */ rhsshift=0; /* rhs shift to left (padding) in Units */ bits=lhs->bits; /* assume sign is that of LHS */ mult=1; /* likely multiplier */ /* [if padding==0 the operands are aligned; no padding is needed] */ if (padding!=0) { /* some padding needed; always pad the RHS, as any required */ /* padding can then be effected by a simple combination of */ /* shifts and a multiply */ Flag swapped=0; if (padding<0) { /* LHS needs the padding */ const decNumber *t; padding=-padding; /* will be +ve */ bits=(uByte)(rhs->bits^negate); /* assumed sign is now that of RHS */ t=lhs; lhs=rhs; rhs=t; swapped=1; } /* If, after pad, rhs would be longer than lhs by digits+1 or */ /* more then lhs cannot affect the answer, except as a residue, */ /* so only need to pad up to a length of DIGITS+1. */ if (rhs->digits+padding > lhs->digits+reqdigits+1) { /* The RHS is sufficient */ /* for residue use the relative sign indication... */ Int shift=reqdigits-rhs->digits; /* left shift needed */ residue=1; /* residue for rounding */ if (diffsign) residue=-residue; /* signs differ */ /* copy, shortening if necessary */ decCopyFit(res, rhs, set, &residue, status); /* if it was already shorter, then need to pad with zeros */ if (shift>0) { res->digits=decShiftToMost(res->lsu, res->digits, shift); res->exponent-=shift; /* adjust the exponent. */ } /* flip the result sign if unswapped and rhs was negated */ if (!swapped) res->bits^=negate; decFinish(res, set, &residue, status); /* done */ break;} /* LHS digits may affect result */ rhsshift=D2U(padding+1)-1; /* this much by Unit shift .. */ mult=powers[padding-(rhsshift*DECDPUN)]; /* .. this by multiplication */ } /* padding needed */ if (diffsign) mult=-mult; /* signs differ */ /* determine the longer operand */ maxdigits=rhs->digits+padding; /* virtual length of RHS */ if (lhs->digits>maxdigits) maxdigits=lhs->digits; /* Decide on the result buffer to use; if possible place directly */ /* into result. */ acc=res->lsu; /* assume add direct to result */ /* If destructive overlap, or the number is too long, or a carry or */ /* borrow to DIGITS+1 might be possible, a buffer must be used. */ /* [Might be worth more sophisticated tests when maxdigits==reqdigits] */ if ((maxdigits>=reqdigits) /* is, or could be, too large */ || (res==rhs && rhsshift>0)) { /* destructive overlap */ /* buffer needed, choose it; units for maxdigits digits will be */ /* needed, +1 Unit for carry or borrow */ Int need=D2U(maxdigits)+1; acc=accbuff; /* assume use local buffer */ if (need*sizeof(Unit)>sizeof(accbuff)) { /* printf("malloc add %ld %ld\n", need, sizeof(accbuff)); */ allocacc=(Unit *)malloc(need*sizeof(Unit)); if (allocacc==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} acc=allocacc; } } res->bits=(uByte)(bits&DECNEG); /* it's now safe to overwrite.. */ res->exponent=lhs->exponent; /* .. operands (even if aliased) */ #if DECTRACE decDumpAr('A', lhs->lsu, D2U(lhs->digits)); decDumpAr('B', rhs->lsu, D2U(rhs->digits)); printf(" :h: %ld %ld\n", rhsshift, mult); #endif /* add [A+B*m] or subtract [A+B*(-m)] */ res->digits=decUnitAddSub(lhs->lsu, D2U(lhs->digits), rhs->lsu, D2U(rhs->digits), rhsshift, acc, mult) *DECDPUN; /* [units -> digits] */ if (res->digits<0) { /* borrowed... */ res->digits=-res->digits; res->bits^=DECNEG; /* flip the sign */ } #if DECTRACE decDumpAr('+', acc, D2U(res->digits)); #endif /* If a buffer was used the result must be copied back, possibly */ /* shortening. (If no buffer was used then the result must have */ /* fit, so can't need rounding and residue must be 0.) */ residue=0; /* clear accumulator */ if (acc!=res->lsu) { #if DECSUBSET if (set->extended) { /* round from first significant digit */ #endif /* remove leading zeros that were added due to rounding up to */ /* integral Units -- before the test for rounding. */ if (res->digits>reqdigits) res->digits=decGetDigits(acc, D2U(res->digits)); decSetCoeff(res, set, acc, res->digits, &residue, status); #if DECSUBSET } else { /* subset arithmetic rounds from original significant digit */ /* May have an underestimate. This only occurs when both */ /* numbers fit in DECDPUN digits and are padding with a */ /* negative multiple (-10, -100...) and the top digit(s) become */ /* 0. (This only matters when using X3.274 rules where the */ /* leading zero could be included in the rounding.) */ if (res->digitsdigits))=0; /* ensure leading 0 is there */ res->digits=maxdigits; } else { /* remove leading zeros that added due to rounding up to */ /* integral Units (but only those in excess of the original */ /* maxdigits length, unless extended) before test for rounding. */ if (res->digits>reqdigits) { res->digits=decGetDigits(acc, D2U(res->digits)); if (res->digitsdigits=maxdigits; } } decSetCoeff(res, set, acc, res->digits, &residue, status); /* Now apply rounding if needed before removing leading zeros. */ /* This is safe because subnormals are not a possibility */ if (residue!=0) { decApplyRound(res, set, residue, status); residue=0; /* did what needed to be done */ } } /* subset */ #endif } /* used buffer */ /* strip leading zeros [these were left on in case of subset subtract] */ res->digits=decGetDigits(res->lsu, D2U(res->digits)); /* apply checks and rounding */ decFinish(res, set, &residue, status); /* "When the sum of two operands with opposite signs is exactly */ /* zero, the sign of that sum shall be '+' in all rounding modes */ /* except round toward -Infinity, in which mode that sign shall be */ /* '-'." [Subset zeros also never have '-', set by decFinish.] */ if (ISZERO(res) && diffsign #if DECSUBSET && set->extended #endif && (*status&DEC_Inexact)==0) { if (set->round==DEC_ROUND_FLOOR) res->bits|=DECNEG; /* sign - */ else res->bits&=~DECNEG; /* sign + */ } } while(0); /* end protected */ free(allocacc); /* drop any storage used */ #if DECSUBSET free(allocrhs); /* .. */ free(alloclhs); /* .. */ #endif return res; } /* decAddOp */ /* ------------------------------------------------------------------ */ /* decDivideOp -- division operation */ /* */ /* This routine performs the calculations for all four division */ /* operators (divide, divideInteger, remainder, remainderNear). */ /* */ /* C=A op B */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X/X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* op is DIVIDE, DIVIDEINT, REMAINDER, or REMNEAR respectively. */ /* status is the usual accumulator */ /* */ /* C must have space for set->digits digits. */ /* */ /* ------------------------------------------------------------------ */ /* The underlying algorithm of this routine is the same as in the */ /* 1981 S/370 implementation, that is, non-restoring long division */ /* with bi-unit (rather than bi-digit) estimation for each unit */ /* multiplier. In this pseudocode overview, complications for the */ /* Remainder operators and division residues for exact rounding are */ /* omitted for clarity. */ /* */ /* Prepare operands and handle special values */ /* Test for x/0 and then 0/x */ /* Exp =Exp1 - Exp2 */ /* Exp =Exp +len(var1) -len(var2) */ /* Sign=Sign1 * Sign2 */ /* Pad accumulator (Var1) to double-length with 0's (pad1) */ /* Pad Var2 to same length as Var1 */ /* msu2pair/plus=1st 2 or 1 units of var2, +1 to allow for round */ /* have=0 */ /* Do until (have=digits+1 OR residue=0) */ /* if exp<0 then if integer divide/residue then leave */ /* this_unit=0 */ /* Do forever */ /* compare numbers */ /* if <0 then leave inner_loop */ /* if =0 then (* quick exit without subtract *) do */ /* this_unit=this_unit+1; output this_unit */ /* leave outer_loop; end */ /* Compare lengths of numbers (mantissae): */ /* If same then tops2=msu2pair -- {units 1&2 of var2} */ /* else tops2=msu2plus -- {0, unit 1 of var2} */ /* tops1=first_unit_of_Var1*10**DECDPUN +second_unit_of_var1 */ /* mult=tops1/tops2 -- Good and safe guess at divisor */ /* if mult=0 then mult=1 */ /* this_unit=this_unit+mult */ /* subtract */ /* end inner_loop */ /* if have\=0 | this_unit\=0 then do */ /* output this_unit */ /* have=have+1; end */ /* var2=var2/10 */ /* exp=exp-1 */ /* end outer_loop */ /* exp=exp+1 -- set the proper exponent */ /* if have=0 then generate answer=0 */ /* Return (Result is defined by Var1) */ /* */ /* ------------------------------------------------------------------ */ /* Two working buffers are needed during the division; one (digits+ */ /* 1) to accumulate the result, and the other (up to 2*digits+1) for */ /* long subtractions. These are acc and var1 respectively. */ /* var1 is a copy of the lhs coefficient, var2 is the rhs coefficient.*/ /* The static buffers may be larger than might be expected to allow */ /* for calls from higher-level funtions (notable exp). */ /* ------------------------------------------------------------------ */ static decNumber * decDivideOp(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set, Flag op, uInt *status) { #if DECSUBSET decNumber *alloclhs=NULL; /* non-NULL if rounded lhs allocated */ decNumber *allocrhs=NULL; /* .., rhs */ #endif Unit accbuff[SD2U(DECBUFFER+DECDPUN+10)]; /* local buffer */ Unit *acc=accbuff; /* -> accumulator array for result */ Unit *allocacc=NULL; /* -> allocated buffer, iff allocated */ Unit *accnext; /* -> where next digit will go */ Int acclength; /* length of acc needed [Units] */ Int accunits; /* count of units accumulated */ Int accdigits; /* count of digits accumulated */ Unit varbuff[SD2U(DECBUFFER*2+DECDPUN)]; /* buffer for var1 */ Unit *var1=varbuff; /* -> var1 array for long subtraction */ Unit *varalloc=NULL; /* -> allocated buffer, iff used */ Unit *msu1; /* -> msu of var1 */ const Unit *var2; /* -> var2 array */ const Unit *msu2; /* -> msu of var2 */ Int msu2plus; /* msu2 plus one [does not vary] */ eInt msu2pair; /* msu2 pair plus one [does not vary] */ Int var1units, var2units; /* actual lengths */ Int var2ulen; /* logical length (units) */ Int var1initpad=0; /* var1 initial padding (digits) */ Int maxdigits; /* longest LHS or required acc length */ Int mult; /* multiplier for subtraction */ Unit thisunit; /* current unit being accumulated */ Int residue; /* for rounding */ Int reqdigits=set->digits; /* requested DIGITS */ Int exponent; /* working exponent */ Int maxexponent=0; /* DIVIDE maximum exponent if unrounded */ uByte bits; /* working sign */ Unit *target; /* work */ const Unit *source; /* .. */ uInt const *pow; /* .. */ Int shift, cut; /* .. */ #if DECSUBSET Int dropped; /* work */ #endif #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operands and set lostDigits status, as needed */ if (lhs->digits>reqdigits) { alloclhs=decRoundOperand(lhs, set, status); if (alloclhs==NULL) break; lhs=alloclhs; } if (rhs->digits>reqdigits) { allocrhs=decRoundOperand(rhs, set, status); if (allocrhs==NULL) break; rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ bits=(lhs->bits^rhs->bits)&DECNEG; /* assumed sign for divisions */ /* handle infinities and NaNs */ if (SPECIALARGS) { /* a special bit set */ if (SPECIALARGS & (DECSNAN | DECNAN)) { /* one or two NaNs */ decNaNs(res, lhs, rhs, set, status); break; } /* one or two infinities */ if (decNumberIsInfinite(lhs)) { /* LHS (dividend) is infinite */ if (decNumberIsInfinite(rhs) || /* two infinities are invalid .. */ op & (REMAINDER | REMNEAR)) { /* as is remainder of infinity */ *status|=DEC_Invalid_operation; break; } /* [Note that infinity/0 raises no exceptions] */ decNumberZero(res); res->bits=bits|DECINF; /* set +/- infinity */ break; } else { /* RHS (divisor) is infinite */ residue=0; if (op&(REMAINDER|REMNEAR)) { /* result is [finished clone of] lhs */ decCopyFit(res, lhs, set, &residue, status); } else { /* a division */ decNumberZero(res); res->bits=bits; /* set +/- zero */ /* for DIVIDEINT the exponent is always 0. For DIVIDE, result */ /* is a 0 with infinitely negative exponent, clamped to minimum */ if (op&DIVIDE) { res->exponent=set->emin-set->digits+1; *status|=DEC_Clamped; } } decFinish(res, set, &residue, status); break; } } /* handle 0 rhs (x/0) */ if (ISZERO(rhs)) { /* x/0 is always exceptional */ if (ISZERO(lhs)) { decNumberZero(res); /* [after lhs test] */ *status|=DEC_Division_undefined;/* 0/0 will become NaN */ } else { decNumberZero(res); if (op&(REMAINDER|REMNEAR)) *status|=DEC_Invalid_operation; else { *status|=DEC_Division_by_zero; /* x/0 */ res->bits=bits|DECINF; /* .. is +/- Infinity */ } } break;} /* handle 0 lhs (0/x) */ if (ISZERO(lhs)) { /* 0/x [x!=0] */ #if DECSUBSET if (!set->extended) decNumberZero(res); else { #endif if (op&DIVIDE) { residue=0; exponent=lhs->exponent-rhs->exponent; /* ideal exponent */ decNumberCopy(res, lhs); /* [zeros always fit] */ res->bits=bits; /* sign as computed */ res->exponent=exponent; /* exponent, too */ decFinalize(res, set, &residue, status); /* check exponent */ } else if (op&DIVIDEINT) { decNumberZero(res); /* integer 0 */ res->bits=bits; /* sign as computed */ } else { /* a remainder */ exponent=rhs->exponent; /* [save in case overwrite] */ decNumberCopy(res, lhs); /* [zeros always fit] */ if (exponentexponent) res->exponent=exponent; /* use lower */ } #if DECSUBSET } #endif break;} /* Precalculate exponent. This starts off adjusted (and hence fits */ /* in 31 bits) and becomes the usual unadjusted exponent as the */ /* division proceeds. The order of evaluation is important, here, */ /* to avoid wrap. */ exponent=(lhs->exponent+lhs->digits)-(rhs->exponent+rhs->digits); /* If the working exponent is -ve, then some quick exits are */ /* possible because the quotient is known to be <1 */ /* [for REMNEAR, it needs to be < -1, as -0.5 could need work] */ if (exponent<0 && !(op==DIVIDE)) { if (op&DIVIDEINT) { decNumberZero(res); /* integer part is 0 */ #if DECSUBSET if (set->extended) #endif res->bits=bits; /* set +/- zero */ break;} /* fastpath remainders so long as the lhs has the smaller */ /* (or equal) exponent */ if (lhs->exponent<=rhs->exponent) { if (op&REMAINDER || exponent<-1) { /* It is REMAINDER or safe REMNEAR; result is [finished */ /* clone of] lhs (r = x - 0*y) */ residue=0; decCopyFit(res, lhs, set, &residue, status); decFinish(res, set, &residue, status); break; } /* [unsafe REMNEAR drops through] */ } } /* fastpaths */ /* Long (slow) division is needed; roll up the sleeves... */ /* The accumulator will hold the quotient of the division. */ /* If it needs to be too long for stack storage, then allocate. */ acclength=D2U(reqdigits+DECDPUN); /* in Units */ if (acclength*sizeof(Unit)>sizeof(accbuff)) { /* printf("malloc dvacc %ld units\n", acclength); */ allocacc=(Unit *)malloc(acclength*sizeof(Unit)); if (allocacc==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} acc=allocacc; /* use the allocated space */ } /* var1 is the padded LHS ready for subtractions. */ /* If it needs to be too long for stack storage, then allocate. */ /* The maximum units needed for var1 (long subtraction) is: */ /* Enough for */ /* (rhs->digits+reqdigits-1) -- to allow full slide to right */ /* or (lhs->digits) -- to allow for long lhs */ /* whichever is larger */ /* +1 -- for rounding of slide to right */ /* +1 -- for leading 0s */ /* +1 -- for pre-adjust if a remainder or DIVIDEINT */ /* [Note: unused units do not participate in decUnitAddSub data] */ maxdigits=rhs->digits+reqdigits-1; if (lhs->digits>maxdigits) maxdigits=lhs->digits; var1units=D2U(maxdigits)+2; /* allocate a guard unit above msu1 for REMAINDERNEAR */ if (!(op&DIVIDE)) var1units++; if ((var1units+1)*sizeof(Unit)>sizeof(varbuff)) { /* printf("malloc dvvar %ld units\n", var1units+1); */ varalloc=(Unit *)malloc((var1units+1)*sizeof(Unit)); if (varalloc==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} var1=varalloc; /* use the allocated space */ } /* Extend the lhs and rhs to full long subtraction length. The lhs */ /* is truly extended into the var1 buffer, with 0 padding, so a */ /* subtract in place is always possible. The rhs (var2) has */ /* virtual padding (implemented by decUnitAddSub). */ /* One guard unit was allocated above msu1 for rem=rem+rem in */ /* REMAINDERNEAR. */ msu1=var1+var1units-1; /* msu of var1 */ source=lhs->lsu+D2U(lhs->digits)-1; /* msu of input array */ for (target=msu1; source>=lhs->lsu; source--, target--) *target=*source; for (; target>=var1; target--) *target=0; /* rhs (var2) is left-aligned with var1 at the start */ var2ulen=var1units; /* rhs logical length (units) */ var2units=D2U(rhs->digits); /* rhs actual length (units) */ var2=rhs->lsu; /* -> rhs array */ msu2=var2+var2units-1; /* -> msu of var2 [never changes] */ /* now set up the variables which will be used for estimating the */ /* multiplication factor. If these variables are not exact, add */ /* 1 to make sure that the multiplier is never overestimated. */ msu2plus=*msu2; /* it's value .. */ if (var2units>1) msu2plus++; /* .. +1 if any more */ msu2pair=(eInt)*msu2*(DECDPUNMAX+1);/* top two pair .. */ if (var2units>1) { /* .. [else treat 2nd as 0] */ msu2pair+=*(msu2-1); /* .. */ if (var2units>2) msu2pair++; /* .. +1 if any more */ } /* The calculation is working in units, which may have leading zeros, */ /* but the exponent was calculated on the assumption that they are */ /* both left-aligned. Adjust the exponent to compensate: add the */ /* number of leading zeros in var1 msu and subtract those in var2 msu. */ /* [This is actually done by counting the digits and negating, as */ /* lead1=DECDPUN-digits1, and similarly for lead2.] */ for (pow=&powers[1]; *msu1>=*pow; pow++) exponent--; for (pow=&powers[1]; *msu2>=*pow; pow++) exponent++; /* Now, if doing an integer divide or remainder, ensure that */ /* the result will be Unit-aligned. To do this, shift the var1 */ /* accumulator towards least if need be. (It's much easier to */ /* do this now than to reassemble the residue afterwards, if */ /* doing a remainder.) Also ensure the exponent is not negative. */ if (!(op&DIVIDE)) { Unit *u; /* work */ /* save the initial 'false' padding of var1, in digits */ var1initpad=(var1units-D2U(lhs->digits))*DECDPUN; /* Determine the shift to do. */ if (exponent<0) cut=-exponent; else cut=DECDPUN-exponent%DECDPUN; decShiftToLeast(var1, var1units, cut); exponent+=cut; /* maintain numerical value */ var1initpad-=cut; /* .. and reduce padding */ /* clean any most-significant units which were just emptied */ for (u=msu1; cut>=DECDPUN; cut-=DECDPUN, u--) *u=0; } /* align */ else { /* is DIVIDE */ maxexponent=lhs->exponent-rhs->exponent; /* save */ /* optimization: if the first iteration will just produce 0, */ /* preadjust to skip it [valid for DIVIDE only] */ if (*msu1<*msu2) { var2ulen--; /* shift down */ exponent-=DECDPUN; /* update the exponent */ } } /* ---- start the long-division loops ------------------------------ */ accunits=0; /* no units accumulated yet */ accdigits=0; /* .. or digits */ accnext=acc+acclength-1; /* -> msu of acc [NB: allows digits+1] */ for (;;) { /* outer forever loop */ thisunit=0; /* current unit assumed 0 */ /* find the next unit */ for (;;) { /* inner forever loop */ /* strip leading zero units [from either pre-adjust or from */ /* subtract last time around]. Leave at least one unit. */ for (; *msu1==0 && msu1>var1; msu1--) var1units--; if (var1units msu */ for (pv1=msu1; ; pv1--, pv2--) { /* v1=*pv1 -- always OK */ v2=0; /* assume in padding */ if (pv2>=var2) v2=*pv2; /* in range */ if (*pv1!=v2) break; /* no longer the same */ if (pv1==var1) break; /* done; leave pv1 as is */ } /* here when all inspected or a difference seen */ if (*pv1v2. Prepare for real subtraction; the lengths are equal */ /* Estimate the multiplier (there's always a msu1-1)... */ /* Bring in two units of var2 to provide a good estimate. */ mult=(Int)(((eInt)*msu1*(DECDPUNMAX+1)+*(msu1-1))/msu2pair); } /* lengths the same */ else { /* var1units > var2ulen, so subtraction is safe */ /* The var2 msu is one unit towards the lsu of the var1 msu, */ /* so only one unit for var2 can be used. */ mult=(Int)(((eInt)*msu1*(DECDPUNMAX+1)+*(msu1-1))/msu2plus); } if (mult==0) mult=1; /* must always be at least 1 */ /* subtraction needed; var1 is > var2 */ thisunit=(Unit)(thisunit+mult); /* accumulate */ /* subtract var1-var2, into var1; only the overlap needs */ /* processing, as this is an in-place calculation */ shift=var2ulen-var2units; #if DECTRACE decDumpAr('1', &var1[shift], var1units-shift); decDumpAr('2', var2, var2units); printf("m=%ld\n", -mult); #endif decUnitAddSub(&var1[shift], var1units-shift, var2, var2units, 0, &var1[shift], -mult); #if DECTRACE decDumpAr('#', &var1[shift], var1units-shift); #endif /* var1 now probably has leading zeros; these are removed at the */ /* top of the inner loop. */ } /* inner loop */ /* The next unit has been calculated in full; unless it's a */ /* leading zero, add to acc */ if (accunits!=0 || thisunit!=0) { /* is first or non-zero */ *accnext=thisunit; /* store in accumulator */ /* account exactly for the new digits */ if (accunits==0) { accdigits++; /* at least one */ for (pow=&powers[1]; thisunit>=*pow; pow++) accdigits++; } else accdigits+=DECDPUN; accunits++; /* update count */ accnext--; /* ready for next */ if (accdigits>reqdigits) break; /* have enough digits */ } /* if the residue is zero, the operation is done (unless divide */ /* or divideInteger and still not enough digits yet) */ if (*var1==0 && var1units==1) { /* residue is 0 */ if (op&(REMAINDER|REMNEAR)) break; if ((op&DIVIDE) && (exponent<=maxexponent)) break; /* [drop through if divideInteger] */ } /* also done enough if calculating remainder or integer */ /* divide and just did the last ('units') unit */ if (exponent==0 && !(op&DIVIDE)) break; /* to get here, var1 is less than var2, so divide var2 by the per- */ /* Unit power of ten and go for the next digit */ var2ulen--; /* shift down */ exponent-=DECDPUN; /* update the exponent */ } /* outer loop */ /* ---- division is complete --------------------------------------- */ /* here: acc has at least reqdigits+1 of good results (or fewer */ /* if early stop), starting at accnext+1 (its lsu) */ /* var1 has any residue at the stopping point */ /* accunits is the number of digits collected in acc */ if (accunits==0) { /* acc is 0 */ accunits=1; /* show have a unit .. */ accdigits=1; /* .. */ *accnext=0; /* .. whose value is 0 */ } else accnext++; /* back to last placed */ /* accnext now -> lowest unit of result */ residue=0; /* assume no residue */ if (op&DIVIDE) { /* record the presence of any residue, for rounding */ if (*var1!=0 || var1units>1) residue=1; else { /* no residue */ /* Had an exact division; clean up spurious trailing 0s. */ /* There will be at most DECDPUN-1, from the final multiply, */ /* and then only if the result is non-0 (and even) and the */ /* exponent is 'loose'. */ #if DECDPUN>1 Unit lsu=*accnext; if (!(lsu&0x01) && (lsu!=0)) { /* count the trailing zeros */ Int drop=0; for (;; drop++) { /* [will terminate because lsu!=0] */ if (exponent>=maxexponent) break; /* don't chop real 0s */ #if DECDPUN<=4 if ((lsu-QUOT10(lsu, drop+1) *powers[drop+1])!=0) break; /* found non-0 digit */ #else if (lsu%powers[drop+1]!=0) break; /* found non-0 digit */ #endif exponent++; } if (drop>0) { accunits=decShiftToLeast(accnext, accunits, drop); accdigits=decGetDigits(accnext, accunits); accunits=D2U(accdigits); /* [exponent was adjusted in the loop] */ } } /* neither odd nor 0 */ #endif } /* exact divide */ } /* divide */ else /* op!=DIVIDE */ { /* check for coefficient overflow */ if (accdigits+exponent>reqdigits) { *status|=DEC_Division_impossible; break; } if (op & (REMAINDER|REMNEAR)) { /* [Here, the exponent will be 0, because var1 was adjusted */ /* appropriately.] */ Int postshift; /* work */ Flag wasodd=0; /* integer was odd */ Unit *quotlsu; /* for save */ Int quotdigits; /* .. */ bits=lhs->bits; /* remainder sign is always as lhs */ /* Fastpath when residue is truly 0 is worthwhile [and */ /* simplifies the code below] */ if (*var1==0 && var1units==1) { /* residue is 0 */ Int exp=lhs->exponent; /* save min(exponents) */ if (rhs->exponentexponent; decNumberZero(res); /* 0 coefficient */ #if DECSUBSET if (set->extended) #endif res->exponent=exp; /* .. with proper exponent */ res->bits=(uByte)(bits&DECNEG); /* [cleaned] */ decFinish(res, set, &residue, status); /* might clamp */ break; } /* note if the quotient was odd */ if (*accnext & 0x01) wasodd=1; /* acc is odd */ quotlsu=accnext; /* save in case need to reinspect */ quotdigits=accdigits; /* .. */ /* treat the residue, in var1, as the value to return, via acc */ /* calculate the unused zero digits. This is the smaller of: */ /* var1 initial padding (saved above) */ /* var2 residual padding, which happens to be given by: */ postshift=var1initpad+exponent-lhs->exponent+rhs->exponent; /* [the 'exponent' term accounts for the shifts during divide] */ if (var1initpadexponent; /* exponent is smaller of lhs & rhs */ if (rhs->exponentexponent; /* Now correct the result if doing remainderNear; if it */ /* (looking just at coefficients) is > rhs/2, or == rhs/2 and */ /* the integer was odd then the result should be rem-rhs. */ if (op&REMNEAR) { Int compare, tarunits; /* work */ Unit *up; /* .. */ /* calculate remainder*2 into the var1 buffer (which has */ /* 'headroom' of an extra unit and hence enough space) */ /* [a dedicated 'double' loop would be faster, here] */ tarunits=decUnitAddSub(accnext, accunits, accnext, accunits, 0, accnext, 1); /* decDumpAr('r', accnext, tarunits); */ /* Here, accnext (var1) holds tarunits Units with twice the */ /* remainder's coefficient, which must now be compared to the */ /* RHS. The remainder's exponent may be smaller than the RHS's. */ compare=decUnitCompare(accnext, tarunits, rhs->lsu, D2U(rhs->digits), rhs->exponent-exponent); if (compare==BADINT) { /* deep trouble */ *status|=DEC_Insufficient_storage; break;} /* now restore the remainder by dividing by two; the lsu */ /* is known to be even. */ for (up=accnext; up0 || (compare==0 && wasodd)) { /* adjustment needed */ Int exp, expunits, exprem; /* work */ /* This is effectively causing round-up of the quotient, */ /* so if it was the rare case where it was full and all */ /* nines, it would overflow and hence division-impossible */ /* should be raised */ Flag allnines=0; /* 1 if quotient all nines */ if (quotdigits==reqdigits) { /* could be borderline */ for (up=quotlsu; ; up++) { if (quotdigits>DECDPUN) { if (*up!=DECDPUNMAX) break;/* non-nines */ } else { /* this is the last Unit */ if (*up==powers[quotdigits]-1) allnines=1; break; } quotdigits-=DECDPUN; /* checked those digits */ } /* up */ } /* borderline check */ if (allnines) { *status|=DEC_Division_impossible; break;} /* rem-rhs is needed; the sign will invert. Again, var1 */ /* can safely be used for the working Units array. */ exp=rhs->exponent-exponent; /* RHS padding needed */ /* Calculate units and remainder from exponent. */ expunits=exp/DECDPUN; exprem=exp%DECDPUN; /* subtract [A+B*(-m)]; the result will always be negative */ accunits=-decUnitAddSub(accnext, accunits, rhs->lsu, D2U(rhs->digits), expunits, accnext, -(Int)powers[exprem]); accdigits=decGetDigits(accnext, accunits); /* count digits exactly */ accunits=D2U(accdigits); /* and recalculate the units for copy */ /* [exponent is as for original remainder] */ bits^=DECNEG; /* flip the sign */ } } /* REMNEAR */ } /* REMAINDER or REMNEAR */ } /* not DIVIDE */ /* Set exponent and bits */ res->exponent=exponent; res->bits=(uByte)(bits&DECNEG); /* [cleaned] */ /* Now the coefficient. */ decSetCoeff(res, set, accnext, accdigits, &residue, status); decFinish(res, set, &residue, status); /* final cleanup */ #if DECSUBSET /* If a divide then strip trailing zeros if subset [after round] */ if (!set->extended && (op==DIVIDE)) decTrim(res, set, 0, 1, &dropped); #endif } while(0); /* end protected */ free(varalloc); /* drop any storage used */ free(allocacc); /* .. */ #if DECSUBSET free(allocrhs); /* .. */ free(alloclhs); /* .. */ #endif return res; } /* decDivideOp */ /* ------------------------------------------------------------------ */ /* decMultiplyOp -- multiplication operation */ /* */ /* This routine performs the multiplication C=A x B. */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X*X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* status is the usual accumulator */ /* */ /* C must have space for set->digits digits. */ /* */ /* ------------------------------------------------------------------ */ /* 'Classic' multiplication is used rather than Karatsuba, as the */ /* latter would give only a minor improvement for the short numbers */ /* expected to be handled most (and uses much more memory). */ /* */ /* There are two major paths here: the general-purpose ('old code') */ /* path which handles all DECDPUN values, and a fastpath version */ /* which is used if 64-bit ints are available, DECDPUN<=4, and more */ /* than two calls to decUnitAddSub would be made. */ /* */ /* The fastpath version lumps units together into 8-digit or 9-digit */ /* chunks, and also uses a lazy carry strategy to minimise expensive */ /* 64-bit divisions. The chunks are then broken apart again into */ /* units for continuing processing. Despite this overhead, the */ /* fastpath can speed up some 16-digit operations by 10x (and much */ /* more for higher-precision calculations). */ /* */ /* A buffer always has to be used for the accumulator; in the */ /* fastpath, buffers are also always needed for the chunked copies of */ /* of the operand coefficients. */ /* Static buffers are larger than needed just for multiply, to allow */ /* for calls from other operations (notably exp). */ /* ------------------------------------------------------------------ */ #define FASTMUL (DECUSE64 && DECDPUN<5) static decNumber * decMultiplyOp(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set, uInt *status) { Int accunits; /* Units of accumulator in use */ Int exponent; /* work */ Int residue=0; /* rounding residue */ uByte bits; /* result sign */ Unit *acc; /* -> accumulator Unit array */ Int needbytes; /* size calculator */ void *allocacc=NULL; /* -> allocated accumulator, iff allocated */ Unit accbuff[SD2U(DECBUFFER*4+1)]; /* buffer (+1 for DECBUFFER==0, */ /* *4 for calls from other operations) */ const Unit *mer, *mermsup; /* work */ Int madlength; /* Units in multiplicand */ Int shift; /* Units to shift multiplicand by */ #if FASTMUL /* if DECDPUN is 1 or 3 work in base 10**9, otherwise */ /* (DECDPUN is 2 or 4) then work in base 10**8 */ #if DECDPUN & 1 /* odd */ #define FASTBASE 1000000000 /* base */ #define FASTDIGS 9 /* digits in base */ #define FASTLAZY 18 /* carry resolution point [1->18] */ #else #define FASTBASE 100000000 #define FASTDIGS 8 #define FASTLAZY 1844 /* carry resolution point [1->1844] */ #endif /* three buffers are used, two for chunked copies of the operands */ /* (base 10**8 or base 10**9) and one base 2**64 accumulator with */ /* lazy carry evaluation */ uInt zlhibuff[(DECBUFFER*2+1)/8+1]; /* buffer (+1 for DECBUFFER==0) */ uInt *zlhi=zlhibuff; /* -> lhs array */ uInt *alloclhi=NULL; /* -> allocated buffer, iff allocated */ uInt zrhibuff[(DECBUFFER*2+1)/8+1]; /* buffer (+1 for DECBUFFER==0) */ uInt *zrhi=zrhibuff; /* -> rhs array */ uInt *allocrhi=NULL; /* -> allocated buffer, iff allocated */ uLong zaccbuff[(DECBUFFER*2+1)/4+2]; /* buffer (+1 for DECBUFFER==0) */ /* [allocacc is shared for both paths, as only one will run] */ uLong *zacc=zaccbuff; /* -> accumulator array for exact result */ #if DECDPUN==1 Int zoff; /* accumulator offset */ #endif uInt *lip, *rip; /* item pointers */ uInt *lmsi, *rmsi; /* most significant items */ Int ilhs, irhs, iacc; /* item counts in the arrays */ Int lazy; /* lazy carry counter */ uLong lcarry; /* uLong carry */ uInt carry; /* carry (NB not uLong) */ Int count; /* work */ const Unit *cup; /* .. */ Unit *up; /* .. */ uLong *lp; /* .. */ Int p; /* .. */ #endif #if DECSUBSET decNumber *alloclhs=NULL; /* -> allocated buffer, iff allocated */ decNumber *allocrhs=NULL; /* -> allocated buffer, iff allocated */ #endif #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif /* precalculate result sign */ bits=(uByte)((lhs->bits^rhs->bits)&DECNEG); /* handle infinities and NaNs */ if (SPECIALARGS) { /* a special bit set */ if (SPECIALARGS & (DECSNAN | DECNAN)) { /* one or two NaNs */ decNaNs(res, lhs, rhs, set, status); return res;} /* one or two infinities; Infinity * 0 is invalid */ if (((lhs->bits & DECINF)==0 && ISZERO(lhs)) ||((rhs->bits & DECINF)==0 && ISZERO(rhs))) { *status|=DEC_Invalid_operation; return res;} decNumberZero(res); res->bits=bits|DECINF; /* infinity */ return res;} /* For best speed, as in DMSRCN [the original Rexx numerics */ /* module], use the shorter number as the multiplier (rhs) and */ /* the longer as the multiplicand (lhs) to minimise the number of */ /* adds (partial products) */ if (lhs->digitsdigits) { /* swap... */ const decNumber *hold=lhs; lhs=rhs; rhs=hold; } do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operands and set lostDigits status, as needed */ if (lhs->digits>set->digits) { alloclhs=decRoundOperand(lhs, set, status); if (alloclhs==NULL) break; lhs=alloclhs; } if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, status); if (allocrhs==NULL) break; rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ #if FASTMUL /* fastpath can be used */ /* use the fast path if there are enough digits in the shorter */ /* operand to make the setup and takedown worthwhile */ #define NEEDTWO (DECDPUN*2) /* within two decUnitAddSub calls */ if (rhs->digits>NEEDTWO) { /* use fastpath... */ /* calculate the number of elements in each array */ ilhs=(lhs->digits+FASTDIGS-1)/FASTDIGS; /* [ceiling] */ irhs=(rhs->digits+FASTDIGS-1)/FASTDIGS; /* .. */ iacc=ilhs+irhs; /* allocate buffers if required, as usual */ needbytes=ilhs*sizeof(uInt); if (needbytes>(Int)sizeof(zlhibuff)) { alloclhi=(uInt *)malloc(needbytes); zlhi=alloclhi;} needbytes=irhs*sizeof(uInt); if (needbytes>(Int)sizeof(zrhibuff)) { allocrhi=(uInt *)malloc(needbytes); zrhi=allocrhi;} /* Allocating the accumulator space needs a special case when */ /* DECDPUN=1 because when converting the accumulator to Units */ /* after the multiplication each 8-byte item becomes 9 1-byte */ /* units. Therefore iacc extra bytes are needed at the front */ /* (rounded up to a multiple of 8 bytes), and the uLong */ /* accumulator starts offset the appropriate number of units */ /* to the right to avoid overwrite during the unchunking. */ needbytes=iacc*sizeof(uLong); #if DECDPUN==1 zoff=(iacc+7)/8; /* items to offset by */ needbytes+=zoff*8; #endif if (needbytes>(Int)sizeof(zaccbuff)) { allocacc=(uLong *)malloc(needbytes); zacc=(uLong *)allocacc;} if (zlhi==NULL||zrhi==NULL||zacc==NULL) { *status|=DEC_Insufficient_storage; break;} acc=(Unit *)zacc; /* -> target Unit array */ #if DECDPUN==1 zacc+=zoff; /* start uLong accumulator to right */ #endif /* assemble the chunked copies of the left and right sides */ for (count=lhs->digits, cup=lhs->lsu, lip=zlhi; count>0; lip++) for (p=0, *lip=0; p0; p+=DECDPUN, cup++, count-=DECDPUN) *lip+=*cup*powers[p]; lmsi=lip-1; /* save -> msi */ for (count=rhs->digits, cup=rhs->lsu, rip=zrhi; count>0; rip++) for (p=0, *rip=0; p0; p+=DECDPUN, cup++, count-=DECDPUN) *rip+=*cup*powers[p]; rmsi=rip-1; /* save -> msi */ /* zero the accumulator */ for (lp=zacc; lp0 && rip!=rmsi) continue; lazy=FASTLAZY; /* reset delay count */ /* spin up the accumulator resolving overflows */ for (lp=zacc; lp assume buffer for accumulator */ needbytes=(D2U(lhs->digits)+D2U(rhs->digits))*sizeof(Unit); if (needbytes>(Int)sizeof(accbuff)) { allocacc=(Unit *)malloc(needbytes); if (allocacc==NULL) {*status|=DEC_Insufficient_storage; break;} acc=(Unit *)allocacc; /* use the allocated space */ } /* Now the main long multiplication loop */ /* Unlike the equivalent in the IBM Java implementation, there */ /* is no advantage in calculating from msu to lsu. So, do it */ /* by the book, as it were. */ /* Each iteration calculates ACC=ACC+MULTAND*MULT */ accunits=1; /* accumulator starts at '0' */ *acc=0; /* .. (lsu=0) */ shift=0; /* no multiplicand shift at first */ madlength=D2U(lhs->digits); /* this won't change */ mermsup=rhs->lsu+D2U(rhs->digits); /* -> msu+1 of multiplier */ for (mer=rhs->lsu; merlsu, madlength, 0, &acc[shift], *mer) + shift; else { /* extend acc with a 0; it will be used shortly */ *(acc+accunits)=0; /* [this avoids length of <=0 later] */ accunits++; } /* multiply multiplicand by 10**DECDPUN for next Unit to left */ shift++; /* add this for 'logical length' */ } /* n */ #if FASTMUL } /* unchunked units */ #endif /* common end-path */ #if DECTRACE decDumpAr('*', acc, accunits); /* Show exact result */ #endif /* acc now contains the exact result of the multiplication, */ /* possibly with a leading zero unit; build the decNumber from */ /* it, noting if any residue */ res->bits=bits; /* set sign */ res->digits=decGetDigits(acc, accunits); /* count digits exactly */ /* There can be a 31-bit wrap in calculating the exponent. */ /* This can only happen if both input exponents are negative and */ /* both their magnitudes are large. If there was a wrap, set a */ /* safe very negative exponent, from which decFinalize() will */ /* raise a hard underflow shortly. */ exponent=lhs->exponent+rhs->exponent; /* calculate exponent */ if (lhs->exponent<0 && rhs->exponent<0 && exponent>0) exponent=-2*DECNUMMAXE; /* force underflow */ res->exponent=exponent; /* OK to overwrite now */ /* Set the coefficient. If any rounding, residue records */ decSetCoeff(res, set, acc, res->digits, &residue, status); decFinish(res, set, &residue, status); /* final cleanup */ } while(0); /* end protected */ free(allocacc); /* drop any storage used */ #if DECSUBSET free(allocrhs); /* .. */ free(alloclhs); /* .. */ #endif #if FASTMUL free(allocrhi); /* .. */ free(alloclhi); /* .. */ #endif return res; } /* decMultiplyOp */ /* ------------------------------------------------------------------ */ /* decExpOp -- effect exponentiation */ /* */ /* This computes C = exp(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context; note that rounding mode has no effect */ /* */ /* C must have space for set->digits digits. status is updated but */ /* not set. */ /* */ /* Restrictions: */ /* */ /* digits, emax, and -emin in the context must be less than */ /* 2*DEC_MAX_MATH (1999998), and the rhs must be within these */ /* bounds or a zero. This is an internal routine, so these */ /* restrictions are contractual and not enforced. */ /* */ /* A finite result is rounded using DEC_ROUND_HALF_EVEN; it will */ /* almost always be correctly rounded, but may be up to 1 ulp in */ /* error in rare cases. */ /* */ /* Finite results will always be full precision and Inexact, except */ /* when A is a zero or -Infinity (giving 1 or 0 respectively). */ /* ------------------------------------------------------------------ */ /* This approach used here is similar to the algorithm described in */ /* */ /* Variable Precision Exponential Function, T. E. Hull and */ /* A. Abrham, ACM Transactions on Mathematical Software, Vol 12 #2, */ /* pp79-91, ACM, June 1986. */ /* */ /* with the main difference being that the iterations in the series */ /* evaluation are terminated dynamically (which does not require the */ /* extra variable-precision variables which are expensive in this */ /* context). */ /* */ /* The error analysis in Hull & Abrham's paper applies except for the */ /* round-off error accumulation during the series evaluation. This */ /* code does not precalculate the number of iterations and so cannot */ /* use Horner's scheme. Instead, the accumulation is done at double- */ /* precision, which ensures that the additions of the terms are exact */ /* and do not accumulate round-off (and any round-off errors in the */ /* terms themselves move 'to the right' faster than they can */ /* accumulate). This code also extends the calculation by allowing, */ /* in the spirit of other decNumber operators, the input to be more */ /* precise than the result (the precision used is based on the more */ /* precise of the input or requested result). */ /* */ /* Implementation notes: */ /* */ /* 1. This is separated out as decExpOp so it can be called from */ /* other Mathematical functions (notably Ln) with a wider range */ /* than normal. In particular, it can handle the slightly wider */ /* (double) range needed by Ln (which has to be able to calculate */ /* exp(-x) where x can be the tiniest number (Ntiny). */ /* */ /* 2. Normalizing x to be <=0.1 (instead of <=1) reduces loop */ /* iterations by approximately a third with additional (although */ /* diminishing) returns as the range is reduced to even smaller */ /* fractions. However, h (the power of 10 used to correct the */ /* result at the end, see below) must be kept <=8 as otherwise */ /* the final result cannot be computed. Hence the leverage is a */ /* sliding value (8-h), where potentially the range is reduced */ /* more for smaller values. */ /* */ /* The leverage that can be applied in this way is severely */ /* limited by the cost of the raise-to-the power at the end, */ /* which dominates when the number of iterations is small (less */ /* than ten) or when rhs is short. As an example, the adjustment */ /* x**10,000,000 needs 31 multiplications, all but one full-width. */ /* */ /* 3. The restrictions (especially precision) could be raised with */ /* care, but the full decNumber range seems very hard within the */ /* 32-bit limits. */ /* */ /* 4. The working precisions for the static buffers are twice the */ /* obvious size to allow for calls from decNumberPower. */ /* ------------------------------------------------------------------ */ decNumber * decExpOp(decNumber *res, const decNumber *rhs, decContext *set, uInt *status) { uInt ignore=0; /* working status */ Int h; /* adjusted exponent for 0.xxxx */ Int p; /* working precision */ Int residue; /* rounding residue */ uInt needbytes; /* for space calculations */ const decNumber *x=rhs; /* (may point to safe copy later) */ decContext aset, tset, dset; /* working contexts */ Int comp; /* work */ /* the argument is often copied to normalize it, so (unusually) it */ /* is treated like other buffers, using DECBUFFER, +1 in case */ /* DECBUFFER is 0 */ decNumber bufr[D2N(DECBUFFER*2+1)]; decNumber *allocrhs=NULL; /* non-NULL if rhs buffer allocated */ /* the working precision will be no more than set->digits+8+1 */ /* so for on-stack buffers DECBUFFER+9 is used, +1 in case DECBUFFER */ /* is 0 (and twice that for the accumulator) */ /* buffer for t, term (working precision plus) */ decNumber buft[D2N(DECBUFFER*2+9+1)]; decNumber *allocbuft=NULL; /* -> allocated buft, iff allocated */ decNumber *t=buft; /* term */ /* buffer for a, accumulator (working precision * 2), at least 9 */ decNumber bufa[D2N(DECBUFFER*4+18+1)]; decNumber *allocbufa=NULL; /* -> allocated bufa, iff allocated */ decNumber *a=bufa; /* accumulator */ /* decNumber for the divisor term; this needs at most 9 digits */ /* and so can be fixed size [16 so can use standard context] */ decNumber bufd[D2N(16)]; decNumber *d=bufd; /* divisor */ decNumber numone; /* constant 1 */ #if DECCHECK Int iterations=0; /* for later sanity check */ if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif do { /* protect allocated storage */ if (SPECIALARG) { /* handle infinities and NaNs */ if (decNumberIsInfinite(rhs)) { /* an infinity */ if (decNumberIsNegative(rhs)) /* -Infinity -> +0 */ decNumberZero(res); else decNumberCopy(res, rhs); /* +Infinity -> self */ } else decNaNs(res, rhs, NULL, set, status); /* a NaN */ break;} if (ISZERO(rhs)) { /* zeros -> exact 1 */ decNumberZero(res); /* make clean 1 */ *res->lsu=1; /* .. */ break;} /* [no status to set] */ /* e**x when 0 < x < 0.66 is < 1+3x/2, hence can fast-path */ /* positive and negative tiny cases which will result in inexact */ /* 1. This also allows the later add-accumulate to always be */ /* exact (because its length will never be more than twice the */ /* working precision). */ /* The comparator (tiny) needs just one digit, so use the */ /* decNumber d for it (reused as the divisor, etc., below); its */ /* exponent is such that if x is positive it will have */ /* set->digits-1 zeros between the decimal point and the digit, */ /* which is 4, and if x is negative one more zero there as the */ /* more precise result will be of the form 0.9999999 rather than */ /* 1.0000001. Hence, tiny will be 0.0000004 if digits=7 and x>0 */ /* or 0.00000004 if digits=7 and x<0. If RHS not larger than */ /* this then the result will be 1.000000 */ decNumberZero(d); /* clean */ *d->lsu=4; /* set 4 .. */ d->exponent=-set->digits; /* * 10**(-d) */ if (decNumberIsNegative(rhs)) d->exponent--; /* negative case */ comp=decCompare(d, rhs, 1); /* signless compare */ if (comp==BADINT) { *status|=DEC_Insufficient_storage; break;} if (comp>=0) { /* rhs < d */ Int shift=set->digits-1; decNumberZero(res); /* set 1 */ *res->lsu=1; /* .. */ res->digits=decShiftToMost(res->lsu, 1, shift); res->exponent=-shift; /* make 1.0000... */ *status|=DEC_Inexact | DEC_Rounded; /* .. inexactly */ break;} /* tiny */ /* set up the context to be used for calculating a, as this is */ /* used on both paths below */ decContextDefault(&aset, DEC_INIT_DECIMAL64); /* accumulator bounds are as requested (could underflow) */ aset.emax=set->emax; /* usual bounds */ aset.emin=set->emin; /* .. */ aset.clamp=0; /* and no concrete format */ /* calculate the adjusted (Hull & Abrham) exponent (where the */ /* decimal point is just to the left of the coefficient msd) */ h=rhs->exponent+rhs->digits; /* if h>8 then 10**h cannot be calculated safely; however, when */ /* h=8 then exp(|rhs|) will be at least exp(1E+7) which is at */ /* least 6.59E+4342944, so (due to the restriction on Emax/Emin) */ /* overflow (or underflow to 0) is guaranteed -- so this case can */ /* be handled by simply forcing the appropriate excess */ if (h>8) { /* overflow/underflow */ /* set up here so Power call below will over or underflow to */ /* zero; set accumulator to either 2 or 0.02 */ /* [stack buffer for a is always big enough for this] */ decNumberZero(a); *a->lsu=2; /* not 1 but < exp(1) */ if (decNumberIsNegative(rhs)) a->exponent=-2; /* make 0.02 */ h=8; /* clamp so 10**h computable */ p=9; /* set a working precision */ } else { /* h<=8 */ Int maxlever=(rhs->digits>8?1:0); /* [could/should increase this for precisions >40 or so, too] */ /* if h is 8, cannot normalize to a lower upper limit because */ /* the final result will not be computable (see notes above), */ /* but leverage can be applied whenever h is less than 8. */ /* Apply as much as possible, up to a MAXLEVER digits, which */ /* sets the tradeoff against the cost of the later a**(10**h). */ /* As h is increased, the working precision below also */ /* increases to compensate for the "constant digits at the */ /* front" effect. */ Int lever=MINI(8-h, maxlever); /* leverage attainable */ Int use=-rhs->digits-lever; /* exponent to use for RHS */ h+=lever; /* apply leverage selected */ if (h<0) { /* clamp */ use+=h; /* [may end up subnormal] */ h=0; } /* Take a copy of RHS if it needs normalization (true whenever x>=1) */ if (rhs->exponent!=use) { decNumber *newrhs=bufr; /* assume will fit on stack */ needbytes=sizeof(decNumber)+(D2U(rhs->digits)-1)*sizeof(Unit); if (needbytes>sizeof(bufr)) { /* need malloc space */ allocrhs=(decNumber *)malloc(needbytes); if (allocrhs==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} newrhs=allocrhs; /* use the allocated space */ } decNumberCopy(newrhs, rhs); /* copy to safe space */ newrhs->exponent=use; /* normalize; now <1 */ x=newrhs; /* ready for use */ /* decNumberShow(x); */ } /* Now use the usual power series to evaluate exp(x). The */ /* series starts as 1 + x + x^2/2 ... so prime ready for the */ /* third term by setting the term variable t=x, the accumulator */ /* a=1, and the divisor d=2. */ /* First determine the working precision. From Hull & Abrham */ /* this is set->digits+h+2. However, if x is 'over-precise' we */ /* need to allow for all its digits to potentially participate */ /* (consider an x where all the excess digits are 9s) so in */ /* this case use x->digits+h+2 */ p=MAXI(x->digits, set->digits)+h+2; /* [h<=8] */ /* a and t are variable precision, and depend on p, so space */ /* must be allocated for them if necessary */ /* the accumulator needs to be able to hold 2p digits so that */ /* the additions on the second and subsequent iterations are */ /* sufficiently exact. */ needbytes=sizeof(decNumber)+(D2U(p*2)-1)*sizeof(Unit); if (needbytes>sizeof(bufa)) { /* need malloc space */ allocbufa=(decNumber *)malloc(needbytes); if (allocbufa==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} a=allocbufa; /* use the allocated space */ } /* the term needs to be able to hold p digits (which is */ /* guaranteed to be larger than x->digits, so the initial copy */ /* is safe); it may also be used for the raise-to-power */ /* calculation below, which needs an extra two digits */ needbytes=sizeof(decNumber)+(D2U(p+2)-1)*sizeof(Unit); if (needbytes>sizeof(buft)) { /* need malloc space */ allocbuft=(decNumber *)malloc(needbytes); if (allocbuft==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} t=allocbuft; /* use the allocated space */ } decNumberCopy(t, x); /* term=x */ decNumberZero(a); *a->lsu=1; /* accumulator=1 */ decNumberZero(d); *d->lsu=2; /* divisor=2 */ decNumberZero(&numone); *numone.lsu=1; /* constant 1 for increment */ /* set up the contexts for calculating a, t, and d */ decContextDefault(&tset, DEC_INIT_DECIMAL64); dset=tset; /* accumulator bounds are set above, set precision now */ aset.digits=p*2; /* double */ /* term bounds avoid any underflow or overflow */ tset.digits=p; tset.emin=DEC_MIN_EMIN; /* [emax is plenty] */ /* [dset.digits=16, etc., are sufficient] */ /* finally ready to roll */ for (;;) { #if DECCHECK iterations++; #endif /* only the status from the accumulation is interesting */ /* [but it should remain unchanged after first add] */ decAddOp(a, a, t, &aset, 0, status); /* a=a+t */ decMultiplyOp(t, t, x, &tset, &ignore); /* t=t*x */ decDivideOp(t, t, d, &tset, DIVIDE, &ignore); /* t=t/d */ /* the iteration ends when the term cannot affect the result, */ /* if rounded to p digits, which is when its value is smaller */ /* than the accumulator by p+1 digits. There must also be */ /* full precision in a. */ if (((a->digits+a->exponent)>=(t->digits+t->exponent+p+1)) && (a->digits>=p)) break; decAddOp(d, d, &numone, &dset, 0, &ignore); /* d=d+1 */ } /* iterate */ #if DECCHECK /* just a sanity check; comment out test to show always */ if (iterations>p+3) printf("Exp iterations=%ld, status=%08lx, p=%ld, d=%ld\n", (LI)iterations, (LI)*status, (LI)p, (LI)x->digits); #endif } /* h<=8 */ /* apply postconditioning: a=a**(10**h) -- this is calculated */ /* at a slightly higher precision than Hull & Abrham suggest */ if (h>0) { Int seenbit=0; /* set once a 1-bit is seen */ Int i; /* counter */ Int n=powers[h]; /* always positive */ aset.digits=p+2; /* sufficient precision */ /* avoid the overhead and many extra digits of decNumberPower */ /* as all that is needed is the short 'multipliers' loop; here */ /* accumulate the answer into t */ decNumberZero(t); *t->lsu=1; /* acc=1 */ for (i=1;;i++){ /* for each bit [top bit ignored] */ /* abandon if have had overflow or terminal underflow */ if (*status & (DEC_Overflow|DEC_Underflow)) { /* interesting? */ if (*status&DEC_Overflow || ISZERO(t)) break;} n=n<<1; /* move next bit to testable position */ if (n<0) { /* top bit is set */ seenbit=1; /* OK, have a significant bit */ decMultiplyOp(t, t, a, &aset, status); /* acc=acc*x */ } if (i==31) break; /* that was the last bit */ if (!seenbit) continue; /* no need to square 1 */ decMultiplyOp(t, t, t, &aset, status); /* acc=acc*acc [square] */ } /*i*/ /* 32 bits */ /* decNumberShow(t); */ a=t; /* and carry on using t instead of a */ } /* Copy and round the result to res */ residue=1; /* indicate dirt to right .. */ if (ISZERO(a)) residue=0; /* .. unless underflowed to 0 */ aset.digits=set->digits; /* [use default rounding] */ decCopyFit(res, a, &aset, &residue, status); /* copy & shorten */ decFinish(res, set, &residue, status); /* cleanup/set flags */ } while(0); /* end protected */ free(allocrhs); /* drop any storage used */ free(allocbufa); /* .. */ free(allocbuft); /* .. */ /* [status is handled by caller] */ return res; } /* decExpOp */ /* ------------------------------------------------------------------ */ /* Initial-estimate natural logarithm table */ /* */ /* LNnn -- 90-entry 16-bit table for values from .10 through .99. */ /* The result is a 4-digit encode of the coefficient (c=the */ /* top 14 bits encoding 0-9999) and a 2-digit encode of the */ /* exponent (e=the bottom 2 bits encoding 0-3) */ /* */ /* The resulting value is given by: */ /* */ /* v = -c * 10**(-e-3) */ /* */ /* where e and c are extracted from entry k = LNnn[x-10] */ /* where x is truncated (NB) into the range 10 through 99, */ /* and then c = k>>2 and e = k&3. */ /* ------------------------------------------------------------------ */ const uShort LNnn[90]={9016, 8652, 8316, 8008, 7724, 7456, 7208, 6972, 6748, 6540, 6340, 6148, 5968, 5792, 5628, 5464, 5312, 5164, 5020, 4884, 4748, 4620, 4496, 4376, 4256, 4144, 4032, 39233, 38181, 37157, 36157, 35181, 34229, 33297, 32389, 31501, 30629, 29777, 28945, 28129, 27329, 26545, 25777, 25021, 24281, 23553, 22837, 22137, 21445, 20769, 20101, 19445, 18801, 18165, 17541, 16925, 16321, 15721, 15133, 14553, 13985, 13421, 12865, 12317, 11777, 11241, 10717, 10197, 9685, 9177, 8677, 8185, 7697, 7213, 6737, 6269, 5801, 5341, 4889, 4437, 39930, 35534, 31186, 26886, 22630, 18418, 14254, 10130, 6046, 20055}; /* ------------------------------------------------------------------ */ /* decLnOp -- effect natural logarithm */ /* */ /* This computes C = ln(A) */ /* */ /* res is C, the result. C may be A */ /* rhs is A */ /* set is the context; note that rounding mode has no effect */ /* */ /* C must have space for set->digits digits. */ /* */ /* Notable cases: */ /* A<0 -> Invalid */ /* A=0 -> -Infinity (Exact) */ /* A=+Infinity -> +Infinity (Exact) */ /* A=1 exactly -> 0 (Exact) */ /* */ /* Restrictions (as for Exp): */ /* */ /* digits, emax, and -emin in the context must be less than */ /* DEC_MAX_MATH+11 (1000010), and the rhs must be within these */ /* bounds or a zero. This is an internal routine, so these */ /* restrictions are contractual and not enforced. */ /* */ /* A finite result is rounded using DEC_ROUND_HALF_EVEN; it will */ /* almost always be correctly rounded, but may be up to 1 ulp in */ /* error in rare cases. */ /* ------------------------------------------------------------------ */ /* The result is calculated using Newton's method, with each */ /* iteration calculating a' = a + x * exp(-a) - 1. See, for example, */ /* Epperson 1989. */ /* */ /* The iteration ends when the adjustment x*exp(-a)-1 is tiny enough. */ /* This has to be calculated at the sum of the precision of x and the */ /* working precision. */ /* */ /* Implementation notes: */ /* */ /* 1. This is separated out as decLnOp so it can be called from */ /* other Mathematical functions (e.g., Log 10) with a wider range */ /* than normal. In particular, it can handle the slightly wider */ /* (+9+2) range needed by a power function. */ /* */ /* 2. The speed of this function is about 10x slower than exp, as */ /* it typically needs 4-6 iterations for short numbers, and the */ /* extra precision needed adds a squaring effect, twice. */ /* */ /* 3. Fastpaths are included for ln(10) and ln(2), up to length 40, */ /* as these are common requests. ln(10) is used by log10(x). */ /* */ /* 4. An iteration might be saved by widening the LNnn table, and */ /* would certainly save at least one if it were made ten times */ /* bigger, too (for truncated fractions 0.100 through 0.999). */ /* However, for most practical evaluations, at least four or five */ /* iterations will be neede -- so this would only speed up by */ /* 20-25% and that probably does not justify increasing the table */ /* size. */ /* */ /* 5. The static buffers are larger than might be expected to allow */ /* for calls from decNumberPower. */ /* ------------------------------------------------------------------ */ decNumber * decLnOp(decNumber *res, const decNumber *rhs, decContext *set, uInt *status) { uInt ignore=0; /* working status accumulator */ uInt needbytes; /* for space calculations */ Int residue; /* rounding residue */ Int r; /* rhs=f*10**r [see below] */ Int p; /* working precision */ Int pp; /* precision for iteration */ Int t; /* work */ /* buffers for a (accumulator, typically precision+2) and b */ /* (adjustment calculator, same size) */ decNumber bufa[D2N(DECBUFFER+12)]; decNumber *allocbufa=NULL; /* -> allocated bufa, iff allocated */ decNumber *a=bufa; /* accumulator/work */ decNumber bufb[D2N(DECBUFFER*2+2)]; decNumber *allocbufb=NULL; /* -> allocated bufa, iff allocated */ decNumber *b=bufb; /* adjustment/work */ decNumber numone; /* constant 1 */ decNumber cmp; /* work */ decContext aset, bset; /* working contexts */ #if DECCHECK Int iterations=0; /* for later sanity check */ if (decCheckOperands(res, DECUNUSED, rhs, set)) return res; #endif do { /* protect allocated storage */ if (SPECIALARG) { /* handle infinities and NaNs */ if (decNumberIsInfinite(rhs)) { /* an infinity */ if (decNumberIsNegative(rhs)) /* -Infinity -> error */ *status|=DEC_Invalid_operation; else decNumberCopy(res, rhs); /* +Infinity -> self */ } else decNaNs(res, rhs, NULL, set, status); /* a NaN */ break;} if (ISZERO(rhs)) { /* +/- zeros -> -Infinity */ decNumberZero(res); /* make clean */ res->bits=DECINF|DECNEG; /* set - infinity */ break;} /* [no status to set] */ /* Non-zero negatives are bad... */ if (decNumberIsNegative(rhs)) { /* -x -> error */ *status|=DEC_Invalid_operation; break;} /* Here, rhs is positive, finite, and in range */ /* lookaside fastpath code for ln(2) and ln(10) at common lengths */ if (rhs->exponent==0 && set->digits<=40) { #if DECDPUN==1 if (rhs->lsu[0]==0 && rhs->lsu[1]==1 && rhs->digits==2) { /* ln(10) */ #else if (rhs->lsu[0]==10 && rhs->digits==2) { /* ln(10) */ #endif aset=*set; aset.round=DEC_ROUND_HALF_EVEN; #define LN10 "2.302585092994045684017991454684364207601" decNumberFromString(res, LN10, &aset); *status|=(DEC_Inexact | DEC_Rounded); /* is inexact */ break;} if (rhs->lsu[0]==2 && rhs->digits==1) { /* ln(2) */ aset=*set; aset.round=DEC_ROUND_HALF_EVEN; #define LN2 "0.6931471805599453094172321214581765680755" decNumberFromString(res, LN2, &aset); *status|=(DEC_Inexact | DEC_Rounded); break;} } /* integer and short */ /* Determine the working precision. This is normally the */ /* requested precision + 2, with a minimum of 9. However, if */ /* the rhs is 'over-precise' then allow for all its digits to */ /* potentially participate (consider an rhs where all the excess */ /* digits are 9s) so in this case use rhs->digits+2. */ p=MAXI(rhs->digits, MAXI(set->digits, 7))+2; /* Allocate space for the accumulator and the high-precision */ /* adjustment calculator, if necessary. The accumulator must */ /* be able to hold p digits, and the adjustment up to */ /* rhs->digits+p digits. They are also made big enough for 16 */ /* digits so that they can be used for calculating the initial */ /* estimate. */ needbytes=sizeof(decNumber)+(D2U(MAXI(p,16))-1)*sizeof(Unit); if (needbytes>sizeof(bufa)) { /* need malloc space */ allocbufa=(decNumber *)malloc(needbytes); if (allocbufa==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} a=allocbufa; /* use the allocated space */ } pp=p+rhs->digits; needbytes=sizeof(decNumber)+(D2U(MAXI(pp,16))-1)*sizeof(Unit); if (needbytes>sizeof(bufb)) { /* need malloc space */ allocbufb=(decNumber *)malloc(needbytes); if (allocbufb==NULL) { /* hopeless -- abandon */ *status|=DEC_Insufficient_storage; break;} b=allocbufb; /* use the allocated space */ } /* Prepare an initial estimate in acc. Calculate this by */ /* considering the coefficient of x to be a normalized fraction, */ /* f, with the decimal point at far left and multiplied by */ /* 10**r. Then, rhs=f*10**r and 0.1<=f<1, and */ /* ln(x) = ln(f) + ln(10)*r */ /* Get the initial estimate for ln(f) from a small lookup */ /* table (see above) indexed by the first two digits of f, */ /* truncated. */ decContextDefault(&aset, DEC_INIT_DECIMAL64); /* 16-digit extended */ r=rhs->exponent+rhs->digits; /* 'normalised' exponent */ decNumberFromInt32(a, r); /* a=r */ decNumberFromInt32(b, 2302585); /* b=ln(10) (2.302585) */ b->exponent=-6; /* .. */ decMultiplyOp(a, a, b, &aset, &ignore); /* a=a*b */ /* now get top two digits of rhs into b by simple truncate and */ /* force to integer */ residue=0; /* (no residue) */ aset.digits=2; aset.round=DEC_ROUND_DOWN; decCopyFit(b, rhs, &aset, &residue, &ignore); /* copy & shorten */ b->exponent=0; /* make integer */ t=decGetInt(b); /* [cannot fail] */ if (t<10) t=X10(t); /* adjust single-digit b */ t=LNnn[t-10]; /* look up ln(b) */ decNumberFromInt32(b, t>>2); /* b=ln(b) coefficient */ b->exponent=-(t&3)-3; /* set exponent */ b->bits=DECNEG; /* ln(0.10)->ln(0.99) always -ve */ aset.digits=16; aset.round=DEC_ROUND_HALF_EVEN; /* restore */ decAddOp(a, a, b, &aset, 0, &ignore); /* acc=a+b */ /* the initial estimate is now in a, with up to 4 digits correct. */ /* When rhs is at or near Nmax the estimate will be low, so we */ /* will approach it from below, avoiding overflow when calling exp. */ decNumberZero(&numone); *numone.lsu=1; /* constant 1 for adjustment */ /* accumulator bounds are as requested (could underflow, but */ /* cannot overflow) */ aset.emax=set->emax; aset.emin=set->emin; aset.clamp=0; /* no concrete format */ /* set up a context to be used for the multiply and subtract */ bset=aset; bset.emax=DEC_MAX_MATH*2; /* use double bounds for the */ bset.emin=-DEC_MAX_MATH*2; /* adjustment calculation */ /* [see decExpOp call below] */ /* for each iteration double the number of digits to calculate, */ /* up to a maximum of p */ pp=9; /* initial precision */ /* [initially 9 as then the sequence starts 7+2, 16+2, and */ /* 34+2, which is ideal for standard-sized numbers] */ aset.digits=pp; /* working context */ bset.digits=pp+rhs->digits; /* wider context */ for (;;) { /* iterate */ #if DECCHECK iterations++; if (iterations>24) break; /* consider 9 * 2**24 */ #endif /* calculate the adjustment (exp(-a)*x-1) into b. This is a */ /* catastrophic subtraction but it really is the difference */ /* from 1 that is of interest. */ /* Use the internal entry point to Exp as it allows the double */ /* range for calculating exp(-a) when a is the tiniest subnormal. */ a->bits^=DECNEG; /* make -a */ decExpOp(b, a, &bset, &ignore); /* b=exp(-a) */ a->bits^=DECNEG; /* restore sign of a */ /* now multiply by rhs and subtract 1, at the wider precision */ decMultiplyOp(b, b, rhs, &bset, &ignore); /* b=b*rhs */ decAddOp(b, b, &numone, &bset, DECNEG, &ignore); /* b=b-1 */ /* the iteration ends when the adjustment cannot affect the */ /* result by >=0.5 ulp (at the requested digits), which */ /* is when its value is smaller than the accumulator by */ /* set->digits+1 digits (or it is zero) -- this is a looser */ /* requirement than for Exp because all that happens to the */ /* accumulator after this is the final rounding (but note that */ /* there must also be full precision in a, or a=0). */ if (decNumberIsZero(b) || (a->digits+a->exponent)>=(b->digits+b->exponent+set->digits+1)) { if (a->digits==p) break; if (decNumberIsZero(a)) { decCompareOp(&cmp, rhs, &numone, &aset, COMPARE, &ignore); /* rhs=1 ? */ if (cmp.lsu[0]==0) a->exponent=0; /* yes, exact 0 */ else *status|=(DEC_Inexact | DEC_Rounded); /* no, inexact */ break; } /* force padding if adjustment has gone to 0 before full length */ if (decNumberIsZero(b)) b->exponent=a->exponent-p; } /* not done yet ... */ decAddOp(a, a, b, &aset, 0, &ignore); /* a=a+b for next estimate */ if (pp==p) continue; /* precision is at maximum */ /* lengthen the next calculation */ pp=pp*2; /* double precision */ if (pp>p) pp=p; /* clamp to maximum */ aset.digits=pp; /* working context */ bset.digits=pp+rhs->digits; /* wider context */ } /* Newton's iteration */ #if DECCHECK /* just a sanity check; remove the test to show always */ if (iterations>24) printf("Ln iterations=%ld, status=%08lx, p=%ld, d=%ld\n", (LI)iterations, (LI)*status, (LI)p, (LI)rhs->digits); #endif /* Copy and round the result to res */ residue=1; /* indicate dirt to right */ if (ISZERO(a)) residue=0; /* .. unless underflowed to 0 */ aset.digits=set->digits; /* [use default rounding] */ decCopyFit(res, a, &aset, &residue, status); /* copy & shorten */ decFinish(res, set, &residue, status); /* cleanup/set flags */ } while(0); /* end protected */ free(allocbufa); /* drop any storage used */ free(allocbufb); /* .. */ /* [status is handled by caller] */ return res; } /* decLnOp */ /* ------------------------------------------------------------------ */ /* decQuantizeOp -- force exponent to requested value */ /* */ /* This computes C = op(A, B), where op adjusts the coefficient */ /* of C (by rounding or shifting) such that the exponent (-scale) */ /* of C has the value B or matches the exponent of B. */ /* The numerical value of C will equal A, except for the effects of */ /* any rounding that occurred. */ /* */ /* res is C, the result. C may be A or B */ /* lhs is A, the number to adjust */ /* rhs is B, the requested exponent */ /* set is the context */ /* quant is 1 for quantize or 0 for rescale */ /* status is the status accumulator (this can be called without */ /* risk of control loss) */ /* */ /* C must have space for set->digits digits. */ /* */ /* Unless there is an error or the result is infinite, the exponent */ /* after the operation is guaranteed to be that requested. */ /* ------------------------------------------------------------------ */ static decNumber * decQuantizeOp(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set, Flag quant, uInt *status) { #if DECSUBSET decNumber *alloclhs=NULL; /* non-NULL if rounded lhs allocated */ decNumber *allocrhs=NULL; /* .., rhs */ #endif const decNumber *inrhs=rhs; /* save original rhs */ Int reqdigits=set->digits; /* requested DIGITS */ Int reqexp; /* requested exponent [-scale] */ Int residue=0; /* rounding residue */ Int etiny=set->emin-(reqdigits-1); #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operands and set lostDigits status, as needed */ if (lhs->digits>reqdigits) { alloclhs=decRoundOperand(lhs, set, status); if (alloclhs==NULL) break; lhs=alloclhs; } if (rhs->digits>reqdigits) { /* [this only checks lostDigits] */ allocrhs=decRoundOperand(rhs, set, status); if (allocrhs==NULL) break; rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ /* Handle special values */ if (SPECIALARGS) { /* NaNs get usual processing */ if (SPECIALARGS & (DECSNAN | DECNAN)) decNaNs(res, lhs, rhs, set, status); /* one infinity but not both is bad */ else if ((lhs->bits ^ rhs->bits) & DECINF) *status|=DEC_Invalid_operation; /* both infinity: return lhs */ else decNumberCopy(res, lhs); /* [nop if in place] */ break; } /* set requested exponent */ if (quant) reqexp=inrhs->exponent; /* quantize -- match exponents */ else { /* rescale -- use value of rhs */ /* Original rhs must be an integer that fits and is in range, */ /* which could be from -1999999997 to +999999999, thanks to */ /* subnormals */ reqexp=decGetInt(inrhs); /* [cannot fail] */ } #if DECSUBSET if (!set->extended) etiny=set->emin; /* no subnormals */ #endif if (reqexp==BADINT /* bad (rescale only) or .. */ || reqexp==BIGODD || reqexp==BIGEVEN /* very big (ditto) or .. */ || (reqexpset->emax)) { /* > emax */ *status|=DEC_Invalid_operation; break;} /* the RHS has been processed, so it can be overwritten now if necessary */ if (ISZERO(lhs)) { /* zero coefficient unchanged */ decNumberCopy(res, lhs); /* [nop if in place] */ res->exponent=reqexp; /* .. just set exponent */ #if DECSUBSET if (!set->extended) res->bits=0; /* subset specification; no -0 */ #endif } else { /* non-zero lhs */ Int adjust=reqexp-lhs->exponent; /* digit adjustment needed */ /* if adjusted coefficient will definitely not fit, give up now */ if ((lhs->digits-adjust)>reqdigits) { *status|=DEC_Invalid_operation; break; } if (adjust>0) { /* increasing exponent */ /* this will decrease the length of the coefficient by adjust */ /* digits, and must round as it does so */ decContext workset; /* work */ workset=*set; /* clone rounding, etc. */ workset.digits=lhs->digits-adjust; /* set requested length */ /* [note that the latter can be <1, here] */ decCopyFit(res, lhs, &workset, &residue, status); /* fit to result */ decApplyRound(res, &workset, residue, status); /* .. and round */ residue=0; /* [used] */ /* If just rounded a 999s case, exponent will be off by one; */ /* adjust back (after checking space), if so. */ if (res->exponent>reqexp) { /* re-check needed, e.g., for quantize(0.9999, 0.001) under */ /* set->digits==3 */ if (res->digits==reqdigits) { /* cannot shift by 1 */ *status&=~(DEC_Inexact | DEC_Rounded); /* [clean these] */ *status|=DEC_Invalid_operation; break; } res->digits=decShiftToMost(res->lsu, res->digits, 1); /* shift */ res->exponent--; /* (re)adjust the exponent. */ } #if DECSUBSET if (ISZERO(res) && !set->extended) res->bits=0; /* subset; no -0 */ #endif } /* increase */ else /* adjust<=0 */ { /* decreasing or = exponent */ /* this will increase the length of the coefficient by -adjust */ /* digits, by adding zero or more trailing zeros; this is */ /* already checked for fit, above */ decNumberCopy(res, lhs); /* [it will fit] */ /* if padding needed (adjust<0), add it now... */ if (adjust<0) { res->digits=decShiftToMost(res->lsu, res->digits, -adjust); res->exponent+=adjust; /* adjust the exponent */ } } /* decrease */ } /* non-zero */ /* Check for overflow [do not use Finalize in this case, as an */ /* overflow here is a "don't fit" situation] */ if (res->exponent>set->emax-res->digits+1) { /* too big */ *status|=DEC_Invalid_operation; break; } else { decFinalize(res, set, &residue, status); /* set subnormal flags */ *status&=~DEC_Underflow; /* suppress Underflow [as per 754] */ } } while(0); /* end protected */ #if DECSUBSET free(allocrhs); /* drop any storage used */ free(alloclhs); /* .. */ #endif return res; } /* decQuantizeOp */ /* ------------------------------------------------------------------ */ /* decCompareOp -- compare, min, or max two Numbers */ /* */ /* This computes C = A ? B and carries out one of four operations: */ /* COMPARE -- returns the signum (as a number) giving the */ /* result of a comparison unless one or both */ /* operands is a NaN (in which case a NaN results) */ /* COMPSIG -- as COMPARE except that a quiet NaN raises */ /* Invalid operation. */ /* COMPMAX -- returns the larger of the operands, using the */ /* 754 maxnum operation */ /* COMPMAXMAG -- ditto, comparing absolute values */ /* COMPMIN -- the 754 minnum operation */ /* COMPMINMAG -- ditto, comparing absolute values */ /* COMTOTAL -- returns the signum (as a number) giving the */ /* result of a comparison using 754 total ordering */ /* */ /* res is C, the result. C may be A and/or B (e.g., X=X?X) */ /* lhs is A */ /* rhs is B */ /* set is the context */ /* op is the operation flag */ /* status is the usual accumulator */ /* */ /* C must have space for one digit for COMPARE or set->digits for */ /* COMPMAX, COMPMIN, COMPMAXMAG, or COMPMINMAG. */ /* ------------------------------------------------------------------ */ /* The emphasis here is on speed for common cases, and avoiding */ /* coefficient comparison if possible. */ /* ------------------------------------------------------------------ */ decNumber * decCompareOp(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set, Flag op, uInt *status) { #if DECSUBSET decNumber *alloclhs=NULL; /* non-NULL if rounded lhs allocated */ decNumber *allocrhs=NULL; /* .., rhs */ #endif Int result=0; /* default result value */ uByte merged; /* work */ #if DECCHECK if (decCheckOperands(res, lhs, rhs, set)) return res; #endif do { /* protect allocated storage */ #if DECSUBSET if (!set->extended) { /* reduce operands and set lostDigits status, as needed */ if (lhs->digits>set->digits) { alloclhs=decRoundOperand(lhs, set, status); if (alloclhs==NULL) {result=BADINT; break;} lhs=alloclhs; } if (rhs->digits>set->digits) { allocrhs=decRoundOperand(rhs, set, status); if (allocrhs==NULL) {result=BADINT; break;} rhs=allocrhs; } } #endif /* [following code does not require input rounding] */ /* If total ordering then handle differing signs 'up front' */ if (op==COMPTOTAL) { /* total ordering */ if (decNumberIsNegative(lhs) && !decNumberIsNegative(rhs)) { result=-1; break; } if (!decNumberIsNegative(lhs) && decNumberIsNegative(rhs)) { result=+1; break; } } /* handle NaNs specially; let infinities drop through */ /* This assumes sNaN (even just one) leads to NaN. */ merged=(lhs->bits | rhs->bits) & (DECSNAN | DECNAN); if (merged) { /* a NaN bit set */ if (op==COMPARE); /* result will be NaN */ else if (op==COMPSIG) /* treat qNaN as sNaN */ *status|=DEC_Invalid_operation | DEC_sNaN; else if (op==COMPTOTAL) { /* total ordering, always finite */ /* signs are known to be the same; compute the ordering here */ /* as if the signs are both positive, then invert for negatives */ if (!decNumberIsNaN(lhs)) result=-1; else if (!decNumberIsNaN(rhs)) result=+1; /* here if both NaNs */ else if (decNumberIsSNaN(lhs) && decNumberIsQNaN(rhs)) result=-1; else if (decNumberIsQNaN(lhs) && decNumberIsSNaN(rhs)) result=+1; else { /* both NaN or both sNaN */ /* now it just depends on the payload */ result=decUnitCompare(lhs->lsu, D2U(lhs->digits), rhs->lsu, D2U(rhs->digits), 0); /* [Error not possible, as these are 'aligned'] */ } /* both same NaNs */ if (decNumberIsNegative(lhs)) result=-result; break; } /* total order */ else if (merged & DECSNAN); /* sNaN -> qNaN */ else { /* here if MIN or MAX and one or two quiet NaNs */ /* min or max -- 754 rules ignore single NaN */ if (!decNumberIsNaN(lhs) || !decNumberIsNaN(rhs)) { /* just one NaN; force choice to be the non-NaN operand */ op=COMPMAX; if (lhs->bits & DECNAN) result=-1; /* pick rhs */ else result=+1; /* pick lhs */ break; } } /* max or min */ op=COMPNAN; /* use special path */ decNaNs(res, lhs, rhs, set, status); /* propagate NaN */ break; } /* have numbers */ if (op==COMPMAXMAG || op==COMPMINMAG) result=decCompare(lhs, rhs, 1); else result=decCompare(lhs, rhs, 0); /* sign matters */ } while(0); /* end protected */ if (result==BADINT) *status|=DEC_Insufficient_storage; /* rare */ else { if (op==COMPARE || op==COMPSIG ||op==COMPTOTAL) { /* returning signum */ if (op==COMPTOTAL && result==0) { /* operands are numerically equal or same NaN (and same sign, */ /* tested first); if identical, leave result 0 */ if (lhs->exponent!=rhs->exponent) { if (lhs->exponentexponent) result=-1; else result=+1; if (decNumberIsNegative(lhs)) result=-result; } /* lexp!=rexp */ } /* total-order by exponent */ decNumberZero(res); /* [always a valid result] */ if (result!=0) { /* must be -1 or +1 */ *res->lsu=1; if (result<0) res->bits=DECNEG; } } else if (op==COMPNAN); /* special, drop through */ else { /* MAX or MIN, non-NaN result */ Int residue=0; /* rounding accumulator */ /* choose the operand for the result */ const decNumber *choice; if (result==0) { /* operands are numerically equal */ /* choose according to sign then exponent (see 754) */ uByte slhs=(lhs->bits & DECNEG); uByte srhs=(rhs->bits & DECNEG); #if DECSUBSET if (!set->extended) { /* subset: force left-hand */ op=COMPMAX; result=+1; } else #endif if (slhs!=srhs) { /* signs differ */ if (slhs) result=-1; /* rhs is max */ else result=+1; /* lhs is max */ } else if (slhs && srhs) { /* both negative */ if (lhs->exponentexponent) result=+1; else result=-1; /* [if equal, use lhs, technically identical] */ } else { /* both positive */ if (lhs->exponent>rhs->exponent) result=+1; else result=-1; /* [ditto] */ } } /* numerically equal */ /* here result will be non-0; reverse if looking for MIN */ if (op==COMPMIN || op==COMPMINMAG) result=-result; choice=(result>0 ? lhs : rhs); /* choose */ /* copy chosen to result, rounding if need be */ decCopyFit(res, choice, set, &residue, status); decFinish(res, set, &residue, status); } } #if DECSUBSET free(allocrhs); /* free any storage used */ free(alloclhs); /* .. */ #endif return res; } /* decCompareOp */ /* ------------------------------------------------------------------ */ /* decCompare -- compare two decNumbers by numerical value */ /* */ /* This routine compares A ? B without altering them. */ /* */ /* Arg1 is A, a decNumber which is not a NaN */ /* Arg2 is B, a decNumber which is not a NaN */ /* Arg3 is 1 for a sign-independent compare, 0 otherwise */ /* */ /* returns -1, 0, or 1 for AB, or BADINT if failure */ /* (the only possible failure is an allocation error) */ /* ------------------------------------------------------------------ */ static Int decCompare(const decNumber *lhs, const decNumber *rhs, Flag abs) { Int result; /* result value */ Int sigr; /* rhs signum */ Int compare; /* work */ result=1; /* assume signum(lhs) */ if (ISZERO(lhs)) result=0; if (abs) { if (ISZERO(rhs)) return result; /* LHS wins or both 0 */ /* RHS is non-zero */ if (result==0) return -1; /* LHS is 0; RHS wins */ /* [here, both non-zero, result=1] */ } else { /* signs matter */ if (result && decNumberIsNegative(lhs)) result=-1; sigr=1; /* compute signum(rhs) */ if (ISZERO(rhs)) sigr=0; else if (decNumberIsNegative(rhs)) sigr=-1; if (result > sigr) return +1; /* L > R, return 1 */ if (result < sigr) return -1; /* L < R, return -1 */ if (result==0) return 0; /* both 0 */ } /* signums are the same; both are non-zero */ if ((lhs->bits | rhs->bits) & DECINF) { /* one or more infinities */ if (decNumberIsInfinite(rhs)) { if (decNumberIsInfinite(lhs)) result=0;/* both infinite */ else result=-result; /* only rhs infinite */ } return result; } /* must compare the coefficients, allowing for exponents */ if (lhs->exponent>rhs->exponent) { /* LHS exponent larger */ /* swap sides, and sign */ const decNumber *temp=lhs; lhs=rhs; rhs=temp; result=-result; } compare=decUnitCompare(lhs->lsu, D2U(lhs->digits), rhs->lsu, D2U(rhs->digits), rhs->exponent-lhs->exponent); if (compare!=BADINT) compare*=result; /* comparison succeeded */ return compare; } /* decCompare */ /* ------------------------------------------------------------------ */ /* decUnitCompare -- compare two >=0 integers in Unit arrays */ /* */ /* This routine compares A ? B*10**E where A and B are unit arrays */ /* A is a plain integer */ /* B has an exponent of E (which must be non-negative) */ /* */ /* Arg1 is A first Unit (lsu) */ /* Arg2 is A length in Units */ /* Arg3 is B first Unit (lsu) */ /* Arg4 is B length in Units */ /* Arg5 is E (0 if the units are aligned) */ /* */ /* returns -1, 0, or 1 for AB, or BADINT if failure */ /* (the only possible failure is an allocation error, which can */ /* only occur if E!=0) */ /* ------------------------------------------------------------------ */ static Int decUnitCompare(const Unit *a, Int alength, const Unit *b, Int blength, Int exp) { Unit *acc; /* accumulator for result */ Unit accbuff[SD2U(DECBUFFER*2+1)]; /* local buffer */ Unit *allocacc=NULL; /* -> allocated acc buffer, iff allocated */ Int accunits, need; /* units in use or needed for acc */ const Unit *l, *r, *u; /* work */ Int expunits, exprem, result; /* .. */ if (exp==0) { /* aligned; fastpath */ if (alength>blength) return 1; if (alength=a; l--, r--) { if (*l>*r) return 1; if (*l<*r) return -1; } return 0; /* all units match */ } /* aligned */ /* Unaligned. If one is >1 unit longer than the other, padded */ /* approximately, then can return easily */ if (alength>blength+(Int)D2U(exp)) return 1; if (alength+1sizeof(accbuff)) { allocacc=(Unit *)malloc(need*sizeof(Unit)); if (allocacc==NULL) return BADINT; /* hopeless -- abandon */ acc=allocacc; } /* Calculate units and remainder from exponent. */ expunits=exp/DECDPUN; exprem=exp%DECDPUN; /* subtract [A+B*(-m)] */ accunits=decUnitAddSub(a, alength, b, blength, expunits, acc, -(Int)powers[exprem]); /* [UnitAddSub result may have leading zeros, even on zero] */ if (accunits<0) result=-1; /* negative result */ else { /* non-negative result */ /* check units of the result before freeing any storage */ for (u=acc; u=0 integers in Unit arrays */ /* */ /* This routine performs the calculation: */ /* */ /* C=A+(B*M) */ /* */ /* Where M is in the range -DECDPUNMAX through +DECDPUNMAX. */ /* */ /* A may be shorter or longer than B. */ /* */ /* Leading zeros are not removed after a calculation. The result is */ /* either the same length as the longer of A and B (adding any */ /* shift), or one Unit longer than that (if a Unit carry occurred). */ /* */ /* A and B content are not altered unless C is also A or B. */ /* C may be the same array as A or B, but only if no zero padding is */ /* requested (that is, C may be B only if bshift==0). */ /* C is filled from the lsu; only those units necessary to complete */ /* the calculation are referenced. */ /* */ /* Arg1 is A first Unit (lsu) */ /* Arg2 is A length in Units */ /* Arg3 is B first Unit (lsu) */ /* Arg4 is B length in Units */ /* Arg5 is B shift in Units (>=0; pads with 0 units if positive) */ /* Arg6 is C first Unit (lsu) */ /* Arg7 is M, the multiplier */ /* */ /* returns the count of Units written to C, which will be non-zero */ /* and negated if the result is negative. That is, the sign of the */ /* returned Int is the sign of the result (positive for zero) and */ /* the absolute value of the Int is the count of Units. */ /* */ /* It is the caller's responsibility to make sure that C size is */ /* safe, allowing space if necessary for a one-Unit carry. */ /* */ /* This routine is severely performance-critical; *any* change here */ /* must be measured (timed) to assure no performance degradation. */ /* In particular, trickery here tends to be counter-productive, as */ /* increased complexity of code hurts register optimizations on */ /* register-poor architectures. Avoiding divisions is nearly */ /* always a Good Idea, however. */ /* */ /* Special thanks to Rick McGuire (IBM Cambridge, MA) and Dave Clark */ /* (IBM Warwick, UK) for some of the ideas used in this routine. */ /* ------------------------------------------------------------------ */ static Int decUnitAddSub(const Unit *a, Int alength, const Unit *b, Int blength, Int bshift, Unit *c, Int m) { const Unit *alsu=a; /* A lsu [need to remember it] */ Unit *clsu=c; /* C ditto */ Unit *minC; /* low water mark for C */ Unit *maxC; /* high water mark for C */ eInt carry=0; /* carry integer (could be Long) */ Int add; /* work */ #if DECDPUN<=4 /* myriadal, millenary, etc. */ Int est; /* estimated quotient */ #endif #if DECTRACE if (alength<1 || blength<1) printf("decUnitAddSub: alen blen m %ld %ld [%ld]\n", alength, blength, m); #endif maxC=c+alength; /* A is usually the longer */ minC=c+blength; /* .. and B the shorter */ if (bshift!=0) { /* B is shifted; low As copy across */ minC+=bshift; /* if in place [common], skip copy unless there's a gap [rare] */ if (a==c && bshift<=alength) { c+=bshift; a+=bshift; } else for (; cmaxC) { /* swap */ Unit *hold=minC; minC=maxC; maxC=hold; } /* For speed, do the addition as two loops; the first where both A */ /* and B contribute, and the second (if necessary) where only one or */ /* other of the numbers contribute. */ /* Carry handling is the same (i.e., duplicated) in each case. */ for (; c=0) { est=(((ueInt)carry>>11)*53687)>>18; *c=(Unit)(carry-est*(DECDPUNMAX+1)); /* remainder */ carry=est; /* likely quotient [89%] */ if (*c>11)*53687)>>18; *c=(Unit)(carry-est*(DECDPUNMAX+1)); carry=est-(DECDPUNMAX+1); /* correctly negative */ if (*c=0) { est=(((ueInt)carry>>3)*16777)>>21; *c=(Unit)(carry-est*(DECDPUNMAX+1)); /* remainder */ carry=est; /* likely quotient [99%] */ if (*c>3)*16777)>>21; *c=(Unit)(carry-est*(DECDPUNMAX+1)); carry=est-(DECDPUNMAX+1); /* correctly negative */ if (*c=0) { est=QUOT10(carry, DECDPUN); *c=(Unit)(carry-est*(DECDPUNMAX+1)); /* remainder */ carry=est; /* quotient */ continue; } /* negative case */ carry=carry+(eInt)(DECDPUNMAX+1)*(DECDPUNMAX+1); /* make positive */ est=QUOT10(carry, DECDPUN); *c=(Unit)(carry-est*(DECDPUNMAX+1)); carry=est-(DECDPUNMAX+1); /* correctly negative */ #else /* remainder operator is undefined if negative, so must test */ if ((ueInt)carry<(DECDPUNMAX+1)*2) { /* fastpath carry +1 */ *c=(Unit)(carry-(DECDPUNMAX+1)); /* [helps additions] */ carry=1; continue; } if (carry>=0) { *c=(Unit)(carry%(DECDPUNMAX+1)); carry=carry/(DECDPUNMAX+1); continue; } /* negative case */ carry=carry+(eInt)(DECDPUNMAX+1)*(DECDPUNMAX+1); /* make positive */ *c=(Unit)(carry%(DECDPUNMAX+1)); carry=carry/(DECDPUNMAX+1)-(DECDPUNMAX+1); #endif } /* c */ /* now may have one or other to complete */ /* [pretest to avoid loop setup/shutdown] */ if (cDECDPUNMAX */ #if DECDPUN==4 /* use divide-by-multiply */ if (carry>=0) { est=(((ueInt)carry>>11)*53687)>>18; *c=(Unit)(carry-est*(DECDPUNMAX+1)); /* remainder */ carry=est; /* likely quotient [79.7%] */ if (*c>11)*53687)>>18; *c=(Unit)(carry-est*(DECDPUNMAX+1)); carry=est-(DECDPUNMAX+1); /* correctly negative */ if (*c=0) { est=(((ueInt)carry>>3)*16777)>>21; *c=(Unit)(carry-est*(DECDPUNMAX+1)); /* remainder */ carry=est; /* likely quotient [99%] */ if (*c>3)*16777)>>21; *c=(Unit)(carry-est*(DECDPUNMAX+1)); carry=est-(DECDPUNMAX+1); /* correctly negative */ if (*c=0) { est=QUOT10(carry, DECDPUN); *c=(Unit)(carry-est*(DECDPUNMAX+1)); /* remainder */ carry=est; /* quotient */ continue; } /* negative case */ carry=carry+(eInt)(DECDPUNMAX+1)*(DECDPUNMAX+1); /* make positive */ est=QUOT10(carry, DECDPUN); *c=(Unit)(carry-est*(DECDPUNMAX+1)); carry=est-(DECDPUNMAX+1); /* correctly negative */ #else if ((ueInt)carry<(DECDPUNMAX+1)*2){ /* fastpath carry 1 */ *c=(Unit)(carry-(DECDPUNMAX+1)); carry=1; continue; } /* remainder operator is undefined if negative, so must test */ if (carry>=0) { *c=(Unit)(carry%(DECDPUNMAX+1)); carry=carry/(DECDPUNMAX+1); continue; } /* negative case */ carry=carry+(eInt)(DECDPUNMAX+1)*(DECDPUNMAX+1); /* make positive */ *c=(Unit)(carry%(DECDPUNMAX+1)); carry=carry/(DECDPUNMAX+1)-(DECDPUNMAX+1); #endif } /* c */ /* OK, all A and B processed; might still have carry or borrow */ /* return number of Units in the result, negated if a borrow */ if (carry==0) return c-clsu; /* no carry, so no more to do */ if (carry>0) { /* positive carry */ *c=(Unit)carry; /* place as new unit */ c++; /* .. */ return c-clsu; } /* -ve carry: it's a borrow; complement needed */ add=1; /* temporary carry... */ for (c=clsu; c current Unit */ #if DECCHECK if (decCheckOperands(dn, DECUNUSED, DECUNUSED, DECUNCONT)) return dn; #endif *dropped=0; /* assume no zeros dropped */ if ((dn->bits & DECSPECIAL) /* fast exit if special .. */ || (*dn->lsu & 0x01)) return dn; /* .. or odd */ if (ISZERO(dn)) { /* .. or 0 */ dn->exponent=0; /* (sign is preserved) */ return dn; } /* have a finite number which is even */ exp=dn->exponent; cut=1; /* digit (1-DECDPUN) in Unit */ up=dn->lsu; /* -> current Unit */ for (d=0; ddigits-1; d++) { /* [don't strip the final digit] */ /* slice by powers */ #if DECDPUN<=4 uInt quot=QUOT10(*up, cut); if ((*up-quot*powers[cut])!=0) break; /* found non-0 digit */ #else if (*up%powers[cut]!=0) break; /* found non-0 digit */ #endif /* have a trailing 0 */ if (!all) { /* trimming */ /* [if exp>0 then all trailing 0s are significant for trim] */ if (exp<=0) { /* if digit might be significant */ if (exp==0) break; /* then quit */ exp++; /* next digit might be significant */ } } cut++; /* next power */ if (cut>DECDPUN) { /* need new Unit */ up++; cut=1; } } /* d */ if (d==0) return dn; /* none to drop */ /* may need to limit drop if clamping */ if (set->clamp && !noclamp) { Int maxd=set->emax-set->digits+1-dn->exponent; if (maxd<=0) return dn; /* nothing possible */ if (d>maxd) d=maxd; } /* effect the drop */ decShiftToLeast(dn->lsu, D2U(dn->digits), d); dn->exponent+=d; /* maintain numerical value */ dn->digits-=d; /* new length */ *dropped=d; /* report the count */ return dn; } /* decTrim */ /* ------------------------------------------------------------------ */ /* decReverse -- reverse a Unit array in place */ /* */ /* ulo is the start of the array */ /* uhi is the end of the array (highest Unit to include) */ /* */ /* The units ulo through uhi are reversed in place (if the number */ /* of units is odd, the middle one is untouched). Note that the */ /* digit(s) in each unit are unaffected. */ /* ------------------------------------------------------------------ */ static void decReverse(Unit *ulo, Unit *uhi) { Unit temp; for (; ulo=uar; source--, target--) *target=*source; } else { first=uar+D2U(digits+shift)-1; /* where msu of source will end up */ for (; source>=uar; source--, target--) { /* split the source Unit and accumulate remainder for next */ #if DECDPUN<=4 uInt quot=QUOT10(*source, cut); uInt rem=*source-quot*powers[cut]; next+=quot; #else uInt rem=*source%powers[cut]; next+=*source/powers[cut]; #endif if (target<=first) *target=(Unit)next; /* write to target iff valid */ next=rem*powers[DECDPUN-cut]; /* save remainder for next Unit */ } } /* shift-move */ /* propagate any partial unit to one below and clear the rest */ for (; target>=uar; target--) { *target=(Unit)next; next=0; } return digits+shift; } /* decShiftToMost */ /* ------------------------------------------------------------------ */ /* decShiftToLeast -- shift digits in array towards least significant */ /* */ /* uar is the array */ /* units is length of the array, in units */ /* shift is the number of digits to remove from the lsu end; it */ /* must be zero or positive and <= than units*DECDPUN. */ /* */ /* returns the new length of the integer in the array, in units */ /* */ /* Removed digits are discarded (lost). Units not required to hold */ /* the final result are unchanged. */ /* ------------------------------------------------------------------ */ static Int decShiftToLeast(Unit *uar, Int units, Int shift) { Unit *target, *up; /* work */ Int cut, count; /* work */ Int quot, rem; /* for division */ if (shift==0) return units; /* [fastpath] nothing to do */ if (shift==units*DECDPUN) { /* [fastpath] little to do */ *uar=0; /* all digits cleared gives zero */ return 1; /* leaves just the one */ } target=uar; /* both paths */ cut=MSUDIGITS(shift); if (cut==DECDPUN) { /* unit-boundary case; easy */ up=uar+D2U(shift); for (; updigits is > set->digits) */ /* set is the relevant context */ /* status is the status accumulator */ /* */ /* returns an allocated decNumber with the rounded result. */ /* */ /* lostDigits and other status may be set by this. */ /* */ /* Since the input is an operand, it must not be modified. */ /* Instead, return an allocated decNumber, rounded as required. */ /* It is the caller's responsibility to free the allocated storage. */ /* */ /* If no storage is available then the result cannot be used, so NULL */ /* is returned. */ /* ------------------------------------------------------------------ */ static decNumber *decRoundOperand(const decNumber *dn, decContext *set, uInt *status) { decNumber *res; /* result structure */ uInt newstatus=0; /* status from round */ Int residue=0; /* rounding accumulator */ /* Allocate storage for the returned decNumber, big enough for the */ /* length specified by the context */ res=(decNumber *)malloc(sizeof(decNumber) +(D2U(set->digits)-1)*sizeof(Unit)); if (res==NULL) { *status|=DEC_Insufficient_storage; return NULL; } decCopyFit(res, dn, set, &residue, &newstatus); decApplyRound(res, set, residue, &newstatus); /* If that set Inexact then "lost digits" is raised... */ if (newstatus & DEC_Inexact) newstatus|=DEC_Lost_digits; *status|=newstatus; return res; } /* decRoundOperand */ #endif /* ------------------------------------------------------------------ */ /* decCopyFit -- copy a number, truncating the coefficient if needed */ /* */ /* dest is the target decNumber */ /* src is the source decNumber */ /* set is the context [used for length (digits) and rounding mode] */ /* residue is the residue accumulator */ /* status contains the current status to be updated */ /* */ /* (dest==src is allowed and will be a no-op if fits) */ /* All fields are updated as required. */ /* ------------------------------------------------------------------ */ static void decCopyFit(decNumber *dest, const decNumber *src, decContext *set, Int *residue, uInt *status) { dest->bits=src->bits; dest->exponent=src->exponent; decSetCoeff(dest, set, src->lsu, src->digits, residue, status); } /* decCopyFit */ /* ------------------------------------------------------------------ */ /* decSetCoeff -- set the coefficient of a number */ /* */ /* dn is the number whose coefficient array is to be set. */ /* It must have space for set->digits digits */ /* set is the context [for size] */ /* lsu -> lsu of the source coefficient [may be dn->lsu] */ /* len is digits in the source coefficient [may be dn->digits] */ /* residue is the residue accumulator. This has values as in */ /* decApplyRound, and will be unchanged unless the */ /* target size is less than len. In this case, the */ /* coefficient is truncated and the residue is updated to */ /* reflect the previous residue and the dropped digits. */ /* status is the status accumulator, as usual */ /* */ /* The coefficient may already be in the number, or it can be an */ /* external intermediate array. If it is in the number, lsu must == */ /* dn->lsu and len must == dn->digits. */ /* */ /* Note that the coefficient length (len) may be < set->digits, and */ /* in this case this merely copies the coefficient (or is a no-op */ /* if dn->lsu==lsu). */ /* */ /* Note also that (only internally, from decQuantizeOp and */ /* decSetSubnormal) the value of set->digits may be less than one, */ /* indicating a round to left. This routine handles that case */ /* correctly; caller ensures space. */ /* */ /* dn->digits, dn->lsu (and as required), and dn->exponent are */ /* updated as necessary. dn->bits (sign) is unchanged. */ /* */ /* DEC_Rounded status is set if any digits are discarded. */ /* DEC_Inexact status is set if any non-zero digits are discarded, or */ /* incoming residue was non-0 (implies rounded) */ /* ------------------------------------------------------------------ */ /* mapping array: maps 0-9 to canonical residues, so that a residue */ /* can be adjusted in the range [-1, +1] and achieve correct rounding */ /* 0 1 2 3 4 5 6 7 8 9 */ static const uByte resmap[10]={0, 3, 3, 3, 3, 5, 7, 7, 7, 7}; static void decSetCoeff(decNumber *dn, decContext *set, const Unit *lsu, Int len, Int *residue, uInt *status) { Int discard; /* number of digits to discard */ uInt cut; /* cut point in Unit */ const Unit *up; /* work */ Unit *target; /* .. */ Int count; /* .. */ #if DECDPUN<=4 uInt temp; /* .. */ #endif discard=len-set->digits; /* digits to discard */ if (discard<=0) { /* no digits are being discarded */ if (dn->lsu!=lsu) { /* copy needed */ /* copy the coefficient array to the result number; no shift needed */ count=len; /* avoids D2U */ up=lsu; for (target=dn->lsu; count>0; target++, up++, count-=DECDPUN) *target=*up; dn->digits=len; /* set the new length */ } /* dn->exponent and residue are unchanged, record any inexactitude */ if (*residue!=0) *status|=(DEC_Inexact | DEC_Rounded); return; } /* some digits must be discarded ... */ dn->exponent+=discard; /* maintain numerical value */ *status|=DEC_Rounded; /* accumulate Rounded status */ if (*residue>1) *residue=1; /* previous residue now to right, so reduce */ if (discard>len) { /* everything, +1, is being discarded */ /* guard digit is 0 */ /* residue is all the number [NB could be all 0s] */ if (*residue<=0) { /* not already positive */ count=len; /* avoids D2U */ for (up=lsu; count>0; up++, count-=DECDPUN) if (*up!=0) { /* found non-0 */ *residue=1; break; /* no need to check any others */ } } if (*residue!=0) *status|=DEC_Inexact; /* record inexactitude */ *dn->lsu=0; /* coefficient will now be 0 */ dn->digits=1; /* .. */ return; } /* total discard */ /* partial discard [most common case] */ /* here, at least the first (most significant) discarded digit exists */ /* spin up the number, noting residue during the spin, until get to */ /* the Unit with the first discarded digit. When reach it, extract */ /* it and remember its position */ count=0; for (up=lsu;; up++) { count+=DECDPUN; if (count>=discard) break; /* full ones all checked */ if (*up!=0) *residue=1; } /* up */ /* here up -> Unit with first discarded digit */ cut=discard-(count-DECDPUN)-1; if (cut==DECDPUN-1) { /* unit-boundary case (fast) */ Unit half=(Unit)powers[DECDPUN]>>1; /* set residue directly */ if (*up>=half) { if (*up>half) *residue=7; else *residue+=5; /* add sticky bit */ } else { /* digits<=0) { /* special for Quantize/Subnormal :-( */ *dn->lsu=0; /* .. result is 0 */ dn->digits=1; /* .. */ } else { /* shift to least */ count=set->digits; /* now digits to end up with */ dn->digits=count; /* set the new length */ up++; /* move to next */ /* on unit boundary, so shift-down copy loop is simple */ for (target=dn->lsu; count>0; target++, up++, count-=DECDPUN) *target=*up; } } /* unit-boundary case */ else { /* discard digit is in low digit(s), and not top digit */ uInt discard1; /* first discarded digit */ uInt quot, rem; /* for divisions */ if (cut==0) quot=*up; /* is at bottom of unit */ else /* cut>0 */ { /* it's not at bottom of unit */ #if DECDPUN<=4 quot=QUOT10(*up, cut); rem=*up-quot*powers[cut]; #else rem=*up%powers[cut]; quot=*up/powers[cut]; #endif if (rem!=0) *residue=1; } /* discard digit is now at bottom of quot */ #if DECDPUN<=4 temp=(quot*6554)>>16; /* fast /10 */ /* Vowels algorithm here not a win (9 instructions) */ discard1=quot-X10(temp); quot=temp; #else discard1=quot%10; quot=quot/10; #endif /* here, discard1 is the guard digit, and residue is everything */ /* else [use mapping array to accumulate residue safely] */ *residue+=resmap[discard1]; cut++; /* update cut */ /* here: up -> Unit of the array with bottom digit */ /* cut is the division point for each Unit */ /* quot holds the uncut high-order digits for the current unit */ if (set->digits<=0) { /* special for Quantize/Subnormal :-( */ *dn->lsu=0; /* .. result is 0 */ dn->digits=1; /* .. */ } else { /* shift to least needed */ count=set->digits; /* now digits to end up with */ dn->digits=count; /* set the new length */ /* shift-copy the coefficient array to the result number */ for (target=dn->lsu; ; target++) { *target=(Unit)quot; count-=(DECDPUN-cut); if (count<=0) break; up++; quot=*up; #if DECDPUN<=4 quot=QUOT10(quot, cut); rem=*up-quot*powers[cut]; #else rem=quot%powers[cut]; quot=quot/powers[cut]; #endif *target=(Unit)(*target+rem*powers[DECDPUN-cut]); count-=cut; if (count<=0) break; } /* shift-copy loop */ } /* shift to least */ } /* not unit boundary */ if (*residue!=0) *status|=DEC_Inexact; /* record inexactitude */ return; } /* decSetCoeff */ /* ------------------------------------------------------------------ */ /* decApplyRound -- apply pending rounding to a number */ /* */ /* dn is the number, with space for set->digits digits */ /* set is the context [for size and rounding mode] */ /* residue indicates pending rounding, being any accumulated */ /* guard and sticky information. It may be: */ /* 6-9: rounding digit is >5 */ /* 5: rounding digit is exactly half-way */ /* 1-4: rounding digit is <5 and >0 */ /* 0: the coefficient is exact */ /* -1: as 1, but the hidden digits are subtractive, that */ /* is, of the opposite sign to dn. In this case the */ /* coefficient must be non-0. This case occurs when */ /* subtracting a small number (which can be reduced to */ /* a sticky bit); see decAddOp. */ /* status is the status accumulator, as usual */ /* */ /* This routine applies rounding while keeping the length of the */ /* coefficient constant. The exponent and status are unchanged */ /* except if: */ /* */ /* -- the coefficient was increased and is all nines (in which */ /* case Overflow could occur, and is handled directly here so */ /* the caller does not need to re-test for overflow) */ /* */ /* -- the coefficient was decreased and becomes all nines (in which */ /* case Underflow could occur, and is also handled directly). */ /* */ /* All fields in dn are updated as required. */ /* */ /* ------------------------------------------------------------------ */ static void decApplyRound(decNumber *dn, decContext *set, Int residue, uInt *status) { Int bump; /* 1 if coefficient needs to be incremented */ /* -1 if coefficient needs to be decremented */ if (residue==0) return; /* nothing to apply */ bump=0; /* assume a smooth ride */ /* now decide whether, and how, to round, depending on mode */ switch (set->round) { case DEC_ROUND_05UP: { /* round zero or five up (for reround) */ /* This is the same as DEC_ROUND_DOWN unless there is a */ /* positive residue and the lsd of dn is 0 or 5, in which case */ /* it is bumped; when residue is <0, the number is therefore */ /* bumped down unless the final digit was 1 or 6 (in which */ /* case it is bumped down and then up -- a no-op) */ Int lsd5=*dn->lsu%5; /* get lsd and quintate */ if (residue<0 && lsd5!=1) bump=-1; else if (residue>0 && lsd5==0) bump=1; /* [bump==1 could be applied directly; use common path for clarity] */ break;} /* r-05 */ case DEC_ROUND_DOWN: { /* no change, except if negative residue */ if (residue<0) bump=-1; break;} /* r-d */ case DEC_ROUND_HALF_DOWN: { if (residue>5) bump=1; break;} /* r-h-d */ case DEC_ROUND_HALF_EVEN: { if (residue>5) bump=1; /* >0.5 goes up */ else if (residue==5) { /* exactly 0.5000... */ /* 0.5 goes up iff [new] lsd is odd */ if (*dn->lsu & 0x01) bump=1; } break;} /* r-h-e */ case DEC_ROUND_HALF_UP: { if (residue>=5) bump=1; break;} /* r-h-u */ case DEC_ROUND_UP: { if (residue>0) bump=1; break;} /* r-u */ case DEC_ROUND_CEILING: { /* same as _UP for positive numbers, and as _DOWN for negatives */ /* [negative residue cannot occur on 0] */ if (decNumberIsNegative(dn)) { if (residue<0) bump=-1; } else { if (residue>0) bump=1; } break;} /* r-c */ case DEC_ROUND_FLOOR: { /* same as _UP for negative numbers, and as _DOWN for positive */ /* [negative residue cannot occur on 0] */ if (!decNumberIsNegative(dn)) { if (residue<0) bump=-1; } else { if (residue>0) bump=1; } break;} /* r-f */ default: { /* e.g., DEC_ROUND_MAX */ *status|=DEC_Invalid_context; #if DECTRACE || (DECCHECK && DECVERB) printf("Unknown rounding mode: %d\n", set->round); #endif break;} } /* switch */ /* now bump the number, up or down, if need be */ if (bump==0) return; /* no action required */ /* Simply use decUnitAddSub unless bumping up and the number is */ /* all nines. In this special case set to 100... explicitly */ /* and adjust the exponent by one (as otherwise could overflow */ /* the array) */ /* Similarly handle all-nines result if bumping down. */ if (bump>0) { Unit *up; /* work */ uInt count=dn->digits; /* digits to be checked */ for (up=dn->lsu; ; up++) { if (count<=DECDPUN) { /* this is the last Unit (the msu) */ if (*up!=powers[count]-1) break; /* not still 9s */ /* here if it, too, is all nines */ *up=(Unit)powers[count-1]; /* here 999 -> 100 etc. */ for (up=up-1; up>=dn->lsu; up--) *up=0; /* others all to 0 */ dn->exponent++; /* and bump exponent */ /* [which, very rarely, could cause Overflow...] */ if ((dn->exponent+dn->digits)>set->emax+1) { decSetOverflow(dn, set, status); } return; /* done */ } /* a full unit to check, with more to come */ if (*up!=DECDPUNMAX) break; /* not still 9s */ count-=DECDPUN; } /* up */ } /* bump>0 */ else { /* -1 */ /* here checking for a pre-bump of 1000... (leading 1, all */ /* other digits zero) */ Unit *up, *sup; /* work */ uInt count=dn->digits; /* digits to be checked */ for (up=dn->lsu; ; up++) { if (count<=DECDPUN) { /* this is the last Unit (the msu) */ if (*up!=powers[count-1]) break; /* not 100.. */ /* here if have the 1000... case */ sup=up; /* save msu pointer */ *up=(Unit)powers[count]-1; /* here 100 in msu -> 999 */ /* others all to all-nines, too */ for (up=up-1; up>=dn->lsu; up--) *up=(Unit)powers[DECDPUN]-1; dn->exponent--; /* and bump exponent */ /* iff the number was at the subnormal boundary (exponent=etiny) */ /* then the exponent is now out of range, so it will in fact get */ /* clamped to etiny and the final 9 dropped. */ /* printf(">> emin=%d exp=%d sdig=%d\n", set->emin, */ /* dn->exponent, set->digits); */ if (dn->exponent+1==set->emin-set->digits+1) { if (count==1 && dn->digits==1) *sup=0; /* here 9 -> 0[.9] */ else { *sup=(Unit)powers[count-1]-1; /* here 999.. in msu -> 99.. */ dn->digits--; } dn->exponent++; *status|=DEC_Underflow | DEC_Subnormal | DEC_Inexact | DEC_Rounded; } return; /* done */ } /* a full unit to check, with more to come */ if (*up!=0) break; /* not still 0s */ count-=DECDPUN; } /* up */ } /* bump<0 */ /* Actual bump needed. Do it. */ decUnitAddSub(dn->lsu, D2U(dn->digits), uarrone, 1, 0, dn->lsu, bump); } /* decApplyRound */ #if DECSUBSET /* ------------------------------------------------------------------ */ /* decFinish -- finish processing a number */ /* */ /* dn is the number */ /* set is the context */ /* residue is the rounding accumulator (as in decApplyRound) */ /* status is the accumulator */ /* */ /* This finishes off the current number by: */ /* 1. If not extended: */ /* a. Converting a zero result to clean '0' */ /* b. Reducing positive exponents to 0, if would fit in digits */ /* 2. Checking for overflow and subnormals (always) */ /* Note this is just Finalize when no subset arithmetic. */ /* All fields are updated as required. */ /* ------------------------------------------------------------------ */ static void decFinish(decNumber *dn, decContext *set, Int *residue, uInt *status) { if (!set->extended) { if ISZERO(dn) { /* value is zero */ dn->exponent=0; /* clean exponent .. */ dn->bits=0; /* .. and sign */ return; /* no error possible */ } if (dn->exponent>=0) { /* non-negative exponent */ /* >0; reduce to integer if possible */ if (set->digits >= (dn->exponent+dn->digits)) { dn->digits=decShiftToMost(dn->lsu, dn->digits, dn->exponent); dn->exponent=0; } } } /* !extended */ decFinalize(dn, set, residue, status); } /* decFinish */ #endif /* ------------------------------------------------------------------ */ /* decFinalize -- final check, clamp, and round of a number */ /* */ /* dn is the number */ /* set is the context */ /* residue is the rounding accumulator (as in decApplyRound) */ /* status is the status accumulator */ /* */ /* This finishes off the current number by checking for subnormal */ /* results, applying any pending rounding, checking for overflow, */ /* and applying any clamping. */ /* Underflow and overflow conditions are raised as appropriate. */ /* All fields are updated as required. */ /* ------------------------------------------------------------------ */ static void decFinalize(decNumber *dn, decContext *set, Int *residue, uInt *status) { Int shift; /* shift needed if clamping */ Int tinyexp=set->emin-dn->digits+1; /* precalculate subnormal boundary */ /* Must be careful, here, when checking the exponent as the */ /* adjusted exponent could overflow 31 bits [because it may already */ /* be up to twice the expected]. */ /* First test for subnormal. This must be done before any final */ /* round as the result could be rounded to Nmin or 0. */ if (dn->exponent<=tinyexp) { /* prefilter */ Int comp; decNumber nmin; /* A very nasty case here is dn == Nmin and residue<0 */ if (dn->exponentemin; comp=decCompare(dn, &nmin, 1); /* (signless compare) */ if (comp==BADINT) { /* oops */ *status|=DEC_Insufficient_storage; /* abandon... */ return; } if (*residue<0 && comp==0) { /* neg residue and dn==Nmin */ decApplyRound(dn, set, *residue, status); /* might force down */ decSetSubnormal(dn, set, residue, status); return; } } /* now apply any pending round (this could raise overflow). */ if (*residue!=0) decApplyRound(dn, set, *residue, status); /* Check for overflow [redundant in the 'rare' case] or clamp */ if (dn->exponent<=set->emax-set->digits+1) return; /* neither needed */ /* here when might have an overflow or clamp to do */ if (dn->exponent>set->emax-dn->digits+1) { /* too big */ decSetOverflow(dn, set, status); return; } /* here when the result is normal but in clamp range */ if (!set->clamp) return; /* here when need to apply the IEEE exponent clamp (fold-down) */ shift=dn->exponent-(set->emax-set->digits+1); /* shift coefficient (if non-zero) */ if (!ISZERO(dn)) { dn->digits=decShiftToMost(dn->lsu, dn->digits, shift); } dn->exponent-=shift; /* adjust the exponent to match */ *status|=DEC_Clamped; /* and record the dirty deed */ return; } /* decFinalize */ /* ------------------------------------------------------------------ */ /* decSetOverflow -- set number to proper overflow value */ /* */ /* dn is the number (used for sign [only] and result) */ /* set is the context [used for the rounding mode, etc.] */ /* status contains the current status to be updated */ /* */ /* This sets the sign of a number and sets its value to either */ /* Infinity or the maximum finite value, depending on the sign of */ /* dn and the rounding mode, following IEEE 754 rules. */ /* ------------------------------------------------------------------ */ static void decSetOverflow(decNumber *dn, decContext *set, uInt *status) { Flag needmax=0; /* result is maximum finite value */ uByte sign=dn->bits&DECNEG; /* clean and save sign bit */ if (ISZERO(dn)) { /* zero does not overflow magnitude */ Int emax=set->emax; /* limit value */ if (set->clamp) emax-=set->digits-1; /* lower if clamping */ if (dn->exponent>emax) { /* clamp required */ dn->exponent=emax; *status|=DEC_Clamped; } return; } decNumberZero(dn); switch (set->round) { case DEC_ROUND_DOWN: { needmax=1; /* never Infinity */ break;} /* r-d */ case DEC_ROUND_05UP: { needmax=1; /* never Infinity */ break;} /* r-05 */ case DEC_ROUND_CEILING: { if (sign) needmax=1; /* Infinity if non-negative */ break;} /* r-c */ case DEC_ROUND_FLOOR: { if (!sign) needmax=1; /* Infinity if negative */ break;} /* r-f */ default: break; /* Infinity in all other cases */ } if (needmax) { decSetMaxValue(dn, set); dn->bits=sign; /* set sign */ } else dn->bits=sign|DECINF; /* Value is +/-Infinity */ *status|=DEC_Overflow | DEC_Inexact | DEC_Rounded; } /* decSetOverflow */ /* ------------------------------------------------------------------ */ /* decSetMaxValue -- set number to +Nmax (maximum normal value) */ /* */ /* dn is the number to set */ /* set is the context [used for digits and emax] */ /* */ /* This sets the number to the maximum positive value. */ /* ------------------------------------------------------------------ */ static void decSetMaxValue(decNumber *dn, decContext *set) { Unit *up; /* work */ Int count=set->digits; /* nines to add */ dn->digits=count; /* fill in all nines to set maximum value */ for (up=dn->lsu; ; up++) { if (count>DECDPUN) *up=DECDPUNMAX; /* unit full o'nines */ else { /* this is the msu */ *up=(Unit)(powers[count]-1); break; } count-=DECDPUN; /* filled those digits */ } /* up */ dn->bits=0; /* + sign */ dn->exponent=set->emax-set->digits+1; } /* decSetMaxValue */ /* ------------------------------------------------------------------ */ /* decSetSubnormal -- process value whose exponent is extended) { decNumberZero(dn); /* always full overflow */ *status|=DEC_Underflow | DEC_Subnormal | DEC_Inexact | DEC_Rounded; return; } #endif /* Full arithmetic -- allow subnormals, rounded to minimum exponent */ /* (Etiny) if needed */ etiny=set->emin-(set->digits-1); /* smallest allowed exponent */ if ISZERO(dn) { /* value is zero */ /* residue can never be non-zero here */ #if DECCHECK if (*residue!=0) { printf("++ Subnormal 0 residue %ld\n", (LI)*residue); *status|=DEC_Invalid_operation; } #endif if (dn->exponentexponent=etiny; *status|=DEC_Clamped; } return; } *status|=DEC_Subnormal; /* have a non-zero subnormal */ adjust=etiny-dn->exponent; /* calculate digits to remove */ if (adjust<=0) { /* not out of range; unrounded */ /* residue can never be non-zero here, except in the Nmin-residue */ /* case (which is a subnormal result), so can take fast-path here */ /* it may already be inexact (from setting the coefficient) */ if (*status&DEC_Inexact) *status|=DEC_Underflow; return; } /* adjust>0, so need to rescale the result so exponent becomes Etiny */ /* [this code is similar to that in rescale] */ workset=*set; /* clone rounding, etc. */ workset.digits=dn->digits-adjust; /* set requested length */ workset.emin-=adjust; /* and adjust emin to match */ /* [note that the latter can be <1, here, similar to Rescale case] */ decSetCoeff(dn, &workset, dn->lsu, dn->digits, residue, status); decApplyRound(dn, &workset, *residue, status); /* Use 754 default rule: Underflow is set iff Inexact */ /* [independent of whether trapped] */ if (*status&DEC_Inexact) *status|=DEC_Underflow; /* if rounded up a 999s case, exponent will be off by one; adjust */ /* back if so [it will fit, because it was shortened earlier] */ if (dn->exponent>etiny) { dn->digits=decShiftToMost(dn->lsu, dn->digits, 1); dn->exponent--; /* (re)adjust the exponent. */ } /* if rounded to zero, it is by definition clamped... */ if (ISZERO(dn)) *status|=DEC_Clamped; } /* decSetSubnormal */ /* ------------------------------------------------------------------ */ /* decCheckMath - check entry conditions for a math function */ /* */ /* This checks the context and the operand */ /* */ /* rhs is the operand to check */ /* set is the context to check */ /* status is unchanged if both are good */ /* */ /* returns non-zero if status is changed, 0 otherwise */ /* */ /* Restrictions enforced: */ /* */ /* digits, emax, and -emin in the context must be less than */ /* DEC_MAX_MATH (999999), and A must be within these bounds if */ /* non-zero. Invalid_operation is set in the status if a */ /* restriction is violated. */ /* ------------------------------------------------------------------ */ static uInt decCheckMath(const decNumber *rhs, decContext *set, uInt *status) { uInt save=*status; /* record */ if (set->digits>DEC_MAX_MATH || set->emax>DEC_MAX_MATH || -set->emin>DEC_MAX_MATH) *status|=DEC_Invalid_context; else if ((rhs->digits>DEC_MAX_MATH || rhs->exponent+rhs->digits>DEC_MAX_MATH+1 || rhs->exponent+rhs->digits<2*(1-DEC_MAX_MATH)) && !ISZERO(rhs)) *status|=DEC_Invalid_operation; return (*status!=save); } /* decCheckMath */ /* ------------------------------------------------------------------ */ /* decGetInt -- get integer from a number */ /* */ /* dn is the number [which will not be altered] */ /* */ /* returns one of: */ /* BADINT if there is a non-zero fraction */ /* the converted integer */ /* BIGEVEN if the integer is even and magnitude > 2*10**9 */ /* BIGODD if the integer is odd and magnitude > 2*10**9 */ /* */ /* This checks and gets a whole number from the input decNumber. */ /* The sign can be determined from dn by the caller when BIGEVEN or */ /* BIGODD is returned. */ /* ------------------------------------------------------------------ */ static Int decGetInt(const decNumber *dn) { Int theInt; /* result accumulator */ const Unit *up; /* work */ Int got; /* digits (real or not) processed */ Int ilength=dn->digits+dn->exponent; /* integral length */ Flag neg=decNumberIsNegative(dn); /* 1 if -ve */ /* The number must be an integer that fits in 10 digits */ /* Assert, here, that 10 is enough for any rescale Etiny */ #if DEC_MAX_EMAX > 999999999 #error GetInt may need updating [for Emax] #endif #if DEC_MIN_EMIN < -999999999 #error GetInt may need updating [for Emin] #endif if (ISZERO(dn)) return 0; /* zeros are OK, with any exponent */ up=dn->lsu; /* ready for lsu */ theInt=0; /* ready to accumulate */ if (dn->exponent>=0) { /* relatively easy */ /* no fractional part [usual]; allow for positive exponent */ got=dn->exponent; } else { /* -ve exponent; some fractional part to check and discard */ Int count=-dn->exponent; /* digits to discard */ /* spin up whole units until reach the Unit with the unit digit */ for (; count>=DECDPUN; up++) { if (*up!=0) return BADINT; /* non-zero Unit to discard */ count-=DECDPUN; } if (count==0) got=0; /* [a multiple of DECDPUN] */ else { /* [not multiple of DECDPUN] */ Int rem; /* work */ /* slice off fraction digits and check for non-zero */ #if DECDPUN<=4 theInt=QUOT10(*up, count); rem=*up-theInt*powers[count]; #else rem=*up%powers[count]; /* slice off discards */ theInt=*up/powers[count]; #endif if (rem!=0) return BADINT; /* non-zero fraction */ /* it looks good */ got=DECDPUN-count; /* number of digits so far */ up++; /* ready for next */ } } /* now it's known there's no fractional part */ /* tricky code now, to accumulate up to 9.3 digits */ if (got==0) {theInt=*up; got+=DECDPUN; up++;} /* ensure lsu is there */ if (ilength<11) { Int save=theInt; /* collect any remaining unit(s) */ for (; got1999999997) ilength=11; else if (!neg && theInt>999999999) ilength=11; if (ilength==11) theInt=save; /* restore correct low bit */ } } if (ilength>10) { /* too big */ if (theInt&1) return BIGODD; /* bottom bit 1 */ return BIGEVEN; /* bottom bit 0 */ } if (neg) theInt=-theInt; /* apply sign */ return theInt; } /* decGetInt */ /* ------------------------------------------------------------------ */ /* decDecap -- decapitate the coefficient of a number */ /* */ /* dn is the number to be decapitated */ /* drop is the number of digits to be removed from the left of dn; */ /* this must be <= dn->digits (if equal, the coefficient is */ /* set to 0) */ /* */ /* Returns dn; dn->digits will be <= the initial digits less drop */ /* (after removing drop digits there may be leading zero digits */ /* which will also be removed). Only dn->lsu and dn->digits change. */ /* ------------------------------------------------------------------ */ static decNumber *decDecap(decNumber *dn, Int drop) { Unit *msu; /* -> target cut point */ Int cut; /* work */ if (drop>=dn->digits) { /* losing the whole thing */ #if DECCHECK if (drop>dn->digits) printf("decDecap called with drop>digits [%ld>%ld]\n", (LI)drop, (LI)dn->digits); #endif dn->lsu[0]=0; dn->digits=1; return dn; } msu=dn->lsu+D2U(dn->digits-drop)-1; /* -> likely msu */ cut=MSUDIGITS(dn->digits-drop); /* digits to be in use in msu */ if (cut!=DECDPUN) *msu%=powers[cut]; /* clear left digits */ /* that may have left leading zero digits, so do a proper count... */ dn->digits=decGetDigits(dn->lsu, msu-dn->lsu+1); return dn; } /* decDecap */ /* ------------------------------------------------------------------ */ /* decBiStr -- compare string with pairwise options */ /* */ /* targ is the string to compare */ /* str1 is one of the strings to compare against (length may be 0) */ /* str2 is the other; it must be the same length as str1 */ /* */ /* returns 1 if strings compare equal, (that is, it is the same */ /* length as str1 and str2, and each character of targ is in either */ /* str1 or str2 in the corresponding position), or 0 otherwise */ /* */ /* This is used for generic caseless compare, including the awkward */ /* case of the Turkish dotted and dotless Is. Use as (for example): */ /* if (decBiStr(test, "mike", "MIKE")) ... */ /* ------------------------------------------------------------------ */ static Flag decBiStr(const char *targ, const char *str1, const char *str2) { for (;;targ++, str1++, str2++) { if (*targ!=*str1 && *targ!=*str2) return 0; /* *targ has a match in one (or both, if terminator) */ if (*targ=='\0') break; } /* forever */ return 1; } /* decBiStr */ /* ------------------------------------------------------------------ */ /* decNaNs -- handle NaN operand or operands */ /* */ /* res is the result number */ /* lhs is the first operand */ /* rhs is the second operand, or NULL if none */ /* context is used to limit payload length */ /* status contains the current status */ /* returns res in case convenient */ /* */ /* Called when one or both operands is a NaN, and propagates the */ /* appropriate result to res. When an sNaN is found, it is changed */ /* to a qNaN and Invalid operation is set. */ /* ------------------------------------------------------------------ */ static decNumber * decNaNs(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set, uInt *status) { /* This decision tree ends up with LHS being the source pointer, */ /* and status updated if need be */ if (lhs->bits & DECSNAN) *status|=DEC_Invalid_operation | DEC_sNaN; else if (rhs==NULL); else if (rhs->bits & DECSNAN) { lhs=rhs; *status|=DEC_Invalid_operation | DEC_sNaN; } else if (lhs->bits & DECNAN); else lhs=rhs; /* propagate the payload */ if (lhs->digits<=set->digits) decNumberCopy(res, lhs); /* easy */ else { /* too long */ const Unit *ul; Unit *ur, *uresp1; /* copy safe number of units, then decapitate */ res->bits=lhs->bits; /* need sign etc. */ uresp1=res->lsu+D2U(set->digits); for (ur=res->lsu, ul=lhs->lsu; urdigits=D2U(set->digits)*DECDPUN; /* maybe still too long */ if (res->digits>set->digits) decDecap(res, res->digits-set->digits); } res->bits&=~DECSNAN; /* convert any sNaN to NaN, while */ res->bits|=DECNAN; /* .. preserving sign */ res->exponent=0; /* clean exponent */ /* [coefficient was copied/decapitated] */ return res; } /* decNaNs */ /* ------------------------------------------------------------------ */ /* decStatus -- apply non-zero status */ /* */ /* dn is the number to set if error */ /* status contains the current status (not yet in context) */ /* set is the context */ /* */ /* If the status is an error status, the number is set to a NaN, */ /* unless the error was an overflow, divide-by-zero, or underflow, */ /* in which case the number will have already been set. */ /* */ /* The context status is then updated with the new status. Note that */ /* this may raise a signal, so control may never return from this */ /* routine (hence resources must be recovered before it is called). */ /* ------------------------------------------------------------------ */ static void decStatus(decNumber *dn, uInt status, decContext *set) { if (status & DEC_NaNs) { /* error status -> NaN */ /* if cause was an sNaN, clear and propagate [NaN is already set up] */ if (status & DEC_sNaN) status&=~DEC_sNaN; else { decNumberZero(dn); /* other error: clean throughout */ dn->bits=DECNAN; /* and make a quiet NaN */ } } decContextSetStatus(set, status); /* [may not return] */ return; } /* decStatus */ /* ------------------------------------------------------------------ */ /* decGetDigits -- count digits in a Units array */ /* */ /* uar is the Unit array holding the number (this is often an */ /* accumulator of some sort) */ /* len is the length of the array in units [>=1] */ /* */ /* returns the number of (significant) digits in the array */ /* */ /* All leading zeros are excluded, except the last if the array has */ /* only zero Units. */ /* ------------------------------------------------------------------ */ /* This may be called twice during some operations. */ static Int decGetDigits(Unit *uar, Int len) { Unit *up=uar+(len-1); /* -> msu */ Int digits=(len-1)*DECDPUN+1; /* possible digits excluding msu */ #if DECDPUN>4 uInt const *pow; /* work */ #endif /* (at least 1 in final msu) */ #if DECCHECK if (len<1) printf("decGetDigits called with len<1 [%ld]\n", (LI)len); #endif for (; up>=uar; up--) { if (*up==0) { /* unit is all 0s */ if (digits==1) break; /* a zero has one digit */ digits-=DECDPUN; /* adjust for 0 unit */ continue;} /* found the first (most significant) non-zero Unit */ #if DECDPUN>1 /* not done yet */ if (*up<10) break; /* is 1-9 */ digits++; #if DECDPUN>2 /* not done yet */ if (*up<100) break; /* is 10-99 */ digits++; #if DECDPUN>3 /* not done yet */ if (*up<1000) break; /* is 100-999 */ digits++; #if DECDPUN>4 /* count the rest ... */ for (pow=&powers[4]; *up>=*pow; pow++) digits++; #endif #endif #endif #endif break; } /* up */ return digits; } /* decGetDigits */ #if DECTRACE | DECCHECK /* ------------------------------------------------------------------ */ /* decNumberShow -- display a number [debug aid] */ /* dn is the number to show */ /* */ /* Shows: sign, exponent, coefficient (msu first), digits */ /* or: sign, special-value */ /* ------------------------------------------------------------------ */ /* this is public so other modules can use it */ void decNumberShow(const decNumber *dn) { const Unit *up; /* work */ uInt u, d; /* .. */ Int cut; /* .. */ char isign='+'; /* main sign */ if (dn==NULL) { printf("NULL\n"); return;} if (decNumberIsNegative(dn)) isign='-'; printf(" >> %c ", isign); if (dn->bits&DECSPECIAL) { /* Is a special value */ if (decNumberIsInfinite(dn)) printf("Infinity"); else { /* a NaN */ if (dn->bits&DECSNAN) printf("sNaN"); /* signalling NaN */ else printf("NaN"); } /* if coefficient and exponent are 0, no more to do */ if (dn->exponent==0 && dn->digits==1 && *dn->lsu==0) { printf("\n"); return;} /* drop through to report other information */ printf(" "); } /* now carefully display the coefficient */ up=dn->lsu+D2U(dn->digits)-1; /* msu */ printf("%ld", (LI)*up); for (up=up-1; up>=dn->lsu; up--) { u=*up; printf(":"); for (cut=DECDPUN-1; cut>=0; cut--) { d=u/powers[cut]; u-=d*powers[cut]; printf("%ld", (LI)d); } /* cut */ } /* up */ if (dn->exponent!=0) { char esign='+'; if (dn->exponent<0) esign='-'; printf(" E%c%ld", esign, (LI)abs(dn->exponent)); } printf(" [%ld]\n", (LI)dn->digits); } /* decNumberShow */ #endif #if DECTRACE || DECCHECK /* ------------------------------------------------------------------ */ /* decDumpAr -- display a unit array [debug/check aid] */ /* name is a single-character tag name */ /* ar is the array to display */ /* len is the length of the array in Units */ /* ------------------------------------------------------------------ */ static void decDumpAr(char name, const Unit *ar, Int len) { Int i; const char *spec; #if DECDPUN==9 spec="%09d "; #elif DECDPUN==8 spec="%08d "; #elif DECDPUN==7 spec="%07d "; #elif DECDPUN==6 spec="%06d "; #elif DECDPUN==5 spec="%05d "; #elif DECDPUN==4 spec="%04d "; #elif DECDPUN==3 spec="%03d "; #elif DECDPUN==2 spec="%02d "; #else spec="%d "; #endif printf(" :%c: ", name); for (i=len-1; i>=0; i--) { if (i==len-1) printf("%ld ", (LI)ar[i]); else printf(spec, ar[i]); } printf("\n"); return;} #endif #if DECCHECK /* ------------------------------------------------------------------ */ /* decCheckOperands -- check operand(s) to a routine */ /* res is the result structure (not checked; it will be set to */ /* quiet NaN if error found (and it is not NULL)) */ /* lhs is the first operand (may be DECUNRESU) */ /* rhs is the second (may be DECUNUSED) */ /* set is the context (may be DECUNCONT) */ /* returns 0 if both operands, and the context are clean, or 1 */ /* otherwise (in which case the context will show an error, */ /* unless NULL). Note that res is not cleaned; caller should */ /* handle this so res=NULL case is safe. */ /* The caller is expected to abandon immediately if 1 is returned. */ /* ------------------------------------------------------------------ */ static Flag decCheckOperands(decNumber *res, const decNumber *lhs, const decNumber *rhs, decContext *set) { Flag bad=0; if (set==NULL) { /* oops; hopeless */ #if DECTRACE || DECVERB printf("Reference to context is NULL.\n"); #endif bad=1; return 1;} else if (set!=DECUNCONT && (set->digits<1 || set->round>=DEC_ROUND_MAX)) { bad=1; #if DECTRACE || DECVERB printf("Bad context [digits=%ld round=%ld].\n", (LI)set->digits, (LI)set->round); #endif } else { if (res==NULL) { bad=1; #if DECTRACE /* this one not DECVERB as standard tests include NULL */ printf("Reference to result is NULL.\n"); #endif } if (!bad && lhs!=DECUNUSED) bad=(decCheckNumber(lhs)); if (!bad && rhs!=DECUNUSED) bad=(decCheckNumber(rhs)); } if (bad) { if (set!=DECUNCONT) decContextSetStatus(set, DEC_Invalid_operation); if (res!=DECUNRESU && res!=NULL) { decNumberZero(res); res->bits=DECNAN; /* qNaN */ } } return bad; } /* decCheckOperands */ /* ------------------------------------------------------------------ */ /* decCheckNumber -- check a number */ /* dn is the number to check */ /* returns 0 if the number is clean, or 1 otherwise */ /* */ /* The number is considered valid if it could be a result from some */ /* operation in some valid context. */ /* ------------------------------------------------------------------ */ static Flag decCheckNumber(const decNumber *dn) { const Unit *up; /* work */ uInt maxuint; /* .. */ Int ae, d, digits; /* .. */ Int emin, emax; /* .. */ if (dn==NULL) { /* hopeless */ #if DECTRACE /* this one not DECVERB as standard tests include NULL */ printf("Reference to decNumber is NULL.\n"); #endif return 1;} /* check special values */ if (dn->bits & DECSPECIAL) { if (dn->exponent!=0) { #if DECTRACE || DECVERB printf("Exponent %ld (not 0) for a special value [%02x].\n", (LI)dn->exponent, dn->bits); #endif return 1;} /* 2003.09.08: NaNs may now have coefficients, so next tests Inf only */ if (decNumberIsInfinite(dn)) { if (dn->digits!=1) { #if DECTRACE || DECVERB printf("Digits %ld (not 1) for an infinity.\n", (LI)dn->digits); #endif return 1;} if (*dn->lsu!=0) { #if DECTRACE || DECVERB printf("LSU %ld (not 0) for an infinity.\n", (LI)*dn->lsu); #endif decDumpAr('I', dn->lsu, D2U(dn->digits)); return 1;} } /* Inf */ /* 2002.12.26: negative NaNs can now appear through proposed IEEE */ /* concrete formats (decimal64, etc.). */ return 0; } /* check the coefficient */ if (dn->digits<1 || dn->digits>DECNUMMAXP) { #if DECTRACE || DECVERB printf("Digits %ld in number.\n", (LI)dn->digits); #endif return 1;} d=dn->digits; for (up=dn->lsu; d>0; up++) { if (d>DECDPUN) maxuint=DECDPUNMAX; else { /* reached the msu */ maxuint=powers[d]-1; if (dn->digits>1 && *upmaxuint) { #if DECTRACE || DECVERB printf("Bad Unit [%08lx] in %ld-digit number at offset %ld [maxuint %ld].\n", (LI)*up, (LI)dn->digits, (LI)(up-dn->lsu), (LI)maxuint); #endif return 1;} d-=DECDPUN; } /* check the exponent. Note that input operands can have exponents */ /* which are out of the set->emin/set->emax and set->digits range */ /* (just as they can have more digits than set->digits). */ ae=dn->exponent+dn->digits-1; /* adjusted exponent */ emax=DECNUMMAXE; emin=DECNUMMINE; digits=DECNUMMAXP; if (ae+emax) { #if DECTRACE || DECVERB printf("Adjusted exponent overflow [%ld].\n", (LI)ae); decNumberShow(dn); #endif return 1;} return 0; /* it's OK */ } /* decCheckNumber */ /* ------------------------------------------------------------------ */ /* decCheckInexact -- check a normal finite inexact result has digits */ /* dn is the number to check */ /* set is the context (for status and precision) */ /* sets Invalid operation, etc., if some digits are missing */ /* [this check is not made for DECSUBSET compilation or when */ /* subnormal is not set] */ /* ------------------------------------------------------------------ */ static void decCheckInexact(const decNumber *dn, decContext *set) { #if !DECSUBSET && DECEXTFLAG if ((set->status & (DEC_Inexact|DEC_Subnormal))==DEC_Inexact && (set->digits!=dn->digits) && !(dn->bits & DECSPECIAL)) { #if DECTRACE || DECVERB printf("Insufficient digits [%ld] on normal Inexact result.\n", (LI)dn->digits); decNumberShow(dn); #endif decContextSetStatus(set, DEC_Invalid_operation); } #else /* next is a noop for quiet compiler */ if (dn!=NULL && dn->digits==0) set->status|=DEC_Invalid_operation; #endif return; } /* decCheckInexact */ #endif #if DECALLOC #undef malloc #undef free /* ------------------------------------------------------------------ */ /* decMalloc -- accountable allocation routine */ /* n is the number of bytes to allocate */ /* */ /* Semantics is the same as the stdlib malloc routine, but bytes */ /* allocated are accounted for globally, and corruption fences are */ /* added before and after the 'actual' storage. */ /* ------------------------------------------------------------------ */ /* This routine allocates storage with an extra twelve bytes; 8 are */ /* at the start and hold: */ /* 0-3 the original length requested */ /* 4-7 buffer corruption detection fence (DECFENCE, x4) */ /* The 4 bytes at the end also hold a corruption fence (DECFENCE, x4) */ /* ------------------------------------------------------------------ */ static void *decMalloc(size_t n) { uInt size=n+12; /* true size */ void *alloc; /* -> allocated storage */ uByte *b, *b0; /* work */ uInt uiwork; /* for macros */ alloc=malloc(size); /* -> allocated storage */ if (alloc==NULL) return NULL; /* out of strorage */ b0=(uByte *)alloc; /* as bytes */ decAllocBytes+=n; /* account for storage */ UBFROMUI(alloc, n); /* save n */ /* printf(" alloc ++ dAB: %ld (%ld)\n", (LI)decAllocBytes, (LI)n); */ for (b=b0+4; b play area */ } /* decMalloc */ /* ------------------------------------------------------------------ */ /* decFree -- accountable free routine */ /* alloc is the storage to free */ /* */ /* Semantics is the same as the stdlib malloc routine, except that */ /* the global storage accounting is updated and the fences are */ /* checked to ensure that no routine has written 'out of bounds'. */ /* ------------------------------------------------------------------ */ /* This routine first checks that the fences have not been corrupted. */ /* It then frees the storage using the 'truw' storage address (that */ /* is, offset by 8). */ /* ------------------------------------------------------------------ */ static void decFree(void *alloc) { uInt n; /* original length */ uByte *b, *b0; /* work */ uInt uiwork; /* for macros */ if (alloc==NULL) return; /* allowed; it's a nop */ b0=(uByte *)alloc; /* as bytes */ b0-=8; /* -> true start of storage */ n=UBTOUI(b0); /* lift length */ for (b=b0+4; b. */ /* ------------------------------------------------------------------ */ /* Decimal Number arithmetic module header */ /* ------------------------------------------------------------------ */ #if !defined(DECNUMBER) #define DECNUMBER #define DECNAME "decNumber" /* Short name */ #define DECFULLNAME "Decimal Number Module" /* Verbose name */ #define DECAUTHOR "Mike Cowlishaw" /* Who to blame */ #if !defined(DECCONTEXT) #include #endif /* Bit settings for decNumber.bits */ #define DECNEG 0x80 /* Sign; 1=negative, 0=positive or zero */ #define DECINF 0x40 /* 1=Infinity */ #define DECNAN 0x20 /* 1=NaN */ #define DECSNAN 0x10 /* 1=sNaN */ /* The remaining bits are reserved; they must be 0 */ #define DECSPECIAL (DECINF|DECNAN|DECSNAN) /* any special value */ /* Define the decNumber data structure. The size and shape of the */ /* units array in the structure is determined by the following */ /* constant. This must not be changed without recompiling the */ /* decNumber library modules. */ #define DECDPUN 3 /* DECimal Digits Per UNit [must be >0 */ /* and <10; 3 or powers of 2 are best]. */ /* DECNUMDIGITS is the default number of digits that can be held in */ /* the structure. If undefined, 1 is assumed and it is assumed */ /* that the structure will be immediately followed by extra space, */ /* as required. DECNUMDIGITS is always >0. */ #if !defined(DECNUMDIGITS) #define DECNUMDIGITS 1 #endif /* The size (integer data type) of each unit is determined by the */ /* number of digits it will hold. */ #if DECDPUN<=2 #define decNumberUnit uint8_t #elif DECDPUN<=4 #define decNumberUnit uint16_t #else #define decNumberUnit uint32_t #endif /* The number of units needed is ceil(DECNUMDIGITS/DECDPUN) */ #define DECNUMUNITS ((DECNUMDIGITS+DECDPUN-1)/DECDPUN) /* The data structure... */ typedef struct { int32_t digits; /* Count of digits in the coefficient; >0 */ int32_t exponent; /* Unadjusted exponent, unbiased, in */ /* range: -1999999997 through 999999999 */ uint8_t bits; /* Indicator bits (see above) */ /* Coefficient, from least significant unit */ decNumberUnit lsu[DECNUMUNITS]; } decNumber; /* Notes: */ /* 1. If digits is > DECDPUN then there will one or more */ /* decNumberUnits immediately following the first element of lsu.*/ /* These contain the remaining (more significant) digits of the */ /* number, and may be in the lsu array, or may be guaranteed by */ /* some other mechanism (such as being contained in another */ /* structure, or being overlaid on dynamically allocated */ /* storage). */ /* */ /* Each integer of the coefficient (except potentially the last) */ /* contains DECDPUN digits (e.g., a value in the range 0 through */ /* 99999999 if DECDPUN is 8, or 0 through 999 if DECDPUN is 3). */ /* */ /* 2. A decNumber converted to a string may need up to digits+14 */ /* characters. The worst cases (non-exponential and exponential */ /* formats) are -0.00000{9...}# and -9.{9...}E+999999999# */ /* (where # is '\0') */ /* ---------------------------------------------------------------- */ /* decNumber public functions and macros */ /* ---------------------------------------------------------------- */ #ifdef IN_LIBGCC2 #include "decNumberSymbols.h" #endif #ifdef __cplusplus extern "C" { #endif /* Conversions */ decNumber * decNumberFromInt32(decNumber *, int32_t); decNumber * decNumberFromUInt32(decNumber *, uint32_t); decNumber * decNumberFromString(decNumber *, const char *, decContext *); char * decNumberToString(const decNumber *, char *); char * decNumberToEngString(const decNumber *, char *); uint32_t decNumberToUInt32(const decNumber *, decContext *); int32_t decNumberToInt32(const decNumber *, decContext *); uint8_t * decNumberGetBCD(const decNumber *, uint8_t *); decNumber * decNumberSetBCD(decNumber *, const uint8_t *, uint32_t); /* Operators and elementary functions */ decNumber * decNumberAbs(decNumber *, const decNumber *, decContext *); decNumber * decNumberAdd(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberAnd(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberCompare(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberCompareSignal(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberCompareTotal(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberCompareTotalMag(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberDivide(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberDivideInteger(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberExp(decNumber *, const decNumber *, decContext *); decNumber * decNumberFMA(decNumber *, const decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberInvert(decNumber *, const decNumber *, decContext *); decNumber * decNumberLn(decNumber *, const decNumber *, decContext *); decNumber * decNumberLogB(decNumber *, const decNumber *, decContext *); decNumber * decNumberLog10(decNumber *, const decNumber *, decContext *); decNumber * decNumberMax(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberMaxMag(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberMin(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberMinMag(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberMinus(decNumber *, const decNumber *, decContext *); decNumber * decNumberMultiply(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberNormalize(decNumber *, const decNumber *, decContext *); decNumber * decNumberOr(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberPlus(decNumber *, const decNumber *, decContext *); decNumber * decNumberPower(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberQuantize(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberReduce(decNumber *, const decNumber *, decContext *); decNumber * decNumberRemainder(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberRemainderNear(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberRescale(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberRotate(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberSameQuantum(decNumber *, const decNumber *, const decNumber *); decNumber * decNumberScaleB(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberShift(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberSquareRoot(decNumber *, const decNumber *, decContext *); decNumber * decNumberSubtract(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberToIntegralExact(decNumber *, const decNumber *, decContext *); decNumber * decNumberToIntegralValue(decNumber *, const decNumber *, decContext *); decNumber * decNumberXor(decNumber *, const decNumber *, const decNumber *, decContext *); /* Utilities */ enum decClass decNumberClass(const decNumber *, decContext *); const char * decNumberClassToString(enum decClass); decNumber * decNumberCopy(decNumber *, const decNumber *); decNumber * decNumberCopyAbs(decNumber *, const decNumber *); decNumber * decNumberCopyNegate(decNumber *, const decNumber *); decNumber * decNumberCopySign(decNumber *, const decNumber *, const decNumber *); decNumber * decNumberNextMinus(decNumber *, const decNumber *, decContext *); decNumber * decNumberNextPlus(decNumber *, const decNumber *, decContext *); decNumber * decNumberNextToward(decNumber *, const decNumber *, const decNumber *, decContext *); decNumber * decNumberTrim(decNumber *); const char * decNumberVersion(void); decNumber * decNumberZero(decNumber *); /* Functions for testing decNumbers (normality depends on context) */ int32_t decNumberIsNormal(const decNumber *, decContext *); int32_t decNumberIsSubnormal(const decNumber *, decContext *); /* Macros for testing decNumber *dn */ #define decNumberIsCanonical(dn) (1) /* All decNumbers are saintly */ #define decNumberIsFinite(dn) (((dn)->bits&DECSPECIAL)==0) #define decNumberIsInfinite(dn) (((dn)->bits&DECINF)!=0) #define decNumberIsNaN(dn) (((dn)->bits&(DECNAN|DECSNAN))!=0) #define decNumberIsNegative(dn) (((dn)->bits&DECNEG)!=0) #define decNumberIsQNaN(dn) (((dn)->bits&(DECNAN))!=0) #define decNumberIsSNaN(dn) (((dn)->bits&(DECSNAN))!=0) #define decNumberIsSpecial(dn) (((dn)->bits&DECSPECIAL)!=0) #define decNumberIsZero(dn) (*(dn)->lsu==0 \ && (dn)->digits==1 \ && (((dn)->bits&DECSPECIAL)==0)) #define decNumberRadix(dn) (10) #ifdef __cplusplus } #endif #endif libdfp-1.0.17/libdecnumber/decNumberLocal.h000066400000000000000000001004641504475242000205330ustar00rootroot00000000000000/* Local definitions for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decNumber package local type, tuning, and macro definitions */ /* ------------------------------------------------------------------ */ /* This header file is included by all modules in the decNumber */ /* library, and contains local type definitions, tuning parameters, */ /* etc. It should not need to be used by application programs. */ /* decNumber.h or one of decDouble (etc.) must be included first. */ /* ------------------------------------------------------------------ */ #if !defined(DECNUMBERLOC) #define DECNUMBERLOC #define DECVERSION "decNumber 3.61" /* Package Version [16 max.] */ #define DECNLAUTHOR "Mike Cowlishaw" /* Who to blame */ #include /* for abs */ #include /* for memset, strcpy */ #include "dconfig.h" /* for WORDS_BIGENDIAN */ /* Conditional code flag -- set this to match hardware platform */ /* 1=little-endian, 0=big-endian */ #if WORDS_BIGENDIAN #define DECLITEND 0 #else #define DECLITEND 1 #endif #if !defined(DECLITEND) #define DECLITEND 1 /* 1=little-endian, 0=big-endian */ #endif /* Conditional code flag -- set this to 1 for best performance */ #if !defined(DECUSE64) #define DECUSE64 1 /* 1=use int64s, 0=int32 & smaller only */ #endif /* Conditional check flags -- set these to 0 for best performance */ #if !defined(DECCHECK) #define DECCHECK 0 /* 1 to enable robust checking */ #endif #if !defined(DECALLOC) #define DECALLOC 0 /* 1 to enable memory accounting */ #endif #if !defined(DECTRACE) #define DECTRACE 0 /* 1 to trace certain internals, etc. */ #endif /* Tuning parameter for decNumber (arbitrary precision) module */ #if !defined(DECBUFFER) #define DECBUFFER 36 /* Size basis for local buffers. This */ /* should be a common maximum precision */ /* rounded up to a multiple of 4; must */ /* be zero or positive. */ #endif /* ---------------------------------------------------------------- */ /* Definitions for all modules (general-purpose) */ /* ---------------------------------------------------------------- */ /* Local names for common types -- for safety, decNumber modules do */ /* not use int or long directly. */ #define Flag uint8_t #define Byte int8_t #define uByte uint8_t #define Short int16_t #define uShort uint16_t #define Int int32_t #define uInt uint32_t #define Unit decNumberUnit #if DECUSE64 #define Long int64_t #define uLong uint64_t #endif /* Development-use definitions */ typedef long int LI; /* for printf arguments only */ #define DECNOINT 0 /* 1 to check no internal use of 'int' */ /* or stdint types */ #if DECNOINT /* if these interfere with your C includes, do not set DECNOINT */ #define int ? /* enable to ensure that plain C 'int' */ #define long ?? /* .. or 'long' types are not used */ #endif /* Shared lookup tables */ extern const uByte DECSTICKYTAB[10]; /* re-round digits if sticky */ extern const uInt DECPOWERS[10]; /* powers of ten table */ /* The following are included from decDPD.h */ #include "decDPDSymbols.h" extern const uShort DPD2BIN[1024]; /* DPD -> 0-999 */ extern const uShort BIN2DPD[1000]; /* 0-999 -> DPD */ extern const uInt DPD2BINK[1024]; /* DPD -> 0-999000 */ extern const uInt DPD2BINM[1024]; /* DPD -> 0-999000000 */ extern const uByte DPD2BCD8[4096]; /* DPD -> ddd + len */ extern const uByte BIN2BCD8[4000]; /* 0-999 -> ddd + len */ extern const uShort BCD2DPD[2458]; /* 0-0x999 -> DPD (0x999=2457)*/ /* LONGMUL32HI -- set w=(u*v)>>32, where w, u, and v are uInts */ /* (that is, sets w to be the high-order word of the 64-bit result; */ /* the low-order word is simply u*v.) */ /* This version is derived from Knuth via Hacker's Delight; */ /* it seems to optimize better than some others tried */ #define LONGMUL32HI(w, u, v) { \ uInt u0, u1, v0, v1, w0, w1, w2, t; \ u0=u & 0xffff; u1=u>>16; \ v0=v & 0xffff; v1=v>>16; \ w0=u0*v0; \ t=u1*v0 + (w0>>16); \ w1=t & 0xffff; w2=t>>16; \ w1=u0*v1 + w1; \ (w)=u1*v1 + w2 + (w1>>16);} /* ROUNDUP -- round an integer up to a multiple of n */ #define ROUNDUP(i, n) ((((i)+(n)-1)/n)*n) #define ROUNDUP4(i) (((i)+3)&~3) /* special for n=4 */ /* ROUNDDOWN -- round an integer down to a multiple of n */ #define ROUNDDOWN(i, n) (((i)/n)*n) #define ROUNDDOWN4(i) ((i)&~3) /* special for n=4 */ /* References to multi-byte sequences under different sizes; these */ /* require locally declared variables, but do not violate strict */ /* aliasing or alignment (as did the UINTAT simple cast to uInt). */ /* Variables needed are uswork, uiwork, etc. [so do not use at same */ /* level in an expression, e.g., UBTOUI(x)==UBTOUI(y) may fail]. */ /* Return a uInt, etc., from bytes starting at a char* or uByte* */ #define UBTOUS(b) (memcpy((void *)&uswork, b, 2), uswork) #define UBTOUI(b) (memcpy((void *)&uiwork, b, 4), uiwork) /* Store a uInt, etc., into bytes starting at a char* or uByte*. */ /* Has to use uiwork because i may be an expression. */ #define UBFROMUS(b, i) (uswork=(i), memcpy(b, (void *)&uswork, 2)) #define UBFROMUI(b, i) (uiwork=(i), memcpy(b, (void *)&uiwork, 4)) /* X10 and X100 -- multiply integer i by 10 or 100 */ /* [shifts are usually faster than multiply; could be conditional] */ #define X10(i) (((i)<<1)+((i)<<3)) #define X100(i) (((i)<<2)+((i)<<5)+((i)<<6)) /* MAXI and MINI -- general max & min (not in ANSI) for integers */ #define MAXI(x,y) ((x)<(y)?(y):(x)) #define MINI(x,y) ((x)>(y)?(y):(x)) /* Useful constants */ #define BILLION 1000000000 /* 10**9 */ /* CHARMASK: 0x30303030 for ASCII/UTF8; 0xF0F0F0F0 for EBCDIC */ #define CHARMASK ((((((((uInt)'0')<<8)+'0')<<8)+'0')<<8)+'0') /* ---------------------------------------------------------------- */ /* Definitions for arbitary-precision modules (only valid after */ /* decNumber.h has been included) */ /* ---------------------------------------------------------------- */ /* Limits and constants */ #define DECNUMMAXP 999999999 /* maximum precision code can handle */ #define DECNUMMAXE 999999999 /* maximum adjusted exponent ditto */ #define DECNUMMINE -999999999 /* minimum adjusted exponent ditto */ #if (DECNUMMAXP != DEC_MAX_DIGITS) #error Maximum digits mismatch #endif #if (DECNUMMAXE != DEC_MAX_EMAX) #error Maximum exponent mismatch #endif #if (DECNUMMINE != DEC_MIN_EMIN) #error Minimum exponent mismatch #endif /* Set DECDPUNMAX -- the maximum integer that fits in DECDPUN */ /* digits, and D2UTABLE -- the initializer for the D2U table */ #if DECDPUN==1 #define DECDPUNMAX 9 #define D2UTABLE {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, \ 18,19,20,21,22,23,24,25,26,27,28,29,30,31,32, \ 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, \ 48,49} #elif DECDPUN==2 #define DECDPUNMAX 99 #define D2UTABLE {0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10, \ 11,11,12,12,13,13,14,14,15,15,16,16,17,17,18, \ 18,19,19,20,20,21,21,22,22,23,23,24,24,25} #elif DECDPUN==3 #define DECDPUNMAX 999 #define D2UTABLE {0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7, \ 8,8,8,9,9,9,10,10,10,11,11,11,12,12,12,13,13, \ 13,14,14,14,15,15,15,16,16,16,17} #elif DECDPUN==4 #define DECDPUNMAX 9999 #define D2UTABLE {0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6, \ 6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11, \ 11,11,11,12,12,12,12,13} #elif DECDPUN==5 #define DECDPUNMAX 99999 #define D2UTABLE {0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5, \ 5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9, \ 9,9,10,10,10,10} #elif DECDPUN==6 #define DECDPUNMAX 999999 #define D2UTABLE {0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4, \ 4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8, \ 8,8,8,8,8,9} #elif DECDPUN==7 #define DECDPUNMAX 9999999 #define D2UTABLE {0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3, \ 4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7, \ 7,7,7,7,7,7} #elif DECDPUN==8 #define DECDPUNMAX 99999999 #define D2UTABLE {0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3, \ 3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6, \ 6,6,6,6,6,7} #elif DECDPUN==9 #define DECDPUNMAX 999999999 #define D2UTABLE {0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3, \ 3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5, \ 5,5,6,6,6,6} #elif defined(DECDPUN) #error DECDPUN must be in the range 1-9 #endif /* ----- Shared data (in decNumber.c) ----- */ /* Public lookup table used by the D2U macro (see below) */ #define DECMAXD2U 49 extern const uByte d2utable[DECMAXD2U+1]; /* ----- Macros ----- */ /* ISZERO -- return true if decNumber dn is a zero */ /* [performance-critical in some situations] */ #define ISZERO(dn) decNumberIsZero(dn) /* now just a local name */ /* D2U -- return the number of Units needed to hold d digits */ /* (runtime version, with table lookaside for small d) */ #if DECDPUN==8 #define D2U(d) ((unsigned)((d)<=DECMAXD2U?d2utable[d]:((d)+7)>>3)) #elif DECDPUN==4 #define D2U(d) ((unsigned)((d)<=DECMAXD2U?d2utable[d]:((d)+3)>>2)) #else #define D2U(d) ((d)<=DECMAXD2U?d2utable[d]:((d)+DECDPUN-1)/DECDPUN) #endif /* SD2U -- static D2U macro (for compile-time calculation) */ #define SD2U(d) (((d)+DECDPUN-1)/DECDPUN) /* MSUDIGITS -- returns digits in msu, from digits, calculated */ /* using D2U */ #define MSUDIGITS(d) ((d)-(D2U(d)-1)*DECDPUN) /* D2N -- return the number of decNumber structs that would be */ /* needed to contain that number of digits (and the initial */ /* decNumber struct) safely. Note that one Unit is included in the */ /* initial structure. Used for allocating space that is aligned on */ /* a decNumber struct boundary. */ #define D2N(d) \ ((((SD2U(d)-1)*sizeof(Unit))+sizeof(decNumber)*2-1)/sizeof(decNumber)) /* TODIGIT -- macro to remove the leading digit from the unsigned */ /* integer u at column cut (counting from the right, LSD=0) and */ /* place it as an ASCII character into the character pointed to by */ /* c. Note that cut must be <= 9, and the maximum value for u is */ /* 2,000,000,000 (as is needed for negative exponents of */ /* subnormals). The unsigned integer pow is used as a temporary */ /* variable. */ #define TODIGIT(u, cut, c, pow) { \ *(c)='0'; \ pow=DECPOWERS[cut]*2; \ if ((u)>pow) { \ pow*=4; \ if ((u)>=pow) {(u)-=pow; *(c)+=8;} \ pow/=2; \ if ((u)>=pow) {(u)-=pow; *(c)+=4;} \ pow/=2; \ } \ if ((u)>=pow) {(u)-=pow; *(c)+=2;} \ pow/=2; \ if ((u)>=pow) {(u)-=pow; *(c)+=1;} \ } /* ---------------------------------------------------------------- */ /* Definitions for fixed-precision modules (only valid after */ /* decSingle.h, decDouble.h, or decQuad.h has been included) */ /* ---------------------------------------------------------------- */ /* bcdnum -- a structure describing a format-independent finite */ /* number, whose coefficient is a string of bcd8 uBytes */ typedef struct { uByte *msd; /* -> most significant digit */ uByte *lsd; /* -> least ditto */ uInt sign; /* 0=positive, DECFLOAT_Sign=negative */ Int exponent; /* Unadjusted signed exponent (q), or */ /* DECFLOAT_NaN etc. for a special */ } bcdnum; /* Test if exponent or bcdnum exponent must be a special, etc. */ #define EXPISSPECIAL(exp) ((exp)>=DECFLOAT_MinSp) #define EXPISINF(exp) (exp==DECFLOAT_Inf) #define EXPISNAN(exp) (exp==DECFLOAT_qNaN || exp==DECFLOAT_sNaN) #define NUMISSPECIAL(num) (EXPISSPECIAL((num)->exponent)) /* Refer to a 32-bit word or byte in a decFloat (df) by big-endian */ /* (array) notation (the 0 word or byte contains the sign bit), */ /* automatically adjusting for endianness; similarly address a word */ /* in the next-wider format (decFloatWider, or dfw) */ #define DECWORDS (DECBYTES/4) #define DECWWORDS (DECWBYTES/4) #if DECLITEND #define DFBYTE(df, off) ((df)->bytes[DECBYTES-1-(off)]) #define DFWORD(df, off) ((df)->words[DECWORDS-1-(off)]) #define DFWWORD(dfw, off) ((dfw)->words[DECWWORDS-1-(off)]) #else #define DFBYTE(df, off) ((df)->bytes[off]) #define DFWORD(df, off) ((df)->words[off]) #define DFWWORD(dfw, off) ((dfw)->words[off]) #endif /* Tests for sign or specials, directly on DECFLOATs */ #define DFISSIGNED(df) (DFWORD(df, 0)&0x80000000) #define DFISSPECIAL(df) ((DFWORD(df, 0)&0x78000000)==0x78000000) #define DFISINF(df) ((DFWORD(df, 0)&0x7c000000)==0x78000000) #define DFISNAN(df) ((DFWORD(df, 0)&0x7c000000)==0x7c000000) #define DFISQNAN(df) ((DFWORD(df, 0)&0x7e000000)==0x7c000000) #define DFISSNAN(df) ((DFWORD(df, 0)&0x7e000000)==0x7e000000) /* Shared lookup tables */ #include "decCommonSymbols.h" extern const uInt DECCOMBMSD[64]; /* Combination field -> MSD */ extern const uInt DECCOMBFROM[48]; /* exp+msd -> Combination */ /* Private generic (utility) routine */ #if DECCHECK || DECTRACE extern void decShowNum(const bcdnum *, const char *); #endif /* Format-dependent macros and constants */ #if defined(DECPMAX) /* Useful constants */ #define DECPMAX9 (ROUNDUP(DECPMAX, 9)/9) /* 'Pmax' in 10**9s */ /* Top words for a zero */ #define SINGLEZERO 0x22500000 #define DOUBLEZERO 0x22380000 #define QUADZERO 0x22080000 /* [ZEROWORD is defined to be one of these in the DFISZERO macro] */ /* Format-dependent common tests: */ /* DFISZERO -- test for (any) zero */ /* DFISCCZERO -- test for coefficient continuation being zero */ /* DFISCC01 -- test for coefficient contains only 0s and 1s */ /* DFISINT -- test for finite and exponent q=0 */ /* DFISUINT01 -- test for sign=0, finite, exponent q=0, and */ /* MSD=0 or 1 */ /* ZEROWORD is also defined here. */ /* In DFISZERO the first test checks the least-significant word */ /* (most likely to be non-zero); the penultimate tests MSD and */ /* DPDs in the signword, and the final test excludes specials and */ /* MSD>7. DFISINT similarly has to allow for the two forms of */ /* MSD codes. DFISUINT01 only has to allow for one form of MSD */ /* code. */ #if DECPMAX==7 #define ZEROWORD SINGLEZERO /* [test macros not needed except for Zero] */ #define DFISZERO(df) ((DFWORD(df, 0)&0x1c0fffff)==0 \ && (DFWORD(df, 0)&0x60000000)!=0x60000000) #elif DECPMAX==16 #define ZEROWORD DOUBLEZERO #define DFISZERO(df) ((DFWORD(df, 1)==0 \ && (DFWORD(df, 0)&0x1c03ffff)==0 \ && (DFWORD(df, 0)&0x60000000)!=0x60000000)) #define DFISINT(df) ((DFWORD(df, 0)&0x63fc0000)==0x22380000 \ ||(DFWORD(df, 0)&0x7bfc0000)==0x6a380000) #define DFISUINT01(df) ((DFWORD(df, 0)&0xfbfc0000)==0x22380000) #define DFISCCZERO(df) (DFWORD(df, 1)==0 \ && (DFWORD(df, 0)&0x0003ffff)==0) #define DFISCC01(df) ((DFWORD(df, 0)&~0xfffc9124)==0 \ && (DFWORD(df, 1)&~0x49124491)==0) #elif DECPMAX==34 #define ZEROWORD QUADZERO #define DFISZERO(df) ((DFWORD(df, 3)==0 \ && DFWORD(df, 2)==0 \ && DFWORD(df, 1)==0 \ && (DFWORD(df, 0)&0x1c003fff)==0 \ && (DFWORD(df, 0)&0x60000000)!=0x60000000)) #define DFISINT(df) ((DFWORD(df, 0)&0x63ffc000)==0x22080000 \ ||(DFWORD(df, 0)&0x7bffc000)==0x6a080000) #define DFISUINT01(df) ((DFWORD(df, 0)&0xfbffc000)==0x22080000) #define DFISCCZERO(df) (DFWORD(df, 3)==0 \ && DFWORD(df, 2)==0 \ && DFWORD(df, 1)==0 \ && (DFWORD(df, 0)&0x00003fff)==0) #define DFISCC01(df) ((DFWORD(df, 0)&~0xffffc912)==0 \ && (DFWORD(df, 1)&~0x44912449)==0 \ && (DFWORD(df, 2)&~0x12449124)==0 \ && (DFWORD(df, 3)&~0x49124491)==0) #endif /* Macros to test if a certain 10 bits of a uInt or pair of uInts */ /* are a canonical declet [higher or lower bits are ignored]. */ /* declet is at offset 0 (from the right) in a uInt: */ #define CANONDPD(dpd) (((dpd)&0x300)==0 || ((dpd)&0x6e)!=0x6e) /* declet is at offset k (a multiple of 2) in a uInt: */ #define CANONDPDOFF(dpd, k) (((dpd)&(0x300<<(k)))==0 \ || ((dpd)&(((uInt)0x6e)<<(k)))!=(((uInt)0x6e)<<(k))) /* declet is at offset k (a multiple of 2) in a pair of uInts: */ /* [the top 2 bits will always be in the more-significant uInt] */ #define CANONDPDTWO(hi, lo, k) (((hi)&(0x300>>(32-(k))))==0 \ || ((hi)&(0x6e>>(32-(k))))!=(0x6e>>(32-(k))) \ || ((lo)&(((uInt)0x6e)<<(k)))!=(((uInt)0x6e)<<(k))) /* Macro to test whether a full-length (length DECPMAX) BCD8 */ /* coefficient, starting at uByte u, is all zeros */ /* Test just the LSWord first, then the remainder as a sequence */ /* of tests in order to avoid same-level use of UBTOUI */ #if DECPMAX==7 #define ISCOEFFZERO(u) ( \ UBTOUI((u)+DECPMAX-4)==0 \ && UBTOUS((u)+DECPMAX-6)==0 \ && *(u)==0) #elif DECPMAX==16 #define ISCOEFFZERO(u) ( \ UBTOUI((u)+DECPMAX-4)==0 \ && UBTOUI((u)+DECPMAX-8)==0 \ && UBTOUI((u)+DECPMAX-12)==0 \ && UBTOUI(u)==0) #elif DECPMAX==34 #define ISCOEFFZERO(u) ( \ UBTOUI((u)+DECPMAX-4)==0 \ && UBTOUI((u)+DECPMAX-8)==0 \ && UBTOUI((u)+DECPMAX-12)==0 \ && UBTOUI((u)+DECPMAX-16)==0 \ && UBTOUI((u)+DECPMAX-20)==0 \ && UBTOUI((u)+DECPMAX-24)==0 \ && UBTOUI((u)+DECPMAX-28)==0 \ && UBTOUI((u)+DECPMAX-32)==0 \ && UBTOUS(u)==0) #endif /* Macros and masks for the exponent continuation field and MSD */ /* Get the exponent continuation from a decFloat *df as an Int */ #define GETECON(df) ((Int)((DFWORD((df), 0)&0x03ffffff)>>(32-6-DECECONL))) /* Ditto, from the next-wider format */ #define GETWECON(df) ((Int)((DFWWORD((df), 0)&0x03ffffff)>>(32-6-DECWECONL))) /* Get the biased exponent similarly */ #define GETEXP(df) ((Int)(DECCOMBEXP[DFWORD((df), 0)>>26]+GETECON(df))) /* Get the unbiased exponent similarly */ #define GETEXPUN(df) ((Int)GETEXP(df)-DECBIAS) /* Get the MSD similarly (as uInt) */ #define GETMSD(df) (DECCOMBMSD[DFWORD((df), 0)>>26]) /* Compile-time computes of the exponent continuation field masks */ /* full exponent continuation field: */ #define ECONMASK ((0x03ffffff>>(32-6-DECECONL))<<(32-6-DECECONL)) /* same, not including its first digit (the qNaN/sNaN selector): */ #define ECONNANMASK ((0x01ffffff>>(32-6-DECECONL))<<(32-6-DECECONL)) /* Macros to decode the coefficient in a finite decFloat *df into */ /* a BCD string (uByte *bcdin) of length DECPMAX uBytes. */ /* In-line sequence to convert least significant 10 bits of uInt */ /* dpd to three BCD8 digits starting at uByte u. Note that an */ /* extra byte is written to the right of the three digits because */ /* four bytes are moved at a time for speed; the alternative */ /* macro moves exactly three bytes (usually slower). */ #define dpd2bcd8(u, dpd) memcpy(u, &DPD2BCD8[((dpd)&0x3ff)*4], 4) #define dpd2bcd83(u, dpd) memcpy(u, &DPD2BCD8[((dpd)&0x3ff)*4], 3) /* Decode the declets. After extracting each one, it is decoded */ /* to BCD8 using a table lookup (also used for variable-length */ /* decode). Each DPD decode is 3 bytes BCD8 plus a one-byte */ /* length which is not used, here). Fixed-length 4-byte moves */ /* are fast, however, almost everywhere, and so are used except */ /* for the final three bytes (to avoid overrun). The code below */ /* is 36 instructions for Doubles and about 70 for Quads, even */ /* on IA32. */ /* Two macros are defined for each format: */ /* GETCOEFF extracts the coefficient of the current format */ /* GETWCOEFF extracts the coefficient of the next-wider format. */ /* The latter is a copy of the next-wider GETCOEFF using DFWWORD. */ #if DECPMAX==7 #define GETCOEFF(df, bcd) { \ uInt sourhi=DFWORD(df, 0); \ *(bcd)=(uByte)DECCOMBMSD[sourhi>>26]; \ dpd2bcd8(bcd+1, sourhi>>10); \ dpd2bcd83(bcd+4, sourhi);} #define GETWCOEFF(df, bcd) { \ uInt sourhi=DFWWORD(df, 0); \ uInt sourlo=DFWWORD(df, 1); \ *(bcd)=(uByte)DECCOMBMSD[sourhi>>26]; \ dpd2bcd8(bcd+1, sourhi>>8); \ dpd2bcd8(bcd+4, (sourhi<<2) | (sourlo>>30)); \ dpd2bcd8(bcd+7, sourlo>>20); \ dpd2bcd8(bcd+10, sourlo>>10); \ dpd2bcd83(bcd+13, sourlo);} #elif DECPMAX==16 #define GETCOEFF(df, bcd) { \ uInt sourhi=DFWORD(df, 0); \ uInt sourlo=DFWORD(df, 1); \ *(bcd)=(uByte)DECCOMBMSD[sourhi>>26]; \ dpd2bcd8(bcd+1, sourhi>>8); \ dpd2bcd8(bcd+4, (sourhi<<2) | (sourlo>>30)); \ dpd2bcd8(bcd+7, sourlo>>20); \ dpd2bcd8(bcd+10, sourlo>>10); \ dpd2bcd83(bcd+13, sourlo);} #define GETWCOEFF(df, bcd) { \ uInt sourhi=DFWWORD(df, 0); \ uInt sourmh=DFWWORD(df, 1); \ uInt sourml=DFWWORD(df, 2); \ uInt sourlo=DFWWORD(df, 3); \ *(bcd)=(uByte)DECCOMBMSD[sourhi>>26]; \ dpd2bcd8(bcd+1, sourhi>>4); \ dpd2bcd8(bcd+4, ((sourhi)<<6) | (sourmh>>26)); \ dpd2bcd8(bcd+7, sourmh>>16); \ dpd2bcd8(bcd+10, sourmh>>6); \ dpd2bcd8(bcd+13, ((sourmh)<<4) | (sourml>>28)); \ dpd2bcd8(bcd+16, sourml>>18); \ dpd2bcd8(bcd+19, sourml>>8); \ dpd2bcd8(bcd+22, ((sourml)<<2) | (sourlo>>30)); \ dpd2bcd8(bcd+25, sourlo>>20); \ dpd2bcd8(bcd+28, sourlo>>10); \ dpd2bcd83(bcd+31, sourlo);} #elif DECPMAX==34 #define GETCOEFF(df, bcd) { \ uInt sourhi=DFWORD(df, 0); \ uInt sourmh=DFWORD(df, 1); \ uInt sourml=DFWORD(df, 2); \ uInt sourlo=DFWORD(df, 3); \ *(bcd)=(uByte)DECCOMBMSD[sourhi>>26]; \ dpd2bcd8(bcd+1, sourhi>>4); \ dpd2bcd8(bcd+4, ((sourhi)<<6) | (sourmh>>26)); \ dpd2bcd8(bcd+7, sourmh>>16); \ dpd2bcd8(bcd+10, sourmh>>6); \ dpd2bcd8(bcd+13, ((sourmh)<<4) | (sourml>>28)); \ dpd2bcd8(bcd+16, sourml>>18); \ dpd2bcd8(bcd+19, sourml>>8); \ dpd2bcd8(bcd+22, ((sourml)<<2) | (sourlo>>30)); \ dpd2bcd8(bcd+25, sourlo>>20); \ dpd2bcd8(bcd+28, sourlo>>10); \ dpd2bcd83(bcd+31, sourlo);} #define GETWCOEFF(df, bcd) {??} /* [should never be used] */ #endif /* Macros to decode the coefficient in a finite decFloat *df into */ /* a base-billion uInt array, with the least-significant */ /* 0-999999999 'digit' at offset 0. */ /* Decode the declets. After extracting each one, it is decoded */ /* to binary using a table lookup. Three tables are used; one */ /* the usual DPD to binary, the other two pre-multiplied by 1000 */ /* and 1000000 to avoid multiplication during decode. These */ /* tables can also be used for multiplying up the MSD as the DPD */ /* code for 0 through 9 is the identity. */ #define DPD2BIN0 DPD2BIN /* for prettier code */ #if DECPMAX==7 #define GETCOEFFBILL(df, buf) { \ uInt sourhi=DFWORD(df, 0); \ (buf)[0]=DPD2BIN0[sourhi&0x3ff] \ +DPD2BINK[(sourhi>>10)&0x3ff] \ +DPD2BINM[DECCOMBMSD[sourhi>>26]];} #elif DECPMAX==16 #define GETCOEFFBILL(df, buf) { \ uInt sourhi, sourlo; \ sourlo=DFWORD(df, 1); \ (buf)[0]=DPD2BIN0[sourlo&0x3ff] \ +DPD2BINK[(sourlo>>10)&0x3ff] \ +DPD2BINM[(sourlo>>20)&0x3ff]; \ sourhi=DFWORD(df, 0); \ (buf)[1]=DPD2BIN0[((sourhi<<2) | (sourlo>>30))&0x3ff] \ +DPD2BINK[(sourhi>>8)&0x3ff] \ +DPD2BINM[DECCOMBMSD[sourhi>>26]];} #elif DECPMAX==34 #define GETCOEFFBILL(df, buf) { \ uInt sourhi, sourmh, sourml, sourlo; \ sourlo=DFWORD(df, 3); \ (buf)[0]=DPD2BIN0[sourlo&0x3ff] \ +DPD2BINK[(sourlo>>10)&0x3ff] \ +DPD2BINM[(sourlo>>20)&0x3ff]; \ sourml=DFWORD(df, 2); \ (buf)[1]=DPD2BIN0[((sourml<<2) | (sourlo>>30))&0x3ff] \ +DPD2BINK[(sourml>>8)&0x3ff] \ +DPD2BINM[(sourml>>18)&0x3ff]; \ sourmh=DFWORD(df, 1); \ (buf)[2]=DPD2BIN0[((sourmh<<4) | (sourml>>28))&0x3ff] \ +DPD2BINK[(sourmh>>6)&0x3ff] \ +DPD2BINM[(sourmh>>16)&0x3ff]; \ sourhi=DFWORD(df, 0); \ (buf)[3]=DPD2BIN0[((sourhi<<6) | (sourmh>>26))&0x3ff] \ +DPD2BINK[(sourhi>>4)&0x3ff] \ +DPD2BINM[DECCOMBMSD[sourhi>>26]];} #endif /* Macros to decode the coefficient in a finite decFloat *df into */ /* a base-thousand uInt array (of size DECLETS+1, to allow for */ /* the MSD), with the least-significant 0-999 'digit' at offset 0.*/ /* Decode the declets. After extracting each one, it is decoded */ /* to binary using a table lookup. */ #if DECPMAX==7 #define GETCOEFFTHOU(df, buf) { \ uInt sourhi=DFWORD(df, 0); \ (buf)[0]=DPD2BIN[sourhi&0x3ff]; \ (buf)[1]=DPD2BIN[(sourhi>>10)&0x3ff]; \ (buf)[2]=DECCOMBMSD[sourhi>>26];} #elif DECPMAX==16 #define GETCOEFFTHOU(df, buf) { \ uInt sourhi, sourlo; \ sourlo=DFWORD(df, 1); \ (buf)[0]=DPD2BIN[sourlo&0x3ff]; \ (buf)[1]=DPD2BIN[(sourlo>>10)&0x3ff]; \ (buf)[2]=DPD2BIN[(sourlo>>20)&0x3ff]; \ sourhi=DFWORD(df, 0); \ (buf)[3]=DPD2BIN[((sourhi<<2) | (sourlo>>30))&0x3ff]; \ (buf)[4]=DPD2BIN[(sourhi>>8)&0x3ff]; \ (buf)[5]=DECCOMBMSD[sourhi>>26];} #elif DECPMAX==34 #define GETCOEFFTHOU(df, buf) { \ uInt sourhi, sourmh, sourml, sourlo; \ sourlo=DFWORD(df, 3); \ (buf)[0]=DPD2BIN[sourlo&0x3ff]; \ (buf)[1]=DPD2BIN[(sourlo>>10)&0x3ff]; \ (buf)[2]=DPD2BIN[(sourlo>>20)&0x3ff]; \ sourml=DFWORD(df, 2); \ (buf)[3]=DPD2BIN[((sourml<<2) | (sourlo>>30))&0x3ff]; \ (buf)[4]=DPD2BIN[(sourml>>8)&0x3ff]; \ (buf)[5]=DPD2BIN[(sourml>>18)&0x3ff]; \ sourmh=DFWORD(df, 1); \ (buf)[6]=DPD2BIN[((sourmh<<4) | (sourml>>28))&0x3ff]; \ (buf)[7]=DPD2BIN[(sourmh>>6)&0x3ff]; \ (buf)[8]=DPD2BIN[(sourmh>>16)&0x3ff]; \ sourhi=DFWORD(df, 0); \ (buf)[9]=DPD2BIN[((sourhi<<6) | (sourmh>>26))&0x3ff]; \ (buf)[10]=DPD2BIN[(sourhi>>4)&0x3ff]; \ (buf)[11]=DECCOMBMSD[sourhi>>26];} #endif /* Macros to decode the coefficient in a finite decFloat *df and */ /* add to a base-thousand uInt array (as for GETCOEFFTHOU). */ /* After the addition then most significant 'digit' in the array */ /* might have a value larger then 10 (with a maximum of 19). */ #if DECPMAX==7 #define ADDCOEFFTHOU(df, buf) { \ uInt sourhi=DFWORD(df, 0); \ (buf)[0]+=DPD2BIN[sourhi&0x3ff]; \ if (buf[0]>999) {buf[0]-=1000; buf[1]++;} \ (buf)[1]+=DPD2BIN[(sourhi>>10)&0x3ff]; \ if (buf[1]>999) {buf[1]-=1000; buf[2]++;} \ (buf)[2]+=DECCOMBMSD[sourhi>>26];} #elif DECPMAX==16 #define ADDCOEFFTHOU(df, buf) { \ uInt sourhi, sourlo; \ sourlo=DFWORD(df, 1); \ (buf)[0]+=DPD2BIN[sourlo&0x3ff]; \ if (buf[0]>999) {buf[0]-=1000; buf[1]++;} \ (buf)[1]+=DPD2BIN[(sourlo>>10)&0x3ff]; \ if (buf[1]>999) {buf[1]-=1000; buf[2]++;} \ (buf)[2]+=DPD2BIN[(sourlo>>20)&0x3ff]; \ if (buf[2]>999) {buf[2]-=1000; buf[3]++;} \ sourhi=DFWORD(df, 0); \ (buf)[3]+=DPD2BIN[((sourhi<<2) | (sourlo>>30))&0x3ff]; \ if (buf[3]>999) {buf[3]-=1000; buf[4]++;} \ (buf)[4]+=DPD2BIN[(sourhi>>8)&0x3ff]; \ if (buf[4]>999) {buf[4]-=1000; buf[5]++;} \ (buf)[5]+=DECCOMBMSD[sourhi>>26];} #elif DECPMAX==34 #define ADDCOEFFTHOU(df, buf) { \ uInt sourhi, sourmh, sourml, sourlo; \ sourlo=DFWORD(df, 3); \ (buf)[0]+=DPD2BIN[sourlo&0x3ff]; \ if (buf[0]>999) {buf[0]-=1000; buf[1]++;} \ (buf)[1]+=DPD2BIN[(sourlo>>10)&0x3ff]; \ if (buf[1]>999) {buf[1]-=1000; buf[2]++;} \ (buf)[2]+=DPD2BIN[(sourlo>>20)&0x3ff]; \ if (buf[2]>999) {buf[2]-=1000; buf[3]++;} \ sourml=DFWORD(df, 2); \ (buf)[3]+=DPD2BIN[((sourml<<2) | (sourlo>>30))&0x3ff]; \ if (buf[3]>999) {buf[3]-=1000; buf[4]++;} \ (buf)[4]+=DPD2BIN[(sourml>>8)&0x3ff]; \ if (buf[4]>999) {buf[4]-=1000; buf[5]++;} \ (buf)[5]+=DPD2BIN[(sourml>>18)&0x3ff]; \ if (buf[5]>999) {buf[5]-=1000; buf[6]++;} \ sourmh=DFWORD(df, 1); \ (buf)[6]+=DPD2BIN[((sourmh<<4) | (sourml>>28))&0x3ff]; \ if (buf[6]>999) {buf[6]-=1000; buf[7]++;} \ (buf)[7]+=DPD2BIN[(sourmh>>6)&0x3ff]; \ if (buf[7]>999) {buf[7]-=1000; buf[8]++;} \ (buf)[8]+=DPD2BIN[(sourmh>>16)&0x3ff]; \ if (buf[8]>999) {buf[8]-=1000; buf[9]++;} \ sourhi=DFWORD(df, 0); \ (buf)[9]+=DPD2BIN[((sourhi<<6) | (sourmh>>26))&0x3ff]; \ if (buf[9]>999) {buf[9]-=1000; buf[10]++;} \ (buf)[10]+=DPD2BIN[(sourhi>>4)&0x3ff]; \ if (buf[10]>999) {buf[10]-=1000; buf[11]++;} \ (buf)[11]+=DECCOMBMSD[sourhi>>26];} #endif /* Set a decFloat to the maximum positive finite number (Nmax) */ #if DECPMAX==7 #define DFSETNMAX(df) \ {DFWORD(df, 0)=0x77f3fcff;} #elif DECPMAX==16 #define DFSETNMAX(df) \ {DFWORD(df, 0)=0x77fcff3f; \ DFWORD(df, 1)=0xcff3fcff;} #elif DECPMAX==34 #define DFSETNMAX(df) \ {DFWORD(df, 0)=0x77ffcff3; \ DFWORD(df, 1)=0xfcff3fcf; \ DFWORD(df, 2)=0xf3fcff3f; \ DFWORD(df, 3)=0xcff3fcff;} #endif /* [end of format-dependent macros and constants] */ #endif #else #error decNumberLocal included more than once #endif libdfp-1.0.17/libdecnumber/decNumberSymbols.h000066400000000000000000000055401504475242000211300ustar00rootroot00000000000000#if !defined(DECNUMBERSYMBOLS) #define DECNUMBERSYMBOLS #ifdef IN_LIBGCC2 #define decNumberAbs __decNumberAbs #define decNumberAdd __decNumberAdd #define decNumberAnd __decNumberAnd #define decNumberClass __decNumberClass #define decNumberClassToString __decNumberClassToString #define decNumberCompare __decNumberCompare #define decNumberCompareSignal __decNumberCompareSignal #define decNumberCompareTotal __decNumberCompareTotal #define decNumberCompareTotalMag __decNumberCompareTotalMag #define decNumberCopy __decNumberCopy #define decNumberCopyAbs __decNumberCopyAbs #define decNumberCopyNegate __decNumberCopyNegate #define decNumberCopySign __decNumberCopySign #define decNumberDivide __decNumberDivide #define decNumberDivideInteger __decNumberDivideInteger #define decNumberExp __decNumberExp #define decNumberFMA __decNumberFMA #define decNumberFromInt32 __decNumberFromInt32 #define decNumberFromString __decNumberFromString #define decNumberFromUInt32 __decNumberFromUInt32 #define decNumberGetBCD __decNumberGetBCD #define decNumberInvert __decNumberInvert #define decNumberIsNormal __decNumberIsNormal #define decNumberIsSubnormal __decNumberIsSubnormal #define decNumberLn __decNumberLn #define decNumberLog10 __decNumberLog10 #define decNumberLogB __decNumberLogB #define decNumberMax __decNumberMax #define decNumberMaxMag __decNumberMaxMag #define decNumberMin __decNumberMin #define decNumberMinMag __decNumberMinMag #define decNumberMinus __decNumberMinus #define decNumberMultiply __decNumberMultiply #define decNumberNextMinus __decNumberNextMinus #define decNumberNextPlus __decNumberNextPlus #define decNumberNextToward __decNumberNextToward #define decNumberNormalize __decNumberNormalize #define decNumberOr __decNumberOr #define decNumberPlus __decNumberPlus #define decNumberPower __decNumberPower #define decNumberQuantize __decNumberQuantize #define decNumberReduce __decNumberReduce #define decNumberRemainder __decNumberRemainder #define decNumberRemainderNear __decNumberRemainderNear #define decNumberRescale __decNumberRescale #define decNumberRotate __decNumberRotate #define decNumberSameQuantum __decNumberSameQuantum #define decNumberScaleB __decNumberScaleB #define decNumberSetBCD __decNumberSetBCD #define decNumberShift __decNumberShift #define decNumberSquareRoot __decNumberSquareRoot #define decNumberSubtract __decNumberSubtract #define decNumberToEngString __decNumberToEngString #define decNumberToInt32 __decNumberToInt32 #define decNumberToIntegralExact __decNumberToIntegralExact #define decNumberToIntegralValue __decNumberToIntegralValue #define decNumberToString __decNumberToString #define decNumberToUInt32 __decNumberToUInt32 #define decNumberTrim __decNumberTrim #define decNumberVersion __decNumberVersion #define decNumberXor __decNumberXor #define decNumberZero __decNumberZero #define LNnn __decLNnn #define d2utable __decd2utable #endif #endif libdfp-1.0.17/libdecnumber/decPacked.c000066400000000000000000000210571504475242000175120ustar00rootroot00000000000000/* Packed decimal conversion module for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Packed Decimal conversion module */ /* ------------------------------------------------------------------ */ /* This module comprises the routines for Packed Decimal format */ /* numbers. Conversions are supplied to and from decNumber, which in */ /* turn supports: */ /* conversions to and from string */ /* arithmetic routines */ /* utilities. */ /* Conversions from decNumber to and from densely packed decimal */ /* formats are provided by the decimal32 through decimal128 modules. */ /* ------------------------------------------------------------------ */ #include /* for NULL */ #include "decNumber.h" /* base number library */ #include "decPacked.h" /* packed decimal */ #include "decNumberLocal.h" /* decNumber local types, etc. */ /* ------------------------------------------------------------------ */ /* decPackedFromNumber -- convert decNumber to BCD Packed Decimal */ /* */ /* bcd is the BCD bytes */ /* length is the length of the BCD array */ /* scale is the scale result */ /* dn is the decNumber */ /* returns bcd, or NULL if error */ /* */ /* The number is converted to a BCD packed decimal byte array, */ /* right aligned in the bcd array, whose length is indicated by the */ /* second parameter. The final 4-bit nibble in the array will be a */ /* sign nibble, C (1100) for + and D (1101) for -. Unused bytes and */ /* nibbles to the left of the number are set to 0. */ /* */ /* scale is set to the scale of the number (this is the exponent, */ /* negated). To force the number to a specified scale, first use the */ /* decNumberRescale routine, which will round and change the exponent */ /* as necessary. */ /* */ /* If there is an error (that is, the decNumber has too many digits */ /* to fit in length bytes, or it is a NaN or Infinity), NULL is */ /* returned and the bcd and scale results are unchanged. Otherwise */ /* bcd is returned. */ /* ------------------------------------------------------------------ */ uByte * decPackedFromNumber(uByte *bcd, Int length, Int *scale, const decNumber *dn) { const Unit *up=dn->lsu; /* Unit array pointer */ uByte obyte, *out; /* current output byte, and where it goes */ Int indigs=dn->digits; /* digits processed */ uInt cut=DECDPUN; /* downcounter per Unit */ uInt u=*up; /* work */ uInt nib; /* .. */ #if DECDPUN<=4 uInt temp; /* .. */ #endif if (dn->digits>length*2-1 /* too long .. */ ||(dn->bits & DECSPECIAL)) return NULL; /* .. or special -- hopeless */ if (dn->bits&DECNEG) obyte=DECPMINUS; /* set the sign .. */ else obyte=DECPPLUS; *scale=-dn->exponent; /* .. and scale */ /* loop from lowest (rightmost) byte */ out=bcd+length-1; /* -> final byte */ for (; out>=bcd; out--) { if (indigs>0) { if (cut==0) { up++; u=*up; cut=DECDPUN; } #if DECDPUN<=4 temp=(u*6554)>>16; /* fast /10 */ nib=u-X10(temp); u=temp; #else nib=u%10; /* cannot use *6554 trick :-( */ u=u/10; #endif obyte|=(nib<<4); indigs--; cut--; } *out=obyte; obyte=0; /* assume 0 */ if (indigs>0) { if (cut==0) { up++; u=*up; cut=DECDPUN; } #if DECDPUN<=4 temp=(u*6554)>>16; /* as above */ obyte=(uByte)(u-X10(temp)); u=temp; #else obyte=(uByte)(u%10); u=u/10; #endif indigs--; cut--; } } /* loop */ return bcd; } /* decPackedFromNumber */ /* ------------------------------------------------------------------ */ /* decPackedToNumber -- convert BCD Packed Decimal to a decNumber */ /* */ /* bcd is the BCD bytes */ /* length is the length of the BCD array */ /* scale is the scale associated with the BCD integer */ /* dn is the decNumber [with space for length*2 digits] */ /* returns dn, or NULL if error */ /* */ /* The BCD packed decimal byte array, together with an associated */ /* scale, is converted to a decNumber. The BCD array is assumed full */ /* of digits, and must be ended by a 4-bit sign nibble in the least */ /* significant four bits of the final byte. */ /* */ /* The scale is used (negated) as the exponent of the decNumber. */ /* Note that zeros may have a sign and/or a scale. */ /* */ /* The decNumber structure is assumed to have sufficient space to */ /* hold the converted number (that is, up to length*2-1 digits), so */ /* no error is possible unless the adjusted exponent is out of range, */ /* no sign nibble was found, or a sign nibble was found before the */ /* final nibble. In these error cases, NULL is returned and the */ /* decNumber will be 0. */ /* ------------------------------------------------------------------ */ decNumber * decPackedToNumber(const uByte *bcd, Int length, const Int *scale, decNumber *dn) { const uByte *last=bcd+length-1; /* -> last byte */ const uByte *first; /* -> first non-zero byte */ uInt nib; /* work nibble */ Unit *up=dn->lsu; /* output pointer */ Int digits; /* digits count */ Int cut=0; /* phase of output */ decNumberZero(dn); /* default result */ last=&bcd[length-1]; nib=*last & 0x0f; /* get the sign */ if (nib==DECPMINUS || nib==DECPMINUSALT) dn->bits=DECNEG; else if (nib<=9) return NULL; /* not a sign nibble */ /* skip leading zero bytes [final byte is always non-zero, due to sign] */ for (first=bcd; *first==0;) first++; digits=(last-first)*2+1; /* calculate digits .. */ if ((*first & 0xf0)==0) digits--; /* adjust for leading zero nibble */ if (digits!=0) dn->digits=digits; /* count of actual digits [if 0, */ /* leave as 1] */ /* check the adjusted exponent; note that scale could be unbounded */ dn->exponent=-*scale; /* set the exponent */ if (*scale>=0) { /* usual case */ if ((dn->digits-*scale-1)<-DECNUMMAXE) { /* underflow */ decNumberZero(dn); return NULL;} } else { /* -ve scale; +ve exponent */ /* need to be careful to avoid wrap, here, also BADINT case */ if ((*scale<-DECNUMMAXE) /* overflow even without digits */ || ((dn->digits-*scale-1)>DECNUMMAXE)) { /* overflow */ decNumberZero(dn); return NULL;} } if (digits==0) return dn; /* result was zero */ /* copy the digits to the number's units, starting at the lsu */ /* [unrolled] */ for (;;) { /* forever */ /* left nibble first */ nib=(unsigned)(*last & 0xf0)>>4; /* got a digit, in nib */ if (nib>9) {decNumberZero(dn); return NULL;} if (cut==0) *up=(Unit)nib; else *up=(Unit)(*up+nib*DECPOWERS[cut]); digits--; if (digits==0) break; /* got them all */ cut++; if (cut==DECDPUN) { up++; cut=0; } last--; /* ready for next */ nib=*last & 0x0f; /* get right nibble */ if (nib>9) {decNumberZero(dn); return NULL;} /* got a digit, in nib */ if (cut==0) *up=(Unit)nib; else *up=(Unit)(*up+nib*DECPOWERS[cut]); digits--; if (digits==0) break; /* got them all */ cut++; if (cut==DECDPUN) { up++; cut=0; } } /* forever */ return dn; } /* decPackedToNumber */ libdfp-1.0.17/libdecnumber/decPacked.h000066400000000000000000000052121504475242000175120ustar00rootroot00000000000000/* Packed decimal conversion module header for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Packed Decimal conversion module header */ /* ------------------------------------------------------------------ */ #if !defined(DECPACKED) #define DECPACKED #define DECPNAME "decPacked" /* Short name */ #define DECPFULLNAME "Packed Decimal conversions" /* Verbose name */ #define DECPAUTHOR "Mike Cowlishaw" /* Who to blame */ #define DECPACKED_DefP 32 /* default precision */ #ifndef DECNUMDIGITS #define DECNUMDIGITS DECPACKED_DefP /* size if not already defined*/ #endif #include "decNumber.h" /* context and number library */ /* Sign nibble constants */ #if !defined(DECPPLUSALT) #define DECPPLUSALT 0x0A /* alternate plus nibble */ #define DECPMINUSALT 0x0B /* alternate minus nibble */ #define DECPPLUS 0x0C /* preferred plus nibble */ #define DECPMINUS 0x0D /* preferred minus nibble */ #define DECPPLUSALT2 0x0E /* alternate plus nibble */ #define DECPUNSIGNED 0x0F /* alternate plus nibble (unsigned) */ #endif /* ---------------------------------------------------------------- */ /* decPacked public routines */ /* ---------------------------------------------------------------- */ #include "decPackedSymbols.h" /* Conversions */ uint8_t * decPackedFromNumber(uint8_t *, int32_t, int32_t *, const decNumber *); decNumber * decPackedToNumber(const uint8_t *, int32_t, const int32_t *, decNumber *); #endif libdfp-1.0.17/libdecnumber/decPackedSymbols.h000066400000000000000000000002721504475242000210640ustar00rootroot00000000000000#if !defined(DECPACKEDSYMBOLS) #define DECPACKEDSYMBOLS #ifdef IN_LIBGCC2 #define decPackedFromNumber __decPackedFromNumber #define decPackedToNumber __decPackedToNumber #endif #endif libdfp-1.0.17/libdecnumber/decQuad.c000066400000000000000000000133361504475242000172160ustar00rootroot00000000000000/* decQuad module for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decQuad.c -- decQuad operations module */ /* ------------------------------------------------------------------ */ /* This module comprises decQuad operations (including conversions) */ /* ------------------------------------------------------------------ */ #include "decContext.h" /* public includes */ #include "decQuad.h" /* .. */ /* Constant mappings for shared code */ #define DECPMAX DECQUAD_Pmax #define DECEMIN DECQUAD_Emin #define DECEMAX DECQUAD_Emax #define DECEMAXD DECQUAD_EmaxD #define DECBYTES DECQUAD_Bytes #define DECSTRING DECQUAD_String #define DECECONL DECQUAD_EconL #define DECBIAS DECQUAD_Bias #define DECLETS DECQUAD_Declets #define DECQTINY (-DECQUAD_Bias) /* Type and function mappings for shared code */ #define decFloat decQuad /* Type name */ /* Utilities and conversions (binary results, extractors, etc.) */ #define decFloatFromBCD decQuadFromBCD #define decFloatFromInt32 decQuadFromInt32 #define decFloatFromPacked decQuadFromPacked #define decFloatFromPackedChecked decQuadFromPackedChecked #define decFloatFromString decQuadFromString #define decFloatFromUInt32 decQuadFromUInt32 #define decFloatFromWider decQuadFromWider #define decFloatGetCoefficient decQuadGetCoefficient #define decFloatGetExponent decQuadGetExponent #define decFloatSetCoefficient decQuadSetCoefficient #define decFloatSetExponent decQuadSetExponent #define decFloatShow decQuadShow #define decFloatToBCD decQuadToBCD #define decFloatToEngString decQuadToEngString #define decFloatToInt32 decQuadToInt32 #define decFloatToInt32Exact decQuadToInt32Exact #define decFloatToPacked decQuadToPacked #define decFloatToString decQuadToString #define decFloatToUInt32 decQuadToUInt32 #define decFloatToUInt32Exact decQuadToUInt32Exact #define decFloatToWider decQuadToWider #define decFloatZero decQuadZero /* Computational (result is a decFloat) */ #define decFloatAbs decQuadAbs #define decFloatAdd decQuadAdd #define decFloatAnd decQuadAnd #define decFloatDivide decQuadDivide #define decFloatDivideInteger decQuadDivideInteger #define decFloatFMA decQuadFMA #define decFloatInvert decQuadInvert #define decFloatLogB decQuadLogB #define decFloatMax decQuadMax #define decFloatMaxMag decQuadMaxMag #define decFloatMin decQuadMin #define decFloatMinMag decQuadMinMag #define decFloatMinus decQuadMinus #define decFloatMultiply decQuadMultiply #define decFloatNextMinus decQuadNextMinus #define decFloatNextPlus decQuadNextPlus #define decFloatNextToward decQuadNextToward #define decFloatOr decQuadOr #define decFloatPlus decQuadPlus #define decFloatQuantize decQuadQuantize #define decFloatReduce decQuadReduce #define decFloatRemainder decQuadRemainder #define decFloatRemainderNear decQuadRemainderNear #define decFloatRotate decQuadRotate #define decFloatScaleB decQuadScaleB #define decFloatShift decQuadShift #define decFloatSubtract decQuadSubtract #define decFloatToIntegralValue decQuadToIntegralValue #define decFloatToIntegralExact decQuadToIntegralExact #define decFloatXor decQuadXor /* Comparisons */ #define decFloatCompare decQuadCompare #define decFloatCompareSignal decQuadCompareSignal #define decFloatCompareTotal decQuadCompareTotal #define decFloatCompareTotalMag decQuadCompareTotalMag /* Copies */ #define decFloatCanonical decQuadCanonical #define decFloatCopy decQuadCopy #define decFloatCopyAbs decQuadCopyAbs #define decFloatCopyNegate decQuadCopyNegate #define decFloatCopySign decQuadCopySign /* Non-computational */ #define decFloatClass decQuadClass #define decFloatClassString decQuadClassString #define decFloatDigits decQuadDigits #define decFloatIsCanonical decQuadIsCanonical #define decFloatIsFinite decQuadIsFinite #define decFloatIsInfinite decQuadIsInfinite #define decFloatIsInteger decQuadIsInteger #define decFloatIsNaN decQuadIsNaN #define decFloatIsNormal decQuadIsNormal #define decFloatIsSignaling decQuadIsSignaling #define decFloatIsSignalling decQuadIsSignalling #define decFloatIsSigned decQuadIsSigned #define decFloatIsSubnormal decQuadIsSubnormal #define decFloatIsZero decQuadIsZero #define decFloatRadix decQuadRadix #define decFloatSameQuantum decQuadSameQuantum #define decFloatVersion decQuadVersion #include "decNumberLocal.h" /* local includes (need DECPMAX) */ #include "decCommon.c" /* non-arithmetic decFloat routines */ #include "decBasic.c" /* basic formats routines */ libdfp-1.0.17/libdecnumber/decQuad.h000066400000000000000000000245621504475242000172260ustar00rootroot00000000000000/* decQuad module header for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decQuad.h -- Decimal 128-bit format module header */ /* ------------------------------------------------------------------ */ /* This include file is always included by decSingle and decDouble, */ /* and therefore also holds useful constants used by all three. */ #if !defined(DECQUAD) #define DECQUAD #define DECQUADNAME "decimalQuad" /* Short name */ #define DECQUADTITLE "Decimal 128-bit datum" /* Verbose name */ #define DECQUADAUTHOR "Mike Cowlishaw" /* Who to blame */ /* parameters for decQuads */ #define DECQUAD_Bytes 16 /* length */ #define DECQUAD_Pmax 34 /* maximum precision (digits) */ #define DECQUAD_Emin -6143 /* minimum adjusted exponent */ #define DECQUAD_Emax 6144 /* maximum adjusted exponent */ #define DECQUAD_EmaxD 4 /* maximum exponent digits */ #define DECQUAD_Bias 6176 /* bias for the exponent */ #define DECQUAD_String 43 /* maximum string length, +1 */ #define DECQUAD_EconL 12 /* exponent continuation length */ #define DECQUAD_Declets 11 /* count of declets */ /* highest biased exponent (Elimit-1) */ #define DECQUAD_Ehigh (DECQUAD_Emax + DECQUAD_Bias - (DECQUAD_Pmax-1)) /* Required include */ #include "decContext.h" /* The decQuad decimal 128-bit type, accessible by all sizes */ typedef union { uint8_t bytes[DECQUAD_Bytes]; /* fields: 1, 5, 12, 110 bits */ uint16_t shorts[DECQUAD_Bytes/2]; uint32_t words[DECQUAD_Bytes/4]; #if DECUSE64 uint64_t longs[DECQUAD_Bytes/8]; #endif } decQuad; /* ---------------------------------------------------------------- */ /* Shared constants */ /* ---------------------------------------------------------------- */ /* sign and special values [top 32-bits; last two bits are don't-care for Infinity on input, last bit don't-care for NaNs] */ #define DECFLOAT_Sign 0x80000000 /* 1 00000 00 Sign */ #define DECFLOAT_NaN 0x7c000000 /* 0 11111 00 NaN generic */ #define DECFLOAT_qNaN 0x7c000000 /* 0 11111 00 qNaN */ #define DECFLOAT_sNaN 0x7e000000 /* 0 11111 10 sNaN */ #define DECFLOAT_Inf 0x78000000 /* 0 11110 00 Infinity */ #define DECFLOAT_MinSp 0x78000000 /* minimum special value */ /* [specials are all >=MinSp] */ /* Sign nibble constants */ #if !defined(DECPPLUSALT) #define DECPPLUSALT 0x0A /* alternate plus nibble */ #define DECPMINUSALT 0x0B /* alternate minus nibble */ #define DECPPLUS 0x0C /* preferred plus nibble */ #define DECPMINUS 0x0D /* preferred minus nibble */ #define DECPPLUSALT2 0x0E /* alternate plus nibble */ #define DECPUNSIGNED 0x0F /* alternate plus nibble (unsigned) */ #endif /* ---------------------------------------------------------------- */ /* Routines -- implemented as decFloat routines in common files */ /* ---------------------------------------------------------------- */ #include "decQuadSymbols.h" /* Utilities and conversions, extractors, etc.) */ extern decQuad * decQuadFromBCD(decQuad *, int32_t, const uint8_t *, int32_t); extern decQuad * decQuadFromInt32(decQuad *, int32_t); extern decQuad * decQuadFromPacked(decQuad *, int32_t, const uint8_t *); extern decQuad * decQuadFromPackedChecked(decQuad *, int32_t, const uint8_t *); extern decQuad * decQuadFromString(decQuad *, const char *, decContext *); extern decQuad * decQuadFromUInt32(decQuad *, uint32_t); extern int32_t decQuadGetCoefficient(const decQuad *, uint8_t *); extern int32_t decQuadGetExponent(const decQuad *); extern decQuad * decQuadSetCoefficient(decQuad *, const uint8_t *, int32_t); extern decQuad * decQuadSetExponent(decQuad *, decContext *, int32_t); extern void decQuadShow(const decQuad *, const char *); extern int32_t decQuadToBCD(const decQuad *, int32_t *, uint8_t *); extern char * decQuadToEngString(const decQuad *, char *); extern int32_t decQuadToInt32(const decQuad *, decContext *, enum rounding); extern int32_t decQuadToInt32Exact(const decQuad *, decContext *, enum rounding); extern int32_t decQuadToPacked(const decQuad *, int32_t *, uint8_t *); extern char * decQuadToString(const decQuad *, char *); extern uint32_t decQuadToUInt32(const decQuad *, decContext *, enum rounding); extern uint32_t decQuadToUInt32Exact(const decQuad *, decContext *, enum rounding); extern decQuad * decQuadZero(decQuad *); /* Computational (result is a decQuad) */ extern decQuad * decQuadAbs(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadAdd(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadAnd(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadDivide(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadDivideInteger(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadFMA(decQuad *, const decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadInvert(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadLogB(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadMax(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadMaxMag(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadMin(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadMinMag(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadMinus(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadMultiply(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadNextMinus(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadNextPlus(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadNextToward(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadOr(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadPlus(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadQuantize(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadReduce(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadRemainder(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadRemainderNear(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadRotate(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadScaleB(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadShift(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadSubtract(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadToIntegralValue(decQuad *, const decQuad *, decContext *, enum rounding); extern decQuad * decQuadToIntegralExact(decQuad *, const decQuad *, decContext *); extern decQuad * decQuadXor(decQuad *, const decQuad *, const decQuad *, decContext *); /* Comparisons */ extern decQuad * decQuadCompare(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadCompareSignal(decQuad *, const decQuad *, const decQuad *, decContext *); extern decQuad * decQuadCompareTotal(decQuad *, const decQuad *, const decQuad *); extern decQuad * decQuadCompareTotalMag(decQuad *, const decQuad *, const decQuad *); /* Copies */ extern decQuad * decQuadCanonical(decQuad *, const decQuad *); extern decQuad * decQuadCopy(decQuad *, const decQuad *); extern decQuad * decQuadCopyAbs(decQuad *, const decQuad *); extern decQuad * decQuadCopyNegate(decQuad *, const decQuad *); extern decQuad * decQuadCopySign(decQuad *, const decQuad *, const decQuad *); /* Non-computational */ extern enum decClass decQuadClass(const decQuad *); extern const char * decQuadClassString(const decQuad *); extern uint32_t decQuadDigits(const decQuad *); extern uint32_t decQuadIsCanonical(const decQuad *); extern uint32_t decQuadIsFinite(const decQuad *); extern uint32_t decQuadIsInteger(const decQuad *); extern uint32_t decQuadIsInfinite(const decQuad *); extern uint32_t decQuadIsNaN(const decQuad *); extern uint32_t decQuadIsNormal(const decQuad *); extern uint32_t decQuadIsSignaling(const decQuad *); extern uint32_t decQuadIsSignalling(const decQuad *); extern uint32_t decQuadIsSigned(const decQuad *); extern uint32_t decQuadIsSubnormal(const decQuad *); extern uint32_t decQuadIsZero(const decQuad *); extern uint32_t decQuadRadix(const decQuad *); extern uint32_t decQuadSameQuantum(const decQuad *, const decQuad *); extern const char * decQuadVersion(void); /* decNumber conversions; these are implemented as macros so as not */ /* to force a dependency on decimal128 and decNumber in decQuad. */ /* decQuadFromNumber returns a decimal128 * to avoid warnings. */ #define decQuadToNumber(dq, dn) decimal128ToNumber((decimal128 *)(dq), dn) #define decQuadFromNumber(dq, dn, set) decimal128FromNumber((decimal128 *)(dq), dn, set) #endif libdfp-1.0.17/libdecnumber/decQuadSymbols.h000066400000000000000000000062541504475242000205750ustar00rootroot00000000000000#if !defined(DECQUADSYMBOLS) #define DECQUADSYMBOLS #ifdef IN_LIBGCC2 #define decQuadAbs __decQuadAbs #define decQuadAdd __decQuadAdd #define decQuadAnd __decQuadAnd #define decQuadCanonical __decQuadCanonical #define decQuadClass __decQuadClass #define decQuadClassString __decQuadClassString #define decQuadCompare __decQuadCompare #define decQuadCompareSignal __decQuadCompareSignal #define decQuadCompareTotal __decQuadCompareTotal #define decQuadCompareTotalMag __decQuadCompareTotalMag #define decQuadCopy __decQuadCopy #define decQuadCopyAbs __decQuadCopyAbs #define decQuadCopyNegate __decQuadCopyNegate #define decQuadCopySign __decQuadCopySign #define decQuadDigits __decQuadDigits #define decQuadDivide __decQuadDivide #define decQuadDivideInteger __decQuadDivideInteger #define decQuadFMA __decQuadFMA #define decQuadFromBCD __decQuadFromBCD #define decQuadFromInt32 __decQuadFromInt32 #define decQuadFromPacked __decQuadFromPacked #define decQuadFromString __decQuadFromString #define decQuadFromUInt32 __decQuadFromUInt32 #define decQuadGetCoefficient __decQuadGetCoefficient #define decQuadGetExponent __decQuadGetExponent #define decQuadInvert __decQuadInvert #define decQuadIsCanonical __decQuadIsCanonical #define decQuadIsFinite __decQuadIsFinite #define decQuadIsInfinite __decQuadIsInfinite #define decQuadIsInteger __decQuadIsInteger #define decQuadIsNaN __decQuadIsNaN #define decQuadIsNormal __decQuadIsNormal #define decQuadIsSignaling __decQuadIsSignaling #define decQuadIsSignalling __decQuadIsSignalling #define decQuadIsSigned __decQuadIsSigned #define decQuadIsSubnormal __decQuadIsSubnormal #define decQuadIsZero __decQuadIsZero #define decQuadLogB __decQuadLogB #define decQuadMax __decQuadMax #define decQuadMaxMag __decQuadMaxMag #define decQuadMin __decQuadMin #define decQuadMinMag __decQuadMinMag #define decQuadMinus __decQuadMinus #define decQuadMultiply __decQuadMultiply #define decQuadNextMinus __decQuadNextMinus #define decQuadNextPlus __decQuadNextPlus #define decQuadNextToward __decQuadNextToward #define decQuadOr __decQuadOr #define decQuadPlus __decQuadPlus #define decQuadQuantize __decQuadQuantize #define decQuadRadix __decQuadRadix #define decQuadReduce __decQuadReduce #define decQuadRemainder __decQuadRemainder #define decQuadRemainderNear __decQuadRemainderNear #define decQuadRotate __decQuadRotate #define decQuadSameQuantum __decQuadSameQuantum #define decQuadScaleB __decQuadScaleB #define decQuadSetCoefficient __decQuadSetCoefficient #define decQuadSetExponent __decQuadSetExponent #define decQuadShift __decQuadShift #define decQuadShow __decQuadShow #define decQuadSubtract __decQuadSubtract #define decQuadToBCD __decQuadToBCD #define decQuadToEngString __decQuadToEngString #define decQuadToInt32 __decQuadToInt32 #define decQuadToInt32Exact __decQuadToInt32Exact #define decQuadToIntegralExact __decQuadToIntegralExact #define decQuadToIntegralValue __decQuadToIntegralValue #define decQuadToPacked __decQuadToPacked #define decQuadToString __decQuadToString #define decQuadToUInt32 __decQuadToUInt32 #define decQuadToUInt32Exact __decQuadToUInt32Exact #define decQuadVersion __decQuadVersion #define decQuadXor __decQuadXor #define decQuadZero __decQuadZero #endif #endif libdfp-1.0.17/libdecnumber/decRound.c000066400000000000000000000055141504475242000174120ustar00rootroot00000000000000/* Internal testing support for rounding for decimal float. Copyright (C) 2005-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "dconfig.h" #include "decContext.h" #include "decRound.h" /* Internal, non-documented functions for testing libgcc functions. This support is not sufficient for application use. */ #define FE_DEC_DOWNWARD 0 #define FE_DEC_TONEAREST 1 #define FE_DEC_TONEARESTFROMZERO 2 #define FE_DEC_TOWARDZERO 3 #define FE_DEC_UPWARD 4 #define FE_DEC_MAX 5 static enum rounding __dfp_rounding_mode = DEC_ROUND_HALF_EVEN; /* Set the decNumber rounding mode from the FE_DEC_* value in MODE. */ void __dfp_set_round (int mode) { switch (mode) { case FE_DEC_DOWNWARD: __dfp_rounding_mode = DEC_ROUND_FLOOR; break; case FE_DEC_TONEAREST: __dfp_rounding_mode = DEC_ROUND_HALF_EVEN; break; case FE_DEC_TONEARESTFROMZERO: __dfp_rounding_mode = DEC_ROUND_HALF_UP; break; case FE_DEC_TOWARDZERO: __dfp_rounding_mode = DEC_ROUND_DOWN; break; case FE_DEC_UPWARD: __dfp_rounding_mode = DEC_ROUND_CEILING; break; default: /* We can't use assert in libgcc, so just return the default mode. */ __dfp_rounding_mode = DEC_ROUND_HALF_EVEN; break; } } /* Return the decNumber rounding mode as an FE_DEC_* value. */ int __dfp_get_round (void) { int mode; switch (__dfp_rounding_mode) { case DEC_ROUND_FLOOR: mode = FE_DEC_DOWNWARD; break; case DEC_ROUND_HALF_EVEN: mode = FE_DEC_TONEAREST; break; case DEC_ROUND_HALF_UP: mode = FE_DEC_TONEARESTFROMZERO; break; case DEC_ROUND_DOWN: mode = FE_DEC_TOWARDZERO; break; case DEC_ROUND_CEILING: mode = FE_DEC_UPWARD; break; default: /* We shouldn't get here, but can't use assert in libgcc. */ mode = -1; } return mode; } /* Return the decNumber version of the current rounding mode. */ enum rounding __decGetRound (void) { return __dfp_rounding_mode; } libdfp-1.0.17/libdecnumber/decRound.h000066400000000000000000000023221504475242000174110ustar00rootroot00000000000000/* Internal testing support for rounding for decimal float. Copyright (C) 2006-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "decContext.h" #define DFP_INIT_ROUNDMODE(A) A = __decGetRound() extern void __dfp_set_round (int); extern int __dfp_get_round (void); extern enum rounding __decGetRound (void); libdfp-1.0.17/libdecnumber/decSingle.c000066400000000000000000000062701504475242000175440ustar00rootroot00000000000000/* decSingle module for the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decSingle.c -- decSingle operations module */ /* ------------------------------------------------------------------ */ #include "decContext.h" /* public includes */ #include "decSingle.h" /* public includes */ /* Constant mappings for shared code */ #define DECPMAX DECSINGLE_Pmax #define DECEMIN DECSINGLE_Emin #define DECEMAX DECSINGLE_Emax #define DECEMAXD DECSINGLE_EmaxD #define DECBYTES DECSINGLE_Bytes #define DECSTRING DECSINGLE_String #define DECECONL DECSINGLE_EconL #define DECBIAS DECSINGLE_Bias #define DECLETS DECSINGLE_Declets #define DECQTINY (-DECSINGLE_Bias) /* parameters of next-wider format */ #define DECWBYTES DECDOUBLE_Bytes #define DECWPMAX DECDOUBLE_Pmax #define DECWECONL DECDOUBLE_EconL #define DECWBIAS DECDOUBLE_Bias /* Type and function mappings for shared code */ #define decFloat decSingle /* Type name */ #define decFloatWider decDouble /* Type name */ /* Utility (binary results, extractors, etc.) */ #define decFloatFromBCD decSingleFromBCD #define decFloatFromPacked decSingleFromPacked #define decFloatFromPackedChecked decSingleFromPackedChecked #define decFloatFromString decSingleFromString #define decFloatFromWider decSingleFromWider #define decFloatGetCoefficient decSingleGetCoefficient #define decFloatGetExponent decSingleGetExponent #define decFloatSetCoefficient decSingleSetCoefficient #define decFloatSetExponent decSingleSetExponent #define decFloatShow decSingleShow #define decFloatToBCD decSingleToBCD #define decFloatToEngString decSingleToEngString #define decFloatToPacked decSingleToPacked #define decFloatToString decSingleToString #define decFloatToWider decSingleToWider #define decFloatZero decSingleZero /* Non-computational */ #define decFloatRadix decSingleRadix #define decFloatVersion decSingleVersion #include "decNumberLocal.h" /* local includes (need DECPMAX) */ #include "decCommon.c" /* non-basic decFloat routines */ /* [Do not include decBasic.c for decimal32] */ libdfp-1.0.17/libdecnumber/decSingle.h000066400000000000000000000113131504475242000175430ustar00rootroot00000000000000/* decSingle module header for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* decSingle.h -- Decimal 32-bit format module header */ /* ------------------------------------------------------------------ */ #if !defined(DECSINGLE) #define DECSINGLE #define DECSINGLENAME "decSingle" /* Short name */ #define DECSINGLETITLE "Decimal 32-bit datum" /* Verbose name */ #define DECSINGLEAUTHOR "Mike Cowlishaw" /* Who to blame */ /* parameters for decSingles */ #define DECSINGLE_Bytes 4 /* length */ #define DECSINGLE_Pmax 7 /* maximum precision (digits) */ #define DECSINGLE_Emin -95 /* minimum adjusted exponent */ #define DECSINGLE_Emax 96 /* maximum adjusted exponent */ #define DECSINGLE_EmaxD 3 /* maximum exponent digits */ #define DECSINGLE_Bias 101 /* bias for the exponent */ #define DECSINGLE_String 16 /* maximum string length, +1 */ #define DECSINGLE_EconL 6 /* exponent continuation length */ #define DECSINGLE_Declets 2 /* count of declets */ /* highest biased exponent (Elimit-1) */ #define DECSINGLE_Ehigh (DECSINGLE_Emax + DECSINGLE_Bias - (DECSINGLE_Pmax-1)) /* Required includes */ #include "decContext.h" #include "decQuad.h" #include "decDouble.h" /* The decSingle decimal 32-bit type, accessible by all sizes */ typedef union { uint8_t bytes[DECSINGLE_Bytes]; /* fields: 1, 5, 6, 20 bits */ uint16_t shorts[DECSINGLE_Bytes/2]; uint32_t words[DECSINGLE_Bytes/4]; } decSingle; /* ---------------------------------------------------------------- */ /* Routines -- implemented as decFloat routines in common files */ /* ---------------------------------------------------------------- */ #include "decSingleSymbols.h" /* Utilities (binary argument(s) or result, extractors, etc.) */ extern decSingle * decSingleFromBCD(decSingle *, int32_t, const uint8_t *, int32_t); extern decSingle * decSingleFromPacked(decSingle *, int32_t, const uint8_t *); extern decSingle * decSingleFromPackedChecked(decSingle *, int32_t, const uint8_t *); extern decSingle * decSingleFromString(decSingle *, const char *, decContext *); extern decSingle * decSingleFromWider(decSingle *, const decDouble *, decContext *); extern int32_t decSingleGetCoefficient(const decSingle *, uint8_t *); extern int32_t decSingleGetExponent(const decSingle *); extern decSingle * decSingleSetCoefficient(decSingle *, const uint8_t *, int32_t); extern decSingle * decSingleSetExponent(decSingle *, decContext *, int32_t); extern void decSingleShow(const decSingle *, const char *); extern int32_t decSingleToBCD(const decSingle *, int32_t *, uint8_t *); extern char * decSingleToEngString(const decSingle *, char *); extern int32_t decSingleToPacked(const decSingle *, int32_t *, uint8_t *); extern char * decSingleToString(const decSingle *, char *); extern decDouble * decSingleToWider(const decSingle *, decDouble *); extern decSingle * decSingleZero(decSingle *); /* (No Arithmetic routines for decSingle) */ /* Non-computational */ extern uint32_t decSingleRadix(const decSingle *); extern const char * decSingleVersion(void); /* decNumber conversions; these are implemented as macros so as not */ /* to force a dependency on decimal32 and decNumber in decSingle. */ /* decSingleFromNumber returns a decimal32 * to avoid warnings. */ #define decSingleToNumber(dq, dn) decimal32ToNumber((decimal32 *)(dq), dn) #define decSingleFromNumber(dq, dn, set) decimal32FromNumber((decimal32 *)(dq), dn, set) #endif libdfp-1.0.17/libdecnumber/decSingleSymbols.h000066400000000000000000000015721504475242000211220ustar00rootroot00000000000000#if !defined(DECSINGLESYMBOLS) #define DECSINGLESYMBOLS #ifdef IN_LIBGCC2 #define decSingleFromBCD __decSingleFromBCD #define decSingleFromPacked __decSingleFromPacked #define decSingleFromString __decSingleFromString #define decSingleFromWider __decSingleFromWider #define decSingleGetCoefficient __decSingleGetCoefficient #define decSingleGetExponent __decSingleGetExponent #define decSingleRadix __decSingleRadix #define decSingleSetCoefficient __decSingleSetCoefficient #define decSingleSetExponent __decSingleSetExponent #define decSingleShow __decSingleShow #define decSingleToBCD __decSingleToBCD #define decSingleToEngString __decSingleToEngString #define decSingleToPacked __decSingleToPacked #define decSingleToString __decSingleToString #define decSingleToWider __decSingleToWider #define decSingleVersion __decSingleVersion #define decSingleZero __decSingleZero #endif #endif libdfp-1.0.17/libdecnumber/dpd/000077500000000000000000000000001504475242000162455ustar00rootroot00000000000000libdfp-1.0.17/libdecnumber/dpd/decimal128.c000066400000000000000000000534641504475242000202560ustar00rootroot00000000000000/* Decimal 128-bit format module for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal 128-bit format module */ /* ------------------------------------------------------------------ */ /* This module comprises the routines for decimal128 format numbers. */ /* Conversions are supplied to and from decNumber and String. */ /* */ /* This is used when decNumber provides operations, either for all */ /* operations or as a proxy between decNumber and decSingle. */ /* */ /* Error handling is the same as decNumber (qv.). */ /* ------------------------------------------------------------------ */ #include /* [for memset/memcpy] */ #include /* [for printf] */ #include "dconfig.h" /* GCC definitions */ #define DECNUMDIGITS 34 /* make decNumbers with space for 34 */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ #include "decimal128.h" /* our primary include */ /* Utility routines and tables [in decimal64.c] */ extern const uInt COMBEXP[32], COMBMSD[32]; extern const uShort DPD2BIN[1024]; extern const uShort BIN2DPD[1000]; /* [not used] */ extern const uByte BIN2CHAR[4001]; extern void decDigitsFromDPD(decNumber *, const uInt *, Int); extern void decDigitsToDPD(const decNumber *, uInt *, Int); #if DECTRACE || DECCHECK void decimal128Show(const decimal128 *); /* for debug */ extern void decNumberShow(const decNumber *); /* .. */ #endif /* Useful macro */ /* Clear a structure (e.g., a decNumber) */ #define DEC_clear(d) memset(d, 0, sizeof(*d)) /* ------------------------------------------------------------------ */ /* decimal128FromNumber -- convert decNumber to decimal128 */ /* */ /* ds is the target decimal128 */ /* dn is the source number (assumed valid) */ /* set is the context, used only for reporting errors */ /* */ /* The set argument is used only for status reporting and for the */ /* rounding mode (used if the coefficient is more than DECIMAL128_Pmax*/ /* digits or an overflow is detected). If the exponent is out of the */ /* valid range then Overflow or Underflow will be raised. */ /* After Underflow a subnormal result is possible. */ /* */ /* DEC_Clamped is set if the number has to be 'folded down' to fit, */ /* by reducing its exponent and multiplying the coefficient by a */ /* power of ten, or if the exponent on a zero had to be clamped. */ /* ------------------------------------------------------------------ */ decimal128 * decimal128FromNumber(decimal128 *d128, const decNumber *dn, decContext *set) { uInt status=0; /* status accumulator */ Int ae; /* adjusted exponent */ decNumber dw; /* work */ decContext dc; /* .. */ uInt comb, exp; /* .. */ uInt uiwork; /* for macros */ uInt targar[4]={0,0,0,0}; /* target 128-bit */ #define targhi targar[3] /* name the word with the sign */ #define targmh targar[2] /* name the words */ #define targml targar[1] /* .. */ #define targlo targar[0] /* .. */ /* If the number has too many digits, or the exponent could be */ /* out of range then reduce the number under the appropriate */ /* constraints. This could push the number to Infinity or zero, */ /* so this check and rounding must be done before generating the */ /* decimal128] */ ae=dn->exponent+dn->digits-1; /* [0 if special] */ if (dn->digits>DECIMAL128_Pmax /* too many digits */ || ae>DECIMAL128_Emax /* likely overflow */ || aeround; /* use supplied rounding */ decNumberPlus(&dw, dn, &dc); /* (round and check) */ /* [this changes -0 to 0, so enforce the sign...] */ dw.bits|=dn->bits&DECNEG; status=dc.status; /* save status */ dn=&dw; /* use the work number */ } /* maybe out of range */ if (dn->bits&DECSPECIAL) { /* a special value */ if (dn->bits&DECINF) targhi=DECIMAL_Inf<<24; else { /* sNaN or qNaN */ if ((*dn->lsu!=0 || dn->digits>1) /* non-zero coefficient */ && (dn->digitsbits&DECNAN) targhi|=DECIMAL_NaN<<24; else targhi|=DECIMAL_sNaN<<24; } /* a NaN */ } /* special */ else { /* is finite */ if (decNumberIsZero(dn)) { /* is a zero */ /* set and clamp exponent */ if (dn->exponent<-DECIMAL128_Bias) { exp=0; /* low clamp */ status|=DEC_Clamped; } else { exp=dn->exponent+DECIMAL128_Bias; /* bias exponent */ if (exp>DECIMAL128_Ehigh) { /* top clamp */ exp=DECIMAL128_Ehigh; status|=DEC_Clamped; } } comb=(exp>>9) & 0x18; /* msd=0, exp top 2 bits .. */ } else { /* non-zero finite number */ uInt msd; /* work */ Int pad=0; /* coefficient pad digits */ /* the dn is known to fit, but it may need to be padded */ exp=(uInt)(dn->exponent+DECIMAL128_Bias); /* bias exponent */ if (exp>DECIMAL128_Ehigh) { /* fold-down case */ pad=exp-DECIMAL128_Ehigh; exp=DECIMAL128_Ehigh; /* [to maximum] */ status|=DEC_Clamped; } /* [fastpath for common case is not a win, here] */ decDigitsToDPD(dn, targar, pad); /* save and clear the top digit */ msd=targhi>>14; targhi&=0x00003fff; /* create the combination field */ if (msd>=8) comb=0x18 | ((exp>>11) & 0x06) | (msd & 0x01); else comb=((exp>>9) & 0x18) | msd; } targhi|=comb<<26; /* add combination field .. */ targhi|=(exp&0xfff)<<14; /* .. and exponent continuation */ } /* finite */ if (dn->bits&DECNEG) targhi|=0x80000000; /* add sign bit */ /* now write to storage; this is endian */ if (DECLITEND) { /* lo -> hi */ UBFROMUI(d128->bytes, targlo); UBFROMUI(d128->bytes+4, targml); UBFROMUI(d128->bytes+8, targmh); UBFROMUI(d128->bytes+12, targhi); } else { /* hi -> lo */ UBFROMUI(d128->bytes, targhi); UBFROMUI(d128->bytes+4, targmh); UBFROMUI(d128->bytes+8, targml); UBFROMUI(d128->bytes+12, targlo); } if (status!=0) decContextSetStatus(set, status); /* pass on status */ /* decimal128Show(d128); */ return d128; } /* decimal128FromNumber */ /* ------------------------------------------------------------------ */ /* decimal128ToNumber -- convert decimal128 to decNumber */ /* d128 is the source decimal128 */ /* dn is the target number, with appropriate space */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decNumber * decimal128ToNumber(const decimal128 *d128, decNumber *dn) { uInt msd; /* coefficient MSD */ uInt exp; /* exponent top two bits */ uInt comb; /* combination field */ Int need; /* work */ uInt uiwork; /* for macros */ uInt sourar[4]; /* source 128-bit */ #define sourhi sourar[3] /* name the word with the sign */ #define sourmh sourar[2] /* and the mid-high word */ #define sourml sourar[1] /* and the mod-low word */ #define sourlo sourar[0] /* and the lowest word */ /* load source from storage; this is endian */ if (DECLITEND) { sourlo=UBTOUI(d128->bytes ); /* directly load the low int */ sourml=UBTOUI(d128->bytes+4 ); /* then the mid-low */ sourmh=UBTOUI(d128->bytes+8 ); /* then the mid-high */ sourhi=UBTOUI(d128->bytes+12); /* then the high int */ } else { sourhi=UBTOUI(d128->bytes ); /* directly load the high int */ sourmh=UBTOUI(d128->bytes+4 ); /* then the mid-high */ sourml=UBTOUI(d128->bytes+8 ); /* then the mid-low */ sourlo=UBTOUI(d128->bytes+12); /* then the low int */ } comb=(sourhi>>26)&0x1f; /* combination field */ decNumberZero(dn); /* clean number */ if (sourhi&0x80000000) dn->bits=DECNEG; /* set sign if negative */ msd=COMBMSD[comb]; /* decode the combination field */ exp=COMBEXP[comb]; /* .. */ if (exp==3) { /* is a special */ if (msd==0) { dn->bits|=DECINF; return dn; /* no coefficient needed */ } else if (sourhi&0x02000000) dn->bits|=DECSNAN; else dn->bits|=DECNAN; msd=0; /* no top digit */ } else { /* is a finite number */ dn->exponent=(exp<<12)+((sourhi>>14)&0xfff)-DECIMAL128_Bias; /* unbiased */ } /* get the coefficient */ sourhi&=0x00003fff; /* clean coefficient continuation */ if (msd) { /* non-zero msd */ sourhi|=msd<<14; /* prefix to coefficient */ need=12; /* process 12 declets */ } else { /* msd=0 */ if (sourhi) need=11; /* declets to process */ else if (sourmh) need=10; else if (sourml) need=7; else if (sourlo) need=4; else return dn; /* easy: coefficient is 0 */ } /*msd=0 */ decDigitsFromDPD(dn, sourar, need); /* process declets */ /* decNumberShow(dn); */ return dn; } /* decimal128ToNumber */ /* ------------------------------------------------------------------ */ /* to-scientific-string -- conversion to numeric string */ /* to-engineering-string -- conversion to numeric string */ /* */ /* decimal128ToString(d128, string); */ /* decimal128ToEngString(d128, string); */ /* */ /* d128 is the decimal128 format number to convert */ /* string is the string where the result will be laid out */ /* */ /* string must be at least 24 characters */ /* */ /* No error is possible, and no status can be set. */ /* ------------------------------------------------------------------ */ char * decimal128ToEngString(const decimal128 *d128, char *string){ decNumber dn; /* work */ decimal128ToNumber(d128, &dn); decNumberToEngString(&dn, string); return string; } /* decimal128ToEngString */ char * decimal128ToString(const decimal128 *d128, char *string){ uInt msd; /* coefficient MSD */ Int exp; /* exponent top two bits or full */ uInt comb; /* combination field */ char *cstart; /* coefficient start */ char *c; /* output pointer in string */ const uByte *u; /* work */ char *s, *t; /* .. (source, target) */ Int dpd; /* .. */ Int pre, e; /* .. */ uInt uiwork; /* for macros */ uInt sourar[4]; /* source 128-bit */ #define sourhi sourar[3] /* name the word with the sign */ #define sourmh sourar[2] /* and the mid-high word */ #define sourml sourar[1] /* and the mod-low word */ #define sourlo sourar[0] /* and the lowest word */ /* load source from storage; this is endian */ if (DECLITEND) { sourlo=UBTOUI(d128->bytes ); /* directly load the low int */ sourml=UBTOUI(d128->bytes+4 ); /* then the mid-low */ sourmh=UBTOUI(d128->bytes+8 ); /* then the mid-high */ sourhi=UBTOUI(d128->bytes+12); /* then the high int */ } else { sourhi=UBTOUI(d128->bytes ); /* directly load the high int */ sourmh=UBTOUI(d128->bytes+4 ); /* then the mid-high */ sourml=UBTOUI(d128->bytes+8 ); /* then the mid-low */ sourlo=UBTOUI(d128->bytes+12); /* then the low int */ } c=string; /* where result will go */ if (((Int)sourhi)<0) *c++='-'; /* handle sign */ comb=(sourhi>>26)&0x1f; /* combination field */ msd=COMBMSD[comb]; /* decode the combination field */ exp=COMBEXP[comb]; /* .. */ if (exp==3) { if (msd==0) { /* infinity */ strcpy(c, "Inf"); strcpy(c+3, "inity"); return string; /* easy */ } if (sourhi&0x02000000) *c++='s'; /* sNaN */ strcpy(c, "NaN"); /* complete word */ c+=3; /* step past */ if (sourlo==0 && sourml==0 && sourmh==0 && (sourhi&0x0003ffff)==0) return string; /* zero payload */ /* otherwise drop through to add integer; set correct exp */ exp=0; msd=0; /* setup for following code */ } else exp=(exp<<12)+((sourhi>>14)&0xfff)-DECIMAL128_Bias; /* unbiased */ /* convert 34 digits of significand to characters */ cstart=c; /* save start of coefficient */ if (msd) *c++='0'+(char)msd; /* non-zero most significant digit */ /* Now decode the declets. After extracting each one, it is */ /* decoded to binary and then to a 4-char sequence by table lookup; */ /* the 4-chars are a 1-char length (significant digits, except 000 */ /* has length 0). This allows us to left-align the first declet */ /* with non-zero content, then remaining ones are full 3-char */ /* length. We use fixed-length memcpys because variable-length */ /* causes a subroutine call in GCC. (These are length 4 for speed */ /* and are safe because the array has an extra terminator byte.) */ #define dpd2char u=&BIN2CHAR[DPD2BIN[dpd]*4]; \ if (c!=cstart) {memcpy(c, u+1, 4); c+=3;} \ else if (*u) {memcpy(c, u+4-*u, 4); c+=*u;} dpd=(sourhi>>4)&0x3ff; /* declet 1 */ dpd2char; dpd=((sourhi&0xf)<<6) | (sourmh>>26); /* declet 2 */ dpd2char; dpd=(sourmh>>16)&0x3ff; /* declet 3 */ dpd2char; dpd=(sourmh>>6)&0x3ff; /* declet 4 */ dpd2char; dpd=((sourmh&0x3f)<<4) | (sourml>>28); /* declet 5 */ dpd2char; dpd=(sourml>>18)&0x3ff; /* declet 6 */ dpd2char; dpd=(sourml>>8)&0x3ff; /* declet 7 */ dpd2char; dpd=((sourml&0xff)<<2) | (sourlo>>30); /* declet 8 */ dpd2char; dpd=(sourlo>>20)&0x3ff; /* declet 9 */ dpd2char; dpd=(sourlo>>10)&0x3ff; /* declet 10 */ dpd2char; dpd=(sourlo)&0x3ff; /* declet 11 */ dpd2char; if (c==cstart) *c++='0'; /* all zeros -- make 0 */ if (exp==0) { /* integer or NaN case -- easy */ *c='\0'; /* terminate */ return string; } /* non-0 exponent */ e=0; /* assume no E */ pre=c-cstart+exp; /* [here, pre-exp is the digits count (==1 for zero)] */ if (exp>0 || pre<-5) { /* need exponential form */ e=pre-1; /* calculate E value */ pre=1; /* assume one digit before '.' */ } /* exponential form */ /* modify the coefficient, adding 0s, '.', and E+nn as needed */ s=c-1; /* source (LSD) */ if (pre>0) { /* ddd.ddd (plain), perhaps with E */ char *dotat=cstart+pre; if (dotat=dotat; s--, t--) *t=*s; /* open the gap; leave t at gap */ *t='.'; /* insert the dot */ c++; /* length increased by one */ } /* finally add the E-part, if needed; it will never be 0, and has */ /* a maximum length of 4 digits */ if (e!=0) { *c++='E'; /* starts with E */ *c++='+'; /* assume positive */ if (e<0) { *(c-1)='-'; /* oops, need '-' */ e=-e; /* uInt, please */ } if (e<1000) { /* 3 (or fewer) digits case */ u=&BIN2CHAR[e*4]; /* -> length byte */ memcpy(c, u+4-*u, 4); /* copy fixed 4 characters [is safe] */ c+=*u; /* bump pointer appropriately */ } else { /* 4-digits */ Int thou=((e>>3)*1049)>>17; /* e/1000 */ Int rem=e-(1000*thou); /* e%1000 */ *c++='0'+(char)thou; u=&BIN2CHAR[rem*4]; /* -> length byte */ memcpy(c, u+1, 4); /* copy fixed 3+1 characters [is safe] */ c+=3; /* bump pointer, always 3 digits */ } } *c='\0'; /* add terminator */ /*printf("res %s\n", string); */ return string; } /* pre>0 */ /* -5<=pre<=0: here for plain 0.ddd or 0.000ddd forms (can never have E) */ t=c+1-pre; *(t+1)='\0'; /* can add terminator now */ for (; s>=cstart; s--, t--) *t=*s; /* shift whole coefficient right */ c=cstart; *c++='0'; /* always starts with 0. */ *c++='.'; for (; pre<0; pre++) *c++='0'; /* add any 0's after '.' */ /*printf("res %s\n", string); */ return string; } /* decimal128ToString */ /* ------------------------------------------------------------------ */ /* to-number -- conversion from numeric string */ /* */ /* decimal128FromString(result, string, set); */ /* */ /* result is the decimal128 format number which gets the result of */ /* the conversion */ /* *string is the character string which should contain a valid */ /* number (which may be a special value) */ /* set is the context */ /* */ /* The context is supplied to this routine is used for error handling */ /* (setting of status and traps) and for the rounding mode, only. */ /* If an error occurs, the result will be a valid decimal128 NaN. */ /* ------------------------------------------------------------------ */ decimal128 * decimal128FromString(decimal128 *result, const char *string, decContext *set) { decContext dc; /* work */ decNumber dn; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL128); /* no traps, please */ dc.round=set->round; /* use supplied rounding */ decNumberFromString(&dn, string, &dc); /* will round if needed */ decimal128FromNumber(result, &dn, &dc); if (dc.status!=0) { /* something happened */ decContextSetStatus(set, dc.status); /* .. pass it on */ } return result; } /* decimal128FromString */ /* ------------------------------------------------------------------ */ /* decimal128IsCanonical -- test whether encoding is canonical */ /* d128 is the source decimal128 */ /* returns 1 if the encoding of d128 is canonical, 0 otherwise */ /* No error is possible. */ /* ------------------------------------------------------------------ */ uInt decimal128IsCanonical(const decimal128 *d128) { decNumber dn; /* work */ decimal128 canon; /* .. */ decContext dc; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL128); decimal128ToNumber(d128, &dn); decimal128FromNumber(&canon, &dn, &dc);/* canon will now be canonical */ return memcmp(d128, &canon, DECIMAL128_Bytes)==0; } /* decimal128IsCanonical */ /* ------------------------------------------------------------------ */ /* decimal128Canonical -- copy an encoding, ensuring it is canonical */ /* d128 is the source decimal128 */ /* result is the target (may be the same decimal128) */ /* returns result */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decimal128 * decimal128Canonical(decimal128 *result, const decimal128 *d128) { decNumber dn; /* work */ decContext dc; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL128); decimal128ToNumber(d128, &dn); decimal128FromNumber(result, &dn, &dc);/* result will now be canonical */ return result; } /* decimal128Canonical */ #if DECTRACE || DECCHECK /* Macros for accessing decimal128 fields. These assume the argument is a reference (pointer) to the decimal128 structure, and the decimal128 is in network byte order (big-endian) */ /* Get sign */ #define decimal128Sign(d) ((unsigned)(d)->bytes[0]>>7) /* Get combination field */ #define decimal128Comb(d) (((d)->bytes[0] & 0x7c)>>2) /* Get exponent continuation [does not remove bias] */ #define decimal128ExpCon(d) ((((d)->bytes[0] & 0x03)<<10) \ | ((unsigned)(d)->bytes[1]<<2) \ | ((unsigned)(d)->bytes[2]>>6)) /* Set sign [this assumes sign previously 0] */ #define decimal128SetSign(d, b) { \ (d)->bytes[0]|=((unsigned)(b)<<7);} /* Set exponent continuation [does not apply bias] */ /* This assumes range has been checked and exponent previously 0; */ /* type of exponent must be unsigned */ #define decimal128SetExpCon(d, e) { \ (d)->bytes[0]|=(uByte)((e)>>10); \ (d)->bytes[1] =(uByte)(((e)&0x3fc)>>2); \ (d)->bytes[2]|=(uByte)(((e)&0x03)<<6);} /* ------------------------------------------------------------------ */ /* decimal128Show -- display a decimal128 in hexadecimal [debug aid] */ /* d128 -- the number to show */ /* ------------------------------------------------------------------ */ /* Also shows sign/cob/expconfields extracted */ void decimal128Show(const decimal128 *d128) { char buf[DECIMAL128_Bytes*2+1]; Int i, j=0; if (DECLITEND) { for (i=0; ibytes[15-i]); } printf(" D128> %s [S:%d Cb:%02x Ec:%02x] LittleEndian\n", buf, d128->bytes[15]>>7, (d128->bytes[15]>>2)&0x1f, ((d128->bytes[15]&0x3)<<10)|(d128->bytes[14]<<2)| (d128->bytes[13]>>6)); } else { for (i=0; ibytes[i]); } printf(" D128> %s [S:%d Cb:%02x Ec:%02x] BigEndian\n", buf, decimal128Sign(d128), decimal128Comb(d128), decimal128ExpCon(d128)); } } /* decimal128Show */ #endif libdfp-1.0.17/libdecnumber/dpd/decimal128.h000066400000000000000000000077261504475242000202630ustar00rootroot00000000000000/* Decimal 128-bit format module header for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal 128-bit format module header */ /* ------------------------------------------------------------------ */ #if !defined(DECIMAL128) #define DECIMAL128 #define DEC128NAME "decimal128" /* Short name */ #define DEC128FULLNAME "Decimal 128-bit Number" /* Verbose name */ #define DEC128AUTHOR "Mike Cowlishaw" /* Who to blame */ /* parameters for decimal128s */ #define DECIMAL128_Bytes 16 /* length */ #define DECIMAL128_Pmax 34 /* maximum precision (digits) */ #define DECIMAL128_Emax 6144 /* maximum adjusted exponent */ #define DECIMAL128_Emin -6143 /* minimum adjusted exponent */ #define DECIMAL128_Bias 6176 /* bias for the exponent */ #define DECIMAL128_String 43 /* maximum string length, +1 */ #define DECIMAL128_EconL 12 /* exp. continuation length */ /* highest biased exponent (Elimit-1) */ #define DECIMAL128_Ehigh (DECIMAL128_Emax+DECIMAL128_Bias-DECIMAL128_Pmax+1) /* check enough digits, if pre-defined */ #if defined(DECNUMDIGITS) #if (DECNUMDIGITS=34 for safe use #endif #endif #ifndef DECNUMDIGITS #define DECNUMDIGITS DECIMAL128_Pmax /* size if not already defined*/ #endif #ifndef DECNUMBER #include "decNumber.h" /* context and number library */ #endif /* Decimal 128-bit type, accessible by bytes */ typedef struct { uint8_t bytes[DECIMAL128_Bytes]; /* decimal128: 1, 5, 12, 110 bits*/ } decimal128; /* special values [top byte excluding sign bit; last two bits are */ /* don't-care for Infinity on input, last bit don't-care for NaN] */ #if !defined(DECIMAL_NaN) #define DECIMAL_NaN 0x7c /* 0 11111 00 NaN */ #define DECIMAL_sNaN 0x7e /* 0 11111 10 sNaN */ #define DECIMAL_Inf 0x78 /* 0 11110 00 Infinity */ #endif #include "decimal128Local.h" /* ---------------------------------------------------------------- */ /* Routines */ /* ---------------------------------------------------------------- */ #include "decimal128Symbols.h" #ifdef __cplusplus extern "C" { #endif /* String conversions */ decimal128 * decimal128FromString(decimal128 *, const char *, decContext *); char * decimal128ToString(const decimal128 *, char *); char * decimal128ToEngString(const decimal128 *, char *); /* decNumber conversions */ decimal128 * decimal128FromNumber(decimal128 *, const decNumber *, decContext *); decNumber * decimal128ToNumber(const decimal128 *, decNumber *); /* Format-dependent utilities */ uint32_t decimal128IsCanonical(const decimal128 *); decimal128 * decimal128Canonical(decimal128 *, const decimal128 *); #ifdef __cplusplus } #endif #endif libdfp-1.0.17/libdecnumber/dpd/decimal128Local.h000066400000000000000000000030421504475242000212210ustar00rootroot00000000000000/* Local definitions for use with the decNumber C Library. Copyright (C) 2007-2019 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #if !defined(DECIMAL128LOCAL) /* The compiler needs sign manipulation functions for decimal128 which are not part of the decNumber package. */ /* Set sign; this assumes the sign was previously zero. */ #define decimal128SetSign(d,b) \ { (d)->bytes[WORDS_BIGENDIAN ? 0 : 15] |= ((unsigned) (b) << 7); } /* Clear sign. */ #define decimal128ClearSign(d) \ { (d)->bytes[WORDS_BIGENDIAN ? 0 : 15] &= ~0x80; } /* Flip sign. */ #define decimal128FlipSign(d) \ { (d)->bytes[WORDS_BIGENDIAN ? 0 : 15] ^= 0x80; } #endif libdfp-1.0.17/libdecnumber/dpd/decimal128Symbols.h000066400000000000000000000016121504475242000216200ustar00rootroot00000000000000#if !defined(DECIMAL128SYMBOLS) #define DECIMAL128SYMBOLS #ifdef IN_LIBGCC2 #define decDigitsFromDPD __decDigitsFromDPD #define decDigitsToDPD __decDigitsToDPD #define decimal128Canonical __decimal128Canonical #define decimal128FromNumber __decimal128FromNumber #define decimal128FromString __decimal128FromString #define decimal128IsCanonical __decimal128IsCanonical #define decimal128ToEngString __decimal128ToEngString #define decimal128ToNumber __decimal128ToNumber #define decimal128ToString __decimal128ToString #define COMBEXP __decnnCOMBEXP #define COMBMSD __decnnCOMBMSD /* DPD2BIN and BIN2DPD are used in support for decimal32/decimal64/decimal128 and also in support for decSingle/decDouble/decQuad. Rename them in case both types of support are used in the same executable. */ #undef DPD2BIN #define DPD2BIN __decnnDPD2BIN #undef BIN2DPD #define BIN2DPD __decnnBIN2DPD #endif #endif libdfp-1.0.17/libdecnumber/dpd/decimal32.c000066400000000000000000000454461504475242000201710ustar00rootroot00000000000000/* Decimal 32-bit format module for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal 32-bit format module */ /* ------------------------------------------------------------------ */ /* This module comprises the routines for decimal32 format numbers. */ /* Conversions are supplied to and from decNumber and String. */ /* */ /* This is used when decNumber provides operations, either for all */ /* operations or as a proxy between decNumber and decSingle. */ /* */ /* Error handling is the same as decNumber (qv.). */ /* ------------------------------------------------------------------ */ #include /* [for memset/memcpy] */ #include /* [for printf] */ #include "dconfig.h" /* GCC definitions */ #define DECNUMDIGITS 7 /* make decNumbers with space for 7 */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ #include "decimal32.h" /* our primary include */ /* Utility tables and routines [in decimal64.c] */ extern const uInt COMBEXP[32], COMBMSD[32]; extern const uShort DPD2BIN[1024]; extern const uShort BIN2DPD[1000]; extern const uByte BIN2CHAR[4001]; extern void decDigitsToDPD(const decNumber *, uInt *, Int); extern void decDigitsFromDPD(decNumber *, const uInt *, Int); #if DECTRACE || DECCHECK void decimal32Show(const decimal32 *); /* for debug */ extern void decNumberShow(const decNumber *); /* .. */ #endif /* Useful macro */ /* Clear a structure (e.g., a decNumber) */ #define DEC_clear(d) memset(d, 0, sizeof(*d)) /* ------------------------------------------------------------------ */ /* decimal32FromNumber -- convert decNumber to decimal32 */ /* */ /* ds is the target decimal32 */ /* dn is the source number (assumed valid) */ /* set is the context, used only for reporting errors */ /* */ /* The set argument is used only for status reporting and for the */ /* rounding mode (used if the coefficient is more than DECIMAL32_Pmax */ /* digits or an overflow is detected). If the exponent is out of the */ /* valid range then Overflow or Underflow will be raised. */ /* After Underflow a subnormal result is possible. */ /* */ /* DEC_Clamped is set if the number has to be 'folded down' to fit, */ /* by reducing its exponent and multiplying the coefficient by a */ /* power of ten, or if the exponent on a zero had to be clamped. */ /* ------------------------------------------------------------------ */ decimal32 * decimal32FromNumber(decimal32 *d32, const decNumber *dn, decContext *set) { uInt status=0; /* status accumulator */ Int ae; /* adjusted exponent */ decNumber dw; /* work */ decContext dc; /* .. */ uInt comb, exp; /* .. */ uInt uiwork; /* for macros */ uInt targ=0; /* target 32-bit */ /* If the number has too many digits, or the exponent could be */ /* out of range then reduce the number under the appropriate */ /* constraints. This could push the number to Infinity or zero, */ /* so this check and rounding must be done before generating the */ /* decimal32] */ ae=dn->exponent+dn->digits-1; /* [0 if special] */ if (dn->digits>DECIMAL32_Pmax /* too many digits */ || ae>DECIMAL32_Emax /* likely overflow */ || aeround; /* use supplied rounding */ decNumberPlus(&dw, dn, &dc); /* (round and check) */ /* [this changes -0 to 0, so enforce the sign...] */ dw.bits|=dn->bits&DECNEG; status=dc.status; /* save status */ dn=&dw; /* use the work number */ } /* maybe out of range */ if (dn->bits&DECSPECIAL) { /* a special value */ if (dn->bits&DECINF) targ=DECIMAL_Inf<<24; else { /* sNaN or qNaN */ if ((*dn->lsu!=0 || dn->digits>1) /* non-zero coefficient */ && (dn->digitsbits&DECNAN) targ|=DECIMAL_NaN<<24; else targ|=DECIMAL_sNaN<<24; } /* a NaN */ } /* special */ else { /* is finite */ if (decNumberIsZero(dn)) { /* is a zero */ /* set and clamp exponent */ if (dn->exponent<-DECIMAL32_Bias) { exp=0; /* low clamp */ status|=DEC_Clamped; } else { exp=dn->exponent+DECIMAL32_Bias; /* bias exponent */ if (exp>DECIMAL32_Ehigh) { /* top clamp */ exp=DECIMAL32_Ehigh; status|=DEC_Clamped; } } comb=(exp>>3) & 0x18; /* msd=0, exp top 2 bits .. */ } else { /* non-zero finite number */ uInt msd; /* work */ Int pad=0; /* coefficient pad digits */ /* the dn is known to fit, but it may need to be padded */ exp=(uInt)(dn->exponent+DECIMAL32_Bias); /* bias exponent */ if (exp>DECIMAL32_Ehigh) { /* fold-down case */ pad=exp-DECIMAL32_Ehigh; exp=DECIMAL32_Ehigh; /* [to maximum] */ status|=DEC_Clamped; } /* fastpath common case */ if (DECDPUN==3 && pad==0) { targ=BIN2DPD[dn->lsu[0]]; if (dn->digits>3) targ|=(uInt)(BIN2DPD[dn->lsu[1]])<<10; msd=(dn->digits==7 ? dn->lsu[2] : 0); } else { /* general case */ decDigitsToDPD(dn, &targ, pad); /* save and clear the top digit */ msd=targ>>20; targ&=0x000fffff; } /* create the combination field */ if (msd>=8) comb=0x18 | ((exp>>5) & 0x06) | (msd & 0x01); else comb=((exp>>3) & 0x18) | msd; } targ|=comb<<26; /* add combination field .. */ targ|=(exp&0x3f)<<20; /* .. and exponent continuation */ } /* finite */ if (dn->bits&DECNEG) targ|=0x80000000; /* add sign bit */ /* now write to storage; this is endian */ UBFROMUI(d32->bytes, targ); /* directly store the int */ if (status!=0) decContextSetStatus(set, status); /* pass on status */ /* decimal32Show(d32); */ return d32; } /* decimal32FromNumber */ /* ------------------------------------------------------------------ */ /* decimal32ToNumber -- convert decimal32 to decNumber */ /* d32 is the source decimal32 */ /* dn is the target number, with appropriate space */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decNumber * decimal32ToNumber(const decimal32 *d32, decNumber *dn) { uInt msd; /* coefficient MSD */ uInt exp; /* exponent top two bits */ uInt comb; /* combination field */ uInt sour; /* source 32-bit */ uInt uiwork; /* for macros */ /* load source from storage; this is endian */ sour=UBTOUI(d32->bytes); /* directly load the int */ comb=(sour>>26)&0x1f; /* combination field */ decNumberZero(dn); /* clean number */ if (sour&0x80000000) dn->bits=DECNEG; /* set sign if negative */ msd=COMBMSD[comb]; /* decode the combination field */ exp=COMBEXP[comb]; /* .. */ if (exp==3) { /* is a special */ if (msd==0) { dn->bits|=DECINF; return dn; /* no coefficient needed */ } else if (sour&0x02000000) dn->bits|=DECSNAN; else dn->bits|=DECNAN; msd=0; /* no top digit */ } else { /* is a finite number */ dn->exponent=(exp<<6)+((sour>>20)&0x3f)-DECIMAL32_Bias; /* unbiased */ } /* get the coefficient */ sour&=0x000fffff; /* clean coefficient continuation */ if (msd) { /* non-zero msd */ sour|=msd<<20; /* prefix to coefficient */ decDigitsFromDPD(dn, &sour, 3); /* process 3 declets */ return dn; } /* msd=0 */ if (!sour) return dn; /* easy: coefficient is 0 */ if (sour&0x000ffc00) /* need 2 declets? */ decDigitsFromDPD(dn, &sour, 2); /* process 2 declets */ else decDigitsFromDPD(dn, &sour, 1); /* process 1 declet */ return dn; } /* decimal32ToNumber */ /* ------------------------------------------------------------------ */ /* to-scientific-string -- conversion to numeric string */ /* to-engineering-string -- conversion to numeric string */ /* */ /* decimal32ToString(d32, string); */ /* decimal32ToEngString(d32, string); */ /* */ /* d32 is the decimal32 format number to convert */ /* string is the string where the result will be laid out */ /* */ /* string must be at least 24 characters */ /* */ /* No error is possible, and no status can be set. */ /* ------------------------------------------------------------------ */ char * decimal32ToEngString(const decimal32 *d32, char *string){ decNumber dn; /* work */ decimal32ToNumber(d32, &dn); decNumberToEngString(&dn, string); return string; } /* decimal32ToEngString */ char * decimal32ToString(const decimal32 *d32, char *string){ uInt msd; /* coefficient MSD */ Int exp; /* exponent top two bits or full */ uInt comb; /* combination field */ char *cstart; /* coefficient start */ char *c; /* output pointer in string */ const uByte *u; /* work */ char *s, *t; /* .. (source, target) */ Int dpd; /* .. */ Int pre, e; /* .. */ uInt uiwork; /* for macros */ uInt sour; /* source 32-bit */ /* load source from storage; this is endian */ sour=UBTOUI(d32->bytes); /* directly load the int */ c=string; /* where result will go */ if (((Int)sour)<0) *c++='-'; /* handle sign */ comb=(sour>>26)&0x1f; /* combination field */ msd=COMBMSD[comb]; /* decode the combination field */ exp=COMBEXP[comb]; /* .. */ if (exp==3) { if (msd==0) { /* infinity */ strcpy(c, "Inf"); strcpy(c+3, "inity"); return string; /* easy */ } if (sour&0x02000000) *c++='s'; /* sNaN */ strcpy(c, "NaN"); /* complete word */ c+=3; /* step past */ if ((sour&0x000fffff)==0) return string; /* zero payload */ /* otherwise drop through to add integer; set correct exp */ exp=0; msd=0; /* setup for following code */ } else exp=(exp<<6)+((sour>>20)&0x3f)-DECIMAL32_Bias; /* unbiased */ /* convert 7 digits of significand to characters */ cstart=c; /* save start of coefficient */ if (msd) *c++='0'+(char)msd; /* non-zero most significant digit */ /* Now decode the declets. After extracting each one, it is */ /* decoded to binary and then to a 4-char sequence by table lookup; */ /* the 4-chars are a 1-char length (significant digits, except 000 */ /* has length 0). This allows us to left-align the first declet */ /* with non-zero content, then remaining ones are full 3-char */ /* length. We use fixed-length memcpys because variable-length */ /* causes a subroutine call in GCC. (These are length 4 for speed */ /* and are safe because the array has an extra terminator byte.) */ #define dpd2char u=&BIN2CHAR[DPD2BIN[dpd]*4]; \ if (c!=cstart) {memcpy(c, u+1, 4); c+=3;} \ else if (*u) {memcpy(c, u+4-*u, 4); c+=*u;} dpd=(sour>>10)&0x3ff; /* declet 1 */ dpd2char; dpd=(sour)&0x3ff; /* declet 2 */ dpd2char; if (c==cstart) *c++='0'; /* all zeros -- make 0 */ if (exp==0) { /* integer or NaN case -- easy */ *c='\0'; /* terminate */ return string; } /* non-0 exponent */ e=0; /* assume no E */ pre=c-cstart+exp; /* [here, pre-exp is the digits count (==1 for zero)] */ if (exp>0 || pre<-5) { /* need exponential form */ e=pre-1; /* calculate E value */ pre=1; /* assume one digit before '.' */ } /* exponential form */ /* modify the coefficient, adding 0s, '.', and E+nn as needed */ s=c-1; /* source (LSD) */ if (pre>0) { /* ddd.ddd (plain), perhaps with E */ char *dotat=cstart+pre; if (dotat=dotat; s--, t--) *t=*s; /* open the gap; leave t at gap */ *t='.'; /* insert the dot */ c++; /* length increased by one */ } /* finally add the E-part, if needed; it will never be 0, and has */ /* a maximum length of 3 digits (E-101 case) */ if (e!=0) { *c++='E'; /* starts with E */ *c++='+'; /* assume positive */ if (e<0) { *(c-1)='-'; /* oops, need '-' */ e=-e; /* uInt, please */ } u=&BIN2CHAR[e*4]; /* -> length byte */ memcpy(c, u+4-*u, 4); /* copy fixed 4 characters [is safe] */ c+=*u; /* bump pointer appropriately */ } *c='\0'; /* add terminator */ /*printf("res %s\n", string); */ return string; } /* pre>0 */ /* -5<=pre<=0: here for plain 0.ddd or 0.000ddd forms (can never have E) */ t=c+1-pre; *(t+1)='\0'; /* can add terminator now */ for (; s>=cstart; s--, t--) *t=*s; /* shift whole coefficient right */ c=cstart; *c++='0'; /* always starts with 0. */ *c++='.'; for (; pre<0; pre++) *c++='0'; /* add any 0's after '.' */ /*printf("res %s\n", string); */ return string; } /* decimal32ToString */ /* ------------------------------------------------------------------ */ /* to-number -- conversion from numeric string */ /* */ /* decimal32FromString(result, string, set); */ /* */ /* result is the decimal32 format number which gets the result of */ /* the conversion */ /* *string is the character string which should contain a valid */ /* number (which may be a special value) */ /* set is the context */ /* */ /* The context is supplied to this routine is used for error handling */ /* (setting of status and traps) and for the rounding mode, only. */ /* If an error occurs, the result will be a valid decimal32 NaN. */ /* ------------------------------------------------------------------ */ decimal32 * decimal32FromString(decimal32 *result, const char *string, decContext *set) { decContext dc; /* work */ decNumber dn; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL32); /* no traps, please */ dc.round=set->round; /* use supplied rounding */ decNumberFromString(&dn, string, &dc); /* will round if needed */ decimal32FromNumber(result, &dn, &dc); if (dc.status!=0) { /* something happened */ decContextSetStatus(set, dc.status); /* .. pass it on */ } return result; } /* decimal32FromString */ /* ------------------------------------------------------------------ */ /* decimal32IsCanonical -- test whether encoding is canonical */ /* d32 is the source decimal32 */ /* returns 1 if the encoding of d32 is canonical, 0 otherwise */ /* No error is possible. */ /* ------------------------------------------------------------------ */ uInt decimal32IsCanonical(const decimal32 *d32) { decNumber dn; /* work */ decimal32 canon; /* .. */ decContext dc; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL32); decimal32ToNumber(d32, &dn); decimal32FromNumber(&canon, &dn, &dc);/* canon will now be canonical */ return memcmp(d32, &canon, DECIMAL32_Bytes)==0; } /* decimal32IsCanonical */ /* ------------------------------------------------------------------ */ /* decimal32Canonical -- copy an encoding, ensuring it is canonical */ /* d32 is the source decimal32 */ /* result is the target (may be the same decimal32) */ /* returns result */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decimal32 * decimal32Canonical(decimal32 *result, const decimal32 *d32) { decNumber dn; /* work */ decContext dc; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL32); decimal32ToNumber(d32, &dn); decimal32FromNumber(result, &dn, &dc);/* result will now be canonical */ return result; } /* decimal32Canonical */ #if DECTRACE || DECCHECK /* Macros for accessing decimal32 fields. These assume the argument is a reference (pointer) to the decimal32 structure, and the decimal32 is in network byte order (big-endian) */ /* Get sign */ #define decimal32Sign(d) ((unsigned)(d)->bytes[0]>>7) /* Get combination field */ #define decimal32Comb(d) (((d)->bytes[0] & 0x7c)>>2) /* Get exponent continuation [does not remove bias] */ #define decimal32ExpCon(d) ((((d)->bytes[0] & 0x03)<<4) \ | ((unsigned)(d)->bytes[1]>>4)) /* Set sign [this assumes sign previously 0] */ #define decimal32SetSign(d, b) { \ (d)->bytes[0]|=((unsigned)(b)<<7);} /* Set exponent continuation [does not apply bias] */ /* This assumes range has been checked and exponent previously 0; */ /* type of exponent must be unsigned */ #define decimal32SetExpCon(d, e) { \ (d)->bytes[0]|=(uByte)((e)>>4); \ (d)->bytes[1]|=(uByte)(((e)&0x0F)<<4);} /* ------------------------------------------------------------------ */ /* decimal32Show -- display a decimal32 in hexadecimal [debug aid] */ /* d32 -- the number to show */ /* ------------------------------------------------------------------ */ /* Also shows sign/cob/expconfields extracted - valid bigendian only */ void decimal32Show(const decimal32 *d32) { char buf[DECIMAL32_Bytes*2+1]; Int i, j=0; if (DECLITEND) { for (i=0; ibytes[3-i]); } printf(" D32> %s [S:%d Cb:%02x Ec:%02x] LittleEndian\n", buf, d32->bytes[3]>>7, (d32->bytes[3]>>2)&0x1f, ((d32->bytes[3]&0x3)<<4)| (d32->bytes[2]>>4)); } else { for (i=0; ibytes[i]); } printf(" D32> %s [S:%d Cb:%02x Ec:%02x] BigEndian\n", buf, decimal32Sign(d32), decimal32Comb(d32), decimal32ExpCon(d32)); } } /* decimal32Show */ #endif libdfp-1.0.17/libdecnumber/dpd/decimal32.h000066400000000000000000000075671504475242000202000ustar00rootroot00000000000000/* Decimal 32-bit format module header for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal 32-bit format module header */ /* ------------------------------------------------------------------ */ #if !defined(DECIMAL32) #define DECIMAL32 #define DEC32NAME "decimal32" /* Short name */ #define DEC32FULLNAME "Decimal 32-bit Number" /* Verbose name */ #define DEC32AUTHOR "Mike Cowlishaw" /* Who to blame */ /* parameters for decimal32s */ #define DECIMAL32_Bytes 4 /* length */ #define DECIMAL32_Pmax 7 /* maximum precision (digits) */ #define DECIMAL32_Emax 96 /* maximum adjusted exponent */ #define DECIMAL32_Emin -95 /* minimum adjusted exponent */ #define DECIMAL32_Bias 101 /* bias for the exponent */ #define DECIMAL32_String 15 /* maximum string length, +1 */ #define DECIMAL32_EconL 6 /* exp. continuation length */ /* highest biased exponent (Elimit-1) */ #define DECIMAL32_Ehigh (DECIMAL32_Emax+DECIMAL32_Bias-DECIMAL32_Pmax+1) /* check enough digits, if pre-defined */ #if defined(DECNUMDIGITS) #if (DECNUMDIGITS=7 for safe use #endif #endif #ifndef DECNUMDIGITS #define DECNUMDIGITS DECIMAL32_Pmax /* size if not already defined*/ #endif #ifndef DECNUMBER #include "decNumber.h" /* context and number library */ #endif /* Decimal 32-bit type, accessible by bytes */ typedef struct { uint8_t bytes[DECIMAL32_Bytes]; /* decimal32: 1, 5, 6, 20 bits*/ } decimal32; /* special values [top byte excluding sign bit; last two bits are */ /* don't-care for Infinity on input, last bit don't-care for NaN] */ #if !defined(DECIMAL_NaN) #define DECIMAL_NaN 0x7c /* 0 11111 00 NaN */ #define DECIMAL_sNaN 0x7e /* 0 11111 10 sNaN */ #define DECIMAL_Inf 0x78 /* 0 11110 00 Infinity */ #endif /* ---------------------------------------------------------------- */ /* Routines */ /* ---------------------------------------------------------------- */ #include "decimal32Symbols.h" #ifdef __cplusplus extern "C" { #endif /* String conversions */ decimal32 * decimal32FromString(decimal32 *, const char *, decContext *); char * decimal32ToString(const decimal32 *, char *); char * decimal32ToEngString(const decimal32 *, char *); /* decNumber conversions */ decimal32 * decimal32FromNumber(decimal32 *, const decNumber *, decContext *); decNumber * decimal32ToNumber(const decimal32 *, decNumber *); /* Format-dependent utilities */ uint32_t decimal32IsCanonical(const decimal32 *); decimal32 * decimal32Canonical(decimal32 *, const decimal32 *); #ifdef __cplusplus } #endif #endif libdfp-1.0.17/libdecnumber/dpd/decimal32Symbols.h000066400000000000000000000015721504475242000215370ustar00rootroot00000000000000#if !defined(DECIMAL32SYMBOLS) #define DECIMAL32SYMBOLS #ifdef IN_LIBGCC2 #define decDigitsFromDPD __decDigitsFromDPD #define decDigitsToDPD __decDigitsToDPD #define decimal32Canonical __decimal32Canonical #define decimal32FromNumber __decimal32FromNumber #define decimal32FromString __decimal32FromString #define decimal32IsCanonical __decimal32IsCanonical #define decimal32ToEngString __decimal32ToEngString #define decimal32ToNumber __decimal32ToNumber #define decimal32ToString __decimal32ToString #define COMBEXP __decnnCOMBEXP #define COMBMSD __decnnCOMBMSD /* DPD2BIN and BIN2DPD are used in support for decimal32/decimal64/decimal128 and also in support for decSingle/decDouble/decQuad. Rename them in case both types of support are used in the same executable. */ #undef DPD2BIN #define DPD2BIN __decnnDPD2BIN #undef BIN2DPD #define BIN2DPD __decnnBIN2DPD #endif #endif libdfp-1.0.17/libdecnumber/dpd/decimal64.c000066400000000000000000001001251504475242000201600ustar00rootroot00000000000000/* Decimal 64-bit format module for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal 64-bit format module */ /* ------------------------------------------------------------------ */ /* This module comprises the routines for decimal64 format numbers. */ /* Conversions are supplied to and from decNumber and String. */ /* */ /* This is used when decNumber provides operations, either for all */ /* operations or as a proxy between decNumber and decSingle. */ /* */ /* Error handling is the same as decNumber (qv.). */ /* ------------------------------------------------------------------ */ #include /* [for memset/memcpy] */ #include /* [for printf] */ #include "dconfig.h" /* GCC definitions */ #define DECNUMDIGITS 16 /* make decNumbers with space for 16 */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ #include "decimal64.h" /* our primary include */ /* Utility routines and tables [in decimal64.c]; externs for C++ */ extern const uInt COMBEXP[32], COMBMSD[32]; extern const uShort DPD2BIN[1024]; extern const uShort BIN2DPD[1000]; extern const uByte BIN2CHAR[4001]; extern void decDigitsFromDPD(decNumber *, const uInt *, Int); extern void decDigitsToDPD(const decNumber *, uInt *, Int); #if DECTRACE || DECCHECK void decimal64Show(const decimal64 *); /* for debug */ extern void decNumberShow(const decNumber *); /* .. */ #endif /* Useful macro */ /* Clear a structure (e.g., a decNumber) */ #define DEC_clear(d) memset(d, 0, sizeof(*d)) /* define and include the tables to use for conversions */ #define DEC_BIN2CHAR 1 #define DEC_DPD2BIN 1 #define DEC_BIN2DPD 1 /* used for all sizes */ #include "decDPD.h" /* lookup tables */ /* ------------------------------------------------------------------ */ /* decimal64FromNumber -- convert decNumber to decimal64 */ /* */ /* ds is the target decimal64 */ /* dn is the source number (assumed valid) */ /* set is the context, used only for reporting errors */ /* */ /* The set argument is used only for status reporting and for the */ /* rounding mode (used if the coefficient is more than DECIMAL64_Pmax */ /* digits or an overflow is detected). If the exponent is out of the */ /* valid range then Overflow or Underflow will be raised. */ /* After Underflow a subnormal result is possible. */ /* */ /* DEC_Clamped is set if the number has to be 'folded down' to fit, */ /* by reducing its exponent and multiplying the coefficient by a */ /* power of ten, or if the exponent on a zero had to be clamped. */ /* ------------------------------------------------------------------ */ decimal64 * decimal64FromNumber(decimal64 *d64, const decNumber *dn, decContext *set) { uInt status=0; /* status accumulator */ Int ae; /* adjusted exponent */ decNumber dw; /* work */ decContext dc; /* .. */ uInt comb, exp; /* .. */ uInt uiwork; /* for macros */ uInt targar[2]={0, 0}; /* target 64-bit */ #define targhi targar[1] /* name the word with the sign */ #define targlo targar[0] /* and the other */ /* If the number has too many digits, or the exponent could be */ /* out of range then reduce the number under the appropriate */ /* constraints. This could push the number to Infinity or zero, */ /* so this check and rounding must be done before generating the */ /* decimal64] */ ae=dn->exponent+dn->digits-1; /* [0 if special] */ if (dn->digits>DECIMAL64_Pmax /* too many digits */ || ae>DECIMAL64_Emax /* likely overflow */ || aeround; /* use supplied rounding */ decNumberPlus(&dw, dn, &dc); /* (round and check) */ /* [this changes -0 to 0, so enforce the sign...] */ dw.bits|=dn->bits&DECNEG; status=dc.status; /* save status */ dn=&dw; /* use the work number */ } /* maybe out of range */ if (dn->bits&DECSPECIAL) { /* a special value */ if (dn->bits&DECINF) targhi=DECIMAL_Inf<<24; else { /* sNaN or qNaN */ if ((*dn->lsu!=0 || dn->digits>1) /* non-zero coefficient */ && (dn->digitsbits&DECNAN) targhi|=DECIMAL_NaN<<24; else targhi|=DECIMAL_sNaN<<24; } /* a NaN */ } /* special */ else { /* is finite */ if (decNumberIsZero(dn)) { /* is a zero */ /* set and clamp exponent */ if (dn->exponent<-DECIMAL64_Bias) { exp=0; /* low clamp */ status|=DEC_Clamped; } else { exp=dn->exponent+DECIMAL64_Bias; /* bias exponent */ if (exp>DECIMAL64_Ehigh) { /* top clamp */ exp=DECIMAL64_Ehigh; status|=DEC_Clamped; } } comb=(exp>>5) & 0x18; /* msd=0, exp top 2 bits .. */ } else { /* non-zero finite number */ uInt msd; /* work */ Int pad=0; /* coefficient pad digits */ /* the dn is known to fit, but it may need to be padded */ exp=(uInt)(dn->exponent+DECIMAL64_Bias); /* bias exponent */ if (exp>DECIMAL64_Ehigh) { /* fold-down case */ pad=exp-DECIMAL64_Ehigh; exp=DECIMAL64_Ehigh; /* [to maximum] */ status|=DEC_Clamped; } /* fastpath common case */ if (DECDPUN==3 && pad==0) { uInt dpd[6]={0,0,0,0,0,0}; uInt i; Int d=dn->digits; for (i=0; d>0; i++, d-=3) dpd[i]=BIN2DPD[dn->lsu[i]]; targlo =dpd[0]; targlo|=dpd[1]<<10; targlo|=dpd[2]<<20; if (dn->digits>6) { targlo|=dpd[3]<<30; targhi =dpd[3]>>2; targhi|=dpd[4]<<8; } msd=dpd[5]; /* [did not really need conversion] */ } else { /* general case */ decDigitsToDPD(dn, targar, pad); /* save and clear the top digit */ msd=targhi>>18; targhi&=0x0003ffff; } /* create the combination field */ if (msd>=8) comb=0x18 | ((exp>>7) & 0x06) | (msd & 0x01); else comb=((exp>>5) & 0x18) | msd; } targhi|=comb<<26; /* add combination field .. */ targhi|=(exp&0xff)<<18; /* .. and exponent continuation */ } /* finite */ if (dn->bits&DECNEG) targhi|=0x80000000; /* add sign bit */ /* now write to storage; this is now always endian */ if (DECLITEND) { /* lo int then hi */ UBFROMUI(d64->bytes, targar[0]); UBFROMUI(d64->bytes+4, targar[1]); } else { /* hi int then lo */ UBFROMUI(d64->bytes, targar[1]); UBFROMUI(d64->bytes+4, targar[0]); } if (status!=0) decContextSetStatus(set, status); /* pass on status */ /* decimal64Show(d64); */ return d64; } /* decimal64FromNumber */ /* ------------------------------------------------------------------ */ /* decimal64ToNumber -- convert decimal64 to decNumber */ /* d64 is the source decimal64 */ /* dn is the target number, with appropriate space */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decNumber * decimal64ToNumber(const decimal64 *d64, decNumber *dn) { uInt msd; /* coefficient MSD */ uInt exp; /* exponent top two bits */ uInt comb; /* combination field */ Int need; /* work */ uInt uiwork; /* for macros */ uInt sourar[2]; /* source 64-bit */ #define sourhi sourar[1] /* name the word with the sign */ #define sourlo sourar[0] /* and the lower word */ /* load source from storage; this is endian */ if (DECLITEND) { sourlo=UBTOUI(d64->bytes ); /* directly load the low int */ sourhi=UBTOUI(d64->bytes+4); /* then the high int */ } else { sourhi=UBTOUI(d64->bytes ); /* directly load the high int */ sourlo=UBTOUI(d64->bytes+4); /* then the low int */ } comb=(sourhi>>26)&0x1f; /* combination field */ decNumberZero(dn); /* clean number */ if (sourhi&0x80000000) dn->bits=DECNEG; /* set sign if negative */ msd=COMBMSD[comb]; /* decode the combination field */ exp=COMBEXP[comb]; /* .. */ if (exp==3) { /* is a special */ if (msd==0) { dn->bits|=DECINF; return dn; /* no coefficient needed */ } else if (sourhi&0x02000000) dn->bits|=DECSNAN; else dn->bits|=DECNAN; msd=0; /* no top digit */ } else { /* is a finite number */ dn->exponent=(exp<<8)+((sourhi>>18)&0xff)-DECIMAL64_Bias; /* unbiased */ } /* get the coefficient */ sourhi&=0x0003ffff; /* clean coefficient continuation */ if (msd) { /* non-zero msd */ sourhi|=msd<<18; /* prefix to coefficient */ need=6; /* process 6 declets */ } else { /* msd=0 */ if (!sourhi) { /* top word 0 */ if (!sourlo) return dn; /* easy: coefficient is 0 */ need=3; /* process at least 3 declets */ if (sourlo&0xc0000000) need++; /* process 4 declets */ /* [could reduce some more, here] */ } else { /* some bits in top word, msd=0 */ need=4; /* process at least 4 declets */ if (sourhi&0x0003ff00) need++; /* top declet!=0, process 5 */ } } /*msd=0 */ decDigitsFromDPD(dn, sourar, need); /* process declets */ return dn; } /* decimal64ToNumber */ /* ------------------------------------------------------------------ */ /* to-scientific-string -- conversion to numeric string */ /* to-engineering-string -- conversion to numeric string */ /* */ /* decimal64ToString(d64, string); */ /* decimal64ToEngString(d64, string); */ /* */ /* d64 is the decimal64 format number to convert */ /* string is the string where the result will be laid out */ /* */ /* string must be at least 24 characters */ /* */ /* No error is possible, and no status can be set. */ /* ------------------------------------------------------------------ */ char * decimal64ToEngString(const decimal64 *d64, char *string){ decNumber dn; /* work */ decimal64ToNumber(d64, &dn); decNumberToEngString(&dn, string); return string; } /* decimal64ToEngString */ char * decimal64ToString(const decimal64 *d64, char *string){ uInt msd; /* coefficient MSD */ Int exp; /* exponent top two bits or full */ uInt comb; /* combination field */ char *cstart; /* coefficient start */ char *c; /* output pointer in string */ const uByte *u; /* work */ char *s, *t; /* .. (source, target) */ Int dpd; /* .. */ Int pre, e; /* .. */ uInt uiwork; /* for macros */ uInt sourar[2]; /* source 64-bit */ #define sourhi sourar[1] /* name the word with the sign */ #define sourlo sourar[0] /* and the lower word */ /* load source from storage; this is endian */ if (DECLITEND) { sourlo=UBTOUI(d64->bytes ); /* directly load the low int */ sourhi=UBTOUI(d64->bytes+4); /* then the high int */ } else { sourhi=UBTOUI(d64->bytes ); /* directly load the high int */ sourlo=UBTOUI(d64->bytes+4); /* then the low int */ } c=string; /* where result will go */ if (((Int)sourhi)<0) *c++='-'; /* handle sign */ comb=(sourhi>>26)&0x1f; /* combination field */ msd=COMBMSD[comb]; /* decode the combination field */ exp=COMBEXP[comb]; /* .. */ if (exp==3) { if (msd==0) { /* infinity */ strcpy(c, "Inf"); strcpy(c+3, "inity"); return string; /* easy */ } if (sourhi&0x02000000) *c++='s'; /* sNaN */ strcpy(c, "NaN"); /* complete word */ c+=3; /* step past */ if (sourlo==0 && (sourhi&0x0003ffff)==0) return string; /* zero payload */ /* otherwise drop through to add integer; set correct exp */ exp=0; msd=0; /* setup for following code */ } else exp=(exp<<8)+((sourhi>>18)&0xff)-DECIMAL64_Bias; /* convert 16 digits of significand to characters */ cstart=c; /* save start of coefficient */ if (msd) *c++='0'+(char)msd; /* non-zero most significant digit */ /* Now decode the declets. After extracting each one, it is */ /* decoded to binary and then to a 4-char sequence by table lookup; */ /* the 4-chars are a 1-char length (significant digits, except 000 */ /* has length 0). This allows us to left-align the first declet */ /* with non-zero content, then remaining ones are full 3-char */ /* length. We use fixed-length memcpys because variable-length */ /* causes a subroutine call in GCC. (These are length 4 for speed */ /* and are safe because the array has an extra terminator byte.) */ #define dpd2char u=&BIN2CHAR[DPD2BIN[dpd]*4]; \ if (c!=cstart) {memcpy(c, u+1, 4); c+=3;} \ else if (*u) {memcpy(c, u+4-*u, 4); c+=*u;} dpd=(sourhi>>8)&0x3ff; /* declet 1 */ dpd2char; dpd=((sourhi&0xff)<<2) | (sourlo>>30); /* declet 2 */ dpd2char; dpd=(sourlo>>20)&0x3ff; /* declet 3 */ dpd2char; dpd=(sourlo>>10)&0x3ff; /* declet 4 */ dpd2char; dpd=(sourlo)&0x3ff; /* declet 5 */ dpd2char; if (c==cstart) *c++='0'; /* all zeros -- make 0 */ if (exp==0) { /* integer or NaN case -- easy */ *c='\0'; /* terminate */ return string; } /* non-0 exponent */ e=0; /* assume no E */ pre=c-cstart+exp; /* [here, pre-exp is the digits count (==1 for zero)] */ if (exp>0 || pre<-5) { /* need exponential form */ e=pre-1; /* calculate E value */ pre=1; /* assume one digit before '.' */ } /* exponential form */ /* modify the coefficient, adding 0s, '.', and E+nn as needed */ s=c-1; /* source (LSD) */ if (pre>0) { /* ddd.ddd (plain), perhaps with E */ char *dotat=cstart+pre; if (dotat=dotat; s--, t--) *t=*s; /* open the gap; leave t at gap */ *t='.'; /* insert the dot */ c++; /* length increased by one */ } /* finally add the E-part, if needed; it will never be 0, and has */ /* a maximum length of 3 digits */ if (e!=0) { *c++='E'; /* starts with E */ *c++='+'; /* assume positive */ if (e<0) { *(c-1)='-'; /* oops, need '-' */ e=-e; /* uInt, please */ } u=&BIN2CHAR[e*4]; /* -> length byte */ memcpy(c, u+4-*u, 4); /* copy fixed 4 characters [is safe] */ c+=*u; /* bump pointer appropriately */ } *c='\0'; /* add terminator */ /*printf("res %s\n", string); */ return string; } /* pre>0 */ /* -5<=pre<=0: here for plain 0.ddd or 0.000ddd forms (can never have E) */ t=c+1-pre; *(t+1)='\0'; /* can add terminator now */ for (; s>=cstart; s--, t--) *t=*s; /* shift whole coefficient right */ c=cstart; *c++='0'; /* always starts with 0. */ *c++='.'; for (; pre<0; pre++) *c++='0'; /* add any 0's after '.' */ /*printf("res %s\n", string); */ return string; } /* decimal64ToString */ /* ------------------------------------------------------------------ */ /* to-number -- conversion from numeric string */ /* */ /* decimal64FromString(result, string, set); */ /* */ /* result is the decimal64 format number which gets the result of */ /* the conversion */ /* *string is the character string which should contain a valid */ /* number (which may be a special value) */ /* set is the context */ /* */ /* The context is supplied to this routine is used for error handling */ /* (setting of status and traps) and for the rounding mode, only. */ /* If an error occurs, the result will be a valid decimal64 NaN. */ /* ------------------------------------------------------------------ */ decimal64 * decimal64FromString(decimal64 *result, const char *string, decContext *set) { decContext dc; /* work */ decNumber dn; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL64); /* no traps, please */ dc.round=set->round; /* use supplied rounding */ decNumberFromString(&dn, string, &dc); /* will round if needed */ decimal64FromNumber(result, &dn, &dc); if (dc.status!=0) { /* something happened */ decContextSetStatus(set, dc.status); /* .. pass it on */ } return result; } /* decimal64FromString */ /* ------------------------------------------------------------------ */ /* decimal64IsCanonical -- test whether encoding is canonical */ /* d64 is the source decimal64 */ /* returns 1 if the encoding of d64 is canonical, 0 otherwise */ /* No error is possible. */ /* ------------------------------------------------------------------ */ uInt decimal64IsCanonical(const decimal64 *d64) { decNumber dn; /* work */ decimal64 canon; /* .. */ decContext dc; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL64); decimal64ToNumber(d64, &dn); decimal64FromNumber(&canon, &dn, &dc);/* canon will now be canonical */ return memcmp(d64, &canon, DECIMAL64_Bytes)==0; } /* decimal64IsCanonical */ /* ------------------------------------------------------------------ */ /* decimal64Canonical -- copy an encoding, ensuring it is canonical */ /* d64 is the source decimal64 */ /* result is the target (may be the same decimal64) */ /* returns result */ /* No error is possible. */ /* ------------------------------------------------------------------ */ decimal64 * decimal64Canonical(decimal64 *result, const decimal64 *d64) { decNumber dn; /* work */ decContext dc; /* .. */ decContextDefault(&dc, DEC_INIT_DECIMAL64); decimal64ToNumber(d64, &dn); decimal64FromNumber(result, &dn, &dc);/* result will now be canonical */ return result; } /* decimal64Canonical */ #if DECTRACE || DECCHECK /* Macros for accessing decimal64 fields. These assume the argument is a reference (pointer) to the decimal64 structure, and the decimal64 is in network byte order (big-endian) */ /* Get sign */ #define decimal64Sign(d) ((unsigned)(d)->bytes[0]>>7) /* Get combination field */ #define decimal64Comb(d) (((d)->bytes[0] & 0x7c)>>2) /* Get exponent continuation [does not remove bias] */ #define decimal64ExpCon(d) ((((d)->bytes[0] & 0x03)<<6) \ | ((unsigned)(d)->bytes[1]>>2)) /* Set sign [this assumes sign previously 0] */ #define decimal64SetSign(d, b) { \ (d)->bytes[0]|=((unsigned)(b)<<7);} /* Set exponent continuation [does not apply bias] */ /* This assumes range has been checked and exponent previously 0; */ /* type of exponent must be unsigned */ #define decimal64SetExpCon(d, e) { \ (d)->bytes[0]|=(uByte)((e)>>6); \ (d)->bytes[1]|=(uByte)(((e)&0x3F)<<2);} /* ------------------------------------------------------------------ */ /* decimal64Show -- display a decimal64 in hexadecimal [debug aid] */ /* d64 -- the number to show */ /* ------------------------------------------------------------------ */ /* Also shows sign/cob/expconfields extracted */ void decimal64Show(const decimal64 *d64) { char buf[DECIMAL64_Bytes*2+1]; Int i, j=0; if (DECLITEND) { for (i=0; ibytes[7-i]); } printf(" D64> %s [S:%d Cb:%02x Ec:%02x] LittleEndian\n", buf, d64->bytes[7]>>7, (d64->bytes[7]>>2)&0x1f, ((d64->bytes[7]&0x3)<<6)| (d64->bytes[6]>>2)); } else { /* big-endian */ for (i=0; ibytes[i]); } printf(" D64> %s [S:%d Cb:%02x Ec:%02x] BigEndian\n", buf, decimal64Sign(d64), decimal64Comb(d64), decimal64ExpCon(d64)); } } /* decimal64Show */ #endif /* ================================================================== */ /* Shared utility routines and tables */ /* ================================================================== */ /* define and include the conversion tables to use for shared code */ #if DECDPUN==3 #define DEC_DPD2BIN 1 #else #define DEC_DPD2BCD 1 #endif #include "decDPD.h" /* lookup tables */ /* The maximum number of decNumberUnits needed for a working copy of */ /* the units array is the ceiling of digits/DECDPUN, where digits is */ /* the maximum number of digits in any of the formats for which this */ /* is used. decimal128.h must not be included in this module, so, as */ /* a very special case, that number is defined as a literal here. */ #define DECMAX754 34 #define DECMAXUNITS ((DECMAX754+DECDPUN-1)/DECDPUN) /* ------------------------------------------------------------------ */ /* Combination field lookup tables (uInts to save measurable work) */ /* */ /* COMBEXP - 2-bit most-significant-bits of exponent */ /* [11 if an Infinity or NaN] */ /* COMBMSD - 4-bit most-significant-digit */ /* [0=Infinity, 1=NaN if COMBEXP=11] */ /* */ /* Both are indexed by the 5-bit combination field (0-31) */ /* ------------------------------------------------------------------ */ const uInt COMBEXP[32]={0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3}; const uInt COMBMSD[32]={0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 9, 8, 9, 0, 1}; /* ------------------------------------------------------------------ */ /* decDigitsToDPD -- pack coefficient into DPD form */ /* */ /* dn is the source number (assumed valid, max DECMAX754 digits) */ /* targ is 1, 2, or 4-element uInt array, which the caller must */ /* have cleared to zeros */ /* shift is the number of 0 digits to add on the right (normally 0) */ /* */ /* The coefficient must be known small enough to fit. The full */ /* coefficient is copied, including the leading 'odd' digit. This */ /* digit is retrieved and packed into the combination field by the */ /* caller. */ /* */ /* The target uInts are altered only as necessary to receive the */ /* digits of the decNumber. When more than one uInt is needed, they */ /* are filled from left to right (that is, the uInt at offset 0 will */ /* end up with the least-significant digits). */ /* */ /* shift is used for 'fold-down' padding. */ /* */ /* No error is possible. */ /* ------------------------------------------------------------------ */ #if DECDPUN<=4 /* Constant multipliers for divide-by-power-of five using reciprocal */ /* multiply, after removing powers of 2 by shifting, and final shift */ /* of 17 [we only need up to **4] */ static const uInt multies[]={131073, 26215, 5243, 1049, 210}; /* QUOT10 -- macro to return the quotient of unit u divided by 10**n */ #define QUOT10(u, n) ((((uInt)(u)>>(n))*multies[n])>>17) #endif void decDigitsToDPD(const decNumber *dn, uInt *targ, Int shift) { Int cut; /* work */ Int n; /* output bunch counter */ Int digits=dn->digits; /* digit countdown */ uInt dpd; /* densely packed decimal value */ uInt bin; /* binary value 0-999 */ uInt *uout=targ; /* -> current output uInt */ uInt uoff=0; /* -> current output offset [from right] */ const Unit *inu=dn->lsu; /* -> current input unit */ Unit uar[DECMAXUNITS]; /* working copy of units, iff shifted */ #if DECDPUN!=3 /* not fast path */ Unit in; /* current unit */ #endif if (shift!=0) { /* shift towards most significant required */ /* shift the units array to the left by pad digits and copy */ /* [this code is a special case of decShiftToMost, which could */ /* be used instead if exposed and the array were copied first] */ const Unit *source; /* .. */ Unit *target, *first; /* .. */ uInt next=0; /* work */ source=dn->lsu+D2U(digits)-1; /* where msu comes from */ target=uar+D2U(digits)-1+D2U(shift);/* where upper part of first cut goes */ cut=DECDPUN-MSUDIGITS(shift); /* where to slice */ if (cut==0) { /* unit-boundary case */ for (; source>=dn->lsu; source--, target--) *target=*source; } else { first=uar+D2U(digits+shift)-1; /* where msu will end up */ for (; source>=dn->lsu; source--, target--) { /* split the source Unit and accumulate remainder for next */ #if DECDPUN<=4 uInt quot=QUOT10(*source, cut); uInt rem=*source-quot*DECPOWERS[cut]; next+=quot; #else uInt rem=*source%DECPOWERS[cut]; next+=*source/DECPOWERS[cut]; #endif if (target<=first) *target=(Unit)next; /* write to target iff valid */ next=rem*DECPOWERS[DECDPUN-cut]; /* save remainder for next Unit */ } } /* shift-move */ /* propagate remainder to one below and clear the rest */ for (; target>=uar; target--) { *target=(Unit)next; next=0; } digits+=shift; /* add count (shift) of zeros added */ inu=uar; /* use units in working array */ } /* now densely pack the coefficient into DPD declets */ #if DECDPUN!=3 /* not fast path */ in=*inu; /* current unit */ cut=0; /* at lowest digit */ bin=0; /* [keep compiler quiet] */ #endif for(n=0; digits>0; n++) { /* each output bunch */ #if DECDPUN==3 /* fast path, 3-at-a-time */ bin=*inu; /* 3 digits ready for convert */ digits-=3; /* [may go negative] */ inu++; /* may need another */ #else /* must collect digit-by-digit */ Unit dig; /* current digit */ Int j; /* digit-in-declet count */ for (j=0; j<3; j++) { #if DECDPUN<=4 Unit temp=(Unit)((uInt)(in*6554)>>16); dig=(Unit)(in-X10(temp)); in=temp; #else dig=in%10; in=in/10; #endif if (j==0) bin=dig; else if (j==1) bin+=X10(dig); else /* j==2 */ bin+=X100(dig); digits--; if (digits==0) break; /* [also protects *inu below] */ cut++; if (cut==DECDPUN) {inu++; in=*inu; cut=0;} } #endif /* here there are 3 digits in bin, or have used all input digits */ dpd=BIN2DPD[bin]; /* write declet to uInt array */ *uout|=dpd<>(10-uoff); /* collect top bits */ } /* n declets */ return; } /* decDigitsToDPD */ /* ------------------------------------------------------------------ */ /* decDigitsFromDPD -- unpack a format's coefficient */ /* */ /* dn is the target number, with 7, 16, or 34-digit space. */ /* sour is a 1, 2, or 4-element uInt array containing only declets */ /* declets is the number of (right-aligned) declets in sour to */ /* be processed. This may be 1 more than the obvious number in */ /* a format, as any top digit is prefixed to the coefficient */ /* continuation field. It also may be as small as 1, as the */ /* caller may pre-process leading zero declets. */ /* */ /* When doing the 'extra declet' case care is taken to avoid writing */ /* extra digits when there are leading zeros, as these could overflow */ /* the units array when DECDPUN is not 3. */ /* */ /* The target uInts are used only as necessary to process declets */ /* declets into the decNumber. When more than one uInt is needed, */ /* they are used from left to right (that is, the uInt at offset 0 */ /* provides the least-significant digits). */ /* */ /* dn->digits is set, but not the sign or exponent. */ /* No error is possible [the redundant 888 codes are allowed]. */ /* ------------------------------------------------------------------ */ void decDigitsFromDPD(decNumber *dn, const uInt *sour, Int declets) { uInt dpd; /* collector for 10 bits */ Int n; /* counter */ Unit *uout=dn->lsu; /* -> current output unit */ Unit *last=uout; /* will be unit containing msd */ const uInt *uin=sour; /* -> current input uInt */ uInt uoff=0; /* -> current input offset [from right] */ #if DECDPUN!=3 uInt bcd; /* BCD result */ uInt nibble; /* work */ Unit out=0; /* accumulator */ Int cut=0; /* power of ten in current unit */ #endif #if DECDPUN>4 uInt const *pow; /* work */ #endif /* Expand the densely-packed integer, right to left */ for (n=declets-1; n>=0; n--) { /* count down declets of 10 bits */ dpd=*uin>>uoff; uoff+=10; if (uoff>32) { /* crossed uInt boundary */ uin++; uoff-=32; dpd|=*uin<<(10-uoff); /* get waiting bits */ } dpd&=0x3ff; /* clear uninteresting bits */ #if DECDPUN==3 if (dpd==0) *uout=0; else { *uout=DPD2BIN[dpd]; /* convert 10 bits to binary 0-999 */ last=uout; /* record most significant unit */ } uout++; } /* n */ #else /* DECDPUN!=3 */ if (dpd==0) { /* fastpath [e.g., leading zeros] */ /* write out three 0 digits (nibbles); out may have digit(s) */ cut++; if (cut==DECDPUN) {*uout=out; if (out) {last=uout; out=0;} uout++; cut=0;} if (n==0) break; /* [as below, works even if MSD=0] */ cut++; if (cut==DECDPUN) {*uout=out; if (out) {last=uout; out=0;} uout++; cut=0;} cut++; if (cut==DECDPUN) {*uout=out; if (out) {last=uout; out=0;} uout++; cut=0;} continue; } bcd=DPD2BCD[dpd]; /* convert 10 bits to 12 bits BCD */ /* now accumulate the 3 BCD nibbles into units */ nibble=bcd & 0x00f; if (nibble) out=(Unit)(out+nibble*DECPOWERS[cut]); cut++; if (cut==DECDPUN) {*uout=out; if (out) {last=uout; out=0;} uout++; cut=0;} bcd>>=4; /* if this is the last declet and the remaining nibbles in bcd */ /* are 00 then process no more nibbles, because this could be */ /* the 'odd' MSD declet and writing any more Units would then */ /* overflow the unit array */ if (n==0 && !bcd) break; nibble=bcd & 0x00f; if (nibble) out=(Unit)(out+nibble*DECPOWERS[cut]); cut++; if (cut==DECDPUN) {*uout=out; if (out) {last=uout; out=0;} uout++; cut=0;} bcd>>=4; nibble=bcd & 0x00f; if (nibble) out=(Unit)(out+nibble*DECPOWERS[cut]); cut++; if (cut==DECDPUN) {*uout=out; if (out) {last=uout; out=0;} uout++; cut=0;} } /* n */ if (cut!=0) { /* some more left over */ *uout=out; /* write out final unit */ if (out) last=uout; /* and note if non-zero */ } #endif /* here, last points to the most significant unit with digits; */ /* inspect it to get the final digits count -- this is essentially */ /* the same code as decGetDigits in decNumber.c */ dn->digits=(last-dn->lsu)*DECDPUN+1; /* floor of digits, plus */ /* must be at least 1 digit */ #if DECDPUN>1 if (*last<10) return; /* common odd digit or 0 */ dn->digits++; /* must be 2 at least */ #if DECDPUN>2 if (*last<100) return; /* 10-99 */ dn->digits++; /* must be 3 at least */ #if DECDPUN>3 if (*last<1000) return; /* 100-999 */ dn->digits++; /* must be 4 at least */ #if DECDPUN>4 for (pow=&DECPOWERS[4]; *last>=*pow; pow++) dn->digits++; #endif #endif #endif #endif return; } /*decDigitsFromDPD */ libdfp-1.0.17/libdecnumber/dpd/decimal64.h000066400000000000000000000076171504475242000202010ustar00rootroot00000000000000/* Decimal 64-bit format module header for the decNumber C Library. Copyright (C) 2005-2019 Free Software Foundation, Inc. Contributed by IBM Corporation. Author Mike Cowlishaw. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC 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. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ /* ------------------------------------------------------------------ */ /* Decimal 64-bit format module header */ /* ------------------------------------------------------------------ */ #if !defined(DECIMAL64) #define DECIMAL64 #define DEC64NAME "decimal64" /* Short name */ #define DEC64FULLNAME "Decimal 64-bit Number" /* Verbose name */ #define DEC64AUTHOR "Mike Cowlishaw" /* Who to blame */ /* parameters for decimal64s */ #define DECIMAL64_Bytes 8 /* length */ #define DECIMAL64_Pmax 16 /* maximum precision (digits) */ #define DECIMAL64_Emax 384 /* maximum adjusted exponent */ #define DECIMAL64_Emin -383 /* minimum adjusted exponent */ #define DECIMAL64_Bias 398 /* bias for the exponent */ #define DECIMAL64_String 24 /* maximum string length, +1 */ #define DECIMAL64_EconL 8 /* exp. continuation length */ /* highest biased exponent (Elimit-1) */ #define DECIMAL64_Ehigh (DECIMAL64_Emax+DECIMAL64_Bias-DECIMAL64_Pmax+1) /* check enough digits, if pre-defined */ #if defined(DECNUMDIGITS) #if (DECNUMDIGITS=16 for safe use #endif #endif #ifndef DECNUMDIGITS #define DECNUMDIGITS DECIMAL64_Pmax /* size if not already defined*/ #endif #ifndef DECNUMBER #include "decNumber.h" /* context and number library */ #endif /* Decimal 64-bit type, accessible by bytes */ typedef struct { uint8_t bytes[DECIMAL64_Bytes]; /* decimal64: 1, 5, 8, 50 bits*/ } decimal64; /* special values [top byte excluding sign bit; last two bits are */ /* don't-care for Infinity on input, last bit don't-care for NaN] */ #if !defined(DECIMAL_NaN) #define DECIMAL_NaN 0x7c /* 0 11111 00 NaN */ #define DECIMAL_sNaN 0x7e /* 0 11111 10 sNaN */ #define DECIMAL_Inf 0x78 /* 0 11110 00 Infinity */ #endif /* ---------------------------------------------------------------- */ /* Routines */ /* ---------------------------------------------------------------- */ #include "decimal64Symbols.h" #ifdef __cplusplus extern "C" { #endif /* String conversions */ decimal64 * decimal64FromString(decimal64 *, const char *, decContext *); char * decimal64ToString(const decimal64 *, char *); char * decimal64ToEngString(const decimal64 *, char *); /* decNumber conversions */ decimal64 * decimal64FromNumber(decimal64 *, const decNumber *, decContext *); decNumber * decimal64ToNumber(const decimal64 *, decNumber *); /* Format-dependent utilities */ uint32_t decimal64IsCanonical(const decimal64 *); decimal64 * decimal64Canonical(decimal64 *, const decimal64 *); #ifdef __cplusplus } #endif #endif libdfp-1.0.17/libdecnumber/dpd/decimal64Symbols.h000066400000000000000000000015721504475242000215440ustar00rootroot00000000000000#if !defined(DECIMAL64SYMBOLS) #define DECIMAL64SYMBOLS #ifdef IN_LIBGCC2 #define decDigitsFromDPD __decDigitsFromDPD #define decDigitsToDPD __decDigitsToDPD #define decimal64Canonical __decimal64Canonical #define decimal64FromNumber __decimal64FromNumber #define decimal64FromString __decimal64FromString #define decimal64IsCanonical __decimal64IsCanonical #define decimal64ToEngString __decimal64ToEngString #define decimal64ToNumber __decimal64ToNumber #define decimal64ToString __decimal64ToString #define COMBEXP __decnnCOMBEXP #define COMBMSD __decnnCOMBMSD /* DPD2BIN and BIN2DPD are used in support for decimal32/decimal64/decimal128 and also in support for decSingle/decDouble/decQuad. Rename them in case both types of support are used in the same executable. */ #undef DPD2BIN #define DPD2BIN __decnnDPD2BIN #undef BIN2DPD #define BIN2DPD __decnnBIN2DPD #endif #endif libdfp-1.0.17/libdfp.pc.in000066400000000000000000000004421504475242000152340ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: @PACKAGE_NAME@ Description: Decimal Floating Point C Library URL: https://github.com/libdfp/libdfp Version: @PACKAGE_VERSION@ Cflags: -I${includedir}/dfp -D__STDC_WANT_DEC_FP__ Libs: -L${libdir} -ldfp libdfp-1.0.17/make-release.sh000077500000000000000000000033601504475242000157370ustar00rootroot00000000000000#!/bin/bash logfile=${PWD}/release.$(date +%y-%m-%d-%T).log # This script attempts to generate a release like tarball # of the project in the absense of full autotooling support # # Since the autotooling support is missing for now # we'll create an archive with git-archive. if [ ! -d .git ]; then echo "Fatal: Not a git project. Bailing" exit 1 fi # Determine the library name and version. PROJVER=libdfp-$(git describe --tags) # Generate the archive. if ! git archive --format=tar --prefix=${PROJVER}/ HEAD > ${PROJVER}.tar ; then echo "Failed to archive" exit 1 fi # Generate a changelog and append it. mkdir ${PROJVER} ./generate-changelog.sh > ${PROJVER}/ChangeLog.md tar rf ${PROJVER}.tar ${PROJVER}/ChangeLog.md # Remove any files which needn't exist. tar f ${PROJVER}.tar \ --delete ${PROJVER}/{make-release.sh,generate-changelog.sh,ChangeLog.old.md} rm -rf ${PROJVER} gzip -f ${PROJVER}.tar tarballs="${PROJVER}.tar.gz" tar xf ${PROJVER}.tar.gz --warning=no-timestamp # Attempt a VPATH build. cd ${PROJVER} # Update timestamps to prevent odd issues. touch configure.ac aclocal.m4 configure Makefile.am Makefile.in mkdir _build cd _build echo "Running configure" if ! ../configure >> ${logfile} 2>&1 ; then echo "Failed to configure" exit 1 fi echo "Running make" if ! make -j8 >> ${logfile} 2>&1 ; then echo "Failed to make" exit 1 fi echo "Running make check" if ! make check >> ${logfile} 2>&1 ; then echo "Failed to check" fi cd ../.. rm -rf libdfp echo "Found tarballs: $tarballs" # Generate some popular checksums for the tarball. for tarball in ${tarballs}; do for sum in sha256 md5; do echo "Generating ${tarball}.${sum}" ${sum}sum ${tarball} > ${tarball}.${sum} done done # TODO: Support signing these releases exit 0 libdfp-1.0.17/printf-hooks/000077500000000000000000000000001504475242000154665ustar00rootroot00000000000000libdfp-1.0.17/printf-hooks/Makefile000066400000000000000000000000751504475242000171300ustar00rootroot00000000000000libdfp_files += printf_dfp init_dfp fmt_d32 fmt_d64 fmt_d128 libdfp-1.0.17/printf-hooks/fmt_d128.c000066400000000000000000000021731504475242000171610ustar00rootroot00000000000000/* Macroized version of the decimal floatiing point string formatting functions. Copyright (C) 2007 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include #include "fmt_d32.c" libdfp-1.0.17/printf-hooks/fmt_d32.c000066400000000000000000000133471504475242000171000ustar00rootroot00000000000000/* Macroized version of the decimal floating point string formatting functions. Copyright (C) 2007 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 /* needed to pick up DECNUMDIGITS before including decNumber.h */ # include #endif #include #define FUNCTION_NAME fmt_ #include #include #include #include #include #include /* DECIMAL128_Pmax + 14 (where '14' represents all the extra characters present * in the output string). Defined here so we avoid including . */ #define MAX_DECIMAL128_STRING 48 /* Thirty-five array indices will account for the available number of digits of * precision for a _Decimal128. */ static _Decimal128 powof10 [] = { 1.e0dl, 1.e1dl, 1.e2dl, 1.e3dl, 1.e4dl, 1.e5dl, 1.e6dl, 1.e7dl, 1.e8dl, 1.e9dl, 1.e10dl, 1.e11dl, 1.e12dl, 1.e13dl, 1.e14dl, 1.e15dl, 1.e16dl, 1.e17dl, 1.e18dl, 1.e19dl, 1.e20dl, 1.e21dl, 1.e22dl, 1.e23dl, 1.e24dl, 1.e25dl, 1.e26dl, 1.e27dl, 1.e28dl, 1.e29dl, 1.e30dl, 1.e31dl, 1.e32dl, 1.e33dl, 1.e34dl }; static _Decimal128 negpowof10 [] = { 1.e0dl, 1.e-1dl, 1.e-2dl, 1.e-3dl, 1.e-4dl, 1.e-5dl, 1.e-6dl, 1.e-7dl, 1.e-8dl, 1.e-9dl, 1.e-10dl, 1.e-11dl, 1.e-12dl, 1.e-13dl, 1.e-14dl, 1.e-15dl, 1.e-16dl, 1.e-17dl, 1.e-18dl, 1.e-19dl, 1.e-20dl, 1.e-21dl, 1.e-22dl, 1.e-23dl, 1.e-24dl, 1.e-25dl, 1.e-26dl, 1.e-27dl, 1.e-28dl, 1.e-29dl, 1.e-30dl, 1.e-31dl, 1.e-32dl, 1.e-33dl, 1.e-34dl }; /* Stripped down ldexpd128 without NaN or Infinity detection. */ static _Decimal128 __dfp_printf_ldexpd128 (_Decimal128 x, int y) { if (y == 0) return x; if (y > 0) return (x * (10 * powof10[y])); else return (x * (10 * negpowof10[-(y)])); } static _Decimal128 __dfp_adjust_precision(_Decimal128 x, int prec) { _Decimal128 deconst; _Decimal128 y = x; int powof10 = (34 - prec); if (x==0.0DL || __isnand128(x) || __isinfd128(x)) return x; /* Get a number which, when added to 'x' causes the bits outside of the * desired precision to be outside of the representable number of digits * for a _Decimal128 (i.e. 34 digits). e.g. * 0.01235 with a requested precision of '4' expects 0.0124 * 100000000000000000000000000000.0000|<- precision boundary for _Decimal128 * + 0.01235<- guard digit causes rounding * ----------------------------------- * 100000000000000000000000000000.0124 * - 100000000000000000000000000000.0000 * ----------------------------------- * 0.0124 */ deconst = __dfp_printf_ldexpd128(0.01DL, powof10); if (x<0.0DL) deconst = -(deconst); /* reverse the forthcoming operation. */ /* exceed the number of available digits, the guard digit causes rounding. */ x += deconst; x -= deconst; if (x==0.0DL && y < 0.0DL) return (-0.0DL); /* Explicitly return -0.0 because GCC is too smart. */ return x; } /* slen should be DECIMAL128_Pmax + 14 + info->width + 1 (for '\0') */ char * INTERNAL_FUNCTION_NAME ( const struct printf_info *info, const void *const *args, char * str, int slen) { DEC_TYPE *y = *(DEC_TYPE **)args[0]; DEC_TYPE z; /* Used if we need to adjust the precision. */ char dtos[MAX_DECIMAL128_STRING]; int dtoslen = 0; char * padded = str; /* Used if there is extra width padding necessary. */ if (!str || slen <= 0) return NULL; memset(dtos, 0x0, MAX_DECIMAL128_STRING); /* Overwrite 'z' with a precision adjusted _Decimal[32|64|128] per the printf * format precision flag. */ if (info->prec > 0) z = (DEC_TYPE)__dfp_adjust_precision((DEC_TYPE)*y, info->prec); else z = *y; if (info->spec == 'E' || info->spec == 'e') { IEEE_DECIMAL_TO_ENG_STRING(&z, dtos); } else IEEE_DECIMAL_TO_STRING(&z, dtos); dtoslen = strlen(dtos); /* We don't need to pad if dtoslen exceeds the width flag, or if no width flag * is set. */ if (info->width && (dtoslen < info->width)) { wchar_t pad = ' '; /* default padding */ int padnum; if (info->pad) pad = info->pad; padnum = info->width - dtoslen; /* Justification indicates where padding is placed. */ if (!info->left) { memset(str, pad, padnum); padded = str + padnum; } else memset(str + dtoslen, pad, padnum); /* No need in this case to adjust 'padded' from the beginning of 'str'. */ str[info->width] = 0x0; } else /* Set the null terminator before copying the string. */ str[dtoslen] = 0x0; memcpy(padded, dtos, dtoslen); memset(dtos, 0x0, MAX_DECIMAL128_STRING); return str; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) hidden_def(INTERNAL_FUNCTION_NAME) libdfp-1.0.17/printf-hooks/fmt_d64.c000066400000000000000000000021701504475242000170750ustar00rootroot00000000000000/* Macroized version of the decimal floating point string formatting functions. Copyright (C) 2007 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include #include "fmt_d32.c" libdfp-1.0.17/printf-hooks/init_dfp.c000066400000000000000000000023411504475242000174260ustar00rootroot00000000000000/* Libdfp constructor and destructor functions. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include void __attribute__ ((constructor)) __attribute__((visibility ("hidden"))) __libdfp_init (void) { /* At present this doesn't ever fail so we don't care about a return code. */ register_printf_dfp(); } libdfp-1.0.17/printf-hooks/printf_dfp.c000066400000000000000000000557251504475242000200030ustar00rootroot00000000000000/* Function definition to convert DFP values to strings Copyright (C) 2006-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* Based on GLIBC stdio-common/printf_fp.c by: Ulrich Drepper */ #include "printf_dfp.h" #include /* wchar.h has to be included BEFORE stdio.h or it loses function * definitions when dfp/wchar.h uses #include_next . */ #include #include #include #include #include #include #include #include #include #include /* For CHAR_MAX */ #include #include #define _DECIMAL_SIZE 128 #define DEC_TYPE _Decimal128 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #undef ADJUST #undef Q #undef DECIMAL_BIAS #define _DECIMAL_SIZE 64 #define DEC_TYPE _Decimal64 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #undef ADJUST #undef Q #undef DECIMAL_BIAS #define _DECIMAL_SIZE 32 #define DEC_TYPE _Decimal32 #include static int wpadn (FILE *fp, wint_t pad, int count) { int i; int written = 0; for (i=0;i 999)\ {\ outchar('0' + __builtin_abs(pr) / 1000);\ t_pr = (__builtin_abs(pr) % 1000);\ outchar('0' + t_pr/100);\ t_pr = (__builtin_abs(t_pr) % 100);\ outchar('0' + t_pr/10);\ t_pr = (__builtin_abs(t_pr) % 10);\ outchar('0' + t_pr);\ }\ else if (__builtin_abs(pr) > 99)\ {\ outchar('0' + __builtin_abs(pr)/100);\ t_pr = (__builtin_abs(pr) % 100);\ outchar('0' + t_pr/10);\ t_pr = (__builtin_abs(t_pr) % 10);\ outchar('0' + t_pr);\ }\ else if (__builtin_abs(pr) > 9)\ {\ outchar('0' + __builtin_abs(pr)/10);\ t_pr = (__builtin_abs(pr) % 10);\ outchar('0' + t_pr);\ }\ else\ {\ outchar('0' + __builtin_abs(pr));\ }\ } while (0) #define OUT_DIGITS(xp) \ do \ { \ int ia; \ outchar('['); \ outchar('d'); \ outchar('i'); \ outchar('g'); \ outchar('i'); \ outchar('t'); \ outchar('s'); \ outchar(':'); \ for (ia = 0; digits[ia] != '\0'; ia++) \ outchar(digits[ia]); \ outchar('e'); \ _OUT(xp); \ outchar(']');\ } while (0) #define OUT(pr,val) \ do \ { \ int slen = strlen(pr); \ int ia; \ outchar('['); \ for (ia = 0; ia < slen; ia++) \ outchar(pr[ia]); \ outchar(':'); \ _OUT(val); \ outchar(']');\ } while (0) #define OUT_PREC(pr) \ do \ { \ OUT("prec",pr); \ } while (0) #define OUT_INPUT_PREC(pr) \ do \ { \ OUT("input_prec",pr); \ } while (0) #define OUT_INDEX(idx) \ do \ { \ OUT("index",idx); \ } while (0) #define OUT_DEFAULT_PREC(pr) \ do \ { \ OUT("default_prec",pr); \ } while (0) #define OUT_LEN(ln) \ do \ { \ OUT("len",ln); \ } while (0) #define OUT_SIG(sg) \ do \ { \ OUT("sig",sg); \ } while (0) #define OUT_N(na) \ do \ { \ OUT("n",na); \ } while (0) #define OUT_WIDTH(wd) \ do \ { \ OUT("width",wd); \ } while (0) #define OUT_DECPT(dpt) \ do \ { \ OUT("decpt",dpt); \ } while (0) static int pa_d128; static int pa_d64; static int pa_d32; /* Assign these a unique 2^n value in case printf registration is not used as this support is used to implement strfromdN. */ int mod_H = 1; int mod_D = 2; int mod_DD = 4; void __d128_va (void *mem, va_list *ap) { _Decimal128 d = va_arg (*ap, _Decimal128); memcpy (mem, &d, sizeof (d)); } strong_alias(__d128_va, d128_va) hidden_def(__d128_va) void __d64_va (void *mem, va_list *ap) { _Decimal64 d = va_arg (*ap, _Decimal64); memcpy (mem, &d, sizeof (d)); } strong_alias(__d64_va, d64_va) hidden_def(__d64_va) void __d32_va (void *mem, va_list *ap) { _Decimal32 d = va_arg (*ap, _Decimal32); memcpy (mem, &d, sizeof (d)); } strong_alias(__d32_va, d32_va) hidden_def(__d32_va) int __dfp_ais (const struct printf_info *info, size_t n __attribute__ ((unused)), int *argtype, int *size) { if ((info->user & mod_D) == mod_D) { argtype[0] = pa_d64; size[0] = sizeof (_Decimal64); return 1; } else if ((info->user & mod_DD) == mod_DD) { argtype[0] = pa_d128; size[0] = sizeof (_Decimal128); return 1; } else if ((info->user & mod_H) == mod_H) { argtype[0] = pa_d32; size[0] = sizeof (_Decimal32); return 1; } return -1; } strong_alias(__dfp_ais, dfp_ais) hidden_def(__dfp_ais) #define EXP_BIAS_D128 -6109 #define EXP_BIAS_D64 -368 #define EXP_BIAS_D32 -87 /* this includes the max digits in a _Decimal128, plus a bunch of formatting * characters. */ #define DECIMAL_PRINTF_BUF_SIZE 65 /* ((DECIMAL128_PMAX + 14) * 2) + 1 */ /* fe_decround.c will initialize this function pointer to fe_decgetround */ int (*__printf_dfp_getround_callback)(void) = NULL; int __printf_dfp (FILE *fp, const struct printf_info *info, const void *const *args) { int wide = info->wide; /* Counter for number of written characters. */ int done = 0; /* Locale-dependent representation of decimal point. */ const char *decimal; union { const char *mb; int wc; } decimalwc; char spec = tolower(info->spec); /* Locale-dependent thousands separator and grouping specification. */ const char *thousands_sep = NULL; wchar_t thousands_sepwc = 0; const char * thousands_sepmb; const char *grouping; if (info->extra == 0) { decimal = nl_langinfo (__DECIMAL_POINT); decimalwc.mb = nl_langinfo (_NL_NUMERIC_DECIMAL_POINT_WC); } else { decimal = nl_langinfo (__MON_DECIMAL_POINT); if (*decimal == '\0') decimal = nl_langinfo (__DECIMAL_POINT); decimalwc.mb = nl_langinfo (_NL_MONETARY_DECIMAL_POINT_WC); if (decimalwc.wc == L'\0') decimalwc.mb = nl_langinfo (_NL_NUMERIC_DECIMAL_POINT_WC); } /* The decimal point character must not be zero. */ assert (*decimal != '\0'); assert (decimalwc.wc != L'\0'); if (info->group) { if (info->extra == 0) grouping = nl_langinfo (__GROUPING); else grouping = nl_langinfo (__MON_GROUPING); if (*grouping <= 0 || *grouping == CHAR_MAX) grouping = NULL; else { /* Figure out the thousands separator character. */ if (wide) { if (info->extra == 0) { thousands_sepmb = nl_langinfo (_NL_NUMERIC_THOUSANDS_SEP_WC); mbrtowc(&thousands_sepwc,thousands_sepmb, CHAR_MAX, NULL); } else { thousands_sepmb = nl_langinfo (_NL_MONETARY_THOUSANDS_SEP_WC); mbrtowc(&thousands_sepwc,thousands_sepmb, CHAR_MAX, NULL); } } else { if (info->extra == 0) thousands_sep = nl_langinfo (__THOUSANDS_SEP); else thousands_sep = nl_langinfo (__MON_THOUSANDS_SEP); } if ((wide && thousands_sepwc == L'\0') || (! wide && *thousands_sep == '\0')) grouping = NULL; else if (thousands_sepwc == L'\0') /* If we are printing multibyte characters and there is a multibyte representation for the thousands separator, we must ensure the wide character thousands separator is available, even if it is fake. */ thousands_sepwc = 0xfffffffe; } } else grouping = NULL; /* Seriously, only touch this code if you MUST. */ { char digits[DECIMAL_PRINTF_BUF_SIZE]; int exp, /* The exponent. */ is_neg, /* Is negative? */ is_nan, /* Is not a number? */ is_inf, /* Is infinite? */ decpt = 2, /* decimal point offset into digits[] */ prec, /* number of digits that follow the decimal point, or number of significant digits for %g */ default_prec = 6, /* Default precision, per the C Spec. */ input_prec = 0, /* Precision of the _Decimal* value. */ mw, /* Mantissa Width */ n, /* Current digit offset into digits[] */ nd, /* num_digits before the get_digits call. */ width, /* Width of the field */ is_zero = 0; /* Used in some of the output tests. */ digits[0] = '0'; /* need an extra digit for rounding up */ if (info->user & mod_D) { _Decimal64 d64; memcpy (&d64, *(void* const *)args[0], sizeof(d64)); if (d64 == 0) is_zero = 1; nd = numdigitsd64(d64); __get_digits_d64 (d64, digits+1, &exp, &is_neg, &is_nan, &is_inf); mw = __DEC64_MANT_DIG__ + 1; } else if (info->user & mod_DD) { _Decimal128 d128; memcpy (&d128, *(void* const *)args[0], sizeof(d128)); if (d128 == 0) is_zero = 1; nd = numdigitsd128(d128); __get_digits_d128 (d128, digits+1, &exp, &is_neg, &is_nan, &is_inf); mw = __DEC128_MANT_DIG__ + 1; } else if (info->user & mod_H) { _Decimal32 d32; memcpy (&d32, *(void* const *)args[0], sizeof(d32)); if (d32 == 0) is_zero = 1; nd = numdigitsd32(d32); __get_digits_d32 (d32, digits+1, &exp, &is_neg, &is_nan, &is_inf); mw = __DEC32_MANT_DIG__ + 1; } else /* We shouldn't get here, but it is possible. */ return -2; /* The first digit is always a zero to allow rounding. */ n = 0; /* 'n' = position of first non-zero digit in the right-justified mantissa. */ n = mw - nd; /* Width and precision can not both be set or the results are undefined per * the C Spec. */ width = info->width; /* The user specified precision overrides the input's inherent precision. * This gets complicated quickly. */ prec = info->prec; if (is_nan || is_inf) { width -= 3; /*if (is_nan) is_neg = 0;*/ if (is_neg || info->showsign || info->space) width--; if (!info->left && width > 0) PADN (' ', width); if (is_neg) outchar ('-'); else if (info->showsign) outchar ('+'); else if (info->space) outchar (' '); if (is_nan) { if (isupper(info->spec)) { outchar ('N'); outchar ('A'); outchar ('N'); } else { outchar ('n'); outchar ('a'); outchar ('n'); } } else { if (isupper(info->spec)) { outchar ('I'); outchar ('N'); outchar ('F'); } else { outchar ('i'); outchar ('n'); outchar ('f'); } } if (info->left && width > 0) PADN (' ', width); return 0; } /* The term "precision" refers to the number of significant digits right of * the decimal place. Determine the implicit precision of the input value. * There are special rules for each of the supported flags.*/ switch (spec) { case 'a': { /* The DFP spec addition for %a refers to all of the significant * digits in the precision. */ input_prec = nd; /* This same check is done in two different places but it'll only * effect a single pass through once. If prec is not set it'll hit * this instance. If prec is set it'll hit the next instance. This * is because the DFP spec requires this to be run after rounding * when prec < input_prec. */ if (prec < 0 || prec >= input_prec) { /* Per the DFP specification (s,c,q), c == digits, q = exp, s == * is_neg. */ if (exp >= -(nd+5) && exp <= 0) { prec = -exp; spec = 'f'; } else { prec = nd - 1; spec = 'e'; input_prec = nd - 1; } } break; } case 'g': { int P = prec; /* When the C specification refers to X as the exponent it means the * exponent when the input value encoding is normalized to the form * d.dddd. This means we have to do that before we can do the goof * check. * * e.g., 123.456E-5 * right-justified -> 00123456E-9 * normalized -> 1.23456E-4 * * Normalize X to d.ddd... form by taking (exp) + (nd - 1) * * X == -4 */ int X = exp + (nd -1); /* The C Specification also indicates how to compute P. */ if (prec < 0) P = 6; else if (prec == 0) P = 1; /* Straight from the specification which assumes X is exponent normalized to * d.ddd... form. */ if (X >= -4 && P > X) { prec = (P - (X + 1)); spec = 'f'; } else { prec = P - 1; spec = 'e'; } input_prec = nd - 1; break; } case 'e': input_prec = nd - 1; break; case 'f': if(exp < 0 && (-exp) > default_prec) /* 00123456E-7 has an input_prec of 7. */ input_prec = (-exp); else /* 01234567E-6 has an input_prec of 6. */ /* 00000190E6 has an input_prec of 6. */ /* 00000123E1 has an input_prec of 6. */ /* 00000123E0 has an input_prec of 6. */ input_prec = default_prec; break; } /* The specs 'g' and 'a' may have already modified prec so this won't happen for * those cases. */ if (prec < 0) prec = default_prec; /* Do rounding if precision is less than the decimal type. On hardware DFP * this could probably easily be done with quantize but on soft-dfp the * existing method would be faster. */ if (prec < input_prec) { int index, roundmode = 0; char rounddigit = '4'; if (spec == 'f') /* This may force index to negative, in which case we ignore it at a * later time. */ index = n + nd + exp + prec; /* Goofy special case where we round significant digits which aren't * right of the decimal place. */ else if (tolower(info->spec) == 'a' && prec > 0) { index = n + prec; } else index = n + prec + 1; /* FIXME: we should check rounding mode for %a */ if (__printf_dfp_getround_callback) { roundmode = (*__printf_dfp_getround_callback)(); switch (roundmode) { case FE_DEC_TONEAREST: rounddigit = '4'; break; case FE_DEC_TOWARDZERO: rounddigit = '9'; break; case FE_DEC_UPWARD: rounddigit = (is_neg ? '9' : '0'-1); break; case FE_DEC_DOWNWARD: rounddigit = (is_neg ? '0'-1 : '9'); break; case FE_DEC_TONEARESTFROMZERO: rounddigit = '4'; break; case 5: rounddigit = '4'; break; /* nearest, ties toward zero */ case 6: rounddigit = '0'-1; break; /* away from zero */ case 7: rounddigit = '4'; break; /* round for shorter precision */ default: rounddigit = '4'; break; } } /* If this is true then the requested precision is smaller than the * default and rounding is required. If 'exp' was sufficiently negative * 'index' may be negative, in which case we don't need to round. */ if (index > 0 && index < mw && digits[index] > rounddigit) do { int trailzero = index+1; if (digits[index] == rounddigit+1) { while (trailzero < mw) { if (digits[trailzero] != '0') { trailzero = 0; break; } ++trailzero; } if (roundmode == FE_DEC_TONEAREST && trailzero && (digits[index-1] & 1) == 0) break; if (roundmode == FE_DEC_UPWARD && !trailzero) break; if (roundmode == FE_DEC_DOWNWARD && !trailzero) break; if (roundmode == 5 && trailzero) break; if (roundmode == 6 && trailzero) break; } while (digits[--index] == '9') digits[index] = '0'; digits[index]++; if (index < n) { n--; nd++; } } while (0); } /* Done rounding. */ /* If spec == 'a' at this point it means that prec was set by the user * and rounding had to be considered. The spec now requires that the * 'a' format presentation algorithm be calculated again. If prec * wasn't set by the user then this was handled earlier and spec has already * been set to either 'e' or 'f'. */ if (spec == 'a') { int old_exp = exp; /* The goofy DFP specification requires that we now assume that after * rounding the digits are right justified and truncated and the * algorithm recomputed using the new values for nd and exp, e.g., * * 00654300E-2 with %.1Hf -> 00000007E3. */ exp = nd + exp - prec; nd = prec; /* Per the DFP specification (s,c,q), c == digits, q = exp, s == * is_neg. */ if (exp >= -(nd+5) && exp <= 0) { prec = -exp; spec = 'f'; } else { prec = nd - 1; if (prec < 0) prec = 0; spec = 'e'; input_prec = nd - 1; /* Return exp to the original value because the 'e' case below will * recompute it. */ exp = old_exp; } /* spec will have been changed to 'e' or 'f' at this point, so determine * the decimal point now. */ } /* Calculate decimal point, adjust prec and exp if necessary. * By this point everything should be represented as either %e or %f. */ if (spec == 'f') { if (exp < 0) decpt = exp + nd + n; else if (is_zero) decpt = n + 1; else decpt = n + nd + exp; } else if (spec == 'e') { decpt = n + 1; exp = mw + exp - decpt; } /* Remove trailing zeroes for %g */ if (tolower(info->spec) == 'g' && !info->alt) { while (prec > 0 && decpt+prec > mw) prec--; while (prec > 0 && digits[decpt+prec-1] == '0') prec--; } /* Remove trailing zeroes for %a, but only if they are not significant. */ if (tolower(info->spec) == 'a') { while (prec > 0 && decpt+prec > mw) prec--; while (prec > 0 && decpt+prec > n+nd && digits[decpt+prec-1] == '0') prec--; } /* Digits to the left of the decimal pt. */ if (n < decpt) { width -= decpt - n; if (grouping) width -= (decpt-n)/3; } else width--; /* none to the left of the decimal point */ /* Digits to the right of the decimal pt. */ if (prec > 0) width -= 1 + prec; else if (info->alt) width -= 1; if (spec != 'f') { width -= 3; if (0!=(exp/10) || spec!='a') --width; if (0!=(exp/100)) --width; if (0!=(exp/1000)) --width; } if (is_neg || info->showsign || info->space) width--; if (!info->left && info->pad != '0' && width > 0) PADN (info->pad, width); if (is_neg) outchar ('-'); else if (info->showsign) outchar ('+'); else if (info->space) outchar (' '); if (!info->left && info->pad == '0' && width > 0) PADN ('0', width); /* Print zero, decimal point and leading zeroes if needed */ if (decpt <= n) { n = decpt; outchar ('0'); if (n < 0) { outchar (wide ? decimalwc.wc : *decimal); while (n < 0 && n < decpt + prec) { outchar ('0'); n++; } } } /* Print the digits. If decpt exceeds mw then we know that * they're simply trailing zeros and we don't need to display them. */ while (n < mw && n < decpt + prec) { if (n == decpt) { outchar (wide ? decimalwc.wc : *decimal); } else if (grouping && n < decpt && (decpt-n)%3 == 0) outchar (wide ? thousands_sepwc : *thousands_sep); outchar (digits[n]); n++; } /* print trailing zeroes */ while (n < decpt + prec) { if (n == decpt) outchar (wide ? decimalwc.wc : *decimal); else if (grouping && n < decpt && (decpt-n)%3 == 0) outchar (wide ? thousands_sepwc : *thousands_sep); outchar ('0'); n++; } /* print decimal point, if needed */ if (n == decpt && info->alt) outchar (wide ? decimalwc.wc : *decimal); /* The C spec says that for %e, if the value is zero the exponent is zero. * This isn't true for the DFP spec for %a so make sure to check info->spec * and not spec since it could have promoted 'a' to 'e'. */ if(spec == 'e' && (tolower(info->spec) != 'a' && is_zero)) exp = 0; /* Don't display the exponent part for 'f' because it is never used and don't * do it for 'g' if the value is zero. */ if (spec != 'f' && !((tolower(info->spec) == 'g') && is_zero)) { outchar (isupper(info->spec) ? 'E' : 'e'); if (exp < 0) { outchar ('-'); n = -exp; } else { outchar ('+'); n = exp; } if (n >= 1000) outchar ('0'+((n/1000)%10)); if (n >= 100) outchar ('0'+((n/100)%10)); if (n >= 10 || (tolower(info->spec) != 'a')) outchar ('0'+((n/10)%10)); outchar ('0'+(n%10)); } if (info->left && width > 0) PADN (info->pad, width); } /* Done output block. */ return done; } strong_alias (__printf_dfp, printf_dfp) hidden_def (__printf_dfp) int __register_printf_dfp (void) { pa_d128 = register_printf_type (d128_va); pa_d32 = register_printf_type (d32_va); pa_d64 = register_printf_type (d64_va); mod_DD = register_printf_modifier (L"DD"); mod_H = register_printf_modifier (L"H"); mod_D = register_printf_modifier (L"D"); register_printf_specifier ('f', printf_dfp, dfp_ais); register_printf_specifier ('F', printf_dfp, dfp_ais); register_printf_specifier ('e', printf_dfp, dfp_ais); register_printf_specifier ('E', printf_dfp, dfp_ais); register_printf_specifier ('g', printf_dfp, dfp_ais); register_printf_specifier ('G', printf_dfp, dfp_ais); register_printf_specifier ('a', printf_dfp, dfp_ais); register_printf_specifier ('A', printf_dfp, dfp_ais); return 0; } strong_alias (__register_printf_dfp, register_printf_dfp) hidden_def (__register_printf_dfp) libdfp-1.0.17/scripts/000077500000000000000000000000001504475242000145325ustar00rootroot00000000000000libdfp-1.0.17/scripts/README000066400000000000000000000000501504475242000154050ustar00rootroot00000000000000These files are an autotools formality. libdfp-1.0.17/scripts/abilist.awk000066400000000000000000000075541504475242000167000ustar00rootroot00000000000000# This awk script processes the output of objdump --dynamic-syms # into a simple format that should not change when the ABI is not changing. BEGIN { if (combine_fullname) combine = 1; if (combine) parse_names = 1; } # Per-file header. /[^ :]+\.so\.[0-9.]+:[ ]+.file format .*$/ { emit(0); seen_opd = 0; sofullname = $1; sub(/:$/, "", sofullname); soname = sofullname; sub(/^.*\//, "", soname); sub(/\.so\.[0-9.]+$/, "", soname); suppress = ((filename_regexp != "" && sofullname !~ filename_regexp) \ || (libname_regexp != "" && soname !~ libname_regexp)); next } suppress { next } # Normalize columns. /^[0-9a-fA-F]+ / { sub(/ /, " - ") } # Skip undefineds. $4 == "*UND*" { next } # Skip locals. $2 == "l" { next } # If the target uses ST_OTHER, it will be output before the symbol name. $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) { weak = $2; type = $3; size = $5; sub(/^0*/, "", size); size = " 0x" size; version = $6; symbol = $NF; gsub(/[()]/, "", version); if (version == "GLIBC_PRIVATE") next; desc = ""; if (type == "D" && $4 == ".tbss") { type = "T"; } else if (type == "D" && $4 == ".opd") { type = "F"; size = ""; if (seen_opd < 0) type = "O"; seen_opd = 1; } else if (type == "D" && NF == 8 && $7 == "0x80") { # Alpha functions avoiding plt entry in users type = "F"; size = ""; seen_opd = -1; } else if ($4 == "*ABS*") { type = "A"; size = ""; } else if (type == "DO") { type = "D"; } else if (type == "DF") { if (symbol ~ /^\./ && seen_opd >= 0) next; seen_opd = -1; type = "F"; size = ""; } else if (type == "iD" && ($4 == ".text" || $4 == ".opd")) { # Indirect functions. type = "F"; size = ""; } else { desc = symbol " " version " " weak " ? " type " " $4 " " $5; } if (size == " 0x") { desc = symbol " " version " " weak " ? " type " " $4 " " $5; } # Disabled -- weakness should not matter to shared library ABIs any more. #if (weak == "w") type = tolower(type); if (desc == "") desc = " " symbol " " type size; if (combine) version = soname " " version (combine_fullname ? " " sofullname : ""); if (version in versions) { versions[version] = versions[version] "\n" desc; } else { versions[version] = desc; } next; } # Header crapola. NF == 0 || /DYNAMIC SYMBOL TABLE/ || /file format/ { next } { print "Don't grok this line:", $0 } function emit(end) { if (!end && (combine || ! parse_names || soname == "")) return; tofile = parse_names && !combine; nverslist = 0; for (version in versions) { if (nverslist == 0) { verslist = version; nverslist = 1; continue; } split(verslist, s, "\n"); if (version < s[1]) { verslist = version; for (i = 1; i <= nverslist; ++i) { verslist = verslist "\n" s[i]; } } else { verslist = s[1]; for (i = 2; i <= nverslist; ++i) { if (version < s[i]) break; verslist = verslist "\n" s[i]; } verslist = verslist "\n" version; for (; i <= nverslist; ++i) { verslist = verslist "\n" s[i]; } } ++nverslist; } if (tofile) { out = prefix soname ".symlist"; if (soname in outfiles) out = out "." ++outfiles[soname]; else outfiles[soname] = 1; printf "" > out; } split(verslist, order, "\n"); for (i = 1; i <= nverslist; ++i) { version = order[i]; if (tofile) { print version >> out; close(out); outpipe = "sort >> " out; } else { if (combine) print ""; print prefix version; outpipe = "sort"; } print versions[version] | outpipe; close(outpipe); delete versions[version]; } for (version in versions) delete versions[version]; if (tofile) print "wrote", out, "for", sofullname; } END { emit(1); } libdfp-1.0.17/scripts/build_all.sh000077500000000000000000000051221504475242000170200ustar00rootroot00000000000000#!/bin/bash targets="x86_64 i686 powerpc powerpc64 powerpc64le s390 s390x" powerpc_extra="no power8" powerpc64_extra=$powerpc_extra powerpc64le_extra="power8 power9" s390x_extra="no z14" s390_extra="no z14" s390_CFLAGS="-m31" i686_CFLAGS="-m32" # Use the toolchains from build_many_glibcs.py (provided by glibc) bmg_dir=$1/install/compilers/ # Reuse x86-64 and s390x toolchains for 3x bit mode. x86_64_prefix=${bmg_dir}x86_64-linux-gnu/bin/x86_64-glibc-linux-gnu- i686_prefix=${x86_64_prefix} powerpc_prefix=${bmg_dir}powerpc-linux-gnu/bin/powerpc-glibc-linux-gnu- powerpc64_prefix=${bmg_dir}powerpc64-linux-gnu/bin/powerpc64-glibc-linux-gnu- powerpc64le_prefix=${bmg_dir}powerpc64le-linux-gnu/bin/powerpc64le-glibc-linux-gnu- s390_prefix=${bmg_dir}s390x-linux-gnu/bin/s390x-glibc-linux-gnu- s390x_prefix=${s390_prefix} # Hack for the inherintly broken malloc autoconf tests which # never work in a real cross compile. ac_hacks="ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes" function do_one() { tc=$2 cpu=$4 targetcpu="" host=${1} dsuf=${1} extra=${3} if [ ! -z $4 ] ; then dsuf=${1}-${4} targetcpu=--with-cpu=$4 fi mkdir -p build-${dsuf} &> /dev/null || { echo "mkdir fail ${dsuf}"; return 1; } mkdir -p install-${dsuf} &> /dev/null || { echo "mkdir fail ${dsuf}"; return 1; } cd build-${dsuf} ${SRCDIR}/configure --host=${host}-linux-gnu ${targetcpu} CC="${tc}gcc $extra" CXX="${tc}g++ $extra" $ac_hacks 2>conf.err > conf.log && \ echo "PASS config ${dsuf}" || { echo "FAIL config ${dsuf}"; return 1; } make -j20 2> make.err > make.log && echo "PASS compile ${dsuf}" || { echo "FAIL compile ${dsuf}"; return 1; } make -j20 cross-check 2> cross-check.err > cross-check.log && echo "PASS cross-check ${dsuf}" || { echo "FAIL cross-check ${dsuf}"; return 1; } make install DESTDIR=../install-${dsuf} 2> install.err > install.log && echo "PASS install ${dsuf}" || { echo "FAIL install ${dsuf}"; return 1; } } # Usage build_all.sh [build-many-glibcs scratch dir] [libdfp root dir] # Sanity check to ensure all the cross-toolchains exist fail=0 for t in $targets; do tc=$(eval echo \$${t}_prefix) if [ ! -e ${tc}gcc ]; then echo "Cannot find ${tc}gcc"; fail=1 fi done if [ $fail != 0 ]; then exit 1 fi if [ ! -e "$2/configure" ]; then echo "Cannot find configure." exit 1 fi SRCDIR=$(realpath $2) for t in $targets; do tc=$(eval echo \$${t}_prefix) cflags=$(eval echo \$${t}_CFLAGS) extras=$(eval echo \$${t}_extra) # subshell to avoid workdir issues on failure for e in "" $extras; do (do_one $t $tc "$cflags" $e) done done libdfp-1.0.17/scripts/check-localplt.awk000066400000000000000000000051541504475242000201300ustar00rootroot00000000000000# This is an awk script to process the output of elf/check-localplt. # The first file argument is the file of expected results. # Each line is either a comment starting with # or it looks like: # libfoo.so: function # or # libfoo.so: function + {RELA|REL} RELOC # or # libfoo.so: function ? # The first entry means that one is required. # The second entry means that one is required and relocation may also be # {RELA|REL} RELOC. # The third entry means that a PLT entry for function is optional in # libfoo.so. # The second file argument is - and this (stdin) receives the output # of the check-localplt program. BEGIN { result = 0 } FILENAME != "-" && /^#/ { next } FILENAME != "-" { if (NF == 5 && $3 == "+" && ($4 == "RELA" || $4 == "REL")) { accept_type[$1 " " $2] = $4; accept_reloc[$1 " " $2] = $5; } else if (NF != 2 && !(NF == 3 && $3 == "?")) { printf "%s:%d: bad data line: %s\n", FILENAME, FNR, $0 > "/dev/stderr"; result = 2; } else { accept[$1 " " $2] = NF == 2; } next; } NF != 2 && !(NF == 4 && ($3 == "RELA" || $3 == "REL")) { print "Unexpected output from check-localplt:", $0 > "/dev/stderr"; result = 2; next } { key = $1 " " $2 if ($3 == "RELA" || $3 == "REL") { # Entries like: # libc.so: free + RELA R_X86_64_GLOB_DAT # may be ignored. if (key in accept_type && accept_type[key] == $3 && accept_reloc[key] == $4) { # Match # libc.so: free + RELA R_X86_64_GLOB_DAT delete accept_type[key] } } else if (NF == 2 && key in accept_reloc) { # Match # libc.so: free # against # libc.so: free + RELA R_X86_64_GLOB_DAT if (key in accept_type) delete accept_type[key] } else if (key in accept) { delete accept[key] } else if ($2 ~ /__dpd_.*/ || $2 ~ /__bid_.*/) { # Intrinsic PLT references may not be avoidable. # This happens if -flto is used, so record and make # noise. Most of these should have minimal performance # impact anyways. intrinsic_plt[key] = key } else { print "Extra PLT reference:", $0; if (result == 0) result = 1; } } END { for (key in accept) { if (accept[key]) { # It's mandatory. print "Missing required PLT reference:", key; result = 1; } } # Don't make this fatal, but try to be annoying as it may not # be possible to avoid. for (key in intrinsic_plt) { print "Warning: Extra PLT for instrinsic", key > "/dev/stderr" print "Extra PLT reference", key } for (key in accept_type) { # It's mandatory. print "Missing required PLT or " accept_reloc[key] " reference:", key; result = 1; } exit(result); } libdfp-1.0.17/scripts/compile000077500000000000000000000071501504475242000161130ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2005-05-14.22 # Copyright (C) 1999-2015 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; esac ofile= cfile= eat= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we strip `-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` # Create the lock directory. # Note: use `[/.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: libdfp-1.0.17/scripts/config.guess000077500000000000000000001411511504475242000170550ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-08-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libdfp-1.0.17/scripts/config.sub000077500000000000000000001050771504475242000165270ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-08-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libdfp-1.0.17/scripts/depcomp000077500000000000000000000370551504475242000161210ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999-2015 Free Software Foundation, Inc. # 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, 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: libdfp-1.0.17/scripts/evaluate-test.sh000077500000000000000000000023321504475242000176540ustar00rootroot00000000000000#!/bin/sh # Output a test status line. # Copyright (C) 2012-2019 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C 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. # The GNU C 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 the GNU C Library; if not, see # . # usage: evaluate-test.sh test_name rc xfail stop_on_failure test_name=$1 rc=$2 orig_rc=$rc xfail=$3 stop_on_failure=$4 if [ $rc -eq 77 ]; then result="UNSUPPORTED" rc=0 else if [ $rc -eq 0 ]; then result="PASS" else result="FAIL" fi if $xfail; then result="X$result" rc=0 fi fi echo "$result: $test_name" echo "original exit status $orig_rc" if $stop_on_failure; then exit $rc else exit 0 fi libdfp-1.0.17/scripts/firstversions.awk000066400000000000000000000051061504475242000201600ustar00rootroot00000000000000# Script to preprocess Versions.all lists based on "earliest version" # specifications in the shlib-versions file. # Return -1, 0 or 1 according to whether v1 is less than, equal to or # greater than v2 as a version string. Simplified from GNU Autoconf # version; this one does not need to handle .0x fraction-style versions. function vers_compare (v1, v2) { while (length(v1) && length(v2)) { if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue; for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue; d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1); d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1); d1 += 0; d2 += 0; } else { d1 = substr(v1, 1, 1); v1 = substr(v1, 2); d2 = substr(v2, 1, 1); v2 = substr(v2, 2); } if (d1 < d2) return -1; if (d1 > d2) return 1; } if (length(v2)) return -1; if (length(v1)) return 1; return 0; } NF > 2 && $2 == ":" { for (i = 0; i <= NF - 3; ++i) firstversion[$1, i] = $(3 + i); idx[$1] = 0; next; } NF == 2 && $2 == "{" { thislib = $1; print; next } $1 == "}" { if ((thislib, idx[thislib]) in firstversion) { # We haven't seen the stated version, but have produced # others pointing to it, so we synthesize it now. printf " %s\n", firstversion[thislib, idx[thislib]]; idx[thislib]++; } print; next; } /GLIBC_PRIVATE/ { print; next } { if ((thislib, idx[thislib]) in firstversion) { f = v = firstversion[thislib, idx[thislib]]; while (vers_compare($1, v) >= 0) { delete firstversion[thislib, idx[thislib]]; idx[thislib]++; if ((thislib, idx[thislib]) in firstversion) v = firstversion[thislib, idx[thislib]]; else break; } if ($1 == v || $1 == f) # This version was the specified earliest version itself. print; else if (vers_compare($1, v) < 0) { # This version is older than the specified earliest version. print " " $1, "=", v; # Record that V has been referred to, so we will be sure to emit it # if we hit a later one without hitting V itself. usedversion[thislib, v] = 1; } else { # This version is newer than the specified earliest version. # We haven't seen that version itself or else we wouldn't be here # because we would have removed it from the firstversion array. # If there were any earlier versions that used that one, emit it now. if ((thislib, v) in usedversion) { print " " v; } print " " $1; } } else print; } libdfp-1.0.17/scripts/install-sh000077500000000000000000000220211504475242000165330ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: libdfp-1.0.17/scripts/localplt.awk000066400000000000000000000061611504475242000170540ustar00rootroot00000000000000# This awk script expects to get command-line files that are each # the output of 'readelf -WSdr' on a single shared object, and named # .../NAME.jmprel where NAME is the unadorned file name of the shared object. # It writes "NAME: SYMBOL" for each PLT entry in NAME that refers to a # symbol defined in the same object. BEGIN { result = 0 } FILENAME != lastfile { if (lastfile && jmprel_offset == 0 && rela_offset == 0 && rel_offset == 0) { print FILENAME ": *** failed to find expected output (readelf -WSdr)"; result = 2; } lastfile = FILENAME; jmprel_offset = 0; rela_offset = 0; rel_offset = 0; delete section_offset_by_address; } /^Section Headers:/ { in_shdrs = 1; next } in_shdrs && !/^ +\[/ { in_shdrs = 0 } in_shdrs && /^ +\[/ { sub(/\[ +/, "[") } in_shdrs { address = strtonum("0x" $4); offset = strtonum("0x" $5); section_offset_by_address[address] = offset; } in_shdrs { next } $1 == "Offset" && $2 == "Info" { in_relocs = 1; next } NF == 0 { in_relocs = 0 } in_relocs && relocs_offset == jmprel_offset && NF >= 5 { # Relocations against GNU_IFUNC symbols are not shown as an hexadecimal # value, but rather as the resolver symbol followed by (). if ($4 ~ /\(\)/) { print whatfile, gensub(/@.*/, "", "g", $5) } else { symval = strtonum("0x" $4); if (symval != 0) print whatfile, gensub(/@.*/, "", "g", $5) } } in_relocs && relocs_offset == rela_offset && NF >= 5 { # Relocations against GNU_IFUNC symbols are not shown as an hexadecimal # value, but rather as the resolver symbol followed by (). if ($4 ~ /\(\)/) { print whatfile, gensub(/@.*/, "", "g", $5), "RELA", $3 } else { symval = strtonum("0x" $4); if (symval != 0) print whatfile, gensub(/@.*/, "", "g", $5), "RELA", $3 } } in_relocs && relocs_offset == rel_offset && NF >= 5 { # Relocations against GNU_IFUNC symbols are not shown as an hexadecimal # value, but rather as the resolver symbol followed by (). if ($4 ~ /\(\)/) { print whatfile, gensub(/@.*/, "", "g", $5), "REL", $3 } else { symval = strtonum("0x" $4); if (symval != 0) print whatfile, gensub(/@.*/, "", "g", $5), "REL", $3 } } in_relocs { next } $1 == "Relocation" && $2 == "section" && $5 == "offset" { relocs_offset = strtonum($6); whatfile = gensub(/([^/]+)\.jmprel$/, "\\1:", 1, FILENAME); next } $2 == "(JMPREL)" { jmprel_addr = strtonum($3); if (jmprel_addr in section_offset_by_address) { jmprel_offset = section_offset_by_address[jmprel_addr]; } else { print FILENAME ": *** DT_JMPREL does not match any section's address"; result = 2; } next } $2 == "(RELA)" { rela_addr = strtonum($3); if (rela_addr in section_offset_by_address) { rela_offset = section_offset_by_address[rela_addr]; } else { print FILENAME ": *** DT_RELA does not match any section's address"; result = 2; } next } $2 == "(REL)" { rel_addr = strtonum($3); if (rel_addr in section_offset_by_address) { rel_offset = section_offset_by_address[rel_addr]; } else { print FILENAME ": *** DT_REL does not match any section's address"; result = 2; } next } END { exit(result) } libdfp-1.0.17/scripts/merge-test-results.sh000077500000000000000000000031321504475242000206430ustar00rootroot00000000000000#!/bin/sh # Merge test results of individual tests or subdirectories. # Copyright (C) 2014-2019 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C 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. # The GNU C 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 the GNU C Library; if not, see # . # usage: merge-test-results.sh -s objpfx subdir test-name... # (subdirectory tests; empty subdir at top level), or # merge-test-results.sh -t objpfx subdir-file-name subdir... # (top-level merge) set -e type=$1 objpfx=$2 shift 2 case $type in -s) subdir=$1 shift subdir=${subdir:+$subdir/} for t in "$@"; do if [ -s "$objpfx$t.test-result" ]; then head -n1 "$objpfx$t.test-result" else echo "UNRESOLVED: $subdir$t" fi done ;; -t) subdir_file_name=$1 shift for d in "$@"; do if [ -f "$objpfx$d/$subdir_file_name" ]; then cat "$objpfx$d/$subdir_file_name" else echo "ERROR: test results for $d directory missing" fi done ;; *) echo "unknown type $type" >&2 exit 1 ;; esac libdfp-1.0.17/scripts/missing000077500000000000000000000253351504475242000161410ustar00rootroot00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: libdfp-1.0.17/scripts/move-if-change000077500000000000000000000003451504475242000172470ustar00rootroot00000000000000#!/bin/sh # Like mv $1 $2, but if the files are the same, just delete $1. # Status is 0 if $2 is changed, 1 otherwise. if test -r $2 then if cmp -s $1 $2 then echo $2 is unchanged rm -f $1 else mv -f $1 $2 fi else mv -f $1 $2 fi libdfp-1.0.17/scripts/update-copyrights000077500000000000000000000050161504475242000201350ustar00rootroot00000000000000#! /bin/sh # Update copyright year lists. # Copyright (C) 2012-2015 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C 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. # The GNU C 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 the GNU C Library; if not, see # . # Run this script with the first argument being the location of # gnulib's update-copyright script. Any other arguments are ignored. # FSF copyright notices in the glibc source directory containing this # script will be updated; glibc must then be built to update generated # files. Copyright dates in --version copyright notices are not # updated. set -e export LC_ALL=C export UPDATE_COPYRIGHT_FORCE=1 export UPDATE_COPYRIGHT_USE_INTERVALS=2 export UPDATE_COPYRIGHT_MAX_LINE_LENGTH=79 update_script=$1 if ! [ -f "$update_script" ]; then echo "error: first argument must point to gnulib update-copyright script" >&2 exit 1 fi cd "$(dirname "$0")/.." files=$(find . -type f | sed 's|^\./||' | grep -v '^\.git/') for f in $files; do case $f in COPYING | COPYING.LIB | manual/fdl-1.3.texi | manual/lgpl-2.1.texi) # Licenses imported verbatim from FSF sources. ;; manual/texinfo.tex | scripts/config.guess | scripts/config.sub \ | scripts/install-sh | scripts/mkinstalldirs | scripts/move-if-change) # Other files imported verbatim from other GNU repositories. ;; po/*.po) # Files imported verbatim from the Translation Project. ;; INSTALL | */Implies | */Versions | */*.input | */*.abilist) # Generated files. ;; configure | */configure | preconfigure | */preconfigure) # Possibly generated files. if ! [ -f "$f.ac" ]; then "$update_script" "$f" fi ;; grp/initgroups.c | misc/bits/stab.def | posix/regex.h \ | sysdeps/wordsize-32/divdi3.c) # Pre-1991 gaps in copyright years, so cannot use a single range. UPDATE_COPYRIGHT_USE_INTERVALS=1 "$update_script" "$f" ;; *) "$update_script" "$f" ;; esac done libdfp-1.0.17/scripts/versions.awk000066400000000000000000000064471504475242000171210ustar00rootroot00000000000000# Combine version map fragments into version scripts for our shared objects. # Copyright (C) 1998-2015 Free Software Foundation, Inc. # Written by Ulrich Drepper , 1998. # This script expects the following variables to be defined: # defsfile name of Versions.def file # buildroot name of build directory with trailing slash # move_if_change move-if-change command # Read definitions for the versions. BEGIN { lossage = 0; nlibs=0; while (getline < defsfile) { if (/^[a-zA-Z0-9_.]+ \{/) { libs[$1] = 1; curlib = $1; while (getline < defsfile && ! /^}/) { if ($2 == "=") { renamed[curlib "::" $1] = $3; } else versions[curlib "::" $1] = 1; } } } close(defsfile); tmpfile = buildroot "Versions.tmp"; # POSIX sort needed. sort = "sort -t. -k 1,1 -k 2n,2n -k 3 > " tmpfile; } # Remove comment lines. /^ *#/ { next; } # This matches the beginning of the version information for a new library. /^[a-zA-Z0-9_.]+/ { actlib = $1; if (!libs[$1]) { printf("no versions defined for %s\n", $1) > "/dev/stderr"; ++lossage; } next; } # This matches the beginning of a new version for the current library. /^ [A-Za-z_]/ { if (renamed[actlib "::" $1]) actver = renamed[actlib "::" $1]; else if (!versions[actlib "::" $1] && $1 != "GLIBC_PRIVATE") { printf("version %s not defined for %s\n", $1, actlib) > "/dev/stderr"; ++lossage; } else actver = $1; next; } # This matches lines with names to be added to the current version in the # current library. This is the only place where we print something to # the intermediate file. /^ / { sortver=actver # Ensure GLIBC_ versions come always first sub(/^GLIBC_/," GLIBC_",sortver) printf("%s %s %s\n", actlib, sortver, $0) | sort; } function closeversion(name, oldname) { if (firstinfile) { printf(" local:\n *;\n") > outfile; firstinfile = 0; } # This version inherits from the last one only if they # have the same nonnumeric prefix, i.e. GLIBC_x.y and GLIBC_x.z # or FOO_x and FOO_y but not GLIBC_x and FOO_y. pfx = oldname; sub(/[0-9.]+/,".+",pfx); if (oldname == "" || name !~ pfx) print "};" > outfile; else printf("} %s;\n", oldname) > outfile; } function close_and_move(name, real_name) { close(name); system(move_if_change " " name " " real_name " >&2"); } # Now print the accumulated information. END { close(sort); if (lossage) { system("rm -f " tmpfile); exit 1; } oldlib = ""; oldver = ""; printf("version-maps ="); while (getline < tmpfile) { if ($1 != oldlib) { if (oldlib != "") { closeversion(oldver, veryoldver); oldver = ""; close_and_move(outfile, real_outfile); } oldlib = $1; real_outfile = buildroot oldlib ".map"; outfile = real_outfile "T"; firstinfile = 1; veryoldver = ""; printf(" %s.map", oldlib); } if ($2 != oldver) { if (oldver != "") { closeversion(oldver, veryoldver); veryoldver = oldver; } printf("%s {\n global:\n", $2) > outfile; oldver = $2; } printf(" ") > outfile; for (n = 3; n <= NF; ++n) { printf(" %s", $n) > outfile; } printf("\n") > outfile; } printf("\n"); closeversion(oldver, veryoldver); close_and_move(outfile, real_outfile); #system("rm -f " tmpfile); } libdfp-1.0.17/stdlib/000077500000000000000000000000001504475242000143245ustar00rootroot00000000000000libdfp-1.0.17/stdlib/Makefile000066400000000000000000000001561504475242000157660ustar00rootroot00000000000000libdfp_files += strtod32 strtod64 strtod128 wcstod32 wcstod64 wcstod128 \ strfromd32 strfromd64 strfromd128 libdfp-1.0.17/stdlib/strfromd128.c000066400000000000000000000001231504475242000165570ustar00rootroot00000000000000#define FUNC_NAME strfromd128 #define DECIMALN _Decimal128 #include "strfromd32.c" libdfp-1.0.17/stdlib/strfromd32.c000066400000000000000000000044501504475242000165000ustar00rootroot00000000000000/* Convert _Decimal32 to string (strfromd32). Copyright (C) 2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #include #include #include "printf_dfp.h" #ifndef FUNC_NAME #define FUNC_NAME strfromd32 #define DECIMALN _Decimal32 #endif int FUNC_NAME (char * __restrict s, size_t n, const char * __restrict format, DECIMALN fp) { /* format = %{[.][0-9]*[aAeEfFgG], else behavior undefined. Reuse our printf hook to do this. */ FILE * f = fmemopen (s, n, "w"); const void * const args = &fp; const void * const * argsp = &args; const void * const * argp = (const void * const *)&argsp; struct printf_info info = { 0 }; int num = 0; /* TODO: this is probably better than crashing. The standard isn't so clear about this. */ if (!f) { /* errno set by fmemopen. */ return 0; } info.user = sizeof (fp) == 4 ? mod_H : (sizeof (fp) == 8 ? mod_D : mod_DD); info.prec = -1; info.spec = 'a'; if (format[0] == '%') { format++; if (format[0] == '.') { format++; info.prec = 0; while (isdigit (format[0])) { info.prec = info.prec * 10 + format[0] - '0'; format++; } } switch (format[0]) { case 'a': case 'A': case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': info.spec = format[0]; num = __printf_dfp (f, &info, argp); break; } } fclose (f); return num; } libdfp-1.0.17/stdlib/strfromd64.c000066400000000000000000000001211504475242000164740ustar00rootroot00000000000000#define FUNC_NAME strfromd64 #define DECIMALN _Decimal64 #include "strfromd32.c" libdfp-1.0.17/stdlib/strtod128.c000066400000000000000000000026401504475242000162440ustar00rootroot00000000000000/* Convert string representing a number to Decimal Float value, using given locale. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef FLOAT #define FLOAT _Decimal128 #define FLOAT_HUGE_VAL DEC_INFINITY #define FLT DEC128 #define FLOAT_SIZE 128 #define FLOAT_ZERO 0.DL #define SET_MANTISSA(x,y) #define PRINTF_SPEC "%DDf" #define __DEC_MANT_DIG__ __DEC128_MANT_DIG__ #define __DEC_MAX_EXP__ __DEC128_MAX_EXP__ #define __DEC_MIN_EXP__ __DEC128_MIN_EXP__ #endif #include "strtod32.c" libdfp-1.0.17/stdlib/strtod32.c000066400000000000000000000625541504475242000161700ustar00rootroot00000000000000/* Convert string representing a number to Decimal Float value, using given locale. Copyright (C) 1997-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian Pete Eberlein Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* Adapted primarily from stdlib/strtod_l.c by Ulrich Drepper */ /* * TODO: SET_MANTISSA macro for preserving NaN info (or parse as mantissa) * TODO: Check that hexadecimal input is done properly... particularly hex * exponants */ #define _GNU_SOURCE #include //#include /* wchar.h has to be included BEFORE stdio.h or it loses function * definitions when dfp/wchar.h uses #include_next . */ #include #include /* Pick up the strtod* prototypes. */ #include #include /* For newlocale prototype. */ #include /* For nl_langinfo prototype. */ #include /* isspace_l et. al. */ #include /* strncasecmp_l */ #include /* wcstod* internal interfaces */ #include /* strtod* internal interfaces. */ //#include #include /* HUGE_VAL_D32, etc. */ #include #define __set_errno(the_errno) *__errno_location() = the_errno //#include #include /* For CHAR_MAX */ #include #ifndef FLOAT # define FLOAT _Decimal32 # define FLOAT_HUGE_VAL HUGE_VAL_D32 # define FLOAT_SIZE 32 # define FLT DEC32 # define FLOAT_ZERO 0.DF # define SET_MANTISSA(x,y) # define PRINTF_SPEC "%Hf" # define __DEC_MANT_DIG__ __DEC32_MANT_DIG__ # define __DEC_MAX_EXP__ __DEC32_MAX_EXP__ # define __DEC_MIN_EXP__ __DEC32_MIN_EXP__ #endif #define DEC_TYPE FLOAT #define _DECIMAL_SIZE FLOAT_SIZE #include #ifdef USE_WIDE_CHAR extern unsigned long long int ____wcstoull_l_internal (const wchar_t *, wchar_t **, int, int, __locale_t); # include # define STRTO_PREFIX wcsto # define STRING_TYPE wchar_t # define CHAR_TYPE wint_t # define L_(Ch) L##Ch # define ISSPACE(Ch) iswspace_l ((Ch), loc) # define ISDIGIT(Ch) iswdigit_l ((Ch), loc) # define TOLOWER(Ch) towlower_l ((Ch), loc) //# define TOLOWER_C(Ch) towlower_l ((Ch), nl_C_locobj_ptr) # define TOLOWER_C(Ch) towlower_l ((Ch), C_locale) # define STRNCASECMP(S1, S2, N) \ wcsncasecmp_l ((S1), (S2), (N), C_locale) //__wcsncasecmp_l ((S1), (S2), (N), C_locale) // __wcsncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr) //# define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, loc) # define STRTOULL(S, E, B) wcstoull_l ((S), (E), (B), loc) #else # define STRTO_PREFIX strto # define STRING_TYPE char # define CHAR_TYPE char # define L_(Ch) Ch # define ISSPACE(Ch) isspace_l ((Ch), loc) # define ISDIGIT(Ch) isdigit_l ((Ch), loc) # define TOLOWER(Ch) tolower_l ((Ch), loc) # define TOLOWER_C(Ch) tolower_l ((Ch), C_locale) //# define TOLOWER_C(Ch) tolower_l ((Ch), _nl_C_locobj_ptr) # define STRNCASECMP(S1, S2, N) \ strncasecmp_l ((S1), (S2), (N), C_locale) //__strncasecmp_l ((S1), (S2), (N), C_locale) // __strncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr) //# define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, loc) # define STRTOULL(S, E, B) strtoull_l ((S), (E), (B), loc) #endif /* Constants we need from float.h; select the set for the FLOAT precision. */ #define MANT_DIG PASTE(PASTE(__,FLT),_MANT_DIG__) #define DIG PASTE(PASTE(__,FLT),_DIG__) //#define MAX_EXP PASTE(FLT,_MAX_EXP) //#define MIN_EXP PASTE(FLT,_MIN_EXP) #define MAX_10_EXP PASTE(PASTE(__,FLT),_MAX_EXP__) #define MIN_10_EXP PASTE(PASTE(__,FLT),_MIN_EXP__) #define FUNCTION_NAME PASTE(PASTE(STRTO_PREFIX,d),FLOAT_SIZE) #define __FUNCTION_NAME PASTE(__,FUNCTION_NAME) #define FUNCTION_INTERNAL PASTE(__FUNCTION_NAME,_internal) #define FUNCTION_L_INTERNAL PASTE(__FUNCTION_NAME,_l_internal) /* Extra macros required to get FLT expanded before the pasting. */ #ifndef PASTE # define PASTE(a,b) PASTE1(a,b) # define PASTE1(a,b) a##b #endif #ifndef FUNC_D # define FUNC_D(x) PASTE(x,PASTE(d,_DECIMAL_SIZE)) #endif #define RETURN(val,end) \ do { if (endptr != NULL) *endptr = (STRING_TYPE *) (end); \ return val; } while (0) #define NDEBUG 1 #include /* From glibc's stdlib/grouping.c */ #ifndef MAX #define MAX(a,b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \ _a > _b ? _a : _b; }) #endif /* Find the maximum prefix of the string between BEGIN and END which satisfies the grouping rules. It is assumed that at least one digit follows BEGIN directly. */ static const STRING_TYPE * #ifdef USE_WIDE_CHAR __correctly_grouped_prefixwc (const STRING_TYPE *begin, const STRING_TYPE *end, wchar_t thousands, #else __correctly_grouped_prefixmb (const STRING_TYPE *begin, const STRING_TYPE *end, const char *thousands, #endif const char *grouping) { #ifndef USE_WIDE_CHAR size_t thousands_len; int cnt; #endif if (grouping == NULL) return end; #ifndef USE_WIDE_CHAR thousands_len = strlen (thousands); #endif while (end > begin) { const STRING_TYPE *cp = end - 1; const char *gp = grouping; /* Check first group. */ while (cp >= begin) { #ifdef USE_WIDE_CHAR if (*cp == thousands) break; #else if (cp[thousands_len - 1] == *thousands) { for (cnt = 1; thousands[cnt] != '\0'; ++cnt) if (thousands[cnt] != cp[thousands_len - 1 - cnt]) break; if (thousands[cnt] == '\0') break; } #endif --cp; } /* We allow the representation to contain no grouping at all even if the locale specifies we can have grouping. */ if (cp < begin) return end; if (end - cp == (int) *gp + 1) { /* This group matches the specification. */ const STRING_TYPE *new_end; if (cp < begin) /* There is just one complete group. We are done. */ return end; /* CP points to a thousands separator character. The preceding remainder of the string from BEGIN to NEW_END is the part we will consider if there is a grouping error in this trailing portion from CP to END. */ new_end = cp - 1; /* Loop while the grouping is correct. */ while (1) { /* Get the next grouping rule. */ ++gp; if (*gp == 0) /* If end is reached use last rule. */ --gp; /* Skip the thousands separator. */ --cp; if (*gp == CHAR_MAX #if CHAR_MIN < 0 || *gp < 0 #endif ) { /* No more thousands separators are allowed to follow. */ while (cp >= begin) { #ifdef USE_WIDE_CHAR if (*cp == thousands) break; #else for (cnt = 0; thousands[cnt] != '\0'; ++cnt) if (thousands[cnt] != cp[thousands_len - cnt - 1]) break; if (thousands[cnt] == '\0') break; #endif --cp; } if (cp < begin) /* OK, only digits followed. */ return end; } else { /* Check the next group. */ const STRING_TYPE *group_end = cp; while (cp >= begin) { #ifdef USE_WIDE_CHAR if (*cp == thousands) break; #else for (cnt = 0; thousands[cnt] != '\0'; ++cnt) if (thousands[cnt] != cp[thousands_len - cnt - 1]) break; if (thousands[cnt] == '\0') break; #endif --cp; } if (cp < begin && group_end - cp <= (int) *gp) /* Final group is correct. */ return end; if (cp < begin || group_end - cp != (int) *gp) /* Incorrect group. Punt. */ break; } } /* The trailing portion of the string starting at NEW_END contains a grouping error. So we will look for a correctly grouped number in the preceding portion instead. */ end = new_end; } else { /* Even the first group was wrong; determine maximum shift. */ if (end - cp > (int) *gp + 1) end = cp + (int) *gp + 1; else if (cp < begin) /* This number does not fill the first group, but is correct. */ return end; else /* CP points to a thousands separator character. */ end = cp; } } return MAX (begin, end); } /* This is of the form __strtod32_l_internal() */ FLOAT FUNCTION_L_INTERNAL (const STRING_TYPE * nptr, STRING_TYPE ** endptr, int group, locale_t loc) { FLOAT d32 = FLOAT_ZERO; int negative; /* The sign of the number. */ int exponent; /* Exponent of the number. */ /* Running pointer after the last character processed in the string. */ const STRING_TYPE *cp, *tp; /* Start of significant part of the number. */ const STRING_TYPE *startp, *start_of_digits; /* Points at the character following the integer and fractional digits. */ const STRING_TYPE *expp; /* Total number of digit and number of digits in integer part. */ int dig_no, int_no, lead_zero; /* Contains the last character read. */ CHAR_TYPE c; __locale_t C_locale; /* We should get wint_t from , but not all GCC versions define it there. So define it ourselves if it remains undefined. */ #ifndef _WINT_T typedef unsigned int wint_t; #endif /* The radix character of the current locale. */ #ifdef USE_WIDE_CHAR const char *decimalmb; wchar_t decimal; #else const char *decimal; size_t decimal_len; #endif /* The thousands character of the current locale. */ #ifdef USE_WIDE_CHAR const char *thousandsmb = NULL; wchar_t thousands = L'\0'; #else const char *thousands = NULL; /* Used in several places. */ int cnt; #endif /* The numeric grouping specification of the current locale, in the format described in . */ const char *grouping; C_locale = newlocale(LC_ALL_MASK, setlocale (LC_ALL, NULL),NULL); if (group) { //grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); grouping = nl_langinfo (__GROUPING); if (*grouping <= 0 || *grouping == CHAR_MAX) grouping = NULL; else { /* Figure out the thousands separator character. */ #ifdef USE_WIDE_CHAR thousandsmb = nl_langinfo(_NL_NUMERIC_THOUSANDS_SEP_WC); mbrtowc(&thousands,thousandsmb, CHAR_MAX, NULL); if (thousands == L'\0') grouping = NULL; #else thousands = nl_langinfo (__THOUSANDS_SEP); if (*thousands == '\0') { thousands = NULL; grouping = NULL; } #endif } } else grouping = NULL; /* Find the locale's decimal point character. */ #ifdef USE_WIDE_CHAR decimalmb = nl_langinfo(_NL_NUMERIC_DECIMAL_POINT_WC); mbrtowc(&decimal,decimalmb, CHAR_MAX, NULL); assert (decimal != L'\0'); # define decimal_len 1 #else // decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT); decimal = nl_langinfo(__DECIMAL_POINT); decimal_len = strlen (decimal); assert (decimal_len > 0); #endif /* Prepare number representation. */ exponent = 0; negative = 0; /* Parse string to get maximal legal prefix. We need the number of characters of the integer part, the fractional part and the exponent. */ cp = nptr - 1; /* Ignore leading white space. */ do c = *++cp; /* c is last character read, cp is last character processed. */ while (ISSPACE (c)); /* Get sign of the result. */ if (c == L_('-')) { negative = 1; c = *++cp; } else if (c == L_('+')) c = *++cp; /* Return 0.0 if no legal string is found. No character is used even if a sign was found. */ #ifdef USE_WIDE_CHAR if (c == (wint_t) decimal && (wint_t) cp[1] >= L'0' && (wint_t) cp[1] <= L'9') { /* We accept it. This funny construct is here only to indent the code directly. */ } #else for (cnt = 0; decimal[cnt] != '\0'; ++cnt) if (cp[cnt] != decimal[cnt]) break; if (decimal[cnt] == '\0' && cp[cnt] >= '0' && cp[cnt] <= '9') { /* We accept it. This funny construct is here only to indent the code directly. */ } #endif else if (c < L_('0') || c > L_('9')) { /* Check for `INF' or `INFINITY'. */ if (TOLOWER_C (c) == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0) { /* Return +/- infinity. */ if (endptr != NULL) *endptr = (STRING_TYPE *) (cp + (STRNCASECMP (cp + 3, L_("inity"), 5) == 0 ? 8 : 3)); freelocale(C_locale); return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; } if (TOLOWER_C (c) == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0) { /* Return NaN. */ FLOAT retval = DEC_NAN; cp += 3; /* Match `(n-char-sequence-digit)'. */ if (*cp == L_('(')) { startp = cp; do ++cp; while ((*cp >= L_('0') && *cp <= L_('9')) || (TOLOWER (*cp) >= L_('a') && TOLOWER (*cp) <= L_('z')) || *cp == L_('_')); if (*cp != L_(')')) /* The closing brace is missing. Only match the NAN part. */ cp = startp; #if 0 else { /* This is a system-dependent way to specify the bitmask used for the NaN. We expect it to be a number which is put in the mantissa of the number. */ STRING_TYPE *endp; unsigned long long int mant; mant = STRTOULL (startp + 1, &endp, 0); if (endp == cp) { SET_MANTISSA (retval, mant); } } #endif } if (endptr != NULL) *endptr = (STRING_TYPE *) cp; freelocale(C_locale); return retval; } /* It is really a text we do not recognize. */ freelocale(C_locale); RETURN (0.0, nptr); } /* Record the start of the digits, in case we will check their grouping. */ start_of_digits = startp = cp; /* Ignore leading zeroes. This helps us to avoid useless computations. */ #ifdef USE_WIDE_CHAR while (c == L'0' || ((wint_t) thousands != L'\0' && c == (wint_t) thousands)) c = *++cp; #else if (thousands == NULL) while (c == '0') c = *++cp; else { /* We also have the multibyte thousands string. */ while (1) { if (c != '0') { for (cnt = 0; thousands[cnt] != '\0'; ++cnt) if (c != thousands[cnt]) break; if (thousands[cnt] != '\0') break; } c = *++cp; } } #endif /* If no other digit but a '0' is found the result is 0.0. Return current read pointer. */ if ((c < L_('0') || c > L_('9')) #ifdef USE_WIDE_CHAR && c != (wint_t) decimal #else && ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt) if (decimal[cnt] != cp[cnt]) break; decimal[cnt] != '\0'; }) #endif && ((CHAR_TYPE) TOLOWER (c) != L_('e'))) { #ifdef USE_WIDE_CHAR tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands, grouping); #else tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands, grouping); #endif /* If TP is at the start of the digits, there was no correctly grouped prefix of the string; so no number found. */ freelocale(C_locale); RETURN (negative ? -FLOAT_ZERO : FLOAT_ZERO, tp == start_of_digits ? nptr : tp); } /* Remember first significant digit and read following characters until the decimal point, exponent character or any non-FP number character. */ startp = cp; dig_no = 0; while (1) { if (c >= L_('0') && c <= L_('9')) ++dig_no; else { #ifdef USE_WIDE_CHAR if ((wint_t) thousands == L'\0' || c != (wint_t) thousands) /* Not a digit or separator: end of the integer part. */ break; #else if (thousands == NULL) break; else { for (cnt = 0; thousands[cnt] != '\0'; ++cnt) if (thousands[cnt] != cp[cnt]) break; if (thousands[cnt] != '\0') break; } #endif } c = *++cp; } if (grouping && dig_no > 0) { /* Check the grouping of the digits. */ #ifdef USE_WIDE_CHAR tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands, grouping); #else tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands, grouping); #endif if (cp != tp) { /* Less than the entire string was correctly grouped. */ if (tp == start_of_digits) { /* No valid group of numbers at all: no valid number. */ freelocale(C_locale); RETURN (FLOAT_ZERO, nptr); } if (tp < startp) { /* The number is validly grouped, but consists only of zeroes. The whole value is zero. */ freelocale(C_locale); RETURN (negative ? -FLOAT_ZERO : FLOAT_ZERO, tp); } /* Recompute DIG_NO so we won't read more digits than are properly grouped. */ cp = tp; dig_no = 0; for (tp = startp; tp < cp; ++tp) if (*tp >= L_('0') && *tp <= L_('9')) ++dig_no; int_no = dig_no; lead_zero = 0; goto number_parsed; } } /* We have the number digits in the integer part. Whether these are all or any is really a fractional digit will be decided later. */ int_no = dig_no; lead_zero = int_no == 0 ? -1 : 0; /* FIXME: Why was this -1 */ /* Read the fractional digits. A special case are the 'american style' numbers like `16.' i.e. with decimal but without trailing digits. */ if ( #ifdef USE_WIDE_CHAR c == (wint_t) decimal #else ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt) if (decimal[cnt] != cp[cnt]) break; decimal[cnt] == '\0'; }) #endif ) { cp += decimal_len; c = *cp; while (c >= L_('0') && c <= L_('9')) { if (c != L_('0') && lead_zero == -1) lead_zero = dig_no - int_no; ++dig_no; c = *++cp; } } /* Remember start of exponent (if any). */ expp = cp; /* Read exponent. */ if (TOLOWER (c) == L_('e')) { int exp_negative = 0; c = *++cp; if (c == L_('-')) { exp_negative = 1; c = *++cp; } else if (c == L_('+')) c = *++cp; if (c >= L_('0') && c <= L_('9')) { int exp_limit; /* Get the exponent limit. */ exp_limit = (exp_negative ? -MIN_10_EXP + MANT_DIG + int_no : MAX_10_EXP - int_no + lead_zero); do { exponent *= 10; if (exponent > exp_limit) /* The exponent is too large/small to represent a valid number. */ { FLOAT result; /* We have to take care for special situation: a joker might have written "0.0e100000" which is in fact zero. */ if (lead_zero == -1) result = negative ? -FLOAT_ZERO : FLOAT_ZERO; else { /* Overflow or underflow. */ __set_errno (ERANGE); result = (exp_negative ? FLOAT_ZERO : negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL); } /* Accept all following digits as part of the exponent. */ do ++cp; while (*cp >= L_('0') && *cp <= L_('9')); freelocale(C_locale); RETURN (result, cp); /* NOTREACHED */ } exponent += c - L_('0'); c = *++cp; } while (c >= L_('0') && c <= L_('9')); if (exp_negative) exponent = -exponent; } else cp = expp; } /* We don't want to have to work with trailing zeroes after the radix. */ #if 0 /* Actually, for DFP, we do. */ if (dig_no > int_no) { while (expp[-1] == L_('0')) { --expp; /*--exponent;*/ /* FIXME: This can't be here */ --dig_no; } assert (dig_no >= int_no); } if (dig_no == int_no && dig_no > 0 && exponent < 0) do { while (! ISDIGIT (expp[-1])) --expp; if (expp[-1] != L_('0')) break; --expp; --dig_no; --int_no; ++exponent; } while (dig_no > 0 && exponent < 0); #endif number_parsed: /* The whole string is parsed. Store the address of the next character. */ if (endptr) *endptr = (STRING_TYPE *) cp; if (dig_no == 0) { if (exponent == 0) { freelocale(C_locale); return negative ? -FLOAT_ZERO : FLOAT_ZERO; } #if NUMDIGITS_SUPPORT==0 d32 += 1; while(exponent-- > 0) /* FIXME: this doesn't work right for exponent>0 */ d32 *= 10; while(++exponent < 0) d32 /= 10; d32 -= d32; #else d32 = FUNC_D(setexp) (d32, exponent); #endif freelocale(C_locale); return negative ? -d32 : d32; } if (lead_zero) { /* Find the decimal point */ #ifdef USE_WIDE_CHAR while (*startp != decimal) ++startp; #else while (1) { if (*startp == decimal[0]) { for (cnt = 1; decimal[cnt] != '\0'; ++cnt) if (decimal[cnt] != startp[cnt]) break; if (decimal[cnt] == '\0') break; } ++startp; } #endif lead_zero = (lead_zero < 0? 0 : lead_zero); startp += lead_zero + decimal_len; exponent -= lead_zero; dig_no -= lead_zero; } /* Now we have the number of digits in total and the integer digits as well as the exponent and its sign. We can decide whether the read digits are really integer digits or belong to the fractional part; i.e. we normalize 123e-2 to 1.23. */ { register int incr = (exponent < 0 ? MAX (-int_no, exponent) : MIN (dig_no - int_no, exponent)); int_no += incr; exponent -= incr; } if (int_no + exponent > MAX_10_EXP) { __set_errno (ERANGE); freelocale(C_locale); return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; } /* Obvious underflow before normalization. */ if (exponent < MIN_10_EXP - MANT_DIG + 1 ) { __set_errno (ERANGE); freelocale(C_locale); return FLOAT_ZERO; } /* Read in the integer portion of the input string */ if (int_no > 0) { /* Read the integer part as a d32. */ int digcnt = int_no; while (int_no > MAX_10_EXP + 1) { digcnt--; exponent++; } do { /* There might be thousands separators or radix characters in the string. But these all can be ignored because we know the format of the number is correct and we have an exact number of characters to read. */ #ifdef USE_WIDE_CHAR if (*startp < L_('0') || *startp > L_('9')) ++startp; #else if (*startp < L_('0') || *startp > L_('9')) { int inner = 0; if (thousands != NULL && *startp == *thousands && ({ for (inner = 1; thousands[inner] != '\0'; ++inner) if (thousands[inner] != startp[inner]) break; thousands[inner] == '\0'; }) ) startp += inner; else startp += decimal_len; } #endif d32 = d32 * 10 + (*startp - L_('0')); ++startp; } while (--digcnt > 0); } /* If we haven't filled our datatype, read in the fractional digits */ if (int_no <= MANT_DIG && dig_no > int_no) { /* Read the decimal part as a FLOAT. */ int digcnt = dig_no - int_no; /* There might be radix characters in the string. But these all can be ignored because we know the format of the number is correct and we have an exact number of characters to read. */ /*do { frac = frac/10 + *(startp+digcnt-1) - L_('0'); } while (--digcnt > 0); frac /= 10; d32 += frac;*/ int_no = 0; do { #ifdef USE_WIDE_CHAR if (*startp < L_('0') || *startp > L_('9')) ++startp; #else if (*startp < '0' || *startp > '9') startp += decimal_len; #endif /* We need the extra digit to get proper rounding. */ if (int_no < MANT_DIG + 1) { d32 = d32*10 + (*startp - L_('0')); ++startp; --exponent; int_no++; } } while (--digcnt > 0); } #if NUMDIGITS_SUPPORT==0 while(exponent-- > 0) d32 *= 10; while(++exponent < 0) d32 /= 10; #else /* Computed underflow after normalization. */ if ( exponent < (__DEC_MIN_EXP__ - __DEC_MANT_DIG__)) { __set_errno (ERANGE); freelocale(C_locale); return FLOAT_ZERO; } /* Left justification allows us to set a positive exponent that's near * __DEC*_MAX_EXP__, i.e. _almost_ overflowing. Complete left justification * may be overkill for most numbers in this situation, so perhaps a specific * digit shift will be a better solution in the future. */ if (exponent > (__DEC_MAX_EXP__ - __DEC_MANT_DIG__)) d32 = FUNC_D(left_justify) (d32); d32 = FUNC_D(setexp) (d32, FUNC_D (getexp) (d32) + exponent); #endif freelocale(C_locale); return negative? -d32:d32; } hidden_def(FUNCTION_L_INTERNAL) /* This is of the form __strtod32_internal() */ FLOAT FUNCTION_INTERNAL (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group) { char * curlocale; __locale_t cur_locale_t; FLOAT ret_val; curlocale = setlocale(LC_ALL,NULL); cur_locale_t = newlocale(LC_ALL_MASK, curlocale, NULL); ret_val = FUNCTION_L_INTERNAL (nptr,endptr,group,cur_locale_t); freelocale(cur_locale_t); return ret_val; } hidden_def(FUNCTION_INTERNAL) /* This is of the form strtod32() */ FLOAT #ifdef weak_function weak_function #endif FUNCTION_NAME (const STRING_TYPE *nptr, STRING_TYPE **endptr) { char * curlocale; __locale_t cur_locale_t; FLOAT ret_val; curlocale = setlocale(LC_ALL,NULL); cur_locale_t = newlocale(LC_ALL_MASK, curlocale, NULL); ret_val = FUNCTION_L_INTERNAL(nptr, endptr, 0, cur_locale_t); freelocale(cur_locale_t); return ret_val; } libdfp-1.0.17/stdlib/strtod64.c000066400000000000000000000026311504475242000161630ustar00rootroot00000000000000/* Convert string representing a number to Decimal Float value, using given locale. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef FLOAT #define FLOAT _Decimal64 #define FLOAT_HUGE_VAL DEC_INFINITY #define FLT DEC64 #define FLOAT_SIZE 64 #define FLOAT_ZERO 0.DD #define SET_MANTISSA(x,y) #define PRINTF_SPEC "%Df" #define __DEC_MANT_DIG__ __DEC64_MANT_DIG__ #define __DEC_MAX_EXP__ __DEC64_MAX_EXP__ #define __DEC_MIN_EXP__ __DEC64_MIN_EXP__ #endif #include "strtod32.c" libdfp-1.0.17/stdlib/wcstod128.c000066400000000000000000000021251504475242000162260ustar00rootroot00000000000000/* Convert string representing a number to Decimal Float value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define USE_WIDE_CHAR 1 #include "strtod128.c" libdfp-1.0.17/stdlib/wcstod32.c000066400000000000000000000021241504475242000161370ustar00rootroot00000000000000/* Convert string representing a number to Decimal Float value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define USE_WIDE_CHAR 1 #include "strtod32.c" libdfp-1.0.17/stdlib/wcstod64.c000066400000000000000000000021241504475242000161440ustar00rootroot00000000000000/* Convert string representing a number to Decimal Float value Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Joseph Kerian The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define USE_WIDE_CHAR 1 #include "strtod64.c" libdfp-1.0.17/sysdeps/000077500000000000000000000000001504475242000145355ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/aarch64/000077500000000000000000000000001504475242000157655ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/aarch64/Implies000066400000000000000000000000651504475242000173130ustar00rootroot00000000000000sysdeps/wordsize-64 sysdeps/soft-dfp/bid sysdeps/bid libdfp-1.0.17/sysdeps/aarch64/Makefile000066400000000000000000000000001504475242000174130ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/aarch64/Versions000066400000000000000000000002451504475242000175210ustar00rootroot00000000000000libdfp { LIBDFP_1.0.15 { __bid_extendsdtf; __bid_extendddtf; __bid_trunctdtf; __bid_trunctfsd; __bid_trunctfdd; __bid_extendtftd; } } libdfp-1.0.17/sysdeps/aarch64/libdfp.abilist000066400000000000000000000133511504475242000206010ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __bid_adddd3 F __bid_addsd3 F __bid_addtd3 F __bid_divdd3 F __bid_divsd3 F __bid_divtd3 F __bid_eqdd2 F __bid_eqsd2 F __bid_eqtd2 F __bid_extendddtd2 F __bid_extenddfdd F __bid_extenddftd F __bid_extendsddd2 F __bid_extendsddf F __bid_extendsdtd2 F __bid_extendsfdd F __bid_extendsfsd F __bid_extendsftd F __bid_fixdddi F __bid_fixddsi F __bid_fixsddi F __bid_fixsdsi F __bid_fixtddi F __bid_fixtdsi F __bid_fixunsdddi F __bid_fixunsddsi F __bid_fixunssddi F __bid_fixunssdsi F __bid_fixunstddi F __bid_fixunstdsi F __bid_floatdidd F __bid_floatdisd F __bid_floatditd F __bid_floatsidd F __bid_floatsisd F __bid_floatsitd F __bid_floatunsdidd F __bid_floatunsdisd F __bid_floatunsditd F __bid_floatunssidd F __bid_floatunssisd F __bid_floatunssitd F __bid_gedd2 F __bid_gesd2 F __bid_getd2 F __bid_gtdd2 F __bid_gtsd2 F __bid_gttd2 F __bid_ledd2 F __bid_lesd2 F __bid_letd2 F __bid_ltdd2 F __bid_ltsd2 F __bid_lttd2 F __bid_muldd3 F __bid_mulsd3 F __bid_multd3 F __bid_nedd2 F __bid_nesd2 F __bid_netd2 F __bid_subdd3 F __bid_subsd3 F __bid_subtd3 F __bid_truncdddf F __bid_truncddsd2 F __bid_truncddsf F __bid_truncdfsd F __bid_truncsdsf F __bid_trunctddd2 F __bid_trunctddf F __bid_trunctdsd2 F __bid_trunctdsf F __bid_unorddd2 F __bid_unordsd2 F __bid_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A __bid_fixddti F __bid_fixsdti F __bid_fixtdti F __bid_fixunsddti F __bid_fixunssdti F __bid_fixunstdti F __bid_floattidd F __bid_floattisd F __bid_floattitd F __bid_floatunstidd F __bid_floatunstisd F __bid_floatunstitd F LIBDFP_1.0.15 LIBDFP_1.0.15 A __bid_extendddtf F __bid_extendsdtf F __bid_extendtftd F __bid_trunctdtf F __bid_trunctfdd F __bid_trunctfsd F fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/sysdeps/bid/000077500000000000000000000000001504475242000152735ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/bid/Implies000066400000000000000000000000311504475242000166120ustar00rootroot00000000000000libdecnumber/bid libbid/ libdfp-1.0.17/sysdeps/bid/Makefile000066400000000000000000000017621504475242000167410ustar00rootroot00000000000000# Copyright (C) 2015 Free Software Foundation, Inc. # # This file is part of the Decimal Floating Point C Library. # # The Decimal Floating Point C Library is free software; you can # redistribute it and/or modify it under the terms of the GNU Lesser # General Public License version 2.1. # # The Decimal Floating Point C 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 version 2.1 for more details. # # You should have received a copy of the GNU Lesser General Public # License version 2.1 along with the Decimal Floating Point C Library; # if not, write to the Free Software Foundation, Inc., 51 Franklin # Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Please see libdfp/COPYING.txt for more information. */ libdfp_files += bid-private binpowof10 decpowof2 ifeq ($(libdfp-has-timode),yes) libdfp_files += ticonstants endif libdfp-1.0.17/sysdeps/bid/Versions000066400000000000000000000027761504475242000170420ustar00rootroot00000000000000# These are added in this sysdeps/bid/Versions file because the # C source files don't indicate "__bid" in the filename and they # live in the common base-math/ directory. libdfp { LIBDFP_1.0.0 { __bid_addsd3; __bid_adddd3; __bid_addtd3; __bid_subsd3; __bid_subdd3; __bid_subtd3; __bid_mulsd3; __bid_muldd3; __bid_multd3; __bid_divsd3; __bid_divdd3; __bid_divtd3; __bid_extendsddd2; __bid_extendsdtd2; __bid_extendddtd2; __bid_trunctdsd2; __bid_truncddsd2; __bid_trunctddd2; __bid_unordsd2; __bid_unorddd2; __bid_unordtd2; __bid_eqsd2; __bid_eqdd2; __bid_eqtd2; __bid_nesd2; __bid_nedd2; __bid_netd2; __bid_gesd2; __bid_gedd2; __bid_getd2; __bid_gtsd2; __bid_gtdd2; __bid_gttd2; __bid_ltsd2; __bid_ltdd2; __bid_lttd2; __bid_lesd2; __bid_ledd2; __bid_letd2; __bid_fixsdsi; __bid_fixddsi; __bid_fixtdsi; __bid_fixsddi; __bid_fixdddi; __bid_fixtddi; __bid_fixunssdsi; __bid_fixunsddsi; __bid_fixunstdsi; __bid_fixunssddi; __bid_fixunsdddi; __bid_fixunstddi; __bid_floatsisd; __bid_floatsidd; __bid_floatsitd; __bid_floatdisd; __bid_floatdidd; __bid_floatditd; __bid_floatunssisd; __bid_floatunssidd; __bid_floatunssitd; __bid_floatunsdisd; __bid_floatunsdidd; __bid_floatunsditd; } LIBDFP_1.0.13 { __bid_floattitd; __bid_floattidd; __bid_floattisd; __bid_floatunstitd; __bid_floatunstidd; __bid_floatunstisd; __bid_fixunssdti; __bid_fixunsddti; __bid_fixunstdti; __bid_fixsdti; __bid_fixddti; __bid_fixtdti; } } libdfp-1.0.17/sysdeps/bid/bid-private.c000066400000000000000000000141001504475242000176410ustar00rootroot00000000000000/* Data types for BID format output. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include #include "bid-private.h" #include "get_digits.h" const struct ieee754r_c_field c_decoder[32] = { {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 0, 3}, /* 00000-00011 */ {0, 0, 0, 4}, {0, 0, 0, 5}, {0, 0, 0, 6}, {0, 0, 0, 7}, /* 00100-00111 */ {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}, {0, 0, 1, 3}, /* 01000-01011 */ {0, 0, 1, 4}, {0, 0, 1, 5}, {0, 0, 1, 6}, {0, 0, 1, 7}, /* 01100-01111 */ {0, 0, 2, 0}, {0, 0, 2, 1}, {0, 0, 2, 2}, {0, 0, 2, 3}, /* 10000-10011 */ {0, 0, 2, 4}, {0, 0, 2, 5}, {0, 0, 2, 5}, {0, 0, 2, 7}, /* 10100-10111 */ {0, 0, 0, 8}, {0, 0, 0, 9}, {0, 0, 1, 8}, {0, 0, 1, 9}, /* 11000-11011 */ {0, 0, 2, 8}, {0, 0, 2, 9}, {0, 1, 0, 0}, {1, 0, 0, 0} /* 11100-11111 */ }; /* Return the sign, exponent and coefficient from a _Decimal32 encoded in BID format. The encoding is defined as (−1)^s × 10^(E−Bp) × c sign_p exp_p str */ void __get_digits_d32 (_Decimal32 x, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p) { unsigned int result; int i, size, exp = 0; struct ieee754r_c_field c_f; union ieee754r_Decimal32 d; d.sd = x; c_f = c_decoder[d.nan.nan]; if (c_f.is_nan) { exp = 0; result = 0; } else if (d.divided.c != 3) { exp = (d.si >> 23) & 0xFF; // 8 bits. result = d.si & 0x7FFFFFUl; // 23 bits. } else { exp = (d.si >> 21) & 0xFF; result = 4 << 21; result |= d.si & 0x1FFFFFUL; // 21 bits. } if (result >= DECIMAL32_TH) result = 0; exp -= DECIMAL32_Bias; sprintf (str, "%u", result); size = (7 - strlen (str)); for (i = 0; i < size; i++) str[i] = '0'; sprintf (str + i, "%u", result); str[7] = '\0'; if (sign_p) *sign_p = d.divided.negative; if (exp_p) *exp_p = exp; if (nan_p) *nan_p = c_f.is_nan; if (inf_p) *inf_p = c_f.is_inf; } /* Return the sign, exponent and coefficient from a _Decimal64 encoded in BID format. The encoding is defined as (−1)^s × 10^(E−Bp) × c sign_p exp_p str */ void __get_digits_d64 (_Decimal64 x, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p) { unsigned long long int result; int i, size, exp = 0; struct ieee754r_c_field c_f; union ieee754r_Decimal64 d; d.dd = x; c_f = c_decoder[d.nan.nan]; if (c_f.is_nan) { exp = 0; result = 0; } else if (d.divided.c != 3) { exp = (d.di[1] >> 21) & 0x3FF; // 10 bits. result = d.di[1] & 0x1FFFFF; // 21 bits. result = result << 32; result |= d.di[0] & 0xFFFFFFFFUL; // 32 bits. } else { exp = (d.di[1] >> 19) & 1023; result = 4 << 19; result |= d.di[1] & 0x7FFFF; // 19 bits. result = result << 32; result |= d.di[0] & 0xFFFFFFFFUL; } if (result >= DECIMAL64_TH) result = 0; exp -= DECIMAL64_Bias; sprintf (str, "%llu", result); size = (16 - strlen (str)); for (i = 0; i < size; i++) str[i] = '0'; sprintf (str + i, "%llu", result); str[16] = '\0'; if (sign_p) *sign_p = d.divided.negative; if (exp_p) *exp_p = exp; if (nan_p) *nan_p = c_f.is_nan; if (inf_p) *inf_p = c_f.is_inf; } void __get_digits_d128 (_Decimal128 x, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p) { int i, j, exp = 0; unsigned int digits[NDIGITS_128] = { 0 }; struct ieee754r_c_field c_f; union ieee754r_Decimal128 d; unsigned long long int result[2]; d.td = x; c_f = c_decoder[d.nan.nan]; if (c_f.is_nan) { exp = 0; result[1] = 0; result[0] = 0; } else if (d.divided.c != 3) { exp = (d.ti[3] >> 17) & 0x3FFF; // 14 bits. result[1] = d.ti[3] & 0x1FFFF; // 17 bits. result[1] = result[1] << 32; result[1] |= d.ti[2] & 0xFFFFFFFFUL; // 32 bits. result[0] = d.ti[1] & 0xFFFFFFFFUL; result[0] = result[0] << 32; result[0] |= d.ti[0] & 0xFFFFFFFFUL; } else { exp = (d.ti[3] >> 15) & 0x3FFF; result[1] = 4 << 15; result[1] |= d.ti[3] & 0x7FFF; // 15 bits. result[1] = result[1] << 32; result[1] |= d.ti[2] & 0xFFFFFFFFUL; result[0] = d.ti[1] & 0xFFFFFFFFUL; result[0] = result[0] << 32; result[0] |= d.ti[0] & 0xFFFFFFFFUL; } if (result[1] >= DECIMAL128_TH) { result[0] = 0; result[1] = 0; } exp -= DECIMAL128_Bias; // High for (i = 63; i >= 0; i--) { digits[0] += (result[1] >> i) & 1; // 1 bit. for (j = 0; j < 35; j++) digits[j] *= 2; // Double the digits. for (j = 0; j < 34; j++) { // Handle the carry. digits[j + 1] += digits[j] / 10; digits[j] %= 10; } } // Low for (i = 63; i >= 0; i--) { digits[0] += (result[0] >> i) & 1; if (i > 0) { for (j = 0; j < 35; j++) digits[j] *= 2; } for (j = 0; j < 34; j++) { digits[j + 1] += digits[j] / 10; digits[j] %= 10; } } j = 0; for (i = 33; i >= 0; i--) { sprintf (str + j, "%u", digits[i]); j++; } str[34] = '\0'; if (sign_p) *sign_p = d.divided.negative; if (exp_p) *exp_p = exp; if (nan_p) *nan_p = c_f.is_nan; if (inf_p) *inf_p = c_f.is_inf; } libdfp-1.0.17/sysdeps/bid/bid-private.h000066400000000000000000000100761504475242000176560ustar00rootroot00000000000000/* Data types for BID format output. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _BID_PRIVATE_H #define _BID_PRIVATE_H 1 #include struct ieee754r_c_field { unsigned int is_nan:1; unsigned int is_inf:1; unsigned int lm_exp:2; unsigned int lmd:4; }; union ieee754r_Decimal32 { _Decimal32 sd; unsigned int si; struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:2; unsigned int els:29; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int els:29; unsigned int c:2; unsigned int negative:1; #endif /* Little endian. */ } divided; /* This format makes it easier to see if is a NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int nan:5; unsigned int els:26; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int els:26; unsigned int nan:5; unsigned int negative:1; #endif /* Little endian. */ } nan; }; #define DECIMAL32_Bias 101 /* bias for the exponent */ #define DECIMAL32_TH 10000000 /* threshold */ union ieee754r_Decimal64 { _Decimal64 dd; unsigned int di[2]; struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:2; unsigned int else1:29; unsigned int else2:32; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int else2:32; unsigned int else1:29; unsigned int c:2; unsigned int negative:1; #endif /* Little endian. */ } divided; /* This format makes it easier to see if is a NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int nan:5; unsigned int else1:26; unsigned int else2:32; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int else2:32; unsigned int else1:26; unsigned int nan:5; unsigned int negative:1; #endif /* Little endian. */ } nan; }; #define DECIMAL64_Bias 398 /* bias for the exponent */ #define DECIMAL64_TH 10000000000000000 /* threshold */ union ieee754r_Decimal128 { _Decimal128 td; unsigned int ti[4]; struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:2; unsigned int else1:29; unsigned int else2:32; unsigned int else3:32; unsigned int else4:32; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int else4:32; unsigned int else3:32; unsigned int else2:32; unsigned int else1:29; unsigned int c:2; unsigned int negative:1; #endif /* Little endian. */ } divided; /* This format makes it easier to see if is a NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int nan:5; unsigned int else1:26; unsigned int else2:32; unsigned int else3:32; unsigned int else4:32; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int else4:32; unsigned int else3:32; unsigned int else2:32; unsigned int else1:26; unsigned int nan:5; unsigned int negative:1; #endif /* Little endian. */ } nan; }; #define DECIMAL128_Bias 6176 /* bias for the exponent */ #define DECIMAL128_TH 1000000000000000 /* threshold (10³⁴ = 10¹⁵ x 10¹⁹) */ #endif /* _BID_PRIVATE */ libdfp-1.0.17/sysdeps/bid/decode.c000066400000000000000000000075651504475242000166770ustar00rootroot00000000000000/* Functions to print the BID declets for use with printf %Z Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include #include #include #include /* This version is used by all BID implementations. */ #define BID_SIGN_MASK 0x80000000UL /* BID_SPEC_MASK is the mask for _Decimal32 to be used with uint32_t and since we only work with uint32_t it works for all decoded. */ #define BID_SPEC_MASK DEC32_INF_MASK char * __decoded32 (_Decimal32 a, char *str) { union ieee754r_Decimal32 d = { .sd = a }; int exp = -DECIMAL32_Bias; char sign; unsigned int coeff; unsigned int decunits[3] = { 0 }; int n; sign = (d.si & BID_SIGN_MASK ? '-' : '+'); if ((d.si & BID_SPEC_MASK) != BID_SPEC_MASK) { if ((d.si & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK) coeff = 0x00800000 | (d.si & 0x001FFFFF); else coeff = d.si & 0x007FFFFF; for (n = 0; (coeff != 0) && (n < 3); ++n) { decunits[n] = coeff % 1000; coeff /= 1000; } exp = getexpd32 (a); } sprintf (str, "%c%01u,%03u,%03uE%+d", sign, decunits[2], decunits[1], decunits[0], exp); return str; } weak_alias (__decoded32, decoded32) hidden_def (__decoded32) char * __decoded64 (_Decimal64 a, char *str) { union ieee754r_Decimal64 d = { .dd = a }; int exp = -DECIMAL64_Bias; char sign; unsigned long long int coeff; unsigned int decunits[6] = { 0 }; int n; sign = (d.di[1] & BID_SIGN_MASK ? '-' : '+'); if ((d.di[1] & BID_SPEC_MASK) != BID_SPEC_MASK) { if ((d.di[1] & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK) coeff = 0x00200000 | (d.di[1] & 0x0007FFFF); else coeff = d.di[1] & 0x001FFFFF; coeff = (coeff << 32) | d.di[0]; for (n = 0; (coeff != 0) && (n < 6); ++n) { decunits[n] = coeff % 1000; coeff /= 1000; } exp = getexpd64 (a); } sprintf (str, "%c%01u,%03u,%03u,%03u,%03u,%03uE%+d", sign, decunits[5], decunits[4], decunits[3], decunits[2], decunits[1], decunits[0], exp); return str; } weak_alias (__decoded64, decoded64) hidden_def (__decoded64) char * __decoded128 (_Decimal128 a, char *str) { union ieee754r_Decimal128 d = { .td = a }; int exp = -DECIMAL128_Bias; char sign; unsigned int decunits[12] = { 0 }; int i = 0; sign = (d.ti[3] & BID_SIGN_MASK ? '-' : '+'); if ((d.ti[3] & BID_SPEC_MASK) != BID_SPEC_MASK) { decNumber dn; decimal128ToNumber((decimal128*)&a, &dn); /* This only works if DECDPUN == 3, as is the default */ for (int d = dn.digits; d > 0; d -= DECDPUN) { decunits[i] = dn.lsu[i]; i++; } exp = dn.exponent; } sprintf (str, "%c%01u,%03u,%03u,%03u,%03u,%03u,%03u,%03u,%03u,%03u,%03u,%03uE%+d", sign, decunits[11], decunits[10], decunits[9], decunits[8], decunits[7], decunits[6], decunits[5], decunits[4], decunits[3], decunits[2], decunits[1], decunits[0], exp); return str; } weak_alias (__decoded128, decoded128) hidden_def (__decoded128) libdfp-1.0.17/sysdeps/bid/fmodd32.c000066400000000000000000000071151504475242000167010ustar00rootroot00000000000000/* Returns the remainder of a floating point division This implementation is based off that presented in "The Mathematical-Function Computation Handbook" by Nelson H.F. Beebe. decnumber is used here to workaround the limitations of the BID format related to ldexp/frexp. ldexp/frexp were incredibly slow on BID when the pure decimal version was written. Copyright (C) 2024 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE #include #define _DECIMAL_SIZE 32 #endif #include #include #include #include #include #define FUNCTION_NAME fmod #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE dresult; decNumber dn_x; decNumber dn_y; decNumber result; /* The remainder may contain 1 extra digit. Add extra room for at least 1 more. */ struct { decNumber d; decNumberUnit extra; } r, yabs, xabs, cmp, yabs_scaled; int ny; decContext ctxt; decContextDefault (&ctxt, DEFAULT_CONTEXT); decNumberZero (&result); FUNC_CONVERT_TO_DN (&x, &dn_x); FUNC_CONVERT_TO_DN (&y, &dn_y); if (decNumberIsSpecial (&dn_x) || decNumberIsSpecial (&dn_y) || decNumberIsZero (&dn_y)) { result.bits = DECNAN; DFP_ERRNO (EDOM); goto done; } decNumberAbs (&xabs.d, &dn_x, &ctxt); decNumberAbs (&yabs.d, &dn_y, &ctxt); decNumberCompare (&result, &xabs.d, &yabs.d, &ctxt); if (decNumberIsZero (&result)) { decNumberCopySign (&result, &result, &dn_x); goto done; } else if (result.bits & DECNEG) { decNumberCopy (&result, &dn_x); goto done; } /* All special cases accounted for, find the remainder. */ decNumberCopy (&r.d, &xabs.d); decNumberCopy (&yabs_scaled.d, &yabs.d); ny = yabs.d.exponent + yabs.d.digits - 1; /* Expand the precision to while computing the remainder. */ ctxt.digits++; decNumberCompare (&cmp.d, &r.d, &yabs.d, &ctxt); while (!(cmp.d.bits & DECNEG)) /* r >= yabs */ { int n = (r.d.exponent + r.d.digits - 1) - ny; /* Rescale yabs to the nearest power of 10 less than r. */ yabs_scaled.d.exponent = yabs.d.exponent + n; decNumberCompare (&cmp.d, &yabs_scaled.d, &r.d, &ctxt); if (!decNumberIsZero (&cmp.d) && !(cmp.d.bits & DECNEG)) yabs_scaled.d.exponent--; decNumberSubtract (&r.d, &r.d, &yabs_scaled.d, &ctxt); /* r = r - yabs_scaled */ decNumberCompare (&cmp.d, &r.d, &yabs.d, &ctxt); /* cmp = r ? yabs */ } ctxt.digits--; decNumberNormalize (&result, &r.d, &ctxt); if (dn_x.bits & DECNEG) result.bits |= DECNEG; done: FUNC_CONVERT_FROM_DN (&result, &dresult, &ctxt); return dresult; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/bid/symbol-hacks.h000066400000000000000000000101221504475242000200340ustar00rootroot00000000000000/* Hacks for symbol bindings. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #if !defined __ASSEMBLER__ && !defined NOT_IN_libdfp && defined SHARED /* GCC generates intrisics calls to some functions for _Decimal to/from convertions. These bindings avoids intra library PLT calls generations, since libdfp provides such symbols. */ asm ("__bid_floatsidd = __GI___bid_floatsidd"); asm ("__bid_floatditd = __GI___bid_floatditd"); asm ("__bid_floatsitd = __GI___bid_floatsitd"); asm ("__bid_floatdidd = __GI___bid_floatdidd"); asm ("__bid_floatdisd = __GI___bid_floatdisd"); asm ("__bid_floatsisd = __GI___bid_floatsisd"); asm ("__bid_floatunsdisd = __GI___bid_floatunsdisd"); asm ("__bid_floatunsdidd = __GI___bid_floatunsdidd"); #ifdef __SIZEOF_INT128__ asm ("__bid_floattitd = __GI___bid_floattitd"); asm ("__bid_floatunsditd = __GI___bid_floatunsditd"); #endif asm ("__bid_truncdddf = __GI___bid_truncdddf"); asm ("__bid_trunctddf = __GI___bid_trunctddf"); asm ("__bid_trunctddd2 = __GI___bid_trunctddd2"); asm ("__bid_truncddsd2 = __GI___bid_truncddsd2"); asm ("__bid_truncdfsd = __GI___bid_truncdfsd"); asm ("__bid_trunctdsd2 = __GI___bid_trunctdsd2"); asm ("__bid_extendsddf = __GI___bid_extendsddf"); asm ("__bid_extenddftd = __GI___bid_extenddftd"); asm ("__bid_extenddfdd = __GI___bid_extenddfdd"); asm ("__bid_extendsdtd2 = __GI___bid_extendsdtd2"); asm ("__bid_extendsddd2 = __GI___bid_extendsddd2"); asm ("__bid_extendddtd2 = __GI___bid_extendddtd2"); asm ("__bid_fixsdsi = __GI___bid_fixsdsi"); asm ("__bid_fixdddi = __GI___bid_fixdddi"); asm ("__bid_fixddsi = __GI___bid_fixddsi"); asm ("__bid_fixsddi = __GI___bid_fixsddi"); asm ("__bid_fixtddi = __GI___bid_fixtddi"); asm ("__bid_fixtdsi = __GI___bid_fixtdsi"); asm ("__bid_fixunsdddi = __GI___bid_fixunsdddi"); asm ("__bid_fixunssddi = __GI___bid_fixunssddi"); asm ("__bid_addsd3 = __GI___bid_addsd3"); asm ("__bid_addtd3 = __GI___bid_addtd3"); asm ("__bid_adddd3 = __GI___bid_adddd3"); asm ("__bid_subdd3 = __GI___bid_subdd3"); asm ("__bid_subsd3 = __GI___bid_subsd3"); asm ("__bid_subtd3 = __GI___bid_subtd3"); asm ("__bid_divsd3 = __GI___bid_divsd3"); asm ("__bid_divtd3 = __GI___bid_divtd3"); asm ("__bid_divdd3 = __GI___bid_divdd3"); asm ("__bid_gtdd2 = __GI___bid_gtdd2"); asm ("__bid_gtds2 = __GI___bid_gtsd2"); asm ("__bid_gtdt2 = __GI___bid_gttd2"); asm ("__bid_mulsd3 = __GI___bid_mulsd3"); asm ("__bid_multd3 = __GI___bid_multd3"); asm ("__bid_muldd3 = __GI___bid_muldd3"); asm ("__bid_gtsd2 = __GI___bid_gtsd2"); asm ("__bid_gttd2 = __GI___bid_gttd2"); asm ("__bid_ltdd2 = __GI___bid_ltdd2"); asm ("__bid_ltsd2 = __GI___bid_ltsd2"); asm ("__bid_lttd2 = __GI___bid_lttd2"); asm ("__bid_eqdd2 = __GI___bid_eqdd2"); asm ("__bid_eqsd2 = __GI___bid_eqsd2"); asm ("__bid_eqtd2 = __GI___bid_eqtd2"); asm ("__bid_nedd2 = __GI___bid_nedd2"); asm ("__bid_nesd2 = __GI___bid_nesd2"); asm ("__bid_netd2 = __GI___bid_netd2"); asm ("__bid_lesd2 = __GI___bid_lesd2"); asm ("__bid_ledd2 = __GI___bid_ledd2"); asm ("__bid_letd2 = __GI___bid_letd2"); asm ("__bid_gesd2 = __GI___bid_gesd2"); asm ("__bid_gedd2 = __GI___bid_gedd2"); asm ("__bid_getd2 = __GI___bid_getd2"); asm ("__bid_unordsd2 = __GI___bid_unordsd2"); asm ("__bid_unorddd2 = __GI___bid_unorddd2"); asm ("__bid_unordtd2 = __GI___bid_unordtd2"); #endif libdfp-1.0.17/sysdeps/dpd/000077500000000000000000000000001504475242000153045ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/dpd/Implies000066400000000000000000000000211504475242000166220ustar00rootroot00000000000000libdecnumber/dpd libdfp-1.0.17/sysdeps/dpd/Makefile000066400000000000000000000023061504475242000167450ustar00rootroot00000000000000libdfp_files += dpd-private binpowof10 decpowof2 ifeq ($(libdfp-has-timode),yes) libdfp_files += ticonstants endif # Build the DPD gcc instrinsic variants libdfp_files += addsd3 adddd3 addtd3 \ divsd3 divdd3 divtd3 \ eqsd2 eqdd2 eqtd2 \ extendsddd2 extendsdtd2 extendddtd2 \ extendsfsd extendsddf extendsdtf \ extendsfdd extenddfdd extendddtf \ extendsftd extenddftd extendtftd \ fixsdsi fixddsi fixtdsi \ fixsddi fixdddi fixtddi \ fixunssdsi fixunsddsi fixunstdsi \ fixunssddi fixunsdddi fixunstddi \ floatsisd floatsidd floatsitd \ floatdisd floatdidd floatditd \ floatunssisd floatunssidd floatunssitd \ floatunsdisd floatunsdidd floatunsditd \ gesd2 gedd2 getd2 \ gtsd2 gtdd2 gttd2 \ lesd2 ledd2 letd2 \ ltsd2 ltdd2 lttd2 \ mulsd3 muldd3 multd3 \ nesd2 nedd2 netd2 \ subsd3 subdd3 subtd3 \ truncddsd2 trunctddd2 trunctdsd2 \ truncsdsf truncdfsd trunctfsd \ truncddsf truncdddf trunctfdd \ trunctdsf trunctddf trunctdtf \ unordsd2 unorddd2 unordtd2 ifeq ($(libdfp-has-timode),yes) libdfp_files += fixsdti fixddti \ fixunssdti fixunsddti \ fixtdti fixunstdti \ floattitd floatunstitd \ floattidd floatunstidd \ floattisd floatunstisd endif libdfp-1.0.17/sysdeps/dpd/Versions000066400000000000000000000037341504475242000170460ustar00rootroot00000000000000# These are added in this sysdeps/dpd/Versions file because the # C source files don't indicate "__dpd" in the filename and they # live in the common base-math/ directory. libdfp { LIBDFP_1.0.0 { __dpd_addsd3; __dpd_adddd3; __dpd_addtd3; __dpd_subsd3; __dpd_subdd3; __dpd_subtd3; __dpd_mulsd3; __dpd_muldd3; __dpd_multd3; __dpd_divsd3; __dpd_divdd3; __dpd_divtd3; __dpd_extendsddd2; __dpd_extendsdtd2; __dpd_extendddtd2; __dpd_trunctdsd2; __dpd_truncddsd2; __dpd_trunctddd2; __dpd_unordsd2; __dpd_unorddd2; __dpd_unordtd2; __dpd_eqsd2; __dpd_eqdd2; __dpd_eqtd2; __dpd_nesd2; __dpd_nedd2; __dpd_netd2; __dpd_gesd2; __dpd_gedd2; __dpd_getd2; __dpd_gtsd2; __dpd_gtdd2; __dpd_gttd2; __dpd_ltsd2; __dpd_ltdd2; __dpd_lttd2; __dpd_lesd2; __dpd_ledd2; __dpd_letd2; __dpd_fixsdsi; __dpd_fixddsi; __dpd_fixtdsi; __dpd_fixsddi; __dpd_fixdddi; __dpd_fixtddi; __dpd_fixunssdsi; __dpd_fixunsddsi; __dpd_fixunstdsi; __dpd_fixunssddi; __dpd_fixunsdddi; __dpd_fixunstddi; __dpd_floatsisd; __dpd_floatsidd; __dpd_floatsitd; __dpd_floatdisd; __dpd_floatdidd; __dpd_floatditd; __dpd_floatunssisd; __dpd_floatunssidd; __dpd_floatunssitd; __dpd_floatunsdisd; __dpd_floatunsdidd; __dpd_floatunsditd; # These extend and trunc symbols were moved into here from # sysdeps/soft-dfp/dpd/Versions. This is a bug fix, not an # ABI change. This makes sure that these exports are available in # hard-dfp shared objects at link time. __dpd_extendsfsd; __dpd_extendsddf; __dpd_extendsfdd; __dpd_extenddfdd; __dpd_extendsftd; __dpd_extenddftd; __dpd_truncsdsf; __dpd_truncdfsd; __dpd_truncddsf; __dpd_truncdddf; __dpd_trunctdsf; __dpd_trunctddf; } LIBDFP_1.0.13 { __dpd_fixtdti; __dpd_fixddti; __dpd_fixsdti; __dpd_fixunstdti; __dpd_fixunsddti; __dpd_fixunssdti; __dpd_floattitd; __dpd_floattidd; __dpd_floattisd; __dpd_floatunstitd; __dpd_floatunstidd; __dpd_floatunstisd; } } libdfp-1.0.17/sysdeps/dpd/decimal_float128.c000066400000000000000000000061711504475242000204730ustar00rootroot00000000000000/* Conversions between _Float128 and _DecimalN types Copyright (C) 2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _GNU_SOURCE #define __STDC_WANT_IEC_60559_TYPES_EXT__ #include #include #include /* Order matters to ensure decNumber object is sufficiently large. */ #include #include #include #include #define BUFMAX 128 #define DECL_TO_F128(fmode,dmode,N,func) \ _Float128 \ func ## dmode ## fmode ## 2 (_Decimal ## N a); \ _Float128 \ func ## dmode ## fmode ## 2 (_Decimal ## N a) \ { \ char buf[BUFMAX]; \ decNumber n; \ decContext context; \ decContextDefault (&context, DEC_INIT_DECIMAL ## N); \ decimal ## N ## ToNumber ((decimal ## N *)&a, &n); \ decNumberToString (&n, buf); \ return strtof128 (buf, NULL); \ } DECL_TO_F128 (kf, sd, 32, __dpd_extend); DECL_TO_F128 (kf, dd, 64, __dpd_extend); DECL_TO_F128 (td, kf, 128, __dpd_trunc); #define DECL_FROM_F128(fmode,dmode,N,func) \ _Decimal ## N \ func ## fmode ## dmode ## 2 (_Float128 a); \ _Decimal ## N \ func ## fmode ## dmode ## 2 (_Float128 a) \ { \ _Decimal ## N f;\ char buf[BUFMAX]; \ decContext context; \ strfromf128 (buf, BUFMAX, "%.35e", a); \ decContextDefault (&context, DEC_INIT_DECIMAL ## N); \ decimal ## N ## FromString( (decimal ## N *) &f, buf, &context); \ if (context.status != 0) { \ int dec_flags = context.status & \ (DEC_IEEE_854_Inexact|DEC_IEEE_854_Invalid_operation|DEC_IEEE_854_Overflow); \ DFP_HANDLE_EXCEPTIONS(DFP_IEEE_FLAGS(dec_flags)); \ } \ return f; \ } DECL_FROM_F128 (kf, sd, 32, __dpd_trunc); DECL_FROM_F128 (kf, dd, 64, __dpd_trunc); DECL_FROM_F128 (td, kf, 128, __dpd_extend); /* Note, each function has an alias to the GCC 9+ name of the intrinsic. GCC < 9 named these differently. Also note the naming of KF <-> TD functions was reversed too. */ strong_alias (__dpd_extendsdkf2, __dpd_extendsdkf); strong_alias (__dpd_extendddkf2, __dpd_extendddkf); strong_alias (__dpd_trunckftd2, __dpd_trunctdkf); strong_alias (__dpd_trunckfsd2, __dpd_trunckfsd); strong_alias (__dpd_trunckfdd2, __dpd_trunckfdd); strong_alias (__dpd_extendtdkf2, __dpd_extendkftd); libdfp-1.0.17/sysdeps/dpd/decode.c000066400000000000000000000130471504475242000167000ustar00rootroot00000000000000/* Functions to print the DPD declets for use with printf %Z Copyright (C) 2006, 2007 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steve Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include #include #include #include #include /* This version is used by all DPD implementations. */ #undef DEBUG_PRINT #define DEBUG_PRINT 0 char * __decoded32 (_Decimal32 a, char * str) { union ieee754r_Decimal32 d; struct ieee754r_c_field c_f; int exp; char sign; char lmd; const char *cc0; const char *cc1; char * after_exp = NULL; d.sd = a; if (d.ieee.negative) sign = '-'; else sign = '+'; c_f = c_decoder[d.ieee.c]; exp = c_f.lm_exp << DECIMAL32_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL32_Bias; lmd = '0' + c_f.lmd; cc0 = &dpd_to_char[d.ieee.cc0][0]; cc1 = &dpd_to_char[d.ieee.cc1][0]; str[0] = sign; str[1] = lmd; str[2] = ','; __dpd_cpydeclet(&str[3], cc0); str[6] = ','; __dpd_cpydeclet(&str[7], cc1); str[10] = 'E'; after_exp = __dpd_exptostr(&str[11], exp); if (after_exp != NULL) *after_exp = '\0'; return str; } weak_alias (__decoded32, decoded32) hidden_def(__decoded32) char * __decoded64 ( _Decimal64 a, char * str ) { union ieee754r_Decimal64 d; struct ieee754r_c_field c_f; int exp, i; char sign; char lmd; const char *cc0; const char *cc1; const char *cc2; const char *cc3; const char *cc4; char * after_exp = NULL; d.dd = a; if (d.ieee.negative) sign = '-'; else sign = '+'; c_f = c_decoder[d.ieee.c]; exp = c_f.lm_exp << DECIMAL64_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL64_Bias; lmd = '0' + c_f.lmd; cc0 = &dpd_to_char[d.ieee.cc0][0]; /* Packed fields crossing a word boundary require special handling. */ i = d.ieee.cc1H8 << 2; i = i + d.ieee.cc1L2; cc1 = &dpd_to_char[i][0]; cc2 = &dpd_to_char[d.ieee.cc2][0]; cc3 = &dpd_to_char[d.ieee.cc3][0]; cc4 = &dpd_to_char[d.ieee.cc4][0]; str[0] = sign; str[1] = lmd; str[2] = ','; __dpd_cpydeclet(&str[3], cc0); str[6] = ','; __dpd_cpydeclet(&str[7], cc1); str[10] = ','; __dpd_cpydeclet(&str[11], cc2); str[14] = ','; __dpd_cpydeclet(&str[15], cc3); str[18] = ','; __dpd_cpydeclet(&str[19], cc4); str[22] = 'E'; after_exp = __dpd_exptostr(&str[23], exp); if (after_exp != NULL) *after_exp = '\0'; return str; } weak_alias (__decoded64, decoded64) hidden_def(__decoded64) char * __decoded128 ( _Decimal128 a, char * str ) { union ieee754r_Decimal128 d; struct ieee754r_c_field c_f; int exp;/*, i; */ char sign; char lmd; const char *cc0; const char *cc1; const char *cc2; const char *cc3; const char *cc4; const char *cc5; const char *cc6; const char *cc7; const char *cc8; const char *cc9; const char *cc10; char * after_exp = NULL; d.td = a; if (d.ieee.negative) sign = '-'; else sign = '+'; c_f = c_decoder[d.ieee.c]; exp = c_f.lm_exp << DECIMAL128_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL128_Bias; lmd = '0' + c_f.lmd; cc0 = &dpd_to_char[d.ieee.cc0][0]; /* Packed fields crossing a word boundary require special handling. */ cc1 = &dpd_to_char[((d.ieee.cc1H4<<6) + d.ieee.cc1L6)][0]; cc2 = &dpd_to_char[d.ieee.cc2][0]; cc3 = &dpd_to_char[d.ieee.cc3][0]; cc4 = &dpd_to_char[((d.ieee.cc4H6<<4) + d.ieee.cc4L4)][0]; cc5 = &dpd_to_char[d.ieee.cc5][0]; cc6 = &dpd_to_char[d.ieee.cc6][0]; cc7 = &dpd_to_char[((d.ieee.cc7H8<<2) + d.ieee.cc7L2)][0]; cc8 = &dpd_to_char[d.ieee.cc8][0]; cc9 = &dpd_to_char[d.ieee.cc9][0]; cc10 = &dpd_to_char[d.ieee.cc10][0]; str[0] = sign; str[1] = lmd; str[2] = ','; __dpd_cpydeclet(&str[3], cc0); str[6] = ','; __dpd_cpydeclet(&str[7], cc1); str[10] = ','; __dpd_cpydeclet(&str[11], cc2); str[14] = ','; __dpd_cpydeclet(&str[15], cc3); str[18] = ','; __dpd_cpydeclet(&str[19], cc4); str[22] = ','; __dpd_cpydeclet(&str[23], cc5); str[26] = ','; __dpd_cpydeclet(&str[27], cc6); str[30] = ','; __dpd_cpydeclet(&str[31], cc7); str[34] = ','; __dpd_cpydeclet(&str[35], cc8); str[38] = ','; __dpd_cpydeclet(&str[39], cc9); str[42] = ','; __dpd_cpydeclet(&str[43], cc10); str[46] = 'E'; after_exp = __dpd_exptostr(&str[47], exp); if (after_exp != NULL) *after_exp = '\0'; return str; } weak_alias (__decoded128, decoded128) hidden_def(__decoded128) libdfp-1.0.17/sysdeps/dpd/dpd-private.c000066400000000000000000001505551504475242000177020ustar00rootroot00000000000000/* Data types for DPD format output. Copyright (C) 2006, 2007 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steve Munroe The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include #include #include #include "dpd-private.h" #include "get_digits.h" const struct ieee754r_c_field c_decoder[32] = { {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 0, 3}, /* 00000-00011 */ {0, 0, 0, 4}, {0, 0, 0, 5}, {0, 0, 0, 6}, {0, 0, 0, 7}, /* 00100-00111 */ {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}, {0, 0, 1, 3}, /* 01000-01011 */ {0, 0, 1, 4}, {0, 0, 1, 5}, {0, 0, 1, 6}, {0, 0, 1, 7}, /* 01100-01111 */ {0, 0, 2, 0}, {0, 0, 2, 1}, {0, 0, 2, 2}, {0, 0, 2, 3}, /* 10000-10011 */ {0, 0, 2, 4}, {0, 0, 2, 5}, {0, 0, 2, 5}, {0, 0, 2, 7}, /* 10100-10111 */ {0, 0, 0, 8}, {0, 0, 0, 9}, {0, 0, 1, 8}, {0, 0, 1, 9}, /* 11000-11011 */ {0, 0, 2, 8}, {0, 0, 2, 9}, {0, 1, 0, 0}, {1, 0, 0, 0} /* 11100-11111 */ }; /* Table to encode the "left most" 2 bits of the biased exponent and the "Left Most Digit" into the "C"ombination field. Indexed by [lmd,lm2bits]. */ const unsigned char lm2lmd_to_c[10][4] = { {0x00, 0x08, 0x10, 0x1e}, {0x01, 0x09, 0x11, 0x1e}, {0x02, 0x0a, 0x12, 0x1e}, {0x03, 0x0b, 0x13, 0x1e}, {0x04, 0x0c, 0x14, 0x1e}, {0x05, 0x0d, 0x15, 0x1e}, {0x06, 0x0e, 0x16, 0x1e}, {0x07, 0x0f, 0x17, 0x1e}, {0x18, 0x1a, 0x1c, 0x1e}, {0x19, 0x1b, 0x1d, 0x1e}}; /* Table to convert 3 Densely Packed Decimal digits (10-bits) into 3 ASCII digits (24-bits, 3 bytes). */ const char dpd_to_char[1024][4] = { "000", "001", "002", "003", "004", "005", "006", "007", /* 000-007 */ "008", "009", "080", "081", "800", "801", "880", "881", /* 008-00f */ "010", "011", "012", "013", "014", "015", "016", "017", /* 010-017 */ "018", "019", "090", "091", "810", "811", "890", "891", /* 018-01f */ "020", "021", "022", "023", "024", "025", "026", "027", /* 020-027 */ "028", "029", "082", "083", "820", "821", "808", "809", /* 028-02f */ "030", "031", "032", "033", "034", "035", "036", "037", /* 030-037 */ "038", "039", "092", "093", "830", "831", "818", "819", /* 038-03f */ "040", "041", "042", "043", "044", "045", "046", "047", /* 040-047 */ "048", "049", "084", "085", "840", "841", "088", "089", /* 048-04f */ "050", "051", "052", "053", "054", "055", "056", "057", /* 050-057 */ "058", "059", "094", "095", "850", "851", "098", "099", /* 058-05f */ "060", "061", "062", "063", "064", "065", "066", "067", /* 060-067 */ "068", "069", "086", "087", "860", "861", "888", "889", /* 068-06f */ "070", "071", "072", "073", "074", "075", "076", "077", /* 070-077 */ "078", "079", "096", "097", "870", "871", "898", "899", /* 078-07f */ "100", "101", "102", "103", "104", "105", "106", "107", /* 080-087 */ "108", "109", "180", "181", "900", "901", "980", "981", /* 088-08f */ "110", "111", "112", "113", "114", "115", "116", "117", /* 090-097 */ "118", "119", "190", "191", "910", "911", "990", "991", /* 098-09f */ "120", "121", "122", "123", "124", "125", "126", "127", /* 0a0-0a7 */ "128", "129", "182", "183", "920", "921", "908", "909", /* 0a8-0af */ "130", "131", "132", "133", "134", "135", "136", "137", /* 0b0-0b7 */ "138", "139", "192", "193", "930", "931", "918", "919", /* 0b8-0bf */ "140", "141", "142", "143", "144", "145", "146", "147", /* 0c0-0c7 */ "148", "149", "184", "185", "940", "941", "188", "189", /* 0c8-0cf */ "150", "151", "152", "153", "154", "155", "156", "157", /* 0d0-0d7 */ "158", "159", "194", "195", "950", "951", "198", "199", /* 0d8-0df */ "160", "161", "162", "163", "164", "165", "166", "167", /* 0e0-0e7 */ "168", "169", "186", "187", "960", "961", "988", "989", /* 0e8-0ef */ "170", "171", "172", "173", "174", "175", "176", "177", /* 0f0-0f7 */ "178", "179", "196", "197", "970", "971", "998", "999", /* 0f8-0ff */ "200", "201", "202", "203", "204", "205", "206", "207", /* 100-107 */ "208", "209", "280", "281", "802", "803", "882", "883", /* 108-10f */ "210", "211", "212", "213", "214", "215", "216", "217", /* 110-117 */ "218", "219", "290", "291", "812", "813", "892", "893", /* 118-11f */ "220", "221", "222", "223", "224", "225", "226", "227", /* 120-127 */ "228", "229", "282", "283", "822", "823", "828", "829", /* 128-12f */ "230", "231", "232", "233", "234", "235", "236", "237", /* 130-137 */ "238", "239", "292", "293", "832", "833", "838", "839", /* 138-13f */ "240", "241", "242", "243", "244", "245", "246", "247", /* 140-147 */ "248", "249", "284", "285", "842", "843", "288", "289", /* 148-14f */ "250", "251", "252", "253", "254", "255", "256", "257", /* 150-157 */ "258", "259", "294", "295", "852", "853", "298", "299", /* 158-15f */ "260", "261", "262", "263", "264", "265", "266", "267", /* 160-167 */ "268", "269", "286", "287", "862", "863", "888", "889", /* 168-16f */ "270", "271", "272", "273", "274", "275", "276", "277", /* 170-177 */ "278", "279", "296", "297", "872", "873", "898", "899", /* 178-17f */ "300", "301", "302", "303", "304", "305", "306", "307", /* 180-187 */ "308", "309", "380", "381", "902", "903", "982", "983", /* 188-18f */ "310", "311", "312", "313", "314", "315", "316", "317", /* 190-197 */ "318", "319", "390", "391", "912", "913", "992", "993", /* 198-19f */ "320", "321", "322", "323", "324", "325", "326", "327", /* 1a0-1a7 */ "328", "329", "382", "383", "922", "923", "928", "929", /* 1a8-1af */ "330", "331", "332", "333", "334", "335", "336", "337", /* 1b0-1b7 */ "338", "339", "392", "393", "932", "933", "938", "939", /* 1b8-1bf */ "340", "341", "342", "343", "344", "345", "346", "347", /* 1c0-1c7 */ "348", "349", "384", "385", "942", "943", "388", "389", /* 1c8-1cf */ "350", "351", "352", "353", "354", "355", "356", "357", /* 1d0-1d7 */ "358", "359", "394", "395", "952", "953", "398", "399", /* 1d8-1df */ "360", "361", "362", "363", "364", "365", "366", "367", /* 1e0-1e7 */ "368", "369", "386", "387", "962", "963", "988", "989", /* 1e8-1ef */ "370", "371", "372", "373", "374", "375", "376", "377", /* 1f0-1f7 */ "378", "379", "396", "397", "972", "973", "998", "999", /* 1f8-1ff */ "400", "401", "402", "403", "404", "405", "406", "407", /* 200-207 */ "408", "409", "480", "481", "804", "805", "884", "885", /* 208-20f */ "410", "411", "412", "413", "414", "415", "416", "417", /* 210-217 */ "418", "419", "490", "491", "814", "815", "894", "895", /* 218-21f */ "420", "421", "422", "423", "424", "425", "426", "427", /* 220-227 */ "428", "429", "482", "483", "824", "825", "848", "849", /* 228-22f */ "430", "431", "432", "433", "434", "435", "436", "437", /* 230-237 */ "438", "439", "492", "493", "834", "835", "858", "859", /* 238-23f */ "440", "441", "442", "443", "444", "445", "446", "447", /* 240-247 */ "448", "449", "484", "485", "844", "845", "488", "489", /* 248-24f */ "450", "451", "452", "453", "454", "455", "456", "457", /* 250-257 */ "458", "459", "494", "495", "854", "855", "498", "499", /* 258-25f */ "460", "461", "462", "463", "464", "465", "466", "467", /* 260-267 */ "468", "469", "486", "487", "864", "865", "888", "889", /* 268-26f */ "470", "471", "472", "473", "474", "475", "476", "477", /* 270-277 */ "478", "479", "496", "497", "874", "875", "898", "899", /* 278-27f */ "500", "501", "502", "503", "504", "505", "506", "507", /* 280-287 */ "508", "509", "580", "581", "904", "905", "984", "985", /* 288-28f */ "510", "511", "512", "513", "514", "515", "516", "517", /* 290-297 */ "518", "519", "590", "591", "914", "915", "994", "995", /* 298-29f */ "520", "521", "522", "523", "524", "525", "526", "527", /* 2a0-2a7 */ "528", "529", "582", "583", "924", "925", "948", "949", /* 2a8-2af */ "530", "531", "532", "533", "534", "535", "536", "537", /* 2b0-2b7 */ "538", "539", "592", "593", "934", "935", "958", "959", /* 2b8-2bf */ "540", "541", "542", "543", "544", "545", "546", "547", /* 2c0-2c7 */ "548", "549", "584", "585", "944", "945", "588", "589", /* 2c8-2cf */ "550", "551", "552", "553", "554", "555", "556", "557", /* 2d0-2d7 */ "558", "559", "594", "595", "954", "955", "598", "599", /* 2d8-2df */ "560", "561", "562", "563", "564", "565", "566", "567", /* 2e0-2e7 */ "568", "569", "586", "587", "964", "965", "988", "989", /* 2e8-2ef */ "570", "571", "572", "573", "574", "575", "576", "577", /* 2f0-2f7 */ "578", "579", "596", "597", "974", "975", "998", "999", /* 2f8-2ff */ "600", "601", "602", "603", "604", "605", "606", "607", /* 300-307 */ "608", "609", "680", "681", "806", "807", "886", "887", /* 308-30f */ "610", "611", "612", "613", "614", "615", "616", "617", /* 310-317 */ "618", "619", "690", "691", "816", "817", "896", "897", /* 318-31f */ "620", "621", "622", "623", "624", "625", "626", "627", /* 320-327 */ "628", "629", "682", "683", "826", "827", "868", "869", /* 328-32f */ "630", "631", "632", "633", "634", "635", "636", "637", /* 330-337 */ "638", "639", "692", "693", "836", "837", "878", "879", /* 338-33f */ "640", "641", "642", "643", "644", "645", "646", "647", /* 340-347 */ "648", "649", "684", "685", "846", "847", "688", "689", /* 348-34f */ "650", "651", "652", "653", "654", "655", "656", "657", /* 350-357 */ "658", "659", "694", "695", "856", "857", "698", "699", /* 358-35f */ "660", "661", "662", "663", "664", "665", "666", "667", /* 360-367 */ "668", "669", "686", "687", "866", "867", "888", "889", /* 368-36f */ "670", "671", "672", "673", "674", "675", "676", "677", /* 370-377 */ "678", "679", "696", "697", "876", "877", "898", "899", /* 378-37f */ "700", "701", "702", "703", "704", "705", "706", "707", /* 380-387 */ "708", "709", "780", "781", "906", "907", "986", "987", /* 388-38f */ "710", "711", "712", "713", "714", "715", "716", "717", /* 390-397 */ "718", "719", "790", "791", "916", "917", "996", "997", /* 398-39f */ "720", "721", "722", "723", "724", "725", "726", "727", /* 3a0-3a7 */ "728", "729", "782", "783", "926", "927", "968", "969", /* 3a8-3af */ "730", "731", "732", "733", "734", "735", "736", "737", /* 3b0-3b7 */ "738", "739", "792", "793", "936", "937", "978", "979", /* 3b8-3bf */ "740", "741", "742", "743", "744", "745", "746", "747", /* 3c0-3c7 */ "748", "749", "784", "785", "946", "947", "788", "789", /* 3c8-3cf */ "750", "751", "752", "753", "754", "755", "756", "757", /* 3d0-3d7 */ "758", "759", "794", "795", "956", "957", "798", "799", /* 3d8-3df */ "760", "761", "762", "763", "764", "765", "766", "767", /* 3e0-3e7 */ "768", "769", "786", "787", "966", "967", "988", "989", /* 3e8-3ef */ "770", "771", "772", "773", "774", "775", "776", "777", /* 3f0-3f7 */ "778", "779", "796", "797", "976", "977", "998", "999" /* 3f8-3ff */ }; // "770", "771", "772", "773", "974", "775", "776", "777", /* 3f0-3f7 */ /* Table to convert 3 Densely Packed Decimal digits (10-bits) into 3 Binary coded Decimal digits (12-bits). */ const short int dpd_to_bcd[1024] = { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */ 0x008, 0x009, 0x080, 0x081, 0x800, 0x801, 0x880, 0x881, /* 008-00f */ 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */ 0x018, 0x019, 0x090, 0x091, 0x810, 0x811, 0x890, 0x891, /* 018-01f */ 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */ 0x028, 0x029, 0x082, 0x083, 0x820, 0x821, 0x808, 0x809, /* 028-02f */ 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */ 0x038, 0x039, 0x092, 0x093, 0x830, 0x831, 0x818, 0x819, /* 038-03f */ 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */ 0x048, 0x049, 0x084, 0x085, 0x840, 0x841, 0x088, 0x089, /* 048-04f */ 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */ 0x058, 0x059, 0x094, 0x095, 0x850, 0x851, 0x098, 0x099, /* 058-05f */ 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */ 0x068, 0x069, 0x086, 0x087, 0x860, 0x861, 0x888, 0x889, /* 068-06f */ 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */ 0x078, 0x079, 0x096, 0x097, 0x870, 0x871, 0x898, 0x899, /* 078-07f */ 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 080-087 */ 0x108, 0x109, 0x180, 0x181, 0x900, 0x901, 0x980, 0x981, /* 088-08f */ 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 090-097 */ 0x118, 0x119, 0x190, 0x191, 0x910, 0x911, 0x990, 0x991, /* 098-09f */ 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 0a0-0a7 */ 0x128, 0x129, 0x182, 0x183, 0x920, 0x921, 0x908, 0x909, /* 0a8-0af */ 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 0b0-0b7 */ 0x138, 0x139, 0x192, 0x193, 0x930, 0x931, 0x918, 0x919, /* 0b8-0bf */ 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 0c0-0c7 */ 0x148, 0x149, 0x184, 0x185, 0x940, 0x941, 0x188, 0x189, /* 0c8-0cf */ 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 0d0-0d7 */ 0x158, 0x159, 0x194, 0x195, 0x950, 0x951, 0x198, 0x199, /* 0d8-0df */ 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 0e0-0e7 */ 0x168, 0x169, 0x186, 0x187, 0x960, 0x961, 0x988, 0x989, /* 0e8-0ef */ 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 0f0-0f7 */ 0x178, 0x179, 0x196, 0x197, 0x970, 0x971, 0x998, 0x999, /* 0f8-0ff */ 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 100-107 */ 0x208, 0x209, 0x280, 0x281, 0x802, 0x803, 0x882, 0x883, /* 108-10f */ 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 110-117 */ 0x218, 0x219, 0x290, 0x291, 0x812, 0x813, 0x892, 0x893, /* 118-11f */ 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 120-127 */ 0x228, 0x229, 0x282, 0x283, 0x822, 0x823, 0x828, 0x829, /* 128-12f */ 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 130-137 */ 0x238, 0x239, 0x292, 0x293, 0x832, 0x833, 0x838, 0x839, /* 138-13f */ 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 140-147 */ 0x248, 0x249, 0x284, 0x285, 0x842, 0x843, 0x288, 0x289, /* 148-14f */ 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 150-157 */ 0x258, 0x259, 0x294, 0x295, 0x852, 0x853, 0x298, 0x299, /* 158-15f */ 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 160-167 */ 0x268, 0x269, 0x286, 0x287, 0x862, 0x863, 0x888, 0x889, /* 168-16f */ 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 170-177 */ 0x278, 0x279, 0x296, 0x297, 0x872, 0x873, 0x898, 0x899, /* 178-17f */ 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 180-187 */ 0x308, 0x309, 0x380, 0x381, 0x902, 0x903, 0x982, 0x983, /* 188-18f */ 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 190-197 */ 0x318, 0x319, 0x390, 0x391, 0x912, 0x913, 0x992, 0x993, /* 198-19f */ 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 1a0-1a7 */ 0x328, 0x329, 0x382, 0x383, 0x922, 0x923, 0x928, 0x929, /* 1a8-1af */ 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 1b0-1b7 */ 0x338, 0x339, 0x392, 0x393, 0x932, 0x933, 0x938, 0x939, /* 1b8-1bf */ 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 1c0-1c7 */ 0x348, 0x349, 0x384, 0x385, 0x942, 0x943, 0x388, 0x389, /* 1c8-1cf */ 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 1d0-1d7 */ 0x358, 0x359, 0x394, 0x395, 0x952, 0x953, 0x398, 0x399, /* 1d8-1df */ 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 1e0-1e7 */ 0x368, 0x369, 0x386, 0x387, 0x962, 0x963, 0x988, 0x989, /* 1e8-1ef */ 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 1f0-1f7 */ 0x378, 0x379, 0x396, 0x397, 0x972, 0x973, 0x998, 0x999, /* 1f8-1ff */ 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, /* 200-207 */ 0x408, 0x409, 0x480, 0x481, 0x804, 0x805, 0x884, 0x885, /* 208-20f */ 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, /* 210-217 */ 0x418, 0x419, 0x490, 0x491, 0x814, 0x815, 0x894, 0x895, /* 218-21f */ 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, /* 220-227 */ 0x428, 0x429, 0x482, 0x483, 0x824, 0x825, 0x848, 0x849, /* 228-22f */ 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, /* 230-237 */ 0x438, 0x439, 0x492, 0x493, 0x834, 0x835, 0x858, 0x859, /* 238-23f */ 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, /* 240-247 */ 0x448, 0x449, 0x484, 0x485, 0x844, 0x845, 0x488, 0x489, /* 248-24f */ 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, /* 250-257 */ 0x458, 0x459, 0x494, 0x495, 0x854, 0x855, 0x498, 0x499, /* 258-25f */ 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, /* 260-267 */ 0x468, 0x469, 0x486, 0x487, 0x864, 0x865, 0x888, 0x889, /* 268-26f */ 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, /* 270-277 */ 0x478, 0x479, 0x496, 0x497, 0x874, 0x875, 0x898, 0x899, /* 278-27f */ 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, /* 280-287 */ 0x508, 0x509, 0x580, 0x581, 0x904, 0x905, 0x984, 0x985, /* 288-28f */ 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, /* 290-297 */ 0x518, 0x519, 0x590, 0x591, 0x914, 0x915, 0x994, 0x995, /* 298-29f */ 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, /* 2a0-2a7 */ 0x528, 0x529, 0x582, 0x583, 0x924, 0x925, 0x948, 0x949, /* 2a8-2af */ 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, /* 2b0-2b7 */ 0x538, 0x539, 0x592, 0x593, 0x934, 0x935, 0x958, 0x959, /* 2b8-2bf */ 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, /* 2c0-2c7 */ 0x548, 0x549, 0x584, 0x585, 0x944, 0x945, 0x588, 0x589, /* 2c8-2cf */ 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, /* 2d0-2d7 */ 0x558, 0x559, 0x594, 0x595, 0x954, 0x955, 0x598, 0x599, /* 2d8-2df */ 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, /* 2e0-2e7 */ 0x568, 0x569, 0x586, 0x587, 0x964, 0x965, 0x988, 0x989, /* 2e8-2ef */ 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, /* 2f0-2f7 */ 0x578, 0x579, 0x596, 0x597, 0x974, 0x975, 0x998, 0x999, /* 2f8-2ff */ 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, /* 300-307 */ 0x608, 0x609, 0x680, 0x681, 0x806, 0x807, 0x886, 0x887, /* 308-30f */ 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, /* 310-317 */ 0x618, 0x619, 0x690, 0x691, 0x816, 0x817, 0x896, 0x897, /* 318-31f */ 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, /* 320-327 */ 0x628, 0x629, 0x682, 0x683, 0x826, 0x827, 0x868, 0x869, /* 328-32f */ 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, /* 330-337 */ 0x638, 0x639, 0x692, 0x693, 0x836, 0x837, 0x878, 0x879, /* 338-33f */ 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, /* 340-347 */ 0x648, 0x649, 0x684, 0x685, 0x846, 0x847, 0x688, 0x689, /* 348-34f */ 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, /* 350-357 */ 0x658, 0x659, 0x694, 0x695, 0x856, 0x857, 0x698, 0x699, /* 358-35f */ 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, /* 360-367 */ 0x668, 0x669, 0x686, 0x687, 0x866, 0x867, 0x888, 0x889, /* 368-36f */ 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, /* 370-377 */ 0x678, 0x679, 0x696, 0x697, 0x876, 0x877, 0x898, 0x899, /* 378-37f */ 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, /* 380-387 */ 0x708, 0x709, 0x780, 0x781, 0x906, 0x907, 0x986, 0x987, /* 388-38f */ 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, /* 390-397 */ 0x718, 0x719, 0x790, 0x791, 0x916, 0x917, 0x996, 0x997, /* 398-39f */ 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, /* 3a0-3a7 */ 0x728, 0x729, 0x782, 0x783, 0x926, 0x927, 0x968, 0x969, /* 3a8-3af */ 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, /* 3b0-3b7 */ 0x738, 0x739, 0x792, 0x793, 0x936, 0x937, 0x978, 0x979, /* 3b8-3bf */ 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, /* 3c0-3c7 */ 0x748, 0x749, 0x784, 0x785, 0x946, 0x947, 0x788, 0x789, /* 3c8-3cf */ 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, /* 3d0-3d7 */ 0x758, 0x759, 0x794, 0x795, 0x956, 0x957, 0x798, 0x799, /* 3d8-3df */ 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, /* 3e0-3e7 */ 0x768, 0x769, 0x786, 0x787, 0x966, 0x967, 0x988, 0x989, /* 3e8-3ef */ 0x770, 0x771, 0x772, 0x773, 0x974, 0x775, 0x776, 0x777, /* 3f0-3f7 */ 0x778, 0x779, 0x796, 0x797, 0x976, 0x977, 0x998, 0x999 /* 3f8-3ff */ }; /* Table to convert 3 Binary Coded Decimal digits (12-bits) into 3 Densely Packed Decimal digits (10-bits). */ const short int bcd_to_dpd[2464] = { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */ 0x008, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 008-00f */ 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */ 0x018, 0x019, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 018-01f */ 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */ 0x028, 0x029, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 028-02f */ 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */ 0x038, 0x039, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 038-03f */ 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */ 0x048, 0x049, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 048-04f */ 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */ 0x058, 0x059, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 058-05f */ 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */ 0x068, 0x069, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 068-06f */ 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */ 0x078, 0x079, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 078-07f */ 0x00a, 0x00b, 0x02a, 0x02b, 0x04a, 0x04b, 0x06a, 0x06b, /* 080-087 */ 0x04e, 0x04f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 088-08f */ 0x01a, 0x01b, 0x03a, 0x03b, 0x05a, 0x05b, 0x07a, 0x07b, /* 090-097 */ 0x05e, 0x05f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 098-09f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0a0-0a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0a8-0af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0b0-0b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0b8-0bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0c0-0c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0c8-0cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0d0-0d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0d8-0df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0e0-0e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0e8-0ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0f0-0f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0f8-0ff */ 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, /* 100-107 */ 0x088, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 108-10f */ 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, /* 110-117 */ 0x098, 0x099, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 118-11f */ 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7, /* 120-127 */ 0x0a8, 0x0a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 128-12f */ 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7, /* 130-137 */ 0x0b8, 0x0b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 138-13f */ 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, /* 140-147 */ 0x0c8, 0x0c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 148-14f */ 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, /* 150-157 */ 0x0d8, 0x0d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 158-15f */ 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7, /* 160-167 */ 0x0e8, 0x0e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 168-16f */ 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7, /* 170-177 */ 0x0f8, 0x0f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 178-17f */ 0x08a, 0x08b, 0x0aa, 0x0ab, 0x0ca, 0x0cb, 0x0ea, 0x0eb, /* 180-187 */ 0x0ce, 0x0cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 188-18f */ 0x09a, 0x09b, 0x0ba, 0x0bb, 0x0da, 0x0db, 0x0fa, 0x0fb, /* 190-197 */ 0x0de, 0x0df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 198-19f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1a0-1a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1a8-1af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1b0-1b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1b8-1bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1c0-1c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1c8-1cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1d0-1d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1d8-1df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1e0-1e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1e8-1ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1f0-1f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1f8-1ff */ 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 200-207 */ 0x108, 0x109, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 208-20f */ 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 210-217 */ 0x118, 0x119, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 218-21f */ 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 220-227 */ 0x128, 0x129, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 228-22f */ 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 230-237 */ 0x138, 0x139, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 238-23f */ 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 240-247 */ 0x148, 0x149, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 248-24f */ 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 250-257 */ 0x158, 0x159, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 258-25f */ 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 260-267 */ 0x168, 0x169, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 268-26f */ 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 270-277 */ 0x178, 0x179, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 278-27f */ 0x10a, 0x10b, 0x12a, 0x12b, 0x14a, 0x14b, 0x16a, 0x16b, /* 280-287 */ 0x14e, 0x14f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 288-28f */ 0x11a, 0x11b, 0x13a, 0x13b, 0x15a, 0x15b, 0x17a, 0x17b, /* 290-297 */ 0x15e, 0x15f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 298-29f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2a0-2a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2a8-2af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2b0-2b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2b8-2bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2c0-2c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2c8-2cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2d0-2d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2d8-2df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2e0-2e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2e8-2ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2f0-2f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2f8-2ff */ 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, /* 300-307 */ 0x188, 0x189, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 308-30f */ 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, /* 310-317 */ 0x198, 0x199, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 318-31f */ 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7, /* 320-327 */ 0x1a8, 0x1a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 328-32f */ 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7, /* 330-337 */ 0x1b8, 0x1b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 338-33f */ 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7, /* 340-347 */ 0x1c8, 0x1c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 348-34f */ 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7, /* 350-357 */ 0x1d8, 0x1d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 358-35f */ 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7, /* 360-367 */ 0x1e8, 0x1e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 368-36f */ 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, /* 370-377 */ 0x1f8, 0x1f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 378-37f */ 0x18a, 0x18b, 0x1aa, 0x1ab, 0x1ca, 0x1cb, 0x1ea, 0x1eb, /* 380-387 */ 0x1ce, 0x1cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 388-38f */ 0x19a, 0x19b, 0x1ba, 0x1bb, 0x1da, 0x1db, 0x1fa, 0x1fb, /* 390-397 */ 0x1de, 0x1df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 398-39f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3a0-3a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3a8-3af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3b0-3b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3b8-3bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3c0-3c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3c8-3cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3d0-3d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3d8-3df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3e0-3e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3e8-3ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3f0-3f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3f8-3ff */ 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 400-407 */ 0x208, 0x209, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 408-40f */ 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 410-417 */ 0x218, 0x219, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 418-41f */ 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 420-427 */ 0x228, 0x229, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 428-42f */ 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 430-437 */ 0x238, 0x239, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 438-43f */ 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 440-447 */ 0x248, 0x249, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 448-44f */ 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 450-457 */ 0x258, 0x259, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 458-45f */ 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 460-467 */ 0x268, 0x269, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 468-46f */ 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 470-477 */ 0x278, 0x279, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 478-47f */ 0x20a, 0x20b, 0x22a, 0x22b, 0x24a, 0x24b, 0x26a, 0x26b, /* 480-487 */ 0x24e, 0x24f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 488-48f */ 0x21a, 0x21b, 0x23a, 0x23b, 0x25a, 0x25b, 0x27a, 0x27b, /* 490-497 */ 0x25e, 0x25f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 498-49f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4a0-4a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4a8-4af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4b0-4b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4b8-4bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4c0-4c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4c8-4cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4d0-4d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4d8-4df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4e0-4e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4e8-4ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4f0-4f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4f8-4ff */ 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, /* 500-507 */ 0x288, 0x289, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 508-50f */ 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, /* 510-517 */ 0x298, 0x299, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 518-51f */ 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, /* 520-527 */ 0x2a8, 0x2a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 528-52f */ 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, /* 530-537 */ 0x2b8, 0x2b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 538-53f */ 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, /* 540-547 */ 0x2c8, 0x2c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 548-54f */ 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, /* 550-557 */ 0x2d8, 0x2d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 558-55f */ 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, /* 560-567 */ 0x2e8, 0x2e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 568-56f */ 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, /* 570-577 */ 0x2f8, 0x2f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 578-57f */ 0x28a, 0x28b, 0x2aa, 0x2ab, 0x2ca, 0x2cb, 0x2ea, 0x2eb, /* 580-587 */ 0x2ce, 0x2cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 588-58f */ 0x29a, 0x29b, 0x2ba, 0x2bb, 0x2da, 0x2db, 0x2fa, 0x2fb, /* 590-597 */ 0x2de, 0x2df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 598-59f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5a0-5a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5a8-5af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5b0-5b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5b8-5bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5c0-5c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5c8-5cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5d0-5d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5d8-5df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5e0-5e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5e8-5ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5f0-5f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5f8-5ff */ 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 600-607 */ 0x308, 0x309, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 608-60f */ 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 610-617 */ 0x318, 0x319, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 618-61f */ 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 620-627 */ 0x328, 0x329, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 628-62f */ 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 630-637 */ 0x338, 0x339, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 638-63f */ 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 640-647 */ 0x348, 0x349, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 648-64f */ 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 650-657 */ 0x358, 0x359, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 658-65f */ 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 660-667 */ 0x368, 0x369, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 668-66f */ 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 670-677 */ 0x378, 0x379, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 678-67f */ 0x30a, 0x30b, 0x32a, 0x32b, 0x34a, 0x34b, 0x36a, 0x36b, /* 680-687 */ 0x34e, 0x34f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 688-68f */ 0x31a, 0x31b, 0x33a, 0x33b, 0x35a, 0x35b, 0x37a, 0x37b, /* 690-697 */ 0x35e, 0x35f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 698-69f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6a0-6a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6a8-6af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6b0-6b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6b8-6bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6c0-6c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6c8-6cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6d0-6d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6d8-6df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6e0-6e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6e8-6ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6f0-6f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6f8-6ff */ 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, /* 700-707 */ 0x388, 0x389, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 708-70f */ 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, /* 710-717 */ 0x398, 0x399, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 718-71f */ 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, /* 720-727 */ 0x3a8, 0x3a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 728-72f */ 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, /* 730-737 */ 0x3b8, 0x3b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 738-73f */ 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, /* 740-747 */ 0x3c8, 0x3c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 748-74f */ 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7, /* 750-757 */ 0x3d8, 0x3d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 758-75f */ 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7, /* 760-767 */ 0x3e8, 0x3e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 768-76f */ 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x000, 0x3f5, 0x3f6, 0x3f7, /* 770-777 */ 0x3f8, 0x3f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 778-77f */ 0x38a, 0x38b, 0x3aa, 0x3ab, 0x3ca, 0x3cb, 0x3ea, 0x3eb, /* 780-787 */ 0x3ce, 0x3cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 788-78f */ 0x39a, 0x39b, 0x3ba, 0x3bb, 0x3da, 0x3db, 0x3fa, 0x3fb, /* 790-797 */ 0x3de, 0x3df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 798-79f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7a0-7a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7a8-7af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7b0-7b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7b8-7bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7c0-7c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7c8-7cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7d0-7d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7d8-7df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7e0-7e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7e8-7ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7f0-7f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7f8-7ff */ 0x00c, 0x00d, 0x10c, 0x10d, 0x20c, 0x20d, 0x30c, 0x30d, /* 800-807 */ 0x02e, 0x02f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 808-80f */ 0x01c, 0x01d, 0x11c, 0x11d, 0x21c, 0x21d, 0x31c, 0x31d, /* 810-817 */ 0x03e, 0x03f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 818-81f */ 0x02c, 0x02d, 0x12c, 0x12d, 0x22c, 0x22d, 0x32c, 0x32d, /* 820-827 */ 0x12e, 0x12f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 828-82f */ 0x03c, 0x03d, 0x13c, 0x13d, 0x23c, 0x23d, 0x33c, 0x33d, /* 830-837 */ 0x13e, 0x13f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 838-83f */ 0x04c, 0x04d, 0x14c, 0x14d, 0x24c, 0x24d, 0x34c, 0x34d, /* 840-847 */ 0x22e, 0x22f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 848-84f */ 0x05c, 0x05d, 0x15c, 0x15d, 0x25c, 0x25d, 0x35c, 0x35d, /* 850-857 */ 0x23e, 0x23f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 858-85f */ 0x06c, 0x06d, 0x16c, 0x16d, 0x26c, 0x26d, 0x36c, 0x36d, /* 860-867 */ 0x32e, 0x32f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 868-86f */ 0x07c, 0x07d, 0x17c, 0x17d, 0x27c, 0x27d, 0x37c, 0x37d, /* 870-877 */ 0x33e, 0x33f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 878-87f */ 0x00e, 0x00f, 0x10e, 0x10f, 0x20e, 0x20f, 0x30e, 0x30f, /* 880-887 */ 0x06e, 0x06f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 888-88f */ 0x01e, 0x01f, 0x11e, 0x11f, 0x21e, 0x21f, 0x31e, 0x31f, /* 890-897 */ 0x07e, 0x07f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 898-89f */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8a0-8a7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8a8-8af */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8b0-8b7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8b8-8bf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8c0-8c7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8c8-8cf */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8d0-8d7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8d8-8df */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8e0-8e7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8e8-8ef */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8f0-8f7 */ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8f8-8ff */ 0x08c, 0x08d, 0x18c, 0x18d, 0x28c, 0x28d, 0x38c, 0x38d, /* 900-907 */ 0x0ae, 0x0af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 908-90f */ 0x09c, 0x09d, 0x19c, 0x19d, 0x29c, 0x29d, 0x39c, 0x39d, /* 910-917 */ 0x0be, 0x0bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 918-91f */ 0x0ac, 0x0ad, 0x1ac, 0x1ad, 0x2ac, 0x2ad, 0x3ac, 0x3ad, /* 920-927 */ 0x1ae, 0x1af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 928-92f */ 0x0bc, 0x0bd, 0x1bc, 0x1bd, 0x2bc, 0x2bd, 0x3bc, 0x3bd, /* 930-937 */ 0x1be, 0x1bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 938-93f */ 0x0cc, 0x0cd, 0x1cc, 0x1cd, 0x2cc, 0x2cd, 0x3cc, 0x3cd, /* 940-947 */ 0x2ae, 0x2af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 948-94f */ 0x0dc, 0x0dd, 0x1dc, 0x1dd, 0x2dc, 0x2dd, 0x3dc, 0x3dd, /* 950-957 */ 0x2be, 0x2bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 958-95f */ 0x0ec, 0x0ed, 0x1ec, 0x1ed, 0x2ec, 0x2ed, 0x3ec, 0x3ed, /* 960-967 */ 0x3ae, 0x3af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 968-96f */ 0x0fc, 0x0fd, 0x1fc, 0x1fd, 0x3f4, 0x2fd, 0x3fc, 0x3fd, /* 970-977 */ 0x3be, 0x3bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 978-97f */ 0x08e, 0x08f, 0x18e, 0x18f, 0x28e, 0x28f, 0x38e, 0x38f, /* 980-987 */ 0x0ee, 0x0ef, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 988-98f */ 0x09e, 0x09f, 0x19e, 0x19f, 0x29e, 0x29f, 0x39e, 0x39f, /* 990-997 */ 0x0fe, 0x0ff, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 998-99f */ }; /* Convert a declet into a binary value. This is basically dpd_to_bcd sans 0x. */ const short int dpd_to_bin[1024] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 80, 81, 800, 801, 880, 881, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 90, 91, 810, 811, 890, 891, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 82, 83, 820, 821, 808, 809, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 92, 93, 830, 831, 818, 819, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 84, 85, 840, 841, 88, 89, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 94, 95, 850, 851, 98, 99, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 860, 861, 888, 889, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 870, 871, 898, 899, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 180, 181, 900, 901, 980, 981, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 190, 191, 910, 911, 990, 991, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 182, 183, 920, 921, 908, 909, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 192, 193, 930, 931, 918, 919, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 184, 185, 940, 941, 188, 189, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 194, 195, 950, 951, 198, 199, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 186, 187, 960, 961, 988, 989, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 196, 197, 970, 971, 998, 999, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 280, 281, 802, 803, 882, 883, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 290, 291, 812, 813, 892, 893, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 282, 283, 822, 823, 828, 829, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 292, 293, 832, 833, 838, 839, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 284, 285, 842, 843, 288, 289, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 294, 295, 852, 853, 298, 299, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 286, 287, 862, 863, 888, 889, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 296, 297, 872, 873, 898, 899, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 380, 381, 902, 903, 982, 983, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 390, 391, 912, 913, 992, 993, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 382, 383, 922, 923, 928, 929, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 392, 393, 932, 933, 938, 939, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 384, 385, 942, 943, 388, 389, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 394, 395, 952, 953, 398, 399, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 386, 387, 962, 963, 988, 989, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 396, 397, 972, 973, 998, 999, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 480, 481, 804, 805, 884, 885, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 490, 491, 814, 815, 894, 895, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 482, 483, 824, 825, 848, 849, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 492, 493, 834, 835, 858, 859, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 484, 485, 844, 845, 488, 489, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 494, 495, 854, 855, 498, 499, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 486, 487, 864, 865, 888, 889, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 496, 497, 874, 875, 898, 899, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 580, 581, 904, 905, 984, 985, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 590, 591, 914, 915, 994, 995, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 582, 583, 924, 925, 948, 949, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 592, 593, 934, 935, 958, 959, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 584, 585, 944, 945, 588, 589, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 594, 595, 954, 955, 598, 599, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 586, 587, 964, 965, 988, 989, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 596, 597, 974, 975, 998, 999, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 680, 681, 806, 807, 886, 887, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 690, 691, 816, 817, 896, 897, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 682, 683, 826, 827, 868, 869, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 692, 693, 836, 837, 878, 879, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 684, 685, 846, 847, 688, 689, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 694, 695, 856, 857, 698, 699, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 686, 687, 866, 867, 888, 889, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 696, 697, 876, 877, 898, 899, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 780, 781, 906, 907, 986, 987, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 790, 791, 916, 917, 996, 997, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 782, 783, 926, 927, 968, 969, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 792, 793, 936, 937, 978, 979, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 784, 785, 946, 947, 788, 789, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 794, 795, 956, 957, 798, 799, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 786, 787, 966, 967, 988, 989, 770, 771, 772, 773, 974, 775, 776, 777, 778, 779, 796, 797, 976, 977, 998, 999 }; extern void __get_dpd_digits (int bits, const void *const *args, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p); void __get_dpd_digits (int bits, const void *const *args, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p) { int exp = 0; struct ieee754r_c_field c_f; if (bits == 32) { union ieee754r_Decimal32 d; d.sd = *(_Decimal32*)args[0]; c_f = c_decoder[d.ieee.c]; exp = c_f.lm_exp << DECIMAL32_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL32_Bias; __dpd_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]); __dpd_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]); str[7] = '\0'; if (sign_p) *sign_p = d.ieee.negative; } else if (bits == 64) { union ieee754r_Decimal64 d; d.dd = *(_Decimal64*)args[0]; c_f = c_decoder[d.ieee.c]; exp = c_f.lm_exp << DECIMAL64_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL64_Bias; __dpd_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]); /* Packed fields crossing a word boundary require special handling. */ __dpd_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]); __dpd_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]); __dpd_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]); __dpd_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]); str[16] = '\0'; if (sign_p) *sign_p = d.ieee.negative; } //else if (bits == 128) else { union ieee754r_Decimal128 d; d.td = *(_Decimal128*)args[0]; c_f = c_decoder[d.ieee.c]; exp = c_f.lm_exp << DECIMAL128_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL128_Bias; __dpd_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]); /* Packed fields crossing a word boundary require special handling. */ __dpd_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]); __dpd_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]); __dpd_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]); __dpd_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]); __dpd_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]); __dpd_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]); __dpd_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]); __dpd_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]); __dpd_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]); __dpd_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]); str[34] = '\0'; if (sign_p) *sign_p = d.ieee.negative; } str[0] = '0' + c_f.lmd; if (exp_p) *exp_p = exp; if (nan_p) *nan_p = c_f.is_nan; if (inf_p) *inf_p = c_f.is_inf; } void __get_digits_d32 (_Decimal32 x, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p) { int exp = 0; struct ieee754r_c_field c_f; union ieee754r_Decimal32 d; d.sd = x; c_f = c_decoder[d.ieee.c]; /* Consider replacing with a call to getexp_d* for hardware support */ exp = c_f.lm_exp << DECIMAL32_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL32_Bias; str[0] = '0' + c_f.lmd; __dpd_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]); __dpd_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]); str[7] = '\0'; if (sign_p) *sign_p = d.ieee.negative; if (exp_p) *exp_p = exp; if (nan_p) *nan_p = c_f.is_nan; if (inf_p) *inf_p = c_f.is_inf; } void __get_digits_d64 (_Decimal64 x, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p) { int exp = 0; struct ieee754r_c_field c_f; union ieee754r_Decimal64 d; d.dd = x; c_f = c_decoder[d.ieee.c]; /* Consider replacing with a call to getexp_d* for hardware support */ exp = c_f.lm_exp << DECIMAL64_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL64_Bias; str[0] = '0' + c_f.lmd; __dpd_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]); /* Packed fields crossing a word boundary require special handling. */ __dpd_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]); __dpd_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]); __dpd_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]); __dpd_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]); str[16] = '\0'; if (sign_p) *sign_p = d.ieee.negative; if (exp_p) *exp_p = exp; if (nan_p) *nan_p = c_f.is_nan; if (inf_p) *inf_p = c_f.is_inf; } void __get_digits_d128 (_Decimal128 x, char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p) { int exp = 0; struct ieee754r_c_field c_f; union ieee754r_Decimal128 d; d.td = x; c_f = c_decoder[d.ieee.c]; /* Consider replacing with a call to getexp_d* for hardware support */ exp = c_f.lm_exp << DECIMAL128_BEC_bits; exp += d.ieee.bec; exp -= DECIMAL128_Bias; str[0] = '0' + c_f.lmd; __dpd_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]); /* Packed fields crossing a word boundary require special handling. */ __dpd_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]); __dpd_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]); __dpd_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]); __dpd_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]); __dpd_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]); __dpd_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]); __dpd_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]); __dpd_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]); __dpd_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]); __dpd_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]); str[34] = '\0'; if (sign_p) *sign_p = d.ieee.negative; if (exp_p) *exp_p = exp; if (nan_p) *nan_p = c_f.is_nan; if (inf_p) *inf_p = c_f.is_inf; } libdfp-1.0.17/sysdeps/dpd/dpd-private.h000066400000000000000000000171401504475242000176770ustar00rootroot00000000000000/* Data types for DPD format output. Copyright (C) 2006, 2007 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steve Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DPD_PRIVATE_H #define _DPD_PRIVATE_H 1 #include /* copy the declet in the 'declet' param to the string in the 'str' param. */ static inline void __dpd_cpydeclet(char * str, const char * declet) { str[0] = declet[0]; str[1] = declet[1]; str[2] = declet[2]; } /* Basically itoa */ static inline char* __dpd_exptostr(char *str, int val) { int digit; if (val < 0) { *str++ = '-'; val = -val; } else { *str++ = '+'; } if (val > 999) { digit = val / 1000; val %= 1000; *str++ = '0' + digit; digit = val / 100; val %= 100; *str++ = '0' + digit; digit = val / 10; val %= 10; *str++ = '0' + digit; } else if (val > 99) { digit = val / 100; val %= 100; *str++ = '0' + digit; digit = val / 10; val %= 10; *str++ = '0' + digit; } else if (val > 9) { digit = val / 10; val %= 10; *str++ = '0' + digit; } *str++ = '0' + val; return str; } union ieee754r_Decimal32 { _Decimal32 sd; unsigned int si; /* This is the IEEE754r single-precision format. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:5; unsigned int bec:6; unsigned int cc0:10; unsigned int cc1:10; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int cc1:10; unsigned int cc0:10; unsigned int bec:6; unsigned int c:5; unsigned int negative:1; #endif /* Little endian. */ } ieee; /* This format makes it easier to see if a NaN is a signalling NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:5; unsigned int signaling_nan:1; unsigned int bec:5; unsigned int cc0:10; unsigned int cc1:10; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int cc1:10; unsigned int cc0:10; unsigned int bec:5; unsigned int signaling_nan:1; unsigned int c:5; unsigned int negative:1; #endif /* Little endian. */ } ieee_nan; }; #define DECIMAL32_Bias 101 /* bias for the exponent */ #define DECIMAL32_BEC_bits 6 /* Bits in BEC */ #define DECIMAL32_CC_bits 20 /* Bits in CC */ union ieee754r_Decimal64 { _Decimal64 dd; unsigned int di[2]; /* This is the IEEE754r _Decimal64 format. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:5; unsigned int bec:8; unsigned int cc0:10; unsigned int cc1H8:8; unsigned int cc1L2:2; unsigned int cc2:10; unsigned int cc3:10; unsigned int cc4:10; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int cc4:10; unsigned int cc3:10; unsigned int cc2:10; unsigned int cc1L2:2; unsigned int cc1H8:8; unsigned int cc0:10; unsigned int bec:8; unsigned int c:5; unsigned int negative:1; #endif /* Little endian. */ } ieee; /* This format makes it easier to see if a NaN is a signalling NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:5; unsigned int signaling_nan:1; unsigned int bec:7; unsigned int cc0:10; unsigned int cc1H8:8; unsigned int cc1L2:2; unsigned int cc2:10; unsigned int cc3:10; unsigned int cc4:10; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int cc4:10; unsigned int cc3:10; unsigned int cc2:10; unsigned int cc1L2:2; unsigned int cc1H8:8; unsigned int cc0:10; unsigned int bec:7; unsigned int signaling_nan:1; unsigned int c:5; unsigned int negative:1; #endif /* Little endian. */ } ieee_nan; }; #define DECIMAL64_Bias 398 /* bias for the exponent */ #define DECIMAL64_BEC_bits 8 /* Bits in BEC */ #define DECIMAL64_CC_bits 50 /* Bits in CC */ union ieee754r_Decimal128 { _Decimal128 td; unsigned int ti[4]; /* This is the IEEE754r _Decimal128 format. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:5; unsigned int bec:12; unsigned int cc0:10; unsigned int cc1H4:4; unsigned int cc1L6:6; unsigned int cc2:10; unsigned int cc3:10; unsigned int cc4H6:6; unsigned int cc4L4:4; unsigned int cc5:10; unsigned int cc6:10; unsigned int cc7H8:8; unsigned int cc7L2:2; unsigned int cc8:10; unsigned int cc9:10; unsigned int cc10:10; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int cc10:10; unsigned int cc9:10; unsigned int cc8:10; unsigned int cc7L2:2; unsigned int cc7H8:8; unsigned int cc6:10; unsigned int cc5:10; unsigned int cc4L4:4; unsigned int cc4H6:6; unsigned int cc3:10; unsigned int cc2:10; unsigned int cc1L6:6; unsigned int cc1H4:4; unsigned int cc0:10; unsigned int bec:12; unsigned int c:5; unsigned int negative:1; #endif /* Little endian. */ } ieee; /* This format makes it easier to see if a NaN is a signalling NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int c:5; unsigned int signaling_nan:1; unsigned int bec:11; unsigned int cc0:10; unsigned int cc1H4:4; unsigned int cc1L6:6; unsigned int cc2:10; unsigned int cc3:10; unsigned int cc4H6:6; unsigned int cc4L4:4; unsigned int cc5:10; unsigned int cc6:10; unsigned int cc7H8:8; unsigned int cc7L2:2; unsigned int cc8:10; unsigned int cc9:10; unsigned int cc10:10; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int cc10:10; unsigned int cc9:10; unsigned int cc8:10; unsigned int cc7L2:2; unsigned int cc7H8:8; unsigned int cc6:10; unsigned int cc5:10; unsigned int cc4L4:4; unsigned int cc4H6:6; unsigned int cc3:10; unsigned int cc2:10; unsigned int cc1L6:6; unsigned int cc1H4:4; unsigned int cc0:10; unsigned int bec:11; unsigned int signaling_nan:1; unsigned int c:5; unsigned int negative:1; #endif /* Little endian. */ } ieee_nan; }; #define DECIMAL128_Bias 6176 /* bias for the exponent */ #define DECIMAL128_BEC_bits 12 /* Bits in BEC */ #define DECIMAL128_CC_bits 110 /* Bits in CC */ struct ieee754r_c_field { unsigned int is_nan:1; unsigned int is_inf:1; unsigned int lm_exp:2; unsigned int lmd:4; }; extern const struct ieee754r_c_field c_decoder[32]; extern const unsigned char lm2lmd_to_c[10][4]; extern const char dpd_to_char[1024][4]; extern const short int dpd_to_bcd[1024]; extern const short int dpd_to_bin[1024]; extern const short int bcd_to_dpd[2464]; static inline unsigned int __dfp_declet_to_dpd(char *str) { return bcd_to_dpd[(str[0]<<8) + (str[1]<<4) + str[2] - '0'*0x111]; } #endif /* _DPD_PRIVATE */ libdfp-1.0.17/sysdeps/dpd/fmodd32.c000066400000000000000000000100031504475242000167000ustar00rootroot00000000000000/* Returns the remainder of a floating point division This implementation is based off that presented in "The Mathematical-Function Computation Handbook" by Nelson H.F. Beebe. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE #include #define _DECIMAL_SIZE 32 #endif #include #include #include #define FUNCTION_NAME fmod #include #if _DECIMAL_SIZE == 128 typedef struct { _Decimal128 hi, lo; } dp128_pair_t; /* TODO: Could this be simplified as y.lo is always 0, and x is always positive? */ static dp128_pair_t PSUM2 (_Decimal128 x, _Decimal128 y) { _Decimal128 sum, err; dp128_pair_t ret; /* The simplified version where x > y, always. */ sum = x + y; err = x - sum; err += y; ret.hi = sum; ret.lo = err; return ret; } static dp128_pair_t PSUB (dp128_pair_t x, _Decimal128 y) { _Decimal128 r, s; r = x.hi - y; /* The simplified version where x > y, always. */ s = x.hi - r; s -= y; s += x.lo; return PSUM2 (r, s); } #endif /* _DECIMAL_SIZE == 128 */ /* Computing the remainder requires a larger type for holding the remainder. */ #if _DECIMAL_SIZE >= 64 typedef _Decimal128 DEC_TYPE_REMAINDER; #define FREXP_RTYPE __frexpd128 #define LDEXP_RTYPE __ldexpd128 #else typedef _Decimal64 DEC_TYPE_REMAINDER; #define FREXP_RTYPE __frexpd64 #define LDEXP_RTYPE __ldexpd64 #endif /* _DECIMAL_SIZE >= 64 */ DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { int xc = FUNC_D (__fpclassify) (x); int yc = FUNC_D (__fpclassify) (y); if (xc != FP_NORMAL || yc != FP_NORMAL) { if (xc == FP_INFINITE || yc == FP_INFINITE || xc == FP_NAN || yc == FP_NAN || yc == FP_ZERO) { DFP_ERRNO (EDOM); return NAN; } } /* x and y are both finite values. */ DEC_TYPE xabs = FUNC_D (__fabs) (x); DEC_TYPE yabs = FUNC_D (__fabs) (y); DEC_TYPE result; if (xabs < yabs) result = x; else if (xabs == yabs) result = FUNC_D (__copysign) (0.DD, x); else { DEC_TYPE_REMAINDER r, t, yabs128; /* This algo requires n+1 digits of precision to be correct in decimal. */ #if _DECIMAL_SIZE == 128 DEC_TYPE_REMAINDER r_rem; #endif int nr, ny; r = xabs; yabs128 = yabs; FREXP_RTYPE (yabs128, &ny); while (r >= yabs128) { DEC_TYPE_REMAINDER yabs_scaled; int n; FREXP_RTYPE (r, &nr); n = nr - ny; yabs_scaled = LDEXP_RTYPE (yabs128, n); if (yabs_scaled > r) yabs_scaled = LDEXP_RTYPE (yabs128, n - 1); t = r - yabs_scaled; #if _DECIMAL_SIZE == 128 /* For _Decimal128, we need an extra digit if the subtraction is not exact, and there is no larger format, use pair precision. */ r_rem = (r - t) - yabs_scaled; if (r_rem != 0 && t >= yabs128) { /* Subtract using pair precision until exact, (1-9) operations. */ dp128_pair_t xp = { t, r_rem }; int n = 0; do { xp = PSUB (xp, yabs_scaled); n++; } while (n < 10 && xp.lo != 0.DD); t = xp.hi; } #endif r = t; } result = (x < 0.DD) ? -r : r; } return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/dpd/symbol-hacks.h000066400000000000000000000105341504475242000200540ustar00rootroot00000000000000/* Hacks for symbol bindings. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #if !defined __ASSEMBLER__ && !defined NOT_IN_libdfp && defined SHARED /* GCC generates intrisics calls to some functions for _Decimal to/from convertions. These bindings avoids intra library PLT calls generations, since libdfp provides such symbols. */ asm ("__dpd_floatsidd = __GI___dpd_floatsidd"); asm ("__dpd_floatditd = __GI___dpd_floatditd"); asm ("__dpd_floatsitd = __GI___dpd_floatsitd"); asm ("__dpd_floatdidd = __GI___dpd_floatdidd"); asm ("__dpd_floatdisd = __GI___dpd_floatdisd"); asm ("__dpd_floatsisd = __GI___dpd_floatsisd"); asm ("__dpd_floatunsditd = __GI___dpd_floatditd"); asm ("__dpd_floatunsdidd = __GI___dpd_floatdidd"); asm ("__dpd_floatunsdisd = __GI___dpd_floatdisd"); #ifdef __SIZEOF_INT128__ asm ("__dpd_floattitd = __GI___dpd_floattitd"); asm ("__dpd_floatunstitd = __GI___dpd_floatunstitd"); #endif asm ("__dpd_trunctddd2 = __GI___dpd_trunctddd2"); asm ("__dpd_truncddsd2 = __GI___dpd_truncddsd2"); asm ("__dpd_extendsddf = __GI___dpd_extendsddf"); asm ("__dpd_extenddfdd = __GI___dpd_extenddfdd"); asm ("__dpd_extenddftd = __GI___dpd_extenddftd"); asm ("__dpd_extendsdtd2 = __GI___dpd_extendsdtd2"); asm ("__dpd_extendsddd2 = __GI___dpd_extendsddd2"); asm ("__dpd_extendddtd2 = __GI___dpd_extendddtd2"); asm ("__dpd_truncdddf = __GI___dpd_truncdddf"); asm ("__dpd_trunctddf = __GI___dpd_trunctddf"); asm ("__dpd_truncdfsd = __GI___dpd_truncdfsd"); asm ("__dpd_trunctdsd2 = __GI___dpd_trunctdsd2"); asm ("__dpd_fixddsi = __GI___dpd_fixddsi"); asm ("__dpd_fixsdsi = __GI___dpd_fixsdsi"); asm ("__dpd_fixdddi = __GI___dpd_fixdddi"); asm ("__dpd_fixtdsi = __GI___dpd_fixtdsi"); asm ("__dpd_fixsddi = __GI___dpd_fixsddi"); asm ("__dpd_fixtddi = __GI___dpd_fixtddi"); asm ("__dpd_fixunssddi = __GI___dpd_fixunssddi"); asm ("__dpd_fixunsdddi = __GI___dpd_fixunsdddi"); asm ("__dpd_fixunstddi = __GI___dpd_fixunstddi"); #ifdef __SIZEOF_INT128__ asm ("__dpd_fixtdti = __GI___dpd_fixtdti"); asm ("__dpd_fixunstdti = __GI___dpd_fixunstdti"); #endif asm ("__dpd_addsd3 = __GI___dpd_addsd3"); asm ("__dpd_addtd3 = __GI___dpd_addtd3"); asm ("__dpd_adddd3 = __GI___dpd_adddd3"); asm ("__dpd_subdd3 = __GI___dpd_subdd3"); asm ("__dpd_subsd3 = __GI___dpd_subsd3"); asm ("__dpd_subtd3 = __GI___dpd_subtd3"); asm ("__dpd_divsd3 = __GI___dpd_divsd3"); asm ("__dpd_divtd3 = __GI___dpd_divtd3"); asm ("__dpd_divdd3 = __GI___dpd_divdd3"); asm ("__dpd_mulsd3 = __GI___dpd_mulsd3"); asm ("__dpd_multd3 = __GI___dpd_multd3"); asm ("__dpd_muldd3 = __GI___dpd_muldd3"); asm ("__dpd_gtdd2 = __GI___dpd_gtdd2"); asm ("__dpd_gtds2 = __GI___dpd_gtsd2"); asm ("__dpd_gtdt2 = __GI___dpd_gttd2"); asm ("__dpd_eqdd2 = __GI___dpd_eqdd2"); asm ("__dpd_eqsd2 = __GI___dpd_eqsd2"); asm ("__dpd_eqtd2 = __GI___dpd_eqtd2"); asm ("__dpd_ltsd2 = __GI___dpd_ltsd2"); asm ("__dpd_ltdd2 = __GI___dpd_ltdd2"); asm ("__dpd_lttd2 = __GI___dpd_lttd2"); asm ("__dpd_gtsd2 = __GI___dpd_gtsd2"); asm ("__dpd_gtdd2 = __GI___dpd_gtdd2"); asm ("__dpd_gttd2 = __GI___dpd_gttd2"); asm ("__dpd_lesd2 = __GI___dpd_lesd2"); asm ("__dpd_ledd2 = __GI___dpd_ledd2"); asm ("__dpd_letd2 = __GI___dpd_letd2"); asm ("__dpd_gesd2 = __GI___dpd_gesd2"); asm ("__dpd_gedd2 = __GI___dpd_gedd2"); asm ("__dpd_getd2 = __GI___dpd_getd2"); asm ("__dpd_nesd2 = __GI___dpd_nesd2"); asm ("__dpd_nedd2 = __GI___dpd_nedd2"); asm ("__dpd_netd2 = __GI___dpd_netd2"); asm ("__dpd_unordsd2 = __GI___dpd_unordsd2"); asm ("__dpd_unorddd2 = __GI___dpd_unorddd2"); asm ("__dpd_unordtd2 = __GI___dpd_unordtd2"); #endif libdfp-1.0.17/sysdeps/generic/000077500000000000000000000000001504475242000161515ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/generic/Makefile000066400000000000000000000000731504475242000176110ustar00rootroot00000000000000libdfp_files += mapround decode fe_decround libdfp-version libdfp-1.0.17/sysdeps/generic/binpowof10.c000066400000000000000000000251461504475242000203110ustar00rootroot00000000000000/* Table to ease conversion of exponants from decimal to binary format Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steve Munroe The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #if defined(__powerpc64__) && __LDBL_MANT_DIG__ == 113 typedef __ibm128 ldouble; #else typedef long double ldouble; #endif const ldouble binpowof10 [] = { 1e+00L, /* 10**0 */ 1e+01L, /* 10**1 */ 1e+02L, /* 10**2 */ 1e+03L, /* 10**3 */ 1e+04L, /* 10**4 */ 1e+05L, /* 10**5 */ 1e+06L, /* 10**6 */ 1e+07L, /* 10**7 */ 1e+08L, /* 10**8 */ 1e+09L, /* 10**9 */ 1e+10L, /* 10**10 */ 1e+11L, /* 10**11 */ 1e+12L, /* 10**12 */ 1e+13L, /* 10**13 */ 1e+14L, /* 10**14 */ 1e+15L, /* 10**15 */ 1e+16L, /* 10**16 */ 1e+17L, /* 10**17 */ 1e+18L, /* 10**18 */ 1e+19L, /* 10**19 */ 1e+20L, /* 10**20 */ 1e+21L, /* 10**21 */ 1e+22L, /* 10**22 */ 1e+23L, /* 10**23 */ 1e+24L, /* 10**24 */ 1e+25L, /* 10**25 */ 1e+26L, /* 10**26 */ 1e+27L, /* 10**27 */ 1e+28L, /* 10**28 */ 1e+29L, /* 10**29 */ 1e+30L, /* 10**30 */ 1e+31L, /* 10**31 */ 1e+32L, /* 10**32 */ 1e+33L, /* 10**33 */ 1e+34L, /* 10**34 */ 1e+35L, /* 10**35 */ 1e+36L, /* 10**36 */ 1e+37L, /* 10**37 */ 1e+38L, /* 10**38 */ 1e+39L, /* 10**39 */ 1e+40L, /* 10**40 */ 1e+41L, /* 10**41 */ 1e+42L, /* 10**42 */ 1e+43L, /* 10**43 */ 1e+44L, /* 10**44 */ 1e+45L, /* 10**45 */ 1e+46L, /* 10**46 */ 1e+47L, /* 10**47 */ 1e+48L, /* 10**48 */ 1e+49L, /* 10**49 */ 1e+50L, /* 10**50 */ 1e+51L, /* 10**51 */ 1e+52L, /* 10**52 */ 1e+53L, /* 10**53 */ 1e+54L, /* 10**54 */ 1e+55L, /* 10**55 */ 1e+56L, /* 10**56 */ 1e+57L, /* 10**57 */ 1e+58L, /* 10**58 */ 1e+59L, /* 10**59 */ 1e+60L, /* 10**60 */ 1e+61L, /* 10**61 */ 1e+62L, /* 10**62 */ 1e+63L, /* 10**63 */ 1e+64L, /* 10**64 */ 1e+65L, /* 10**65 */ 1e+66L, /* 10**66 */ 1e+67L, /* 10**67 */ 1e+68L, /* 10**68 */ 1e+69L, /* 10**69 */ 1e+70L, /* 10**70 */ 1e+71L, /* 10**71 */ 1e+72L, /* 10**72 */ 1e+73L, /* 10**73 */ 1e+74L, /* 10**74 */ 1e+75L, /* 10**75 */ 1e+76L, /* 10**76 */ 1e+77L, /* 10**77 */ 1e+78L, /* 10**78 */ 1e+79L, /* 10**79 */ 1e+80L, /* 10**80 */ 1e+81L, /* 10**81 */ 1e+82L, /* 10**82 */ 1e+83L, /* 10**83 */ 1e+84L, /* 10**84 */ 1e+85L, /* 10**85 */ 1e+86L, /* 10**86 */ 1e+87L, /* 10**87 */ 1e+88L, /* 10**88 */ 1e+89L, /* 10**89 */ 1e+90L, /* 10**90 */ 1e+91L, /* 10**91 */ 1e+92L, /* 10**92 */ 1e+93L, /* 10**93 */ 1e+94L, /* 10**94 */ 1e+95L, /* 10**95 */ 1e+96L, /* 10**96 */ 1e+97L, /* 10**97 */ 1e+98L, /* 10**98 */ 1e+99L, /* 10**99 */ 1e+100L, /* 10**100 */ 1e+101L, /* 10**101 */ 1e+102L, /* 10**102 */ 1e+103L, /* 10**103 */ 1e+104L, /* 10**104 */ 1e+105L, /* 10**105 */ 1e+106L, /* 10**106 */ 1e+107L, /* 10**107 */ 1e+108L, /* 10**108 */ 1e+109L, /* 10**109 */ 1e+110L, /* 10**110 */ 1e+111L, /* 10**111 */ 1e+112L, /* 10**112 */ 1e+113L, /* 10**113 */ 1e+114L, /* 10**114 */ 1e+115L, /* 10**115 */ 1e+116L, /* 10**116 */ 1e+117L, /* 10**117 */ 1e+118L, /* 10**118 */ 1e+119L, /* 10**119 */ 1e+120L, /* 10**120 */ 1e+121L, /* 10**121 */ 1e+122L, /* 10**122 */ 1e+123L, /* 10**123 */ 1e+124L, /* 10**124 */ 1e+125L, /* 10**125 */ 1e+126L, /* 10**126 */ 1e+127L, /* 10**127 */ 1e+128L, /* 10**128 */ 1e+129L, /* 10**129 */ 1e+130L, /* 10**130 */ 1e+131L, /* 10**131 */ 1e+132L, /* 10**132 */ 1e+133L, /* 10**133 */ 1e+134L, /* 10**134 */ 1e+135L, /* 10**135 */ 1e+136L, /* 10**136 */ 1e+137L, /* 10**137 */ 1e+138L, /* 10**138 */ 1e+139L, /* 10**139 */ 1e+140L, /* 10**140 */ 1e+141L, /* 10**141 */ 1e+142L, /* 10**142 */ 1e+143L, /* 10**143 */ 1e+144L, /* 10**144 */ 1e+145L, /* 10**145 */ 1e+146L, /* 10**146 */ 1e+147L, /* 10**147 */ 1e+148L, /* 10**148 */ 1e+149L, /* 10**149 */ 1e+150L, /* 10**150 */ 1e+151L, /* 10**151 */ 1e+152L, /* 10**152 */ 1e+153L, /* 10**153 */ 1e+154L, /* 10**154 */ 1e+155L, /* 10**155 */ 1e+156L, /* 10**156 */ 1e+157L, /* 10**157 */ 1e+158L, /* 10**158 */ 1e+159L, /* 10**159 */ 1e+160L, /* 10**160 */ 1e+161L, /* 10**161 */ 1e+162L, /* 10**162 */ 1e+163L, /* 10**163 */ 1e+164L, /* 10**164 */ 1e+165L, /* 10**165 */ 1e+166L, /* 10**166 */ 1e+167L, /* 10**167 */ 1e+168L, /* 10**168 */ 1e+169L, /* 10**169 */ 1e+170L, /* 10**170 */ 1e+171L, /* 10**171 */ 1e+172L, /* 10**172 */ 1e+173L, /* 10**173 */ 1e+174L, /* 10**174 */ 1e+175L, /* 10**175 */ 1e+176L, /* 10**176 */ 1e+177L, /* 10**177 */ 1e+178L, /* 10**178 */ 1e+179L, /* 10**179 */ 1e+180L, /* 10**180 */ 1e+181L, /* 10**181 */ 1e+182L, /* 10**182 */ 1e+183L, /* 10**183 */ 1e+184L, /* 10**184 */ 1e+185L, /* 10**185 */ 1e+186L, /* 10**186 */ 1e+187L, /* 10**187 */ 1e+188L, /* 10**188 */ 1e+189L, /* 10**189 */ 1e+190L, /* 10**190 */ 1e+191L, /* 10**191 */ 1e+192L, /* 10**192 */ 1e+193L, /* 10**193 */ 1e+194L, /* 10**194 */ 1e+195L, /* 10**195 */ 1e+196L, /* 10**196 */ 1e+197L, /* 10**197 */ 1e+198L, /* 10**198 */ 1e+199L, /* 10**199 */ 1e+200L, /* 10**200 */ 1e+201L, /* 10**201 */ 1e+202L, /* 10**202 */ 1e+203L, /* 10**203 */ 1e+204L, /* 10**204 */ 1e+205L, /* 10**205 */ 1e+206L, /* 10**206 */ 1e+207L, /* 10**207 */ 1e+208L, /* 10**208 */ 1e+209L, /* 10**209 */ 1e+210L, /* 10**210 */ 1e+211L, /* 10**211 */ 1e+212L, /* 10**212 */ 1e+213L, /* 10**213 */ 1e+214L, /* 10**214 */ 1e+215L, /* 10**215 */ 1e+216L, /* 10**216 */ 1e+217L, /* 10**217 */ 1e+218L, /* 10**218 */ 1e+219L, /* 10**219 */ 1e+220L, /* 10**220 */ 1e+221L, /* 10**221 */ 1e+222L, /* 10**222 */ 1e+223L, /* 10**223 */ 1e+224L, /* 10**224 */ 1e+225L, /* 10**225 */ 1e+226L, /* 10**226 */ 1e+227L, /* 10**227 */ 1e+228L, /* 10**228 */ 1e+229L, /* 10**229 */ 1e+230L, /* 10**230 */ 1e+231L, /* 10**231 */ 1e+232L, /* 10**232 */ 1e+233L, /* 10**233 */ 1e+234L, /* 10**234 */ 1e+235L, /* 10**235 */ 1e+236L, /* 10**236 */ 1e+237L, /* 10**237 */ 1e+238L, /* 10**238 */ 1e+239L, /* 10**239 */ 1e+240L, /* 10**240 */ 1e+241L, /* 10**241 */ 1e+242L, /* 10**242 */ 1e+243L, /* 10**243 */ 1e+244L, /* 10**244 */ 1e+245L, /* 10**245 */ 1e+246L, /* 10**246 */ 1e+247L, /* 10**247 */ 1e+248L, /* 10**248 */ 1e+249L, /* 10**249 */ 1e+250L, /* 10**250 */ 1e+251L, /* 10**251 */ 1e+252L, /* 10**252 */ 1e+253L, /* 10**253 */ 1e+254L, /* 10**254 */ 1e+255L, /* 10**255 */ 1e+256L, /* 10**256 */ 1e+257L, /* 10**257 */ 1e+258L, /* 10**258 */ 1e+259L, /* 10**259 */ 1e+260L, /* 10**260 */ 1e+261L, /* 10**261 */ 1e+262L, /* 10**262 */ 1e+263L, /* 10**263 */ 1e+264L, /* 10**264 */ 1e+265L, /* 10**265 */ 1e+266L, /* 10**266 */ 1e+267L, /* 10**267 */ 1e+268L, /* 10**268 */ 1e+269L, /* 10**269 */ 1e+270L, /* 10**270 */ 1e+271L, /* 10**271 */ 1e+272L, /* 10**272 */ 1e+273L, /* 10**273 */ 1e+274L, /* 10**274 */ 1e+275L, /* 10**275 */ 1e+276L, /* 10**276 */ 1e+277L, /* 10**277 */ 1e+278L, /* 10**278 */ 1e+279L, /* 10**279 */ 1e+280L, /* 10**280 */ 1e+281L, /* 10**281 */ 1e+282L, /* 10**282 */ 1e+283L, /* 10**283 */ 1e+284L, /* 10**284 */ 1e+285L, /* 10**285 */ 1e+286L, /* 10**286 */ 1e+287L, /* 10**287 */ 1e+288L, /* 10**288 */ 1e+289L, /* 10**289 */ 1e+290L, /* 10**290 */ 1e+291L, /* 10**291 */ 1e+292L, /* 10**292 */ 1e+293L, /* 10**293 */ 1e+294L, /* 10**294 */ 1e+295L, /* 10**295 */ 1e+296L, /* 10**296 */ 1e+297L, /* 10**297 */ 1e+298L, /* 10**298 */ 1e+299L, /* 10**299 */ 1e+300L, /* 10**300 */ 1e+301L, /* 10**301 */ 1e+302L, /* 10**302 */ 1e+303L, /* 10**303 */ 1e+304L, /* 10**304 */ 1e+305L, /* 10**305 */ 1e+306L, /* 10**306 */ 1e+307L, /* 10**307 */ 1e+308L};/* 10**308 */ /* Long Double only supports exponent up to 308. */ /* Is this really necessary? */ /* weak_alias(binpowof10, __dfp_binpowof10) */ libdfp-1.0.17/sysdeps/generic/convert_helpers.h000066400000000000000000000130251504475242000215250ustar00rootroot00000000000000/* Generic implementations of conversion helper routines. Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _CONVERTHELPERS #define _CONVERTHELPERS #include #include _Decimal64 combine_and_truncd64 (_Decimal128 hi, _Decimal128 mid, _Decimal128 low); _Decimal32 combine_and_truncd32 (_Decimal128 hi, _Decimal128 mid, _Decimal128 low); /* This is a simplified version of frexpd* which instead returns frexpd*(x) * 10^num_digs. mp is assumed to be 10^num_digs. */ #define GETMANTANDEXP(SIZE) \ static inline _Decimal ## SIZE \ getmantandexpd ## SIZE (_Decimal ## SIZE x, \ int *y, \ int shift __attribute((unused)), \ _Decimal ## SIZE mp) \ { \ _Decimal ## SIZE result = __frexpd ## SIZE (x,y); \ return result * mp; \ } GETMANTANDEXP(32) GETMANTANDEXP(64) GETMANTANDEXP(128) #define fast_truncd128(a) __truncd128(a) #define fast_truncd64(a) __truncd64(a) #define fast_truncd32(a) __truncd32(a) #ifdef __DECIMAL_BID_FORMAT__ #include "bid-private.h" #include static inline int getmantd32 (_Decimal32 sd, long *exp) { union { _Decimal32 d; uint32_t i; } n = { .d = sd }; int neg = n.i & (1<<31); int m; if ((n.i & 0x60000000) != 0x60000000) { *exp = (n.i >> 23) & 0xFF; m = n.i & 0x7FFFFF; } else { *exp = (n.i >> 21) & 0xFF; m = (n.i & 0x1FFFFF) | (1 << 23); } *exp -= DECIMAL32_Bias; return neg ? -m : m; } static inline long long int getmantd64 (_Decimal64 dd, long *exp) { union { _Decimal64 d; int64_t i; } n = { .d = dd }; uint64_t neg = n.i & (1LL<<63LL); int64_t m; if (((n.i >> 61LL) & 0x3LL) != 0x3LL) { *exp = (n.i >> 53) & 0x3FF; m = n.i & 0x1FFFFFFFFFFFFFLL; } else { *exp = (n.i >> 51) & 0x3FF; m = n.i & 0x7FFFFFFFFFFFFLL; m |= (1LL << 53LL); } *exp -= DECIMAL64_Bias; return neg ? -m : m; } #ifdef INT128 static inline INT128 getmantd128 (_Decimal128 td, long *exp) { union { _Decimal128 d; struct { #if __BYTE_ORDER == __LITTLE_ENDIAN UINT128 c:113; UINT128 e:14; UINT128 s:1; #else UINT128 s:1; UINT128 e:14; UINT128 c:113; #endif } bc; uint64_t di[2]; } n = { .d = td }; INT128 m; *exp = n.bc.e; *exp -= DECIMAL128_Bias; m = n.bc.c; return n.bc.s ? -m : m; } #endif /* INT128 */ #else /* DPD backend */ #include "dpd-private.h" static inline int getmantd32 (_Decimal32 sd, long *exp) { union ieee754r_Decimal32 sdsi; struct ieee754r_c_field cf; int m; sdsi.sd = sd; cf = c_decoder[sdsi.ieee.c]; *exp = (cf.lm_exp << DECIMAL32_BEC_bits) | sdsi.ieee.bec; *exp -= DECIMAL32_Bias; m = dpd_to_bin[sdsi.ieee.cc1]; m += dpd_to_bin[sdsi.ieee.cc0] * 1000; m += cf.lmd * 1000000; if (sdsi.ieee.negative) m = -m; return m; } /* Merge two fields spanning a type. */ #define _M(_l,_h,_n,_p) \ (((_p).ieee.cc ## _n ## L ## _l) | (((_p).ieee.cc ## _n ## H ## _h)<<_l)) static inline long long int getmantd64 (_Decimal64 dd, long *exp) { union ieee754r_Decimal64 dddi; struct ieee754r_c_field cf; long long int m; long cc1; dddi.dd = dd; cf = c_decoder[dddi.ieee.c]; *exp = (cf.lm_exp << DECIMAL64_BEC_bits) | dddi.ieee.bec; *exp -= DECIMAL64_Bias; cc1 = _M(2,8,1,dddi); m = dpd_to_bin[dddi.ieee.cc4]; m += (long long int) dpd_to_bin[dddi.ieee.cc3] * 1000; m += (long long int) dpd_to_bin[dddi.ieee.cc2] * 1000000; m += (long long int) dpd_to_bin[ cc1] * 1000000000; m += (long long int) dpd_to_bin[dddi.ieee.cc0] * 1000000000000; m += (long long int) cf.lmd * 1000000000000000; if (dddi.ieee.negative) m = -m; return m; } #ifdef INT128 static inline INT128 getmantd128 (_Decimal128 td, long *exp) { union ieee754r_Decimal128 tdti; struct ieee754r_c_field cf; INT128 m; long cc1, cc4, cc7; tdti.td = td; cf = c_decoder[tdti.ieee.c]; *exp = (cf.lm_exp << DECIMAL128_BEC_bits) | tdti.ieee.bec; *exp -= DECIMAL128_Bias; cc1 = _M(6,4,1,tdti); cc4 = _M(4,6,4,tdti); cc7 = _M(2,8,7,tdti); m = cf.lmd; m = 1000 * m + dpd_to_bin[tdti.ieee.cc0]; m = 1000 * m + dpd_to_bin[ cc1]; m = 1000 * m + dpd_to_bin[tdti.ieee.cc2]; m = 1000 * m + dpd_to_bin[tdti.ieee.cc3]; m = 1000 * m + dpd_to_bin[ cc4]; m = 1000 * m + dpd_to_bin[tdti.ieee.cc5]; m = 1000 * m + dpd_to_bin[tdti.ieee.cc6]; m = 1000 * m + dpd_to_bin[ cc7]; m = 1000 * m + dpd_to_bin[tdti.ieee.cc8]; m = 1000 * m + dpd_to_bin[tdti.ieee.cc9]; m = 1000 * m + dpd_to_bin[tdti.ieee.cc10]; if (tdti.ieee.negative) m = -m; return m; } #endif #endif /* _BID_BACKEND == 1 */ #endif /* _CONVERTHELPERS */ libdfp-1.0.17/sysdeps/generic/decpowof2.c000066400000000000000000001702261504475242000202150ustar00rootroot00000000000000/* Table to ease conversion from binary to decimal formats Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steve Munroe The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ /* Table of decimal powers of 2 from 0 to 1076. Only positive powers of * 2 are needed as negative exponents are handled via divide. Entries * 1023-1076 are required to handle denormal doubles (-1022 - 54) */ const _Decimal128 decpowof2 [] = { 1.0E+0DL, /* 2**0 */ 2.0E+0DL, /* 2**1 */ 4.0E+0DL, /* 2**2 */ 8.0E+0DL, /* 2**3 */ 1.6E+1DL, /* 2**4 */ 3.2E+1DL, /* 2**5 */ 6.4E+1DL, /* 2**6 */ 1.28E+2DL, /* 2**7 */ 2.56E+2DL, /* 2**8 */ 5.12E+2DL, /* 2**9 */ 1.024E+3DL, /* 2**10 */ 2.048E+3DL, /* 2**11 */ 4.096E+3DL, /* 2**12 */ 8.192E+3DL, /* 2**13 */ 1.6384E+4DL, /* 2**14 */ 3.2768E+4DL, /* 2**15 */ 6.5536E+4DL, /* 2**16 */ 1.31072E+5DL, /* 2**17 */ 2.62144E+5DL, /* 2**18 */ 5.24288E+5DL, /* 2**19 */ 1.048576E+6DL, /* 2**20 */ 2.097152E+6DL, /* 2**21 */ 4.194304E+6DL, /* 2**22 */ 8.388608E+6DL, /* 2**23 */ 1.6777216E+7DL, /* 2**24 */ 3.3554432E+7DL, /* 2**25 */ 6.7108864E+7DL, /* 2**26 */ 1.34217728E+8DL, /* 2**27 */ 2.68435456E+8DL, /* 2**28 */ 5.36870912E+8DL, /* 2**29 */ 1.073741824E+9DL, /* 2**30 */ 2.147483648E+9DL, /* 2**31 */ 4.294967296E+9DL, /* 2**32 */ 8.589934592E+9DL, /* 2**33 */ 1.7179869184E+10DL, /* 2**34 */ 3.4359738368E+10DL, /* 2**35 */ 6.8719476736E+10DL, /* 2**36 */ 1.37438953472E+11DL, /* 2**37 */ 2.74877906944E+11DL, /* 2**38 */ 5.49755813888E+11DL, /* 2**39 */ 1.099511627776E+12DL, /* 2**40 */ 2.199023255552E+12DL, /* 2**41 */ 4.398046511104E+12DL, /* 2**42 */ 8.796093022208E+12DL, /* 2**43 */ 1.7592186044416E+13DL, /* 2**44 */ 3.5184372088832E+13DL, /* 2**45 */ 7.0368744177664E+13DL, /* 2**46 */ 1.40737488355328E+14DL, /* 2**47 */ 2.81474976710656E+14DL, /* 2**48 */ 5.62949953421312E+14DL, /* 2**49 */ 1.125899906842624E+15DL, /* 2**50 */ 2.251799813685248E+15DL, /* 2**51 */ 4.503599627370496E+15DL, /* 2**52 */ 9.007199254740992E+15DL, /* 2**53 */ 1.8014398509481984E+16DL, /* 2**54 */ 3.6028797018963968E+16DL, /* 2**55 */ 7.2057594037927936E+16DL, /* 2**56 */ 1.44115188075855872E+17DL, /* 2**57 */ 2.88230376151711744E+17DL, /* 2**58 */ 5.76460752303423488E+17DL, /* 2**59 */ 1.152921504606846976E+18DL, /* 2**60 */ 2.305843009213693952E+18DL, /* 2**61 */ 4.611686018427387904E+18DL, /* 2**62 */ 9.223372036854775808E+18DL, /* 2**63 */ 1.8446744073709551616E+19DL, /* 2**64 */ 3.6893488147419103232E+19DL, /* 2**65 */ 7.3786976294838206464E+19DL, /* 2**66 */ 1.47573952589676412928E+20DL, /* 2**67 */ 2.95147905179352825856E+20DL, /* 2**68 */ 5.90295810358705651712E+20DL, /* 2**69 */ 1.180591620717411303424E+21DL, /* 2**70 */ 2.361183241434822606848E+21DL, /* 2**71 */ 4.722366482869645213696E+21DL, /* 2**72 */ 9.444732965739290427392E+21DL, /* 2**73 */ 1.8889465931478580854784E+22DL, /* 2**74 */ 3.7778931862957161709568E+22DL, /* 2**75 */ 7.5557863725914323419136E+22DL, /* 2**76 */ 1.51115727451828646838272E+23DL, /* 2**77 */ 3.02231454903657293676544E+23DL, /* 2**78 */ 6.04462909807314587353088E+23DL, /* 2**79 */ 1.208925819614629174706176E+24DL, /* 2**80 */ 2.417851639229258349412352E+24DL, /* 2**81 */ 4.835703278458516698824704E+24DL, /* 2**82 */ 9.671406556917033397649408E+24DL, /* 2**83 */ 1.9342813113834066795298816E+25DL, /* 2**84 */ 3.8685626227668133590597632E+25DL, /* 2**85 */ 7.7371252455336267181195264E+25DL, /* 2**86 */ 1.54742504910672534362390528E+26DL, /* 2**87 */ 3.09485009821345068724781056E+26DL, /* 2**88 */ 6.18970019642690137449562112E+26DL, /* 2**89 */ 1.237940039285380274899124224E+27DL, /* 2**90 */ 2.475880078570760549798248448E+27DL, /* 2**91 */ 4.951760157141521099596496896E+27DL, /* 2**92 */ 9.903520314283042199192993792E+27DL, /* 2**93 */ 1.9807040628566084398385987584E+28DL, /* 2**94 */ 3.9614081257132168796771975168E+28DL, /* 2**95 */ 7.9228162514264337593543950336E+28DL, /* 2**96 */ 1.58456325028528675187087900672E+29DL, /* 2**97 */ 3.16912650057057350374175801344E+29DL, /* 2**98 */ 6.33825300114114700748351602688E+29DL, /* 2**99 */ 1.267650600228229401496703205376E+30DL, /* 2**100 */ 2.535301200456458802993406410752E+30DL, /* 2**101 */ 5.070602400912917605986812821504E+30DL, /* 2**102 */ 1.0141204801825835211973625643008E+31DL, /* 2**103 */ 2.0282409603651670423947251286016E+31DL, /* 2**104 */ 4.0564819207303340847894502572032E+31DL, /* 2**105 */ 8.1129638414606681695789005144064E+31DL, /* 2**106 */ 1.62259276829213363391578010288128E+32DL, /* 2**107 */ 3.24518553658426726783156020576256E+32DL, /* 2**108 */ 6.49037107316853453566312041152512E+32DL, /* 2**109 */ 1.298074214633706907132624082305024E+33DL, /* 2**110 */ 2.596148429267413814265248164610048E+33DL, /* 2**111 */ 5.192296858534827628530496329220096E+33DL, /* 2**112 */ 1.038459371706965525706099265844019E+34DL, /* 2**113 */ 2.076918743413931051412198531688038E+34DL, /* 2**114 */ 4.153837486827862102824397063376077E+34DL, /* 2**115 */ 8.307674973655724205648794126752154E+34DL, /* 2**116 */ 1.661534994731144841129758825350431E+35DL, /* 2**117 */ 3.323069989462289682259517650700861E+35DL, /* 2**118 */ 6.646139978924579364519035301401723E+35DL, /* 2**119 */ 1.329227995784915872903807060280345E+36DL, /* 2**120 */ 2.658455991569831745807614120560689E+36DL, /* 2**121 */ 5.316911983139663491615228241121378E+36DL, /* 2**122 */ 1.063382396627932698323045648224276E+37DL, /* 2**123 */ 2.126764793255865396646091296448551E+37DL, /* 2**124 */ 4.253529586511730793292182592897103E+37DL, /* 2**125 */ 8.507059173023461586584365185794205E+37DL, /* 2**126 */ 1.701411834604692317316873037158841E+38DL, /* 2**127 */ 3.402823669209384634633746074317682E+38DL, /* 2**128 */ 6.805647338418769269267492148635364E+38DL, /* 2**129 */ 1.361129467683753853853498429727073E+39DL, /* 2**130 */ 2.722258935367507707706996859454146E+39DL, /* 2**131 */ 5.444517870735015415413993718908291E+39DL, /* 2**132 */ 1.088903574147003083082798743781658E+40DL, /* 2**133 */ 2.177807148294006166165597487563317E+40DL, /* 2**134 */ 4.355614296588012332331194975126633E+40DL, /* 2**135 */ 8.711228593176024664662389950253266E+40DL, /* 2**136 */ 1.742245718635204932932477990050653E+41DL, /* 2**137 */ 3.484491437270409865864955980101306E+41DL, /* 2**138 */ 6.968982874540819731729911960202613E+41DL, /* 2**139 */ 1.393796574908163946345982392040523E+42DL, /* 2**140 */ 2.787593149816327892691964784081045E+42DL, /* 2**141 */ 5.575186299632655785383929568162090E+42DL, /* 2**142 */ 1.115037259926531157076785913632418E+43DL, /* 2**143 */ 2.230074519853062314153571827264836E+43DL, /* 2**144 */ 4.460149039706124628307143654529672E+43DL, /* 2**145 */ 8.920298079412249256614287309059345E+43DL, /* 2**146 */ 1.784059615882449851322857461811869E+44DL, /* 2**147 */ 3.568119231764899702645714923623738E+44DL, /* 2**148 */ 7.136238463529799405291429847247476E+44DL, /* 2**149 */ 1.427247692705959881058285969449495E+45DL, /* 2**150 */ 2.854495385411919762116571938898990E+45DL, /* 2**151 */ 5.708990770823839524233143877797981E+45DL, /* 2**152 */ 1.141798154164767904846628775559596E+46DL, /* 2**153 */ 2.283596308329535809693257551119192E+46DL, /* 2**154 */ 4.567192616659071619386515102238384E+46DL, /* 2**155 */ 9.134385233318143238773030204476769E+46DL, /* 2**156 */ 1.826877046663628647754606040895354E+47DL, /* 2**157 */ 3.653754093327257295509212081790708E+47DL, /* 2**158 */ 7.307508186654514591018424163581415E+47DL, /* 2**159 */ 1.461501637330902918203684832716283E+48DL, /* 2**160 */ 2.923003274661805836407369665432566E+48DL, /* 2**161 */ 5.846006549323611672814739330865132E+48DL, /* 2**162 */ 1.169201309864722334562947866173026E+49DL, /* 2**163 */ 2.338402619729444669125895732346053E+49DL, /* 2**164 */ 4.676805239458889338251791464692106E+49DL, /* 2**165 */ 9.353610478917778676503582929384211E+49DL, /* 2**166 */ 1.870722095783555735300716585876842E+50DL, /* 2**167 */ 3.741444191567111470601433171753685E+50DL, /* 2**168 */ 7.482888383134222941202866343507369E+50DL, /* 2**169 */ 1.496577676626844588240573268701474E+51DL, /* 2**170 */ 2.993155353253689176481146537402948E+51DL, /* 2**171 */ 5.986310706507378352962293074805895E+51DL, /* 2**172 */ 1.197262141301475670592458614961179E+52DL, /* 2**173 */ 2.394524282602951341184917229922358E+52DL, /* 2**174 */ 4.789048565205902682369834459844716E+52DL, /* 2**175 */ 9.578097130411805364739668919689432E+52DL, /* 2**176 */ 1.915619426082361072947933783937886E+53DL, /* 2**177 */ 3.831238852164722145895867567875773E+53DL, /* 2**178 */ 7.662477704329444291791735135751546E+53DL, /* 2**179 */ 1.532495540865888858358347027150309E+54DL, /* 2**180 */ 3.064991081731777716716694054300618E+54DL, /* 2**181 */ 6.129982163463555433433388108601237E+54DL, /* 2**182 */ 1.225996432692711086686677621720247E+55DL, /* 2**183 */ 2.451992865385422173373355243440495E+55DL, /* 2**184 */ 4.903985730770844346746710486880989E+55DL, /* 2**185 */ 9.807971461541688693493420973761979E+55DL, /* 2**186 */ 1.961594292308337738698684194752396E+56DL, /* 2**187 */ 3.923188584616675477397368389504792E+56DL, /* 2**188 */ 7.846377169233350954794736779009583E+56DL, /* 2**189 */ 1.569275433846670190958947355801917E+57DL, /* 2**190 */ 3.138550867693340381917894711603833E+57DL, /* 2**191 */ 6.277101735386680763835789423207666E+57DL, /* 2**192 */ 1.255420347077336152767157884641533E+58DL, /* 2**193 */ 2.510840694154672305534315769283067E+58DL, /* 2**194 */ 5.021681388309344611068631538566133E+58DL, /* 2**195 */ 1.004336277661868922213726307713227E+59DL, /* 2**196 */ 2.008672555323737844427452615426453E+59DL, /* 2**197 */ 4.017345110647475688854905230852907E+59DL, /* 2**198 */ 8.034690221294951377709810461705813E+59DL, /* 2**199 */ 1.606938044258990275541962092341163E+60DL, /* 2**200 */ 3.213876088517980551083924184682325E+60DL, /* 2**201 */ 6.427752177035961102167848369364650E+60DL, /* 2**202 */ 1.285550435407192220433569673872930E+61DL, /* 2**203 */ 2.571100870814384440867139347745860E+61DL, /* 2**204 */ 5.142201741628768881734278695491720E+61DL, /* 2**205 */ 1.028440348325753776346855739098344E+62DL, /* 2**206 */ 2.056880696651507552693711478196688E+62DL, /* 2**207 */ 4.113761393303015105387422956393376E+62DL, /* 2**208 */ 8.227522786606030210774845912786753E+62DL, /* 2**209 */ 1.645504557321206042154969182557351E+63DL, /* 2**210 */ 3.291009114642412084309938365114701E+63DL, /* 2**211 */ 6.582018229284824168619876730229402E+63DL, /* 2**212 */ 1.316403645856964833723975346045880E+64DL, /* 2**213 */ 2.632807291713929667447950692091761E+64DL, /* 2**214 */ 5.265614583427859334895901384183522E+64DL, /* 2**215 */ 1.053122916685571866979180276836704E+65DL, /* 2**216 */ 2.106245833371143733958360553673409E+65DL, /* 2**217 */ 4.212491666742287467916721107346817E+65DL, /* 2**218 */ 8.424983333484574935833442214693635E+65DL, /* 2**219 */ 1.684996666696914987166688442938727E+66DL, /* 2**220 */ 3.369993333393829974333376885877454E+66DL, /* 2**221 */ 6.739986666787659948666753771754908E+66DL, /* 2**222 */ 1.347997333357531989733350754350982E+67DL, /* 2**223 */ 2.695994666715063979466701508701963E+67DL, /* 2**224 */ 5.391989333430127958933403017403926E+67DL, /* 2**225 */ 1.078397866686025591786680603480785E+68DL, /* 2**226 */ 2.156795733372051183573361206961570E+68DL, /* 2**227 */ 4.313591466744102367146722413923141E+68DL, /* 2**228 */ 8.627182933488204734293444827846282E+68DL, /* 2**229 */ 1.725436586697640946858688965569256E+69DL, /* 2**230 */ 3.450873173395281893717377931138513E+69DL, /* 2**231 */ 6.901746346790563787434755862277025E+69DL, /* 2**232 */ 1.380349269358112757486951172455405E+70DL, /* 2**233 */ 2.760698538716225514973902344910810E+70DL, /* 2**234 */ 5.521397077432451029947804689821620E+70DL, /* 2**235 */ 1.104279415486490205989560937964324E+71DL, /* 2**236 */ 2.208558830972980411979121875928648E+71DL, /* 2**237 */ 4.417117661945960823958243751857296E+71DL, /* 2**238 */ 8.834235323891921647916487503714593E+71DL, /* 2**239 */ 1.766847064778384329583297500742919E+72DL, /* 2**240 */ 3.533694129556768659166595001485837E+72DL, /* 2**241 */ 7.067388259113537318333190002971674E+72DL, /* 2**242 */ 1.413477651822707463666638000594335E+73DL, /* 2**243 */ 2.826955303645414927333276001188670E+73DL, /* 2**244 */ 5.653910607290829854666552002377339E+73DL, /* 2**245 */ 1.130782121458165970933310400475468E+74DL, /* 2**246 */ 2.261564242916331941866620800950936E+74DL, /* 2**247 */ 4.523128485832663883733241601901871E+74DL, /* 2**248 */ 9.046256971665327767466483203803743E+74DL, /* 2**249 */ 1.809251394333065553493296640760749E+75DL, /* 2**250 */ 3.618502788666131106986593281521497E+75DL, /* 2**251 */ 7.237005577332262213973186563042994E+75DL, /* 2**252 */ 1.447401115466452442794637312608599E+76DL, /* 2**253 */ 2.894802230932904885589274625217198E+76DL, /* 2**254 */ 5.789604461865809771178549250434395E+76DL, /* 2**255 */ 1.157920892373161954235709850086879E+77DL, /* 2**256 */ 2.315841784746323908471419700173758E+77DL, /* 2**257 */ 4.631683569492647816942839400347516E+77DL, /* 2**258 */ 9.263367138985295633885678800695033E+77DL, /* 2**259 */ 1.852673427797059126777135760139007E+78DL, /* 2**260 */ 3.705346855594118253554271520278013E+78DL, /* 2**261 */ 7.410693711188236507108543040556026E+78DL, /* 2**262 */ 1.482138742237647301421708608111205E+79DL, /* 2**263 */ 2.964277484475294602843417216222410E+79DL, /* 2**264 */ 5.928554968950589205686834432444821E+79DL, /* 2**265 */ 1.185710993790117841137366886488964E+80DL, /* 2**266 */ 2.371421987580235682274733772977928E+80DL, /* 2**267 */ 4.742843975160471364549467545955857E+80DL, /* 2**268 */ 9.485687950320942729098935091911713E+80DL, /* 2**269 */ 1.897137590064188545819787018382343E+81DL, /* 2**270 */ 3.794275180128377091639574036764685E+81DL, /* 2**271 */ 7.588550360256754183279148073529371E+81DL, /* 2**272 */ 1.517710072051350836655829614705874E+82DL, /* 2**273 */ 3.035420144102701673311659229411748E+82DL, /* 2**274 */ 6.070840288205403346623318458823497E+82DL, /* 2**275 */ 1.214168057641080669324663691764699E+83DL, /* 2**276 */ 2.428336115282161338649327383529399E+83DL, /* 2**277 */ 4.856672230564322677298654767058797E+83DL, /* 2**278 */ 9.713344461128645354597309534117595E+83DL, /* 2**279 */ 1.942668892225729070919461906823519E+84DL, /* 2**280 */ 3.885337784451458141838923813647038E+84DL, /* 2**281 */ 7.770675568902916283677847627294076E+84DL, /* 2**282 */ 1.554135113780583256735569525458815E+85DL, /* 2**283 */ 3.108270227561166513471139050917630E+85DL, /* 2**284 */ 6.216540455122333026942278101835261E+85DL, /* 2**285 */ 1.243308091024466605388455620367052E+86DL, /* 2**286 */ 2.486616182048933210776911240734104E+86DL, /* 2**287 */ 4.973232364097866421553822481468208E+86DL, /* 2**288 */ 9.946464728195732843107644962936417E+86DL, /* 2**289 */ 1.989292945639146568621528992587283E+87DL, /* 2**290 */ 3.978585891278293137243057985174567E+87DL, /* 2**291 */ 7.957171782556586274486115970349133E+87DL, /* 2**292 */ 1.591434356511317254897223194069827E+88DL, /* 2**293 */ 3.182868713022634509794446388139653E+88DL, /* 2**294 */ 6.365737426045269019588892776279307E+88DL, /* 2**295 */ 1.273147485209053803917778555255861E+89DL, /* 2**296 */ 2.546294970418107607835557110511723E+89DL, /* 2**297 */ 5.092589940836215215671114221023445E+89DL, /* 2**298 */ 1.018517988167243043134222844204689E+90DL, /* 2**299 */ 2.037035976334486086268445688409378E+90DL, /* 2**300 */ 4.074071952668972172536891376818756E+90DL, /* 2**301 */ 8.148143905337944345073782753637513E+90DL, /* 2**302 */ 1.629628781067588869014756550727503E+91DL, /* 2**303 */ 3.259257562135177738029513101455005E+91DL, /* 2**304 */ 6.518515124270355476059026202910010E+91DL, /* 2**305 */ 1.303703024854071095211805240582002E+92DL, /* 2**306 */ 2.607406049708142190423610481164004E+92DL, /* 2**307 */ 5.214812099416284380847220962328008E+92DL, /* 2**308 */ 1.042962419883256876169444192465602E+93DL, /* 2**309 */ 2.085924839766513752338888384931203E+93DL, /* 2**310 */ 4.171849679533027504677776769862406E+93DL, /* 2**311 */ 8.343699359066055009355553539724813E+93DL, /* 2**312 */ 1.668739871813211001871110707944963E+94DL, /* 2**313 */ 3.337479743626422003742221415889925E+94DL, /* 2**314 */ 6.674959487252844007484442831779850E+94DL, /* 2**315 */ 1.334991897450568801496888566355970E+95DL, /* 2**316 */ 2.669983794901137602993777132711940E+95DL, /* 2**317 */ 5.339967589802275205987554265423880E+95DL, /* 2**318 */ 1.067993517960455041197510853084776E+96DL, /* 2**319 */ 2.135987035920910082395021706169552E+96DL, /* 2**320 */ 4.271974071841820164790043412339104E+96DL, /* 2**321 */ 8.543948143683640329580086824678208E+96DL, /* 2**322 */ 1.708789628736728065916017364935642E+97DL, /* 2**323 */ 3.417579257473456131832034729871283E+97DL, /* 2**324 */ 6.835158514946912263664069459742567E+97DL, /* 2**325 */ 1.367031702989382452732813891948513E+98DL, /* 2**326 */ 2.734063405978764905465627783897027E+98DL, /* 2**327 */ 5.468126811957529810931255567794053E+98DL, /* 2**328 */ 1.093625362391505962186251113558811E+99DL, /* 2**329 */ 2.187250724783011924372502227117621E+99DL, /* 2**330 */ 4.374501449566023848745004454235243E+99DL, /* 2**331 */ 8.749002899132047697490008908470485E+99DL, /* 2**332 */ 1.749800579826409539498001781694097E+100DL, /* 2**333 */ 3.499601159652819078996003563388194E+100DL, /* 2**334 */ 6.999202319305638157992007126776388E+100DL, /* 2**335 */ 1.399840463861127631598401425355278E+101DL, /* 2**336 */ 2.799680927722255263196802850710555E+101DL, /* 2**337 */ 5.599361855444510526393605701421111E+101DL, /* 2**338 */ 1.119872371088902105278721140284222E+102DL, /* 2**339 */ 2.239744742177804210557442280568444E+102DL, /* 2**340 */ 4.479489484355608421114884561136889E+102DL, /* 2**341 */ 8.958978968711216842229769122273777E+102DL, /* 2**342 */ 1.791795793742243368445953824454755E+103DL, /* 2**343 */ 3.583591587484486736891907648909511E+103DL, /* 2**344 */ 7.167183174968973473783815297819022E+103DL, /* 2**345 */ 1.433436634993794694756763059563804E+104DL, /* 2**346 */ 2.866873269987589389513526119127609E+104DL, /* 2**347 */ 5.733746539975178779027052238255217E+104DL, /* 2**348 */ 1.146749307995035755805410447651043E+105DL, /* 2**349 */ 2.293498615990071511610820895302087E+105DL, /* 2**350 */ 4.586997231980143023221641790604174E+105DL, /* 2**351 */ 9.173994463960286046443283581208348E+105DL, /* 2**352 */ 1.834798892792057209288656716241670E+106DL, /* 2**353 */ 3.669597785584114418577313432483339E+106DL, /* 2**354 */ 7.339195571168228837154626864966678E+106DL, /* 2**355 */ 1.467839114233645767430925372993336E+107DL, /* 2**356 */ 2.935678228467291534861850745986671E+107DL, /* 2**357 */ 5.871356456934583069723701491973343E+107DL, /* 2**358 */ 1.174271291386916613944740298394669E+108DL, /* 2**359 */ 2.348542582773833227889480596789337E+108DL, /* 2**360 */ 4.697085165547666455778961193578674E+108DL, /* 2**361 */ 9.394170331095332911557922387157348E+108DL, /* 2**362 */ 1.878834066219066582311584477431470E+109DL, /* 2**363 */ 3.757668132438133164623168954862939E+109DL, /* 2**364 */ 7.515336264876266329246337909725878E+109DL, /* 2**365 */ 1.503067252975253265849267581945176E+110DL, /* 2**366 */ 3.006134505950506531698535163890351E+110DL, /* 2**367 */ 6.012269011901013063397070327780703E+110DL, /* 2**368 */ 1.202453802380202612679414065556141E+111DL, /* 2**369 */ 2.404907604760405225358828131112281E+111DL, /* 2**370 */ 4.809815209520810450717656262224562E+111DL, /* 2**371 */ 9.619630419041620901435312524449124E+111DL, /* 2**372 */ 1.923926083808324180287062504889825E+112DL, /* 2**373 */ 3.847852167616648360574125009779650E+112DL, /* 2**374 */ 7.695704335233296721148250019559300E+112DL, /* 2**375 */ 1.539140867046659344229650003911860E+113DL, /* 2**376 */ 3.078281734093318688459300007823720E+113DL, /* 2**377 */ 6.156563468186637376918600015647440E+113DL, /* 2**378 */ 1.231312693637327475383720003129488E+114DL, /* 2**379 */ 2.462625387274654950767440006258976E+114DL, /* 2**380 */ 4.925250774549309901534880012517952E+114DL, /* 2**381 */ 9.850501549098619803069760025035903E+114DL, /* 2**382 */ 1.970100309819723960613952005007181E+115DL, /* 2**383 */ 3.940200619639447921227904010014361E+115DL, /* 2**384 */ 7.880401239278895842455808020028723E+115DL, /* 2**385 */ 1.576080247855779168491161604005745E+116DL, /* 2**386 */ 3.152160495711558336982323208011489E+116DL, /* 2**387 */ 6.304320991423116673964646416022978E+116DL, /* 2**388 */ 1.260864198284623334792929283204596E+117DL, /* 2**389 */ 2.521728396569246669585858566409191E+117DL, /* 2**390 */ 5.043456793138493339171717132818383E+117DL, /* 2**391 */ 1.008691358627698667834343426563677E+118DL, /* 2**392 */ 2.017382717255397335668686853127353E+118DL, /* 2**393 */ 4.034765434510794671337373706254706E+118DL, /* 2**394 */ 8.069530869021589342674747412509412E+118DL, /* 2**395 */ 1.613906173804317868534949482501882E+119DL, /* 2**396 */ 3.227812347608635737069898965003765E+119DL, /* 2**397 */ 6.455624695217271474139797930007530E+119DL, /* 2**398 */ 1.291124939043454294827959586001506E+120DL, /* 2**399 */ 2.582249878086908589655919172003012E+120DL, /* 2**400 */ 5.164499756173817179311838344006024E+120DL, /* 2**401 */ 1.032899951234763435862367668801205E+121DL, /* 2**402 */ 2.065799902469526871724735337602409E+121DL, /* 2**403 */ 4.131599804939053743449470675204819E+121DL, /* 2**404 */ 8.263199609878107486898941350409638E+121DL, /* 2**405 */ 1.652639921975621497379788270081928E+122DL, /* 2**406 */ 3.305279843951242994759576540163855E+122DL, /* 2**407 */ 6.610559687902485989519153080327710E+122DL, /* 2**408 */ 1.322111937580497197903830616065542E+123DL, /* 2**409 */ 2.644223875160994395807661232131084E+123DL, /* 2**410 */ 5.288447750321988791615322464262168E+123DL, /* 2**411 */ 1.057689550064397758323064492852434E+124DL, /* 2**412 */ 2.115379100128795516646128985704867E+124DL, /* 2**413 */ 4.230758200257591033292257971409735E+124DL, /* 2**414 */ 8.461516400515182066584515942819469E+124DL, /* 2**415 */ 1.692303280103036413316903188563894E+125DL, /* 2**416 */ 3.384606560206072826633806377127788E+125DL, /* 2**417 */ 6.769213120412145653267612754255575E+125DL, /* 2**418 */ 1.353842624082429130653522550851115E+126DL, /* 2**419 */ 2.707685248164858261307045101702230E+126DL, /* 2**420 */ 5.415370496329716522614090203404460E+126DL, /* 2**421 */ 1.083074099265943304522818040680892E+127DL, /* 2**422 */ 2.166148198531886609045636081361784E+127DL, /* 2**423 */ 4.332296397063773218091272162723568E+127DL, /* 2**424 */ 8.664592794127546436182544325447137E+127DL, /* 2**425 */ 1.732918558825509287236508865089427E+128DL, /* 2**426 */ 3.465837117651018574473017730178855E+128DL, /* 2**427 */ 6.931674235302037148946035460357709E+128DL, /* 2**428 */ 1.386334847060407429789207092071542E+129DL, /* 2**429 */ 2.772669694120814859578414184143084E+129DL, /* 2**430 */ 5.545339388241629719156828368286167E+129DL, /* 2**431 */ 1.109067877648325943831365673657233E+130DL, /* 2**432 */ 2.218135755296651887662731347314467E+130DL, /* 2**433 */ 4.436271510593303775325462694628934E+130DL, /* 2**434 */ 8.872543021186607550650925389257868E+130DL, /* 2**435 */ 1.774508604237321510130185077851574E+131DL, /* 2**436 */ 3.549017208474643020260370155703147E+131DL, /* 2**437 */ 7.098034416949286040520740311406294E+131DL, /* 2**438 */ 1.419606883389857208104148062281259E+132DL, /* 2**439 */ 2.839213766779714416208296124562518E+132DL, /* 2**440 */ 5.678427533559428832416592249125035E+132DL, /* 2**441 */ 1.135685506711885766483318449825007E+133DL, /* 2**442 */ 2.271371013423771532966636899650014E+133DL, /* 2**443 */ 4.542742026847543065933273799300028E+133DL, /* 2**444 */ 9.085484053695086131866547598600057E+133DL, /* 2**445 */ 1.817096810739017226373309519720011E+134DL, /* 2**446 */ 3.634193621478034452746619039440023E+134DL, /* 2**447 */ 7.268387242956068905493238078880045E+134DL, /* 2**448 */ 1.453677448591213781098647615776009E+135DL, /* 2**449 */ 2.907354897182427562197295231552018E+135DL, /* 2**450 */ 5.814709794364855124394590463104036E+135DL, /* 2**451 */ 1.162941958872971024878918092620807E+136DL, /* 2**452 */ 2.325883917745942049757836185241615E+136DL, /* 2**453 */ 4.651767835491884099515672370483229E+136DL, /* 2**454 */ 9.303535670983768199031344740966458E+136DL, /* 2**455 */ 1.860707134196753639806268948193292E+137DL, /* 2**456 */ 3.721414268393507279612537896386583E+137DL, /* 2**457 */ 7.442828536787014559225075792773166E+137DL, /* 2**458 */ 1.488565707357402911845015158554633E+138DL, /* 2**459 */ 2.977131414714805823690030317109267E+138DL, /* 2**460 */ 5.954262829429611647380060634218533E+138DL, /* 2**461 */ 1.190852565885922329476012126843707E+139DL, /* 2**462 */ 2.381705131771844658952024253687413E+139DL, /* 2**463 */ 4.763410263543689317904048507374827E+139DL, /* 2**464 */ 9.526820527087378635808097014749653E+139DL, /* 2**465 */ 1.905364105417475727161619402949931E+140DL, /* 2**466 */ 3.810728210834951454323238805899861E+140DL, /* 2**467 */ 7.621456421669902908646477611799722E+140DL, /* 2**468 */ 1.524291284333980581729295522359944E+141DL, /* 2**469 */ 3.048582568667961163458591044719889E+141DL, /* 2**470 */ 6.097165137335922326917182089439778E+141DL, /* 2**471 */ 1.219433027467184465383436417887956E+142DL, /* 2**472 */ 2.438866054934368930766872835775911E+142DL, /* 2**473 */ 4.877732109868737861533745671551822E+142DL, /* 2**474 */ 9.755464219737475723067491343103645E+142DL, /* 2**475 */ 1.951092843947495144613498268620729E+143DL, /* 2**476 */ 3.902185687894990289226996537241458E+143DL, /* 2**477 */ 7.804371375789980578453993074482916E+143DL, /* 2**478 */ 1.560874275157996115690798614896583E+144DL, /* 2**479 */ 3.121748550315992231381597229793166E+144DL, /* 2**480 */ 6.243497100631984462763194459586333E+144DL, /* 2**481 */ 1.248699420126396892552638891917267E+145DL, /* 2**482 */ 2.497398840252793785105277783834533E+145DL, /* 2**483 */ 4.994797680505587570210555567669066E+145DL, /* 2**484 */ 9.989595361011175140421111135338132E+145DL, /* 2**485 */ 1.997919072202235028084222227067626E+146DL, /* 2**486 */ 3.995838144404470056168444454135253E+146DL, /* 2**487 */ 7.991676288808940112336888908270506E+146DL, /* 2**488 */ 1.598335257761788022467377781654101E+147DL, /* 2**489 */ 3.196670515523576044934755563308202E+147DL, /* 2**490 */ 6.393341031047152089869511126616405E+147DL, /* 2**491 */ 1.278668206209430417973902225323281E+148DL, /* 2**492 */ 2.557336412418860835947804450646562E+148DL, /* 2**493 */ 5.114672824837721671895608901293124E+148DL, /* 2**494 */ 1.022934564967544334379121780258625E+149DL, /* 2**495 */ 2.045869129935088668758243560517249E+149DL, /* 2**496 */ 4.091738259870177337516487121034499E+149DL, /* 2**497 */ 8.183476519740354675032974242068998E+149DL, /* 2**498 */ 1.636695303948070935006594848413800E+150DL, /* 2**499 */ 3.273390607896141870013189696827599E+150DL, /* 2**500 */ 6.546781215792283740026379393655198E+150DL, /* 2**501 */ 1.309356243158456748005275878731040E+151DL, /* 2**502 */ 2.618712486316913496010551757462079E+151DL, /* 2**503 */ 5.237424972633826992021103514924159E+151DL, /* 2**504 */ 1.047484994526765398404220702984832E+152DL, /* 2**505 */ 2.094969989053530796808441405969663E+152DL, /* 2**506 */ 4.189939978107061593616882811939327E+152DL, /* 2**507 */ 8.379879956214123187233765623878654E+152DL, /* 2**508 */ 1.675975991242824637446753124775731E+153DL, /* 2**509 */ 3.351951982485649274893506249551462E+153DL, /* 2**510 */ 6.703903964971298549787012499102923E+153DL, /* 2**511 */ 1.340780792994259709957402499820585E+154DL, /* 2**512 */ 2.681561585988519419914804999641169E+154DL, /* 2**513 */ 5.363123171977038839829609999282338E+154DL, /* 2**514 */ 1.072624634395407767965921999856468E+155DL, /* 2**515 */ 2.145249268790815535931843999712935E+155DL, /* 2**516 */ 4.290498537581631071863687999425871E+155DL, /* 2**517 */ 8.580997075163262143727375998851742E+155DL, /* 2**518 */ 1.716199415032652428745475199770348E+156DL, /* 2**519 */ 3.432398830065304857490950399540697E+156DL, /* 2**520 */ 6.864797660130609714981900799081393E+156DL, /* 2**521 */ 1.372959532026121942996380159816279E+157DL, /* 2**522 */ 2.745919064052243885992760319632557E+157DL, /* 2**523 */ 5.491838128104487771985520639265115E+157DL, /* 2**524 */ 1.098367625620897554397104127853023E+158DL, /* 2**525 */ 2.196735251241795108794208255706046E+158DL, /* 2**526 */ 4.393470502483590217588416511412092E+158DL, /* 2**527 */ 8.786941004967180435176833022824183E+158DL, /* 2**528 */ 1.757388200993436087035366604564837E+159DL, /* 2**529 */ 3.514776401986872174070733209129673E+159DL, /* 2**530 */ 7.029552803973744348141466418259347E+159DL, /* 2**531 */ 1.405910560794748869628293283651869E+160DL, /* 2**532 */ 2.811821121589497739256586567303739E+160DL, /* 2**533 */ 5.623642243178995478513173134607477E+160DL, /* 2**534 */ 1.124728448635799095702634626921495E+161DL, /* 2**535 */ 2.249456897271598191405269253842991E+161DL, /* 2**536 */ 4.498913794543196382810538507685982E+161DL, /* 2**537 */ 8.997827589086392765621077015371964E+161DL, /* 2**538 */ 1.799565517817278553124215403074393E+162DL, /* 2**539 */ 3.599131035634557106248430806148785E+162DL, /* 2**540 */ 7.198262071269114212496861612297571E+162DL, /* 2**541 */ 1.439652414253822842499372322459514E+163DL, /* 2**542 */ 2.879304828507645684998744644919028E+163DL, /* 2**543 */ 5.758609657015291369997489289838057E+163DL, /* 2**544 */ 1.151721931403058273999497857967611E+164DL, /* 2**545 */ 2.303443862806116547998995715935223E+164DL, /* 2**546 */ 4.606887725612233095997991431870445E+164DL, /* 2**547 */ 9.213775451224466191995982863740891E+164DL, /* 2**548 */ 1.842755090244893238399196572748178E+165DL, /* 2**549 */ 3.685510180489786476798393145496356E+165DL, /* 2**550 */ 7.371020360979572953596786290992713E+165DL, /* 2**551 */ 1.474204072195914590719357258198543E+166DL, /* 2**552 */ 2.948408144391829181438714516397085E+166DL, /* 2**553 */ 5.896816288783658362877429032794170E+166DL, /* 2**554 */ 1.179363257756731672575485806558834E+167DL, /* 2**555 */ 2.358726515513463345150971613117668E+167DL, /* 2**556 */ 4.717453031026926690301943226235336E+167DL, /* 2**557 */ 9.434906062053853380603886452470672E+167DL, /* 2**558 */ 1.886981212410770676120777290494134E+168DL, /* 2**559 */ 3.773962424821541352241554580988269E+168DL, /* 2**560 */ 7.547924849643082704483109161976538E+168DL, /* 2**561 */ 1.509584969928616540896621832395308E+169DL, /* 2**562 */ 3.019169939857233081793243664790615E+169DL, /* 2**563 */ 6.038339879714466163586487329581230E+169DL, /* 2**564 */ 1.207667975942893232717297465916246E+170DL, /* 2**565 */ 2.415335951885786465434594931832492E+170DL, /* 2**566 */ 4.830671903771572930869189863664984E+170DL, /* 2**567 */ 9.661343807543145861738379727329968E+170DL, /* 2**568 */ 1.932268761508629172347675945465994E+171DL, /* 2**569 */ 3.864537523017258344695351890931987E+171DL, /* 2**570 */ 7.729075046034516689390703781863975E+171DL, /* 2**571 */ 1.545815009206903337878140756372795E+172DL, /* 2**572 */ 3.091630018413806675756281512745590E+172DL, /* 2**573 */ 6.183260036827613351512563025491180E+172DL, /* 2**574 */ 1.236652007365522670302512605098236E+173DL, /* 2**575 */ 2.473304014731045340605025210196472E+173DL, /* 2**576 */ 4.946608029462090681210050420392944E+173DL, /* 2**577 */ 9.893216058924181362420100840785888E+173DL, /* 2**578 */ 1.978643211784836272484020168157178E+174DL, /* 2**579 */ 3.957286423569672544968040336314355E+174DL, /* 2**580 */ 7.914572847139345089936080672628710E+174DL, /* 2**581 */ 1.582914569427869017987216134525742E+175DL, /* 2**582 */ 3.165829138855738035974432269051484E+175DL, /* 2**583 */ 6.331658277711476071948864538102968E+175DL, /* 2**584 */ 1.266331655542295214389772907620594E+176DL, /* 2**585 */ 2.532663311084590428779545815241187E+176DL, /* 2**586 */ 5.065326622169180857559091630482374E+176DL, /* 2**587 */ 1.013065324433836171511818326096475E+177DL, /* 2**588 */ 2.026130648867672343023636652192950E+177DL, /* 2**589 */ 4.052261297735344686047273304385900E+177DL, /* 2**590 */ 8.104522595470689372094546608771799E+177DL, /* 2**591 */ 1.620904519094137874418909321754360E+178DL, /* 2**592 */ 3.241809038188275748837818643508720E+178DL, /* 2**593 */ 6.483618076376551497675637287017439E+178DL, /* 2**594 */ 1.296723615275310299535127457403488E+179DL, /* 2**595 */ 2.593447230550620599070254914806976E+179DL, /* 2**596 */ 5.186894461101241198140509829613951E+179DL, /* 2**597 */ 1.037378892220248239628101965922790E+180DL, /* 2**598 */ 2.074757784440496479256203931845581E+180DL, /* 2**599 */ 4.149515568880992958512407863691161E+180DL, /* 2**600 */ 8.299031137761985917024815727382322E+180DL, /* 2**601 */ 1.659806227552397183404963145476464E+181DL, /* 2**602 */ 3.319612455104794366809926290952929E+181DL, /* 2**603 */ 6.639224910209588733619852581905858E+181DL, /* 2**604 */ 1.327844982041917746723970516381172E+182DL, /* 2**605 */ 2.655689964083835493447941032762343E+182DL, /* 2**606 */ 5.311379928167670986895882065524686E+182DL, /* 2**607 */ 1.062275985633534197379176413104937E+183DL, /* 2**608 */ 2.124551971267068394758352826209875E+183DL, /* 2**609 */ 4.249103942534136789516705652419749E+183DL, /* 2**610 */ 8.498207885068273579033411304839498E+183DL, /* 2**611 */ 1.699641577013654715806682260967900E+184DL, /* 2**612 */ 3.399283154027309431613364521935799E+184DL, /* 2**613 */ 6.798566308054618863226729043871598E+184DL, /* 2**614 */ 1.359713261610923772645345808774320E+185DL, /* 2**615 */ 2.719426523221847545290691617548639E+185DL, /* 2**616 */ 5.438853046443695090581383235097279E+185DL, /* 2**617 */ 1.087770609288739018116276647019456E+186DL, /* 2**618 */ 2.175541218577478036232553294038911E+186DL, /* 2**619 */ 4.351082437154956072465106588077823E+186DL, /* 2**620 */ 8.702164874309912144930213176155646E+186DL, /* 2**621 */ 1.740432974861982428986042635231129E+187DL, /* 2**622 */ 3.480865949723964857972085270462258E+187DL, /* 2**623 */ 6.961731899447929715944170540924517E+187DL, /* 2**624 */ 1.392346379889585943188834108184903E+188DL, /* 2**625 */ 2.784692759779171886377668216369807E+188DL, /* 2**626 */ 5.569385519558343772755336432739613E+188DL, /* 2**627 */ 1.113877103911668754551067286547923E+189DL, /* 2**628 */ 2.227754207823337509102134573095845E+189DL, /* 2**629 */ 4.455508415646675018204269146191691E+189DL, /* 2**630 */ 8.911016831293350036408538292383381E+189DL, /* 2**631 */ 1.782203366258670007281707658476676E+190DL, /* 2**632 */ 3.564406732517340014563415316953353E+190DL, /* 2**633 */ 7.128813465034680029126830633906705E+190DL, /* 2**634 */ 1.425762693006936005825366126781341E+191DL, /* 2**635 */ 2.851525386013872011650732253562682E+191DL, /* 2**636 */ 5.703050772027744023301464507125364E+191DL, /* 2**637 */ 1.140610154405548804660292901425073E+192DL, /* 2**638 */ 2.281220308811097609320585802850146E+192DL, /* 2**639 */ 4.562440617622195218641171605700291E+192DL, /* 2**640 */ 9.124881235244390437282343211400583E+192DL, /* 2**641 */ 1.824976247048878087456468642280117E+193DL, /* 2**642 */ 3.649952494097756174912937284560233E+193DL, /* 2**643 */ 7.299904988195512349825874569120466E+193DL, /* 2**644 */ 1.459980997639102469965174913824093E+194DL, /* 2**645 */ 2.919961995278204939930349827648186E+194DL, /* 2**646 */ 5.839923990556409879860699655296373E+194DL, /* 2**647 */ 1.167984798111281975972139931059275E+195DL, /* 2**648 */ 2.335969596222563951944279862118549E+195DL, /* 2**649 */ 4.671939192445127903888559724237098E+195DL, /* 2**650 */ 9.343878384890255807777119448474197E+195DL, /* 2**651 */ 1.868775676978051161555423889694839E+196DL, /* 2**652 */ 3.737551353956102323110847779389679E+196DL, /* 2**653 */ 7.475102707912204646221695558779357E+196DL, /* 2**654 */ 1.495020541582440929244339111755871E+197DL, /* 2**655 */ 2.990041083164881858488678223511743E+197DL, /* 2**656 */ 5.980082166329763716977356447023486E+197DL, /* 2**657 */ 1.196016433265952743395471289404697E+198DL, /* 2**658 */ 2.392032866531905486790942578809394E+198DL, /* 2**659 */ 4.784065733063810973581885157618789E+198DL, /* 2**660 */ 9.568131466127621947163770315237577E+198DL, /* 2**661 */ 1.913626293225524389432754063047515E+199DL, /* 2**662 */ 3.827252586451048778865508126095031E+199DL, /* 2**663 */ 7.654505172902097557731016252190062E+199DL, /* 2**664 */ 1.530901034580419511546203250438012E+200DL, /* 2**665 */ 3.061802069160839023092406500876025E+200DL, /* 2**666 */ 6.123604138321678046184813001752050E+200DL, /* 2**667 */ 1.224720827664335609236962600350410E+201DL, /* 2**668 */ 2.449441655328671218473925200700820E+201DL, /* 2**669 */ 4.898883310657342436947850401401640E+201DL, /* 2**670 */ 9.797766621314684873895700802803279E+201DL, /* 2**671 */ 1.959553324262936974779140160560656E+202DL, /* 2**672 */ 3.919106648525873949558280321121312E+202DL, /* 2**673 */ 7.838213297051747899116560642242623E+202DL, /* 2**674 */ 1.567642659410349579823312128448525E+203DL, /* 2**675 */ 3.135285318820699159646624256897049E+203DL, /* 2**676 */ 6.270570637641398319293248513794099E+203DL, /* 2**677 */ 1.254114127528279663858649702758820E+204DL, /* 2**678 */ 2.508228255056559327717299405517639E+204DL, /* 2**679 */ 5.016456510113118655434598811035279E+204DL, /* 2**680 */ 1.003291302022623731086919762207056E+205DL, /* 2**681 */ 2.006582604045247462173839524414112E+205DL, /* 2**682 */ 4.013165208090494924347679048828223E+205DL, /* 2**683 */ 8.026330416180989848695358097656446E+205DL, /* 2**684 */ 1.605266083236197969739071619531289E+206DL, /* 2**685 */ 3.210532166472395939478143239062579E+206DL, /* 2**686 */ 6.421064332944791878956286478125157E+206DL, /* 2**687 */ 1.284212866588958375791257295625031E+207DL, /* 2**688 */ 2.568425733177916751582514591250063E+207DL, /* 2**689 */ 5.136851466355833503165029182500126E+207DL, /* 2**690 */ 1.027370293271166700633005836500025E+208DL, /* 2**691 */ 2.054740586542333401266011673000050E+208DL, /* 2**692 */ 4.109481173084666802532023346000101E+208DL, /* 2**693 */ 8.218962346169333605064046692000201E+208DL, /* 2**694 */ 1.643792469233866721012809338400040E+209DL, /* 2**695 */ 3.287584938467733442025618676800080E+209DL, /* 2**696 */ 6.575169876935466884051237353600161E+209DL, /* 2**697 */ 1.315033975387093376810247470720032E+210DL, /* 2**698 */ 2.630067950774186753620494941440064E+210DL, /* 2**699 */ 5.260135901548373507240989882880129E+210DL, /* 2**700 */ 1.052027180309674701448197976576026E+211DL, /* 2**701 */ 2.104054360619349402896395953152051E+211DL, /* 2**702 */ 4.208108721238698805792791906304103E+211DL, /* 2**703 */ 8.416217442477397611585583812608206E+211DL, /* 2**704 */ 1.683243488495479522317116762521641E+212DL, /* 2**705 */ 3.366486976990959044634233525043282E+212DL, /* 2**706 */ 6.732973953981918089268467050086565E+212DL, /* 2**707 */ 1.346594790796383617853693410017313E+213DL, /* 2**708 */ 2.693189581592767235707386820034626E+213DL, /* 2**709 */ 5.386379163185534471414773640069252E+213DL, /* 2**710 */ 1.077275832637106894282954728013850E+214DL, /* 2**711 */ 2.154551665274213788565909456027701E+214DL, /* 2**712 */ 4.309103330548427577131818912055401E+214DL, /* 2**713 */ 8.618206661096855154263637824110803E+214DL, /* 2**714 */ 1.723641332219371030852727564822161E+215DL, /* 2**715 */ 3.447282664438742061705455129644321E+215DL, /* 2**716 */ 6.894565328877484123410910259288642E+215DL, /* 2**717 */ 1.378913065775496824682182051857728E+216DL, /* 2**718 */ 2.757826131550993649364364103715457E+216DL, /* 2**719 */ 5.515652263101987298728728207430914E+216DL, /* 2**720 */ 1.103130452620397459745745641486183E+217DL, /* 2**721 */ 2.206260905240794919491491282972366E+217DL, /* 2**722 */ 4.412521810481589838982982565944731E+217DL, /* 2**723 */ 8.825043620963179677965965131889462E+217DL, /* 2**724 */ 1.765008724192635935593193026377892E+218DL, /* 2**725 */ 3.530017448385271871186386052755785E+218DL, /* 2**726 */ 7.060034896770543742372772105511570E+218DL, /* 2**727 */ 1.412006979354108748474554421102314E+219DL, /* 2**728 */ 2.824013958708217496949108842204628E+219DL, /* 2**729 */ 5.648027917416434993898217684409256E+219DL, /* 2**730 */ 1.129605583483286998779643536881851E+220DL, /* 2**731 */ 2.259211166966573997559287073763702E+220DL, /* 2**732 */ 4.518422333933147995118574147527405E+220DL, /* 2**733 */ 9.036844667866295990237148295054809E+220DL, /* 2**734 */ 1.807368933573259198047429659010962E+221DL, /* 2**735 */ 3.614737867146518396094859318021924E+221DL, /* 2**736 */ 7.229475734293036792189718636043847E+221DL, /* 2**737 */ 1.445895146858607358437943727208769E+222DL, /* 2**738 */ 2.891790293717214716875887454417539E+222DL, /* 2**739 */ 5.783580587434429433751774908835078E+222DL, /* 2**740 */ 1.156716117486885886750354981767016E+223DL, /* 2**741 */ 2.313432234973771773500709963534031E+223DL, /* 2**742 */ 4.626864469947543547001419927068062E+223DL, /* 2**743 */ 9.253728939895087094002839854136125E+223DL, /* 2**744 */ 1.850745787979017418800567970827225E+224DL, /* 2**745 */ 3.701491575958034837601135941654450E+224DL, /* 2**746 */ 7.402983151916069675202271883308900E+224DL, /* 2**747 */ 1.480596630383213935040454376661780E+225DL, /* 2**748 */ 2.961193260766427870080908753323560E+225DL, /* 2**749 */ 5.922386521532855740161817506647120E+225DL, /* 2**750 */ 1.184477304306571148032363501329424E+226DL, /* 2**751 */ 2.368954608613142296064727002658848E+226DL, /* 2**752 */ 4.737909217226284592129454005317696E+226DL, /* 2**753 */ 9.475818434452569184258908010635392E+226DL, /* 2**754 */ 1.895163686890513836851781602127078E+227DL, /* 2**755 */ 3.790327373781027673703563204254157E+227DL, /* 2**756 */ 7.580654747562055347407126408508313E+227DL, /* 2**757 */ 1.516130949512411069481425281701663E+228DL, /* 2**758 */ 3.032261899024822138962850563403325E+228DL, /* 2**759 */ 6.064523798049644277925701126806651E+228DL, /* 2**760 */ 1.212904759609928855585140225361330E+229DL, /* 2**761 */ 2.425809519219857711170280450722660E+229DL, /* 2**762 */ 4.851619038439715422340560901445320E+229DL, /* 2**763 */ 9.703238076879430844681121802890641E+229DL, /* 2**764 */ 1.940647615375886168936224360578128E+230DL, /* 2**765 */ 3.881295230751772337872448721156256E+230DL, /* 2**766 */ 7.762590461503544675744897442312513E+230DL, /* 2**767 */ 1.552518092300708935148979488462503E+231DL, /* 2**768 */ 3.105036184601417870297958976925005E+231DL, /* 2**769 */ 6.210072369202835740595917953850010E+231DL, /* 2**770 */ 1.242014473840567148119183590770002E+232DL, /* 2**771 */ 2.484028947681134296238367181540004E+232DL, /* 2**772 */ 4.968057895362268592476734363080008E+232DL, /* 2**773 */ 9.936115790724537184953468726160016E+232DL, /* 2**774 */ 1.987223158144907436990693745232003E+233DL, /* 2**775 */ 3.974446316289814873981387490464007E+233DL, /* 2**776 */ 7.948892632579629747962774980928013E+233DL, /* 2**777 */ 1.589778526515925949592554996185603E+234DL, /* 2**778 */ 3.179557053031851899185109992371205E+234DL, /* 2**779 */ 6.359114106063703798370219984742410E+234DL, /* 2**780 */ 1.271822821212740759674043996948482E+235DL, /* 2**781 */ 2.543645642425481519348087993896964E+235DL, /* 2**782 */ 5.087291284850963038696175987793928E+235DL, /* 2**783 */ 1.017458256970192607739235197558786E+236DL, /* 2**784 */ 2.034916513940385215478470395117571E+236DL, /* 2**785 */ 4.069833027880770430956940790235143E+236DL, /* 2**786 */ 8.139666055761540861913881580470285E+236DL, /* 2**787 */ 1.627933211152308172382776316094057E+237DL, /* 2**788 */ 3.255866422304616344765552632188114E+237DL, /* 2**789 */ 6.511732844609232689531105264376228E+237DL, /* 2**790 */ 1.302346568921846537906221052875246E+238DL, /* 2**791 */ 2.604693137843693075812442105750491E+238DL, /* 2**792 */ 5.209386275687386151624884211500983E+238DL, /* 2**793 */ 1.041877255137477230324976842300197E+239DL, /* 2**794 */ 2.083754510274954460649953684600393E+239DL, /* 2**795 */ 4.167509020549908921299907369200786E+239DL, /* 2**796 */ 8.335018041099817842599814738401572E+239DL, /* 2**797 */ 1.667003608219963568519962947680314E+240DL, /* 2**798 */ 3.334007216439927137039925895360629E+240DL, /* 2**799 */ 6.668014432879854274079851790721258E+240DL, /* 2**800 */ 1.333602886575970854815970358144252E+241DL, /* 2**801 */ 2.667205773151941709631940716288503E+241DL, /* 2**802 */ 5.334411546303883419263881432577006E+241DL, /* 2**803 */ 1.066882309260776683852776286515401E+242DL, /* 2**804 */ 2.133764618521553367705552573030802E+242DL, /* 2**805 */ 4.267529237043106735411105146061605E+242DL, /* 2**806 */ 8.535058474086213470822210292123210E+242DL, /* 2**807 */ 1.707011694817242694164442058424642E+243DL, /* 2**808 */ 3.414023389634485388328884116849284E+243DL, /* 2**809 */ 6.828046779268970776657768233698568E+243DL, /* 2**810 */ 1.365609355853794155331553646739714E+244DL, /* 2**811 */ 2.731218711707588310663107293479427E+244DL, /* 2**812 */ 5.462437423415176621326214586958854E+244DL, /* 2**813 */ 1.092487484683035324265242917391771E+245DL, /* 2**814 */ 2.184974969366070648530485834783542E+245DL, /* 2**815 */ 4.369949938732141297060971669567084E+245DL, /* 2**816 */ 8.739899877464282594121943339134167E+245DL, /* 2**817 */ 1.747979975492856518824388667826833E+246DL, /* 2**818 */ 3.495959950985713037648777335653667E+246DL, /* 2**819 */ 6.991919901971426075297554671307334E+246DL, /* 2**820 */ 1.398383980394285215059510934261467E+247DL, /* 2**821 */ 2.796767960788570430119021868522933E+247DL, /* 2**822 */ 5.593535921577140860238043737045867E+247DL, /* 2**823 */ 1.118707184315428172047608747409173E+248DL, /* 2**824 */ 2.237414368630856344095217494818347E+248DL, /* 2**825 */ 4.474828737261712688190434989636694E+248DL, /* 2**826 */ 8.949657474523425376380869979273387E+248DL, /* 2**827 */ 1.789931494904685075276173995854677E+249DL, /* 2**828 */ 3.579862989809370150552347991709355E+249DL, /* 2**829 */ 7.159725979618740301104695983418710E+249DL, /* 2**830 */ 1.431945195923748060220939196683742E+250DL, /* 2**831 */ 2.863890391847496120441878393367484E+250DL, /* 2**832 */ 5.727780783694992240883756786734968E+250DL, /* 2**833 */ 1.145556156738998448176751357346994E+251DL, /* 2**834 */ 2.291112313477996896353502714693987E+251DL, /* 2**835 */ 4.582224626955993792707005429387974E+251DL, /* 2**836 */ 9.164449253911987585414010858775948E+251DL, /* 2**837 */ 1.832889850782397517082802171755190E+252DL, /* 2**838 */ 3.665779701564795034165604343510379E+252DL, /* 2**839 */ 7.331559403129590068331208687020759E+252DL, /* 2**840 */ 1.466311880625918013666241737404152E+253DL, /* 2**841 */ 2.932623761251836027332483474808303E+253DL, /* 2**842 */ 5.865247522503672054664966949616607E+253DL, /* 2**843 */ 1.173049504500734410932993389923321E+254DL, /* 2**844 */ 2.346099009001468821865986779846643E+254DL, /* 2**845 */ 4.692198018002937643731973559693286E+254DL, /* 2**846 */ 9.384396036005875287463947119386571E+254DL, /* 2**847 */ 1.876879207201175057492789423877314E+255DL, /* 2**848 */ 3.753758414402350114985578847754628E+255DL, /* 2**849 */ 7.507516828804700229971157695509257E+255DL, /* 2**850 */ 1.501503365760940045994231539101851E+256DL, /* 2**851 */ 3.003006731521880091988463078203703E+256DL, /* 2**852 */ 6.006013463043760183976926156407405E+256DL, /* 2**853 */ 1.201202692608752036795385231281481E+257DL, /* 2**854 */ 2.402405385217504073590770462562962E+257DL, /* 2**855 */ 4.804810770435008147181540925125924E+257DL, /* 2**856 */ 9.609621540870016294363081850251849E+257DL, /* 2**857 */ 1.921924308174003258872616370050370E+258DL, /* 2**858 */ 3.843848616348006517745232740100740E+258DL, /* 2**859 */ 7.687697232696013035490465480201479E+258DL, /* 2**860 */ 1.537539446539202607098093096040296E+259DL, /* 2**861 */ 3.075078893078405214196186192080592E+259DL, /* 2**862 */ 6.150157786156810428392372384161183E+259DL, /* 2**863 */ 1.230031557231362085678474476832237E+260DL, /* 2**864 */ 2.460063114462724171356948953664473E+260DL, /* 2**865 */ 4.920126228925448342713897907328947E+260DL, /* 2**866 */ 9.840252457850896685427795814657893E+260DL, /* 2**867 */ 1.968050491570179337085559162931579E+261DL, /* 2**868 */ 3.936100983140358674171118325863157E+261DL, /* 2**869 */ 7.872201966280717348342236651726315E+261DL, /* 2**870 */ 1.574440393256143469668447330345263E+262DL, /* 2**871 */ 3.148880786512286939336894660690526E+262DL, /* 2**872 */ 6.297761573024573878673789321381052E+262DL, /* 2**873 */ 1.259552314604914775734757864276210E+263DL, /* 2**874 */ 2.519104629209829551469515728552421E+263DL, /* 2**875 */ 5.038209258419659102939031457104841E+263DL, /* 2**876 */ 1.007641851683931820587806291420968E+264DL, /* 2**877 */ 2.015283703367863641175612582841937E+264DL, /* 2**878 */ 4.030567406735727282351225165683873E+264DL, /* 2**879 */ 8.061134813471454564702450331367746E+264DL, /* 2**880 */ 1.612226962694290912940490066273549E+265DL, /* 2**881 */ 3.224453925388581825880980132547098E+265DL, /* 2**882 */ 6.448907850777163651761960265094197E+265DL, /* 2**883 */ 1.289781570155432730352392053018839E+266DL, /* 2**884 */ 2.579563140310865460704784106037679E+266DL, /* 2**885 */ 5.159126280621730921409568212075357E+266DL, /* 2**886 */ 1.031825256124346184281913642415071E+267DL, /* 2**887 */ 2.063650512248692368563827284830143E+267DL, /* 2**888 */ 4.127301024497384737127654569660286E+267DL, /* 2**889 */ 8.254602048994769474255309139320572E+267DL, /* 2**890 */ 1.650920409798953894851061827864114E+268DL, /* 2**891 */ 3.301840819597907789702123655728229E+268DL, /* 2**892 */ 6.603681639195815579404247311456458E+268DL, /* 2**893 */ 1.320736327839163115880849462291292E+269DL, /* 2**894 */ 2.641472655678326231761698924582583E+269DL, /* 2**895 */ 5.282945311356652463523397849165166E+269DL, /* 2**896 */ 1.056589062271330492704679569833033E+270DL, /* 2**897 */ 2.113178124542660985409359139666066E+270DL, /* 2**898 */ 4.226356249085321970818718279332133E+270DL, /* 2**899 */ 8.452712498170643941637436558664266E+270DL, /* 2**900 */ 1.690542499634128788327487311732853E+271DL, /* 2**901 */ 3.381084999268257576654974623465706E+271DL, /* 2**902 */ 6.762169998536515153309949246931413E+271DL, /* 2**903 */ 1.352433999707303030661989849386283E+272DL, /* 2**904 */ 2.704867999414606061323979698772565E+272DL, /* 2**905 */ 5.409735998829212122647959397545130E+272DL, /* 2**906 */ 1.081947199765842424529591879509026E+273DL, /* 2**907 */ 2.163894399531684849059183759018052E+273DL, /* 2**908 */ 4.327788799063369698118367518036104E+273DL, /* 2**909 */ 8.655577598126739396236735036072208E+273DL, /* 2**910 */ 1.731115519625347879247347007214442E+274DL, /* 2**911 */ 3.462231039250695758494694014428883E+274DL, /* 2**912 */ 6.924462078501391516989388028857766E+274DL, /* 2**913 */ 1.384892415700278303397877605771553E+275DL, /* 2**914 */ 2.769784831400556606795755211543107E+275DL, /* 2**915 */ 5.539569662801113213591510423086213E+275DL, /* 2**916 */ 1.107913932560222642718302084617243E+276DL, /* 2**917 */ 2.215827865120445285436604169234485E+276DL, /* 2**918 */ 4.431655730240890570873208338468971E+276DL, /* 2**919 */ 8.863311460481781141746416676937941E+276DL, /* 2**920 */ 1.772662292096356228349283335387588E+277DL, /* 2**921 */ 3.545324584192712456698566670775176E+277DL, /* 2**922 */ 7.090649168385424913397133341550353E+277DL, /* 2**923 */ 1.418129833677084982679426668310071E+278DL, /* 2**924 */ 2.836259667354169965358853336620141E+278DL, /* 2**925 */ 5.672519334708339930717706673240282E+278DL, /* 2**926 */ 1.134503866941667986143541334648056E+279DL, /* 2**927 */ 2.269007733883335972287082669296113E+279DL, /* 2**928 */ 4.538015467766671944574165338592226E+279DL, /* 2**929 */ 9.076030935533343889148330677184452E+279DL, /* 2**930 */ 1.815206187106668777829666135436890E+280DL, /* 2**931 */ 3.630412374213337555659332270873781E+280DL, /* 2**932 */ 7.260824748426675111318664541747561E+280DL, /* 2**933 */ 1.452164949685335022263732908349512E+281DL, /* 2**934 */ 2.904329899370670044527465816699025E+281DL, /* 2**935 */ 5.808659798741340089054931633398049E+281DL, /* 2**936 */ 1.161731959748268017810986326679610E+282DL, /* 2**937 */ 2.323463919496536035621972653359220E+282DL, /* 2**938 */ 4.646927838993072071243945306718439E+282DL, /* 2**939 */ 9.293855677986144142487890613436879E+282DL, /* 2**940 */ 1.858771135597228828497578122687376E+283DL, /* 2**941 */ 3.717542271194457656995156245374751E+283DL, /* 2**942 */ 7.435084542388915313990312490749503E+283DL, /* 2**943 */ 1.487016908477783062798062498149901E+284DL, /* 2**944 */ 2.974033816955566125596124996299801E+284DL, /* 2**945 */ 5.948067633911132251192249992599602E+284DL, /* 2**946 */ 1.189613526782226450238449998519920E+285DL, /* 2**947 */ 2.379227053564452900476899997039841E+285DL, /* 2**948 */ 4.758454107128905800953799994079682E+285DL, /* 2**949 */ 9.516908214257811601907599988159364E+285DL, /* 2**950 */ 1.903381642851562320381519997631873E+286DL, /* 2**951 */ 3.806763285703124640763039995263745E+286DL, /* 2**952 */ 7.613526571406249281526079990527491E+286DL, /* 2**953 */ 1.522705314281249856305215998105498E+287DL, /* 2**954 */ 3.045410628562499712610431996210996E+287DL, /* 2**955 */ 6.090821257124999425220863992421993E+287DL, /* 2**956 */ 1.218164251424999885044172798484399E+288DL, /* 2**957 */ 2.436328502849999770088345596968797E+288DL, /* 2**958 */ 4.872657005699999540176691193937594E+288DL, /* 2**959 */ 9.745314011399999080353382387875188E+288DL, /* 2**960 */ 1.949062802279999816070676477575038E+289DL, /* 2**961 */ 3.898125604559999632141352955150075E+289DL, /* 2**962 */ 7.796251209119999264282705910300151E+289DL, /* 2**963 */ 1.559250241823999852856541182060030E+290DL, /* 2**964 */ 3.118500483647999705713082364120060E+290DL, /* 2**965 */ 6.237000967295999411426164728240121E+290DL, /* 2**966 */ 1.247400193459199882285232945648024E+291DL, /* 2**967 */ 2.494800386918399764570465891296048E+291DL, /* 2**968 */ 4.989600773836799529140931782592096E+291DL, /* 2**969 */ 9.979201547673599058281863565184193E+291DL, /* 2**970 */ 1.995840309534719811656372713036839E+292DL, /* 2**971 */ 3.991680619069439623312745426073677E+292DL, /* 2**972 */ 7.983361238138879246625490852147354E+292DL, /* 2**973 */ 1.596672247627775849325098170429471E+293DL, /* 2**974 */ 3.193344495255551698650196340858942E+293DL, /* 2**975 */ 6.386688990511103397300392681717883E+293DL, /* 2**976 */ 1.277337798102220679460078536343577E+294DL, /* 2**977 */ 2.554675596204441358920157072687153E+294DL, /* 2**978 */ 5.109351192408882717840314145374307E+294DL, /* 2**979 */ 1.021870238481776543568062829074861E+295DL, /* 2**980 */ 2.043740476963553087136125658149723E+295DL, /* 2**981 */ 4.087480953927106174272251316299445E+295DL, /* 2**982 */ 8.174961907854212348544502632598891E+295DL, /* 2**983 */ 1.634992381570842469708900526519778E+296DL, /* 2**984 */ 3.269984763141684939417801053039556E+296DL, /* 2**985 */ 6.539969526283369878835602106079113E+296DL, /* 2**986 */ 1.307993905256673975767120421215823E+297DL, /* 2**987 */ 2.615987810513347951534240842431645E+297DL, /* 2**988 */ 5.231975621026695903068481684863290E+297DL, /* 2**989 */ 1.046395124205339180613696336972658E+298DL, /* 2**990 */ 2.092790248410678361227392673945316E+298DL, /* 2**991 */ 4.185580496821356722454785347890632E+298DL, /* 2**992 */ 8.371160993642713444909570695781264E+298DL, /* 2**993 */ 1.674232198728542688981914139156253E+299DL, /* 2**994 */ 3.348464397457085377963828278312506E+299DL, /* 2**995 */ 6.696928794914170755927656556625011E+299DL, /* 2**996 */ 1.339385758982834151185531311325002E+300DL, /* 2**997 */ 2.678771517965668302371062622650005E+300DL, /* 2**998 */ 5.357543035931336604742125245300009E+300DL, /* 2**999 */ 1.071508607186267320948425049060002E+301DL, /* 2**1000 */ 2.143017214372534641896850098120004E+301DL, /* 2**1001 */ 4.286034428745069283793700196240007E+301DL, /* 2**1002 */ 8.572068857490138567587400392480014E+301DL, /* 2**1003 */ 1.714413771498027713517480078496003E+302DL, /* 2**1004 */ 3.428827542996055427034960156992006E+302DL, /* 2**1005 */ 6.857655085992110854069920313984012E+302DL, /* 2**1006 */ 1.371531017198422170813984062796802E+303DL, /* 2**1007 */ 2.743062034396844341627968125593605E+303DL, /* 2**1008 */ 5.486124068793688683255936251187209E+303DL, /* 2**1009 */ 1.097224813758737736651187250237442E+304DL, /* 2**1010 */ 2.194449627517475473302374500474884E+304DL, /* 2**1011 */ 4.388899255034950946604749000949767E+304DL, /* 2**1012 */ 8.777798510069901893209498001899535E+304DL, /* 2**1013 */ 1.755559702013980378641899600379907E+305DL, /* 2**1014 */ 3.511119404027960757283799200759814E+305DL, /* 2**1015 */ 7.022238808055921514567598401519628E+305DL, /* 2**1016 */ 1.404447761611184302913519680303926E+306DL, /* 2**1017 */ 2.808895523222368605827039360607851E+306DL, /* 2**1018 */ 5.617791046444737211654078721215702E+306DL, /* 2**1019 */ 1.123558209288947442330815744243140E+307DL, /* 2**1020 */ 2.247116418577894884661631488486281E+307DL, /* 2**1021 */ 4.494232837155789769323262976972562E+307DL, /* 2**1022 */ 8.988465674311579538646525953945124E+307DL, /* 2**1023 */ 1.797693134862315907729305190789025E+308DL, /* 2**1024 */ 3.595386269724631815458610381578049E+308DL, /* 2**1025 */ 7.190772539449263630917220763156099E+308DL, /* 2**1026 */ 1.438154507889852726183444152631220E+309DL, /* 2**1027 */ 2.876309015779705452366888305262440E+309DL, /* 2**1028 */ 5.752618031559410904733776610524879E+309DL, /* 2**1029 */ 1.150523606311882180946755322104976E+310DL, /* 2**1030 */ 2.301047212623764361893510644209952E+310DL, /* 2**1031 */ 4.602094425247528723787021288419903E+310DL, /* 2**1032 */ 9.204188850495057447574042576839807E+310DL, /* 2**1033 */ 1.840837770099011489514808515367961E+311DL, /* 2**1034 */ 3.681675540198022979029617030735923E+311DL, /* 2**1035 */ 7.363351080396045958059234061471845E+311DL, /* 2**1036 */ 1.472670216079209191611846812294369E+312DL, /* 2**1037 */ 2.945340432158418383223693624588738E+312DL, /* 2**1038 */ 5.890680864316836766447387249177476E+312DL, /* 2**1039 */ 1.178136172863367353289477449835495E+313DL, /* 2**1040 */ 2.356272345726734706578954899670990E+313DL, /* 2**1041 */ 4.712544691453469413157909799341981E+313DL, /* 2**1042 */ 9.425089382906938826315819598683962E+313DL, /* 2**1043 */ 1.885017876581387765263163919736792E+314DL, /* 2**1044 */ 3.770035753162775530526327839473585E+314DL, /* 2**1045 */ 7.540071506325551061052655678947170E+314DL, /* 2**1046 */ 1.508014301265110212210531135789434E+315DL, /* 2**1047 */ 3.016028602530220424421062271578868E+315DL, /* 2**1048 */ 6.032057205060440848842124543157736E+315DL, /* 2**1049 */ 1.206411441012088169768424908631547E+316DL, /* 2**1050 */ 2.412822882024176339536849817263094E+316DL, /* 2**1051 */ 4.825645764048352679073699634526189E+316DL, /* 2**1052 */ 9.651291528096705358147399269052377E+316DL, /* 2**1053 */ 1.930258305619341071629479853810475E+317DL, /* 2**1054 */ 3.860516611238682143258959707620951E+317DL, /* 2**1055 */ 7.721033222477364286517919415241902E+317DL, /* 2**1056 */ 1.544206644495472857303583883048380E+318DL, /* 2**1057 */ 3.088413288990945714607167766096761E+318DL, /* 2**1058 */ 6.176826577981891429214335532193521E+318DL, /* 2**1059 */ 1.235365315596378285842867106438704E+319DL, /* 2**1060 */ 2.470730631192756571685734212877409E+319DL, /* 2**1061 */ 4.941461262385513143371468425754817E+319DL, /* 2**1062 */ 9.882922524771026286742936851509634E+319DL, /* 2**1063 */ 1.976584504954205257348587370301927E+320DL, /* 2**1064 */ 3.953169009908410514697174740603854E+320DL, /* 2**1065 */ 7.906338019816821029394349481207707E+320DL, /* 2**1066 */ 1.581267603963364205878869896241541E+321DL, /* 2**1067 */ 3.162535207926728411757739792483083E+321DL, /* 2**1068 */ 6.325070415853456823515479584966166E+321DL, /* 2**1069 */ 1.265014083170691364703095916993233E+322DL, /* 2**1070 */ 2.530028166341382729406191833986466E+322DL, /* 2**1071 */ 5.060056332682765458812383667972933E+322DL, /* 2**1072 */ 1.012011266536553091762476733594587E+323DL, /* 2**1073 */ 2.024022533073106183524953467189173E+323DL, /* 2**1074 */ 4.048045066146212367049906934378346E+323DL, /* 2**1075 */ 8.096090132292424734099813868756692E+323DL, /* 2**1076 */ 1.619218026458484946819962773751338E+324DL /* 2**1077 */ }; weak_alias(decpowof2, __decpowof2) libdfp-1.0.17/sysdeps/generic/dfp_inline.h000066400000000000000000000035161504475242000204360ustar00rootroot00000000000000/* Internal ieee754r function prototypes used by libdfp for generic targets Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DFP_INLINE_H #define _DFP_INLINE_H #include #ifndef SET_RESTORE_DROUND struct _rnd_state { int changed; int old_mode; }; static inline __attribute__((always_inline)) void __restore_rnd (struct _rnd_state *state) { if (state->changed) __fe_dec_setround (state->old_mode); } #define SET_RESTORE_DROUND_GENERIC(mode) \ struct _rnd_state __rnd __attribute__ ((__cleanup__ (__restore_rnd))) = \ { 0, __fe_dec_getround () }; \ if (__rnd.old_mode != (mode)) \ { \ __rnd.changed = 1; \ __fe_dec_setround (mode); \ } #define SET_RESTORE_DROUND SET_RESTORE_DROUND_GENERIC #endif #endif libdfp-1.0.17/sysdeps/generic/fenv_libdfp.h000066400000000000000000000022001504475242000205720ustar00rootroot00000000000000/* Generic libdfp extensions to fenv.h Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _FENV_LIBDFP_H #define _FENV_LIBDFP_H 1 /* The generic header includes no optimized functions for the target. */ #endif /* _FENV_LIBDFP_H */ libdfp-1.0.17/sysdeps/generic/libdfp-version.c000066400000000000000000000027111504475242000212410ustar00rootroot00000000000000/* Entry point for shared-libraries. Copyright (C) 2012-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include "config.h" void __libdfp_version (void); const char __invoke_dynamic_linker__[] __attribute__ ((section (".interp"))) = LIBDFP_RUNTIME_LOADER; void __attribute__ ((noreturn)) __libdfp_version (void) { printf ("Decimal Floating Point C Library (" PACKAGE_STRING").\n" "Copyright (C) 2014 Free Software Foundation.\n" "Compiled by GNU version "__VERSION__".\n" "For bug reporting please contact:\n" "<"PACKAGE_BUGREPORT">.\n"); exit (0); } libdfp-1.0.17/sysdeps/generic/localplt.data000066400000000000000000000001401504475242000206110ustar00rootroot00000000000000# See scripts/check-localplt.awk for how this file is processed. libdfp.so: register_printf_dfp libdfp-1.0.17/sysdeps/generic/mapround.c000066400000000000000000000051111504475242000201400ustar00rootroot00000000000000/* Get the Decimal Float rounding mode mapped to the decNumber rounding mode enumeration values. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #include int __dn_getround(void) { /* Only match on supported rounding modes. Power6[x] hardware supports the * greatest number of rounding modes. The decNumber library supports * one fewer than Power6[x] hardware. */ /* C Rounding Mode: Hardware Description * DecNumber description * * FE_DEC_TONEAREST: 000 Round to nearest, ties to even. * DEC_ROUND_HALF_EVEN * * FE_DEC_TOWARDZERO: 001 Round toward zero. * DEC_ROUND_DOWN * * FE_DEC_UPWARD: 010 Round toward +Infinity * DEC_ROUND_CEILING * * FE_DEC_DOWNWARD: 011 Round toward -Infinity * DEC_ROUND_FLOOR * * FE_DEC_TONEARESTFROMZERO: 100 Round to nearest, ties away from zero * DEC_ROUND_HALF_UP * * 5: 101 Round to nearest, ties toward zero * DEC_ROUND_HALF_DOWN * * 6: 110 Round away from zero * DEC_ROUND_UP * * 7: 111 Round for prepare for shorter precision * Not supported by decNumber. */ switch(__fe_dec_getround()) { case FE_DEC_TONEAREST: return DEC_ROUND_HALF_EVEN; case FE_DEC_TOWARDZERO: return DEC_ROUND_DOWN; case FE_DEC_UPWARD: return DEC_ROUND_CEILING; case FE_DEC_DOWNWARD: return DEC_ROUND_FLOOR; case FE_DEC_TONEARESTFROMZERO: return DEC_ROUND_HALF_UP; case 5: return DEC_ROUND_HALF_DOWN; case 6: return DEC_ROUND_UP; case 7: default: return DEC_ROUND_HALF_EVEN; } } libdfp-1.0.17/sysdeps/generic/mapround.h000066400000000000000000000023741504475242000201550ustar00rootroot00000000000000/* Prototype for getting the decimal rounding mode mapped to the decNumber rounding mode enumeration values. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _MAPROUND_H #define _MAPROUND_H /* Get the rounding mode mapped to the decNumber rounding modes. */ extern int __dn_getround(void); #endif /* _MAPROUND_H */ libdfp-1.0.17/sysdeps/generic/math_private.h000066400000000000000000000100461504475242000210060ustar00rootroot00000000000000/* Helper macros and functions to manipulate IEEE 754 bitwise. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _MATH_PRIVATE_H # define _MATH_PRIVATE_H #include #include typedef union { _Decimal128 value; struct { #if __BYTE_ORDER == __LITTLE_ENDIAN uint32_t w4; uint32_t w3; uint32_t w2; uint32_t w1; #elif __BYTE_ORDER == __BIG_ENDIAN uint32_t w1; uint32_t w2; uint32_t w3; uint32_t w4; #endif } parts32; struct { #if __BYTE_ORDER == __LITTLE_ENDIAN uint64_t dw2; uint64_t dw1; #elif __BYTE_ORDER == __BIG_ENDIAN uint64_t dw1; uint64_t dw2; #endif } parts64; } ieee754r_dec128_shape_type; /* Get more significant 64 bit int from a _Decimal128 */ #define GET_DEC128_HIGH_WORD64(i,d) \ do { \ ieee754r_dec128_shape_type gf_u; \ gf_u.value = (d); \ (i) = gf_u.parts64.dw1; \ } while (0) #define DEC128_NAN_MASK64 UINT64_C(0x7C00000000000000) #define DEC128_SNAN_MASK64 UINT64_C(0x7E00000000000000) #define DEC128_INF_MASK64 UINT64_C(0x7800000000000000) typedef union { _Decimal64 value; struct { #if __BYTE_ORDER == __LITTLE_ENDIAN uint32_t lsw; uint32_t msw; #elif __BYTE_ORDER == __BIG_ENDIAN uint32_t msw; uint32_t lsw; #endif } parts; uint64_t word; } ieee754r_dec64_shape_type; /* Get a 64 bit int from a _Decimal64 */ #define GET_DEC64_WORD64(i,d) \ do { \ ieee754r_dec64_shape_type gf_u; \ gf_u.value = (d); \ (i) = gf_u.word; \ } while (0) #define DEC64_NAN_MASK64 UINT64_C(0x7C00000000000000) #define DEC64_SNAN_MASK64 UINT64_C(0x7E00000000000000) #define DEC64_INF_MASK64 UINT64_C(0x7800000000000000) typedef union { _Decimal32 value; uint32_t word; } ieee754r_dec32_shape_type; /* Get a 32 bit int from a _Decimal32 */ #define GET_DEC32_WORD(i,d) \ do { \ ieee754r_dec32_shape_type gf_u; \ gf_u.value = (d); \ (i) = gf_u.word; \ } while (0) #define DEC32_NAN_MASK 0x7C000000 #define DEC32_SNAN_MASK 0x7E000000 #define DEC32_INF_MASK 0x78000000 /* A union which permits us to convert between a float and a 32 bit int. */ typedef union { float value; uint32_t word; } ieee754_float_shape_type; /* Get a 32 bit int from a float. */ #define GET_FLOAT_WORD(i,d) \ do { \ ieee754_float_shape_type gf_u; \ gf_u.value = (d); \ (i) = gf_u.word; \ } while (0) /* A union which permits us to convert between a double and two 32 bit ints. */ typedef union { double value; struct { #if __FLOAT_WORD_ORDER == BIG_ENDIAN uint32_t msw; uint32_t lsw; #else uint32_t lsw; uint32_t msw; #endif } parts; uint64_t word; } ieee754_double_shape_type; #define EXTRACT_WORDS64(i,d) \ do { \ ieee754_double_shape_type gh_u; \ gh_u.value = (d); \ (i) = gh_u.word; \ } while (0) #endif libdfp-1.0.17/sysdeps/generic/numdigits.h000066400000000000000000000022141504475242000203240ustar00rootroot00000000000000/* Number of digits functions, generic (use libdecNumber). Copyright (C) 2006, 2007 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _NUMDIGITS_H #define _NUMDIGITS_H 1 #define NUMDIGITS_SUPPORT 0 #endif /* _NUMDIGITS_H */ libdfp-1.0.17/sysdeps/generic/ticonstants.c000066400000000000000000000042621504475242000206720ustar00rootroot00000000000000/* 128b integer constants used for conversions. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include "dfpacc.h" #define QI(_x) ((INT128)(_x##ULL)) #define ONEe19QI QI(10000000000000000000) INT128 const exp10_ti[] = { 1ULL, /* 1e0 */ 10ULL, 100ULL, 1000ULL, 10000ULL, 100000ULL, /* 1e5 */ 1000000ULL, 10000000ULL, 100000000ULL, 1000000000ULL, 10000000000ULL, /* 1e10 */ 100000000000ULL, 1000000000000ULL, 10000000000000ULL, 100000000000000ULL, 1000000000000000ULL, /* 1e15 */ 10000000000000000ULL, 100000000000000000ULL, 1000000000000000000ULL, 10000000000000000000ULL, /* Use the compiler to precompute bigger numbers. */ QI (10) * ONEe19QI, /* 1e20 */ QI (100) * ONEe19QI, QI (1000) * ONEe19QI, QI (10000) * ONEe19QI, QI (100000) * ONEe19QI, QI (1000000) * ONEe19QI, QI (10000000) * ONEe19QI, QI (100000000) * ONEe19QI, QI (1000000000) * ONEe19QI, QI (10000000000) * ONEe19QI, QI (100000000000) * ONEe19QI, /* 1e30 */ QI (1000000000000) * ONEe19QI, QI (10000000000000) * ONEe19QI, QI (100000000000000) * ONEe19QI, QI (1000000000000000) * ONEe19QI, QI (10000000000000000) * ONEe19QI, /* 1e35 */ QI (100000000000000000) * ONEe19QI, QI (1000000000000000000) * ONEe19QI, QI (10000000000000000000) * ONEe19QI, /* 1e38 */ }; libdfp-1.0.17/sysdeps/i386/000077500000000000000000000000001504475242000152265ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/i386/Implies000066400000000000000000000000651504475242000165540ustar00rootroot00000000000000sysdeps/wordsize-32 sysdeps/soft-dfp/bid sysdeps/bid libdfp-1.0.17/sysdeps/i386/Makefile000066400000000000000000000000001504475242000166540ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/i386/Versions000066400000000000000000000004741504475242000167660ustar00rootroot00000000000000libdfp { LIBDFP_1.0.15 { __bid_extendsdtf; __bid_extendddtf; __bid_trunctdtf; __bid_trunctfsd; __bid_trunctfdd; __bid_extendtftd; } LIBDFP_1.0.0 { __bid_extendsdxf; __bid_extendddxf; __bid_extendxftd; __bid_truncxfsd; __bid_truncxfdd; __bid_trunctdxf; } } libdfp-1.0.17/sysdeps/i386/libdfp.abilist000066400000000000000000000131641504475242000200440ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __bid_adddd3 F __bid_addsd3 F __bid_addtd3 F __bid_divdd3 F __bid_divsd3 F __bid_divtd3 F __bid_eqdd2 F __bid_eqsd2 F __bid_eqtd2 F __bid_extendddtd2 F __bid_extendddxf F __bid_extenddfdd F __bid_extenddftd F __bid_extendsddd2 F __bid_extendsddf F __bid_extendsdtd2 F __bid_extendsdxf F __bid_extendsfdd F __bid_extendsfsd F __bid_extendsftd F __bid_extendxftd F __bid_fixdddi F __bid_fixddsi F __bid_fixsddi F __bid_fixsdsi F __bid_fixtddi F __bid_fixtdsi F __bid_fixunsdddi F __bid_fixunsddsi F __bid_fixunssddi F __bid_fixunssdsi F __bid_fixunstddi F __bid_fixunstdsi F __bid_floatdidd F __bid_floatdisd F __bid_floatditd F __bid_floatsidd F __bid_floatsisd F __bid_floatsitd F __bid_floatunsdidd F __bid_floatunsdisd F __bid_floatunsditd F __bid_floatunssidd F __bid_floatunssisd F __bid_floatunssitd F __bid_gedd2 F __bid_gesd2 F __bid_getd2 F __bid_gtdd2 F __bid_gtsd2 F __bid_gttd2 F __bid_ledd2 F __bid_lesd2 F __bid_letd2 F __bid_ltdd2 F __bid_ltsd2 F __bid_lttd2 F __bid_muldd3 F __bid_mulsd3 F __bid_multd3 F __bid_nedd2 F __bid_nesd2 F __bid_netd2 F __bid_subdd3 F __bid_subsd3 F __bid_subtd3 F __bid_truncdddf F __bid_truncddsd2 F __bid_truncddsf F __bid_truncdfsd F __bid_truncsdsf F __bid_trunctddd2 F __bid_trunctddf F __bid_trunctdsd2 F __bid_trunctdsf F __bid_trunctdxf F __bid_truncxfdd F __bid_truncxfsd F __bid_unorddd2 F __bid_unordsd2 F __bid_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A LIBDFP_1.0.15 LIBDFP_1.0.15 A __bid_extendddtf F __bid_extendsdtf F __bid_extendtftd F __bid_trunctdtf F __bid_trunctfdd F __bid_trunctfsd F fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/sysdeps/powerpc/000077500000000000000000000000001504475242000162145ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/powerpc/Implies000066400000000000000000000000141504475242000175340ustar00rootroot00000000000000sysdeps/dpd libdfp-1.0.17/sysdeps/powerpc/Makefile000066400000000000000000000000001504475242000176420ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/powerpc/Versions000066400000000000000000000002411504475242000177440ustar00rootroot00000000000000libdfp { LIBDFP_1.0.0 { __dpd_extendsdtf; __dpd_extendddtf; __dpd_extendtftd; __dpd_trunctfsd; __dpd_trunctfdd; __dpd_trunctdtf; } } libdfp-1.0.17/sysdeps/powerpc/dfpu/000077500000000000000000000000001504475242000171525ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/powerpc/dfpu/ceild128.c000066400000000000000000000021621504475242000206320ustar00rootroot00000000000000/* _Decimal128 ceild128 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __ceild128 (_Decimal128 x) { _Decimal128 ret; asm ("drintnq 1,%0,%1,0\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__ceild128, ceild128) libdfp-1.0.17/sysdeps/powerpc/dfpu/ceild32.c000066400000000000000000000021701504475242000205430ustar00rootroot00000000000000/* _Decimal32 ceild32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __ceild32 (_Decimal32 x) { _Decimal64 ret; asm ("drintn 1,%0,%1,0\n" : "=f"(ret) : "f"((_Decimal64) x)); return ret; } weak_alias (__ceild32, ceild32) libdfp-1.0.17/sysdeps/powerpc/dfpu/ceild64.c000066400000000000000000000021531504475242000205510ustar00rootroot00000000000000/* _Decimal64 ceild64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __ceild64 (_Decimal64 x) { _Decimal64 ret; asm ("drintn 1,%0,%1,0\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__ceild64, ceild64) libdfp-1.0.17/sysdeps/powerpc/dfpu/convert_helpers.h000066400000000000000000000166011504475242000225310ustar00rootroot00000000000000/* Prototypes for assisting converting larger numbers. Copyright (C) 2015 Free Software Foundation, Inc. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _CONVERTHELPERS_ #define _CONVERTHELPERS_ #include "fenv_libdfp.h" #define COMBINE_AND_TRUNC(a,b,c,SIZE) \ static inline _Decimal ## SIZE \ combine_and_truncd ## SIZE (_Decimal128 hi, _Decimal128 mid, _Decimal128 low) \ { \ _Decimal128 result; \ fenv_t rnd = fegetenv_register(); \ asm volatile ("mtfsfi 7, 7, 1"); /* Enforce round to prep for shorter. */ \ asm ("dscliq %0, %0, 17" : "+&d" (hi)); \ result = (hi + mid) * 1e17DL; \ /* This is a hack. We need to ensure this and above happens under \ the correct rounding mode. */ \ asm volatile ("daddq %0,%1,%2" : "=f" (result) : "f" (result), "f" (low) ) ;\ fesetenv_register (rnd); \ return result; /* Implicitly round result into return type. */ \ } /* Define combine_and_truncd32 and combine_and_truncd64. */ COMBINE_AND_TRUNC(a,b,c,32) COMBINE_AND_TRUNC(a,b,c,64) /* This is an optimized copy of frexpd128 which removes checks and tests which aren't needed, and performs a free 10^x shift when setting the normalized exponent. */ static inline _Decimal128 getmantandexpd128(_Decimal128 x, int *y, int shift, _Decimal128 _y) { _Decimal128 result; int digits, exponent; _Decimal128 f3; double f1, f2; union _ld_t { long long int l; double f; }; static union _ld_t u = { .f = 0x0.0000000000001p-1022 }; static union _ld_t v = { .f = 0x0.0000000001820p-1022 }; union _ld_t t; (void) _y; /* Mark as unused. */ asm ( "dxexq %[a],%[d]\n\t" "diexq %[b],%[e],%[d]\n\t" "drrndq %[b],%[f],%[b],1\n\t" "dxexq %[c],%[b]\n\t" : [a] "=&d"(f1), [b] "=&d"(f3), [c] "=&d"(f2) : [d] "d"(x), [e] "d"(v.f), [f] "d"(u.f)); t.f = f2; digits = t.l - v.l + 1; t.f = f1; exponent = t.l - 6176; *y = digits + exponent; t.l = -digits + shift + 6176; asm("diexq %0, %1, %2\n\t" : "=d"(result) : "d"(t.f), "d"(x)); return result; } static inline _Decimal64 getmantandexpd64(_Decimal64 x, int *y, int shift, _Decimal64 _y) { _Decimal64 result; int digits, exponent; _Decimal64 f3; double f1, f2; union _ld_t { long long int l; double f; }; static union _ld_t u = { .f = 0x0.0000000000001p-1022 }; static union _ld_t v = { .f = 0x0.000000000018Ep-1022 }; union _ld_t t; (void) _y; /* Mark as unused. */ asm ( "dxex %[a],%[d]\n\t" "diex %[b],%[e],%[d]\n\t" "drrnd %[b],%[f],%[b],1\n\t" "dxex %[c],%[b]\n\t" : [a] "=&d"(f1), [b] "=&d"(f3), [c] "=&d"(f2) : [d] "d"(x), [e] "d"(v.f), [f] "d"(u.f)); t.f = f2; digits = t.l - v.l + 1; t.f = f1; exponent = t.l - 398; *y = digits + exponent; t.l = -digits + shift + 398; asm("diex %0, %1, %2\n\t" : "=d"(result) : "d"(t.f), "d"(x)); return result; } static inline _Decimal32 getmantandexpd32(_Decimal32 x, int *y, int shift, _Decimal32 _y) { int digits, exponent; register _Decimal64 tmp = x; _Decimal64 f3; double f1, f2; union _ld_t { long long int l; double f; }; static union _ld_t u = { .f = 0x0.0000000000001p-1022 }; static union _ld_t v = { .f = 0x0.000000000018Ep-1022 }; union _ld_t t; (void) _y; /* Mark as unused. */ asm ( "dxex %[a],%[d]\n\t" "diex %[b],%[e],%[d]\n\t" "drrnd %[b],%[f],%[b],1\n\t" "dxex %[c],%[b]\n\t" : [a] "=&d"(f1), [b] "=&d"(f3), [c] "=&d"(f2) : [d] "d"(tmp), [e] "d"(v.f), [f] "d"(u.f)); t.f = f2; digits = t.l - v.l + 1; t.f = f1; exponent = t.l - 398; *y = digits + exponent; t.l = -digits + shift + 398; asm("diex %0, %1, %2\n\t" : "=d"(tmp) : "d"(t.f), "d"(tmp)); return (_Decimal32) tmp; } /* Convert the entire mantissa to a quadword, and return the exponent in the form .a0...a33 * 10^exp */ #ifdef INT128 static inline INT128 getmantd128(_Decimal128 dq, long *exp) { union dfdi { double df; long long int di; }; union dfdi a,b,c,d,e; /* Useful constants */ a.di = 0 + 6176; /* Biased 10^0. */ b.di = -17 + 6176; /* Biased 10^-17. */ _Decimal128 t1, t2; /* Pop off the exponent of the input. */ asm ( "dxexq %[a],%[b]\n\t" : [a] "=d" (e.df) : [b] "d" (dq) ); /* Insert 0 exponent into dq. */ asm ( "diexq %[g],%[a],%[i]\n\t" : [g] "=d" (t1) : [a] "d" (a.df), [i] "d" (dq) ); /* Insert -17 exponent into dq. */ asm ( "diexq %[d],%[b],%[i]\n\t" : [d] "=d" (t2) : [b] "d" (b.df), [i] "d" (dq) ); /* Lop of lower 17 digits of 0'ed dq (sort of /= 10^17). */ asm ( "dscriq %[c],%[c],17\n\t" : [c] "+&d" (t1) ); /* Lop of upper 17 digits of -17'ed dq (sort of a *= 10^17). */ asm ( "dscliq %[d],%[d],17\n\t" : [d] "+&d" (t2) ); /* Convert the two halves. */ asm ( "dctfixq %[e],%[c]\n\t" : [e] "=d" (c.df) : [c] "d" (t1) ); asm ( "dctfixq %[f],%[d]\n\t" : [f] "=d" (d.df) : [d] "d" (t2) ); *exp = e.di - a.di; INT128 x = 100000000000000000; /* 10^17 */ INT128 m = c.di * x + d.di; return m; } #endif /* Convert the entire mantissa to a doubleworld and return the normalized exponent, and the mantissa. */ static inline long long int getmantd64(_Decimal64 dd, long *exp) { union dfdi { double df; long long int di; }; union dfdi a,b,c; /* Useful constants */ b.di = 0 + 398; /* Biased 10^0. */ _Decimal64 t1; /* Pop off the exponent of the input. */ asm ( "dxex %[a],%[dd]\n\t" : [a] "=d" (a.df) : [dd] "d" (dd) ); /* Insert 0 exponent into dd. */ asm ( "diex %[t1],%[b],%[dd]\n\t" : [t1] "=d" (t1) : [b] "d" (b.df), [dd] "d" (dd) ); /* Convert the mantissa. */ asm ( "dctfix %[c],%[t1]\n\t" : [c] "=d" (c.df) : [t1] "d" (t1) ); *exp = a.di - b.di; return c.di; } static inline int getmantd32(_Decimal32 sd, long *exp) { return getmantd64((_Decimal64) sd, exp); } /* Truncate quickly. No need to validate input. */ static inline _Decimal128 fast_truncd128 (_Decimal128 a) { asm ( "drintnq 0, %0, %0, 1\n\t" : "+d" (a) ); return a; } static inline _Decimal64 fast_truncd64 (_Decimal64 a) { asm ("drintn 0, %0, %0, 1\n\t" : "+d" (a)); return a; } static inline _Decimal32 fast_truncd32 (_Decimal32 a) { return (_Decimal32) fast_truncd64((_Decimal64) a); } #endif /* _CONVERTHELPERS_ */ libdfp-1.0.17/sysdeps/powerpc/dfpu/copysignd128.c000066400000000000000000000023751504475242000215570ustar00rootroot00000000000000/* _Decimal128 copy sign of a number. Copyright (C) 2014-2015 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include _Decimal128 __copysignd128 (_Decimal128 x, _Decimal128 y) { /* Half part os decimal128 constainst the sign bit at same position as binary64, so the instruction works for both formats. */ _Decimal128 ret; asm ("fcpsgn %0,%1,%2\n" : "=d"(ret) : "d"(y), "d"(x)); return ret; } weak_alias (__copysignd128, copysignd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/copysignd32.c000066400000000000000000000025121504475242000214620ustar00rootroot00000000000000/* _Decimal32 copy sign of a number. Copyright (C) 2014-2015 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include _Decimal32 __copysignd32 (_Decimal32 x, _Decimal32 y) { /* Both binary32 and decimal32 have the sign bit at same position, so the instruction works for both format. */ _Decimal64 tmp; asm ("dctdp %1, %1\n" /* DFP Convert To DFP Long */ "dctdp %2, %2\n" "fcpsgn %0, %1, %2\n" : "=f"(tmp) : "f" (y), "f"(x)); return (_Decimal32)tmp; } weak_alias (__copysignd32, copysignd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/copysignd64.c000066400000000000000000000023521504475242000214710ustar00rootroot00000000000000/* _Decimal64 copy sign of a number. Copyright (C) 2014-2015 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include _Decimal64 __copysignd64 (_Decimal64 x, _Decimal64 y) { /* Both binary64 and decimal64 have the sign bit at same position, so the instruction works for both format. */ _Decimal64 ret; asm ("fcpsgn %0, %1, %2\n" : "=d"(ret) : "d"(y), "d"(x)); return ret; } weak_alias (__copysignd64, copysignd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/dfp_inline.h000066400000000000000000000053311504475242000214340ustar00rootroot00000000000000/* Internal ieee754r function prototypes used by libdfp for powerpc Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DFP_INLINE_H #define _DFP_INLINE_H #include static inline _Decimal128 ___quantized128 (_Decimal128 x, _Decimal128 y) { _Decimal128 result; asm ("dquaq %0,%1,%2,3\n\t" : "=f" (result) : "f" (y), "f" (x)); return result; }; static inline _Decimal64 ___quantized64 (_Decimal64 x, _Decimal64 y) { _Decimal64 result; asm ("dqua %0,%1,%2,3\n\t" : "=f" (result) : "f" (y), "f" (x)); return result; }; #define __quantized64(x, y) ___quantized64(x, y) #define __quantized128(x, y) ___quantized128(x, y) static inline _Decimal128 ___isfinited128 (_Decimal128 x) { int cr0; asm ("dtstdcq cr0,%1,0x38\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); return (cr0 & 0x20000000) ? 1 : 0; }; static inline _Decimal64 ___isfinited64 (_Decimal64 x) { int cr0; asm ("dtstdc cr0,%1,0x38\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); return (cr0 & 0x20000000) ? 1 : 0; }; static inline void __restore_rnd (double *state) { asm volatile ( "mtfsf 1, %0, 0, 1\n" : : "f" (*state)); } #define __isfinited32(x) ___isfinited64((_Decimal64)x) #define __isfinited64(x) ___isfinited64(x) #define __isfinited128(x) ___isfinited128(x) #ifdef _ARCH_PWR9 #define SET_RESTORE_DROUND(mode) \ double __rnd __attribute__ ((__cleanup__ (__restore_rnd))); \ asm volatile ("mffscdrni %0, %1\n" : "=f"(__rnd) : "i" (mode)); #else /* Note, mffsl decodes as mffs on older machines, so take the free speedup where available. */ /* The mffls snippet is taken from glibc. Thanks Paul Clarke! */ #define SET_RESTORE_DROUND(mode) \ double __rnd __attribute__ ((__cleanup__ (__restore_rnd))); \ asm volatile (".machine push; .machine \"power9\"; mffsl %0; .machine pop; mtfsfi 7, %1, 1\n" : "=f" (__rnd) : "i" (mode)); #endif #endif libdfp-1.0.17/sysdeps/powerpc/dfpu/fabsd128.c000066400000000000000000000020511504475242000206260ustar00rootroot00000000000000/* Return absolute value of number. Copyright (C) 2014-2015 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include _Decimal128 __fabsd128 (_Decimal128 x) { return __builtin_fabsd128 (x); } hidden_def (__fabsd128) weak_alias (__fabsd128, fabsd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/fabsd32.c000066400000000000000000000020421504475242000205400ustar00rootroot00000000000000/* Return absolute value of number. Copyright (C) 2014-2015 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include _Decimal32 __fabsd32 (_Decimal32 x) { return __builtin_fabsd32 (x); } hidden_def (__fabsd32) weak_alias (__fabsd32, fabsd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/fabsd64.c000066400000000000000000000020421504475242000205450ustar00rootroot00000000000000/* Return absolute value of number. Copyright (C) 2014-2015 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include _Decimal64 __fabsd64 (_Decimal64 x) { return __builtin_fabsd64 (x); } hidden_def (__fabsd64) weak_alias (__fabsd64, fabsd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/fe_decround.c000066400000000000000000000102201504475242000215660ustar00rootroot00000000000000/* Decimal Float fe_dec_getround and fe_dec_setround definitions. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include #include int __fe_dec_setround (int rounding_direction) { /* The rounding modes are as follows: * * C Rounding Mode: (DRN) Hardware Description * DecNumber Rounding Mode Equivalent * * FE_DEC_TONEAREST: (000) Round to nearest, ties to even. * DEC_ROUND_HALF_EVEN * * FE_DEC_TOWARDZERO: (001) Round toward zero. * DEC_ROUND_DOWN * * FE_DEC_UPWARD: (010) Round toward +Infinity * DEC_ROUND_CEILING * * FE_DEC_DOWNWARD: (011) Round toward -Infinity * DEC_ROUND_FLOOR * * FE_DEC_TONEARESTFROMZERO: (100) Round to nearest, ties away from zero * DEC_ROUND_HALF_UP * * 5: (101) Round to nearest, ties toward zero * DEC_ROUND_HALF_DOWN * * 6: (110) Round away from zero * DEC_ROUND_UP * * 7: (111) Round for prepare for shorter precision * Not supported by decNumber. */ /* High order bits 29-31 contain DFP Rounding control (DRN) and bit 28 is * reserved for future rounding control. The new Power6[x] form of the mtfsfi * instruction can be used against these four bits to set the rounding mode. * Then new form of the mtfsfi instruction for Power6[x] adds the 'W' parameter: mtfsfi BF,U,W BF: Field [0-7: Bits 28-31 are field 7 of the high order word] U: Bit Pattern [Bit 28 is reserved, use 0000-0111] W: Word [Implicit '0' for bits 32:63 {low order word.}] ['1' indicates the bits 0:31 {high order word}.] */ switch (rounding_direction) { case FE_DEC_TONEAREST: asm ("mtfsfi 7, 0, 1\n"); break; case FE_DEC_TOWARDZERO: asm ("mtfsfi 7, 1, 1\n"); break; case FE_DEC_UPWARD: asm ("mtfsfi 7, 2, 1\n"); break; case FE_DEC_DOWNWARD: asm ("mtfsfi 7, 3, 1\n"); break; case FE_DEC_TONEARESTFROMZERO: asm ("mtfsfi 7, 4, 1\n"); break; case 5: /* Allow covert setting of this rounding mode. */ asm ("mtfsfi 7, 5, 1\n"); break; case 6: /* Allow covert setting of this rounding mode. */ asm ("mtfsfi 7, 6, 1\n"); break; case 7: /* Allow covert setting of this rounding mode. */ asm ("mtfsfi 7, 7, 1\n"); break; default: return 1; } return 0; } strong_alias (__fe_dec_setround, fe_dec_setround) hidden_def (__fe_dec_setround) int __fe_dec_getround (void) { fenv_union_t u = { .fenv = fegetenv_register () }; /* DFP Rounding Control bits are 29:31 (bit 28 is reserved). */ int rounding = (u.l & 0x700000000ULL) >> 32; switch (rounding) { case 0: return FE_DEC_TONEAREST; case 1: return FE_DEC_TOWARDZERO; case 2: return FE_DEC_UPWARD; case 3: return FE_DEC_DOWNWARD; case 4: return FE_DEC_TONEARESTFROMZERO; case 5: return 5; case 6: return 6; case 7: return 7; default: return FE_DEC_TONEAREST; /* Default */ } } strong_alias (__fe_dec_getround, fe_dec_getround) hidden_def (__fe_dec_getround) extern int (*__printf_dfp_getround_callback)(void); static void __attribute__ ((constructor)) __init_printf_dfp_getround (void) { __printf_dfp_getround_callback = &__fe_dec_getround; } libdfp-1.0.17/sysdeps/powerpc/dfpu/fixsdti.c000066400000000000000000000030411504475242000207660ustar00rootroot00000000000000/* fix*ti implementation for powerpc64. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef SRC_SIZE # define SRC_SIZE 32 # define FUNC fixsdti # define SHIFT_EXP 7 # define DSUFF DF # define SIGNED 1 #endif /* For Power10 and newer, use an optimized routine for signed 128b integers. */ #if defined (_ARCH_PWR10) && SIGNED == 1 # define _DECIMAL_SIZE SRC_SIZE # include # include INT128 __BACKEND_(FUNC) (DEC_TYPE a) { _Decimal128 v = a; union v128i128 { vector __int128 v128; __int128 i128; } r; asm ( "drintnq 0, %0, %0, 1\n\t" : "+d" (v) ); asm ( "dctfixqq %[e],%[c]\n\t" : [e] "=v" (r.v128) : [c] "d" (v) ); return r.i128; } hidden_def (__BACKEND_(FUNC)) #else # include "base-math/fixsdti.c" #endif libdfp-1.0.17/sysdeps/powerpc/dfpu/floattitd.c000066400000000000000000000043271504475242000213160ustar00rootroot00000000000000/* floatti* implementation for powerpc64. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef FUNC # define FUNC floattitd # define RET_TYPE _Decimal128 # define RET_SIZE 128 #endif /* For Power10 and newer, use an optimized routine for signed 128b integers. */ #if defined (_ARCH_PWR10) && !defined (UNSIGNED) #include #include "fenv_libdfp.h" RET_TYPE __BACKEND_ (FUNC) (INT128 a) { union v128i128 { vector __int128 v128; __int128 i128; } r; r.i128 = a; _Decimal128 v; asm volatile ("dcffixqq %[e],%[c]\n\t" : [e] "=d" (v) : [c] "v" (r.v128)); #if RET_SIZE == 32 /* Some older gcc versions will not inline a round from _Decimal128 to _Decimal32. Inline the asm. */ double fpscrv; _Decimal64 tmpd; _Decimal32 result; asm volatile ("mffscdrni %[fpscr], 7\n\t" /* Set DRN to round-to-prepare-for-shorter, save old DRN. */ "drdpq %[d64], %[d128]\n\t" /* Round v to _Decimal64. */ "mffscdrn %[fpscr], %[fpscr]\n\t" /* Restore DRN. */ "drsp %[d32], %[d64]\n\t" /* Round v to _Decimal32. */ : [fpscr] "=d" (fpscrv), [d64] "=d" (tmpd), [d32] "=d" (result) , [d128] "+d" (v)); return result; #else /* For values which are rounded to _Decimal64, the rounding is * implementation defined. This uses the current rounding mode. */ return v; #endif } hidden_def (__BACKEND_ (FUNC)) #else # include "base-math/floattitd.c" #endif libdfp-1.0.17/sysdeps/powerpc/dfpu/floord128.c000066400000000000000000000021651504475242000210420ustar00rootroot00000000000000/* _Decimal32 floord128 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __floord128 (_Decimal128 x) { _Decimal128 ret; asm ("drintnq 1,%0,%1,1\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__floord128, floord128) libdfp-1.0.17/sysdeps/powerpc/dfpu/floord32.c000066400000000000000000000021741504475242000207540ustar00rootroot00000000000000/* _Decimal32 floord32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __floord32 (_Decimal32 x) { _Decimal64 ret; asm ("drintn 1,%0,%1,1\n" : "=f"(ret) : "f"((_Decimal64) x)); return ret; } weak_alias (__floord32, floord32) libdfp-1.0.17/sysdeps/powerpc/dfpu/floord64.c000066400000000000000000000021571504475242000207620ustar00rootroot00000000000000/* _Decimal32 floord64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __floord64 (_Decimal64 x) { _Decimal64 ret; asm ("drintn 1,%0,%1,1\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__floord64, floord64) libdfp-1.0.17/sysdeps/powerpc/dfpu/fpclassifyd128.c000066400000000000000000000032701504475242000220620ustar00rootroot00000000000000/* Returns the type of floating point number from a _Decimal32 type Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __fpclassifyd128 (_Decimal128 val) { int result = FP_NAN; /* Check in order, FP_NORMAL, FP_ZERO, FP_SUBNORMAL, FP_INFINITE, FP_NAN. The thought is the most likely case exits early. */ asm ( "dtstdcq cr0,%1,0x08;" "li %0,4;" "beq cr0,1f;" "dtstdcq cr0,%1,0x20;" "li %0,2;" "beq cr0,1f;" "dtstdcq cr0,%1,0x10;" "li %0,3;" "beq cr0,1f;" "dtstdcq cr0,%1,0x04;" "li %0,1;" "beq cr0,1f;" "li %0,0;" "1:;" : "=r" (result) : "f" (val) : "cr0"); return result; } hidden_def (__fpclassifyd128) weak_alias (__fpclassifyd128, fpclassifyd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/fpclassifyd32.c000066400000000000000000000041501504475242000217720ustar00rootroot00000000000000/* _Decimal32 fpclassify classification function. Copyright (C) 2006 IBM Corporation. Copyright (C) 2010-2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __fpclassifyd32 (_Decimal32 x) { int result = 0; /* Since _Decimal32 is promoted to _Decimal64, __DEC32_SUBNORMAL_MIN__ is well * within the bounds of a _Decimal64. This means that we need to do our range * check for __DEC32_SUBNORMAL_MIN__ before dropping into the asm code. This * is crude. The asm code should probably be broken into two parts with this * code in between so the extra checks aren't redundant. */ if (x != 0 && x > -__DEC32_MIN__ && x < __DEC32_MIN__) return FP_SUBNORMAL; /* Check in order, FP_NORMAL, FP_ZERO, FP_SUBNORMAL, FP_INFINITE, FP_NAN. The most likely case exits early. */ asm ( "dtstdc cr0,%1,0x08;" "li %0,4;" "beq cr0,1f;" "dtstdc cr0,%1,0x20;" "li %0,2;" "beq cr0,1f;" "dtstdc cr0,%1,0x04;" "li %0,1;" "beq cr0,1f;" "li %0,0;" "1:;" : "=r" (result) : "f" ((_Decimal64) x) : "cr0"); return result; } hidden_def (__fpclassifyd32) weak_alias (__fpclassifyd32, fpclassifyd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/fpclassifyd64.c000066400000000000000000000031521504475242000220000ustar00rootroot00000000000000/* _Decimal64 fpclassify classification function. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __fpclassifyd64 (_Decimal64 x) { int result = 0; /* Check in order, FP_NORMAL, FP_ZERO, FP_SUBNORMAL, FP_INFINITE, FP_NAN. The most likely case exits early. */ asm ( "dtstdc cr0,%1,0x08;" "li %0,4;" "beq cr0,1f;" "dtstdc cr0,%1,0x20;" "li %0,2;" "beq cr0,1f;" "dtstdc cr0,%1,0x10;" "li %0,3;" "beq cr0,1f;" "dtstdc cr0,%1,0x04;" "li %0,1;" "beq cr0,1f;" "li %0,0;" "1:;" : "=r" (result) : "f" (x) : "cr0"); return result; } hidden_def (__fpclassifyd64) weak_alias (__fpclassifyd64, fpclassifyd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/isfinited128.c000066400000000000000000000031001504475242000215210ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is finite Copyright (C) 2008, 2010 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include "dfp_inline.h" #undef __isfinited128 int __isfinited128 (_Decimal128 val) { return ___isfinited128 (val); } hidden_def (__isfinited128) weak_alias (__isfinited128, isfinited128) /* We erroneously published a version of math.h which used 'finite' instead of * 'isfinite' and math.h contained a polymorphic 'isfinite()' function which * inlined calles to 'finited*' so we've created aliases for compatability. */ strong_alias (__isfinited128, finited128) strong_alias (__isfinited128, __finited128) libdfp-1.0.17/sysdeps/powerpc/dfpu/isfinited32.c000066400000000000000000000031021504475242000214350ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is finite Copyright (C) 2008, 2010 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include "dfp_inline.h" #undef __isfinited32 int __isfinited32 (_Decimal32 val) { return ___isfinited64 ((_Decimal64)val); } hidden_def (__isfinited32) weak_alias (__isfinited32, isfinited32) /* We erroneously published a version of math.h which used 'finite' instead of * 'isfinite' and math.h contained a polymorphic 'isfinite()' function which * inlined calles to 'finited*' so we've created aliases for compatability. */ strong_alias (__isfinited32, finited32) strong_alias (__isfinited32, __finited32) libdfp-1.0.17/sysdeps/powerpc/dfpu/isfinited64.c000066400000000000000000000030601504475242000214450ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is finite Copyright (C) 2008, 2010 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include "dfp_inline.h" #undef __isfinited64 int __isfinited64 (_Decimal64 x) { return ___isfinited64 (x); } hidden_def (__isfinited64) weak_alias (__isfinited64, isfinited64) /* We erroneously published a version of math.h which used 'finite' instead of * 'isfinite' and math.h contained a polymorphic 'isfinite()' function which * inlined calles to 'finited*' so we've created aliases for compatability. */ strong_alias (__isfinited64, finited64) strong_alias (__isfinited64, __finited64) libdfp-1.0.17/sysdeps/powerpc/dfpu/isinfd128.c000066400000000000000000000026311504475242000210270ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is infinite Copyright (C) 2008 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __isinfd128 (_Decimal128 x) { int cr0; asm ("dtstdcq cr0,%1,0x04\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); /* cr0 bits are 28:31 and: - 0010 operand positive with match - 1010 operand negative with math */ return (cr0 & 0x20000000) ? (cr0 & 0x80000000 ? -1 : 1) : 0; } hidden_def (__isinfd128) weak_alias (__isinfd128, isinfd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/isinfd32.c000066400000000000000000000030261504475242000207400ustar00rootroot00000000000000/* _Decimal32 isinf classification function. Copyright (C) 2006 IBM Corporation. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __isinfd32 (_Decimal32 x) { int cr0; _Decimal64 input = x; asm ("dtstdc cr0,%1,0x04\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (input) : "cr0"); /* cr0 bits are 28:31 and: - 0010 operand positive with match - 1010 operand negative with math */ return (cr0 & 0x20000000) ? (cr0 & 0x80000000 ? -1 : 1) : 0; } hidden_def (__isinfd32) weak_alias (__isinfd32, isinfd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/isinfd64.c000066400000000000000000000027231504475242000207500ustar00rootroot00000000000000/* _Decimal64 isinf classification function. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __isinfd64 (_Decimal64 x) { int cr0; asm ("dtstdc cr0,%1,0x04\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); /* cr0 bits are 28:31 and: - 0010 operand positive with match - 1010 operand negative with math */ return (cr0 & 0x20000000) ? (cr0 & 0x80000000 ? -1 : 1) : 0; } hidden_def (__isinfd64) weak_alias (__isinfd64, isinfd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/isnand128.c000066400000000000000000000024041504475242000210250ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is NaN Copyright (C) 2008 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __isnand128 (_Decimal128 val) { int cr0; asm ("dtstdcq cr0,%1,3\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (val) : "cr0"); return (cr0 & 0x20000000) ? 1 : 0; } hidden_def (__isnand128) weak_alias (__isnand128, isnand128) libdfp-1.0.17/sysdeps/powerpc/dfpu/isnand32.c000066400000000000000000000025551504475242000207460ustar00rootroot00000000000000/* _Decimal32 isNaN classification function. Copyright (C) 2006 IBM Corporation. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __isnand32 (_Decimal32 x) { int cr0; asm ("dtstdc 0,%1,3\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" ((_Decimal64)x) : "cr0"); return (cr0 & 0x20000000) ? 1 : 0; } hidden_def (__isnand32) weak_alias (__isnand32, isnand32) libdfp-1.0.17/sysdeps/powerpc/dfpu/isnand64.c000066400000000000000000000024101504475242000207410ustar00rootroot00000000000000/* _Decimal64 isNaN classification function. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include int __isnand64 (_Decimal64 x) { int cr0; asm ("dtstdc 0,%1,3\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); return (cr0 & 0x20000000) ? 1 : 0; } hidden_def (__isnand64) weak_alias (__isnand64, isnand64) libdfp-1.0.17/sysdeps/powerpc/dfpu/isnormald128.c000066400000000000000000000024341504475242000215440ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is normalized Copyright (C) 2008 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more normalormation. */ #include #include int __isnormald128 (_Decimal128 x) { int cr0; asm ("dtstdcq cr0,%1,0x08\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); return (cr0 & 0x20000000) ? (cr0 & 0x80000000 ? -1 : 1) : 0; } weak_alias (__isnormald128, isnormald128) libdfp-1.0.17/sysdeps/powerpc/dfpu/isnormald32.c000066400000000000000000000031121504475242000214500ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is normalized Copyright (C) 2008 IBM Corporation. Copyright (C) 2014-2018 Free Software Foundation, Inc. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include int __isnormald32 (_Decimal32 val) { int cr0; _Decimal64 input; /* Since _Decimal32 is promoted to _Decimal64, __DEC32_SUBNORMAL_MIN__ is well * within the bounds of a _Decimal64. This means that we need to do our range * check for __DEC32_SUBNORMAL_MIN__ before dropping into the asm code. */ if (val > -__DEC32_MIN__ && val < __DEC32_MIN__) return 0; input = val; asm ("dtstdc cr0,%1,0x08\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (input) : "cr0"); return (cr0 & 0x20000000) ? 1 : 0; } weak_alias (__isnormald32, isnormald32) libdfp-1.0.17/sysdeps/powerpc/dfpu/isnormald64.c000066400000000000000000000023561504475242000214660ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is normalized Copyright (C) 2008 IBM Corporation. Copyright (C) 2014-2015 Free Software Foundation, Inc. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #include #include int __isnormald64 (_Decimal64 x) { int cr0; asm ("dtstdc cr0,%1,0x08\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); return (cr0 & 0x20000000) ? 1 : 0; } weak_alias (__isnormald64, isnormald64) libdfp-1.0.17/sysdeps/powerpc/dfpu/issignalingd128.c000066400000000000000000000025371504475242000222330ustar00rootroot00000000000000/* _Decimal32 issignaling classification function. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include int __issignalingd128 (_Decimal128 x) { int cr0; /* DCM bit 5 is signaling NaN */ asm ("dtstdcq cr0,%1,1\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); /* cr0 bits are 28:31 and: - 0010 operand positive with match - 1010 operand negative with math */ return (cr0 & 0x20000000) ? 1 : 0; } weak_alias (__issignalingd128, issignalingd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/issignalingd32.c000066400000000000000000000025661504475242000221470ustar00rootroot00000000000000/* _Decimal32 issignaling classification function. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include int __issignalingd32 (_Decimal32 x) { _Decimal64 input = x; int cr0; /* DCM bit 5 is signaling NaN */ asm ("dtstdc cr0,%1,1\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (input) : "cr0"); /* cr0 bits are 28:31 and: - 0010 operand positive with match - 1010 operand negative with math */ return (cr0 & 0x20000000) ? 1 : 0; } weak_alias (__issignalingd32, issignalingd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/issignalingd64.c000066400000000000000000000025321504475242000221450ustar00rootroot00000000000000/* _Decimal32 issignaling classification function. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include int __issignalingd64 (_Decimal64 x) { int cr0; /* DCM bit 5 is signaling NaN */ asm ("dtstdc cr0,%1,1\n" "mfcr %0, 128\n" : "=r" (cr0) : "f" (x) : "cr0"); /* cr0 bits are 28:31 and: - 0010 operand positive with match - 1010 operand negative with math */ return (cr0 & 0x20000000) ? 1 : 0; } weak_alias (__issignalingd64, issignalingd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/libdfp-test-ulps000066400000000000000000000005751504475242000223020ustar00rootroot00000000000000test cos decimal128 0 decimal32 0 decimal64 0 test acos decimal128 1 decimal32 0 decimal64 0 test sin decimal128 0 decimal32 0 decimal64 0 test log decimal128 0 decimal32 0 decimal64 0 test log10 decimal128 0 decimal32 0 decimal64 0 test log1p decimal128 0 decimal32 1 decimal64 0 test exp decimal128 0 decimal32 0 decimal64 3 test pow decimal128 0 decimal32 0 decimal64 1 libdfp-1.0.17/sysdeps/powerpc/dfpu/llquantexpd128.c000066400000000000000000000026351504475242000221200ustar00rootroot00000000000000/* _Decimal128 llquantexpd128 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include long long int __llquantexpd128 (_Decimal128 x) { long long int ret; _Decimal128 r; asm ("dxexq %0,%1\n" "dcffixq %0,%0\n" : "=f"(r) : "f"(x)); ret = (long long int)r; if ((ret == -1) || /* Infinity */ (ret == -2) || /* NaN */ (ret == -3)) /* SNaN */ { errno = EDOM; return LLONG_MIN; } return ret - 6176; } weak_alias (__llquantexpd128, llquantexpd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/llquantexpd32.c000066400000000000000000000026421504475242000220300ustar00rootroot00000000000000/* _Decimal32 llquantexp32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include long long int __llquantexpd32 (_Decimal32 x) { long long int ret; _Decimal64 r; asm ("dxex %0,%1\n" "dcffix %0,%0\n" : "=f"(r) : "f"((_Decimal64) x)); ret = (long long int)r; if ((ret == -1) || /* Infinity */ (ret == -2) || /* NaN */ (ret == -3)) /* SNaN */ { errno = EDOM; return LLONG_MIN; } return ret - 398; } weak_alias (__llquantexpd32, llquantexpd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/llquantexpd64.c000066400000000000000000000026251504475242000220360ustar00rootroot00000000000000/* _Decimal64 llquantexpd64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include long long int __llquantexpd64 (_Decimal64 x) { long long int ret; _Decimal64 r; asm ("dxex %0,%1\n" "dcffix %0,%0\n" : "=f"(r) : "f"(x)); ret = (long long int)r; if ((ret == -1) || /* Infinity */ (ret == -2) || /* NaN */ (ret == -3)) /* SNaN */ { errno = EDOM; return LLONG_MIN; } return ret - 398; } weak_alias (__llquantexpd64, llquantexpd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/logd32.c000066400000000000000000000023561504475242000204160ustar00rootroot00000000000000/* Decimal Floating Point 32-bit natural logarithm. POWER6 PowerPC32 version. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ extern _Decimal64 __logd64(_Decimal64); #include _Decimal32 __logd32 (_Decimal32 a) { return (_Decimal32) __logd64((_Decimal64) a); } weak_alias(__logd32, logd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/nearbyintd128.c000066400000000000000000000022051504475242000217070ustar00rootroot00000000000000/* _Decimal32 nearbyintd128 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __nearbyintd128 (_Decimal128 x) { _Decimal128 ret; asm ("drintnq 0,%0,%1,3\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__nearbyintd128, nearbyintd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/nearbyintd32.c000066400000000000000000000022141504475242000216210ustar00rootroot00000000000000/* _Decimal32 nearbyintd32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __nearbyintd32 (_Decimal32 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,3\n" : "=f"(ret) : "f"((_Decimal64) x)); return ret; } weak_alias (__nearbyintd32, nearbyintd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/nearbyintd64.c000066400000000000000000000021771504475242000216360ustar00rootroot00000000000000/* _Decimal32 nearbyintd64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __nearbyintd64 (_Decimal64 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,3\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__nearbyintd64, nearbyintd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/numdigits.h000066400000000000000000000117071504475242000213340ustar00rootroot00000000000000/* Number of digits functions, optimized for Power6. Copyright (C) 2006-2008 IBM Corporation. Copyright (C) 2006-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein Michael Meissner Peter Bergner Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ /* Alow this file to be included more than once, so don't use the usual include guards. */ #define NUMDIGITS_SUPPORT 1 #ifndef DEC_TYPE #error DEC_TYPE must be declared #endif #ifndef _DECIMAL_SIZE #error _DECIMAL_SIZE must be declared #endif #include #undef DECIMAL_BIAS #undef DECIMAL_BIAS_DOUBLE #undef Q #if _DECIMAL_SIZE == 32 // DECIMAL32 gets widened to DECIMAL64, so it ought to use DECIMAL64 bias # define DECIMAL_BIAS (101+297) # define DECIMAL_BIAS_DOUBLE 0x0.000000000018ep-1022 # define Q "" #elif _DECIMAL_SIZE == 64 # define DECIMAL_BIAS 398 # define DECIMAL_BIAS_DOUBLE 0x0.000000000018ep-1022 # define Q "" #elif _DECIMAL_SIZE == 128 # define DECIMAL_BIAS 6176 # define DECIMAL_BIAS_DOUBLE 0x0.000000000182p-1022 # define Q "q" #else #error _DECIMAL_SIZE must be '32', '64' or '128' #endif #ifndef PASTE # define PASTE(x,y) PASTE2(x,y) # define PASTE2(x,y) x##y #endif #ifndef FUNC_D # define FUNC_D(x) PASTE(x,PASTE(d,_DECIMAL_SIZE)) #endif static inline int FUNC_D (getexp) (DEC_TYPE x) { double f; long long i; #if _DECIMAL_SIZE == 32 asm ("dctdp %0,%1\n\t" "dxex %0,%0\n\t" : "=d"(f) : "f"(x)); #elif _DECIMAL_SIZE == 64 asm ("dxex %0,%1" : "=d"(f) : "d"(x)); #elif _DECIMAL_SIZE == 128 asm ("dxexq %0,%1" : "=d"(f) : "d"(x)); #endif asm ("stfd %1,%0" : "=m"(i) : "d"(f)); return i - DECIMAL_BIAS; } static inline DEC_TYPE FUNC_D (setexp) (DEC_TYPE x, int exp) { DEC_TYPE tmp = x; union { long long int l; double f; } e; e.l = exp + DECIMAL_BIAS; asm ( #if _DECIMAL_SIZE == 32 "dctdp %0,%0\n\t" "diex %0,%1,%0\n\t" "drsp %0,%0\n\t" #elif _DECIMAL_SIZE == 64 "diex %0,%1,%0\n\t" #elif _DECIMAL_SIZE == 128 "diexq %0,%1,%0\n\t" #endif : "=f"(tmp) : "f"(e.f), "0"(tmp)); return tmp; } static inline int FUNC_D (numdigits) (DEC_TYPE x) { #if _DECIMAL_SIZE == 32 register _Decimal64 tmp = x; _Decimal64 f3, f4; #else register DEC_TYPE tmp = x; DEC_TYPE f3, f4; #endif double f1, f2; union _ld_t { long long int l; double f; }; static union _ld_t u = { .f = 0x0.0000000000001p-1022 }; static union _ld_t v = { .f = DECIMAL_BIAS_DOUBLE }; union _ld_t t; asm ( "dxex" Q " %0,%3\n\t" "diex" Q " %2,%4,%3\n\t" : "=&d"(f1), "=&d"(f2), "=&d"(f3) : "d"(tmp), "d"(v.f)); /* Check for NaN and infinity, dxex returns < 0 for qnan, snan, and inf. */ t.f = f1; if (t.l < 0) return t.l; asm ( "drrnd" Q " %0,%2,%3,1\n\t" "dxex" Q " %1,%0\n\t" : "=&d"(f4), "=&d"(f2) : "d"(u.f), "d"(f3)); /* v.l holds the normalized reference exponent. f2 holds the computed exponent after reround. */ t.f = f2; return t.l - v.l + 1; } static inline DEC_TYPE FUNC_D (left_justify) (DEC_TYPE x) { #undef ADJUST #if _DECIMAL_SIZE == 32 # define ADJUST 6 _Decimal64 tmp = x; _Decimal64 rnd; #else # if _DECIMAL_SIZE == 64 # define ADJUST 15 # elif _DECIMAL_SIZE == 128 # define ADJUST 33 # endif DEC_TYPE tmp = x; DEC_TYPE rnd; #endif double tmp2; union int_dbl { long long int l; double f; }; static union int_dbl d = { .f = 0x0.0000000000001p-1022 }; union int_dbl d2; asm ("drrnd" Q " %0,%1,%2,1" : "=d"(rnd) : "d"(d.f), "d"(tmp)); asm ("dxex" Q " %0,%1\n\t" : "=d"(tmp2) : "d"(rnd)); d2.f = tmp2; /* Check for NaN and infinity, dxex returns < 0 for qnan, snan, and inf. */ if (d2.l < 0) return x; if (d2.l >= ADJUST) d2.l -= ADJUST; else d2.l = 0; tmp2 = d2.f; asm ("diex" Q " %0,%1,%0\n\t" : "=d"(rnd) : "d"(tmp2), "0"(rnd)); asm ("dqua" Q " %0,%0,%2,1\n\t" : "=d"(rnd) : "0"(rnd), "d"(tmp)); /* cast is necessary if input is _Decimal32 in order to convert it from * _Decima64 back to _Decimal32 since the calculation is done in _Decimal64. */ return (DEC_TYPE)rnd; } libdfp-1.0.17/sysdeps/powerpc/dfpu/quantized128.c000066400000000000000000000022441504475242000215570ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include "dfp_inline.h" #undef __quantized128 _Decimal128 __quantized128(_Decimal128 x, _Decimal128 y) { return ___quantized128 (x, y); } weak_alias (__quantized128, quantized128) libdfp-1.0.17/sysdeps/powerpc/dfpu/quantized32.c000066400000000000000000000041471504475242000214750ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2006 IBM Corporation. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __quantized32 (_Decimal32 x, _Decimal32 y) { /* Always use _Decimal64 asm insns for _Decimal32 since there are no * _Decimal32 insns. */ _Decimal64 result; register _Decimal64 tmp; _Decimal64 f3, f4; double f2; union _ld_t { long long int l; double f; }; static union _ld_t u = { .f = 0x0.0000000000001p-1022 }; static union _ld_t v = { .f = 0x0.000000000018ep-1022 }; union _ld_t t; __asm__("dqua %0,%1,%2,3;" : "=f" (result): "f" ((_Decimal64) y), "f" ((_Decimal64) x)); /* Get the number of digits. Based on numdigits.h. */ tmp = result; asm ( "diex %0,%4,%3\n\t" "drrnd %2,%5,%0,1\n\t" "dxex %1,%2\n\t" : "=&d"(f3), "=&d"(f2), "=&d"(f4) : "d"(tmp), "d"(v.f), "d"(u.f)); /* v.l holds the normalized reference exponent. f2 holds the computed exponent after reround. */ t.f = f2; /* Verify if the result don't causes overflow when converted to 32 bits. If yes return NaN */ if (t.l - v.l + 1 > 7) return (_Decimal32) DEC_NAN; return (_Decimal32) result; } weak_alias (__quantized32, quantized32) libdfp-1.0.17/sysdeps/powerpc/dfpu/quantized64.c000066400000000000000000000022351504475242000214760ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include "dfp_inline.h" #undef __quantized64 _Decimal64 __quantized64 (_Decimal64 x, _Decimal64 y) { return ___quantized64 (x, y); } weak_alias (__quantized64, quantized64) libdfp-1.0.17/sysdeps/powerpc/dfpu/quantumd128.c000066400000000000000000000024531504475242000214130ustar00rootroot00000000000000/* _Decimal128 quantum implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include /* Return the quantum 1 * 10^exponent(x) */ _Decimal128 __quantumd128 (_Decimal128 x) { _Decimal128 ret; _Decimal128 ref = 1e-6176DL; asm ("dxexq %1,%1\n" /* Extract exponent */ "diexq %0,%1,%2\n" /* Sets it to reference value */ : "=d"(ret) : "d"(x), "d"(ref)); return ret; } weak_alias (__quantumd128, quantumd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/quantumd32.c000066400000000000000000000023611504475242000213230ustar00rootroot00000000000000/* _Decimal32 quantumd32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include /* Return the quantum 1 * 10^exponent(x) */ _Decimal32 __quantumd32 (_Decimal32 x) { _Decimal64 ret; _Decimal64 ref = 1e-398DD; asm ("dxex %0,%1\n" "diex %0,%0,%2\n" : "=f"(ret) : "f"((_Decimal64) x), "f"(ref)); return ret; } weak_alias (__quantumd32, quantumd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/quantumd64.c000066400000000000000000000024461504475242000213340ustar00rootroot00000000000000/* _Decimal64 quantumd64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include /* Return the quantum 1 * 10^exponent(x) */ _Decimal64 __quantumd64 (_Decimal64 x) { _Decimal64 ret; _Decimal64 ref = 1e-398DD; asm ("dxex %0,%1\n" /* Extracts exponent */ "diex %0,%0,%2\n" /* Sets it to reference value */ : "=f"(ret) : "f"(x), "f"(ref)); return ret; } weak_alias (__quantumd64, quantumd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/rintd128.c000066400000000000000000000021471504475242000206750ustar00rootroot00000000000000/* Decimal Floating Point 128-bit round to integer. POWER6 PowerPC32 version. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C 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. The GNU C 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 the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA */ #include _Decimal128 __rintd128 (_Decimal128 a) { _Decimal128 ret; asm ( "drintxq 0,%0,%0,3\n\t" : "=f"(ret) : "f"(a)); return ret; } weak_alias(__rintd128, rintd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/rintd32.c000066400000000000000000000021621504475242000206040ustar00rootroot00000000000000/* Decimal Floating Point 32-bit round to integer. POWER6 PowerPC32 version. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C 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. The GNU C 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 the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA */ #include _Decimal32 __rintd32 (_Decimal32 a) { asm ( "dctdp %0,%0\n\t" "drintx 0,%0,%0,3\n\t" "drsp %0,%0\n\t" : "=f"(a) : "0"(a)); return a; } weak_alias(__rintd32, rintd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/rintd64.c000066400000000000000000000021121504475242000206040ustar00rootroot00000000000000/* Decimal Floating Point 32-bit round to integer. POWER6 PowerPC32 version. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C 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. The GNU C 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 the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA */ #include _Decimal64 __rintd64 (_Decimal64 a) { asm ( "drintx 0,%0,%0,3\n\t" : "=f"(a) : "0"(a)); return a; } weak_alias(__rintd64, rintd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/roundd128.c000066400000000000000000000021661504475242000210510ustar00rootroot00000000000000/* _Decimal128 roundd128 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __roundd128 (_Decimal128 x) { _Decimal128 ret; asm ("drintnq 0,%0,%1,2\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__roundd128, roundd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/roundd32.c000066400000000000000000000021741504475242000207620ustar00rootroot00000000000000/* _Decimal32 roundd32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __roundd32 (_Decimal32 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,2\n" : "=f"(ret) : "f"((_Decimal64) x)); return ret; } weak_alias (__roundd32, roundd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/roundd64.c000066400000000000000000000021571504475242000207700ustar00rootroot00000000000000/* _Decimal64 roundd64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __roundd64 (_Decimal64 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,2\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__roundd64, roundd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/roundevend128.c000066400000000000000000000022051504475242000217210ustar00rootroot00000000000000/* _Decimal32 roundevend128 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __roundevend128 (_Decimal128 x) { _Decimal128 ret; asm ("drintnq 0,%0,%1,0\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__roundevend128, roundevend128) libdfp-1.0.17/sysdeps/powerpc/dfpu/roundevend32.c000066400000000000000000000022141504475242000216330ustar00rootroot00000000000000/* _Decimal32 roundevend32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __roundevend32 (_Decimal32 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,0\n" : "=f"(ret) : "f"((_Decimal64) x)); return ret; } weak_alias (__roundevend32, roundevend32) libdfp-1.0.17/sysdeps/powerpc/dfpu/roundevend64.c000066400000000000000000000021771504475242000216500ustar00rootroot00000000000000/* _Decimal32 roundevend64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __roundevend64 (_Decimal64 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,0\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__roundevend64, roundevend64) libdfp-1.0.17/sysdeps/powerpc/dfpu/samequantumd128.c000066400000000000000000000024271504475242000222620ustar00rootroot00000000000000/* _Decimal128 quantum implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include /* Return the quantum 1 * 10^exponent(x) */ _Bool __samequantumd128 (_Decimal128 x, _Decimal128 y) { int xnan = __isnand128 (x); int ynan = __isnand128 (y); if (xnan | ynan) return xnan & ynan; return __quantumd128 (x) == __quantumd128 (y); } weak_alias (__samequantumd128, samequantumd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/samequantumd32.c000066400000000000000000000024151504475242000221710ustar00rootroot00000000000000/* _Decimal32 quantum implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include /* Return the quantum 1 * 10^exponent(x) */ _Bool __samequantumd32 (_Decimal32 x, _Decimal32 y) { int xnan = __isnand32 (x); int ynan = __isnand32 (y); if (xnan | ynan) return xnan & ynan; return __quantumd32 (x) == __quantumd32 (y); } weak_alias (__samequantumd32, samequantumd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/samequantumd64.c000066400000000000000000000024151504475242000221760ustar00rootroot00000000000000/* _Decimal64 quantum implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include /* Return the quantum 1 * 10^exponent(x) */ _Bool __samequantumd64 (_Decimal64 x, _Decimal64 y) { int xnan = __isnand64 (x); int ynan = __isnand64 (y); if (xnan | ynan) return xnan & ynan; return __quantumd64 (x) == __quantumd64 (y); } weak_alias (__samequantumd64, samequantumd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/truncd128.c000066400000000000000000000021661504475242000210550ustar00rootroot00000000000000/* _Decimal128 truncd128 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __truncd128 (_Decimal128 x) { _Decimal128 ret; asm ("drintnq 0,%0,%1,1\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__truncd128, truncd128) libdfp-1.0.17/sysdeps/powerpc/dfpu/truncd32.c000066400000000000000000000021741504475242000207660ustar00rootroot00000000000000/* _Decimal32 truncd32 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __truncd32 (_Decimal32 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,1\n" : "=f"(ret) : "f"((_Decimal64) x)); return ret; } weak_alias (__truncd32, truncd32) libdfp-1.0.17/sysdeps/powerpc/dfpu/truncd64.c000066400000000000000000000021571504475242000207740ustar00rootroot00000000000000/* _Decimal64 truncd64 implementation. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal64 __truncd64 (_Decimal64 x) { _Decimal64 ret; asm ("drintn 0,%0,%1,1\n" : "=f"(ret) : "f"(x)); return ret; } weak_alias (__truncd64, truncd64) libdfp-1.0.17/sysdeps/powerpc/dfpu/trunctdsd2.c000066400000000000000000000027571504475242000214250ustar00rootroot00000000000000/* Decimal Floating Point truncate 128-bit to 32-bit. Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include "dfp_inline.h" _Decimal32 __dpd_trunctdsd2 (_Decimal128 d) { _Decimal64 tmp; { SET_RESTORE_DROUND (7); /* Round to prepare for shorter */ tmp = d; /* TODO: The compiler should respect our wishes, but we can't give it the hint we've munged fpscr with inline asm. So, create a dependency between the rounding variable and our computation. */ asm volatile ("":"+f" (__rnd), "+f" (d)); } /* Round from D64 -> D32 using the current rounding mode. */ return tmp; } hidden_def (__dpd_trunctdsd2) libdfp-1.0.17/sysdeps/powerpc/extendddtf.c000066400000000000000000000060661504475242000205210ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary long double (128) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef DECIMAL_TO_BINARY #define DECIMAL_TO_BINARY #define SRC 64 #define DEST 128 #define NAME extend #endif #include #include "dfpacc.h" #include "convert.h" #include "convert_helpers.h" CONVERT_WRAPPER( // extendddtf, trunctdtf volatile double df_part1, df_part2; int exp; SRC_TYPE dd_part1, dd_part2; /* Get normalized exponent. */ (void) getmantandexpd128 (a, &exp, 0, 0); /* Check if the normalized exponent is beyond the greatest or the least exponent supported by IBM long double and return the result properly rounded. */ if (exp > BINPOWOF10_LIMIT) /* Overflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_OVERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TOWARDZERO: return SIGNBIT(a) ? -LDBL_MAX : LDBL_MAX; case FE_DOWNWARD: return SIGNBIT(a) ? -INFINITY : LDBL_MAX; case FE_UPWARD: return SIGNBIT(a) ? -LDBL_MAX : INFINITY; case FE_TONEAREST: default: return SIGNBIT(a) ? -INFINITY : INFINITY; } } else if (exp < -POWOF10_MIN_DENORM_DBL_EXP) /* Underflow. */ { if (DFP_EXCEPTIONS_ENABLED) DFP_HANDLE_EXCEPTIONS (FE_UNDERFLOW|FE_INEXACT); switch (fegetround()) { case FE_TOWARDZERO: return SIGNBIT(a) ? -0.0 : 0.0; case FE_DOWNWARD: return SIGNBIT(a) ? -__LDBL_DENORM_MIN__ : 0.0; case FE_UPWARD: return SIGNBIT(a) ? -0.0 : __LDBL_DENORM_MIN__; case FE_TONEAREST: default: return SIGNBIT(a) ? -0.0 : 0.0; } } df_part1 = a; /* TD -> DF */ dd_part1 = df_part1; /* DF -> DD./TD. */ dd_part2 = a - dd_part1; /* DD./TD. */ df_part2 = dd_part2; /* DD/TD -> DF. */ result = df_part1; result += df_part2; /* Clear inexact exception raised by DFP arithmetic. */ if (DFP_EXCEPTIONS_ENABLED && DFP_TEST_EXCEPTIONS (FE_OVERFLOW|FE_UNDERFLOW) == 0) DFP_CLEAR_EXCEPTIONS (FE_INEXACT); ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/powerpc/extendsdtf.c000066400000000000000000000030211504475242000205240ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary long double (128) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef DECIMAL_TO_BINARY #define DECIMAL_TO_BINARY #define SRC 32 #define DEST 128 #define NAME extend #endif #include "dfpacc.h" #include "convert.h" CONVERT_WRAPPER( volatile double df_part1, df_part2; _Decimal32 sd_part1, sd_part2; df_part1 = a; /* TD -> DF */ sd_part1 = df_part1; /* DF -> SD (not exact) */ sd_part2 = a - sd_part1; /* SD */ df_part2 = sd_part2; /* SD -> DF (trunc) */ result = df_part1; result += df_part2; ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/powerpc/extendtftd.c000066400000000000000000000022341504475242000205320ustar00rootroot00000000000000/* Handle conversion from binary long double (dual 64bit) to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 128 #define DEST 128 #define NAME extend #include "trunctfsd.c" libdfp-1.0.17/sysdeps/powerpc/fenv_libdfp.h000066400000000000000000000033161504475242000206460ustar00rootroot00000000000000/* Some FPSCR functions. Copyright (C) 2009 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _FENV_LIBDFP_H #define _FENV_LIBDFP_H 1 #include typedef union { fenv_t fenv; unsigned long long l; } fenv_union_t; # define fegetenv_register() \ ({ fenv_t env; asm volatile ("mffs %0" : "=f" (env)); env; }) #ifndef _ARCH_PWR6 /* This could have been done in another sysdeps directory but it is easiest * here. */ # define fesetenv_register(env) \ do { \ double d = (env); \ asm volatile ("mtfsf 0xff,%0" : : "f" (d)); \ } while(0) #else /* Power6 & Power7 have a 64-bit FPSCR. */ # define fesetenv_register(env) \ do { \ double d = (env); \ asm volatile ("mtfsf 0xff,%0,1,0; " : : "f" (d)); \ } while(0) #endif /* _ARCH_PWR6 */ #endif /* _FENV_LIBDFP_H */ libdfp-1.0.17/sysdeps/powerpc/nodfpu/000077500000000000000000000000001504475242000175075ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/powerpc/nodfpu/Implies000066400000000000000000000000251504475242000210310ustar00rootroot00000000000000sysdeps/soft-dfp/dpd libdfp-1.0.17/sysdeps/powerpc/nodfpu/Makefile000066400000000000000000000000401504475242000211410ustar00rootroot00000000000000sysdeps-CFLAGS += -mno-hard-dfp libdfp-1.0.17/sysdeps/powerpc/powerpc32/000077500000000000000000000000001504475242000200405ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/powerpc/powerpc32/Implies000066400000000000000000000000241504475242000213610ustar00rootroot00000000000000sysdeps/wordsize-32 libdfp-1.0.17/sysdeps/powerpc/powerpc32/libdfp.abilist000066400000000000000000000127771504475242000226670ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __dpd_adddd3 F __dpd_addsd3 F __dpd_addtd3 F __dpd_divdd3 F __dpd_divsd3 F __dpd_divtd3 F __dpd_eqdd2 F __dpd_eqsd2 F __dpd_eqtd2 F __dpd_extendddtd2 F __dpd_extendddtf F __dpd_extenddfdd F __dpd_extenddftd F __dpd_extendsddd2 F __dpd_extendsddf F __dpd_extendsdtd2 F __dpd_extendsdtf F __dpd_extendsfdd F __dpd_extendsfsd F __dpd_extendsftd F __dpd_extendtftd F __dpd_fixdddi F __dpd_fixddsi F __dpd_fixsddi F __dpd_fixsdsi F __dpd_fixtddi F __dpd_fixtdsi F __dpd_fixunsdddi F __dpd_fixunsddsi F __dpd_fixunssddi F __dpd_fixunssdsi F __dpd_fixunstddi F __dpd_fixunstdsi F __dpd_floatdidd F __dpd_floatdisd F __dpd_floatditd F __dpd_floatsidd F __dpd_floatsisd F __dpd_floatsitd F __dpd_floatunsdidd F __dpd_floatunsdisd F __dpd_floatunsditd F __dpd_floatunssidd F __dpd_floatunssisd F __dpd_floatunssitd F __dpd_gedd2 F __dpd_gesd2 F __dpd_getd2 F __dpd_gtdd2 F __dpd_gtsd2 F __dpd_gttd2 F __dpd_ledd2 F __dpd_lesd2 F __dpd_letd2 F __dpd_ltdd2 F __dpd_ltsd2 F __dpd_lttd2 F __dpd_muldd3 F __dpd_mulsd3 F __dpd_multd3 F __dpd_nedd2 F __dpd_nesd2 F __dpd_netd2 F __dpd_subdd3 F __dpd_subsd3 F __dpd_subtd3 F __dpd_truncdddf F __dpd_truncddsd2 F __dpd_truncddsf F __dpd_truncdfsd F __dpd_truncsdsf F __dpd_trunctddd2 F __dpd_trunctddf F __dpd_trunctdsd2 F __dpd_trunctdsf F __dpd_trunctdtf F __dpd_trunctfdd F __dpd_trunctfsd F __dpd_unorddd2 F __dpd_unordsd2 F __dpd_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A LIBDFP_1.0.15 LIBDFP_1.0.15 A fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/sysdeps/powerpc/powerpc32/sysdep.h000066400000000000000000000066541504475242000215330ustar00rootroot00000000000000/* Assembly macros for 32-bit PowerPC. Copyright (C) 1999-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include /* Derived from GLIBC */ #ifdef __ASSEMBLER__ #ifdef __ELF__ #undef ENTRY #define ENTRY(name) \ ASM_GLOBAL_DIRECTIVE name; \ ASM_TYPE_DIRECTIVE (name,@function) \ .align ALIGNARG(2); \ LABEL(name) \ cfi_startproc; #define EALIGN_W_0 /* No words to insert. */ #define EALIGN_W_1 nop #define EALIGN_W_2 nop;nop #define EALIGN_W_3 nop;nop;nop #define EALIGN_W_4 EALIGN_W_3;nop #define EALIGN_W_5 EALIGN_W_4;nop #define EALIGN_W_6 EALIGN_W_5;nop #define EALIGN_W_7 EALIGN_W_6;nop #undef EALIGN /* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes past a 2^align boundary. */ #define EALIGN(name, alignt, words) \ ASM_GLOBAL_DIRECTIVE name; \ ASM_TYPE_DIRECTIVE (name,@function) \ .align ALIGNARG(alignt); \ EALIGN_W_##words; \ LABEL(name) \ cfi_startproc; #undef END #define END(name) \ cfi_endproc; \ ASM_SIZE_DIRECTIVE(name) #define DO_CALL(syscall) \ li 0,syscall; \ sc #undef JUMPTARGET #ifdef PIC # define JUMPTARGET(name) name##@plt #else # define JUMPTARGET(name) name #endif #if defined SHARED && defined DO_VERSIONING && defined PIC \ && !defined NO_HIDDEN # undef HIDDEN_JUMPTARGET # define HIDDEN_JUMPTARGET(name) __GI_##name##@local #endif #define PSEUDO(name, syscall_name, args) \ .section ".text"; \ ENTRY (name) \ DO_CALL (SYS_ify (syscall_name)); #define PSEUDO_RET \ bnslr+; \ b __syscall_error@local #define ret PSEUDO_RET #undef PSEUDO_END #define PSEUDO_END(name) \ END (name) #define PSEUDO_NOERRNO(name, syscall_name, args) \ .section ".text"; \ ENTRY (name) \ DO_CALL (SYS_ify (syscall_name)); #define PSEUDO_RET_NOERRNO \ blr #define ret_NOERRNO PSEUDO_RET_NOERRNO #undef PSEUDO_END_NOERRNO #define PSEUDO_END_NOERRNO(name) \ END (name) #define PSEUDO_ERRVAL(name, syscall_name, args) \ .section ".text"; \ ENTRY (name) \ DO_CALL (SYS_ify (syscall_name)); #define PSEUDO_RET_ERRVAL \ blr #define ret_ERRVAL PSEUDO_RET_ERRVAL #undef PSEUDO_END_ERRVAL #define PSEUDO_END_ERRVAL(name) \ END (name) /* Local labels stripped out by the linker. */ #undef L #define L(x) .L##x #endif /* __ELF__ */ #endif /* __ASSEMBLER__ */ libdfp-1.0.17/sysdeps/powerpc/powerpc64/000077500000000000000000000000001504475242000200455ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/powerpc/powerpc64/Implies000066400000000000000000000000241504475242000213660ustar00rootroot00000000000000sysdeps/wordsize-64 libdfp-1.0.17/sysdeps/powerpc/powerpc64/le/000077500000000000000000000000001504475242000204455ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/powerpc/powerpc64/le/Implies000066400000000000000000000000321504475242000217650ustar00rootroot00000000000000sysdeps/powerpc/powerpc64 libdfp-1.0.17/sysdeps/powerpc/powerpc64/le/Makefile000066400000000000000000000001231504475242000221010ustar00rootroot00000000000000# For KFmode support sysdeps-CFLAGS += -mfloat128 libdfp_files += decimal_float128 libdfp-1.0.17/sysdeps/powerpc/powerpc64/le/Versions000066400000000000000000000006351504475242000222040ustar00rootroot00000000000000libdfp { LIBDFP_1.0.15 { # GCC < 9 generates these symbols for KF <-> *D __dpd_extendsdkf2; __dpd_extendddkf2; __dpd_extendtdkf2; __dpd_trunckfsd2; __dpd_trunckfdd2; __dpd_trunckftd2; # GCC >= 9 generates these # *D -> KF __dpd_extendsdkf; __dpd_extendddkf; __dpd_trunctdkf; # KF -> *D __dpd_extendkftd; __dpd_trunckfdd; __dpd_trunckfsd; } } libdfp-1.0.17/sysdeps/powerpc/powerpc64/le/libdfp.abilist000066400000000000000000000137311504475242000232630ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __dpd_adddd3 F __dpd_addsd3 F __dpd_addtd3 F __dpd_divdd3 F __dpd_divsd3 F __dpd_divtd3 F __dpd_eqdd2 F __dpd_eqsd2 F __dpd_eqtd2 F __dpd_extendddtd2 F __dpd_extendddtf F __dpd_extenddfdd F __dpd_extenddftd F __dpd_extendsddd2 F __dpd_extendsddf F __dpd_extendsdtd2 F __dpd_extendsdtf F __dpd_extendsfdd F __dpd_extendsfsd F __dpd_extendsftd F __dpd_extendtftd F __dpd_fixdddi F __dpd_fixddsi F __dpd_fixsddi F __dpd_fixsdsi F __dpd_fixtddi F __dpd_fixtdsi F __dpd_fixunsdddi F __dpd_fixunsddsi F __dpd_fixunssddi F __dpd_fixunssdsi F __dpd_fixunstddi F __dpd_fixunstdsi F __dpd_floatdidd F __dpd_floatdisd F __dpd_floatditd F __dpd_floatsidd F __dpd_floatsisd F __dpd_floatsitd F __dpd_floatunsdidd F __dpd_floatunsdisd F __dpd_floatunsditd F __dpd_floatunssidd F __dpd_floatunssisd F __dpd_floatunssitd F __dpd_gedd2 F __dpd_gesd2 F __dpd_getd2 F __dpd_gtdd2 F __dpd_gtsd2 F __dpd_gttd2 F __dpd_ledd2 F __dpd_lesd2 F __dpd_letd2 F __dpd_ltdd2 F __dpd_ltsd2 F __dpd_lttd2 F __dpd_muldd3 F __dpd_mulsd3 F __dpd_multd3 F __dpd_nedd2 F __dpd_nesd2 F __dpd_netd2 F __dpd_subdd3 F __dpd_subsd3 F __dpd_subtd3 F __dpd_truncdddf F __dpd_truncddsd2 F __dpd_truncddsf F __dpd_truncdfsd F __dpd_truncsdsf F __dpd_trunctddd2 F __dpd_trunctddf F __dpd_trunctdsd2 F __dpd_trunctdsf F __dpd_trunctdtf F __dpd_trunctfdd F __dpd_trunctfsd F __dpd_unorddd2 F __dpd_unordsd2 F __dpd_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A __dpd_fixddti F __dpd_fixsdti F __dpd_fixtdti F __dpd_fixunsddti F __dpd_fixunssdti F __dpd_fixunstdti F __dpd_floattidd F __dpd_floattisd F __dpd_floattitd F __dpd_floatunstidd F __dpd_floatunstisd F __dpd_floatunstitd F LIBDFP_1.0.15 LIBDFP_1.0.15 A __dpd_extendddkf F __dpd_extendddkf2 F __dpd_extendkftd F __dpd_extendsdkf F __dpd_extendsdkf2 F __dpd_extendtdkf2 F __dpd_trunckfdd F __dpd_trunckfdd2 F __dpd_trunckfsd F __dpd_trunckfsd2 F __dpd_trunckftd2 F __dpd_trunctdkf F fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/sysdeps/powerpc/powerpc64/libdfp.abilist000066400000000000000000000133511504475242000226610ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __dpd_adddd3 F __dpd_addsd3 F __dpd_addtd3 F __dpd_divdd3 F __dpd_divsd3 F __dpd_divtd3 F __dpd_eqdd2 F __dpd_eqsd2 F __dpd_eqtd2 F __dpd_extendddtd2 F __dpd_extendddtf F __dpd_extenddfdd F __dpd_extenddftd F __dpd_extendsddd2 F __dpd_extendsddf F __dpd_extendsdtd2 F __dpd_extendsdtf F __dpd_extendsfdd F __dpd_extendsfsd F __dpd_extendsftd F __dpd_extendtftd F __dpd_fixdddi F __dpd_fixddsi F __dpd_fixsddi F __dpd_fixsdsi F __dpd_fixtddi F __dpd_fixtdsi F __dpd_fixunsdddi F __dpd_fixunsddsi F __dpd_fixunssddi F __dpd_fixunssdsi F __dpd_fixunstddi F __dpd_fixunstdsi F __dpd_floatdidd F __dpd_floatdisd F __dpd_floatditd F __dpd_floatsidd F __dpd_floatsisd F __dpd_floatsitd F __dpd_floatunsdidd F __dpd_floatunsdisd F __dpd_floatunsditd F __dpd_floatunssidd F __dpd_floatunssisd F __dpd_floatunssitd F __dpd_gedd2 F __dpd_gesd2 F __dpd_getd2 F __dpd_gtdd2 F __dpd_gtsd2 F __dpd_gttd2 F __dpd_ledd2 F __dpd_lesd2 F __dpd_letd2 F __dpd_ltdd2 F __dpd_ltsd2 F __dpd_lttd2 F __dpd_muldd3 F __dpd_mulsd3 F __dpd_multd3 F __dpd_nedd2 F __dpd_nesd2 F __dpd_netd2 F __dpd_subdd3 F __dpd_subsd3 F __dpd_subtd3 F __dpd_truncdddf F __dpd_truncddsd2 F __dpd_truncddsf F __dpd_truncdfsd F __dpd_truncsdsf F __dpd_trunctddd2 F __dpd_trunctddf F __dpd_trunctdsd2 F __dpd_trunctdsf F __dpd_trunctdtf F __dpd_trunctfdd F __dpd_trunctfsd F __dpd_unorddd2 F __dpd_unordsd2 F __dpd_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A __dpd_fixddti F __dpd_fixsdti F __dpd_fixtdti F __dpd_fixunsddti F __dpd_fixunssdti F __dpd_fixunstdti F __dpd_floattidd F __dpd_floattisd F __dpd_floattitd F __dpd_floatunstidd F __dpd_floatunstisd F __dpd_floatunstitd F LIBDFP_1.0.15 LIBDFP_1.0.15 A fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/sysdeps/powerpc/powerpc64/sysdep.h000066400000000000000000000254501504475242000215330ustar00rootroot00000000000000/* Assembly macros for 64-bit PowerPC. Copyright (C) 2002-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #ifdef __ASSEMBLER__ /* Stack frame offsets. */ #if _CALL_ELF != 2 #define FRAME_MIN_SIZE 112 #define FRAME_MIN_SIZE_PARM 112 #define FRAME_BACKCHAIN 0 #define FRAME_CR_SAVE 8 #define FRAME_LR_SAVE 16 #define FRAME_TOC_SAVE 40 #define FRAME_PARM_SAVE 48 #define FRAME_PARM1_SAVE 48 #define FRAME_PARM2_SAVE 56 #define FRAME_PARM3_SAVE 64 #define FRAME_PARM4_SAVE 72 #define FRAME_PARM5_SAVE 80 #define FRAME_PARM6_SAVE 88 #define FRAME_PARM7_SAVE 96 #define FRAME_PARM8_SAVE 104 #define FRAME_PARM9_SAVE 112 #else #define FRAME_MIN_SIZE 32 #define FRAME_MIN_SIZE_PARM 96 #define FRAME_BACKCHAIN 0 #define FRAME_CR_SAVE 8 #define FRAME_LR_SAVE 16 #define FRAME_TOC_SAVE 24 #define FRAME_PARM_SAVE 32 #define FRAME_PARM1_SAVE 32 #define FRAME_PARM2_SAVE 40 #define FRAME_PARM3_SAVE 48 #define FRAME_PARM4_SAVE 56 #define FRAME_PARM5_SAVE 64 #define FRAME_PARM6_SAVE 72 #define FRAME_PARM7_SAVE 80 #define FRAME_PARM8_SAVE 88 #define FRAME_PARM9_SAVE 96 #endif /* Support macros for CALL_MCOUNT. */ #if _CALL_ELF == 2 #define call_mcount_parm_offset (-64) #else #define call_mcount_parm_offset FRAME_PARM_SAVE #endif .macro SAVE_ARG NARG .if \NARG SAVE_ARG \NARG-1 std 2+\NARG,call_mcount_parm_offset-8+8*(\NARG)(1) .endif .endm .macro REST_ARG NARG .if \NARG REST_ARG \NARG-1 ld 2+\NARG,FRAME_MIN_SIZE_PARM+call_mcount_parm_offset-8+8*(\NARG)(1) .endif .endm .macro CFI_SAVE_ARG NARG .if \NARG CFI_SAVE_ARG \NARG-1 cfi_offset(2+\NARG,call_mcount_parm_offset-8+8*(\NARG)) .endif .endm .macro CFI_REST_ARG NARG .if \NARG CFI_REST_ARG \NARG-1 cfi_restore(2+\NARG) .endif .endm /* If compiled for profiling, call `_mcount' at the start of each function. see ppc-mcount.S for more details. */ .macro CALL_MCOUNT NARG #ifdef PROF mflr r0 SAVE_ARG \NARG std r0,FRAME_LR_SAVE(r1) stdu r1,-FRAME_MIN_SIZE_PARM(r1) cfi_adjust_cfa_offset(FRAME_MIN_SIZE_PARM) cfi_offset(lr,FRAME_LR_SAVE) CFI_SAVE_ARG \NARG bl JUMPTARGET (_mcount) #ifndef SHARED nop #endif ld r0,FRAME_MIN_SIZE_PARM+FRAME_LR_SAVE(r1) REST_ARG \NARG mtlr r0 addi r1,r1,FRAME_MIN_SIZE_PARM cfi_adjust_cfa_offset(-FRAME_MIN_SIZE_PARM) cfi_restore(lr) CFI_REST_ARG \NARG #endif .endm #if _CALL_ELF != 2 /* Macro to prepare for calling via a function pointer. */ .macro PPC64_LOAD_FUNCPTR PTR ld r12,0(\PTR) ld r2,8(\PTR) mtctr r12 ld r11,16(\PTR) .endm #ifdef USE_PPC64_OVERLAPPING_OPD # define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase #else # define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase, 0 #endif #define ENTRY_1(name) \ .type BODY_LABEL(name),@function; \ .globl name; \ .section ".opd","aw"; \ .align 3; \ name##: OPD_ENT (name); \ .previous; #ifdef HAVE_ASM_GLOBAL_DOT_NAME # define DOT_LABEL(X) .##X # define BODY_LABEL(X) .##X # define ENTRY_2(name) \ .globl BODY_LABEL(name); \ ENTRY_1(name) \ .size name, 24; # define END_2(name) \ .size BODY_LABEL(name),.-BODY_LABEL(name); #else # define DOT_LABEL(X) X # define BODY_LABEL(X) .LY##X # define ENTRY_2(name) \ .type name,@function; \ ENTRY_1(name) # define END_2(name) \ .size name,.-BODY_LABEL(name); \ .size BODY_LABEL(name),.-BODY_LABEL(name); #endif #define LOCALENTRY(name) #else /* _CALL_ELF */ /* Macro to prepare for calling via a function pointer. */ .macro PPC64_LOAD_FUNCPTR PTR mr r12,\PTR mtctr r12 .endm #define DOT_LABEL(X) X #define BODY_LABEL(X) X #define ENTRY_2(name) \ .globl name; \ .type name,@function; #define END_2(name) \ .size name,.-name; #define LOCALENTRY(name) \ 1: addis r2,r12,.TOC.-1b@ha; \ addi r2,r2,.TOC.-1b@l; \ .localentry name,.-name; #endif /* _CALL_ELF */ #define ENTRY(name) \ .section ".text"; \ ENTRY_2(name) \ .align ALIGNARG(2); \ BODY_LABEL(name): \ cfi_startproc; \ LOCALENTRY(name) #define EALIGN_W_0 /* No words to insert. */ #define EALIGN_W_1 nop #define EALIGN_W_2 nop;nop #define EALIGN_W_3 nop;nop;nop #define EALIGN_W_4 EALIGN_W_3;nop #define EALIGN_W_5 EALIGN_W_4;nop #define EALIGN_W_6 EALIGN_W_5;nop #define EALIGN_W_7 EALIGN_W_6;nop /* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes past a 2^alignt boundary. */ #define EALIGN(name, alignt, words) \ .section ".text"; \ ENTRY_2(name) \ .align ALIGNARG(alignt); \ EALIGN_W_##words; \ BODY_LABEL(name): \ cfi_startproc; \ LOCALENTRY(name) /* Local labels stripped out by the linker. */ #undef L #define L(x) .L##x #define tostring(s) #s #define stringify(s) tostring(s) #define XGLUE(a,b) a##b #define GLUE(a,b) XGLUE(a,b) #define LT_LABEL(name) GLUE(.LT,name) #define LT_LABELSUFFIX(name,suffix) GLUE(GLUE(.LT,name),suffix) /* Support Traceback tables */ #define TB_ASM 0x000c000000000000 #define TB_GLOBALLINK 0x0000800000000000 #define TB_IS_EPROL 0x0000400000000000 #define TB_HAS_TBOFF 0x0000200000000000 #define TB_INT_PROC 0x0000100000000000 #define TB_HAS_CTL 0x0000080000000000 #define TB_TOCLESS 0x0000040000000000 #define TB_FP_PRESENT 0x0000020000000000 #define TB_LOG_ABORT 0x0000010000000000 #define TB_INT_HANDL 0x0000008000000000 #define TB_NAME_PRESENT 0x0000004000000000 #define TB_USES_ALLOCA 0x0000002000000000 #define TB_SAVES_CR 0x0000000200000000 #define TB_SAVES_LR 0x0000000100000000 #define TB_STORES_BC 0x0000000080000000 #define TB_FIXUP 0x0000000040000000 #define TB_FP_SAVED(fprs) (((fprs) & 0x3f) << 24) #define TB_GPR_SAVED(gprs) (((fprs) & 0x3f) << 16) #define TB_FIXEDPARMS(parms) (((parms) & 0xff) << 8) #define TB_FLOATPARMS(parms) (((parms) & 0x7f) << 1) #define TB_PARMSONSTK 0x0000000000000001 #define PPC_HIGHER(v) (((v) >> 32) & 0xffff) #define TB_DEFAULT TB_ASM | TB_HAS_TBOFF | TB_NAME_PRESENT #define TRACEBACK(name) \ LT_LABEL(name): ; \ .long 0 ; \ .quad TB_DEFAULT ; \ .long LT_LABEL(name)-BODY_LABEL(name) ; \ .short LT_LABELSUFFIX(name,_name_end)-LT_LABELSUFFIX(name,_name_start) ; \ LT_LABELSUFFIX(name,_name_start): ;\ .ascii stringify(name) ; \ LT_LABELSUFFIX(name,_name_end): ; \ .align 2 ; #define TRACEBACK_MASK(name,mask) \ LT_LABEL(name): ; \ .long 0 ; \ .quad TB_DEFAULT | mask ; \ .long LT_LABEL(name)-BODY_LABEL(name) ; \ .short LT_LABELSUFFIX(name,_name_end)-LT_LABELSUFFIX(name,_name_start) ; \ LT_LABELSUFFIX(name,_name_start): ;\ .ascii stringify(name) ; \ LT_LABELSUFFIX(name,_name_end): ; \ .align 2 ; /* END generates Traceback tables */ #undef END #define END(name) \ cfi_endproc; \ TRACEBACK(name) \ END_2(name) /* This form supports more informative traceback tables */ #define END_GEN_TB(name,mask) \ cfi_endproc; \ TRACEBACK_MASK(name,mask) \ END_2(name) #define DO_CALL(syscall) \ li 0,syscall; \ sc /* ppc64 is always PIC */ #undef JUMPTARGET #define JUMPTARGET(name) DOT_LABEL(name) #define PSEUDO(name, syscall_name, args) \ .section ".text"; \ ENTRY (name) \ DO_CALL (SYS_ify (syscall_name)); #ifdef SHARED #define TAIL_CALL_SYSCALL_ERROR \ b JUMPTARGET(__syscall_error) #else /* Static version might be linked into a large app with a toc exceeding 64k. We can't put a toc adjusting stub on a plain branch, so can't tail call __syscall_error. */ #define TAIL_CALL_SYSCALL_ERROR \ .ifdef .Local_syscall_error; \ b .Local_syscall_error; \ .else; \ .Local_syscall_error: \ mflr 0; \ std 0,FRAME_LR_SAVE(1); \ stdu 1,-FRAME_MIN_SIZE(1); \ cfi_adjust_cfa_offset(FRAME_MIN_SIZE); \ cfi_offset(lr,FRAME_LR_SAVE); \ bl JUMPTARGET(__syscall_error); \ nop; \ ld 0,FRAME_MIN_SIZE+FRAME_LR_SAVE(1); \ addi 1,1,FRAME_MIN_SIZE; \ cfi_adjust_cfa_offset(-FRAME_MIN_SIZE); \ mtlr 0; \ cfi_restore(lr); \ blr; \ .endif #endif #define PSEUDO_RET \ bnslr+; \ TAIL_CALL_SYSCALL_ERROR #define ret PSEUDO_RET #undef PSEUDO_END #define PSEUDO_END(name) \ END (name) #define PSEUDO_NOERRNO(name, syscall_name, args) \ .section ".text"; \ ENTRY (name) \ DO_CALL (SYS_ify (syscall_name)); #define PSEUDO_RET_NOERRNO \ blr #define ret_NOERRNO PSEUDO_RET_NOERRNO #undef PSEUDO_END_NOERRNO #define PSEUDO_END_NOERRNO(name) \ END (name) #define PSEUDO_ERRVAL(name, syscall_name, args) \ .section ".text"; \ ENTRY (name) \ DO_CALL (SYS_ify (syscall_name)); #define PSEUDO_RET_ERRVAL \ blr #define ret_ERRVAL PSEUDO_RET_ERRVAL #undef PSEUDO_END_ERRVAL #define PSEUDO_END_ERRVAL(name) \ END (name) #else /* !__ASSEMBLER__ */ #if _CALL_ELF != 2 #define PPC64_LOAD_FUNCPTR(ptr) \ "ld 12,0(" #ptr ");\n" \ "ld 2,8(" #ptr ");\n" \ "mtctr 12;\n" \ "ld 11,16(" #ptr ");" #ifdef USE_PPC64_OVERLAPPING_OPD # define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase;" #else # define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase, 0;" #endif #define ENTRY_1(name) \ ".type " BODY_PREFIX #name ",@function;\n" \ ".globl " #name ";\n" \ ".pushsection \".opd\",\"aw\";\n" \ ".align 3;\n" \ #name ":\n" \ OPD_ENT (name) "\n" \ ".popsection;" #ifdef HAVE_ASM_GLOBAL_DOT_NAME # define DOT_PREFIX "." # define BODY_PREFIX "." # define ENTRY_2(name) \ ".globl " BODY_PREFIX #name ";\n" \ ENTRY_1(name) "\n" \ ".size " #name ", 24;" # define END_2(name) \ ".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";" #else # define DOT_PREFIX "" # define BODY_PREFIX ".LY" # define ENTRY_2(name) \ ".type " #name ",@function;\n" \ ENTRY_1(name) # define END_2(name) \ ".size " #name ",.-" BODY_PREFIX #name ";\n" \ ".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";" #endif #define LOCALENTRY(name) #else /* _CALL_ELF */ #define PPC64_LOAD_FUNCPTR(ptr) \ "mr 12," #ptr ";\n" \ "mtctr 12;" #define DOT_PREFIX "" #define BODY_PREFIX "" #define ENTRY_2(name) \ ".type " #name ",@function;\n" \ ".globl " #name ";" #define END_2(name) \ ".size " #name ",.-" #name ";" #define LOCALENTRY(name) \ "1: addis 2,12,.TOC.-1b@ha;\n" \ "addi 2,2,.TOC.-1b@l;\n" \ ".localentry " #name ",.-" #name ";" #endif /* _CALL_ELF */ #endif /* __ASSEMBLER__ */ libdfp-1.0.17/sysdeps/powerpc/sysdep.h000066400000000000000000000117571504475242000177070ustar00rootroot00000000000000/* Constructs needed by libdfp PowerPC asm files. Copyright (C) 1999-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* * Powerpc Feature masks for the Aux Vector Hardware Capabilities (AT_HWCAP). * This entry is copied to _dl_hwcap or rtld_global._dl_hwcap during startup. * The following must match the kernels linux/asm/cputable.h. */ #define PPC_FEATURE_32 0x80000000 /* 32-bit mode. */ #define PPC_FEATURE_64 0x40000000 /* 64-bit mode. */ #define PPC_FEATURE_601_INSTR 0x20000000 /* 601 chip, Old POWER ISA. */ #define PPC_FEATURE_HAS_ALTIVEC 0x10000000 /* SIMD/Vector Unit. */ #define PPC_FEATURE_HAS_FPU 0x08000000 /* Floating Point Unit. */ #define PPC_FEATURE_HAS_MMU 0x04000000 /* Memory Management Unit. */ #define PPC_FEATURE_HAS_4xxMAC 0x02000000 /* 4xx Multiply Accumulator. */ #define PPC_FEATURE_UNIFIED_CACHE 0x01000000 /* Unified I/D cache. */ #define PPC_FEATURE_HAS_SPE 0x00800000 /* Signal Processing ext. */ #define PPC_FEATURE_HAS_EFP_SINGLE 0x00400000 /* SPE Float. */ #define PPC_FEATURE_HAS_EFP_DOUBLE 0x00200000 /* SPE Double. */ #define PPC_FEATURE_NO_TB 0x00100000 /* 601/403gx have no timebase */ #define PPC_FEATURE_POWER4 0x00080000 /* POWER4 ISA 2.00 */ #define PPC_FEATURE_POWER5 0x00040000 /* POWER5 ISA 2.02 */ #define PPC_FEATURE_POWER5_PLUS 0x00020000 /* POWER5+ ISA 2.03 */ #define PPC_FEATURE_CELL_BE 0x00010000 /* CELL Broadband Engine */ #define PPC_FEATURE_BOOKE 0x00008000 #define PPC_FEATURE_SMT 0x00004000 /* Simultaneous Multi-Threading */ #define PPC_FEATURE_ICACHE_SNOOP 0x00002000 #define PPC_FEATURE_ARCH_2_05 0x00001000 /* ISA 2.05 */ #define PPC_FEATURE_PA6T 0x00000800 /* PA Semi 6T Core */ #define PPC_FEATURE_HAS_DFP 0x00000400 /* Decimal FP Unit */ #define PPC_FEATURE_POWER6_EXT 0x00000200 /* P6 + mffgpr/mftgpr */ #define PPC_FEATURE_HAS_VSX 0x00000100 /* P7 Vector Extension. */ #define PPC_FEATURE_ARCH_2_06 0x00000080 /* ISA 2.06 */ #define PPC_FEATURE_970 (PPC_FEATURE_POWER4 + PPC_FEATURE_HAS_ALTIVEC) #ifdef __ASSEMBLER__ /* Symbolic names for the registers. The only portable way to write asm code is to use number but this produces really unreadable code. Therefore these symbolic names. */ /* Integer registers. */ #define r0 0 #define r1 1 #define r2 2 #define r3 3 #define r4 4 #define r5 5 #define r6 6 #define r7 7 #define r8 8 #define r9 9 #define r10 10 #define r11 11 #define r12 12 #define r13 13 #define r14 14 #define r15 15 #define r16 16 #define r17 17 #define r18 18 #define r19 19 #define r20 20 #define r21 21 #define r22 22 #define r23 23 #define r24 24 #define r25 25 #define r26 26 #define r27 27 #define r28 28 #define r29 29 #define r30 30 #define r31 31 /* Floating-point registers. */ #define fp0 0 #define fp1 1 #define fp2 2 #define fp3 3 #define fp4 4 #define fp5 5 #define fp6 6 #define fp7 7 #define fp8 8 #define fp9 9 #define fp10 10 #define fp11 11 #define fp12 12 #define fp13 13 #define fp14 14 #define fp15 15 #define fp16 16 #define fp17 17 #define fp18 18 #define fp19 19 #define fp20 20 #define fp21 21 #define fp22 22 #define fp23 23 #define fp24 24 #define fp25 25 #define fp26 26 #define fp27 27 #define fp28 28 #define fp29 29 #define fp30 30 #define fp31 31 /* Condition code registers. */ #define cr0 0 #define cr1 1 #define cr2 2 #define cr3 3 #define cr4 4 #define cr5 5 #define cr6 6 #define cr7 7 /* Vector registers. */ #define v0 0 #define v1 1 #define v2 2 #define v3 3 #define v4 4 #define v5 5 #define v6 6 #define v7 7 #define v8 8 #define v9 9 #define v10 10 #define v11 11 #define v12 12 #define v13 13 #define v14 14 #define v15 15 #define v16 16 #define v17 17 #define v18 18 #define v19 19 #define v20 20 #define v21 21 #define v22 22 #define v23 23 #define v24 24 #define v25 25 #define v26 26 #define v27 27 #define v28 28 #define v29 29 #define v30 30 #define v31 31 #define VRSAVE 256 #ifdef __ELF__ /* This seems to always be the case on PPC. */ #define ALIGNARG(log2) log2 /* For ELF we need the `.type' directive to make shared libs work right. */ #define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg; #define ASM_SIZE_DIRECTIVE(name) .size name,.-name #endif /* __ELF__ */ #endif /* __ASSEMBLER__ */ libdfp-1.0.17/sysdeps/powerpc/trunctdtf.c000066400000000000000000000023561504475242000204030ustar00rootroot00000000000000/* Handle conversion from Decimal128 to binary long double (dual 64bit) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_BINARY #define SRC 128 #define DEST 128 #define NAME trunc extern double __trunctddf(_Decimal128); extern _Decimal128 __extenddftd(double); #include "extendddtf.c" libdfp-1.0.17/sysdeps/powerpc/trunctfdd.c000066400000000000000000000022731504475242000203610ustar00rootroot00000000000000/* Handle conversion from binary long double (128) to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define BINARY_TO_DECIMAL #define SRC 128 #define DEST 64 #define NAME trunc extern _Decimal64 __extenddfdd(double); #include "trunctfsd.c" libdfp-1.0.17/sysdeps/powerpc/trunctfsd.c000066400000000000000000000031561504475242000204010ustar00rootroot00000000000000/* Handle conversion from binary long double (128) to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef BINARY_TO_DECIMAL #define BINARY_TO_DECIMAL #define SRC 128 #define DEST 32 #define NAME trunc #endif #include "dfpacc.h" #include "convert.h" CONVERT_WRAPPER( // truncdfsd, extenddfdd, extenddftd DEST_TYPE temp; union { SRC_TYPE ld; double d[2]; } ldd; ldd.ld = a; temp = ldd.d[0]; result = temp; temp = ldd.d[1]; result += temp; /* Clear inexact exception raised by DFP arithmetic. */ if (DFP_EXCEPTIONS_ENABLED && DFP_TEST_EXCEPTIONS (FE_OVERFLOW|FE_UNDERFLOW) == 0) DFP_CLEAR_EXCEPTIONS (FE_INEXACT); ) hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/000077500000000000000000000000001504475242000152335ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/s390/Implies000066400000000000000000000000141504475242000165530ustar00rootroot00000000000000sysdeps/dpd libdfp-1.0.17/sysdeps/s390/Makefile000066400000000000000000000000001504475242000166610ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/s390/Versions000066400000000000000000000002411504475242000167630ustar00rootroot00000000000000libdfp { LIBDFP_1.0.0 { __dpd_extendsdtf; __dpd_extendddtf; __dpd_extendtftd; __dpd_trunctfsd; __dpd_trunctfdd; __dpd_trunctdtf; } } libdfp-1.0.17/sysdeps/s390/dfpu/000077500000000000000000000000001504475242000161715ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/s390/dfpu/Makefile000066400000000000000000000002641504475242000176330ustar00rootroot00000000000000sysdeps-CFLAGS += -mzarch # This is a hack. s390 is the only arch today which supports # correctly rounded radix conversions in hw. sysdeps-CFLAGS += -D_LIBDFP_HAS_IDEAL_RDX_CVT libdfp-1.0.17/sysdeps/s390/dfpu/ceild128.c000066400000000000000000000017401504475242000176520ustar00rootroot00000000000000/* Ceiling function for _Decimal128 types Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "ceild32.c" libdfp-1.0.17/sysdeps/s390/dfpu/ceild32.c000066400000000000000000000026761504475242000175750ustar00rootroot00000000000000/* Ceiling function for _Decimal32 types Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME ceil #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 _Decimal128 tmp = x; #else _Decimal64 tmp = (_Decimal64) x; #endif /* Round toward +inf without inexact exception. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,10,%0,4" #else "fidtr %0,10,%0,4" #endif : "+f" (tmp)); return (DEC_TYPE) tmp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/ceild64.c000066400000000000000000000017361504475242000175760ustar00rootroot00000000000000/* Ceiling function for _Decimal64 types Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "ceild32.c" libdfp-1.0.17/sysdeps/s390/dfpu/convert_helpers.h000066400000000000000000000151071504475242000215500ustar00rootroot00000000000000/* Prototypes for assisting converting larger numbers. Copyright (C) 2016 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _CONVERTHELPERS_ #define _CONVERTHELPERS_ #include /* Define combine_and_truncd32 and combine_and_truncd64. */ static inline _Decimal64 combine_and_truncd64 (_Decimal128 hi, _Decimal128 mid, _Decimal128 low) { _Decimal128 tmp; _Decimal128 chunk = 1e17DL; asm volatile ("" : "+f" (hi), "+f" (mid), "+f" (low), "+f" (chunk)); int old_rm = __fe_dec_getround (); __fe_dec_setround (7); /* Ensure, that rounding mode: "Prepare for shorter precision" is used for exactly these instructions. */ tmp = (((hi * chunk) + mid) * chunk) + low; asm volatile ("" : "+f" (tmp), "+d" (old_rm)); __fe_dec_setround (old_rm); return (_Decimal64) tmp; } static inline _Decimal32 combine_and_truncd32 (_Decimal128 hi, _Decimal128 mid, _Decimal128 low) { _Decimal128 tmp; _Decimal128 chunk = 1e17DL; _Decimal64 tmp64; asm volatile ("" : "+f" (hi), "+f" (mid), "+f" (low), "+f" (chunk)); int old_rm = __fe_dec_getround (); __fe_dec_setround (7); /* Ensure, that rounding mode: "Prepare for shorter precision" is used for exactly these instructions. */ tmp = (((hi * chunk) + mid) * chunk) + low; tmp64 = (_Decimal64) tmp; asm volatile ("" : "+f" (tmp64), "+d" (old_rm)); __fe_dec_setround (old_rm); return (_Decimal32) tmp64; } /* This is a simplified version of frexpd* which instead returns frexpd*(x) * 10^shift. _y is assumed to be 10^shift, but is not used here. */ static inline _Decimal128 getmantandexpd128(_Decimal128 x, int *y, int shift , _Decimal128 __attribute((unused)) _y) { _Decimal128 result; int digits, exponent, set_exponent; /* Extract biased exponent of x. */ asm ("eextr %0,%1\n\t" : "=d" (exponent) : "f" (x)); /* Get number of digits of x. */ asm ("esxtr %0,%1\n\t" : "=d" (digits) : "f" (x)); *y = exponent - 6176 + digits; set_exponent = exponent - digits + shift + 1; /* Set number of digits to result. */ asm ("llgfr %2,%2\n\t" /* exponent must be 64bit! */ "iextr %0,%1,%2\n\t" : "=f" (result) : "f" (x), "d" (set_exponent)); return result; } static inline _Decimal64 getmantandexpd64(_Decimal64 x, int *y, int shift , _Decimal64 __attribute((unused)) _y) { _Decimal64 result; int digits, exponent, set_exponent; /* Extract biased exponent of x. */ asm ("eedtr %0,%1\n\t" : "=d" (exponent) : "f" (x)); /* Get number of digits of x. */ asm ("esdtr %0,%1\n\t" : "=d" (digits) : "f" (x)); *y = exponent - 398 + digits; set_exponent = exponent - digits + shift + 1; /* Set number of digits to result. */ asm ("llgfr %2,%2\n\t" /* exponent must be 64bit! */ "iedtr %0,%1,%2\n\t" : "=f" (result) : "f" (x), "d" (set_exponent)); return result; } static inline _Decimal32 getmantandexpd32(_Decimal32 x, int *y, int shift, _Decimal32 _y) { return getmantandexpd64((_Decimal64) x, y, shift, _y); } /* Convert the entire mantissa to a quadword, and return the exponent in the form .a0...a33 * 10^exp */ #ifdef INT128 static inline INT128 getmantd128(_Decimal128 dq, long *exp) { long e, tmp; INT128 mantissa; _Decimal128 dq2; long long int m, m2; /* Extract biased exponent. */ asm ("eextr %0,%1\n\t" : "=d" (e) : "f" (dq)); asm (/* Set exponent 0 to dq (is 6176). */ "lghi %[tmp],6176\n\t" "iextr %[dq],%[dq],%[tmp]\n\t" /* Set exponent -17 to dq2 (is 6176-17). */ "lghi %[tmp],6159\n\t" "iextr %[dq2],%[dq],%[tmp]\n\t" /* Lop of lower 17 digits of dq (/=10^17). */ "srxt %[dq],%[dq],17\n\t" /* Lop of upper 17 digits of dq2 (*=10^17). */ "slxt %[dq2],%[dq2],17\n\t" : [dq] "+f" (dq), [dq2] "=f" (dq2) ,[tmp] "=d" (tmp) ); /* Convert mantissa of dq to fixed. On 64bit, long long int is stored in one register. (31bit does not support INT128 data-type.) */ asm ("cgxtr %[m],0,%[dq]\n\t" "cgxtr %[m2],0,%[dq2]\n\t" : [m] "=d" (m), [m2] "=d" (m2) : [dq] "f" (dq), [dq2] "f" (dq2) ); mantissa = (1E17L * m) + m2; *exp = e - 6176; return mantissa; } #endif /* Convert the entire mantissa to a doubleword and return the normalized exponent, and the mantissa. */ static inline long long int getmantd64(_Decimal64 dd, long *exp) { long e, tmp; long long int mantissa; /* Extract biased exponent. */ asm ("eedtr %0,%1\n\t" : "=d" (e) : "f" (dd)); /* Set exponent of dd to 0. */ asm ("lghi %1,398\n\t" /* Exponent 0 is biased exponent 398 in 64bit reg. */ "iedtr %0,%0,%1\n\t" : "+f" (dd) ,"=d" (tmp) ); /* Convert mantissa of dd to fixed. */ #ifdef __s390x__ /* On 64bit, long long int is stored in one register. */ asm ("cgdtr %[mant],0,%[dfp]\n\t" : [mant] "=d" (mantissa) : [dfp] "f" (dd)); #else /* On 31bit, long long int is stored in a register pair! Extract mantissa to 64bit tmp register and store it to memory. */ asm ("cgdtr %[tmp],0,%[dfp]\n\t" "stg %[tmp],%[mant]\n\t" /* Store 64bit register to memory. */ : [tmp] "=&d" (tmp) : [dfp] "f" (dd), [mant] "T" (&mantissa) : "memory"); #endif *exp = e - 398; return mantissa; } static inline int getmantd32(_Decimal32 sd, long *exp) { return getmantd64((_Decimal64) sd, exp); } /* Truncate quickly. No need to validate input. */ static inline _Decimal128 fast_truncd128 (_Decimal128 a) { /* Load FP Integer with round toward 0 with inexact-exception. */ asm ("fixtr %0,5,%0,0\n\t" : "+f" (a)); return a; } static inline _Decimal64 fast_truncd64 (_Decimal64 a) { /* Load FP Integer with round toward 0 with inexact-exception. */ asm ("fidtr %0,5,%0,0\n\t" : "+f" (a)); return a; } static inline _Decimal32 fast_truncd32 (_Decimal32 a) { return (_Decimal32) fast_truncd64((_Decimal64) a); } #endif /* _CONVERTHELPERS_ */ libdfp-1.0.17/sysdeps/s390/dfpu/copysignd128.c000066400000000000000000000017631504475242000205760ustar00rootroot00000000000000/* Copies the sign from the second argument to the first Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "copysignd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/copysignd32.c000066400000000000000000000024161504475242000205040ustar00rootroot00000000000000/* Copies the sign from the second argument to the first Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME copysign #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* Copy sign. */ __asm__ ("cpsdr %0,%1,%0" : "+f" (x) : "f" (y)); return x; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/copysignd64.c000066400000000000000000000017621504475242000205140ustar00rootroot00000000000000/* Copies the sign from the second argument to the first Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "copysignd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/extendddtf.c000066400000000000000000000020661504475242000204720ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary long double (128) Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include "dfpacc.h" long double __dpd_extendddtf(_Decimal64 d) { return d; } hidden_def (__dpd_extendddtf) libdfp-1.0.17/sysdeps/s390/dfpu/extendsdtd2.c000066400000000000000000000033051504475242000205660ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal128 __BACKEND_(extendsdtd2) (_Decimal32 in) { /* On s390, this special version is needed, because otherwise the gccs before gcc 5 emits a call to __dpd_extendsdtd2 (this function) for extending _Decimal32 to _Decimal128, which would lead to a Segmentation fault at runtime due to endless recursive calls. This code uses two "load lengthened"-instructions one after another. Starting with gcc 5, these two load-instructions are emitted in the same way and omit this function-call at all. */ _Decimal128 out; _Decimal64 tmp; asm ("ldetr %1,%2,0\n\t" "lxdtr %0,%1,0" : "=f" (out), "=f" (tmp) : "f" (in) ); return out; } hidden_def (__BACKEND_(extendsdtd2)) libdfp-1.0.17/sysdeps/s390/dfpu/extendsdtf.c000066400000000000000000000020661504475242000205110ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary long double (128) Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include "dfpacc.h" long double __dpd_extendsdtf(_Decimal32 d) { return d; } hidden_def (__dpd_extendsdtf) libdfp-1.0.17/sysdeps/s390/dfpu/extendtftd.c000066400000000000000000000020771504475242000205140ustar00rootroot00000000000000/* Handle conversion from binary long double (dual 64bit) to Decimal128 Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include "dfpacc.h" _Decimal128 __dpd_extendtftd(long double d) { return d; } hidden_def (__dpd_extendtftd) libdfp-1.0.17/sysdeps/s390/dfpu/fabsd128.c000066400000000000000000000017551504475242000176570ustar00rootroot00000000000000/* Calculate the absolute value for a _Decimal128 type Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "fabsd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fabsd32.c000066400000000000000000000024641504475242000175670ustar00rootroot00000000000000/* Calculate the absolute value for a _Decimal32 type Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #define FUNCTION_NAME fabs #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { /* Load positive. */ __asm__ ("lpdfr %0,%0" : "+f" (x)); return x; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/fabsd64.c000066400000000000000000000017531504475242000175740ustar00rootroot00000000000000/* Calculate the absolute value for a _Decimal64 type Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "fabsd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fdimd128.c000066400000000000000000000020001504475242000176430ustar00rootroot00000000000000/* Returns the positive difference between the _Decimal128 type arguments Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "fdimd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fdimd32.c000066400000000000000000000030271504475242000175670ustar00rootroot00000000000000/* Returns the positive difference between the _Decimal32 type arguments Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #include #define FUNCTION_NAME fdim #include static DEC_TYPE IEEE_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { if (__builtin_expect (FUNC_D(isnan) (x) || FUNC_D(isnan) (y), 0)) return x + y; return (x <= y) ? 0 : (x - y); } DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE z = IEEE_FUNCTION_NAME (x, y); if (!FUNC_D(__isfinite) (z) && FUNC_D(__isfinite) (x) && FUNC_D(__isfinite) (y)) DFP_ERRNO (ERANGE); return z; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/fdimd64.c000066400000000000000000000017761504475242000176050ustar00rootroot00000000000000/* Returns the positive difference between the _Decimal64 type arguments Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "fdimd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fe_decround.c000066400000000000000000000041041504475242000206110ustar00rootroot00000000000000/* Return current rounding direction. Copyright (C) 2000-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include /* Based on the binary floating point variants contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). */ int __fe_dec_getround (void) { fexcept_t cw; _FPU_GETCW (cw); return (cw & FPC_DFP_RM_MASK) >> 4; } strong_alias(__fe_dec_getround, fe_dec_getround) hidden_def(__fe_dec_getround) int __fe_dec_setround (int round) { /* This currently also allows the extended rounding modes (5, 6 and 7) which are not covered by the standard. Please see fe_decround.c in the root dir for more information. */ if (((round << 4) | FPC_DFP_RM_MASK) != FPC_DFP_RM_MASK) { /* ROUND is not a valid rounding mode. */ return 1; } __asm__ volatile ("llgfr %0,%0 \n\t" "srnmt 0(%0)" : "+a" (round)); return 0; } strong_alias(__fe_dec_setround, fe_dec_setround) hidden_def(__fe_dec_setround) extern int (*__printf_dfp_getround_callback)(void); static void __attribute__ ((constructor))__init_printf_dfp_getround (void) { __printf_dfp_getround_callback = &__fe_dec_getround; } libdfp-1.0.17/sysdeps/s390/dfpu/floord128.c000066400000000000000000000017371504475242000200650ustar00rootroot00000000000000/* Floor function for _Decimal128 types Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "floord32.c" libdfp-1.0.17/sysdeps/s390/dfpu/floord32.c000066400000000000000000000026751504475242000200010ustar00rootroot00000000000000/* Floor function for _Decimal32 types Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME floor #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 _Decimal128 tmp = x; #else _Decimal64 tmp = (_Decimal64) x; #endif /* Round toward -inf without inexact exception. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,11,%0,4" #else "fidtr %0,11,%0,4" #endif : "+f" (tmp)); return (DEC_TYPE) tmp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/floord64.c000066400000000000000000000017351504475242000200020ustar00rootroot00000000000000/* Floor function for _Decimal64 types Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "floord32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fmaxd128.c000066400000000000000000000016521504475242000176730ustar00rootroot00000000000000/* Determine the maximum of two _Decimal128 types Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "fmaxd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fmaxd32.c000066400000000000000000000025031504475242000176010ustar00rootroot00000000000000/* Determine the maximum of two _Decimal32 types Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME fmax #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* If one value is NaN, then return the other value or return NaN if both values are NaN. */ if (FUNC_D(isnan) (x)) return y; else if (FUNC_D(isnan) (y)) return x; return (x > y) ? x : y; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/fmaxd64.c000066400000000000000000000016501504475242000176100ustar00rootroot00000000000000/* Determine the maximum of two _Decimal64 types Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "fmaxd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fmind128.c000066400000000000000000000016521504475242000176710ustar00rootroot00000000000000/* Determine the minimum of two _Decimal128 types Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "fmind32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fmind32.c000066400000000000000000000025031504475242000175770ustar00rootroot00000000000000/* Determine the minimum of two _Decimal32 types Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME fmin #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* If one value is NaN, then return the other value or return NaN if both values are NaN. */ if (FUNC_D(isnan) (x)) return y; else if (FUNC_D(isnan) (y)) return x; return (x < y) ? x : y; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/fmind64.c000066400000000000000000000016501504475242000176060ustar00rootroot00000000000000/* Determine the minimum of two _Decimal64 types Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "fmind32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fpclassifyd128.c000066400000000000000000000017571504475242000211110ustar00rootroot00000000000000/* _Decimal128 fpclassify classification function. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "fpclassifyd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/fpclassifyd32.c000066400000000000000000000041031504475242000210070ustar00rootroot00000000000000/* _Decimal32 fpclassify classification function. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME fpclassify #endif #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int result; /* Test the data class of x in order FP_NORMAL, FP_ZERO, FP_SUBNORMAL, FP_INFINITE, FP_NAN. The most likely case exits early. */ #if _DECIMAL_SIZE == 128 # define INSN_TDC "tdcxt" #elif _DECIMAL_SIZE == 64 # define INSN_TDC "tdcdt" #else # define INSN_TDC "tdcet" #endif __asm__ (INSN_TDC " %1,192 \n\t" "lhi %0,4 \n\t" /* FP_NORMAL */ "jl 1f \n\t" INSN_TDC " %1,3072 \n\t" "lhi %0,2 \n\t" /* FP_ZERO */ "jl 1f \n\t" INSN_TDC " %1,768 \n\t" "lhi %0,3 \n\t" /* FP_SUBNORMAL */ "jl 1f \n\t" INSN_TDC " %1,48 \n\t" "lhi %0,1 \n\t" /* FP_INFINITY */ "jl 1f \n\t" "lhi %0,0 \n\t" /* FP_NAN */ "1:" : "=d" (result) : "f" (x) : "cc"); return result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/fpclassifyd64.c000066400000000000000000000017551504475242000210260ustar00rootroot00000000000000/* _Decimal64 fpclassify classification function. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "fpclassifyd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isfinited128.c000066400000000000000000000016541504475242000205540ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is finite Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "isfinited32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isfinited32.c000066400000000000000000000042201504475242000204560ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is finite Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME isfinite #endif #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int result; /* Returns non-zero if data class is not FP_NAN and not FP_INFINITE. */ __asm__ ("lhi %0,0 \n\t" /* Is not finite. */ /* Is data class zero, subnormal or normal? */ #if _DECIMAL_SIZE == 128 "tdcxt %1,4032 \n\t" #elif _DECIMAL_SIZE == 64 "tdcdt %1,4032 \n\t" #else "tdcet %1,4032 \n\t" #endif "je 1f \n\t" /* Jump away if it is nan or infinite. */ "lhi %0,1 \n\t" /* Is finite. */ "1:" : "=d" (result) : "f" (x) : "cc"); return result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) /* We erroneously published a version of math.h which used 'finite' instead of * 'isfinite' and math.h contained a polymorphic 'isfinite()' function which * inlined calles to 'finited*' so we've created aliases for compatability. */ #define EXTERNAL_FINITE_NAME FUNC_D(finite) #define INTERNAL_FINITE_NAME PASTE(__,EXTERNAL_FINITE_NAME) strong_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FINITE_NAME) strong_alias (INTERNAL_FUNCTION_NAME, INTERNAL_FINITE_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/isfinited64.c000066400000000000000000000016521504475242000204710ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is finite Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "isfinited32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isgreaterd128.c000066400000000000000000000017331504475242000207250ustar00rootroot00000000000000/* Implements > for _Decimal128 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "isgreaterd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isgreaterd32.c000066400000000000000000000024251504475242000206360ustar00rootroot00000000000000/* Implements > for _Decimal32 Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME isgreater #endif #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* The used decimal-floating-point compare instruction does not raise an exception for qNaNs. */ return (x > y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/isgreaterd64.c000066400000000000000000000017311504475242000206420ustar00rootroot00000000000000/* Implements > for _Decimal64 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "isgreaterd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isgreaterequald128.c000066400000000000000000000017411504475242000217540ustar00rootroot00000000000000/* Implements >= for _Decimal128 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "isgreaterequald32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isgreaterequald32.c000066400000000000000000000024341504475242000216660ustar00rootroot00000000000000/* Implements >= for _Decimal32 Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME isgreaterequal #endif #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* The used decimal-floating-point compare instruction does not raise an exception for qNaNs. */ return (x >= y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/isgreaterequald64.c000066400000000000000000000017371504475242000217000ustar00rootroot00000000000000/* Implements >= for _Decimal64 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "isgreaterequald32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isinfd128.c000066400000000000000000000016531504475242000200510ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is infinite Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "isinfd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isinfd32.c000066400000000000000000000035221504475242000177600ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is infinite Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME isinf #endif #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int result; #if _DECIMAL_SIZE == 128 # define INSN_TDC "tdcxt" #elif _DECIMAL_SIZE == 64 # define INSN_TDC "tdcdt" #else # define INSN_TDC "tdcet" #endif __asm__ ("lhi %0,0 \n\t" /* Is not infinite. */ INSN_TDC " %1,48 \n\t" /* Is data class infinite? */ "je 1f \n\t" /* Jump away if it is not infinite. */ INSN_TDC " %1,32 \n\t" /* Is data class positive infinite? */ "lhi %0,1 \n\t" /* Is positive infinite. */ "jl 1f \n\t" /* Jump away if it is positive infinite. */ "lhi %0,-1 \n\t" /* Is negative infinite. */ "1:" : "=d" (result) : "f" (x) : "cc"); return result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/isinfd64.c000066400000000000000000000016511504475242000177660ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is infinite Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "isinfd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/islessd128.c000066400000000000000000000017301504475242000202370ustar00rootroot00000000000000/* Implements < for _Decimal128 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "islessd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/islessd32.c000066400000000000000000000024221504475242000201500ustar00rootroot00000000000000/* Implements < for _Decimal32 Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME isless #endif #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* The used decimal-floating-point compare instruction does not raise an exception for qNaNs. */ return (x < y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/islessd64.c000066400000000000000000000017261504475242000201630ustar00rootroot00000000000000/* Implements < for _Decimal64 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "islessd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/islessequald128.c000066400000000000000000000017361504475242000212750ustar00rootroot00000000000000/* Implements <= for _Decimal128 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "islessequald32.c" libdfp-1.0.17/sysdeps/s390/dfpu/islessequald32.c000066400000000000000000000024311504475242000212000ustar00rootroot00000000000000/* Implements <= for _Decimal32 Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME islessequal #endif #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* The used decimal-floating-point compare instruction does not raise an exception for qNaNs. */ return (x <= y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/islessequald64.c000066400000000000000000000017341504475242000212120ustar00rootroot00000000000000/* Implements <= for _Decimal64 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "islessequald32.c" libdfp-1.0.17/sysdeps/s390/dfpu/islessgreaterd128.c000066400000000000000000000017401504475242000216120ustar00rootroot00000000000000/* Implements <> for _Decimal128 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "islessgreaterd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/islessgreaterd32.c000066400000000000000000000024451504475242000215270ustar00rootroot00000000000000/* Implements <> for _Decimal32 Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME islessgreater #endif #include #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { /* The used decimal-floating-point compare instruction does not raise an exception for qNaNs. */ return (x < y) || (x > y); } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/islessgreaterd64.c000066400000000000000000000017361504475242000215360ustar00rootroot00000000000000/* Implements <> for _Decimal64 Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "islessgreaterd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isnand128.c000066400000000000000000000016461504475242000200530ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is nan Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "isnand32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isnand32.c000066400000000000000000000031241504475242000177560ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is nan Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME isnan #endif #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int result; __asm__ ("lhi %0,1 \n\t" /* Is nan. */ /* Is data class quiet nan, signaling nan? */ #if _DECIMAL_SIZE == 128 "tdcxt %1,15 \n\t" #elif _DECIMAL_SIZE == 64 "tdcdt %1,15 \n\t" #else "tdcet %1,15 \n\t" #endif "jl 1f \n\t" /* Jump away if it is nan. */ "lhi %0,0 \n\t" /* Is not nan. */ "1:" : "=d" (result) : "f" (x) : "cc"); return result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/isnand64.c000066400000000000000000000016441504475242000177700ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is nan Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "isnand32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isnormald128.c000066400000000000000000000016601504475242000205630ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is normalized Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "isnormald32.c" libdfp-1.0.17/sysdeps/s390/dfpu/isnormald32.c000066400000000000000000000030701504475242000204720ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is normalized Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME isnormal #endif #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int result; __asm__ ("lhi %0,0 \n\t" /* Is not normal. */ /* Is data class normal? */ #if _DECIMAL_SIZE == 128 "tdcxt %1,192 \n\t" #elif _DECIMAL_SIZE == 64 "tdcdt %1,192 \n\t" #else "tdcet %1,192 \n\t" #endif "je 1f \n\t" /* Jump away if it is not normal. */ "lhi %0,1 \n\t" /* Is normal. */ "1:" : "=d" (result) : "f" (x) : "cc"); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/isnormald64.c000066400000000000000000000016561504475242000205070ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is normalized Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "isnormald32.c" libdfp-1.0.17/sysdeps/s390/dfpu/issignalingd128.c000066400000000000000000000016701504475242000212470ustar00rootroot00000000000000/* Returns non-zero if the _Decimal128 is a signaling nan Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "issignalingd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/issignalingd32.c000066400000000000000000000030561504475242000211610ustar00rootroot00000000000000/* Returns non-zero if the _Decimal32 is a signaling nan Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME issignaling #endif #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int result; __asm__ ("lhi %0,1 \n\t" /* Is signaling nan. */ /* Is data class signaling nan? */ #if _DECIMAL_SIZE == 128 "tdcxt %1,3 \n\t" #elif _DECIMAL_SIZE == 64 "tdcdt %1,3 \n\t" #else "tdcet %1,3 \n\t" #endif "jl 1f \n\t" /* Jump away if it is signaling nan. */ "lhi %0,0 \n\t" /* Is not signaling nan. */ "1:" : "=d" (result) : "f" (x) : "cc"); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/issignalingd64.c000066400000000000000000000016661504475242000211730ustar00rootroot00000000000000/* Returns non-zero if the _Decimal64 is a signaling nan Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "issignalingd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/libdfp-test-ulps000066400000000000000000000005741504475242000213200ustar00rootroot00000000000000test cos decimal128 0 decimal32 0 decimal64 0 test acos decimal128 1 decimal32 0 decimal64 0 test sin decimal128 0 decimal32 0 decimal64 0 test log decimal128 0 decimal32 0 decimal64 0 test log10 decimal128 0 decimal32 0 decimal64 0 test log1p decimal128 0 decimal32 1 decimal64 0 test exp decimal128 0 decimal32 0 decimal64 3 test pow decimal128 0 decimal32 0 decimal64 1 libdfp-1.0.17/sysdeps/s390/dfpu/llquantexpd128.c000066400000000000000000000020031504475242000211240ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument as long long int. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "llquantexpd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/llquantexpd32.c000066400000000000000000000027261504475242000210520ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument as long long int. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #define FUNCTION_NAME llquantexp #include #include long long int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int exp = FUNC_D(getexp)(x); int bias_exp = exp + DECIMAL_BIAS; if (bias_exp < 0 && bias_exp >= -3) { /* -1 = Infinity -2 = NaN -3 = SNaN */ DFP_ERRNO (EDOM); return LLONG_MIN; } return exp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/llquantexpd64.c000066400000000000000000000020021504475242000210420ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument as long long int. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "llquantexpd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/llrintd128.c000066400000000000000000000017451504475242000202470ustar00rootroot00000000000000/* Rounds to the nearest long long int value Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "llrintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/llrintd32.c000066400000000000000000000021461504475242000201550ustar00rootroot00000000000000/* Rounds to the nearest long long int value Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #define FUNCTION_NAME llrint #define RET_TYPE long long int #define RET_TYPE_MIN_VALUE LLONG_MIN #define RET_TYPE_MAX_VALUE LLONG_MAX #include "rintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/llrintd64.c000066400000000000000000000017441504475242000201650ustar00rootroot00000000000000/* Rounds to the nearest long long int value Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "llrintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/llroundd128.c000066400000000000000000000017751504475242000204250ustar00rootroot00000000000000/* Rounds to the nearest long long int value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "llroundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/llroundd32.c000066400000000000000000000021771504475242000203340ustar00rootroot00000000000000/* Rounds to the nearest long long int value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #define FUNCTION_NAME llround #define RET_TYPE long long int #define RET_TYPE_MIN_VALUE LLONG_MIN #define RET_TYPE_MAX_VALUE LLONG_MAX #include "roundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/llroundd64.c000066400000000000000000000017741504475242000203430ustar00rootroot00000000000000/* Rounds to the nearest long long int value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "llroundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/lrintd128.c000066400000000000000000000017371504475242000200740ustar00rootroot00000000000000/* Rounds to the nearest long int value Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "lrintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/lrintd32.c000066400000000000000000000021311504475242000177730ustar00rootroot00000000000000/* Rounds to the nearest long int value Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #define FUNCTION_NAME lrint #define RET_TYPE long int #define RET_TYPE_MIN_VALUE LONG_MIN #define RET_TYPE_MAX_VALUE LONG_MAX #include "rintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/lrintd64.c000066400000000000000000000017361504475242000200120ustar00rootroot00000000000000/* Rounds to the nearest long int value Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "lrintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/lroundd128.c000066400000000000000000000017671504475242000202520ustar00rootroot00000000000000/* Rounds to the nearest long int value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "lroundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/lroundd32.c000066400000000000000000000021621504475242000201520ustar00rootroot00000000000000/* Rounds to the nearest long int value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #define FUNCTION_NAME lround #define RET_TYPE long int #define RET_TYPE_MIN_VALUE LONG_MIN #define RET_TYPE_MAX_VALUE LONG_MAX #include "roundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/lroundd64.c000066400000000000000000000017661504475242000201700ustar00rootroot00000000000000/* Rounds to the nearest long int value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "lroundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/nearbyintd128.c000066400000000000000000000017501504475242000207320ustar00rootroot00000000000000/* _Decimal128 nearbyintd128 implementation. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "nearbyintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/nearbyintd32.c000066400000000000000000000027331504475242000206460ustar00rootroot00000000000000/* _Decimal32 nearbyintd32 implementation. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME nearbyint #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 _Decimal128 tmp = x; #else _Decimal64 tmp = (_Decimal64) x; #endif /* Round according current dfp rounding mode without inexact exception. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,0,%0,4" #else "fidtr %0,0,%0,4" #endif : "+f" (tmp)); return (DEC_TYPE) tmp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/nearbyintd64.c000066400000000000000000000017451504475242000206550ustar00rootroot00000000000000/* _Decimal64 nearbyintd64 implementation. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "nearbyintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/numdigits.h000066400000000000000000000123631504475242000203520ustar00rootroot00000000000000/* Number of digits functions, optimized for S/390 z9-ec. Copyright (C) 2008 IBM Corporation. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* Alow this file to be included more than once, so don't use the usual include guards. */ #define NUMDIGITS_SUPPORT 1 #ifndef DEC_TYPE #error DEC_TYPE must be declared #endif #ifndef _DECIMAL_SIZE #error _DECIMAL_SIZE must be declared #endif #include "dpd-private.h" #undef DECIMAL_BIAS #if _DECIMAL_SIZE == 32 // DECIMAL32 gets widened to DECIMAL64, so it ought to use DECIMAL64 bias # define DECIMAL_BIAS (101+297) #elif _DECIMAL_SIZE == 64 # define DECIMAL_BIAS 398 #elif _DECIMAL_SIZE == 128 # define DECIMAL_BIAS 6176 #endif #ifndef PASTE # define PASTE(x,y) PASTE2(x,y) # define PASTE2(x,y) x##y #endif #ifndef FUNC_D # define FUNC_D(x) PASTE(x,PASTE(d,_DECIMAL_SIZE)) #endif static inline int FUNC_D (getexp) (DEC_TYPE x) { int result; #if _DECIMAL_SIZE == 32 _Decimal64 tmp = (_Decimal64)x; #elif _DECIMAL_SIZE == 64 _Decimal64 tmp = x; #elif _DECIMAL_SIZE == 128 register _Decimal128 tmp asm ("f0") = x; #endif asm ( #if _DECIMAL_SIZE == 128 "eextr %0,%1" #else /* 32 and 64 bit */ "eedtr %0,%1" #endif : "=d"(result) : "f"(tmp)); return result - DECIMAL_BIAS; } static inline DEC_TYPE FUNC_D (setexp) (DEC_TYPE x, int exp) { int biased_exp = exp + DECIMAL_BIAS; #if _DECIMAL_SIZE == 32 _Decimal64 tmp = (_Decimal64)x; #elif _DECIMAL_SIZE == 128 register DEC_TYPE tmp asm ("f0") = x; #else DEC_TYPE tmp = x; #endif asm ( "llgfr %1,%1 \n\t" #if _DECIMAL_SIZE == 128 "iextr %0,%0,%1" #else "iedtr %0,%0,%1" #endif : "+f" (tmp), "+d" (biased_exp)); #if _DECIMAL_SIZE == 32 return (_Decimal32)tmp; #else return tmp; #endif } static inline int FUNC_D (numdigits) (DEC_TYPE x) { int result; #if _DECIMAL_SIZE == 128 register DEC_TYPE tmp asm ("f0") = x; #elif _DECIMAL_SIZE == 32 _Decimal64 tmp = (_Decimal64)x; #else DEC_TYPE tmp = x; #endif asm ( #if _DECIMAL_SIZE == 128 "esxtr %0,%1" #else /* 32 and 64 bit */ "esdtr %0,%1" #endif : "=d"(result) : "f"(tmp)); /* The Power hardware implementation returns 1 even for a zero mantissa. The software implementation in soft-dfp mimics that behaviour. The S/390 instructions return 0 for zero values. So we have to adjust this here in order to match the behaviour of the existing functions. */ return (result == 0 ? 1 : result); } static DEC_TYPE __attribute__((unused)) FUNC_D (left_justify) (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 # define LJ_INSN_REROUND "rrxtr" # define LJ_INSN_EXTRACT_EXPONENT "eextr" # define LJ_INSN_INSERT_EXPONENT "iextr" # define LJ_INSN_QUANTIZE "qaxtr" /* The following magic numbers result from the precision of the data type minus 1. */ # define LJ_ADJUST_EXPONENT 33 register DEC_TYPE tmp asm ("f0") = x; register DEC_TYPE rnd asm ("f4"); #else # define LJ_INSN_REROUND "rrdtr" # define LJ_INSN_EXTRACT_EXPONENT "eedtr" # define LJ_INSN_INSERT_EXPONENT "iedtr" # define LJ_INSN_QUANTIZE "qadtr" # if _DECIMAL_SIZE == 64 # define LJ_ADJUST_EXPONENT 15 DEC_TYPE tmp = x; DEC_TYPE rnd; # else # define LJ_ADJUST_EXPONENT 6 _Decimal64 tmp = (_Decimal64)x; _Decimal64 rnd; # endif #endif /* Note: The extract / insert biased exponent instructions work with a 64bit signed register. But we just use a 32bit signed register as on 31bit a 64bit datatype would be stored in a pair of two 32bit registers. The biased exponent is always within a 32bit value. This also applies for the negative values for NaN and infinity. */ int exp; asm (LJ_INSN_REROUND " %0,%1,%2,5\n\t" : "=f"(rnd) : "f"(tmp), "d"(1)); asm (LJ_INSN_EXTRACT_EXPONENT " %0,%1\n\t" : "=d"(exp) : "f"(rnd)); /* Check for NaN and infinity, The extract biased exponent instruction returns < 0 for qnan, snan, and inf. */ if (exp >= LJ_ADJUST_EXPONENT) exp -= LJ_ADJUST_EXPONENT; else if (exp < 0) return x; else exp = 0; asm ("lgfr %1,%1\n\t" /* Extend 32bit to 64bit signed register. */ LJ_INSN_INSERT_EXPONENT " %0,%0,%1\n\t" : "+f"(rnd), "+d"(exp)); asm (LJ_INSN_QUANTIZE " %0,%1,%0,5\n\t" : "+f"(rnd) : "f"(tmp)); #if _DECIMAL_SIZE == 32 return (_Decimal32)rnd; #else return rnd; #endif #undef LJ_INSN_REROUND #undef LJ_INSN_EXTRACT_EXPONENT #undef LJ_INSN_INSERT_EXPONENT #undef LJ_INSN_QUANTIZE #undef LJ_ADJUST_EXPONENT } libdfp-1.0.17/sysdeps/s390/dfpu/quantized128.c000066400000000000000000000017101504475242000205730ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "quantized32.c" libdfp-1.0.17/sysdeps/s390/dfpu/quantized32.c000066400000000000000000000042141504475242000205070ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #define FUNCTION_NAME quantize #include #if _DECIMAL_SIZE == 32 # undef _DECIMAL_SIZE # define _DECIMAL_SIZE 64 /* As we use _Decimal64 instructions for _Decimal32 inputs, we need to check for overflow by calling numdigitsd64 which is defined in numdigits.h. */ # include # undef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { #if _DECIMAL_SIZE == 128 _Decimal128 result; __asm__ ("qaxtr %0,%1,%2,0;" : "=f" (result): "f" ((_Decimal128) x), "f" ((_Decimal128) y)); #else /* _DECIMAL_SIZE == 64 || 32 */ /* Always use _Decimal64 asm insns for _Decimal32 since there are no _Decimal32 insns. */ _Decimal64 result; __asm__ ("qadtr %0,%1,%2,0;" : "=f" (result): "f" ((_Decimal64) x), "f" ((_Decimal64) y)); # if _DECIMAL_SIZE == 32 /* Verify if the result don't causes overflow when converted to _Decimal32. If yes return NaN. */ if (numdigitsd64 (result) > 7) return (_Decimal32) DEC_NAN; # endif #endif return (DEC_TYPE) result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/quantized64.c000066400000000000000000000017071504475242000205200ustar00rootroot00000000000000/* Set the exponent of x to the exp of y, trying to preserve the value of x Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "quantized32.c" libdfp-1.0.17/sysdeps/s390/dfpu/quantumd128.c000066400000000000000000000017571504475242000204400ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "quantumd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/quantumd32.c000066400000000000000000000037021504475242000203420ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME quantum #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { long long exp; #if _DECIMAL_SIZE == 128 _Decimal128 tmp; _Decimal128 ref = 1e-6176DL; #else _Decimal64 tmp; _Decimal64 ref = 1e-398DD; #endif #if _DECIMAL_SIZE == 32 /* Preserve sNaN on extending to _Decimal64. */ __asm__ ("ldetr %0,%1,8" : "=f" (tmp) : "f" (x)); # else tmp = x; #endif /* Extract the biased exponent of tmp and produce the result by inserting this exponent to ref. */ __asm__ ( #if _DECIMAL_SIZE == 128 "eextr %1,%0\n\t" "iextr %0,%2,%1" #else "eedtr %1,%0\n\t" "iedtr %0,%2,%1" #endif : "+f" (tmp), "=d" (exp) : "f" (ref)); #if _DECIMAL_SIZE == 32 _Decimal32 tmp32; /* Preserve sNaN on shortening to _Decimal32. */ __asm__ ("ledtr %0,0,%1,8" : "=f" (tmp32) : "f" (tmp)); return tmp32; #else return tmp; #endif } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/quantumd64.c000066400000000000000000000017561504475242000203560ustar00rootroot00000000000000/* Compute the quantum exponend of a finite argument. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "quantumd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/rintd128.c000066400000000000000000000017361504475242000177170ustar00rootroot00000000000000/* _Decimal128 rintd128 implementation. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "rintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/rintd32.c000066400000000000000000000043011504475242000176200ustar00rootroot00000000000000/* _Decimal32 rintd32 implementation. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME rint #endif #include #ifndef RET_TYPE # define RET_TYPE DEC_TYPE #endif RET_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 _Decimal128 tmp = x; #else _Decimal64 tmp = (_Decimal64) x; #endif #if defined RET_TYPE_MIN_VALUE && defined RET_TYPE_MAX_VALUE /* Round according current dfp mode without inexact exception as we need to do the out of bounds check first. If the invalid exception is raised, the inexact exception is not allowed to be raised. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,0,%0,4" #else "fidtr %0,0,%0,4" #endif : "+f" (tmp)); /* Check, if value is out of bounds in target format. */ if (__builtin_expect (tmp < RET_TYPE_MIN_VALUE || tmp > RET_TYPE_MAX_VALUE, 0)) { DFP_EXCEPT (FE_INVALID); return (tmp < RET_TYPE_MIN_VALUE) ? RET_TYPE_MIN_VALUE : RET_TYPE_MAX_VALUE; } tmp = x; #endif /* Round according current dfp mode with inexact exception. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,0,%0,0" #else "fidtr %0,0,%0,0" #endif : "+f" (tmp)); return (RET_TYPE) tmp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/rintd64.c000066400000000000000000000017331504475242000176330ustar00rootroot00000000000000/* _Decimal64 rintd64 implementation. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "rintd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/roundd128.c000066400000000000000000000017651504475242000200740ustar00rootroot00000000000000/* Rounds to the nearest integer value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "roundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/roundd32.c000066400000000000000000000034571504475242000200060ustar00rootroot00000000000000/* Rounds to the nearest integer value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #ifndef FUNCTION_NAME # define FUNCTION_NAME round #endif #include #ifndef RET_TYPE # define RET_TYPE DEC_TYPE #endif RET_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 _Decimal128 tmp = x; #else _Decimal64 tmp = (_Decimal64) x; #endif #if defined RET_TYPE_MIN_VALUE && defined RET_TYPE_MAX_VALUE /* Check, if value is out of bounds in target format. */ if (tmp < RET_TYPE_MIN_VALUE || tmp > RET_TYPE_MAX_VALUE) { DFP_EXCEPT (FE_INVALID); } #endif /* Round toward to nearest with ties away from 0 without inexact exception. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,12,%0,4" #else "fidtr %0,12,%0,4" #endif : "+f" (tmp)); return (RET_TYPE) tmp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/roundd64.c000066400000000000000000000017641504475242000200120ustar00rootroot00000000000000/* Rounds to the nearest integer value, ignores rounding mode Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "roundd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/roundevend128.c000066400000000000000000000020271504475242000207420ustar00rootroot00000000000000/* Round a _Decimal64 type to the nearest integer value, rounding halfway cases to even. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "roundevend32.c" libdfp-1.0.17/sysdeps/s390/dfpu/roundevend32.c000066400000000000000000000030141504475242000206510ustar00rootroot00000000000000/* Round a _Decimal32 type to the nearest integer value, rounding halfway cases to even. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME roundeven #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 _Decimal128 tmp = x; #else _Decimal64 tmp = (_Decimal64) x; #endif /* Round toward to nearest with ties to even without inexact exception. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,8,%0,4" #else "fidtr %0,8,%0,4" #endif : "+f" (tmp)); return (DEC_TYPE) tmp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/roundevend64.c000066400000000000000000000020261504475242000206600ustar00rootroot00000000000000/* Round a _Decimal64 type to the nearest integer value, rounding halfway cases to even. Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "roundevend32.c" libdfp-1.0.17/sysdeps/s390/dfpu/samequantumd128.c000066400000000000000000000017571504475242000213060ustar00rootroot00000000000000/* Returns true if x and y have the same exponent Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "samequantumd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/samequantumd32.c000066400000000000000000000032571504475242000212150ustar00rootroot00000000000000/* Returns true if x and y have the same exponent Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME samequantum #include _Bool INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { int result; #if _DECIMAL_SIZE == 128 _Decimal128 tmpx = x; _Decimal128 tmpy = y; #else _Decimal64 tmpx = (_Decimal64) x; _Decimal64 tmpy = (_Decimal64) y; #endif __asm__ ("lhi %0,1 \n\t" /* Same exponent. */ #if _DECIMAL_SIZE == 128 "cextr %1,%2 \n\t" #else "cedtr %1,%2 \n\t" #endif "je 1f \n\t" /* Jump away if exponents are equal. */ "lhi %0,0 \n\t" /* Not same exponent. */ "1:" : "=d" (result) : "f" (tmpx), "f" (tmpy) : "cc"); return result; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/samequantumd64.c000066400000000000000000000017561504475242000212240ustar00rootroot00000000000000/* Returns true if x and y have the same exponent Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "samequantumd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/signbitd128.c000066400000000000000000000016511504475242000203760ustar00rootroot00000000000000/* Returns non-zero if _Decimal128 is negative Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "signbitd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/signbitd32.c000066400000000000000000000031471504475242000203120ustar00rootroot00000000000000/* Returns non-zero if _Decimal32 is negative Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #include #ifndef FUNCTION_NAME # define FUNCTION_NAME signbit #endif #include int INTERNAL_FUNCTION_NAME (DEC_TYPE x) { int result; __asm__ ("lhi %0,1 \n\t" /* Is negative. */ /* Is -zero, -subnormal, -inf, -nan? */ #if _DECIMAL_SIZE == 128 "tdcxt %1,1365 \n\t" #elif _DECIMAL_SIZE == 64 "tdcdt %1,1365 \n\t" #else "tdcet %1,1365 \n\t" #endif "jl 1f \n\t" /* Jump away if it is negative. */ "lhi %0,0 \n\t" /* Is positive. */ "1:" : "=d" (result) : "f" (x) : "cc"); return result; } hidden_def (INTERNAL_FUNCTION_NAME) weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/signbitd64.c000066400000000000000000000016471504475242000203220ustar00rootroot00000000000000/* Returns non-zero if _Decimal64 is negative Copyright (C) 2018 Free Software Foundation, Inc. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "signbitd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/truncd128.c000066400000000000000000000020031504475242000200620ustar00rootroot00000000000000/* Round a _Decimal128 type to the nearest but <= argument (absolute value) Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #include "truncd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/truncd32.c000066400000000000000000000027341504475242000200070ustar00rootroot00000000000000/* Round a _Decimal32 type to the nearest but <= argument (absolute value) Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 #endif #include #define FUNCTION_NAME trunc #include DEC_TYPE INTERNAL_FUNCTION_NAME (DEC_TYPE x) { #if _DECIMAL_SIZE == 128 _Decimal128 tmp = x; #else _Decimal64 tmp = (_Decimal64) x; #endif /* Round toward 0 without inexact exception. */ __asm__ ( #if _DECIMAL_SIZE == 128 "fixtr %0,9,%0,4" #else "fidtr %0,9,%0,4" #endif : "+f" (tmp)); return (DEC_TYPE) tmp; } weak_alias (INTERNAL_FUNCTION_NAME, EXTERNAL_FUNCTION_NAME) libdfp-1.0.17/sysdeps/s390/dfpu/truncd64.c000066400000000000000000000020011504475242000177770ustar00rootroot00000000000000/* Round a _Decimal64 type to the nearest but <= argument (absolute value) Copyright (C) 2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #include "truncd32.c" libdfp-1.0.17/sysdeps/s390/dfpu/trunctdsd2.c000066400000000000000000000041311504475242000204300ustar00rootroot00000000000000/* Decimal Floating Point function intended to override the libgcc version. Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include _Decimal32 __BACKEND_(trunctdsd2) (_Decimal128 in) { /* On s390, this special version with first a cast to _Decimal64 and afterwards to _Decimal32 is needed, because otherwise the gccs before gcc 5 emits a call to __dpd_trunctdsd2 (this function), which would lead to a Segmentation fault at runtime due to endless recursive calls. This code uses two "load rounded"-instructions one after another. Starting with gcc 5, gcc emits two load-rounded-instructions and omit this function-call at all. But it uses the false rounding mode "according to the current DFP rounding mode" for the d128 -> d64 conversion! Starting with gcc 6, gcc emits those instructions and the correct rounding mode "Round to prepare for shorter precision" is used for the d128 -> d64 conversion! */ _Decimal32 out; _Decimal64 tmp; asm ("ldxtr %1,15,%2,0\n\t" /* Load rounded: d128 -> d64 in "Round to prepare for shorter precision. " rouding-mode. */ "ledtr %0,0,%1,0" : "=f" (out), "=&f" (tmp) : "f" (in) ); return out; } hidden_def (__BACKEND_(trunctdsd2)) libdfp-1.0.17/sysdeps/s390/dfpu/trunctdtf.c000066400000000000000000000020751504475242000203560ustar00rootroot00000000000000/* Handle conversion from Decimal128 to binary long double (dual 64bit) Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include "dfpacc.h" long double __dpd_trunctdtf(_Decimal128 d) { return d; } hidden_def (__dpd_trunctdtf) libdfp-1.0.17/sysdeps/s390/dfpu/trunctfdd.c000066400000000000000000000020641504475242000203340ustar00rootroot00000000000000/* Handle conversion from binary long double (128) to Decimal64 Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include "dfpacc.h" _Decimal64 __dpd_trunctfdd(long double d) { return d; } hidden_def (__dpd_trunctfdd) libdfp-1.0.17/sysdeps/s390/dfpu/trunctfsd.c000066400000000000000000000020641504475242000203530ustar00rootroot00000000000000/* Handle conversion from binary long double (128) to Decimal32 Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include "dfpacc.h" _Decimal32 __dpd_trunctfsd(long double d) { return d; } hidden_def (__dpd_trunctfsd) libdfp-1.0.17/sysdeps/s390/fenv_libdfp.h000066400000000000000000000032411504475242000176620ustar00rootroot00000000000000/* s390 fenv macros. Copyright (C) 2000-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Andreas Krebbel The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _FENV_LIBDFP_H #define _FENV_LIBDFP_H 1 /* Based on the binary floating point variants contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). */ #include /* Definitions from asm/s390-regs-common.h that are needed in glibc. */ #define FPC_EXCEPTION_MASK 0xF8000000 #define FPC_FLAGS_MASK 0x00F80000 #define FPC_DXC_MASK 0x0000FF00 #define FPC_RM_MASK 0x00000003 #define FPC_DFP_RM_MASK 0x00000070 #define FPC_VALID_MASK ((FPC_EXCEPTION_MASK|FPC_FLAGS_MASK| \ FPC_DXC_MASK|FPC_BFP_RM_MASK|FPC_DFP_RM_MASK)) #define FPC_EXCEPTION_MASK_SHIFT 24 #define FPC_FLAGS_SHIFT 16 #define FPC_DXC_SHIFT 8 #define FPC_NOT_FPU_EXCEPTION 0x300 #endif /* _FENV_LIBDFP_H */ libdfp-1.0.17/sysdeps/s390/localplt.data000066400000000000000000000011621504475242000177000ustar00rootroot00000000000000# See scripts/check-localplt.awk for how this file is processed. # # For s390: register_printf_dfp is also allowed # as R_390_GLOB_DAT in section .rela.dyn # instead of R_390_JMP_SLOT in section .rela.plt. # In the former case register_printf_dfp is called via function-pointer # loaded from GOT, which also can be relocated by dynamic linker. # A plt-stub is not generated. # This relocation is done at load-time (and lazy-binding is not possible)! # 'gcc -O2' leads to R_390_GLOB_DAT, whereas # 'gcc -O0' or 'gcc -O2 -fno-optimize-sibling-calls' leads to R_390_JMP_SLOT. libdfp.so: register_printf_dfp + RELA R_390_GLOB_DAT libdfp-1.0.17/sysdeps/s390/nodfpu/000077500000000000000000000000001504475242000165265ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/s390/nodfpu/Implies000066400000000000000000000000251504475242000200500ustar00rootroot00000000000000sysdeps/soft-dfp/dpd libdfp-1.0.17/sysdeps/s390/nodfpu/Makefile000066400000000000000000000000401504475242000201600ustar00rootroot00000000000000sysdeps-CFLAGS += -mno-hard-dfp libdfp-1.0.17/sysdeps/s390/s390-32/000077500000000000000000000000001504475242000161535ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/s390/s390-32/Implies000066400000000000000000000000241504475242000174740ustar00rootroot00000000000000sysdeps/wordsize-32 libdfp-1.0.17/sysdeps/s390/s390-32/libdfp.abilist000066400000000000000000000127771504475242000210020ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __dpd_adddd3 F __dpd_addsd3 F __dpd_addtd3 F __dpd_divdd3 F __dpd_divsd3 F __dpd_divtd3 F __dpd_eqdd2 F __dpd_eqsd2 F __dpd_eqtd2 F __dpd_extendddtd2 F __dpd_extendddtf F __dpd_extenddfdd F __dpd_extenddftd F __dpd_extendsddd2 F __dpd_extendsddf F __dpd_extendsdtd2 F __dpd_extendsdtf F __dpd_extendsfdd F __dpd_extendsfsd F __dpd_extendsftd F __dpd_extendtftd F __dpd_fixdddi F __dpd_fixddsi F __dpd_fixsddi F __dpd_fixsdsi F __dpd_fixtddi F __dpd_fixtdsi F __dpd_fixunsdddi F __dpd_fixunsddsi F __dpd_fixunssddi F __dpd_fixunssdsi F __dpd_fixunstddi F __dpd_fixunstdsi F __dpd_floatdidd F __dpd_floatdisd F __dpd_floatditd F __dpd_floatsidd F __dpd_floatsisd F __dpd_floatsitd F __dpd_floatunsdidd F __dpd_floatunsdisd F __dpd_floatunsditd F __dpd_floatunssidd F __dpd_floatunssisd F __dpd_floatunssitd F __dpd_gedd2 F __dpd_gesd2 F __dpd_getd2 F __dpd_gtdd2 F __dpd_gtsd2 F __dpd_gttd2 F __dpd_ledd2 F __dpd_lesd2 F __dpd_letd2 F __dpd_ltdd2 F __dpd_ltsd2 F __dpd_lttd2 F __dpd_muldd3 F __dpd_mulsd3 F __dpd_multd3 F __dpd_nedd2 F __dpd_nesd2 F __dpd_netd2 F __dpd_subdd3 F __dpd_subsd3 F __dpd_subtd3 F __dpd_truncdddf F __dpd_truncddsd2 F __dpd_truncddsf F __dpd_truncdfsd F __dpd_truncsdsf F __dpd_trunctddd2 F __dpd_trunctddf F __dpd_trunctdsd2 F __dpd_trunctdsf F __dpd_trunctdtf F __dpd_trunctfdd F __dpd_trunctfsd F __dpd_unorddd2 F __dpd_unordsd2 F __dpd_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A LIBDFP_1.0.15 LIBDFP_1.0.15 A fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/sysdeps/s390/s390-64/000077500000000000000000000000001504475242000161605ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/s390/s390-64/Implies000066400000000000000000000000241504475242000175010ustar00rootroot00000000000000sysdeps/wordsize-64 libdfp-1.0.17/sysdeps/s390/s390-64/libdfp.abilist000066400000000000000000000133511504475242000207740ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __dpd_adddd3 F __dpd_addsd3 F __dpd_addtd3 F __dpd_divdd3 F __dpd_divsd3 F __dpd_divtd3 F __dpd_eqdd2 F __dpd_eqsd2 F __dpd_eqtd2 F __dpd_extendddtd2 F __dpd_extendddtf F __dpd_extenddfdd F __dpd_extenddftd F __dpd_extendsddd2 F __dpd_extendsddf F __dpd_extendsdtd2 F __dpd_extendsdtf F __dpd_extendsfdd F __dpd_extendsfsd F __dpd_extendsftd F __dpd_extendtftd F __dpd_fixdddi F __dpd_fixddsi F __dpd_fixsddi F __dpd_fixsdsi F __dpd_fixtddi F __dpd_fixtdsi F __dpd_fixunsdddi F __dpd_fixunsddsi F __dpd_fixunssddi F __dpd_fixunssdsi F __dpd_fixunstddi F __dpd_fixunstdsi F __dpd_floatdidd F __dpd_floatdisd F __dpd_floatditd F __dpd_floatsidd F __dpd_floatsisd F __dpd_floatsitd F __dpd_floatunsdidd F __dpd_floatunsdisd F __dpd_floatunsditd F __dpd_floatunssidd F __dpd_floatunssisd F __dpd_floatunssitd F __dpd_gedd2 F __dpd_gesd2 F __dpd_getd2 F __dpd_gtdd2 F __dpd_gtsd2 F __dpd_gttd2 F __dpd_ledd2 F __dpd_lesd2 F __dpd_letd2 F __dpd_ltdd2 F __dpd_ltsd2 F __dpd_lttd2 F __dpd_muldd3 F __dpd_mulsd3 F __dpd_multd3 F __dpd_nedd2 F __dpd_nesd2 F __dpd_netd2 F __dpd_subdd3 F __dpd_subsd3 F __dpd_subtd3 F __dpd_truncdddf F __dpd_truncddsd2 F __dpd_truncddsf F __dpd_truncdfsd F __dpd_truncsdsf F __dpd_trunctddd2 F __dpd_trunctddf F __dpd_trunctdsd2 F __dpd_trunctdsf F __dpd_trunctdtf F __dpd_trunctfdd F __dpd_trunctfsd F __dpd_unorddd2 F __dpd_unordsd2 F __dpd_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A __dpd_fixddti F __dpd_fixsdti F __dpd_fixtdti F __dpd_fixunsddti F __dpd_fixunssdti F __dpd_fixunstdti F __dpd_floattidd F __dpd_floattisd F __dpd_floattitd F __dpd_floatunstidd F __dpd_floatunstisd F __dpd_floatunstitd F LIBDFP_1.0.15 LIBDFP_1.0.15 A fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/sysdeps/soft-dfp/000077500000000000000000000000001504475242000162575ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/soft-dfp/Makefile000066400000000000000000000002261504475242000177170ustar00rootroot00000000000000# base-math/Makefile defines all of the arithmetic, conversion, and comparison # functions. libdfp_files += decroundtls \ candtruncd32 candtruncd64 libdfp-1.0.17/sysdeps/soft-dfp/README000066400000000000000000000012311504475242000171340ustar00rootroot00000000000000This directory is for anything that is soft-dfp specific, like rounding mode. This directory also contains software emulated implementations of the arithmetic, conversion, and classification routines. These are normally provided by libgcc but that library lacks floating point exception and rounding mode support so we provide an override here. The __dpd_ and __bid_ prefixed symbols are added to the 'Versions' scripts in the dpd/ and bid/ directories respectively. The Makefile only contains the files which aren't part of the base-math/ emulation, i.e. the binary->decimal and decimal->binary 'extend' and 'trunc' functions. Everything else is an override. libdfp-1.0.17/sysdeps/soft-dfp/adddd3.c000066400000000000000000000021721504475242000175500ustar00rootroot00000000000000/* _Decimal64 addition for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME adddd3 #include #include "addsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/addsd3.c000066400000000000000000000044451504475242000175740ustar00rootroot00000000000000/* _Decimal32 addition for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME addsd3 #endif #include #include #include #define FUNCTION_NAME add #include #include "dfpacc.h" #include "mapround.h" DEC_TYPE PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE result; decNumber dn_x, dn_y, dn_result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); context.round = __dn_getround(); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); decNumberAdd(&dn_result, &dn_x, &dn_y, &context); if (context.status != 0) { int ieee_flags = 0; if (context.status & DEC_IEEE_854_Division_by_zero) ieee_flags |= FE_DIVBYZERO; if (context.status & DEC_IEEE_854_Inexact) ieee_flags |= FE_INEXACT; if (context.status & DEC_IEEE_854_Invalid_operation) ieee_flags |= FE_INVALID; if (context.status & DEC_IEEE_854_Overflow) ieee_flags |= FE_OVERFLOW; if (context.status & DEC_IEEE_854_Underflow) ieee_flags |= FE_UNDERFLOW; if (ieee_flags != 0) feraiseexcept (ieee_flags); } FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/addtd3.c000066400000000000000000000021751504475242000175730ustar00rootroot00000000000000/* _Decimal128 addition for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME addtd3 #include #include "addsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/bid/000077500000000000000000000000001504475242000170155ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/soft-dfp/bid/Implies000066400000000000000000000000211504475242000203330ustar00rootroot00000000000000sysdeps/soft-dfp libdfp-1.0.17/sysdeps/soft-dfp/bid/Makefile000066400000000000000000000020061504475242000204530ustar00rootroot00000000000000# Copyright (C) 2015 Free Software Foundation, Inc. # # This file is part of the Decimal Floating Point C Library. # # The Decimal Floating Point C Library is free software; you can # redistribute it and/or modify it under the terms of the GNU Lesser # General Public License version 2.1. # # The Decimal Floating Point C 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 version 2.1 for more details. # # You should have received a copy of the GNU Lesser General Public # License version 2.1 along with the Decimal Floating Point C Library; # if not, write to the Free Software Foundation, Inc., 51 Franklin # Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Please see libdfp/COPYING.txt for more information. */ # Empty Makefile so that Versions file is picked up by the build machinery # only searches for Versions files where it finds Makefiles. libdfp-1.0.17/sysdeps/soft-dfp/bid/Versions000066400000000000000000000004121504475242000205450ustar00rootroot00000000000000libdfp { LIBDFP_1.0.0 { __bid_extendsfsd; __bid_extendsddf; __bid_extendsfdd; __bid_extenddfdd; __bid_extendsftd; __bid_extenddftd; __bid_truncsdsf; __bid_truncdfsd; __bid_truncddsf; __bid_truncdddf; __bid_trunctdsf; __bid_trunctddf; } } libdfp-1.0.17/sysdeps/soft-dfp/bid/fe_decround.c000066400000000000000000000042641504475242000214440ustar00rootroot00000000000000/* Decimal Float fe_dec_getround and fe_dec_setround definitions. Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include #include "bid_conf.h" #include "bid_functions.h" #include "bid_gcc_intrinsics.h" /* The default uses decimal rounding mode stored in TLS. This file should be * overridden in the sysdeps/powerpc/dfpu if hardware supports decimal * rounding mode. */ static int rndtobid[] = { ROUNDING_TO_NEAREST, ROUNDING_TO_ZERO, ROUNDING_UP, ROUNDING_DOWN, ROUNDING_TIES_AWAY, }; static int rndtodfp[] = { FE_DEC_TONEAREST, FE_DEC_DOWNWARD, FE_DEC_UPWARD, FE_DEC_TOWARDZERO, FE_DEC_TONEARESTFROMZERO, }; #define NUM_RND 5 int __fe_dec_setround (int rnd) { if (rnd < 0 || rnd >= NUM_RND) return 1; __dfp_set_round (rndtobid[rnd]); return 0; } strong_alias (__fe_dec_setround, fe_dec_setround) hidden_def (__fe_dec_setround) int __fe_dec_getround (void) { int rnd = __dfp_get_round (); if (rnd < 0 || rnd >= NUM_RND) return -1; return rndtodfp[rnd]; } strong_alias (__fe_dec_getround, fe_dec_getround) hidden_def (__fe_dec_getround) extern int (*__printf_dfp_getround_callback) (void); static void __attribute__((constructor)) __init_printf_dfp_getround (void) { __printf_dfp_getround_callback = &__fe_dec_getround; } libdfp-1.0.17/sysdeps/soft-dfp/bid/numdigits.h000066400000000000000000000237721504475242000212040ustar00rootroot00000000000000/* Number of digits functions. Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #define NUMDIGITS_SUPPORT 1 /* NOTE: Little-Endian support only so far. */ #ifndef _BID_NUMDIGITS_H # define _BID_NUMDIGITS_H #include #include #include #include /* TODO: This is included to allow testing of inline funcs. */ #ifndef NOT_IN_libdfp #include #include #else #include #define __quantized128 quantized128 #endif #define BID_SIG_MASK 0x80000000u #define BID_EXPONENT_ENC_MASK 0x60000000u #define BID_EXP_SHIFT_LARGE32 21 #define BID_EXP_SHIFT_SMALL32 23 #define BID_EXP_MASK32 0xffu #define BID_EXP_SHIFT_LARGE64 19 #define BID_EXP_SHIFT_SMALL64 21 #define BID_EXP_MASK64 0x3ffu #define BID_EXP_SHIFT_LARGE128 15 #define BID_EXP_SHIFT_SMALL128 17 #define BID_EXP_MASK128 0x3fffu static inline int getexpd32 (_Decimal32 x) { unsigned int hi; unsigned int shift; union ieee754r_Decimal32 d; d.sd = x; hi = d.si; if ((hi & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK) shift = BID_EXP_SHIFT_LARGE32; else shift = BID_EXP_SHIFT_SMALL32; return ((hi >> shift) & BID_EXP_MASK32) - DECIMAL32_Bias; } static inline int getexpd64 (_Decimal64 x) { unsigned int hi; unsigned int shift; union ieee754r_Decimal64 d; d.dd = x; hi = d.di[1]; if ((hi & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK) shift = BID_EXP_SHIFT_LARGE64; else shift = BID_EXP_SHIFT_SMALL64; return ((hi >> shift) & BID_EXP_MASK64) - DECIMAL64_Bias; } static inline int getexpd128 (_Decimal128 x) { unsigned int hi; unsigned int shift; union ieee754r_Decimal128 d; d.td = x; hi = d.ti[3]; if ((hi & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK) shift = BID_EXP_SHIFT_LARGE128; else shift = BID_EXP_SHIFT_SMALL128; return (int)((hi >> shift) & BID_EXP_MASK128) - DECIMAL128_Bias; } static inline _Decimal32 setexpd32 (_Decimal32 x, int exp) { unsigned int shift, large; union ieee754r_Decimal32 d; d.sd = x; large = (d.si & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK; if (large) shift = BID_EXP_SHIFT_LARGE32; else shift = BID_EXP_SHIFT_SMALL32; d.si &= ~((BID_EXP_MASK32) << shift); d.si |= ((exp + DECIMAL32_Bias) & BID_EXP_MASK32) << shift; /* Verify if a small number did not overflow. */ if (d.divided.c == 3 && !large) d.si = 0x7c000000; return d.sd; } static inline _Decimal64 setexpd64 (_Decimal64 x, int exp) { unsigned int shift, large; union ieee754r_Decimal64 d; d.dd = x; large = (d.di[1] & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK; if (large) shift = BID_EXP_SHIFT_LARGE64; else shift = BID_EXP_SHIFT_SMALL64; d.di[1] &= ~((BID_EXP_MASK64) << shift); d.di[1] |= ((exp + DECIMAL64_Bias) & BID_EXP_MASK64) << shift; /* Verify if a small number did not overflow. */ if (d.divided.c == 3 && !large) { d.di[0] = 0x0; d.di[1] = 0x7c000000; } return d.dd; } static inline _Decimal128 setexpd128 (_Decimal128 x, int exp) { unsigned int shift, large; union ieee754r_Decimal128 d; d.td = x; large = (d.ti[3] & BID_EXPONENT_ENC_MASK) == BID_EXPONENT_ENC_MASK; if (large) shift = BID_EXP_SHIFT_LARGE128; else shift = BID_EXP_SHIFT_SMALL128; d.ti[3] &= ~((BID_EXP_MASK128) << shift); d.ti[3] |= ((exp + DECIMAL128_Bias) & BID_EXP_MASK128) << shift; /* Verify if a small number did not overflow. */ if (d.divided.c == 3 && !large) { d.ti[0] = 0x0; d.ti[1] = 0x0; d.ti[2] = 0x0; d.ti[3] = 0x7c000000; } return d.td; } static inline int numdigitsd32 (_Decimal32 x) { int firstdigit = 0; int len = 0; char digits[NDIGITS_32] = { 0 }; __get_digits_d32 (x, digits, NULL, NULL, NULL, NULL); while (digits[firstdigit] == '0') firstdigit++; len = strlen (digits + firstdigit); /* Hardware DFP always returns 1 digit if the mantissa is zero. We should * do the same. */ return (len == 0 ? 1 : len); } static inline int numdigitsd64 (_Decimal64 x) { int firstdigit = 0; int len = 0; char digits[NDIGITS_64] = { 0 }; __get_digits_d64 (x, digits, NULL, NULL, NULL, NULL); while (digits[firstdigit] == '0') firstdigit++; len = strlen (digits + firstdigit); /* Hardware DFP always returns 1 digit if the mantissa is zero. We should * do the same. */ return (len == 0 ? 1 : len); } static inline int numdigitsd128 (_Decimal128 x) { int firstdigit = 0; int len = 0; char digits[NDIGITS_128] = { 0 }; __get_digits_d128 (x, digits, NULL, NULL, NULL, NULL); while (digits[firstdigit] == '0') firstdigit++; len = strlen (digits + firstdigit); /* Hardware DFP always returns 1 digit if the mantissa is zero. We should * do the same. */ return (len == 0 ? 1 : len); } static inline int __bid_required_bits_32 (unsigned long int value) { return value == 0 ? 0 : (32 - __builtin_clz (value)); } static inline _Decimal32 setdigitsd32 (_Decimal32 x, char *str) { unsigned long int number; union ieee754r_Decimal32 d; unsigned int sign; int exp; d.sd = x; number = strtol (str, NULL, 10); exp = getexpd32 (x); sign = (d.si & BID_SIG_MASK); if (__bid_required_bits_32 (number) <= 23) d.si = sign | (number & 0x807FFFFFU); else d.si = sign | (0x60800000U | (number & 0x001FFFFFU)); d.sd = setexpd32 (d.sd, exp); return d.sd; } static inline int __bid_required_bits_64 (unsigned long long int value) { return (value == 0ULL ? 0 : 64 - __builtin_clzll (value)); } static inline _Decimal64 setdigitsd64 (_Decimal64 x, char *str) { unsigned long long int number; union ieee754r_Decimal64 d; unsigned int sign; int exp; d.dd = x; number = strtoll (str, NULL, 10); exp = getexpd64 (x); sign = (d.di[1] & BID_SIG_MASK); if (__bid_required_bits_64 (number) <= 53) d.di[1] = sign | ((number >> 32L) & 0x001FFFFFU); else d.di[1] = (sign | (0x60040000U) | ((number >> 32L) & 0x0007FFFFU)); d.di[0] = number & 0xFFFFFFFFU; d.dd = setexpd64 (d.dd, exp); return d.dd; } static inline _Decimal32 left_justifyd32 (_Decimal32 x) { union ieee754r_Decimal32 d32; d32.sd = x; /* Checking for corner cases. */ if (d32.nan.nan == 0x1f) return x; /* Number is NaN. */ int firstdigit = 0, len; char digits[NDIGITS_32+NDIGITS_32-1] = { 0 }; __get_digits_d32 (x, digits, NULL, NULL, NULL, NULL); while (digits[firstdigit] == '0') firstdigit++; len = strlen (digits + firstdigit); if (len) { int exp = getexpd32 (x); /* Pad the significant digits with enough trailing zeroes the first case is left justify the number the best you can regarding the minimum possible exponent the other case is the perfect case: you can left justify the number until it hits the most significant digit of the mantissa. */ int leadingzeroes = ((exp - firstdigit) < -DECIMAL32_Bias) ? DECIMAL32_Bias + exp : firstdigit; if (firstdigit) memset (digits + firstdigit + len, '0', leadingzeroes); x = setdigitsd32 (x, digits + firstdigit); x = setexpd32 (x, exp - leadingzeroes); } return x; } static inline _Decimal64 left_justifyd64 (_Decimal64 x) { union ieee754r_Decimal64 d64; d64.dd = x; /* Checking for corner cases. */ if (d64.nan.nan == 0x1f) return x; /* Number is NaN. */ int firstdigit = 0, len; char digits[NDIGITS_64 + NDIGITS_64 - 1] = { 0 }; __get_digits_d64 (x, digits, NULL, NULL, NULL, NULL); while (digits[firstdigit] == '0') firstdigit++; len = strlen (digits + firstdigit); if (len) { int exp = getexpd64 (x); /* Pad the significant digits with enough trailing zeroes the first case is left justify the number the best you can regarding the minimum possible exponent the other case is the perfect case: you can left justify the number until it hits the MSB of the mantissa. */ int leadingzeroes = ((exp - firstdigit) < -DECIMAL64_Bias) ? DECIMAL64_Bias + exp : firstdigit; if (firstdigit) memset (digits + firstdigit + len, '0', leadingzeroes); x = setdigitsd64 (x, digits + firstdigit); x = setexpd64 (x, exp - leadingzeroes); } return x; } static inline _Decimal128 left_justifyd128 (_Decimal128 x) { union ieee754r_Decimal128 d128; d128.td = x; /* Checking for corner cases. */ if (d128.nan.nan == 0x1f) return x; /* Number is NaN. */ int firstdigit = 0, len; char digits[NDIGITS_128+NDIGITS_128-1] = { 0 }; _Decimal128 y; __get_digits_d128 (x, digits, NULL, NULL, NULL, NULL); while (digits[firstdigit] == '0') firstdigit++; len = strlen (digits + firstdigit); if (len) { int exp = getexpd128 (x); /* Pad the significant digits with enough trailing zeroes the first case is left justify the number the best you can regarding the minimum possible exponent the other case is the perfect case: you can left justify the number until it hits the MSB of the mantissa. */ int leadingzeroes = ((exp - firstdigit) < -DECIMAL128_Bias) ? DECIMAL128_Bias + exp : firstdigit; if (firstdigit) memset(digits + firstdigit + len, '0', firstdigit); y = setexpd128 (x, exp - leadingzeroes); x = __quantized128 (x, y); } return x; } #endif libdfp-1.0.17/sysdeps/soft-dfp/candtruncd32.c000066400000000000000000000053511504475242000207210ustar00rootroot00000000000000/* Take 3 _Decimal128 numbers spanning 39 digits and convert them into one properly rounding _Decimal32 value. This is meant to be used internally to assist in rounding __int128 values to _Decimal32/64. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* This will take at most 39 digits. This should always be 39 for this function. It must defined before including this file as decimal*.h will attempt to define it. */ #define DECNUMDIGITS 39 #ifndef _DECIMAL_SIZE # define _DECIMAL_SIZE 32 # include # define FUNC_NAME combine_and_truncd32 #endif #include "decimal128.h" #include "dfpmacro.h" #include "convert_helpers.h" #include DEC_TYPE FUNC_NAME (_Decimal128 hi, _Decimal128 mid, _Decimal128 low) { DEC_TYPE result; /* hi = m_hi * 10^34 * mid = m_mid * 10^17 * low = m_low * 10^0 * * Note, m_hi is only at most 5 digits for int128. */ decNumber dn_hi, dn_mid, dn_low, dn_result; decNumber dn_hi_s, dn_mid_s, dn_result_s; decNumber dn_17, dn_34; decContext context; decContextDefault (&context, DEC_INIT_DECIMAL128); /* Hack, we're using 39 digits here. */ context.digits = 39; decNumberFromInt32(&dn_17, 17); decNumberFromInt32(&dn_34, 34); decimal128ToNumber((decimal128*)&hi, &dn_hi); decimal128ToNumber((decimal128*)&mid, &dn_mid); decimal128ToNumber((decimal128*)&low, &dn_low); /* Rotate addends into proper position. */ decNumberShift(&dn_hi_s,&dn_hi,&dn_34,&context); decNumberShift(&dn_mid_s,&dn_mid,&dn_17,&context); /* Sum the three components. */ decNumberAdd(&dn_result_s, &dn_hi_s, &dn_mid_s, &context); decNumberAdd(&dn_result, &dn_result_s, &dn_low, &context); /* Convert to the destination format. */ FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); /* Don't care about exceptions here... I don't think. */ return result; } libdfp-1.0.17/sysdeps/soft-dfp/candtruncd64.c000066400000000000000000000027241504475242000207270ustar00rootroot00000000000000/* Take 3 _Decimal128 numbers spanning 39 digits and convert them into one properly rounding _Decimal64 value. This is meant to be used internally to assist in rounding __int128 values to _Decimal32/64. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* This will take at most 39 digits. This should always be 39 for this function. It must defined before including this file as decimal*.h will attempt to define it. */ #define DECNUMDIGITS 39 #define _DECIMAL_SIZE 64 #include #define FUNC_NAME combine_and_truncd64 #include "candtruncd32.c" libdfp-1.0.17/sysdeps/soft-dfp/decroundtls.c000066400000000000000000000025101504475242000207470ustar00rootroot00000000000000/* Decimal Float Rounding Mode accessor function definition and TLS variable. Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /*#include */ #include #include #include "decroundtls.h" __thread int __dec_round_mode __attribute__ ((tls_model ("initial-exec"))) = FE_DEC_TONEAREST; int *__decrm_location (void) { return &__dec_round_mode; } hidden_def (__decrm_location) libdfp-1.0.17/sysdeps/soft-dfp/decroundtls.h000066400000000000000000000022371504475242000207620ustar00rootroot00000000000000/* Decimal Float Rounding Mode accessor function prototype Copyright (C) 2006 IBM Corporation. Copyright (C) 2009-2015 Free Software Foundation, Inc. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ #ifndef _DECROUNDTLS_ #define _DECROUNDTLS_ #include __BEGIN_DECLS extern int * __decrm_location (void); hidden_proto (__decrm_location) __END_DECLS #endif /* _DECROUNDTLS_ */ libdfp-1.0.17/sysdeps/soft-dfp/divdd3.c000066400000000000000000000021721504475242000176020ustar00rootroot00000000000000/* _Decimal64 division for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME divdd3 #include #include "divsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/divsd3.c000066400000000000000000000044461504475242000176270ustar00rootroot00000000000000/* _Decimal32 division for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME divsd3 #endif #include #include #include #define FUNCTION_NAME div #include #include "dfpacc.h" #include "mapround.h" DEC_TYPE PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE result; decNumber dn_x, dn_y, dn_result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); context.round = __dn_getround(); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); decNumberDivide(&dn_result, &dn_x, &dn_y, &context); if (context.status != 0) { int ieee_flags = 0; if (context.status & DEC_IEEE_854_Division_by_zero) ieee_flags |= FE_DIVBYZERO; if (context.status & DEC_IEEE_854_Inexact) ieee_flags |= FE_INEXACT; if (context.status & DEC_IEEE_854_Invalid_operation) ieee_flags |= FE_INVALID; if (context.status & DEC_IEEE_854_Overflow) ieee_flags |= FE_OVERFLOW; if (context.status & DEC_IEEE_854_Underflow) ieee_flags |= FE_UNDERFLOW; if (ieee_flags != 0) feraiseexcept (ieee_flags); } FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/divtd3.c000066400000000000000000000021751504475242000176250ustar00rootroot00000000000000/* _Decimal128 division for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME divtd3 #include #include "divsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/dpd/000077500000000000000000000000001504475242000170265ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/soft-dfp/dpd/Implies000066400000000000000000000000211504475242000203440ustar00rootroot00000000000000sysdeps/soft-dfp libdfp-1.0.17/sysdeps/soft-dfp/dpd/Makefile000066400000000000000000000020061504475242000204640ustar00rootroot00000000000000# Copyright (C) 2015 Free Software Foundation, Inc. # # This file is part of the Decimal Floating Point C Library. # # The Decimal Floating Point C Library is free software; you can # redistribute it and/or modify it under the terms of the GNU Lesser # General Public License version 2.1. # # The Decimal Floating Point C 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 version 2.1 for more details. # # You should have received a copy of the GNU Lesser General Public # License version 2.1 along with the Decimal Floating Point C Library; # if not, write to the Free Software Foundation, Inc., 51 Franklin # Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Please see libdfp/COPYING.txt for more information. */ # Empty Makefile so that Versions file is picked up by the build machinery # only searches for Versions files where it finds Makefiles. libdfp-1.0.17/sysdeps/soft-dfp/dpd/Versions000066400000000000000000000000001504475242000205470ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/soft-dfp/dpd/numdigits.h000066400000000000000000000162721504475242000212120ustar00rootroot00000000000000/* Number of digits functions. Copyright (C) 2006, 2007, 2008 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see dfp/COPYING.txt for more information. */ /* Allow this file to be included more than once, so don't use the usual include guards. */ #define NUMDIGITS_SUPPORT 1 #ifndef DEC_TYPE #error DEC_TYPE must be declared #endif #ifndef _DECIMAL_SIZE #error _DECIMAL_SIZE must be declared #endif #include "dpd-private.h" #include #include #ifndef PASTE # define PASTE(x,y) PASTE2(x,y) # define PASTE2(x,y) x##y #endif #ifndef FUNC_D # define FUNC_D(x) PASTE(x,PASTE(d,_DECIMAL_SIZE)) #endif static inline int FUNC_D (getexp) (DEC_TYPE x) { int exp; struct ieee754r_c_field c_f; #undef DECIMAL_BIAS #undef DECIMAL_DEC_BITS #if _DECIMAL_SIZE == 32 union ieee754r_Decimal32 d; d.sd = x; # define DECIMAL_BIAS DECIMAL32_Bias # define DECIMAL_DEC_BITS DECIMAL32_BEC_bits #elif _DECIMAL_SIZE == 64 union ieee754r_Decimal64 d; d.dd = x; # define DECIMAL_BIAS DECIMAL64_Bias # define DECIMAL_DEC_BITS DECIMAL64_BEC_bits #elif _DECIMAL_SIZE == 128 union ieee754r_Decimal128 d; d.td = x; # define DECIMAL_BIAS DECIMAL128_Bias # define DECIMAL_DEC_BITS DECIMAL128_BEC_bits #endif c_f = c_decoder[d.ieee.c]; /* PowerPC dxex instruction returns -1 for infinity and -2 for NaN. */ if (c_f.is_inf) return -1 - DECIMAL_BIAS; else if (c_f.is_nan) return -2 - DECIMAL_BIAS; exp = c_f.lm_exp << DECIMAL_DEC_BITS; exp += d.ieee.bec; exp -= DECIMAL_BIAS; return exp; } #define SETEXP_NAME PASTE(setexp,PASTE(d,_DECIMAL_SIZE)) static inline DEC_TYPE SETEXP_NAME (DEC_TYPE x, int exp) { #if _DECIMAL_SIZE == 32 union ieee754r_Decimal32 d; d.sd = x; exp += DECIMAL32_Bias; d.ieee.bec = exp; d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL32_BEC_bits]; return d.sd; #elif _DECIMAL_SIZE == 64 union ieee754r_Decimal64 d; d.dd = x; exp += DECIMAL64_Bias; d.ieee.bec = exp; d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL64_BEC_bits]; return d.dd; #elif _DECIMAL_SIZE == 128 union ieee754r_Decimal128 d; d.td = x; exp += DECIMAL128_Bias; d.ieee.bec = exp; d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL128_BEC_bits]; return d.td; #endif } static inline DEC_TYPE FUNC_D (setdigits) (DEC_TYPE x, char *str) { #if _DECIMAL_SIZE == 32 union ieee754r_Decimal32 d; d.sd = x; d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp]; d.ieee.cc0 = __dfp_declet_to_dpd(str+1); d.ieee.cc1 = __dfp_declet_to_dpd(str+4); return d.sd; #elif _DECIMAL_SIZE == 64 unsigned int bcd; union ieee754r_Decimal64 d; d.dd = x; d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp]; d.ieee.cc0 = __dfp_declet_to_dpd(str+1); /* Packed fields crossing a word boundary require special handling. */ bcd = __dfp_declet_to_dpd(str+4); d.ieee.cc1H8 = bcd>>2; d.ieee.cc1L2 = bcd; d.ieee.cc2 = __dfp_declet_to_dpd(str+7); d.ieee.cc3 = __dfp_declet_to_dpd(str+10); d.ieee.cc4 = __dfp_declet_to_dpd(str+13); return d.dd; #elif _DECIMAL_SIZE == 128 unsigned int bcd; union ieee754r_Decimal128 d; d.td = x; d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp]; d.ieee.cc0 = __dfp_declet_to_dpd(str+1); /* Packed fields crossing a word boundary require special handling. */ bcd = __dfp_declet_to_dpd(str+4); d.ieee.cc1H4 = bcd>>6; d.ieee.cc1L6 = bcd; d.ieee.cc2 = __dfp_declet_to_dpd(str+7); d.ieee.cc3 = __dfp_declet_to_dpd(str+10); bcd = __dfp_declet_to_dpd(str+13); d.ieee.cc4H6 = bcd>>4; d.ieee.cc4L4 = bcd; d.ieee.cc5 = __dfp_declet_to_dpd(str+16); d.ieee.cc6 = __dfp_declet_to_dpd(str+19); bcd = __dfp_declet_to_dpd(str+22); d.ieee.cc7H8 = bcd>>2; d.ieee.cc7L2 = bcd; d.ieee.cc8 = __dfp_declet_to_dpd(str+25); d.ieee.cc9 = __dfp_declet_to_dpd(str+28); d.ieee.cc10 = __dfp_declet_to_dpd(str+31); return d.td; #endif } static inline int FUNC_D (numdigits) (DEC_TYPE x) { int firstdigit = 0; int len = 0; #if _DECIMAL_SIZE == 32 char digits[NDIGITS_32]; __get_digits_d32(x, digits, NULL, NULL, NULL, NULL); #elif _DECIMAL_SIZE == 64 char digits[NDIGITS_64]; __get_digits_d64(x, digits, NULL, NULL, NULL, NULL); #elif _DECIMAL_SIZE == 128 char digits[NDIGITS_128]; __get_digits_d128(x, digits, NULL, NULL, NULL, NULL); #endif while (digits[firstdigit] == '0') firstdigit++; len = strlen(digits + firstdigit); /* Hardware DFP always returns 1 digit if the mantissa is zero. We should * do the same. */ return (len == 0 ? 1 : len); } static inline DEC_TYPE FUNC_D (left_justify) (DEC_TYPE x) { int firstdigit = 0, len, ndigits; #undef decfield #if _DECIMAL_SIZE == 32 # define decfield sd ndigits = NDIGITS_32; union ieee754r_Decimal32 d; char digits[NDIGITS_32 + NDIGITS_32 - 1]; __get_digits_d32 (x, digits, NULL, NULL, NULL, NULL); #elif _DECIMAL_SIZE == 64 # define decfield dd ndigits = NDIGITS_64; union ieee754r_Decimal64 d; char digits[NDIGITS_64 + NDIGITS_64 - 1]; __get_digits_d64 (x, digits, NULL, NULL, NULL, NULL); #elif _DECIMAL_SIZE == 128 # define decfield td ndigits = NDIGITS_128; union ieee754r_Decimal128 d; char digits[NDIGITS_128 + NDIGITS_128 - 1]; __get_digits_d128 (x, digits, NULL, NULL, NULL, NULL); #endif d.decfield = x; if (d.ieee.c == 0x1f) return x; while (digits[firstdigit] == '0') firstdigit++; len = strlen (digits + firstdigit); if (len) { int exp = FUNC_D (getexp) (x); /* Pad the significant digits with enough trailing zeroes the first case is left justify the number the best you can regarding the minimum possible exponent the other case is the perfect case: you can left justify the number until it hits the most significant digit of the mantissa. */ int leadingzeroes = ((exp - firstdigit) < -DECIMAL_BIAS) ? DECIMAL_BIAS + exp : firstdigit; if (leadingzeroes == 0) return x; if (firstdigit) memset (digits + firstdigit + len, '0', leadingzeroes); int index = 0; /* setdigits expects a number with exactly ndigits or it will segfault here we are going to the end of the number then going back ndigits. */ if (firstdigit + len + leadingzeroes >= ndigits) index = firstdigit + len + leadingzeroes - ndigits + 1; x = FUNC_D (setdigits) (x, digits + index); x = FUNC_D (setexp) (x, exp - leadingzeroes); } return x; } libdfp-1.0.17/sysdeps/soft-dfp/eqdd2.c000066400000000000000000000022001504475242000174140ustar00rootroot00000000000000/* _Decimal64 compare equality for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME eqdd2 #include #include "eqsd2.c" libdfp-1.0.17/sysdeps/soft-dfp/eqsd2.c000066400000000000000000000032741504475242000174470ustar00rootroot00000000000000/* _Decimal32 compare equality for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME eqsd2 #endif #include #include #include #define FUNCTION_NAME eq #include #include "dfpacc.h" CMPINT PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x, dn_y, result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 1; decNumberCompare(&result, &dn_x, &dn_y, &context); return !decNumberIsZero(&result); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/eqtd2.c000066400000000000000000000022031504475242000174370ustar00rootroot00000000000000/* _Decimal128 compare equality for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME eqtd2 #include #include "eqsd2.c" libdfp-1.0.17/sysdeps/soft-dfp/extendddtd2.c000066400000000000000000000022101504475242000206270ustar00rootroot00000000000000/* Handle conversion from Decimal64 to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_DECIMAL #define SRC 64 #define DEST 128 #define NAME extend #include "extendsddd2.c" libdfp-1.0.17/sysdeps/soft-dfp/extendsddd2.c000066400000000000000000000035721504475242000206420ustar00rootroot00000000000000/* Handle conversion from Decimal32 to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef DECIMAL_TO_DECIMAL #define DECIMAL_TO_DECIMAL #define SRC 32 #define DEST 64 #define NAME extend #endif #include "mapround.h" #include "dfpacc.h" #include "convert.h" DEST_TYPE PREFIXED_FUNCTION_NAME (SRC_TYPE a) { DEST_TYPE result; decNumber d; decContext context; decContextDefault(&context, CONTEXT_INIT); context.round = __dn_getround(); PASTE(decimal,PASTE(SRC,ToNumber))((IEEE_SRC_TYPE*)&a, &d); /* PASTE(___decimal,PASTE(SRC,ToNumber))(&a, &d); */ /* PASTE(___decimal,PASTE(DEST,FromNumber))(&result, &d, &context); */ PASTE(decimal,PASTE(DEST,FromNumber))((IEEE_DEST_TYPE*)&result, &d, &context); if (context.status != 0) { int dec_flags = context.status & (DEC_IEEE_854_Inexact|DEC_IEEE_854_Invalid_operation); DFP_HANDLE_EXCEPTIONS(DFP_IEEE_FLAGS(dec_flags)); } return result; } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/extendsdtd2.c000066400000000000000000000022101504475242000206460ustar00rootroot00000000000000/* Handle conversion from Decimal32 to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_DECIMAL #define SRC 32 #define DEST 128 #define NAME extend #include "extendsddd2.c" libdfp-1.0.17/sysdeps/soft-dfp/fe_decround.c000066400000000000000000000055571504475242000207140ustar00rootroot00000000000000/* Decimal Float fe_dec_getround and fe_dec_setround definitions. Copyright (C) 2006 IBM Corporation. Copyright (C) 2007-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include /* The default uses decimal rounding mode stored in TLS. This file should be * overridden in the sysdeps/powerpc/dfpu if hardware supports decimal * rounding mode. */ int __fe_dec_setround(int __rounding_direction) { /* Only match on supported rounding modes. The decNum library supports * additional ones that aren't valid C rounding modes. We also allow rounding * modes to be set covertly for the three additional hardware rounding modes * supported by Power6[x] that aren't in the DFP Draft Technical Report. */ /* C Rounding Mode: Hardware Description * DecNumber description * * FE_DEC_TONEAREST: 000 Round to nearest, ties to even. * DEC_ROUND_HALF_EVEN * * FE_DEC_TOWARDZERO: 001 Round toward zero. * DEC_ROUND_DOWN * * FE_DEC_UPWARD: 010 Round toward +Infinity * DEC_ROUND_CEILING * * FE_DEC_DOWNWARD: 011 Round toward -Infinity * DEC_ROUND_FLOOR * * FE_DEC_TONEARESTFROMZERO: 100 Round to nearest, ties away from zero * DEC_ROUND_HALF_UP * * 5: 101 Round to nearest, ties toward zero * DEC_ROUND_HALF_DOWN * * 6: 110 Round away from zero * DEC_ROUND_UP * * 7: 111 Round for prepare for shorter precision * Not supported by decNumber. */ if (__rounding_direction > 7) return 1; *__decrm_location() = __rounding_direction; return 0; } strong_alias(__fe_dec_setround, fe_dec_setround) hidden_def(__fe_dec_setround) int __fe_dec_getround(void) { return *__decrm_location(); } strong_alias(__fe_dec_getround, fe_dec_getround) hidden_def(__fe_dec_getround) extern int (*__printf_dfp_getround_callback)(void); static void __attribute__ ((constructor))__init_printf_dfp_getround (void) { __printf_dfp_getround_callback = &__fe_dec_getround; } libdfp-1.0.17/sysdeps/soft-dfp/fixdddi.c000066400000000000000000000022101504475242000200310ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary long (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 64 #define DEST 64 #define NAME fix #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixddsi.c000066400000000000000000000022111504475242000200510ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary integer (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 64 #define DEST 32 #define NAME fix #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixsddi.c000066400000000000000000000022061504475242000200550ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary long (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 32 #define DEST 64 #define NAME fix #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixsdsi.c000066400000000000000000000050721504475242000201000ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary integer (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef DECIMAL_TO_INTEGER #define DECIMAL_TO_INTEGER #define SRC 32 #define DEST 32 #define NAME fix #endif #include "dfpacc.h" #include "convert.h" #include /*#include */ #define BUFMAX 128 DEST_TYPE PREFIXED_FUNCTION_NAME (SRC_TYPE a) { /* decNumber's decimal* types have the same format as C's _Decimal* types, but they have different calling conventions. */ /* TODO: Decimal float to integer conversions should raise FE_INVALID if the result value does not fit into the result type. */ char buf[BUFMAX]; char *pos; decNumber qval, n1, n2; decContext context; /* Use a large context to avoid losing precision. */ decContextDefault (&context, DEC_INIT_DECIMAL128); /* Need non-default rounding mode here. */ context.round = DEC_ROUND_DOWN; PASTE(decimal,PASTE(SRC,ToNumber))((IEEE_SRC_TYPE*)&a, &n1); /* PASTE(decimal,PASTE(SRC,ToNumber))(&a, &n1); */ /* Rescale if the exponent is less than zero. */ decNumberToIntegralValue (&n2, &n1, &context); /* Get a value to use for the quantize call. */ decNumberFromString (&qval, (char *) "1.0", &context); /* Force the exponent to zero. */ decNumberQuantize (&n1, &n2, &qval, &context); /* Get a string, which at this point will not include an exponent. */ decNumberToString (&n1, buf); /* Ignore the fractional part. */ pos = strchr (buf, '.'); if (pos) *pos = 0; /* Use a C library function to convert to the integral type. */ return STR_TO_INT (buf, NULL, 10); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/fixtddi.c000066400000000000000000000022071504475242000200570ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary long (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 128 #define DEST 64 #define NAME fix #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixtdsi.c000066400000000000000000000022121504475242000200720ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary integer (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 128 #define DEST 32 #define NAME fix #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixunsdddi.c000066400000000000000000000022431504475242000205650ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary unsigned long (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 64 #define DEST 64 #define NAME fixuns #define UNSIGNED #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixunsddsi.c000066400000000000000000000022461504475242000206070ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary unsigned integer (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 64 #define DEST 32 #define NAME fixuns #define UNSIGNED #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixunssddi.c000066400000000000000000000022431504475242000206040ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary unsigned long (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 32 #define DEST 64 #define NAME fixuns #define UNSIGNED #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixunssdsi.c000066400000000000000000000022461504475242000206260ustar00rootroot00000000000000/* Handle conversion from Decimal32 to binary unsigned integer (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 32 #define DEST 32 #define NAME fixuns #define UNSIGNED #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixunstddi.c000066400000000000000000000022441504475242000206060ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary unsigned long (64) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 128 #define DEST 64 #define NAME fixuns #define UNSIGNED #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/fixunstdsi.c000066400000000000000000000022471504475242000206300ustar00rootroot00000000000000/* Handle conversion from Decimal64 to binary unsigned integer (32) Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_INTEGER #define SRC 128 #define DEST 32 #define NAME fixuns #define UNSIGNED #include "fixsdsi.c" libdfp-1.0.17/sysdeps/soft-dfp/floatdidd.c000066400000000000000000000022121504475242000203520ustar00rootroot00000000000000/* Handle conversion from binary long (64) to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 64 #define DEST 64 #define NAME float #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatdisd.c000066400000000000000000000022121504475242000203710ustar00rootroot00000000000000/* Handle conversion from binary long (64) to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 64 #define DEST 32 #define NAME float #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatditd.c000066400000000000000000000022141504475242000203740ustar00rootroot00000000000000/* Handle conversion from binary long (64) to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 64 #define DEST 128 #define NAME float #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatsidd.c000066400000000000000000000022151504475242000203740ustar00rootroot00000000000000/* Handle conversion from binary integer (32) to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 32 #define DEST 64 #define NAME float #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatsisd.c000066400000000000000000000037621504475242000204230ustar00rootroot00000000000000/* Handle conversion from binary integer (32) to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef INTEGER_TO_DECIMAL #define INTEGER_TO_DECIMAL #define SRC 32 #define DEST 32 #define NAME float #endif #include "dfpacc.h" #include "convert.h" #include #define BUFMAX 128 DEST_TYPE PREFIXED_FUNCTION_NAME (SRC_TYPE a) { DEST_TYPE f; char buf[BUFMAX]; decContext context; decContextDefault (&context, CONTEXT_INIT); context.round = DEC_ROUND_HALF_EVEN; /* Use a C library function to get a floating point string. */ sprintf (buf, INT_FMT "", CAST_FOR_FMT(a)); /* Convert from the floating point string to a decimal* type. */ /* PASTE(___decimal,PASTE(DEST,FromString))(&f, buf, &context); */ PASTE(decimal,PASTE(DEST,FromString))((IEEE_DEST_TYPE*)&f, buf, &context); if (context.status != 0) { int dec_flags = context.status & (DEC_IEEE_854_Inexact|DEC_IEEE_854_Invalid_operation|DEC_IEEE_854_Overflow); DFP_HANDLE_EXCEPTIONS(DFP_IEEE_FLAGS(dec_flags)); } return f; } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/floatsitd.c000066400000000000000000000022171504475242000204160ustar00rootroot00000000000000/* Handle conversion from binary integer (32) to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 32 #define DEST 128 #define NAME float #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatunsdidd.c000066400000000000000000000022471504475242000211100ustar00rootroot00000000000000/* Handle conversion from binary unsigned long (64) to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 64 #define DEST 64 #define NAME floatuns #define UNSIGNED #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatunsdisd.c000066400000000000000000000022471504475242000211270ustar00rootroot00000000000000/* Handle conversion from binary unsigned long (64) to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 64 #define DEST 32 #define NAME floatuns #define UNSIGNED #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatunsditd.c000066400000000000000000000022511504475242000211230ustar00rootroot00000000000000/* Handle conversion from binary unsigned long (64) to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 64 #define DEST 128 #define NAME floatuns #define UNSIGNED #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatunssidd.c000066400000000000000000000022521504475242000211230ustar00rootroot00000000000000/* Handle conversion from binary unsigned integer (32) to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 32 #define DEST 64 #define NAME floatuns #define UNSIGNED #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatunssisd.c000066400000000000000000000022521504475242000211420ustar00rootroot00000000000000/* Handle conversion from binary unsigned integer (32) to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 32 #define DEST 32 #define NAME floatuns #define UNSIGNED #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/floatunssitd.c000066400000000000000000000022541504475242000211450ustar00rootroot00000000000000/* Handle conversion from binary unsigned integer (32) to Decimal128 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define INTEGER_TO_DECIMAL #define SRC 32 #define DEST 128 #define NAME floatuns #define UNSIGNED #include "floatsisd.c" libdfp-1.0.17/sysdeps/soft-dfp/gedd2.c000066400000000000000000000022161504475242000174110ustar00rootroot00000000000000/* _Decimal64 compare greather-than or equal for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME gedd2 #include #include "gesd2.c" libdfp-1.0.17/sysdeps/soft-dfp/gesd2.c000066400000000000000000000033171504475242000174330ustar00rootroot00000000000000/* _Decimal32 compare greather-than or equal for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME gesd2 #endif #include #include #include #define FUNCTION_NAME ge #include "dfpacc.h" #include CMPINT PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x, dn_y, result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return -1; decNumberCompare(&result, &dn_x, &dn_y, &context); return -decNumberIsNegative(&result); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/getd2.c000066400000000000000000000022211504475242000174250ustar00rootroot00000000000000/* _Decimal128 compare greather-than or equal for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME getd2 #include #include "gesd2.c" libdfp-1.0.17/sysdeps/soft-dfp/gtdd2.c000066400000000000000000000022041504475242000174250ustar00rootroot00000000000000/* _Decimal64 compare greater-than for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME gtdd2 #include #include "gtsd2.c" libdfp-1.0.17/sysdeps/soft-dfp/gtsd2.c000066400000000000000000000033421504475242000174500ustar00rootroot00000000000000/* _Decimal32 compare greater-than for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME gtsd2 #endif #include #include #include #define FUNCTION_NAME gt #include "dfpacc.h" #include CMPINT PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x, dn_y, result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return -1; decNumberCompare(&result, &dn_x, &dn_y, &context); return !decNumberIsNegative(&result) && !decNumberIsZero(&result); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/gttd2.c000066400000000000000000000022071504475242000174500ustar00rootroot00000000000000/* _Decimal128 compare greater-than for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME gttd2 #include #include "gtsd2.c" libdfp-1.0.17/sysdeps/soft-dfp/ledd2.c000066400000000000000000000022121504475242000174120ustar00rootroot00000000000000/* _Decimal64 compare less-than or equal for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME ledd2 #include #include "lesd2.c" libdfp-1.0.17/sysdeps/soft-dfp/lesd2.c000066400000000000000000000033471504475242000174430ustar00rootroot00000000000000/* _Decimal32 compare less-than or equal for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME lesd2 #endif #include #include #include #define FUNCTION_NAME le #include "dfpacc.h" #include CMPINT PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x, dn_y, result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 1; decNumberCompare(&result, &dn_x, &dn_y, &context); return !decNumberIsNegative(&result) && !decNumberIsZero(&result); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/letd2.c000066400000000000000000000022151504475242000174350ustar00rootroot00000000000000/* _Decimal128 compare less-than or equal for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME letd2 #include #include "lesd2.c" libdfp-1.0.17/sysdeps/soft-dfp/libdfp-test-ulps000066400000000000000000000005751504475242000214070ustar00rootroot00000000000000test cos decimal128 0 decimal32 0 decimal64 0 test acos decimal128 1 decimal32 0 decimal64 0 test sin decimal128 0 decimal32 0 decimal64 0 test log decimal128 0 decimal32 0 decimal64 0 test log10 decimal128 0 decimal32 0 decimal64 0 test log1p decimal128 0 decimal32 1 decimal64 0 test exp decimal128 0 decimal32 0 decimal64 3 test pow decimal128 0 decimal32 0 decimal64 1 libdfp-1.0.17/sysdeps/soft-dfp/ltdd2.c000066400000000000000000000022011504475242000174270ustar00rootroot00000000000000/* _Decimal64 compare less-than for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME ltdd2 #include #include "ltsd2.c" libdfp-1.0.17/sysdeps/soft-dfp/ltsd2.c000066400000000000000000000033011504475242000174500ustar00rootroot00000000000000/* _Decimal32 compare less-than for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME ltsd2 #endif #include #include #include #define FUNCTION_NAME lt #include "dfpacc.h" #include CMPINT PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x, dn_y, result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 1; decNumberCompare(&result, &dn_x, &dn_y, &context); return -decNumberIsNegative(&result); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/lttd2.c000066400000000000000000000022041504475242000174520ustar00rootroot00000000000000/* _Decimal128 compare less-than for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME lttd2 #include #include "ltsd2.c" libdfp-1.0.17/sysdeps/soft-dfp/muldd3.c000066400000000000000000000022001504475242000176050ustar00rootroot00000000000000/* _Decimal64 multiplication for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME muldd3 #include #include "mulsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/mulsd3.c000066400000000000000000000044561504475242000176430ustar00rootroot00000000000000/* _Decimal32 multiplication for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME mulsd3 #endif #include #include #include #define FUNCTION_NAME mul #include "dfpacc.h" #include #include "mapround.h" DEC_TYPE PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE result; decNumber dn_x, dn_y, dn_result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); context.round = __dn_getround(); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); decNumberMultiply(&dn_result, &dn_x, &dn_y, &context); if (context.status != 0) { int ieee_flags = 0; if (context.status & DEC_IEEE_854_Division_by_zero) ieee_flags |= FE_DIVBYZERO; if (context.status & DEC_IEEE_854_Inexact) ieee_flags |= FE_INEXACT; if (context.status & DEC_IEEE_854_Invalid_operation) ieee_flags |= FE_INVALID; if (context.status & DEC_IEEE_854_Overflow) ieee_flags |= FE_OVERFLOW; if (context.status & DEC_IEEE_854_Underflow) ieee_flags |= FE_UNDERFLOW; if (ieee_flags != 0) feraiseexcept (ieee_flags); } FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/multd3.c000066400000000000000000000022031504475242000176300ustar00rootroot00000000000000/* _Decimal128 multiplication for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME multd3 #include #include "mulsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/nedd2.c000066400000000000000000000022021504475242000174130ustar00rootroot00000000000000/* _Decimal64 compare inequality for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME nedd2 #include #include "nesd2.c" libdfp-1.0.17/sysdeps/soft-dfp/nesd2.c000066400000000000000000000032761504475242000174460ustar00rootroot00000000000000/* _Decimal32 compare inequality for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME nesd2 #endif #include #include #include #define FUNCTION_NAME ne #include "dfpacc.h" #include CMPINT PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { decNumber dn_x, dn_y, result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y)) return 1; decNumberCompare(&result, &dn_x, &dn_y, &context); return !decNumberIsZero(&result); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/netd2.c000066400000000000000000000022051504475242000174360ustar00rootroot00000000000000/* _Decimal128 compare inequality for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME netd2 #include #include "nesd2.c" libdfp-1.0.17/sysdeps/soft-dfp/subdd3.c000066400000000000000000000021751504475242000176140ustar00rootroot00000000000000/* _Decimal64 subtraction for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME subdd3 #include #include "subsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/subsd3.c000066400000000000000000000044531504475242000176340ustar00rootroot00000000000000/* _Decimal32 subtraction for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME subsd3 #endif #include #include #include #define FUNCTION_NAME sub #include "dfpacc.h" #include #include "mapround.h" DEC_TYPE PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { DEC_TYPE result; decNumber dn_x, dn_y, dn_result; decContext context; decContextDefault(&context, DEFAULT_CONTEXT); context.round = __dn_getround(); FUNC_CONVERT_TO_DN(&x, &dn_x); FUNC_CONVERT_TO_DN(&y, &dn_y); decNumberSubtract(&dn_result, &dn_x, &dn_y, &context); if (context.status != 0) { int ieee_flags = 0; if (context.status & DEC_IEEE_854_Division_by_zero) ieee_flags |= FE_DIVBYZERO; if (context.status & DEC_IEEE_854_Inexact) ieee_flags |= FE_INEXACT; if (context.status & DEC_IEEE_854_Invalid_operation) ieee_flags |= FE_INVALID; if (context.status & DEC_IEEE_854_Overflow) ieee_flags |= FE_OVERFLOW; if (context.status & DEC_IEEE_854_Underflow) ieee_flags |= FE_UNDERFLOW; if (ieee_flags != 0) feraiseexcept (ieee_flags); } FUNC_CONVERT_FROM_DN (&dn_result, &result, &context); return result; } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/subtd3.c000066400000000000000000000022001504475242000176210ustar00rootroot00000000000000/* _Decimal128 subtraction for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME subtd3 #include #include "subsd3.c" libdfp-1.0.17/sysdeps/soft-dfp/truncddsd2.c000066400000000000000000000022051504475242000204760ustar00rootroot00000000000000/* Handle conversion from Decimal64 to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_DECIMAL #define SRC 64 #define DEST 32 #define NAME trunc #include "extendsddd2.c" libdfp-1.0.17/sysdeps/soft-dfp/trunctddd2.c000066400000000000000000000022071504475242000205010ustar00rootroot00000000000000/* Handle conversion from Decimal128 to Decimal64 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_DECIMAL #define SRC 128 #define DEST 64 #define NAME trunc #include "extendsddd2.c" libdfp-1.0.17/sysdeps/soft-dfp/trunctdsd2.c000066400000000000000000000022071504475242000205200ustar00rootroot00000000000000/* Handle conversion from Decimal128 to Decimal32 Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define DECIMAL_TO_DECIMAL #define SRC 128 #define DEST 32 #define NAME trunc #include "extendsddd2.c" libdfp-1.0.17/sysdeps/soft-dfp/unorddd2.c000066400000000000000000000022071504475242000201450ustar00rootroot00000000000000/* _Decimal64 compare unordered for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 64 #define ACTUAL_FUNCTION_NAME unorddd2 #include #include "unordsd2.c" libdfp-1.0.17/sysdeps/soft-dfp/unordsd2.c000066400000000000000000000026411504475242000201660ustar00rootroot00000000000000/* _Decimal32 compare unordered for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DECIMAL_SIZE # include # define _DECIMAL_SIZE 32 # define ACTUAL_FUNCTION_NAME unordsd2 #endif #include #include #define FUNCTION_NAME unord #include "dfpacc.h" #include CMPINT PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y) { return FUNC_D(__isnan) (x) || FUNC_D(__isnan) (y); } hidden_def (PREFIXED_FUNCTION_NAME) libdfp-1.0.17/sysdeps/soft-dfp/unordtd2.c000066400000000000000000000022121504475242000201610ustar00rootroot00000000000000/* _Decimal128 compare unordered for soft-dfp Copyright (C) 2007, 2008 IBM Corporation. Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Pete Eberlein The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #define _DECIMAL_SIZE 128 #define ACTUAL_FUNCTION_NAME unordtd2 #include #include "unordsd2.c" libdfp-1.0.17/sysdeps/wordsize-32/000077500000000000000000000000001504475242000166255ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/wordsize-32/Makefile000066400000000000000000000000271504475242000202640ustar00rootroot00000000000000libdfp-has-timode = no libdfp-1.0.17/sysdeps/wordsize-64/000077500000000000000000000000001504475242000166325ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/wordsize-64/Makefile000066400000000000000000000000301504475242000202630ustar00rootroot00000000000000libdfp-has-timode = yes libdfp-1.0.17/sysdeps/x86_64/000077500000000000000000000000001504475242000154735ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/x86_64/Implies000066400000000000000000000000651504475242000170210ustar00rootroot00000000000000sysdeps/wordsize-64 sysdeps/soft-dfp/bid sysdeps/bid libdfp-1.0.17/sysdeps/x86_64/Makefile000066400000000000000000000000001504475242000171210ustar00rootroot00000000000000libdfp-1.0.17/sysdeps/x86_64/Versions000066400000000000000000000004741504475242000172330ustar00rootroot00000000000000libdfp { LIBDFP_1.0.15 { __bid_extendsdtf; __bid_extendddtf; __bid_trunctdtf; __bid_trunctfsd; __bid_trunctfdd; __bid_extendtftd; } LIBDFP_1.0.0 { __bid_extendsdxf; __bid_extendddxf; __bid_extendxftd; __bid_truncxfsd; __bid_truncxfdd; __bid_trunctdxf; } } libdfp-1.0.17/sysdeps/x86_64/libdfp.abilist000066400000000000000000000135361504475242000203140ustar00rootroot00000000000000LIBDFP_1.0.0 LIBDFP_1.0.0 A __bid_adddd3 F __bid_addsd3 F __bid_addtd3 F __bid_divdd3 F __bid_divsd3 F __bid_divtd3 F __bid_eqdd2 F __bid_eqsd2 F __bid_eqtd2 F __bid_extendddtd2 F __bid_extendddxf F __bid_extenddfdd F __bid_extenddftd F __bid_extendsddd2 F __bid_extendsddf F __bid_extendsdtd2 F __bid_extendsdxf F __bid_extendsfdd F __bid_extendsfsd F __bid_extendsftd F __bid_extendxftd F __bid_fixdddi F __bid_fixddsi F __bid_fixsddi F __bid_fixsdsi F __bid_fixtddi F __bid_fixtdsi F __bid_fixunsdddi F __bid_fixunsddsi F __bid_fixunssddi F __bid_fixunssdsi F __bid_fixunstddi F __bid_fixunstdsi F __bid_floatdidd F __bid_floatdisd F __bid_floatditd F __bid_floatsidd F __bid_floatsisd F __bid_floatsitd F __bid_floatunsdidd F __bid_floatunsdisd F __bid_floatunsditd F __bid_floatunssidd F __bid_floatunssisd F __bid_floatunssitd F __bid_gedd2 F __bid_gesd2 F __bid_getd2 F __bid_gtdd2 F __bid_gtsd2 F __bid_gttd2 F __bid_ledd2 F __bid_lesd2 F __bid_letd2 F __bid_ltdd2 F __bid_ltsd2 F __bid_lttd2 F __bid_muldd3 F __bid_mulsd3 F __bid_multd3 F __bid_nedd2 F __bid_nesd2 F __bid_netd2 F __bid_subdd3 F __bid_subsd3 F __bid_subtd3 F __bid_truncdddf F __bid_truncddsd2 F __bid_truncddsf F __bid_truncdfsd F __bid_truncsdsf F __bid_trunctddd2 F __bid_trunctddf F __bid_trunctdsd2 F __bid_trunctdsf F __bid_trunctdxf F __bid_truncxfdd F __bid_truncxfsd F __bid_unorddd2 F __bid_unordsd2 F __bid_unordtd2 F acosd128 F acosd32 F acosd64 F acoshd128 F acoshd32 F acoshd64 F asind128 F asind32 F asind64 F asinhd128 F asinhd32 F asinhd64 F atan2d128 F atan2d32 F atan2d64 F atand128 F atand32 F atand64 F atanhd128 F atanhd32 F atanhd64 F cbrtd128 F cbrtd32 F cbrtd64 F ceild128 F ceild32 F ceild64 F copysignd128 F copysignd32 F copysignd64 F cosd128 F cosd32 F cosd64 F coshd128 F coshd32 F coshd64 F decoded128 F decoded32 F decoded64 F erfcd128 F erfcd32 F erfcd64 F erfd128 F erfd32 F erfd64 F exp2d128 F exp2d32 F exp2d64 F expd128 F expd32 F expd64 F expm1d128 F expm1d32 F expm1d64 F fabsd128 F fabsd32 F fabsd64 F fdimd128 F fdimd32 F fdimd64 F fe_dec_getround F fe_dec_setround F finited128 F finited32 F finited64 F floord128 F floord32 F floord64 F fmad128 F fmad32 F fmad64 F fmaxd128 F fmaxd32 F fmaxd64 F fmind128 F fmind32 F fmind64 F fmodd128 F fmodd32 F fmodd64 F fpclassifyd128 F fpclassifyd32 F fpclassifyd64 F frexpd128 F frexpd32 F frexpd64 F hypotd128 F hypotd32 F hypotd64 F ilogbd128 F ilogbd32 F ilogbd64 F isgreaterd128 F isgreaterd32 F isgreaterd64 F isgreaterequald128 F isgreaterequald32 F isgreaterequald64 F isinfd128 F isinfd32 F isinfd64 F islessd128 F islessd32 F islessd64 F islessequald128 F islessequald32 F islessequald64 F islessgreaterd128 F islessgreaterd32 F islessgreaterd64 F isnand128 F isnand32 F isnand64 F isnormald128 F isnormald32 F isnormald64 F isunorderedd128 F isunorderedd32 F isunorderedd64 F ldexpd128 F ldexpd32 F ldexpd64 F lgammad128 F lgammad32 F lgammad64 F llrintd128 F llrintd32 F llrintd64 F llroundd128 F llroundd32 F llroundd64 F log10d128 F log10d32 F log10d64 F log1pd128 F log1pd32 F log1pd64 F log2d128 F log2d32 F log2d64 F logbd128 F logbd32 F logbd64 F logd128 F logd32 F logd64 F lrintd128 F lrintd32 F lrintd64 F lroundd128 F lroundd32 F lroundd64 F modfd128 F modfd32 F modfd64 F nand128 F nand32 F nand64 F nearbyintd128 F nearbyintd32 F nearbyintd64 F nextafterd128 F nextafterd32 F nextafterd64 F nexttowardd128 F nexttowardd32 F nexttowardd64 F powd128 F powd32 F powd64 F printf_dfp F quantized128 F quantized32 F quantized64 F register_printf_dfp F remainderd128 F remainderd32 F remainderd64 F rintd128 F rintd32 F rintd64 F roundd128 F roundd32 F roundd64 F samequantumd128 F samequantumd32 F samequantumd64 F scalblnd128 F scalblnd32 F scalblnd64 F scalbnd128 F scalbnd32 F scalbnd64 F signbitd128 F signbitd32 F signbitd64 F sind128 F sind32 F sind64 F sinhd128 F sinhd32 F sinhd64 F sqrtd128 F sqrtd32 F sqrtd64 F strtod128 F strtod32 F strtod64 F tand128 F tand32 F tand64 F tanhd128 F tanhd32 F tanhd64 F tgammad128 F tgammad32 F tgammad64 F truncd128 F truncd32 F truncd64 F wcstod128 F wcstod32 F wcstod64 F LIBDFP_1.0.13 LIBDFP_1.0.13 A __bid_fixddti F __bid_fixsdti F __bid_fixtdti F __bid_fixunsddti F __bid_fixunssdti F __bid_fixunstdti F __bid_floattidd F __bid_floattisd F __bid_floattitd F __bid_floatunstidd F __bid_floatunstisd F __bid_floatunstitd F LIBDFP_1.0.15 LIBDFP_1.0.15 A __bid_extendddtf F __bid_extendsdtf F __bid_extendtftd F __bid_trunctdtf F __bid_trunctfdd F __bid_trunctfsd F fmaxmagd128 F fmaxmagd32 F fmaxmagd64 F fminmagd128 F fminmagd32 F fminmagd64 F nextdownd128 F nextdownd32 F nextdownd64 F nextupd128 F nextupd32 F nextupd64 F LIBDFP_1.0.16 LIBDFP_1.0.16 A strfromd128 F strfromd32 F strfromd64 F LIBDFP_1.0.2 LIBDFP_1.0.2 A __isinfd128 F __isinfd32 F __isinfd64 F __isnand128 F __isnand32 F __isnand64 F LIBDFP_1.0.3 LIBDFP_1.0.3 A __fabsd128 F __fabsd32 F __fabsd64 F __finited128 F __finited32 F __finited64 F __fpclassifyd128 F __fpclassifyd32 F __fpclassifyd64 F __isfinited128 F __isfinited32 F __isfinited64 F __signbitd128 F __signbitd32 F __signbitd64 F isfinited128 F isfinited32 F isfinited64 F LIBDFP_1.0.9 LIBDFP_1.0.9 A __issignalingd128 F __issignalingd32 F __issignalingd64 F issignalingd128 F issignalingd32 F issignalingd64 F llogbd128 F llogbd32 F llogbd64 F llquantexpd128 F llquantexpd32 F llquantexpd64 F quantumd128 F quantumd32 F quantumd64 F roundevend128 F roundevend32 F roundevend64 F LIBDFP_PRIVATE LIBDFP_PRIVATE A __decoded128 F __decoded32 F __decoded64 F __fe_dec_getround F __fe_dec_setround F __fmt_d128 F __fmt_d32 F __fmt_d64 F libdfp-1.0.17/tests/000077500000000000000000000000001504475242000142055ustar00rootroot00000000000000libdfp-1.0.17/tests/Makefile000066400000000000000000000075231504475242000156540ustar00rootroot00000000000000libdfp_c_tests = test-printf test-amort test-decode test-inexact-exception \ test-strtod test-cast-to-overflow test-numdigits test-get_digits \ test-fenv test-bfp-conversions test-type-conversions test-wchar \ test-getexp test-setexp test-left_justify test-cast-to-underflow \ test-fpclassify-d32 test-fpclassify-d64 test-fpclassify-d128 \ test-fabs-d32 test-fabs-d64 test-fabs-d128 \ test-copysign-d32 test-copysign-d64 test-copysign-d128 \ test-quantum-d32 test-quantum-d64 test-quantum-d128 \ test-quantize-d32 test-quantize-d64 test-quantize-d128 \ test-samequantum-d32 test-samequantum-d64 test-samequantum-d128 \ test-logb-d32 test-logb-d64 test-logb-d128 \ test-llquantexp-d32 test-llquantexp-d64 test-llquantexp-d128 \ test-isnan-d32 test-isnan-d64 test-isnan-d128 \ test-isnan_internal-d32 test-isnan_internal-d64 test-isnan_internal-d128 \ test-isinf-d32 test-isinf-d64 test-isinf-d128 \ test-isfinite-d32 test-isfinite-d64 test-isfinite-d128 \ test-issignaling-d32 test-issignaling-d64 test-issignaling-d128 \ test-ceil-d32 test-ceil-d64 test-ceil-d128 \ test-floor-d32 test-floor-d64 test-floor-d128 \ test-nearbyint-d32 test-nearbyint-d64 test-nearbyint-d128 \ test-round-d32 test-round-d64 test-round-d128 \ test-roundeven-d32 test-roundeven-d64 test-roundeven-d128 \ test-trunc-d32 test-trunc-d64 test-trunc-d128 \ test-isgreater-d32 test-isgreater-d64 test-isgreater-d128 \ test-isgreaterequal-d32 test-isgreaterequal-d64 test-isgreaterequal-d128 \ test-isless-d32 test-isless-d64 test-isless-d128 \ test-islessequal-d32 test-islessequal-d64 test-islessequal-d128 \ test-rint-d32 test-rint-d64 test-rint-d128 \ test-lround-d32 test-lround-d64 test-lround-d128 \ test-llround-d32 test-llround-d64 test-llround-d128 \ test-lrint-d32 test-lrint-d64 test-lrint-d128 \ test-llrint-d32 test-llrint-d64 test-llrint-d128 \ test-isnormal-d32 test-isnormal-d64 test-isnormal-d128 \ test-signbit-d32 test-signbit-d64 test-signbit-d128 \ test-fmin-d32 test-fmin-d64 test-fmin-d128 \ test-fmax-d32 test-fmax-d64 test-fmax-d128 \ test-fdim-d32 test-fdim-d64 test-fdim-d128 \ test-isunordered-d32 test-isunordered-d64 test-isunordered-d128 \ test-islessgreater-d32 test-islessgreater-d64 test-islessgreater-d128 \ test-ldexp-d32 test-ldexp-d64 test-ldexp-d128 \ test-fmaxmag-d32 test-fmaxmag-d64 test-fmaxmag-d128 \ test-fminmag-d32 test-fminmag-d64 test-fminmag-d128 \ test-math-macros test-strfrom \ test-nextup-d32 test-nextup-d64 test-nextup-d128 \ test-nextdown-d32 test-nextdown-d64 test-nextdown-d128 ifeq ($(libdfp-has-timode),yes) libdfp_c_tests += test-fix test-float endif include $(top_srcdir)/tests/Makefile.autotest libdfp_c_autotests = $(foreach test, $(libdfp-auto-tests), $(foreach type, d32 d64 d128, test-$(test)-$(type))) $(addsuffix .out,$(libdfp_c_autotests)) : test-extra-opts += -u $(basename $^).ulp libdfp_c_tests += $(libdfp_c_autotests) test-%-d%: $(addsuffix .os,$@) $(CC) $(CFLAGS) $(sysdeps-CFLAGS) $(GLIBC_LIBS) -L$(top_builddir)/ -ldfp $(top_builddir)/$^ -o $@ test-%-d32.c: %.input $(PYTHON) $(top_srcdir)/tests/gen-libdfp-tests.py -t decimal32 $^ > $(top_builddir)/$@ test-%-d64.c: %.input $(PYTHON) $(top_srcdir)/tests/gen-libdfp-tests.py -t decimal64 $^ > $(top_builddir)/$@ test-%-d128.c: %.input $(PYTHON) $(top_srcdir)/tests/gen-libdfp-tests.py -t decimal128 $^ > $(top_builddir)/$@ ulps-file = $(shell find $(sysdep_dirs:%=$(top_srcdir)/%/) \ -name libdfp-test-ulps | head -1) libdfp-test-ulps.h: $(ulps-file) $(PYTHON) $(top_srcdir)/tests/gen-libdfp-ulps.py $< -o $@ # Add the ULP file generation explicity rule $(addprefix $(objpfx), $(libdfp_c_tests)): $(top_builddir)/libdfp-test-ulps.h regen-ulps: for i in $(libdfp-auto-tests); do \ echo "test $$i"; \ cat test-$$i-*.ulp; \ echo; \ done > ulps .PHONY: regen-ulps libdfp-1.0.17/tests/Makefile.autotest000066400000000000000000000002261504475242000175140ustar00rootroot00000000000000# The is a generated file from gen-auto-dfp-tests libdfp-auto-tests = cos acos sin log log10 log1p exp exp2 pow fmod nextafter nexttoward ilogb llogb libdfp-1.0.17/tests/README000066400000000000000000000000451504475242000150640ustar00rootroot00000000000000In order to debug do the following: libdfp-1.0.17/tests/TODO000066400000000000000000000003631504475242000146770ustar00rootroot00000000000000 test-param.c: Have it automate checking the return values and use scaffold.c for outputting failure cases. use genddtbls.c to output a table and compare the results to `ddlogtbls.c'. This is a good exercise of the frexp and num-digits code. libdfp-1.0.17/tests/acos.input000066400000000000000000000050571504475242000162220ustar00rootroot00000000000000# name acos # arg1 decimal # ret decimal 0.0 1570796e-6 decimal32 0.0 1570796326794897e-15 decimal64 0.0 1570796326794896619231321691639751e-33 decimal128 -0.0 1570796e-6 decimal32 -0.0 1570796326794897e-15 decimal64 -0.0 1570796326794896619231321691639751e-33 decimal128 1000000e-6 0.0 decimal32 1000000000000000e-15 0.0 decimal64 1000000000000000000000000000000000e-33 0.0 decimal128 -1000000e-6 3141593e-6 decimal32 -1000000000000000e-15 3141592653589793e-15 decimal64 -1000000000000000000000000000000000e-33 3141592653589793238462643383279503e-33 decimal128 5000000e-7 1047198e-6 decimal32 5000000000000000e-16 1047197551196598e-15 decimal64 5000000000000000000000000000000000e-34 1047197551196597746154214461093168e-33 decimal128 -5000000e-7 2094395e-6 decimal32 -5000000000000000e-16 2094395102393195e-15 decimal64 -5000000000000000000000000000000000e-34 2094395102393195492308428922186335e-33 decimal128 7500000e-7 7227342e-7 decimal32 7500000000000000e-16 7227342478134156e-16 decimal64 7500000000000000000000000000000000e-34 7227342478134156111783773526413334e-34 decimal128 2000000e-23 1570796e-6 decimal32 2000000000000000e-32 1570796326794897e-15 decimal64 2000000000000000000000000000000000e-50 1570796326794896599231321691639751e-33 decimal128 6250000e-8 1508256e-6 decimal32 6250000000000000e-17 1508255564998405e-15 decimal64 6250000000000000000000000000000000e-35 1508255564998405228430720054743371e-33 decimal128 libdfp-1.0.17/tests/auto-dfp-test-in000066400000000000000000000172111504475242000172320ustar00rootroot00000000000000# Some test cases adapted or taken from glibc. acos 0 acos -0 acos 1 acos -1 acos 0.5 acos -0.5 acos 0.75 acos 2e-17 acos 0.0625 cos 0 cos 1 cos 2 cos 3 cos 4 cos 5 cos 6 cos 7 cos 8 cos 9 cos 10 cos 3.14 cos 11e-18 cos 19e-18 cos 199e-18 cos 1.57079697 cos -1.57079697 sin 0 sin 1 sin 2 sin 3 sin 4 sin 5 sin 6 sin 7 sin 8 sin 9 sin 10 sin 0 sin 3.14 exp 0 exp -0 exp 1 exp 2 exp 3 exp 0.75 exp 50.0 exp 88.72269439697265625 exp 709.75 exp 1000.0 exp 710 exp -1234 exp 7.104758600739439421412058095484099e+02 exp 1e5 exp max exp -7.4444006192138124e+02 exp -7.478834155849699527607299387454987e+02 exp -max exp -11342.8125 exp -1.135513711193302405888516659615561e+04 exp -7.084134674072265625e+02 exp -7.08428070068359375e+02 exp -7.084029388427734375e+02 exp -7.084029388427734375e+02 exp -7.08413543701171875e+02 exp -7.0842193603515625e+02 exp -7.08417449951171875e+02 exp -7.084441375732421875e+02 exp -7.084123992919921875e+02 exp -7.0862353515625e+02 exp -7.08672119140625e+02 exp -7.08845947265625e+02 exp 1e-3 exp -1e-3 exp 1e-6 exp -1e-6 exp 1e-9 exp -1e-9 exp 1e-12 exp -1e-12 exp 1e-15 exp -1e-15 exp 1e-18 exp -1e-18 exp 1e-30 exp -1e-30 exp 1e-180 exp -1e-180 exp 1e-3333 exp -1e-3333 exp 8.872283172607421875e+01 exp 8.872283935546875e+01 exp -8.73365478515625e+01 exp -8.733654022216796875e+01 exp 7097827128933839730962063185870647e-31 exp 0 exp -0 exp 1 exp 2 exp 3 exp 0.75 exp 50.0 exp 88.72269439697265625 exp 709.75 exp NaN exp Inf exp -Inf exp 14149 exp -14144 exp 2.3025 exp 1.151 exp 1.152 exp 1.1512 exp 1.1519 'exp sNaN NaN exp -3.682289518100338225623039593608091e6132 log 0.75 log 1 log 2.718281828459045235360287471352662 log 3.141592653589793238462643383279503 log 2 log 10 log Nan 'log sNaN NaN log inf log 0 log -1 log 9.998098361200220e11 log 7.998098361200220e11 log 9.99999999999999999999999999999999e-6144 log10 1 log10 0.1 log10 0.01 log10 0.001 log10 10 log10 100 log10 1000 log10 1.1e-09 log10 2.718281828459045235360287471352662 log10 3.141592653589793238462643383279503 log10 0.75 log10 NaN 'log10 sNaN NaN log10 Inf log10 0.0 log10 -1.0 log1p 0 log1p -0 log1p -0.25 log1p -0.875 log1p 1.718281828459045235360287471352662 log1p 3.141592653589793238462643383279503 log1p 2 log1p 10 log1p NaN 'log1p sNaN NaN log1p Inf log1p -1.0 log1p -2.0 # Handle the common IEEE 754-2019 special cases of pow listed in 9.2.1. pow 2 0 pow 2 -0 pow 0 -1 pow -0 -1 pow 0 -Inf pow -0 -Inf pow 0 Inf pow -0 Inf pow 0 3 pow -0 3 pow -1 Inf pow -1 -Inf pow 1 NaN pow 1 3 pow 0.9 Inf pow 1.1 Inf pow -1.1 Inf pow 0.9 -Inf pow 1.1 -Inf pow -1.1 -Inf pow Inf -0.1 pow Inf 0.1 pow -Inf -1 pow -Inf 3 pow -Inf -4 pow -Inf 4 pow 2 -1279 pow 2 -1278.9 pow 1e-398 -1e-398 pow 1.2345678 1.2345678 pow 1.234567890123456 1.234567890123456 pow 3.234567890123456 0.2345678901234567 pow 1.000000000000001 -2147483648 pow 1.000000000000001 -4294967296 # LONG_MAX+1, the test suite will round up for decimal32/64. pow 1.000000000000001 9223372036854775807 pow 3.19034302541825200e13 -1.55493546491461400e00 pow 1.08507545139287500e04 -1.98586216955218000e00 pow 1.96877857924400000e09 -5.38711002611281000e01 pow 4.98084050185682800e00 8.31505582817438000e01 pow 2.64943091197714100e09 6.31392470927920100e01 pow 3.41000000000000000e01 1.95000000000000000e01 pow 9.99509773402153700e14 -8.07157546418230000e-01 pow 9.99809836120022000e11 -6.23247928248448100e-01 pow 2 1255 pow 2 1265 pow 2 -9.999999999999999e-01 pow 2 -1 pow 2 -1.000000000000001 pow 2 5.203966097332200e384 pow 2 4.611686018427389e18 pow 2 4.611686018427388e18 pow 2 1e17 nextafter -min -1 nextafter -min 0 nextafter min 1 nextafter min 0 nextafter min min nextafter max max nextafter min -inf nextafter min inf nextafter -min -inf nextafter -min inf nextafter -2e-398 -1 nextafter -max max nextafter inf -inf nextafter -inf inf nextafter 0 -0 nextafter 0 inf nextafter 0 -inf nextafter NaN NaN nextafter 0 NaN nextafter NaN 0 nextafter 1 0 nextafter -1 0 nextafter -1 -2 nextafter 1234567 -inf nextafter 1234567 +inf nextafter -1234567 -inf nextafter -1234567 +inf nexttoward -min -1 nexttoward -min 0 nexttoward min 1 nexttoward min 0 nexttoward min min nexttoward max max nexttoward min -inf nexttoward min inf nexttoward -min -inf nexttoward -min inf nexttoward -2e-398 -1 nexttoward -max max nexttoward inf -inf nexttoward -inf inf nexttoward 0 -0 nexttoward 0 inf nexttoward 0 -inf nexttoward NaN NaN nexttoward 0 NaN nexttoward NaN 0 nexttoward 1 0 nexttoward -1 0 nexttoward -1 -2 nexttoward 1234567 -inf nexttoward 1234567 +inf nexttoward -1234567 -inf nexttoward -1234567 +inf nexttoward 1234567 1234567.00000000000000000000001 nexttoward 1234567.000001 1234567.00000000000000000000001 nexttoward 1234567.000001 1234566.99999999999999999999999 ilogb inf ilogb -inf ilogb NaN ilogb 0 ilogb -0 ilogb 1.0 ilogb 10.76 ilogb 1024.0 ilogb 20000.001 ilogb 400032.003 ilogb 1E32 ilogb 1.56E32 ilogb -1.56E32 ilogb 1E-32 ilogb 1.54E-32 ilogb -1.54E-32 ilogb 156E32 ilogb -156E32 ilogb 154E-32 ilogb -154E-32 ilogb 1.542332E124 ilogb -1.542332E124 ilogb 1.542332E-124 ilogb -1.542332E-124 ilogb 15423.32E124 ilogb -15423.32E124 ilogb 15423.32E-124 ilogb -15423.32E-124 ilogb 1.9433E1024 ilogb -1.9433E1024 ilogb 1.9433E-1024 ilogb -1.9433E-1024 ilogb 194338E1024 ilogb -194338E1024 ilogb 194338E-1024 ilogb -194338E-1024 ilogb 1.00000000000000000E-01 ilogb 9.99999999999999900E-02 ilogb 9.99999999999999800E-02 ilogb 9.99999999999999700E-02 ilogb 9.99999999999999600E-02 ilogb 9.99999999999999500E-02 ilogb 9.99999999999999400E-02 ilogb 9.99999999999999300E-02 ilogb 9.99999999999999200E-02 ilogb 9.99999999999999100E-02 ilogb 9.99999999999999000E-02 ilogb 9.99999999999998900E-02 ilogb 9.99999999999998800E-02 ilogb 9.99999999999998700E-02 ilogb 9.99999999999998600E-02 ilogb 9.99999999999998500E-02 ilogb min ilogb max ilogb -min ilogb -max llogb inf llogb -inf llogb NaN llogb 0 llogb -0 llogb 1.0 llogb 10.76 llogb 1024.0 llogb 20000.001 llogb 400032.003 llogb 1E32 llogb 1.56E32 llogb -1.56E32 llogb 1E-32 llogb 1.54E-32 llogb -1.54E-32 llogb 156E32 llogb -156E32 llogb 154E-32 llogb -154E-32 llogb 1.542332E124 llogb -1.542332E124 llogb 1.542332E-124 llogb -1.542332E-124 llogb 15423.32E124 llogb -15423.32E124 llogb 15423.32E-124 llogb -15423.32E-124 llogb 1.9433E1024 llogb -1.9433E1024 llogb 1.9433E-1024 llogb -1.9433E-1024 llogb 194338E1024 llogb -194338E1024 llogb 194338E-1024 llogb -194338E-1024 llogb 1.00000000000000000E-01 llogb 9.99999999999999900E-02 llogb 9.99999999999999800E-02 llogb 9.99999999999999700E-02 llogb 9.99999999999999600E-02 llogb 9.99999999999999500E-02 llogb 9.99999999999999400E-02 llogb 9.99999999999999300E-02 llogb 9.99999999999999200E-02 llogb 9.99999999999999100E-02 llogb 9.99999999999999000E-02 llogb 9.99999999999998900E-02 llogb 9.99999999999998800E-02 llogb 9.99999999999998700E-02 llogb 9.99999999999998600E-02 llogb 9.99999999999998500E-02 llogb min llogb max llogb -min llogb -max exp2 1255 exp2 1265 exp2 -9.999999999999999e-01 exp2 -1 exp2 -1.000000000000001 exp2 5.203966097332200e384 exp2 4.611686018427389e18 exp2 4.611686018427388e18 exp2 1e17 fmod Inf Inf fmod 1 Inf fmod Inf 1 fmod NaN NaN fmod 1 NaN fmod NaN 1 fmod 1.234567 1.234567 fmod 1.234567 0 fmod 1.234567 1e1 fmod 1e20 1.234567 fmod 1e20 1.234567891234567891234567891234567 fmod 9e20 1.234567891234567891234567891234567 fmod 9.000000000000000000000000000000001e20 1.234567891234567891234567891234567 fmod 9.000000000000000000000000000000001e20 9.000000000000000000000000000000002 fmod 9.000000000000000000000000000000001e6115 9.000000000000000000000000000000002 fmod -9.000000000000000000000000000000001e6115 9.000000000000000000000000000000002 fmod -9.000000000000000000000000000000001e6115 9.000000000000000000000000000000002e-6115 fmod 1e20 1234e-6176 fmod 1.234567891234567891234567891234567 1234e-6176 libdfp-1.0.17/tests/ceil.input000066400000000000000000000041431504475242000162040ustar00rootroot00000000000000# name ceil # arg1 decimal # ret decimal Inf Inf NO_INEXACT_EXCEPTION -Inf -Inf NO_INEXACT_EXCEPTION NaN NaN NO_INEXACT_EXCEPTION sNaN NaN NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.1 1.0 NO_INEXACT_EXCEPTION 0.25 1.0 NO_INEXACT_EXCEPTION 0.625 1.0 NO_INEXACT_EXCEPTION -0.1 -0.0 NO_INEXACT_EXCEPTION -0.25 -0.0 NO_INEXACT_EXCEPTION -0.625 -0.0 NO_INEXACT_EXCEPTION 97152.5 97153.0 NO_INEXACT_EXCEPTION -97152.5 -97152.0 NO_INEXACT_EXCEPTION -370495.5 -370495.0 NO_INEXACT_EXCEPTION -370496.25 -370496.0 NO_INEXACT_EXCEPTION -370496.5 -370496.0 NO_INEXACT_EXCEPTION -370496.75 -370496.0 NO_INEXACT_EXCEPTION -370497.5 -370497.0 NO_INEXACT_EXCEPTION 2097152.5 2097153.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.5 -2097152.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370495.5 -3599627370495.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.25 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.5 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.75 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370497.5 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -4503599627370495.5 -4503599627370495.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.25 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.5 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.75 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370497.5 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION libdfp-1.0.17/tests/copysign.input000066400000000000000000000023761504475242000171310ustar00rootroot00000000000000# name copysign # arg1 decimal # arg2 decimal # ret decimal 0.0 4 0.0 0.0 -4 -0.0 -0.0 4 0.0 -0.0 -4 -0.0 Inf 0.0 Inf Inf -0.0 -Inf -Inf 0.0 Inf -Inf -0.0 -Inf 0.0 Inf 0.0 0.0 -0.0 -0.0 -0.0 Inf 0.0 -0.0 -0.0 -0.0 0.0 NaN 0.0 0.0 -NaN -0.0 -0.0 NaN 0.0 -0.0 -NaN -0.0 NaN 0.0 NaN NaN -0.0 -NaN -NaN 0.0 NaN -NaN -0.0 -NaN DEC_MIN DEC_SUBNORMAL_MIN DEC_MIN DEC_MIN -DEC_SUBNORMAL_MIN -DEC_MIN -DEC_MIN DEC_SUBNORMAL_MIN DEC_MIN -DEC_MIN -DEC_SUBNORMAL_MIN -DEC_MIN DEC_SUBNORMAL_MIN DEC_MAX DEC_SUBNORMAL_MIN DEC_SUBNORMAL_MIN -DEC_MAX -DEC_SUBNORMAL_MIN -DEC_SUBNORMAL_MIN DEC_MAX DEC_SUBNORMAL_MIN -DEC_SUBNORMAL_MIN -DEC_MAX -DEC_SUBNORMAL_MIN DEC_MAX DEC_MIN DEC_MAX DEC_MAX -DEC_MIN -DEC_MAX -DEC_MAX DEC_MIN DEC_MAX -DEC_MAX -DEC_MIN -DEC_MAX libdfp-1.0.17/tests/cos.input000066400000000000000000000114261504475242000160560ustar00rootroot00000000000000# name cos # arg1 decimal # ret decimal 0.0 1000000e-6 decimal32 0.0 1000000000000000e-15 decimal64 0.0 1000000000000000000000000000000000e-33 decimal128 1000000e-6 5403023e-7 decimal32 1000000000000000e-15 5403023058681397e-16 decimal64 1000000000000000000000000000000000e-33 5403023058681397174009366074429766e-34 decimal128 2000000e-6 -4161468e-7 decimal32 2000000000000000e-15 -4161468365471424e-16 decimal64 2000000000000000000000000000000000e-33 -4161468365471423869975682295007622e-34 decimal128 3000000e-6 -9899925e-7 decimal32 3000000000000000e-15 -9899924966004455e-16 decimal64 3000000000000000000000000000000000e-33 -9899924966004454572715727947312613e-34 decimal128 4000000e-6 -6536436e-7 decimal32 4000000000000000e-15 -6536436208636119e-16 decimal64 4000000000000000000000000000000000e-33 -6536436208636119146391681830977504e-34 decimal128 5000000e-6 2836622e-7 decimal32 5000000000000000e-15 2836621854632263e-16 decimal64 5000000000000000000000000000000000e-33 2836621854632262644666391715135573e-34 decimal128 6000000e-6 9601703e-7 decimal32 6000000000000000e-15 9601702866503660e-16 decimal64 6000000000000000000000000000000000e-33 9601702866503660205456522979229244e-34 decimal128 7000000e-6 7539023e-7 decimal32 7000000000000000e-15 7539022543433046e-16 decimal64 7000000000000000000000000000000000e-33 7539022543433046381411975217191820e-34 decimal128 8000000e-6 -1455000e-7 decimal32 8000000000000000e-15 -1455000338086135e-16 decimal64 8000000000000000000000000000000000e-33 -1455000338086135258688413818311947e-34 decimal128 9000000e-6 -9111303e-7 decimal32 9000000000000000e-15 -9111302618846770e-16 decimal64 9000000000000000000000000000000000e-33 -9111302618846769883682947111811653e-34 decimal128 1000000e-5 -8390715e-7 decimal32 1000000000000000e-14 -8390715290764525e-16 decimal64 1000000000000000000000000000000000e-32 -8390715290764524522588639478240648e-34 decimal128 3140000e-6 -9999987e-7 decimal32 3140000000000000e-15 -9999987317275395e-16 decimal64 3140000000000000000000000000000000e-33 -9999987317275395452851143063450500e-34 decimal128 1100000e-23 1000000e-6 decimal32 1100000000000000e-32 1000000000000000e-15 decimal64 1100000000000000000000000000000000e-50 9999999999999999999999999999999999e-34 decimal128 1900000e-23 1000000e-6 decimal32 1900000000000000e-32 1000000000000000e-15 decimal64 1900000000000000000000000000000000e-50 9999999999999999999999999999999998e-34 decimal128 1990000e-22 1000000e-6 decimal32 1990000000000000e-31 1000000000000000e-15 decimal64 1990000000000000000000000000000000e-49 9999999999999999999999999999999802e-34 decimal128 1570797e-6 -6732051e-13 decimal32 1570796970000000e-15 -6432051033807243e-22 decimal64 1570796970000000000000000000000000e-33 -6432051033807243279437736389943794e-40 decimal128 -1570797e-6 -6732051e-13 decimal32 -1570796970000000e-15 -6432051033807243e-22 decimal64 -1570796970000000000000000000000000e-33 -6432051033807243279437736389943794e-40 decimal128 libdfp-1.0.17/tests/debug-test.sh000066400000000000000000000005061504475242000166050ustar00rootroot00000000000000#!/bin/bash if test -z "$1"; then echo "$1 must be the test-*.conf file name you wish to debug." fi source ./debug-test.conf source ./$1 # Depending on whether a [system|standalone] loader or a non-installed glibc # build's loader this will be invoked differently. $DBG -x ${GDB_SCRIPT} -d ${LIBDFP_SRC} ${APP_OR_LOADER} libdfp-1.0.17/tests/decode.h000066400000000000000000000027661504475242000156140ustar00rootroot00000000000000/* Prototypes for decode functions, which output the DPD declets. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef _DFP_DECODE_H #define _DFP_DECODE_H #include __BEGIN_DECLS /* char * should ref a 14 byte char array, +0,000,000E+0\0 */ extern char * decoded32 (_Decimal32, char*); /* char * should ref a 26 byte char array, +0,000,000,000,000,000E+0\0 */ extern char * decoded64 (_Decimal64, char*); /* char * should ref a 50 byte char array, * * +0,000,000,000,000,000,000,000,000,000,000,000E+0\0 */ extern char * decoded128 (_Decimal128, char*); __END_DECLS #endif /* _DFP_DECODE_H */ libdfp-1.0.17/tests/exp.input000066400000000000000000000516611504475242000160730ustar00rootroot00000000000000# name exp # arg1 decimal # ret decimal 0.0 1000000e-6 decimal32 0.0 1000000000000000e-15 decimal64 0.0 1000000000000000000000000000000000e-33 decimal128 -0.0 1000000e-6 decimal32 -0.0 1000000000000000e-15 decimal64 -0.0 1000000000000000000000000000000000e-33 decimal128 1000000e-6 2718282e-6 decimal32 1000000000000000e-15 2718281828459045e-15 decimal64 1000000000000000000000000000000000e-33 2718281828459045235360287471352662e-33 decimal128 2000000e-6 7389056e-6 decimal32 2000000000000000e-15 7389056098930650e-15 decimal64 2000000000000000000000000000000000e-33 7389056098930650227230427460575008e-33 decimal128 3000000e-6 2008554e-5 decimal32 3000000000000000e-15 2008553692318767e-14 decimal64 3000000000000000000000000000000000e-33 2008553692318766774092852965458172e-32 decimal128 7500000e-7 2117000e-6 decimal32 7500000000000000e-16 2117000016612675e-15 decimal64 7500000000000000000000000000000000e-34 2117000016612674668545369819837096e-33 decimal128 5000000e-5 5184706e15 decimal32 5000000000000000e-14 5184705528587072e6 decimal64 5000000000000000000000000000000000e-32 5184705528587072464087453322933485e-12 decimal128 8872269e-5 3402316e32 decimal32 8872269439697266e-14 3402331266231621e23 decimal64 8872269439697265625000000000000000e-32 3402331266231607749375541347722904e5 decimal128 7097500e-4 Inf decimal32 7097500000000000e-13 1739836873264161e293 decimal64 7097500000000000000000000000000000e-31 1739836873264160557698252711673830e275 decimal128 1000000e-3 Inf decimal32 1000000000000000e-12 Inf decimal64 1000000000000000000000000000000000e-30 1970071114017046993888879352243323e401 decimal128 7100000e-4 Inf decimal32 7100000000000000e-13 2233994766161711e293 decimal64 7100000000000000000000000000000000e-31 2233994766161711031253644458116810e275 decimal128 -1234000e-3 0.0 decimal32 -1234000000000000e-12 0.0 decimal64 -1234000000000000000000000000000000e-30 1203952440437273201311895135159203e-569 decimal128 7104759e-4 Inf decimal32 7104758600739439e-13 3595386269724480e293 decimal64 7104758600739439421412058095484099e-31 3595386269724631774265856613277907e275 decimal128 1000000e-1 Inf decimal32 1000000000000000e-10 Inf decimal64 1000000000000000000000000000000000e-28 Inf decimal128 9999999e90 Inf decimal32 9999999999999999e369 Inf decimal64 9999999999999999999999999999999999e6111 Inf decimal128 -7444401e-4 0.0 decimal32 -7444400619213812e-13 4940705865224391e-339 decimal64 -7444400619213812400000000000000000e-31 4940705865224193460226337210676724e-357 decimal128 -7478834e-4 0.0 decimal32 -7478834155849700e-13 1578917740697657e-340 decimal64 -7478834155849699527607299387454987e-31 1578917740697731417303966661189996e-358 decimal128 -9999999e90 0.0 decimal32 -9999999999999999e369 0.0 decimal64 -9999999999999999999999999999999999e6111 0.0 decimal128 -1134281e-2 0.0 decimal32 -1134281250000000e-11 0.0 decimal64 -1134281250000000000000000000000000e-29 7570455078276118388348144762673341e-4960 decimal128 -1135514e-2 0.0 decimal32 -1135513711193302e-11 0.0 decimal64 -1135513711193302405888516659615561e-29 3362103143112093465682151959637205e-4965 decimal128 -7084135e-4 0.0 decimal32 -7084134674072266e-13 2187460397180013e-323 decimal64 -7084134674072265625000000000000000e-31 2187460397180095119797047732266077e-341 decimal128 -7084281e-4 0.0 decimal32 -7084280700683594e-13 2155749747683218e-323 decimal64 -7084280700683593750000000000000000e-31 2155749747683271699881701833497257e-341 decimal128 -7084029e-4 0.0 decimal32 -7084029388427734e-13 2210612882304510e-323 decimal64 -7084029388427734375000000000000000e-31 2210612882304427124515075321369232e-341 decimal128 -7084029e-4 0.0 decimal32 -7084029388427734e-13 2210612882304510e-323 decimal64 -7084029388427734375000000000000000e-31 2210612882304427124515075321369232e-341 decimal128 -7084135e-4 0.0 decimal32 -7084135437011719e-13 2187293513562310e-323 decimal64 -7084135437011718750000000000000000e-31 2187293513562365153620460957794984e-341 decimal128 -7084219e-4 0.0 decimal32 -7084219360351562e-13 2169013827777251e-323 decimal64 -7084219360351562500000000000000000e-31 2169013827777142923230824089144660e-341 decimal128 -7084174e-4 0.0 decimal32 -7084174499511719e-13 2178766064292522e-323 decimal64 -7084174499511718750000000000000000e-31 2178766064292576933025959998259110e-341 decimal128 -7084441e-4 0.0 decimal32 -7084441375732422e-13 2121389012947053e-323 decimal64 -7084441375732421875000000000000000e-31 2121389012947079220475945579844299e-341 decimal128 -7084124e-4 0.0 decimal32 -7084123992919922e-13 2189798105203413e-323 decimal64 -7084123992919921875000000000000000e-31 2189798105203440023559612871086413e-341 decimal128 -7086235e-4 0.0 decimal32 -7086235351562500e-13 1773000813495138e-323 decimal64 -7086235351562500000000000000000000e-31 1773000813495138341896762654427956e-341 decimal128 -7086721e-4 0.0 decimal32 -7086721191406250e-13 1688920388691629e-323 decimal64 -7086721191406250000000000000000000e-31 1688920388691628915622983854837587e-341 decimal128 -7088459e-4 0.0 decimal32 -7088459472656250e-13 1419438508038591e-323 decimal64 -7088459472656250000000000000000000e-31 1419438508038590624283021175406082e-341 decimal128 1000000e-9 1001001e-6 decimal32 1000000000000000e-18 1001000500166708e-15 decimal64 1000000000000000000000000000000000e-36 1001000500166708341668055753993058e-33 decimal128 -1000000e-9 9990005e-7 decimal32 -1000000000000000e-18 9990004998333750e-16 decimal64 -1000000000000000000000000000000000e-36 9990004998333749916680553571676560e-34 decimal128 1000000e-12 1000001e-6 decimal32 1000000000000000e-21 1000001000000500e-15 decimal64 1000000000000000000000000000000000e-39 1000001000000500000166666708333342e-33 decimal128 -1000000e-12 9999990e-7 decimal32 -1000000000000000e-21 9999990000005000e-16 decimal64 -1000000000000000000000000000000000e-39 9999990000004999998333333749999917e-34 decimal128 1000000e-15 1000000e-6 decimal32 1000000000000000e-24 1000000001000000e-15 decimal64 1000000000000000000000000000000000e-42 1000000001000000000500000000166667e-33 decimal128 -1000000e-15 1000000e-6 decimal32 -1000000000000000e-24 9999999990000000e-16 decimal64 -1000000000000000000000000000000000e-42 9999999990000000004999999998333333e-34 decimal128 1000000e-18 1000000e-6 decimal32 1000000000000000e-27 1000000000001000e-15 decimal64 1000000000000000000000000000000000e-45 1000000000001000000000000500000000e-33 decimal128 -1000000e-18 1000000e-6 decimal32 -1000000000000000e-27 9999999999990000e-16 decimal64 -1000000000000000000000000000000000e-45 9999999999990000000000005000000000e-34 decimal128 1000000e-21 1000000e-6 decimal32 1000000000000000e-30 1000000000000001e-15 decimal64 1000000000000000000000000000000000e-48 1000000000000001000000000000000500e-33 decimal128 -1000000e-21 1000000e-6 decimal32 -1000000000000000e-30 9999999999999990e-16 decimal64 -1000000000000000000000000000000000e-48 9999999999999990000000000000005000e-34 decimal128 1000000e-24 1000000e-6 decimal32 1000000000000000e-33 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-51 1000000000000000001000000000000000e-33 decimal128 -1000000e-24 1000000e-6 decimal32 -1000000000000000e-33 1000000000000000e-15 decimal64 -1000000000000000000000000000000000e-51 9999999999999999990000000000000000e-34 decimal128 1000000e-36 1000000e-6 decimal32 1000000000000000e-45 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-63 1000000000000000000000000000001000e-33 decimal128 -1000000e-36 1000000e-6 decimal32 -1000000000000000e-45 1000000000000000e-15 decimal64 -1000000000000000000000000000000000e-63 9999999999999999999999999999990000e-34 decimal128 0.0 1000000e-6 decimal32 1000000000000000e-195 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-213 1000000000000000000000000000000000e-33 decimal128 -0.0 1000000e-6 decimal32 -1000000000000000e-195 1000000000000000e-15 decimal64 -1000000000000000000000000000000000e-213 1000000000000000000000000000000000e-33 decimal128 0.0 1000000e-6 decimal32 0.0 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-3366 1000000000000000000000000000000000e-33 decimal128 -0.0 1000000e-6 decimal32 -0.0 1000000000000000e-15 decimal64 -1000000000000000000000000000000000e-3366 1000000000000000000000000000000000e-33 decimal128 8872283e-5 3402793e32 decimal32 8872283172607422e-14 3402798537411853e23 decimal64 8872283172607421875000000000000000e-32 3402798537411848656744258800385898e5 decimal128 8872284e-5 3402827e32 decimal32 8872283935546875e-14 3402824498803436e23 decimal64 8872283935546875000000000000000000e-32 3402824498803435655770351387134116e5 decimal128 -8733655e-5 1175488e-44 decimal32 -8733654785156250e-14 1175490705608918e-53 decimal64 -8733654785156250000000000000000000e-32 1175490705608918448187140061705067e-71 decimal128 -8733654e-5 1175500e-44 decimal32 -8733654022216797e-14 1175499673925489e-53 decimal64 -8733654022216796875000000000000000e-32 1175499673925490725276713840582465e-71 decimal128 7097827e-4 Inf decimal32 7097827128933840e-13 1797693134862322e293 decimal64 7097827128933839730962063185870647e-31 1797693134862273217839649630899964e275 decimal128 0.0 1000000e-6 decimal32 0.0 1000000000000000e-15 decimal64 0.0 1000000000000000000000000000000000e-33 decimal128 -0.0 1000000e-6 decimal32 -0.0 1000000000000000e-15 decimal64 -0.0 1000000000000000000000000000000000e-33 decimal128 1000000e-6 2718282e-6 decimal32 1000000000000000e-15 2718281828459045e-15 decimal64 1000000000000000000000000000000000e-33 2718281828459045235360287471352662e-33 decimal128 2000000e-6 7389056e-6 decimal32 2000000000000000e-15 7389056098930650e-15 decimal64 2000000000000000000000000000000000e-33 7389056098930650227230427460575008e-33 decimal128 3000000e-6 2008554e-5 decimal32 3000000000000000e-15 2008553692318767e-14 decimal64 3000000000000000000000000000000000e-33 2008553692318766774092852965458172e-32 decimal128 7500000e-7 2117000e-6 decimal32 7500000000000000e-16 2117000016612675e-15 decimal64 7500000000000000000000000000000000e-34 2117000016612674668545369819837096e-33 decimal128 5000000e-5 5184706e15 decimal32 5000000000000000e-14 5184705528587072e6 decimal64 5000000000000000000000000000000000e-32 5184705528587072464087453322933485e-12 decimal128 8872269e-5 3402316e32 decimal32 8872269439697266e-14 3402331266231621e23 decimal64 8872269439697265625000000000000000e-32 3402331266231607749375541347722904e5 decimal128 7097500e-4 Inf decimal32 7097500000000000e-13 1739836873264161e293 decimal64 7097500000000000000000000000000000e-31 1739836873264160557698252711673830e275 decimal128 NaN NaN decimal32 NaN NaN decimal64 NaN NaN decimal128 Inf Inf decimal32 Inf Inf decimal64 Inf Inf decimal128 -Inf 0.0 decimal32 -Inf 0.0 decimal64 -Inf 0.0 decimal128 1414900e-2 Inf decimal32 1414900000000000e-11 Inf decimal64 1414900000000000000000000000000000e-29 6801809260978894125530050851897730e6111 decimal128 -1414400e-2 0.0 decimal32 -1414400000000000e-11 0.0 decimal64 -1414400000000000000000000000000000e-29 2181965906542011255118719873241674e-6176 decimal128 2302500e-6 9999149e-6 decimal32 2302500000000000e-15 9999149106262604e-15 decimal64 2302500000000000000000000000000000e-33 9999149106262604455206130723755850e-33 decimal128 1151000e-6 3161353e-6 decimal32 1151000000000000e-15 3161352682222409e-15 decimal64 1151000000000000000000000000000000e-33 3161352682222409342403957885337912e-33 decimal128 1152000e-6 3164516e-6 decimal32 1152000000000000e-15 3164515616107997e-15 decimal64 1152000000000000000000000000000000e-33 3164515616107996726032190949457327e-33 decimal128 1151200e-6 3161985e-6 decimal32 1151200000000000e-15 3161985015990123e-15 decimal64 1151200000000000000000000000000000e-33 3161985015990122816395531440447715e-33 decimal128 1151900e-6 3164199e-6 decimal32 1151900000000000e-15 3164199180368437e-15 decimal64 1151900000000000000000000000000000e-33 3164199180368436600815438056279405e-33 decimal128 -Inf 0.0 decimal32 -Inf 0.0 decimal64 -3682289518100338225623039593608091e6099 0.0 decimal128 sNaN NaN libdfp-1.0.17/tests/exp2.input000066400000000000000000000050571504475242000161530ustar00rootroot00000000000000# name exp2 # arg1 decimal # ret decimal 1255000e-3 Inf decimal32 1255000000000000e-12 6203611013093233e362 decimal64 1255000000000000000000000000000000e-30 6203611013093232561305308537104181e344 decimal128 1265000e-3 Inf decimal32 1265000000000000e-12 6352497677407470e365 decimal64 1265000000000000000000000000000000e-30 6352497677407470142776635941994681e347 decimal128 -1000000e-6 5000000e-7 decimal32 -9999999999999999e-16 5000000000000000e-16 decimal64 -9999999999999999000000000000000000e-34 5000000000000000346573590279972667e-34 decimal128 -1000000e-6 5000000e-7 decimal32 -1000000000000000e-15 5000000000000000e-16 decimal64 -1000000000000000000000000000000000e-33 5000000000000000000000000000000000e-34 decimal128 -1000000e-6 5000000e-7 decimal32 -1000000000000001e-15 4999999999999997e-16 decimal64 -1000000000000001000000000000000000e-33 4999999999999996534264097200274654e-34 decimal128 Inf Inf decimal32 5203966097332200e369 Inf decimal64 5203966097332200000000000000000000e351 Inf decimal128 4611686e12 Inf decimal32 4611686018427389e3 Inf decimal64 4611686018427389000000000000000000e-15 Inf decimal128 4611686e12 Inf decimal32 4611686018427388e3 Inf decimal64 4611686018427388000000000000000000e-15 Inf decimal128 1000000e11 Inf decimal32 1000000000000000e2 Inf decimal64 1000000000000000000000000000000000e-16 Inf decimal128 libdfp-1.0.17/tests/fabs.input000066400000000000000000000007441504475242000162060ustar00rootroot00000000000000# name fabs # arg0 decimal # ret decimal 0 0 -0 0 42 42 -42 42 -2.718281828459045235360287471352662 2.718281828459045235360287471352662 Inf Inf -Inf Inf NaN NaN -NaN NaN libdfp-1.0.17/tests/fdim.input000066400000000000000000000066061504475242000162150ustar00rootroot00000000000000# name fdim # arg1 decimal # arg2 decimal # ret decimal 0.0 1.0 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 0.0 0.0 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 0.0 -1.0 1.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 3.0 1.0 2.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 3.0 0.0 3.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 3.0 -1.0 4.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -3.0 1.0 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -3.0 0.0 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -3.0 -1.0 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -3.0 -4.0 1.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED DEC_SUBNORMAL_MIN DEC_SUBNORMAL_MIN 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -DEC_SUBNORMAL_MIN -DEC_SUBNORMAL_MIN 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED DEC_SUBNORMAL_MIN 0.0 DEC_SUBNORMAL_MIN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 0.0 -DEC_SUBNORMAL_MIN DEC_SUBNORMAL_MIN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED DEC_MIN DEC_MIN 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -DEC_MIN -DEC_MIN 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -DEC_MIN DEC_MIN 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED DEC_MAX DEC_MAX 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED DEC_MAX -DEC_MAX Inf OVERFLOW_EXCEPTION ERRNO_ERANGE -DEC_MAX -DEC_MAX 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -DEC_MAX DEC_MAX 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED Inf 3.0 Inf NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED Inf -3.0 Inf NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -Inf 3.0 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -Inf -3.0 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 3.0 -Inf Inf NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -3.0 -Inf Inf NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 3.0 Inf 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -3.0 Inf 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED Inf Inf 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED Inf -Inf Inf NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -Inf Inf 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -Inf -Inf 0.0 NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 0.0 NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 0.0 -NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 0.0 sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED 0.0 -sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED NaN 0.0 NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -NaN 0.0 NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED sNaN 0.0 NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -sNaN 0.0 NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED NaN NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED NaN -NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED NaN sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED NaN -sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -NaN NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -NaN -NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -NaN sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -NaN -sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED sNaN NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED sNaN -NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED sNaN sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED sNaN -sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -sNaN NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -sNaN -NaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -sNaN sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED -sNaN -sNaN NaN NO_OVERFLOW_EXCEPTION ERRNO_UNCHANGED libdfp-1.0.17/tests/floor.input000066400000000000000000000051251504475242000164120ustar00rootroot00000000000000# name floor # arg1 decimal # ret decimal Inf Inf NO_INEXACT_EXCEPTION -Inf -Inf NO_INEXACT_EXCEPTION NaN NaN NO_INEXACT_EXCEPTION sNaN NaN NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.2 0.0 NO_INEXACT_EXCEPTION -0.2 -1.0 NO_INEXACT_EXCEPTION 0.5 0.0 NO_INEXACT_EXCEPTION -0.5 -1.0 NO_INEXACT_EXCEPTION 0.8 0.0 NO_INEXACT_EXCEPTION -0.8 -1.0 NO_INEXACT_EXCEPTION 1.5 1.0 NO_INEXACT_EXCEPTION -1.5 -2.0 NO_INEXACT_EXCEPTION 0.1 0.0 NO_INEXACT_EXCEPTION 0.25 0.0 NO_INEXACT_EXCEPTION 0.625 0.0 NO_INEXACT_EXCEPTION -0.1 -1.0 NO_INEXACT_EXCEPTION -0.25 -1.0 NO_INEXACT_EXCEPTION -0.625 -1.0 NO_INEXACT_EXCEPTION 97152.5 97152.0 NO_INEXACT_EXCEPTION -97152.5 -97153.0 NO_INEXACT_EXCEPTION -370495.5 -370496.0 NO_INEXACT_EXCEPTION -370496.25 -370497.0 NO_INEXACT_EXCEPTION -370496.5 -370497.0 NO_INEXACT_EXCEPTION -370496.75 -370497.0 NO_INEXACT_EXCEPTION -370497.5 -370498.0 NO_INEXACT_EXCEPTION 2097152.5 2097152.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.5 -2097153.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370495.5 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.25 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.5 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.75 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370497.5 -3599627370498.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -4503599627370495.5 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.25 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.5 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.75 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370497.5 -4503599627370498.0 decimal128 NO_INEXACT_EXCEPTION libdfp-1.0.17/tests/fmax.input000066400000000000000000000017031504475242000162220ustar00rootroot00000000000000# name fmax # arg1 decimal # arg2 decimal # ret decimal 0.0 0.0 0.0 2.0 1.0 2.0 1.0 2.0 2.0 2.0 2.0 2.0 -1.0 -2.0 -1.0 -2.0 -1.0 -1.0 -2.0 -2.0 -2.0 2.123 1.86743 2.123 1.86744 1.86743 1.86744 # special cases Inf -1000.0 Inf Inf -1.0 Inf Inf -0.0 Inf Inf 0.0 Inf Inf 1.0 Inf Inf 1000.0 Inf Inf Inf Inf -1000.0 Inf Inf -Inf Inf Inf -1.0 Inf Inf -0.0 Inf Inf 0.0 Inf Inf 1.0 Inf Inf 1000.0 Inf Inf -Inf -Inf -Inf -Inf -1000.0 -1000.0 -Inf -1.0 -1.0 -Inf -0.0 -0.0 -Inf 0.0 0.0 -Inf 1.0 1.0 -Inf 1000.0 1000.0 -1000.0 -Inf -1000.0 -1.0 -Inf -1.0 -0.0 -Inf -0.0 0.0 -Inf 0.0 1.0 -Inf 1.0 1000.0 -Inf 1000.0 Inf -Inf Inf NaN -Inf -Inf NaN -1000.0 -1000.0 NaN -1.0 -1.0 NaN -0.0 -0.0 NaN 0.0 0.0 NaN 1.0 1.0 NaN 1000.0 1000.0 NaN Inf Inf NaN NaN NaN -Inf NaN -Inf -1000.0 NaN -1000.0 -1.0 NaN -1.0 -0.0 NaN -0.0 0.0 NaN 0.0 1.0 NaN 1.0 1000.0 NaN 1000.0 Inf NaN Inf -NaN -NaN NaN +NaN -NaN NaN -NaN +NaN NaNlibdfp-1.0.17/tests/fmaxmag.input000066400000000000000000000004621504475242000167100ustar00rootroot00000000000000# name fmaxmag # arg1 decimal # arg2 decimal # ret decimal 1E+6 1E+5 1E+6 -1E+6 1E+5 -1E+6 2 2E+2 2E+2 0 0 0 100 101 101 100 -100 100 -100 100 100 NaN 100 100 100 NaN 100 NaN NaN NaN Inf 100 Inf 100 Inf Inf -Inf 100 -Inf Inf -Inf Inf libdfp-1.0.17/tests/fmin.input000066400000000000000000000017241504475242000162230ustar00rootroot00000000000000# name fmin # arg1 decimal # arg2 decimal # ret decimal 0.0 0.0 0.0 2.0 1.0 1.0 1.0 2.0 1.0 2.0 2.0 2.0 -1.0 -2.0 -2.0 -2.0 -1.0 -2.0 -2.0 -2.0 -2.0 2.123 1.86743 1.86743 1.86744 1.86743 1.86743 # special cases Inf -1000.0 -1000.0 Inf -1.0 -1.0 Inf -0.0 -0.0 Inf 0.0 0.0 Inf 1.0 1.0 Inf 1000.0 1000.0 Inf Inf Inf -1000.0 Inf -1000.0 -Inf Inf -Inf -1.0 Inf -1.0 -0.0 Inf -0.0 0.0 Inf 0.0 1.0 Inf 1.0 1000.0 Inf 1000.0 -Inf -Inf -Inf -Inf -1000.0 -Inf -Inf -1.0 -Inf -Inf -0.0 -Inf -Inf 0.0 -Inf -Inf 1.0 -Inf -Inf 1000.0 -Inf -1000.0 -Inf -Inf -1.0 -Inf -Inf -0.0 -Inf -Inf 0.0 -Inf -Inf 1.0 -Inf -Inf 1000.0 -Inf -Inf Inf -Inf -Inf NaN -Inf -Inf NaN -1000.0 -1000.0 NaN -1.0 -1.0 NaN -0.0 -0.0 NaN 0.0 0.0 NaN 1.0 1.0 NaN 1000.0 1000.0 NaN Inf Inf NaN NaN NaN -Inf NaN -Inf -1000.0 NaN -1000.0 -1.0 NaN -1.0 -0.0 NaN -0.0 0.0 NaN 0.0 1.0 NaN 1.0 1000.0 NaN 1000.0 Inf NaN Inf -NaN -NaN NaN +NaN -NaN NaN -NaN +NaN NaN libdfp-1.0.17/tests/fminmag.input000066400000000000000000000004601504475242000167040ustar00rootroot00000000000000# name fminmag # arg1 decimal # arg2 decimal # ret decimal 1E+6 -1E+5 -1E+5 -1E+6 1E+5 1E+5 2 2E+2 2 0 0 0 100 101 100 100 -100 -100 -100 100 -100 NaN 100 100 100 NaN 100 NaN NaN NaN Inf 100 100 100 Inf 100 -Inf 100 100 Inf -Inf -Inf libdfp-1.0.17/tests/fmod.input000066400000000000000000000172721504475242000162240ustar00rootroot00000000000000# name fmod # arg1 decimal # arg2 decimal # ret decimal Inf Inf NaN decimal32 Inf Inf NaN decimal64 Inf Inf NaN decimal128 1e0 Inf NaN decimal32 1e0 Inf NaN decimal64 1e0 Inf NaN decimal128 Inf 1e0 NaN decimal32 Inf 1e0 NaN decimal64 Inf 1e0 NaN decimal128 NaN NaN NaN decimal32 NaN NaN NaN decimal64 NaN NaN NaN decimal128 1e0 NaN NaN decimal32 1e0 NaN NaN decimal64 1e0 NaN NaN decimal128 NaN 1e0 NaN decimal32 NaN 1e0 NaN decimal64 NaN 1e0 NaN decimal128 1234567e-6 1234567e-6 0e0 decimal32 1234567e-6 1234567e-6 0e0 decimal64 1234567e-6 1234567e-6 0e0 decimal128 1234567e-6 0e0 NaN decimal32 1234567e-6 0e0 NaN decimal64 1234567e-6 0e0 NaN decimal128 1234567e-6 1e1 1234567e-6 decimal32 1234567e-6 1e1 1234567e-6 decimal64 1234567e-6 1e1 1234567e-6 decimal128 1e20 1234567e-6 630123e-6 decimal32 1e20 1234567e-6 630123e-6 decimal64 1e20 1234567e-6 630123e-6 decimal128 1e20 1234568e-6 1183368e-6 decimal32 1e20 1234567891234568e-15 506096379506288e-15 decimal64 1e20 1234567891234567891234567891234567e-33 62969670062976889063028062963501e-32 decimal128 9e20 1234568e-6 773768e-6 decimal32 9e20 1234567891234568e-15 851163741852888e-15 decimal64 9e20 1234567891234567891234567891234567e-33 728998740729648450734254101776822e-33 decimal128 9000000e14 1234568e-6 773768e-6 decimal32 9000000000000000e5 1234567891234568e-15 851163741852888e-15 decimal64 9000000000000000000000000000000001e-13 1234567891234567891234567891234567e-33 728998740729748450734254101776822e-33 decimal128 9000000e14 9000000e-6 0e0 decimal32 9000000000000000e5 9000000000000000e-15 0e0 decimal64 9000000000000000000000000000000001e-13 9000000000000000000000000000000002e-33 8999999999999900000000000000000002e-33 decimal128 Inf 9000000e-6 NaN decimal32 Inf 9000000000000000e-15 NaN decimal64 9000000000000000000000000000000001e6082 9000000000000000000000000000000002e-33 1381763338611437869554592950140936e-33 decimal128 -Inf 9000000e-6 NaN decimal32 -Inf 9000000000000000e-15 NaN decimal64 -9000000000000000000000000000000001e6082 9000000000000000000000000000000002e-33 -1381763338611437869554592950140936e-33 decimal128 -Inf 0e-101 NaN decimal32 -Inf 0e-398 NaN decimal64 -9000000000000000000000000000000001e6082 9000000000000000000000000000000002e-6148 -2404172701662560340299218209124232e-6148 decimal128 1e20 0e-101 NaN decimal32 1e20 0e-398 NaN decimal64 1e20 1234e-6176 442e-6176 decimal128 1234568e-6 0e-101 NaN decimal32 1234567891234568e-15 0e-398 NaN decimal64 1234567891234567891234567891234567e-33 1234e-6176 312e-6176 decimal128 libdfp-1.0.17/tests/fpclassify.input000066400000000000000000000024171504475242000174350ustar00rootroot00000000000000# name fpclassify # arg1 decimal # ret int Inf FP_INFINITE -Inf FP_INFINITE NaN FP_NAN -NaN FP_NAN sNaN FP_NAN -sNaN FP_NAN DEC_SUBNORMAL_MIN FP_SUBNORMAL -DEC_SUBNORMAL_MIN FP_SUBNORMAL 1E-100 FP_SUBNORMAL decimal32 -1E-100 FP_SUBNORMAL decimal32 1E-96 FP_SUBNORMAL decimal32 -1E-96 FP_SUBNORMAL decimal32 1E-397 FP_SUBNORMAL decimal64 -1E-397 FP_SUBNORMAL decimal64 1E-384 FP_SUBNORMAL decimal64 -1E-384 FP_SUBNORMAL decimal64 1E-6175 FP_SUBNORMAL decimal128 -1E-6175 FP_SUBNORMAL decimal128 1E-6144 FP_SUBNORMAL decimal128 -1E-6144 FP_SUBNORMAL decimal128 DEC_MIN FP_NORMAL -DEC_MIN FP_NORMAL 1E-94 FP_NORMAL decimal32 -1E-94 FP_NORMAL decimal32 1E-382 FP_NORMAL decimal64 -1E-382 FP_NORMAL decimal64 1E-6142 FP_NORMAL decimal128 -1E-6142 FP_NORMAL decimal128 DEC_MAX FP_NORMAL -DEC_MAX FP_NORMAL 0.1 FP_NORMAL -0.1 FP_NORMAL 10E1 FP_NORMAL -10E1 FP_NORMAL 0.0 FP_ZERO -0.0 FP_ZERO 0E10 FP_ZERO -0E10 FP_ZERO 0E-3 FP_ZERO -0E-3 FP_ZERO libdfp-1.0.17/tests/gdb_start_address.py000066400000000000000000000017731504475242000202450ustar00rootroot00000000000000# gdb_start_address.py created by Ryan S. Arnold, April 2011. No # attribution required or necessary to use/reuse/copy/modify this # function/script. import re class StartAddress(gdb.Function): """Returns the start address of a library or executable from info proc mappings.""" def __init__(self): super (StartAddress, self).__init__ ("start_address") def invoke(self, library): mappings = gdb.execute("info proc mappings", to_string=True) lines = mappings.split('\n') to_mappings = "" for line in lines: if (to_mappings != "true"): if (re.search("Start Addr", line)): to_mappings = "true" continue else: # The first match is the .text segment. Make sure to # match on "/libdfp-1.0.7.so" when passed "libdfp" and # not on "/libdfp" in the following example: # /home/ryanarn/libdfp/build64_power6/libdfp-1.0.7.so if (re.search("/" + library.string() + "[^/]*$", line)): chunks = line.split() return int(str(chunks[0]),16) return 0x0 StartAddress () libdfp-1.0.17/tests/gen-auto-dfp-tests.c000066400000000000000000000654611504475242000200130ustar00rootroot00000000000000/* Generator for Decimal Floating Point (TS 18661 part 2) functions Copyright (C) 2019 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* gcc gen-auto-dfp-tests.c -Wall -O2 -o gen-auto-dfp-tests -lmpfr -lgmp -ldecnumber This framework is similar in spirit to the glibc math benchmarking program. As of writing, no readily available, and licensing compatible frameworks exist to produce correctly rounded results for the majority of decimal IEEE 754 functions. For trigonometric and transcendental functions, we defer to mpfr. It is generally accepted as the oracle. We choose a sufficiently high precision and round. This should give us results correct to 1ULP. This is not perfect, but it gives us a starting point. For functions which can be correctly computed via libdecnumber, we defer. Ideally, we could copy and extend the glibc version, but in practice most if it is highly tailored to the nuances of binary floating point. TODO: Correctly round decimal values from MPFR TODO: Correctly rounded values for all 5 rounding modes For now, we take as input a file which lists tests in form: # Optional comment lines func arg1 arg2 ... argN For each function, we generate file: auto-dfp-test-out-FUNC of the form: func arg1 arg2 ... argN = func format arg1 arg2 ... argN : out1 out2 ... outN */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include /* libbid uses the level of precision converting. Let's start here. */ #define DFP_MPFR_PREC 512 #define DFP_DEFAULT_RND MPFR_RNDN /* Use libdecnumber as the oracle for testing functions where possible. */ #define DECNUMDIGITS 34 #include #include /* TODO: only mpfr now. Assuming libdecnumber is sufficiently correctly for for the functions it natively supports (e.g <= 1ULP), we can use it to bootstrap/verify the mpfr usage below for functions libdecnumber does not natively support. */ enum func_type { mpfr_d_d, mpfr_dd_d, dec_dd_d, dec_dD_d, dec_d_si, dec_d_sl, _func_type_cnt }; /* Table 3.6 in IEEE 754-2008 */ struct dec_fmt_param { int p; int emax; int emin; int emin_normal; const char *name; int dctxtiv; /* Second argument to decContextDefault */ mpfr_t frmax; mpfr_t frmin; }; enum dec_type { decimal32, decimal64, decimal128, decimal_fmt_cnt, }; struct dec_fmt_param dec_fmt_param[] = { {7, 96, -95 - 6, -95, "decimal32", DEC_INIT_DECIMAL32}, {16, 384, -383 - 15, -383, "decimal64", DEC_INIT_DECIMAL64}, {34, 6144, -6143 - 33, -6143, "decimal128", DEC_INIT_DECIMAL128}, }; #define DEC_MAX_FMT_STR (10) /* Keep the results as strings. */ typedef struct decimal_value { /* Enough to hold e for the largest type */ char v[3][1 + 34 + 2 + 4 + 1]; } decimal_value_t; #define DEC_MAX_STR (int)(sizeof(((decimal_value_t*)0)->v[0]) - 1) typedef union result { int si; long long int di; decimal_value_t d_; } result_t; struct testf; typedef struct test { int line; const char *stest; /* allocated */ mpfr_t frin[decimal_fmt_cnt]; mpfr_t frin2[decimal_fmt_cnt]; decNumber din[decimal_fmt_cnt]; decNumber din2[decimal_fmt_cnt]; int excepts; result_t input; result_t input2; /* TODO: only up to two args of same type supported now. */ result_t result; /* TODO: only one type supported now. */ struct testf *tf; } test_t; union func_ptr { int (*mpfr_d_d) (mpfr_t out, mpfr_t const in, mpfr_rnd_t rnd); int (*mpfr_dd_d) (mpfr_t out, mpfr_t const in1, mpfr_t const in2, mpfr_rnd_t rnd); decNumber* (*dec_dd_d) (decNumber*, const decNumber*, const decNumber*, decContext*); void (*dec_d_si) (char*, const decNumber*, decContext*); void (*dec_d_li) (char*, const decNumber*, decContext*); }; typedef struct testf { enum func_type ftype; union func_ptr func; const char *fname; size_t testno; test_t *tests; char **compat_tests; /* TODO: holdover tests while transitioning */ size_t compat_testno; size_t compat_chr_skip; } testf_t; typedef void (*special_init_func)(const char *v, mpfr_t in[decimal_fmt_cnt], decNumber din[decimal_fmt_cnt]); typedef struct special { const char *name; special_init_func set_val; } special_t; /* There is no real oracle for ilog10, so one is made with decnumber. */ void decnumber_ilog10(char *out, const decNumber *in, decContext *ctxt) { if (decNumberIsZero (in)) strcpy (out, "FP_ILOGB0"); else if (decNumberIsInfinite (in) && decNumberIsNegative (in)) strcpy (out, "INT_MIN"); else if (decNumberIsInfinite (in) && !decNumberIsNegative (in)) strcpy (out, "INT_MAX"); else if (decNumberIsNaN (in)) strcpy (out, "FP_ILOGBNAN"); else sprintf (out,"%d", in->digits + in->exponent - 1); } /* Likewise for the effectively identical llog10. */ void decnumber_llog10(char *out, const decNumber *in, decContext *ctxt) { if (decNumberIsZero (in)) strcpy (out, "FP_LLOGB0"); else if (decNumberIsInfinite (in) && decNumberIsNegative (in)) strcpy (out, "LONG_MIN"); else if (decNumberIsInfinite (in) && !decNumberIsNegative (in)) strcpy (out, "LONG_MAX"); else if (decNumberIsNaN (in)) strcpy (out, "FP_LLOGBNAN"); else sprintf (out,"%d", in->digits + in->exponent - 1); } /* This is the algorithm proposed in Nelson H.F. Beebe's The Mathematical-Function Computation Handbook. Note, that for decimal floating point, it requires 1 extra digit of precision beyond the input format for correctness (unlike binary float). */ decNumber * decNumberFmod(decNumber *result, const decNumber *x, const decNumber *y, decContext *ctxt) { decNumberZero (result); /* This requires 35 digits to correctly compute any <=34 digit remainder. */ if (decNumberIsSpecial (x) || decNumberIsSpecial(y) || decNumberIsZero(y)) { result->bits = DECNAN; return result; } /* The remainder may contain 1 extra digit. Add extra room for at least 1 more. */ struct { decNumber d; decNumberUnit extra; } r, yabs, xabs, cmp, yabs_scaled; int ny; decNumberAbs (&xabs.d, x, ctxt); decNumberAbs (&yabs.d, y, ctxt); decNumberCompare (result, &xabs.d, &yabs.d, ctxt); if (decNumberIsZero (result)) { decNumberCopySign (result, result, x); return result; } else if (result->bits & DECNEG) { decNumberCopy (result, x); return result; } /* All special cases accounted for, find the remainder. */ decNumberCopy (&r.d, &xabs.d); decNumberCopy (&yabs_scaled.d, &yabs.d); ny = yabs.d.exponent + yabs.d.digits - 1; /* Expand the precision to while computing the remainder. */ ctxt->digits = DECNUMDIGITS + 1; decNumberCompare (&cmp.d, &r.d, &yabs.d, ctxt); while (!(cmp.d.bits & DECNEG)) /* r >= yabs */ { int n = (r.d.exponent + r.d.digits - 1) - ny; /* Rescale yabs to the nearest power of 10 less than r. */ yabs_scaled.d.exponent = yabs.d.exponent + n; decNumberCompare (&cmp.d, &yabs_scaled.d, &r.d, ctxt); if (!decNumberIsZero (&cmp.d) && !(cmp.d.bits & DECNEG)) yabs_scaled.d.exponent--; decNumberSubtract (&r.d, &r.d, &yabs_scaled.d, ctxt); /* r = r - yabs_scaled */ decNumberCompare (&cmp.d, &r.d, &yabs.d, ctxt); /* cmp = r ? yabs */ } ctxt->digits = DECNUMDIGITS; decNumberNormalize (result, &r.d, ctxt); if (x->bits & DECNEG) result->bits |= DECNEG; return result; } void get_nan(const char *v, mpfr_t in[decimal_fmt_cnt], decNumber din[decimal_fmt_cnt]) { for(int i = 0; i < decimal_fmt_cnt; i++) { mpfr_init_set_si (in[i], 0, DFP_DEFAULT_RND); mpfr_set_nan (in[i]); mpfr_setsign (in[i], in[i], v[0] == '-' ? 1 : 0, DFP_DEFAULT_RND); decNumberZero(&din[i]); din[i].bits |= DECNAN | (v[0] == '-' ? DECNEG : 0); } } /* Add a mark to the payload. */ void get_snan(const char *v, mpfr_t in[decimal_fmt_cnt], decNumber din[decimal_fmt_cnt]) { for(int i = 0; i < decimal_fmt_cnt; i++) { mpfr_init_set_si (in[i], 0, DFP_DEFAULT_RND); mpfr_set_nan (in[i]); mpfr_setsign (in[i], in[i], v[0] == '-' ? 1 : 0, DFP_DEFAULT_RND); decNumberZero(&din[i]); din[i].bits |= DECNAN | DECSNAN | (v[0] == '-' ? DECNEG : 0); } } void get_min(const char *v, mpfr_t in[decimal_fmt_cnt], decNumber din[decimal_fmt_cnt]) { decNumber dtmp; decContext dctxt; decNumberZero (&dtmp); for(int i = 0; i < decimal_fmt_cnt; i++) { mpfr_init_set (in[i], dec_fmt_param[i].frmin, DFP_DEFAULT_RND); mpfr_setsign (in[i], in[i], v[0] == '-' ? 1 : 0, DFP_DEFAULT_RND); decContextDefault (&dctxt, dec_fmt_param[i].dctxtiv); decNumberNextPlus (&din[i], &dtmp, &dctxt); din[i].bits |= (v[0] == '-' ? DECNEG : 0); } } void get_max(const char *v, mpfr_t in[decimal_fmt_cnt], decNumber din[decimal_fmt_cnt]) { decNumber dtmp; decContext dctxt; decNumberZero (&dtmp); dtmp.bits |= DECINF; for(int i = 0; i < decimal_fmt_cnt; i++) { mpfr_init_set (in[i], dec_fmt_param[i].frmax, DFP_DEFAULT_RND); mpfr_setsign (in[i], in[i], v[0] == '-' ? 1 : 0, DFP_DEFAULT_RND); decContextDefault (&dctxt, dec_fmt_param[i].dctxtiv); decNumberNextMinus (&din[i], &dtmp, &dctxt); din[i].bits |= (v[0] == '-' ? DECNEG : 0); } } void get_inf(const char *v, mpfr_t in[decimal_fmt_cnt], decNumber din[decimal_fmt_cnt]) { for(int i = 0; i < decimal_fmt_cnt; i++) { mpfr_init (in[i]); mpfr_set_inf (in[i], v[0] == '-' ? -1 : 0); decNumberZero(&din[i]); din[i].bits |= DECINF | (v[0] == '-' ? DECNEG : 0); } } /* TODO: glibc libm punts NaN tests. Should we? sNaN requires some more though */ special_t dec_spec_vals[] = { { "nan", get_nan }, { "-nan", get_nan }, { "min", get_min }, { "-min", get_min }, { "max", get_max }, { "-max", get_max }, { "inf", get_inf }, { "-inf", get_inf }, {} }; #define DECL_TESTF_D_D(func) { mpfr_d_d, { .mpfr_d_d = mpfr_ ## func, }, \ #func, 0, NULL, NULL, 0, sizeof(#func) + 1 } #define DECL_TESTF_DD_D(func) { mpfr_dd_d, { .mpfr_dd_d = mpfr_ ## func, }, \ #func, 0, NULL, NULL, 0, sizeof(#func) + 1 } #define DECL_TESTF_DEC_DD_D(func, decname) \ { dec_dd_d, { .dec_dd_d = decNumber ## decname, }, \ #func, 0, NULL, NULL, 0, sizeof(#func) + 1 } #define DECL_TESTF_DEC_DD128_D(func, decname) \ { dec_dD_d, { .dec_dd_d = decNumber ## decname, }, \ #func, 0, NULL, NULL, 0, sizeof(#func) + 1 } #define DECL_TESTF_DEC_D_SI(func, decname) \ { dec_d_si, { .dec_d_si = decname, }, \ #func, 0, NULL, NULL, 0, sizeof(#func) + 1 } #define DECL_TESTF_DEC_D_SL(func, decname) \ { dec_d_sl, { .dec_d_si = decname, }, \ #func, 0, NULL, NULL, 0, sizeof(#func) + 1 } testf_t testlist[] = { DECL_TESTF_D_D(cos), DECL_TESTF_D_D(acos), DECL_TESTF_D_D(sin), DECL_TESTF_D_D(asin), DECL_TESTF_D_D(tan), DECL_TESTF_D_D(atan), DECL_TESTF_D_D(log), DECL_TESTF_D_D(log10), DECL_TESTF_D_D(log1p), DECL_TESTF_D_D(exp), DECL_TESTF_D_D(exp2), DECL_TESTF_DD_D(pow), /* Use a local implementation of fmod using decNumber and extended precision. binary fmod needs a huge amount of precision for correctness in decimal, and decNumberRemainder fails for sufficiently far apart values. */ DECL_TESTF_DEC_DD_D(fmod, Fmod), DECL_TESTF_DEC_DD_D(nextafter, NextToward), DECL_TESTF_DEC_DD128_D(nexttoward, NextToward), DECL_TESTF_DEC_D_SI(ilogb, decnumber_ilog10), DECL_TESTF_DEC_D_SL(llogb, decnumber_llog10), { } }; char * xstrdup(const char *in) { char * out = strdup (in); if (!out) error (EXIT_FAILURE, errno, "strdup"); return out; } void parse_next_val(mpfr_t frin[3], decNumber din[3], const char *val, char **endptr) { mpfr_t frin_tmp; char *decstr = xstrdup (val); *strchrnul (decstr,' ') = 0; // val may contain more than 1 value for (special_t *sv = &dec_spec_vals[0]; sv->name; sv++) if (!strcasecmp(sv->name, decstr)) { sv->set_val (val, frin, din); *endptr = (char*)&val[strlen(sv->name)]; free (decstr); return; } // Parse the value into libdecnumber. It handles special values. for (int fmt = 0; fmt < decimal_fmt_cnt; fmt++) { decContext dctxt; decContextDefault (&dctxt, dec_fmt_param[fmt].dctxtiv); decNumberFromString (&din[fmt], decstr, &dctxt); } free(decstr); /* For now, only accept decimal inputs as radix-2 operands can cause false errors if they fall between 2 dfp values. TODO: can rounding to the nearest radix-10 value solve these errors? e.g, the value taken from glibc libm test suite: exp 0x2.c5c85fdf473dep+8 exp 7097827128933839730962063185870647e-31 */ mpfr_init (frin_tmp); mpfr_strtofr (frin_tmp, val, endptr, 10, DFP_DEFAULT_RND); if (**endptr == 0 || **endptr == ' ') for (int fmt = 0; fmt < decimal_fmt_cnt; fmt++) { char str[128]; /* If the input is subnormal, round to the reduced number of digits when converting. */ mpfr_exp_t exp; mpfr_get_str(str, &exp, 10, dec_fmt_param[fmt].p - 1, frin_tmp, DFP_DEFAULT_RND); if (exp < dec_fmt_param[fmt].emin_normal && exp >= dec_fmt_param[fmt].emin) { mpfr_snprintf (str, sizeof(str) - 1, "%.*Re", exp - dec_fmt_param[fmt].emin - 1, frin_tmp); mpfr_init_set_str (frin[fmt], str, 0, DFP_DEFAULT_RND); } else if (exp < dec_fmt_param[fmt].emin) { /* Too small for the format. Round to zero and preserve sign. */ mpfr_set_zero(frin[fmt], mpfr_signbit(frin_tmp) ? -1 : 0); } else { /* This wins no awards, but round-trip values through strings to better approximate the _DecimalN value. */ mpfr_snprintf (str, sizeof(str) - 1, "%.*Re", dec_fmt_param[fmt].p - 1, frin_tmp); mpfr_init_set_str (frin[fmt], str, 0, DFP_DEFAULT_RND); } } else error (EXIT_FAILURE, errno, "Failed to convert: %s", val); mpfr_clear(frin_tmp); } void alloc_test(testf_t *tf, const char *val, char *test) { test_t *t = NULL; char *endptr = ""; tf->testno++; tf->tests = realloc (tf->tests, tf->testno * sizeof (tf->tests[0])); t = &tf->tests[tf->testno - 1]; if (!tf->tests) error (EXIT_FAILURE, errno, "realloc"); memset (t, 0, sizeof (*t)); t->stest = test; t->tf = tf; parse_next_val(t->frin, t->din, val, &endptr); if (*endptr == ' ') parse_next_val(t->frin2, t->din2, endptr+1, &endptr); } /* For now, only parse lines of the form: func value Add more complexity as required for testing. */ void parse_line(char *line, const char *filename, size_t lineno) { char *test = xstrdup (line); char *val = strchr (line, ' '); char *func = NULL; testf_t *t = NULL; bool passthru = false; if (!val) goto failure; func = line; *val = '\0'; val++; /* Don't process these, just pass these lines through. e.g for sNAN */ passthru = func[0] == '\''; if (passthru) func++; for (t = &testlist[0]; t->fname; t++) if (!strcmp (t->fname, func)) break; if (!t->fname) goto failure; if (!passthru) alloc_test (t, val, test); else { t->compat_testno++; t->compat_tests = realloc (t->compat_tests, sizeof(*t->compat_tests) * t->compat_testno); if (!t->compat_tests) error (EXIT_FAILURE, 0, "realloc failure"); t->compat_tests[t->compat_testno - 1] = test; } return; failure: error_at_line (EXIT_FAILURE, 0, filename, lineno, "failed to parse '%s'", test); if (test) free (test); }; /* Slightly misleading... round bfp to dfp result using default rounding mode. */ void round_result(mpfr_t in[decimal_fmt_cnt], decimal_value_t *out) { for (int i = 0; i < decimal_fmt_cnt; i++) { /* Handle 0 and inf cases. */ if (mpfr_nan_p (in[i])) sprintf (out->v[i], "%sNaN", mpfr_signbit (in[i]) ? "-" : ""); else if (mpfr_cmpabs (in[i], dec_fmt_param[i].frmax) > 0) sprintf (out->v[i], "%sInf", mpfr_signbit (in[i]) ? "-" : ""); else if (mpfr_cmpabs(dec_fmt_param[i].frmin, in[i]) > 0) sprintf (out->v[i], "%s0.0", mpfr_signbit (in[i]) ? "-" : ""); else { mpfr_exp_t exp; uintptr_t adj = mpfr_signbit (in[i]) ? 1 : 0; /* Remove implicit radix point by shifting the exponent per format */ mpfr_get_str (out->v[i], &exp, 10, dec_fmt_param[i].p, in[i], DFP_DEFAULT_RND); exp -= dec_fmt_param[i].p; /* Sanity and subnormal check. */ if (exp < dec_fmt_param[i].emin) { /* This should be a subnormal number. Determine how many decimals to clip and rewrite the string. */ if (exp > (dec_fmt_param[i].emin - dec_fmt_param[i].p)) { int dig = dec_fmt_param[i].p - (dec_fmt_param[i].emin - exp); mpfr_get_str (out->v[i], &exp, 10, dig, in[i], DFP_DEFAULT_RND); sprintf (out->v[i] + dig + adj, "e%d", (int)(exp - dig)); } else error(EXIT_FAILURE, 0, "Conversion failure. Subnormal value rounds to 0. %se%d", out->v[i], (int)exp); } else if (exp > dec_fmt_param[i].emax) error(EXIT_FAILURE, 0, "Conversion failure. Exponent out of range %d > %d", (int)exp, dec_fmt_param[i].emax); else sprintf (out->v[i] + dec_fmt_param[i].p + adj, "e%d", (int) exp); } } } void decnum_to_str(const decNumber *d, char *out) { if (decNumberIsNegative(d)) *out++ = '-'; if (decNumberIsSNaN(d)) strcpy (out, "sNaN"); else if (decNumberIsQNaN(d)) strcpy (out, "NaN"); else if (decNumberIsInfinite(d)) strcpy (out, "Inf"); else { decNumber e; decNumberCopyAbs(&e, d); e.exponent = 0; decNumberToString(&e, out); sprintf(&out[e.digits],"e%d",d->exponent); } } void compute(test_t *t) { switch (t->tf->ftype) { case mpfr_d_d: { mpfr_t tmp[decimal_fmt_cnt]; for (int fmt=0; fmt < decimal_fmt_cnt; fmt++) { mpfr_init (tmp[fmt]); t->tf->func.mpfr_d_d (tmp[fmt], t->frin[fmt], DFP_DEFAULT_RND); } round_result (t->frin, &t->input.d_); round_result (tmp, &t->result.d_); for (int fmt=0; fmt < decimal_fmt_cnt; fmt++) mpfr_clear (tmp[fmt]); } break; case mpfr_dd_d: { mpfr_t tmp[decimal_fmt_cnt]; for (int fmt=0; fmt < decimal_fmt_cnt; fmt++) { mpfr_init (tmp[fmt]); t->tf->func.mpfr_dd_d (tmp[fmt], t->frin[fmt], t->frin2[fmt], DFP_DEFAULT_RND); } round_result (t->frin, &t->input.d_); round_result (t->frin2, &t->input2.d_); round_result (tmp, &t->result.d_); for (int fmt=0; fmt < decimal_fmt_cnt; fmt++) mpfr_clear (tmp[fmt]); } break; case dec_dD_d: { /* A special case where the second argument is always _Decimal128. e.x nexttoward. */ for (int fmt=0; fmt < decimal_fmt_cnt; fmt++) { decContext c; decNumber r; decContextDefault(&c, dec_fmt_param[fmt].dctxtiv); t->tf->func.dec_dd_d (&r, &t->din[fmt], &t->din2[decimal128], &c); decnum_to_str(&t->din[fmt], t->input.d_.v[fmt]); decnum_to_str(&t->din2[decimal128], t->input2.d_.v[fmt]); decnum_to_str(&r, t->result.d_.v[fmt]); } } break; case dec_dd_d: { for (int fmt=0; fmt < decimal_fmt_cnt; fmt++) { decContext c; decNumber r; decContextDefault(&c, dec_fmt_param[fmt].dctxtiv); t->tf->func.dec_dd_d (&r, &t->din[fmt], &t->din2[fmt], &c); decnum_to_str(&t->din[fmt], t->input.d_.v[fmt]); decnum_to_str(&t->din2[fmt], t->input2.d_.v[fmt]); decnum_to_str(&r, t->result.d_.v[fmt]); } } break; case dec_d_sl: /* This has the same calling conventions as dec_d_si, fallthrough. */ case dec_d_si: { for (int fmt=0; fmt < decimal_fmt_cnt; fmt++) { decContext c; decContextDefault(&c, dec_fmt_param[fmt].dctxtiv); t->tf->func.dec_d_si (t->result.d_.v[fmt], &t->din[fmt], &c); decnum_to_str(&t->din[fmt], t->input.d_.v[fmt]); } } break; default: error (EXIT_FAILURE, 0, "Unknown function type %d", (int)t->tf->ftype); break; } } void init_fmt(void) { decimal_value_t d; /* get approximate maximum finite value in radix-2 */ for (int i = 0; i < decimal_fmt_cnt; i++) { int p = dec_fmt_param[i].p; /* TODO: add a tiny value e.g 1eMIN_FMT_EXP */ memset(d.v[i], '9', dec_fmt_param[i].p); sprintf(d.v[i] + p,"e%d",dec_fmt_param[i].emax - p + 1); mpfr_init_set_str(dec_fmt_param[i].frmax, d.v[i], 10, MPFR_RNDZ); sprintf(d.v[i],"1e%d",dec_fmt_param[i].emin); mpfr_init_set_str(dec_fmt_param[i].frmin, d.v[i], 10, MPFR_RNDZ); /* mpfr_printf("%.*Re\n", dec_fmt_param[i].p - 1, dec_fmt_param[i].frmin); */ /* mpfr_printf("%.*Re\n", dec_fmt_param[i].p - 1, dec_fmt_param[i].frmax); */ } } /* For the moment, recycle the existing *.input format until more meaningful refactoring can occur. Likewise, generate a makefile stub ensure these tests are built. */ void gen_output(const char *fprefix) { char fname[128]; FILE *out = stdout; bool debug = !strcmp (fprefix, "-"); FILE *automf = NULL; if (!debug) { automf = fopen ("Makefile.autotest", "w"); if (!automf) error (EXIT_FAILURE, 0, "Failed to open makefile file"); fprintf (automf, "# The is a generated file from gen-auto-dfp-tests\n" "libdfp-auto-tests ="); } for (testf_t *tf = &testlist[0]; tf->fname; tf++) { if (!tf->testno) continue; if (!debug) { snprintf (fname, sizeof (fname) - 1, "%s%s.input", fprefix, tf->fname); out = fopen (fname, "w"); fprintf (automf, " %s", tf->fname); } if (!out) error(EXIT_FAILURE, errno, "failed to open for writing %s", fname); char *argstr[_func_type_cnt] = { "# arg1 decimal\n# ret decimal", "# arg1 decimal\n# arg2 decimal\n# ret decimal", "# arg1 decimal\n# arg2 decimal\n# ret decimal", "# arg1 decimal\n# arg2 decimal128\n# ret decimal", "# arg1 decimal\n# ret int", "# arg1 decimal\n# ret longint", }; fprintf (out, "# name %s\n%s\n", tf->fname, argstr[tf->ftype]); for (int i = 0; i < tf->testno; i++) { test_t *t = &tf->tests[i]; /* fprintf (out, "%s\n", t->stest); */ for (int fmt = 0; fmt < decimal_fmt_cnt; fmt++) { switch (t->tf->ftype) { case dec_d_si: case dec_d_sl: case mpfr_d_d: /* fprintf (out, "= %s %s %s : %s\n", t->tf->fname, fmt_str[fmt], t->input.d_.v[fmt], t->result.d_.v[fmt]); */ fprintf (out, "%-*s %-*s %-*s\n", DEC_MAX_STR, t->input.d_.v[fmt], DEC_MAX_STR, t->result.d_.v[fmt], DEC_MAX_FMT_STR, dec_fmt_param[fmt].name); break; case dec_dd_d: case dec_dD_d: case mpfr_dd_d: /* fprintf (out, "= %s %s %s %s : %s\n", t->tf->fname, fmt_str[fmt], t->input.d_.v[fmt], t->input.d_.v[fmt], t->result.d_.v[fmt]); */ fprintf (out, "%-*s %-*s %-*s %-*s\n", DEC_MAX_STR, t->input.d_.v[fmt], DEC_MAX_STR, t->input2.d_.v[fmt], DEC_MAX_STR, t->result.d_.v[fmt], DEC_MAX_FMT_STR, dec_fmt_param[fmt].name); break; default: error (EXIT_FAILURE, 0, "Unhandled type %d", t->tf->ftype); break; } } } /* TODO: passthrough tests to transition to glibc style testing. */ for (int i = 0; i < tf->compat_testno; i++) fprintf (out, "%s\n", tf->compat_tests[i] + tf->compat_chr_skip); if (!debug) fclose(out); } if (automf) { fprintf (automf, "\n"); fclose (automf); } } int main(int args, char **argv) { FILE *in = NULL; char *line = NULL; size_t linelen = 0; size_t lineno = 0; ssize_t ilinelen; mpfr_set_default_prec( DFP_MPFR_PREC ); if (args < 3) error(EXIT_FAILURE, 0, "Usage %s: ", argv[0]); in = fopen (argv[1], "r"); if (!in) error (EXIT_FAILURE, errno, "Cannot open %s", argv[1]); init_fmt(); /* Generate tests */ while ( ((ilinelen = getline (&line, &linelen, in))) != -1) { lineno++; /* Ignore empty or comment lines */ if (!linelen || *line == '#' || *line == '\n') continue; /* chomp trailing whitespace/delimiter if any */ while (isspace(line[ilinelen - 1])) { line[ilinelen - 1] = '\0'; ilinelen--; } parse_line (line, argv[1], lineno); } /* Compute expected values. TODO: +/- 1ULP for now. */ for (testf_t *tf = &testlist[0]; tf->fname; tf++) for (int i = 0; i < tf->testno; i++) compute (&tf->tests[i]); /* Generate output */ gen_output(argv[2]); /* cleanup */ fclose (in); if (line) free (line); return EXIT_SUCCESS; } libdfp-1.0.17/tests/gen-libdfp-tests.py000077500000000000000000000311511504475242000177320ustar00rootroot00000000000000#!/usr/bin/env python3 import sys import re import os from optparse import OptionParser # Use CPP flags to guard tests which should not be # be on certain platforms (e.g sizeof(long int) != x cppcheckdict = { "ONLY_ON_4BYTE_LONG" : "(__SIZEOF_LONG__ == 4)", "ONLY_ON_8BYTE_LONG" : "(__SIZEOF_LONG__ == 8)" } # Decribes the evaluated function class Function: def __init__ (self): self.name = None self.args = [] self.ret = None self.ulp = False def ret_init_type (self): return self.ret.argtype def ret_type (self): return self.ret.type def ret_field (self): if self.ret.decfield: return "." + self.ret.decfield return "" def ret_printf (self): return self.ret.printf def arg_type (self, i): return self.args[i].argtype; # Describes an operation to perform class Operation: def __init__(self, line): self.args = [] self.ret = None self.extraflags = [] self.line = line self.cppchecks = [] # Describe a type handle in operations and functions definition class Type (object): def __init__(self, name, type, printf): self.name = name self.type = type self.printf = printf self.decfield = "" def parse_arg(self, arg): return arg class BoolType(Type): def __init__(self, name, type, printf): super(BoolType, self).__init__(name, type, printf) self.argtype = type def parse_arg (self, arg): if arg == "True": return 1 elif arg == "False": return 0 return arg; class IntegerType(Type): def __init__(self, name, type, printf): super(IntegerType, self).__init__(name, type, printf) self.argtype = type def parse_arg (self, arg): if "DEC_MIN_EXP_SUB" in arg: return arg.replace ("DEC_MIN_EXP_SUB", DECIMAL.minexpsub) if "DEC_MIN_EXP" in arg: return arg.replace ("DEC_MIN_EXP", DECIMAL.minexp) if "DEC_MAX_EXP" in arg: return arg.replace ("DEC_MAX_EXP", DECIMAL.maxexp) return arg class DecimalType(Type): # Regular expression to check for integer numbers and DEC[32|64|128]_[MAX|MIN] intnum_re = re.compile("([-|+]?[0-9]+$)|(-?DEC.*_(MAX|MIN))") def __init__(self, name, type, tname = "", suffix = "", decfield = "", maxvalue = "", minvalue = "", subnormal = "", maxexp = "", minexp = "", minexpsub = "", printf = "", argtype = ""): super(DecimalType, self).__init__(name, type, printf) self.tname = tname self.suffix = suffix self.decfield = decfield self.maxvalue = maxvalue self.minvalue = minvalue self.subnormal = subnormal self.minexp = minexp self.maxexp = maxexp self.minexpsub = minexpsub if not argtype: self.argtype = type else: self.argtype = argtype def parse_arg (self, arg): # NAN values if "NaN" in arg: return "{ .ieee_nan = { .c = 0x1f, .signaling_nan = %d, .negative = %d } }" \ % (int("s" in arg), int("-" in arg)) # Infinity if "Inf" in arg: prefix = "minus" if ("-" in arg) else "plus" return "{ .%s = %s_infty }" % (self.decfield, prefix) # Replace E[+-]DEC_[MAX|MIN]_EXP by a expected number, i.e, # 1E-DEC_MIN_EXP -> 1E-383 if "DEC_MAX_EXP" in arg: arg = arg.replace ("DEC_MAX_EXP", self.maxexp) if "DEC_MIN_EXP_SUB" in arg: arg = arg.replace ("DEC_MIN_EXP_SUB", self.minexpsub) if "DEC_MIN_EXP" in arg: arg = arg.replace ("DEC_MIN_EXP", self.minexp) # Macro fox max, min, tiny values if "DEC_MAX" in arg: arg = arg.replace ("DEC_MAX", self.maxvalue); if "DEC_MIN" in arg: arg = arg.replace ("DEC_MIN", self.minvalue); if "DEC_SUBNORMAL_MIN" in arg: arg = arg.replace ("DEC_SUBNORMAL_MIN", self.subnormal); # Normal value if not self.intnum_re.match (arg): arg += self.suffix return "{ .%s = %s }" % (self.decfield, arg) DecimalTypes = { "bool" : BoolType ("bool", "_Bool", printf = "%d"), "int" : IntegerType("int", "int", printf = "%i"), "longint" : IntegerType("longint", "long int", printf = "%li"), "llongint" : IntegerType("llongint", "long long int", printf = "%lli"), "decimal32" : DecimalType ("decimal32", "_Decimal32", "32", "DF", "sd", "DEC32_MAX", "DEC32_MIN", "DEC32_SUBNORMAL_MIN", "90", "95", "101", "%.7HgDF", "union ieee754r_Decimal32"), "decimal64" : DecimalType ("decimal64", "_Decimal64", "64", "DD", "dd", "DEC64_MAX", "DEC64_MIN", "DEC64_SUBNORMAL_MIN", "369", "383", "398", "%.16DgDD", "union ieee754r_Decimal64"), "decimal128" : DecimalType ("decimal128", "_Decimal128", "128", "DL", "td", "DEC128_MAX", "DEC128_MIN", "DEC128_SUBNORMAL_MIN", "6111", "6143", "6176", "%.34DDgDL", "union ieee754r_Decimal128") } DECIMAL = None # Parse the testname.input file returning a set of (Function, Operation) # Each file has headers (line starting with '#') describing the test # arguments and returns. It follows: # '#' name # '#' arg # '#' ret # # Each test operation is described by one line: # def parse_file (filename): file = open (filename, "r") lines = file.readlines() i = 0; # Parse the header with function description func = Function() for l in range (i, len(lines)): if not lines[l].rstrip().startswith ("#"): break fields = lines[l].split() if fields[1].startswith("name"): func.name = fields[2] if fields[1].startswith("arg"): if fields[2] == "decimal": func.args.append(DecimalTypes[fields[2] + DECIMAL.tname]) else: func.args.append(DecimalTypes[fields[2]]) elif fields[1].startswith("ret"): rettname = fields[2] if rettname == "decimal": rettname += DECIMAL.tname func.ret = DecimalTypes[rettname] i = i + 1 # Parse the inputs and expected result operations = [] expected_args = len (func.args) for l in range(i, len(lines)): i = i + 1 lines[l] = lines[l].strip() if not lines[l]: continue # Ignore commnets if lines[l].startswith ("#"): continue fields = lines[l].split() # Check if number of arguments is the expected one if len(fields) - 1 < expected_args: print ("warning: %s:%i: line %s not follow specified function" % \ (filename, l, lines[l])) continue # Split all further args in decimal or extraflags (e.g. excpetions) declist = [] extra_args = [] if (len(fields) - 1) > expected_args: for arg in fields[expected_args + 1 : ]: if arg.startswith("decimal"): declist.append(arg) else: extra_args.append(arg) # Check if the test applies to decimal type being tested if (len(declist) > 0): if DECIMAL.name not in declist: continue op = Operation(i) for oparg in range (0, expected_args): op.args.append(fields[oparg]) op.ret = fields[expected_args] for earg in extra_args: if earg in cppcheckdict.keys(): op.cppchecks.append(cppcheckdict[earg]) else: op.extraflags.append(earg) # Finally, if we ignore the results, coerce to a value # which won't make the compiler generate warnings: if "IGNORE_RESULT" in op.extraflags: if op.ret != "0": sys.stderr.write ("WARNING: ignored value coerced to 0 on line %d\n" % i) op.ret = "0" operations.append(op) return (func, operations) def print_header (func): print ("#ifndef __STDC_WANT_DEC_FP__") print ("# define __STDC_WANT_DEC_FP__") print ("#endif") print ("") print ("#define _GNU_SOURCE") print ("#include ") print ("#include ") print ("#include ") print ("#include ") print ("#include ") print ("#include ") print ("#include ") print ("#include ") print ("#include \"test-common.h\"") print ("#include ") print ("") # Macros required for test build print ("#define %s" % DECIMAL.name.upper()) print ("#define FLOAT %s" % DECIMAL.type) print ("#define FUNC(function) function ## %s" % ('d' + DECIMAL.tname)) print ("") print ("#include \"libdfp-test-ulps.h\"") print ("#include \"libdfp-test.c\"") def print_special_ctes (): print ("#ifndef DEC_INFINITY") print ("# define DEC_INFINITY __builtin_infd32()") print ("#endif"); print ("#ifndef DEC_NAN") print ("# define DEC_NAN __builtin_nand32(\"\")") print ("#endif"); print ("#define plus_infty DEC_INFINITY") print ("#define minus_infty -DEC_INFINITY") print ("#define qnan_value DEC_NAN") print ("#define snan_value DEC_NAN") print ("") def print_operations (func, operations): print ("typedef struct {") print (" const char *argname;") for i in range(0, len(func.args)): print (" %s arg%i;" % (func.arg_type(i), i)) print (" %s e;" % func.ret_init_type()) print (" int extraflags;") print (" int line;") print ("} operations_t;") print ("") print ("static const operations_t operations[] = {") for op in operations: if op.cppchecks: print ("#if " + " && ".join (op.cppchecks)) line = "" line += " {" line += "\"%s\", " % ", ".join(op.args) for i in range(0, len(op.args)): line += "%s," % func.args[i].parse_arg(op.args[i]) line += " %s, " % func.ret.parse_arg(op.ret) if (len(op.extraflags) > 0): line += "|".join (op.extraflags) line += ", " else: line += "NO_EXTRA_FLAG, " line += " %d }," % op.line print (line) if op.cppchecks: print ("#endif") print ("};") print ("static const int operations_size = \ sizeof(operations)/sizeof(operations[0]);"); print ("") def print_func_call(func): print ("int main (int argn, char *argv[]) {") print (" int i;") print ("") print (" scaffold_setup (argn, argv, \"%s\");" % func.name) print (" for (i = 0; i < operations_size; ++i) {") # (func.name, arg1, arg2, ..., ret, expected) MACROSUFFIX = { "bool" : "b", "int" : "i", "longint" : "l", "llongint" : "L", "decimal32" : "f", "decimal64" : "f", "decimal128" : "f" } macro = "RUN_TEST_"; for arg in func.args: macro += MACROSUFFIX[arg.name] macro += "_" + MACROSUFFIX[func.ret.name] line = " %s (%s, operations[i].argname, " % (macro, func.name, ) for i in range(0, len(func.args)): line += "operations[i].arg%i" % i if "decimal" in func.args[i].name: line += "." + func.args[i].decfield line += ", " line += "operations[i].e%s, operations[i].extraflags);" % func.ret_field() print (line) print (" }") print (" scaffold_teardown ();") print ("") print (" return noErrors;"); print ("}") def print_output (filename): (func, operations) = parse_file (filename) print_header (func) print_special_ctes () print_operations (func, operations) print_func_call (func) if __name__ == "__main__": parser = OptionParser () parser.add_option ("-o", "--output", dest="filename", help="white output to FILE") parser.add_option ("-t", "--type", dest="dectype", help="DECIMAL type to use") (options, args) = parser.parse_args() if options.filename: sys.stdout = open (options.filename, "w") if not args: sys.stderr.write ("usage: gen-libdfp-tests.py ") raise Exception() if not options.dectype: sys.stderr.write ("error: you must specify a type: decimal[32|64|128]") raise Exception() DECIMAL = DecimalTypes[options.dectype] print_output (args[0]) libdfp-1.0.17/tests/gen-libdfp-ulps.py000077500000000000000000000052051504475242000175540ustar00rootroot00000000000000#!/usr/bin/env python3 import sys import os from optparse import OptionParser # Parse a ulp description file returning a set of (ulps) for each operation. # Lines starting with '#' are ignored. # Each test is decribed as: # test # decimal # # If not described, ULP is assumed to be 0. def parse_file (filename): try: ulp = None ulps = dict() dmap = {'decimal32' : 2, 'decimal64' : 1, 'decimal128' : 0} f = "" for line in open(filename, 'r').readlines(): # Ignore comments and blank lines if line.rstrip().startswith ("#"): continue fields = line.split() if len(fields) is 0: continue if fields[0] == 'test': f = fields[1] if f not in ulps: ulps[f] = [0,0,0] elif fields[0] in dmap.keys(): slot = dmap[fields[0]] val = int(fields[1]) if val > ulps[f][slot]: ulps[f][slot] = val return ulps except (IOError, OSError) as e: print ("error: open (%s) failed: %s\n" % (filename, e.strerror)) exit (1) def print_header (filename): print ("/* This file is automatically generated") print (" * from %s with gen-libdfp-ulps.py. */" % filename) print ("") print ("#if defined(DECIMAL32)") print ("# define CHOOSE(decimal128, decimal64, decimal32) decimal32") print ("#elif defined(DECIMAL64)") print ("# define CHOOSE(decimal128, decimal64, decimal32) decimal64") print ("#elif defined(DECIMAL128)") print ("# define CHOOSE(decimal128, decimal64, decimal32) decimal128") print ("#endif") print ("") print ("struct ulp_data {") print (" const char *name;") print (" FLOAT max_ulp;") print ("};") print ("") def print_ulps (ulps): print ("/* Maximal error of functions. */") print ("static const struct ulp_data test_ulps[] = {") # The array will be used in a bsearch call, so the itens must be sorted for ulp in sorted (ulps.keys ()): print (" { \"%s\", CHOOSE(%d, %d, %d) }," % tuple ([ulp] + ulps[ulp])) print ("};") def print_output (filename): ulps = parse_file (filename) print_header (filename) print_ulps (ulps) if __name__ == "__main__": parser = OptionParser () parser.add_option ("-o", "--output", dest="filename", help="white output to FILE") (options, args) = parser.parse_args() try: if options.filename: sys.stdout = open (options.filename, "w") if len(args) == 0: sys.stderr.write ("usage: gen-libdfp-ulps.py \n") raise Exception() print_output (args[0]) except: if options.filename: os.remove (options.filename) exit (1) libdfp-1.0.17/tests/ilogb.input000066400000000000000000000371771504475242000164010ustar00rootroot00000000000000# name ilogb # arg1 decimal # ret int Inf INT_MAX decimal32 Inf INT_MAX decimal64 Inf INT_MAX decimal128 -Inf INT_MIN decimal32 -Inf INT_MIN decimal64 -Inf INT_MIN decimal128 NaN FP_ILOGBNAN decimal32 NaN FP_ILOGBNAN decimal64 NaN FP_ILOGBNAN decimal128 0e0 FP_ILOGB0 decimal32 0e0 FP_ILOGB0 decimal64 0e0 FP_ILOGB0 decimal128 -0e0 FP_ILOGB0 decimal32 -0e0 FP_ILOGB0 decimal64 -0e0 FP_ILOGB0 decimal128 10e-1 0 decimal32 10e-1 0 decimal64 10e-1 0 decimal128 1076e-2 1 decimal32 1076e-2 1 decimal64 1076e-2 1 decimal128 10240e-1 3 decimal32 10240e-1 3 decimal64 10240e-1 3 decimal128 2000000e-2 4 decimal32 20000001e-3 4 decimal64 20000001e-3 4 decimal128 4000320e-1 5 decimal32 400032003e-3 5 decimal64 400032003e-3 5 decimal128 1e32 32 decimal32 1e32 32 decimal64 1e32 32 decimal128 156e30 32 decimal32 156e30 32 decimal64 156e30 32 decimal128 -156e30 32 decimal32 -156e30 32 decimal64 -156e30 32 decimal128 1e-32 -32 decimal32 1e-32 -32 decimal64 1e-32 -32 decimal128 154e-34 -32 decimal32 154e-34 -32 decimal64 154e-34 -32 decimal128 -154e-34 -32 decimal32 -154e-34 -32 decimal64 -154e-34 -32 decimal128 156e32 34 decimal32 156e32 34 decimal64 156e32 34 decimal128 -156e32 34 decimal32 -156e32 34 decimal64 -156e32 34 decimal128 154e-32 -30 decimal32 154e-32 -30 decimal64 154e-32 -30 decimal128 -154e-32 -30 decimal32 -154e-32 -30 decimal64 -154e-32 -30 decimal128 Inf INT_MAX decimal32 1542332e118 124 decimal64 1542332e118 124 decimal128 -Inf INT_MIN decimal32 -1542332e118 124 decimal64 -1542332e118 124 decimal128 0e-101 FP_ILOGB0 decimal32 1542332e-130 -124 decimal64 1542332e-130 -124 decimal128 -0e-101 FP_ILOGB0 decimal32 -1542332e-130 -124 decimal64 -1542332e-130 -124 decimal128 Inf INT_MAX decimal32 1542332e122 128 decimal64 1542332e122 128 decimal128 -Inf INT_MIN decimal32 -1542332e122 128 decimal64 -1542332e122 128 decimal128 0e-101 FP_ILOGB0 decimal32 1542332e-126 -120 decimal64 1542332e-126 -120 decimal128 -0e-101 FP_ILOGB0 decimal32 -1542332e-126 -120 decimal64 -1542332e-126 -120 decimal128 Inf INT_MAX decimal32 Inf INT_MAX decimal64 19433e1020 1024 decimal128 -Inf INT_MIN decimal32 -Inf INT_MIN decimal64 -19433e1020 1024 decimal128 0e-101 FP_ILOGB0 decimal32 0e-398 FP_ILOGB0 decimal64 19433e-1028 -1024 decimal128 -0e-101 FP_ILOGB0 decimal32 -0e-398 FP_ILOGB0 decimal64 -19433e-1028 -1024 decimal128 Inf INT_MAX decimal32 Inf INT_MAX decimal64 194338e1024 1029 decimal128 -Inf INT_MIN decimal32 -Inf INT_MIN decimal64 -194338e1024 1029 decimal128 0e-101 FP_ILOGB0 decimal32 0e-398 FP_ILOGB0 decimal64 194338e-1024 -1019 decimal128 -0e-101 FP_ILOGB0 decimal32 -0e-398 FP_ILOGB0 decimal64 -194338e-1024 -1019 decimal128 1000000e-7 -1 decimal32 1000000000000000e-16 -1 decimal64 100000000000000000e-18 -1 decimal128 1000000e-7 -1 decimal32 9999999999999999e-17 -2 decimal64 999999999999999900e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999998e-17 -2 decimal64 999999999999999800e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999997e-17 -2 decimal64 999999999999999700e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999996e-17 -2 decimal64 999999999999999600e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999995e-17 -2 decimal64 999999999999999500e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999994e-17 -2 decimal64 999999999999999400e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999993e-17 -2 decimal64 999999999999999300e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999992e-17 -2 decimal64 999999999999999200e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999991e-17 -2 decimal64 999999999999999100e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999990e-17 -2 decimal64 999999999999999000e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999989e-17 -2 decimal64 999999999999998900e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999988e-17 -2 decimal64 999999999999998800e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999987e-17 -2 decimal64 999999999999998700e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999986e-17 -2 decimal64 999999999999998600e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999985e-17 -2 decimal64 999999999999998500e-19 -2 decimal128 1e-101 -101 decimal32 1e-398 -398 decimal64 1e-6176 -6176 decimal128 9999999e90 96 decimal32 9999999999999999e369 384 decimal64 9999999999999999999999999999999999e6111 6144 decimal128 -1e-101 -101 decimal32 -1e-398 -398 decimal64 -1e-6176 -6176 decimal128 -9999999e90 96 decimal32 -9999999999999999e369 384 decimal64 -9999999999999999999999999999999999e6111 6144 decimal128 libdfp-1.0.17/tests/isfinite.input000066400000000000000000000006451504475242000171050ustar00rootroot00000000000000# name isfinite # arg1 decimal # ret int Inf 0 -Inf 0 NaN 0 -NaN 0 sNaN 0 -sNaN 0 DEC_SUBNORMAL_MIN 1 -DEC_SUBNORMAL_MIN 1 DEC_MIN 1 -DEC_MIN 1 DEC_MAX 1 -DEC_MAX 1 0.1 1 -0.1 1 10E1 1 -10E1 1 0.0 1 -0.0 1 libdfp-1.0.17/tests/isgreater.input000066400000000000000000000161401504475242000172550ustar00rootroot00000000000000# name isgreater # arg1 decimal # arg2 decimal # ret int -2 -2 0 -2 -1 0 -2 0 0 -2 1 0 -2 2 0 -1 -2 1 -1 -1 0 -1 1 0 -1 2 0 0 -2 1 0 -1 1 0 0 0 0 1 0 0 2 0 1 -2 1 1 -1 1 1 0 1 1 1 0 1 2 0 2 -2 1 2 -1 1 2 0 1 2 1 1 2 2 0 -200 -200 0 -200 -100 0 -200 0 0 -200 100 0 -200 200 0 -100 -200 1 -100 -100 0 -100 100 0 -100 200 0 0 -200 1 0 -100 1 0 0 0 0 100 0 0 200 0 100 -200 1 100 -100 1 100 0 1 100 100 0 100 200 0 200 -200 1 200 -100 1 200 0 1 200 100 1 200 200 0 # some differing length/exponent cases 7.0 7.0 0 7.0 7 0 7 7.0 0 7E+0 7.0 0 70E-1 7.0 0 0.7E+1 7 0 70E-1 7 0 7.0 7E+0 0 7.0 70E-1 0 7 0.7E+1 0 7 70E-1 0 8.0 7.0 1 8.0 7 1 8 7.0 1 8E+0 7.0 1 80E-1 7.0 1 0.8E+1 7 1 80E-1 7 1 8.0 7E+0 1 8.0 70E-1 1 8 0.7E+1 1 8 70E-1 1 8.0 9.0 0 8.0 9 0 8 9.0 0 8E+0 9.0 0 80E-1 9.0 0 0.8E+1 9 0 80E-1 9 0 8.0 9E+0 0 8.0 90E-1 0 8 0.9E+1 0 8 90E-1 0 7.0 -7.0 1 7.0 -7 1 7 -7.0 1 7E+0 -7.0 1 70E-1 -7.0 1 .7E+1 -7 1 70E-1 -7 1 7.0 -7E+0 1 7.0 -70E-1 1 7 -.7E+1 1 7 -70E-1 1 8.0 -7.0 1 8.0 -7 1 8 -7.0 1 8E+0 -7.0 1 80E-1 -7.0 1 .8E+1 -7 1 80E-1 -7 1 8.0 -7E+0 1 8.0 -70E-1 1 8 -.7E+1 1 8 -70E-1 1 8.0 -9.0 1 8.0 -9 1 8 -9.0 1 8E+0 -9.0 1 80E-1 -9.0 1 .8E+1 -9 1 80E-1 -9 1 8.0 -9E+0 1 8.0 -90E-1 1 8 -.9E+1 1 8 -90E-1 1 -7.0 -7.0 0 -7.0 -7 0 -7 -7.0 0 -7E+0 -7.0 0 -70E-1 -7.0 0 -.7E+1 -7 0 -70E-1 -7 0 -7.0 -7E+0 0 -7.0 -70E-1 0 -7 -.7E+1 0 -7 -70E-1 0 -8.0 -7.0 0 -8.0 -7 0 -8 -7.0 0 -8E+0 -7.0 0 -80E-1 -7.0 0 -.8E+1 -7 0 -80E-1 -7 0 -8.0 -7E+0 0 -8.0 -70E-1 0 -8 -.7E+1 0 -8 -70E-1 0 -8.0 -9.0 1 -8.0 -9 1 -8 -9.0 1 -8E+0 -9.0 1 -80E-1 -9.0 1 -.8E+1 -9 1 -80E-1 -9 1 -8.0 -9E+0 1 -8.0 -90E-1 1 -8 -.9E+1 1 -8 -90E-1 1 123.4560000000000000E789 123.456E789 0 decimal128 123.456000000000000E-89 123.456E-89 0 decimal64 decimal128 123.45600000000000E789 123.456E789 0 decimal128 123.4560000000000E-89 123.456E-89 0 decimal64 decimal128 123.456000000000E789 123.456E789 0 decimal128 123.45600000000E-89 123.456E-89 0 123.4560000000E789 123.456E789 0 decimal128 123.456000000E-89 123.456E-89 0 123.45600000E789 123.456E789 0 decimal128 123.4560000E-89 123.456E-89 0 123.456000E789 123.456E789 0 decimal128 123.45600E-89 123.456E-89 0 123.4560E789 123.456E789 0 decimal128 123.456E-89 123.456E-89 0 123.456E-89 123.4560000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.45600000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.456000000000E-89 0 123.456E789 123.45600000000E789 0 decimal128 123.456E-89 123.4560000000E-89 0 123.456E789 123.456000000E789 0 decimal128 123.456E-89 123.45600000E-89 0 123.456E789 123.4560000E789 0 decimal128 123.456E-89 123.456000E-89 0 123.456E789 123.45600E789 0 decimal128 123.456E-89 123.4560E-89 0 123.456E789 123.456E789 0 decimal128 1 1E-15 1 1 1E-14 1 1 1E-13 1 1 1E-12 1 1 1E-11 1 1 1E-10 1 1 1E-9 1 1 1E-8 1 1 1E-7 1 1 1E-6 1 1 1E-5 1 1 1E-4 1 1 1E-3 1 1 1E-2 1 1 1E-1 1 1 1E-0 0 1 1E+1 0 1 1E+2 0 1 1E+3 0 1 1E+4 0 1 1E+5 0 1 1E+6 0 1 1E+7 0 1 1E+8 0 1 1E+9 0 1 1E+10 0 1 1E+11 0 1 1E+12 0 1 1E+13 0 1 1E+14 0 1 1E+15 0 1E-15 1 0 1E-14 1 0 1E-13 1 0 1E-12 1 0 1E-11 1 0 1E-10 1 0 1E-9 1 0 1E-8 1 0 1E-7 1 0 1E-6 1 0 1E-5 1 0 1E-4 1 0 1E-3 1 0 1E-2 1 0 1E-1 1 0 1E-0 1 0 1E+1 1 1 1E+2 1 1 1E+3 1 1 1E+4 1 1 1E+5 1 1 1E+6 1 1 1E+7 1 1 1E+8 1 1 1E+9 1 1 1E+10 1 1 1E+11 1 1 1E+12 1 1 1E+13 1 1 1E+14 1 1 1E+15 1 1 0.000000987654321 1E-15 1 0.000000987654321 1E-14 1 0.000000987654321 1E-13 1 0.000000987654321 1E-12 1 0.000000987654321 1E-11 1 0.000000987654321 1E-10 1 0.000000987654321 1E-9 1 0.000000987654321 1E-8 1 0.000000987654321 1E-7 1 0.000000987654321 1E-6 0 0.000000987654321 1E-5 0 0.000000987654321 1E-4 0 0.000000987654321 1E-3 0 0.000000987654321 1E-2 0 0.000000987654321 1E-1 0 0.000000987654321 1E-0 0 0.000000987654321 1E+1 0 0.000000987654321 1E+2 0 0.000000987654321 1E+3 0 0.000000987654321 1E+4 0 12 12.2345 0 12.0 12.2345 0 12.00 12.2345 0 12.000 12.2345 0 12.0000 12.2345 0 12.00000 12.2345 0 12.000000 12.2345 0 12.0000000 12.2345 0 12.00000000 12.2345 0 12.000000000 12.2345 0 12.1234 12 1 12.1234 12.0 1 12.1234 12.00 1 12.1234 12.000 1 12.1234 12.0000 1 12.1234 12.00000 1 12.1234 12.000000 1 12.1234 12.0000000 1 12.1234 12.00000000 1 12.1234 12.000000000 1 -12 -12.2345 1 -12.0 -12.2345 1 -12.00 -12.2345 1 -12.000 -12.2345 1 -12.0000 -12.2345 1 -12.00000 -12.2345 1 -12.000000 -12.2345 1 -12.0000000 -12.2345 1 -12.00000000 -12.2345 1 -12.000000000 -12.2345 1 -12.1234 -12 0 -12.1234 -12.0 0 -12.1234 -12.00 0 -12.1234 -12.000 0 -12.1234 -12.0000 0 -12.1234 -12.00000 0 -12.1234 -12.000000 0 -12.1234 -12.0000000 0 -12.1234 -12.00000000 0 -12.1234 -12.000000000 0 0 0 0 0 -0 0 0 -0.0 0 0 0.0 0 -0 0 0 -0 -0 0 -0 -0.0 0 -0 0.0 0 0.0 0 0 0.0 -0 0 0.0 -0.0 0 0.0 0.0 0 -0.0 0 0 -0.0 -0 0 -0.0 -0.0 0 -0.0 0.0 0 -0E1 0.0 0 -0E2 0.0 0 0E1 0.0 0 0E2 0.0 0 -0E1 0 0 -0E2 0 0 0E1 0 0 0E2 0 0 -0E1 -0E1 0 -0E2 -0E1 0 0E1 -0E1 0 0E2 -0E1 0 -0E1 -0E2 0 -0E2 -0E2 0 0E1 -0E2 0 0E2 -0E2 0 -0E1 0E1 0 -0E2 0E1 0 0E1 0E1 0 0E2 0E1 0 -0E1 0E2 0 -0E2 0E2 0 0E1 0E2 0 0E2 0E2 0 # long number checks (decimal32) 12345678000 1 1 1 12345678000 0 1234567800 1 1 1 1234567800 0 1234567890 1 1 1 1234567890 0 1234567891 1 1 1 1234567891 0 12345678901 1 1 1 12345678901 0 1234567896 1 1 1 1234567896 0 -1234567891 1 0 1 -1234567891 1 -12345678901 1 0 1 -12345678901 1 -1234567896 1 0 1 -1234567896 1 # long number checks (decimal64) 12345678000 1 1 1 12345678000 0 1234567800 1 1 1 1234567800 0 1234567890 1 1 1 1234567890 0 1234567891 1 1 1 1234567891 0 12345678901 1 1 1 12345678901 0 1234567896 1 1 1 1234567896 0 # long number checks (decimal128) -36852134.84194296250843579428931 -5830629.8347085025808756560357940 0 -36852134.84194296250843579428931 -36852134.84194296250843579428931 0 -36852134.94194296250843579428931 -36852134.84194296250843579428931 0 -36852134.84194296250843579428931 -36852134.94194296250843579428931 0 decimal32 -36852134.84194296250843579428931 -36852134.94194296250843579428931 1 decimal64 decimal128 # residue case 1 0.9999999 1 1 0.999999 1 1 0.99999 1 1 1.0000 0 1 1.00001 0 1 1.000001 0 1 1.0000001 0 0.9999999 1 0 0.999999 1 0 0.99999 1 0 1.0000 1 0 1.00001 1 1 1.000001 1 1 1.0000001 1 0 decimal32 1.0000001 1 1 decimal64 decimal128 # special cases Inf -1000 1 Inf -1 1 Inf -0 1 Inf 0 1 Inf 1 1 Inf 1000 1 Inf Inf 0 -1000 Inf 0 -Inf Inf 0 -1 Inf 0 -0 Inf 0 0 Inf 0 1 Inf 0 1000 Inf 0 Inf Inf 0 -Inf -Inf 0 -Inf -1000 0 -Inf -1 0 -Inf -0 0 -Inf 0 0 -Inf 1 0 -Inf 1000 0 -Inf Inf 0 -Inf -Inf 0 -1000 -Inf 1 -1 -Inf 1 -0 -Inf 1 0 -Inf 1 1 -Inf 1 1000 -Inf 1 Inf -Inf 1 NaN -Inf 0 NaN -1000 0 NaN -1 0 NaN -0 0 NaN 0 0 NaN 1 0 NaN 1000 0 NaN Inf 0 NaN NaN 0 -Inf NaN 0 -1000 NaN 0 -1 NaN 0 -0 NaN 0 0 NaN 0 1 NaN 0 1000 NaN 0 Inf NaN 0 -NaN -NaN 0 +NaN -NaN 0 -NaN +NaN 0 libdfp-1.0.17/tests/isgreaterequal.input000066400000000000000000000161321504475242000203060ustar00rootroot00000000000000# name isgreaterequal # arg1 decimal # arg2 decimal # ret int -2 -2 1 -2 -1 0 -2 0 0 -2 1 0 -2 2 0 -1 -2 1 -1 -1 1 -1 1 0 -1 2 0 0 -2 1 0 -1 1 0 0 1 0 1 0 0 2 0 1 -2 1 1 -1 1 1 0 1 1 1 1 1 2 0 2 -2 1 2 -1 1 2 0 1 2 1 1 2 2 1 -200 -200 1 -200 -100 0 -200 0 0 -200 100 0 -200 200 0 -100 -200 1 -100 -100 1 -100 100 0 -100 200 0 0 -200 1 0 -100 1 0 0 1 0 100 0 0 200 0 100 -200 1 100 -100 1 100 0 1 100 100 1 100 200 0 200 -200 1 200 -100 1 200 0 1 200 100 1 200 200 1 # some differing length/exponent cases 7.0 7.0 1 7.0 7 1 7 7.0 1 7E+0 7.0 1 70E-1 7.0 1 0.7E+1 7 1 70E-1 7 1 7.0 7E+0 1 7.0 70E-1 1 7 0.7E+1 1 7 70E-1 1 8.0 7.0 1 8.0 7 1 8 7.0 1 8E+0 7.0 1 80E-1 7.0 1 0.8E+1 7 1 80E-1 7 1 8.0 7E+0 1 8.0 70E-1 1 8 0.7E+1 1 8 70E-1 1 8.0 9.0 0 8.0 9 0 8 9.0 0 8E+0 9.0 0 80E-1 9.0 0 0.8E+1 9 0 80E-1 9 0 8.0 9E+0 0 8.0 90E-1 0 8 0.9E+1 0 8 90E-1 0 7.0 -7.0 1 7.0 -7 1 7 -7.0 1 7E+0 -7.0 1 70E-1 -7.0 1 .7E+1 -7 1 70E-1 -7 1 7.0 -7E+0 1 7.0 -70E-1 1 7 -.7E+1 1 7 -70E-1 1 8.0 -7.0 1 8.0 -7 1 8 -7.0 1 8E+0 -7.0 1 80E-1 -7.0 1 .8E+1 -7 1 80E-1 -7 1 8.0 -7E+0 1 8.0 -70E-1 1 8 -.7E+1 1 8 -70E-1 1 8.0 -9.0 1 8.0 -9 1 8 -9.0 1 8E+0 -9.0 1 80E-1 -9.0 1 .8E+1 -9 1 80E-1 -9 1 8.0 -9E+0 1 8.0 -90E-1 1 8 -.9E+1 1 8 -90E-1 1 -7.0 -7.0 1 -7.0 -7 1 -7 -7.0 1 -7E+0 -7.0 1 -70E-1 -7.0 1 -.7E+1 -7 1 -70E-1 -7 1 -7.0 -7E+0 1 -7.0 -70E-1 1 -7 -.7E+1 1 -7 -70E-1 1 -8.0 -7.0 0 -8.0 -7 0 -8 -7.0 0 -8E+0 -7.0 0 -80E-1 -7.0 0 -.8E+1 -7 0 -80E-1 -7 0 -8.0 -7E+0 0 -8.0 -70E-1 0 -8 -.7E+1 0 -8 -70E-1 0 -8.0 -9.0 1 -8.0 -9 1 -8 -9.0 1 -8E+0 -9.0 1 -80E-1 -9.0 1 -.8E+1 -9 1 -80E-1 -9 1 -8.0 -9E+0 1 -8.0 -90E-1 1 -8 -.9E+1 1 -8 -90E-1 1 123.4560000000000000E789 123.456E789 1 decimal128 123.456000000000000E-89 123.456E-89 1 decimal64 decimal128 123.45600000000000E789 123.456E789 1 decimal128 123.4560000000000E-89 123.456E-89 1 decimal64 decimal128 123.456000000000E789 123.456E789 1 decimal128 123.45600000000E-89 123.456E-89 1 123.4560000000E789 123.456E789 1 decimal128 123.456000000E-89 123.456E-89 1 123.45600000E789 123.456E789 1 decimal128 123.4560000E-89 123.456E-89 1 123.456000E789 123.456E789 1 decimal128 123.45600E-89 123.456E-89 1 123.4560E789 123.456E789 1 decimal128 123.456E-89 123.456E-89 1 123.456E-89 123.4560000000000E-89 1 123.456E789 123.4560000000000E789 1 decimal128 123.456E-89 123.45600000000000E-89 1 123.456E789 123.4560000000000E789 1 decimal128 123.456E-89 123.456000000000E-89 1 123.456E789 123.45600000000E789 1 decimal128 123.456E-89 123.4560000000E-89 1 123.456E789 123.456000000E789 1 decimal128 123.456E-89 123.45600000E-89 1 123.456E789 123.4560000E789 1 decimal128 123.456E-89 123.456000E-89 1 123.456E789 123.45600E789 1 decimal128 123.456E-89 123.4560E-89 1 123.456E789 123.456E789 1 decimal128 1 1E-15 1 1 1E-14 1 1 1E-13 1 1 1E-12 1 1 1E-11 1 1 1E-10 1 1 1E-9 1 1 1E-8 1 1 1E-7 1 1 1E-6 1 1 1E-5 1 1 1E-4 1 1 1E-3 1 1 1E-2 1 1 1E-1 1 1 1E-0 1 1 1E+1 0 1 1E+2 0 1 1E+3 0 1 1E+4 0 1 1E+5 0 1 1E+6 0 1 1E+7 0 1 1E+8 0 1 1E+9 0 1 1E+10 0 1 1E+11 0 1 1E+12 0 1 1E+13 0 1 1E+14 0 1 1E+15 0 1E-15 1 0 1E-14 1 0 1E-13 1 0 1E-12 1 0 1E-11 1 0 1E-10 1 0 1E-9 1 0 1E-8 1 0 1E-7 1 0 1E-6 1 0 1E-5 1 0 1E-4 1 0 1E-3 1 0 1E-2 1 0 1E-1 1 0 1E-0 1 1 1E+1 1 1 1E+2 1 1 1E+3 1 1 1E+4 1 1 1E+5 1 1 1E+6 1 1 1E+7 1 1 1E+8 1 1 1E+9 1 1 1E+10 1 1 1E+11 1 1 1E+12 1 1 1E+13 1 1 1E+14 1 1 1E+15 1 1 0.000000987654321 1E-15 1 0.000000987654321 1E-14 1 0.000000987654321 1E-13 1 0.000000987654321 1E-12 1 0.000000987654321 1E-11 1 0.000000987654321 1E-10 1 0.000000987654321 1E-9 1 0.000000987654321 1E-8 1 0.000000987654321 1E-7 1 0.000000987654321 1E-6 0 0.000000987654321 1E-5 0 0.000000987654321 1E-4 0 0.000000987654321 1E-3 0 0.000000987654321 1E-2 0 0.000000987654321 1E-1 0 0.000000987654321 1E-0 0 0.000000987654321 1E+1 0 0.000000987654321 1E+2 0 0.000000987654321 1E+3 0 0.000000987654321 1E+4 0 12 12.2345 0 12.0 12.2345 0 12.00 12.2345 0 12.000 12.2345 0 12.0000 12.2345 0 12.00000 12.2345 0 12.000000 12.2345 0 12.0000000 12.2345 0 12.00000000 12.2345 0 12.000000000 12.2345 0 12.1234 12 1 12.1234 12.0 1 12.1234 12.00 1 12.1234 12.000 1 12.1234 12.0000 1 12.1234 12.00000 1 12.1234 12.000000 1 12.1234 12.0000000 1 12.1234 12.00000000 1 12.1234 12.000000000 1 -12 -12.2345 1 -12.0 -12.2345 1 -12.00 -12.2345 1 -12.000 -12.2345 1 -12.0000 -12.2345 1 -12.00000 -12.2345 1 -12.000000 -12.2345 1 -12.0000000 -12.2345 1 -12.00000000 -12.2345 1 -12.000000000 -12.2345 1 -12.1234 -12 0 -12.1234 -12.0 0 -12.1234 -12.00 0 -12.1234 -12.000 0 -12.1234 -12.0000 0 -12.1234 -12.00000 0 -12.1234 -12.000000 0 -12.1234 -12.0000000 0 -12.1234 -12.00000000 0 -12.1234 -12.000000000 0 0 0 1 0 -0 1 0 -0.0 1 0 0.0 1 -0 0 1 -0 -0 1 -0 -0.0 1 -0 0.0 1 0.0 0 1 0.0 -0 1 0.0 -0.0 1 0.0 0.0 1 -0.0 0 1 -0.0 -0 1 -0.0 -0.0 1 -0.0 0.0 1 -0E1 0.0 1 -0E2 0.0 1 0E1 0.0 1 0E2 0.0 1 -0E1 0 1 -0E2 0 1 0E1 0 1 0E2 0 1 -0E1 -0E1 1 -0E2 -0E1 1 0E1 -0E1 1 0E2 -0E1 1 -0E1 -0E2 1 -0E2 -0E2 1 0E1 -0E2 1 0E2 -0E2 1 -0E1 0E1 1 -0E2 0E1 1 0E1 0E1 1 0E2 0E1 1 -0E1 0E2 1 -0E2 0E2 1 0E1 0E2 1 0E2 0E2 1 # long number checks (decimal32) 12345678000 1 1 1 12345678000 0 1234567800 1 1 1 1234567800 0 1234567890 1 1 1 1234567890 0 1234567891 1 1 1 1234567891 0 12345678901 1 1 1 12345678901 0 1234567896 1 1 1 1234567896 0 -1234567891 1 0 1 -1234567891 1 -12345678901 1 0 1 -12345678901 1 -1234567896 1 0 1 -1234567896 1 # long number checks (decimal64) 12345678000 1 1 1 12345678000 0 1234567800 1 1 1 1234567800 0 1234567890 1 1 1 1234567890 0 1234567891 1 1 1 1234567891 0 12345678901 1 1 1 12345678901 0 1234567896 1 1 1 1234567896 0 # long number checks (decimal128) -36852134.84194296250843579428931 -5830629.8347085025808756560357940 0 -36852134.84194296250843579428931 -36852134.84194296250843579428931 1 -36852134.94194296250843579428931 -36852134.84194296250843579428931 1 decimal32 -36852134.94194296250843579428931 -36852134.84194296250843579428931 0 decimal64 decimal128 -36852134.84194296250843579428931 -36852134.94194296250843579428931 1 # residue case 1 0.9999999 1 1 0.999999 1 1 0.99999 1 1 1.0000 1 1 1.00001 0 1 1.000001 0 1 1.0000001 1 decimal32 1 1.0000001 0 decimal64 decimal128 0.9999999 1 0 0.999999 1 0 0.99999 1 0 1.0000 1 1 1.00001 1 1 1.000001 1 1 1.0000001 1 1 # special cases Inf -1000 1 Inf -1 1 Inf -0 1 Inf 0 1 Inf 1 1 Inf 1000 1 Inf Inf 1 -1000 Inf 0 -Inf Inf 0 -1 Inf 0 -0 Inf 0 0 Inf 0 1 Inf 0 1000 Inf 0 -Inf -Inf 1 -Inf -1000 0 -Inf -1 0 -Inf -0 0 -Inf 0 0 -Inf 1 0 -Inf 1000 0 -Inf Inf 0 -Inf -Inf 1 -1000 -Inf 1 -1 -Inf 1 -0 -Inf 1 0 -Inf 1 1 -Inf 1 1000 -Inf 1 Inf -Inf 1 NaN -Inf 0 NaN -1000 0 NaN -1 0 NaN -0 0 NaN 0 0 NaN 1 0 NaN 1000 0 NaN Inf 0 NaN NaN 0 -Inf NaN 0 -1000 NaN 0 -1 NaN 0 -0 NaN 0 0 NaN 0 1 NaN 0 1000 NaN 0 Inf NaN 0 -NaN -NaN 0 +NaN -NaN 0 -NaN +NaN 0 libdfp-1.0.17/tests/isinf.input000066400000000000000000000006441504475242000164020ustar00rootroot00000000000000# name isinf # arg1 decimal # ret bool Inf 1 -Inf -1 NaN 0 -NaN 0 sNaN 0 -sNaN 0 DEC_SUBNORMAL_MIN 0 -DEC_SUBNORMAL_MIN 0 DEC_MIN 0 -DEC_MIN 0 DEC_MAX 0 -DEC_MAX 0 0.1 0 -0.1 0 10E1 0 -10E1 0 0.0 0 -0.0 0 libdfp-1.0.17/tests/isless.input000066400000000000000000000160721504475242000165760ustar00rootroot00000000000000# name isless # arg1 decimal # arg2 decimal # ret int -2 -2 0 -2 -1 1 -2 0 1 -2 1 1 -2 2 1 -1 -2 0 -1 -1 0 -1 1 1 -1 2 1 0 -2 0 0 -1 0 0 0 0 0 1 1 0 2 1 1 -2 0 1 -1 0 1 0 0 1 1 0 1 2 1 2 -2 0 2 -1 0 2 0 0 2 1 0 2 2 0 -200 -200 0 -200 -100 1 -200 0 1 -200 100 1 -200 200 1 -100 -200 0 -100 -100 0 -100 100 1 -100 200 1 0 -200 0 0 -100 0 0 0 0 0 100 1 0 200 1 100 -200 0 100 -100 0 100 0 0 100 100 0 100 200 1 200 -200 0 200 -100 0 200 0 0 200 100 0 200 200 0 # some differing length/exponent cases 7.0 7.0 0 7.0 7 0 7 7.0 0 7E+0 7.0 0 70E-1 7.0 0 0.7E+1 7 0 70E-1 7 0 7.0 7E+0 0 7.0 70E-1 0 7 0.7E+1 0 7 70E-1 0 8.0 7.0 0 8.0 7 0 8 7.0 0 8E+0 7.0 0 80E-1 7.0 0 0.8E+1 7 0 80E-1 7 0 8.0 7E+0 0 8.0 70E-1 0 8 0.7E+1 0 8 70E-1 0 8.0 9.0 1 8.0 9 1 8 9.0 1 8E+0 9.0 1 80E-1 9.0 1 0.8E+1 9 1 80E-1 9 1 8.0 9E+0 1 8.0 90E-1 1 8 0.9E+1 1 8 90E-1 1 7.0 -7.0 0 7.0 -7 0 7 -7.0 0 7E+0 -7.0 0 70E-1 -7.0 0 .7E+1 -7 0 70E-1 -7 0 7.0 -7E+0 0 7.0 -70E-1 0 7 -.7E+1 0 7 -70E-1 0 8.0 -7.0 0 8.0 -7 0 8 -7.0 0 8E+0 -7.0 0 80E-1 -7.0 0 .8E+1 -7 0 80E-1 -7 0 8.0 -7E+0 0 8.0 -70E-1 0 8 -.7E+1 0 8 -70E-1 0 8.0 -9.0 0 8.0 -9 0 8 -9.0 0 8E+0 -9.0 0 80E-1 -9.0 0 .8E+1 -9 0 80E-1 -9 0 8.0 -9E+0 0 8.0 -90E-1 0 8 -.9E+1 0 8 -90E-1 0 -7.0 -7.0 0 -7.0 -7 0 -7 -7.0 0 -7E+0 -7.0 0 -70E-1 -7.0 0 -.7E+1 -7 0 -70E-1 -7 0 -7.0 -7E+0 0 -7.0 -70E-1 0 -7 -.7E+1 0 -7 -70E-1 0 -8.0 -7.0 1 -8.0 -7 1 -8 -7.0 1 -8E+0 -7.0 1 -80E-1 -7.0 1 -.8E+1 -7 1 -80E-1 -7 1 -8.0 -7E+0 1 -8.0 -70E-1 1 -8 -.7E+1 1 -8 -70E-1 1 -8.0 -9.0 0 -8.0 -9 0 -8 -9.0 0 -8E+0 -9.0 0 -80E-1 -9.0 0 -.8E+1 -9 0 -80E-1 -9 0 -8.0 -9E+0 0 -8.0 -90E-1 0 -8 -.9E+1 0 -8 -90E-1 0 123.4560000000000000E789 123.456E789 0 decimal128 123.456000000000000E-89 123.456E-89 0 decimal64 decimal128 123.45600000000000E789 123.456E789 0 decimal128 123.4560000000000E-89 123.456E-89 0 decimal64 decimal128 123.456000000000E789 123.456E789 0 decimal128 123.45600000000E-89 123.456E-89 0 123.4560000000E789 123.456E789 0 decimal128 123.456000000E-89 123.456E-89 0 123.45600000E789 123.456E789 0 decimal128 123.4560000E-89 123.456E-89 0 123.456000E789 123.456E789 0 decimal128 123.45600E-89 123.456E-89 0 123.4560E789 123.456E789 0 decimal128 123.456E-89 123.456E-89 0 123.456E-89 123.4560000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.45600000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.456000000000E-89 0 123.456E789 123.45600000000E789 0 decimal128 123.456E-89 123.4560000000E-89 0 123.456E789 123.456000000E789 0 decimal128 123.456E-89 123.45600000E-89 0 123.456E789 123.4560000E789 0 decimal128 123.456E-89 123.456000E-89 0 123.456E789 123.45600E789 0 decimal128 123.456E-89 123.4560E-89 0 123.456E789 123.456E789 0 decimal128 1 1E-15 0 1 1E-14 0 1 1E-13 0 1 1E-12 0 1 1E-11 0 1 1E-10 0 1 1E-9 0 1 1E-8 0 1 1E-7 0 1 1E-6 0 1 1E-5 0 1 1E-4 0 1 1E-3 0 1 1E-2 0 1 1E-1 0 1 1E-0 0 1 1E+1 1 1 1E+2 1 1 1E+3 1 1 1E+4 1 1 1E+5 1 1 1E+6 1 1 1E+7 1 1 1E+8 1 1 1E+9 1 1 1E+10 1 1 1E+11 1 1 1E+12 1 1 1E+13 1 1 1E+14 1 1 1E+15 1 1E-15 1 1 1E-14 1 1 1E-13 1 1 1E-12 1 1 1E-11 1 1 1E-10 1 1 1E-9 1 1 1E-8 1 1 1E-7 1 1 1E-6 1 1 1E-5 1 1 1E-4 1 1 1E-3 1 1 1E-2 1 1 1E-1 1 1 1E-0 1 0 1E+1 1 0 1E+2 1 0 1E+3 1 0 1E+4 1 0 1E+5 1 0 1E+6 1 0 1E+7 1 0 1E+8 1 0 1E+9 1 0 1E+10 1 0 1E+11 1 0 1E+12 1 0 1E+13 1 0 1E+14 1 0 1E+15 1 0 0.000000987654321 1E-15 0 0.000000987654321 1E-14 0 0.000000987654321 1E-13 0 0.000000987654321 1E-12 0 0.000000987654321 1E-11 0 0.000000987654321 1E-10 0 0.000000987654321 1E-9 0 0.000000987654321 1E-8 0 0.000000987654321 1E-7 0 0.000000987654321 1E-6 1 0.000000987654321 1E-5 1 0.000000987654321 1E-4 1 0.000000987654321 1E-3 1 0.000000987654321 1E-2 1 0.000000987654321 1E-1 1 0.000000987654321 1E-0 1 0.000000987654321 1E+1 1 0.000000987654321 1E+2 1 0.000000987654321 1E+3 1 0.000000987654321 1E+4 1 12 12.2345 1 12.0 12.2345 1 12.00 12.2345 1 12.000 12.2345 1 12.0000 12.2345 1 12.00000 12.2345 1 12.000000 12.2345 1 12.0000000 12.2345 1 12.00000000 12.2345 1 12.000000000 12.2345 1 12.1234 12 0 12.1234 12.0 0 12.1234 12.00 0 12.1234 12.000 0 12.1234 12.0000 0 12.1234 12.00000 0 12.1234 12.000000 0 12.1234 12.0000000 0 12.1234 12.00000000 0 12.1234 12.000000000 0 -12 -12.2345 0 -12.0 -12.2345 0 -12.00 -12.2345 0 -12.000 -12.2345 0 -12.0000 -12.2345 0 -12.00000 -12.2345 0 -12.000000 -12.2345 0 -12.0000000 -12.2345 0 -12.00000000 -12.2345 0 -12.000000000 -12.2345 0 -12.1234 -12 1 -12.1234 -12.0 1 -12.1234 -12.00 1 -12.1234 -12.000 1 -12.1234 -12.0000 1 -12.1234 -12.00000 1 -12.1234 -12.000000 1 -12.1234 -12.0000000 1 -12.1234 -12.00000000 1 -12.1234 -12.000000000 1 0 0 0 0 -0 0 0 -0.0 0 0 0.0 0 -0 0 0 -0 -0 0 -0 -0.0 0 -0 0.0 0 0.0 0 0 0.0 -0 0 0.0 -0.0 0 0.0 0.0 0 -0.0 0 0 -0.0 -0 0 -0.0 -0.0 0 -0.0 0.0 0 -0E1 0.0 0 -0E2 0.0 0 0E1 0.0 0 0E2 0.0 0 -0E1 0 0 -0E2 0 0 0E1 0 0 0E2 0 0 -0E1 -0E1 0 -0E2 -0E1 0 0E1 -0E1 0 0E2 -0E1 0 -0E1 -0E2 0 -0E2 -0E2 0 0E1 -0E2 0 0E2 -0E2 0 -0E1 0E1 0 -0E2 0E1 0 0E1 0E1 0 0E2 0E1 0 -0E1 0E2 0 -0E2 0E2 0 0E1 0E2 0 0E2 0E2 0 # long number checks (decimal32) 12345678000 1 0 1 12345678000 1 1234567800 1 0 1 1234567800 1 1234567890 1 0 1 1234567890 1 1234567891 1 0 1 1234567891 1 12345678901 1 0 1 12345678901 1 1234567896 1 0 1 1234567896 1 -1234567891 1 1 1 -1234567891 0 -12345678901 1 1 1 -12345678901 0 -1234567896 1 1 1 -1234567896 0 # long number checks (decimal64) 12345678000 1 0 1 12345678000 1 1234567800 1 0 1 1234567800 1 1234567890 1 0 1 1234567890 1 1234567891 1 0 1 1234567891 1 12345678901 1 0 1 12345678901 1 1234567896 1 0 1 1234567896 1 # long number checks (decimal128) -36852134.84194296250843579428931 -5830629.8347085025808756560357940 1 -36852134.84194296250843579428931 -36852134.84194296250843579428931 0 -36852134.94194296250843579428931 -36852134.84194296250843579428931 0 decimal32 -36852134.94194296250843579428931 -36852134.84194296250843579428931 1 decimal64 decimal128 -36852134.84194296250843579428931 -36852134.94194296250843579428931 0 # residue case 1 0.9999999 0 1 0.999999 0 1 0.99999 0 1 1.0000 0 1 1.00001 1 1 1.000001 1 1 1.0000001 0 decimal32 1 1.0000001 1 decimal64 decimal128 0.9999999 1 1 0.999999 1 1 0.99999 1 1 1.0000 1 0 1.00001 1 0 1.000001 1 0 1.0000001 1 0 # special cases Inf -1000 0 Inf -1 0 Inf -0 0 Inf 0 0 Inf 1 0 Inf 1000 0 Inf Inf 0 -1000 Inf 1 -Inf Inf 1 -1 Inf 1 -0 Inf 1 0 Inf 1 1 Inf 1 1000 Inf 1 -Inf -Inf 0 -Inf -1000 1 -Inf -1 1 -Inf -0 1 -Inf 0 1 -Inf 1 1 -Inf 1000 1 -1000 -Inf 0 -1 -Inf 0 -0 -Inf 0 0 -Inf 0 1 -Inf 0 1000 -Inf 0 Inf -Inf 0 NaN -Inf 0 NaN -1000 0 NaN -1 0 NaN -0 0 NaN 0 0 NaN 1 0 NaN 1000 0 NaN Inf 0 NaN NaN 0 -Inf NaN 0 -1000 NaN 0 -1 NaN 0 -0 NaN 0 0 NaN 0 1 NaN 0 1000 NaN 0 Inf NaN 0 -NaN -NaN 0 +NaN -NaN 0 -NaN +NaN 0 libdfp-1.0.17/tests/islessequal.input000066400000000000000000000161131504475242000176220ustar00rootroot00000000000000# name islessequal # arg1 decimal # arg2 decimal # ret int -2 -2 1 -2 -1 1 -2 0 1 -2 1 1 -2 2 1 -1 -2 0 -1 -1 1 -1 1 1 -1 2 1 0 -2 0 0 -1 0 0 0 1 0 1 1 0 2 1 1 -2 0 1 -1 0 1 0 0 1 1 1 1 2 1 2 -2 0 2 -1 0 2 0 0 2 1 0 2 2 1 -200 -200 1 -200 -100 1 -200 0 1 -200 100 1 -200 200 1 -100 -200 0 -100 -100 1 -100 100 1 -100 200 1 0 -200 0 0 -100 0 0 0 1 0 100 1 0 200 1 100 -200 0 100 -100 0 100 0 0 100 100 1 100 200 1 200 -200 0 200 -100 0 200 0 0 200 100 0 200 200 1 # some differing length/exponent cases 7.0 7.0 1 7.0 7 1 7 7.0 1 7E+0 7.0 1 70E-1 7.0 1 0.7E+1 7 1 70E-1 7 1 7.0 7E+0 1 7.0 70E-1 1 7 0.7E+1 1 7 70E-1 1 8.0 7.0 0 8.0 7 0 8 7.0 0 8E+0 7.0 0 80E-1 7.0 0 0.8E+1 7 0 80E-1 7 0 8.0 7E+0 0 8.0 70E-1 0 8 0.7E+1 0 8 70E-1 0 8.0 9.0 1 8.0 9 1 8 9.0 1 8E+0 9.0 1 80E-1 9.0 1 0.8E+1 9 1 80E-1 9 1 8.0 9E+0 1 8.0 90E-1 1 8 0.9E+1 1 8 90E-1 1 7.0 -7.0 0 7.0 -7 0 7 -7.0 0 7E+0 -7.0 0 70E-1 -7.0 0 .7E+1 -7 0 70E-1 -7 0 7.0 -7E+0 0 7.0 -70E-1 0 7 -.7E+1 0 7 -70E-1 0 8.0 -7.0 0 8.0 -7 0 8 -7.0 0 8E+0 -7.0 0 80E-1 -7.0 0 .8E+1 -7 0 80E-1 -7 0 8.0 -7E+0 0 8.0 -70E-1 0 8 -.7E+1 0 8 -70E-1 0 8.0 -9.0 0 8.0 -9 0 8 -9.0 0 8E+0 -9.0 0 80E-1 -9.0 0 .8E+1 -9 0 80E-1 -9 0 8.0 -9E+0 0 8.0 -90E-1 0 8 -.9E+1 0 8 -90E-1 0 -7.0 -7.0 1 -7.0 -7 1 -7 -7.0 1 -7E+0 -7.0 1 -70E-1 -7.0 1 -.7E+1 -7 1 -70E-1 -7 1 -7.0 -7E+0 1 -7.0 -70E-1 1 -7 -.7E+1 1 -7 -70E-1 1 -8.0 -7.0 1 -8.0 -7 1 -8 -7.0 1 -8E+0 -7.0 1 -80E-1 -7.0 1 -.8E+1 -7 1 -80E-1 -7 1 -8.0 -7E+0 1 -8.0 -70E-1 1 -8 -.7E+1 1 -8 -70E-1 1 -8.0 -9.0 0 -8.0 -9 0 -8 -9.0 0 -8E+0 -9.0 0 -80E-1 -9.0 0 -.8E+1 -9 0 -80E-1 -9 0 -8.0 -9E+0 0 -8.0 -90E-1 0 -8 -.9E+1 0 -8 -90E-1 0 123.4560000000000000E789 123.456E789 1 decimal128 123.456000000000000E-89 123.456E-89 1 decimal64 decimal128 123.45600000000000E789 123.456E789 1 decimal128 123.4560000000000E-89 123.456E-89 1 decimal64 decimal128 123.456000000000E789 123.456E789 1 decimal128 123.45600000000E-89 123.456E-89 1 123.4560000000E789 123.456E789 1 decimal128 123.456000000E-89 123.456E-89 1 123.45600000E789 123.456E789 1 decimal128 123.4560000E-89 123.456E-89 1 123.456000E789 123.456E789 1 decimal128 123.45600E-89 123.456E-89 1 123.4560E789 123.456E789 1 decimal128 123.456E-89 123.456E-89 1 123.456E-89 123.4560000000000E-89 1 123.456E789 123.4560000000000E789 1 decimal128 123.456E-89 123.45600000000000E-89 1 123.456E789 123.4560000000000E789 1 decimal128 123.456E-89 123.456000000000E-89 1 123.456E789 123.45600000000E789 1 decimal128 123.456E-89 123.4560000000E-89 1 123.456E789 123.456000000E789 1 decimal128 123.456E-89 123.45600000E-89 1 123.456E789 123.4560000E789 1 decimal128 123.456E-89 123.456000E-89 1 123.456E789 123.45600E789 1 decimal128 123.456E-89 123.4560E-89 1 123.456E789 123.456E789 1 decimal128 1 1E-15 0 1 1E-14 0 1 1E-13 0 1 1E-12 0 1 1E-11 0 1 1E-10 0 1 1E-9 0 1 1E-8 0 1 1E-7 0 1 1E-6 0 1 1E-5 0 1 1E-4 0 1 1E-3 0 1 1E-2 0 1 1E-1 0 1 1E-0 1 1 1E+1 1 1 1E+2 1 1 1E+3 1 1 1E+4 1 1 1E+5 1 1 1E+6 1 1 1E+7 1 1 1E+8 1 1 1E+9 1 1 1E+10 1 1 1E+11 1 1 1E+12 1 1 1E+13 1 1 1E+14 1 1 1E+15 1 1E-15 1 1 1E-14 1 1 1E-13 1 1 1E-12 1 1 1E-11 1 1 1E-10 1 1 1E-9 1 1 1E-8 1 1 1E-7 1 1 1E-6 1 1 1E-5 1 1 1E-4 1 1 1E-3 1 1 1E-2 1 1 1E-1 1 1 1E-0 1 1 1E+1 1 0 1E+2 1 0 1E+3 1 0 1E+4 1 0 1E+5 1 0 1E+6 1 0 1E+7 1 0 1E+8 1 0 1E+9 1 0 1E+10 1 0 1E+11 1 0 1E+12 1 0 1E+13 1 0 1E+14 1 0 1E+15 1 0 0.000000987654321 1E-15 0 0.000000987654321 1E-14 0 0.000000987654321 1E-13 0 0.000000987654321 1E-12 0 0.000000987654321 1E-11 0 0.000000987654321 1E-10 0 0.000000987654321 1E-9 0 0.000000987654321 1E-8 0 0.000000987654321 1E-7 0 0.000000987654321 1E-6 1 0.000000987654321 1E-5 1 0.000000987654321 1E-4 1 0.000000987654321 1E-3 1 0.000000987654321 1E-2 1 0.000000987654321 1E-1 1 0.000000987654321 1E-0 1 0.000000987654321 1E+1 1 0.000000987654321 1E+2 1 0.000000987654321 1E+3 1 0.000000987654321 1E+4 1 12 12.2345 1 12.0 12.2345 1 12.00 12.2345 1 12.000 12.2345 1 12.0000 12.2345 1 12.00000 12.2345 1 12.000000 12.2345 1 12.0000000 12.2345 1 12.00000000 12.2345 1 12.000000000 12.2345 1 12.1234 12 0 12.1234 12.0 0 12.1234 12.00 0 12.1234 12.000 0 12.1234 12.0000 0 12.1234 12.00000 0 12.1234 12.000000 0 12.1234 12.0000000 0 12.1234 12.00000000 0 12.1234 12.000000000 0 -12 -12.2345 0 -12.0 -12.2345 0 -12.00 -12.2345 0 -12.000 -12.2345 0 -12.0000 -12.2345 0 -12.00000 -12.2345 0 -12.000000 -12.2345 0 -12.0000000 -12.2345 0 -12.00000000 -12.2345 0 -12.000000000 -12.2345 0 -12.1234 -12 1 -12.1234 -12.0 1 -12.1234 -12.00 1 -12.1234 -12.000 1 -12.1234 -12.0000 1 -12.1234 -12.00000 1 -12.1234 -12.000000 1 -12.1234 -12.0000000 1 -12.1234 -12.00000000 1 -12.1234 -12.000000000 1 0 0 1 0 -0 1 0 -0.0 1 0 0.0 1 -0 0 1 -0 -0 1 -0 -0.0 1 -0 0.0 1 0.0 0 1 0.0 -0 1 0.0 -0.0 1 0.0 0.0 1 -0.0 0 1 -0.0 -0 1 -0.0 -0.0 1 -0.0 0.0 1 -0E1 0.0 1 -0E2 0.0 1 0E1 0.0 1 0E2 0.0 1 -0E1 0 1 -0E2 0 1 0E1 0 1 0E2 0 1 -0E1 -0E1 1 -0E2 -0E1 1 0E1 -0E1 1 0E2 -0E1 1 -0E1 -0E2 1 -0E2 -0E2 1 0E1 -0E2 1 0E2 -0E2 1 -0E1 0E1 1 -0E2 0E1 1 0E1 0E1 1 0E2 0E1 1 -0E1 0E2 1 -0E2 0E2 1 0E1 0E2 1 0E2 0E2 1 # long number checks (decimal32) 12345678000 1 0 1 12345678000 1 1234567800 1 0 1 1234567800 1 1234567890 1 0 1 1234567890 1 1234567891 1 0 1 1234567891 1 12345678901 1 0 1 12345678901 1 1234567896 1 0 1 1234567896 1 -1234567891 1 1 1 -1234567891 0 -12345678901 1 1 1 -12345678901 0 -1234567896 1 1 1 -1234567896 0 # long number checks (decimal64) 12345678000 1 0 1 12345678000 1 1234567800 1 0 1 1234567800 1 1234567890 1 0 1 1234567890 1 1234567891 1 0 1 1234567891 1 12345678901 1 0 1 12345678901 1 1234567896 1 0 1 1234567896 1 # long number checks (decimal128) -36852134.84194296250843579428931 -5830629.8347085025808756560357940 1 -36852134.84194296250843579428931 -36852134.84194296250843579428931 1 -36852134.94194296250843579428931 -36852134.84194296250843579428931 1 -36852134.84194296250843579428931 -36852134.94194296250843579428931 1 decimal32 -36852134.84194296250843579428931 -36852134.94194296250843579428931 0 decimal64 decimal128 # residue case 1 0.9999999 0 1 0.999999 0 1 0.99999 0 1 1.0000 1 1 1.00001 1 1 1.000001 1 1 1.0000001 1 0.9999999 1 1 0.999999 1 1 0.99999 1 1 1.0000 1 1 1.00001 1 0 1.000001 1 0 1.0000001 1 1 decimal32 1.0000001 1 0 decimal64 decimal128 # special cases Inf -1000 0 Inf -1 0 Inf -0 0 Inf 0 0 Inf 1 0 Inf 1000 0 Inf Inf 1 -1000 Inf 1 -Inf Inf 1 -1 Inf 1 -0 Inf 1 0 Inf 1 1 Inf 1 1000 Inf 1 -Inf -Inf 1 -Inf -1000 1 -Inf -1 1 -Inf -0 1 -Inf 0 1 -Inf 1 1 -Inf 1000 1 -Inf Inf 1 -1000 -Inf 0 -1 -Inf 0 -0 -Inf 0 0 -Inf 0 1 -Inf 0 1000 -Inf 0 Inf -Inf 0 NaN -Inf 0 NaN -1000 0 NaN -1 0 NaN -0 0 NaN 0 0 NaN 1 0 NaN 1000 0 NaN Inf 0 NaN NaN 0 -Inf NaN 0 -1000 NaN 0 -1 NaN 0 -0 NaN 0 0 NaN 0 1 NaN 0 1000 NaN 0 Inf NaN 0 -NaN -NaN 0 +NaN -NaN 0 -NaN +NaN 0 libdfp-1.0.17/tests/islessgreater.input000066400000000000000000000202541504475242000201450ustar00rootroot00000000000000# name islessgreater # arg1 decimal # arg2 decimal # ret int -2 -2 0 -2 -1 1 -2 0 1 -2 1 1 -2 2 1 -1 -2 1 -1 -1 0 -1 1 1 -1 2 1 0 -2 1 0 -1 1 0 0 0 0 1 1 0 2 1 1 -2 1 1 -1 1 1 0 1 1 1 0 1 2 1 2 -2 1 2 -1 1 2 0 1 2 1 1 2 2 0 -200 -200 0 -200 -100 1 -200 0 1 -200 100 1 -200 200 1 -100 -200 1 -100 -100 0 -100 100 1 -100 200 1 0 -200 1 0 -100 1 0 0 0 0 100 1 0 200 1 100 -200 1 100 -100 1 100 0 1 100 100 0 100 200 1 200 -200 1 200 -100 1 200 0 1 200 100 1 200 200 0 # some differing length/exponent cases 7.0 7.0 0 7.0 7 0 7 7.0 0 7E+0 7.0 0 70E-1 7.0 0 0.7E+1 7 0 70E-1 7 0 7.0 7E+0 0 7.0 70E-1 0 7 0.7E+1 0 7 70E-1 0 8.0 7.0 1 8.0 7 1 8 7.0 1 8E+0 7.0 1 80E-1 7.0 1 0.8E+1 7 1 80E-1 7 1 8.0 7E+0 1 8.0 70E-1 1 8 0.7E+1 1 8 70E-1 1 8.0 9.0 1 8.0 9 1 8 9.0 1 8E+0 9.0 1 80E-1 9.0 1 0.8E+1 9 1 80E-1 9 1 8.0 9E+0 1 8.0 90E-1 1 8 0.9E+1 1 8 90E-1 1 7.0 -7.0 1 7.0 -7 1 7 -7.0 1 7E+0 -7.0 1 70E-1 -7.0 1 .7E+1 -7 1 70E-1 -7 1 7.0 -7E+0 1 7.0 -70E-1 1 7 -.7E+1 1 7 -70E-1 1 8.0 -7.0 1 8.0 -7 1 8 -7.0 1 8E+0 -7.0 1 80E-1 -7.0 1 .8E+1 -7 1 80E-1 -7 1 8.0 -7E+0 1 8.0 -70E-1 1 8 -.7E+1 1 8 -70E-1 1 8.0 -9.0 1 8.0 -9 1 8 -9.0 1 8E+0 -9.0 1 80E-1 -9.0 1 .8E+1 -9 1 80E-1 -9 1 8.0 -9E+0 1 8.0 -90E-1 1 8 -.9E+1 1 8 -90E-1 1 -7.0 -7.0 0 -7.0 -7 0 -7 -7.0 0 -7E+0 -7.0 0 -70E-1 -7.0 0 -.7E+1 -7 0 -70E-1 -7 0 -7.0 -7E+0 0 -7.0 -70E-1 0 -7 -.7E+1 0 -7 -70E-1 0 -8.0 -7.0 1 -8.0 -7 1 -8 -7.0 1 -8E+0 -7.0 1 -80E-1 -7.0 1 -.8E+1 -7 1 -80E-1 -7 1 -8.0 -7E+0 1 -8.0 -70E-1 1 -8 -.7E+1 1 -8 -70E-1 1 -8.0 -9.0 1 -8.0 -9 1 -8 -9.0 1 -8E+0 -9.0 1 -80E-1 -9.0 1 -.8E+1 -9 1 -80E-1 -9 1 -8.0 -9E+0 1 -8.0 -90E-1 1 -8 -.9E+1 1 -8 -90E-1 1 123.4560000000000000E789 123.456E789 0 decimal128 123.456000000000000E-89 123.456E-89 0 decimal64 decimal128 123.45600000000000E789 123.456E789 0 decimal128 123.4560000000000E-89 123.456E-89 0 decimal64 decimal128 123.456000000000E789 123.456E789 0 decimal128 123.45600000000E-89 123.456E-89 0 123.4560000000E789 123.456E789 0 decimal128 123.456000000E-89 123.456E-89 0 123.45600000E789 123.456E789 0 decimal128 123.4560000E-89 123.456E-89 0 123.456000E789 123.456E789 0 decimal128 123.45600E-89 123.456E-89 0 123.4560E789 123.456E789 0 decimal128 123.456E-89 123.456E-89 0 123.456E-89 123.4560000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.45600000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.456000000000E-89 0 123.456E789 123.45600000000E789 0 decimal128 123.456E-89 123.4560000000E-89 0 123.456E789 123.456000000E789 0 decimal128 123.456E-89 123.45600000E-89 0 123.456E789 123.4560000E789 0 decimal128 123.456E-89 123.456000E-89 0 123.456E789 123.45600E789 0 decimal128 123.456E-89 123.4560E-89 0 123.456E789 123.456E789 0 decimal128 1 1E-15 1 1 1E-14 1 1 1E-13 1 1 1E-12 1 1 1E-11 1 1 1E-10 1 1 1E-9 1 1 1E-8 1 1 1E-7 1 1 1E-6 1 1 1E-5 1 1 1E-4 1 1 1E-3 1 1 1E-2 1 1 1E-1 1 1 1E-0 0 1 1E+1 1 1 1E+2 1 1 1E+3 1 1 1E+4 1 1 1E+5 1 1 1E+6 1 1 1E+7 1 1 1E+8 1 1 1E+9 1 1 1E+10 1 1 1E+11 1 1 1E+12 1 1 1E+13 1 1 1E+14 1 1 1E+15 1 1E-15 1 1 1E-14 1 1 1E-13 1 1 1E-12 1 1 1E-11 1 1 1E-10 1 1 1E-9 1 1 1E-8 1 1 1E-7 1 1 1E-6 1 1 1E-5 1 1 1E-4 1 1 1E-3 1 1 1E-2 1 1 1E-1 1 1 1E-0 1 0 1E+1 1 1 1E+2 1 1 1E+3 1 1 1E+4 1 1 1E+5 1 1 1E+6 1 1 1E+7 1 1 1E+8 1 1 1E+9 1 1 1E+10 1 1 1E+11 1 1 1E+12 1 1 1E+13 1 1 1E+14 1 1 1E+15 1 1 0.000000987654321 1E-15 1 0.000000987654321 1E-14 1 0.000000987654321 1E-13 1 0.000000987654321 1E-12 1 0.000000987654321 1E-11 1 0.000000987654321 1E-10 1 0.000000987654321 1E-9 1 0.000000987654321 1E-8 1 0.000000987654321 1E-7 1 0.000000987654321 1E-6 1 0.000000987654321 1E-5 1 0.000000987654321 1E-4 1 0.000000987654321 1E-3 1 0.000000987654321 1E-2 1 0.000000987654321 1E-1 1 0.000000987654321 1E-0 1 0.000000987654321 1E+1 1 0.000000987654321 1E+2 1 0.000000987654321 1E+3 1 0.000000987654321 1E+4 1 12 12.2345 1 12.0 12.2345 1 12.00 12.2345 1 12.000 12.2345 1 12.0000 12.2345 1 12.00000 12.2345 1 12.000000 12.2345 1 12.0000000 12.2345 1 12.00000000 12.2345 1 12.000000000 12.2345 1 12.1234 12 1 12.1234 12.0 1 12.1234 12.00 1 12.1234 12.000 1 12.1234 12.0000 1 12.1234 12.00000 1 12.1234 12.000000 1 12.1234 12.0000000 1 12.1234 12.00000000 1 12.1234 12.000000000 1 -12 -12.2345 1 -12.0 -12.2345 1 -12.00 -12.2345 1 -12.000 -12.2345 1 -12.0000 -12.2345 1 -12.00000 -12.2345 1 -12.000000 -12.2345 1 -12.0000000 -12.2345 1 -12.00000000 -12.2345 1 -12.000000000 -12.2345 1 -12.1234 -12 1 -12.1234 -12.0 1 -12.1234 -12.00 1 -12.1234 -12.000 1 -12.1234 -12.0000 1 -12.1234 -12.00000 1 -12.1234 -12.000000 1 -12.1234 -12.0000000 1 -12.1234 -12.00000000 1 -12.1234 -12.000000000 1 0 0 0 0 -0 0 0 -0.0 0 0 0.0 0 -0 0 0 -0 -0 0 -0 -0.0 0 -0 0.0 0 0.0 0 0 0.0 -0 0 0.0 -0.0 0 0.0 0.0 0 -0.0 0 0 -0.0 -0 0 -0.0 -0.0 0 -0.0 0.0 0 -0E1 0.0 0 -0E2 0.0 0 0E1 0.0 0 0E2 0.0 0 -0E1 0 0 -0E2 0 0 0E1 0 0 0E2 0 0 -0E1 -0E1 0 -0E2 -0E1 0 0E1 -0E1 0 0E2 -0E1 0 -0E1 -0E2 0 -0E2 -0E2 0 0E1 -0E2 0 0E2 -0E2 0 -0E1 0E1 0 -0E2 0E1 0 0E1 0E1 0 0E2 0E1 0 -0E1 0E2 0 -0E2 0E2 0 0E1 0E2 0 0E2 0E2 0 # long number checks (decimal32) 12345678000 1 1 1 12345678000 1 1234567800 1 1 1 1234567800 1 1234567890 1 1 1 1234567890 1 1234567891 1 1 1 1234567891 1 12345678901 1 1 1 12345678901 1 1234567896 1 1 1 1234567896 1 -1234567891 1 1 1 -1234567891 1 -12345678901 1 1 1 -12345678901 1 -1234567896 1 1 1 -1234567896 1 # long number checks (decimal64) 12345678000 1 1 1 12345678000 1 1234567800 1 1 1 1234567800 1 1234567890 1 1 1 1234567890 1 1234567891 1 1 1 1234567891 1 12345678901 1 1 1 12345678901 1 1234567896 1 1 1 1234567896 1 # long number checks (decimal128) -36852134.84194296250843579428931 -5830629.8347085025808756560357940 1 -36852134.84194296250843579428931 -36852134.84194296250843579428931 0 -36852134.94194296250843579428931 -36852134.84194296250843579428931 0 decimal32 -36852134.94194296250843579428931 -36852134.84194296250843579428931 1 decimal64 decimal128 -36852134.84194296250843579428931 -36852134.94194296250843579428931 0 decimal32 -36852134.84194296250843579428931 -36852134.94194296250843579428931 1 decimal64 decimal128 # residue case 1 0.9999999 1 1 0.999999 1 1 0.99999 1 1 1.0000 0 1 1.00001 1 1 1.000001 1 1 1.0000001 0 decimal32 1 1.0000001 1 decimal64 decimal128 0.9999999 1 1 0.999999 1 1 0.99999 1 1 1.0000 1 0 1.00001 1 1 1.000001 1 1 1.0000001 1 0 decimal32 1.0000001 1 1 decimal64 decimal128 # special cases Inf -1000 1 Inf -1 1 Inf -0 1 Inf 0 1 Inf 1 1 Inf 1000 1 Inf Inf 0 -1000 Inf 1 -Inf Inf 1 -1 Inf 1 -0 Inf 1 0 Inf 1 1 Inf 1 1000 Inf 1 Inf Inf 0 -Inf -Inf 0 -Inf -1000 1 -Inf -1 1 -Inf -0 1 -Inf 0 1 -Inf 1 1 -Inf 1000 1 -Inf Inf 1 -Inf -Inf 0 -1000 -Inf 1 -1 -Inf 1 -0 -Inf 1 0 -Inf 1 1 -Inf 1 1000 -Inf 1 Inf -Inf 1 NaN -Inf 0 NaN -1000 0 NaN -1 0 NaN -0 0 NaN 0 0 NaN 1 0 NaN 1000 0 NaN Inf 0 NaN NaN 0 NaN -NaN 0 NaN sNaN 0 NaN -sNaN 0 -Inf NaN 0 -1000 NaN 0 -1 NaN 0 -0 NaN 0 0 NaN 0 1 NaN 0 1000 NaN 0 Inf NaN 0 NaN NaN 0 -NaN NaN 0 sNaN NaN 0 -sNaN NaN 0 -NaN -Inf 0 -NaN -1000 0 -NaN -1 0 -NaN -0 0 -NaN 0 0 -NaN 1 0 -NaN 1000 0 -NaN Inf 0 -NaN NaN 0 -NaN -NaN 0 -NaN sNaN 0 -NaN -sNaN 0 -Inf -NaN 0 -1000 -NaN 0 -1 -NaN 0 -0 -NaN 0 0 -NaN 0 1 -NaN 0 1000 -NaN 0 Inf -NaN 0 NaN -NaN 0 -NaN -NaN 0 sNaN -NaN 0 -sNaN -NaN 0 sNaN -Inf 0 sNaN -1000 0 sNaN -1 0 sNaN -0 0 sNaN 0 0 sNaN 1 0 sNaN 1000 0 sNaN Inf 0 sNaN NaN 0 sNaN -NaN 0 sNaN sNaN 0 sNaN -sNaN 0 -Inf sNaN 0 -1000 sNaN 0 -1 sNaN 0 -0 sNaN 0 0 sNaN 0 1 sNaN 0 1000 sNaN 0 Inf sNaN 0 NaN sNaN 0 -NaN sNaN 0 sNaN sNaN 0 -sNaN sNaN 0 -sNaN -Inf 0 -sNaN -1000 0 -sNaN -1 0 -sNaN -0 0 -sNaN 0 0 -sNaN 1 0 -sNaN 1000 0 -sNaN Inf 0 -sNaN NaN 0 -sNaN -NaN 0 -sNaN sNaN 0 -sNaN -sNaN 0 -Inf -sNaN 0 -1000 -sNaN 0 -1 -sNaN 0 -0 -sNaN 0 0 -sNaN 0 1 -sNaN 0 1000 -sNaN 0 Inf -sNaN 0 NaN -sNaN 0 -NaN -sNaN 0 sNaN -sNaN 0 -sNaN -sNaN 0 libdfp-1.0.17/tests/isnan.input000066400000000000000000000006421504475242000164000ustar00rootroot00000000000000# name isnan # arg1 decimal # ret int Inf 0 -Inf 0 NaN 1 -NaN 1 sNaN 1 -sNaN 1 DEC_SUBNORMAL_MIN 0 -DEC_SUBNORMAL_MIN 0 DEC_MIN 0 -DEC_MIN 0 DEC_MAX 0 -DEC_MAX 0 0.1 0 -0.1 0 10E1 0 -10E1 0 0.0 0 -0.0 0 libdfp-1.0.17/tests/isnan_internal.input000066400000000000000000000006441504475242000202760ustar00rootroot00000000000000# name __isnan # arg1 decimal # ret int Inf 0 -Inf 0 NaN 1 -NaN 1 sNaN 1 -sNaN 1 DEC_SUBNORMAL_MIN 0 -DEC_SUBNORMAL_MIN 0 DEC_MIN 0 -DEC_MIN 0 DEC_MAX 0 -DEC_MAX 0 0.1 0 -0.1 0 10E1 0 -10E1 0 0.0 0 -0.0 0 libdfp-1.0.17/tests/isnormal.input000066400000000000000000000015441504475242000171160ustar00rootroot00000000000000# name isnormal # arg1 decimal # ret bool Inf 0 -Inf 0 NaN 0 -NaN 0 sNaN 0 -sNaN 0 DEC_SUBNORMAL_MIN 0 -DEC_SUBNORMAL_MIN 0 1E-100 0 decimal32 -1E-100 0 decimal32 1E-96 0 decimal32 -1E-96 0 decimal32 1E-397 0 decimal64 -1E-397 0 decimal64 1E-384 0 decimal64 -1E-384 0 decimal64 1E-6175 0 decimal128 -1E-6175 0 decimal128 1E-6144 0 decimal128 -1E-6144 0 decimal128 DEC_MIN 1 -DEC_MIN 1 1E-94 1 decimal32 -1E-94 1 decimal32 1E-382 1 decimal64 -1E-382 1 decimal64 1E-6142 1 decimal128 -1E-6142 1 decimal128 DEC_MAX 1 -DEC_MAX 1 0.1 1 -0.1 1 10E1 1 -10E1 1 0.0 0 -0.0 0 libdfp-1.0.17/tests/issignaling.input000066400000000000000000000006501504475242000175760ustar00rootroot00000000000000# name issignaling # arg1 decimal # ret int Inf 0 -Inf 0 NaN 0 -NaN 0 sNaN 1 -sNaN 1 DEC_SUBNORMAL_MIN 0 -DEC_SUBNORMAL_MIN 0 DEC_MIN 0 -DEC_MIN 0 DEC_MAX 0 -DEC_MAX 0 0.0 0 -0.0 0 0.1 0 -0.1 0 10E1 0 -10E1 0 libdfp-1.0.17/tests/isunordered.input000066400000000000000000000200271504475242000176120ustar00rootroot00000000000000# name isunordered # arg1 decimal # arg2 decimal # ret int -2 -2 0 -2 -1 0 -2 0 0 -2 1 0 -2 2 0 -1 -2 0 -1 -1 0 -1 1 0 -1 2 0 0 -2 0 0 -1 0 0 0 0 0 1 0 0 2 0 1 -2 0 1 -1 0 1 0 0 1 1 0 1 2 0 2 -2 0 2 -1 0 2 0 0 2 1 0 2 2 0 -200 -200 0 -200 -100 0 -200 0 0 -200 100 0 -200 200 0 -100 -200 0 -100 -100 0 -100 100 0 -100 200 0 0 -200 0 0 -100 0 0 0 0 0 100 0 0 200 0 100 -200 0 100 -100 0 100 0 0 100 100 0 100 200 0 200 -200 0 200 -100 0 200 0 0 200 100 0 200 200 0 # some differing length/exponent cases 7.0 7.0 0 7.0 7 0 7 7.0 0 7E+0 7.0 0 70E-1 7.0 0 0.7E+1 7 0 70E-1 7 0 7.0 7E+0 0 7.0 70E-1 0 7 0.7E+1 0 7 70E-1 0 8.0 7.0 0 8.0 7 0 8 7.0 0 8E+0 7.0 0 80E-1 7.0 0 0.8E+1 7 0 80E-1 7 0 8.0 7E+0 0 8.0 70E-1 0 8 0.7E+1 0 8 70E-1 0 8.0 9.0 0 8.0 9 0 8 9.0 0 8E+0 9.0 0 80E-1 9.0 0 0.8E+1 9 0 80E-1 9 0 8.0 9E+0 0 8.0 90E-1 0 8 0.9E+1 0 8 90E-1 0 7.0 -7.0 0 7.0 -7 0 7 -7.0 0 7E+0 -7.0 0 70E-1 -7.0 0 .7E+1 -7 0 70E-1 -7 0 7.0 -7E+0 0 7.0 -70E-1 0 7 -.7E+1 0 7 -70E-1 0 8.0 -7.0 0 8.0 -7 0 8 -7.0 0 8E+0 -7.0 0 80E-1 -7.0 0 .8E+1 -7 0 80E-1 -7 0 8.0 -7E+0 0 8.0 -70E-1 0 8 -.7E+1 0 8 -70E-1 0 8.0 -9.0 0 8.0 -9 0 8 -9.0 0 8E+0 -9.0 0 80E-1 -9.0 0 .8E+1 -9 0 80E-1 -9 0 8.0 -9E+0 0 8.0 -90E-1 0 8 -.9E+1 0 8 -90E-1 0 -7.0 -7.0 0 -7.0 -7 0 -7 -7.0 0 -7E+0 -7.0 0 -70E-1 -7.0 0 -.7E+1 -7 0 -70E-1 -7 0 -7.0 -7E+0 0 -7.0 -70E-1 0 -7 -.7E+1 0 -7 -70E-1 0 -8.0 -7.0 0 -8.0 -7 0 -8 -7.0 0 -8E+0 -7.0 0 -80E-1 -7.0 0 -.8E+1 -7 0 -80E-1 -7 0 -8.0 -7E+0 0 -8.0 -70E-1 0 -8 -.7E+1 0 -8 -70E-1 0 -8.0 -9.0 0 -8.0 -9 0 -8 -9.0 0 -8E+0 -9.0 0 -80E-1 -9.0 0 -.8E+1 -9 0 -80E-1 -9 0 -8.0 -9E+0 0 -8.0 -90E-1 0 -8 -.9E+1 0 -8 -90E-1 0 123.4560000000000000E789 123.456E789 0 decimal128 123.456000000000000E-89 123.456E-89 0 decimal64 decimal128 123.45600000000000E789 123.456E789 0 decimal128 123.4560000000000E-89 123.456E-89 0 decimal64 decimal128 123.456000000000E789 123.456E789 0 decimal128 123.45600000000E-89 123.456E-89 0 123.4560000000E789 123.456E789 0 decimal128 123.456000000E-89 123.456E-89 0 123.45600000E789 123.456E789 0 decimal128 123.4560000E-89 123.456E-89 0 123.456000E789 123.456E789 0 decimal128 123.45600E-89 123.456E-89 0 123.4560E789 123.456E789 0 decimal128 123.456E-89 123.456E-89 0 123.456E-89 123.4560000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.45600000000000E-89 0 123.456E789 123.4560000000000E789 0 decimal128 123.456E-89 123.456000000000E-89 0 123.456E789 123.45600000000E789 0 decimal128 123.456E-89 123.4560000000E-89 0 123.456E789 123.456000000E789 0 decimal128 123.456E-89 123.45600000E-89 0 123.456E789 123.4560000E789 0 decimal128 123.456E-89 123.456000E-89 0 123.456E789 123.45600E789 0 decimal128 123.456E-89 123.4560E-89 0 123.456E789 123.456E789 0 decimal128 1 1E-15 0 1 1E-14 0 1 1E-13 0 1 1E-12 0 1 1E-11 0 1 1E-10 0 1 1E-9 0 1 1E-8 0 1 1E-7 0 1 1E-6 0 1 1E-5 0 1 1E-4 0 1 1E-3 0 1 1E-2 0 1 1E-1 0 1 1E-0 0 1 1E+1 0 1 1E+2 0 1 1E+3 0 1 1E+4 0 1 1E+5 0 1 1E+6 0 1 1E+7 0 1 1E+8 0 1 1E+9 0 1 1E+10 0 1 1E+11 0 1 1E+12 0 1 1E+13 0 1 1E+14 0 1 1E+15 0 1E-15 1 0 1E-14 1 0 1E-13 1 0 1E-12 1 0 1E-11 1 0 1E-10 1 0 1E-9 1 0 1E-8 1 0 1E-7 1 0 1E-6 1 0 1E-5 1 0 1E-4 1 0 1E-3 1 0 1E-2 1 0 1E-1 1 0 1E-0 1 0 1E+1 1 0 1E+2 1 0 1E+3 1 0 1E+4 1 0 1E+5 1 0 1E+6 1 0 1E+7 1 0 1E+8 1 0 1E+9 1 0 1E+10 1 0 1E+11 1 0 1E+12 1 0 1E+13 1 0 1E+14 1 0 1E+15 1 0 0.000000987654321 1E-15 0 0.000000987654321 1E-14 0 0.000000987654321 1E-13 0 0.000000987654321 1E-12 0 0.000000987654321 1E-11 0 0.000000987654321 1E-10 0 0.000000987654321 1E-9 0 0.000000987654321 1E-8 0 0.000000987654321 1E-7 0 0.000000987654321 1E-6 0 0.000000987654321 1E-5 0 0.000000987654321 1E-4 0 0.000000987654321 1E-3 0 0.000000987654321 1E-2 0 0.000000987654321 1E-1 0 0.000000987654321 1E-0 0 0.000000987654321 1E+1 0 0.000000987654321 1E+2 0 0.000000987654321 1E+3 0 0.000000987654321 1E+4 0 12 12.2345 0 12.0 12.2345 0 12.00 12.2345 0 12.000 12.2345 0 12.0000 12.2345 0 12.00000 12.2345 0 12.000000 12.2345 0 12.0000000 12.2345 0 12.00000000 12.2345 0 12.000000000 12.2345 0 12.1234 12 0 12.1234 12.0 0 12.1234 12.00 0 12.1234 12.000 0 12.1234 12.0000 0 12.1234 12.00000 0 12.1234 12.000000 0 12.1234 12.0000000 0 12.1234 12.00000000 0 12.1234 12.000000000 0 -12 -12.2345 0 -12.0 -12.2345 0 -12.00 -12.2345 0 -12.000 -12.2345 0 -12.0000 -12.2345 0 -12.00000 -12.2345 0 -12.000000 -12.2345 0 -12.0000000 -12.2345 0 -12.00000000 -12.2345 0 -12.000000000 -12.2345 0 -12.1234 -12 0 -12.1234 -12.0 0 -12.1234 -12.00 0 -12.1234 -12.000 0 -12.1234 -12.0000 0 -12.1234 -12.00000 0 -12.1234 -12.000000 0 -12.1234 -12.0000000 0 -12.1234 -12.00000000 0 -12.1234 -12.000000000 0 0 0 0 0 -0 0 0 -0.0 0 0 0.0 0 -0 0 0 -0 -0 0 -0 -0.0 0 -0 0.0 0 0.0 0 0 0.0 -0 0 0.0 -0.0 0 0.0 0.0 0 -0.0 0 0 -0.0 -0 0 -0.0 -0.0 0 -0.0 0.0 0 -0E1 0.0 0 -0E2 0.0 0 0E1 0.0 0 0E2 0.0 0 -0E1 0 0 -0E2 0 0 0E1 0 0 0E2 0 0 -0E1 -0E1 0 -0E2 -0E1 0 0E1 -0E1 0 0E2 -0E1 0 -0E1 -0E2 0 -0E2 -0E2 0 0E1 -0E2 0 0E2 -0E2 0 -0E1 0E1 0 -0E2 0E1 0 0E1 0E1 0 0E2 0E1 0 -0E1 0E2 0 -0E2 0E2 0 0E1 0E2 0 0E2 0E2 0 # long number checks (decimal32) 12345678000 1 0 1 12345678000 0 1234567800 1 0 1 1234567800 0 1234567890 1 0 1 1234567890 0 1234567891 1 0 1 1234567891 0 12345678901 1 0 1 12345678901 0 1234567896 1 0 1 1234567896 0 -1234567891 1 0 1 -1234567891 0 -12345678901 1 0 1 -12345678901 0 -1234567896 1 0 1 -1234567896 0 # long number checks (decimal64) 12345678000 1 0 1 12345678000 0 1234567800 1 0 1 1234567800 0 1234567890 1 0 1 1234567890 0 1234567891 1 0 1 1234567891 0 12345678901 1 0 1 12345678901 0 1234567896 1 0 1 1234567896 0 # long number checks (decimal128) -36852134.84194296250843579428931 -5830629.8347085025808756560357940 0 -36852134.84194296250843579428931 -36852134.84194296250843579428931 0 -36852134.94194296250843579428931 -36852134.84194296250843579428931 0 -36852134.84194296250843579428931 -36852134.94194296250843579428931 0 decimal32 -36852134.84194296250843579428931 -36852134.94194296250843579428931 0 decimal64 decimal128 # residue case 1 0.9999999 0 1 0.999999 0 1 0.99999 0 1 1.0000 0 1 1.00001 0 1 1.000001 0 1 1.0000001 0 0.9999999 1 0 0.999999 1 0 0.99999 1 0 1.0000 1 0 1.00001 1 0 1.000001 1 0 1.0000001 1 0 decimal32 1.0000001 1 0 decimal64 decimal128 # special cases Inf -1000 0 Inf -1 0 Inf -0 0 Inf 0 0 Inf 1 0 Inf 1000 0 Inf Inf 0 -1000 Inf 0 -Inf Inf 0 -1 Inf 0 -0 Inf 0 0 Inf 0 1 Inf 0 1000 Inf 0 Inf Inf 0 -Inf -Inf 0 -Inf -1000 0 -Inf -1 0 -Inf -0 0 -Inf 0 0 -Inf 1 0 -Inf 1000 0 -Inf Inf 0 -Inf -Inf 0 -1000 -Inf 0 -1 -Inf 0 -0 -Inf 0 0 -Inf 0 1 -Inf 0 1000 -Inf 0 Inf -Inf 0 NaN -Inf 1 NaN -1000 1 NaN -1 1 NaN -0 1 NaN 0 1 NaN 1 1 NaN 1000 1 NaN Inf 1 NaN NaN 1 NaN -NaN 1 NaN sNaN 1 NaN -sNaN 1 -Inf NaN 1 -1000 NaN 1 -1 NaN 1 -0 NaN 1 0 NaN 1 1 NaN 1 1000 NaN 1 Inf NaN 1 NaN NaN 1 -NaN NaN 1 sNaN NaN 1 -sNaN NaN 1 -NaN -Inf 1 -NaN -1000 1 -NaN -1 1 -NaN -0 1 -NaN 0 1 -NaN 1 1 -NaN 1000 1 -NaN Inf 1 -NaN NaN 1 -NaN -NaN 1 -NaN sNaN 1 -NaN -sNaN 1 -Inf -NaN 1 -1000 -NaN 1 -1 -NaN 1 -0 -NaN 1 0 -NaN 1 1 -NaN 1 1000 -NaN 1 Inf -NaN 1 NaN -NaN 1 -NaN -NaN 1 sNaN -NaN 1 -sNaN -NaN 1 sNaN -Inf 1 sNaN -1000 1 sNaN -1 1 sNaN -0 1 sNaN 0 1 sNaN 1 1 sNaN 1000 1 sNaN Inf 1 sNaN NaN 1 sNaN -NaN 1 sNaN sNaN 1 sNaN -sNaN 1 -Inf sNaN 1 -1000 sNaN 1 -1 sNaN 1 -0 sNaN 1 0 sNaN 1 1 sNaN 1 1000 sNaN 1 Inf sNaN 1 NaN sNaN 1 -NaN sNaN 1 sNaN sNaN 1 -sNaN sNaN 1 -sNaN -Inf 1 -sNaN -1000 1 -sNaN -1 1 -sNaN -0 1 -sNaN 0 1 -sNaN 1 1 -sNaN 1000 1 -sNaN Inf 1 -sNaN NaN 1 -sNaN -NaN 1 -sNaN sNaN 1 -sNaN -sNaN 1 -Inf -sNaN 1 -1000 -sNaN 1 -1 -sNaN 1 -0 -sNaN 1 0 -sNaN 1 1 -sNaN 1 1000 -sNaN 1 Inf -sNaN 1 NaN -sNaN 1 -NaN -sNaN 1 sNaN -sNaN 1 -sNaN -sNaN 1 libdfp-1.0.17/tests/ldexp.input000066400000000000000000000015531504475242000164060ustar00rootroot00000000000000# name ldexp # arg1 decimal # arg2 int # ret decimal 1.0 1 10.0 1.0 0 1.0 1.0 -1 0.1 # Verify subnormal exponent math is correct DEC_MIN 1 1E-94 decimal32 DEC_MIN -1 1E-96 decimal32 1E-100 -1 DEC_SUBNORMAL_MIN decimal32 DEC_SUBNORMAL_MIN -1 0 decimal32 DEC_SUBNORMAL_MIN 1 1E-100 decimal32 DEC_MIN 1 1E-382 decimal64 DEC_MIN -1 1E-384 decimal64 1E-397 -1 DEC_SUBNORMAL_MIN decimal64 DEC_SUBNORMAL_MIN -1 0 decimal64 DEC_SUBNORMAL_MIN 1 1E-397 decimal64 DEC_MIN 1 1E-6142 decimal128 DEC_MIN -1 1E-6144 decimal128 1E-6175 -1 DEC_SUBNORMAL_MIN decimal128 DEC_SUBNORMAL_MIN -1 0 decimal128 DEC_SUBNORMAL_MIN 1 1E-6175 decimal128 libdfp-1.0.17/tests/libdfp-test.c000066400000000000000000000422421504475242000165720ustar00rootroot00000000000000/* Copyright (C) 2014-2018 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include #include #include /* Test flags (e.g. possible exceptions) */ #define NO_EXTRA_FLAG 0x0 #define INVALID_EXCEPTION 0x1 #define OVERFLOW_EXCEPTION 0x4 #define INEXACT_EXCEPTION 0x10 #define NO_INEXACT_EXCEPTION 0x200 #define NO_OVERFLOW_EXCEPTION 0x400 #define ERRNO_UNCHANGED 0x8000 #define ERRNO_ERANGE 0x20000 #define IGNORE_RESULT 0x40000 /* Common setup for an individual test. */ #define COMMON_TEST_SETUP(FUNC_NAME, ARG_STR) \ char *test_name; \ if (asprintf (&test_name, "%s (%s)", #FUNC_NAME, (ARG_STR)) == -1) \ abort (); \ feclearexcept (FE_ALL_EXCEPT); \ errno = 0; /* Common cleanup after an individual test. */ #define COMMON_TEST_CLEANUP \ free (test_name) /* Run an individual test, including any required setup and checking of results, or loop over all tests in an array. */ #define RUN_TEST_f_f(FUNC_NAME, ARG_STR, ARG, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_ff_f(FUNC_NAME, ARG_STR, ARG1, ARG2, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_f_i(FUNC_NAME, ARG_STR, ARG, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_int (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_f_l(FUNC_NAME, ARG_STR, ARG, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_long (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_f_L(FUNC_NAME, ARG_STR, ARG, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_longlong (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_f_b(FUNC_NAME, ARG_STR, ARG1, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_bool (test_name, FUNC (FUNC_NAME) (ARG1), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_ff_b(FUNC_NAME, ARG_STR, ARG1, ARG2, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_bool (test_name, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_ff_i(FUNC_NAME, ARG_STR, ARG1, ARG2, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_int (test_name, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define RUN_TEST_fi_f(FUNC_NAME, ARG_STR, ARG1, ARG2, EXPECTED, EXTRAFLAGS) \ do { \ COMMON_TEST_SETUP (FUNC_NAME, ARG_STR); \ check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED, \ EXTRAFLAGS); \ COMMON_TEST_CLEANUP; \ } while (0) #define MANT_DIG CHOOSE ((DEC128_MANT_DIG-1), (DEC64_MANT_DIG-1), (DEC32_MANT_DIG-1)) #define MIN_EXP CHOOSE ((DEC128_MIN_EXP-1), (DEC64_MIN_EXP-1), (DEC32_MIN_EXP-1)) #define SUBNORMAL_MIN CHOOSE ( __DEC128_SUBNORMAL_MIN__, \ __DEC64_SUBNORMAL_MIN__, \ __DEC32_SUBNORMAL_MIN__ ) #define NORMAL_MAX CHOOSE ( __DEC128_MAX__, \ __DEC64_MAX__, \ __DEC32_MAX__ ) #define NORMAL_MAX_ULP CHOOSE ( 1e6111DL, \ 1e369DD, \ 1e90DF ) #define PRINTF_EXPR CHOOSE ("DDe", "De", "He") #define PRINTF_NEXPR CHOOSE ("DDf", "Df", "Hf") #define PRINTF_XEXPR CHOOSE (".33DDe", ".15De", ".7He") /* TODO: Add set parse options. */ #define ulps_file_name "ULPs" /* Name of the ULPs file. */ static FILE *ulps_file; /* File to document difference. */ static int output_ulps; /* Should ulps printed? */ static int noErrors; /* number of errors */ static int noTests; /* number of tests (without testing exceptions) */ static int verbose = 99; static int output_points = 1; /* Should the single function results printed? */ static int max_aggr_ulp = 0; /* Maximum ULP encountered across all tests */ static const char *max_ulp_file = NULL; FLOAT max_allowed_ulp; /* Compare KEY (a string, with the name of a test or a function) with ULP (a pointer to a struct ulp_data structure), returning a value less than, equal to or greater than zero for use in bsearch. */ static int compare_ulp_data (const void *key, const void *ulp) { const char *keystr = key; const struct ulp_data *ulpdata = ulp; return strcmp (keystr, ulpdata->name); } /* Return the ulps for NAME in array DATA with NMEMB elements, or 0 if no ulps listed. */ static FLOAT find_ulps (const char *name, const struct ulp_data *data, size_t nmemb) { const struct ulp_data *entry = bsearch (name, data, nmemb, sizeof (*data), compare_ulp_data); if (entry == NULL) return 0; else return entry->max_ulp; } /* Return the ulps for test NAME. */ static FLOAT find_test_ulps (const char *name) { return find_ulps (name, test_ulps, sizeof (test_ulps) / sizeof (test_ulps[0])); } /* Returns the size of an ulp for VALUE. */ static FLOAT ulp (FLOAT value) { value = FUNC (fabs) (value); /* Sanity check. Values should always be finite. */ if (FUNC(isinf) (value) || FUNC(isnan) (value)) abort (); /* TODO: Subnormals aren't handled well by libdfp today. */ if (FUNC(fpclassify) (value) == FP_SUBNORMAL) return SUBNORMAL_MIN; if (value == NORMAL_MAX) return NORMAL_MAX_ULP; return FUNC(nextafter) (value, DEC_INFINITY) - value; } static void print_ulps (const char *test_name, FLOAT ulp) { if (output_ulps) { fprintf (ulps_file, "Test \"%s\":\n", test_name); fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n", CHOOSE("decimal128", "decimal64", "decimal32"), FUNC(ceil) (ulp)); } } /* Should the message print to screen? This depends on the verbose flag, and the test status. */ static int print_screen (int ok) { if (output_points && (verbose > 1 || (verbose == 1 && ok == 0))) return 1; return 0; } /* Print a FLOAT. */ static void print_float (FLOAT f) { /* As printf doesn't differ between a sNaN and a qNaN, do this manually. */ if (issignaling (f)) printf ("sNaN\n"); else if (isnan (f)) printf ("qNaN\n"); else printf ("% .20" PRINTF_EXPR " %" PRINTF_XEXPR "\n", f, f); } /* Update statistic counters. */ static void update_stats (int ok) { ++noTests; if (!ok) ++noErrors; } /* Returns the number of ulps that GIVEN is away from EXPECTED. */ #define ULPDIFF(given, expected) \ (FUNC(fabs) ((given) - (expected)) / ulp (expected)) /* Test whether a given exception was raised. */ static void test_single_exception (const char *test_name, int exception, int exc_flag, int fe_flag, const char *flag_name) { int ok = 1; if (exception & exc_flag) { if (fetestexcept (fe_flag)) { if (print_screen (1)) printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name); } else { ok = 0; if (print_screen (0)) printf ("Failure: %s: Exception \"%s\" not set\n", test_name, flag_name); } } else { if (fetestexcept (fe_flag)) { ok = 0; if (print_screen (0)) printf ("Failure: %s: Exception \"%s\" set\n", test_name, flag_name); } else { if (print_screen (1)) printf ("%s: Exception \"%s\" not set\n", test_name, flag_name); } } if (!ok) ++noErrors; } static void test_exceptions (const char *test_name, int exception) { #ifdef FE_INEXACT if ((exception & (INEXACT_EXCEPTION | NO_INEXACT_EXCEPTION)) != 0) test_single_exception (test_name, exception, INEXACT_EXCEPTION, FE_INEXACT, "Inexact"); #endif #ifdef FE_INVALID if ((exception & INVALID_EXCEPTION) != 0) test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID, "Invalid"); #endif #ifdef FE_OVERFLOW if ((exception & (OVERFLOW_EXCEPTION | NO_OVERFLOW_EXCEPTION)) != 0) test_single_exception (test_name, exception, OVERFLOW_EXCEPTION, FE_OVERFLOW, "Overflow"); #endif } /* Test whether errno for TEST_NAME, set to ERRNO_VALUE, has value EXPECTED_VALUE (description EXPECTED_NAME). */ static void test_single_errno (const char *test_name, int errno_value, int expected_value, const char *expected_name) { if (errno_value == expected_value) { if (print_screen (1)) printf ("Pass: %s: errno set to %d (%s)\n", test_name, errno_value, expected_name); } else { ++noErrors; if (print_screen (0)) printf ("Failure: %s: errno set to %d, expected %d (%s)\n", test_name, errno_value, expected_value, expected_name); } } /* Test whether errno (value ERRNO_VALUE) has been for TEST_NAME set as required by EXCEPTIONS. */ static void test_errno (const char *test_name, int errno_value, int exceptions) { if (exceptions & ERRNO_UNCHANGED) test_single_errno (test_name, errno_value, 0, "unchanged"); if (exceptions & ERRNO_ERANGE) test_single_errno (test_name, errno_value, ERANGE, "ERANGE"); } static void __attribute__((used)) check_float (const char *test_name, FLOAT computed, FLOAT expected, int extraflags) { int ok = 0; int print_diff = 0; FLOAT diff = 0; FLOAT ulps = 0; int errno_value = errno; test_exceptions (test_name, extraflags); test_errno (test_name, errno_value, extraflags); if (extraflags & IGNORE_RESULT) goto out; if (issignaling (computed) && issignaling (expected)) ok = 1; else if (issignaling (computed) || issignaling (expected)) ok = 0; else if (isnan (computed) && isnan (expected)) ok = 1; else if (isinf (computed) && isinf (expected)) ok = 1; /* Don't calculate ULPs for infinities or any kind of NaNs. */ else if (isinf (computed) || isnan (computed) || isinf (expected) || isnan (expected)) ok = 0; else { diff = FUNC(fabs) (computed - expected); ulps = ULPDIFF (computed, expected); print_diff = 1; //if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0 if (signbit(computed) != signbit (expected)) ok = 0; //else if (ulps <= 0.5 || (ulps <= max_allowed_ulp && !ignore_max_ulp)) else if ((ulps <= 0.5DF) || (ulps <= max_allowed_ulp)) ok = 1; else { ok = 0; print_ulps (test_name, ulps); } if (FUNC(ceil) (ulps) > max_aggr_ulp) max_aggr_ulp = FUNC(ceil) (ulps); } if (print_screen (ok)) { if (!ok) printf ("Failure: "); printf ("Test: %s\n", test_name); printf ("Result:\n"); printf (" is: "); print_float (computed); printf (" should be: "); print_float (expected); if (print_diff) { printf (" difference: % .20" PRINTF_EXPR " %" PRINTF_XEXPR "\n", diff, diff); printf (" ulp : % .4" PRINTF_NEXPR "\n", ulps); printf (" max.ulp : % .4" PRINTF_NEXPR "\n", max_allowed_ulp); } } update_stats (ok); out: errno = 0; } /* Check that computed and expected values are equal (int values). */ static void __attribute__((used)) check_int (const char *test_name, int computed, int expected, int extraflags) { int ok = 0; int errno_value = errno; test_exceptions (test_name, extraflags); test_errno (test_name, errno_value, extraflags); if (extraflags & IGNORE_RESULT) goto out; noTests++; if (computed == expected) ok = 1; if (print_screen (ok)) { if (!ok) printf ("Failure: "); printf ("Test: %s\n", test_name); printf ("Result:\n"); printf (" is: %d\n", computed); printf (" should be: %d\n", expected); } update_stats (ok); out: errno = 0; } /* check that computed and expected values are equal (long int values) */ static void __attribute__((used)) check_long (const char *test_name, long int computed, long int expected, int extraflags) { int ok = 0; int errno_value = errno; test_exceptions (test_name, extraflags); test_errno (test_name, errno_value, extraflags); if (extraflags & IGNORE_RESULT) goto out; noTests++; if (computed == expected) ok = 1; if (print_screen (ok)) { if (!ok) printf ("Failure:"); printf ("Test: %s\n", test_name); printf ("Result:\n"); printf (" is: %ld\n", computed); printf (" should be: %ld\n", expected); } update_stats (ok); out: errno = 0; } /* check that computed and expected values are equal (long int values) */ static void __attribute__((used)) check_longlong (const char *test_name, long long int computed, long long int expected, int extraflags) { int ok = 0; int errno_value = errno; test_exceptions (test_name, extraflags); test_errno (test_name, errno_value, extraflags); if (extraflags & IGNORE_RESULT) goto out; noTests++; if (computed == expected) ok = 1; if (print_screen (ok)) { if (!ok) printf ("Failure:"); printf ("Test: %s\n", test_name); printf ("Result:\n"); printf (" is: %lld\n", computed); printf (" should be: %lld\n", expected); } update_stats (ok); out: errno = 0; } /* Check that computed value is true/false. */ static void __attribute__((used)) check_bool (const char *test_name, int computed, int expected, int extraflags) { int ok = 0; int errno_value = errno; test_exceptions (test_name, extraflags); test_errno (test_name, errno_value, extraflags); if (extraflags & IGNORE_RESULT) goto out; noTests++; if ((computed == 0) == (expected == 0)) ok = 1; if (print_screen (ok)) { if (!ok) printf ("Failure: "); printf ("Test: %s\n", test_name); printf ("Result:\n"); printf (" is: %d\n", computed); printf (" should be: %d\n", expected); } update_stats (ok); out: errno = 0; } /* Parse test options, if any. */ static void scaffold_setup(int argn, char **argv, const char *test) { int opt; max_allowed_ulp = find_test_ulps (test); while ( ((opt = getopt (argn, argv, "v:u:"))) && opt != -1) switch (opt) { default: break; case 'v': verbose = atoi (optarg); break; case 'u': max_ulp_file = optarg; break; } } /* Cleanup. Generate ulps file if requested */ static void scaffold_teardown(void) { if (max_ulp_file) { FILE *ulpf = fopen (max_ulp_file, "w"); if (!ulpf) error(EXIT_FAILURE, 0, "fopen %s", max_ulp_file); fprintf (ulpf, "%s %d\n", CHOOSE("decimal128", "decimal64", "decimal32"), max_aggr_ulp); fclose (ulpf); } } libdfp-1.0.17/tests/llogb.input000066400000000000000000000372031504475242000163720ustar00rootroot00000000000000# name llogb # arg1 decimal # ret longint Inf LONG_MAX decimal32 Inf LONG_MAX decimal64 Inf LONG_MAX decimal128 -Inf LONG_MIN decimal32 -Inf LONG_MIN decimal64 -Inf LONG_MIN decimal128 NaN FP_LLOGBNAN decimal32 NaN FP_LLOGBNAN decimal64 NaN FP_LLOGBNAN decimal128 0e0 FP_LLOGB0 decimal32 0e0 FP_LLOGB0 decimal64 0e0 FP_LLOGB0 decimal128 -0e0 FP_LLOGB0 decimal32 -0e0 FP_LLOGB0 decimal64 -0e0 FP_LLOGB0 decimal128 10e-1 0 decimal32 10e-1 0 decimal64 10e-1 0 decimal128 1076e-2 1 decimal32 1076e-2 1 decimal64 1076e-2 1 decimal128 10240e-1 3 decimal32 10240e-1 3 decimal64 10240e-1 3 decimal128 2000000e-2 4 decimal32 20000001e-3 4 decimal64 20000001e-3 4 decimal128 4000320e-1 5 decimal32 400032003e-3 5 decimal64 400032003e-3 5 decimal128 1e32 32 decimal32 1e32 32 decimal64 1e32 32 decimal128 156e30 32 decimal32 156e30 32 decimal64 156e30 32 decimal128 -156e30 32 decimal32 -156e30 32 decimal64 -156e30 32 decimal128 1e-32 -32 decimal32 1e-32 -32 decimal64 1e-32 -32 decimal128 154e-34 -32 decimal32 154e-34 -32 decimal64 154e-34 -32 decimal128 -154e-34 -32 decimal32 -154e-34 -32 decimal64 -154e-34 -32 decimal128 156e32 34 decimal32 156e32 34 decimal64 156e32 34 decimal128 -156e32 34 decimal32 -156e32 34 decimal64 -156e32 34 decimal128 154e-32 -30 decimal32 154e-32 -30 decimal64 154e-32 -30 decimal128 -154e-32 -30 decimal32 -154e-32 -30 decimal64 -154e-32 -30 decimal128 Inf LONG_MAX decimal32 1542332e118 124 decimal64 1542332e118 124 decimal128 -Inf LONG_MIN decimal32 -1542332e118 124 decimal64 -1542332e118 124 decimal128 0e-101 FP_LLOGB0 decimal32 1542332e-130 -124 decimal64 1542332e-130 -124 decimal128 -0e-101 FP_LLOGB0 decimal32 -1542332e-130 -124 decimal64 -1542332e-130 -124 decimal128 Inf LONG_MAX decimal32 1542332e122 128 decimal64 1542332e122 128 decimal128 -Inf LONG_MIN decimal32 -1542332e122 128 decimal64 -1542332e122 128 decimal128 0e-101 FP_LLOGB0 decimal32 1542332e-126 -120 decimal64 1542332e-126 -120 decimal128 -0e-101 FP_LLOGB0 decimal32 -1542332e-126 -120 decimal64 -1542332e-126 -120 decimal128 Inf LONG_MAX decimal32 Inf LONG_MAX decimal64 19433e1020 1024 decimal128 -Inf LONG_MIN decimal32 -Inf LONG_MIN decimal64 -19433e1020 1024 decimal128 0e-101 FP_LLOGB0 decimal32 0e-398 FP_LLOGB0 decimal64 19433e-1028 -1024 decimal128 -0e-101 FP_LLOGB0 decimal32 -0e-398 FP_LLOGB0 decimal64 -19433e-1028 -1024 decimal128 Inf LONG_MAX decimal32 Inf LONG_MAX decimal64 194338e1024 1029 decimal128 -Inf LONG_MIN decimal32 -Inf LONG_MIN decimal64 -194338e1024 1029 decimal128 0e-101 FP_LLOGB0 decimal32 0e-398 FP_LLOGB0 decimal64 194338e-1024 -1019 decimal128 -0e-101 FP_LLOGB0 decimal32 -0e-398 FP_LLOGB0 decimal64 -194338e-1024 -1019 decimal128 1000000e-7 -1 decimal32 1000000000000000e-16 -1 decimal64 100000000000000000e-18 -1 decimal128 1000000e-7 -1 decimal32 9999999999999999e-17 -2 decimal64 999999999999999900e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999998e-17 -2 decimal64 999999999999999800e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999997e-17 -2 decimal64 999999999999999700e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999996e-17 -2 decimal64 999999999999999600e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999995e-17 -2 decimal64 999999999999999500e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999994e-17 -2 decimal64 999999999999999400e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999993e-17 -2 decimal64 999999999999999300e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999992e-17 -2 decimal64 999999999999999200e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999991e-17 -2 decimal64 999999999999999100e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999990e-17 -2 decimal64 999999999999999000e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999989e-17 -2 decimal64 999999999999998900e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999988e-17 -2 decimal64 999999999999998800e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999987e-17 -2 decimal64 999999999999998700e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999986e-17 -2 decimal64 999999999999998600e-19 -2 decimal128 1000000e-7 -1 decimal32 9999999999999985e-17 -2 decimal64 999999999999998500e-19 -2 decimal128 1e-101 -101 decimal32 1e-398 -398 decimal64 1e-6176 -6176 decimal128 9999999e90 96 decimal32 9999999999999999e369 384 decimal64 9999999999999999999999999999999999e6111 6144 decimal128 -1e-101 -101 decimal32 -1e-398 -398 decimal64 -1e-6176 -6176 decimal128 -9999999e90 96 decimal32 -9999999999999999e369 384 decimal64 -9999999999999999999999999999999999e6111 6144 decimal128 libdfp-1.0.17/tests/llquantexp.input000066400000000000000000000035631504475242000174720ustar00rootroot00000000000000# name llquantexp # arg1 decimal # ret llongint Inf LLONG_MIN -Inf LLONG_MIN NaN LLONG_MIN sNaN LLONG_MIN DEC_SUBNORMAL_MIN -DEC_MIN_EXP_SUB # DEC32_MIN_EXP is -94, but DEC32_MIN is 1E-95DF # DEC64_MIN_EXP is -382, but DEC64_MIN is 1E-383DD # DEC128_MIN_EXP is -6142, but DEC32_MIN is 1E-6143DL DEC_MIN -DEC_MIN_EXP DEC_MAX DEC_MAX_EXP 0.1 -1 0.25 -2 0.625 -3 9.1 -1 9.25 -2 9.625 -3 97.1525 -4 9.15256 -5 9.152456 -6 -20.971525 -6 decimal64 decimal128 -3599.6273704955 -10 decimal64 decimal128 359.962737049625 -12 decimal64 decimal128 -4503599627370495.5 -1 decimal128 4503599627370496.25 -2 decimal128 45035996.273704955 -9 decimal128 1E1 1 1E-1 -1 -1E1 1 -1E-1 -1 9.56E28 26 9.56E-28 -30 -9.56E28 26 -9.58E-28 -30 1E-DEC_MIN_EXP -DEC_MIN_EXP 1E+DEC_MAX_EXP DEC_MAX_EXP 9E343 343 decimal64 decimal128 9.56E343 341 decimal64 decimal128 -9E343 343 decimal64 decimal128 -9.56E343 341 decimal64 decimal128 9.5E-370 -371 decimal64 decimal128 9.567E-370 -373 decimal64 decimal128 9.567E-370 -373 decimal64 decimal128 -9.567E-370 -373 decimal64 decimal128 -9.5678E-370 -374 decimal64 decimal128 9.56789E6050 6045 decimal128 9.56789E-6050 -6055 decimal128 -9E-6050 -6050 decimal128 -9E-6050 -6050 decimal128 libdfp-1.0.17/tests/llrint.input000066400000000000000000000104021504475242000165670ustar00rootroot00000000000000# name llrint # arg1 decimal # ret llongint Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT NaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT sNaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 0.0 0 NO_INEXACT_EXCEPTION -0.0 -0LL NO_INEXACT_EXCEPTION 0.0 0LL NO_INEXACT_EXCEPTION -0.0 -0LL NO_INEXACT_EXCEPTION 0.2 0LL INEXACT_EXCEPTION -0.2 -0LL INEXACT_EXCEPTION 0.5 0LL INEXACT_EXCEPTION -0.5 -0LL INEXACT_EXCEPTION 0.8 1LL INEXACT_EXCEPTION -0.8 -1LL INEXACT_EXCEPTION 1.5 2LL INEXACT_EXCEPTION -1.5 -2LL INEXACT_EXCEPTION 0.1 0LL INEXACT_EXCEPTION 0.25 0LL INEXACT_EXCEPTION 0.625 1LL INEXACT_EXCEPTION -0.1 -0LL INEXACT_EXCEPTION -0.25 -0LL INEXACT_EXCEPTION -0.625 -1LL INEXACT_EXCEPTION 48576.75 48577LL INEXACT_EXCEPTION 97152.75 97153LL INEXACT_EXCEPTION 92472.75 92473LL INEXACT_EXCEPTION 86220.75 86221LL INEXACT_EXCEPTION 58792.75 58793LL INEXACT_EXCEPTION -48576.75 -48577LL INEXACT_EXCEPTION -97152.75 -97153LL INEXACT_EXCEPTION -92472.75 -92473LL INEXACT_EXCEPTION -86220.75 -86221LL INEXACT_EXCEPTION -58792.75 -58793LL INEXACT_EXCEPTION 1048576.75 1048577LL decimal64 decimal128 INEXACT_EXCEPTION 2097152.75 2097153LL decimal64 decimal128 INEXACT_EXCEPTION 2492472.75 2492473LL decimal64 decimal128 INEXACT_EXCEPTION 2886220.75 2886221LL decimal64 decimal128 INEXACT_EXCEPTION 3058792.75 3058793LL decimal64 decimal128 INEXACT_EXCEPTION -1048576.75 -1048577LL decimal64 decimal128 INEXACT_EXCEPTION -2097152.75 -2097153LL decimal64 decimal128 INEXACT_EXCEPTION -2492472.75 -2492473LL decimal64 decimal128 INEXACT_EXCEPTION -2886220.75 -2886221LL decimal64 decimal128 INEXACT_EXCEPTION -3058792.75 -3058793LL decimal64 decimal128 INEXACT_EXCEPTION 68744177664.75 68744177665LL decimal64 decimal128 INEXACT_EXCEPTION 737488355328.75 737488355329LL decimal64 decimal128 INEXACT_EXCEPTION 474976710656.75 474976710657LL decimal64 decimal128 INEXACT_EXCEPTION 949953421312.75 949953421313LL decimal64 decimal128 INEXACT_EXCEPTION 5899906842624.75 5899906842625LL decimal64 decimal128 INEXACT_EXCEPTION -68744177664.75 -68744177665LL decimal64 decimal128 INEXACT_EXCEPTION -737488355328.75 -737488355329LL decimal64 decimal128 INEXACT_EXCEPTION -474976710656.75 -474976710657LL decimal64 decimal128 INEXACT_EXCEPTION -949953421312.75 -949953421313LL decimal64 decimal128 INEXACT_EXCEPTION -899906842624.75 -899906842625LL decimal64 decimal128 INEXACT_EXCEPTION 70368744177664.75 70368744177665LL decimal128 INEXACT_EXCEPTION 140737488355328.75 140737488355329LL decimal128 INEXACT_EXCEPTION 281474976710656.75 281474976710657LL decimal128 INEXACT_EXCEPTION 562949953421312.75 562949953421313LL decimal128 INEXACT_EXCEPTION 1125899906842624.75 1125899906842625LL decimal128 INEXACT_EXCEPTION -70368744177664.75 -70368744177665LL decimal128 INEXACT_EXCEPTION -140737488355328.75 -140737488355329LL decimal128 INEXACT_EXCEPTION -281474976710656.75 -281474976710657LL decimal128 INEXACT_EXCEPTION -562949953421312.75 -562949953421313LL decimal128 INEXACT_EXCEPTION -1125899906842624.75 -1125899906842625LL decimal128 INEXACT_EXCEPTION libdfp-1.0.17/tests/llround.input000066400000000000000000000053541504475242000167540ustar00rootroot00000000000000# name llround # arg1 decimal # ret llongint Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT NaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT sNaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 0.0 0LL NO_INEXACT_EXCEPTION -0.0 -0LL NO_INEXACT_EXCEPTION 0.2 0LL NO_INEXACT_EXCEPTION -0.2 -0LL NO_INEXACT_EXCEPTION 0.5 1LL NO_INEXACT_EXCEPTION -0.5 -1LL NO_INEXACT_EXCEPTION 0.8 1LL NO_INEXACT_EXCEPTION -0.8 -1LL NO_INEXACT_EXCEPTION 1.5 2LL NO_INEXACT_EXCEPTION -1.5 -2LL NO_INEXACT_EXCEPTION 0.1 0LL NO_INEXACT_EXCEPTION 0.25 0LL NO_INEXACT_EXCEPTION 0.625 1LL NO_INEXACT_EXCEPTION -0.1 -0LL NO_INEXACT_EXCEPTION -0.25 -0LL NO_INEXACT_EXCEPTION -0.625 -1LL NO_INEXACT_EXCEPTION 1234.54 1235LL NO_INEXACT_EXCEPTION -1234.54 -1235LL NO_INEXACT_EXCEPTION 97152.5 97153LL NO_INEXACT_EXCEPTION -97152.5 -97153LL NO_INEXACT_EXCEPTION -370495.5 -370496LL NO_INEXACT_EXCEPTION -370496.25 -370496LL NO_INEXACT_EXCEPTION -370496.5 -370497LL NO_INEXACT_EXCEPTION -370496.75 -370497LL NO_INEXACT_EXCEPTION -370497.5 -370498LL NO_INEXACT_EXCEPTION 2097152.5 2097153LL decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.5 -2097153LL decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370495.5 -3599627370496LL decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.25 -3599627370496LL decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.5 -3599627370497LL decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.75 -3599627370497LL decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370497.5 -3599627370498LL decimal64 decimal128 NO_INEXACT_EXCEPTION -4503599627370495.5 -4503599627370496LL decimal128 NO_INEXACT_EXCEPTION -4503599627370496.25 -4503599627370496LL decimal128 NO_INEXACT_EXCEPTION -4503599627370496.5 -4503599627370497LL decimal128 NO_INEXACT_EXCEPTION -4503599627370496.75 -4503599627370497LL decimal128 NO_INEXACT_EXCEPTION -4503599627370497.5 -4503599627370498LL decimal128 NO_INEXACT_EXCEPTION libdfp-1.0.17/tests/log.input000066400000000000000000000072531504475242000160560ustar00rootroot00000000000000# name log # arg1 decimal # ret decimal 7500000e-7 -2876821e-7 decimal32 7500000000000000e-16 -2876820724517809e-16 decimal64 7500000000000000000000000000000000e-34 -2876820724517809274392190059938274e-34 decimal128 1000000e-6 0.0 decimal32 1000000000000000e-15 0.0 decimal64 1000000000000000000000000000000000e-33 0.0 decimal128 2718282e-6 1000000e-6 decimal32 2718281828459045e-15 9999999999999999e-16 decimal64 2718281828459045235360287471352662e-33 9999999999999999999999999999999998e-34 decimal128 3141593e-6 1144730e-6 decimal32 3141592653589793e-15 1144729885849400e-15 decimal64 3141592653589793238462643383279503e-33 1144729885849400174143427351353059e-33 decimal128 2000000e-6 6931472e-7 decimal32 2000000000000000e-15 6931471805599453e-16 decimal64 2000000000000000000000000000000000e-33 6931471805599453094172321214581766e-34 decimal128 1000000e-5 2302585e-6 decimal32 1000000000000000e-14 2302585092994046e-15 decimal64 1000000000000000000000000000000000e-32 2302585092994045684017991454684364e-33 decimal128 NaN NaN decimal32 NaN NaN decimal64 NaN NaN decimal128 Inf Inf decimal32 Inf Inf decimal64 Inf Inf decimal128 0.0 -Inf decimal32 0.0 -Inf decimal64 0.0 -Inf decimal128 -1000000e-6 NaN decimal32 -1000000000000000e-15 NaN decimal64 -1000000000000000000000000000000000e-33 NaN decimal128 9998098e5 2763083e-5 decimal32 9998098361200220e-4 2763083093396513e-14 decimal64 9998098361200220000000000000000000e-22 2763083093396512700258978193309410e-32 decimal128 7998098e5 2740764e-5 decimal32 7998098361200220e-4 2740763983150809e-14 decimal64 7998098361200220000000000000000000e-22 2740763983150809024432971459898351e-32 decimal128 0.0 -Inf decimal32 0.0 -Inf decimal64 999999999999999999999999999999999e-6176 -1414478022626242263692252150612605e-29 decimal128 sNaN NaN libdfp-1.0.17/tests/log10.input000066400000000000000000000103471504475242000162150ustar00rootroot00000000000000# name log10 # arg1 decimal # ret decimal 1000000e-6 0.0 decimal32 1000000000000000e-15 0.0 decimal64 1000000000000000000000000000000000e-33 0.0 decimal128 1000000e-7 -1000000e-6 decimal32 1000000000000000e-16 -1000000000000000e-15 decimal64 1000000000000000000000000000000000e-34 -1000000000000000000000000000000000e-33 decimal128 1000000e-8 -2000000e-6 decimal32 1000000000000000e-17 -2000000000000000e-15 decimal64 1000000000000000000000000000000000e-35 -2000000000000000000000000000000000e-33 decimal128 1000000e-9 -3000000e-6 decimal32 1000000000000000e-18 -3000000000000000e-15 decimal64 1000000000000000000000000000000000e-36 -3000000000000000000000000000000000e-33 decimal128 1000000e-5 1000000e-6 decimal32 1000000000000000e-14 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-32 1000000000000000000000000000000000e-33 decimal128 1000000e-4 2000000e-6 decimal32 1000000000000000e-13 2000000000000000e-15 decimal64 1000000000000000000000000000000000e-31 2000000000000000000000000000000000e-33 decimal128 1000000e-3 3000000e-6 decimal32 1000000000000000e-12 3000000000000000e-15 decimal64 1000000000000000000000000000000000e-30 3000000000000000000000000000000000e-33 decimal128 1100000e-15 -8958607e-6 decimal32 1100000000000000e-24 -8958607314841775e-15 decimal64 1100000000000000000000000000000000e-42 -8958607314841774959249800028756976e-33 decimal128 2718282e-6 4342945e-7 decimal32 2718281828459045e-15 4342944819032518e-16 decimal64 2718281828459045235360287471352662e-33 4342944819032518276511289189166050e-34 decimal128 3141593e-6 4971499e-7 decimal32 3141592653589793e-15 4971498726941338e-16 decimal64 3141592653589793238462643383279503e-33 4971498726941338543512682882908989e-34 decimal128 7500000e-7 -1249387e-7 decimal32 7500000000000000e-16 -1249387366083000e-16 decimal64 7500000000000000000000000000000000e-34 -1249387366082999531324498861938707e-34 decimal128 NaN NaN decimal32 NaN NaN decimal64 NaN NaN decimal128 Inf Inf decimal32 Inf Inf decimal64 Inf Inf decimal128 0.0 -Inf decimal32 0.0 -Inf decimal64 0.0 -Inf decimal128 -1000000e-6 NaN decimal32 -1000000000000000e-15 NaN decimal64 -1000000000000000000000000000000000e-33 NaN decimal128 sNaN NaN libdfp-1.0.17/tests/log1p.input000066400000000000000000000066201504475242000163140ustar00rootroot00000000000000# name log1p # arg1 decimal # ret decimal 0.0 0.0 decimal32 0.0 0.0 decimal64 0.0 0.0 decimal128 -0.0 -0.0 decimal32 -0.0 -0.0 decimal64 -0.0 -0.0 decimal128 -2500000e-7 -2876821e-7 decimal32 -2500000000000000e-16 -2876820724517809e-16 decimal64 -2500000000000000000000000000000000e-34 -2876820724517809274392190059938274e-34 decimal128 -8750000e-7 -2079442e-6 decimal32 -8750000000000000e-16 -2079441541679836e-15 decimal64 -8750000000000000000000000000000000e-34 -2079441541679835928251696364374530e-33 decimal128 1718282e-6 1000000e-6 decimal32 1718281828459045e-15 9999999999999999e-16 decimal64 1718281828459045235360287471352662e-33 9999999999999999999999999999999998e-34 decimal128 3141593e-6 1421080e-6 decimal32 3141592653589793e-15 1421080412794293e-15 decimal64 3141592653589793238462643383279503e-33 1421080412794292633053772196333719e-33 decimal128 2000000e-6 1098612e-6 decimal32 2000000000000000e-15 1098612288668110e-15 decimal64 2000000000000000000000000000000000e-33 1098612288668109691395245236922526e-33 decimal128 1000000e-5 2397895e-6 decimal32 1000000000000000e-14 2397895272798371e-15 decimal64 1000000000000000000000000000000000e-32 2397895272798370544061943577965129e-33 decimal128 NaN NaN decimal32 NaN NaN decimal64 NaN NaN decimal128 Inf Inf decimal32 Inf Inf decimal64 Inf Inf decimal128 -1000000e-6 -Inf decimal32 -1000000000000000e-15 -Inf decimal64 -1000000000000000000000000000000000e-33 -Inf decimal128 -2000000e-6 NaN decimal32 -2000000000000000e-15 NaN decimal64 -2000000000000000000000000000000000e-33 NaN decimal128 sNaN NaN libdfp-1.0.17/tests/logb.input000066400000000000000000000045161504475242000162170ustar00rootroot00000000000000# name logb # arg1 decimal # ret decimal 0 -Inf 1E-DEC_MIN_EXP -DEC_MIN_EXP 9E-DEC_MIN_EXP -DEC_MIN_EXP 0.001 -3 0.03 -2 1 0 2 0 2.5 0 2.50 0 10 1 70 1 100 2 250 2 Inf Inf -0 -Inf -1E-DEC_MIN_EXP -DEC_MIN_EXP -9E-DEC_MIN_EXP -DEC_MIN_EXP -0.001 -3 -1 0 -2 0 -10 1 -70 1 -100 2 -100000000 8 -Inf Inf 0 -Inf -0 -Inf 0E+4 -Inf -0E+4 -Inf 0.0000 -Inf -0.0000 -Inf 0E-141 -Inf -0E-141 -Inf 268268268 8 -268268268 8 134134134 8 -134134134 8 9.9999E+DEC_MAX_EXP DEC_MAX_EXP decimal64 decimal128 1E-DEC_MIN_EXP -DEC_MIN_EXP 1.0000E-DEC_MIN_EXP -DEC_MIN_EXP -1.000E-DEC_MIN_EXP -DEC_MIN_EXP -1E-DEC_MIN_EXP -DEC_MIN_EXP -9.999E+DEC_MAX_EXP DEC_MAX_EXP 1 0 1.0 0 1.000000000000000 0 1.000000000000000000 0 1 0 10 1 100 2 1000 3 10000 4 100000 5 1000000 6 10000000 7 100000000 8 1000000000 9 10000000000 10 100000000000 11 1000000000000 12 0.00000000001 -11 0.0000000001 -10 0.000000001 -9 0.00000001 -8 0.0000001 -7 0.000001 -6 0.00001 -5 0.0001 -4 0.001 -3 0.01 -2 0.1 -1 1E-DEC_MIN_EXP -DEC_MIN_EXP 10E-3 -2 10E-2 -1 100E-2 0 1000E-2 1 10000E-2 2 10E-1 0 100E-1 1 1000E-1 2 10000E-1 3 10E0 1 100E0 2 1000E0 3 10000E0 4 10E1 2 100E1 3 1000E1 4 10000E1 5 10E2 3 100E2 4 1000E2 5 10000E2 6 10000E2 6 1E+99 99 decimal64 decimal128 1E-99 -99 decimal64 decimal128 1E+100 1.0E+2 decimal64 decimal128 1E-100 -1.0E+2 decimal64 decimal128 1E-1111 -1.111E+3 decimal128 1E-3333 -3.333E+3 decimal128 Inf Inf -Inf Inf 0 -Inf NaN NaN sNaN NaN sNaN NaN -sNaN -NaN -NaN -NaN libdfp-1.0.17/tests/lrint.input000066400000000000000000000164541504475242000164300ustar00rootroot00000000000000# name lrint # arg1 decimal # ret longint Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT NaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT sNaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 0.0 0 NO_INEXACT_EXCEPTION -0.0 0 NO_INEXACT_EXCEPTION 0.0 0L NO_INEXACT_EXCEPTION -0.0 0L NO_INEXACT_EXCEPTION 0.2 0L INEXACT_EXCEPTION -0.2 0L INEXACT_EXCEPTION 0.5 0L INEXACT_EXCEPTION -0.5 0L INEXACT_EXCEPTION 0.8 1L INEXACT_EXCEPTION -0.8 -1L INEXACT_EXCEPTION 1.5 2L INEXACT_EXCEPTION -1.5 -2L INEXACT_EXCEPTION 0.1 0L INEXACT_EXCEPTION 0.25 0L INEXACT_EXCEPTION 0.625 1L INEXACT_EXCEPTION -0.1 0L INEXACT_EXCEPTION -0.25 0L INEXACT_EXCEPTION -0.625 -1L INEXACT_EXCEPTION 48576.75 48577L INEXACT_EXCEPTION 97152.75 97153L INEXACT_EXCEPTION 92472.75 92473L INEXACT_EXCEPTION 86220.75 86221L INEXACT_EXCEPTION 58792.75 58793L INEXACT_EXCEPTION -48576.75 -48577L INEXACT_EXCEPTION -97152.75 -97153L INEXACT_EXCEPTION -92472.75 -92473L INEXACT_EXCEPTION -86220.75 -86221L INEXACT_EXCEPTION -58792.75 -58793L INEXACT_EXCEPTION 1048576.75 1048577L decimal64 decimal128 INEXACT_EXCEPTION 2097152.75 2097153L decimal64 decimal128 INEXACT_EXCEPTION 2492472.75 2492473L decimal64 decimal128 INEXACT_EXCEPTION 2886220.75 2886221L decimal64 decimal128 INEXACT_EXCEPTION 3058792.75 3058793L decimal64 decimal128 INEXACT_EXCEPTION -1048576.75 -1048577L decimal64 decimal128 INEXACT_EXCEPTION -2097152.75 -2097153L decimal64 decimal128 INEXACT_EXCEPTION -2492472.75 -2492473L decimal64 decimal128 INEXACT_EXCEPTION -2886220.75 -2886221L decimal64 decimal128 INEXACT_EXCEPTION -3058792.75 -3058793L decimal64 decimal128 INEXACT_EXCEPTION #if sizeof(long int) == 8 68744177664.75 68744177665L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 737488355328.75 737488355329L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 474976710656.75 474976710657L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 949953421312.75 949953421313L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 5899906842624.75 5899906842625L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -68744177664.75 -68744177665L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -737488355328.75 -737488355329L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -474976710656.75 -474976710657L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -949953421312.75 -949953421313L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -899906842624.75 -899906842625L decimal64 decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION #if sizeof(long int) == 4 68744177664.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 737488355328.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 474976710656.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 949953421312.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 5899906842624.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -68744177664.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -737488355328.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -474976710656.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -949953421312.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -899906842624.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT #if sizeof(long int) == 8 70368744177664.75 70368744177665L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 140737488355328.75 140737488355329L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 281474976710656.75 281474976710657L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 562949953421312.75 562949953421313L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION 1125899906842624.75 1125899906842625L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -70368744177664.75 -70368744177665L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -140737488355328.75 -140737488355329L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -281474976710656.75 -281474976710657L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -562949953421312.75 -562949953421313L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION -1125899906842624.75 -1125899906842625L decimal128 ONLY_ON_8BYTE_LONG INEXACT_EXCEPTION #if sizeof(long int) == 4 70368744177664.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 140737488355328.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 281474976710656.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 562949953421312.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 1125899906842624.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -70368744177664.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -140737488355328.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -281474976710656.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -562949953421312.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -1125899906842624.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT libdfp-1.0.17/tests/lround.input000066400000000000000000000104471504475242000165770ustar00rootroot00000000000000# name lround # arg1 decimal # ret longint Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -Inf 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT NaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT sNaN 0 NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT 0.0 0L NO_INEXACT_EXCEPTION -0.0 -0L NO_INEXACT_EXCEPTION 0.2 0L NO_INEXACT_EXCEPTION -0.2 -0L NO_INEXACT_EXCEPTION 0.5 1L NO_INEXACT_EXCEPTION -0.5 -1L NO_INEXACT_EXCEPTION 0.8 1L NO_INEXACT_EXCEPTION -0.8 -1L NO_INEXACT_EXCEPTION 1.5 2L NO_INEXACT_EXCEPTION -1.5 -2L NO_INEXACT_EXCEPTION 0.1 0L NO_INEXACT_EXCEPTION 0.25 0L NO_INEXACT_EXCEPTION 0.625 1L NO_INEXACT_EXCEPTION -0.1 -0L NO_INEXACT_EXCEPTION -0.25 -0L NO_INEXACT_EXCEPTION -0.625 -1L NO_INEXACT_EXCEPTION 1234.54 1235L NO_INEXACT_EXCEPTION -1234.54 -1235L NO_INEXACT_EXCEPTION 97152.5 97153L NO_INEXACT_EXCEPTION -97152.5 -97153L NO_INEXACT_EXCEPTION -370495.5 -370496L NO_INEXACT_EXCEPTION -370496.25 -370496L NO_INEXACT_EXCEPTION -370496.5 -370497L NO_INEXACT_EXCEPTION -370496.75 -370497L NO_INEXACT_EXCEPTION -370497.5 -370498L NO_INEXACT_EXCEPTION 2097152.5 2097153L decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.5 -2097153L decimal64 decimal128 NO_INEXACT_EXCEPTION #if sizeof(long int) == 8 -3599627370495.5 -3599627370496L decimal64 decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -3599627370496.25 -3599627370496L decimal64 decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -3599627370496.5 -3599627370497L decimal64 decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -3599627370496.75 -3599627370497L decimal64 decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -3599627370497.5 -3599627370498L decimal64 decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION #if sizeof(long int) == 4 -3599627370495.5 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -3599627370496.25 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -3599627370496.5 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -3599627370496.75 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -3599627370497.5 0 decimal64 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT #if sizeof(long int) == 8 -4503599627370495.5 -4503599627370496L decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -4503599627370496.25 -4503599627370496L decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -4503599627370496.5 -4503599627370497L decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -4503599627370496.75 -4503599627370497L decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION -4503599627370497.5 -4503599627370498L decimal128 ONLY_ON_8BYTE_LONG NO_INEXACT_EXCEPTION #if sizeof(long int) == 4 -4503599627370495.5 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -4503599627370496.25 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -4503599627370496.5 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -4503599627370496.75 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT -4503599627370497.5 0 decimal128 ONLY_ON_4BYTE_LONG NO_INEXACT_EXCEPTION INVALID_EXCEPTION IGNORE_RESULT libdfp-1.0.17/tests/nearbyint.input000066400000000000000000000104211504475242000172570ustar00rootroot00000000000000# name nearbyint # arg1 decimal # ret decimal Inf Inf NO_INEXACT_EXCEPTION -Inf -Inf NO_INEXACT_EXCEPTION NaN NaN NO_INEXACT_EXCEPTION sNaN NaN NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.2 0.0 NO_INEXACT_EXCEPTION -0.2 -0.0 NO_INEXACT_EXCEPTION 0.5 0.0 NO_INEXACT_EXCEPTION -0.5 -0.0 NO_INEXACT_EXCEPTION 0.8 1.0 NO_INEXACT_EXCEPTION -0.8 -1.0 NO_INEXACT_EXCEPTION 1.5 2.0 NO_INEXACT_EXCEPTION -1.5 -2.0 NO_INEXACT_EXCEPTION 0.1 0.0 NO_INEXACT_EXCEPTION 0.25 0.0 NO_INEXACT_EXCEPTION 0.625 1.0 NO_INEXACT_EXCEPTION -0.1 -0.0 NO_INEXACT_EXCEPTION -0.25 -0.0 NO_INEXACT_EXCEPTION -0.625 -1.0 NO_INEXACT_EXCEPTION 48576.75 48577.0 NO_INEXACT_EXCEPTION 97152.75 97153.0 NO_INEXACT_EXCEPTION 92472.75 92473.0 NO_INEXACT_EXCEPTION 86220.75 86221.0 NO_INEXACT_EXCEPTION 58792.75 58793.0 NO_INEXACT_EXCEPTION -48576.75 -48577.0 NO_INEXACT_EXCEPTION -97152.75 -97153.0 NO_INEXACT_EXCEPTION -92472.75 -92473.0 NO_INEXACT_EXCEPTION -86220.75 -86221.0 NO_INEXACT_EXCEPTION -58792.75 -58793.0 NO_INEXACT_EXCEPTION 1048576.75 1048577.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 2097152.75 2097153.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 2492472.75 2492473.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 2886220.75 2886221.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 3058792.75 3058793.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -1048576.75 -1048577.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.75 -2097153.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2492472.75 -2492473.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2886220.75 -2886221.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3058792.75 -3058793.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 68744177664.75 68744177665.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 737488355328.75 737488355329.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 474976710656.75 474976710657.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 949953421312.75 949953421313.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 5899906842624.75 5899906842625.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -68744177664.75 -68744177665.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -737488355328.75 -737488355329.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -474976710656.75 -474976710657.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -949953421312.75 -949953421313.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -899906842624.75 -899906842625.0 decimal64 decimal128 NO_INEXACT_EXCEPTION 70368744177664.75 70368744177665.0 decimal128 NO_INEXACT_EXCEPTION 140737488355328.75 140737488355329.0 decimal128 NO_INEXACT_EXCEPTION 281474976710656.75 281474976710657.0 decimal128 NO_INEXACT_EXCEPTION 562949953421312.75 562949953421313.0 decimal128 NO_INEXACT_EXCEPTION 1125899906842624.75 1125899906842625.0 decimal128 NO_INEXACT_EXCEPTION -70368744177664.75 -70368744177665.0 decimal128 NO_INEXACT_EXCEPTION -140737488355328.75 -140737488355329.0 decimal128 NO_INEXACT_EXCEPTION -281474976710656.75 -281474976710657.0 decimal128 NO_INEXACT_EXCEPTION -562949953421312.75 -562949953421313.0 decimal128 NO_INEXACT_EXCEPTION -1125899906842624.75 -1125899906842625.0 decimal128 NO_INEXACT_EXCEPTION libdfp-1.0.17/tests/nextafter.input000066400000000000000000000256271504475242000173020ustar00rootroot00000000000000# name nextafter # arg1 decimal # arg2 decimal # ret decimal -1e-101 -1e0 -2e-101 decimal32 -1e-398 -1e0 -2e-398 decimal64 -1e-6176 -1e0 -2e-6176 decimal128 -1e-101 0e0 -0e-101 decimal32 -1e-398 0e0 -0e-398 decimal64 -1e-6176 0e0 -0e-6176 decimal128 1e-101 1e0 2e-101 decimal32 1e-398 1e0 2e-398 decimal64 1e-6176 1e0 2e-6176 decimal128 1e-101 0e0 0e-101 decimal32 1e-398 0e0 0e-398 decimal64 1e-6176 0e0 0e-6176 decimal128 1e-101 1e-101 1e-101 decimal32 1e-398 1e-398 1e-398 decimal64 1e-6176 1e-6176 1e-6176 decimal128 9999999e90 9999999e90 9999999e90 decimal32 9999999999999999e369 9999999999999999e369 9999999999999999e369 decimal64 9999999999999999999999999999999999e6111 9999999999999999999999999999999999e6111 9999999999999999999999999999999999e6111 decimal128 1e-101 -Inf 0e-101 decimal32 1e-398 -Inf 0e-398 decimal64 1e-6176 -Inf 0e-6176 decimal128 1e-101 Inf 2e-101 decimal32 1e-398 Inf 2e-398 decimal64 1e-6176 Inf 2e-6176 decimal128 -1e-101 -Inf -2e-101 decimal32 -1e-398 -Inf -2e-398 decimal64 -1e-6176 -Inf -2e-6176 decimal128 -1e-101 Inf -0e-101 decimal32 -1e-398 Inf -0e-398 decimal64 -1e-6176 Inf -0e-6176 decimal128 -0e-101 -1e0 -1e-101 decimal32 -2e-398 -1e0 -3e-398 decimal64 -2e-398 -1e0 -2000000000000000000000000000000001e-431 decimal128 -9999999e90 9999999e90 -9999998e90 decimal32 -9999999999999999e369 9999999999999999e369 -9999999999999998e369 decimal64 -9999999999999999999999999999999999e6111 9999999999999999999999999999999999e6111 -9999999999999999999999999999999998e6111 decimal128 Inf -Inf 9999999e90 decimal32 Inf -Inf 9999999999999999e369 decimal64 Inf -Inf 9999999999999999999999999999999999e6111 decimal128 -Inf Inf -9999999e90 decimal32 -Inf Inf -9999999999999999e369 decimal64 -Inf Inf -9999999999999999999999999999999999e6111 decimal128 0e0 -0e0 -0e0 decimal32 0e0 -0e0 -0e0 decimal64 0e0 -0e0 -0e0 decimal128 0e0 Inf 1e-101 decimal32 0e0 Inf 1e-398 decimal64 0e0 Inf 1e-6176 decimal128 0e0 -Inf -1e-101 decimal32 0e0 -Inf -1e-398 decimal64 0e0 -Inf -1e-6176 decimal128 NaN NaN NaN decimal32 NaN NaN NaN decimal64 NaN NaN NaN decimal128 0e0 NaN NaN decimal32 0e0 NaN NaN decimal64 0e0 NaN NaN decimal128 NaN 0e0 NaN decimal32 NaN 0e0 NaN decimal64 NaN 0e0 NaN decimal128 1e0 0e0 9999999e-7 decimal32 1e0 0e0 9999999999999999e-16 decimal64 1e0 0e0 9999999999999999999999999999999999e-34 decimal128 -1e0 0e0 -9999999e-7 decimal32 -1e0 0e0 -9999999999999999e-16 decimal64 -1e0 0e0 -9999999999999999999999999999999999e-34 decimal128 -1e0 -2e0 -1000001e-6 decimal32 -1e0 -2e0 -1000000000000001e-15 decimal64 -1e0 -2e0 -1000000000000000000000000000000001e-33 decimal128 1234567e0 -Inf 1234566e0 decimal32 1234567e0 -Inf 1234566999999999e-9 decimal64 1234567e0 -Inf 1234566999999999999999999999999999e-27 decimal128 1234567e0 Inf 1234568e0 decimal32 1234567e0 Inf 1234567000000001e-9 decimal64 1234567e0 Inf 1234567000000000000000000000000001e-27 decimal128 -1234567e0 -Inf -1234568e0 decimal32 -1234567e0 -Inf -1234567000000001e-9 decimal64 -1234567e0 -Inf -1234567000000000000000000000000001e-27 decimal128 -1234567e0 Inf -1234566e0 decimal32 -1234567e0 Inf -1234566999999999e-9 decimal64 -1234567e0 Inf -1234566999999999999999999999999999e-27 decimal128 libdfp-1.0.17/tests/nextdown.input000066400000000000000000000025651504475242000171440ustar00rootroot00000000000000# name nextdown # arg1 decimal # ret decimal 0 -DEC_SUBNORMAL_MIN -0 -DEC_SUBNORMAL_MIN DEC_SUBNORMAL_MIN 0 1 0.9999999 decimal32 2 1.999999 decimal32 3 2.999999 decimal32 3 2.999999999999999 decimal64 3 2.999999999999999999999999999999999 decimal128 9.999998E+DEC_MAX_EXP 9.999997E+DEC_MAX_EXP decimal32 9.999999999999998E+DEC_MAX_EXP 9.999999999999997E+DEC_MAX_EXP decimal64 9.999999999999999999999999999999998E+DEC_MAX_EXP 9.999999999999999999999999999999997E+DEC_MAX_EXP decimal128 -0.999999E-DEC_MIN_EXP -1E-DEC_MIN_EXP decimal32 -0.999999999999999E-DEC_MIN_EXP -1E-DEC_MIN_EXP decimal64 -0.999999999999999999999999999999999E-DEC_MIN_EXP -1E-DEC_MIN_EXP decimal128 NaN NaN Inf DEC_MAX -Inf -Inf -DEC_MAX -Inf libdfp-1.0.17/tests/nexttoward.input000066400000000000000000000301541504475242000174700ustar00rootroot00000000000000# name nexttoward # arg1 decimal # arg2 decimal128 # ret decimal -1e-101 -1e0 -2e-101 decimal32 -1e-398 -1e0 -2e-398 decimal64 -1e-6176 -1e0 -2e-6176 decimal128 -1e-101 0e0 -0e-101 decimal32 -1e-398 0e0 -0e-398 decimal64 -1e-6176 0e0 -0e-6176 decimal128 1e-101 1e0 2e-101 decimal32 1e-398 1e0 2e-398 decimal64 1e-6176 1e0 2e-6176 decimal128 1e-101 0e0 0e-101 decimal32 1e-398 0e0 0e-398 decimal64 1e-6176 0e0 0e-6176 decimal128 1e-101 1e-6176 0e-101 decimal32 1e-398 1e-6176 0e-398 decimal64 1e-6176 1e-6176 1e-6176 decimal128 9999999e90 9999999999999999999999999999999999e6111 Inf decimal32 9999999999999999e369 9999999999999999999999999999999999e6111 Inf decimal64 9999999999999999999999999999999999e6111 9999999999999999999999999999999999e6111 9999999999999999999999999999999999e6111 decimal128 1e-101 -Inf 0e-101 decimal32 1e-398 -Inf 0e-398 decimal64 1e-6176 -Inf 0e-6176 decimal128 1e-101 Inf 2e-101 decimal32 1e-398 Inf 2e-398 decimal64 1e-6176 Inf 2e-6176 decimal128 -1e-101 -Inf -2e-101 decimal32 -1e-398 -Inf -2e-398 decimal64 -1e-6176 -Inf -2e-6176 decimal128 -1e-101 Inf -0e-101 decimal32 -1e-398 Inf -0e-398 decimal64 -1e-6176 Inf -0e-6176 decimal128 -0e-101 -1e0 -1e-101 decimal32 -2e-398 -1e0 -3e-398 decimal64 -2e-398 -1e0 -2000000000000000000000000000000001e-431 decimal128 -9999999e90 9999999999999999999999999999999999e6111 -9999998e90 decimal32 -9999999999999999e369 9999999999999999999999999999999999e6111 -9999999999999998e369 decimal64 -9999999999999999999999999999999999e6111 9999999999999999999999999999999999e6111 -9999999999999999999999999999999998e6111 decimal128 Inf -Inf 9999999e90 decimal32 Inf -Inf 9999999999999999e369 decimal64 Inf -Inf 9999999999999999999999999999999999e6111 decimal128 -Inf Inf -9999999e90 decimal32 -Inf Inf -9999999999999999e369 decimal64 -Inf Inf -9999999999999999999999999999999999e6111 decimal128 0e0 -0e0 -0e0 decimal32 0e0 -0e0 -0e0 decimal64 0e0 -0e0 -0e0 decimal128 0e0 Inf 1e-101 decimal32 0e0 Inf 1e-398 decimal64 0e0 Inf 1e-6176 decimal128 0e0 -Inf -1e-101 decimal32 0e0 -Inf -1e-398 decimal64 0e0 -Inf -1e-6176 decimal128 NaN NaN NaN decimal32 NaN NaN NaN decimal64 NaN NaN NaN decimal128 0e0 NaN NaN decimal32 0e0 NaN NaN decimal64 0e0 NaN NaN decimal128 NaN 0e0 NaN decimal32 NaN 0e0 NaN decimal64 NaN 0e0 NaN decimal128 1e0 0e0 9999999e-7 decimal32 1e0 0e0 9999999999999999e-16 decimal64 1e0 0e0 9999999999999999999999999999999999e-34 decimal128 -1e0 0e0 -9999999e-7 decimal32 -1e0 0e0 -9999999999999999e-16 decimal64 -1e0 0e0 -9999999999999999999999999999999999e-34 decimal128 -1e0 -2e0 -1000001e-6 decimal32 -1e0 -2e0 -1000000000000001e-15 decimal64 -1e0 -2e0 -1000000000000000000000000000000001e-33 decimal128 1234567e0 -Inf 1234566e0 decimal32 1234567e0 -Inf 1234566999999999e-9 decimal64 1234567e0 -Inf 1234566999999999999999999999999999e-27 decimal128 1234567e0 Inf 1234568e0 decimal32 1234567e0 Inf 1234567000000001e-9 decimal64 1234567e0 Inf 1234567000000000000000000000000001e-27 decimal128 -1234567e0 -Inf -1234568e0 decimal32 -1234567e0 -Inf -1234567000000001e-9 decimal64 -1234567e0 -Inf -1234567000000000000000000000000001e-27 decimal128 -1234567e0 Inf -1234566e0 decimal32 -1234567e0 Inf -1234566999999999e-9 decimal64 -1234567e0 Inf -1234566999999999999999999999999999e-27 decimal128 1234567e0 123456700000000000000000000001e-23 1234568e0 decimal32 1234567e0 123456700000000000000000000001e-23 1234567000000001e-9 decimal64 1234567e0 123456700000000000000000000001e-23 1234567000000000000000000000000001e-27 decimal128 1234567e0 123456700000000000000000000001e-23 1234568e0 decimal32 1234567000001e-6 123456700000000000000000000001e-23 1234567000000999e-9 decimal64 1234567000001e-6 123456700000000000000000000001e-23 1234567000000999999999999999999999e-27 decimal128 1234567e0 123456699999999999999999999999e-23 1234566e0 decimal32 1234567000001e-6 123456699999999999999999999999e-23 1234567000000999e-9 decimal64 1234567000001e-6 123456699999999999999999999999e-23 1234567000000999999999999999999999e-27 decimal128 libdfp-1.0.17/tests/nextup.input000066400000000000000000000030711504475242000166120ustar00rootroot00000000000000# name nextup # arg1 decimal # ret decimal -0 DEC_SUBNORMAL_MIN 0 DEC_SUBNORMAL_MIN #if x is the negative number of least magnitude in the type of x, # nextup(x) is −0 if the type has signed zeros and is 0 otherwise. -DEC_SUBNORMAL_MIN -0.0 1 1.000001 decimal32 2 2.000001 decimal32 3 3.000001 decimal32 3 3.000000000000001 decimal64 3 3.000000000000000000000000000000001 decimal128 9.999998E+DEC_MAX_EXP 9.999999E+DEC_MAX_EXP decimal32 9.999999999999998E+DEC_MAX_EXP 9.999999999999999E+DEC_MAX_EXP decimal64 9.999999999999999999999999999999998E+DEC_MAX_EXP 9.999999999999999999999999999999999E+DEC_MAX_EXP decimal128 -1E-DEC_MIN_EXP -0.999999E-DEC_MIN_EXP decimal32 -1E-DEC_MIN_EXP -0.999999999999999E-DEC_MIN_EXP decimal64 -1E-DEC_MIN_EXP -0.999999999999999999999999999999999E-DEC_MIN_EXP decimal128 NaN NaN Inf Inf -Inf -DEC_MAX DEC_MAX Inf libdfp-1.0.17/tests/pow.input000066400000000000000000000516641504475242000161070ustar00rootroot00000000000000# name pow # arg1 decimal # arg2 decimal # ret decimal 2000000e-6 0.0 1000000e-6 decimal32 2000000000000000e-15 0.0 1000000000000000e-15 decimal64 2000000000000000000000000000000000e-33 0.0 1000000000000000000000000000000000e-33 decimal128 2000000e-6 -0.0 1000000e-6 decimal32 2000000000000000e-15 -0.0 1000000000000000e-15 decimal64 2000000000000000000000000000000000e-33 -0.0 1000000000000000000000000000000000e-33 decimal128 0.0 -1000000e-6 Inf decimal32 0.0 -1000000000000000e-15 Inf decimal64 0.0 -1000000000000000000000000000000000e-33 Inf decimal128 -0.0 -1000000e-6 -Inf decimal32 -0.0 -1000000000000000e-15 -Inf decimal64 -0.0 -1000000000000000000000000000000000e-33 -Inf decimal128 0.0 -Inf Inf decimal32 0.0 -Inf Inf decimal64 0.0 -Inf Inf decimal128 -0.0 -Inf Inf decimal32 -0.0 -Inf Inf decimal64 -0.0 -Inf Inf decimal128 0.0 Inf 0.0 decimal32 0.0 Inf 0.0 decimal64 0.0 Inf 0.0 decimal128 -0.0 Inf 0.0 decimal32 -0.0 Inf 0.0 decimal64 -0.0 Inf 0.0 decimal128 0.0 3000000e-6 0.0 decimal32 0.0 3000000000000000e-15 0.0 decimal64 0.0 3000000000000000000000000000000000e-33 0.0 decimal128 -0.0 3000000e-6 -0.0 decimal32 -0.0 3000000000000000e-15 -0.0 decimal64 -0.0 3000000000000000000000000000000000e-33 -0.0 decimal128 -1000000e-6 Inf 1000000e-6 decimal32 -1000000000000000e-15 Inf 1000000000000000e-15 decimal64 -1000000000000000000000000000000000e-33 Inf 1000000000000000000000000000000000e-33 decimal128 -1000000e-6 -Inf 1000000e-6 decimal32 -1000000000000000e-15 -Inf 1000000000000000e-15 decimal64 -1000000000000000000000000000000000e-33 -Inf 1000000000000000000000000000000000e-33 decimal128 1000000e-6 NaN 1000000e-6 decimal32 1000000000000000e-15 NaN 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-33 NaN 1000000000000000000000000000000000e-33 decimal128 1000000e-6 3000000e-6 1000000e-6 decimal32 1000000000000000e-15 3000000000000000e-15 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-33 3000000000000000000000000000000000e-33 1000000000000000000000000000000000e-33 decimal128 9000000e-7 Inf 0.0 decimal32 9000000000000000e-16 Inf 0.0 decimal64 9000000000000000000000000000000000e-34 Inf 0.0 decimal128 1100000e-6 Inf Inf decimal32 1100000000000000e-15 Inf Inf decimal64 1100000000000000000000000000000000e-33 Inf Inf decimal128 -1100000e-6 Inf Inf decimal32 -1100000000000000e-15 Inf Inf decimal64 -1100000000000000000000000000000000e-33 Inf Inf decimal128 9000000e-7 -Inf Inf decimal32 9000000000000000e-16 -Inf Inf decimal64 9000000000000000000000000000000000e-34 -Inf Inf decimal128 1100000e-6 -Inf 0.0 decimal32 1100000000000000e-15 -Inf 0.0 decimal64 1100000000000000000000000000000000e-33 -Inf 0.0 decimal128 -1100000e-6 -Inf 0.0 decimal32 -1100000000000000e-15 -Inf 0.0 decimal64 -1100000000000000000000000000000000e-33 -Inf 0.0 decimal128 Inf -1000000e-7 0.0 decimal32 Inf -1000000000000000e-16 0.0 decimal64 Inf -1000000000000000000000000000000000e-34 0.0 decimal128 Inf 1000000e-7 Inf decimal32 Inf 1000000000000000e-16 Inf decimal64 Inf 1000000000000000000000000000000000e-34 Inf decimal128 -Inf -1000000e-6 -0.0 decimal32 -Inf -1000000000000000e-15 -0.0 decimal64 -Inf -1000000000000000000000000000000000e-33 -0.0 decimal128 -Inf 3000000e-6 -Inf decimal32 -Inf 3000000000000000e-15 -Inf decimal64 -Inf 3000000000000000000000000000000000e-33 -Inf decimal128 -Inf -4000000e-6 0.0 decimal32 -Inf -4000000000000000e-15 0.0 decimal64 -Inf -4000000000000000000000000000000000e-33 0.0 decimal128 -Inf 4000000e-6 Inf decimal32 -Inf 4000000000000000e-15 Inf decimal64 -Inf 4000000000000000000000000000000000e-33 Inf decimal128 2000000e-6 -1279000e-3 0.0 decimal32 2000000000000000e-15 -1279000000000000e-12 9608056444801e-398 decimal64 2000000000000000000000000000000000e-33 -1279000000000000000000000000000000e-30 9608056444801279046360026822793240e-419 decimal128 2000000e-6 -1278900e-3 0.0 decimal32 2000000000000000e-15 -1278900000000000e-12 10297659924089e-398 decimal64 2000000000000000000000000000000000e-33 -1278900000000000000000000000000000e-30 1029765992408881373826499053122125e-418 decimal128 0.0 -0.0 1000000e-6 decimal32 1e-398 -1e-398 1000000000000000e-15 decimal64 1000000000000000000000000000000000e-431 -1000000000000000000000000000000000e-431 1000000000000000000000000000000000e-33 decimal128 1234568e-6 1234568e-6 1297124e-6 decimal32 1234567800000000e-15 1234567800000000e-15 1297123731240148e-15 decimal64 1234567800000000000000000000000000e-33 1234567800000000000000000000000000e-33 1297123731240147537684763556982358e-33 decimal128 1234568e-6 1234568e-6 1297124e-6 decimal32 1234567890123456e-15 1234567890123456e-15 1297123872774980e-15 decimal64 1234567890123456000000000000000000e-33 1234567890123456000000000000000000e-33 1297123872774980377427149291081183e-33 decimal128 3234568e-6 2345679e-7 1317002e-6 decimal32 3234567890123456e-15 2345678901234567e-16 1317002280643702e-15 decimal64 3234567890123456000000000000000000e-33 2345678901234567000000000000000000e-34 1317002280643701762731626856980009e-33 decimal128 1000000e-6 -2147484e3 1000000e-6 decimal32 1000000000000001e-15 -2147483648000000e-6 9999978525186578e-16 decimal64 1000000000000001000000000000000000e-33 -2147483648000000000000000000000000e-24 9999978525186578413597016005746024e-34 decimal128 1000000e-6 -4294967e3 1000000e-6 decimal32 1000000000000001e-15 -4294967296000000e-6 9999957050419274e-16 decimal64 1000000000000001000000000000000000e-33 -4294967296000000000000000000000000e-24 9999957050419273588343226762750340e-34 decimal128 1000000e-6 9223372e12 1000000e-6 decimal32 1000000000000001e-15 9223372036854776e3 Inf decimal64 1000000000000001000000000000000000e-33 9223372036854775807000000000000000e-15 4566465141612064748496112540614999e3972 decimal128 3190343e7 -1554935e-6 1005566e-27 decimal32 3190343025418252e-2 -1554935464914614e-15 1005551559853848e-36 decimal64 3190343025418252000000000000000000e-20 -1554935464914614000000000000000000e-33 1005551559853848356269012840508661e-54 decimal128 1085075e-2 -1985862e-6 9685762e-15 decimal32 1085075451392875e-11 -1985862169552180e-15 9685739223864927e-24 decimal64 1085075451392875000000000000000000e-29 -1985862169552180000000000000000000e-33 9685739223864927096824376046376868e-42 decimal128 1968779e3 -5387110e-5 0.0 decimal32 1968778579244000e-6 -5387110026112810e-14 0.0 decimal64 1968778579244000000000000000000000e-24 -5387110026112810000000000000000000e-32 2048275042770202834666596307826820e-534 decimal128 4980841e-6 8315056e-5 9574325e51 decimal32 4980840501856828e-15 8315055828174380e-14 9574219447582558e42 decimal64 4980840501856828000000000000000000e-33 8315055828174380000000000000000000e-32 9574219447582558214567296514834461e24 decimal128 2649431e3 6313925e-5 Inf decimal32 2649430911977141e-6 6313924709279201e-14 Inf decimal64 2649430911977141000000000000000000e-24 6313924709279201000000000000000000e-32 9348896404404512881240452709182781e561 decimal128 3410000e-5 1950000e-5 7739455e23 decimal32 3410000000000000e-14 1950000000000000e-14 7739455194504587e14 decimal64 3410000000000000000000000000000000e-32 1950000000000000000000000000000000e-32 7739455194504587105556283286963126e-4 decimal128 9995098e8 -8071575e-7 7812848e-19 decimal32 9995097734021537e-1 -8071575464182300e-16 7812835708576727e-28 decimal64 9995097734021537000000000000000000e-19 -8071575464182300000000000000000000e-34 7812835708576727474538107955596401e-46 decimal128 9998098e5 -6232479e-7 3319531e-14 decimal32 9998098361200220e-4 -6232479282484481e-16 3319528014701172e-23 decimal64 9998098361200220000000000000000000e-22 -6232479282484481000000000000000000e-34 3319528014701171733930991469888144e-41 decimal128 2000000e-6 1255000e-3 Inf decimal32 2000000000000000e-15 1255000000000000e-12 6203611013093233e362 decimal64 2000000000000000000000000000000000e-33 1255000000000000000000000000000000e-30 6203611013093232561305308537104181e344 decimal128 2000000e-6 1265000e-3 Inf decimal32 2000000000000000e-15 1265000000000000e-12 6352497677407470e365 decimal64 2000000000000000000000000000000000e-33 1265000000000000000000000000000000e-30 6352497677407470142776635941994681e347 decimal128 2000000e-6 -1000000e-6 5000000e-7 decimal32 2000000000000000e-15 -9999999999999999e-16 5000000000000000e-16 decimal64 2000000000000000000000000000000000e-33 -9999999999999999000000000000000000e-34 5000000000000000346573590279972667e-34 decimal128 2000000e-6 -1000000e-6 5000000e-7 decimal32 2000000000000000e-15 -1000000000000000e-15 5000000000000000e-16 decimal64 2000000000000000000000000000000000e-33 -1000000000000000000000000000000000e-33 5000000000000000000000000000000000e-34 decimal128 2000000e-6 -1000000e-6 5000000e-7 decimal32 2000000000000000e-15 -1000000000000001e-15 4999999999999997e-16 decimal64 2000000000000000000000000000000000e-33 -1000000000000001000000000000000000e-33 4999999999999996534264097200274654e-34 decimal128 2000000e-6 Inf Inf decimal32 2000000000000000e-15 5203966097332200e369 Inf decimal64 2000000000000000000000000000000000e-33 5203966097332200000000000000000000e351 Inf decimal128 2000000e-6 4611686e12 Inf decimal32 2000000000000000e-15 4611686018427389e3 Inf decimal64 2000000000000000000000000000000000e-33 4611686018427389000000000000000000e-15 Inf decimal128 2000000e-6 4611686e12 Inf decimal32 2000000000000000e-15 4611686018427388e3 Inf decimal64 2000000000000000000000000000000000e-33 4611686018427388000000000000000000e-15 Inf decimal128 2000000e-6 1000000e11 Inf decimal32 2000000000000000e-15 1000000000000000e2 Inf decimal64 2000000000000000000000000000000000e-33 1000000000000000000000000000000000e-16 Inf decimal128 libdfp-1.0.17/tests/quantize.input000066400000000000000000000366141504475242000171400ustar00rootroot00000000000000# name quantize # arg1 decimal # arg2 decimal # ret decimal # TODO: add subnormal rounding testes 0 1e0 0 1 1e0 1 0.1 1e+2 0E+2 0.1 1e+1 0E+1 0.1 1e0 0 0.1 1e-1 0.1 0.1 1e-2 0.10 0.1 1e-3 0.100 0.9 1e+2 0E+2 0.9 1e+1 0E+1 0.9 1e+0 1 0.9 1e-1 0.9 0.9 1e-2 0.90 0.9 1e-3 0.900 -0.0 1e0 -0.0 -1.0 1e0 -1.0 -0.1 1e+2 -0E+2 -0.1 1e+1 -0E+1 -0.1 1e0 -0.0 -0.1 1e-1 -0.1 -0.1 1e-2 -0.10 -0.1 1e-3 -0.100 -0.9 1e+2 -0E+2 -0.9 1e+1 -0E+1 -0.9 1e+0 -1.0 -0.9 1e-1 -0.9 -0.9 1e-2 -0.90 -0.9 1e-3 -0.900 -0.5 1e+2 -0E+2 -0.5 1e+1 -0E+1 #-0.5 1e+0 -1 -0.5 1e-1 -0.5 -0.5 1e-2 -0.50 -0.5 1e-3 -0.500 -0.9 1e+2 -0E+2 -0.9 1e+1 -0E+1 -0.9 1e+0 -1.0 -0.9 1e-1 -0.9 -0.9 1e-2 -0.90 -0.9 1e-3 -0.900 2.17 0.001 2.170 2.17 0.01 2.17 2.17 0.1 2.2 2.17 1e+0 2 2.17 1e+1 0E+1 -Inf Inf -Inf 2 Inf NaN -0.1 1.0 -0.1 -0.1 1 -0.0 -0.0 1e+5 -0E+5 217 1e-1 217.0 217 1e+0 217 217 1e+1 2.2E+2 217 1e+2 2E+2 12 1e+4 0E+4 12 1e+3 0E+3 12 1e+2 0E+2 12 1e+1 1E+1 1.2345 1e-2 1.23 1.2355 1e-2 1.24 1.2345 1e-6 1.234500 9.9999 1e-2 10.00 0.0001 1e-2 0.00 0.001 1e-2 0.00 0.009 1e-2 0.01 92 1e+2 1E+2 -1 1e0 -1 -1 1e-1 -1.0 -1 1e-2 -1.00 0 1e0 0 0 1e-1 0.0 0 1e-2 0.00 0.00 1e0 0 0 1e+1 0E+1 0 1e+2 0E+2 +1 1e0 1 +1 1e-1 1.0 +1 1e-2 1.00 1.04 1e-3 1.040 1.04 1e-2 1.04 1.04 1e-1 1.0 1.04 1e0 1 1.05 1e-3 1.050 1.05 1e-2 1.05 1.05 1e-1 1 1.05 1e0 1 1.06 1e-3 1.060 1.06 1e-2 1.06 1.06 1e-1 1.1 1.06 1e0 1 -10 1e-2 -10.00 +1 1e-2 1.00 +10 1e-2 10.00 1E-10 1e-2 0.00 1E-3 1e-2 0.00 1E-2 1e-2 0.01 1E-1 1e-2 0.10 0E-10 1e-2 0.00 1.0600 1e-5 1.06000 1.0600 1e-4 1.0600 1.0600 1e-3 1.060 1.0600 1e-2 1.06 1.0600 1e-1 1.1 1.0600 1e0 1 # base tests with non-1 coefficients 0 -9e0 0 1 -7e0 1 0.1 -1e+2 0E+2 0.1 0e+1 0E+1 0.1 2e0 0 0.1 3e-1 0.1 0.1 44e-2 0.10 0.1 555e-3 0.100 0.9 6666e+2 0E+2 0.9 -777e+1 0E+1 0.9 -88e+0 1 0.9 -9e-1 0.9 0.9 0e-2 0.90 0.9 1.1e-3 0.9000 -0.0 1.1e0 -0.0 -1.0 -1e0 -1.0 -0.1 11e+2 -0E+2 -0.1 111e+1 -0E+1 -0.1 71e0 -0.0 -0.1 -91e-1 -0.1 -0.1 -.1e-2 -0.100 -0.1 -1e-3 -0.100 -0.9 0e+2 -0E+2 -0.9 -0e+1 -0E+1 -0.9 -10e+0 -1 -0.9 100e-1 -0.9 -0.9 999e-2 -0.90 -1 1e+0 -1 -1 1e+1 -0E+1 -1 1e+2 -0E+2 0 1e+0 0 0 1e+1 0E+1 0 1e+2 0E+2 +1 1e+0 1 +1 1e+1 0E+1 +1 1e+2 0E+2 1.04 1e+3 0E+3 1.04 1e+2 0E+2 1.04 1e+1 0E+1 1.04 1e+0 1 1.05 1e+3 0E+3 1.05 1e+2 0E+2 1.05 1e+1 0E+1 1.05 1e+0 1 1.05 1e+3 0E+3 1.05 1e+2 0E+2 1.05 1e+1 0E+1 1.05 1e+0 1 1.06 1e+3 0E+3 1.06 1e+2 0E+2 1.06 1e+1 0E+1 1.06 1e+0 1 -10 1e+1 -1E+1 +1 1e+1 0E+1 +10 1e+1 1E+1 1E+1 1e+1 1E+1 1E+2 1e+1 1.0E+2 1E+3 1e+1 1.00E+3 1E+4 1e+1 1.000E+4 1E+5 1e+1 1.0000E+5 1E+6 1e+1 1.00000E+6 1E+7 1e+1 1.000000E+7 1E+8 1e+1 qNaN decimal32 1E+8 1e+1 1.0000000E+8 decimal64 decimal128 1E+9 1e+1 qNaN decimal32 1E+9 1e+1 1.00000000E+9 decimal64 decimal128 # 1E+10 1e+1 NaN 1E-10 1e+1 0E+1 1E-2 1e+1 0E+1 0E-10 1e+1 0E+1 -0E-10 1e+1 -0E+1 -0E-1 1e+1 -0E+1 -0.0 1e+1 -0E+1 -0E+1 1e+1 -0E+1 -10 1e+2 -0E+2 +1 1e+2 0E+2 +10 1e+2 0E+2 1E+1 1e+2 0E+2 1E+2 1e+2 1E+2 1E+3 1e+2 1.0E+3 1E+4 1e+2 1.00E+4 1E+5 1e+2 1.000E+5 1E+6 1e+2 1.0000E+6 1E+7 1e+2 1.00000E+7 1E+8 1e+2 1.000000E+8 1E+9 1e+2 qNaN decimal32 1E+9 1e+2 1.0000000E+9 decimal64 decimal128 1E+10 1e+2 qNaN decimal32 1E+10 1e+2 1.00000000E+10 decimal64 decimal128 1E-10 1e+2 0E+2 1E-2 1e+2 0E+2 0E-10 1e+2 0E+2 -10 1e+3 -0E+3 +1 1e+3 0E+3 +10 1e+3 0E+3 1E+1 1e+3 0E+3 1E+2 1e+3 0E+3 1E+3 1e+3 1E+3 1E+4 1e+3 1.0E+4 1E+5 1e+3 1.00E+5 1E+6 1e+3 1.000E+6 1E+7 1e+3 1.0000E+7 1E+8 1e+3 1.00000E+8 1E+9 1e+3 1.000000E+9 1E+10 1e+3 qNaN decimal32 1E+10 1e+3 1.0000000E+10 decimal64 decimal128 1E-10 1e+3 0E+3 1E-2 1e+3 0E+3 0E-10 1e+3 0E+3 0.0078 1e-5 0.00780 0.0078 1e-4 0.0078 0.0078 1e-3 0.008 0.0078 1e-2 0.01 0.0078 1e-1 0.0 0.0078 1e0 0.0 0.0078 1e+1 0E+1 0.0078 1e+2 0E+2 -0.0078 1e-5 -0.00780 -0.0078 1e-4 -0.0078 -0.0078 1e-3 -0.008 -0.0078 1e-2 -0.01 -0.0078 1e-1 -0.0 -0.0078 1e0 -0.0 -0.0078 1e+1 -0E+1 -0.0078 1e+2 -0E+2 0.078 1e-5 0.07800 0.078 1e-4 0.0780 0.078 1e-3 0.078 0.078 1e-2 0.08 0.078 1e-1 0.1 0.078 1e0 0.0 0.078 1e+1 0E+1 0.078 1e+2 0E+2 -0.078 1e-5 -0.07800 -0.078 1e-4 -0.0780 -0.078 1e-3 -0.078 -0.078 1e-2 -0.08 -0.078 1e-1 -0.1 -0.078 1e0 -0.0 -0.078 1e+1 -0E+1 -0.078 1e+2 -0E+2 0.78 1e-5 0.78000 0.78 1e-4 0.7800 0.78 1e-3 0.780 0.78 1e-2 0.78 0.78 1e-1 0.8 0.78 1e0 1 0.78 1e+1 0E+1 0.78 1e+2 0E+2 -0.78 1e-5 -0.78000 -0.78 1e-4 -0.7800 -0.78 1e-3 -0.780 -0.78 1e-2 -0.78 -0.78 1e-1 -0.8 -0.78 1e0 -1 -0.78 1e+1 -0E+1 -0.78 1e+2 -0E+2 7.8 1e-5 7.80000 7.8 1e-4 7.8000 7.8 1e-3 7.800 7.8 1e-2 7.80 7.8 1e-1 7.8 7.8 1e0 8 7.8 1e+1 1E+1 7.8 1e+2 0E+2 7.8 1e+3 0E+3 -7.8 1e-5 -7.80000 -7.8 1e-4 -7.8000 -7.8 1e-3 -7.800 -7.8 1e-2 -7.80 -7.8 1e-1 -7.8 -7.8 1e0 -8 -7.8 1e+1 -1E+1 -7.8 1e+2 -0E+2 -7.8 1e+3 -0E+3 352364.506 1e-2 qNaN decimal32 352364.506 1e-2 352364.51 decimal64 decimal128 3523645.06 1e-2 qNaN decimal32 3523645.06 1e-2 3523645.06 decimal64 decimal128 -352364.506 1e-2 qNaN decimal32 -352364.506 1e-2 -352364.51 decimal64 decimal128 -3523645.06 1e-2 qNaN decimal32 -3523645.06 1e-2 -3523645.06 decimal64 decimal128 12.34567 1e-3 12.346 123.4567 1e-3 123.457 1234.567 1e-3 1234.567 9.999 1e-5 9.99900 9.999 1e-4 9.9990 9.999 1e-3 9.999 9.999 1e-2 10.00 9.999 1e-1 10.0 9.999 1e0 10 9.999 1e1 1E+1 9.999 1e2 0E+2 0.999 1e-5 0.99900 0.999 1e-4 0.9990 0.999 1e-3 0.999 0.999 1e-2 1.00 0.999 1e-1 1.0 0.999 1e0 1 0.999 1e1 0E+1 0.0999 1e-5 0.09990 0.0999 1e-4 0.0999 0.0999 1e-3 0.100 0.0999 1e-2 0.10 0.0999 1e-1 0.1 0.0999 1e0 0 0.0999 1e1 0E+1 0.00999 1e-5 0.00999 0.00999 1e-4 0.0100 0.00999 1e-3 0.010 0.00999 1e-2 0.01 0.00999 1e-1 0.0 0.00999 1e0 0 0.00999 1e1 0E+1 0.000999 1e-5 0.00100 0.000999 1e-4 0.0010 0.000999 1e-3 0.001 0.000999 1e-2 0.00 0.000999 1e-1 0.0 0.000999 1e0 0 0.000999 1e1 0E+1 12345678000 1e+3 qNaN decimal32 12345678000 1e+3 1.2345678E+10 decimal64 decimal128 1234567800 1e+1 qNaN decimal32 1234567800 1e+1 1.23456780E+9 decimal64 decimal128 1234567890 1e+1 qNaN decimal32 1234567890 1e+1 1.23456789E+9 decimal64 decimal128 1234567891 1e+1 qNaN decimal32 1234567891 1e+1 1.23456789E+9 decimal64 decimal128 12345678901 1e+2 qNaN decimal32 12345678901 1e+2 1.23456789E+10 decimal64 decimal128 1234567896 1e+1 qNaN decimal32 1234567896 1e+1 1.23456790E+9 decimal64 decimal128 1234.987643 1e-4 qNaN decimal32 1234.987643 1e-4 1234.9876 decimal64 decimal128 1234.987647 1e-4 qNaN decimal32 1234.987647 1e-4 1234.9876 decimal64 decimal128 12345678000 1e+3 qNaN decimal32 12345678000 1e+3 1.2345678E+10 decimal64 decimal128 1234567800 1e+1 qNaN decimal32 1234567800 1e+1 1.23456780E+9 decimal64 decimal128 1234567890 1e+1 qNaN decimal32 1234567890 1e+1 1.23456789E+9 decimal64 decimal128 1234567891 1e+1 qNaN decimal32 1234567891 1e+1 1.23456789E+9 decimal64 decimal128 12345678901 1e+2 qNaN decimal32 12345678901 1e+2 1.23456789E+10 decimal64 decimal128 1234567896 1e+1 qNaN decimal32 1234567896 1e+1 1.23456790E+9 decimal64 decimal128 1234.987643 1e-4 qNaN decimal32 1234.987643 1e-4 1234.9876 decimal64 decimal128 1234.987647 1e-4 qNaN decimal32 1234.987647 1e-4 1234.9876 decimal64 decimal128 0.0 1e1 0E+1 0.0 1e0 0.0 0.0 1e-1 0.0 0.0 1e-1 0.0 0.0 1e0 0.0 0.0 1e+1 0E+1 0E+1 1e-1 0.0 0E+1 1e0 0.0 0E+1 1e+1 0E+1 -0.0 1e1 -0E+1 -0.0 1e0 -0.0 -0.0 1e-1 -0.0 -0.0 1e-1 -0.0 -0.0 1e0 -0.0 -0.0 1e+1 -0E+1 -0E+1 1e-1 -0.0 -0E+1 1e0 -0.0 -0E+1 1e+1 -0E+1 1.234E+DEC_MAX_EXP 1eDEC_MAX_EXP 1E+DEC_MAX_EXP 1.234 1eDEC_MAX_EXP 0E+DEC_MAX_EXP 0 1e-DEC_MAX_EXP 0E-DEC_MAX_EXP 1.234 1e-DEC_MAX_EXP NaN Inf -Inf Inf Inf 1e-DEC_MIN_EXP NaN Inf 1e-1 NaN Inf 1e0 NaN Inf 1e1 NaN Inf 1eDEC_MAX_EXP NaN Inf Inf Inf -1000 Inf NaN -Inf Inf -Inf -1 Inf NaN 0 Inf NaN 1 Inf NaN 1000 Inf NaN Inf Inf Inf Inf 1e-0 NaN -0.0 Inf NaN -Inf -Inf -Inf -Inf 1e-DEC_MIN_EXP NaN -Inf 1e-1 NaN -Inf 1e0 NaN -Inf 1e1 NaN -Inf 1eDEC_MAX_EXP NaN -Inf Inf -Inf -1000 Inf NaN -Inf -Inf -Inf -1 -Inf NaN 0 -Inf NaN 1 -Inf NaN 1000 -Inf NaN Inf -Inf Inf -Inf 1e-0 NaN -0.0 -Inf NaN NaN -Inf NaN NaN 1e-DEC_MIN_EXP NaN NaN 1e-1 NaN NaN 1e0 NaN NaN 1e1 NaN NaN 1eDEC_MAX_EXP NaN NaN Inf NaN NaN NaN NaN -Inf NaN NaN -1000 NaN NaN -1 NaN NaN 0 NaN NaN 1 NaN NaN 1000 NaN NaN Inf NaN NaN NaN 1e-0 NaN -0.0 NaN NaN sNaN -Inf NaN sNaN 1e-DEC_MIN_EXP NaN sNaN 1e-1 NaN sNaN 1e0 NaN sNaN 1e1 NaN sNaN 1eDEC_MAX_EXP NaN sNaN NaN NaN sNaN sNaN NaN NaN sNaN NaN -Inf sNaN NaN -1000 sNaN NaN -1 sNaN NaN 0 sNaN NaN 1 sNaN NaN 1000 sNaN NaN Inf sNaN NaN NaN sNaN NaN sNaN 1e-0 NaN -0.0 sNaN NaN # decimal64 8.666666666666000E+384 1.000000000000000E+384 8.666666666666000E+384 decimal64 decimal128 8.666666666666000E+384 1E+384 8.666666666666000E+384 decimal64 8.666666666666000E+384 1E+384 9E+384 decimal128 8.666666666666000E+323 1E+31 NaN decimal64 decimal128 8.66666666E+3 1E+10 0E10 decimal64 decimal128 8.66666666E+3 1E+3 9E+3 decimal64 decimal128 1E+17 1e+1 qNaN decimal64 1E+16 1e+1 1.0000000E+16 decimal64 decimal128 1E+18 1e+2 qNaN decimal64 1E+19 1e+2 qNaN decimal64 1E+19 1e+2 100000000000000000e+2 decimal128 352364567289012.506 1e-2 qNaN decimal64 35236458901.06 1e-2 3.52364589010600000000e+10 decimal64 decimal128 -352364567289012.506 1e-2 qNaN decimal64 -35236458901.06 1e-2 -3.52364589010600000000e+10 decimal64 decimal128 2147483646819039764 0 qNaN decimal64 -2147483646819039764 0 qNaN decimal64 # decimal128 1E+34 1e+1 1.0000000E+34 decimal128 1E+35 1e+1 qNaN decimal128 1E+35 1e+2 1.00000000000000000000e+35 decimal128 1E+36 1e+2 qNaN decimal128 35236456728901291950093363223832.506 1e-2 3.5236456728901291950093363223832510e+31 decimal128 3523645672890129195009336322383.06 1e-2 3.5236456728901291950093363223830600e+30 decimal128 -35236456728901291950093363223832.506 1e-2 -3.5236456728901291950093363223832510e+31 decimal128 -3523645672890129195009336322383.06 1e-2 -3.5236456728901291950093363223830600e+30 decimal128 2147483646819039764880028933478190.0 0 2147483646819039764880028933478190e+0 decimal128 -2147483646819039764880028933478190.0 0 -2147483646819039764880028933478190e+0 decimal128 # Int and uInt32 edge values for testing conversions -2147483646 0 qNaN decimal32 -2147483646 0 -2147483646 decimal64 decimal128 -2147483647 0 qNaN decimal32 -2147483647 0 -2147483647 decimal64 decimal128 -2147483648 0 qNaN decimal32 -2147483648 0 -2147483648 decimal64 decimal128 -2147483649 0 qNaN decimal32 -2147483649 0 -2147483649 decimal64 decimal128 2147483646 0 qNaN decimal32 2147483646 0 2147483646 decimal64 decimal128 2147483647 0 qNaN decimal32 2147483647 0 2147483647 decimal64 decimal128 2147483648 0 qNaN decimal32 2147483648 0 2147483648 decimal64 decimal128 2147483649 0 qNaN decimal32 2147483649 0 2147483649 decimal64 decimal128 4294967294 0 qNaN decimal32 4294967294 0 4294967294 decimal64 decimal128 4294967295 0 qNaN decimal32 4294967295 0 4294967295 decimal64 decimal128 4294967296 0 qNaN decimal32 4294967296 0 4294967296 decimal64 decimal128 4294967297 0 qNaN decimal32 4294967297 0 4294967297 decimal64 decimal128 # and powers of ten for same 5000000000 0 qNaN decimal32 5000000000 0 5000000000 decimal64 decimal128 4000000000 0 qNaN decimal32 4000000000 0 4000000000 decimal64 decimal128 2000000000 0 qNaN decimal32 2000000000 0 2000000000 decimal64 decimal128 1000000000 0 qNaN decimal32 1000000000 0 1000000000 decimal64 decimal128 100000000 0 qNaN decimal32 100000000 0 100000000 decimal64 decimal128 10000000 0 qNaN decimal32 10000000 0 10000000 decimal64 decimal128 1000000 0 1000000 100000 0 100000 10000 0 10000 1000 0 1000 100 0 100 10 0 10 1 0 1 0 0 0 # and powers of ten for same -5000000000 0 qNaN decimal32 -5000000000 0 -5000000000 decimal64 decimal128 -4000000000 0 qNaN decimal32 -4000000000 0 -4000000000 decimal64 decimal128 -2000000000 0 qNaN decimal32 -2000000000 0 -2000000000 decimal64 decimal128 -1000000000 0 qNaN decimal32 -1000000000 0 -1000000000 decimal64 decimal128 -100000000 0 qNaN decimal32 -100000000 0 -100000000 decimal64 decimal128 -10000000 0 qNaN decimal32 -10000000 0 -10000000 decimal64 decimal128 -1000000 0 -1000000 -100000 0 -100000 -10000 0 -10000 -1000 0 -1000 -100 0 -100 -10 0 -10 -1 0 -1 -0.0 0 -0.0 libdfp-1.0.17/tests/quantum.input000066400000000000000000000021421504475242000167570ustar00rootroot00000000000000# name quantum # arg1 decimal # ret decimal Inf Inf -Inf Inf NaN NaN sNaN sNaN DEC_MAX 1E+DEC_MAX_EXP DEC_MIN 1E-DEC_MIN_EXP DEC_SUBNORMAL_MIN 1E-DEC_MIN_EXP_SUB -DEC_MAX 1E+DEC_MAX_EXP -DEC_MIN 1E-DEC_MIN_EXP -DEC_SUBNORMAL_MIN 1E-DEC_MIN_EXP_SUB 1E1 10.0 1E0 1.0 0.25 0.01 0.625 0.001 97.1525 0.0001 18.12456 0.00001 20.971525 0.000001 decimal64 decimal128 3599.6273704955 1e-10 decimal64 decimal128 359.962737049625 1e-12 decimal64 decimal128 3.544350456732012 1e-15 decimal64 decimal128 3.5443504567320123 1e-16 decimal128 4503599627370495.5 0.1 decimal128 4503599627370.49625 0.00001 decimal128 45035996.273704955 1E-9 decimal128 4.5698456892345687912 1E-19 decimal128 libdfp-1.0.17/tests/rint.input000066400000000000000000000101521504475242000162410ustar00rootroot00000000000000# name rint # arg1 decimal # ret decimal Inf Inf NO_INEXACT_EXCEPTION -Inf -Inf NO_INEXACT_EXCEPTION NaN NaN NO_INEXACT_EXCEPTION sNaN NaN NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.2 0.0 INEXACT_EXCEPTION -0.2 -0.0 INEXACT_EXCEPTION 0.5 0.0 INEXACT_EXCEPTION -0.5 -0.0 INEXACT_EXCEPTION 0.8 1.0 INEXACT_EXCEPTION -0.8 -1.0 INEXACT_EXCEPTION 1.5 2.0 INEXACT_EXCEPTION -1.5 -2.0 INEXACT_EXCEPTION 0.1 0.0 INEXACT_EXCEPTION 0.25 0.0 INEXACT_EXCEPTION 0.625 1.0 INEXACT_EXCEPTION -0.1 -0.0 INEXACT_EXCEPTION -0.25 -0.0 INEXACT_EXCEPTION -0.625 -1.0 INEXACT_EXCEPTION 48576.75 48577.0 INEXACT_EXCEPTION 97152.75 97153.0 INEXACT_EXCEPTION 92472.75 92473.0 INEXACT_EXCEPTION 86220.75 86221.0 INEXACT_EXCEPTION 58792.75 58793.0 INEXACT_EXCEPTION -48576.75 -48577.0 INEXACT_EXCEPTION -97152.75 -97153.0 INEXACT_EXCEPTION -92472.75 -92473.0 INEXACT_EXCEPTION -86220.75 -86221.0 INEXACT_EXCEPTION -58792.75 -58793.0 INEXACT_EXCEPTION 1048576.75 1048577.0 decimal64 decimal128 INEXACT_EXCEPTION 2097152.75 2097153.0 decimal64 decimal128 INEXACT_EXCEPTION 2492472.75 2492473.0 decimal64 decimal128 INEXACT_EXCEPTION 2886220.75 2886221.0 decimal64 decimal128 INEXACT_EXCEPTION 3058792.75 3058793.0 decimal64 decimal128 INEXACT_EXCEPTION -1048576.75 -1048577.0 decimal64 decimal128 INEXACT_EXCEPTION -2097152.75 -2097153.0 decimal64 decimal128 INEXACT_EXCEPTION -2492472.75 -2492473.0 decimal64 decimal128 INEXACT_EXCEPTION -2886220.75 -2886221.0 decimal64 decimal128 INEXACT_EXCEPTION -3058792.75 -3058793.0 decimal64 decimal128 INEXACT_EXCEPTION 68744177664.75 68744177665.0 decimal64 decimal128 INEXACT_EXCEPTION 737488355328.75 737488355329.0 decimal64 decimal128 INEXACT_EXCEPTION 474976710656.75 474976710657.0 decimal64 decimal128 INEXACT_EXCEPTION 949953421312.75 949953421313.0 decimal64 decimal128 INEXACT_EXCEPTION 5899906842624.75 5899906842625.0 decimal64 decimal128 INEXACT_EXCEPTION -68744177664.75 -68744177665.0 decimal64 decimal128 INEXACT_EXCEPTION -737488355328.75 -737488355329.0 decimal64 decimal128 INEXACT_EXCEPTION -474976710656.75 -474976710657.0 decimal64 decimal128 INEXACT_EXCEPTION -949953421312.75 -949953421313.0 decimal64 decimal128 INEXACT_EXCEPTION -899906842624.75 -899906842625.0 decimal64 decimal128 INEXACT_EXCEPTION 70368744177664.75 70368744177665.0 decimal128 INEXACT_EXCEPTION 140737488355328.75 140737488355329.0 decimal128 INEXACT_EXCEPTION 281474976710656.75 281474976710657.0 decimal128 INEXACT_EXCEPTION 562949953421312.75 562949953421313.0 decimal128 INEXACT_EXCEPTION 1125899906842624.75 1125899906842625.0 decimal128 INEXACT_EXCEPTION -70368744177664.75 -70368744177665.0 decimal128 INEXACT_EXCEPTION -140737488355328.75 -140737488355329.0 decimal128 INEXACT_EXCEPTION -281474976710656.75 -281474976710657.0 decimal128 INEXACT_EXCEPTION -562949953421312.75 -562949953421313.0 decimal128 INEXACT_EXCEPTION -1125899906842624.75 -1125899906842625.0 decimal128 INEXACT_EXCEPTION libdfp-1.0.17/tests/round.input000066400000000000000000000051611504475242000164200ustar00rootroot00000000000000# name round # arg1 decimal # ret decimal Inf Inf NO_INEXACT_EXCEPTION -Inf -Inf NO_INEXACT_EXCEPTION NaN NaN NO_INEXACT_EXCEPTION sNaN NaN NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.2 0.0 NO_INEXACT_EXCEPTION -0.2 -0.0 NO_INEXACT_EXCEPTION 0.5 1.0 NO_INEXACT_EXCEPTION -0.5 -1.0 NO_INEXACT_EXCEPTION 0.8 1.0 NO_INEXACT_EXCEPTION -0.8 -1.0 NO_INEXACT_EXCEPTION 1.5 2.0 NO_INEXACT_EXCEPTION -1.5 -2.0 NO_INEXACT_EXCEPTION 0.1 0.0 NO_INEXACT_EXCEPTION 0.25 0.0 NO_INEXACT_EXCEPTION 0.625 1.0 NO_INEXACT_EXCEPTION -0.1 -0.0 NO_INEXACT_EXCEPTION -0.25 -0.0 NO_INEXACT_EXCEPTION -0.625 -1.0 NO_INEXACT_EXCEPTION 1234.54 1235.0 NO_INEXACT_EXCEPTION -1234.54 -1235.0 NO_INEXACT_EXCEPTION 97152.5 97153.0 NO_INEXACT_EXCEPTION -97152.5 -97153.0 NO_INEXACT_EXCEPTION -370495.5 -370496.0 NO_INEXACT_EXCEPTION -370496.25 -370496.0 NO_INEXACT_EXCEPTION -370496.5 -370497.0 NO_INEXACT_EXCEPTION -370496.75 -370497.0 NO_INEXACT_EXCEPTION -370497.5 -370498.0 NO_INEXACT_EXCEPTION 2097152.5 2097153.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.5 -2097153.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370495.5 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.25 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.5 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.75 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370497.5 -3599627370498.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -4503599627370495.5 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.25 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.5 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.75 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370497.5 -4503599627370498.0 decimal128 NO_INEXACT_EXCEPTION libdfp-1.0.17/tests/roundeven.input000066400000000000000000000051541504475242000173000ustar00rootroot00000000000000# name roundeven # arg1 decimal # ret decimal Inf Inf NO_INEXACT_EXCEPTION -Inf -Inf NO_INEXACT_EXCEPTION NaN NaN NO_INEXACT_EXCEPTION sNaN NaN NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.2 0.0 NO_INEXACT_EXCEPTION -0.2 -0.0 NO_INEXACT_EXCEPTION 0.5 0.0 NO_INEXACT_EXCEPTION -0.5 -0.0 NO_INEXACT_EXCEPTION 0.8 1.0 NO_INEXACT_EXCEPTION -0.8 -1.0 NO_INEXACT_EXCEPTION 1.5 2.0 NO_INEXACT_EXCEPTION -1.5 -2.0 NO_INEXACT_EXCEPTION 0.1 0.0 NO_INEXACT_EXCEPTION 0.25 0.0 NO_INEXACT_EXCEPTION 0.625 1.0 NO_INEXACT_EXCEPTION -0.1 -0.0 NO_INEXACT_EXCEPTION -0.25 -0.0 NO_INEXACT_EXCEPTION -0.625 -1.0 NO_INEXACT_EXCEPTION 97152.5 97152.0 NO_INEXACT_EXCEPTION -97152.5 -97152.0 NO_INEXACT_EXCEPTION -370495.5 -370496.0 NO_INEXACT_EXCEPTION -370496.25 -370496.0 NO_INEXACT_EXCEPTION -370496.5 -370496.0 NO_INEXACT_EXCEPTION -370496.75 -370497.0 NO_INEXACT_EXCEPTION -370497.5 -370498.0 NO_INEXACT_EXCEPTION 2097152.5 2097152.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.5 -2097152.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370495.5 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.25 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.5 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.75 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370497.5 -3599627370498.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -4503599627370495.5 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.25 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.5 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.75 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370497.5 -4503599627370498.0 decimal128 NO_INEXACT_EXCEPTION libdfp-1.0.17/tests/samequantum.input000066400000000000000000000153411504475242000176320ustar00rootroot00000000000000# name samequantum # arg1 decimal # arg2 decimal # ret bool 0 0 1 0 1 1 1 0 1 1 1 1 10 1E+1 0 10E+1 10E+1 1 100 10E+1 0 100 1E+2 0 0.1 1E-2 0 0.1 1E-1 1 0.1 1E-0 0 999 999 1 999E-1 99.9 1 111E-1 22.2 1 111E-1 1234.2 1 0.0 1.1 1 0.0 1.11 0 0.0 0 0 0.0 0.0 1 0.0 0.00 0 0E+1 0E+0 0 0E+1 0E+1 1 0E+1 0E+2 0 0E-17 0E-16 0 0E-17 0E-17 1 0E-17 0E-18 0 0E-17 0.0E-15 0 0E-17 0.0E-16 1 0E-17 0.0E-17 0 -0E-17 0.0E-16 1 0E-17 -0.0E-17 0 0E-17 -0.0E-16 1 -0E-17 0.0E-17 0 -0E-17 -0.0E-16 1 -0E-17 -0.0E-17 0 DEC_MAX DEC_MAX 1 1E-DEC_MIN_EXP 1E-DEC_MIN_EXP 1 1.00000000E-DEC_MIN_EXP 1.00000000E-DEC_MIN_EXP 1 DEC_SUBNORMAL_MIN DEC_SUBNORMAL_MIN 1 DEC_MAX DEC_MAX 1 1E-DEC_MIN_EXP 1E-DEC_MIN_EXP 1 1.00000000E-DEC_MIN_EXP 1.00000000E-DEC_MIN_EXP 1 DEC_SUBNORMAL_MIN DEC_SUBNORMAL_MIN 1 -DEC_SUBNORMAL_MIN -DEC_SUBNORMAL_MIN 1 -1.00000000E-DEC_MIN_EXP -1.00000000E-DEC_MIN_EXP 1 -1E-DEC_MIN_EXP -1E-DEC_MIN_EXP 1 -DEC_MAX -DEC_MAX 1 -DEC_SUBNORMAL_MIN -DEC_SUBNORMAL_MIN 1 -1.00000000E-DEC_MIN_EXP 1.00000000E-DEC_MIN_EXP 1 -1E-DEC_MIN_EXP -1E-DEC_MIN_EXP 1 -DEC_MAX -DEC_MAX 1 -4.00000000E-DEC_MIN_EXP -1.00004000E-DEC_MIN_EXP 1 -4E-DEC_MIN_EXP -1E-DEC_MIN_EXP 1 -4.00000000E-DEC_MIN_EXP -1.00400000E-DEC_MIN_EXP 1 -4E-DEC_MIN_EXP -1E-DEC_MIN_EXP 1 -Inf -Inf 1 -Inf Inf 1 -Inf NaN 0 -Inf -7E+3 0 -Inf -7 0 -Inf -7E-3 0 -Inf -0E-3 0 -Inf -0 0 -Inf -0E+3 0 -Inf 0E-3 0 -Inf 0 0 -Inf 0E+3 0 -Inf 7E-3 0 -Inf 7 0 -Inf 7E+3 0 -Inf sNaN 0 Inf -Inf 1 Inf Inf 1 Inf NaN 0 Inf -7E+3 0 Inf -7 0 Inf -7E-3 0 Inf -0E-3 0 Inf -0 0 Inf -0E+3 0 Inf 0E-3 0 Inf 0 0 Inf 0E+3 0 Inf 7E-3 0 Inf 7 0 Inf 7E+3 0 Inf sNaN 0 NaN -Inf 0 NaN Inf 0 NaN NaN 1 NaN -7E+3 0 NaN -7 0 NaN -7E-3 0 NaN -0E-3 0 NaN -0 0 NaN -0E+3 0 NaN 0E-3 0 NaN 0 0 NaN 0E+3 0 NaN 7E-3 0 NaN 7 0 NaN 7E+3 0 NaN sNaN 1 -7E+3 -Inf 0 -7E+3 Inf 0 -7E+3 NaN 0 -7E+3 -7E+3 1 -7E+3 -7 0 -7E+3 -7E-3 0 -7E+3 -0E-3 0 -7E+3 -0 0 -7E+3 -0E+3 1 -7E+3 0E-3 0 -7E+3 0 0 -7E+3 0E+3 1 -7E+3 7E-3 0 -7E+3 7 0 -7E+3 7E+3 1 -7E+3 sNaN 0 -7 -Inf 0 -7 Inf 0 -7 NaN 0 -7 -7E+3 0 -7 -7 1 -7 -7E-3 0 -7 -0E-3 0 -7 -0 1 -7 -0E+3 0 -7 0E-3 0 -7 0 1 -7 0E+3 0 -7 7E-3 0 -7 7 1 -7 7E+3 0 -7 sNaN 0 -7E-3 -Inf 0 -7E-3 Inf 0 -7E-3 NaN 0 -7E-3 -7E+3 0 -7E-3 -7 0 -7E-3 -7E-3 1 -7E-3 -0E-3 1 -7E-3 -0 0 -7E-3 -0E+3 0 -7E-3 0E-3 1 -7E-3 0 0 -7E-3 0E+3 0 -7E-3 7E-3 1 -7E-3 7 0 -7E-3 7E+3 0 -7E-3 sNaN 0 -0E-3 -Inf 0 -0E-3 Inf 0 -0E-3 NaN 0 -0E-3 -7E+3 0 -0E-3 -7 0 -0E-3 -7E-3 1 -0E-3 -0E-3 1 -0E-3 -0 0 -0E-3 -0E+3 0 -0E-3 0E-3 1 -0E-3 0 0 -0E-3 0E+3 0 -0E-3 7E-3 1 -0E-3 7 0 -0E-3 7E+3 0 -0E-3 sNaN 0 -0 -Inf 0 -0 Inf 0 -0 NaN 0 -0 -7E+3 0 -0 -7 1 -0 -7E-3 0 -0 -0E-3 0 -0 -0 1 -0 -0E+3 0 -0 0E-3 0 -0 0 1 -0 0E+3 0 -0 7E-3 0 -0 7 1 -0 7E+3 0 -0 sNaN 0 -0E+3 -Inf 0 -0E+3 Inf 0 -0E+3 NaN 0 -0E+3 -7E+3 1 -0E+3 -7 0 -0E+3 -7E-3 0 -0E+3 -0E-3 0 -0E+3 -0 0 -0E+3 -0E+3 1 -0E+3 0E-3 0 -0E+3 0 0 -0E+3 0E+3 1 -0E+3 7E-3 0 -0E+3 7 0 -0E+3 7E+3 1 -0E+3 sNaN 0 0E-3 -Inf 0 0E-3 Inf 0 0E-3 NaN 0 0E-3 -7E+3 0 0E-3 -7 0 0E-3 -7E-3 1 0E-3 -0E-3 1 0E-3 -0 0 0E-3 -0E+3 0 0E-3 0E-3 1 0E-3 0 0 0E-3 0E+3 0 0E-3 7E-3 1 0E-3 7 0 0E-3 7E+3 0 0E-3 sNaN 0 0 -Inf 0 0 Inf 0 0 NaN 0 0 -7E+3 0 0 -7 1 0 -7E-3 0 0 -0E-3 0 0 -0 1 0 -0E+3 0 0 0E-3 0 0 0 1 0 0E+3 0 0 7E-3 0 0 7 1 0 7E+3 0 0 sNaN 0 0E+3 -Inf 0 0E+3 Inf 0 0E+3 NaN 0 0E+3 -7E+3 1 0E+3 -7 0 0E+3 -7E-3 0 0E+3 -0E-3 0 0E+3 -0 0 0E+3 -0E+3 1 0E+3 0E-3 0 0E+3 0 0 0E+3 0E+3 1 0E+3 7E-3 0 0E+3 7 0 0E+3 7E+3 1 0E+3 sNaN 0 7E-3 -Inf 0 7E-3 Inf 0 7E-3 NaN 0 7E-3 -7E+3 0 7E-3 -7 0 7E-3 -7E-3 1 7E-3 -0E-3 1 7E-3 -0 0 7E-3 -0E+3 0 7E-3 0E-3 1 7E-3 0 0 7E-3 0E+3 0 7E-3 7E-3 1 7E-3 7 0 7E-3 7E+3 0 7E-3 sNaN 0 7 -Inf 0 7 Inf 0 7 NaN 0 7 -7E+3 0 7 -7 1 7 -7E-3 0 7 -0E-3 0 7 -0 1 7 -0E+3 0 7 0E-3 0 7 0 1 7 0E+3 0 7 7E-3 0 7 7 1 7 7E+3 0 7 sNaN 0 7E+3 -Inf 0 7E+3 Inf 0 7E+3 NaN 0 7E+3 -7E+3 1 7E+3 -7 0 7E+3 -7E-3 0 7E+3 -0E-3 0 7E+3 -0 0 7E+3 -0E+3 1 7E+3 0E-3 0 7E+3 0 0 7E+3 0E+3 1 7E+3 7E-3 0 7E+3 7 0 7E+3 7E+3 1 7E+3 sNaN 0 sNaN -Inf 0 sNaN Inf 0 sNaN NaN 1 sNaN -7E+3 0 sNaN -7 0 sNaN -7E-3 0 sNaN -0E-3 0 sNaN -0 0 sNaN -0E+3 0 sNaN 0E-3 0 sNaN 0 0 sNaN 0E+3 0 sNaN 7E-3 0 sNaN 7 0 sNaN 7E+3 0 sNaN sNaN 1 sNaN sNaN 1 sNaN sNaN 1 NaN NaN 1 NaN NaN 1 sNaN 3 0 NaN 3 0 4 sNaN 0 3 NaN 0 Inf sNaN 0 -Inf NaN 0 libdfp-1.0.17/tests/scaffold.c000066400000000000000000000353671504475242000161500ustar00rootroot00000000000000/* Test facility scaffolding. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #include static int fail = 0; static int testnum = 0; /* String compare macros */ #ifndef _SC #include #include #include #include /* For CHAR_MAX. */ /* Generally don't invoke this directly unless you already have __LINE__ set in * a variable and want _SC_P to output it. The name stands for Compare with * Position. */ #define _SC_P(f,l,x,y) do { \ ++testnum; \ if(strcmp(x,y)) { \ fprintf(stderr, "%-3d Error: Expected: \"%s\"\n Result: \"%s\"\n in: %s:%d.\n\n", testnum,x,y,f,l); \ ++fail; \ } else { \ fprintf(stdout, "%-3d Success: Expected: \"%s\"\n Result: \"%s\"\n in: %s:%d.\n\n", testnum,x,y,f,l); \ } \ } while (0) #define _SC(x,y) _SC_P (__FILE__,__LINE__,x,y) #endif /* _SC */ #ifdef _WANT_OSC #ifndef __cplusplus #warning "_WANT_OSC only available #ifdef __cplusplus. _OSC and _OSC_P use ." #else /* __cplusplus */ #ifndef _OSC #include #define _OSC_P(f,l,x,y,precision,upper,spec) do { \ std::stringstream s; \ ios_base::fmtflags flags = s.flags(); \ if (precision > -1) \ s << setprecision(precision); \ if (upper == 'u') \ flags |= ios::uppercase; \ if (spec == 'f') \ flags |= ios::fixed; \ else if (spec == 'e') \ flags |= ios::scientific; \ else if (spec == 'a') \ flags |= (ios::scientific | ios::fixed); \ /* else if (spec == 'g') this is the default. */ \ s.flags(flags); \ s << y; \ _SC_P(f,l,x,s.str().c_str()); \ } while(0) /* _OSC == Ostream Compare * * Macro used to compare an ostream (operator<<) invocation with an expected * result. * * X: decimal[32|64|128] value * Y: Expected String * precision: Desired precision of output (can't exceed * __DEC[32|64|128]_MANT_DIG__. Equivalent to setprecision(x). * upper: 'l' is default. 'u' means uppercase; equivalent to ios::uppercase. * spec: 'g' is default. 'e' equivalent to ios::scientific, 'f' equivalent to * ios::fixed, 'a' is equivalent to ios::scientific | ios::fixed. * * e.g. * _OSC(4.000000000000000e+384DD, "4.000000000000000e384", -1, 'l', 'a'); * _OSC(4.000000000000000e+384DD, "4.000000000000000e384", -1, 'l', 'g'); * _OSC(4.000000000000000e+384DD, "4.00000e384", -1, 'l', 'f'); * _OSC(4.000000000000000e+384DD, "4.00000e384", -1, 'l', 'f'); * * Equivalent to the following example: * * _Decimal64 y = -9.999E-3DD; * std::stringstream s; * ios_base::fmtflags flags = s.flags(); * flags |= ios::fixed * flags |= ios::upper * s.flags(flags); * s << y; */ #define _OSC(x,y,precision,upper,spec) _OSC_P (__FILE__,__LINE__,x,y,precision,upper,spec) #endif /* _OSC */ #endif /* __cplusplus */ #endif /* _WANT_OSC */ #ifdef _WANT_ISC #ifndef __cplusplus #warning "_WANT_ISC only available #ifdef __cplusplus. _ISC and _ISC_P use ." #else /* __cplusplus */ #ifndef _ISC #include #define _WANT_VC 1 #define _ISC_P(f,l,x,y,z,fmt) do { \ std::stringstream s; \ /* Clear the stringstream. */ \ s.str(std::string()); \ /* Push the string to test onto the stream. */ \ s << y; \ /* invoke operator>>(istream &,decimal[32|64|128] &) */ \ s >> z; \ _VC_P_CPP(f,l,x,z,fmt); \ } while(0) /* _ISC == Istream Compare * * Macro used to compare an istream (operator>>) invocation with an expected * result. * * X: Expected decimal[32|64|128] value * Y: Input string * Z: Input temp decimal[32|64|128] used to store the result * fmt: format string for the decimal type. * e.g. * _ISC("-0.009999",-9.999E-3DD,z,fmt); * * Equivalent to the following example: * */ #define _ISC(x,y,z,fmt) _ISC_P (__FILE__,__LINE__,x,y,z,fmt) #endif /* _ISC */ #endif /* __cplusplus */ #endif /* _WANT_ISC */ #ifdef _WANT_PC static char buf[1024]; #ifndef _PC /* _PC == Printf_dfp Compare with Position */ #define _PC_P(f,l,x,y,args...) do { \ size_t __tmp; \ memset(buf,'\0',sizeof(buf)); \ /* Invokes printf dfp. */ \ __tmp = sprintf(buf, y, ##args); \ _SC_P(f,l,x,buf); \ if (__tmp != strlen(x)) { \ fprintf(stderr, "%-3d Error: fprintf didn't return the correct size." \ " Expected: \"%zd\"\n " \ " Result: \"%zd\"\n in: %s:%d.\n\n", \ testnum,strlen(x),__tmp,f,l); \ ++fail; \ } \ } while (0) /* _SFC == strfromdN Compare with Position */ #define _SFC_P_N(f,l,x,fmt,fn,d,n,len) do { \ size_t __tmp; \ memset(buf,'\0',sizeof(buf)); \ /* Invokes printf dfp. */ \ __tmp = fn(buf, n, fmt, d); \ _SC_P(f,l,x,buf); \ if (__tmp != len) { \ fprintf(stderr, "%-3d Error: " #fn " didn't return the correct size." \ " Expected: \"%zd\"\n " \ " Result: \"%zd\"\n in: %s:%d.\n\n", \ testnum,len,__tmp,f,l); \ ++fail; \ } \ } while (0) #define _SFC_P(f,l,x,fmt,fn,d) _SFC_P_N(f,l,x,fmt,fn,d,sizeof(buf),strlen(x)) /* Test strfromdN with an arbitray buffer of size 0. */ #define _SFC_P_NULL(f,l,mybuf,fmt,fn,d,len) do { \ size_t __tmp; \ __tmp = fn(mybuf, 0, fmt, d); \ testnum++; \ if (__tmp != len) { \ fprintf(stderr, "%-3d Error: " #fn " didn't return the correct size." \ " Expected: \"%zd\"\n " \ " Result: \"%zd\"\n in: %s:%d.\n\n", \ testnum,len,__tmp,f,l); \ ++fail; \ } else { \ fprintf(stdout, "%-3d Success: " #fn \ " Expected: \"%zd\"\n " \ " Result: \"%zd\"\n in: %s:%d.\n\n", \ testnum,len,__tmp,f,l); \ } \ } while (0) /* _PC == Printf_dfp Compare * * Variadic macro used to compare a printf invocation with an expected result. * * X: Expected String * Y: Format String * ...: Argument list * * Use it like you'd use printf, except you include an 'expected result' string * to precede everything. * * e.g. * _PC("0.000033333","%DDf.\n", (_Decimal128) 0.00033333DL); * */ #define _PC(x,y,...) _PC_P (__FILE__,__LINE__,x,y,__VA_ARGS__) #endif /* _PC */ #endif /* _WANT_PC */ /* Approximate Value Compare (takes a variation limit) */ #ifdef _WANT_AVC static char bufx[CHAR_MAX]; static char bufy[CHAR_MAX]; static char bufz[CHAR_MAX]; #ifndef _AVC /* _AVC_P == Approximate Value Compare with Position */ #define _AVC_P(f,l,x,y,lim,fmt,lfmt) do { \ ++testnum; \ memset(bufx,'\0',CHAR_MAX); \ memset(bufy,'\0',CHAR_MAX); \ memset(bufz,'\0',CHAR_MAX); \ /* Invokes printf dfp. */ \ sprintf(bufx, fmt, x); \ sprintf(bufy, fmt, y); \ sprintf(bufz, lfmt, lim); \ if((y < (x-lim)) && (x > (y+lim))) { \ fprintf(stderr, "%-3d Error: Expected: \"%s\"\n", testnum, bufx); \ fprintf(stderr, " Result: \"%s\"\n", bufy); \ fprintf(stderr, " lim: \"%s\"\n", bufz); \ fprintf(stderr, " in: %s:%d.\n\n", f,l); \ ++fail; \ } else { \ fprintf(stdout, "%-3d Success: Expected: \"%s\"\n", testnum, bufx); \ fprintf(stdout, " Result: \"%s\"\n", bufy); \ fprintf(stderr, " lim: \"%s\"\n", bufz); \ fprintf(stdout, " in: %s:%d.\n\n", f,l); \ } \ } while (0) /* _AVC == Approximate Value Compare * * Macro used to compare the result of an operation against an approximate expected result. * X: Expected Value * Y: Actual Value * lim: The variation +/- from the expected that the actual can fall into for a * "success" */ #define _AVC(x,y,lim, fmt,lfmt) _AVC_P (__FILE__,__LINE__,x,y,lim, fmt,lfmt) #endif /* _AVC */ #endif /* _WANT_AVC */ #ifdef _WANT_VC static char bufx[CHAR_MAX]; static char bufy[CHAR_MAX]; #ifndef _VC /* _VC_P == Value Compare with Position */ #define _VC_P(f,l,x,y,fmt) do { \ ++testnum; \ memset(bufx,'\0',CHAR_MAX); \ memset(bufy,'\0',CHAR_MAX); \ /* Invokes printf dfp. */ \ sprintf(bufx, fmt, x); \ sprintf(bufy, fmt, y); \ if ((isnan(x) && isnan(y)) || \ (x == y)) \ { \ fprintf (stdout, "%-3d Success: Expected: \"%s\"\n", \ testnum, bufx); \ fprintf (stdout, " Result: \"%s\"\n", \ bufy); \ fprintf (stdout, "in: %s:%i\n\n", f, l); \ } \ else \ { \ fprintf (stderr, "%-3d Error: Expected: \"%s\"\n", \ testnum, bufx); \ fprintf (stderr, " Result: \"%s\"\n", \ bufy); \ fprintf (stderr, "in: %s:%i\n\n", f, l); \ ++fail; \ } \ } while (0) /* _VC_P_CPP == Value Compare with Position for C++ types */ #define _VC_P_CPP(f,l,x,y,fmt) do { \ ++testnum; \ memset(bufx,'\0',CHAR_MAX); \ memset(bufy,'\0',CHAR_MAX); \ /* Invokes printf dfp. */ \ sprintf(bufx, fmt, x); \ sprintf(bufy, fmt, y); \ if ((isnan(x.__getval()) && isnan(y.__getval())) || \ (x == y)) \ { \ fprintf (stdout, "%-3d Success: Expected: \"%s\"\n", \ testnum, bufx); \ fprintf (stdout, " Result: \"%s\"\n", \ bufy); \ fprintf (stdout, "in: %s:%i\n\n", f, l); \ } \ else \ { \ fprintf (stderr, "%-3d Error: Expected: \"%s\"\n", \ testnum, bufx); \ fprintf (stderr, " Result: \"%s\"\n", \ bufy); \ fprintf (stderr, "in: %s:%i\n\n", f, l); \ } \ } while (0) /* _VC == Value Compare * * Macro used to compare the result of an operation against an expected result. * X: Expected Value * Y: Actual Value */ #define _VC(x,y,fmt) _VC_P (__FILE__,__LINE__,x,y,fmt) #endif /* _VC */ #endif /* _WANT_VC */ #ifdef _WANT_QC #include /* To pick up __dfp_compatible(). */ /* Provide a polymorphic quantize() function. */ #define quantize(x) \ (!__dfp_compatible(x) \ ? DEC_NAN \ : (sizeof (x) == sizeof (_Decimal128) \ ? quantized128(x) \ : (sizeof (x) == sizeof (_Decimal64) \ ? quantized64(x) \ : quantized32(x))) \ ) /* TODO: Finish this. It doesn't do anything yet. The purpose is to be able to * get the result in the expected precision. */ static char bufx[CHAR_MAX]; static char bufy[CHAR_MAX]; #ifndef _QC /* _QC_P == Quantize Compare with Position */ #define _QC_P(f,l,x,y,fmt,type) do { \ ++testnum; \ memset(bufx,'\0',CHAR_MAX); \ memset(bufy,'\0',CHAR_MAX); \ /* Invokes printf dfp. */ \ sprintf(bufx, fmt, x); \ sprintf(bufy, fmt, y); \ if(x!=y) { \ fprintf(stderr, "%-3d Error: Expected: \"%s\"\n Result: \"%s\"\n in: %s:%d.\n\n", testnum, bufx,bufy,f,l); \ ++fail; \ } else { \ fprintf(stdout, "%-3d Success: Expected: \"%s\"\n Result: \"%s\"\n in: %s:%d.\n\n", testnum, bufx,bufy,f,l); \ } \ } while (0) /* _QC == Quantize Compare * * Macro used to compare the result of an operation against an expected result. * X: Expected Value * Y: Actual Value */ #define _QC(x,y,fmt) _QC_P (__FILE__,__LINE__,x,y,fmt) #endif /* _QC */ #endif /* _WANT_QC */ #ifdef _WANT_DC static char dbuf[CHAR_MAX]; #ifndef _DC /* _DC == Decoded[32|64|128] Compare */ /* Pick up the decoded[32|64|128] prototypes. */ #include "decode.h" /* _DC_P == decoded[32|64|128] Compare with Position. Use this if the position * is pre-determined. Don't call this on Non-_Decimal values. The outcome is * undefined. */ #define _DC_P(f,l,x,y) do { \ memset(dbuf,'\0',CHAR_MAX); \ /* Invoke the correct decoded{32|64|128]() based on arg size. */ \ (sizeof (y) == sizeof (_Decimal128)? decoded128(y,&dbuf[0]): \ (sizeof (y) == sizeof (_Decimal64)? decoded64(y,&dbuf[0]): \ decoded32(y,&dbuf[0]))); \ _SC_P(f,l,x,dbuf); \ } while (0) /* _DC == decoded[32|64|128] Compare * * Macro used to compare a decoded[32|64|128]() invocation with an * expected result. * * X: Expected decoded[32|64|128] Output String * Y: _Decimal[32|64|128] Argument * * It is like decoded[32|64|128], except you include an 'expected * result' string to precede everything and you don't need to define a buffer. * * e.g. * _DC("+0,000,000,000,000,000,000,000,000,000,000,100E-2", (_Decimal128) 1.00DL); * */ #define _DC(x,y) _DC_P (__FILE__,__LINE__,x,y) #endif /* _DC */ #endif /* _WANT_DC */ #ifndef _REPORT /* Don't print anything if there are no failures. */ #define _REPORT() do { \ if(fail) { \ fprintf(stderr, "Found %d failures.\n", fail); \ } \ } while (0) #endif /* _REPORT */ libdfp-1.0.17/tests/signbit.input000066400000000000000000000006501504475242000167260ustar00rootroot00000000000000# name __signbit # arg1 decimal # ret bool Inf 0 NaN 0 sNaN 0 DEC_SUBNORMAL_MIN 0 DEC_MIN 0 DEC_MAX 0 0.0 0 0.1 0 10E1 0 -Inf 1 -NaN 1 -sNaN 1 -DEC_SUBNORMAL_MIN 1 -DEC_MIN 1 -DEC_MAX 1 -0.0 1 -0.1 1 -10E1 1 libdfp-1.0.17/tests/sin.input000066400000000000000000000072421504475242000160640ustar00rootroot00000000000000# name sin # arg1 decimal # ret decimal 0.0 0.0 decimal32 0.0 0.0 decimal64 0.0 0.0 decimal128 1000000e-6 8414710e-7 decimal32 1000000000000000e-15 8414709848078965e-16 decimal64 1000000000000000000000000000000000e-33 8414709848078965066525023216302990e-34 decimal128 2000000e-6 9092974e-7 decimal32 2000000000000000e-15 9092974268256817e-16 decimal64 2000000000000000000000000000000000e-33 9092974268256816953960198659117448e-34 decimal128 3000000e-6 1411200e-7 decimal32 3000000000000000e-15 1411200080598672e-16 decimal64 3000000000000000000000000000000000e-33 1411200080598672221007448028081103e-34 decimal128 4000000e-6 -7568025e-7 decimal32 4000000000000000e-15 -7568024953079283e-16 decimal64 4000000000000000000000000000000000e-33 -7568024953079282513726390945118291e-34 decimal128 5000000e-6 -9589243e-7 decimal32 5000000000000000e-15 -9589242746631385e-16 decimal64 5000000000000000000000000000000000e-33 -9589242746631384688931544061559940e-34 decimal128 6000000e-6 -2794155e-7 decimal32 6000000000000000e-15 -2794154981989259e-16 decimal64 6000000000000000000000000000000000e-33 -2794154981989258728115554466118948e-34 decimal128 7000000e-6 6569866e-7 decimal32 7000000000000000e-15 6569865987187891e-16 decimal64 7000000000000000000000000000000000e-33 6569865987187890903969990915936352e-34 decimal128 8000000e-6 9893582e-7 decimal32 8000000000000000e-15 9893582466233818e-16 decimal64 8000000000000000000000000000000000e-33 9893582466233817778081235982452887e-34 decimal128 9000000e-6 4121185e-7 decimal32 9000000000000000e-15 4121184852417566e-16 decimal64 9000000000000000000000000000000000e-33 4121184852417565697562725663524352e-34 decimal128 1000000e-5 -5440211e-7 decimal32 1000000000000000e-14 -5440211108893698e-16 decimal64 1000000000000000000000000000000000e-32 -5440211108893698134047476618513773e-34 decimal128 0.0 0.0 decimal32 0.0 0.0 decimal64 0.0 0.0 decimal128 3140000e-6 1592653e-9 decimal32 3140000000000000e-15 1592652916486953e-18 decimal64 3140000000000000000000000000000000e-33 1592652916486952540541436324443261e-36 decimal128 libdfp-1.0.17/tests/test-amort.c000066400000000000000000000220131504475242000164460ustar00rootroot00000000000000/* Amortization Benchmarck Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Peter Eberlein Steven Munroe Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* set -ex gcc -m64 -O2 -g -D__STDC_WANT_DEC_FP__=1 -std=gnu99 test_amort.c -ldfp -ldecnumber -lm -o test_amort64 gcc -m64 -O2 -g -D__STDC_WANT_DEC_FP__=1 -std=gnu99 test_amort.c -ldfp -ldecnumber -lm -o test_amort32 gcc -m64 -O2 -mcpu=power6 -g -D__STDC_WANT_DEC_FP__=1 -std=gnu99 test_amort.c -ldfp -ldecnumber -lm -o test_amort64P6 echo "generate input data" rm "amort.input" rm "test_amort.data" ./test_amort64 10000.0 0.075 5.0 ./test_amort64 15000.0 0.050 5.0 ./test_amort64 20000.0 0.065 5.0 ./test_amort64 25000.0 0.080 5.0 ./test_amort64 30000.0 0.090 5.0 ./test_amort64 80000.0 0.055 20.0 ./test_amort64 120000.0 0.055 20.0 ./test_amort64 150000.0 0.055 20.0 ./test_amort64 185000.0 0.055 20.0 ./test_amort64 199500.0 0.055 20.0 ./test_amort64 180000.0 0.055 30.0 ./test_amort64 199500.0 0.055 30.0 ./test_amort64 210000.0 0.055 30.0 ./test_amort64 350000.0 0.055 30.0 ./test_amort64 550000.0 0.055 30.0 echo "verify amortization tables" ./test_amort64 -v > test_amort.data diff test_amort.verify.data test_amort.data echo "$?" echo "performance testing" ./test_amort64 10000 exit */ #include #include #include #include #include #include typedef struct { _Decimal64 month, payment, interest_payed, principal_payed, principal, accum_principal, accum_interest; } tabletype; tabletype *table; typedef struct { _Decimal64 loan, rate, duration; } inputtype; static _Decimal64 armort_monthly_payment (_Decimal64 loan, _Decimal64 yearly_rate, _Decimal64 years) { _Decimal64 payment = -1.0DD; _Decimal64 months = years * 12.0DD; _Decimal64 monthly_rate = yearly_rate / 12.0DD; _Decimal64 temp0, temp1, temp2, temp3; temp0 = 1.0DD / (1.0DD + monthly_rate); #ifdef __DEBUG_PRINT__ printf ("1/(1+r) = %Df\n", temp0); #endif temp1 = 1.0DD - powd64 (temp0, months); #ifdef __DEBUG_PRINT__ printf ("1 - (1/(1+r))**n = %Df\n", temp1); #endif temp2 = temp1 / monthly_rate; #ifdef __DEBUG_PRINT__ printf ("(1 - (1/(1+r))**n)/r = %Df\n", temp2); #endif temp3 = loan / temp2; payment = quantized64 (temp3, 1.00DD); #ifdef __DEBUG_PRINT__ printf ("quantized64(%Df, 1.00DD) = %Df\n", temp3, payment); #endif return payment; } static void armort_monthly_table (_Decimal64 loan, _Decimal64 yearly_rate, _Decimal64 years, int format_enable, int print_enable) { _Decimal64 months = years * 12.0DD; _Decimal64 monthly_rate = yearly_rate / 12.0DD; _Decimal64 temp0; _Decimal64 principal, principal_payed, interest_payed; _Decimal64 accum_principal, accum_interest; _Decimal64 payment; char buf[80]; principal = loan; accum_principal = 0.0DD; accum_interest = 0.0DD; payment = armort_monthly_payment (loan, yearly_rate, years); if (format_enable) { snprintf(buf, 80, "Loan %Df at %Df for %Df years payments %Df", loan, yearly_rate, years, payment); if (print_enable) { printf ("\n%s\n", buf); } } for (temp0 = 0.0DD; temp0 < (months); temp0 += 1.0DD) { interest_payed = quantized64 ((principal * monthly_rate), 1.00DD); principal_payed = payment - interest_payed; principal -= principal_payed; accum_principal += principal_payed; accum_interest += interest_payed; if (temp0 >= (months - 1.0DD) && principal != 0.00DD) { payment += principal; accum_principal += principal; principal = 0.00DD; } if (format_enable) { snprintf(buf, 80, "%Df: %Df-%Df=%Df, total(%Df,%Df) balance=%Df", temp0, payment, interest_payed, principal_payed, accum_interest, accum_principal, principal); if (print_enable) printf ("%s\n", buf); } else { tabletype *t; t = table + (int) temp0; t->month = temp0; t->payment = payment; t->interest_payed = interest_payed; t->principal_payed = principal_payed; t->accum_interest = accum_interest; t->accum_principal = accum_principal; t->principal = principal; } } if ( principal > 0.0DD) { interest_payed = quantized64 ((principal * monthly_rate), 1.00DD); principal_payed = payment - interest_payed; principal -= principal_payed; accum_principal += principal_payed; accum_interest += interest_payed; if (principal != 0.00DD) { payment += principal; accum_principal += principal; principal = 0.00DD; } if (format_enable) { snprintf(buf, 80, "%Df: %Df-%Df=%Df, total(%Df,%Df) balance=%Df\n", temp0, payment, interest_payed, principal_payed, accum_interest, accum_principal, principal); if (print_enable) { printf ("%s\n", buf); } } } } static void armort_verifier (inputtype *inputs, int numinputs) { int i; for (i = 0; i < numinputs; i++) { inputtype *input = &inputs[i]; armort_monthly_table (input->loan, input->rate, input->duration, 1, 1); } } typedef long long msec_t; static msec_t getTimeOfDayMsec (void) { msec_t result, msecs; struct timeval time; int rc; rc = gettimeofday (&time, NULL); if (rc == 0) { msecs = (msec_t) ((time.tv_usec + 500) / 1000); result = (msec_t) (time.tv_sec); result = (result * 1000) + msecs; } else { result = 0; } return result; } int main (int argc, char *argv[]) { int i, iterations; msec_t startt, endt, deltat; double mill_sec; inputtype *inputs; int numinputs; FILE *inputfile; char inputfilename[] = "amort.input"; const char *argv_option; ssize_t r; table = (tabletype *) malloc (30 * 12 * sizeof (tabletype)); //printf ("table@%p for %d bytes\n", table, (30 * 12 * sizeof (tabletype))); iterations = 50000; if (argc < 2) { printf ("This application requires parameters.\n"); return 0; } argv_option = argv[1]; if (*argv_option == '-') { argv_option++; if (*argv_option == 'v') ; else { printf ("only v is valid %s is not\n", argv[1]); return 2; } } else { argv_option = " "; if (argc >= 4) { inputtype input; input.loan = strtod64 (argv[1], NULL); input.rate = strtod64 (argv[2], NULL); input.duration = strtod64 (argv[3], NULL); if ( input.duration > 30.0DD) { printf ("Maximum duration is 30 years, exiting\n"); return 1; } inputfile = fopen (inputfilename, "a"); printf ("loan=%Df rate=%Df duration=%Df added to %s\n", input.loan, input.rate, input.duration, inputfilename); fwrite (&input, sizeof (inputtype), 1, inputfile); fclose (inputfile); return 0; } else { iterations = atoi (argv[1]); } } inputfile = fopen (inputfilename, "r"); fseek (inputfile, 0, SEEK_END); numinputs = ftell (inputfile) / sizeof (inputtype); rewind (inputfile); inputs = malloc (numinputs * sizeof (inputtype)); r = fread (inputs, sizeof (inputtype), numinputs, inputfile); if (r != numinputs) { printf ("fread() error\n"); fclose (inputfile); exit (EXIT_FAILURE); } fclose (inputfile); if (*argv_option == 'v') { armort_verifier(inputs, numinputs); return 0; } startt = getTimeOfDayMsec (); for (i = 0; i < iterations; i++) { inputtype *input = &inputs[i % numinputs]; /*printf ("armort_monthly_payment(%Df,%Df,%Df) = %Df\n", 169900.0DD, 0.0725DD, 30.0DD, 0, 0); */ armort_monthly_table (input->loan, input->rate, input->duration, 0, 0); } endt = getTimeOfDayMsec (); deltat = endt - startt; mill_sec = (double) deltat / 1000.0; printf (" %d iterations of amort w/o formating requires %12.3f seconds\n", iterations, mill_sec); startt = getTimeOfDayMsec (); for (i = 0; i < iterations; i++) { inputtype *input = &inputs[i % numinputs]; /*printf ("armort_monthly_payment(%Df,%Df,%Df) = %Df\n", 169900.0DD, 0.0725DD, 30.0DD, 0, 0); */ armort_monthly_table (input->loan, input->rate, input->duration, 1, 0); } endt = getTimeOfDayMsec (); deltat = endt - startt; mill_sec = (double) deltat / 1000.0; printf (" %d iterations of amort with formating requires %12.3f seconds\n", iterations, mill_sec); return 0; } libdfp-1.0.17/tests/test-bfp-conversions.c000066400000000000000000000361401504475242000204470ustar00rootroot00000000000000/* Test bfp -> dfp and dfp -> bfp conversions Copyright (C) 2011-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ /* Notes for future readers. GCC internally maps various C float types to "modes". Most of the time, this is sensible, sometimes is it not. DF is generally always _Float64. XF is generally always the Intel 96 long double format. SF is generally always _Float32. KF is only exists on ppc64le, and is _Float128. TF is a crapshoot. on x86, it is _Float128. on ppc64{,le}, it is ibm128 format. on others... maybe something else yet. For a given target, we need to test the cross product of {*F modes} and {SD,DD,TD modes}. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif /* For _Float128 support. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ #define __STDC_WANT_IEC_60559_TYPES_EXT__ #endif #define _WANT_VC 1 /* Pick up the _VC_P(x,y,fmt) macro. */ #include "scaffold.c" /* Pick up the _VC_P(x,y,fmt) macro. */ /* Inspired by GLIBC stdio-common/tfformat.c */ #include #include #if defined __i386__ || defined __x86_64__ # define HAVE_XFMODE 1 # define TF_SUF(x) x ## f128 #elif defined (__powerpc64__) || defined (__powerpc__) # if defined _ARCH_PWR8 && defined __LITTLE_ENDIAN__ && (_CALL_ELF == 2) # define HAVE_KFMODE 1 # endif # if __LDBL_MANT_DIG__ == 106 # define TF_MODE_IBM128 1 # define TF_MODE_FLT128 0 # else # define HAVE_IFMODE 1 # endif #endif #ifndef TF_MODE_IBM128 #define TF_MODE_FLT128 1 #define TF_MODE_IBM128 0 #endif #ifndef HAVE_XFMODE #define HAVE_XFMODE 0 #endif #ifndef HAVE_KFMODE #define HAVE_KFMODE 0 #endif #ifndef HAVE_IFMODE #define HAVE_IFMODE 0 #endif #ifndef TF_SUF #define TF_SUF(x) x ## L #endif /* Make the mess of TFmode slightly more readable here. */ #define TEST_TF(x,y,...) TEST(TF_SUF (x), y, ##__VA_ARGS__) #define TEST2_TF(x,y,...) TEST(x, TF_SUF (y), ##__VA_ARGS__) /* Note, we special case IBM128 here because it is truly a special case. */ /* Special flags */ #define F_NONE (0) #define F_TF_IBM128 (1<<0) #define F_TF_FLT128 (1<<1) /* This is painful, but GCC won't parse variable length ibm128 values. */ #define F_IBM128_SPECIAL (1<<2) #define _DECL_STRUCT(from, to, ...) \ static struct from ## to ## _tests { \ int line; \ float in __attribute__((mode (from))); \ float out __attribute__((mode (to))); \ const char *strname; \ struct { \ int flags; \ double ibm128[2]; \ } extra; \ } from ## to[] = { \ __VA_ARGS__ \ {0} \ }; #define DECL_STRUCT(from, to, ...) _DECL_STRUCT (from, to, __VA_ARGS__) /* SF -> {S,D,T}D mode tests */ #define TEST(x,y,...) _TEST(x, y, ##__VA_ARGS__) #define _TEST(x,y,...) {__LINE__, x, y, #y " = (%s) " #x "\n", {__VA_ARGS__}} DECL_STRUCT(SF, SD, TEST(12.345, 12.345DF), TEST(12.345678, 12.345678DF), TEST(123456.7, 123456.7DF), TEST(999999.9, 999999.9DF), TEST(2.0, 2.0DF), TEST(30.0, 30.0DF), TEST(1.0e-20, 1.0e-20DF), TEST(1.0e-96, 0.0DF), TEST(3.402819e+38, 3.402819e+38DF), TEST(100000., 100000.0DF), TEST(999999., 999999.0DF), TEST(1.2e-38, 1.2e-38DF), TEST(1.1e-38, 1.1e-38DF), TEST(-1.2e-38, -1.2e-38DF), ) DECL_STRUCT(SF, DD, TEST(12.345, 12.345000267028809DD), TEST(30.0, 30.0DD), TEST(3.402819e+38f, 3.402819004255176e+38DD), ) DECL_STRUCT(SF, TD, TEST(12.345, 12.3450002670288085937500000000000000DL), TEST(30.0, 30.0DL), TEST(3.402819e+38f, 3.402819004255175794749548566449886e+38DL), ) DECL_STRUCT(DF, DD, TEST(12.3456789, 12.3456789DD), TEST(-2.0, -2.0DD), TEST(1.79768e+308, 1.79768e+308DD), TEST(100000000000000, 100000000000000.0DD), TEST(999999999999999, 999999999999999.0DD), ) DECL_STRUCT(DF, TD, TEST(12.3456789, 12.3456788999999993450273905182257295DL), TEST(-2.0, -2.0DL), TEST(1.79768e+308, 1.797679999999999908416854000763986e+308DL), ) DECL_STRUCT(SD, DF, TEST(12.345DF, 12.345), TEST(2.0DF, 2.0), TEST(3.402819e+38DF, 3.402819e+38), TEST(9.999998e96DF, 9.999998e96), TEST(100000.0DF, 100000), TEST(999999.0DF, 999999), TEST(1.e-39DF, 1.e-39), TEST(-1.e-39DF, -1.e-39), TEST(1.2e-38DF, 1.2e-38), TEST(1.e-40DF, 1.e-40), TEST(8.e-44DF, 8.e-44), TEST(9.e-44DF, 9.e-44), TEST(8.e-46DF, 8.e-46), TEST(-9.e-44DF, -9.e-44), TEST(-8.e-46DF, -8.e-46), ); DECL_STRUCT(DD, DF, TEST(-7.0DD, -7.0), TEST(3.402819e+38DD, 3.402819e+38), TEST(1.79768e+308DD, 1.79768e+308), TEST(100000000000000.0DD, 100000000000000), TEST(999999999999999.0DD, 999999999999999), TEST(1.e290DD, 1.e290), TEST(1.e291DD, 1.e291), TEST(1.e308DD, 1.e308), TEST(1.e-308DD, 1.e-308), TEST(1.e-291DD, 1.e-291), TEST(1.e-290DD, 1.e-290), TEST(1.e-39DD, 1.e-39), TEST(-1.e-39DD, -1.e-39), ) #if HAVE_XFMODE DECL_STRUCT(SD, XF, TEST(12.345DF, 12.345000000000000000242861286636753L), TEST(2.0DF, 2.0L), ) DECL_STRUCT(DD, XF, TEST(12.3456789DD, 12.345678899999999999885502699470408L), TEST(-7.0DD, -7.0L), ) DECL_STRUCT(XF, TD, TEST(0xc.587e69926ad1p0L, 1.234567889999999934502739051822572947e1DL), TEST(-22.0L, -22.0DL), TEST(100000000000000000, 100000000000000000.0DL), TEST(999999999999999999, 999999999999999999.0DL), TEST(100000000000000000000545460846592.0L, 100000000000000000000545460846592.0DL), TEST(999999999999999999970270236377088.0L, 999999999999999999970270236377088.0DL), ); #endif #define TFTD_TESTS \ TEST_TF(0xc.587e69926ad1p0, 12.3456788999999993450273905182257295DL), \ TEST_TF(-22.0, -22.0DL), \ TEST_TF(100000000000000000.0, 100000000000000000.0DL), \ TEST_TF(999999999999999999.0, 999999999999999999.0DL), \ TEST_TF(100000000000000000000000000000000.0, 100000000000000000000000000000000.0DL), \ TEST_TF(999999999999999999999999999999999.0, 1000000000000000000000000000000000.0DL, F_TF_IBM128, {}), \ TEST_TF(999999999999999999999999999999999.0, 999999999999999999999999999999999.0DL, F_TF_FLT128, {}), DECL_STRUCT(TF, TD, TFTD_TESTS) #define SDTF_TESTS \ TEST2_TF(12.345DF, 12.345, F_TF_FLT128, {}), \ TEST2_TF(12.345DF, 0x1.8b0a3d70a3d71p3, F_TF_IBM128, {}), \ TEST2_TF(2.0DF, 2.0), DECL_STRUCT(SD, TF, SDTF_TESTS) #define DDTF_TESTS \ TEST2_TF(12.3456789DD, 12.3456789, F_TF_FLT128, {}), \ TEST2_TF(12.3456789DD, 0x1.8b0fcd324d5a2p3, F_TF_IBM128, {}), \ TEST2_TF(-7.0DD, -7.0), DECL_STRUCT(DD, TF, DDTF_TESTS) #define TDTF_TESTS \ TEST2_TF(30.0DL, 30.0), \ TEST2_TF(0.00048828125DL, 0.00048828125), \ TEST2_TF(2.98023223876953125E-8DL, 2.98023223876953125E-8), \ TEST2_TF(3.402819e+38DL, 3.402819e+38), \ TEST2_TF(100000000000000000.0DL, 100000000000000000.0), \ TEST2_TF(999999999999999999.0DL, 999999999999999999.0), \ TEST2_TF(100000000000000000000000000000000.0DL, 100000000000000000000000000000000.0), \ TEST2_TF(999999999999999999999999999999999.0DL, 999999999999999999999999999999999.0), \ TEST2_TF(1.e290DL, 1.e290), \ TEST2_TF(1.e-290DL, 1.e-290, F_IBM128_SPECIAL, {1.0000000000000001e-290, -6.9127868599625479e-307}), \ TEST2_TF(1.e-308DL, 1.e-308), \ TEST2_TF(1.e-291DL, 1.e-291, F_IBM128_SPECIAL, {9.9999999999999996e-292, 3.7675676608720188e-308}), \ TEST2_TF(3.e-309DL, 3.e-309), \ TEST2_TF(-3.e-309DL, -3.e-309), DECL_STRUCT(TD, TF, TDTF_TESTS) #if __GNUC__ <= 4 && __GNUC_MINOR <= 8 /* This does not support _Float128 or non-trivial long double. */ #define __dfp_fmt_b(x) \ (sizeof (x) == sizeof (float) \ ? "float" \ : sizeof (x) == sizeof (double) \ ? "double" \ : "long double") #define __dfp_fmt_d(x) \ (sizeof (x) == sizeof (_Decimal32) \ ? "_Decimal32" \ : sizeof (x) == sizeof (_Decimal64) \ ? "_Decimal64" \ : "_Decimal128") #define FORMAT_NAME(x) \ (__dfp_compatible(x) ? __dfp_fmt_d(x) : __dfp_fmt_b(x)) #define __dfp_dec_b(x,y) \ (sizeof (x) == sizeof (float) \ ? decodebin32(x,y) \ : sizeof (x) == sizeof (double) \ ? decodebin64(x,y) \ : decodebinl(x,y)) #define __dfp_dec_d(x,y) \ (sizeof (x) == sizeof (_Decimal32) \ ? decoded32(x,y) \ : sizeof (x) == sizeof (_Decimal64) \ ? decoded64(x,y) \ : decoded128(x,y)) #define DECODE(x,y) \ (__dfp_compatible(x) ? __dfp_dec_d(x,y) : __dfp_dec_b(x,y)) /* strfroml/strfromd do not exist here either. */ static char * decodebin32(float d, char *c) { sprintf(c,"%.6a",d); return c;} static char * decodebin64(double d, char *c) { sprintf(c,"%.14a",d); return c;} static char * decodebinl(long double d, char *c) { sprintf(c,"%.29La",d); return c;} #else /* ppc/ppc64 do no support _Float128. */ #if TF_MODE_FLT128 || HAVE_KFMODE # define HAVE_FLT128(x) x, inline char * decodebin128(_Float128 d, char *c) { strfromf128(c,128,"%.29a",d); return c;} #else # define HAVE_FLT128(x) #endif /* And handle the case on ppc64le where ldbl != ibm128 */ #if HAVE_IFMODE typedef float __attribute__((mode(IF))) ibm128; inline char* decodeibm128(ibm128 d, char *c) { /* Note, no helper glibc/libm functions in this mode. Treat as two doubles. */ double d0 = __builtin_unpack_ibm128(d, 0); double d1 = __builtin_unpack_ibm128(d, 1); sprintf(c,"ibm128(%.14a,%.14a;%.16e,%.16e)",d0,d1,d0,d1); return c; } # define HAVE_IBM128(x) x, #else # define HAVE_IBM128(x) #endif #define FORMAT_NAME(x) \ _Generic((x), \ float: "float", \ double: "double", \ long double: "long double", \ HAVE_FLT128(_Float128: "_Float128") \ HAVE_IBM128(ibm128: "ibm128") \ _Decimal32: "_Decimal32", \ _Decimal64: "_Decimal64", \ _Decimal128: "_Decimal128") #define DECODE(x,y) \ _Generic((x), \ float: decodebin32, \ double: decodebin64, \ long double: decodebinl, \ HAVE_FLT128(_Float128: decodebin128) \ HAVE_IBM128(ibm128: decodeibm128) \ _Decimal32: decoded32, \ _Decimal64: decoded64, \ _Decimal128: decoded128)(x,y) inline char * decodebin32(float d, char *c) { strfromf(c,128,"%.6a",d); return c;} inline char * decodebin64(double d, char *c) { strfromd(c,128,"%.14a",d); return c;} inline char * decodebinl(long double d, char *c) { strfroml(c,128,"%.29a",d); return c;} #endif #include "decode.h" /* Technically part of TS 18661-2. This is probably not a compliant implementation. */ /* Replace snprintf with DECODE. _Float128 support *printf */ #undef _VC_P #define _VC_P(f,l,x,y,fmt) do { \ ++testnum; \ memset(bufx,'\0',CHAR_MAX); \ memset(bufy,'\0',CHAR_MAX); \ DECODE(x, bufx); \ DECODE(y, bufy); \ if ((isnan(x) && isnan(y)) || \ (x == y)) \ { \ fprintf (stdout, "%-3d Success: Expected: \"%s\"\n", \ testnum, bufx); \ fprintf (stdout, " Result: \"%s\"\n", \ bufy); \ fprintf (stdout, "in: %s:%i\n\n", f, l); \ } \ else \ { \ fprintf (stderr, "%-3d Error: Expected: \"%s\"\n", \ testnum, bufx); \ fprintf (stderr, " Result: \"%s\"\n", \ bufy); \ fprintf (stderr, "in: %s:%i\n\n", f, l); \ ++fail; \ } \ } while (0) #define CONTINUE_IF(cond) if (cond) continue; /* Fixup variable precision IBM128 values. Whether these should be allowed or not is debatable, but is the current behavior. */ #if TF_MODE_IBM128 || HAVE_IFMODE #if HAVE_IFMODE #define PACK_IBM128(a,b) __builtin_pack_ibm128(a,b) #else #define PACK_IBM128(a,b) __builtin_pack_longdouble(a,b) #endif # define __REWRITE_IBM128_EXPECTED(tp) \ if(tp->extra.flags & F_IBM128_SPECIAL) \ tp->out = PACK_IBM128 (tp->extra.ibm128[0], tp->extra.ibm128[1]); #endif #if TF_MODE_IBM128 #define REWRITE_IBM128_EXPECTED(tp) __REWRITE_IBM128_EXPECTED(tp) #else #define REWRITE_IBM128_EXPECTED(tp) #endif #define DO_TEST(from, to, func) _DO_TEST(from, to, func) #define _DO_TEST(from, to, func) \ for (int i = 0; (from ## to)[i].line; i++) \ { \ __typeof(&((from ## to)[0])) tp = &(from ## to)[i]; \ CONTINUE_IF(!TF_MODE_IBM128 && (tp->extra.flags & F_TF_IBM128)); \ CONTINUE_IF(!TF_MODE_FLT128 && (tp->extra.flags & F_TF_FLT128)); \ REWRITE_IBM128_EXPECTED(tp); \ __typeof(tp->out) retval = func (tp->in); \ fprintf(stdout, tp->strname, FORMAT_NAME(tp->out)); \ _VC_P(__FILE__,tp->line, tp->out, retval, "%e"); \ } int main (void) { DO_TEST(SD,DF,); DO_TEST(SD,TF,); DO_TEST(DD,DF,); DO_TEST(DD,TF,); DO_TEST(TD,TF,); DO_TEST(SF,SD,); DO_TEST(SF,DD,); DO_TEST(SF,TD,); DO_TEST(DF,DD,); DO_TEST(DF,TD,); DO_TEST(TF,TD,); #if HAVE_XFMODE DO_TEST(SD,XF,); DO_TEST(DD,XF,); DO_TEST(XF,TD,); #endif /* IFmode is the ibm128 format. The ABI still uses *tf* named functions. */ #if HAVE_IFMODE #undef TF_MODE_IBM128 #undef TF_MODE_FLT128 #undef TF_SUF #undef REWRITE_IBM128_EXPECTED #define TF_MODE_IBM128 1 #define TF_MODE_FLT128 0 #define TF_SUF(x) x ## f128 #define REWRITE_IBM128_EXPECTED(tp) __REWRITE_IBM128_EXPECTED(tp) DECL_STRUCT(IF, TD, TFTD_TESTS) DECL_STRUCT(SD, IF, SDTF_TESTS) DECL_STRUCT(DD, IF, DDTF_TESTS) DECL_STRUCT(TD, IF, TDTF_TESTS) DO_TEST(IF,TD,); DO_TEST(SD,IF,); DO_TEST(DD,IF,); DO_TEST(TD,IF,); #endif /* KFmode is kludgey. Just rename and redeclare the KFmode bits as if they were float128. */ #if HAVE_KFMODE #undef TF_MODE_IBM128 #undef TF_MODE_FLT128 #undef TF_SUF #undef REWRITE_IBM128_EXPECTED #define TF_MODE_IBM128 0 #define TF_MODE_FLT128 1 #define TF_SUF(x) x ## f128 #define REWRITE_IBM128_EXPECTED(tp) DECL_STRUCT(KF, TD, TFTD_TESTS) DECL_STRUCT(SD, KF, SDTF_TESTS) DECL_STRUCT(DD, KF, DDTF_TESTS) DECL_STRUCT(TD, KF, TDTF_TESTS) DO_TEST(KF,TD,); DO_TEST(SD,KF,); DO_TEST(DD,KF,); DO_TEST(TD,KF,); #endif _REPORT(); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-cast-to-overflow.c000066400000000000000000000242711504475242000205470ustar00rootroot00000000000000/* Test trucate cast Decimal -> Binary overflow. Copyright (C) 2017 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author: Rogerio Alves The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include #include #include #include #define _WANT_VC 1 #include "scaffold.c" typedef struct { int line; int round_mode; _Decimal128 set; long double expect; } d128_type; typedef struct { int line; int round_mode; _Decimal64 set; double expect; } d64_type; typedef struct { int line; int round_mode; _Decimal32 set; float expect; } d32_type; /* The following values are designed to be a little bit greater than the maximum value for the particular bfp type: #define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F #define __DBL_MAX__ ((double) 1.79769313486231570814527423731704357e+308L on power: #define __LDBL_MAX__ 1.79769313486231580793728971405301e+308L on s390x: #define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L E.g. for float, they are computed in the following way: __FLT_MAX__ = 0x1.fffffep+127 _Decimal32 val = 0x1.ffffffp+127; printf ("%.7He\n", val); => 3.4028240e+38 */ #define DEC128_GREATER_FLT_MAX 3.402823567797336616375393954581426e38DL #define DEC64_GREATER_FLT_MAX 3.402823567797337e38DD #define DEC32_GREATER_FLT_MAX 3.402824e38DF #define DEC128_GREATER_DBL_MAX 1.797693134862315907729305190789025e308DL #define DEC64_GREATER_DBL_MAX 1.797693134862316e308DD #if __LDBL_MANT_DIG__ == 106 # define DEC128_GREATER_LDBL_MAX 1.797693134862316e308DL #else # define DEC128_GREATER_LDBL_MAX 1.189731495357231765085759326628008e4932DL #endif /* Decimal 128 to Binary Double 128. */ static const d128_type d128to128[] = { {__LINE__, FE_TONEAREST, 1e6000DL, INFINITY}, {__LINE__, FE_TONEAREST, -1e6000DL, -INFINITY}, {__LINE__, FE_TONEAREST, 1e4933DL, INFINITY}, {__LINE__, FE_TONEAREST, -1e4933DL, -INFINITY}, {__LINE__, FE_TONEAREST, DEC128_GREATER_LDBL_MAX, INFINITY}, {__LINE__, FE_TONEAREST, -DEC128_GREATER_LDBL_MAX, -INFINITY}, {__LINE__, FE_TOWARDZERO, 1e6000DL, LDBL_MAX}, {__LINE__, FE_TOWARDZERO, -1e6000DL, -LDBL_MAX}, {__LINE__, FE_TOWARDZERO, 1e4933DL, LDBL_MAX}, {__LINE__, FE_TOWARDZERO, -1e4933DL, -LDBL_MAX}, {__LINE__, FE_TOWARDZERO, DEC128_GREATER_LDBL_MAX, LDBL_MAX}, {__LINE__, FE_TOWARDZERO, -DEC128_GREATER_LDBL_MAX, -LDBL_MAX}, {__LINE__, FE_DOWNWARD, 1e6000DL, LDBL_MAX}, {__LINE__, FE_DOWNWARD, -1e6000DL, -INFINITY}, {__LINE__, FE_DOWNWARD, 1e4933DL, LDBL_MAX}, {__LINE__, FE_DOWNWARD, -1e4933DL, -INFINITY}, {__LINE__, FE_DOWNWARD, DEC128_GREATER_LDBL_MAX, LDBL_MAX}, {__LINE__, FE_DOWNWARD, -DEC128_GREATER_LDBL_MAX, -INFINITY}, {__LINE__, FE_UPWARD, 1e6000DL, INFINITY}, {__LINE__, FE_UPWARD, -1e6000DL, -LDBL_MAX}, {__LINE__, FE_UPWARD, 1e4933DL, INFINITY}, {__LINE__, FE_UPWARD, -1e4933DL, -LDBL_MAX}, {__LINE__, FE_UPWARD, DEC128_GREATER_LDBL_MAX, INFINITY}, {__LINE__, FE_UPWARD, -DEC128_GREATER_LDBL_MAX, -LDBL_MAX} }; /* Decimal 128 to Binary Double 64. */ static const d128_type d128to64[] = { {__LINE__, FE_TONEAREST, 1e1000DL, INFINITY}, {__LINE__, FE_TONEAREST, -1e1000DL, -INFINITY}, {__LINE__, FE_TONEAREST, DEC128_GREATER_DBL_MAX, INFINITY}, {__LINE__, FE_TONEAREST, -DEC128_GREATER_DBL_MAX, -INFINITY}, {__LINE__, FE_TOWARDZERO, 1e1000DL, DBL_MAX}, {__LINE__, FE_TOWARDZERO, -1e1000DL, -DBL_MAX}, {__LINE__, FE_TOWARDZERO, DEC128_GREATER_DBL_MAX, DBL_MAX}, {__LINE__, FE_TOWARDZERO, -DEC128_GREATER_DBL_MAX, -DBL_MAX}, {__LINE__, FE_DOWNWARD, 1e1000DL, DBL_MAX}, {__LINE__, FE_DOWNWARD, -1e1000DL, -INFINITY}, {__LINE__, FE_DOWNWARD, DEC128_GREATER_DBL_MAX, DBL_MAX}, {__LINE__, FE_DOWNWARD, -DEC128_GREATER_DBL_MAX, -INFINITY}, {__LINE__, FE_UPWARD, 1e1000DL, INFINITY}, {__LINE__, FE_UPWARD, -1e1000DL, -DBL_MAX}, {__LINE__, FE_UPWARD, DEC128_GREATER_DBL_MAX, INFINITY}, {__LINE__, FE_UPWARD, -DEC128_GREATER_DBL_MAX, -DBL_MAX} }; /* Decimal 128 to Binary Float 32. */ static const d128_type d128to32[] = { {__LINE__, FE_TONEAREST, 1e1000DL, INFINITY}, {__LINE__, FE_TONEAREST, -1e1000DL, -INFINITY}, {__LINE__, FE_TONEAREST, DEC128_GREATER_FLT_MAX, INFINITY}, {__LINE__, FE_TONEAREST, -DEC128_GREATER_FLT_MAX, -INFINITY}, {__LINE__, FE_TOWARDZERO, 1e1000DL, FLT_MAX}, {__LINE__, FE_TOWARDZERO, -1e1000DL, -FLT_MAX}, {__LINE__, FE_TOWARDZERO, DEC128_GREATER_FLT_MAX, FLT_MAX}, {__LINE__, FE_TOWARDZERO, -DEC128_GREATER_FLT_MAX, -FLT_MAX}, {__LINE__, FE_DOWNWARD, 1e1000DL, FLT_MAX}, {__LINE__, FE_DOWNWARD, -1e1000DL, -INFINITY}, {__LINE__, FE_DOWNWARD, DEC128_GREATER_FLT_MAX, FLT_MAX}, {__LINE__, FE_DOWNWARD, -DEC128_GREATER_FLT_MAX, -INFINITY}, {__LINE__, FE_UPWARD, 1e1000DL, INFINITY}, {__LINE__, FE_UPWARD, -1e1000DL, -FLT_MAX}, {__LINE__, FE_UPWARD, DEC128_GREATER_FLT_MAX, INFINITY}, {__LINE__, FE_UPWARD, -DEC128_GREATER_FLT_MAX, -FLT_MAX} }; /* Decimal 64 to Binary Double 64. */ static const d64_type d64to64[] = { {__LINE__, FE_TONEAREST, 1e369DD, INFINITY}, {__LINE__, FE_TONEAREST, -1e369DD, -INFINITY}, {__LINE__, FE_TONEAREST, DEC64_GREATER_DBL_MAX, INFINITY}, {__LINE__, FE_TONEAREST, -DEC64_GREATER_DBL_MAX, -INFINITY}, {__LINE__, FE_TOWARDZERO, 1e369DD, DBL_MAX}, {__LINE__, FE_TOWARDZERO, -1e369DD, -DBL_MAX}, {__LINE__, FE_TOWARDZERO, DEC64_GREATER_DBL_MAX, DBL_MAX}, {__LINE__, FE_TOWARDZERO, -DEC64_GREATER_DBL_MAX, -DBL_MAX}, {__LINE__, FE_DOWNWARD, 1e369DD, DBL_MAX}, {__LINE__, FE_DOWNWARD, -1e369DD, -INFINITY}, {__LINE__, FE_DOWNWARD, DEC64_GREATER_DBL_MAX, DBL_MAX}, {__LINE__, FE_DOWNWARD, -DEC64_GREATER_DBL_MAX, -INFINITY}, {__LINE__, FE_UPWARD, 1e369DD, INFINITY}, {__LINE__, FE_UPWARD, -1e369DD, -DBL_MAX}, {__LINE__, FE_UPWARD, DEC64_GREATER_DBL_MAX, INFINITY}, {__LINE__, FE_UPWARD, -DEC64_GREATER_DBL_MAX, -DBL_MAX} }; /* Decimal 64 to Binary Float 32. */ static const d64_type d64to32[] = { {__LINE__, FE_TONEAREST, 1e369DD, INFINITY}, {__LINE__, FE_TONEAREST, -1e369DD, -INFINITY}, {__LINE__, FE_TONEAREST, DEC64_GREATER_FLT_MAX, INFINITY}, {__LINE__, FE_TONEAREST, -DEC64_GREATER_FLT_MAX, -INFINITY}, {__LINE__, FE_TOWARDZERO, 1e369DD, FLT_MAX}, {__LINE__, FE_TOWARDZERO, -1e369DD, -FLT_MAX}, {__LINE__, FE_TOWARDZERO, DEC64_GREATER_FLT_MAX, FLT_MAX}, {__LINE__, FE_TOWARDZERO, -DEC64_GREATER_FLT_MAX, -FLT_MAX}, {__LINE__, FE_DOWNWARD, 1e369DD, FLT_MAX}, {__LINE__, FE_DOWNWARD, -1e369DD, -INFINITY}, {__LINE__, FE_DOWNWARD, DEC64_GREATER_FLT_MAX, FLT_MAX}, {__LINE__, FE_DOWNWARD, -DEC64_GREATER_FLT_MAX, -INFINITY}, {__LINE__, FE_UPWARD, 1e369DD, INFINITY}, {__LINE__, FE_UPWARD, -1e369DD, -FLT_MAX}, {__LINE__, FE_UPWARD, DEC64_GREATER_FLT_MAX, INFINITY}, {__LINE__, FE_UPWARD, -DEC64_GREATER_FLT_MAX, -FLT_MAX} }; /* Decimal 64 to Binary Float 32. */ static const d32_type d32to32[] = { {__LINE__, FE_TONEAREST, 1e90DF, INFINITY}, {__LINE__, FE_TONEAREST, -1e90DF, -INFINITY}, {__LINE__, FE_TONEAREST, DEC32_GREATER_FLT_MAX, INFINITY}, {__LINE__, FE_TONEAREST, -DEC32_GREATER_FLT_MAX, -INFINITY}, {__LINE__, FE_TOWARDZERO, 1e90DF, FLT_MAX}, {__LINE__, FE_TOWARDZERO, -1e90DF, -FLT_MAX}, {__LINE__, FE_TOWARDZERO, DEC32_GREATER_FLT_MAX, FLT_MAX}, {__LINE__, FE_TOWARDZERO, -DEC32_GREATER_FLT_MAX, -FLT_MAX}, {__LINE__, FE_DOWNWARD, 1e90DF, FLT_MAX}, {__LINE__, FE_DOWNWARD, -1e90DF, -INFINITY}, {__LINE__, FE_DOWNWARD, DEC32_GREATER_FLT_MAX, FLT_MAX}, {__LINE__, FE_DOWNWARD, -DEC32_GREATER_FLT_MAX, -INFINITY}, {__LINE__, FE_UPWARD, 1e90DF, INFINITY}, {__LINE__, FE_UPWARD, -1e90DF, -FLT_MAX}, {__LINE__, FE_UPWARD, DEC32_GREATER_FLT_MAX, INFINITY}, {__LINE__, FE_UPWARD, -DEC32_GREATER_FLT_MAX, -FLT_MAX} }; static const int d128to128_size = sizeof (d128to128) / sizeof (d128to128[0]); static const int d128to64_size = sizeof (d128to64) / sizeof (d128to64[0]); static const int d128to32_size = sizeof (d128to32) / sizeof (d128to32[0]); static const int d64to64_size = sizeof (d64to64) / sizeof (d64to64[0]); static const int d64to32_size = sizeof (d64to32) / sizeof (d64to32[0]); static const int d32to32_size = sizeof (d32to32) / sizeof (d32to32[0]); int main(void) { int i; for (i=0; i Binary overflow. Copyright (C) 2017 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author: Rogerio Alves The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include #include #include #include #define _WANT_VC 1 #include "scaffold.c" /* TODO: Radix conversion in the denormal range will fail today with the implementations provided by libdfp today. */ #if defined _LIBDFP_HAS_IDEAL_RDX_CVT #define XFAIL_CONVERSION 0 #else #define XFAIL_CONVERSION 1 #endif typedef struct { int line; int round_mode; _Decimal128 set; long double expect; } d128_type; typedef struct { int line; int round_mode; _Decimal64 set; double expect; } d64_type; typedef struct { int line; int round_mode; _Decimal32 set; float expect; } d32_type; /* Decimal 128 to Binary Double 128. */ static const d128_type d128to128[] = { {__LINE__, FE_TONEAREST, 1e-6176DL, 0.0}, {__LINE__, FE_TONEAREST, -1e-6176DL, -0.0}, {__LINE__, FE_TONEAREST, 1e-4967DL, 0.0}, {__LINE__, FE_TONEAREST, -1e-4967DL, -0.0}, #if __LDBL_MANT_DIG__ == 113 {__LINE__, FE_TONEAREST, 3.237587559719012555462219479113823e-4966DL, 0.0}, {__LINE__, FE_TONEAREST, -3.237587559719012555462219479113823e-4966DL, -0.0}, {__LINE__, FE_TONEAREST, 3.237587559719012555462219479113824e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -3.237587559719012555462219479113824e-4966DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 7e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7e-4966DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 13e-4966DL, 2 * __LDBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -13e-4966DL, -2 * __LDBL_DENORM_MIN__}, #endif {__LINE__, FE_TOWARDZERO, 1e-5000DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-5000DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1e-4967DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-4967DL, -0.0}, #if __LDBL_MANT_DIG__ == 113 {__LINE__, FE_TOWARDZERO, 6.475175119438025e-4966DL, 0.0}, {__LINE__, FE_TOWARDZERO, -6.475175119438025e-4966DL, -0.0}, {__LINE__, FE_TOWARDZERO, 6.475175119438025110924438958227646e-4966DL, 0.0}, {__LINE__, FE_TOWARDZERO, -6.475175119438025110924438958227646e-4966DL, -0.0 }, {__LINE__, FE_TOWARDZERO, 6.475175119438025110924438958227647e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -6.475175119438025110924438958227647e-4966DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 6.475175119438026e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -6.475175119438026e-4966DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 7e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -7e-4966DL, -__LDBL_DENORM_MIN__}, #endif {__LINE__, FE_DOWNWARD, 1e-5000DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-5000DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-4967DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-4967DL, -__LDBL_DENORM_MIN__}, #if __LDBL_MANT_DIG__ == 113 {__LINE__, FE_DOWNWARD, 6.475175119438025e-4966DL, 0.0}, {__LINE__, FE_DOWNWARD, -6.475175119438025e-4966DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 6.475175119438025110924438958227646e-4966DL, 0.0}, {__LINE__, FE_DOWNWARD, -6.475175119438025110924438958227646e-4966DL, -__LDBL_DENORM_MIN__ }, {__LINE__, FE_DOWNWARD, 6.475175119438025110924438958227647e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -6.475175119438025110924438958227647e-4966DL, -2 * __LDBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 6.475175119438026e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -6.475175119438026e-4966DL, -2 * __LDBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 7e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -7e-4966DL, -2 * __LDBL_DENORM_MIN__}, #endif {__LINE__, FE_UPWARD, 1e-5000DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-5000DL, -0.0}, {__LINE__, FE_UPWARD, 1e-4967DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-4967DL, -0.0}, #if __LDBL_MANT_DIG__ == 113 {__LINE__, FE_UPWARD, 6.475175119438025e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -6.475175119438025e-4966DL, -0.0}, {__LINE__, FE_UPWARD, 6.475175119438025110924438958227646e-4966DL, __LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -6.475175119438025110924438958227646e-4966DL, -0.0 }, {__LINE__, FE_UPWARD, 6.475175119438025110924438958227647e-4966DL, 2 * __LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -6.475175119438025110924438958227647e-4966DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, 6.475175119438026e-4966DL, 2 * __LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -6.475175119438026e-4966DL, -__LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, 7e-4966DL, 2 * __LDBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -7e-4966DL, -__LDBL_DENORM_MIN__} #endif }; /* Decimal 128 to Binary Double 64. */ static const d128_type d128to64[] = { {__LINE__, FE_TONEAREST, 1e-6176DL, 0.0}, {__LINE__, FE_TONEAREST, -1e-6176DL, -0.0}, {__LINE__, FE_TONEAREST, 1e-1000DL, 0.0}, {__LINE__, FE_TONEAREST, -1e-1000DL, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TONEAREST, 1e-325DL, 0.0}, {__LINE__, FE_TONEAREST, -1e-325DL, -0.0}, #endif {__LINE__, FE_TONEAREST, 2.4703282292062326e-324DL, 0.0}, {__LINE__, FE_TONEAREST, -2.4703282292062326e-324DL, -0.0}, {__LINE__, FE_TONEAREST, 2.4703282292062327e-324DL, 0.0}, {__LINE__, FE_TONEAREST, -2.4703282292062327e-324DL, -0.0}, {__LINE__, FE_TONEAREST, 2.470328229206232720882843964341105e-324DL, 0.0}, {__LINE__, FE_TONEAREST, -2.470328229206232720882843964341105e-324DL, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TONEAREST, 2.470328229206232720882843964341107e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -2.470328229206232720882843964341107e-324DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 2.4703282292062328e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -2.4703282292062328e-324DL, -__DBL_DENORM_MIN__}, #endif {__LINE__, FE_TONEAREST, 5e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -5e-324DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 1e-323DL, 2 * __DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -1e-323DL, -2 * __DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 1e-1000DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-1000DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1e-325DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-325DL, -0.0}, {__LINE__, FE_TOWARDZERO, 4.940656458412465e-324DL, 0.0}, {__LINE__, FE_TOWARDZERO, -4.940656458412465e-324DL, -0.0}, {__LINE__, FE_TOWARDZERO, 4.940656458412465441765687928682213e-324DL, 0.0}, {__LINE__, FE_TOWARDZERO, -4.940656458412465441765687928682213e-324DL, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TOWARDZERO, 4.940656458412465441765687928682214e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -4.940656458412465441765687928682214e-324DL, -__DBL_DENORM_MIN__}, #endif {__LINE__, FE_TOWARDZERO, 4.940656458412466e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -4.940656458412466e-324DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 5e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -5e-324DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-1000DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-1000DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-325DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-325DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 4.940656458412465e-324DL, 0.0}, {__LINE__, FE_DOWNWARD, -4.940656458412465e-324DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 4.940656458412465441765687928682213e-324DL, 0.0}, {__LINE__, FE_DOWNWARD, -4.940656458412465441765687928682213e-324DL, -__DBL_DENORM_MIN__}, #if !XFAIL_CONVERSION {__LINE__, FE_DOWNWARD, 4.940656458412465441765687928682214e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -4.940656458412465441765687928682214e-324DL, -2 * __DBL_DENORM_MIN__}, #endif {__LINE__, FE_DOWNWARD, 4.940656458412466e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -4.940656458412466e-324DL, -2 * __DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 5e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -5e-324DL, -2 * __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, 1e-1000DL, __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-1000DL, -0.0}, {__LINE__, FE_UPWARD, 1e-325DL, __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-325DL, -0.0}, {__LINE__, FE_UPWARD, 4.940656458412465e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -4.940656458412465e-324DL, -0.0}, {__LINE__, FE_UPWARD, 4.940656458412465441765687928682213e-324DL, __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -4.940656458412465441765687928682213e-324DL, -0.0 }, #if !XFAIL_CONVERSION {__LINE__, FE_UPWARD, 4.940656458412465441765687928682214e-324DL, 2 * __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -4.940656458412465441765687928682214e-324DL, -__DBL_DENORM_MIN__}, #endif {__LINE__, FE_UPWARD, 4.940656458412466e-324DL, 2 * __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -4.940656458412466e-324DL, -__DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, 5e-324DL, 2 * __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -5e-324DL, -__DBL_DENORM_MIN__} }; /* Decimal 128 to Binary Float 32. */ static const d128_type d128to32[] = { {__LINE__, FE_TONEAREST, 1e-6176DL, 0.0}, {__LINE__, FE_TONEAREST, -1e-6176DL, -0.0}, {__LINE__, FE_TONEAREST, 1e-1000DL, 0.0}, {__LINE__, FE_TONEAREST, -1e-1000DL, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TONEAREST, 7.0064922e-46DL, 0.0}, {__LINE__, FE_TONEAREST, -7.0064922e-46DL, -0.0}, #endif {__LINE__, FE_TONEAREST, 7.0064923e-46DL, 0.0}, {__LINE__, FE_TONEAREST, -7.0064923e-46DL, -0.0}, {__LINE__, FE_TONEAREST, 7.006492321624085e-46DL, 0.0}, {__LINE__, FE_TONEAREST, -7.006492321624085e-46DL, -0.0}, {__LINE__, FE_TONEAREST, 7.006492321624085354618647916449580e-46DL, 0.0}, {__LINE__, FE_TONEAREST, -7.006492321624085354618647916449580e-46DL, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TONEAREST, 7.006492321624085354618647916449581e-46DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7.006492321624085354618647916449581e-46DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 7.006492321624086e-46DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7.006492321624086e-46DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 7.0064924e-46DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7.0064924e-46DL, -__FLT_DENORM_MIN__}, #endif {__LINE__, FE_TONEAREST, 1.5e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -1.5e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 2.9e-45DL, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -2.9e-45DL, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 1e-1000DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-1000DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1e-46DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-46DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1.401298464324817e-45DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1.401298464324817e-45DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1.401298464324817070923729583289916e-45DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1.401298464324817070923729583289916e-45DL, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TOWARDZERO, 1.401298464324817070923729583289917e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -1.401298464324817070923729583289917e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 1.401298464324818e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -1.401298464324818e-45DL, -__FLT_DENORM_MIN__}, #endif {__LINE__, FE_TOWARDZERO, 2e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -2e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-1000DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-1000DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-46DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-46DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1.401298464324817e-45DL, 0.0}, {__LINE__, FE_DOWNWARD, -1.401298464324817e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1.401298464324817070923729583289916e-45DL, 0.0}, {__LINE__, FE_DOWNWARD, -1.401298464324817070923729583289916e-45DL, -__FLT_DENORM_MIN__}, #if !XFAIL_CONVERSION {__LINE__, FE_DOWNWARD, 1.401298464324817070923729583289917e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -1.401298464324817070923729583289917e-45DL, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1.401298464324818e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -1.401298464324818e-45DL, -2 * __FLT_DENORM_MIN__}, #endif {__LINE__, FE_DOWNWARD, 2e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -2e-45DL, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, 1e-1000DL, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-1000DL, -0.0}, {__LINE__, FE_UPWARD, 1e-46DL, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-46DL, -0.0}, {__LINE__, FE_UPWARD, 1.401298464324817e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401298464324817e-45DL, -0.0}, {__LINE__, FE_UPWARD, 1.401298464324817070923729583289916e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401298464324817070923729583289916e-45DL, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_UPWARD, 1.401298464324817070923729583289917e-45DL, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401298464324817070923729583289917e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, 1.401298464324818e-45DL, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401298464324818e-45DL, -__FLT_DENORM_MIN__}, #endif {__LINE__, FE_UPWARD, 2e-45DL, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -2e-45DL, -__FLT_DENORM_MIN__} }; /* Decimal 64 to Binary Double 64. */ static const d64_type d64to64[] = { {__LINE__, FE_TONEAREST, 1e-398DD, 0.0}, {__LINE__, FE_TONEAREST, -1e-398DD, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TONEAREST, 1e-325DD, 0.0}, {__LINE__, FE_TONEAREST, -1e-325DD, -0.0}, #endif {__LINE__, FE_TONEAREST, 2.470328229206232e-324DD, 0.0}, {__LINE__, FE_TONEAREST, -2.470328229206232e-324DD, -0.0}, {__LINE__, FE_TONEAREST, 2.470328229206233e-324DD, __DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -2.470328229206233e-324DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 5e-324DD, __DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -5e-324DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 1e-323DD, 2 * __DBL_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -1e-323DD, -2 * __DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 1e-398DD, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-398DD, -0.0}, {__LINE__, FE_TOWARDZERO, 1e-325DD, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-325DD, -0.0}, {__LINE__, FE_TOWARDZERO, 4.940656458412465e-324DD, 0.0}, {__LINE__, FE_TOWARDZERO, -4.940656458412465e-324DD, -0.0}, {__LINE__, FE_TOWARDZERO, 4.940656458412466e-324DD, __DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -4.940656458412466e-324DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 5e-324DD, __DBL_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -5e-324DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-398DD, 0.0}, {__LINE__, FE_DOWNWARD, -1e-398DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-325DD, 0.0}, {__LINE__, FE_DOWNWARD, -1e-325DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 4.940656458412465e-324DD, 0.0}, {__LINE__, FE_DOWNWARD, -4.940656458412465e-324DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 4.940656458412466e-324DD, __DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -4.940656458412466e-324DD, -2 * __DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 5e-324DD, __DBL_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -5e-324DD, -2 * __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, 1e-398DD, __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-398DD, -0.0}, {__LINE__, FE_UPWARD, 1e-325DD, __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-325DD, -0.0}, {__LINE__, FE_UPWARD, 4.940656458412465e-324DD, __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -4.940656458412465e-324DD, -0.0}, {__LINE__, FE_UPWARD, 4.940656458412466e-324DD, 2 * __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -4.940656458412466e-324DD, -__DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, 5e-324DD, 2 * __DBL_DENORM_MIN__}, {__LINE__, FE_UPWARD, -5e-324DD, -__DBL_DENORM_MIN__} }; /* Decimal 64 to Binary Float 32. */ static const d64_type d64to32[] = { {__LINE__, FE_TONEAREST, 1e-398DD, 0.0}, {__LINE__, FE_TONEAREST, -1e-398DD, -0.0}, {__LINE__, FE_TONEAREST, 7.0064922e-46DD, 0.0}, {__LINE__, FE_TONEAREST, -7.0064922e-46DD, -0.0}, {__LINE__, FE_TONEAREST, 7.0064923e-46DD, 0.0}, {__LINE__, FE_TONEAREST, -7.0064923e-46DD, -0.0}, {__LINE__, FE_TONEAREST, 7.00649232e-46DD, 0.0}, {__LINE__, FE_TONEAREST, -7.00649232e-46DD, -0.0}, {__LINE__, FE_TONEAREST, 7.006492321624085e-46DD, 0.0}, {__LINE__, FE_TONEAREST, -7.006492321624085e-46DD, -0.0}, #if !XFAIL_CONVERSION {__LINE__, FE_TONEAREST, 7.006492321624086e-46DD, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7.006492321624086e-46DD, -__FLT_DENORM_MIN__}, #endif {__LINE__, FE_TONEAREST, 7.00649233e-46DD, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7.00649233e-46DD, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 7.0064924e-46DD, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7.0064924e-46DD, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 1.5e-45DD, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -1.5e-45DD, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 2.9e-45DD, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -2.9e-45DD, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 1e-398DD, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-398DD, -0.0}, {__LINE__, FE_TOWARDZERO, 1e-46DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-46DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1.401298464324817e-45DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1.401298464324817e-45DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1.401298464324818e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -1.401298464324818e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 2e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -2e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-398DD, 0.0}, {__LINE__, FE_DOWNWARD, -1e-398DD, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-46DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-46DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1.401298464324817e-45DL, 0.0}, {__LINE__, FE_DOWNWARD, -1.401298464324817e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1.401298464324818e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -1.401298464324818e-45DL, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 2e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -2e-45DL, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, 1e-398DD, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-398DD, -0.0}, {__LINE__, FE_UPWARD, 1e-46DD, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-46DD, -0.0}, {__LINE__, FE_UPWARD, 1.401298464324817e-45DD, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401298464324817e-45DD, -0.0}, {__LINE__, FE_UPWARD, 1.401298464324818e-45DD, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401298464324818e-45DD, -__FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, 2e-45DD, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -2e-45DD, -__FLT_DENORM_MIN__} }; /* Decimal 32 to Binary Float 32. */ static const d32_type d32to32[] = { {__LINE__, FE_TONEAREST, 1e-101DF, 0.0}, {__LINE__, FE_TONEAREST, -1e-101DF, -0.0}, {__LINE__, FE_TONEAREST, 7.006492e-46DF, 0.0}, {__LINE__, FE_TONEAREST, -7.006492e-46DF, -0.0}, {__LINE__, FE_TONEAREST, 7.006493e-46DF, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -7.006493e-46DF, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 1.5e-45DF, __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -1.5e-45DF, -__FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, 2.9e-45DF, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_TONEAREST, -2.9e-45DF, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 1e-101DF, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-101DF, -0.0}, {__LINE__, FE_TOWARDZERO, 1e-46DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1e-46DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1.401298e-45DL, 0.0}, {__LINE__, FE_TOWARDZERO, -1.401298e-45DL, -0.0}, {__LINE__, FE_TOWARDZERO, 1.401299e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -1.401299e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, 2e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_TOWARDZERO, -2e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-101DF, 0.0}, {__LINE__, FE_DOWNWARD, -1e-101DF, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1e-46DL, 0.0}, {__LINE__, FE_DOWNWARD, -1e-46DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1.401298e-45DL, 0.0}, {__LINE__, FE_DOWNWARD, -1.401298e-45DL, -__FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 1.401299e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -1.401299e-45DL, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, 2e-45DL, __FLT_DENORM_MIN__}, {__LINE__, FE_DOWNWARD, -2e-45DL, -2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, 1e-101DF, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-101DF, -0.0}, {__LINE__, FE_UPWARD, 1e-46DD, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1e-46DD, -0.0}, {__LINE__, FE_UPWARD, 1.401298e-45DD, __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401298e-45DD, -0.0}, {__LINE__, FE_UPWARD, 1.401299e-45DD, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -1.401299e-45DD, -__FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, 2e-45DD, 2 * __FLT_DENORM_MIN__}, {__LINE__, FE_UPWARD, -2e-45DD, -__FLT_DENORM_MIN__} }; static const int d128to128_size = sizeof (d128to128) / sizeof (d128to128[0]); static const int d128to64_size = sizeof (d128to64) / sizeof (d128to64[0]); static const int d128to32_size = sizeof (d128to32) / sizeof (d128to32[0]); static const int d64to64_size = sizeof (d64to64) / sizeof (d64to64[0]); static const int d64to32_size = sizeof (d64to32) / sizeof (d64to32[0]); static const int d32to32_size = sizeof (d32to32) / sizeof (d32to32[0]); int main(void) { int i; for (i=0; i The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ # define __STDC_WANT_DEC_FP__ #endif #include #include #include #define _WANT_DC 1 #include "scaffold.c" /* Pick up the _DC_P(x,y,...) macro. */ typedef struct { int line; _Decimal128 d; const char *expect; } d128_type; static const d128_type d128[] = { {__LINE__, __DEC128_MIN__, "+0,000,000,000,000,000,000,000,000,000,000,001E-6143" }, {__LINE__, __DEC128_MAX__, "+9,999,999,999,999,999,999,999,999,999,999,999E+6111"}, {__LINE__, -__builtin_nand128 (""), "-0,000,000,000,000,000,000,000,000,000,000,000E-6176"}, {__LINE__, __builtin_infd128 (), "+0,000,000,000,000,000,000,000,000,000,000,000E-6176"}, {__LINE__, __DEC128_MIN__, "+0,000,000,000,000,000,000,000,000,000,000,001E-6143"}, {__LINE__, __DEC128_SUBNORMAL_MIN__, "+0,000,000,000,000,000,000,000,000,000,000,001E-6176"}, {__LINE__, 9E70DL, "+0,000,000,000,000,000,000,000,000,000,000,009E+70"}, {__LINE__, 4E84DL, "+0,000,000,000,000,000,000,000,000,000,000,004E+84"}, {__LINE__, 1234567E84DL, "+0,000,000,000,000,000,000,000,000,001,234,567E+84"}, {__LINE__, 1.00DL, "+0,000,000,000,000,000,000,000,000,000,000,100E-2" }, {__LINE__, -8.958607314841774959249800028756976DL, "-8,958,607,314,841,774,959,249,800,028,756,976E-33" }, }; static const int d128s = sizeof (d128) / sizeof (d128[0]); typedef struct { int line; _Decimal64 d; const char *expect; } d64_type; static const d64_type d64[] = { {__LINE__, 1.00DD, "+0,000,000,000,000,100E-2"}, {__LINE__, __DEC64_MIN__, "+0,000,000,000,000,001E-383"}, {__LINE__, __DEC64_MAX__, "+9,999,999,999,999,999E+369"}, {__LINE__, -__builtin_nand64(""), "-0,000,000,000,000,000E-398"}, {__LINE__, __builtin_infd64(), "+0,000,000,000,000,000E-398"}, {__LINE__, 9.999999999999999E369DD, "+9,999,999,999,999,999E+354"}, {__LINE__, 9.999999999999999E370DD, "+9,999,999,999,999,999E+355"}, {__LINE__, 9.999999999999999E384DD, "+9,999,999,999,999,999E+369"}, {__LINE__, __DEC64_MIN__, "+0,000,000,000,000,001E-383"}, {__LINE__, __DEC64_SUBNORMAL_MIN__, "+0,000,000,000,000,001E-398"}, {__LINE__, 1E-398DD, "+0,000,000,000,000,001E-398"}, {__LINE__, 9E370DD, "+0,000,000,000,000,090E+369"}, {__LINE__, 4E384DD, "+4,000,000,000,000,000E+369"}, }; static const int d64s = sizeof (d64) / sizeof (d64[0]); typedef struct { int line; _Decimal32 d; const char *expect; } d32_type; static const d32_type d32[] = { {__LINE__, 1.00DF, "+0,000,100E-2"}, {__LINE__, __DEC32_MIN__, "+0,000,001E-95"}, {__LINE__, __DEC32_MAX__, "+9,999,999E+90"}, {__LINE__, -__builtin_nand32(""), "-0,000,000E-101"}, {__LINE__, __builtin_infd32(), "+0,000,000E-101"}, {__LINE__, __DEC32_MIN__, "+0,000,001E-95"}, {__LINE__, __DEC32_SUBNORMAL_MIN__, "+0,000,001E-101"}, {__LINE__, 9E70DF, "+0,000,009E+70"}, {__LINE__, 4E84DF, "+0,000,004E+84"}, {__LINE__, 1234567E84DF, "+1,234,567E+84"}, }; static const int d32s = sizeof (d32) / sizeof (d32[0]); int main (void) { int i; for (i=0; i The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include /* DEC_NAN definition. */ #include #include #include #define _WANT_VC 1 /* Pick up the _VC_P(x,y,fmt) macro. */ #include "scaffold.c" /* Pick up the _VC_P(x,y,fmt) macro. */ typedef struct { int line; int set; /* Set it to this. */ int expect; /* Result should be this. */ } d_type; static const d_type round_env[] = { {__LINE__, FE_DEC_TONEAREST, FE_DEC_TONEAREST}, {__LINE__, FE_DEC_TOWARDZERO, FE_DEC_TOWARDZERO}, {__LINE__, FE_DEC_UPWARD, FE_DEC_UPWARD}, {__LINE__, FE_DEC_DOWNWARD, FE_DEC_DOWNWARD}, {__LINE__, FE_DEC_TONEARESTFROMZERO, FE_DEC_TONEARESTFROMZERO}, #if !defined(__DECIMAL_BID_FORMAT__) /* These are non-standard and unique to Z/PPC DFU. */ {__LINE__, 5, 5}, /* Non-spec hardware rounding mode. */ {__LINE__, 6, 6}, /* Non-spec hardware rounding mode. */ {__LINE__, 7, 7}, /* Non-spec hardware rounding mode. */ #endif }; static const int round_env_size = sizeof (round_env) / sizeof (round_env[0]); int main (void) { int i; for (i = 0; i < round_env_size; ++i) { int retval; fe_dec_setround (round_env[i].set); retval = fe_dec_getround (); _VC_P (__FILE__, round_env[i].line, round_env[i].expect, retval, "%d"); } _REPORT (); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-fix.c000066400000000000000000000233271504475242000161230ustar00rootroot00000000000000/* Unit test the ti (int128) conversion routines. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include /* DEC_NAN definition. */ #include #include #include #define _DECIMAL_SIZE 32 #define DEC_TYPE _Decimal32 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 64 #define DEC_TYPE _Decimal64 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 128 #define DEC_TYPE _Decimal128 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #include "scaffold.c" #define INT128 __int128 #define UINT128 unsigned __int128 union tidi { INT128 ti; unsigned long long int di[2]; }; #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ # define INT128_MIN ({union tidi d = { .di = {0x8000000000000000LL, 0LL}}; d.ti; }) #else # define INT128_MIN ({union tidi d = { .di = {0x0LL, 0x8000000000000000LL}}; d.ti; }) #endif /* 128b integer lacks printf support. */ #define DECLARE_TESTS(_t,_n) \ struct \ { \ int line; \ _Decimal##_t x; \ char const *e; \ } d##_t##_n[] DECLARE_TESTS(128,) = { {__LINE__, 0.DL, "0"}, {__LINE__, 1.DL, "1"}, {__LINE__, -1.DL, "-1"}, {__LINE__, -1.12DL, "-1"}, {__LINE__, 170141183460469231731687303715884100000.DL, "170141183460469231731687303715884100000"}, {__LINE__, -170141183460469231731687303715884100000.DL, "-170141183460469231731687303715884100000"}, {__LINE__, 170141183460469231731687303715884200000.DL, "170141183460469231731687303715884105727"}, {__LINE__, -170141183460469231731687303715884200000.DL, "−170141183460469231731687303715884105728"}, {__LINE__, -9999999999999999999999999999999999.DL, "-9999999999999999999999999999999999"}, {__LINE__, -1e17DL, "-100000000000000000"}, {__LINE__, 1e17DL, "100000000000000000"}, {__LINE__, 1e20DL, "100000000000000000000"}, {__LINE__, DEC_INFINITY, "170141183460469231731687303715884105727"}, {__LINE__, -DEC_INFINITY, "−170141183460469231731687303715884105728"}, {__LINE__, __builtin_nand128 (""), "−170141183460469231731687303715884105728"}, }; DECLARE_TESTS(128,uns) = { {__LINE__, 0.DL, "0"}, {__LINE__, 1.DL, "1"}, {__LINE__, -1.DL, "0"}, {__LINE__, -.1DL, "0"}, {__LINE__, 340282366920938463463374607431768200000.DL, "340282366920938463463374607431768200000"}, {__LINE__, 340282366920938463463374607431768300000.DL, "340282366920938463463374607431768211455"}, {__LINE__, 1e5DL, "100000"}, {__LINE__, 1e17DL, "100000000000000000"}, {__LINE__, 1e22DL, "10000000000000000000000"}, {__LINE__, -1e17DL, "0"}, {__LINE__, __builtin_nand128 (""), "0"}, {__LINE__, DEC_INFINITY, "340282366920938463463374607431768211455"}, }; DECLARE_TESTS(64,) = { {__LINE__, 0.DD, "0"}, {__LINE__, 1.DD, "1"}, {__LINE__, -1.DD, "-1"}, {__LINE__, -123.DD, "-123"}, {__LINE__, 123.DD, "123"}, {__LINE__, -1.12DD, "-1"}, {__LINE__, -9999999999999999.DD, "-9999999999999999"}, {__LINE__, 170141183460469200000000000000000000000.DD, "170141183460469200000000000000000000000"}, {__LINE__,-170141183460469200000000000000000000000.DD,"-170141183460469200000000000000000000000"}, {__LINE__, 170141183460469300000000000000000000000.DD, "170141183460469231731687303715884105727"}, {__LINE__,-170141183460469300000000000000000000000.DD,"−170141183460469231731687303715884105728"}, {__LINE__, -1e17DD, "-100000000000000000"}, {__LINE__, 1e17DD, "100000000000000000"}, {__LINE__, 1e20DD, "100000000000000000000"}, {__LINE__, DEC_INFINITY, "170141183460469231731687303715884105727"}, {__LINE__, -DEC_INFINITY, "−170141183460469231731687303715884105728"}, {__LINE__, __builtin_nand64(""), "−170141183460469231731687303715884105728"}, }; DECLARE_TESTS(64,uns) = { {__LINE__, 0.DD, "0"}, {__LINE__, 1.DD, "1"}, {__LINE__, -1.DD, "0"}, {__LINE__, -.1DD, "0"}, {__LINE__, 340282366920938400000000000000000000000.DD, "340282366920938400000000000000000000000"}, {__LINE__, 340282366920938500000000000000000000000.DD, "340282366920938463463374607431768211455"}, {__LINE__, 1e5DD, "100000"}, {__LINE__, 1e17DD, "100000000000000000"}, {__LINE__, 1e22DD, "10000000000000000000000"}, {__LINE__, -1e17DD, "0"}, {__LINE__, __builtin_nand64 (""), "0"}, {__LINE__, DEC_INFINITY, "340282366920938463463374607431768211455"}, }; DECLARE_TESTS(32,) = { {__LINE__, 0.DF, "0"}, {__LINE__, 1.DF, "1"}, {__LINE__, -1.DF, "-1"}, {__LINE__, -123.DF, "-123"}, {__LINE__, 123.DF, "123"}, {__LINE__, -1.12DF, "-1"}, {__LINE__, -9999999.DF, "-9999999"}, {__LINE__, 170141100000000000000000000000000000000.DF, "170141100000000000000000000000000000000"}, {__LINE__,-170141100000000000000000000000000000000.DF,"-170141100000000000000000000000000000000"}, {__LINE__, 170141200000000000000000000000000000000.DF, "170141183460469231731687303715884105727"}, {__LINE__,-170141200000000000000000000000000000000.DF,"−170141183460469231731687303715884105728"}, {__LINE__, -1e17DF, "-100000000000000000"}, {__LINE__, 1e17DF, "100000000000000000"}, {__LINE__, 1e20DF, "100000000000000000000"}, {__LINE__, DEC_INFINITY, "170141183460469231731687303715884105727"}, {__LINE__, -DEC_INFINITY, "−170141183460469231731687303715884105728"}, {__LINE__, __builtin_nand32(""), "−170141183460469231731687303715884105728"}, }; DECLARE_TESTS(32,uns) = { {__LINE__, 0.DF, "0"}, {__LINE__, 1.DF, "1"}, {__LINE__, -1.DF, "0"}, {__LINE__, -.1DF, "0"}, {__LINE__, 340282300000000000000000000000000000000.DF, "340282300000000000000000000000000000000"}, {__LINE__, 340282400000000000000000000000000000000.DF, "340282366920938463463374607431768211455"}, {__LINE__, 1e5DF, "100000"}, {__LINE__, 1e17DF, "100000000000000000"}, {__LINE__, 1e22DF, "10000000000000000000000"}, {__LINE__, -1e17DF, "0"}, {__LINE__, __builtin_nand32 (""), "0"}, {__LINE__, DEC_INFINITY, "340282366920938463463374607431768211455"}, }; /* Mediocre stringify routing for all valid td conversions to ti/unsti. */ static char const * stringifyti (INT128 val) { static char s128str[60]; memset (s128str, ' ', sizeof (s128str)); long i = sizeof (s128str) - 2, neg = 0; s128str[sizeof (s128str) - 1] = 0; s128str[sizeof (s128str) - 2] = '0'; if (val == 0) i--; else if(val == INT128_MIN) return "−170141183460469231731687303715884105728"; if (val < 0) { neg = 1; val = -val; } while (val) { INT128 rem = val % (INT128) 10; val /= (INT128) 10; s128str[i--] = '0' + (char) rem; } if (neg) s128str[i--] = '-'; return &s128str[i + 1]; } /* Likewise for unsigned. */ static char const * stringifyunsti (UINT128 val) { static char s128str[60]; memset (s128str, ' ', sizeof (s128str)); long i = sizeof (s128str) - 2; s128str[sizeof (s128str) - 1] = 0; s128str[sizeof (s128str) - 2] = '0'; if (val == 0) i--; while (val) { INT128 rem = val % (INT128) 10; val /= (INT128) 10; s128str[i--] = '0' + (char) rem; } return &s128str[i + 1]; } typedef INT128 ti; typedef UINT128 unsti; #ifndef __DECIMAL_BID_FORMAT__ #define BACKEND(x) __dpd_##x #else #define BACKEND(x) __bid_##x #endif extern ti BACKEND (fixtdti) (_Decimal128); extern ti BACKEND (fixddti) (_Decimal64); extern ti BACKEND (fixsdti) (_Decimal32); extern unsti BACKEND (fixunstdti) (_Decimal128); extern unsti BACKEND (fixunsddti) (_Decimal64); extern unsti BACKEND (fixunssdti) (_Decimal32); // Test the gcc intrinsic, and the libdfp version. #define RUN_TEST_SERIES(_t, _type, _name) \ for (i = 0; i < (int)(sizeof(_t)/sizeof(_t[0])); ++i) \ { \ _type r = _t[i].x; \ r = _t[i].x; \ fprintf (stdout, #_name " (%DDgDL) in: %s:%d\n", \ (_Decimal128) _t[i].x, __FILE__, __LINE__ - 1); \ _SC_P (__FILE__, _t[i].line, _t[i].e, stringify##_type (r)); \ } \ for (i = 0; i < (int)(sizeof(_t)/sizeof(_t[0])); ++i) \ { \ _type r = BACKEND (_name) (_t[i].x); \ fprintf (stdout, #_name " (libdfp) (%DDgDL) in: %s:%d\n", \ (_Decimal128) _t[i].x, __FILE__, __LINE__ - 1); \ _SC_P (__FILE__, _t[i].line, _t[i].e, stringify##_type (r)); \ } int main (void) { int i; RUN_TEST_SERIES (d128, ti, fixtdti); RUN_TEST_SERIES (d128uns, unsti, fixunstdti); RUN_TEST_SERIES (d64, ti, fixddti); RUN_TEST_SERIES (d64uns, unsti, fixunsddti); RUN_TEST_SERIES (d32, ti, fixsdti); RUN_TEST_SERIES (d32uns, unsti, fixunssdti); _REPORT (); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-float.c000066400000000000000000000171161504475242000164410ustar00rootroot00000000000000/* Unit test the ti (int128) conversion routines. Copyright (C) 2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Paul E. Murphy The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include /* DEC_NAN definition. */ #include #include #include #define _DECIMAL_SIZE 32 #define DEC_TYPE _Decimal32 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 64 #define DEC_TYPE _Decimal64 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 128 #define DEC_TYPE _Decimal128 #include #undef _DECIMAL_SIZE #undef DEC_TYPE /* TODO: For now, BID does not have dpd conversions. */ #ifndef __DECIMAL_BID_FORMAT__ #define HAS_TITD 1 #define BACKEND(x) __dpd_##x #else #define BACKEND(x) __bid_##x #endif #define _WANT_VC 1 /* Pick up the _VC_P(x,y,fmt) macro. */ #include "scaffold.c" /* Pick up the _VC_P(x,y,fmt) macro. */ /* We're going to be comparing fields so we need to extract the data. This is a * sneaky way to get around the fact that get_digits_d* isn't exported from * libdfp. */ #ifdef __DECIMAL_BID_FORMAT__ #include "../sysdeps/bid/bid-private.c" #else #include "../sysdeps/dpd/dpd-private.c" #endif #define TEST_STRUCT(SIZE) \ struct \ { \ const char *format; /* Expected value printf format. */ \ int uns; /* Signed or unsigned conversion. */ \ int line; \ char const *x; /* Stringified INT128 input value. */ \ _Decimal##SIZE e; /* Expected result. */ \ } d##SIZE[] TEST_STRUCT(128) = { #if HAS_TITD {"%DDe", 0, __LINE__, "0", 0.DL}, {"%DDe", 0, __LINE__, "1", 1.DL}, {"%DDe", 0, __LINE__, "-1", -1.DL}, {"%DDe", 0, __LINE__, "170141183460469231731687303715884100000", 170141183460469231731687303715884100000.DL}, {"%DDe", 0, __LINE__, "170141183460469231731687303715884100001", 170141183460469231731687303715884100000.DL}, {"%DDe", 0, __LINE__, "-170141183460469231731687303715884100000", -170141183460469231731687303715884100000.DL}, {"%DDe", 0, __LINE__, "-100000000000000000", -1e17DL}, {"%DDe", 0, __LINE__, "100000000000000000", 1e17DL}, /* Unsigned conversions. */ {"%DDe", 1, __LINE__, "340282366920938463463374607431768211455", 340282366920938463463374607431768200000.DL}, {"%DDe", 1, __LINE__, "1000000", 1000000.DL}, {"%DDe", 1, __LINE__, "100000000000000000", 100000000000000000.DL}, {"%DDe", 1, __LINE__, "0", 0.DL}, #endif /* HAS_TI */ }; TEST_STRUCT(64) = { {"%De", 0, __LINE__, "0", 0.DD}, {"%De", 0, __LINE__, "1", 1.DD}, {"%De", 0, __LINE__, "-1", -1.DD}, {"%De", 0, __LINE__, "170141183460469231731687303715884100000", 170141183460469231731687303715884100000.DD}, {"%De", 0, __LINE__, "170141183460469231731687303715884100001", 170141183460469231731687303715884100000.DD}, {"%De", 0, __LINE__, "-170141183460469231731687303715884100000", -170141183460469231731687303715884100000.DD}, {"%De", 0, __LINE__, "-100000000000000000", -1e17DD}, {"%De", 0, __LINE__, "100000000000000000", 1e17DD}, /* Unsigned conversions. */ {"%De", 1, __LINE__, "340282366920938463463374607431768211455", 340282366920938463463374607431768200000.DD}, {"%De", 1, __LINE__, "340282366920938463463374607431768211455", 340282366920938463463374607431768200000.DD}, {"%De", 1, __LINE__, "1000000", 1000000.DD}, {"%De", 1, __LINE__, "100000000000000000", 100000000000000000.DD}, {"%De", 1, __LINE__, "0", 0.DD}, }; TEST_STRUCT(32) = { {"%He", 0, __LINE__, "0", 0.DF}, {"%He", 0, __LINE__, "1", 1.DF}, {"%He", 0, __LINE__, "-1", -1.DF}, {"%He", 0, __LINE__, "170141183460469231731687303715884100000", 170141183460469230000000000000000000000.DF}, {"%He", 0, __LINE__, "170141183460469231731687303715884100001", 170141183460469230000000000000000000000.DF}, {"%He", 0, __LINE__, "-170141183460469231731687303715884100000", -170141183460469231731687303715884100000.DF}, {"%He", 0, __LINE__, "-100000000000000000", -1e17DF}, {"%He", 0, __LINE__, "100000000000000000", 1e17DF}, /* Unsigned conversions. */ {"%He", 1, __LINE__, "340282366920938463463374607431768211455", 340282370000000000000000000000000000000.DF}, {"%He", 1, __LINE__, "340282350000000000000000000000000000001", 340282400000000000000000000000000000000.DF}, {"%He", 1, __LINE__, "340282349999999999999999999999999999999", 340282300000000000000000000000000000000.DF}, {"%He", 1, __LINE__, "1000000", 1000000.DF}, {"%He", 1, __LINE__, "100000000000000000", 100000000000000000.DF}, {"%He", 1, __LINE__, "0", 0.DF}, }; #define INT128 __int128 #define UINT128 unsigned __int128 /* Mediocre string to ti/unsti function. */ static INT128 intifyti (char const *str) { UINT128 val = 0; long neg = 0; if (*str == '-') { neg = 1; str++; } while (*str) { val *= (INT128) 10; val += (*str - '0'); str++; } if (neg) return -((INT128) val); return val; } extern _Decimal32 BACKEND (floattisd) (INT128); extern _Decimal64 BACKEND (floattidd) (INT128); extern _Decimal128 BACKEND (floattitd) (INT128); extern _Decimal32 BACKEND (floatunstisd) (UINT128); extern _Decimal64 BACKEND (floatunstidd) (UINT128); extern _Decimal128 BACKEND (floatunstitd) (UINT128); #define RUN_TESTS(SIZE, SUF) \ for (i = 0; i < (int)(sizeof (d##SIZE) / sizeof (d##SIZE[0])); ++i) \ { \ _Decimal ## SIZE x, x_dfp; \ char const *fmt; \ if (d##SIZE[i].uns) \ { \ fmt = "floatunsti"#SUF" (%s) %s in: %s:%d\n"; \ UINT128 x_ti = intifyti (d##SIZE[i].x); \ x = x_ti; \ x_dfp = BACKEND (floatunsti##SUF) (x_ti); \ } \ else \ { \ fmt = "floatti"#SUF" (%s) %s in: %s:%d\n"; \ INT128 x_ti = intifyti (d##SIZE[i].x); \ x = x_ti; \ x_dfp = BACKEND (floatti##SUF) (x_ti); \ } \ fprintf (stdout, fmt, d##SIZE[i].x, "gcc", __FILE__, __LINE__); \ _VC_P (__FILE__, d##SIZE[i].line, d##SIZE[i].e, x, d##SIZE[i].format); \ fprintf (stdout, fmt, d##SIZE[i].x, "libdfp", __FILE__, __LINE__); \ _VC_P (__FILE__, d##SIZE[i].line, d##SIZE[i].e, x_dfp, d##SIZE[i].format); \ } int main (void) { int i; RUN_TESTS (128, td); RUN_TESTS (64, dd); RUN_TESTS (32, sd); _REPORT (); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-get_digits.c000066400000000000000000000171551504475242000174610ustar00rootroot00000000000000/* Test the internal facility to get_digits_d{32|64|128]. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ 1 #endif #include #include #include #include #include #include "scaffold.c" #include /* We're going to be comparing fields so we need to extract the data. This is a * sneaky way to get around the fact that get_digits_d* isn't exported from * libdfp. */ #ifdef __DECIMAL_BID_FORMAT__ #include "../sysdeps/bid/bid-private.c" #else #include "../sysdeps/dpd/dpd-private.c" #endif #include "decode.h" typedef struct { int line; _Decimal32 d; const char *expect; const char *format; } d32_type; static const d32_type d32[] = { {__LINE__, 0.00000E-101DF, "+0000000e-101", "%Ha"}, {__LINE__, 0e10DF, "+0000000e+10", "%Ha"}, {__LINE__, 0e-6DF, "+0000000e-6", "%Ha"}, {__LINE__, 0.00000E-95DF, "+0000000e-100", "%Ha"}, {__LINE__, 12e-12DF, "+0000012e-12", "%Ha"}, {__LINE__, -659e-9DF, "-0000659e-9", "%Ha"}, {__LINE__, 10221e12DF, "+0010221e+12", "%Ha"}, {__LINE__, 16116736E2DF, "+1611674e+3", "%Ha"}, {__LINE__, 201432679e1DF, "+2014327e+3", "%Ha"}, {__LINE__, 208055501e1DF, "+2080555e+3", "%Ha"}, {__LINE__, 0.0004E-4DF, "+0000004e-8", "%s"}, {__LINE__, 0.0004E-0DF, "+0000004e-4", "%s"}, {__LINE__, 0.0004E-2DF, "+0000004e-6", "%s"}, {__LINE__, 1.0E+2DF, "+0000010e+1", "%s"}, {__LINE__, 0.9999999E-91DF, "+9999999e-98", "%s"}, {__LINE__, 0.9999999E-92DF, "+9999999e-99", "%s"}, {__LINE__, 0.9999999E-93DF, "+9999999e-100", "%s"}, {__LINE__, 0.9999999E-94DF, "+9999999e-101", "%s"}, {__LINE__, 0.9999999E-95DF, "+1000000e-101", "%s"}, {__LINE__, 0.0000010E-95DF, "+0000001e-101", "%s"}, {__LINE__, 0.0000100E-95DF, "+0000010e-101", "%s"}, {__LINE__, 0.0001000E-95DF, "+0000100e-101", "%s"}, {__LINE__, 0.0010000E-95DF, "+0001000e-101", "%s"}, {__LINE__, 0.0100000E-95DF, "+0010000e-101", "%s"}, {__LINE__, 0.1000000E-95DF, "+0100000e-101", "%s"}, {__LINE__, 1.0000000E-95DF, "+1000000e-101", "%s"}, {__LINE__, 10.0000000E-95DF, "+1000000e-100", "%s"}, {__LINE__, 10.0000000E-96DF, "+1000000e-101", "%s"}, }; static const int d32_s = sizeof (d32) / sizeof (d32[0]); typedef struct { int line; _Decimal64 d; const char *expect; const char *format; } d64_type; d64_type d64[] = { {__LINE__, -853894835028358388E+1DD, "-8538948350283584e+3", "%s"}, {__LINE__, 1.0E+2DD, "+0000000000000010e+1", "%s"}, {__LINE__, 123456789.123456E+300DD, "+0123456789123456e+294", "%s"}, {__LINE__, 2.0E-2DD, "+0000000000000020e-3", "%s"}, {__LINE__, -2.0E-2DD, "-0000000000000020e-3", "%s"}, {__LINE__, 0.0000000000000001E-365DD, "+0000000000000001e-381", "%s"}, {__LINE__, 0.0000000000000001E-366DD, "+0000000000000001e-382", "%s"}, {__LINE__, 0.0000000000000001E-367DD, "+0000000000000001e-383", "%s"}, {__LINE__, 0.000000000000001E-368DD, "+0000000000000001e-383", "%s"}, {__LINE__, 0.00000000000001E-369DD, "+0000000000000001e-383", "%s"}, {__LINE__, 0.1E-382DD, "+0000000000000001e-383", "%s"}, {__LINE__, 1.E-383DD, "+0000000000000001e-383", "%s"}, }; static const int d64_s = sizeof (d64) / sizeof (d64[0]); typedef struct { int line; _Decimal128 d; const char *expect; const char *format; } d128_type; d128_type d128[] = { {__LINE__, 17264850929837472839.48234675928374E+271DL, "+1726485092983747283948234675928374e+257", "%s"}, {__LINE__, 9000000000000000001.83273827374E-212DL, "+0000900000000000000000183273827374e-223", "%s"}, {__LINE__, 12000000000000000005.00000002000001E-157DL, "+1200000000000000000500000002000001e-171", "%s"}, {__LINE__, -1000200300040050607008090.01203456E+300DL, "-0100020030004005060700809001203456e+292", "%s"}, {__LINE__, 2537781477129814100906124727369014E-4DL, "+2537781477129814100906124727369014e-4", "%s"}, {__LINE__, -2456651838715207419210335722224950E-42DL, "-2456651838715207419210335722224950e-42", "%s"}, {__LINE__, 31903802797912746463249044.0008815401650E+13DL, "+3190380279791274646324904400088154e+5", "%s"}, {__LINE__, 0.000000000000000329671851945406791615720896491058158258E-16DL, "+3296718519454067916157208964910582e-65", "%s"}, {__LINE__, 1.0E+2DL, "+0000000000000000000000000000000010e+1", "%s"}, {__LINE__, 123456789.123456E+300DL, "+0000000000000000000123456789123456e+294", "%s"}, {__LINE__, 2.0E-2DL, "+0000000000000000000000000000000020e-3", "%s"}, {__LINE__, -2.0E-2DL, "-0000000000000000000000000000000020e-3", "%s"}, {__LINE__, 0.0000000000000001E-365DL, "+0000000000000000000000000000000001e-381", "%s"}, {__LINE__, 0.0000000000000001E-366DL, "+0000000000000000000000000000000001e-382", "%s"}, {__LINE__, 0.0000000000000001E-367DL, "+0000000000000000000000000000000001e-383", "%s"}, }; static const int d128_s = sizeof (d128) / sizeof (d128[0]); static inline void out_digits (char *digits, int is_neg, int exp) { int i; if (is_neg) digits[0] = '-'; else digits[0] = '+'; i = 1; while (digits[i] != '\0') i++; digits[i++] = 'e'; if (exp < 0) digits[i++] = '-'; else digits[i++] = '+'; if (abs (exp) >= 1000) digits[i++] = '0' + ((abs (exp)/1000) % 10); if (abs(exp) >= 100) digits[i++] = '0' + ((abs (exp)/100) % 10); if (abs(exp) >= 10) digits[i++] = '0' + ((abs (exp)/10) % 10); digits[i++] = '0' + (abs (exp) % 10); digits[i] = '\0'; } int main (void) { #define DECIMAL_PRINTF_BUF_SIZE 65 /* ((DECIMAL128_PMAX + 14) * 2) + 1 */ char digits[DECIMAL_PRINTF_BUF_SIZE]; int exp; /* the exponent */ int is_neg; /* is negative */ int is_nan; /* is not a number */ int is_inf; /* is infinite */ int i; for (i=0; i The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include #include #include /* DEC_NAN definition. */ #include #define _DECIMAL_SIZE 32 #define DEC_TYPE _Decimal32 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 64 #define DEC_TYPE _Decimal64 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 128 #define DEC_TYPE _Decimal128 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _WANT_VC 1 /* Pick up the _VC_P(x,y,fmt) macro. */ #include "scaffold.c" /* Pick up the _VC_P(x,y,fmt) macro. */ /* We're going to be comparing fields so we need to extract the data. This is a * sneaky way to get around the fact that get_digits_d* isn't exported from * libdfp. */ #ifdef __DECIMAL_BID_FORMAT__ # include "../sysdeps/bid/bid-private.c" #else # include "../sysdeps/dpd/dpd-private.c" #endif typedef struct{ int line; _Decimal128 x; int e; const char *format; } d128_type; #define RET128_MAX 6111 #define RET128_MIN -6143 #define RET128_MIN_SUB -6176 static const d128_type d128[] = { {__LINE__, __DEC128_MAX__, RET128_MAX, "%d"}, {__LINE__, __DEC128_MIN__, RET128_MIN, "%d"}, {__LINE__, __DEC128_SUBNORMAL_MIN__, RET128_MIN_SUB, "%d"}, {__LINE__, 1E200DL, 200, "%d"}, {__LINE__, 12131E2000DL, 2000, "%d"}, {__LINE__, 1E-200DL, -200, "%d"}, {__LINE__, 12131E-2000DL, -2000, "%d"}, {__LINE__, 9999999999999999999999999999999999E0DL, 0, "%d"}, {__LINE__, 9999999999999999999999999999999999E10DL, 10, "%d"}, {__LINE__, 9999999999999999999999999999999999E100DL, 100, "%d"}, {__LINE__, 9999999999999999999999999999999999E1000DL, 1000, "%d"}, }; static const int d128_len = sizeof (d128) / sizeof (d128[0]); typedef struct { int line; _Decimal64 x; int e; const char *format; } d64_type; #define RET64_MAX 369 #define RET64_MIN -383 #define RET64_MIN_SUB -398 d64_type d64[] = { {__LINE__, __DEC64_MAX__, RET64_MAX, "%d"}, {__LINE__, __DEC64_MIN__, RET64_MIN, "%d"}, {__LINE__, __DEC64_SUBNORMAL_MIN__, RET64_MIN_SUB, "%d"}, {__LINE__, 1E20DD, 20, "%d"}, {__LINE__, 12131E200DD, 200, "%d"}, {__LINE__, 1E-20DD, -20, "%d"}, {__LINE__, 12131E-200DD, -200, "%d"}, {__LINE__, 9999999999999999E0DD, 0, "%d"}, {__LINE__, 9999999999999999E10DD, 10, "%d"}, {__LINE__, 9999999999999999E100DD, 100, "%d"}, }; static const int d64_len = sizeof (d64) / sizeof (d64[0]); typedef struct { int line; _Decimal32 x; int e; const char *format; } d32_type; #define RET32_MAX 90 #define RET32_MIN -95 #define RET32_MIN_SUB -101 d32_type d32[] = { {__LINE__, __DEC32_MAX__, RET32_MAX, "%d"}, {__LINE__, __DEC32_MIN__, RET32_MIN, "%d"}, {__LINE__, __DEC32_SUBNORMAL_MIN__, RET32_MIN_SUB, "%d"}, {__LINE__, 1E2DF, 2, "%d"}, {__LINE__, 12131E20DF, 20, "%d"}, {__LINE__, 1E-2DF, -2, "%d"}, {__LINE__, 12131E-20DF, -20, "%d"}, {__LINE__, 9999999E0DF, 0, "%d"}, {__LINE__, 9999999E10DF, 10, "%d"}, }; static const int d32_len = sizeof (d32) / sizeof (d32[0]); int main (void) { int i; for (i=0; i #include #include #define _WANT_VC 1 #include "scaffold.c" typedef struct { int line; _Decimal128 x; /* Value to test */ int e; /* Result should be this. */ const char *format; /* Value form to printf (%i) */ } id128_type; static id128_type id128[] = { { __LINE__, 1.0DL, 0, "%d" }, { __LINE__, 10.71284590452353602878DL, 1, "%d" }, { __LINE__, 1024.0DL, 3, "%d" }, { __LINE__, -200000.0DL, 5, "%d" }, { __LINE__, 0.0DL, FP_ILOGB0, "%d" }, { __LINE__, DEC_NAN, FP_ILOGBNAN, "%d" }, { __LINE__, DEC_INFINITY, INT_MAX, "%d" }, { __LINE__, -DEC_INFINITY, INT_MIN, "%d" }, }; static const int id128_size = sizeof (id128) / sizeof (id128[0]); typedef struct { int line; _Decimal64 x; /* Value to test */ int e; /* Result should be this. */ const char *format; /* Value form to printf (%i) */ } id64_type; static id64_type id64[] = { { __LINE__, 1.0DL, 0, "%d" }, { __LINE__, 10.7644590452353602878DL, 1, "%d" }, { __LINE__, 1024.0DL, 3, "%d" }, { __LINE__, -200000.0DL, 5, "%d" }, { __LINE__, 0.0DL, FP_ILOGB0, "%d" }, { __LINE__, DEC_NAN, FP_ILOGBNAN, "%d" }, { __LINE__, DEC_INFINITY, INT_MAX, "%d" }, { __LINE__, -DEC_INFINITY, INT_MIN, "%d" }, }; static const int id64_size = sizeof (id64) / sizeof (id64[0]); typedef struct { int line; _Decimal32 x; /* Value to test */ int e; /* Result should be this. */ const char *format; /* Value form to printf (%i) */ } id32_type; static id32_type id32[] = { { __LINE__, 1.0DL, 0, "%d" }, { __LINE__, 10.7324590452353602878DL, 1, "%d" }, { __LINE__, 1024.0DL, 3, "%d" }, { __LINE__, -200000.0DL, 5, "%d" }, { __LINE__, 0.0DL, FP_ILOGB0, "%d" }, { __LINE__, DEC_NAN, FP_ILOGBNAN, "%d" }, { __LINE__, DEC_INFINITY, INT_MAX, "%d" }, { __LINE__, -DEC_INFINITY, INT_MIN, "%d" }, }; static const int id32_size = sizeof (id32) / sizeof (id32[0]); typedef struct { int line; _Decimal128 x; /* Value to test */ long int e; /* Result should be this. */ const char *format; /* Value form to printf (%i) */ } ld128_type; static ld128_type ld128[] = { { __LINE__, 1.0DL, 0, "%ld" }, { __LINE__, 10.71284590452353602878DL, 1, "%ld" }, { __LINE__, 1024.0DL, 3, "%ld" }, { __LINE__, -200000.0DL, 5, "%ld" }, { __LINE__, 0.0DL, FP_LLOGB0, "%ld" }, { __LINE__, DEC_NAN, FP_LLOGBNAN, "%ld" }, { __LINE__, DEC_INFINITY, LONG_MAX, "%ld" }, { __LINE__, -DEC_INFINITY, LONG_MIN, "%ld" }, }; static const int ld128_size = sizeof (ld128) / sizeof (ld128[0]); typedef struct { int line; _Decimal64 x; /* Value to test */ long int e; /* Result should be this. */ const char *format; /* Value form to printf (%i) */ } ld64_type; static ld64_type ld64[] = { { __LINE__, 1.0DL, 0, "%ld" }, { __LINE__, 10.7644590452353602878DL, 1, "%ld" }, { __LINE__, 1024.0DL, 3, "%ld" }, { __LINE__, -200000.0DL, 5, "%ld" }, { __LINE__, 0.0DL, FP_LLOGB0, "%ld" }, { __LINE__, DEC_NAN, FP_LLOGBNAN, "%ld" }, { __LINE__, DEC_INFINITY, LONG_MAX, "%ld" }, { __LINE__, -DEC_INFINITY, LONG_MIN, "%ld" }, }; static const int ld64_size = sizeof (ld64) / sizeof (ld64[0]); typedef struct { int line; _Decimal32 x; /* Value to test */ long int e; /* Result should be this. */ const char *format; /* Value form to printf (%i) */ } ld32_type; static ld32_type ld32[] = { { __LINE__, 1.0DL, 0, "%ld" }, { __LINE__, 10.7324590452353602878DL, 1, "%ld" }, { __LINE__, 1024.0DL, 3, "%ld" }, { __LINE__, -200000.0DL, 5, "%ld" }, { __LINE__, 0.0DL, FP_LLOGB0, "%ld" }, { __LINE__, DEC_NAN, FP_LLOGBNAN, "%ld" }, { __LINE__, DEC_INFINITY, LONG_MAX, "%ld" }, { __LINE__, -DEC_INFINITY, LONG_MIN, "%ld" }, }; static const int ld32_size = sizeof (ld32) / sizeof (ld32[0]); int main (void) { int i; for (i=0; i The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include #include #include #include #define _WANT_VC 1 #include "scaffold.c" #define UNUSED(expr) do { (void)(expr); } while (0) typedef struct { int line; _Decimal128 set; int expect; } d_type; /* Decimal 128 to Binary Double 64. */ static const d_type d128to64[] = { {__LINE__, 0.1DL, FE_INEXACT}, {__LINE__, 0.5DL, FE_INEXACT} }; /* Decimal 128 to Binary Float 32. */ static const d_type d128to32[] = { {__LINE__, 0.1DL, FE_INEXACT}, {__LINE__, 0.5DL, FE_INEXACT} }; int /* Disable optmizations or else GCC will optimize cast to a const and will lost the raised inexact flag. */ __attribute__((optimize("O0"))) main(void) { double retd; float retf; UNUSED(retd); /* Avoid unused warning. */ UNUSED(retf); int ex; /* 128-to-64 */ feclearexcept(FE_INEXACT); retd = (double) d128to64[0].set; ex = fetestexcept (FE_INEXACT); _VC_P (__FILE__, d128to64[0].line, d128to64[0].expect, ex, "%d"); feclearexcept(FE_INEXACT); feraiseexcept (FE_INEXACT); retd = (double) d128to64[1].set; ex = fetestexcept (FE_INEXACT); _VC_P (__FILE__, d128to64[1].line, d128to64[1].expect, ex, "%d"); /* 128-to-32 */ feclearexcept(FE_INEXACT); retf = (float) d128to32[0].set; ex = fetestexcept (FE_INEXACT); _VC_P (__FILE__, d128to32[0].line, d128to32[0].expect, ex, "%d"); feclearexcept(FE_INEXACT); feraiseexcept (FE_INEXACT); retf = (float) d128to32[1].set; ex = fetestexcept (FE_INEXACT); _VC_P (__FILE__, d128to32[1].line, d128to32[1].expect, ex, "%d"); _REPORT(); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-istream.cpp000066400000000000000000000074241504475242000173410ustar00rootroot00000000000000/* Test istream operator in cpp compat header . Copyright (C) 2012-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif /* This is a CPP compatibility testcase. Pick up the _Decimal[32|64|128] * definitions. */ #include #include #include /* For cout support. */ #include #include using namespace std; using namespace std::decimal; /* Pick up the _OSC(x,y,tmp,fmt) macro. */ #define _WANT_ISC 1 #include "scaffold.c" /* Inspired by GLIBC stdio-common/tfformat.c */ typedef struct{ int line; decimal32 expect; const char *d; const char *fmt; decimal32 tmp; } d32_type; d32_type istream_d32s[] = { {__LINE__, 0.0000006E-90DF, "6e-97", "%Ha", -1.0DF}, {__LINE__, 0.0000006E-90DF, "6E-97", "%Ha", -1.0DF }, /* Test where specified precision '10' exceeds __DEC32_MANT_DIG__. * This should reset precision to __DEC32_MANT_DIG__. */ {__LINE__, 0.6666666666E-90DF, "6.666667E-91", "%Ha", -1.0DF }, {0,0,0,0,0} }; typedef struct{ int line; decimal64 expect; const char *d; const char *fmt; decimal64 tmp; } d64_type; d64_type istream_d64s[] = { {__LINE__, -9.999E-3DD, "-0.009999", "%Da", -1.0DD}, {__LINE__, -9.999E-3DD, "-9.999000e-03", "%Da", -1.0DD}, {__LINE__, -9.999E-3DD, "-9.999E-03", "%Da", -1.0DD}, {__LINE__, -9.999E-3DD, "-0.009999", "%Da", -1.0DD}, {__LINE__, __builtin_infd64(), "inf", "%Da", -1.0DD}, {__LINE__, __builtin_infd64(), "INF", "%Da", -1.0DD}, {__LINE__, 4E384DD, "4.0E384", "%Da", -1.0DD}, /* You can't value compare nan to nan. */ /* {__LINE__, (0.0DD * __builtin_infd64()), "NAN", "%Da", -1.0DD}, */ /* You can't value compare nan to nan. */ /* {__LINE__, (0.0DD * __builtin_infd64()), "nan", "%Da", -1.0DD}, */ {0,0,0,0,0} }; typedef struct{ int line; decimal128 expect; const char *d; const char *fmt; decimal128 tmp; } d128_type; d128_type istream_d128s[] = { {__LINE__, -1234.57DL, "-1234.57", "%DDa", -1.0DL}, {__LINE__, -1234.57DL, "-1234.57", "%DDa", 0.0DL}, {__LINE__, -1234.57DL, "-1234.57000", "%DDa", -1.0DL}, {__LINE__, -1234.5679DL, "-1234.5679", "%DDa", -1.0DL}, {__LINE__, -12345678912345678.9123455678DL, "-12345678912345678.9123455678","%DDa", -1.0DL}, {0,0,0,0,0} }; int main(void) { d32_type *d32ptr; d64_type *d64ptr; d128_type *d128ptr; for (d32ptr = istream_d32s; d32ptr->line; d32ptr++) { _ISC_P(__FILE__,d32ptr->line, d32ptr->expect,d32ptr->d,d32ptr->tmp,d32ptr->fmt); } for (d64ptr = istream_d64s; d64ptr->line; d64ptr++) { _ISC_P(__FILE__,d64ptr->line, d64ptr->expect,d64ptr->d,d64ptr->tmp,d64ptr->fmt); } for (d128ptr = istream_d128s; d128ptr->line; d128ptr++) { _ISC_P(__FILE__,d128ptr->line, d128ptr->expect,d128ptr->d,d128ptr->tmp, d128ptr->fmt); } _REPORT(); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-left_justify.c000066400000000000000000000214711504475242000200420ustar00rootroot00000000000000/* Unit test the internal left_justifyd[32|64|128]() functions. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include /* DEC_NAN definition. */ #include #include #include #include #define _DECIMAL_SIZE 32 #define DEC_TYPE _Decimal32 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 64 #define DEC_TYPE _Decimal64 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 128 #define DEC_TYPE _Decimal128 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #include "scaffold.c" /* Pick up the _SC_P(x,y,fmt) macro. */ /* We're going to be comparing fields so we need to extract the data. This is a * sneaky way to get around the fact that get_digits_d* isn't exported from * libdfp. */ #ifdef __DECIMAL_BID_FORMAT__ # include "sysdeps/bid/bid-private.c" #else # include "sysdeps/dpd/dpd-private.c" #endif typedef struct { int line; _Decimal32 d; const char *expect; const char *format; } d32_type; static const d32_type d32[] = { {__LINE__, 0.0004E-4DF, "+4000000e-14", "%s"}, {__LINE__, 0.0004E-0DF, "+4000000e-10", "%s"}, {__LINE__, 0.0004E-2DF, "+4000000e-12", "%s"}, {__LINE__, 1.0E+2DF, "+1000000e-4", "%s"}, {__LINE__, 0.9999999E-91DF, "+9999999e-98", "%s"}, {__LINE__, 0.9999999E-92DF, "+9999999e-99", "%s"}, {__LINE__, 0.9999999E-93DF, "+9999999e-100", "%s"}, {__LINE__, 0.9999999E-94DF, "+9999999e-101", "%s"}, /* Notice 1000000e-101 is the answer. */ {__LINE__, 0.9999999E-95DF, "+1000000e-101", "%s"}, {__LINE__, 0.0000010E-95DF, "+0000001e-101", "%s"}, {__LINE__, 0.0000100E-95DF, "+0000010e-101", "%s"}, {__LINE__, 0.0001000E-95DF, "+0000100e-101", "%s"}, {__LINE__, 0.0010000E-95DF, "+0001000e-101", "%s"}, {__LINE__, 0.0100000E-95DF, "+0010000e-101", "%s"}, {__LINE__, 0.1000000E-95DF, "+0100000e-101", "%s"}, {__LINE__, 1E-95DF, "+1000000e-101", "%s"}, {__LINE__, 0.000001E-95DF, "+0000001e-101", "%s"}, {__LINE__, 0.000010E-96DF, "+0000001e-101", "%s"}, {__LINE__, 0.001000E-98DF, "+0000001e-101", "%s"}, {__LINE__, 0.010000E-99DF, "+0000001e-101", "%s"}, {__LINE__, 0.100000E-100DF, "+0000001e-101", "%s"}, {__LINE__, 1.0000000E-95DF, "+1000000e-101", "%s"}, {__LINE__, 10.0000000E-95DF, "+1000000e-100", "%s"}, /* Notice 1000000e-101 is the answer. */ {__LINE__, 10.0000000E-96DF,"+1000000e-101", "%s"}, /* __get_digits_d64 returns 0 for a NaN data. */ {__LINE__, NAN, "+0000000e-101", "%s"}, }; static const int d32_s = sizeof (d32) / sizeof (d32[0]); /* Inspired by GLIBC stdio-common/tfformat.c */ typedef struct{ int line; _Decimal64 d; const char *expect; const char *format; } d64_type; static const d64_type d64[] = { {__LINE__, 1.0E+2DD, "+1000000000000000e-13", "%s"}, {__LINE__, 123456789.123456E+300DD, "+1234567891234560e+293", "%s"}, {__LINE__, 2.0E-2DD, "+2000000000000000e-17", "%s"}, {__LINE__, -2.0E-2DD, "-2000000000000000e-17", "%s"}, {__LINE__, 0.0000000000000001E-365DD, "+1000000000000000e-396", "%s"}, {__LINE__, 0.0000000000000001E-366DD, "+1000000000000000e-397", "%s"}, /* Left justify is limited by the minimum exponent, this is why 1 is not the first mantissa number. */ {__LINE__, 0.0000100E-383DD, "+0000010000000000e-398", "%s"}, {__LINE__, 0.0001000E-383DD, "+0000100000000000e-398", "%s"}, {__LINE__, 0.0010000E-383DD, "+0001000000000000e-398", "%s"}, {__LINE__, 0.0100000E-383DD, "+0010000000000000e-398", "%s"}, /* The minimum exponent we can left-justify if the mantissa is full. */ {__LINE__, 0.0000000000000001E-367DD, "+1000000000000000e-398", "%s"}, /* Notice the 15 digit mantissa. */ {__LINE__, 0.000000000000001E-368DD, "+1000000000000000e-398", "%s"}, /* Notice the 14 digit mantissa. */ {__LINE__, 0.00000000000001E-369DD, "+1000000000000000e-398", "%s"}, /* Notice the 1 digit mantissa. */ {__LINE__, 0.1E-382DD, "+1000000000000000e-398", "%s"}, /* Notice the 1 digit mantissa. */ {__LINE__, 1.E-383DD, "+1000000000000000e-398", "%s"}, /* Subnormal min test. */ {__LINE__, 0.000000000000001E-383DD, "+0000000000000001e-398", "%s"}, /* __get_digits_d64 returns 0 for a NaN data. */ {__LINE__, NAN, "+0000000000000000e-398", "%s"}, }; static const int d64_s = sizeof (d64) / sizeof (d64[0]); typedef struct{ int line; _Decimal128 d; const char *expect; const char *format; } d128_type; static const d128_type d128[] = { {__LINE__, 1.0E+2DL, "+1000000000000000000000000000000000e-31", "%s"}, {__LINE__, 123456789.123456E+300DL, "+1234567891234560000000000000000000e+275", "%s"}, {__LINE__, 2.0E-2DL, "+2000000000000000000000000000000000e-35", "%s"}, {__LINE__, -2.0E-2DL, "-2000000000000000000000000000000000e-35", "%s"}, {__LINE__, 0.0000000000000001E-365DL, "+1000000000000000000000000000000000e-414", "%s"}, {__LINE__, 0.0000000000000001E-366DL, "+1000000000000000000000000000000000e-415", "%s"}, {__LINE__, 0.0000000000000001E-367DL, "+1000000000000000000000000000000000e-416", "%s"}, {__LINE__, 1E-6143DL, "+1000000000000000000000000000000000e-6176", "%s"}, {__LINE__, 0.0000000000000001E-6127DL, "+1000000000000000000000000000000000e-6176", "%s"}, {__LINE__, 0.0000000000000001E-6140DL, "+0000000000000100000000000000000000e-6176", "%s"}, {__LINE__, 0.0000000000000100E-6143DL, "+0000000000000010000000000000000000e-6176", "%s"}, {__LINE__, 0.0000000000001000E-6143DL, "+0000000000000100000000000000000000e-6176", "%s"}, {__LINE__, 0.0000000000000001E-6143DL, "+0000000000000000100000000000000000e-6176", "%s"}, {__LINE__, 0.0000000000000001E-6160DL, "+0000000000000000000000000000000001e-6176", "%s"}, /* Subnormal min test. */ {__LINE__, 0.000000000000000000000000000000001E-6143DL, "+0000000000000000000000000000000001e-6176", "%s"}, /* __get_digits_d128 returns 0 for a NaN data. */ {__LINE__, NAN, "+0000000000000000000000000000000000e-6176", "%s"}, }; static const int d128_s = sizeof (d128) / sizeof (d128[0]); static inline void out_digits (char *digits, int is_neg, int exp) { int i; if (is_neg) digits[0] = '-'; else digits[0] = '+'; i = 1; while (digits[i] != '\0') i++; digits[i++] = 'e'; if (exp < 0) digits[i++] = '-'; else digits[i++] = '+'; if (abs (exp) >= 1000) digits[i++] = '0' + ((abs (exp)/1000) % 10); if (abs(exp) >= 100) digits[i++] = '0' + ((abs (exp)/100) % 10); if (abs(exp) >= 10) digits[i++] = '0' + ((abs (exp)/10) % 10); digits[i++] = '0' + (abs (exp) % 10); digits[i] = '\0'; } int main (void) { #define DECIMAL_PRINTF_BUF_SIZE 65 /* ((DECIMAL128_PMAX + 14) * 2) + 1 */ char digits[DECIMAL_PRINTF_BUF_SIZE]; int exp; /* the exponent */ int is_neg; /* is negative */ int is_nan; /* is not a number */ int is_inf; /* is infinite */ int i; for (i=0; i #include #include #include /* Hacky, but there isn't otherwise a good test today. Note presumably unique integer types are used to verify function selection, otherwise you will find most compilers get upset when mixing _DecimalN and _FloatN arithmetic. */ extern uint8_t __isnanf_test(float); #define __isnanf __isnanf_test extern uint16_t __isnan_test(double); #define __isnan __isnan_test extern uint32_t __isnanl_test(long double); #define __isnanl __isnanl_test extern int16_t __isnand32_test(_Decimal32); #define __isnand32 __isnand32_test extern int32_t __isnand64_test(_Decimal64); #define __isnand64 __isnand64_test extern int64_t __isnand128_test(_Decimal128); #define __isnand128 __isnand128_test extern uint8_t __isfinitef_test(float); #define __isfinitef __isfinitef_test extern uint16_t __isfinite_test(double); #define __isfinite __isfinite_test extern uint32_t __isfinitel_test(long double); #define __isfinitel __isfinitel_test extern int16_t __isfinited32_test(_Decimal32); #define __isfinited32 __isfinited32_test extern int32_t __isfinited64_test(_Decimal64); #define __isfinited64 __isfinited64_test extern int64_t __isfinited128_test(_Decimal128); #define __isfinited128 __isfinited128_test extern uint8_t __signbitf_test(float); #define __signbitf __signbitf_test extern uint16_t __signbit_test(double); #define __signbit __signbit_test extern uint32_t __signbitl_test(long double); #define __signbitl __signbitl_test extern int16_t __signbitd32_test(_Decimal32); #define __signbitd32 __signbitd32_test extern int32_t __signbitd64_test(_Decimal64); #define __signbitd64 __signbitd64_test extern int64_t __signbitd128_test(_Decimal128); #define __signbitd128 __signbitd128_test extern uint8_t __fpclassifyf_test(float); #define __fpclassifyf __fpclassifyf_test extern uint16_t __fpclassify_test(double); #define __fpclassify __fpclassify_test extern uint32_t __fpclassifyl_test(long double); #define __fpclassifyl __fpclassifyl_test extern int16_t __fpclassifyd32_test(_Decimal32); #define __fpclassifyd32 __fpclassifyd32_test extern int32_t __fpclassifyd64_test(_Decimal64); #define __fpclassifyd64 __fpclassifyd64_test extern int64_t __fpclassifyd128_test(_Decimal128); #define __fpclassifyd128 __fpclassifyd128_test extern uint8_t __isinff_test(float); #define __isinff __isinff_test extern uint16_t __isinf_test(double); #define __isinf __isinf_test extern uint32_t __isinfl_test(long double); #define __isinfl __isinfl_test extern int16_t __isinfd32_test(_Decimal32); #define __isinfd32 __isinfd32_test extern int32_t __isinfd64_test(_Decimal64); #define __isinfd64 __isinfd64_test extern int64_t __isinfd128_test(_Decimal128); #define __isinfd128 __isinfd128_test extern uint8_t __issignalingf_test(float); #define __issignalingf __issignalingf_test extern uint16_t __issignaling_test(double); #define __issignaling __issignaling_test extern uint32_t __issignalingl_test(long double); #define __issignalingl __issignalingl_test extern int16_t __issignalingd32_test(_Decimal32); #define __issignalingd32 __issignalingd32_test extern int32_t __issignalingd64_test(_Decimal64); #define __issignalingd64 __issignalingd64_test extern int64_t __issignalingd128_test(_Decimal128); #define __issignalingd128 __issignalingd128_test #define typenum(x) (_Generic(x, int8_t : 1, int16_t : 2, int32_t : 3, uint8_t : 4, uint16_t : 5, uint32_t : 6, default: 0 )) #define test(macro,val,__type) \ type = typenum(macro(val)); \ etype = typenum((__type)0); \ if (type != typenum((__type)0)) \ { printf( "Failed: " #macro " (" #val ") not typed as " #__type " (%d != %d)\n", type, etype); status++; } #define do_test(macro) \ test (macro, 2.0f, float); \ test (macro, 2.0, double); \ test (macro, 2.0l, long double); \ test (macro, 2.0D, _Decimal32); \ test (macro, 2.0DD, _Decimal64); \ test (macro, 2.0DL, _Decimal128); int main(int a, char ** v) { #if __GNUC__ > 4 || ((__GNUC__ == 4 ) && (__GNUC_MINOR > 8)) int status = 0; int type; int etype; (void) a; (void) v; do_test (fpclassify); do_test (signbit); do_test (isfinite); /* do_test (isnormal); The macro is really a test of fpclassify today */ do_test (isinf); do_test (isnan); do_test (issignaling); return status ? EXIT_FAILURE : EXIT_SUCCESS; #else fprintf (stderr, "This test requires C11 _Generic (aka >= GCC 4.9)\n"); return EXIT_SUCCESS; #endif } libdfp-1.0.17/tests/test-numdigits.c000066400000000000000000000142171504475242000173360ustar00rootroot00000000000000/* Unit test the internal numdigitsd[32|64|128]() functions. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include /* DEC_NAN definition. */ #include #include #include #define _DECIMAL_SIZE 32 #define DEC_TYPE _Decimal32 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 64 #define DEC_TYPE _Decimal64 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 128 #define DEC_TYPE _Decimal128 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _WANT_VC 1 /* Pick up the _VC_P(x,y,fmt) macro. */ #include "scaffold.c" /* Pick up the _VC_P(x,y,fmt) macro. */ /* We're going to be comparing fields so we need to extract the data. This is a * sneaky way to get around the fact that get_digits_d* isn't exported from * libdfp. */ #ifdef __DECIMAL_BID_FORMAT__ # include "../sysdeps/bid/bid-private.c" #else # include "../sysdeps/dpd/dpd-private.c" #endif typedef struct { int line; _Decimal128 x; /* Value to test */ int e; /* Result should be this. */ const char *format; /* printf %d */ } d128_type; static d128_type d128[] = { {__LINE__, 0.02E-2DL, 1, "%d"}, {__LINE__, 0.0200E-2DL, 3, "%d"}, {__LINE__, 1.0E-2DL, 2, "%d"}, {__LINE__, 0.0000345E-2DL, 3, "%d"}, {__LINE__, 0.0000345E-10DL, 3, "%d"}, {__LINE__, 123456.0E-2DL, 7, "%d"}, {__LINE__, 123456.000E-2DL, 9, "%d"}, {__LINE__, 123456.000E-4DL, 9, "%d"}, {__LINE__, 123456.000E-6DL, 9, "%d"}, {__LINE__, 123456.00000000000000E-18DL, 20, "%d"}, {__LINE__, 123.456E-6DL, 6, "%d"}, }; static int d128_s = sizeof (d128) / sizeof (d128[0]); typedef struct{ int line; _Decimal64 x; /* Value to test */ int e; /* Result should be this. */ const char *format; /* printf %d */ } d64_type; static d64_type d64[] = { {__LINE__, 0.02E-2DD, 1, "%d"}, {__LINE__, 0.0200E-2DD, 3, "%d"}, {__LINE__, 1.0E-2DD, 2, "%d"}, {__LINE__, 0.0000345E-2DD, 3, "%d"}, {__LINE__, 0.0000345E-10DD, 3, "%d"}, {__LINE__, 123456.0E-2DD, 7, "%d"}, {__LINE__, 123456.000E-2DD, 9, "%d"}, {__LINE__, 123456.000E-4DD, 9, "%d"}, {__LINE__, 123456.000E-6DD, 9, "%d"}, /* Can't exceed __DEC64_MANT_DIG__. This test has 17 digits but the * compiler will truncate it (or round) before it's passed */ {__LINE__, 9.9999999999999999E300DD, 16, "%d"}, /* There was a known bug with any value where the normalized exponent * exceeded 369. This caused __DEC64_MAX__ to return incorrect results. */ {__LINE__, __DEC64_MAX__, 16, "%d"}, /* The normalized exponent is '369' so the right justified encoding has two * digits, '90', in the mantissa. */ {__LINE__, 9E370DD, 2, "%d"}, /* Fails the same way: the absolute value of the exponent exceeds 369. */ {__LINE__, __DEC64_MIN__, 1, "%d"}, {__LINE__, 1E-398DD, 1, "%d"}, /* 0.000000000000001E-383DD */ {__LINE__, __DEC64_SUBNORMAL_MIN__, 1, "%d"}, }; static int d64_s = sizeof (d64) / sizeof (d64[0]); typedef struct{ int line; _Decimal32 x; /* Value to test */ int e; /* Result should be this. */ const char *format; /* printf %d */ } d32_type; d32_type d32[] = { {__LINE__, 0.02E-2DF, 1, "%d"}, {__LINE__, 0.0200E-2DF, 3, "%d"}, {__LINE__, 1.0E-2DF, 2, "%d"}, {__LINE__, 0.0000345E-2DF, 3, "%d"}, {__LINE__, 0.0000345E-10DF, 3, "%d"}, {__LINE__, 123456.0E-2DF, 7, "%d"}, {__LINE__, 123456.000E-2DF, 7, "%d"}, /* can't exceed __DEC32_MANT_DIG__ */ {__LINE__, 123456.000E-4DF, 7, "%d"}, /* can't exceed __DEC32_MANT_DIG__ */ {__LINE__, 123456.000E-6DF, 7, "%d"}, /* can't exceed __DEC32_MANT_DIG__ */ /* can't exceed __DEC32_MANT_DIG__ */ {__LINE__, 123456.00000000000000E-18DD, 7, "%d"}, /* Problem numbers. These should all return '1'. At some point they were * returning '0' for soft-dfp and '1' for hard-dfp. */ {__LINE__, 0.00000E-101DF, 1, "%d"}, {__LINE__, 0.00000E-97DF, 1, "%d"}, {__LINE__, 0.00000E-96DF, 1, "%d"}, {__LINE__, 0.00000E-95DF, 1, "%d"}, {__LINE__, 0e10DF, 1, "%d"}, {__LINE__, 0.0e10DF, 1, "%d"}, {__LINE__, 0.0e-09DF, 1, "%d"}, {__LINE__, 0e-6DF,1, "%d"}, {__LINE__, 0e-7DF, 1, "%d"}, {__LINE__, 0.e-10DF, 1, "%d"}, {__LINE__, 0.e-10DF, 1, "%d"}, {__LINE__, 0.e-10DF, 1, "%d"}, {__LINE__, 0e2DF, 1, "%d"}, {__LINE__, 0.0e2DF, 1, "%d"}, {__LINE__, 0.0e10DF, 1, "%d"}, }; static int d32_s = sizeof (d32) / sizeof (d32[0]); int main (void) { int i; for (i=0; i. Copyright (C) 2012-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif /* This is a CPP compatibility testcase. Pick up the _Decimal[32|64|128] * definitions. */ #include #include #include /* For cout support. */ #include using namespace std; using namespace std::decimal; /* Pick up the _OSC(x,y,precision,upper,spec) macro. */ #define _WANT_OSC 1 #include "scaffold.c" /* Inspired by GLIBC stdio-common/tfformat.c */ typedef struct{ int line; decimal32 d; const char *expect; int precision; /* -1 means unspecified. */ char upper; /* l or u */ char spec; /* a, e, f, g */ } d32_type; /* The g/G conv spec used to be provided separate from the others so there was a separate test program. */ d32_type ostream_d32s[] = { {__LINE__, 0.0000006E-90DF, "6e-97", -1, 'l', 'g' }, {__LINE__, 0.0000006E-90DF, "6E-97", -1, 'u', 'g' }, /* Test where specified precision '10' exceeds __DEC32_MANT_DIG__. * This should reset precision to __DEC32_MANT_DIG__. */ {__LINE__, 0.6666666666E-90DF, "6.666667E-91", 10, 'u', 'g' }, {__LINE__, 0.6666666666E-90DF, "6.666667e-91", 10, 'l', 'g' }, {0,0,0,0,0,0} }; typedef struct{ int line; decimal64 d; const char *expect; int precision; /* -1 means unspecified. */ char upper; /* l or u */ char spec; /* a, e, f */ } d64_type; d64_type ostream_d64s[] = { {__LINE__, -9.999E-3DD, "-0.009999", -1, 'l', 'g' }, {__LINE__, -9.999E-3DD, "-0.009999", -1, 'u', 'g' }, {__LINE__, -9.999992E-3DD, "-0.00999999", -1, 'l', 'g' }, {__LINE__, __builtin_infd64(), "inf", -1, 'l', 'g' }, {__LINE__, __builtin_infd64(), "INF", -1, 'u', 'g' }, {__LINE__, (0.0DD * __builtin_infd64()), "NAN", -1, 'u', 'g' }, {__LINE__, (0.0DD * __builtin_infd64()), "nan", -1, 'l', 'g' }, {0,0,0,0,0,0} }; typedef struct{ int line; decimal128 d; const char *expect; int precision; /* -1 means unspecified. */ char upper; /* l or u */ char spec; /* a, e, f */ } d128_type; d128_type ostream_d128s[] = { /* Known bug in printf (not truncating). */ {__LINE__, -1234.56789123456789123455678DL, "-1234.57", -1, 'l', 'g' }, /* Known bug in printf (not truncating). */ {__LINE__, -1234.56789123456789123455678DL, "-1234.57", 6, 'l', 'g' }, /* Known bug in printf (not truncating). */ {__LINE__, -1234.56789123456789123455678DL, "-1234.5679", 8, 'l', 'g' }, {__LINE__, -12345678912345678.9123455678DL, "-1.234567891E+16", 10, 'u', 'g' }, {__LINE__, -12345678912345678.9123455678DL, "-1.234567891e+16", 10, 'l', 'g' }, {0,0,0,0,0,0} }; int main(void) { d32_type *d32ptr; d64_type *d64ptr; d128_type *d128ptr; for (d32ptr = ostream_d32s; d32ptr->line; d32ptr++) { _OSC_P(__FILE__,d32ptr->line, d32ptr->expect,d32ptr->d,d32ptr->precision,d32ptr->upper,d32ptr->spec); } for (d64ptr = ostream_d64s; d64ptr->line; d64ptr++) { _OSC_P(__FILE__,d64ptr->line, d64ptr->expect,d64ptr->d,d64ptr->precision,d64ptr->upper,d64ptr->spec); } for (d128ptr = ostream_d128s; d128ptr->line; d128ptr++) { _OSC_P(__FILE__,d128ptr->line, d128ptr->expect,d128ptr->d,d128ptr->precision,d128ptr->upper,d128ptr->spec); } _REPORT(); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-ostream.cpp000066400000000000000000000112621504475242000173420ustar00rootroot00000000000000/* Test ostream operator in cpp compat header . Copyright (C) 2011-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif /* This is a CPP compatibility testcase. Pick up the _Decimal[32|64|128] * definitions. */ #include #include #include /* For cout support. */ #include using namespace std; using namespace std::decimal; /* Pick up the _OSC(x,y,precision,upper,spec) macro. */ #define _WANT_OSC 1 #include "scaffold.c" /* Inspired by GLIBC stdio-common/tfformat.c */ typedef struct{ int line; decimal32 d; const char *expect; int precision; /* -1 means unspecified. */ char upper; /* l or u */ char spec; /* a, e, f */ } d32_type; d32_type ostream_d32s[] = { {__LINE__, 0.0000006E-90DF, "6e-97", -1, 'l', 'a' }, {__LINE__, 0.0000006E-90DF, "6E-97", -1, 'u', 'a' }, /* Test where specified precision '10' exceeds __DEC32_MANT_DIG__. * This should reset precision to __DEC32_MANT_DIG__. */ {__LINE__, 0.6666666666E-90DF, "6.666667E-91", 10, 'u', 'a' }, {0,0,0,0,0,0} }; typedef struct{ int line; decimal64 d; const char *expect; int precision; /* -1 means unspecified. */ char upper; /* l or u */ char spec; /* a, e, f */ } d64_type; d64_type ostream_d64s[] = { {__LINE__, -9.999E-3DD, "-0.009999", -1, 'l', 'f' }, {__LINE__, -9.999E-3DD, "-9.999000e-03", -1, 'l', 'e' }, {__LINE__, -9.999E-3DD, "-9.999E-03", 3, 'u', 'e' }, {__LINE__, -9.999E-3DD, "-0.009999", -1, 'l', 'a' }, {__LINE__, __builtin_infd64(), "inf", -1, 'l', 'a' }, {__LINE__, __builtin_infd64(), "INF", -1, 'u', 'a' }, {__LINE__, (0.0DD * __builtin_infd64()), "NAN", -1, 'u', 'a' }, {__LINE__, (0.0DD * __builtin_infd64()), "nan", -1, 'l', 'a' }, {__LINE__, -(0.0DD * __builtin_infd64()), "-NAN", -1, 'u', 'a' }, {__LINE__, -(0.0DD * __builtin_infd64()), "-nan", -1, 'l', 'a' }, /* Due to the lack of direction in the C++ DFP TR there is no indication that a/A conv specifiers should accept precision. */ {__LINE__, 4.000000000000000e+384DD, "4.000000000000000e+384", -1, 'l', 'a' }, {__LINE__, 4.000000000000000e+384DD, "4.000000000000000e+384", 7, 'l', 'a' }, {__LINE__, 4.000000000000000e+384DD, "4.000000000000000e+384", 6, 'l', 'a' }, {__LINE__, 4.000000000000000e+384DD, "4.000000000000000e+384", 19, 'l', 'a' }, {0,0,0,0,0,0} }; typedef struct{ int line; decimal128 d; const char *expect; int precision; /* -1 means unspecified. */ char upper; /* l or u */ char spec; /* a, e, f */ } d128_type; d128_type ostream_d128s[] = { {__LINE__, -1234.56789123456789123455678DL, "-1234.56789123456789123455678", -1, 'l', 'a' }, {__LINE__, -1234.56789123456789123455678DL, "-1234.56789123456789123455678", 8, 'l', 'a' }, {__LINE__, -12345678912345678.9123455678DL, "-12345678912345678.9123455678", 10, 'u', 'f' }, {__LINE__, (0.0DL * __builtin_infd128()), "NAN", -1, 'u', 'a' }, {__LINE__, (0.0DL * __builtin_infd128()), "nan", -1, 'l', 'a' }, {__LINE__, -(0.0DL * __builtin_infd128()), "-NAN", -1, 'u', 'a' }, {__LINE__, -(0.0DL * __builtin_infd128()), "-nan", -1, 'l', 'a' }, {0,0,0,0,0,0} }; int main(void) { d32_type *d32ptr; d64_type *d64ptr; d128_type *d128ptr; for (d32ptr = ostream_d32s; d32ptr->line; d32ptr++) { _OSC_P(__FILE__,d32ptr->line, d32ptr->expect,d32ptr->d,d32ptr->precision,d32ptr->upper,d32ptr->spec); } for (d64ptr = ostream_d64s; d64ptr->line; d64ptr++) { _OSC_P(__FILE__,d64ptr->line, d64ptr->expect,d64ptr->d,d64ptr->precision,d64ptr->upper,d64ptr->spec); } for (d128ptr = ostream_d128s; d128ptr->line; d128ptr++) { _OSC_P(__FILE__,d128ptr->line, d128ptr->expect,d128ptr->d,d128ptr->precision,d128ptr->upper,d128ptr->spec); } _REPORT(); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-printf.c000066400000000000000000000753611504475242000166440ustar00rootroot00000000000000/* Test printf_dfp facility. Copyright (C) 2009-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ 1 #endif #include #include #include #include /* This should pick up the libdfp wchar in dfp/wchar.h. */ #include #define _WANT_PC 1 /* Pick up the _PC(x,y,...) macro. */ #include "scaffold.c" #include "decode.h" /* Inspired by GLIBC stdio-common/tfformat.c */ typedef struct{ int line; _Decimal32 d; const char *expect; const char *format; const char *sf_format; } d32_type; d32_type printf_d32s[] = { /* Default precision. */ {__LINE__, 0.0004E-4DF, "0.00000004", "%.8Hf", "%.8f"}, {__LINE__, 123.456E-6DF, "0.000123", "%Hf", "%f"}, {__LINE__, 123.456E-6DF, "1.234560e-04", "%He", "%e"}, {__LINE__, 12.0E-15DF, "0.000000", "%Hf", "%f"}, {__LINE__, 12.0E-5DF, "0.000120", "%Hf", "%f"}, {__LINE__, 12.0E-15DF, "1.2e-14", "%Hg", "%g"}, {__LINE__, 0.E+0DF, "0.000000", "%Hf", "%f"}, {__LINE__, 1.E+2DF, "100.000000", "%Hf", "%f"}, {__LINE__, 12.0E+3DF, "1.200000e+04", "%He", "%e"}, {__LINE__, 12.000E+3DF, "1.200000e+04", "%He", "%e"}, {__LINE__, 12.0E+3DF, "12000.000000", "%Hf", "%f"}, {__LINE__, 1900000.E+2DF, "190000000.000000", "%Hf", "%f"}, {__LINE__, 1900000.E+2DF, "190000000", "%.Hf", "%.f"}, {__LINE__, 19.E+2DF, "1900.000000", "%Hf", "%f"}, /* Default precision. */ {__LINE__, 1.0E+2DF, "100.000000", "%Hf", "%f"}, /* Default precision. */ {__LINE__, 1.00E+2DF, "100.000000", "%Hf", "%f"}, {__LINE__, 23456.0E-3DF, "2.35e+01", "%.2He", "%.2e"}, {__LINE__, 23456.0E-3DF, "23.46", "%.2Hf", "%.2f"}, {__LINE__, 23456.E-3DF, "23.46", "%.2Hf", "%.2f"}, {__LINE__, 1234567.E0DF, "1234567.00", "%.2Hf", "%.2f"}, {__LINE__, 1234567.E0DF, "1234567.000000", "%Hf", "%f"}, /* Precision of '3'. */ {__LINE__, 123.456E+0DF, "123.456000", "%Hf", "%f"}, {__LINE__, 123.456E+0DF, "123.456", "%.3Hf", "%.3f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 1.000E+2DF, "100.000000", "%Hf", "%f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 100.0E+0DF, "100.000000", "%Hf", "%f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 0.0001000E+6DF, "100.000000", "%Hf", "%f"}, /* Implict precision of '4' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 1.000000E+2DF, "100.000000", "%Hf", "%f"}, /* Because of the 'e' output precision is '5'. */ {__LINE__, 123.456E+0DF, "1.234560e+02", "%He", "%e"}, {__LINE__, 123.456E+0DF, "1.23456e+02", "%.5He", "%.5e"}, {__LINE__, 123.456E+0DF, "1.234560E+02", "%HE", "%E"}, {__LINE__, 19000E+15DF, "19000000000000000000.000000", "%Hf", "%f"}, {__LINE__, 190001E+45DF, "190001000000000000000000000000000000000000000000000.000000", "%Hf", "%f"}, {__LINE__, -123.456E+0DF, "-1.234560e+02", "%He", "%e"}, /* Encoded as 1234567E1, prec 5*/ {__LINE__, 12.34567E+6DF, "12345670.000000", "%Hf", "%f"}, {__LINE__, 123.456E-5DF, "1.234560e-03", "%He", "%e"}, {__LINE__, 123.456E-5DF, "0.001235", "%Hf", "%f"}, {__LINE__, 123.456E-5DF, "0.00123456", "%Hg", "%g"}, {__LINE__, 123.456E-6DF, "1.234560e-04", "%He", "%e"}, {__LINE__, 123.456E-6DF, "0.000123", "%Hf", "%f"}, {__LINE__, 123.456E-6DF, "0.000123456", "%Hg", "%g"}, {__LINE__, 123.456E-7DF, "1.234560e-05", "%He", "%e"}, {__LINE__, 123.456E-7DF, "0.000012", "%Hf", "%f"}, {__LINE__, 123.456E-7DF, "1.23456e-05", "%Hg", "%g"}, {__LINE__, 123.456E-7DF, "1.235e-05", "%.4Hg", "%.4g"}, {__LINE__, 123.456E-9DF, "1.234560e-07", "%He", "%e"}, {__LINE__, 6.5DF, "6.5e+00", "%.1He", "%.1e"}, {__LINE__, 6.5DF, "6e+00", "%.0He", "%.0e"}, {__LINE__, 6.6DF, "7e+00", "%.0He", "%.0e"}, {__LINE__, 123.456E-9DF, "1.23456e-7", "%Ha", "%a"}, {__LINE__, 0.00000E-101DF, "0.000000e+00", "%He", "%e"}, /* Erroneously prints "1e+6" due to the '.' with no explicit precision. FIX * ME. */ {__LINE__, 6.0E5DF, "6e+5", "%.Ha", "%.a"}, {__LINE__, 6.0E5DF, "6e+5", "%.0Ha", "%.0a"}, {__LINE__, 6.E5DF, "6e+5", "%.0Ha", "%.0a"}, {__LINE__, 0.0e10DF, "0.000000e+00", "%He", "%e"}, {__LINE__, 0.0e10DF, "0.000000", "%Hf", "%f"}, {__LINE__, 0.0e10DF, "0", "%Hg", "%g"}, /* For 'g' when '#' is present the spec says that trailing zeros are NOT * removed. And YES, this SHOULD be five trailing zeros because this falls * into the category where 'g' is converted to 'e' and precision equals P - 1. * Additionally, the C-spec indicates that. This is congruent with how this * works for binary float. */ {__LINE__, 0.0e10DF, "0.00000", "%#Hg", NULL}, {__LINE__, 0.0e10DF, "0", "%.4Hg", "%.4g"}, /* (1,0,-1) */ {__LINE__, 0.0DF, "0.0", "%Ha", "%a"}, /* (1,0,0) */ {__LINE__, 0e0DF, "0", "%Ha", "%a"}, /* (1,0,0) */ {__LINE__, -0e0DF, "-0", "%Ha", "%a"}, /* (-1,0,-1) */ {__LINE__, -0.0DF, "-0.0", "%Ha", "%a"}, /* ( 1, 123, 0) */ {__LINE__, 123.DF, "123", "%Ha", "%a"}, /* (-1, 123, 0) -123 */ {__LINE__, -123.DF, "-123", "%Ha", "%a"}, /* ( 1, 123, -2) 1.23 */ {__LINE__, 1.23DF, "1.23", "%Ha", "%a"}, {__LINE__, 123E-2DF, "1.23", "%Ha", "%a"}, {__LINE__, 0.123E1DF, "1.23", "%Ha", "%a"}, /* ( 1, 123, 1) 1.23e+3 */ {__LINE__, 123e1DF, "1.23e+3", "%Ha", "%a"}, /* ( 1, 1230, 0) 1230 */ {__LINE__, 123.0e1DF, "1230", "%Ha", "%a"}, /* (-1, 123, 1) -1.23e+3 */ {__LINE__, -123e1DF, "-1.23e+3", "%Ha", "%a"}, /* ( 1, 123, -8) 0.00000123 */ {__LINE__, 123e-8DF, "0.00000123", "%Ha", "%a"}, {__LINE__, 123.e-8DF, "0.00000123", "%Ha", "%a"}, /* ( 1, 123, -9) 1.23e-7 */ {__LINE__, 123e-9DF, "1.23e-7", "%Ha", "%a"}, {__LINE__, 123.e-9DF, "1.23e-7", "%Ha", "%a"}, /* Can't represent the following in _Decimal32 */ /* ( 1, 1234567890123456, 0) 1234567890123456 */ /* ( 1, 1234567890123456, 1) 1.234567890123456e+16 */ /* ( 1, 1234567890123456, -1) 123456789012345.6 */ /* ( 1, 1234567890123456, -21) 0.000001234567890123456 */ /* ( 1, 1234567890123456, -22) 1.234567890123456e-7 */ /* ( 1, 0, 0) 0 */ {__LINE__, 0e0DF, "0", "%Ha", "%a"}, {__LINE__, 0.DF, "0", "%Ha", "%a"}, {__LINE__, 0.e0DF, "0", "%Ha", "%a"}, /* (-1, 0, 0) -0 */ {__LINE__, -0e0DF, "-0", "%Ha", "%a"}, {__LINE__, -0.DF, "-0", "%Ha", "%a"}, {__LINE__, -0.e0DF, "-0", "%Ha", "%a"}, /* ( 1, 5, -6) 0.000005 */ {__LINE__, 5e-6DF, "0.000005", "%Ha", "%a"}, /* ( 1, 50, -7) 0.0000050 */ {__LINE__, 50e-7DF, "0.0000050", "%Ha", "%a"}, /* ( 1, 5, -7) 5e-7 */ {__LINE__, 5e-7DF, "5e-7", "%Ha", "%a"}, /* Yes, goofy, but it is encoded 00000000e0. */ {__LINE__, 0.00e2DF, "0", "%Ha", "%a"}, /* Yes, goofy, but it is encoded 00000000e0. */ {__LINE__, 0.00e2DF, "0", "%.2Ha", "%.2a"}, /* Notice the '#'. The DFP spec doesn't speak about this and doesn't indicate * that this is supposed to work like it does for 'g' so we still expect to * see trailing zeros removed and no exponent. */ {__LINE__, 0.00e2DF, "0.", "%#Ha", NULL}, /* ( 1, 5, -7) */ {__LINE__, 5e-7DF, "5.e-7", "%#Ha", NULL}, {__LINE__, 6543.E-11DF, "6.543e-8", "%Ha", "%a"}, /* Continued DPF spec examples. */ {__LINE__, 6543.00DF, "6543.00", "%Ha", "%a"}, {__LINE__, 6543.00DF, "6543.00", "%.6Ha", "%.6a"}, {__LINE__, 6543.00DF, "6543.0", "%.5Ha", "%.5a"}, {__LINE__, 6543.09DF, "6543.1", "%.5Ha", "%.5a"}, {__LINE__, 6543.00DF, "6543", "%.4Ha", "%.4a"}, {__LINE__, 6543.00DF, "6.54e+3", "%.3Ha", "%.3a"}, {__LINE__, 6543.00DF, "6.5e+3", "%.2Ha", "%.2a"}, {__LINE__, 6543.00DF, "7e+3", "%.1Ha", "%.1a"}, {__LINE__, 6543.00DF, "7E+3", "%.1HA", "%.1A"}, {__LINE__, 6543.00DF, " 6543.00", "%8Ha", NULL}, /* The following have shown inconsistent results between soft-dfp and * hard-dfp. */ /* In reality this exceeds the ability of _Decimal32 to represent the exponent * so while it SHOULD be 0e-106 it really ends up being encoded as 0e-101 * because that is the min exponent. */ {__LINE__, 0.00000E-101DF, "0e-101", "%Ha", "%a"}, /* Likewise, this still exceeds. */ {__LINE__, 0.00000E-97DF, "0e-101", "%Ha", "%a"}, /* As shown, this is 0e-101 for real. */ {__LINE__, 0.00000E-96DF, "0e-101", "%Ha", "%a"}, {__LINE__, 0.00000E-95DF, "0e-100", "%Ha", "%a"}, {__LINE__, 0e10DF, "0e+10", "%Ha", "%a"}, {__LINE__, 0.0e10DF, "0e+9", "%.1Ha", "%.1a"}, {__LINE__, 0.0e-09DF, "0e-10", "%.0Ha", "%.0a"}, /* ( 1, 0, -6) 0.000000 */ {__LINE__, 0e-6DF, "0.000000", "%Ha", "%a"}, /* ( 1, 0, -7) 0e-7 */ {__LINE__, 0e-7DF, "0e-7", "%Ha", "%a"}, {__LINE__, 0.e-10DF, "0e-10", "%.1Ha", "%.1a"}, {__LINE__, 0.e-10DF, "0e-10", "%.3Ha", "%.3a"}, {__LINE__, 0.e-10DF, "0e-10", "%.4Ha", "%.4a"}, /* ( 1, 0, 2) 0e+2 encoded as 00000000e2. */ {__LINE__, 0e2DF, "0e+2", "%Ha", "%a"}, /* Yes, goofy, but it is encoded 00000000e1. */ {__LINE__, 0.0e2DF, "0e+1", "%Ha", "%a"}, {__LINE__, 0.0e10DF, "0e+9", "%Ha", "%a"}, {0,0,0,0,0 } }; typedef struct{ int line; _Decimal64 d; const char *expect; const char *format; const char *sf_format; } d64_type; d64_type printf_d64s[] = { /* Default precision. */ {__LINE__, 123.456E-6DD, "0.000123", "%Df", "%f"}, {__LINE__, 123.456E-6DD, "1.234560e-04", "%De", "%e"}, {__LINE__, 12.0E-15DD, "0.000000", "%Df", "%f"}, {__LINE__, 12.0E-5DD, "0.000120", "%Df", "%f"}, {__LINE__, 12.0E-15DD, "1.2e-14", "%Dg", "%g"}, {__LINE__, 0.E+0DD, "0.000000", "%Df", "%f"}, {__LINE__, 1.E+2DD, "100.000000", "%Df", "%f"}, {__LINE__, 12.0E+3DD, "1.200000e+04", "%De", "%e"}, {__LINE__, 12.000E+3DD, "1.200000e+04", "%De", "%e"}, {__LINE__, 12.0E+3DD, "12000.000000", "%Df", "%f"}, {__LINE__, 1900000.E+2DD, "190000000.000000", "%Df", "%f"}, {__LINE__, 1900000.E+2DD, "190000000", "%.Df", "%.f"}, {__LINE__, 19.E+2DD, "1900.000000", "%Df", "%f"}, /* Default precision. */ {__LINE__, 1.0E+2DD, "100.000000", "%Df", "%f"}, /* Default precision. */ {__LINE__, 1.00E+2DD, "100.000000", "%Df", "%f"}, {__LINE__, 23456.0E-3DD, "2.35e+01", "%.2De", "%.2e"}, {__LINE__, 23456.0E-3DD, "23.46", "%.2Df", "%.2f"}, {__LINE__, 23456.E-3DD, "23.46", "%.2Df", "%.2f"}, {__LINE__, 1234567.E0DD, "1234567.00", "%.2Df", "%.2f"}, {__LINE__, 1234567.E0DD, "1234567.000000", "%Df", "%f"}, /* Precision of '3'. */ {__LINE__, 123.456E+0DD, "123.456000", "%Df", "%f"}, {__LINE__, 123.456E+0DD, "123.456", "%.3Df", "%.3f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 1.000E+2DD, "100.000000", "%Df", "%f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 100.0E+0DD, "100.000000", "%Df", "%f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 0.0001000E+6DD, "100.000000", "%Df", "%f"}, /* Implict precision of '4' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 1.000000E+2DD, "100.000000", "%Df", "%f"}, /* Because of the 'e' output precision is '5'. */ {__LINE__, 123.456E+0DD, "1.234560e+02", "%De", "%e"}, {__LINE__, 123.456E+0DD, "1.23456e+02", "%.5De", "%.5e"}, {__LINE__, 123.456E+0DD, "1.234560E+02", "%DE", "%E"}, {__LINE__, 19000E+15DD, "19000000000000000000.000000", "%Df", "%f"}, {__LINE__, 190001E+45DD, "190001000000000000000000000000000000000000000000000.000000", "%Df", "%f"}, {__LINE__, -123.456E+0DD, "-1.234560e+02", "%De", "%e"}, /* Encoded as 1234567E1, prec 5*/ {__LINE__, 12.34567E+6DD, "12345670.000000", "%Df", "%f"}, {__LINE__, 123.456E-5DD, "1.234560e-03", "%De", "%e"}, {__LINE__, 123.456E-5DD, "0.001235", "%Df", "%f"}, {__LINE__, 123.456E-5DD, "0.00123456", "%Dg", "%g"}, {__LINE__, 123.456E-6DD, "1.234560e-04", "%De", "%e"}, {__LINE__, 123.456E-6DD, "0.000123", "%Df", "%f"}, {__LINE__, 123.456E-6DD, "0.000123456", "%Dg", "%g"}, {__LINE__, 123.456E-7DD, "1.234560e-05", "%De", "%e"}, {__LINE__, 123.456E-7DD, "0.000012", "%Df", "%f"}, {__LINE__, 123.456E-7DD, "1.23456e-05", "%Dg", "%g"}, {__LINE__, 123.456E-7DD, "1.235e-05", "%.4Dg", "%.4g"}, {__LINE__, 123.456E-9DD, "1.234560e-07", "%De", "%e"}, {__LINE__, 6.5DD, "6.5e+00", "%.1De", "%.1e"}, {__LINE__, 6.5DD, "6e+00", "%.0De", "%.0e"}, {__LINE__, 6.6DD, "7e+00", "%.0De", "%.0e"}, /* Erroneously prints "1e+6" due to the '.' with no explicit precision. Fix * ME. */ {__LINE__, 6.0E5DD, "6e+5", "%.Da", "%.a"}, {__LINE__, 123.456E-9DD, "1.23456e-7", "%Da", "%a"}, {__LINE__, 0.00000E-101DD, "0.000000e+00", "%De", "%e"}, {__LINE__, 0.e-101DD, "0e-101", "%Da", "%a"}, /* This returns 0e-106 because the zeros are significant. */ {__LINE__, 0.00000E-101DD, "0e-106", "%Da", "%a"}, {__LINE__, 0.0e10DD, "0.000000e+00", "%De", "%e"}, {__LINE__, 0.0e10DD, "0.000000", "%Df", "%f"}, {__LINE__, 0.0e10DD, "0", "%Dg", "%g"}, /* For 'g' when '#' is present the spec says that trailing zeros are NOT * removed. And YES, this SHOULD be five trailing zeros because this falls * into the category where 'g' is converted to 'e' and precision equals P - 1. * Additionally, the C-spec indicates that. This is congruent with how this * works for binary float. */ {__LINE__, 0.0e10DD, "0.00000", "%#Dg", NULL}, {__LINE__, 0.0e10DD, "0", "%.4Dg", "%.4g"}, /* (1,0,-1) */ {__LINE__, 0.0DD, "0.0", "%Da", "%a"}, {__LINE__, 0e10DD, "0e+10", "%Da", "%a"}, {__LINE__, 0.0e10DD, "0e+9", "%.1Da", "%.1a"}, {__LINE__, 0.0e-09DD, "0e-10", "%.0Da", "%.0a"}, /* (1,0,0) */ {__LINE__, 0e0DD, "0", "%Da", "%a"}, /* (1,0,0) */ {__LINE__, -0e0DD, "-0", "%Da", "%a"}, /* (-1,0,-1) */ {__LINE__, -0.0DD, "-0.0", "%Da", "%a"}, /* ( 1, 123, 0) */ {__LINE__, 123.DD, "123", "%Da", "%a"}, /* (-1, 123, 0) -123 */ {__LINE__, -123.DD, "-123", "%Da", "%a"}, /* ( 1, 123, -2) 1.23 */ {__LINE__, 1.23DD, "1.23", "%Da", "%a"}, {__LINE__, 123E-2DD, "1.23", "%Da", "%a"}, {__LINE__, 0.123E1DD, "1.23", "%Da", "%a"}, /* ( 1, 123, 1) 1.23e+3 */ {__LINE__, 123e1DD, "1.23e+3", "%Da", "%a"}, /* ( 1, 1230, 0) 1230 */ {__LINE__, 123.0e1DD, "1230", "%Da", "%a"}, /* (-1, 123, 1) -1.23e+3 */ {__LINE__, -123e1DD, "-1.23e+3", "%Da", "%a"}, /* ( 1, 123, -8) 0.00000123 */ {__LINE__, 123e-8DD, "0.00000123", "%Da", "%a"}, {__LINE__, 123.e-8DD, "0.00000123", "%Da", "%a"}, /* ( 1, 123, -9) 1.23e-7 */ {__LINE__, 123e-9DD, "1.23e-7", "%Da", "%a"}, {__LINE__, 123.e-9DD, "1.23e-7", "%Da", "%a"}, /* Can represent the following in _Decimal64 */ /* ( 1, 1234567890123456, 0) 1234567890123456 */ {__LINE__, 1234567890123456e0DD, "1234567890123456", "%Da", "%a"}, /* ( 1, 1234567890123456, 1) 1.234567890123456e+16 */ {__LINE__, 1234567890123456e1DD, "1.234567890123456e+16", "%Da", "%a"}, /* ( 1, 1234567890123456, -1) 123456789012345.6 */ {__LINE__, 1234567890123456e-1DD, "123456789012345.6", "%Da", "%a"}, /* ( 1, 1234567890123456, -21) 0.000001234567890123456 */ {__LINE__, 1234567890123456e-21DD, "0.000001234567890123456", "%Da", "%a"}, /* ( 1, 1234567890123456, -22) 1.234567890123456e-7 */ {__LINE__, 1234567890123456e-22DD, "1.234567890123456e-7", "%Da", "%a"}, /* ( 1, 0, 0) 0 */ {__LINE__, 0e0DD, "0", "%Da", "%a"}, {__LINE__, 0.DD, "0", "%Da", "%a"}, {__LINE__, 0.e0DD, "0", "%Da", "%a"}, /* (-1, 0, 0) -0 */ {__LINE__, -0e0DD, "-0", "%Da", "%a"}, {__LINE__, -0.DD, "-0", "%Da", "%a"}, {__LINE__, -0.e0DD, "-0", "%Da", "%a"}, /* ( 1, 0, -6) 0.000000 */ {__LINE__, 0e-6DD, "0.000000", "%Da", "%a"}, /* ( 1, 0, -7) 0e-7 */ {__LINE__, 0e-7DD, "0e-7", "%Da", "%a"}, {__LINE__, 0.e-10DD, "0e-10", "%.1Da", "%.1a"}, {__LINE__, 0.e-10DD, "0e-10", "%.3Da", "%.3a"}, {__LINE__, 0.e-10DD, "0e-10", "%.4Da", "%.4a"}, /* ( 1, 5, -6) 0.000005 */ {__LINE__, 5e-6DD, "0.000005", "%Da", "%a"}, /* ( 1, 50, -7) 0.0000050 */ {__LINE__, 50e-7DD, "0.0000050", "%Da", "%a"}, /* ( 1, 5, -7) 5e-7 */ {__LINE__, 5e-7DD, "5e-7", "%Da", "%a"}, /* ( 1, 0, 2) 0e+2 encoded as 00000000e2. */ {__LINE__, 0e2DD, "0e+2", "%Da", "%a"}, /* Yes, goofy, but it is encoded 00000000e1. */ {__LINE__, 0.0e2DD, "0e+1", "%Da", "%a"}, {__LINE__, 0.0e10DD, "0e+9", "%Da", "%a"}, /* Yes, goofy, but it is encoded 00000000e0. */ {__LINE__, 0.00e2DD, "0", "%Da", "%a"}, /* Yes, goofy, but it is encoded 00000000e0. */ {__LINE__, 0.00e2DD, "0", "%.2Da", "%.2a"}, /* Notice the '#'. The DDP spec doesn't speak about this and doesn't indicate * that this is supposed to work like it does for 'g' so we still expect to * see trailing zeros removed and no exponent. */ {__LINE__, 0.00e2DD, "0.", "%#Da", NULL}, /* ( 1, 5, -7) */ {__LINE__, 5e-7DD, "5.e-7", "%#Da", NULL}, {__LINE__, 6543.E-11DD, "6.543e-8", "%Da", "%a"}, /* Continued DPF spec examples. */ {__LINE__, 6543.00DD, "6543.00", "%Da", "%a"}, {__LINE__, 6543.00DD, "6543.00", "%.6Da", "%.6a"}, {__LINE__, 6543.00DD, "6543.0", "%.5Da", "%.5a"}, {__LINE__, 6543.00DD, "6543", "%.4Da", "%.4a"}, {__LINE__, 6543.00DD, "6.54e+3", "%.3Da", "%.3a"}, {__LINE__, 6543.00DD, "6.5e+3", "%.2Da", "%.2a"}, {__LINE__, 6543.00DD, "7e+3", "%.1Da", "%.1a"}, {__LINE__, 6543.00DD, "7E+3", "%.1DA", "%.1A"}, {__LINE__, 6543.00DD, " 6543.00", "%8Da", NULL}, {__LINE__, __DEC64_MAX__, "9.999999999999999e+384", "%.17Dg", "%.17g" }, {__LINE__, __DEC64_MAX__, "9.999999999999999e+384", "%Da", "%a" }, {__LINE__, __DEC64_MAX__, "1.000000e+385", "%De", "%e" }, {__LINE__, __DEC64_MAX__, "9.999999999999999e+384", "%.16Da", "%.16a" }, {__LINE__, __DEC64_MAX__, "1.00e+385", "%.3Da", "%.3a" }, {__LINE__, 9.999999999999999E16DD, "9.999999999999999e+16", "%.16Dg", "%.16g" }, {__LINE__, 9.999999999999999E23DD, "9.999999999999999e+23", "%.16Dg", "%.16g" }, {__LINE__, 9.999999999999999E300DD, "9.999999999999999e+300", "%.16Dg", "%.16g" }, {__LINE__, 9.999999999999999E360DD, "9.999999999999999e+360", "%.16Dg", "%.16g" }, {__LINE__, 9.999999999999999E369DD, "9.999999999999999e+369", "%.16Dg", "%.16g" }, {__LINE__, 9.999999999999999E370DD, "9.999999999999999e+370", "%.16Dg", "%.16g" }, {__LINE__, 9.999999999999999E379DD, "9.999999999999999e+379", "%.16Dg", "%.16g" }, {__LINE__, 9.999999999999999E380DD, "9.999999999999999e+380", "%.16Dg", "%.16g" }, {__LINE__, 9999999999999999E369DD, "9.999999999999999e+384", "%.16Dg", "%.16g" }, {__LINE__, 4E384DD, "4e+384", "%Dg", "%g" }, {__LINE__, 4E384DD, "4e+384", "%.Dg", "%.g" }, {0,0,0,0,0 } }; typedef struct{ int line; _Decimal128 d; const char *expect; const char *format; const char *sf_format; } d128_type; d128_type printf_d128s[] = { /* Default precision. */ {__LINE__, 123.456E-6DL, "0.000123", "%DDf", "%f"}, {__LINE__, 123.456E-6DL, "1.234560e-04", "%DDe", "%e"}, {__LINE__, 12.0E-15DL, "0.000000", "%DDf", "%f"}, {__LINE__, 12.0E-5DL, "0.000120", "%DDf", "%f"}, {__LINE__, 12.0E-15DL, "1.2e-14", "%DDg", "%g"}, {__LINE__, 0.E+0DL, "0.000000", "%DDf", "%f"}, {__LINE__, 1.E+2DL, "100.000000", "%DDf", "%f"}, {__LINE__, 12.0E+3DL, "1.200000e+04", "%DDe", "%e"}, {__LINE__, 12.000E+3DL, "1.200000e+04", "%DDe", "%e"}, {__LINE__, 12.0E+3DL, "12000.000000", "%DDf", "%f"}, {__LINE__, 1900000.E+2DL, "190000000.000000", "%DDf", "%f"}, {__LINE__, 1900000.E+2DL, "190000000", "%.DDf", "%.f"}, {__LINE__, 19.E+2DL, "1900.000000", "%DDf", "%f"}, /* Default precision. */ {__LINE__, 1.0E+2DL, "100.000000", "%DDf", "%f"}, /* Default precision. */ {__LINE__, 1.00E+2DL, "100.000000", "%DDf", "%f"}, {__LINE__, 23456.0E-3DL, "2.35e+01", "%.2DDe", "%.2e"}, {__LINE__, 23456.0E-3DL, "23.46", "%.2DDf", "%.2f"}, {__LINE__, 23456.E-3DL, "23.46", "%.2DDf", "%.2f"}, {__LINE__, 1234567.E0DL, "1234567.00", "%.2DDf", "%.2f"}, {__LINE__, 1234567.E0DL, "1234567.000000", "%DDf", "%f"}, /* Precision of '3'. */ {__LINE__, 123.456E+0DL, "123.456000", "%DDf", "%f"}, {__LINE__, 123.456E+0DL, "123.456", "%.3DDf", "%.3f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 1.000E+2DL, "100.000000", "%DDf", "%f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 100.0E+0DL, "100.000000", "%DDf", "%f"}, /* Implict precision of '1' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 0.0001000E+6DL, "100.000000", "%DDf", "%f"}, /* Implict precision of '4' since there is one explicit zero in the mantissa * right of the decimal place after it is adjusted for the exponent. */ {__LINE__, 1.000000E+2DL, "100.000000", "%DDf", "%f"}, /* Because of the 'e' output precision is '5'. */ {__LINE__, 123.456E+0DL, "1.234560e+02", "%DDe", "%e"}, {__LINE__, 123.456E+0DL, "1.23456e+02", "%.5DDe", "%.5e"}, {__LINE__, 123.456E+0DL, "1.234560E+02", "%DDE", "%E"}, {__LINE__, 19000E+15DL, "19000000000000000000.000000", "%DDf", "%f"}, {__LINE__, 190001E+45DL, "190001000000000000000000000000000000000000000000000.000000", "%DDf", "%f"}, {__LINE__, -123.456E+0DL, "-1.234560e+02", "%DDe", "%e"}, /* Encoded as 1234567E1, prec 5*/ {__LINE__, 12.34567E+6DL, "12345670.000000", "%DDf", "%f"}, {__LINE__, 123.456E-5DL, "1.234560e-03", "%DDe", "%e"}, {__LINE__, 123.456E-5DL, "0.001235", "%DDf", "%f"}, {__LINE__, 123.456E-5DL, "0.00123456", "%DDg", "%g"}, {__LINE__, 123.456E-6DL, "1.234560e-04", "%DDe", "%e"}, {__LINE__, 123.456E-6DL, "0.000123", "%DDf", "%f"}, {__LINE__, 123.456E-6DL, "0.000123456", "%DDg", "%g"}, {__LINE__, 123.456E-7DL, "1.234560e-05", "%DDe", "%e"}, {__LINE__, 123.456E-7DL, "0.000012", "%DDf", "%f"}, {__LINE__, 123.456E-7DL, "1.23456e-05", "%DDg", "%g"}, {__LINE__, 123.456E-7DL, "1.235e-05", "%.4DDg", "%.4g"}, {__LINE__, 123.456E-9DL, "1.234560e-07", "%DDe", "%e"}, {__LINE__, 6.5DL, "6.5e+00", "%.1DDe", "%.1e"}, {__LINE__, 6.5DL, "6e+00", "%.0DDe", "%.0e"}, {__LINE__, 6.6DL, "7e+00", "%.0DDe", "%.0e"}, /* Erroneously prints "1e+6" due to the '.' with no explicit precision. FIX * ME. */ {__LINE__, 6.0E5DL, "6e+5", "%.DDa", "%.a"}, {__LINE__, 123.456E-9DL, "1.23456e-7", "%DDa", "%a"}, {__LINE__, 0.00000E-101DL, "0.000000e+00", "%DDe", "%e"}, {__LINE__, 0.e-101DL, "0e-101", "%DDa", "%a"}, /* This returns 0e-106 because the zeros are significant. */ {__LINE__, 0.00000E-101DL, "0e-106", "%DDa", "%a"}, {__LINE__, 0.0e10DL, "0.000000e+00", "%DDe", "%e"}, {__LINE__, 0.0e10DL, "0.000000", "%DDf", "%f"}, {__LINE__, 0.0e10DL, "0", "%DDg", "%g"}, /* For 'g' when '#' is present the spec says that trailing zeros are NOT * removed. And YES, this SHOULD be five trailing zeros because this falls * into the category where 'g' is converted to 'e' and precision equals P - 1. * Additionally, the C-spec indicates that. This is congruent with how this * works for binary float. */ {__LINE__, 0.0e10DL, "0.00000", "%#DDg", NULL}, {__LINE__, 0.0e10DL, "0", "%.4DDg", "%.4g"}, /* (1,0,-1) */ {__LINE__, 0.0DL, "0.0", "%DDa", "%a"}, {__LINE__, 0e10DL, "0e+10", "%DDa", "%a"}, {__LINE__, 0.0e10DL, "0e+9", "%.1DDa", "%.1a"}, {__LINE__, 0.0e-09DL, "0e-10", "%.0DDa", "%.0a"}, /* (1,0,0) */ {__LINE__, 0e0DL, "0", "%DDa", "%a"}, /* (1,0,0) */ {__LINE__, -0e0DL, "-0", "%DDa", "%a"}, /* (-1,0,-1) */ {__LINE__, -0.0DL, "-0.0", "%DDa", "%a"}, /* ( 1, 123, 0) */ {__LINE__, 123.DL, "123", "%DDa", "%a"}, /* (-1, 123, 0) -123 */ {__LINE__, -123.DL, "-123", "%DDa", "%a"}, /* ( 1, 123, -2) 1.23 */ {__LINE__, 1.23DL, "1.23", "%DDa", "%a"}, {__LINE__, 123E-2DL, "1.23", "%DDa", "%a"}, {__LINE__, 0.123E1DL, "1.23", "%DDa", "%a"}, /* ( 1, 123, 1) 1.23e+3 */ {__LINE__, 123e1DL, "1.23e+3", "%DDa", "%a"}, /* ( 1, 1230, 0) 1230 */ {__LINE__, 123.0e1DL, "1230", "%DDa", "%a"}, /* (-1, 123, 1) -1.23e+3 */ {__LINE__, -123e1DL, "-1.23e+3", "%DDa", "%a"}, /* ( 1, 123, -8) 0.00000123 */ {__LINE__, 123e-8DL, "0.00000123", "%DDa", "%a"}, {__LINE__, 123.e-8DL, "0.00000123", "%DDa", "%a"}, /* ( 1, 123, -9) 1.23e-7 */ {__LINE__, 123e-9DL, "1.23e-7", "%DDa", "%a"}, {__LINE__, 123.e-9DL, "1.23e-7", "%DDa", "%a"}, /* Can represent the following in _Decimal128 */ /* ( 1, 1234567890123456, 0) 1234567890123456 */ {__LINE__, 1234567890123456e0DL, "1234567890123456", "%DDa", "%a"}, /* ( 1, 1234567890123456, 1) 1.234567890123456e+16 */ {__LINE__, 1234567890123456e1DL, "1.234567890123456e+16", "%DDa", "%a"}, /* ( 1, 1234567890123456, -1) 123456789012345.6 */ {__LINE__, 1234567890123456e-1DL, "123456789012345.6", "%DDa", "%a"}, /* ( 1, 1234567890123456, -21) 0.000001234567890123456 */ {__LINE__, 1234567890123456e-21DL, "0.000001234567890123456", "%DDa", "%a"}, /* ( 1, 1234567890123456, -22) 1.234567890123456e-7 */ {__LINE__, 1234567890123456e-22DL, "1.234567890123456e-7", "%DDa", "%a"}, /* ( 1, 0, 0) 0 */ {__LINE__, 0e0DL, "0", "%DDa", "%a"}, {__LINE__, 0.DL, "0", "%DDa", "%a"}, {__LINE__, 0.e0DL, "0", "%DDa", "%a"}, /* (-1, 0, 0) -0 */ {__LINE__, -0e0DL, "-0", "%DDa", "%a"}, {__LINE__, -0.DL, "-0", "%DDa", "%a"}, {__LINE__, -0.e0DL, "-0", "%DDa", "%a"}, /* ( 1, 0, -6) 0.000000 */ {__LINE__, 0e-6DL, "0.000000", "%DDa", "%a"}, /* ( 1, 0, -7) 0e-7 */ {__LINE__, 0e-7DL, "0e-7", "%DDa", "%a"}, {__LINE__, 0.e-10DL, "0e-10", "%.1DDa", "%.1a"}, {__LINE__, 0.e-10DL, "0e-10", "%.3DDa", "%.3a"}, {__LINE__, 0.e-10DL, "0e-10", "%.4DDa", "%.4a"}, /* ( 1, 5, -6) 0.000005 */ {__LINE__, 5e-6DL, "0.000005", "%DDa", "%a"}, /* ( 1, 50, -7) 0.0000050 */ {__LINE__, 50e-7DL, "0.0000050", "%DDa", "%a"}, /* ( 1, 5, -7) 5e-7 */ {__LINE__, 5e-7DL, "5e-7", "%DDa", "%a"}, /* ( 1, 0, 2) 0e+2 encoded as 00000000e2. */ {__LINE__, 0e2DL, "0e+2", "%DDa", "%a"}, /* Yes, goofy, but it is encoded 00000000e1. */ {__LINE__, 0.0e2DL, "0e+1", "%DDa", "%a"}, {__LINE__, 0.0e10DL, "0e+9", "%DDa", "%a"}, /* Yes, goofy, but it is encoded 00000000e0. */ {__LINE__, 0.00e2DL, "0", "%DDa", "%a"}, /* Yes, goofy, but it is encoded 00000000e0. */ {__LINE__, 0.00e2DL, "0", "%.2DDa", "%.2a"}, /* Notice the '#'. The DLP spec doesn't speak about this and doesn't indicate * that this is supposed to work like it does for 'g' so we still expect to * see trailing zeros removed and no exponent. */ {__LINE__, 0.00e2DL, "0.", "%#DDa", NULL}, /* ( 1, 5, -7) */ {__LINE__, 5e-7DL, "5.e-7", "%#DDa", NULL}, {__LINE__, 6543.E-11DL, "6.543e-8", "%DDa", "%a"}, /* Continued DPF spec examples. */ {__LINE__, 6543.00DL, "6543.00", "%DDa", "%a"}, {__LINE__, 6543.00DL, "6543.00", "%.6DDa", "%.6a"}, {__LINE__, 6543.00DL, "6543.0", "%.5DDa", "%.5a"}, {__LINE__, 6543.00DL, "6543", "%.4DDa", "%.4a"}, {__LINE__, 6543.00DL, "6.54e+3", "%.3DDa", "%.3a"}, {__LINE__, 6543.00DL, "6.5e+3", "%.2DDa", "%.2a"}, {__LINE__, 6543.00DL, "7e+3", "%.1DDa", "%.1a"}, {__LINE__, 6543.00DL, "7E+3", "%.1DDA", "%.1A"}, {__LINE__, 6543.00DL, "6543.00", "%.8DDa", "%.8a"}, /* Fixed by Andreas Schwab on 2010-20-04 */ {__LINE__, 0.9999999999DL, "1.000000", "%DDf", "%f"}, /* Caused a segv due to a the negative exponent generating a negative 'index'. * It was fixed by Andreas Krebbel on 2011-01-18 */ {__LINE__, (1.0DL / 1.000000e-123DL), "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000", "%DDf", "%f"}, {__LINE__, -1234.56789123456789123455678DL, "-1234.56789123", "%.8DDf", "%.8f"}, /* This prints like f/F but g/G computes precision based on all digits in * the mantissa, not just those to the right of the decimal place like * regular f/F. */ {__LINE__, -1234.56789123456789123455678DL, "-1234.5679", "%.8DDg", "%.8g"}, {__LINE__, -1234.56789123456789123455678DL, "-1234.56789123", "%.12DDg", "%.12g"}, /* This isn't properly rounding after the truncated. FIX ME. */ {__LINE__, -1234.56789123456789123455678DL, "-1234.57", "%DDg", "%g"}, {__LINE__, -1234.56789123456789123455678DL, "-1234.5679", "%.8DDa", "%.8a"}, {__LINE__, -1234.56789123456789123455678DL, "-1.234568e+03", "%.6DDe", "%.6e"}, {__LINE__, -1234.56789123456789123455678DL, "-1.23456789e+03", "%.8DDe", "%.8e"}, {0,0,0,0,0 } }; typedef struct{ int line; float f; _Decimal32 d; const char *expect; const char *format; } m32_type; m32_type printf_m32s[] = { {__LINE__, 1.0, 123.456E-6DL, "1.000000 0.000123", "%f %Hf"}, {0,0,0,0,0 } }; int main (void) { d32_type *d32ptr; d64_type *d64ptr; d128_type *d128ptr; m32_type *m32ptr; for (d32ptr = printf_d32s; d32ptr->line; d32ptr++) { _PC_P(__FILE__, d32ptr->line, d32ptr->expect, d32ptr->format, d32ptr->d); if (d32ptr->sf_format) _SFC_P(__FILE__, d32ptr->line, d32ptr->expect, d32ptr->sf_format, strfromd32, d32ptr->d); } for (d64ptr = printf_d64s; d64ptr->line; d64ptr++) { _PC_P(__FILE__,d64ptr->line, d64ptr->expect,d64ptr->format,d64ptr->d); if (d64ptr->sf_format) _SFC_P(__FILE__, d64ptr->line, d64ptr->expect, d64ptr->sf_format, strfromd64, d64ptr->d); } for (d128ptr = printf_d128s; d128ptr->line; d128ptr++) { _PC_P(__FILE__,d128ptr->line, d128ptr->expect,d128ptr->format,d128ptr->d); if (d128ptr->sf_format) _SFC_P(__FILE__, d128ptr->line, d128ptr->expect, d128ptr->sf_format, strfromd128, d128ptr->d); } for (m32ptr = printf_m32s; m32ptr->line; m32ptr++) { _PC_P(__FILE__, m32ptr->line, m32ptr->expect, m32ptr->format, \ m32ptr->f, m32ptr->d); } _REPORT(); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-setexp.c000066400000000000000000000126201504475242000166370ustar00rootroot00000000000000/* Unit test the internal getexpd[32|64|128]() functions. Copyright (C) 2014-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include #include #include /* DEC_NAN definition. */ #include #define _DECIMAL_SIZE 32 #define DEC_TYPE _Decimal32 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 64 #define DEC_TYPE _Decimal64 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _DECIMAL_SIZE 128 #define DEC_TYPE _Decimal128 #include #undef _DECIMAL_SIZE #undef DEC_TYPE #define _WANT_VC 1 /* Pick up the _VC_P(x,y,fmt) macro. */ #include "scaffold.c" /* Pick up the _VC_P(x,y,fmt) macro. */ /* We're going to be comparing fields so we need to extract the data. This is a * sneaky way to get around the fact that get_digits_d* isn't exported from * libdfp. */ #ifdef __DECIMAL_BID_FORMAT__ # include "../sysdeps/bid/bid-private.c" #else # include "../sysdeps/dpd/dpd-private.c" #endif typedef struct{ int line; _Decimal128 x; int e; _Decimal128 r; const char *format; } d128_type; #define RET128_MAX 6111 #define RET128_MIN -6143 #define RET128_MIN_SUB -6176 #define DEC128_TEST(__x, __e, __r) \ { __LINE__, __x, __e, __r, "%DDeDL" } static const d128_type d128[] = { DEC128_TEST (1E0DL, 1, 1E1DL), DEC128_TEST (1E0DL, 10, 1E10DL), DEC128_TEST (1E0DL, 100, 1E100DL), DEC128_TEST (1E100DL, 0, 1E0DL), DEC128_TEST (1E10DL, 0, 1E0DL), DEC128_TEST (1E1DL, 0, 1E0DL), DEC128_TEST (9999999999999999999999999999999999E0DL, 1, 9999999999999999999999999999999999E1DL), DEC128_TEST (9999999999999999999999999999999999E0DL, 10, 9999999999999999999999999999999999E10DL), DEC128_TEST (9999999999999999999999999999999999E0DL, 100, 9999999999999999999999999999999999E100DL) }; static const int d128_len = sizeof (d128) / sizeof (d128[0]); typedef struct { int line; _Decimal64 x; int e; _Decimal64 r; const char *format; } d64_type; #define RET64_MAX 369 #define RET64_MIN -383 #define RET64_MIN_SUB -398 #define DEC64_TEST(__x, __e, __r) \ { __LINE__, __x, __e, __r, "%DeDD" } static const d64_type d64[] = { DEC64_TEST (1E0DD, 1, 1E1DD), DEC64_TEST (1E0DD, 10, 1E10DD), DEC64_TEST (1E0DD, 100, 1E100DD), DEC64_TEST (1E100DD, 0, 1E0DD), DEC64_TEST (1E10DD, 0, 1E0DD), DEC64_TEST (1E1DD, 0, 1E0DD), DEC64_TEST (9999999999999999E0DD, 1, 9999999999999999E1DD), DEC64_TEST (9999999999999999E0DD, 10, 9999999999999999E10DD), DEC64_TEST (9999999999999999E0DD, 100, 9999999999999999E100DD) }; static const int d64_len = sizeof (d64) / sizeof (d64[0]); typedef struct { int line; _Decimal32 x; int e; _Decimal32 r; const char *format; } d32_type; #define RET32_MAX 90 #define RET32_MIN -95 #define RET32_MIN_SUB -101 #define DEC32_TEST(__x, __e, __r) \ { __LINE__, __x, __e, __r, "%HeDF" } static const d32_type d32[] = { DEC32_TEST (1E0DF, 1, 1E1DF), DEC32_TEST (1E0DF, 10, 1E10DF), DEC32_TEST (1E0DF, 90, 1E90DF), DEC32_TEST (1E90DF, 0, 1E0DF), DEC32_TEST (1E10DF, 0, 1E0DF), DEC32_TEST (1E1DF, 0, 1E0DF), DEC32_TEST (9999999E0DF, 1, 9999999E1DF), DEC32_TEST (9999999E0DF, 10, 9999999E10DF), DEC32_TEST (9999999E0DF, 90, 9999999E90DF) }; static const int d32_len = sizeof (d32) / sizeof (d32[0]); int main (void) { int i; for (i=0; i #include #include #include #define _WANT_PC #include "scaffold.c" struct test { int l; const char *fmt; const char *result; size_t n; size_t len; _Decimal32 d32; _Decimal64 d64; _Decimal128 d128; }; struct test tests[] = { /* Test some bogus input. We shouldn't crash, but the behavior in such cases is undefined. */ {__LINE__, "", "", 0, 0, 0, 0, 0}, {__LINE__, "", "", 5, 0, 0, 0, 0}, {__LINE__, "%", "", 0, 0, 0, 0, 0}, {__LINE__, "%", "", 5, 0, 0, 0, 0}, {__LINE__, "%.", "", 0, 0, 0, 0, 0}, {__LINE__, "%.", "", 5, 0, 0, 0, 0}, {__LINE__, "%.5", "", 0, 0, 0, 0, 0}, {__LINE__, "%.5", "", 5, 0, 0, 0, 0}, {__LINE__, "%.55", "", 0, 0, 0, 0, 0}, {__LINE__, "%.55", "", 5, 0, 0, 0, 0}, {__LINE__, "%Hd", "", 0, 0, 5, 5, 5}, {__LINE__, "%Hd", "", 5, 0, 5, 5, 5}, /* Note: if truncated, a NUL will be placed at the end of the buffer. */ {__LINE__, "%.6e", "1.23", 5, 12, 123456e10DF, 123456e10DD, 123456e10DL}, {__LINE__, 0, 0, 0, 0, 0, 0, 0} }; int main (void) { struct test *t = tests; for (; t->fmt; t++) { _SFC_P_N (__FILE__, t->l, t->result, t->fmt, strfromd32, t->d32, t->n, t->len); _SFC_P_N (__FILE__, t->l, t->result, t->fmt, strfromd64, t->d64, t->n, t->len); _SFC_P_N (__FILE__, t->l, t->result, t->fmt, strfromd128, t->d128, t->n, t->len); } /* Test for empty buffer length computations. */ _SFC_P_NULL (__FILE__, __LINE__, NULL, "%f", strfromd32, 1234567.DF, (size_t)14); _SFC_P_NULL (__FILE__, __LINE__, NULL, "%f", strfromd64, 1234567.DF, (size_t)14); _SFC_P_NULL (__FILE__, __LINE__, NULL, "%f", strfromd128, 1234567.DF, (size_t)14); /* And some bogus buffer, but n = 0. */ _SFC_P_NULL (__FILE__, __LINE__, (char*)1, "%f", strfromd32, 1234567.DF, (size_t)14); _SFC_P_NULL (__FILE__, __LINE__, (char*)1, "%f", strfromd64, 1234567.DF, (size_t)14); _SFC_P_NULL (__FILE__, __LINE__, (char*)1, "%f", strfromd128, 1234567.DF, (size_t)14); _REPORT (); return fail; } libdfp-1.0.17/tests/test-strtod.c000066400000000000000000000211531504475242000166470ustar00rootroot00000000000000/* Test strtod[32|64|128] facility. Copyright (C) 2010-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ # define __STDC_WANT_DEC_FP__ 1 #endif #include #include #include #include #include "decode.h" #define _WANT_VC 1 #define _WANT_DC 1 #include "scaffold.c" /* Inspired by GLIBC stdio-common/tfformat.c */ typedef struct{ int line; const char *input; _Decimal32 d32; _Decimal64 d64; _Decimal128 d128; size_t rem; } d_type; d_type strtods[] = { {__LINE__, "12.04", 12.04DF,12.04DD, 12.04DL, 0}, {__LINE__, "1.0", 1.0DF, 1.0DD, 1.0DL, 0}, {__LINE__, "1", 1.0DF, 1.0DD, 1.0DL, 0}, {__LINE__, "0", 0.0DF, 0.0DD, 0.0DL, 0}, {__LINE__, "0.0", 0.0DF, 0.0DD, 0.0DL, 0}, {__LINE__, "-0.0001", -0.0001DF, -0.0001DD, -0.0001DL, 0}, {__LINE__, "inf", DEC_INFINITY, DEC_INFINITY, DEC_INFINITY, 0}, {__LINE__, "INFINITY", DEC_INFINITY, DEC_INFINITY, DEC_INFINITY, 0}, {__LINE__, "0.0E+100", 0.0DF, 0.0DD, 0.0DL, 0}, {__LINE__, "0.01", 0.01DF, 0.01DD, 0.01DL, 0}, {__LINE__, "0.1", 0.1DF, 0.1DD, 0.1DL, 0}, {__LINE__, "0.11", 0.11DF, 0.11DD, 0.11DL, 0}, {__LINE__, "0.21", 0.21DF, 0.21DD, 0.21DL, 0}, {__LINE__, "0.999999", 0.999999DF, 0.999999DD, 0.999999DL, 0}, {__LINE__, "0.9999999", 0.9999999DF, 0.9999999DD, 0.9999999DL, 0}, {__LINE__, "0.99999999", 1.000000DF, 0.99999999DD, 0.99999999DL, 0}, {__LINE__, "0.999999999", 1.000000DF, 0.999999999DD, 0.999999999DL, 0}, {__LINE__, "19e9", 19000000000.0DF, 19000000000.0DD, 19000000000.0DL, 0}, {__LINE__, "3.14", 3.140000DF, 3.140000DD, 3.140000DL, 0}, {__LINE__, "3.14e-2", 0.031400DF, 0.031400DD, 0.031400DL, 0}, {__LINE__, "1234.5678910111213e-5", 0.01234568DF,0.01234567891011121DD, 0.012345678910111213DL, 0}, {__LINE__, "-1234.57", -1234.57DF, -1234.57DD, -1234.57DL, 0}, {__LINE__, "bogus", 0.DF, 0.DD, 0.DL, 5}, /* TS 18661-2 strtodN accepts only base-10 strings. */ {__LINE__, "0x123", 0.DF, 0.DD, 0.DL, 4}, {__LINE__, "0X123", 0.DF, 0.DD, 0.DL, 4}, {__LINE__, "1x123", 1.DF, 1.DD, 1.DL, 4}, {__LINE__, "1X123", 1.DF, 1.DD, 1.DL, 4}, {__LINE__, "10x123", 10.DF, 10.DD, 10.DL, 4}, {__LINE__, "10X123", 10.DF, 10.DD, 10.DL, 4}, {0,0,0,0,0,0 } }; const char DECLET32_NAN[] = "+0,000,000E-101"; const char DECLET64_NAN[] = "+0,000,000,000,000,000E-398"; const char DECLET128_NAN[] = "+0,000,000,000,000,000,000,000,000,000,000,000E-6176"; const char DECLET_ZERO_D32[] = "+0,000,000E+0"; const char DECLET_ZERO_D64[] = "+0,000,000,000,000,000E+0"; const char DECLET_HUGE_VAL_D32[] = "+0,000,000E-101"; const char DECLET_HUGE_VAL_D64[] = "+0,000,000,000,000,000E-398"; const char DECLET_HUGE_VAL_D128[] = "+0,000,000,000,000,000,000,000,000,000,000,000E-6176"; /* Inspired by GLIBC stdio-common/tfformat.c */ typedef struct{ int line; const char *input; const char *d32; const char *d64; const char *d128; } d_nan_type; d_nan_type strtods_nan[] = { /* Compare against the decoded declet for each representation of DEC_NAN * since you can't compare DEC_NAN to DEC_NAN. */ {__LINE__, "NaN", DECLET32_NAN, DECLET64_NAN, DECLET128_NAN}, {__LINE__, "4E-382", "+0,000,000E+0", "+0,000,000,000,000,004E-382", "+0,000,000,000,000,000,000,000,000,000,000,004E-382"}, /* __DEC64_SUBNORMAL_MIN__ */ {__LINE__, "0.000000000000001E-383", DECLET_ZERO_D32, "+0,000,000,000,000,001E-398", "+0,000,000,000,000,000,000,000,000,000,000,001E-398"}, /* This exceeds __DEC64_MIN_EXP__ so it can't be encoded in _Decimal64 and will underflow. */ {__LINE__, "4E-399", DECLET_ZERO_D32, "+0,000,000,000,000,000E+0", "+0,000,000,000,000,000,000,000,000,000,000,004E-399"}, {__LINE__, "4000000000000000E-383", DECLET_ZERO_D32, "+4,000,000,000,000,000E-383", "+0,000,000,000,000,000,004,000,000,000,000,000E-383"}, {__LINE__, "4000000000000000E-384", DECLET_ZERO_D32, "+4,000,000,000,000,000E-384", "+0,000,000,000,000,000,004,000,000,000,000,000E-384"}, {__LINE__, "4000000000000000E-398", DECLET_ZERO_D32, "+4,000,000,000,000,000E-398", "+0,000,000,000,000,000,004,000,000,000,000,000E-398"}, /* This exceeds __DEC64_MIN_EXP__ so it can't be encoded in _Decimal64 and will underflow. */ {__LINE__, "4000000000000000E-399", DECLET_ZERO_D32, DECLET_ZERO_D64, "+0,000,000,000,000,000,004,000,000,000,000,000E-399"}, /* This exceeds __DEC64_SUBNORMAL_MIN__ so it can't be encoded in _Decimal64 and will underflow. */ {__LINE__, "4E-400", DECLET_ZERO_D32, DECLET_ZERO_D64, "+0,000,000,000,000,000,000,000,000,000,000,004E-400"}, {__LINE__, "4E369", DECLET_HUGE_VAL_D32, "+0,000,000,000,000,004E+369", "+0,000,000,000,000,000,000,000,000,000,000,004E+369"}, {__LINE__, "4E383", DECLET_HUGE_VAL_D32, "+4,000,000,000,000,000E+368", "+0,000,000,000,000,000,000,000,000,000,000,004E+383"}, {__LINE__, "4E384", DECLET_HUGE_VAL_D32, "+4,000,000,000,000,000E+369", "+0,000,000,000,000,000,000,000,000,000,000,004E+384"}, {__LINE__, "4E385", DECLET_HUGE_VAL_D32, DECLET_HUGE_VAL_D64, "+0,000,000,000,000,000,000,000,000,000,000,004E+385"}, {__LINE__, "4E97", DECLET_HUGE_VAL_D32, "+0,000,000,000,000,004E+97", "+0,000,000,000,000,000,000,000,000,000,000,004E+97"}, {__LINE__, "4E6145",DECLET_HUGE_VAL_D32, DECLET_HUGE_VAL_D64, DECLET_HUGE_VAL_D128}, {__LINE__, "1.23456789E-7", "+1,234,568E-13", "+0,000,000,123,456,789E-15", "+0,000,000,000,000,000,000,000,000,123,456,789E-15" }, {__LINE__, "1234.5678910111213e-5", "+1,234,568E-8", "+1,234,567,891,011,121E-17", "+0,000,000,000,000,000,012,345,678,910,111,213E-18" }, {0,0,0,0,0 } }; // Validate the pointer returned in endptr is as expected. void check_endptr(const char *input, const char *endptr, size_t n, int line); void check_endptr(const char *input, const char *endptr, size_t n, int line) { size_t l = strlen(input); const char *input_end = input + l; if (endptr < input || endptr > input_end) { fprintf (stderr, "%-3d Error: *endptr is not within input string\n", testnum); fprintf (stderr, " in: %s:%d.\n\n",__FILE__,line); } else { size_t rem = input_end - endptr; if (rem != n) { fprintf (stderr, "%-3d Error: *endptr leaves %d characters. Expected %d.\n", testnum, (int) rem, (int) n); fprintf (stderr, "in: %s:%d.\n\n",__FILE__,line); } } } int main(void) { d_type *dptr; char *endptr = NULL; for (dptr = strtods; dptr->line; dptr++) { endptr = NULL; fprintf(stdout,"strtod32(\"%s\",NULL) == %Hf\n ",dptr->input,strtod32(dptr->input, NULL)); _VC_P(__FILE__,dptr->line,dptr->d32,strtod32(dptr->input,NULL), "%Hf"); _VC_P(__FILE__,dptr->line,dptr->d32,strtod32(dptr->input,&endptr), "%Hf"); check_endptr(dptr->input, endptr, dptr->rem, dptr->line); endptr = NULL; fprintf(stdout, "strtod64(\"%s\",NULL) == %Df\n ", dptr->input, strtod64(dptr->input, NULL)); _VC_P(__FILE__,dptr->line,dptr->d64, strtod64(dptr->input,NULL), "%Df"); _VC_P(__FILE__,dptr->line,dptr->d64, strtod64(dptr->input,&endptr), "%Df"); check_endptr(dptr->input, endptr, dptr->rem, dptr->line); endptr = NULL; fprintf(stdout, "strtod128(\"%s\",NULL) == %DDf\n ", dptr->input, strtod128(dptr->input, NULL)); _VC_P(__FILE__,dptr->line,dptr->d128, strtod128(dptr->input,NULL), "%DDf"); _VC_P(__FILE__,dptr->line,dptr->d128, strtod128(dptr->input,&endptr), "%DDf"); check_endptr(dptr->input, endptr, dptr->rem, dptr->line); } d_nan_type *dnanptr; for (dnanptr = strtods_nan; dnanptr->line; dnanptr++) { _DC_P(__FILE__,dnanptr->line,dnanptr->d32,strtod32(dnanptr->input,NULL)); _DC_P(__FILE__,dnanptr->line,dnanptr->d64, strtod64(dnanptr->input,NULL)); _DC_P(__FILE__,dnanptr->line,dnanptr->d128, strtod128(dnanptr->input,NULL)); } _REPORT(); /* fail comes from scaffold.c */ return fail; } libdfp-1.0.17/tests/test-type-conversions.c000066400000000000000000000055661504475242000206710ustar00rootroot00000000000000/* Unit test all casts from|to _Decimal32|64|128 types. Copyright (C) 2016 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif #include #define _WANT_PC 1 /* Pick up the _PC(x,y,...) macro. */ #include "scaffold.c" _Decimal32 castd128tod32 (_Decimal128 x); _Decimal64 castd128tod64 (_Decimal128 x); _Decimal32 castd64tod32 (_Decimal64 x); _Decimal128 castd64tod128 (_Decimal64 x); _Decimal64 castd32tod64 (_Decimal32 x); _Decimal128 castd32tod128 (_Decimal32 x); int main (void) { /* In case of a type cast from|to _Decimal32|64|128, gcc emits either the concrete instructions or a call to the corresponding trunc*|extend* functions, which are implemented in base-math/. If these functions also calls the same trunc*|extend* function, then the application segfaults due to endless recursive call. Thus this test checks the possible casts. */ { _Decimal128 in = 1.23DL; _Decimal32 out = castd128tod32 (in); _PC("1.23", "%.2Hf", out); } { _Decimal128 in = 1.23DL; _Decimal64 out = castd128tod64 (in); _PC("1.23", "%.2Df", out); } { _Decimal64 in = 1.23DD; _Decimal32 out = castd64tod32 (in); _PC("1.23", "%.2Hf", out); } { _Decimal64 in = 1.23DD; _Decimal128 out = castd64tod128 (in); _PC("1.23", "%.2DDf", out); } { _Decimal32 in = 1.23DF; _Decimal64 out = castd32tod64 (in); _PC("1.23", "%.2Df", out); } { _Decimal32 in = 1.23DF; _Decimal128 out = castd32tod128 (in); _PC("1.23", "%.2DDf", out); } _REPORT(); /* fail comes from scaffold.c */ return fail; } _Decimal32 castd128tod32 (_Decimal128 x) { return (_Decimal32) x; } _Decimal64 castd128tod64 (_Decimal128 x) { return (_Decimal64) x; } _Decimal32 castd64tod32 (_Decimal64 x) { return (_Decimal32) x; } _Decimal128 castd64tod128 (_Decimal64 x) { return (_Decimal128) x; } _Decimal64 castd32tod64 (_Decimal32 x) { return (_Decimal64) x; } _Decimal128 castd32tod128 (_Decimal32 x) { return (_Decimal128) x; } libdfp-1.0.17/tests/test-wchar.c000066400000000000000000000022151504475242000164320ustar00rootroot00000000000000/* Test wchar.h includes. Copyright (C) 2011-2015 Free Software Foundation, Inc. This file is part of the Decimal Floating Point C Library. Author(s): Ryan S. Arnold The Decimal Floating Point C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1. The Decimal Floating Point C 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 version 2.1 for more details. You should have received a copy of the GNU Lesser General Public License version 2.1 along with the Decimal Floating Point C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Please see libdfp/COPYING.txt for more information. */ #ifndef __STDC_WANT_DEC_FP__ #define __STDC_WANT_DEC_FP__ #endif /* In the past wchar.h was missing a #include */ #include int main(void) { return 0; } libdfp-1.0.17/tests/trunc.input000066400000000000000000000051501504475242000164220ustar00rootroot00000000000000# name trunc # arg1 decimal # ret decimal Inf Inf NO_INEXACT_EXCEPTION -Inf -Inf NO_INEXACT_EXCEPTION NaN NaN NO_INEXACT_EXCEPTION sNaN NaN NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.0 0.0 NO_INEXACT_EXCEPTION -0.0 -0.0 NO_INEXACT_EXCEPTION 0.2 0.0 NO_INEXACT_EXCEPTION -0.2 -0.0 NO_INEXACT_EXCEPTION 0.5 0.0 NO_INEXACT_EXCEPTION -0.5 -0.0 NO_INEXACT_EXCEPTION 0.8 0.0 NO_INEXACT_EXCEPTION -0.8 -0.0 NO_INEXACT_EXCEPTION 1.5 1.0 NO_INEXACT_EXCEPTION -1.5 -1.0 NO_INEXACT_EXCEPTION 0.1 0.0 NO_INEXACT_EXCEPTION 0.25 0.0 NO_INEXACT_EXCEPTION 0.625 0.0 NO_INEXACT_EXCEPTION -0.1 -0.0 NO_INEXACT_EXCEPTION -0.25 -0.0 NO_INEXACT_EXCEPTION -0.625 -0.0 NO_INEXACT_EXCEPTION 97152.5 97152.0 NO_INEXACT_EXCEPTION -97152.5 -97152.0 NO_INEXACT_EXCEPTION -370495.5 -370495.0 NO_INEXACT_EXCEPTION -370496.25 -370496.0 NO_INEXACT_EXCEPTION -370496.5 -370496.0 NO_INEXACT_EXCEPTION -370496.75 -370496.0 NO_INEXACT_EXCEPTION -370497.5 -370497.0 NO_INEXACT_EXCEPTION 2097152.5 2097152.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -2097152.5 -2097152.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370495.5 -3599627370495.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.25 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.5 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370496.75 -3599627370496.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -3599627370497.5 -3599627370497.0 decimal64 decimal128 NO_INEXACT_EXCEPTION -4503599627370495.5 -4503599627370495.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.25 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.5 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370496.75 -4503599627370496.0 decimal128 NO_INEXACT_EXCEPTION -4503599627370497.5 -4503599627370497.0 decimal128 NO_INEXACT_EXCEPTION